[cpl-plugin-sinfo] 01/02: New upstream version 2.4.0

Ole Streicher olebole-guest at moszumanska.debian.org
Wed Nov 27 15:46:29 UTC 2013


This is an automated email from the git hooks/post-receive script.

olebole-guest pushed a commit to branch debian
in repository cpl-plugin-sinfo.

commit 6989915b281ef3d6a03c3b858f03784b69f99a2c
Author: Ole Streicher <debian at liska.ath.cx>
Date:   Wed Nov 27 16:37:55 2013 +0100

    New upstream version 2.4.0
---
 ChangeLog                                          |    14 +
 Makefile.am                                        |     4 +-
 Makefile.in                                        |   162 +-
 acinclude.m4                                       |     9 +-
 aclocal.m4                                         |    85 +-
 admin/compile                                      |   232 +-
 admin/config.guess                                 |   449 +-
 admin/config.sub                                   |   227 +-
 admin/depcomp                                      |   190 +-
 admin/install-sh                                   |    29 +-
 admin/ltmain.sh                                    |  4017 ++++--
 admin/missing                                      |    53 +-
 calib/cal/REF_BP_MAP.fits                          |     2 +-
 calib/cal/SI_GATM_REF_CORR_HK_025.fits             |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_HK_100.fits             |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_H_025.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_H_100.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_J_025.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_J_100.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_K_025.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/SI_GATM_REF_CORR_K_100.fits              |   Bin 8640 -> 11520 bytes
 calib/cal/argonJ.fits                              |   Bin 8641 -> 11520 bytes
 calib/cal/atmoexan.fits                            |     2 +-
 calib/cal/drs_setup_wave.fits                      |   Bin 20160 -> 20160 bytes
 calib/cal/drs_setup_wave_oh.fits                   |   Bin 20160 -> 20160 bytes
 calib/cal/neonK.fits                               |   Bin 8641 -> 11520 bytes
 calib/cal/xenonHK.fits                             |   Bin 8640 -> 8640 bytes
 calib/cal/xenonargonH.fits                         |   Bin 14400 -> 14400 bytes
 calib/gasgano/config/SINFO.prefs                   |     2 +-
 config.h.in                                        |     3 +
 configure                                          |  8664 ++++++------
 configure.ac                                       |     4 +-
 html/bc_s.png                                      |   Bin 0 -> 680 bytes
 html/bdwn.png                                      |   Bin 0 -> 147 bytes
 html/closed.png                                    |   Bin 0 -> 132 bytes
 html/dir_5817a01c6dda84cccc27ae90d5d981a9.html     |   343 +
 html/dir_9dbeae34d65cadb5c6915b8c80494485.html     |    95 +
 html/dir_b351cdfeb4656d7d168dc72b273024e7.html     |    92 +
 html/doxygen.css                                   |   902 +-
 html/doxygen.png                                   |   Bin 1281 -> 3779 bytes
 html/dynsections.js                                |    78 +
 html/files.html                                    |   798 +-
 html/ftv2blank.png                                 |   Bin 0 -> 86 bytes
 html/ftv2cl.png                                    |   Bin 0 -> 453 bytes
 html/ftv2doc.png                                   |   Bin 0 -> 746 bytes
 html/ftv2folderclosed.png                          |   Bin 0 -> 616 bytes
 html/ftv2folderopen.png                            |   Bin 0 -> 597 bytes
 html/ftv2lastnode.png                              |   Bin 0 -> 86 bytes
 html/ftv2link.png                                  |   Bin 0 -> 746 bytes
 html/ftv2mlastnode.png                             |   Bin 0 -> 246 bytes
 html/ftv2mnode.png                                 |   Bin 0 -> 246 bytes
 html/ftv2mo.png                                    |   Bin 0 -> 403 bytes
 html/ftv2node.png                                  |   Bin 0 -> 86 bytes
 html/ftv2ns.png                                    |   Bin 0 -> 388 bytes
 html/ftv2plastnode.png                             |   Bin 0 -> 229 bytes
 html/ftv2pnode.png                                 |   Bin 0 -> 229 bytes
 html/ftv2splitbar.png                              |   Bin 0 -> 314 bytes
 html/ftv2vertline.png                              |   Bin 0 -> 86 bytes
 html/group__irplib__calib.html                     |   302 +-
 html/group__irplib__cat.html                       |   214 +-
 html/group__irplib__distortion.html                |    38 +-
 html/group__irplib__flat.html                      |   110 +-
 html/group__irplib__framelist.html                 |   858 +-
 html/group__irplib__oddeven.html                   |   103 +-
 html/group__irplib__plugin.html                    |    42 +-
 html/group__irplib__polynomial.html                |   190 +-
 html/group__irplib__ppm.html                       |   117 +-
 html/group__irplib__slitpos.html                   |    81 +-
 html/group__irplib__spectrum.html                  |   150 +-
 html/group__irplib__stdstar.html                   |   465 +-
 html/group__irplib__strehl.html                    |    38 +-
 html/group__irplib__utils.html                     |  1139 +-
 html/group__irplib__wavecal.html                   |   777 +-
 html/group__irplib__wcs.html                       |    38 +-
 html/group__irplib__wlxcorr.html                   |    42 +-
 html/group__sinfo__absolute.html                   |    38 +-
 html/group__sinfo__absolute__utils.html            |    40 +-
 html/group__sinfo__bad__pix__search.html           |   135 +-
 html/group__sinfo__balance.html                    |    40 +-
 html/group__sinfo__baryvel.html                    |    40 +-
 html/group__sinfo__boltzmann.html                  |   413 +-
 html/group__sinfo__coltilt.html                    |    40 +-
 html/group__sinfo__companion.html                  |    40 +-
 html/group__sinfo__cube__construct.html            |    40 +-
 html/group__sinfo__dark__cfg.html                  |    40 +-
 html/group__sinfo__detlin.html                     |    40 +-
 html/group__sinfo__dfs.html                        |    40 +-
 html/group__sinfo__distortion.html                 |    38 +-
 html/group__sinfo__dump.html                       |    40 +-
 html/group__sinfo__error.html                      |   432 +-
 html/group__sinfo__finddist__cfg.html              |    40 +-
 html/group__sinfo__fit.html                        |    40 +-
 html/group__sinfo__flat__cfg.html                  |    40 +-
 html/group__sinfo__flat__ini__file.html            |    40 +-
 html/group__sinfo__focus.html                      |    40 +-
 html/group__sinfo__function__1d.html               |    40 +-
 html/group__sinfo__globals.html                    |    40 +-
 html/group__sinfo__image__ops.html                 |    40 +-
 html/group__sinfo__img__noise.html                 |    38 +-
 html/group__sinfo__lamp__cfg.html                  |    40 +-
 html/group__sinfo__lamp__spec__config.html         |    40 +-
 html/group__sinfo__msg.html                        |   435 +-
 html/group__sinfo__new__bezier.html                |    40 +-
 html/group__sinfo__new__cube__ops.html             |    40 +-
 html/group__sinfo__new__resampling.html            |    40 +-
 html/group__sinfo__new__slit__pos.html             |    40 +-
 html/group__sinfo__pfits.html                      |    40 +-
 html/group__sinfo__pro__save.html                  |    40 +-
 html/group__sinfo__produc__config.html             |    40 +-
 html/group__sinfo__qr__companion.html              |    40 +-
 html/group__sinfo__rec__detlin.html                |    68 +-
 html/group__sinfo__rec__distortion.html            |    69 +-
 html/group__sinfo__rec__jitter.html                |    69 +-
 html/group__sinfo__rec__lingain.html               |    38 +-
 html/group__sinfo__rec__mdark.html                 |    69 +-
 html/group__sinfo__rec__mflat.html                 |    69 +-
 html/group__sinfo__rec__objnod.html                |    68 +-
 html/group__sinfo__rec__psf.html                   |    68 +-
 html/group__sinfo__rec__pupil.html                 |    68 +-
 html/group__sinfo__rec__stdstar.html               |    68 +-
 html/group__sinfo__rec__utils.html                 |    38 +-
 html/group__sinfo__rec__wavecal.html               |    69 +-
 html/group__sinfo__recipes.html                    |    40 +-
 html/group__sinfo__remove__crh__single.html        |    40 +-
 html/group__sinfo__shift__images.html              |    40 +-
 html/group__sinfo__skycor__config.html             |    40 +-
 html/group__sinfo__spectrum__ops.html              |    40 +-
 html/group__sinfo__step__distortion.html           |    38 +-
 html/group__sinfo__step__jitter.html               |    38 +-
 html/group__sinfo__step__objnod.html               |    38 +-
 html/group__sinfo__step__psf.html                  |    38 +-
 html/group__sinfo__step__stdstar.html              |    38 +-
 html/group__sinfo__tilt__cfg.html                  |    40 +-
 html/group__sinfo__time.html                       |    40 +-
 html/group__sinfo__tpl__dfs.html                   |    40 +-
 html/group__sinfo__tpl__utils.html                 |    38 +-
 html/group__sinfo__utilities.html                  |    40 +-
 html/group__sinfo__utils.html                      |    40 +-
 html/group__sinfo__utils__wrappers.html            |    40 +-
 html/group__sinfo__utl__bp__mask__add.html         |    39 +-
 html/group__sinfo__utl__cube2ima.html              |    69 +-
 html/group__sinfo__utl__cube2spectrum.html         |    69 +-
 html/group__sinfo__utl__cube__arith.html           |    69 +-
 html/group__sinfo__utl__cube__combine.html         |    69 +-
 html/group__sinfo__utl__cube__create.html          |    68 +-
 html/group__sinfo__utl__cube__test.html            |    68 +-
 html/group__sinfo__utl__eff.html                   |    68 +-
 html/group__sinfo__utl__illumcorr.html             |    40 +-
 html/group__sinfo__utl__ima__arith.html            |    68 +-
 html/group__sinfo__utl__ima__cube__ks__test.html   |    68 +-
 html/group__sinfo__utl__ima__gauss.html            |    68 +-
 html/group__sinfo__utl__ima__line__corr.html       |    68 +-
 html/group__sinfo__utl__remove__crh__single.html   |    68 +-
 html/group__sinfo__utl__skycor.html                |    68 +-
 html/group__sinfo__utl__skymap.html                |    68 +-
 ...info__utl__spectrum__divide__by__blackbody.html |    69 +-
 ...p__sinfo__utl__spectrum__wavelength__shift.html |    69 +-
 html/group__sinfo__utl__stdstars.html              |    38 +-
 html/group__sinfo__utl__table__ex.html             |    68 +-
 html/group__sinfo__utl__table__test.html           |    38 +-
 html/group__spiffi__general__config.html           |    40 +-
 html/index.html                                    |    50 +-
 html/irplib__calib_8c_source.html                  |  1217 +-
 html/irplib__calib_8h_source.html                  |   141 +-
 html/irplib__cat_8c_source.html                    |   841 +-
 html/irplib__cat_8h_source.html                    |   157 +-
 html/irplib__distortion_8c_source.html             |  2545 ++--
 html/irplib__distortion_8h_source.html             |   131 +-
 html/irplib__flat_8c_source.html                   |   695 +-
 html/irplib__flat_8h_source.html                   |   123 +-
 html/irplib__framelist_8c_source.html              |  1953 +--
 html/irplib__framelist_8h_source.html              |   257 +-
 html/irplib__hist_8c_source.html                   |   743 +-
 html/irplib__hist_8h_source.html                   |   229 +-
 html/irplib__ksigma__clip_8c_source.html           |   457 +-
 html/irplib__ksigma__clip_8h_source.html           |   147 +-
 html/irplib__ksigma__clip__body_8h_source.html     |   257 +-
 html/irplib__match__cats_8c_source.html            |   413 +-
 html/irplib__match__cats_8h_source.html            |   135 +-
 html/irplib__mkmaster_8c_source.html               |   981 +-
 html/irplib__mkmaster_8h_source.html               |   149 +-
 html/irplib__oddeven_8c_source.html                |   637 +-
 html/irplib__oddeven_8h_source.html                |   123 +-
 html/irplib__plugin_8c_source.html                 |  2094 +--
 html/irplib__plugin_8h_source.html                 |   229 +-
 html/irplib__polynomial_8c_source.html             |  2513 ++--
 html/irplib__polynomial_8h_source.html             |   183 +-
 html/irplib__ppm_8c_source.html                    |   949 +-
 html/irplib__ppm_8h_source.html                    |   123 +-
 html/irplib__slitpos_8c_source.html                |  1031 +-
 html/irplib__slitpos_8h_source.html                |   121 +-
 html/irplib__spectrum_8c_source.html               |  1149 +-
 html/irplib__spectrum_8h_source.html               |   161 +-
 html/irplib__stdstar_8c_source.html                |  1471 ++-
 html/irplib__stdstar_8h_source.html                |   203 +-
 html/irplib__strehl_8c_source.html                 |  1365 +-
 html/irplib__strehl_8h_source.html                 |   193 +-
 html/irplib__utils_8c_source.html                  |  2501 ++--
 html/irplib__utils_8h_source.html                  |   986 +-
 html/irplib__wavecal_8c_source.html                |  3101 ++---
 html/irplib__wavecal_8h_source.html                |   399 +-
 html/irplib__wavecal__impl_8h_source.html          |   155 +-
 html/irplib__wcs_8c_source.html                    |   633 +-
 html/irplib__wcs_8h_source.html                    |   175 +-
 html/irplib__wlxcorr_8c_source.html                |  2215 ++--
 html/irplib__wlxcorr_8h_source.html                |   189 +-
 html/jquery.js                                     |     8 +
 html/modules.html                                  |   252 +-
 html/nav_f.png                                     |   Bin 0 -> 153 bytes
 html/nav_g.png                                     |   Bin 0 -> 108 bytes
 html/nav_h.png                                     |   Bin 0 -> 98 bytes
 html/open.png                                      |   Bin 0 -> 123 bytes
 html/recipes_2sinfo__utl__cube2ima_8c_source.html  |   413 +-
 ...cipes_2sinfo__utl__cube2spectrum_8c_source.html |   561 +-
 ...recipes_2sinfo__utl__cube__arith_8c_source.html |   445 +-
 ...cipes_2sinfo__utl__cube__combine_8c_source.html |   479 +-
 ..._spectrum__divide__by__blackbody_8c_source.html |   395 +-
 ...utl__spectrum__wavelength__shift_8c_source.html |   425 +-
 html/sinfo__absolute_8c_source.html                |  6439 ++++-----
 html/sinfo__absolute_8h_source.html                |   321 +-
 html/sinfo__atmo__disp_8c_source.html              |   699 +-
 html/sinfo__atmo__disp_8h_source.html              |   183 +-
 html/sinfo__bad__cfg_8c_source.html                |   153 +-
 html/sinfo__bad__cfg_8h_source.html                |   265 +-
 html/sinfo__bad__ini_8h_source.html                |   153 +-
 html/sinfo__baddist__ini__by__cpl_8c_source.html   |   553 +-
 html/sinfo__baddist__ini__by__cpl_8h_source.html   |   155 +-
 html/sinfo__badnorm__ini__by__cpl_8c_source.html   |   601 +-
 html/sinfo__badnorm__ini__by__cpl_8h_source.html   |   143 +-
 html/sinfo__badsky__cfg_8c_source.html             |   149 +-
 html/sinfo__badsky__cfg_8h_source.html             |   257 +-
 html/sinfo__badsky__ini__by__cpl_8c_source.html    |   531 +-
 html/sinfo__badsky__ini__by__cpl_8h_source.html    |   143 +-
 html/sinfo__balance_8c_source.html                 |   303 +-
 html/sinfo__baryvel_8c_source.html                 |  2093 +--
 html/sinfo__baryvel_8h_source.html                 |   165 +-
 html/sinfo__boltzmann_8c_source.html               |  4595 +++----
 html/sinfo__bp__config_8c_source.html              |   167 +-
 html/sinfo__bp__config_8h_source.html              |   117 +-
 html/sinfo__bp__dist__config_8c_source.html        |   551 +-
 html/sinfo__bp__dist__config_8h_source.html        |   125 +-
 html/sinfo__bp__lin_8c_source.html                 |   749 +-
 html/sinfo__bp__lin_8h_source.html                 |   145 +-
 html/sinfo__bp__lin__config_8c_source.html         |   301 +-
 html/sinfo__bp__lin__config_8h_source.html         |   117 +-
 html/sinfo__bp__noise_8c_source.html               |   313 +-
 html/sinfo__bp__noise_8h_source.html               |   145 +-
 html/sinfo__bp__noise__config_8c_source.html       |   239 +-
 html/sinfo__bp__noise__config_8h_source.html       |   117 +-
 html/sinfo__bp__norm_8c_source.html                |   749 +-
 html/sinfo__bp__norm_8h_source.html                |   151 +-
 html/sinfo__bp__norm__config_8c_source.html        |   553 +-
 html/sinfo__bp__norm__config_8h_source.html        |   125 +-
 html/sinfo__bp__sky__config_8c_source.html         |   573 +-
 html/sinfo__bp__sky__config_8h_source.html         |   119 +-
 html/sinfo__coltilt_8c_source.html                 |  2269 ++--
 html/sinfo__coltilt_8h_source.html                 |   247 +-
 html/sinfo__companion_8c_source.html               |   119 +-
 html/sinfo__compare__tags_8h_source.html           |    99 +-
 html/sinfo__cpl__size_8h_source.html               |    77 +-
 html/sinfo__cube__construct_8c_source.html         |  6547 +++++-----
 html/sinfo__cube__construct_8h_source.html         |   315 +-
 html/sinfo__cubecreate__ini_8h_source.html         |   133 +-
 html/sinfo__dark__cfg_8c_source.html               |   149 +-
 html/sinfo__dark__cfg_8h_source.html               |   229 +-
 html/sinfo__dark__config_8c_source.html            |   441 +-
 html/sinfo__dark__config_8h_source.html            |   115 +-
 html/sinfo__dark__ini_8h_source.html               |   137 +-
 html/sinfo__dark__ini__by__cpl_8c_source.html      |   529 +-
 html/sinfo__dark__ini__by__cpl_8h_source.html      |   137 +-
 html/sinfo__define__opt_8h_source.html             |   101 +-
 html/sinfo__detlin_8c_source.html                  |  2263 ++--
 html/sinfo__detlin_8h_source.html                  |   277 +-
 html/sinfo__detlin__cfg_8c_source.html             |   145 +-
 html/sinfo__detlin__cfg_8h_source.html             |   217 +-
 html/sinfo__detlin__ini_8h_source.html             |   139 +-
 html/sinfo__detlin__ini__by__cpl_8c_source.html    |   479 +-
 html/sinfo__detlin__ini__by__cpl_8h_source.html    |   141 +-
 html/sinfo__detnoise__cfg_8c_source.html           |   149 +-
 html/sinfo__detnoise__cfg_8h_source.html           |   195 +-
 html/sinfo__detnoise__ini_8h_source.html           |   145 +-
 html/sinfo__detnoise__ini__by__cpl_8c_source.html  |   409 +-
 html/sinfo__detnoise__ini__by__cpl_8h_source.html  |   143 +-
 html/sinfo__dfs_8c_source.html                     |  8451 ++++++------
 html/sinfo__dfs_8h_source.html                     |   147 +-
 html/sinfo__distortion_8c_source.html              |  3037 ++---
 html/sinfo__distortion_8h_source.html              |   193 +-
 html/sinfo__distortion__config_8c_source.html      |  1117 +-
 html/sinfo__distortion__config_8h_source.html      |   107 +-
 html/sinfo__dump_8c_source.html                    |   771 +-
 html/sinfo__dump_8h_source.html                    |   211 +-
 html/sinfo__error_8h_source.html                   |   289 +-
 html/sinfo__fft__base_8c_source.html               |   393 +-
 html/sinfo__fft__base_8h_source.html               |   167 +-
 html/sinfo__file__handling_8c_source.html          |   143 +-
 html/sinfo__file__handling_8h_source.html          |    99 +-
 html/sinfo__finddist__cfg_8c_source.html           |   147 +-
 html/sinfo__finddist__cfg_8h_source.html           |   327 +-
 html/sinfo__finddist__ini_8h_source.html           |   137 +-
 html/sinfo__finddist__ini__by__cpl_8c_source.html  |   929 +-
 html/sinfo__finddist__ini__by__cpl_8h_source.html  |   137 +-
 html/sinfo__fit_8c_source.html                     |   787 +-
 html/sinfo__fit_8h_source.html                     |   119 +-
 html/sinfo__fit__curve_8c_source.html              |   303 +-
 html/sinfo__fit__curve_8h_source.html              |   157 +-
 html/sinfo__flat__cfg_8c_source.html               |   151 +-
 html/sinfo__flat__cfg_8h_source.html               |   331 +-
 html/sinfo__flat__ini_8c_source.html               |  1135 +-
 html/sinfo__flat__ini_8h_source.html               |   139 +-
 html/sinfo__flat__ini__by__cpl_8c_source.html      |   947 +-
 html/sinfo__flat__ini__by__cpl_8h_source.html      |   149 +-
 html/sinfo__focus_8c_source.html                   |  2757 ++--
 html/sinfo__focus_8h_source.html                   |   227 +-
 html/sinfo__focus__cfg_8c_source.html              |   149 +-
 html/sinfo__focus__cfg_8h_source.html              |   285 +-
 ...fo__focus__determination__config_8c_source.html |   623 +-
 ...fo__focus__determination__config_8h_source.html |   115 +-
 html/sinfo__focus__ini_8h_source.html              |   141 +-
 html/sinfo__focus__ini__by__cpl_8c_source.html     |   589 +-
 html/sinfo__focus__ini__by__cpl_8h_source.html     |   137 +-
 html/sinfo__function__1d_8c_source.html            |  1459 ++-
 html/sinfo__function__1d_8h_source.html            |   319 +-
 html/sinfo__functions_8h_source.html               |   589 +-
 html/sinfo__general__config_8c_source.html         |   225 +-
 html/sinfo__general__config_8h_source.html         |   117 +-
 html/sinfo__globals_8c_source.html                 |   381 +-
 html/sinfo__globals_8h_source.html                 |   409 +-
 html/sinfo__hidden_8h_source.html                  |   267 +-
 html/sinfo__image__ops_8c_source.html              |  6245 ++++-----
 html/sinfo__image__ops_8h_source.html              |   401 +-
 html/sinfo__img__noise_8c_source.html              |   291 +-
 html/sinfo__ipow_8c_source.html                    |   177 +-
 html/sinfo__ipow_8h_source.html                    |   127 +-
 html/sinfo__irplib__cpl__wrp_8h_source.html        |   151 +-
 html/sinfo__key__names_8h_source.html              |   499 +-
 html/sinfo__lamp__cfg_8c_source.html               |   149 +-
 html/sinfo__lamp__cfg_8h_source.html               |   203 +-
 html/sinfo__lamp__flats__config_8c_source.html     |   767 +-
 html/sinfo__lamp__flats__config_8h_source.html     |   121 +-
 ...nfo__lamp__flats__hidden__config_8c_source.html |   195 +-
 ...nfo__lamp__flats__hidden__config_8h_source.html |   121 +-
 html/sinfo__lamp__ini_8c_source.html               |   739 +-
 html/sinfo__lamp__ini_8h_source.html               |   137 +-
 html/sinfo__lamp__ini__by__cpl_8c_source.html      |   427 +-
 html/sinfo__lamp__ini__by__cpl_8h_source.html      |   133 +-
 html/sinfo__lamp__spec__config_8c_source.html      |   279 +-
 html/sinfo__lamp__spec__config_8h_source.html      |   113 +-
 html/sinfo__local__types_8h_source.html            |   305 +-
 html/sinfo__matrix_8c_source.html                  |   669 +-
 html/sinfo__matrix_8h_source.html                  |   257 +-
 html/sinfo__median_8c_source.html                  |   505 +-
 html/sinfo__median_8h_source.html                  |   217 +-
 html/sinfo__merge_8c_source.html                   |  1981 +--
 html/sinfo__merge_8h_source.html                   |   197 +-
 html/sinfo__msg_8c_source.html                     |   505 +-
 html/sinfo__msg_8h_source.html                     |   249 +-
 html/sinfo__new__add__bp__map_8c_source.html       |   583 +-
 html/sinfo__new__add__bp__map_8h_source.html       |   153 +-
 html/sinfo__new__bezier_8c_source.html             |  3096 ++---
 html/sinfo__new__bezier_8h_source.html             |   409 +-
 html/sinfo__new__cube__ops_8c_source.html          | 10047 +++++++-------
 html/sinfo__new__cube__ops_8h_source.html          |   643 +-
 html/sinfo__new__cubes__build_8c_source.html       |  1869 +--
 html/sinfo__new__cubes__build_8h_source.html       |   193 +-
 html/sinfo__new__cubes__coadd_8c_source.html       |  1309 +-
 html/sinfo__new__cubes__coadd_8h_source.html       |   183 +-
 html/sinfo__new__dark_8c_source.html               |  1461 ++-
 html/sinfo__new__dark_8h_source.html               |   171 +-
 html/sinfo__new__find__distortions_8c_source.html  |  1543 +--
 html/sinfo__new__find__distortions_8h_source.html  |   173 +-
 html/sinfo__new__lamp__flats_8c_source.html        |  2045 +--
 html/sinfo__new__lamp__flats_8h_source.html        |   197 +-
 html/sinfo__new__nst_8c_source.html                |   807 +-
 html/sinfo__new__nst_8h_source.html                |   217 +-
 html/sinfo__new__objnod_8c_source.html             |  1779 +--
 html/sinfo__new__objnod_8h_source.html             |   183 +-
 ...o__new__prepare__stacked__frames_8c_source.html |  2841 ++--
 ...o__new__prepare__stacked__frames_8h_source.html |   205 +-
 html/sinfo__new__psf_8c_source.html                |  5045 +++----
 html/sinfo__new__psf_8h_source.html                |   353 +-
 html/sinfo__new__resampling_8c_source.html         |   915 +-
 html/sinfo__new__resampling_8h_source.html         |   281 +-
 html/sinfo__new__slit__pos_8c_source.html          |  1479 ++-
 html/sinfo__new__slit__pos_8h_source.html          |   303 +-
 html/sinfo__new__stdstar_8c_source.html            |  1347 +-
 html/sinfo__new__stdstar_8h_source.html            |   179 +-
 html/sinfo__new__wave__cal__slit2_8c_source.html   |  1737 +--
 html/sinfo__new__wave__cal__slit2_8h_source.html   |   309 +-
 ...info__north__south__test__config_8c_source.html |   339 +-
 ...info__north__south__test__config_8h_source.html |   111 +-
 html/sinfo__ns__cfg_8c_source.html                 |   191 +-
 html/sinfo__ns__cfg_8h_source.html                 |   251 +-
 html/sinfo__ns__ini_8h_source.html                 |   145 +-
 html/sinfo__ns__ini__by__cpl_8c_source.html        |   731 +-
 html/sinfo__ns__ini__by__cpl_8h_source.html        |   145 +-
 html/sinfo__object__cfg_8c_source.html             |   193 +-
 html/sinfo__object__cfg_8h_source.html             |   335 +-
 html/sinfo__object__ini_8h_source.html             |   137 +-
 html/sinfo__objnod__config_8c_source.html          |   839 +-
 html/sinfo__objnod__config_8h_source.html          |   107 +-
 html/sinfo__objnod__ini__by__cpl_8c_source.html    |   853 +-
 html/sinfo__objnod__ini__by__cpl_8h_source.html    |   141 +-
 html/sinfo__objspider__config_8c_source.html       |   639 +-
 html/sinfo__objspider__config_8h_source.html       |   109 +-
 html/sinfo__objspider__ini__by__cpl_8c_source.html |   799 +-
 html/sinfo__objspider__ini__by__cpl_8h_source.html |   137 +-
 html/sinfo__pfits_8c_source.html                   |  1497 +--
 html/sinfo__pfits_8h_source.html                   |   297 +-
 html/sinfo__pixel__handling_8c_source.html         |   283 +-
 html/sinfo__pixel__handling_8h_source.html         |   133 +-
 html/sinfo__poly2d_8c_source.html                  |   155 +-
 html/sinfo__poly2d_8h_source.html                  |   191 +-
 ...prepare__stacked__frames__config_8c_source.html |   729 +-
 ...prepare__stacked__frames__config_8h_source.html |   109 +-
 html/sinfo__pro__save_8c_source.html               |  2109 +--
 html/sinfo__pro__save_8h_source.html               |   467 +-
 html/sinfo__pro__types_8h_source.html              |   425 +-
 html/sinfo__product__config_8c_source.html         |   173 +-
 html/sinfo__product__config_8h_source.html         |   117 +-
 html/sinfo__psf__cfg_8c_source.html                |   187 +-
 html/sinfo__psf__cfg_8h_source.html                |   227 +-
 html/sinfo__psf__config_8c_source.html             |   159 +-
 html/sinfo__psf__config_8h_source.html             |   107 +-
 html/sinfo__psf__ini_8h_source.html                |   137 +-
 html/sinfo__psf__ini__by__cpl_8c_source.html       |   421 +-
 html/sinfo__psf__ini__by__cpl_8h_source.html       |   129 +-
 html/sinfo__qr_8c_source.html                      |   565 +-
 html/sinfo__raw__types_8h_source.html              |   269 +-
 html/sinfo__rec__detlin_8c_source.html             |   547 +-
 html/sinfo__rec__distortion_8c_source.html         |  1667 +--
 html/sinfo__rec__jitter_8c_source.html             |   743 +-
 html/sinfo__rec__lingain_8c_source.html            |   377 +-
 html/sinfo__rec__mdark_8c_source.html              |   859 +-
 html/sinfo__rec__mdark__detmon_8c_source.html      |   217 +-
 html/sinfo__rec__mflat_8c_source.html              |   603 +-
 html/sinfo__rec__objnod_8c_source.html             |   609 +-
 html/sinfo__rec__psf_8c_source.html                |   625 +-
 html/sinfo__rec__pupil_8c_source.html              |   571 +-
 html/sinfo__rec__stdstar_8c_source.html            |   643 +-
 html/sinfo__rec__utils_8c_source.html              |  2773 ++--
 html/sinfo__rec__utils_8h_source.html              |   259 +-
 html/sinfo__rec__wavecal_8c_source.html            |   869 +-
 html/sinfo__recipes_8c_source.html                 |  2525 ++--
 html/sinfo__recipes_8h_source.html                 |   337 +-
 html/sinfo__ref__types_8h_source.html              |   135 +-
 html/sinfo__remove__crh__single_8c_source.html     |   977 +-
 html/sinfo__remove__crh__single_8h_source.html     |    57 +-
 html/sinfo__resampling_8c_source.html              |   589 +-
 html/sinfo__resampling_8h_source.html              |   213 +-
 html/sinfo__shift__images_8c_source.html           |  1509 +--
 html/sinfo__shift__images_8h_source.html           |   205 +-
 html/sinfo__skycor_8c_source.html                  | 13093 ++++++++++---------
 html/sinfo__skycor_8h_source.html                  |   257 +-
 html/sinfo__skycor__config_8c_source.html          |   461 +-
 html/sinfo__skycor__config_8h_source.html          |   117 +-
 html/sinfo__solve__poly__root_8c_source.html       |   285 +-
 html/sinfo__solve__poly__root_8h_source.html       |   197 +-
 html/sinfo__spectrum__ops_8c_source.html           |  4851 +++----
 html/sinfo__spectrum__ops_8h_source.html           |   431 +-
 html/sinfo__spiffi__types_8h_source.html           |   347 +-
 html/sinfo__stack__cfg_8c_source.html              |   161 +-
 html/sinfo__stack__cfg_8h_source.html              |   369 +-
 html/sinfo__stack__ini_8h_source.html              |   185 +-
 html/sinfo__stack__ini__by__cpl_8c_source.html     |  1299 +-
 html/sinfo__stack__ini__by__cpl_8h_source.html     |   157 +-
 html/sinfo__stacked__hidden__config_8c_source.html |   183 +-
 html/sinfo__stacked__hidden__config_8h_source.html |   109 +-
 html/sinfo__standard__star__config_8c_source.html  |   323 +-
 html/sinfo__standard__star__config_8h_source.html  |   109 +-
 html/sinfo__standstar__cfg_8c_source.html          |   195 +-
 html/sinfo__standstar__cfg_8h_source.html          |   313 +-
 html/sinfo__standstar__ini_8h_source.html          |   167 +-
 html/sinfo__standstar__ini__by__cpl_8c_source.html |   507 +-
 html/sinfo__standstar__ini__by__cpl_8h_source.html |   167 +-
 html/sinfo__star__index_8c_source.html             |   687 +-
 html/sinfo__star__index_8h_source.html             |   167 +-
 html/sinfo__step__distortion_8c_source.html        |   647 +-
 html/sinfo__step__jitter_8c_source.html            |   743 +-
 html/sinfo__step__objnod_8c_source.html            |   377 +-
 html/sinfo__step__psf_8c_source.html               |   405 +-
 html/sinfo__step__stdstar_8c_source.html           |   575 +-
 html/sinfo__svd_8c_source.html                     |   893 +-
 html/sinfo__svd_8h_source.html                     |   211 +-
 html/sinfo__tilt__cfg_8c_source.html               |   193 +-
 html/sinfo__tilt__cfg_8h_source.html               |   221 +-
 html/sinfo__tilt__ini_8h_source.html               |   147 +-
 html/sinfo__time_8c_source.html                    |   413 +-
 html/sinfo__time_8h_source.html                    |   117 +-
 html/sinfo__tpl__dfs_8c_source.html                |   495 +-
 html/sinfo__tpl__dfs_8h_source.html                |   191 +-
 html/sinfo__tpl__utils_8c_source.html              |   332 +-
 html/sinfo__tpl__utils_8h_source.html              |   173 +-
 html/sinfo__utilities_8c_source.html               |  2161 +--
 html/sinfo__utilities_8h_source.html               |   471 +-
 html/sinfo__utilities__scired_8c_source.html       |  3749 +++---
 html/sinfo__utilities__scired_8h_source.html       |   335 +-
 html/sinfo__utils_8c_source.html                   |   267 +-
 html/sinfo__utils_8h_source.html                   |   241 +-
 html/sinfo__utils__wrappers_8c_source.html         |   681 +-
 html/sinfo__utils__wrappers_8h_source.html         |   211 +-
 html/sinfo__utl__bp__mask__add_8c_source.html      |   515 +-
 html/sinfo__utl__cube2ima_8h_source.html           |   127 +-
 html/sinfo__utl__cube2spectrum_8h_source.html      |   131 +-
 html/sinfo__utl__cube__arith_8h_source.html        |   129 +-
 html/sinfo__utl__cube__combine_8h_source.html      |   129 +-
 html/sinfo__utl__cube__create_8c_source.html       |  1318 +-
 html/sinfo__utl__cube__test_8c_source.html         |   525 +-
 html/sinfo__utl__eff_8c_source.html                |   569 +-
 html/sinfo__utl__efficiency_8c_source.html         |  1361 +-
 html/sinfo__utl__efficiency_8h_source.html         |   225 +-
 html/sinfo__utl__illumcorr_8c_source.html          |  3901 +++---
 html/sinfo__utl__ima__arith_8c_source.html         |   817 +-
 .../sinfo__utl__ima__cube__ks__test_8c_source.html |  1761 +--
 html/sinfo__utl__ima__gauss_8c_source.html         |   881 +-
 html/sinfo__utl__ima__line__corr_8c_source.html    |   653 +-
 html/sinfo__utl__line__oh__select_8c_source.html   |   565 +-
 .../sinfo__utl__remove__crh__single_8c_source.html |   873 +-
 html/sinfo__utl__seds_8c_source.html               |   579 +-
 html/sinfo__utl__skycor_8c_source.html             |   689 +-
 html/sinfo__utl__skymap_8c_source.html             |   853 +-
 ..._spectrum__divide__by__blackbody_8h_source.html |   135 +-
 ...utl__spectrum__wavelength__shift_8h_source.html |   133 +-
 html/sinfo__utl__stdstars_8c_source.html           |   577 +-
 html/sinfo__utl__table__ex_8c_source.html          |   673 +-
 html/sinfo__utl__table__test_8c_source.html        |  2277 ++--
 html/sinfo__vltPort_8h_source.html                 |   245 +-
 html/sinfo__wave__calibration_8c_source.html       |  5287 ++++----
 html/sinfo__wave__calibration_8h_source.html       |   381 +-
 html/sinfo__wavecal_8c_source.html                 |  7191 +++++-----
 html/sinfo__wavecal_8h_source.html                 |   351 +-
 html/sinfo__wavecal__cfg_8c_source.html            |   189 +-
 html/sinfo__wavecal__cfg_8h_source.html            |   357 +-
 html/sinfo__wavecal__config_8c_source.html         |   879 +-
 html/sinfo__wavecal__config_8h_source.html         |   107 +-
 html/sinfo__wavecal__ini_8h_source.html            |   141 +-
 html/sinfo__wavecal__ini__by__cpl_8c_source.html   |  1101 +-
 html/sinfo__wavecal__ini__by__cpl_8h_source.html   |   133 +-
 html/sinfo__wcal__functions_8c_source.html         |   855 +-
 html/sinfo__wcal__functions_8h_source.html         |   179 +-
 html/sinfoni_2sinfo__utl__cube2ima_8c_source.html  |   503 +-
 ...nfoni_2sinfo__utl__cube2spectrum_8c_source.html |   989 +-
 ...sinfoni_2sinfo__utl__cube__arith_8c_source.html |   677 +-
 ...nfoni_2sinfo__utl__cube__combine_8c_source.html |   773 +-
 ..._spectrum__divide__by__blackbody_8c_source.html |   335 +-
 ...utl__spectrum__wavelength__shift_8c_source.html |   391 +-
 html/tab_a.png                                     |   Bin 0 -> 142 bytes
 html/tab_b.gif                                     |   Bin 35 -> 0 bytes
 html/tab_b.png                                     |   Bin 0 -> 167 bytes
 html/tab_h.png                                     |   Bin 0 -> 192 bytes
 html/tab_l.gif                                     |   Bin 706 -> 0 bytes
 html/tab_r.gif                                     |   Bin 2585 -> 0 bytes
 html/tab_s.png                                     |   Bin 0 -> 184 bytes
 html/tabs.css                                      |   132 +-
 irplib/Makefile.in                                 |    80 +-
 irplib/irplib_calib.c                              |     2 +-
 irplib/irplib_calib.h                              |     2 +-
 irplib/irplib_cat.c                                |     2 +-
 irplib/irplib_cat.h                                |     2 +-
 irplib/irplib_distortion.c                         |     2 +-
 irplib/irplib_distortion.h                         |     2 +-
 irplib/irplib_flat.c                               |     2 +-
 irplib/irplib_flat.h                               |     2 +-
 irplib/irplib_framelist.c                          |     2 +-
 irplib/irplib_framelist.h                          |     2 +-
 irplib/irplib_hist.c                               |    12 +-
 irplib/irplib_hist.h                               |     2 +-
 irplib/irplib_ksigma_clip.c                        |     2 +-
 irplib/irplib_ksigma_clip.h                        |     2 +-
 irplib/irplib_ksigma_clip_body.h                   |     2 +-
 irplib/irplib_match_cats.c                         |     2 +-
 irplib/irplib_match_cats.h                         |     2 +-
 irplib/irplib_mkmaster.c                           |     2 +-
 irplib/irplib_mkmaster.h                           |     2 +-
 irplib/irplib_oddeven.c                            |     2 +-
 irplib/irplib_oddeven.h                            |     2 +-
 irplib/irplib_plugin.c                             |    15 +-
 irplib/irplib_plugin.h                             |     2 +-
 irplib/irplib_polynomial.c                         |     2 +-
 irplib/irplib_polynomial.h                         |     2 +-
 irplib/irplib_ppm.c                                |     2 +-
 irplib/irplib_ppm.h                                |     2 +-
 irplib/irplib_slitpos.c                            |    12 +-
 irplib/irplib_slitpos.h                            |     2 +-
 irplib/irplib_spectrum.c                           |     2 +-
 irplib/irplib_spectrum.h                           |     2 +-
 irplib/irplib_stdstar.c                            |     2 +-
 irplib/irplib_stdstar.h                            |     2 +-
 irplib/irplib_strehl.c                             |     2 +-
 irplib/irplib_strehl.h                             |     2 +-
 irplib/irplib_utils.c                              |   187 +-
 irplib/irplib_utils.h                              |    87 +-
 irplib/irplib_wavecal.c                            |     2 +-
 irplib/irplib_wavecal.h                            |     2 +-
 irplib/irplib_wavecal_impl.h                       |     2 +-
 irplib/irplib_wcs.c                                |     2 +-
 irplib/irplib_wcs.h                                |     2 +-
 irplib/irplib_wlxcorr.c                            |     2 +-
 irplib/irplib_wlxcorr.h                            |     2 +-
 irplib/tests/Makefile.in                           |    92 +-
 irplib/tests/irplib_cat-test.c                     |     2 +-
 irplib/tests/irplib_polynomial-test.c              |     2 +-
 irplib/tests/irplib_utils-test.c                   |    40 +
 irplib/tests/irplib_wcs-test.c                     |     2 +-
 irplib/tests/irplib_wlxcorr-test.c                 |     2 +-
 m4macros/libtool.m4                                |  2248 ++--
 m4macros/ltoptions.m4                              |    32 +-
 m4macros/ltversion.m4                              |    12 +-
 m4macros/lt~obsolete.m4                            |    12 +-
 recipes/Makefile.am                                |    88 +-
 recipes/Makefile.in                                |   210 +-
 recipes/sinfo_rec_detlin.c                         |     2 +-
 recipes/sinfo_rec_distortion.c                     |    10 +-
 recipes/sinfo_rec_jitter.c                         |    10 +-
 recipes/sinfo_rec_mdark.c                          |     2 +-
 recipes/sinfo_rec_mflat.c                          |     2 +-
 recipes/sinfo_rec_pupil.c                          |     2 +-
 recipes/sinfo_rec_wavecal.c                        |     2 +-
 recipes/sinfo_utl_bp_mask_add.c                    |     2 +-
 recipes/sinfo_utl_cube2ima.c                       |     2 +-
 recipes/sinfo_utl_cube2spectrum.c                  |     2 +-
 recipes/sinfo_utl_cube_arith.c                     |     2 +-
 recipes/sinfo_utl_cube_combine.c                   |     2 +-
 recipes/sinfo_utl_cube_create.c                    |    13 +-
 recipes/sinfo_utl_ima_arith.c                      |     2 +-
 recipes/sinfo_utl_ima_line_corr.c                  |     2 +-
 recipes/sinfo_utl_line_oh_select.c                 |    10 +-
 recipes/sinfo_utl_skycor.c                         |    10 +-
 recipes/sinfo_utl_skymap.c                         |     2 +-
 recipes/sinfo_utl_spectrum_divide_by_blackbody.c   |     2 +-
 recipes/sinfo_utl_spectrum_wavelength_shift.c      |     2 +-
 recipes/tests/Makefile.am                          |     2 +-
 recipes/tests/Makefile.in                          |    75 +-
 recipes/tests/recipe_main.c                        |     2 +-
 reflex/Makefile.am                                 |    21 +
 {regtests/tests => reflex}/Makefile.in             |   196 +-
 reflex/sinfo.xml.in                                |  7127 ++++++++++
 reflex/sinfo_wkf.oca                               |   531 +
 regtests/Makefile.am                               |     2 +-
 regtests/Makefile.in                               |    63 +-
 regtests/tests/Makefile.am                         |     2 +-
 regtests/tests/Makefile.in                         |    48 +-
 setup                                              |     2 +-
 sinfoni/Makefile.am                                |     3 +-
 sinfoni/Makefile.in                                |    87 +-
 sinfoni/sinfo_baryvel.c                            |     2 +-
 sinfoni/sinfo_baryvel.h                            |     2 +-
 sinfoni/sinfo_bp_config.c                          |     2 +-
 sinfoni/sinfo_bp_config.h                          |     2 +-
 sinfoni/sinfo_bp_dist_config.c                     |     2 +-
 sinfoni/sinfo_bp_dist_config.h                     |     2 +-
 sinfoni/sinfo_bp_lin_config.c                      |     2 +-
 sinfoni/sinfo_bp_lin_config.h                      |     2 +-
 sinfoni/sinfo_bp_noise_config.c                    |     2 +-
 sinfoni/sinfo_bp_noise_config.h                    |     2 +-
 sinfoni/sinfo_bp_norm_config.c                     |     2 +-
 sinfoni/sinfo_bp_norm_config.h                     |     2 +-
 sinfoni/sinfo_bp_sky_config.c                      |     2 +-
 sinfoni/sinfo_bp_sky_config.h                      |     2 +-
 sinfoni/sinfo_dark_config.c                        |     2 +-
 sinfoni/sinfo_dark_config.h                        |     2 +-
 sinfoni/sinfo_dfs.c                                |    12 +-
 sinfoni/sinfo_dfs.h                                |     2 +-
 sinfoni/sinfo_distortion.c                         |     2 +-
 sinfoni/sinfo_distortion.h                         |     2 +-
 sinfoni/sinfo_distortion_config.c                  |     2 +-
 sinfoni/sinfo_distortion_config.h                  |     2 +-
 sinfoni/sinfo_dump.c                               |     2 +-
 sinfoni/sinfo_dump.h                               |     2 +-
 sinfoni/sinfo_error.h                              |     2 +-
 sinfoni/sinfo_focus_determination_config.c         |     2 +-
 sinfoni/sinfo_focus_determination_config.h         |     2 +-
 sinfoni/sinfo_functions.h                          |     2 +-
 sinfoni/sinfo_general_config.c                     |     2 +-
 sinfoni/sinfo_general_config.h                     |     2 +-
 sinfoni/sinfo_globals.h                            |    14 +-
 sinfoni/sinfo_hidden.h                             |     2 +-
 sinfoni/sinfo_key_names.h                          |     2 +-
 sinfoni/sinfo_lamp_flats_config.c                  |     2 +-
 sinfoni/sinfo_lamp_flats_config.h                  |     2 +-
 sinfoni/sinfo_lamp_spec_config.c                   |     2 +-
 sinfoni/sinfo_lamp_spec_config.h                   |     2 +-
 sinfoni/sinfo_msg.c                                |     2 +-
 sinfoni/sinfo_msg.h                                |     2 +-
 sinfoni/sinfo_new_bezier.c                         |    37 +-
 sinfoni/sinfo_new_cube_ops.c                       |    52 +-
 sinfoni/sinfo_new_cube_ops.h                       |     4 +-
 sinfoni/sinfo_new_prepare_stacked_frames.c         |  2340 ++--
 sinfoni/sinfo_new_slit_pos.c                       |    16 +-
 sinfoni/sinfo_north_south_test_config.c            |     2 +-
 sinfoni/sinfo_north_south_test_config.h            |     2 +-
 sinfoni/sinfo_objnod_config.c                      |     2 +-
 sinfoni/sinfo_objnod_config.h                      |     2 +-
 sinfoni/sinfo_objnod_ini_by_cpl.c                  |     4 +-
 sinfoni/sinfo_objspider_config.c                   |     2 +-
 sinfoni/sinfo_objspider_config.h                   |     2 +-
 sinfoni/sinfo_pfits.c                              |     2 +-
 sinfoni/sinfo_pfits.h                              |     2 +-
 sinfoni/sinfo_prepare_stacked_frames_config.c      |     2 +-
 sinfoni/sinfo_prepare_stacked_frames_config.h      |     2 +-
 sinfoni/sinfo_pro_save.c                           |    12 +-
 sinfoni/sinfo_pro_types.h                          |     2 +-
 sinfoni/sinfo_product_config.c                     |     2 +-
 sinfoni/sinfo_product_config.h                     |     2 +-
 sinfoni/sinfo_psf_config.c                         |     2 +-
 sinfoni/sinfo_psf_config.h                         |     2 +-
 sinfoni/sinfo_qr.c                                 |     2 +-
 sinfoni/sinfo_raw_types.h                          |     2 +-
 sinfoni/sinfo_rec_utils.c                          |    12 +-
 sinfoni/sinfo_rec_utils.h                          |     2 +-
 sinfoni/sinfo_ref_types.h                          |     2 +-
 sinfoni/sinfo_skycor.c                             |     2 +-
 sinfoni/sinfo_skycor.h                             |     2 +-
 sinfoni/sinfo_skycor_config.c                      |     2 +-
 sinfoni/sinfo_skycor_config.h                      |     2 +-
 sinfoni/sinfo_spectrum_ops.c                       |     4 +-
 sinfoni/sinfo_stacked_hidden_config.c              |     2 +-
 sinfoni/sinfo_stacked_hidden_config.h              |     2 +-
 sinfoni/sinfo_standard_star_config.c               |     2 +-
 sinfoni/sinfo_standard_star_config.h               |     2 +-
 sinfoni/sinfo_star_index.c                         |     2 +-
 sinfoni/sinfo_time.c                               |     2 +-
 sinfoni/sinfo_time.h                               |     2 +-
 sinfoni/sinfo_tpl_dfs.c                            |     2 +-
 sinfoni/sinfo_tpl_dfs.h                            |     2 +-
 sinfoni/sinfo_tpl_utils.c                          |     9 +-
 sinfoni/sinfo_tpl_utils.h                          |     2 +-
 sinfoni/sinfo_utilities.c                          |     2 +-
 sinfoni/sinfo_utilities.h                          |     2 +-
 sinfoni/sinfo_utilities_scired.c                   |    12 +-
 sinfoni/sinfo_utils.c                              |     2 +-
 sinfoni/sinfo_utils.h                              |     2 +-
 sinfoni/sinfo_utl_cube2ima.c                       |     2 +-
 sinfoni/sinfo_utl_cube2ima.h                       |     2 +-
 sinfoni/sinfo_utl_cube2spectrum.c                  |     2 +-
 sinfoni/sinfo_utl_cube2spectrum.h                  |     2 +-
 sinfoni/sinfo_utl_cube_arith.c                     |     2 +-
 sinfoni/sinfo_utl_cube_arith.h                     |     2 +-
 sinfoni/sinfo_utl_cube_combine.c                   |     2 +-
 sinfoni/sinfo_utl_cube_combine.h                   |     2 +-
 sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c   |     2 +-
 sinfoni/sinfo_utl_spectrum_divide_by_blackbody.h   |     2 +-
 sinfoni/sinfo_utl_spectrum_wavelength_shift.c      |     2 +-
 sinfoni/sinfo_utl_spectrum_wavelength_shift.h      |     2 +-
 sinfoni/sinfo_wavecal_config.c                     |     2 +-
 sinfoni/sinfo_wavecal_config.h                     |     2 +-
 sinfoni/sinfo_wcal_functions.c                     |    10 +-
 sinfoni/sinfo_wcal_functions.h                     |     2 +-
 sinfoni/tests/Makefile.am                          |     4 +-
 sinfoni/tests/Makefile.in                          |    91 +-
 sinfoni/tests/sinfo_cube_coadd_test.c              |    60 +-
 sinfoni/tests/sinfo_cube_ops_test.c                |     2 +-
 sinfoni/tests/sinfo_efficiency_test.c              |    36 +-
 sinfoni/tests/sinfo_image_ops_test.c               |     2 +-
 sinfoni/tests/sinfo_kappa_sigma_test.c             |    57 +-
 sinfoni/tests/sinfo_line_corr_test.c               |    17 +-
 sinfoni/tests/sinfo_skycor_test.c                  |     2 +-
 sinfoni/tests/sinfo_star_catalog.c                 |    40 +-
 sinfoni/tests/sinfo_star_index_test.c              |    23 +-
 sinfoni/tests/sinfo_strehl_test.c                  |   106 +-
 sinfoni/tests/sinfo_table_ops_test.c               |    13 +-
 sinfoni/tests/test_atmo_disp.c                     |    22 +-
 761 files changed, 172890 insertions(+), 147453 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7720670..68a3162 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2.4.0            Updated release id to final       
+2.3.9            Removed PSF fit and spectra extraction for science objects to increase robustness in some cases.
+                 Fixed OCA rules warnings.
+2.3.8            Upgraded to Reflex 2.5
+2.3.7            Changed sinfom dir structure to standard to easy generation of reflex tutorial                                          
+2.3.6                                          
+                 "Fix CPPFLAGS not propagated to sinfo build (PIPE-4725)"
+                 "Fix inplicit function declaration in test program (PIPE-4724)"
+                 "Fix add the cpl libraries to the recipe.so and test program (PIPE-4723)"
+                 "Fix non-static format strings compiler problems (PIPE-4722)"
+2.3.6            Removed not needed inputs in OCA rules (used by QC to pack data for jitter recipes)
+                 Added STD_STAR_PECTRA as output of jitter recipe also in case of OBJECT input data.
+2.3.5            cleaned wokf and wkf-oca rules      
+2.3.4            Added simple reflex workflow support
 2.3.3            Added optional reading of REF_LINE_OH
 2.3.2            Clean static errors from Jenkins
 2.3.1            Updated id for DFO                         
diff --git a/Makefile.am b/Makefile.am
index 387a8dc..2ef2647 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,10 +28,10 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-maintainer-mode
 
 COMPILE_FIRST = 
 
-TOPSUBDIRS = irplib sinfoni recipes regtests
+TOPSUBDIRS = irplib sinfoni recipes regtests reflex
 
 #COMPILE_LAST = sinfoni/tests
-COMPILE_LAST = 
+COMPILE_LAST =  
 
 
 HTML_SUBDIRS =
diff --git a/Makefile.in b/Makefile.in
index a8975fd..0b20791 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -70,6 +87,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -91,6 +113,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(pipedocsdir)"
 DATA = $(pipedocs_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -105,9 +133,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -136,6 +166,8 @@ am__relativize = \
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -156,6 +188,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -196,6 +229,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -208,6 +242,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -230,6 +265,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -265,7 +301,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -288,12 +323,14 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 ACLOCAL_AMFLAGS = -I m4macros
 DISTCLEANFILES = *~ .logfile
 DISTCHECK_CONFIGURE_FLAGS = --enable-maintainer-mode
 COMPILE_FIRST = 
-TOPSUBDIRS = irplib sinfoni recipes regtests
+TOPSUBDIRS = irplib sinfoni recipes regtests reflex
 
 #COMPILE_LAST = sinfoni/tests
 COMPILE_LAST = 
@@ -310,7 +347,7 @@ all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
-am--refresh:
+am--refresh: Makefile
 	@:
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/admin/html.am $(am__configure_deps)
 	@for dep in $?; do \
@@ -335,6 +372,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
 	esac;
+$(top_srcdir)/admin/html.am:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -346,10 +384,8 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-	@if test ! -f $@; then \
-	  rm -f stamp-h1; \
-	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-	else :; fi
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
@@ -376,8 +412,11 @@ distclean-libtool:
 	-rm -f libtool config.lt
 install-pipedocsDATA: $(pipedocs_DATA)
 	@$(NORMAL_INSTALL)
-	test -z "$(pipedocsdir)" || $(MKDIR_P) "$(DESTDIR)$(pipedocsdir)"
 	@list='$(pipedocs_DATA)'; test -n "$(pipedocsdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pipedocsdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pipedocsdir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -391,9 +430,7 @@ uninstall-pipedocsDATA:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pipedocs_DATA)'; test -n "$(pipedocsdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pipedocsdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pipedocsdir)" && rm -f $$files
+	dir='$(DESTDIR)$(pipedocsdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -402,7 +439,7 @@ uninstall-pipedocsDATA:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -427,7 +464,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -565,13 +602,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -595,7 +629,8 @@ distdir: $(DISTFILES)
 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
 	  dist-hook
 	-test -n "$(am__skip_mode_fix)" \
-	|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
 	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
@@ -605,7 +640,11 @@ dist-gzip: distdir
 	$(am__remove_distdir)
 
 dist-bzip2: distdir
-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
 	$(am__remove_distdir)
 
 dist-lzma: distdir
@@ -613,7 +652,7 @@ dist-lzma: distdir
 	$(am__remove_distdir)
 
 dist-xz: distdir
-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
 	$(am__remove_distdir)
 
 dist-tarZ: distdir
@@ -639,21 +678,23 @@ dist dist-all: distdir
 distcheck: dist
 	case '$(DIST_ARCHIVES)' in \
 	*.tar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
 	*.tar.bz2*) \
-	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
-	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
 	*.tar.xz*) \
 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
-	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
 	*.zip*) \
 	  unzip $(distdir).zip ;;\
 	esac
-	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	chmod -R a-w $(distdir); chmod u+w $(distdir)
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
 	chmod a-w $(distdir)
@@ -663,6 +704,7 @@ distcheck: dist
 	  && am__cwd=`pwd` \
 	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -691,8 +733,16 @@ distcheck: dist
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@$(am__cd) '$(distuninstallcheck_dir)' \
-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
 	          echo "  (check DESTDIR support)"; \
@@ -726,10 +776,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -815,19 +870,20 @@ uninstall-am: uninstall-local uninstall-pipedocsDATA
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	clean-libtool clean-local ctags ctags-recursive dist dist-all \
-	dist-bzip2 dist-gzip dist-hook dist-lzma dist-shar dist-tarZ \
-	dist-xz dist-zip distcheck distclean distclean-generic \
-	distclean-hdr distclean-libtool distclean-tags distcleancheck \
-	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-data install-data-am \
-	install-dvi install-dvi-am install-exec install-exec-am \
-	install-html install-html-am install-info install-info-am \
-	install-man install-pdf install-pdf-am install-pipedocsDATA \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs installdirs-am maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-	uninstall uninstall-am uninstall-local uninstall-pipedocsDATA
+	dist-bzip2 dist-gzip dist-hook dist-lzip dist-lzma dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-pipedocsDATA install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-local uninstall-pipedocsDATA
 
 
 @MAINTAINER_MODE_TRUE at clean-local: clean-html
diff --git a/acinclude.m4 b/acinclude.m4
index 1344684..02b4b11 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -233,14 +233,21 @@ AC_DEFUN([SINFONI_SET_PATHS],
        configdir='${datadir}/${PACKAGE}/config'
     fi
 
+    if test -z "$wkfextradir"; then
+        wkfextradir='${datadir}/esopipes/${PACKAGE}-${VERSION}/reflex'
+    fi
 
+    if test -z "$wkfcopydir"; then
+        wkfcopydir='${datadir}/reflex/workflows/${PACKAGE}-${VERSION}'
+    fi
 
     AC_SUBST(plugindir)
     AC_SUBST(privatelibdir)
     AC_SUBST(htmldir)
     AC_SUBST(pipedocsdir)
     AC_SUBST(configdir)
-
+    AC_SUBST(wkfextradir)
+    AC_SUBST(wkfcopydir)
 
     # Define a preprocesor symbol for the plugin search paths
 
diff --git a/aclocal.m4 b/aclocal.m4
index fa9dd34..9cad510 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,18 +14,21 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
-[m4_warning([this file was generated for autoconf 2.63.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
@@ -34,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11], [],
+m4_if([$1], [1.11.6], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -50,19 +54,21 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11])dnl
+[AM_AUTOMAKE_VERSION([1.11.6])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
 # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
@@ -144,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 12
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -191,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -255,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -320,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK],
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
@@ -407,20 +417,19 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 ])
 
 
-# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+# Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2010
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 AC_DEFUN([AM_WITH_DMALLOC],
 [AC_MSG_CHECKING([if malloc debugging is wanted])
 AC_ARG_WITH(dmalloc,
-[  --with-dmalloc          use dmalloc, as in
-			  http://www.dmalloc.com/dmalloc.tar.gz],
+[  --with-dmalloc          use dmalloc, as in http://www.dmalloc.com],
 [if test "$withval" = yes; then
   AC_MSG_RESULT(yes)
   AC_DEFINE(WITH_DMALLOC,1,
@@ -573,12 +582,15 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -618,8 +630,8 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
+# 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -639,7 +651,7 @@ AC_DEFUN([AM_MAINTAINER_MODE],
        [disable], [m4_define([am_maintainer_other], [enable])],
        [m4_define([am_maintainer_other], [enable])
         m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
   dnl maintainer-mode's default is 'disable' unless 'enable' is passed
   AC_ARG_ENABLE([maintainer-mode],
 [  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
@@ -785,12 +797,15 @@ else
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check for `mkdir -p'.
@@ -813,13 +828,14 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -827,13 +843,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
 [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -909,12 +925,14 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
@@ -937,13 +955,13 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -952,13 +970,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -980,10 +998,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
diff --git a/admin/compile b/admin/compile
index ec64c62..862a14e 100755
--- a/admin/compile
+++ b/admin/compile
@@ -1,10 +1,10 @@
 #! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
+# Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-03-05.13; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
-# Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
+# Software Foundation, Inc.
 # Written by Tom Tromey <tromey at cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -29,21 +29,219 @@ scriptversion=2009-04-28.21; # UTC
 # bugs to <bug-automake at gnu.org> or send patches to
 # <automake-patches at gnu.org>.
 
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
     cat <<\EOF
 Usage: compile [--help] [--version] PROGRAM [ARGS]
 
-Wrapper for compilers which do not understand `-c -o'.
-Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
 arguments, and rename the output as expected.
 
 If you are trying to build a whole package this is not the
-right script to run: please start by reading the file `INSTALL'.
+right script to run: please start by reading the file 'INSTALL'.
 
 Report bugs to <bug-automake at gnu.org>.
 EOF
@@ -53,11 +251,13 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
 esac
 
 ofile=
 cfile=
-eat=
 
 for arg
 do
@@ -66,8 +266,8 @@ do
   else
     case $1 in
       -o)
-	# configure might choose to run compile as `compile cc -o foo foo.c'.
-	# So we strip `-o arg' only if arg is an object.
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
 	eat=1
 	case $2 in
 	  *.o | *.obj)
@@ -94,10 +294,10 @@ do
 done
 
 if test -z "$ofile" || test -z "$cfile"; then
-  # If no `-o' option was seen then we might have been invoked from a
+  # If no '-o' option was seen then we might have been invoked from a
   # pattern rule where we don't need one.  That is ok -- this is a
   # normal compilation that the losing compiler can handle.  If no
-  # `.c' file was seen then we are probably linking.  That is also
+  # '.c' file was seen then we are probably linking.  That is also
   # ok.
   exec "$@"
 fi
@@ -106,7 +306,7 @@ fi
 cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/\\:.-]' here to ensure that we don't use the same name
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
 lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
@@ -124,9 +324,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
 ret=$?
 
 if test -f "$cofile"; then
-  mv "$cofile" "$ofile"
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
 elif test -f "${cofile}bj"; then
-  mv "${cofile}bj" "$ofile"
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
 fi
 
 rmdir "$lockdir"
diff --git a/admin/config.guess b/admin/config.guess
index da83314..d622a44 100755
--- a/admin/config.guess
+++ b/admin/config.guess
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-04-27'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2009-04-27'
 # 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,16 +25,16 @@ timestamp='2009-04-27'
 # the same distribution terms that you use for the rest of that program.
 
 
-# Originally written by Per Bothner <per at bothner.com>.
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches at gnu.org> and include a ChangeLog
+# entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +54,9 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -170,7 +169,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
+			| grep -q __ELF__
 		then
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
 		    # Return netbsd for either.  FIX?
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		fi
 		;;
 	    *)
-	        os=netbsd
+		os=netbsd
 		;;
 	esac
 	# The OS release
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
 		;;
 	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
 		;;
 	esac
 	# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	echo s390-ibm-zvmoe
 	exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+	echo powerpc-ibm-os400
 	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
@@ -333,6 +335,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+	echo i386-pc-auroraux${UNAME_RELEASE}
+	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
 	SUN_ARCH="i386"
@@ -391,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+	exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+	echo m68k-atari-mint${UNAME_RELEASE}
 	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-milan-mint${UNAME_RELEASE}
+	exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-hades-mint${UNAME_RELEASE}
+	exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+	echo m68k-unknown-mint${UNAME_RELEASE}
+	exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
 	exit ;;
@@ -477,8 +482,8 @@ EOF
 	echo m88k-motorola-sysv3
 	exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	# DG/UX returns AViiON for all architectures
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -491,7 +496,7 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit ;;
+	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
 	exit ;;
@@ -548,7 +553,7 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
@@ -591,52 +596,52 @@ EOF
 	    9000/[678][0-9][0-9])
 		if [ -x /usr/bin/getconf ]; then
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+		    case "${sc_cpu_version}" in
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      532)                      # CPU_PA_RISC2_0
+			case "${sc_kernel_bits}" in
+			  32) HP_ARCH="hppa2.0n" ;;
+			  64) HP_ARCH="hppa2.0w" ;;
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+			esac ;;
+		    esac
 		fi
 		if [ "${HP_ARCH}" = "" ]; then
 		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
+		    sed 's/^		//' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+		#define _HPUX_SOURCE
+		#include <stdlib.h>
+		#include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+		int main ()
+		{
+		#if defined(_SC_KERNEL_BITS)
+		    long bits = sysconf(_SC_KERNEL_BITS);
+		#endif
+		    long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
+		    switch (cpu)
+			{
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+			case CPU_PA_RISC2_0:
+		#if defined(_SC_KERNEL_BITS)
+			    switch (bits)
+				{
+				case 64: puts ("hppa2.0w"); break;
+				case 32: puts ("hppa2.0n"); break;
+				default: puts ("hppa2.0"); break;
+				} break;
+		#else  /* !defined(_SC_KERNEL_BITS) */
+			    puts ("hppa2.0"); break;
+		#endif
+			default: puts ("hppa1.0"); break;
+			}
+		    exit (0);
+		}
 EOF
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -656,7 +661,7 @@ EOF
 	    # => hppa64-hp-hpux11.23
 
 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
+		grep -q __LP64__
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -727,22 +732,22 @@ EOF
 	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit ;;
+	exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit ;;
+	exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit ;;
+	exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit ;;
+	exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit ;;
+	exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
@@ -766,14 +771,14 @@ EOF
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -785,13 +790,12 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit ;;
     *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
 	    amd64)
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
 	esac
 	exit ;;
     i*:CYGWIN*:*)
@@ -800,19 +804,22 @@ EOF
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
 	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
 	exit ;;
-    *:Interix*:[3456]*)
-    	case ${UNAME_MACHINE} in
+    *:Interix*:*)
+	case ${UNAME_MACHINE} in
 	    x86)
 		echo i586-pc-interix${UNAME_RELEASE}
 		exit ;;
-	    EM64T | authenticamd | genuineintel)
+	    authenticamd | genuineintel | EM64T)
 		echo x86_64-unknown-interix${UNAME_RELEASE}
 		exit ;;
 	    IA64)
@@ -822,6 +829,9 @@ EOF
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
 	exit ;;
+    8664:Windows_NT:*)
+	echo x86_64-pc-mks
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -851,6 +861,27 @@ EOF
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -858,20 +889,40 @@ EOF
 	then
 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
 	else
-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-gnu
 	exit ;;
     frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	LIBC=gnu
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
 	exit ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -882,78 +933,34 @@ EOF
     m68*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    mips:Linux:*:*)
+    mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#undef CPU
-	#undef mips
-	#undef mipsel
+	#undef ${UNAME_MACHINE}
+	#undef ${UNAME_MACHINE}el
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
+	CPU=${UNAME_MACHINE}el
 	#else
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
+	CPU=${UNAME_MACHINE}
 	#else
 	CPU=
 	#endif
 	#endif
 EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     padre:Linux:*:*)
 	echo sparc-unknown-linux-gnu
 	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -962,14 +969,17 @@ EOF
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
 	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
 	exit ;;
     sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -977,75 +987,18 @@ EOF
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
     vax:Linux:*:*)
 	echo ${UNAME_MACHINE}-dec-linux-gnu
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
     xtensa*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
 	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
@@ -1053,11 +1006,11 @@ EOF
 	echo i386-sequent-sysv4
 	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+	# Unixware is an offshoot of SVR4, but it has its own version
+	# number series starting with 2...
+	# I am not positive that other SVR4 systems won't match this,
 	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+	# Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit ;;
     i*86:OS/2:*:*)
@@ -1074,7 +1027,7 @@ EOF
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
 	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     i*86:*DOS:*:*)
@@ -1089,7 +1042,7 @@ EOF
 	fi
 	exit ;;
     i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
@@ -1117,13 +1070,13 @@ EOF
 	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
+	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
 	# prints for the "djgpp" host, or else GDB configury will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
-        exit ;;
+	exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
 	exit ;;
@@ -1158,8 +1111,8 @@ EOF
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
 	OS_REL='.3'
 	test -r /etc/.relid \
@@ -1182,7 +1135,7 @@ EOF
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
     SM[BE]S:UNIX_SV:*:*)
@@ -1202,10 +1155,10 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel at ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+			# says <Richard.M.Bartel at ccMail.Census.GOV>
+	echo i586-unisys-sysv4
+	exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes at openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
@@ -1231,11 +1184,11 @@ EOF
 	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
+		echo mips-nec-sysv${UNAME_RELEASE}
 	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
+		echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit ;;
+	exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
 	exit ;;
@@ -1275,6 +1228,16 @@ EOF
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
+	    i386)
+		eval $set_cc_for_build
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		      grep IS_64BIT_ARCH >/dev/null
+		  then
+		      UNAME_PROCESSOR="x86_64"
+		  fi
+		fi ;;
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
@@ -1290,6 +1253,9 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
@@ -1335,13 +1301,13 @@ EOF
 	echo pdp10-unknown-its
 	exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+	echo mips-sei-seiux${UNAME_RELEASE}
 	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
 	    A*) echo alpha-dec-vms ; exit ;;
 	    I*) echo ia64-dec-vms ; exit ;;
@@ -1359,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1381,11 +1350,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+	"4"
 #else
-	  ""
+	""
 #endif
-         ); exit (0);
+	); exit (0);
 #endif
 #endif
 
diff --git a/admin/config.sub b/admin/config.sub
index a39437d..c894da4 100755
--- a/admin/config.sub
+++ b/admin/config.sub
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2009-04-17'
+timestamp='2012-02-10'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2009-04-17'
 # 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 Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -32,13 +30,16 @@ timestamp='2009-04-17'
 
 
 # Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
+# diff and a properly formatted GNU ChangeLog entry.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # that are meaningful with *any* GNU software.
@@ -72,8 +73,9 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -120,13 +122,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -149,10 +156,13 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray)
+	-apple | -axis | -knuth | -cray | -microblaze)
 		os=
 		basic_machine=$1
 		;;
+	-bluegene*)
+		os=-cnk
+		;;
 	-sim | -cisco | -oki | -wec | -winbond)
 		os=
 		basic_machine=$1
@@ -167,10 +177,10 @@ case $os in
 		os=-chorusos
 		basic_machine=$1
 		;;
- 	-chorusrdb)
- 		os=-chorusrdb
+	-chorusrdb)
+		os=-chorusrdb
 		basic_machine=$1
- 		;;
+		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -239,17 +249,22 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
 	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
 	| fido | fr30 | frv \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
@@ -275,27 +290,39 @@ case $basic_machine in
 	| moxie \
 	| mt \
 	| msp430 \
+	| nds32 | nds32le | nds32be \
 	| nios | nios2 \
 	| ns16k | ns32k \
+	| open8 \
 	| or32 \
 	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pyramid \
+	| rl78 | rx \
 	| score \
 	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu | strongarm \
-	| tahoe | thumb | tic4x | tic80 | tron \
-	| v850 | v850e \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| we32k \
-	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -305,6 +332,21 @@ case $basic_machine in
 		basic_machine=mt-unknown
 		;;
 
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-unknown
+		;;
+
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
@@ -319,25 +361,29 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
 	| elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| hexagon-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -359,24 +405,29 @@ case $basic_machine in
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
 	| nios-* | nios2-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
-	| romp-* | rs6000-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
 	| tron-* \
-	| v850-* | v850e-* | vax-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
 	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| ymp-* \
 	| z8k-* | z80-*)
@@ -401,7 +452,7 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
-    	abacus)
+	abacus)
 		basic_machine=abacus-unknown
 		;;
 	adobe68k)
@@ -467,11 +518,24 @@ case $basic_machine in
 		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
 		os=-linux
 		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	c90)
 		basic_machine=c90-cray
 		os=-unicos
 		;;
-        cegcc)
+	cegcc)
 		basic_machine=arm-unknown
 		os=-cegcc
 		;;
@@ -503,7 +567,7 @@ case $basic_machine in
 		basic_machine=craynv-cray
 		os=-unicosmp
 		;;
-	cr16)
+	cr16 | cr16-*)
 		basic_machine=cr16-unknown
 		os=-elf
 		;;
@@ -661,7 +725,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -719,6 +782,9 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	microblaze)
+		basic_machine=microblaze-xilinx
+		;;
 	mingw32)
 		basic_machine=i386-pc
 		os=-mingw32
@@ -755,10 +821,18 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i386-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
 		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
 	ncr3000)
 		basic_machine=i486-ncr
 		os=-sysv4
@@ -823,6 +897,12 @@ case $basic_machine in
 	np1)
 		basic_machine=np1-gould
 		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
@@ -905,9 +985,10 @@ case $basic_machine in
 		;;
 	power)	basic_machine=power-ibm
 		;;
-	ppc)	basic_machine=powerpc-unknown
+	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc-* | ppcbe-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
@@ -1001,6 +1082,9 @@ case $basic_machine in
 		basic_machine=i860-stratus
 		os=-sysv4
 		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	sun2)
 		basic_machine=m68000-sun
 		;;
@@ -1057,20 +1141,8 @@ case $basic_machine in
 		basic_machine=t90-cray
 		os=-unicos
 		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tic55x | c55x*)
-		basic_machine=tic55x-unknown
-		os=-coff
-		;;
-	tic6x | c6x*)
-		basic_machine=tic6x-unknown
-		os=-coff
-		;;
 	tile*)
-		basic_machine=tile-unknown
+		basic_machine=$basic_machine-unknown
 		os=-linux-gnu
 		;;
 	tx39)
@@ -1140,6 +1212,9 @@ case $basic_machine in
 	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
 	ymp)
 		basic_machine=ymp-cray
 		os=-unicos
@@ -1237,9 +1312,12 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+	# First match some system type aliases
+	# that might get confused with valid system types.
 	# -solaris* is a basic system type, with this one exception.
+	-auroraux)
+		os=-auroraux
+		;;
 	-solaris1 | -solaris1.*)
 		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 		;;
@@ -1260,9 +1338,9 @@ case $os in
 	# Each alternative MUST END IN A *, to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -kopensolaris* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1274,8 +1352,9 @@ case $os in
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1283,7 +1362,7 @@ case $os in
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1322,7 +1401,7 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
-        -os400*)
+	-os400*)
 		os=-os400
 		;;
 	-wince*)
@@ -1371,7 +1450,7 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
-        -tpf*)
+	-tpf*)
 		os=-tpf
 		;;
 	-triton*)
@@ -1416,6 +1495,8 @@ case $os in
 	-dicos*)
 		os=-dicos
 		;;
+	-nacl*)
+		;;
 	-none)
 		;;
 	*)
@@ -1438,10 +1519,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+	score-*)
 		os=-elf
 		;;
-        spu-*)
+	spu-*)
 		os=-elf
 		;;
 	*-acorn)
@@ -1453,8 +1534,17 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        c4x-* | tic4x-*)
-        	os=-coff
+	c4x-* | tic4x-*)
+		os=-coff
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		os=-coff
 		;;
 	# This must come before the *-dec entry.
 	pdp10-*)
@@ -1474,14 +1564,11 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
 		;;
-        mep-*)
+	mep-*)
 		os=-elf
 		;;
 	mips*-cisco)
@@ -1508,7 +1595,7 @@ case $basic_machine in
 	*-ibm)
 		os=-aix
 		;;
-    	*-knuth)
+	*-knuth)
 		os=-mmixware
 		;;
 	*-wec)
@@ -1613,7 +1700,7 @@ case $basic_machine in
 			-sunos*)
 				vendor=sun
 				;;
-			-aix*)
+			-cnk*|-aix*)
 				vendor=ibm
 				;;
 			-beos*)
diff --git a/admin/depcomp b/admin/depcomp
index df8eea7..25a39e6 100755
--- a/admin/depcomp
+++ b/admin/depcomp
@@ -1,10 +1,10 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-03-27.16; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
 
 # 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
@@ -28,7 +28,7 @@ scriptversion=2009-04-28.21; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
      exit 1;
      ;;
   -h | --h*)
@@ -40,11 +40,11 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake at gnu.org>.
@@ -57,6 +57,12 @@ EOF
     ;;
 esac
 
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -90,10 +96,24 @@ if test "$depmode" = msvcmsys; then
    # This is just like msvisualcpp but w/o cygpath translation.
    # Just convert the backslash-escaped backslashes to single forward
    # slashes to satisfy depend.m4
-   cygpath_u="sed s,\\\\\\\\,/,g"
+   cygpath_u='sed s,\\\\,/,g'
    depmode=msvisualcpp
 fi
 
+if test "$depmode" = msvc7msys; then
+   # This is just like msvc7 but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u='sed s,\\\\,/,g'
+   depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+   # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations.
+   gccflag=-qmakedep=gcc,-MF
+   depmode=gcc
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -148,20 +168,21 @@ gcc)
 ## The second -e expression handles DOS-style file names with drive letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+  tr ' ' "$nl" < "$tmpdepfile" |
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+    sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+      | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -193,18 +214,15 @@ sgi)
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
+    tr ' ' "$nl" < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
    >> "$depfile"
   else
@@ -216,10 +234,17 @@ sgi)
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
@@ -249,12 +274,11 @@ aix)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
+    # Each line is of the form 'foo.o: dependent.h'.
     # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
+    # '$object: dependent.h' and one to simply 'dependent.h:'.
     sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+    sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -265,23 +289,26 @@ aix)
   ;;
 
 icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'.
+  # However on
+  #    $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c
   # ICC 7.0 will fill foo.d with something like
   #    foo.o: sub/foo.c
   #    foo.o: sub/foo.h
-  # which is wrong.  We want:
+  # which is wrong.  We want
   #    sub/foo.o: sub/foo.c
   #    sub/foo.o: sub/foo.h
   #    sub/foo.c:
   #    sub/foo.h:
   # ICC 7.1 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\':
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
-
+  # tcc 0.9.26 (FIXME still under development at the moment of writing)
+  # will emit a similar output, but also prepend the continuation lines
+  # with horizontal tabulation characters.
   "$@" -MD -MF "$tmpdepfile"
   stat=$?
   if test $stat -eq 0; then :
@@ -290,15 +317,21 @@ icc)
     exit $stat
   fi
   rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Each line is of the form 'foo.o: dependent.h',
+  # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'.
   # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  # '$object: dependent.h' and one to simply 'dependent.h:'.
+  sed -e "s/^[ $tab][ $tab]*/  /" -e "s,^[^:]*:,$object :," \
+    < "$tmpdepfile" > "$depfile"
+  sed '
+    s/[ '"$tab"'][ '"$tab"']*/ /g
+    s/^ *//
+    s/ *\\*$//
+    s/^[^:]*: *//
+    /^$/d
+    /:$/d
+    s/$/ :/
+  ' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -334,7 +367,7 @@ hp2)
   done
   if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
 	       s/^ *//
 	       s/ \\*$//
@@ -349,9 +382,9 @@ hp2)
 
 tru64)
    # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
    # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
+   # dependencies in 'foo.d' instead, so we check for that too.
    # Subdirectories are respected.
    dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
    test "x$dir" = "x$object" && dir=
@@ -397,14 +430,59 @@ tru64)
    done
    if test -f "$tmpdepfile"; then
       sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+      sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
    else
       echo "#dummy" > "$depfile"
    fi
    rm -f "$tmpdepfile"
    ;;
 
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test "$stat" = 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
   # dependency tracking mechanisms from slower ones.
@@ -422,7 +500,7 @@ dashmstdout)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -442,15 +520,14 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
+  tr ' ' "$nl" < "$tmpdepfile" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -503,9 +580,10 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
     sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
@@ -525,7 +603,7 @@ cpp)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -594,8 +672,8 @@ msvisualcpp)
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/admin/install-sh b/admin/install-sh
index 6781b98..a9244eb 100755
--- a/admin/install-sh
+++ b/admin/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-01-19.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+	# Protect names problematic for `test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
 	shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for `test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -200,7 +208,11 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for `test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
 	/*) prefix='/';;
-	-*) prefix='./';;
+	[-=\(\)!]*) prefix='./';;
 	*)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-	test -z "$d" && continue
+	test X"$d" = X && continue
 
 	prefix=$prefix$d
 	if test -d "$prefix"; then
diff --git a/admin/ltmain.sh b/admin/ltmain.sh
old mode 100755
new mode 100644
index a72f2fd..63ae69d
--- a/admin/ltmain.sh
+++ b/admin/ltmain.sh
@@ -1,9 +1,9 @@
-# Generated from ltmain.m4sh.
 
-# ltmain.sh (GNU libtool) 2.2.6b
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -32,50 +32,57 @@
 #
 # Provide generalized library-building support services.
 #
-#     --config             show all configuration variables
-#     --debug              enable verbose shell tracing
-# -n, --dry-run            display commands without modifying any files
-#     --features           display basic configuration information and exit
-#     --mode=MODE          use operation mode MODE
-#     --preserve-dup-deps  don't remove duplicate dependency libraries
-#     --quiet, --silent    don't print informational messages
-#     --tag=TAG            use configuration variables from tag TAG
-# -v, --verbose            print informational messages (default)
-#     --version            print version information
-# -h, --help               print short or long help message
+#       --config             show all configuration variables
+#       --debug              enable verbose shell tracing
+#   -n, --dry-run            display commands without modifying any files
+#       --features           display basic configuration information and exit
+#       --mode=MODE          use operation mode MODE
+#       --preserve-dup-deps  don't remove duplicate dependency libraries
+#       --quiet, --silent    don't print informational messages
+#       --no-quiet, --no-silent
+#                            print informational messages (default)
+#       --no-warn            don't display warning messages
+#       --tag=TAG            use configuration variables from tag TAG
+#   -v, --verbose            print more informational messages than default
+#       --no-verbose         don't print the extra informational messages
+#       --version            print version information
+#   -h, --help, --help-all   print short, long, or detailed help message
 #
 # MODE must be one of the following:
 #
-#       clean              remove files from the build directory
-#       compile            compile a source file into a libtool object
-#       execute            automatically set library path, then run a program
-#       finish             complete the installation of libtool libraries
-#       install            install libraries or executables
-#       link               create a library or an executable
-#       uninstall          remove libraries from an installed directory
+#         clean              remove files from the build directory
+#         compile            compile a source file into a libtool object
+#         execute            automatically set library path, then run a program
+#         finish             complete the installation of libtool libraries
+#         install            install libraries or executables
+#         link               create a library or an executable
+#         uninstall          remove libraries from an installed directory
 #
-# MODE-ARGS vary depending on the MODE.
+# MODE-ARGS vary depending on the MODE.  When passed as first option,
+# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
 #
 # When reporting a bug, please describe a test case to reproduce it and
 # include the following information:
 #
-#       host-triplet:	$host
-#       shell:		$SHELL
-#       compiler:		$LTCC
-#       compiler flags:		$LTCFLAGS
-#       linker:		$LD (gnu? $with_gnu_ld)
-#       $progname:		(GNU libtool) 2.2.6b
-#       automake:		$automake_version
-#       autoconf:		$autoconf_version
+#         host-triplet:	$host
+#         shell:		$SHELL
+#         compiler:		$LTCC
+#         compiler flags:		$LTCFLAGS
+#         linker:		$LD (gnu? $with_gnu_ld)
+#         $progname:	(GNU libtool) 2.4.2
+#         automake:	$automake_version
+#         autoconf:	$autoconf_version
 #
 # Report bugs to <bug-libtool at gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
-PROGRAM=ltmain.sh
+PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.2.6b
+VERSION=2.4.2
 TIMESTAMP=""
-package_revision=1.3017
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -91,10 +98,15 @@ fi
 BIN_SH=xpg4; export BIN_SH # for Tru64
 DUALCASE=1; export DUALCASE # for MKS sh
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
 # NLS nuisances: We save the old values to restore during execute mode.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
 lt_user_locale=
 lt_safe_locale=
 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
@@ -107,24 +119,28 @@ do
 	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
 	fi"
 done
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
 
 $lt_unset CDPATH
 
 
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
 
 
 
 : ${CP="cp -f"}
-: ${ECHO="echo"}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
+test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -144,6 +160,27 @@ IFS=" 	$lt_nl"
 dirname="s,/[^/]*$,,"
 basename="s,^.*/,,"
 
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+} # func_dirname may be replaced by extended shell implementation
+
+
+# func_basename file
+func_basename ()
+{
+    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
+} # func_basename may be replaced by extended shell implementation
+
+
 # func_dirname_and_basename file append nondir_replacement
 # perform func_basename and func_dirname in a single function
 # call:
@@ -158,33 +195,183 @@ basename="s,^.*/,,"
 # those functions but instead duplicate the functionality here.
 func_dirname_and_basename ()
 {
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+    # Extract subdirectory from the argument.
+    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
+    if test "X$func_dirname_result" = "X${1}"; then
+      func_dirname_result="${3}"
+    else
+      func_dirname_result="$func_dirname_result${2}"
+    fi
+    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
+} # func_dirname_and_basename may be replaced by extended shell implementation
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+    case ${2} in
+      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+    esac
+} # func_stripname may be replaced by extended shell implementation
+
+
+# These SED scripts presuppose an absolute path with a trailing slash.
+pathcar='s,^/\([^/]*\).*$,\1,'
+pathcdr='s,^/[^/]*,,'
+removedotparts=':dotsl
+		s@/\./@/@g
+		t dotsl
+		s,/\.$,/,'
+collapseslashes='s@/\{1,\}@/@g'
+finalslash='s,/*$,/,'
+
+# func_normal_abspath PATH
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+#             value returned in "$func_normal_abspath_result"
+func_normal_abspath ()
+{
+  # Start from root dir and reassemble the path.
+  func_normal_abspath_result=
+  func_normal_abspath_tpath=$1
+  func_normal_abspath_altnamespace=
+  case $func_normal_abspath_tpath in
+    "")
+      # Empty path, that just means $cwd.
+      func_stripname '' '/' "`pwd`"
+      func_normal_abspath_result=$func_stripname_result
+      return
+    ;;
+    # The next three entries are used to spot a run of precisely
+    # two leading slashes without using negated character classes;
+    # we take advantage of case's first-match behaviour.
+    ///*)
+      # Unusual form of absolute path, do nothing.
+    ;;
+    //*)
+      # Not necessarily an ordinary path; POSIX reserves leading '//'
+      # and for example Cygwin uses it to access remote file shares
+      # over CIFS/SMB, so we conserve a leading double slash if found.
+      func_normal_abspath_altnamespace=/
+    ;;
+    /*)
+      # Absolute path, do nothing.
+    ;;
+    *)
+      # Relative path, prepend $cwd.
+      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+    ;;
+  esac
+  # Cancel out all the simple stuff to save iterations.  We also want
+  # the path to end with a slash for ease of parsing, so make sure
+  # there is one (and only one) here.
+  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
+  while :; do
+    # Processed it all yet?
+    if test "$func_normal_abspath_tpath" = / ; then
+      # If we ascended to the root using ".." the result may be empty now.
+      if test -z "$func_normal_abspath_result" ; then
+        func_normal_abspath_result=/
+      fi
+      break
+    fi
+    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcar"`
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+        -e "$pathcdr"`
+    # Figure out what to do with it
+    case $func_normal_abspath_tcomponent in
+      "")
+        # Trailing empty path component, ignore it.
+      ;;
+      ..)
+        # Parent dir; strip last assembled component from result.
+        func_dirname "$func_normal_abspath_result"
+        func_normal_abspath_result=$func_dirname_result
+      ;;
+      *)
+        # Actual path component, append it.
+        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
+      ;;
+    esac
+  done
+  # Restore leading double-slash if one was found on entry.
+  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
 }
 
-# Generated shell functions inserted here.
+# func_relative_path SRCDIR DSTDIR
+# generates a relative path from SRCDIR to DSTDIR, with a trailing
+# slash if non-empty, suitable for immediately appending a filename
+# without needing to append a separator.
+#             value returned in "$func_relative_path_result"
+func_relative_path ()
+{
+  func_relative_path_result=
+  func_normal_abspath "$1"
+  func_relative_path_tlibdir=$func_normal_abspath_result
+  func_normal_abspath "$2"
+  func_relative_path_tbindir=$func_normal_abspath_result
+
+  # Ascend the tree starting from libdir
+  while :; do
+    # check if we have found a prefix of bindir
+    case $func_relative_path_tbindir in
+      $func_relative_path_tlibdir)
+        # found an exact match
+        func_relative_path_tcancelled=
+        break
+        ;;
+      $func_relative_path_tlibdir*)
+        # found a matching prefix
+        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+        func_relative_path_tcancelled=$func_stripname_result
+        if test -z "$func_relative_path_result"; then
+          func_relative_path_result=.
+        fi
+        break
+        ;;
+      *)
+        func_dirname $func_relative_path_tlibdir
+        func_relative_path_tlibdir=${func_dirname_result}
+        if test "x$func_relative_path_tlibdir" = x ; then
+          # Have to descend all the way to the root!
+          func_relative_path_result=../$func_relative_path_result
+          func_relative_path_tcancelled=$func_relative_path_tbindir
+          break
+        fi
+        func_relative_path_result=../$func_relative_path_result
+        ;;
+    esac
+  done
 
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
+  # Now calculate path; take care to avoid doubling-up slashes.
+  func_stripname '' '/' "$func_relative_path_result"
+  func_relative_path_result=$func_stripname_result
+  func_stripname '/' '/' "$func_relative_path_tcancelled"
+  if test "x$func_stripname_result" != x ; then
+    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
+  fi
+
+  # Normalisation. If bindir is libdir, return empty string,
+  # else relative path ending with a slash; either way, target
+  # file name can be directly appended.
+  if test ! -z "$func_relative_path_result"; then
+    func_stripname './' '' "$func_relative_path_result/"
+    func_relative_path_result=$func_stripname_result
+  fi
+}
 
 # The name of this program:
-# In the unlikely event $progname began with a '-', it would play havoc with
-# func_echo (imagine progname=-n), so we prepend ./ in that case:
 func_dirname_and_basename "$progpath"
 progname=$func_basename_result
-case $progname in
-  -*) progname=./$progname ;;
-esac
 
 # Make sure we have an absolute path for reexecution:
 case $progpath in
@@ -196,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -215,6 +402,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
 # Same as above, but do not quote variable references.
 double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+
+# Sed substitution that converts a w32 file name or path
+# which contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
 # Re-`\' parameter expansions in output of double_quote_subst that were
 # `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
 # in input to double_quote_subst, that '$' was protected from expansion.
@@ -243,7 +439,7 @@ opt_warning=:
 # name if it has been set yet.
 func_echo ()
 {
-    $ECHO "$progname${mode+: }$mode: $*"
+    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
 }
 
 # func_verbose arg...
@@ -258,18 +454,25 @@ func_verbose ()
     :
 }
 
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
 # func_error arg...
 # Echo program name prefixed message to standard error.
 func_error ()
 {
-    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
 }
 
 # func_warning arg...
 # Echo program name prefixed warning message to standard error.
 func_warning ()
 {
-    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
 
     # bash bug again:
     :
@@ -326,9 +529,9 @@ func_mkdir_p ()
         case $my_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
       done
-      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
 
       save_mkdir_p_IFS="$IFS"; IFS=':'
       for my_dir in $my_dir_list; do
@@ -378,7 +581,7 @@ func_mktempdir ()
         func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
     fi
 
-    $ECHO "X$my_tmpdir" | $Xsed
+    $ECHO "$my_tmpdir"
 }
 
 
@@ -392,7 +595,7 @@ func_quote_for_eval ()
 {
     case $1 in
       *[\\\`\"\$]*)
-	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
       *)
         func_quote_for_eval_unquoted_result="$1" ;;
     esac
@@ -419,7 +622,7 @@ func_quote_for_expand ()
 {
     case $1 in
       *[\\\`\"]*)
-	my_arg=`$ECHO "X$1" | $Xsed \
+	my_arg=`$ECHO "$1" | $SED \
 	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
       *)
         my_arg="$1" ;;
@@ -488,15 +691,39 @@ func_show_eval_locale ()
     fi
 }
 
-
-
+# func_tr_sh
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+  case $1 in
+  [0-9]* | *[!a-zA-Z0-9_]*)
+    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
+    ;;
+  * )
+    func_tr_sh_result=$1
+    ;;
+  esac
+}
 
 
 # func_version
 # Echo version message to standard output and exit.
 func_version ()
 {
-    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+    $opt_debug
+
+    $SED -n '/(C)/!b go
+	:more
+	/\./!{
+	  N
+	  s/\n# / /
+	  b more
+	}
+	:go
+	/^# '$PROGRAM' (GNU /,/# warranty; / {
         s/^# //
 	s/^# *$//
         s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
@@ -509,22 +736,28 @@ func_version ()
 # Echo short help message to standard output and exit.
 func_usage ()
 {
-    $SED -n '/^# Usage:/,/# -h/ {
+    $opt_debug
+
+    $SED -n '/^# Usage:/,/^#  *.*--help/ {
         s/^# //
 	s/^# *$//
 	s/\$progname/'$progname'/
 	p
     }' < "$progpath"
-    $ECHO
+    echo
     $ECHO "run \`$progname --help | more' for full usage"
     exit $?
 }
 
-# func_help
-# Echo long help message to standard output and exit.
+# func_help [NOEXIT]
+# Echo long help message to standard output and exit,
+# unless 'noexit' is passed as argument.
 func_help ()
 {
+    $opt_debug
+
     $SED -n '/^# Usage:/,/# Report bugs to/ {
+	:print
         s/^# //
 	s/^# *$//
 	s*\$progname*'$progname'*
@@ -534,11 +767,18 @@ func_help ()
 	s*\$LTCFLAGS*'"$LTCFLAGS"'*
 	s*\$LD*'"$LD"'*
 	s/\$with_gnu_ld/'"$with_gnu_ld"'/
-	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
 	p
-     }' < "$progpath"
-    exit $?
+	d
+     }
+     /^# .* home page:/b print
+     /^# General help using/b print
+     ' < "$progpath"
+    ret=$?
+    if test -z "$1"; then
+      exit $ret
+    fi
 }
 
 # func_missing_arg argname
@@ -546,63 +786,106 @@ func_help ()
 # exit_cmd.
 func_missing_arg ()
 {
-    func_error "missing argument for $1"
+    $opt_debug
+
+    func_error "missing argument for $1."
     exit_cmd=exit
 }
 
-exit_cmd=:
 
+# func_split_short_opt shortopt
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+func_split_short_opt ()
+{
+    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
+    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
 
+    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
+    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
+} # func_split_short_opt may be replaced by extended shell implementation
+
+
+# func_split_long_opt longopt
+# Set func_split_long_opt_name and func_split_long_opt_arg shell
+# variables after splitting LONGOPT at the `=' sign.
+func_split_long_opt ()
+{
+    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
+    my_sed_long_arg='1s/^--[^=]*=//'
+
+    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
+    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
+} # func_split_long_opt may be replaced by extended shell implementation
+
+exit_cmd=:
 
 
 
-# Check that we have a working $ECHO.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell, and then maybe $ECHO will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
 
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
 
 magic="%%%MAGIC variable%%%"
 magic_exe="%%%MAGIC EXE variable%%%"
 
 # Global variables.
-# $mode is unset
 nonopt=
-execute_dlfiles=
 preserve_args=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 extracted_archives=
 extracted_serial=0
 
-opt_dry_run=false
-opt_duplicate_deps=false
-opt_silent=false
-opt_debug=:
-
 # If this variable is set in any of the actions, the command in it
 # will be execed at the end.  This prevents here-documents from being
 # left over by shells.
 exec_cmd=
 
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+    eval "${1}=\$${1}\${2}"
+} # func_append may be replaced by extended shell implementation
+
+# func_append_quoted var value
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+func_append_quoted ()
+{
+    func_quote_for_eval "${2}"
+    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
+} # func_append_quoted may be replaced by extended shell implementation
+
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+    func_arith_result=`expr "${@}"`
+} # func_arith may be replaced by extended shell implementation
+
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
+} # func_len may be replaced by extended shell implementation
+
+
+# func_lo2o object
+func_lo2o ()
+{
+    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
+} # func_lo2o may be replaced by extended shell implementation
+
+
+# func_xform libobj-or-source
+func_xform ()
+{
+    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
+} # func_xform may be replaced by extended shell implementation
+
+
 # func_fatal_configuration arg...
 # Echo program name prefixed message to standard error, followed by
 # a configuration failure hint, and exit.
@@ -636,16 +919,16 @@ func_config ()
 # Display the features supported by this script.
 func_features ()
 {
-    $ECHO "host: $host"
+    echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      $ECHO "enable shared libraries"
+      echo "enable shared libraries"
     else
-      $ECHO "disable shared libraries"
+      echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      $ECHO "enable static libraries"
+      echo "enable static libraries"
     else
-      $ECHO "disable static libraries"
+      echo "disable static libraries"
     fi
 
     exit $?
@@ -692,117 +975,209 @@ func_enable_tag ()
   esac
 }
 
-# Parse options once, thoroughly.  This comes as soon as possible in
-# the script to make things like `libtool --version' happen quickly.
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
 {
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+# Shorthand for --mode=foo, only valid as the first argument
+case $1 in
+clean|clea|cle|cl)
+  shift; set dummy --mode clean ${1+"$@"}; shift
+  ;;
+compile|compil|compi|comp|com|co|c)
+  shift; set dummy --mode compile ${1+"$@"}; shift
+  ;;
+execute|execut|execu|exec|exe|ex|e)
+  shift; set dummy --mode execute ${1+"$@"}; shift
+  ;;
+finish|finis|fini|fin|fi|f)
+  shift; set dummy --mode finish ${1+"$@"}; shift
+  ;;
+install|instal|insta|inst|ins|in|i)
+  shift; set dummy --mode install ${1+"$@"}; shift
+  ;;
+link|lin|li|l)
+  shift; set dummy --mode link ${1+"$@"}; shift
+  ;;
+uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+  shift; set dummy --mode uninstall ${1+"$@"}; shift
+  ;;
+esac
+
+
+
+# Option defaults:
+opt_debug=:
+opt_dry_run=false
+opt_config=false
+opt_preserve_dup_deps=false
+opt_features=false
+opt_finish=false
+opt_help=false
+opt_help_all=false
+opt_silent=:
+opt_warning=:
+opt_verbose=:
+opt_silent=false
+opt_verbose=false
 
-  # Shorthand for --mode=foo, only valid as the first argument
-  case $1 in
-  clean|clea|cle|cl)
-    shift; set dummy --mode clean ${1+"$@"}; shift
-    ;;
-  compile|compil|compi|comp|com|co|c)
-    shift; set dummy --mode compile ${1+"$@"}; shift
-    ;;
-  execute|execut|execu|exec|exe|ex|e)
-    shift; set dummy --mode execute ${1+"$@"}; shift
-    ;;
-  finish|finis|fini|fin|fi|f)
-    shift; set dummy --mode finish ${1+"$@"}; shift
-    ;;
-  install|instal|insta|inst|ins|in|i)
-    shift; set dummy --mode install ${1+"$@"}; shift
-    ;;
-  link|lin|li|l)
-    shift; set dummy --mode link ${1+"$@"}; shift
-    ;;
-  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
-    shift; set dummy --mode uninstall ${1+"$@"}; shift
-    ;;
-  esac
 
-  # Parse non-mode specific arguments:
-  while test "$#" -gt 0; do
+# Parse options once, thoroughly.  This comes as soon as possible in the
+# script to make things like `--version' happen as quickly as we can.
+{
+  # this just eases exit handling
+  while test $# -gt 0; do
     opt="$1"
     shift
-
     case $opt in
-      --config)		func_config					;;
-
-      --debug)		preserve_args="$preserve_args $opt"
+      --debug|-x)	opt_debug='set -x'
 			func_echo "enabling shell trace mode"
-			opt_debug='set -x'
 			$opt_debug
 			;;
-
-      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			execute_dlfiles="$execute_dlfiles $1"
-			shift
+      --dry-run|--dryrun|-n)
+			opt_dry_run=:
 			;;
-
-      --dry-run | -n)	opt_dry_run=:					;;
-      --features)       func_features					;;
-      --finish)		mode="finish"					;;
-
-      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			case $1 in
-			  # Valid mode arguments:
-			  clean)	;;
-			  compile)	;;
-			  execute)	;;
-			  finish)	;;
-			  install)	;;
-			  link)		;;
-			  relink)	;;
-			  uninstall)	;;
-
-			  # Catch anything else as an error
-			  *) func_error "invalid argument for $opt"
-			     exit_cmd=exit
-			     break
-			     ;;
-		        esac
-
-			mode="$1"
+      --config)
+			opt_config=:
+func_config
+			;;
+      --dlopen|-dlopen)
+			optarg="$1"
+			opt_dlopen="${opt_dlopen+$opt_dlopen
+}$optarg"
 			shift
 			;;
-
       --preserve-dup-deps)
-			opt_duplicate_deps=:				;;
-
-      --quiet|--silent)	preserve_args="$preserve_args $opt"
-			opt_silent=:
+			opt_preserve_dup_deps=:
 			;;
-
-      --verbose| -v)	preserve_args="$preserve_args $opt"
+      --features)
+			opt_features=:
+func_features
+			;;
+      --finish)
+			opt_finish=:
+set dummy --mode finish ${1+"$@"}; shift
+			;;
+      --help)
+			opt_help=:
+			;;
+      --help-all)
+			opt_help_all=:
+opt_help=': help-all'
+			;;
+      --mode)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_mode="$optarg"
+case $optarg in
+  # Valid mode arguments:
+  clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+  # Catch anything else as an error
+  *) func_error "invalid argument for $opt"
+     exit_cmd=exit
+     break
+     ;;
+esac
+			shift
+			;;
+      --no-silent|--no-quiet)
 			opt_silent=false
+func_append preserve_args " $opt"
 			;;
-
-      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
-			preserve_args="$preserve_args $opt $1"
-			func_enable_tag "$1"	# tagname is set here
+      --no-warning|--no-warn)
+			opt_warning=false
+func_append preserve_args " $opt"
+			;;
+      --no-verbose)
+			opt_verbose=false
+func_append preserve_args " $opt"
+			;;
+      --silent|--quiet)
+			opt_silent=:
+func_append preserve_args " $opt"
+        opt_verbose=false
+			;;
+      --verbose|-v)
+			opt_verbose=:
+func_append preserve_args " $opt"
+opt_silent=false
+			;;
+      --tag)
+			test $# = 0 && func_missing_arg $opt && break
+			optarg="$1"
+			opt_tag="$optarg"
+func_append preserve_args " $opt $optarg"
+func_enable_tag "$optarg"
 			shift
 			;;
 
+      -\?|-h)		func_usage				;;
+      --help)		func_help				;;
+      --version)	func_version				;;
+
       # Separate optargs to long options:
-      -dlopen=*|--mode=*|--tag=*)
-			func_opt_split "$opt"
-			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+      --*=*)
+			func_split_long_opt "$opt"
+			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
 			shift
 			;;
 
-      -\?|-h)		func_usage					;;
-      --help)		opt_help=:					;;
-      --version)	func_version					;;
-
-      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
-
-      *)		nonopt="$opt"
-			break
+      # Separate non-argument short options:
+      -\?*|-h*|-n*|-v*)
+			func_split_short_opt "$opt"
+			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
+			shift
 			;;
+
+      --)		break					;;
+      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
+      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
     esac
   done
 
+  # Validate options:
+
+  # save first non-option argument
+  if test "$#" -gt 0; then
+    nonopt="$opt"
+    shift
+  fi
+
+  # preserve --debug
+  test "$opt_debug" = : || func_append preserve_args " --debug"
 
   case $host in
     *cygwin* | *mingw* | *pw32* | *cegcc*)
@@ -810,82 +1185,44 @@ func_enable_tag ()
       opt_duplicate_compiler_generated_deps=:
       ;;
     *)
-      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
       ;;
   esac
 
-  # Having warned about all mis-specified options, bail out if
-  # anything was wrong.
-  $exit_cmd $EXIT_FAILURE
-}
+  $opt_help || {
+    # Sanity checks first:
+    func_check_version_match
 
-# func_check_version_match
-# Ensure that we are using m4 macros, and libtool script from the same
-# release of libtool.
-func_check_version_match ()
-{
-  if test "$package_revision" != "$macro_revision"; then
-    if test "$VERSION" != "$macro_version"; then
-      if test -z "$macro_version"; then
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from an older release.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      else
-        cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
-$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
-$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
-$progname: and run autoconf again.
-_LT_EOF
-      fi
-    else
-      cat >&2 <<_LT_EOF
-$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
-$progname: but the definition of this LT_INIT comes from revision $macro_revision.
-$progname: You should recreate aclocal.m4 with macros from revision $package_revision
-$progname: of $PACKAGE $VERSION and run autoconf again.
-_LT_EOF
+    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+      func_fatal_configuration "not configured to build any kind of library"
     fi
 
-    exit $EXIT_MISMATCH
-  fi
-}
-
-
-## ----------- ##
-##    Main.    ##
-## ----------- ##
-
-$opt_help || {
-  # Sanity checks first:
-  func_check_version_match
+    # Darwin sucks
+    eval std_shrext=\"$shrext_cmds\"
 
-  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-    func_fatal_configuration "not configured to build any kind of library"
-  fi
+    # Only execute mode is allowed to have -dlopen flags.
+    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
+      func_error "unrecognized option \`-dlopen'"
+      $ECHO "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
 
-  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+    # Change the help message to a mode-specific one.
+    generic_help="$help"
+    help="Try \`$progname --help --mode=$opt_mode' for more information."
+  }
 
 
-  # Darwin sucks
-  eval std_shrext=\"$shrext_cmds\"
+  # Bail if the options were screwed
+  $exit_cmd $EXIT_FAILURE
+}
 
 
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    func_error "unrecognized option \`-dlopen'"
-    $ECHO "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
 
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$progname --help --mode=$mode' for more information."
-}
 
+## ----------- ##
+##    Main.    ##
+## ----------- ##
 
 # func_lalib_p file
 # True iff FILE is a libtool `.la' library or `.lo' object file.
@@ -950,12 +1287,9 @@ func_ltwrapper_executable_p ()
 # temporary ltwrapper_script.
 func_ltwrapper_scriptname ()
 {
-    func_ltwrapper_scriptname_result=""
-    if func_ltwrapper_executable_p "$1"; then
-	func_dirname_and_basename "$1" "" "."
-	func_stripname '' '.exe' "$func_basename_result"
-	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
-    fi
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
 }
 
 # func_ltwrapper_p file
@@ -1001,6 +1335,37 @@ func_source ()
 }
 
 
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case "$lt_sysroot:$1" in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result="=$func_stripname_result"
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
 # func_infer_tag arg
 # Infer tagged configuration to use if any are available and
 # if one wasn't chosen via the "--tag" command line option.
@@ -1013,13 +1378,15 @@ func_infer_tag ()
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
-        func_quote_for_eval "$arg"
-	CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	func_append_quoted CC_quoted "$arg"
       done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
       case $@ in
       # Blanks in the command may have been stripped by the calling shell,
       # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
       # Blanks at the start of $base_compile will cause this to fail
       # if we don't check for them as well.
       *)
@@ -1030,11 +1397,13 @@ func_infer_tag ()
 	    CC_quoted=
 	    for arg in $CC; do
 	      # Double-quote args containing other shell metacharacters.
-	      func_quote_for_eval "$arg"
-	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
+	      func_append_quoted CC_quoted "$arg"
 	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
 	    case "$@ " in
-	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
 	      # The compiler in the base compile command matches
 	      # the one in the tagged configuration.
 	      # Assume this is the tagged configuration we want.
@@ -1097,6 +1466,486 @@ EOF
     }
 }
 
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $opt_debug
+  func_convert_core_file_wine_to_w32_result="$1"
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$lt_sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $opt_debug
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=""
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $opt_debug
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $opt_debug
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $opt_debug
+  if test -z "$2" && test -n "$1" ; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  \`$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result="$1"
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $opt_debug
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  \`$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result="$3"
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $opt_debug
+  case $4 in
+  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via `$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $opt_debug
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $opt_debug
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result="$1"
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_file_result="$1"
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result="$func_cygpath_result"
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via `$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $opt_debug
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $opt_debug
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result="$1"
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $opt_debug
+  func_to_host_path_result="$1"
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result="$func_cygpath_result"
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
@@ -1137,12 +1986,12 @@ func_mode_compile ()
 	  ;;
 
 	-pie | -fpie | -fPIE)
-          pie_flag="$pie_flag $arg"
+          func_append pie_flag " $arg"
 	  continue
 	  ;;
 
 	-shared | -static | -prefer-pic | -prefer-non-pic)
-	  later="$later $arg"
+	  func_append later " $arg"
 	  continue
 	  ;;
 
@@ -1163,15 +2012,14 @@ func_mode_compile ()
 	  save_ifs="$IFS"; IFS=','
 	  for arg in $args; do
 	    IFS="$save_ifs"
-	    func_quote_for_eval "$arg"
-	    lastarg="$lastarg $func_quote_for_eval_result"
+	    func_append_quoted lastarg "$arg"
 	  done
 	  IFS="$save_ifs"
 	  func_stripname ' ' '' "$lastarg"
 	  lastarg=$func_stripname_result
 
 	  # Add the arguments to base_compile.
-	  base_compile="$base_compile $lastarg"
+	  func_append base_compile " $lastarg"
 	  continue
 	  ;;
 
@@ -1187,8 +2035,7 @@ func_mode_compile ()
       esac    #  case $arg_mode
 
       # Aesthetically quote the previous argument.
-      func_quote_for_eval "$lastarg"
-      base_compile="$base_compile $func_quote_for_eval_result"
+      func_append_quoted base_compile "$lastarg"
     done # for arg
 
     case $arg_mode in
@@ -1213,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -1288,7 +2135,7 @@ func_mode_compile ()
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
     else
       output_obj=
@@ -1319,17 +2166,16 @@ compiler."
 	$opt_dry_run || $RM $removelist
 	exit $EXIT_FAILURE
       fi
-      removelist="$removelist $output_obj"
+      func_append removelist " $output_obj"
       $ECHO "$srcfile" > "$lockfile"
     fi
 
     $opt_dry_run || $RM $removelist
-    removelist="$removelist $lockfile"
+    func_append removelist " $lockfile"
     trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
 
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
     func_quote_for_eval "$srcfile"
     qsrcfile=$func_quote_for_eval_result
 
@@ -1349,7 +2195,7 @@ compiler."
 
       if test -z "$output_obj"; then
 	# Place PIC objects in $objdir
-	command="$command -o $lobj"
+	func_append command " -o $lobj"
       fi
 
       func_show_eval_locale "$command"	\
@@ -1396,11 +2242,11 @@ compiler."
 	command="$base_compile $qsrcfile $pic_flag"
       fi
       if test "$compiler_c_o" = yes; then
-	command="$command -o $obj"
+	func_append command " -o $obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
+      func_append command "$suppress_output"
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
@@ -1445,13 +2291,13 @@ compiler."
 }
 
 $opt_help || {
-test "$mode" = compile && func_mode_compile ${1+"$@"}
+  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
 {
     # We need to display help for each of the modes.
-    case $mode in
+    case $opt_mode in
       "")
         # Generic help is extracted from the usage comments
         # at the start of this file.
@@ -1482,10 +2328,11 @@ This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
   -no-suppress      do not suppress compiler output for multiple passes
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a \`.o' file suitable for static linking
   -static           only build a \`.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 from the given SOURCEFILE.
@@ -1538,7 +2385,7 @@ either the \`install' or \`cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
-  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
 
 The rest of the components are interpreted as arguments to that command (only
 BSD-compatible install options are recognized)."
@@ -1558,6 +2405,8 @@ The following components of LINK-COMMAND are treated specially:
 
   -all-static       do not do any dynamic linking at all
   -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
   -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
   -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
   -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
@@ -1586,6 +2435,11 @@ The following components of LINK-COMMAND are treated specially:
   -version-info CURRENT[:REVISION[:AGE]]
                     specify library version info [each variable defaults to 0]
   -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
 All other options (arguments beginning with \`-') are ignored.
 
@@ -1619,18 +2473,44 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$mode'"
+        func_fatal_help "invalid operation mode \`$opt_mode'"
         ;;
     esac
 
-    $ECHO
+    echo
     $ECHO "Try \`$progname --help' for more information about other modes."
-
-    exit $?
 }
 
-  # Now that we've collected a possible --mode arg, show help if necessary
-  $opt_help && func_mode_help
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test "$opt_help" = :; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    sed '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
 
 
 # func_mode_execute arg...
@@ -1643,13 +2523,16 @@ func_mode_execute ()
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
+    for file in $opt_dlopen; do
       test -f "$file" \
 	|| func_fatal_help "\`$file' is not a file"
 
       dir=
       case $file in
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$lib' is not a valid libtool archive"
@@ -1671,7 +2554,7 @@ func_mode_execute ()
 	dir="$func_dirname_result"
 
 	if test -f "$dir/$objdir/$dlname"; then
-	  dir="$dir/$objdir"
+	  func_append dir "/$objdir"
 	else
 	  if test ! -f "$dir/$dlname"; then
 	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
@@ -1712,7 +2595,7 @@ func_mode_execute ()
     for file
     do
       case $file in
-      -*) ;;
+      -* | *.la | *.lo ) ;;
       *)
 	# Do a test to see if this is really a libtool program.
 	if func_ltwrapper_script_p "$file"; then
@@ -1728,8 +2611,7 @@ func_mode_execute ()
 	;;
       esac
       # Quote arguments (to preserve shell metacharacters).
-      func_quote_for_eval "$file"
-      args="$args $func_quote_for_eval_result"
+      func_append_quoted args "$file"
     done
 
     if test "X$opt_dry_run" = Xfalse; then
@@ -1754,29 +2636,66 @@ func_mode_execute ()
       # Display what would be done.
       if test -n "$shlibpath_var"; then
 	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
-	$ECHO "export $shlibpath_var"
+	echo "export $shlibpath_var"
       fi
       $ECHO "$cmd$args"
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$mode" = execute && func_mode_execute ${1+"$@"}
+test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
     $opt_debug
-    libdirs="$nonopt"
+    libs=
+    libdirs=
     admincmds=
 
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-	libdirs="$libdirs $dir"
-      done
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "\`$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument \`$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
 
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       for libdir in $libdirs; do
 	if test -n "$finish_cmds"; then
 	  # Do each command in the finish commands.
@@ -1786,7 +2705,7 @@ func_mode_finish ()
 	if test -n "$finish_eval"; then
 	  # Do the single finish_eval.
 	  eval cmds=\"$finish_eval\"
-	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
        $cmds"
 	fi
       done
@@ -1795,53 +2714,55 @@ func_mode_finish ()
     # Exit here if they wanted silent mode.
     $opt_silent && exit $EXIT_SUCCESS
 
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
-    $ECHO "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $ECHO "   $libdir"
-    done
-    $ECHO
-    $ECHO "If you ever happen to want to link against installed libraries"
-    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
-    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $ECHO "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $ECHO "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $ECHO "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
 
-      $ECHO "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $ECHO "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $ECHO
+	$ECHO "   - use the \`$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      fi
+      echo
 
-    $ECHO "See any operating system documentation about shared libraries for"
-    case $host in
-      solaris2.[6789]|solaris2.1[0-9])
-        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
-	$ECHO "pages."
-	;;
-      *)
-        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
-        ;;
-    esac
-    $ECHO "X----------------------------------------------------------------------" | $Xsed
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
     exit $EXIT_SUCCESS
 }
 
-test "$mode" = finish && func_mode_finish ${1+"$@"}
+test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
@@ -1852,7 +2773,7 @@ func_mode_install ()
     # install_prog (especially on Windows NT).
     if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
        # Allow the use of GNU shtool's install command.
-       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+       case $nonopt in *shtool*) :;; *) false;; esac; then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -1866,7 +2787,12 @@ func_mode_install ()
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     func_quote_for_eval "$arg"
-    install_prog="$install_prog$func_quote_for_eval_result"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
 
     # We need to accept at least all the BSD install flags.
     dest=
@@ -1876,10 +2802,12 @@ func_mode_install ()
     install_type=
     isdir=no
     stripme=
+    no_mode=:
     for arg
     do
+      arg2=
       if test -n "$dest"; then
-	files="$files $dest"
+	func_append files " $dest"
 	dest=$arg
 	continue
       fi
@@ -1887,10 +2815,9 @@ func_mode_install ()
       case $arg in
       -d) isdir=yes ;;
       -f)
-	case " $install_prog " in
-	*[\\\ /]cp\ *) ;;
-	*) prev=$arg ;;
-	esac
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
 	;;
       -g | -m | -o)
 	prev=$arg
@@ -1904,6 +2831,10 @@ func_mode_install ()
       *)
 	# If the previous option needed an argument, then skip it.
 	if test -n "$prev"; then
+	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
 	  prev=
 	else
 	  dest=$arg
@@ -1914,7 +2845,11 @@ func_mode_install ()
 
       # Aesthetically quote the argument.
       func_quote_for_eval "$arg"
-      install_prog="$install_prog $func_quote_for_eval_result"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -1923,6 +2858,13 @@ func_mode_install ()
     test -n "$prev" && \
       func_fatal_help "the \`$prev' option requires an argument"
 
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
     if test -z "$files"; then
       if test -z "$dest"; then
 	func_fatal_help "no file or destination specified"
@@ -1977,10 +2919,13 @@ func_mode_install ()
       case $file in
       *.$libext)
 	# Do the static libraries later.
-	staticlibs="$staticlibs $file"
+	func_append staticlibs " $file"
 	;;
 
       *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
 	# Check to see that this really is a libtool archive.
 	func_lalib_unsafe_p "$file" \
 	  || func_fatal_help "\`$file' is not a valid libtool archive"
@@ -1994,23 +2939,23 @@ func_mode_install ()
 	if test "X$destdir" = "X$libdir"; then
 	  case "$current_libdirs " in
 	  *" $libdir "*) ;;
-	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  *) func_append current_libdirs " $libdir" ;;
 	  esac
 	else
 	  # Note the libdir as a future libdir.
 	  case "$future_libdirs " in
 	  *" $libdir "*) ;;
-	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  *) func_append future_libdirs " $libdir" ;;
 	  esac
 	fi
 
 	func_dirname "$file" "/" ""
 	dir="$func_dirname_result"
-	dir="$dir$objdir"
+	func_append dir "$objdir"
 
 	if test -n "$relink_command"; then
 	  # Determine the prefix the user has applied to our future dir.
-	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
 
 	  # Don't allow the user to place us outside of our expected
 	  # location b/c this prevents finding dependent libraries that
@@ -2023,9 +2968,9 @@ func_mode_install ()
 
 	  if test -n "$inst_prefix_dir"; then
 	    # Stick the inst_prefix_dir data into the link command.
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
 	  else
-	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 	  fi
 
 	  func_warning "relinking \`$file'"
@@ -2043,7 +2988,7 @@ func_mode_install ()
 	  test -n "$relink_command" && srcname="$realname"T
 
 	  # Install the shared library and build the symlinks.
-	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
 	      'exit $?'
 	  tstripme="$stripme"
 	  case $host_os in
@@ -2083,7 +3028,7 @@ func_mode_install ()
 	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
 	# Maybe install the static library, too.
-	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
 	;;
 
       *.lo)
@@ -2183,7 +3128,7 @@ func_mode_install ()
 	    if test -f "$lib"; then
 	      func_source "$lib"
 	    fi
-	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
 	    if test -n "$libdir" && test ! -f "$libfile"; then
 	      func_warning "\`$lib' has not been installed in \`$libdir'"
 	      finalize=no
@@ -2202,7 +3147,7 @@ func_mode_install ()
 		file="$func_basename_result"
 	        outputname="$tmpdir/$file"
 	        # Replace the output file specification.
-	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
 	        $opt_silent || {
 	          func_quote_for_expand "$relink_command"
@@ -2221,7 +3166,7 @@ func_mode_install ()
 	    }
 	  else
 	    # Install the binary that we compiled earlier.
-	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
 	  fi
 	fi
 
@@ -2257,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-	func_show_eval "$old_striplib $oldlib" 'exit $?'
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -2280,7 +3227,7 @@ func_mode_install ()
     fi
 }
 
-test "$mode" = install && func_mode_install ${1+"$@"}
+test "$opt_mode" = install && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -2323,6 +3270,22 @@ func_generate_dlsyms ()
 extern \"C\" {
 #endif
 
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 /* External symbol declarations for the compiler. */\
 "
 
@@ -2332,10 +3295,11 @@ extern \"C\" {
 	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
 	  # Add our own program objects to the symbol list.
-	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	  for progfile in $progfiles; do
-	    func_verbose "extracting global C symbols from \`$progfile'"
-	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
 	  done
 
 	  if test -n "$exclude_expsyms"; then
@@ -2371,7 +3335,7 @@ extern \"C\" {
 	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 	      eval '$MV "$nlist"T "$nlist"'
 	      case $host in
-	        *cygwin | *mingw* | *cegcc* )
+	        *cygwin* | *mingw* | *cegcc* )
 	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
 	          ;;
@@ -2384,10 +3348,52 @@ extern \"C\" {
 	  func_verbose "extracting global C symbols from \`$dlprefile'"
 	  func_basename "$dlprefile"
 	  name="$func_basename_result"
-	  $opt_dry_run || {
-	    eval '$ECHO ": $name " >> "$nlist"'
-	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
-	  }
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=""
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname" ; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename="$func_basename_result"
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename" ; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
 	done
 
 	$opt_dry_run || {
@@ -2415,36 +3421,19 @@ extern \"C\" {
 	  if test -f "$nlist"S; then
 	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
 	  else
-	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
 	  fi
 
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
 typedef struct {
   const char *name;
   void *address;
 } lt_dlsymlist;
-"
-	  case $host in
-	  *cygwin* | *mingw* | *cegcc* )
-	    $ECHO >> "$output_objdir/$my_dlsyms" "\
-/* DATA imports from DLLs on WIN32 con't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs.  */"
-	    lt_dlsym_const= ;;
-	  *osf5*)
-	    echo >> "$output_objdir/$my_dlsyms" "\
-/* This system does not cope well with relocations in const data */"
-	    lt_dlsym_const= ;;
-	  *)
-	    lt_dlsym_const=const ;;
-	  esac
-
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
-extern $lt_dlsym_const lt_dlsymlist
+extern LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[];
-$lt_dlsym_const lt_dlsymlist
+LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
 {\
   { \"$my_originator\", (void *) 0 },"
@@ -2457,7 +3446,7 @@ lt_${my_prefix}_LTX_preloaded_symbols[] =
 	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
 	    ;;
 	  esac
-	  $ECHO >> "$output_objdir/$my_dlsyms" "\
+	  echo >> "$output_objdir/$my_dlsyms" "\
   {0, (void *) 0}
 };
 
@@ -2484,7 +3473,7 @@ static const void *lt_preloaded_setup() {
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
 	  *-*-hpux*)
 	    pic_flag_for_symtable=" $pic_flag"  ;;
@@ -2500,7 +3489,7 @@ static const void *lt_preloaded_setup() {
 	for arg in $LTCFLAGS; do
 	  case $arg in
 	  -pie | -fpie | -fPIE) ;;
-	  *) symtab_cflags="$symtab_cflags $arg" ;;
+	  *) func_append symtab_cflags " $arg" ;;
 	  esac
 	done
 
@@ -2515,16 +3504,16 @@ static const void *lt_preloaded_setup() {
 	case $host in
 	*cygwin* | *mingw* | *cegcc* )
 	  if test -f "$output_objdir/$my_outputname.def"; then
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
 	  else
-	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  fi
 	  ;;
 	*)
-	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
-	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
 	  ;;
 	esac
 	;;
@@ -2538,8 +3527,8 @@ static const void *lt_preloaded_setup() {
       # really was required.
 
       # Nullify the symbol file.
-      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
     fi
 }
 
@@ -2549,6 +3538,7 @@ static const void *lt_preloaded_setup() {
 # Need a lot of goo to handle *both* DLLs and import libs
 # Has to be a shell function in order to 'eat' the argument
 # that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
   $opt_debug
@@ -2559,9 +3549,11 @@ func_win32_libid ()
     win32_libid_type="x86 archive import"
     ;;
   *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
-       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      func_to_tool_file "$1" func_convert_file_msys_to_w32
+      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
 	$SED -n -e '
 	    1,100{
 		/ I /{
@@ -2590,6 +3582,131 @@ func_win32_libid ()
   $ECHO "$win32_libid_type"
 }
 
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $opt_debug
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $opt_debug
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive which possess that section. Heuristic: eliminate
+    # all those which have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $opt_debug
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $opt_debug
+  if func_cygming_gnu_implib_p "$1" ; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1" ; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=""
+  fi
+}
 
 
 # func_extract_an_archive dir oldlib
@@ -2598,7 +3715,18 @@ func_extract_an_archive ()
     $opt_debug
     f_ex_an_ar_dir="$1"; shift
     f_ex_an_ar_oldlib="$1"
-    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if test "$lock_old_archive_extraction" = yes; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test "$lock_old_archive_extraction" = yes; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
      :
     else
@@ -2669,7 +3797,7 @@ func_extract_archives ()
 	    darwin_file=
 	    darwin_files=
 	    for darwin_file in $darwin_filelist; do
-	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
 	      $LIPO -create -output "$darwin_file" $darwin_files
 	    done # $darwin_filelist
 	    $RM -rf unfat-$$
@@ -2684,25 +3812,30 @@ func_extract_archives ()
         func_extract_an_archive "$my_xdir" "$my_xabs"
 	;;
       esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
     func_extract_archives_result="$my_oldobjs"
 }
 
 
-
-# func_emit_wrapper_part1 [arg=no]
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
 #
-# Emit the first part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part1 ()
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
 {
-	func_emit_wrapper_part1_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part1_arg1=$1
-	fi
+	func_emit_wrapper_arg1=${1-no}
 
 	$ECHO "\
 #! $SHELL
@@ -2718,7 +3851,6 @@ func_emit_wrapper_part1 ()
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # Be Bourne compatible
@@ -2749,31 +3881,135 @@ if test \"\$libtool_install_magic\" = \"$magic\"; then
 else
   # When we are sourced in execute mode, \$file and \$ECHO are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    ECHO=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$ECHO works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$ECHO will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ which is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options which match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
 "
-	$ECHO "\
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
 
   # Find the directory that this script lives in.
-  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
-    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
@@ -2783,30 +4019,13 @@ else
       esac
     fi
 
-    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
   done
-"
-}
-# end: func_emit_wrapper_part1
-
-# func_emit_wrapper_part2 [arg=no]
-#
-# Emit the second part of a libtool wrapper script on stdout.
-# For more information, see the description associated with
-# func_emit_wrapper(), below.
-func_emit_wrapper_part2 ()
-{
-	func_emit_wrapper_part2_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_part2_arg1=$1
-	fi
-
-	$ECHO "\
 
   # Usually 'no', except on cygwin/mingw when embedded into
   # the cwrapper.
-  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
   if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
     # special case for '.'
     if test \"\$thisdir\" = \".\"; then
@@ -2814,7 +4033,7 @@ func_emit_wrapper_part2 ()
     fi
     # remove .libs from thisdir
     case \"\$thisdir\" in
-    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
     $objdir )   thisdir=. ;;
     esac
   fi
@@ -2869,6 +4088,18 @@ func_emit_wrapper_part2 ()
 
   if test -f \"\$progdir/\$program\"; then"
 
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
 	# Export our shlibpath_var if we have one.
 	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 	  $ECHO "\
@@ -2877,253 +4108,28 @@ func_emit_wrapper_part2 ()
 
     # Some systems cannot cope with colon-terminated $shlibpath_var
     # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
 
     export $shlibpath_var
 "
 	fi
 
-	# fixup the dll searchpath if we need to.
-	if test -n "$dllsearchpath"; then
-	  $ECHO "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-	fi
-
 	$ECHO "\
     if test \"\$libtool_execute_magic\" != \"$magic\"; then
       # Run the actual program with our arguments.
-"
-	case $host in
-	# Backslashes separate directories on plain windows
-	*-*-mingw | *-*-os2* | *-cegcc*)
-	  $ECHO "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-	  ;;
-
-	*)
-	  $ECHO "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-	  ;;
-	esac
-	$ECHO "\
-      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
-      exit 1
+      func_exec_program \${1+\"\$@\"}
     fi
   else
     # The program doesn't exist.
     \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
     \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
-    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
     exit 1
   fi
 fi\
 "
 }
-# end: func_emit_wrapper_part2
-
-
-# func_emit_wrapper [arg=no]
-#
-# Emit a libtool wrapper script on stdout.
-# Don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable.  Must ONLY be called from within
-# func_mode_link because it depends on a number of variables
-# set therein.
-#
-# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take.  If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the $objdir directory.  This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
-{
-	func_emit_wrapper_arg1=no
-	if test -n "$1" ; then
-	  func_emit_wrapper_arg1=$1
-	fi
-
-	# split this up so that func_emit_cwrapperexe_src
-	# can call each part independently.
-	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
-	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
-}
-
-
-# func_to_host_path arg
-#
-# Convert paths to host format when used with build tools.
-# Intended for use with "native" mingw (where libtool itself
-# is running under the msys shell), or in the following cross-
-# build environments:
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-# where wine is equipped with the `winepath' executable.
-# In the native mingw case, the (msys) shell automatically
-# converts paths for any non-msys applications it launches,
-# but that facility isn't available from inside the cwrapper.
-# Similar accommodations are necessary for $host mingw and
-# $build cygwin.  Calling this function does no harm for other
-# $host/$build combinations not listed above.
-#
-# ARG is the path (on $build) that should be converted to
-# the proper representation for $host. The result is stored
-# in $func_to_host_path_result.
-func_to_host_path ()
-{
-  func_to_host_path_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        case $build in
-          *mingw* ) # actually, msys
-            # awkward: cmd appends spaces to result
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_path_tmp1=`cygpath -w "$1"`
-            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # Unfortunately, winepath does not exit with a non-zero
-            # error code, so we are forced to check the contents of
-            # stdout. On the other hand, if the command is not
-            # found, the shell will set an exit code of 127 and print
-            # *an error message* to stdout. So we must check for both
-            # error code of zero AND non-empty stdout, which explains
-            # the odd construction:
-            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
-            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
-              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
-                $SED -e "$lt_sed_naive_backslashify"`
-            else
-              # Allow warning below.
-              func_to_host_path_result=""
-            fi
-            ;;
-        esac
-        if test -z "$func_to_host_path_result" ; then
-          func_error "Could not determine host path corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback:
-          func_to_host_path_result="$1"
-        fi
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_path
 
-# func_to_host_pathlist arg
-#
-# Convert pathlists to host format when used with build tools.
-# See func_to_host_path(), above. This function supports the
-# following $build/$host combinations (but does no harm for
-# combinations not listed here):
-#    $build          $host
-#    mingw (msys)    mingw  [e.g. native]
-#    cygwin          mingw
-#    *nix + wine     mingw
-#
-# Path separators are also converted from $build format to
-# $host format. If ARG begins or ends with a path separator
-# character, it is preserved (but converted to $host format)
-# on output.
-#
-# ARG is a pathlist (on $build) that should be converted to
-# the proper representation on $host. The result is stored
-# in $func_to_host_pathlist_result.
-func_to_host_pathlist ()
-{
-  func_to_host_pathlist_result="$1"
-  if test -n "$1" ; then
-    case $host in
-      *mingw* )
-        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
-        # Remove leading and trailing path separator characters from
-        # ARG. msys behavior is inconsistent here, cygpath turns them
-        # into '.;' and ';.', and winepath ignores them completely.
-        func_to_host_pathlist_tmp2="$1"
-        # Once set for this call, this variable should not be
-        # reassigned. It is used in tha fallback case.
-        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
-          $SED -e 's|^:*||' -e 's|:*$||'`
-        case $build in
-          *mingw* ) # Actually, msys.
-            # Awkward: cmd appends spaces to result.
-            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
-            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
-              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          *cygwin* )
-            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
-            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
-              $SED -e "$lt_sed_naive_backslashify"`
-            ;;
-          * )
-            # unfortunately, winepath doesn't convert pathlists
-            func_to_host_pathlist_result=""
-            func_to_host_pathlist_oldIFS=$IFS
-            IFS=:
-            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
-              IFS=$func_to_host_pathlist_oldIFS
-              if test -n "$func_to_host_pathlist_f" ; then
-                func_to_host_path "$func_to_host_pathlist_f"
-                if test -n "$func_to_host_path_result" ; then
-                  if test -z "$func_to_host_pathlist_result" ; then
-                    func_to_host_pathlist_result="$func_to_host_path_result"
-                  else
-                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
-                  fi
-                fi
-              fi
-              IFS=:
-            done
-            IFS=$func_to_host_pathlist_oldIFS
-            ;;
-        esac
-        if test -z "$func_to_host_pathlist_result" ; then
-          func_error "Could not determine the host path(s) corresponding to"
-          func_error "  '$1'"
-          func_error "Continuing, but uninstalled executables may not work."
-          # Fallback. This may break if $1 contains DOS-style drive
-          # specifications. The fix is not to complicate the expression
-          # below, but for the user to provide a working wine installation
-          # with winepath so that path translation in the cross-to-mingw
-          # case works properly.
-          lt_replace_pathsep_nix_to_dos="s|:|;|g"
-          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
-            $SED -e "$lt_replace_pathsep_nix_to_dos"`
-        fi
-        # Now, add the leading and trailing path separators back
-        case "$1" in
-          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
-            ;;
-        esac
-        case "$1" in
-          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
-            ;;
-        esac
-        ;;
-    esac
-  fi
-}
-# end: func_to_host_pathlist
 
 # func_emit_cwrapperexe_src
 # emit the source code for a wrapper executable on stdout
@@ -3141,31 +4147,23 @@ func_emit_cwrapperexe_src ()
 
    This wrapper executable should never be moved out of the build directory.
    If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "$SHELL $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
 */
 EOF
 	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #ifdef _MSC_VER
 # include <direct.h>
 # include <process.h>
 # include <io.h>
-# define setmode _setmode
 #else
 # include <unistd.h>
 # include <stdint.h>
 # ifdef __CYGWIN__
 #  include <io.h>
-#  define HAVE_SETENV
-#  ifdef __STRICT_ANSI__
-char *realpath (const char *, char *);
-int putenv (char *);
-int setenv (const char *, const char *, int);
-#  endif
 # endif
 #endif
 #include <malloc.h>
@@ -3177,6 +4175,44 @@ int setenv (const char *, const char *, int);
 #include <fcntl.h>
 #include <sys/stat.h>
 
+/* declarations of non-ANSI functions */
+#if defined(__MINGW32__)
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined(__CYGWIN__)
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined (other platforms) ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined(_MSC_VER)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+# ifndef _INTPTR_T_DEFINED
+#  define _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#elif defined(__MINGW32__)
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined(__CYGWIN__)
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined (other platforms) ... */
+#endif
+
 #if defined(PATH_MAX)
 # define LT_PATHMAX PATH_MAX
 #elif defined(MAXPATHLEN)
@@ -3192,14 +4228,7 @@ int setenv (const char *, const char *, int);
 # define S_IXGRP 0
 #endif
 
-#ifdef _MSC_VER
-# define S_IXUSR _S_IEXEC
-# define stat _stat
-# ifndef _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#endif
-
+/* path handling portability macros */
 #ifndef DIR_SEPARATOR
 # define DIR_SEPARATOR '/'
 # define PATH_SEPARATOR ':'
@@ -3230,10 +4259,6 @@ int setenv (const char *, const char *, int);
 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 #endif /* PATH_SEPARATOR_2 */
 
-#ifdef __CYGWIN__
-# define FOPEN_WB "wb"
-#endif
-
 #ifndef FOPEN_WB
 # define FOPEN_WB "w"
 #endif
@@ -3246,22 +4271,13 @@ int setenv (const char *, const char *, int);
   if (stale) { free ((void *) stale); stale = 0; } \
 } while (0)
 
-#undef LTWRAPPER_DEBUGPRINTF
-#if defined DEBUGWRAPPER
-# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
-static void
-ltwrapper_debugprintf (const char *fmt, ...)
-{
-    va_list args;
-    va_start (args, fmt);
-    (void) vfprintf (stderr, fmt, args);
-    va_end (args);
-}
+#if defined(LT_DEBUGWRAPPER)
+static int lt_debug = 1;
 #else
-# define LTWRAPPER_DEBUGPRINTF(args)
+static int lt_debug = 0;
 #endif
 
-const char *program_name = NULL;
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
 
 void *xmalloc (size_t num);
 char *xstrdup (const char *string);
@@ -3271,41 +4287,27 @@ char *chase_symlinks (const char *pathspec);
 int make_executable (const char *path);
 int check_executable (const char *path);
 char *strendzap (char *str, const char *pat);
-void lt_fatal (const char *message, ...);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
 void lt_setenv (const char *name, const char *value);
 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
-void lt_opt_process_env_set (const char *arg);
-void lt_opt_process_env_prepend (const char *arg);
-void lt_opt_process_env_append (const char *arg);
-int lt_split_name_value (const char *arg, char** name, char** value);
 void lt_update_exe_path (const char *name, const char *value);
 void lt_update_lib_path (const char *name, const char *value);
-
-static const char *script_text_part1 =
-EOF
-
-	    func_emit_wrapper_part1 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
-	    cat <<EOF
-
-static const char *script_text_part2 =
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
 EOF
-	    func_emit_wrapper_part2 yes |
-	        $SED -e 's/\([\\"]\)/\\\1/g' \
-	             -e 's/^/  "/' -e 's/$/\\n"/'
-	    echo ";"
 
 	    cat <<EOF
-const char * MAGIC_EXE = "$magic_exe";
+volatile const char * MAGIC_EXE = "$magic_exe";
 const char * LIB_PATH_VARNAME = "$shlibpath_var";
 EOF
 
 	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-              func_to_host_pathlist "$temp_rpath"
+              func_to_host_path "$temp_rpath"
 	      cat <<EOF
-const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3314,10 +4316,10 @@ EOF
 	    fi
 
 	    if test -n "$dllsearchpath"; then
-              func_to_host_pathlist "$dllsearchpath:"
+              func_to_host_path "$dllsearchpath:"
 	      cat <<EOF
 const char * EXE_PATH_VARNAME = "PATH";
-const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
 EOF
 	    else
 	      cat <<"EOF"
@@ -3340,24 +4342,10 @@ EOF
 	    cat <<"EOF"
 
 #define LTWRAPPER_OPTION_PREFIX         "--lt-"
-#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
 
-static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
-
 static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
-
-static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
-static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
-  /* argument is putenv-style "foo=bar", value of foo is set to bar */
-
-static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
-static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
-  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
-
-static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
-static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
-  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
 
 int
 main (int argc, char *argv[])
@@ -3374,10 +4362,13 @@ main (int argc, char *argv[])
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
-  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+  newargz = XMALLOC (char *, argc + 1);
 
-  /* very simple arg parsing; don't want to rely on getopt */
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
   for (i = 1; i < argc; i++)
     {
       if (strcmp (argv[i], dumpscript_opt) == 0)
@@ -3391,25 +4382,57 @@ EOF
 	      esac
 
 	    cat <<"EOF"
-	  printf ("%s", script_text_part1);
-	  printf ("%s", script_text_part2);
+	  lt_dump_script (stdout);
 	  return 0;
 	}
+      if (strcmp (argv[i], debug_opt) == 0)
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
     }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
 
-  newargz = XMALLOC (char *, argc + 1);
   tmp_pathspec = find_executable (argv[0]);
   if (tmp_pathspec == NULL)
-    lt_fatal ("Couldn't find %s", argv[0]);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
-			  tmp_pathspec));
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
 
   actual_cwrapper_path = chase_symlinks (tmp_pathspec);
-  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
-			  actual_cwrapper_path));
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
   XFREE (tmp_pathspec);
 
-  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
   strendzap (actual_cwrapper_path, actual_cwrapper_name);
 
   /* wrapper name transforms */
@@ -3427,8 +4450,9 @@ EOF
   target_name = tmp_pathspec;
   tmp_pathspec = 0;
 
-  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
-			  target_name));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
 EOF
 
 	    cat <<EOF
@@ -3478,80 +4502,19 @@ EOF
 
   lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
   lt_setenv ("DUALCASE", "1");  /* for MSK sh */
-  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
   lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
 
-  newargc=0;
-  for (i = 1; i < argc; i++)
-    {
-      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
-        {
-          if (argv[i][env_set_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_set_opt_len + 1;
-              lt_opt_process_env_set (p);
-            }
-          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_set (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_set_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
-        {
-          if (argv[i][env_prepend_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_prepend_opt_len + 1;
-              lt_opt_process_env_prepend (p);
-            }
-          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_prepend_opt);
-          continue;
-        }
-      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
-        {
-          if (argv[i][env_append_opt_len] == '=')
-            {
-              const char *p = argv[i] + env_append_opt_len + 1;
-              lt_opt_process_env_append (p);
-            }
-          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
-            {
-              lt_opt_process_env_append (argv[++i]); /* don't copy */
-            }
-          else
-            lt_fatal ("%s missing required argument", env_append_opt);
-          continue;
-        }
-      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
-        {
-          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
-             namespace, but it is not one of the ones we know about and
-             have already dealt with, above (inluding dump-script), then
-             report an error. Otherwise, targets might begin to believe
-             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
-             namespace. The first time any user complains about this, we'll
-             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
-             or a configure.ac-settable value.
-           */
-          lt_fatal ("Unrecognized option in %s namespace: '%s'",
-                    ltwrapper_option_prefix, argv[i]);
-        }
-      /* otherwise ... */
-      newargz[++newargc] = xstrdup (argv[i]);
-    }
-  newargz[++newargc] = NULL;
-
-  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
   for (i = 0; i < newargc; i++)
     {
-      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
     }
 
 EOF
@@ -3560,11 +4523,14 @@ EOF
 	      mingw*)
 		cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
   rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
-      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
       return 127;
     }
   return rval;
@@ -3586,7 +4552,7 @@ xmalloc (size_t num)
 {
   void *p = (void *) malloc (num);
   if (!p)
-    lt_fatal ("Memory exhausted");
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
 
   return p;
 }
@@ -3620,8 +4586,8 @@ check_executable (const char *path)
 {
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3638,8 +4604,8 @@ make_executable (const char *path)
   int rval = 0;
   struct stat st;
 
-  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
-			  path ? (*path ? path : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
   if ((!path) || (!*path))
     return 0;
 
@@ -3665,8 +4631,8 @@ find_executable (const char *wrapper)
   int tmp_len;
   char *concat_name;
 
-  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
-			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
 
   if ((wrapper == NULL) || (*wrapper == '\0'))
     return NULL;
@@ -3719,7 +4685,8 @@ find_executable (const char *wrapper)
 		{
 		  /* empty path: current directory */
 		  if (getcwd (tmp, LT_PATHMAX) == NULL)
-		    lt_fatal ("getcwd failed");
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
 		  tmp_len = strlen (tmp);
 		  concat_name =
 		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
@@ -3744,7 +4711,8 @@ find_executable (const char *wrapper)
     }
   /* Relative path | not found in path: prepend cwd */
   if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
   tmp_len = strlen (tmp);
   concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
   memcpy (concat_name, tmp, tmp_len);
@@ -3770,8 +4738,9 @@ chase_symlinks (const char *pathspec)
   int has_symlinks = 0;
   while (strlen (tmp_pathspec) && !has_symlinks)
     {
-      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
-			      tmp_pathspec));
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
       if (lstat (tmp_pathspec, &s) == 0)
 	{
 	  if (S_ISLNK (s.st_mode) != 0)
@@ -3793,8 +4762,9 @@ chase_symlinks (const char *pathspec)
 	}
       else
 	{
-	  char *errstr = strerror (errno);
-	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
 	}
     }
   XFREE (tmp_pathspec);
@@ -3807,7 +4777,8 @@ chase_symlinks (const char *pathspec)
   tmp_pathspec = realpath (pathspec, buf);
   if (tmp_pathspec == 0)
     {
-      lt_fatal ("Could not follow symlinks for %s", pathspec);
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
     }
   return xstrdup (tmp_pathspec);
 #endif
@@ -3833,11 +4804,25 @@ strendzap (char *str, const char *pat)
   return str;
 }
 
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
 static void
-lt_error_core (int exit_status, const char *mode,
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
 	       const char *message, va_list ap)
 {
-  fprintf (stderr, "%s: %s: ", program_name, mode);
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
   vfprintf (stderr, message, ap);
   fprintf (stderr, ".\n");
 
@@ -3846,20 +4831,32 @@ lt_error_core (int exit_status, const char *mode,
 }
 
 void
-lt_fatal (const char *message, ...)
+lt_fatal (const char *file, int line, const char *message, ...)
 {
   va_list ap;
   va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
   va_end (ap);
 }
 
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
 void
 lt_setenv (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
   {
 #ifdef HAVE_SETENV
     /* always make a copy, for consistency with !HAVE_SETENV */
@@ -3904,95 +4901,12 @@ lt_extend_str (const char *orig_value, const char *add, int to_end)
   return new_value;
 }
 
-int
-lt_split_name_value (const char *arg, char** name, char** value)
-{
-  const char *p;
-  int len;
-  if (!arg || !*arg)
-    return 1;
-
-  p = strchr (arg, (int)'=');
-
-  if (!p)
-    return 1;
-
-  *value = xstrdup (++p);
-
-  len = strlen (arg) - strlen (*value);
-  *name = XMALLOC (char, len);
-  strncpy (*name, arg, len-1);
-  (*name)[len - 1] = '\0';
-
-  return 0;
-}
-
-void
-lt_opt_process_env_set (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
-    }
-
-  lt_setenv (name, value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_prepend (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 0);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
-void
-lt_opt_process_env_append (const char *arg)
-{
-  char *name = NULL;
-  char *value = NULL;
-  char *new_value = NULL;
-
-  if (lt_split_name_value (arg, &name, &value) != 0)
-    {
-      XFREE (name);
-      XFREE (value);
-      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
-    }
-
-  new_value = lt_extend_str (getenv (name), value, 1);
-  lt_setenv (name, new_value);
-  XFREE (new_value);
-  XFREE (name);
-  XFREE (value);
-}
-
 void
 lt_update_exe_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4011,9 +4925,9 @@ lt_update_exe_path (const char *name, const char *value)
 void
 lt_update_lib_path (const char *name, const char *value)
 {
-  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
-                          (name ? name : "<NULL>"),
-                          (value ? value : "<NULL>")));
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
 
   if (name && *name && value && *value)
     {
@@ -4023,11 +4937,158 @@ lt_update_lib_path (const char *name, const char *value)
     }
 }
 
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
 
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
 EOF
 }
 # end: func_emit_cwrapperexe_src
 
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $opt_debug
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
@@ -4072,6 +5133,7 @@ func_mode_link ()
     new_inherited_linker_flags=
 
     avoid_version=no
+    bindir=
     dlfiles=
     dlprefiles=
     dlself=no
@@ -4164,6 +5226,11 @@ func_mode_link ()
 	esac
 
 	case $prev in
+	bindir)
+	  bindir="$arg"
+	  prev=
+	  continue
+	  ;;
 	dlfiles|dlprefiles)
 	  if test "$preload" = no; then
 	    # Add the symbol object into the linking commands.
@@ -4195,9 +5262,9 @@ func_mode_link ()
 	    ;;
 	  *)
 	    if test "$prev" = dlfiles; then
-	      dlfiles="$dlfiles $arg"
+	      func_append dlfiles " $arg"
 	    else
-	      dlprefiles="$dlprefiles $arg"
+	      func_append dlprefiles " $arg"
 	    fi
 	    prev=
 	    continue
@@ -4221,7 +5288,7 @@ func_mode_link ()
 	    *-*-darwin*)
 	      case "$deplibs " in
 		*" $qarg.ltframework "*) ;;
-		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
 		   ;;
 	      esac
 	      ;;
@@ -4240,7 +5307,7 @@ func_mode_link ()
 	    moreargs=
 	    for fil in `cat "$save_arg"`
 	    do
-#	      moreargs="$moreargs $fil"
+#	      func_append moreargs " $fil"
 	      arg=$fil
 	      # A libtool-controlled object.
 
@@ -4269,7 +5336,7 @@ func_mode_link ()
 
 		  if test "$prev" = dlfiles; then
 		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		      dlfiles="$dlfiles $pic_object"
+		      func_append dlfiles " $pic_object"
 		      prev=
 		      continue
 		    else
@@ -4281,7 +5348,7 @@ func_mode_link ()
 		  # CHECK ME:  I think I busted this.  -Ossama
 		  if test "$prev" = dlprefiles; then
 		    # Preload the old-style object.
-		    dlprefiles="$dlprefiles $pic_object"
+		    func_append dlprefiles " $pic_object"
 		    prev=
 		  fi
 
@@ -4351,12 +5418,12 @@ func_mode_link ()
 	  if test "$prev" = rpath; then
 	    case "$rpath " in
 	    *" $arg "*) ;;
-	    *) rpath="$rpath $arg" ;;
+	    *) func_append rpath " $arg" ;;
 	    esac
 	  else
 	    case "$xrpath " in
 	    *" $arg "*) ;;
-	    *) xrpath="$xrpath $arg" ;;
+	    *) func_append xrpath " $arg" ;;
 	    esac
 	  fi
 	  prev=
@@ -4368,28 +5435,28 @@ func_mode_link ()
 	  continue
 	  ;;
 	weak)
-	  weak_libs="$weak_libs $arg"
+	  func_append weak_libs " $arg"
 	  prev=
 	  continue
 	  ;;
 	xcclinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xcompiler)
-	  compiler_flags="$compiler_flags $qarg"
+	  func_append compiler_flags " $qarg"
 	  prev=
 	  func_append compile_command " $qarg"
 	  func_append finalize_command " $qarg"
 	  continue
 	  ;;
 	xlinker)
-	  linker_flags="$linker_flags $qarg"
-	  compiler_flags="$compiler_flags $wl$qarg"
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
 	  prev=
 	  func_append compile_command " $wl$qarg"
 	  func_append finalize_command " $wl$qarg"
@@ -4425,6 +5492,11 @@ func_mode_link ()
 	continue
 	;;
 
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
       -dlopen)
 	prev=dlfiles
 	continue
@@ -4475,15 +5547,16 @@ func_mode_link ()
 	;;
 
       -L*)
-	func_stripname '-L' '' "$arg"
-	dir=$func_stripname_result
-	if test -z "$dir"; then
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
 	  if test "$#" -gt 0; then
 	    func_fatal_error "require no space between \`-L' and \`$1'"
 	  else
 	    func_fatal_error "need path for \`-L' option"
 	  fi
 	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -4495,24 +5568,30 @@ func_mode_link ()
 	  ;;
 	esac
 	case "$deplibs " in
-	*" -L$dir "*) ;;
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
 	*)
-	  deplibs="$deplibs -L$dir"
-	  lib_search_path="$lib_search_path $dir"
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
 	  ;;
 	esac
 	case $host in
 	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
 	  case :$dllsearchpath: in
 	  *":$dir:"*) ;;
 	  ::) dllsearchpath=$dir;;
-	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  *) func_append dllsearchpath ":$dir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -4522,7 +5601,7 @@ func_mode_link ()
       -l*)
 	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # These systems don't actually have a C or math library (as such)
 	    continue
 	    ;;
@@ -4536,7 +5615,7 @@ func_mode_link ()
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C and math libraries are in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    continue
 	    ;;
 	  *-*-sco3.2v5* | *-*-sco5v6*)
@@ -4556,7 +5635,7 @@ func_mode_link ()
 	   ;;
 	 esac
 	fi
-	deplibs="$deplibs $arg"
+	func_append deplibs " $arg"
 	continue
 	;;
 
@@ -4568,21 +5647,22 @@ func_mode_link ()
       # Tru64 UNIX uses -model [arg] to determine the layout of C++
       # classes, name mangling, and exception handling.
       # Darwin uses the -arch flag to determine output architecture.
-      -model|-arch|-isysroot)
-	compiler_flags="$compiler_flags $arg"
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	prev=xcompiler
 	continue
 	;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-	compiler_flags="$compiler_flags $arg"
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	func_append compiler_flags " $arg"
 	func_append compile_command " $arg"
 	func_append finalize_command " $arg"
 	case "$new_inherited_linker_flags " in
 	    *" $arg "*) ;;
-	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
 	esac
 	continue
 	;;
@@ -4649,13 +5729,17 @@ func_mode_link ()
 	# We need an absolute path.
 	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
 	*)
 	  func_fatal_error "only absolute run-paths are allowed"
 	  ;;
 	esac
 	case "$xrpath " in
 	*" $dir "*) ;;
-	*) xrpath="$xrpath $dir" ;;
+	*) func_append xrpath " $dir" ;;
 	esac
 	continue
 	;;
@@ -4708,8 +5792,8 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4724,9 +5808,9 @@ func_mode_link ()
 	for flag in $args; do
 	  IFS="$save_ifs"
           func_quote_for_eval "$flag"
-	  arg="$arg $wl$func_quote_for_eval_result"
-	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
-	  linker_flags="$linker_flags $func_quote_for_eval_result"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
 	done
 	IFS="$save_ifs"
 	func_stripname ' ' '' "$arg"
@@ -4754,23 +5838,27 @@ func_mode_link ()
 	arg="$func_quote_for_eval_result"
 	;;
 
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # @file GCC response files
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
         func_quote_for_eval "$arg"
 	arg="$func_quote_for_eval_result"
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
-        compiler_flags="$compiler_flags $arg"
+        func_append compiler_flags " $arg"
         continue
         ;;
 
@@ -4782,7 +5870,7 @@ func_mode_link ()
 
       *.$objext)
 	# A standard object.
-	objs="$objs $arg"
+	func_append objs " $arg"
 	;;
 
       *.lo)
@@ -4813,7 +5901,7 @@ func_mode_link ()
 
 	    if test "$prev" = dlfiles; then
 	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-		dlfiles="$dlfiles $pic_object"
+		func_append dlfiles " $pic_object"
 		prev=
 		continue
 	      else
@@ -4825,7 +5913,7 @@ func_mode_link ()
 	    # CHECK ME:  I think I busted this.  -Ossama
 	    if test "$prev" = dlprefiles; then
 	      # Preload the old-style object.
-	      dlprefiles="$dlprefiles $pic_object"
+	      func_append dlprefiles " $pic_object"
 	      prev=
 	    fi
 
@@ -4870,24 +5958,25 @@ func_mode_link ()
 
       *.$libext)
 	# An archive.
-	deplibs="$deplibs $arg"
-	old_deplibs="$old_deplibs $arg"
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
 	continue
 	;;
 
       *.la)
 	# A libtool-controlled library.
 
+	func_resolve_sysroot "$arg"
 	if test "$prev" = dlfiles; then
 	  # This library was specified with -dlopen.
-	  dlfiles="$dlfiles $arg"
+	  func_append dlfiles " $func_resolve_sysroot_result"
 	  prev=
 	elif test "$prev" = dlprefiles; then
 	  # The library was specified with -dlpreopen.
-	  dlprefiles="$dlprefiles $arg"
+	  func_append dlprefiles " $func_resolve_sysroot_result"
 	  prev=
 	else
-	  deplibs="$deplibs $arg"
+	  func_append deplibs " $func_resolve_sysroot_result"
 	fi
 	continue
 	;;
@@ -4925,7 +6014,7 @@ func_mode_link ()
 
     if test -n "$shlibpath_var"; then
       # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
     else
       shlib_search_path=
     fi
@@ -4934,6 +6023,8 @@ func_mode_link ()
 
     func_dirname "$output" "/" ""
     output_objdir="$func_dirname_result$objdir"
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
     func_mkdir_p "$output_objdir"
 
@@ -4954,12 +6045,12 @@ func_mode_link ()
     # Find all interdependent deplibs by searching for libraries
     # that are linked more than once (e.g. -la -lb -la)
     for deplib in $deplibs; do
-      if $opt_duplicate_deps ; then
+      if $opt_preserve_dup_deps ; then
 	case "$libs " in
-	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	esac
       fi
-      libs="$libs $deplib"
+      func_append libs " $deplib"
     done
 
     if test "$linkmode" = lib; then
@@ -4972,9 +6063,9 @@ func_mode_link ()
       if $opt_duplicate_compiler_generated_deps; then
 	for pre_post_dep in $predeps $postdeps; do
 	  case "$pre_post_deps " in
-	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
 	  esac
-	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	  func_append pre_post_deps " $pre_post_dep"
 	done
       fi
       pre_post_deps=
@@ -5041,17 +6132,19 @@ func_mode_link ()
 	for lib in $dlprefiles; do
 	  # Ignore non-libtool-libs
 	  dependency_libs=
+	  func_resolve_sysroot "$lib"
 	  case $lib in
-	  *.la)	func_source "$lib" ;;
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
 	  esac
 
 	  # Collect preopened libtool deplibs, except any this library
 	  # has declared as weak libs
 	  for deplib in $dependency_libs; do
-            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
 	    case " $weak_libs " in
 	    *" $deplib_base "*) ;;
-	    *) deplibs="$deplibs $deplib" ;;
+	    *) func_append deplibs " $deplib" ;;
 	    esac
 	  done
 	done
@@ -5067,16 +6160,17 @@ func_mode_link ()
 	lib=
 	found=no
 	case $deplib in
-	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
 	  if test "$linkmode,$pass" = "prog,link"; then
 	    compile_deplibs="$deplib $compile_deplibs"
 	    finalize_deplibs="$deplib $finalize_deplibs"
 	  else
-	    compiler_flags="$compiler_flags $deplib"
+	    func_append compiler_flags " $deplib"
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5161,7 +6255,7 @@ func_mode_link ()
 	    if test "$linkmode" = lib ; then
 		case "$new_inherited_linker_flags " in
 		    *" $deplib "*) ;;
-		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
 		esac
 	    fi
 	  fi
@@ -5174,7 +6268,8 @@ func_mode_link ()
 	    test "$pass" = conv && continue
 	    newdependency_libs="$deplib $newdependency_libs"
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  prog)
 	    if test "$pass" = conv; then
@@ -5188,7 +6283,8 @@ func_mode_link ()
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    fi
 	    func_stripname '-L' '' "$deplib"
-	    newlib_search_path="$newlib_search_path $func_stripname_result"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
 	    ;;
 	  *)
 	    func_warning "\`-L' is ignored for archives/objects"
@@ -5199,17 +6295,21 @@ func_mode_link ()
 	-R*)
 	  if test "$pass" = link; then
 	    func_stripname '-R' '' "$deplib"
-	    dir=$func_stripname_result
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
 	    # Make sure the xrpath contains only unique directories.
 	    case "$xrpath " in
 	    *" $dir "*) ;;
-	    *) xrpath="$xrpath $dir" ;;
+	    *) func_append xrpath " $dir" ;;
 	    esac
 	  fi
 	  deplibs="$deplib $deplibs"
 	  continue
 	  ;;
-	*.la) lib="$deplib" ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
 	*.$libext)
 	  if test "$pass" = conv; then
 	    deplibs="$deplib $deplibs"
@@ -5227,7 +6327,7 @@ func_mode_link ()
 		match_pattern*)
 		  set dummy $deplibs_check_method; shift
 		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
-		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
 		    | $EGREP "$match_pattern_regex" > /dev/null; then
 		    valid_a_lib=yes
 		  fi
@@ -5237,15 +6337,15 @@ func_mode_link ()
 		;;
 	      esac
 	      if test "$valid_a_lib" != yes; then
-		$ECHO
+		echo
 		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
-		$ECHO "*** that it is just a static archive that I should not use here."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
 	      else
-		$ECHO
+		echo
 		$ECHO "*** Warning: Linking the shared library $output against the"
 		$ECHO "*** static library $deplib is not portable!"
 		deplibs="$deplib $deplibs"
@@ -5272,11 +6372,11 @@ func_mode_link ()
 	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
 	      # If there is no dlopen support or we're linking statically,
 	      # we need to preload.
-	      newdlprefiles="$newdlprefiles $deplib"
+	      func_append newdlprefiles " $deplib"
 	      compile_deplibs="$deplib $compile_deplibs"
 	      finalize_deplibs="$deplib $finalize_deplibs"
 	    else
-	      newdlfiles="$newdlfiles $deplib"
+	      func_append newdlfiles " $deplib"
 	    fi
 	  fi
 	  continue
@@ -5318,20 +6418,20 @@ func_mode_link ()
 
 	# Convert "-framework foo" to "foo.ltframework"
 	if test -n "$inherited_linker_flags"; then
-	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
 	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
 	    case " $new_inherited_linker_flags " in
 	      *" $tmp_inherited_linker_flag "*) ;;
-	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
 	    esac
 	  done
 	fi
-	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	if test "$linkmode,$pass" = "lib,link" ||
 	   test "$linkmode,$pass" = "prog,scan" ||
 	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
 	fi
 
 	if test "$pass" = conv; then
@@ -5342,20 +6442,20 @@ func_mode_link ()
 	      func_fatal_error "cannot find name of link library for \`$lib'"
 	    fi
 	    # It is a libtool convenience library, so add in its objects.
-	    convenience="$convenience $ladir/$objdir/$old_library"
-	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
 	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
 	    func_fatal_error "\`$lib' is not a convenience library"
 	  fi
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
 	    deplibs="$deplib $deplibs"
-	    if $opt_duplicate_deps ; then
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $deplib"
 	  done
 	  continue
 	fi # $pass = conv
@@ -5363,9 +6463,15 @@ func_mode_link ()
 
 	# Get the name of the library we link against.
 	linklib=
-	for l in $old_library $library_names; do
-	  linklib="$l"
-	done
+	if test -n "$old_library" &&
+	   { test "$prefer_static_libs" = yes ||
+	     test "$prefer_static_libs,$installed" = "built,no"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib="$l"
+	  done
+	fi
 	if test -z "$linklib"; then
 	  func_fatal_error "cannot find name of link library for \`$lib'"
 	fi
@@ -5382,9 +6488,9 @@ func_mode_link ()
 	    # statically, we need to preload.  We also need to preload any
 	    # dependent libraries so libltdl's deplib preloader doesn't
 	    # bomb out in the load deplibs phase.
-	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	    func_append dlprefiles " $lib $dependency_libs"
 	  else
-	    newdlfiles="$newdlfiles $lib"
+	    func_append newdlfiles " $lib"
 	  fi
 	  continue
 	fi # $pass = dlopen
@@ -5406,14 +6512,14 @@ func_mode_link ()
 
 	# Find the relevant object directory and library name.
 	if test "X$installed" = Xyes; then
-	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 	    func_warning "library \`$lib' was moved."
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    libdir="$abs_ladir"
 	  else
-	    dir="$libdir"
-	    absdir="$libdir"
+	    dir="$lt_sysroot$libdir"
+	    absdir="$lt_sysroot$libdir"
 	  fi
 	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
 	else
@@ -5421,12 +6527,12 @@ func_mode_link ()
 	    dir="$ladir"
 	    absdir="$abs_ladir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  else
 	    dir="$ladir/$objdir"
 	    absdir="$abs_ladir/$objdir"
 	    # Remove this search path later
-	    notinst_path="$notinst_path $abs_ladir"
+	    func_append notinst_path " $abs_ladir"
 	  fi
 	fi # $installed = yes
 	func_stripname 'lib' '.la' "$laname"
@@ -5437,20 +6543,46 @@ func_mode_link ()
 	  if test -z "$libdir" && test "$linkmode" = prog; then
 	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
 	  fi
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    newdlprefiles="$newdlprefiles $dir/$old_library"
-	    # Keep a list of preopened convenience libraries to check
-	    # that they are being used correctly in the link pass.
-	    test -z "$libdir" && \
-		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
-	  # Otherwise, use the dlname, so that lt_dlopen finds it.
-	  elif test -n "$dlname"; then
-	    newdlprefiles="$newdlprefiles $dir/$dlname"
-	  else
-	    newdlprefiles="$newdlprefiles $dir/$linklib"
-	  fi
+	  case "$host" in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
 	fi # $pass = dlpreopen
 
 	if test -z "$libdir"; then
@@ -5468,7 +6600,7 @@ func_mode_link ()
 
 
 	if test "$linkmode" = prog && test "$pass" != link; then
-	  newlib_search_path="$newlib_search_path $ladir"
+	  func_append newlib_search_path " $ladir"
 	  deplibs="$lib $deplibs"
 
 	  linkalldeplibs=no
@@ -5481,7 +6613,8 @@ func_mode_link ()
 	  for deplib in $dependency_libs; do
 	    case $deplib in
 	    -L*) func_stripname '-L' '' "$deplib"
-	         newlib_search_path="$newlib_search_path $func_stripname_result"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
 		 ;;
 	    esac
 	    # Need to link against all dependency_libs?
@@ -5492,12 +6625,12 @@ func_mode_link ()
 	      # or/and link against static libraries
 	      newdependency_libs="$deplib $newdependency_libs"
 	    fi
-	    if $opt_duplicate_deps ; then
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $deplib"
 	  done # for deplib
 	  continue
 	fi # $linkmode = prog...
@@ -5512,7 +6645,7 @@ func_mode_link ()
 	      # Make sure the rpath contains only unique directories.
 	      case "$temp_rpath:" in
 	      *"$absdir:"*) ;;
-	      *) temp_rpath="$temp_rpath$absdir:" ;;
+	      *) func_append temp_rpath "$absdir:" ;;
 	      esac
 	    fi
 
@@ -5524,7 +6657,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5533,7 +6666,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5558,12 +6691,12 @@ func_mode_link ()
 	  case $host in
 	  *cygwin* | *mingw* | *cegcc*)
 	      # No point in relinking DLLs because paths are not encoded
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=no
 	    ;;
 	  *)
 	    if test "$installed" = no; then
-	      notinst_deplibs="$notinst_deplibs $lib"
+	      func_append notinst_deplibs " $lib"
 	      need_relink=yes
 	    fi
 	    ;;
@@ -5580,7 +6713,7 @@ func_mode_link ()
 	    fi
 	  done
 	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
-	    $ECHO
+	    echo
 	    if test "$linkmode" = prog; then
 	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
 	    else
@@ -5598,7 +6731,7 @@ func_mode_link ()
 	    *)
 	      case "$compile_rpath " in
 	      *" $absdir "*) ;;
-	      *) compile_rpath="$compile_rpath $absdir"
+	      *) func_append compile_rpath " $absdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5607,7 +6740,7 @@ func_mode_link ()
 	    *)
 	      case "$finalize_rpath " in
 	      *" $libdir "*) ;;
-	      *) finalize_rpath="$finalize_rpath $libdir"
+	      *) func_append finalize_rpath " $libdir" ;;
 	      esac
 	      ;;
 	    esac
@@ -5661,7 +6794,7 @@ func_mode_link ()
 	    linklib=$newlib
 	  fi # test -n "$old_archive_from_expsyms_cmds"
 
-	  if test "$linkmode" = prog || test "$mode" != relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5683,9 +6816,9 @@ func_mode_link ()
 		      if test "X$dlopenmodule" != "X$lib"; then
 			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
 			if test -z "$old_library" ; then
-			  $ECHO
-			  $ECHO "*** And there doesn't seem to be a static archive available"
-			  $ECHO "*** The link will probably fail, sorry"
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
 			else
 			  add="$dir/$old_library"
 			fi
@@ -5712,12 +6845,12 @@ func_mode_link ()
 	         test "$hardcode_direct_absolute" = no; then
 		add="$dir/$linklib"
 	      elif test "$hardcode_minus_L" = yes; then
-		add_dir="-L$dir"
+		add_dir="-L$absdir"
 		# Try looking first in the location we're being installed to.
 		if test -n "$inst_prefix_dir"; then
 		  case $libdir in
 		    [\\/]*)
-		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
 		      ;;
 		  esac
 		fi
@@ -5739,7 +6872,7 @@ func_mode_link ()
 	    if test -n "$add_shlibpath"; then
 	      case :$compile_shlibpath: in
 	      *":$add_shlibpath:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
 	      esac
 	    fi
 	    if test "$linkmode" = prog; then
@@ -5753,13 +6886,13 @@ func_mode_link ()
 		 test "$hardcode_shlibpath_var" = yes; then
 		case :$finalize_shlibpath: in
 		*":$libdir:"*) ;;
-		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
 		esac
 	      fi
 	    fi
 	  fi
 
-	  if test "$linkmode" = prog || test "$mode" = relink; then
+	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
 	    add_shlibpath=
 	    add_dir=
 	    add=
@@ -5773,7 +6906,7 @@ func_mode_link ()
 	    elif test "$hardcode_shlibpath_var" = yes; then
 	      case :$finalize_shlibpath: in
 	      *":$libdir:"*) ;;
-	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
 	      esac
 	      add="-l$name"
 	    elif test "$hardcode_automatic" = yes; then
@@ -5790,7 +6923,7 @@ func_mode_link ()
 	      if test -n "$inst_prefix_dir"; then
 		case $libdir in
 		  [\\/]*)
-		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
 		    ;;
 		esac
 	      fi
@@ -5825,21 +6958,21 @@ func_mode_link ()
 
 	    # Just print a warning and add the library to dependency_libs so
 	    # that the program can be linked against the static library.
-	    $ECHO
+	    echo
 	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
-	    $ECHO "*** I have the capability to make that library automatically link in when"
-	    $ECHO "*** you link to this library.  But I can only do this if you have a"
-	    $ECHO "*** shared version of the library, which you do not appear to have."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
 	    if test "$module" = yes; then
-	      $ECHO "*** But as you try to build a module library, libtool will still create "
-	      $ECHO "*** a static module, that should work as long as the dlopening application"
-	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 	      if test -z "$global_symbol_pipe"; then
-		$ECHO
-		$ECHO "*** However, this would only work if libtool was able to extract symbol"
-		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-		$ECHO "*** not find such a program.  So, this module is probably useless."
-		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	      fi
 	      if test "$build_old_libs" = no; then
 		build_libtool_libs=module
@@ -5867,37 +7000,46 @@ func_mode_link ()
 	           temp_xrpath=$func_stripname_result
 		   case " $xrpath " in
 		   *" $temp_xrpath "*) ;;
-		   *) xrpath="$xrpath $temp_xrpath";;
+		   *) func_append xrpath " $temp_xrpath";;
 		   esac;;
-	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      *) func_append temp_deplibs " $libdir";;
 	      esac
 	    done
 	    dependency_libs="$temp_deplibs"
 	  fi
 
-	  newlib_search_path="$newlib_search_path $absdir"
+	  func_append newlib_search_path " $absdir"
 	  # Link against this library
 	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 	  # ... and its dependency_libs
 	  tmp_libs=
 	  for deplib in $dependency_libs; do
 	    newdependency_libs="$deplib $newdependency_libs"
-	    if $opt_duplicate_deps ; then
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps ; then
 	      case "$tmp_libs " in
-	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
 	      esac
 	    fi
-	    tmp_libs="$tmp_libs $deplib"
+	    func_append tmp_libs " $func_resolve_sysroot_result"
 	  done
 
 	  if test "$link_all_deplibs" != no; then
 	    # Add the search paths of all dependency libraries
 	    for deplib in $dependency_libs; do
+	      path=
 	      case $deplib in
 	      -L*) path="$deplib" ;;
 	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
 	        func_dirname "$deplib" "" "."
-		dir="$func_dirname_result"
+		dir=$func_dirname_result
 		# We need an absolute path.
 		case $dir in
 		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
@@ -5924,8 +7066,8 @@ func_mode_link ()
                       if test -z "$darwin_install_name"; then
                           darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
 		      path=
 		    fi
 		  fi
@@ -5958,7 +7100,7 @@ func_mode_link ()
 	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
 	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
 	else
-	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	fi
       fi
       dependency_libs="$newdependency_libs"
@@ -5975,7 +7117,7 @@ func_mode_link ()
 	  for dir in $newlib_search_path; do
 	    case "$lib_search_path " in
 	    *" $dir "*) ;;
-	    *) lib_search_path="$lib_search_path $dir" ;;
+	    *) func_append lib_search_path " $dir" ;;
 	    esac
 	  done
 	  newlib_search_path=
@@ -6033,10 +7175,10 @@ func_mode_link ()
 	    -L*)
 	      case " $tmp_libs " in
 	      *" $deplib "*) ;;
-	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      *) func_append tmp_libs " $deplib" ;;
 	      esac
 	      ;;
-	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    *) func_append tmp_libs " $deplib" ;;
 	    esac
 	  done
 	  eval $var=\"$tmp_libs\"
@@ -6052,7 +7194,7 @@ func_mode_link ()
 	  ;;
 	esac
 	if test -n "$i" ; then
-	  tmp_libs="$tmp_libs $i"
+	  func_append tmp_libs " $i"
 	fi
       done
       dependency_libs=$tmp_libs
@@ -6093,7 +7235,7 @@ func_mode_link ()
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
-      objs="$objs$old_deplibs"
+      func_append objs "$old_deplibs"
       ;;
 
     lib)
@@ -6126,10 +7268,10 @@ func_mode_link ()
 	if test "$deplibs_check_method" != pass_all; then
 	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
 	else
-	  $ECHO
+	  echo
 	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
 	  $ECHO "*** objects $objs is not portable!"
-	  libobjs="$libobjs $objs"
+	  func_append libobjs " $objs"
 	fi
       fi
 
@@ -6188,13 +7330,14 @@ func_mode_link ()
 	  # which has an extra 1 added just for fun
 	  #
 	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
 	  darwin|linux|osf|windows|none)
 	    func_arith $number_major + $number_minor
 	    current=$func_arith_result
 	    age="$number_minor"
 	    revision="$number_revision"
 	    ;;
-	  freebsd-aout|freebsd-elf|sunos)
+	  freebsd-aout|freebsd-elf|qnx|sunos)
 	    current="$number_major"
 	    revision="$number_minor"
 	    age="0"
@@ -6304,7 +7447,7 @@ func_mode_link ()
 	  versuffix="$major.$revision"
 	  ;;
 
-	linux)
+	linux) # correct to gnu/linux during the next big refactor
 	  func_arith $current - $age
 	  major=.$func_arith_result
 	  versuffix="$major.$age.$revision"
@@ -6327,7 +7470,7 @@ func_mode_link ()
 	  done
 
 	  # Make executables depend on our current version.
-	  verstring="$verstring:${current}.0"
+	  func_append verstring ":${current}.0"
 	  ;;
 
 	qnx)
@@ -6395,10 +7538,10 @@ func_mode_link ()
       fi
 
       func_generate_dlsyms "$libname" "$libname" "yes"
-      libobjs="$libobjs $symfileobj"
+      func_append libobjs " $symfileobj"
       test "X$libobjs" = "X " && libobjs=
 
-      if test "$mode" != relink; then
+      if test "$opt_mode" != relink; then
 	# Remove our outputs, but don't remove object files since they
 	# may have been created when compiling PIC objects.
 	removelist=
@@ -6414,7 +7557,7 @@ func_mode_link ()
 		   continue
 		 fi
 	       fi
-	       removelist="$removelist $p"
+	       func_append removelist " $p"
 	       ;;
 	    *) ;;
 	  esac
@@ -6425,27 +7568,28 @@ func_mode_link ()
 
       # Now set the variables for building old libraries.
       if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+	func_append oldlibs " $output_objdir/$libname.$libext"
 
 	# Transform .lo files to .o files.
-	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
       #for path in $notinst_path; do
-      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
-      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
-      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
       #done
 
       if test -n "$xrpath"; then
 	# If the user specified any rpath flags, then add them.
 	temp_xrpath=
 	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
 	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
@@ -6459,7 +7603,7 @@ func_mode_link ()
       for lib in $old_dlfiles; do
 	case " $dlprefiles $dlfiles " in
 	*" $lib "*) ;;
-	*) dlfiles="$dlfiles $lib" ;;
+	*) func_append dlfiles " $lib" ;;
 	esac
       done
 
@@ -6469,19 +7613,19 @@ func_mode_link ()
       for lib in $old_dlprefiles; do
 	case "$dlprefiles " in
 	*" $lib "*) ;;
-	*) dlprefiles="$dlprefiles $lib" ;;
+	*) func_append dlprefiles " $lib" ;;
 	esac
       done
 
       if test "$build_libtool_libs" = yes; then
 	if test -n "$rpath"; then
 	  case $host in
-	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
 	    # these systems don't actually have a c library (as such)!
 	    ;;
 	  *-*-rhapsody* | *-*-darwin1.[012])
 	    # Rhapsody C library is in the System framework
-	    deplibs="$deplibs System.ltframework"
+	    func_append deplibs " System.ltframework"
 	    ;;
 	  *-*-netbsd*)
 	    # Don't link with libc until the a.out ld.so is fixed.
@@ -6498,7 +7642,7 @@ func_mode_link ()
 	  *)
 	    # Add libc to deplibs on all other systems if necessary.
 	    if test "$build_libtool_need_lc" = "yes"; then
-	      deplibs="$deplibs -lc"
+	      func_append deplibs " -lc"
 	    fi
 	    ;;
 	  esac
@@ -6547,7 +7691,7 @@ EOF
 		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		  case " $predeps $postdeps " in
 		  *" $i "*)
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		    i=""
 		    ;;
 		  esac
@@ -6558,21 +7702,21 @@ EOF
 		  set dummy $deplib_matches; shift
 		  deplib_match=$1
 		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
+		    func_append newdeplibs " $i"
 		  else
 		    droppeddeps=yes
-		    $ECHO
+		    echo
 		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		    $ECHO "*** I have the capability to make that library automatically link in when"
-		    $ECHO "*** you link to this library.  But I can only do this if you have a"
-		    $ECHO "*** shared version of the library, which I believe you do not have"
-		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
-		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
 		  fi
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6590,7 +7734,7 @@ EOF
 		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		    case " $predeps $postdeps " in
 		    *" $i "*)
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		      i=""
 		      ;;
 		    esac
@@ -6601,29 +7745,29 @@ EOF
 		    set dummy $deplib_matches; shift
 		    deplib_match=$1
 		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		      newdeplibs="$newdeplibs $i"
+		      func_append newdeplibs " $i"
 		    else
 		      droppeddeps=yes
-		      $ECHO
+		      echo
 		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
-		      $ECHO "*** I have the capability to make that library automatically link in when"
-		      $ECHO "*** you link to this library.  But I can only do this if you have a"
-		      $ECHO "*** shared version of the library, which you do not appear to have"
-		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
-		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
 		    fi
 		  fi
 		else
 		  droppeddeps=yes
-		  $ECHO
+		  echo
 		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
-		  $ECHO "*** make it link in!  You will probably need to install it or some"
-		  $ECHO "*** library that it depends on before this library will be fully"
-		  $ECHO "*** functional.  Installing it before continuing would be even better."
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
 		fi
 		;;
 	      *)
-		newdeplibs="$newdeplibs $i"
+		func_append newdeplibs " $i"
 		;;
 	      esac
 	    done
@@ -6640,15 +7784,27 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
 	      fi
 	      if test -n "$a_deplib" ; then
 		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
 		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  if test "$want_nocaseglob" = yes; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
 		  for potent_lib in $potential_libs; do
 		      # Follow soft links.
 		      if ls -lLd "$potent_lib" 2>/dev/null |
@@ -6665,13 +7821,13 @@ EOF
 			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
 			case $potliblink in
 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
 			 $SED -e 10q |
 			 $EGREP "$file_magic_regex" > /dev/null; then
-			newdeplibs="$newdeplibs $a_deplib"
+			func_append newdeplibs " $a_deplib"
 			a_deplib=""
 			break 2
 		      fi
@@ -6680,12 +7836,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
 		else
@@ -6696,7 +7852,7 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
@@ -6712,7 +7868,7 @@ EOF
 	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 		case " $predeps $postdeps " in
 		*" $a_deplib "*)
-		  newdeplibs="$newdeplibs $a_deplib"
+		  func_append newdeplibs " $a_deplib"
 		  a_deplib=""
 		  ;;
 		esac
@@ -6723,9 +7879,9 @@ EOF
 		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 		  for potent_lib in $potential_libs; do
 		    potlib="$potent_lib" # see symlink-check above in file_magic test
-		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
 		       $EGREP "$match_pattern_regex" > /dev/null; then
-		      newdeplibs="$newdeplibs $a_deplib"
+		      func_append newdeplibs " $a_deplib"
 		      a_deplib=""
 		      break 2
 		    fi
@@ -6734,12 +7890,12 @@ EOF
 	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		$ECHO
+		echo
 		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
-		$ECHO "*** I have the capability to make that library automatically link in when"
-		$ECHO "*** you link to this library.  But I can only do this if you have a"
-		$ECHO "*** shared version of the library, which you do not appear to have"
-		$ECHO "*** because I did check the linker path looking for a file starting"
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
 		if test -z "$potlib" ; then
 		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
 		else
@@ -6750,32 +7906,32 @@ EOF
 	      ;;
 	    *)
 	      # Add a -L argument.
-	      newdeplibs="$newdeplibs $a_deplib"
+	      func_append newdeplibs " $a_deplib"
 	      ;;
 	    esac
 	  done # Gone through all deplibs.
 	  ;;
 	none | unknown | *)
 	  newdeplibs=""
-	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
-	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
 	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 	    for i in $predeps $postdeps ; do
 	      # can't use Xsed below, because $i might contain '/'
-	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
 	    done
 	  fi
-	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
-	     $GREP . >/dev/null; then
-	    $ECHO
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
 	    if test "X$deplibs_check_method" = "Xnone"; then
-	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
-	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
 	    fi
-	    $ECHO "*** All declared inter-library dependencies are being dropped."
+	    echo "*** All declared inter-library dependencies are being dropped."
 	    droppeddeps=yes
-	  fi
+	    ;;
+	  esac
 	  ;;
 	esac
 	versuffix=$versuffix_save
@@ -6787,23 +7943,23 @@ EOF
 	case $host in
 	*-*-rhapsody* | *-*-darwin1.[012])
 	  # On Rhapsody replace the C library with the System framework
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
 	  ;;
 	esac
 
 	if test "$droppeddeps" = yes; then
 	  if test "$module" = yes; then
-	    $ECHO
-	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
 	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
-	    $ECHO "*** a static module, that should work as long as the dlopening"
-	    $ECHO "*** application is linked with the -dlopen flag."
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
 	    if test -z "$global_symbol_pipe"; then
-	      $ECHO
-	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
-	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      $ECHO "*** not find such a program.  So, this module is probably useless."
-	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	    fi
 	    if test "$build_old_libs" = no; then
 	      oldlibs="$output_objdir/$libname.$libext"
@@ -6813,16 +7969,16 @@ EOF
 	      build_libtool_libs=no
 	    fi
 	  else
-	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
-	    $ECHO "*** automatically added whenever a program is linked with this library"
-	    $ECHO "*** or is declared to -dlopen it."
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
 
 	    if test "$allow_undefined" = no; then
-	      $ECHO
-	      $ECHO "*** Since this library must not contain undefined symbols,"
-	      $ECHO "*** because either the platform does not support them or"
-	      $ECHO "*** it was explicitly requested with -no-undefined,"
-	      $ECHO "*** libtool will only create a static version of it."
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
 	      if test "$build_old_libs" = no; then
 		oldlibs="$output_objdir/$libname.$libext"
 		build_libtool_libs=module
@@ -6839,9 +7995,9 @@ EOF
       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
       case $host in
 	*-*-darwin*)
-	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	  ;;
       esac
 
@@ -6854,7 +8010,7 @@ EOF
 	*)
 	  case " $deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -6864,10 +8020,10 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       deplibs="$new_libs"
@@ -6879,15 +8035,22 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
 	if test "$hardcode_into_libs" = yes; then
 	  # Hardcode the library paths
 	  hardcode_libdirs=
 	  dep_rpath=
 	  rpath="$finalize_rpath"
-	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
 	  for libdir in $rpath; do
 	    if test -n "$hardcode_libdir_flag_spec"; then
 	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
 		if test -z "$hardcode_libdirs"; then
 		  hardcode_libdirs="$libdir"
 		else
@@ -6896,18 +8059,18 @@ EOF
 		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		    ;;
 		  *)
-		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		    ;;
 		  esac
 		fi
 	      else
 		eval flag=\"$hardcode_libdir_flag_spec\"
-		dep_rpath="$dep_rpath $flag"
+		func_append dep_rpath " $flag"
 	      fi
 	    elif test -n "$runpath_var"; then
 	      case "$perm_rpath " in
 	      *" $libdir "*) ;;
-	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      *) func_append perm_rpath " $libdir" ;;
 	      esac
 	    fi
 	  done
@@ -6915,17 +8078,13 @@ EOF
 	  if test -n "$hardcode_libdir_separator" &&
 	     test -n "$hardcode_libdirs"; then
 	    libdir="$hardcode_libdirs"
-	    if test -n "$hardcode_libdir_flag_spec_ld"; then
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-	    else
-	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-	    fi
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
 	  fi
 	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
 	    # We should set the runpath_var.
 	    rpath=
 	    for dir in $perm_rpath; do
-	      rpath="$rpath$dir:"
+	      func_append rpath "$dir:"
 	    done
 	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
 	  fi
@@ -6933,7 +8092,7 @@ EOF
 	fi
 
 	shlibpath="$finalize_shlibpath"
-	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
 	if test -n "$shlibpath"; then
 	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 	fi
@@ -6959,18 +8118,18 @@ EOF
 	linknames=
 	for link
 	do
-	  linknames="$linknames $link"
+	  func_append linknames " $link"
 	done
 
 	# Use standard objects if they are pic
-	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
 	test "X$libobjs" = "X " && libobjs=
 
 	delfiles=
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
 	  export_symbols="$output_objdir/$libname.uexp"
-	  delfiles="$delfiles $export_symbols"
+	  func_append delfiles " $export_symbols"
 	fi
 
 	orig_export_symbols=
@@ -7001,13 +8160,45 @@ EOF
 	    $opt_dry_run || $RM $export_symbols
 	    cmds=$export_symbols_cmds
 	    save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	    for cmd1 in $cmds; do
 	      IFS="$save_ifs"
-	      eval cmd=\"$cmd\"
-	      func_len " $cmd"
-	      len=$func_len_result
-	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test "$try_normal_branch" = yes \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=${output_objdir}/${output_la}.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
 		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
 		skipped_export=false
 	      else
 		# The command line is too long to execute in one step.
@@ -7029,7 +8220,7 @@ EOF
 	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	  tmp_export_symbols="$export_symbols"
 	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	fi
 
 	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
@@ -7041,7 +8232,7 @@ EOF
 	  # global variables. join(1) would be nice here, but unfortunately
 	  # isn't a blessed tool.
 	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	  export_symbols=$output_objdir/$libname.def
 	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	fi
@@ -7051,7 +8242,7 @@ EOF
 	  case " $convenience " in
 	  *" $test_deplib "*) ;;
 	  *)
-	    tmp_deplibs="$tmp_deplibs $test_deplib"
+	    func_append tmp_deplibs " $test_deplib"
 	    ;;
 	  esac
 	done
@@ -7071,21 +8262,21 @@ EOF
 	    test "X$libobjs" = "X " && libobjs=
 	  else
 	    gentop="$output_objdir/${outputname}x"
-	    generated="$generated $gentop"
+	    func_append generated " $gentop"
 
 	    func_extract_archives $gentop $convenience
-	    libobjs="$libobjs $func_extract_archives_result"
+	    func_append libobjs " $func_extract_archives_result"
 	    test "X$libobjs" = "X " && libobjs=
 	  fi
 	fi
 
 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
-	  linker_flags="$linker_flags $flag"
+	  func_append linker_flags " $flag"
 	fi
 
 	# Make a backup of the uninstalled library when relinking
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
 	fi
 
@@ -7130,7 +8321,8 @@ EOF
 	    save_libobjs=$libobjs
 	  fi
 	  save_output=$output
-	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+	  func_basename "$output"
+	  output_la=$func_basename_result
 
 	  # Clear the reloadable object creation command queue and
 	  # initialize k to one.
@@ -7143,13 +8335,16 @@ EOF
 	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
 	    output=${output_objdir}/${output_la}.lnkscript
 	    func_verbose "creating GNU ld script: $output"
-	    $ECHO 'INPUT (' > $output
+	    echo 'INPUT (' > $output
 	    for obj in $save_libobjs
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    $ECHO ')' >> $output
-	    delfiles="$delfiles $output"
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
 	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
 	    output=${output_objdir}/${output_la}.lnk
 	    func_verbose "creating linker input file list: $output"
@@ -7163,10 +8358,12 @@ EOF
 	    fi
 	    for obj
 	    do
-	      $ECHO "$obj" >> $output
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
 	    done
-	    delfiles="$delfiles $output"
-	    output=$firstobj\"$file_list_spec$output\"
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
 	  else
 	    if test -n "$save_libobjs"; then
 	      func_verbose "creating reloadable object files..."
@@ -7190,17 +8387,19 @@ EOF
 		  # command to the queue.
 		  if test "$k" -eq 1 ; then
 		    # The first file doesn't have a previous command to add.
-		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
 		  else
 		    # All subsequent reloadable object files will link in
 		    # the last one created.
-		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
 		  fi
 		  last_robj=$output_objdir/$output_la-${k}.$objext
 		  func_arith $k + 1
 		  k=$func_arith_result
 		  output=$output_objdir/$output_la-${k}.$objext
-		  objlist=$obj
+		  objlist=" $obj"
 		  func_len " $last_robj"
 		  func_arith $len0 + $func_len_result
 		  len=$func_arith_result
@@ -7210,11 +8409,12 @@ EOF
 	      # reloadable object file.  All subsequent reloadable object
 	      # files will link in the last one created.
 	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
 	      if test -n "$last_robj"; then
 	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
 	      fi
-	      delfiles="$delfiles $output"
+	      func_append delfiles " $output"
 
 	    else
 	      output=
@@ -7248,7 +8448,7 @@ EOF
 		lt_exit=$?
 
 		# Restore the uninstalled library and exit
-		if test "$mode" = relink; then
+		if test "$opt_mode" = relink; then
 		  ( cd "$output_objdir" && \
 		    $RM "${realname}T" && \
 		    $MV "${realname}U" "$realname" )
@@ -7269,7 +8469,7 @@ EOF
 	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
 	      tmp_export_symbols="$export_symbols"
 	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
-	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
 	    fi
 
 	    if test -n "$orig_export_symbols"; then
@@ -7281,7 +8481,7 @@ EOF
 	      # global variables. join(1) would be nice here, but unfortunately
 	      # isn't a blessed tool.
 	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
-	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
 	      export_symbols=$output_objdir/$libname.def
 	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
 	    fi
@@ -7322,10 +8522,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  libobjs="$libobjs $func_extract_archives_result"
+	  func_append libobjs " $func_extract_archives_result"
 	  test "X$libobjs" = "X " && libobjs=
 	fi
 
@@ -7341,7 +8541,7 @@ EOF
 	    lt_exit=$?
 
 	    # Restore the uninstalled library and exit
-	    if test "$mode" = relink; then
+	    if test "$opt_mode" = relink; then
 	      ( cd "$output_objdir" && \
 	        $RM "${realname}T" && \
 		$MV "${realname}U" "$realname" )
@@ -7353,7 +8553,7 @@ EOF
 	IFS="$save_ifs"
 
 	# Restore the uninstalled library and exit
-	if test "$mode" = relink; then
+	if test "$opt_mode" = relink; then
 	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
 
 	  if test -n "$convenience"; then
@@ -7434,18 +8634,21 @@ EOF
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
 	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
 	else
 	  gentop="$output_objdir/${obj}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $convenience
 	  reload_conv_objs="$reload_objs $func_extract_archives_result"
 	fi
       fi
 
+      # If we're not building shared, we need to use non_pic_objs
+      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
       func_execute_cmds "$reload_cmds" 'exit $?'
@@ -7505,8 +8708,8 @@ EOF
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
 	# On Rhapsody replace the C library is the System framework
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
 	;;
       esac
 
@@ -7517,14 +8720,14 @@ EOF
 	if test "$tagname" = CXX ; then
 	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
 	    10.[0123])
-	      compile_command="$compile_command ${wl}-bind_at_load"
-	      finalize_command="$finalize_command ${wl}-bind_at_load"
+	      func_append compile_command " ${wl}-bind_at_load"
+	      func_append finalize_command " ${wl}-bind_at_load"
 	    ;;
 	  esac
 	fi
 	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
-	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
-	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
 	;;
       esac
 
@@ -7538,7 +8741,7 @@ EOF
 	*)
 	  case " $compile_deplibs " in
 	  *" -L$path/$objdir "*)
-	    new_libs="$new_libs -L$path/$objdir" ;;
+	    func_append new_libs " -L$path/$objdir" ;;
 	  esac
 	  ;;
 	esac
@@ -7548,17 +8751,17 @@ EOF
 	-L*)
 	  case " $new_libs " in
 	  *" $deplib "*) ;;
-	  *) new_libs="$new_libs $deplib" ;;
+	  *) func_append new_libs " $deplib" ;;
 	  esac
 	  ;;
-	*) new_libs="$new_libs $deplib" ;;
+	*) func_append new_libs " $deplib" ;;
 	esac
       done
       compile_deplibs="$new_libs"
 
 
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
 
       if test -n "$rpath$xrpath"; then
 	# If the user specified any rpath flags, then add them.
@@ -7566,7 +8769,7 @@ EOF
 	  # This is the magic to use -rpath.
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  *) func_append finalize_rpath " $libdir" ;;
 	  esac
 	done
       fi
@@ -7585,18 +8788,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  *) func_append perm_rpath " $libdir" ;;
 	  esac
 	fi
 	case $host in
@@ -7605,12 +8808,12 @@ EOF
 	  case :$dllsearchpath: in
 	  *":$libdir:"*) ;;
 	  ::) dllsearchpath=$libdir;;
-	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  *) func_append dllsearchpath ":$libdir";;
 	  esac
 	  case :$dllsearchpath: in
 	  *":$testbindir:"*) ;;
 	  ::) dllsearchpath=$testbindir;;
-	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  *) func_append dllsearchpath ":$testbindir";;
 	  esac
 	  ;;
 	esac
@@ -7636,18 +8839,18 @@ EOF
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
-		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
 		;;
 	      esac
 	    fi
 	  else
 	    eval flag=\"$hardcode_libdir_flag_spec\"
-	    rpath="$rpath $flag"
+	    func_append rpath " $flag"
 	  fi
 	elif test -n "$runpath_var"; then
 	  case "$finalize_perm_rpath " in
 	  *" $libdir "*) ;;
-	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
 	  esac
 	fi
       done
@@ -7661,8 +8864,8 @@ EOF
 
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
 	# Transform all the library objects into standard objects.
-	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
       func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
@@ -7674,15 +8877,15 @@ EOF
 
       wrappers_required=yes
       case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
       *cygwin* | *mingw* )
         if test "$build_libtool_libs" != yes; then
           wrappers_required=no
         fi
         ;;
-      *cegcc)
-        # Disable wrappers for cegcc, we are cross compiling anyway.
-        wrappers_required=no
-        ;;
       *)
         if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
           wrappers_required=no
@@ -7691,13 +8894,19 @@ EOF
       esac
       if test "$wrappers_required" = no; then
 	# Replace the output file specification.
-	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"
 
 	# We have no uninstalled library dependencies, so finalize right now.
 	exit_status=0
 	func_show_eval "$link_command" 'exit_status=$?'
 
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	# Delete the generated files.
 	if test -f "$output_objdir/${outputname}S.${objext}"; then
 	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
@@ -7720,7 +8929,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7728,7 +8937,7 @@ EOF
 	  # We should set the runpath_var.
 	  rpath=
 	  for dir in $finalize_perm_rpath; do
-	    rpath="$rpath$dir:"
+	    func_append rpath "$dir:"
 	  done
 	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
 	fi
@@ -7738,11 +8947,18 @@ EOF
 	# We don't need to create a wrapper script.
 	link_command="$compile_var$compile_command$compile_rpath"
 	# Replace the output file specification.
-	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
 	# Delete the old output file.
 	$opt_dry_run || $RM $output
 	# Link the executable and exit
 	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
 	exit $EXIT_SUCCESS
       fi
 
@@ -7757,7 +8973,7 @@ EOF
 	if test "$fast_install" != no; then
 	  link_command="$finalize_var$compile_command$finalize_rpath"
 	  if test "$fast_install" = yes; then
-	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
 	  else
 	    # fast_install is set to needless
 	    relink_command=
@@ -7769,13 +8985,19 @@ EOF
       fi
 
       # Replace the output file specification.
-      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 
       # Delete the old output files.
       $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
       func_show_eval "$link_command" 'exit $?'
 
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
       # Now create the wrapper script.
       func_verbose "creating $output"
 
@@ -7793,18 +9015,7 @@ EOF
 	  fi
 	done
 	relink_command="(cd `pwd`; $relink_command)"
-	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $ECHO for shipping.
-      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
-	case $progpath in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-	esac
-	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -7884,7 +9095,7 @@ EOF
 	else
 	  oldobjs="$old_deplibs $non_pic_objects"
 	  if test "$preload" = yes && test -f "$symfileobj"; then
-	    oldobjs="$oldobjs $symfileobj"
+	    func_append oldobjs " $symfileobj"
 	  fi
 	fi
 	addlibs="$old_convenience"
@@ -7892,10 +9103,10 @@ EOF
 
       if test -n "$addlibs"; then
 	gentop="$output_objdir/${outputname}x"
-	generated="$generated $gentop"
+	func_append generated " $gentop"
 
 	func_extract_archives $gentop $addlibs
-	oldobjs="$oldobjs $func_extract_archives_result"
+	func_append oldobjs " $func_extract_archives_result"
       fi
 
       # Do each command in the archive commands.
@@ -7906,10 +9117,10 @@ EOF
 	# Add any objects from preloaded convenience libraries
 	if test -n "$dlprefiles"; then
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 
 	  func_extract_archives $gentop $dlprefiles
-	  oldobjs="$oldobjs $func_extract_archives_result"
+	  func_append oldobjs " $func_extract_archives_result"
 	fi
 
 	# POSIX demands no paths to be encoded in archives.  We have
@@ -7925,9 +9136,9 @@ EOF
 	    done | sort | sort -uc >/dev/null 2>&1); then
 	  :
 	else
-	  $ECHO "copying selected object files to avoid basename conflicts..."
+	  echo "copying selected object files to avoid basename conflicts..."
 	  gentop="$output_objdir/${outputname}x"
-	  generated="$generated $gentop"
+	  func_append generated " $gentop"
 	  func_mkdir_p "$gentop"
 	  save_oldobjs=$oldobjs
 	  oldobjs=
@@ -7951,18 +9162,30 @@ EOF
 		esac
 	      done
 	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-	      oldobjs="$oldobjs $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
 	      ;;
-	    *) oldobjs="$oldobjs $obj" ;;
+	    *) func_append oldobjs " $obj" ;;
 	    esac
 	  done
 	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
 	eval cmds=\"$old_archive_cmds\"
 
 	func_len " $cmds"
 	len=$func_len_result
 	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
 	else
 	  # the command line is too long to link in one step, link in parts
 	  func_verbose "using piecewise archive linking..."
@@ -8036,7 +9259,7 @@ EOF
       done
       # Quote the link command for shipping.
       relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test "$hardcode_automatic" = yes ; then
 	relink_command=
       fi
@@ -8056,12 +9279,23 @@ EOF
 	      *.la)
 		func_basename "$deplib"
 		name="$func_basename_result"
-		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$deplib' is not a valid libtool archive"
-		newdependency_libs="$newdependency_libs $libdir/$name"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
 		;;
-	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
 	      esac
 	    done
 	    dependency_libs="$newdependency_libs"
@@ -8075,9 +9309,9 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlfiles="$newdlfiles $libdir/$name"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
-	      *) newdlfiles="$newdlfiles $lib" ;;
+	      *) func_append newdlfiles " $lib" ;;
 	      esac
 	    done
 	    dlfiles="$newdlfiles"
@@ -8094,7 +9328,7 @@ EOF
 		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 		test -z "$libdir" && \
 		  func_fatal_error "\`$lib' is not a valid libtool archive"
-		newdlprefiles="$newdlprefiles $libdir/$name"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
 		;;
 	      esac
 	    done
@@ -8106,7 +9340,7 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlfiles="$newdlfiles $abs"
+	      func_append newdlfiles " $abs"
 	    done
 	    dlfiles="$newdlfiles"
 	    newdlprefiles=
@@ -8115,15 +9349,33 @@ EOF
 		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 		*) abs=`pwd`"/$lib" ;;
 	      esac
-	      newdlprefiles="$newdlprefiles $abs"
+	      func_append newdlprefiles " $abs"
 	    done
 	    dlprefiles="$newdlprefiles"
 	  fi
 	  $RM $output
 	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
 	  tdlname=$dlname
 	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test "x$bindir" != x ;
+	      then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
 	  esac
 	  $ECHO > $output "\
 # $outputname - a libtool library file
@@ -8182,7 +9434,7 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$mode" = link || test "$mode" = relink; } &&
+{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
     func_mode_link ${1+"$@"}
 
 
@@ -8202,9 +9454,9 @@ func_mode_uninstall ()
     for arg
     do
       case $arg in
-      -f) RM="$RM $arg"; rmforce=yes ;;
-      -*) RM="$RM $arg" ;;
-      *) files="$files $arg" ;;
+      -f) func_append RM " $arg"; rmforce=yes ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
       esac
     done
 
@@ -8213,24 +9465,23 @@ func_mode_uninstall ()
 
     rmdirs=
 
-    origobjdir="$objdir"
     for file in $files; do
       func_dirname "$file" "" "."
       dir="$func_dirname_result"
       if test "X$dir" = X.; then
-	objdir="$origobjdir"
+	odir="$objdir"
       else
-	objdir="$dir/$origobjdir"
+	odir="$dir/$objdir"
       fi
       func_basename "$file"
       name="$func_basename_result"
-      test "$mode" = uninstall && objdir="$dir"
+      test "$opt_mode" = uninstall && odir="$dir"
 
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test "$opt_mode" = clean; then
 	case " $rmdirs " in
-	  *" $objdir "*) ;;
-	  *) rmdirs="$rmdirs $objdir" ;;
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
 	esac
       fi
 
@@ -8256,18 +9507,17 @@ func_mode_uninstall ()
 
 	  # Delete the libtool libraries and symlinks.
 	  for n in $library_names; do
-	    rmfiles="$rmfiles $objdir/$n"
+	    func_append rmfiles " $odir/$n"
 	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-	  case "$mode" in
+	  case "$opt_mode" in
 	  clean)
-	    case "  $library_names " in
-	    # "  " in the beginning catches empty $dlname
+	    case " $library_names " in
 	    *" $dlname "*) ;;
-	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
 	    esac
-	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
 	    ;;
 	  uninstall)
 	    if test -n "$library_names"; then
@@ -8295,19 +9545,19 @@ func_mode_uninstall ()
 	  # Add PIC object to the list of files to remove.
 	  if test -n "$pic_object" &&
 	     test "$pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$pic_object"
+	    func_append rmfiles " $dir/$pic_object"
 	  fi
 
 	  # Add non-PIC object to the list of files to remove.
 	  if test -n "$non_pic_object" &&
 	     test "$non_pic_object" != none; then
-	    rmfiles="$rmfiles $dir/$non_pic_object"
+	    func_append rmfiles " $dir/$non_pic_object"
 	  fi
 	fi
 	;;
 
       *)
-	if test "$mode" = clean ; then
+	if test "$opt_mode" = clean ; then
 	  noexename=$name
 	  case $file in
 	  *.exe)
@@ -8317,7 +9567,7 @@ func_mode_uninstall ()
 	    noexename=$func_stripname_result
 	    # $file with .exe has already been added to rmfiles,
 	    # add $file without .exe
-	    rmfiles="$rmfiles $file"
+	    func_append rmfiles " $file"
 	    ;;
 	  esac
 	  # Do a test to see if this is a libtool program.
@@ -8326,7 +9576,7 @@ func_mode_uninstall ()
 	      func_ltwrapper_scriptname "$file"
 	      relink_command=
 	      func_source $func_ltwrapper_scriptname_result
-	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
 	    else
 	      relink_command=
 	      func_source $dir/$noexename
@@ -8334,12 +9584,12 @@ func_mode_uninstall ()
 
 	    # note $name still contains .exe if it was in $file originally
 	    # as does the version of $file that was added into $rmfiles
-	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
 	    if test "$fast_install" = yes && test -n "$relink_command"; then
-	      rmfiles="$rmfiles $objdir/lt-$name"
+	      func_append rmfiles " $odir/lt-$name"
 	    fi
 	    if test "X$noexename" != "X$name" ; then
-	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	      func_append rmfiles " $odir/lt-${noexename}.c"
 	    fi
 	  fi
 	fi
@@ -8347,7 +9597,6 @@ func_mode_uninstall ()
       esac
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
-    objdir="$origobjdir"
 
     # Try to remove the ${objdir}s in the directories where we deleted files
     for dir in $rmdirs; do
@@ -8359,16 +9608,16 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$mode" = uninstall || test "$mode" = clean; } &&
+{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
     func_mode_uninstall ${1+"$@"}
 
-test -z "$mode" && {
+test -z "$opt_mode" && {
   help="$generic_help"
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$mode'"
+  func_fatal_help "invalid operation mode \`$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
diff --git a/admin/missing b/admin/missing
index 28055d2..86a8fc3 100755
--- a/admin/missing
+++ b/admin/missing
@@ -1,10 +1,10 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-01-06.13; # UTC
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
+# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -84,7 +84,6 @@ Supported PROGRAM values:
   help2man     touch the output file
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
 
 Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
@@ -122,15 +121,6 @@ case $1 in
     # Not GNU programs, they don't have --version.
     ;;
 
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
   *)
     if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
        # We have it, but it failed.
@@ -226,7 +216,7 @@ WARNING: \`$1' $msg.  You should only need it if
          \`Bison' from any GNU archive site."
     rm -f y.tab.c y.tab.h
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.y)
 	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
@@ -256,7 +246,7 @@ WARNING: \`$1' is $msg.  You should only need it if
          \`Flex' from any GNU archive site."
     rm -f lex.yy.c
     if test $# -ne 1; then
-        eval LASTARG="\${$#}"
+        eval LASTARG=\${$#}
 	case $LASTARG in
 	*.l)
 	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
@@ -318,41 +308,6 @@ WARNING: \`$1' is $msg.  You should only need it if
     touch $file
     ;;
 
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
   *)
     echo 1>&2 "\
 WARNING: \`$1' is needed, and is $msg.
diff --git a/calib/cal/REF_BP_MAP.fits b/calib/cal/REF_BP_MAP.fits
index 9dff1f1..28320ae 100644
--- a/calib/cal/REF_BP_MAP.fits
+++ b/calib/cal/REF_BP_MAP.fits
@@ -1 +1 @@
-SIMPLE  =                    T / Standard FITS format: NOST 100-2.0             BITPIX  =                  -32 / No. of bits per pixel                          NAXIS   =                    2 / No. of axes in image                           NAXIS1  =                 2048 / No. of pixels                                  NAXIS2  =                 2048 / No. of pixels                                  EXTEND  =                    T / FITS extension may be present                  BLOCKED =    [...]
\ No newline at end of file
+SIMPLE  =                    T / Standard FITS format: NOST 100-2.0             BITPIX  =                  -32 / No. of bits per pixel                          NAXIS   =                    2 / No. of axes in image                           NAXIS1  =                 2048 / No. of pixels                                  NAXIS2  =                 2048 / No. of pixels                                  EXTEND  =                    T / FITS extension may be present                               [...]
\ No newline at end of file
diff --git a/calib/cal/SI_GATM_REF_CORR_HK_025.fits b/calib/cal/SI_GATM_REF_CORR_HK_025.fits
index cf6535e..4bcc0f9 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_HK_025.fits and b/calib/cal/SI_GATM_REF_CORR_HK_025.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_HK_100.fits b/calib/cal/SI_GATM_REF_CORR_HK_100.fits
index 64819c9..caa49cf 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_HK_100.fits and b/calib/cal/SI_GATM_REF_CORR_HK_100.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_H_025.fits b/calib/cal/SI_GATM_REF_CORR_H_025.fits
index 4a45c64..f284052 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_H_025.fits and b/calib/cal/SI_GATM_REF_CORR_H_025.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_H_100.fits b/calib/cal/SI_GATM_REF_CORR_H_100.fits
index 07c68f2..76f714d 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_H_100.fits and b/calib/cal/SI_GATM_REF_CORR_H_100.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_J_025.fits b/calib/cal/SI_GATM_REF_CORR_J_025.fits
index 905c213..7cb26f5 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_J_025.fits and b/calib/cal/SI_GATM_REF_CORR_J_025.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_J_100.fits b/calib/cal/SI_GATM_REF_CORR_J_100.fits
index fb499f7..ec94326 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_J_100.fits and b/calib/cal/SI_GATM_REF_CORR_J_100.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_K_025.fits b/calib/cal/SI_GATM_REF_CORR_K_025.fits
index bcf304c..14022ff 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_K_025.fits and b/calib/cal/SI_GATM_REF_CORR_K_025.fits differ
diff --git a/calib/cal/SI_GATM_REF_CORR_K_100.fits b/calib/cal/SI_GATM_REF_CORR_K_100.fits
index fddae4b..131ec76 100644
Binary files a/calib/cal/SI_GATM_REF_CORR_K_100.fits and b/calib/cal/SI_GATM_REF_CORR_K_100.fits differ
diff --git a/calib/cal/argonJ.fits b/calib/cal/argonJ.fits
index 86b4e58..479e389 100644
Binary files a/calib/cal/argonJ.fits and b/calib/cal/argonJ.fits differ
diff --git a/calib/cal/atmoexan.fits b/calib/cal/atmoexan.fits
index 490ef0e..bd65542 100644
--- a/calib/cal/atmoexan.fits
+++ b/calib/cal/atmoexan.fits
@@ -1,4 +1,4 @@
-SIMPLE  =                    T / Standard FITS format                           BITPIX  =                  -32 / No. of bits per pixel                          NAXIS   =                    0 / Empty Prime data matrix                        EXTEND  =                    T / FITS extension may be present                  BLOCKED =                    T / FITS file may be blocked                                                                                                       ORIGIN  = 'E [...]
+SIMPLE  =                    T / Standard FITS format                           BITPIX  =                  -32 / No. of bits per pixel                          NAXIS   =                    0 / Empty Prime data matrix                        EXTEND  =                    T / FITS extension may be present                  BLOCKED =                    T / FITS file may be blocked                                                                                                       ORIGIN  = 'E [...]
 EH  ?p��EN@ ?8Q�ET� ?��EZ� ?
�Ea  >�Eg@ >��Em� >�p�Es� >���Ez  >���E�  >�=qE�@ >�  E�` >aG�E�� >L��E�� >B�\E�� >.{E�� >#�
 E�  >#�
 E�  >\)E�@ >
�E�� =�E�� =�G�E�  =���E�@ =���E�� =�Q�E�� =��
diff --git a/calib/cal/drs_setup_wave.fits b/calib/cal/drs_setup_wave.fits
index 3bd9548..31a8968 100644
Binary files a/calib/cal/drs_setup_wave.fits and b/calib/cal/drs_setup_wave.fits differ
diff --git a/calib/cal/drs_setup_wave_oh.fits b/calib/cal/drs_setup_wave_oh.fits
index 7f191af..5dc2d8b 100644
Binary files a/calib/cal/drs_setup_wave_oh.fits and b/calib/cal/drs_setup_wave_oh.fits differ
diff --git a/calib/cal/neonK.fits b/calib/cal/neonK.fits
index e68dd30..de6d3d5 100644
Binary files a/calib/cal/neonK.fits and b/calib/cal/neonK.fits differ
diff --git a/calib/cal/xenonHK.fits b/calib/cal/xenonHK.fits
index edda449..83c8604 100644
Binary files a/calib/cal/xenonHK.fits and b/calib/cal/xenonHK.fits differ
diff --git a/calib/cal/xenonargonH.fits b/calib/cal/xenonargonH.fits
index c232777..2e1e663 100644
Binary files a/calib/cal/xenonargonH.fits and b/calib/cal/xenonargonH.fits differ
diff --git a/calib/gasgano/config/SINFO.prefs b/calib/gasgano/config/SINFO.prefs
index 2b3f49d..e10b070 100644
--- a/calib/gasgano/config/SINFO.prefs
+++ b/calib/gasgano/config/SINFO.prefs
@@ -41,7 +41,7 @@ PRINTER_NAME=lp
 PRINT_FONT=Monospaced:16
 PRINT_ORIENTATION=P
 RADEC_CONVERSION=true
-RECIPE_SET=sinfo_rec_detlin=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.3.3/sinfo_rec_detlin.so;sinfo_rec_distortion=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.3.3/sinfo_rec_distortion.so;sinfo_rec_jitter=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.3.3/sinfo_rec_jitter.so;sinfo_rec_mdark=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.3.3/sinfo_rec_mdark.so;sinfo_rec_mflat=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2. [...]
+RECIPE_SET=sinfo_rec_detlin=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.4.0/sinfo_rec_detlin.so;sinfo_rec_distortion=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.4.0/sinfo_rec_distortion.so;sinfo_rec_jitter=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.4.0/sinfo_rec_jitter.so;sinfo_rec_mdark=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2.4.0/sinfo_rec_mdark.so;sinfo_rec_mflat=/home/quality/pipelines/sinfo/lib/esopipes-plugins/sinfo-2. [...]
 SCRIPTS_DIR=/home/astro4/gasgano/scripts/gas-scripts
 SHORTEN_FILES_PATH=false
 SHORT_FILENAME=true
diff --git a/config.h.in b/config.h.in
index 1a30853..a87a844 100644
--- a/config.h.in
+++ b/config.h.in
@@ -85,6 +85,9 @@
 /* Define to the one symbol short name of this package. */
 #undef PACKAGE_TARNAME
 
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
diff --git a/configure b/configure
index 5751d58..a4358c7 100755
--- a/configure
+++ b/configure
@@ -1,20 +1,24 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.63 for SINFONI Instrument Pipeline 2.3.3.
+# Generated by GNU Autoconf 2.68 for SINFONI Instrument Pipeline 2.4.0.
+#
+# Report bugs to <usd-help at eso.org>.
 #
-# Report bugs to <amodigli at eso.org>.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
@@ -22,23 +26,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
 as_nl='
 '
 export as_nl
@@ -46,7 +42,13 @@ export as_nl
 as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
   as_echo='printf %s\n'
   as_echo_n='printf %s'
 else
@@ -57,7 +59,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in
+      case $arg in #(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -80,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
   }
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
 
 # IFS
 # We need space, tab and new line, in precisely that order.  Quoting is
@@ -96,15 +91,16 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+as_myself=
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -116,12 +112,16 @@ if test "x$as_myself" = x; then
 fi
 if test ! -f "$as_myself"; then
   $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
@@ -133,330 +133,315 @@ export LC_ALL
 LANGUAGE=C
 export LANGUAGE
 
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
 # CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
 else
-  as_have_required=no
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
-
-  if test $as_have_required = yes &&	 (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
 
 exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+  as_have_required=no
 fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
 
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
 else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
-else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  case $as_dir in
+  as_found=:
+  case $as_dir in #(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
 	   done;;
        esac
+  as_found=false
 done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
 IFS=$as_save_IFS
 
 
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		{ ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and usd-help at eso.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
 fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
 
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
 }
+as_unset=as_fn_unset
 
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
 
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
 
-if as_func_ret_success; then
-  :
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
 else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test "x$CONFIG_SHELL" != x; then
-  for as_var in BASH_ENV ENV
-	do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-	done
-	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
 
 
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
 
-exitcode=0
-if as_func_success; then
-  :
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
 else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
+  as_expr=false
 fi
 
-if as_func_ret_success; then
-  :
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
 else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+  as_basename=false
 fi
 
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_dirname=false
 fi
 
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  echo Please tell bug-autoconf at gnu.org about your system,
-  echo including any error possibly output before this message.
-  echo This can help us improve future autoconf versions.
-  echo Configuration will now proceed without shell functions.
-}
-
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
 
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -473,8 +458,7 @@ test \$exitcode = 0") || {
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -484,29 +468,18 @@ test \$exitcode = 0") || {
   exit
 }
 
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
 
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
@@ -536,7 +509,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -555,10 +528,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in
+	case $1 in #(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -571,161 +544,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
-
-
-
-# Check that we are running under the correct shell.
 SHELL=${CONFIG_SHELL-/bin/sh}
 
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-$*
-_LT_EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL $0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
-
-	  if test "$prev" != 'sed 50q "$0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
 
-
-
-exec 7<&0 </dev/null 6>&1
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -740,14 +566,14 @@ cross_compiling=no
 subdirs=
 MFLAGS=
 MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Identity of this package.
 PACKAGE_NAME='SINFONI Instrument Pipeline'
 PACKAGE_TARNAME='sinfo'
-PACKAGE_VERSION='2.3.3'
-PACKAGE_STRING='SINFONI Instrument Pipeline 2.3.3'
-PACKAGE_BUGREPORT='amodigli at eso.org'
+PACKAGE_VERSION='2.4.0'
+PACKAGE_STRING='SINFONI Instrument Pipeline 2.4.0'
+PACKAGE_BUGREPORT='usd-help at eso.org'
+PACKAGE_URL=''
 
 ac_unique_file="Makefile.am"
 ac_default_prefix=${PIPE_HOME:-/usr/local}
@@ -799,6 +625,8 @@ IRPLIB_LDFLAGS
 IRPLIB_INCLUDES
 SINFONI_LDFLAGS
 SINFONI_INCLUDES
+wkfcopydir
+wkfextradir
 configdir
 pipedocsdir
 privatelibdir
@@ -821,9 +649,11 @@ OTOOL
 LIPO
 NMEDIT
 DSYMUTIL
-lt_ECHO
+MANIFEST_TOOL
 RANLIB
+ac_ct_AR
 AR
+DLLTOOL
 OBJDUMP
 NM
 ac_ct_DUMPBIN
@@ -842,6 +672,7 @@ CPP
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -933,6 +764,7 @@ bindir
 program_transform_name
 prefix
 exec_prefix
+PACKAGE_URL
 PACKAGE_BUGREPORT
 PACKAGE_STRING
 PACKAGE_VERSION
@@ -952,6 +784,7 @@ enable_shared
 with_pic
 enable_fast_install
 with_gnu_ld
+with_sysroot
 enable_libtool_lock
 with_cext
 with_cext_includes
@@ -1040,8 +873,9 @@ do
   fi
 
   case $ac_option in
-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)	ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1086,8 +920,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1113,8 +946,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      as_fn_error $? "invalid feature name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1318,8 +1150,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1335,8 +1166,7 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
-   { (exit 1); exit 1; }; }
+      as_fn_error $? "invalid package name: $ac_useropt"
     ac_useropt_orig=$ac_useropt
     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
@@ -1366,17 +1196,17 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
@@ -1385,7 +1215,7 @@ Try \`$0 --help' for more information." >&2
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1393,15 +1223,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "missing argument to $ac_option"
 fi
 
 if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
-    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
-   { (exit 1); exit 1; }; } ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1424,8 +1252,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
 done
 
 # There might be people who depend on the old broken behavior: `$host'
@@ -1439,8 +1266,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1455,11 +1282,9 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  { $as_echo "$as_me: error: working directory cannot be determined" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "working directory cannot be determined"
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1498,13 +1323,11 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
-   { (exit 1); exit 1; }; }
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
 	pwd)`
 # When building in place, set srcdir=.
 if test "$ac_abs_confdir" = "$ac_pwd"; then
@@ -1530,7 +1353,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures SINFONI Instrument Pipeline 2.3.3 to adapt to many kinds of systems.
+\`configure' configures SINFONI Instrument Pipeline 2.4.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1544,7 +1367,7 @@ Configuration:
       --help=short        display options specific to this package
       --help=recursive    display the short help of all the included packages
   -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
+  -q, --quiet, --silent   do not print \`checking ...' messages
       --cache-file=FILE   cache test results in FILE [disabled]
   -C, --config-cache      alias for \`--cache-file=config.cache'
   -n, --no-create         do not create output files
@@ -1601,7 +1424,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of SINFONI Instrument Pipeline 2.3.3:";;
+     short | recursive ) echo "Configuration of SINFONI Instrument Pipeline 2.4.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1613,9 +1436,9 @@ Optional Features:
 			  (and sometimes confusing) to the casual installer
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-debug          creates debugging code [default=no]
+  --enable-debug          creates debugging code [[default=no]]
   --enable-strict         compiles with strict compiler options (may not
-                          work!) [default=no]
+                          work!) [[default=no]]
   --enable-static[=PKGS]  build static libraries [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-fast-install[=PKGS]
@@ -1625,120 +1448,522 @@ Optional Features:
   --disable-cpl-test      disables checks for the CPL library and headers
   --disable-purify        disables the check for the PURIFY installation
   --enable-profile        compiles with compiler options necessary for
-                          profiling (may not work!) [default=no]
+                          profiling (may not work!) [[default=no]]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot=DIR Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).
+  --with-cext             location where libcext is installed
+  --with-cext-includes    location of the libcext header files
+  --with-cext-libs        location of the libcext library
+  --with-cpl              location where CPL is installed
+  --with-cpl-includes     location of the CPL header files
+  --with-cpl-libs         location of the CPL library
+  --with-extra-includes=DIR
+                          adds non standard include paths
+  --with-extra-libs=DIR   adds non standard library paths
+  --with-dmalloc          use dmalloc, as in http://www.dmalloc.com
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  DOXYGEN     doxygen command
+  LATEX       latex command
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <usd-help at eso.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+SINFONI Instrument Pipeline configure 2.4.0
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
 
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-cext             location where libcext is installed
-  --with-cext-includes    location of the libcext header files
-  --with-cext-libs        location of the libcext library
-  --with-cpl              location where CPL is installed
-  --with-cpl-includes     location of the CPL header files
-  --with-cpl-libs         location of the CPL library
-  --with-extra-includes=DIR
-                          adds non standard include paths
-  --with-extra-libs=DIR   adds non standard library paths
-  --with-dmalloc          use dmalloc, as in
-			  http://www.dmalloc.com/dmalloc.tar.gz
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
 
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-  DOXYGEN     doxygen command
-  LATEX       latex command
+#undef $2
 
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
 
-Report bugs to <amodigli at eso.org>.
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
 _ACEOF
-ac_status=$?
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
+} # ac_fn_c_check_func
 
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------- ##
+## Report this to usd-help at eso.org ##
+## ------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-SINFONI Instrument Pipeline configure 2.3.3
-generated by GNU Autoconf 2.63
+} # ac_fn_c_check_header_mongrel
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
 _ACEOF
-  exit
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by SINFONI Instrument Pipeline $as_me 2.3.3, which was
-generated by GNU Autoconf 2.63.  Invocation command line was
+It was created by SINFONI Instrument Pipeline $as_me 2.4.0, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -1774,8 +1999,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  $as_echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
 IFS=$as_save_IFS
 
 } >&5
@@ -1812,9 +2037,9 @@ do
       ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
     2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      as_fn_append ac_configure_args1 " '$ac_arg'"
       if test $ac_must_keep_next = true; then
 	ac_must_keep_next=false # Got value, back to normal.
       else
@@ -1830,13 +2055,13 @@ do
 	  -* ) ac_must_keep_next=true ;;
 	esac
       fi
-      ac_configure_args="$ac_configure_args '$ac_arg'"
+      as_fn_append ac_configure_args " '$ac_arg'"
       ;;
     esac
   done
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1848,11 +2073,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -1861,13 +2084,13 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
       BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) $as_unset $ac_var ;;
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -1886,11 +2109,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -1903,11 +2124,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -1921,11 +2140,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -1939,46 +2156,53 @@ _ASBOX
     exit $exit_status
 ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
 done
 ac_signal=0
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
+$as_echo "/* confdefs.h */" > confdefs.h
+
 # Predefined preprocessor variables.
 
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_NAME "$PACKAGE_NAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_VERSION "$PACKAGE_VERSION"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_STRING "$PACKAGE_STRING"
 _ACEOF
 
-
 cat >>confdefs.h <<_ACEOF
 #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 _ACEOF
 
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
 
 # Let the site file select an alternate cache file if it wants to.
 # Prefer an explicitly selected file to automatically selected ones.
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -1989,19 +2213,23 @@ fi
 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
   test "x$ac_site_file" = xNONE && continue
-  if test -r "$ac_site_file"; then
-    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
 if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
 $as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
@@ -2009,7 +2237,7 @@ $as_echo "$as_me: loading cache $cache_file" >&6;}
     esac
   fi
 else
-  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
 $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
@@ -2024,11 +2252,11 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
@@ -2038,17 +2266,17 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
 	ac_old_val_w=`echo x $ac_old_val`
 	ac_new_val_w=`echo x $ac_new_val`
 	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
 	  ac_cache_corrupted=:
 	else
-	  { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
 	  eval $ac_var=\$ac_old_val
 	fi
-	{ $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
 $as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
 $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
@@ -2060,43 +2288,20 @@ $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
     esac
     case " $ac_configure_args " in
       *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
     esac
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2126,9 +2331,7 @@ for ac_dir in admin "$srcdir"/admin; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&5
-$as_echo "$as_me: error: cannot find install-sh or install.sh in admin \"$srcdir\"/admin" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in admin \"$srcdir\"/admin" "$LINENO" 5
 fi
 
 # These three variables are undocumented and unsupported,
@@ -2143,35 +2346,27 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-$as_echo "$as_me: error: invalid value of canonical build" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -2187,28 +2382,24 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-$as_echo "$as_me: error: invalid value of canonical host" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -2224,28 +2415,24 @@ IFS=$ac_save_IFS
 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:$LINENO: checking target system type" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
 $as_echo_n "checking target system type... " >&6; }
-if test "${ac_cv_target+set}" = set; then
+if ${ac_cv_target+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$target_alias" = x; then
   ac_cv_target=$ac_cv_host
 else
   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
-$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
 $as_echo "$ac_cv_target" >&6; }
 case $ac_cv_target in
 *-*-*) ;;
-*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
-$as_echo "$as_me: error: invalid value of canonical target" >&2;}
-   { (exit 1); exit 1; }; };;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
 esac
 target=$ac_cv_target
 ac_save_IFS=$IFS; IFS='-'
@@ -2284,10 +2471,10 @@ am__api_version='1.11'
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 # Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
 $as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2295,11 +2482,11 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
   *)
     # OSF1 and SCO ODT 3.0 have their own names for install.
@@ -2336,7 +2523,7 @@ case $as_dir/ in
     ;;
 esac
 
-done
+  done
 IFS=$as_save_IFS
 
 rm -rf conftest.one conftest.two conftest.dir
@@ -2352,7 +2539,7 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
 $as_echo "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
@@ -2363,7 +2550,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
 # Just in case
 sleep 1
@@ -2374,15 +2561,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
-$as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
-   { (exit 1); exit 1; }; };;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
-    { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
-$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
-   { (exit 1); exit 1; }; };;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2404,11 +2587,8 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
    fi
 
    test "$2" = conftest.file
@@ -2417,13 +2597,10 @@ then
    # Ok.
    :
 else
-   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-$as_echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
 fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
@@ -2451,7 +2628,7 @@ if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
 fi
 
@@ -2472,9 +2649,9 @@ if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2485,24 +2662,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
 $as_echo "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2512,9 +2689,9 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2525,24 +2702,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
 $as_echo "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2551,7 +2728,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -2564,10 +2741,10 @@ fi
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
-{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2575,7 +2752,7 @@ for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in mkdir gmkdir; do
+    for ac_prog in mkdir gmkdir; do
 	 for ac_exec_ext in '' $ac_executable_extensions; do
 	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
 	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
@@ -2587,11 +2764,12 @@ do
 	   esac
 	 done
        done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 
+  test -d ./--version && rmdir ./--version
   if test "${ac_cv_path_mkdir+set}" = set; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
@@ -2599,11 +2777,10 @@ fi
     # value for MKDIR_P within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the value is a relative name.
-    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
 mkdir_p="$MKDIR_P"
@@ -2616,9 +2793,9 @@ for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2629,24 +2806,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
 $as_echo "$AWK" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2654,11 +2831,11 @@ fi
   test -n "$AWK" && break
 done
 
-{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2666,7 +2843,7 @@ SHELL = /bin/sh
 all:
 	@echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
 case `${MAKE-make} -f conftest.make 2>/dev/null` in
   *@@@%%%=?*=@@@%%%*)
     eval ac_cv_prog_make_${ac_make}_set=yes;;
@@ -2676,11 +2853,11 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
@@ -2700,9 +2877,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -2718,7 +2893,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='sinfo'
- VERSION='2.3.3'
+ VERSION='2.4.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2748,11 +2923,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -2762,16 +2937,16 @@ ac_config_headers="$ac_config_headers config.h"
 
 
 
-{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
+if test "${enable_maintainer_mode+set}" = set; then :
   enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
 else
   USE_MAINTAINER_MODE=no
 fi
 
-  { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
 $as_echo "$USE_MAINTAINER_MODE" >&6; }
    if test $USE_MAINTAINER_MODE = yes; then
   MAINTAINER_MODE_TRUE=
@@ -2926,9 +3101,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2939,24 +3114,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -2966,9 +3141,9 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2979,24 +3154,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
 $as_echo "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3005,7 +3180,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -3019,9 +3194,9 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3032,24 +3207,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3059,9 +3234,9 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3073,18 +3248,18 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 if test $ac_prog_rejected = yes; then
@@ -3103,10 +3278,10 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3118,9 +3293,9 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3131,24 +3306,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
 $as_echo "$CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3162,9 +3337,9 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3175,24 +3350,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
 $as_echo "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -3205,68 +3380,48 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
   fi
 fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3282,8 +3437,8 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3299,17 +3454,17 @@ do
 done
 rm -f $ac_rmfiles
 
-if { (ac_try="$ac_link_default"
+if { { ac_try="$ac_link_default"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -3326,7 +3481,7 @@ do
 	# certainly right.
 	break;;
     *.* )
-        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
 	then :; else
 	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 	fi
@@ -3345,84 +3500,41 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
-
-{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then
-  $as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 fi
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
 $as_echo_n "checking for suffix of executables... " >&6; }
-if { (ac_try="$ac_link"
+if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3437,32 +3549,83 @@ for ac_file in conftest.exe conftest conftest.*; do
   esac
 done
 else
-  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
 $as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3474,17 +3637,17 @@ main ()
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
+if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
@@ -3497,31 +3660,23 @@ else
   $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
 $as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3535,37 +3690,16 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_compiler_gnu=no
+  ac_compiler_gnu=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
 $as_echo "$ac_cv_c_compiler_gnu" >&6; }
 if test $ac_compiler_gnu = yes; then
   GCC=yes
@@ -3574,20 +3708,16 @@ else
 fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
    CFLAGS="-g"
-   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3598,35 +3728,11 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	CFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3637,36 +3743,12 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_compile "$LINENO"; then :
 
-	ac_c_werror_flag=$ac_save_c_werror_flag
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
 	 CFLAGS="-g"
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -3677,42 +3759,17 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_g=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
 $as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
@@ -3729,18 +3786,14 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
@@ -3797,32 +3850,9 @@ for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
 	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+  if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_prog_cc_c89=$ac_arg
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
@@ -3833,17 +3863,19 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
 $as_echo "none needed" >&6; } ;;
   xno)
-    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
 $as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -3862,7 +3894,7 @@ am__doit:
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
 $as_echo_n "checking for style of include used by $am_make... " >&6; }
 am__include="#"
 am__quote=
@@ -3890,18 +3922,19 @@ if test "$am__include" = "#"; then
 fi
 
 
-{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
 $as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
 # Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then
+if test "${enable_dependency_tracking+set}" = set; then :
   enableval=$enable_dependency_tracking;
 fi
 
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3915,9 +3948,9 @@ fi
 
 depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3926,6 +3959,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3985,7 +4019,7 @@ else
 	break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -4025,7 +4059,7 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
@@ -4041,17 +4075,13 @@ fi
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
 $as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then
+if ${ac_cv_search_strerror+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -4076,54 +4106,27 @@ for ac_lib in '' cposix; do
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+  if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_search_strerror=$ac_res
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext
-  if test "${ac_cv_search_strerror+set}" = set; then
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_strerror+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_strerror+set}" = set; then
-  :
+if ${ac_cv_search_strerror+:} false; then :
+
 else
   ac_cv_search_strerror=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
 $as_echo "$ac_cv_search_strerror" >&6; }
 ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then
+if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
@@ -4133,14 +4136,14 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
 $as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -4155,11 +4158,7 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -4168,78 +4167,34 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
   break
 fi
 
@@ -4251,7 +4206,7 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
 $as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
@@ -4262,11 +4217,7 @@ do
   # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __STDC__
 # include <limits.h>
@@ -4275,87 +4226,40 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 		     Syntax error
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  :
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if ac_fn_c_try_cpp "$LINENO"; then :
 
+else
   # Broken: fails on valid input.
 continue
 fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
+if ac_fn_c_try_cpp "$LINENO"; then :
   # Broken: success on invalid input.
 continue
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
 else
-  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4365,22 +4269,18 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 if test "x$CC" != xcc; then
-  { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
 else
-  { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
 $as_echo_n "checking whether cc understands -c and -o together... " >&6; }
 fi
 set dummy $CC; ac_cc=`$as_echo "$2" |
 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -4396,63 +4296,63 @@ _ACEOF
 # existing .o file with -o, though they will create one.
 ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
 rm -f conftest2.*
-if { (case "(($ac_try" in
+if { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-   test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+   test -f conftest2.$ac_objext && { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); };
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
 then
   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
   if test "x$CC" != xcc; then
     # Test first that cc exists at all.
     if { ac_try='cc -c conftest.$ac_ext >&5'
-  { (case "(($ac_try" in
+  { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
       ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
       rm -f conftest2.*
-      if { (case "(($ac_try" in
+      if { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } &&
+	 test -f conftest2.$ac_objext && { { case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); };
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; };
       then
 	# cc works too.
 	:
@@ -4469,15 +4369,13 @@ rm -f core conftest*
 
 fi
 if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 
-cat >>confdefs.h <<\_ACEOF
-#define NO_MINUS_C_MINUS_O 1
-_ACEOF
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
 
 fi
 
@@ -4496,14 +4394,14 @@ if test "$am_t" != yes; then
 fi
 
 
-{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
 $as_echo_n "checking whether ln -s works... " >&6; }
 LN_S=$as_ln_s
 if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
 $as_echo "no, using $LN_S" >&6; }
 fi
 
@@ -4512,21 +4410,21 @@ fi
 
 
     # Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then
+if test "${enable_debug+set}" = set; then :
   enableval=$enable_debug; eso_enable_debug=$enableval
 else
   eso_enable_debug=no
 fi
 
 
-    { $as_echo "$as_me:$LINENO: checking whether debugging code should be created" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether debugging code should be created" >&5
 $as_echo_n "checking whether debugging code should be created... " >&6; }
-if test "${eso_cv_enable_debug+set}" = set; then
+if ${eso_cv_enable_debug+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eso_cv_enable_debug=$eso_enable_debug
 fi
-{ $as_echo "$as_me:$LINENO: result: $eso_cv_enable_debug" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $eso_cv_enable_debug" >&5
 $as_echo "$eso_cv_enable_debug" >&6; }
 
     if test x"$eso_cv_enable_debug" = xyes; then
@@ -4540,9 +4438,9 @@ $as_echo "$eso_cv_enable_debug" >&6; }
 
 
     flag=`echo g3 | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -g3" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -g3" >&5
 $as_echo_n "checking whether $CC supports -g3... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4574,9 +4472,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4602,9 +4499,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo ggdb | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -ggdb" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -ggdb" >&5
 $as_echo_n "checking whether $CC supports -ggdb... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4636,9 +4533,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4653,9 +4549,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo O0 | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -O0" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -O0" >&5
 $as_echo_n "checking whether $CC supports -O0... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4687,9 +4583,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4704,9 +4599,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo rdynamic | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -rdynamic" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -rdynamic" >&5
 $as_echo_n "checking whether $CC supports -rdynamic... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4738,9 +4633,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4755,9 +4649,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo Wall | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wall" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wall" >&5
 $as_echo_n "checking whether $CC supports -Wall... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4789,9 +4683,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4806,9 +4699,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo W | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -W" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -W" >&5
 $as_echo_n "checking whether $CC supports -W... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -4840,9 +4733,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -4862,9 +4754,9 @@ $as_echo "$ac_res" >&6; }
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4875,7 +4767,7 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in grep ggrep; do
+    for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
       { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
@@ -4895,7 +4787,7 @@ case `"$ac_path_GREP" --version 2>&1` in
     $as_echo 'GREP' >> "conftest.nl"
     "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_GREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_GREP="$ac_path_GREP"
@@ -4910,26 +4802,24 @@ esac
       $ac_path_GREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_GREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_GREP=$GREP
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
 $as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
 
 
-{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4943,7 +4833,7 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in egrep; do
+    for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
       { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
@@ -4963,7 +4853,7 @@ case `"$ac_path_EGREP" --version 2>&1` in
     $as_echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_EGREP="$ac_path_EGREP"
@@ -4978,12 +4868,10 @@ esac
       $ac_path_EGREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_EGREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_EGREP=$EGREP
@@ -4991,7 +4879,7 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
 $as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
@@ -5001,21 +4889,21 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 
     # Check whether --enable-strict was given.
-if test "${enable_strict+set}" = set; then
+if test "${enable_strict+set}" = set; then :
   enableval=$enable_strict; eso_enable_strict=$enableval
 else
   eso_enable_strict=no
 fi
 
 
-    { $as_echo "$as_me:$LINENO: checking whether strict compiler options should be used" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strict compiler options should be used" >&5
 $as_echo_n "checking whether strict compiler options should be used... " >&6; }
-if test "${eso_cv_enable_strict+set}" = set; then
+if ${eso_cv_enable_strict+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eso_cv_enable_strict=$eso_enable_strict
 fi
-{ $as_echo "$as_me:$LINENO: result: $eso_cv_enable_strict" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $eso_cv_enable_strict" >&5
 $as_echo "$eso_cv_enable_strict" >&6; }
 
 
@@ -5035,9 +4923,9 @@ $as_echo "$eso_cv_enable_strict" >&6; }
 
 
     flag=`echo std=c99 | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -std=c99" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -std=c99" >&5
 $as_echo_n "checking whether $CC supports -std=c99... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5069,9 +4957,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -5088,9 +4975,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo pedantic | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -pedantic" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic" >&5
 $as_echo_n "checking whether $CC supports -pedantic... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5122,9 +5009,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -5142,9 +5028,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo fno-builtin | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -fno-builtin" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -fno-builtin" >&5
 $as_echo_n "checking whether $CC supports -fno-builtin... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5176,9 +5062,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -5193,9 +5078,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo std=c99 | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -std=c99" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -std=c99" >&5
 $as_echo_n "checking whether $CC supports -std=c99... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -5227,9 +5112,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -5244,9 +5128,9 @@ $as_echo "$ac_res" >&6; }
 
     # Extract the first word of "doxygen", so it can be a program name with args.
 set dummy doxygen; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_DOXYGEN+set}" = set; then
+if ${ac_cv_path_DOXYGEN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $DOXYGEN in
@@ -5259,14 +5143,14 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -5274,10 +5158,10 @@ esac
 fi
 DOXYGEN=$ac_cv_path_DOXYGEN
 if test -n "$DOXYGEN"; then
-  { $as_echo "$as_me:$LINENO: result: $DOXYGEN" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
 $as_echo "$DOXYGEN" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5286,9 +5170,9 @@ fi
 
     # Extract the first word of "latex", so it can be a program name with args.
 set dummy latex; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_path_LATEX+set}" = set; then
+if ${ac_cv_path_LATEX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LATEX in
@@ -5301,14 +5185,14 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   ;;
@@ -5316,10 +5200,10 @@ esac
 fi
 LATEX=$ac_cv_path_LATEX
 if test -n "$LATEX"; then
-  { $as_echo "$as_me:$LINENO: result: $LATEX" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5
 $as_echo "$LATEX" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5337,7 +5221,7 @@ fi
 
 
 # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
+if test "${enable_static+set}" = set; then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
     yes) enable_static=yes ;;
@@ -5368,7 +5252,7 @@ fi
 
 
 # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
+if test "${enable_shared+set}" = set; then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
     yes) enable_shared=yes ;;
@@ -5401,14 +5285,14 @@ fi
 
 case `pwd` in
   *\ * | *\	*)
-    { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
 esac
 
 
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -5424,9 +5308,78 @@ macro_revision='1.3017'
 
 ltmain="$ac_aux_dir/ltmain.sh"
 
-{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case "$ECHO" in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -5434,7 +5387,7 @@ else
        ac_script="$ac_script$as_nl$ac_script"
      done
      echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     $as_unset ac_script || ac_script=
+     { ac_script=; unset ac_script;}
      if test -z "$SED"; then
   ac_path_SED_found=false
   # Loop through the user's path and test for each of PROGNAME-LIST
@@ -5443,7 +5396,7 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in sed gsed; do
+    for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
       { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
@@ -5463,7 +5416,7 @@ case `"$ac_path_SED" --version 2>&1` in
     $as_echo '' >> "conftest.nl"
     "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_SED_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_SED="$ac_path_SED"
@@ -5478,19 +5431,17 @@ esac
       $ac_path_SED_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
 fi
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
 $as_echo "$ac_cv_path_SED" >&6; }
  SED="$ac_cv_path_SED"
   rm -f conftest.sed
@@ -5508,9 +5459,9 @@ Xsed="$SED -e 1s/^X//"
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -5524,7 +5475,7 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_prog in fgrep; do
+    for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
       { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
@@ -5544,7 +5495,7 @@ case `"$ac_path_FGREP" --version 2>&1` in
     $as_echo 'FGREP' >> "conftest.nl"
     "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    ac_count=`expr $ac_count + 1`
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
     if test $ac_count -gt ${ac_path_FGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
       ac_cv_path_FGREP="$ac_path_FGREP"
@@ -5559,12 +5510,10 @@ esac
       $ac_path_FGREP_found && break 3
     done
   done
-done
+  done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5572,7 +5521,7 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
 $as_echo "$ac_cv_path_FGREP" >&6; }
  FGREP="$ac_cv_path_FGREP"
 
@@ -5598,7 +5547,7 @@ test -z "$GREP" && GREP=grep
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
+if test "${with_gnu_ld+set}" = set; then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
 else
   with_gnu_ld=no
@@ -5607,7 +5556,7 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
 $as_echo_n "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
@@ -5637,13 +5586,13 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -5674,18 +5623,16 @@ fi
 
 LD="$lt_cv_path_LD"
 if test -n "$LD"; then
-  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -5698,7 +5645,7 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$lt_cv_prog_gnu_ld
 
@@ -5710,9 +5657,9 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -5759,20 +5706,23 @@ else
   : ${lt_cv_path_NM=no}
 fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
 $as_echo "$lt_cv_path_NM" >&6; }
 if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -5783,24 +5733,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 DUMPBIN=$ac_cv_prog_DUMPBIN
 if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
 $as_echo "$DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5810,13 +5760,13 @@ fi
 fi
 if test -z "$DUMPBIN"; then
   ac_ct_DUMPBIN=$DUMPBIN
-  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -5827,24 +5777,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
 if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
 $as_echo "$ac_ct_DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -5857,7 +5807,7 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -5865,6 +5815,15 @@ esac
   fi
 fi
 
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -5877,33 +5836,33 @@ test -z "$NM" && NM=nm
 
 
 
-{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5887: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5890: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5893: output\"" >&5)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
   fi
   rm -f conftest*
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
 $as_echo "$lt_cv_nm_interface" >&6; }
 
 # find the maximum length of command line arguments
-{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -5936,6 +5895,11 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -5961,6 +5925,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -6000,8 +5969,8 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -6021,10 +5990,10 @@ else
 fi
 
 if test -n $lt_cv_sys_max_cmd_len ; then
-  { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
 $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: none" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
 $as_echo "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
@@ -6038,27 +6007,27 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
-{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
 $as_echo "$xsi_shell" >&6; }
 
 
-{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
 lt_shell_append=no
 ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
     >/dev/null 2>&1 \
   && lt_shell_append=yes
-{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
 $as_echo "$lt_shell_append" >&6; }
 
 
@@ -6093,14 +6062,88 @@ esac
 
 
 
-{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
 $as_echo "$lt_cv_ld_reload_flag" >&6; }
 reload_flag=$lt_cv_ld_reload_flag
 case $reload_flag in
@@ -6109,6 +6152,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -6129,9 +6177,9 @@ esac
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6142,24 +6190,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OBJDUMP=$ac_cv_prog_OBJDUMP
 if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
 $as_echo "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6169,9 +6217,9 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
   ac_ct_OBJDUMP=$OBJDUMP
   # Extract the first word of "objdump", so it can be a program name with args.
 set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -6182,24 +6230,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
 if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
 $as_echo "$ac_ct_OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6208,7 +6256,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -6228,9 +6276,9 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 
 
-{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -6272,16 +6320,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -6311,6 +6361,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -6319,11 +6373,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -6344,8 +6398,8 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -6424,8 +6478,23 @@ tpf*)
 esac
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
 $as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -6441,12 +6510,165 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
 
 
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
 if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -6457,36 +6679,40 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:$LINENO: result: $AR" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
 $as_echo "$AR" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+    test -n "$AR" && break
+  done
 fi
-if test -z "$ac_cv_prog_AR"; then
+if test -z "$AR"; then
   ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -6497,48 +6723,108 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
 $as_echo "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+
+  test -n "$ac_ct_AR" && break
+done
+
   if test "x$ac_ct_AR" = x; then
     AR="false"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
   fi
-else
-  AR="$ac_cv_prog_AR"
 fi
 
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
 
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
 
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
 
 
 
@@ -6549,9 +6835,9 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -6562,24 +6848,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
 $as_echo "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6589,9 +6875,9 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -6602,24 +6888,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
 $as_echo "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6628,7 +6914,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -6648,9 +6934,9 @@ test -z "$STRIP" && STRIP=:
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -6661,24 +6947,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
 $as_echo "$RANLIB" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6688,9 +6974,9 @@ if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -6701,24 +6987,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
 $as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -6727,7 +7013,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -6752,15 +7038,27 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
 
 
 
@@ -6805,9 +7103,9 @@ compiler=$CC
 
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -6868,8 +7166,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -6893,6 +7191,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -6905,6 +7204,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -6923,18 +7223,18 @@ void nm_test_func(void){}
 int main(){nm_test_var='a';nm_test_func();return(0);}
 _LT_EOF
 
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
-  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s "$nlist"; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -6946,6 +7246,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -6957,7 +7269,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT_DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -6983,19 +7295,19 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&5
 	fi
@@ -7025,13 +7337,28 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then
   lt_cv_sys_global_symbol_to_cdecl=
 fi
 if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:$LINENO: result: failed" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
 $as_echo "failed" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: ok" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
 $as_echo "ok" >&6; }
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
 
 
 
@@ -7050,11 +7377,45 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+$as_echo "${with_sysroot}" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
 
 
 
 # Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
+if test "${enable_libtool_lock+set}" = set; then :
   enableval=$enable_libtool_lock;
 fi
 
@@ -7066,11 +7427,11 @@ case $host in
 ia64-*-hpux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
 	HPUX_IA64_MODE="32"
@@ -7084,12 +7445,12 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7087 "configure"' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
     if test "$lt_cv_prog_gnu_ld" = yes; then
       case `/usr/bin/file conftest.$ac_objext` in
 	*32-bit*)
@@ -7123,11 +7484,11 @@ x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
       *32-bit*)
 	case $host in
@@ -7176,9 +7537,9 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -7187,11 +7548,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-     cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7202,38 +7559,13 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   lt_cv_cc_needs_belf=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	lt_cv_cc_needs_belf=no
+  lt_cv_cc_needs_belf=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
      ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -7241,25 +7573,38 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
 $as_echo "$lt_cv_cc_needs_belf" >&6; }
   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -7275,15 +7620,132 @@ esac
 
 need_locks="$enable_libtool_lock"
 
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+
+
+
+
+
 
   case $host_os in
     rhapsody* | darwin*)
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -7294,24 +7756,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 DSYMUTIL=$ac_cv_prog_DSYMUTIL
 if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
 $as_echo "$DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7321,9 +7783,9 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
   ac_ct_DSYMUTIL=$DSYMUTIL
   # Extract the first word of "dsymutil", so it can be a program name with args.
 set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -7334,24 +7796,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
 if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
 $as_echo "$ac_ct_DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7360,7 +7822,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -7373,9 +7835,9 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -7386,24 +7848,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 NMEDIT=$ac_cv_prog_NMEDIT
 if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
 $as_echo "$NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7413,9 +7875,9 @@ if test -z "$ac_cv_prog_NMEDIT"; then
   ac_ct_NMEDIT=$NMEDIT
   # Extract the first word of "nmedit", so it can be a program name with args.
 set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -7426,24 +7888,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
 if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
 $as_echo "$ac_ct_NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7452,7 +7914,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -7465,9 +7927,9 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_LIPO+set}" = set; then
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -7478,24 +7940,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 LIPO=$ac_cv_prog_LIPO
 if test -n "$LIPO"; then
-  { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
 $as_echo "$LIPO" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7505,9 +7967,9 @@ if test -z "$ac_cv_prog_LIPO"; then
   ac_ct_LIPO=$LIPO
   # Extract the first word of "lipo", so it can be a program name with args.
 set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -7518,24 +7980,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
 if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
 $as_echo "$ac_ct_LIPO" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7544,7 +8006,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -7557,9 +8019,9 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL+set}" = set; then
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -7570,24 +8032,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OTOOL=$ac_cv_prog_OTOOL
 if test -n "$OTOOL"; then
-  { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
 $as_echo "$OTOOL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7597,9 +8059,9 @@ if test -z "$ac_cv_prog_OTOOL"; then
   ac_ct_OTOOL=$OTOOL
   # Extract the first word of "otool", so it can be a program name with args.
 set dummy otool; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -7610,24 +8072,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
 if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
 $as_echo "$ac_ct_OTOOL" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7636,7 +8098,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -7649,9 +8111,9 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_OTOOL64+set}" = set; then
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -7662,24 +8124,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 OTOOL64=$ac_cv_prog_OTOOL64
 if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
 $as_echo "$OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7689,9 +8151,9 @@ if test -z "$ac_cv_prog_OTOOL64"; then
   ac_ct_OTOOL64=$OTOOL64
   # Extract the first word of "otool64", so it can be a program name with args.
 set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -7702,24 +8164,24 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
 fi
 fi
 ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
 if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
 $as_echo "$ac_ct_OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -7728,7 +8190,7 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
@@ -7764,9 +8226,9 @@ fi
 
 
 
-    { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -7782,7 +8244,13 @@ else
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&5
@@ -7791,22 +8259,19 @@ else
 	rm -f conftest.*
       fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
-    { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
       save_LDFLAGS=$LDFLAGS
       echo "_main" > conftest.sym
       LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -7817,43 +8282,53 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   lt_cv_ld_exported_symbols_list=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	lt_cv_ld_exported_symbols_list=no
+  lt_cv_ld_exported_symbols_list=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 	LDFLAGS="$save_LDFLAGS"
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -7881,7 +8356,7 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -7890,16 +8365,12 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
   esac
 
 
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -7914,48 +8385,23 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -7965,18 +8411,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -7986,14 +8428,10 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -8006,132 +8444,47 @@ cat >>conftest.$ac_ext <<_ACEOF
 		     || ('j' <= (c) && (c) <= 'r') \
 		     || ('s' <= (c) && (c) <= 'z'))
 # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
 
-( exit $ac_status )
-ac_cv_header_stdc=no
+else
+  ac_cv_header_stdc=no
 fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
 $as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
 fi
 
 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -8141,62 +8494,13 @@ fi
 done
 
 
-
 for ac_header in dlfcn.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_DLFCN_H 1
 _ACEOF
 
 fi
@@ -8205,6 +8509,8 @@ done
 
 
 
+
+
 # Set options
 
 
@@ -8219,8 +8525,23 @@ done
 
 
 # Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then
-  withval=$with_pic; pic_mode="$withval"
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   pic_mode=default
 fi
@@ -8235,7 +8556,7 @@ test -z "$pic_mode" && pic_mode=default
 
 
   # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
+if test "${enable_fast_install+set}" = set; then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
     yes) enable_fast_install=yes ;;
@@ -8297,6 +8618,11 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -8316,9 +8642,9 @@ if test -n "${ZSH_VERSION+set}" ; then
    setopt NO_GLOB_SUBST
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -8331,7 +8657,7 @@ else
 fi
 rmdir .libs 2>/dev/null
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
 $as_echo "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
@@ -8346,19 +8672,6 @@ _ACEOF
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 case $host_os in
 aix3*)
   # AIX sometimes has problems with the GCC collect2 program.  For some
@@ -8371,23 +8684,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\(["`\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -8416,7 +8712,7 @@ for cc_temp in $compiler""; do
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 
 
 # Only perform the check for file, if the check method requires it
@@ -8424,9 +8720,9 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file
 case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8477,10 +8773,10 @@ fi
 
 MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -8490,9 +8786,9 @@ fi
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:$LINENO: checking for file" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8543,10 +8839,10 @@ fi
 
 MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
 $as_echo "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
@@ -8625,11 +8921,16 @@ if test -n "$compiler"; then
 lt_prog_compiler_no_builtin_flag=
 
 if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -8645,15 +8946,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8648: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8652: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_rtti_exceptions=yes
@@ -8662,7 +8963,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
@@ -8682,8 +8983,6 @@ fi
 lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
-{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 
   if test "$GCC" = yes; then
     lt_prog_compiler_wl='-Wl,'
@@ -8731,6 +9030,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -8773,6 +9078,15 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -8814,7 +9128,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -8835,7 +9149,13 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
 	lt_prog_compiler_pic='--shared'
 	lt_prog_compiler_static='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	lt_prog_compiler_wl='-Wl,'
@@ -8847,25 +9167,40 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
         # All Alpha code is PIC.
         lt_prog_compiler_static='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	lt_prog_compiler_wl='-Wl,'
 	lt_prog_compiler_pic='-qpic'
 	lt_prog_compiler_static='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  lt_prog_compiler_pic='-KPIC'
 	  lt_prog_compiler_static='-Bstatic'
 	  lt_prog_compiler_wl='-Wl,'
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  lt_prog_compiler_pic='-KPIC'
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
 	  lt_prog_compiler_static='-Bstatic'
-	  lt_prog_compiler_wl=''
 	  ;;
 	esac
 	;;
@@ -8897,7 +9232,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_pic='-KPIC'
       lt_prog_compiler_static='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	lt_prog_compiler_wl='-Qoption ld ';;
       *)
 	lt_prog_compiler_wl='-Wl,';;
@@ -8954,21 +9289,25 @@ case $host_os in
     lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
     ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-$as_echo "$lt_prog_compiler_pic" >&6; }
-
-
-
-
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
 #
 if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -8984,15 +9323,15 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8987: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8991: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_pic_works=yes
@@ -9001,7 +9340,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
 
 if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
@@ -9021,13 +9360,18 @@ fi
 
 
 
+
+
+
+
+
 #
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -9040,7 +9384,7 @@ else
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&5
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          lt_cv_prog_compiler_static_works=yes
@@ -9053,7 +9397,7 @@ else
    LDFLAGS="$save_LDFLAGS"
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
 $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
 
 if test x"$lt_cv_prog_compiler_static_works" = xyes; then
@@ -9068,9 +9412,9 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -9089,16 +9433,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9092: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9096: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -9115,7 +9459,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
@@ -9123,9 +9467,9 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
-  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -9144,16 +9488,16 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:9147: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:9151: \$? = $ac_status" >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        lt_cv_prog_compiler_c_o=yes
@@ -9170,7 +9514,7 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
 
@@ -9179,7 +9523,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 hard_links="nottested"
 if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
   # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
 $as_echo_n "checking if we can lock with hard links... " >&6; }
   hard_links=yes
   $RM conftest*
@@ -9187,10 +9531,10 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   touch conftest.a
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
 $as_echo "$hard_links" >&6; }
   if test "$hard_links" = no; then
-    { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
@@ -9203,7 +9547,7 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   runpath_var=
@@ -9219,7 +9563,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -9266,7 +9609,33 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   esac
 
   ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -9284,6 +9653,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -9299,11 +9669,12 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
 	ld_shlibs=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -9339,10 +9710,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='${wl}--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
-      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -9360,6 +9733,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
@@ -9375,7 +9753,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -9385,15 +9763,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -9404,13 +9783,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  whole_archive_flag_spec=
 	  tmp_sharedflag='--shared' ;;
-	xl[cC]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  compiler_needs_object=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -9426,17 +9809,16 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-	  hardcode_libdir_flag_spec=
-	  hardcode_libdir_flag_spec_ld='-rpath $libdir'
-	  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -9450,8 +9832,8 @@ _LT_EOF
 	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -9469,8 +9851,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -9516,8 +9898,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	ld_shlibs=no
       fi
@@ -9557,8 +9939,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -9645,11 +10029,13 @@ _LT_EOF
 	allow_undefined_flag='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -9660,54 +10046,34 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
 
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
         hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
@@ -9716,11 +10082,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+	 if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -9731,59 +10099,44 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
 
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
 fi
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_="/usr/lib:/lib"
+  fi
 
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
 	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  no_undefined_flag=' ${wl}-bernotok'
 	  allow_undefined_flag=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  whole_archive_flag_spec='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
 	  archive_cmds_need_lc=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -9815,20 +10168,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      allow_undefined_flag=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_from_new_cmds='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -9838,7 +10235,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  whole_archive_flag_spec=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec=''
+  fi
   link_all_deplibs=yes
   allow_undefined_flag="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -9846,7 +10248,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -9864,10 +10266,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -9880,7 +10278,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -9889,7 +10287,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
       hardcode_shlibpath_var=no
@@ -9897,7 +10295,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     hpux9*)
       if test "$GCC" = yes; then
-	archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -9912,14 +10310,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
 	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-	hardcode_libdir_flag_spec_ld='+b $libdir'
 	hardcode_libdir_separator=:
 	hardcode_direct=yes
 	hardcode_direct_absolute=yes
@@ -9931,16 +10328,16 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -9952,7 +10349,46 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
 	  ;;
 	esac
       fi
@@ -9980,52 +10416,39 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        cat >conftest.$ac_ext <<_ACEOF
-int foo(void) {}
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
+  lt_cv_irix_exported_symbol=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-        LDFLAGS="$save_LDFLAGS"
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS="$save_LDFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -10087,17 +10510,17 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       hardcode_libdir_flag_spec='-L$libdir'
       hardcode_minus_L=yes
       allow_undefined_flag=unsupported
-      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
@@ -10107,13 +10530,13 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
       else
 	allow_undefined_flag=' -expect_unresolved \*'
-	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	hardcode_libdir_flag_spec='-rpath $libdir'
@@ -10126,9 +10549,9 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       no_undefined_flag=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -10277,7 +10700,7 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
     fi
   fi
 
-{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
 test "$ld_shlibs" = no && can_build_shared=no
 
@@ -10314,46 +10737,52 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl
-	pic_flag=$lt_prog_compiler_pic
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag
-        allow_undefined_flag=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-	  archive_cmds_need_lc=no
-        else
-	  archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-$as_echo "$archive_cmds_need_lc" >&6; }
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
   fi
@@ -10511,12 +10940,7 @@ esac
 
 
 
-
-
-
-
-
-  { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
 if test "$GCC" = yes; then
@@ -10524,16 +10948,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -10546,7 +10977,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -10566,7 +10997,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[lt_foo]++; }
   if (lt_freq[lt_foo] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi
@@ -10592,7 +11029,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -10601,7 +11038,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -10654,7 +11091,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -10666,7 +11103,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -10685,8 +11122,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -10707,36 +11145,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -10757,7 +11242,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -10765,10 +11250,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -10776,7 +11257,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -10794,7 +11275,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -10814,12 +11295,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -10865,12 +11360,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -10886,7 +11383,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -10923,9 +11420,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -10933,16 +11430,17 @@ linux* | k*bsd*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
-       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -10953,43 +11451,19 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
-  shlibpath_overrides_runpath=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
-
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
 
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -11001,8 +11475,9 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -11033,7 +11508,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -11102,7 +11577,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11127,7 +11602,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11151,7 +11626,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -11182,7 +11657,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11192,7 +11667,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11202,7 +11677,7 @@ uts4*)
   dynamic_linker=no
   ;;
 esac
-{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
 $as_echo "$dynamic_linker" >&6; }
 test "$dynamic_linker" = no && can_build_shared=no
 
@@ -11304,7 +11779,12 @@ fi
 
 
 
-  { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
@@ -11329,7 +11809,7 @@ else
   # directories.
   hardcode_action=unsupported
 fi
-{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
 $as_echo "$hardcode_action" >&6; }
 
 if test "$hardcode_action" = relink ||
@@ -11374,18 +11854,14 @@ else
 
   darwin*)
   # if libdl is installed we need to link against it
-    { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11403,238 +11879,43 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dl_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dl_dlopen=no
+  ac_cv_lib_dl_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
     lt_cv_dlopen="dyld"
     lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-
-fi
-
-    ;;
-
-  *)
-    { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
-$as_echo_n "checking for shl_load... " >&6; }
-if test "${ac_cv_func_shl_load+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef shl_load
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_shl_load || defined __stub___shl_load
-choke me
-#endif
-
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  ac_cv_func_shl_load=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_shl_load=no
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-$as_echo "$ac_cv_func_shl_load" >&6; }
-if test "x$ac_cv_func_shl_load" = x""yes; then
-  lt_cv_dlopen="shl_load"
-else
-  { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load ();
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+    lt_cv_dlopen_self=yes
 
-	ac_cv_lib_dld_shl_load=no
 fi
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load"
 else
-  { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
-$as_echo_n "checking for dlopen... " >&6; }
-if test "${ac_cv_func_dlopen+set}" = set; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef dlopen
 
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
@@ -11642,72 +11923,41 @@ cat >>conftest.$ac_ext <<_ACEOF
 #ifdef __cplusplus
 extern "C"
 #endif
-char dlopen ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_dlopen || defined __stub___dlopen
-choke me
-#endif
-
+char shl_load ();
 int
 main ()
 {
-return dlopen ();
+return shl_load ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  ac_cv_func_dlopen=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_dlopen=no
+  ac_cv_lib_dld_shl_load=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-$as_echo "$ac_cv_func_dlopen" >&6; }
-if test "x$ac_cv_func_dlopen" = x""yes; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
-  { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11725,57 +11975,28 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dl_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dl_dlopen=no
+  ac_cv_lib_dl_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
-  { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11793,57 +12014,28 @@ return dlopen ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_svld_dlopen=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_svld_dlopen=no
+  ac_cv_lib_svld_dlopen=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
-  { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -11861,43 +12053,18 @@ return dld_link ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_dld_dld_link=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_dld_dld_link=no
+  ac_cv_lib_dld_dld_link=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -11936,9 +12103,9 @@ fi
     save_LIBS="$LIBS"
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
-    { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -11947,7 +12114,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11950 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11988,7 +12155,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -11997,7 +12170,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12006,11 +12183,11 @@ int main ()
   return status;
 }
 _LT_EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -12027,14 +12204,14 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
 $as_echo "$lt_cv_dlopen_self" >&6; }
 
     if test "x$lt_cv_dlopen_self" = xyes; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   	  if test "$cross_compiling" = yes; then :
@@ -12043,7 +12220,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12046 "configure"
+#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12084,7 +12261,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -12093,7 +12276,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -12102,11 +12289,11 @@ int main ()
   return status;
 }
 _LT_EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
     case x$lt_status in
@@ -12123,7 +12310,7 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
@@ -12162,12 +12349,12 @@ fi
 
 striplib=
 old_striplib=
-{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
 $as_echo_n "checking whether stripping libraries is possible... " >&6; }
 if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 else
 # FIXME - insert some real tests, host_os isn't really good enough
@@ -12176,15 +12363,15 @@ else
     if test -n "$STRIP" ; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
-      { $as_echo "$as_me:$LINENO: result: yes" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
     else
-      { $as_echo "$as_me:$LINENO: result: no" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     fi
     ;;
   *)
-    { $as_echo "$as_me:$LINENO: result: no" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     ;;
   esac
@@ -12202,12 +12389,12 @@ fi
 
 
   # Report which library types will actually be built
-  { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
 $as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
 $as_echo "$can_build_shared" >&6; }
 
-  { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
 $as_echo_n "checking whether to build shared libraries... " >&6; }
   test "$can_build_shared" = "no" && enable_shared=no
 
@@ -12228,14 +12415,14 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     fi
     ;;
   esac
-  { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
 $as_echo "$enable_shared" >&6; }
 
-  { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
 $as_echo_n "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
   test "$enable_shared" = yes || enable_static=yes
-  { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
 
@@ -12262,6 +12449,8 @@ CC="$lt_save_CC"
 
 
 
+
+
         ac_config_commands="$ac_config_commands libtool"
 
 
@@ -12273,18 +12462,14 @@ CC="$lt_save_CC"
 
 
 # Checks for libraries.
-{ $as_echo "$as_me:$LINENO: checking for pow in -lm" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
 $as_echo_n "checking for pow in -lm... " >&6; }
-if test "${ac_cv_lib_m_pow+set}" = set; then
+if ${ac_cv_lib_m_pow+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -12302,58 +12487,29 @@ return pow ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_m_pow=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_m_pow=no
+  ac_cv_lib_m_pow=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_pow" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
 $as_echo "$ac_cv_lib_m_pow" >&6; }
-if test "x$ac_cv_lib_m_pow" = x""yes; then
+if test "x$ac_cv_lib_m_pow" = xyes; then :
   LIBS="$LIBS -lm"
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
 $as_echo_n "checking for socket in -lsocket... " >&6; }
-if test "${ac_cv_lib_socket_socket+set}" = set; then
+if ${ac_cv_lib_socket_socket+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -12371,58 +12527,29 @@ return socket ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_socket_socket=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_socket_socket=no
+  ac_cv_lib_socket_socket=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
 $as_echo "$ac_cv_lib_socket_socket" >&6; }
-if test "x$ac_cv_lib_socket_socket" = x""yes; then
+if test "x$ac_cv_lib_socket_socket" = xyes; then :
   LIBS="$LIBS -lsocket"
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for inet_ntoa in -lnsl" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnsl" >&5
 $as_echo_n "checking for inet_ntoa in -lnsl... " >&6; }
-if test "${ac_cv_lib_nsl_inet_ntoa+set}" = set; then
+if ${ac_cv_lib_nsl_inet_ntoa+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnsl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -12440,59 +12567,30 @@ return inet_ntoa ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_nsl_inet_ntoa=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_nsl_inet_ntoa=no
+  ac_cv_lib_nsl_inet_ntoa=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_ntoa" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_inet_ntoa" >&5
 $as_echo "$ac_cv_lib_nsl_inet_ntoa" >&6; }
-if test "x$ac_cv_lib_nsl_inet_ntoa" = x""yes; then
+if test "x$ac_cv_lib_nsl_inet_ntoa" = xyes; then :
   LIBS="$LIBS -lnsl"
 fi
 
 #LIB_CHECK_FFTW
 
 # Checks for header files.
-{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
@@ -12507,48 +12605,23 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_header_stdc=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_header_stdc=no
+  ac_cv_header_stdc=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -12558,18 +12631,14 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
+  $EGREP "free" >/dev/null 2>&1; then :
+
 else
   ac_cv_header_stdc=no
 fi
@@ -12579,14 +12648,10 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then :
   :
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ctype.h>
 #include <stdlib.h>
@@ -12597,215 +12662,47 @@ cat >>conftest.$ac_ext <<_ACEOF
 # define ISLOWER(c) \
 		   (('a' <= (c) && (c) <= 'i') \
 		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -rf conftest.dSYM
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-
-for ac_header in string.h
-do
-as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
-$as_echo_n "checking $ac_header usability... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
 
-# Is the header present?
-{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
-$as_echo_n "checking $ac_header presence... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
+if ac_fn_c_try_run "$LINENO"; then :
+
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
 
-  ac_header_preproc=no
 fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
 
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ------------------------------- ##
-## Report this to amodigli at eso.org ##
-## ------------------------------- ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
-$as_echo_n "checking for $ac_header... " >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
 
-fi
-as_val=`eval 'as_val=${'$as_ac_Header'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+for ac_header in string.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define HAVE_STRING_H 1
 _ACEOF
 
 fi
@@ -12814,16 +12711,12 @@ done
 
 
 # Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -12883,56 +12776,29 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_const=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_c_const=no
+  ac_cv_c_const=no
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
 $as_echo "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-cat >>confdefs.h <<\_ACEOF
-#define const /**/
-_ACEOF
+$as_echo "#define const /**/" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:$LINENO: checking for inline" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
 $as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then
+if ${ac_cv_c_inline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef __cplusplus
 typedef int foo_t;
@@ -12941,41 +12807,17 @@ $ac_kw foo_t foo () {return 0; }
 #endif
 
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
+if ac_fn_c_try_compile "$LINENO"; then :
   ac_cv_c_inline=$ac_kw
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
 fi
-
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   test "$ac_cv_c_inline" != no && break
 done
 
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
 $as_echo "$ac_cv_c_inline" >&6; }
 
-
 case $ac_cv_c_inline in
   inline | yes) ;;
   *)
@@ -12993,104 +12835,11 @@ esac
 
 
 # Checks for library functions.
-
-
-
-
-
 for ac_func in sin cos floor pow sqrt
-do
-as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
-$as_echo_n "checking for $ac_func... " >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  eval "$as_ac_var=yes"
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	eval "$as_ac_var=no"
-fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-as_val=`eval 'as_val=${'$as_ac_var'}
-		 $as_echo "$as_val"'`
-   if test "x$as_val" = x""yes; then
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -13104,7 +12853,6 @@ done
 
 
 
-
     ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -13112,60 +12860,11 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-    { $as_echo "$as_me:$LINENO: checking whether strdup is declared" >&5
-$as_echo_n "checking whether strdup is declared... " >&6; }
-if test "${ac_cv_have_decl_strdup+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-int
-main ()
-{
-#ifndef strdup
-  (void) strdup;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_strdup=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_strdup=no
-fi
+    ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "#include <string.h>
+"
+if test "x$ac_cv_have_decl_strdup" = xyes; then :
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strdup" >&5
-$as_echo "$ac_cv_have_decl_strdup" >&6; }
 
 
     eso_save_CFLAGS="$CFLAGS"
@@ -13174,91 +12873,10 @@ $as_echo "$ac_cv_have_decl_strdup" >&6; }
         CFLAGS="$CFLAGS -pedantic-errors"
     fi
 
-    { $as_echo "$as_me:$LINENO: checking for strdup" >&5
-$as_echo_n "checking for strdup... " >&6; }
-if test "${ac_cv_func_strdup+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define strdup to an innocuous variant, in case <limits.h> declares strdup.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define strdup innocuous_strdup
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char strdup (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef strdup
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strdup ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_strdup || defined __stub___strdup
-choke me
-#endif
-
-int
-main ()
-{
-return strdup ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
-  ac_cv_func_strdup=yes
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_strdup=no
-fi
+    ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strdup" >&5
-$as_echo "$ac_cv_func_strdup" >&6; }
 
 
     CFLAGS="$eso_save_CFLAGS"
@@ -13272,9 +12890,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
     if test x"$ac_cv_have_decl_strdup" = xyes &&
        test x"$ac_cv_func_strdup" = xyes; then
-        cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRDUP 1
-_ACEOF
+        $as_echo "#define HAVE_STRDUP 1" >>confdefs.h
 
     fi
 
@@ -13283,11 +12899,10 @@ _ACEOF
 
 
 
-
 # Check for CPL/Qfits presence and usability
 
 
-    { $as_echo "$as_me:$LINENO: checking for libcext" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcext" >&5
 $as_echo_n "checking for libcext... " >&6; }
 
     cpl_cext_check_header="cxtypes.h"
@@ -13313,7 +12928,7 @@ $as_echo_n "checking for libcext... " >&6; }
 
 
 # Check whether --with-cext was given.
-if test "${with_cext+set}" = set; then
+if test "${with_cext+set}" = set; then :
   withval=$with_cext;
                     cpl_with_cext=$withval
 
@@ -13322,20 +12937,20 @@ fi
 
 
 # Check whether --with-cext-includes was given.
-if test "${with_cext_includes+set}" = set; then
+if test "${with_cext_includes+set}" = set; then :
   withval=$with_cext_includes; cpl_with_cext_includes=$withval
 fi
 
 
 
 # Check whether --with-cext-libs was given.
-if test "${with_cext_libs+set}" = set; then
+if test "${with_cext_libs+set}" = set; then :
   withval=$with_cext_libs; cpl_with_cext_libs=$withval
 fi
 
 
     # Check whether --enable-cext-test was given.
-if test "${enable_cext_test+set}" = set; then
+if test "${enable_cext_test+set}" = set; then :
   enableval=$enable_cext_test; cpl_enable_cext_test=$enableval
 else
   cpl_enable_cext_test=yes
@@ -13385,7 +13000,7 @@ fi
     for i in $cpl_cext_incdirs; do
         for j in $cpl_cext_check_header; do
 
-            echo "configure: 13388: $i/$j" >&5
+            echo "configure: 13003: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13441,7 +13056,7 @@ fi
     for i in $cpl_cext_libdirs; do
         for j in $cpl_cext_check_lib; do
 
-            echo "configure: 13444: $i/$j" >&5
+            echo "configure: 13059: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13467,11 +13082,9 @@ fi
                 cpl_cext_notfound="(libraries)"
             fi
 
-            { { $as_echo "$as_me:$LINENO: error: libcext $cpl_cext_notfound was not found on your system. Please check!" >&5
-$as_echo "$as_me: error: libcext $cpl_cext_notfound was not found on your system. Please check!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "libcext $cpl_cext_notfound was not found on your system. Please check!" "$LINENO" 5
         else
-            { $as_echo "$as_me:$LINENO: result: libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&5
 $as_echo "libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&6; }
         fi
 
@@ -13483,7 +13096,7 @@ $as_echo "libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&6; }
         LIBCEXT="-lcext"
 
 
-        { $as_echo "$as_me:$LINENO: checking whether libcext can be used" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libcext can be used" >&5
 $as_echo_n "checking whether libcext can be used... " >&6; }
         ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -13500,11 +13113,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LDFLAGS="$CX_LDFLAGS $LDFLAGS"
         LIBS="$LIBCEXT"
 
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
                        #include <cxutils.h>
@@ -13519,40 +13128,15 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   cpl_cext_is_usable="yes"
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cpl_cext_is_usable="no"
+  cpl_cext_is_usable="no"
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-        { $as_echo "$as_me:$LINENO: result: $cpl_cext_is_usable" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpl_cext_is_usable" >&5
 $as_echo "$cpl_cext_is_usable" >&6; }
 
         ac_ext=c
@@ -13567,16 +13151,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LIBS="$cpl_cext_libs_save"
 
         if test x"$cpl_cext_is_usable" = xno; then
-            { { $as_echo "$as_me:$LINENO: error: Linking with libcext failed! Please check architecture!" >&5
-$as_echo "$as_me: error: Linking with libcext failed! Please check architecture!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "Linking with libcext failed! Please check architecture!" "$LINENO" 5
         fi
 
     else
 
-        { $as_echo "$as_me:$LINENO: result: disabled" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 $as_echo "disabled" >&6; }
-        { $as_echo "$as_me:$LINENO: WARNING: libcext checks have been disabled! This package may not build!" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libcext checks have been disabled! This package may not build!" >&5
 $as_echo "$as_me: WARNING: libcext checks have been disabled! This package may not build!" >&2;}
         CX_INCLUDES=""
         CX_LDFLAGS=""
@@ -13591,7 +13173,7 @@ $as_echo "$as_me: WARNING: libcext checks have been disabled! This package may n
 
 
 
-    { $as_echo "$as_me:$LINENO: checking for CPL" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CPL" >&5
 $as_echo_n "checking for CPL... " >&6; }
 
     cpl_check_cpl_header="cpl.h"
@@ -13604,7 +13186,7 @@ $as_echo_n "checking for CPL... " >&6; }
 
 
 # Check whether --with-cpl was given.
-if test "${with_cpl+set}" = set; then
+if test "${with_cpl+set}" = set; then :
   withval=$with_cpl;
                     cpl_with_cpl=$withval
 
@@ -13613,20 +13195,20 @@ fi
 
 
 # Check whether --with-cpl-includes was given.
-if test "${with_cpl_includes+set}" = set; then
+if test "${with_cpl_includes+set}" = set; then :
   withval=$with_cpl_includes; cpl_with_cpl_includes=$withval
 fi
 
 
 
 # Check whether --with-cpl-libs was given.
-if test "${with_cpl_libs+set}" = set; then
+if test "${with_cpl_libs+set}" = set; then :
   withval=$with_cpl_libs; cpl_with_cpl_libs=$withval
 fi
 
 
     # Check whether --enable-cpl-test was given.
-if test "${enable_cpl_test+set}" = set; then
+if test "${enable_cpl_test+set}" = set; then :
   enableval=$enable_cpl_test; cpl_enable_cpl_test=$enableval
 else
   cpl_enable_cpl_test=yes
@@ -13668,7 +13250,7 @@ fi
     for i in $cpl_incdirs; do
         for j in $cpl_check_cpl_header; do
 
-            echo "configure: 13671: $i/$j" >&5
+            echo "configure: 13253: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13718,7 +13300,7 @@ fi
     for i in $cpl_libdirs; do
         for j in $cpl_check_cpl_lib; do
 
-            echo "configure: 13721: $i/$j" >&5
+            echo "configure: 13303: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13743,11 +13325,9 @@ fi
                 cpl_notfound="(libraries)"
             fi
 
-            { { $as_echo "$as_me:$LINENO: error: CPL $cpl_notfound was not found on your system. Please check!" >&5
-$as_echo "$as_me: error: CPL $cpl_notfound was not found on your system. Please check!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "CPL $cpl_notfound was not found on your system. Please check!" "$LINENO" 5
         else
-            { $as_echo "$as_me:$LINENO: result: libraries $cpl_libraries, headers $cpl_includes" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $cpl_libraries, headers $cpl_includes" >&5
 $as_echo "libraries $cpl_libraries, headers $cpl_includes" >&6; }
         fi
 
@@ -13757,7 +13337,7 @@ $as_echo "libraries $cpl_libraries, headers $cpl_includes" >&6; }
 
 
 
-    { $as_echo "$as_me:$LINENO: checking for libcext" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcext" >&5
 $as_echo_n "checking for libcext... " >&6; }
 
     cpl_cext_check_header="cxtypes.h"
@@ -13783,7 +13363,7 @@ $as_echo_n "checking for libcext... " >&6; }
 
 
 # Check whether --with-cext was given.
-if test "${with_cext+set}" = set; then
+if test "${with_cext+set}" = set; then :
   withval=$with_cext;
                     cpl_with_cext=$withval
 
@@ -13792,20 +13372,20 @@ fi
 
 
 # Check whether --with-cext-includes was given.
-if test "${with_cext_includes+set}" = set; then
+if test "${with_cext_includes+set}" = set; then :
   withval=$with_cext_includes; cpl_with_cext_includes=$withval
 fi
 
 
 
 # Check whether --with-cext-libs was given.
-if test "${with_cext_libs+set}" = set; then
+if test "${with_cext_libs+set}" = set; then :
   withval=$with_cext_libs; cpl_with_cext_libs=$withval
 fi
 
 
     # Check whether --enable-cext-test was given.
-if test "${enable_cext_test+set}" = set; then
+if test "${enable_cext_test+set}" = set; then :
   enableval=$enable_cext_test; cpl_enable_cext_test=$enableval
 else
   cpl_enable_cext_test=yes
@@ -13855,7 +13435,7 @@ fi
     for i in $cpl_cext_incdirs; do
         for j in $cpl_cext_check_header; do
 
-            echo "configure: 13858: $i/$j" >&5
+            echo "configure: 13438: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13911,7 +13491,7 @@ fi
     for i in $cpl_cext_libdirs; do
         for j in $cpl_cext_check_lib; do
 
-            echo "configure: 13914: $i/$j" >&5
+            echo "configure: 13494: $i/$j" >&5
 
             if test -r "$i/$j"; then
                 echo "taking that" >&5
@@ -13937,11 +13517,9 @@ fi
                 cpl_cext_notfound="(libraries)"
             fi
 
-            { { $as_echo "$as_me:$LINENO: error: libcext $cpl_cext_notfound was not found on your system. Please check!" >&5
-$as_echo "$as_me: error: libcext $cpl_cext_notfound was not found on your system. Please check!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "libcext $cpl_cext_notfound was not found on your system. Please check!" "$LINENO" 5
         else
-            { $as_echo "$as_me:$LINENO: result: libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&5
 $as_echo "libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&6; }
         fi
 
@@ -13953,7 +13531,7 @@ $as_echo "libraries $cpl_cext_libraries, headers $cpl_cext_includes" >&6; }
         LIBCEXT="-lcext"
 
 
-        { $as_echo "$as_me:$LINENO: checking whether libcext can be used" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libcext can be used" >&5
 $as_echo_n "checking whether libcext can be used... " >&6; }
         ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -13970,11 +13548,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LDFLAGS="$CX_LDFLAGS $LDFLAGS"
         LIBS="$LIBCEXT"
 
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
                        #include <cxutils.h>
@@ -13988,41 +13562,16 @@ main ()
   ;
   return 0;
 }
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
   cpl_cext_is_usable="yes"
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cpl_cext_is_usable="no"
+  cpl_cext_is_usable="no"
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-        { $as_echo "$as_me:$LINENO: result: $cpl_cext_is_usable" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpl_cext_is_usable" >&5
 $as_echo "$cpl_cext_is_usable" >&6; }
 
         ac_ext=c
@@ -14037,16 +13586,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LIBS="$cpl_cext_libs_save"
 
         if test x"$cpl_cext_is_usable" = xno; then
-            { { $as_echo "$as_me:$LINENO: error: Linking with libcext failed! Please check architecture!" >&5
-$as_echo "$as_me: error: Linking with libcext failed! Please check architecture!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "Linking with libcext failed! Please check architecture!" "$LINENO" 5
         fi
 
     else
 
-        { $as_echo "$as_me:$LINENO: result: disabled" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 $as_echo "disabled" >&6; }
-        { $as_echo "$as_me:$LINENO: WARNING: libcext checks have been disabled! This package may not build!" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libcext checks have been disabled! This package may not build!" >&5
 $as_echo "$as_me: WARNING: libcext checks have been disabled! This package may not build!" >&2;}
         CX_INCLUDES=""
         CX_LDFLAGS=""
@@ -14087,7 +13634,7 @@ $as_echo "$as_me: WARNING: libcext checks have been disabled! This package may n
 
 
 
-        { $as_echo "$as_me:$LINENO: checking whether CPL can be used" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether CPL can be used" >&5
 $as_echo_n "checking whether CPL can be used... " >&6; }
         ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -14104,11 +13651,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LDFLAGS="$CPL_LDFLAGS $LDFLAGS"
         LIBS="$LIBCPLCORE $LIBCEXT $LIBS"
 
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
                        #include <cpl.h>
@@ -14123,40 +13666,15 @@ main ()
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   cpl_is_usable="yes"
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	cpl_is_usable="no"
+  cpl_is_usable="no"
 fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
-        { $as_echo "$as_me:$LINENO: result: $cpl_is_usable" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpl_is_usable" >&5
 $as_echo "$cpl_is_usable" >&6; }
 
         ac_ext=c
@@ -14171,16 +13689,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
         LIBS="$cpl_libs_save"
 
         if test x"$cpl_is_usable" = xno; then
-            { { $as_echo "$as_me:$LINENO: error: Linking with CPL failed! Please check architecture!" >&5
-$as_echo "$as_me: error: Linking with CPL failed! Please check architecture!" >&2;}
-   { (exit 1); exit 1; }; }
+            as_fn_error $? "Linking with CPL failed! Please check architecture!" "$LINENO" 5
         fi
 
     else
 
-        { $as_echo "$as_me:$LINENO: result: disabled" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 $as_echo "disabled" >&6; }
-        { $as_echo "$as_me:$LINENO: WARNING: CPL checks have been disabled! This package may not build!" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: CPL checks have been disabled! This package may not build!" >&5
 $as_echo "$as_me: WARNING: CPL checks have been disabled! This package may not build!" >&2;}
         CPL_INCLUDES=""
         CPL_LDFLAGS=""
@@ -14203,11 +13719,11 @@ $as_echo "$as_me: WARNING: CPL checks have been disabled! This package may not b
 # Check for Purify
 
 
-    { $as_echo "$as_me:$LINENO: checking for PURIFY availability" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PURIFY availability" >&5
 $as_echo_n "checking for PURIFY availability... " >&6; }
 
     # Check whether --enable-purify was given.
-if test "${enable_purify+set}" = set; then
+if test "${enable_purify+set}" = set; then :
   enableval=$enable_purify; enable_purify=$enableval
 else
   enable_purify=yes
@@ -14217,9 +13733,9 @@ fi
     if test "x$enable_purify" = xyes ; then
       # Extract the first word of "purify", so it can be a program name with args.
 set dummy purify; ac_word=$2
-{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PURIFY_CMD+set}" = set; then
+if ${ac_cv_prog_PURIFY_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$PURIFY_CMD"; then
@@ -14230,14 +13746,14 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_PURIFY_CMD="purify"
-    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
-done
+  done
 IFS=$as_save_IFS
 
   test -z "$ac_cv_prog_PURIFY_CMD" && ac_cv_prog_PURIFY_CMD="NONE"
@@ -14245,24 +13761,24 @@ fi
 fi
 PURIFY_CMD=$ac_cv_prog_PURIFY_CMD
 if test -n "$PURIFY_CMD"; then
-  { $as_echo "$as_me:$LINENO: result: $PURIFY_CMD" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PURIFY_CMD" >&5
 $as_echo "$PURIFY_CMD" >&6; }
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
       if test "$PURIFY_CMD" = "NONE" ; then
-        { $as_echo "$as_me:$LINENO: result: disabled" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 $as_echo "disabled" >&6; }
         enable_purify=no
       else
-        { $as_echo "$as_me:$LINENO: result: enabled" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled" >&5
 $as_echo "enabled" >&6; }
       fi
     else
-      { $as_echo "$as_me:$LINENO: result: disabled" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
 $as_echo "disabled" >&6; }
     fi
 
@@ -14279,21 +13795,21 @@ fi
 
 
     # Check whether --enable-profile was given.
-if test "${enable_profile+set}" = set; then
+if test "${enable_profile+set}" = set; then :
   enableval=$enable_profile; eso_enable_profile=$enableval
 else
   eso_enable_profile=no
 fi
 
 
-    { $as_echo "$as_me:$LINENO: checking whether profiling compiler options should be used" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether profiling compiler options should be used" >&5
 $as_echo_n "checking whether profiling compiler options should be used... " >&6; }
-if test "${eso_cv_enable_profile+set}" = set; then
+if ${eso_cv_enable_profile+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eso_cv_enable_profile=$eso_enable_profile
 fi
-{ $as_echo "$as_me:$LINENO: result: $eso_cv_enable_profile" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $eso_cv_enable_profile" >&5
 $as_echo "$eso_cv_enable_profile" >&6; }
 
 
@@ -14302,9 +13818,9 @@ $as_echo "$eso_cv_enable_profile" >&6; }
 
 
     flag=`echo pg | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -pg" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pg" >&5
 $as_echo_n "checking whether $CC supports -pg... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -14336,9 +13852,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -14353,9 +13868,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo g | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -g" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -g" >&5
 $as_echo_n "checking whether $CC supports -g... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -14387,9 +13902,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -14404,9 +13918,9 @@ $as_echo "$ac_res" >&6; }
 
 
     flag=`echo static-libgcc | sed 'y%.=/+-%___p_%'`
-    { $as_echo "$as_me:$LINENO: checking whether $CC supports -static-libgcc" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -static-libgcc" >&5
 $as_echo_n "checking whether $CC supports -static-libgcc... " >&6; }
-if { as_var=eso_cv_prog_cc_$flag; eval "test \"\${$as_var+set}\" = set"; }; then
+if eval \${eso_cv_prog_cc_$flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -14438,9 +13952,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 fi
-ac_res=`eval 'as_val=${'eso_cv_prog_cc_$flag'}
-		 $as_echo "$as_val"'`
-	       { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+eval ac_res=\$eso_cv_prog_cc_$flag
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 
     if eval "test \"`echo '$eso_cv_prog_cc_'$flag`\" = yes"; then
@@ -14453,7 +13966,7 @@ $as_echo "$ac_res" >&6; }
 
 
         # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
+if test "${enable_shared+set}" = set; then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
     yes) enable_shared=yes ;;
@@ -14481,7 +13994,7 @@ fi
 
 
         # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
+if test "${enable_static+set}" = set; then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
     yes) enable_static=yes ;;
@@ -14513,18 +14026,14 @@ fi
 
 # Check for a function which exists only in CPL 3.1 or later
 LDFLAGS="$LDFLAGS $CPL_LDFLAGS"
-{ $as_echo "$as_me:$LINENO: checking for cpl_image_get_bpm in -lcplcore" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cpl_image_get_bpm in -lcplcore" >&5
 $as_echo_n "checking for cpl_image_get_bpm in -lcplcore... " >&6; }
-if test "${ac_cv_lib_cplcore_cpl_image_get_bpm+set}" = set; then
+if ${ac_cv_lib_cplcore_cpl_image_get_bpm+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcplcore  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 /* Override any GCC internal prototype to avoid an error.
@@ -14542,263 +14051,62 @@ return cpl_image_get_bpm ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 $as_test_x conftest$ac_exeext
-       }; then
+if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_lib_cplcore_cpl_image_get_bpm=yes
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_lib_cplcore_cpl_image_get_bpm=no
+  ac_cv_lib_cplcore_cpl_image_get_bpm=no
 fi
-
-rm -rf conftest.dSYM
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cplcore_cpl_image_get_bpm" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cplcore_cpl_image_get_bpm" >&5
 $as_echo "$ac_cv_lib_cplcore_cpl_image_get_bpm" >&6; }
-if test "x$ac_cv_lib_cplcore_cpl_image_get_bpm" = x""yes; then
+if test "x$ac_cv_lib_cplcore_cpl_image_get_bpm" = xyes; then :
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CPL31 1
-_ACEOF
+$as_echo "#define HAVE_CPL31 1" >>confdefs.h
 
 else
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_CPL31 0
-_ACEOF
+$as_echo "#define HAVE_CPL31 0" >>confdefs.h
 
 fi
 
 
 
 # Check for __func__, popen(), pclose()
-{ $as_echo "$as_me:$LINENO: checking whether __func__ is declared" >&5
-$as_echo_n "checking whether __func__ is declared... " >&6; }
-if test "${ac_cv_have_decl___func__+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef __func__
-  (void) __func__;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl___func__=yes
+ac_fn_c_check_decl "$LINENO" "__func__" "ac_cv_have_decl___func__" "$ac_includes_default"
+if test "x$ac_cv_have_decl___func__" = xyes; then :
+  ac_have_decl=1
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl___func__=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_have_decl=0
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___func__" >&5
-$as_echo "$ac_cv_have_decl___func__" >&6; }
-if test "x$ac_cv_have_decl___func__" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL___FUNC__ 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL___FUNC__ 0
-_ACEOF
-
-
-fi
-{ $as_echo "$as_me:$LINENO: checking whether popen is declared" >&5
-$as_echo_n "checking whether popen is declared... " >&6; }
-if test "${ac_cv_have_decl_popen+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+#define HAVE_DECL___FUNC__ $ac_have_decl
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef popen
-  (void) popen;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_popen=yes
+ac_fn_c_check_decl "$LINENO" "popen" "ac_cv_have_decl_popen" "$ac_includes_default"
+if test "x$ac_cv_have_decl_popen" = xyes; then :
+  ac_have_decl=1
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_popen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_have_decl=0
 fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_popen" >&5
-$as_echo "$ac_cv_have_decl_popen" >&6; }
-if test "x$ac_cv_have_decl_popen" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POPEN 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_POPEN 0
-_ACEOF
-
-
-fi
-{ $as_echo "$as_me:$LINENO: checking whether pclose is declared" >&5
-$as_echo_n "checking whether pclose is declared... " >&6; }
-if test "${ac_cv_have_decl_pclose+set}" = set; then
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef pclose
-  (void) pclose;
-#endif
-
-  ;
-  return 0;
-}
+#define HAVE_DECL_POPEN $ac_have_decl
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_pclose=yes
+ac_fn_c_check_decl "$LINENO" "pclose" "ac_cv_have_decl_pclose" "$ac_includes_default"
+if test "x$ac_cv_have_decl_pclose" = xyes; then :
+  ac_have_decl=1
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_have_decl_pclose=no
+  ac_have_decl=0
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_pclose" >&5
-$as_echo "$ac_cv_have_decl_pclose" >&6; }
-if test "x$ac_cv_have_decl_pclose" = x""yes; then
-
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PCLOSE 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PCLOSE 0
+#define HAVE_DECL_PCLOSE $ac_have_decl
 _ACEOF
 
 
-fi
-
-
-
 
 
     if test -z "$plugindir"; then
@@ -14819,6 +14127,13 @@ fi
        configdir='${datadir}/${PACKAGE}/config'
     fi
 
+    if test -z "$wkfextradir"; then
+        wkfextradir='${datadir}/esopipes/${PACKAGE}-${VERSION}/reflex'
+    fi
+
+    if test -z "$wkfcopydir"; then
+        wkfcopydir='${datadir}/reflex/workflows/${PACKAGE}-${VERSION}'
+    fi
 
 
 
@@ -14851,7 +14166,7 @@ _ACEOF
 
 
 # Check whether --with-extra-includes was given.
-if test "${with_extra_includes+set}" = set; then
+if test "${with_extra_includes+set}" = set; then :
   withval=$with_extra_includes; eso_with_extra_includes=$withval
 else
   eso_with_extra_includes=NONE
@@ -14860,16 +14175,16 @@ fi
 
 
 # Check whether --with-extra-libs was given.
-if test "${with_extra_libs+set}" = set; then
+if test "${with_extra_libs+set}" = set; then :
   withval=$with_extra_libs; eso_with_extra_libs=$withval
 else
   eso_with_extra_libs=NONE
 fi
 
 
-    { $as_echo "$as_me:$LINENO: checking for extra includes" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra includes" >&5
 $as_echo_n "checking for extra includes... " >&6; }
-    if test "${eso_cv_with_extra_includes+set}" = set; then
+    if ${eso_cv_with_extra_includes+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -14887,17 +14202,17 @@ fi
         done
 
         IFS=$eso_save_IFS
-        { $as_echo "$as_me:$LINENO: result: added" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: added" >&5
 $as_echo "added" >&6; }
     else
-        { $as_echo "$as_me:$LINENO: result: no" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     fi
 
 
-    { $as_echo "$as_me:$LINENO: checking for extra libs" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra libs" >&5
 $as_echo_n "checking for extra libs... " >&6; }
-    if test "${eso_cv_with_extra_libs+set}" = set; then
+    if ${eso_cv_with_extra_libs+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -14915,10 +14230,10 @@ fi
         done
 
         IFS=$eso_save_IFS
-        { $as_echo "$as_me:$LINENO: result: added" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: added" >&5
 $as_echo "added" >&6; }
     else
-        { $as_echo "$as_me:$LINENO: result: no" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
     fi
 
@@ -14959,34 +14274,32 @@ $as_echo "no" >&6; }
 
 
 
-{ $as_echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5
 $as_echo_n "checking if malloc debugging is wanted... " >&6; }
 
 # Check whether --with-dmalloc was given.
-if test "${with_dmalloc+set}" = set; then
+if test "${with_dmalloc+set}" = set; then :
   withval=$with_dmalloc; if test "$withval" = yes; then
-  { $as_echo "$as_me:$LINENO: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
-cat >>confdefs.h <<\_ACEOF
-#define WITH_DMALLOC 1
-_ACEOF
+$as_echo "#define WITH_DMALLOC 1" >>confdefs.h
 
   LIBS="$LIBS -ldmalloc"
   LDFLAGS="$LDFLAGS -g"
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 else
-  { $as_echo "$as_me:$LINENO: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
 
 
-ac_config_files="$ac_config_files Makefile Makefile.purify doxygen/Doxyfile irplib/Makefile irplib/tests/Makefile sinfoni/Makefile sinfoni/tests/Makefile recipes/Makefile recipes/tests/Makefile regtests/Makefile regtests/tests/Makefile"
+ac_config_files="$ac_config_files Makefile Makefile.purify doxygen/Doxyfile irplib/Makefile irplib/tests/Makefile sinfoni/Makefile sinfoni/tests/Makefile recipes/Makefile recipes/tests/Makefile reflex/Makefile reflex/sinfo.xml regtests/Makefile regtests/tests/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -15015,13 +14328,13 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
       BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) $as_unset $ac_var ;;
+      *) { eval $ac_var=; unset $ac_var;} ;;
       esac ;;
     esac
   done
@@ -15029,8 +14342,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
   (set) 2>&1 |
     case $as_nl`(ac_space=' '; set) 2>&1` in #(
     *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
       sed -n \
 	"s/'/'\\\\''/g;
 	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
@@ -15052,12 +14365,23 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
-      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
-    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
@@ -15071,14 +14395,15 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
   ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
 done
 LIBOBJS=$ac_libobjs
 
@@ -15094,41 +14419,30 @@ else
 fi
 
 if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${PURIFY_TRUE}" && test -z "${PURIFY_FALSE}"; then
-  { { $as_echo "$as_me:$LINENO: error: conditional \"PURIFY\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-$as_echo "$as_me: error: conditional \"PURIFY\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "conditional \"PURIFY\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -15138,17 +14452,18 @@ cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 debug=false
 ac_cs_recheck=false
 ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
@@ -15156,23 +14471,15 @@ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
 as_nl='
 '
 export as_nl
@@ -15180,7 +14487,13 @@ export as_nl
 as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
   as_echo='printf %s\n'
   as_echo_n='printf %s'
 else
@@ -15191,7 +14504,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in
+      case $arg in #(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -15214,13 +14527,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
   }
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
 
 # IFS
 # We need space, tab and new line, in precisely that order.  Quoting is
@@ -15230,15 +14536,16 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+as_myself=
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -15250,12 +14557,16 @@ if test "x$as_myself" = x; then
 fi
 if test ! -f "$as_myself"; then
   $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
@@ -15267,7 +14578,89 @@ export LC_ALL
 LANGUAGE=C
 export LANGUAGE
 
-# Required to use basename.
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -15281,8 +14674,12 @@ else
   as_basename=false
 fi
 
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
 
-# Name of the executable.
 as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
 	 X"$0" : 'X\(//\)$' \| \
@@ -15302,76 +14699,25 @@ $as_echo X/"$0" |
 	  }
 	  s/.*/./; q'`
 
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
 
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
@@ -15400,8 +14746,56 @@ fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
 
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -15420,10 +14814,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in
+	case $1 in #(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -15438,13 +14832,19 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
 
-# Save the log message, to keep $[0] and so on meaningful, and to
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by SINFONI Instrument Pipeline $as_me 2.3.3, which was
-generated by GNU Autoconf 2.63.  Invocation command line was
+This file was extended by SINFONI Instrument Pipeline $as_me 2.4.0, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -15476,13 +14876,15 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
 
-Usage: $0 [OPTION]... [FILE]...
+Usage: $0 [OPTION]... [TAG]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
   -q, --quiet, --silent
                    do not print progress messages
   -d, --debug      don't remove temporary files
@@ -15501,16 +14903,17 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to <bug-autoconf at gnu.org>."
+Report bugs to <usd-help at eso.org>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-SINFONI Instrument Pipeline config.status 2.3.3
-configured by $0, generated by GNU Autoconf 2.63,
-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+SINFONI Instrument Pipeline config.status 2.4.0
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -15528,11 +14931,16 @@ ac_need_defaults=:
 while test $# != 0
 do
   case $1 in
-  --*=*)
+  --*=?*)
     ac_option=`expr "X$1" : 'X\([^=]*\)='`
     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
     ac_shift=:
     ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -15546,27 +14954,29 @@ do
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
     $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
-    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
-    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    { $as_echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; };;
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
@@ -15574,11 +14984,10 @@ Try \`$0 --help' for more information." >&2
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { $as_echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; } ;;
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
 
-  *) ac_config_targets="$ac_config_targets $1"
+  *) as_fn_append ac_config_targets " $1"
      ac_need_defaults=false ;;
 
   esac
@@ -15629,131 +15038,154 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
-macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
-macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
-pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
-enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
-host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
-host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
-host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
-build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
-build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
-build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
-SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
-Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
-GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
-EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
-FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
-LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
-NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
-LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
-max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
-ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
-exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
-lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
-lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
-lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
-reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
-reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
-deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
-file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
-AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
-AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
-RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
-old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
-CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
-compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
-GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
-SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
-ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
-MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
-lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
-lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
-need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
-DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
-NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
-LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
-OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
-libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
-shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
-enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
-export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
-allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
-inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
-link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
-fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
-always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
-export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
-prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
-variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
-need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
-need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
-version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
-runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
-shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
-libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
-soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
-postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
-finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
-hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
-enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
-old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
-striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
 
 LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
-for var in SED \
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
 GREP \
 EGREP \
 FGREP \
@@ -15766,8 +15198,13 @@ reload_flag \
 OBJDUMP \
 deplibs_check_method \
 file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
+archiver_list_spec \
 STRIP \
 RANLIB \
 CC \
@@ -15777,14 +15214,14 @@ lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
-SHELL \
-ECHO \
+nm_file_list_spec \
 lt_prog_compiler_no_builtin_flag \
-lt_prog_compiler_wl \
 lt_prog_compiler_pic \
+lt_prog_compiler_wl \
 lt_prog_compiler_static \
 lt_cv_prog_compiler_c_o \
 need_locks \
+MANIFEST_TOOL \
 DSYMUTIL \
 NMEDIT \
 LIPO \
@@ -15798,9 +15235,7 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
-fix_srcfile_path \
 exclude_expsyms \
 include_expsyms \
 file_list_spec \
@@ -15808,12 +15243,13 @@ variables_saved_for_relink \
 libname_spec \
 library_names_spec \
 soname_spec \
+install_override_mode \
 finish_eval \
 old_striplib \
 striplib; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -15835,14 +15271,15 @@ module_cmds \
 module_expsym_cmds \
 export_symbols_cmds \
 prelink_cmds \
+postlink_cmds \
 postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
 sys_lib_dlsearch_path_spec; do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -15850,12 +15287,6 @@ sys_lib_dlsearch_path_spec; do
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
-  ;;
-esac
-
 ac_aux_dir='$ac_aux_dir'
 xsi_shell='$xsi_shell'
 lt_shell_append='$lt_shell_append'
@@ -15896,12 +15327,12 @@ do
     "sinfoni/tests/Makefile") CONFIG_FILES="$CONFIG_FILES sinfoni/tests/Makefile" ;;
     "recipes/Makefile") CONFIG_FILES="$CONFIG_FILES recipes/Makefile" ;;
     "recipes/tests/Makefile") CONFIG_FILES="$CONFIG_FILES recipes/tests/Makefile" ;;
+    "reflex/Makefile") CONFIG_FILES="$CONFIG_FILES reflex/Makefile" ;;
+    "reflex/sinfo.xml") CONFIG_FILES="$CONFIG_FILES reflex/sinfo.xml" ;;
     "regtests/Makefile") CONFIG_FILES="$CONFIG_FILES regtests/Makefile" ;;
     "regtests/tests/Makefile") CONFIG_FILES="$CONFIG_FILES regtests/tests/Makefile" ;;
 
-  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -15924,26 +15355,24 @@ fi
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
+  trap 'as_fn_exit 1' 1 2 13 15
 }
 # Create a (secure) tmp directory for tmp files.
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} ||
-{
-   $as_echo "$as_me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -15951,7 +15380,13 @@ $debug ||
 if test -n "$CONFIG_FILES"; then
 
 
-ac_cr='
'
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
 ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
 if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
   ac_cs_awk_cr='\\r'
@@ -15959,7 +15394,7 @@ else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -15968,24 +15403,18 @@ _ACEOF
   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
   echo "_ACEOF"
 } >conf$$subs.sh ||
-  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   . ./conf$$subs.sh ||
-    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
 
   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
   if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -15993,7 +15422,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -16007,7 +15436,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -16021,7 +15450,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\).*/\1/
+s/\(.\{148\}\)..*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -16041,7 +15470,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = ""
 
@@ -16073,23 +15502,29 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
 else
   cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
-  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
-$as_echo "$as_me: error: could not setup config files machinery" >&2;}
-   { (exit 1); exit 1; }; }
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
 _ACEOF
 
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
 # trailing colons and then remove the whole line if VPATH becomes empty
 # (actually we leave an empty line to preserve line numbers).
 if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[	 ]*\):*/\1/
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[	 ]*$//
 }'
 fi
@@ -16101,7 +15536,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -16113,13 +15548,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
-    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
-$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
-   { (exit 1); exit 1; }; }
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -16204,9 +15637,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
-$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -16219,9 +15650,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
-$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
-   { (exit 1); exit 1; }; };;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -16240,7 +15669,7 @@ $as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -16249,12 +15678,10 @@ $as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-   { (exit 1); exit 1; }; };;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      ac_file_inputs="$ac_file_inputs '$ac_f'"
+      as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
@@ -16265,7 +15692,7 @@ $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
 	`' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
 $as_echo "$as_me: creating $ac_file" >&6;}
     fi
     # Neutralize special characters interpreted by sed in replacement strings.
@@ -16277,10 +15704,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; } ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -16308,47 +15733,7 @@ $as_echo X"$ac_file" |
 	    q
 	  }
 	  s/.*/./; q'`
-  { as_dir="$ac_dir"
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+  as_dir="$ac_dir"; as_fn_mkdir_p
   ac_builddir=.
 
 case "$ac_dir" in
@@ -16405,7 +15790,6 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
-
 ac_sed_dataroot='
 /datarootdir/ {
   p
@@ -16415,12 +15799,11 @@ ac_sed_dataroot='
 /@docdir@/p
 /@infodir@/p
 /@localedir@/p
-/@mandir@/p
-'
+/@mandir@/p'
 case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
@@ -16430,7 +15813,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   s&@infodir@&$infodir&g
   s&@localedir@&$localedir&g
   s&@mandir@&$mandir&g
-    s&\\\${datarootdir}&$datarootdir&g' ;;
+  s&\\\${datarootdir}&$datarootdir&g' ;;
 esac
 _ACEOF
 
@@ -16458,27 +15841,24 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
-  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&2;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
-  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -16487,27 +15867,21 @@ $as_echo "$as_me: error: could not create $ac_file" >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
-	|| { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
-$as_echo "$as_me: error: could not create $ac_file" >&2;}
-   { (exit 1); exit 1; }; }
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
-$as_echo "$as_me: error: could not create -" >&2;}
-   { (exit 1); exit 1; }; }
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -16545,7 +15919,7 @@ $as_echo X"$_am_arg" |
 	  s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
 
-  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
 $as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
@@ -16640,47 +16014,7 @@ $as_echo X"$file" |
 	    q
 	  }
 	  s/.*/./; q'`
-      { as_dir=$dirpart/$fdir
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
       # echo "creating $dirpart/$file"
       echo '# dummy' > "$dirpart/$file"
     done
@@ -16708,7 +16042,8 @@ $as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -16756,6 +16091,15 @@ pic_mode=$pic_mode
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -16805,9 +16149,11 @@ SP2NL=$lt_lt_SP2NL
 # turn newlines into spaces.
 NL2SP=$lt_lt_NL2SP
 
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
 # An object symbol dumper.
 OBJDUMP=$lt_OBJDUMP
@@ -16815,13 +16161,30 @@ OBJDUMP=$lt_OBJDUMP
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
-# Command to use when deplibs_check_method == "file_magic".
+# Command to use when deplibs_check_method = "file_magic".
 file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
 # The archiver.
 AR=$lt_AR
+
+# Flags to create an archive.
 AR_FLAGS=$lt_AR_FLAGS
 
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
 # A symbol stripping program.
 STRIP=$lt_STRIP
 
@@ -16830,6 +16193,9 @@ RANLIB=$lt_RANLIB
 old_postinstall_cmds=$lt_old_postinstall_cmds
 old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
 # A C compiler.
 LTCC=$lt_CC
 
@@ -16848,14 +16214,14 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 # Transform the output of nm in a C name address pair when lib prefix is needed.
 global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# An echo program that does not interpret backslashes.
-ECHO=$lt_ECHO
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
 # Used to examine libraries when file_magic_cmd begins with "file".
 MAGIC_CMD=$MAGIC_CMD
@@ -16863,6 +16229,9 @@ MAGIC_CMD=$MAGIC_CMD
 # Must we lock files when doing compilation?
 need_locks=$lt_need_locks
 
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
 # Tool to manipulate archived DWARF debug symbol files on Mac OS X.
 DSYMUTIL=$lt_DSYMUTIL
 
@@ -16919,6 +16288,9 @@ library_names_spec=$lt_library_names_spec
 # The coded name of the library, if different from the real name.
 soname_spec=$lt_soname_spec
 
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
 # Command to use after installation of a shared archive.
 postinstall_cmds=$lt_postinstall_cmds
 
@@ -16958,6 +16330,10 @@ striplib=$lt_striplib
 # The linker used to build libraries.
 LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
 # Commands used to build an old-style archive.
 old_archive_cmds=$lt_old_archive_cmds
 
@@ -16970,12 +16346,12 @@ with_gcc=$GCC
 # Compiler flag to turn off builtin functions.
 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
 # Additional compiler flags for building library objects.
 pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
 # Compiler flag to prevent dynamic linking.
 link_static_flag=$lt_lt_prog_compiler_static
 
@@ -17025,10 +16401,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
@@ -17062,9 +16434,6 @@ inherit_rpath=$inherit_rpath
 # Whether libtool must link a program against all its dependency libraries.
 link_all_deplibs=$link_all_deplibs
 
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
 # Set to "yes" if exported symbols are required.
 always_export_symbols=$always_export_symbols
 
@@ -17080,6 +16449,9 @@ include_expsyms=$lt_include_expsyms
 # Commands necessary for linking programs (against libraries) with templates.
 prelink_cmds=$lt_prelink_cmds
 
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
 # Specify filename containing input files.
 file_list_spec=$lt_file_list_spec
 
@@ -17112,212 +16484,169 @@ ltmain="$ac_aux_dir/ltmain.sh"
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $* ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
-
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
-
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
-
-# sed scripts:
-my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[^=]*=//'
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$@"`
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
-
-_LT_EOF
-esac
-
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1+=\$2"
-}
-_LT_EOF
-    ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$1=\$$1\$2"
-}
-
-_LT_EOF
-    ;;
-  esac
-
-
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" ||
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+  if test x"$xsi_shell" = xyes; then
+  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\    case ${1} in\
+\      */*) func_dirname_result="${1%/*}${2}" ;;\
+\      *  ) func_dirname_result="${3}" ;;\
+\    esac\
+\    func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\    # positional parameters, so assign one to ordinary parameter first.\
+\    func_stripname_result=${3}\
+\    func_stripname_result=${func_stripname_result#"${1}"}\
+\    func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\    func_split_long_opt_name=${1%%=*}\
+\    func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\    func_split_short_opt_arg=${1#??}\
+\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\    case ${1} in\
+\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\      *)    func_lo2o_result=${1} ;;\
+\    esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+    func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+    func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+    func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+  sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+    eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\    func_quote_for_eval "${2}"\
+\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 
@@ -17327,15 +16656,12 @@ _LT_EOF
 done # for ac_tag
 
 
-{ (exit 0); exit 0; }
+as_fn_exit 0
 _ACEOF
-chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -17356,10 +16682,10 @@ if test "$no_create" != yes; then
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
diff --git a/configure.ac b/configure.ac
index 1c89987..cc219c4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 # Process this file with autoconf to produce a configure script.
 
-AC_INIT([SINFONI Instrument Pipeline], [2.3.3], [amodigli at eso.org], [sinfo])
+AC_INIT([SINFONI Instrument Pipeline], [2.4.0], [usd-help at eso.org], [sinfo])
 
 AC_PREREQ([2.59])
 
@@ -103,6 +103,8 @@ AC_CONFIG_FILES(Makefile
                 sinfoni/tests/Makefile
                 recipes/Makefile
                 recipes/tests/Makefile
+		reflex/Makefile
+		reflex/sinfo.xml
                 regtests/Makefile
                 regtests/tests/Makefile)
 AC_OUTPUT
diff --git a/html/bc_s.png b/html/bc_s.png
new file mode 100644
index 0000000..25e3beb
Binary files /dev/null and b/html/bc_s.png differ
diff --git a/html/bdwn.png b/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/html/bdwn.png differ
diff --git a/html/closed.png b/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/html/closed.png differ
diff --git a/html/dir_5817a01c6dda84cccc27ae90d5d981a9.html b/html/dir_5817a01c6dda84cccc27ae90d5d981a9.html
new file mode 100644
index 0000000..3c1df35
--- /dev/null
+++ b/html/dir_5817a01c6dda84cccc27ae90d5d981a9.html
@@ -0,0 +1,343 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>SINFONI Pipeline Reference Manual: /scratch/data2/sinfoni/releases/pub/2.4.0/sinfop/sinfoni/ Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:sinfo__absolute_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_absolute.c</b> <a href="sinfo__absolute_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__absolute_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_absolute.h</b> <a href="sinfo__absolute_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__atmo__disp_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_atmo_disp.c</b> <a href="sinfo__atmo__disp_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__atmo__disp_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_atmo_disp.h</b> <a href="sinfo__atmo__disp_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bad__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bad_cfg.c</b> <a href="sinfo__bad__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bad__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bad_cfg.h</b> <a href="sinfo__bad__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bad__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bad_ini.h</b> <a href="sinfo__bad__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__baddist__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_baddist_ini_by_cpl.c</b> <a href="sinfo__baddist__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__baddist__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_baddist_ini_by_cpl.h</b> <a href="sinfo__baddist__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badnorm__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badnorm_ini_by_cpl.c</b> <a href="sinfo__badnorm__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badnorm__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badnorm_ini_by_cpl.h</b> <a href="sinfo__badnorm__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badsky__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badsky_cfg.c</b> <a href="sinfo__badsky__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badsky__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badsky_cfg.h</b> <a href="sinfo__badsky__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badsky__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badsky_ini_by_cpl.c</b> <a href="sinfo__badsky__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__badsky__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_badsky_ini_by_cpl.h</b> <a href="sinfo__badsky__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__balance_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_balance.c</b> <a href="sinfo__balance_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__baryvel_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_baryvel.c</b> <a href="sinfo__baryvel_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__baryvel_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_baryvel.h</b> <a href="sinfo__baryvel_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__boltzmann_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_boltzmann.c</b> <a href="sinfo__boltzmann_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_config.c</b> <a href="sinfo__bp__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_config.h</b> <a href="sinfo__bp__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__dist__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_dist_config.c</b> <a href="sinfo__bp__dist__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__dist__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_dist_config.h</b> <a href="sinfo__bp__dist__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__lin_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_lin.c</b> <a href="sinfo__bp__lin_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__lin_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_lin.h</b> <a href="sinfo__bp__lin_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__lin__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_lin_config.c</b> <a href="sinfo__bp__lin__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__lin__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_lin_config.h</b> <a href="sinfo__bp__lin__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__noise_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_noise.c</b> <a href="sinfo__bp__noise_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__noise_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_noise.h</b> <a href="sinfo__bp__noise_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__noise__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_noise_config.c</b> <a href="sinfo__bp__noise__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__noise__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_noise_config.h</b> <a href="sinfo__bp__noise__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__norm_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_norm.c</b> <a href="sinfo__bp__norm_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__norm_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_norm.h</b> <a href="sinfo__bp__norm_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__norm__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_norm_config.c</b> <a href="sinfo__bp__norm__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__norm__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_norm_config.h</b> <a href="sinfo__bp__norm__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__sky__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_sky_config.c</b> <a href="sinfo__bp__sky__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__bp__sky__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_bp_sky_config.h</b> <a href="sinfo__bp__sky__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__coltilt_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_coltilt.c</b> <a href="sinfo__coltilt_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__coltilt_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_coltilt.h</b> <a href="sinfo__coltilt_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__companion_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_companion.c</b> <a href="sinfo__companion_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__compare__tags_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_compare_tags.h</b> <a href="sinfo__compare__tags_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__cpl__size_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_cpl_size.h</b> <a href="sinfo__cpl__size_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__cube__construct_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_cube_construct.c</b> <a href="sinfo__cube__construct_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__cube__construct_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_cube_construct.h</b> <a href="sinfo__cube__construct_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__cubecreate__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_cubecreate_ini.h</b> <a href="sinfo__cubecreate__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_cfg.c</b> <a href="sinfo__dark__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_cfg.h</b> <a href="sinfo__dark__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_config.c</b> <a href="sinfo__dark__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_config.h</b> <a href="sinfo__dark__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_ini.h</b> <a href="sinfo__dark__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_ini_by_cpl.c</b> <a href="sinfo__dark__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dark__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dark_ini_by_cpl.h</b> <a href="sinfo__dark__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__define__opt_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_define_opt.h</b> <a href="sinfo__define__opt_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin.c</b> <a href="sinfo__detlin_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin.h</b> <a href="sinfo__detlin_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin_cfg.c</b> <a href="sinfo__detlin__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin_cfg.h</b> <a href="sinfo__detlin__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin_ini.h</b> <a href="sinfo__detlin__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin_ini_by_cpl.c</b> <a href="sinfo__detlin__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detlin__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detlin_ini_by_cpl.h</b> <a href="sinfo__detlin__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detnoise__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detnoise_cfg.c</b> <a href="sinfo__detnoise__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detnoise__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detnoise_cfg.h</b> <a href="sinfo__detnoise__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detnoise__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detnoise_ini.h</b> <a href="sinfo__detnoise__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detnoise__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detnoise_ini_by_cpl.c</b> <a href="sinfo__detnoise__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__detnoise__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_detnoise_ini_by_cpl.h</b> <a href="sinfo__detnoise__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dfs_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dfs.c</b> <a href="sinfo__dfs_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dfs_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dfs.h</b> <a href="sinfo__dfs_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__distortion_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_distortion.c</b> <a href="sinfo__distortion_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__distortion_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_distortion.h</b> <a href="sinfo__distortion_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__distortion__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_distortion_config.c</b> <a href="sinfo__distortion__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__distortion__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_distortion_config.h</b> <a href="sinfo__distortion__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dump_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dump.c</b> <a href="sinfo__dump_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__dump_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_dump.h</b> <a href="sinfo__dump_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__error_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_error.h</b> <a href="sinfo__error_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fft__base_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fft_base.c</b> <a href="sinfo__fft__base_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fft__base_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fft_base.h</b> <a href="sinfo__fft__base_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__file__handling_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_file_handling.c</b> <a href="sinfo__file__handling_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__file__handling_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_file_handling.h</b> <a href="sinfo__file__handling_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__finddist__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_finddist_cfg.c</b> <a href="sinfo__finddist__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__finddist__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_finddist_cfg.h</b> <a href="sinfo__finddist__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__finddist__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_finddist_ini.h</b> <a href="sinfo__finddist__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__finddist__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_finddist_ini_by_cpl.c</b> <a href="sinfo__finddist__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__finddist__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_finddist_ini_by_cpl.h</b> <a href="sinfo__finddist__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fit_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fit.c</b> <a href="sinfo__fit_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fit_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fit.h</b> <a href="sinfo__fit_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fit__curve_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fit_curve.c</b> <a href="sinfo__fit__curve_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__fit__curve_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_fit_curve.h</b> <a href="sinfo__fit__curve_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_cfg.c</b> <a href="sinfo__flat__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_cfg.h</b> <a href="sinfo__flat__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__ini_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_ini.c</b> <a href="sinfo__flat__ini_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_ini.h</b> <a href="sinfo__flat__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_ini_by_cpl.c</b> <a href="sinfo__flat__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__flat__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_flat_ini_by_cpl.h</b> <a href="sinfo__flat__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus.c</b> <a href="sinfo__focus_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus.h</b> <a href="sinfo__focus_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_cfg.c</b> <a href="sinfo__focus__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_cfg.h</b> <a href="sinfo__focus__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__determination__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_determination_config.c</b> <a href="sinfo__focus__determination__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__determination__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_determination_config.h</b> <a href="sinfo__focus__determination__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_ini.h</b> <a href="sinfo__focus__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_ini_by_cpl.c</b> <a href="sinfo__focus__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__focus__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_focus_ini_by_cpl.h</b> <a href="sinfo__focus__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__function__1d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_function_1d.c</b> <a href="sinfo__function__1d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__function__1d_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_function_1d.h</b> <a href="sinfo__function__1d_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__functions_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_functions.h</b> <a href="sinfo__functions_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__general__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_general_config.c</b> <a href="sinfo__general__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__general__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_general_config.h</b> <a href="sinfo__general__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__globals_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_globals.c</b> <a href="sinfo__globals_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__globals_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_globals.h</b> <a href="sinfo__globals_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__hidden_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_hidden.h</b> <a href="sinfo__hidden_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__image__ops_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_image_ops.c</b> <a href="sinfo__image__ops_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__image__ops_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_image_ops.h</b> <a href="sinfo__image__ops_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ipow_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ipow.c</b> <a href="sinfo__ipow_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ipow_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ipow.h</b> <a href="sinfo__ipow_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__irplib__cpl__wrp_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_irplib_cpl_wrp.h</b> <a href="sinfo__irplib__cpl__wrp_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__key__names_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_key_names.h</b> <a href="sinfo__key__names_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_cfg.c</b> <a href="sinfo__lamp__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_cfg.h</b> <a href="sinfo__lamp__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__flats__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_flats_config.c</b> <a href="sinfo__lamp__flats__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__flats__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_flats_config.h</b> <a href="sinfo__lamp__flats__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__flats__hidden__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_flats_hidden_config.c</b> <a href="sinfo__lamp__flats__hidden__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__flats__hidden__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_flats_hidden_config.h</b> <a href="sinfo__lamp__flats__hidden__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__ini_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_ini.c</b> <a href="sinfo__lamp__ini_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_ini.h</b> <a href="sinfo__lamp__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_ini_by_cpl.c</b> <a href="sinfo__lamp__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_ini_by_cpl.h</b> <a href="sinfo__lamp__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__spec__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_spec_config.c</b> <a href="sinfo__lamp__spec__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__lamp__spec__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_lamp_spec_config.h</b> <a href="sinfo__lamp__spec__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__local__types_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_local_types.h</b> <a href="sinfo__local__types_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__matrix_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_matrix.c</b> <a href="sinfo__matrix_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__matrix_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_matrix.h</b> <a href="sinfo__matrix_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__median_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_median.c</b> <a href="sinfo__median_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__median_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_median.h</b> <a href="sinfo__median_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__merge_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_merge.c</b> <a href="sinfo__merge_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__merge_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_merge.h</b> <a href="sinfo__merge_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__msg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_msg.c</b> <a href="sinfo__msg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__msg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_msg.h</b> <a href="sinfo__msg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__add__bp__map_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_add_bp_map.c</b> <a href="sinfo__new__add__bp__map_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__add__bp__map_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_add_bp_map.h</b> <a href="sinfo__new__add__bp__map_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__bezier_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_bezier.c</b> <a href="sinfo__new__bezier_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__bezier_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_bezier.h</b> <a href="sinfo__new__bezier_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cube__ops_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cube_ops.c</b> <a href="sinfo__new__cube__ops_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cube__ops_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cube_ops.h</b> <a href="sinfo__new__cube__ops_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cubes__build_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cubes_build.c</b> <a href="sinfo__new__cubes__build_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cubes__build_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cubes_build.h</b> <a href="sinfo__new__cubes__build_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cubes__coadd_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cubes_coadd.c</b> <a href="sinfo__new__cubes__coadd_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__cubes__coadd_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_cubes_coadd.h</b> <a href="sinfo__new__cubes__coadd_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__dark_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_dark.c</b> <a href="sinfo__new__dark_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__dark_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_dark.h</b> <a href="sinfo__new__dark_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__find__distortions_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_find_distortions.c</b> <a href="sinfo__new__find__distortions_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__find__distortions_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_find_distortions.h</b> <a href="sinfo__new__find__distortions_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__lamp__flats_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_lamp_flats.c</b> <a href="sinfo__new__lamp__flats_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__lamp__flats_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_lamp_flats.h</b> <a href="sinfo__new__lamp__flats_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__nst_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_nst.c</b> <a href="sinfo__new__nst_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__nst_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_nst.h</b> <a href="sinfo__new__nst_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__objnod_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_objnod.c</b> <a href="sinfo__new__objnod_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__objnod_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_objnod.h</b> <a href="sinfo__new__objnod_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__prepare__stacked__frames_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_prepare_stacked_frames.c</b> <a href="sinfo__new__prepare__stacked__frames_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__prepare__stacked__frames_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_prepare_stacked_frames.h</b> <a href="sinfo__new__prepare__stacked__frames_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__psf_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_psf.c</b> <a href="sinfo__new__psf_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__psf_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_psf.h</b> <a href="sinfo__new__psf_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__resampling_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_resampling.c</b> <a href="sinfo__new__resampling_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__resampling_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_resampling.h</b> <a href="sinfo__new__resampling_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__slit__pos_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_slit_pos.c</b> <a href="sinfo__new__slit__pos_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__slit__pos_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_slit_pos.h</b> <a href="sinfo__new__slit__pos_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__stdstar_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_stdstar.c</b> <a href="sinfo__new__stdstar_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__stdstar_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_stdstar.h</b> <a href="sinfo__new__stdstar_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__wave__cal__slit2_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_wave_cal_slit2.c</b> <a href="sinfo__new__wave__cal__slit2_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__new__wave__cal__slit2_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_new_wave_cal_slit2.h</b> <a href="sinfo__new__wave__cal__slit2_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__north__south__test__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_north_south_test_config.c</b> <a href="sinfo__north__south__test__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__north__south__test__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_north_south_test_config.h</b> <a href="sinfo__north__south__test__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ns__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ns_cfg.c</b> <a href="sinfo__ns__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ns__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ns_cfg.h</b> <a href="sinfo__ns__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ns__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ns_ini.h</b> <a href="sinfo__ns__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ns__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ns_ini_by_cpl.c</b> <a href="sinfo__ns__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ns__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ns_ini_by_cpl.h</b> <a href="sinfo__ns__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__object__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_object_cfg.c</b> <a href="sinfo__object__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__object__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_object_cfg.h</b> <a href="sinfo__object__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__object__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_object_ini.h</b> <a href="sinfo__object__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objnod__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objnod_config.c</b> <a href="sinfo__objnod__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objnod__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objnod_config.h</b> <a href="sinfo__objnod__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objnod__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objnod_ini_by_cpl.c</b> <a href="sinfo__objnod__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objnod__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objnod_ini_by_cpl.h</b> <a href="sinfo__objnod__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objspider__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objspider_config.c</b> <a href="sinfo__objspider__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objspider__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objspider_config.h</b> <a href="sinfo__objspider__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objspider__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objspider_ini_by_cpl.c</b> <a href="sinfo__objspider__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__objspider__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_objspider_ini_by_cpl.h</b> <a href="sinfo__objspider__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pfits_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pfits.c</b> <a href="sinfo__pfits_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pfits_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pfits.h</b> <a href="sinfo__pfits_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pixel__handling_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pixel_handling.c</b> <a href="sinfo__pixel__handling_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pixel__handling_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pixel_handling.h</b> <a href="sinfo__pixel__handling_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__poly2d_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_poly2d.c</b> <a href="sinfo__poly2d_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__poly2d_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_poly2d.h</b> <a href="sinfo__poly2d_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__prepare__stacked__frames__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_prepare_stacked_frames_config.c</b> <a href="sinfo__prepare__stacked__frames__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__prepare__stacked__frames__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_prepare_stacked_frames_config.h</b> <a href="sinfo__prepare__stacked__frames__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pro__save_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pro_save.c</b> <a href="sinfo__pro__save_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pro__save_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pro_save.h</b> <a href="sinfo__pro__save_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__pro__types_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_pro_types.h</b> <a href="sinfo__pro__types_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__product__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_product_config.c</b> <a href="sinfo__product__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__product__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_product_config.h</b> <a href="sinfo__product__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_cfg.c</b> <a href="sinfo__psf__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_cfg.h</b> <a href="sinfo__psf__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_config.c</b> <a href="sinfo__psf__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_config.h</b> <a href="sinfo__psf__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_ini.h</b> <a href="sinfo__psf__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_ini_by_cpl.c</b> <a href="sinfo__psf__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__psf__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_psf_ini_by_cpl.h</b> <a href="sinfo__psf__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__qr_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_qr.c</b> <a href="sinfo__qr_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__raw__types_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_raw_types.h</b> <a href="sinfo__raw__types_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__utils_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_utils.c</b> <a href="sinfo__rec__utils_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__utils_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_utils.h</b> <a href="sinfo__rec__utils_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__recipes_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_recipes.c</b> <a href="sinfo__recipes_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__recipes_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_recipes.h</b> <a href="sinfo__recipes_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__ref__types_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_ref_types.h</b> <a href="sinfo__ref__types_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__remove__crh__single_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_remove_crh_single.c</b> <a href="sinfo__remove__crh__single_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__remove__crh__single_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_remove_crh_single.h</b> <a href="sinfo__remove__crh__single_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__resampling_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_resampling.c</b> <a href="sinfo__resampling_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__resampling_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_resampling.h</b> <a href="sinfo__resampling_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__shift__images_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_shift_images.c</b> <a href="sinfo__shift__images_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__shift__images_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_shift_images.h</b> <a href="sinfo__shift__images_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__skycor_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_skycor.c</b> <a href="sinfo__skycor_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__skycor_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_skycor.h</b> <a href="sinfo__skycor_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__skycor__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_skycor_config.c</b> <a href="sinfo__skycor__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__skycor__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_skycor_config.h</b> <a href="sinfo__skycor__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__solve__poly__root_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_solve_poly_root.c</b> <a href="sinfo__solve__poly__root_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__solve__poly__root_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_solve_poly_root.h</b> <a href="sinfo__solve__poly__root_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__spectrum__ops_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_spectrum_ops.c</b> <a href="sinfo__spectrum__ops_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__spectrum__ops_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_spectrum_ops.h</b> <a href="sinfo__spectrum__ops_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__spiffi__types_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_spiffi_types.h</b> <a href="sinfo__spiffi__types_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stack__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stack_cfg.c</b> <a href="sinfo__stack__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stack__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stack_cfg.h</b> <a href="sinfo__stack__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stack__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stack_ini.h</b> <a href="sinfo__stack__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stack__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stack_ini_by_cpl.c</b> <a href="sinfo__stack__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stack__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stack_ini_by_cpl.h</b> <a href="sinfo__stack__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stacked__hidden__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stacked_hidden_config.c</b> <a href="sinfo__stacked__hidden__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__stacked__hidden__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_stacked_hidden_config.h</b> <a href="sinfo__stacked__hidden__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standard__star__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standard_star_config.c</b> <a href="sinfo__standard__star__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standard__star__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standard_star_config.h</b> <a href="sinfo__standard__star__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standstar__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standstar_cfg.c</b> <a href="sinfo__standstar__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standstar__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standstar_cfg.h</b> <a href="sinfo__standstar__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standstar__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standstar_ini.h</b> <a href="sinfo__standstar__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standstar__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standstar_ini_by_cpl.c</b> <a href="sinfo__standstar__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__standstar__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_standstar_ini_by_cpl.h</b> <a href="sinfo__standstar__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__star__index_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_star_index.c</b> <a href="sinfo__star__index_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__star__index_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_star_index.h</b> <a href="sinfo__star__index_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__svd_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_svd.c</b> <a href="sinfo__svd_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__svd_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_svd.h</b> <a href="sinfo__svd_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tilt__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tilt_cfg.c</b> <a href="sinfo__tilt__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tilt__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tilt_cfg.h</b> <a href="sinfo__tilt__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tilt__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tilt_ini.h</b> <a href="sinfo__tilt__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__time_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_time.c</b> <a href="sinfo__time_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__time_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_time.h</b> <a href="sinfo__time_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tpl__dfs_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tpl_dfs.c</b> <a href="sinfo__tpl__dfs_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tpl__dfs_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tpl_dfs.h</b> <a href="sinfo__tpl__dfs_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tpl__utils_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tpl_utils.c</b> <a href="sinfo__tpl__utils_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__tpl__utils_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_tpl_utils.h</b> <a href="sinfo__tpl__utils_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utilities_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utilities.c</b> <a href="sinfo__utilities_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utilities_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utilities.h</b> <a href="sinfo__utilities_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utilities__scired_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utilities_scired.c</b> <a href="sinfo__utilities__scired_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utilities__scired_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utilities_scired.h</b> <a href="sinfo__utilities__scired_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utils_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utils.c</b> <a href="sinfo__utils_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utils_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utils.h</b> <a href="sinfo__utils_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utils__wrappers_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utils_wrappers.c</b> <a href="sinfo__utils__wrappers_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utils__wrappers_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utils_wrappers.h</b> <a href="sinfo__utils__wrappers_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__cube2ima_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_cube2ima.c</b> <a href="sinfoni_2sinfo__utl__cube2ima_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube2ima_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube2ima.h</b> <a href="sinfo__utl__cube2ima_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__cube2spectrum_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_cube2spectrum.c</b> <a href="sinfoni_2sinfo__utl__cube2spectrum_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube2spectrum_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube2spectrum.h</b> <a href="sinfo__utl__cube2spectrum_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__cube__arith_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_cube_arith.c</b> <a href="sinfoni_2sinfo__utl__cube__arith_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube__arith_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube_arith.h</b> <a href="sinfo__utl__cube__arith_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__cube__combine_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_cube_combine.c</b> <a href="sinfoni_2sinfo__utl__cube__combine_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube__combine_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube_combine.h</b> <a href="sinfo__utl__cube__combine_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__efficiency_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_efficiency.c</b> <a href="sinfo__utl__efficiency_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__efficiency_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_efficiency.h</b> <a href="sinfo__utl__efficiency_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c</b> <a href="sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__spectrum__divide__by__blackbody_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_spectrum_divide_by_blackbody.h</b> <a href="sinfo__utl__spectrum__divide__by__blackbody_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfoni/sinfo_utl_spectrum_wavelength_shift.c</b> <a href="sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__spectrum__wavelength__shift_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_spectrum_wavelength_shift.h</b> <a href="sinfo__utl__spectrum__wavelength__shift_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__vltPort_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_vltPort.h</b> <a href="sinfo__vltPort_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wave__calibration_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wave_calibration.c</b> <a href="sinfo__wave__calibration_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wave__calibration_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wave_calibration.h</b> <a href="sinfo__wave__calibration_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal.c</b> <a href="sinfo__wavecal_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal.h</b> <a href="sinfo__wavecal_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__cfg_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_cfg.c</b> <a href="sinfo__wavecal__cfg_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__cfg_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_cfg.h</b> <a href="sinfo__wavecal__cfg_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__config_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_config.c</b> <a href="sinfo__wavecal__config_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__config_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_config.h</b> <a href="sinfo__wavecal__config_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__ini_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_ini.h</b> <a href="sinfo__wavecal__ini_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__ini__by__cpl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_ini_by_cpl.c</b> <a href="sinfo__wavecal__ini__by__cpl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wavecal__ini__by__cpl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wavecal_ini_by_cpl.h</b> <a href="sinfo__wavecal__ini__by__cpl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wcal__functions_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wcal_functions.c</b> <a href="sinfo__wcal__functions_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__wcal__functions_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_wcal_functions.h</b> <a href="sinfo__wcal__functions_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
+</body>
+</html>
diff --git a/html/dir_9dbeae34d65cadb5c6915b8c80494485.html b/html/dir_9dbeae34d65cadb5c6915b8c80494485.html
new file mode 100644
index 0000000..04fb6f4
--- /dev/null
+++ b/html/dir_9dbeae34d65cadb5c6915b8c80494485.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>SINFONI Pipeline Reference Manual: /scratch/data2/sinfoni/releases/pub/2.4.0/sinfop/irplib/ Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:irplib__calib_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_calib.c</b> <a href="irplib__calib_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__calib_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_calib.h</b> <a href="irplib__calib_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__cat_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_cat.c</b> <a href="irplib__cat_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__cat_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_cat.h</b> <a href="irplib__cat_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__distortion_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_distortion.c</b> <a href="irplib__distortion_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__distortion_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_distortion.h</b> <a href="irplib__distortion_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__flat_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_flat.c</b> <a href="irplib__flat_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__flat_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_flat.h</b> <a href="irplib__flat_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__framelist_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_framelist.c</b> <a href="irplib__framelist_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__framelist_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_framelist.h</b> <a href="irplib__framelist_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__hist_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_hist.c</b> <a href="irplib__hist_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__hist_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_hist.h</b> <a href="irplib__hist_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__ksigma__clip_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_ksigma_clip.c</b> <a href="irplib__ksigma__clip_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__ksigma__clip_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_ksigma_clip.h</b> <a href="irplib__ksigma__clip_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__ksigma__clip__body_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_ksigma_clip_body.h</b> <a href="irplib__ksigma__clip__body_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__match__cats_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_match_cats.c</b> <a href="irplib__match__cats_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__match__cats_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_match_cats.h</b> <a href="irplib__match__cats_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__mkmaster_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_mkmaster.c</b> <a href="irplib__mkmaster_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__mkmaster_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_mkmaster.h</b> <a href="irplib__mkmaster_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__oddeven_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_oddeven.c</b> <a href="irplib__oddeven_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__oddeven_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_oddeven.h</b> <a href="irplib__oddeven_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__plugin_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_plugin.c</b> <a href="irplib__plugin_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__plugin_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_plugin.h</b> <a href="irplib__plugin_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__polynomial_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_polynomial.c</b> <a href="irplib__polynomial_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__polynomial_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_polynomial.h</b> <a href="irplib__polynomial_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__ppm_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_ppm.c</b> <a href="irplib__ppm_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__ppm_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_ppm.h</b> <a href="irplib__ppm_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__slitpos_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_slitpos.c</b> <a href="irplib__slitpos_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__slitpos_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_slitpos.h</b> <a href="irplib__slitpos_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__spectrum_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_spectrum.c</b> <a href="irplib__spectrum_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__spectrum_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_spectrum.h</b> <a href="irplib__spectrum_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__stdstar_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_stdstar.c</b> <a href="irplib__stdstar_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__stdstar_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_stdstar.h</b> <a href="irplib__stdstar_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__strehl_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_strehl.c</b> <a href="irplib__strehl_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__strehl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_strehl.h</b> <a href="irplib__strehl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__utils_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_utils.c</b> <a href="irplib__utils_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__utils_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_utils.h</b> <a href="irplib__utils_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wavecal_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wavecal.c</b> <a href="irplib__wavecal_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wavecal_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wavecal.h</b> <a href="irplib__wavecal_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wavecal__impl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wavecal_impl.h</b> <a href="irplib__wavecal__impl_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wcs_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wcs.c</b> <a href="irplib__wcs_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wcs_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wcs.h</b> <a href="irplib__wcs_8h_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wlxcorr_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wlxcorr.c</b> <a href="irplib__wlxcorr_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:irplib__wlxcorr_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>irplib_wlxcorr.h</b> <a href="irplib__wlxcorr_8h_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
+</body>
+</html>
diff --git a/html/dir_b351cdfeb4656d7d168dc72b273024e7.html b/html/dir_b351cdfeb4656d7d168dc72b273024e7.html
new file mode 100644
index 0000000..9fde09a
--- /dev/null
+++ b/html/dir_b351cdfeb4656d7d168dc72b273024e7.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>SINFONI Pipeline Reference Manual: /scratch/data2/sinfoni/releases/pub/2.4.0/sinfop/recipes/ Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:sinfo__img__noise_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_img_noise.c</b> <a href="sinfo__img__noise_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__detlin_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_detlin.c</b> <a href="sinfo__rec__detlin_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__distortion_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_distortion.c</b> <a href="sinfo__rec__distortion_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__jitter_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_jitter.c</b> <a href="sinfo__rec__jitter_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__lingain_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_lingain.c</b> <a href="sinfo__rec__lingain_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__mdark_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_mdark.c</b> <a href="sinfo__rec__mdark_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__mdark__detmon_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_mdark_detmon.c</b> <a href="sinfo__rec__mdark__detmon_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__mflat_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_mflat.c</b> <a href="sinfo__rec__mflat_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__objnod_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_objnod.c</b> <a href="sinfo__rec__objnod_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__psf_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_psf.c</b> <a href="sinfo__rec__psf_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__pupil_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_pupil.c</b> <a href="sinfo__rec__pupil_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__stdstar_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_stdstar.c</b> <a href="sinfo__rec__stdstar_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__rec__wavecal_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_rec_wavecal.c</b> <a href="sinfo__rec__wavecal_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__step__distortion_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_step_distortion.c</b> <a href="sinfo__step__distortion_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__step__jitter_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_step_jitter.c</b> <a href="sinfo__step__jitter_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__step__objnod_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_step_objnod.c</b> <a href="sinfo__step__objnod_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__step__psf_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_step_psf.c</b> <a href="sinfo__step__psf_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__step__stdstar_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_step_stdstar.c</b> <a href="sinfo__step__stdstar_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__bp__mask__add_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_bp_mask_add.c</b> <a href="sinfo__utl__bp__mask__add_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__cube2ima_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_cube2ima.c</b> <a href="recipes_2sinfo__utl__cube2ima_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__cube2spectrum_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_cube2spectrum.c</b> <a href="recipes_2sinfo__utl__cube2spectrum_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__cube__arith_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_cube_arith.c</b> <a href="recipes_2sinfo__utl__cube__arith_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__cube__combine_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_cube_combine.c</b> <a href="recipes_2sinfo__utl__cube__combine_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube__create_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube_create.c</b> <a href="sinfo__utl__cube__create_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__cube__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_cube_test.c</b> <a href="sinfo__utl__cube__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__eff_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_eff.c</b> <a href="sinfo__utl__eff_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__illumcorr_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_illumcorr.c</b> <a href="sinfo__utl__illumcorr_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__ima__arith_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_ima_arith.c</b> <a href="sinfo__utl__ima__arith_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__ima__cube__ks__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_ima_cube_ks_test.c</b> <a href="sinfo__utl__ima__cube__ks__test_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__ima__gauss_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_ima_gauss.c</b> <a href="sinfo__utl__ima__gauss_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__ima__line__corr_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_ima_line_corr.c</b> <a href="sinfo__utl__ima__line__corr_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__line__oh__select_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_line_oh_select.c</b> <a href="sinfo__utl__line__oh__select_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__remove__crh__single_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_remove_crh_single.c</b> <a href="sinfo__utl__remove__crh__single_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__seds_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_seds.c</b> <a href="sinfo__utl__seds_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__skycor_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_skycor.c</b> <a href="sinfo__utl__skycor_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__skymap_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_skymap.c</b> <a href="sinfo__utl__skymap_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_spectrum_divide_by_blackbody.c</b> <a href="recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:recipes_2sinfo__utl__spectrum__wavelength__shift_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>recipes/sinfo_utl_spectrum_wavelength_shift.c</b> <a href="recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__stdstars_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_stdstars.c</b> <a href="sinfo__utl__stdstars_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__table__ex_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_table_ex.c</b> <a href="sinfo__utl__table__ex_8c_source.html">[code]</a></td></tr>
+<tr class="memitem:sinfo__utl__table__test_8c"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>sinfo_utl_table_test.c</b> <a href="sinfo__utl__table__test_8c_source.html">[code]</a></td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
+</body>
+</html>
diff --git a/html/doxygen.css b/html/doxygen.css
index 9ca3caf..8589450 100644
--- a/html/doxygen.css
+++ b/html/doxygen.css
@@ -2,16 +2,22 @@
 
 body, table, div, p, dl {
 	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-	font-size: 12px;
+	font-size: 13px;
+	line-height: 1.3;
 }
 
 /* @group Heading Levels */
 
 h1 {
-	text-align: center;
 	font-size: 150%;
 }
 
+.title {
+	font-size: 150%;
+	font-weight: bold;
+	margin: 10px 2px;
+}
+
 h2 {
 	font-size: 120%;
 }
@@ -20,6 +26,19 @@ h3 {
 	font-size: 100%;
 }
 
+h1, h2, h3, h4, h5, h6 {
+	-webkit-transition: text-shadow 0.5s linear;
+	-moz-transition: text-shadow 0.5s linear;
+	-ms-transition: text-shadow 0.5s linear;
+	-o-transition: text-shadow 0.5s linear;
+	transition: text-shadow 0.5s linear;
+	margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+	text-shadow: 0 0 15px cyan;
+}
+
 dt {
 	font-weight: bold;
 }
@@ -31,7 +50,7 @@ div.multicol {
 	-webkit-column-count: 3;
 }
 
-p.startli, p.startdd {
+p.startli, p.startdd, p.starttd {
 	margin-top: 2px;
 }
 
@@ -43,6 +62,10 @@ p.enddd {
 	margin-bottom: 4px;
 }
 
+p.endtd {
+	margin-bottom: 2px;
+}
+
 /* @end */
 
 caption {
@@ -54,12 +77,15 @@ span.legend {
         text-align: center;
 }
 
+h3.version {
+        font-size: 90%;
+        text-align: center;
+}
+
 div.qindex, div.navtab{
-	background-color: #e8eef2;
-	border: 1px solid #84b0c7;
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
 	text-align: center;
-	margin: 2px;
-	padding: 2px;
 }
 
 div.qindex, div.navpath {
@@ -74,13 +100,13 @@ div.navtab {
 /* @group Link Styling */
 
 a {
-	color: #153788;
+	color: #3D578C;
 	font-weight: normal;
 	text-decoration: none;
 }
 
 .contents a:visited {
-	color: #1b77c5;
+	color: #4665A2;
 }
 
 a:hover {
@@ -93,9 +119,9 @@ a.qindex {
 
 a.qindexHL {
 	font-weight: bold;
-	background-color: #6666cc;
+	background-color: #9CAFD4;
 	color: #ffffff;
-	border: 1px double #9295C2;
+	border: 1px double #869DCA;
 }
 
 .contents a.qindexHL:visited {
@@ -109,10 +135,12 @@ a.el {
 a.elRef {
 }
 
-a.code {
+a.code, a.code:visited {
+	color: #4665A2; 
 }
 
-a.codeRef {
+a.codeRef, a.codeRef:visited {
+	color: #4665A2; 
 }
 
 /* @end */
@@ -121,16 +149,72 @@ dl.el {
 	margin-left: -1cm;
 }
 
-.fragment {
+pre.fragment {
+        border: 1px solid #C4CFE5;
+        background-color: #FBFCFD;
+        padding: 4px 6px;
+        margin: 4px 8px 4px 2px;
+        overflow: auto;
+        word-wrap: break-word;
+        font-size:  9pt;
+        line-height: 125%;
+        font-family: monospace, fixed;
+        font-size: 105%;
+}
+
+div.fragment {
+        padding: 4px;
+        margin: 4px;
+	background-color: #FBFCFD;
+	border: 1px solid #C4CFE5;
+}
+
+div.line {
 	font-family: monospace, fixed;
-	font-size: 105%;
+        font-size: 13px;
+	min-height: 13px;
+	line-height: 1.0;
+	text-wrap: unrestricted;
+	white-space: -moz-pre-wrap; /* Moz */
+	white-space: -pre-wrap;     /* Opera 4-6 */
+	white-space: -o-pre-wrap;   /* Opera 7 */
+	white-space: pre-wrap;      /* CSS3  */
+	word-wrap: break-word;      /* IE 5.5+ */
+	text-indent: -53px;
+	padding-left: 53px;
+	padding-bottom: 0px;
+	margin: 0px;
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
 }
 
-pre.fragment {
-	border: 1px solid #CCCCCC;
-	background-color: #f5f5f5;
-	padding: 4px 6px;
-	margin: 4px 8px 4px 2px;
+div.line.glow {
+	background-color: cyan;
+	box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+	padding-right: 4px;
+	text-align: right;
+	border-right: 2px solid #0F0;
+	background-color: #E8E8E8;
+        white-space: pre;
+}
+span.lineno a {
+	background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+	background-color: #C8C8C8;
 }
 
 div.ah {
@@ -138,13 +222,22 @@ div.ah {
 	font-weight: bold;
 	color: #ffffff;
 	margin-bottom: 3px;
-	margin-top: 3px
+	margin-top: 3px;
+	padding: 0.2em;
+	border: solid thin #333;
+	border-radius: 0.5em;
+	-webkit-border-radius: .5em;
+	-moz-border-radius: .5em;
+	box-shadow: 2px 2px 3px #999;
+	-webkit-box-shadow: 2px 2px 3px #999;
+	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
 }
 
 div.groupHeader {
 	margin-left: 16px;
 	margin-top: 12px;
-	margin-bottom: 6px;
 	font-weight: bold;
 }
 
@@ -154,29 +247,36 @@ div.groupText {
 }
 
 body {
-	background: white;
+	background-color: white;
 	color: black;
-	margin-right: 20px;
-	margin-left: 20px;
+        margin: 0;
+}
+
+div.contents {
+	margin-top: 10px;
+	margin-left: 12px;
+	margin-right: 8px;
 }
 
 td.indexkey {
-	background-color: #e8eef2;
+	background-color: #EBEFF6;
 	font-weight: bold;
-	border: 1px solid #CCCCCC;
+	border: 1px solid #C4CFE5;
 	margin: 2px 0px 2px 0;
 	padding: 2px 10px;
+        white-space: nowrap;
+        vertical-align: top;
 }
 
 td.indexvalue {
-	background-color: #e8eef2;
-	border: 1px solid #CCCCCC;
+	background-color: #EBEFF6;
+	border: 1px solid #C4CFE5;
 	padding: 2px 10px;
 	margin: 2px 0px;
 }
 
 tr.memlist {
-	background-color: #f0f0f0;
+	background-color: #EEF1F7;
 }
 
 p.formulaDsp {
@@ -202,6 +302,11 @@ div.center img {
 	border: 0px;
 }
 
+address.footer {
+	text-align: right;
+	padding-right: 12px;
+}
+
 img.footer {
 	border: 0px;
 	vertical-align: middle;
@@ -253,8 +358,16 @@ span.vhdllogic {
 	color: #ff0000 
 }
 
+blockquote {
+        background-color: #F7F8FB;
+        border-left: 2px solid #9CAFD4;
+        margin: 0 24px 0 4px;
+        padding: 0 12px 0 16px;
+}
+
 /* @end */
 
+/*
 .search {
 	color: #003399;
 	font-weight: bold;
@@ -271,6 +384,7 @@ input.search {
 	font-weight: normal;
 	background-color: #e8eef2;
 }
+*/
 
 td.tiny {
 	font-size: 75%;
@@ -279,26 +393,53 @@ td.tiny {
 .dirtab {
 	padding: 4px;
 	border-collapse: collapse;
-	border: 1px solid #84b0c7;
+	border: 1px solid #A3B4D7;
 }
 
 th.dirtab {
-	background: #e8eef2;
+	background: #EBEFF6;
 	font-weight: bold;
 }
 
 hr {
-	height: 0;
+	height: 0px;
 	border: none;
-	border-top: 1px solid #666;
+	border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+	height: 1px;
 }
 
 /* @group Member Descriptions */
 
+table.memberdecls {
+	border-spacing: 0px;
+	padding: 0px;
+}
+
+.memberdecls td {
+	-webkit-transition-property: background-color, box-shadow;
+	-webkit-transition-duration: 0.5s;
+	-moz-transition-property: background-color, box-shadow;
+	-moz-transition-duration: 0.5s;
+	-ms-transition-property: background-color, box-shadow;
+	-ms-transition-duration: 0.5s;
+	-o-transition-property: background-color, box-shadow;
+	-o-transition-duration: 0.5s;
+	transition-property: background-color, box-shadow;
+	transition-duration: 0.5s;
+}
+
+.memberdecls td.glow {
+	background-color: cyan;
+	box-shadow: 0 0 15px cyan;
+}
+
 .mdescLeft, .mdescRight,
 .memItemLeft, .memItemRight,
 .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #FAFAFA;
+	background-color: #F9FAFC;
 	border: none;
 	margin: 4px;
 	padding: 1px 0 0 8px;
@@ -310,15 +451,19 @@ hr {
 }
 
 .memItemLeft, .memItemRight, .memTemplParams {
-	border-top: 1px solid #ccc;
+	border-top: 1px solid #C4CFE5;
 }
 
 .memItemLeft, .memTemplItemLeft {
         white-space: nowrap;
 }
 
+.memItemRight {
+	width: 100%;
+}
+
 .memTemplParams {
-	color: #606060;
+	color: #4665A2;
         white-space: nowrap;
 }
 
@@ -330,57 +475,107 @@ hr {
 
 .memtemplate {
 	font-size: 80%;
-	color: #606060;
+	color: #4665A2;
 	font-weight: normal;
-	margin-left: 3px;
+	margin-left: 9px;
 }
 
 .memnav {
-	background-color: #e8eef2;
-	border: 1px solid #84b0c7;
+	background-color: #EBEFF6;
+	border: 1px solid #A3B4D7;
 	text-align: center;
 	margin: 2px;
 	margin-right: 15px;
 	padding: 2px;
 }
 
+.mempage {
+	width: 100%;
+}
+
 .memitem {
 	padding: 0;
 	margin-bottom: 10px;
+	margin-right: 5px;
+        -webkit-transition: box-shadow 0.5s linear;
+        -moz-transition: box-shadow 0.5s linear;
+        -ms-transition: box-shadow 0.5s linear;
+        -o-transition: box-shadow 0.5s linear;
+        transition: box-shadow 0.5s linear;
+        display: table !important;
+        width: 100%;
 }
 
-.memname {
-	white-space: nowrap;
-	font-weight: bold;
+.memitem.glow {
+         box-shadow: 0 0 15px cyan;
 }
 
-.memproto, .memdoc {
-	border: 1px solid #84b0c7;	
-}
-
-.memproto {
-	padding: 0;
-	background-color: #d5e1e8;
-	font-weight: bold;
-	-webkit-border-top-left-radius: 8px;
-	-webkit-border-top-right-radius: 8px;
+.memname {
+        font-weight: bold;
+        margin-left: 6px;
+}
+
+.memname td {
+	vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+        border-top: 1px solid #A8B8D9;
+        border-left: 1px solid #A8B8D9;
+        border-right: 1px solid #A8B8D9;
+        padding: 6px 0px 6px 0px;
+        color: #253555;
+        font-weight: bold;
+        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        /* opera specific markup */
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        /* firefox specific markup */
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        -moz-border-radius-topright: 4px;
+        -moz-border-radius-topleft: 4px;
+        /* webkit specific markup */
         -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-	-moz-border-radius-topleft: 8px;
-	-moz-border-radius-topright: 8px;
+        -webkit-border-top-right-radius: 4px;
+        -webkit-border-top-left-radius: 4px;
+
+}
+
+.memdoc, dl.reflist dd {
+        border-bottom: 1px solid #A8B8D9;      
+        border-left: 1px solid #A8B8D9;      
+        border-right: 1px solid #A8B8D9; 
+        padding: 6px 10px 2px 10px;
+        background-color: #FBFCFD;
+        border-top-width: 0;
+        background-image:url('nav_g.png');
+        background-repeat:repeat-x;
+        background-color: #FFFFFF;
+        /* opera specific markup */
+        border-bottom-left-radius: 4px;
+        border-bottom-right-radius: 4px;
+        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+        /* firefox specific markup */
+        -moz-border-radius-bottomleft: 4px;
+        -moz-border-radius-bottomright: 4px;
         -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+        /* webkit specific markup */
+        -webkit-border-bottom-left-radius: 4px;
+        -webkit-border-bottom-right-radius: 4px;
+        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
 
+dl.reflist dt {
+        padding: 5px;
 }
 
-.memdoc {
-	padding: 2px 5px;
-	background-color: #eef3f5;
-	border-top-width: 0;
-	-webkit-border-bottom-left-radius: 8px;
-	-webkit-border-bottom-right-radius: 8px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-	-moz-border-radius-bottomleft: 8px;
-	-moz-border-radius-bottomright: 8px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+dl.reflist dd {
+        margin: 0px 0px 10px 0px;
+        padding: 5px;
 }
 
 .paramkey {
@@ -398,101 +593,564 @@ hr {
 .paramname em {
 	font-style: normal;
 }
+.paramname code {
+        line-height: 14px;
+}
 
-/* @end */
+.params, .retval, .exception, .tparams {
+        margin-left: 0px;
+        padding-left: 0px;
+}       
 
-/* @group Directory (tree) */
+.params .paramname, .retval .paramname {
+        font-weight: bold;
+        vertical-align: top;
+}
+        
+.params .paramtype {
+        font-style: italic;
+        vertical-align: top;
+}       
+        
+.params .paramdir {
+        font-family: "courier new",courier,monospace;
+        vertical-align: top;
+}
 
-/* for the tree view */
+table.mlabels {
+	border-spacing: 0px;
+}
 
-.ftvtree {
-	font-family: sans-serif;
-	margin: 0.5em;
+td.mlabels-left {
+	width: 100%;
+	padding: 0px;
 }
 
-/* these are for tree view when used as main index */
+td.mlabels-right {
+	vertical-align: bottom;
+	padding: 0px;
+	white-space: nowrap;
+}
 
-.directory {
-	font-size: 9pt;
-	font-weight: bold;
+span.mlabels {
+        margin-left: 8px;
 }
 
-.directory h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
+span.mlabel {
+        background-color: #728DC1;
+        border-top:1px solid #5373B4;
+        border-left:1px solid #5373B4;
+        border-right:1px solid #C4CFE5;
+        border-bottom:1px solid #C4CFE5;
+	text-shadow: none;
+        color: white;
+        margin-right: 4px;
+        padding: 2px 3px;
+        border-radius: 3px;
+        font-size: 7pt;
+	white-space: nowrap;
 }
 
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice.  Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
 
-/*
-.directory h3.swap {
-	height: 61px;
-	background-repeat: no-repeat;
-	background-image: url("yourimage.gif");
+
+/* @end */
+
+/* these are for tree view when not used as main index */
+
+div.directory {
+        margin: 10px 0px;
+        border-top: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        width: 100%;
 }
-.directory h3.swap span {
-	display: none;
+
+.directory table {
+        border-collapse:collapse;
 }
-*/
 
-.directory > h3 {
-	margin-top: 0;
+.directory td {
+        margin: 0px;
+        padding: 0px;
+	vertical-align: top;
 }
 
-.directory p {
-	margin: 0px;
-	white-space: nowrap;
+.directory td.entry {
+        white-space: nowrap;
+        padding-right: 6px;
 }
 
-.directory div {
-	display: none;
-	margin: 0px;
+.directory td.entry a {
+        outline:none;
+}
+
+.directory td.entry a img {
+        border: none;
+}
+
+.directory td.desc {
+        width: 100%;
+        padding-left: 6px;
+	padding-right: 6px;
+	border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+	padding-left: 6px;
+	background-color: #F7F8FB;
 }
 
 .directory img {
 	vertical-align: -30%;
 }
 
-/* these are for tree view when not used as main index */
+.directory .levels {
+        white-space: nowrap;
+        width: 100%;
+        text-align: right;
+        font-size: 9pt;
+}
 
-.directory-alt {
-	font-size: 100%;
-	font-weight: bold;
+.directory .levels span {
+        cursor: pointer;
+        padding-left: 2px;
+        padding-right: 2px;
+	color: #3D578C;
 }
 
-.directory-alt h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
+div.dynheader {
+        margin-top: 8px;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+address {
+	font-style: normal;
+	color: #2A3D61;
 }
 
-.directory-alt > h3 {
-	margin-top: 0;
+table.doxtable {
+	border-collapse:collapse;
+        margin-top: 4px;
+        margin-bottom: 4px;
 }
 
-.directory-alt p {
-	margin: 0px;
+table.doxtable td, table.doxtable th {
+	border: 1px solid #2D4068;
+	padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+	background-color: #374F7F;
+	color: #FFFFFF;
+	font-size: 110%;
+	padding-bottom: 4px;
+	padding-top: 5px;
+}
+
+table.fieldtable {
+        width: 100%;
+        margin-bottom: 10px;
+        border: 1px solid #A8B8D9;
+        border-spacing: 0px;
+        -moz-border-radius: 4px;
+        -webkit-border-radius: 4px;
+        border-radius: 4px;
+        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+        padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+        white-space: nowrap;
+        border-right: 1px solid #A8B8D9;
+        border-bottom: 1px solid #A8B8D9;
+        vertical-align: top;
+}
+
+.fieldtable td.fielddoc {
+        border-bottom: 1px solid #A8B8D9;
+        width: 100%;
+}
+
+.fieldtable tr:last-child td {
+        border-bottom: none;
+}
+
+.fieldtable th {
+        background-image:url('nav_f.png');
+        background-repeat:repeat-x;
+        background-color: #E2E8F2;
+        font-size: 90%;
+        color: #253555;
+        padding-bottom: 4px;
+        padding-top: 5px;
+        text-align:left;
+        -moz-border-radius-topleft: 4px;
+        -moz-border-radius-topright: 4px;
+        -webkit-border-top-left-radius: 4px;
+        -webkit-border-top-right-radius: 4px;
+        border-top-left-radius: 4px;
+        border-top-right-radius: 4px;
+        border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+	top: 0px;
+	left: 10px;
+	height: 36px;
+	background-image: url('tab_b.png');
+	z-index: 101;
+	overflow: hidden;
+	font-size: 13px;
+}
+
+.navpath ul
+{
+	font-size: 11px;
+	background-image:url('tab_b.png');
+	background-repeat:repeat-x;
+	height:30px;
+	line-height:30px;
+	color:#8AA0CC;
+	border:solid 1px #C2CDE4;
+	overflow:hidden;
+	margin:0px;
+	padding:0px;
+}
+
+.navpath li
+{
+	list-style-type:none;
+	float:left;
+	padding-left:10px;
+	padding-right:15px;
+	background-image:url('bc_s.png');
+	background-repeat:no-repeat;
+	background-position:right;
+	color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+	height:32px;
+	display:block;
+	text-decoration: none;
+	outline: none;
+}
+
+.navpath li.navelem a:hover
+{
+	color:#6884BD;
+}
+
+.navpath li.footer
+{
+        list-style-type:none;
+        float:right;
+        padding-left:10px;
+        padding-right:15px;
+        background-image:none;
+        background-repeat:no-repeat;
+        background-position:right;
+        color:#364D7C;
+        font-size: 8pt;
+}
+
+
+div.summary
+{
+	float: right;
+	font-size: 8pt;
+	padding-right: 5px;
+	width: 50%;
+	text-align: right;
+}       
+
+div.summary a
+{
 	white-space: nowrap;
 }
 
-.directory-alt div {
-	display: none;
+div.ingroups
+{
+	font-size: 8pt;
+	width: 50%;
+	text-align: left;
+}
+
+div.ingroups a
+{
+	white-space: nowrap;
+}
+
+div.header
+{
+        background-image:url('nav_h.png');
+        background-repeat:repeat-x;
+	background-color: #F9FAFC;
+	margin:  0px;
+	border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+	padding: 5px 5px 5px 7px;
+}
+
+dl
+{
+        padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+	margin-left: 0px;
+	padding-left: 0px;
+}
+
+dl.note
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00D000;
+}
+
+dl.deprecated
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #505050;
+}
+
+dl.todo
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #00C0E0;
+}
+
+dl.test
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #3030E0;
+}
+
+dl.bug
+{
+        margin-left:-7px;
+        padding-left: 3px;
+        border-left:4px solid;
+        border-color: #C08050;
+}
+
+dl.section dd {
+	margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+	text-align: center;
+	vertical-align: bottom;
+	border-collapse: separate;
+}
+ 
+#projectlogo img
+{ 
+	border: 0px none;
+}
+ 
+#projectname
+{
+	font: 300% Tahoma, Arial,sans-serif;
 	margin: 0px;
+	padding: 2px 0px;
+}
+    
+#projectbrief
+{
+	font: 120% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
 }
 
-.directory-alt img {
-	vertical-align: -30%;
+#projectnumber
+{
+	font: 50% Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 0px;
 }
 
-/* @end */
+#titlearea
+{
+	padding: 0px;
+	margin: 0px;
+	width: 100%;
+	border-bottom: 1px solid #5373B4;
+}
 
-address {
-	font-style: normal;
-	color: #333;
+.image
+{
+        text-align: center;
+}
+
+.dotgraph
+{
+        text-align: center;
+}
+
+.mscgraph
+{
+        text-align: center;
+}
+
+.caption
+{
+	font-weight: bold;
+}
+
+div.zoom
+{
+	border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+        margin-bottom:50px;
+}
+
+dl.citelist dt {
+        color:#334975;
+        float:left;
+        font-weight:bold;
+        margin-right:10px;
+        padding:5px;
+}
+
+dl.citelist dd {
+        margin:2px 0;
+        padding:5px 0;
 }
+
+div.toc {
+        padding: 14px 25px;
+        background-color: #F4F6FA;
+        border: 1px solid #D8DFEE;
+        border-radius: 7px 7px 7px 7px;
+        float: right;
+        height: auto;
+        margin: 0 20px 10px 10px;
+        width: 200px;
+}
+
+div.toc li {
+        background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+        margin-top: 5px;
+        padding-left: 10px;
+        padding-top: 2px;
+}
+
+div.toc h3 {
+        font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+	color: #4665A2;
+        border-bottom: 0 none;
+        margin: 0;
+}
+
+div.toc ul {
+        list-style: none outside none;
+        border: medium none;
+        padding: 0px;
+}       
+
+div.toc li.level1 {
+        margin-left: 0px;
+}
+
+div.toc li.level2 {
+        margin-left: 15px;
+}
+
+div.toc li.level3 {
+        margin-left: 30px;
+}
+
+div.toc li.level4 {
+        margin-left: 45px;
+}
+
+.inherit_header {
+        font-weight: bold;
+        color: gray;
+        cursor: pointer;
+	-webkit-touch-callout: none;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.inherit_header td {
+        padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+        display: none;
+}
+
+tr.heading h2 {
+        margin-top: 12px;
+        margin-bottom: 4px;
+}
+
+ at media print
+{
+  #top { display: none; }
+  #side-nav { display: none; }
+  #nav-path { display: none; }
+  body { overflow:visible; }
+  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+  .summary { display: none; }
+  .memitem { page-break-inside: avoid; }
+  #doc-content
+  {
+    margin-left:0 !important;
+    height:auto !important;
+    width:auto !important;
+    overflow:inherit;
+    display:inline;
+  }
+}
+
diff --git a/html/doxygen.png b/html/doxygen.png
index f0a274b..3ff17d8 100644
Binary files a/html/doxygen.png and b/html/doxygen.png differ
diff --git a/html/dynsections.js b/html/dynsections.js
new file mode 100644
index 0000000..116542f
--- /dev/null
+++ b/html/dynsections.js
@@ -0,0 +1,78 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ } 
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function(){ 
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.attr('src','ftv2folderopen.png');
+      a.attr('src','ftv2mnode.png');
+      $(this).show();
+    } else if (l==level+1) {
+      i.attr('src','ftv2folderclosed.png');
+      a.attr('src','ftv2pnode.png');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+function toggleFolder(id) 
+{
+  var n = $('[id^=row_'+id+']');
+  var i = $('[id^=img_'+id+']');
+  var a = $('[id^=arr_'+id+']');
+  var c = n.slice(1);
+  if (c.filter(':first').is(':visible')===true) {
+    i.attr('src','ftv2folderclosed.png');
+    a.attr('src','ftv2pnode.png');
+    c.hide();
+  } else {
+    i.attr('src','ftv2folderopen.png');
+    a.attr('src','ftv2mnode.png');
+    c.show();
+  }
+  updateStripes();
+}
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+
diff --git a/html/files.html b/html/files.html
index dc5bc78..68d3c72 100644
--- a/html/files.html
+++ b/html/files.html
@@ -2,395 +2,423 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>SINFONI Pipeline Reference Manual: File Index</title>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>SINFONI Pipeline Reference Manual: File List</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>File List</h1>Here is a list of all documented files with brief descriptions:<table>
-  <tr><td class="indexkey"><b>irplib_calib.c</b> <a href="irplib__calib_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_calib.h</b> <a href="irplib__calib_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_cat.c</b> <a href="irplib__cat_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_cat.h</b> <a href="irplib__cat_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_distortion.c</b> <a href="irplib__distortion_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_distortion.h</b> <a href="irplib__distortion_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_flat.c</b> <a href="irplib__flat_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_flat.h</b> <a href="irplib__flat_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_framelist.c</b> <a href="irplib__framelist_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_framelist.h</b> <a href="irplib__framelist_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_hist.c</b> <a href="irplib__hist_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_hist.h</b> <a href="irplib__hist_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_ksigma_clip.c</b> <a href="irplib__ksigma__clip_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_ksigma_clip.h</b> <a href="irplib__ksigma__clip_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_ksigma_clip_body.h</b> <a href="irplib__ksigma__clip__body_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_match_cats.c</b> <a href="irplib__match__cats_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_match_cats.h</b> <a href="irplib__match__cats_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_mkmaster.c</b> <a href="irplib__mkmaster_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_mkmaster.h</b> <a href="irplib__mkmaster_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_oddeven.c</b> <a href="irplib__oddeven_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_oddeven.h</b> <a href="irplib__oddeven_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_plugin.c</b> <a href="irplib__plugin_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_plugin.h</b> <a href="irplib__plugin_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_polynomial.c</b> <a href="irplib__polynomial_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_polynomial.h</b> <a href="irplib__polynomial_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_ppm.c</b> <a href="irplib__ppm_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_ppm.h</b> <a href="irplib__ppm_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_slitpos.c</b> <a href="irplib__slitpos_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_slitpos.h</b> <a href="irplib__slitpos_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_spectrum.c</b> <a href="irplib__spectrum_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_spectrum.h</b> <a href="irplib__spectrum_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_stdstar.c</b> <a href="irplib__stdstar_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_stdstar.h</b> <a href="irplib__stdstar_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_strehl.c</b> <a href="irplib__strehl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_strehl.h</b> <a href="irplib__strehl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_utils.c</b> <a href="irplib__utils_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_utils.h</b> <a href="irplib__utils_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wavecal.c</b> <a href="irplib__wavecal_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wavecal.h</b> <a href="irplib__wavecal_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wavecal_impl.h</b> <a href="irplib__wavecal__impl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wcs.c</b> <a href="irplib__wcs_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wcs.h</b> <a href="irplib__wcs_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wlxcorr.c</b> <a href="irplib__wlxcorr_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>irplib_wlxcorr.h</b> <a href="irplib__wlxcorr_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_absolute.c</b> <a href="sinfo__absolute_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_absolute.h</b> <a href="sinfo__absolute_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_atmo_disp.c</b> <a href="sinfo__atmo__disp_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_atmo_disp.h</b> <a href="sinfo__atmo__disp_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bad_cfg.c</b> <a href="sinfo__bad__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bad_cfg.h</b> <a href="sinfo__bad__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bad_ini.h</b> <a href="sinfo__bad__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_baddist_ini_by_cpl.c</b> <a href="sinfo__baddist__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_baddist_ini_by_cpl.h</b> <a href="sinfo__baddist__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badnorm_ini_by_cpl.c</b> <a href="sinfo__badnorm__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badnorm_ini_by_cpl.h</b> <a href="sinfo__badnorm__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badsky_cfg.c</b> <a href="sinfo__badsky__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badsky_cfg.h</b> <a href="sinfo__badsky__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badsky_ini_by_cpl.c</b> <a href="sinfo__badsky__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_badsky_ini_by_cpl.h</b> <a href="sinfo__badsky__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_balance.c</b> <a href="sinfo__balance_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_baryvel.c</b> <a href="sinfo__baryvel_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_baryvel.h</b> <a href="sinfo__baryvel_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_boltzmann.c</b> <a href="sinfo__boltzmann_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_config.c</b> <a href="sinfo__bp__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_config.h</b> <a href="sinfo__bp__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_dist_config.c</b> <a href="sinfo__bp__dist__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_dist_config.h</b> <a href="sinfo__bp__dist__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_lin.c</b> <a href="sinfo__bp__lin_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_lin.h</b> <a href="sinfo__bp__lin_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_lin_config.c</b> <a href="sinfo__bp__lin__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_lin_config.h</b> <a href="sinfo__bp__lin__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_noise.c</b> <a href="sinfo__bp__noise_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_noise.h</b> <a href="sinfo__bp__noise_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_noise_config.c</b> <a href="sinfo__bp__noise__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_noise_config.h</b> <a href="sinfo__bp__noise__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_norm.c</b> <a href="sinfo__bp__norm_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_norm.h</b> <a href="sinfo__bp__norm_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_norm_config.c</b> <a href="sinfo__bp__norm__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_norm_config.h</b> <a href="sinfo__bp__norm__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_sky_config.c</b> <a href="sinfo__bp__sky__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_bp_sky_config.h</b> <a href="sinfo__bp__sky__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_coltilt.c</b> <a href="sinfo__coltilt_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_coltilt.h</b> <a href="sinfo__coltilt_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_companion.c</b> <a href="sinfo__companion_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_compare_tags.h</b> <a href="sinfo__compare__tags_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_cpl_size.h</b> <a href="sinfo__cpl__size_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_cube_construct.c</b> <a href="sinfo__cube__construct_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_cube_construct.h</b> <a href="sinfo__cube__construct_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_cubecreate_ini.h</b> <a href="sinfo__cubecreate__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_cfg.c</b> <a href="sinfo__dark__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_cfg.h</b> <a href="sinfo__dark__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_config.c</b> <a href="sinfo__dark__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_config.h</b> <a href="sinfo__dark__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_ini.h</b> <a href="sinfo__dark__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_ini_by_cpl.c</b> <a href="sinfo__dark__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dark_ini_by_cpl.h</b> <a href="sinfo__dark__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_define_opt.h</b> <a href="sinfo__define__opt_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin.c</b> <a href="sinfo__detlin_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin.h</b> <a href="sinfo__detlin_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin_cfg.c</b> <a href="sinfo__detlin__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin_cfg.h</b> <a href="sinfo__detlin__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin_ini.h</b> <a href="sinfo__detlin__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin_ini_by_cpl.c</b> <a href="sinfo__detlin__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detlin_ini_by_cpl.h</b> <a href="sinfo__detlin__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detnoise_cfg.c</b> <a href="sinfo__detnoise__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detnoise_cfg.h</b> <a href="sinfo__detnoise__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detnoise_ini.h</b> <a href="sinfo__detnoise__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detnoise_ini_by_cpl.c</b> <a href="sinfo__detnoise__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_detnoise_ini_by_cpl.h</b> <a href="sinfo__detnoise__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dfs.c</b> <a href="sinfo__dfs_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dfs.h</b> <a href="sinfo__dfs_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_distortion.c</b> <a href="sinfo__distortion_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_distortion.h</b> <a href="sinfo__distortion_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_distortion_config.c</b> <a href="sinfo__distortion__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_distortion_config.h</b> <a href="sinfo__distortion__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dump.c</b> <a href="sinfo__dump_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_dump.h</b> <a href="sinfo__dump_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_error.h</b> <a href="sinfo__error_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fft_base.c</b> <a href="sinfo__fft__base_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fft_base.h</b> <a href="sinfo__fft__base_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_file_handling.c</b> <a href="sinfo__file__handling_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_file_handling.h</b> <a href="sinfo__file__handling_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_finddist_cfg.c</b> <a href="sinfo__finddist__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_finddist_cfg.h</b> <a href="sinfo__finddist__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_finddist_ini.h</b> <a href="sinfo__finddist__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_finddist_ini_by_cpl.c</b> <a href="sinfo__finddist__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_finddist_ini_by_cpl.h</b> <a href="sinfo__finddist__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fit.c</b> <a href="sinfo__fit_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fit.h</b> <a href="sinfo__fit_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fit_curve.c</b> <a href="sinfo__fit__curve_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_fit_curve.h</b> <a href="sinfo__fit__curve_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_cfg.c</b> <a href="sinfo__flat__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_cfg.h</b> <a href="sinfo__flat__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_ini.c</b> <a href="sinfo__flat__ini_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_ini.h</b> <a href="sinfo__flat__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_ini_by_cpl.c</b> <a href="sinfo__flat__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_flat_ini_by_cpl.h</b> <a href="sinfo__flat__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus.c</b> <a href="sinfo__focus_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus.h</b> <a href="sinfo__focus_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_cfg.c</b> <a href="sinfo__focus__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_cfg.h</b> <a href="sinfo__focus__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_determination_config.c</b> <a href="sinfo__focus__determination__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_determination_config.h</b> <a href="sinfo__focus__determination__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_ini.h</b> <a href="sinfo__focus__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_ini_by_cpl.c</b> <a href="sinfo__focus__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_focus_ini_by_cpl.h</b> <a href="sinfo__focus__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_function_1d.c</b> <a href="sinfo__function__1d_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_function_1d.h</b> <a href="sinfo__function__1d_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_functions.h</b> <a href="sinfo__functions_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_general_config.c</b> <a href="sinfo__general__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_general_config.h</b> <a href="sinfo__general__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_globals.c</b> <a href="sinfo__globals_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_globals.h</b> <a href="sinfo__globals_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_hidden.h</b> <a href="sinfo__hidden_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_image_ops.c</b> <a href="sinfo__image__ops_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_image_ops.h</b> <a href="sinfo__image__ops_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_img_noise.c</b> <a href="sinfo__img__noise_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ipow.c</b> <a href="sinfo__ipow_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ipow.h</b> <a href="sinfo__ipow_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_irplib_cpl_wrp.h</b> <a href="sinfo__irplib__cpl__wrp_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_key_names.h</b> <a href="sinfo__key__names_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_cfg.c</b> <a href="sinfo__lamp__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_cfg.h</b> <a href="sinfo__lamp__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_flats_config.c</b> <a href="sinfo__lamp__flats__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_flats_config.h</b> <a href="sinfo__lamp__flats__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_flats_hidden_config.c</b> <a href="sinfo__lamp__flats__hidden__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_flats_hidden_config.h</b> <a href="sinfo__lamp__flats__hidden__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_ini.c</b> <a href="sinfo__lamp__ini_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_ini.h</b> <a href="sinfo__lamp__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_ini_by_cpl.c</b> <a href="sinfo__lamp__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_ini_by_cpl.h</b> <a href="sinfo__lamp__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_spec_config.c</b> <a href="sinfo__lamp__spec__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_lamp_spec_config.h</b> <a href="sinfo__lamp__spec__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_local_types.h</b> <a href="sinfo__local__types_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_matrix.c</b> <a href="sinfo__matrix_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_matrix.h</b> <a href="sinfo__matrix_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_median.c</b> <a href="sinfo__median_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_median.h</b> <a href="sinfo__median_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_merge.c</b> <a href="sinfo__merge_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_merge.h</b> <a href="sinfo__merge_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_msg.c</b> <a href="sinfo__msg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_msg.h</b> <a href="sinfo__msg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_add_bp_map.c</b> <a href="sinfo__new__add__bp__map_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_add_bp_map.h</b> <a href="sinfo__new__add__bp__map_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_bezier.c</b> <a href="sinfo__new__bezier_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_bezier.h</b> <a href="sinfo__new__bezier_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cube_ops.c</b> <a href="sinfo__new__cube__ops_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cube_ops.h</b> <a href="sinfo__new__cube__ops_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cubes_build.c</b> <a href="sinfo__new__cubes__build_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cubes_build.h</b> <a href="sinfo__new__cubes__build_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cubes_coadd.c</b> <a href="sinfo__new__cubes__coadd_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_cubes_coadd.h</b> <a href="sinfo__new__cubes__coadd_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_dark.c</b> <a href="sinfo__new__dark_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_dark.h</b> <a href="sinfo__new__dark_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_find_distortions.c</b> <a href="sinfo__new__find__distortions_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_find_distortions.h</b> <a href="sinfo__new__find__distortions_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_lamp_flats.c</b> <a href="sinfo__new__lamp__flats_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_lamp_flats.h</b> <a href="sinfo__new__lamp__flats_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_nst.c</b> <a href="sinfo__new__nst_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_nst.h</b> <a href="sinfo__new__nst_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_objnod.c</b> <a href="sinfo__new__objnod_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_objnod.h</b> <a href="sinfo__new__objnod_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_prepare_stacked_frames.c</b> <a href="sinfo__new__prepare__stacked__frames_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_prepare_stacked_frames.h</b> <a href="sinfo__new__prepare__stacked__frames_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_psf.c</b> <a href="sinfo__new__psf_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_psf.h</b> <a href="sinfo__new__psf_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_resampling.c</b> <a href="sinfo__new__resampling_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_resampling.h</b> <a href="sinfo__new__resampling_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_slit_pos.c</b> <a href="sinfo__new__slit__pos_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_slit_pos.h</b> <a href="sinfo__new__slit__pos_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_stdstar.c</b> <a href="sinfo__new__stdstar_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_stdstar.h</b> <a href="sinfo__new__stdstar_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_wave_cal_slit2.c</b> <a href="sinfo__new__wave__cal__slit2_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_new_wave_cal_slit2.h</b> <a href="sinfo__new__wave__cal__slit2_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_north_south_test_config.c</b> <a href="sinfo__north__south__test__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_north_south_test_config.h</b> <a href="sinfo__north__south__test__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ns_cfg.c</b> <a href="sinfo__ns__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ns_cfg.h</b> <a href="sinfo__ns__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ns_ini.h</b> <a href="sinfo__ns__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ns_ini_by_cpl.c</b> <a href="sinfo__ns__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ns_ini_by_cpl.h</b> <a href="sinfo__ns__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_object_cfg.c</b> <a href="sinfo__object__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_object_cfg.h</b> <a href="sinfo__object__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_object_ini.h</b> <a href="sinfo__object__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objnod_config.c</b> <a href="sinfo__objnod__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objnod_config.h</b> <a href="sinfo__objnod__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objnod_ini_by_cpl.c</b> <a href="sinfo__objnod__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objnod_ini_by_cpl.h</b> <a href="sinfo__objnod__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objspider_config.c</b> <a href="sinfo__objspider__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objspider_config.h</b> <a href="sinfo__objspider__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objspider_ini_by_cpl.c</b> <a href="sinfo__objspider__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_objspider_ini_by_cpl.h</b> <a href="sinfo__objspider__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pfits.c</b> <a href="sinfo__pfits_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pfits.h</b> <a href="sinfo__pfits_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pixel_handling.c</b> <a href="sinfo__pixel__handling_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pixel_handling.h</b> <a href="sinfo__pixel__handling_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_poly2d.c</b> <a href="sinfo__poly2d_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_poly2d.h</b> <a href="sinfo__poly2d_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_prepare_stacked_frames_config.c</b> <a href="sinfo__prepare__stacked__frames__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_prepare_stacked_frames_config.h</b> <a href="sinfo__prepare__stacked__frames__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pro_save.c</b> <a href="sinfo__pro__save_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pro_save.h</b> <a href="sinfo__pro__save_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_pro_types.h</b> <a href="sinfo__pro__types_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_product_config.c</b> <a href="sinfo__product__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_product_config.h</b> <a href="sinfo__product__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_cfg.c</b> <a href="sinfo__psf__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_cfg.h</b> <a href="sinfo__psf__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_config.c</b> <a href="sinfo__psf__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_config.h</b> <a href="sinfo__psf__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_ini.h</b> <a href="sinfo__psf__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_ini_by_cpl.c</b> <a href="sinfo__psf__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_psf_ini_by_cpl.h</b> <a href="sinfo__psf__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_qr.c</b> <a href="sinfo__qr_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_raw_types.h</b> <a href="sinfo__raw__types_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_detlin.c</b> <a href="sinfo__rec__detlin_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_distortion.c</b> <a href="sinfo__rec__distortion_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_jitter.c</b> <a href="sinfo__rec__jitter_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_lingain.c</b> <a href="sinfo__rec__lingain_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_mdark.c</b> <a href="sinfo__rec__mdark_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_mdark_detmon.c</b> <a href="sinfo__rec__mdark__detmon_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_mflat.c</b> <a href="sinfo__rec__mflat_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_objnod.c</b> <a href="sinfo__rec__objnod_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_psf.c</b> <a href="sinfo__rec__psf_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_pupil.c</b> <a href="sinfo__rec__pupil_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_stdstar.c</b> <a href="sinfo__rec__stdstar_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_utils.c</b> <a href="sinfo__rec__utils_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_utils.h</b> <a href="sinfo__rec__utils_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_rec_wavecal.c</b> <a href="sinfo__rec__wavecal_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_recipes.c</b> <a href="sinfo__recipes_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_recipes.h</b> <a href="sinfo__recipes_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_ref_types.h</b> <a href="sinfo__ref__types_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_remove_crh_single.c</b> <a href="sinfo__remove__crh__single_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_remove_crh_single.h</b> <a href="sinfo__remove__crh__single_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_resampling.c</b> <a href="sinfo__resampling_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_resampling.h</b> <a href="sinfo__resampling_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_shift_images.c</b> <a href="sinfo__shift__images_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_shift_images.h</b> <a href="sinfo__shift__images_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_skycor.c</b> <a href="sinfo__skycor_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_skycor.h</b> <a href="sinfo__skycor_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_skycor_config.c</b> <a href="sinfo__skycor__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_skycor_config.h</b> <a href="sinfo__skycor__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_solve_poly_root.c</b> <a href="sinfo__solve__poly__root_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_solve_poly_root.h</b> <a href="sinfo__solve__poly__root_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_spectrum_ops.c</b> <a href="sinfo__spectrum__ops_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_spectrum_ops.h</b> <a href="sinfo__spectrum__ops_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_spiffi_types.h</b> <a href="sinfo__spiffi__types_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stack_cfg.c</b> <a href="sinfo__stack__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stack_cfg.h</b> <a href="sinfo__stack__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stack_ini.h</b> <a href="sinfo__stack__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stack_ini_by_cpl.c</b> <a href="sinfo__stack__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stack_ini_by_cpl.h</b> <a href="sinfo__stack__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stacked_hidden_config.c</b> <a href="sinfo__stacked__hidden__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_stacked_hidden_config.h</b> <a href="sinfo__stacked__hidden__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standard_star_config.c</b> <a href="sinfo__standard__star__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standard_star_config.h</b> <a href="sinfo__standard__star__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standstar_cfg.c</b> <a href="sinfo__standstar__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standstar_cfg.h</b> <a href="sinfo__standstar__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standstar_ini.h</b> <a href="sinfo__standstar__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standstar_ini_by_cpl.c</b> <a href="sinfo__standstar__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_standstar_ini_by_cpl.h</b> <a href="sinfo__standstar__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_star_index.c</b> <a href="sinfo__star__index_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_star_index.h</b> <a href="sinfo__star__index_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_step_distortion.c</b> <a href="sinfo__step__distortion_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_step_jitter.c</b> <a href="sinfo__step__jitter_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_step_objnod.c</b> <a href="sinfo__step__objnod_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_step_psf.c</b> <a href="sinfo__step__psf_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_step_stdstar.c</b> <a href="sinfo__step__stdstar_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_svd.c</b> <a href="sinfo__svd_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_svd.h</b> <a href="sinfo__svd_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tilt_cfg.c</b> <a href="sinfo__tilt__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tilt_cfg.h</b> <a href="sinfo__tilt__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tilt_ini.h</b> <a href="sinfo__tilt__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_time.c</b> <a href="sinfo__time_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_time.h</b> <a href="sinfo__time_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tpl_dfs.c</b> <a href="sinfo__tpl__dfs_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tpl_dfs.h</b> <a href="sinfo__tpl__dfs_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tpl_utils.c</b> <a href="sinfo__tpl__utils_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_tpl_utils.h</b> <a href="sinfo__tpl__utils_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utilities.c</b> <a href="sinfo__utilities_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utilities.h</b> <a href="sinfo__utilities_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utilities_scired.c</b> <a href="sinfo__utilities__scired_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utilities_scired.h</b> <a href="sinfo__utilities__scired_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utils.c</b> <a href="sinfo__utils_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utils.h</b> <a href="sinfo__utils_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utils_wrappers.c</b> <a href="sinfo__utils__wrappers_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utils_wrappers.h</b> <a href="sinfo__utils__wrappers_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_bp_mask_add.c</b> <a href="sinfo__utl__bp__mask__add_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_cube2ima.c</b> <a href="sinfoni_2sinfo__utl__cube2ima_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_cube2ima.c</b> <a href="recipes_2sinfo__utl__cube2ima_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube2ima.h</b> <a href="sinfo__utl__cube2ima_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_cube2spectrum.c</b> <a href="sinfoni_2sinfo__utl__cube2spectrum_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_cube2spectrum.c</b> <a href="recipes_2sinfo__utl__cube2spectrum_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube2spectrum.h</b> <a href="sinfo__utl__cube2spectrum_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_cube_arith.c</b> <a href="sinfoni_2sinfo__utl__cube__arith_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_cube_arith.c</b> <a href="recipes_2sinfo__utl__cube__arith_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube_arith.h</b> <a href="sinfo__utl__cube__arith_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_cube_combine.c</b> <a href="sinfoni_2sinfo__utl__cube__combine_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_cube_combine.c</b> <a href="recipes_2sinfo__utl__cube__combine_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube_combine.h</b> <a href="sinfo__utl__cube__combine_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube_create.c</b> <a href="sinfo__utl__cube__create_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_cube_test.c</b> <a href="sinfo__utl__cube__test_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_eff.c</b> <a href="sinfo__utl__eff_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_efficiency.c</b> <a href="sinfo__utl__efficiency_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_efficiency.h</b> <a href="sinfo__utl__efficiency_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_illumcorr.c</b> <a href="sinfo__utl__illumcorr_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_ima_arith.c</b> <a href="sinfo__utl__ima__arith_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_ima_cube_ks_test.c</b> <a href="sinfo__utl__ima__cube__ks__test_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_ima_gauss.c</b> <a href="sinfo__utl__ima__gauss_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_ima_line_corr.c</b> <a href="sinfo__utl__ima__line__corr_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_line_oh_select.c</b> <a href="sinfo__utl__line__oh__select_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_remove_crh_single.c</b> <a href="sinfo__utl__remove__crh__single_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_seds.c</b> <a href="sinfo__utl__seds_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_skycor.c</b> <a href="sinfo__utl__skycor_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_skymap.c</b> <a href="sinfo__utl__skymap_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c</b> <a href="sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_spectrum_divide_by_blackbody.c</b> <a href="recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_spectrum_divide_by_blackbody.h</b> <a href="sinfo__utl__spectrum__divide__by__blackbody_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfoni/sinfo_utl_spectrum_wavelength_shift.c</b> <a href="sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>recipes/sinfo_utl_spectrum_wavelength_shift.c</b> <a href="recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_spectrum_wavelength_shift.h</b> <a href="sinfo__utl__spectrum__wavelength__shift_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_stdstars.c</b> <a href="sinfo__utl__stdstars_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_table_ex.c</b> <a href="sinfo__utl__table__ex_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_utl_table_test.c</b> <a href="sinfo__utl__table__test_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_vltPort.h</b> <a href="sinfo__vltPort_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wave_calibration.c</b> <a href="sinfo__wave__calibration_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wave_calibration.h</b> <a href="sinfo__wave__calibration_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal.c</b> <a href="sinfo__wavecal_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal.h</b> <a href="sinfo__wavecal_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_cfg.c</b> <a href="sinfo__wavecal__cfg_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_cfg.h</b> <a href="sinfo__wavecal__cfg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_config.c</b> <a href="sinfo__wavecal__config_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_config.h</b> <a href="sinfo__wavecal__config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_ini.h</b> <a href="sinfo__wavecal__ini_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_ini_by_cpl.c</b> <a href="sinfo__wavecal__ini__by__cpl_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wavecal_ini_by_cpl.h</b> <a href="sinfo__wavecal__ini__by__cpl_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wcal_functions.c</b> <a href="sinfo__wcal__functions_8c_source.html">[code]</a></td><td class="indexvalue"></td></tr>
-  <tr><td class="indexkey"><b>sinfo_wcal_functions.h</b> <a href="sinfo__wcal__functions_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">File List</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__calib_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_calib.c</b></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__calib_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_calib.h</b></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__cat_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_cat.c</b></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__cat_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_cat.h</b></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__distortion_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_distortion.c</b></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__distortion_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_distortion.h</b></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__flat_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_flat.c</b></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__flat_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_flat.h</b></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__framelist_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_framelist.c</b></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__framelist_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_framelist.h</b></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__hist_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_hist.c</b></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__hist_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_hist.h</b></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__ksigma__clip_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_ksigma_clip.c</b></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__ksigma__clip_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_ksigma_clip.h</b></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__ksigma__clip__body_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_ksigma_clip_body.h</b></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__match__cats_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_match_cats.c</b></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__match__cats_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_match_cats.h</b></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__mkmaster_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_mkmaster.c</b></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__mkmaster_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_mkmaster.h</b></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__oddeven_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_oddeven.c</b></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__oddeven_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_oddeven.h</b></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__plugin_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_plugin.c</b></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__plugin_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_plugin.h</b></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__polynomial_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_polynomial.c</b></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__polynomial_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_polynomial.h</b></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__ppm_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_ppm.c</b></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__ppm_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_ppm.h</b></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__slitpos_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_slitpos.c</b></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__slitpos_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_slitpos.h</b></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__spectrum_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_spectrum.c</b></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__spectrum_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_spectrum.h</b></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__stdstar_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_stdstar.c</b></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__stdstar_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_stdstar.h</b></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__strehl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_strehl.c</b></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__strehl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_strehl.h</b></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__utils_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_utils.c</b></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__utils_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_utils.h</b></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wavecal_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wavecal.c</b></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wavecal_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wavecal.h</b></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wavecal__impl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wavecal_impl.h</b></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wcs_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wcs.c</b></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wcs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wcs.h</b></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wlxcorr_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wlxcorr.c</b></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="irplib__wlxcorr_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>irplib_wlxcorr.h</b></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__absolute_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_absolute.c</b></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__absolute_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_absolute.h</b></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__atmo__disp_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_atmo_disp.c</b></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__atmo__disp_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_atmo_disp.h</b></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bad__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bad_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bad__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bad_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bad__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bad_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__baddist__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_baddist_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__baddist__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_baddist_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badnorm__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badnorm_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badnorm__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badnorm_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badsky__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badsky_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badsky__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badsky_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badsky__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badsky_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__badsky__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_badsky_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_59_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__balance_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_balance.c</b></td><td class="desc"></td></tr>
+<tr id="row_60_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__baryvel_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_baryvel.c</b></td><td class="desc"></td></tr>
+<tr id="row_61_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__baryvel_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_baryvel.h</b></td><td class="desc"></td></tr>
+<tr id="row_62_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__boltzmann_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_boltzmann.c</b></td><td class="desc"></td></tr>
+<tr id="row_63_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_64_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_65_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__dist__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_dist_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_66_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__dist__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_dist_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__lin_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_lin.c</b></td><td class="desc"></td></tr>
+<tr id="row_68_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__lin_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_lin.h</b></td><td class="desc"></td></tr>
+<tr id="row_69_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__lin__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_lin_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__lin__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_lin_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__noise_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_noise.c</b></td><td class="desc"></td></tr>
+<tr id="row_72_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__noise_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_noise.h</b></td><td class="desc"></td></tr>
+<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__noise__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_noise_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__noise__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_noise_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__norm_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_norm.c</b></td><td class="desc"></td></tr>
+<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__norm_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_norm.h</b></td><td class="desc"></td></tr>
+<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__norm__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_norm_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__norm__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_norm_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__sky__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_sky_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_80_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__bp__sky__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_bp_sky_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_81_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__coltilt_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_coltilt.c</b></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__coltilt_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_coltilt.h</b></td><td class="desc"></td></tr>
+<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__companion_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_companion.c</b></td><td class="desc"></td></tr>
+<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__compare__tags_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_compare_tags.h</b></td><td class="desc"></td></tr>
+<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__cpl__size_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_cpl_size.h</b></td><td class="desc"></td></tr>
+<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__cube__construct_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_cube_construct.c</b></td><td class="desc"></td></tr>
+<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__cube__construct_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_cube_construct.h</b></td><td class="desc"></td></tr>
+<tr id="row_88_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__cubecreate__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_cubecreate_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_89_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_90_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_91_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_92_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_93_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_94_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_95_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dark__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dark_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_96_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__define__opt_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_define_opt.h</b></td><td class="desc"></td></tr>
+<tr id="row_97_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin.c</b></td><td class="desc"></td></tr>
+<tr id="row_98_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin.h</b></td><td class="desc"></td></tr>
+<tr id="row_99_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_100_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_101_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_102_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_103_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detlin__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detlin_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_104_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detnoise__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detnoise_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_105_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detnoise__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detnoise_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_106_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detnoise__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detnoise_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_107_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detnoise__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detnoise_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_108_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__detnoise__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_detnoise_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_109_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dfs_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dfs.c</b></td><td class="desc"></td></tr>
+<tr id="row_110_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dfs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dfs.h</b></td><td class="desc"></td></tr>
+<tr id="row_111_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__distortion_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_distortion.c</b></td><td class="desc"></td></tr>
+<tr id="row_112_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__distortion_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_distortion.h</b></td><td class="desc"></td></tr>
+<tr id="row_113_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__distortion__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_distortion_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_114_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__distortion__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_distortion_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_115_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dump_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dump.c</b></td><td class="desc"></td></tr>
+<tr id="row_116_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__dump_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_dump.h</b></td><td class="desc"></td></tr>
+<tr id="row_117_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__error_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_error.h</b></td><td class="desc"></td></tr>
+<tr id="row_118_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fft__base_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fft_base.c</b></td><td class="desc"></td></tr>
+<tr id="row_119_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fft__base_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fft_base.h</b></td><td class="desc"></td></tr>
+<tr id="row_120_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__file__handling_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_file_handling.c</b></td><td class="desc"></td></tr>
+<tr id="row_121_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__file__handling_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_file_handling.h</b></td><td class="desc"></td></tr>
+<tr id="row_122_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__finddist__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_finddist_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_123_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__finddist__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_finddist_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_124_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__finddist__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_finddist_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_125_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__finddist__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_finddist_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_126_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__finddist__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_finddist_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_127_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fit_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fit.c</b></td><td class="desc"></td></tr>
+<tr id="row_128_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fit_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fit.h</b></td><td class="desc"></td></tr>
+<tr id="row_129_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fit__curve_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fit_curve.c</b></td><td class="desc"></td></tr>
+<tr id="row_130_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__fit__curve_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_fit_curve.h</b></td><td class="desc"></td></tr>
+<tr id="row_131_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_132_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_133_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__ini_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_ini.c</b></td><td class="desc"></td></tr>
+<tr id="row_134_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_135_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_136_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__flat__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_flat_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_137_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus.c</b></td><td class="desc"></td></tr>
+<tr id="row_138_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus.h</b></td><td class="desc"></td></tr>
+<tr id="row_139_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_140_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_141_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__determination__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_determination_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_142_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__determination__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_determination_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_143_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_144_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_145_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__focus__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_focus_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_146_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__function__1d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_function_1d.c</b></td><td class="desc"></td></tr>
+<tr id="row_147_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__function__1d_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_function_1d.h</b></td><td class="desc"></td></tr>
+<tr id="row_148_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__functions_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_functions.h</b></td><td class="desc"></td></tr>
+<tr id="row_149_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__general__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_general_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_150_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__general__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_general_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_151_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__globals_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_globals.c</b></td><td class="desc"></td></tr>
+<tr id="row_152_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__globals_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_globals.h</b></td><td class="desc"></td></tr>
+<tr id="row_153_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__hidden_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_hidden.h</b></td><td class="desc"></td></tr>
+<tr id="row_154_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__image__ops_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_image_ops.c</b></td><td class="desc"></td></tr>
+<tr id="row_155_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__image__ops_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_image_ops.h</b></td><td class="desc"></td></tr>
+<tr id="row_156_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__img__noise_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_img_noise.c</b></td><td class="desc"></td></tr>
+<tr id="row_157_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ipow_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ipow.c</b></td><td class="desc"></td></tr>
+<tr id="row_158_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ipow_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ipow.h</b></td><td class="desc"></td></tr>
+<tr id="row_159_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__irplib__cpl__wrp_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_irplib_cpl_wrp.h</b></td><td class="desc"></td></tr>
+<tr id="row_160_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__key__names_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_key_names.h</b></td><td class="desc"></td></tr>
+<tr id="row_161_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_162_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_163_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__flats__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_flats_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_164_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__flats__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_flats_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_165_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__flats__hidden__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_flats_hidden_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_166_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__flats__hidden__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_flats_hidden_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_167_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__ini_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_ini.c</b></td><td class="desc"></td></tr>
+<tr id="row_168_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_169_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_170_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_171_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__spec__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_spec_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_172_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__lamp__spec__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_lamp_spec_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_173_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__local__types_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_local_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_174_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__matrix_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_matrix.c</b></td><td class="desc"></td></tr>
+<tr id="row_175_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__matrix_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_matrix.h</b></td><td class="desc"></td></tr>
+<tr id="row_176_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__median_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_median.c</b></td><td class="desc"></td></tr>
+<tr id="row_177_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__median_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_median.h</b></td><td class="desc"></td></tr>
+<tr id="row_178_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__merge_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_merge.c</b></td><td class="desc"></td></tr>
+<tr id="row_179_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__merge_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_merge.h</b></td><td class="desc"></td></tr>
+<tr id="row_180_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__msg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_msg.c</b></td><td class="desc"></td></tr>
+<tr id="row_181_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__msg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_msg.h</b></td><td class="desc"></td></tr>
+<tr id="row_182_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__add__bp__map_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_add_bp_map.c</b></td><td class="desc"></td></tr>
+<tr id="row_183_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__add__bp__map_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_add_bp_map.h</b></td><td class="desc"></td></tr>
+<tr id="row_184_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__bezier_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_bezier.c</b></td><td class="desc"></td></tr>
+<tr id="row_185_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__bezier_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_bezier.h</b></td><td class="desc"></td></tr>
+<tr id="row_186_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cube__ops_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cube_ops.c</b></td><td class="desc"></td></tr>
+<tr id="row_187_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cube__ops_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cube_ops.h</b></td><td class="desc"></td></tr>
+<tr id="row_188_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cubes__build_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cubes_build.c</b></td><td class="desc"></td></tr>
+<tr id="row_189_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cubes__build_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cubes_build.h</b></td><td class="desc"></td></tr>
+<tr id="row_190_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cubes__coadd_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cubes_coadd.c</b></td><td class="desc"></td></tr>
+<tr id="row_191_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__cubes__coadd_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_cubes_coadd.h</b></td><td class="desc"></td></tr>
+<tr id="row_192_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__dark_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_dark.c</b></td><td class="desc"></td></tr>
+<tr id="row_193_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__dark_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_dark.h</b></td><td class="desc"></td></tr>
+<tr id="row_194_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__find__distortions_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_find_distortions.c</b></td><td class="desc"></td></tr>
+<tr id="row_195_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__find__distortions_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_find_distortions.h</b></td><td class="desc"></td></tr>
+<tr id="row_196_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__lamp__flats_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_lamp_flats.c</b></td><td class="desc"></td></tr>
+<tr id="row_197_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__lamp__flats_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_lamp_flats.h</b></td><td class="desc"></td></tr>
+<tr id="row_198_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__nst_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_nst.c</b></td><td class="desc"></td></tr>
+<tr id="row_199_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__nst_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_nst.h</b></td><td class="desc"></td></tr>
+<tr id="row_200_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__objnod_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_objnod.c</b></td><td class="desc"></td></tr>
+<tr id="row_201_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__objnod_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_objnod.h</b></td><td class="desc"></td></tr>
+<tr id="row_202_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__prepare__stacked__frames_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_prepare_stacked_frames.c</b></td><td class="desc"></td></tr>
+<tr id="row_203_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__prepare__stacked__frames_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_prepare_stacked_frames.h</b></td><td class="desc"></td></tr>
+<tr id="row_204_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__psf_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_psf.c</b></td><td class="desc"></td></tr>
+<tr id="row_205_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__psf_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_psf.h</b></td><td class="desc"></td></tr>
+<tr id="row_206_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__resampling_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_resampling.c</b></td><td class="desc"></td></tr>
+<tr id="row_207_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__resampling_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_resampling.h</b></td><td class="desc"></td></tr>
+<tr id="row_208_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__slit__pos_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_slit_pos.c</b></td><td class="desc"></td></tr>
+<tr id="row_209_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__slit__pos_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_slit_pos.h</b></td><td class="desc"></td></tr>
+<tr id="row_210_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__stdstar_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_stdstar.c</b></td><td class="desc"></td></tr>
+<tr id="row_211_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__stdstar_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_stdstar.h</b></td><td class="desc"></td></tr>
+<tr id="row_212_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__wave__cal__slit2_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_wave_cal_slit2.c</b></td><td class="desc"></td></tr>
+<tr id="row_213_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__new__wave__cal__slit2_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_new_wave_cal_slit2.h</b></td><td class="desc"></td></tr>
+<tr id="row_214_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__north__south__test__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_north_south_test_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_215_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__north__south__test__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_north_south_test_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_216_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ns__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ns_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_217_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ns__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ns_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_218_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ns__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ns_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_219_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ns__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ns_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_220_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ns__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ns_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_221_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__object__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_object_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_222_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__object__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_object_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_223_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__object__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_object_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_224_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objnod__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objnod_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_225_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objnod__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objnod_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_226_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objnod__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objnod_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_227_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objnod__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objnod_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_228_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objspider__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objspider_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_229_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objspider__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objspider_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_230_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objspider__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objspider_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_231_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__objspider__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_objspider_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_232_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pfits_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pfits.c</b></td><td class="desc"></td></tr>
+<tr id="row_233_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pfits_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pfits.h</b></td><td class="desc"></td></tr>
+<tr id="row_234_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pixel__handling_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pixel_handling.c</b></td><td class="desc"></td></tr>
+<tr id="row_235_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pixel__handling_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pixel_handling.h</b></td><td class="desc"></td></tr>
+<tr id="row_236_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__poly2d_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_poly2d.c</b></td><td class="desc"></td></tr>
+<tr id="row_237_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__poly2d_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_poly2d.h</b></td><td class="desc"></td></tr>
+<tr id="row_238_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__prepare__stacked__frames__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_prepare_stacked_frames_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_239_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__prepare__stacked__frames__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_prepare_stacked_frames_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_240_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pro__save_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pro_save.c</b></td><td class="desc"></td></tr>
+<tr id="row_241_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pro__save_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pro_save.h</b></td><td class="desc"></td></tr>
+<tr id="row_242_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__pro__types_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_pro_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_243_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__product__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_product_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_244_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__product__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_product_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_245_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_246_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_247_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_248_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_249_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_250_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_251_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__psf__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_psf_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_252_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__qr_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_qr.c</b></td><td class="desc"></td></tr>
+<tr id="row_253_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__raw__types_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_raw_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_254_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__detlin_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_detlin.c</b></td><td class="desc"></td></tr>
+<tr id="row_255_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__distortion_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_distortion.c</b></td><td class="desc"></td></tr>
+<tr id="row_256_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__jitter_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_jitter.c</b></td><td class="desc"></td></tr>
+<tr id="row_257_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__lingain_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_lingain.c</b></td><td class="desc"></td></tr>
+<tr id="row_258_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__mdark_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_mdark.c</b></td><td class="desc"></td></tr>
+<tr id="row_259_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__mdark__detmon_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_mdark_detmon.c</b></td><td class="desc"></td></tr>
+<tr id="row_260_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__mflat_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_mflat.c</b></td><td class="desc"></td></tr>
+<tr id="row_261_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__objnod_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_objnod.c</b></td><td class="desc"></td></tr>
+<tr id="row_262_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__psf_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_psf.c</b></td><td class="desc"></td></tr>
+<tr id="row_263_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__pupil_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_pupil.c</b></td><td class="desc"></td></tr>
+<tr id="row_264_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__stdstar_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_stdstar.c</b></td><td class="desc"></td></tr>
+<tr id="row_265_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__utils_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_utils.c</b></td><td class="desc"></td></tr>
+<tr id="row_266_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__utils_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_utils.h</b></td><td class="desc"></td></tr>
+<tr id="row_267_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__rec__wavecal_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_rec_wavecal.c</b></td><td class="desc"></td></tr>
+<tr id="row_268_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__recipes_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_recipes.c</b></td><td class="desc"></td></tr>
+<tr id="row_269_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__recipes_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_recipes.h</b></td><td class="desc"></td></tr>
+<tr id="row_270_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__ref__types_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_ref_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_271_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__remove__crh__single_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_remove_crh_single.c</b></td><td class="desc"></td></tr>
+<tr id="row_272_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__remove__crh__single_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_remove_crh_single.h</b></td><td class="desc"></td></tr>
+<tr id="row_273_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__resampling_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_resampling.c</b></td><td class="desc"></td></tr>
+<tr id="row_274_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__resampling_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_resampling.h</b></td><td class="desc"></td></tr>
+<tr id="row_275_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__shift__images_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_shift_images.c</b></td><td class="desc"></td></tr>
+<tr id="row_276_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__shift__images_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_shift_images.h</b></td><td class="desc"></td></tr>
+<tr id="row_277_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__skycor_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_skycor.c</b></td><td class="desc"></td></tr>
+<tr id="row_278_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__skycor_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_skycor.h</b></td><td class="desc"></td></tr>
+<tr id="row_279_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__skycor__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_skycor_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_280_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__skycor__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_skycor_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_281_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__solve__poly__root_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_solve_poly_root.c</b></td><td class="desc"></td></tr>
+<tr id="row_282_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__solve__poly__root_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_solve_poly_root.h</b></td><td class="desc"></td></tr>
+<tr id="row_283_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__spectrum__ops_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_spectrum_ops.c</b></td><td class="desc"></td></tr>
+<tr id="row_284_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__spectrum__ops_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_spectrum_ops.h</b></td><td class="desc"></td></tr>
+<tr id="row_285_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__spiffi__types_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_spiffi_types.h</b></td><td class="desc"></td></tr>
+<tr id="row_286_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stack__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stack_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_287_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stack__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stack_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_288_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stack__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stack_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_289_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stack__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stack_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_290_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stack__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stack_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_291_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stacked__hidden__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stacked_hidden_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_292_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__stacked__hidden__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_stacked_hidden_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_293_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standard__star__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standard_star_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_294_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standard__star__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standard_star_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_295_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standstar__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standstar_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_296_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standstar__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standstar_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_297_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standstar__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standstar_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_298_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standstar__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standstar_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_299_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__standstar__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_standstar_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_300_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__star__index_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_star_index.c</b></td><td class="desc"></td></tr>
+<tr id="row_301_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__star__index_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_star_index.h</b></td><td class="desc"></td></tr>
+<tr id="row_302_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__step__distortion_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_step_distortion.c</b></td><td class="desc"></td></tr>
+<tr id="row_303_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__step__jitter_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_step_jitter.c</b></td><td class="desc"></td></tr>
+<tr id="row_304_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__step__objnod_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_step_objnod.c</b></td><td class="desc"></td></tr>
+<tr id="row_305_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__step__psf_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_step_psf.c</b></td><td class="desc"></td></tr>
+<tr id="row_306_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__step__stdstar_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_step_stdstar.c</b></td><td class="desc"></td></tr>
+<tr id="row_307_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__svd_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_svd.c</b></td><td class="desc"></td></tr>
+<tr id="row_308_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__svd_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_svd.h</b></td><td class="desc"></td></tr>
+<tr id="row_309_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tilt__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tilt_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_310_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tilt__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tilt_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_311_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tilt__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tilt_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_312_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__time_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_time.c</b></td><td class="desc"></td></tr>
+<tr id="row_313_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__time_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_time.h</b></td><td class="desc"></td></tr>
+<tr id="row_314_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tpl__dfs_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tpl_dfs.c</b></td><td class="desc"></td></tr>
+<tr id="row_315_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tpl__dfs_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tpl_dfs.h</b></td><td class="desc"></td></tr>
+<tr id="row_316_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tpl__utils_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tpl_utils.c</b></td><td class="desc"></td></tr>
+<tr id="row_317_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__tpl__utils_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_tpl_utils.h</b></td><td class="desc"></td></tr>
+<tr id="row_318_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utilities_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utilities.c</b></td><td class="desc"></td></tr>
+<tr id="row_319_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utilities_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utilities.h</b></td><td class="desc"></td></tr>
+<tr id="row_320_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utilities__scired_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utilities_scired.c</b></td><td class="desc"></td></tr>
+<tr id="row_321_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utilities__scired_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utilities_scired.h</b></td><td class="desc"></td></tr>
+<tr id="row_322_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utils_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utils.c</b></td><td class="desc"></td></tr>
+<tr id="row_323_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utils_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utils.h</b></td><td class="desc"></td></tr>
+<tr id="row_324_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utils__wrappers_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utils_wrappers.c</b></td><td class="desc"></td></tr>
+<tr id="row_325_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utils__wrappers_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utils_wrappers.h</b></td><td class="desc"></td></tr>
+<tr id="row_326_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__bp__mask__add_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_bp_mask_add.c</b></td><td class="desc"></td></tr>
+<tr id="row_327_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__cube2ima_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_cube2ima.c</b></td><td class="desc"></td></tr>
+<tr id="row_328_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__cube2ima_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_cube2ima.c</b></td><td class="desc"></td></tr>
+<tr id="row_329_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube2ima_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube2ima.h</b></td><td class="desc"></td></tr>
+<tr id="row_330_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__cube2spectrum_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_cube2spectrum.c</b></td><td class="desc"></td></tr>
+<tr id="row_331_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__cube2spectrum_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_cube2spectrum.c</b></td><td class="desc"></td></tr>
+<tr id="row_332_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube2spectrum_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube2spectrum.h</b></td><td class="desc"></td></tr>
+<tr id="row_333_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__cube__arith_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_cube_arith.c</b></td><td class="desc"></td></tr>
+<tr id="row_334_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__cube__arith_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_cube_arith.c</b></td><td class="desc"></td></tr>
+<tr id="row_335_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube__arith_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube_arith.h</b></td><td class="desc"></td></tr>
+<tr id="row_336_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__cube__combine_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_cube_combine.c</b></td><td class="desc"></td></tr>
+<tr id="row_337_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__cube__combine_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_cube_combine.c</b></td><td class="desc"></td></tr>
+<tr id="row_338_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube__combine_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube_combine.h</b></td><td class="desc"></td></tr>
+<tr id="row_339_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube__create_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube_create.c</b></td><td class="desc"></td></tr>
+<tr id="row_340_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__cube__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_cube_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_341_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__eff_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_eff.c</b></td><td class="desc"></td></tr>
+<tr id="row_342_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__efficiency_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_efficiency.c</b></td><td class="desc"></td></tr>
+<tr id="row_343_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__efficiency_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_efficiency.h</b></td><td class="desc"></td></tr>
+<tr id="row_344_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__illumcorr_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_illumcorr.c</b></td><td class="desc"></td></tr>
+<tr id="row_345_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__ima__arith_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_ima_arith.c</b></td><td class="desc"></td></tr>
+<tr id="row_346_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__ima__cube__ks__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_ima_cube_ks_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_347_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__ima__gauss_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_ima_gauss.c</b></td><td class="desc"></td></tr>
+<tr id="row_348_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__ima__line__corr_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_ima_line_corr.c</b></td><td class="desc"></td></tr>
+<tr id="row_349_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__line__oh__select_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_line_oh_select.c</b></td><td class="desc"></td></tr>
+<tr id="row_350_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__remove__crh__single_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_remove_crh_single.c</b></td><td class="desc"></td></tr>
+<tr id="row_351_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__seds_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_seds.c</b></td><td class="desc"></td></tr>
+<tr id="row_352_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__skycor_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_skycor.c</b></td><td class="desc"></td></tr>
+<tr id="row_353_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__skymap_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_skymap.c</b></td><td class="desc"></td></tr>
+<tr id="row_354_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c</b></td><td class="desc"></td></tr>
+<tr id="row_355_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_spectrum_divide_by_blackbody.c</b></td><td class="desc"></td></tr>
+<tr id="row_356_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__spectrum__divide__by__blackbody_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_spectrum_divide_by_blackbody.h</b></td><td class="desc"></td></tr>
+<tr id="row_357_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfoni/sinfo_utl_spectrum_wavelength_shift.c</b></td><td class="desc"></td></tr>
+<tr id="row_358_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>recipes/sinfo_utl_spectrum_wavelength_shift.c</b></td><td class="desc"></td></tr>
+<tr id="row_359_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__spectrum__wavelength__shift_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_spectrum_wavelength_shift.h</b></td><td class="desc"></td></tr>
+<tr id="row_360_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__stdstars_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_stdstars.c</b></td><td class="desc"></td></tr>
+<tr id="row_361_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__table__ex_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_table_ex.c</b></td><td class="desc"></td></tr>
+<tr id="row_362_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__utl__table__test_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_utl_table_test.c</b></td><td class="desc"></td></tr>
+<tr id="row_363_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__vltPort_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_vltPort.h</b></td><td class="desc"></td></tr>
+<tr id="row_364_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wave__calibration_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wave_calibration.c</b></td><td class="desc"></td></tr>
+<tr id="row_365_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wave__calibration_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wave_calibration.h</b></td><td class="desc"></td></tr>
+<tr id="row_366_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal.c</b></td><td class="desc"></td></tr>
+<tr id="row_367_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal.h</b></td><td class="desc"></td></tr>
+<tr id="row_368_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__cfg_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_cfg.c</b></td><td class="desc"></td></tr>
+<tr id="row_369_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__cfg_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_cfg.h</b></td><td class="desc"></td></tr>
+<tr id="row_370_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__config_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_config.c</b></td><td class="desc"></td></tr>
+<tr id="row_371_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__config_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_config.h</b></td><td class="desc"></td></tr>
+<tr id="row_372_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__ini_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_ini.h</b></td><td class="desc"></td></tr>
+<tr id="row_373_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__ini__by__cpl_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_ini_by_cpl.c</b></td><td class="desc"></td></tr>
+<tr id="row_374_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wavecal__ini__by__cpl_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wavecal_ini_by_cpl.h</b></td><td class="desc"></td></tr>
+<tr id="row_375_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a href="sinfo__wcal__functions_8c_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wcal_functions.c</b></td><td class="desc"></td></tr>
+<tr id="row_376_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a href="sinfo__wcal__functions_8h_source.html"><img src="ftv2doc.png" alt="*" width="24" height="22" /></a><b>sinfo_wcal_functions.h</b></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/ftv2blank.png b/html/ftv2blank.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/html/ftv2blank.png differ
diff --git a/html/ftv2cl.png b/html/ftv2cl.png
new file mode 100644
index 0000000..132f657
Binary files /dev/null and b/html/ftv2cl.png differ
diff --git a/html/ftv2doc.png b/html/ftv2doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/html/ftv2doc.png differ
diff --git a/html/ftv2folderclosed.png b/html/ftv2folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/html/ftv2folderclosed.png differ
diff --git a/html/ftv2folderopen.png b/html/ftv2folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/html/ftv2folderopen.png differ
diff --git a/html/ftv2lastnode.png b/html/ftv2lastnode.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/html/ftv2lastnode.png differ
diff --git a/html/ftv2link.png b/html/ftv2link.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/html/ftv2link.png differ
diff --git a/html/ftv2mlastnode.png b/html/ftv2mlastnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/html/ftv2mlastnode.png differ
diff --git a/html/ftv2mnode.png b/html/ftv2mnode.png
new file mode 100644
index 0000000..0b63f6d
Binary files /dev/null and b/html/ftv2mnode.png differ
diff --git a/html/ftv2mo.png b/html/ftv2mo.png
new file mode 100644
index 0000000..4bfb80f
Binary files /dev/null and b/html/ftv2mo.png differ
diff --git a/html/ftv2node.png b/html/ftv2node.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/html/ftv2node.png differ
diff --git a/html/ftv2ns.png b/html/ftv2ns.png
new file mode 100644
index 0000000..72e3d71
Binary files /dev/null and b/html/ftv2ns.png differ
diff --git a/html/ftv2plastnode.png b/html/ftv2plastnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/html/ftv2plastnode.png differ
diff --git a/html/ftv2pnode.png b/html/ftv2pnode.png
new file mode 100644
index 0000000..c6ee22f
Binary files /dev/null and b/html/ftv2pnode.png differ
diff --git a/html/ftv2splitbar.png b/html/ftv2splitbar.png
new file mode 100644
index 0000000..fe895f2
Binary files /dev/null and b/html/ftv2splitbar.png differ
diff --git a/html/ftv2vertline.png b/html/ftv2vertline.png
new file mode 100644
index 0000000..63c605b
Binary files /dev/null and b/html/ftv2vertline.png differ
diff --git a/html/group__irplib__calib.html b/html/group__irplib__calib.html
index f34380e..4b11a9f 100644
--- a/html/group__irplib__calib.html
+++ b/html/group__irplib__calib.html
@@ -2,365 +2,389 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for calibrations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for calibrations</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for calibrations</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9">irplib_compute_gain</a> (cpl_frameset *son, cpl_frameset *sof, int *zone, const int kappa, const int nclip)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Computes the detector's gain.  <a href="#ga98c9970b59c6b7919f531829f6f5dab9"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a">irplib_compute_linearity</a> (cpl_frameset *son, cpl_frameset *sof)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Computes the detector's linearity.  <a href="#gadefee4e970a548c25bcbb42797778a2a"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90">irplib_detlin_correct</a> (cpl_imagelist *ilist, const char *detlin_a, const char *detlin_b, const char *detlin_c)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply the detector linearity correction.  <a href="#gae9b762625dbd2c31c1b59cfd8c15fd90"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde">irplib_flat_dark_bpm_calib</a> (cpl_imagelist *ilist, const char *flat, const char *dark, const char *bpm)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Apply the calibration to the frames.  <a href="#gae650a3e54e1aff329b1b5ee356bcdbde"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b">irplib_mkmaster_mean</a> (cpl_imagelist *images, const double kappa, const int nclip, const double tolerance, const double klow, const double khigh, const int niter)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Computes master frame by clean stack mean of the input imagelist.  <a href="#gae11ebd9b30a6c781265ba2e5af87722b"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2">irplib_mkmaster_median</a> (cpl_imagelist *images, const double kappa, const int nclip, const double tolerance)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Computes master frame by clean stack median of the input imagelist.  <a href="#ga31157521720077a762a43644a503bbf2"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga98c9970b59c6b7919f531829f6f5dab9"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9">irplib_compute_gain</a> (cpl_frameset *son, cpl_frameset *sof, int *zone, const int kappa, const int nclip)</td></tr>
+<tr class="memdesc:ga98c9970b59c6b7919f531829f6f5dab9"><td class="mdescLeft"> </td><td class="mdescRight">Computes the detector's gain.  <a href="#ga98c9970b59c6b7919f531829f6f5dab9"></a><br/></td></tr>
+<tr class="memitem:gadefee4e970a548c25bcbb42797778a2a"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a">irplib_compute_linearity</a> (cpl_frameset *son, cpl_frameset *sof)</td></tr>
+<tr class="memdesc:gadefee4e970a548c25bcbb42797778a2a"><td class="mdescLeft"> </td><td class="mdescRight">Computes the detector's linearity.  <a href="#gadefee4e970a548c25bcbb42797778a2a"></a><br/></td></tr>
+<tr class="memitem:gae9b762625dbd2c31c1b59cfd8c15fd90"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90">irplib_detlin_correct</a> (cpl_imagelist *ilist, const char *detlin_a, const char *detlin_b, const char *detlin_c)</td></tr>
+<tr class="memdesc:gae9b762625dbd2c31c1b59cfd8c15fd90"><td class="mdescLeft"> </td><td class="mdescRight">Apply the detector linearity correction.  <a href="#gae9b762625dbd2c31c1b59cfd8c15fd90"></a><br/></td></tr>
+<tr class="memitem:gae650a3e54e1aff329b1b5ee356bcdbde"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde">irplib_flat_dark_bpm_calib</a> (cpl_imagelist *ilist, const char *flat, const char *dark, const char *bpm)</td></tr>
+<tr class="memdesc:gae650a3e54e1aff329b1b5ee356bcdbde"><td class="mdescLeft"> </td><td class="mdescRight">Apply the calibration to the frames.  <a href="#gae650a3e54e1aff329b1b5ee356bcdbde"></a><br/></td></tr>
+<tr class="memitem:gae11ebd9b30a6c781265ba2e5af87722b"><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b">irplib_mkmaster_mean</a> (cpl_imagelist *images, const double kappa, const int nclip, const double tolerance, const double klow, const double khigh, const int niter)</td></tr>
+<tr class="memdesc:gae11ebd9b30a6c781265ba2e5af87722b"><td class="mdescLeft"> </td><td class="mdescRight">Computes master frame by clean stack mean of the input imagelist.  <a href="#gae11ebd9b30a6c781265ba2e5af87722b"></a><br/></td></tr>
+<tr class="memitem:ga31157521720077a762a43644a503bbf2"><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2">irplib_mkmaster_median</a> (cpl_imagelist *images, const double kappa, const int nclip, const double tolerance)</td></tr>
+<tr class="memdesc:ga31157521720077a762a43644a503bbf2"><td class="mdescLeft"> </td><td class="mdescRight">Computes master frame by clean stack median of the input imagelist.  <a href="#ga31157521720077a762a43644a503bbf2"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga98c9970b59c6b7919f531829f6f5dab9"></a><!-- doxytag: member="irplib_calib.c::irplib_compute_gain" ref="ga98c9970b59c6b7919f531829f6f5dab9" args="(cpl_frameset *son, cpl_frameset *sof, int *zone, const int kappa, const int nclip)" -->
+<a class="anchor" id="ga98c9970b59c6b7919f531829f6f5dab9"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_compute_gain </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>son</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>son</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>sof</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>sof</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>zone</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>zone</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const int </td>
-          <td class="paramname"> <em>kappa</em>, </td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>kappa</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const int </td>
-          <td class="paramname"> <em>nclip</em></td><td> </td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>nclip</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Computes the detector's gain. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>son</em> </td><td>the input frameset of linearity on-flat fields </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>sof</em> </td><td>the input frameset of linearity off-flat fields </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>zone</em> </td><td>pointer to an integer array with locations (llx,lly,urx,ury) of region where a clean mean and noise are computed </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>kappa</em> </td><td>value of kappa in kappa-sigma clipping </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>nclip</em> </td><td>number of kappa-sigma clipping iterations</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">son</td><td>the input frameset of linearity on-flat fields </td></tr>
+    <tr><td class="paramname">sof</td><td>the input frameset of linearity off-flat fields </td></tr>
+    <tr><td class="paramname">zone</td><td>pointer to an integer array with locations (llx,lly,urx,ury) of region where a clean mean and noise are computed </td></tr>
+    <tr><td class="paramname">kappa</td><td>value of kappa in kappa-sigma clipping </td></tr>
+    <tr><td class="paramname">nclip</td><td>number of kappa-sigma clipping iterations</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to a table containing single gain evaluations </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>: #1 input frames need to have defined FITS keyword EXPTIME #2 input frames need to have defined FITS keyword DIT </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>pointer to a table containing single gain evaluations </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>: #1 input frames need to have defined FITS keyword EXPTIME #2 input frames need to have defined FITS keyword DIT </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__calib_8c_source.html#l00191">191</a> of file <a class="el" href="irplib__calib_8c_source.html">irplib_calib.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gadefee4e970a548c25bcbb42797778a2a"></a><!-- doxytag: member="irplib_calib.c::irplib_compute_linearity" ref="gadefee4e970a548c25bcbb42797778a2a" args="(cpl_frameset *son, cpl_frameset *sof)" -->
+<a class="anchor" id="gadefee4e970a548c25bcbb42797778a2a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_compute_linearity </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>son</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>son</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>sof</em></td><td> </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>sof</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Computes the detector's linearity. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>son</em> </td><td>the input frameset of linearity on flat fields </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>sof</em> </td><td>the input frameset of linearity off flat fields </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">son</td><td>the input frameset of linearity on flat fields </td></tr>
+    <tr><td class="paramname">sof</td><td>the input frameset of linearity off flat fields </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to a table containing linearity evaluations </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>: #2 input frames need to have defined FITS keyword EXPTIME #3 input frames need to have defined FITS keyword DIT </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>pointer to a table containing linearity evaluations </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>: #2 input frames need to have defined FITS keyword EXPTIME #3 input frames need to have defined FITS keyword DIT </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__calib_8c_source.html#l00372">372</a> of file <a class="el" href="irplib__calib_8c_source.html">irplib_calib.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gae9b762625dbd2c31c1b59cfd8c15fd90"></a><!-- doxytag: member="irplib_calib.c::irplib_detlin_correct" ref="gae9b762625dbd2c31c1b59cfd8c15fd90" args="(cpl_imagelist *ilist, const char *detlin_a, const char *detlin_b, const char *detlin_c)" -->
+<a class="anchor" id="gae9b762625dbd2c31c1b59cfd8c15fd90"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_detlin_correct </td>
           <td>(</td>
-          <td class="paramtype">cpl_imagelist * </td>
-          <td class="paramname"> <em>ilist</em>, </td>
+          <td class="paramtype">cpl_imagelist * </td>
+          <td class="paramname"><em>ilist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>detlin_a</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>detlin_a</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>detlin_b</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>detlin_b</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>detlin_c</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>detlin_c</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Apply the detector linearity correction. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>ilist</em> </td><td>the input image list </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>detlin_a</em> </td><td>the a coeffs </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>detlin_b</em> </td><td>the b coeffs </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>detlin_c</em> </td><td>the c coeffs </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ilist</td><td>the input image list </td></tr>
+    <tr><td class="paramname">detlin_a</td><td>the a coeffs </td></tr>
+    <tr><td class="paramname">detlin_b</td><td>the b coeffs </td></tr>
+    <tr><td class="paramname">detlin_c</td><td>the c coeffs </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__calib_8c_source.html#l00493">493</a> of file <a class="el" href="irplib__calib_8c_source.html">irplib_calib.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gae650a3e54e1aff329b1b5ee356bcdbde"></a><!-- doxytag: member="irplib_calib.c::irplib_flat_dark_bpm_calib" ref="gae650a3e54e1aff329b1b5ee356bcdbde" args="(cpl_imagelist *ilist, const char *flat, const char *dark, const char *bpm)" -->
+<a class="anchor" id="gae650a3e54e1aff329b1b5ee356bcdbde"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_flat_dark_bpm_calib </td>
           <td>(</td>
-          <td class="paramtype">cpl_imagelist * </td>
-          <td class="paramname"> <em>ilist</em>, </td>
+          <td class="paramtype">cpl_imagelist * </td>
+          <td class="paramname"><em>ilist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>flat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>flat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>dark</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>dark</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>bpm</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>bpm</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Apply the calibration to the frames. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>ilist</em> </td><td>the input image list </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>flat</em> </td><td>the flat field </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dark</em> </td><td>the dark </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>bpm</em> </td><td>the bad pixels map </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">ilist</td><td>the input image list </td></tr>
+    <tr><td class="paramname">flat</td><td>the flat field </td></tr>
+    <tr><td class="paramname">dark</td><td>the dark </td></tr>
+    <tr><td class="paramname">bpm</td><td>the bad pixels map </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__calib_8c_source.html#l00578">578</a> of file <a class="el" href="irplib__calib_8c_source.html">irplib_calib.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gae11ebd9b30a6c781265ba2e5af87722b"></a><!-- doxytag: member="irplib_mkmaster.c::irplib_mkmaster_mean" ref="gae11ebd9b30a6c781265ba2e5af87722b" args="(cpl_imagelist *images, const double kappa, const int nclip, const double tolerance, const double klow, const double khigh, const int niter)" -->
+<a class="anchor" id="gae11ebd9b30a6c781265ba2e5af87722b"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_image* irplib_mkmaster_mean </td>
           <td>(</td>
-          <td class="paramtype">cpl_imagelist * </td>
-          <td class="paramname"> <em>images</em>, </td>
+          <td class="paramtype">cpl_imagelist * </td>
+          <td class="paramname"><em>images</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>kappa</em>, </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>kappa</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const int </td>
-          <td class="paramname"> <em>nclip</em>, </td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>nclip</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>tolerance</em>, </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>tolerance</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>klow</em>, </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>klow</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>khigh</em>, </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>khigh</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const int </td>
-          <td class="paramname"> <em>niter</em></td><td> </td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>niter</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Computes master frame by clean stack mean of the input imagelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>images</em> </td><td>input imagelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>kappa</em> </td><td>value for kappa-sigma clip </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>nclip</em> </td><td>Number of clipping iterations </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tolerance</em> </td><td>tolerance on range between two successive clip iterations</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">images</td><td>input imagelist </td></tr>
+    <tr><td class="paramname">kappa</td><td>value for kappa-sigma clip </td></tr>
+    <tr><td class="paramname">nclip</td><td>Number of clipping iterations </td></tr>
+    <tr><td class="paramname">tolerance</td><td>tolerance on range between two successive clip iterations</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>master image</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>master image</dd></dl>
 <p>The returned image must be deallocated. </p>
 
 <p>Definition at line <a class="el" href="irplib__mkmaster_8c_source.html#l00313">313</a> of file <a class="el" href="irplib__mkmaster_8c_source.html">irplib_mkmaster.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga31157521720077a762a43644a503bbf2"></a><!-- doxytag: member="irplib_mkmaster.c::irplib_mkmaster_median" ref="ga31157521720077a762a43644a503bbf2" args="(cpl_imagelist *images, const double kappa, const int nclip, const double tolerance)" -->
+<a class="anchor" id="ga31157521720077a762a43644a503bbf2"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_image* irplib_mkmaster_median </td>
           <td>(</td>
-          <td class="paramtype">cpl_imagelist * </td>
-          <td class="paramname"> <em>images</em>, </td>
+          <td class="paramtype">cpl_imagelist * </td>
+          <td class="paramname"><em>images</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>kappa</em>, </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>kappa</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const int </td>
-          <td class="paramname"> <em>nclip</em>, </td>
+          <td class="paramtype">const int </td>
+          <td class="paramname"><em>nclip</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const double </td>
-          <td class="paramname"> <em>tolerance</em></td><td> </td>
+          <td class="paramtype">const double </td>
+          <td class="paramname"><em>tolerance</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Computes master frame by clean stack median of the input imagelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>images</em> </td><td>input imagelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>kappa</em> </td><td>value for kappa-sigma clip </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>nclip</em> </td><td>Number of clipping iterations </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tolerance</em> </td><td>tolerance on range between two successive clip iterations</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">images</td><td>input imagelist </td></tr>
+    <tr><td class="paramname">kappa</td><td>value for kappa-sigma clip </td></tr>
+    <tr><td class="paramname">nclip</td><td>Number of clipping iterations </td></tr>
+    <tr><td class="paramname">tolerance</td><td>tolerance on range between two successive clip iterations</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>master image</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>master image</dd></dl>
 <p>The returned image must be deallocated. </p>
 
 <p>Definition at line <a class="el" href="irplib__mkmaster_8c_source.html#l00352">352</a> of file <a class="el" href="irplib__mkmaster_8c_source.html">irplib_mkmaster.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__cat.html b/html/group__irplib__cat.html
index 3a35a84..fdab88b 100644
--- a/html/group__irplib__cat.html
+++ b/html/group__irplib__cat.html
@@ -2,241 +2,264 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for accessing catalogues</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for accessing catalogues</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for accessing catalogues</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200">irplib_2mass_get_catpars</a> (const cpl_frame *master_index, char **catpath, char **catname)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the name of the standard catalogue being used and its location.  <a href="#ga8dd2b5e6b7bc4a7ea3f2b275882aa200"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af">irplib_cat_get_image_limits</a> (const cpl_wcs *wcs, float ext_search, double *ra1, double *ra2, double *dec1, double *dec2)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get coverage in ra, dec of a frame.  <a href="#ga2289fa88ec0498a2930291b1d51a46af"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6">irplib_2mass_extract</a> (char *path, float ramin, float ramax, float decmin, float decmax)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Extract standards from the 2mass catalogue.  <a href="#ga7fdafd757d33d4096270027912a89cf6"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe">irplib_match_cat_pairs</a> (cpl_table **catalogues, int ncats, int(*binary_match_condition)(cpl_table *catalogue1, cpl_table *catalogue2, intiobj1, intiobj2))</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Finds all the objects that appear at least in some of the catalogues.  <a href="#gaf3dbc2180a59e7187674707510205afe"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8dd2b5e6b7bc4a7ea3f2b275882aa200"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200">irplib_2mass_get_catpars</a> (const cpl_frame *master_index, char **catpath, char **catname)</td></tr>
+<tr class="memdesc:ga8dd2b5e6b7bc4a7ea3f2b275882aa200"><td class="mdescLeft"> </td><td class="mdescRight">Find the name of the standard catalogue being used and its location.  <a href="#ga8dd2b5e6b7bc4a7ea3f2b275882aa200"></a><br/></td></tr>
+<tr class="memitem:ga2289fa88ec0498a2930291b1d51a46af"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af">irplib_cat_get_image_limits</a> (const cpl_wcs *wcs, float ext_search, double *ra1, double *ra2, double *dec1, double *dec2)</td></tr>
+<tr class="memdesc:ga2289fa88ec0498a2930291b1d51a46af"><td class="mdescLeft"> </td><td class="mdescRight">Get coverage in ra, dec of a frame.  <a href="#ga2289fa88ec0498a2930291b1d51a46af"></a><br/></td></tr>
+<tr class="memitem:ga7fdafd757d33d4096270027912a89cf6"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6">irplib_2mass_extract</a> (char *path, float ramin, float ramax, float decmin, float decmax)</td></tr>
+<tr class="memdesc:ga7fdafd757d33d4096270027912a89cf6"><td class="mdescLeft"> </td><td class="mdescRight">Extract standards from the 2mass catalogue.  <a href="#ga7fdafd757d33d4096270027912a89cf6"></a><br/></td></tr>
+<tr class="memitem:gaf3dbc2180a59e7187674707510205afe"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe">irplib_match_cat_pairs</a> (cpl_table **catalogues, int ncats, int(*binary_match_condition)(cpl_table *catalogue1, cpl_table *catalogue2, intiobj1, intiobj2))</td></tr>
+<tr class="memdesc:gaf3dbc2180a59e7187674707510205afe"><td class="mdescLeft"> </td><td class="mdescRight">Finds all the objects that appear at least in some of the catalogues.  <a href="#gaf3dbc2180a59e7187674707510205afe"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga7fdafd757d33d4096270027912a89cf6"></a><!-- doxytag: member="irplib_cat.c::irplib_2mass_extract" ref="ga7fdafd757d33d4096270027912a89cf6" args="(char *path, float ramin, float ramax, float decmin, float decmax)" -->
+<a class="anchor" id="ga7fdafd757d33d4096270027912a89cf6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_2mass_extract </td>
           <td>(</td>
-          <td class="paramtype">char * </td>
-          <td class="paramname"> <em>path</em>, </td>
+          <td class="paramtype">char * </td>
+          <td class="paramname"><em>path</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>ramin</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>ramin</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>ramax</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>ramax</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>decmin</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>decmin</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>decmax</em></td><td> </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>decmax</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Extract standards from the 2mass catalogue. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>path</em> </td><td>The full path to the catalogue FITS files and index. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ramin1</em> </td><td>The minimum RA, this can be negative in the case the area wraps around the equinox. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ramax1</em> </td><td>The maximum RA </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>decmin</em> </td><td>The minimum Declination </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>decmax</em> </td><td>The maximum Declination </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">path</td><td>The full path to the catalogue FITS files and index. </td></tr>
+    <tr><td class="paramname">ramin1</td><td>The minimum RA, this can be negative in the case the area wraps around the equinox. </td></tr>
+    <tr><td class="paramname">ramax1</td><td>The maximum RA </td></tr>
+    <tr><td class="paramname">decmin</td><td>The minimum Declination </td></tr>
+    <tr><td class="paramname">decmax</td><td>The maximum Declination </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>A table structure with the extracted catalogue objects</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>A table structure with the extracted catalogue objects</dd></dl>
 <p>The FITS tables containing the 2mass psc catalogue are searched to find all of the objects within an input equatorial area. Deals with the sigularity at the equinox, but not at the poles. </p>
 
 <p>Definition at line <a class="el" href="irplib__cat_8c_source.html#l00280">280</a> of file <a class="el" href="irplib__cat_8c_source.html">irplib_cat.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga8dd2b5e6b7bc4a7ea3f2b275882aa200"></a><!-- doxytag: member="irplib_cat.c::irplib_2mass_get_catpars" ref="ga8dd2b5e6b7bc4a7ea3f2b275882aa200" args="(const cpl_frame *master_index, char **catpath, char **catname)" -->
+<a class="anchor" id="ga8dd2b5e6b7bc4a7ea3f2b275882aa200"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_2mass_get_catpars </td>
           <td>(</td>
-          <td class="paramtype">const cpl_frame * </td>
-          <td class="paramname"> <em>master_index</em>, </td>
+          <td class="paramtype">const cpl_frame * </td>
+          <td class="paramname"><em>master_index</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char ** </td>
-          <td class="paramname"> <em>catpath</em>, </td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>catpath</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char ** </td>
-          <td class="paramname"> <em>catname</em></td><td> </td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>catname</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the name of the standard catalogue being used and its location. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>index</em> </td><td>The frame for the index FITS file </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>catpath</em> </td><td>The full path to the catalgoue FITS files </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>catname</em> </td><td>The name of the catalogue </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">index</td><td>The frame for the index FITS file </td></tr>
+    <tr><td class="paramname">catpath</td><td>The full path to the catalgoue FITS files </td></tr>
+    <tr><td class="paramname">catname</td><td>The name of the catalogue </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE if sucess CPL_ERROR_FILE_IO if the file does not exist or the header cannot be read.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE if sucess CPL_ERROR_FILE_IO if the file does not exist or the header cannot be read.</dd></dl>
 <p>Find the name of the standard catalogue being used and its location. The former should be in a header keyword in the specified FITS file. The latter is the full path of the FITS file. Both values need to be deallocated when you're finished with them. </p>
 
 <p>Definition at line <a class="el" href="irplib__cat_8c_source.html#l00075">75</a> of file <a class="el" href="irplib__cat_8c_source.html">irplib_cat.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga2289fa88ec0498a2930291b1d51a46af"></a><!-- doxytag: member="irplib_cat.c::irplib_cat_get_image_limits" ref="ga2289fa88ec0498a2930291b1d51a46af" args="(const cpl_wcs *wcs, float ext_search, double *ra1, double *ra2, double *dec1, double *dec2)" -->
+<a class="anchor" id="ga2289fa88ec0498a2930291b1d51a46af"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_cat_get_image_limits </td>
           <td>(</td>
-          <td class="paramtype">const cpl_wcs * </td>
-          <td class="paramname"> <em>wcs</em>, </td>
+          <td class="paramtype">const cpl_wcs * </td>
+          <td class="paramname"><em>wcs</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>ext_search</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>ext_search</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>ra1</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>ra1</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>ra2</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>ra2</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>dec1</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>dec1</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>dec2</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>dec2</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get coverage in ra, dec of a frame. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>plist</em> </td><td>Input property list </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ext_search</em> </td><td>Factor for an extra box search. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ra1</em> </td><td>Lower RA </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ra2</em> </td><td>Upper RA </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dec1</em> </td><td>Lower Dec </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dec2</em> </td><td>Upper Dec </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">plist</td><td>Input property list </td></tr>
+    <tr><td class="paramname">ext_search</td><td>Factor for an extra box search. </td></tr>
+    <tr><td class="paramname">ra1</td><td>Lower RA </td></tr>
+    <tr><td class="paramname">ra2</td><td>Upper RA </td></tr>
+    <tr><td class="paramname">dec1</td><td>Lower Dec </td></tr>
+    <tr><td class="paramname">dec2</td><td>Upper Dec </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE if sucess. CPL_ERROR_DATA_NOT_FOUND if wcs is not valid</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE if sucess. CPL_ERROR_DATA_NOT_FOUND if wcs is not valid</dd></dl>
 <p>Given a WCS solution this routine works out the min and max equatorial coordinates covered by the image. </p>
 
 <p>Definition at line <a class="el" href="irplib__cat_8c_source.html#l00154">154</a> of file <a class="el" href="irplib__cat_8c_source.html">irplib_cat.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gaf3dbc2180a59e7187674707510205afe"></a><!-- doxytag: member="irplib_match_cats.c::irplib_match_cat_pairs" ref="gaf3dbc2180a59e7187674707510205afe" args="(cpl_table **catalogues, int ncats, int(*binary_match_condition)(cpl_table *catalogue1, cpl_table *catalogue2, intiobj1, intiobj2))" -->
+<a class="anchor" id="gaf3dbc2180a59e7187674707510205afe"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_match_cat_pairs </td>
           <td>(</td>
-          <td class="paramtype">cpl_table ** </td>
-          <td class="paramname"> <em>catalogues</em>, </td>
+          <td class="paramtype">cpl_table ** </td>
+          <td class="paramname"><em>catalogues</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>ncats</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>ncats</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int(*)(cpl_table *catalogue1, cpl_table *catalogue2, intiobj1, intiobj2) </td>
-          <td class="paramname"> <em>binary_match_condition</em></td><td> </td>
+          <td class="paramtype">int(*)(cpl_table *catalogue1, cpl_table *catalogue2, intiobj1, intiobj2) </td>
+          <td class="paramname"><em>binary_match_condition</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Finds all the objects that appear at least in some of the catalogues. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>catalogues</em> </td><td>All the catalogues </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ncats</em> </td><td>Number of catalogues </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">catalogues</td><td>All the catalogues </td></tr>
+    <tr><td class="paramname">ncats</td><td>Number of catalogues </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The matching table if sucess, NULL otherwise.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The matching table if sucess, NULL otherwise.</dd></dl>
 <p>Implementation notes:</p>
 <p>cat_indexing_order tells you in which order the catalogues are being iterated. For example cat_indexing_order[2] gives the index of the catalogue that is being iterated in the 3rd postion. </p>
 
@@ -244,9 +267,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__distortion.html b/html/group__irplib__distortion.html
index bac104a..66d4bd3 100644
--- a/html/group__irplib__distortion.html
+++ b/html/group__irplib__distortion.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Distortion correction functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Distortion correction functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Distortion correction functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__flat.html b/html/group__irplib__flat.html
index ff1745a..88cd3e9 100644
--- a/html/group__irplib__flat.html
+++ b/html/group__irplib__flat.html
@@ -2,55 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for flatfielding</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for flatfielding</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for flatfielding</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_imagelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e">irplib_flat_fit_set</a> (cpl_imagelist *raw, int mode)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute a flat-field out of a set of exposures.  <a href="#gaf9bd48348cc91bb66304697b4c7aa58e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91">irplib_flat_fit_slope_robust</a> (double *x, double *y, int np)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Fit a slope to a list of points (robust fit).  <a href="#ga3e3e3bd45aef34e38758e1f2528d7c91"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf9bd48348cc91bb66304697b4c7aa58e"><td class="memItemLeft" align="right" valign="top">cpl_imagelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e">irplib_flat_fit_set</a> (cpl_imagelist *raw, int mode)</td></tr>
+<tr class="memdesc:gaf9bd48348cc91bb66304697b4c7aa58e"><td class="mdescLeft"> </td><td class="mdescRight">Compute a flat-field out of a set of exposures.  <a href="#gaf9bd48348cc91bb66304697b4c7aa58e"></a><br/></td></tr>
+<tr class="memitem:ga3e3e3bd45aef34e38758e1f2528d7c91"><td class="memItemLeft" align="right" valign="top">double * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91">irplib_flat_fit_slope_robust</a> (double *x, double *y, int np)</td></tr>
+<tr class="memdesc:ga3e3e3bd45aef34e38758e1f2528d7c91"><td class="mdescLeft"> </td><td class="mdescRight">Fit a slope to a list of points (robust fit).  <a href="#ga3e3e3bd45aef34e38758e1f2528d7c91"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="gaf9bd48348cc91bb66304697b4c7aa58e"></a><!-- doxytag: member="irplib_flat.c::irplib_flat_fit_set" ref="gaf9bd48348cc91bb66304697b4c7aa58e" args="(cpl_imagelist *raw, int mode)" -->
+<a class="anchor" id="gaf9bd48348cc91bb66304697b4c7aa58e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_imagelist* irplib_flat_fit_set </td>
           <td>(</td>
-          <td class="paramtype">cpl_imagelist * </td>
-          <td class="paramname"> <em>raw</em>, </td>
+          <td class="paramtype">cpl_imagelist * </td>
+          <td class="paramname"><em>raw</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>mode</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>mode</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Compute a flat-field out of a set of exposures. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>raw</em> </td><td>Input image set </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mode</em> </td><td>0 for proportional, 1 for robust fit </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">raw</td><td>Input image set </td></tr>
+    <tr><td class="paramname">mode</td><td>0 for proportional, 1 for robust fit </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>1 newly allocated set of 2 or 3 images</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>1 newly allocated set of 2 or 3 images</dd></dl>
 <p>The input is assumed to be a cube containing planes of different intensities (usually increasing or decreasing). Typical inputs are: twilight data sets, halogen lamp, or skies of different airmasses in the thermal regime.</p>
 <p>The input image list must be of type float.</p>
 <p>In robust mode, the output is a set of 3 images. The first image contains a regression map, i.e. for each pixel position on the detector, a curve is plotted of the pixel intensity in each plane against the median intensity of the plane. A slope is fit, and the gain factor is stored into this first image.</p>
@@ -64,47 +90,46 @@
 
 </div>
 </div>
-<a class="anchor" id="ga3e3e3bd45aef34e38758e1f2528d7c91"></a><!-- doxytag: member="irplib_flat.c::irplib_flat_fit_slope_robust" ref="ga3e3e3bd45aef34e38758e1f2528d7c91" args="(double *x, double *y, int np)" -->
+<a class="anchor" id="ga3e3e3bd45aef34e38758e1f2528d7c91"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">double* irplib_flat_fit_slope_robust </td>
           <td>(</td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>x</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>x</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>y</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>y</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>np</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>np</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Fit a slope to a list of points (robust fit). </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>x</em> </td><td>x coordinates </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>y</em> </td><td>y coordinates </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>np</em> </td><td>number of points </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>x coordinates </td></tr>
+    <tr><td class="paramname">y</td><td>y coordinates </td></tr>
+    <tr><td class="paramname">np</td><td>number of points </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Pointer to newly allocated array of 3 doubles.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Pointer to newly allocated array of 3 doubles.</dd></dl>
 <p>The slope to fit has the following kind of equation: y = c[0] + c[1] * x</p>
 <p>The returned coefficients are defined as: c[0] is the y-intercept. c[1] is the slope. c[2] is the median squared error of the fit. This is a very robust slope fit. It tolerates up to 50% of outliers in input. </p>
 
@@ -114,9 +139,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__framelist.html b/html/group__irplib__framelist.html
index dfef07c..a89650a 100644
--- a/html/group__irplib__framelist.html
+++ b/html/group__irplib__framelist.html
@@ -2,145 +2,169 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Lists of frames with properties.</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Lists of frames with properties.</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Lists of frames with properties.</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0">irplib_framelist_new</a> (void)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create an empty framelist.  <a href="#ga5b86add048651f73424d2542a04946a0"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26">irplib_framelist_delete</a> (irplib_framelist *self)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Deallocate an irplib_framelist with its frames and properties.  <a href="#ga7a5159e9d27ef277df3fb55b331aaf26"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1">irplib_framelist_cast</a> (const cpl_frameset *frameset)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create an irplib_framelist from a cpl_framelist.  <a href="#ga30cbfd003c6e6a6a42e610442f0b1bd1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_frameset * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174">irplib_frameset_cast</a> (const irplib_framelist *self)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a CPL frameset from an irplib_framelist.  <a href="#gabeedce2770a1bc06c26c0891a41aa174"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396">irplib_framelist_extract</a> (const irplib_framelist *self, const char *tag)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Extract the frames with the given tag from a framelist.  <a href="#ga86d6746d1c19356417815f7df04c3396"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01">irplib_framelist_extract_regexp</a> (const irplib_framelist *self, const char *regexp, cpl_boolean invert)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Extract the frames with the given tag from a framelist.  <a href="#gace77e5ae75183a22a0e5af9dd9018b01"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7">irplib_framelist_get_size</a> (const irplib_framelist *self)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the size of a framelist.  <a href="#ga2518fce55112b5008cb119a126e593d7"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387">irplib_framelist_get</a> (irplib_framelist *self, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the specified frame from the framelist.  <a href="#gaba8797bbb8394f5574cd88b2f1984387"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f">irplib_framelist_get_const</a> (const irplib_framelist *self, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the specified frame from the framelist.  <a href="#ga93d8f903729ea4b6fcb3eca85935716f"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600">irplib_framelist_set_propertylist</a> (irplib_framelist *self, int pos, const cpl_propertylist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Duplicate a propertylist to the specified position in the framelist.  <a href="#gada2c2e3f530a6dff763402eefceb5600"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_propertylist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032">irplib_framelist_get_propertylist</a> (irplib_framelist *self, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the propertylist of the specified frame in the framelist.  <a href="#gab4858b1e9164f3a6cffcf40270f89032"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const cpl_propertylist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c">irplib_framelist_get_propertylist_const</a> (const irplib_framelist *self, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the propertylist of the specified frame in the framelist.  <a href="#ga7700dadcf17db5b86409e6cef233af4c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005">irplib_framelist_load_propertylist</a> (irplib_framelist *self, int pos, int ind, const char *regexp, cpl_boolean invert)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Load the propertylist of the specified frame in the framelist.  <a href="#ga6ce5701e84915514975d09e0100c6005"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d">irplib_framelist_load_propertylist_all</a> (irplib_framelist *self, int ind, const char *regexp, cpl_boolean invert)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Load the propertylists of all frames in the framelist.  <a href="#gaf9204681e0b6aa2d952c974dcbd8729d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14">irplib_framelist_set_tag_all</a> (irplib_framelist *self, const char *tag)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the tag of all frames in the list.  <a href="#gab11bb60e44dea926cd50ee80c7fbbd14"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879">irplib_framelist_set</a> (irplib_framelist *self, cpl_frame *frame, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add a frame to a framelist.  <a href="#ga37e730f5627b4a0c7a81014f62421879"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce">irplib_framelist_erase</a> (irplib_framelist *self, int pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase a frame from a framelist and delete it and its propertylist.  <a href="#gac66ea3ad4fc98c171f8b840229fe54ce"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce">irplib_framelist_unset</a> (irplib_framelist *self, int pos, cpl_propertylist **plist)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase a frame from a framelist and return it to the caller.  <a href="#ga771f14f97f80a9bd7176d323999c9bce"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb">irplib_framelist_empty</a> (irplib_framelist *self)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Erase all frames from a framelist.  <a href="#ga900ea254d9b2a2e4e3957360bbae4deb"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac">irplib_framelist_contains</a> (const irplib_framelist *self, const char *key, cpl_type type, cpl_boolean is_equal, double fp_tol)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Verify that a property is present for all frames.  <a href="#gafed15e9e259ebad923b710f5eb0196ac"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_imagelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94">irplib_imagelist_load_framelist</a> (const irplib_framelist *self, cpl_type pixeltype, int planenum, int extnum)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Load an imagelist from a framelist.  <a href="#ga0ff6c5e3b778c607544ca04ca3fb9e94"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga5b86add048651f73424d2542a04946a0"><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0">irplib_framelist_new</a> (void)</td></tr>
+<tr class="memdesc:ga5b86add048651f73424d2542a04946a0"><td class="mdescLeft"> </td><td class="mdescRight">Create an empty framelist.  <a href="#ga5b86add048651f73424d2542a04946a0"></a><br/></td></tr>
+<tr class="memitem:ga7a5159e9d27ef277df3fb55b331aaf26"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26">irplib_framelist_delete</a> (irplib_framelist *self)</td></tr>
+<tr class="memdesc:ga7a5159e9d27ef277df3fb55b331aaf26"><td class="mdescLeft"> </td><td class="mdescRight">Deallocate an irplib_framelist with its frames and properties.  <a href="#ga7a5159e9d27ef277df3fb55b331aaf26"></a><br/></td></tr>
+<tr class="memitem:ga30cbfd003c6e6a6a42e610442f0b1bd1"><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1">irplib_framelist_cast</a> (const cpl_frameset *frameset)</td></tr>
+<tr class="memdesc:ga30cbfd003c6e6a6a42e610442f0b1bd1"><td class="mdescLeft"> </td><td class="mdescRight">Create an irplib_framelist from a cpl_framelist.  <a href="#ga30cbfd003c6e6a6a42e610442f0b1bd1"></a><br/></td></tr>
+<tr class="memitem:gabeedce2770a1bc06c26c0891a41aa174"><td class="memItemLeft" align="right" valign="top">cpl_frameset * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174">irplib_frameset_cast</a> (const irplib_framelist *self)</td></tr>
+<tr class="memdesc:gabeedce2770a1bc06c26c0891a41aa174"><td class="mdescLeft"> </td><td class="mdescRight">Create a CPL frameset from an irplib_framelist.  <a href="#gabeedce2770a1bc06c26c0891a41aa174"></a><br/></td></tr>
+<tr class="memitem:ga86d6746d1c19356417815f7df04c3396"><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396">irplib_framelist_extract</a> (const irplib_framelist *self, const char *tag)</td></tr>
+<tr class="memdesc:ga86d6746d1c19356417815f7df04c3396"><td class="mdescLeft"> </td><td class="mdescRight">Extract the frames with the given tag from a framelist.  <a href="#ga86d6746d1c19356417815f7df04c3396"></a><br/></td></tr>
+<tr class="memitem:gace77e5ae75183a22a0e5af9dd9018b01"><td class="memItemLeft" align="right" valign="top">irplib_framelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01">irplib_framelist_extract_regexp</a> (const irplib_framelist *self, const char *regexp, cpl_boolean invert)</td></tr>
+<tr class="memdesc:gace77e5ae75183a22a0e5af9dd9018b01"><td class="mdescLeft"> </td><td class="mdescRight">Extract the frames with the given tag from a framelist.  <a href="#gace77e5ae75183a22a0e5af9dd9018b01"></a><br/></td></tr>
+<tr class="memitem:ga2518fce55112b5008cb119a126e593d7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7">irplib_framelist_get_size</a> (const irplib_framelist *self)</td></tr>
+<tr class="memdesc:ga2518fce55112b5008cb119a126e593d7"><td class="mdescLeft"> </td><td class="mdescRight">Get the size of a framelist.  <a href="#ga2518fce55112b5008cb119a126e593d7"></a><br/></td></tr>
+<tr class="memitem:gaba8797bbb8394f5574cd88b2f1984387"><td class="memItemLeft" align="right" valign="top">cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387">irplib_framelist_get</a> (irplib_framelist *self, int pos)</td></tr>
+<tr class="memdesc:gaba8797bbb8394f5574cd88b2f1984387"><td class="mdescLeft"> </td><td class="mdescRight">Get the specified frame from the framelist.  <a href="#gaba8797bbb8394f5574cd88b2f1984387"></a><br/></td></tr>
+<tr class="memitem:ga93d8f903729ea4b6fcb3eca85935716f"><td class="memItemLeft" align="right" valign="top">const cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f">irplib_framelist_get_const</a> (const irplib_framelist *self, int pos)</td></tr>
+<tr class="memdesc:ga93d8f903729ea4b6fcb3eca85935716f"><td class="mdescLeft"> </td><td class="mdescRight">Get the specified frame from the framelist.  <a href="#ga93d8f903729ea4b6fcb3eca85935716f"></a><br/></td></tr>
+<tr class="memitem:gada2c2e3f530a6dff763402eefceb5600"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600">irplib_framelist_set_propertylist</a> (irplib_framelist *self, int pos, const cpl_propertylist *list)</td></tr>
+<tr class="memdesc:gada2c2e3f530a6dff763402eefceb5600"><td class="mdescLeft"> </td><td class="mdescRight">Duplicate a propertylist to the specified position in the framelist.  <a href="#gada2c2e3f530a6dff763402eefceb5600"></a><br/></td></tr>
+<tr class="memitem:gab4858b1e9164f3a6cffcf40270f89032"><td class="memItemLeft" align="right" valign="top">cpl_propertylist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032">irplib_framelist_get_propertylist</a> (irplib_framelist *self, int pos)</td></tr>
+<tr class="memdesc:gab4858b1e9164f3a6cffcf40270f89032"><td class="mdescLeft"> </td><td class="mdescRight">Get the propertylist of the specified frame in the framelist.  <a href="#gab4858b1e9164f3a6cffcf40270f89032"></a><br/></td></tr>
+<tr class="memitem:ga7700dadcf17db5b86409e6cef233af4c"><td class="memItemLeft" align="right" valign="top">const cpl_propertylist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c">irplib_framelist_get_propertylist_const</a> (const irplib_framelist *self, int pos)</td></tr>
+<tr class="memdesc:ga7700dadcf17db5b86409e6cef233af4c"><td class="mdescLeft"> </td><td class="mdescRight">Get the propertylist of the specified frame in the framelist.  <a href="#ga7700dadcf17db5b86409e6cef233af4c"></a><br/></td></tr>
+<tr class="memitem:ga6ce5701e84915514975d09e0100c6005"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005">irplib_framelist_load_propertylist</a> (irplib_framelist *self, int pos, int ind, const char *regexp, cpl_boolean invert)</td></tr>
+<tr class="memdesc:ga6ce5701e84915514975d09e0100c6005"><td class="mdescLeft"> </td><td class="mdescRight">Load the propertylist of the specified frame in the framelist.  <a href="#ga6ce5701e84915514975d09e0100c6005"></a><br/></td></tr>
+<tr class="memitem:gaf9204681e0b6aa2d952c974dcbd8729d"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d">irplib_framelist_load_propertylist_all</a> (irplib_framelist *self, int ind, const char *regexp, cpl_boolean invert)</td></tr>
+<tr class="memdesc:gaf9204681e0b6aa2d952c974dcbd8729d"><td class="mdescLeft"> </td><td class="mdescRight">Load the propertylists of all frames in the framelist.  <a href="#gaf9204681e0b6aa2d952c974dcbd8729d"></a><br/></td></tr>
+<tr class="memitem:gab11bb60e44dea926cd50ee80c7fbbd14"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14">irplib_framelist_set_tag_all</a> (irplib_framelist *self, const char *tag)</td></tr>
+<tr class="memdesc:gab11bb60e44dea926cd50ee80c7fbbd14"><td class="mdescLeft"> </td><td class="mdescRight">Set the tag of all frames in the list.  <a href="#gab11bb60e44dea926cd50ee80c7fbbd14"></a><br/></td></tr>
+<tr class="memitem:ga37e730f5627b4a0c7a81014f62421879"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879">irplib_framelist_set</a> (irplib_framelist *self, cpl_frame *frame, int pos)</td></tr>
+<tr class="memdesc:ga37e730f5627b4a0c7a81014f62421879"><td class="mdescLeft"> </td><td class="mdescRight">Add a frame to a framelist.  <a href="#ga37e730f5627b4a0c7a81014f62421879"></a><br/></td></tr>
+<tr class="memitem:gac66ea3ad4fc98c171f8b840229fe54ce"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce">irplib_framelist_erase</a> (irplib_framelist *self, int pos)</td></tr>
+<tr class="memdesc:gac66ea3ad4fc98c171f8b840229fe54ce"><td class="mdescLeft"> </td><td class="mdescRight">Erase a frame from a framelist and delete it and its propertylist.  <a href="#gac66ea3ad4fc98c171f8b840229fe54ce"></a><br/></td></tr>
+<tr class="memitem:ga771f14f97f80a9bd7176d323999c9bce"><td class="memItemLeft" align="right" valign="top">cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce">irplib_framelist_unset</a> (irplib_framelist *self, int pos, cpl_propertylist **plist)</td></tr>
+<tr class="memdesc:ga771f14f97f80a9bd7176d323999c9bce"><td class="mdescLeft"> </td><td class="mdescRight">Erase a frame from a framelist and return it to the caller.  <a href="#ga771f14f97f80a9bd7176d323999c9bce"></a><br/></td></tr>
+<tr class="memitem:ga900ea254d9b2a2e4e3957360bbae4deb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb">irplib_framelist_empty</a> (irplib_framelist *self)</td></tr>
+<tr class="memdesc:ga900ea254d9b2a2e4e3957360bbae4deb"><td class="mdescLeft"> </td><td class="mdescRight">Erase all frames from a framelist.  <a href="#ga900ea254d9b2a2e4e3957360bbae4deb"></a><br/></td></tr>
+<tr class="memitem:gafed15e9e259ebad923b710f5eb0196ac"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac">irplib_framelist_contains</a> (const irplib_framelist *self, const char *key, cpl_type type, cpl_boolean is_equal, double fp_tol)</td></tr>
+<tr class="memdesc:gafed15e9e259ebad923b710f5eb0196ac"><td class="mdescLeft"> </td><td class="mdescRight">Verify that a property is present for all frames.  <a href="#gafed15e9e259ebad923b710f5eb0196ac"></a><br/></td></tr>
+<tr class="memitem:ga0ff6c5e3b778c607544ca04ca3fb9e94"><td class="memItemLeft" align="right" valign="top">cpl_imagelist * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94">irplib_imagelist_load_framelist</a> (const irplib_framelist *self, cpl_type pixeltype, int planenum, int extnum)</td></tr>
+<tr class="memdesc:ga0ff6c5e3b778c607544ca04ca3fb9e94"><td class="mdescLeft"> </td><td class="mdescRight">Load an imagelist from a framelist.  <a href="#ga0ff6c5e3b778c607544ca04ca3fb9e94"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>This module implements a container type for frames and their propertylists. It differs from the cpl_frameset in these ways: 1) A propertylist can be associated to each frame 2) Access by index is a O(1)-operation 3) It can not be corrupted due to caching bugs (e.g. DFS02731).</p>
-<dl class="user"><dt><b>Synopsis:</b></dt><dd><div class="fragment"><pre class="fragment"><span class="preprocessor">     #include <irplib_framelist.h></span>
-</pre></div></dd></dl>
-<dl class="user"><dt><b>Example:</b></dt><dd><div class="fragment"><pre class="fragment">   <span class="keyword">static</span> <span class="keywordtype">int</span> rrecipe(cpl_frameset * frameset)
-   {
-      <span class="comment">// Error handling omitted for brevity</span>
-
-      irplib_framelist * allframes = <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(frameset);
-
-      <span class="comment">// Get raw frames of either type</span>
-      irplib_framelist * rawframes = <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(allframes,
-                                                                   <span class="stringliteral">"^("</span>
-                                                                   RAW_TYPE1 <span class="stringliteral">"|"</span>
-                                                                   RAW_TYPE2 <span class="stringliteral">")$"</span>,
-                                                                   CPL_FALSE);
-
-      <span class="comment">// Load the list of images</span>
-      cpl_imagelist * ilist = <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(rawframes,
-                                                              CPL_TYPE_FLOAT,
-                                                              0, 0);
-
-      <span class="keyword">const</span> cpl_propertylist * plist;
-
-      <span class="comment">// A regular expression of the FITS cards needed by this recipe</span>
-      <span class="keyword">const</span> <span class="keywordtype">char</span> cards[] = <span class="stringliteral">"^(RA|DEC|EXPTIME)$"</span>;
-      <span class="keywordtype">double</span> ra, dec;
-
-
-      <span class="comment">// Load the specified FITS cards for all raw frames</span>
-      <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(rawframes, 0, cards, CPL_FALSE));
-
-
-      <span class="comment">// Verify the presence and uniformity of the FITS cards</span>
-      <span class="keywordflow">if</span> (<a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(rawframes, <span class="stringliteral">"RA"</span>,
-                                     CPL_TYPE_DOUBLE, CPL_TRUE, 1e-5)) {
-         <span class="comment">// RA is missing in one or more headers</span>
-         <span class="comment">//  - or it varies by more than 1e-5</span>
-      }
-
-       <span class="keywordflow">if</span> (<a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(rawframes, <span class="stringliteral">"DEC"</span>,
-                                     CPL_TYPE_DOUBLE, CPL_TRUE, 1e-5)) {
-         <span class="comment">// DEC is missing in one or more headers</span>
-         <span class="comment">//  - or it varies by more than 1e-5</span>
-      }
-
-      <span class="comment">// Process the FITS cards </span>
-      plist = <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(rawframes, 0);
-
-      ra  = cpl_propertylist_get_double(plist, <span class="stringliteral">"RA"</span>);
-      dec = cpl_propertylist_get_double(plist, <span class="stringliteral">"DEC"</span>);
-
-      <span class="comment">// Object deallocation</span>
-      <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(allframes);
-      <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(rawframes);
-      cpl_imagelist_delete(ilist);
-
-      <span class="keywordflow">return</span> 0;
-
-   }
-</pre></div> </dd></dl>
+<dl class="section user"><dt>Synopsis:</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">     #include <irplib_framelist.h></span></div>
+</div><!-- fragment --></dd></dl>
+<dl class="section user"><dt>Example:</dt><dd><div class="fragment"><div class="line">   <span class="keyword">static</span> <span class="keywordtype">int</span> rrecipe(cpl_frameset * frameset)</div>
+<div class="line">   {</div>
+<div class="line">      <span class="comment">// Error handling omitted for brevity</span></div>
+<div class="line"></div>
+<div class="line">      irplib_framelist * allframes = <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(frameset);</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Get raw frames of either type</span></div>
+<div class="line">      irplib_framelist * rawframes = <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(allframes,</div>
+<div class="line">                                                                   <span class="stringliteral">"^("</span></div>
+<div class="line">                                                                   RAW_TYPE1 <span class="stringliteral">"|"</span></div>
+<div class="line">                                                                   RAW_TYPE2 <span class="stringliteral">")$"</span>,</div>
+<div class="line">                                                                   CPL_FALSE);</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Load the list of images</span></div>
+<div class="line">      cpl_imagelist * ilist = <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(rawframes,</div>
+<div class="line">                                                              CPL_TYPE_FLOAT,</div>
+<div class="line">                                                              0, 0);</div>
+<div class="line"></div>
+<div class="line">      <span class="keyword">const</span> cpl_propertylist * plist;</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// A regular expression of the FITS cards needed by this recipe</span></div>
+<div class="line">      <span class="keyword">const</span> <span class="keywordtype">char</span> cards[] = <span class="stringliteral">"^(RA|DEC|EXPTIME)$"</span>;</div>
+<div class="line">      <span class="keywordtype">double</span> ra, dec;</div>
+<div class="line"></div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Load the specified FITS cards for all raw frames</span></div>
+<div class="line">      <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(rawframes, 0, cards, CPL_FALSE));</div>
+<div class="line"></div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Verify the presence and uniformity of the FITS cards</span></div>
+<div class="line">      <span class="keywordflow">if</span> (<a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(rawframes, <span class="stringliteral">"RA"</span>,</div>
+<div class="line">                                     CPL_TYPE_DOUBLE, CPL_TRUE, 1e-5)) {</div>
+<div class="line">         <span class="comment">// RA is missing in one or more headers</span></div>
+<div class="line">         <span class="comment">//  - or it varies by more than 1e-5</span></div>
+<div class="line">      }</div>
+<div class="line"></div>
+<div class="line">       <span class="keywordflow">if</span> (<a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(rawframes, <span class="stringliteral">"DEC"</span>,</div>
+<div class="line">                                     CPL_TYPE_DOUBLE, CPL_TRUE, 1e-5)) {</div>
+<div class="line">         <span class="comment">// DEC is missing in one or more headers</span></div>
+<div class="line">         <span class="comment">//  - or it varies by more than 1e-5</span></div>
+<div class="line">      }</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Process the FITS cards </span></div>
+<div class="line">      plist = <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(rawframes, 0);</div>
+<div class="line"></div>
+<div class="line">      ra  = cpl_propertylist_get_double(plist, <span class="stringliteral">"RA"</span>);</div>
+<div class="line">      dec = cpl_propertylist_get_double(plist, <span class="stringliteral">"DEC"</span>);</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Object deallocation</span></div>
+<div class="line">      <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(allframes);</div>
+<div class="line">      <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(rawframes);</div>
+<div class="line">      cpl_imagelist_delete(ilist);</div>
+<div class="line"></div>
+<div class="line">      <span class="keywordflow">return</span> 0;</div>
+<div class="line"></div>
+<div class="line">   }</div>
+</div><!-- fragment --> </dd></dl>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga30cbfd003c6e6a6a42e610442f0b1bd1"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_cast" ref="ga30cbfd003c6e6a6a42e610442f0b1bd1" args="(const cpl_frameset *frameset)" -->
+<a class="anchor" id="ga30cbfd003c6e6a6a42e610442f0b1bd1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">irplib_framelist* irplib_framelist_cast </td>
           <td>(</td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>frameset</em></td>
-          <td> ) </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>frameset</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create an irplib_framelist from a cpl_framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>frameset</em> </td><td>The cpl_frameset </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">frameset</td><td>The cpl_frameset </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>1 newly allocated irplib_framelist or NULL on error </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The returned irplib_framelist must be deallocated using <a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete()</a> </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>1 newly allocated irplib_framelist or NULL on error </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The returned irplib_framelist must be deallocated using <a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete()</a> </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00209">209</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -148,96 +172,93 @@
 
 </div>
 </div>
-<a class="anchor" id="gafed15e9e259ebad923b710f5eb0196ac"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_contains" ref="gafed15e9e259ebad923b710f5eb0196ac" args="(const irplib_framelist *self, const char *key, cpl_type type, cpl_boolean is_equal, double fp_tol)" -->
+<a class="anchor" id="gafed15e9e259ebad923b710f5eb0196ac"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_contains </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>key</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>key</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_type </td>
-          <td class="paramname"> <em>type</em>, </td>
+          <td class="paramtype">cpl_type </td>
+          <td class="paramname"><em>type</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>is_equal</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>is_equal</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>fp_tol</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>fp_tol</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Verify that a property is present for all frames. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to verify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>key</em> </td><td>Property that must be present for all the frames </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>type</em> </td><td>The type the property must have, or CPL_TYPE_INVALID </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>is_equal</em> </td><td>If true, the value must be identical for all keys </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fp_tol</em> </td><td>The non-negative tolerance for floating point comparison </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to verify </td></tr>
+    <tr><td class="paramname">key</td><td>Property that must be present for all the frames </td></tr>
+    <tr><td class="paramname">type</td><td>The type the property must have, or CPL_TYPE_INVALID </td></tr>
+    <tr><td class="paramname">is_equal</td><td>If true, the value must be identical for all keys </td></tr>
+    <tr><td class="paramname">fp_tol</td><td>The non-negative tolerance for floating point comparison </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>It is allowed for a frame to have a NULL propertylist, in which case no check is performed. If type is CPL_TYPE_INVALID the check for a specific type is disabled. However, with is_equal true, all properties must nevertheless have the same type. fp_tol is used only when is_equal is true and the type is (explicitly or implicitly) CPL_TYPE_FLOAT or CPL_TYPE_DOUBLE.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>It is allowed for a frame to have a NULL propertylist, in which case no check is performed. If type is CPL_TYPE_INVALID the check for a specific type is disabled. However, with is_equal true, all properties must nevertheless have the same type. fp_tol is used only when is_equal is true and the type is (explicitly or implicitly) CPL_TYPE_FLOAT or CPL_TYPE_DOUBLE.</dd></dl>
 <p>To verify the presence of the MJD-OBS keyword: </p>
-<div class="fragment"><pre class="fragment">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"MJD-OBS"</span>, CPL_TYPE_INVALID,
-                                 CPL_FALSE, 0.0);
-</pre></div><p>To verify that the EXPTIME is identical to within 0.1 millisecond: </p>
-<div class="fragment"><pre class="fragment">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"EXPTIME"</span>, CPL_TYPE_INVALID,
-                                 CPL_TRUE, 0.0001);
-</pre></div><p>To verify that the keyword "ESO INS LAMP ST" is of type boolean and that it has the same value for all frames: </p>
-<div class="fragment"><pre class="fragment">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"ESO INS LAMP ST"</span>, CPL_TYPE_BOOL,
-                                 CPL_TRUE, 0.0);
-</pre></div> 
+<div class="fragment"><div class="line">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"MJD-OBS"</span>, CPL_TYPE_INVALID,</div>
+<div class="line">                                 CPL_FALSE, 0.0);</div>
+</div><!-- fragment --><p>To verify that the EXPTIME is identical to within 0.1 millisecond: </p>
+<div class="fragment"><div class="line">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"EXPTIME"</span>, CPL_TYPE_INVALID,</div>
+<div class="line">                                 CPL_TRUE, 0.0001);</div>
+</div><!-- fragment --><p>To verify that the keyword "ESO INS LAMP ST" is of type boolean and that it has the same value for all frames: </p>
+<div class="fragment"><div class="line">       <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(myframes, <span class="stringliteral">"ESO INS LAMP ST"</span>, CPL_TYPE_BOOL,</div>
+<div class="line">                                 CPL_TRUE, 0.0);</div>
+</div><!-- fragment --> 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00909">909</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga7a5159e9d27ef277df3fb55b331aaf26"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_delete" ref="ga7a5159e9d27ef277df3fb55b331aaf26" args="(irplib_framelist *self)" -->
+<a class="anchor" id="ga7a5159e9d27ef277df3fb55b331aaf26"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_framelist_delete </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em></td>
-          <td> ) </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Deallocate an irplib_framelist with its frames and properties. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>the framelist </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>the framelist </td></tr>
   </table>
   </dd>
 </dl>
@@ -250,30 +271,28 @@
 
 </div>
 </div>
-<a class="anchor" id="ga900ea254d9b2a2e4e3957360bbae4deb"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_empty" ref="ga900ea254d9b2a2e4e3957360bbae4deb" args="(irplib_framelist *self)" -->
+<a class="anchor" id="ga900ea254d9b2a2e4e3957360bbae4deb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_framelist_empty </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em></td>
-          <td> ) </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Erase all frames from a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify, or NULL </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify, or NULL </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00849">849</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -281,81 +300,79 @@
 
 </div>
 </div>
-<a class="anchor" id="gac66ea3ad4fc98c171f8b840229fe54ce"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_erase" ref="gac66ea3ad4fc98c171f8b840229fe54ce" args="(irplib_framelist *self, int pos)" -->
+<a class="anchor" id="gac66ea3ad4fc98c171f8b840229fe54ce"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_erase </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Erase a frame from a framelist and delete it and its propertylist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The non-empty framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position of frame to delete (0 for first). </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The non-empty framelist to modify </td></tr>
+    <tr><td class="paramname">pos</td><td>position of frame to delete (0 for first). </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00753">753</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga86d6746d1c19356417815f7df04c3396"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_extract" ref="ga86d6746d1c19356417815f7df04c3396" args="(const irplib_framelist *self, const char *tag)" -->
+<a class="anchor" id="ga86d6746d1c19356417815f7df04c3396"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">irplib_framelist* irplib_framelist_extract </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>tag</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>tag</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Extract the frames with the given tag from a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>A non-empty framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tag</em> </td><td>The frame tag to search for. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>A non-empty framelist </td></tr>
+    <tr><td class="paramname">tag</td><td>The frame tag to search for. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The newly created framelist or NULL on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_frameset_find </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>Any propertylists of the extracted frames are also extracted. It is an error if no matching frames are found, in which case an error is set. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The newly created framelist or NULL on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_frameset_find </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>Any propertylists of the extracted frames are also extracted. It is an error if no matching frames are found, in which case an error is set. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00290">290</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -363,48 +380,47 @@
 
 </div>
 </div>
-<a class="anchor" id="gace77e5ae75183a22a0e5af9dd9018b01"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_extract_regexp" ref="gace77e5ae75183a22a0e5af9dd9018b01" args="(const irplib_framelist *self, const char *regexp, cpl_boolean invert)" -->
+<a class="anchor" id="gace77e5ae75183a22a0e5af9dd9018b01"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">irplib_framelist* irplib_framelist_extract_regexp </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>regexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>regexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>invert</em></td><td> </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>invert</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Extract the frames with the given tag from a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>A non-empty framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>regexp</em> </td><td>The regular expression of frame tag(s) to search for. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>invert</em> </td><td>Boolean to invert the sense of the pattern matching. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>A non-empty framelist </td></tr>
+    <tr><td class="paramname">regexp</td><td>The regular expression of frame tag(s) to search for. </td></tr>
+    <tr><td class="paramname">invert</td><td>Boolean to invert the sense of the pattern matching. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The newly created framelist or NULL on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a> </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The newly created framelist or NULL on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a> </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00360">360</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -412,40 +428,39 @@
 
 </div>
 </div>
-<a class="anchor" id="gaba8797bbb8394f5574cd88b2f1984387"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_get" ref="gaba8797bbb8394f5574cd88b2f1984387" args="(irplib_framelist *self, int pos)" -->
+<a class="anchor" id="gaba8797bbb8394f5574cd88b2f1984387"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_frame* irplib_framelist_get </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the specified frame from the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The frame or NULL on error </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The frame or NULL on error </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00456">456</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -453,40 +468,39 @@
 
 </div>
 </div>
-<a class="anchor" id="ga93d8f903729ea4b6fcb3eca85935716f"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_get_const" ref="ga93d8f903729ea4b6fcb3eca85935716f" args="(const irplib_framelist *self, int pos)" -->
+<a class="anchor" id="ga93d8f903729ea4b6fcb3eca85935716f"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">const cpl_frame* irplib_framelist_get_const </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the specified frame from the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The frame or NULL on error </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The frame or NULL on error </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00473">473</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -494,41 +508,40 @@
 
 </div>
 </div>
-<a class="anchor" id="gab4858b1e9164f3a6cffcf40270f89032"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_get_propertylist" ref="gab4858b1e9164f3a6cffcf40270f89032" args="(irplib_framelist *self, int pos)" -->
+<a class="anchor" id="gab4858b1e9164f3a6cffcf40270f89032"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_propertylist* irplib_framelist_get_propertylist </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the propertylist of the specified frame in the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The propertylist or NULL on error </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The propertylist must first be created, for example with irplib_framelist_load_propertylist(self, pos, ...), otherwise an error occurs. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The propertylist or NULL on error </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The propertylist must first be created, for example with irplib_framelist_load_propertylist(self, pos, ...), otherwise an error occurs. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00529">529</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -536,41 +549,40 @@
 
 </div>
 </div>
-<a class="anchor" id="ga7700dadcf17db5b86409e6cef233af4c"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_get_propertylist_const" ref="ga7700dadcf17db5b86409e6cef233af4c" args="(const irplib_framelist *self, int pos)" -->
+<a class="anchor" id="ga7700dadcf17db5b86409e6cef233af4c"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">const cpl_propertylist* irplib_framelist_get_propertylist_const </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the propertylist of the specified frame in the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The propertylist or NULL on error </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The propertylist must first be created, for example with irplib_framelist_load_propertylist(self, pos, ...), otherwise an error occurs. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The propertylist or NULL on error </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The propertylist must first be created, for example with irplib_framelist_load_propertylist(self, pos, ...), otherwise an error occurs. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00552">552</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -578,92 +590,89 @@
 
 </div>
 </div>
-<a class="anchor" id="ga2518fce55112b5008cb119a126e593d7"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_get_size" ref="ga2518fce55112b5008cb119a126e593d7" args="(const irplib_framelist *self)" -->
+<a class="anchor" id="ga2518fce55112b5008cb119a126e593d7"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_framelist_get_size </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em></td>
-          <td> ) </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the size of a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The size or a negative number on error </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The size or a negative number on error </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00438">438</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga6ce5701e84915514975d09e0100c6005"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_load_propertylist" ref="ga6ce5701e84915514975d09e0100c6005" args="(irplib_framelist *self, int pos, int ind, const char *regexp, cpl_boolean invert)" -->
+<a class="anchor" id="ga6ce5701e84915514975d09e0100c6005"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_load_propertylist </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>ind</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>ind</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>regexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>regexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>invert</em></td><td> </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>invert</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Load the propertylist of the specified frame in the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first). </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ind</em> </td><td>The index of the date set to read </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>regexp</em> </td><td>The regular expression of properties to load </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>invert</em> </td><td>Boolean to invert the sense of the pattern matching. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first). </td></tr>
+    <tr><td class="paramname">ind</td><td>The index of the date set to read </td></tr>
+    <tr><td class="paramname">regexp</td><td>The regular expression of properties to load </td></tr>
+    <tr><td class="paramname">invert</td><td>Boolean to invert the sense of the pattern matching. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_propertylist_load_regexp() </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>Use a regexp of ".?" to load all properties. If a propertylist already exists it is deleted and replaced by the new one. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_propertylist_load_regexp() </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>Use a regexp of ".?" to load all properties. If a propertylist already exists it is deleted and replaced by the new one. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00583">583</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -671,56 +680,55 @@
 
 </div>
 </div>
-<a class="anchor" id="gaf9204681e0b6aa2d952c974dcbd8729d"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_load_propertylist_all" ref="gaf9204681e0b6aa2d952c974dcbd8729d" args="(irplib_framelist *self, int ind, const char *regexp, cpl_boolean invert)" -->
+<a class="anchor" id="gaf9204681e0b6aa2d952c974dcbd8729d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_load_propertylist_all </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>ind</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>ind</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>regexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>regexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>invert</em></td><td> </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>invert</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Load the propertylists of all frames in the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ind</em> </td><td>The index of the date set to read </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>regexp</em> </td><td>The regular expression of properties to load </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>invert</em> </td><td>Boolean to invert the sense of the pattern matching. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify </td></tr>
+    <tr><td class="paramname">ind</td><td>The index of the date set to read </td></tr>
+    <tr><td class="paramname">regexp</td><td>The regular expression of properties to load </td></tr>
+    <tr><td class="paramname">invert</td><td>Boolean to invert the sense of the pattern matching. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist()</a> </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>Use a regexp of "" to load all properties. If a frame already has a propertylist, it is not modified (and no propertylist is loaded for that frame). </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist()</a> </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>Use a regexp of "" to load all properties. If a frame already has a propertylist, it is not modified (and no propertylist is loaded for that frame). </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00638">638</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -728,25 +736,23 @@
 
 </div>
 </div>
-<a class="anchor" id="ga5b86add048651f73424d2542a04946a0"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_new" ref="ga5b86add048651f73424d2542a04946a0" args="(void)" -->
+<a class="anchor" id="ga5b86add048651f73424d2542a04946a0"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">irplib_framelist* irplib_framelist_new </td>
           <td>(</td>
-          <td class="paramtype">void </td>
-          <td class="paramname"></td>
-          <td> ) </td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create an empty framelist. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>1 newly allocated irplib_framelist </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The returned irplib_framelist must be deallocated using <a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete()</a> </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>1 newly allocated irplib_framelist </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The returned irplib_framelist must be deallocated using <a class="el" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete()</a> </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00178">178</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
@@ -754,48 +760,47 @@
 
 </div>
 </div>
-<a class="anchor" id="ga37e730f5627b4a0c7a81014f62421879"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_set" ref="ga37e730f5627b4a0c7a81014f62421879" args="(irplib_framelist *self, cpl_frame *frame, int pos)" -->
+<a class="anchor" id="ga37e730f5627b4a0c7a81014f62421879"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_set </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frame * </td>
-          <td class="paramname"> <em>frame</em>, </td>
+          <td class="paramtype">cpl_frame * </td>
+          <td class="paramname"><em>frame</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Add a frame to a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>frame</em> </td><td>The frame to insert into the framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first). </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify </td></tr>
+    <tr><td class="paramname">frame</td><td>The frame to insert into the framelist </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first). </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>It is an error to call cpl_frame_delete() on a frame that is inserted in a framelist.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>It is an error to call cpl_frame_delete() on a frame that is inserted in a framelist.</dd></dl>
 <p>It is allowed to specify the position equal to the size of the list. This will increment the size of the list. </p>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00714">714</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
@@ -804,226 +809,223 @@
 
 </div>
 </div>
-<a class="anchor" id="gada2c2e3f530a6dff763402eefceb5600"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_set_propertylist" ref="gada2c2e3f530a6dff763402eefceb5600" args="(irplib_framelist *self, int pos, const cpl_propertylist *list)" -->
+<a class="anchor" id="gada2c2e3f530a6dff763402eefceb5600"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_set_propertylist </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>list</em></td><td> </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>list</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Duplicate a propertylist to the specified position in the framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position (0 for first). </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>The propertylist to copy </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify </td></tr>
+    <tr><td class="paramname">pos</td><td>position (0 for first). </td></tr>
+    <tr><td class="paramname">list</td><td>The propertylist to copy </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00496">496</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gab11bb60e44dea926cd50ee80c7fbbd14"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_set_tag_all" ref="gab11bb60e44dea926cd50ee80c7fbbd14" args="(irplib_framelist *self, const char *tag)" -->
+<a class="anchor" id="gab11bb60e44dea926cd50ee80c7fbbd14"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_framelist_set_tag_all </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>tag</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>tag</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Set the tag of all frames in the list. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tag</em> </td><td>The new tag of the frames </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist to modify </td></tr>
+    <tr><td class="paramname">tag</td><td>The new tag of the frames </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant _cpl_error_code_ </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant <em>cpl_error_code</em> </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00682">682</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga771f14f97f80a9bd7176d323999c9bce"></a><!-- doxytag: member="irplib_framelist.c::irplib_framelist_unset" ref="ga771f14f97f80a9bd7176d323999c9bce" args="(irplib_framelist *self, int pos, cpl_propertylist **plist)" -->
+<a class="anchor" id="ga771f14f97f80a9bd7176d323999c9bce"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_frame* irplib_framelist_unset </td>
           <td>(</td>
-          <td class="paramtype">irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>pos</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_propertylist ** </td>
-          <td class="paramname"> <em>plist</em></td><td> </td>
+          <td class="paramtype">cpl_propertylist ** </td>
+          <td class="paramname"><em>plist</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Erase a frame from a framelist and return it to the caller. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The non-empty framelist to modify </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>position of frame to delete (0 for first). </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>plist</em> </td><td>Pointer to a propertylist or NULL </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The non-empty framelist to modify </td></tr>
+    <tr><td class="paramname">pos</td><td>position of frame to delete (0 for first). </td></tr>
+    <tr><td class="paramname">plist</td><td>Pointer to a propertylist or NULL </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
 <p>The specified frame is removed from the framelist and its size is decreased by one. The frame is returned to the caller. The caller may also retrieve the propertylist of the frame by passing a non-NULL pointer. On success this may point to NULL, if a propertylist was not created for the frame. If the caller passes a NULL-pointer for the propertylist, the propertylist is deallocated. </p>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00803">803</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gabeedce2770a1bc06c26c0891a41aa174"></a><!-- doxytag: member="irplib_framelist.c::irplib_frameset_cast" ref="gabeedce2770a1bc06c26c0891a41aa174" args="(const irplib_framelist *self)" -->
+<a class="anchor" id="gabeedce2770a1bc06c26c0891a41aa174"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_frameset* irplib_frameset_cast </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em></td>
-          <td> ) </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Create a CPL frameset from an irplib_framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>1 newly allocated cpl_frameset or NULL on error </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The returned cpl_frameset must be deallocated using cpl_frameset_delete() </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>1 newly allocated cpl_frameset or NULL on error </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The returned cpl_frameset must be deallocated using cpl_frameset_delete() </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l00251">251</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga0ff6c5e3b778c607544ca04ca3fb9e94"></a><!-- doxytag: member="irplib_framelist.c::irplib_imagelist_load_framelist" ref="ga0ff6c5e3b778c607544ca04ca3fb9e94" args="(const irplib_framelist *self, cpl_type pixeltype, int planenum, int extnum)" -->
+<a class="anchor" id="ga0ff6c5e3b778c607544ca04ca3fb9e94"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_imagelist* irplib_imagelist_load_framelist </td>
           <td>(</td>
-          <td class="paramtype">const irplib_framelist * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const irplib_framelist * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_type </td>
-          <td class="paramname"> <em>pixeltype</em>, </td>
+          <td class="paramtype">cpl_type </td>
+          <td class="paramname"><em>pixeltype</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>planenum</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>planenum</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>extnum</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>extnum</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Load an imagelist from a framelist. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The framelist </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pixeltype</em> </td><td>The required type of the pixels in the images </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>planenum</em> </td><td>The (non-negative ) plane number </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>extnum</em> </td><td>The non-negative extension (0 for primary data unit) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The framelist </td></tr>
+    <tr><td class="paramname">pixeltype</td><td>The required type of the pixels in the images </td></tr>
+    <tr><td class="paramname">planenum</td><td>The (non-negative ) plane number </td></tr>
+    <tr><td class="paramname">extnum</td><td>The non-negative extension (0 for primary data unit) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The loaded list of images or NULL on error. </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_image_load() </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The returned cpl_imagelist must be deallocated using cpl_imagelist_delete() </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The loaded list of images or NULL on error. </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_image_load() </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The returned cpl_imagelist must be deallocated using cpl_imagelist_delete() </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__framelist_8c_source.html#l01052">1052</a> of file <a class="el" href="irplib__framelist_8c_source.html">irplib_framelist.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__oddeven.html b/html/group__irplib__oddeven.html
index f003ff7..42cc2a6 100644
--- a/html/group__irplib__oddeven.html
+++ b/html/group__irplib__oddeven.html
@@ -2,99 +2,126 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Odd/Even column effect correction</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Odd/Even column effect correction</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Odd/Even column effect correction</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505">irplib_oddeven_monitor</a> (const cpl_image *in, int iquad, double *r_even)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Estimate the odd/even rate in an image quadrant.  <a href="#gade0423dfae726cc1ffec66a24e376505"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95">irplib_oddeven_correct</a> (const cpl_image *in)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Correct the odd/even in an image.  <a href="#ga7f7dafc1436a0aa2617048e1ada84e95"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gade0423dfae726cc1ffec66a24e376505"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505">irplib_oddeven_monitor</a> (const cpl_image *in, int iquad, double *r_even)</td></tr>
+<tr class="memdesc:gade0423dfae726cc1ffec66a24e376505"><td class="mdescLeft"> </td><td class="mdescRight">Estimate the odd/even rate in an image quadrant.  <a href="#gade0423dfae726cc1ffec66a24e376505"></a><br/></td></tr>
+<tr class="memitem:ga7f7dafc1436a0aa2617048e1ada84e95"><td class="memItemLeft" align="right" valign="top">cpl_image * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95">irplib_oddeven_correct</a> (const cpl_image *in)</td></tr>
+<tr class="memdesc:ga7f7dafc1436a0aa2617048e1ada84e95"><td class="mdescLeft"> </td><td class="mdescRight">Correct the odd/even in an image.  <a href="#ga7f7dafc1436a0aa2617048e1ada84e95"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga7f7dafc1436a0aa2617048e1ada84e95"></a><!-- doxytag: member="irplib_oddeven.c::irplib_oddeven_correct" ref="ga7f7dafc1436a0aa2617048e1ada84e95" args="(const cpl_image *in)" -->
+<a class="anchor" id="ga7f7dafc1436a0aa2617048e1ada84e95"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_image* irplib_oddeven_correct </td>
           <td>(</td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>in</em></td>
-          <td> ) </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>in</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Correct the odd/even in an image. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>in</em> </td><td>the inpute image </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in</td><td>the inpute image </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the corrected image or NULL on error case </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the corrected image or NULL on error case </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__oddeven_8c_source.html#l00152">152</a> of file <a class="el" href="irplib__oddeven_8c_source.html">irplib_oddeven.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gade0423dfae726cc1ffec66a24e376505"></a><!-- doxytag: member="irplib_oddeven.c::irplib_oddeven_monitor" ref="gade0423dfae726cc1ffec66a24e376505" args="(const cpl_image *in, int iquad, double *r_even)" -->
+<a class="anchor" id="gade0423dfae726cc1ffec66a24e376505"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_oddeven_monitor </td>
           <td>(</td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>in</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>in</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>iquad</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>iquad</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>r_even</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>r_even</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Estimate the odd/even rate in an image quadrant. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>in</em> </td><td>the inpute image </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>iquad</em> </td><td>the quadrant (ll=1, lr=2, ul=3, ur=4, all=0) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>r_even</em> </td><td>the median of even columns / median of all columns </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in</td><td>the inpute image </td></tr>
+    <tr><td class="paramname">iquad</td><td>the quadrant (ll=1, lr=2, ul=3, ur=4, all=0) </td></tr>
+    <tr><td class="paramname">r_even</td><td>the median of even columns / median of all columns </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if ok, -1 otherwise </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if ok, -1 otherwise </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__oddeven_8c_source.html#l00065">65</a> of file <a class="el" href="irplib__oddeven_8c_source.html">irplib_oddeven.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__plugin.html b/html/group__irplib__plugin.html
index 76f559c..bb84398 100644
--- a/html/group__irplib__plugin.html
+++ b/html/group__irplib__plugin.html
@@ -2,20 +2,44 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Irplib plugin functionality</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Irplib plugin functionality</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Irplib plugin functionality</div>  </div>
+</div><!--header-->
+<div class="contents">
 <p>This module provides a macro and a unit test function for <em>irplib_plugin</em>.</p>
-<div class="fragment"><pre class="fragment"><span class="preprocessor">   #include "irplib_plugin.h"</span>
-</pre></div> </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div class="fragment"><div class="line"><span class="preprocessor">     #include "irplib_plugin.h"</span></div>
+</div><!-- fragment --> </div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__polynomial.html b/html/group__irplib__polynomial.html
index e3678fe..63922ee 100644
--- a/html/group__irplib__polynomial.html
+++ b/html/group__irplib__polynomial.html
@@ -2,67 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: 1D-Polynomial roots</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">1D-Polynomial roots</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>1D-Polynomial roots</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853">irplib_polynomial_add</a> (cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Add two polynomials of the same dimension.  <a href="#ga90e13f05c9addc584f154279681d1853"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084">irplib_polynomial_subtract</a> (cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Subtract two polynomials of the same dimension.  <a href="#ga0e83ae3c9e7accb70fdfe1aca030e084"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786">irplib_polynomial_multiply_scalar</a> (cpl_polynomial *self, const cpl_polynomial *other, double factor)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Multiply a polynomial with a scalar.  <a href="#ga55c030413e6ef112753b280ad5213786"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385">irplib_polynomial_solve_1d_all</a> (const cpl_polynomial *self, cpl_vector *roots, cpl_size *preal)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute all n roots of p(x) = 0, where p(x) is of degree n, n > 0.  <a href="#ga87e84d69eadbde803fce3c3cbdedf385"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga90e13f05c9addc584f154279681d1853"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853">irplib_polynomial_add</a> (cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)</td></tr>
+<tr class="memdesc:ga90e13f05c9addc584f154279681d1853"><td class="mdescLeft"> </td><td class="mdescRight">Add two polynomials of the same dimension.  <a href="#ga90e13f05c9addc584f154279681d1853"></a><br/></td></tr>
+<tr class="memitem:ga0e83ae3c9e7accb70fdfe1aca030e084"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084">irplib_polynomial_subtract</a> (cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)</td></tr>
+<tr class="memdesc:ga0e83ae3c9e7accb70fdfe1aca030e084"><td class="mdescLeft"> </td><td class="mdescRight">Subtract two polynomials of the same dimension.  <a href="#ga0e83ae3c9e7accb70fdfe1aca030e084"></a><br/></td></tr>
+<tr class="memitem:ga55c030413e6ef112753b280ad5213786"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786">irplib_polynomial_multiply_scalar</a> (cpl_polynomial *self, const cpl_polynomial *other, double factor)</td></tr>
+<tr class="memdesc:ga55c030413e6ef112753b280ad5213786"><td class="mdescLeft"> </td><td class="mdescRight">Multiply a polynomial with a scalar.  <a href="#ga55c030413e6ef112753b280ad5213786"></a><br/></td></tr>
+<tr class="memitem:ga87e84d69eadbde803fce3c3cbdedf385"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385">irplib_polynomial_solve_1d_all</a> (const cpl_polynomial *self, cpl_vector *roots, cpl_size *preal)</td></tr>
+<tr class="memdesc:ga87e84d69eadbde803fce3c3cbdedf385"><td class="mdescLeft"> </td><td class="mdescRight">Compute all n roots of p(x) = 0, where p(x) is of degree n, n > 0.  <a href="#ga87e84d69eadbde803fce3c3cbdedf385"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga90e13f05c9addc584f154279681d1853"></a><!-- doxytag: member="irplib_polynomial.c::irplib_polynomial_add" ref="ga90e13f05c9addc584f154279681d1853" args="(cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)" -->
+<a class="anchor" id="ga90e13f05c9addc584f154279681d1853"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_add </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>first</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>first</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>second</em></td><td> </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>second</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Add two polynomials of the same dimension. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The polynomial to hold the result </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>The 1st polynomial to add </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>second</em> </td><td>The 2nd polynomial to add </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The polynomial to hold the result </td></tr>
+    <tr><td class="paramname">first</td><td>The 1st polynomial to add </td></tr>
+    <tr><td class="paramname">second</td><td>The 2nd polynomial to add </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>self may be passed also as first and/or second</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>self may be passed also as first and/or second</dd></dl>
 <p>Possible CPL error code set in this function:</p>
 <ul>
 <li>CPL_ERROR_NULL_INPUT if an input pointer is NULL</li>
@@ -74,47 +100,46 @@
 
 </div>
 </div>
-<a class="anchor" id="ga55c030413e6ef112753b280ad5213786"></a><!-- doxytag: member="irplib_polynomial.c::irplib_polynomial_multiply_scalar" ref="ga55c030413e6ef112753b280ad5213786" args="(cpl_polynomial *self, const cpl_polynomial *other, double factor)" -->
+<a class="anchor" id="ga55c030413e6ef112753b280ad5213786"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_multiply_scalar </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>other</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>other</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>factor</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>factor</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Multiply a polynomial with a scalar. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The polynomial to hold the result </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>other</em> </td><td>The polynomial to scale, may equal self </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>factor</em> </td><td>The factor to multiply with </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The polynomial to hold the result </td></tr>
+    <tr><td class="paramname">other</td><td>The polynomial to scale, may equal self </td></tr>
+    <tr><td class="paramname">factor</td><td>The factor to multiply with </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
 <p>Possible CPL error code set in this function:</p>
 <ul>
 <li>CPL_ERROR_NULL_INPUT if an input pointer is NULL</li>
@@ -125,47 +150,46 @@
 
 </div>
 </div>
-<a class="anchor" id="ga87e84d69eadbde803fce3c3cbdedf385"></a><!-- doxytag: member="irplib_polynomial.c::irplib_polynomial_solve_1d_all" ref="ga87e84d69eadbde803fce3c3cbdedf385" args="(const cpl_polynomial *self, cpl_vector *roots, cpl_size *preal)" -->
+<a class="anchor" id="ga87e84d69eadbde803fce3c3cbdedf385"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_solve_1d_all </td>
           <td>(</td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>roots</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>roots</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_size * </td>
-          <td class="paramname"> <em>preal</em></td><td> </td>
+          <td class="paramtype">cpl_size * </td>
+          <td class="paramname"><em>preal</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Compute all n roots of p(x) = 0, where p(x) is of degree n, n > 0. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The 1D-polynomial </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>roots</em> </td><td>A pre-allocated vector of length n to hold the roots </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>preal</em> </td><td>The number of real roots found, or undefined on error </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The 1D-polynomial </td></tr>
+    <tr><td class="paramname">roots</td><td>A pre-allocated vector of length n to hold the roots </td></tr>
+    <tr><td class="paramname">preal</td><td>The number of real roots found, or undefined on error </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code</dd></dl>
 <p>The *preal real roots are stored first in ascending order, then follows for each pair of complex conjugate roots, the real and imaginary parts of the root in the positive imaginary half-plane, for example for a 3rd degree polynomial with 1 real root, the roots are represented as: x0 = v0 x1 = v1 + i v2 x2 = v1 - i v2, where v0, v1, v2 are the elements of the roots vector.</p>
 <p>Possible CPL error code set in this function:</p>
 <ul>
@@ -181,48 +205,47 @@
 
 </div>
 </div>
-<a class="anchor" id="ga0e83ae3c9e7accb70fdfe1aca030e084"></a><!-- doxytag: member="irplib_polynomial.c::irplib_polynomial_subtract" ref="ga0e83ae3c9e7accb70fdfe1aca030e084" args="(cpl_polynomial *self, const cpl_polynomial *first, const cpl_polynomial *second)" -->
+<a class="anchor" id="ga0e83ae3c9e7accb70fdfe1aca030e084"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_subtract </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>first</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>first</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>second</em></td><td> </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>second</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Subtract two polynomials of the same dimension. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The polynomial to hold the result </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>The polynomial to subtract from </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>second</em> </td><td>The polynomial to subtract </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The polynomial to hold the result </td></tr>
+    <tr><td class="paramname">first</td><td>The polynomial to subtract from </td></tr>
+    <tr><td class="paramname">second</td><td>The polynomial to subtract </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>self may be passed also as first and/or second</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>self may be passed also as first and/or second</dd></dl>
 <p>Possible CPL error code set in this function:</p>
 <ul>
 <li>CPL_ERROR_NULL_INPUT if an input pointer is NULL</li>
@@ -234,9 +257,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__ppm.html b/html/group__irplib__ppm.html
index 05e329c..db7aa20 100644
--- a/html/group__irplib__ppm.html
+++ b/html/group__irplib__ppm.html
@@ -2,102 +2,128 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Point pattern matching</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Point pattern matching</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Point pattern matching</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_polynomial * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d">irplib_ppm_engine</a> (const cpl_vector *spectrum, const cpl_bivector *lines_catalog, const cpl_polynomial *poly_init, double slitw, double fwhm, double thresh, int degree, int doplot, cpl_table **tab_infos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The Wavelength Calibration using PPM.  <a href="#ga9b49569fb0bd55977b533407c1ad956d"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9b49569fb0bd55977b533407c1ad956d"><td class="memItemLeft" align="right" valign="top">cpl_polynomial * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d">irplib_ppm_engine</a> (const cpl_vector *spectrum, const cpl_bivector *lines_catalog, const cpl_polynomial *poly_init, double slitw, double fwhm, double thresh, int degree, int doplot, cpl_table **tab_infos)</td></tr>
+<tr class="memdesc:ga9b49569fb0bd55977b533407c1ad956d"><td class="mdescLeft"> </td><td class="mdescRight">The Wavelength Calibration using PPM.  <a href="#ga9b49569fb0bd55977b533407c1ad956d"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga9b49569fb0bd55977b533407c1ad956d"></a><!-- doxytag: member="irplib_ppm.c::irplib_ppm_engine" ref="ga9b49569fb0bd55977b533407c1ad956d" args="(const cpl_vector *spectrum, const cpl_bivector *lines_catalog, const cpl_polynomial *poly_init, double slitw, double fwhm, double thresh, int degree, int doplot, cpl_table **tab_infos)" -->
+<a class="anchor" id="ga9b49569fb0bd55977b533407c1ad956d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_polynomial* irplib_ppm_engine </td>
           <td>(</td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>spectrum</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>spectrum</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_bivector * </td>
-          <td class="paramname"> <em>lines_catalog</em>, </td>
+          <td class="paramtype">const cpl_bivector * </td>
+          <td class="paramname"><em>lines_catalog</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>poly_init</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>poly_init</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>slitw</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>slitw</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>fwhm</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>fwhm</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>thresh</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>thresh</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>degree</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>degree</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>doplot</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>doplot</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_table ** </td>
-          <td class="paramname"> <em>tab_infos</em></td><td> </td>
+          <td class="paramtype">cpl_table ** </td>
+          <td class="paramname"><em>tab_infos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The Wavelength Calibration using PPM. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>spectrum</em> </td><td>The spectrum vector </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lines_catalog</em> </td><td>The lines catalog </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>poly_init</em> </td><td>Polynomial with the initial guess </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slitw</em> </td><td>The slit width </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fwhm</em> </td><td>The spectral FWHM [pixel] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>thresh</em> </td><td>The threshold for lines detection </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>degree</em> </td><td>The polynomial degree </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>doplot</em> </td><td>Plotting level (zero for none) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tab_infos</em> </td><td>The computed solution table or NULL (computed) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">spectrum</td><td>The spectrum vector </td></tr>
+    <tr><td class="paramname">lines_catalog</td><td>The lines catalog </td></tr>
+    <tr><td class="paramname">poly_init</td><td>Polynomial with the initial guess </td></tr>
+    <tr><td class="paramname">slitw</td><td>The slit width </td></tr>
+    <tr><td class="paramname">fwhm</td><td>The spectral FWHM [pixel] </td></tr>
+    <tr><td class="paramname">thresh</td><td>The threshold for lines detection </td></tr>
+    <tr><td class="paramname">degree</td><td>The polynomial degree </td></tr>
+    <tr><td class="paramname">doplot</td><td>Plotting level (zero for none) </td></tr>
+    <tr><td class="paramname">tab_infos</td><td>The computed solution table or NULL (computed) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the polynomial solution or NULL in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the polynomial solution or NULL in error case</dd></dl>
 <p>The returned table must be deallocated with cpl_table_delete(). The returned polynomial must be deallocated with cpl_polynomial_delete(). </p>
 
 <p>Definition at line <a class="el" href="irplib__ppm_8c_source.html#l00084">84</a> of file <a class="el" href="irplib__ppm_8c_source.html">irplib_ppm.c</a>.</p>
@@ -106,9 +132,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__slitpos.html b/html/group__irplib__slitpos.html
index 4a042e6..ecb0d3d 100644
--- a/html/group__irplib__slitpos.html
+++ b/html/group__irplib__slitpos.html
@@ -2,60 +2,86 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for slit position</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for slit position</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for slit position</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba">irplib_slitpos_analysis</a> (const cpl_image *imslit, int slit_max_width, double *slit_flux)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Detect the slit position, detect its ends, extract a thin image containing only the slit and find its edges.  <a href="#ga632b21eccf3d4bb48426cdd23f321cba"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga632b21eccf3d4bb48426cdd23f321cba"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba">irplib_slitpos_analysis</a> (const cpl_image *imslit, int slit_max_width, double *slit_flux)</td></tr>
+<tr class="memdesc:ga632b21eccf3d4bb48426cdd23f321cba"><td class="mdescLeft"> </td><td class="mdescRight">Detect the slit position, detect its ends, extract a thin image containing only the slit and find its edges.  <a href="#ga632b21eccf3d4bb48426cdd23f321cba"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga632b21eccf3d4bb48426cdd23f321cba"></a><!-- doxytag: member="irplib_slitpos.c::irplib_slitpos_analysis" ref="ga632b21eccf3d4bb48426cdd23f321cba" args="(const cpl_image *imslit, int slit_max_width, double *slit_flux)" -->
+<a class="anchor" id="ga632b21eccf3d4bb48426cdd23f321cba"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_slitpos_analysis </td>
           <td>(</td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>imslit</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>imslit</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>slit_max_width</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>slit_max_width</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>slit_flux</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>slit_flux</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Detect the slit position, detect its ends, extract a thin image containing only the slit and find its edges. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>imslit</em> </td><td>Input image with a vertical slit </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slit_max_width</em> </td><td>Maximum slit width </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slit_flux</em> </td><td>Some of the pixels values of the slit </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">imslit</td><td>Input image with a vertical slit </td></tr>
+    <tr><td class="paramname">slit_max_width</td><td>Maximum slit width </td></tr>
+    <tr><td class="paramname">slit_flux</td><td>Some of the pixels values of the slit </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the table with the slit position or NULL on error</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the table with the slit position or NULL on error</dd></dl>
 <p>On success the created table contains rows of four columns labeled: "SLIT_Y" (int) "SLIT_LEFT" (double) "SLIT_CENTER" (double) "SLIT_RIGHT" (double)</p>
 <p>This function returns a table with 3 columns:</p>
 <ul>
@@ -72,9 +98,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__spectrum.html b/html/group__irplib__spectrum.html
index 271c515..7775886 100644
--- a/html/group__irplib__spectrum.html
+++ b/html/group__irplib__spectrum.html
@@ -2,82 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for LSS spectra</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for LSS spectra</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for LSS spectra</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0">irplib_spectrum_find_brightest</a> (const cpl_image *in, int offset, spec_shadows shadows, double min_bright, int orient, double *pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Finds the brightest spectrum in an image.  <a href="#ga9ac928ba9a48e864b56e921c970638c0"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961">irplib_spectrum_detect_peaks</a> (const cpl_vector *in, int fwhm, double sigma, int display, cpl_vector **fwhms_out, cpl_vector **areas_out)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Detect the brightest features in a spectrum.  <a href="#ga1885902c29d7383674c85e2c3d935961"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9ac928ba9a48e864b56e921c970638c0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0">irplib_spectrum_find_brightest</a> (const cpl_image *in, int offset, spec_shadows shadows, double min_bright, int orient, double *pos)</td></tr>
+<tr class="memdesc:ga9ac928ba9a48e864b56e921c970638c0"><td class="mdescLeft"> </td><td class="mdescRight">Finds the brightest spectrum in an image.  <a href="#ga9ac928ba9a48e864b56e921c970638c0"></a><br/></td></tr>
+<tr class="memitem:ga1885902c29d7383674c85e2c3d935961"><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961">irplib_spectrum_detect_peaks</a> (const cpl_vector *in, int fwhm, double sigma, int display, cpl_vector **fwhms_out, cpl_vector **areas_out)</td></tr>
+<tr class="memdesc:ga1885902c29d7383674c85e2c3d935961"><td class="mdescLeft"> </td><td class="mdescRight">Detect the brightest features in a spectrum.  <a href="#ga1885902c29d7383674c85e2c3d935961"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga1885902c29d7383674c85e2c3d935961"></a><!-- doxytag: member="irplib_spectrum.c::irplib_spectrum_detect_peaks" ref="ga1885902c29d7383674c85e2c3d935961" args="(const cpl_vector *in, int fwhm, double sigma, int display, cpl_vector **fwhms_out, cpl_vector **areas_out)" -->
+<a class="anchor" id="ga1885902c29d7383674c85e2c3d935961"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_vector* irplib_spectrum_detect_peaks </td>
           <td>(</td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>in</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>in</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>fwhm</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fwhm</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>sigma</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>sigma</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>display</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>display</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_vector ** </td>
-          <td class="paramname"> <em>fwhms_out</em>, </td>
+          <td class="paramtype">cpl_vector ** </td>
+          <td class="paramname"><em>fwhms_out</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_vector ** </td>
-          <td class="paramname"> <em>areas_out</em></td><td> </td>
+          <td class="paramtype">cpl_vector ** </td>
+          <td class="paramname"><em>areas_out</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Detect the brightest features in a spectrum. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>in</em> </td><td>the spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fwhm</em> </td><td>the FWHM used for the lines convolution </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>display</em> </td><td>the flag to display </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fwhms</em> </td><td>the fwhms of the detected lines </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>areas</em> </td><td>the areas under the detected lines </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in</td><td>the spectrum </td></tr>
+    <tr><td class="paramname">fwhm</td><td>the FWHM used for the lines convolution </td></tr>
+    <tr><td class="paramname">display</td><td>the flag to display </td></tr>
+    <tr><td class="paramname">fwhms</td><td>the fwhms of the detected lines </td></tr>
+    <tr><td class="paramname">areas</td><td>the areas under the detected lines </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The bright lines positions or NULL in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The bright lines positions or NULL in error case</dd></dl>
 <p>The lines positions are in pixels (first pixel is 1) </p>
 
 <p>Definition at line <a class="el" href="irplib__spectrum_8c_source.html#l00273">273</a> of file <a class="el" href="irplib__spectrum_8c_source.html">irplib_spectrum.c</a>.</p>
@@ -86,77 +112,79 @@
 
 </div>
 </div>
-<a class="anchor" id="ga9ac928ba9a48e864b56e921c970638c0"></a><!-- doxytag: member="irplib_spectrum.c::irplib_spectrum_find_brightest" ref="ga9ac928ba9a48e864b56e921c970638c0" args="(const cpl_image *in, int offset, spec_shadows shadows, double min_bright, int orient, double *pos)" -->
+<a class="anchor" id="ga9ac928ba9a48e864b56e921c970638c0"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_spectrum_find_brightest </td>
           <td>(</td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>in</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>in</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>offset</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>offset</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">spec_shadows </td>
-          <td class="paramname"> <em>shadows</em>, </td>
+          <td class="paramtype">spec_shadows </td>
+          <td class="paramname"><em>shadows</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>min_bright</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>min_bright</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>orient</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>orient</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>pos</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Finds the brightest spectrum in an image. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>in</em> </td><td>spectral image with spectra </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>offset</em> </td><td>the diff. between pos. and neg. spectra </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>shadows</em> </td><td>the spectral shadows </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>min_bright</em> </td><td>min. bright. required for a spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>orient</em> </td><td>1 for vertical spec. 0 for horizontal ones </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pos</em> </td><td>the computed spectrum position (1->npix) </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">in</td><td>spectral image with spectra </td></tr>
+    <tr><td class="paramname">offset</td><td>the diff. between pos. and neg. spectra </td></tr>
+    <tr><td class="paramname">shadows</td><td>the spectral shadows </td></tr>
+    <tr><td class="paramname">min_bright</td><td>min. bright. required for a spectrum </td></tr>
+    <tr><td class="paramname">orient</td><td>1 for vertical spec. 0 for horizontal ones </td></tr>
+    <tr><td class="paramname">pos</td><td>the computed spectrum position (1->npix) </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>int 0 if ok, -1 in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>int 0 if ok, -1 in error case</dd></dl>
 <p>Finds the brightest spectrum in an image by collapsing the image orthogonally to the spectrum orientation. Spectra are assumed to be horizontal for orient==0, vertical for 1 </p>
 
 <p>Definition at line <a class="el" href="irplib__spectrum_8c_source.html#l00093">93</a> of file <a class="el" href="irplib__spectrum_8c_source.html">irplib_spectrum.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__stdstar.html b/html/group__irplib__stdstar.html
index 9c043ba..e9dcd12 100644
--- a/html/group__irplib__stdstar.html
+++ b/html/group__irplib__stdstar.html
@@ -2,61 +2,86 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions for standard stars</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Functions for standard stars</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Functions for standard stars</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d">irplib_stdstar_write_catalogs</a> (cpl_frameset *set_in, const cpl_frameset *set_raw, const char *recipe_name, const char *pro_cat, const char *pro_type, const char *package_name, const char *ins_name, cpl_table *(*convert_ascii_table)(const char *))</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Write the ASCII catalogs as FITS files.  <a href="#gac18c92be3d3c96ba57804b074a2abb7d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1">irplib_stdstar_load_catalog</a> (const char *filename, const char *ext_name)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Load the FITS catalog in a table.  <a href="#ga1690bd84c24e905e384b8f725bf7aff1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc">irplib_stdstar_check_columns_exist</a> (const cpl_table *catal)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Check that the table has the relevant columns of a stdstar table.  <a href="#ga2dbe2031bf6d669778dca42f6c343efc"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8">irplib_stdstar_select_stars_dist</a> (cpl_table *cat, double ra, double dec, double dist)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Select the stars that are within a given distance.  <a href="#ga080e06303f3f83a91959ac01381dc4e8"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab">irplib_stdstar_select_stars_mag</a> (cpl_table *cat, const char *mag_colname)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Select the stars that have a known magnitude.  <a href="#ga28316d8f0619bdbd0040b1f56799e7ab"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5">irplib_stdstar_find_closest</a> (const cpl_table *cat, double ra, double dec)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the closest star.  <a href="#ga36b4c90fd548dd0c00afe97b17a558e5"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027">irplib_stdstar_find_star</a> (const char *catfile, double ra, double dec, const char *band, const char *catname, double *mag, char **name, char **type, char **usedcatname, double *star_ra, double *star_dec, double dist_am)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the closest star to ra, dec in the catalog.  <a href="#ga4d69ae957de04b1769ac225f12834027"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba">irplib_stdstar_get_conversion</a> (const cpl_bivector *spec, double dit, double surface, double gain, double mag)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the conversion.  <a href="#ga93b46d8ac857a0d0fdc781b56a91a8ba"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab">irplib_stdstar_get_mag_zero</a> (const cpl_bivector *sed, const cpl_vector *waves, double cent_wl)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the 0 magnitude spectrum.  <a href="#ga6e68e6a9d0bbb41ef717234b9f289dab"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_bivector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea">irplib_stdstar_get_sed</a> (const char *seds_file, const char *sptype)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get the SED.  <a href="#gabbad67ff18cb901914caa9e864969dea"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac18c92be3d3c96ba57804b074a2abb7d"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d">irplib_stdstar_write_catalogs</a> (cpl_frameset *set_in, const cpl_frameset *set_raw, const char *recipe_name, const char *pro_cat, const char *pro_type, const char *package_name, const char *ins_name, cpl_table *(*convert_ascii_table)( [...]
+<tr class="memdesc:gac18c92be3d3c96ba57804b074a2abb7d"><td class="mdescLeft"> </td><td class="mdescRight">Write the ASCII catalogs as FITS files.  <a href="#gac18c92be3d3c96ba57804b074a2abb7d"></a><br/></td></tr>
+<tr class="memitem:ga1690bd84c24e905e384b8f725bf7aff1"><td class="memItemLeft" align="right" valign="top">cpl_table * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1">irplib_stdstar_load_catalog</a> (const char *filename, const char *ext_name)</td></tr>
+<tr class="memdesc:ga1690bd84c24e905e384b8f725bf7aff1"><td class="mdescLeft"> </td><td class="mdescRight">Load the FITS catalog in a table.  <a href="#ga1690bd84c24e905e384b8f725bf7aff1"></a><br/></td></tr>
+<tr class="memitem:ga2dbe2031bf6d669778dca42f6c343efc"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc">irplib_stdstar_check_columns_exist</a> (const cpl_table *catal)</td></tr>
+<tr class="memdesc:ga2dbe2031bf6d669778dca42f6c343efc"><td class="mdescLeft"> </td><td class="mdescRight">Check that the table has the relevant columns of a stdstar table.  <a href="#ga2dbe2031bf6d669778dca42f6c343efc"></a><br/></td></tr>
+<tr class="memitem:ga080e06303f3f83a91959ac01381dc4e8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8">irplib_stdstar_select_stars_dist</a> (cpl_table *cat, double ra, double dec, double dist)</td></tr>
+<tr class="memdesc:ga080e06303f3f83a91959ac01381dc4e8"><td class="mdescLeft"> </td><td class="mdescRight">Select the stars that are within a given distance.  <a href="#ga080e06303f3f83a91959ac01381dc4e8"></a><br/></td></tr>
+<tr class="memitem:ga28316d8f0619bdbd0040b1f56799e7ab"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab">irplib_stdstar_select_stars_mag</a> (cpl_table *cat, const char *mag_colname)</td></tr>
+<tr class="memdesc:ga28316d8f0619bdbd0040b1f56799e7ab"><td class="mdescLeft"> </td><td class="mdescRight">Select the stars that have a known magnitude.  <a href="#ga28316d8f0619bdbd0040b1f56799e7ab"></a><br/></td></tr>
+<tr class="memitem:ga36b4c90fd548dd0c00afe97b17a558e5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5">irplib_stdstar_find_closest</a> (const cpl_table *cat, double ra, double dec)</td></tr>
+<tr class="memdesc:ga36b4c90fd548dd0c00afe97b17a558e5"><td class="mdescLeft"> </td><td class="mdescRight">Find the closest star.  <a href="#ga36b4c90fd548dd0c00afe97b17a558e5"></a><br/></td></tr>
+<tr class="memitem:ga4d69ae957de04b1769ac225f12834027"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027">irplib_stdstar_find_star</a> (const char *catfile, double ra, double dec, const char *band, const char *catname, double *mag, char **name, char **type, char **usedcatname, double *star_ra, double *star_dec, double dist_am)</td></tr>
+<tr class="memdesc:ga4d69ae957de04b1769ac225f12834027"><td class="mdescLeft"> </td><td class="mdescRight">Find the closest star to ra, dec in the catalog.  <a href="#ga4d69ae957de04b1769ac225f12834027"></a><br/></td></tr>
+<tr class="memitem:ga93b46d8ac857a0d0fdc781b56a91a8ba"><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba">irplib_stdstar_get_conversion</a> (const cpl_bivector *spec, double dit, double surface, double gain, double mag)</td></tr>
+<tr class="memdesc:ga93b46d8ac857a0d0fdc781b56a91a8ba"><td class="mdescLeft"> </td><td class="mdescRight">Get the conversion.  <a href="#ga93b46d8ac857a0d0fdc781b56a91a8ba"></a><br/></td></tr>
+<tr class="memitem:ga6e68e6a9d0bbb41ef717234b9f289dab"><td class="memItemLeft" align="right" valign="top">cpl_vector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab">irplib_stdstar_get_mag_zero</a> (const cpl_bivector *sed, const cpl_vector *waves, double cent_wl)</td></tr>
+<tr class="memdesc:ga6e68e6a9d0bbb41ef717234b9f289dab"><td class="mdescLeft"> </td><td class="mdescRight">Get the 0 magnitude spectrum.  <a href="#ga6e68e6a9d0bbb41ef717234b9f289dab"></a><br/></td></tr>
+<tr class="memitem:gabbad67ff18cb901914caa9e864969dea"><td class="memItemLeft" align="right" valign="top">cpl_bivector * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea">irplib_stdstar_get_sed</a> (const char *seds_file, const char *sptype)</td></tr>
+<tr class="memdesc:gabbad67ff18cb901914caa9e864969dea"><td class="mdescLeft"> </td><td class="mdescRight">Get the SED.  <a href="#gabbad67ff18cb901914caa9e864969dea"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga2dbe2031bf6d669778dca42f6c343efc"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_check_columns_exist" ref="ga2dbe2031bf6d669778dca42f6c343efc" args="(const cpl_table *catal)" -->
+<a class="anchor" id="ga2dbe2031bf6d669778dca42f6c343efc"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_stdstar_check_columns_exist </td>
           <td>(</td>
-          <td class="paramtype">const cpl_table * </td>
-          <td class="paramname"> <em>catal</em></td>
-          <td> ) </td>
+          <td class="paramtype">const cpl_table * </td>
+          <td class="paramname"><em>catal</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Check that the table has the relevant columns of a stdstar table. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>catal</em> </td><td>Table with the catalogue </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">catal</td><td>Table with the catalogue </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE if the table has all the mandatory columns, a proper error code otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE if the table has all the mandatory columns, a proper error code otherwise</dd></dl>
 <p>The table is checked for the presence of the mandatory keywords </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00300">300</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
@@ -65,47 +90,46 @@
 
 </div>
 </div>
-<a class="anchor" id="ga36b4c90fd548dd0c00afe97b17a558e5"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_find_closest" ref="ga36b4c90fd548dd0c00afe97b17a558e5" args="(const cpl_table *cat, double ra, double dec)" -->
+<a class="anchor" id="ga36b4c90fd548dd0c00afe97b17a558e5"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_stdstar_find_closest </td>
           <td>(</td>
-          <td class="paramtype">const cpl_table * </td>
-          <td class="paramname"> <em>cat</em>, </td>
+          <td class="paramtype">const cpl_table * </td>
+          <td class="paramname"><em>cat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>ra</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>ra</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dec</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dec</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the closest star. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>cat</em> </td><td>the catalog </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ra</em> </td><td>RA pos </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dec</em> </td><td>DEC pos </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cat</td><td>the catalog </td></tr>
+    <tr><td class="paramname">ra</td><td>RA pos </td></tr>
+    <tr><td class="paramname">dec</td><td>DEC pos </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the index of the star in the table or -1 in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the index of the star in the table or -1 in error case</dd></dl>
 <p>Returns the index of the star that is closest to (ra,dec) </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00433">433</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
@@ -114,109 +138,108 @@
 
 </div>
 </div>
-<a class="anchor" id="ga4d69ae957de04b1769ac225f12834027"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_find_star" ref="ga4d69ae957de04b1769ac225f12834027" args="(const char *catfile, double ra, double dec, const char *band, const char *catname, double *mag, char **name, char **type, char **usedcatname, double *star_ra, double *star_dec, double dist_am)" -->
+<a class="anchor" id="ga4d69ae957de04b1769ac225f12834027"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_stdstar_find_star </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>catfile</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>catfile</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>ra</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>ra</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dec</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dec</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>band</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>band</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>catname</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>catname</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>mag</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>mag</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char ** </td>
-          <td class="paramname"> <em>name</em>, </td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char ** </td>
-          <td class="paramname"> <em>type</em>, </td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>type</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char ** </td>
-          <td class="paramname"> <em>usedcatname</em>, </td>
+          <td class="paramtype">char ** </td>
+          <td class="paramname"><em>usedcatname</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>star_ra</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>star_ra</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>star_dec</em>, </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>star_dec</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dist_am</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dist_am</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the closest star to ra, dec in the catalog. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>catfile</em> </td><td>the catalog file name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ra</em> </td><td>RA pos where to search </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dec</em> </td><td>DEC pos where to search </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>band</em> </td><td>the band name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>catname</em> </td><td>the searched catalog name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mag</em> </td><td>the computed magnitude (output) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>the star name (output) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>type</em> </td><td>the star type (output) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>star_ra</em> </td><td>the star RA from the catalog (output) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>star_dec</em> </td><td>the star DEC from the catalog (output) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dist_am</em> </td><td>the distance in arc minutes </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">catfile</td><td>the catalog file name </td></tr>
+    <tr><td class="paramname">ra</td><td>RA pos where to search </td></tr>
+    <tr><td class="paramname">dec</td><td>DEC pos where to search </td></tr>
+    <tr><td class="paramname">band</td><td>the band name </td></tr>
+    <tr><td class="paramname">catname</td><td>the searched catalog name </td></tr>
+    <tr><td class="paramname">mag</td><td>the computed magnitude (output) </td></tr>
+    <tr><td class="paramname">name</td><td>the star name (output) </td></tr>
+    <tr><td class="paramname">type</td><td>the star type (output) </td></tr>
+    <tr><td class="paramname">star_ra</td><td>the star RA from the catalog (output) </td></tr>
+    <tr><td class="paramname">star_dec</td><td>the star DEC from the catalog (output) </td></tr>
+    <tr><td class="paramname">dist_am</td><td>the distance in arc minutes </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE if ok or else the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE if ok or else the relevant CPL error code</dd></dl>
 <p>The closest star to ra, dec with defined magnitude is search in all the catalogues included in catfile. If catname is "all", all the catalogs are searched at once. The output pointers can be NULL if one is not interested in them. </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00501">501</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
@@ -225,187 +248,183 @@
 
 </div>
 </div>
-<a class="anchor" id="ga93b46d8ac857a0d0fdc781b56a91a8ba"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_get_conversion" ref="ga93b46d8ac857a0d0fdc781b56a91a8ba" args="(const cpl_bivector *spec, double dit, double surface, double gain, double mag)" -->
+<a class="anchor" id="ga93b46d8ac857a0d0fdc781b56a91a8ba"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_vector* irplib_stdstar_get_conversion </td>
           <td>(</td>
-          <td class="paramtype">const cpl_bivector * </td>
-          <td class="paramname"> <em>spec</em>, </td>
+          <td class="paramtype">const cpl_bivector * </td>
+          <td class="paramname"><em>spec</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dit</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dit</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>surface</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>surface</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>gain</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>gain</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>mag</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>mag</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the conversion. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>spec</em> </td><td>the extracted spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dit</em> </td><td>the DIT (in sec) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>surface</em> </td><td>the surface of the miror (in sq cm) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>gain</em> </td><td>the gain of the instrument (ISAAC=4.5, SINFONI=2.42) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mag</em> </td><td>the star magnitude </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">spec</td><td>the extracted spectrum </td></tr>
+    <tr><td class="paramname">dit</td><td>the DIT (in sec) </td></tr>
+    <tr><td class="paramname">surface</td><td>the surface of the miror (in sq cm) </td></tr>
+    <tr><td class="paramname">gain</td><td>the gain of the instrument (ISAAC=4.5, SINFONI=2.42) </td></tr>
+    <tr><td class="paramname">mag</td><td>the star magnitude </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the newly allocated conversion or NULL in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the newly allocated conversion or NULL in error case</dd></dl>
 <p>conversion(wave) = (spec * gain * 10^(mag/2.5) * h * c) / (dit * surface * dispersion * wave) </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00609">609</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga6e68e6a9d0bbb41ef717234b9f289dab"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_get_mag_zero" ref="ga6e68e6a9d0bbb41ef717234b9f289dab" args="(const cpl_bivector *sed, const cpl_vector *waves, double cent_wl)" -->
+<a class="anchor" id="ga6e68e6a9d0bbb41ef717234b9f289dab"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_vector* irplib_stdstar_get_mag_zero </td>
           <td>(</td>
-          <td class="paramtype">const cpl_bivector * </td>
-          <td class="paramname"> <em>sed</em>, </td>
+          <td class="paramtype">const cpl_bivector * </td>
+          <td class="paramname"><em>sed</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>waves</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>waves</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>cent_wl</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>cent_wl</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the 0 magnitude spectrum. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>sed</em> </td><td>the SED in angstroms / ergs/s/cm^2/Angstrom </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>waves</em> </td><td>the wavelengths in angstroms </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>cent_wl</em> </td><td>the central wavelength in microns </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">sed</td><td>the SED in angstroms / ergs/s/cm^2/Angstrom </td></tr>
+    <tr><td class="paramname">waves</td><td>the wavelengths in angstroms </td></tr>
+    <tr><td class="paramname">cent_wl</td><td>the central wavelength in microns </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the newly allocated spectrum or NULL in error case </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the newly allocated spectrum or NULL in error case </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00668">668</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gabbad67ff18cb901914caa9e864969dea"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_get_sed" ref="gabbad67ff18cb901914caa9e864969dea" args="(const char *seds_file, const char *sptype)" -->
+<a class="anchor" id="gabbad67ff18cb901914caa9e864969dea"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_bivector* irplib_stdstar_get_sed </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>seds_file</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>seds_file</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>sptype</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>sptype</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get the SED. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>seds_file</em> </td><td>the table file name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>sptype</em> </td><td>the requested spectral type </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">seds_file</td><td>the table file name </td></tr>
+    <tr><td class="paramname">sptype</td><td>the requested spectral type </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the newly allocated SED or NULL in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the newly allocated SED or NULL in error case</dd></dl>
 <p>wavelength in Angstroms SED in </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00773">773</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga1690bd84c24e905e384b8f725bf7aff1"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_load_catalog" ref="ga1690bd84c24e905e384b8f725bf7aff1" args="(const char *filename, const char *ext_name)" -->
+<a class="anchor" id="ga1690bd84c24e905e384b8f725bf7aff1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_table* irplib_stdstar_load_catalog </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>ext_name</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>ext_name</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Load the FITS catalog in a table. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Name of the FITS catalog </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ext_name</em> </td><td>Name of the catalog or "all" </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">filename</td><td>Name of the FITS catalog </td></tr>
+    <tr><td class="paramname">ext_name</td><td>Name of the catalog or "all" </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The newly allocated table orNULL in error case.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The newly allocated table orNULL in error case.</dd></dl>
 <p>The table is loaded from the specified extension. If "all" is specified, all extension with the same columns as the first one are loaded and put together in the returned table.</p>
 <p>The returned table must be de allocated with cpl_table_delete(). </p>
 
@@ -415,54 +434,53 @@
 
 </div>
 </div>
-<a class="anchor" id="ga080e06303f3f83a91959ac01381dc4e8"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_select_stars_dist" ref="ga080e06303f3f83a91959ac01381dc4e8" args="(cpl_table *cat, double ra, double dec, double dist)" -->
+<a class="anchor" id="ga080e06303f3f83a91959ac01381dc4e8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_stdstar_select_stars_dist </td>
           <td>(</td>
-          <td class="paramtype">cpl_table * </td>
-          <td class="paramname"> <em>cat</em>, </td>
+          <td class="paramtype">cpl_table * </td>
+          <td class="paramname"><em>cat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>ra</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>ra</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dec</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dec</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>dist</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>dist</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Select the stars that are within a given distance. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>cat</em> </td><td>the catalog </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ra</em> </td><td>RA pos </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dec</em> </td><td>DEC pos </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dist</em> </td><td>the distancw </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cat</td><td>the catalog </td></tr>
+    <tr><td class="paramname">ra</td><td>RA pos </td></tr>
+    <tr><td class="paramname">dec</td><td>DEC pos </td></tr>
+    <tr><td class="paramname">dist</td><td>the distancw </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if ok, -1 in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if ok, -1 in error case</dd></dl>
 <p>The stars that are within not further than dist from ra,dec are selected in the table. </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00348">348</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
@@ -471,40 +489,39 @@
 
 </div>
 </div>
-<a class="anchor" id="ga28316d8f0619bdbd0040b1f56799e7ab"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_select_stars_mag" ref="ga28316d8f0619bdbd0040b1f56799e7ab" args="(cpl_table *cat, const char *mag_colname)" -->
+<a class="anchor" id="ga28316d8f0619bdbd0040b1f56799e7ab"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_stdstar_select_stars_mag </td>
           <td>(</td>
-          <td class="paramtype">cpl_table * </td>
-          <td class="paramname"> <em>cat</em>, </td>
+          <td class="paramtype">cpl_table * </td>
+          <td class="paramname"><em>cat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>mag_colname</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>mag_colname</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Select the stars that have a known magnitude. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>cat</em> </td><td>the catalog </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mag_colname</em> </td><td>the column name with the searched magnitude </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">cat</td><td>the catalog </td></tr>
+    <tr><td class="paramname">mag_colname</td><td>the column name with the searched magnitude </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if ok, -1 in error case</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if ok, -1 in error case</dd></dl>
 <p>The stars whose magnitude in the mag band is known are selected in the table. </p>
 
 <p>Definition at line <a class="el" href="irplib__stdstar_8c_source.html#l00397">397</a> of file <a class="el" href="irplib__stdstar_8c_source.html">irplib_stdstar.c</a>.</p>
@@ -513,82 +530,81 @@
 
 </div>
 </div>
-<a class="anchor" id="gac18c92be3d3c96ba57804b074a2abb7d"></a><!-- doxytag: member="irplib_stdstar.c::irplib_stdstar_write_catalogs" ref="gac18c92be3d3c96ba57804b074a2abb7d" args="(cpl_frameset *set_in, const cpl_frameset *set_raw, const char *recipe_name, const char *pro_cat, const char *pro_type, const char *package_name, const char *ins_name, cpl_table *(*convert_ascii_table)(const char *))" -->
+<a class="anchor" id="gac18c92be3d3c96ba57804b074a2abb7d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_stdstar_write_catalogs </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>set_in</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>set_in</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>set_raw</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>set_raw</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe_name</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe_name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pro_cat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pro_cat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pro_type</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pro_type</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>package_name</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>package_name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>ins_name</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>ins_name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_table *(*)(const char *) </td>
-          <td class="paramname"> <em>convert_ascii_table</em></td><td> </td>
+          <td class="paramtype">cpl_table *(*)(const char *) </td>
+          <td class="paramname"><em>convert_ascii_table</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Write the ASCII catalogs as FITS files. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>set_in</em> </td><td>Input frameset where the product is registered </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>set_raw</em> </td><td>Set of ASCII catalogs </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe_name</em> </td><td>Recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pro_cat</em> </td><td>PRO.CATG </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pro_type</em> </td><td>PRO.TYPE </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>package_name</em> </td><td>Usually PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ins_name</em> </td><td>Instrument name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>convert_ascii_table</em> </td><td>Conversion function </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">set_in</td><td>Input frameset where the product is registered </td></tr>
+    <tr><td class="paramname">set_raw</td><td>Set of ASCII catalogs </td></tr>
+    <tr><td class="paramname">recipe_name</td><td>Recipe name </td></tr>
+    <tr><td class="paramname">pro_cat</td><td>PRO.CATG </td></tr>
+    <tr><td class="paramname">pro_type</td><td>PRO.TYPE </td></tr>
+    <tr><td class="paramname">package_name</td><td>Usually PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">ins_name</td><td>Instrument name </td></tr>
+    <tr><td class="paramname">convert_ascii_table</td><td>Conversion function </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE if ok or else the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE if ok or else the relevant CPL error code</dd></dl>
 <p>Every catalog will be written in a different extension, where EXTNAME is the name of the catalog ASCII file name.</p>
 <p>The conversion ascii -> cpl_table is done by convert_ascii_table() and should be defined in each instrument </p>
 
@@ -596,9 +612,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__strehl.html b/html/group__irplib__strehl.html
index b5942e2..d7f43ce 100644
--- a/html/group__irplib__strehl.html
+++ b/html/group__irplib__strehl.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions to compute the Strehl</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Functions to compute the Strehl</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Functions to compute the Strehl</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__utils.html b/html/group__irplib__utils.html
index 84b0da0..875803a 100644
--- a/html/group__irplib__utils.html
+++ b/html/group__irplib__utils.html
@@ -2,1308 +2,1315 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Miscellaneous Utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Miscellaneous Utilities</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Miscellaneous Utilities</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386">irplib_errorstate_dump_warning</a> (unsigned self, unsigned first, unsigned last)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL warning level.  <a href="#ga6b29dac884b62ab52f43dd670d4d8386"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb">irplib_errorstate_dump_info</a> (unsigned self, unsigned first, unsigned last)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL info level.  <a href="#ga901ff52a1c9dcdfcf2d2632d31064bdb"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1">irplib_errorstate_dump_debug</a> (unsigned self, unsigned first, unsigned last)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL debug level.  <a href="#ga26c6209e5df98978e2922a15b47b47d1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e">irplib_dfs_save_image</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_image *image, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char * [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save an image as a DFS-compliant pipeline product.  <a href="#ga346842d722834a2e6221ff2d86314b7e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7">irplib_dfs_save_propertylist</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save a propertylist as a DFS-compliant pipeline product.  <a href="#ga4dc12f321e7aeb5e67ff19f815bfd7b7"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1">irplib_dfs_save_imagelist</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_imagelist *imagelist, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id,  [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save an imagelist as a DFS-compliant pipeline product.  <a href="#ga66f7adc9e165b4e934e3d57a700f55c1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade">irplib_dfs_save_table</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_table *table, const cpl_propertylist *tablelist, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save a table as a DFS-compliant pipeline product.  <a href="#ga62a91f8630af11164547c168660b2ade"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451">irplib_dfs_save_image_</a> (cpl_frameset *allframes, cpl_propertylist *header, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_frame *inherit, const cpl_image *image, cpl_type type, const char *recipe, const cpl_propertylist *applist, const char *remregexp, con [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Save an image as a DFS-compliant pipeline product.  <a href="#ga1fd7c2f4c00014049b0bf4bf6814b451"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954">irplib_image_split</a> (const cpl_image *self, cpl_image *im_low, cpl_image *im_mid, cpl_image *im_high, double th_low, cpl_boolean isleq_low, double th_high, cpl_boolean isgeq_high, double alt_low, double alt_high, cpl_boolean isbad_low, cpl_boolean isbad_mid, cpl_boolean isbad_high)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Split the values in an image in three according to two thresholds.  <a href="#ga832676f36ecd647b77f4bb373b2d1954"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df">irplib_dfs_table_convert</a> (cpl_table *self, cpl_frameset *allframes, const cpl_frameset *useframes, int maxlinelen, char commentchar, const char *product_name, const char *procatg, const cpl_parameterlist *parlist, const char *recipe_name, const cpl_propertylist *mainlist, const cpl_pr [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Create a DFS product with one table from one or more (ASCII) file(s).  <a href="#ga3d1a791b5dc870770611c7dbf60d02df"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d">irplib_table_read_from_frameset</a> (cpl_table *self, const cpl_frameset *useframes, int maxlinelen, char commentchar, const cpl_parameterlist *parlist, cpl_boolean(*table_set_row)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *))</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set the rows of a table with data from one or more (ASCII) files.  <a href="#ga59a68df1795523d4f7653875bd9fc01d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e">irplib_reset</a> (void)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Reset IRPLIB state.  <a href="#gaf9d392144014e2363054bc3f83c8e47e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde">irplib_compare_tags</a> (cpl_frame *frame1, cpl_frame *frame2)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Comparison function to identify different input frames.  <a href="#gae13f0d6b24ade506a99ac9c4bb09efde"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134">irplib_frameset_find_file</a> (const cpl_frameset *self, const char *tag)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the filename with the given tag in a frame set.  <a href="#ga9fe4dca85dee68061114e26fdc72a134"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68">irplib_frameset_get_first_from_group</a> (const cpl_frameset *self, cpl_frame_group group)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the first frame belonging to the given group.  <a href="#ga5b20a00f315410b49b1db1dd2417fe68"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1">irplib_apertures_find_max_flux</a> (const cpl_apertures *self, int *ind, int nfind)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find the aperture(s) with the greatest flux.  <a href="#gac568c70a57ef8610f5fedc9f1943a3a1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga09a11edf52efa78ddafce0bb4fa3b71f"></a><!-- doxytag: member="irplib_utils::irplib_isinf" ref="ga09a11edf52efa78ddafce0bb4fa3b71f" args="(double value)" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f">irplib_isinf</a> (double value)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">portable isinf <br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga804bfc739b5d55f9797ab881b1034ae4"></a><!-- doxytag: member="irplib_utils::irplib_isnan" ref="ga804bfc739b5d55f9797ab881b1034ae4" args="(double value)" -->
-int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4">irplib_isnan</a> (double value)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">portable isnan <br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6b29dac884b62ab52f43dd670d4d8386"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386">irplib_errorstate_dump_warning</a> (unsigned self, unsigned first, unsigned last)</td></tr>
+<tr class="memdesc:ga6b29dac884b62ab52f43dd670d4d8386"><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL warning level.  <a href="#ga6b29dac884b62ab52f43dd670d4d8386"></a><br/></td></tr>
+<tr class="memitem:ga901ff52a1c9dcdfcf2d2632d31064bdb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb">irplib_errorstate_dump_info</a> (unsigned self, unsigned first, unsigned last)</td></tr>
+<tr class="memdesc:ga901ff52a1c9dcdfcf2d2632d31064bdb"><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL info level.  <a href="#ga901ff52a1c9dcdfcf2d2632d31064bdb"></a><br/></td></tr>
+<tr class="memitem:ga26c6209e5df98978e2922a15b47b47d1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1">irplib_errorstate_dump_debug</a> (unsigned self, unsigned first, unsigned last)</td></tr>
+<tr class="memdesc:ga26c6209e5df98978e2922a15b47b47d1"><td class="mdescLeft"> </td><td class="mdescRight">Dump a single CPL error at the CPL debug level.  <a href="#ga26c6209e5df98978e2922a15b47b47d1"></a><br/></td></tr>
+<tr class="memitem:ga346842d722834a2e6221ff2d86314b7e"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e">irplib_dfs_save_image</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_image *image, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *applist, const [...]
+<tr class="memdesc:ga346842d722834a2e6221ff2d86314b7e"><td class="mdescLeft"> </td><td class="mdescRight">Save an image as a DFS-compliant pipeline product.  <a href="#ga346842d722834a2e6221ff2d86314b7e"></a><br/></td></tr>
+<tr class="memitem:ga4dc12f321e7aeb5e67ff19f815bfd7b7"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7">irplib_dfs_save_propertylist</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_ [...]
+<tr class="memdesc:ga4dc12f321e7aeb5e67ff19f815bfd7b7"><td class="mdescLeft"> </td><td class="mdescRight">Save a propertylist as a DFS-compliant pipeline product.  <a href="#ga4dc12f321e7aeb5e67ff19f815bfd7b7"></a><br/></td></tr>
+<tr class="memitem:ga66f7adc9e165b4e934e3d57a700f55c1"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1">irplib_dfs_save_imagelist</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_imagelist *imagelist, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *ap [...]
+<tr class="memdesc:ga66f7adc9e165b4e934e3d57a700f55c1"><td class="mdescLeft"> </td><td class="mdescRight">Save an imagelist as a DFS-compliant pipeline product.  <a href="#ga66f7adc9e165b4e934e3d57a700f55c1"></a><br/></td></tr>
+<tr class="memitem:ga62a91f8630af11164547c168660b2ade"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade">irplib_dfs_save_table</a> (cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_table *table, const cpl_propertylist *tablelist, const char *recipe, const char *procat, const cpl_propertylis [...]
+<tr class="memdesc:ga62a91f8630af11164547c168660b2ade"><td class="mdescLeft"> </td><td class="mdescRight">Save a table as a DFS-compliant pipeline product.  <a href="#ga62a91f8630af11164547c168660b2ade"></a><br/></td></tr>
+<tr class="memitem:ga1fd7c2f4c00014049b0bf4bf6814b451"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451">irplib_dfs_save_image_</a> (cpl_frameset *allframes, cpl_propertylist *header, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_frame *inherit, const cpl_image *image, cpl_type type, const char *recipe, const cp [...]
+<tr class="memdesc:ga1fd7c2f4c00014049b0bf4bf6814b451"><td class="mdescLeft"> </td><td class="mdescRight">Save an image as a DFS-compliant pipeline product.  <a href="#ga1fd7c2f4c00014049b0bf4bf6814b451"></a><br/></td></tr>
+<tr class="memitem:ga832676f36ecd647b77f4bb373b2d1954"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954">irplib_image_split</a> (const cpl_image *self, cpl_image *im_low, cpl_image *im_mid, cpl_image *im_high, double th_low, cpl_boolean isleq_low, double th_high, cpl_boolean isgeq_high, double alt_low, double alt_high, cpl_boolean isbad_low, [...]
+<tr class="memdesc:ga832676f36ecd647b77f4bb373b2d1954"><td class="mdescLeft"> </td><td class="mdescRight">Split the values in an image in three according to two thresholds.  <a href="#ga832676f36ecd647b77f4bb373b2d1954"></a><br/></td></tr>
+<tr class="memitem:ga3d1a791b5dc870770611c7dbf60d02df"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df">irplib_dfs_table_convert</a> (cpl_table *self, cpl_frameset *allframes, const cpl_frameset *useframes, int maxlinelen, char commentchar, const char *product_name, const char *procatg, const cpl_parameterlist *parlist, const char *recipe_n [...]
+<tr class="memdesc:ga3d1a791b5dc870770611c7dbf60d02df"><td class="mdescLeft"> </td><td class="mdescRight">Create a DFS product with one table from one or more (ASCII) file(s)  <a href="#ga3d1a791b5dc870770611c7dbf60d02df"></a><br/></td></tr>
+<tr class="memitem:ga59a68df1795523d4f7653875bd9fc01d"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d">irplib_table_read_from_frameset</a> (cpl_table *self, const cpl_frameset *useframes, int maxlinelen, char commentchar, const cpl_parameterlist *parlist, cpl_boolean(*table_set_row)(cpl_table *, const char *, int, const cpl_frame *, const  [...]
+<tr class="memdesc:ga59a68df1795523d4f7653875bd9fc01d"><td class="mdescLeft"> </td><td class="mdescRight">Set the rows of a table with data from one or more (ASCII) files.  <a href="#ga59a68df1795523d4f7653875bd9fc01d"></a><br/></td></tr>
+<tr class="memitem:gaf9d392144014e2363054bc3f83c8e47e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e">irplib_reset</a> (void)</td></tr>
+<tr class="memdesc:gaf9d392144014e2363054bc3f83c8e47e"><td class="mdescLeft"> </td><td class="mdescRight">Reset IRPLIB state.  <a href="#gaf9d392144014e2363054bc3f83c8e47e"></a><br/></td></tr>
+<tr class="memitem:gae13f0d6b24ade506a99ac9c4bb09efde"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde">irplib_compare_tags</a> (cpl_frame *frame1, cpl_frame *frame2)</td></tr>
+<tr class="memdesc:gae13f0d6b24ade506a99ac9c4bb09efde"><td class="mdescLeft"> </td><td class="mdescRight">Comparison function to identify different input frames.  <a href="#gae13f0d6b24ade506a99ac9c4bb09efde"></a><br/></td></tr>
+<tr class="memitem:ga9fe4dca85dee68061114e26fdc72a134"><td class="memItemLeft" align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134">irplib_frameset_find_file</a> (const cpl_frameset *self, const char *tag)</td></tr>
+<tr class="memdesc:ga9fe4dca85dee68061114e26fdc72a134"><td class="mdescLeft"> </td><td class="mdescRight">Find the filename with the given tag in a frame set.  <a href="#ga9fe4dca85dee68061114e26fdc72a134"></a><br/></td></tr>
+<tr class="memitem:ga5b20a00f315410b49b1db1dd2417fe68"><td class="memItemLeft" align="right" valign="top">const cpl_frame * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68">irplib_frameset_get_first_from_group</a> (const cpl_frameset *self, cpl_frame_group group)</td></tr>
+<tr class="memdesc:ga5b20a00f315410b49b1db1dd2417fe68"><td class="mdescLeft"> </td><td class="mdescRight">Find the first frame belonging to the given group.  <a href="#ga5b20a00f315410b49b1db1dd2417fe68"></a><br/></td></tr>
+<tr class="memitem:gac568c70a57ef8610f5fedc9f1943a3a1"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1">irplib_apertures_find_max_flux</a> (const cpl_apertures *self, int *ind, int nfind)</td></tr>
+<tr class="memdesc:gac568c70a57ef8610f5fedc9f1943a3a1"><td class="mdescLeft"> </td><td class="mdescRight">Find the aperture(s) with the greatest flux.  <a href="#gac568c70a57ef8610f5fedc9f1943a3a1"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="gac568c70a57ef8610f5fedc9f1943a3a1"></a><!-- doxytag: member="irplib_utils.c::irplib_apertures_find_max_flux" ref="gac568c70a57ef8610f5fedc9f1943a3a1" args="(const cpl_apertures *self, int *ind, int nfind)" -->
+<a class="anchor" id="gac568c70a57ef8610f5fedc9f1943a3a1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_apertures_find_max_flux </td>
           <td>(</td>
-          <td class="paramtype">const cpl_apertures * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_apertures * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>ind</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>ind</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>nfind</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>nfind</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the aperture(s) with the greatest flux. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The aperture object </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ind</em> </td><td>The aperture-indices in order of decreasing flux </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>nfind</em> </td><td>Number of indices to find </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The aperture object </td></tr>
+    <tr><td class="paramname">ind</td><td>The aperture-indices in order of decreasing flux </td></tr>
+    <tr><td class="paramname">nfind</td><td>Number of indices to find </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant _cpl_error_code_ on error</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant <em>cpl_error_code</em> on error</dd></dl>
 <p>nfind must be at least 1 and at most the size of the aperture object.</p>
 <p>The ind array must be able to hold (at least) nfind integers. On success the first nfind elements of ind point to indices of the aperture object.</p>
 <p>To find the single ind of the aperture with the maximum flux use simply: int ind; irplib_apertures_find_max_flux(self, &ind, 1); </p>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01254">1254</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01248">1248</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gae13f0d6b24ade506a99ac9c4bb09efde"></a><!-- doxytag: member="irplib_utils.c::irplib_compare_tags" ref="gae13f0d6b24ade506a99ac9c4bb09efde" args="(cpl_frame *frame1, cpl_frame *frame2)" -->
+<a class="anchor" id="gae13f0d6b24ade506a99ac9c4bb09efde"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_compare_tags </td>
           <td>(</td>
-          <td class="paramtype">cpl_frame * </td>
-          <td class="paramname"> <em>frame1</em>, </td>
+          <td class="paramtype">cpl_frame * </td>
+          <td class="paramname"><em>frame1</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frame * </td>
-          <td class="paramname"> <em>frame2</em></td><td> </td>
+          <td class="paramtype">cpl_frame * </td>
+          <td class="paramname"><em>frame2</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Comparison function to identify different input frames. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>frame1</em> </td><td>first frame </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>frame2</em> </td><td>second frame </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">frame1</td><td>first frame </td></tr>
+    <tr><td class="paramname">frame2</td><td>second frame </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if frame1!=frame2, 1 if frame1==frame2, -1 in error case </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if frame1!=frame2, 1 if frame1==frame2, -1 in error case </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01153">1153</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01147">1147</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga346842d722834a2e6221ff2d86314b7e"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_save_image" ref="ga346842d722834a2e6221ff2d86314b7e" args="(cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_image *image, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)" -->
+<a class="anchor" id="ga346842d722834a2e6221ff2d86314b7e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_save_image </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>usedframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>usedframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>image</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>image</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_type_bpp </td>
-          <td class="paramname"> <em>bpp</em>, </td>
+          <td class="paramtype">cpl_type_bpp </td>
+          <td class="paramname"><em>bpp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>procat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>procat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>applist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>applist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Save an image as a DFS-compliant pipeline product. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>usedframes</em> </td><td>The list of raw/calibration frames used for this product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>image</em> </td><td>The image to be saved </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>bpp</em> </td><td>Bits per pixel </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe</em> </td><td>The recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>procat</em> </td><td>The product category tag </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>applist</em> </td><td>Optional propertylist to append to primary header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Filename of created product </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">usedframes</td><td>The list of raw/calibration frames used for this product </td></tr>
+    <tr><td class="paramname">image</td><td>The image to be saved </td></tr>
+    <tr><td class="paramname">bpp</td><td>Bits per pixel </td></tr>
+    <tr><td class="paramname">recipe</td><td>The recipe name </td></tr>
+    <tr><td class="paramname">procat</td><td>The product category tag </td></tr>
+    <tr><td class="paramname">applist</td><td>Optional propertylist to append to primary header or NULL </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">filename</td><td>Filename of created product </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The image may be NULL in which case only the header information is saved but passing a NULL image is deprecated, use cpl_dfs_save_propertylist(). </dd>
+<dl class="section note"><dt>Note:</dt><dd>The image may be NULL in which case only the header information is saved but passing a NULL image is deprecated, use cpl_dfs_save_propertylist(). </dd>
 <dd>
 remregexp may be NULL </dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_dfs_save_image(). </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_dfs_save_image(). </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00214">214</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00208">208</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
-<p>References <a class="el" href="irplib__utils_8c_source.html#l00417">irplib_dfs_save_image_()</a>.</p>
+<p>References <a class="el" href="irplib__utils_8c_source.html#l00411">irplib_dfs_save_image_()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga1fd7c2f4c00014049b0bf4bf6814b451"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_save_image_" ref="ga1fd7c2f4c00014049b0bf4bf6814b451" args="(cpl_frameset *allframes, cpl_propertylist *header, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_frame *inherit, const cpl_image *image, cpl_type type, const char *recipe, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)" -->
+<a class="anchor" id="ga1fd7c2f4c00014049b0bf4bf6814b451"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_save_image_ </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_propertylist * </td>
-          <td class="paramname"> <em>header</em>, </td>
+          <td class="paramtype">cpl_propertylist * </td>
+          <td class="paramname"><em>header</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>usedframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>usedframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frame * </td>
-          <td class="paramname"> <em>inherit</em>, </td>
+          <td class="paramtype">const cpl_frame * </td>
+          <td class="paramname"><em>inherit</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>image</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>image</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_type </td>
-          <td class="paramname"> <em>type</em>, </td>
+          <td class="paramtype">cpl_type </td>
+          <td class="paramname"><em>type</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>applist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>applist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Save an image as a DFS-compliant pipeline product. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>header</em> </td><td>NULL, or filled with properties written to product header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>usedframes</em> </td><td>The list of raw/calibration frames used for this product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>inherit</em> </td><td>NULL or product frames inherit their header from this frame </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>image</em> </td><td>The image to be saved </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>type</em> </td><td>The type used to represent the data in the file </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe</em> </td><td>The recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>applist</em> </td><td>Propertylist to append to primary header, w. PRO.CATG </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Filename of created product </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">header</td><td>NULL, or filled with properties written to product header </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">usedframes</td><td>The list of raw/calibration frames used for this product </td></tr>
+    <tr><td class="paramname">inherit</td><td>NULL or product frames inherit their header from this frame </td></tr>
+    <tr><td class="paramname">image</td><td>The image to be saved </td></tr>
+    <tr><td class="paramname">type</td><td>The type used to represent the data in the file </td></tr>
+    <tr><td class="paramname">recipe</td><td>The recipe name </td></tr>
+    <tr><td class="paramname">applist</td><td>Propertylist to append to primary header, w. PRO.CATG </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">filename</td><td>Filename of created product </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The image may be NULL in which case only the header information is saved but passing a NULL image is deprecated, use cpl_dfs_save_propertylist(). </dd>
+<dl class="section note"><dt>Note:</dt><dd>The image may be NULL in which case only the header information is saved but passing a NULL image is deprecated, use cpl_dfs_save_propertylist(). </dd>
 <dd>
 remregexp may be NULL </dd>
 <dd>
 applist must contain a string-property with key CPL_DFS_PRO_CATG </dd>
 <dd>
 On success and iff header is non-NULL, it will be emptied and then filled with the properties written to the primary header of the product </dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_dfs_save_image() </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>applist is copied with cpl_propertylist_copy_property_regexp() instead pf cpl_propertylist_append() </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_dfs_save_image() </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>applist is copied with cpl_propertylist_copy_property_regexp() instead pf cpl_propertylist_append() </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00417">417</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00411">411</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
-<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00214">irplib_dfs_save_image()</a>.</p>
+<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00208">irplib_dfs_save_image()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga66f7adc9e165b4e934e3d57a700f55c1"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_save_imagelist" ref="ga66f7adc9e165b4e934e3d57a700f55c1" args="(cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_imagelist *imagelist, cpl_type_bpp bpp, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)" -->
+<a class="anchor" id="ga66f7adc9e165b4e934e3d57a700f55c1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_save_imagelist </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>usedframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>usedframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_imagelist * </td>
-          <td class="paramname"> <em>imagelist</em>, </td>
+          <td class="paramtype">const cpl_imagelist * </td>
+          <td class="paramname"><em>imagelist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_type_bpp </td>
-          <td class="paramname"> <em>bpp</em>, </td>
+          <td class="paramtype">cpl_type_bpp </td>
+          <td class="paramname"><em>bpp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>procat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>procat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>applist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>applist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Save an imagelist as a DFS-compliant pipeline product. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>usedframes</em> </td><td>The list of raw/calibration frames used for this product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>imagelist</em> </td><td>The imagelist to be saved </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>bpp</em> </td><td>Bits per pixel </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe</em> </td><td>The recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>procat</em> </td><td>The product category tag </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>applist</em> </td><td>Optional propertylist to append to primary header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Filename of created product </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">usedframes</td><td>The list of raw/calibration frames used for this product </td></tr>
+    <tr><td class="paramname">imagelist</td><td>The imagelist to be saved </td></tr>
+    <tr><td class="paramname">bpp</td><td>Bits per pixel </td></tr>
+    <tr><td class="paramname">recipe</td><td>The recipe name </td></tr>
+    <tr><td class="paramname">procat</td><td>The product category tag </td></tr>
+    <tr><td class="paramname">applist</td><td>Optional propertylist to append to primary header or NULL </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">filename</td><td>Filename of created product </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>remregexp may be NULL </dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_dfs_save_imagelist(). </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>remregexp may be NULL </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_dfs_save_imagelist(). </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00309">309</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00303">303</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga4dc12f321e7aeb5e67ff19f815bfd7b7"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_save_propertylist" ref="ga4dc12f321e7aeb5e67ff19f815bfd7b7" args="(cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)" -->
+<a class="anchor" id="ga4dc12f321e7aeb5e67ff19f815bfd7b7"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_save_propertylist </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>usedframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>usedframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>procat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>procat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>applist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>applist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Save a propertylist as a DFS-compliant pipeline product. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>usedframes</em> </td><td>The list of raw/calibration frames used for this product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe</em> </td><td>The recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>procat</em> </td><td>The product category tag </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>applist</em> </td><td>Optional propertylist to append to primary header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Filename of created product </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">usedframes</td><td>The list of raw/calibration frames used for this product </td></tr>
+    <tr><td class="paramname">recipe</td><td>The recipe name </td></tr>
+    <tr><td class="paramname">procat</td><td>The product category tag </td></tr>
+    <tr><td class="paramname">applist</td><td>Optional propertylist to append to primary header or NULL </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">filename</td><td>Filename of created product </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>remregexp may be NULL </dd></dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_dfs_save_propertylist(). </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>remregexp may be NULL </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_dfs_save_propertylist(). </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00262">262</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00256">256</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga62a91f8630af11164547c168660b2ade"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_save_table" ref="ga62a91f8630af11164547c168660b2ade" args="(cpl_frameset *allframes, const cpl_parameterlist *parlist, const cpl_frameset *usedframes, const cpl_table *table, const cpl_propertylist *tablelist, const char *recipe, const char *procat, const cpl_propertylist *applist, const char *remregexp, const char *pipe_id, const char *filename)" -->
+<a class="anchor" id="ga62a91f8630af11164547c168660b2ade"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_save_table </td>
           <td>(</td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>usedframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>usedframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_table * </td>
-          <td class="paramname"> <em>table</em>, </td>
+          <td class="paramtype">const cpl_table * </td>
+          <td class="paramname"><em>table</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>tablelist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>tablelist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>procat</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>procat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>applist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>applist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>filename</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>filename</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Save a table as a DFS-compliant pipeline product. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>usedframes</em> </td><td>The list of raw/calibration frames used for this product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>table</em> </td><td>The table to be saved </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tablelist</em> </td><td>Optional propertylist to use in table extension or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe</em> </td><td>The recipe name </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>procat</em> </td><td>The product category tag </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>applist</em> </td><td>Optional propertylist to append to primary header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td>Filename of created product </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">usedframes</td><td>The list of raw/calibration frames used for this product </td></tr>
+    <tr><td class="paramname">table</td><td>The table to be saved </td></tr>
+    <tr><td class="paramname">tablelist</td><td>Optional propertylist to use in table extension or NULL </td></tr>
+    <tr><td class="paramname">recipe</td><td>The recipe name </td></tr>
+    <tr><td class="paramname">procat</td><td>The product category tag </td></tr>
+    <tr><td class="paramname">applist</td><td>Optional propertylist to append to primary header or NULL </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">filename</td><td>Filename of created product </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_dfs_save_table(). </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_dfs_save_table(). </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00357">357</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00351">351</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
-<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00866">irplib_dfs_table_convert()</a>.</p>
+<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00860">irplib_dfs_table_convert()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga3d1a791b5dc870770611c7dbf60d02df"></a><!-- doxytag: member="irplib_utils.c::irplib_dfs_table_convert" ref="ga3d1a791b5dc870770611c7dbf60d02df" args="(cpl_table *self, cpl_frameset *allframes, const cpl_frameset *useframes, int maxlinelen, char commentchar, const char *product_name, const char *procatg, const cpl_parameterlist *parlist, const char *recipe_name, const cpl_propertylist *mainlist, const cpl_propertylist *extlist, const char *remregexp, const char *ins [...]
+<a class="anchor" id="ga3d1a791b5dc870770611c7dbf60d02df"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_dfs_table_convert </td>
           <td>(</td>
-          <td class="paramtype">cpl_table * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_table * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frameset * </td>
-          <td class="paramname"> <em>allframes</em>, </td>
+          <td class="paramtype">cpl_frameset * </td>
+          <td class="paramname"><em>allframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>useframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>useframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxlinelen</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxlinelen</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"> <em>commentchar</em>, </td>
+          <td class="paramtype">char </td>
+          <td class="paramname"><em>commentchar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>product_name</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>product_name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>procatg</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>procatg</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>recipe_name</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>recipe_name</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>mainlist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>mainlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_propertylist * </td>
-          <td class="paramname"> <em>extlist</em>, </td>
+          <td class="paramtype">const cpl_propertylist * </td>
+          <td class="paramname"><em>extlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>remregexp</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>remregexp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>instrume</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>instrume</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>pipe_id</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>pipe_id</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean(*)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *) </td>
-          <td class="paramname"> <em>table_set_row</em>, </td>
+          <td class="paramtype">cpl_boolean(*)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *) </td>
+          <td class="paramname"><em>table_set_row</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_table *, const cpl_frameset *, const cpl_parameterlist *) </td>
-          <td class="paramname"> <em>table_check</em></td><td> </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_table *, const cpl_frameset *, const cpl_parameterlist *) </td>
+          <td class="paramname"><em>table_check</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
-<p>Create a DFS product with one table from one or more (ASCII) file(s). </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Table with labels (and units) but no row data </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>allframes</em> </td><td>The list of input frames for the recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>useframes</em> </td><td>The frames to process for the product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxlinelen</em> </td><td>The maximum line length in the input file(s) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>commentchar</em> </td><td>Skip lines that start with this character, e.g. '#' </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>product_name</em> </td><td>The name of the created FITS table product or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>procatg</em> </td><td>The PROCATG of the created FITS table product </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>recipe_name</em> </td><td>The name of the calling recipe </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mainlist</em> </td><td>Optional propertylist to append to main header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>extlist</em> </td><td>Optional propertylist to append to ext. header or NULL </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>remregexp</em> </td><td>Optional regexp of properties not to put in main header </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>instrume</em> </td><td>The value to use for the INSTRUME key, uppercase PACKAGE </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pipe_id</em> </td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>table_set_row</em> </td><td>Caller-defined function to insert one row in the table </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>table_check</em> </td><td>Optional caller-defined function to check table or NULL </td></tr>
+<p>Create a DFS product with one table from one or more (ASCII) file(s) </p>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Table with labels (and units) but no row data </td></tr>
+    <tr><td class="paramname">allframes</td><td>The list of input frames for the recipe </td></tr>
+    <tr><td class="paramname">useframes</td><td>The frames to process for the product </td></tr>
+    <tr><td class="paramname">maxlinelen</td><td>The maximum line length in the input file(s) </td></tr>
+    <tr><td class="paramname">commentchar</td><td>Skip lines that start with this character, e.g. '#' </td></tr>
+    <tr><td class="paramname">product_name</td><td>The name of the created FITS table product or NULL </td></tr>
+    <tr><td class="paramname">procatg</td><td>The PROCATG of the created FITS table product </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">recipe_name</td><td>The name of the calling recipe </td></tr>
+    <tr><td class="paramname">mainlist</td><td>Optional propertylist to append to main header or NULL </td></tr>
+    <tr><td class="paramname">extlist</td><td>Optional propertylist to append to ext. header or NULL </td></tr>
+    <tr><td class="paramname">remregexp</td><td>Optional regexp of properties not to put in main header </td></tr>
+    <tr><td class="paramname">instrume</td><td>The value to use for the INSTRUME key, uppercase PACKAGE </td></tr>
+    <tr><td class="paramname">pipe_id</td><td>PACKAGE "/" PACKAGE_VERSION </td></tr>
+    <tr><td class="paramname">table_set_row</td><td>Caller-defined function to insert one row in the table </td></tr>
+    <tr><td class="paramname">table_check</td><td>Optional caller-defined function to check table or NULL </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset()</a>, cpl_dfs_save_table() </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>If product_name is NULL, the product will be named <recipe_name>.fits.</dd></dl>
-<dl class="user"><dt><b>Example (error handling omitted for brevity):</b></dt><dd><div class="fragment"><pre class="fragment">      <span class="keyword">extern</span> cpl_boolean my_table_set_row(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-                                          <span class="keyword">const</span> cpl_frame *,
-                                          <span class="keyword">const</span> cpl_parameterlist *);
-      <span class="keyword">extern</span> cpl_error_code my_table_check(cpl_table *,
-                                           <span class="keyword">const</span> cpl_frameset *,
-                                           <span class="keyword">const</span> cpl_parameterlist *);
-      <span class="keyword">const</span> <span class="keywordtype">int</span> expected_rows = 42;
-      cpl_table * <span class="keyword">self</span> = cpl_table_new(expected_rows);
-
-      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL1"</span>, CPL_TYPE_STRING);
-      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, CPL_TYPE_DOUBLE);
-      cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, <span class="stringliteral">"Some_SI_Unit"</span>);
-
-      <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s).">irplib_dfs_table_convert</a>(<span class="keyword">self</span>, allframes, useframes, 1024, <span class="charliteral">'#'</span>, NULL,
-                               <span class="stringliteral">"MYPROCATG"</span>, parlist, <span class="stringliteral">"myrecipe"</span>, NULL, NULL,
-                               NULL, <span class="stringliteral">"MYINSTRUME"</span>, PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-                               my_table_set_row, my_table_check);
-
-      cpl_table_delete(<span class="keyword">self</span>);
-</pre></div> </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset()</a>, cpl_dfs_save_table() </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>If product_name is NULL, the product will be named <recipe_name>.fits.</dd></dl>
+<dl class="section user"><dt>Example (error handling omitted for brevity):</dt><dd><div class="fragment"><div class="line">      <span class="keyword">extern</span> cpl_boolean my_table_set_row(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line">                                          <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line">                                          <span class="keyword">const</span> cpl_parameterlist *);</div>
+<div class="line">      <span class="keyword">extern</span> cpl_error_code my_table_check(cpl_table *,</div>
+<div class="line">                                           <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line">                                           <span class="keyword">const</span> cpl_parameterlist *);</div>
+<div class="line">      <span class="keyword">const</span> <span class="keywordtype">int</span> expected_rows = 42;</div>
+<div class="line">      cpl_table * <span class="keyword">self</span> = cpl_table_new(expected_rows);</div>
+<div class="line"></div>
+<div class="line">      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL1"</span>, CPL_TYPE_STRING);</div>
+<div class="line">      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line">      cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, <span class="stringliteral">"Some_SI_Unit"</span>);</div>
+<div class="line"></div>
+<div class="line">      <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s)">irplib_dfs_table_convert</a>(<span class="keyword">self</span>, allframes, useframes, 1024, <span class="charliteral">'#'</span>, NULL,</div>
+<div class="line">                               <span class="stringliteral">"MYPROCATG"</span>, parlist, <span class="stringliteral">"myrecipe"</span>, NULL, NULL,</div>
+<div class="line">                               NULL, <span class="stringliteral">"MYINSTRUME"</span>, PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line">                               my_table_set_row, my_table_check);</div>
+<div class="line"></div>
+<div class="line">      cpl_table_delete(<span class="keyword">self</span>);</div>
+</div><!-- fragment --> </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00866">866</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00860">860</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
-<p>References <a class="el" href="irplib__utils_8c_source.html#l00357">irplib_dfs_save_table()</a>, and <a class="el" href="irplib__utils_8c_source.html#l00995">irplib_table_read_from_frameset()</a>.</p>
+<p>References <a class="el" href="irplib__utils_8c_source.html#l00351">irplib_dfs_save_table()</a>, and <a class="el" href="irplib__utils_8c_source.html#l00989">irplib_table_read_from_frameset()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga26c6209e5df98978e2922a15b47b47d1"></a><!-- doxytag: member="irplib_utils.c::irplib_errorstate_dump_debug" ref="ga26c6209e5df98978e2922a15b47b47d1" args="(unsigned self, unsigned first, unsigned last)" -->
+<a class="anchor" id="ga26c6209e5df98978e2922a15b47b47d1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_errorstate_dump_debug </td>
           <td>(</td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>first</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>first</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>last</em></td><td> </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>last</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Dump a single CPL error at the CPL debug level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The number of the current error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>The number of the first error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>The number of the last error to be dumped </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The number of the current error to be dumped </td></tr>
+    <tr><td class="paramname">first</td><td>The number of the first error to be dumped </td></tr>
+    <tr><td class="paramname">last</td><td>The number of the last error to be dumped </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_errorstate_dump_one </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>void </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_errorstate_dump_one </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00183">183</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00177">177</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 <p>Referenced by <a class="el" href="irplib__wavecal_8c_source.html#l01496">irplib_polynomial_find_1d_from_correlation_all()</a>, and <a class="el" href="irplib__wavecal_8c_source.html#l01046">irplib_vector_fill_line_spectrum_model()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga901ff52a1c9dcdfcf2d2632d31064bdb"></a><!-- doxytag: member="irplib_utils.c::irplib_errorstate_dump_info" ref="ga901ff52a1c9dcdfcf2d2632d31064bdb" args="(unsigned self, unsigned first, unsigned last)" -->
+<a class="anchor" id="ga901ff52a1c9dcdfcf2d2632d31064bdb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_errorstate_dump_info </td>
           <td>(</td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>first</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>first</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>last</em></td><td> </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>last</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Dump a single CPL error at the CPL info level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The number of the current error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>The number of the first error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>The number of the last error to be dumped </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The number of the current error to be dumped </td></tr>
+    <tr><td class="paramname">first</td><td>The number of the first error to be dumped </td></tr>
+    <tr><td class="paramname">last</td><td>The number of the last error to be dumped </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_errorstate_dump_one </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>void </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_errorstate_dump_one </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00163">163</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00157">157</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga6b29dac884b62ab52f43dd670d4d8386"></a><!-- doxytag: member="irplib_utils.c::irplib_errorstate_dump_warning" ref="ga6b29dac884b62ab52f43dd670d4d8386" args="(unsigned self, unsigned first, unsigned last)" -->
+<a class="anchor" id="ga6b29dac884b62ab52f43dd670d4d8386"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_errorstate_dump_warning </td>
           <td>(</td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>first</em>, </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>first</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">unsigned </td>
-          <td class="paramname"> <em>last</em></td><td> </td>
+          <td class="paramtype">unsigned </td>
+          <td class="paramname"><em>last</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Dump a single CPL error at the CPL warning level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The number of the current error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>first</em> </td><td>The number of the first error to be dumped </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>last</em> </td><td>The number of the last error to be dumped </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The number of the current error to be dumped </td></tr>
+    <tr><td class="paramname">first</td><td>The number of the first error to be dumped </td></tr>
+    <tr><td class="paramname">last</td><td>The number of the last error to be dumped </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>void </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_errorstate_dump_one</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>void </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_errorstate_dump_one</dd></dl>
 <p>FIXME: Move this function to the CPL errorstate module. </p>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00136">136</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00130">130</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga9fe4dca85dee68061114e26fdc72a134"></a><!-- doxytag: member="irplib_utils.c::irplib_frameset_find_file" ref="ga9fe4dca85dee68061114e26fdc72a134" args="(const cpl_frameset *self, const char *tag)" -->
+<a class="anchor" id="ga9fe4dca85dee68061114e26fdc72a134"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">const char* irplib_frameset_find_file </td>
           <td>(</td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>tag</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>tag</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the filename with the given tag in a frame set. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>A frame set. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tag</em> </td><td>The frame tag to search for. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>A frame set. </td></tr>
+    <tr><td class="paramname">tag</td><td>The frame tag to search for. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The filename or NULL if none found and on error. </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd>cpl_frameset_find </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>If called with a CPL error code, the location will be updated and NULL returned.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The filename or NULL if none found and on error. </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd>cpl_frameset_find </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>If called with a CPL error code, the location will be updated and NULL returned.</dd></dl>
 <p>NULL is returned and no error code set if the tag is not found.</p>
 <p>If the file is not unique, the name of the first one is returned and with a warning. </p>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01189">1189</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01183">1183</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga5b20a00f315410b49b1db1dd2417fe68"></a><!-- doxytag: member="irplib_utils.c::irplib_frameset_get_first_from_group" ref="ga5b20a00f315410b49b1db1dd2417fe68" args="(const cpl_frameset *self, cpl_frame_group group)" -->
+<a class="anchor" id="ga5b20a00f315410b49b1db1dd2417fe68"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">const cpl_frame* irplib_frameset_get_first_from_group </td>
           <td>(</td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_frame_group </td>
-          <td class="paramname"> <em>group</em></td><td> </td>
+          <td class="paramtype">cpl_frame_group </td>
+          <td class="paramname"><em>group</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find the first frame belonging to the given group. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The frameset </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>group</em> </td><td>The group attribute </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The frameset </td></tr>
+    <tr><td class="paramname">group</td><td>The group attribute </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The first frame belonging to the given group, or <code>NULL</code> if no such frame was found. The function returns <code>NULL</code> if an error occurs and sets the appropriate error code. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The first frame belonging to the given group, or <code>NULL</code> if no such frame was found. The function returns <code>NULL</code> if an error occurs and sets the appropriate error code. </dd></dl>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01220">1220</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01214">1214</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga832676f36ecd647b77f4bb373b2d1954"></a><!-- doxytag: member="irplib_utils.c::irplib_image_split" ref="ga832676f36ecd647b77f4bb373b2d1954" args="(const cpl_image *self, cpl_image *im_low, cpl_image *im_mid, cpl_image *im_high, double th_low, cpl_boolean isleq_low, double th_high, cpl_boolean isgeq_high, double alt_low, double alt_high, cpl_boolean isbad_low, cpl_boolean isbad_mid, cpl_boolean isbad_high)" -->
+<a class="anchor" id="ga832676f36ecd647b77f4bb373b2d1954"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_image_split </td>
           <td>(</td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>im_low</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>im_low</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>im_mid</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>im_mid</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>im_high</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>im_high</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>th_low</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>th_low</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>isleq_low</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>isleq_low</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>th_high</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>th_high</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>isgeq_high</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>isgeq_high</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>alt_low</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>alt_low</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>alt_high</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>alt_high</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>isbad_low</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>isbad_low</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>isbad_mid</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>isbad_mid</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>isbad_high</em></td><td> </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>isbad_high</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Split the values in an image in three according to two thresholds. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>The image to split </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>im_low</em> </td><td>If non-NULL low-valued pixels are assigned to this image </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>im_mid</em> </td><td>If non-NULL middle-valued pixels are assigned to this image </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>im_high</em> </td><td>If non-NULL high-valued pixels are assigned to this image </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>th_low</em> </td><td>The lower threshold </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>isleq_low</em> </td><td>Ift true use less than or equal </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>th_high</em> </td><td>The upper threshold, must be at least th_low </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>isgeq_high</em> </td><td>Iff true use greater than or equal </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>alt_low</em> </td><td>Assign this value when the pixel value is not low </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>alt_high</em> </td><td>Assign this value, when the pixel value is not high </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>isbad_low</em> </td><td>Flag non-low pixels as bad </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>isbad_mid</em> </td><td>Flag non-mid pixels as bad </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>isbad_high</em> </td><td>Flag non-high pixels as bad </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>The image to split </td></tr>
+    <tr><td class="paramname">im_low</td><td>If non-NULL low-valued pixels are assigned to this image </td></tr>
+    <tr><td class="paramname">im_mid</td><td>If non-NULL middle-valued pixels are assigned to this image </td></tr>
+    <tr><td class="paramname">im_high</td><td>If non-NULL high-valued pixels are assigned to this image </td></tr>
+    <tr><td class="paramname">th_low</td><td>The lower threshold </td></tr>
+    <tr><td class="paramname">isleq_low</td><td>Ift true use less than or equal </td></tr>
+    <tr><td class="paramname">th_high</td><td>The upper threshold, must be at least th_low </td></tr>
+    <tr><td class="paramname">isgeq_high</td><td>Iff true use greater than or equal </td></tr>
+    <tr><td class="paramname">alt_low</td><td>Assign this value when the pixel value is not low </td></tr>
+    <tr><td class="paramname">alt_high</td><td>Assign this value, when the pixel value is not high </td></tr>
+    <tr><td class="paramname">isbad_low</td><td>Flag non-low pixels as bad </td></tr>
+    <tr><td class="paramname">isbad_mid</td><td>Flag non-mid pixels as bad </td></tr>
+    <tr><td class="paramname">isbad_high</td><td>Flag non-high pixels as bad </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>At least one output image must be non-NULL; all non-NULL images must be of identical size, but may be of any pixel-type. self may be passed as one of the output images for an in-place split.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>At least one output image must be non-NULL; all non-NULL images must be of identical size, but may be of any pixel-type. self may be passed as one of the output images for an in-place split.</dd></dl>
 <p>FIXME: This function is way too slow and perhaps over-engineered...</p>
 <p>A split in two is achieved with th_low equal th_high (in this case there is little reason for im_mid to be non-NULL).</p>
 <p>All pixel values in the output images are reset, as well as their bad pixels maps.</p>
 <p>If an input pixel-value is flagged as bad, then the receiving pixel in the output image is flagged as well.</p>
-<dl class="user"><dt><b>The same image may be passed more than once which allows a split</b></dt><dd>into one image with the mid-valued pixels and another with both the low and high-valued pixels, i.e. <div class="fragment"><pre class="fragment">       <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(source, dest, im_mid, dest,
-                          th_low,  isleq_low, th_high, isgeq_high,
-                          alt_low, alt_high,
-                          isbad_low, isbad_mid, isbad_high);
-</pre></div></dd></dl>
-<dl class="user"><dt><b>These two calls are equivalent:</b></dt><dd><div class="fragment"><pre class="fragment">     cpl_image_threshold(img, th_low, th_high, alt_low, alt_high);
-</pre></div></dd></dl>
-<div class="fragment"><pre class="fragment">     <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(img, NULL, img, NULL,
-                        th_low,  CPL_TRUE, th_high, CPL_TRUE,
-                        alt_low, alt_high, dontcare, CPL_FALSE, dontcare);
-</pre></div> 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00671">671</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<dl class="section user"><dt>The same image may be passed more than once which allows a split</dt><dd>into one image with the mid-valued pixels and another with both the low and high-valued pixels, i.e. <div class="fragment"><div class="line">       <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(source, dest, im_mid, dest,</div>
+<div class="line">                          th_low,  isleq_low, th_high, isgeq_high,</div>
+<div class="line">                          alt_low, alt_high,</div>
+<div class="line">                          isbad_low, isbad_mid, isbad_high);</div>
+</div><!-- fragment --></dd></dl>
+<dl class="section user"><dt>These two calls are equivalent:</dt><dd><div class="fragment"><div class="line">     cpl_image_threshold(img, th_low, th_high, alt_low, alt_high);</div>
+</div><!-- fragment --></dd></dl>
+<div class="fragment"><div class="line">     <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(img, NULL, img, NULL,</div>
+<div class="line">                        th_low,  CPL_TRUE, th_high, CPL_TRUE,</div>
+<div class="line">                        alt_low, alt_high, dontcare, CPL_FALSE, dontcare);</div>
+</div><!-- fragment --> 
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00665">665</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gaf9d392144014e2363054bc3f83c8e47e"></a><!-- doxytag: member="irplib_utils.c::irplib_reset" ref="gaf9d392144014e2363054bc3f83c8e47e" args="(void)" -->
+<a class="anchor" id="gaf9d392144014e2363054bc3f83c8e47e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void irplib_reset </td>
           <td>(</td>
-          <td class="paramtype">void </td>
-          <td class="paramname"></td>
-          <td> ) </td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Reset IRPLIB state. </p>
 <p>This function resets all static memory used by IRPLIB to a well-defined, initial state.</p>
 <p>The function should be called (during initialization) by any application using static memory facilities in IRPLIB.</p>
 <p>Currently, this function does nothing. </p>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01140">1140</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l01134">1134</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga59a68df1795523d4f7653875bd9fc01d"></a><!-- doxytag: member="irplib_utils.c::irplib_table_read_from_frameset" ref="ga59a68df1795523d4f7653875bd9fc01d" args="(cpl_table *self, const cpl_frameset *useframes, int maxlinelen, char commentchar, const cpl_parameterlist *parlist, cpl_boolean(*table_set_row)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *))" -->
+<a class="anchor" id="ga59a68df1795523d4f7653875bd9fc01d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_table_read_from_frameset </td>
           <td>(</td>
-          <td class="paramtype">cpl_table * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_table * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_frameset * </td>
-          <td class="paramname"> <em>useframes</em>, </td>
+          <td class="paramtype">const cpl_frameset * </td>
+          <td class="paramname"><em>useframes</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxlinelen</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxlinelen</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">char </td>
-          <td class="paramname"> <em>commentchar</em>, </td>
+          <td class="paramtype">char </td>
+          <td class="paramname"><em>commentchar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_parameterlist * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">const cpl_parameterlist * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean(*)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *) </td>
-          <td class="paramname"> <em>table_set_row</em></td><td> </td>
+          <td class="paramtype">cpl_boolean(*)(cpl_table *, const char *, int, const cpl_frame *, const cpl_parameterlist *) </td>
+          <td class="paramname"><em>table_set_row</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Set the rows of a table with data from one or more (ASCII) files. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Table with labels (and units) but no row data </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>useframes</em> </td><td>The frames to process for the table </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxlinelen</em> </td><td>The maximum line length in the input file(s) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>commentchar</em> </td><td>Skip lines that start with this character, e.g. '#' </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>The list of input parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>table_set_row</em> </td><td>Caller-defined function to insert one row in the table </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Table with labels (and units) but no row data </td></tr>
+    <tr><td class="paramname">useframes</td><td>The frames to process for the table </td></tr>
+    <tr><td class="paramname">maxlinelen</td><td>The maximum line length in the input file(s) </td></tr>
+    <tr><td class="paramname">commentchar</td><td>Skip lines that start with this character, e.g. '#' </td></tr>
+    <tr><td class="paramname">parlist</td><td>The list of input parameters </td></tr>
+    <tr><td class="paramname">table_set_row</td><td>Caller-defined function to insert one row in the table </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE or the relevant CPL error code on error</dd></dl>
 <p>table_set_row() is a function that sets the specified row in a table</p>
 <ul>
 <li>it may optionally include a check of the line for consistency. An integer is passed to table_set_row() to indicate which row to set. Instead of setting the row table_set_row() may decide to discard the data. Iff the row was set, table_set_row() should return CPL_TRUE.</li>
 </ul>
 <p>It needs to know: 1) How to parse the lines - each line is read with fgets(). 2) For each column: type/format (lg/s/d) + label</p>
 <p>During a succesful call self will have rows added or removed to exactly match the number of lines converted. Any a priori knowledge about the expected number of converted rows can be used in the creation of the table (to reduce memory reallocation overhead). On error the number of rows in self is undefined.</p>
-<dl class="user"><dt><b>Example (error handling omitted for brevity):</b></dt><dd><div class="fragment"><pre class="fragment">      <span class="keyword">extern</span> cpl_boolean my_table_set_row(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-                                          <span class="keyword">const</span> cpl_frame *,
-                                          <span class="keyword">const</span> cpl_parameterlist *);
-      <span class="keyword">const</span> <span class="keywordtype">int</span> expected_rows = 42;
-      cpl_table * <span class="keyword">self</span> = cpl_table_new(expected_rows);
-
-      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL1"</span>, CPL_TYPE_STRING);
-      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, CPL_TYPE_DOUBLE);
-      cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, <span class="stringliteral">"Some_SI_Unit"</span>);
-
-      <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(<span class="keyword">self</span>, useframes, 1024, <span class="charliteral">'#'</span>, parlist,
-                                      my_table_set_row);
+<dl class="section user"><dt>Example (error handling omitted for brevity):</dt><dd><div class="fragment"><div class="line">      <span class="keyword">extern</span> cpl_boolean my_table_set_row(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line">                                          <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line">                                          <span class="keyword">const</span> cpl_parameterlist *);</div>
+<div class="line">      <span class="keyword">const</span> <span class="keywordtype">int</span> expected_rows = 42;</div>
+<div class="line">      cpl_table * <span class="keyword">self</span> = cpl_table_new(expected_rows);</div>
+<div class="line"></div>
+<div class="line">      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL1"</span>, CPL_TYPE_STRING);</div>
+<div class="line">      cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line">      cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"MYLABEL2"</span>, <span class="stringliteral">"Some_SI_Unit"</span>);</div>
+<div class="line"></div>
+<div class="line">      <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(<span class="keyword">self</span>, useframes, 1024, <span class="charliteral">'#'</span>, parlist,</div>
+<div class="line">                                      my_table_set_row);</div>
+<div class="line"></div>
+<div class="line">      <span class="comment">// Use self...</span></div>
+<div class="line"></div>
+<div class="line">      cpl_table_delete(<span class="keyword">self</span>);</div>
+</div><!-- fragment --> </dd></dl>
 
-      <span class="comment">// Use self...</span>
+<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00989">989</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
 
-      cpl_table_delete(<span class="keyword">self</span>);
-</pre></div> </dd></dl>
+<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00860">irplib_dfs_table_convert()</a>.</p>
 
-<p>Definition at line <a class="el" href="irplib__utils_8c_source.html#l00995">995</a> of file <a class="el" href="irplib__utils_8c_source.html">irplib_utils.c</a>.</p>
-
-<p>Referenced by <a class="el" href="irplib__utils_8c_source.html#l00866">irplib_dfs_table_convert()</a>.</p>
-
-</div>
 </div>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__wavecal.html b/html/group__irplib__wavecal.html
index 9f4f948..0331aa3 100644
--- a/html/group__irplib__wavecal.html
+++ b/html/group__irplib__wavecal.html
@@ -2,166 +2,191 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Spectro functionality</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Spectro functionality</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Spectro functionality</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25">irplib_bivector_count_positive</a> (const cpl_bivector *self, double x_min, double x_max)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Count the positive Y-entries in a given X-range.  <a href="#ga03d7f038adc7e18e7a9071581fa47a25"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb">irplib_polynomial_fit_2d_dispersion</a> (cpl_polynomial *self, const cpl_image *imgwave, int fitdeg, double *presid)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Fit a 2D-dispersion from an image of wavelengths.  <a href="#ga2dd3251367e2ee8b8bd5ce080e9f31bb"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86">irplib_polynomial_find_1d_from_correlation</a> (cpl_polynomial *self, int maxdeg, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), double pixtol, double pixstep, int hsize, int maxite,  [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Modify self by maximizing the cross-correlation.  <a href="#ga8f49c4927c50a461288e8f19720dff86"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a">irplib_vector_fill_line_spectrum</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga1d49cb7f85fc246c8fdf38625c769f7a"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f">irplib_vector_fill_logline_spectrum</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#gad22539bf83d1b08d845ed5f618a4009f"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95">irplib_vector_fill_line_spectrum_fast</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga6a463d7816b4164fdd23a4df2805cc95"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c">irplib_vector_fill_logline_spectrum_fast</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga75a85320c74d1088eeaeec97974d793c"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d">irplib_plot_spectrum_and_model</a> (const cpl_vector *self, const cpl_polynomial *disp1d, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *))</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Plot a 1D spectrum and one from a model.  <a href="#ga7bac402a4e2c60f7646f1e655a66833d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6">irplib_bivector_find_shift_from_correlation</a> (cpl_bivector *self, const cpl_polynomial *disp, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), int hsize, cpl_boolean doplot, double * [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Find shift(s) that maximizes (locally) the cross-correlation.  <a href="#ga260740bf1f3fc364b301519eab3249a6"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56">irplib_polynomial_shift_1d_from_correlation</a> (cpl_polynomial *self, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), int hsize, cpl_boolean doplot, double *pxc)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Shift self by the amount that maximizes the cross-correlation.  <a href="#gadf93655e2c7c0d5df23e2e3de66d0b56"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761">irplib_vector_fill_line_spectrum_model</a> (cpl_vector *self, cpl_vector *linepix, cpl_vector *erftmp, const cpl_polynomial *disp, const cpl_bivector *lines, double wslit, double wfwhm, double xtrunc, int hsize, cpl_boolean dofast, cpl_boolean dolog, cpl_size *pulines)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from (arc) lines and a dispersion relation.  <a href="#ga8a65755ca17c9fa0b69ceb128f544761"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f">irplib_erf_antideriv</a> (double x, double sigma)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.  <a href="#ga2da9c21054a19322705de2d4f48d1d3f"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8">irplib_polynomial_find_1d_from_correlation_all</a> (cpl_polynomial *self, int maxdeg, const cpl_vector *obs, int nmaxima, int linelim, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), double pixtol, double pi [...]
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Modify self by maximizing the cross-correlation across all maxima.  <a href="#ga7e782bcb7ec0e638a93dba628916a7a8"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga03d7f038adc7e18e7a9071581fa47a25"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25">irplib_bivector_count_positive</a> (const cpl_bivector *self, double x_min, double x_max)</td></tr>
+<tr class="memdesc:ga03d7f038adc7e18e7a9071581fa47a25"><td class="mdescLeft"> </td><td class="mdescRight">Count the positive Y-entries in a given X-range.  <a href="#ga03d7f038adc7e18e7a9071581fa47a25"></a><br/></td></tr>
+<tr class="memitem:ga2dd3251367e2ee8b8bd5ce080e9f31bb"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb">irplib_polynomial_fit_2d_dispersion</a> (cpl_polynomial *self, const cpl_image *imgwave, int fitdeg, double *presid)</td></tr>
+<tr class="memdesc:ga2dd3251367e2ee8b8bd5ce080e9f31bb"><td class="mdescLeft"> </td><td class="mdescRight">Fit a 2D-dispersion from an image of wavelengths.  <a href="#ga2dd3251367e2ee8b8bd5ce080e9f31bb"></a><br/></td></tr>
+<tr class="memitem:ga8f49c4927c50a461288e8f19720dff86"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86">irplib_polynomial_find_1d_from_correlation</a> (cpl_polynomial *self, int maxdeg, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), dou [...]
+<tr class="memdesc:ga8f49c4927c50a461288e8f19720dff86"><td class="mdescLeft"> </td><td class="mdescRight">Modify self by maximizing the cross-correlation.  <a href="#ga8f49c4927c50a461288e8f19720dff86"></a><br/></td></tr>
+<tr class="memitem:ga1d49cb7f85fc246c8fdf38625c769f7a"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a">irplib_vector_fill_line_spectrum</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
+<tr class="memdesc:ga1d49cb7f85fc246c8fdf38625c769f7a"><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga1d49cb7f85fc246c8fdf38625c769f7a"></a><br/></td></tr>
+<tr class="memitem:gad22539bf83d1b08d845ed5f618a4009f"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f">irplib_vector_fill_logline_spectrum</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
+<tr class="memdesc:gad22539bf83d1b08d845ed5f618a4009f"><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#gad22539bf83d1b08d845ed5f618a4009f"></a><br/></td></tr>
+<tr class="memitem:ga6a463d7816b4164fdd23a4df2805cc95"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95">irplib_vector_fill_line_spectrum_fast</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
+<tr class="memdesc:ga6a463d7816b4164fdd23a4df2805cc95"><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga6a463d7816b4164fdd23a4df2805cc95"></a><br/></td></tr>
+<tr class="memitem:ga75a85320c74d1088eeaeec97974d793c"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c">irplib_vector_fill_logline_spectrum_fast</a> (cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)</td></tr>
+<tr class="memdesc:ga75a85320c74d1088eeaeec97974d793c"><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from a model and a dispersion relation.  <a href="#ga75a85320c74d1088eeaeec97974d793c"></a><br/></td></tr>
+<tr class="memitem:ga7bac402a4e2c60f7646f1e655a66833d"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d">irplib_plot_spectrum_and_model</a> (const cpl_vector *self, const cpl_polynomial *disp1d, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *))</td></tr>
+<tr class="memdesc:ga7bac402a4e2c60f7646f1e655a66833d"><td class="mdescLeft"> </td><td class="mdescRight">Plot a 1D spectrum and one from a model.  <a href="#ga7bac402a4e2c60f7646f1e655a66833d"></a><br/></td></tr>
+<tr class="memitem:ga260740bf1f3fc364b301519eab3249a6"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6">irplib_bivector_find_shift_from_correlation</a> (cpl_bivector *self, const cpl_polynomial *disp, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectru [...]
+<tr class="memdesc:ga260740bf1f3fc364b301519eab3249a6"><td class="mdescLeft"> </td><td class="mdescRight">Find shift(s) that maximizes (locally) the cross-correlation.  <a href="#ga260740bf1f3fc364b301519eab3249a6"></a><br/></td></tr>
+<tr class="memitem:gadf93655e2c7c0d5df23e2e3de66d0b56"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56">irplib_polynomial_shift_1d_from_correlation</a> (cpl_polynomial *self, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), int hsize, cpl [...]
+<tr class="memdesc:gadf93655e2c7c0d5df23e2e3de66d0b56"><td class="mdescLeft"> </td><td class="mdescRight">Shift self by the amount that maximizes the cross-correlation.  <a href="#gadf93655e2c7c0d5df23e2e3de66d0b56"></a><br/></td></tr>
+<tr class="memitem:ga8a65755ca17c9fa0b69ceb128f544761"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761">irplib_vector_fill_line_spectrum_model</a> (cpl_vector *self, cpl_vector *linepix, cpl_vector *erftmp, const cpl_polynomial *disp, const cpl_bivector *lines, double wslit, double wfwhm, double xtrunc, int hsize, cpl_boolean dofast, cpl_ [...]
+<tr class="memdesc:ga8a65755ca17c9fa0b69ceb128f544761"><td class="mdescLeft"> </td><td class="mdescRight">Generate a 1D spectrum from (arc) lines and a dispersion relation.  <a href="#ga8a65755ca17c9fa0b69ceb128f544761"></a><br/></td></tr>
+<tr class="memitem:ga2da9c21054a19322705de2d4f48d1d3f"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f">irplib_erf_antideriv</a> (double x, double sigma)</td></tr>
+<tr class="memdesc:ga2da9c21054a19322705de2d4f48d1d3f"><td class="mdescLeft"> </td><td class="mdescRight">The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.  <a href="#ga2da9c21054a19322705de2d4f48d1d3f"></a><br/></td></tr>
+<tr class="memitem:ga7e782bcb7ec0e638a93dba628916a7a8"><td class="memItemLeft" align="right" valign="top">cpl_error_code </td><td class="memItemRight" valign="bottom"><a class="el" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8">irplib_polynomial_find_1d_from_correlation_all</a> (cpl_polynomial *self, int maxdeg, const cpl_vector *obs, int nmaxima, int linelim, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irpl [...]
+<tr class="memdesc:ga7e782bcb7ec0e638a93dba628916a7a8"><td class="mdescLeft"> </td><td class="mdescRight">Modify self by maximizing the cross-correlation across all maxima.  <a href="#ga7e782bcb7ec0e638a93dba628916a7a8"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga03d7f038adc7e18e7a9071581fa47a25"></a><!-- doxytag: member="irplib_wavecal.c::irplib_bivector_count_positive" ref="ga03d7f038adc7e18e7a9071581fa47a25" args="(const cpl_bivector *self, double x_min, double x_max)" -->
+<a class="anchor" id="ga03d7f038adc7e18e7a9071581fa47a25"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int irplib_bivector_count_positive </td>
           <td>(</td>
-          <td class="paramtype">const cpl_bivector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_bivector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>x_min</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>x_min</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>x_max</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>x_max</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Count the positive Y-entries in a given X-range. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Bivector with increasing X-entries </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>x_min</em> </td><td>minimum X-entry </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>x_max</em> </td><td>maximum X-entry </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Bivector with increasing X-entries </td></tr>
+    <tr><td class="paramname">x_min</td><td>minimum X-entry </td></tr>
+    <tr><td class="paramname">x_max</td><td>maximum X-entry </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>the number of matching entries, or negative on error </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>the number of matching entries, or negative on error </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00127">127</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga260740bf1f3fc364b301519eab3249a6"></a><!-- doxytag: member="irplib_wavecal.c::irplib_bivector_find_shift_from_correlation" ref="ga260740bf1f3fc364b301519eab3249a6" args="(cpl_bivector *self, const cpl_polynomial *disp, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), int hsize, cpl_boolean doplot, double *pxc)" -->
+<a class="anchor" id="ga260740bf1f3fc364b301519eab3249a6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_bivector_find_shift_from_correlation </td>
           <td>(</td>
-          <td class="paramtype">cpl_bivector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_bivector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>obs</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>obs</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>model</em>, </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>model</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
-          <td class="paramname"> <em>filler</em>, </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
+          <td class="paramname"><em>filler</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>hsize</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>hsize</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>doplot</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>doplot</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>pxc</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>pxc</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Find shift(s) that maximizes (locally) the cross-correlation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>list of shifts that maximizes the cross-correlation (locally) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>obs</em> </td><td>The observed spectrum to correlate against </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>model</em> </td><td>Pointer to model parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filler</em> </td><td>The function to fill the model spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>hsize</em> </td><td>Half the search-distance, hsize > 0 [pixel] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>doplot</em> </td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pxc</em> </td><td>Iff non-NULL, set *pxc to cross-correlation on success </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>list of shifts that maximizes the cross-correlation (locally) </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">obs</td><td>The observed spectrum to correlate against </td></tr>
+    <tr><td class="paramname">model</td><td>Pointer to model parameters </td></tr>
+    <tr><td class="paramname">filler</td><td>The function to fill the model spectrum </td></tr>
+    <tr><td class="paramname">hsize</td><td>Half the search-distance, hsize > 0 [pixel] </td></tr>
+    <tr><td class="paramname">doplot</td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
+    <tr><td class="paramname">pxc</td><td>Iff non-NULL, set *pxc to cross-correlation on success </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>On success, self will be resized to fit the number of shifts.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>On success, self will be resized to fit the number of shifts.</dd></dl>
 <p>The shifts are listed in order of decreasing cross-correlation. If pxc is non-NULL, *pxc will be set to the cross-correlation at shift 0.</p>
 <p>The shifts may include the extrema -hsize and hsize. </p>
 
@@ -171,41 +196,40 @@
 
 </div>
 </div>
-<a class="anchor" id="ga2da9c21054a19322705de2d4f48d1d3f"></a><!-- doxytag: member="irplib_wavecal.c::irplib_erf_antideriv" ref="ga2da9c21054a19322705de2d4f48d1d3f" args="(double x, double sigma)" -->
+<a class="anchor" id="ga2da9c21054a19322705de2d4f48d1d3f"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">double irplib_erf_antideriv </td>
           <td>(</td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>x</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>x</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>sigma</em></td><td> </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>sigma</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>The antiderivative of erx(x/sigma/sqrt(2)) with respect to x. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>x</em> </td><td>x </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>sigma</em> </td><td>sigma </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">x</td><td>x </td></tr>
+    <tr><td class="paramname">sigma</td><td>sigma </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The antiderivative </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>This function is even. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The antiderivative </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>This function is even. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l01363">1363</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
@@ -213,55 +237,54 @@
 
 </div>
 </div>
-<a class="anchor" id="ga7bac402a4e2c60f7646f1e655a66833d"></a><!-- doxytag: member="irplib_wavecal.c::irplib_plot_spectrum_and_model" ref="ga7bac402a4e2c60f7646f1e655a66833d" args="(const cpl_vector *self, const cpl_polynomial *disp1d, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *))" -->
+<a class="anchor" id="ga7bac402a4e2c60f7646f1e655a66833d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_plot_spectrum_and_model </td>
           <td>(</td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp1d</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp1d</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>model</em>, </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>model</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
-          <td class="paramname"> <em>filler</em></td><td> </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
+          <td class="paramname"><em>filler</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Plot a 1D spectrum and one from a model. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector with observed spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp1d</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>model</em> </td><td>Pointer to model parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filler</em> </td><td>The function to fill the model spectrum </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector with observed spectrum </td></tr>
+    <tr><td class="paramname">disp1d</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">model</td><td>Pointer to model parameters </td></tr>
+    <tr><td class="paramname">filler</td><td>The function to fill the model spectrum </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a> </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a> </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00672">672</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
@@ -269,415 +292,410 @@
 
 </div>
 </div>
-<a class="anchor" id="ga8f49c4927c50a461288e8f19720dff86"></a><!-- doxytag: member="irplib_wavecal.c::irplib_polynomial_find_1d_from_correlation" ref="ga8f49c4927c50a461288e8f19720dff86" args="(cpl_polynomial *self, int maxdeg, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), double pixtol, double pixstep, int hsize, int maxite, double *pxc)" -->
+<a class="anchor" id="ga8f49c4927c50a461288e8f19720dff86"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_find_1d_from_correlation </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxdeg</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxdeg</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>obs</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>obs</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>model</em>, </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>model</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
-          <td class="paramname"> <em>filler</em>, </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
+          <td class="paramname"><em>filler</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>pixtol</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>pixtol</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>pixstep</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>pixstep</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>hsize</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>hsize</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxite</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxite</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>pxc</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>pxc</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Modify self by maximizing the cross-correlation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>1D-Dispersion relation to modify, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxdeg</em> </td><td>Maximize the cross-correlation by modifying maxdeg degree </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>obs</em> </td><td>The observed spectrum to correlate against </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>model</em> </td><td>The model of the lines/OTF etc. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filler</em> </td><td>The function to fill the model spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pixtol</em> </td><td>The (positive) dispersion tolerance, e.g. 1e-6 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pixstep</em> </td><td>The step length used in the maximization, e.g. 0.5 [pixel] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>hsize</em> </td><td>Half the search-distance to ensure a global-maximum, hsize >= 0 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxite</em> </td><td>Maximum number of iterations, e.g. 100 * maxdeg </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pxc</em> </td><td>On sucess, *pxc is the cross-correlation </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>1D-Dispersion relation to modify, at least of degree 1 </td></tr>
+    <tr><td class="paramname">maxdeg</td><td>Maximize the cross-correlation by modifying maxdeg degree </td></tr>
+    <tr><td class="paramname">obs</td><td>The observed spectrum to correlate against </td></tr>
+    <tr><td class="paramname">model</td><td>The model of the lines/OTF etc. </td></tr>
+    <tr><td class="paramname">filler</td><td>The function to fill the model spectrum </td></tr>
+    <tr><td class="paramname">pixtol</td><td>The (positive) dispersion tolerance, e.g. 1e-6 </td></tr>
+    <tr><td class="paramname">pixstep</td><td>The step length used in the maximization, e.g. 0.5 [pixel] </td></tr>
+    <tr><td class="paramname">hsize</td><td>Half the search-distance to ensure a global-maximum, hsize >= 0 </td></tr>
+    <tr><td class="paramname">maxite</td><td>Maximum number of iterations, e.g. 100 * maxdeg </td></tr>
+    <tr><td class="paramname">pxc</td><td>On sucess, *pxc is the cross-correlation </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>Fails with CPL_ERROR_UNSUPPORTED_MODE if compiled without GSL. self must be increasing in the interval from 1 to the length of obs. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>Fails with CPL_ERROR_UNSUPPORTED_MODE if compiled without GSL. self must be increasing in the interval from 1 to the length of obs. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00244">244</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga7e782bcb7ec0e638a93dba628916a7a8"></a><!-- doxytag: member="irplib_wavecal.c::irplib_polynomial_find_1d_from_correlation_all" ref="ga7e782bcb7ec0e638a93dba628916a7a8" args="(cpl_polynomial *self, int maxdeg, const cpl_vector *obs, int nmaxima, int linelim, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), double pixtol, double pixstep, int hsize, int maxite, int maxfail, int maxcont, cpl [...]
+<a class="anchor" id="ga7e782bcb7ec0e638a93dba628916a7a8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_find_1d_from_correlation_all </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxdeg</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxdeg</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>obs</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>obs</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>nmaxima</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>nmaxima</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>linelim</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>linelim</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>model</em>, </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>model</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
-          <td class="paramname"> <em>filler</em>, </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
+          <td class="paramname"><em>filler</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>pixtol</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>pixtol</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>pixstep</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>pixstep</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>hsize</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>hsize</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxite</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxite</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxfail</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxfail</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>maxcont</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>maxcont</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>doplot</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>doplot</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>pxc</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>pxc</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Modify self by maximizing the cross-correlation across all maxima. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>1D-Dispersion relation to modify, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxdeg</em> </td><td>Maximize the cross-correlation by modifying maxdeg degree </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>obs</em> </td><td>The observed spectrum to correlate against </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>nmaxima</em> </td><td>Number of local maxima to try (0 for all, 1 for global only) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>linelim</em> </td><td>Maximum number of lines allowed in iterative refinement </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>model</em> </td><td>The model of the lines/OTF etc. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filler</em> </td><td>The function to fill the model spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pixtol</em> </td><td>The (positive) dispersion tolerance, e.g. 1e-6 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pixstep</em> </td><td>The step length used in the maximization, e.g. 0.5 [pixel] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>hsize</em> </td><td>Half the search-distance to ensure a global-maximum, hsize >= 0 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxite</em> </td><td>Maximum number of iterations, e.g. 100 * maxdeg </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxfail</em> </td><td>Number of retries on failure </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>maxcont</em> </td><td>Number of retries on non-convergence </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>doplot</em> </td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pxc</em> </td><td>On success, *pxc is the cross-correlation </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>1D-Dispersion relation to modify, at least of degree 1 </td></tr>
+    <tr><td class="paramname">maxdeg</td><td>Maximize the cross-correlation by modifying maxdeg degree </td></tr>
+    <tr><td class="paramname">obs</td><td>The observed spectrum to correlate against </td></tr>
+    <tr><td class="paramname">nmaxima</td><td>Number of local maxima to try (0 for all, 1 for global only) </td></tr>
+    <tr><td class="paramname">linelim</td><td>Maximum number of lines allowed in iterative refinement </td></tr>
+    <tr><td class="paramname">model</td><td>The model of the lines/OTF etc. </td></tr>
+    <tr><td class="paramname">filler</td><td>The function to fill the model spectrum </td></tr>
+    <tr><td class="paramname">pixtol</td><td>The (positive) dispersion tolerance, e.g. 1e-6 </td></tr>
+    <tr><td class="paramname">pixstep</td><td>The step length used in the maximization, e.g. 0.5 [pixel] </td></tr>
+    <tr><td class="paramname">hsize</td><td>Half the search-distance to ensure a global-maximum, hsize >= 0 </td></tr>
+    <tr><td class="paramname">maxite</td><td>Maximum number of iterations, e.g. 100 * maxdeg </td></tr>
+    <tr><td class="paramname">maxfail</td><td>Number of retries on failure </td></tr>
+    <tr><td class="paramname">maxcont</td><td>Number of retries on non-convergence </td></tr>
+    <tr><td class="paramname">doplot</td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
+    <tr><td class="paramname">pxc</td><td>On success, *pxc is the cross-correlation </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>Fails with CPL_ERROR_UNSUPPORTED_MODE if compiled without GSL. self must be increasing in the interval from 1 to the length of obs. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>Fails with CPL_ERROR_UNSUPPORTED_MODE if compiled without GSL. self must be increasing in the interval from 1 to the length of obs. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l01496">1496</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
-<p>References <a class="el" href="irplib__wavecal_8c_source.html#l00759">irplib_bivector_find_shift_from_correlation()</a>, <a class="el" href="irplib__utils_8c_source.html#l00183">irplib_errorstate_dump_debug()</a>, and <a class="el" href="irplib__wavecal_8c_source.html#l00672">irplib_plot_spectrum_and_model()</a>.</p>
+<p>References <a class="el" href="irplib__wavecal_8c_source.html#l00759">irplib_bivector_find_shift_from_correlation()</a>, <a class="el" href="irplib__utils_8c_source.html#l00177">irplib_errorstate_dump_debug()</a>, and <a class="el" href="irplib__wavecal_8c_source.html#l00672">irplib_plot_spectrum_and_model()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga2dd3251367e2ee8b8bd5ce080e9f31bb"></a><!-- doxytag: member="irplib_wavecal.c::irplib_polynomial_fit_2d_dispersion" ref="ga2dd3251367e2ee8b8bd5ce080e9f31bb" args="(cpl_polynomial *self, const cpl_image *imgwave, int fitdeg, double *presid)" -->
+<a class="anchor" id="ga2dd3251367e2ee8b8bd5ce080e9f31bb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_fit_2d_dispersion </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_image * </td>
-          <td class="paramname"> <em>imgwave</em>, </td>
+          <td class="paramtype">const cpl_image * </td>
+          <td class="paramname"><em>imgwave</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>fitdeg</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>fitdeg</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>presid</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>presid</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Fit a 2D-dispersion from an image of wavelengths. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>2D-polynomial to hold fit </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>imgwave</em> </td><td>Image map of wavelengths, any pixeltype </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fitdeg</em> </td><td>Degree of fit </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>presid</em> </td><td>On success, points to fitting residual </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>2D-polynomial to hold fit </td></tr>
+    <tr><td class="paramname">imgwave</td><td>Image map of wavelengths, any pixeltype </td></tr>
+    <tr><td class="paramname">fitdeg</td><td>Degree of fit </td></tr>
+    <tr><td class="paramname">presid</td><td>On success, points to fitting residual </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00160">160</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gadf93655e2c7c0d5df23e2e3de66d0b56"></a><!-- doxytag: member="irplib_wavecal.c::irplib_polynomial_shift_1d_from_correlation" ref="gadf93655e2c7c0d5df23e2e3de66d0b56" args="(cpl_polynomial *self, const cpl_vector *obs, irplib_base_spectrum_model *model, cpl_error_code(*filler)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *), int hsize, cpl_boolean doplot, double *pxc)" -->
+<a class="anchor" id="gadf93655e2c7c0d5df23e2e3de66d0b56"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_polynomial_shift_1d_from_correlation </td>
           <td>(</td>
-          <td class="paramtype">cpl_polynomial * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_polynomial * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_vector * </td>
-          <td class="paramname"> <em>obs</em>, </td>
+          <td class="paramtype">const cpl_vector * </td>
+          <td class="paramname"><em>obs</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>model</em>, </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>model</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
-          <td class="paramname"> <em>filler</em>, </td>
+          <td class="paramtype">cpl_error_code(*)(cpl_vector *, const cpl_polynomial *, irplib_base_spectrum_model *) </td>
+          <td class="paramname"><em>filler</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>hsize</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>hsize</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>doplot</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>doplot</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double * </td>
-          <td class="paramname"> <em>pxc</em></td><td> </td>
+          <td class="paramtype">double * </td>
+          <td class="paramname"><em>pxc</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Shift self by the amount that maximizes the cross-correlation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>1D-Dispersion relation to shift, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>obs</em> </td><td>The observed spectrum to correlate against </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>model</em> </td><td>Pointer to model parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>filler</em> </td><td>The function to fill the model spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>hsize</em> </td><td>Half the search-distance, hsize > 0 [pixel] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>doplot</em> </td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pxc</em> </td><td>Iff non-NULL, set *pxc to cross-correlation on success </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>1D-Dispersion relation to shift, at least of degree 1 </td></tr>
+    <tr><td class="paramname">obs</td><td>The observed spectrum to correlate against </td></tr>
+    <tr><td class="paramname">model</td><td>Pointer to model parameters </td></tr>
+    <tr><td class="paramname">filler</td><td>The function to fill the model spectrum </td></tr>
+    <tr><td class="paramname">hsize</td><td>Half the search-distance, hsize > 0 [pixel] </td></tr>
+    <tr><td class="paramname">doplot</td><td>Plot the cross-correlation as a function of pixel shift </td></tr>
+    <tr><td class="paramname">pxc</td><td>Iff non-NULL, set *pxc to cross-correlation on success </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00936">936</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga1d49cb7f85fc246c8fdf38625c769f7a"></a><!-- doxytag: member="irplib_wavecal.c::irplib_vector_fill_line_spectrum" ref="ga1d49cb7f85fc246c8fdf38625c769f7a" args="(cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)" -->
+<a class="anchor" id="ga1d49cb7f85fc246c8fdf38625c769f7a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_vector_fill_line_spectrum </td>
           <td>(</td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>lsslamp</em></td><td> </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>lsslamp</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Generate a 1D spectrum from a model and a dispersion relation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector to fill with spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lsslamp</em> </td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector to fill with spectrum </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">lsslamp</td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code</dd></dl>
 <p>The model comprises these elements: </p>
-<div class="fragment"><pre class="fragment">    <span class="keywordtype">double</span> wslit;  <span class="comment">// Slit Width</span>
-    <span class="keywordtype">double</span> wfwhm;  <span class="comment">// FWHM of transfer function</span>
-    <span class="keywordtype">double</span> xtrunc; <span class="comment">// Truncate transfer function beyond xtrunc, xtrunc > 0</span>
-    <span class="keyword">const</span> cpl_bivector * lines;    <span class="comment">// Catalogue of intensities, with</span>
-                                   <span class="comment">//   increasing X-vector elements</span>
-    cpl_vector         * linepix;  <span class="comment">// NULL, or temporary work-space of size</span>
-                                   <span class="comment">// equal to the lines bivector</span>
-                                   <span class="comment">// - should be uninitialized to zero</span>
-    cpl_size             cost;     <span class="comment">// Will be incremented for each call</span>
-    cpl_size             xcost;    <span class="comment">// Will be incremented for each OK call</span>
-</pre></div><p>The units of the X-values of the lines is assumed to be the same as that of disp, the units of wslit, wfwhm and xtrunc are assumed to be the same as the input unit of disp(), the units of self will be that of the Y-values of the lines. </p>
+<div class="fragment"><div class="line">    <span class="keywordtype">double</span> wslit;  <span class="comment">// Slit Width</span></div>
+<div class="line">    <span class="keywordtype">double</span> wfwhm;  <span class="comment">// FWHM of transfer function</span></div>
+<div class="line">    <span class="keywordtype">double</span> xtrunc; <span class="comment">// Truncate transfer function beyond xtrunc, xtrunc > 0</span></div>
+<div class="line">    <span class="keyword">const</span> cpl_bivector * lines;    <span class="comment">// Catalogue of intensities, with</span></div>
+<div class="line">                                   <span class="comment">//   increasing X-vector elements</span></div>
+<div class="line">    cpl_vector         * linepix;  <span class="comment">// NULL, or temporary work-space of size</span></div>
+<div class="line">                                   <span class="comment">// equal to the lines bivector</span></div>
+<div class="line">                                   <span class="comment">// - should be uninitialized to zero</span></div>
+<div class="line">    cpl_size             cost;     <span class="comment">// Will be incremented for each call</span></div>
+<div class="line">    cpl_size             xcost;    <span class="comment">// Will be incremented for each OK call</span></div>
+</div><!-- fragment --><p>The units of the X-values of the lines is assumed to be the same as that of disp, the units of wslit, wfwhm and xtrunc are assumed to be the same as the input unit of disp(), the units of self will be that of the Y-values of the lines. </p>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00494">494</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
@@ -685,48 +703,47 @@
 
 </div>
 </div>
-<a class="anchor" id="ga6a463d7816b4164fdd23a4df2805cc95"></a><!-- doxytag: member="irplib_wavecal.c::irplib_vector_fill_line_spectrum_fast" ref="ga6a463d7816b4164fdd23a4df2805cc95" args="(cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)" -->
+<a class="anchor" id="ga6a463d7816b4164fdd23a4df2805cc95"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_vector_fill_line_spectrum_fast </td>
           <td>(</td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>lsslamp</em></td><td> </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>lsslamp</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Generate a 1D spectrum from a model and a dispersion relation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector to fill with spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lsslamp</em> </td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector to fill with spectrum </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">lsslamp</td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a></dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a></dd></dl>
 <p>Complexity reduced from O(nw) to O(n + w), where n is number of lines and truncation width [pixel] of the line. </p>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00585">585</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
@@ -735,163 +752,161 @@
 
 </div>
 </div>
-<a class="anchor" id="ga8a65755ca17c9fa0b69ceb128f544761"></a><!-- doxytag: member="irplib_wavecal.c::irplib_vector_fill_line_spectrum_model" ref="ga8a65755ca17c9fa0b69ceb128f544761" args="(cpl_vector *self, cpl_vector *linepix, cpl_vector *erftmp, const cpl_polynomial *disp, const cpl_bivector *lines, double wslit, double wfwhm, double xtrunc, int hsize, cpl_boolean dofast, cpl_boolean dolog, cpl_size *pulines)" -->
+<a class="anchor" id="ga8a65755ca17c9fa0b69ceb128f544761"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_vector_fill_line_spectrum_model </td>
           <td>(</td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>linepix</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>linepix</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>erftmp</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>erftmp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_bivector * </td>
-          <td class="paramname"> <em>lines</em>, </td>
+          <td class="paramtype">const cpl_bivector * </td>
+          <td class="paramname"><em>lines</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>wslit</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>wslit</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>wfwhm</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>wfwhm</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">double </td>
-          <td class="paramname"> <em>xtrunc</em>, </td>
+          <td class="paramtype">double </td>
+          <td class="paramname"><em>xtrunc</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>hsize</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>hsize</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>dofast</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>dofast</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_boolean </td>
-          <td class="paramname"> <em>dolog</em>, </td>
+          <td class="paramtype">cpl_boolean </td>
+          <td class="paramname"><em>dolog</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">cpl_size * </td>
-          <td class="paramname"> <em>pulines</em></td><td> </td>
+          <td class="paramtype">cpl_size * </td>
+          <td class="paramname"><em>pulines</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Generate a 1D spectrum from (arc) lines and a dispersion relation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector to fill with spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>linepix</em> </td><td>Vector to update with best guess of line pixel position </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lines</em> </td><td>Catalogue of lines, with increasing wavelengths </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>wslit</em> </td><td>Positive width of the slit </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>wfwhm</em> </td><td>Positive FWHM of the transfer function </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>xtrunc</em> </td><td>Truncate the line profile beyond distance xtrunc, xtrunc > 0 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>hsize</em> </td><td>The 1st intensity in self will be disp(1-hsize), hsize >= 0 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dofast</em> </td><td>Iff true compose profile from pairs of two integer-placed </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dolog</em> </td><td>Iff true log(1+I) is used for the (positive) intensities </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>pulines</em> </td><td>Iff non-NULL, number of lines used, on success </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector to fill with spectrum </td></tr>
+    <tr><td class="paramname">linepix</td><td>Vector to update with best guess of line pixel position </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">lines</td><td>Catalogue of lines, with increasing wavelengths </td></tr>
+    <tr><td class="paramname">wslit</td><td>Positive width of the slit </td></tr>
+    <tr><td class="paramname">wfwhm</td><td>Positive FWHM of the transfer function </td></tr>
+    <tr><td class="paramname">xtrunc</td><td>Truncate the line profile beyond distance xtrunc, xtrunc > 0 </td></tr>
+    <tr><td class="paramname">hsize</td><td>The 1st intensity in self will be disp(1-hsize), hsize >= 0 </td></tr>
+    <tr><td class="paramname">dofast</td><td>Iff true compose profile from pairs of two integer-placed </td></tr>
+    <tr><td class="paramname">dolog</td><td>Iff true log(1+I) is used for the (positive) intensities </td></tr>
+    <tr><td class="paramname">pulines</td><td>Iff non-NULL, number of lines used, on success </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a> </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>This function is supposed to be called via <a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a>. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a> </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>This function is supposed to be called via <a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum()</a>. </dd></dl>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l01046">1046</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
 
-<p>References <a class="el" href="irplib__wavecal_8c_source.html#l01363">irplib_erf_antideriv()</a>, and <a class="el" href="irplib__utils_8c_source.html#l00183">irplib_errorstate_dump_debug()</a>.</p>
+<p>References <a class="el" href="irplib__wavecal_8c_source.html#l01363">irplib_erf_antideriv()</a>, and <a class="el" href="irplib__utils_8c_source.html#l00177">irplib_errorstate_dump_debug()</a>.</p>
 
 <p>Referenced by <a class="el" href="irplib__wavecal_8c_source.html#l00494">irplib_vector_fill_line_spectrum()</a>, <a class="el" href="irplib__wavecal_8c_source.html#l00585">irplib_vector_fill_line_spectrum_fast()</a>, <a class="el" href="irplib__wavecal_8c_source.html#l00539">irplib_vector_fill_logline_spectrum()</a>, and <a class="el" href="irplib__wavecal_8c_source.html#l00630">irplib_vector_fill_logline_spectrum_fast()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gad22539bf83d1b08d845ed5f618a4009f"></a><!-- doxytag: member="irplib_wavecal.c::irplib_vector_fill_logline_spectrum" ref="gad22539bf83d1b08d845ed5f618a4009f" args="(cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)" -->
+<a class="anchor" id="gad22539bf83d1b08d845ed5f618a4009f"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_vector_fill_logline_spectrum </td>
           <td>(</td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>lsslamp</em></td><td> </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>lsslamp</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Generate a 1D spectrum from a model and a dispersion relation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector to fill with spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lsslamp</em> </td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector to fill with spectrum </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">lsslamp</td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The logarithm is taken on the intensities </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a></dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The logarithm is taken on the intensities </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a></dd></dl>
 <p>log(1+I) is used for the (positive) intensities </p>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00539">539</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
@@ -900,49 +915,48 @@
 
 </div>
 </div>
-<a class="anchor" id="ga75a85320c74d1088eeaeec97974d793c"></a><!-- doxytag: member="irplib_wavecal.c::irplib_vector_fill_logline_spectrum_fast" ref="ga75a85320c74d1088eeaeec97974d793c" args="(cpl_vector *self, const cpl_polynomial *disp, irplib_base_spectrum_model *lsslamp)" -->
+<a class="anchor" id="ga75a85320c74d1088eeaeec97974d793c"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">cpl_error_code irplib_vector_fill_logline_spectrum_fast </td>
           <td>(</td>
-          <td class="paramtype">cpl_vector * </td>
-          <td class="paramname"> <em>self</em>, </td>
+          <td class="paramtype">cpl_vector * </td>
+          <td class="paramname"><em>self</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const cpl_polynomial * </td>
-          <td class="paramname"> <em>disp</em>, </td>
+          <td class="paramtype">const cpl_polynomial * </td>
+          <td class="paramname"><em>disp</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">irplib_base_spectrum_model * </td>
-          <td class="paramname"> <em>lsslamp</em></td><td> </td>
+          <td class="paramtype">irplib_base_spectrum_model * </td>
+          <td class="paramname"><em>lsslamp</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Generate a 1D spectrum from a model and a dispersion relation. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>self</em> </td><td>Vector to fill with spectrum </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>disp</em> </td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lsslamp</em> </td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">self</td><td>Vector to fill with spectrum </td></tr>
+    <tr><td class="paramname">disp</td><td>1D-Dispersion relation, at least of degree 1 </td></tr>
+    <tr><td class="paramname">lsslamp</td><td>Pointer to irplib_line_spectrum_model struct </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>The logarithm is taken on the intensities </dd></dl>
-<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast()</a></dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>CPL_ERROR_NONE on success, otherwise the relevant CPL error code </dd></dl>
+<dl class="section note"><dt>Note:</dt><dd>The logarithm is taken on the intensities </dd></dl>
+<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast()</a></dd></dl>
 <p>log(1+I) is used for the (positive) intensities </p>
 
 <p>Definition at line <a class="el" href="irplib__wavecal_8c_source.html#l00630">630</a> of file <a class="el" href="irplib__wavecal_8c_source.html">irplib_wavecal.c</a>.</p>
@@ -951,9 +965,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__wcs.html b/html/group__irplib__wcs.html
index 06fab36..c718263 100644
--- a/html/group__irplib__wcs.html
+++ b/html/group__irplib__wcs.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions related to WCS</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Functions related to WCS</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Functions related to WCS</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__irplib__wlxcorr.html b/html/group__irplib__wlxcorr.html
index c577a09..29427c9 100644
--- a/html/group__irplib__wlxcorr.html
+++ b/html/group__irplib__wlxcorr.html
@@ -2,20 +2,44 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Wavelength Cross correlation w. plotting</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Wavelength Cross correlation w. plotting</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<dl class="user"><dt><b>Synopsis:</b></dt><dd><div class="fragment"><pre class="fragment"><span class="preprocessor">   #include "irplib_wlxcorr.h"</span>
-</pre></div> </dd></dl>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Wavelength Cross correlation w. plotting</div>  </div>
+</div><!--header-->
+<div class="contents">
+<dl class="section user"><dt>Synopsis:</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">     #include "irplib_wlxcorr.h"</span></div>
+</div><!-- fragment --> </dd></dl>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__absolute.html b/html/group__sinfo__absolute.html
index db5acb1..d763a8c 100644
--- a/html/group__sinfo__absolute.html
+++ b/html/group__sinfo__absolute.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Sinfo_absolute</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Sinfo_absolute</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Sinfo_absolute</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__absolute__utils.html b/html/group__sinfo__absolute__utils.html
index 3038118..e8b1fca 100644
--- a/html/group__sinfo__absolute__utils.html
+++ b/html/group__sinfo__absolute__utils.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: routines to determine the absolute positions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>routines to determine the absolute positions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>of the slitlets out of an emission line frame </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">routines to determine the absolute positions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>of the slitlets out of an emission line frame </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__bad__pix__search.html b/html/group__sinfo__bad__pix__search.html
index 7b5463e..c60343a 100644
--- a/html/group__sinfo__bad__pix__search.html
+++ b/html/group__sinfo__bad__pix__search.html
@@ -2,150 +2,171 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Bad Pixel Search</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Bad Pixel Search</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Bad Pixel Search</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15">sinfo_bp_dist_config_add</a> (cpl_parameterlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#ga4f320ea65a00f127ece79fd2c6416a15"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb">sinfo_bp_noise_config_add</a> (cpl_parameterlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#gaa86bb476f2328523607038df849c2beb"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0">sinfo_bp_norm_config_add</a> (cpl_parameterlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#ga6f49eed82217a86089ff7f23465ae3e0"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb">sinfo_bp_sky_config_add</a> (cpl_parameterlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#gaba8d9bda2f23ab3e4218598434a3ceeb"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4f320ea65a00f127ece79fd2c6416a15"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15">sinfo_bp_dist_config_add</a> (cpl_parameterlist *list)</td></tr>
+<tr class="memdesc:ga4f320ea65a00f127ece79fd2c6416a15"><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#ga4f320ea65a00f127ece79fd2c6416a15"></a><br/></td></tr>
+<tr class="memitem:gaa86bb476f2328523607038df849c2beb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb">sinfo_bp_noise_config_add</a> (cpl_parameterlist *list)</td></tr>
+<tr class="memdesc:gaa86bb476f2328523607038df849c2beb"><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#gaa86bb476f2328523607038df849c2beb"></a><br/></td></tr>
+<tr class="memitem:ga6f49eed82217a86089ff7f23465ae3e0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0">sinfo_bp_norm_config_add</a> (cpl_parameterlist *list)</td></tr>
+<tr class="memdesc:ga6f49eed82217a86089ff7f23465ae3e0"><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#ga6f49eed82217a86089ff7f23465ae3e0"></a><br/></td></tr>
+<tr class="memitem:gaba8d9bda2f23ab3e4218598434a3ceeb"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb">sinfo_bp_sky_config_add</a> (cpl_parameterlist *list)</td></tr>
+<tr class="memdesc:gaba8d9bda2f23ab3e4218598434a3ceeb"><td class="mdescLeft"> </td><td class="mdescRight">Adds parameters for the spectrum extraction.  <a href="#gaba8d9bda2f23ab3e4218598434a3ceeb"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga4f320ea65a00f127ece79fd2c6416a15"></a><!-- doxytag: member="sinfo_bp_dist_config.c::sinfo_bp_dist_config_add" ref="ga4f320ea65a00f127ece79fd2c6416a15" args="(cpl_parameterlist *list)" -->
+<a class="anchor" id="ga4f320ea65a00f127ece79fd2c6416a15"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_bp_dist_config_add </td>
           <td>(</td>
-          <td class="paramtype">cpl_parameterlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_parameterlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Adds parameters for the spectrum extraction. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>Parameter list to which parameters are added.</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>Parameter list to which parameters are added.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Nothing.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Nothing.</dd></dl>
 <p>TBD </p>
 
 <p>Definition at line <a class="el" href="sinfo__bp__dist__config_8c_source.html#l00055">55</a> of file <a class="el" href="sinfo__bp__dist__config_8c_source.html">sinfo_bp_dist_config.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gaa86bb476f2328523607038df849c2beb"></a><!-- doxytag: member="sinfo_bp_noise_config.c::sinfo_bp_noise_config_add" ref="gaa86bb476f2328523607038df849c2beb" args="(cpl_parameterlist *list)" -->
+<a class="anchor" id="gaa86bb476f2328523607038df849c2beb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_bp_noise_config_add </td>
           <td>(</td>
-          <td class="paramtype">cpl_parameterlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_parameterlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Adds parameters for the spectrum extraction. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>Parameter list to which parameters are added.</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>Parameter list to which parameters are added.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Nothing.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Nothing.</dd></dl>
 <p>TBD </p>
 
 <p>Definition at line <a class="el" href="sinfo__bp__noise__config_8c_source.html#l00055">55</a> of file <a class="el" href="sinfo__bp__noise__config_8c_source.html">sinfo_bp_noise_config.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga6f49eed82217a86089ff7f23465ae3e0"></a><!-- doxytag: member="sinfo_bp_norm_config.c::sinfo_bp_norm_config_add" ref="ga6f49eed82217a86089ff7f23465ae3e0" args="(cpl_parameterlist *list)" -->
+<a class="anchor" id="ga6f49eed82217a86089ff7f23465ae3e0"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_bp_norm_config_add </td>
           <td>(</td>
-          <td class="paramtype">cpl_parameterlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_parameterlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Adds parameters for the spectrum extraction. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>Parameter list to which parameters are added.</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>Parameter list to which parameters are added.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Nothing.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Nothing.</dd></dl>
 <p>TBD </p>
 
 <p>Definition at line <a class="el" href="sinfo__bp__norm__config_8c_source.html#l00055">55</a> of file <a class="el" href="sinfo__bp__norm__config_8c_source.html">sinfo_bp_norm_config.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gaba8d9bda2f23ab3e4218598434a3ceeb"></a><!-- doxytag: member="sinfo_bp_sky_config.c::sinfo_bp_sky_config_add" ref="gaba8d9bda2f23ab3e4218598434a3ceeb" args="(cpl_parameterlist *list)" -->
+<a class="anchor" id="gaba8d9bda2f23ab3e4218598434a3ceeb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_bp_sky_config_add </td>
           <td>(</td>
-          <td class="paramtype">cpl_parameterlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_parameterlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Adds parameters for the spectrum extraction. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>Parameter list to which parameters are added.</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>Parameter list to which parameters are added.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Nothing.</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Nothing.</dd></dl>
 <p>TBD </p>
 
 <p>Definition at line <a class="el" href="sinfo__bp__sky__config_8c_source.html#l00055">55</a> of file <a class="el" href="sinfo__bp__sky__config_8c_source.html">sinfo_bp_sky_config.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__balance.html b/html/group__sinfo__balance.html
index 86eda18..dbfbeac 100644
--- a/html/group__sinfo__balance.html
+++ b/html/group__sinfo__balance.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: To be removed</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>To be removed</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">To be removed</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__baryvel.html b/html/group__sinfo__baryvel.html
index 2f56738..f2bfd41 100644
--- a/html/group__sinfo__baryvel.html
+++ b/html/group__sinfo__baryvel.html
@@ -2,20 +2,44 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Velocity correction</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Velocity correction</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Velocity correction</div>  </div>
+</div><!--header-->
+<div class="contents">
 <p>Compute barycentric, heliocentric velocity corrections</p>
 <p>The code in this source file is a 1-to-1 translation of MIDAS COMPUT/BARYCOR as defined in /prim/general/src/compxy.for (only the necessary parts were translated). The code is not meant to be particularly readable/maintainable. To understand the computation the best starting point is probably P. Stumpff, A&A Suppl. Ser. 41, pp. 1-8 (1980) </p>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__boltzmann.html b/html/group__sinfo__boltzmann.html
index 4dd0a5c..eb4228f 100644
--- a/html/group__sinfo__boltzmann.html
+++ b/html/group__sinfo__boltzmann.html
@@ -2,180 +2,232 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Boltzmann function operations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Boltzmann function operations</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Boltzmann function operations</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1">sinfo_new_boltz</a> (float *xdat, float *parlist)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">calculates the value of a Boltzmann function with parameters parlist at the position xdat  <a href="#ga858ad4d37da835f1ff4740d0f23920c1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30">sinfo_new_boltz_deriv</a> (float *xdat, float *parlist, float *dervs)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat  <a href="#ga72b3c6f0c971fb402bd68c8d0fcf5e30"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5">sinfo_new_lsqfit</a> (float *xdat, int *xdim, float *ydat, float *wdat, int *ndat, float *fpar, float *epar, int *mpar, int *npar, float *tol, int *its, float *lab)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">makes a least-squares fit of a function to a set of data points.  <a href="#ga7e03e34851f7c367ab3827c58e8c81c5"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d">sinfo_new_fit_slits_boltz</a> (cpl_image *lineImage, FitParams **par, float **slit_pos, int box_length, float y_box, float diff_tol)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines.  <a href="#gab3549f7bb876fb4091ba3c0bd64d267d"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21">sinfo_new_fit_slits_boltz_single_line</a> (cpl_image *lineImage, float **slit_pos, int box_length, float y_box, int low_pos, int high_pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function  <a href="#gafe44b4032a5b85ff4b88bf7518793b21"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb">sinfo_new_fit_slits_boltz_with_estimate</a> (cpl_image *lineImage, float **slit_pos, int box_length, float y_box, float diff_tol, int low_pos, int high_pos)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">its the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function  <a href="#ga1851d695a240ae0d23d20657f02867bb"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga858ad4d37da835f1ff4740d0f23920c1"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1">sinfo_new_boltz</a> (float *xdat, float *parlist)</td></tr>
+<tr class="memdesc:ga858ad4d37da835f1ff4740d0f23920c1"><td class="mdescLeft"> </td><td class="mdescRight">calculates the value of a Boltzmann function with parameters parlist at the position xdat  <a href="#ga858ad4d37da835f1ff4740d0f23920c1"></a><br/></td></tr>
+<tr class="memitem:ga72b3c6f0c971fb402bd68c8d0fcf5e30"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30">sinfo_new_boltz_deriv</a> (float *xdat, float *parlist, float *dervs)</td></tr>
+<tr class="memdesc:ga72b3c6f0c971fb402bd68c8d0fcf5e30"><td class="mdescLeft"> </td><td class="mdescRight">calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat  <a href="#ga72b3c6f0c971fb402bd68c8d0fcf5e30"></a><br/></td></tr>
+<tr class="memitem:ga7e03e34851f7c367ab3827c58e8c81c5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5">sinfo_new_lsqfit</a> (float *xdat, int *xdim, float *ydat, float *wdat, int *ndat, float *fpar, float *epar, int *mpar, int *npar, float *tol, int *its, float *lab)</td></tr>
+<tr class="memdesc:ga7e03e34851f7c367ab3827c58e8c81c5"><td class="mdescLeft"> </td><td class="mdescRight">makes a least-squares fit of a function to a set of data points.  <a href="#ga7e03e34851f7c367ab3827c58e8c81c5"></a><br/></td></tr>
+<tr class="memitem:gab3549f7bb876fb4091ba3c0bd64d267d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d">sinfo_new_fit_slits_boltz</a> (cpl_image *lineImage, FitParams **par, float **slit_pos, int box_length, float y_box, float diff_tol)</td></tr>
+<tr class="memdesc:gab3549f7bb876fb4091ba3c0bd64d267d"><td class="mdescLeft"> </td><td class="mdescRight">fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines.  <a href="#gab3549f7bb876fb4091ba3c0bd64d267d"></a><br/></td></tr>
+<tr class="memitem:gafe44b4032a5b85ff4b88bf7518793b21"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21">sinfo_new_fit_slits_boltz_single_line</a> (cpl_image *lineImage, float **slit_pos, int box_length, float y_box, int low_pos, int high_pos)</td></tr>
+<tr class="memdesc:gafe44b4032a5b85ff4b88bf7518793b21"><td class="mdescLeft"> </td><td class="mdescRight">fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function  <a href="#gafe44b4032a5b85ff4b88bf7518793b21"></a><br/></td></tr>
+<tr class="memitem:ga1851d695a240ae0d23d20657f02867bb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb">sinfo_new_fit_slits_boltz_with_estimate</a> (cpl_image *lineImage, float **slit_pos, int box_length, float y_box, float diff_tol, int low_pos, int high_pos)</td></tr>
+<tr class="memdesc:ga1851d695a240ae0d23d20657f02867bb"><td class="mdescLeft"> </td><td class="mdescRight">its the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function  <a href="#ga1851d695a240ae0d23d20657f02867bb"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga858ad4d37da835f1ff4740d0f23920c1"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_boltz" ref="ga858ad4d37da835f1ff4740d0f23920c1" args="(float *xdat, float *parlist)" -->
+<a class="anchor" id="ga858ad4d37da835f1ff4740d0f23920c1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">float sinfo_new_boltz </td>
           <td>(</td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>xdat</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>xdat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>parlist</em></td><td> </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>parlist</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>calculates the value of a Boltzmann function with parameters parlist at the position xdat </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>xdat</em> </td><td>position array </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>parameter list</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">xdat</td><td>position array </td></tr>
+    <tr><td class="paramname">parlist</td><td>parameter list <pre class="fragment">                 The parameters are:
+     #            parlist(0): background1
+     #            parlist(1): background2
+     #            parlist(2): central position
+     #            parlist(3): width
+</pre> </td></tr>
   </table>
   </dd>
 </dl>
-<p>The parameters are: # parlist(0): background1 # parlist(1): background2 # parlist(2): central position # parlist(3): width </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>function value of a Boltzmann function that is y = (parlist(0) - parlist(1)) / (1+exp((x-parlist(2))/parlist(3))) + parlist(1) </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>function value of a Boltzmann function that is y = (parlist(0) - parlist(1)) / (1+exp((x-parlist(2))/parlist(3))) + parlist(1) </dd></dl>
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l00245">245</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga72b3c6f0c971fb402bd68c8d0fcf5e30"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_boltz_deriv" ref="ga72b3c6f0c971fb402bd68c8d0fcf5e30" args="(float *xdat, float *parlist, float *dervs)" -->
+<a class="anchor" id="ga72b3c6f0c971fb402bd68c8d0fcf5e30"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_new_boltz_deriv </td>
           <td>(</td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>xdat</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>xdat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>parlist</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>parlist</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>dervs</em></td><td> </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>dervs</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>xdat</em> </td><td>position array xdat </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>parlist</em> </td><td>parameter list # The parameters are: # parlist(0): background1 # parlist(1): background2 # parlist(2): central position # parlist(3): width </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dervs</em> </td><td>derivative value of a Boltzmann function at\ position xdat: dervs # dervs[0]: partial derivative by background1 # dervs[1]: partial derivative by background2 # dervs[2]: partial derivative by central position # dervs[3]: partial derivative by the width</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">xdat</td><td>position array xdat </td></tr>
+    <tr><td class="paramname">parlist</td><td>parameter list <h1>The parameters are:</h1>
+</td></tr>
+  </table>
+  </dd>
+</dl>
+<h1>parlist(0): background1</h1>
+<h1>parlist(1): background2</h1>
+<h1>parlist(2): central position</h1>
+<h1>parlist(3): width</h1>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">dervs</td><td>derivative value of a Boltzmann function at\ position xdat: dervs <h1>dervs[0]: partial derivative by background1</h1>
+</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>nothing, void </dd></dl>
+<h1>dervs[1]: partial derivative by background2</h1>
+<h1>dervs[2]: partial derivative by central position</h1>
+<h1>dervs[3]: partial derivative by the width</h1>
+<dl class="section return"><dt>Returns:</dt><dd>nothing, void </dd></dl>
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l00278">278</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gab3549f7bb876fb4091ba3c0bd64d267d"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_fit_slits_boltz" ref="gab3549f7bb876fb4091ba3c0bd64d267d" args="(cpl_image *lineImage, FitParams **par, float **slit_pos, int box_length, float y_box, float diff_tol)" -->
+<a class="anchor" id="gab3549f7bb876fb4091ba3c0bd64d267d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int sinfo_new_fit_slits_boltz </td>
           <td>(</td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>lineImage</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>lineImage</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">FitParams ** </td>
-          <td class="paramname"> <em>par</em>, </td>
+          <td class="paramtype">FitParams ** </td>
+          <td class="paramname"><em>par</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float ** </td>
-          <td class="paramname"> <em>slit_pos</em>, </td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"><em>slit_pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>box_length</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>box_length</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>y_box</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>y_box</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>diff_tol</em></td><td> </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>diff_tol</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>lineImage,:</em> </td><td>emission line frame </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>par,:</em> </td><td>fit parameter data structure of fitted lines </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slit_pos,:</em> </td><td>allocated dummy array for the slitlet positions [32][2] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>box_length,:</em> </td><td>pixel length of the row box within the fit is done </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>y_box,:</em> </td><td>small box in spectral direction within the slitlet may lie. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>diff_tol,:</em> </td><td>maximum tolerable difference of the resulting fit position with respect to the expected position. If difference is greater the expected position is taken. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lineImage,:</td><td>emission line frame </td></tr>
+    <tr><td class="paramname">par,:</td><td>fit parameter data structure of fitted lines </td></tr>
+    <tr><td class="paramname">slit_pos,:</td><td>allocated dummy array for the slitlet positions [32][2] </td></tr>
+    <tr><td class="paramname">box_length,:</td><td>pixel length of the row box within the fit is done </td></tr>
+    <tr><td class="paramname">y_box,:</td><td>small box in spectral direction within the slitlet may lie. </td></tr>
+    <tr><td class="paramname">diff_tol,:</td><td>maximum tolerable difference of the resulting fit position with respect to the expected position. If difference is greater the expected position is taken. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>slit_pos: beginning and end position of the slitlets to sub-pixel accuracy # 0 if it worked, # -1 if there was no line image given, # -2 if there were no line fit parameters given, # -3 if there was no dummy array for the slit positions # allocated # -4 if the given box length is impossible # -5 if the given y box length is impossible # -6 if the given difference tolerance is too small # -7 if there were no emission lines found in the first  [...]
-<p>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. To achieve this, the fit parameters are used to find the brightest emission line and to get its position for each column. The least squares fit is done by using a box smaller than the size of two slitlets ----------------------------------------------------------------- [...]
+<dl class="section return"><dt>Returns:</dt><dd>slit_pos: beginning and end position of the slitlets to sub-pixel accuracy <h1>0 if it worked,</h1>
+</dd></dl>
+<h1>-1 if there was no line image given,</h1>
+<h1>-2 if there were no line fit parameters given,</h1>
+<h1>-3 if there was no dummy array for the slit positions</h1>
+<h1>allocated</h1>
+<h1>-4 if the given box length is impossible</h1>
+<h1>-5 if the given y box length is impossible</h1>
+<h1>-6 if the given difference tolerance is too small</h1>
+<h1>-7 if there were no emission lines found in the first</h1>
+<p>image columns </p>
+<h1>-8 if not all slitlets could be found</h1>
+<p>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. To achieve this, the fit parameters are used to find the brightest emission line and to get its position for each column. The least squares fit is done by using a box smaller than the size of two slitlets —————————&m [...]
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l00865">865</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
 
@@ -183,68 +235,69 @@
 
 </div>
 </div>
-<a class="anchor" id="gafe44b4032a5b85ff4b88bf7518793b21"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_fit_slits_boltz_single_line" ref="gafe44b4032a5b85ff4b88bf7518793b21" args="(cpl_image *lineImage, float **slit_pos, int box_length, float y_box, int low_pos, int high_pos)" -->
+<a class="anchor" id="gafe44b4032a5b85ff4b88bf7518793b21"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int sinfo_new_fit_slits_boltz_single_line </td>
           <td>(</td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>lineImage</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>lineImage</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float ** </td>
-          <td class="paramname"> <em>slit_pos</em>, </td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"><em>slit_pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>box_length</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>box_length</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>y_box</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>y_box</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>low_pos</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>low_pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>high_pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>high_pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>lineImage</em> </td><td>emission line frame </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slit_pos</em> </td><td>allocated dummy array for the slitlet positions [min32][2] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>box_length</em> </td><td>pixel length of the row box within the fit is done </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>y_box,:</em> </td><td>small box in spectral direction within the slitlet may lie. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>low_pos</em> </td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>high_pos</em> </td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lineImage</td><td>emission line frame </td></tr>
+    <tr><td class="paramname">slit_pos</td><td>allocated dummy array for the slitlet positions [min32][2] </td></tr>
+    <tr><td class="paramname">box_length</td><td>pixel length of the row box within the fit is done </td></tr>
+    <tr><td class="paramname">y_box,:</td><td>small box in spectral direction within the slitlet may lie. </td></tr>
+    <tr><td class="paramname">low_pos</td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
+    <tr><td class="paramname">high_pos</td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>slit_pos: beginning and end position of the slitlets to sub-pixel accuracy # 0 if it worked, # -1 if it failed,</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>slit_pos: beginning and end position of the slitlets to sub-pixel accuracy <h1>0 if it worked,</h1>
+</dd></dl>
+<h1>-1 if it failed,</h1>
 <p>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. The slitlet is searched with user given positions. The least squares fit is done by using a box smaller than the size of two slitlets </p>
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l01620">1620</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
@@ -253,76 +306,77 @@
 
 </div>
 </div>
-<a class="anchor" id="ga1851d695a240ae0d23d20657f02867bb"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_fit_slits_boltz_with_estimate" ref="ga1851d695a240ae0d23d20657f02867bb" args="(cpl_image *lineImage, float **slit_pos, int box_length, float y_box, float diff_tol, int low_pos, int high_pos)" -->
+<a class="anchor" id="ga1851d695a240ae0d23d20657f02867bb"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int sinfo_new_fit_slits_boltz_with_estimate </td>
           <td>(</td>
-          <td class="paramtype">cpl_image * </td>
-          <td class="paramname"> <em>lineImage</em>, </td>
+          <td class="paramtype">cpl_image * </td>
+          <td class="paramname"><em>lineImage</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float ** </td>
-          <td class="paramname"> <em>slit_pos</em>, </td>
+          <td class="paramtype">float ** </td>
+          <td class="paramname"><em>slit_pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>box_length</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>box_length</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>y_box</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>y_box</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float </td>
-          <td class="paramname"> <em>diff_tol</em>, </td>
+          <td class="paramtype">float </td>
+          <td class="paramname"><em>diff_tol</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>low_pos</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>low_pos</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>high_pos</em></td><td> </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>high_pos</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>its the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>lineImage</em> </td><td>emission line frame </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>slit_pos</em> </td><td>estimation array for the slitlet positions [min32][2] </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>box_length</em> </td><td>pixel length of the row box within the fit is done </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>y_box</em> </td><td>small box in spectral direction within the slitlet may lie. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>diff_tol</em> </td><td>tolerance on slitlets position </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>low_pos</em> </td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>high_pos</em> </td><td>pixel positions in spectral direction between which the line should be located.</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">lineImage</td><td>emission line frame </td></tr>
+    <tr><td class="paramname">slit_pos</td><td>estimation array for the slitlet positions [min32][2] </td></tr>
+    <tr><td class="paramname">box_length</td><td>pixel length of the row box within the fit is done </td></tr>
+    <tr><td class="paramname">y_box</td><td>small box in spectral direction within the slitlet may lie. </td></tr>
+    <tr><td class="paramname">diff_tol</td><td>tolerance on slitlets position </td></tr>
+    <tr><td class="paramname">low_pos</td><td>pixel positions in spectral direction between which the line should be located. </td></tr>
+    <tr><td class="paramname">high_pos</td><td>pixel positions in spectral direction between which the line should be located.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>slit_pos beginning and end position of the slitlets to sub-pixel accuracy # 0 if it worked, # -1 if it failed, </dd></dl>
-<dl class="note"><dt><b>Note:</b></dt><dd>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. The slitlet is searched within user given positions. The least squares fit is done by using a box smaller than the size of two slitlets </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>slit_pos beginning and end position of the slitlets to sub-pixel accuracy <h1>0 if it worked,</h1>
+</dd></dl>
+<h1>-1 if it failed,</h1>
+<dl class="section note"><dt>Note:</dt><dd>fits the beginning and end position of the slitlets by using non-linear least square fitting of a Boltzmann function fits a Boltzmann function to the slitlet edges exposed and indicated by the brightest emission lines. The slitlet is searched within user given positions. The least squares fit is done by using a box smaller than the size of two slitlets </dd></dl>
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l02164">2164</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
 
@@ -330,110 +384,118 @@
 
 </div>
 </div>
-<a class="anchor" id="ga7e03e34851f7c367ab3827c58e8c81c5"></a><!-- doxytag: member="sinfo_boltzmann.c::sinfo_new_lsqfit" ref="ga7e03e34851f7c367ab3827c58e8c81c5" args="(float *xdat, int *xdim, float *ydat, float *wdat, int *ndat, float *fpar, float *epar, int *mpar, int *npar, float *tol, int *its, float *lab)" -->
+<a class="anchor" id="ga7e03e34851f7c367ab3827c58e8c81c5"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int sinfo_new_lsqfit </td>
           <td>(</td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>xdat</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>xdat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>xdim</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>xdim</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>ydat</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>ydat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>wdat</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>wdat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>ndat</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>ndat</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>fpar</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>fpar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>epar</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>epar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>mpar</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>mpar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>npar</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>npar</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>tol</em>, </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>tol</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">int * </td>
-          <td class="paramname"> <em>its</em>, </td>
+          <td class="paramtype">int * </td>
+          <td class="paramname"><em>its</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">float * </td>
-          <td class="paramname"> <em>lab</em></td><td> </td>
+          <td class="paramtype">float * </td>
+          <td class="paramname"><em>lab</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>makes a least-squares fit of a function to a set of data points. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>xdat,:</em> </td><td>position, coordinates of data points. xdat is 2 dimensional: XDAT ( XDIM, NDAT ) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>xdim,:</em> </td><td>dimension of fit </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ydat,:</em> </td><td>data points </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>wdat,:</em> </td><td>weights for data points </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>ndat,:</em> </td><td>number of data points </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>fpar,:</em> </td><td>on input contains initial estimates of the parameters for non-linear fits, on output the fitted parameters. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>epar,:</em> </td><td>contains estimates of the errors in fitted parameters </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>mpar,:</em> </td><td>logical mask telling which parameters are free (non-zero) and which parameters are fixed (0) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>npar,:</em> </td><td>number of function parameters ( free + fixed ) </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>tol,:</em> </td><td>relative tolerance. sinfo_lsqfit stops when successive iterations fail to produce a decrement in reduced chi-squared less than tol. If tol is less than the minimum tolerance possible, tol will be set to this value. This means that maximum accuracy can be obtained by setting tol = 0.0. </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>its,:</em> </td><td>maximum number of iterations </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>lab,:</em> </td><td>mixing parameter, lab determines the initial weight of steepest descent method relative to the Taylor method lab should be a small value (i.e. 0.01). lab can only be zero when the partial derivatives are independent of the parameters. In fact in this case lab should be exactly equal to zero. </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">xdat,:</td><td>position, coordinates of data points. xdat is 2 dimensional: XDAT ( XDIM, NDAT ) </td></tr>
+    <tr><td class="paramname">xdim,:</td><td>dimension of fit </td></tr>
+    <tr><td class="paramname">ydat,:</td><td>data points </td></tr>
+    <tr><td class="paramname">wdat,:</td><td>weights for data points </td></tr>
+    <tr><td class="paramname">ndat,:</td><td>number of data points </td></tr>
+    <tr><td class="paramname">fpar,:</td><td>on input contains initial estimates of the parameters for non-linear fits, on output the fitted parameters. </td></tr>
+    <tr><td class="paramname">epar,:</td><td>contains estimates of the errors in fitted parameters </td></tr>
+    <tr><td class="paramname">mpar,:</td><td>logical mask telling which parameters are free (non-zero) and which parameters are fixed (0) </td></tr>
+    <tr><td class="paramname">npar,:</td><td>number of function parameters ( free + fixed ) </td></tr>
+    <tr><td class="paramname">tol,:</td><td>relative tolerance. sinfo_lsqfit stops when successive iterations fail to produce a decrement in reduced chi-squared less than tol. If tol is less than the minimum tolerance possible, tol will be set to this value. This means that maximum accuracy can be obtained by setting tol = 0.0. </td></tr>
+    <tr><td class="paramname">its,:</td><td>maximum number of iterations </td></tr>
+    <tr><td class="paramname">lab,:</td><td>mixing parameter, lab determines the initial weight of steepest descent method relative to the Taylor method lab should be a small value (i.e. 0.01). lab can only be zero when the partial derivatives are independent of the parameters. In fact in this case lab should be exactly equal to zero. </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>number of iterations needed to achieve convergence according to tol. When this number is negative, the fitting was not continued because a fatal error occurred: # -1 too many free parameters, maximum is 32 # -2 no free parameters # -3 not enough degrees of freedom # -4 maximum number of iterations too small to obtain a solution which satisfies tol. # -5 diagonal of sinfo_matrix contains elements which are zero # -6 determinant of the coeffic [...]
+<dl class="section return"><dt>Returns:</dt><dd>number of iterations needed to achieve convergence according to tol. When this number is negative, the fitting was not continued because a fatal error occurred: <h1>-1 too many free parameters, maximum is 32</h1>
+</dd></dl>
+<h1>-2 no free parameters</h1>
+<h1>-3 not enough degrees of freedom</h1>
+<h1>-4 maximum number of iterations too small to obtain</h1>
+<p>a solution which satisfies tol. </p>
+<h1>-5 diagonal of sinfo_matrix contains elements which</h1>
+<p>are zero </p>
+<h1>-6 determinant of the coefficient sinfo_matrix is zero</h1>
+<h1>-7 square root of a negative number</h1>
 <p>The method used is described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963). This method is a mixture of the steepest descent method and the Taylor method. </p>
 
 <p>Definition at line <a class="el" href="sinfo__boltzmann_8c_source.html#l00627">627</a> of file <a class="el" href="sinfo__boltzmann_8c_source.html">sinfo_boltzmann.c</a>.</p>
@@ -442,9 +504,12 @@
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__coltilt.html b/html/group__sinfo__coltilt.html
index e689eb7..742d809 100644
--- a/html/group__sinfo__coltilt.html
+++ b/html/group__sinfo__coltilt.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Column tilt computation</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Column tilt computation</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Column tilt computation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__companion.html b/html/group__sinfo__companion.html
index 86eda18..dbfbeac 100644
--- a/html/group__sinfo__companion.html
+++ b/html/group__sinfo__companion.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: To be removed</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>To be removed</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">To be removed</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__cube__construct.html b/html/group__sinfo__cube__construct.html
index 9b4a8bd..d0d8c30 100644
--- a/html/group__sinfo__cube__construct.html
+++ b/html/group__sinfo__cube__construct.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Cube generation functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Cube generation functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Cube generation functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__dark__cfg.html b/html/group__sinfo__dark__cfg.html
index d549889..bdadd05 100644
--- a/html/group__sinfo__dark__cfg.html
+++ b/html/group__sinfo__dark__cfg.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Dark manipulation functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Dark manipulation functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Dark manipulation functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__detlin.html b/html/group__sinfo__detlin.html
index 88e9aaa..f52b011 100644
--- a/html/group__sinfo__detlin.html
+++ b/html/group__sinfo__detlin.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Detector Linearity Determination Functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Detector Linearity Determination Functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Detector Linearity Determination Functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__dfs.html b/html/group__sinfo__dfs.html
index 5636dad..2cf257f 100644
--- a/html/group__sinfo__dfs.html
+++ b/html/group__sinfo__dfs.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: DFS related Utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>DFS related Utilities</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">DFS related Utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__distortion.html b/html/group__sinfo__distortion.html
index bac104a..66d4bd3 100644
--- a/html/group__sinfo__distortion.html
+++ b/html/group__sinfo__distortion.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Distortion correction functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Distortion correction functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Distortion correction functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__dump.html b/html/group__sinfo__dump.html
index 6fd0c9e..ec3e37e 100644
--- a/html/group__sinfo__dump.html
+++ b/html/group__sinfo__dump.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Print CPL objects</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Print CPL objects</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>Functions that enables dumping (using CPL's messaging system) some otherwise non-dumpable CPL objects </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Print CPL objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>Functions that enables dumping (using CPL's messaging system) some otherwise non-dumpable CPL objects </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__error.html b/html/group__sinfo__error.html
index 252db5a..55507fc 100644
--- a/html/group__sinfo__error.html
+++ b/html/group__sinfo__error.html
@@ -2,87 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Error handling</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Error handling</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Error handling</div>  </div>
+</div><!--header-->
+<div class="contents">
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>This error handling module extends CPL's error handler by adding error tracing and automatic memory deallocation in case of an error. Like in CPL the current error state is indicated by the <code>cpl_error_code</code> (returned by the function <code>cpl_error_get_code()</code> ).</p>
 <p>The error tracing makes it possible to see where (source file, function name, line number) an error first occured, as well as the sequence of function calls preceding the error. A typical output looks like: </p>
-<div class="fragment"><pre class="fragment">   An error occured, dumping error trace:
-   
-   Wavelength calibration did not converge. After 13 iterations the RMS was 
-   0.300812 pixels. Try to improve
-   the initial guess solution (The iterative process did not converge)
-     in [3]sinfo_wavecal_identify() at sinfo_wavecal_identify.c :101
-    
-   Could not calibrate orders
-     in [2]sinfo_wavecal_process_chip() at sinfo_wavecal.c  :426
-     
-   Wavelength calibration failed
-     in [1]sinfo_wavecal() at sinfo_wavecal.c  :679
-</pre></div><p>However, the main motivation of this extension is to simplify the error checking and handling. A single line of source code</p>
-<div class="fragment"><pre class="fragment">   check( dispersion_relation = sinfo_wavecal_identify(linetable[window-1],
-                                                      line_refer,
-                                                      initial_dispersion, 
-                                                      WAVECAL_MODE, DEGREE, 
-                                                      TOLERANCE, ALPHA, 
-                                                      MAXERROR),
-           <span class="stringliteral">"Could not calibrate orders"</span>);
-</pre></div><p>has the same effect as</p>
-<div class="fragment"><pre class="fragment">   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-      cpl_msg_error(cpl_func, 
-                    <span class="stringliteral">"An unexpected error (%s) has occurred "</span>
-                    <span class="stringliteral">"in %s() at %-15s :%-3d"</span>,
-                           cpl_error_get_message(),
-                           cpl_func,
-                           __FILE__,
-                           __LINE__);
-      sinfo_free_image(&spectrum);
-      sinfo_free_image(&cropped_image);
-      sinfo_free_image(&debug_image);
-      sinfo_free_cpl(&relative_order);
-      polynomial_delete(&initial_dispersion);
-      polynomial_delete(&dispersion_relation);
-      <span class="keywordflow">return</span> NULL;
-   }
-
-   dispersion_relation = sinfo_wavecal_identify(linetable[window-1],
-                                               line_refer,
-                                               initial_dispersion, 
-                                               WAVECAL_MODE, DEGREE, 
-                                               TOLERANCE, ALPHA, MAXERROR);
-
-   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-      cpl_msg_error(cpl_func, <span class="stringliteral">"ERROR: Could not calibrate orders (%s) in %s() </span>
-<span class="stringliteral">      at %-15s :%-3d"</span>,
-                           cpl_error_get_message(),
-                           cpl_func,
-                           __FILE__,
-                           __LINE__);
-      sinfo_free_image(&spectrum);
-      sinfo_free_image(&cropped_image);
-      sinfo_free_image(&debug_image);
-      sinfo_free_cpl(&relative_order);
-      polynomial_delete(&initial_dispersion);
-      polynomial_delete(&dispersion_relation);
-      <span class="keywordflow">return</span> NULL;
-   }
-</pre></div><p>This of course makes the source code more compact and hence easier to read (and maintain) and allows for intensive error checking with minimal effort.</p>
+<div class="fragment"><div class="line">   An error occured, dumping error trace:</div>
+<div class="line">   </div>
+<div class="line">   Wavelength calibration did not converge. After 13 iterations the RMS was </div>
+<div class="line">   0.300812 pixels. Try to improve</div>
+<div class="line">   the initial guess solution (The iterative process did not converge)</div>
+<div class="line">     in [3]sinfo_wavecal_identify() at sinfo_wavecal_identify.c :101</div>
+<div class="line">    </div>
+<div class="line">   Could not calibrate orders</div>
+<div class="line">     in [2]sinfo_wavecal_process_chip() at sinfo_wavecal.c  :426</div>
+<div class="line">     </div>
+<div class="line">   Wavelength calibration failed</div>
+<div class="line">     in [1]sinfo_wavecal() at sinfo_wavecal.c  :679</div>
+</div><!-- fragment --><p>However, the main motivation of this extension is to simplify the error checking and handling. A single line of source code</p>
+<div class="fragment"><div class="line">   check( dispersion_relation = sinfo_wavecal_identify(linetable[window-1],</div>
+<div class="line">                                                      line_refer,</div>
+<div class="line">                                                      initial_dispersion, </div>
+<div class="line">                                                      WAVECAL_MODE, DEGREE, </div>
+<div class="line">                                                      TOLERANCE, ALPHA, </div>
+<div class="line">                                                      MAXERROR),</div>
+<div class="line">           <span class="stringliteral">"Could not calibrate orders"</span>);</div>
+</div><!-- fragment --><p>has the same effect as</p>
+<div class="fragment"><div class="line">   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line">      cpl_msg_error(cpl_func, </div>
+<div class="line">                    <span class="stringliteral">"An unexpected error (%s) has occurred "</span></div>
+<div class="line">                    <span class="stringliteral">"in %s() at %-15s :%-3d"</span>,</div>
+<div class="line">                           cpl_error_get_message(),</div>
+<div class="line">                           cpl_func,</div>
+<div class="line">                           __FILE__,</div>
+<div class="line">                           __LINE__);</div>
+<div class="line">      sinfo_free_image(&spectrum);</div>
+<div class="line">      sinfo_free_image(&cropped_image);</div>
+<div class="line">      sinfo_free_image(&debug_image);</div>
+<div class="line">      sinfo_free_cpl(&relative_order);</div>
+<div class="line">      polynomial_delete(&initial_dispersion);</div>
+<div class="line">      polynomial_delete(&dispersion_relation);</div>
+<div class="line">      <span class="keywordflow">return</span> NULL;</div>
+<div class="line">   }</div>
+<div class="line"></div>
+<div class="line">   dispersion_relation = sinfo_wavecal_identify(linetable[window-1],</div>
+<div class="line">                                               line_refer,</div>
+<div class="line">                                               initial_dispersion, </div>
+<div class="line">                                               WAVECAL_MODE, DEGREE, </div>
+<div class="line">                                               TOLERANCE, ALPHA, MAXERROR);</div>
+<div class="line"></div>
+<div class="line">   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line">      cpl_msg_error(cpl_func, <span class="stringliteral">"ERROR: Could not calibrate orders (%s) in %s() </span></div>
+<div class="line"><span class="stringliteral">      at %-15s :%-3d"</span>,</div>
+<div class="line">                           cpl_error_get_message(),</div>
+<div class="line">                           cpl_func,</div>
+<div class="line">                           __FILE__,</div>
+<div class="line">                           __LINE__);</div>
+<div class="line">      sinfo_free_image(&spectrum);</div>
+<div class="line">      sinfo_free_image(&cropped_image);</div>
+<div class="line">      sinfo_free_image(&debug_image);</div>
+<div class="line">      sinfo_free_cpl(&relative_order);</div>
+<div class="line">      polynomial_delete(&initial_dispersion);</div>
+<div class="line">      polynomial_delete(&dispersion_relation);</div>
+<div class="line">      <span class="keywordflow">return</span> NULL;</div>
+<div class="line">   }</div>
+</div><!-- fragment --><p>This of course makes the source code more compact and hence easier to read (and maintain) and allows for intensive error checking with minimal effort.</p>
 <p>Additionally, editing the <code>check()</code> macro (described below) allows for debugging/tracing information at every function entry and exit.</p>
-<dl class="user"><dt><b>Usage</b></dt><dd></dd></dl>
+<dl class="section user"><dt>Usage</dt><dd></dd></dl>
 <p>New errors are set with the macros <code>assure()</code> and <code>passure()</code>, and sub-functions that might set a <code>cpl_error_code</code> are checked using the macros <code>check()</code> and <code>pcheck()</code> . The function <code>_sinfo_error_set()</code> should never be called directly. These macros check if an error occured and, if so, jumps to the <code>cleanup</code> label which must be defined at the end of each function. After the <code>cleanup</code> label every  [...]
 <p>At the very end of a recipe the error state should be checked and <code>sinfo_error_dump()</code> called on error: </p>
-<div class="fragment"><pre class="fragment">   <span class="keywordflow">if</span> ( cpl_error_get_code() != CPL_ERROR_NONE )
-   {
-      sinfo_error_dump(cpl_func);
-   }
-</pre></div><p>When using this scheme:</p>
+<div class="fragment"><div class="line">   <span class="keywordflow">if</span> ( cpl_error_get_code() != CPL_ERROR_NONE )</div>
+<div class="line">   {</div>
+<div class="line">      sinfo_error_dump(cpl_func);</div>
+<div class="line">   }</div>
+</div><!-- fragment --><p>When using this scheme:</p>
 <ul>
 <li>There should be only one <code>return</code> statement per function (after the <code>cleanup</code> label).</li>
 </ul>
@@ -96,139 +117,142 @@
 <li>Pointers must be set to NULL when they are not used (which is a good idea anyway).</li>
 </ul>
 <p>Consider the example</p>
-<div class="fragment"><pre class="fragment">   <span class="keywordtype">int</span> function_name(...)
-   {
-      cpl_image * image = NULL;
-      cpl_image * another_image;       / *  Wrong: Pointer must be initialized 
-                                                   to NULL. On cleanup, 
-                                                   cpl_image_delete() will try 
-                                                   to deallocate whatever
-                                                   this pointer points to. If 
-                                                   the pointer is NULL,
-                                                   the deallocator function 
-                                                   will do nothing.  * /
-      :
-      :
-
-      {
-         cpl_object * <span class="keywordtype">object</span> = NULL;   / *  Wrong: Pointer must be declared at 
-                                                   the beginning of a function.
-                                                   This <span class="keywordtype">object</span> will not be 
-                                                   deallocated, <span class="keywordflow">if</span> the following
-                                                   check() fails. * /
-     
-         <span class="keywordtype">object</span> = cpl_object_new();
-
-         :
-         :
-              
-         check( ... );
-
-         :
-         :
-
-         cpl_object_delete(<span class="keywordtype">object</span>);    / *  Wrong: The pointer must be set to 
-                                                   NULL after deallocation, or
-                                                   the following assure() might
-                                                   cause the already 
-                                                   deallocated <span class="keywordtype">object</span>
-                                                   to be deallocated again.  * /
-         :
-         :
-     
-         assure( ... );
-
-         return 7;                     / *  Wrong: Only one exit point per 
-                                            function. * /
-
-      }
-      
-      :
-      :
-
-    cleanup:
-      cpl_image_delete(image);
-      cpl_image_delete(another_image);
-
-      return 7;
-   }
-</pre></div><p>This is easily fixed:</p>
-<div class="fragment"><pre class="fragment">   <span class="keywordtype">int</span> function_name(...)
-   {
-      cpl_image  * image         = NULL;  / *  All pointers are declared at 
-                                               the beginning  * /
-      cpl_image  * another_image = NULL;  / *  of the function an initialized 
-                                               to NULL.     * /
-      cpl_object * <span class="keywordtype">object</span>        = NULL;
-
-      :
-      :
-
-      {
-
-         <span class="keywordtype">object</span> = cpl_object_new();
-
-         :
-         :
-              
-         check( ... );
-
-         :
-         :
-
-         sinfo_free_object(&<span class="keywordtype">object</span>);            / *  The <span class="keywordtype">object</span> is deallocated 
-                                                     and the pointer <span class="keyword">set</span> to 
-                                                     NULL.  * /
-
-         :
-         :
-     
-         assure( ... );
-
-      }
-      
-      :
-      :
-
-    cleanup:
-      sinfo_free_image (&image);                / *  All objects are 
-                                                     deallocated here.  * /
-      sinfo_free_image (&another_image);
-      sinfo_free_object(&<span class="keywordtype">object</span>);
-
-      <span class="keywordflow">return</span> 7;                           / *  This is the only exit point of 
-                                               the function. * /
-   }
-</pre></div><p>(Note that <code>sinfo_free_image()</code> et al. can be used instead of <code>cpl_image_delete()</code> et al. as a way to ensure that a pointer is always set to NULL after deallocation).</p>
-<dl class="user"><dt><b>Recovering from an error</b></dt><dd></dd></dl>
+<div class="fragment"><div class="line">   <span class="keywordtype">int</span> function_name(...)</div>
+<div class="line">   {</div>
+<div class="line">      cpl_image * image = NULL;</div>
+<div class="line">      cpl_image * another_image;       / *  Wrong: Pointer must be initialized </div>
+<div class="line">                                                   to NULL. On cleanup, </div>
+<div class="line">                                                   cpl_image_delete() will try </div>
+<div class="line">                                                   to deallocate whatever</div>
+<div class="line">                                                   this pointer points to. If </div>
+<div class="line">                                                   the pointer is NULL,</div>
+<div class="line">                                                   the deallocator function </div>
+<div class="line">                                                   will do nothing.  * /</div>
+<div class="line">      :</div>
+<div class="line">      :</div>
+<div class="line"></div>
+<div class="line">      {</div>
+<div class="line">         cpl_object * <span class="keywordtype">object</span> = NULL;   / *  Wrong: Pointer must be declared at </div>
+<div class="line">                                                   the beginning of a <span class="keyword">function</span>.</div>
+<div class="line">                                                   This <span class="keywordtype">object</span> will not be </div>
+<div class="line">                                                   deallocated, <span class="keywordflow">if</span> the following</div>
+<div class="line">                                                   check() fails. * /</div>
+<div class="line">     </div>
+<div class="line">         <span class="keywordtype">object</span> = cpl_object_new();</div>
+<div class="line"></div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line">              </div>
+<div class="line">         check( ... );</div>
+<div class="line"></div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line"></div>
+<div class="line">         cpl_object_delete(<span class="keywordtype">object</span>);    / *  Wrong: The pointer must be set to </div>
+<div class="line">                                                   NULL after deallocation, or</div>
+<div class="line">                                                   the following assure() might</div>
+<div class="line">                                                   cause the already </div>
+<div class="line">                                                   deallocated <span class="keywordtype">object</span></div>
+<div class="line">                                                   to be deallocated again.  * /</div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line">     </div>
+<div class="line">         assure( ... );</div>
+<div class="line"></div>
+<div class="line">         return 7;                     / *  Wrong: Only one exit point per </div>
+<div class="line">                                            function. * /</div>
+<div class="line"></div>
+<div class="line">      }</div>
+<div class="line">      </div>
+<div class="line">      :</div>
+<div class="line">      :</div>
+<div class="line"></div>
+<div class="line">    cleanup:</div>
+<div class="line">      cpl_image_delete(image);</div>
+<div class="line">      cpl_image_delete(another_image);</div>
+<div class="line"></div>
+<div class="line">      return 7;</div>
+<div class="line">   }</div>
+</div><!-- fragment --><p>This is easily fixed:</p>
+<div class="fragment"><div class="line">   <span class="keywordtype">int</span> function_name(...)</div>
+<div class="line">   {</div>
+<div class="line">      cpl_image  * image         = NULL;  / *  All pointers are declared at </div>
+<div class="line">                                               the beginning  * /</div>
+<div class="line">      cpl_image  * another_image = NULL;  / *  of the <span class="keyword">function</span> an initialized </div>
+<div class="line">                                               to NULL.     * /</div>
+<div class="line">      cpl_object * <span class="keywordtype">object</span>        = NULL;</div>
+<div class="line"></div>
+<div class="line">      :</div>
+<div class="line">      :</div>
+<div class="line"></div>
+<div class="line">      {</div>
+<div class="line"></div>
+<div class="line">         <span class="keywordtype">object</span> = cpl_object_new();</div>
+<div class="line"></div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line">              </div>
+<div class="line">         check( ... );</div>
+<div class="line"></div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line"></div>
+<div class="line">         sinfo_free_object(&<span class="keywordtype">object</span>);            / *  The <span class="keywordtype">object</span> is deallocated </div>
+<div class="line">                                                     and the pointer <span class="keyword">set</span> to </div>
+<div class="line">                                                     NULL.  * /</div>
+<div class="line"></div>
+<div class="line">         :</div>
+<div class="line">         :</div>
+<div class="line">     </div>
+<div class="line">         assure( ... );</div>
+<div class="line"></div>
+<div class="line">      }</div>
+<div class="line">      </div>
+<div class="line">      :</div>
+<div class="line">      :</div>
+<div class="line"></div>
+<div class="line">    cleanup:</div>
+<div class="line">      sinfo_free_image (&image);                / *  All objects are </div>
+<div class="line">                                                     deallocated here.  * /</div>
+<div class="line">      sinfo_free_image (&another_image);</div>
+<div class="line">      sinfo_free_object(&<span class="keywordtype">object</span>);</div>
+<div class="line"></div>
+<div class="line">      <span class="keywordflow">return</span> 7;                           / *  This is the only exit point of </div>
+<div class="line">                                               the <span class="keyword">function</span>. * /</div>
+<div class="line">   }</div>
+</div><!-- fragment --><p>(Note that <code>sinfo_free_image()</code> et al. can be used instead of <code>cpl_image_delete()</code> et al. as a way to ensure that a pointer is always set to NULL after deallocation).</p>
+<dl class="section user"><dt>Recovering from an error</dt><dd></dd></dl>
 <p>To recover from an error, call <code>sinfo_error_reset()</code>, not <code>cpl_error_reset()</code>. Example:</p>
-<div class="fragment"><pre class="fragment">   n = cpl_table_get_nrow(t);
-   <span class="keywordflow">if</span> (cpl_error_get_code() == CPL_ERROR_NULL_INPUT)  / *  This error code is 
-                                                           <span class="keyword">set</span> <span class="keywordflow">if</span> <span class="charliteral">'t'</span> is NULL.
- /
-   {
-      / *  Recover from <span class="keyword">this</span> error  * /
-
-      sinfo_error_reset();
-      n = -3;
-   }
-   <span class="keywordflow">else</span>  / *  Also check <span class="keywordflow">for</span> unexpected errors  * /
-   {
-      assure( cpl_error_get_code() == CPL_ERROR_NONE, cpl_error_get_code(), 
-              <span class="stringliteral">"Error reading table size"</span>);
-   }
-</pre></div><p>However, error recovery is usually best avoided, and the functionality above is better written as:</p>
-<div class="fragment"><pre class="fragment">   <span class="keywordflow">if</span> (t != NULL)
-   {
-      check( n = cpl_table_get_nrow(t), <span class="stringliteral">"Error reading table size"</span>);
-   }
-   <span class="keywordflow">else</span>
-   {
-      n = -3;
-   }
-</pre></div> </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div class="fragment"><div class="line">   n = cpl_table_get_nrow(t);</div>
+<div class="line">   <span class="keywordflow">if</span> (cpl_error_get_code() == CPL_ERROR_NULL_INPUT)  / *  This error code is </div>
+<div class="line">                                                           <span class="keyword">set</span> <span class="keywordflow">if</span> <span class="charliteral">'t'</span> is NULL.</div>
+<div class="line">                                                          /</div>
+<div class="line">   {</div>
+<div class="line">      / *  Recover from <span class="keyword">this</span> error  * /</div>
+<div class="line"></div>
+<div class="line">      sinfo_error_reset();</div>
+<div class="line">      n = -3;</div>
+<div class="line">   }</div>
+<div class="line">   <span class="keywordflow">else</span>  / *  Also check <span class="keywordflow">for</span> unexpected errors  * /</div>
+<div class="line">   {</div>
+<div class="line">      assure( cpl_error_get_code() == CPL_ERROR_NONE, cpl_error_get_code(), </div>
+<div class="line">              <span class="stringliteral">"Error reading table size"</span>);</div>
+<div class="line">   }</div>
+</div><!-- fragment --><p>However, error recovery is usually best avoided, and the functionality above is better written as:</p>
+<div class="fragment"><div class="line">   <span class="keywordflow">if</span> (t != NULL)</div>
+<div class="line">   {</div>
+<div class="line">      check( n = cpl_table_get_nrow(t), <span class="stringliteral">"Error reading table size"</span>);</div>
+<div class="line">   }</div>
+<div class="line">   <span class="keywordflow">else</span></div>
+<div class="line">   {</div>
+<div class="line">      n = -3;</div>
+<div class="line">   }</div>
+</div><!-- fragment --> </div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__finddist__cfg.html b/html/group__sinfo__finddist__cfg.html
index e0a5e36..fd4de8a 100644
--- a/html/group__sinfo__finddist__cfg.html
+++ b/html/group__sinfo__finddist__cfg.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: functions to determine slitlets distances</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>functions to determine slitlets distances</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">functions to determine slitlets distances</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__fit.html b/html/group__sinfo__fit.html
index 5eadac2..68dcb28 100644
--- a/html/group__sinfo__fit.html
+++ b/html/group__sinfo__fit.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Fit functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Fit functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Fit functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__flat__cfg.html b/html/group__sinfo__flat__cfg.html
index 4ef0dc9..cfa4064 100644
--- a/html/group__sinfo__flat__cfg.html
+++ b/html/group__sinfo__flat__cfg.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Flat manipulation functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Flat manipulation functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Flat manipulation functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__flat__ini__file.html b/html/group__sinfo__flat__ini__file.html
index 4ef0dc9..cfa4064 100644
--- a/html/group__sinfo__flat__ini__file.html
+++ b/html/group__sinfo__flat__ini__file.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Flat manipulation functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Flat manipulation functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Flat manipulation functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__focus.html b/html/group__sinfo__focus.html
index 4acc716..34b86c6 100644
--- a/html/group__sinfo__focus.html
+++ b/html/group__sinfo__focus.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Focus determination functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Focus determination functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Focus determination functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__function__1d.html b/html/group__sinfo__function__1d.html
index 3e4286e..fcb6147 100644
--- a/html/group__sinfo__function__1d.html
+++ b/html/group__sinfo__function__1d.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: 1d functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>1d functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">1d functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__globals.html b/html/group__sinfo__globals.html
index fa03c46..d1419ab 100644
--- a/html/group__sinfo__globals.html
+++ b/html/group__sinfo__globals.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: global functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>global functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">global functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__image__ops.html b/html/group__sinfo__image__ops.html
index 4ce851a..43a1f3a 100644
--- a/html/group__sinfo__image__ops.html
+++ b/html/group__sinfo__image__ops.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Image operations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Image operations</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Image operations</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__img__noise.html b/html/group__sinfo__img__noise.html
index 91e20b8..9c5d000 100644
--- a/html/group__sinfo__img__noise.html
+++ b/html/group__sinfo__img__noise.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to determine detector noise</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to determine detector noise</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to determine detector noise</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__lamp__cfg.html b/html/group__sinfo__lamp__cfg.html
index a757be2..3f924b3 100644
--- a/html/group__sinfo__lamp__cfg.html
+++ b/html/group__sinfo__lamp__cfg.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Flat frame manipulation functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Flat frame manipulation functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Flat frame manipulation functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__lamp__spec__config.html b/html/group__sinfo__lamp__spec__config.html
index 3c19a8a..8bee5e4 100644
--- a/html/group__sinfo__lamp__spec__config.html
+++ b/html/group__sinfo__lamp__spec__config.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Spectroscopic flats manipulation</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Spectroscopic flats manipulation</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Spectroscopic flats manipulation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__msg.html b/html/group__sinfo__msg.html
index 404103a..0fdd09f 100644
--- a/html/group__sinfo__msg.html
+++ b/html/group__sinfo__msg.html
@@ -2,71 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Messaging</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Messaging</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Messaging</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789">sinfo_msg_error</a>(...)   cpl_msg_error(cpl_func, __VA_ARGS__)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print an error message.  <a href="#ga207c781e45c0904f20faa13fdf08c789"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga75cab6805099905b3b101f660a907f37">sinfo_msg_progress</a>(i, iter,...)   cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a progress message.  <a href="#ga75cab6805099905b3b101f660a907f37"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6">sinfo_msg_warning</a>(...)   sinfo_msg_warning_macro(cpl_func, __VA_ARGS__)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print an warning message.  <a href="#ga885dfc1c23dbdf3ea2051b42341a52a6"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8">sinfo_msg_debug</a>(...)   cpl_msg_debug(cpl_func, __VA_ARGS__)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a debug message.  <a href="#ga5011f548e1cbc15d52154469a63343c8"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gaa6da02902135556d8517de4c05b7a1a6">sinfo_msg_low</a>(...)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a message on a lower message level.  <a href="#gaa6da02902135556d8517de4c05b7a1a6"></a><br/></td></tr>
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc">sinfo_msg_init</a> (int outlevel, const char *dom)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize messaging.  <a href="#ga639b5d352f0518db6cc346c0737484cc"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e">sinfo_msg_set_level</a> (int olevel)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set output level.  <a href="#gad9c8f46542015d0c93094c337a557d5e"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a">sinfo_msg_get_domain</a> (void)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get current message domain.  <a href="#ga15d005a10b6dac6031d611eecdce129a"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5">sinfo_msg_set_domain</a> (const char *d)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Set message domain.  <a href="#ga5671e5e7722c35d9d174772c80013ad5"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1">sinfo_msg_macro</a> (const char *fct, const char *format,...)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a message on 'info' or 'debug' level.  <a href="#gacccff4e78e5f14f06b2c06686a0e19e1"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">sinfo_msg_warning_macro</a> (const char *fct, const char *format,...)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Print a warning message.  <a href="#ga905c39fd148a95c77ea1335aa9441b28"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30">sinfo_msg_get_warnings</a> (void)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Get number of warnings printed so far.  <a href="#ga819ca13f95340688515071106d88af30"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a">sinfo_msg_add_warnings</a> (int n)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Accumulate warnings.  <a href="#gac95702d684d815593ec1516082c0071a"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788">sinfo_msg_softer_macro</a> (const char *fct)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Decrease message level.  <a href="#gae0f3e727182610d92efdb755f1da6788"></a><br/></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6">sinfo_msg_louder_macro</a> (const char *fct)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Increase message level.  <a href="#ga38ac31ae7cb0ce5c792486fd3c9478e6"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga207c781e45c0904f20faa13fdf08c789"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789">sinfo_msg_error</a>(...)   cpl_msg_error(cpl_func, __VA_ARGS__)</td></tr>
+<tr class="memdesc:ga207c781e45c0904f20faa13fdf08c789"><td class="mdescLeft"> </td><td class="mdescRight">Print an error message.  <a href="#ga207c781e45c0904f20faa13fdf08c789"></a><br/></td></tr>
+<tr class="memitem:ga75cab6805099905b3b101f660a907f37"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga75cab6805099905b3b101f660a907f37">sinfo_msg_progress</a>(i, iter,...)   cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</td></tr>
+<tr class="memdesc:ga75cab6805099905b3b101f660a907f37"><td class="mdescLeft"> </td><td class="mdescRight">Print a progress message.  <a href="#ga75cab6805099905b3b101f660a907f37"></a><br/></td></tr>
+<tr class="memitem:ga885dfc1c23dbdf3ea2051b42341a52a6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6">sinfo_msg_warning</a>(...)   <a class="el" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">sinfo_msg_warning_macro</a>(cpl_func, __VA_ARGS__)</td></tr>
+<tr class="memdesc:ga885dfc1c23dbdf3ea2051b42341a52a6"><td class="mdescLeft"> </td><td class="mdescRight">Print an warning message.  <a href="#ga885dfc1c23dbdf3ea2051b42341a52a6"></a><br/></td></tr>
+<tr class="memitem:ga5011f548e1cbc15d52154469a63343c8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8">sinfo_msg_debug</a>(...)   cpl_msg_debug(cpl_func, __VA_ARGS__)</td></tr>
+<tr class="memdesc:ga5011f548e1cbc15d52154469a63343c8"><td class="mdescLeft"> </td><td class="mdescRight">Print a debug message.  <a href="#ga5011f548e1cbc15d52154469a63343c8"></a><br/></td></tr>
+<tr class="memitem:gaa6da02902135556d8517de4c05b7a1a6"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gaa6da02902135556d8517de4c05b7a1a6">sinfo_msg_low</a>(...)</td></tr>
+<tr class="memdesc:gaa6da02902135556d8517de4c05b7a1a6"><td class="mdescLeft"> </td><td class="mdescRight">Print a message on a lower message level.  <a href="#gaa6da02902135556d8517de4c05b7a1a6"></a><br/></td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga639b5d352f0518db6cc346c0737484cc"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc">sinfo_msg_init</a> (int outlevel, const char *dom)</td></tr>
+<tr class="memdesc:ga639b5d352f0518db6cc346c0737484cc"><td class="mdescLeft"> </td><td class="mdescRight">Initialize messaging.  <a href="#ga639b5d352f0518db6cc346c0737484cc"></a><br/></td></tr>
+<tr class="memitem:gad9c8f46542015d0c93094c337a557d5e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e">sinfo_msg_set_level</a> (int olevel)</td></tr>
+<tr class="memdesc:gad9c8f46542015d0c93094c337a557d5e"><td class="mdescLeft"> </td><td class="mdescRight">Set output level.  <a href="#gad9c8f46542015d0c93094c337a557d5e"></a><br/></td></tr>
+<tr class="memitem:ga15d005a10b6dac6031d611eecdce129a"><td class="memItemLeft" align="right" valign="top">const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a">sinfo_msg_get_domain</a> (void)</td></tr>
+<tr class="memdesc:ga15d005a10b6dac6031d611eecdce129a"><td class="mdescLeft"> </td><td class="mdescRight">Get current message domain.  <a href="#ga15d005a10b6dac6031d611eecdce129a"></a><br/></td></tr>
+<tr class="memitem:ga5671e5e7722c35d9d174772c80013ad5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5">sinfo_msg_set_domain</a> (const char *d)</td></tr>
+<tr class="memdesc:ga5671e5e7722c35d9d174772c80013ad5"><td class="mdescLeft"> </td><td class="mdescRight">Set message domain.  <a href="#ga5671e5e7722c35d9d174772c80013ad5"></a><br/></td></tr>
+<tr class="memitem:gacccff4e78e5f14f06b2c06686a0e19e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1">sinfo_msg_macro</a> (const char *fct, const char *format,...)</td></tr>
+<tr class="memdesc:gacccff4e78e5f14f06b2c06686a0e19e1"><td class="mdescLeft"> </td><td class="mdescRight">Print a message on 'info' or 'debug' level.  <a href="#gacccff4e78e5f14f06b2c06686a0e19e1"></a><br/></td></tr>
+<tr class="memitem:ga905c39fd148a95c77ea1335aa9441b28"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">sinfo_msg_warning_macro</a> (const char *fct, const char *format,...)</td></tr>
+<tr class="memdesc:ga905c39fd148a95c77ea1335aa9441b28"><td class="mdescLeft"> </td><td class="mdescRight">Print a warning message.  <a href="#ga905c39fd148a95c77ea1335aa9441b28"></a><br/></td></tr>
+<tr class="memitem:ga819ca13f95340688515071106d88af30"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30">sinfo_msg_get_warnings</a> (void)</td></tr>
+<tr class="memdesc:ga819ca13f95340688515071106d88af30"><td class="mdescLeft"> </td><td class="mdescRight">Get number of warnings printed so far.  <a href="#ga819ca13f95340688515071106d88af30"></a><br/></td></tr>
+<tr class="memitem:gac95702d684d815593ec1516082c0071a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a">sinfo_msg_add_warnings</a> (int n)</td></tr>
+<tr class="memdesc:gac95702d684d815593ec1516082c0071a"><td class="mdescLeft"> </td><td class="mdescRight">Accumulate warnings.  <a href="#gac95702d684d815593ec1516082c0071a"></a><br/></td></tr>
+<tr class="memitem:gae0f3e727182610d92efdb755f1da6788"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788">sinfo_msg_softer_macro</a> (const char *fct)</td></tr>
+<tr class="memdesc:gae0f3e727182610d92efdb755f1da6788"><td class="mdescLeft"> </td><td class="mdescRight">Decrease message level.  <a href="#gae0f3e727182610d92efdb755f1da6788"></a><br/></td></tr>
+<tr class="memitem:ga38ac31ae7cb0ce5c792486fd3c9478e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6">sinfo_msg_louder_macro</a> (const char *fct)</td></tr>
+<tr class="memdesc:ga38ac31ae7cb0ce5c792486fd3c9478e6"><td class="mdescLeft"> </td><td class="mdescRight">Increase message level.  <a href="#ga38ac31ae7cb0ce5c792486fd3c9478e6"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>CPL's info message level is expanded to a set of relative message level. The functions sinfo_msg_louder() and sinfo_msg_softer() are used to turn up/down the message level (instead of setting the verbosity to an absolute level) These two functions should be used consistently, so that the level is always the same on function exit as on function entry.</p>
 <p>These functions never fail, but print warnings if called inconsistently. </p>
-<hr/><h2>Define Documentation</h2>
-<a class="anchor" id="ga5011f548e1cbc15d52154469a63343c8"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_debug" ref="ga5011f548e1cbc15d52154469a63343c8" args="(...)" -->
+<hr/><h2>Macro Definition Documentation</h2>
+<a class="anchor" id="ga5011f548e1cbc15d52154469a63343c8"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">#define sinfo_msg_debug</td>
           <td>(</td>
-          <td class="paramtype"> <em>...</em> </td>
-          <td class="paramname"></td>
-          <td> ) </td>
-          <td>   cpl_msg_debug(cpl_func, __VA_ARGS__)</td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em></td><td>)</td>
+          <td>   cpl_msg_debug(cpl_func, __VA_ARGS__)</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print a debug message. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>Message to print</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">...</td><td>Message to print</td></tr>
   </table>
   </dd>
 </dl>
@@ -76,26 +103,24 @@
 
 </div>
 </div>
-<a class="anchor" id="ga207c781e45c0904f20faa13fdf08c789"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_error" ref="ga207c781e45c0904f20faa13fdf08c789" args="(...)" -->
+<a class="anchor" id="ga207c781e45c0904f20faa13fdf08c789"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">#define sinfo_msg_error</td>
           <td>(</td>
-          <td class="paramtype"> <em>...</em> </td>
-          <td class="paramname"></td>
-          <td> ) </td>
-          <td>   cpl_msg_error(cpl_func, __VA_ARGS__)</td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em></td><td>)</td>
+          <td>   cpl_msg_error(cpl_func, __VA_ARGS__)</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print an error message. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>Message to print</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">...</td><td>Message to print</td></tr>
   </table>
   </dd>
 </dl>
@@ -107,31 +132,29 @@
 
 </div>
 </div>
-<a class="anchor" id="gaa6da02902135556d8517de4c05b7a1a6"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_low" ref="gaa6da02902135556d8517de4c05b7a1a6" args="(...)" -->
+<a class="anchor" id="gaa6da02902135556d8517de4c05b7a1a6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">#define sinfo_msg_low</td>
           <td>(</td>
-          <td class="paramtype"> <em>...</em> </td>
-          <td class="paramname"></td>
-          <td> ) </td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
-<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> {                     \
-                           sinfo_msg_softer();       \
-                           sinfo_msg(__VA_ARGS__);   \
-                           sinfo_msg_louder();       \
-                           } <span class="keywordflow">while</span> (FALSE)
-</pre></div>
+</div><div class="memdoc">
+<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> {                     \</div>
+<div class="line">                           sinfo_msg_softer();       \</div>
+<div class="line">                           sinfo_msg(__VA_ARGS__);   \</div>
+<div class="line">                           sinfo_msg_louder();       \</div>
+<div class="line">                           } <span class="keywordflow">while</span> (FALSE)</div>
+</div><!-- fragment -->
 <p>Print a message on a lower message level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>Message to print </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">...</td><td>Message to print </td></tr>
   </table>
   </dd>
 </dl>
@@ -140,38 +163,42 @@
 
 </div>
 </div>
-<a class="anchor" id="ga75cab6805099905b3b101f660a907f37"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_progress" ref="ga75cab6805099905b3b101f660a907f37" args="(i, iter,...)" -->
+<a class="anchor" id="ga75cab6805099905b3b101f660a907f37"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">#define sinfo_msg_progress</td>
           <td>(</td>
-          <td class="paramtype">i, </td>
+          <td class="paramtype"> </td>
+          <td class="paramname">i, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">iter, </td>
+          <td class="paramtype"> </td>
+          <td class="paramname">iter, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype"> <em>...</em> </td>
-          <td class="paramname"></td>
-          <td> ) </td>
-          <td>   cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td>   cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print a progress message. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>i</em> </td><td>See <code>cpl_msg_progress()</code> </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>iter</em> </td><td>See <code>cpl_msg_progress()</code> </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>Message to print</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">i</td><td>See <code>cpl_msg_progress()</code> </td></tr>
+    <tr><td class="paramname">iter</td><td>See <code>cpl_msg_progress()</code> </td></tr>
+    <tr><td class="paramname">...</td><td>Message to print</td></tr>
   </table>
   </dd>
 </dl>
@@ -181,26 +208,24 @@
 
 </div>
 </div>
-<a class="anchor" id="ga885dfc1c23dbdf3ea2051b42341a52a6"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_warning" ref="ga885dfc1c23dbdf3ea2051b42341a52a6" args="(...)" -->
+<a class="anchor" id="ga885dfc1c23dbdf3ea2051b42341a52a6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">#define sinfo_msg_warning</td>
           <td>(</td>
-          <td class="paramtype"> <em>...</em> </td>
-          <td class="paramname"></td>
-          <td> ) </td>
-          <td>   sinfo_msg_warning_macro(cpl_func, __VA_ARGS__)</td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em></td><td>)</td>
+          <td>   <a class="el" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">sinfo_msg_warning_macro</a>(cpl_func, __VA_ARGS__)</td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print an warning message. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>...</em> </td><td>Message to print</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">...</td><td>Message to print</td></tr>
   </table>
   </dd>
 </dl>
@@ -208,116 +233,109 @@
 
 <p>Definition at line <a class="el" href="sinfo__msg_8h_source.html#l00093">93</a> of file <a class="el" href="sinfo__msg_8h_source.html">sinfo_msg.h</a>.</p>
 
-<p>Referenced by <a class="el" href="sinfo__msg_8c_source.html#l00176">sinfo_msg_louder_macro()</a>, <a class="el" href="sinfo__boltzmann_8c_source.html#l00865">sinfo_new_fit_slits_boltz()</a>, <a class="el" href="sinfo__boltzmann_8c_source.html#l01620">sinfo_new_fit_slits_boltz_single_line()</a>, and <a class="el" href="sinfo__boltzmann_8c_source.html#l02164">sinfo_new_fit_slits_boltz_with_estimate()</a>.</p>
+<p>Referenced by <a class="el" href="sinfo__msg_8c_source.html#l00175">sinfo_msg_louder_macro()</a>, <a class="el" href="sinfo__boltzmann_8c_source.html#l00865">sinfo_new_fit_slits_boltz()</a>, <a class="el" href="sinfo__boltzmann_8c_source.html#l01620">sinfo_new_fit_slits_boltz_single_line()</a>, and <a class="el" href="sinfo__boltzmann_8c_source.html#l02164">sinfo_new_fit_slits_boltz_with_estimate()</a>.</p>
 
 </div>
 </div>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="gac95702d684d815593ec1516082c0071a"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_add_warnings" ref="gac95702d684d815593ec1516082c0071a" args="(int n)" -->
+<a class="anchor" id="gac95702d684d815593ec1516082c0071a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_add_warnings </td>
           <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>n</em></td>
-          <td> ) </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>n</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Accumulate warnings. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>n</em> </td><td>Number of warnings to add</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">n</td><td>Number of warnings to add</td></tr>
   </table>
   </dd>
 </dl>
 <p>The (internal) number of warnings (returned by <code><a class="el" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings()</a></code>) is increased by <em>n</em>, but without actually printing any warnings. </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00266">266</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00265">265</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga15d005a10b6dac6031d611eecdce129a"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_get_domain" ref="ga15d005a10b6dac6031d611eecdce129a" args="(void)" -->
+<a class="anchor" id="ga15d005a10b6dac6031d611eecdce129a"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">const char* sinfo_msg_get_domain </td>
           <td>(</td>
-          <td class="paramtype">void </td>
-          <td class="paramname"></td>
-          <td> ) </td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get current message domain. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>The current message domain set by <code><a class="el" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init()</a></code> or <code><a class="el" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain()</a></code>. </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>The current message domain set by <code><a class="el" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init()</a></code> or <code><a class="el" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain()</a></code>. </dd></dl>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00309">309</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00308">308</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga819ca13f95340688515071106d88af30"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_get_warnings" ref="ga819ca13f95340688515071106d88af30" args="(void)" -->
+<a class="anchor" id="ga819ca13f95340688515071106d88af30"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int sinfo_msg_get_warnings </td>
           <td>(</td>
-          <td class="paramtype">void </td>
-          <td class="paramname"></td>
-          <td> ) </td>
+          <td class="paramtype">void </td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Get number of warnings printed so far. </p>
-<dl class="return"><dt><b>Returns:</b></dt><dd>Number of warnings since initialization of messaging </dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>Number of warnings since initialization of messaging </dd></dl>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00251">251</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00250">250</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga639b5d352f0518db6cc346c0737484cc"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_init" ref="ga639b5d352f0518db6cc346c0737484cc" args="(int outlevel, const char *dom)" -->
+<a class="anchor" id="ga639b5d352f0518db6cc346c0737484cc"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_init </td>
           <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>olevel</em>, </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>olevel</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>dom</em></td><td> </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>dom</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Initialize messaging. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>olevel</em> </td><td>The output level </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>dom</em> </td><td>The message domain</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">olevel</td><td>The output level </td></tr>
+    <tr><td class="paramname">dom</td><td>The message domain</td></tr>
   </table>
   </dd>
 </dl>
@@ -325,213 +343,203 @@
 <p>Therefore, set <em>outlevel</em> = 0 to print fewest messages. Increase <em>outlevel</em> to increase verbosity.</p>
 <p>To print all messages as 'info' set <em>outlevel</em> to the special value -1 (which has the effect of infinity). </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00101">101</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00100">100</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
-<p>References <a class="el" href="sinfo__msg_8c_source.html#l00320">sinfo_msg_set_domain()</a>.</p>
+<p>References <a class="el" href="sinfo__msg_8c_source.html#l00319">sinfo_msg_set_domain()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga38ac31ae7cb0ce5c792486fd3c9478e6"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_louder_macro" ref="ga38ac31ae7cb0ce5c792486fd3c9478e6" args="(const char *fct)" -->
+<a class="anchor" id="ga38ac31ae7cb0ce5c792486fd3c9478e6"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_louder_macro </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>fctid</em></td>
-          <td> ) </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>fctid</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Increase message level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fctid</em> </td><td>Identity of calling function</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fctid</td><td>Identity of calling function</td></tr>
   </table>
   </dd>
 </dl>
 <p>Don't call this function directly, use <code>sinfo_msg_louder()</code>. </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00176">176</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00175">175</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 <p>References <a class="el" href="sinfo__msg_8h_source.html#l00093">sinfo_msg_warning</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gacccff4e78e5f14f06b2c06686a0e19e1"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_macro" ref="gacccff4e78e5f14f06b2c06686a0e19e1" args="(const char *fct, const char *format,...)" -->
+<a class="anchor" id="gacccff4e78e5f14f06b2c06686a0e19e1"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_macro </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>fct</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>fct</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>format</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>format</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype"> </td>
-          <td class="paramname"> <em>...</em></td><td> </td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print a message on 'info' or 'debug' level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fct</em> </td><td>Identity of calling function </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>format</em> </td><td>A printf()-like format string</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fct</td><td>Identity of calling function </td></tr>
+    <tr><td class="paramname">format</td><td>A printf()-like format string</td></tr>
   </table>
   </dd>
 </dl>
 <p>Don't call this function directly, use <code>sinfo_msg()</code>.</p>
 <p>If the current level (which might be equal to the current depth of the function call-tree) is less than the output level, the message printed on the 'info' level, otherwise it is printed on the 'debug' level. </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00219">219</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00218">218</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga5671e5e7722c35d9d174772c80013ad5"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_set_domain" ref="ga5671e5e7722c35d9d174772c80013ad5" args="(const char *d)" -->
+<a class="anchor" id="ga5671e5e7722c35d9d174772c80013ad5"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_set_domain </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>d</em></td>
-          <td> ) </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>d</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Set message domain. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>d</em> </td><td>The new message domain </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">d</td><td>The new message domain </td></tr>
   </table>
   </dd>
 </dl>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00320">320</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00319">319</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
-<p>Referenced by <a class="el" href="sinfo__msg_8c_source.html#l00101">sinfo_msg_init()</a>.</p>
+<p>Referenced by <a class="el" href="sinfo__msg_8c_source.html#l00100">sinfo_msg_init()</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gad9c8f46542015d0c93094c337a557d5e"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_set_level" ref="gad9c8f46542015d0c93094c337a557d5e" args="(int olevel)" -->
+<a class="anchor" id="gad9c8f46542015d0c93094c337a557d5e"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_set_level </td>
           <td>(</td>
-          <td class="paramtype">int </td>
-          <td class="paramname"> <em>olevel</em></td>
-          <td> ) </td>
+          <td class="paramtype">int </td>
+          <td class="paramname"><em>olevel</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Set output level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>olevel</em> </td><td>The output level</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">olevel</td><td>The output level</td></tr>
   </table>
   </dd>
 </dl>
 <p>See <code><a class="el" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init()</a></code> . </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00139">139</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00138">138</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="gae0f3e727182610d92efdb755f1da6788"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_softer_macro" ref="gae0f3e727182610d92efdb755f1da6788" args="(const char *fct)" -->
+<a class="anchor" id="gae0f3e727182610d92efdb755f1da6788"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_softer_macro </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>fctid</em></td>
-          <td> ) </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>fctid</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Decrease message level. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fctid</em> </td><td>Identity of calling function</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fctid</td><td>Identity of calling function</td></tr>
   </table>
   </dd>
 </dl>
 <p>Don't call this function directly, use <code>sinfo_msg_softer()</code>. </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00153">153</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00152">152</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-<a class="anchor" id="ga905c39fd148a95c77ea1335aa9441b28"></a><!-- doxytag: member="sinfo_msg.h::sinfo_msg_warning_macro" ref="ga905c39fd148a95c77ea1335aa9441b28" args="(const char *fct, const char *format,...)" -->
+<a class="anchor" id="ga905c39fd148a95c77ea1335aa9441b28"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">void sinfo_msg_warning_macro </td>
           <td>(</td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>fct</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>fct</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">const char * </td>
-          <td class="paramname"> <em>format</em>, </td>
+          <td class="paramtype">const char * </td>
+          <td class="paramname"><em>format</em>, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype"> </td>
-          <td class="paramname"> <em>...</em></td><td> </td>
+          <td class="paramtype"> </td>
+          <td class="paramname"><em>...</em> </td>
         </tr>
         <tr>
           <td></td>
           <td>)</td>
-          <td></td><td></td><td></td>
+          <td></td><td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Print a warning message. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>fct</em> </td><td>Identity of calling function </td></tr>
-    <tr><td valign="top"></td><td valign="top"><em>format</em> </td><td>A printf()-like format string</td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">fct</td><td>Identity of calling function </td></tr>
+    <tr><td class="paramname">format</td><td>A printf()-like format string</td></tr>
   </table>
   </dd>
 </dl>
@@ -539,13 +547,16 @@
 <p>This function is used instead of <code>cpl_msg_warning()</code>, and saves the user from typing the calling function name.</p>
 <p>Additionally, record is kept on the total number of warnings printed (see <code><a class="el" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings()</a></code>). </p>
 
-<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00287">287</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
+<p>Definition at line <a class="el" href="sinfo__msg_8c_source.html#l00286">286</a> of file <a class="el" href="sinfo__msg_8c_source.html">sinfo_msg.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__new__bezier.html b/html/group__sinfo__new__bezier.html
index 491ffdf..20f89a7 100644
--- a/html/group__sinfo__new__bezier.html
+++ b/html/group__sinfo__new__bezier.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Bezier Functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Bezier Functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Bezier Functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__new__cube__ops.html b/html/group__sinfo__new__cube__ops.html
index bf1357e..c6fa7a9 100644
--- a/html/group__sinfo__new__cube__ops.html
+++ b/html/group__sinfo__new__cube__ops.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Cube operations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Cube operations</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Cube operations</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__new__resampling.html b/html/group__sinfo__new__resampling.html
index 04f5ae6..d0343be 100644
--- a/html/group__sinfo__new__resampling.html
+++ b/html/group__sinfo__new__resampling.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Image resampling</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Image resampling</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Image resampling</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__new__slit__pos.html b/html/group__sinfo__new__slit__pos.html
index f2169be..eb17db1 100644
--- a/html/group__sinfo__new__slit__pos.html
+++ b/html/group__sinfo__new__slit__pos.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Slitlets position determination</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Slitlets position determination</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Slitlets position determination</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__pfits.html b/html/group__sinfo__pfits.html
index 6278764..b5b48ee 100644
--- a/html/group__sinfo__pfits.html
+++ b/html/group__sinfo__pfits.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: In/Out on propertylist cards</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>In/Out on propertylist cards</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">In/Out on propertylist cards</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__pro__save.html b/html/group__sinfo__pro__save.html
index c6a26ed..2439363 100644
--- a/html/group__sinfo__pro__save.html
+++ b/html/group__sinfo__pro__save.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions to save a product</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Functions to save a product</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Functions to save a product</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__produc__config.html b/html/group__sinfo__produc__config.html
index fd635a2..f6e5329 100644
--- a/html/group__sinfo__produc__config.html
+++ b/html/group__sinfo__produc__config.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: .c Pipeline products configurations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>.c Pipeline products configurations</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">.c Pipeline products configurations</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__qr__companion.html b/html/group__sinfo__qr__companion.html
index a48ace3..78ef7d5 100644
--- a/html/group__sinfo__qr__companion.html
+++ b/html/group__sinfo__qr__companion.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: functions for polynomial solution</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>functions for polynomial solution</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">functions for polynomial solution</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__detlin.html b/html/group__sinfo__rec__detlin.html
index d66d2f5..3f74c4c 100644
--- a/html/group__sinfo__rec__detlin.html
+++ b/html/group__sinfo__rec__detlin.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to determine detector linearity</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to determine detector linearity</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to determine detector linearity</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_detlin.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__detlin_8c_source.html#l00121">121</a> of file <a class="el" href="sinfo__rec__detlin_8c_source.html">sinfo_rec_detlin.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__distortion.html b/html/group__sinfo__rec__distortion.html
index 469f93b..38b387b 100644
--- a/html/group__sinfo__rec__distortion.html
+++ b/html/group__sinfo__rec__distortion.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to compute optical distortions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to compute optical distortions</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to compute optical distortions</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__distortion.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__distortion.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_distortion.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__distortion_8c_source.html#l00149">149</a> of file <a class="el" href="sinfo__rec__distortion_8c_source.html">sinfo_rec_distortion.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__jitter.html b/html/group__sinfo__rec__jitter.html
index ae37d1f..ca67199 100644
--- a/html/group__sinfo__rec__jitter.html
+++ b/html/group__sinfo__rec__jitter.html
@@ -2,56 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce science, PSF, telluric standards</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce science, PSF, telluric standards</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce science, PSF, telluric standards</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__jitter.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__jitter.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD</p>
 <p>configuration</p>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_jitter.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__jitter_8c_source.html#l00152">152</a> of file <a class="el" href="sinfo__rec__jitter_8c_source.html">sinfo_rec_jitter.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__lingain.html b/html/group__sinfo__rec__lingain.html
index adb3395..7244280 100644
--- a/html/group__sinfo__rec__lingain.html
+++ b/html/group__sinfo__rec__lingain.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to monitor detector's linearity and gain</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to monitor detector's linearity and gain</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to monitor detector's linearity and gain</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__mdark.html b/html/group__sinfo__rec__mdark.html
index bd356f3..c312b51 100644
--- a/html/group__sinfo__rec__mdark.html
+++ b/html/group__sinfo__rec__mdark.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to compute master dark</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to compute master dark</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to compute master dark</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__mdark.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__mdark.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_mdark.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__mdark_8c_source.html#l00113">113</a> of file <a class="el" href="sinfo__rec__mdark_8c_source.html">sinfo_rec_mdark.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__mflat.html b/html/group__sinfo__rec__mflat.html
index bf47134..bc0ef8f 100644
--- a/html/group__sinfo__rec__mflat.html
+++ b/html/group__sinfo__rec__mflat.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to compute master flat</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to compute master flat</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to compute master flat</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__mflat.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__mflat.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_mflat.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__mflat_8c_source.html#l00113">113</a> of file <a class="el" href="sinfo__rec__mflat_8c_source.html">sinfo_rec_mflat.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__objnod.html b/html/group__sinfo__rec__objnod.html
index bc90886..a447e9f 100644
--- a/html/group__sinfo__rec__objnod.html
+++ b/html/group__sinfo__rec__objnod.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce science data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce science data</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce science data</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__objnod.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__objnod.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_objnod.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__objnod_8c_source.html#l00147">147</a> of file <a class="el" href="sinfo__rec__objnod_8c_source.html">sinfo_rec_objnod.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__psf.html b/html/group__sinfo__rec__psf.html
index 68007f0..457003b 100644
--- a/html/group__sinfo__rec__psf.html
+++ b/html/group__sinfo__rec__psf.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce PSF standard star data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce PSF standard star data</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce PSF standard star data</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__psf.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__psf.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_psf.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__psf_8c_source.html#l00146">146</a> of file <a class="el" href="sinfo__rec__psf_8c_source.html">sinfo_rec_psf.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__pupil.html b/html/group__sinfo__rec__pupil.html
index bb13f7c..cee4a63 100644
--- a/html/group__sinfo__rec__pupil.html
+++ b/html/group__sinfo__rec__pupil.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce pupil data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce pupil data</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce pupil data</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__pupil.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__pupil.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_pupil.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__pupil_8c_source.html#l00137">137</a> of file <a class="el" href="sinfo__rec__pupil_8c_source.html">sinfo_rec_pupil.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__stdstar.html b/html/group__sinfo__rec__stdstar.html
index 0e6dfbb..8219fd9 100644
--- a/html/group__sinfo__rec__stdstar.html
+++ b/html/group__sinfo__rec__stdstar.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce telluric standard star data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce telluric standard star data</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce telluric standard star data</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__stdstar.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__stdstar.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_stdstar.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__stdstar_8c_source.html#l00149">149</a> of file <a class="el" href="sinfo__rec__stdstar_8c_source.html">sinfo_rec_stdstar.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__utils.html b/html/group__sinfo__rec__utils.html
index 0fb64f5..f6ba95e 100644
--- a/html/group__sinfo__rec__utils.html
+++ b/html/group__sinfo__rec__utils.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe utilities</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__rec__wavecal.html b/html/group__sinfo__rec__wavecal.html
index 6c3481f..b7fcddd 100644
--- a/html/group__sinfo__rec__wavecal.html
+++ b/html/group__sinfo__rec__wavecal.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce arc lamp data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to reduce arc lamp data</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to reduce arc lamp data</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__wavecal.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__rec__wavecal.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_rec_wavecal.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok, -1 otherwise</dd></dl>
 <p>Create the recipe instance and make it available to the application using the interface. This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__rec__wavecal_8c_source.html#l00146">146</a> of file <a class="el" href="sinfo__rec__wavecal_8c_source.html">sinfo_rec_wavecal.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__recipes.html b/html/group__sinfo__recipes.html
index e92faa4..64360ab 100644
--- a/html/group__sinfo__recipes.html
+++ b/html/group__sinfo__recipes.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe utilities</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__remove__crh__single.html b/html/group__sinfo__remove__crh__single.html
index 7bb3210..e4be8d5 100644
--- a/html/group__sinfo__remove__crh__single.html
+++ b/html/group__sinfo__remove__crh__single.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Remove Cosmic Rays single (sinfo_remove_crh_single)</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Remove Cosmic Rays single (sinfo_remove_crh_single)</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>Suppress Cosmic Rays by analysing on files </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Remove Cosmic Rays single (sinfo_remove_crh_single)</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>Suppress Cosmic Rays by analysing on files </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__shift__images.html b/html/group__sinfo__shift__images.html
index 8ad6445..8046323 100644
--- a/html/group__sinfo__shift__images.html
+++ b/html/group__sinfo__shift__images.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Functions to shift images</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Functions to shift images</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Functions to shift images</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__skycor__config.html b/html/group__sinfo__skycor__config.html
index e23ae6b..ccfb3a0 100644
--- a/html/group__sinfo__skycor__config.html
+++ b/html/group__sinfo__skycor__config.html
@@ -2,20 +2,44 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Sky residuals corrections configuration</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Sky residuals corrections configuration</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Sky residuals corrections configuration</div>  </div>
+</div><!--header-->
+<div class="contents">
 <p>parameters</p>
 <p>TBD </p>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__spectrum__ops.html b/html/group__sinfo__spectrum__ops.html
index 501d6b1..dd0110f 100644
--- a/html/group__sinfo__spectrum__ops.html
+++ b/html/group__sinfo__spectrum__ops.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Operations on spectra</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Operations on spectra</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Operations on spectra</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__step__distortion.html b/html/group__sinfo__step__distortion.html
index adb58ed..7db33ac 100644
--- a/html/group__sinfo__step__distortion.html
+++ b/html/group__sinfo__step__distortion.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to compute optical distortions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to compute optical distortions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to compute optical distortions</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__step__jitter.html b/html/group__sinfo__step__jitter.html
index 778e141..912de04 100644
--- a/html/group__sinfo__step__jitter.html
+++ b/html/group__sinfo__step__jitter.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce science, PSF or telluric standard data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to reduce science, PSF or telluric standard data</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to reduce science, PSF or telluric standard data</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__step__objnod.html b/html/group__sinfo__step__objnod.html
index 91a643c..d264487 100644
--- a/html/group__sinfo__step__objnod.html
+++ b/html/group__sinfo__step__objnod.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce science data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to reduce science data</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to reduce science data</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__step__psf.html b/html/group__sinfo__step__psf.html
index 24452ee..0d4ad2e 100644
--- a/html/group__sinfo__step__psf.html
+++ b/html/group__sinfo__step__psf.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce PSF data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to reduce PSF data</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to reduce PSF data</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__step__stdstar.html b/html/group__sinfo__step__stdstar.html
index 185a4b8..536e50b 100644
--- a/html/group__sinfo__step__stdstar.html
+++ b/html/group__sinfo__step__stdstar.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to reduce telluric standard data</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to reduce telluric standard data</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to reduce telluric standard data</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__tilt__cfg.html b/html/group__sinfo__tilt__cfg.html
index dfd4d12..ad4ec55 100644
--- a/html/group__sinfo__tilt__cfg.html
+++ b/html/group__sinfo__tilt__cfg.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: tilt computation</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>tilt computation</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">tilt computation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__time.html b/html/group__sinfo__time.html
index 27bb244..c5559e5 100644
--- a/html/group__sinfo__time.html
+++ b/html/group__sinfo__time.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Get date/time, possibly in ISO8601 format</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Get date/time, possibly in ISO8601 format</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>This module contains various utilities to get the current date/time, and possibly format it according to the ISO 8601 format. </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Get date/time, possibly in ISO8601 format</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This module contains various utilities to get the current date/time, and possibly format it according to the ISO 8601 format. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__tpl__dfs.html b/html/group__sinfo__tpl__dfs.html
index fd60be9..c2c393c 100644
--- a/html/group__sinfo__tpl__dfs.html
+++ b/html/group__sinfo__tpl__dfs.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: DFS related functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>DFS related functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">DFS related functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__tpl__utils.html b/html/group__sinfo__tpl__utils.html
index 4a4e986..272b781 100644
--- a/html/group__sinfo__tpl__utils.html
+++ b/html/group__sinfo__tpl__utils.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Miscellaneous Utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Miscellaneous Utilities</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Miscellaneous Utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utilities.html b/html/group__sinfo__utilities.html
index 041bdd6..c0a4ac3 100644
--- a/html/group__sinfo__utilities.html
+++ b/html/group__sinfo__utilities.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: utilities</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>utilities</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">utilities</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utils.html b/html/group__sinfo__utils.html
index e56e21c..d01aad9 100644
--- a/html/group__sinfo__utils.html
+++ b/html/group__sinfo__utils.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Utility functions</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Utility functions</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>This module contains various functions that are shared between multiple recipes </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Utility functions</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This module contains various functions that are shared between multiple recipes </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utils__wrappers.html b/html/group__sinfo__utils__wrappers.html
index 7bc298a..429e7d6 100644
--- a/html/group__sinfo__utils__wrappers.html
+++ b/html/group__sinfo__utils__wrappers.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Utility functions (wrappers)</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Utility functions (wrappers)</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>This module contains wrapper functions, convenience functions and simple extensions of CPL functions. </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Utility functions (wrappers)</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>This module contains wrapper functions, convenience functions and simple extensions of CPL functions. </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__bp__mask__add.html b/html/group__sinfo__utl__bp__mask__add.html
index f8a67cd..c51e97d 100644
--- a/html/group__sinfo__utl__bp__mask__add.html
+++ b/html/group__sinfo__utl__bp__mask__add.html
@@ -2,18 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to coadd bad pixel masks</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to coadd bad pixel masks</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to coadd bad pixel masks</div>  </div>
+</div><!--header-->
+<div class="contents">
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube2ima.html b/html/group__sinfo__utl__cube2ima.html
index f950e4f..897d6ac 100644
--- a/html/group__sinfo__utl__cube2ima.html
+++ b/html/group__sinfo__utl__cube2ima.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to collapse a cube in an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to collapse a cube in an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to collapse a cube in an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube2ima.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube2ima.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_cube2ima.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__cube2ima_8c_source.html#l00088">88</a> of file <a class="el" href="recipes_2sinfo__utl__cube2ima_8c_source.html">recipes/sinfo_utl_cube2ima.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube2spectrum.html b/html/group__sinfo__utl__cube2spectrum.html
index 02db0d8..3be60f0 100644
--- a/html/group__sinfo__utl__cube2spectrum.html
+++ b/html/group__sinfo__utl__cube2spectrum.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to collapse a cube in a spectrum</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to collapse a cube in a spectrum</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to collapse a cube in a spectrum</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube2spectrum.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube2spectrum.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_cube2spectrum.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__cube2spectrum_8c_source.html#l00090">90</a> of file <a class="el" href="recipes_2sinfo__utl__cube2spectrum_8c_source.html">recipes/sinfo_utl_cube2spectrum.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube__arith.html b/html/group__sinfo__utl__cube__arith.html
index e604ee1..6340060 100644
--- a/html/group__sinfo__utl__cube__arith.html
+++ b/html/group__sinfo__utl__cube__arith.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe for cube arithmetics</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe for cube arithmetics</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe for cube arithmetics</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_cube_arith.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__cube__arith_8c_source.html#l00101">101</a> of file <a class="el" href="recipes_2sinfo__utl__cube__arith_8c_source.html">recipes/sinfo_utl_cube_arith.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube__combine.html b/html/group__sinfo__utl__cube__combine.html
index 29b8e90..0dbbae1 100644
--- a/html/group__sinfo__utl__cube__combine.html
+++ b/html/group__sinfo__utl__cube__combine.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to coadd cubes</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to coadd cubes</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to coadd cubes</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__combine.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__combine.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_cube_combine.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__cube__combine_8c_source.html#l00094">94</a> of file <a class="el" href="recipes_2sinfo__utl__cube__combine_8c_source.html">recipes/sinfo_utl_cube_combine.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube__create.html b/html/group__sinfo__utl__cube__create.html
index 82c1a6b..fa8abe1 100644
--- a/html/group__sinfo__utl__cube__create.html
+++ b/html/group__sinfo__utl__cube__create.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to coadd cubes</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to coadd cubes</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to coadd cubes</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__create.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__create.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_cube_create.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__cube__create_8c_source.html#l00104">104</a> of file <a class="el" href="sinfo__utl__cube__create_8c_source.html">sinfo_utl_cube_create.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__cube__test.html b/html/group__sinfo__utl__cube__test.html
index 88ed8fc..8eb6a78 100644
--- a/html/group__sinfo__utl__cube__test.html
+++ b/html/group__sinfo__utl__cube__test.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to test cube operations</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to test cube operations</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to test cube operations</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__cube__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_cube_test.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__cube__test_8c_source.html#l00088">88</a> of file <a class="el" href="sinfo__utl__cube__test_8c_source.html">sinfo_utl_cube_test.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__eff.html b/html/group__sinfo__utl__eff.html
index 8b8bfd1..daffcf5 100644
--- a/html/group__sinfo__utl__eff.html
+++ b/html/group__sinfo__utl__eff.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__eff.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__eff.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_eff.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__eff_8c_source.html#l00116">116</a> of file <a class="el" href="sinfo__utl__eff_8c_source.html">sinfo_utl_eff.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__illumcorr.html b/html/group__sinfo__utl__illumcorr.html
index b06b547..dfa5416 100644
--- a/html/group__sinfo__utl__illumcorr.html
+++ b/html/group__sinfo__utl__illumcorr.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to correct for slitlet illumination</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to correct for slitlet illumination</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>disomogeneities </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to correct for slitlet illumination</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>disomogeneities </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__ima__arith.html b/html/group__sinfo__utl__ima__arith.html
index be46f1e..760127c 100644
--- a/html/group__sinfo__utl__ima__arith.html
+++ b/html/group__sinfo__utl__ima__arith.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_ima_arith.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__ima__arith_8c_source.html#l00097">97</a> of file <a class="el" href="sinfo__utl__ima__arith_8c_source.html">sinfo_utl_ima_arith.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__ima__cube__ks__test.html b/html/group__sinfo__utl__ima__cube__ks__test.html
index f8bb626..ed5722b 100644
--- a/html/group__sinfo__utl__ima__cube__ks__test.html
+++ b/html/group__sinfo__utl__ima__cube__ks__test.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__cube__ks__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__cube__ks__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_ima_cube_ks_test.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__ima__cube__ks__test_8c_source.html#l00170">170</a> of file <a class="el" href="sinfo__utl__ima__cube__ks__test_8c_source.html">sinfo_utl_ima_cube_ks_test.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__ima__gauss.html b/html/group__sinfo__utl__ima__gauss.html
index e5cd7f8..06d1d3f 100644
--- a/html/group__sinfo__utl__ima__gauss.html
+++ b/html/group__sinfo__utl__ima__gauss.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__gauss.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__gauss.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_ima_gauss.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__ima__gauss_8c_source.html#l00103">103</a> of file <a class="el" href="sinfo__utl__ima__gauss_8c_source.html">sinfo_utl_ima_gauss.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__ima__line__corr.html b/html/group__sinfo__utl__ima__line__corr.html
index fba2025..afdf614 100644
--- a/html/group__sinfo__utl__ima__line__corr.html
+++ b/html/group__sinfo__utl__ima__line__corr.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__line__corr.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__ima__line__corr.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_ima_line_corr.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__ima__line__corr_8c_source.html#l00096">96</a> of file <a class="el" href="sinfo__utl__ima__line__corr_8c_source.html">sinfo_utl_ima_line_corr.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__remove__crh__single.html b/html/group__sinfo__utl__remove__crh__single.html
index 300e143..40f7f53 100644
--- a/html/group__sinfo__utl__remove__crh__single.html
+++ b/html/group__sinfo__utl__remove__crh__single.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to remove CRHs from an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to remove CRHs from an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to remove CRHs from an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__remove__crh__single.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__remove__crh__single.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_remove_crh_single.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__remove__crh__single_8c_source.html#l00097">97</a> of file <a class="el" href="sinfo__utl__remove__crh__single_8c_source.html">sinfo_utl_remove_crh_single.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__skycor.html b/html/group__sinfo__utl__skycor.html
index 798611a..a22a6f2 100644
--- a/html/group__sinfo__utl__skycor.html
+++ b/html/group__sinfo__utl__skycor.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to correct sky residuals on science cubes</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to correct sky residuals on science cubes</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to correct sky residuals on science cubes</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__skycor.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__skycor.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_skycor.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__skycor_8c_source.html#l00091">91</a> of file <a class="el" href="sinfo__utl__skycor_8c_source.html">sinfo_utl_skycor.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__skymap.html b/html/group__sinfo__utl__skymap.html
index 929eca9..e295e86 100644
--- a/html/group__sinfo__utl__skymap.html
+++ b/html/group__sinfo__utl__skymap.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to generate a sky map for SINFONI SRTD</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to generate a sky map for SINFONI SRTD</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to generate a sky map for SINFONI SRTD</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__skymap.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__skymap.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_skymap.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__skymap_8c_source.html#l00092">92</a> of file <a class="el" href="sinfo__utl__skymap_8c_source.html">sinfo_utl_skymap.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__spectrum__divide__by__blackbody.html b/html/group__sinfo__utl__spectrum__divide__by__blackbody.html
index 7563216..e30bc82 100644
--- a/html/group__sinfo__utl__spectrum__divide__by__blackbody.html
+++ b/html/group__sinfo__utl__spectrum__divide__by__blackbody.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to correct a   spectrum from the blackbody thermal emission</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to correct a spectrum from the blackbody thermal emission</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to correct a spectrum from the blackbody thermal emission</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__spectrum__divide__by__blackbody.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__spectrum__divide__by__blackbody.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_spectrum_divide_by_blackbody.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html#l00097">97</a> of file <a class="el" href="recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html">recipes/sinfo_utl_spectrum_divide_by_blackbody.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__spectrum__wavelength__shift.html b/html/group__sinfo__utl__spectrum__wavelength__shift.html
index 4fb68a9..3f1d8c1 100644
--- a/html/group__sinfo__utl__spectrum__wavelength__shift.html
+++ b/html/group__sinfo__utl__spectrum__wavelength__shift.html
@@ -2,54 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to shift a spectrum in  wavelength</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to shift a spectrum in wavelength</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to shift a spectrum in wavelength</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__spectrum__wavelength__shift.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__spectrum__wavelength__shift.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
-<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <p>TBD </p>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="recipes/sinfo_utl_spectrum_wavelength_shift.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html#l00097">97</a> of file <a class="el" href="recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html">recipes/sinfo_utl_spectrum_wavelength_shift.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__stdstars.html b/html/group__sinfo__utl__stdstars.html
index 78661e8..4bd84aa 100644
--- a/html/group__sinfo__utl__stdstars.html
+++ b/html/group__sinfo__utl__stdstars.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to generate standard stars catalogs</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Recipe to generate standard stars catalogs</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Recipe to generate standard stars catalogs</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__table__ex.html b/html/group__sinfo__utl__table__ex.html
index f413789..b897302 100644
--- a/html/group__sinfo__utl__table__ex.html
+++ b/html/group__sinfo__utl__table__ex.html
@@ -2,52 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Recipe to do operations on an image</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Recipe to do operations on an image</div>  </div>
+</div><!--header-->
 <div class="contents">
-<h1>Recipe to do operations on an image</h1><table border="0" cellpadding="0" cellspacing="0">
-<tr><td colspan="2"><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__table__ex.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
-<tr><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__sinfo__utl__table__ex.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">cpl_plugin_get_info</a> (cpl_pluginlist *list)</td></tr>
+<tr class="memdesc:ga31d1fccd4cd15b1c1f3c5edc8cb18693"><td class="mdescLeft"> </td><td class="mdescRight">Build the list of available plugins, for this module.  <a href="#ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><br/></td></tr>
 </table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 <hr/><h2>Function Documentation</h2>
-<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a><!-- doxytag: member="sinfo_utl_table_ex.c::cpl_plugin_get_info" ref="ga31d1fccd4cd15b1c1f3c5edc8cb18693" args="(cpl_pluginlist *list)" -->
+<a class="anchor" id="ga31d1fccd4cd15b1c1f3c5edc8cb18693"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
           <td class="memname">int cpl_plugin_get_info </td>
           <td>(</td>
-          <td class="paramtype">cpl_pluginlist * </td>
-          <td class="paramname"> <em>list</em></td>
-          <td> ) </td>
+          <td class="paramtype">cpl_pluginlist * </td>
+          <td class="paramname"><em>list</em></td><td>)</td>
           <td></td>
         </tr>
       </table>
-</div>
-<div class="memdoc">
+</div><div class="memdoc">
 
 <p>Build the list of available plugins, for this module. </p>
-<dl><dt><b>Parameters:</b></dt><dd>
-  <table border="0" cellspacing="2" cellpadding="0">
-    <tr><td valign="top"></td><td valign="top"><em>list</em> </td><td>the plugin list </td></tr>
+<dl class="params"><dt>Parameters:</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">list</td><td>the plugin list </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="return"><dt><b>Returns:</b></dt><dd>0 if everything is ok</dd></dl>
+<dl class="section return"><dt>Returns:</dt><dd>0 if everything is ok</dd></dl>
 <p>This function is exported. </p>
 
 <p>Definition at line <a class="el" href="sinfo__utl__table__ex_8c_source.html#l00101">101</a> of file <a class="el" href="sinfo__utl__table__ex_8c_source.html">sinfo_utl_table_ex.c</a>.</p>
 
 </div>
 </div>
-</div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__sinfo__utl__table__test.html b/html/group__sinfo__utl__table__test.html
index 95abc24..1c6bb02 100644
--- a/html/group__sinfo__utl__table__test.html
+++ b/html/group__sinfo__utl__table__test.html
@@ -2,18 +2,42 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Utility to test column table shift</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Utility to test column table shift</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Utility to test column table shift</div>  </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/group__spiffi__general__config.html b/html/group__spiffi__general__config.html
index a07545c..e934d77 100644
--- a/html/group__spiffi__general__config.html
+++ b/html/group__spiffi__general__config.html
@@ -2,19 +2,43 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: General configuration parameters</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>General configuration parameters</h1><table border="0" cellpadding="0" cellspacing="0">
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
 </table>
-<p>TBD </p>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">General configuration parameters</div>  </div>
+</div><!--header-->
+<div class="contents">
+<p>TBD </p>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/index.html b/html/index.html
index 4f8c63a..00c06b9 100644
--- a/html/index.html
+++ b/html/index.html
@@ -2,22 +2,48 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: Main Page</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>SINFONI Pipeline Reference Manual Documentation</h1><h3>2.3.3 </h3><ul>      <li><a href="index.html"><span>Main Page</span></a></li>
-      <li><a href="modules.html"><span>Modules</span></a></li>
-      <li><a href="files.html"><span>Files</span></a></li>
-<ul>      <li><a href="files.html"><span>File List</span></a></li>
-</ul>
-</ul>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">SINFONI Pipeline Reference Manual Documentation</div>  </div>
+</div><!--header-->
+<div class="contents">
+<ul><li><a href="index.html"><span>Main Page</span></a>
+</li><li><a href="modules.html"><span>Modules</span></a>
+</li><li><a href="files.html"><span>Files</span></a>
+<ul><li><a href="files.html"><span>File List</span></a>
+</li></ul>
+</li></ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__calib_8c_source.html b/html/irplib__calib_8c_source.html
index a100a20..e7c6246 100644
--- a/html/irplib__calib_8c_source.html
+++ b/html/irplib__calib_8c_source.html
@@ -2,602 +2,633 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_calib.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_calib.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_calib.c,v 1.19 2013/03/01 10:26:22 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/03/01 10:26:22 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.19 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_calib.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">static</span> <span class="keywordtype">int</span>  
-<a name="l00042"></a>00042 irplib_get_clean_mean_window(cpl_image* img, 
-<a name="l00043"></a>00043                              <span class="keyword">const</span> <span class="keywordtype">int</span> llx, 
-<a name="l00044"></a>00044                              <span class="keyword">const</span> <span class="keywordtype">int</span> lly, 
-<a name="l00045"></a>00045                              <span class="keyword">const</span> <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury, 
-<a name="l00046"></a>00046                              <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, 
-<a name="l00047"></a>00047                              <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, 
-<a name="l00048"></a>00048                              <span class="keywordtype">double</span>* clean_mean, 
-<a name="l00049"></a>00049                              <span class="keywordtype">double</span>* clean_stdev);
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment">                                   Defines</span>
-<a name="l00053"></a>00053 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMESET_GET       cpl_frameset_get_position</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="comment">/* Remove this branch once CPL versions less than 6.3 are no longer supported */</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#define IRPLIB_FRAMESET_GET       cpl_frameset_get_frame</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist);
-<a name="l00065"></a>00065 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00072"></a>00072 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00081"></a>00081 {
-<a name="l00082"></a>00082     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);
-<a name="l00083"></a>00083 }
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist)
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094   
-<a name="l00095"></a>00095     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00115"></a>00115 <span class="keyword">static</span> <span class="keywordtype">int</span>  
-<a name="l00116"></a>00116 irplib_get_clean_mean_window(cpl_image* img, 
-<a name="l00117"></a>00117                              <span class="keyword">const</span> <span class="keywordtype">int</span> llx, 
-<a name="l00118"></a>00118                              <span class="keyword">const</span> <span class="keywordtype">int</span> lly, 
-<a name="l00119"></a>00119                              <span class="keyword">const</span> <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury, 
-<a name="l00120"></a>00120                              <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, 
-<a name="l00121"></a>00121                              <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, 
-<a name="l00122"></a>00122                              <span class="keywordtype">double</span>* clean_mean, 
-<a name="l00123"></a>00123                              <span class="keywordtype">double</span>* clean_stdev)
-<a name="l00124"></a>00124 {
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="keywordtype">double</span> mean=0;
-<a name="l00128"></a>00128   <span class="keywordtype">double</span> stdev=0;
-<a name="l00129"></a>00129   <span class="keywordtype">double</span> threshold=0;
-<a name="l00130"></a>00130   <span class="keywordtype">double</span> lo_cut=0;
-<a name="l00131"></a>00131   <span class="keywordtype">double</span> hi_cut=0;
-<a name="l00132"></a>00132   cpl_mask* mask=NULL;
-<a name="l00133"></a>00133   cpl_image* tmp=NULL;
-<a name="l00134"></a>00134   cpl_stats* stats=NULL;
-<a name="l00135"></a>00135   <span class="keywordtype">int</span> i=0;
-<a name="l00136"></a>00136   
-<a name="l00137"></a>00137   tmp=cpl_image_extract(img,llx,lly,urx,ury);
-<a name="l00138"></a>00138   cpl_image_accept_all(tmp);
-<a name="l00139"></a>00139   <span class="keywordflow">for</span>(i=0;i<nclip;i++) {
-<a name="l00140"></a>00140    
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     cpl_stats_delete(stats);
-<a name="l00143"></a>00143     stats = cpl_stats_new_from_image(tmp, CPL_STATS_MEAN | CPL_STATS_STDEV);
-<a name="l00144"></a>00144     mean = cpl_stats_get_mean(stats);
-<a name="l00145"></a>00145     stdev = cpl_stats_get_stdev(stats);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     threshold=kappa*stdev;
-<a name="l00148"></a>00148     lo_cut=mean-threshold;
-<a name="l00149"></a>00149     hi_cut=mean+threshold;
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     cpl_image_accept_all(tmp);
-<a name="l00152"></a>00152     mask=cpl_mask_threshold_image_create(tmp,lo_cut,hi_cut);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     cpl_mask_not(mask);
-<a name="l00155"></a>00155     cpl_image_reject_from_mask(tmp,mask);
-<a name="l00156"></a>00156     cpl_mask_delete(mask);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   }
-<a name="l00160"></a>00160   *clean_mean=mean;
-<a name="l00161"></a>00161   *clean_stdev=stdev;
-<a name="l00162"></a>00162   cpl_image_delete(tmp);
-<a name="l00163"></a>00163   cpl_stats_delete(stats);
-<a name="l00164"></a>00164  
-<a name="l00165"></a>00165   <span class="keywordflow">return</span> 0;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168 }
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00187"></a>00187 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 cpl_table* 
-<a name="l00191"></a><a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9">00191</a> <a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9" title="Computes the detector&#39;s gain.">irplib_compute_gain</a>(
-<a name="l00192"></a>00192                 cpl_frameset* son, 
-<a name="l00193"></a>00193                 cpl_frameset* sof, 
-<a name="l00194"></a>00194                 <span class="keywordtype">int</span>* zone,   
-<a name="l00195"></a>00195                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,
-<a name="l00196"></a>00196                 <span class="keyword">const</span> <span class="keywordtype">int</span> nclip)
-<a name="l00197"></a>00197 {
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199   cpl_frame*    frm=NULL;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   cpl_image* img_on1=NULL;
-<a name="l00202"></a>00202   cpl_image* img_on2=NULL;
-<a name="l00203"></a>00203   cpl_image* img_on_dif=NULL;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   cpl_image* img_of1=NULL;
-<a name="l00206"></a>00206   cpl_image* img_of2=NULL;
-<a name="l00207"></a>00207   cpl_image* img_of_dif=NULL;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   cpl_table* res_tbl=NULL;
-<a name="l00210"></a>00210   cpl_vector* dit_on=NULL;
-<a name="l00211"></a>00211   cpl_vector* dit_of=NULL;
-<a name="l00212"></a>00212   cpl_vector* exptime_on=NULL;
-<a name="l00213"></a>00213   cpl_vector* exptime_of=NULL;
-<a name="l00214"></a>00214   cpl_propertylist* plist=NULL;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   <span class="keywordtype">int</span> non=0;
-<a name="l00217"></a>00217   <span class="keywordtype">int</span> nof=0;
-<a name="l00218"></a>00218   <span class="keywordtype">int</span> nfr=0;
-<a name="l00219"></a>00219   <span class="keywordtype">int</span> llx;
-<a name="l00220"></a>00220   <span class="keywordtype">int</span> lly;
-<a name="l00221"></a>00221   <span class="keywordtype">int</span> urx;
-<a name="l00222"></a>00222   <span class="keywordtype">int</span> ury;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224   <span class="keywordtype">double</span> avg_on1=0;
-<a name="l00225"></a>00225   <span class="keywordtype">double</span> avg_on2=0;
-<a name="l00226"></a>00226   <span class="keywordtype">double</span> avg_of1=0;
-<a name="l00227"></a>00227   <span class="keywordtype">double</span> avg_of2=0;
-<a name="l00228"></a>00228   <span class="keywordtype">double</span> avg_on_dif=0;
-<a name="l00229"></a>00229   <span class="keywordtype">double</span> avg_of_dif=0;
-<a name="l00230"></a>00230   <span class="keywordtype">double</span> std=0;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   <span class="keywordtype">double</span> sig_on_dif=0;
-<a name="l00233"></a>00233   <span class="keywordtype">double</span> sig_of_dif=0;
-<a name="l00234"></a>00234   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00235"></a>00235   <span class="keywordtype">int</span> i=0;
-<a name="l00236"></a>00236   <span class="keywordtype">int</span> m=0;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   <span class="keywordtype">double</span> gain=0;
-<a name="l00239"></a>00239   <span class="keywordtype">double</span> dit_ref=0;
-<a name="l00240"></a>00240   <span class="keywordtype">double</span> dit_tmp=0;
-<a name="l00241"></a>00241   <span class="keywordtype">double</span> exptime_ref=0;
-<a name="l00242"></a>00242   <span class="keywordtype">double</span> exptime_tmp=0;
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244  
-<a name="l00245"></a>00245   non = cpl_frameset_get_size(son);
-<a name="l00246"></a>00246   nof = cpl_frameset_get_size(sof);
-<a name="l00247"></a>00247   nfr = (non <= nof) ? non : nof;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   dit_on=cpl_vector_new(nfr);
-<a name="l00250"></a>00250   dit_of=cpl_vector_new(nfr);  
-<a name="l00251"></a>00251   exptime_on=cpl_vector_new(nfr);
-<a name="l00252"></a>00252   exptime_of=cpl_vector_new(nfr);
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     frm=IRPLIB_FRAMESET_GET(son,i);
-<a name="l00257"></a>00257     name=cpl_frame_get_filename(frm);
-<a name="l00258"></a>00258     plist=cpl_propertylist_load(name,0);
-<a name="l00259"></a>00259     dit_ref=irplib_pfits_get_dit(plist);
-<a name="l00260"></a>00260     exptime_ref=(double)irplib_pfits_get_exp_time(plist);
-<a name="l00261"></a>00261     cpl_propertylist_delete(plist);
-<a name="l00262"></a>00262     cpl_vector_set(dit_on,i,dit_ref);
-<a name="l00263"></a>00263     cpl_vector_set(exptime_on,i,exptime_ref);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     frm=IRPLIB_FRAMESET_GET(sof,i);
-<a name="l00266"></a>00266     name=cpl_frame_get_filename(frm);
-<a name="l00267"></a>00267     plist=cpl_propertylist_load(name,0);
-<a name="l00268"></a>00268     dit_ref=irplib_pfits_get_dit(plist);
-<a name="l00269"></a>00269     exptime_ref=(double)irplib_pfits_get_exp_time(plist);
-<a name="l00270"></a>00270     cpl_propertylist_delete(plist);
-<a name="l00271"></a>00271     cpl_vector_set(dit_of,i,dit_ref);
-<a name="l00272"></a>00272     cpl_vector_set(exptime_of,i,exptime_ref);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274   }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   llx=zone[0];
-<a name="l00278"></a>00278   lly=zone[1];
-<a name="l00279"></a>00279   urx=zone[2];
-<a name="l00280"></a>00280   ury=zone[3];
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284   res_tbl=cpl_table_new(nfr);
-<a name="l00285"></a>00285   cpl_table_new_column(res_tbl,<span class="stringliteral">"adu"</span>, CPL_TYPE_DOUBLE);
-<a name="l00286"></a>00286   cpl_table_new_column(res_tbl,<span class="stringliteral">"gain"</span>, CPL_TYPE_DOUBLE);
-<a name="l00287"></a>00287  
-<a name="l00288"></a>00288   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l00289"></a>00289     frm=IRPLIB_FRAMESET_GET(son,i);
-<a name="l00290"></a>00290     name=cpl_frame_get_filename(frm);
-<a name="l00291"></a>00291     img_on1=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     frm=IRPLIB_FRAMESET_GET(sof,i);
-<a name="l00294"></a>00294     name=cpl_frame_get_filename(frm);
-<a name="l00295"></a>00295     img_of1=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298     dit_ref=cpl_vector_get(dit_on,i);
-<a name="l00299"></a>00299     exptime_ref=cpl_vector_get(exptime_on,i);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301    
-<a name="l00302"></a>00302     <span class="keywordflow">for</span>(m=0;m<nfr; m++) {
-<a name="l00303"></a>00303       <span class="keywordflow">if</span>(m != i) {
-<a name="l00304"></a>00304     frm=IRPLIB_FRAMESET_GET(son,m);
-<a name="l00305"></a>00305     name=cpl_frame_get_filename(frm);
-<a name="l00306"></a>00306     dit_tmp=cpl_vector_get(dit_on,m);
-<a name="l00307"></a>00307     exptime_tmp=cpl_vector_get(exptime_on,m);
-<a name="l00308"></a>00308     <span class="keywordflow">if</span>(dit_tmp == dit_ref && exptime_tmp == exptime_ref) {
-<a name="l00309"></a>00309       img_on2=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00310"></a>00310       frm=IRPLIB_FRAMESET_GET(sof,m);
-<a name="l00311"></a>00311       name=cpl_frame_get_filename(frm);
-<a name="l00312"></a>00312       img_of2=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314       img_on_dif=cpl_image_subtract_create(img_on1,img_on2);
-<a name="l00315"></a>00315       img_of_dif=cpl_image_subtract_create(img_of1,img_of2);
-<a name="l00316"></a>00316       
-<a name="l00317"></a>00317       irplib_get_clean_mean_window(img_on1,llx,lly,urx,ury,kappa,
-<a name="l00318"></a>00318                                       nclip,&avg_on1,&std);
-<a name="l00319"></a>00319       irplib_get_clean_mean_window(img_on2,llx,lly,urx,ury,kappa,
-<a name="l00320"></a>00320                                       nclip,&avg_on2,&std);
-<a name="l00321"></a>00321       irplib_get_clean_mean_window(img_of1,llx,lly,urx,ury,kappa,
-<a name="l00322"></a>00322                                       nclip,&avg_of1,&std);
-<a name="l00323"></a>00323       irplib_get_clean_mean_window(img_of2,llx,lly,urx,ury,kappa,
-<a name="l00324"></a>00324                                       nclip,&avg_of2,&std);
-<a name="l00325"></a>00325       irplib_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,
-<a name="l00326"></a>00326                                       nclip,&avg_on_dif,&sig_on_dif);
-<a name="l00327"></a>00327       irplib_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,
-<a name="l00328"></a>00328                                       nclip,&avg_of_dif,&sig_of_dif);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330       cpl_image_delete(img_on2);
-<a name="l00331"></a>00331       cpl_image_delete(img_of2);
-<a name="l00332"></a>00332       cpl_image_delete(img_on_dif);
-<a name="l00333"></a>00333       cpl_image_delete(img_of_dif);
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335           gain=((avg_on1+avg_on2)-(avg_of1+avg_of2))/
-<a name="l00336"></a>00336                ((sig_on_dif*sig_on_dif)-(sig_of_dif*sig_of_dif));
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338           cpl_table_set_double(res_tbl,<span class="stringliteral">"gain"</span>,m,gain);
-<a name="l00339"></a>00339           cpl_table_set_double(res_tbl,<span class="stringliteral">"adu"</span>,m,
-<a name="l00340"></a>00340                                ((avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2));
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342     }
-<a name="l00343"></a>00343       }
-<a name="l00344"></a>00344     }
-<a name="l00345"></a>00345     cpl_image_delete(img_on1);
-<a name="l00346"></a>00346     cpl_image_delete(img_of1);
-<a name="l00347"></a>00347   }
-<a name="l00348"></a>00348   
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350   cpl_vector_delete(dit_on);
-<a name="l00351"></a>00351   cpl_vector_delete(dit_of);
-<a name="l00352"></a>00352   cpl_vector_delete(exptime_on);
-<a name="l00353"></a>00353   cpl_vector_delete(exptime_of);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   <span class="keywordflow">return</span> res_tbl;
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 }
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359 <span class="comment">/* --------------------------------------------------------------------------*/</span>
-<a name="l00369"></a>00369 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 
-<a name="l00372"></a><a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a">00372</a> cpl_table* <a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a" title="Computes the detector&#39;s linearity.">irplib_compute_linearity</a>(cpl_frameset* son, cpl_frameset* sof)
-<a name="l00373"></a>00373 {
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376   cpl_frame*    frm=NULL;
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378   <span class="keywordtype">int</span>* status=0;
-<a name="l00379"></a>00379   <span class="keywordtype">int</span> non=0;
-<a name="l00380"></a>00380   <span class="keywordtype">int</span> nof=0;
-<a name="l00381"></a>00381   <span class="keywordtype">int</span> nfr=0;
-<a name="l00382"></a>00382   <span class="keywordtype">int</span> i=0;
-<a name="l00383"></a>00383   <span class="keywordtype">double</span> med_on=0;
-<a name="l00384"></a>00384   <span class="keywordtype">double</span> avg_on=0;
-<a name="l00385"></a>00385   <span class="keywordtype">double</span> med_of=0;
-<a name="l00386"></a>00386   <span class="keywordtype">double</span> avg_of=0;
-<a name="l00387"></a>00387   <span class="keywordtype">double</span> med_dit=0;
-<a name="l00388"></a>00388   <span class="keywordtype">double</span> avg_dit=0;
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390   <span class="keywordtype">double</span> med=0;
-<a name="l00391"></a>00391   <span class="keywordtype">double</span> avg=0;
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00394"></a>00394   cpl_image* img=NULL;
-<a name="l00395"></a>00395   cpl_vector* vec_adl=NULL;
-<a name="l00396"></a>00396   cpl_vector* vec_dit=NULL;
-<a name="l00397"></a>00397   cpl_vector* vec_avg=NULL;
-<a name="l00398"></a>00398   cpl_vector* vec_med=NULL;
-<a name="l00399"></a>00399   cpl_vector* vec_avg_dit=NULL;
-<a name="l00400"></a>00400   cpl_vector* vec_med_dit=NULL;
-<a name="l00401"></a>00401   cpl_propertylist* plist=NULL;
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403   <span class="keywordtype">double</span> dit=0;
-<a name="l00404"></a>00404   cpl_table* lin_tbl=NULL;
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406  
-<a name="l00407"></a>00407   non = cpl_frameset_get_size(son);
-<a name="l00408"></a>00408   nof = cpl_frameset_get_size(sof);
-<a name="l00409"></a>00409   nfr = (non <= nof) ? non : nof;
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411   lin_tbl=cpl_table_new(nfr);
-<a name="l00412"></a>00412   cpl_table_new_column(lin_tbl,<span class="stringliteral">"med"</span>, CPL_TYPE_DOUBLE);
-<a name="l00413"></a>00413   cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg"</span>, CPL_TYPE_DOUBLE);
-<a name="l00414"></a>00414   cpl_table_new_column(lin_tbl,<span class="stringliteral">"med_dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l00415"></a>00415   cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg_dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l00416"></a>00416   cpl_table_new_column(lin_tbl,<span class="stringliteral">"dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l00417"></a>00417   vec_med=cpl_vector_new(nfr);
-<a name="l00418"></a>00418   vec_avg=cpl_vector_new(nfr);
-<a name="l00419"></a>00419   vec_med_dit=cpl_vector_new(nfr);
-<a name="l00420"></a>00420   vec_avg_dit=cpl_vector_new(nfr);
-<a name="l00421"></a>00421   vec_dit=cpl_vector_new(nfr);
-<a name="l00422"></a>00422   vec_adl=cpl_vector_new(nfr);
-<a name="l00423"></a>00423   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l00424"></a>00424     frm=IRPLIB_FRAMESET_GET(son,i);
-<a name="l00425"></a>00425     name=cpl_frame_get_filename(frm);
-<a name="l00426"></a>00426     img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00427"></a>00427     med_on=cpl_image_get_median(img);
-<a name="l00428"></a>00428     avg_on=cpl_image_get_mean(img);
-<a name="l00429"></a>00429     cpl_image_delete(img);
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431     frm=IRPLIB_FRAMESET_GET(sof,i);
-<a name="l00432"></a>00432     name=cpl_frame_get_filename(frm);
-<a name="l00433"></a>00433     img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00434"></a>00434     med_of=cpl_image_get_median(img);
-<a name="l00435"></a>00435     avg_of=cpl_image_get_mean(img);
-<a name="l00436"></a>00436     cpl_image_delete(img);
-<a name="l00437"></a>00437     med=med_on-med_of;
-<a name="l00438"></a>00438     avg=avg_on-avg_of;
-<a name="l00439"></a>00439     plist=cpl_propertylist_load(name,0);
-<a name="l00440"></a>00440     dit=(double)irplib_pfits_get_dit(plist);
-<a name="l00441"></a>00441     cpl_propertylist_delete(plist);
-<a name="l00442"></a>00442     avg_dit=avg/dit;
-<a name="l00443"></a>00443     med_dit=med/dit;
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445     cpl_vector_set(vec_dit,i,dit);
-<a name="l00446"></a>00446     cpl_vector_set(vec_avg,i,avg);
-<a name="l00447"></a>00447     cpl_vector_set(vec_med,i,med);
-<a name="l00448"></a>00448     cpl_vector_set(vec_avg_dit,i,avg_dit);
-<a name="l00449"></a>00449     cpl_vector_set(vec_med_dit,i,med_dit);
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452     cpl_table_set_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,dit);
-<a name="l00453"></a>00453     cpl_table_set_double(lin_tbl,<span class="stringliteral">"med"</span>,i,med);
-<a name="l00454"></a>00454     cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg"</span>,i,avg);
-<a name="l00455"></a>00455     cpl_table_set_double(lin_tbl,<span class="stringliteral">"med_dit"</span>,i,med_dit);
-<a name="l00456"></a>00456     cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg_dit"</span>,i,avg_dit);
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458   }
-<a name="l00459"></a>00459   cpl_table_new_column(lin_tbl,<span class="stringliteral">"adl"</span>, CPL_TYPE_DOUBLE);
-<a name="l00460"></a>00460   med_dit=cpl_vector_get_mean(vec_med_dit);
-<a name="l00461"></a>00461   avg_dit=cpl_vector_get_mean(vec_avg_dit);
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l00464"></a>00464     dit = cpl_table_get_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,status);
-<a name="l00465"></a>00465     cpl_vector_set(vec_adl,i,dit*med_dit);
-<a name="l00466"></a>00466     cpl_table_set_double(lin_tbl,<span class="stringliteral">"adl"</span>,i,dit*med_dit);
-<a name="l00467"></a>00467   }
-<a name="l00468"></a>00468  
-<a name="l00469"></a>00469   
-<a name="l00470"></a>00470   cpl_vector_delete(vec_dit);
-<a name="l00471"></a>00471   cpl_vector_delete(vec_adl);
-<a name="l00472"></a>00472   cpl_vector_delete(vec_avg);
-<a name="l00473"></a>00473   cpl_vector_delete(vec_med);
-<a name="l00474"></a>00474   cpl_vector_delete(vec_avg_dit);
-<a name="l00475"></a>00475   cpl_vector_delete(vec_med_dit);
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478   <span class="keywordflow">return</span> lin_tbl;
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480 }
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00492"></a>00492 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00493"></a><a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90">00493</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90" title="Apply the detector linearity correction.">irplib_detlin_correct</a>(
-<a name="l00494"></a>00494         cpl_imagelist       *   ilist,
-<a name="l00495"></a>00495         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_a,
-<a name="l00496"></a>00496         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_b,
-<a name="l00497"></a>00497         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_c)
-<a name="l00498"></a>00498 {
-<a name="l00499"></a>00499     cpl_image       *   ima ;
-<a name="l00500"></a>00500     cpl_image       *   imb ;
-<a name="l00501"></a>00501     cpl_image       *   imc ;
-<a name="l00502"></a>00502     <span class="keywordtype">float</span>           *   pima ;
-<a name="l00503"></a>00503     <span class="keywordtype">float</span>           *   pimb ;
-<a name="l00504"></a>00504     <span class="keywordtype">float</span>           *   pimc ;
-<a name="l00505"></a>00505     <span class="keywordtype">float</span>           *   pdata ;
-<a name="l00506"></a>00506     <span class="keywordtype">int</span>                 nx, ny, ni ; 
-<a name="l00507"></a>00507     <span class="keywordtype">double</span>              coeff_1, coeff_2, val ;
-<a name="l00508"></a>00508     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510     <span class="comment">/* Test entries */</span>
-<a name="l00511"></a>00511     <span class="keywordflow">if</span> (!ilist || !detlin_a || !detlin_b || !detlin_c) <span class="keywordflow">return</span> -1 ;
-<a name="l00512"></a>00512     
-<a name="l00513"></a>00513     <span class="comment">/* Load the 3 coeffs images */</span>
-<a name="l00514"></a>00514     ima = cpl_image_load(detlin_a, CPL_TYPE_FLOAT, 0, 0) ;
-<a name="l00515"></a>00515     imb = cpl_image_load(detlin_b, CPL_TYPE_FLOAT, 0, 0) ;
-<a name="l00516"></a>00516     imc = cpl_image_load(detlin_c, CPL_TYPE_FLOAT, 0, 0) ;
-<a name="l00517"></a>00517     <span class="keywordflow">if</span> (!ima || !imb || !imc) {
-<a name="l00518"></a>00518         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the detlin images"</span>) ;
-<a name="l00519"></a>00519         <span class="keywordflow">if</span> (ima) cpl_image_delete(ima) ;
-<a name="l00520"></a>00520         <span class="keywordflow">if</span> (imb) cpl_image_delete(imb) ;
-<a name="l00521"></a>00521         <span class="keywordflow">if</span> (imc) cpl_image_delete(imc) ;
-<a name="l00522"></a>00522         <span class="keywordflow">return</span> -1 ;
-<a name="l00523"></a>00523     }
-<a name="l00524"></a>00524     pima = cpl_image_get_data_float(ima) ;
-<a name="l00525"></a>00525     pimb = cpl_image_get_data_float(imb) ;
-<a name="l00526"></a>00526     pimc = cpl_image_get_data_float(imc) ;
-<a name="l00527"></a>00527     
-<a name="l00528"></a>00528     <span class="comment">/* Test sizes */</span>
-<a name="l00529"></a>00529     nx = cpl_image_get_size_x(cpl_imagelist_get(ilist, 0)) ;
-<a name="l00530"></a>00530     ny = cpl_image_get_size_y(cpl_imagelist_get(ilist, 0)) ;
-<a name="l00531"></a>00531     ni = cpl_imagelist_get_size(ilist) ;
-<a name="l00532"></a>00532     <span class="keywordflow">if</span> ((cpl_image_get_size_x(ima) != nx) ||
-<a name="l00533"></a>00533             (cpl_image_get_size_x(imb) != nx) ||
-<a name="l00534"></a>00534             (cpl_image_get_size_x(imc) != nx) ||
-<a name="l00535"></a>00535             (cpl_image_get_size_y(ima) != ny) ||
-<a name="l00536"></a>00536             (cpl_image_get_size_y(imb) != ny) ||
-<a name="l00537"></a>00537             (cpl_image_get_size_y(imc) != ny)) {
-<a name="l00538"></a>00538         cpl_msg_error(cpl_func, <span class="stringliteral">"Incompatible sizes"</span>) ;
-<a name="l00539"></a>00539         cpl_image_delete(ima) ;
-<a name="l00540"></a>00540         cpl_image_delete(imb) ;
-<a name="l00541"></a>00541         cpl_image_delete(imc) ;
-<a name="l00542"></a>00542         <span class="keywordflow">return</span> -1 ;
-<a name="l00543"></a>00543     }
-<a name="l00544"></a>00544     
-<a name="l00545"></a>00545     <span class="comment">/* Loop on pixels */</span>
-<a name="l00546"></a>00546     <span class="keywordflow">for</span> (i=0 ; i<nx*ny ; i++) {
-<a name="l00547"></a>00547         <span class="comment">/* Compute the coefficients */</span>
-<a name="l00548"></a>00548         <span class="keywordflow">if</span> (fabs(pima[i]) < 1e-30) {
-<a name="l00549"></a>00549             coeff_1 = coeff_2 = (double)0.0 ;
-<a name="l00550"></a>00550         } <span class="keywordflow">else</span> {
-<a name="l00551"></a>00551             coeff_1 = (double)pimb[i] / (<span class="keywordtype">double</span>)pima[i] ;
-<a name="l00552"></a>00552             coeff_2 = (double)pimc[i] / (<span class="keywordtype">double</span>)pima[i] ;
-<a name="l00553"></a>00553         }
-<a name="l00554"></a>00554         <span class="comment">/* Correct this pixel in each plane */</span>
-<a name="l00555"></a>00555         <span class="keywordflow">for</span> (j=0 ; j<ni ; j++) {
-<a name="l00556"></a>00556             pdata = cpl_image_get_data_float(cpl_imagelist_get(ilist, j)) ;
-<a name="l00557"></a>00557             val = (double)pdata[i] ;
-<a name="l00558"></a>00558             pdata[i]=(float)(val+coeff_1*val*val+coeff_2*val*val*val) ;
-<a name="l00559"></a>00559         }
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561     <span class="comment">/* Free and return */</span>
-<a name="l00562"></a>00562     cpl_image_delete(ima) ;
-<a name="l00563"></a>00563     cpl_image_delete(imb) ;
-<a name="l00564"></a>00564     cpl_image_delete(imc) ;
-<a name="l00565"></a>00565     <span class="keywordflow">return</span> 0 ;
-<a name="l00566"></a>00566 }
-<a name="l00567"></a>00567  
-<a name="l00568"></a>00568 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00577"></a>00577 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00578"></a><a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde">00578</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde" title="Apply the calibration to the frames.">irplib_flat_dark_bpm_calib</a>(
-<a name="l00579"></a>00579         cpl_imagelist       *   ilist,
-<a name="l00580"></a>00580         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   flat,
-<a name="l00581"></a>00581         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   dark,
-<a name="l00582"></a>00582         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   bpm)
-<a name="l00583"></a>00583 {
-<a name="l00584"></a>00584     cpl_image       *   dark_image ;
-<a name="l00585"></a>00585     cpl_image       *   flat_image ;
-<a name="l00586"></a>00586     cpl_mask        *   bpm_im_bin ;
-<a name="l00587"></a>00587     cpl_image       *   bpm_im_int ;
-<a name="l00588"></a>00588     <span class="keywordtype">int</span>                 i ;
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590     <span class="comment">/* Test entries */</span>
-<a name="l00591"></a>00591     <span class="keywordflow">if</span> (ilist == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593     <span class="comment">/* Dark correction */</span>
-<a name="l00594"></a>00594     <span class="keywordflow">if</span> (dark != NULL) {
-<a name="l00595"></a>00595         cpl_msg_info(cpl_func, <span class="stringliteral">"Subtract the dark to the images"</span>) ;
-<a name="l00596"></a>00596         <span class="comment">/* Load the dark image */</span>
-<a name="l00597"></a>00597         <span class="keywordflow">if</span> ((dark_image = cpl_image_load(dark, CPL_TYPE_FLOAT, 0, 0)) == NULL) {
-<a name="l00598"></a>00598             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the dark %s"</span>, dark) ;
-<a name="l00599"></a>00599             <span class="keywordflow">return</span> -1 ;
-<a name="l00600"></a>00600         }
-<a name="l00601"></a>00601         <span class="comment">/* Apply the dark correction to the images */</span>
-<a name="l00602"></a>00602         <span class="keywordflow">if</span> (cpl_imagelist_subtract_image(ilist, dark_image)!=CPL_ERROR_NONE) {
-<a name="l00603"></a>00603             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the dark to the images"</span>) ;
-<a name="l00604"></a>00604             cpl_image_delete(dark_image) ;
-<a name="l00605"></a>00605             <span class="keywordflow">return</span> -1 ;
-<a name="l00606"></a>00606         }
-<a name="l00607"></a>00607         cpl_image_delete(dark_image) ;
-<a name="l00608"></a>00608     }
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     <span class="comment">/* Flat-field correction */</span>
-<a name="l00611"></a>00611     <span class="keywordflow">if</span> (flat != NULL) {
-<a name="l00612"></a>00612         cpl_msg_info(cpl_func, <span class="stringliteral">"Divide the images by the flatfield"</span>) ;
-<a name="l00613"></a>00613         <span class="comment">/* Load the flat image */</span>
-<a name="l00614"></a>00614         <span class="keywordflow">if</span> ((flat_image = cpl_image_load(flat, CPL_TYPE_FLOAT, 0, 0)) == NULL) {
-<a name="l00615"></a>00615             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the flat field %s"</span>, flat) ;
-<a name="l00616"></a>00616             <span class="keywordflow">return</span> -1 ;
-<a name="l00617"></a>00617         }
-<a name="l00618"></a>00618         <span class="comment">/* Apply the flatfield correction to the images */</span>
-<a name="l00619"></a>00619         <span class="keywordflow">if</span> (cpl_imagelist_divide_image(ilist, flat_image)!=CPL_ERROR_NONE) {
-<a name="l00620"></a>00620             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the flatfield to the images"</span>) ;
-<a name="l00621"></a>00621             cpl_image_delete(flat_image) ;
-<a name="l00622"></a>00622             <span class="keywordflow">return</span> -1 ;
-<a name="l00623"></a>00623         }
-<a name="l00624"></a>00624         cpl_image_delete(flat_image) ;
-<a name="l00625"></a>00625     }
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627     <span class="comment">/* Correct the bad pixels if requested */</span>
-<a name="l00628"></a>00628     <span class="keywordflow">if</span> (bpm != NULL) {
-<a name="l00629"></a>00629         cpl_msg_info(cpl_func, <span class="stringliteral">"Correct the bad pixels in the images"</span>) ;
-<a name="l00630"></a>00630          <span class="comment">/* Load the bad pixels image */</span>
-<a name="l00631"></a>00631         <span class="keywordflow">if</span> ((bpm_im_int = cpl_image_load(bpm, CPL_TYPE_INT, 0, 0)) == NULL) {
-<a name="l00632"></a>00632             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the bad pixel map %s"</span>, bpm) ;
-<a name="l00633"></a>00633             <span class="keywordflow">return</span> -1 ;
-<a name="l00634"></a>00634         }
-<a name="l00635"></a>00635         <span class="comment">/* Convert the map from integer to binary */</span>
-<a name="l00636"></a>00636         bpm_im_bin = cpl_mask_threshold_image_create(bpm_im_int, -0.5, 0.5) ;
-<a name="l00637"></a>00637         cpl_mask_not(bpm_im_bin) ;
-<a name="l00638"></a>00638         cpl_image_delete(bpm_im_int) ;
-<a name="l00639"></a>00639         <span class="comment">/* Apply the bad pixels cleaning */</span>
-<a name="l00640"></a>00640         <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(ilist) ; i++) {
-<a name="l00641"></a>00641             cpl_image_reject_from_mask(cpl_imagelist_get(ilist, i), bpm_im_bin);
-<a name="l00642"></a>00642             <span class="keywordflow">if</span> (cpl_detector_interpolate_rejected(
-<a name="l00643"></a>00643                         cpl_imagelist_get(ilist, i)) != CPL_ERROR_NONE) {
-<a name="l00644"></a>00644                 cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot clean the bad pixels in obj %d"</span>,
-<a name="l00645"></a>00645                         i+1);
-<a name="l00646"></a>00646                 cpl_mask_delete(bpm_im_bin) ;
-<a name="l00647"></a>00647                 <span class="keywordflow">return</span> -1 ;
-<a name="l00648"></a>00648             }
-<a name="l00649"></a>00649         }
-<a name="l00650"></a>00650         cpl_mask_delete(bpm_im_bin) ;
-<a name="l00651"></a>00651     }
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653     <span class="comment">/* Return */</span>
-<a name="l00654"></a>00654     <span class="keywordflow">return</span> 0 ;
-<a name="l00655"></a>00655 }
-<a name="l00656"></a>00656 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_calib.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_calib.c,v 1.19 2013/03/01 10:26:22 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/03/01 10:26:22 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.19 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_calib.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">static</span> <span class="keywordtype">int</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> irplib_get_clean_mean_window(cpl_image* img, </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> llx, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> lly, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                              <span class="keywordtype">double</span>* clean_mean, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                              <span class="keywordtype">double</span>* clean_stdev);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMESET_GET       cpl_frameset_get_position</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="comment">/* Remove this branch once CPL versions less than 6.3 are no longer supported */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define IRPLIB_FRAMESET_GET       cpl_frameset_get_frame</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">static</span> <span class="keywordtype">int</span>  </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> irplib_get_clean_mean_window(cpl_image* img, </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> llx, </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> lly, </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury, </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                              <span class="keywordtype">double</span>* clean_mean, </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                              <span class="keywordtype">double</span>* clean_stdev)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">double</span> stdev=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">double</span> threshold=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">double</span> lo_cut=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">double</span> hi_cut=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   cpl_mask* mask=NULL;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cpl_image* tmp=NULL;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_stats* stats=NULL;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   tmp=cpl_image_extract(img,llx,lly,urx,ury);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   cpl_image_accept_all(tmp);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordflow">for</span>(i=0;i<nclip;i++) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     cpl_stats_delete(stats);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     stats = cpl_stats_new_from_image(tmp, CPL_STATS_MEAN | CPL_STATS_STDEV);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     mean = cpl_stats_get_mean(stats);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     stdev = cpl_stats_get_stdev(stats);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     threshold=kappa*stdev;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     lo_cut=mean-threshold;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     hi_cut=mean+threshold;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_image_accept_all(tmp);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     mask=cpl_mask_threshold_image_create(tmp,lo_cut,hi_cut);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_mask_not(mask);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     cpl_image_reject_from_mask(tmp,mask);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     cpl_mask_delete(mask);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   *clean_mean=mean;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   *clean_stdev=stdev;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   cpl_image_delete(tmp);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_stats_delete(stats);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> cpl_table* </div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9">  191</a></span> <a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9" title="Computes the detector's gain.">irplib_compute_gain</a>(</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                 cpl_frameset* son, </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                 cpl_frameset* sof, </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                 <span class="keywordtype">int</span>* zone,   </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> nclip)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   cpl_frame*    frm=NULL;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_image* img_on1=NULL;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   cpl_image* img_on2=NULL;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   cpl_image* img_on_dif=NULL;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   cpl_image* img_of1=NULL;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   cpl_image* img_of2=NULL;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   cpl_image* img_of_dif=NULL;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   cpl_table* res_tbl=NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_vector* dit_on=NULL;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   cpl_vector* dit_of=NULL;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   cpl_vector* exptime_on=NULL;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   cpl_vector* exptime_of=NULL;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordtype">int</span> nof=0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordtype">int</span> nfr=0;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordtype">int</span> llx;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordtype">int</span> lly;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordtype">int</span> urx;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordtype">int</span> ury;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordtype">double</span> avg_on1=0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordtype">double</span> avg_on2=0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordtype">double</span> avg_of1=0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordtype">double</span> avg_of2=0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordtype">double</span> avg_on_dif=0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordtype">double</span> avg_of_dif=0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordtype">double</span> std=0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordtype">double</span> sig_on_dif=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">double</span> sig_of_dif=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordtype">double</span> gain=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">double</span> dit_ref=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordtype">double</span> dit_tmp=0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordtype">double</span> exptime_ref=0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordtype">double</span> exptime_tmp=0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>  </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   non = cpl_frameset_get_size(son);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   nof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   nfr = (non <= nof) ? non : nof;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   dit_on=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   dit_of=cpl_vector_new(nfr);  </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   exptime_on=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   exptime_of=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     frm=IRPLIB_FRAMESET_GET(son,i);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     dit_ref=irplib_pfits_get_dit(plist);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     exptime_ref=(double)irplib_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     cpl_vector_set(dit_on,i,dit_ref);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     cpl_vector_set(exptime_on,i,exptime_ref);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     frm=IRPLIB_FRAMESET_GET(sof,i);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     dit_ref=irplib_pfits_get_dit(plist);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     exptime_ref=(double)irplib_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     cpl_vector_set(dit_of,i,dit_ref);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cpl_vector_set(exptime_of,i,exptime_ref);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   llx=zone[0];</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   lly=zone[1];</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   urx=zone[2];</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   ury=zone[3];</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   res_tbl=cpl_table_new(nfr);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   cpl_table_new_column(res_tbl,<span class="stringliteral">"adu"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   cpl_table_new_column(res_tbl,<span class="stringliteral">"gain"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>  </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     frm=IRPLIB_FRAMESET_GET(son,i);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     img_on1=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     frm=IRPLIB_FRAMESET_GET(sof,i);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     img_of1=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     dit_ref=cpl_vector_get(dit_on,i);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     exptime_ref=cpl_vector_get(exptime_on,i);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>    </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">for</span>(m=0;m<nfr; m++) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>       <span class="keywordflow">if</span>(m != i) {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     frm=IRPLIB_FRAMESET_GET(son,m);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     dit_tmp=cpl_vector_get(dit_on,m);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     exptime_tmp=cpl_vector_get(exptime_on,m);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordflow">if</span>(dit_tmp == dit_ref && exptime_tmp == exptime_ref) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       img_on2=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       frm=IRPLIB_FRAMESET_GET(sof,m);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       img_of2=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       img_on_dif=cpl_image_subtract_create(img_on1,img_on2);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       img_of_dif=cpl_image_subtract_create(img_of1,img_of2);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>       irplib_get_clean_mean_window(img_on1,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                                       nclip,&avg_on1,&std);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       irplib_get_clean_mean_window(img_on2,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                                       nclip,&avg_on2,&std);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       irplib_get_clean_mean_window(img_of1,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                                       nclip,&avg_of1,&std);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       irplib_get_clean_mean_window(img_of2,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                       nclip,&avg_of2,&std);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       irplib_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                                       nclip,&avg_on_dif,&sig_on_dif);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       irplib_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                       nclip,&avg_of_dif,&sig_of_dif);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       cpl_image_delete(img_on2);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       cpl_image_delete(img_of2);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       cpl_image_delete(img_on_dif);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       cpl_image_delete(img_of_dif);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>           gain=((avg_on1+avg_on2)-(avg_of1+avg_of2))/</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                ((sig_on_dif*sig_on_dif)-(sig_of_dif*sig_of_dif));</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>           cpl_table_set_double(res_tbl,<span class="stringliteral">"gain"</span>,m,gain);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>           cpl_table_set_double(res_tbl,<span class="stringliteral">"adu"</span>,m,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                                ((avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     cpl_image_delete(img_on1);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     cpl_image_delete(img_of1);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   }</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   cpl_vector_delete(dit_on);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   cpl_vector_delete(dit_of);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   cpl_vector_delete(exptime_on);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   cpl_vector_delete(exptime_of);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="keywordflow">return</span> res_tbl;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">/* --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a">  372</a></span> cpl_table* <a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a" title="Computes the detector's linearity.">irplib_compute_linearity</a>(cpl_frameset* son, cpl_frameset* sof)</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   cpl_frame*    frm=NULL;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">int</span>* status=0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordtype">int</span> nof=0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordtype">int</span> nfr=0;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="keywordtype">double</span> med_on=0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   <span class="keywordtype">double</span> avg_on=0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   <span class="keywordtype">double</span> med_of=0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="keywordtype">double</span> avg_of=0;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keywordtype">double</span> med_dit=0;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordtype">double</span> avg_dit=0;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   cpl_vector* vec_adl=NULL;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   cpl_vector* vec_dit=NULL;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   cpl_vector* vec_avg=NULL;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   cpl_vector* vec_med=NULL;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   cpl_vector* vec_avg_dit=NULL;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   cpl_vector* vec_med_dit=NULL;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   <span class="keywordtype">double</span> dit=0;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   cpl_table* lin_tbl=NULL;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>  </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   non = cpl_frameset_get_size(son);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   nof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   nfr = (non <= nof) ? non : nof;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   lin_tbl=cpl_table_new(nfr);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"med"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"med_dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg_dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   vec_med=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   vec_avg=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   vec_med_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   vec_avg_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   vec_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   vec_adl=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     frm=IRPLIB_FRAMESET_GET(son,i);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     med_on=cpl_image_get_median(img);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     avg_on=cpl_image_get_mean(img);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     cpl_image_delete(img);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     frm=IRPLIB_FRAMESET_GET(sof,i);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     name=cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     med_of=cpl_image_get_median(img);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     avg_of=cpl_image_get_mean(img);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     cpl_image_delete(img);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     med=med_on-med_of;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     avg=avg_on-avg_of;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     dit=(double)irplib_pfits_get_dit(plist);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     avg_dit=avg/dit;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     med_dit=med/dit;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     cpl_vector_set(vec_dit,i,dit);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     cpl_vector_set(vec_avg,i,avg);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     cpl_vector_set(vec_med,i,med);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     cpl_vector_set(vec_avg_dit,i,avg_dit);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     cpl_vector_set(vec_med_dit,i,med_dit);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,dit);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"med"</span>,i,med);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg"</span>,i,avg);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"med_dit"</span>,i,med_dit);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg_dit"</span>,i,avg_dit);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   cpl_table_new_column(lin_tbl,<span class="stringliteral">"adl"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   med_dit=cpl_vector_get_mean(vec_med_dit);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   avg_dit=cpl_vector_get_mean(vec_avg_dit);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     dit = cpl_table_get_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,status);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     cpl_vector_set(vec_adl,i,dit*med_dit);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     cpl_table_set_double(lin_tbl,<span class="stringliteral">"adl"</span>,i,dit*med_dit);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   }</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>  </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   cpl_vector_delete(vec_dit);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   cpl_vector_delete(vec_adl);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   cpl_vector_delete(vec_avg);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   cpl_vector_delete(vec_med);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   cpl_vector_delete(vec_avg_dit);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   cpl_vector_delete(vec_med_dit);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   <span class="keywordflow">return</span> lin_tbl;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90">  493</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90" title="Apply the detector linearity correction.">irplib_detlin_correct</a>(</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         cpl_imagelist       *   ilist,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_a,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_b,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   detlin_c)</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     cpl_image       *   ima ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     cpl_image       *   imb ;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     cpl_image       *   imc ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <span class="keywordtype">float</span>           *   pima ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <span class="keywordtype">float</span>           *   pimb ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">float</span>           *   pimc ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordtype">float</span>           *   pdata ;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordtype">int</span>                 nx, ny, ni ; </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordtype">double</span>              coeff_1, coeff_2, val ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     <span class="keywordflow">if</span> (!ilist || !detlin_a || !detlin_b || !detlin_c) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="comment">/* Load the 3 coeffs images */</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     ima = cpl_image_load(detlin_a, CPL_TYPE_FLOAT, 0, 0) ;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     imb = cpl_image_load(detlin_b, CPL_TYPE_FLOAT, 0, 0) ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     imc = cpl_image_load(detlin_c, CPL_TYPE_FLOAT, 0, 0) ;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="keywordflow">if</span> (!ima || !imb || !imc) {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the detlin images"</span>) ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>         <span class="keywordflow">if</span> (ima) cpl_image_delete(ima) ;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         <span class="keywordflow">if</span> (imb) cpl_image_delete(imb) ;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         <span class="keywordflow">if</span> (imc) cpl_image_delete(imc) ;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     pima = cpl_image_get_data_float(ima) ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     pimb = cpl_image_get_data_float(imb) ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     pimc = cpl_image_get_data_float(imc) ;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     <span class="comment">/* Test sizes */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     nx = cpl_image_get_size_x(cpl_imagelist_get(ilist, 0)) ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     ny = cpl_image_get_size_y(cpl_imagelist_get(ilist, 0)) ;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     ni = cpl_imagelist_get_size(ilist) ;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="keywordflow">if</span> ((cpl_image_get_size_x(ima) != nx) ||</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>             (cpl_image_get_size_x(imb) != nx) ||</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>             (cpl_image_get_size_x(imc) != nx) ||</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>             (cpl_image_get_size_y(ima) != ny) ||</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>             (cpl_image_get_size_y(imb) != ny) ||</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>             (cpl_image_get_size_y(imc) != ny)) {</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Incompatible sizes"</span>) ;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>         cpl_image_delete(ima) ;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         cpl_image_delete(imb) ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         cpl_image_delete(imc) ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <span class="comment">/* Loop on pixels */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordflow">for</span> (i=0 ; i<nx*ny ; i++) {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         <span class="comment">/* Compute the coefficients */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         <span class="keywordflow">if</span> (fabs(pima[i]) < 1e-30) {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             coeff_1 = coeff_2 = (double)0.0 ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             coeff_1 = (double)pimb[i] / (<span class="keywordtype">double</span>)pima[i] ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>             coeff_2 = (double)pimc[i] / (<span class="keywordtype">double</span>)pima[i] ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         }</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         <span class="comment">/* Correct this pixel in each plane */</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         <span class="keywordflow">for</span> (j=0 ; j<ni ; j++) {</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>             pdata = cpl_image_get_data_float(cpl_imagelist_get(ilist, j)) ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             val = (double)pdata[i] ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             pdata[i]=(float)(val+coeff_1*val*val+coeff_2*val*val*val) ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     cpl_image_delete(ima) ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     cpl_image_delete(imb) ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     cpl_image_delete(imc) ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>  </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde">  578</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde" title="Apply the calibration to the frames.">irplib_flat_dark_bpm_calib</a>(</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         cpl_imagelist       *   ilist,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   flat,</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   dark,</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   bpm)</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     cpl_image       *   dark_image ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     cpl_image       *   flat_image ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     cpl_mask        *   bpm_im_bin ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     cpl_image       *   bpm_im_int ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="keywordflow">if</span> (ilist == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="comment">/* Dark correction */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="keywordflow">if</span> (dark != NULL) {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         cpl_msg_info(cpl_func, <span class="stringliteral">"Subtract the dark to the images"</span>) ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>         <span class="comment">/* Load the dark image */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <span class="keywordflow">if</span> ((dark_image = cpl_image_load(dark, CPL_TYPE_FLOAT, 0, 0)) == NULL) {</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the dark %s"</span>, dark) ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         <span class="comment">/* Apply the dark correction to the images */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="keywordflow">if</span> (cpl_imagelist_subtract_image(ilist, dark_image)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the dark to the images"</span>) ;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>             cpl_image_delete(dark_image) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>         cpl_image_delete(dark_image) ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     }</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     <span class="comment">/* Flat-field correction */</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     <span class="keywordflow">if</span> (flat != NULL) {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>         cpl_msg_info(cpl_func, <span class="stringliteral">"Divide the images by the flatfield"</span>) ;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>         <span class="comment">/* Load the flat image */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         <span class="keywordflow">if</span> ((flat_image = cpl_image_load(flat, CPL_TYPE_FLOAT, 0, 0)) == NULL) {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the flat field %s"</span>, flat) ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         <span class="comment">/* Apply the flatfield correction to the images */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         <span class="keywordflow">if</span> (cpl_imagelist_divide_image(ilist, flat_image)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the flatfield to the images"</span>) ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>             cpl_image_delete(flat_image) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>         cpl_image_delete(flat_image) ;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     }</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     <span class="comment">/* Correct the bad pixels if requested */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <span class="keywordflow">if</span> (bpm != NULL) {</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         cpl_msg_info(cpl_func, <span class="stringliteral">"Correct the bad pixels in the images"</span>) ;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>          <span class="comment">/* Load the bad pixels image */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         <span class="keywordflow">if</span> ((bpm_im_int = cpl_image_load(bpm, CPL_TYPE_INT, 0, 0)) == NULL) {</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the bad pixel map %s"</span>, bpm) ;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         }</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>         <span class="comment">/* Convert the map from integer to binary */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         bpm_im_bin = cpl_mask_threshold_image_create(bpm_im_int, -0.5, 0.5) ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         cpl_mask_not(bpm_im_bin) ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         cpl_image_delete(bpm_im_int) ;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         <span class="comment">/* Apply the bad pixels cleaning */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>         <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(ilist) ; i++) {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>             cpl_image_reject_from_mask(cpl_imagelist_get(ilist, i), bpm_im_bin);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             <span class="keywordflow">if</span> (cpl_detector_interpolate_rejected(</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                         cpl_imagelist_get(ilist, i)) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot clean the bad pixels in obj %d"</span>,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                         i+1);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                 cpl_mask_delete(bpm_im_bin) ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>             }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         }</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         cpl_mask_delete(bpm_im_bin) ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> }</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__calib_8h_source.html b/html/irplib__calib_8h_source.html
index 2c4733c..235313d 100644
--- a/html/irplib__calib_8h_source.html
+++ b/html/irplib__calib_8h_source.html
@@ -2,64 +2,95 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_calib.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_calib.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_calib.h,v 1.8 2007/02/12 10:34:51 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/02/12 10:34:51 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_CALIB_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CALIB_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 cpl_table*
-<a name="l00037"></a>00037 <a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9" title="Computes the detector&#39;s gain.">irplib_compute_gain</a>(
-<a name="l00038"></a>00038                 cpl_frameset* son, 
-<a name="l00039"></a>00039                 cpl_frameset* sof, 
-<a name="l00040"></a>00040                 <span class="keywordtype">int</span>* zone1, 
-<a name="l00041"></a>00041                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa1,
-<a name="l00042"></a>00042                 <span class="keyword">const</span> <span class="keywordtype">int</span> nclip1);
-<a name="l00043"></a>00043 cpl_table* <a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a" title="Computes the detector&#39;s linearity.">irplib_compute_linearity</a>(cpl_frameset* son, cpl_frameset* sof);
-<a name="l00044"></a>00044 <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde" title="Apply the calibration to the frames.">irplib_flat_dark_bpm_calib</a>(cpl_imagelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00045"></a>00045                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00046"></a>00046 <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90" title="Apply the detector linearity correction.">irplib_detlin_correct</a>(cpl_imagelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00047"></a>00047                           <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_calib.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_calib.h,v 1.8 2007/02/12 10:34:51 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/02/12 10:34:51 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_CALIB_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CALIB_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> cpl_table*</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <a class="code" href="group__irplib__calib.html#ga98c9970b59c6b7919f531829f6f5dab9" title="Computes the detector's gain.">irplib_compute_gain</a>(</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>                 cpl_frameset* son, </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>                 cpl_frameset* sof, </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>                 <span class="keywordtype">int</span>* zone1, </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa1,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> nclip1);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> cpl_table* <a class="code" href="group__irplib__calib.html#gadefee4e970a548c25bcbb42797778a2a" title="Computes the detector's linearity.">irplib_compute_linearity</a>(cpl_frameset* son, cpl_frameset* sof);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae650a3e54e1aff329b1b5ee356bcdbde" title="Apply the calibration to the frames.">irplib_flat_dark_bpm_calib</a>(cpl_imagelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__calib.html#gae9b762625dbd2c31c1b59cfd8c15fd90" title="Apply the detector linearity correction.">irplib_detlin_correct</a>(cpl_imagelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                           <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__cat_8c_source.html b/html/irplib__cat_8c_source.html
index 293be42..75a904a 100644
--- a/html/irplib__cat_8c_source.html
+++ b/html/irplib__cat_8c_source.html
@@ -2,414 +2,445 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_cat.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_cat.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_cat.c,v 1.10 2009/12/01 12:34:25 cgarcia Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: cgarcia $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/12/01 12:34:25 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include "irplib_cat.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_wcs.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#define FILENAME_SZBUF 1024</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00053"></a>00053 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keywordtype">int</span> <a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200" title="Find the name of the standard catalogue being used and its location.">irplib_2mass_get_catpars</a>
-<a name="l00075"></a><a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200">00075</a> (<span class="keyword">const</span> cpl_frame *  master_index,
-<a name="l00076"></a>00076  <span class="keywordtype">char</span>            ** catpath,
-<a name="l00077"></a>00077  <span class="keywordtype">char</span>            ** catname)
-<a name="l00078"></a>00078 {
-<a name="l00079"></a>00079     cpl_propertylist * p;
-<a name="l00080"></a>00080     <span class="keyword">const</span> <span class="keywordtype">char</span>       * unk = <span class="stringliteral">"unknown"</span>;
-<a name="l00081"></a>00081     <span class="keywordtype">char</span>             * fname;
-<a name="l00082"></a>00082     <span class="keywordtype">int</span>                status = CPL_ERROR_NONE;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084     <span class="comment">/* Initialise a few things */</span>
-<a name="l00085"></a>00085     *catpath = NULL;
-<a name="l00086"></a>00086     *catname = NULL;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     <span class="comment">/* First get the full path to the index file and make sure it exists */</span>
-<a name="l00089"></a>00089     fname = cpl_strdup(cpl_frame_get_filename(master_index));
-<a name="l00090"></a>00090     <span class="keywordflow">if</span> (access((<span class="keyword">const</span> <span class="keywordtype">char</span> *)fname,R_OK) != 0)
-<a name="l00091"></a>00091     {
-<a name="l00092"></a>00092          cpl_msg_error(__func__,<span class="stringliteral">"Can't access index file %s"</span>,fname);
-<a name="l00093"></a>00093          cpl_free(fname);
-<a name="l00094"></a>00094          <span class="keywordflow">return</span> CPL_ERROR_FILE_IO;
-<a name="l00095"></a>00095     }
-<a name="l00096"></a>00096     *catpath = cpl_strdup(dirname(fname));
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     <span class="comment">/* Try to load the propertylist. If it is not possible signal a fatal</span>
-<a name="l00099"></a>00099 <span class="comment">       error since this probably means the whole file is messed up */</span>
-<a name="l00100"></a>00100     <span class="keywordflow">if</span> ((p = cpl_propertylist_load(cpl_frame_get_filename(master_index),0)) == NULL)
-<a name="l00101"></a>00101     {
-<a name="l00102"></a>00102         cpl_msg_error(__func__,<span class="stringliteral">"Can't load index file header %s"</span>,fname);
-<a name="l00103"></a>00103         cpl_free(*catpath);
-<a name="l00104"></a>00104         cpl_free(fname);
-<a name="l00105"></a>00105         <span class="keywordflow">return</span> CPL_ERROR_FILE_IO;
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     <span class="comment">/* If there is a catalogue name in the header then send it back. If there</span>
-<a name="l00109"></a>00109 <span class="comment">       isn't then give a default name and send a warning */</span>
-<a name="l00110"></a>00110     <span class="keywordflow">if</span> (cpl_propertylist_has(p,<span class="stringliteral">"CATNAME"</span>))
-<a name="l00111"></a>00111     {
-<a name="l00112"></a>00112         *catname = cpl_strdup(cpl_propertylist_get_string(p,<span class="stringliteral">"CATNAME"</span>));
-<a name="l00113"></a>00113         status = CPL_ERROR_NONE;
-<a name="l00114"></a>00114     } <span class="keywordflow">else</span> {
-<a name="l00115"></a>00115         *catname = cpl_strdup(unk);
-<a name="l00116"></a>00116         cpl_msg_warning(__func__,<span class="stringliteral">"Property CATNAME not in index file header %s"</span>,
-<a name="l00117"></a>00117                         fname);
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     <span class="comment">/* Free and return */</span>
-<a name="l00121"></a>00121     cpl_free(fname);
-<a name="l00122"></a>00122     cpl_propertylist_delete(p);
-<a name="l00123"></a>00123     <span class="keywordflow">return</span>(status);
-<a name="l00124"></a>00124 }
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00151"></a>00151 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 cpl_error_code <a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af" title="Get coverage in ra, dec of a frame.">irplib_cat_get_image_limits</a>
-<a name="l00154"></a><a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af">00154</a> (<span class="keyword">const</span> cpl_wcs    * wcs,
-<a name="l00155"></a>00155  <span class="keywordtype">float</span>              ext_search,
-<a name="l00156"></a>00156  <span class="keywordtype">double</span>           * ra1,
-<a name="l00157"></a>00157  <span class="keywordtype">double</span>           * ra2,
-<a name="l00158"></a>00158  <span class="keywordtype">double</span>           * dec1,
-<a name="l00159"></a>00159  <span class="keywordtype">double</span>           * dec2)
-<a name="l00160"></a>00160 {
-<a name="l00161"></a>00161     <span class="keywordtype">double</span>            ra;
-<a name="l00162"></a>00162     <span class="keywordtype">double</span>            dec;
-<a name="l00163"></a>00163     <span class="keywordtype">double</span>            x;
-<a name="l00164"></a>00164     <span class="keywordtype">double</span>            y;
-<a name="l00165"></a>00165     <span class="keywordtype">double</span>            dra;
-<a name="l00166"></a>00166     <span class="keywordtype">double</span>            ddec;
-<a name="l00167"></a>00167     <span class="keywordtype">double</span>            min_4q;
-<a name="l00168"></a>00168     <span class="keywordtype">double</span>            max_1q;
-<a name="l00169"></a>00169     <span class="keywordtype">int</span>               first_quad;
-<a name="l00170"></a>00170     <span class="keywordtype">int</span>               fourth_quad;
-<a name="l00171"></a>00171     <span class="keyword">const</span> <span class="keywordtype">int</span>       * naxes;
-<a name="l00172"></a>00172     <span class="keywordtype">long</span>              i;
-<a name="l00173"></a>00173     <span class="keywordtype">long</span>              j;
-<a name="l00174"></a>00174     <span class="keyword">const</span> cpl_array * a;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="comment">/* Initialise these in case of failure later*/</span>
-<a name="l00177"></a>00177     *ra1 = 0.0;
-<a name="l00178"></a>00178     *ra2 = 0.0;
-<a name="l00179"></a>00179     *dec1 = 0.0;
-<a name="l00180"></a>00180     *dec2 = 0.0;
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="comment">/* Grab the WCS info from the property list */</span>
-<a name="l00183"></a>00183     <span class="keywordflow">if</span> (wcs == NULL)
-<a name="l00184"></a>00184         <span class="keywordflow">return</span> CPL_ERROR_DATA_NOT_FOUND;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     <span class="comment">/* Get the size of the data array */</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     a = cpl_wcs_get_image_dims(wcs);
-<a name="l00189"></a>00189     <span class="keywordflow">if</span>(a == NULL)
-<a name="l00190"></a>00190         <span class="keywordflow">return</span> CPL_ERROR_ILLEGAL_INPUT;
-<a name="l00191"></a>00191     naxes = cpl_array_get_data_int_const(a);
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="comment">/* Find the RA and Dec limits of the image */</span>
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     *ra1 = 370.0;
-<a name="l00196"></a>00196     *ra2 = -370.0;
-<a name="l00197"></a>00197     *dec1 = 95.0;
-<a name="l00198"></a>00198     *dec2 = -95.0;
-<a name="l00199"></a>00199     first_quad = 0;
-<a name="l00200"></a>00200     fourth_quad = 0;
-<a name="l00201"></a>00201     min_4q = 370.0;
-<a name="l00202"></a>00202     max_1q = 0.0;
-<a name="l00203"></a>00203     <span class="keywordflow">for</span> (j = 1; j < naxes[1]; j += 10) {
-<a name="l00204"></a>00204         y = (double)j;
-<a name="l00205"></a>00205         <span class="keywordflow">for</span> (i = 1; i < naxes[0]; i += 10) {
-<a name="l00206"></a>00206             x = (double)i;
-<a name="l00207"></a>00207             irplib_wcs_xytoradec(wcs,x,y,&ra,&dec);
-<a name="l00208"></a>00208             <span class="keywordflow">if</span> (ra >= 0.0 && ra <= 90.0) {
-<a name="l00209"></a>00209                 first_quad = 1;
-<a name="l00210"></a>00210                 <span class="keywordflow">if</span>(ra > max_1q)
-<a name="l00211"></a>00211                     max_1q = ra;
-<a name="l00212"></a>00212             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ra >= 270.0 && ra <= 360.0) {
-<a name="l00213"></a>00213                 fourth_quad = 1;
-<a name="l00214"></a>00214                 <span class="keywordflow">if</span>(ra - 360.0 < min_4q)
-<a name="l00215"></a>00215                     min_4q = ra - 360.0;
-<a name="l00216"></a>00216             }
-<a name="l00217"></a>00217             <span class="keywordflow">if</span>(ra < *ra1)
-<a name="l00218"></a>00218                 *ra1 = ra;
-<a name="l00219"></a>00219             <span class="keywordflow">if</span>(ra > *ra2)
-<a name="l00220"></a>00220                 *ra2 = ra;
-<a name="l00221"></a>00221             <span class="keywordflow">if</span>(dec < *dec1)
-<a name="l00222"></a>00222                 *dec1 = dec;
-<a name="l00223"></a>00223             <span class="keywordflow">if</span>(dec > *dec2)
-<a name="l00224"></a>00224                 *dec2 = dec;
-<a name="l00225"></a>00225         }
-<a name="l00226"></a>00226     }
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228     <span class="comment">/* Now have a look to see if you had RA values in both the first and</span>
-<a name="l00229"></a>00229 <span class="comment">       fourth quadrants.  If you have, then make the minimum RA a negative</span>
-<a name="l00230"></a>00230 <span class="comment">       value.  This will be the signal to the caller that you have the</span>
-<a name="l00231"></a>00231 <span class="comment">       wraparound... */</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     <span class="keywordflow">if</span> (first_quad && fourth_quad) {
-<a name="l00234"></a>00234         *ra1 = min_4q;
-<a name="l00235"></a>00235         *ra2 = max_1q;
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     <span class="comment">/* Pad out search a bit */</span>
-<a name="l00239"></a>00239     <span class="keywordflow">if</span> (ext_search)
-<a name="l00240"></a>00240     {
-<a name="l00241"></a>00241         dra = 0.5*ext_search*(*ra2 - *ra1);
-<a name="l00242"></a>00242         *ra1 -= dra;
-<a name="l00243"></a>00243         *ra2 += dra;
-<a name="l00244"></a>00244         ddec = 0.5*ext_search*(*dec2 - *dec1);
-<a name="l00245"></a>00245         *dec1 -= ddec;
-<a name="l00246"></a>00246         *dec2 += ddec;
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     <span class="comment">/* Exit */</span>
-<a name="l00250"></a>00250     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00251"></a>00251 }
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00277"></a>00277 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 cpl_table *  <a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6" title="Extract standards from the 2mass catalogue.">irplib_2mass_extract</a>
-<a name="l00280"></a><a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6">00280</a> (<span class="keywordtype">char</span> *path,
-<a name="l00281"></a>00281  <span class="keywordtype">float</span> ramin,
-<a name="l00282"></a>00282  <span class="keywordtype">float</span> ramax,
-<a name="l00283"></a>00283  <span class="keywordtype">float</span> decmin,
-<a name="l00284"></a>00284  <span class="keywordtype">float</span> decmax)
-<a name="l00285"></a>00285 {
-<a name="l00286"></a>00286     cpl_table *t,*s;
-<a name="l00287"></a>00287     cpl_table *out;
-<a name="l00288"></a>00288     <span class="keywordtype">int</span> i,nrows,start,finish,first_index,last_index,irow,init,j;
-<a name="l00289"></a>00289     <span class="keywordtype">int</span> first_index_ra,last_index_ra,wrap,iwrap;
-<a name="l00290"></a>00290     <span class="keywordtype">float</span> dectest,ratest,ramin_wrap,ramax_wrap;
-<a name="l00291"></a>00291     <span class="keywordtype">char</span> fullname[FILENAME_SZBUF];
-<a name="l00292"></a>00292     cpl_array *a;
-<a name="l00293"></a>00293     <span class="keyword">const</span> <span class="keywordtype">char</span> *deccol[] = {<span class="stringliteral">"Dec"</span>};
-<a name="l00294"></a>00294     cpl_propertylist *p;
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296     <span class="comment">/* Create an output table */</span>
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298     out = cpl_table_new(0);
-<a name="l00299"></a>00299     init = 1;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <span class="comment">/* Create a cpl array */</span>
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303     <span class="comment">/* deccol will NOT be modified */</span>
-<a name="l00304"></a>00304     a = cpl_array_wrap_string((<span class="keywordtype">char</span> **)deccol,1);
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     <span class="comment">/* Is there a wrap around problem? */</span>
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308     wrap = (ramin < 0.0 && ramax > 0.0) ? 2 : 1;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310     <span class="comment">/* Loop for each query. If there is a wrap around problem then we need 2</span>
-<a name="l00311"></a>00311 <span class="comment">       queries. If not, then we only need 1 */</span>
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313     <span class="keywordflow">for</span> (iwrap = 0; iwrap < wrap; iwrap++) {
-<a name="l00314"></a>00314         <span class="keywordflow">if</span> (wrap == 2) {
-<a name="l00315"></a>00315             <span class="keywordflow">if</span> (iwrap == 0) {
-<a name="l00316"></a>00316                 ramin_wrap = ramin + 360.0;
-<a name="l00317"></a>00317                 ramax_wrap = 360.0;
-<a name="l00318"></a>00318             } <span class="keywordflow">else</span> {
-<a name="l00319"></a>00319                 ramin_wrap = 0.000001;
-<a name="l00320"></a>00320                 ramax_wrap = ramax;
-<a name="l00321"></a>00321             }
-<a name="l00322"></a>00322         } <span class="keywordflow">else</span> {
-<a name="l00323"></a>00323             ramin_wrap = ramin;
-<a name="l00324"></a>00324             ramax_wrap = ramax;
-<a name="l00325"></a>00325         }
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327         <span class="comment">/* Find out where in the index to look */</span>
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329         first_index_ra = (int)ramin_wrap;
-<a name="l00330"></a>00330         last_index_ra = (int)ramax_wrap;
-<a name="l00331"></a>00331         <span class="keywordflow">if</span>(last_index_ra > 359)
-<a name="l00332"></a>00332             last_index_ra = 359;
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334         <span class="comment">/* Look at the min and max RA and decide which files need to be</span>
-<a name="l00335"></a>00335 <span class="comment">           opened. */</span>
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337         <span class="keywordflow">for</span> (i = first_index_ra; i <= last_index_ra; i++)
-<a name="l00338"></a>00338         {
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340             <span class="comment">/* Ok, we've found one that needs opening. Read the file with</span>
-<a name="l00341"></a>00341 <span class="comment">               the relevant CPL call */</span>
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343             (void)snprintf(fullname,FILENAME_SZBUF,<span class="stringliteral">"%s/npsc%03d.fits"</span>,path,i);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345             <span class="comment">/* Read the propertylist so that you know how many rows there</span>
-<a name="l00346"></a>00346 <span class="comment">               are in the table */</span>
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348             p = cpl_propertylist_load(fullname,1);
-<a name="l00349"></a>00349             <span class="keywordflow">if</span> (p == NULL)
-<a name="l00350"></a>00350             {
-<a name="l00351"></a>00351                 cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00352"></a>00352                         __FILE__, __LINE__, <span class="stringliteral">"2mass file %s missing"</span>,fullname);
-<a name="l00353"></a>00353                 cpl_table_delete(out);
-<a name="l00354"></a>00354                 cpl_array_unwrap(a);
-<a name="l00355"></a>00355                 <span class="keywordflow">return</span>(NULL);
-<a name="l00356"></a>00356             }
-<a name="l00357"></a>00357             nrows = cpl_propertylist_get_int(p, <span class="stringliteral">"NAXIS2"</span>);
-<a name="l00358"></a>00358             cpl_propertylist_delete(p);
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360             <span class="comment">/* Load various rows until you find the Dec range that you</span>
-<a name="l00361"></a>00361 <span class="comment">             have specified. First the minimum Dec */</span>
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363             start = 0;
-<a name="l00364"></a>00364             finish = nrows;
-<a name="l00365"></a>00365             first_index = nrows/2;
-<a name="l00366"></a>00366             <span class="keywordflow">while</span> (finish - start >= 2)
-<a name="l00367"></a>00367             {
-<a name="l00368"></a>00368                 t = cpl_table_load_window(fullname, 1, 0, a, first_index, 1);
-<a name="l00369"></a>00369                 dectest = cpl_table_get_float(t, <span class="stringliteral">"Dec"</span>, 0, NULL);
-<a name="l00370"></a>00370                 cpl_table_delete(t);
-<a name="l00371"></a>00371                 <span class="keywordflow">if</span> (dectest < decmin)
-<a name="l00372"></a>00372                 {
-<a name="l00373"></a>00373                     start = first_index;
-<a name="l00374"></a>00374                     first_index = (first_index + finish)/2;
-<a name="l00375"></a>00375                 }
-<a name="l00376"></a>00376                 <span class="keywordflow">else</span>
-<a name="l00377"></a>00377                 {
-<a name="l00378"></a>00378                     finish = first_index;
-<a name="l00379"></a>00379                     first_index = (first_index + start)/2;
-<a name="l00380"></a>00380                 }
-<a name="l00381"></a>00381             }
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383             <span class="comment">/* Load various rows until you find the Dec range that you</span>
-<a name="l00384"></a>00384 <span class="comment">             have specified. Now the maximum Dec */</span>
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386             start = first_index;
-<a name="l00387"></a>00387             finish = nrows;
-<a name="l00388"></a>00388             last_index = start + (finish - start)/2;
-<a name="l00389"></a>00389             <span class="keywordflow">while</span> (finish - start >= 2)
-<a name="l00390"></a>00390             {
-<a name="l00391"></a>00391                 t = cpl_table_load_window(fullname, 1, 0, a, last_index, 1);
-<a name="l00392"></a>00392                 dectest = cpl_table_get_float(t, <span class="stringliteral">"Dec"</span>, 0, NULL);
-<a name="l00393"></a>00393                 cpl_table_delete(t);
-<a name="l00394"></a>00394                 <span class="keywordflow">if</span> (dectest < decmax)
-<a name="l00395"></a>00395                 {
-<a name="l00396"></a>00396                     start = last_index;
-<a name="l00397"></a>00397                     last_index = (last_index + finish)/2;
-<a name="l00398"></a>00398                 }
-<a name="l00399"></a>00399                 <span class="keywordflow">else</span>
-<a name="l00400"></a>00400                 {
-<a name="l00401"></a>00401                     finish = last_index;
-<a name="l00402"></a>00402                     last_index = (last_index + start)/2;
-<a name="l00403"></a>00403                 }
-<a name="l00404"></a>00404             }
-<a name="l00405"></a>00405             <span class="keywordflow">if</span> (last_index < first_index)
-<a name="l00406"></a>00406                 last_index = first_index;
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408             <span class="comment">/* Ok now now load all the rows in the relevant dec limits */</span>
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410             nrows = last_index - first_index + 1;
-<a name="l00411"></a>00411             <span class="keywordflow">if</span> ((t = cpl_table_load_window(fullname, 1, 0, NULL, first_index,
-<a name="l00412"></a>00412                                            nrows)) == NULL)
-<a name="l00413"></a>00413             {
-<a name="l00414"></a>00414                 cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00415"></a>00415                         __FILE__, __LINE__, <span class="stringliteral">"Error in subset of 2mass file %s "</span>,
-<a name="l00416"></a>00416                         fullname);
-<a name="l00417"></a>00417                 cpl_table_delete(out);
-<a name="l00418"></a>00418                 cpl_array_unwrap(a);
-<a name="l00419"></a>00419                 <span class="keywordflow">return</span> (NULL);
-<a name="l00420"></a>00420             }
-<a name="l00421"></a>00421             cpl_table_unselect_all(t);
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423             <span class="comment">/* Right, we now know what range of rows to search. Go through</span>
-<a name="l00424"></a>00424 <span class="comment">             these and pick the ones that are in the correct range of RA.</span>
-<a name="l00425"></a>00425 <span class="comment">             If a row qualifies, then 'select' it. */</span>
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427             <span class="keywordflow">for</span> (j = 0; j < nrows; j++)
-<a name="l00428"></a>00428             {
-<a name="l00429"></a>00429                 ratest = cpl_table_get_float(t, <span class="stringliteral">"RA"</span>, j, NULL);
-<a name="l00430"></a>00430                 <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)
-<a name="l00431"></a>00431                 {
-<a name="l00432"></a>00432                     cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00433"></a>00433                             __FILE__, __LINE__, <span class="stringliteral">"No RA column in 2mass file %s"</span>,
-<a name="l00434"></a>00434                             fullname);
-<a name="l00435"></a>00435                     cpl_table_delete(t);
-<a name="l00436"></a>00436                     cpl_array_unwrap(a);
-<a name="l00437"></a>00437                     cpl_table_delete(out);
-<a name="l00438"></a>00438                     <span class="keywordflow">return</span> (NULL);
-<a name="l00439"></a>00439                 }
-<a name="l00440"></a>00440                 <span class="keywordflow">if</span> (ratest >= ramin_wrap && ratest <= ramax_wrap)
-<a name="l00441"></a>00441                     cpl_table_select_row(t, j);
-<a name="l00442"></a>00442             }
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444             <span class="comment">/* Extract the rows that have been selected now and append them</span>
-<a name="l00445"></a>00445 <span class="comment">             onto the output table */</span>
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447             s = cpl_table_extract_selected(t);
-<a name="l00448"></a>00448             <span class="keywordflow">if</span> (init == 1)
-<a name="l00449"></a>00449             {
-<a name="l00450"></a>00450                 cpl_table_copy_structure(out, t);
-<a name="l00451"></a>00451                 init = 0;
-<a name="l00452"></a>00452             }
-<a name="l00453"></a>00453             irow = cpl_table_get_nrow(out) + 1;
-<a name="l00454"></a>00454             cpl_table_insert(out, s, irow);
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456             <span class="comment">/* Tidy up */</span>
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458             cpl_table_delete(t);
-<a name="l00459"></a>00459             cpl_table_delete(s);
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463     <span class="comment">/* Ok, now just return the table and get out of here */</span>
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     cpl_array_unwrap(a);
-<a name="l00466"></a>00466     <span class="keywordflow">return</span>(out);
-<a name="l00467"></a>00467 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_cat.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_cat.c,v 1.10 2009/12/01 12:34:25 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/12/01 12:34:25 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "irplib_cat.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_wcs.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define FILENAME_SZBUF 1024</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200" title="Find the name of the standard catalogue being used and its location.">irplib_2mass_get_catpars</a></div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200">   75</a></span> (<span class="keyword">const</span> cpl_frame *  master_index,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>  <span class="keywordtype">char</span>            ** catpath,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>  <span class="keywordtype">char</span>            ** catname)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     cpl_propertylist * p;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>       * unk = <span class="stringliteral">"unknown"</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordtype">char</span>             * fname;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordtype">int</span>                status = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="comment">/* Initialise a few things */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     *catpath = NULL;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     *catname = NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="comment">/* First get the full path to the index file and make sure it exists */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     fname = cpl_strdup(cpl_frame_get_filename(master_index));</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">if</span> (access((<span class="keyword">const</span> <span class="keywordtype">char</span> *)fname,R_OK) != 0)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>          cpl_msg_error(__func__,<span class="stringliteral">"Can't access index file %s"</span>,fname);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>          cpl_free(fname);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>          <span class="keywordflow">return</span> CPL_ERROR_FILE_IO;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     *catpath = cpl_strdup(dirname(fname));</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="comment">/* Try to load the propertylist. If it is not possible signal a fatal</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">       error since this probably means the whole file is messed up */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordflow">if</span> ((p = cpl_propertylist_load(cpl_frame_get_filename(master_index),0)) == NULL)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         cpl_msg_error(__func__,<span class="stringliteral">"Can't load index file header %s"</span>,fname);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         cpl_free(*catpath);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         cpl_free(fname);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordflow">return</span> CPL_ERROR_FILE_IO;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="comment">/* If there is a catalogue name in the header then send it back. If there</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">       isn't then give a default name and send a warning */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">if</span> (cpl_propertylist_has(p,<span class="stringliteral">"CATNAME"</span>))</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         *catname = cpl_strdup(cpl_propertylist_get_string(p,<span class="stringliteral">"CATNAME"</span>));</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         status = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         *catname = cpl_strdup(unk);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         cpl_msg_warning(__func__,<span class="stringliteral">"Property CATNAME not in index file header %s"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                         fname);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_free(fname);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_propertylist_delete(p);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">return</span>(status);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> cpl_error_code <a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af" title="Get coverage in ra, dec of a frame.">irplib_cat_get_image_limits</a></div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af">  154</a></span> (<span class="keyword">const</span> cpl_wcs    * wcs,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>  <span class="keywordtype">float</span>              ext_search,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>  <span class="keywordtype">double</span>           * ra1,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>  <span class="keywordtype">double</span>           * ra2,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>  <span class="keywordtype">double</span>           * dec1,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>  <span class="keywordtype">double</span>           * dec2)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordtype">double</span>            ra;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">double</span>            dec;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">double</span>            x;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordtype">double</span>            y;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordtype">double</span>            dra;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordtype">double</span>            ddec;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">double</span>            min_4q;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordtype">double</span>            max_1q;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordtype">int</span>               first_quad;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordtype">int</span>               fourth_quad;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>       * naxes;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordtype">long</span>              i;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">long</span>              j;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keyword">const</span> cpl_array * a;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* Initialise these in case of failure later*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     *ra1 = 0.0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     *ra2 = 0.0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     *dec1 = 0.0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     *dec2 = 0.0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="comment">/* Grab the WCS info from the property list */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">if</span> (wcs == NULL)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         <span class="keywordflow">return</span> CPL_ERROR_DATA_NOT_FOUND;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">/* Get the size of the data array */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     a = cpl_wcs_get_image_dims(wcs);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">if</span>(a == NULL)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="keywordflow">return</span> CPL_ERROR_ILLEGAL_INPUT;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     naxes = cpl_array_get_data_int_const(a);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/* Find the RA and Dec limits of the image */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     *ra1 = 370.0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     *ra2 = -370.0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     *dec1 = 95.0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     *dec2 = -95.0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     first_quad = 0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     fourth_quad = 0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     min_4q = 370.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     max_1q = 0.0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordflow">for</span> (j = 1; j < naxes[1]; j += 10) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         y = (double)j;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="keywordflow">for</span> (i = 1; i < naxes[0]; i += 10) {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>             x = (double)i;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             irplib_wcs_xytoradec(wcs,x,y,&ra,&dec);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>             <span class="keywordflow">if</span> (ra >= 0.0 && ra <= 90.0) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                 first_quad = 1;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                 <span class="keywordflow">if</span>(ra > max_1q)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                     max_1q = ra;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ra >= 270.0 && ra <= 360.0) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                 fourth_quad = 1;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                 <span class="keywordflow">if</span>(ra - 360.0 < min_4q)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                     min_4q = ra - 360.0;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>             <span class="keywordflow">if</span>(ra < *ra1)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                 *ra1 = ra;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>             <span class="keywordflow">if</span>(ra > *ra2)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                 *ra2 = ra;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>             <span class="keywordflow">if</span>(dec < *dec1)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                 *dec1 = dec;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>             <span class="keywordflow">if</span>(dec > *dec2)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                 *dec2 = dec;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="comment">/* Now have a look to see if you had RA values in both the first and</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">       fourth quadrants.  If you have, then make the minimum RA a negative</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">       value.  This will be the signal to the caller that you have the</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">       wraparound... */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">if</span> (first_quad && fourth_quad) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         *ra1 = min_4q;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         *ra2 = max_1q;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="comment">/* Pad out search a bit */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span> (ext_search)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         dra = 0.5*ext_search*(*ra2 - *ra1);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         *ra1 -= dra;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         *ra2 += dra;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         ddec = 0.5*ext_search*(*dec2 - *dec1);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         *dec1 -= ddec;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         *dec2 += ddec;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">/* Exit */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> cpl_table *  <a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6" title="Extract standards from the 2mass catalogue.">irplib_2mass_extract</a></div>
+<div class="line"><a name="l00280"></a><span class="lineno"><a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6">  280</a></span> (<span class="keywordtype">char</span> *path,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>  <span class="keywordtype">float</span> ramin,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>  <span class="keywordtype">float</span> ramax,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>  <span class="keywordtype">float</span> decmin,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>  <span class="keywordtype">float</span> decmax)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_table *t,*s;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_table *out;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordtype">int</span> i,nrows,start,finish,first_index,last_index,irow,init,j;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordtype">int</span> first_index_ra,last_index_ra,wrap,iwrap;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordtype">float</span> dectest,ratest,ramin_wrap,ramax_wrap;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="keywordtype">char</span> fullname[FILENAME_SZBUF];</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     cpl_array *a;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *deccol[] = {<span class="stringliteral">"Dec"</span>};</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     cpl_propertylist *p;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="comment">/* Create an output table */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     out = cpl_table_new(0);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     init = 1;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">/* Create a cpl array */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="comment">/* deccol will NOT be modified */</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     a = cpl_array_wrap_string((<span class="keywordtype">char</span> **)deccol,1);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* Is there a wrap around problem? */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     wrap = (ramin < 0.0 && ramax > 0.0) ? 2 : 1;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="comment">/* Loop for each query. If there is a wrap around problem then we need 2</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">       queries. If not, then we only need 1 */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">for</span> (iwrap = 0; iwrap < wrap; iwrap++) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         <span class="keywordflow">if</span> (wrap == 2) {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>             <span class="keywordflow">if</span> (iwrap == 0) {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                 ramin_wrap = ramin + 360.0;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                 ramax_wrap = 360.0;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                 ramin_wrap = 0.000001;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                 ramax_wrap = ramax;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             ramin_wrap = ramin;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>             ramax_wrap = ramax;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         <span class="comment">/* Find out where in the index to look */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         first_index_ra = (int)ramin_wrap;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         last_index_ra = (int)ramax_wrap;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <span class="keywordflow">if</span>(last_index_ra > 359)</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>             last_index_ra = 359;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         <span class="comment">/* Look at the min and max RA and decide which files need to be</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">           opened. */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="keywordflow">for</span> (i = first_index_ra; i <= last_index_ra; i++)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>             <span class="comment">/* Ok, we've found one that needs opening. Read the file with</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">               the relevant CPL call */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>             (void)snprintf(fullname,FILENAME_SZBUF,<span class="stringliteral">"%s/npsc%03d.fits"</span>,path,i);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>             <span class="comment">/* Read the propertylist so that you know how many rows there</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">               are in the table */</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>             p = cpl_propertylist_load(fullname,1);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>             <span class="keywordflow">if</span> (p == NULL)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>             {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                 cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                         __FILE__, __LINE__, <span class="stringliteral">"2mass file %s missing"</span>,fullname);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                 cpl_table_delete(out);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                 cpl_array_unwrap(a);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                 <span class="keywordflow">return</span>(NULL);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             }</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>             nrows = cpl_propertylist_get_int(p, <span class="stringliteral">"NAXIS2"</span>);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>             cpl_propertylist_delete(p);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>             <span class="comment">/* Load various rows until you find the Dec range that you</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">             have specified. First the minimum Dec */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>             start = 0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>             finish = nrows;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>             first_index = nrows/2;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>             <span class="keywordflow">while</span> (finish - start >= 2)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>             {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                 t = cpl_table_load_window(fullname, 1, 0, a, first_index, 1);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                 dectest = cpl_table_get_float(t, <span class="stringliteral">"Dec"</span>, 0, NULL);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                 cpl_table_delete(t);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                 <span class="keywordflow">if</span> (dectest < decmin)</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                 {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                     start = first_index;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                     first_index = (first_index + finish)/2;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                 }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                 {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                     finish = first_index;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                     first_index = (first_index + start)/2;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                 }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             <span class="comment">/* Load various rows until you find the Dec range that you</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment">             have specified. Now the maximum Dec */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             start = first_index;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             finish = nrows;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             last_index = start + (finish - start)/2;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>             <span class="keywordflow">while</span> (finish - start >= 2)</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>             {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                 t = cpl_table_load_window(fullname, 1, 0, a, last_index, 1);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                 dectest = cpl_table_get_float(t, <span class="stringliteral">"Dec"</span>, 0, NULL);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                 cpl_table_delete(t);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                 <span class="keywordflow">if</span> (dectest < decmax)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                 {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                     start = last_index;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                     last_index = (last_index + finish)/2;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                 }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                 {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                     finish = last_index;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                     last_index = (last_index + start)/2;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>             }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>             <span class="keywordflow">if</span> (last_index < first_index)</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                 last_index = first_index;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             <span class="comment">/* Ok now now load all the rows in the relevant dec limits */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>             nrows = last_index - first_index + 1;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>             <span class="keywordflow">if</span> ((t = cpl_table_load_window(fullname, 1, 0, NULL, first_index,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                            nrows)) == NULL)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>             {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                 cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                         __FILE__, __LINE__, <span class="stringliteral">"Error in subset of 2mass file %s "</span>,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                         fullname);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                 cpl_table_delete(out);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                 cpl_array_unwrap(a);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                 <span class="keywordflow">return</span> (NULL);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>             }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>             cpl_table_unselect_all(t);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>             <span class="comment">/* Right, we now know what range of rows to search. Go through</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="comment">             these and pick the ones that are in the correct range of RA.</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">             If a row qualifies, then 'select' it. */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>             <span class="keywordflow">for</span> (j = 0; j < nrows; j++)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>             {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                 ratest = cpl_table_get_float(t, <span class="stringliteral">"RA"</span>, j, NULL);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                 <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                 {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                     cpl_error_set_message_macro(__func__,CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                             __FILE__, __LINE__, <span class="stringliteral">"No RA column in 2mass file %s"</span>,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                             fullname);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                     cpl_table_delete(t);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                     cpl_array_unwrap(a);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                     cpl_table_delete(out);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                     <span class="keywordflow">return</span> (NULL);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                 }</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                 <span class="keywordflow">if</span> (ratest >= ramin_wrap && ratest <= ramax_wrap)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                     cpl_table_select_row(t, j);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             }</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             <span class="comment">/* Extract the rows that have been selected now and append them</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">             onto the output table */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             s = cpl_table_extract_selected(t);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             <span class="keywordflow">if</span> (init == 1)</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                 cpl_table_copy_structure(out, t);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                 init = 0;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>             irow = cpl_table_get_nrow(out) + 1;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             cpl_table_insert(out, s, irow);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>             <span class="comment">/* Tidy up */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             cpl_table_delete(t);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             cpl_table_delete(s);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="comment">/* Ok, now just return the table and get out of here */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     cpl_array_unwrap(a);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="keywordflow">return</span>(out);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__cat_8h_source.html b/html/irplib__cat_8h_source.html
index f301c2b..00b83c9 100644
--- a/html/irplib__cat_8h_source.html
+++ b/html/irplib__cat_8h_source.html
@@ -2,72 +2,103 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_cat.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_cat.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_cat.h,v 1.5 2009/12/16 14:49:52 cgarcia Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: cgarcia $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/12/16 14:49:52 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_CAT_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CAT_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keywordtype">int</span> <a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200" title="Find the name of the standard catalogue being used and its location.">irplib_2mass_get_catpars</a>
-<a name="l00038"></a>00038 (<span class="keyword">const</span> cpl_frame *master_index,
-<a name="l00039"></a>00039  <span class="keywordtype">char</span>            **catpath,
-<a name="l00040"></a>00040  <span class="keywordtype">char</span>            **catname);
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 cpl_table *  <a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6" title="Extract standards from the 2mass catalogue.">irplib_2mass_extract</a>
-<a name="l00043"></a>00043 (<span class="keywordtype">char</span> *path,
-<a name="l00044"></a>00044  <span class="keywordtype">float</span> ramin,
-<a name="l00045"></a>00045  <span class="keywordtype">float</span> ramax,
-<a name="l00046"></a>00046  <span class="keywordtype">float</span> decmin,
-<a name="l00047"></a>00047  <span class="keywordtype">float</span> decmax);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 cpl_error_code <a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af" title="Get coverage in ra, dec of a frame.">irplib_cat_get_image_limits</a>
-<a name="l00050"></a>00050 (<span class="keyword">const</span> cpl_wcs    * wcs,
-<a name="l00051"></a>00051  <span class="keywordtype">float</span>              ext_search,
-<a name="l00052"></a>00052  <span class="keywordtype">double</span>           * ra1,
-<a name="l00053"></a>00053  <span class="keywordtype">double</span>           * ra2,
-<a name="l00054"></a>00054  <span class="keywordtype">double</span>           * dec1,
-<a name="l00055"></a>00055  <span class="keywordtype">double</span>           * dec2);
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_cat.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_cat.h,v 1.5 2009/12/16 14:49:52 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/12/16 14:49:52 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_CAT_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CAT_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__cat.html#ga8dd2b5e6b7bc4a7ea3f2b275882aa200" title="Find the name of the standard catalogue being used and its location.">irplib_2mass_get_catpars</a></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> (<span class="keyword">const</span> cpl_frame *master_index,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>  <span class="keywordtype">char</span>            **catpath,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>  <span class="keywordtype">char</span>            **catname);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> cpl_table *  <a class="code" href="group__irplib__cat.html#ga7fdafd757d33d4096270027912a89cf6" title="Extract standards from the 2mass catalogue.">irplib_2mass_extract</a></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> (<span class="keywordtype">char</span> *path,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  <span class="keywordtype">float</span> ramin,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>  <span class="keywordtype">float</span> ramax,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>  <span class="keywordtype">float</span> decmin,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  <span class="keywordtype">float</span> decmax);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> cpl_error_code <a class="code" href="group__irplib__cat.html#ga2289fa88ec0498a2930291b1d51a46af" title="Get coverage in ra, dec of a frame.">irplib_cat_get_image_limits</a></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> (<span class="keyword">const</span> cpl_wcs    * wcs,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>  <span class="keywordtype">float</span>              ext_search,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>  <span class="keywordtype">double</span>           * ra1,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  <span class="keywordtype">double</span>           * ra2,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>  <span class="keywordtype">double</span>           * dec1,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>  <span class="keywordtype">double</span>           * dec2);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__distortion_8c_source.html b/html/irplib__distortion_8c_source.html
index 85bab8d..475a520 100644
--- a/html/irplib__distortion_8c_source.html
+++ b/html/irplib__distortion_8c_source.html
@@ -2,1266 +2,1297 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_distortion.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_distortion.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_distortion.c,v 1.52 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.52 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE <= CPL_VERSION(5, 92, 0)</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define cpl_apertures_get_pos_x cpl_apertures_get_max_x</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>
-<a name="l00048"></a>00048 <span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="preprocessor">#include "irplib_distortion.h"</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="preprocessor">#include "irplib_flat.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "irplib_polynomial.h"</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#include <math.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <float.h></span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00060"></a>00060 <span class="comment">                                   Define</span>
-<a name="l00061"></a>00061 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#define ARC_MINGOODPIX      100</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINARCLENFACT   2.0</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINNBARCS       4</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define ARC_RANGE_FACT      3.0</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define ARC_WINDOWSIZE      32</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#define TRESH_MEDIAN_MIN    0.0</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define TRESH_SIGMA_MAX     200.0</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span>
-<a name="l00075"></a>00075 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00082"></a>00082 <span class="comment">                                Functions prototypes</span>
-<a name="l00083"></a>00083 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="keyword">static</span> cpl_apertures * irplib_distortion_detect_arcs(cpl_image *,
-<a name="l00086"></a>00086         cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);
-<a name="l00087"></a>00087 <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_border(cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00088"></a>00088                                                     <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_threshold1d(cpl_image *, <span class="keywordtype">double</span>, cpl_image *, 
-<a name="l00090"></a>00090         <span class="keywordtype">double</span>);
-<a name="l00091"></a>00091 <span class="keyword">static</span> cpl_error_code irplib_distortion_purge_arcs(cpl_apertures **, cpl_image *,
-<a name="l00092"></a>00092                                                    <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00093"></a>00093                                                    <span class="keywordtype">double</span>);
-<a name="l00094"></a>00094 <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_arc_positions(cpl_bivector *,
-<a name="l00095"></a>00095                                                           cpl_vector *,
-<a name="l00096"></a>00096                                                           <span class="keyword">const</span> cpl_image *,
-<a name="l00097"></a>00097                                                           <span class="keyword">const</span> cpl_image *,
-<a name="l00098"></a>00098                                                           <span class="keyword">const</span> cpl_apertures *);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_distortion_get_row_centroid(<span class="keyword">const</span> cpl_image *,
-<a name="l00101"></a>00101                                                  <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_sub_hor_lowpass(cpl_image *, <span class="keywordtype">int</span>);
-<a name="l00104"></a>00104 <span class="keyword">static</span> cpl_image * irplib_distortion_remove_ramp(<span class="keyword">const</span> cpl_image *);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image *,
-<a name="l00107"></a>00107         <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, cpl_boolean) ;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="keyword">static</span> cpl_error_code irplib_polynomial_fit_2d(cpl_polynomial *,
-<a name="l00110"></a>00110                                                <span class="keyword">const</span> cpl_bivector *,
-<a name="l00111"></a>00111                                                <span class="keyword">const</span> cpl_vector *, <span class="keywordtype">int</span>,
-<a name="l00112"></a>00112                                                <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="keyword">static</span> cpl_matrix * irplib_matrix_product_normal_create(<span class="keyword">const</span> cpl_matrix *);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00117"></a>00117 <span class="comment">                                Functions code</span>
-<a name="l00118"></a>00118 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00119"></a>00119 
-<a name="l00122"></a>00122 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00151"></a>00151 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 cpl_polynomial * irplib_distortion_estimate(
-<a name="l00153"></a>00153         <span class="keyword">const</span> cpl_image *   org,
-<a name="l00154"></a>00154         <span class="keywordtype">int</span>                 xmin,
-<a name="l00155"></a>00155         <span class="keywordtype">int</span>                 ymin,
-<a name="l00156"></a>00156         <span class="keywordtype">int</span>                 xmax,
-<a name="l00157"></a>00157         <span class="keywordtype">int</span>                 ymax,
-<a name="l00158"></a>00158         <span class="keywordtype">int</span>                 auto_ramp_sub,
-<a name="l00159"></a>00159         <span class="keywordtype">int</span>                 arc_sat,
-<a name="l00160"></a>00160         <span class="keywordtype">int</span>                 max_arc_width,
-<a name="l00161"></a>00161         <span class="keywordtype">double</span>              kappa,
-<a name="l00162"></a>00162         <span class="keywordtype">int</span>                 degree,
-<a name="l00163"></a>00163         cpl_apertures   **  arcs)
-<a name="l00164"></a>00164 {
-<a name="l00165"></a>00165     cpl_image      * local_im;
-<a name="l00166"></a>00166     cpl_image      * filtered;
-<a name="l00167"></a>00167     cpl_image      * label_image;
-<a name="l00168"></a>00168     <span class="keywordtype">double</span>           rightmost, leftmost;
-<a name="l00169"></a>00169     cpl_bivector   * grid;
-<a name="l00170"></a>00170     cpl_vector     * values_to_fit;
-<a name="l00171"></a>00171     <span class="keywordtype">int</span>              n_arcs;
-<a name="l00172"></a>00172     cpl_polynomial * poly2d;
-<a name="l00173"></a>00173     <span class="keywordtype">double</span>           mse = 0.0;
-<a name="l00174"></a>00174     <span class="keyword">const</span> <span class="keywordtype">int</span>        nx = cpl_image_get_size_x(org);
-<a name="l00175"></a>00175     <span class="keyword">const</span> <span class="keywordtype">int</span>        ny = cpl_image_get_size_y(org);
-<a name="l00176"></a>00176     <span class="keyword">const</span> <span class="keywordtype">int</span>        min_arc_range = (int)(nx / ARC_RANGE_FACT);
-<a name="l00177"></a>00177     <span class="keywordtype">int</span>              i;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="comment">/* Check entries */</span>
-<a name="l00180"></a>00180     cpl_ensure(org           != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00181"></a>00181     cpl_ensure(kappa         >= 0.0,  CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00182"></a>00182     cpl_ensure(max_arc_width > 0,     CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="comment">/* The background may vary strongly along the vertical line. */</span>
-<a name="l00185"></a>00185     <span class="comment">/* Detect and rm background with a 1+2*max_arc_width x 1 median filter */</span>
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     filtered = cpl_image_new(nx, ny, cpl_image_get_type(org));
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     irplib_image_filter_background_line(filtered, org, max_arc_width, CPL_TRUE);
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="keywordflow">if</span> (auto_ramp_sub) {
-<a name="l00192"></a>00192         local_im = irplib_distortion_remove_ramp(filtered);
-<a name="l00193"></a>00193         cpl_image_delete(filtered);
-<a name="l00194"></a>00194     } <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195         local_im = filtered;
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     cpl_error_ensure(local_im != NULL, cpl_error_get_code(),
-<a name="l00199"></a>00199                      <span class="keywordflow">return</span>(NULL), <span class="stringliteral">"Cannot clean the image"</span>);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     <span class="comment">/* Detect the arcs in the input image */</span>
-<a name="l00202"></a>00202     *arcs = irplib_distortion_detect_arcs(local_im, &label_image, arc_sat,
-<a name="l00203"></a>00203                                           max_arc_width, kappa, xmin, ymin,
-<a name="l00204"></a>00204                                           xmax, ymax);
-<a name="l00205"></a>00205     <span class="keywordflow">if</span> (*arcs == NULL) {
-<a name="l00206"></a>00206         cpl_image_delete(local_im);
-<a name="l00207"></a>00207         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00208"></a>00208                               <span class="stringliteral">"Cannot detect the arcs"</span>);
-<a name="l00209"></a>00209         <span class="keywordflow">return</span> NULL;
-<a name="l00210"></a>00210     }
-<a name="l00211"></a>00211     n_arcs = cpl_apertures_get_size(*arcs);
-<a name="l00212"></a>00212     cpl_msg_info(cpl_func, <span class="stringliteral">"%d detected arcs"</span>, n_arcs);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span>
-<a name="l00215"></a>00215     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1);
-<a name="l00216"></a>00216     <span class="keywordflow">for</span> (i=1; i<n_arcs; i++) {
-<a name="l00217"></a>00217         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)
-<a name="l00218"></a>00218             leftmost = cpl_apertures_get_pos_x(*arcs, i+1);
-<a name="l00219"></a>00219         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)
-<a name="l00220"></a>00220             rightmost = cpl_apertures_get_pos_x(*arcs, i+1);
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {
-<a name="l00223"></a>00223 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00225"></a>00225                               <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,
-<a name="l00226"></a>00226                               rightmost, leftmost, min_arc_range);
-<a name="l00227"></a>00227 <span class="preprocessor">#else</span>
-<a name="l00228"></a>00228 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00229"></a>00229                               <span class="stringliteral">"too narrow range"</span>);
-<a name="l00230"></a>00230 <span class="preprocessor">#endif</span>
-<a name="l00231"></a>00231 <span class="preprocessor"></span>        cpl_apertures_delete(*arcs);
-<a name="l00232"></a>00232         cpl_image_delete(local_im);
-<a name="l00233"></a>00233         cpl_image_delete(label_image);
-<a name="l00234"></a>00234         *arcs = NULL;
-<a name="l00235"></a>00235         <span class="keywordflow">return</span> NULL;
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span>
-<a name="l00239"></a>00239     cpl_msg_info(cpl_func, <span class="stringliteral">"Create deformation grid"</span>);
-<a name="l00240"></a>00240     grid = cpl_bivector_new(n_arcs * ny);
-<a name="l00241"></a>00241     values_to_fit = cpl_vector_new(n_arcs * ny);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="keywordflow">if</span> (irplib_distortion_fill_arc_positions(grid, values_to_fit, local_im,
-<a name="l00244"></a>00244                                             label_image, *arcs)){
-<a name="l00245"></a>00245         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00246"></a>00246                               <span class="stringliteral">"cannot get arcs positions"</span>);
-<a name="l00247"></a>00247         cpl_apertures_delete(*arcs);
-<a name="l00248"></a>00248         cpl_image_delete(local_im);
-<a name="l00249"></a>00249         cpl_image_delete(label_image);
-<a name="l00250"></a>00250         *arcs = NULL;
-<a name="l00251"></a>00251         <span class="keywordflow">return</span> NULL;
-<a name="l00252"></a>00252     }
-<a name="l00253"></a>00253     cpl_image_delete(label_image);
-<a name="l00254"></a>00254     cpl_image_delete(local_im);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* Apply the fitting */</span>
-<a name="l00257"></a>00257     poly2d = cpl_polynomial_new(2);
-<a name="l00258"></a>00258     <span class="keywordflow">if</span> (irplib_polynomial_fit_2d(poly2d, grid, values_to_fit, degree,
-<a name="l00259"></a>00259                                  0.5*(ny+1), &mse)) {
-<a name="l00260"></a>00260         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00261"></a>00261                               <span class="stringliteral">"cannot apply the 2d fit"</span>);
-<a name="l00262"></a>00262         cpl_bivector_delete(grid);
-<a name="l00263"></a>00263         cpl_vector_delete(values_to_fit);
-<a name="l00264"></a>00264         cpl_apertures_delete(*arcs);
-<a name="l00265"></a>00265         *arcs = NULL;
-<a name="l00266"></a>00266         <span class="keywordflow">return</span> NULL;
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     cpl_msg_info(cpl_func, 
-<a name="l00270"></a>00270             <span class="stringliteral">"Fitted a %d. degree 2D-polynomial to %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" points "</span>
-<a name="l00271"></a>00271             <span class="stringliteral">"with mean-square error: %g"</span>, degree,
-<a name="l00272"></a>00272             cpl_vector_get_size(values_to_fit), mse);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     <span class="comment">/* Free and return */</span>
-<a name="l00275"></a>00275     cpl_bivector_delete(grid);
-<a name="l00276"></a>00276     cpl_vector_delete(values_to_fit);
-<a name="l00277"></a>00277     <span class="keywordflow">return</span> poly2d;
-<a name="l00278"></a>00278 }
-<a name="l00279"></a>00279 
-<a name="l00282"></a>00282 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00298"></a>00298 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00299"></a>00299 <span class="keyword">static</span> cpl_apertures * irplib_distortion_detect_arcs(
-<a name="l00300"></a>00300         cpl_image *   im,
-<a name="l00301"></a>00301         cpl_image **  label_im,
-<a name="l00302"></a>00302         <span class="keywordtype">int</span>             arc_sat,
-<a name="l00303"></a>00303         <span class="keywordtype">int</span>             max_arc_width,
-<a name="l00304"></a>00304         <span class="keywordtype">double</span>          kappa,
-<a name="l00305"></a>00305         <span class="keywordtype">int</span>             xmin,
-<a name="l00306"></a>00306         <span class="keywordtype">int</span>             ymin,
-<a name="l00307"></a>00307         <span class="keywordtype">int</span>             xmax,
-<a name="l00308"></a>00308         <span class="keywordtype">int</span>             ymax)
-<a name="l00309"></a>00309 {
-<a name="l00310"></a>00310     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(im);
-<a name="l00311"></a>00311     <span class="comment">/* Set min_arclen */</span>
-<a name="l00312"></a>00312     <span class="keyword">const</span> <span class="keywordtype">int</span>           min_arclen = (int)(ny / ARC_MINARCLENFACT);
-<a name="l00313"></a>00313     cpl_image       *   filt_im;
-<a name="l00314"></a>00314     cpl_mask        *   filter;
-<a name="l00315"></a>00315     cpl_image       *   collapsed;
-<a name="l00316"></a>00316     cpl_mask        *   bin_im;
-<a name="l00317"></a>00317     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma;
-<a name="l00318"></a>00318     cpl_apertures   *   det;
-<a name="l00319"></a>00319     cpl_size            nobj;
-<a name="l00320"></a>00320     <span class="keywordtype">int</span>                 ngoodpix;
-<a name="l00321"></a>00321     
-<a name="l00322"></a>00322     <span class="comment">/* Default values for output parameters */</span>
-<a name="l00323"></a>00323     *label_im = NULL;
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span>
-<a name="l00326"></a>00326     median_val = cpl_image_get_median_dev(im, &sigma);
-<a name="l00327"></a>00327     fillval = median_val-sigma/2.0;
-<a name="l00328"></a>00328     <span class="keywordflow">if</span> (irplib_distortion_fill_border(im, xmin, ymin, xmax, ymax, fillval)) {
-<a name="l00329"></a>00329         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00330"></a>00330                               <span class="stringliteral">"cannot fill bad zones"</span>);
-<a name="l00331"></a>00331         <span class="keywordflow">return</span> NULL;
-<a name="l00332"></a>00332     }
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     <span class="comment">/* Subtract a low-pass */</span>
-<a name="l00335"></a>00335     filt_im = cpl_image_duplicate(im);
-<a name="l00336"></a>00336     <span class="keywordflow">if</span> (irplib_distortion_sub_hor_lowpass(filt_im, ARC_WINDOWSIZE) == -1) {
-<a name="l00337"></a>00337         cpl_image_delete(filt_im);
-<a name="l00338"></a>00338         <span class="keywordflow">return</span> NULL;
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340     
-<a name="l00341"></a>00341     <span class="comment">/* Get relevant stats for thresholding */</span>
-<a name="l00342"></a>00342     median_val = cpl_image_get_median_dev(filt_im, &sigma);
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344     <span class="comment">/* Correct median_val and sigma if necessary */</span>
-<a name="l00345"></a>00345     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN;
-<a name="l00346"></a>00346     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     <span class="comment">/* Set the threshold */</span>
-<a name="l00349"></a>00349     threshold = median_val + sigma * kappa;
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351     <span class="comment">/* Collapse the image */</span>
-<a name="l00352"></a>00352     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0);
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span>
-<a name="l00355"></a>00355     <span class="keywordflow">if</span> (irplib_distortion_threshold1d(filt_im, median_val, collapsed, 0.0)==-1) {
-<a name="l00356"></a>00356         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00357"></a>00357                               <span class="stringliteral">"cannot threshold the filtered image"</span>);
-<a name="l00358"></a>00358         cpl_image_delete(filt_im);
-<a name="l00359"></a>00359         cpl_image_delete(collapsed);
-<a name="l00360"></a>00360         <span class="keywordflow">return</span> NULL;
-<a name="l00361"></a>00361     }
-<a name="l00362"></a>00362     cpl_image_delete(collapsed);
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364     <span class="comment">/* Binarize the image */</span>
-<a name="l00365"></a>00365     bin_im = cpl_mask_threshold_image_create(filt_im, threshold, 
-<a name="l00366"></a>00366             DBL_MAX);
-<a name="l00367"></a>00367     cpl_image_delete(filt_im);
-<a name="l00368"></a>00368     <span class="keywordflow">if</span> (bin_im == NULL) {
-<a name="l00369"></a>00369         cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00370"></a>00370                               <span class="stringliteral">"cannot binarise the image"</span>);
-<a name="l00371"></a>00371         <span class="keywordflow">return</span> NULL;
-<a name="l00372"></a>00372     }
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     <span class="comment">/* Test if there are enough good pixels */</span>
-<a name="l00375"></a>00375     ngoodpix = cpl_mask_count(bin_im);
-<a name="l00376"></a>00376     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {
-<a name="l00377"></a>00377 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00378"></a>00378 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00379"></a>00379                               <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix);
-<a name="l00380"></a>00380 <span class="preprocessor">#else</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00382"></a>00382                               <span class="stringliteral">"Too few white pixels"</span>);
-<a name="l00383"></a>00383 <span class="preprocessor">#endif</span>
-<a name="l00384"></a>00384 <span class="preprocessor"></span>        cpl_mask_delete(bin_im);
-<a name="l00385"></a>00385         <span class="keywordflow">return</span> NULL;
-<a name="l00386"></a>00386     }
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="comment">/* Apply a morphological opening to clean the isolated pixels */</span>
-<a name="l00389"></a>00389     filter = cpl_mask_new(3, 3);
-<a name="l00390"></a>00390     cpl_mask_not(filter);
-<a name="l00391"></a>00391     cpl_mask_filter(bin_im, bin_im, filter, CPL_FILTER_OPENING,
-<a name="l00392"></a>00392                     CPL_BORDER_ZERO);
-<a name="l00393"></a>00393     cpl_mask_delete(filter);
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395     <span class="comment">/* Labelize pixel map to a label image */</span>
-<a name="l00396"></a>00396     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj);
-<a name="l00397"></a>00397     cpl_mask_delete(bin_im);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399     <span class="comment">/* Compute statistics on objects */</span>
-<a name="l00400"></a>00400     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {
-<a name="l00401"></a>00401         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00402"></a>00402                               <span class="stringliteral">"Cannot compute arcs stats"</span>);
-<a name="l00403"></a>00403         cpl_image_delete(*label_im);
-<a name="l00404"></a>00404         *label_im = NULL;
-<a name="l00405"></a>00405         <span class="keywordflow">return</span> NULL;
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="comment">/* Purge non-relevant arcs */</span>
-<a name="l00409"></a>00409     <span class="keywordflow">if</span> (irplib_distortion_purge_arcs(&det, *label_im, im, min_arclen,
-<a name="l00410"></a>00410                                      max_arc_width, arc_sat)) {
-<a name="l00411"></a>00411         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00412"></a>00412                               <span class="stringliteral">"Cannot purge the arcs"</span>);
-<a name="l00413"></a>00413         cpl_image_delete(*label_im);
-<a name="l00414"></a>00414         *label_im = NULL;
-<a name="l00415"></a>00415         cpl_apertures_delete(det);
-<a name="l00416"></a>00416         <span class="keywordflow">return</span> NULL;
-<a name="l00417"></a>00417     }
-<a name="l00418"></a>00418     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {
-<a name="l00419"></a>00419 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00420"></a>00420 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00421"></a>00421                 <span class="stringliteral">"Not enough valid arcs (%"</span>CPL_SIZE_FORMAT<span class="stringliteral">" < %d)"</span>, 
-<a name="l00422"></a>00422                 cpl_apertures_get_size(det), ARC_MINNBARCS);
-<a name="l00423"></a>00423 <span class="preprocessor">#else</span>
-<a name="l00424"></a>00424 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00425"></a>00425                               <span class="stringliteral">"Not enough valid arcs, min="</span>
-<a name="l00426"></a>00426                               IRPLIB_STRINGIFY(ARC_MINNBARCS));
-<a name="l00427"></a>00427 <span class="preprocessor">#endif</span>
-<a name="l00428"></a>00428 <span class="preprocessor"></span>        cpl_image_delete(*label_im);
-<a name="l00429"></a>00429         *label_im = NULL;
-<a name="l00430"></a>00430         cpl_apertures_delete(det);
-<a name="l00431"></a>00431         <span class="keywordflow">return</span> NULL;
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434     <span class="comment">/* Return  */</span>
-<a name="l00435"></a>00435     <span class="keywordflow">return</span> det;
-<a name="l00436"></a>00436 }
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00448"></a>00448 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00449"></a>00449 <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_border(cpl_image * <span class="keyword">self</span>,
-<a name="l00450"></a>00450                                                     <span class="keywordtype">int</span>         xmin,
-<a name="l00451"></a>00451                                                     <span class="keywordtype">int</span>         ymin,
-<a name="l00452"></a>00452                                                     <span class="keywordtype">int</span>         xmax,
-<a name="l00453"></a>00453                                                     <span class="keywordtype">int</span>         ymax,
-<a name="l00454"></a>00454                                                     <span class="keywordtype">double</span>      fillval)
-<a name="l00455"></a>00455 {
-<a name="l00456"></a>00456     <span class="keyword">const</span> <span class="keywordtype">int</span>   nx     = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00457"></a>00457     <span class="keyword">const</span> <span class="keywordtype">int</span>   ny     = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l00458"></a>00458     <span class="keywordtype">float</span>     * pfi    = cpl_image_get_data_float(<span class="keyword">self</span>);
-<a name="l00459"></a>00459     <span class="keyword">const</span> <span class="keywordtype">float</span> fvalue = (float)fillval;
-<a name="l00460"></a>00460     <span class="keywordtype">int</span>         i, j;
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463     cpl_ensure_code(pfi != NULL, cpl_error_get_code());
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     <span class="comment">/* Ensure validity of pixel buffer access */</span>
-<a name="l00466"></a>00466     xmin = IRPLIB_MIN(xmin, nx+1);
-<a name="l00467"></a>00467     ymax = IRPLIB_MIN(ymax, ny);
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469     <span class="comment">/* - and avoid double access */</span>
-<a name="l00470"></a>00470     xmax = IRPLIB_MAX(xmax, xmin - 1);
-<a name="l00471"></a>00471     ymin = IRPLIB_MIN(ymin, ymax + 1);
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473     <span class="comment">/* Fill the zone */</span>
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475     <span class="keywordflow">for</span> (j = 0; j < ymin-1; j++) {
-<a name="l00476"></a>00476         <span class="keywordflow">for</span> (i = 0; i < nx; i++) {
-<a name="l00477"></a>00477             pfi[i+j*nx] = fvalue;
-<a name="l00478"></a>00478         }
-<a name="l00479"></a>00479     }
-<a name="l00480"></a>00480     <span class="comment">/* assert( j == IRPLIB_MAX(0, ymin-1) ); */</span>
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482     <span class="keywordflow">for</span> (; j < ymax; j++) {
-<a name="l00483"></a>00483         <span class="keywordflow">for</span> (i = 0; i < xmin-1; i++) {
-<a name="l00484"></a>00484             pfi[i+j*nx] = fvalue;
-<a name="l00485"></a>00485         }
-<a name="l00486"></a>00486         <span class="keywordflow">for</span> (i = xmax; i < nx; i++) {
-<a name="l00487"></a>00487             pfi[i+j*nx] = fvalue;
-<a name="l00488"></a>00488         }
-<a name="l00489"></a>00489     }
-<a name="l00490"></a>00490     <span class="comment">/* assert( j == IRPLIB_MAX(0, ymax) ); */</span>
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492     <span class="keywordflow">for</span> (; j < ny; j++) {
-<a name="l00493"></a>00493         <span class="keywordflow">for</span> (i = 0; i < nx; i++) {
-<a name="l00494"></a>00494             pfi[i+j*nx] = fvalue;
-<a name="l00495"></a>00495         }
-<a name="l00496"></a>00496     }
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00499"></a>00499 }
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_threshold1d(
-<a name="l00502"></a>00502         cpl_image   *   im,
-<a name="l00503"></a>00503         <span class="keywordtype">double</span>          threshold,
-<a name="l00504"></a>00504         cpl_image   *   im1d,
-<a name="l00505"></a>00505         <span class="keywordtype">double</span>          newval)
-<a name="l00506"></a>00506 {
-<a name="l00507"></a>00507     <span class="keywordtype">float</span>       *   pim;
-<a name="l00508"></a>00508     <span class="keywordtype">float</span>       *   pim1d;
-<a name="l00509"></a>00509     <span class="keywordtype">int</span>             nx, ny;
-<a name="l00510"></a>00510     <span class="keywordtype">int</span>             i, j;
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     <span class="comment">/* Check entries */</span>
-<a name="l00513"></a>00513     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00514"></a>00514     <span class="keywordflow">if</span> (im1d == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00515"></a>00515     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1;
-<a name="l00516"></a>00516     <span class="keywordflow">if</span> (cpl_image_get_type(im1d) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1;
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518     <span class="comment">/* Get access to the im / im1d data */</span>
-<a name="l00519"></a>00519     pim = cpl_image_get_data_float(im);
-<a name="l00520"></a>00520     pim1d = cpl_image_get_data_float(im1d);
-<a name="l00521"></a>00521     nx = cpl_image_get_size_x(im);
-<a name="l00522"></a>00522     ny = cpl_image_get_size_y(im);
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524     <span class="comment">/* Apply the thresholding */</span>
-<a name="l00525"></a>00525     <span class="keywordflow">for</span> (i=0; i<nx; i++)
-<a name="l00526"></a>00526         <span class="keywordflow">if</span> (pim1d[i] < threshold) {
-<a name="l00527"></a>00527             <span class="keywordflow">for</span> (j=0; j<ny; j++) pim[i+j*nx] = (<span class="keywordtype">float</span>)newval;
-<a name="l00528"></a>00528         }
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530     <span class="comment">/* Return */</span>
-<a name="l00531"></a>00531     <span class="keywordflow">return</span> 0;
-<a name="l00532"></a>00532 }
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_sub_hor_lowpass(
-<a name="l00535"></a>00535         cpl_image   *   im, 
-<a name="l00536"></a>00536         <span class="keywordtype">int</span>             filt_size)
-<a name="l00537"></a>00537 {
-<a name="l00538"></a>00538     cpl_vector  *   linehi;
-<a name="l00539"></a>00539     cpl_vector  *   linelo;
-<a name="l00540"></a>00540     cpl_vector  *   avglinehi;
-<a name="l00541"></a>00541     cpl_vector  *   avglinelo;
-<a name="l00542"></a>00542     <span class="keywordtype">double</span>      *   pavglinehi;
-<a name="l00543"></a>00543     <span class="keywordtype">float</span>       *   pim;
-<a name="l00544"></a>00544     <span class="keywordtype">int</span>             lopos, hipos, nx, ny;
-<a name="l00545"></a>00545     <span class="keywordtype">int</span>             i, j;
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547     <span class="comment">/* Test entries */</span>
-<a name="l00548"></a>00548     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00549"></a>00549     <span class="keywordflow">if</span> (filt_size <= 0) <span class="keywordflow">return</span> -1;
-<a name="l00550"></a>00550     
-<a name="l00551"></a>00551     <span class="comment">/* Initialise */</span>
-<a name="l00552"></a>00552     nx = cpl_image_get_size_x(im);
-<a name="l00553"></a>00553     ny = cpl_image_get_size_y(im);
-<a name="l00554"></a>00554     lopos = (int)(ny/4);
-<a name="l00555"></a>00555     hipos = (int)(3*ny/4);
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557     <span class="comment">/* Get the vectors out of the image */</span>
-<a name="l00558"></a>00558     <span class="keywordflow">if</span> ((linehi = cpl_vector_new_from_image_row(im, hipos)) == NULL) {
-<a name="l00559"></a>00559         <span class="keywordflow">return</span> -1;
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561     <span class="keywordflow">if</span> ((linelo = cpl_vector_new_from_image_row(im, lopos)) == NULL) {
-<a name="l00562"></a>00562         cpl_vector_delete(linehi);
-<a name="l00563"></a>00563         <span class="keywordflow">return</span> -1;
-<a name="l00564"></a>00564     }
-<a name="l00565"></a>00565     
-<a name="l00566"></a>00566     <span class="comment">/* Filter the vectors */</span>
-<a name="l00567"></a>00567     <span class="keywordflow">if</span> ((avglinehi = cpl_vector_filter_median_create(linehi, 
-<a name="l00568"></a>00568                     filt_size)) == NULL) {
-<a name="l00569"></a>00569         cpl_vector_delete(linehi);
-<a name="l00570"></a>00570         cpl_vector_delete(linelo);
-<a name="l00571"></a>00571         <span class="keywordflow">return</span> -1;
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573     cpl_vector_delete(linehi);
-<a name="l00574"></a>00574     
-<a name="l00575"></a>00575     <span class="keywordflow">if</span> ((avglinelo = cpl_vector_filter_median_create(linelo, 
-<a name="l00576"></a>00576                     filt_size)) == NULL) {
-<a name="l00577"></a>00577         cpl_vector_delete(linelo);
-<a name="l00578"></a>00578         cpl_vector_delete(avglinehi);
-<a name="l00579"></a>00579         <span class="keywordflow">return</span> -1;
-<a name="l00580"></a>00580     }
-<a name="l00581"></a>00581     cpl_vector_delete(linelo);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583     <span class="comment">/* Average the filtered vectors to get the low freq signal */</span>
-<a name="l00584"></a>00584     cpl_vector_add(avglinehi, avglinelo);
-<a name="l00585"></a>00585     cpl_vector_delete(avglinelo);
-<a name="l00586"></a>00586     cpl_vector_divide_scalar(avglinehi, 2.0);
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588     <span class="comment">/* Subtract the low frequency signal */</span>
-<a name="l00589"></a>00589     pavglinehi = cpl_vector_get_data(avglinehi);
-<a name="l00590"></a>00590     pim = cpl_image_get_data_float(im);
-<a name="l00591"></a>00591     <span class="keywordflow">for</span> (i=0; i<nx; i++) {
-<a name="l00592"></a>00592         <span class="keywordflow">for</span> (j=0; j<ny; j++) {
-<a name="l00593"></a>00593             pim[i+j*nx] -= pavglinehi[i];
-<a name="l00594"></a>00594         }
-<a name="l00595"></a>00595     }
-<a name="l00596"></a>00596     cpl_vector_delete(avglinehi);
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598     <span class="keywordflow">return</span> 0;
-<a name="l00599"></a>00599 }
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00612"></a>00612 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00613"></a>00613 <span class="keyword">static</span>
-<a name="l00614"></a>00614 cpl_error_code irplib_distortion_purge_arcs(cpl_apertures  ** <span class="keyword">self</span>,
-<a name="l00615"></a>00615                                             cpl_image       * lab_im,
-<a name="l00616"></a>00616                                             <span class="keyword">const</span> cpl_image * arc_im,
-<a name="l00617"></a>00617                                             <span class="keywordtype">int</span>               min_arclen,
-<a name="l00618"></a>00618                                             <span class="keywordtype">int</span>               max_arcwidth,
-<a name="l00619"></a>00619                                             <span class="keywordtype">double</span>            arc_sat)
-<a name="l00620"></a>00620 {
-<a name="l00621"></a>00621     <span class="keyword">const</span> <span class="keywordtype">double</span> ycenter = 0.5 * (1 + cpl_image_get_size_y(arc_im));
-<a name="l00622"></a>00622     <span class="keywordtype">int</span>   narcs;
-<a name="l00623"></a>00623     <span class="keywordtype">int</span>   nkeep  = 0;
-<a name="l00624"></a>00624     <span class="keywordtype">int</span>   ifirst = 1;
-<a name="l00625"></a>00625     <span class="keywordtype">int</span> * relabel;
-<a name="l00626"></a>00626     <span class="keywordtype">int</span>   i;
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628     <span class="comment">/* Check entries */</span>
-<a name="l00629"></a>00629     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631     <span class="comment">/* Get number of arcs */</span>
-<a name="l00632"></a>00632     narcs = cpl_apertures_get_size(*<span class="keyword">self</span>);
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634     cpl_ensure_code(narcs  > 0,     CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00635"></a>00635     cpl_ensure_code(cpl_image_get_type(lab_im) == CPL_TYPE_INT,
-<a name="l00636"></a>00636                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638     <span class="comment">/* Allocate relabel array with default relabelling to zero */</span>
-<a name="l00639"></a>00639     relabel = cpl_calloc(narcs, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641     <span class="comment">/* Loop on the different arcs candidates */</span>
-<a name="l00642"></a>00642     <span class="keywordflow">for</span> (i = 0; i < narcs; i++) {
-<a name="l00643"></a>00643         <span class="comment">/* Test if the current object is a valid arc */</span>
-<a name="l00644"></a>00644         <span class="keyword">const</span> <span class="keywordtype">int</span> arclen = 1
-<a name="l00645"></a>00645             + cpl_apertures_get_top(*<span class="keyword">self</span>, i+1)
-<a name="l00646"></a>00646             - cpl_apertures_get_bottom(*<span class="keyword">self</span>, i+1);
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648         <span class="keywordflow">if</span> (cpl_apertures_get_top(*<span class="keyword">self</span>,    i+1) < ycenter) <span class="keywordflow">continue</span>;
-<a name="l00649"></a>00649         <span class="keywordflow">if</span> (cpl_apertures_get_bottom(*<span class="keyword">self</span>, i+1) > ycenter) <span class="keywordflow">continue</span>;
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651         <span class="keywordflow">if</span> (arclen > min_arclen) {
-<a name="l00652"></a>00652             <span class="keyword">const</span> <span class="keywordtype">int</span> arcwidth = 1
-<a name="l00653"></a>00653                 + cpl_apertures_get_right(*<span class="keyword">self</span>, i+1)
-<a name="l00654"></a>00654                 - cpl_apertures_get_left(*<span class="keyword">self</span>, i+1);
-<a name="l00655"></a>00655             <span class="keywordflow">if</span> (arcwidth < max_arcwidth) {
-<a name="l00656"></a>00656                 <span class="keyword">const</span> <span class="keywordtype">int</span> edge = cpl_apertures_get_left_y(*<span class="keyword">self</span>, i+1);
-<a name="l00657"></a>00657                 <span class="keywordflow">if</span> (edge > 0) {
-<a name="l00658"></a>00658                     <span class="keyword">const</span> <span class="keywordtype">double</span> mean = cpl_apertures_get_mean(*<span class="keyword">self</span>, i+1);
-<a name="l00659"></a>00659                     <span class="keywordflow">if</span> (mean < arc_sat) {
-<a name="l00660"></a>00660                         relabel[i] = ++nkeep;
-<a name="l00661"></a>00661                         <span class="comment">/* Relabeling, if any, starts with ifirst */</span>
-<a name="l00662"></a>00662                         <span class="keywordflow">if</span> (nkeep == i+1) ifirst = nkeep;
-<a name="l00663"></a>00663                     }
-<a name="l00664"></a>00664                 }
-<a name="l00665"></a>00665             }
-<a name="l00666"></a>00666         }
-<a name="l00667"></a>00667     }
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669     <span class="keywordflow">if</span> (nkeep < narcs) {
-<a name="l00670"></a>00670         <span class="comment">/* Update the labelised image by erasing non valid arcs */</span>
-<a name="l00671"></a>00671         <span class="keywordtype">int</span>     * plabim = cpl_image_get_data_int(lab_im);
-<a name="l00672"></a>00672         <span class="keyword">const</span> <span class="keywordtype">int</span> npix   = cpl_image_get_size_x(lab_im)
-<a name="l00673"></a>00673             * cpl_image_get_size_y(lab_im);
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675         <span class="keywordflow">if</span> (nkeep == 0) {
-<a name="l00676"></a>00676             cpl_free(relabel);
-<a name="l00677"></a>00677 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00678"></a>00678 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00679"></a>00679                                          <span class="stringliteral">"All %d arc(s) are invalid"</span>, narcs);
-<a name="l00680"></a>00680 <span class="preprocessor">#else</span>
-<a name="l00681"></a>00681 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00682"></a>00682                                          <span class="stringliteral">"All arcs are invalid"</span>);
-<a name="l00683"></a>00683 <span class="preprocessor">#endif</span>
-<a name="l00684"></a>00684 <span class="preprocessor"></span>        }
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686         <span class="keywordflow">for</span> (i = 0; i < npix; i++) {
-<a name="l00687"></a>00687             <span class="keyword">const</span> <span class="keywordtype">int</span> label = plabim[i];
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689             <span class="keywordflow">if</span> (label < 0 || label > narcs) <span class="keywordflow">break</span>;
-<a name="l00690"></a>00690             <span class="keywordflow">if</span> (label >= ifirst) plabim[i] = relabel[label-1];
-<a name="l00691"></a>00691         }
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693         <span class="keywordflow">if</span> (i < npix) {
-<a name="l00694"></a>00694             <span class="comment">/* lab_im is not a valid label image */</span>
-<a name="l00695"></a>00695             cpl_free(relabel);
-<a name="l00696"></a>00696             <span class="keywordflow">return</span> cpl_error_set(cpl_func, plabim[i] < 0
-<a name="l00697"></a>00697                                          ? CPL_ERROR_ILLEGAL_INPUT
-<a name="l00698"></a>00698                                          : CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00699"></a>00699         }
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701         <span class="comment">/* Purge the bad arcs */</span>
-<a name="l00702"></a>00702         cpl_apertures_delete(*<span class="keyword">self</span>);
-<a name="l00703"></a>00703         *<span class="keyword">self</span> = cpl_apertures_new_from_image(arc_im, lab_im);
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705     }
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707     cpl_free(relabel);
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709     cpl_msg_info(cpl_func, <span class="stringliteral">"Purged %d of %d arcs (1st purged=%d)"</span>, narcs - nkeep,
-<a name="l00710"></a>00710                  narcs, ifirst);
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712     <span class="comment">/* arc_im may be invalid */</span>
-<a name="l00713"></a>00713     cpl_ensure_code(*<span class="keyword">self</span> != NULL, cpl_error_get_code());
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00716"></a>00716 }
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00733"></a>00733 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00734"></a>00734 <span class="keyword">static</span> cpl_error_code
-<a name="l00735"></a>00735 irplib_distortion_fill_arc_positions(cpl_bivector        * grid,
-<a name="l00736"></a>00736                                      cpl_vector          * fitvalues,
-<a name="l00737"></a>00737                                      <span class="keyword">const</span> cpl_image     * in,
-<a name="l00738"></a>00738                                      <span class="keyword">const</span> cpl_image     * label_im,
-<a name="l00739"></a>00739                                      <span class="keyword">const</span> cpl_apertures * det)
-<a name="l00740"></a>00740 {
-<a name="l00741"></a>00741     <span class="keyword">const</span> <span class="keywordtype">int</span>    narcs = cpl_apertures_get_size(det);
-<a name="l00742"></a>00742     <span class="keywordtype">int</span>          nfitvals = cpl_vector_get_size(fitvalues);
-<a name="l00743"></a>00743     <span class="keyword">const</span> <span class="keywordtype">int</span>    nx = cpl_image_get_size_x(label_im);
-<a name="l00744"></a>00744     <span class="keyword">const</span> <span class="keywordtype">int</span>    ny = cpl_image_get_size_y(label_im);
-<a name="l00745"></a>00745     cpl_image  * filt_img;
-<a name="l00746"></a>00746     cpl_mask   * kernel;
-<a name="l00747"></a>00747     cpl_vector * gridx = cpl_bivector_get_x(grid);
-<a name="l00748"></a>00748     cpl_vector * gridy = cpl_bivector_get_y(grid);
-<a name="l00749"></a>00749     cpl_polynomial* dist1d;
-<a name="l00750"></a>00750     cpl_matrix * dist1dx = NULL;
-<a name="l00751"></a>00751     cpl_vector * dist1dy = NULL;
-<a name="l00752"></a>00752     <span class="keywordtype">double</span>     * dgridx;
-<a name="l00753"></a>00753     <span class="keywordtype">double</span>     * dgridy;
-<a name="l00754"></a>00754     <span class="keywordtype">double</span>     * dfitv;
-<a name="l00755"></a>00755     <span class="keywordtype">int</span>          ndone = 0;
-<a name="l00756"></a>00756     <span class="keywordtype">int</span>          i, obj;
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     cpl_ensure_code(nfitvals > 0,      CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00759"></a>00759     cpl_ensure_code(narcs    > 0,      CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00760"></a>00760     cpl_ensure_code(cpl_image_get_type(label_im) == CPL_TYPE_INT,
-<a name="l00761"></a>00761                     CPL_ERROR_TYPE_MISMATCH);
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763     <span class="comment">/* Ensure space for output */</span>
-<a name="l00764"></a>00764     <span class="keywordflow">if</span> (nfitvals < narcs * ny) {
-<a name="l00765"></a>00765         nfitvals = narcs * ny;
-<a name="l00766"></a>00766         cpl_vector_set_size(fitvalues, nfitvals);
-<a name="l00767"></a>00767     }
-<a name="l00768"></a>00768     <span class="keywordflow">if</span> (cpl_vector_get_size(gridx) < nfitvals ||
-<a name="l00769"></a>00769         cpl_vector_get_size(gridy) < nfitvals) {
-<a name="l00770"></a>00770         cpl_vector_set_size(gridx, nfitvals);
-<a name="l00771"></a>00771         cpl_vector_set_size(gridy, nfitvals);
-<a name="l00772"></a>00772     }
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774     <span class="comment">/* Get data after resizing */</span>
-<a name="l00775"></a>00775     dgridx = cpl_vector_get_data(gridx);
-<a name="l00776"></a>00776     dgridy = cpl_vector_get_data(gridy);
-<a name="l00777"></a>00777     dfitv  = cpl_vector_get_data(fitvalues);
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779     <span class="comment">/* Median filter on input image */</span>
-<a name="l00780"></a>00780     kernel = cpl_mask_new(3, 3);
-<a name="l00781"></a>00781     cpl_mask_not(kernel);
-<a name="l00782"></a>00782     filt_img = cpl_image_new(nx, ny, cpl_image_get_type(in));
-<a name="l00783"></a>00783     cpl_image_filter_mask(filt_img, in, kernel, CPL_FILTER_MEDIAN,
-<a name="l00784"></a>00784                                                 CPL_BORDER_FILTER);
-<a name="l00785"></a>00785     cpl_mask_delete(kernel);
-<a name="l00786"></a>00786 
-<a name="l00787"></a>00787     dist1d = cpl_polynomial_new(1);
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789     <span class="keywordflow">for</span> (obj = 0; obj < narcs; obj++) {
-<a name="l00790"></a>00790         <span class="comment">/* Find the reference X-coordinate for the arc */</span>
-<a name="l00791"></a>00791         <span class="keyword">const</span> <span class="keywordtype">int</span>  * plabel_im = cpl_image_get_data_int_const(label_im);
-<a name="l00792"></a>00792         <span class="keyword">const</span> <span class="keywordtype">int</span>    ndist1d = cpl_apertures_get_top(det, obj+1)
-<a name="l00793"></a>00793             - cpl_apertures_get_bottom(det, obj+1) + 1;
-<a name="l00794"></a>00794         cpl_boolean sampsym = CPL_TRUE;
-<a name="l00795"></a>00795         <span class="keywordtype">int</span>         j, prevj = 0;
-<a name="l00796"></a>00796         <span class="keywordtype">int</span>         k = 0;
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798         (void)cpl_matrix_unwrap(dist1dx);
-<a name="l00799"></a>00799         (void)cpl_vector_unwrap(dist1dy);
-<a name="l00800"></a>00800         dist1dx = cpl_matrix_wrap(1, ndist1d, dgridy + ndone);
-<a name="l00801"></a>00801         dist1dy = cpl_vector_wrap(ndist1d, dfitv  + ndone);
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803         <span class="comment">/* Find out the X coord. at all Y positions on the arc */</span>
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805         <span class="keywordflow">for</span> (j = cpl_apertures_get_bottom(det, obj+1)-1;
-<a name="l00806"></a>00806              j < cpl_apertures_get_top(det, obj+1); j++) {
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808             <span class="keywordflow">for</span> (i = 0; i < nx; i++) {
-<a name="l00809"></a>00809                 <span class="keywordflow">if</span> (plabel_im[i + j * nx] == obj + 1) <span class="keywordflow">break</span>;
-<a name="l00810"></a>00810             }
-<a name="l00811"></a>00811             <span class="keywordflow">if</span> (i < nx) {
-<a name="l00812"></a>00812                 <span class="comment">/* Found 1st pixel of aperture obj+1 in row j+1 */</span>
-<a name="l00813"></a>00813                 cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815                 <span class="keyword">const</span> <span class="keywordtype">double</span> x_finepos
-<a name="l00816"></a>00816                     = irplib_distortion_get_row_centroid(filt_img, label_im,
-<a name="l00817"></a>00817                                                          i, j);
-<a name="l00818"></a>00818                 <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {
-<a name="l00819"></a>00819                     irplib_error_recover(prestate, <span class="stringliteral">"Could not find X-position "</span>
-<a name="l00820"></a>00820                                          <span class="stringliteral">"for line %d at y=%d (x=%d)"</span>,
-<a name="l00821"></a>00821                                          obj+1, j+1, i+1);
-<a name="l00822"></a>00822                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x_finepos >= 0.0) {
-<a name="l00823"></a>00823                     cpl_matrix_set(dist1dx, 0, k, 1.0 + j);
-<a name="l00824"></a>00824                     cpl_vector_set(dist1dy, k, 1.0 + x_finepos);
-<a name="l00825"></a>00825                     <span class="keywordflow">if</span> (k > 0 && j != 1 + prevj) sampsym = CPL_FALSE;
-<a name="l00826"></a>00826                     prevj = j;
-<a name="l00827"></a>00827                     k++;
-<a name="l00828"></a>00828                 }
-<a name="l00829"></a>00829             }
-<a name="l00830"></a>00830         }
-<a name="l00831"></a>00831         <span class="keywordflow">if</span> (k > 0) {
-<a name="l00832"></a>00832             <span class="keywordtype">double</span> ref_xpos, grad;
-<a name="l00833"></a>00833             cpl_error_code error;
-<a name="l00834"></a>00834             <span class="keyword">const</span> cpl_boolean did_drop = k != ndist1d;
-<a name="l00835"></a>00835             <span class="keyword">const</span> cpl_size mindeg = 0;
-<a name="l00836"></a>00836             <span class="keyword">const</span> cpl_size maxdeg = 2;
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838             <span class="keywordflow">if</span> (did_drop) {
-<a name="l00839"></a>00839                 <span class="comment">/* Set correct size */</span>
-<a name="l00840"></a>00840                 dist1dx = cpl_matrix_wrap(1, k, cpl_matrix_unwrap(dist1dx));
-<a name="l00841"></a>00841                 dist1dy = cpl_vector_wrap(k, cpl_vector_unwrap(dist1dy));
-<a name="l00842"></a>00842             }
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844             error = cpl_polynomial_fit(dist1d, dist1dx, &sampsym, dist1dy, NULL,
-<a name="l00845"></a>00845                              CPL_FALSE, &mindeg, &maxdeg);
-<a name="l00846"></a>00846             <span class="keywordflow">if</span> (error) {
-<a name="l00847"></a>00847                 cpl_msg_error(cpl_func, <span class="stringliteral">"1D-fit failed"</span>);
-<a name="l00848"></a>00848                 <span class="keywordflow">break</span>;
-<a name="l00849"></a>00849             }
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851             ref_xpos = cpl_polynomial_eval_1d(dist1d, 0.5 * (ny + 1), &grad);
-<a name="l00852"></a>00852 
-<a name="l00853"></a>00853             <span class="keywordflow">for</span> (j = cpl_apertures_get_bottom(det, obj+1)-1;
-<a name="l00854"></a>00854                  j < cpl_apertures_get_top(det, obj+1); j++) {
-<a name="l00855"></a>00855                 <span class="keyword">const</span> <span class="keywordtype">double</span> xpos = cpl_polynomial_eval_1d(dist1d, j+1.0, NULL);
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857                 dfitv [ndone] = xpos;
-<a name="l00858"></a>00858                 dgridx[ndone] = ref_xpos;
-<a name="l00859"></a>00859                 <span class="comment">/* Wrapping dist1dx does _not_ take care of dgridy,</span>
-<a name="l00860"></a>00860 <span class="comment">                   in case of "Could not find X-position " */</span>
-<a name="l00861"></a>00861                 <span class="keywordflow">if</span> (did_drop)
-<a name="l00862"></a>00862                     dgridy[ndone] = 1.0 + j;
-<a name="l00863"></a>00863                 ndone++;
-<a name="l00864"></a>00864             }
-<a name="l00865"></a>00865             cpl_msg_info(cpl_func, <span class="stringliteral">"Line %d has center gradient %g"</span>, obj+1,
-<a name="l00866"></a>00866                          grad);
-<a name="l00867"></a>00867         }
-<a name="l00868"></a>00868     }
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870     cpl_image_delete(filt_img);
-<a name="l00871"></a>00871     cpl_polynomial_delete(dist1d);
-<a name="l00872"></a>00872     (void)cpl_matrix_unwrap(dist1dx);
-<a name="l00873"></a>00873     (void)cpl_vector_unwrap(dist1dy);
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875     cpl_msg_info(cpl_func, <span class="stringliteral">"Found %d fitting points ("</span>
-<a name="l00876"></a>00876                  <span class="stringliteral">"expected up to %d points)"</span>, ndone, nfitvals);
-<a name="l00877"></a>00877 
-<a name="l00878"></a>00878     cpl_ensure_code(obj == narcs, cpl_error_get_code());
-<a name="l00879"></a>00879 
-<a name="l00880"></a>00880     cpl_ensure_code(ndone > 0, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882     cpl_vector_set_size(fitvalues, ndone);
-<a name="l00883"></a>00883     cpl_vector_set_size(gridx, ndone);
-<a name="l00884"></a>00884     cpl_vector_set_size(gridy, ndone);
-<a name="l00885"></a>00885 
-<a name="l00886"></a>00886     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00887"></a>00887 }
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00899"></a>00899 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00900"></a>00900 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_distortion_get_row_centroid(<span class="keyword">const</span> cpl_image * im,
-<a name="l00901"></a>00901                                                  <span class="keyword">const</span> cpl_image * label_im,
-<a name="l00902"></a>00902                                                  <span class="keywordtype">int</span>               x,
-<a name="l00903"></a>00903                                                  <span class="keywordtype">int</span>               y)
-<a name="l00904"></a>00904 {
-<a name="l00905"></a>00905     <span class="keyword">const</span> <span class="keywordtype">int</span>     nx        = cpl_image_get_size_x(im);
-<a name="l00906"></a>00906     <span class="keyword">const</span> <span class="keywordtype">int</span>     ny        = cpl_image_get_size_y(im);
-<a name="l00907"></a>00907     <span class="keyword">const</span> <span class="keywordtype">int</span>     ynx       = y * nx;
-<a name="l00908"></a>00908     <span class="keyword">const</span> <span class="keywordtype">float</span> * pim       = cpl_image_get_data_float_const(im);
-<a name="l00909"></a>00909     <span class="keyword">const</span> <span class="keywordtype">int</span>   * plabel_im = cpl_image_get_data_int_const(label_im);
-<a name="l00910"></a>00910     <span class="keywordtype">int</span>           firstpos = -1;
-<a name="l00911"></a>00911     <span class="keywordtype">int</span>           lastpos  = -1;
-<a name="l00912"></a>00912     <span class="keywordtype">int</span>           maxpos   = x;
-<a name="l00913"></a>00913     <span class="keywordtype">int</span>           objnum;
-<a name="l00914"></a>00914     <span class="keywordtype">double</span>        wsum = 0.0;
-<a name="l00915"></a>00915     <span class="keywordtype">double</span>        sum  = 0.0;
-<a name="l00916"></a>00916     <span class="keywordtype">double</span>        max  = 0.0;
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918     cpl_ensure(pim       != NULL, cpl_error_get_code(),    -1.0);
-<a name="l00919"></a>00919     cpl_ensure(plabel_im != NULL, cpl_error_get_code(),    -2.0);
-<a name="l00920"></a>00920     cpl_ensure(x         >= 0,    CPL_ERROR_ILLEGAL_INPUT, -3.0);
-<a name="l00921"></a>00921     cpl_ensure(y         >= 0,    CPL_ERROR_ILLEGAL_INPUT, -4.0);
-<a name="l00922"></a>00922     cpl_ensure(x         <  nx,   CPL_ERROR_ILLEGAL_INPUT, -5.0);
-<a name="l00923"></a>00923     cpl_ensure(y         <  ny,   CPL_ERROR_ILLEGAL_INPUT, -6.0);
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925     max    = (double)pim[x + ynx];
-<a name="l00926"></a>00926     objnum = plabel_im[x + ynx];
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     <span class="comment">/* While we stay in the same object... */</span>
-<a name="l00929"></a>00929     <span class="keywordflow">do</span> {
-<a name="l00930"></a>00930         <span class="keyword">const</span> <span class="keywordtype">double</span> val = (double)pim[x + ynx];
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932         <span class="keywordflow">if</span> (val > 0.0) { <span class="comment">/* FIXME: Handle this exception better */</span>
-<a name="l00933"></a>00933             wsum += x * val;
-<a name="l00934"></a>00934             sum += val;
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936             <span class="keywordflow">if</span> (firstpos < 0) firstpos = x;
-<a name="l00937"></a>00937             lastpos = x;
-<a name="l00938"></a>00938 
-<a name="l00939"></a>00939             <span class="keywordflow">if</span> (val > max) {
-<a name="l00940"></a>00940                 max = val;
-<a name="l00941"></a>00941                 maxpos = x;
-<a name="l00942"></a>00942             }
-<a name="l00943"></a>00943         }
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946         <span class="comment">/* Next point */</span>
-<a name="l00947"></a>00947         x++;
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949     } <span class="keywordflow">while</span> (x < nx && objnum == plabel_im[x + ynx]);
-<a name="l00950"></a>00950 
-<a name="l00951"></a>00951     cpl_ensure(sum > 0.0, CPL_ERROR_DATA_NOT_FOUND, -7.0);
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953     <span class="comment">/*</span>
-<a name="l00954"></a>00954 <span class="comment">       assert( 0 <= maxpos && maxpos < nx );</span>
-<a name="l00955"></a>00955 <span class="comment">       assert( objnum == plabel_im[maxpos + ynx] );</span>
-<a name="l00956"></a>00956 <span class="comment">       assert( wsum >= 0.0 );</span>
-<a name="l00957"></a>00957 <span class="comment">    */</span>
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959     <span class="keywordflow">return</span> (wsum < sum * firstpos || wsum > sum * lastpos)
-<a name="l00960"></a>00960         ? maxpos : wsum / sum;
-<a name="l00961"></a>00961 }
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00969"></a>00969 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00970"></a>00970 <span class="preprocessor">#define IS_NB_TESTPOINTS    8</span>
-<a name="l00971"></a>00971 <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_SLOPE        0.01</span>
-<a name="l00972"></a>00972 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_SLOPE_DIF    0.075</span>
-<a name="l00973"></a>00973 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_FIT_EDGE_DIF 0.05</span>
-<a name="l00974"></a>00974 <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_RAMP         10.0</span>
-<a name="l00975"></a>00975 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR        13.0</span>
-<a name="l00976"></a>00976 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR_DIF    8.0</span>
-<a name="l00977"></a>00977 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_INTER_DIF    20.0</span>
-<a name="l00978"></a>00978 <span class="preprocessor"></span><span class="preprocessor">#define IS_SKIPZONE         2.5</span>
-<a name="l00979"></a>00979 <span class="preprocessor"></span><span class="preprocessor">#define SQR(x) ((x)*(x))</span>
-<a name="l00980"></a>00980 <span class="preprocessor"></span><span class="keyword">static</span> cpl_image * irplib_distortion_remove_ramp(<span class="keyword">const</span> cpl_image * in) 
-<a name="l00981"></a>00981 {
-<a name="l00982"></a>00982     <span class="keywordtype">int</span>                 ramp_present;
-<a name="l00983"></a>00983     <span class="keyword">const</span> <span class="keywordtype">int</span>           nx = cpl_image_get_size_x(in);
-<a name="l00984"></a>00984     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(in);
-<a name="l00985"></a>00985     <span class="keyword">const</span> <span class="keywordtype">int</span>           yhi = (int)(ny/2);
-<a name="l00986"></a>00986     <span class="keyword">const</span> <span class="keywordtype">int</span>           ylo = yhi - 1;
-<a name="l00987"></a>00987     <span class="keywordtype">int</span>                 y;
-<a name="l00988"></a>00988     cpl_vector      *   tmp_vector;
-<a name="l00989"></a>00989     cpl_bivector    *   testpointlo;
-<a name="l00990"></a>00990     <span class="keywordtype">double</span>          *   testpointlo_x;
-<a name="l00991"></a>00991     <span class="keywordtype">double</span>          *   testpointlo_y;
-<a name="l00992"></a>00992     cpl_bivector    *   testpointhi;
-<a name="l00993"></a>00993     <span class="keywordtype">double</span>          *   testpointhi_x;
-<a name="l00994"></a>00994     <span class="keywordtype">double</span>          *   testpointhi_y;
-<a name="l00995"></a>00995     <span class="keyword">const</span> <span class="keywordtype">int</span>           spacing = ny / (IS_SKIPZONE*IS_NB_TESTPOINTS);
-<a name="l00996"></a>00996     <span class="keywordtype">double</span>              rampdif, fitslope;
-<a name="l00997"></a>00997     <span class="keywordtype">double</span>          *   pol_coefhi,
-<a name="l00998"></a>00998                     *   pol_coeflo;
-<a name="l00999"></a>00999     cpl_vector      *   median;
-<a name="l01000"></a>01000     <span class="keywordtype">double</span>          *   median_data;
-<a name="l01001"></a>01001     <span class="keywordtype">double</span>              medianerrlo, medianerrhi;
-<a name="l01002"></a>01002     <span class="keywordtype">double</span>              slope;
-<a name="l01003"></a>01003     cpl_image       *   out;
-<a name="l01004"></a>01004     <span class="keywordtype">float</span>           *   pout;
-<a name="l01005"></a>01005     <span class="keywordtype">float</span>               val;
-<a name="l01006"></a>01006     <span class="keywordtype">int</span>                 i, j;
-<a name="l01007"></a>01007 
-<a name="l01008"></a>01008     cpl_ensure(cpl_image_get_type(in) == CPL_TYPE_FLOAT,
-<a name="l01009"></a>01009                CPL_ERROR_UNSUPPORTED_MODE, NULL);
-<a name="l01010"></a>01010                     
-<a name="l01011"></a>01011     <span class="keywordflow">if</span> (ny < IS_SKIPZONE * IS_NB_TESTPOINTS){
-<a name="l01012"></a>01012 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01013"></a>01013 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l01014"></a>01014                               <span class="stringliteral">"image has %d lines, min="</span>
-<a name="l01015"></a>01015                               IRPLIB_STRINGIFY(IS_SKIPZONE) <span class="stringliteral">"*"</span>
-<a name="l01016"></a>01016                               IRPLIB_STRINGIFY(IS_NB_TESTPOINTS), ny);
-<a name="l01017"></a>01017 <span class="preprocessor">#else</span>
-<a name="l01018"></a>01018 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l01019"></a>01019                               <span class="stringliteral">"image has too few lines, min="</span>
-<a name="l01020"></a>01020                               IRPLIB_STRINGIFY(IS_SKIPZONE) <span class="stringliteral">"*"</span>
-<a name="l01021"></a>01021                               IRPLIB_STRINGIFY(IS_NB_TESTPOINTS));
-<a name="l01022"></a>01022 <span class="preprocessor">#endif</span>
-<a name="l01023"></a>01023 <span class="preprocessor"></span>        <span class="keywordflow">return</span> NULL;
-<a name="l01024"></a>01024     }
-<a name="l01025"></a>01025     
-<a name="l01026"></a>01026     <span class="comment">/* Fill the vectors */</span>
-<a name="l01027"></a>01027     testpointhi = cpl_bivector_new(IS_NB_TESTPOINTS);
-<a name="l01028"></a>01028     testpointhi_x = cpl_bivector_get_x_data(testpointhi);
-<a name="l01029"></a>01029     testpointhi_y = cpl_bivector_get_y_data(testpointhi);
-<a name="l01030"></a>01030     testpointlo = cpl_bivector_new(IS_NB_TESTPOINTS);
-<a name="l01031"></a>01031     testpointlo_x = cpl_bivector_get_x_data(testpointlo);
-<a name="l01032"></a>01032     testpointlo_y = cpl_bivector_get_y_data(testpointlo);
-<a name="l01033"></a>01033     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {
-<a name="l01034"></a>01034         y = yhi + i * spacing;
-<a name="l01035"></a>01035         tmp_vector = cpl_vector_new_from_image_row(in, y+1);
-<a name="l01036"></a>01036         testpointhi_x[i] = y - ny / 2;
-<a name="l01037"></a>01037         testpointhi_y[i] = cpl_vector_get_median_const(tmp_vector);
-<a name="l01038"></a>01038         cpl_vector_delete(tmp_vector);
-<a name="l01039"></a>01039         y = ylo - i * spacing;
-<a name="l01040"></a>01040         tmp_vector = cpl_vector_new_from_image_row(in, y+1);
-<a name="l01041"></a>01041         testpointlo_x[IS_NB_TESTPOINTS-i-1] = y;
-<a name="l01042"></a>01042         testpointlo_y[IS_NB_TESTPOINTS-i-1]=cpl_vector_get_median_const(tmp_vector);
-<a name="l01043"></a>01043         cpl_vector_delete(tmp_vector);
-<a name="l01044"></a>01044     }
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046     <span class="comment">/* Apply the fit */</span>
-<a name="l01047"></a>01047     pol_coefhi = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointhi_x,
-<a name="l01048"></a>01048             testpointhi_y, IS_NB_TESTPOINTS);
-<a name="l01049"></a>01049     pol_coeflo = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointlo_x, 
-<a name="l01050"></a>01050             testpointlo_y, IS_NB_TESTPOINTS);
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052     <span class="comment">/* Compute the errors */</span>
-<a name="l01053"></a>01053     median = cpl_vector_new(IS_NB_TESTPOINTS);
-<a name="l01054"></a>01054     median_data = cpl_vector_get_data(median);
-<a name="l01055"></a>01055     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {
-<a name="l01056"></a>01056         median_data[i]=SQR(testpointhi_y[i]
-<a name="l01057"></a>01057                 - pol_coefhi[0] - pol_coefhi[1] * testpointhi_x[i]);
-<a name="l01058"></a>01058     }
-<a name="l01059"></a>01059     medianerrhi = cpl_vector_get_median(median);
-<a name="l01060"></a>01060     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {
-<a name="l01061"></a>01061         median_data[i]=SQR(testpointlo_y[i]
-<a name="l01062"></a>01062                 - pol_coeflo[0] - pol_coeflo[1] * testpointlo_x[i]);
-<a name="l01063"></a>01063     }
-<a name="l01064"></a>01064     medianerrlo = cpl_vector_get_median(median);
-<a name="l01065"></a>01065     cpl_vector_delete(median);
-<a name="l01066"></a>01066     rampdif = testpointlo_y[IS_NB_TESTPOINTS-1] - testpointhi_y[0];
-<a name="l01067"></a>01067     slope = rampdif / (ny/2.0);
-<a name="l01068"></a>01068     fitslope = (pol_coefhi[1] + pol_coeflo[1]) / 2.0;
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070     cpl_bivector_delete(testpointlo);
-<a name="l01071"></a>01071     cpl_bivector_delete(testpointhi);
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073     <span class="comment">/* Decide if there is a ramp or not  */</span>
-<a name="l01074"></a>01074     <span class="keywordflow">if</span> (fabs(rampdif)<IS_MIN_RAMP ||
-<a name="l01075"></a>01075             fabs(pol_coefhi[1]) < IS_MIN_SLOPE ||
-<a name="l01076"></a>01076             fabs(pol_coeflo[1]) < IS_MIN_SLOPE ||
-<a name="l01077"></a>01077             pol_coefhi[1]/pol_coeflo[1]<0.5 ||
-<a name="l01078"></a>01078             pol_coefhi[1]/pol_coeflo[1]>2.0 ||
-<a name="l01079"></a>01079             fabs(pol_coefhi[1]-pol_coeflo[1])>IS_MAX_SLOPE_DIF ||
-<a name="l01080"></a>01080             fabs(pol_coefhi[0]-pol_coeflo[0]) > IS_MAX_INTER_DIF ||
-<a name="l01081"></a>01081             medianerrlo> IS_MAX_MNERR ||
-<a name="l01082"></a>01082             medianerrhi> IS_MAX_MNERR ||
-<a name="l01083"></a>01083             fabs(medianerrlo-medianerrhi) >IS_MAX_MNERR_DIF ||
-<a name="l01084"></a>01084             fabs(slope-fitslope) > IS_MAX_FIT_EDGE_DIF ||
-<a name="l01085"></a>01085             slope/fitslope<0.5 ||
-<a name="l01086"></a>01086             slope/fitslope>2.0) ramp_present = 0;
-<a name="l01087"></a>01087     <span class="keywordflow">else</span> ramp_present = 1;
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089     cpl_free(pol_coeflo);
-<a name="l01090"></a>01090     cpl_free(pol_coefhi);
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092     <span class="comment">/* Correct the ramp if it is there */</span>
-<a name="l01093"></a>01093     out = cpl_image_duplicate(in);
-<a name="l01094"></a>01094     pout = cpl_image_get_data_float(out);
-<a name="l01095"></a>01095     <span class="keywordflow">if</span> (ramp_present == 1) {
-<a name="l01096"></a>01096         <span class="keywordflow">for</span> (j=0; j<ny/2; j++) {
-<a name="l01097"></a>01097             val = slope * (j-ny/2);
-<a name="l01098"></a>01098             <span class="keywordflow">for</span> (i=0; i<nx; i++)
-<a name="l01099"></a>01099                 pout[i+j*nx] -= val;
-<a name="l01100"></a>01100         }
-<a name="l01101"></a>01101         <span class="keywordflow">for</span> (j=ny/2; j<ny; j++) {
-<a name="l01102"></a>01102             val = slope * (j-ny);
-<a name="l01103"></a>01103             <span class="keywordflow">for</span> (i=0; i<nx; i++)
-<a name="l01104"></a>01104                 pout[i+j*nx] -= val;
-<a name="l01105"></a>01105         }
-<a name="l01106"></a>01106 
-<a name="l01107"></a>01107     }
-<a name="l01108"></a>01108 
-<a name="l01109"></a>01109     <span class="keywordflow">return</span> out;
-<a name="l01110"></a>01110 }
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01126"></a>01126 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01127"></a>01127 <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image * <span class="keyword">self</span>,
-<a name="l01128"></a>01128                                                    <span class="keyword">const</span> cpl_image * other,
-<a name="l01129"></a>01129                                                    <span class="keywordtype">int</span> hsize,
-<a name="l01130"></a>01130                                                    cpl_boolean vertical)
-<a name="l01131"></a>01131 {
-<a name="l01132"></a>01132     <span class="keyword">const</span> <span class="keywordtype">int</span>      nx = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l01133"></a>01133     <span class="keyword">const</span> <span class="keywordtype">int</span>      ny = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l01134"></a>01134     <span class="keyword">const</span> <span class="keywordtype">int</span>      msize = 1 + 2 * hsize;
-<a name="l01135"></a>01135     cpl_mask     * mask;
-<a name="l01136"></a>01136     cpl_image    * background;
-<a name="l01137"></a>01137     cpl_error_code error = CPL_ERROR_NONE;
-<a name="l01138"></a>01138 
-<a name="l01139"></a>01139     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01140"></a>01140     cpl_ensure_code(hsize >= 0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01141"></a>01141 
-<a name="l01142"></a>01142     <span class="keywordflow">if</span> (other == NULL) other = <span class="keyword">self</span>;
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144     mask = vertical ? cpl_mask_new(msize, 1) : cpl_mask_new(1, msize);
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146     error |= cpl_mask_not(mask);
-<a name="l01147"></a>01147 
-<a name="l01148"></a>01148     background = cpl_image_new(nx, ny, cpl_image_get_type(other));
-<a name="l01149"></a>01149 
-<a name="l01150"></a>01150     error |= cpl_image_filter_mask(background, other, mask, CPL_FILTER_MEDIAN,
-<a name="l01151"></a>01151                                    CPL_BORDER_FILTER);
-<a name="l01152"></a>01152     cpl_mask_delete(mask);
-<a name="l01153"></a>01153 
-<a name="l01154"></a>01154     <span class="keywordflow">if</span> (<span class="keyword">self</span> != other) {
-<a name="l01155"></a>01155         error |= cpl_image_copy(<span class="keyword">self</span>, other, 1, 1);
-<a name="l01156"></a>01156     }
-<a name="l01157"></a>01157 
-<a name="l01158"></a>01158     error |= cpl_image_subtract(<span class="keyword">self</span>, background);
-<a name="l01159"></a>01159     cpl_image_delete(background);
-<a name="l01160"></a>01160 
-<a name="l01161"></a>01161     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;
-<a name="l01162"></a>01162 }
-<a name="l01163"></a>01163 
-<a name="l01164"></a>01164 
-<a name="l01165"></a>01165 
-<a name="l01191"></a>01191 <span class="keyword">static</span> cpl_matrix * irplib_matrix_product_normal_create(<span class="keyword">const</span> cpl_matrix * <span class="keyword">self</span>)
-<a name="l01192"></a>01192 {
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194     <span class="keywordtype">double</span>         sum;
-<a name="l01195"></a>01195     cpl_matrix   * product;
-<a name="l01196"></a>01196     <span class="keyword">const</span> <span class="keywordtype">double</span> * ai = cpl_matrix_get_data_const(<span class="keyword">self</span>);
-<a name="l01197"></a>01197     <span class="keyword">const</span> <span class="keywordtype">double</span> * aj;
-<a name="l01198"></a>01198     <span class="keywordtype">double</span>       * bwrite;
-<a name="l01199"></a>01199     <span class="keyword">const</span> <span class="keywordtype">int</span>      m = cpl_matrix_get_nrow(<span class="keyword">self</span>);
-<a name="l01200"></a>01200     <span class="keyword">const</span> <span class="keywordtype">int</span>      n = cpl_matrix_get_ncol(<span class="keyword">self</span>);
-<a name="l01201"></a>01201     <span class="keywordtype">int</span>            i, j, k;
-<a name="l01202"></a>01202 
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206 <span class="preprocessor">#if 0</span>
-<a name="l01207"></a>01207 <span class="preprocessor"></span>    <span class="comment">/* Initialize all values to zero.</span>
-<a name="l01208"></a>01208 <span class="comment">       This is done to avoid access of uninitilized memory,  in case</span>
-<a name="l01209"></a>01209 <span class="comment">       someone passes the matrix to for example cpl_matrix_dump(). */</span>
-<a name="l01210"></a>01210     product = cpl_matrix_new(m, m);
-<a name="l01211"></a>01211     bwrite = cpl_matrix_get_data(product);
-<a name="l01212"></a>01212 <span class="preprocessor">#else</span>
-<a name="l01213"></a>01213 <span class="preprocessor"></span>    bwrite = (<span class="keywordtype">double</span> *) cpl_malloc(m * m * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01214"></a>01214     product = cpl_matrix_wrap(m, m, bwrite);
-<a name="l01215"></a>01215 <span class="preprocessor">#endif</span>
-<a name="l01216"></a>01216 <span class="preprocessor"></span>
-<a name="l01217"></a>01217     <span class="comment">/* The result at (i,j) is the dot-product of i'th and j'th row */</span>
-<a name="l01218"></a>01218     <span class="keywordflow">for</span> (i = 0; i < m; i++, bwrite += m, ai += n) {
-<a name="l01219"></a>01219         aj = ai; <span class="comment">/* aj points to first entry in j'th row */</span>
-<a name="l01220"></a>01220         <span class="keywordflow">for</span> (j = i; j < m; j++, aj += n) {
-<a name="l01221"></a>01221             sum = 0.0;
-<a name="l01222"></a>01222             <span class="keywordflow">for</span> (k = 0; k < n; k++) {
-<a name="l01223"></a>01223                 sum += ai[k] * aj[k];
-<a name="l01224"></a>01224             }
-<a name="l01225"></a>01225             bwrite[j] = sum;
-<a name="l01226"></a>01226         }
-<a name="l01227"></a>01227     }
-<a name="l01228"></a>01228 
-<a name="l01229"></a>01229     <span class="keywordflow">return</span> product;
-<a name="l01230"></a>01230 
-<a name="l01231"></a>01231 }
-<a name="l01232"></a>01232 
-<a name="l01233"></a>01233 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01247"></a>01247 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01248"></a>01248 <span class="keyword">static</span> cpl_error_code irplib_polynomial_fit_2d(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l01249"></a>01249                                                <span class="keyword">const</span> cpl_bivector * xy_pos,
-<a name="l01250"></a>01250                                                <span class="keyword">const</span> cpl_vector * values,
-<a name="l01251"></a>01251                                                <span class="keywordtype">int</span> degree, <span class="keywordtype">double</span> fixy,
-<a name="l01252"></a>01252                                                <span class="keywordtype">double</span> * mse)
-<a name="l01253"></a>01253 {
-<a name="l01254"></a>01254 
-<a name="l01255"></a>01255     <span class="keyword">const</span> <span class="keywordtype">int</span>        np = cpl_bivector_get_size(xy_pos);
-<a name="l01256"></a>01256     <span class="comment">/* Number of unknowns to determine in one dimension */</span>
-<a name="l01257"></a>01257     <span class="keyword">const</span> <span class="keywordtype">int</span>        nc1 = 1+degree;
-<a name="l01258"></a>01258     <span class="comment">/* Number of unknowns to determine */</span>
-<a name="l01259"></a>01259     <span class="comment">/* P_{i,0} = 0, except P_{1,0} = 1 */</span>
-<a name="l01260"></a>01260     <span class="keyword">const</span> <span class="keywordtype">int</span>        nc = nc1 * (1 + nc1) / 2 - nc1;
-<a name="l01261"></a>01261     cpl_matrix     * mv;   <span class="comment">/* The transpose of the Vandermonde matrix */</span>
-<a name="l01262"></a>01262     cpl_matrix     * mh;   <span class="comment">/* Block-Hankel matrix, V'*V */</span>
-<a name="l01263"></a>01263     cpl_matrix     * mb;
-<a name="l01264"></a>01264     cpl_matrix     * mx;
-<a name="l01265"></a>01265 <span class="preprocessor">#ifdef IRPLIB_DISTORTION_ASSERT</span>
-<a name="l01266"></a>01266 <span class="preprocessor"></span>    <span class="keyword">const</span> <span class="keywordtype">double</span>   * coeffs1d;
-<a name="l01267"></a>01267 <span class="preprocessor">#endif</span>
-<a name="l01268"></a>01268 <span class="preprocessor"></span>    <span class="keywordtype">double</span>         * dmv;
-<a name="l01269"></a>01269     cpl_vector     * xhat;
-<a name="l01270"></a>01270     cpl_vector     * yhat;
-<a name="l01271"></a>01271     cpl_vector     * zhat;
-<a name="l01272"></a>01272     cpl_size         powers[2];
-<a name="l01273"></a>01273     <span class="keywordtype">int</span>              degx, degy;
-<a name="l01274"></a>01274     <span class="keywordtype">int</span>              i, j;
-<a name="l01275"></a>01275     cpl_error_code   error;
-<a name="l01276"></a>01276    
-<a name="l01277"></a>01277 
-<a name="l01278"></a>01278     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01279"></a>01279     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 2,
-<a name="l01280"></a>01280                     CPL_ERROR_INVALID_TYPE);
-<a name="l01281"></a>01281     cpl_ensure_code(np > 0,         cpl_error_get_code());
-<a name="l01282"></a>01282     cpl_ensure_code(values != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01283"></a>01283 
-<a name="l01284"></a>01284     cpl_ensure_code(cpl_vector_get_size(values) == np,
-<a name="l01285"></a>01285                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l01286"></a>01286 
-<a name="l01287"></a>01287     cpl_ensure_code(degree > 0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01288"></a>01288     cpl_ensure_code(np >= nc,   CPL_ERROR_DATA_NOT_FOUND);
-<a name="l01289"></a>01289 
-<a name="l01290"></a>01290     <span class="comment">/* transform zero-point to fixy */</span>
-<a name="l01291"></a>01291     yhat = cpl_vector_duplicate(cpl_bivector_get_y_const(xy_pos));
-<a name="l01292"></a>01292     cpl_vector_subtract_scalar(yhat, fixy);
-<a name="l01293"></a>01293 
-<a name="l01294"></a>01294     <span class="comment">/* - and ensure P(y) = y on center line */</span>
-<a name="l01295"></a>01295     xhat = cpl_vector_duplicate(cpl_bivector_get_x_const(xy_pos));
-<a name="l01296"></a>01296     zhat = cpl_vector_duplicate(values);
-<a name="l01297"></a>01297     cpl_vector_subtract(zhat, xhat);
-<a name="l01298"></a>01298 
-<a name="l01299"></a>01299     <span class="comment">/* Initialize matrices */</span>
-<a name="l01300"></a>01300     <span class="comment">/* mv contains the polynomial terms in the order described */</span>
-<a name="l01301"></a>01301     <span class="comment">/* above in each row, for each input point. */</span>
-<a name="l01302"></a>01302     dmv = (<span class="keywordtype">double</span>*)cpl_malloc(nc*np*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01303"></a>01303     mv = cpl_matrix_wrap(nc, np, dmv);
-<a name="l01304"></a>01304 
-<a name="l01305"></a>01305     <span class="comment">/* Has redundant FLOPs, appears to improve accuracy */</span>
-<a name="l01306"></a>01306     <span class="keywordflow">for</span> (i=0; i < np; i++) {
-<a name="l01307"></a>01307         <span class="keyword">const</span> <span class="keywordtype">double</span> x = cpl_vector_get(xhat, i);
-<a name="l01308"></a>01308         <span class="keyword">const</span> <span class="keywordtype">double</span> y = cpl_vector_get(yhat, i);
-<a name="l01309"></a>01309         <span class="keywordtype">double</span> xvalue;
-<a name="l01310"></a>01310         <span class="keywordtype">double</span> yvalue = y;
-<a name="l01311"></a>01311         j = 0;
-<a name="l01312"></a>01312         <span class="keywordflow">for</span> (degy = 1; degy <= degree; degy++) {
-<a name="l01313"></a>01313             xvalue = 1;
-<a name="l01314"></a>01314             <span class="keywordflow">for</span> (degx = 0; degx <= degree-degy; degx++, j++) {
-<a name="l01315"></a>01315                 dmv[np * j + i] = xvalue * yvalue;
-<a name="l01316"></a>01316                 xvalue *= x;
-<a name="l01317"></a>01317             }
-<a name="l01318"></a>01318             yvalue *= y;
-<a name="l01319"></a>01319         }
-<a name="l01320"></a>01320         <span class="comment">/* cx_assert( j == nc ); */</span>
-<a name="l01321"></a>01321     }
-<a name="l01322"></a>01322     cpl_vector_delete(xhat);
-<a name="l01323"></a>01323     cpl_vector_delete(yhat);
-<a name="l01324"></a>01324 
-<a name="l01325"></a>01325     <span class="comment">/* mb contains the values, it is not modified */</span>
-<a name="l01326"></a>01326     mb = cpl_matrix_wrap(np, 1, cpl_vector_get_data(zhat));
-<a name="l01327"></a>01327 
-<a name="l01328"></a>01328     <span class="comment">/* Form the right hand side of the normal equations */</span>
-<a name="l01329"></a>01329     mx = cpl_matrix_product_create(mv, mb);
-<a name="l01330"></a>01330 
-<a name="l01331"></a>01331     cpl_matrix_unwrap(mb);
-<a name="l01332"></a>01332     cpl_vector_delete(zhat);
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334     <span class="comment">/* Form the matrix of the normal equations */</span>
-<a name="l01335"></a>01335     mh = irplib_matrix_product_normal_create(mv);
-<a name="l01336"></a>01336     cpl_matrix_delete(mv);
-<a name="l01337"></a>01337 
-<a name="l01338"></a>01338     <span class="comment">/* Solve XA=B by a least-square solution (aka pseudo-inverse). */</span>
-<a name="l01339"></a>01339     error = cpl_matrix_decomp_chol(mh) || cpl_matrix_solve_chol(mh, mx);
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341     cpl_matrix_delete(mh);
-<a name="l01342"></a>01342 
-<a name="l01343"></a>01343     <span class="keywordflow">if</span> (error) {
-<a name="l01344"></a>01344         cpl_matrix_delete(mx);
-<a name="l01345"></a>01345         cpl_ensure_code(0, error);
-<a name="l01346"></a>01346     }
-<a name="l01347"></a>01347 
-<a name="l01348"></a>01348     <span class="comment">/* Store coefficients for output */</span>
-<a name="l01349"></a>01349 
-<a name="l01350"></a>01350 <span class="preprocessor">#ifdef IRPLIB_DISTORTION_ASSERT</span>
-<a name="l01351"></a>01351 <span class="preprocessor"></span>    coeffs1d = cpl_matrix_get_data(mx);
-<a name="l01352"></a>01352 <span class="preprocessor">#endif</span>
-<a name="l01353"></a>01353 <span class="preprocessor"></span>
-<a name="l01354"></a>01354     j = 0;
-<a name="l01355"></a>01355     <span class="keywordflow">for</span> (degy = 1; degy <= degree; degy++) {
-<a name="l01356"></a>01356         powers[1] = degy;
-<a name="l01357"></a>01357         <span class="keywordflow">for</span> (degx = 0; degx <= degree-degy; degx++, j++) {
-<a name="l01358"></a>01358             powers[0] = degx;
-<a name="l01359"></a>01359             <span class="comment">/* cx_assert( coeffs1d[j] == cpl_matrix_get(mx, j, 0) ); */</span>
-<a name="l01360"></a>01360             cpl_polynomial_set_coeff(<span class="keyword">self</span>, powers, cpl_matrix_get(mx, j, 0));
-<a name="l01361"></a>01361         }
-<a name="l01362"></a>01362     }
-<a name="l01363"></a>01363     <span class="comment">/* cx_assert( j == nc ); */</span>
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365     cpl_matrix_delete(mx);
-<a name="l01366"></a>01366 
-<a name="l01367"></a>01367     <span class="comment">/* P_{1,0} = 1 */</span>
-<a name="l01368"></a>01368     powers[0] = 1;
-<a name="l01369"></a>01369     powers[1] = 0;
-<a name="l01370"></a>01370     cpl_polynomial_set_coeff(<span class="keyword">self</span>, powers, 1.0);
-<a name="l01371"></a>01371 
-<a name="l01372"></a>01372     <span class="comment">/* Transform the polynomial back in Y */</span>
-<a name="l01373"></a>01373     cpl_polynomial_shift_1d(<span class="keyword">self</span>, 1, -fixy);
-<a name="l01374"></a>01374 
-<a name="l01375"></a>01375     <span class="comment">/* If requested, compute mean squared error */</span>
-<a name="l01376"></a>01376     <span class="keywordflow">if</span> (mse != NULL) {
-<a name="l01377"></a>01377         <span class="keyword">const</span> cpl_vector * x_pos = cpl_bivector_get_x_const(xy_pos);
-<a name="l01378"></a>01378         <span class="keyword">const</span> cpl_vector * y_pos = cpl_bivector_get_y_const(xy_pos);
-<a name="l01379"></a>01379         cpl_vector * x_val = cpl_vector_new(2);
-<a name="l01380"></a>01380         <span class="keywordtype">double</span> residue;
-<a name="l01381"></a>01381 
-<a name="l01382"></a>01382         *mse = 0;
-<a name="l01383"></a>01383         <span class="keywordflow">for</span> (i=0; i<np; i++) {
-<a name="l01384"></a>01384             cpl_vector_set(x_val, 0, cpl_vector_get(x_pos, i));
-<a name="l01385"></a>01385             cpl_vector_set(x_val, 1, cpl_vector_get(y_pos, i));
-<a name="l01386"></a>01386             <span class="comment">/* Subtract from the true value, square, accumulate */</span>
-<a name="l01387"></a>01387             residue = cpl_vector_get(values, i)
-<a name="l01388"></a>01388                 - cpl_polynomial_eval(<span class="keyword">self</span>, x_val);
-<a name="l01389"></a>01389             *mse += residue * residue;
-<a name="l01390"></a>01390         }
-<a name="l01391"></a>01391         cpl_vector_delete(x_val);
-<a name="l01392"></a>01392         <span class="comment">/* Average the error term */</span>
-<a name="l01393"></a>01393         *mse /= np;
-<a name="l01394"></a>01394     }
-<a name="l01395"></a>01395 
-<a name="l01396"></a>01396     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01397"></a>01397 }
-<a name="l01398"></a>01398 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_distortion.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_distortion.c,v 1.52 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.52 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE <= CPL_VERSION(5, 92, 0)</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_apertures_get_pos_x cpl_apertures_get_max_x</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "irplib_distortion.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "irplib_flat.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "irplib_polynomial.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#define ARC_MINGOODPIX      100</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINARCLENFACT   2.0</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINNBARCS       4</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_RANGE_FACT      3.0</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_WINDOWSIZE      32</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#define TRESH_MEDIAN_MIN    0.0</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define TRESH_SIGMA_MAX     200.0</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">                                Functions prototypes</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> cpl_apertures * irplib_distortion_detect_arcs(cpl_image *,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_border(cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                                                     <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_threshold1d(cpl_image *, <span class="keywordtype">double</span>, cpl_image *, </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> cpl_error_code irplib_distortion_purge_arcs(cpl_apertures **, cpl_image *,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                                    <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                                                    <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_arc_positions(cpl_bivector *,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                                           cpl_vector *,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                                           <span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                                                           <span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                                                           <span class="keyword">const</span> cpl_apertures *);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_distortion_get_row_centroid(<span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                                  <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_sub_hor_lowpass(cpl_image *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keyword">static</span> cpl_image * irplib_distortion_remove_ramp(<span class="keyword">const</span> cpl_image *);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image *,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         <span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, cpl_boolean) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_fit_2d(cpl_polynomial *,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                                <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                                                <span class="keyword">const</span> cpl_vector *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                                                <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> cpl_matrix * irplib_matrix_product_normal_create(<span class="keyword">const</span> cpl_matrix *);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> cpl_polynomial * irplib_distortion_estimate(</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         <span class="keyword">const</span> cpl_image *   org,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         <span class="keywordtype">int</span>                 xmin,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <span class="keywordtype">int</span>                 ymin,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         <span class="keywordtype">int</span>                 xmax,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         <span class="keywordtype">int</span>                 ymax,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="keywordtype">int</span>                 auto_ramp_sub,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         <span class="keywordtype">int</span>                 arc_sat,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <span class="keywordtype">int</span>                 max_arc_width,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         <span class="keywordtype">double</span>              kappa,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="keywordtype">int</span>                 degree,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         cpl_apertures   **  arcs)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     cpl_image      * local_im;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     cpl_image      * filtered;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_image      * label_image;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordtype">double</span>           rightmost, leftmost;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_bivector   * grid;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_vector     * values_to_fit;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordtype">int</span>              n_arcs;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_polynomial * poly2d;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">double</span>           mse = 0.0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nx = cpl_image_get_size_x(org);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        ny = cpl_image_get_size_y(org);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        min_arc_range = (int)(nx / ARC_RANGE_FACT);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordtype">int</span>              i;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_ensure(org           != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_ensure(kappa         >= 0.0,  CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_ensure(max_arc_width > 0,     CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">/* The background may vary strongly along the vertical line. */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="comment">/* Detect and rm background with a 1+2*max_arc_width x 1 median filter */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     filtered = cpl_image_new(nx, ny, cpl_image_get_type(org));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     irplib_image_filter_background_line(filtered, org, max_arc_width, CPL_TRUE);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">if</span> (auto_ramp_sub) {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         local_im = irplib_distortion_remove_ramp(filtered);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         local_im = filtered;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     cpl_error_ensure(local_im != NULL, cpl_error_get_code(),</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                      <span class="keywordflow">return</span>(NULL), <span class="stringliteral">"Cannot clean the image"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="comment">/* Detect the arcs in the input image */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     *arcs = irplib_distortion_detect_arcs(local_im, &label_image, arc_sat,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                           max_arc_width, kappa, xmin, ymin,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                           xmax, ymax);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">if</span> (*arcs == NULL) {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         cpl_image_delete(local_im);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"Cannot detect the arcs"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     n_arcs = cpl_apertures_get_size(*arcs);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"%d detected arcs"</span>, n_arcs);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordflow">for</span> (i=1; i<n_arcs; i++) {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>             leftmost = cpl_apertures_get_pos_x(*arcs, i+1);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>             rightmost = cpl_apertures_get_pos_x(*arcs, i+1);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                               rightmost, leftmost, min_arc_range);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               <span class="stringliteral">"too narrow range"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor"></span>        cpl_apertures_delete(*arcs);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         cpl_image_delete(local_im);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         cpl_image_delete(label_image);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         *arcs = NULL;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Create deformation grid"</span>);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     grid = cpl_bivector_new(n_arcs * ny);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     values_to_fit = cpl_vector_new(n_arcs * ny);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> (irplib_distortion_fill_arc_positions(grid, values_to_fit, local_im,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                                             label_image, *arcs)){</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                               <span class="stringliteral">"cannot get arcs positions"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         cpl_apertures_delete(*arcs);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         cpl_image_delete(local_im);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         cpl_image_delete(label_image);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         *arcs = NULL;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     cpl_image_delete(label_image);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     cpl_image_delete(local_im);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* Apply the fitting */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     poly2d = cpl_polynomial_new(2);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordflow">if</span> (irplib_polynomial_fit_2d(poly2d, grid, values_to_fit, degree,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                                  0.5*(ny+1), &mse)) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               <span class="stringliteral">"cannot apply the 2d fit"</span>);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         cpl_bivector_delete(grid);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         cpl_vector_delete(values_to_fit);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         cpl_apertures_delete(*arcs);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         *arcs = NULL;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     cpl_msg_info(cpl_func, </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>             <span class="stringliteral">"Fitted a %d. degree 2D-polynomial to %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" points "</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>             <span class="stringliteral">"with mean-square error: %g"</span>, degree,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>             cpl_vector_get_size(values_to_fit), mse);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     cpl_bivector_delete(grid);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_vector_delete(values_to_fit);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">return</span> poly2d;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="keyword">static</span> cpl_apertures * irplib_distortion_detect_arcs(</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         cpl_image *   im,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         cpl_image **  label_im,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="keywordtype">int</span>             arc_sat,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         <span class="keywordtype">int</span>             max_arc_width,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <span class="keywordtype">double</span>          kappa,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         <span class="keywordtype">int</span>             xmin,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         <span class="keywordtype">int</span>             ymin,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         <span class="keywordtype">int</span>             xmax,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         <span class="keywordtype">int</span>             ymax)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="comment">/* Set min_arclen */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           min_arclen = (int)(ny / ARC_MINARCLENFACT);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     cpl_image       *   filt_im;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     cpl_mask        *   filter;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     cpl_image       *   collapsed;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_mask        *   bin_im;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     cpl_apertures   *   det;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     cpl_size            nobj;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordtype">int</span>                 ngoodpix;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">/* Default values for output parameters */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     *label_im = NULL;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     median_val = cpl_image_get_median_dev(im, &sigma);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     fillval = median_val-sigma/2.0;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordflow">if</span> (irplib_distortion_fill_border(im, xmin, ymin, xmax, ymax, fillval)) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                               <span class="stringliteral">"cannot fill bad zones"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="comment">/* Subtract a low-pass */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     filt_im = cpl_image_duplicate(im);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">if</span> (irplib_distortion_sub_hor_lowpass(filt_im, ARC_WINDOWSIZE) == -1) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         cpl_image_delete(filt_im);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="comment">/* Get relevant stats for thresholding */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     median_val = cpl_image_get_median_dev(filt_im, &sigma);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="comment">/* Correct median_val and sigma if necessary */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="comment">/* Set the threshold */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     threshold = median_val + sigma * kappa;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <span class="comment">/* Collapse the image */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keywordflow">if</span> (irplib_distortion_threshold1d(filt_im, median_val, collapsed, 0.0)==-1) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                               <span class="stringliteral">"cannot threshold the filtered image"</span>);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         cpl_image_delete(filt_im);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         cpl_image_delete(collapsed);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     cpl_image_delete(collapsed);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="comment">/* Binarize the image */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     bin_im = cpl_mask_threshold_image_create(filt_im, threshold, </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>             DBL_MAX);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     cpl_image_delete(filt_im);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">if</span> (bin_im == NULL) {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                               <span class="stringliteral">"cannot binarise the image"</span>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="comment">/* Test if there are enough good pixels */</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     ngoodpix = cpl_mask_count(bin_im);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                               <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                               <span class="stringliteral">"Too few white pixels"</span>);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="preprocessor"></span>        cpl_mask_delete(bin_im);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="comment">/* Apply a morphological opening to clean the isolated pixels */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     filter = cpl_mask_new(3, 3);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     cpl_mask_not(filter);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     cpl_mask_filter(bin_im, bin_im, filter, CPL_FILTER_OPENING,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                     CPL_BORDER_ZERO);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     cpl_mask_delete(filter);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="comment">/* Labelize pixel map to a label image */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     cpl_mask_delete(bin_im);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="comment">/* Compute statistics on objects */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                               <span class="stringliteral">"Cannot compute arcs stats"</span>);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         cpl_image_delete(*label_im);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         *label_im = NULL;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="comment">/* Purge non-relevant arcs */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordflow">if</span> (irplib_distortion_purge_arcs(&det, *label_im, im, min_arclen,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                      max_arc_width, arc_sat)) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                               <span class="stringliteral">"Cannot purge the arcs"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         cpl_image_delete(*label_im);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         *label_im = NULL;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         cpl_apertures_delete(det);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                 <span class="stringliteral">"Not enough valid arcs (%"</span>CPL_SIZE_FORMAT<span class="stringliteral">" < %d)"</span>, </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                 cpl_apertures_get_size(det), ARC_MINNBARCS);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                               <span class="stringliteral">"Not enough valid arcs, min="</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                               IRPLIB_STRINGIFY(ARC_MINNBARCS));</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="preprocessor"></span>        cpl_image_delete(*label_im);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         *label_im = NULL;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         cpl_apertures_delete(det);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordflow">return</span> det;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="keyword">static</span> cpl_error_code irplib_distortion_fill_border(cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                                                     <span class="keywordtype">int</span>         xmin,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                                                     <span class="keywordtype">int</span>         ymin,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                                                     <span class="keywordtype">int</span>         xmax,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                                                     <span class="keywordtype">int</span>         ymax,</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                                                     <span class="keywordtype">double</span>      fillval)</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>   nx     = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>   ny     = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordtype">float</span>     * pfi    = cpl_image_get_data_float(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> fvalue = (float)fillval;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     <span class="keywordtype">int</span>         i, j;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     cpl_ensure_code(pfi != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     <span class="comment">/* Ensure validity of pixel buffer access */</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     xmin = IRPLIB_MIN(xmin, nx+1);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     ymax = IRPLIB_MIN(ymax, ny);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     <span class="comment">/* - and avoid double access */</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     xmax = IRPLIB_MAX(xmax, xmin - 1);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     ymin = IRPLIB_MIN(ymin, ymax + 1);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     <span class="comment">/* Fill the zone */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="keywordflow">for</span> (j = 0; j < ymin-1; j++) {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         <span class="keywordflow">for</span> (i = 0; i < nx; i++) {</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>             pfi[i+j*nx] = fvalue;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="comment">/* assert( j == IRPLIB_MAX(0, ymin-1) ); */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordflow">for</span> (; j < ymax; j++) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         <span class="keywordflow">for</span> (i = 0; i < xmin-1; i++) {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             pfi[i+j*nx] = fvalue;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         <span class="keywordflow">for</span> (i = xmax; i < nx; i++) {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             pfi[i+j*nx] = fvalue;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>         }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     }</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="comment">/* assert( j == IRPLIB_MAX(0, ymax) ); */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordflow">for</span> (; j < ny; j++) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         <span class="keywordflow">for</span> (i = 0; i < nx; i++) {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>             pfi[i+j*nx] = fvalue;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_threshold1d(</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <span class="keywordtype">double</span>          threshold,</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         cpl_image   *   im1d,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         <span class="keywordtype">double</span>          newval)</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordtype">float</span>       *   pim;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keywordtype">float</span>       *   pim1d;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordtype">int</span>             nx, ny;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="keywordtype">int</span>             i, j;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="keywordflow">if</span> (im1d == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="keywordflow">if</span> (cpl_image_get_type(im1d) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="comment">/* Get access to the im / im1d data */</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     pim = cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     pim1d = cpl_image_get_data_float(im1d);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     nx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     ny = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="comment">/* Apply the thresholding */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">for</span> (i=0; i<nx; i++)</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>         <span class="keywordflow">if</span> (pim1d[i] < threshold) {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>             <span class="keywordflow">for</span> (j=0; j<ny; j++) pim[i+j*nx] = (<span class="keywordtype">float</span>)newval;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>         }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_distortion_sub_hor_lowpass(</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         cpl_image   *   im, </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <span class="keywordtype">int</span>             filt_size)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> {</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     cpl_vector  *   linehi;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     cpl_vector  *   linelo;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     cpl_vector  *   avglinehi;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     cpl_vector  *   avglinelo;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordtype">double</span>      *   pavglinehi;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordtype">float</span>       *   pim;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordtype">int</span>             lopos, hipos, nx, ny;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <span class="keywordtype">int</span>             i, j;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <span class="keywordflow">if</span> (filt_size <= 0) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     nx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     ny = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     lopos = (int)(ny/4);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     hipos = (int)(3*ny/4);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     <span class="comment">/* Get the vectors out of the image */</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="keywordflow">if</span> ((linehi = cpl_vector_new_from_image_row(im, hipos)) == NULL) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="keywordflow">if</span> ((linelo = cpl_vector_new_from_image_row(im, lopos)) == NULL) {</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         cpl_vector_delete(linehi);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="comment">/* Filter the vectors */</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordflow">if</span> ((avglinehi = cpl_vector_filter_median_create(linehi, </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                     filt_size)) == NULL) {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         cpl_vector_delete(linehi);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         cpl_vector_delete(linelo);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     cpl_vector_delete(linehi);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keywordflow">if</span> ((avglinelo = cpl_vector_filter_median_create(linelo, </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>                     filt_size)) == NULL) {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         cpl_vector_delete(linelo);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         cpl_vector_delete(avglinehi);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     cpl_vector_delete(linelo);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="comment">/* Average the filtered vectors to get the low freq signal */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     cpl_vector_add(avglinehi, avglinelo);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     cpl_vector_delete(avglinelo);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     cpl_vector_divide_scalar(avglinehi, 2.0);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="comment">/* Subtract the low frequency signal */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     pavglinehi = cpl_vector_get_data(avglinehi);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     pim = cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="keywordflow">for</span> (i=0; i<nx; i++) {</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         <span class="keywordflow">for</span> (j=0; j<ny; j++) {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>             pim[i+j*nx] -= pavglinehi[i];</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         }</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     }</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     cpl_vector_delete(avglinehi);</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> cpl_error_code irplib_distortion_purge_arcs(cpl_apertures  ** <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                                             cpl_image       * lab_im,</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                                             <span class="keyword">const</span> cpl_image * arc_im,</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>                                             <span class="keywordtype">int</span>               min_arclen,</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>                                             <span class="keywordtype">int</span>               max_arcwidth,</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                                             <span class="keywordtype">double</span>            arc_sat)</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> ycenter = 0.5 * (1 + cpl_image_get_size_y(arc_im));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     <span class="keywordtype">int</span>   narcs;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="keywordtype">int</span>   nkeep  = 0;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="keywordtype">int</span>   ifirst = 1;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     <span class="keywordtype">int</span> * relabel;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     <span class="keywordtype">int</span>   i;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     <span class="comment">/* Get number of arcs */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     narcs = cpl_apertures_get_size(*<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     cpl_ensure_code(narcs  > 0,     CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     cpl_ensure_code(cpl_image_get_type(lab_im) == CPL_TYPE_INT,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     <span class="comment">/* Allocate relabel array with default relabelling to zero */</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     relabel = cpl_calloc(narcs, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="comment">/* Loop on the different arcs candidates */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordflow">for</span> (i = 0; i < narcs; i++) {</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         <span class="comment">/* Test if the current object is a valid arc */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> arclen = 1</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>             + cpl_apertures_get_top(*<span class="keyword">self</span>, i+1)</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>             - cpl_apertures_get_bottom(*<span class="keyword">self</span>, i+1);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         <span class="keywordflow">if</span> (cpl_apertures_get_top(*<span class="keyword">self</span>,    i+1) < ycenter) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         <span class="keywordflow">if</span> (cpl_apertures_get_bottom(*<span class="keyword">self</span>, i+1) > ycenter) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         <span class="keywordflow">if</span> (arclen > min_arclen) {</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> arcwidth = 1</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                 + cpl_apertures_get_right(*<span class="keyword">self</span>, i+1)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                 - cpl_apertures_get_left(*<span class="keyword">self</span>, i+1);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>             <span class="keywordflow">if</span> (arcwidth < max_arcwidth) {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> edge = cpl_apertures_get_left_y(*<span class="keyword">self</span>, i+1);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                 <span class="keywordflow">if</span> (edge > 0) {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                     <span class="keyword">const</span> <span class="keywordtype">double</span> mean = cpl_apertures_get_mean(*<span class="keyword">self</span>, i+1);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                     <span class="keywordflow">if</span> (mean < arc_sat) {</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                         relabel[i] = ++nkeep;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                         <span class="comment">/* Relabeling, if any, starts with ifirst */</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                         <span class="keywordflow">if</span> (nkeep == i+1) ifirst = nkeep;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                     }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                 }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             }</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     }</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="keywordflow">if</span> (nkeep < narcs) {</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         <span class="comment">/* Update the labelised image by erasing non valid arcs */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         <span class="keywordtype">int</span>     * plabim = cpl_image_get_data_int(lab_im);</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> npix   = cpl_image_get_size_x(lab_im)</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>             * cpl_image_get_size_y(lab_im);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         <span class="keywordflow">if</span> (nkeep == 0) {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>             cpl_free(relabel);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                                          <span class="stringliteral">"All %d arc(s) are invalid"</span>, narcs);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                                          <span class="stringliteral">"All arcs are invalid"</span>);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         <span class="keywordflow">for</span> (i = 0; i < npix; i++) {</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> label = plabim[i];</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>             <span class="keywordflow">if</span> (label < 0 || label > narcs) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>             <span class="keywordflow">if</span> (label >= ifirst) plabim[i] = relabel[label-1];</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>         }</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>         <span class="keywordflow">if</span> (i < npix) {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>             <span class="comment">/* lab_im is not a valid label image */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>             cpl_free(relabel);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>             <span class="keywordflow">return</span> cpl_error_set(cpl_func, plabim[i] < 0</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>                                          ? CPL_ERROR_ILLEGAL_INPUT</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                                          : CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         <span class="comment">/* Purge the bad arcs */</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         cpl_apertures_delete(*<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         *<span class="keyword">self</span> = cpl_apertures_new_from_image(arc_im, lab_im);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     cpl_free(relabel);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Purged %d of %d arcs (1st purged=%d)"</span>, narcs - nkeep,</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                  narcs, ifirst);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="comment">/* arc_im may be invalid */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     cpl_ensure_code(*<span class="keyword">self</span> != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> irplib_distortion_fill_arc_positions(cpl_bivector        * grid,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>                                      cpl_vector          * fitvalues,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                                      <span class="keyword">const</span> cpl_image     * in,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                                      <span class="keyword">const</span> cpl_image     * label_im,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>                                      <span class="keyword">const</span> cpl_apertures * det)</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>    narcs = cpl_apertures_get_size(det);</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     <span class="keywordtype">int</span>          nfitvals = cpl_vector_get_size(fitvalues);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>    nx = cpl_image_get_size_x(label_im);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>    ny = cpl_image_get_size_y(label_im);</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     cpl_image  * filt_img;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     cpl_mask   * kernel;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     cpl_vector * gridx = cpl_bivector_get_x(grid);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     cpl_vector * gridy = cpl_bivector_get_y(grid);</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     cpl_polynomial* dist1d;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     cpl_matrix * dist1dx = NULL;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     cpl_vector * dist1dy = NULL;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordtype">double</span>     * dgridx;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     <span class="keywordtype">double</span>     * dgridy;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     <span class="keywordtype">double</span>     * dfitv;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keywordtype">int</span>          ndone = 0;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordtype">int</span>          i, obj;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     cpl_ensure_code(nfitvals > 0,      CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     cpl_ensure_code(narcs    > 0,      CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     cpl_ensure_code(cpl_image_get_type(label_im) == CPL_TYPE_INT,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                     CPL_ERROR_TYPE_MISMATCH);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     <span class="comment">/* Ensure space for output */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="keywordflow">if</span> (nfitvals < narcs * ny) {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         nfitvals = narcs * ny;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         cpl_vector_set_size(fitvalues, nfitvals);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     }</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     <span class="keywordflow">if</span> (cpl_vector_get_size(gridx) < nfitvals ||</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         cpl_vector_get_size(gridy) < nfitvals) {</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         cpl_vector_set_size(gridx, nfitvals);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         cpl_vector_set_size(gridy, nfitvals);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="comment">/* Get data after resizing */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     dgridx = cpl_vector_get_data(gridx);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     dgridy = cpl_vector_get_data(gridy);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     dfitv  = cpl_vector_get_data(fitvalues);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="comment">/* Median filter on input image */</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     kernel = cpl_mask_new(3, 3);</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     cpl_mask_not(kernel);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     filt_img = cpl_image_new(nx, ny, cpl_image_get_type(in));</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     cpl_image_filter_mask(filt_img, in, kernel, CPL_FILTER_MEDIAN,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                                                 CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     cpl_mask_delete(kernel);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     dist1d = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="keywordflow">for</span> (obj = 0; obj < narcs; obj++) {</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         <span class="comment">/* Find the reference X-coordinate for the arc */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         <span class="keyword">const</span> <span class="keywordtype">int</span>  * plabel_im = cpl_image_get_data_int_const(label_im);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         <span class="keyword">const</span> <span class="keywordtype">int</span>    ndist1d = cpl_apertures_get_top(det, obj+1)</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>             - cpl_apertures_get_bottom(det, obj+1) + 1;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         cpl_boolean sampsym = CPL_TRUE;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         <span class="keywordtype">int</span>         j, prevj = 0;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         <span class="keywordtype">int</span>         k = 0;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         (void)cpl_matrix_unwrap(dist1dx);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         (void)cpl_vector_unwrap(dist1dy);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         dist1dx = cpl_matrix_wrap(1, ndist1d, dgridy + ndone);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         dist1dy = cpl_vector_wrap(ndist1d, dfitv  + ndone);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         <span class="comment">/* Find out the X coord. at all Y positions on the arc */</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         <span class="keywordflow">for</span> (j = cpl_apertures_get_bottom(det, obj+1)-1;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>              j < cpl_apertures_get_top(det, obj+1); j++) {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>             <span class="keywordflow">for</span> (i = 0; i < nx; i++) {</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>                 <span class="keywordflow">if</span> (plabel_im[i + j * nx] == obj + 1) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>             }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             <span class="keywordflow">if</span> (i < nx) {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>                 <span class="comment">/* Found 1st pixel of aperture obj+1 in row j+1 */</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>                 cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x_finepos</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                     = irplib_distortion_get_row_centroid(filt_img, label_im,</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                                                          i, j);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                 <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>                     irplib_error_recover(prestate, <span class="stringliteral">"Could not find X-position "</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>                                          <span class="stringliteral">"for line %d at y=%d (x=%d)"</span>,</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>                                          obj+1, j+1, i+1);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x_finepos >= 0.0) {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>                     cpl_matrix_set(dist1dx, 0, k, 1.0 + j);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>                     cpl_vector_set(dist1dy, k, 1.0 + x_finepos);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>                     <span class="keywordflow">if</span> (k > 0 && j != 1 + prevj) sampsym = CPL_FALSE;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>                     prevj = j;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>                     k++;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                 }</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>             }</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>         }</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         <span class="keywordflow">if</span> (k > 0) {</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>             <span class="keywordtype">double</span> ref_xpos, grad;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>             cpl_error_code error;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>             <span class="keyword">const</span> cpl_boolean did_drop = k != ndist1d;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>             <span class="keyword">const</span> cpl_size mindeg = 0;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>             <span class="keyword">const</span> cpl_size maxdeg = 2;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>             <span class="keywordflow">if</span> (did_drop) {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>                 <span class="comment">/* Set correct size */</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>                 dist1dx = cpl_matrix_wrap(1, k, cpl_matrix_unwrap(dist1dx));</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>                 dist1dy = cpl_vector_wrap(k, cpl_vector_unwrap(dist1dy));</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>             error = cpl_polynomial_fit(dist1d, dist1dx, &sampsym, dist1dy, NULL,</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>                              CPL_FALSE, &mindeg, &maxdeg);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>             <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                 cpl_msg_error(cpl_func, <span class="stringliteral">"1D-fit failed"</span>);</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             }</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>             ref_xpos = cpl_polynomial_eval_1d(dist1d, 0.5 * (ny + 1), &grad);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>             <span class="keywordflow">for</span> (j = cpl_apertures_get_bottom(det, obj+1)-1;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                  j < cpl_apertures_get_top(det, obj+1); j++) {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> xpos = cpl_polynomial_eval_1d(dist1d, j+1.0, NULL);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>                 dfitv [ndone] = xpos;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>                 dgridx[ndone] = ref_xpos;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>                 <span class="comment">/* Wrapping dist1dx does _not_ take care of dgridy,</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">                   in case of "Could not find X-position " */</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                 <span class="keywordflow">if</span> (did_drop)</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                     dgridy[ndone] = 1.0 + j;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                 ndone++;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>             }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>             cpl_msg_info(cpl_func, <span class="stringliteral">"Line %d has center gradient %g"</span>, obj+1,</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                          grad);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>         }</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     }</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     cpl_image_delete(filt_img);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     cpl_polynomial_delete(dist1d);</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     (void)cpl_matrix_unwrap(dist1dx);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     (void)cpl_vector_unwrap(dist1dy);</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Found %d fitting points ("</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>                  <span class="stringliteral">"expected up to %d points)"</span>, ndone, nfitvals);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     cpl_ensure_code(obj == narcs, cpl_error_get_code());</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     cpl_ensure_code(ndone > 0, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     cpl_vector_set_size(fitvalues, ndone);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     cpl_vector_set_size(gridx, ndone);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     cpl_vector_set_size(gridy, ndone);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_distortion_get_row_centroid(<span class="keyword">const</span> cpl_image * im,</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                                                  <span class="keyword">const</span> cpl_image * label_im,</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>                                                  <span class="keywordtype">int</span>               x,</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>                                                  <span class="keywordtype">int</span>               y)</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>     nx        = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>     ny        = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>     ynx       = y * nx;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> * pim       = cpl_image_get_data_float_const(im);</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>   * plabel_im = cpl_image_get_data_int_const(label_im);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordtype">int</span>           firstpos = -1;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     <span class="keywordtype">int</span>           lastpos  = -1;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     <span class="keywordtype">int</span>           maxpos   = x;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     <span class="keywordtype">int</span>           objnum;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="keywordtype">double</span>        wsum = 0.0;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordtype">double</span>        sum  = 0.0;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     <span class="keywordtype">double</span>        max  = 0.0;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     cpl_ensure(pim       != NULL, cpl_error_get_code(),    -1.0);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     cpl_ensure(plabel_im != NULL, cpl_error_get_code(),    -2.0);</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     cpl_ensure(x         >= 0,    CPL_ERROR_ILLEGAL_INPUT, -3.0);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     cpl_ensure(y         >= 0,    CPL_ERROR_ILLEGAL_INPUT, -4.0);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     cpl_ensure(x         <  nx,   CPL_ERROR_ILLEGAL_INPUT, -5.0);</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     cpl_ensure(y         <  ny,   CPL_ERROR_ILLEGAL_INPUT, -6.0);</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     max    = (double)pim[x + ynx];</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     objnum = plabel_im[x + ynx];</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="comment">/* While we stay in the same object... */</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val = (double)pim[x + ynx];</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         <span class="keywordflow">if</span> (val > 0.0) { <span class="comment">/* FIXME: Handle this exception better */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>             wsum += x * val;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>             sum += val;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>             <span class="keywordflow">if</span> (firstpos < 0) firstpos = x;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>             lastpos = x;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>             <span class="keywordflow">if</span> (val > max) {</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                 max = val;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                 maxpos = x;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>             }</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         }</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>         <span class="comment">/* Next point */</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>         x++;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     } <span class="keywordflow">while</span> (x < nx && objnum == plabel_im[x + ynx]);</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     cpl_ensure(sum > 0.0, CPL_ERROR_DATA_NOT_FOUND, -7.0);</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="comment">       assert( 0 <= maxpos && maxpos < nx );</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="comment">       assert( objnum == plabel_im[maxpos + ynx] );</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="comment">       assert( wsum >= 0.0 );</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <span class="keywordflow">return</span> (wsum < sum * firstpos || wsum > sum * lastpos)</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         ? maxpos : wsum / sum;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> }</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> <span class="preprocessor">#define IS_NB_TESTPOINTS    8</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_SLOPE        0.01</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_SLOPE_DIF    0.075</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_FIT_EDGE_DIF 0.05</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_RAMP         10.0</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR        13.0</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR_DIF    8.0</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_INTER_DIF    20.0</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_SKIPZONE         2.5</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="preprocessor"></span><span class="preprocessor">#define SQR(x) ((x)*(x))</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="preprocessor"></span><span class="keyword">static</span> cpl_image * irplib_distortion_remove_ramp(<span class="keyword">const</span> cpl_image * in) </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> {</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     <span class="keywordtype">int</span>                 ramp_present;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           nx = cpl_image_get_size_x(in);</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(in);</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           yhi = (int)(ny/2);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           ylo = yhi - 1;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordtype">int</span>                 y;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     cpl_vector      *   tmp_vector;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     cpl_bivector    *   testpointlo;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordtype">double</span>          *   testpointlo_x;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     <span class="keywordtype">double</span>          *   testpointlo_y;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     cpl_bivector    *   testpointhi;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordtype">double</span>          *   testpointhi_x;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordtype">double</span>          *   testpointhi_y;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           spacing = ny / (IS_SKIPZONE*IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     <span class="keywordtype">double</span>              rampdif, fitslope;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     <span class="keywordtype">double</span>          *   pol_coefhi,</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>                     *   pol_coeflo;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     cpl_vector      *   median;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     <span class="keywordtype">double</span>          *   median_data;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     <span class="keywordtype">double</span>              medianerrlo, medianerrhi;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     <span class="keywordtype">double</span>              slope;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     cpl_image       *   out;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     <span class="keywordtype">float</span>           *   pout;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     <span class="keywordtype">float</span>               val;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordtype">int</span>                 i, j;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     cpl_ensure(cpl_image_get_type(in) == CPL_TYPE_FLOAT,</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>                CPL_ERROR_UNSUPPORTED_MODE, NULL);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>                     </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordflow">if</span> (ny < IS_SKIPZONE * IS_NB_TESTPOINTS){</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>                               <span class="stringliteral">"image has %d lines, min="</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>                               IRPLIB_STRINGIFY(IS_SKIPZONE) <span class="stringliteral">"*"</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                               IRPLIB_STRINGIFY(IS_NB_TESTPOINTS), ny);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                               <span class="stringliteral">"image has too few lines, min="</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>                               IRPLIB_STRINGIFY(IS_SKIPZONE) <span class="stringliteral">"*"</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>                               IRPLIB_STRINGIFY(IS_NB_TESTPOINTS));</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor"></span>        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     <span class="comment">/* Fill the vectors */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     testpointhi = cpl_bivector_new(IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     testpointhi_x = cpl_bivector_get_x_data(testpointhi);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     testpointhi_y = cpl_bivector_get_y_data(testpointhi);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     testpointlo = cpl_bivector_new(IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     testpointlo_x = cpl_bivector_get_x_data(testpointlo);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     testpointlo_y = cpl_bivector_get_y_data(testpointlo);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>         y = yhi + i * spacing;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         tmp_vector = cpl_vector_new_from_image_row(in, y+1);</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         testpointhi_x[i] = y - ny / 2;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         testpointhi_y[i] = cpl_vector_get_median_const(tmp_vector);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         cpl_vector_delete(tmp_vector);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         y = ylo - i * spacing;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>         tmp_vector = cpl_vector_new_from_image_row(in, y+1);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>         testpointlo_x[IS_NB_TESTPOINTS-i-1] = y;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>         testpointlo_y[IS_NB_TESTPOINTS-i-1]=cpl_vector_get_median_const(tmp_vector);</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>         cpl_vector_delete(tmp_vector);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     }</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="comment">/* Apply the fit */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     pol_coefhi = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointhi_x,</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>             testpointhi_y, IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     pol_coeflo = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointlo_x, </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>             testpointlo_y, IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <span class="comment">/* Compute the errors */</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     median = cpl_vector_new(IS_NB_TESTPOINTS);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     median_data = cpl_vector_get_data(median);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>         median_data[i]=SQR(testpointhi_y[i]</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>                 - pol_coefhi[0] - pol_coefhi[1] * testpointhi_x[i]);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     medianerrhi = cpl_vector_get_median(median);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>         median_data[i]=SQR(testpointlo_y[i]</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>                 - pol_coeflo[0] - pol_coeflo[1] * testpointlo_x[i]);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     }</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     medianerrlo = cpl_vector_get_median(median);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     cpl_vector_delete(median);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     rampdif = testpointlo_y[IS_NB_TESTPOINTS-1] - testpointhi_y[0];</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     slope = rampdif / (ny/2.0);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     fitslope = (pol_coefhi[1] + pol_coeflo[1]) / 2.0;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     cpl_bivector_delete(testpointlo);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     cpl_bivector_delete(testpointhi);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="comment">/* Decide if there is a ramp or not  */</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="keywordflow">if</span> (fabs(rampdif)<IS_MIN_RAMP ||</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>             fabs(pol_coefhi[1]) < IS_MIN_SLOPE ||</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>             fabs(pol_coeflo[1]) < IS_MIN_SLOPE ||</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>             pol_coefhi[1]/pol_coeflo[1]<0.5 ||</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>             pol_coefhi[1]/pol_coeflo[1]>2.0 ||</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>             fabs(pol_coefhi[1]-pol_coeflo[1])>IS_MAX_SLOPE_DIF ||</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>             fabs(pol_coefhi[0]-pol_coeflo[0]) > IS_MAX_INTER_DIF ||</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>             medianerrlo> IS_MAX_MNERR ||</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>             medianerrhi> IS_MAX_MNERR ||</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>             fabs(medianerrlo-medianerrhi) >IS_MAX_MNERR_DIF ||</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>             fabs(slope-fitslope) > IS_MAX_FIT_EDGE_DIF ||</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>             slope/fitslope<0.5 ||</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>             slope/fitslope>2.0) ramp_present = 0;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     <span class="keywordflow">else</span> ramp_present = 1;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     cpl_free(pol_coeflo);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     cpl_free(pol_coefhi);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     <span class="comment">/* Correct the ramp if it is there */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     out = cpl_image_duplicate(in);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     pout = cpl_image_get_data_float(out);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="keywordflow">if</span> (ramp_present == 1) {</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         <span class="keywordflow">for</span> (j=0; j<ny/2; j++) {</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>             val = slope * (j-ny/2);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>             <span class="keywordflow">for</span> (i=0; i<nx; i++)</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>                 pout[i+j*nx] -= val;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>         }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>         <span class="keywordflow">for</span> (j=ny/2; j<ny; j++) {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>             val = slope * (j-ny);</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>             <span class="keywordflow">for</span> (i=0; i<nx; i++)</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>                 pout[i+j*nx] -= val;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     }</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> </div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>                                                    <span class="keyword">const</span> cpl_image * other,</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>                                                    <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>                                                    cpl_boolean vertical)</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> {</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      nx = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      ny = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      msize = 1 + 2 * hsize;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     cpl_mask     * mask;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     cpl_image    * background;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     cpl_ensure_code(hsize >= 0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>     <span class="keywordflow">if</span> (other == NULL) other = <span class="keyword">self</span>;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     mask = vertical ? cpl_mask_new(msize, 1) : cpl_mask_new(1, msize);</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     error |= cpl_mask_not(mask);</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     background = cpl_image_new(nx, ny, cpl_image_get_type(other));</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>     error |= cpl_image_filter_mask(background, other, mask, CPL_FILTER_MEDIAN,</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>                                    CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     cpl_mask_delete(mask);</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     <span class="keywordflow">if</span> (<span class="keyword">self</span> != other) {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>         error |= cpl_image_copy(<span class="keyword">self</span>, other, 1, 1);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     }</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     error |= cpl_image_subtract(<span class="keyword">self</span>, background);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     cpl_image_delete(background);</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="keyword">static</span> cpl_matrix * irplib_matrix_product_normal_create(<span class="keyword">const</span> cpl_matrix * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> {</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keywordtype">double</span>         sum;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     cpl_matrix   * product;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> * ai = cpl_matrix_get_data_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> * aj;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordtype">double</span>       * bwrite;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      m = cpl_matrix_get_nrow(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      n = cpl_matrix_get_ncol(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     <span class="keywordtype">int</span>            i, j, k;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="preprocessor"></span>    <span class="comment">/* Initialize all values to zero.</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment">       This is done to avoid access of uninitilized memory,  in case</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="comment">       someone passes the matrix to for example cpl_matrix_dump(). */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     product = cpl_matrix_new(m, m);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     bwrite = cpl_matrix_get_data(product);</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="preprocessor"></span>    bwrite = (<span class="keywordtype">double</span> *) cpl_malloc(m * m * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     product = cpl_matrix_wrap(m, m, bwrite);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="comment">/* The result at (i,j) is the dot-product of i'th and j'th row */</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="keywordflow">for</span> (i = 0; i < m; i++, bwrite += m, ai += n) {</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>         aj = ai; <span class="comment">/* aj points to first entry in j'th row */</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>         <span class="keywordflow">for</span> (j = i; j < m; j++, aj += n) {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>             sum = 0.0;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>             <span class="keywordflow">for</span> (k = 0; k < n; k++) {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                 sum += ai[k] * aj[k];</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>             }</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>             bwrite[j] = sum;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>         }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     <span class="keywordflow">return</span> product;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> </div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_fit_2d(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>                                                <span class="keyword">const</span> cpl_bivector * xy_pos,</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>                                                <span class="keyword">const</span> cpl_vector * values,</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>                                                <span class="keywordtype">int</span> degree, <span class="keywordtype">double</span> fixy,</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>                                                <span class="keywordtype">double</span> * mse)</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> {</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        np = cpl_bivector_get_size(xy_pos);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     <span class="comment">/* Number of unknowns to determine in one dimension */</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nc1 = 1+degree;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     <span class="comment">/* Number of unknowns to determine */</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     <span class="comment">/* P_{i,0} = 0, except P_{1,0} = 1 */</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nc = nc1 * (1 + nc1) / 2 - nc1;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     cpl_matrix     * mv;   <span class="comment">/* The transpose of the Vandermonde matrix */</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     cpl_matrix     * mh;   <span class="comment">/* Block-Hankel matrix, V'*V */</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     cpl_matrix     * mb;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     cpl_matrix     * mx;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="preprocessor">#ifdef IRPLIB_DISTORTION_ASSERT</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="preprocessor"></span>    <span class="keyword">const</span> <span class="keywordtype">double</span>   * coeffs1d;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="preprocessor"></span>    <span class="keywordtype">double</span>         * dmv;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     cpl_vector     * xhat;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     cpl_vector     * yhat;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>     cpl_vector     * zhat;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     cpl_size         powers[2];</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     <span class="keywordtype">int</span>              degx, degy;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     <span class="keywordtype">int</span>              i, j;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     cpl_error_code   error;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>    </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 2,</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>                     CPL_ERROR_INVALID_TYPE);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>     cpl_ensure_code(np > 0,         cpl_error_get_code());</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     cpl_ensure_code(values != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> </div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>     cpl_ensure_code(cpl_vector_get_size(values) == np,</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     cpl_ensure_code(degree > 0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     cpl_ensure_code(np >= nc,   CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     <span class="comment">/* transform zero-point to fixy */</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     yhat = cpl_vector_duplicate(cpl_bivector_get_y_const(xy_pos));</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     cpl_vector_subtract_scalar(yhat, fixy);</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> </div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     <span class="comment">/* - and ensure P(y) = y on center line */</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     xhat = cpl_vector_duplicate(cpl_bivector_get_x_const(xy_pos));</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     zhat = cpl_vector_duplicate(values);</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     cpl_vector_subtract(zhat, xhat);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> </div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="comment">/* Initialize matrices */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     <span class="comment">/* mv contains the polynomial terms in the order described */</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="comment">/* above in each row, for each input point. */</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     dmv = (<span class="keywordtype">double</span>*)cpl_malloc(nc*np*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     mv = cpl_matrix_wrap(nc, np, dmv);</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     <span class="comment">/* Has redundant FLOPs, appears to improve accuracy */</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     <span class="keywordflow">for</span> (i=0; i < np; i++) {</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> x = cpl_vector_get(xhat, i);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> y = cpl_vector_get(yhat, i);</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>         <span class="keywordtype">double</span> xvalue;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>         <span class="keywordtype">double</span> yvalue = y;</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>         j = 0;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>         <span class="keywordflow">for</span> (degy = 1; degy <= degree; degy++) {</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>             xvalue = 1;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>             <span class="keywordflow">for</span> (degx = 0; degx <= degree-degy; degx++, j++) {</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>                 dmv[np * j + i] = xvalue * yvalue;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>                 xvalue *= x;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>             }</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>             yvalue *= y;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>         }</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         <span class="comment">/* cx_assert( j == nc ); */</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>     }</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>     cpl_vector_delete(xhat);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>     cpl_vector_delete(yhat);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>     <span class="comment">/* mb contains the values, it is not modified */</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>     mb = cpl_matrix_wrap(np, 1, cpl_vector_get_data(zhat));</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> </div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     <span class="comment">/* Form the right hand side of the normal equations */</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     mx = cpl_matrix_product_create(mv, mb);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> </div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>     cpl_matrix_unwrap(mb);</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     cpl_vector_delete(zhat);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     <span class="comment">/* Form the matrix of the normal equations */</span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>     mh = irplib_matrix_product_normal_create(mv);</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>     cpl_matrix_delete(mv);</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> </div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>     <span class="comment">/* Solve XA=B by a least-square solution (aka pseudo-inverse). */</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     error = cpl_matrix_decomp_chol(mh) || cpl_matrix_solve_chol(mh, mx);</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>     cpl_matrix_delete(mh);</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> </div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>         cpl_matrix_delete(mx);</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>         cpl_ensure_code(0, error);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     }</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>     <span class="comment">/* Store coefficients for output */</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="preprocessor">#ifdef IRPLIB_DISTORTION_ASSERT</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="preprocessor"></span>    coeffs1d = cpl_matrix_get_data(mx);</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     j = 0;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>     <span class="keywordflow">for</span> (degy = 1; degy <= degree; degy++) {</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>         powers[1] = degy;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>         <span class="keywordflow">for</span> (degx = 0; degx <= degree-degy; degx++, j++) {</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>             powers[0] = degx;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             <span class="comment">/* cx_assert( coeffs1d[j] == cpl_matrix_get(mx, j, 0) ); */</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>             cpl_polynomial_set_coeff(<span class="keyword">self</span>, powers, cpl_matrix_get(mx, j, 0));</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>         }</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>     }</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     <span class="comment">/* cx_assert( j == nc ); */</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     cpl_matrix_delete(mx);</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> </div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>     <span class="comment">/* P_{1,0} = 1 */</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     powers[0] = 1;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     powers[1] = 0;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     cpl_polynomial_set_coeff(<span class="keyword">self</span>, powers, 1.0);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> </div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     <span class="comment">/* Transform the polynomial back in Y */</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>     cpl_polynomial_shift_1d(<span class="keyword">self</span>, 1, -fixy);</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>     <span class="comment">/* If requested, compute mean squared error */</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>     <span class="keywordflow">if</span> (mse != NULL) {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>         <span class="keyword">const</span> cpl_vector * x_pos = cpl_bivector_get_x_const(xy_pos);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>         <span class="keyword">const</span> cpl_vector * y_pos = cpl_bivector_get_y_const(xy_pos);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>         cpl_vector * x_val = cpl_vector_new(2);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>         <span class="keywordtype">double</span> residue;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         *mse = 0;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>         <span class="keywordflow">for</span> (i=0; i<np; i++) {</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>             cpl_vector_set(x_val, 0, cpl_vector_get(x_pos, i));</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>             cpl_vector_set(x_val, 1, cpl_vector_get(y_pos, i));</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>             <span class="comment">/* Subtract from the true value, square, accumulate */</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>             residue = cpl_vector_get(values, i)</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>                 - cpl_polynomial_eval(<span class="keyword">self</span>, x_val);</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>             *mse += residue * residue;</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>         }</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>         cpl_vector_delete(x_val);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>         <span class="comment">/* Average the error term */</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>         *mse /= np;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     }</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> </div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> }</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__distortion_8h_source.html b/html/irplib__distortion_8h_source.html
index 934f7df..44bb787 100644
--- a/html/irplib__distortion_8h_source.html
+++ b/html/irplib__distortion_8h_source.html
@@ -2,59 +2,90 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_distortion.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_distortion.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_distortion.h,v 1.6 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_DISTORTION_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISTORTION_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                    Prototypes</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 cpl_polynomial * irplib_distortion_estimate(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, 
-<a name="l00042"></a>00042         <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, cpl_apertures **) ;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_distortion.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_distortion.h,v 1.6 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_DISTORTION_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISTORTION_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                    Prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> cpl_polynomial * irplib_distortion_estimate(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>         <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, cpl_apertures **) ;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__flat_8c_source.html b/html/irplib__flat_8c_source.html
index 981e17f..ee9683b 100644
--- a/html/irplib__flat_8c_source.html
+++ b/html/irplib__flat_8c_source.html
@@ -2,341 +2,372 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_flat.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_flat.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_flat.c,v 1.15 2007/08/07 12:15:41 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/08/07 12:15:41 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.15 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_flat.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                            Functions prototypes</span>
-<a name="l00043"></a>00043 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">double</span> * irplib_flat_fit_proportional(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>) ;
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00055"></a>00055 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00087"></a><a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e">00087</a> cpl_imagelist * <a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e" title="Compute a flat-field out of a set of exposures.">irplib_flat_fit_set</a>(
-<a name="l00088"></a>00088         cpl_imagelist   *   raw,
-<a name="l00089"></a>00089         <span class="keywordtype">int</span>                 mode)
-<a name="l00090"></a>00090 {
-<a name="l00091"></a>00091     <span class="keywordtype">double</span>          *   plane_med    = NULL ;
-<a name="l00092"></a>00092     <span class="keywordtype">double</span>          *   slope        = NULL ;
-<a name="l00093"></a>00093     cpl_image       *   gain         = NULL ;
-<a name="l00094"></a>00094     <span class="keywordtype">double</span>          *   pgain        = NULL ;
-<a name="l00095"></a>00095     cpl_image       *   intercept    = NULL ;
-<a name="l00096"></a>00096     <span class="keywordtype">double</span>          *   pintercept   = NULL ;
-<a name="l00097"></a>00097     cpl_image       *   sq_err       = NULL ;
-<a name="l00098"></a>00098     <span class="keywordtype">double</span>          *   psq_err      = NULL ;
-<a name="l00099"></a>00099     <span class="keywordtype">double</span>          *   timeline     = NULL ;
-<a name="l00100"></a>00100     <span class="keywordtype">float</span>           *   raw_im_data  = NULL ;
-<a name="l00101"></a>00101     cpl_imagelist   *   result       = NULL ;
-<a name="l00102"></a>00102     <span class="keyword">const</span> <span class="keywordtype">int</span>           nx = cpl_image_get_size_x(cpl_imagelist_get(raw, 0));
-<a name="l00103"></a>00103     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(cpl_imagelist_get(raw, 0));
-<a name="l00104"></a>00104     <span class="keyword">const</span> <span class="keywordtype">int</span>           ni = cpl_imagelist_get_size(raw);
-<a name="l00105"></a>00105     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     <span class="comment">/* Check entries */</span>
-<a name="l00108"></a>00108     <span class="keywordflow">if</span> (raw==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00109"></a>00109     <span class="keywordflow">if</span> ((mode != 0) && (mode != 1)) <span class="keywordflow">return</span> NULL ;
-<a name="l00110"></a>00110     <span class="keywordflow">if</span> (cpl_image_get_type(cpl_imagelist_get(raw, 0)) != CPL_TYPE_FLOAT)
-<a name="l00111"></a>00111         <span class="keywordflow">return</span> NULL ;
-<a name="l00112"></a>00112     <span class="keywordflow">if</span> (cpl_imagelist_get_size(raw) <= 1) <span class="keywordflow">return</span> NULL ;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114     <span class="comment">/* Compute median for all planes */</span>
-<a name="l00115"></a>00115     plane_med = cpl_malloc(ni * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00116"></a>00116     <span class="keywordflow">for</span> (i=0 ; i<ni ; i++)
-<a name="l00117"></a>00117         plane_med[i] = cpl_image_get_median(cpl_imagelist_get(raw, i));
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="comment">/* Create result images */</span>
-<a name="l00120"></a>00120     gain = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;
-<a name="l00121"></a>00121     pgain = cpl_image_get_data_double(gain) ;
-<a name="l00122"></a>00122     <span class="keywordflow">if</span> (mode == 1) {
-<a name="l00123"></a>00123         intercept = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;
-<a name="l00124"></a>00124         pintercept = cpl_image_get_data_double(intercept) ;
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126     sq_err = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;
-<a name="l00127"></a>00127     psq_err = cpl_image_get_data_double(sq_err) ;
-<a name="l00128"></a>00128     timeline = cpl_malloc(ni * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130     <span class="comment">/* Loop on all pixel positions */</span>
-<a name="l00131"></a>00131     cpl_msg_info(cpl_func, <span class="stringliteral">"Computing gains for all positions (long)..."</span>) ;
-<a name="l00132"></a>00132     <span class="keywordflow">for</span> (i=0 ; i<nx * ny ; i++) {
-<a name="l00133"></a>00133         <span class="comment">/* extract time line */</span>
-<a name="l00134"></a>00134         <span class="keywordflow">for</span> (j=0 ; j<ni ; j++) {
-<a name="l00135"></a>00135             raw_im_data = cpl_image_get_data_float(cpl_imagelist_get(raw, j)) ;
-<a name="l00136"></a>00136             timeline[j] = (double)raw_im_data[i] ;
-<a name="l00137"></a>00137         }
-<a name="l00138"></a>00138         <span class="comment">/* Fit slope to this time line */</span>
-<a name="l00139"></a>00139         <span class="keywordflow">if</span> (mode == 1) {
-<a name="l00140"></a>00140             slope = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(plane_med, timeline, ni) ;
-<a name="l00141"></a>00141             pintercept[i] = slope[0] ;
-<a name="l00142"></a>00142             pgain[i]      = slope[1] ;
-<a name="l00143"></a>00143             psq_err[i]    = slope[2] ;
-<a name="l00144"></a>00144             <span class="comment">/* Set results in output images */</span>
-<a name="l00145"></a>00145         } <span class="keywordflow">else</span> {
-<a name="l00146"></a>00146             slope = irplib_flat_fit_proportional(plane_med, timeline, ni) ;
-<a name="l00147"></a>00147             <span class="comment">/* Set results in output images */</span>
-<a name="l00148"></a>00148             pgain[i]      = slope[0] ;
-<a name="l00149"></a>00149             psq_err[i]    = slope[1] ;
-<a name="l00150"></a>00150         }
-<a name="l00151"></a>00151         cpl_free(slope);
-<a name="l00152"></a>00152     }
-<a name="l00153"></a>00153     cpl_free(plane_med) ;
-<a name="l00154"></a>00154     cpl_free(timeline) ;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="comment">/* Return */</span>
-<a name="l00157"></a>00157     result = cpl_imagelist_new() ;
-<a name="l00158"></a>00158     <span class="keywordflow">if</span> (mode == 1) {
-<a name="l00159"></a>00159         cpl_imagelist_set(result, gain, 0) ;
-<a name="l00160"></a>00160         cpl_imagelist_set(result, intercept, 1) ;
-<a name="l00161"></a>00161         cpl_imagelist_set(result, sq_err, 2) ;
-<a name="l00162"></a>00162     } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163         cpl_imagelist_set(result, gain, 0) ;
-<a name="l00164"></a>00164         cpl_imagelist_set(result, sq_err, 1) ;
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166     <span class="keywordflow">return</span> result ;
-<a name="l00167"></a>00167 }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="comment">/* @cond */</span>
-<a name="l00170"></a>00170 <span class="preprocessor">#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">#define MAX_ITERATE     30</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="comment">/* @endcond */</span>
-<a name="l00173"></a>00173 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00190"></a>00190 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00191"></a><a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91">00191</a> <span class="keywordtype">double</span> * <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(
-<a name="l00192"></a>00192         <span class="keywordtype">double</span>  *   x,
-<a name="l00193"></a>00193         <span class="keywordtype">double</span>  *   y,
-<a name="l00194"></a>00194         <span class="keywordtype">int</span>         np)
-<a name="l00195"></a>00195 {
-<a name="l00196"></a>00196     <span class="keywordtype">double</span>      *   c ;
-<a name="l00197"></a>00197     <span class="keywordtype">double</span>          aa, bb, bcomp, b1, b2, del, abdevt, f, f1, f2, sigb, temp,
-<a name="l00198"></a>00198                     d, sum ;
-<a name="l00199"></a>00199     <span class="keywordtype">double</span>          sx, sy, sxy, sxx, chisq ;
-<a name="l00200"></a>00200     cpl_vector  *   arr ;
-<a name="l00201"></a>00201     <span class="keywordtype">double</span>      *   parr ;
-<a name="l00202"></a>00202     <span class="keywordtype">double</span>          aa_ls, bb_ls ;
-<a name="l00203"></a>00203     <span class="keywordtype">int</span>             iter ;
-<a name="l00204"></a>00204     <span class="keywordtype">int</span>             i ;
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="comment">/* Check entries */</span>
-<a name="l00207"></a>00207     <span class="keywordflow">if</span> (x==NULL || y==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     c = cpl_malloc(3 * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     sx = sy = sxx = sxy = 0.00 ;
-<a name="l00212"></a>00212     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00213"></a>00213         sx  += x[i];
-<a name="l00214"></a>00214         sy  += y[i];
-<a name="l00215"></a>00215         sxy += x[i] * y[i];
-<a name="l00216"></a>00216         sxx += x[i] * x[i];
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     del = np * sxx - sx * sx;
-<a name="l00220"></a>00220     aa_ls = aa  = (sxx * sy - sx * sxy) / del;
-<a name="l00221"></a>00221     bb_ls = bb  = (np * sxy - sx * sy) / del;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     chisq = 0.00 ;
-<a name="l00224"></a>00224     <span class="keywordflow">for</span> (i=0;i<np;i++) {
-<a name="l00225"></a>00225         temp = y[i] - (aa+bb*x[i]) ;
-<a name="l00226"></a>00226         temp *= temp ;
-<a name="l00227"></a>00227         chisq += temp ;
-<a name="l00228"></a>00228     }
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230     arr = cpl_vector_new(np) ;
-<a name="l00231"></a>00231     parr = cpl_vector_get_data(arr) ;
-<a name="l00232"></a>00232     sigb = sqrt(chisq/del);
-<a name="l00233"></a>00233     b1   = bb ;
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     bcomp = b1 ;
-<a name="l00236"></a>00236     sum = 0.00 ;
-<a name="l00237"></a>00237     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00238"></a>00238             parr[i] = y[i] - bcomp * x[i];
-<a name="l00239"></a>00239         }
-<a name="l00240"></a>00240     aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span>
-<a name="l00241"></a>00241     abdevt = 0.0;
-<a name="l00242"></a>00242     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00243"></a>00243         d = y[i] - (bcomp * x[i] + aa);
-<a name="l00244"></a>00244         abdevt += fabs(d);
-<a name="l00245"></a>00245         <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);
-<a name="l00246"></a>00246         <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248     f1 = sum ;
-<a name="l00249"></a>00249     b2   = bb + SIGN(3.0 * sigb, f1);
-<a name="l00250"></a>00250     bcomp = b2 ;
-<a name="l00251"></a>00251     sum = 0.00 ;
-<a name="l00252"></a>00252     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];
-<a name="l00253"></a>00253     aa = cpl_vector_get_median(arr);  <span class="comment">/* arr permuted */</span>
-<a name="l00254"></a>00254     abdevt = 0.0;
-<a name="l00255"></a>00255     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00256"></a>00256         d = y[i] - (bcomp * x[i] + aa);
-<a name="l00257"></a>00257         abdevt += fabs(d);
-<a name="l00258"></a>00258         <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);
-<a name="l00259"></a>00259         <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);
-<a name="l00260"></a>00260     }
-<a name="l00261"></a>00261     f2 = sum ;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="keywordflow">if</span> (fabs(b2-b1)<1e-7) {
-<a name="l00264"></a>00264         c[0] = aa ;
-<a name="l00265"></a>00265         c[1] = bb ;
-<a name="l00266"></a>00266         c[2] = abdevt / (double)np;
-<a name="l00267"></a>00267         cpl_vector_delete(arr);
-<a name="l00268"></a>00268         <span class="keywordflow">return</span> c ;
-<a name="l00269"></a>00269     }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271     iter = 0 ;
-<a name="l00272"></a>00272     <span class="keywordflow">while</span> (f1*f2 > 0.0) {
-<a name="l00273"></a>00273         bb = 2.0*b2-b1;
-<a name="l00274"></a>00274         b1 = b2;
-<a name="l00275"></a>00275         f1 = f2;
-<a name="l00276"></a>00276         b2 = bb;
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278         bcomp = b2 ;
-<a name="l00279"></a>00279         sum = 0.00 ;
-<a name="l00280"></a>00280         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];
-<a name="l00281"></a>00281         aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span>
-<a name="l00282"></a>00282         abdevt = 0.0;
-<a name="l00283"></a>00283         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00284"></a>00284             d = y[i] - (bcomp * x[i] + aa);
-<a name="l00285"></a>00285             abdevt += fabs(d);
-<a name="l00286"></a>00286             <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);
-<a name="l00287"></a>00287             <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);
-<a name="l00288"></a>00288         }
-<a name="l00289"></a>00289         f2 = sum ;
-<a name="l00290"></a>00290         iter++;
-<a name="l00291"></a>00291         <span class="keywordflow">if</span> (iter>=MAX_ITERATE) break ;
-<a name="l00292"></a>00292     }
-<a name="l00293"></a>00293     <span class="keywordflow">if</span> (iter>=MAX_ITERATE) {
-<a name="l00294"></a>00294         c[0] = aa_ls ;
-<a name="l00295"></a>00295         c[1] = bb_ls ;
-<a name="l00296"></a>00296         c[2] = -1.0 ;
-<a name="l00297"></a>00297         cpl_vector_delete(arr);
-<a name="l00298"></a>00298         <span class="keywordflow">return</span> c ;
-<a name="l00299"></a>00299     }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     sigb = 0.01 * sigb;
-<a name="l00302"></a>00302     <span class="keywordflow">while</span> (fabs(b2-b1) > sigb) {
-<a name="l00303"></a>00303         bb = 0.5 * (b1 + b2) ;
-<a name="l00304"></a>00304         <span class="keywordflow">if</span> ((fabs(bb-b1)<1e-7) || (fabs(bb-b2)<1e-7)) <span class="keywordflow">break</span>;
-<a name="l00305"></a>00305         bcomp = bb ;
-<a name="l00306"></a>00306         sum = 0.00 ;
-<a name="l00307"></a>00307         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];
-<a name="l00308"></a>00308         aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span>
-<a name="l00309"></a>00309         abdevt = 0.0;
-<a name="l00310"></a>00310         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00311"></a>00311             d = y[i] - (bcomp * x[i] + aa);
-<a name="l00312"></a>00312             abdevt += fabs(d);
-<a name="l00313"></a>00313             <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);
-<a name="l00314"></a>00314             <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);
-<a name="l00315"></a>00315         }
-<a name="l00316"></a>00316         f = sum ;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318         <span class="keywordflow">if</span> (f*f1 >= 0.0) {
-<a name="l00319"></a>00319             f1=f;
-<a name="l00320"></a>00320             b1=bb;
-<a name="l00321"></a>00321         } <span class="keywordflow">else</span> {
-<a name="l00322"></a>00322             f2=f;
-<a name="l00323"></a>00323             b2=bb;
-<a name="l00324"></a>00324         }
-<a name="l00325"></a>00325     }
-<a name="l00326"></a>00326     cpl_vector_delete(arr) ;
-<a name="l00327"></a>00327     c[0]=aa;
-<a name="l00328"></a>00328     c[1]=bb;
-<a name="l00329"></a>00329     c[2]=abdevt/np;
-<a name="l00330"></a>00330     <span class="keywordflow">return</span> c ;
-<a name="l00331"></a>00331 }
-<a name="l00332"></a>00332 <span class="preprocessor">#undef MAX_ITERATE</span>
-<a name="l00333"></a>00333 <span class="preprocessor"></span><span class="preprocessor">#undef SIGN</span>
-<a name="l00334"></a>00334 <span class="preprocessor"></span>
-<a name="l00335"></a>00335 
-<a name="l00338"></a>00338 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00362"></a>00362 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00363"></a>00363 <span class="preprocessor">#define FITPROP_BIG_SLOPE   1e30</span>
-<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> * irplib_flat_fit_proportional(
-<a name="l00365"></a>00365         <span class="keywordtype">double</span>  *   x,
-<a name="l00366"></a>00366         <span class="keywordtype">double</span>  *   y,
-<a name="l00367"></a>00367         <span class="keywordtype">int</span>         np)
-<a name="l00368"></a>00368 {
-<a name="l00369"></a>00369     cpl_vector  *   slopes ;
-<a name="l00370"></a>00370     <span class="keywordtype">double</span>      *   pslopes ;
-<a name="l00371"></a>00371     <span class="keywordtype">double</span>      *   med_slope ;
-<a name="l00372"></a>00372     <span class="keywordtype">double</span>          val ;
-<a name="l00373"></a>00373     <span class="keywordtype">double</span>          sq_err ;
-<a name="l00374"></a>00374     <span class="keywordtype">int</span>             i ;
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     <span class="comment">/* Check entries */</span>
-<a name="l00377"></a>00377     <span class="keywordflow">if</span> (x==NULL || y==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     slopes = cpl_vector_new(np) ;
-<a name="l00380"></a>00380     pslopes = cpl_vector_get_data(slopes) ;
-<a name="l00381"></a>00381     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00382"></a>00382         <span class="keywordflow">if</span> (fabs(x[i])>1e-30)  pslopes[i] = y[i] / x[i] ;
-<a name="l00383"></a>00383         <span class="keywordflow">else</span>                   pslopes[i] = FITPROP_BIG_SLOPE ;
-<a name="l00384"></a>00384     }
-<a name="l00385"></a>00385     med_slope = cpl_malloc(2 * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00386"></a>00386     med_slope[0] = cpl_vector_get_median(slopes); <span class="comment">/* slopes permuted */</span>
-<a name="l00387"></a>00387     cpl_vector_delete(slopes);
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389     sq_err = 0.00 ;
-<a name="l00390"></a>00390     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00391"></a>00391         val = med_slope[0] * x[i] ;
-<a name="l00392"></a>00392         sq_err += (val-y[i])*(val-y[i]) ;
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394     sq_err /= (double)np ;
-<a name="l00395"></a>00395     med_slope[1] = sq_err ;
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397     <span class="keywordflow">return</span> med_slope ;
-<a name="l00398"></a>00398 <span class="preprocessor">#undef FITPROP_BIG_SLOPE</span>
-<a name="l00399"></a>00399 <span class="preprocessor"></span>}
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_flat.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_flat.c,v 1.15 2007/08/07 12:15:41 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/08/07 12:15:41 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.15 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_flat.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">double</span> * irplib_flat_fit_proportional(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e">   87</a></span> cpl_imagelist * <a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e" title="Compute a flat-field out of a set of exposures.">irplib_flat_fit_set</a>(</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         cpl_imagelist   *   raw,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">int</span>                 mode)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">double</span>          *   plane_med    = NULL ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">double</span>          *   slope        = NULL ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_image       *   gain         = NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">double</span>          *   pgain        = NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_image       *   intercept    = NULL ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">double</span>          *   pintercept   = NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_image       *   sq_err       = NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">double</span>          *   psq_err      = NULL ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordtype">double</span>          *   timeline     = NULL ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">float</span>           *   raw_im_data  = NULL ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     cpl_imagelist   *   result       = NULL ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           nx = cpl_image_get_size_x(cpl_imagelist_get(raw, 0));</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           ny = cpl_image_get_size_y(cpl_imagelist_get(raw, 0));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           ni = cpl_imagelist_get_size(raw);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">if</span> (raw==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">if</span> ((mode != 0) && (mode != 1)) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">if</span> (cpl_image_get_type(cpl_imagelist_get(raw, 0)) != CPL_TYPE_FLOAT)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">if</span> (cpl_imagelist_get_size(raw) <= 1) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="comment">/* Compute median for all planes */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     plane_med = cpl_malloc(ni * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">for</span> (i=0 ; i<ni ; i++)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         plane_med[i] = cpl_image_get_median(cpl_imagelist_get(raw, i));</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Create result images */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     gain = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     pgain = cpl_image_get_data_double(gain) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">if</span> (mode == 1) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         intercept = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         pintercept = cpl_image_get_data_double(intercept) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     sq_err = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE) ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     psq_err = cpl_image_get_data_double(sq_err) ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     timeline = cpl_malloc(ni * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="comment">/* Loop on all pixel positions */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Computing gains for all positions (long)..."</span>) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">for</span> (i=0 ; i<nx * ny ; i++) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="comment">/* extract time line */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         <span class="keywordflow">for</span> (j=0 ; j<ni ; j++) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             raw_im_data = cpl_image_get_data_float(cpl_imagelist_get(raw, j)) ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>             timeline[j] = (double)raw_im_data[i] ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="comment">/* Fit slope to this time line */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="keywordflow">if</span> (mode == 1) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>             slope = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(plane_med, timeline, ni) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>             pintercept[i] = slope[0] ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>             pgain[i]      = slope[1] ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>             psq_err[i]    = slope[2] ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>             <span class="comment">/* Set results in output images */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>             slope = irplib_flat_fit_proportional(plane_med, timeline, ni) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             <span class="comment">/* Set results in output images */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>             pgain[i]      = slope[0] ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>             psq_err[i]    = slope[1] ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         cpl_free(slope);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_free(plane_med) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_free(timeline) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     result = cpl_imagelist_new() ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordflow">if</span> (mode == 1) {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         cpl_imagelist_set(result, gain, 0) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         cpl_imagelist_set(result, intercept, 1) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         cpl_imagelist_set(result, sq_err, 2) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         cpl_imagelist_set(result, gain, 0) ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         cpl_imagelist_set(result, sq_err, 1) ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordflow">return</span> result ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/* @cond */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX_ITERATE     30</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span><span class="comment">/* @endcond */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91">  191</a></span> <span class="keywordtype">double</span> * <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="keywordtype">double</span>  *   x,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         <span class="keywordtype">double</span>  *   y,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="keywordtype">int</span>         np)</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordtype">double</span>      *   c ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordtype">double</span>          aa, bb, bcomp, b1, b2, del, abdevt, f, f1, f2, sigb, temp,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                     d, sum ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordtype">double</span>          sx, sy, sxy, sxx, chisq ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_vector  *   arr ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordtype">double</span>      *   parr ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordtype">double</span>          aa_ls, bb_ls ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordtype">int</span>             iter ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordtype">int</span>             i ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">if</span> (x==NULL || y==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     c = cpl_malloc(3 * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     sx = sy = sxx = sxy = 0.00 ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         sx  += x[i];</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         sy  += y[i];</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         sxy += x[i] * y[i];</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         sxx += x[i] * x[i];</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     del = np * sxx - sx * sx;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     aa_ls = aa  = (sxx * sy - sx * sxy) / del;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     bb_ls = bb  = (np * sxy - sx * sy) / del;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     chisq = 0.00 ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordflow">for</span> (i=0;i<np;i++) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         temp = y[i] - (aa+bb*x[i]) ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         temp *= temp ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         chisq += temp ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     arr = cpl_vector_new(np) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     parr = cpl_vector_get_data(arr) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     sigb = sqrt(chisq/del);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     b1   = bb ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     bcomp = b1 ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     sum = 0.00 ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>             parr[i] = y[i] - bcomp * x[i];</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     abdevt = 0.0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         d = y[i] - (bcomp * x[i] + aa);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         abdevt += fabs(d);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     f1 = sum ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     b2   = bb + SIGN(3.0 * sigb, f1);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     bcomp = b2 ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     sum = 0.00 ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     aa = cpl_vector_get_median(arr);  <span class="comment">/* arr permuted */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     abdevt = 0.0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         d = y[i] - (bcomp * x[i] + aa);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         abdevt += fabs(d);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     f2 = sum ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">if</span> (fabs(b2-b1)<1e-7) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         c[0] = aa ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         c[1] = bb ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         c[2] = abdevt / (double)np;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         cpl_vector_delete(arr);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         <span class="keywordflow">return</span> c ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     iter = 0 ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordflow">while</span> (f1*f2 > 0.0) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         bb = 2.0*b2-b1;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         b1 = b2;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         f1 = f2;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         b2 = bb;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         bcomp = b2 ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         sum = 0.00 ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         abdevt = 0.0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             d = y[i] - (bcomp * x[i] + aa);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>             abdevt += fabs(d);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>             <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>             <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>         }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         f2 = sum ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         iter++;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         <span class="keywordflow">if</span> (iter>=MAX_ITERATE) break ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keywordflow">if</span> (iter>=MAX_ITERATE) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         c[0] = aa_ls ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         c[1] = bb_ls ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         c[2] = -1.0 ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         cpl_vector_delete(arr);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <span class="keywordflow">return</span> c ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     sigb = 0.01 * sigb;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">while</span> (fabs(b2-b1) > sigb) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         bb = 0.5 * (b1 + b2) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <span class="keywordflow">if</span> ((fabs(bb-b1)<1e-7) || (fabs(bb-b2)<1e-7)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         bcomp = bb ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         sum = 0.00 ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) parr[i] = y[i] - bcomp * x[i];</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         aa = cpl_vector_get_median(arr); <span class="comment">/* arr permuted */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         abdevt = 0.0;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             d = y[i] - (bcomp * x[i] + aa);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>             abdevt += fabs(d);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             <span class="keywordflow">if</span> (fabs(y[i]) > 1e-7) d /= fabs(y[i]);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>             <span class="keywordflow">if</span> (fabs(d) > 1e-7) sum += (d >= 0.0 ? x[i] : -x[i]);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>         f = sum ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         <span class="keywordflow">if</span> (f*f1 >= 0.0) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>             f1=f;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>             b1=bb;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             f2=f;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             b2=bb;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     cpl_vector_delete(arr) ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     c[0]=aa;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     c[1]=bb;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     c[2]=abdevt/np;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">return</span> c ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor">#undef MAX_ITERATE</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor"></span><span class="preprocessor">#undef SIGN</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor">#define FITPROP_BIG_SLOPE   1e30</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> * irplib_flat_fit_proportional(</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         <span class="keywordtype">double</span>  *   x,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         <span class="keywordtype">double</span>  *   y,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordtype">int</span>         np)</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     cpl_vector  *   slopes ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordtype">double</span>      *   pslopes ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     <span class="keywordtype">double</span>      *   med_slope ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="keywordtype">double</span>          val ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     <span class="keywordtype">double</span>          sq_err ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordtype">int</span>             i ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="keywordflow">if</span> (x==NULL || y==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     slopes = cpl_vector_new(np) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     pslopes = cpl_vector_get_data(slopes) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         <span class="keywordflow">if</span> (fabs(x[i])>1e-30)  pslopes[i] = y[i] / x[i] ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         <span class="keywordflow">else</span>                   pslopes[i] = FITPROP_BIG_SLOPE ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     med_slope = cpl_malloc(2 * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     med_slope[0] = cpl_vector_get_median(slopes); <span class="comment">/* slopes permuted */</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     cpl_vector_delete(slopes);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     sq_err = 0.00 ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         val = med_slope[0] * x[i] ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         sq_err += (val-y[i])*(val-y[i]) ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     sq_err /= (double)np ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     med_slope[1] = sq_err ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">return</span> med_slope ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="preprocessor">#undef FITPROP_BIG_SLOPE</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__flat_8h_source.html b/html/irplib__flat_8h_source.html
index 4c5355c..52466c8 100644
--- a/html/irplib__flat_8h_source.html
+++ b/html/irplib__flat_8h_source.html
@@ -2,55 +2,86 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_flat.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_flat.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_flat.h,v 1.4 2005/09/15 11:47:16 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2005/09/15 11:47:16 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_FLAT_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FLAT_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_imagelist * <a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e" title="Compute a flat-field out of a set of exposures.">irplib_flat_fit_set</a>(cpl_imagelist *, <span class="keywordtype">int</span>) ;
-<a name="l00038"></a>00038 <span class="keywordtype">double</span> * <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>) ;
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_flat.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_flat.h,v 1.4 2005/09/15 11:47:16 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2005/09/15 11:47:16 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_FLAT_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FLAT_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_imagelist * <a class="code" href="group__irplib__flat.html#gaf9bd48348cc91bb66304697b4c7aa58e" title="Compute a flat-field out of a set of exposures.">irplib_flat_fit_set</a>(cpl_imagelist *, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keywordtype">double</span> * <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__framelist_8c_source.html b/html/irplib__framelist_8c_source.html
index 925ff5e..71e00fb 100644
--- a/html/irplib__framelist_8c_source.html
+++ b/html/irplib__framelist_8c_source.html
@@ -2,970 +2,1001 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_framelist.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_framelist.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_framelist.c,v 1.30 2013/02/27 16:05:13 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package </span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/02/27 16:05:13 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.30 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                 Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "irplib_framelist.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <string.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sys/types.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <regex.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <math.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <assert.h></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                 New types</span>
-<a name="l00052"></a>00052 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/* @cond */</span>
-<a name="l00055"></a>00055 <span class="keyword">struct </span>_irplib_framelist_ {
-<a name="l00056"></a>00056     <span class="keywordtype">int</span> size;
-<a name="l00057"></a>00057     cpl_frame        ** frame;
-<a name="l00058"></a>00058     cpl_propertylist ** propertylist;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 };
-<a name="l00061"></a>00061 <span class="comment">/* @endcond */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                                 Private funcions</span>
-<a name="l00065"></a>00065 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_framelist_set_size(irplib_framelist *)
-<a name="l00068"></a>00068 <span class="preprocessor">#if defined __GNUC__ &&  __GNUC__ >= 4</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>    __attribute__((nonnull))
-<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keyword">static</span> cpl_boolean irplib_property_equal(<span class="keyword">const</span> cpl_propertylist *,
-<a name="l00074"></a>00074                                          <span class="keyword">const</span> cpl_propertylist *,
-<a name="l00075"></a>00075                                          <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_type, <span class="keywordtype">double</span>,
-<a name="l00076"></a>00076                                          <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **)
-<a name="l00077"></a>00077 <span class="preprocessor">#if defined __GNUC__ &&  __GNUC__ >= 4</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>    __attribute__((nonnull))
-<a name="l00079"></a>00079 <span class="preprocessor">#endif</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00161"></a>00161 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00162"></a>00162 
-<a name="l00165"></a>00165 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00166"></a>00166 <span class="comment">                            Function codes</span>
-<a name="l00167"></a>00167 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00177"></a>00177 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00178"></a><a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0">00178</a> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>(<span class="keywordtype">void</span>)
-<a name="l00179"></a>00179 {
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     <span class="keywordflow">return</span> (irplib_framelist *) cpl_calloc(1, <span class="keyword">sizeof</span>(irplib_framelist));
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00190"></a>00190 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00191"></a><a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26">00191</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(irplib_framelist * <span class="keyword">self</span>)
-<a name="l00192"></a>00192 {
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(<span class="keyword">self</span>);
-<a name="l00195"></a>00195     cpl_free(<span class="keyword">self</span>);
-<a name="l00196"></a>00196 }
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00208"></a>00208 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00209"></a><a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1">00209</a> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(<span class="keyword">const</span> cpl_frameset * frameset)
-<a name="l00210"></a>00210 {
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     irplib_framelist * <span class="keyword">self</span>;
-<a name="l00213"></a>00213     <span class="keyword">const</span> cpl_frame * frame;
-<a name="l00214"></a>00214     <span class="keywordtype">int</span> i;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217     cpl_ensure(frameset != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     <span class="comment">/* The function cannot fail now */</span>
-<a name="l00220"></a>00220     <span class="keyword">self</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222     <span class="keywordflow">for</span> (i = 0, frame = cpl_frameset_get_first_const(frameset);
-<a name="l00223"></a>00223          frame != NULL;
-<a name="l00224"></a>00224          i++, frame = cpl_frameset_get_next_const(frameset)) {
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226         cpl_frame * copy = cpl_frame_duplicate(frame);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228         <span class="keyword">const</span> cpl_error_code error = <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">self</span>, copy, i);
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230         assert(error == CPL_ERROR_NONE);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     assert(self->size == cpl_frameset_get_size(frameset));
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     <span class="keywordflow">return</span> <span class="keyword">self</span>;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00250"></a>00250 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00251"></a><a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174">00251</a> cpl_frameset * <a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174" title="Create a CPL frameset from an irplib_framelist.">irplib_frameset_cast</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>)
-<a name="l00252"></a>00252 {
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254     cpl_frameset * <span class="keyword">new</span>;
-<a name="l00255"></a>00255     <span class="keywordtype">int</span> i;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     <span class="comment">/* The function cannot fail now */</span>
-<a name="l00260"></a>00260     <span class="keyword">new</span> = cpl_frameset_new();
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00263"></a>00263         cpl_frame * frame = cpl_frame_duplicate(self->frame[i]);
-<a name="l00264"></a>00264         <span class="keyword">const</span> cpl_error_code error = cpl_frameset_insert(<span class="keyword">new</span>, frame);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266         assert(error == CPL_ERROR_NONE);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270     assert(self->size == cpl_frameset_get_size(<span class="keyword">new</span>));
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272     <span class="keywordflow">return</span> <span class="keyword">new</span>;
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00289"></a>00289 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00290"></a><a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396">00290</a> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,
-<a name="l00291"></a>00291                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)
-<a name="l00292"></a>00292 {
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294     irplib_framelist * <span class="keyword">new</span>;
-<a name="l00295"></a>00295     <span class="keywordtype">int</span> i, newsize;
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00299"></a>00299     cpl_ensure(tag  != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <span class="keyword">new</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();
-<a name="l00302"></a>00302     newsize = 0;
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00305"></a>00305         <span class="keyword">const</span> cpl_frame * frame = <span class="keyword">self</span>->frame[i];
-<a name="l00306"></a>00306         <span class="keyword">const</span> <span class="keywordtype">char</span> * ftag = cpl_frame_get_tag(frame);
-<a name="l00307"></a>00307         cpl_frame * copy;
-<a name="l00308"></a>00308         cpl_error_code error;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310         <span class="keywordflow">if</span> (ftag == NULL) {
-<a name="l00311"></a>00311             <span class="comment">/* The frame is ill-formed */</span>
-<a name="l00312"></a>00312             <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);
-<a name="l00313"></a>00313             cpl_ensure(0, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316         <span class="keywordflow">if</span> (strcmp(tag, ftag)) <span class="keywordflow">continue</span>;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318         copy = cpl_frame_duplicate(frame);
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320         error = <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">new</span>, copy, newsize);
-<a name="l00321"></a>00321         assert(error == CPL_ERROR_NONE);
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323         <span class="keywordflow">if</span> (self->propertylist[i] != NULL) <span class="keyword">new</span>->propertylist[newsize]
-<a name="l00324"></a>00324             = cpl_propertylist_duplicate(self->propertylist[i]);
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326         newsize++;
-<a name="l00327"></a>00327     }
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329     assert( newsize == new->size );
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="keywordflow">if</span> (newsize == 0) {
-<a name="l00332"></a>00332 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00333"></a>00333 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00334"></a>00334                               <span class="stringliteral">"The list of %d frame(s) has no frames "</span>
-<a name="l00335"></a>00335                               <span class="stringliteral">"with tag: %s"</span>, self->size, tag);
-<a name="l00336"></a>00336 <span class="preprocessor">#else</span>
-<a name="l00337"></a>00337 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00338"></a>00338                               <span class="stringliteral">"The list of frame(s) has no frames "</span>
-<a name="l00339"></a>00339                               <span class="stringliteral">"with the given tag"</span>);
-<a name="l00340"></a>00340 <span class="preprocessor">#endif</span>
-<a name="l00341"></a>00341 <span class="preprocessor"></span>        <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);
-<a name="l00342"></a>00342         <span class="keyword">new</span> = NULL;
-<a name="l00343"></a>00343     }
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="keywordflow">return</span> <span class="keyword">new</span>;
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347 }
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00359"></a>00359 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00360"></a><a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01">00360</a> irplib_framelist * <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(<span class="keyword">const</span> irplib_framelist* <span class="keyword">self</span>,
-<a name="l00361"></a>00361                                                    <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,
-<a name="l00362"></a>00362                                                    cpl_boolean invert)
-<a name="l00363"></a>00363 {
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365     irplib_framelist * <span class="keyword">new</span>;
-<a name="l00366"></a>00366     <span class="keywordtype">int</span> error;
-<a name="l00367"></a>00367     <span class="keywordtype">int</span> i, newsize;
-<a name="l00368"></a>00368     <span class="keyword">const</span> <span class="keywordtype">int</span> xor = invert == CPL_FALSE ? 0 : 1;
-<a name="l00369"></a>00369     regex_t re;
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372     cpl_ensure(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00373"></a>00373     cpl_ensure(regexp != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     error = regcomp(&re, regexp, REG_EXTENDED | REG_NOSUB);
-<a name="l00376"></a>00376     cpl_ensure(!error, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     <span class="keyword">new</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();
-<a name="l00379"></a>00379     newsize = 0;
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00382"></a>00382         <span class="keyword">const</span> cpl_frame * frame = <span class="keyword">self</span>->frame[i];
-<a name="l00383"></a>00383         <span class="keyword">const</span> <span class="keywordtype">char</span> * tag = cpl_frame_get_tag(frame);
-<a name="l00384"></a>00384         cpl_frame * copy;
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386         <span class="keywordflow">if</span> (tag == NULL) {
-<a name="l00387"></a>00387             <span class="comment">/* The frame is ill-formed */</span>
-<a name="l00388"></a>00388             <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);
-<a name="l00389"></a>00389             regfree(&re);
-<a name="l00390"></a>00390             cpl_ensure(0, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00391"></a>00391         }
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393         <span class="keywordflow">if</span> ((regexec(&re, tag, (<span class="keywordtype">size_t</span>)0, NULL, 0) == REG_NOMATCH ? 1 : 0)
-<a name="l00394"></a>00394             ^ xor) <span class="keywordflow">continue</span>;
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396         copy = cpl_frame_duplicate(frame);
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398         error = (int)<a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">new</span>, copy, newsize);
-<a name="l00399"></a>00399         assert(error == CPL_ERROR_NONE);
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401         <span class="keywordflow">if</span> (self->propertylist[i] != NULL) <span class="keyword">new</span>->propertylist[newsize]
-<a name="l00402"></a>00402             = cpl_propertylist_duplicate(self->propertylist[i]);
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404         newsize++;
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     regfree(&re);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410     assert( newsize == new->size );
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     <span class="keywordflow">if</span> (newsize == 0) {
-<a name="l00413"></a>00413 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00414"></a>00414 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00415"></a>00415                               <span class="stringliteral">"The list of %d frame(s) has no frames "</span>
-<a name="l00416"></a>00416                               <span class="stringliteral">"that match: %s"</span>, self->size, regexp);
-<a name="l00417"></a>00417 <span class="preprocessor">#else</span>
-<a name="l00418"></a>00418 <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00419"></a>00419                               <span class="stringliteral">"The list of frames has no frames "</span>
-<a name="l00420"></a>00420                               <span class="stringliteral">"that match the regular expression"</span>);
-<a name="l00421"></a>00421 <span class="preprocessor">#endif</span>
-<a name="l00422"></a>00422 <span class="preprocessor"></span>        <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);
-<a name="l00423"></a>00423         <span class="keyword">new</span> = NULL;
-<a name="l00424"></a>00424     }
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426     <span class="keywordflow">return</span> <span class="keyword">new</span>;
-<a name="l00427"></a>00427 }
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00437"></a>00437 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00438"></a><a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7">00438</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7" title="Get the size of a framelist.">irplib_framelist_get_size</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>)
-<a name="l00439"></a>00439 {
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441     cpl_ensure(<span class="keyword">self</span> != NULL,  CPL_ERROR_NULL_INPUT, -1);
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443     <span class="keywordflow">return</span> <span class="keyword">self</span>->size;
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445 }
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00455"></a>00455 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00456"></a><a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387">00456</a> cpl_frame * <a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387" title="Get the specified frame from the framelist.">irplib_framelist_get</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos)
-<a name="l00457"></a>00457 {
-<a name="l00458"></a>00458     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);
-<a name="l00459"></a>00459     <span class="keywordflow">return</span> (cpl_frame *)<a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">self</span>, pos);
-<a name="l00460"></a>00460     IRPLIB_DIAG_PRAGMA_POP;
-<a name="l00461"></a>00461 }
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00472"></a>00472 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00473"></a><a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f">00473</a> <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,
-<a name="l00474"></a>00474                                              <span class="keywordtype">int</span> pos)
-<a name="l00475"></a>00475 {
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477     cpl_ensure(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT,          NULL);
-<a name="l00478"></a>00478     cpl_ensure(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT,       NULL);
-<a name="l00479"></a>00479     cpl_ensure(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481     <span class="keywordflow">return</span> <span class="keyword">self</span>->frame[pos];
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483 }
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00495"></a>00495 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00496"></a><a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600">00496</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600" title="Duplicate a propertylist to the specified position in the framelist.">irplib_framelist_set_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,
-<a name="l00497"></a>00497                                                  <span class="keywordtype">int</span> pos,
-<a name="l00498"></a>00498                                                  <span class="keyword">const</span> cpl_propertylist * list)
-<a name="l00499"></a>00499 {
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     cpl_ensure_code(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT);
-<a name="l00502"></a>00502     cpl_ensure_code(list != NULL,      CPL_ERROR_NULL_INPUT);
-<a name="l00503"></a>00503     cpl_ensure_code(pos  >= 0,         CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00504"></a>00504     cpl_ensure_code(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506     cpl_propertylist_delete(self->propertylist[pos]);
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508     <span class="keyword">self</span>->propertylist[pos] = cpl_propertylist_duplicate(list);
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510     cpl_ensure_code(self->propertylist[pos] != NULL, cpl_error_get_code());
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514 }
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00528"></a>00528 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00529"></a><a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032">00529</a> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,
-<a name="l00530"></a>00530                                                      <span class="keywordtype">int</span> pos)
-<a name="l00531"></a>00531 {
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);
-<a name="l00534"></a>00534     <span class="keywordflow">return</span> (cpl_propertylist *)<a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(<span class="keyword">self</span>,
-<a name="l00535"></a>00535                                                                        pos);
-<a name="l00536"></a>00536     IRPLIB_DIAG_PRAGMA_POP;
-<a name="l00537"></a>00537 }
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00551"></a>00551 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00552"></a><a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c">00552</a> <span class="keyword">const</span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(
-<a name="l00553"></a>00553                                                   <span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,
-<a name="l00554"></a>00554                                                   <span class="keywordtype">int</span> pos)
-<a name="l00555"></a>00555 {
-<a name="l00556"></a>00556     cpl_ensure(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT,          NULL);
-<a name="l00557"></a>00557     cpl_ensure(pos  >= 0,         CPL_ERROR_ILLEGAL_INPUT,       NULL);
-<a name="l00558"></a>00558     cpl_ensure(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560     cpl_ensure(self->propertylist[pos] != NULL,
-<a name="l00561"></a>00561                   CPL_ERROR_DATA_NOT_FOUND, NULL);
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563     <span class="keywordflow">return</span> <span class="keyword">self</span>->propertylist[pos];
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565 }
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00582"></a>00582 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00583"></a><a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005">00583</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,
-<a name="l00584"></a>00584                                                   <span class="keywordtype">int</span> pos, <span class="keywordtype">int</span> ind,
-<a name="l00585"></a>00585                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,
-<a name="l00586"></a>00586                                                   cpl_boolean invert)
-<a name="l00587"></a>00587 {
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589     <span class="keyword">const</span> <span class="keywordtype">char</span> * filename;
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592     cpl_ensure_code(<span class="keyword">self</span>   != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00593"></a>00593     cpl_ensure_code(regexp != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00594"></a>00594     cpl_ensure_code(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00595"></a>00595     cpl_ensure_code(pos <  self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597     filename = cpl_frame_get_filename(self->frame[pos]);
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599     cpl_ensure_code(filename != NULL, cpl_error_get_code());
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601     cpl_propertylist_delete(self->propertylist[pos]);
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     <span class="keyword">self</span>->propertylist[pos] = cpl_propertylist_load_regexp(filename, ind,
-<a name="l00604"></a>00604                                                            regexp,
-<a name="l00605"></a>00605                                                            invert ? 1 : 0);
-<a name="l00606"></a>00606 
-<a name="l00607"></a>00607     <span class="keywordflow">if</span> (self->propertylist[pos] == NULL) {
-<a name="l00608"></a>00608 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00609"></a>00609 <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(), <span class="stringliteral">"Could "</span>
-<a name="l00610"></a>00610                                      <span class="stringliteral">"not load FITS header from '%s' using "</span>
-<a name="l00611"></a>00611                                      <span class="stringliteral">"regexp '%s'"</span>, filename, regexp);
-<a name="l00612"></a>00612 <span class="preprocessor">#else</span>
-<a name="l00613"></a>00613 <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l00614"></a>00614                                      <span class="stringliteral">"Could not load FITS header"</span>);
-<a name="l00615"></a>00615 <span class="preprocessor">#endif</span>
-<a name="l00616"></a>00616 <span class="preprocessor"></span>    }
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00619"></a>00619 
-<a name="l00620"></a>00620 }
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00637"></a>00637 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00638"></a><a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d">00638</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(irplib_framelist * <span class="keyword">self</span>,
-<a name="l00639"></a>00639                                                       <span class="keywordtype">int</span> ind,
-<a name="l00640"></a>00640                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,
-<a name="l00641"></a>00641                                                       cpl_boolean invert)
-<a name="l00642"></a>00642 {
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644     <span class="keywordtype">int</span> nprops = 0;
-<a name="l00645"></a>00645     <span class="keywordtype">int</span> nfiles = 0;
-<a name="l00646"></a>00646     <span class="keywordtype">int</span> i;
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648     cpl_ensure_code(<span class="keyword">self</span>   != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00649"></a>00649     cpl_ensure_code(regexp != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00652"></a>00652         <span class="keywordflow">if</span> (self->propertylist[i] == NULL)
-<a name="l00653"></a>00653             cpl_ensure_code(!<a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(<span class="keyword">self</span>, i,
-<a name="l00654"></a>00654                                                                 ind,
-<a name="l00655"></a>00655                                                                 regexp,
-<a name="l00656"></a>00656                                                                 invert),
-<a name="l00657"></a>00657                                cpl_error_get_code());
-<a name="l00658"></a>00658         <span class="comment">/* Counting just for diagnostics - this actually causes</span>
-<a name="l00659"></a>00659 <span class="comment">           the whole list to be reiterated :-( */</span>
-<a name="l00660"></a>00660         nprops += cpl_propertylist_get_size(self->propertylist[i]);
-<a name="l00661"></a>00661         nfiles++;
-<a name="l00662"></a>00662     }
-<a name="l00663"></a>00663 
-<a name="l00664"></a>00664     cpl_msg_info(cpl_func, <span class="stringliteral">"List of %d frames has %d properties"</span>, nfiles,
-<a name="l00665"></a>00665                  nprops);
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669 }
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00681"></a>00681 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00682"></a><a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14">00682</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14" title="Set the tag of all frames in the list.">irplib_framelist_set_tag_all</a>(irplib_framelist * <span class="keyword">self</span>,
-<a name="l00683"></a>00683                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)
-<a name="l00684"></a>00684 {
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686     <span class="keywordtype">int</span> i;
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00689"></a>00689     cpl_ensure_code(tag  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++)
-<a name="l00692"></a>00692         cpl_ensure_code(!cpl_frame_set_tag(self->frame[i], tag),
-<a name="l00693"></a>00693                            cpl_error_get_code());
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00696"></a>00696 }
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00713"></a>00713 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00714"></a><a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879">00714</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(irplib_framelist * <span class="keyword">self</span>, cpl_frame * frame,
-<a name="l00715"></a>00715                                     <span class="keywordtype">int</span> pos)
-<a name="l00716"></a>00716 {
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718     cpl_ensure_code(<span class="keyword">self</span>  != NULL,     CPL_ERROR_NULL_INPUT);
-<a name="l00719"></a>00719     cpl_ensure_code(frame != NULL,     CPL_ERROR_NULL_INPUT);
-<a name="l00720"></a>00720     cpl_ensure_code(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722     <span class="keywordflow">if</span> (pos == self->size) {
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724         <span class="keyword">self</span>->size++;
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726         irplib_framelist_set_size(<span class="keyword">self</span>);
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728     } <span class="keywordflow">else</span> {
-<a name="l00729"></a>00729 
-<a name="l00730"></a>00730         cpl_ensure_code(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l00731"></a>00731 
-<a name="l00732"></a>00732         cpl_frame_delete(self->frame[pos]);
-<a name="l00733"></a>00733         cpl_propertylist_delete(self->propertylist[pos]);
-<a name="l00734"></a>00734     }
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736     <span class="keyword">self</span>->frame[pos] = frame;
-<a name="l00737"></a>00737     <span class="keyword">self</span>->propertylist[pos] = NULL;
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00740"></a>00740 
-<a name="l00741"></a>00741 }
-<a name="l00742"></a>00742 
-<a name="l00743"></a>00743 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00752"></a>00752 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00753"></a><a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce">00753</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce" title="Erase a frame from a framelist and delete it and its propertylist.">irplib_framelist_erase</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos)
-<a name="l00754"></a>00754 {
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756     <span class="keywordtype">int</span> i;
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     cpl_ensure_code(<span class="keyword">self</span>  != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00759"></a>00759     cpl_ensure_code(pos >= 0,         CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00760"></a>00760     cpl_ensure_code(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763     <span class="comment">/* Delete the specified frame and its propertylist */</span>
-<a name="l00764"></a>00764     cpl_frame_delete(self->frame[pos]);
-<a name="l00765"></a>00765     cpl_propertylist_delete(self->propertylist[pos]);
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767     <span class="comment">/* Move following frames down one position */</span>
-<a name="l00768"></a>00768     <span class="keywordflow">for</span> (i = pos+1; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770         <span class="keyword">self</span>->frame[i-1] = <span class="keyword">self</span>->frame[i];
-<a name="l00771"></a>00771 
-<a name="l00772"></a>00772         <span class="keyword">self</span>->propertylist[i-1] = <span class="keyword">self</span>->propertylist[i];
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774     }
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776     <span class="keyword">self</span>->size--;
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778     irplib_framelist_set_size(<span class="keyword">self</span>);
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782 }
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784 
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00802"></a>00802 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00803"></a><a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce">00803</a> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce" title="Erase a frame from a framelist and return it to the caller.">irplib_framelist_unset</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos,
-<a name="l00804"></a>00804                                    cpl_propertylist ** plist)
-<a name="l00805"></a>00805 
-<a name="l00806"></a>00806 {
-<a name="l00807"></a>00807     cpl_frame * frame;
-<a name="l00808"></a>00808     <span class="keywordtype">int</span> i;
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810 
-<a name="l00811"></a>00811     cpl_ensure(<span class="keyword">self</span>  != NULL,    CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00812"></a>00812     cpl_ensure(pos >= 0,         CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00813"></a>00813     cpl_ensure(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815     <span class="comment">/* Get the specified frame and its propertylist */</span>
-<a name="l00816"></a>00816     frame = <span class="keyword">self</span>->frame[pos];
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818     <span class="keywordflow">if</span> (plist != NULL)
-<a name="l00819"></a>00819         *plist = <span class="keyword">self</span>->propertylist[pos];
-<a name="l00820"></a>00820     <span class="keywordflow">else</span>
-<a name="l00821"></a>00821         cpl_propertylist_delete(self->propertylist[pos]);
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824     <span class="comment">/* Move following frames down one position */</span>
-<a name="l00825"></a>00825     <span class="keywordflow">for</span> (i = pos+1; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827         <span class="keyword">self</span>->frame[i-1] = <span class="keyword">self</span>->frame[i];
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829         <span class="keyword">self</span>->propertylist[i-1] = <span class="keyword">self</span>->propertylist[i];
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831     }
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833     <span class="keyword">self</span>->size--;
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835     irplib_framelist_set_size(<span class="keyword">self</span>);
-<a name="l00836"></a>00836 
-<a name="l00837"></a>00837     <span class="keywordflow">return</span> frame;
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 }
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00848"></a>00848 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00849"></a><a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb">00849</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(irplib_framelist * <span class="keyword">self</span>)
-<a name="l00850"></a>00850 {
-<a name="l00851"></a>00851 
-<a name="l00852"></a>00852     <span class="keywordflow">if</span> (<span class="keyword">self</span> != NULL) {
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854         <span class="comment">/* Deallocate all frames and their propertylists */</span>
-<a name="l00855"></a>00855         <span class="keywordflow">while</span> (self->size > 0) {
-<a name="l00856"></a>00856             <span class="keyword">self</span>->size--;
-<a name="l00857"></a>00857             cpl_frame_delete(self->frame[self->size]);
-<a name="l00858"></a>00858             cpl_propertylist_delete(self->propertylist[self->size]);
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860         }
-<a name="l00861"></a>00861         
-<a name="l00862"></a>00862         <span class="comment">/* Deallocate the arrays */</span>
-<a name="l00863"></a>00863         irplib_framelist_set_size(<span class="keyword">self</span>);
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865     }
-<a name="l00866"></a>00866 }
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00908"></a>00908 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00909"></a><a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac">00909</a> cpl_error_code <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,
-<a name="l00910"></a>00910                                          <span class="keyword">const</span> <span class="keywordtype">char</span> * key, cpl_type type,
-<a name="l00911"></a>00911                                          cpl_boolean is_equal, <span class="keywordtype">double</span> fp_tol)
-<a name="l00912"></a>00912 {
-<a name="l00913"></a>00913 
-<a name="l00914"></a>00914     <span class="keywordtype">char</span> * value_0;
-<a name="l00915"></a>00915     <span class="keywordtype">char</span> * value_i;
-<a name="l00916"></a>00916     cpl_type type_0 = CPL_TYPE_INVALID;
-<a name="l00917"></a>00917     <span class="keywordtype">int</span> i, ifirst = -1;  <span class="comment">/* First non-NULL propertylist */</span>
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00921"></a>00921     cpl_ensure_code(key   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00922"></a>00922     cpl_ensure_code(fp_tol >= 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++) {
-<a name="l00925"></a>00925         cpl_type type_i;
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928         <span class="keywordflow">if</span> (self->propertylist[i] == NULL) <span class="keywordflow">continue</span>;
-<a name="l00929"></a>00929         <span class="keywordflow">if</span> (ifirst < 0) ifirst = i;
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931         type_i = cpl_propertylist_get_type(self->propertylist[i], key);
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933         <span class="keywordflow">if</span> (type_i == CPL_TYPE_INVALID) {
-<a name="l00934"></a>00934             <span class="keywordflow">if</span> (type == CPL_TYPE_INVALID)
-<a name="l00935"></a>00935 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00936"></a>00936 <span class="preprocessor"></span>                cpl_error_set_message(cpl_func, cpl_error_get_code(), <span class="stringliteral">"FITS "</span>
-<a name="l00937"></a>00937                                       <span class="stringliteral">"key '%s' is missing from file %s"</span>, key,
-<a name="l00938"></a>00938                                       cpl_frame_get_filename(self->frame[i]));
-<a name="l00939"></a>00939             <span class="keywordflow">else</span>
-<a name="l00940"></a>00940                 cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l00941"></a>00941                                       <span class="stringliteral">"FITS key '%s' [%s] is missing from file "</span>
-<a name="l00942"></a>00942                                       <span class="stringliteral">"%s"</span>, key, cpl_type_get_name(type),
-<a name="l00943"></a>00943                                       cpl_frame_get_filename(self->frame[i]));
-<a name="l00944"></a>00944 <span class="preprocessor">#else</span>
-<a name="l00945"></a>00945 <span class="preprocessor"></span>                cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l00946"></a>00946                                       <span class="stringliteral">"A FITS key is missing from a file"</span>);
-<a name="l00947"></a>00947             <span class="keywordflow">else</span>
-<a name="l00948"></a>00948                 cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l00949"></a>00949                                       <span class="stringliteral">"A FITS key is missing from a file"</span>);
-<a name="l00950"></a>00950 <span class="preprocessor">#endif</span>
-<a name="l00951"></a>00951 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00952"></a>00952         }
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954         <span class="keywordflow">if</span> (type != CPL_TYPE_INVALID && type_i != type) {
-<a name="l00955"></a>00955 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00956"></a>00956 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
-<a name="l00957"></a>00957                                          <span class="stringliteral">"FITS key '%s' has type %s instead of "</span>
-<a name="l00958"></a>00958                                          <span class="stringliteral">"%s in file %s"</span>, key,
-<a name="l00959"></a>00959                                          cpl_type_get_name(type_i),
-<a name="l00960"></a>00960                                          cpl_type_get_name(type),
-<a name="l00961"></a>00961                                          cpl_frame_get_filename(self->frame[i]));
-<a name="l00962"></a>00962 <span class="preprocessor">#else</span>
-<a name="l00963"></a>00963 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,
-<a name="l00964"></a>00964                                          <span class="stringliteral">"A FITS key had an unexpected type"</span>);
-<a name="l00965"></a>00965 <span class="preprocessor">#endif</span>
-<a name="l00966"></a>00966 <span class="preprocessor"></span>
-<a name="l00967"></a>00967         }
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969         <span class="keywordflow">if</span> (!is_equal) <span class="keywordflow">continue</span>;
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971         <span class="keywordflow">if</span> (type_0 == CPL_TYPE_INVALID) {
-<a name="l00972"></a>00972             type_0 = type_i;
-<a name="l00973"></a>00973             <span class="keywordflow">continue</span>;
-<a name="l00974"></a>00974         }
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976         <span class="keywordflow">if</span> (type_i != type_0) {
-<a name="l00977"></a>00977             assert( type == CPL_TYPE_INVALID );
-<a name="l00978"></a>00978 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l00979"></a>00979 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_TYPE_MISMATCH,
-<a name="l00980"></a>00980                                          <span class="stringliteral">"FITS key '%s' has different types "</span>
-<a name="l00981"></a>00981                                          <span class="stringliteral">"(%s <=> %s) in files %s and %s"</span>, key,
-<a name="l00982"></a>00982                                          cpl_type_get_name(type_0),
-<a name="l00983"></a>00983                                          cpl_type_get_name(type_i),
-<a name="l00984"></a>00984                                          cpl_frame_get_filename(self->frame[0]),
-<a name="l00985"></a>00985                                          cpl_frame_get_filename(self->frame[i]));
-<a name="l00986"></a>00986 <span class="preprocessor">#else</span>
-<a name="l00987"></a>00987 <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_TYPE_MISMATCH,
-<a name="l00988"></a>00988                                          <span class="stringliteral">"A FITS key has different types in "</span>
-<a name="l00989"></a>00989                                          <span class="stringliteral">"two files"</span>);
-<a name="l00990"></a>00990 <span class="preprocessor">#endif</span>
-<a name="l00991"></a>00991 <span class="preprocessor"></span>        }
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993         <span class="keywordflow">if</span> (irplib_property_equal(self->propertylist[ifirst],
-<a name="l00994"></a>00994                                   self->propertylist[i],
-<a name="l00995"></a>00995                                   key, type_0, fp_tol, &value_0, &value_i))
-<a name="l00996"></a>00996             <span class="keywordflow">continue</span>;
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998         <span class="keywordflow">if</span> ((type_0 == CPL_TYPE_FLOAT || type_0 == CPL_TYPE_DOUBLE)
-<a name="l00999"></a>00999             && fp_tol > 0.0) {
-<a name="l01000"></a>01000 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01001"></a>01001 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"FITS"</span>
-<a name="l01002"></a>01002                                   <span class="stringliteral">" key '%s' [%s] has values that differ by "</span>
-<a name="l01003"></a>01003                                   <span class="stringliteral">"more than %g (%s <=> %s) in files %s and %s"</span>,
-<a name="l01004"></a>01004                                   key, cpl_type_get_name(type_0), fp_tol,
-<a name="l01005"></a>01005                                   value_0, value_i,
-<a name="l01006"></a>01006                                   cpl_frame_get_filename(self->frame[0]),
-<a name="l01007"></a>01007                                   cpl_frame_get_filename(self->frame[i]));
-<a name="l01008"></a>01008 <span class="preprocessor">#else</span>
-<a name="l01009"></a>01009 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"A "</span>
-<a name="l01010"></a>01010                                   <span class="stringliteral">"FITS key has values that differ by more "</span>
-<a name="l01011"></a>01011                                   <span class="stringliteral">"than the allowed tolerance in two file"</span>);
-<a name="l01012"></a>01012 <span class="preprocessor">#endif</span>
-<a name="l01013"></a>01013 <span class="preprocessor"></span>        } <span class="keywordflow">else</span> {
-<a name="l01014"></a>01014 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01015"></a>01015 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT,
-<a name="l01016"></a>01016                                   <span class="stringliteral">"FITS key '%s' [%s] has different values "</span>
-<a name="l01017"></a>01017                                   <span class="stringliteral">"(%s <=> %s) in files %s and %s"</span>, key,
-<a name="l01018"></a>01018                                   cpl_type_get_name(type_0),
-<a name="l01019"></a>01019                                   value_0, value_i,
-<a name="l01020"></a>01020                                   cpl_frame_get_filename(self->frame[0]),
-<a name="l01021"></a>01021                                   cpl_frame_get_filename(self->frame[i]));
-<a name="l01022"></a>01022 <span class="preprocessor">#else</span>
-<a name="l01023"></a>01023 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"A "</span>
-<a name="l01024"></a>01024                                   <span class="stringliteral">"FITS key has different values in two files"</span>);
-<a name="l01025"></a>01025 <span class="preprocessor">#endif</span>
-<a name="l01026"></a>01026 <span class="preprocessor"></span>        }
-<a name="l01027"></a>01027         cpl_free(value_0);
-<a name="l01028"></a>01028         cpl_free(value_i);
-<a name="l01029"></a>01029 
-<a name="l01030"></a>01030         <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01031"></a>01031     }        
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035 }
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01051"></a>01051 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01052"></a><a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94">01052</a> cpl_imagelist * <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,
-<a name="l01053"></a>01053                                                 cpl_type pixeltype,
-<a name="l01054"></a>01054                                                 <span class="keywordtype">int</span> planenum,
-<a name="l01055"></a>01055                                                 <span class="keywordtype">int</span> extnum)
-<a name="l01056"></a>01056 {
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058     cpl_imagelist * list = NULL;
-<a name="l01059"></a>01059     cpl_image     * image = NULL;
-<a name="l01060"></a>01060     <span class="keywordtype">int</span> i;
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063     cpl_ensure(<span class="keyword">self</span> != NULL,  CPL_ERROR_NULL_INPUT,          NULL);
-<a name="l01064"></a>01064     cpl_ensure(extnum >= 0,   CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
-<a name="l01065"></a>01065     cpl_ensure(planenum >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067     list = cpl_imagelist_new();
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++, image = NULL) {
-<a name="l01070"></a>01070         <span class="keyword">const</span> <span class="keywordtype">char</span> * filename = cpl_frame_get_filename(self->frame[i]);
-<a name="l01071"></a>01071         cpl_error_code error;
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073         <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">break</span>;
-<a name="l01074"></a>01074 
-<a name="l01075"></a>01075         image = cpl_image_load(filename, pixeltype, planenum, extnum);
-<a name="l01076"></a>01076         <span class="keywordflow">if</span> (image == NULL) {
-<a name="l01077"></a>01077 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01078"></a>01078 <span class="preprocessor"></span>            (void)cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01079"></a>01079                                         <span class="stringliteral">"Could not load FITS-image from plane "</span>
-<a name="l01080"></a>01080                                         <span class="stringliteral">"%d in extension %d in file %s"</span>,
-<a name="l01081"></a>01081                                         planenum, extnum, filename);
-<a name="l01082"></a>01082 <span class="preprocessor">#else</span>
-<a name="l01083"></a>01083 <span class="preprocessor"></span>            (void)cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01084"></a>01084                                         <span class="stringliteral">"Could not load FITS-image"</span>);
-<a name="l01085"></a>01085 <span class="preprocessor">#endif</span>
-<a name="l01086"></a>01086 <span class="preprocessor"></span>            <span class="keywordflow">break</span>;
-<a name="l01087"></a>01087         }
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089         error = cpl_imagelist_set(list, image, i);
-<a name="l01090"></a>01090         assert(error == CPL_ERROR_NONE);
-<a name="l01091"></a>01091     }
-<a name="l01092"></a>01092 
-<a name="l01093"></a>01093     cpl_image_delete(image);
-<a name="l01094"></a>01094     
-<a name="l01095"></a>01095     <span class="keywordflow">if</span> (cpl_imagelist_get_size(list) != self->size) {
-<a name="l01096"></a>01096         cpl_imagelist_delete(list);
-<a name="l01097"></a>01097         list = NULL;
-<a name="l01098"></a>01098         assert(cpl_error_get_code() != CPL_ERROR_NONE);
-<a name="l01099"></a>01099     }
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101     <span class="keywordflow">return</span> list;
-<a name="l01102"></a>01102 
-<a name="l01103"></a>01103 }
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105 
-<a name="l01109"></a>01109 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01121"></a>01121 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01122"></a>01122 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_framelist_set_size(irplib_framelist * <span class="keyword">self</span>)
-<a name="l01123"></a>01123 {
-<a name="l01124"></a>01124 
-<a name="l01125"></a>01125 
-<a name="l01126"></a>01126     assert( <span class="keyword">self</span> != NULL);
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128     <span class="keywordflow">if</span> (self->size == 0) {
-<a name="l01129"></a>01129         <span class="comment">/* The list has been emptied */</span>
-<a name="l01130"></a>01130         cpl_free(self->frame);
-<a name="l01131"></a>01131         cpl_free(self->propertylist);
-<a name="l01132"></a>01132         <span class="keyword">self</span>->frame = NULL;
-<a name="l01133"></a>01133         <span class="keyword">self</span>->propertylist = NULL;
-<a name="l01134"></a>01134     } <span class="keywordflow">else</span> {
-<a name="l01135"></a>01135         <span class="comment">/* Update the size of the arrays */</span>
-<a name="l01136"></a>01136 
-<a name="l01137"></a>01137         <span class="keyword">self</span>->frame = cpl_realloc(self->frame, self->size * <span class="keyword">sizeof</span>(cpl_frame*));
-<a name="l01138"></a>01138         <span class="keyword">self</span>->propertylist =
-<a name="l01139"></a>01139             cpl_realloc(self->propertylist,
-<a name="l01140"></a>01140                         self->size * <span class="keyword">sizeof</span>(cpl_propertylist*));
-<a name="l01141"></a>01141     }
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143 }
-<a name="l01144"></a>01144 
-<a name="l01145"></a>01145 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01169"></a>01169 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01170"></a>01170 <span class="keyword">static</span> cpl_boolean irplib_property_equal(<span class="keyword">const</span> cpl_propertylist * <span class="keyword">self</span>,
-<a name="l01171"></a>01171                                          <span class="keyword">const</span> cpl_propertylist * other,
-<a name="l01172"></a>01172                                          <span class="keyword">const</span> <span class="keywordtype">char</span> * key, cpl_type type,
-<a name="l01173"></a>01173                                          <span class="keywordtype">double</span> fp_tol,
-<a name="l01174"></a>01174                                          <span class="keywordtype">char</span> ** sstring, <span class="keywordtype">char</span> ** ostring)
-<a name="l01175"></a>01175 {
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177     cpl_boolean equal;
-<a name="l01178"></a>01178 
-<a name="l01179"></a>01179 
-<a name="l01180"></a>01180     assert(<span class="keyword">self</span>    != NULL);
-<a name="l01181"></a>01181     assert(other   != NULL);
-<a name="l01182"></a>01182     assert(key     != NULL);
-<a name="l01183"></a>01183     assert(sstring != NULL);
-<a name="l01184"></a>01184     assert(ostring != NULL);
-<a name="l01185"></a>01185 
-<a name="l01186"></a>01186     <span class="comment">/* FIXME: disable for better performance also with debugging */</span>
-<a name="l01187"></a>01187     assert(cpl_propertylist_get_type(other, key) == type);
-<a name="l01188"></a>01188     assert(fp_tol >= 0.0);
-<a name="l01189"></a>01189 
-<a name="l01190"></a>01190     <span class="keywordflow">if</span> (<span class="keyword">self</span> == other) <span class="keywordflow">return</span> CPL_TRUE;
-<a name="l01191"></a>01191 
-<a name="l01192"></a>01192     <span class="keywordflow">switch</span> (type) {
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194     <span class="keywordflow">case</span> CPL_TYPE_CHAR: {
-<a name="l01195"></a>01195         <span class="keyword">const</span> <span class="keywordtype">char</span> svalue = cpl_propertylist_get_char(<span class="keyword">self</span>, key);
-<a name="l01196"></a>01196         <span class="keyword">const</span> <span class="keywordtype">char</span> ovalue = cpl_propertylist_get_char(other, key);
-<a name="l01197"></a>01197 
-<a name="l01198"></a>01198         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;
-<a name="l01199"></a>01199         <span class="keywordflow">if</span> (!equal) {
-<a name="l01200"></a>01200             *sstring = cpl_sprintf(<span class="stringliteral">"%c"</span>, svalue);
-<a name="l01201"></a>01201             *ostring = cpl_sprintf(<span class="stringliteral">"%c"</span>, ovalue);
-<a name="l01202"></a>01202         }
-<a name="l01203"></a>01203         <span class="keywordflow">break</span>;
-<a name="l01204"></a>01204     }
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206     <span class="keywordflow">case</span> CPL_TYPE_BOOL: {
-<a name="l01207"></a>01207         <span class="keyword">const</span> <span class="keywordtype">int</span> svalue = cpl_propertylist_get_bool(<span class="keyword">self</span>, key);
-<a name="l01208"></a>01208         <span class="keyword">const</span> <span class="keywordtype">int</span> ovalue = cpl_propertylist_get_bool(other, key);
-<a name="l01209"></a>01209 
-<a name="l01210"></a>01210         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;
-<a name="l01211"></a>01211         <span class="keywordflow">if</span> (!equal) {
-<a name="l01212"></a>01212             *sstring = cpl_strdup(svalue == 0 ? <span class="stringliteral">"F"</span> : <span class="stringliteral">"T"</span>);
-<a name="l01213"></a>01213             *ostring = cpl_strdup(ovalue == 0 ? <span class="stringliteral">"F"</span> : <span class="stringliteral">"T"</span>);
-<a name="l01214"></a>01214         }
-<a name="l01215"></a>01215         <span class="keywordflow">break</span>;
-<a name="l01216"></a>01216     }
-<a name="l01217"></a>01217 
-<a name="l01218"></a>01218     <span class="keywordflow">case</span> CPL_TYPE_INT: {
-<a name="l01219"></a>01219         <span class="keyword">const</span> <span class="keywordtype">int</span> svalue = cpl_propertylist_get_int(<span class="keyword">self</span>, key);
-<a name="l01220"></a>01220         <span class="keyword">const</span> <span class="keywordtype">int</span> ovalue = cpl_propertylist_get_int(other, key);
-<a name="l01221"></a>01221 
-<a name="l01222"></a>01222         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;
-<a name="l01223"></a>01223         <span class="keywordflow">if</span> (!equal) {
-<a name="l01224"></a>01224             *sstring = cpl_sprintf(<span class="stringliteral">"%d"</span>, svalue);
-<a name="l01225"></a>01225             *ostring = cpl_sprintf(<span class="stringliteral">"%d"</span>, ovalue);
-<a name="l01226"></a>01226         }
-<a name="l01227"></a>01227         <span class="keywordflow">break</span>;
-<a name="l01228"></a>01228     }
-<a name="l01229"></a>01229 
-<a name="l01230"></a>01230     <span class="keywordflow">case</span> CPL_TYPE_LONG: {
-<a name="l01231"></a>01231         <span class="keyword">const</span> <span class="keywordtype">long</span> svalue = cpl_propertylist_get_long(<span class="keyword">self</span>, key);
-<a name="l01232"></a>01232         <span class="keyword">const</span> <span class="keywordtype">long</span> ovalue = cpl_propertylist_get_long(other, key);
-<a name="l01233"></a>01233 
-<a name="l01234"></a>01234         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;
-<a name="l01235"></a>01235         <span class="keywordflow">if</span> (!equal) {
-<a name="l01236"></a>01236             *sstring = cpl_sprintf(<span class="stringliteral">"%ld"</span>, svalue);
-<a name="l01237"></a>01237             *ostring = cpl_sprintf(<span class="stringliteral">"%ld"</span>, ovalue);
-<a name="l01238"></a>01238         }
-<a name="l01239"></a>01239         <span class="keywordflow">break</span>;
-<a name="l01240"></a>01240     }
-<a name="l01241"></a>01241 
-<a name="l01242"></a>01242     <span class="keywordflow">case</span> CPL_TYPE_FLOAT: {
-<a name="l01243"></a>01243         <span class="keyword">const</span> <span class="keywordtype">double</span> svalue = (double)cpl_propertylist_get_float(<span class="keyword">self</span>, key);
-<a name="l01244"></a>01244         <span class="keyword">const</span> <span class="keywordtype">double</span> ovalue = (double)cpl_propertylist_get_float(other, key);
-<a name="l01245"></a>01245 
-<a name="l01246"></a>01246         equal = (fabs(svalue - ovalue) <= fp_tol) ? CPL_TRUE : CPL_FALSE;
-<a name="l01247"></a>01247         <span class="keywordflow">if</span> (!equal) {
-<a name="l01248"></a>01248             *sstring = cpl_sprintf(<span class="stringliteral">"%f"</span>, svalue);
-<a name="l01249"></a>01249             *ostring = cpl_sprintf(<span class="stringliteral">"%f"</span>, ovalue);
-<a name="l01250"></a>01250         }
-<a name="l01251"></a>01251         <span class="keywordflow">break</span>;
-<a name="l01252"></a>01252     }
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: {
-<a name="l01255"></a>01255         <span class="keyword">const</span> <span class="keywordtype">double</span> svalue = cpl_propertylist_get_double(<span class="keyword">self</span>, key);
-<a name="l01256"></a>01256         <span class="keyword">const</span> <span class="keywordtype">double</span> ovalue = cpl_propertylist_get_double(other, key);
-<a name="l01257"></a>01257 
-<a name="l01258"></a>01258         equal = (fabs(svalue - ovalue) <= fp_tol) ? CPL_TRUE : CPL_FALSE;
-<a name="l01259"></a>01259         <span class="keywordflow">if</span> (!equal) {
-<a name="l01260"></a>01260             *sstring = cpl_sprintf(<span class="stringliteral">"%g"</span>, svalue);
-<a name="l01261"></a>01261             *ostring = cpl_sprintf(<span class="stringliteral">"%g"</span>, ovalue);
-<a name="l01262"></a>01262         }
-<a name="l01263"></a>01263         <span class="keywordflow">break</span>;
-<a name="l01264"></a>01264     }
-<a name="l01265"></a>01265     <span class="keywordflow">case</span> CPL_TYPE_STRING: {
-<a name="l01266"></a>01266         <span class="keyword">const</span> <span class="keywordtype">char</span> * svalue = cpl_propertylist_get_string(<span class="keyword">self</span>, key);
-<a name="l01267"></a>01267         <span class="keyword">const</span> <span class="keywordtype">char</span> * ovalue = cpl_propertylist_get_string(other, key);
-<a name="l01268"></a>01268 
-<a name="l01269"></a>01269         equal = strcmp(svalue, ovalue) == 0 ? CPL_TRUE : CPL_FALSE;
-<a name="l01270"></a>01270         <span class="keywordflow">if</span> (!equal) {
-<a name="l01271"></a>01271             *sstring = cpl_strdup(svalue);
-<a name="l01272"></a>01272             *ostring = cpl_strdup(ovalue);
-<a name="l01273"></a>01273         }
-<a name="l01274"></a>01274         <span class="keywordflow">break</span>;
-<a name="l01275"></a>01275     }
-<a name="l01276"></a>01276     <span class="keywordflow">default</span>:
-<a name="l01277"></a>01277         <span class="comment">/* Unknown property type */</span>
-<a name="l01278"></a>01278         assert( 0 );
-<a name="l01279"></a>01279 
-<a name="l01280"></a>01280         equal = CPL_FALSE; <span class="comment">/* In case of -DNDEBUG */</span>
-<a name="l01281"></a>01281 
-<a name="l01282"></a>01282     }
-<a name="l01283"></a>01283 
-<a name="l01284"></a>01284     <span class="keywordflow">if</span> (!equal) {
-<a name="l01285"></a>01285         assert( *sstring != NULL );
-<a name="l01286"></a>01286         assert( *ostring != NULL );
-<a name="l01287"></a>01287     }
-<a name="l01288"></a>01288 
-<a name="l01289"></a>01289     <span class="keywordflow">return</span> equal;
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_framelist.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_framelist.c,v 1.30 2013/02/27 16:05:13 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/02/27 16:05:13 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.30 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                 Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "irplib_framelist.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <regex.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                 New types</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* @cond */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">struct </span>_irplib_framelist_ {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordtype">int</span> size;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     cpl_frame        ** frame;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     cpl_propertylist ** propertylist;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> };</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* @endcond */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                                 Private funcions</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_framelist_set_size(irplib_framelist *)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#if defined __GNUC__ &&  __GNUC__ >= 4</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span>    __attribute__((nonnull))</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> cpl_boolean irplib_property_equal(<span class="keyword">const</span> cpl_propertylist *,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                          <span class="keyword">const</span> cpl_propertylist *,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_type, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                          <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#if defined __GNUC__ &&  __GNUC__ >= 4</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span>    __attribute__((nonnull))</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">                            Function codes</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0">  178</a></span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">return</span> (irplib_framelist *) cpl_calloc(1, <span class="keyword">sizeof</span>(irplib_framelist));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26">  191</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(irplib_framelist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_free(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1">  209</a></span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(<span class="keyword">const</span> cpl_frameset * frameset)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     irplib_framelist * <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keyword">const</span> cpl_frame * frame;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     cpl_ensure(frameset != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="comment">/* The function cannot fail now */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keyword">self</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">for</span> (i = 0, frame = cpl_frameset_get_first_const(frameset);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>          frame != NULL;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>          i++, frame = cpl_frameset_get_next_const(frameset)) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         cpl_frame * copy = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         <span class="keyword">const</span> cpl_error_code error = <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">self</span>, copy, i);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         assert(error == CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     assert(self->size == cpl_frameset_get_size(frameset));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">return</span> <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174">  251</a></span> cpl_frameset * <a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174" title="Create a CPL frameset from an irplib_framelist.">irplib_frameset_cast</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     cpl_frameset * <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="comment">/* The function cannot fail now */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keyword">new</span> = cpl_frameset_new();</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         cpl_frame * frame = cpl_frame_duplicate(self->frame[i]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="keyword">const</span> cpl_error_code error = cpl_frameset_insert(<span class="keyword">new</span>, frame);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         assert(error == CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     assert(self->size == cpl_frameset_get_size(<span class="keyword">new</span>));</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordflow">return</span> <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396">  290</a></span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     irplib_framelist * <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keywordtype">int</span> i, newsize;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     cpl_ensure(tag  != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keyword">new</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     newsize = 0;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         <span class="keyword">const</span> cpl_frame * frame = <span class="keyword">self</span>->frame[i];</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * ftag = cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         cpl_frame * copy;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         cpl_error_code error;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordflow">if</span> (ftag == NULL) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             <span class="comment">/* The frame is ill-formed */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>             <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             cpl_ensure(0, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>         <span class="keywordflow">if</span> (strcmp(tag, ftag)) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         copy = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         error = <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">new</span>, copy, newsize);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         assert(error == CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         <span class="keywordflow">if</span> (self->propertylist[i] != NULL) <span class="keyword">new</span>->propertylist[newsize]</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>             = cpl_propertylist_duplicate(self->propertylist[i]);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         newsize++;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     assert( newsize == new->size );</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">if</span> (newsize == 0) {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                               <span class="stringliteral">"The list of %d frame(s) has no frames "</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                               <span class="stringliteral">"with tag: %s"</span>, self->size, tag);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                               <span class="stringliteral">"The list of frame(s) has no frames "</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                               <span class="stringliteral">"with the given tag"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="preprocessor"></span>        <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         <span class="keyword">new</span> = NULL;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">return</span> <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> }</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01">  360</a></span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(<span class="keyword">const</span> irplib_framelist* <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                                                    <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                                                    cpl_boolean invert)</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     irplib_framelist * <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordtype">int</span> error;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordtype">int</span> i, newsize;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> xor = invert == CPL_FALSE ? 0 : 1;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     regex_t re;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_ensure(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_ensure(regexp != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     error = regcomp(&re, regexp, REG_EXTENDED | REG_NOSUB);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     cpl_ensure(!error, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keyword">new</span> = <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>();</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     newsize = 0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         <span class="keyword">const</span> cpl_frame * frame = <span class="keyword">self</span>->frame[i];</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * tag = cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         cpl_frame * copy;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         <span class="keywordflow">if</span> (tag == NULL) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             <span class="comment">/* The frame is ill-formed */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>             regfree(&re);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>             cpl_ensure(0, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         }</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         <span class="keywordflow">if</span> ((regexec(&re, tag, (<span class="keywordtype">size_t</span>)0, NULL, 0) == REG_NOMATCH ? 1 : 0)</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>             ^ xor) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         copy = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         error = (int)<a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(<span class="keyword">new</span>, copy, newsize);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         assert(error == CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <span class="keywordflow">if</span> (self->propertylist[i] != NULL) <span class="keyword">new</span>->propertylist[newsize]</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             = cpl_propertylist_duplicate(self->propertylist[i]);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         newsize++;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     regfree(&re);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     assert( newsize == new->size );</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">if</span> (newsize == 0) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                               <span class="stringliteral">"The list of %d frame(s) has no frames "</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                               <span class="stringliteral">"that match: %s"</span>, self->size, regexp);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor"></span>        cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                               <span class="stringliteral">"The list of frames has no frames "</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                               <span class="stringliteral">"that match the regular expression"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="preprocessor"></span>        <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         <span class="keyword">new</span> = NULL;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keywordflow">return</span> <span class="keyword">new</span>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7">  438</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7" title="Get the size of a framelist.">irplib_framelist_get_size</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> {</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_ensure(<span class="keyword">self</span> != NULL,  CPL_ERROR_NULL_INPUT, -1);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     <span class="keywordflow">return</span> <span class="keyword">self</span>->size;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387">  456</a></span> cpl_frame * <a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387" title="Get the specified frame from the framelist.">irplib_framelist_get</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> {</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordflow">return</span> (cpl_frame *)<a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">self</span>, pos);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     IRPLIB_DIAG_PRAGMA_POP;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f">  473</a></span> <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                              <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     cpl_ensure(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT,          NULL);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     cpl_ensure(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT,       NULL);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     cpl_ensure(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordflow">return</span> <span class="keyword">self</span>->frame[pos];</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> }</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600">  496</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600" title="Duplicate a propertylist to the specified position in the framelist.">irplib_framelist_set_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                                                  <span class="keywordtype">int</span> pos,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                                                  <span class="keyword">const</span> cpl_propertylist * list)</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     cpl_ensure_code(list != NULL,      CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     cpl_ensure_code(pos  >= 0,         CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     cpl_ensure_code(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     cpl_propertylist_delete(self->propertylist[pos]);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keyword">self</span>->propertylist[pos] = cpl_propertylist_duplicate(list);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     cpl_ensure_code(self->propertylist[pos] != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032">  529</a></span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                                                      <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> {</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">return</span> (cpl_propertylist *)<a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                                                                        pos);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     IRPLIB_DIAG_PRAGMA_POP;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c">  552</a></span> <span class="keyword">const</span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                                                   <span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                                                   <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> {</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     cpl_ensure(<span class="keyword">self</span> != NULL,      CPL_ERROR_NULL_INPUT,          NULL);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     cpl_ensure(pos  >= 0,         CPL_ERROR_ILLEGAL_INPUT,       NULL);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     cpl_ensure(pos  < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     cpl_ensure(self->propertylist[pos] != NULL,</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>                   CPL_ERROR_DATA_NOT_FOUND, NULL);</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">return</span> <span class="keyword">self</span>->propertylist[pos];</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> }</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005">  583</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                                                   <span class="keywordtype">int</span> pos, <span class="keywordtype">int</span> ind,</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>                                                   cpl_boolean invert)</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * filename;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     cpl_ensure_code(regexp != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     cpl_ensure_code(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     cpl_ensure_code(pos <  self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     filename = cpl_frame_get_filename(self->frame[pos]);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     cpl_ensure_code(filename != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     cpl_propertylist_delete(self->propertylist[pos]);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     <span class="keyword">self</span>->propertylist[pos] = cpl_propertylist_load_regexp(filename, ind,</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>                                                            regexp,</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>                                                            invert ? 1 : 0);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <span class="keywordflow">if</span> (self->propertylist[pos] == NULL) {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(), <span class="stringliteral">"Could "</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                                      <span class="stringliteral">"not load FITS header from '%s' using "</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                                      <span class="stringliteral">"regexp '%s'"</span>, filename, regexp);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                                      <span class="stringliteral">"Could not load FITS header"</span>);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> }</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d">  638</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                                                       <span class="keywordtype">int</span> ind,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> * regexp,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                                                       cpl_boolean invert)</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> {</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="keywordtype">int</span> nprops = 0;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="keywordtype">int</span> nfiles = 0;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     cpl_ensure_code(regexp != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         <span class="keywordflow">if</span> (self->propertylist[i] == NULL)</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>             cpl_ensure_code(!<a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(<span class="keyword">self</span>, i,</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                                                                 ind,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                                                                 regexp,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                                                                 invert),</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                                cpl_error_get_code());</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         <span class="comment">/* Counting just for diagnostics - this actually causes</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> <span class="comment">           the whole list to be reiterated :-( */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         nprops += cpl_propertylist_get_size(self->propertylist[i]);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>         nfiles++;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     }</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"List of %d frames has %d properties"</span>, nfiles,</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                  nprops);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14">  682</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14" title="Set the tag of all frames in the list.">irplib_framelist_set_tag_all</a>(irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> {</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     cpl_ensure_code(tag  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++)</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>         cpl_ensure_code(!cpl_frame_set_tag(self->frame[i], tag),</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>                            cpl_error_get_code());</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> }</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879">  714</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(irplib_framelist * <span class="keyword">self</span>, cpl_frame * frame,</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                                     <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> {</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL,     CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     cpl_ensure_code(frame != NULL,     CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     cpl_ensure_code(pos >= 0,          CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordflow">if</span> (pos == self->size) {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         <span class="keyword">self</span>->size++;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         irplib_framelist_set_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>         cpl_ensure_code(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         cpl_frame_delete(self->frame[pos]);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         cpl_propertylist_delete(self->propertylist[pos]);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     }</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     <span class="keyword">self</span>->frame[pos] = frame;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     <span class="keyword">self</span>->propertylist[pos] = NULL;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce">  753</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce" title="Erase a frame from a framelist and delete it and its propertylist.">irplib_framelist_erase</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos)</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     cpl_ensure_code(pos >= 0,         CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     cpl_ensure_code(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     <span class="comment">/* Delete the specified frame and its propertylist */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     cpl_frame_delete(self->frame[pos]);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     cpl_propertylist_delete(self->propertylist[pos]);</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     <span class="comment">/* Move following frames down one position */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     <span class="keywordflow">for</span> (i = pos+1; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         <span class="keyword">self</span>->frame[i-1] = <span class="keyword">self</span>->frame[i];</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="keyword">self</span>->propertylist[i-1] = <span class="keyword">self</span>->propertylist[i];</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     <span class="keyword">self</span>->size--;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     irplib_framelist_set_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> }</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce">  803</a></span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce" title="Erase a frame from a framelist and return it to the caller.">irplib_framelist_unset</a>(irplib_framelist * <span class="keyword">self</span>, <span class="keywordtype">int</span> pos,</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>                                    cpl_propertylist ** plist)</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     cpl_frame * frame;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     cpl_ensure(<span class="keyword">self</span>  != NULL,    CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     cpl_ensure(pos >= 0,         CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     cpl_ensure(pos < self->size, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="comment">/* Get the specified frame and its propertylist */</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     frame = <span class="keyword">self</span>->frame[pos];</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     <span class="keywordflow">if</span> (plist != NULL)</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>         *plist = <span class="keyword">self</span>->propertylist[pos];</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>         cpl_propertylist_delete(self->propertylist[pos]);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="comment">/* Move following frames down one position */</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="keywordflow">for</span> (i = pos+1; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>         <span class="keyword">self</span>->frame[i-1] = <span class="keyword">self</span>->frame[i];</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>         <span class="keyword">self</span>->propertylist[i-1] = <span class="keyword">self</span>->propertylist[i];</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     }</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     <span class="keyword">self</span>->size--;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     irplib_framelist_set_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     <span class="keywordflow">return</span> frame;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb">  849</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(irplib_framelist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     <span class="keywordflow">if</span> (<span class="keyword">self</span> != NULL) {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <span class="comment">/* Deallocate all frames and their propertylists */</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>         <span class="keywordflow">while</span> (self->size > 0) {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             <span class="keyword">self</span>->size--;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             cpl_frame_delete(self->frame[self->size]);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>             cpl_propertylist_delete(self->propertylist[self->size]);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         }</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>         </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>         <span class="comment">/* Deallocate the arrays */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         irplib_framelist_set_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> </div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> }</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac">  909</a></span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span> * key, cpl_type type,</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>                                          cpl_boolean is_equal, <span class="keywordtype">double</span> fp_tol)</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> {</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="keywordtype">char</span> * value_0;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordtype">char</span> * value_i;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     cpl_type type_0 = CPL_TYPE_INVALID;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="keywordtype">int</span> i, ifirst = -1;  <span class="comment">/* First non-NULL propertylist */</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     cpl_ensure_code(key   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     cpl_ensure_code(fp_tol >= 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++) {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         cpl_type type_i;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         <span class="keywordflow">if</span> (self->propertylist[i] == NULL) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>         <span class="keywordflow">if</span> (ifirst < 0) ifirst = i;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         type_i = cpl_propertylist_get_type(self->propertylist[i], key);</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         <span class="keywordflow">if</span> (type_i == CPL_TYPE_INVALID) {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>             <span class="keywordflow">if</span> (type == CPL_TYPE_INVALID)</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="preprocessor"></span>                cpl_error_set_message(cpl_func, cpl_error_get_code(), <span class="stringliteral">"FITS "</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                                       <span class="stringliteral">"key '%s' is missing from file %s"</span>, key,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                       cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                 cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                                       <span class="stringliteral">"FITS key '%s' [%s] is missing from file "</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                                       <span class="stringliteral">"%s"</span>, key, cpl_type_get_name(type),</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>                                       cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> <span class="preprocessor"></span>                cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>                                       <span class="stringliteral">"A FITS key is missing from a file"</span>);</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>                 cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>                                       <span class="stringliteral">"A FITS key is missing from a file"</span>);</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         }</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         <span class="keywordflow">if</span> (type != CPL_TYPE_INVALID && type_i != type) {</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                                          <span class="stringliteral">"FITS key '%s' has type %s instead of "</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>                                          <span class="stringliteral">"%s in file %s"</span>, key,</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>                                          cpl_type_get_name(type_i),</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>                                          cpl_type_get_name(type),</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>                                          cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_INVALID_TYPE,</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>                                          <span class="stringliteral">"A FITS key had an unexpected type"</span>);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         }</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         <span class="keywordflow">if</span> (!is_equal) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         <span class="keywordflow">if</span> (type_0 == CPL_TYPE_INVALID) {</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>             type_0 = type_i;</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         <span class="keywordflow">if</span> (type_i != type_0) {</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>             assert( type == CPL_TYPE_INVALID );</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_TYPE_MISMATCH,</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                                          <span class="stringliteral">"FITS key '%s' has different types "</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>                                          <span class="stringliteral">"(%s <=> %s) in files %s and %s"</span>, key,</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>                                          cpl_type_get_name(type_0),</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>                                          cpl_type_get_name(type_i),</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>                                          cpl_frame_get_filename(self->frame[0]),</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>                                          cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="preprocessor"></span>            <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_TYPE_MISMATCH,</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>                                          <span class="stringliteral">"A FITS key has different types in "</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>                                          <span class="stringliteral">"two files"</span>);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>         <span class="keywordflow">if</span> (irplib_property_equal(self->propertylist[ifirst],</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>                                   self->propertylist[i],</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                                   key, type_0, fp_tol, &value_0, &value_i))</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         <span class="keywordflow">if</span> ((type_0 == CPL_TYPE_FLOAT || type_0 == CPL_TYPE_DOUBLE)</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>             && fp_tol > 0.0) {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"FITS"</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>                                   <span class="stringliteral">" key '%s' [%s] has values that differ by "</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>                                   <span class="stringliteral">"more than %g (%s <=> %s) in files %s and %s"</span>,</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>                                   key, cpl_type_get_name(type_0), fp_tol,</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>                                   value_0, value_i,</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>                                   cpl_frame_get_filename(self->frame[0]),</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                                   cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"A "</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>                                   <span class="stringliteral">"FITS key has values that differ by more "</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>                                   <span class="stringliteral">"than the allowed tolerance in two file"</span>);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="preprocessor"></span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT,</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                                   <span class="stringliteral">"FITS key '%s' [%s] has different values "</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>                                   <span class="stringliteral">"(%s <=> %s) in files %s and %s"</span>, key,</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>                                   cpl_type_get_name(type_0),</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                                   value_0, value_i,</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>                                   cpl_frame_get_filename(self->frame[0]),</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>                                   cpl_frame_get_filename(self->frame[i]));</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_INCOMPATIBLE_INPUT, <span class="stringliteral">"A "</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>                                   <span class="stringliteral">"FITS key has different values in two files"</span>);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         cpl_free(value_0);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         cpl_free(value_i);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     }        </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"><a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94"> 1052</a></span> cpl_imagelist * <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(<span class="keyword">const</span> irplib_framelist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>                                                 cpl_type pixeltype,</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>                                                 <span class="keywordtype">int</span> planenum,</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                                                 <span class="keywordtype">int</span> extnum)</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> {</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     cpl_imagelist * list = NULL;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     cpl_image     * image = NULL;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     cpl_ensure(<span class="keyword">self</span> != NULL,  CPL_ERROR_NULL_INPUT,          NULL);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     cpl_ensure(extnum >= 0,   CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     cpl_ensure(planenum >= 0, CPL_ERROR_ACCESS_OUT_OF_RANGE, NULL);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     list = cpl_imagelist_new();</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordflow">for</span> (i=0; i < <span class="keyword">self</span>->size; i++, image = NULL) {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * filename = cpl_frame_get_filename(self->frame[i]);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>         cpl_error_code error;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>         <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>         image = cpl_image_load(filename, pixeltype, planenum, extnum);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>         <span class="keywordflow">if</span> (image == NULL) {</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="preprocessor"></span>            (void)cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>                                         <span class="stringliteral">"Could not load FITS-image from plane "</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>                                         <span class="stringliteral">"%d in extension %d in file %s"</span>,</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>                                         planenum, extnum, filename);</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="preprocessor"></span>            (void)cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>                                         <span class="stringliteral">"Could not load FITS-image"</span>);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="preprocessor"></span>            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>         error = cpl_imagelist_set(list, image, i);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>         assert(error == CPL_ERROR_NONE);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     cpl_image_delete(image);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="keywordflow">if</span> (cpl_imagelist_get_size(list) != self->size) {</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         cpl_imagelist_delete(list);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>         list = NULL;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         assert(cpl_error_get_code() != CPL_ERROR_NONE);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     }</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <span class="keywordflow">return</span> list;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_framelist_set_size(irplib_framelist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> {</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     assert( <span class="keyword">self</span> != NULL);</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     <span class="keywordflow">if</span> (self->size == 0) {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         <span class="comment">/* The list has been emptied */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         cpl_free(self->frame);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         cpl_free(self->propertylist);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         <span class="keyword">self</span>->frame = NULL;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <span class="keyword">self</span>->propertylist = NULL;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         <span class="comment">/* Update the size of the arrays */</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         <span class="keyword">self</span>->frame = cpl_realloc(self->frame, self->size * <span class="keyword">sizeof</span>(cpl_frame*));</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="keyword">self</span>->propertylist =</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>             cpl_realloc(self->propertylist,</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>                         self->size * <span class="keyword">sizeof</span>(cpl_propertylist*));</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keyword">static</span> cpl_boolean irplib_property_equal(<span class="keyword">const</span> cpl_propertylist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                                          <span class="keyword">const</span> cpl_propertylist * other,</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span> * key, cpl_type type,</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                                          <span class="keywordtype">double</span> fp_tol,</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                                          <span class="keywordtype">char</span> ** sstring, <span class="keywordtype">char</span> ** ostring)</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> {</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     cpl_boolean equal;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>     assert(<span class="keyword">self</span>    != NULL);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     assert(other   != NULL);</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     assert(key     != NULL);</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     assert(sstring != NULL);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     assert(ostring != NULL);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="comment">/* FIXME: disable for better performance also with debugging */</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     assert(cpl_propertylist_get_type(other, key) == type);</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     assert(fp_tol >= 0.0);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     <span class="keywordflow">if</span> (<span class="keyword">self</span> == other) <span class="keywordflow">return</span> CPL_TRUE;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <span class="keywordflow">switch</span> (type) {</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keywordflow">case</span> CPL_TYPE_CHAR: {</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> svalue = cpl_propertylist_get_char(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> ovalue = cpl_propertylist_get_char(other, key);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>             *sstring = cpl_sprintf(<span class="stringliteral">"%c"</span>, svalue);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>             *ostring = cpl_sprintf(<span class="stringliteral">"%c"</span>, ovalue);</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>         }</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     }</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>     <span class="keywordflow">case</span> CPL_TYPE_BOOL: {</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> svalue = cpl_propertylist_get_bool(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> ovalue = cpl_propertylist_get_bool(other, key);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>             *sstring = cpl_strdup(svalue == 0 ? <span class="stringliteral">"F"</span> : <span class="stringliteral">"T"</span>);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>             *ostring = cpl_strdup(ovalue == 0 ? <span class="stringliteral">"F"</span> : <span class="stringliteral">"T"</span>);</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>         }</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="keywordflow">case</span> CPL_TYPE_INT: {</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> svalue = cpl_propertylist_get_int(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> ovalue = cpl_propertylist_get_int(other, key);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>             *sstring = cpl_sprintf(<span class="stringliteral">"%d"</span>, svalue);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>             *ostring = cpl_sprintf(<span class="stringliteral">"%d"</span>, ovalue);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>         }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>     }</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     <span class="keywordflow">case</span> CPL_TYPE_LONG: {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>         <span class="keyword">const</span> <span class="keywordtype">long</span> svalue = cpl_propertylist_get_long(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>         <span class="keyword">const</span> <span class="keywordtype">long</span> ovalue = cpl_propertylist_get_long(other, key);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>         equal = svalue == ovalue ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>             *sstring = cpl_sprintf(<span class="stringliteral">"%ld"</span>, svalue);</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>             *ostring = cpl_sprintf(<span class="stringliteral">"%ld"</span>, ovalue);</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>         }</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>     }</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     <span class="keywordflow">case</span> CPL_TYPE_FLOAT: {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> svalue = (double)cpl_propertylist_get_float(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> ovalue = (double)cpl_propertylist_get_float(other, key);</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> </div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>         equal = (fabs(svalue - ovalue) <= fp_tol) ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>             *sstring = cpl_sprintf(<span class="stringliteral">"%f"</span>, svalue);</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>             *ostring = cpl_sprintf(<span class="stringliteral">"%f"</span>, ovalue);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         }</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: {</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> svalue = cpl_propertylist_get_double(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> ovalue = cpl_propertylist_get_double(other, key);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>         equal = (fabs(svalue - ovalue) <= fp_tol) ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>             *sstring = cpl_sprintf(<span class="stringliteral">"%g"</span>, svalue);</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>             *ostring = cpl_sprintf(<span class="stringliteral">"%g"</span>, ovalue);</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         }</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     }</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     <span class="keywordflow">case</span> CPL_TYPE_STRING: {</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * svalue = cpl_propertylist_get_string(<span class="keyword">self</span>, key);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * ovalue = cpl_propertylist_get_string(other, key);</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>         equal = strcmp(svalue, ovalue) == 0 ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>         <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>             *sstring = cpl_strdup(svalue);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>             *ostring = cpl_strdup(ovalue);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>         }</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     }</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>         <span class="comment">/* Unknown property type */</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>         assert( 0 );</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> </div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>         equal = CPL_FALSE; <span class="comment">/* In case of -DNDEBUG */</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     }</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> </div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>     <span class="keywordflow">if</span> (!equal) {</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         assert( *sstring != NULL );</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>         assert( *ostring != NULL );</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     }</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     <span class="keywordflow">return</span> equal;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__framelist_8h_source.html b/html/irplib__framelist_8h_source.html
index 0c3ce46..c5d6919 100644
--- a/html/irplib__framelist_8h_source.html
+++ b/html/irplib__framelist_8h_source.html
@@ -2,122 +2,153 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_framelist.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_framelist.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_framelist.h,v 1.8 2008/11/20 10:24:47 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package </span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/11/20 10:24:47 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_FRAMELIST_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMELIST_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New type</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">typedef</span> <span class="keyword">struct </span>_irplib_framelist_ irplib_framelist;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                                   Function prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* Constructors and destructor */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>(<span class="keywordtype">void</span>);
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(irplib_framelist *);
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(<span class="keyword">const</span> cpl_frameset *);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a>(<span class="keyword">const</span> irplib_framelist *,
-<a name="l00056"></a>00056                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00057"></a>00057 irplib_framelist * <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(<span class="keyword">const</span> irplib_framelist *,
-<a name="l00058"></a>00058                                                    <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_boolean);
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/* Accessors and element modifiers */</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> <a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7" title="Get the size of a framelist.">irplib_framelist_get_size</a>(<span class="keyword">const</span> irplib_framelist *);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">const</span> irplib_framelist *, <span class="keywordtype">int</span>);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 cpl_frame * <a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387" title="Get the specified frame from the framelist.">irplib_framelist_get</a>(irplib_framelist *, <span class="keywordtype">int</span>);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">const</span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(
-<a name="l00069"></a>00069                                                        <span class="keyword">const</span> irplib_framelist *,
-<a name="l00070"></a>00070                                                        <span class="keywordtype">int</span>);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 cpl_propertylist * <a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 cpl_error_code <a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600" title="Duplicate a propertylist to the specified position in the framelist.">irplib_framelist_set_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>,
-<a name="l00075"></a>00075                                                  <span class="keyword">const</span> cpl_propertylist *);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 cpl_error_code <a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>,
-<a name="l00078"></a>00078                                                   <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00079"></a>00079                                                   cpl_boolean);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 cpl_error_code <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(irplib_framelist *, <span class="keywordtype">int</span>,
-<a name="l00082"></a>00082                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00083"></a>00083                                                       cpl_boolean);
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 cpl_error_code <a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14" title="Set the tag of all frames in the list.">irplib_framelist_set_tag_all</a>(irplib_framelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="comment">/* Inserting and removing elements */</span>
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 cpl_error_code <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(irplib_framelist *, cpl_frame *, <span class="keywordtype">int</span>);
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 cpl_error_code <a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce" title="Erase a frame from a framelist and delete it and its propertylist.">irplib_framelist_erase</a>(irplib_framelist *, <span class="keywordtype">int</span>);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 cpl_frame * <a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce" title="Erase a frame from a framelist and return it to the caller.">irplib_framelist_unset</a>(irplib_framelist *, <span class="keywordtype">int</span>, cpl_propertylist **);
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(irplib_framelist *);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="comment">/* Others */</span>
-<a name="l00099"></a>00099 cpl_error_code <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(<span class="keyword">const</span> irplib_framelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00100"></a>00100                                          cpl_type, cpl_boolean, <span class="keywordtype">double</span>);
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 cpl_imagelist * <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(<span class="keyword">const</span> irplib_framelist *,
-<a name="l00103"></a>00103                                                 cpl_type, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 cpl_frameset * <a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174" title="Create a CPL frameset from an irplib_framelist.">irplib_frameset_cast</a>(<span class="keyword">const</span> irplib_framelist *);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_framelist.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_framelist.h,v 1.8 2008/11/20 10:24:47 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/11/20 10:24:47 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_FRAMELIST_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMELIST_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New type</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_irplib_framelist_ irplib_framelist;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                   Function prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Constructors and destructor */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga5b86add048651f73424d2542a04946a0" title="Create an empty framelist.">irplib_framelist_new</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga7a5159e9d27ef277df3fb55b331aaf26" title="Deallocate an irplib_framelist with its frames and properties.">irplib_framelist_delete</a>(irplib_framelist *);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga30cbfd003c6e6a6a42e610442f0b1bd1" title="Create an irplib_framelist from a cpl_framelist.">irplib_framelist_cast</a>(<span class="keyword">const</span> cpl_frameset *);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#ga86d6746d1c19356417815f7df04c3396" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract</a>(<span class="keyword">const</span> irplib_framelist *,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> irplib_framelist * <a class="code" href="group__irplib__framelist.html#gace77e5ae75183a22a0e5af9dd9018b01" title="Extract the frames with the given tag from a framelist.">irplib_framelist_extract_regexp</a>(<span class="keyword">const</span> irplib_framelist *,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                                                    <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_boolean);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/* Accessors and element modifiers */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__framelist.html#ga2518fce55112b5008cb119a126e593d7" title="Get the size of a framelist.">irplib_framelist_get_size</a>(<span class="keyword">const</span> irplib_framelist *);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga93d8f903729ea4b6fcb3eca85935716f" title="Get the specified frame from the framelist.">irplib_framelist_get_const</a>(<span class="keyword">const</span> irplib_framelist *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#gaba8797bbb8394f5574cd88b2f1984387" title="Get the specified frame from the framelist.">irplib_framelist_get</a>(irplib_framelist *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">const</span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#ga7700dadcf17db5b86409e6cef233af4c" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist_const</a>(</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                                        <span class="keyword">const</span> irplib_framelist *,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                                                        <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> cpl_propertylist * <a class="code" href="group__irplib__framelist.html#gab4858b1e9164f3a6cffcf40270f89032" title="Get the propertylist of the specified frame in the framelist.">irplib_framelist_get_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gada2c2e3f530a6dff763402eefceb5600" title="Duplicate a propertylist to the specified position in the framelist.">irplib_framelist_set_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                                  <span class="keyword">const</span> cpl_propertylist *);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga6ce5701e84915514975d09e0100c6005" title="Load the propertylist of the specified frame in the framelist.">irplib_framelist_load_propertylist</a>(irplib_framelist *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                                   <span class="keywordtype">int</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                                   cpl_boolean);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gaf9204681e0b6aa2d952c974dcbd8729d" title="Load the propertylists of all frames in the framelist.">irplib_framelist_load_propertylist_all</a>(irplib_framelist *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                                       cpl_boolean);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gab11bb60e44dea926cd50ee80c7fbbd14" title="Set the tag of all frames in the list.">irplib_framelist_set_tag_all</a>(irplib_framelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/* Inserting and removing elements */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#ga37e730f5627b4a0c7a81014f62421879" title="Add a frame to a framelist.">irplib_framelist_set</a>(irplib_framelist *, cpl_frame *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gac66ea3ad4fc98c171f8b840229fe54ce" title="Erase a frame from a framelist and delete it and its propertylist.">irplib_framelist_erase</a>(irplib_framelist *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> cpl_frame * <a class="code" href="group__irplib__framelist.html#ga771f14f97f80a9bd7176d323999c9bce" title="Erase a frame from a framelist and return it to the caller.">irplib_framelist_unset</a>(irplib_framelist *, <span class="keywordtype">int</span>, cpl_propertylist **);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__framelist.html#ga900ea254d9b2a2e4e3957360bbae4deb" title="Erase all frames from a framelist.">irplib_framelist_empty</a>(irplib_framelist *);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/* Others */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> cpl_error_code <a class="code" href="group__irplib__framelist.html#gafed15e9e259ebad923b710f5eb0196ac" title="Verify that a property is present for all frames.">irplib_framelist_contains</a>(<span class="keyword">const</span> irplib_framelist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                          cpl_type, cpl_boolean, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> cpl_imagelist * <a class="code" href="group__irplib__framelist.html#ga0ff6c5e3b778c607544ca04ca3fb9e94" title="Load an imagelist from a framelist.">irplib_imagelist_load_framelist</a>(<span class="keyword">const</span> irplib_framelist *,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                                 cpl_type, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> cpl_frameset * <a class="code" href="group__irplib__framelist.html#gabeedce2770a1bc06c26c0891a41aa174" title="Create a CPL frameset from an irplib_framelist.">irplib_frameset_cast</a>(<span class="keyword">const</span> irplib_framelist *);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__hist_8c_source.html b/html/irplib__hist_8c_source.html
index ee6341c..62230a9 100644
--- a/html/irplib__hist_8c_source.html
+++ b/html/irplib__hist_8c_source.html
@@ -2,365 +2,396 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_hist.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_hist.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
-<a name="l00002"></a>00002 
-<a name="l00003"></a>00003 <span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/*</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Id: irplib_hist.c,v 1.7 2009/10/15 14:02:18 kmirny Exp $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Date: 2009/10/15 14:02:18 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00027"></a>00027 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00028"></a>00028 <span class="comment"> */</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_hist.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">struct </span>_irplib_hist_
-<a name="l00042"></a>00042 {
-<a name="l00043"></a>00043     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> * bins;
-<a name="l00044"></a>00044     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   nbins;
-<a name="l00045"></a>00045     <span class="keywordtype">double</span>          start;
-<a name="l00046"></a>00046     <span class="keywordtype">double</span>          range;
-<a name="l00047"></a>00047 };
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*</span>
-<a name="l00050"></a>00050 <span class="comment"> * Create a new empty histogram</span>
-<a name="l00051"></a>00051 <span class="comment"> */</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 irplib_hist *
-<a name="l00054"></a>00054 irplib_hist_new(<span class="keywordtype">void</span>)
-<a name="l00055"></a>00055 {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span> (irplib_hist *) cpl_calloc(1, <span class="keyword">sizeof</span>(irplib_hist));
-<a name="l00057"></a>00057 }
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*</span>
-<a name="l00060"></a>00060 <span class="comment"> * Delete a histogram</span>
-<a name="l00061"></a>00061 <span class="comment"> */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span>
-<a name="l00064"></a>00064 irplib_hist_delete(irplib_hist * d)
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (d == NULL)
-<a name="l00067"></a>00067     <span class="keywordflow">return</span>;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <span class="keywordflow">if</span> (d -> bins)
-<a name="l00070"></a>00070     cpl_free(d -> bins);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     cpl_free(d);
-<a name="l00073"></a>00073 }
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="comment">/*</span>
-<a name="l00076"></a>00076 <span class="comment"> * Initialise a histogram with user-defined values</span>
-<a name="l00077"></a>00077 <span class="comment"> */</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 cpl_error_code
-<a name="l00080"></a>00080 irplib_hist_init(irplib_hist   * hist,
-<a name="l00081"></a>00081                  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   nbins,
-<a name="l00082"></a>00082                  <span class="keywordtype">double</span>          start,
-<a name="l00083"></a>00083                  <span class="keywordtype">double</span>          range)
-<a name="l00084"></a>00084 {
-<a name="l00085"></a>00085     <span class="comment">/* Test the entries */</span>
-<a name="l00086"></a>00086     cpl_ensure_code(hist         != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00087"></a>00087     cpl_ensure_code(nbins        >  0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00088"></a>00088     cpl_ensure_code(range        >  0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00089"></a>00089     cpl_ensure_code(hist -> bins == NULL, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     <span class="comment">/* Initialise the histogram structure */</span>
-<a name="l00092"></a>00092     hist -> bins  = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *) cpl_calloc(nbins, <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>));
-<a name="l00093"></a>00093     hist -> nbins = nbins;
-<a name="l00094"></a>00094     hist -> start = start;
-<a name="l00095"></a>00095     hist -> range = range;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00098"></a>00098 }
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="comment">/*</span>
-<a name="l00101"></a>00101 <span class="comment"> * Return the value of a histogram bin.</span>
-<a name="l00102"></a>00102 <span class="comment"> * An uninitialised histogram is considered an illegal input.</span>
-<a name="l00103"></a>00103 <span class="comment"> */</span>
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00106"></a>00106 irplib_hist_get_value(<span class="keyword">const</span> irplib_hist * hist,
-<a name="l00107"></a>00107                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> binpos)
-<a name="l00108"></a>00108 {
-<a name="l00109"></a>00109     cpl_ensure(hist         != NULL,          CPL_ERROR_NULL_INPUT, 0);
-<a name="l00110"></a>00110     cpl_ensure(hist -> bins != NULL,          CPL_ERROR_ILLEGAL_INPUT, 0);
-<a name="l00111"></a>00111     cpl_ensure(binpos       <  hist -> nbins, CPL_ERROR_ILLEGAL_INPUT, 0);
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113     <span class="keywordflow">return</span> hist -> bins[binpos];
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*</span>
-<a name="l00117"></a>00117 <span class="comment"> * Return the number of bins in the histogram.</span>
-<a name="l00118"></a>00118 <span class="comment"> */</span>
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00121"></a>00121 irplib_hist_get_nbins(<span class="keyword">const</span> irplib_hist * hist)
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123     cpl_ensure(hist != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125     <span class="keywordflow">return</span> hist -> nbins;
-<a name="l00126"></a>00126 }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="comment">/*</span>
-<a name="l00129"></a>00129 <span class="comment"> * Return the binwidth of the histogram.</span>
-<a name="l00130"></a>00130 <span class="comment"> */</span>
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 <span class="keywordtype">double</span>
-<a name="l00133"></a>00133 irplib_hist_get_bin_size(<span class="keyword">const</span> irplib_hist * hist)
-<a name="l00134"></a>00134 {
-<a name="l00135"></a>00135     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00136"></a>00136     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keywordflow">return</span> hist -> range / (double)(hist -> nbins - 2);
-<a name="l00139"></a>00139 }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="comment">/*</span>
-<a name="l00142"></a>00142 <span class="comment"> * Return the range covered by the histogram.</span>
-<a name="l00143"></a>00143 <span class="comment"> */</span>
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="keywordtype">double</span>
-<a name="l00146"></a>00146 irplib_hist_get_range(<span class="keyword">const</span> irplib_hist * hist)
-<a name="l00147"></a>00147 {
-<a name="l00148"></a>00148     cpl_ensure(hist != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="keywordflow">return</span> hist -> range;
-<a name="l00151"></a>00151 }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="comment">/*</span>
-<a name="l00154"></a>00154 <span class="comment"> * Return the real value corresponding</span>
-<a name="l00155"></a>00155 <span class="comment"> * to the inferior limit of the histogram..</span>
-<a name="l00156"></a>00156 <span class="comment"> */</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="keywordtype">double</span>
-<a name="l00159"></a>00159 irplib_hist_get_start(<span class="keyword">const</span> irplib_hist * hist)
-<a name="l00160"></a>00160 {
-<a name="l00161"></a>00161     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00162"></a>00162     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     <span class="keywordflow">return</span> hist -> start;
-<a name="l00165"></a>00165 }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 <span class="comment">/*</span>
-<a name="l00168"></a>00168 <span class="comment"> * Fill a histogram for an image.</span>
-<a name="l00169"></a>00169 <span class="comment"> * If the histogram is uninitialised,</span>
-<a name="l00170"></a>00170 <span class="comment"> * the function initialises it with default values.</span>
-<a name="l00171"></a>00171 <span class="comment"> */</span>
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 cpl_error_code
-<a name="l00174"></a>00174 irplib_hist_fill(irplib_hist     * hist,
-<a name="l00175"></a>00175                  <span class="keyword">const</span> cpl_image * image)
-<a name="l00176"></a>00176 {
-<a name="l00177"></a>00177     <span class="keywordtype">double</span>           binwidth = 1.0;
-<a name="l00178"></a>00178     <span class="keywordtype">int</span>              nsamples;
-<a name="l00179"></a>00179     <span class="keywordtype">int</span>              i;
-<a name="l00180"></a>00180     <span class="keyword">const</span> <span class="keywordtype">float</span>    * data = 0;
-<a name="l00181"></a>00181     <span class="keyword">const</span> cpl_binary*  bpm_data = 0;
-<a name="l00182"></a>00182     <span class="keyword">const</span> cpl_mask* bpm = 0;
-<a name="l00183"></a>00183     cpl_error_code   error;
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185     <span class="comment">/* Test the entries */</span>
-<a name="l00186"></a>00186     cpl_ensure_code(hist  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00187"></a>00187     cpl_ensure_code(image != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     <span class="keywordflow">if</span> (hist -> bins == NULL) {
-<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">double</span>        hstart = cpl_image_get_min(image);
-<a name="l00191"></a>00191     <span class="keyword">const</span> <span class="keywordtype">double</span>        hrange = cpl_image_get_max(image) - hstart;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="comment">/*</span>
-<a name="l00194"></a>00194 <span class="comment">         * Whichever function that computes an optimal binwidth</span>
-<a name="l00195"></a>00195 <span class="comment">         * should be introduced inside this if-statement, here.</span>
-<a name="l00196"></a>00196 <span class="comment">         */</span>
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="comment">/* 2 extra-bins for possible out-of-range values */</span>
-<a name="l00199"></a>00199     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nbins  = (<span class="keywordtype">unsigned</span> long) (hrange / binwidth) + 2;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     error = irplib_hist_init(hist, nbins, hstart, hrange);
-<a name="l00202"></a>00202     cpl_ensure_code(!error, error);
-<a name="l00203"></a>00203     } <span class="keywordflow">else</span> {
-<a name="l00204"></a>00204     cpl_ensure_code(hist -> range > 0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="comment">/* 2 bins reserved for possible out-of-range values */</span>
-<a name="l00207"></a>00207         binwidth = hist -> range / (double)(hist -> nbins - 2);
-<a name="l00208"></a>00208     }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     nsamples = cpl_image_get_size_x(image) * cpl_image_get_size_y(image);
-<a name="l00211"></a>00211     data     = cpl_image_get_data_float_const(image);
-<a name="l00212"></a>00212     bpm      = cpl_image_get_bpm_const(image);
-<a name="l00213"></a>00213     <span class="keywordflow">if</span> (bpm)
-<a name="l00214"></a>00214     {
-<a name="l00215"></a>00215         bpm_data     = cpl_mask_get_data_const(bpm); <span class="comment">// bad pixel mask</span>
-<a name="l00216"></a>00216     }
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     <span class="keywordflow">for</span> (i = 0; i < nsamples; i++)
-<a name="l00219"></a>00219     {
-<a name="l00220"></a>00220         <span class="keywordtype">int</span> pos = 0;
-<a name="l00221"></a>00221         <span class="keywordflow">if</span>(bpm_data && bpm_data[i] == CPL_BINARY_1)
-<a name="l00222"></a>00222         {
-<a name="l00223"></a>00223             <span class="keywordflow">continue</span>;
-<a name="l00224"></a>00224         }
-<a name="l00225"></a>00225         pos = (int)((data[i] - hist -> start) / binwidth);
-<a name="l00226"></a>00226         <span class="keywordflow">if</span> (pos <  0)
-<a name="l00227"></a>00227         {
-<a name="l00228"></a>00228             hist -> bins[0]++;
-<a name="l00229"></a>00229         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) pos >= (hist -> nbins - 2))
-<a name="l00230"></a>00230         {
-<a name="l00231"></a>00231             hist -> bins[hist -> nbins - 1]++;
-<a name="l00232"></a>00232         } <span class="keywordflow">else</span>
-<a name="l00233"></a>00233         {
-<a name="l00234"></a>00234             hist -> bins[pos + 1]++;
-<a name="l00235"></a>00235         }
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00239"></a>00239 }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="comment">/*</span>
-<a name="l00242"></a>00242 <span class="comment"> * Compute the maximum of a histogram.</span>
-<a name="l00243"></a>00243 <span class="comment"> * Return: the maximum value.</span>
-<a name="l00244"></a>00244 <span class="comment"> * The parameter max_where is a pointer to the position</span>
-<a name="l00245"></a>00245 <span class="comment"> * of the maximum in the histogram.</span>
-<a name="l00246"></a>00246 <span class="comment"> */</span>
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00249"></a>00249 irplib_hist_get_max(<span class="keyword">const</span> irplib_hist * hist,
-<a name="l00250"></a>00250                     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>     * maxpos)
-<a name="l00251"></a>00251 {
-<a name="l00252"></a>00252     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> max = 0;
-<a name="l00253"></a>00253     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ui;
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00256"></a>00256     cpl_ensure(maxpos       != NULL, CPL_ERROR_NULL_INPUT, 0);
-<a name="l00257"></a>00257     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     <span class="keywordflow">for</span>(ui = 0; ui < hist -> nbins; ui++) {
-<a name="l00260"></a>00260     <span class="keywordtype">double</span> c_value = irplib_hist_get_value(hist, ui);
-<a name="l00261"></a>00261     <span class="keywordflow">if</span>(c_value > max) {
-<a name="l00262"></a>00262         max     = c_value;
-<a name="l00263"></a>00263         *maxpos = ui;
-<a name="l00264"></a>00264     }
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     <span class="keywordflow">return</span> max;
-<a name="l00268"></a>00268 }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="comment">/*</span>
-<a name="l00271"></a>00271 <span class="comment"> * Cast a histogram into a table with a single column named "HIST"</span>
-<a name="l00272"></a>00272 <span class="comment"> */</span>
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 cpl_table *
-<a name="l00275"></a>00275 irplib_hist_cast_table(<span class="keyword">const</span> irplib_hist * hist)
-<a name="l00276"></a>00276 {
-<a name="l00277"></a>00277     cpl_table      * table;
-<a name="l00278"></a>00278     cpl_error_code   error;
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l00281"></a>00281     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283     table = cpl_table_new(hist -> nbins);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     error = cpl_table_new_column(table, <span class="stringliteral">"HIST"</span>, CPL_TYPE_INT);
-<a name="l00286"></a>00286     cpl_ensure(!error, error, NULL);
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     error = cpl_table_copy_data_int(table, <span class="stringliteral">"HIST"</span>, (<span class="keywordtype">int</span> *)(hist -> bins));
-<a name="l00289"></a>00289     cpl_ensure(!error, error, NULL);
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     <span class="keywordflow">return</span> table;
-<a name="l00292"></a>00292 }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 <span class="comment">/*</span>
-<a name="l00295"></a>00295 <span class="comment"> * Collapse the histogram: add the values of all bins.</span>
-<a name="l00296"></a>00296 <span class="comment"> * Used now only for debugging purposes.</span>
-<a name="l00297"></a>00297 <span class="comment"> */</span>
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 cpl_error_code
-<a name="l00300"></a>00300 irplib_hist_collapse(irplib_hist * hist,
-<a name="l00301"></a>00301                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_nbins)
-<a name="l00302"></a>00302 {
-<a name="l00303"></a>00303     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   ui, nuj;
-<a name="l00304"></a>00304     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> * old_bins;
-<a name="l00305"></a>00305     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   old_nbins;
-<a name="l00306"></a>00306     <span class="keywordtype">double</span>          collapse_rate;
-<a name="l00307"></a>00307     cpl_error_code  error;
-<a name="l00308"></a>00308     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   rest;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310     cpl_ensure_code(hist         != NULL,          CPL_ERROR_NULL_INPUT);
-<a name="l00311"></a>00311     cpl_ensure_code(hist -> bins != NULL,          CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00312"></a>00312     cpl_ensure_code(new_nbins    >  0,             CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00313"></a>00313     cpl_ensure_code(new_nbins    <= hist -> nbins, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     old_bins  = hist -> bins;
-<a name="l00316"></a>00316     old_nbins = hist -> nbins;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     hist -> bins = NULL;
-<a name="l00319"></a>00319     error = irplib_hist_init(hist, new_nbins, hist -> start, hist -> range);
-<a name="l00320"></a>00320     cpl_ensure_code(!error, error);
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322     collapse_rate = (double) (old_nbins - 2) / (double) (new_nbins - 2);
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     <span class="comment">/* The out-of-range values are not affected by the collapsing operation */</span>
-<a name="l00325"></a>00325     hist -> bins[0]             = old_bins[0];
-<a name="l00326"></a>00326     hist -> bins[new_nbins - 1] = old_bins[old_nbins - 1];
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     rest = 0;
-<a name="l00329"></a>00329     nuj  = 1;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="keywordflow">for</span> (ui = 1; ui < new_nbins - 1; ui++) {
-<a name="l00332"></a>00332     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> uj;
-<a name="l00333"></a>00333     <span class="keyword">const</span> <span class="keywordtype">double</span>  up  = collapse_rate *  ui;
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     hist -> bins[ui] += rest;
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337     <span class="keywordflow">for</span> (uj = nuj; uj < (<span class="keywordtype">unsigned</span> long) up + 1; uj++)
-<a name="l00338"></a>00338         hist -> bins[ui] +=  old_bins[uj];
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     rest = (<span class="keywordtype">unsigned</span> long)(up - (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) up) * old_bins[uj];
-<a name="l00341"></a>00341     hist -> bins[ui] += rest;
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     rest = old_bins[uj] - rest;
-<a name="l00344"></a>00344     nuj = uj + 1;
-<a name="l00345"></a>00345     }
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347     cpl_free(old_bins);
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00350"></a>00350 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_hist.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> </div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> </div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Id: irplib_hist.c,v 1.8 2013/07/04 12:10:12 jtaylor Exp $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Date: 2013/07/04 12:10:12 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_hist.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">struct </span>_irplib_hist_</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> * bins;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   nbins;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordtype">double</span>          start;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="keywordtype">double</span>          range;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> };</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> * Create a new empty histogram</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> irplib_hist *</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> irplib_hist_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span> (irplib_hist *) cpl_calloc(1, <span class="keyword">sizeof</span>(irplib_hist));</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * Delete a histogram</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> irplib_hist_delete(irplib_hist * d)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">if</span> (d == NULL)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordflow">if</span> (d -> bins)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_free(d -> bins);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     cpl_free(d);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"> * Initialise a histogram with user-defined values</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> cpl_error_code</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> irplib_hist_init(irplib_hist   * hist,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   nbins,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                  <span class="keywordtype">double</span>          start,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                  <span class="keywordtype">double</span>          range)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="comment">/* Test the entries */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     cpl_ensure_code(hist         != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_ensure_code(nbins        >  0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_ensure_code(range        >  0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_ensure_code(hist -> bins == NULL, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="comment">/* Initialise the histogram structure */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     hist -> bins  = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *) cpl_calloc(nbins, <span class="keyword">sizeof</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>));</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     hist -> nbins = nbins;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     hist -> start = start;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     hist -> range = range;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment"> * Return the value of a histogram bin.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> * An uninitialised histogram is considered an illegal input.</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> irplib_hist_get_value(<span class="keyword">const</span> irplib_hist * hist,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> binpos)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_ensure(hist         != NULL,          CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     cpl_ensure(hist -> bins != NULL,          CPL_ERROR_ILLEGAL_INPUT, 0);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     cpl_ensure(binpos       <  hist -> nbins, CPL_ERROR_ILLEGAL_INPUT, 0);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">return</span> hist -> bins[binpos];</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment"> * Return the number of bins in the histogram.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> irplib_hist_get_nbins(<span class="keyword">const</span> irplib_hist * hist)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     cpl_ensure(hist != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">return</span> hist -> nbins;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment"> * Return the binwidth of the histogram.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> irplib_hist_get_bin_size(<span class="keyword">const</span> irplib_hist * hist)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">return</span> hist -> range / (double)(hist -> nbins - 2);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment"> * Return the range covered by the histogram.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> irplib_hist_get_range(<span class="keyword">const</span> irplib_hist * hist)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_ensure(hist != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">return</span> hist -> range;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment"> * Return the real value corresponding</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment"> * to the inferior limit of the histogram..</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> irplib_hist_get_start(<span class="keyword">const</span> irplib_hist * hist)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">return</span> hist -> start;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment"> * Fill a histogram for an image.</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment"> * If the histogram is uninitialised,</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment"> * the function initialises it with default values.</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> cpl_error_code</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> irplib_hist_fill(irplib_hist     * hist,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                  <span class="keyword">const</span> cpl_image * image)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordtype">double</span>           binwidth = 1.0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordtype">int</span>              nsamples;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordtype">int</span>              i;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keyword">const</span> <span class="keywordtype">float</span>    * data = 0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keyword">const</span> cpl_binary*  bpm_data = 0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keyword">const</span> cpl_mask* bpm = 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_error_code   error;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="comment">/* Test the entries */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     cpl_ensure_code(hist  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_ensure_code(image != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">if</span> (hist -> bins == NULL) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>        hstart = cpl_image_get_min(image);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>        hrange = cpl_image_get_max(image) - hstart;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">         * Whichever function that computes an optimal binwidth</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">         * should be introduced inside this if-statement, here.</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="comment">/* 2 extra-bins for possible out-of-range values */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nbins  = (<span class="keywordtype">unsigned</span> long) (hrange / binwidth) + 2;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     error = irplib_hist_init(hist, nbins, hstart, hrange);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_ensure_code(hist -> range > 0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="comment">/* 2 bins reserved for possible out-of-range values */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         binwidth = hist -> range / (double)(hist -> nbins - 2);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     nsamples = cpl_image_get_size_x(image) * cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     data     = cpl_image_get_data_float_const(image);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     bpm      = cpl_image_get_bpm_const(image);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">if</span> (bpm)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         bpm_data     = cpl_mask_get_data_const(bpm); <span class="comment">// bad pixel mask</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">for</span> (i = 0; i < nsamples; i++)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         <span class="keywordtype">int</span> pos = 0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         <span class="keywordflow">if</span>(bpm_data && bpm_data[i] != CPL_BINARY_0)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         pos = (int)((data[i] - hist -> start) / binwidth);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         <span class="keywordflow">if</span> (pos <  0)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>             hist -> bins[0]++;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) pos >= (hist -> nbins - 2))</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>             hist -> bins[hist -> nbins - 1]++;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>             hist -> bins[pos + 1]++;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment"> * Compute the maximum of a histogram.</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="comment"> * Return: the maximum value.</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment"> * The parameter max_where is a pointer to the position</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment"> * of the maximum in the histogram.</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> irplib_hist_get_max(<span class="keyword">const</span> irplib_hist * hist,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>     * maxpos)</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> max = 0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ui;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cpl_ensure(maxpos       != NULL, CPL_ERROR_NULL_INPUT, 0);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, 0);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">for</span>(ui = 0; ui < hist -> nbins; ui++) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">double</span> c_value = irplib_hist_get_value(hist, ui);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">if</span>(c_value > max) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         max     = c_value;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         *maxpos = ui;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="keywordflow">return</span> max;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment"> * Cast a histogram into a table with a single column named "HIST"</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> cpl_table *</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> irplib_hist_cast_table(<span class="keyword">const</span> irplib_hist * hist)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cpl_table      * table;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     cpl_error_code   error;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     cpl_ensure(hist         != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     cpl_ensure(hist -> bins != NULL, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     table = cpl_table_new(hist -> nbins);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     error = cpl_table_new_column(table, <span class="stringliteral">"HIST"</span>, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_ensure(!error, error, NULL);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     error = cpl_table_copy_data_int(table, <span class="stringliteral">"HIST"</span>, (<span class="keywordtype">int</span> *)(hist -> bins));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     cpl_ensure(!error, error, NULL);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="keywordflow">return</span> table;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment"> * Collapse the histogram: add the values of all bins.</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment"> * Used now only for debugging purposes.</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> cpl_error_code</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> irplib_hist_collapse(irplib_hist * hist,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> new_nbins)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   ui, nuj;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> * old_bins;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   old_nbins;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordtype">double</span>          collapse_rate;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   rest;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     cpl_ensure_code(hist         != NULL,          CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     cpl_ensure_code(hist -> bins != NULL,          CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     cpl_ensure_code(new_nbins    >  0,             CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     cpl_ensure_code(new_nbins    <= hist -> nbins, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     old_bins  = hist -> bins;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     old_nbins = hist -> nbins;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     hist -> bins = NULL;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     error = irplib_hist_init(hist, new_nbins, hist -> start, hist -> range);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     collapse_rate = (double) (old_nbins - 2) / (double) (new_nbins - 2);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">/* The out-of-range values are not affected by the collapsing operation */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     hist -> bins[0]             = old_bins[0];</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     hist -> bins[new_nbins - 1] = old_bins[old_nbins - 1];</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     rest = 0;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     nuj  = 1;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">for</span> (ui = 1; ui < new_nbins - 1; ui++) {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> uj;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>  up  = collapse_rate *  ui;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     hist -> bins[ui] += rest;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">for</span> (uj = nuj; uj < (<span class="keywordtype">unsigned</span> long) up + 1; uj++)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         hist -> bins[ui] +=  old_bins[uj];</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     rest = (<span class="keywordtype">unsigned</span> long)(up - (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) up) * old_bins[uj];</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     hist -> bins[ui] += rest;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     rest = old_bins[uj] - rest;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     nuj = uj + 1;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     cpl_free(old_bins);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__hist_8h_source.html b/html/irplib__hist_8h_source.html
index dd4a767..b2298fa 100644
--- a/html/irplib__hist_8h_source.html
+++ b/html/irplib__hist_8h_source.html
@@ -2,108 +2,139 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_hist.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_hist.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_hist.h,v 1.3 2007/09/07 14:23:50 lbilbao Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: lbilbao $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/09/07 14:23:50 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_HIST_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_HIST_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="keyword">typedef</span> <span class="keyword">struct </span>_irplib_hist_ irplib_hist;
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/* Creation/Destruction functions */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 irplib_hist *
-<a name="l00038"></a>00038 irplib_hist_new(<span class="keywordtype">void</span>);
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keywordtype">void</span>
-<a name="l00041"></a>00041 irplib_hist_delete(irplib_hist *);
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* Initialisation function */</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 cpl_error_code
-<a name="l00046"></a>00046 irplib_hist_init(irplib_hist   *,
-<a name="l00047"></a>00047                  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  ,
-<a name="l00048"></a>00048                  <span class="keywordtype">double</span>         ,
-<a name="l00049"></a>00049                  <span class="keywordtype">double</span>         );
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/* Accessor functions */</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00054"></a>00054 irplib_hist_get_value(<span class="keyword">const</span> irplib_hist *,
-<a name="l00055"></a>00055                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00058"></a>00058 irplib_hist_get_nbins(<span class="keyword">const</span> irplib_hist *);
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keywordtype">double</span>
-<a name="l00061"></a>00061 irplib_hist_get_bin_size(<span class="keyword">const</span> irplib_hist *);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keywordtype">double</span>
-<a name="l00064"></a>00064 irplib_hist_get_range(<span class="keyword">const</span> irplib_hist *);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keywordtype">double</span>
-<a name="l00067"></a>00067 irplib_hist_get_start(<span class="keyword">const</span> irplib_hist *);
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="comment">/* Histogram computing function */</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 cpl_error_code
-<a name="l00072"></a>00072 irplib_hist_fill(irplib_hist     *,
-<a name="l00073"></a>00073                  <span class="keyword">const</span> cpl_image *);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="comment">/* Statistics functions */</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>
-<a name="l00078"></a>00078 irplib_hist_get_max(<span class="keyword">const</span> irplib_hist *,
-<a name="l00079"></a>00079                     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>     *);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/* Casting function */</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 cpl_table *
-<a name="l00084"></a>00084 irplib_hist_cast_table(<span class="keyword">const</span> irplib_hist *);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="comment">/* Functions for operations on histograms */</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 cpl_error_code
-<a name="l00089"></a>00089 irplib_hist_collapse(irplib_hist *,
-<a name="l00090"></a>00090                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 <span class="preprocessor">#endif </span><span class="comment">/* IRPLIB_HIST_H */</span>
-<a name="l00093"></a>00093 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_hist.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_hist.h,v 1.3 2007/09/07 14:23:50 lbilbao Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: lbilbao $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/09/07 14:23:50 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_HIST_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_HIST_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_irplib_hist_ irplib_hist;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* Creation/Destruction functions */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> irplib_hist *</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> irplib_hist_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> irplib_hist_delete(irplib_hist *);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* Initialisation function */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> cpl_error_code</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> irplib_hist_init(irplib_hist   *,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  ,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                  <span class="keywordtype">double</span>         ,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                  <span class="keywordtype">double</span>         );</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* Accessor functions */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> irplib_hist_get_value(<span class="keyword">const</span> irplib_hist *,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> irplib_hist_get_nbins(<span class="keyword">const</span> irplib_hist *);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> irplib_hist_get_bin_size(<span class="keyword">const</span> irplib_hist *);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> irplib_hist_get_range(<span class="keyword">const</span> irplib_hist *);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> irplib_hist_get_start(<span class="keyword">const</span> irplib_hist *);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/* Histogram computing function */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> cpl_error_code</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> irplib_hist_fill(irplib_hist     *,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                  <span class="keyword">const</span> cpl_image *);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/* Statistics functions */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> irplib_hist_get_max(<span class="keyword">const</span> irplib_hist *,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>     *);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/* Casting function */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> cpl_table *</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> irplib_hist_cast_table(<span class="keyword">const</span> irplib_hist *);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/* Functions for operations on histograms */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> cpl_error_code</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> irplib_hist_collapse(irplib_hist *,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">#endif </span><span class="comment">/* IRPLIB_HIST_H */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__ksigma__clip_8c_source.html b/html/irplib__ksigma__clip_8c_source.html
index 0d0df63..21f9a60 100644
--- a/html/irplib__ksigma__clip_8c_source.html
+++ b/html/irplib__ksigma__clip_8c_source.html
@@ -2,222 +2,253 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_ksigma_clip.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_ksigma_clip.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_ksigma_clip.c,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <complex.h></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                  Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include <math.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <string.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <assert.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <float.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#include "irplib_ksigma_clip.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#include "irplib_hist.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*</span>
-<a name="l00053"></a>00053 <span class="comment"> * @defgroup ksigmaclip        kappa sigma clip functions</span>
-<a name="l00054"></a>00054 <span class="comment"> */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">                                  Defines</span>
-<a name="l00060"></a>00060 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                                  Private function prototypes</span>
-<a name="l00064"></a>00064 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> cpl_error_code
-<a name="l00067"></a>00067 irplib_ksigma_clip_double(<span class="keyword">const</span> <span class="keywordtype">double</span>  * pi,
-<a name="l00068"></a>00068               <span class="keywordtype">int</span>               llx,
-<a name="l00069"></a>00069               <span class="keywordtype">int</span>               lly,
-<a name="l00070"></a>00070               <span class="keywordtype">int</span>               urx,
-<a name="l00071"></a>00071               <span class="keywordtype">int</span>               ury,
-<a name="l00072"></a>00072               <span class="keywordtype">int</span>               nx,
-<a name="l00073"></a>00073               <span class="keywordtype">double</span>            var_sum,
-<a name="l00074"></a>00074               <span class="keywordtype">int</span>               npixs,
-<a name="l00075"></a>00075               <span class="keywordtype">double</span>            kappa,
-<a name="l00076"></a>00076               <span class="keywordtype">int</span>               nclip,
-<a name="l00077"></a>00077               <span class="keywordtype">double</span>            tolerance,
-<a name="l00078"></a>00078               <span class="keywordtype">double</span>          * mean,
-<a name="l00079"></a>00079               <span class="keywordtype">double</span>          * stdev);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keyword">static</span> cpl_error_code
-<a name="l00082"></a>00082 irplib_ksigma_clip_float(<span class="keyword">const</span> <span class="keywordtype">float</span>     * pi,
-<a name="l00083"></a>00083              <span class="keywordtype">int</span>               llx,
-<a name="l00084"></a>00084              <span class="keywordtype">int</span>               lly,
-<a name="l00085"></a>00085              <span class="keywordtype">int</span>               urx,
-<a name="l00086"></a>00086              <span class="keywordtype">int</span>               ury,
-<a name="l00087"></a>00087              <span class="keywordtype">int</span>               nx,
-<a name="l00088"></a>00088              <span class="keywordtype">double</span>            var_sum,
-<a name="l00089"></a>00089              <span class="keywordtype">int</span>               npixs,
-<a name="l00090"></a>00090              <span class="keywordtype">double</span>            kappa,
-<a name="l00091"></a>00091              <span class="keywordtype">int</span>               nclip,
-<a name="l00092"></a>00092              <span class="keywordtype">double</span>            tolerance,
-<a name="l00093"></a>00093              <span class="keywordtype">double</span>          * mean,
-<a name="l00094"></a>00094              <span class="keywordtype">double</span>          * stdev);
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> cpl_error_code
-<a name="l00097"></a>00097 irplib_ksigma_clip_int(<span class="keyword">const</span> <span class="keywordtype">int</span>       * pi,
-<a name="l00098"></a>00098                <span class="keywordtype">int</span>               llx,
-<a name="l00099"></a>00099                <span class="keywordtype">int</span>               lly,
-<a name="l00100"></a>00100                <span class="keywordtype">int</span>               urx,
-<a name="l00101"></a>00101                <span class="keywordtype">int</span>               ury,
-<a name="l00102"></a>00102                <span class="keywordtype">int</span>               nx,
-<a name="l00103"></a>00103                <span class="keywordtype">double</span>            var_sum,
-<a name="l00104"></a>00104                <span class="keywordtype">int</span>               npixs,
-<a name="l00105"></a>00105                <span class="keywordtype">double</span>            kappa,
-<a name="l00106"></a>00106                <span class="keywordtype">int</span>               nclip,
-<a name="l00107"></a>00107                <span class="keywordtype">double</span>            tolerance,
-<a name="l00108"></a>00108                <span class="keywordtype">double</span>          * mean,
-<a name="l00109"></a>00109                <span class="keywordtype">double</span>          * stdev);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00164"></a>00164 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00165"></a>00165 cpl_error_code
-<a name="l00166"></a>00166 irplib_ksigma_clip(<span class="keyword">const</span> cpl_image * img,
-<a name="l00167"></a>00167            <span class="keywordtype">int</span>               llx,
-<a name="l00168"></a>00168            <span class="keywordtype">int</span>               lly,
-<a name="l00169"></a>00169            <span class="keywordtype">int</span>               urx,
-<a name="l00170"></a>00170            <span class="keywordtype">int</span>               ury,
-<a name="l00171"></a>00171            <span class="keywordtype">double</span>            kappa,
-<a name="l00172"></a>00172            <span class="keywordtype">int</span>               nclip,
-<a name="l00173"></a>00173            <span class="keywordtype">double</span>            tolerance,
-<a name="l00174"></a>00174            <span class="keywordtype">double</span>          * kmean,
-<a name="l00175"></a>00175            <span class="keywordtype">double</span>          * kstdev)
-<a name="l00176"></a>00176 {
-<a name="l00177"></a>00177     cpl_errorstate inistate = cpl_errorstate_get();
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="keywordtype">int</span> nx, ny;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     cpl_stats * stats;
-<a name="l00182"></a>00182     <span class="keywordtype">double</span>      mean, stdev, var_sum;
-<a name="l00183"></a>00183     <span class="keywordtype">int</span>         npixs;
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185     cpl_ensure_code(img != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     nx = cpl_image_get_size_x(img);
-<a name="l00188"></a>00188     ny = cpl_image_get_size_y(img);
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     cpl_ensure_code(llx > 0 && urx > llx && urx <= nx &&
-<a name="l00191"></a>00191             lly > 0 && ury > lly && ury <= ny,
-<a name="l00192"></a>00192             CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     cpl_ensure_code(tolerance >= 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00195"></a>00195     cpl_ensure_code(kappa     >  1.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00196"></a>00196     cpl_ensure_code(nclip     >    0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     stats = cpl_stats_new_from_image_window(img,
-<a name="l00199"></a>00199                         CPL_STATS_MEAN | CPL_STATS_STDEV,
-<a name="l00200"></a>00200                         llx, lly, urx, ury);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     npixs   = cpl_stats_get_npix(stats); <span class="comment">/* Non-bad pixels in window */</span>
-<a name="l00203"></a>00203     mean    = cpl_stats_get_mean(stats);
-<a name="l00204"></a>00204     stdev   = cpl_stats_get_stdev(stats);
-<a name="l00205"></a>00205     var_sum = stdev * stdev * (npixs - 1);
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     cpl_stats_delete(stats);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     <span class="comment">/* img, llx etc. may cause errors: Check and propagate */</span>
-<a name="l00210"></a>00210     cpl_ensure_code(cpl_errorstate_is_equal(inistate), cpl_error_get_code());
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     <span class="keywordflow">switch</span> (cpl_image_get_type(img)) {
-<a name="l00213"></a>00213     <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:
-<a name="l00214"></a>00214     skip_if(irplib_ksigma_clip_double(cpl_image_get_data_double_const(img),
-<a name="l00215"></a>00215                       llx, lly, urx, ury, nx, var_sum,
-<a name="l00216"></a>00216                       npixs, kappa, nclip, tolerance,
-<a name="l00217"></a>00217                       &mean, &stdev));
-<a name="l00218"></a>00218     <span class="keywordflow">break</span>;
-<a name="l00219"></a>00219     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l00220"></a>00220     skip_if(irplib_ksigma_clip_float(cpl_image_get_data_float_const(img),
-<a name="l00221"></a>00221                      llx, lly, urx, ury, nx, var_sum,
-<a name="l00222"></a>00222                      npixs, kappa, nclip, tolerance,
-<a name="l00223"></a>00223                      &mean, &stdev));
-<a name="l00224"></a>00224     <span class="keywordflow">break</span>;
-<a name="l00225"></a>00225     <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l00226"></a>00226     skip_if(irplib_ksigma_clip_int(cpl_image_get_data_int_const(img),
-<a name="l00227"></a>00227                        llx, lly, urx, ury, nx, var_sum,
-<a name="l00228"></a>00228                        npixs, kappa, nclip, tolerance,
-<a name="l00229"></a>00229                        &mean, &stdev));
-<a name="l00230"></a>00230     <span class="keywordflow">break</span>;
-<a name="l00231"></a>00231     <span class="keywordflow">default</span>:
-<a name="l00232"></a>00232     <span class="comment">/* It is an error in CPL to reach this point */</span>
-<a name="l00233"></a>00233     assert( 0 );
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     *kmean = mean;
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (kstdev != NULL) *kstdev = stdev; <span class="comment">/* Optional */</span>
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     end_skip;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00242"></a>00242 }
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 <span class="preprocessor">#define CONCAT(a,b) a ## _ ## b</span>
-<a name="l00245"></a>00245 <span class="preprocessor"></span><span class="preprocessor">#define CONCAT2X(a,b) CONCAT(a,b)</span>
-<a name="l00246"></a>00246 <span class="preprocessor"></span>
-<a name="l00247"></a>00247 <span class="preprocessor">#define CPL_TYPE double</span>
-<a name="l00248"></a>00248 <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span>
-<a name="l00249"></a>00249 <span class="preprocessor">#undef CPL_TYPE</span>
-<a name="l00250"></a>00250 <span class="preprocessor"></span>
-<a name="l00251"></a>00251 <span class="preprocessor">#define CPL_TYPE float</span>
-<a name="l00252"></a>00252 <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span>
-<a name="l00253"></a>00253 <span class="preprocessor">#undef CPL_TYPE</span>
-<a name="l00254"></a>00254 <span class="preprocessor"></span>
-<a name="l00255"></a>00255 <span class="preprocessor">#define CPL_TYPE int</span>
-<a name="l00256"></a>00256 <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span>
-<a name="l00257"></a>00257 <span class="preprocessor">#undef CPL_TYPE</span>
-<a name="l00258"></a>00258 <span class="preprocessor"></span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_ksigma_clip.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_ksigma_clip.c,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <complex.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "irplib_ksigma_clip.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "irplib_hist.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> * @defgroup ksigmaclip        kappa sigma clip functions</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                                  Defines</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                                  Private function prototypes</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> irplib_ksigma_clip_double(<span class="keyword">const</span> <span class="keywordtype">double</span>  * pi,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>               <span class="keywordtype">int</span>               llx,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>               <span class="keywordtype">int</span>               lly,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>               <span class="keywordtype">int</span>               urx,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>               <span class="keywordtype">int</span>               ury,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>               <span class="keywordtype">int</span>               nx,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>               <span class="keywordtype">double</span>            var_sum,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>               <span class="keywordtype">int</span>               npixs,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>               <span class="keywordtype">double</span>            kappa,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>               <span class="keywordtype">int</span>               nclip,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>               <span class="keywordtype">double</span>            tolerance,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>               <span class="keywordtype">double</span>          * mean,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>               <span class="keywordtype">double</span>          * stdev);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> irplib_ksigma_clip_float(<span class="keyword">const</span> <span class="keywordtype">float</span>     * pi,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>              <span class="keywordtype">int</span>               llx,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>              <span class="keywordtype">int</span>               lly,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>              <span class="keywordtype">int</span>               urx,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>              <span class="keywordtype">int</span>               ury,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>              <span class="keywordtype">int</span>               nx,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>              <span class="keywordtype">double</span>            var_sum,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>              <span class="keywordtype">int</span>               npixs,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>              <span class="keywordtype">double</span>            kappa,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>              <span class="keywordtype">int</span>               nclip,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>              <span class="keywordtype">double</span>            tolerance,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>              <span class="keywordtype">double</span>          * mean,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>              <span class="keywordtype">double</span>          * stdev);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> irplib_ksigma_clip_int(<span class="keyword">const</span> <span class="keywordtype">int</span>       * pi,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                <span class="keywordtype">int</span>               llx,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                <span class="keywordtype">int</span>               lly,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                <span class="keywordtype">int</span>               urx,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                <span class="keywordtype">int</span>               ury,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                <span class="keywordtype">int</span>               nx,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                <span class="keywordtype">double</span>            var_sum,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                <span class="keywordtype">int</span>               npixs,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                <span class="keywordtype">double</span>            kappa,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                <span class="keywordtype">int</span>               nclip,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                <span class="keywordtype">double</span>            tolerance,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                <span class="keywordtype">double</span>          * mean,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                <span class="keywordtype">double</span>          * stdev);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> cpl_error_code</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> irplib_ksigma_clip(<span class="keyword">const</span> cpl_image * img,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>            <span class="keywordtype">int</span>               llx,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>            <span class="keywordtype">int</span>               lly,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>            <span class="keywordtype">int</span>               urx,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>            <span class="keywordtype">int</span>               ury,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>            <span class="keywordtype">double</span>            kappa,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>            <span class="keywordtype">int</span>               nclip,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>            <span class="keywordtype">double</span>            tolerance,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>            <span class="keywordtype">double</span>          * kmean,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>            <span class="keywordtype">double</span>          * kstdev)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_errorstate inistate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordtype">int</span> nx, ny;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_stats * stats;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordtype">double</span>      mean, stdev, var_sum;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordtype">int</span>         npixs;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_ensure_code(img != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     nx = cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     ny = cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_ensure_code(llx > 0 && urx > llx && urx <= nx &&</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>             lly > 0 && ury > lly && ury <= ny,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>             CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_ensure_code(tolerance >= 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_ensure_code(kappa     >  1.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_ensure_code(nclip     >    0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     stats = cpl_stats_new_from_image_window(img,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                         CPL_STATS_MEAN | CPL_STATS_STDEV,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                         llx, lly, urx, ury);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     npixs   = cpl_stats_get_npix(stats); <span class="comment">/* Non-bad pixels in window */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     mean    = cpl_stats_get_mean(stats);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     stdev   = cpl_stats_get_stdev(stats);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     var_sum = stdev * stdev * (npixs - 1);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     cpl_stats_delete(stats);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="comment">/* img, llx etc. may cause errors: Check and propagate */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     cpl_ensure_code(cpl_errorstate_is_equal(inistate), cpl_error_get_code());</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">switch</span> (cpl_image_get_type(img)) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     skip_if(irplib_ksigma_clip_double(cpl_image_get_data_double_const(img),</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                       llx, lly, urx, ury, nx, var_sum,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                       npixs, kappa, nclip, tolerance,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                       &mean, &stdev));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     skip_if(irplib_ksigma_clip_float(cpl_image_get_data_float_const(img),</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                      llx, lly, urx, ury, nx, var_sum,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                      npixs, kappa, nclip, tolerance,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                      &mean, &stdev));</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     skip_if(irplib_ksigma_clip_int(cpl_image_get_data_int_const(img),</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                        llx, lly, urx, ury, nx, var_sum,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                        npixs, kappa, nclip, tolerance,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                        &mean, &stdev));</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="comment">/* It is an error in CPL to reach this point */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     assert( 0 );</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     *kmean = mean;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (kstdev != NULL) *kstdev = stdev; <span class="comment">/* Optional */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     end_skip;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">#define CONCAT(a,b) a ## _ ## b</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor"></span><span class="preprocessor">#define CONCAT2X(a,b) CONCAT(a,b)</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="preprocessor">#define CPL_TYPE double</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="preprocessor">#undef CPL_TYPE</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">#define CPL_TYPE float</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">#undef CPL_TYPE</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">#define CPL_TYPE int</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor"></span><span class="preprocessor">#include "irplib_ksigma_clip_body.h"</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">#undef CPL_TYPE</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__ksigma__clip_8h_source.html b/html/irplib__ksigma__clip_8h_source.html
index f8e73eb..9088c12 100644
--- a/html/irplib__ksigma__clip_8h_source.html
+++ b/html/irplib__ksigma__clip_8h_source.html
@@ -2,67 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_ksigma_clip.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_ksigma_clip.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_ksigma_clip.h,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_KSIGMA_CLIP_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_KSIGMA_CLIP_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Prototypes</span>
-<a name="l00039"></a>00039 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 cpl_error_code
-<a name="l00041"></a>00041 irplib_ksigma_clip(<span class="keyword">const</span> cpl_image *,
-<a name="l00042"></a>00042            <span class="keyword">const</span> <span class="keywordtype">int</span>,
-<a name="l00043"></a>00043            <span class="keyword">const</span> <span class="keywordtype">int</span>,
-<a name="l00044"></a>00044            <span class="keyword">const</span> <span class="keywordtype">int</span>,
-<a name="l00045"></a>00045            <span class="keyword">const</span> <span class="keywordtype">int</span>,
-<a name="l00046"></a>00046            <span class="keyword">const</span> <span class="keywordtype">double</span>,
-<a name="l00047"></a>00047            <span class="keyword">const</span> <span class="keywordtype">int</span>,
-<a name="l00048"></a>00048            <span class="keyword">const</span> <span class="keywordtype">double</span>,
-<a name="l00049"></a>00049            <span class="keywordtype">double</span> *,
-<a name="l00050"></a>00050            <span class="keywordtype">double</span> *);
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_ksigma_clip.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_ksigma_clip.h,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002, 2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_KSIGMA_CLIP_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_KSIGMA_CLIP_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> cpl_error_code</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> irplib_ksigma_clip(<span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>            <span class="keyword">const</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>            <span class="keyword">const</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>            <span class="keyword">const</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>            <span class="keyword">const</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>            <span class="keyword">const</span> <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>            <span class="keyword">const</span> <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>            <span class="keyword">const</span> <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>            <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>            <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__ksigma__clip__body_8h_source.html b/html/irplib__ksigma__clip__body_8h_source.html
index bad7bcd..2a5dad8 100644
--- a/html/irplib__ksigma__clip__body_8h_source.html
+++ b/html/irplib__ksigma__clip__body_8h_source.html
@@ -2,122 +2,153 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_ksigma_clip_body.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_ksigma_clip_body.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_ksigma_clip_body.h,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package </span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#define TYPE_ADD(a) CONCAT2X(a, CPL_TYPE)</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="keyword">static</span> cpl_error_code
-<a name="l00031"></a>00031 TYPE_ADD(irplib_ksigma_clip)(<span class="keyword">const</span> CPL_TYPE  * pi,
-<a name="l00032"></a>00032                  <span class="keywordtype">int</span>               llx,
-<a name="l00033"></a>00033                  <span class="keywordtype">int</span>               lly,
-<a name="l00034"></a>00034                  <span class="keywordtype">int</span>               urx,
-<a name="l00035"></a>00035                  <span class="keywordtype">int</span>               ury,
-<a name="l00036"></a>00036                  <span class="keywordtype">int</span>               nx,
-<a name="l00037"></a>00037                  <span class="keywordtype">double</span>            var_sum,
-<a name="l00038"></a>00038                  <span class="keywordtype">int</span>               npixs,
-<a name="l00039"></a>00039                  <span class="keywordtype">double</span>            kappa,
-<a name="l00040"></a>00040                  <span class="keywordtype">int</span>               nclip,
-<a name="l00041"></a>00041                  <span class="keywordtype">double</span>            tolerance,
-<a name="l00042"></a>00042                  <span class="keywordtype">double</span>          * mean,
-<a name="l00043"></a>00043                  <span class="keywordtype">double</span>          * stdev)
-<a name="l00044"></a>00044 {
-<a name="l00045"></a>00045     <span class="keywordtype">int</span>    pos0 = (llx - 1) + (lly - 1) * nx; <span class="comment">/* 1st pixel to process */</span>
-<a name="l00046"></a>00046     <span class="keywordtype">double</span> nb   = (double) npixs;             <span class="comment">/* Non-bad pixels in window */</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048     <span class="keywordtype">double</span> lo_cut    = *mean - kappa * (*stdev);
-<a name="l00049"></a>00049     <span class="keywordtype">double</span> hi_cut    = *mean + kappa * (*stdev);
-<a name="l00050"></a>00050     
-<a name="l00051"></a>00051     <span class="keywordtype">double</span> lo_cut_p  = lo_cut;
-<a name="l00052"></a>00052     <span class="keywordtype">double</span> hi_cut_p  = hi_cut;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054     <span class="keywordtype">double</span> c_var_sum;
-<a name="l00055"></a>00055     <span class="keywordtype">double</span> c_mean = 0; <span class="comment">/* Avoid false uninit warning */</span>
-<a name="l00056"></a>00056     <span class="keywordtype">double</span> c_stdev = 0; <span class="comment">/* Avoid false uninit warning */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="keywordtype">int</span>    iclip;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060     <span class="keywordflow">for</span> (iclip = 0; iclip < nclip; iclip++) {
-<a name="l00061"></a>00061         <span class="keywordtype">int</span> pos = pos0;
-<a name="l00062"></a>00062         <span class="keywordtype">int</span> i, j;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064     c_var_sum = var_sum;
-<a name="l00065"></a>00065     c_mean    = *mean;
-<a name="l00066"></a>00066     c_stdev   = *stdev;
-<a name="l00067"></a>00067     nb        = npixs;
-<a name="l00068"></a>00068     
-<a name="l00069"></a>00069         <span class="keywordflow">for</span> (j = lly - 1; j < ury; j++, pos += (nx - urx + llx - 1)) {
-<a name="l00070"></a>00070             <span class="keywordflow">for</span> (i = llx - 1; i < urx; i++, pos++) {
-<a name="l00071"></a>00071                 <span class="keywordflow">if</span> (pi[pos] > hi_cut || pi[pos] < lo_cut) {
-<a name="l00072"></a>00072                     <span class="keyword">const</span> <span class="keywordtype">double</span> delta = (double)pi[pos] - c_mean;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074                     c_var_sum  -= nb * delta * delta / (nb - 1.0);
-<a name="l00075"></a>00075                     c_mean     -= delta / (nb - 1.0);
-<a name="l00076"></a>00076                     nb          = nb - 1.0;
-<a name="l00077"></a>00077                 }
-<a name="l00078"></a>00078             }
-<a name="l00079"></a>00079         }
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     <span class="keywordflow">if</span> (nb == 1.0 || c_var_sum < 0.0) {
-<a name="l00082"></a>00082         cpl_msg_error(cpl_func, <span class="stringliteral">"Iteration %d: Too many pixels were "</span>
-<a name="l00083"></a>00083               <span class="stringliteral">"removed. This may cause unexpected behaviour. "</span>
-<a name="l00084"></a>00084               <span class="stringliteral">"Please set a lower number of iterations "</span>
-<a name="l00085"></a>00085                           <span class="stringliteral">"or increase the value of kappa\n"</span>, iclip);
-<a name="l00086"></a>00086         cpl_error_set(cpl_func, CPL_ERROR_DIVISION_BY_ZERO);
-<a name="l00087"></a>00087     } <span class="keywordflow">else</span> {
-<a name="l00088"></a>00088         c_stdev = sqrt(c_var_sum / (nb - 1.0));
-<a name="l00089"></a>00089     }
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     lo_cut = c_mean - kappa * c_stdev;
-<a name="l00092"></a>00092     hi_cut = c_mean + kappa * c_stdev;
-<a name="l00093"></a>00093     
-<a name="l00094"></a>00094         <span class="keywordflow">if</span>(fabs(lo_cut - lo_cut_p) < tolerance &&
-<a name="l00095"></a>00095            fabs(hi_cut - hi_cut_p) < tolerance) {
-<a name="l00096"></a>00096             <span class="keywordflow">break</span>;
-<a name="l00097"></a>00097     } <span class="keywordflow">else</span> {
-<a name="l00098"></a>00098         lo_cut_p = lo_cut;
-<a name="l00099"></a>00099         hi_cut_p = hi_cut;
-<a name="l00100"></a>00100     }
-<a name="l00101"></a>00101     }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103     *mean  = c_mean;
-<a name="l00104"></a>00104     *stdev = c_stdev;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00107"></a>00107 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_ksigma_clip_body.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_ksigma_clip_body.h,v 1.1 2011/11/02 13:18:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2011/11/02 13:18:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#define TYPE_ADD(a) CONCAT2X(a, CPL_TYPE)</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> TYPE_ADD(irplib_ksigma_clip)(<span class="keyword">const</span> CPL_TYPE  * pi,</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>                  <span class="keywordtype">int</span>               llx,</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>                  <span class="keywordtype">int</span>               lly,</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>                  <span class="keywordtype">int</span>               urx,</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>                  <span class="keywordtype">int</span>               ury,</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>                  <span class="keywordtype">int</span>               nx,</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>                  <span class="keywordtype">double</span>            var_sum,</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>                  <span class="keywordtype">int</span>               npixs,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>                  <span class="keywordtype">double</span>            kappa,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>                  <span class="keywordtype">int</span>               nclip,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                  <span class="keywordtype">double</span>            tolerance,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                  <span class="keywordtype">double</span>          * mean,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                  <span class="keywordtype">double</span>          * stdev)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordtype">int</span>    pos0 = (llx - 1) + (lly - 1) * nx; <span class="comment">/* 1st pixel to process */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="keywordtype">double</span> nb   = (double) npixs;             <span class="comment">/* Non-bad pixels in window */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     <span class="keywordtype">double</span> lo_cut    = *mean - kappa * (*stdev);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keywordtype">double</span> hi_cut    = *mean + kappa * (*stdev);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordtype">double</span> lo_cut_p  = lo_cut;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordtype">double</span> hi_cut_p  = hi_cut;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordtype">double</span> c_var_sum;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordtype">double</span> c_mean = 0; <span class="comment">/* Avoid false uninit warning */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordtype">double</span> c_stdev = 0; <span class="comment">/* Avoid false uninit warning */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordtype">int</span>    iclip;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">for</span> (iclip = 0; iclip < nclip; iclip++) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">int</span> pos = pos0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     c_var_sum = var_sum;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     c_mean    = *mean;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     c_stdev   = *stdev;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     nb        = npixs;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordflow">for</span> (j = lly - 1; j < ury; j++, pos += (nx - urx + llx - 1)) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>             <span class="keywordflow">for</span> (i = llx - 1; i < urx; i++, pos++) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                 <span class="keywordflow">if</span> (pi[pos] > hi_cut || pi[pos] < lo_cut) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                     <span class="keyword">const</span> <span class="keywordtype">double</span> delta = (double)pi[pos] - c_mean;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                     c_var_sum  -= nb * delta * delta / (nb - 1.0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                     c_mean     -= delta / (nb - 1.0);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                     nb          = nb - 1.0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                 }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>             }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">if</span> (nb == 1.0 || c_var_sum < 0.0) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Iteration %d: Too many pixels were "</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>               <span class="stringliteral">"removed. This may cause unexpected behaviour. "</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>               <span class="stringliteral">"Please set a lower number of iterations "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                           <span class="stringliteral">"or increase the value of kappa\n"</span>, iclip);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         cpl_error_set(cpl_func, CPL_ERROR_DIVISION_BY_ZERO);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         c_stdev = sqrt(c_var_sum / (nb - 1.0));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     lo_cut = c_mean - kappa * c_stdev;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     hi_cut = c_mean + kappa * c_stdev;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordflow">if</span>(fabs(lo_cut - lo_cut_p) < tolerance &&</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>            fabs(hi_cut - hi_cut_p) < tolerance) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         lo_cut_p = lo_cut;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         hi_cut_p = hi_cut;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     *mean  = c_mean;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     *stdev = c_stdev;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__match__cats_8c_source.html b/html/irplib__match__cats_8c_source.html
index 104ea3d..357d405 100644
--- a/html/irplib__match__cats_8c_source.html
+++ b/html/irplib__match__cats_8c_source.html
@@ -2,200 +2,231 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_match_cats.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_match_cats.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_match_cats.c,v 1.10 2009/12/18 10:44:48 cgarcia Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: cgarcia $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/12/18 10:44:48 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl_table.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_match_cats.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#define FILENAME_SZBUF 1024</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 <span class="comment">/* Private functions</span>
-<a name="l00048"></a>00048 <span class="comment"> */</span>
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 cpl_error_code irplib_match_cats_get_all_matching_pairs
-<a name="l00052"></a>00052 (cpl_table ** catalogues,
-<a name="l00053"></a>00053  <span class="keywordtype">int</span>          ncats,
-<a name="l00054"></a>00054  cpl_table  * matching_sets,
-<a name="l00055"></a>00055  <span class="keywordtype">int</span> (*binary_match_condition)
-<a name="l00056"></a>00056    (cpl_table * catalogue1,
-<a name="l00057"></a>00057     cpl_table * catalogue2,
-<a name="l00058"></a>00058     <span class="keywordtype">int</span>         iobj1,
-<a name="l00059"></a>00059     <span class="keywordtype">int</span>         iobj2)  );
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 cpl_error_code irplib_match_cats_get_all_matches_cresc
-<a name="l00062"></a>00062 (cpl_table ** catalogues,
-<a name="l00063"></a>00063  cpl_array  * cat_index_begin,
-<a name="l00064"></a>00064  cpl_array  * cats_idx_set,
-<a name="l00065"></a>00065  <span class="keywordtype">int</span>          mincat_match,
-<a name="l00066"></a>00066  cpl_table * matching_sets);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 cpl_error_code irplib_match_cats_iterate_on_cat
-<a name="l00069"></a>00069 (cpl_table ** catalogues,
-<a name="l00070"></a>00070  cpl_array  * cats_idx_set,
-<a name="l00071"></a>00071  <span class="keywordtype">int</span>          icat_iterate,
-<a name="l00072"></a>00072  cpl_array  * valid_iobjs,
-<a name="l00073"></a>00073  <span class="keywordtype">int</span>          mincat_match,
-<a name="l00074"></a>00074  cpl_table  * matching_sets,
-<a name="l00075"></a>00075  cpl_table  * less_minmatch_sets);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 cpl_error_code irplib_match_cats_filter_obj_to_iter
-<a name="l00078"></a>00078 (cpl_array * cats_idx_set,
-<a name="l00079"></a>00079  <span class="keywordtype">int</span>         order_begin,
-<a name="l00080"></a>00080  cpl_table * matches_set,
-<a name="l00081"></a>00081  cpl_array * excluded_objs,
-<a name="l00082"></a>00082  <span class="keywordtype">int</span>         itercat_nobj);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="keywordtype">int</span> irplib_match_cats_match_condition
-<a name="l00085"></a>00085 (cpl_table ** catalogues,
-<a name="l00086"></a>00086  <span class="keywordtype">int</span>       *  cats_idx_set_ptr,
-<a name="l00087"></a>00087  <span class="keywordtype">int</span>          ncats);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keywordtype">int</span> irplib_match_count_nonmatched
-<a name="l00090"></a>00090 (<span class="keywordtype">int</span> * cats_idx_set_ptr,
-<a name="l00091"></a>00091  <span class="keywordtype">int</span>   ncats);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keywordtype">int</span> nCombinations;
-<a name="l00094"></a>00094 <span class="keywordtype">int</span> nFilter;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00101"></a>00101 
-<a name="l00104"></a>00104 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00124"></a>00124 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 cpl_table * <a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe" title="Finds all the objects that appear at least in some of the catalogues.">irplib_match_cat_pairs</a>
-<a name="l00126"></a><a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe">00126</a> (cpl_table ** catalogues,
-<a name="l00127"></a>00127  <span class="keywordtype">int</span>          ncats,
-<a name="l00128"></a>00128  <span class="keywordtype">int</span> (*binary_match_condition)
-<a name="l00129"></a>00129    (cpl_table * catalogue1,
-<a name="l00130"></a>00130     cpl_table * catalogue2,
-<a name="l00131"></a>00131     <span class="keywordtype">int</span>         iobj1,
-<a name="l00132"></a>00132     <span class="keywordtype">int</span>         iobj2)  )
-<a name="l00133"></a>00133 {
-<a name="l00134"></a>00134     cpl_table *  matching_sets;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">//Initialize the solution</span>
-<a name="l00137"></a>00137     matching_sets = cpl_table_new(0);
-<a name="l00138"></a>00138     cpl_table_new_column_array(matching_sets, <span class="stringliteral">"MATCHING_SETS"</span>,
-<a name="l00139"></a>00139                                CPL_TYPE_INT, ncats);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     irplib_match_cats_get_all_matching_pairs
-<a name="l00142"></a>00142         (catalogues, ncats, matching_sets, binary_match_condition);
-<a name="l00143"></a>00143     
-<a name="l00144"></a>00144     <span class="keywordflow">return</span> matching_sets;
-<a name="l00145"></a>00145 }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 cpl_error_code irplib_match_cats_get_all_matching_pairs
-<a name="l00148"></a>00148 (cpl_table ** catalogues,
-<a name="l00149"></a>00149  <span class="keywordtype">int</span>          ncats,
-<a name="l00150"></a>00150  cpl_table  * matching_sets,
-<a name="l00151"></a>00151  <span class="keywordtype">int</span> (*binary_match_condition)
-<a name="l00152"></a>00152    (cpl_table * catalogue1,
-<a name="l00153"></a>00153     cpl_table * catalogue2,
-<a name="l00154"></a>00154     <span class="keywordtype">int</span>         iobj1,
-<a name="l00155"></a>00155     <span class="keywordtype">int</span>         iobj2)  )
-<a name="l00156"></a>00156 {
-<a name="l00157"></a>00157     <span class="keywordtype">int</span> icat1;
-<a name="l00158"></a>00158     <span class="keywordtype">int</span> icat2;
-<a name="l00159"></a>00159     
-<a name="l00160"></a>00160     nCombinations = 0;
-<a name="l00161"></a>00161     nFilter = 0;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="keywordflow">for</span>(icat1 = 0; icat1 < ncats ; ++icat1)
-<a name="l00164"></a>00164         <span class="keywordflow">for</span>(icat2 = icat1 + 1 ; icat2 < ncats ; ++icat2)
-<a name="l00165"></a>00165         {
-<a name="l00166"></a>00166             <span class="keywordtype">int</span> iobj1;
-<a name="l00167"></a>00167             <span class="keywordtype">int</span> iobj2;
-<a name="l00168"></a>00168             <span class="keywordtype">int</span> nobj1;
-<a name="l00169"></a>00169             <span class="keywordtype">int</span> nobj2;
-<a name="l00170"></a>00170             
-<a name="l00171"></a>00171             nobj1 = cpl_table_get_nrow(catalogues[icat1]);
-<a name="l00172"></a>00172             nobj2 = cpl_table_get_nrow(catalogues[icat2]);
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174             <span class="keywordflow">for</span>(iobj1 = 0; iobj1 < nobj1 ; ++iobj1)
-<a name="l00175"></a>00175                 <span class="keywordflow">for</span>(iobj2 = 0 ; iobj2 < nobj2 ; ++iobj2)
-<a name="l00176"></a>00176                 {
-<a name="l00177"></a>00177                     ++nCombinations;
-<a name="l00178"></a>00178                     <span class="keywordflow">if</span>(binary_match_condition(catalogues[icat1],
-<a name="l00179"></a>00179                                               catalogues[icat2],
-<a name="l00180"></a>00180                                               iobj1, iobj2))
-<a name="l00181"></a>00181                     {
-<a name="l00182"></a>00182                         cpl_array  * cats_idx_set;
-<a name="l00183"></a>00183                         <span class="keywordtype">int</span>          icat;
-<a name="l00184"></a>00184                         
-<a name="l00185"></a>00185                         ++nFilter;
-<a name="l00186"></a>00186                         cats_idx_set = cpl_array_new(ncats, CPL_TYPE_INT);
-<a name="l00187"></a>00187                         <span class="keywordflow">for</span>(icat = 0; icat < ncats; ++icat)
-<a name="l00188"></a>00188                         {
-<a name="l00189"></a>00189                             <span class="keywordflow">if</span>(icat == icat1)
-<a name="l00190"></a>00190                                 cpl_array_set_int(cats_idx_set, icat, iobj1);
-<a name="l00191"></a>00191                             <span class="keywordflow">else</span> <span class="keywordflow">if</span>(icat == icat2)
-<a name="l00192"></a>00192                                 cpl_array_set_int(cats_idx_set, icat, iobj2);
-<a name="l00193"></a>00193                             <span class="keywordflow">else</span>
-<a name="l00194"></a>00194                                 cpl_array_set_int(cats_idx_set, icat, -1);
-<a name="l00195"></a>00195                         }
-<a name="l00196"></a>00196                         
-<a name="l00197"></a>00197                         cpl_table_set_size(matching_sets,
-<a name="l00198"></a>00198                                            cpl_table_get_nrow(matching_sets)+1);
-<a name="l00199"></a>00199                         cpl_table_set_array(matching_sets,<span class="stringliteral">"MATCHING_SETS"</span>,
-<a name="l00200"></a>00200                                             cpl_table_get_nrow(matching_sets)-1,
-<a name="l00201"></a>00201                                             cats_idx_set);
-<a name="l00202"></a>00202                         cpl_array_delete(cats_idx_set);
-<a name="l00203"></a>00203                     }
-<a name="l00204"></a>00204                 }
-<a name="l00205"></a>00205         }
-<a name="l00206"></a>00206     
-<a name="l00207"></a>00207     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00208"></a>00208 }
-<a name="l00209"></a>00209 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_match_cats.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_match_cats.c,v 1.10 2009/12/18 10:44:48 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/12/18 10:44:48 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl_table.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_match_cats.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define FILENAME_SZBUF 1024</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Private functions</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> cpl_error_code irplib_match_cats_get_all_matching_pairs</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  <span class="keywordtype">int</span>          ncats,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>  cpl_table  * matching_sets,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>  <span class="keywordtype">int</span> (*binary_match_condition)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>    (cpl_table * catalogue1,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     cpl_table * catalogue2,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordtype">int</span>         iobj1,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <span class="keywordtype">int</span>         iobj2)  );</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_error_code irplib_match_cats_get_all_matches_cresc</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>  cpl_array  * cat_index_begin,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>  cpl_array  * cats_idx_set,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>  <span class="keywordtype">int</span>          mincat_match,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>  cpl_table * matching_sets);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> cpl_error_code irplib_match_cats_iterate_on_cat</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>  cpl_array  * cats_idx_set,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>  <span class="keywordtype">int</span>          icat_iterate,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>  cpl_array  * valid_iobjs,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>  <span class="keywordtype">int</span>          mincat_match,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>  cpl_table  * matching_sets,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>  cpl_table  * less_minmatch_sets);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> cpl_error_code irplib_match_cats_filter_obj_to_iter</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> (cpl_array * cats_idx_set,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>  <span class="keywordtype">int</span>         order_begin,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>  cpl_table * matches_set,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>  cpl_array * excluded_objs,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>  <span class="keywordtype">int</span>         itercat_nobj);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keywordtype">int</span> irplib_match_cats_match_condition</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>  <span class="keywordtype">int</span>       *  cats_idx_set_ptr,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>  <span class="keywordtype">int</span>          ncats);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">int</span> irplib_match_count_nonmatched</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> (<span class="keywordtype">int</span> * cats_idx_set_ptr,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  <span class="keywordtype">int</span>   ncats);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">int</span> nCombinations;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keywordtype">int</span> nFilter;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> cpl_table * <a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe" title="Finds all the objects that appear at least in some of the catalogues.">irplib_match_cat_pairs</a></div>
+<div class="line"><a name="l00126"></a><span class="lineno"><a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe">  126</a></span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>  <span class="keywordtype">int</span>          ncats,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>  <span class="keywordtype">int</span> (*binary_match_condition)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    (cpl_table * catalogue1,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     cpl_table * catalogue2,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">int</span>         iobj1,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">int</span>         iobj2)  )</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_table *  matching_sets;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">//Initialize the solution</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     matching_sets = cpl_table_new(0);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_table_new_column_array(matching_sets, <span class="stringliteral">"MATCHING_SETS"</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                                CPL_TYPE_INT, ncats);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     irplib_match_cats_get_all_matching_pairs</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         (catalogues, ncats, matching_sets, binary_match_condition);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">return</span> matching_sets;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> cpl_error_code irplib_match_cats_get_all_matching_pairs</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>  <span class="keywordtype">int</span>          ncats,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>  cpl_table  * matching_sets,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>  <span class="keywordtype">int</span> (*binary_match_condition)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    (cpl_table * catalogue1,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_table * catalogue2,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">int</span>         iobj1,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">int</span>         iobj2)  )</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">int</span> icat1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">int</span> icat2;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     nCombinations = 0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     nFilter = 0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">for</span>(icat1 = 0; icat1 < ncats ; ++icat1)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         <span class="keywordflow">for</span>(icat2 = icat1 + 1 ; icat2 < ncats ; ++icat2)</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>             <span class="keywordtype">int</span> iobj1;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>             <span class="keywordtype">int</span> iobj2;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             <span class="keywordtype">int</span> nobj1;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>             <span class="keywordtype">int</span> nobj2;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             nobj1 = cpl_table_get_nrow(catalogues[icat1]);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>             nobj2 = cpl_table_get_nrow(catalogues[icat2]);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             <span class="keywordflow">for</span>(iobj1 = 0; iobj1 < nobj1 ; ++iobj1)</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                 <span class="keywordflow">for</span>(iobj2 = 0 ; iobj2 < nobj2 ; ++iobj2)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                 {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                     ++nCombinations;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                     <span class="keywordflow">if</span>(binary_match_condition(catalogues[icat1],</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                                               catalogues[icat2],</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                                               iobj1, iobj2))</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                     {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                         cpl_array  * cats_idx_set;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                         <span class="keywordtype">int</span>          icat;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                         </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                         ++nFilter;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                         cats_idx_set = cpl_array_new(ncats, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                         <span class="keywordflow">for</span>(icat = 0; icat < ncats; ++icat)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                         {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                             <span class="keywordflow">if</span>(icat == icat1)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                                 cpl_array_set_int(cats_idx_set, icat, iobj1);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                             <span class="keywordflow">else</span> <span class="keywordflow">if</span>(icat == icat2)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                 cpl_array_set_int(cats_idx_set, icat, iobj2);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                 cpl_array_set_int(cats_idx_set, icat, -1);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                         }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                         </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                         cpl_table_set_size(matching_sets,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                            cpl_table_get_nrow(matching_sets)+1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                         cpl_table_set_array(matching_sets,<span class="stringliteral">"MATCHING_SETS"</span>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                             cpl_table_get_nrow(matching_sets)-1,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                             cats_idx_set);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                         cpl_array_delete(cats_idx_set);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                     }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                 }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__match__cats_8h_source.html b/html/irplib__match__cats_8h_source.html
index 5998857..2ba6d17 100644
--- a/html/irplib__match__cats_8h_source.html
+++ b/html/irplib__match__cats_8h_source.html
@@ -2,61 +2,92 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_match_cats.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_match_cats.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_match_cats.h,v 1.5 2009/12/18 10:44:48 cgarcia Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: cgarcia $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/12/18 10:44:48 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_MATCH_CATS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MATCH_CATS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_table * <a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe" title="Finds all the objects that appear at least in some of the catalogues.">irplib_match_cat_pairs</a>
-<a name="l00038"></a>00038 (cpl_table ** catalogues,
-<a name="l00039"></a>00039  <span class="keywordtype">int</span>          nCats,
-<a name="l00040"></a>00040  <span class="keywordtype">int</span> (*binary_match_condition)
-<a name="l00041"></a>00041    (cpl_table * catalogue1,
-<a name="l00042"></a>00042     cpl_table * catalogue2,
-<a name="l00043"></a>00043     <span class="keywordtype">int</span>         iobj1,
-<a name="l00044"></a>00044     <span class="keywordtype">int</span>         iobj2)  );
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_match_cats.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_match_cats.h,v 1.5 2009/12/18 10:44:48 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/12/18 10:44:48 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_MATCH_CATS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MATCH_CATS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_table * <a class="code" href="group__irplib__cat.html#gaf3dbc2180a59e7187674707510205afe" title="Finds all the objects that appear at least in some of the catalogues.">irplib_match_cat_pairs</a></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> (cpl_table ** catalogues,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>  <span class="keywordtype">int</span>          nCats,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>  <span class="keywordtype">int</span> (*binary_match_condition)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>    (cpl_table * catalogue1,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     cpl_table * catalogue2,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordtype">int</span>         iobj1,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     <span class="keywordtype">int</span>         iobj2)  );</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__mkmaster_8c_source.html b/html/irplib__mkmaster_8c_source.html
index c8a688f..9888d3d 100644
--- a/html/irplib__mkmaster_8c_source.html
+++ b/html/irplib__mkmaster_8c_source.html
@@ -2,484 +2,515 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_mkmaster.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_mkmaster.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_mkmaster.c,v 1.6 2013/02/27 16:00:51 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/02/27 16:00:51 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "irplib_mkmaster.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00047"></a>00047 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 <span class="keyword">static</span> cpl_vector * 
-<a name="l00070"></a>00070 irplib_imagelist_get_clean_mean_levels(<span class="keyword">const</span> cpl_imagelist* iml, 
-<a name="l00071"></a>00071                                        <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, 
-<a name="l00072"></a>00072                                        <span class="keyword">const</span> <span class="keywordtype">int</span> nclip,
-<a name="l00073"></a>00073                                        <span class="keyword">const</span> <span class="keywordtype">double</span> tolerance)
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076    <span class="keyword">const</span> cpl_image* img=NULL;
-<a name="l00077"></a>00077    <span class="keywordtype">int</span> size=0;
-<a name="l00078"></a>00078    <span class="keywordtype">int</span> i=0;
-<a name="l00079"></a>00079    cpl_vector* levels=NULL;
-<a name="l00080"></a>00080    <span class="keywordtype">double</span>* pval=NULL;
-<a name="l00081"></a>00081    <span class="keywordtype">double</span> mean=0;
-<a name="l00082"></a>00082    <span class="keywordtype">double</span> stdev=0;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085    cpl_error_ensure(iml != NULL, CPL_ERROR_NULL_INPUT, <span class="keywordflow">return</span>(levels),
-<a name="l00086"></a>00086                     <span class="stringliteral">"Null input image list"</span>);
-<a name="l00087"></a>00087    cpl_error_ensure(kappa >= 0, CPL_ERROR_ILLEGAL_INPUT, <span class="keywordflow">return</span>(levels), 
-<a name="l00088"></a>00088                     <span class="stringliteral">"Must be kappa>0"</span>);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090    size=cpl_imagelist_get_size(iml);
-<a name="l00091"></a>00091    levels=cpl_vector_new(size);
-<a name="l00092"></a>00092    pval=cpl_vector_get_data(levels);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094    <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00095"></a>00095       img=cpl_imagelist_get_const(iml,i);
-<a name="l00096"></a>00096       irplib_ksigma_clip(img,1,1,
-<a name="l00097"></a>00097                          cpl_image_get_size_x(img),
-<a name="l00098"></a>00098                          cpl_image_get_size_y(img),
-<a name="l00099"></a>00099                          nclip,kappa,tolerance,&mean,&stdev);
-<a name="l00100"></a>00100       cpl_msg_info(cpl_func,<span class="stringliteral">"Ima %d mean level: %g"</span>,i+1,mean);
-<a name="l00101"></a>00101       pval[i]=mean;
-<a name="l00102"></a>00102    }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105    <span class="keywordflow">return</span> levels;
-<a name="l00106"></a>00106 }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00116"></a>00116 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00117"></a>00117 <span class="keyword">static</span> cpl_error_code
-<a name="l00118"></a>00118 irplib_imagelist_subtract_values(cpl_imagelist** iml, cpl_vector* values)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121    cpl_image* img=NULL;
-<a name="l00122"></a>00122    <span class="keywordtype">int</span> size=0;
-<a name="l00123"></a>00123    <span class="keywordtype">int</span> i=0;
-<a name="l00124"></a>00124    <span class="keywordtype">double</span>* pval=NULL;
-<a name="l00125"></a>00125   
-<a name="l00126"></a>00126    size=cpl_imagelist_get_size(*iml);
-<a name="l00127"></a>00127    pval=cpl_vector_get_data(values);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129    <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00130"></a>00130       img=cpl_imagelist_get(*iml,i);
-<a name="l00131"></a>00131       cpl_image_subtract_scalar(img,pval[i]);
-<a name="l00132"></a>00132       cpl_imagelist_set(*iml,img,i);
-<a name="l00133"></a>00133    }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135    <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00136"></a>00136 }
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00151"></a>00151 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00153"></a>00153 irplib_vector_ksigma(cpl_vector *values,
-<a name="l00154"></a>00154                      <span class="keyword">const</span> <span class="keywordtype">double</span> klow, <span class="keyword">const</span> <span class="keywordtype">double</span> khigh, <span class="keywordtype">int</span> kiter)
-<a name="l00155"></a>00155 {
-<a name="l00156"></a>00156    cpl_vector *accepted;
-<a name="l00157"></a>00157    <span class="keywordtype">double</span>  mean  = 0.0;
-<a name="l00158"></a>00158    <span class="keywordtype">double</span>  sigma = 0.0;
-<a name="l00159"></a>00159    <span class="keywordtype">double</span> *data  = cpl_vector_get_data(values);
-<a name="l00160"></a>00160    <span class="keywordtype">int</span>     n     = cpl_vector_get_size(values);
-<a name="l00161"></a>00161    <span class="keywordtype">int</span>     ngood = n;
-<a name="l00162"></a>00162    <span class="keywordtype">int</span>     count = 0;
-<a name="l00163"></a>00163    <span class="keywordtype">int</span>     i;
-<a name="l00164"></a>00164  
-<a name="l00165"></a>00165    <span class="comment">/*</span>
-<a name="l00166"></a>00166 <span class="comment">    * At first iteration the mean is taken as the median, and the</span>
-<a name="l00167"></a>00167 <span class="comment">    * standard deviation relative to this value is computed.</span>
-<a name="l00168"></a>00168 <span class="comment">    */</span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170    mean = cpl_vector_get_median(values);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172    <span class="keywordflow">for</span> (i = 0; i < n; i++) {
-<a name="l00173"></a>00173       sigma += (mean - data[i]) * (mean - data[i]);
-<a name="l00174"></a>00174    }
-<a name="l00175"></a>00175    sigma = sqrt(sigma / (n - 1));
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177    <span class="keywordflow">while</span> (kiter) {
-<a name="l00178"></a>00178       count = 0;
-<a name="l00179"></a>00179       <span class="keywordflow">for</span> (i = 0; i < ngood; i++) {
-<a name="l00180"></a>00180          <span class="keywordflow">if</span> (data[i]-mean < khigh*sigma && mean-data[i] < klow*sigma) {
-<a name="l00181"></a>00181             data[count] = data[i];
-<a name="l00182"></a>00182             ++count;
-<a name="l00183"></a>00183          }
-<a name="l00184"></a>00184       }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186       <span class="keywordflow">if</span> (count == 0) <span class="comment">// This cannot happen at first iteration.</span>
-<a name="l00187"></a>00187          <span class="keywordflow">break</span>;      <span class="comment">// So we can break: we have already computed a mean.</span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189       <span class="comment">/*</span>
-<a name="l00190"></a>00190 <span class="comment">       * The mean must be computed even if no element was rejected</span>
-<a name="l00191"></a>00191 <span class="comment">       * (count == ngood), because at first iteration median instead</span>
-<a name="l00192"></a>00192 <span class="comment">       * of mean was computed.</span>
-<a name="l00193"></a>00193 <span class="comment">       */</span>
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195       accepted = cpl_vector_wrap(count, data);
-<a name="l00196"></a>00196       mean = cpl_vector_get_mean(accepted);
-<a name="l00197"></a>00197       <span class="keywordflow">if</span>(count>1) {
-<a name="l00198"></a>00198          sigma = cpl_vector_get_stdev(accepted);
-<a name="l00199"></a>00199       }
-<a name="l00200"></a>00200       cpl_vector_unwrap(accepted);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202       <span class="keywordflow">if</span> (count == ngood) {
-<a name="l00203"></a>00203          <span class="keywordflow">break</span>;
-<a name="l00204"></a>00204       }
-<a name="l00205"></a>00205       ngood = count;
-<a name="l00206"></a>00206       --kiter;
-<a name="l00207"></a>00207    }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209    <span class="keywordflow">return</span> mean;
-<a name="l00210"></a>00210 }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 
-<a name="l00231"></a>00231 <span class="keyword">static</span> cpl_image *
-<a name="l00232"></a>00232 irplib_imagelist_ksigma_stack(<span class="keyword">const</span> cpl_imagelist *imlist, 
-<a name="l00233"></a>00233                               <span class="keywordtype">double</span> klow, <span class="keywordtype">double</span> khigh, <span class="keywordtype">int</span> kiter)
-<a name="l00234"></a>00234 {
-<a name="l00235"></a>00235    <span class="keywordtype">int</span>         ni, nx, ny, npix;
-<a name="l00236"></a>00236    cpl_image  *out_ima=NULL;
-<a name="l00237"></a>00237    cpl_imagelist  *loc_iml=NULL;
-<a name="l00238"></a>00238    <span class="keywordtype">double</span>      *pout_ima=NULL;
-<a name="l00239"></a>00239    cpl_image  *image=NULL;
-<a name="l00240"></a>00240    <span class="keyword">const</span> <span class="keywordtype">double</span>     **data=NULL;
-<a name="l00241"></a>00241    <span class="keywordtype">double</span>     *med=NULL;
-<a name="l00242"></a>00242    cpl_vector *time_line=NULL;
-<a name="l00243"></a>00243   
-<a name="l00244"></a>00244    <span class="keywordtype">double</span>     *ptime_line=NULL;
-<a name="l00245"></a>00245    <span class="keywordtype">int</span>         i, j;
-<a name="l00246"></a>00246    <span class="keywordtype">double</span> mean_of_medians=0;
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248    cpl_error_ensure(imlist != NULL, CPL_ERROR_NULL_INPUT, <span class="keywordflow">return</span>(out_ima),
-<a name="l00249"></a>00249                     <span class="stringliteral">"Null input image list"</span>);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251    ni         = cpl_imagelist_get_size(imlist);
-<a name="l00252"></a>00252    loc_iml        = cpl_imagelist_duplicate(imlist);
-<a name="l00253"></a>00253    image      = cpl_imagelist_get(loc_iml, 0);
-<a name="l00254"></a>00254    nx         = cpl_image_get_size_x(image);
-<a name="l00255"></a>00255    ny         = cpl_image_get_size_y(image);
-<a name="l00256"></a>00256    npix       = nx * ny;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258    out_ima    = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE);
-<a name="l00259"></a>00259    pout_ima   = cpl_image_get_data_double(out_ima);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261    time_line  = cpl_vector_new(ni);
-<a name="l00262"></a>00262    
-<a name="l00263"></a>00263    ptime_line = cpl_vector_get_data(time_line);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265    data = cpl_calloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> *), ni);
-<a name="l00266"></a>00266    med  = cpl_calloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), ni);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268    <span class="keywordflow">for</span> (i = 0; i < ni; i++) {
-<a name="l00269"></a>00269       image = cpl_imagelist_get(loc_iml, i);
-<a name="l00270"></a>00270       med[i]=cpl_image_get_median(image);
-<a name="l00271"></a>00271       cpl_image_subtract_scalar(image,med[i]);
-<a name="l00272"></a>00272       data[i] = cpl_image_get_data_double(image);
-<a name="l00273"></a>00273       mean_of_medians+=med[i];
-<a name="l00274"></a>00274    }
-<a name="l00275"></a>00275    mean_of_medians/=ni;
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277    <span class="keywordflow">for</span> (i = 0; i < npix; i++) {
-<a name="l00278"></a>00278       <span class="keywordflow">for</span> (j = 0; j < ni; j++) {
-<a name="l00279"></a>00279          ptime_line[j] = data[j][i];
-<a name="l00280"></a>00280       }
-<a name="l00281"></a>00281       pout_ima[i] = irplib_vector_ksigma(time_line, klow, khigh, kiter); 
-<a name="l00282"></a>00282    }
-<a name="l00283"></a>00283  
-<a name="l00284"></a>00284    cpl_image_add_scalar(out_ima,mean_of_medians);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286  
-<a name="l00287"></a>00287    cpl_free(data);
-<a name="l00288"></a>00288    cpl_free(med);
-<a name="l00289"></a>00289    cpl_vector_delete(time_line);
-<a name="l00290"></a>00290    cpl_imagelist_delete(loc_iml);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292    <span class="keywordflow">return</span> out_ima;
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 } 
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00311"></a>00311 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00312"></a>00312 cpl_image*
-<a name="l00313"></a><a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b">00313</a> <a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b" title="Computes master frame by clean stack mean of the input imagelist.">irplib_mkmaster_mean</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span class [...]
-<a name="l00314"></a>00314 {
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316    cpl_image* master=NULL;
-<a name="l00317"></a>00317    cpl_vector* levels=NULL;
-<a name="l00318"></a>00318    <span class="keywordtype">double</span> mean=0;
-<a name="l00319"></a>00319    cpl_imagelist* iml=NULL;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321    cpl_msg_info(cpl_func,<span class="stringliteral">"method mean"</span>);
-<a name="l00322"></a>00322    iml=cpl_imagelist_duplicate(images);
-<a name="l00323"></a>00323    levels=irplib_imagelist_get_clean_mean_levels(iml,kappa,nclip,tolerance);
-<a name="l00324"></a>00324    mean=cpl_vector_get_mean(levels);
-<a name="l00325"></a>00325    cpl_msg_info(cpl_func,<span class="stringliteral">"Master mean level: %g"</span>,mean);
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327    irplib_imagelist_subtract_values(&iml,levels);
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329    master = irplib_imagelist_ksigma_stack(iml,klow,khigh,niter);
-<a name="l00330"></a>00330    cpl_image_add_scalar(master,mean);
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332    cpl_vector_delete(levels);
-<a name="l00333"></a>00333    cpl_imagelist_delete(iml);
-<a name="l00334"></a>00334    <span class="keywordflow">return</span> master;
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 }
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00350"></a>00350 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00351"></a>00351 cpl_image* 
-<a name="l00352"></a><a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2">00352</a> <a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2" title="Computes master frame by clean stack median of the input imagelist.">irplib_mkmaster_median</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span c [...]
-<a name="l00353"></a>00353 {
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355    cpl_image* master=NULL;
-<a name="l00356"></a>00356    cpl_vector* levels=NULL;
-<a name="l00357"></a>00357    <span class="keywordtype">double</span> mean=0;
-<a name="l00358"></a>00358    cpl_imagelist* iml=NULL;
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360    cpl_msg_info(cpl_func,<span class="stringliteral">"method median"</span>);
-<a name="l00361"></a>00361    iml=cpl_imagelist_duplicate(images);
-<a name="l00362"></a>00362    levels=irplib_imagelist_get_clean_mean_levels(iml,kappa,nclip,tolerance);
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364    mean=cpl_vector_get_mean(levels);
-<a name="l00365"></a>00365    cpl_msg_info(cpl_func,<span class="stringliteral">"Master mean level: %g"</span>,mean);
-<a name="l00366"></a>00366    irplib_imagelist_subtract_values(&iml,levels);
-<a name="l00367"></a>00367        
-<a name="l00368"></a>00368    master = cpl_imagelist_collapse_median_create(iml);
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370    cpl_image_add_scalar(master,mean);
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372    cpl_vector_delete(levels);
-<a name="l00373"></a>00373    cpl_imagelist_delete(iml);
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375    <span class="keywordflow">return</span> master;
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377 }
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379 <span class="comment">/* Work in progress */</span>
-<a name="l00380"></a>00380 <span class="keyword">static</span> cpl_error_code
-<a name="l00381"></a>00381 irplib_mkmaster_dark_qc(<span class="keyword">const</span> cpl_imagelist* raw_images,
-<a name="l00382"></a>00382     cpl_imagelist* preproc_images,
-<a name="l00383"></a>00383     <span class="keyword">const</span> cpl_parameterlist* parameters,
-<a name="l00384"></a>00384      <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,
-<a name="l00385"></a>00385     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy, <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,
-<a name="l00386"></a>00386     cpl_table* qclog) {
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388    cpl_ensure_code(qclog !=NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00389"></a>00389    cpl_ensure_code(recipe_id !=NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00390"></a>00390    cpl_ensure_code(parameters !=NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392   <span class="keywordtype">int</span> i = 0;
-<a name="l00393"></a>00393   cpl_image* current_dark = 0;
-<a name="l00394"></a>00394   <span class="keywordflow">if</span> (pr_num_x != 0 && pr_num_y != 0 && pr_box_sx != 0 && pr_box_sy != 0) {
-<a name="l00395"></a>00395     <span class="keywordflow">for</span> (i = 0; i < cpl_imagelist_get_size(raw_images); i++) {
-<a name="l00396"></a>00396       current_dark = cpl_image_duplicate(
-<a name="l00397"></a>00397           cpl_imagelist_get_const(preproc_images, i));
-<a name="l00398"></a>00398       cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating QC parameters on raw dark frame %d"</span>,
-<a name="l00399"></a>00399           i);
-<a name="l00400"></a>00400       <span class="comment">/* Here To be defined more general way to qc-log */</span>
-<a name="l00401"></a>00401        <span class="comment">/* UVES specific stuff: may be this function should not be put in irplib</span>
-<a name="l00402"></a>00402 <span class="comment">      irplib_mdark_region_qc(current_dark, parameters, raw_images, recipe_id,qclog);</span>
-<a name="l00403"></a>00403 <span class="comment">       */</span>    
-<a name="l00404"></a>00404       <span class="comment">/* FIXME: still safe if irplib_mdark_region_qc is commented in? */</span>
-<a name="l00405"></a>00405       cpl_image_delete(current_dark);
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407   }
-<a name="l00408"></a>00408   <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00409"></a>00409 }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00421"></a>00421 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00422"></a>00422 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00423"></a>00423 irplib_head_get_exptime(<span class="keyword">const</span> cpl_propertylist * plist) {
-<a name="l00424"></a>00424   <span class="keywordtype">double</span> result = 0; <span class="comment">/* Conversion from electrons to ADUs */</span>
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426   result=cpl_propertylist_get_double(plist, <span class="stringliteral">"EXPTIME"</span>);
-<a name="l00427"></a>00427   cpl_ensure_code(result >= 0, CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429   <span class="keywordflow">return</span> result;
-<a name="l00430"></a>00430 }
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00440"></a>00440 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00441"></a>00441 <span class="keyword">static</span> cpl_error_code
-<a name="l00442"></a>00442 irplib_head_set_exptime(cpl_propertylist *plist, <span class="keywordtype">double</span> exptime)
-<a name="l00443"></a>00443 {
-<a name="l00444"></a>00444    cpl_propertylist_update_double(plist, <span class="stringliteral">"EXPTIME"</span>, exptime);
-<a name="l00445"></a>00445    cpl_propertylist_set_comment(plist, <span class="stringliteral">"EXPTIME"</span>, <span class="stringliteral">"Total integration time"</span>);
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00448"></a>00448 }
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 <span class="keyword">static</span> cpl_imagelist*
-<a name="l00451"></a>00451 irplib_mkmaster_dark_fill_imagelist(<span class="keyword">const</span> cpl_imagelist* raw_images,
-<a name="l00452"></a>00452     cpl_propertylist** raw_headers, <span class="keyword">const</span> cpl_image* master_bias,
-<a name="l00453"></a>00453     <span class="keywordtype">double</span>* mean_exptime) {
-<a name="l00454"></a>00454   <span class="comment">/* First process each input image and store the results in a</span>
-<a name="l00455"></a>00455 <span class="comment">   new image list */</span>
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457   cpl_imagelist* preproc_images = NULL;
-<a name="l00458"></a>00458   <span class="keywordtype">int</span> i = 0;
-<a name="l00459"></a>00459   cpl_image* current_dark = NULL;
-<a name="l00460"></a>00460   <span class="keywordtype">double</span> min_exptime = 0;
-<a name="l00461"></a>00461   <span class="keywordtype">double</span> max_exptime = 0;
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463   preproc_images = cpl_imagelist_new();
-<a name="l00464"></a>00464   <span class="keywordflow">for</span> (i = 0; i < cpl_imagelist_get_size(raw_images); i++) {
-<a name="l00465"></a>00465     <span class="keywordtype">double</span> exposure_time = 0.0;
-<a name="l00466"></a>00466     <span class="keyword">const</span> cpl_propertylist *current_header;
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468     current_dark = cpl_image_duplicate(cpl_imagelist_get_const(raw_images, i));
-<a name="l00469"></a>00469     current_header = raw_headers[i];
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471     <span class="comment">/* Subtract master bias */</span>
-<a name="l00472"></a>00472     <span class="keywordflow">if</span> (master_bias != NULL) {
-<a name="l00473"></a>00473       cpl_msg_info(cpl_func, <span class="stringliteral">"Subtracting master bias"</span>);
-<a name="l00474"></a>00474       cpl_image_subtract(current_dark, master_bias);
-<a name="l00475"></a>00475     } <span class="keywordflow">else</span> {
-<a name="l00476"></a>00476       cpl_msg_info(cpl_func, <span class="stringliteral">"Skipping bias subtraction"</span>);
-<a name="l00477"></a>00477     }
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479     exposure_time = irplib_head_get_exptime(current_header);
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481     <span class="comment">/* Initialize/update min/max exposure time*/</span>
-<a name="l00482"></a>00482     <span class="keywordflow">if</span> (i == 0 || exposure_time < min_exptime) {
-<a name="l00483"></a>00483       min_exptime = exposure_time;
-<a name="l00484"></a>00484     }
-<a name="l00485"></a>00485     <span class="keywordflow">if</span> (i == 0 || exposure_time > max_exptime) {
-<a name="l00486"></a>00486       max_exptime = exposure_time;
-<a name="l00487"></a>00487     }
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489     <span class="comment">/* Do not normalize to unit exposure time */</span>
-<a name="l00490"></a>00490     <span class="comment">/*        If this is uncommented, then remember to also calculate the</span>
-<a name="l00491"></a>00491 <span class="comment">     correct master dark exposure time below.</span>
-<a name="l00492"></a>00492 <span class="comment">     irplib_msg("Normalizing from %f s to unit exposure time", exposure_time);</span>
-<a name="l00493"></a>00493 <span class="comment">     check( cpl_image_divide_scalar(current_dark, exposure_time),</span>
-<a name="l00494"></a>00494 <span class="comment">     "Error normalizing dark frame");   */</span>
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496     <span class="comment">/* Append to imagelist */</span>
-<a name="l00497"></a>00497     cpl_imagelist_set(preproc_images, current_dark, i);
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499     <span class="comment">/* Don't deallocate the image. It will be deallocated when</span>
-<a name="l00500"></a>00500 <span class="comment">     the image list is deallocated */</span>
-<a name="l00501"></a>00501     current_dark = NULL;
-<a name="l00502"></a>00502   }
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505   <span class="comment">/* Check exposure times */</span>
-<a name="l00506"></a>00506    cpl_msg_info(cpl_func,
-<a name="l00507"></a>00507        <span class="stringliteral">"Exposure times range from %e s to %e s (%e %% variation)"</span>, min_exptime,
-<a name="l00508"></a>00508        max_exptime, 100 * (max_exptime - min_exptime) / min_exptime);
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510    <span class="keywordflow">if</span> ((max_exptime - min_exptime) / min_exptime > .001) {
-<a name="l00511"></a>00511      cpl_msg_warning(cpl_func, <span class="stringliteral">"Exposure times differ by %e %%"</span>,
-<a name="l00512"></a>00512          100 * (max_exptime - min_exptime) / min_exptime);
-<a name="l00513"></a>00513    }
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515    <span class="comment">/* compute correct exposure time */</span>
-<a name="l00516"></a>00516    *mean_exptime=0.5 * (max_exptime + min_exptime);
-<a name="l00517"></a>00517   <span class="keywordflow">return</span> preproc_images;
-<a name="l00518"></a>00518 }
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521 cpl_image *
-<a name="l00522"></a>00522 irplib_mdark_process_chip(<span class="keyword">const</span> cpl_imagelist *raw_images,
-<a name="l00523"></a>00523     cpl_propertylist **raw_headers, <span class="keyword">const</span> cpl_image *master_bias,
-<a name="l00524"></a>00524     cpl_propertylist *mdark_header, <span class="keyword">const</span> cpl_parameterlist *parameters,
-<a name="l00525"></a>00525     <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id, cpl_table* qclog, <span class="keyword">const</span> <span class="keywordtype">int</span> do_qc,
-<a name="l00526"></a>00526     <span class="keyword">const</span> <span class="keywordtype">char</span>* STACK_METHOD, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KLOW, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KHIGH,
-<a name="l00527"></a>00527     <span class="keyword">const</span> <span class="keywordtype">int</span> STACK_NITER,
-<a name="l00528"></a>00528     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,
-<a name="l00529"></a>00529     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy) {
-<a name="l00530"></a>00530   cpl_image *master_dark = NULL; <span class="comment">/* Result */</span>
-<a name="l00531"></a>00531   cpl_image *current_dark = NULL;
-<a name="l00532"></a>00532   cpl_imagelist *preproc_images = NULL;
-<a name="l00533"></a>00533   <span class="keywordtype">double</span> mean_exptime = 0;
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535   <span class="comment">/* First process each input image and store the results in a</span>
-<a name="l00536"></a>00536 <span class="comment">   new image list */</span>
-<a name="l00537"></a>00537   preproc_images = irplib_mkmaster_dark_fill_imagelist(raw_images, raw_headers,
-<a name="l00538"></a>00538       master_bias, &mean_exptime);
-<a name="l00539"></a>00539   <span class="keywordflow">if</span> (do_qc) {
-<a name="l00540"></a>00540      <span class="comment">/* Here we should compute QC but a a better way to log it is TBD  */</span>
-<a name="l00541"></a>00541     irplib_mkmaster_dark_qc(raw_images, preproc_images, parameters, pr_num_x,
-<a name="l00542"></a>00542         pr_num_y, pr_box_sx, pr_box_sy, recipe_id, qclog);
-<a name="l00543"></a>00543      
-<a name="l00544"></a>00544   }
-<a name="l00545"></a>00545   <span class="comment">/* Get median stack of input darks */</span>
-<a name="l00546"></a>00546   <span class="keywordflow">if</span> (strcmp(STACK_METHOD, <span class="stringliteral">"MEDIAN"</span>) == 0) {
-<a name="l00547"></a>00547     cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating stack median"</span>);
-<a name="l00548"></a>00548     master_dark = cpl_imagelist_collapse_median_create(preproc_images);
-<a name="l00549"></a>00549   } <span class="keywordflow">else</span> {
-<a name="l00550"></a>00550     cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating stack mean"</span>);
-<a name="l00551"></a>00551     master_dark = irplib_imagelist_ksigma_stack(preproc_images, STACK_KLOW,
-<a name="l00552"></a>00552         STACK_KHIGH, STACK_NITER);
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554   }
-<a name="l00555"></a>00555   irplib_head_set_exptime(mdark_header, mean_exptime );
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557   cpl_image_delete(current_dark);
-<a name="l00558"></a>00558   cpl_imagelist_delete(preproc_images);
-<a name="l00559"></a>00559   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00560"></a>00560     cpl_image_delete(master_dark);
-<a name="l00561"></a>00561   }
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563   <span class="keywordflow">return</span> master_dark;
-<a name="l00564"></a>00564 }
-<a name="l00565"></a>00565 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_mkmaster.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_mkmaster.c,v 1.6 2013/02/27 16:00:51 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/02/27 16:00:51 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "irplib_mkmaster.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> cpl_vector * </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> irplib_imagelist_get_clean_mean_levels(<span class="keyword">const</span> cpl_imagelist* iml, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                        <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                        <span class="keyword">const</span> <span class="keywordtype">int</span> nclip,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                        <span class="keyword">const</span> <span class="keywordtype">double</span> tolerance)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>    <span class="keyword">const</span> cpl_image* img=NULL;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>    <span class="keywordtype">int</span> size=0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>    cpl_vector* levels=NULL;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>    <span class="keywordtype">double</span>* pval=NULL;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>    <span class="keywordtype">double</span> stdev=0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>    cpl_error_ensure(iml != NULL, CPL_ERROR_NULL_INPUT, <span class="keywordflow">return</span>(levels),</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                     <span class="stringliteral">"Null input image list"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>    cpl_error_ensure(kappa >= 0, CPL_ERROR_ILLEGAL_INPUT, <span class="keywordflow">return</span>(levels), </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                     <span class="stringliteral">"Must be kappa>0"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    size=cpl_imagelist_get_size(iml);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>    levels=cpl_vector_new(size);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>    pval=cpl_vector_get_data(levels);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>    <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>       img=cpl_imagelist_get_const(iml,i);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       irplib_ksigma_clip(img,1,1,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                          cpl_image_get_size_x(img),</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                          cpl_image_get_size_y(img),</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                          nclip,kappa,tolerance,&mean,&stdev);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       cpl_msg_info(cpl_func,<span class="stringliteral">"Ima %d mean level: %g"</span>,i+1,mean);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       pval[i]=mean;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="keywordflow">return</span> levels;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> irplib_imagelist_subtract_values(cpl_imagelist** iml, cpl_vector* values)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    cpl_image* img=NULL;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span> size=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">double</span>* pval=NULL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    size=cpl_imagelist_get_size(*iml);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    pval=cpl_vector_get_data(values);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       img=cpl_imagelist_get(*iml,i);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       cpl_image_subtract_scalar(img,pval[i]);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       cpl_imagelist_set(*iml,img,i);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> irplib_vector_ksigma(cpl_vector *values,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> klow, <span class="keyword">const</span> <span class="keywordtype">double</span> khigh, <span class="keywordtype">int</span> kiter)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    cpl_vector *accepted;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>    <span class="keywordtype">double</span>  mean  = 0.0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    <span class="keywordtype">double</span>  sigma = 0.0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    <span class="keywordtype">double</span> *data  = cpl_vector_get_data(values);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    <span class="keywordtype">int</span>     n     = cpl_vector_get_size(values);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    <span class="keywordtype">int</span>     ngood = n;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>    <span class="keywordtype">int</span>     count = 0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    <span class="keywordtype">int</span>     i;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">    * At first iteration the mean is taken as the median, and the</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">    * standard deviation relative to this value is computed.</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    mean = cpl_vector_get_median(values);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    <span class="keywordflow">for</span> (i = 0; i < n; i++) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       sigma += (mean - data[i]) * (mean - data[i]);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>    }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    sigma = sqrt(sigma / (n - 1));</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>    <span class="keywordflow">while</span> (kiter) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       count = 0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       <span class="keywordflow">for</span> (i = 0; i < ngood; i++) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>          <span class="keywordflow">if</span> (data[i]-mean < khigh*sigma && mean-data[i] < klow*sigma) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>             data[count] = data[i];</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>             ++count;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>          }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       <span class="keywordflow">if</span> (count == 0) <span class="comment">// This cannot happen at first iteration.</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>          <span class="keywordflow">break</span>;      <span class="comment">// So we can break: we have already computed a mean.</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">       * The mean must be computed even if no element was rejected</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">       * (count == ngood), because at first iteration median instead</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">       * of mean was computed.</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       accepted = cpl_vector_wrap(count, data);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       mean = cpl_vector_get_mean(accepted);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       <span class="keywordflow">if</span>(count>1) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>          sigma = cpl_vector_get_stdev(accepted);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       cpl_vector_unwrap(accepted);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       <span class="keywordflow">if</span> (count == ngood) {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       ngood = count;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       --kiter;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    <span class="keywordflow">return</span> mean;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> irplib_imagelist_ksigma_stack(<span class="keyword">const</span> cpl_imagelist *imlist, </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                               <span class="keywordtype">double</span> klow, <span class="keywordtype">double</span> khigh, <span class="keywordtype">int</span> kiter)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    <span class="keywordtype">int</span>         ni, nx, ny, npix;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    cpl_image  *out_ima=NULL;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    cpl_imagelist  *loc_iml=NULL;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    <span class="keywordtype">double</span>      *pout_ima=NULL;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>    cpl_image  *image=NULL;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    <span class="keyword">const</span> <span class="keywordtype">double</span>     **data=NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    <span class="keywordtype">double</span>     *med=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    cpl_vector *time_line=NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    <span class="keywordtype">double</span>     *ptime_line=NULL;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>    <span class="keywordtype">int</span>         i, j;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    <span class="keywordtype">double</span> mean_of_medians=0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    cpl_error_ensure(imlist != NULL, CPL_ERROR_NULL_INPUT, <span class="keywordflow">return</span>(out_ima),</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                     <span class="stringliteral">"Null input image list"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    ni         = cpl_imagelist_get_size(imlist);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    loc_iml        = cpl_imagelist_duplicate(imlist);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>    image      = cpl_imagelist_get(loc_iml, 0);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    nx         = cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>    ny         = cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>    npix       = nx * ny;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>    out_ima    = cpl_image_new(nx, ny, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    pout_ima   = cpl_image_get_data_double(out_ima);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>    time_line  = cpl_vector_new(ni);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    ptime_line = cpl_vector_get_data(time_line);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    data = cpl_calloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span> *), ni);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    med  = cpl_calloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>), ni);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    <span class="keywordflow">for</span> (i = 0; i < ni; i++) {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       image = cpl_imagelist_get(loc_iml, i);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       med[i]=cpl_image_get_median(image);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       cpl_image_subtract_scalar(image,med[i]);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       data[i] = cpl_image_get_data_double(image);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       mean_of_medians+=med[i];</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    mean_of_medians/=ni;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    <span class="keywordflow">for</span> (i = 0; i < npix; i++) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>       <span class="keywordflow">for</span> (j = 0; j < ni; j++) {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>          ptime_line[j] = data[j][i];</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       pout_ima[i] = irplib_vector_ksigma(time_line, klow, khigh, kiter); </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>    }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>  </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    cpl_image_add_scalar(out_ima,mean_of_medians);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>  </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>    cpl_free(data);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>    cpl_free(med);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    cpl_vector_delete(time_line);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>    cpl_imagelist_delete(loc_iml);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    <span class="keywordflow">return</span> out_ima;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> } </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> cpl_image*</div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b">  313</a></span> <a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b" title="Computes master frame by clean stack mean of the input imagelist.">irplib_mkmaster_mean</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <spa [...]
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>    cpl_image* master=NULL;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>    cpl_vector* levels=NULL;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>    cpl_imagelist* iml=NULL;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    cpl_msg_info(cpl_func,<span class="stringliteral">"method mean"</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    iml=cpl_imagelist_duplicate(images);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>    levels=irplib_imagelist_get_clean_mean_levels(iml,kappa,nclip,tolerance);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>    mean=cpl_vector_get_mean(levels);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>    cpl_msg_info(cpl_func,<span class="stringliteral">"Master mean level: %g"</span>,mean);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>    irplib_imagelist_subtract_values(&iml,levels);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>    master = irplib_imagelist_ksigma_stack(iml,klow,khigh,niter);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>    cpl_image_add_scalar(master,mean);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>    cpl_vector_delete(levels);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>    cpl_imagelist_delete(iml);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    <span class="keywordflow">return</span> master;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> cpl_image* </div>
+<div class="line"><a name="l00352"></a><span class="lineno"><a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2">  352</a></span> <a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2" title="Computes master frame by clean stack median of the input imagelist.">irplib_mkmaster_median</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span>  [...]
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>    cpl_image* master=NULL;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    cpl_vector* levels=NULL;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>    cpl_imagelist* iml=NULL;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>    cpl_msg_info(cpl_func,<span class="stringliteral">"method median"</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>    iml=cpl_imagelist_duplicate(images);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>    levels=irplib_imagelist_get_clean_mean_levels(iml,kappa,nclip,tolerance);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>    mean=cpl_vector_get_mean(levels);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>    cpl_msg_info(cpl_func,<span class="stringliteral">"Master mean level: %g"</span>,mean);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>    irplib_imagelist_subtract_values(&iml,levels);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>        </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>    master = cpl_imagelist_collapse_median_create(iml);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>    cpl_image_add_scalar(master,mean);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>    cpl_vector_delete(levels);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>    cpl_imagelist_delete(iml);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>    <span class="keywordflow">return</span> master;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> }</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">/* Work in progress */</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> irplib_mkmaster_dark_qc(<span class="keyword">const</span> cpl_imagelist* raw_images,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     cpl_imagelist* preproc_images,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keyword">const</span> cpl_parameterlist* parameters,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>      <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy, <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     cpl_table* qclog) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>    cpl_ensure_code(qclog !=NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>    cpl_ensure_code(recipe_id !=NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>    cpl_ensure_code(parameters !=NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   cpl_image* current_dark = 0;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">if</span> (pr_num_x != 0 && pr_num_y != 0 && pr_box_sx != 0 && pr_box_sy != 0) {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">for</span> (i = 0; i < cpl_imagelist_get_size(raw_images); i++) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       current_dark = cpl_image_duplicate(</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>           cpl_imagelist_get_const(preproc_images, i));</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating QC parameters on raw dark frame %d"</span>,</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>           i);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       <span class="comment">/* Here To be defined more general way to qc-log */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>        <span class="comment">/* UVES specific stuff: may be this function should not be put in irplib</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment">      irplib_mdark_region_qc(current_dark, parameters, raw_images, recipe_id,qclog);</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">       */</span>    </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>       <span class="comment">/* FIXME: still safe if irplib_mdark_region_qc is commented in? */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       cpl_image_delete(current_dark);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> irplib_head_get_exptime(<span class="keyword">const</span> cpl_propertylist * plist) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   <span class="keywordtype">double</span> result = 0; <span class="comment">/* Conversion from electrons to ADUs */</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   result=cpl_propertylist_get_double(plist, <span class="stringliteral">"EXPTIME"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   cpl_ensure_code(result >= 0, CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> irplib_head_set_exptime(cpl_propertylist *plist, <span class="keywordtype">double</span> exptime)</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>    cpl_propertylist_update_double(plist, <span class="stringliteral">"EXPTIME"</span>, exptime);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>    cpl_propertylist_set_comment(plist, <span class="stringliteral">"EXPTIME"</span>, <span class="stringliteral">"Total integration time"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="keyword">static</span> cpl_imagelist*</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> irplib_mkmaster_dark_fill_imagelist(<span class="keyword">const</span> cpl_imagelist* raw_images,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     cpl_propertylist** raw_headers, <span class="keyword">const</span> cpl_image* master_bias,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="keywordtype">double</span>* mean_exptime) {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="comment">/* First process each input image and store the results in a</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment">   new image list */</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   cpl_imagelist* preproc_images = NULL;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   cpl_image* current_dark = NULL;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   <span class="keywordtype">double</span> min_exptime = 0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="keywordtype">double</span> max_exptime = 0;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   preproc_images = cpl_imagelist_new();</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   <span class="keywordflow">for</span> (i = 0; i < cpl_imagelist_get_size(raw_images); i++) {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     <span class="keywordtype">double</span> exposure_time = 0.0;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="keyword">const</span> cpl_propertylist *current_header;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     current_dark = cpl_image_duplicate(cpl_imagelist_get_const(raw_images, i));</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     current_header = raw_headers[i];</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="comment">/* Subtract master bias */</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="keywordflow">if</span> (master_bias != NULL) {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>       cpl_msg_info(cpl_func, <span class="stringliteral">"Subtracting master bias"</span>);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>       cpl_image_subtract(current_dark, master_bias);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>       cpl_msg_info(cpl_func, <span class="stringliteral">"Skipping bias subtraction"</span>);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     exposure_time = irplib_head_get_exptime(current_header);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="comment">/* Initialize/update min/max exposure time*/</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordflow">if</span> (i == 0 || exposure_time < min_exptime) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>       min_exptime = exposure_time;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     }</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keywordflow">if</span> (i == 0 || exposure_time > max_exptime) {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>       max_exptime = exposure_time;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     }</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="comment">/* Do not normalize to unit exposure time */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="comment">/*        If this is uncommented, then remember to also calculate the</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">     correct master dark exposure time below.</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">     irplib_msg("Normalizing from %f s to unit exposure time", exposure_time);</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">     check( cpl_image_divide_scalar(current_dark, exposure_time),</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment">     "Error normalizing dark frame");   */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     <span class="comment">/* Append to imagelist */</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     cpl_imagelist_set(preproc_images, current_dark, i);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     <span class="comment">/* Don't deallocate the image. It will be deallocated when</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">     the image list is deallocated */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     current_dark = NULL;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   <span class="comment">/* Check exposure times */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>    cpl_msg_info(cpl_func,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>        <span class="stringliteral">"Exposure times range from %e s to %e s (%e %% variation)"</span>, min_exptime,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>        max_exptime, 100 * (max_exptime - min_exptime) / min_exptime);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>    <span class="keywordflow">if</span> ((max_exptime - min_exptime) / min_exptime > .001) {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>      cpl_msg_warning(cpl_func, <span class="stringliteral">"Exposure times differ by %e %%"</span>,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>          100 * (max_exptime - min_exptime) / min_exptime);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>    }</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>    <span class="comment">/* compute correct exposure time */</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>    *mean_exptime=0.5 * (max_exptime + min_exptime);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   <span class="keywordflow">return</span> preproc_images;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> }</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> cpl_image *</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> irplib_mdark_process_chip(<span class="keyword">const</span> cpl_imagelist *raw_images,</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     cpl_propertylist **raw_headers, <span class="keyword">const</span> cpl_image *master_bias,</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     cpl_propertylist *mdark_header, <span class="keyword">const</span> cpl_parameterlist *parameters,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id, cpl_table* qclog, <span class="keyword">const</span> <span class="keywordtype">int</span> do_qc,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* STACK_METHOD, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KLOW, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KHIGH,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> STACK_NITER,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy) {</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   cpl_image *master_dark = NULL; <span class="comment">/* Result */</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   cpl_image *current_dark = NULL;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   cpl_imagelist *preproc_images = NULL;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   <span class="keywordtype">double</span> mean_exptime = 0;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   <span class="comment">/* First process each input image and store the results in a</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">   new image list */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   preproc_images = irplib_mkmaster_dark_fill_imagelist(raw_images, raw_headers,</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>       master_bias, &mean_exptime);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   <span class="keywordflow">if</span> (do_qc) {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>      <span class="comment">/* Here we should compute QC but a a better way to log it is TBD  */</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     irplib_mkmaster_dark_qc(raw_images, preproc_images, parameters, pr_num_x,</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         pr_num_y, pr_box_sx, pr_box_sy, recipe_id, qclog);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>      </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   <span class="comment">/* Get median stack of input darks */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   <span class="keywordflow">if</span> (strcmp(STACK_METHOD, <span class="stringliteral">"MEDIAN"</span>) == 0) {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating stack median"</span>);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     master_dark = cpl_imagelist_collapse_median_create(preproc_images);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Calculating stack mean"</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     master_dark = irplib_imagelist_ksigma_stack(preproc_images, STACK_KLOW,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         STACK_KHIGH, STACK_NITER);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   irplib_head_set_exptime(mdark_header, mean_exptime );</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   cpl_image_delete(current_dark);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   cpl_imagelist_delete(preproc_images);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     cpl_image_delete(master_dark);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>   }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <span class="keywordflow">return</span> master_dark;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__mkmaster_8h_source.html b/html/irplib__mkmaster_8h_source.html
index 76ac260..978f570 100644
--- a/html/irplib__mkmaster_8h_source.html
+++ b/html/irplib__mkmaster_8h_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_mkmaster.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_mkmaster.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_mkmaster.h,v 1.3 2011/11/02 13:17:25 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/02 13:17:25 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_MKMASTER_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MKMASTER_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <irplib_ksigma_clip.h></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 cpl_image*
-<a name="l00039"></a>00039 <a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b" title="Computes master frame by clean stack mean of the input imagelist.">irplib_mkmaster_mean</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span class="keyword">const</span> <span class="keywordtype">double</span> tolerance,<span class="k [...]
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 cpl_image* 
-<a name="l00042"></a>00042 <a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2" title="Computes master frame by clean stack median of the input imagelist.">irplib_mkmaster_median</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span class="keyword">const</span> <span class="keywordtype">double</span> tolerance);
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 cpl_image *
-<a name="l00045"></a>00045 irplib_mdark_process_chip(<span class="keyword">const</span> cpl_imagelist *raw_images,
-<a name="l00046"></a>00046     cpl_propertylist **raw_headers, <span class="keyword">const</span> cpl_image *master_bias,
-<a name="l00047"></a>00047     cpl_propertylist *mdark_header, <span class="keyword">const</span> cpl_parameterlist *parameters,
-<a name="l00048"></a>00048     <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id, cpl_table* qclog, <span class="keyword">const</span> <span class="keywordtype">int</span> do_qc,
-<a name="l00049"></a>00049     <span class="keyword">const</span> <span class="keywordtype">char</span>* STACK_METHOD, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KLOW, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KHIGH,
-<a name="l00050"></a>00050     <span class="keyword">const</span> <span class="keywordtype">int</span> STACK_NITER,
-<a name="l00051"></a>00051     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,
-<a name="l00052"></a>00052     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy);
-<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_mkmaster.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_mkmaster.h,v 1.3 2011/11/02 13:17:25 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2011/11/02 13:17:25 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_MKMASTER_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MKMASTER_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <irplib_ksigma_clip.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> cpl_image*</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <a class="code" href="group__irplib__calib.html#gae11ebd9b30a6c781265ba2e5af87722b" title="Computes master frame by clean stack mean of the input imagelist.">irplib_mkmaster_mean</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span class="keyword">const</span> <span class=" [...]
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> cpl_image* </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <a class="code" href="group__irplib__calib.html#ga31157521720077a762a43644a503bbf2" title="Computes master frame by clean stack median of the input imagelist.">irplib_mkmaster_median</a>(cpl_imagelist* images,<span class="keyword">const</span> <span class="keywordtype">double</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, <span class="keyword">const</span> <span cla [...]
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> cpl_image *</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> irplib_mdark_process_chip(<span class="keyword">const</span> cpl_imagelist *raw_images,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     cpl_propertylist **raw_headers, <span class="keyword">const</span> cpl_image *master_bias,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     cpl_propertylist *mdark_header, <span class="keyword">const</span> cpl_parameterlist *parameters,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id, cpl_table* qclog, <span class="keyword">const</span> <span class="keywordtype">int</span> do_qc,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* STACK_METHOD, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KLOW, <span class="keyword">const</span> <span class="keywordtype">double</span> STACK_KHIGH,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> STACK_NITER,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_x, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_num_y,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sx, <span class="keyword">const</span> <span class="keywordtype">int</span> pr_box_sy);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__oddeven_8c_source.html b/html/irplib__oddeven_8c_source.html
index eddab67..5c047f5 100644
--- a/html/irplib__oddeven_8c_source.html
+++ b/html/irplib__oddeven_8c_source.html
@@ -2,312 +2,343 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_oddeven.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_oddeven.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_oddeven.c,v 1.9 2012/01/12 11:50:41 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/01/12 11:50:41 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_oddeven.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                            Functions prototypes</span>
-<a name="l00043"></a>00043 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_xy_rtheta(cpl_imagelist *) ;
-<a name="l00046"></a>00046 <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_rtheta_xy(cpl_imagelist *) ;
-<a name="l00047"></a>00047  
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00056"></a>00056 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00065"></a><a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505">00065</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505" title="Estimate the odd/even rate in an image quadrant.">irplib_oddeven_monitor</a>(
-<a name="l00066"></a>00066         <span class="keyword">const</span> cpl_image     *   in,
-<a name="l00067"></a>00067         <span class="keywordtype">int</span>                     iquad,
-<a name="l00068"></a>00068         <span class="keywordtype">double</span>              *   r_even) 
-<a name="l00069"></a>00069 {
-<a name="l00070"></a>00070     cpl_image       *   extracted ;        
-<a name="l00071"></a>00071     cpl_image       *   labels ;        
-<a name="l00072"></a>00072     <span class="keywordtype">int</span>             *   plabels ;
-<a name="l00073"></a>00073     <span class="keywordtype">int</span>                 llx, lly, urx, ury ;
-<a name="l00074"></a>00074     <span class="keywordtype">int</span>                 nx, ny ;
-<a name="l00075"></a>00075     <span class="keywordtype">double</span>              f_even, f_tot ;
-<a name="l00076"></a>00076     cpl_apertures   *   aperts ;
-<a name="l00077"></a>00077     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     <span class="comment">/* Test entries */</span>
-<a name="l00080"></a>00080     <span class="keywordflow">if</span> (in == NULL || r_even == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00081"></a>00081     nx = cpl_image_get_size_x(in) ;
-<a name="l00082"></a>00082     ny = cpl_image_get_size_y(in) ;
-<a name="l00083"></a>00083     
-<a name="l00084"></a>00084     <span class="keywordflow">switch</span> (iquad){
-<a name="l00085"></a>00085         <span class="keywordflow">case</span> 1:
-<a name="l00086"></a>00086             llx = 1 ; lly = 1 ; urx = nx/2 ; ury = ny/2 ; break ;
-<a name="l00087"></a>00087         <span class="keywordflow">case</span> 2:
-<a name="l00088"></a>00088             llx = (nx/2)+1 ; lly = 1 ; urx = nx ; ury = ny/2 ; break ;
-<a name="l00089"></a>00089         <span class="keywordflow">case</span> 3:
-<a name="l00090"></a>00090             llx = 1 ; lly = (ny/2)+1 ; urx = nx/2 ; ury = ny ; break ;
-<a name="l00091"></a>00091         <span class="keywordflow">case</span> 4:
-<a name="l00092"></a>00092             llx = (nx/2)+1 ; lly = (ny/2)+1 ; urx = nx ; ury = ny ; break ;
-<a name="l00093"></a>00093         <span class="keywordflow">case</span> 0:
-<a name="l00094"></a>00094             llx = 1 ; lly = 1 ; urx = nx ; ury = ny ; break ;
-<a name="l00095"></a>00095         <span class="keywordflow">default</span>:
-<a name="l00096"></a>00096             cpl_msg_error(cpl_func, <span class="stringliteral">"Unsupported mode"</span>) ;
-<a name="l00097"></a>00097             *r_even = 0.0 ;
-<a name="l00098"></a>00098             <span class="keywordflow">return</span> -1 ;
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100    
-<a name="l00101"></a>00101     <span class="comment">/* Extract quadrant */</span>
-<a name="l00102"></a>00102     <span class="keywordflow">if</span> ((extracted = cpl_image_extract(in, llx, lly, urx, ury)) == NULL) {
-<a name="l00103"></a>00103         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot extract quadrant"</span>) ;
-<a name="l00104"></a>00104         *r_even = 0.0 ;
-<a name="l00105"></a>00105         <span class="keywordflow">return</span> -1 ;
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     nx = cpl_image_get_size_x(extracted) ;
-<a name="l00108"></a>00108     ny = cpl_image_get_size_y(extracted) ;
-<a name="l00109"></a>00109             
-<a name="l00110"></a>00110     <span class="comment">/* Get f_tot */</span>
-<a name="l00111"></a>00111     f_tot = cpl_image_get_median(extracted) ;
-<a name="l00112"></a>00112     <span class="keywordflow">if</span> (fabs(f_tot) < 1e-6) {
-<a name="l00113"></a>00113         cpl_msg_warning(cpl_func, <span class="stringliteral">"Quadrant median is 0.0"</span>) ;
-<a name="l00114"></a>00114         cpl_image_delete(extracted) ;
-<a name="l00115"></a>00115         *r_even = 0.0 ;
-<a name="l00116"></a>00116         <span class="keywordflow">return</span> -1 ;
-<a name="l00117"></a>00117     }
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="comment">/* Create the label image to define the even columns */</span>
-<a name="l00120"></a>00120     labels = cpl_image_new(nx, ny, CPL_TYPE_INT) ;
-<a name="l00121"></a>00121     plabels = cpl_image_get_data_int(labels) ;
-<a name="l00122"></a>00122     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l00123"></a>00123         <span class="keywordflow">if</span> (i % 2) <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) plabels[i+j*nx] = 0 ;
-<a name="l00124"></a>00124         <span class="keywordflow">else</span> <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) plabels[i+j*nx] = 1 ;
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126     
-<a name="l00127"></a>00127     <span class="comment">/* Get the median of even columns */</span>
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> ((aperts = cpl_apertures_new_from_image(extracted, labels)) == NULL) {
-<a name="l00129"></a>00129         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot compute the even columns median"</span>) ;
-<a name="l00130"></a>00130         cpl_image_delete(extracted) ;
-<a name="l00131"></a>00131         cpl_image_delete(labels) ;
-<a name="l00132"></a>00132         *r_even = 0.0 ;
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> -1 ;
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135     cpl_image_delete(extracted) ;
-<a name="l00136"></a>00136     cpl_image_delete(labels) ;
-<a name="l00137"></a>00137     f_even = cpl_apertures_get_median(aperts, 1) ;
-<a name="l00138"></a>00138     cpl_apertures_delete(aperts) ;
-<a name="l00139"></a>00139     
-<a name="l00140"></a>00140     <span class="comment">/* Compute the even rate and return */</span>
-<a name="l00141"></a>00141     *r_even = f_even / f_tot ;
-<a name="l00142"></a>00142     <span class="keywordflow">return</span> 0 ;
-<a name="l00143"></a>00143 }
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00151"></a>00151 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00152"></a><a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95">00152</a> cpl_image * <a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95" title="Correct the odd/even in an image.">irplib_oddeven_correct</a>(<span class="keyword">const</span> cpl_image * in)
-<a name="l00153"></a>00153 {
-<a name="l00154"></a>00154     cpl_image       *   in_real ;
-<a name="l00155"></a>00155     cpl_image       *   in_imag ;
-<a name="l00156"></a>00156     cpl_imagelist   *   freq_i ;
-<a name="l00157"></a>00157     cpl_imagelist   *   freq_i_amp ;
-<a name="l00158"></a>00158     cpl_image       *   cur_im ;
-<a name="l00159"></a>00159     <span class="keywordtype">double</span>          *   pcur_im ;
-<a name="l00160"></a>00160     cpl_image       *   cleaned ;
-<a name="l00161"></a>00161     <span class="keywordtype">int</span>                 nx ;
-<a name="l00162"></a>00162     cpl_vector      *   hf_med ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     <span class="comment">/* Test entries */</span>
-<a name="l00165"></a>00165     <span class="keywordflow">if</span> (in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     nx = cpl_image_get_size_x(in) ;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="comment">/* Local copy of the input image in DOUBLE */</span>
-<a name="l00170"></a>00170     in_real = cpl_image_cast(in, CPL_TYPE_DOUBLE) ;
-<a name="l00171"></a>00171     in_imag = cpl_image_duplicate(in_real) ;
-<a name="l00172"></a>00172     cpl_image_multiply_scalar(in_imag, 0.0) ;
-<a name="l00173"></a>00173     
-<a name="l00174"></a>00174     <span class="comment">/* Apply FFT to input image */</span>
-<a name="l00175"></a>00175     cpl_image_fft(in_real, in_imag, CPL_FFT_DEFAULT) ;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     <span class="comment">/* Put the result in an image list */</span>
-<a name="l00178"></a>00178     freq_i = cpl_imagelist_new() ;
-<a name="l00179"></a>00179     cpl_imagelist_set(freq_i, in_real, 0) ;
-<a name="l00180"></a>00180     cpl_imagelist_set(freq_i, in_imag, 1) ;
-<a name="l00181"></a>00181     
-<a name="l00182"></a>00182     <span class="comment">/* Convert to amplitude/phase */</span>
-<a name="l00183"></a>00183     freq_i_amp = irplib_oddeven_cube_conv_xy_rtheta(freq_i);
-<a name="l00184"></a>00184     cpl_imagelist_delete(freq_i) ;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     <span class="comment">/* Correct the odd-even frequency */</span>
-<a name="l00187"></a>00187     cur_im = cpl_imagelist_get(freq_i_amp, 0) ;
-<a name="l00188"></a>00188     pcur_im = cpl_image_get_data_double(cur_im) ;
-<a name="l00189"></a>00189     <span class="comment">/* Odd-even frequency will be replaced by </span>
-<a name="l00190"></a>00190 <span class="comment">       the median of the 5 values around */</span>
-<a name="l00191"></a>00191     hf_med = cpl_vector_new(5); 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     cpl_vector_set(hf_med, 0, pcur_im[nx/2 + 1]); 
-<a name="l00194"></a>00194     cpl_vector_set(hf_med, 1, pcur_im[nx/2 + 2]);
-<a name="l00195"></a>00195     cpl_vector_set(hf_med, 2, pcur_im[nx/2 + 3]);
-<a name="l00196"></a>00196     cpl_vector_set(hf_med, 3, pcur_im[nx/2    ]);
-<a name="l00197"></a>00197     cpl_vector_set(hf_med, 4, pcur_im[nx/2  -1]);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     pcur_im[nx / 2 + 1] = cpl_vector_get_median(hf_med);
-<a name="l00200"></a>00200     cpl_vector_delete(hf_med);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="comment">/* Convert to X/Y */</span>
-<a name="l00203"></a>00203     freq_i = irplib_oddeven_cube_conv_rtheta_xy(freq_i_amp) ;
-<a name="l00204"></a>00204     cpl_imagelist_delete(freq_i_amp) ;
-<a name="l00205"></a>00205     <span class="comment">/* FFT back to image space */</span>
-<a name="l00206"></a>00206     cpl_image_fft(cpl_imagelist_get(freq_i, 0), cpl_imagelist_get(freq_i, 1), 
-<a name="l00207"></a>00207             CPL_FFT_INVERSE) ;
-<a name="l00208"></a>00208     cleaned = cpl_image_cast(cpl_imagelist_get(freq_i, 0), CPL_TYPE_FLOAT) ;
-<a name="l00209"></a>00209     cpl_imagelist_delete(freq_i) ;
-<a name="l00210"></a>00210     <span class="keywordflow">return</span> cleaned ;
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00215"></a>00215 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00226"></a>00226 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00227"></a>00227 <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_xy_rtheta(
-<a name="l00228"></a>00228         cpl_imagelist   *   cube_in)
-<a name="l00229"></a>00229 {
-<a name="l00230"></a>00230     cpl_imagelist       *   cube_out ;
-<a name="l00231"></a>00231     <span class="keywordtype">double</span>                  re, im ;
-<a name="l00232"></a>00232     <span class="keywordtype">double</span>                  mod, phase ;
-<a name="l00233"></a>00233     <span class="keywordtype">int</span>                     nx, ny, np ;
-<a name="l00234"></a>00234     cpl_image           *   tmp_im ;
-<a name="l00235"></a>00235     <span class="keywordtype">double</span>              *   pim1 ;
-<a name="l00236"></a>00236     <span class="keywordtype">double</span>              *   pim2 ;
-<a name="l00237"></a>00237     <span class="keywordtype">double</span>              *   pim3 ;
-<a name="l00238"></a>00238     <span class="keywordtype">double</span>              *   pim4 ;
-<a name="l00239"></a>00239     <span class="keywordtype">int</span>                     i, j ;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="comment">/* Error handling : test entries    */</span>
-<a name="l00242"></a>00242     <span class="keywordflow">if</span> (cube_in == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00243"></a>00243     np = cpl_imagelist_get_size(cube_in) ;
-<a name="l00244"></a>00244     <span class="keywordflow">if</span> (np != 2) <span class="keywordflow">return</span> NULL ;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     <span class="comment">/* Initialise */</span>
-<a name="l00247"></a>00247     tmp_im = cpl_imagelist_get(cube_in, 0) ;
-<a name="l00248"></a>00248     pim1 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00249"></a>00249     nx = cpl_image_get_size_x(tmp_im) ;
-<a name="l00250"></a>00250     ny = cpl_image_get_size_y(tmp_im) ;
-<a name="l00251"></a>00251     tmp_im = cpl_imagelist_get(cube_in, 1) ;
-<a name="l00252"></a>00252     pim2 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254     <span class="comment">/* Allocate cube_out */</span>
-<a name="l00255"></a>00255     cube_out = cpl_imagelist_duplicate(cube_in) ;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     tmp_im = cpl_imagelist_get(cube_out, 0) ;
-<a name="l00258"></a>00258     pim3 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00259"></a>00259     tmp_im = cpl_imagelist_get(cube_out, 1) ;
-<a name="l00260"></a>00260     pim4 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00261"></a>00261     <span class="comment">/* Convert */</span>
-<a name="l00262"></a>00262     <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {
-<a name="l00263"></a>00263         <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l00264"></a>00264             re = (double)pim1[i+j*nx] ;
-<a name="l00265"></a>00265             im = (double)pim2[i+j*nx] ;
-<a name="l00266"></a>00266             mod = (double)(sqrt(re*re + im*im)) ;
-<a name="l00267"></a>00267             <span class="keywordflow">if</span> (re != 0.0)
-<a name="l00268"></a>00268                 phase = (double)atan2(im, re) ;
-<a name="l00269"></a>00269             <span class="keywordflow">else</span> 
-<a name="l00270"></a>00270                 phase = 0.0 ;
-<a name="l00271"></a>00271             pim3[i+j*nx] = mod ; 
-<a name="l00272"></a>00272             pim4[i+j*nx] = phase ; 
-<a name="l00273"></a>00273         }
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275     <span class="keywordflow">return</span> cube_out ;
-<a name="l00276"></a>00276 }
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00291"></a>00291 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00292"></a>00292 <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_rtheta_xy(
-<a name="l00293"></a>00293         cpl_imagelist   *   cube_in)
-<a name="l00294"></a>00294 {
-<a name="l00295"></a>00295     cpl_imagelist       *   cube_out ;
-<a name="l00296"></a>00296     <span class="keywordtype">double</span>                  re, im ;
-<a name="l00297"></a>00297     <span class="keywordtype">double</span>                  mod, phase ;
-<a name="l00298"></a>00298     <span class="keywordtype">int</span>                     nx, ny, np ;
-<a name="l00299"></a>00299     cpl_image           *   tmp_im ;
-<a name="l00300"></a>00300     <span class="keywordtype">double</span>              *   pim1 ;
-<a name="l00301"></a>00301     <span class="keywordtype">double</span>              *   pim2 ;
-<a name="l00302"></a>00302     <span class="keywordtype">double</span>              *   pim3 ;
-<a name="l00303"></a>00303     <span class="keywordtype">double</span>              *   pim4 ;
-<a name="l00304"></a>00304     <span class="keywordtype">int</span>                     i, j ;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     <span class="comment">/* Error handling : test entries    */</span>
-<a name="l00307"></a>00307     <span class="keywordflow">if</span> (cube_in == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00308"></a>00308     np = cpl_imagelist_get_size(cube_in) ;
-<a name="l00309"></a>00309     <span class="keywordflow">if</span> (np != 2) <span class="keywordflow">return</span> NULL ;
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     <span class="comment">/* Initialise */</span>
-<a name="l00312"></a>00312     tmp_im = cpl_imagelist_get(cube_in, 0) ;
-<a name="l00313"></a>00313     pim1 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00314"></a>00314     nx = cpl_image_get_size_x(tmp_im) ;
-<a name="l00315"></a>00315     ny = cpl_image_get_size_y(tmp_im) ;
-<a name="l00316"></a>00316     tmp_im = cpl_imagelist_get(cube_in, 1) ;
-<a name="l00317"></a>00317     pim2 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     <span class="comment">/* Allocate cube_out */</span>
-<a name="l00320"></a>00320     cube_out = cpl_imagelist_duplicate(cube_in) ;
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322     tmp_im = cpl_imagelist_get(cube_out, 0) ;
-<a name="l00323"></a>00323     pim3 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00324"></a>00324     tmp_im = cpl_imagelist_get(cube_out, 1) ;
-<a name="l00325"></a>00325     pim4 = cpl_image_get_data_double(tmp_im) ;
-<a name="l00326"></a>00326     <span class="comment">/* Convert */</span>
-<a name="l00327"></a>00327     <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {
-<a name="l00328"></a>00328         <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l00329"></a>00329             mod = (double)pim1[i+j*nx] ;
-<a name="l00330"></a>00330             phase = (double)pim2[i+j*nx] ;
-<a name="l00331"></a>00331             re = (double)(mod * cos(phase));
-<a name="l00332"></a>00332             im = (double)(mod * sin(phase));
-<a name="l00333"></a>00333             pim3[i+j*nx] = re ; 
-<a name="l00334"></a>00334             pim4[i+j*nx] = im ; 
-<a name="l00335"></a>00335         }
-<a name="l00336"></a>00336     }
-<a name="l00337"></a>00337     <span class="keywordflow">return</span> cube_out ;
-<a name="l00338"></a>00338 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_oddeven.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_oddeven.c,v 1.9 2012/01/12 11:50:41 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/01/12 11:50:41 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_oddeven.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_xy_rtheta(cpl_imagelist *) ;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_rtheta_xy(cpl_imagelist *) ;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno"><a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505">   65</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505" title="Estimate the odd/even rate in an image quadrant.">irplib_oddeven_monitor</a>(</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keyword">const</span> cpl_image     *   in,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">int</span>                     iquad,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">double</span>              *   r_even) </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_image       *   extracted ;        </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     cpl_image       *   labels ;        </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">int</span>             *   plabels ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordtype">int</span>                 llx, lly, urx, ury ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordtype">int</span>                 nx, ny ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordtype">double</span>              f_even, f_tot ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     cpl_apertures   *   aperts ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordflow">if</span> (in == NULL || r_even == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     nx = cpl_image_get_size_x(in) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     ny = cpl_image_get_size_y(in) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordflow">switch</span> (iquad){</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>             llx = 1 ; lly = 1 ; urx = nx/2 ; ury = ny/2 ; break ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>             llx = (nx/2)+1 ; lly = 1 ; urx = nx ; ury = ny/2 ; break ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>             llx = 1 ; lly = (ny/2)+1 ; urx = nx/2 ; ury = ny ; break ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>             llx = (nx/2)+1 ; lly = (ny/2)+1 ; urx = nx ; ury = ny ; break ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>             llx = 1 ; lly = 1 ; urx = nx ; ury = ny ; break ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Unsupported mode"</span>) ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>             *r_even = 0.0 ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="comment">/* Extract quadrant */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">if</span> ((extracted = cpl_image_extract(in, llx, lly, urx, ury)) == NULL) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot extract quadrant"</span>) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         *r_even = 0.0 ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     nx = cpl_image_get_size_x(extracted) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     ny = cpl_image_get_size_y(extracted) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>             </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/* Get f_tot */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     f_tot = cpl_image_get_median(extracted) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">if</span> (fabs(f_tot) < 1e-6) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"Quadrant median is 0.0"</span>) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         cpl_image_delete(extracted) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         *r_even = 0.0 ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Create the label image to define the even columns */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     labels = cpl_image_new(nx, ny, CPL_TYPE_INT) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     plabels = cpl_image_get_data_int(labels) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         <span class="keywordflow">if</span> (i % 2) <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) plabels[i+j*nx] = 0 ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         <span class="keywordflow">else</span> <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) plabels[i+j*nx] = 1 ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* Get the median of even columns */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">if</span> ((aperts = cpl_apertures_new_from_image(extracted, labels)) == NULL) {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot compute the even columns median"</span>) ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         cpl_image_delete(extracted) ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         cpl_image_delete(labels) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         *r_even = 0.0 ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_image_delete(extracted) ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     cpl_image_delete(labels) ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     f_even = cpl_apertures_get_median(aperts, 1) ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_apertures_delete(aperts) ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">/* Compute the even rate and return */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     *r_even = f_even / f_tot ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95">  152</a></span> cpl_image * <a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95" title="Correct the odd/even in an image.">irplib_oddeven_correct</a>(<span class="keyword">const</span> cpl_image * in)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_image       *   in_real ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     cpl_image       *   in_imag ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     cpl_imagelist   *   freq_i ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_imagelist   *   freq_i_amp ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_image       *   cur_im ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordtype">double</span>          *   pcur_im ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_image       *   cleaned ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordtype">int</span>                 nx ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_vector      *   hf_med ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">if</span> (in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     nx = cpl_image_get_size_x(in) ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">/* Local copy of the input image in DOUBLE */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     in_real = cpl_image_cast(in, CPL_TYPE_DOUBLE) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     in_imag = cpl_image_duplicate(in_real) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_image_multiply_scalar(in_imag, 0.0) ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="comment">/* Apply FFT to input image */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_image_fft(in_real, in_imag, CPL_FFT_DEFAULT) ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="comment">/* Put the result in an image list */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     freq_i = cpl_imagelist_new() ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_imagelist_set(freq_i, in_real, 0) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_imagelist_set(freq_i, in_imag, 1) ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="comment">/* Convert to amplitude/phase */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     freq_i_amp = irplib_oddeven_cube_conv_xy_rtheta(freq_i);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_imagelist_delete(freq_i) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">/* Correct the odd-even frequency */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cur_im = cpl_imagelist_get(freq_i_amp, 0) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     pcur_im = cpl_image_get_data_double(cur_im) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="comment">/* Odd-even frequency will be replaced by </span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">       the median of the 5 values around */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     hf_med = cpl_vector_new(5); </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cpl_vector_set(hf_med, 0, pcur_im[nx/2 + 1]); </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_vector_set(hf_med, 1, pcur_im[nx/2 + 2]);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_vector_set(hf_med, 2, pcur_im[nx/2 + 3]);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_vector_set(hf_med, 3, pcur_im[nx/2    ]);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_vector_set(hf_med, 4, pcur_im[nx/2  -1]);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     pcur_im[nx / 2 + 1] = cpl_vector_get_median(hf_med);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_vector_delete(hf_med);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="comment">/* Convert to X/Y */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     freq_i = irplib_oddeven_cube_conv_rtheta_xy(freq_i_amp) ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_imagelist_delete(freq_i_amp) ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* FFT back to image space */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     cpl_image_fft(cpl_imagelist_get(freq_i, 0), cpl_imagelist_get(freq_i, 1), </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             CPL_FFT_INVERSE) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cleaned = cpl_image_cast(cpl_imagelist_get(freq_i, 0), CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_imagelist_delete(freq_i) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">return</span> cleaned ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_xy_rtheta(</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         cpl_imagelist   *   cube_in)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     cpl_imagelist       *   cube_out ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordtype">double</span>                  re, im ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordtype">double</span>                  mod, phase ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">int</span>                     nx, ny, np ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_image           *   tmp_im ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">double</span>              *   pim1 ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordtype">double</span>              *   pim2 ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordtype">double</span>              *   pim3 ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordtype">double</span>              *   pim4 ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordtype">int</span>                     i, j ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="comment">/* Error handling : test entries    */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">if</span> (cube_in == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     np = cpl_imagelist_get_size(cube_in) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordflow">if</span> (np != 2) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     tmp_im = cpl_imagelist_get(cube_in, 0) ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     pim1 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     nx = cpl_image_get_size_x(tmp_im) ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     ny = cpl_image_get_size_y(tmp_im) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     tmp_im = cpl_imagelist_get(cube_in, 1) ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     pim2 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="comment">/* Allocate cube_out */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     cube_out = cpl_imagelist_duplicate(cube_in) ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     tmp_im = cpl_imagelist_get(cube_out, 0) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     pim3 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     tmp_im = cpl_imagelist_get(cube_out, 1) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     pim4 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* Convert */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>             re = (double)pim1[i+j*nx] ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>             im = (double)pim2[i+j*nx] ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>             mod = (double)(sqrt(re*re + im*im)) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>             <span class="keywordflow">if</span> (re != 0.0)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                 phase = (double)atan2(im, re) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                 phase = 0.0 ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>             pim3[i+j*nx] = mod ; </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>             pim4[i+j*nx] = phase ; </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="keyword">static</span> cpl_imagelist * irplib_oddeven_cube_conv_rtheta_xy(</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         cpl_imagelist   *   cube_in)</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_imagelist       *   cube_out ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordtype">double</span>                  re, im ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordtype">double</span>                  mod, phase ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordtype">int</span>                     nx, ny, np ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     cpl_image           *   tmp_im ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">double</span>              *   pim1 ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordtype">double</span>              *   pim2 ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordtype">double</span>              *   pim3 ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordtype">double</span>              *   pim4 ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordtype">int</span>                     i, j ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* Error handling : test entries    */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">if</span> (cube_in == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     np = cpl_imagelist_get_size(cube_in) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> (np != 2) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     tmp_im = cpl_imagelist_get(cube_in, 0) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     pim1 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     nx = cpl_image_get_size_x(tmp_im) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     ny = cpl_image_get_size_y(tmp_im) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     tmp_im = cpl_imagelist_get(cube_in, 1) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     pim2 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="comment">/* Allocate cube_out */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cube_out = cpl_imagelist_duplicate(cube_in) ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     tmp_im = cpl_imagelist_get(cube_out, 0) ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     pim3 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     tmp_im = cpl_imagelist_get(cube_out, 1) ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     pim4 = cpl_image_get_data_double(tmp_im) ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="comment">/* Convert */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>             mod = (double)pim1[i+j*nx] ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>             phase = (double)pim2[i+j*nx] ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>             re = (double)(mod * cos(phase));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>             im = (double)(mod * sin(phase));</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>             pim3[i+j*nx] = re ; </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             pim4[i+j*nx] = im ; </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__oddeven_8h_source.html b/html/irplib__oddeven_8h_source.html
index 5fbdfc3..4efb49d 100644
--- a/html/irplib__oddeven_8h_source.html
+++ b/html/irplib__oddeven_8h_source.html
@@ -2,55 +2,86 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_oddeven.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_oddeven.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_oddeven.h,v 1.4 2006/10/06 20:46:04 yjung Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: yjung $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/06 20:46:04 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_ODDEVEN_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_ODDEVEN_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keywordtype">int</span> <a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505" title="Estimate the odd/even rate in an image quadrant.">irplib_oddeven_monitor</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *) ;
-<a name="l00038"></a>00038 cpl_image * <a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95" title="Correct the odd/even in an image.">irplib_oddeven_correct</a>(<span class="keyword">const</span> cpl_image *) ;
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_oddeven.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_oddeven.h,v 1.4 2006/10/06 20:46:04 yjung Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: yjung $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/06 20:46:04 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_ODDEVEN_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_ODDEVEN_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__oddeven.html#gade0423dfae726cc1ffec66a24e376505" title="Estimate the odd/even rate in an image quadrant.">irplib_oddeven_monitor</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *) ;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> cpl_image * <a class="code" href="group__irplib__oddeven.html#ga7f7dafc1436a0aa2617048e1ada84e95" title="Correct the odd/even in an image.">irplib_oddeven_correct</a>(<span class="keyword">const</span> cpl_image *) ;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__plugin_8c_source.html b/html/irplib__plugin_8c_source.html
index 07f15ec..91b01db 100644
--- a/html/irplib__plugin_8c_source.html
+++ b/html/irplib__plugin_8c_source.html
@@ -2,1039 +2,1073 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_plugin.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_plugin.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_plugin.c,v 1.39 2012/02/03 14:19:06 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package </span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/02/03 14:19:06 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.39 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <assert.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "irplib_plugin.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                                Defines</span>
-<a name="l00059"></a>00059 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/* Maximum line length in SOF-file */</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#ifndef LINE_LEN_MAX</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define LINE_LEN_MAX 1024</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="comment">/* This device provides quite-random data */</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#define DEV_RANDOM "/dev/urandom"</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 <span class="comment">/* Copied from cpl_tools.h */</span>
-<a name="l00070"></a>00070 <span class="preprocessor">#define recipe_assert(bool) \</span>
-<a name="l00071"></a>00071 <span class="preprocessor">  ((bool) ? (cpl_msg_debug(cpl_func, \</span>
-<a name="l00072"></a>00072 <span class="preprocessor">     "OK in " __FILE__ " line %d (CPL-error state: '%s' in %s): %s",__LINE__, \</span>
-<a name="l00073"></a>00073 <span class="preprocessor">       cpl_error_get_message(), cpl_error_get_where(), #bool), 0) \</span>
-<a name="l00074"></a>00074 <span class="preprocessor">          : (cpl_msg_error(cpl_func, \</span>
-<a name="l00075"></a>00075 <span class="preprocessor">     "Failure in " __FILE__ " line %d (CPL-error state: '%s' in %s): %s", \</span>
-<a name="l00076"></a>00076 <span class="preprocessor">      __LINE__, cpl_error_get_message(), cpl_error_get_where(), #bool), 1))</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00081"></a>00081 <span class="comment">                            Private Function prototypes</span>
-<a name="l00082"></a>00082 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keyword">const</span> cpl_parameter * irplib_parameterlist_get(<span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00085"></a>00085                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00086"></a>00086                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00087"></a>00087                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_parameterlist_set(cpl_parameterlist *);
-<a name="l00090"></a>00090 <span class="keyword">static</span> cpl_boolean irplib_plugin_has_sof_from_env(<span class="keyword">const</span> cpl_plugin *,
-<a name="l00091"></a>00091                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_load(cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_devfile(cpl_plugin *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">size_t</span>,
-<a name="l00096"></a>00096                                    <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);
-<a name="l00097"></a>00097 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_image_empty(cpl_plugin *, <span class="keywordtype">size_t</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);
-<a name="l00098"></a>00098 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_local(cpl_plugin *);
-<a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_from_env(cpl_plugin *);
-<a name="l00100"></a>00100 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_empty(cpl_frameset *);
-<a name="l00101"></a>00101 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frame(<span class="keyword">const</span> cpl_frame *);
-<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frameset_diff(<span class="keyword">const</span> cpl_frameset *,
-<a name="l00103"></a>00103                                                <span class="keyword">const</span> cpl_frameset *);
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="keyword">static</span> cpl_errorstate inistate;
-<a name="l00106"></a>00106 
-<a name="l00109"></a>00109 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00110"></a>00110 <span class="comment">                            Function definitions</span>
-<a name="l00111"></a>00111 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00123"></a>00123 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00124"></a>00124 <span class="keyword">const</span> <span class="keywordtype">char</span> * irplib_parameterlist_get_string(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00125"></a>00125                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00126"></a>00126                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00127"></a>00127                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)
-<a name="l00128"></a>00128 {
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,
-<a name="l00131"></a>00131                                                          recipe, parameter);
-<a name="l00132"></a>00132     <span class="keyword">const</span> <span class="keywordtype">char</span> * value;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     cpl_ensure(par != NULL, cpl_error_get_code(), NULL);
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     value = cpl_parameter_get_string(par);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keywordflow">if</span> (value == NULL) (void)cpl_error_set_where(cpl_func);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     <span class="keywordflow">return</span> value;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00154"></a>00154 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00155"></a>00155 cpl_boolean irplib_parameterlist_get_bool(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00156"></a>00156                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00157"></a>00157                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00158"></a>00158                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)
-<a name="l00159"></a>00159 {
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,
-<a name="l00162"></a>00162                                                          recipe, parameter);
-<a name="l00163"></a>00163     cpl_errorstate        prestate = cpl_errorstate_get();
-<a name="l00164"></a>00164     cpl_boolean           value;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     cpl_ensure(par != NULL, cpl_error_get_code(), CPL_FALSE);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     value = cpl_parameter_get_bool(par);
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="keywordflow">return</span> value;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 }
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 <span class="keywordtype">int</span> irplib_parameterlist_get_int(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00190"></a>00190                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00191"></a>00191                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00192"></a>00192                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,
-<a name="l00196"></a>00196                                                          recipe, parameter);
-<a name="l00197"></a>00197     cpl_errorstate        prestate = cpl_errorstate_get();
-<a name="l00198"></a>00198     <span class="keywordtype">int</span>                   value;
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     cpl_ensure(par != NULL, cpl_error_get_code(), 0);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     value = cpl_parameter_get_int(par);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     <span class="keywordflow">return</span> value;
-<a name="l00208"></a>00208 }
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00220"></a>00220 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00221"></a>00221 <span class="keywordtype">double</span> irplib_parameterlist_get_double(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00222"></a>00222                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00223"></a>00223                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00224"></a>00224                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)
-<a name="l00225"></a>00225 {
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,
-<a name="l00228"></a>00228                                                          recipe, parameter);
-<a name="l00229"></a>00229     cpl_errorstate        prestate = cpl_errorstate_get();
-<a name="l00230"></a>00230     <span class="keywordtype">double</span>                value;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     cpl_ensure(par != NULL, cpl_error_get_code(), 0.0);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     value = cpl_parameter_get_double(par);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="keywordflow">return</span> value;
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00256"></a>00256 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00257"></a>00257 cpl_error_code irplib_parameterlist_set_string(cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00258"></a>00258                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00259"></a>00259                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00260"></a>00260                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,
-<a name="l00261"></a>00261                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * defvalue,
-<a name="l00262"></a>00262                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,
-<a name="l00263"></a>00263                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * context,
-<a name="l00264"></a>00264                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * man)
-<a name="l00265"></a>00265 {
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     cpl_error_code  error;
-<a name="l00268"></a>00268     cpl_parameter * par;
-<a name="l00269"></a>00269     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,
-<a name="l00270"></a>00270                                             parameter);
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272     cpl_ensure_code(paramname != NULL, cpl_error_get_code());
-<a name="l00273"></a>00273     
-<a name="l00274"></a>00274     par = cpl_parameter_new_value(paramname, CPL_TYPE_STRING, man, context,
-<a name="l00275"></a>00275                                   defvalue);
-<a name="l00276"></a>00276     cpl_free(paramname);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     cpl_ensure_code(par != NULL, cpl_error_get_code());
-<a name="l00279"></a>00279     
-<a name="l00280"></a>00280     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
-<a name="l00281"></a>00281                                     alias ? alias : parameter);
-<a name="l00282"></a>00282     cpl_ensure_code(!error, error);
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
-<a name="l00285"></a>00285     cpl_ensure_code(!error, error);
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);
-<a name="l00288"></a>00288     cpl_ensure_code(!error, error);
-<a name="l00289"></a>00289     
-<a name="l00290"></a>00290     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00291"></a>00291 }
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00308"></a>00308 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00309"></a>00309 cpl_error_code irplib_parameterlist_set_bool(cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00310"></a>00310                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00311"></a>00311                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00312"></a>00312                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,
-<a name="l00313"></a>00313                                              cpl_boolean  defvalue,
-<a name="l00314"></a>00314                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,
-<a name="l00315"></a>00315                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * context,
-<a name="l00316"></a>00316                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * man)
-<a name="l00317"></a>00317 {
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     cpl_error_code  error;
-<a name="l00320"></a>00320     cpl_parameter * par;
-<a name="l00321"></a>00321     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,
-<a name="l00322"></a>00322                                             parameter);
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     cpl_ensure_code(paramname != NULL, cpl_error_get_code());
-<a name="l00325"></a>00325     
-<a name="l00326"></a>00326     par = cpl_parameter_new_value(paramname, CPL_TYPE_BOOL, man, context,
-<a name="l00327"></a>00327                                   defvalue);
-<a name="l00328"></a>00328     cpl_free(paramname);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     cpl_ensure_code(par != NULL, cpl_error_get_code());
-<a name="l00331"></a>00331     
-<a name="l00332"></a>00332     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
-<a name="l00333"></a>00333                                     alias ? alias : parameter);
-<a name="l00334"></a>00334     cpl_ensure_code(!error, error);
-<a name="l00335"></a>00335     
-<a name="l00336"></a>00336     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
-<a name="l00337"></a>00337     cpl_ensure_code(!error, error);
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);
-<a name="l00340"></a>00340     cpl_ensure_code(!error, error);
-<a name="l00341"></a>00341     
-<a name="l00342"></a>00342     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00343"></a>00343 }
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00361"></a>00361 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00362"></a>00362 cpl_error_code irplib_parameterlist_set_int(cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00363"></a>00363                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00364"></a>00364                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00365"></a>00365                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,
-<a name="l00366"></a>00366                                             <span class="keywordtype">int</span>         defvalue,
-<a name="l00367"></a>00367                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,
-<a name="l00368"></a>00368                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * context,
-<a name="l00369"></a>00369                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * man)
-<a name="l00370"></a>00370 {
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372     cpl_error_code  error;
-<a name="l00373"></a>00373     cpl_parameter * par;
-<a name="l00374"></a>00374     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,
-<a name="l00375"></a>00375                                             parameter);
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377     cpl_ensure_code(paramname != NULL, cpl_error_get_code());
-<a name="l00378"></a>00378     
-<a name="l00379"></a>00379     par = cpl_parameter_new_value(paramname, CPL_TYPE_INT, man, context,
-<a name="l00380"></a>00380                                   defvalue);
-<a name="l00381"></a>00381     cpl_free(paramname);
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383     cpl_ensure_code(par != NULL, cpl_error_get_code());
-<a name="l00384"></a>00384     
-<a name="l00385"></a>00385     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
-<a name="l00386"></a>00386                                     alias ? alias : parameter);
-<a name="l00387"></a>00387     cpl_ensure_code(!error, error);
-<a name="l00388"></a>00388     
-<a name="l00389"></a>00389     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
-<a name="l00390"></a>00390     cpl_ensure_code(!error, error);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);
-<a name="l00393"></a>00393     cpl_ensure_code(!error, error);
-<a name="l00394"></a>00394     
-<a name="l00395"></a>00395     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00396"></a>00396 }
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00413"></a>00413 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00414"></a>00414 cpl_error_code irplib_parameterlist_set_double(cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l00415"></a>00415                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l00416"></a>00416                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l00417"></a>00417                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,
-<a name="l00418"></a>00418                                                <span class="keywordtype">double</span>       defvalue,
-<a name="l00419"></a>00419                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,
-<a name="l00420"></a>00420                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * context,
-<a name="l00421"></a>00421                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * man)
-<a name="l00422"></a>00422 {
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     cpl_error_code  error;
-<a name="l00425"></a>00425     cpl_parameter * par;
-<a name="l00426"></a>00426     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,
-<a name="l00427"></a>00427                                             parameter);
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429     cpl_ensure_code(paramname != NULL, cpl_error_get_code());
-<a name="l00430"></a>00430     
-<a name="l00431"></a>00431     par = cpl_parameter_new_value(paramname, CPL_TYPE_DOUBLE, man, context,
-<a name="l00432"></a>00432                                   defvalue);
-<a name="l00433"></a>00433     cpl_free(paramname);
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435     cpl_ensure_code(par != NULL, cpl_error_get_code());
-<a name="l00436"></a>00436     
-<a name="l00437"></a>00437     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,
-<a name="l00438"></a>00438                                     alias ? alias : parameter);
-<a name="l00439"></a>00439     cpl_ensure_code(!error, error);
-<a name="l00440"></a>00440     
-<a name="l00441"></a>00441     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);
-<a name="l00442"></a>00442     cpl_ensure_code(!error, error);
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);
-<a name="l00445"></a>00445     cpl_ensure_code(!error, error);
-<a name="l00446"></a>00446     
-<a name="l00447"></a>00447     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00448"></a>00448 }
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00465"></a>00465 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00466"></a>00466 <span class="keywordtype">int</span> irplib_plugin_test(cpl_pluginlist * <span class="keyword">self</span>, <span class="keywordtype">size_t</span> nstr, <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[]) {
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468     cpl_plugin     * plugin;
-<a name="l00469"></a>00469     cpl_recipe     * recipe;
-<a name="l00470"></a>00470     int            (*recipe_create) (cpl_plugin *);
-<a name="l00471"></a>00471     int            (*recipe_exec  ) (cpl_plugin *);
-<a name="l00472"></a>00472     int            (*recipe_deinit) (cpl_plugin *);
-<a name="l00473"></a>00473     cpl_error_code error;
-<a name="l00474"></a>00474     FILE         * stream;
-<a name="l00475"></a>00475     cpl_boolean    is_debug;
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478     is_debug = cpl_msg_get_level() <= CPL_MSG_DEBUG ? CPL_TRUE : CPL_FALSE;
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480     <span class="comment">/* Modified from CPL unit tests */</span>
-<a name="l00481"></a>00481     stream = is_debug ? stdout : fopen(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"a"</span>);
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     inistate = cpl_errorstate_get();
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485     assert( nstr == 0 || astr != NULL );
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487     plugin = cpl_pluginlist_get_first(<span class="keyword">self</span>);
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489     <span class="keywordflow">if</span> (plugin == NULL) {
-<a name="l00490"></a>00490         cpl_msg_warning(cpl_func, <span class="stringliteral">"With an empty pluginlist, "</span>
-<a name="l00491"></a>00491                         <span class="stringliteral">"no tests can be made"</span>);
-<a name="l00492"></a>00492         <span class="keywordflow">return</span> 0;
-<a name="l00493"></a>00493     }
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     cpl_plugin_dump(plugin, stream);
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497     recipe_create = cpl_plugin_get_init(plugin);
-<a name="l00498"></a>00498     cpl_test( recipe_create != NULL);
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     recipe_exec   = cpl_plugin_get_exec(plugin);
-<a name="l00501"></a>00501     cpl_test( recipe_exec != NULL);
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503     recipe_deinit = cpl_plugin_get_deinit(plugin);
-<a name="l00504"></a>00504     cpl_test( recipe_deinit != NULL);
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506     <span class="comment">/* Only plugins of type recipe are tested (further)  */</span>
-<a name="l00507"></a>00507     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {
-<a name="l00508"></a>00508         cpl_msg_warning(cpl_func, <span class="stringliteral">"This plugin is not of type recipe, "</span>
-<a name="l00509"></a>00509                       <span class="stringliteral">"cannot test further"</span>);
-<a name="l00510"></a>00510         <span class="keywordflow">return</span> 0;
-<a name="l00511"></a>00511     }
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513     <span class="keywordflow">if</span> (recipe_create != NULL && recipe_exec != NULL && recipe_deinit != NULL) {
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515         cpl_test_zero(recipe_create(plugin));
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517         recipe = (cpl_recipe *) plugin;
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519         cpl_test_nonnull( recipe->parameters );
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521         recipe_parameterlist_set(recipe->parameters);
-<a name="l00522"></a>00522 
-<a name="l00523"></a>00523         cpl_parameterlist_dump(recipe->parameters, stream);
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525         recipe->frames = cpl_frameset_new();
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527         <span class="keywordflow">if</span> (irplib_plugin_has_sof_from_env(plugin, <span class="stringliteral">"RECIPE_SOF_PATH"</span>)) {
-<a name="l00528"></a>00528 
-<a name="l00529"></a>00529             recipe_sof_test_from_env(plugin);
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531         } <span class="keywordflow">else</span> {
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533             <span class="keyword">const</span> cpl_msg_severity msg_level = cpl_msg_get_level();
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535             <span class="comment">/* Unless the CPL_MSG_LEVEL has been explicitly set, turn off</span>
-<a name="l00536"></a>00536 <span class="comment">               terminal messaging completely while inside this function */</span>
-<a name="l00537"></a>00537             <span class="keywordflow">if</span> (getenv(<span class="stringliteral">"CPL_MSG_LEVEL"</span>) == NULL) cpl_msg_set_level(CPL_MSG_OFF);
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of pre-existing CPL error "</span>
-<a name="l00540"></a>00540                          <span class="stringliteral">"state - may produce warning(s)/error(s):"</span>);
-<a name="l00541"></a>00541             cpl_error_set(cpl_func, CPL_ERROR_EOL);
-<a name="l00542"></a>00542             <span class="comment">/* Call recipe and expect non-zero return code */</span>
-<a name="l00543"></a>00543             cpl_test( recipe_exec(plugin) );
-<a name="l00544"></a>00544             <span class="comment">/* Expect also the CPL error code to be preserved */</span>
-<a name="l00545"></a>00545             cpl_test_error( CPL_ERROR_EOL );
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of empty frameset - "</span>
-<a name="l00548"></a>00548                          <span class="stringliteral">"may produce warning(s)/error(s):"</span>);
-<a name="l00549"></a>00549             <span class="comment">/* Call recipe and expect non-zero return code */</span>
-<a name="l00550"></a>00550             cpl_test( recipe_exec(plugin) );
-<a name="l00551"></a>00551             error = cpl_error_get_code();
-<a name="l00552"></a>00552             <span class="comment">/* Expect also the CPL error code to be set */</span>
-<a name="l00553"></a>00553             cpl_test_error( error );
-<a name="l00554"></a>00554             cpl_test( error );
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of dummy frameset - "</span>
-<a name="l00557"></a>00557                          <span class="stringliteral">"may produce warning(s)/error(s):"</span>);
-<a name="l00558"></a>00558             <span class="keywordflow">do</span> {
-<a name="l00559"></a>00559                 cpl_frame * f = cpl_frame_new();
-<a name="l00560"></a>00560                 error = cpl_frame_set_filename(f, <span class="stringliteral">"/dev/null"</span>);
-<a name="l00561"></a>00561                 cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00562"></a>00562                 error = cpl_frame_set_tag(f, <span class="stringliteral">"RECIPE_DUMMY_TAG"</span>);
-<a name="l00563"></a>00563                 cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00564"></a>00564                 error = cpl_frameset_insert(recipe->frames, f);
-<a name="l00565"></a>00565                 cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567                 <span class="comment">/* Call recipe and expect non-zero return code */</span>
-<a name="l00568"></a>00568                 cpl_test( recipe_exec(plugin) );
-<a name="l00569"></a>00569                 error = cpl_error_get_code();
-<a name="l00570"></a>00570                 <span class="comment">/* Expect also the CPL error code to be set */</span>
-<a name="l00571"></a>00571                 cpl_test_error( error );
-<a name="l00572"></a>00572                 cpl_test( error );
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574                 error = cpl_frameset_erase_frame(recipe->frames, f);
-<a name="l00575"></a>00575                 cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00576"></a>00576 
-<a name="l00577"></a>00577             } <span class="keywordflow">while</span> (0);
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579 <span class="preprocessor">#ifdef IRPLIB_TEST_RANDOM_SOF</span>
-<a name="l00580"></a>00580 <span class="preprocessor"></span>            recipe_sof_test_devfile(plugin, DEV_RANDOM, nstr, astr);
-<a name="l00581"></a>00581 <span class="preprocessor">#endif</span>
-<a name="l00582"></a>00582 <span class="preprocessor"></span>
-<a name="l00583"></a>00583             recipe_sof_test_devfile(plugin, <span class="stringliteral">"/dev/null"</span>, nstr, astr);
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585             recipe_sof_test_devfile(plugin, <span class="stringliteral">"."</span>, nstr, astr);
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587             recipe_sof_test_image_empty(plugin, nstr, astr);
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589             recipe_sof_test_local(plugin);
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591             cpl_msg_set_level(msg_level);
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593         }
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595         cpl_frameset_delete(recipe->frames);
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597         error = recipe_deinit(plugin);
-<a name="l00598"></a>00598         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00599"></a>00599     }
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601     <span class="keywordflow">if</span> (stream != stdout) fclose(stream);
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     <span class="keywordflow">return</span> 0;
-<a name="l00604"></a>00604 }
-<a name="l00605"></a>00605 
-<a name="l00608"></a>00608 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00618"></a>00618 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00619"></a>00619 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_parameterlist_set(cpl_parameterlist * <span class="keyword">self</span>)
-<a name="l00620"></a>00620 {
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622     cpl_parameter * p = cpl_parameterlist_get_first(<span class="keyword">self</span>);
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624     <span class="keywordflow">for</span> (; p != NULL; p = cpl_parameterlist_get_next(<span class="keyword">self</span>)) {
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626         <span class="keyword">const</span> <span class="keywordtype">char</span> * envvar;
-<a name="l00627"></a>00627         <span class="keyword">const</span> <span class="keywordtype">char</span> * svalue;
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629         <span class="comment">/* FIXME: Needed ? */</span>
-<a name="l00630"></a>00630         <span class="keywordflow">if</span> (cpl_parameter_get_default_flag(p)) <span class="keywordflow">continue</span>;
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632         cpl_msg_debug(cpl_func, __FILE__ <span class="stringliteral">" line %u: OK"</span>, __LINE__);
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634         envvar = cpl_parameter_get_alias(p, CPL_PARAMETER_MODE_ENV);
-<a name="l00635"></a>00635         svalue = envvar ? getenv(envvar) : NULL;
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637         <span class="keywordflow">switch</span> (cpl_parameter_get_type(p)) {
-<a name="l00638"></a>00638         <span class="keywordflow">case</span> CPL_TYPE_BOOL: {
-<a name="l00639"></a>00639             <span class="keyword">const</span> <span class="keywordtype">int</span> value
-<a name="l00640"></a>00640                 = svalue ? atoi(svalue) : cpl_parameter_get_default_bool(p);
-<a name="l00641"></a>00641             cpl_parameter_set_bool(p, value);
-<a name="l00642"></a>00642             <span class="keywordflow">break</span>;
-<a name="l00643"></a>00643         }
-<a name="l00644"></a>00644         <span class="keywordflow">case</span> CPL_TYPE_INT: {
-<a name="l00645"></a>00645             <span class="keyword">const</span> <span class="keywordtype">int</span> value
-<a name="l00646"></a>00646                 = svalue ? atoi(svalue) : cpl_parameter_get_default_int(p);
-<a name="l00647"></a>00647             cpl_parameter_set_int(p, value);
-<a name="l00648"></a>00648             <span class="keywordflow">break</span>;
-<a name="l00649"></a>00649         }
-<a name="l00650"></a>00650         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: {
-<a name="l00651"></a>00651             <span class="keyword">const</span> <span class="keywordtype">double</span> value
-<a name="l00652"></a>00652                 = svalue ? atof(svalue) : cpl_parameter_get_default_double(p);
-<a name="l00653"></a>00653             cpl_parameter_set_double(p, value);
-<a name="l00654"></a>00654             <span class="keywordflow">break</span>;
-<a name="l00655"></a>00655         }
-<a name="l00656"></a>00656         <span class="keywordflow">case</span> CPL_TYPE_STRING:
-<a name="l00657"></a>00657             {
-<a name="l00658"></a>00658                 <span class="keyword">const</span> <span class="keywordtype">char</span> * s_default = cpl_parameter_get_default_string(p);
-<a name="l00659"></a>00659                 <span class="comment">/* Replace NULL with "" */</span>
-<a name="l00660"></a>00660                 <span class="keyword">const</span> <span class="keywordtype">char</span> * value
-<a name="l00661"></a>00661                     = svalue ? svalue : (s_default ? s_default : <span class="stringliteral">""</span>);
-<a name="l00662"></a>00662                 cpl_parameter_set_string(p, value);
-<a name="l00663"></a>00663                 <span class="keywordflow">break</span>;
-<a name="l00664"></a>00664             }
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666         <span class="keywordflow">default</span>:
-<a name="l00667"></a>00667             assert( 0 ); <span class="comment">/* It is a testing error to reach this point */</span>
-<a name="l00668"></a>00668         }
-<a name="l00669"></a>00669     }
-<a name="l00670"></a>00670 }
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00683"></a>00683 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00684"></a>00684 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_devfile(cpl_plugin * plugin, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename,
-<a name="l00685"></a>00685                                     <span class="keywordtype">size_t</span> nstr, <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[])
-<a name="l00686"></a>00686 {
-<a name="l00687"></a>00687     cpl_recipe * recipe  = (cpl_recipe*)plugin;
-<a name="l00688"></a>00688     int       (*recipe_exec) (cpl_plugin *);
-<a name="l00689"></a>00689     cpl_frameset * copy;
-<a name="l00690"></a>00690     cpl_error_code error;
-<a name="l00691"></a>00691     <span class="keywordtype">size_t</span> i;
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694     <span class="keywordflow">if</span> (nstr < 1) <span class="keywordflow">return</span>;
-<a name="l00695"></a>00695     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span>;
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697     cpl_msg_info(cpl_func, <span class="stringliteral">"Testing recipe with %u %s as input "</span>,
-<a name="l00698"></a>00698                  (<span class="keywordtype">unsigned</span>)nstr, filename);
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700     <span class="keywordflow">for</span> (i = 0; i < nstr; i++) {
-<a name="l00701"></a>00701         cpl_frame * f = cpl_frame_new();
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703         error = cpl_frame_set_filename(f, filename);
-<a name="l00704"></a>00704         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706         error = cpl_frame_set_tag(f, astr[i]);
-<a name="l00707"></a>00707         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709         error = cpl_frameset_insert(recipe->frames, f);
-<a name="l00710"></a>00710         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00711"></a>00711     }
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713     copy = cpl_frameset_duplicate(recipe->frames);
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715     recipe_exec = cpl_plugin_get_exec(plugin);
-<a name="l00716"></a>00716     cpl_test( recipe_exec != NULL);
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718     <span class="keywordflow">if</span> (recipe_exec != NULL) {
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720         <span class="comment">/* Call recipe and expect non-zero return code */</span>
-<a name="l00721"></a>00721         cpl_test( recipe_exec(plugin) );
-<a name="l00722"></a>00722         error = cpl_error_get_code();
-<a name="l00723"></a>00723         <span class="comment">/* Expect also the CPL error code to be set */</span>
-<a name="l00724"></a>00724         cpl_test_error( error );
-<a name="l00725"></a>00725         cpl_test( error );
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727         recipe_frameset_test_frameset_diff(recipe->frames, copy);
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729         recipe_frameset_empty(recipe->frames);
-<a name="l00730"></a>00730     }
-<a name="l00731"></a>00731 
-<a name="l00732"></a>00732     cpl_frameset_delete(copy);
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734     <span class="keywordflow">return</span>;
-<a name="l00735"></a>00735 }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00744"></a>00744 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00745"></a>00745 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_image_empty(cpl_plugin * plugin, <span class="keywordtype">size_t</span> nstr,
-<a name="l00746"></a>00746                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[])
-<a name="l00747"></a>00747 {
-<a name="l00748"></a>00748     cpl_recipe * recipe  = (cpl_recipe*)plugin;
-<a name="l00749"></a>00749     int       (*recipe_exec) (cpl_plugin *);
-<a name="l00750"></a>00750     cpl_frameset * copy;
-<a name="l00751"></a>00751     cpl_error_code error;
-<a name="l00752"></a>00752     <span class="keywordtype">size_t</span> i;
-<a name="l00753"></a>00753     cpl_frame * frame;
-<a name="l00754"></a>00754     cpl_image * iempty;
-<a name="l00755"></a>00755     <span class="keywordtype">int</span> retstat;
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     <span class="keywordflow">if</span> (nstr < 1) <span class="keywordflow">return</span>;
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760     cpl_msg_info(cpl_func, <span class="stringliteral">"Testing recipe with %u empty images as input "</span>,
-<a name="l00761"></a>00761                  (<span class="keywordtype">unsigned</span>)nstr);
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763     iempty = cpl_image_new(13, 17, CPL_TYPE_FLOAT);
-<a name="l00764"></a>00764     cpl_test_nonnull(iempty);
-<a name="l00765"></a>00765 
-<a name="l00766"></a>00766     <span class="keywordflow">for</span> (i = 0; i < nstr; i++) {
-<a name="l00767"></a>00767         cpl_frame * f = cpl_frame_new();
-<a name="l00768"></a>00768         <span class="keywordtype">char</span> * rawname = cpl_sprintf(<span class="stringliteral">"raw%05u.fits"</span>, (<span class="keywordtype">unsigned</span>)(i+1));
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770         error = cpl_image_save(iempty, rawname,CPL_BPP_IEEE_FLOAT, NULL,
-<a name="l00771"></a>00771                                CPL_IO_DEFAULT);
-<a name="l00772"></a>00772         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774         error = cpl_frame_set_filename(f, rawname);
-<a name="l00775"></a>00775         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00776"></a>00776 
-<a name="l00777"></a>00777         error = cpl_frame_set_tag(f, astr[i]);
-<a name="l00778"></a>00778         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780         error = cpl_frameset_insert(recipe->frames, f);
-<a name="l00781"></a>00781         cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00782"></a>00782 
-<a name="l00783"></a>00783         cpl_free(rawname);
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785     cpl_image_delete(iempty);
-<a name="l00786"></a>00786 
-<a name="l00787"></a>00787     copy = cpl_frameset_duplicate(recipe->frames);
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789     recipe_exec = cpl_plugin_get_exec(plugin);
-<a name="l00790"></a>00790     cpl_test(recipe_exec != NULL);
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792     <span class="keywordflow">if</span> (recipe_exec != NULL) {
-<a name="l00793"></a>00793 
-<a name="l00794"></a>00794         <span class="comment">/* Call recipe and expect consistency between return code and</span>
-<a name="l00795"></a>00795 <span class="comment">           CPL error */</span>
-<a name="l00796"></a>00796 
-<a name="l00797"></a>00797         retstat = recipe_exec(plugin);
-<a name="l00798"></a>00798         error = cpl_error_get_code();
-<a name="l00799"></a>00799         <span class="comment">/* Expect also the CPL error code to be set */</span>
-<a name="l00800"></a>00800         <span class="keywordflow">if</span> (error == 0) {
-<a name="l00801"></a>00801             cpl_test_zero(retstat);
-<a name="l00802"></a>00802         } <span class="keywordflow">else</span> {
-<a name="l00803"></a>00803             cpl_test(retstat);
-<a name="l00804"></a>00804         }
-<a name="l00805"></a>00805         cpl_test_error( error );
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807         recipe_frameset_test_frameset_diff(recipe->frames, copy);
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809         <span class="keywordflow">for</span> (frame = cpl_frameset_get_first(recipe->frames); frame != NULL;
-<a name="l00810"></a>00810              frame = cpl_frameset_get_next(recipe->frames))
-<a name="l00811"></a>00811             {
-<a name="l00812"></a>00812                 cpl_test_zero( <span class="keyword">remove</span>(cpl_frame_get_filename(frame)) );
-<a name="l00813"></a>00813             }
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815         recipe_frameset_empty(recipe->frames);
-<a name="l00816"></a>00816     }
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818     cpl_frameset_delete(copy);
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820     <span class="keywordflow">return</span>;
-<a name="l00821"></a>00821 }
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00832"></a>00832 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00833"></a>00833 cpl_boolean irplib_plugin_has_sof_from_env(<span class="keyword">const</span> cpl_plugin * plugin,
-<a name="l00834"></a>00834                                            <span class="keyword">const</span> <span class="keywordtype">char</span> * envname)
-<a name="l00835"></a>00835 {
-<a name="l00836"></a>00836     <span class="keyword">const</span> <span class="keywordtype">char</span>      * recipename = cpl_plugin_get_name(plugin);
-<a name="l00837"></a>00837     <span class="keyword">const</span> <span class="keywordtype">char</span>      * sof_path   = envname ? getenv(envname) : NULL;
-<a name="l00838"></a>00838     cpl_frameset    * frames;
-<a name="l00839"></a>00839     <span class="keywordtype">char</span>            * sof_name;
-<a name="l00840"></a>00840     <span class="keyword">const</span> cpl_frame * ffirst;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842     cpl_ensure(plugin  != NULL, CPL_ERROR_NULL_INPUT, CPL_FALSE);
-<a name="l00843"></a>00843     cpl_ensure(envname != NULL, CPL_ERROR_NULL_INPUT, CPL_FALSE);
-<a name="l00844"></a>00844     cpl_ensure(recipename != NULL, CPL_ERROR_DATA_NOT_FOUND, CPL_FALSE);
-<a name="l00845"></a>00845     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), CPL_FALSE);
-<a name="l00846"></a>00846 
-<a name="l00847"></a>00847     <span class="keywordflow">if</span> (sof_path == NULL) <span class="keywordflow">return</span> CPL_FALSE;
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849     sof_name = cpl_sprintf(<span class="stringliteral">"%s/%s.sof"</span>, sof_path, recipename);
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851     frames = cpl_frameset_new();
-<a name="l00852"></a>00852     recipe_frameset_load(frames, sof_name);
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854     ffirst = cpl_frameset_get_first_const(frames);
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     cpl_free(sof_name);
-<a name="l00857"></a>00857     cpl_frameset_delete(frames);
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), CPL_FALSE);
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861     <span class="keywordflow">return</span> ffirst ? CPL_TRUE : CPL_FALSE;
-<a name="l00862"></a>00862 
-<a name="l00863"></a>00863 }
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00872"></a>00872 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00873"></a>00873 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_from_env(cpl_plugin * plugin)
-<a name="l00874"></a>00874 {
-<a name="l00875"></a>00875     cpl_recipe * recipe  = (cpl_recipe*)plugin;
-<a name="l00876"></a>00876     <span class="keyword">const</span> <span class="keywordtype">char</span> * recipename = cpl_plugin_get_name(plugin);
-<a name="l00877"></a>00877     <span class="keyword">const</span> <span class="keywordtype">char</span> * var_name = <span class="stringliteral">"RECIPE_SOF_PATH"</span>;
-<a name="l00878"></a>00878     <span class="keyword">const</span> <span class="keywordtype">char</span> * sof_path = getenv(var_name);
-<a name="l00879"></a>00879     cpl_error_code error;
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881     <span class="keywordtype">char</span> * sof_name;
-<a name="l00882"></a>00882 
-<a name="l00883"></a>00883     <span class="keywordflow">if</span> (sof_path == NULL) {
-<a name="l00884"></a>00884         cpl_msg_warning(cpl_func, <span class="stringliteral">"Environment variable %s is unset: "</span>
-<a name="l00885"></a>00885                         <span class="stringliteral">"No SOFs to check"</span>, var_name);
-<a name="l00886"></a>00886         <span class="keywordflow">return</span>;
-<a name="l00887"></a>00887     }
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOFs in %s"</span>, sof_path);
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     cpl_test_nonnull( recipename );
-<a name="l00892"></a>00892     <span class="keywordflow">if</span> (recipename == NULL) <span class="keywordflow">return</span>;
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894     sof_name = cpl_sprintf(<span class="stringliteral">"%s/%s.sof"</span>, sof_path, recipename);
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOF %s"</span>, sof_name);
-<a name="l00897"></a>00897     
-<a name="l00898"></a>00898     recipe_frameset_load(recipe->frames, sof_name);
-<a name="l00899"></a>00899 
-<a name="l00900"></a>00900     <span class="keywordflow">if</span> (!cpl_frameset_is_empty(recipe->frames)) {
-<a name="l00901"></a>00901 
-<a name="l00902"></a>00902         int          (*recipe_exec  ) (cpl_plugin *);
-<a name="l00903"></a>00903         cpl_frameset * copy = cpl_frameset_duplicate(recipe->frames);
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905         recipe_exec   = cpl_plugin_get_exec(plugin);
-<a name="l00906"></a>00906         cpl_test(recipe_exec != NULL);
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908         <span class="keywordflow">if</span> (recipe_exec != NULL) {
-<a name="l00909"></a>00909             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of SOF: %s"</span>, sof_name);
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911             <span class="comment">/* Call recipe and expect zero return code */</span>
-<a name="l00912"></a>00912             cpl_test_zero( recipe_exec(plugin) );
-<a name="l00913"></a>00913             <span class="comment">/* Expect also the CPL error code to be clear */</span>
-<a name="l00914"></a>00914             cpl_test_error(CPL_ERROR_NONE);
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916             error = cpl_dfs_update_product_header(recipe->frames);
-<a name="l00917"></a>00917             cpl_test_eq_error(error, CPL_ERROR_NONE);
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919             recipe_frameset_test_frameset_diff(recipe->frames, copy);
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921             recipe_frameset_empty(recipe->frames);
-<a name="l00922"></a>00922         }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924         cpl_frameset_delete(copy);
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926     }
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     cpl_free(sof_name);
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930     <span class="keywordflow">return</span>;
-<a name="l00931"></a>00931 }
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00942"></a>00942 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00943"></a>00943 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_local(cpl_plugin * plugin)
-<a name="l00944"></a>00944 {
-<a name="l00945"></a>00945     cpl_recipe * recipe  = (cpl_recipe*)plugin;
-<a name="l00946"></a>00946     <span class="keyword">const</span> <span class="keywordtype">char</span> * recipename = cpl_plugin_get_name(plugin);
-<a name="l00947"></a>00947     cpl_error_code error;
-<a name="l00948"></a>00948     <span class="keywordtype">char</span> * sof_name = cpl_sprintf(<span class="stringliteral">"%s.sof"</span>, recipename);
-<a name="l00949"></a>00949 
-<a name="l00950"></a>00950     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOF %s"</span>, sof_name);
-<a name="l00951"></a>00951     
-<a name="l00952"></a>00952     recipe_frameset_load(recipe->frames, sof_name);
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954     <span class="keywordflow">if</span> (!cpl_frameset_is_empty(recipe->frames)) {
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956         int          (*recipe_exec  ) (cpl_plugin *);
-<a name="l00957"></a>00957         cpl_frameset * copy = cpl_frameset_duplicate(recipe->frames);
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959         recipe_exec   = cpl_plugin_get_exec(plugin);
-<a name="l00960"></a>00960         cpl_test(recipe_exec != NULL);
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962         <span class="keywordflow">if</span> (recipe_exec != NULL) {
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of SOF: %s"</span>, sof_name);
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966             <span class="comment">/* Call recipe and expect zero return code */</span>
-<a name="l00967"></a>00967             cpl_test_zero( recipe_exec(plugin) );
-<a name="l00968"></a>00968             <span class="comment">/* Expect also the CPL error code to be clear */</span>
-<a name="l00969"></a>00969             cpl_test_error(CPL_ERROR_NONE);
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971             error = cpl_dfs_update_product_header(recipe->frames);
-<a name="l00972"></a>00972             cpl_test_eq_error( error, CPL_ERROR_NONE );
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974             recipe_frameset_test_frameset_diff(recipe->frames, copy);
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976             recipe_frameset_empty(recipe->frames);
-<a name="l00977"></a>00977         }
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979         cpl_frameset_delete(copy);
-<a name="l00980"></a>00980     }
-<a name="l00981"></a>00981 
-<a name="l00982"></a>00982     cpl_free(sof_name);
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984     <span class="keywordflow">return</span>;
-<a name="l00985"></a>00985 }
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987 
-<a name="l00988"></a>00988 
-<a name="l00989"></a>00989 
-<a name="l00990"></a>00990 <span class="comment">/**********************************************************************/</span>
-<a name="l01004"></a>01004 <span class="comment">/**********************************************************************/</span>
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_load(cpl_frameset * <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
-<a name="l01007"></a>01007 {
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009     FILE *fp;
-<a name="l01010"></a>01010     <span class="keywordtype">char</span> line[LINE_LEN_MAX];
-<a name="l01011"></a>01011     <span class="keywordtype">char</span> path[LINE_LEN_MAX], group[LINE_LEN_MAX], tag[LINE_LEN_MAX];
-<a name="l01012"></a>01012     <span class="keywordtype">int</span> line_number;
-<a name="l01013"></a>01013 
-<a name="l01014"></a>01014     assert( <span class="keyword">set</span> != NULL );
-<a name="l01015"></a>01015     assert( name != NULL );
-<a name="l01016"></a>01016 
-<a name="l01017"></a>01017     fp = fopen(name, <span class="stringliteral">"r"</span>);
-<a name="l01018"></a>01018     <span class="keywordflow">if</span> (fp == NULL) {
-<a name="l01019"></a>01019         cpl_msg_debug(cpl_func, <span class="stringliteral">"Unable to open SOF file '%s'"</span>, name);
-<a name="l01020"></a>01020         <span class="keywordflow">return</span>;
-<a name="l01021"></a>01021     }
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023     <span class="comment">/* Loop over all the lines in the set-of-frames file */</span>
-<a name="l01024"></a>01024     <span class="keywordflow">for</span> (line_number = 0; fgets(line, LINE_LEN_MAX - 1, fp); line_number++) {
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026         cpl_frame_group grp;
-<a name="l01027"></a>01027         cpl_frame * frame;
-<a name="l01028"></a>01028         <span class="keywordtype">int</span> n;
-<a name="l01029"></a>01029 
-<a name="l01030"></a>01030         <span class="keywordflow">if</span> (line[0] == <span class="charliteral">'#'</span>) <span class="keywordflow">continue</span>;
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032         n = sscanf(line, <span class="stringliteral">"%s %s %s"</span>, path, tag, group);
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034         <span class="keywordflow">if</span> (n < 1) {
-<a name="l01035"></a>01035             cpl_msg_warning(cpl_func, <span class="stringliteral">"Spurious line no. %d in %s: %s"</span>,
-<a name="l01036"></a>01036                             line_number, name, line);
-<a name="l01037"></a>01037             <span class="keywordflow">break</span>;
-<a name="l01038"></a>01038         }
-<a name="l01039"></a>01039 
-<a name="l01040"></a>01040         <span class="comment">/* Allocate a new frame */</span>
-<a name="l01041"></a>01041         frame = cpl_frame_new();
-<a name="l01042"></a>01042 
-<a name="l01043"></a>01043         <span class="comment">/* Set the filename component of the frame */</span>
-<a name="l01044"></a>01044         cpl_frame_set_filename(frame, path);
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046         <span class="comment">/* Set the tag component of the frame (or set a default) */</span>
-<a name="l01047"></a>01047         cpl_frame_set_tag(frame, n == 1 ? <span class="stringliteral">""</span> : tag);
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049         cpl_frameset_insert(<span class="keyword">set</span>, frame);
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051         <span class="comment">/* Set the group component of the frame (or set a default) */</span>
-<a name="l01052"></a>01052         <span class="keywordflow">if</span> (n < 3) <span class="keywordflow">continue</span>;
-<a name="l01053"></a>01053 
-<a name="l01054"></a>01054         <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_RAW_ID))
-<a name="l01055"></a>01055             grp = CPL_FRAME_GROUP_RAW;
-<a name="l01056"></a>01056         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_CALIB_ID))
-<a name="l01057"></a>01057             grp = CPL_FRAME_GROUP_CALIB;
-<a name="l01058"></a>01058         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_PRODUCT_ID))
-<a name="l01059"></a>01059             grp = CPL_FRAME_GROUP_PRODUCT;
-<a name="l01060"></a>01060         <span class="keywordflow">else</span>
-<a name="l01061"></a>01061             grp = CPL_FRAME_GROUP_NONE;
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063         cpl_frame_set_group(frame, grp);
-<a name="l01064"></a>01064     }
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066     fclose(fp);
-<a name="l01067"></a>01067 
-<a name="l01068"></a>01068     <span class="keywordflow">return</span>;
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070 }
-<a name="l01071"></a>01071 
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01083"></a>01083 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01084"></a>01084 <span class="keyword">static</span>
-<a name="l01085"></a>01085 <span class="keyword">const</span> cpl_parameter * irplib_parameterlist_get(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,
-<a name="l01086"></a>01086                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,
-<a name="l01087"></a>01087                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,
-<a name="l01088"></a>01088                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)
-<a name="l01089"></a>01089 {
-<a name="l01090"></a>01090 
-<a name="l01091"></a>01091     <span class="keywordtype">char</span>                * paramname;
-<a name="l01092"></a>01092     <span class="keyword">const</span> cpl_parameter * par;
-<a name="l01093"></a>01093 
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095     cpl_ensure(instrume  != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l01096"></a>01096     cpl_ensure(recipe    != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l01097"></a>01097     cpl_ensure(parameter != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l01098"></a>01098 
-<a name="l01099"></a>01099     paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe, parameter);
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101     par = cpl_parameterlist_find_const(<span class="keyword">self</span>, paramname);
-<a name="l01102"></a>01102 
-<a name="l01103"></a>01103     <span class="keywordflow">if</span> (par == NULL) (void)cpl_error_set_message(cpl_func,
-<a name="l01104"></a>01104                                                  cpl_error_get_code()
-<a name="l01105"></a>01105                                                  ? cpl_error_get_code()
-<a name="l01106"></a>01106                                                  : CPL_ERROR_DATA_NOT_FOUND,
-<a name="l01107"></a>01107                                                  <span class="stringliteral">"%s"</span>, paramname);
-<a name="l01108"></a>01108 
-<a name="l01109"></a>01109     cpl_free(paramname);
-<a name="l01110"></a>01110     
-<a name="l01111"></a>01111     <span class="keywordflow">return</span> par;
-<a name="l01112"></a>01112 
-<a name="l01113"></a>01113 }
-<a name="l01114"></a>01114 
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01142"></a>01142 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01143"></a>01143 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_empty(cpl_frameset * <span class="keyword">self</span>)
-<a name="l01144"></a>01144 {
-<a name="l01145"></a>01145     cpl_frame * f;
-<a name="l01146"></a>01146 
-<a name="l01147"></a>01147     <span class="keywordflow">if</span> (<span class="keyword">self</span> == NULL) {
-<a name="l01148"></a>01148         cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l01149"></a>01149         <span class="keywordflow">return</span>;
-<a name="l01150"></a>01150     }
-<a name="l01151"></a>01151 
-<a name="l01152"></a>01152     <span class="keywordflow">for</span> (f = cpl_frameset_get_first(<span class="keyword">self</span>); f != NULL;
-<a name="l01153"></a>01153          f = cpl_frameset_get_first(<span class="keyword">self</span>))
-<a name="l01154"></a>01154         {
-<a name="l01155"></a>01155             cpl_frameset_erase_frame(<span class="keyword">self</span>, f);
-<a name="l01156"></a>01156         }
-<a name="l01157"></a>01157 }
-<a name="l01158"></a>01158 
-<a name="l01159"></a>01159 
-<a name="l01160"></a>01160 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01180"></a>01180 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01181"></a>01181 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frame(<span class="keyword">const</span> cpl_frame * <span class="keyword">self</span>)
-<a name="l01182"></a>01182 {
-<a name="l01183"></a>01183 
-<a name="l01184"></a>01184     cpl_msg_info(cpl_func, <span class="stringliteral">"Validating new frame: %s"</span>,
-<a name="l01185"></a>01185                  cpl_frame_get_filename(<span class="keyword">self</span>));
-<a name="l01186"></a>01186 
-<a name="l01187"></a>01187     cpl_test_nonnull(<span class="keyword">self</span>);
-<a name="l01188"></a>01188 
-<a name="l01189"></a>01189     <span class="comment">/* Frame must be tagged */</span>
-<a name="l01190"></a>01190     cpl_test_nonnull(cpl_frame_get_tag(<span class="keyword">self</span>));
-<a name="l01191"></a>01191 
-<a name="l01192"></a>01192     <span class="comment">/* New frames must be products */</span>
-<a name="l01193"></a>01193     cpl_test_eq(cpl_frame_get_group(<span class="keyword">self</span>), CPL_FRAME_GROUP_PRODUCT);
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195     <span class="keywordflow">if</span> (cpl_frame_get_type(<span class="keyword">self</span>) != CPL_FRAME_TYPE_PAF) {
-<a name="l01196"></a>01196         <span class="comment">/* All but PAF (?) must be FITS */</span>
-<a name="l01197"></a>01197         cpl_test_fits(cpl_frame_get_filename(<span class="keyword">self</span>));
-<a name="l01198"></a>01198     } <span class="keywordflow">else</span> {
-<a name="l01199"></a>01199         <span class="comment">/* Frame must at least have a filename */</span>
-<a name="l01200"></a>01200         cpl_test_nonnull(cpl_frame_get_filename(<span class="keyword">self</span>));
-<a name="l01201"></a>01201     }
-<a name="l01202"></a>01202 }
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01225"></a>01225 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01226"></a>01226 <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frameset_diff(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self</span>,
-<a name="l01227"></a>01227                                                <span class="keyword">const</span> cpl_frameset * other)
-<a name="l01228"></a>01228 {
-<a name="l01229"></a>01229 
-<a name="l01230"></a>01230     <span class="keyword">const</span> cpl_frame * frame = cpl_frameset_get_first_const(other);
-<a name="l01231"></a>01231 
-<a name="l01232"></a>01232     <span class="comment">/* First verify that filenames in other are non-NULL */</span>
-<a name="l01233"></a>01233     <span class="keywordflow">for</span> (;frame != NULL; frame = cpl_frameset_get_next_const(other)) {
-<a name="l01234"></a>01234         <span class="keyword">const</span> <span class="keywordtype">char</span> * file = cpl_frame_get_filename(frame);
-<a name="l01235"></a>01235 
-<a name="l01236"></a>01236         <span class="keywordflow">if</span> (file == NULL) {
-<a name="l01237"></a>01237             cpl_test_nonnull(cpl_frame_get_filename(frame));
-<a name="l01238"></a>01238             <span class="keywordflow">break</span>;
-<a name="l01239"></a>01239         }
-<a name="l01240"></a>01240     }
-<a name="l01241"></a>01241     <span class="keywordflow">if</span> (frame != NULL) <span class="keywordflow">return</span>;
-<a name="l01242"></a>01242 
-<a name="l01243"></a>01243     frame = cpl_frameset_get_first_const(<span class="keyword">self</span>);
-<a name="l01244"></a>01244 
-<a name="l01245"></a>01245     <span class="keywordflow">for</span> (;frame != NULL; frame = cpl_frameset_get_next_const(<span class="keyword">self</span>)) {
-<a name="l01246"></a>01246         <span class="keyword">const</span> cpl_frame * cmp  = cpl_frameset_get_first_const(other);
-<a name="l01247"></a>01247         <span class="keyword">const</span> <span class="keywordtype">char</span> * file = cpl_frame_get_filename(frame);
-<a name="l01248"></a>01248 
-<a name="l01249"></a>01249         <span class="keywordflow">if</span> (file == NULL) {
-<a name="l01250"></a>01250             cpl_test_nonnull(cpl_frame_get_filename(frame));
-<a name="l01251"></a>01251             <span class="keywordflow">continue</span>;
-<a name="l01252"></a>01252         }
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254         <span class="keywordflow">for</span> (;cmp != NULL; cmp = cpl_frameset_get_next_const(other)) {
-<a name="l01255"></a>01255             <span class="keyword">const</span> <span class="keywordtype">char</span> * cfile = cpl_frame_get_filename(cmp);
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257             <span class="keywordflow">if</span> (!strcmp(file, cfile)) <span class="keywordflow">break</span>;
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259         }
-<a name="l01260"></a>01260         <span class="keywordflow">if</span> (cmp == NULL) {
-<a name="l01261"></a>01261             <span class="comment">/* frame is new */</span>
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263             cpl_test_eq(cpl_frame_get_group(frame), CPL_FRAME_GROUP_PRODUCT);
-<a name="l01264"></a>01264             recipe_frameset_test_frame(frame);
-<a name="l01265"></a>01265         }
-<a name="l01266"></a>01266     }
-<a name="l01267"></a>01267 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_plugin.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_plugin.c,v 1.40 2013/08/22 17:44:56 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/08/22 17:44:56 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.40 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "irplib_plugin.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* Maximum line length in SOF-file */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#ifndef LINE_LEN_MAX</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define LINE_LEN_MAX 1024</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/* This device provides quite-random data */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#define DEV_RANDOM "/dev/urandom"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/* Copied from cpl_tools.h */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#define recipe_assert(bool) \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">  ((bool) ? (cpl_msg_debug(cpl_func, \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">     "OK in " __FILE__ " line %d (CPL-error state: '%s' in %s): %s",__LINE__, \</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">       cpl_error_get_message(), cpl_error_get_where(), #bool), 0) \</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">          : (cpl_msg_error(cpl_func, \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">     "Failure in " __FILE__ " line %d (CPL-error state: '%s' in %s): %s", \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">      __LINE__, cpl_error_get_message(), cpl_error_get_where(), #bool), 1))</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">                            Private Function prototypes</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keyword">const</span> cpl_parameter * irplib_parameterlist_get(<span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                                                       <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_parameterlist_set(cpl_parameterlist *);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> cpl_boolean irplib_plugin_has_sof_from_env(<span class="keyword">const</span> cpl_plugin *,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_load(cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_devfile(cpl_plugin *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">size_t</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                    <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_image_empty(cpl_plugin *, <span class="keywordtype">size_t</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_local(cpl_plugin *);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_from_env(cpl_plugin *);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_empty(cpl_frameset *);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frame(<span class="keyword">const</span> cpl_frame *);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frameset_diff(<span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                                <span class="keyword">const</span> cpl_frameset *);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keyword">static</span> cpl_errorstate inistate;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">                            Function definitions</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * irplib_parameterlist_get_string(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                                                          recipe, parameter);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * value;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_ensure(par != NULL, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     value = cpl_parameter_get_string(par);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">if</span> (value == NULL) (void)cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> cpl_boolean irplib_parameterlist_get_bool(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                                          recipe, parameter);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_errorstate        prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     cpl_boolean           value;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_ensure(par != NULL, cpl_error_get_code(), CPL_FALSE);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     value = cpl_parameter_get_bool(par);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keywordtype">int</span> irplib_parameterlist_get_int(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                                          recipe, parameter);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_errorstate        prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordtype">int</span>                   value;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cpl_ensure(par != NULL, cpl_error_get_code(), 0);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     value = cpl_parameter_get_int(par);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keywordtype">double</span> irplib_parameterlist_get_double(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keyword">const</span> cpl_parameter * par = irplib_parameterlist_get(<span class="keyword">self</span>, instrume,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                                          recipe, parameter);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     cpl_errorstate        prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">double</span>                value;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     cpl_ensure(par != NULL, cpl_error_get_code(), 0.0);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     value = cpl_parameter_get_double(par);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) (void)cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> cpl_error_code irplib_parameterlist_set_string(cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * defvalue,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * context,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * man)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     cpl_parameter * par;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                                             parameter);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cpl_ensure_code(paramname != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     par = cpl_parameter_new_value(paramname, CPL_TYPE_STRING, man, context,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                                   defvalue);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_free(paramname);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     cpl_ensure_code(par != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                                     alias ? alias : parameter);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> cpl_error_code irplib_parameterlist_set_bool(cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                                              cpl_boolean  defvalue,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * context,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> * man)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cpl_parameter * par;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                                             parameter);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     cpl_ensure_code(paramname != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     par = cpl_parameter_new_value(paramname, CPL_TYPE_BOOL, man, context,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                   defvalue);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     cpl_free(paramname);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     cpl_ensure_code(par != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                                     alias ? alias : parameter);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> cpl_error_code irplib_parameterlist_set_int(cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                             <span class="keywordtype">int</span>         defvalue,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * context,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> * man)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_parameter * par;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                             parameter);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     cpl_ensure_code(paramname != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     par = cpl_parameter_new_value(paramname, CPL_TYPE_INT, man, context,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                                   defvalue);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     cpl_free(paramname);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     cpl_ensure_code(par != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                                     alias ? alias : parameter);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> cpl_error_code irplib_parameterlist_set_double(cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                                <span class="keywordtype">double</span>       defvalue,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * alias,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * context,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * man)</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     cpl_parameter * par;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keywordtype">char</span>          * paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                             parameter);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     cpl_ensure_code(paramname != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     par = cpl_parameter_new_value(paramname, CPL_TYPE_DOUBLE, man, context,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                   defvalue);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     cpl_free(paramname);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     cpl_ensure_code(par != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     error = cpl_parameter_set_alias(par, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                                     alias ? alias : parameter);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     error = cpl_parameter_disable(par, CPL_PARAMETER_MODE_ENV);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     error = cpl_parameterlist_append(<span class="keyword">self</span>, par);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="keywordtype">int</span> irplib_plugin_test(cpl_pluginlist * <span class="keyword">self</span>, <span class="keywordtype">size_t</span> nstr, <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[]) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     cpl_plugin     * plugin;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     cpl_recipe     * recipe;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     int            (*recipe_create) (cpl_plugin *);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     int            (*recipe_exec  ) (cpl_plugin *);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     int            (*recipe_deinit) (cpl_plugin *);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     FILE         * stream;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     cpl_boolean    is_debug;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     is_debug = cpl_msg_get_level() <= CPL_MSG_DEBUG ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="comment">/* Modified from CPL unit tests */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     stream = is_debug ? stdout : fopen(<span class="stringliteral">"/dev/null"</span>, <span class="stringliteral">"a"</span>);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     inistate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     assert( nstr == 0 || astr != NULL );</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     plugin = cpl_pluginlist_get_first(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordflow">if</span> (plugin == NULL) {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"With an empty pluginlist, "</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                         <span class="stringliteral">"no tests can be made"</span>);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     }</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     cpl_plugin_dump(plugin, stream);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     recipe_create = cpl_plugin_get_init(plugin);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     cpl_test( recipe_create != NULL);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     recipe_exec   = cpl_plugin_get_exec(plugin);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     cpl_test( recipe_exec != NULL);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     recipe_deinit = cpl_plugin_get_deinit(plugin);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     cpl_test( recipe_deinit != NULL);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="comment">/* Only plugins of type recipe are tested (further)  */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) != CPL_PLUGIN_TYPE_RECIPE) {</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"This plugin is not of type recipe, "</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                       <span class="stringliteral">"cannot test further"</span>);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">if</span> (recipe_create != NULL && recipe_exec != NULL && recipe_deinit != NULL) {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         cpl_test_zero(recipe_create(plugin));</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>         cpl_test_nonnull( recipe->parameters );</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         recipe_parameterlist_set(recipe->parameters);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         cpl_parameterlist_dump(recipe->parameters, stream);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         recipe->frames = cpl_frameset_new();</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         <span class="keywordflow">if</span> (irplib_plugin_has_sof_from_env(plugin, <span class="stringliteral">"RECIPE_SOF_PATH"</span>)) {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>             recipe_sof_test_from_env(plugin);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>             <span class="keyword">const</span> cpl_msg_severity msg_level = cpl_msg_get_level();</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>             <span class="comment">/* Unless the CPL_MSG_LEVEL has been explicitly set, turn off</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">               terminal messaging completely while inside this function */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>             <span class="keywordflow">if</span> (getenv(<span class="stringliteral">"CPL_MSG_LEVEL"</span>) == NULL) cpl_msg_set_level(CPL_MSG_OFF);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of pre-existing CPL error "</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                          <span class="stringliteral">"state - may produce warning(s)/error(s):"</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>             cpl_error_set(cpl_func, CPL_ERROR_EOL);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>             <span class="comment">/* Call recipe and expect non-zero return code */</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>             cpl_test( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>             <span class="comment">/* Expect also the CPL error code to be preserved */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>             cpl_test_error( CPL_ERROR_EOL );</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of empty frameset - "</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>                          <span class="stringliteral">"may produce warning(s)/error(s):"</span>);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             <span class="comment">/* Call recipe and expect non-zero return code */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             cpl_test( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             error = cpl_error_get_code();</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>             <span class="comment">/* Expect also the CPL error code to be set */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>             cpl_test_error( error );</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>             cpl_test( error );</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of dummy frameset - "</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                          <span class="stringliteral">"may produce warning(s)/error(s):"</span>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                 cpl_frame * f = cpl_frame_new();</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                 error = cpl_frame_set_filename(f, <span class="stringliteral">"/dev/null"</span>);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>                 cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                 error = cpl_frame_set_tag(f, <span class="stringliteral">"RECIPE_DUMMY_TAG"</span>);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                 cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                 error = cpl_frameset_insert(recipe->frames, f);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                 cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                 <span class="comment">/* Call recipe and expect non-zero return code */</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                 cpl_test( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                 error = cpl_error_get_code();</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                 <span class="comment">/* Expect also the CPL error code to be set */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                 cpl_test_error( error );</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                 cpl_test( error );</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                 error = cpl_frameset_erase_frame(recipe->frames, f);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                 cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>             } <span class="keywordflow">while</span> (0);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="preprocessor">#ifdef IRPLIB_TEST_RANDOM_SOF</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="preprocessor"></span>            recipe_sof_test_devfile(plugin, DEV_RANDOM, nstr, astr);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             recipe_sof_test_devfile(plugin, <span class="stringliteral">"/dev/null"</span>, nstr, astr);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>             recipe_sof_test_devfile(plugin, <span class="stringliteral">"."</span>, nstr, astr);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>             recipe_sof_test_image_empty(plugin, nstr, astr);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>             recipe_sof_test_local(plugin);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>             cpl_msg_set_level(msg_level);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         }</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         cpl_frameset_delete(recipe->frames);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         error = recipe_deinit(plugin);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <span class="keywordflow">if</span> (stream != stdout) fclose(stream);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> }</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_parameterlist_set(cpl_parameterlist * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     cpl_parameter * p = cpl_parameterlist_get_first(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="keywordflow">for</span> (; p != NULL; p = cpl_parameterlist_get_next(<span class="keyword">self</span>)) {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * envvar;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * svalue;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         <span class="comment">/* FIXME: Needed ? */</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>         <span class="keywordflow">if</span> (cpl_parameter_get_default_flag(p)) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         cpl_msg_debug(cpl_func, __FILE__ <span class="stringliteral">" line %u: OK"</span>, __LINE__);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         envvar = cpl_parameter_get_alias(p, CPL_PARAMETER_MODE_ENV);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>         svalue = envvar ? getenv(envvar) : NULL;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         <span class="keywordflow">switch</span> (cpl_parameter_get_type(p)) {</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         <span class="keywordflow">case</span> CPL_TYPE_BOOL: {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> value</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 = svalue ? atoi(svalue) : cpl_parameter_get_default_bool(p);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>             cpl_parameter_set_bool(p, value);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         <span class="keywordflow">case</span> CPL_TYPE_INT: {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> value</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                 = svalue ? atoi(svalue) : cpl_parameter_get_default_int(p);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>             cpl_parameter_set_int(p, value);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         }</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: {</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> value</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                 = svalue ? atof(svalue) : cpl_parameter_get_default_double(p);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>             cpl_parameter_set_double(p, value);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         }</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         <span class="keywordflow">case</span> CPL_TYPE_STRING:</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>             {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                 <span class="keyword">const</span> <span class="keywordtype">char</span> * s_default = cpl_parameter_get_default_string(p);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                 <span class="comment">/* Replace NULL with "" */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                 <span class="keyword">const</span> <span class="keywordtype">char</span> * value</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                     = svalue ? svalue : (s_default ? s_default : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                 cpl_parameter_set_string(p, value);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>             }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>             assert( 0 ); <span class="comment">/* It is a testing error to reach this point */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_devfile(cpl_plugin * plugin, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename,</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>                                     <span class="keywordtype">size_t</span> nstr, <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[])</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> {</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     cpl_recipe * recipe  = (cpl_recipe*)plugin;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     int       (*recipe_exec) (cpl_plugin *);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     cpl_frameset * copy;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordtype">size_t</span> i;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordflow">if</span> (nstr < 1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Testing recipe with %u %s as input "</span>,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                  (<span class="keywordtype">unsigned</span>)nstr, filename);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordflow">for</span> (i = 0; i < nstr; i++) {</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         cpl_frame * f = cpl_frame_new();</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         error = cpl_frame_set_filename(f, filename);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>         error = cpl_frame_set_tag(f, astr[i]);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>         error = cpl_frameset_insert(recipe->frames, f);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     copy = cpl_frameset_duplicate(recipe->frames);</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     recipe_exec = cpl_plugin_get_exec(plugin);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     cpl_test( recipe_exec != NULL);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordflow">if</span> (recipe_exec != NULL) {</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="comment">/* Call recipe and expect non-zero return code */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>         cpl_test( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>         error = cpl_error_get_code();</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>         <span class="comment">/* Expect also the CPL error code to be set */</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         cpl_test_error( error );</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>         cpl_test( error );</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         recipe_frameset_test_frameset_diff(recipe->frames, copy);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         recipe_frameset_empty(recipe->frames);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     cpl_frameset_delete(copy);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_image_empty(cpl_plugin * plugin, <span class="keywordtype">size_t</span> nstr,</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *astr[])</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> {</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     cpl_recipe * recipe  = (cpl_recipe*)plugin;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     int       (*recipe_exec) (cpl_plugin *);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     cpl_frameset * copy;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordtype">size_t</span> i;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     cpl_frame * frame;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     cpl_image * iempty;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keywordtype">int</span> retstat;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordflow">if</span> (nstr < 1) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Testing recipe with %u empty images as input "</span>,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                  (<span class="keywordtype">unsigned</span>)nstr);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     iempty = cpl_image_new(13, 17, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     cpl_test_nonnull(iempty);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     <span class="keywordflow">for</span> (i = 0; i < nstr; i++) {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>         cpl_frame * f = cpl_frame_new();</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         <span class="keywordtype">char</span> * rawname = cpl_sprintf(<span class="stringliteral">"raw%05u.fits"</span>, (<span class="keywordtype">unsigned</span>)(i+1));</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         error = cpl_image_save(iempty, rawname,CPL_BPP_IEEE_FLOAT, NULL,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                                CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         error = cpl_frame_set_filename(f, rawname);</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         error = cpl_frame_set_tag(f, astr[i]);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         error = cpl_frameset_insert(recipe->frames, f);</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>         cpl_free(rawname);</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     cpl_image_delete(iempty);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     copy = cpl_frameset_duplicate(recipe->frames);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     recipe_exec = cpl_plugin_get_exec(plugin);</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     cpl_test(recipe_exec != NULL);</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordflow">if</span> (recipe_exec != NULL) {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         <span class="comment">/* Call recipe and expect consistency between return code and</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="comment">           CPL error */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> </div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>         retstat = recipe_exec(plugin);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         error = cpl_error_get_code();</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         <span class="comment">/* Expect also the CPL error code to be set */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         <span class="keywordflow">if</span> (error == 0) {</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>             cpl_test_zero(retstat);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>             cpl_test(retstat);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         }</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         cpl_test_error( error );</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         recipe_frameset_test_frameset_diff(recipe->frames, copy);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         <span class="keywordflow">for</span> (frame = cpl_frameset_get_first(recipe->frames); frame != NULL;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>              frame = cpl_frameset_get_next(recipe->frames))</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>                 cpl_test_zero( <span class="keyword">remove</span>(cpl_frame_get_filename(frame)) );</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             }</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         recipe_frameset_empty(recipe->frames);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     }</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     cpl_frameset_delete(copy);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> cpl_boolean irplib_plugin_has_sof_from_env(<span class="keyword">const</span> cpl_plugin * plugin,</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>                                            <span class="keyword">const</span> <span class="keywordtype">char</span> * envname)</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      * recipename = cpl_plugin_get_name(plugin);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      * sof_path   = envname ? getenv(envname) : NULL;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     cpl_frameset    * frames;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     <span class="keywordtype">char</span>            * sof_name;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keyword">const</span> cpl_frame * ffirst;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     cpl_ensure(plugin  != NULL, CPL_ERROR_NULL_INPUT, CPL_FALSE);</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     cpl_ensure(envname != NULL, CPL_ERROR_NULL_INPUT, CPL_FALSE);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     cpl_ensure(recipename != NULL, CPL_ERROR_DATA_NOT_FOUND, CPL_FALSE);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), CPL_FALSE);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     <span class="keywordflow">if</span> (sof_path == NULL) <span class="keywordflow">return</span> CPL_FALSE;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> </div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     sof_name = cpl_sprintf(<span class="stringliteral">"%s/%s.sof"</span>, sof_path, recipename);</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     frames = cpl_frameset_new();</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     recipe_frameset_load(frames, sof_name);</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     ffirst = cpl_frameset_get_first_const(frames);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     cpl_free(sof_name);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     cpl_frameset_delete(frames);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), CPL_FALSE);</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     <span class="keywordflow">return</span> ffirst ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> }</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> </div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_from_env(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     cpl_recipe * recipe  = (cpl_recipe*)plugin;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * recipename = cpl_plugin_get_name(plugin);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * var_name = <span class="stringliteral">"RECIPE_SOF_PATH"</span>;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * sof_path = getenv(var_name);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordtype">char</span> * sof_name;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     <span class="keywordflow">if</span> (sof_path == NULL) {</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"Environment variable %s is unset: "</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>                         <span class="stringliteral">"No SOFs to check"</span>, var_name);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOFs in %s"</span>, sof_path);</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     cpl_test_nonnull( recipename );</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <span class="keywordflow">if</span> (recipename == NULL) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     sof_name = cpl_sprintf(<span class="stringliteral">"%s/%s.sof"</span>, sof_path, recipename);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOF %s"</span>, sof_name);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     recipe_frameset_load(recipe->frames, sof_name);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     <span class="keywordflow">if</span> (!cpl_frameset_is_empty(recipe->frames)) {</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>         int          (*recipe_exec  ) (cpl_plugin *);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         cpl_frameset * copy = cpl_frameset_duplicate(recipe->frames);</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> </div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>         recipe_exec   = cpl_plugin_get_exec(plugin);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>         cpl_test(recipe_exec != NULL);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         <span class="keywordflow">if</span> (recipe_exec != NULL) {</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of SOF: %s"</span>, sof_name);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>             <span class="comment">/* Call recipe and expect zero return code */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>             cpl_test_zero( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>             <span class="comment">/* Expect also the CPL error code to be clear */</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>             cpl_test_error(CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>             error = cpl_dfs_update_product_header(recipe->frames);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>             cpl_test_eq_error(error, CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>             recipe_frameset_test_frameset_diff(recipe->frames, copy);</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>             recipe_frameset_empty(recipe->frames);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         cpl_frameset_delete(copy);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     }</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     cpl_free(sof_name);</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_sof_test_local(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> {</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     cpl_recipe * recipe  = (cpl_recipe*)plugin;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * recipename = cpl_plugin_get_name(plugin);</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="keywordtype">char</span> * sof_name = cpl_sprintf(<span class="stringliteral">"%s.sof"</span>, recipename);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking for SOF %s"</span>, sof_name);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     </div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     recipe_frameset_load(recipe->frames, sof_name);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     <span class="keywordflow">if</span> (!cpl_frameset_is_empty(recipe->frames)) {</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>         int          (*recipe_exec  ) (cpl_plugin *);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>         cpl_frameset * copy = cpl_frameset_duplicate(recipe->frames);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         recipe_exec   = cpl_plugin_get_exec(plugin);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         cpl_test(recipe_exec != NULL);</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>         <span class="keywordflow">if</span> (recipe_exec != NULL) {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"Checking handling of SOF: %s"</span>, sof_name);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>             <span class="comment">/* Call recipe and expect zero return code */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>             cpl_test_zero( recipe_exec(plugin) );</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>             <span class="comment">/* Expect also the CPL error code to be clear */</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>             cpl_test_error(CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>             error = cpl_dfs_update_product_header(recipe->frames);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>             cpl_test_eq_error( error, CPL_ERROR_NONE );</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>             recipe_frameset_test_frameset_diff(recipe->frames, copy);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>             recipe_frameset_empty(recipe->frames);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         }</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         cpl_frameset_delete(copy);</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     }</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     cpl_free(sof_name);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> }</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="comment">/**********************************************************************/</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">/**********************************************************************/</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_load(cpl_frameset * <span class="keyword">set</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *name)</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> {</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     FILE *fp;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     <span class="keywordtype">char</span> line[LINE_LEN_MAX];</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordtype">char</span> path[LINE_LEN_MAX], group[LINE_LEN_MAX], tag[LINE_LEN_MAX];</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     <span class="keywordtype">int</span> line_number;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     assert( <span class="keyword">set</span> != NULL );</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     assert( name != NULL );</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     fp = fopen(name, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     <span class="keywordflow">if</span> (fp == NULL) {</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>         cpl_msg_debug(cpl_func, <span class="stringliteral">"Unable to open SOF file '%s'"</span>, name);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     <span class="comment">/* Loop over all the lines in the set-of-frames file */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     <span class="keywordflow">for</span> (line_number = 0; fgets(line, LINE_LEN_MAX - 1, fp); line_number++) {</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         <span class="keywordtype">char</span> scan_fmt[50];</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         cpl_frame_group grp;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         cpl_frame * frame;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         <span class="keywordtype">int</span> n;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         <span class="keywordflow">if</span> (line[0] == <span class="charliteral">'#'</span>) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         snprintf(scan_fmt, 49, <span class="stringliteral">"%%%ds %%%ds %%%ds"</span>, LINE_LEN_MAX - 1,</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>                  LINE_LEN_MAX - 1, LINE_LEN_MAX - 1); </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         n = sscanf(line, scan_fmt, path, tag, group);</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         <span class="keywordflow">if</span> (n < 1) {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>             cpl_msg_warning(cpl_func, <span class="stringliteral">"Spurious line no. %d in %s: %s"</span>,</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>                             line_number, name, line);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>         }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>         <span class="comment">/* Allocate a new frame */</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         frame = cpl_frame_new();</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         <span class="comment">/* Set the filename component of the frame */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>         cpl_frame_set_filename(frame, path);</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         <span class="comment">/* Set the tag component of the frame (or set a default) */</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         cpl_frame_set_tag(frame, n == 1 ? <span class="stringliteral">""</span> : tag);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>         cpl_frameset_insert(<span class="keyword">set</span>, frame);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         <span class="comment">/* Set the group component of the frame (or set a default) */</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>         <span class="keywordflow">if</span> (n < 3) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>         <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_RAW_ID))</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>             grp = CPL_FRAME_GROUP_RAW;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_CALIB_ID))</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>             grp = CPL_FRAME_GROUP_CALIB;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(group, CPL_FRAME_GROUP_PRODUCT_ID))</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>             grp = CPL_FRAME_GROUP_PRODUCT;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>             grp = CPL_FRAME_GROUP_NONE;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>         cpl_frame_set_group(frame, grp);</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     }</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     fclose(fp);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keyword">const</span> cpl_parameter * irplib_parameterlist_get(<span class="keyword">const</span> cpl_parameterlist * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * instrume,</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * recipe,</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> * parameter)</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> {</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordtype">char</span>                * paramname;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="keyword">const</span> cpl_parameter * par;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     cpl_ensure(instrume  != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     cpl_ensure(recipe    != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     cpl_ensure(parameter != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     paramname = cpl_sprintf(<span class="stringliteral">"%s.%s.%s"</span>, instrume, recipe, parameter);</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     par = cpl_parameterlist_find_const(<span class="keyword">self</span>, paramname);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     <span class="keywordflow">if</span> (par == NULL) (void)cpl_error_set_message(cpl_func,</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                                                  cpl_error_get_code()</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                                                  ? cpl_error_get_code()</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                                                  : CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>                                                  <span class="stringliteral">"%s"</span>, paramname);</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     cpl_free(paramname);</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     <span class="keywordflow">return</span> par;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> }</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_empty(cpl_frameset * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     cpl_frame * f;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>     <span class="keywordflow">if</span> (<span class="keyword">self</span> == NULL) {</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>         cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     }</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="keywordflow">for</span> (f = cpl_frameset_get_first(<span class="keyword">self</span>); f != NULL;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>          f = cpl_frameset_get_first(<span class="keyword">self</span>))</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>         {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>             cpl_frameset_erase_frame(<span class="keyword">self</span>, f);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>         }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> }</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> </div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frame(<span class="keyword">const</span> cpl_frame * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Validating new frame: %s"</span>,</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>                  cpl_frame_get_filename(<span class="keyword">self</span>));</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     cpl_test_nonnull(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <span class="comment">/* Frame must be tagged */</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     cpl_test_nonnull(cpl_frame_get_tag(<span class="keyword">self</span>));</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="comment">/* New frames must be products */</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     cpl_test_eq(cpl_frame_get_group(<span class="keyword">self</span>), CPL_FRAME_GROUP_PRODUCT);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordflow">if</span> (cpl_frame_get_type(<span class="keyword">self</span>) != CPL_FRAME_TYPE_PAF) {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         <span class="comment">/* All but PAF (?) must be FITS */</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         cpl_test_fits(cpl_frame_get_filename(<span class="keyword">self</span>));</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>         <span class="comment">/* Frame must at least have a filename */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         cpl_test_nonnull(cpl_frame_get_filename(<span class="keyword">self</span>));</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     }</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> }</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> </div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="keyword">static</span> <span class="keywordtype">void</span> recipe_frameset_test_frameset_diff(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                                                <span class="keyword">const</span> cpl_frameset * other)</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> {</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     <span class="keyword">const</span> cpl_frame * frame = cpl_frameset_get_first_const(other);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="comment">/* First verify that filenames in other are non-NULL */</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     <span class="keywordflow">for</span> (;frame != NULL; frame = cpl_frameset_get_next_const(other)) {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * file = cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>         <span class="keywordflow">if</span> (file == NULL) {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>             cpl_test_nonnull(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>         }</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     }</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>     <span class="keywordflow">if</span> (frame != NULL) <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> </div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     frame = cpl_frameset_get_first_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> </div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     <span class="keywordflow">for</span> (;frame != NULL; frame = cpl_frameset_get_next_const(<span class="keyword">self</span>)) {</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>         <span class="keyword">const</span> cpl_frame * cmp  = cpl_frameset_get_first_const(other);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * file = cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>         <span class="keywordflow">if</span> (file == NULL) {</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>             cpl_test_nonnull(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>         }</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>         <span class="keywordflow">for</span> (;cmp != NULL; cmp = cpl_frameset_get_next_const(other)) {</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>             <span class="keyword">const</span> <span class="keywordtype">char</span> * cfile = cpl_frame_get_filename(cmp);</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>             <span class="keywordflow">if</span> (!strcmp(file, cfile)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         }</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>         <span class="keywordflow">if</span> (cmp == NULL) {</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>             <span class="comment">/* frame is new */</span></div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>             cpl_test_eq(cpl_frame_get_group(frame), CPL_FRAME_GROUP_PRODUCT);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             recipe_frameset_test_frame(frame);</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>         }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     }</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__plugin_8h_source.html b/html/irplib__plugin_8h_source.html
index d4b5de5..a1cdc37 100644
--- a/html/irplib__plugin_8h_source.html
+++ b/html/irplib__plugin_8h_source.html
@@ -2,108 +2,139 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_plugin.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_plugin.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_plugin.h,v 1.23 2012/01/11 08:03:37 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package </span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/01/11 08:03:37 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.23 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_PLUGIN_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_PLUGIN_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <irplib_utils.h></span>  <span class="comment">/* irplib_reset() */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                   Define</span>
-<a name="l00041"></a>00041 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* Needed (by uves) to concatenate two macro arguments */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#define IRPLIB_CONCAT(a,b) a ## _ ## b</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CONCAT2X(a,b) IRPLIB_CONCAT(a,b)</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                                   Function prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> irplib_plugin_test(cpl_pluginlist *, <span class="keywordtype">size_t</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 cpl_error_code irplib_parameterlist_set_string(cpl_parameterlist *,
-<a name="l00054"></a>00054                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00055"></a>00055                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, 
-<a name="l00056"></a>00056                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00057"></a>00057                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 cpl_error_code irplib_parameterlist_set_bool(cpl_parameterlist *,
-<a name="l00060"></a>00060                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00061"></a>00061                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_boolean,
-<a name="l00062"></a>00062                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00063"></a>00063                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 cpl_error_code irplib_parameterlist_set_int(cpl_parameterlist *,
-<a name="l00066"></a>00066                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00067"></a>00067                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-<a name="l00068"></a>00068                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00069"></a>00069                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 cpl_error_code irplib_parameterlist_set_double(cpl_parameterlist *,
-<a name="l00072"></a>00072                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00073"></a>00073                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>, 
-<a name="l00074"></a>00074                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00075"></a>00075                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keyword">const</span> <span class="keywordtype">char</span> * irplib_parameterlist_get_string(<span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00078"></a>00078                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00079"></a>00079                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 cpl_boolean irplib_parameterlist_get_bool(<span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00082"></a>00082                                           <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00083"></a>00083                                           <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="keywordtype">int</span> irplib_parameterlist_get_int(<span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00086"></a>00086                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00087"></a>00087                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keywordtype">double</span> irplib_parameterlist_get_double(<span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00090"></a>00090                                        <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00091"></a>00091                                        <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_plugin.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_plugin.h,v 1.23 2012/01/11 08:03:37 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package </span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/01/11 08:03:37 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.23 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_PLUGIN_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_PLUGIN_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <irplib_utils.h></span>  <span class="comment">/* irplib_reset() */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* Needed (by uves) to concatenate two macro arguments */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#define IRPLIB_CONCAT(a,b) a ## _ ## b</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_CONCAT2X(a,b) IRPLIB_CONCAT(a,b)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                   Function prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> irplib_plugin_test(cpl_pluginlist *, <span class="keywordtype">size_t</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *[]);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> cpl_error_code irplib_parameterlist_set_string(cpl_parameterlist *,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> cpl_error_code irplib_parameterlist_set_bool(cpl_parameterlist *,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, cpl_boolean,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> cpl_error_code irplib_parameterlist_set_int(cpl_parameterlist *,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> cpl_error_code irplib_parameterlist_set_double(cpl_parameterlist *,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * irplib_parameterlist_get_string(<span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                              <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> cpl_boolean irplib_parameterlist_get_bool(<span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">int</span> irplib_parameterlist_get_int(<span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">double</span> irplib_parameterlist_get_double(<span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__polynomial_8c_source.html b/html/irplib__polynomial_8c_source.html
index 66b2ccf..60b000a 100644
--- a/html/irplib__polynomial_8c_source.html
+++ b/html/irplib__polynomial_8c_source.html
@@ -2,1250 +2,1281 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_polynomial.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_polynomial.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_polynomial.c,v 1.35 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the ESO Common Pipeline Library</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.35 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "irplib_polynomial.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <assert.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <math.h></span>
-<a name="l00039"></a>00039 <span class="comment">/* DBL_MAX: */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <float.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment">                                   Macro definitions</span>
-<a name="l00053"></a>00053 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="preprocessor">#define IRPLIB_SWAP(a,b) { const double t=(a);(a)=(b);(b)=t; }</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#if 0</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define irplib_trace() cpl_msg_info(cpl_func, "%d: Trace", __LINE__)</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define irplib_trace() </span><span class="comment">/* Trace */</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>
-<a name="l00063"></a>00063 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                                   Static functions</span>
-<a name="l00065"></a>00065 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_2_max(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, cpl_boolean,
-<a name="l00068"></a>00068                                            <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_3_max(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00071"></a>00071                                            cpl_boolean, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00075"></a>00075                                                 <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);
-<a name="l00076"></a>00076 <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_3(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00077"></a>00077                                                 <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00078"></a>00078                                                 cpl_boolean *,
-<a name="l00079"></a>00079                                                 cpl_boolean *);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_31(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00082"></a>00082                                           <span class="keywordtype">double</span> *, cpl_boolean *);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_32(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *,
-<a name="l00085"></a>00085                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, cpl_boolean *);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3r(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00088"></a>00088                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3c(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00091"></a>00091                                           <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00092"></a>00092                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00093"></a>00093                                           cpl_boolean *, cpl_boolean *);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_4(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00096"></a>00096                                                    <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, cpl_size *,
-<a name="l00097"></a>00097                                                    <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00098"></a>00098                                                    <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_nonzero(cpl_polynomial *,
-<a name="l00101"></a>00101                                                          cpl_vector *,
-<a name="l00102"></a>00102                                                          cpl_size *);
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="keyword">static</span> cpl_error_code irplib_polynomial_divide_1d_root(cpl_polynomial *, <span class="keywordtype">double</span>,
-<a name="l00105"></a>00105                                                        <span class="keywordtype">double</span> *);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="preprocessor">#ifdef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_depress_1d(cpl_polynomial *);
-<a name="l00109"></a>00109 <span class="preprocessor">#endif</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span>
-<a name="l00111"></a>00111 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00112"></a>00112 <span class="comment">                              Function codes</span>
-<a name="l00113"></a>00113 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE > CPL_VERSION(5, 92, 0)</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span>
-<a name="l00118"></a>00118 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00133"></a>00133 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00134"></a><a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853">00134</a> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853" title="Add two polynomials of the same dimension.">irplib_polynomial_add</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00135"></a>00135                                      <span class="keyword">const</span> cpl_polynomial * first,
-<a name="l00136"></a>00136                                      <span class="keyword">const</span> cpl_polynomial * second)
-<a name="l00137"></a>00137 {
-<a name="l00138"></a>00138     cpl_size       degree0 = cpl_polynomial_get_degree(<span class="keyword">self</span>);
-<a name="l00139"></a>00139     <span class="keyword">const</span> cpl_size degree1 = cpl_polynomial_get_degree(first);
-<a name="l00140"></a>00140     <span class="keyword">const</span> cpl_size degree2 = cpl_polynomial_get_degree(second);
-<a name="l00141"></a>00141     <span class="keyword">const</span> cpl_size maxdeg  = degree1 > degree2 ? degree1 : degree2;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00145"></a>00145     cpl_ensure_code(first  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00146"></a>00146     cpl_ensure_code(second != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==
-<a name="l00149"></a>00149                     cpl_polynomial_get_dimension(first),
-<a name="l00150"></a>00150                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00151"></a>00151     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==
-<a name="l00152"></a>00152                     cpl_polynomial_get_dimension(second),
-<a name="l00153"></a>00153                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">/* FIXME: */</span>
-<a name="l00156"></a>00156     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00157"></a>00157                     CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159     <span class="keywordflow">if</span> (degree0 < maxdeg) {
-<a name="l00160"></a>00160         degree0 = maxdeg;
-<a name="l00161"></a>00161     } <span class="keywordflow">else</span> {
-<a name="l00162"></a>00162         <span class="comment">/* Reset coefficients in self as needed */</span>
-<a name="l00163"></a>00163         <span class="keywordflow">for</span> (; degree0 > maxdeg; degree0--) {
-<a name="l00164"></a>00164             cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, 0.0);
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     <span class="comment">/* assert( degree0 == maxdeg ); */</span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="keywordflow">for</span> (; degree0 >= 0; degree0--) {
-<a name="l00171"></a>00171         <span class="keyword">const</span> <span class="keywordtype">double</span> val1 = cpl_polynomial_get_coeff(first, &degree0);
-<a name="l00172"></a>00172         <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, &degree0);
-<a name="l00173"></a>00173         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, val1 + val2);
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00177"></a>00177 }
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00194"></a>00194 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00195"></a><a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084">00195</a> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084" title="Subtract two polynomials of the same dimension.">irplib_polynomial_subtract</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00196"></a>00196                                           <span class="keyword">const</span> cpl_polynomial * first,
-<a name="l00197"></a>00197                                           <span class="keyword">const</span> cpl_polynomial * second)
-<a name="l00198"></a>00198 {
-<a name="l00199"></a>00199     cpl_size       degree0 = cpl_polynomial_get_degree(<span class="keyword">self</span>);
-<a name="l00200"></a>00200     <span class="keyword">const</span> cpl_size degree1 = cpl_polynomial_get_degree(first);
-<a name="l00201"></a>00201     <span class="keyword">const</span> cpl_size degree2 = cpl_polynomial_get_degree(second);
-<a name="l00202"></a>00202     <span class="keyword">const</span> cpl_size maxdeg  = degree1 > degree2 ? degree1 : degree2;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00206"></a>00206     cpl_ensure_code(first  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00207"></a>00207     cpl_ensure_code(second != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==
-<a name="l00210"></a>00210                     cpl_polynomial_get_dimension(first),
-<a name="l00211"></a>00211                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00212"></a>00212     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==
-<a name="l00213"></a>00213                     cpl_polynomial_get_dimension(second),
-<a name="l00214"></a>00214                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     <span class="comment">/* FIXME: */</span>
-<a name="l00217"></a>00217     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00218"></a>00218                     CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="keywordflow">if</span> (degree0 < maxdeg) {
-<a name="l00221"></a>00221         degree0 = maxdeg;
-<a name="l00222"></a>00222     } <span class="keywordflow">else</span> {
-<a name="l00223"></a>00223         <span class="comment">/* Reset coefficients in self as needed */</span>
-<a name="l00224"></a>00224         <span class="keywordflow">for</span> (; degree0 > maxdeg; degree0--) {
-<a name="l00225"></a>00225             cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, 0.0);
-<a name="l00226"></a>00226         }
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     <span class="comment">/* assert( degree0 == maxdeg ); */</span>
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231     <span class="keywordflow">for</span> (; degree0 >= 0; degree0--) {
-<a name="l00232"></a>00232         <span class="keyword">const</span> <span class="keywordtype">double</span> val1 = cpl_polynomial_get_coeff(first, &degree0);
-<a name="l00233"></a>00233         <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, &degree0);
-<a name="l00234"></a>00234         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, val1 - val2);
-<a name="l00235"></a>00235     }
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00238"></a>00238 }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00252"></a>00252 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00253"></a><a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786">00253</a> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786" title="Multiply a polynomial with a scalar.">irplib_polynomial_multiply_scalar</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00254"></a>00254                                                  <span class="keyword">const</span> cpl_polynomial * other,
-<a name="l00255"></a>00255                                                  <span class="keywordtype">double</span> factor)
-<a name="l00256"></a>00256 {
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258     <span class="keyword">const</span> cpl_size maxdeg  = cpl_polynomial_get_degree(other);
-<a name="l00259"></a>00259     <span class="keyword">const</span> cpl_size zerodeg = cpl_polynomial_get_degree(<span class="keyword">self</span>);
-<a name="l00260"></a>00260     cpl_size       degree;
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00263"></a>00263     cpl_ensure_code(other != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00266"></a>00266                     CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00267"></a>00267     cpl_ensure_code(cpl_polynomial_get_dimension(other) == 1,
-<a name="l00268"></a>00268                     CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270     <span class="keywordflow">for</span> (degree = 0; degree <= maxdeg; degree++) {
-<a name="l00271"></a>00271         <span class="keyword">const</span> <span class="keywordtype">double</span> val = factor * cpl_polynomial_get_coeff(other, &degree);
-<a name="l00272"></a>00272         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree, val);
-<a name="l00273"></a>00273     }
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275     <span class="comment">/* Reset coefficients in self as needed */</span>
-<a name="l00276"></a>00276     <span class="keywordflow">for</span> (; degree <= zerodeg; degree++) {
-<a name="l00277"></a>00277         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &zerodeg, 0.0);
-<a name="l00278"></a>00278     }
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00281"></a>00281 }
-<a name="l00282"></a>00282 <span class="preprocessor">#endif</span>
-<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00309"></a>00309 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00310"></a><a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385">00310</a> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385" title="Compute all n roots of p(x) = 0, where p(x) is of degree n, n &gt; 0.">irplib_polynomial_solve_1d_all</a>(<span class="keyword">const</span> cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00311"></a>00311                                               cpl_vector * roots,
-<a name="l00312"></a>00312                                               cpl_size * preal)
-<a name="l00313"></a>00313 {
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     cpl_error_code error = CPL_ERROR_NONE;
-<a name="l00316"></a>00316     cpl_polynomial * p;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00319"></a>00319     cpl_ensure_code(roots != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00320"></a>00320     cpl_ensure_code(preal != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00321"></a>00321     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00322"></a>00322                     CPL_ERROR_INVALID_TYPE);
-<a name="l00323"></a>00323     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,
-<a name="l00324"></a>00324                     CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00325"></a>00325     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) ==
-<a name="l00326"></a>00326                     cpl_vector_get_size(roots), CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     *preal = 0;
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     p = cpl_polynomial_duplicate(<span class="keyword">self</span>);
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332     error = irplib_polynomial_solve_1d_nonzero(p, roots, preal);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     cpl_polynomial_delete(p);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336     <span class="keywordflow">return</span> error;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 }
-<a name="l00339"></a>00339 
-<a name="l00342"></a>00342 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00368"></a>00368 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00369"></a>00369 <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_nonzero(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00370"></a>00370                                                          cpl_vector * roots,
-<a name="l00371"></a>00371                                                          cpl_size * preal)
-<a name="l00372"></a>00372 {
-<a name="l00373"></a>00373     cpl_error_code error   = CPL_ERROR_NONE;
-<a name="l00374"></a>00374     <span class="keyword">const</span> cpl_size ncoeffs = 1 + cpl_polynomial_get_degree(<span class="keyword">self</span>);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     cpl_ensure_code(<span class="keyword">self</span>  != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l00377"></a>00377     cpl_ensure_code(roots != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l00378"></a>00378     cpl_ensure_code(preal != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l00379"></a>00379     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00380"></a>00380                     CPL_ERROR_INVALID_TYPE);
-<a name="l00381"></a>00381     cpl_ensure_code(ncoeffs   > 1,  CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00382"></a>00382     cpl_ensure_code(*preal >= 0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00383"></a>00383     cpl_ensure_code(ncoeffs + *preal == 1+cpl_vector_get_size(roots),
-<a name="l00384"></a>00384                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386     <span class="keywordflow">switch</span> (ncoeffs) {
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="keywordflow">case</span> 2 : {
-<a name="l00389"></a>00389         <span class="keyword">const</span> cpl_size i1 = 1;
-<a name="l00390"></a>00390         <span class="keyword">const</span> cpl_size i0 = 0;
-<a name="l00391"></a>00391         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);
-<a name="l00392"></a>00392         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394         cpl_vector_set(roots, (*preal)++, -p0/p1);
-<a name="l00395"></a>00395         <span class="keywordflow">break</span>;
-<a name="l00396"></a>00396     }
-<a name="l00397"></a>00397     <span class="keywordflow">case</span> 3 : {
-<a name="l00398"></a>00398         <span class="keyword">const</span> cpl_size i2 = 2;
-<a name="l00399"></a>00399         <span class="keyword">const</span> cpl_size i1 = 1;
-<a name="l00400"></a>00400         <span class="keyword">const</span> cpl_size i0 = 0;
-<a name="l00401"></a>00401         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);
-<a name="l00402"></a>00402         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);
-<a name="l00403"></a>00403         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);
-<a name="l00404"></a>00404         <span class="keywordtype">double</span>         x1, x2;
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406         <span class="keywordflow">if</span> (irplib_polynomial_solve_1d_2(p2, p1, p0, &x1, &x2)) {
-<a name="l00407"></a>00407             <span class="comment">/* This is the complex root in the upper imaginary half-plane */</span>
-<a name="l00408"></a>00408             cpl_vector_set(roots, (*preal)  , x1);
-<a name="l00409"></a>00409             cpl_vector_set(roots, (*preal)+1, x2);
-<a name="l00410"></a>00410         } <span class="keywordflow">else</span> {
-<a name="l00411"></a>00411             cpl_vector_set(roots, (*preal)++, x1);
-<a name="l00412"></a>00412             cpl_vector_set(roots, (*preal)++, x2);
-<a name="l00413"></a>00413         }
-<a name="l00414"></a>00414         <span class="keywordflow">break</span>;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416     <span class="keywordflow">case</span> 4 : {
-<a name="l00417"></a>00417         <span class="keyword">const</span> cpl_size i3 = 3;
-<a name="l00418"></a>00418         <span class="keyword">const</span> cpl_size i2 = 2;
-<a name="l00419"></a>00419         <span class="keyword">const</span> cpl_size i1 = 1;
-<a name="l00420"></a>00420         <span class="keyword">const</span> cpl_size i0 = 0;
-<a name="l00421"></a>00421         <span class="keyword">const</span> <span class="keywordtype">double</span>   p3 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i3);
-<a name="l00422"></a>00422         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);
-<a name="l00423"></a>00423         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);
-<a name="l00424"></a>00424         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);
-<a name="l00425"></a>00425         <span class="keywordtype">double</span>         x1, x2, x3;
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427         <span class="keywordflow">if</span> (irplib_polynomial_solve_1d_3(p3, p2, p1, p0, &x1, &x2, &x3,
-<a name="l00428"></a>00428                                          NULL, NULL)) {
-<a name="l00429"></a>00429             cpl_vector_set(roots, (*preal)++, x1);
-<a name="l00430"></a>00430             <span class="comment">/* This is the complex root in the upper imaginary half-plane */</span>
-<a name="l00431"></a>00431             cpl_vector_set(roots, (*preal)  , x2);
-<a name="l00432"></a>00432             cpl_vector_set(roots, (*preal)+1, x3);
-<a name="l00433"></a>00433         } <span class="keywordflow">else</span> {
-<a name="l00434"></a>00434             cpl_vector_set(roots, (*preal)++, x1);
-<a name="l00435"></a>00435             cpl_vector_set(roots, (*preal)++, x2);
-<a name="l00436"></a>00436             cpl_vector_set(roots, (*preal)++, x3);
-<a name="l00437"></a>00437         }
-<a name="l00438"></a>00438         <span class="keywordflow">break</span>;
-<a name="l00439"></a>00439     }
-<a name="l00440"></a>00440     <span class="keywordflow">case</span> 5 : {
-<a name="l00441"></a>00441         <span class="keyword">const</span> cpl_size i4 = 4;
-<a name="l00442"></a>00442         <span class="keyword">const</span> cpl_size i3 = 3;
-<a name="l00443"></a>00443         <span class="keyword">const</span> cpl_size i2 = 2;
-<a name="l00444"></a>00444         <span class="keyword">const</span> cpl_size i1 = 1;
-<a name="l00445"></a>00445         <span class="keyword">const</span> cpl_size i0 = 0;
-<a name="l00446"></a>00446         <span class="keyword">const</span> <span class="keywordtype">double</span>   p4 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i4);
-<a name="l00447"></a>00447         <span class="keyword">const</span> <span class="keywordtype">double</span>   p3 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i3);
-<a name="l00448"></a>00448         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);
-<a name="l00449"></a>00449         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);
-<a name="l00450"></a>00450         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);
-<a name="l00451"></a>00451         <span class="keywordtype">double</span>         x1, x2, x3, x4;
-<a name="l00452"></a>00452         cpl_size       nreal;
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454         error = irplib_polynomial_solve_1d_4(p4, p3, p2, p1, p0, &nreal,
-<a name="l00455"></a>00455                                              &x1, &x2, &x3, &x4);
-<a name="l00456"></a>00456         <span class="keywordflow">if</span> (!error) {
-<a name="l00457"></a>00457             cpl_vector_set(roots, (*preal)  , x1);
-<a name="l00458"></a>00458             cpl_vector_set(roots, (*preal)+1, x2);
-<a name="l00459"></a>00459             cpl_vector_set(roots, (*preal)+2, x3);
-<a name="l00460"></a>00460             cpl_vector_set(roots, (*preal)+3, x4);
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462             *preal += nreal;
-<a name="l00463"></a>00463         }
-<a name="l00464"></a>00464         <span class="keywordflow">break</span>;
-<a name="l00465"></a>00465     }
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     <span class="keywordflow">default</span>: {
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469         <span class="comment">/* Try to reduce the problem by finding a single root */</span>
-<a name="l00470"></a>00470 <span class="preprocessor">#ifndef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span>
-<a name="l00471"></a>00471 <span class="preprocessor"></span>        <span class="keyword">const</span> cpl_size    n0 = ncoeffs-1;
-<a name="l00472"></a>00472         <span class="keyword">const</span> <span class="keywordtype">double</span> pn0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &n0);
-<a name="l00473"></a>00473         <span class="keyword">const</span> cpl_size    n1 = ncoeffs-2;
-<a name="l00474"></a>00474         <span class="keyword">const</span> <span class="keywordtype">double</span> pn1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &n1);
-<a name="l00475"></a>00475         <span class="comment">/* First guess of root is the root average.</span>
-<a name="l00476"></a>00476 <span class="comment">           FIXME: May need refinement, e.g. via bisection */</span>
-<a name="l00477"></a>00477         <span class="keyword">const</span> <span class="keywordtype">double</span> rmean = -pn1 / (pn0 * n0);
-<a name="l00478"></a>00478         <span class="keywordtype">double</span> root = rmean;
-<a name="l00479"></a>00479 <span class="preprocessor">#else</span>
-<a name="l00480"></a>00480 <span class="preprocessor"></span>        <span class="comment">/* Try an analytical solution to a (shifted) monomial */</span>
-<a name="l00481"></a>00481         cpl_polynomial * copy = cpl_polynomial_duplicate(<span class="keyword">self</span>);
-<a name="l00482"></a>00482         <span class="keyword">const</span> cpl_size    i0 = 0;
-<a name="l00483"></a>00483         <span class="keyword">const</span> <span class="keywordtype">double</span> rmean = irplib_polynomial_depress_1d(copy);
-<a name="l00484"></a>00484         <span class="keyword">const</span> <span class="keywordtype">double</span> c0 = cpl_polynomial_get_coeff(copy, &i0);
-<a name="l00485"></a>00485         <span class="keywordtype">double</span> root = rmean + ((n0&1) && c0 < 0.0 ? -1.0 : 1.0)
-<a name="l00486"></a>00486             * pow(fabs(c0), 1.0/n0);
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488         cpl_polynomial_delete(copy);
-<a name="l00489"></a>00489 <span class="preprocessor">#endif</span>
-<a name="l00490"></a>00490 <span class="preprocessor"></span>
-<a name="l00491"></a>00491         error = cpl_polynomial_solve_1d(<span class="keyword">self</span>, root, &root, 1);
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493         <span class="keywordflow">if</span> (!error) {
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495             cpl_vector_set(roots, (*preal)++, root);
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497             irplib_polynomial_divide_1d_root(<span class="keyword">self</span>, root, NULL);
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499             error = irplib_polynomial_solve_1d_nonzero(<span class="keyword">self</span>, roots, preal);
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501             <span class="keywordflow">if</span> (!error && *preal > 1) {
-<a name="l00502"></a>00502                 <span class="comment">/* Sort the real roots */</span>
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504                 <span class="comment">/* FIXME: Assumes that all roots found so far are real */</span>
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506                 cpl_vector * reals = cpl_vector_wrap(*preal,
-<a name="l00507"></a>00507                                                      cpl_vector_get_data(roots));
-<a name="l00508"></a>00508                 cpl_vector_sort(reals, 1);
-<a name="l00509"></a>00509                 (void)cpl_vector_unwrap(reals);
-<a name="l00510"></a>00510             }
-<a name="l00511"></a>00511         }
-<a name="l00512"></a>00512         <span class="keywordflow">break</span>;
-<a name="l00513"></a>00513     }
-<a name="l00514"></a>00514     }
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516     <span class="keywordflow">return</span> error;
-<a name="l00517"></a>00517 }
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00531"></a>00531 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00532"></a>00532 <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_2(<span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,
-<a name="l00533"></a>00533                                                 <span class="keywordtype">double</span> * px1,
-<a name="l00534"></a>00534                                                 <span class="keywordtype">double</span> * px2) {
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtD = sqrt(fabs(p1 * p1 - 4.0 * p2 * p0));
-<a name="l00537"></a>00537     cpl_boolean is_complex = CPL_FALSE;
-<a name="l00538"></a>00538     <span class="keywordtype">double</span> x1 = -0.5 * p1 / p2; <span class="comment">/* Double root */</span>
-<a name="l00539"></a>00539     <span class="keywordtype">double</span> x2;
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541     <span class="comment">/* Compute residual, assuming D == 0 */</span>
-<a name="l00542"></a>00542     <span class="keywordtype">double</span> res0 = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_FALSE, x1, x1);
-<a name="l00543"></a>00543     <span class="keywordtype">double</span> res;
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545     assert(px1 != NULL );
-<a name="l00546"></a>00546     assert(px2 != NULL );
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548     *px2 = *px1 = x1;
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550     <span class="comment">/* Compute residual, assuming D > 0 */</span>
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552     <span class="comment">/* x1 is the root with largest absolute value */</span>
-<a name="l00553"></a>00553     <span class="keywordflow">if</span> (p1 > 0.0) {
-<a name="l00554"></a>00554         x1 = -0.5 * (p1 + sqrtD);
-<a name="l00555"></a>00555         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00556"></a>00556     } <span class="keywordflow">else</span> {
-<a name="l00557"></a>00557         x1 = -0.5 * (p1 - sqrtD);
-<a name="l00558"></a>00558         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560     <span class="comment">/* Compute smaller root via division to avoid</span>
-<a name="l00561"></a>00561 <span class="comment">       loss of precision due to cancellation */</span>
-<a name="l00562"></a>00562     x2 = p0 / x1;
-<a name="l00563"></a>00563     x1 /= p2; <span class="comment">/* Scale x1 with leading coefficient */</span>
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565     res = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_FALSE, x1, x2);
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567     <span class="keywordflow">if</span> (res < res0) {
-<a name="l00568"></a>00568         res0 = res;
-<a name="l00569"></a>00569         <span class="keywordflow">if</span> (x2 > x1) {
-<a name="l00570"></a>00570             *px1 = x1;
-<a name="l00571"></a>00571             *px2 = x2;
-<a name="l00572"></a>00572             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00573"></a>00573         } <span class="keywordflow">else</span> {
-<a name="l00574"></a>00574             *px1 = x2;
-<a name="l00575"></a>00575             *px2 = x1;
-<a name="l00576"></a>00576             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00577"></a>00577         }
-<a name="l00578"></a>00578     }
-<a name="l00579"></a>00579 
-<a name="l00580"></a>00580     <span class="comment">/* Compute residual, assuming D < 0 */</span>
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582     x1 = -0.5 * p1 / p2;          <span class="comment">/* Real part of complex root */</span>
-<a name="l00583"></a>00583     x2 =  0.5 * sqrtD / fabs(p2); <span class="comment">/* Positive, imaginary part of root */</span>
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585     res  = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_TRUE,  x1, x2);
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587     <span class="keywordflow">if</span> (res < res0) {
-<a name="l00588"></a>00588         *px1 = x1;
-<a name="l00589"></a>00589         *px2 = x2;
-<a name="l00590"></a>00590         is_complex = CPL_TRUE;
-<a name="l00591"></a>00591         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00592"></a>00592     }
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594     <span class="keywordflow">return</span> is_complex;
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596 }
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00612"></a>00612 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00613"></a>00613 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_2_max(<span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,
-<a name="l00614"></a>00614                                            cpl_boolean is_c,
-<a name="l00615"></a>00615                                            <span class="keywordtype">double</span> x1, <span class="keywordtype">double</span> x2)
-<a name="l00616"></a>00616 {
-<a name="l00617"></a>00617     <span class="keywordtype">double</span> res;
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619     <span class="keywordflow">if</span> (is_c) {
-<a name="l00620"></a>00620         res = fabs(p0 + x1 * (p1 + x1 * p2) - p2 * x2 * x2);
-<a name="l00621"></a>00621         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00622"></a>00622     } <span class="keywordflow">else</span> {
-<a name="l00623"></a>00623         <span class="keyword">const</span> <span class="keywordtype">double</span> r1 = fabs(p0 + x1 * (p1 + x1 * p2));
-<a name="l00624"></a>00624         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * p2));
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626         res = r1 > r2 ? r1 : r2;
-<a name="l00627"></a>00627         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00628"></a>00628     }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     <span class="keywordflow">return</span> res;
-<a name="l00631"></a>00631 }
-<a name="l00632"></a>00632 
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00649"></a>00649 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00650"></a>00650 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_3_max(<span class="keywordtype">double</span> p3, <span class="keywordtype">double</span> p2,
-<a name="l00651"></a>00651                                            <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,
-<a name="l00652"></a>00652                                            cpl_boolean is_c,
-<a name="l00653"></a>00653                                            <span class="keywordtype">double</span> x1, <span class="keywordtype">double</span> x2, <span class="keywordtype">double</span> x3)
-<a name="l00654"></a>00654 {
-<a name="l00655"></a>00655     <span class="keyword">const</span> <span class="keywordtype">double</span> r1 = fabs(p0 + x1 * (p1 + x1 * (p2 + x1 * p3)));
-<a name="l00656"></a>00656     <span class="keywordtype">double</span> res;
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658     <span class="keywordflow">if</span> (is_c) {
-<a name="l00659"></a>00659         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * (p2 + x2 * p3))
-<a name="l00660"></a>00660                                - x3 * x3 * ( 3.0 * p3 * x2 + p2));
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662         res = r1 > r2 ? r1 : r2;
-<a name="l00663"></a>00663         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00664"></a>00664     } <span class="keywordflow">else</span> {
-<a name="l00665"></a>00665         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * (p2 + x2 * p3)));
-<a name="l00666"></a>00666         <span class="keyword">const</span> <span class="keywordtype">double</span> r3 = fabs(p0 + x3 * (p1 + x3 * (p2 + x3 * p3)));
-<a name="l00667"></a>00667         res = r1 > r2 ? (r1 > r3 ? r1 : r3) : (r2 > r3 ? r2 : r3);
-<a name="l00668"></a>00668         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00669"></a>00669     }
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671     <span class="comment">/* cpl_msg_info(cpl_func, "%d: %g (%g)", __LINE__, res, r1); */</span>
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673     <span class="keywordflow">return</span> res;
-<a name="l00674"></a>00674 }
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00696"></a>00696 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00697"></a>00697 <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_3(<span class="keywordtype">double</span> p3, <span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1,
-<a name="l00698"></a>00698                                                 <span class="keywordtype">double</span> p0,
-<a name="l00699"></a>00699                                                 <span class="keywordtype">double</span> * px1,
-<a name="l00700"></a>00700                                                 <span class="keywordtype">double</span> * px2,
-<a name="l00701"></a>00701                                                 <span class="keywordtype">double</span> * px3,
-<a name="l00702"></a>00702                                                 cpl_boolean * pdbl1,
-<a name="l00703"></a>00703                                                 cpl_boolean * pdbl2) {
-<a name="l00704"></a>00704     cpl_boolean is_complex = CPL_FALSE;
-<a name="l00705"></a>00705     <span class="keyword">const</span> <span class="keywordtype">double</span> a = p2/p3;
-<a name="l00706"></a>00706     <span class="keyword">const</span> <span class="keywordtype">double</span> b = p1/p3;
-<a name="l00707"></a>00707     <span class="keyword">const</span> <span class="keywordtype">double</span> c = p0/p3;
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709     <span class="keyword">const</span> <span class="keywordtype">double</span> q = (a * a - 3.0 * b);
-<a name="l00710"></a>00710     <span class="keyword">const</span> <span class="keywordtype">double</span> r = (a * (2.0 * a * a - 9.0 * b) + 27.0 * c);
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712     <span class="keyword">const</span> <span class="keywordtype">double</span> Q = q / 9.0;
-<a name="l00713"></a>00713     <span class="keyword">const</span> <span class="keywordtype">double</span> R = r / 54.0;
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715     <span class="keyword">const</span> <span class="keywordtype">double</span> Q3 = Q * Q * Q;
-<a name="l00716"></a>00716     <span class="keyword">const</span> <span class="keywordtype">double</span> R2 = R * R;
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718     <span class="keywordtype">double</span> x1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00719"></a>00719     <span class="keywordtype">double</span> x2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00720"></a>00720     <span class="keywordtype">double</span> x3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00721"></a>00721     <span class="keywordtype">double</span> xx1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00722"></a>00722     <span class="keywordtype">double</span> xx2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00723"></a>00723     <span class="keywordtype">double</span> xx3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     <span class="keywordtype">double</span> resx = DBL_MAX;
-<a name="l00726"></a>00726     <span class="keywordtype">double</span> res  = DBL_MAX;
-<a name="l00727"></a>00727     cpl_boolean is_first = CPL_TRUE;
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729     cpl_boolean dbl2;
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731 
-<a name="l00732"></a>00732     assert(px1 != NULL );
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734     <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;
-<a name="l00735"></a>00735     <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737     dbl2 = CPL_FALSE;
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739     <span class="comment">/*</span>
-<a name="l00740"></a>00740 <span class="comment">      All branches (for which the roots are defined) are evaluated, and</span>
-<a name="l00741"></a>00741 <span class="comment">      the branch with the smallest maximum-residual is chosen.</span>
-<a name="l00742"></a>00742 <span class="comment">      When two maximum-residual are identical, preference is given to</span>
-<a name="l00743"></a>00743 <span class="comment">      the purely real solution and if necessary to the solution with a</span>
-<a name="l00744"></a>00744 <span class="comment">      double root.</span>
-<a name="l00745"></a>00745 <span class="comment">    */</span>
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747     <span class="keywordflow">if</span> ((R2 >= Q3 && R != 0.0) || R2 > Q3) {
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749         cpl_boolean is_c = CPL_FALSE;
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751         irplib_polynomial_solve_1d_3c(a, c, Q, Q3, R, R2, &x1, &x2, &x3,
-<a name="l00752"></a>00752                                       &is_c, &dbl2);
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755         res = resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, is_c,
-<a name="l00756"></a>00756                                             x1, x2, x3);
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758         is_first = CPL_FALSE;
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760         <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;
-<a name="l00761"></a>00761         <span class="keywordflow">if</span> (!is_c && pdbl2 != NULL) *pdbl2 = dbl2;
-<a name="l00762"></a>00762         is_complex = is_c;
-<a name="l00763"></a>00763         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00764"></a>00764    
-<a name="l00765"></a>00765     }
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767     <span class="keywordflow">if</span> (Q > 0.0 && fabs(R / (Q * sqrt(Q))) <= 1.0) {
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769         <span class="comment">/* this test is actually R2 < Q3, written in a form suitable</span>
-<a name="l00770"></a>00770 <span class="comment">           for exact computation with integers */</span>
-<a name="l00771"></a>00771 
-<a name="l00772"></a>00772         <span class="comment">/* assert( Q > 0.0 ); */</span>
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774         irplib_polynomial_solve_1d_3r(a, c, Q, R, &xx1, &xx2, &xx3);
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,
-<a name="l00777"></a>00777                                             xx1, xx2, xx3);
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779         <span class="keywordflow">if</span> (is_first || (dbl2 ? resx < res : resx <= res)) {
-<a name="l00780"></a>00780             is_first = CPL_FALSE;
-<a name="l00781"></a>00781             res = resx;
-<a name="l00782"></a>00782             x1 = xx1;
-<a name="l00783"></a>00783             x2 = xx2;
-<a name="l00784"></a>00784             x3 = xx3;
-<a name="l00785"></a>00785             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;
-<a name="l00786"></a>00786             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;
-<a name="l00787"></a>00787             is_complex = CPL_FALSE;
-<a name="l00788"></a>00788             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00789"></a>00789         }
-<a name="l00790"></a>00790     }
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792     <span class="keywordflow">if</span> (Q >= 0) {
-<a name="l00793"></a>00793         cpl_boolean dbl1 = CPL_FALSE;
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795 
-<a name="l00796"></a>00796         irplib_polynomial_solve_1d_32(a, c, Q, &xx1, &xx2, &xx3, &dbl2);
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,
-<a name="l00799"></a>00799                                             xx1, xx2, xx3);
-<a name="l00800"></a>00800         <span class="comment">/*</span>
-<a name="l00801"></a>00801 <span class="comment">        cpl_msg_info(cpl_func, "%d: %g = %g - %g (%u)", __LINE__,</span>
-<a name="l00802"></a>00802 <span class="comment">                     res - resx, res, resx, is_complex);</span>
-<a name="l00803"></a>00803 <span class="comment">        */</span>
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805         <span class="keywordflow">if</span> (is_first || resx <= res) {
-<a name="l00806"></a>00806             is_first = CPL_FALSE;
-<a name="l00807"></a>00807             res = resx;
-<a name="l00808"></a>00808             x1 = xx1;
-<a name="l00809"></a>00809             x2 = xx2;
-<a name="l00810"></a>00810             x3 = xx3;
-<a name="l00811"></a>00811             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;
-<a name="l00812"></a>00812             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = dbl2;
-<a name="l00813"></a>00813             is_complex = CPL_FALSE;
-<a name="l00814"></a>00814             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00815"></a>00815         }
-<a name="l00816"></a>00816 
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818         <span class="comment">/* This branch also covers the case where the depressed cubic</span>
-<a name="l00819"></a>00819 <span class="comment">           polynomial has zero as triple root (i.e. Q == R == 0) */</span>
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821         irplib_polynomial_solve_1d_31(a, Q, &xx1, &xx2, &xx3, &dbl1);
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,
-<a name="l00824"></a>00824                                             xx1, xx2, xx3);
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826         <span class="keywordflow">if</span> (resx <= res) {
-<a name="l00827"></a>00827             is_first = CPL_FALSE;
-<a name="l00828"></a>00828             res = resx;
-<a name="l00829"></a>00829             x1 = xx1;
-<a name="l00830"></a>00830             x2 = xx2;
-<a name="l00831"></a>00831             x3 = xx3;
-<a name="l00832"></a>00832             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = dbl1;
-<a name="l00833"></a>00833             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;
-<a name="l00834"></a>00834             is_complex = CPL_FALSE;
-<a name="l00835"></a>00835             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00836"></a>00836         }
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840     <span class="keywordflow">if</span> (px2 != NULL && px3 != NULL) {
-<a name="l00841"></a>00841         *px1 = x1;
-<a name="l00842"></a>00842         *px2 = x2;
-<a name="l00843"></a>00843         *px3 = x3;
-<a name="l00844"></a>00844         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00845"></a>00845     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex) {
-<a name="l00846"></a>00846         *px1 = x1;
-<a name="l00847"></a>00847         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00848"></a>00848     } <span class="keywordflow">else</span> {
-<a name="l00849"></a>00849         *px1 = x3;
-<a name="l00850"></a>00850         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00851"></a>00851     }
-<a name="l00852"></a>00852 
-<a name="l00853"></a>00853     <span class="keywordflow">return</span> is_complex;
-<a name="l00854"></a>00854 }
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00870"></a>00870 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00871"></a>00871 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_31(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> Q,
-<a name="l00872"></a>00872                                           <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,
-<a name="l00873"></a>00873                                           <span class="keywordtype">double</span> * px3, cpl_boolean * pdbl1)
-<a name="l00874"></a>00874 {
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt (Q);
-<a name="l00877"></a>00877 
-<a name="l00878"></a>00878     <span class="keywordtype">double</span> x1, x2, x3;
-<a name="l00879"></a>00879 
-<a name="l00880"></a>00880     x2 = x1 = -sqrtQ - a / 3.0;
-<a name="l00881"></a>00881     x3 = 2.0 * sqrtQ - a / 3.0;
-<a name="l00882"></a>00882     <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_TRUE;
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884     *px1 = x1;
-<a name="l00885"></a>00885     *px2 = x2;
-<a name="l00886"></a>00886     *px3 = x3;
-<a name="l00887"></a>00887 
-<a name="l00888"></a>00888     irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00889"></a>00889     <span class="keywordflow">return</span>;
-<a name="l00890"></a>00890 }
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00907"></a>00907 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00908"></a>00908 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_32(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c, <span class="keywordtype">double</span> Q,
-<a name="l00909"></a>00909                                           <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,
-<a name="l00910"></a>00910                                           <span class="keywordtype">double</span> * px3, cpl_boolean * pdbl2)
-<a name="l00911"></a>00911 {
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt (Q);
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915     <span class="keywordtype">double</span> x1 = DBL_MAX;
-<a name="l00916"></a>00916     <span class="keywordtype">double</span> x2 = DBL_MAX;
-<a name="l00917"></a>00917     <span class="keywordtype">double</span> x3 = DBL_MAX;
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919     <span class="keywordflow">if</span> (a > 0.0) {
-<a name="l00920"></a>00920         <span class="comment">/* a and sqrt(Q) have same sign - or Q is zero */</span>
-<a name="l00921"></a>00921         x1 = -2.0 * sqrtQ - a / 3.0;
-<a name="l00922"></a>00922         <span class="comment">/* FIXME: Two small roots with opposite signs may</span>
-<a name="l00923"></a>00923 <span class="comment">           end up here, with the sign lost for one of them */</span>
-<a name="l00924"></a>00924         x3 = x2 = -a < x1 ? -sqrt(fabs(c / x1)) : sqrt(fabs(c / x1));
-<a name="l00925"></a>00925         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;
-<a name="l00926"></a>00926         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00927"></a>00927     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a < 0.0) {
-<a name="l00928"></a>00928         <span class="comment">/* a and sqrt(Q) have opposite signs - or Q is zero */</span>
-<a name="l00929"></a>00929         x3 = x2 = sqrtQ - a / 3.0;
-<a name="l00930"></a>00930         x1 = -c / (x2 * x2);
-<a name="l00931"></a>00931         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;
-<a name="l00932"></a>00932         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00933"></a>00933     } <span class="keywordflow">else</span> {
-<a name="l00934"></a>00934         x1 = -2.0 * sqrtQ;
-<a name="l00935"></a>00935         x3 = x2 = sqrtQ;
-<a name="l00936"></a>00936         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;
-<a name="l00937"></a>00937         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l00938"></a>00938     }
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940     *px1 = x1;
-<a name="l00941"></a>00941     *px2 = x2;
-<a name="l00942"></a>00942     *px3 = x3;
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944     <span class="keywordflow">return</span>;
-<a name="l00945"></a>00945 }
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00967"></a>00967 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00968"></a>00968 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3c(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c,
-<a name="l00969"></a>00969                                           <span class="keywordtype">double</span> Q, <span class="keywordtype">double</span> Q3,
-<a name="l00970"></a>00970                                           <span class="keywordtype">double</span> R, <span class="keywordtype">double</span> R2,
-<a name="l00971"></a>00971                                           <span class="keywordtype">double</span> * px1,
-<a name="l00972"></a>00972                                           <span class="keywordtype">double</span> * px2, <span class="keywordtype">double</span> * px3,
-<a name="l00973"></a>00973                                           cpl_boolean * pis_c,
-<a name="l00974"></a>00974                                           cpl_boolean * pdbl2)
-<a name="l00975"></a>00975 {
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977     <span class="comment">/* Due to finite precision some double roots may be missed, and</span>
-<a name="l00978"></a>00978 <span class="comment">       will be considered to be a pair of complex roots z = x +/-</span>
-<a name="l00979"></a>00979 <span class="comment">       epsilon i close to the real axis. */</span>
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981     <span class="comment">/* Another case: A double root, which is small relative to the</span>
-<a name="l00982"></a>00982 <span class="comment">       last root, may cause this branch to be taken - with the</span>
-<a name="l00983"></a>00983 <span class="comment">       imaginary part eventually being truncated to zero. */</span>
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985     <span class="keyword">const</span> <span class="keywordtype">double</span> sgnR = (R >= 0 ? 1.0 : -1.0);
-<a name="l00986"></a>00986     <span class="keyword">const</span> <span class="keywordtype">double</span> A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0 / 3.0);
-<a name="l00987"></a>00987     <span class="keyword">const</span> <span class="keywordtype">double</span> B = Q / A;
-<a name="l00988"></a>00988 
-<a name="l00989"></a>00989     <span class="keywordtype">double</span> x1 = DBL_MAX;
-<a name="l00990"></a>00990     <span class="keywordtype">double</span> x2 = DBL_MAX;
-<a name="l00991"></a>00991     <span class="keywordtype">double</span> x3 = DBL_MAX;
-<a name="l00992"></a>00992     cpl_boolean is_complex = CPL_FALSE;
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994     <span class="keywordflow">if</span> (( A > -B && a > 0.0) || (A < -B && a < 0.0)) {
-<a name="l00995"></a>00995         <span class="comment">/* A+B has same sign as a */</span>
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997         <span class="comment">/* Real part of complex conjugate */</span>
-<a name="l00998"></a>00998         x2 = -0.5 * (A + B) - a / 3.0; <span class="comment">/* No cancellation */</span>
-<a name="l00999"></a>00999         <span class="comment">/* Positive, imaginary part of complex conjugate */</span>
-<a name="l01000"></a>01000         x3 = 0.5 * CPL_MATH_SQRT3 * fabs(A - B);
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002         x1 = -c / (x2 * x2 + x3 * x3);
-<a name="l01003"></a>01003         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01004"></a>01004     } <span class="keywordflow">else</span> {
-<a name="l01005"></a>01005         <span class="comment">/* A+B and a have opposite signs - or exactly one is zero */</span>
-<a name="l01006"></a>01006         x1 = A + B - a / 3.0;
-<a name="l01007"></a>01007         <span class="comment">/* Positive, imaginary part of complex conjugate */</span>
-<a name="l01008"></a>01008         x3 = 0.5 * CPL_MATH_SQRT3 * fabs(A - B);
-<a name="l01009"></a>01009 
-<a name="l01010"></a>01010         <span class="keywordflow">if</span> (x3 > 0.0) {
-<a name="l01011"></a>01011             <span class="comment">/* Real part of complex conjugate */</span>
-<a name="l01012"></a>01012             x2 = -0.5 * (A + B) - a / 3.0; <span class="comment">/* FIXME: Cancellation */</span>
-<a name="l01013"></a>01013             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01014"></a>01014         } <span class="keywordflow">else</span> {
-<a name="l01015"></a>01015 
-<a name="l01016"></a>01016             x2 = -a < x1 ? -sqrt(fabs(c / x1)) : sqrt(fabs(c / x1));
-<a name="l01017"></a>01017             x3 = 0.0;
-<a name="l01018"></a>01018             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01019"></a>01019         }
-<a name="l01020"></a>01020     }
-<a name="l01021"></a>01021 
-<a name="l01022"></a>01022     <span class="keywordflow">if</span> (x3 > 0.0) {
-<a name="l01023"></a>01023         is_complex = CPL_TRUE;
-<a name="l01024"></a>01024         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01025"></a>01025     } <span class="keywordflow">else</span> {
-<a name="l01026"></a>01026         <span class="comment">/* Whoaa, the imaginary part was truncated to zero</span>
-<a name="l01027"></a>01027 <span class="comment">           - return a real, double root */</span>
-<a name="l01028"></a>01028         x3 = x2;
-<a name="l01029"></a>01029         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;
-<a name="l01030"></a>01030         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01031"></a>01031     }
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033     *px1 = x1;
-<a name="l01034"></a>01034     *px2 = x2;
-<a name="l01035"></a>01035     *px3 = x3;
-<a name="l01036"></a>01036     *pis_c = is_complex;
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038     <span class="keywordflow">return</span>;
-<a name="l01039"></a>01039 }
-<a name="l01040"></a>01040 
-<a name="l01041"></a>01041 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01056"></a>01056 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01057"></a>01057 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3r(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c,
-<a name="l01058"></a>01058                                           <span class="keywordtype">double</span> Q, <span class="keywordtype">double</span> R,
-<a name="l01059"></a>01059                                           <span class="keywordtype">double</span> * px1,
-<a name="l01060"></a>01060                                           <span class="keywordtype">double</span> * px2, <span class="keywordtype">double</span> * px3)
-<a name="l01061"></a>01061 {
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt(Q);
-<a name="l01064"></a>01064     <span class="keyword">const</span> <span class="keywordtype">double</span> theta = acos (R / (Q * sqrtQ)); <span class="comment">/* theta in range [0; pi] */</span>
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066     <span class="comment">/* -1.0 <= cos((theta + CPL_MATH_2PI) / 3.0) <= -0.5</span>
-<a name="l01067"></a>01067 <span class="comment">       -0.5 <= cos((theta - CPL_MATH_2PI) / 3.0) <=  0.5</span>
-<a name="l01068"></a>01068 <span class="comment">        0.5 <= cos((theta                  ) / 3.0) <=  1.0 */</span>
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070 <span class="preprocessor">#define TR1 (-2.0 * sqrtQ * cos( theta                    / 3.0))</span>
-<a name="l01071"></a>01071 <span class="preprocessor"></span><span class="preprocessor">#define TR2 (-2.0 * sqrtQ * cos((theta - CPL_MATH_2PI) / 3.0))</span>
-<a name="l01072"></a>01072 <span class="preprocessor"></span><span class="preprocessor">#define TR3 (-2.0 * sqrtQ * cos((theta + CPL_MATH_2PI) / 3.0))</span>
-<a name="l01073"></a>01073 <span class="preprocessor"></span>
-<a name="l01074"></a>01074     <span class="comment">/* TR1 < TR2 < TR3, except when theta == 0, then TR2 == TR3 */</span>
-<a name="l01075"></a>01075 
-<a name="l01076"></a>01076     <span class="comment">/* The three roots must be transformed back via subtraction with a/3.</span>
-<a name="l01077"></a>01077 <span class="comment">       To prevent loss of precision due to cancellation, the root which</span>
-<a name="l01078"></a>01078 <span class="comment">       is closest to a/3 is computed using the relation</span>
-<a name="l01079"></a>01079 <span class="comment">       p3 * x1 * x2 * x3 = -p0 */</span>
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081     <span class="keywordtype">double</span> x1 = DBL_MAX;
-<a name="l01082"></a>01082     <span class="keywordtype">double</span> x2 = DBL_MAX;
-<a name="l01083"></a>01083     <span class="keywordtype">double</span> x3 = DBL_MAX;
-<a name="l01084"></a>01084 
-<a name="l01085"></a>01085     <span class="keywordflow">if</span> (a > 0.0) {
-<a name="l01086"></a>01086         x1 = TR1 - a / 3.0;
-<a name="l01087"></a>01087         <span class="keywordflow">if</span> (TR2 > 0.0 && (TR2 + TR3) > 2.0 * a) {
-<a name="l01088"></a>01088             <span class="comment">/* FIXME: Cancellation may still effect x3 ? */</span>
-<a name="l01089"></a>01089             x3 = TR3 - a / 3.0;
-<a name="l01090"></a>01090             x2 = -c / ( x1 * x3 );
-<a name="l01091"></a>01091             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01092"></a>01092         } <span class="keywordflow">else</span> {
-<a name="l01093"></a>01093             <span class="comment">/* FIXME: Cancellation may still effect x2, especially</span>
-<a name="l01094"></a>01094 <span class="comment">               if x2, x3 is (almost) a double root, i.e.</span>
-<a name="l01095"></a>01095 <span class="comment">               if theta is close to zero. */</span>
-<a name="l01096"></a>01096             x2 = TR2 - a / 3.0;
-<a name="l01097"></a>01097  
-<a name="l01098"></a>01098             x3 = -c / ( x1 * x2 );
-<a name="l01099"></a>01099             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01100"></a>01100         }
-<a name="l01101"></a>01101     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a < 0.0) {
-<a name="l01102"></a>01102         x3 = TR3 - a / 3.0;
-<a name="l01103"></a>01103         <span class="keywordflow">if</span> (TR2 < 0.0 && (TR1 + TR2) > 2.0 * a) {
-<a name="l01104"></a>01104             x1 = TR1 - a / 3.0;
-<a name="l01105"></a>01105             x2 = -c / ( x1 * x3 );
-<a name="l01106"></a>01106             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01107"></a>01107         } <span class="keywordflow">else</span> {
-<a name="l01108"></a>01108             x2 = TR2 - a / 3.0;
-<a name="l01109"></a>01109             x1 = -c / ( x2 * x3 );
-<a name="l01110"></a>01110             irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01111"></a>01111         }
-<a name="l01112"></a>01112     } <span class="keywordflow">else</span> {
-<a name="l01113"></a>01113         x1 = TR1;
-<a name="l01114"></a>01114         x2 = TR2;
-<a name="l01115"></a>01115         x3 = TR3;
-<a name="l01116"></a>01116         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01117"></a>01117     }
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119     assert(x1 < x3);
-<a name="l01120"></a>01120 
-<a name="l01121"></a>01121     <span class="keywordflow">if</span> (x1 > x2) {
-<a name="l01122"></a>01122         <span class="comment">/* In absence of round-off:</span>
-<a name="l01123"></a>01123 <span class="comment">           theta == PI: x1 == x2,</span>
-<a name="l01124"></a>01124 <span class="comment">           theta  < PI: x1 <  x2,</span>
-<a name="l01125"></a>01125 <span class="comment"></span>
-<a name="l01126"></a>01126 <span class="comment">           The only way x1 could exceed x2 would be due to round-off when</span>
-<a name="l01127"></a>01127 <span class="comment">           theta is close to PI */</span>
-<a name="l01128"></a>01128      
-<a name="l01129"></a>01129         x1 = x2 = 0.5 * ( x1 + x2 );
-<a name="l01130"></a>01130         irplib_trace(); <span class="comment">/* OK, tested only for x1 == x2 */</span>
-<a name="l01131"></a>01131     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x2 > x3) {
-<a name="l01132"></a>01132         <span class="comment">/* In absence of round-off:</span>
-<a name="l01133"></a>01133 <span class="comment">           theta == 0: x2 == x3,</span>
-<a name="l01134"></a>01134 <span class="comment">           theta  > 0: x2 <  x3,</span>
-<a name="l01135"></a>01135 <span class="comment"></span>
-<a name="l01136"></a>01136 <span class="comment">           For small theta:</span>
-<a name="l01137"></a>01137 <span class="comment">           Round-off can cause x2 to become greater than x3 */</span>
-<a name="l01138"></a>01138      
-<a name="l01139"></a>01139         x3 = x2 = 0.5 * ( x2 + x3 );
-<a name="l01140"></a>01140         irplib_trace(); <span class="comment">/* OK */</span>
-<a name="l01141"></a>01141     }
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143     *px1 = x1;
-<a name="l01144"></a>01144     *px2 = x2;
-<a name="l01145"></a>01145     *px3 = x3;
-<a name="l01146"></a>01146 
-<a name="l01147"></a>01147     <span class="keywordflow">return</span>;
-<a name="l01148"></a>01148 }
-<a name="l01149"></a>01149 
-<a name="l01150"></a>01150 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01168"></a>01168 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01169"></a>01169 <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_4(<span class="keywordtype">double</span> p4, <span class="keywordtype">double</span> p3,
-<a name="l01170"></a>01170                                                    <span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1,
-<a name="l01171"></a>01171                                                    <span class="keywordtype">double</span> p0, cpl_size * preal,
-<a name="l01172"></a>01172                                                    <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,
-<a name="l01173"></a>01173                                                    <span class="keywordtype">double</span> * px3, <span class="keywordtype">double</span> * px4)
-<a name="l01174"></a>01174 {
-<a name="l01175"></a>01175 
-<a name="l01176"></a>01176     <span class="comment">/* Construct the monic, depressed quartic using Horners scheme on 1 / p4 */</span>
-<a name="l01177"></a>01177     <span class="keyword">const</span> <span class="keywordtype">double</span> a = (p2 - 0.375 * p3 * p3 / p4) / p4;
-<a name="l01178"></a>01178     <span class="keyword">const</span> <span class="keywordtype">double</span> b = (p1 - 0.5 * (p2 - 0.25 * p3 * p3 / p4 ) * p3 / p4 ) / p4;
-<a name="l01179"></a>01179     <span class="keyword">const</span> <span class="keywordtype">double</span> c =
-<a name="l01180"></a>01180         (p0 - 0.25 * (p1 - 0.25 * (p2 - 0.1875 * p3 * p3 / p4 ) * p3 / p4
-<a name="l01181"></a>01181                       ) * p3 / p4 ) / p4;
-<a name="l01182"></a>01182 
-<a name="l01183"></a>01183     <span class="keywordtype">double</span> x1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l01184"></a>01184     <span class="keywordtype">double</span> x2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l01185"></a>01185     <span class="keywordtype">double</span> x3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l01186"></a>01186     <span class="keywordtype">double</span> x4 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span>
-<a name="l01187"></a>01187 
-<a name="l01188"></a>01188     assert(preal != NULL );
-<a name="l01189"></a>01189     assert(px1   != NULL );
-<a name="l01190"></a>01190     assert(px2   != NULL );
-<a name="l01191"></a>01191     assert(px3   != NULL );
-<a name="l01192"></a>01192     assert(px4   != NULL );
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194     *preal = 4;
-<a name="l01195"></a>01195 
-<a name="l01196"></a>01196     <span class="keywordflow">if</span> (c == 0.0) {
-<a name="l01197"></a>01197         <span class="comment">/* The depressed quartic has zero as root */</span>
-<a name="l01198"></a>01198         <span class="comment">/* Since the sum of the roots is zero, at least one is negative</span>
-<a name="l01199"></a>01199 <span class="comment">           and at least one is positive - unless they are all zero */</span>
-<a name="l01200"></a>01200         cpl_boolean dbl1, dbl2;
-<a name="l01201"></a>01201         <span class="keyword">const</span> cpl_boolean is_real =
-<a name="l01202"></a>01202             !irplib_polynomial_solve_1d_3(1.0, 0.0, a, b, &x1, &x3, &x4,
-<a name="l01203"></a>01203                                           &dbl1, &dbl2);
-<a name="l01204"></a>01204 
-<a name="l01205"></a>01205         x1 -= 0.25 * p3 / p4;
-<a name="l01206"></a>01206         x2 = -0.25 * p3 / p4;
-<a name="l01207"></a>01207         x3 -= 0.25 * p3 / p4;
-<a name="l01208"></a>01208         <span class="keywordflow">if</span> (is_real) {
-<a name="l01209"></a>01209 
-<a name="l01210"></a>01210             <span class="keywordflow">if</span> (dbl2) {
-<a name="l01211"></a>01211                 x4 = x3;
-<a name="l01212"></a>01212                 assert( x1 <= x2);
-<a name="l01213"></a>01213                 assert( x2 <= x3);
-<a name="l01214"></a>01214             } <span class="keywordflow">else</span> {
-<a name="l01215"></a>01215                 x4 -= 0.25 * p3 / p4;
-<a name="l01216"></a>01216                 <span class="comment">/* Need (only) a guarded swap of x2, x3 */</span>
-<a name="l01217"></a>01217                 <span class="keywordflow">if</span> (x2 > x3) {
-<a name="l01218"></a>01218                     IRPLIB_SWAP(x2, x3);
-<a name="l01219"></a>01219                 }
-<a name="l01220"></a>01220                 <span class="keywordflow">if</span> (dbl1) {
-<a name="l01221"></a>01221                     assert( x1 <= x2); <span class="comment">/* The cubic may have 0 as triple root */</span>
-<a name="l01222"></a>01222                     assert( x2 <= x3);
-<a name="l01223"></a>01223                     assert( x2 <= x4);
-<a name="l01224"></a>01224                 } <span class="keywordflow">else</span> {
-<a name="l01225"></a>01225                     assert( x1 < x2);
-<a name="l01226"></a>01226                     assert( x2 < x4);
-<a name="l01227"></a>01227                 }
-<a name="l01228"></a>01228             }
-<a name="l01229"></a>01229         } <span class="keywordflow">else</span> {
-<a name="l01230"></a>01230             *preal = 2;
-<a name="l01231"></a>01231 
-<a name="l01232"></a>01232             <span class="keywordflow">if</span> (x1 > x2) {
-<a name="l01233"></a>01233                 assert( x3 <= x2 ); <span class="comment">/* Don't swap a complex root */</span>
-<a name="l01234"></a>01234 
-<a name="l01235"></a>01235                 IRPLIB_SWAP(x1, x2);
-<a name="l01236"></a>01236             } <span class="keywordflow">else</span> {
-<a name="l01237"></a>01237                 assert( x3 >= x2 );
-<a name="l01238"></a>01238             }
-<a name="l01239"></a>01239         }
-<a name="l01240"></a>01240 
-<a name="l01241"></a>01241     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b == 0.0) {
-<a name="l01242"></a>01242         <span class="comment">/* The monic, depressed quartic is a monic, biquadratic equation */</span>
-<a name="l01243"></a>01243         <span class="keywordtype">double</span> u1, u2;
-<a name="l01244"></a>01244         <span class="keyword">const</span> cpl_boolean is_complex = irplib_polynomial_solve_1d_2(1.0, a, c,
-<a name="l01245"></a>01245                                                                     &u1, &u2);
-<a name="l01246"></a>01246 
-<a name="l01247"></a>01247         <span class="keywordflow">if</span> (is_complex) {
-<a name="l01248"></a>01248             <span class="comment">/* All four roots are conjugate, complex */</span>
-<a name="l01249"></a>01249             <span class="keyword">const</span> <span class="keywordtype">double</span> norm = sqrt(u1*u1 + u2*u2);
-<a name="l01250"></a>01250             <span class="keyword">const</span> <span class="keywordtype">double</span>   v1 = sqrt(0.5*(norm+u1));
-<a name="l01251"></a>01251             <span class="keyword">const</span> <span class="keywordtype">double</span>   v2 = u2 / sqrt(2.0*(norm+u1));
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254             x1 = -0.25 * p3 / p4 - v1;
-<a name="l01255"></a>01255             x3 = -0.25 * p3 / p4 + v1;
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257             x4 = x2 = v2;
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259             *preal = 0;
-<a name="l01260"></a>01260 
-<a name="l01261"></a>01261         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (u1 >= 0.0) {
-<a name="l01262"></a>01262             <span class="comment">/* All four roots are real */</span>
-<a name="l01263"></a>01263             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(u1);
-<a name="l01264"></a>01264             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(u2);
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266 
-<a name="l01267"></a>01267             *preal = 4;
-<a name="l01268"></a>01268 
-<a name="l01269"></a>01269             x1 = -0.25 * p3 / p4 - sv2;
-<a name="l01270"></a>01270             x2 = -0.25 * p3 / p4 - sv1;
-<a name="l01271"></a>01271             x3 = -0.25 * p3 / p4 + sv1;
-<a name="l01272"></a>01272             x4 = -0.25 * p3 / p4 + sv2;
-<a name="l01273"></a>01273         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (u2 < 0.0) {
-<a name="l01274"></a>01274             <span class="comment">/* All four roots are conjugate, complex */</span>
-<a name="l01275"></a>01275             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(-u2);
-<a name="l01276"></a>01276             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(-u1);
-<a name="l01277"></a>01277 
-<a name="l01278"></a>01278 
-<a name="l01279"></a>01279             *preal = 0;
-<a name="l01280"></a>01280 
-<a name="l01281"></a>01281             x1 = x3 = -0.25 * p3 / p4;
-<a name="l01282"></a>01282 
-<a name="l01283"></a>01283             x2 = sv1;
-<a name="l01284"></a>01284             x4 = sv2;
-<a name="l01285"></a>01285         } <span class="keywordflow">else</span> {
-<a name="l01286"></a>01286             <span class="comment">/* Two roots are real, two roots are conjugate, complex */</span>
-<a name="l01287"></a>01287             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(-u1);
-<a name="l01288"></a>01288             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(u2);
-<a name="l01289"></a>01289 
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291             *preal = 2;
-<a name="l01292"></a>01292 
-<a name="l01293"></a>01293             x1 = -0.25 * p3 / p4 - sv2;
-<a name="l01294"></a>01294             x2 = -0.25 * p3 / p4 + sv2;
-<a name="l01295"></a>01295 
-<a name="l01296"></a>01296             x3 = -0.25 * p3 / p4;
-<a name="l01297"></a>01297             x4 = sv1;
-<a name="l01298"></a>01298         }
-<a name="l01299"></a>01299     } <span class="keywordflow">else</span> {
-<a name="l01300"></a>01300         <span class="comment">/* Need a root from the nested, monic cubic */</span>
-<a name="l01301"></a>01301         <span class="keyword">const</span> <span class="keywordtype">double</span> q2 = -a;
-<a name="l01302"></a>01302         <span class="keyword">const</span> <span class="keywordtype">double</span> q1 = -4.0 * c;
-<a name="l01303"></a>01303         <span class="keyword">const</span> <span class="keywordtype">double</span> q0 = 4.0 * a * c - b * b;
-<a name="l01304"></a>01304         <span class="keywordtype">double</span> u1, sqrtd, sqrtrd;
-<a name="l01305"></a>01305         <span class="keywordtype">double</span> z1, z2, z3, z4;
-<a name="l01306"></a>01306 
-<a name="l01307"></a>01307         cpl_boolean is_complex1, is_complex2;
-<a name="l01308"></a>01308 
-<a name="l01309"></a>01309         <span class="comment">/* Largest cubic root ensures real square roots when solving the</span>
-<a name="l01310"></a>01310 <span class="comment">           quartic equation */</span>
-<a name="l01311"></a>01311         (void)irplib_polynomial_solve_1d_3(1.0, q2, q1, q0, &u1, NULL, NULL,
-<a name="l01312"></a>01312                                            NULL, NULL);
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314 
-<a name="l01315"></a>01315         assert( u1 > a );
-<a name="l01316"></a>01316 
-<a name="l01317"></a>01317         sqrtd = sqrt(u1 - a);
-<a name="l01318"></a>01318 
-<a name="l01319"></a>01319         sqrtrd = 0.5 * b/sqrtd;
-<a name="l01320"></a>01320 
-<a name="l01321"></a>01321         is_complex1 = irplib_polynomial_solve_1d_2(1.0,  sqrtd, 0.5*u1 - sqrtrd,
-<a name="l01322"></a>01322                                                    &z1, &z2);
-<a name="l01323"></a>01323 
-<a name="l01324"></a>01324         is_complex2 = irplib_polynomial_solve_1d_2(1.0, -sqrtd, 0.5*u1 + sqrtrd,
-<a name="l01325"></a>01325                                                    &z3, &z4);
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327         z1 -= 0.25 * p3 / p4;
-<a name="l01328"></a>01328         z3 -= 0.25 * p3 / p4;
-<a name="l01329"></a>01329         <span class="keywordflow">if</span> (!is_complex1) z2 -= 0.25 * p3 / p4;
-<a name="l01330"></a>01330         <span class="keywordflow">if</span> (!is_complex2) z4 -= 0.25 * p3 / p4;
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332         <span class="keywordflow">if</span> (!is_complex1 && is_complex2) {
-<a name="l01333"></a>01333             *preal = 2;
-<a name="l01334"></a>01334             x1 = z1;
-<a name="l01335"></a>01335             x2 = z2;
-<a name="l01336"></a>01336             x3 = z3;
-<a name="l01337"></a>01337             x4 = z4;
-<a name="l01338"></a>01338         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex1 && !is_complex2) {
-<a name="l01339"></a>01339             *preal = 2;
-<a name="l01340"></a>01340             x1 = z3;
-<a name="l01341"></a>01341             x2 = z4;
-<a name="l01342"></a>01342             x3 = z1;
-<a name="l01343"></a>01343             x4 = z2;
-<a name="l01344"></a>01344         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex1 && is_complex2) {
-<a name="l01345"></a>01345             *preal = 0;
-<a name="l01346"></a>01346 
-<a name="l01347"></a>01347             <span class="keywordflow">if</span> (z1 < z3 || (z1 == z3 && z2 <= z4)) {
-<a name="l01348"></a>01348                 x1 = z1;
-<a name="l01349"></a>01349                 x2 = z2;
-<a name="l01350"></a>01350                 x3 = z3;
-<a name="l01351"></a>01351                 x4 = z4;
-<a name="l01352"></a>01352             } <span class="keywordflow">else</span> {
-<a name="l01353"></a>01353                 x1 = z3;
-<a name="l01354"></a>01354                 x2 = z4;
-<a name="l01355"></a>01355                 x3 = z1;
-<a name="l01356"></a>01356                 x4 = z2;
-<a name="l01357"></a>01357             }
-<a name="l01358"></a>01358         } <span class="keywordflow">else</span> {
-<a name="l01359"></a>01359             *preal = 4;
-<a name="l01360"></a>01360 
-<a name="l01361"></a>01361             <span class="keywordflow">if</span> (z3 >= z2) {
-<a name="l01362"></a>01362                 x1 = z1;
-<a name="l01363"></a>01363                 x2 = z2;
-<a name="l01364"></a>01364                 x3 = z3;
-<a name="l01365"></a>01365                 x4 = z4;
-<a name="l01366"></a>01366             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z4 <= z1) {
-<a name="l01367"></a>01367                 x1 = z3;
-<a name="l01368"></a>01368                 x2 = z4;
-<a name="l01369"></a>01369                 x3 = z1;
-<a name="l01370"></a>01370                 x4 = z2;
-<a name="l01371"></a>01371             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z2 > z4) {
-<a name="l01372"></a>01372                 x1 = z3;
-<a name="l01373"></a>01373                 x2 = z1;
-<a name="l01374"></a>01374                 x3 = z4;
-<a name="l01375"></a>01375                 x4 = z2;
-<a name="l01376"></a>01376             } <span class="keywordflow">else</span> {
-<a name="l01377"></a>01377                 x1 = z1;
-<a name="l01378"></a>01378                 x2 = z3;
-<a name="l01379"></a>01379                 x3 = z2;
-<a name="l01380"></a>01380                 x4 = z4;
-<a name="l01381"></a>01381             }
-<a name="l01382"></a>01382         }
-<a name="l01383"></a>01383     }
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385     *px1 = x1;
-<a name="l01386"></a>01386     *px2 = x2;
-<a name="l01387"></a>01387     *px3 = x3;
-<a name="l01388"></a>01388     *px4 = x4;
-<a name="l01389"></a>01389 
-<a name="l01390"></a>01390     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01391"></a>01391 }
-<a name="l01392"></a>01392 
-<a name="l01393"></a>01393 <span class="preprocessor">#ifdef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span>
-<a name="l01394"></a>01394 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01402"></a>01402 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01403"></a>01403 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_depress_1d(cpl_polynomial * <span class="keyword">self</span>)
-<a name="l01404"></a>01404 {
-<a name="l01405"></a>01405 
-<a name="l01406"></a>01406     <span class="keyword">const</span> cpl_size degree = cpl_polynomial_get_degree(<span class="keyword">self</span>);
-<a name="l01407"></a>01407     <span class="keyword">const</span> cpl_size nc1    = degree - 1;
-<a name="l01408"></a>01408     <span class="keyword">const</span> <span class="keywordtype">double</span>   an     = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &degree);
-<a name="l01409"></a>01409     <span class="keyword">const</span> <span class="keywordtype">double</span>   an1    = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &nc1);
-<a name="l01410"></a>01410     <span class="keywordtype">double</span>         rmean;
-<a name="l01411"></a>01411     cpl_size       i;
-<a name="l01412"></a>01412 
-<a name="l01413"></a>01413 
-<a name="l01414"></a>01414     cpl_ensure(degree > 0,   CPL_ERROR_DATA_NOT_FOUND, 0.0);
-<a name="l01415"></a>01415 
-<a name="l01416"></a>01416     assert( an != 0.0 );
-<a name="l01417"></a>01417 
-<a name="l01418"></a>01418     rmean = -an1/(an * (double)degree);
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420     <span class="keywordflow">if</span> (rmean != 0.0) {
-<a name="l01421"></a>01421 
-<a name="l01422"></a>01422         cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, rmean);
-<a name="l01423"></a>01423 
-<a name="l01424"></a>01424         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &nc1, 0.0); <span class="comment">/* Round-off... */</span>
-<a name="l01425"></a>01425 
-<a name="l01426"></a>01426     }
-<a name="l01427"></a>01427 
-<a name="l01428"></a>01428     <span class="comment">/* Set leading coefficient to one. */</span>
-<a name="l01429"></a>01429     <span class="keywordflow">for</span> (i = 0; i < degree-1; i++) {
-<a name="l01430"></a>01430         <span class="keyword">const</span> <span class="keywordtype">double</span> ai = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i) / an;
-<a name="l01431"></a>01431         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &i, ai);
-<a name="l01432"></a>01432     }
-<a name="l01433"></a>01433 
-<a name="l01434"></a>01434     cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree, 1.0); <span class="comment">/* Round-off... */</span>
-<a name="l01435"></a>01435 
-<a name="l01436"></a>01436     <span class="keywordflow">return</span> rmean;
-<a name="l01437"></a>01437 }
-<a name="l01438"></a>01438 <span class="preprocessor">#endif</span>
-<a name="l01439"></a>01439 <span class="preprocessor"></span>
-<a name="l01440"></a>01440 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01455"></a>01455 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01456"></a>01456 <span class="keyword">static</span>
-<a name="l01457"></a>01457 cpl_error_code irplib_polynomial_divide_1d_root(cpl_polynomial * p, <span class="keywordtype">double</span> r,
-<a name="l01458"></a>01458                                                 <span class="keywordtype">double</span> * pres)
-<a name="l01459"></a>01459 {
-<a name="l01460"></a>01460 
-<a name="l01461"></a>01461     <span class="keyword">const</span> cpl_size n = cpl_polynomial_get_degree(p);
-<a name="l01462"></a>01462     <span class="keywordtype">double</span>         sum;
-<a name="l01463"></a>01463     cpl_size       i;
-<a name="l01464"></a>01464 
-<a name="l01465"></a>01465 
-<a name="l01466"></a>01466     cpl_ensure_code(p != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01467"></a>01467     cpl_ensure_code(cpl_polynomial_get_dimension(p) == 1,
-<a name="l01468"></a>01468                     CPL_ERROR_INVALID_TYPE);
-<a name="l01469"></a>01469     cpl_ensure_code(n > 0, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l01470"></a>01470 
-<a name="l01471"></a>01471     sum = cpl_polynomial_get_coeff(p, &n);
-<a name="l01472"></a>01472     cpl_polynomial_set_coeff(p, &n, 0.0);
-<a name="l01473"></a>01473 
-<a name="l01474"></a>01474     <span class="keywordflow">for</span> (i = n-1; i >= 0; i--) {
-<a name="l01475"></a>01475         <span class="keyword">const</span> <span class="keywordtype">double</span> coeff = cpl_polynomial_get_coeff(p, &i);
-<a name="l01476"></a>01476 
-<a name="l01477"></a>01477         cpl_polynomial_set_coeff(p, &i, sum);
-<a name="l01478"></a>01478 
-<a name="l01479"></a>01479         sum = coeff + r * sum;
-<a name="l01480"></a>01480 
-<a name="l01481"></a>01481     }
-<a name="l01482"></a>01482 
-<a name="l01483"></a>01483     <span class="keywordflow">if</span> (pres != NULL) *pres = sum;
-<a name="l01484"></a>01484 
-<a name="l01485"></a>01485     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01486"></a>01486 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_polynomial.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_polynomial.c,v 1.35 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the ESO Common Pipeline Library</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.35 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "irplib_polynomial.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* DBL_MAX: */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                   Macro definitions</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#define IRPLIB_SWAP(a,b) { const double t=(a);(a)=(b);(b)=t; }</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define irplib_trace() cpl_msg_info(cpl_func, "%d: Trace", __LINE__)</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define irplib_trace() </span><span class="comment">/* Trace */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                                   Static functions</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_2_max(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, cpl_boolean,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                            <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_3_max(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                            cpl_boolean, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                                 <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_3(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                                 <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                                 cpl_boolean *,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                                 cpl_boolean *);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_31(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                           <span class="keywordtype">double</span> *, cpl_boolean *);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_32(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, cpl_boolean *);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3r(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3c(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                           <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                           <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                                           cpl_boolean *, cpl_boolean *);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_4(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                                    <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, cpl_size *,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                                                    <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                                                    <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_nonzero(cpl_polynomial *,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                                          cpl_vector *,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                                          cpl_size *);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_divide_1d_root(cpl_polynomial *, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                                        <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">#ifdef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_depress_1d(cpl_polynomial *);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE > CPL_VERSION(5, 92, 0)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"><a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853">  134</a></span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853" title="Add two polynomials of the same dimension.">irplib_polynomial_add</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                                      <span class="keyword">const</span> cpl_polynomial * first,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                                      <span class="keyword">const</span> cpl_polynomial * second)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_size       degree0 = cpl_polynomial_get_degree(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keyword">const</span> cpl_size degree1 = cpl_polynomial_get_degree(first);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keyword">const</span> cpl_size degree2 = cpl_polynomial_get_degree(second);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keyword">const</span> cpl_size maxdeg  = degree1 > degree2 ? degree1 : degree2;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_ensure_code(first  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_ensure_code(second != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                     cpl_polynomial_get_dimension(first),</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                     cpl_polynomial_get_dimension(second),</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/* FIXME: */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                     CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">if</span> (degree0 < maxdeg) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         degree0 = maxdeg;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="comment">/* Reset coefficients in self as needed */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         <span class="keywordflow">for</span> (; degree0 > maxdeg; degree0--) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>             cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, 0.0);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="comment">/* assert( degree0 == maxdeg ); */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">for</span> (; degree0 >= 0; degree0--) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val1 = cpl_polynomial_get_coeff(first, &degree0);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, &degree0);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, val1 + val2);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"><a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084">  195</a></span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084" title="Subtract two polynomials of the same dimension.">irplib_polynomial_subtract</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                           <span class="keyword">const</span> cpl_polynomial * first,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                           <span class="keyword">const</span> cpl_polynomial * second)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cpl_size       degree0 = cpl_polynomial_get_degree(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keyword">const</span> cpl_size degree1 = cpl_polynomial_get_degree(first);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keyword">const</span> cpl_size degree2 = cpl_polynomial_get_degree(second);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keyword">const</span> cpl_size maxdeg  = degree1 > degree2 ? degree1 : degree2;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     cpl_ensure_code(first  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     cpl_ensure_code(second != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                     cpl_polynomial_get_dimension(first),</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) ==</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                     cpl_polynomial_get_dimension(second),</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="comment">/* FIXME: */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                     CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">if</span> (degree0 < maxdeg) {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         degree0 = maxdeg;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="comment">/* Reset coefficients in self as needed */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         <span class="keywordflow">for</span> (; degree0 > maxdeg; degree0--) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>             cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, 0.0);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="comment">/* assert( degree0 == maxdeg ); */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">for</span> (; degree0 >= 0; degree0--) {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val1 = cpl_polynomial_get_coeff(first, &degree0);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val2 = cpl_polynomial_get_coeff(second, &degree0);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree0, val1 - val2);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno"><a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786">  253</a></span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786" title="Multiply a polynomial with a scalar.">irplib_polynomial_multiply_scalar</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                                  <span class="keyword">const</span> cpl_polynomial * other,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                                                  <span class="keywordtype">double</span> factor)</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keyword">const</span> cpl_size maxdeg  = cpl_polynomial_get_degree(other);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keyword">const</span> cpl_size zerodeg = cpl_polynomial_get_degree(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     cpl_size       degree;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     cpl_ensure_code(other != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                     CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_ensure_code(cpl_polynomial_get_dimension(other) == 1,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                     CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">for</span> (degree = 0; degree <= maxdeg; degree++) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val = factor * cpl_polynomial_get_coeff(other, &degree);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree, val);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="comment">/* Reset coefficients in self as needed */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">for</span> (; degree <= zerodeg; degree++) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &zerodeg, 0.0);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno"><a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385">  310</a></span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385" title="Compute all n roots of p(x) = 0, where p(x) is of degree n, n > 0.">irplib_polynomial_solve_1d_all</a>(<span class="keyword">const</span> cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                               cpl_vector * roots,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                               cpl_size * preal)</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> {</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_polynomial * p;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     cpl_ensure_code(roots != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cpl_ensure_code(preal != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                     CPL_ERROR_INVALID_TYPE);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                     CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) ==</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                     cpl_vector_get_size(roots), CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     *preal = 0;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     p = cpl_polynomial_duplicate(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     error = irplib_polynomial_solve_1d_nonzero(p, roots, preal);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     cpl_polynomial_delete(p);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> }</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_nonzero(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                                                          cpl_vector * roots,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                                                          cpl_size * preal)</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_error_code error   = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keyword">const</span> cpl_size ncoeffs = 1 + cpl_polynomial_get_degree(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     cpl_ensure_code(roots != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     cpl_ensure_code(preal != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                     CPL_ERROR_INVALID_TYPE);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     cpl_ensure_code(ncoeffs   > 1,  CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     cpl_ensure_code(*preal >= 0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     cpl_ensure_code(ncoeffs + *preal == 1+cpl_vector_get_size(roots),</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="keywordflow">switch</span> (ncoeffs) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">case</span> 2 : {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         <span class="keyword">const</span> cpl_size i1 = 1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         <span class="keyword">const</span> cpl_size i0 = 0;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         cpl_vector_set(roots, (*preal)++, -p0/p1);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">case</span> 3 : {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         <span class="keyword">const</span> cpl_size i2 = 2;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keyword">const</span> cpl_size i1 = 1;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         <span class="keyword">const</span> cpl_size i0 = 0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="keywordtype">double</span>         x1, x2;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         <span class="keywordflow">if</span> (irplib_polynomial_solve_1d_2(p2, p1, p0, &x1, &x2)) {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             <span class="comment">/* This is the complex root in the upper imaginary half-plane */</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             cpl_vector_set(roots, (*preal)  , x1);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>             cpl_vector_set(roots, (*preal)+1, x2);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>             cpl_vector_set(roots, (*preal)++, x1);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>             cpl_vector_set(roots, (*preal)++, x2);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">case</span> 4 : {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keyword">const</span> cpl_size i3 = 3;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         <span class="keyword">const</span> cpl_size i2 = 2;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="keyword">const</span> cpl_size i1 = 1;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         <span class="keyword">const</span> cpl_size i0 = 0;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p3 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i3);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         <span class="keywordtype">double</span>         x1, x2, x3;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         <span class="keywordflow">if</span> (irplib_polynomial_solve_1d_3(p3, p2, p1, p0, &x1, &x2, &x3,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                          NULL, NULL)) {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>             cpl_vector_set(roots, (*preal)++, x1);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             <span class="comment">/* This is the complex root in the upper imaginary half-plane */</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             cpl_vector_set(roots, (*preal)  , x2);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             cpl_vector_set(roots, (*preal)+1, x3);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             cpl_vector_set(roots, (*preal)++, x1);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>             cpl_vector_set(roots, (*preal)++, x2);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>             cpl_vector_set(roots, (*preal)++, x3);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     }</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordflow">case</span> 5 : {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>         <span class="keyword">const</span> cpl_size i4 = 4;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         <span class="keyword">const</span> cpl_size i3 = 3;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         <span class="keyword">const</span> cpl_size i2 = 2;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         <span class="keyword">const</span> cpl_size i1 = 1;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keyword">const</span> cpl_size i0 = 0;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p4 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i4);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p3 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i3);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p2 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i2);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i1);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>   p0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i0);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         <span class="keywordtype">double</span>         x1, x2, x3, x4;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         cpl_size       nreal;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         error = irplib_polynomial_solve_1d_4(p4, p3, p2, p1, p0, &nreal,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                                              &x1, &x2, &x3, &x4);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             cpl_vector_set(roots, (*preal)  , x1);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             cpl_vector_set(roots, (*preal)+1, x2);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             cpl_vector_set(roots, (*preal)+2, x3);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             cpl_vector_set(roots, (*preal)+3, x4);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>             *preal += nreal;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         }</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     <span class="keywordflow">default</span>: {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         <span class="comment">/* Try to reduce the problem by finding a single root */</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="preprocessor">#ifndef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="preprocessor"></span>        <span class="keyword">const</span> cpl_size    n0 = ncoeffs-1;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> pn0 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &n0);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         <span class="keyword">const</span> cpl_size    n1 = ncoeffs-2;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> pn1 = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &n1);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>         <span class="comment">/* First guess of root is the root average.</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">           FIXME: May need refinement, e.g. via bisection */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> rmean = -pn1 / (pn0 * n0);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         <span class="keywordtype">double</span> root = rmean;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="preprocessor"></span>        <span class="comment">/* Try an analytical solution to a (shifted) monomial */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         cpl_polynomial * copy = cpl_polynomial_duplicate(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keyword">const</span> cpl_size    i0 = 0;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> rmean = irplib_polynomial_depress_1d(copy);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> c0 = cpl_polynomial_get_coeff(copy, &i0);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         <span class="keywordtype">double</span> root = rmean + ((n0&1) && c0 < 0.0 ? -1.0 : 1.0)</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>             * pow(fabs(c0), 1.0/n0);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>         cpl_polynomial_delete(copy);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         error = cpl_polynomial_solve_1d(<span class="keyword">self</span>, root, &root, 1);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>             cpl_vector_set(roots, (*preal)++, root);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>             irplib_polynomial_divide_1d_root(<span class="keyword">self</span>, root, NULL);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>             error = irplib_polynomial_solve_1d_nonzero(<span class="keyword">self</span>, roots, preal);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>             <span class="keywordflow">if</span> (!error && *preal > 1) {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                 <span class="comment">/* Sort the real roots */</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>                 <span class="comment">/* FIXME: Assumes that all roots found so far are real */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                 cpl_vector * reals = cpl_vector_wrap(*preal,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                                                      cpl_vector_get_data(roots));</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                 cpl_vector_sort(reals, 1);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                 (void)cpl_vector_unwrap(reals);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     }</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_2(<span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                                                 <span class="keywordtype">double</span> * px1,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                                                 <span class="keywordtype">double</span> * px2) {</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtD = sqrt(fabs(p1 * p1 - 4.0 * p2 * p0));</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     cpl_boolean is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keywordtype">double</span> x1 = -0.5 * p1 / p2; <span class="comment">/* Double root */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordtype">double</span> x2;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="comment">/* Compute residual, assuming D == 0 */</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordtype">double</span> res0 = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_FALSE, x1, x1);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordtype">double</span> res;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     assert(px1 != NULL );</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     assert(px2 != NULL );</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     *px2 = *px1 = x1;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <span class="comment">/* Compute residual, assuming D > 0 */</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="comment">/* x1 is the root with largest absolute value */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="keywordflow">if</span> (p1 > 0.0) {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         x1 = -0.5 * (p1 + sqrtD);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         x1 = -0.5 * (p1 - sqrtD);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="comment">/* Compute smaller root via division to avoid</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">       loss of precision due to cancellation */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     x2 = p0 / x1;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     x1 /= p2; <span class="comment">/* Scale x1 with leading coefficient */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     res = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_FALSE, x1, x2);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordflow">if</span> (res < res0) {</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         res0 = res;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         <span class="keywordflow">if</span> (x2 > x1) {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>             *px1 = x1;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>             *px2 = x2;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             *px1 = x2;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>             *px2 = x1;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="comment">/* Compute residual, assuming D < 0 */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     x1 = -0.5 * p1 / p2;          <span class="comment">/* Real part of complex root */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     x2 =  0.5 * sqrtD / fabs(p2); <span class="comment">/* Positive, imaginary part of root */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     res  = irplib_polynomial_eval_2_max(p2, p1, p0, CPL_TRUE,  x1, x2);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     <span class="keywordflow">if</span> (res < res0) {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         *px1 = x1;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         *px2 = x2;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         is_complex = CPL_TRUE;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="keywordflow">return</span> is_complex;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_2_max(<span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                                            cpl_boolean is_c,</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                                            <span class="keywordtype">double</span> x1, <span class="keywordtype">double</span> x2)</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <span class="keywordtype">double</span> res;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="keywordflow">if</span> (is_c) {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         res = fabs(p0 + x1 * (p1 + x1 * p2) - p2 * x2 * x2);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> r1 = fabs(p0 + x1 * (p1 + x1 * p2));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * p2));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         res = r1 > r2 ? r1 : r2;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> }</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_eval_3_max(<span class="keywordtype">double</span> p3, <span class="keywordtype">double</span> p2,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                                            <span class="keywordtype">double</span> p1, <span class="keywordtype">double</span> p0,</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                                            cpl_boolean is_c,</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                                            <span class="keywordtype">double</span> x1, <span class="keywordtype">double</span> x2, <span class="keywordtype">double</span> x3)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> r1 = fabs(p0 + x1 * (p1 + x1 * (p2 + x1 * p3)));</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     <span class="keywordtype">double</span> res;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     <span class="keywordflow">if</span> (is_c) {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * (p2 + x2 * p3))</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                                - x3 * x3 * ( 3.0 * p3 * x2 + p2));</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         res = r1 > r2 ? r1 : r2;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> r2 = fabs(p0 + x2 * (p1 + x2 * (p2 + x2 * p3)));</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> r3 = fabs(p0 + x3 * (p1 + x3 * (p2 + x3 * p3)));</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         res = r1 > r2 ? (r1 > r3 ? r1 : r3) : (r2 > r3 ? r2 : r3);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     <span class="comment">/* cpl_msg_info(cpl_func, "%d: %g (%g)", __LINE__, res, r1); */</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> }</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> <span class="keyword">static</span> cpl_boolean irplib_polynomial_solve_1d_3(<span class="keywordtype">double</span> p3, <span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                                                 <span class="keywordtype">double</span> p0,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                                                 <span class="keywordtype">double</span> * px1,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                                                 <span class="keywordtype">double</span> * px2,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                                                 <span class="keywordtype">double</span> * px3,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                                                 cpl_boolean * pdbl1,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                                                 cpl_boolean * pdbl2) {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     cpl_boolean is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> a = p2/p3;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> b = p1/p3;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> c = p0/p3;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> q = (a * a - 3.0 * b);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> r = (a * (2.0 * a * a - 9.0 * b) + 27.0 * c);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> Q = q / 9.0;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> R = r / 54.0;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> Q3 = Q * Q * Q;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> R2 = R * R;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordtype">double</span> x1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     <span class="keywordtype">double</span> x2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     <span class="keywordtype">double</span> x3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="keywordtype">double</span> xx1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordtype">double</span> xx2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordtype">double</span> xx3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     <span class="keywordtype">double</span> resx = DBL_MAX;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="keywordtype">double</span> res  = DBL_MAX;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     cpl_boolean is_first = CPL_TRUE;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     cpl_boolean dbl2;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     assert(px1 != NULL );</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     dbl2 = CPL_FALSE;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="comment">      All branches (for which the roots are defined) are evaluated, and</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="comment">      the branch with the smallest maximum-residual is chosen.</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="comment">      When two maximum-residual are identical, preference is given to</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="comment">      the purely real solution and if necessary to the solution with a</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">      double root.</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     <span class="keywordflow">if</span> ((R2 >= Q3 && R != 0.0) || R2 > Q3) {</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         cpl_boolean is_c = CPL_FALSE;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         irplib_polynomial_solve_1d_3c(a, c, Q, Q3, R, R2, &x1, &x2, &x3,</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>                                       &is_c, &dbl2);</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>         res = resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, is_c,</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>                                             x1, x2, x3);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         is_first = CPL_FALSE;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>         <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         <span class="keywordflow">if</span> (!is_c && pdbl2 != NULL) *pdbl2 = dbl2;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         is_complex = is_c;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>    </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     }</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     <span class="keywordflow">if</span> (Q > 0.0 && fabs(R / (Q * sqrt(Q))) <= 1.0) {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         <span class="comment">/* this test is actually R2 < Q3, written in a form suitable</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="comment">           for exact computation with integers */</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="comment">/* assert( Q > 0.0 ); */</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         irplib_polynomial_solve_1d_3r(a, c, Q, R, &xx1, &xx2, &xx3);</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>                                             xx1, xx2, xx3);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         <span class="keywordflow">if</span> (is_first || (dbl2 ? resx < res : resx <= res)) {</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             is_first = CPL_FALSE;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>             res = resx;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>             x1 = xx1;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             x2 = xx2;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>             x3 = xx3;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>             is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>         }</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     }</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordflow">if</span> (Q >= 0) {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         cpl_boolean dbl1 = CPL_FALSE;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         irplib_polynomial_solve_1d_32(a, c, Q, &xx1, &xx2, &xx3, &dbl2);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                                             xx1, xx2, xx3);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">        cpl_msg_info(cpl_func, "%d: %g = %g - %g (%u)", __LINE__,</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">                     res - resx, res, resx, is_complex);</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         <span class="keywordflow">if</span> (is_first || resx <= res) {</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             is_first = CPL_FALSE;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>             res = resx;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>             x1 = xx1;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>             x2 = xx2;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>             x3 = xx3;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_FALSE;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = dbl2;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         }</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         <span class="comment">/* This branch also covers the case where the depressed cubic</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="comment">           polynomial has zero as triple root (i.e. Q == R == 0) */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>         irplib_polynomial_solve_1d_31(a, Q, &xx1, &xx2, &xx3, &dbl1);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>         resx = irplib_polynomial_eval_3_max(p3, p2, p1, p0, CPL_FALSE,</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>                                             xx1, xx2, xx3);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>         <span class="keywordflow">if</span> (resx <= res) {</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>             is_first = CPL_FALSE;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>             res = resx;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>             x1 = xx1;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>             x2 = xx2;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>             x3 = xx3;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>             <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = dbl1;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>             <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_FALSE;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>             is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>         }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">if</span> (px2 != NULL && px3 != NULL) {</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>         *px1 = x1;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>         *px2 = x2;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         *px3 = x3;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex) {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>         *px1 = x1;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>         *px1 = x3;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     }</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     <span class="keywordflow">return</span> is_complex;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> }</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_31(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> Q,</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>                                           <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>                                           <span class="keywordtype">double</span> * px3, cpl_boolean * pdbl1)</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt (Q);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     <span class="keywordtype">double</span> x1, x2, x3;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     x2 = x1 = -sqrtQ - a / 3.0;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     x3 = 2.0 * sqrtQ - a / 3.0;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordflow">if</span> (pdbl1 != NULL) *pdbl1 = CPL_TRUE;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     *px1 = x1;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     *px2 = x2;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     *px3 = x3;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> }</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_32(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c, <span class="keywordtype">double</span> Q,</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>                                           <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>                                           <span class="keywordtype">double</span> * px3, cpl_boolean * pdbl2)</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> {</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt (Q);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordtype">double</span> x1 = DBL_MAX;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     <span class="keywordtype">double</span> x2 = DBL_MAX;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="keywordtype">double</span> x3 = DBL_MAX;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     <span class="keywordflow">if</span> (a > 0.0) {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         <span class="comment">/* a and sqrt(Q) have same sign - or Q is zero */</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         x1 = -2.0 * sqrtQ - a / 3.0;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         <span class="comment">/* FIXME: Two small roots with opposite signs may</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="comment">           end up here, with the sign lost for one of them */</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         x3 = x2 = -a < x1 ? -sqrt(fabs(c / x1)) : sqrt(fabs(c / x1));</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a < 0.0) {</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         <span class="comment">/* a and sqrt(Q) have opposite signs - or Q is zero */</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>         x3 = x2 = sqrtQ - a / 3.0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         x1 = -c / (x2 * x2);</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>         x1 = -2.0 * sqrtQ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>         x3 = x2 = sqrtQ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     }</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     *px1 = x1;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     *px2 = x2;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     *px3 = x3;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3c(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c,</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>                                           <span class="keywordtype">double</span> Q, <span class="keywordtype">double</span> Q3,</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>                                           <span class="keywordtype">double</span> R, <span class="keywordtype">double</span> R2,</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>                                           <span class="keywordtype">double</span> * px1,</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>                                           <span class="keywordtype">double</span> * px2, <span class="keywordtype">double</span> * px3,</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>                                           cpl_boolean * pis_c,</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                                           cpl_boolean * pdbl2)</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> {</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> </div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     <span class="comment">/* Due to finite precision some double roots may be missed, and</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="comment">       will be considered to be a pair of complex roots z = x +/-</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="comment">       epsilon i close to the real axis. */</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="comment">/* Another case: A double root, which is small relative to the</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="comment">       last root, may cause this branch to be taken - with the</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment">       imaginary part eventually being truncated to zero. */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sgnR = (R >= 0 ? 1.0 : -1.0);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> A = -sgnR * pow (fabs (R) + sqrt (R2 - Q3), 1.0 / 3.0);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> B = Q / A;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     <span class="keywordtype">double</span> x1 = DBL_MAX;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordtype">double</span> x2 = DBL_MAX;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     <span class="keywordtype">double</span> x3 = DBL_MAX;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     cpl_boolean is_complex = CPL_FALSE;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordflow">if</span> (( A > -B && a > 0.0) || (A < -B && a < 0.0)) {</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>         <span class="comment">/* A+B has same sign as a */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         <span class="comment">/* Real part of complex conjugate */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         x2 = -0.5 * (A + B) - a / 3.0; <span class="comment">/* No cancellation */</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         <span class="comment">/* Positive, imaginary part of complex conjugate */</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         x3 = 0.5 * CPL_MATH_SQRT3 * fabs(A - B);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         x1 = -c / (x2 * x2 + x3 * x3);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>         <span class="comment">/* A+B and a have opposite signs - or exactly one is zero */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>         x1 = A + B - a / 3.0;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>         <span class="comment">/* Positive, imaginary part of complex conjugate */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         x3 = 0.5 * CPL_MATH_SQRT3 * fabs(A - B);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         <span class="keywordflow">if</span> (x3 > 0.0) {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>             <span class="comment">/* Real part of complex conjugate */</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>             x2 = -0.5 * (A + B) - a / 3.0; <span class="comment">/* FIXME: Cancellation */</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>             x2 = -a < x1 ? -sqrt(fabs(c / x1)) : sqrt(fabs(c / x1));</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             x3 = 0.0;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>         }</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     }</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     <span class="keywordflow">if</span> (x3 > 0.0) {</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         is_complex = CPL_TRUE;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         <span class="comment">/* Whoaa, the imaginary part was truncated to zero</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">           - return a real, double root */</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         x3 = x2;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         <span class="keywordflow">if</span> (pdbl2 != NULL) *pdbl2 = CPL_TRUE;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     *px1 = x1;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     *px2 = x2;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     *px3 = x3;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     *pis_c = is_complex;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_polynomial_solve_1d_3r(<span class="keywordtype">double</span> a, <span class="keywordtype">double</span> c,</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                                           <span class="keywordtype">double</span> Q, <span class="keywordtype">double</span> R,</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                                           <span class="keywordtype">double</span> * px1,</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>                                           <span class="keywordtype">double</span> * px2, <span class="keywordtype">double</span> * px3)</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> {</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sqrtQ = sqrt(Q);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> theta = acos (R / (Q * sqrtQ)); <span class="comment">/* theta in range [0; pi] */</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     <span class="comment">/* -1.0 <= cos((theta + CPL_MATH_2PI) / 3.0) <= -0.5</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">       -0.5 <= cos((theta - CPL_MATH_2PI) / 3.0) <=  0.5</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">        0.5 <= cos((theta                  ) / 3.0) <=  1.0 */</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="preprocessor">#define TR1 (-2.0 * sqrtQ * cos( theta                    / 3.0))</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="preprocessor"></span><span class="preprocessor">#define TR2 (-2.0 * sqrtQ * cos((theta - CPL_MATH_2PI) / 3.0))</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="preprocessor"></span><span class="preprocessor">#define TR3 (-2.0 * sqrtQ * cos((theta + CPL_MATH_2PI) / 3.0))</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="comment">/* TR1 < TR2 < TR3, except when theta == 0, then TR2 == TR3 */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="comment">/* The three roots must be transformed back via subtraction with a/3.</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">       To prevent loss of precision due to cancellation, the root which</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment">       is closest to a/3 is computed using the relation</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">       p3 * x1 * x2 * x3 = -p0 */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordtype">double</span> x1 = DBL_MAX;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordtype">double</span> x2 = DBL_MAX;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     <span class="keywordtype">double</span> x3 = DBL_MAX;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     <span class="keywordflow">if</span> (a > 0.0) {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         x1 = TR1 - a / 3.0;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         <span class="keywordflow">if</span> (TR2 > 0.0 && (TR2 + TR3) > 2.0 * a) {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>             <span class="comment">/* FIXME: Cancellation may still effect x3 ? */</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>             x3 = TR3 - a / 3.0;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>             x2 = -c / ( x1 * x3 );</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>             <span class="comment">/* FIXME: Cancellation may still effect x2, especially</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">               if x2, x3 is (almost) a double root, i.e.</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">               if theta is close to zero. */</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>             x2 = TR2 - a / 3.0;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>             x3 = -c / ( x1 * x2 );</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>         }</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (a < 0.0) {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>         x3 = TR3 - a / 3.0;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         <span class="keywordflow">if</span> (TR2 < 0.0 && (TR1 + TR2) > 2.0 * a) {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>             x1 = TR1 - a / 3.0;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>             x2 = -c / ( x1 * x3 );</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>             x2 = TR2 - a / 3.0;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>             x1 = -c / ( x2 * x3 );</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>             irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>         x1 = TR1;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>         x2 = TR2;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>         x3 = TR3;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     assert(x1 < x3);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">if</span> (x1 > x2) {</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>         <span class="comment">/* In absence of round-off:</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="comment">           theta == PI: x1 == x2,</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">           theta  < PI: x1 <  x2,</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment"></span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">           The only way x1 could exceed x2 would be due to round-off when</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="comment">           theta is close to PI */</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>      </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         x1 = x2 = 0.5 * ( x1 + x2 );</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         irplib_trace(); <span class="comment">/* OK, tested only for x1 == x2 */</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x2 > x3) {</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         <span class="comment">/* In absence of round-off:</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">           theta == 0: x2 == x3,</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">           theta  > 0: x2 <  x3,</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment"></span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">           For small theta:</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> <span class="comment">           Round-off can cause x2 to become greater than x3 */</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>      </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>         x3 = x2 = 0.5 * ( x2 + x3 );</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         irplib_trace(); <span class="comment">/* OK */</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     *px1 = x1;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     *px2 = x2;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     *px3 = x3;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keyword">static</span> cpl_error_code irplib_polynomial_solve_1d_4(<span class="keywordtype">double</span> p4, <span class="keywordtype">double</span> p3,</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                                                    <span class="keywordtype">double</span> p2, <span class="keywordtype">double</span> p1,</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                                                    <span class="keywordtype">double</span> p0, cpl_size * preal,</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                                                    <span class="keywordtype">double</span> * px1, <span class="keywordtype">double</span> * px2,</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                                                    <span class="keywordtype">double</span> * px3, <span class="keywordtype">double</span> * px4)</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     <span class="comment">/* Construct the monic, depressed quartic using Horners scheme on 1 / p4 */</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> a = (p2 - 0.375 * p3 * p3 / p4) / p4;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> b = (p1 - 0.5 * (p2 - 0.25 * p3 * p3 / p4 ) * p3 / p4 ) / p4;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> c =</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         (p0 - 0.25 * (p1 - 0.25 * (p2 - 0.1875 * p3 * p3 / p4 ) * p3 / p4</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>                       ) * p3 / p4 ) / p4;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     <span class="keywordtype">double</span> x1 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     <span class="keywordtype">double</span> x2 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="keywordtype">double</span> x3 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="keywordtype">double</span> x4 = DBL_MAX; <span class="comment">/* Fix (false) uninit warning */</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     assert(preal != NULL );</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     assert(px1   != NULL );</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     assert(px2   != NULL );</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     assert(px3   != NULL );</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     assert(px4   != NULL );</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     *preal = 4;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> </div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <span class="keywordflow">if</span> (c == 0.0) {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         <span class="comment">/* The depressed quartic has zero as root */</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         <span class="comment">/* Since the sum of the roots is zero, at least one is negative</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">           and at least one is positive - unless they are all zero */</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         cpl_boolean dbl1, dbl2;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         <span class="keyword">const</span> cpl_boolean is_real =</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>             !irplib_polynomial_solve_1d_3(1.0, 0.0, a, b, &x1, &x3, &x4,</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>                                           &dbl1, &dbl2);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>         x1 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>         x2 = -0.25 * p3 / p4;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>         x3 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>         <span class="keywordflow">if</span> (is_real) {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>             <span class="keywordflow">if</span> (dbl2) {</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                 x4 = x3;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>                 assert( x1 <= x2);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>                 assert( x2 <= x3);</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>                 x4 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                 <span class="comment">/* Need (only) a guarded swap of x2, x3 */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                 <span class="keywordflow">if</span> (x2 > x3) {</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                     IRPLIB_SWAP(x2, x3);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                 }</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>                 <span class="keywordflow">if</span> (dbl1) {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>                     assert( x1 <= x2); <span class="comment">/* The cubic may have 0 as triple root */</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                     assert( x2 <= x3);</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                     assert( x2 <= x4);</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                     assert( x1 < x2);</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>                     assert( x2 < x4);</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>                 }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>             }</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>             *preal = 2;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>             <span class="keywordflow">if</span> (x1 > x2) {</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>                 assert( x3 <= x2 ); <span class="comment">/* Don't swap a complex root */</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>                 IRPLIB_SWAP(x1, x2);</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                 assert( x3 >= x2 );</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>             }</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>         }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b == 0.0) {</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>         <span class="comment">/* The monic, depressed quartic is a monic, biquadratic equation */</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>         <span class="keywordtype">double</span> u1, u2;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>         <span class="keyword">const</span> cpl_boolean is_complex = irplib_polynomial_solve_1d_2(1.0, a, c,</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                                                                     &u1, &u2);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>         <span class="keywordflow">if</span> (is_complex) {</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>             <span class="comment">/* All four roots are conjugate, complex */</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> norm = sqrt(u1*u1 + u2*u2);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>             <span class="keyword">const</span> <span class="keywordtype">double</span>   v1 = sqrt(0.5*(norm+u1));</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>             <span class="keyword">const</span> <span class="keywordtype">double</span>   v2 = u2 / sqrt(2.0*(norm+u1));</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>             x1 = -0.25 * p3 / p4 - v1;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>             x3 = -0.25 * p3 / p4 + v1;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>             x4 = x2 = v2;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>             *preal = 0;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (u1 >= 0.0) {</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>             <span class="comment">/* All four roots are real */</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(u1);</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(u2);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             *preal = 4;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>             x1 = -0.25 * p3 / p4 - sv2;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>             x2 = -0.25 * p3 / p4 - sv1;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>             x3 = -0.25 * p3 / p4 + sv1;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>             x4 = -0.25 * p3 / p4 + sv2;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (u2 < 0.0) {</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>             <span class="comment">/* All four roots are conjugate, complex */</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(-u2);</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(-u1);</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>             *preal = 0;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>             x1 = x3 = -0.25 * p3 / p4;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>             x2 = sv1;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>             x4 = sv2;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>             <span class="comment">/* Two roots are real, two roots are conjugate, complex */</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv1 = sqrt(-u1);</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> sv2 = sqrt(u2);</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>             *preal = 2;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>             x1 = -0.25 * p3 / p4 - sv2;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>             x2 = -0.25 * p3 / p4 + sv2;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>             x3 = -0.25 * p3 / p4;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>             x4 = sv1;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>         }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>         <span class="comment">/* Need a root from the nested, monic cubic */</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> q2 = -a;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> q1 = -4.0 * c;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> q0 = 4.0 * a * c - b * b;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>         <span class="keywordtype">double</span> u1, sqrtd, sqrtrd;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>         <span class="keywordtype">double</span> z1, z2, z3, z4;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>         cpl_boolean is_complex1, is_complex2;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>         <span class="comment">/* Largest cubic root ensures real square roots when solving the</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment">           quartic equation */</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>         (void)irplib_polynomial_solve_1d_3(1.0, q2, q1, q0, &u1, NULL, NULL,</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>                                            NULL, NULL);</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>         assert( u1 > a );</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         sqrtd = sqrt(u1 - a);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>         sqrtrd = 0.5 * b/sqrtd;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         is_complex1 = irplib_polynomial_solve_1d_2(1.0,  sqrtd, 0.5*u1 - sqrtrd,</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>                                                    &z1, &z2);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>         is_complex2 = irplib_polynomial_solve_1d_2(1.0, -sqrtd, 0.5*u1 + sqrtrd,</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>                                                    &z3, &z4);</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> </div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>         z1 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>         z3 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>         <span class="keywordflow">if</span> (!is_complex1) z2 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>         <span class="keywordflow">if</span> (!is_complex2) z4 -= 0.25 * p3 / p4;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>         <span class="keywordflow">if</span> (!is_complex1 && is_complex2) {</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>             *preal = 2;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>             x1 = z1;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>             x2 = z2;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>             x3 = z3;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>             x4 = z4;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex1 && !is_complex2) {</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>             *preal = 2;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>             x1 = z3;</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>             x2 = z4;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>             x3 = z1;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>             x4 = z2;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_complex1 && is_complex2) {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>             *preal = 0;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>             <span class="keywordflow">if</span> (z1 < z3 || (z1 == z3 && z2 <= z4)) {</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>                 x1 = z1;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>                 x2 = z2;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>                 x3 = z3;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>                 x4 = z4;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                 x1 = z3;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                 x2 = z4;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>                 x3 = z1;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                 x4 = z2;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>             }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             *preal = 4;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>             <span class="keywordflow">if</span> (z3 >= z2) {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>                 x1 = z1;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>                 x2 = z2;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>                 x3 = z3;</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>                 x4 = z4;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z4 <= z1) {</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>                 x1 = z3;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>                 x2 = z4;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>                 x3 = z1;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>                 x4 = z2;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (z2 > z4) {</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>                 x1 = z3;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>                 x2 = z1;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>                 x3 = z4;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>                 x4 = z2;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>                 x1 = z1;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>                 x2 = z3;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>                 x3 = z2;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>                 x4 = z4;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>             }</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         }</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     }</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>     *px1 = x1;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     *px2 = x2;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>     *px3 = x3;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     *px4 = x4;</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> </div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> }</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> </div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="preprocessor">#ifdef IPRLIB_POLYNOMIAL_USE_MONOMIAL_ROOT</span></div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_polynomial_depress_1d(cpl_polynomial * <span class="keyword">self</span>)</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> {</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keyword">const</span> cpl_size degree = cpl_polynomial_get_degree(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keyword">const</span> cpl_size nc1    = degree - 1;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>   an     = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &degree);</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>   an1    = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &nc1);</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     <span class="keywordtype">double</span>         rmean;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     cpl_size       i;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> </div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>     cpl_ensure(degree > 0,   CPL_ERROR_DATA_NOT_FOUND, 0.0);</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     assert( an != 0.0 );</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     rmean = -an1/(an * (double)degree);</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <span class="keywordflow">if</span> (rmean != 0.0) {</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, rmean);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> </div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &nc1, 0.0); <span class="comment">/* Round-off... */</span></div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> </div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     }</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>     <span class="comment">/* Set leading coefficient to one. */</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     <span class="keywordflow">for</span> (i = 0; i < degree-1; i++) {</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> ai = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i) / an;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>         cpl_polynomial_set_coeff(<span class="keyword">self</span>, &i, ai);</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>     }</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>     cpl_polynomial_set_coeff(<span class="keyword">self</span>, &degree, 1.0); <span class="comment">/* Round-off... */</span></div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> </div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>     <span class="keywordflow">return</span> rmean;</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> }</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> cpl_error_code irplib_polynomial_divide_1d_root(cpl_polynomial * p, <span class="keywordtype">double</span> r,</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>                                                 <span class="keywordtype">double</span> * pres)</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> {</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     <span class="keyword">const</span> cpl_size n = cpl_polynomial_get_degree(p);</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordtype">double</span>         sum;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     cpl_size       i;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> </div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     cpl_ensure_code(p != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     cpl_ensure_code(cpl_polynomial_get_dimension(p) == 1,</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>                     CPL_ERROR_INVALID_TYPE);</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     cpl_ensure_code(n > 0, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     sum = cpl_polynomial_get_coeff(p, &n);</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     cpl_polynomial_set_coeff(p, &n, 0.0);</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     <span class="keywordflow">for</span> (i = n-1; i >= 0; i--) {</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> coeff = cpl_polynomial_get_coeff(p, &i);</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> </div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         cpl_polynomial_set_coeff(p, &i, sum);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>         sum = coeff + r * sum;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> </div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     <span class="keywordflow">if</span> (pres != NULL) *pres = sum;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__polynomial_8h_source.html b/html/irplib__polynomial_8h_source.html
index 60db9c3..997fc79 100644
--- a/html/irplib__polynomial_8h_source.html
+++ b/html/irplib__polynomial_8h_source.html
@@ -2,85 +2,116 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_polynomial.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_polynomial.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_polynomial.h,v 1.10 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the ESO Common Pipeline Library</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2007 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_POLYNOMIAL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_POLYNOMIAL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                              Function prototypes</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE > CPL_VERSION(5, 92, 0)</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_add cpl_polynomial_add</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_subtract cpl_polynomial_subtract</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_multiply_scalar cpl_polynomial_multiply_scalar</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853" title="Add two polynomials of the same dimension.">irplib_polynomial_add</a>(cpl_polynomial *,
-<a name="l00053"></a>00053                                      <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00054"></a>00054                                      <span class="keyword">const</span> cpl_polynomial *);
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084" title="Subtract two polynomials of the same dimension.">irplib_polynomial_subtract</a>(cpl_polynomial *,
-<a name="l00057"></a>00057                                           <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00058"></a>00058                                           <span class="keyword">const</span> cpl_polynomial *);
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786" title="Multiply a polynomial with a scalar.">irplib_polynomial_multiply_scalar</a>(cpl_polynomial *,
-<a name="l00061"></a>00061                                                  <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00062"></a>00062                                                  <span class="keywordtype">double</span>);
-<a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385" title="Compute all n roots of p(x) = 0, where p(x) is of degree n, n &gt; 0.">irplib_polynomial_solve_1d_all</a>(<span class="keyword">const</span> cpl_polynomial *,
-<a name="l00068"></a>00068                                               cpl_vector *, cpl_size *);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_polynomial.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_polynomial.h,v 1.10 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the ESO Common Pipeline Library</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2007 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_POLYNOMIAL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_POLYNOMIAL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                              Function prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE > CPL_VERSION(5, 92, 0)</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_add cpl_polynomial_add</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_subtract cpl_polynomial_subtract</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define irplib_polynomial_multiply_scalar cpl_polynomial_multiply_scalar</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span>cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga90e13f05c9addc584f154279681d1853" title="Add two polynomials of the same dimension.">irplib_polynomial_add</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                                      <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                                      <span class="keyword">const</span> cpl_polynomial *);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga0e83ae3c9e7accb70fdfe1aca030e084" title="Subtract two polynomials of the same dimension.">irplib_polynomial_subtract</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                                           <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                                           <span class="keyword">const</span> cpl_polynomial *);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga55c030413e6ef112753b280ad5213786" title="Multiply a polynomial with a scalar.">irplib_polynomial_multiply_scalar</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                                                  <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                                                  <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> cpl_error_code <a class="code" href="group__irplib__polynomial.html#ga87e84d69eadbde803fce3c3cbdedf385" title="Compute all n roots of p(x) = 0, where p(x) is of degree n, n > 0.">irplib_polynomial_solve_1d_all</a>(<span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                               cpl_vector *, cpl_size *);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__ppm_8c_source.html b/html/irplib__ppm_8c_source.html
index 3dee2dc..defc0fa 100644
--- a/html/irplib__ppm_8c_source.html
+++ b/html/irplib__ppm_8c_source.html
@@ -2,468 +2,499 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_ppm.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_ppm.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_ppm.c,v 1.31 2012/06/11 07:24:09 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/06/11 07:24:09 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.31 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_ppm.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "irplib_wlxcorr.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_spectrum.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                   Private functions</span>
-<a name="l00052"></a>00052 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="keyword">static</span> cpl_vector * irplib_ppm_convolve_line(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>,<span class="keywordtype">double</span>);
-<a name="l00055"></a>00055 <span class="keyword">static</span> cpl_vector * irplib_ppm_detect_lines(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>) ;
-<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span>
-<a name="l00058"></a>00058 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00066"></a>00066 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00084"></a><a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d">00084</a> cpl_polynomial * <a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d" title="The Wavelength Calibration using PPM.">irplib_ppm_engine</a>(
-<a name="l00085"></a>00085         <span class="keyword">const</span> cpl_vector        *   spectrum,
-<a name="l00086"></a>00086         <span class="keyword">const</span> cpl_bivector      *   lines_catalog,
-<a name="l00087"></a>00087         <span class="keyword">const</span> cpl_polynomial    *   poly_init,
-<a name="l00088"></a>00088         <span class="keywordtype">double</span>                      slitw,
-<a name="l00089"></a>00089         <span class="keywordtype">double</span>                      fwhm,
-<a name="l00090"></a>00090         <span class="keywordtype">double</span>                      thresh,
-<a name="l00091"></a>00091         <span class="keywordtype">int</span>                         degree,
-<a name="l00092"></a>00092         <span class="keywordtype">int</span>                         doplot,
-<a name="l00093"></a>00093         cpl_table               **  tab_infos)
-<a name="l00094"></a>00094 {
-<a name="l00095"></a>00095 <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>    cpl_vector      *   spec_conv ;
-<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span>    <span class="keywordtype">int</span>                 spec_sz ;
-<a name="l00099"></a>00099     cpl_vector      *   det_lines ;
-<a name="l00100"></a>00100     <span class="keywordtype">double</span>          *   pdet_lines ;
-<a name="l00101"></a>00101     cpl_vector      *   cat_lines ;
-<a name="l00102"></a>00102     <span class="keywordtype">double</span>          *   pcat_lines ;
-<a name="l00103"></a>00103     <span class="keywordtype">double</span>              wmin, wmax ;
-<a name="l00104"></a>00104     <span class="keywordtype">double</span>              disp_min, disp_max, disp ;
-<a name="l00105"></a>00105     <span class="keywordtype">int</span>                 nlines_cat, nlines ;
-<a name="l00106"></a>00106     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   plines_catalog_x ;
-<a name="l00107"></a>00107     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   plines_catalog_y ;
-<a name="l00108"></a>00108     cpl_bivector    *   matched ;
-<a name="l00109"></a>00109     cpl_matrix      *   matchedx;
-<a name="l00110"></a>00110     <span class="keywordtype">int</span>                 match_sz;
-<a name="l00111"></a>00111     cpl_polynomial  *   fitted ;
-<a name="l00112"></a>00112     cpl_table       *   spc_table ;
-<a name="l00113"></a>00113     <span class="keyword">const</span> cpl_vector*   vectors_plot[3];
-<a name="l00114"></a>00114     cpl_vector      *   plot_y ;
-<a name="l00115"></a>00115     <span class="keywordtype">int</span>                 wl_ind, start_ind, stop_ind ;
-<a name="l00116"></a>00116     <span class="keywordtype">double</span>              fill_val ;
-<a name="l00117"></a>00117     cpl_size            deg_loc ;
-<a name="l00118"></a>00118     <span class="keywordtype">int</span>                 i ;
-<a name="l00119"></a>00119     cpl_error_code      error;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="comment">/* Check entries */</span>
-<a name="l00122"></a>00122     <span class="keywordflow">if</span> (spectrum == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00123"></a>00123     <span class="keywordflow">if</span> (lines_catalog == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (poly_init == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126     <span class="comment">/* Initialise */</span>
-<a name="l00127"></a>00127     spec_sz = cpl_vector_get_size(spectrum) ;
-<a name="l00128"></a>00128     deg_loc = (cpl_size)degree ;
-<a name="l00129"></a>00129    
-<a name="l00130"></a>00130 <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span>    <span class="comment">/* METHOD 2 */</span>
-<a name="l00132"></a>00132     <span class="comment">/* Correlate the spectrum with the line profile */</span>
-<a name="l00133"></a>00133     <span class="keywordflow">if</span> ((spec_conv = irplib_ppm_convolve_line(spectrum, slitw, fwhm)) == NULL) {
-<a name="l00134"></a>00134         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot convolve the signal"</span>) ;
-<a name="l00135"></a>00135         <span class="keywordflow">return</span> NULL ;
-<a name="l00136"></a>00136     }
-<a name="l00137"></a>00137    
-<a name="l00138"></a>00138     <span class="comment">/* Apply the lines detection */</span>
-<a name="l00139"></a>00139     <span class="keywordflow">if</span> ((det_lines = irplib_ppm_detect_lines(spec_conv, 0.9)) == NULL) {
-<a name="l00140"></a>00140         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect lines"</span>) ;
-<a name="l00141"></a>00141         cpl_vector_delete(spec_conv) ;
-<a name="l00142"></a>00142         <span class="keywordflow">return</span> NULL ;
-<a name="l00143"></a>00143     }
-<a name="l00144"></a>00144     cpl_vector_delete(spec_conv) ;
-<a name="l00145"></a>00145 <span class="preprocessor">#else</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span>    <span class="comment">/* METHOD 1 */</span>
-<a name="l00147"></a>00147     <span class="keywordflow">if</span> ((det_lines = <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(spectrum, fwhm,
-<a name="l00148"></a>00148                     thresh, 0, NULL, NULL)) == NULL) {
-<a name="l00149"></a>00149         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot convolve the signal"</span>) ;
-<a name="l00150"></a>00150         <span class="keywordflow">return</span> NULL ;
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152 <span class="preprocessor">#endif</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>    cpl_msg_info(cpl_func, <span class="stringliteral">"Detected %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" lines"</span>, 
-<a name="l00154"></a>00154             cpl_vector_get_size(det_lines));
-<a name="l00155"></a>00155  
-<a name="l00156"></a>00156     <span class="comment">/* Get the catalog lines */</span>
-<a name="l00157"></a>00157     wmin = cpl_polynomial_eval_1d(poly_init, 1.0, NULL) ;
-<a name="l00158"></a>00158     wmax = cpl_polynomial_eval_1d(poly_init, spec_sz, NULL) ;
-<a name="l00159"></a>00159     plines_catalog_x = cpl_bivector_get_x_data_const(lines_catalog) ;
-<a name="l00160"></a>00160     plines_catalog_y = cpl_bivector_get_y_data_const(lines_catalog) ;
-<a name="l00161"></a>00161     nlines = cpl_bivector_get_size(lines_catalog) ;
-<a name="l00162"></a>00162     nlines_cat = 0 ;
-<a name="l00163"></a>00163     start_ind = stop_ind = -1 ;
-<a name="l00164"></a>00164     <span class="keywordflow">for</span> (i=0 ; i<nlines ; i++) {
-<a name="l00165"></a>00165         <span class="keywordflow">if</span> (plines_catalog_x[i] > wmin && plines_catalog_x[i] < wmax &&
-<a name="l00166"></a>00166                 plines_catalog_y[i] > 0.0) {
-<a name="l00167"></a>00167             nlines_cat++ ;
-<a name="l00168"></a>00168             <span class="keywordflow">if</span> (start_ind<0) start_ind = i ;
-<a name="l00169"></a>00169             stop_ind = i ;
-<a name="l00170"></a>00170         }
-<a name="l00171"></a>00171     }
-<a name="l00172"></a>00172     <span class="keywordflow">if</span> (nlines_cat == 0) {
-<a name="l00173"></a>00173         cpl_msg_error(cpl_func, <span class="stringliteral">"No lines in catalog"</span>) ;
-<a name="l00174"></a>00174         cpl_vector_delete(det_lines) ;
-<a name="l00175"></a>00175         <span class="keywordflow">return</span> NULL ;
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177     cat_lines = cpl_vector_new(nlines_cat) ;
-<a name="l00178"></a>00178     pcat_lines = cpl_vector_get_data(cat_lines) ;
-<a name="l00179"></a>00179     nlines_cat = 0 ;
-<a name="l00180"></a>00180     <span class="keywordflow">for</span> (i=0 ; i<nlines ; i++) {
-<a name="l00181"></a>00181         <span class="keywordflow">if</span> (plines_catalog_x[i] > wmin && plines_catalog_x[i] < wmax &&
-<a name="l00182"></a>00182                 plines_catalog_y[i] > 0.0) {
-<a name="l00183"></a>00183             pcat_lines[nlines_cat] = plines_catalog_x[i] ; 
-<a name="l00184"></a>00184             nlines_cat++ ;
-<a name="l00185"></a>00185         }
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187  
-<a name="l00188"></a>00188     <span class="comment">/* Plot inputs */</span>
-<a name="l00189"></a>00189     <span class="keywordflow">if</span> (doplot) {
-<a name="l00190"></a>00190         <span class="comment">/* Catalog */</span>
-<a name="l00191"></a>00191         irplib_wlxcorr_catalog_plot(lines_catalog, wmin, wmax) ;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193         <span class="comment">/* Spectrum with detected lines */</span>
-<a name="l00194"></a>00194         fill_val = cpl_vector_get_max(spectrum) ;
-<a name="l00195"></a>00195         plot_y = cpl_vector_new(spec_sz);
-<a name="l00196"></a>00196         cpl_vector_fill(plot_y, 0.0) ;
-<a name="l00197"></a>00197         pdet_lines = cpl_vector_get_data(det_lines) ;
-<a name="l00198"></a>00198         <span class="keywordflow">for</span> (i=0 ; i<cpl_vector_get_size(det_lines) ; i++) {
-<a name="l00199"></a>00199             cpl_vector_set(plot_y, (<span class="keywordtype">int</span>)pdet_lines[i], fill_val) ;
-<a name="l00200"></a>00200         }
-<a name="l00201"></a>00201         vectors_plot[0] = NULL ;
-<a name="l00202"></a>00202         vectors_plot[1] = spectrum ;
-<a name="l00203"></a>00203         vectors_plot[2] = plot_y ;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (Pixel)';set ylabel "</span>
-<a name="l00206"></a>00206                             <span class="stringliteral">"'Intensity (ADU/sec)';"</span>,
-<a name="l00207"></a>00207                             <span class="stringliteral">"t 'Spectrum with detected lines' w lines"</span>, <span class="stringliteral">""</span>,
-<a name="l00208"></a>00208                             vectors_plot, 3);
-<a name="l00209"></a>00209         cpl_vector_delete(plot_y) ;
-<a name="l00210"></a>00210     }
-<a name="l00211"></a>00211    
-<a name="l00212"></a>00212     <span class="comment">/* Apply the point pattern matching */</span>
-<a name="l00213"></a>00213     disp = (wmax-wmin) / spec_sz ;
-<a name="l00214"></a>00214     disp_min = disp - (disp/10) ;
-<a name="l00215"></a>00215     disp_max = disp + (disp/10) ;
-<a name="l00216"></a>00216     matched = cpl_ppm_match_positions(det_lines, cat_lines, disp_min,
-<a name="l00217"></a>00217                                       disp_max, 0.05, NULL, NULL);
-<a name="l00218"></a>00218     cpl_vector_delete(det_lines) ;
-<a name="l00219"></a>00219     cpl_vector_delete(cat_lines) ;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     <span class="keywordflow">if</span> (matched == NULL) {
-<a name="l00222"></a>00222         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the point pattern matching"</span>) ;
-<a name="l00223"></a>00223         <span class="keywordflow">return</span> NULL ;
-<a name="l00224"></a>00224     }
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     match_sz = cpl_bivector_get_size(matched);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228     cpl_msg_info(cpl_func, <span class="stringliteral">"Matched %d lines"</span>, match_sz) ;
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230     <span class="keywordflow">if</span> (match_sz <= deg_loc) {
-<a name="l00231"></a>00231         cpl_msg_error(cpl_func, <span class="stringliteral">"Not enough match for the fit"</span>) ;
-<a name="l00232"></a>00232         cpl_bivector_delete(matched) ;
-<a name="l00233"></a>00233         <span class="keywordflow">return</span> NULL ;
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235     
-<a name="l00236"></a>00236     <span class="comment">/* Plot if requested */</span>
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (doplot) {
-<a name="l00238"></a>00238         <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pmatched ;
-<a name="l00239"></a>00239         cpl_bivector    *   biplot ;
-<a name="l00240"></a>00240         cpl_vector      *   plot_cat_x ;
-<a name="l00241"></a>00241         cpl_vector      *   plot_cat_y ;
-<a name="l00242"></a>00242         <span class="comment">/* Spectrum with matched lines */</span>
-<a name="l00243"></a>00243         fill_val = cpl_vector_get_max(spectrum) ;
-<a name="l00244"></a>00244         plot_y = cpl_vector_new(spec_sz);
-<a name="l00245"></a>00245         cpl_vector_fill(plot_y, 0.0) ;
-<a name="l00246"></a>00246         pmatched = cpl_bivector_get_x_data_const(matched) ;
-<a name="l00247"></a>00247         <span class="keywordflow">for</span> (i=0 ; i < match_sz; i++) {
-<a name="l00248"></a>00248             cpl_vector_set(plot_y, (<span class="keywordtype">int</span>)pmatched[i], fill_val) ;
-<a name="l00249"></a>00249         }
-<a name="l00250"></a>00250         vectors_plot[0] = NULL ;
-<a name="l00251"></a>00251         vectors_plot[1] = spectrum ;
-<a name="l00252"></a>00252         vectors_plot[2] = plot_y ;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (Pixel)';set ylabel "</span>
-<a name="l00255"></a>00255                             <span class="stringliteral">"'Intensity (ADU/sec)';"</span>,
-<a name="l00256"></a>00256                             <span class="stringliteral">"t 'Spectrum with matched lines' w lines"</span>, <span class="stringliteral">""</span>,
-<a name="l00257"></a>00257                             vectors_plot, 3);
-<a name="l00258"></a>00258         cpl_vector_delete(plot_y) ;
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260         <span class="comment">/* Catalog with matched lines */</span>
-<a name="l00261"></a>00261         plot_cat_x=cpl_vector_extract(cpl_bivector_get_x_const(lines_catalog), 
-<a name="l00262"></a>00262                 start_ind, stop_ind, 1) ;
-<a name="l00263"></a>00263         plot_cat_y=cpl_vector_extract(cpl_bivector_get_y_const(lines_catalog), 
-<a name="l00264"></a>00264                 start_ind, stop_ind, 1) ;
-<a name="l00265"></a>00265         biplot = cpl_bivector_wrap_vectors(plot_cat_x, plot_cat_y) ;
-<a name="l00266"></a>00266         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Wavelength';set ylabel "</span>
-<a name="l00267"></a>00267                              <span class="stringliteral">"'Emission';"</span>, <span class="stringliteral">"t 'Catalog' w impulses"</span>, <span class="stringliteral">""</span>,
-<a name="l00268"></a>00268                              biplot);
-<a name="l00269"></a>00269         cpl_bivector_unwrap_vectors(biplot) ;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271         plot_y = cpl_vector_duplicate(plot_cat_y) ;
-<a name="l00272"></a>00272         cpl_vector_fill(plot_y, 0.0) ;
-<a name="l00273"></a>00273         pmatched = cpl_bivector_get_y_data_const(matched) ;
-<a name="l00274"></a>00274         fill_val=cpl_vector_get_mean(plot_cat_y) ;
-<a name="l00275"></a>00275         <span class="keywordflow">for</span> (i=0 ; i < match_sz; i++) {
-<a name="l00276"></a>00276             wl_ind = 0 ;
-<a name="l00277"></a>00277             <span class="keywordflow">while</span> (pmatched[i] > cpl_vector_get(plot_cat_x, wl_ind) 
-<a name="l00278"></a>00278                     && wl_ind < spec_sz) wl_ind++ ;
-<a name="l00279"></a>00279             <span class="keywordflow">if</span> (wl_ind < spec_sz) cpl_vector_set(plot_y, wl_ind, fill_val) ;
-<a name="l00280"></a>00280         }
-<a name="l00281"></a>00281         biplot = cpl_bivector_wrap_vectors(plot_cat_x, plot_y) ;
-<a name="l00282"></a>00282         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Wavelength';set ylabel "</span>
-<a name="l00283"></a>00283                              <span class="stringliteral">"'Emission';"</span>, <span class="stringliteral">"t 'Catalog (matched lines)' w "</span>
-<a name="l00284"></a>00284                              <span class="stringliteral">"impulses"</span>, <span class="stringliteral">""</span>, biplot) ;
-<a name="l00285"></a>00285         cpl_bivector_unwrap_vectors(biplot) ;
-<a name="l00286"></a>00286         cpl_vector_delete(plot_cat_x) ;
-<a name="l00287"></a>00287         cpl_vector_delete(plot_cat_y) ;
-<a name="l00288"></a>00288         cpl_vector_delete(plot_y) ;
-<a name="l00289"></a>00289     }
-<a name="l00290"></a>00290     
-<a name="l00291"></a>00291     <span class="comment">/* Apply the fit */</span>
-<a name="l00292"></a>00292     matchedx = cpl_matrix_wrap(1, match_sz, cpl_bivector_get_x_data(matched));
-<a name="l00293"></a>00293     fitted = cpl_polynomial_new(1);
-<a name="l00294"></a>00294     error = cpl_polynomial_fit(fitted, matchedx, NULL,
-<a name="l00295"></a>00295                                cpl_bivector_get_y_const(matched), NULL,
-<a name="l00296"></a>00296                                CPL_FALSE, NULL, &deg_loc);
-<a name="l00297"></a>00297     cpl_bivector_delete(matched);
-<a name="l00298"></a>00298     (void)cpl_matrix_unwrap(matchedx);
-<a name="l00299"></a>00299     <span class="keywordflow">if</span> (error) {
-<a name="l00300"></a>00300         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot fit the polynomial"</span>) ;
-<a name="l00301"></a>00301         cpl_polynomial_delete(fitted);
-<a name="l00302"></a>00302         <span class="keywordflow">return</span> NULL ;
-<a name="l00303"></a>00303     }
-<a name="l00304"></a>00304    
-<a name="l00305"></a>00305     <span class="comment">/* Create the infos table */</span>
-<a name="l00306"></a>00306     <span class="keywordflow">if</span> ((spc_table = irplib_wlxcorr_gen_spc_table(spectrum,
-<a name="l00307"></a>00307                     lines_catalog, slitw, fwhm, poly_init, fitted)) == NULL) {
-<a name="l00308"></a>00308         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot generate the infos table"</span>) ;
-<a name="l00309"></a>00309         cpl_polynomial_delete(fitted) ;
-<a name="l00310"></a>00310         <span class="keywordflow">return</span> NULL ;
-<a name="l00311"></a>00311     }
-<a name="l00312"></a>00312     <span class="keywordflow">if</span> (tab_infos != NULL) *tab_infos = spc_table ;
-<a name="l00313"></a>00313     <span class="keywordflow">else</span> cpl_table_delete(spc_table) ;
-<a name="l00314"></a>00314     <span class="keywordflow">return</span> fitted ;
-<a name="l00315"></a>00315 }
-<a name="l00316"></a>00316 
-<a name="l00319"></a>00319 <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span>
-<a name="l00320"></a>00320 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00331"></a>00331 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00332"></a>00332 <span class="keyword">static</span> cpl_vector * irplib_ppm_convolve_line(
-<a name="l00333"></a>00333         <span class="keyword">const</span> cpl_vector        *   spectrum,
-<a name="l00334"></a>00334         <span class="keywordtype">double</span>                      slitw,
-<a name="l00335"></a>00335         <span class="keywordtype">double</span>                      fwhm)
-<a name="l00336"></a>00336 {
-<a name="l00337"></a>00337     cpl_vector  *   conv_kernel ;
-<a name="l00338"></a>00338     cpl_vector  *   line_profile ;
-<a name="l00339"></a>00339     cpl_vector  *   xcorrs ;
-<a name="l00340"></a>00340     cpl_vector  *   spec_ext ;
-<a name="l00341"></a>00341     cpl_vector  *   xc_single ;
-<a name="l00342"></a>00342     <span class="keywordtype">int</span>             hs, line_sz, sp_sz ;
-<a name="l00343"></a>00343     <span class="keywordtype">int</span>             i ;
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="comment">/* Test entries */</span>
-<a name="l00346"></a>00346     <span class="keywordflow">if</span> (spectrum == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     <span class="comment">/* Create the convolution kernel */</span>
-<a name="l00349"></a>00349     <span class="keywordflow">if</span> ((conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw,
-<a name="l00350"></a>00350                     fwhm)) == NULL) {
-<a name="l00351"></a>00351         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create kernel"</span>) ;
-<a name="l00352"></a>00352         <span class="keywordflow">return</span> NULL ;
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354     hs = cpl_vector_get_size(conv_kernel) ;
-<a name="l00355"></a>00355     line_sz = 2 * hs + 1 ;
-<a name="l00356"></a>00356     
-<a name="l00357"></a>00357     <span class="comment">/* Create the line profile */</span>
-<a name="l00358"></a>00358     line_profile = cpl_vector_new(line_sz) ;
-<a name="l00359"></a>00359     cpl_vector_fill(line_profile, 0.0) ;
-<a name="l00360"></a>00360     cpl_vector_set(line_profile, hs, 1.0) ;
-<a name="l00361"></a>00361     <span class="keywordflow">if</span> (irplib_wlxcorr_convolve(line_profile, conv_kernel) != 0) {
-<a name="l00362"></a>00362         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create line profile"</span>) ;
-<a name="l00363"></a>00363         cpl_vector_delete(line_profile) ;
-<a name="l00364"></a>00364         cpl_vector_delete(conv_kernel) ;
-<a name="l00365"></a>00365         <span class="keywordflow">return</span> NULL ;
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     cpl_vector_delete(conv_kernel) ;
-<a name="l00368"></a>00368     
-<a name="l00369"></a>00369     <span class="comment">/* Create the correlations values vector */</span>
-<a name="l00370"></a>00370     sp_sz = cpl_vector_get_size(spectrum) ;
-<a name="l00371"></a>00371     xcorrs = cpl_vector_new(sp_sz) ;
-<a name="l00372"></a>00372     cpl_vector_fill(xcorrs, 0.0) ;
-<a name="l00373"></a>00373     xc_single = cpl_vector_new(1) ;
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     <span class="comment">/* Loop on the pixels of the spectrum */</span>
-<a name="l00376"></a>00376     <span class="keywordflow">for</span> (i=hs ; i<sp_sz-hs ; i++) {
-<a name="l00377"></a>00377         <span class="comment">/* Extract the current spectrum part */</span>
-<a name="l00378"></a>00378         <span class="keywordflow">if</span> ((spec_ext = cpl_vector_extract(spectrum, i-hs, i+hs, 1)) == NULL) {
-<a name="l00379"></a>00379             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot extract spectrum"</span>) ;
-<a name="l00380"></a>00380             cpl_vector_delete(xc_single) ;
-<a name="l00381"></a>00381             cpl_vector_delete(line_profile) ;
-<a name="l00382"></a>00382             <span class="keywordflow">return</span> NULL ;
-<a name="l00383"></a>00383         }
-<a name="l00384"></a>00384         <span class="keywordflow">if</span> (cpl_vector_correlate(xc_single, spec_ext, line_profile) < 0) {
-<a name="l00385"></a>00385             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot correlate"</span>) ;
-<a name="l00386"></a>00386             cpl_vector_delete(xc_single) ;
-<a name="l00387"></a>00387             cpl_vector_delete(line_profile) ;
-<a name="l00388"></a>00388             cpl_vector_delete(spec_ext) ;
-<a name="l00389"></a>00389             <span class="keywordflow">return</span> NULL ;
-<a name="l00390"></a>00390         }
-<a name="l00391"></a>00391         cpl_vector_set(xcorrs, i, cpl_vector_get(xc_single, 0)) ;
-<a name="l00392"></a>00392         cpl_vector_delete(spec_ext) ;
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394     cpl_vector_delete(xc_single) ;
-<a name="l00395"></a>00395     cpl_vector_delete(line_profile) ;
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397     <span class="keywordflow">return</span> xcorrs ;
-<a name="l00398"></a>00398 } 
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00409"></a>00409 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00410"></a>00410 <span class="keyword">static</span> cpl_vector * irplib_ppm_detect_lines(
-<a name="l00411"></a>00411         <span class="keyword">const</span> cpl_vector    *   spec,
-<a name="l00412"></a>00412         <span class="keywordtype">double</span>                  threshold)
-<a name="l00413"></a>00413 {
-<a name="l00414"></a>00414     cpl_vector  *   spec_loc ;
-<a name="l00415"></a>00415     <span class="keywordtype">double</span>      *   pspec_loc ;
-<a name="l00416"></a>00416     cpl_vector  *   lines ;
-<a name="l00417"></a>00417     <span class="keywordtype">double</span>      *   plines ;
-<a name="l00418"></a>00418     <span class="keywordtype">int</span>             spec_loc_sz, max_ind, nlines ;
-<a name="l00419"></a>00419     <span class="keywordtype">double</span>          max ;
-<a name="l00420"></a>00420     <span class="keywordtype">int</span>             i ;
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422     <span class="comment">/* Test inputs */</span>
-<a name="l00423"></a>00423     <span class="keywordflow">if</span> (spec == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425     <span class="comment">/* Local spectrum */</span>
-<a name="l00426"></a>00426     spec_loc = cpl_vector_duplicate(spec) ;
-<a name="l00427"></a>00427     pspec_loc = cpl_vector_get_data(spec_loc) ;
-<a name="l00428"></a>00428     spec_loc_sz = cpl_vector_get_size(spec_loc) ;
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430     <span class="comment">/* Threshold the local spectrum */</span>
-<a name="l00431"></a>00431     <span class="keywordflow">for</span> (i=0 ; i<spec_loc_sz ; i++) 
-<a name="l00432"></a>00432         <span class="keywordflow">if</span> (pspec_loc[i] < threshold) pspec_loc[i] = 0.0 ;
-<a name="l00433"></a>00433     
-<a name="l00434"></a>00434     <span class="comment">/* Allocate lines container */</span>
-<a name="l00435"></a>00435     lines = cpl_vector_new(spec_loc_sz) ;
-<a name="l00436"></a>00436     plines = cpl_vector_get_data(lines) ;
-<a name="l00437"></a>00437     nlines = 0 ;
-<a name="l00438"></a>00438     
-<a name="l00439"></a>00439     <span class="comment">/* Loop as long as there are lines */</span>
-<a name="l00440"></a>00440     <span class="keywordflow">while</span> ((max = cpl_vector_get_max(spec_loc)) > threshold) {
-<a name="l00441"></a>00441         <span class="comment">/* Find the max position */</span>
-<a name="l00442"></a>00442         max_ind = 0 ;
-<a name="l00443"></a>00443         <span class="keywordflow">while</span> (max_ind < spec_loc_sz && pspec_loc[max_ind] < max) max_ind++ ;
-<a name="l00444"></a>00444         <span class="keywordflow">if</span> (max_ind == spec_loc_sz) {
-<a name="l00445"></a>00445             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot find maximum"</span>) ;
-<a name="l00446"></a>00446             cpl_vector_delete(spec_loc) ;
-<a name="l00447"></a>00447             cpl_vector_delete(lines) ;
-<a name="l00448"></a>00448             <span class="keywordflow">return</span> NULL ;
-<a name="l00449"></a>00449         }
-<a name="l00450"></a>00450         <span class="keywordflow">if</span> (max_ind == 0 || max_ind == spec_loc_sz-1) {
-<a name="l00451"></a>00451             pspec_loc[max_ind] = 0 ;
-<a name="l00452"></a>00452             continue ;
-<a name="l00453"></a>00453         }
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455         <span class="comment">/* Get the precise position from the neighbours values */</span>
-<a name="l00456"></a>00456         plines[nlines] =    pspec_loc[max_ind] * max_ind + 
-<a name="l00457"></a>00457                             pspec_loc[max_ind-1] * (max_ind-1) +
-<a name="l00458"></a>00458                             pspec_loc[max_ind+1] * (max_ind+1) ; 
-<a name="l00459"></a>00459         plines[nlines] /= pspec_loc[max_ind] + pspec_loc[max_ind+1] +
-<a name="l00460"></a>00460             pspec_loc[max_ind-1] ;
-<a name="l00461"></a>00461         plines[nlines] ++ ;
-<a name="l00462"></a>00462         nlines ++ ;
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464         <span class="comment">/* Clean the line */</span>
-<a name="l00465"></a>00465         i = max_ind ;
-<a name="l00466"></a>00466         <span class="keywordflow">while</span> (i>=0 && pspec_loc[i] > threshold) {
-<a name="l00467"></a>00467             pspec_loc[i] = 0.0 ;
-<a name="l00468"></a>00468             i-- ;
-<a name="l00469"></a>00469         }
-<a name="l00470"></a>00470         i = max_ind+1 ;
-<a name="l00471"></a>00471         <span class="keywordflow">while</span> (i<spec_loc_sz && pspec_loc[i] > threshold) {
-<a name="l00472"></a>00472             pspec_loc[i] = 0.0 ;
-<a name="l00473"></a>00473             i++ ;
-<a name="l00474"></a>00474         }
-<a name="l00475"></a>00475     }
-<a name="l00476"></a>00476     cpl_vector_delete(spec_loc) ;
-<a name="l00477"></a>00477    
-<a name="l00478"></a>00478     <span class="comment">/* Check if there are lines */</span>
-<a name="l00479"></a>00479     <span class="keywordflow">if</span> (nlines == 0) {
-<a name="l00480"></a>00480         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect any line"</span>) ;
-<a name="l00481"></a>00481         cpl_vector_delete(lines) ;
-<a name="l00482"></a>00482         <span class="keywordflow">return</span> NULL ;
-<a name="l00483"></a>00483     }
-<a name="l00484"></a>00484     
-<a name="l00485"></a>00485     <span class="comment">/* Resize the vector */</span>
-<a name="l00486"></a>00486     cpl_vector_set_size(lines, nlines) ;
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488     <span class="comment">/* Sort the lines */</span>
-<a name="l00489"></a>00489     cpl_vector_sort(lines, 1) ;
-<a name="l00490"></a>00490     
-<a name="l00491"></a>00491     <span class="keywordflow">return</span> lines ;
-<a name="l00492"></a>00492 }
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_ppm.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_ppm.c,v 1.31 2012/06/11 07:24:09 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/06/11 07:24:09 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.31 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_ppm.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "irplib_wlxcorr.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_spectrum.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                   Private functions</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="keyword">static</span> cpl_vector * irplib_ppm_convolve_line(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>,<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> cpl_vector * irplib_ppm_detect_lines(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d">   84</a></span> cpl_polynomial * <a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d" title="The Wavelength Calibration using PPM.">irplib_ppm_engine</a>(</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keyword">const</span> cpl_vector        *   spectrum,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keyword">const</span> cpl_bivector      *   lines_catalog,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keyword">const</span> cpl_polynomial    *   poly_init,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordtype">double</span>                      slitw,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">double</span>                      fwhm,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">double</span>                      thresh,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">int</span>                         degree,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">int</span>                         doplot,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         cpl_table               **  tab_infos)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span>    cpl_vector      *   spec_conv ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span>                 spec_sz ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_vector      *   det_lines ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">double</span>          *   pdet_lines ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     cpl_vector      *   cat_lines ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordtype">double</span>          *   pcat_lines ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">double</span>              wmin, wmax ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordtype">double</span>              disp_min, disp_max, disp ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordtype">int</span>                 nlines_cat, nlines ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   plines_catalog_x ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   plines_catalog_y ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     cpl_bivector    *   matched ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_matrix      *   matchedx;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordtype">int</span>                 match_sz;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     cpl_polynomial  *   fitted ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     cpl_table       *   spc_table ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keyword">const</span> cpl_vector*   vectors_plot[3];</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     cpl_vector      *   plot_y ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">int</span>                 wl_ind, start_ind, stop_ind ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">double</span>              fill_val ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     cpl_size            deg_loc ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     cpl_error_code      error;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">if</span> (spectrum == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">if</span> (lines_catalog == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span> (poly_init == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     spec_sz = cpl_vector_get_size(spectrum) ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     deg_loc = (cpl_size)degree ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor"></span>    <span class="comment">/* METHOD 2 */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">/* Correlate the spectrum with the line profile */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">if</span> ((spec_conv = irplib_ppm_convolve_line(spectrum, slitw, fwhm)) == NULL) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot convolve the signal"</span>) ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="comment">/* Apply the lines detection */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">if</span> ((det_lines = irplib_ppm_detect_lines(spec_conv, 0.9)) == NULL) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect lines"</span>) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         cpl_vector_delete(spec_conv) ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cpl_vector_delete(spec_conv) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor"></span>    <span class="comment">/* METHOD 1 */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">if</span> ((det_lines = <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(spectrum, fwhm,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                     thresh, 0, NULL, NULL)) == NULL) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot convolve the signal"</span>) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span>    cpl_msg_info(cpl_func, <span class="stringliteral">"Detected %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" lines"</span>, </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>             cpl_vector_get_size(det_lines));</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>  </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* Get the catalog lines */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     wmin = cpl_polynomial_eval_1d(poly_init, 1.0, NULL) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     wmax = cpl_polynomial_eval_1d(poly_init, spec_sz, NULL) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     plines_catalog_x = cpl_bivector_get_x_data_const(lines_catalog) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     plines_catalog_y = cpl_bivector_get_y_data_const(lines_catalog) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     nlines = cpl_bivector_get_size(lines_catalog) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     nlines_cat = 0 ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     start_ind = stop_ind = -1 ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">for</span> (i=0 ; i<nlines ; i++) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         <span class="keywordflow">if</span> (plines_catalog_x[i] > wmin && plines_catalog_x[i] < wmax &&</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                 plines_catalog_y[i] > 0.0) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>             nlines_cat++ ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             <span class="keywordflow">if</span> (start_ind<0) start_ind = i ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>             stop_ind = i ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">if</span> (nlines_cat == 0) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"No lines in catalog"</span>) ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         cpl_vector_delete(det_lines) ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cat_lines = cpl_vector_new(nlines_cat) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     pcat_lines = cpl_vector_get_data(cat_lines) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     nlines_cat = 0 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">for</span> (i=0 ; i<nlines ; i++) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         <span class="keywordflow">if</span> (plines_catalog_x[i] > wmin && plines_catalog_x[i] < wmax &&</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                 plines_catalog_y[i] > 0.0) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>             pcat_lines[nlines_cat] = plines_catalog_x[i] ; </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>             nlines_cat++ ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>  </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="comment">/* Plot inputs */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">if</span> (doplot) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="comment">/* Catalog */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         irplib_wlxcorr_catalog_plot(lines_catalog, wmin, wmax) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         <span class="comment">/* Spectrum with detected lines */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         fill_val = cpl_vector_get_max(spectrum) ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         plot_y = cpl_vector_new(spec_sz);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         cpl_vector_fill(plot_y, 0.0) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         pdet_lines = cpl_vector_get_data(det_lines) ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="keywordflow">for</span> (i=0 ; i<cpl_vector_get_size(det_lines) ; i++) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>             cpl_vector_set(plot_y, (<span class="keywordtype">int</span>)pdet_lines[i], fill_val) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         vectors_plot[0] = NULL ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         vectors_plot[1] = spectrum ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         vectors_plot[2] = plot_y ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (Pixel)';set ylabel "</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                             <span class="stringliteral">"'Intensity (ADU/sec)';"</span>,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                             <span class="stringliteral">"t 'Spectrum with detected lines' w lines"</span>, <span class="stringliteral">""</span>,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                             vectors_plot, 3);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         cpl_vector_delete(plot_y) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="comment">/* Apply the point pattern matching */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     disp = (wmax-wmin) / spec_sz ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     disp_min = disp - (disp/10) ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     disp_max = disp + (disp/10) ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     matched = cpl_ppm_match_positions(det_lines, cat_lines, disp_min,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                       disp_max, 0.05, NULL, NULL);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_vector_delete(det_lines) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cpl_vector_delete(cat_lines) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">if</span> (matched == NULL) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot apply the point pattern matching"</span>) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     match_sz = cpl_bivector_get_size(matched);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Matched %d lines"</span>, match_sz) ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">if</span> (match_sz <= deg_loc) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Not enough match for the fit"</span>) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         cpl_bivector_delete(matched) ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="comment">/* Plot if requested */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (doplot) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pmatched ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         cpl_bivector    *   biplot ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         cpl_vector      *   plot_cat_x ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         cpl_vector      *   plot_cat_y ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         <span class="comment">/* Spectrum with matched lines */</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         fill_val = cpl_vector_get_max(spectrum) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         plot_y = cpl_vector_new(spec_sz);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         cpl_vector_fill(plot_y, 0.0) ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         pmatched = cpl_bivector_get_x_data_const(matched) ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         <span class="keywordflow">for</span> (i=0 ; i < match_sz; i++) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>             cpl_vector_set(plot_y, (<span class="keywordtype">int</span>)pmatched[i], fill_val) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         vectors_plot[0] = NULL ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         vectors_plot[1] = spectrum ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         vectors_plot[2] = plot_y ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (Pixel)';set ylabel "</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                             <span class="stringliteral">"'Intensity (ADU/sec)';"</span>,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                             <span class="stringliteral">"t 'Spectrum with matched lines' w lines"</span>, <span class="stringliteral">""</span>,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                             vectors_plot, 3);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         cpl_vector_delete(plot_y) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         <span class="comment">/* Catalog with matched lines */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         plot_cat_x=cpl_vector_extract(cpl_bivector_get_x_const(lines_catalog), </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                 start_ind, stop_ind, 1) ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         plot_cat_y=cpl_vector_extract(cpl_bivector_get_y_const(lines_catalog), </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                 start_ind, stop_ind, 1) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         biplot = cpl_bivector_wrap_vectors(plot_cat_x, plot_cat_y) ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Wavelength';set ylabel "</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                              <span class="stringliteral">"'Emission';"</span>, <span class="stringliteral">"t 'Catalog' w impulses"</span>, <span class="stringliteral">""</span>,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                              biplot);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         cpl_bivector_unwrap_vectors(biplot) ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         plot_y = cpl_vector_duplicate(plot_cat_y) ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         cpl_vector_fill(plot_y, 0.0) ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         pmatched = cpl_bivector_get_y_data_const(matched) ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         fill_val=cpl_vector_get_mean(plot_cat_y) ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         <span class="keywordflow">for</span> (i=0 ; i < match_sz; i++) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             wl_ind = 0 ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>             <span class="keywordflow">while</span> (pmatched[i] > cpl_vector_get(plot_cat_x, wl_ind) </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                     && wl_ind < spec_sz) wl_ind++ ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>             <span class="keywordflow">if</span> (wl_ind < spec_sz) cpl_vector_set(plot_y, wl_ind, fill_val) ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         biplot = cpl_bivector_wrap_vectors(plot_cat_x, plot_y) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Wavelength';set ylabel "</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                              <span class="stringliteral">"'Emission';"</span>, <span class="stringliteral">"t 'Catalog (matched lines)' w "</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                              <span class="stringliteral">"impulses"</span>, <span class="stringliteral">""</span>, biplot) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         cpl_bivector_unwrap_vectors(biplot) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         cpl_vector_delete(plot_cat_x) ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         cpl_vector_delete(plot_cat_y) ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>         cpl_vector_delete(plot_y) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="comment">/* Apply the fit */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     matchedx = cpl_matrix_wrap(1, match_sz, cpl_bivector_get_x_data(matched));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     fitted = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     error = cpl_polynomial_fit(fitted, matchedx, NULL,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                cpl_bivector_get_y_const(matched), NULL,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                CPL_FALSE, NULL, &deg_loc);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     cpl_bivector_delete(matched);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     (void)cpl_matrix_unwrap(matchedx);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot fit the polynomial"</span>) ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         cpl_polynomial_delete(fitted);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>    </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="comment">/* Create the infos table */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordflow">if</span> ((spc_table = irplib_wlxcorr_gen_spc_table(spectrum,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                     lines_catalog, slitw, fwhm, poly_init, fitted)) == NULL) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot generate the infos table"</span>) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         cpl_polynomial_delete(fitted) ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">if</span> (tab_infos != NULL) *tab_infos = spc_table ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">else</span> cpl_table_delete(spc_table) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordflow">return</span> fitted ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="preprocessor">#ifdef IRPLIB_PPM_USE_METHOD2</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="keyword">static</span> cpl_vector * irplib_ppm_convolve_line(</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>         <span class="keyword">const</span> cpl_vector        *   spectrum,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         <span class="keywordtype">double</span>                      slitw,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="keywordtype">double</span>                      fwhm)</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     cpl_vector  *   conv_kernel ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     cpl_vector  *   line_profile ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     cpl_vector  *   xcorrs ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     cpl_vector  *   spec_ext ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     cpl_vector  *   xc_single ;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordtype">int</span>             hs, line_sz, sp_sz ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordtype">int</span>             i ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">if</span> (spectrum == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="comment">/* Create the convolution kernel */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">if</span> ((conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                     fwhm)) == NULL) {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create kernel"</span>) ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     hs = cpl_vector_get_size(conv_kernel) ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     line_sz = 2 * hs + 1 ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="comment">/* Create the line profile */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     line_profile = cpl_vector_new(line_sz) ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     cpl_vector_fill(line_profile, 0.0) ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     cpl_vector_set(line_profile, hs, 1.0) ;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keywordflow">if</span> (irplib_wlxcorr_convolve(line_profile, conv_kernel) != 0) {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create line profile"</span>) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         cpl_vector_delete(line_profile) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         cpl_vector_delete(conv_kernel) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     cpl_vector_delete(conv_kernel) ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="comment">/* Create the correlations values vector */</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     sp_sz = cpl_vector_get_size(spectrum) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     xcorrs = cpl_vector_new(sp_sz) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_vector_fill(xcorrs, 0.0) ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     xc_single = cpl_vector_new(1) ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* Loop on the pixels of the spectrum */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">for</span> (i=hs ; i<sp_sz-hs ; i++) {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>         <span class="comment">/* Extract the current spectrum part */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         <span class="keywordflow">if</span> ((spec_ext = cpl_vector_extract(spectrum, i-hs, i+hs, 1)) == NULL) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot extract spectrum"</span>) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>             cpl_vector_delete(xc_single) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             cpl_vector_delete(line_profile) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         <span class="keywordflow">if</span> (cpl_vector_correlate(xc_single, spec_ext, line_profile) < 0) {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot correlate"</span>) ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             cpl_vector_delete(xc_single) ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             cpl_vector_delete(line_profile) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             cpl_vector_delete(spec_ext) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         cpl_vector_set(xcorrs, i, cpl_vector_get(xc_single, 0)) ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         cpl_vector_delete(spec_ext) ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     cpl_vector_delete(xc_single) ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     cpl_vector_delete(line_profile) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">return</span> xcorrs ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> } </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="keyword">static</span> cpl_vector * irplib_ppm_detect_lines(</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         <span class="keyword">const</span> cpl_vector    *   spec,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <span class="keywordtype">double</span>                  threshold)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     cpl_vector  *   spec_loc ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordtype">double</span>      *   pspec_loc ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     cpl_vector  *   lines ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordtype">double</span>      *   plines ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordtype">int</span>             spec_loc_sz, max_ind, nlines ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="keywordtype">double</span>          max ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keywordtype">int</span>             i ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="comment">/* Test inputs */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     <span class="keywordflow">if</span> (spec == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="comment">/* Local spectrum */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     spec_loc = cpl_vector_duplicate(spec) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     pspec_loc = cpl_vector_get_data(spec_loc) ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     spec_loc_sz = cpl_vector_get_size(spec_loc) ;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="comment">/* Threshold the local spectrum */</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     <span class="keywordflow">for</span> (i=0 ; i<spec_loc_sz ; i++) </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <span class="keywordflow">if</span> (pspec_loc[i] < threshold) pspec_loc[i] = 0.0 ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="comment">/* Allocate lines container */</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     lines = cpl_vector_new(spec_loc_sz) ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     plines = cpl_vector_get_data(lines) ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     nlines = 0 ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="comment">/* Loop as long as there are lines */</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordflow">while</span> ((max = cpl_vector_get_max(spec_loc)) > threshold) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>         <span class="comment">/* Find the max position */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         max_ind = 0 ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         <span class="keywordflow">while</span> (max_ind < spec_loc_sz && pspec_loc[max_ind] < max) max_ind++ ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         <span class="keywordflow">if</span> (max_ind == spec_loc_sz) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot find maximum"</span>) ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>             cpl_vector_delete(spec_loc) ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             cpl_vector_delete(lines) ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>         }</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="keywordflow">if</span> (max_ind == 0 || max_ind == spec_loc_sz-1) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>             pspec_loc[max_ind] = 0 ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             continue ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         <span class="comment">/* Get the precise position from the neighbours values */</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         plines[nlines] =    pspec_loc[max_ind] * max_ind + </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                             pspec_loc[max_ind-1] * (max_ind-1) +</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                             pspec_loc[max_ind+1] * (max_ind+1) ; </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>         plines[nlines] /= pspec_loc[max_ind] + pspec_loc[max_ind+1] +</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             pspec_loc[max_ind-1] ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>         plines[nlines] ++ ;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>         nlines ++ ;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         <span class="comment">/* Clean the line */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>         i = max_ind ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>         <span class="keywordflow">while</span> (i>=0 && pspec_loc[i] > threshold) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             pspec_loc[i] = 0.0 ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             i-- ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>         i = max_ind+1 ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         <span class="keywordflow">while</span> (i<spec_loc_sz && pspec_loc[i] > threshold) {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             pspec_loc[i] = 0.0 ;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             i++ ;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     cpl_vector_delete(spec_loc) ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>    </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="comment">/* Check if there are lines */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="keywordflow">if</span> (nlines == 0) {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect any line"</span>) ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         cpl_vector_delete(lines) ;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     }</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="comment">/* Resize the vector */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     cpl_vector_set_size(lines, nlines) ;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="comment">/* Sort the lines */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     cpl_vector_sort(lines, 1) ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="keywordflow">return</span> lines ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__ppm_8h_source.html b/html/irplib__ppm_8h_source.html
index d4eb5cb..9ead3c7 100644
--- a/html/irplib__ppm_8h_source.html
+++ b/html/irplib__ppm_8h_source.html
@@ -2,55 +2,86 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_ppm.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_ppm.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_ppm.h,v 1.5 2007/07/23 09:27:07 yjung Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: yjung $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/07/23 09:27:07 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_PPM_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_PPM_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_polynomial * <a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d" title="The Wavelength Calibration using PPM.">irplib_ppm_engine</a>(<span class="keyword">const</span> cpl_vector *, <span class="keyword">const</span> cpl_bivector *,
-<a name="l00038"></a>00038         <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, cpl_table **);
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_ppm.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_ppm.h,v 1.5 2007/07/23 09:27:07 yjung Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: yjung $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/07/23 09:27:07 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_PPM_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_PPM_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_polynomial * <a class="code" href="group__irplib__ppm.html#ga9b49569fb0bd55977b533407c1ad956d" title="The Wavelength Calibration using PPM.">irplib_ppm_engine</a>(<span class="keyword">const</span> cpl_vector *, <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>         <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, cpl_table **);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__slitpos_8c_source.html b/html/irplib__slitpos_8c_source.html
index d9d0a32..2ef5b56 100644
--- a/html/irplib__slitpos_8c_source.html
+++ b/html/irplib__slitpos_8c_source.html
@@ -2,509 +2,540 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_slitpos.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_slitpos.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_slitpos.c,v 1.30 2011/11/23 13:58:45 yjung Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: yjung $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/23 13:58:45 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.30 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/* The IRPLIB-based application may have checked for the availability of</span>
-<a name="l00033"></a>00033 <span class="comment">   memrchr() in which case the macro HAVE_DECL_MEMRCHR is defined as either</span>
-<a name="l00034"></a>00034 <span class="comment">   0 or 1. Without checks it is assumed that the function is not available.</span>
-<a name="l00035"></a>00035 <span class="comment">   With a suitable version of autoconf the macro can be defined with this</span>
-<a name="l00036"></a>00036 <span class="comment">   entry in configure.ac:</span>
-<a name="l00037"></a>00037 <span class="comment">   AC_CHECK_DECLS([memrchr])</span>
-<a name="l00038"></a>00038 <span class="comment">*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                                Includes</span>
-<a name="l00042"></a>00042 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#include <string.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <math.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <assert.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="preprocessor">#include "irplib_slitpos.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "irplib_flat.h"</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                                Defines</span>
-<a name="l00054"></a>00054 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="preprocessor">#ifndef IRPLIB_SLITPOS_KERNEL_SIZE_Y</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_KERNEL_SIZE_Y      5</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#ifndef IRPLIB_SLITPOS_MAX_EROSION</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_MAX_EROSION     1024</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>
-<a name="l00071"></a>00071 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00072"></a>00072 <span class="comment">                            Functions prototypes</span>
-<a name="l00073"></a>00073 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_edges_one_line(<span class="keyword">const</span> cpl_image *,
-<a name="l00076"></a>00076                                                          <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
-<a name="l00077"></a>00077 <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_slit_ends(<span class="keyword">const</span> cpl_image *,
-<a name="l00078"></a>00078                                                          <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);
-<a name="l00079"></a>00079 <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_pos(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>,
-<a name="l00080"></a>00080                                                    cpl_size *);
-<a name="l00081"></a>00081 <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image *,
-<a name="l00082"></a>00082                                                    <span class="keyword">const</span> cpl_image *,
-<a name="l00083"></a>00083                                                    <span class="keywordtype">int</span>, cpl_boolean) ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00089"></a>00089 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 
-<a name="l00092"></a>00092 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00119"></a><a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba">00119</a> cpl_table * <a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba" title="Detect the slit position, detect its ends, extract a thin image containing only the...">irplib_slitpos_analysis</a>(<span class="keyword">const</span> cpl_image * imslit,
-<a name="l00120"></a>00120                                     <span class="keywordtype">int</span>               slit_max_width,
-<a name="l00121"></a>00121                                     <span class="keywordtype">double</span>          * slit_flux)
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_x = cpl_image_get_size_x(imslit);
-<a name="l00124"></a>00124     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_y = cpl_image_get_size_y(imslit);
-<a name="l00125"></a>00125     <span class="keywordtype">int</span>             slit_length;
-<a name="l00126"></a>00126     cpl_size        slit_pos;
-<a name="l00127"></a>00127     cpl_image   *   filtered;
-<a name="l00128"></a>00128     cpl_mask    *   mask;
-<a name="l00129"></a>00129     cpl_image   *   thin_im;
-<a name="l00130"></a>00130     <span class="keywordtype">int</span>             slit_top_y = 0; <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00131"></a>00131     <span class="keywordtype">int</span>             slit_bot_y = 0; <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00132"></a>00132     cpl_table   *   <span class="keyword">self</span>;
-<a name="l00133"></a>00133     <span class="keywordtype">double</span>      *   slit_y,
-<a name="l00134"></a>00134                 *   slit_x_l,
-<a name="l00135"></a>00135                 *   slit_x_r;
-<a name="l00136"></a>00136     <span class="keywordtype">double</span>      *   coeff_r;
-<a name="l00137"></a>00137     <span class="keywordtype">double</span>      *   coeff_l;
-<a name="l00138"></a>00138     <span class="keywordtype">int</span>             i;
-<a name="l00139"></a>00139     cpl_error_code error = CPL_ERROR_NONE;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">/* Initialize */</span>
-<a name="l00142"></a>00142     <span class="keywordflow">if</span> (slit_flux != NULL) *slit_flux = 0.0 ;
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="comment">/* Median vertical filtering 3x3 */</span>
-<a name="l00145"></a>00145     mask = cpl_mask_new(3, 3) ;
-<a name="l00146"></a>00146     cpl_mask_not(mask) ;
-<a name="l00147"></a>00147     filtered = cpl_image_new(size_x, size_y, cpl_image_get_type(imslit));
-<a name="l00148"></a>00148     error = cpl_image_filter_mask(filtered, imslit, mask,
-<a name="l00149"></a>00149                                   CPL_FILTER_MEDIAN, CPL_BORDER_FILTER);
-<a name="l00150"></a>00150     cpl_mask_delete(mask);
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="keywordflow">if</span> (error) {
-<a name="l00153"></a>00153         cpl_image_delete(filtered);
-<a name="l00154"></a>00154         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="comment">/* The background may vary strongly along the vertical line. */</span>
-<a name="l00158"></a>00158     <span class="comment">/* Detect and remove background with a 1+2*Slit_max x 1 median filter */</span>
-<a name="l00159"></a>00159     error = irplib_image_filter_background_line(filtered, NULL, slit_max_width,
-<a name="l00160"></a>00160                                                 CPL_TRUE);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keywordflow">if</span> (error) {
-<a name="l00163"></a>00163         cpl_image_delete(filtered) ;
-<a name="l00164"></a>00164         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00165"></a>00165     }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     <span class="comment">/* Find the position of the slit */</span>
-<a name="l00168"></a>00168     <span class="keywordflow">if</span> (irplib_slitpos_find_vert_pos(filtered, slit_max_width/2, &slit_pos)) {
-<a name="l00169"></a>00169         cpl_image_delete(filtered);
-<a name="l00170"></a>00170         cpl_msg_error(cpl_func, <span class="stringliteral">"Could not find the slit position"</span>);
-<a name="l00171"></a>00171         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     <span class="comment">/* Extract a thin image containing the slit */</span>
-<a name="l00175"></a>00175     thin_im = cpl_image_extract(filtered, slit_pos-slit_max_width/2, 1,
-<a name="l00176"></a>00176                                 slit_pos+slit_max_width/2, size_y);
-<a name="l00177"></a>00177     <span class="keywordflow">if</span> (thin_im == NULL) {
-<a name="l00178"></a>00178         cpl_msg_error(cpl_func, <span class="stringliteral">"Could not extract the %d pixel thin image "</span>
-<a name="l00179"></a>00179                       <span class="stringliteral">"around position %"</span>CPL_SIZE_FORMAT, 
-<a name="l00180"></a>00180                       slit_max_width, slit_pos);
-<a name="l00181"></a>00181         cpl_image_delete(filtered);
-<a name="l00182"></a>00182         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185     <span class="comment">/* Find the ends of the slit */</span>
-<a name="l00186"></a>00186     error = irplib_slitpos_find_vert_slit_ends(thin_im,
-<a name="l00187"></a>00187                                                IRPLIB_SLITPOS_KERNEL_SIZE_Y,
-<a name="l00188"></a>00188                                                &slit_bot_y,
-<a name="l00189"></a>00189                                                &slit_top_y);
-<a name="l00190"></a>00190     cpl_image_delete(thin_im);
-<a name="l00191"></a>00191     <span class="keywordflow">if</span> (error) {
-<a name="l00192"></a>00192         cpl_image_delete(filtered);
-<a name="l00193"></a>00193         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00194"></a>00194     }
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     <span class="comment">/* Extract an image with exactly the slit */</span>
-<a name="l00197"></a>00197     thin_im = cpl_image_extract(filtered,
-<a name="l00198"></a>00198                                 slit_pos-slit_max_width/2,
-<a name="l00199"></a>00199                                 slit_bot_y,
-<a name="l00200"></a>00200                                 slit_pos+slit_max_width/2,
-<a name="l00201"></a>00201                                 slit_top_y);
-<a name="l00202"></a>00202     cpl_image_delete(filtered);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     cpl_ensure(thin_im != NULL, cpl_error_get_code(), NULL);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     slit_length = 1 + slit_top_y - slit_bot_y;
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208     <span class="comment">/* Allocate some arrays */</span>
-<a name="l00209"></a>00209     slit_y = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00210"></a>00210     slit_x_l = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00211"></a>00211     slit_x_r = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00212"></a>00212     
-<a name="l00213"></a>00213     <span class="comment">/* Find the edges of the slit */</span>
-<a name="l00214"></a>00214     <span class="keywordflow">for</span> (i=0 ; i<slit_length ; i++) {
-<a name="l00215"></a>00215         <span class="keywordtype">int</span> right_pos = 0; <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00216"></a>00216         <span class="keywordtype">int</span> left_pos  = 0; <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218         <span class="keywordflow">if</span> (irplib_slitpos_find_edges_one_line(thin_im,
-<a name="l00219"></a>00219                                                 i,
-<a name="l00220"></a>00220                                                 &left_pos,
-<a name="l00221"></a>00221                                                 &right_pos)) {
-<a name="l00222"></a>00222             cpl_msg_error(cpl_func, <span class="stringliteral">"cannot find the edges of the [%d]th line"</span>, 
-<a name="l00223"></a>00223                     i+1);
-<a name="l00224"></a>00224             cpl_image_delete(thin_im);
-<a name="l00225"></a>00225             <span class="keywordflow">return</span> NULL;
-<a name="l00226"></a>00226         }
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228         <span class="comment">/* Update the slit_flux */</span>
-<a name="l00229"></a>00229         <span class="keywordflow">if</span> (slit_flux != NULL) {
-<a name="l00230"></a>00230             *slit_flux += cpl_image_get_flux_window(thin_im, left_pos+1,
-<a name="l00231"></a>00231                     i+1, right_pos+1, i+1) ;
-<a name="l00232"></a>00232         }
-<a name="l00233"></a>00233         
-<a name="l00234"></a>00234         <span class="comment">/* Store the edges for the fit */</span>
-<a name="l00235"></a>00235         slit_x_l[i] = (double)left_pos;
-<a name="l00236"></a>00236         slit_x_r[i] = (double)right_pos;
-<a name="l00237"></a>00237         slit_y[i]   = (double)(i+slit_bot_y-1);
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239     cpl_image_delete(thin_im);
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="comment">/* Linear regression to find the edges */</span>
-<a name="l00242"></a>00242     coeff_l = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(slit_y, slit_x_l, slit_length);
-<a name="l00243"></a>00243     coeff_r = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(slit_y, slit_x_r, slit_length);
-<a name="l00244"></a>00244     cpl_free(slit_y);
-<a name="l00245"></a>00245     cpl_free(slit_x_l);
-<a name="l00246"></a>00246     cpl_free(slit_x_r);
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     <span class="comment">/* Allocate the table containing the results */</span>
-<a name="l00249"></a>00249     <span class="keyword">self</span> = cpl_table_new(slit_length);
-<a name="l00250"></a>00250     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_Y"</span>,      CPL_TYPE_INT);
-<a name="l00251"></a>00251     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>,   CPL_TYPE_DOUBLE);
-<a name="l00252"></a>00252     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, CPL_TYPE_DOUBLE);
-<a name="l00253"></a>00253     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>,  CPL_TYPE_DOUBLE);
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_Y"</span>, <span class="stringliteral">"pixel"</span>);
-<a name="l00256"></a>00256     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>, <span class="stringliteral">"pixel"</span>);
-<a name="l00257"></a>00257     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, <span class="stringliteral">"pixel"</span>);
-<a name="l00258"></a>00258     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>, <span class="stringliteral">"pixel"</span>);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     cpl_ensure(!error, cpl_error_get_code(), NULL);
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     <span class="comment">/* Rewrite the edges in the out table, and write the center */</span>
-<a name="l00263"></a>00263     <span class="keywordflow">for</span> (i=0 ; i < slit_length ; i++) {
-<a name="l00264"></a>00264         <span class="keyword">const</span> <span class="keywordtype">int</span>    islity = i + slit_bot_y;
-<a name="l00265"></a>00265         <span class="keyword">const</span> <span class="keywordtype">double</span> dslit  = slit_pos - slit_max_width / 2.0;
-<a name="l00266"></a>00266         <span class="keyword">const</span> <span class="keywordtype">double</span> dleft  = coeff_l[0] + coeff_l[1] * (double)islity + dslit;
-<a name="l00267"></a>00267         <span class="keyword">const</span> <span class="keywordtype">double</span> dright = coeff_r[0] + coeff_r[1] * (double)islity + dslit;
-<a name="l00268"></a>00268         <span class="keyword">const</span> <span class="keywordtype">double</span> dcent  = 0.5 * (dleft + dright);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270         <span class="keywordflow">if</span> (cpl_table_set_int(<span class="keyword">self</span>,    <span class="stringliteral">"SLIT_Y"</span>,      i, islity)) <span class="keywordflow">break</span>;
-<a name="l00271"></a>00271         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>,   i, dleft))  <span class="keywordflow">break</span>;
-<a name="l00272"></a>00272         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>,  i, dright)) <span class="keywordflow">break</span>;
-<a name="l00273"></a>00273         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, i, dcent))  <span class="keywordflow">break</span>;
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     cpl_free(coeff_r);
-<a name="l00277"></a>00277     cpl_free(coeff_l);
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     <span class="keywordflow">if</span> (i != slit_length) {
-<a name="l00280"></a>00280         cpl_table_delete(<span class="keyword">self</span>);
-<a name="l00281"></a>00281         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00282"></a>00282     }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     <span class="keywordflow">return</span> <span class="keyword">self</span>;
-<a name="l00285"></a>00285 }
-<a name="l00286"></a>00286 
-<a name="l00289"></a>00289 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00301"></a>00301 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00302"></a>00302 <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_edges_one_line(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,
-<a name="l00303"></a>00303                                                          <span class="keywordtype">int</span>          line_pos,
-<a name="l00304"></a>00304                                                          <span class="keywordtype">int</span>        * left_pos,
-<a name="l00305"></a>00305                                                          <span class="keywordtype">int</span>        * right_pos)
-<a name="l00306"></a>00306 {
-<a name="l00307"></a>00307     <span class="keyword">const</span> <span class="keywordtype">int</span>     size_x = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00308"></a>00308     <span class="keyword">const</span> <span class="keywordtype">float</span> * pself;
-<a name="l00309"></a>00309     <span class="keywordtype">double</span>        threshold;
-<a name="l00310"></a>00310     <span class="keywordtype">int</span>           i;
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00313"></a>00313     cpl_ensure_code(cpl_image_get_type(<span class="keyword">self</span>) == CPL_TYPE_FLOAT,
-<a name="l00314"></a>00314                     CPL_ERROR_INVALID_TYPE);
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316     pself = cpl_image_get_data_float_const(<span class="keyword">self</span>);
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     <span class="comment">/* Find the threshold */</span>
-<a name="l00319"></a>00319     threshold = cpl_image_get_mean_window(<span class="keyword">self</span>, 1, line_pos+1, size_x,
-<a name="l00320"></a>00320                                           line_pos+1);
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322     <span class="comment">/* Detect the left edge */</span>
-<a name="l00323"></a>00323     i = 0;
-<a name="l00324"></a>00324     <span class="keywordflow">while</span> (i < size_x && pself[line_pos*size_x+i] < threshold) i++;
-<a name="l00325"></a>00325     *left_pos = i;
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327     <span class="comment">/* Detect the right edge */</span>
-<a name="l00328"></a>00328     i = size_x - 1;
-<a name="l00329"></a>00329     <span class="keywordflow">while</span> (i >= 0 && pself[line_pos*size_x+i] < threshold) i--;
-<a name="l00330"></a>00330     *right_pos = i;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00333"></a>00333 }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00346"></a>00346 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00347"></a>00347 <span class="keyword">static</span>
-<a name="l00348"></a>00348 cpl_error_code irplib_slitpos_find_vert_slit_ends(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,
-<a name="l00349"></a>00349                                                   <span class="keywordtype">int</span>        kernel_size,
-<a name="l00350"></a>00350                                                   <span class="keywordtype">int</span>      * bot_slit_y,
-<a name="l00351"></a>00351                                                   <span class="keywordtype">int</span>      * top_slit_y)
-<a name="l00352"></a>00352 {
-<a name="l00353"></a>00353     cpl_mask         * binary;
-<a name="l00354"></a>00354     cpl_mask         * copy = NULL;
-<a name="l00355"></a>00355     cpl_mask         * kernel;
-<a name="l00356"></a>00356     cpl_image        * label_image;
-<a name="l00357"></a>00357     <span class="keywordtype">int</span>                erosions_nb;
-<a name="l00358"></a>00358     cpl_size           nobj ;
-<a name="l00359"></a>00359     <span class="keyword">const</span> <span class="keywordtype">int</span>          size_x = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00360"></a>00360     <span class="keyword">const</span> <span class="keywordtype">int</span>          size_y = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l00361"></a>00361     <span class="keyword">const</span> <span class="keywordtype">int</span>          npix = size_x * size_y;
-<a name="l00362"></a>00362     <span class="keyword">const</span> cpl_binary * pbinary;
-<a name="l00363"></a>00363     <span class="keyword">const</span> cpl_binary * pfind;
-<a name="l00364"></a>00364     <span class="keywordtype">int</span>                i, itop, ibot;
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367     cpl_ensure_code(size_x      > 0, cpl_error_get_code());
-<a name="l00368"></a>00368     cpl_ensure_code(kernel_size > 0, cpl_error_get_code());
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     <span class="comment">/* Threshold to have a binary image */</span>
-<a name="l00371"></a>00371     binary = cpl_mask_threshold_image_create(<span class="keyword">self</span>, cpl_image_get_mean(<span class="keyword">self</span>),
-<a name="l00372"></a>00372                                              cpl_image_get_max(<span class="keyword">self</span>));
-<a name="l00373"></a>00373     cpl_ensure_code(binary != NULL, cpl_error_get_code());
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     <span class="comment">/* Erode until there is 1 object left in the image */</span>
-<a name="l00376"></a>00376     label_image = cpl_image_labelise_mask_create(binary, &nobj);
-<a name="l00377"></a>00377     cpl_image_delete(label_image);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="keywordflow">if</span> (label_image == NULL) {
-<a name="l00380"></a>00380         cpl_mask_delete(binary);
-<a name="l00381"></a>00381         cpl_ensure_code(0, cpl_error_get_code());
-<a name="l00382"></a>00382     }
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384     <span class="comment">/* Define the kernel for morpho operations */</span>
-<a name="l00385"></a>00385     kernel = cpl_mask_new(kernel_size, 1);
-<a name="l00386"></a>00386     cpl_mask_not(kernel);
-<a name="l00387"></a>00387     copy = cpl_mask_wrap(size_x, size_y, cpl_malloc(size_x * size_y *
-<a name="l00388"></a>00388                                                     <span class="keyword">sizeof</span>(cpl_binary)));
-<a name="l00389"></a>00389     <span class="keywordflow">for</span> (erosions_nb = 0; erosions_nb < IRPLIB_SLITPOS_MAX_EROSION && nobj > 1;
-<a name="l00390"></a>00390          erosions_nb++) {
-<a name="l00391"></a>00391         <span class="comment">/* Should not be possible to break from this loop */</span>
-<a name="l00392"></a>00392         cpl_mask_copy(copy, binary, 1, 1);
-<a name="l00393"></a>00393         <span class="keywordflow">if</span> (cpl_mask_filter(binary, copy, kernel, CPL_FILTER_EROSION,
-<a name="l00394"></a>00394                             CPL_BORDER_ZERO)) <span class="keywordflow">break</span>;
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396         label_image = cpl_image_labelise_mask_create(binary, &nobj);
-<a name="l00397"></a>00397         <span class="keywordflow">if</span> (label_image == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Assuming nobj was not set to 1 */</span>
-<a name="l00398"></a>00398         cpl_image_delete(label_image);
-<a name="l00399"></a>00399     }
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401     <span class="keywordflow">if</span> (nobj > 1) {
-<a name="l00402"></a>00402         cpl_mask_delete(binary);
-<a name="l00403"></a>00403         cpl_mask_delete(copy);
-<a name="l00404"></a>00404         cpl_mask_delete(kernel);
-<a name="l00405"></a>00405         <span class="keywordflow">if</span> (erosions_nb >= IRPLIB_SLITPOS_MAX_EROSION) {
-<a name="l00406"></a>00406             cpl_msg_error(cpl_func, <span class="stringliteral">"Number of erosions reached a limit of %d "</span>
-<a name="l00407"></a>00407                           <span class="stringliteral">"with %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" possible slits left"</span>,
-<a name="l00408"></a>00408                           IRPLIB_SLITPOS_MAX_EROSION, nobj);
-<a name="l00409"></a>00409             cpl_ensure_code(0, CPL_ERROR_CONTINUE);
-<a name="l00410"></a>00410         }
-<a name="l00411"></a>00411         cpl_ensure_code(0, cpl_error_get_code());
-<a name="l00412"></a>00412     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nobj < 1) {
-<a name="l00413"></a>00413         cpl_mask_delete(binary);
-<a name="l00414"></a>00414         cpl_mask_delete(copy);
-<a name="l00415"></a>00415         cpl_mask_delete(kernel);
-<a name="l00416"></a>00416         <span class="keywordflow">if</span> (erosions_nb == 0)
-<a name="l00417"></a>00417             cpl_msg_error(cpl_func, <span class="stringliteral">"No slit could be detected across %d "</span>
-<a name="l00418"></a>00418                           <span class="stringliteral">"pixels"</span>, size_x);
-<a name="l00419"></a>00419         <span class="keywordflow">else</span> 
-<a name="l00420"></a>00420             cpl_msg_error(cpl_func, <span class="stringliteral">"The last of %d erosions removed all the "</span>
-<a name="l00421"></a>00421                           <span class="stringliteral">"possible slits"</span>, erosions_nb);
-<a name="l00422"></a>00422         cpl_ensure_code(0, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00423"></a>00423     }
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425     <span class="comment">/* Reconstruct the slit with dilations */</span>
-<a name="l00426"></a>00426     <span class="keywordflow">for</span> (i=0 ; i < erosions_nb ; i++) {
-<a name="l00427"></a>00427         cpl_mask_copy(copy, binary, 1, 1);
-<a name="l00428"></a>00428         <span class="keywordflow">if</span> (cpl_mask_filter(binary, copy, kernel, CPL_FILTER_DILATION,
-<a name="l00429"></a>00429                             CPL_BORDER_ZERO)) <span class="keywordflow">break</span>;
-<a name="l00430"></a>00430     }
-<a name="l00431"></a>00431     cpl_mask_delete(copy);
-<a name="l00432"></a>00432     cpl_mask_delete(kernel);
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434     <span class="keywordflow">if</span> (i != erosions_nb) {
-<a name="l00435"></a>00435         cpl_msg_error(cpl_func, <span class="stringliteral">"Dilation number %d out of %d failed"</span>,
-<a name="l00436"></a>00436                       i, erosions_nb);
-<a name="l00437"></a>00437         cpl_mask_delete(binary);
-<a name="l00438"></a>00438         cpl_ensure_code(0, cpl_error_get_code());
-<a name="l00439"></a>00439     }
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441     <span class="comment">/* Find the ends of the slit */</span>
-<a name="l00442"></a>00442     pbinary = cpl_mask_get_data(binary);
-<a name="l00443"></a>00443     assert( pbinary != NULL );
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445     pfind = memchr(pbinary, CPL_BINARY_1, (<span class="keywordtype">size_t</span>)npix);
-<a name="l00446"></a>00446     assert( pfind != NULL );
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448     ibot = (int)(pfind - pbinary);
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 <span class="preprocessor">#if defined HAVE_DECL_MEMRCHR && HAVE_DECL_MEMRCHR == 1</span>
-<a name="l00451"></a>00451 <span class="preprocessor"></span>    <span class="comment">/* FIXME: Not tested */</span>
-<a name="l00452"></a>00452     pfind = memrchr(pfind, CPL_BINARY_1, (<span class="keywordtype">size_t</span>)(npix - ibot));
-<a name="l00453"></a>00453     assert( pfind != NULL );
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455     itop = (int)(pfind - pbinary);
-<a name="l00456"></a>00456 <span class="preprocessor">#else</span>
-<a name="l00457"></a>00457 <span class="preprocessor"></span>
-<a name="l00458"></a>00458     itop = npix - 1;
-<a name="l00459"></a>00459     <span class="keywordflow">while</span> (itop > ibot && pbinary[itop] != CPL_BINARY_1) itop--;
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461 <span class="preprocessor">#endif</span>
-<a name="l00462"></a>00462 <span class="preprocessor"></span>
-<a name="l00463"></a>00463     *bot_slit_y = 1 + ibot / size_x;
-<a name="l00464"></a>00464     *top_slit_y = 1 + itop / size_x;
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466     cpl_msg_info(cpl_func, 
-<a name="l00467"></a>00467             <span class="stringliteral">"Detected %"</span>CPL_SIZE_FORMAT<span class="stringliteral">"-pixel slit from pixel %d to %d "</span>
-<a name="l00468"></a>00468             <span class="stringliteral">"using %d erosions/dilations"</span>, cpl_mask_count(binary),
-<a name="l00469"></a>00469             *bot_slit_y, *top_slit_y, erosions_nb);
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471     cpl_mask_delete(binary);
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473     <span class="comment">/* Should really be an assert() */</span>
-<a name="l00474"></a>00474     cpl_ensure_code(ibot <= itop, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00477"></a>00477 }
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00489"></a>00489 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00490"></a>00490 <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_pos(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,
-<a name="l00491"></a>00491                                                    <span class="keywordtype">int</span>               xwidth,
-<a name="l00492"></a>00492                                                    cpl_size        * slit_pos)
-<a name="l00493"></a>00493 {
-<a name="l00494"></a>00494     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_x = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00495"></a>00495     cpl_image   *   image1D;
-<a name="l00496"></a>00496     cpl_size        yone;
-<a name="l00497"></a>00497     cpl_error_code  error;
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     <span class="comment">/* Collapse the image to a horizontal 1D image */</span>
-<a name="l00501"></a>00501     image1D = cpl_image_collapse_create(<span class="keyword">self</span>, 0);
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503     cpl_ensure_code(image1D != NULL, cpl_error_get_code());
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505     <span class="comment">/* Search the max of the 1D image to identify the slit position */</span>
-<a name="l00506"></a>00506     error = cpl_image_get_maxpos_window(image1D, 1+xwidth, 1, size_x-xwidth,
-<a name="l00507"></a>00507                                         1, slit_pos, &yone);
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509     cpl_image_delete(image1D);
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511     cpl_ensure_code(!error, error);
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00514"></a>00514 }
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00530"></a>00530 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00531"></a>00531 <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image * <span class="keyword">self</span>,
-<a name="l00532"></a>00532                                                    <span class="keyword">const</span> cpl_image * other,
-<a name="l00533"></a>00533                                                    <span class="keywordtype">int</span> hsize,
-<a name="l00534"></a>00534                                                    cpl_boolean vertical)
-<a name="l00535"></a>00535 {
-<a name="l00536"></a>00536     <span class="keyword">const</span> <span class="keywordtype">int</span>      nx = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00537"></a>00537     <span class="keyword">const</span> <span class="keywordtype">int</span>      ny = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l00538"></a>00538     <span class="keyword">const</span> <span class="keywordtype">int</span>      msize = 1 + 2 * hsize;
-<a name="l00539"></a>00539     cpl_mask     * mask;
-<a name="l00540"></a>00540     cpl_image    * background;
-<a name="l00541"></a>00541     cpl_error_code error = CPL_ERROR_NONE;
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00544"></a>00544     cpl_ensure_code(hsize >= 0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     <span class="keywordflow">if</span> (other == NULL) other = <span class="keyword">self</span>;
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548     mask = vertical ? cpl_mask_new(msize, 1) : cpl_mask_new(1, msize);
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550     error |= cpl_mask_not(mask);
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552     background = cpl_image_new(nx, ny, cpl_image_get_type(other));
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554     error |= cpl_image_filter_mask(background, other, mask, CPL_FILTER_MEDIAN,
-<a name="l00555"></a>00555                                    CPL_BORDER_FILTER);
-<a name="l00556"></a>00556     cpl_mask_delete(mask);
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558     <span class="keywordflow">if</span> (<span class="keyword">self</span> != other) {
-<a name="l00559"></a>00559         error |= cpl_image_copy(<span class="keyword">self</span>, other, 1, 1);
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562     error |= cpl_image_subtract(<span class="keyword">self</span>, background);
-<a name="l00563"></a>00563     cpl_image_delete(background);
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;
-<a name="l00566"></a>00566 }
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_slitpos.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_slitpos.c,v 1.31 2013/07/04 12:10:12 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/07/04 12:10:12 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.31 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/* The IRPLIB-based application may have checked for the availability of</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">   memrchr() in which case the macro HAVE_DECL_MEMRCHR is defined as either</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">   0 or 1. Without checks it is assumed that the function is not available.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">   With a suitable version of autoconf the macro can be defined with this</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">   entry in configure.ac:</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">   AC_CHECK_DECLS([memrchr])</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "irplib_slitpos.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "irplib_flat.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#ifndef IRPLIB_SLITPOS_KERNEL_SIZE_Y</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_KERNEL_SIZE_Y      5</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#ifndef IRPLIB_SLITPOS_MAX_EROSION</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_MAX_EROSION     1024</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_edges_one_line(<span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                                          <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_slit_ends(<span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                                          <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_pos(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                                    cpl_size *);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image *,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                                    <span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                                    <span class="keywordtype">int</span>, cpl_boolean) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba">  119</a></span> cpl_table * <a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba" title="Detect the slit position, detect its ends, extract a thin image containing only the slit and find its...">irplib_slitpos_analysis</a>(<span class="keyword">const</span> cpl_image * imslit,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                     <span class="keywordtype">int</span>               slit_max_width,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                     <span class="keywordtype">double</span>          * slit_flux)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_x = cpl_image_get_size_x(imslit);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_y = cpl_image_get_size_y(imslit);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordtype">int</span>             slit_length;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     cpl_size        slit_pos;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     cpl_image   *   filtered;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     cpl_mask    *   mask;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     cpl_image   *   thin_im;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">int</span>             slit_top_y = 0; <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">int</span>             slit_bot_y = 0; <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cpl_table   *   <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordtype">double</span>      *   slit_y,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                 *   slit_x_l,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                 *   slit_x_r;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">double</span>      *   coeff_r;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">double</span>      *   coeff_l;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">int</span>             i;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* Initialize */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">if</span> (slit_flux != NULL) *slit_flux = 0.0 ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="comment">/* Median vertical filtering 3x3 */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     mask = cpl_mask_new(3, 3) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_mask_not(mask) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     filtered = cpl_image_new(size_x, size_y, cpl_image_get_type(imslit));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     error = cpl_image_filter_mask(filtered, imslit, mask,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                   CPL_FILTER_MEDIAN, CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     cpl_mask_delete(mask);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="comment">/* The background may vary strongly along the vertical line. */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="comment">/* Detect and remove background with a 1+2*Slit_max x 1 median filter */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     error = irplib_image_filter_background_line(filtered, NULL, slit_max_width,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                                 CPL_TRUE);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         cpl_image_delete(filtered) ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="comment">/* Find the position of the slit */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">if</span> (irplib_slitpos_find_vert_pos(filtered, slit_max_width/2, &slit_pos)) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Could not find the slit position"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="comment">/* Extract a thin image containing the slit */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     thin_im = cpl_image_extract(filtered, slit_pos-slit_max_width/2, 1,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                                 slit_pos+slit_max_width/2, size_y);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> (thin_im == NULL) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Could not extract the %d pixel thin image "</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                       <span class="stringliteral">"around position %"</span>CPL_SIZE_FORMAT, </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                       slit_max_width, slit_pos);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="comment">/* Find the ends of the slit */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     error = irplib_slitpos_find_vert_slit_ends(thin_im,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                                                IRPLIB_SLITPOS_KERNEL_SIZE_Y,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                                                &slit_bot_y,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                                                &slit_top_y);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_image_delete(thin_im);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Extract an image with exactly the slit */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     thin_im = cpl_image_extract(filtered,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                 slit_pos-slit_max_width/2,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                 slit_bot_y,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                 slit_pos+slit_max_width/2,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                 slit_top_y);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_image_delete(filtered);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_ensure(thin_im != NULL, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     slit_length = 1 + slit_top_y - slit_bot_y;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="comment">/* Allocate some arrays */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     slit_y = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     slit_x_l = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     slit_x_r = cpl_malloc(slit_length * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="comment">/* Find the edges of the slit */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">for</span> (i=0 ; i<slit_length ; i++) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         <span class="keywordtype">int</span> right_pos = 0; <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         <span class="keywordtype">int</span> left_pos  = 0; <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>         <span class="keywordflow">if</span> (irplib_slitpos_find_edges_one_line(thin_im,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                                                 i,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                                                 &left_pos,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                                                 &right_pos)) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"cannot find the edges of the [%d]th line"</span>, </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                     i+1);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>             cpl_image_delete(thin_im);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>             <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         <span class="comment">/* Update the slit_flux */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         <span class="keywordflow">if</span> (slit_flux != NULL) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>             *slit_flux += cpl_image_get_flux_window(thin_im, left_pos+1,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                     i+1, right_pos+1, i+1) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="comment">/* Store the edges for the fit */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         slit_x_l[i] = (double)left_pos;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         slit_x_r[i] = (double)right_pos;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         slit_y[i]   = (double)(i+slit_bot_y-1);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cpl_image_delete(thin_im);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="comment">/* Linear regression to find the edges */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     coeff_l = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(slit_y, slit_x_l, slit_length);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     coeff_r = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(slit_y, slit_x_r, slit_length);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_free(slit_y);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     cpl_free(slit_x_l);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_free(slit_x_r);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="comment">/* Allocate the table containing the results */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keyword">self</span> = cpl_table_new(slit_length);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_Y"</span>,      CPL_TYPE_INT);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>,   CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     error |= cpl_table_new_column(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>,  CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_Y"</span>, <span class="stringliteral">"pixel"</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>, <span class="stringliteral">"pixel"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, <span class="stringliteral">"pixel"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     error |= cpl_table_set_column_unit(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>, <span class="stringliteral">"pixel"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     cpl_ensure(!error, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="comment">/* Rewrite the edges in the out table, and write the center */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">for</span> (i=0 ; i < slit_length ; i++) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="keyword">const</span> <span class="keywordtype">int</span>    islity = i + slit_bot_y;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> dslit  = slit_pos - slit_max_width / 2.0;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> dleft  = coeff_l[0] + coeff_l[1] * (double)islity + dslit;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> dright = coeff_r[0] + coeff_r[1] * (double)islity + dslit;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> dcent  = 0.5 * (dleft + dright);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         <span class="keywordflow">if</span> (cpl_table_set_int(<span class="keyword">self</span>,    <span class="stringliteral">"SLIT_Y"</span>,      i, islity)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_LEFT"</span>,   i, dleft))  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_RIGHT"</span>,  i, dright)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <span class="keywordflow">if</span> (cpl_table_set_double(<span class="keyword">self</span>, <span class="stringliteral">"SLIT_CENTER"</span>, i, dcent))  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_free(coeff_r);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cpl_free(coeff_l);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">if</span> (i != slit_length) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         cpl_table_delete(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">return</span> <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_edges_one_line(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                                                          <span class="keywordtype">int</span>          line_pos,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                                          <span class="keywordtype">int</span>        * left_pos,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                                          <span class="keywordtype">int</span>        * right_pos)</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>     size_x = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> * pself;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordtype">double</span>        threshold;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordtype">int</span>           i;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     cpl_ensure_code(cpl_image_get_type(<span class="keyword">self</span>) == CPL_TYPE_FLOAT,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                     CPL_ERROR_INVALID_TYPE);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     pself = cpl_image_get_data_float_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">/* Find the threshold */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     threshold = cpl_image_get_mean_window(<span class="keyword">self</span>, 1, line_pos+1, size_x,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                                           line_pos+1);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">/* Detect the left edge */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     i = 0;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordflow">while</span> (i < size_x && pself[line_pos*size_x+i] < threshold) i++;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     *left_pos = i;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="comment">/* Detect the right edge */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     i = size_x - 1;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">while</span> (i >= 0 && pself[line_pos*size_x+i] < threshold) i--;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     *right_pos = i;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> cpl_error_code irplib_slitpos_find_vert_slit_ends(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                                                   <span class="keywordtype">int</span>        kernel_size,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                                                   <span class="keywordtype">int</span>      * bot_slit_y,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                                                   <span class="keywordtype">int</span>      * top_slit_y)</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     cpl_mask         * binary;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     cpl_mask         * copy = NULL;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     cpl_mask         * kernel;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     cpl_image        * label_image;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordtype">int</span>                erosions_nb;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     cpl_size           nobj ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          size_x = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          size_y = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          npix = size_x * size_y;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keyword">const</span> cpl_binary * pbinary;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keyword">const</span> cpl_binary * pfind;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordtype">int</span>                i, itop, ibot;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     cpl_ensure_code(size_x      > 0, cpl_error_get_code());</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     cpl_ensure_code(kernel_size > 0, cpl_error_get_code());</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="comment">/* Threshold to have a binary image */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     binary = cpl_mask_threshold_image_create(<span class="keyword">self</span>, cpl_image_get_mean(<span class="keyword">self</span>),</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                                              cpl_image_get_max(<span class="keyword">self</span>));</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_ensure_code(binary != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* Erode until there is 1 object left in the image */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     label_image = cpl_image_labelise_mask_create(binary, &nobj);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     cpl_image_delete(label_image);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordflow">if</span> (label_image == NULL) {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         cpl_mask_delete(binary);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         cpl_ensure_code(0, cpl_error_get_code());</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     }</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="comment">/* Define the kernel for morpho operations */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     kernel = cpl_mask_new(kernel_size, 1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     cpl_mask_not(kernel);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     copy = cpl_mask_wrap(size_x, size_y, cpl_malloc(size_x * size_y *</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                                                     <span class="keyword">sizeof</span>(cpl_binary)));</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">for</span> (erosions_nb = 0; erosions_nb < IRPLIB_SLITPOS_MAX_EROSION && nobj > 1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>          erosions_nb++) {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="comment">/* Should not be possible to break from this loop */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         cpl_mask_copy(copy, binary, 1, 1);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         <span class="keywordflow">if</span> (cpl_mask_filter(binary, copy, kernel, CPL_FILTER_EROSION,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                             CPL_BORDER_ZERO)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         label_image = cpl_image_labelise_mask_create(binary, &nobj);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         <span class="keywordflow">if</span> (label_image == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Assuming nobj was not set to 1 */</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         cpl_image_delete(label_image);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordflow">if</span> (nobj > 1) {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         cpl_mask_delete(binary);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         cpl_mask_delete(copy);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         cpl_mask_delete(kernel);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         <span class="keywordflow">if</span> (erosions_nb >= IRPLIB_SLITPOS_MAX_EROSION) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Number of erosions reached a limit of %d "</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                           <span class="stringliteral">"with %"</span>CPL_SIZE_FORMAT<span class="stringliteral">" possible slits left"</span>,</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                           IRPLIB_SLITPOS_MAX_EROSION, nobj);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>             cpl_ensure_code(0, CPL_ERROR_CONTINUE);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         cpl_ensure_code(0, cpl_error_get_code());</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nobj < 1) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         cpl_mask_delete(binary);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         cpl_mask_delete(copy);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         cpl_mask_delete(kernel);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="keywordflow">if</span> (erosions_nb == 0)</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"No slit could be detected across %d "</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                           <span class="stringliteral">"pixels"</span>, size_x);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"The last of %d erosions removed all the "</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                           <span class="stringliteral">"possible slits"</span>, erosions_nb);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>         cpl_ensure_code(0, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="comment">/* Reconstruct the slit with dilations */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keywordflow">for</span> (i=0 ; i < erosions_nb ; i++) {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         cpl_mask_copy(copy, binary, 1, 1);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <span class="keywordflow">if</span> (cpl_mask_filter(binary, copy, kernel, CPL_FILTER_DILATION,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                             CPL_BORDER_ZERO)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     cpl_mask_delete(copy);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     cpl_mask_delete(kernel);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="keywordflow">if</span> (i != erosions_nb) {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Dilation number %d out of %d failed"</span>,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                       i, erosions_nb);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         cpl_mask_delete(binary);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         cpl_ensure_code(0, cpl_error_get_code());</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     }</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="comment">/* Find the ends of the slit */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     pbinary = cpl_mask_get_data(binary);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     assert( pbinary != NULL );</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     pfind = memchr(pbinary, CPL_BINARY_1, (<span class="keywordtype">size_t</span>)npix);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     assert( pfind != NULL );</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     ibot = (int)(pfind - pbinary);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">#if defined HAVE_DECL_MEMRCHR && HAVE_DECL_MEMRCHR == 1</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor"></span>    <span class="comment">/* FIXME: Not tested */</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     pfind = memrchr(pfind, CPL_BINARY_1, (<span class="keywordtype">size_t</span>)(npix - ibot));</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     assert( pfind != NULL );</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     itop = (int)(pfind - pbinary);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     itop = npix - 1;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordflow">while</span> (itop > ibot && pbinary[itop] == CPL_BINARY_0) itop--;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     *bot_slit_y = 1 + ibot / size_x;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     *top_slit_y = 1 + itop / size_x;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     cpl_msg_info(cpl_func, </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             <span class="stringliteral">"Detected %"</span>CPL_SIZE_FORMAT<span class="stringliteral">"-pixel slit from pixel %d to %d "</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             <span class="stringliteral">"using %d erosions/dilations"</span>, cpl_mask_count(binary),</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             *bot_slit_y, *top_slit_y, erosions_nb);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     cpl_mask_delete(binary);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     <span class="comment">/* Should really be an assert() */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     cpl_ensure_code(ibot <= itop, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="keyword">static</span> cpl_error_code irplib_slitpos_find_vert_pos(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                                                    <span class="keywordtype">int</span>               xwidth,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                                                    cpl_size        * slit_pos)</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>       size_x = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     cpl_image   *   image1D;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     cpl_size        yone;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     cpl_error_code  error;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="comment">/* Collapse the image to a horizontal 1D image */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     image1D = cpl_image_collapse_create(<span class="keyword">self</span>, 0);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     cpl_ensure_code(image1D != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="comment">/* Search the max of the 1D image to identify the slit position */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     error = cpl_image_get_maxpos_window(image1D, 1+xwidth, 1, size_x-xwidth,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                                         1, slit_pos, &yone);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     cpl_image_delete(image1D);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="keyword">static</span> cpl_error_code irplib_image_filter_background_line(cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                                                    <span class="keyword">const</span> cpl_image * other,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                                                    <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                                                    cpl_boolean vertical)</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      nx = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      ny = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      msize = 1 + 2 * hsize;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     cpl_mask     * mask;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     cpl_image    * background;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     cpl_ensure_code(hsize >= 0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordflow">if</span> (other == NULL) other = <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     mask = vertical ? cpl_mask_new(msize, 1) : cpl_mask_new(1, msize);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     error |= cpl_mask_not(mask);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     background = cpl_image_new(nx, ny, cpl_image_get_type(other));</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     error |= cpl_image_filter_mask(background, other, mask, CPL_FILTER_MEDIAN,</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>                                    CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     cpl_mask_delete(mask);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="keywordflow">if</span> (<span class="keyword">self</span> != other) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         error |= cpl_image_copy(<span class="keyword">self</span>, other, 1, 1);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     error |= cpl_image_subtract(<span class="keyword">self</span>, background);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     cpl_image_delete(background);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__slitpos_8h_source.html b/html/irplib__slitpos_8h_source.html
index 8449098..2978adb 100644
--- a/html/irplib__slitpos_8h_source.html
+++ b/html/irplib__slitpos_8h_source.html
@@ -2,54 +2,85 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_slitpos.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_slitpos.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_slitpos.h,v 1.6 2006/11/29 13:22:59 yjung Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: yjung $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/11/29 13:22:59 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_SLITPOS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_table * <a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba" title="Detect the slit position, detect its ends, extract a thin image containing only the...">irplib_slitpos_analysis</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_slitpos.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_slitpos.h,v 1.6 2006/11/29 13:22:59 yjung Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: yjung $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/11/29 13:22:59 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_SLITPOS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SLITPOS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_table * <a class="code" href="group__irplib__slitpos.html#ga632b21eccf3d4bb48426cdd23f321cba" title="Detect the slit position, detect its ends, extract a thin image containing only the slit and find its...">irplib_slitpos_analysis</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__spectrum_8c_source.html b/html/irplib__spectrum_8c_source.html
index ebd0ced..ed2b5b8 100644
--- a/html/irplib__spectrum_8c_source.html
+++ b/html/irplib__spectrum_8c_source.html
@@ -2,568 +2,599 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_spectrum.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_spectrum.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_spectrum.c,v 1.29 2012/01/12 11:50:41 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/01/12 11:50:41 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.29 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <float.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include "irplib_wlxcorr.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_spectrum.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                                   Define</span>
-<a name="l00045"></a>00045 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#define SPECTRUM_HW                     16</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define MIN_THRESH_FACT                 0.9</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define MAX_THRESH_FACT                 1.1</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define SPEC_SHADOW_FACT                30.0 </span><span class="comment">/* Negative spectrum intensity*/</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define SPEC_MAXWIDTH                   48</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                            Functions prototypes</span>
-<a name="l00062"></a>00062 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">int</span> select_valid_spectra(cpl_image *, cpl_apertures *, <span class="keywordtype">int</span>,
-<a name="l00065"></a>00065         spec_shadows, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> **) ;
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">int</span> valid_spectrum(cpl_image *, cpl_apertures *, <span class="keywordtype">int</span>, spec_shadows, <span class="keywordtype">int</span>,
-<a name="l00067"></a>00067         <span class="keywordtype">int</span>) ;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 
-<a name="l00077"></a>00077 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00093"></a><a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0">00093</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0" title="Finds the brightest spectrum in an image.">irplib_spectrum_find_brightest</a>(
-<a name="l00094"></a>00094         <span class="keyword">const</span> cpl_image     *   in,
-<a name="l00095"></a>00095         <span class="keywordtype">int</span>                     offset,
-<a name="l00096"></a>00096         spec_shadows            shadows,
-<a name="l00097"></a>00097         <span class="keywordtype">double</span>                  min_bright,
-<a name="l00098"></a>00098         <span class="keywordtype">int</span>                     orient,
-<a name="l00099"></a>00099         <span class="keywordtype">double</span>              *   pos)
-<a name="l00100"></a>00100 {
-<a name="l00101"></a>00101     cpl_image       *   loc_ima ;
-<a name="l00102"></a>00102     cpl_image       *   filt_image ;
-<a name="l00103"></a>00103     cpl_image       *   collapsed ;
-<a name="l00104"></a>00104     <span class="keywordtype">float</span>           *   pcollapsed ;
-<a name="l00105"></a>00105     cpl_vector      *   line ;
-<a name="l00106"></a>00106     <span class="keywordtype">double</span>          *   pline ;
-<a name="l00107"></a>00107     cpl_vector      *   line_filt ;
-<a name="l00108"></a>00108     <span class="keywordtype">double</span>              threshold ;
-<a name="l00109"></a>00109     <span class="keywordtype">double</span>              median, stdev, max, mean ;
-<a name="l00110"></a>00110     cpl_mask        *   mask ;
-<a name="l00111"></a>00111     cpl_image       *   labels ;
-<a name="l00112"></a>00112     cpl_size            nlabels ;
-<a name="l00113"></a>00113     cpl_apertures   *   aperts ;
-<a name="l00114"></a>00114     <span class="keywordtype">int</span>                 n_valid_specs ;
-<a name="l00115"></a>00115     <span class="keywordtype">int</span>             *   valid_specs ;
-<a name="l00116"></a>00116     <span class="keywordtype">double</span>              brightness ;
-<a name="l00117"></a>00117     <span class="keywordtype">int</span>                 i ;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="comment">/* Test entries */</span>
-<a name="l00120"></a>00120     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00121"></a>00121     <span class="keywordflow">if</span> (orient!=0 && orient!=1) <span class="keywordflow">return</span> -1 ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="comment">/* Flip the image if necessary */</span>
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (orient == 1) {
-<a name="l00125"></a>00125         loc_ima = cpl_image_duplicate(in) ;
-<a name="l00126"></a>00126         cpl_image_flip(loc_ima, 1) ;
-<a name="l00127"></a>00127     } <span class="keywordflow">else</span> {
-<a name="l00128"></a>00128         loc_ima = cpl_image_duplicate(in) ;
-<a name="l00129"></a>00129     }
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     <span class="comment">/* Median vertical filtering 3x3 */</span>
-<a name="l00132"></a>00132     mask = cpl_mask_new(3, 3) ;
-<a name="l00133"></a>00133     cpl_mask_not(mask) ;
-<a name="l00134"></a>00134     filt_image = cpl_image_new(
-<a name="l00135"></a>00135             cpl_image_get_size_x(loc_ima),
-<a name="l00136"></a>00136             cpl_image_get_size_y(loc_ima),
-<a name="l00137"></a>00137             cpl_image_get_type(loc_ima)) ;
-<a name="l00138"></a>00138     <span class="keywordflow">if</span> (cpl_image_filter_mask(filt_image, loc_ima, mask,
-<a name="l00139"></a>00139                 CPL_FILTER_MEDIAN, CPL_BORDER_FILTER) != CPL_ERROR_NONE) {
-<a name="l00140"></a>00140         cpl_msg_error(__func__, <span class="stringliteral">"Cannot filter the image"</span>) ;
-<a name="l00141"></a>00141         cpl_mask_delete(mask) ;
-<a name="l00142"></a>00142         cpl_image_delete(filt_image) ;
-<a name="l00143"></a>00143         <span class="keywordflow">return</span> -1 ;
-<a name="l00144"></a>00144     }
-<a name="l00145"></a>00145     cpl_mask_delete(mask) ;
-<a name="l00146"></a>00146     cpl_image_delete(loc_ima) ;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="comment">/* Collapse the image */</span>
-<a name="l00149"></a>00149     <span class="keywordflow">if</span> ((collapsed = cpl_image_collapse_median_create(filt_image, 1, 0,
-<a name="l00150"></a>00150                     0)) == NULL) {
-<a name="l00151"></a>00151         cpl_msg_error(cpl_func, <span class="stringliteral">"collapsing image: aborting spectrum detection"</span>);
-<a name="l00152"></a>00152         cpl_image_delete(filt_image) ;
-<a name="l00153"></a>00153         <span class="keywordflow">return</span> -1 ;
-<a name="l00154"></a>00154     }
-<a name="l00155"></a>00155     cpl_image_delete(filt_image) ;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="comment">/* Subtract low frequency signal */</span>
-<a name="l00158"></a>00158     line = cpl_vector_new_from_image_column(collapsed, 1) ;
-<a name="l00159"></a>00159     cpl_image_delete(collapsed) ;
-<a name="l00160"></a>00160     line_filt = cpl_vector_filter_median_create(line, SPECTRUM_HW) ;
-<a name="l00161"></a>00161     cpl_vector_subtract(line, line_filt) ;
-<a name="l00162"></a>00162     cpl_vector_delete(line_filt) ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     <span class="comment">/* Get relevant stats for thresholding */</span>
-<a name="l00165"></a>00165     median = cpl_vector_get_median_const(line) ;
-<a name="l00166"></a>00166     stdev = cpl_vector_get_stdev(line) ;
-<a name="l00167"></a>00167     max = cpl_vector_get_max(line) ;
-<a name="l00168"></a>00168     mean = cpl_vector_get_mean(line) ;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="comment">/* Set the threshold */</span>
-<a name="l00171"></a>00171     threshold = median + stdev ;
-<a name="l00172"></a>00172     <span class="keywordflow">if</span> (threshold > MIN_THRESH_FACT * max)  threshold = MIN_THRESH_FACT * max ;
-<a name="l00173"></a>00173     <span class="keywordflow">if</span> (threshold < MAX_THRESH_FACT * mean) threshold = MAX_THRESH_FACT * mean;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="comment">/* Recreate the image */</span>
-<a name="l00176"></a>00176     collapsed = cpl_image_new(1, cpl_vector_get_size(line), CPL_TYPE_FLOAT) ;
-<a name="l00177"></a>00177     pcollapsed = cpl_image_get_data_float(collapsed) ;
-<a name="l00178"></a>00178     pline = cpl_vector_get_data(line) ;
-<a name="l00179"></a>00179     <span class="keywordflow">for</span> (i=0 ; i<cpl_vector_get_size(line) ; i++)
-<a name="l00180"></a>00180         pcollapsed[i] = (<span class="keywordtype">float</span>)pline[i] ;
-<a name="l00181"></a>00181     cpl_vector_delete(line) ;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     <span class="comment">/* Binarise the image */</span>
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> ((mask = cpl_mask_threshold_image_create(collapsed, threshold,
-<a name="l00185"></a>00185             DBL_MAX)) == NULL) {
-<a name="l00186"></a>00186         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot binarise"</span>) ;
-<a name="l00187"></a>00187         cpl_image_delete(collapsed) ;
-<a name="l00188"></a>00188         <span class="keywordflow">return</span> -1 ;
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (cpl_mask_count(mask) < 1) {
-<a name="l00191"></a>00191         cpl_msg_error(cpl_func, <span class="stringliteral">"not enough signal to detect spectra"</span>) ;
-<a name="l00192"></a>00192         cpl_image_delete(collapsed) ;
-<a name="l00193"></a>00193         cpl_mask_delete(mask) ;
-<a name="l00194"></a>00194         <span class="keywordflow">return</span> -1 ;
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196     <span class="comment">/* Labelise the different detected apertures */</span>
-<a name="l00197"></a>00197     <span class="keywordflow">if</span> ((labels = cpl_image_labelise_mask_create(mask, &nlabels))==NULL) {
-<a name="l00198"></a>00198         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot labelise"</span>) ;
-<a name="l00199"></a>00199         cpl_image_delete(collapsed) ;
-<a name="l00200"></a>00200         cpl_mask_delete(mask) ;
-<a name="l00201"></a>00201         <span class="keywordflow">return</span> -1 ;
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203     cpl_mask_delete(mask) ;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="comment">/* Create the detected apertures list */</span>
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> ((aperts = cpl_apertures_new_from_image(collapsed, labels)) == NULL) {
-<a name="l00207"></a>00207         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot compute apertures"</span>) ;
-<a name="l00208"></a>00208         cpl_image_delete(collapsed) ;
-<a name="l00209"></a>00209         cpl_image_delete(labels) ;
-<a name="l00210"></a>00210         <span class="keywordflow">return</span> -1 ;
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212     cpl_image_delete(labels) ;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214     <span class="comment">/* Select only relevant specs, create corresponding LUT's */</span>
-<a name="l00215"></a>00215     <span class="keywordflow">if</span> (select_valid_spectra(collapsed, aperts, offset, shadows, SPEC_MAXWIDTH,
-<a name="l00216"></a>00216                 &n_valid_specs, &valid_specs) == -1) {
-<a name="l00217"></a>00217         cpl_msg_debug(cpl_func, 
-<a name="l00218"></a>00218                 <span class="stringliteral">"Could not select valid spectra from the %"</span>CPL_SIZE_FORMAT
-<a name="l00219"></a>00219                 <span class="stringliteral">" apertures in %"</span>CPL_SIZE_FORMAT<span class="stringliteral">"-col 1D-image, offset=%d"</span>
-<a name="l00220"></a>00220                 <span class="stringliteral">", min_bright=%d"</span>,
-<a name="l00221"></a>00221                       cpl_apertures_get_size(aperts),
-<a name="l00222"></a>00222                       cpl_image_get_size_y(collapsed), offset, SPEC_MAXWIDTH);
-<a name="l00223"></a>00223         <span class="keywordflow">if</span> (cpl_msg_get_level() <= CPL_MSG_DEBUG)
-<a name="l00224"></a>00224             cpl_apertures_dump(aperts, stderr);
-<a name="l00225"></a>00225         cpl_image_delete(collapsed);
-<a name="l00226"></a>00226         cpl_apertures_delete(aperts);
-<a name="l00227"></a>00227         <span class="keywordflow">return</span> -1;
-<a name="l00228"></a>00228     }
-<a name="l00229"></a>00229     cpl_image_delete(collapsed) ;
-<a name="l00230"></a>00230     <span class="keywordflow">if</span> (n_valid_specs < 1) {
-<a name="l00231"></a>00231         cpl_msg_error(cpl_func, <span class="stringliteral">"no valid spectrum detected"</span>) ;
-<a name="l00232"></a>00232         cpl_free(valid_specs) ;
-<a name="l00233"></a>00233         cpl_apertures_delete(aperts) ;
-<a name="l00234"></a>00234         <span class="keywordflow">return</span> -1 ;
-<a name="l00235"></a>00235     }
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="comment">/* Look for the brightest, among the detected spectra */</span>
-<a name="l00238"></a>00238     *pos = cpl_apertures_get_centroid_y(aperts, valid_specs[0]+1) ;
-<a name="l00239"></a>00239     brightness = cpl_apertures_get_flux(aperts, valid_specs[0]+1) ;
-<a name="l00240"></a>00240     <span class="keywordflow">for</span> (i=0 ; i<n_valid_specs ; i++) {
-<a name="l00241"></a>00241         <span class="keywordflow">if</span> (cpl_apertures_get_flux(aperts, valid_specs[i]+1) > brightness) {
-<a name="l00242"></a>00242             *pos = cpl_apertures_get_centroid_y(aperts, valid_specs[i]+1) ;
-<a name="l00243"></a>00243             brightness = cpl_apertures_get_flux(aperts, valid_specs[i]+1) ;
-<a name="l00244"></a>00244         }
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246     cpl_apertures_delete(aperts) ;
-<a name="l00247"></a>00247     cpl_free(valid_specs) ;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     <span class="comment">/* Minimum brightness required */</span>
-<a name="l00250"></a>00250     <span class="keywordflow">if</span> (brightness < min_bright) {
-<a name="l00251"></a>00251         cpl_msg_error(cpl_func, <span class="stringliteral">"brightness %f too low <%f"</span>, brightness,
-<a name="l00252"></a>00252                 min_bright) ;
-<a name="l00253"></a>00253         <span class="keywordflow">return</span> -1 ;
-<a name="l00254"></a>00254     }
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* Return */</span>
-<a name="l00257"></a>00257     <span class="keywordflow">return</span> 0 ;
-<a name="l00258"></a>00258 }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00272"></a>00272 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00273"></a><a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961">00273</a> cpl_vector * <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(
-<a name="l00274"></a>00274         <span class="keyword">const</span> cpl_vector    *   in,
-<a name="l00275"></a>00275         <span class="keywordtype">int</span>                     fwhm,
-<a name="l00276"></a>00276         <span class="keywordtype">double</span>                  sigma,
-<a name="l00277"></a>00277         <span class="keywordtype">int</span>                     display,
-<a name="l00278"></a>00278         cpl_vector          **  fwhms_out,
-<a name="l00279"></a>00279         cpl_vector          **  areas_out)
-<a name="l00280"></a>00280 {
-<a name="l00281"></a>00281     cpl_vector      *   filtered ;
-<a name="l00282"></a>00282     cpl_vector      *   spec_clean ;
-<a name="l00283"></a>00283     cpl_vector      *   spec_convolved ;
-<a name="l00284"></a>00284     <span class="keywordtype">double</span>          *   pspec_convolved ;
-<a name="l00285"></a>00285     <span class="keywordtype">int</span>                 filt_size ;
-<a name="l00286"></a>00286     cpl_vector      *   conv_kernel ;
-<a name="l00287"></a>00287     cpl_vector      *   extract ;
-<a name="l00288"></a>00288     cpl_vector      *   extract_x ;
-<a name="l00289"></a>00289     cpl_vector      *   big_detected ;
-<a name="l00290"></a>00290     cpl_vector      *   big_fwhms ;
-<a name="l00291"></a>00291     cpl_vector      *   big_area ;
-<a name="l00292"></a>00292     <span class="keywordtype">double</span>          *   pbig_detected ;
-<a name="l00293"></a>00293     <span class="keywordtype">double</span>          *   pbig_fwhms ;
-<a name="l00294"></a>00294     <span class="keywordtype">double</span>          *   pbig_area ;
-<a name="l00295"></a>00295     cpl_vector      *   detected ;
-<a name="l00296"></a>00296     <span class="keywordtype">double</span>          *   pdetected ;
-<a name="l00297"></a>00297     cpl_vector      *   fwhms ;
-<a name="l00298"></a>00298     <span class="keywordtype">double</span>          *   pfwhms ;
-<a name="l00299"></a>00299     cpl_vector      *   area ;
-<a name="l00300"></a>00300     <span class="keywordtype">double</span>          *   parea ;
-<a name="l00301"></a>00301     <span class="keywordtype">double</span>              max, med, stdev, cur_val ;
-<a name="l00302"></a>00302     <span class="keywordtype">double</span>              x0, sig, norm, offset ;
-<a name="l00303"></a>00303     <span class="keywordtype">int</span>                 nb_det, nb_samples, hwidth, start, stop ;
-<a name="l00304"></a>00304     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     <span class="comment">/* Test entries */</span>
-<a name="l00307"></a>00307     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309     <span class="comment">/* Initialise */</span>
-<a name="l00310"></a>00310     nb_samples = cpl_vector_get_size(in) ;
-<a name="l00311"></a>00311     filt_size = 5 ;
-<a name="l00312"></a>00312     hwidth = 5 ;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314     <span class="comment">/* Subtract the low frequency part */</span>
-<a name="l00315"></a>00315     cpl_msg_info(__func__, <span class="stringliteral">"Low Frequency signal removal"</span>) ;
-<a name="l00316"></a>00316     <span class="keywordflow">if</span> ((filtered=cpl_vector_filter_median_create(in, filt_size))==NULL){
-<a name="l00317"></a>00317         cpl_msg_error(__func__, <span class="stringliteral">"Cannot filter the spectrum"</span>) ;
-<a name="l00318"></a>00318         <span class="keywordflow">return</span> NULL ;
-<a name="l00319"></a>00319     }
-<a name="l00320"></a>00320     spec_clean = cpl_vector_duplicate(in) ;
-<a name="l00321"></a>00321     cpl_vector_subtract(spec_clean, filtered) ;
-<a name="l00322"></a>00322     cpl_vector_delete(filtered) ;
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     <span class="comment">/* Display if requested */</span>
-<a name="l00325"></a>00325     <span class="keywordflow">if</span> (display) {
-<a name="l00326"></a>00326         cpl_plot_vector(
-<a name="l00327"></a>00327     <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Intensity (ADU)';"</span>,
-<a name="l00328"></a>00328         <span class="stringliteral">"t 'Filtered extracted spectrum' w lines"</span>, <span class="stringliteral">""</span>, spec_clean);
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="comment">/* Convolve */</span>
-<a name="l00332"></a>00332     spec_convolved = cpl_vector_duplicate(spec_clean) ;
-<a name="l00333"></a>00333     <span class="keywordflow">if</span> (fwhm > 0) {
-<a name="l00334"></a>00334         cpl_msg_info(__func__, <span class="stringliteral">"Spectrum convolution"</span>) ;
-<a name="l00335"></a>00335         <span class="comment">/* Create convolution kernel */</span>
-<a name="l00336"></a>00336         <span class="keywordflow">if</span> ((conv_kernel = irplib_wlxcorr_convolve_create_kernel(fwhm,
-<a name="l00337"></a>00337                         fwhm)) == NULL) {
-<a name="l00338"></a>00338             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create convolution kernel"</span>) ;
-<a name="l00339"></a>00339             cpl_vector_delete(spec_clean) ;
-<a name="l00340"></a>00340             cpl_vector_delete(spec_convolved) ;
-<a name="l00341"></a>00341             <span class="keywordflow">return</span> NULL ;
-<a name="l00342"></a>00342         }
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344         <span class="comment">/* Smooth the instrument resolution */</span>
-<a name="l00345"></a>00345         <span class="keywordflow">if</span> (irplib_wlxcorr_convolve(spec_convolved, conv_kernel)) {
-<a name="l00346"></a>00346             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot smoothe the signal"</span>);
-<a name="l00347"></a>00347             cpl_vector_delete(spec_clean) ;
-<a name="l00348"></a>00348             cpl_vector_delete(spec_convolved) ;
-<a name="l00349"></a>00349             cpl_vector_delete(conv_kernel) ;
-<a name="l00350"></a>00350             <span class="keywordflow">return</span> NULL ;
-<a name="l00351"></a>00351         }
-<a name="l00352"></a>00352         cpl_vector_delete(conv_kernel) ;
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354         <span class="comment">/* Display if requested */</span>
-<a name="l00355"></a>00355         <span class="keywordflow">if</span> (display) {
-<a name="l00356"></a>00356             cpl_plot_vector(
-<a name="l00357"></a>00357         <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Intensity (ADU)';"</span>,
-<a name="l00358"></a>00358             <span class="stringliteral">"t 'Convolved extracted spectrum' w lines"</span>, <span class="stringliteral">""</span>, spec_convolved);
-<a name="l00359"></a>00359         }
-<a name="l00360"></a>00360     }
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362     <span class="comment">/* Apply the detection */</span>
-<a name="l00363"></a>00363     big_detected = cpl_vector_duplicate(spec_convolved) ;
-<a name="l00364"></a>00364     big_fwhms = cpl_vector_duplicate(spec_convolved) ;
-<a name="l00365"></a>00365     big_area = cpl_vector_duplicate(spec_convolved) ;
-<a name="l00366"></a>00366     pbig_detected = cpl_vector_get_data(big_detected) ;
-<a name="l00367"></a>00367     pbig_fwhms = cpl_vector_get_data(big_fwhms) ;
-<a name="l00368"></a>00368     pbig_area = cpl_vector_get_data(big_area) ;
-<a name="l00369"></a>00369     
-<a name="l00370"></a>00370     pspec_convolved = cpl_vector_get_data(spec_convolved) ;
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372     <span class="comment">/* To avoid detection on the side */</span>
-<a name="l00373"></a>00373     pspec_convolved[0] = pspec_convolved[nb_samples-1] = 0.0 ;
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     <span class="comment">/* Compute stats */</span>
-<a name="l00376"></a>00376     max     =   cpl_vector_get_max(spec_convolved) ;
-<a name="l00377"></a>00377     stdev   =   cpl_vector_get_stdev(spec_convolved) ;
-<a name="l00378"></a>00378     med     =   cpl_vector_get_median_const(spec_convolved) ;
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380     <span class="comment">/* Loop on the detected lines */</span>
-<a name="l00381"></a>00381     nb_det = 0 ;
-<a name="l00382"></a>00382     <span class="keywordflow">while</span> (max > med + stdev * sigma) {
-<a name="l00383"></a>00383         <span class="comment">/* Compute the position */</span>
-<a name="l00384"></a>00384         i=0 ;
-<a name="l00385"></a>00385         <span class="keywordflow">while</span> (pspec_convolved[i] < max) i++ ;
-<a name="l00386"></a>00386         <span class="keywordflow">if</span> (i<=0 || i>=nb_samples-1) break ;
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388         <span class="comment">/* Extract the line */</span>
-<a name="l00389"></a>00389         <span class="keywordflow">if</span> (i - hwidth >= 0)                start = i - hwidth ;
-<a name="l00390"></a>00390         <span class="keywordflow">else</span>                                start = 0 ;
-<a name="l00391"></a>00391         <span class="keywordflow">if</span> (i + hwidth <= nb_samples-1)     stop = i + hwidth ;
-<a name="l00392"></a>00392         <span class="keywordflow">else</span>                                stop = nb_samples-1 ;
-<a name="l00393"></a>00393         extract = cpl_vector_extract(spec_clean, start, stop, 1) ;
-<a name="l00394"></a>00394         extract_x = cpl_vector_duplicate(extract) ;
-<a name="l00395"></a>00395         <span class="keywordflow">for</span> (j=0 ; j<cpl_vector_get_size(extract_x) ; j++) {
-<a name="l00396"></a>00396             cpl_vector_set(extract_x, j, (<span class="keywordtype">double</span>)j+1) ;
-<a name="l00397"></a>00397         }
-<a name="l00398"></a>00398         <span class="comment">/* Fit the gaussian */</span>
-<a name="l00399"></a>00399         <span class="keywordflow">if</span> (cpl_vector_fit_gaussian(extract_x, NULL, extract, NULL, 
-<a name="l00400"></a>00400                     CPL_FIT_ALL, &x0, &sig, &norm, &offset, NULL, NULL, 
-<a name="l00401"></a>00401                     NULL) != CPL_ERROR_NONE) {
-<a name="l00402"></a>00402             cpl_msg_warning(__func__, 
-<a name="l00403"></a>00403                     <span class="stringliteral">"Cannot fit a gaussian at [%d, %d]"</span>,
-<a name="l00404"></a>00404                     start, stop) ;
-<a name="l00405"></a>00405             cpl_error_reset() ;
-<a name="l00406"></a>00406         } <span class="keywordflow">else</span> {
-<a name="l00407"></a>00407             pbig_detected[nb_det] = x0+start ;
-<a name="l00408"></a>00408             pbig_area[nb_det] = norm ;
-<a name="l00409"></a>00409             pbig_fwhms[nb_det] = 2*sig*sqrt(2*log(2)) ;
-<a name="l00410"></a>00410             cpl_msg_debug(__func__, <span class="stringliteral">"Line nb %d at position %g"</span>,
-<a name="l00411"></a>00411                     nb_det+1, pbig_detected[nb_det]) ;
-<a name="l00412"></a>00412             nb_det ++ ;
-<a name="l00413"></a>00413         }
-<a name="l00414"></a>00414         cpl_vector_delete(extract) ;
-<a name="l00415"></a>00415         cpl_vector_delete(extract_x) ;
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417         <span class="comment">/* Cancel out the line on the left */</span>
-<a name="l00418"></a>00418         j = i-1 ;
-<a name="l00419"></a>00419         cur_val = pspec_convolved[i] ;
-<a name="l00420"></a>00420         <span class="keywordflow">while</span> (j>=0 && pspec_convolved[j] < cur_val) {
-<a name="l00421"></a>00421             cur_val = pspec_convolved[j] ;
-<a name="l00422"></a>00422             pspec_convolved[j] = 0.0 ;
-<a name="l00423"></a>00423             j-- ;
-<a name="l00424"></a>00424         }
-<a name="l00425"></a>00425         <span class="comment">/* Cancel out the line on the right */</span>
-<a name="l00426"></a>00426         j = i+1 ;
-<a name="l00427"></a>00427         cur_val = pspec_convolved[i] ;
-<a name="l00428"></a>00428         <span class="keywordflow">while</span> (j<=nb_samples-1 && pspec_convolved[j] < cur_val) {
-<a name="l00429"></a>00429             cur_val = pspec_convolved[j] ;
-<a name="l00430"></a>00430             pspec_convolved[j] = 0.0 ;
-<a name="l00431"></a>00431             j++ ;
-<a name="l00432"></a>00432         }
-<a name="l00433"></a>00433         <span class="comment">/* Cancel out the line on center */</span>
-<a name="l00434"></a>00434         pspec_convolved[i] = 0.0 ;
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436         <span class="comment">/* Recompute the stats */</span>
-<a name="l00437"></a>00437         max     =   cpl_vector_get_max(spec_convolved) ;
-<a name="l00438"></a>00438         stdev   =   cpl_vector_get_stdev(spec_convolved) ;
-<a name="l00439"></a>00439         med     =   cpl_vector_get_median_const(spec_convolved) ;
-<a name="l00440"></a>00440     }
-<a name="l00441"></a>00441     cpl_vector_delete(spec_convolved) ;
-<a name="l00442"></a>00442     cpl_vector_delete(spec_clean) ;
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444     <span class="comment">/* Create the output vector */</span>
-<a name="l00445"></a>00445     <span class="keywordflow">if</span> (nb_det == 0) {
-<a name="l00446"></a>00446         detected = NULL ;
-<a name="l00447"></a>00447         area = NULL ;
-<a name="l00448"></a>00448         fwhms = NULL ;
-<a name="l00449"></a>00449     } <span class="keywordflow">else</span> {
-<a name="l00450"></a>00450         detected = cpl_vector_new(nb_det) ;
-<a name="l00451"></a>00451         area = cpl_vector_new(nb_det) ;
-<a name="l00452"></a>00452         fwhms = cpl_vector_new(nb_det) ;
-<a name="l00453"></a>00453         pdetected = cpl_vector_get_data(detected) ;
-<a name="l00454"></a>00454         parea = cpl_vector_get_data(area) ;
-<a name="l00455"></a>00455         pfwhms = cpl_vector_get_data(fwhms) ;
-<a name="l00456"></a>00456         <span class="keywordflow">for</span> (i=0 ; i<nb_det ; i++) {
-<a name="l00457"></a>00457             pdetected[i] = pbig_detected[i] ;
-<a name="l00458"></a>00458             parea[i] = pbig_area[i] ;
-<a name="l00459"></a>00459             pfwhms[i] = pbig_fwhms[i] ;
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462     cpl_vector_delete(big_detected) ;
-<a name="l00463"></a>00463     cpl_vector_delete(big_area) ;
-<a name="l00464"></a>00464     cpl_vector_delete(big_fwhms) ;
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466     <span class="comment">/* Return  */</span>
-<a name="l00467"></a>00467     <span class="keywordflow">if</span> (fwhms_out == NULL)  cpl_vector_delete(fwhms) ;
-<a name="l00468"></a>00468     <span class="keywordflow">else</span>                    *fwhms_out = fwhms ;
-<a name="l00469"></a>00469     <span class="keywordflow">if</span> (areas_out == NULL)  cpl_vector_delete(area) ;
-<a name="l00470"></a>00470     <span class="keywordflow">else</span>                    *areas_out = area ;
-<a name="l00471"></a>00471     <span class="keywordflow">return</span> detected ;
-<a name="l00472"></a>00472 }
-<a name="l00473"></a>00473 
-<a name="l00476"></a>00476 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00488"></a>00488 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00489"></a>00489 <span class="keyword">static</span> <span class="keywordtype">int</span> select_valid_spectra(
-<a name="l00490"></a>00490         cpl_image       *   in,
-<a name="l00491"></a>00491         cpl_apertures   *   aperts,
-<a name="l00492"></a>00492         <span class="keywordtype">int</span>                 offset,
-<a name="l00493"></a>00493         spec_shadows        shadows,
-<a name="l00494"></a>00494         <span class="keywordtype">int</span>                 max_spec_width,
-<a name="l00495"></a>00495         <span class="keywordtype">int</span>             *   n_valid_specs,
-<a name="l00496"></a>00496         <span class="keywordtype">int</span>             **  valid_specs)
-<a name="l00497"></a>00497 {
-<a name="l00498"></a>00498     <span class="keywordtype">int</span>                 nb_aperts ;
-<a name="l00499"></a>00499     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     <span class="comment">/* Initialise */</span>
-<a name="l00502"></a>00502     *valid_specs = NULL ;
-<a name="l00503"></a>00503     nb_aperts = cpl_apertures_get_size(aperts) ;
-<a name="l00504"></a>00504     *n_valid_specs = 0 ;
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506     <span class="comment">/* Test entries */</span>
-<a name="l00507"></a>00507     <span class="keywordflow">if</span> (nb_aperts < 1) <span class="keywordflow">return</span> -1 ;
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509     <span class="comment">/* Count nb of valid specs */</span>
-<a name="l00510"></a>00510     j = 0 ;
-<a name="l00511"></a>00511     <span class="keywordflow">for</span> (i=0 ; i<nb_aperts ; i++)
-<a name="l00512"></a>00512         <span class="keywordflow">if</span> (valid_spectrum(in, aperts, offset, shadows, max_spec_width,
-<a name="l00513"></a>00513                     i+1)) (*n_valid_specs)++ ;
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515     <span class="comment">/* Associate to each spectrum, its object number */</span>
-<a name="l00516"></a>00516     <span class="keywordflow">if</span> (*n_valid_specs) {
-<a name="l00517"></a>00517         *valid_specs = cpl_calloc(*n_valid_specs, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l00518"></a>00518         j = 0 ;
-<a name="l00519"></a>00519         <span class="keywordflow">for</span> (i=0 ; i<nb_aperts ; i++)
-<a name="l00520"></a>00520             <span class="keywordflow">if</span> (valid_spectrum(in, aperts, offset, shadows, max_spec_width,
-<a name="l00521"></a>00521                         i+1)) {
-<a name="l00522"></a>00522                 (*valid_specs)[j] = i ;
-<a name="l00523"></a>00523                 j++ ;
-<a name="l00524"></a>00524             }
-<a name="l00525"></a>00525     } <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527     <span class="keywordflow">return</span> 0 ;
-<a name="l00528"></a>00528 }
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00541"></a>00541 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00542"></a>00542 <span class="keyword">static</span> <span class="keywordtype">int</span> valid_spectrum(
-<a name="l00543"></a>00543         cpl_image       *   in,
-<a name="l00544"></a>00544         cpl_apertures   *   aperts,
-<a name="l00545"></a>00545         <span class="keywordtype">int</span>                 offset,
-<a name="l00546"></a>00546         spec_shadows        shadows,
-<a name="l00547"></a>00547         <span class="keywordtype">int</span>                 max_spec_width,
-<a name="l00548"></a>00548         <span class="keywordtype">int</span>                 objnum)
-<a name="l00549"></a>00549 {
-<a name="l00550"></a>00550     <span class="keywordtype">int</span>                 objwidth ;
-<a name="l00551"></a>00551     <span class="keywordtype">double</span>              valover, valunder, valcenter ;
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553     <span class="comment">/* Find objwidth */</span>
-<a name="l00554"></a>00554     objwidth = cpl_apertures_get_top(aperts, objnum) -
-<a name="l00555"></a>00555         cpl_apertures_get_bottom(aperts, objnum) + 1 ;
-<a name="l00556"></a>00556     <span class="keywordflow">if</span> (objwidth > max_spec_width) {
-<a name="l00557"></a>00557         cpl_msg_error(cpl_func, <span class="stringliteral">"object is too wide"</span>) ;
-<a name="l00558"></a>00558         <span class="keywordflow">return</span> 0 ;
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561     <span class="comment">/* Object is too small */</span>
-<a name="l00562"></a>00562     <span class="keywordflow">if</span> (cpl_apertures_get_npix(aperts, objnum) < 2) <span class="keywordflow">return</span> 0 ;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564     <span class="comment">/* no shadow required */</span>
-<a name="l00565"></a>00565     <span class="keywordflow">if</span> (shadows == NO_SHADOW) <span class="keywordflow">return</span> 1 ;
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567     <span class="comment">/* Get the median of the object (valcenter) */</span>
-<a name="l00568"></a>00568     valcenter = cpl_apertures_get_median(aperts, objnum) ;
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570     <span class="comment">/* Get the black shadows medians (valunder and valover) */</span>
-<a name="l00571"></a>00571     <span class="keywordflow">if</span> (cpl_apertures_get_bottom(aperts, objnum) - offset < 1) valunder = 0.0 ;
-<a name="l00572"></a>00572     <span class="keywordflow">else</span> valunder = cpl_image_get_median_window(in, 1,
-<a name="l00573"></a>00573             cpl_apertures_get_bottom(aperts, objnum) - offset, 1, 
-<a name="l00574"></a>00574             cpl_apertures_get_top(aperts, objnum) - offset) ;
-<a name="l00575"></a>00575     
-<a name="l00576"></a>00576     <span class="keywordflow">if</span> (cpl_apertures_get_top(aperts, objnum) + offset > 1024) valover = 0.0 ;
-<a name="l00577"></a>00577     <span class="keywordflow">else</span> valover = cpl_image_get_median_window(in, 1,
-<a name="l00578"></a>00578             cpl_apertures_get_bottom(aperts, objnum) + offset, 1, 
-<a name="l00579"></a>00579             cpl_apertures_get_top(aperts, objnum) + offset) ;
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581     <span class="keywordflow">switch</span> (shadows) {
-<a name="l00582"></a>00582         <span class="keywordflow">case</span> TWO_SHADOWS:
-<a name="l00583"></a>00583         <span class="keywordflow">if</span> ((valunder < -fabs(valcenter/SPEC_SHADOW_FACT)) &&
-<a name="l00584"></a>00584             (valover < -fabs(valcenter/SPEC_SHADOW_FACT))    &&
-<a name="l00585"></a>00585             (valunder/valover > 0.5) &&
-<a name="l00586"></a>00586             (valunder/valover < 2.0)) <span class="keywordflow">return</span> 1 ;
-<a name="l00587"></a>00587         <span class="keywordflow">break</span>;
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589         <span class="keywordflow">case</span> ONE_SHADOW:
-<a name="l00590"></a>00590         <span class="keywordflow">if</span> ((valunder < -fabs(valcenter/SPEC_SHADOW_FACT)) ||
-<a name="l00591"></a>00591             (valover < -fabs(valcenter/SPEC_SHADOW_FACT))) <span class="keywordflow">return</span> 1 ;
-<a name="l00592"></a>00592         <span class="keywordflow">break</span>;
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594         <span class="keywordflow">case</span> NO_SHADOW:
-<a name="l00595"></a>00595         <span class="keywordflow">return</span> 1 ;
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597         <span class="keywordflow">default</span>:
-<a name="l00598"></a>00598         cpl_msg_error(cpl_func, <span class="stringliteral">"unknown spec_detect_mode"</span>) ;
-<a name="l00599"></a>00599         break ;
-<a name="l00600"></a>00600     }
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602     cpl_msg_debug(cpl_func, <span class="stringliteral">"No spectrum(%d): under=%g, center=%g, over=%g"</span>,
-<a name="l00603"></a>00603                   shadows, valunder, valcenter, valover);
-<a name="l00604"></a>00604 
-<a name="l00605"></a>00605     <span class="keywordflow">return</span> 0 ;
-<a name="l00606"></a>00606 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_spectrum.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_spectrum.c,v 1.29 2012/01/12 11:50:41 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/01/12 11:50:41 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.29 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "irplib_wlxcorr.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_spectrum.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define SPECTRUM_HW                     16</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define MIN_THRESH_FACT                 0.9</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX_THRESH_FACT                 1.1</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define SPEC_SHADOW_FACT                30.0 </span><span class="comment">/* Negative spectrum intensity*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define SPEC_MAXWIDTH                   48</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keywordtype">int</span> select_valid_spectra(cpl_image *, cpl_apertures *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         spec_shadows, <span class="keywordtype">int</span>, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> **) ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">int</span> valid_spectrum(cpl_image *, cpl_apertures *, <span class="keywordtype">int</span>, spec_shadows, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0">   93</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0" title="Finds the brightest spectrum in an image.">irplib_spectrum_find_brightest</a>(</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keyword">const</span> cpl_image     *   in,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordtype">int</span>                     offset,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         spec_shadows            shadows,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">double</span>                  min_bright,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordtype">int</span>                     orient,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordtype">double</span>              *   pos)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     cpl_image       *   loc_ima ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     cpl_image       *   filt_image ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     cpl_image       *   collapsed ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordtype">float</span>           *   pcollapsed ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_vector      *   line ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordtype">double</span>          *   pline ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_vector      *   line_filt ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordtype">double</span>              threshold ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordtype">double</span>              median, stdev, max, mean ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     cpl_mask        *   mask ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     cpl_image       *   labels ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     cpl_size            nlabels ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     cpl_apertures   *   aperts ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">int</span>                 n_valid_specs ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">int</span>             *   valid_specs ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">double</span>              brightness ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">if</span> (orient!=0 && orient!=1) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">/* Flip the image if necessary */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span> (orient == 1) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         loc_ima = cpl_image_duplicate(in) ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         cpl_image_flip(loc_ima, 1) ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         loc_ima = cpl_image_duplicate(in) ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="comment">/* Median vertical filtering 3x3 */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     mask = cpl_mask_new(3, 3) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_mask_not(mask) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     filt_image = cpl_image_new(</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             cpl_image_get_size_x(loc_ima),</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>             cpl_image_get_size_y(loc_ima),</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>             cpl_image_get_type(loc_ima)) ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">if</span> (cpl_image_filter_mask(filt_image, loc_ima, mask,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                 CPL_FILTER_MEDIAN, CPL_BORDER_FILTER) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot filter the image"</span>) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         cpl_mask_delete(mask) ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         cpl_image_delete(filt_image) ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_mask_delete(mask) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_image_delete(loc_ima) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="comment">/* Collapse the image */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordflow">if</span> ((collapsed = cpl_image_collapse_median_create(filt_image, 1, 0,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                     0)) == NULL) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"collapsing image: aborting spectrum detection"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         cpl_image_delete(filt_image) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     cpl_image_delete(filt_image) ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="comment">/* Subtract low frequency signal */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     line = cpl_vector_new_from_image_column(collapsed, 1) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     line_filt = cpl_vector_filter_median_create(line, SPECTRUM_HW) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_vector_subtract(line, line_filt) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_vector_delete(line_filt) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="comment">/* Get relevant stats for thresholding */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     median = cpl_vector_get_median_const(line) ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     stdev = cpl_vector_get_stdev(line) ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     max = cpl_vector_get_max(line) ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     mean = cpl_vector_get_mean(line) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="comment">/* Set the threshold */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     threshold = median + stdev ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">if</span> (threshold > MIN_THRESH_FACT * max)  threshold = MIN_THRESH_FACT * max ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">if</span> (threshold < MAX_THRESH_FACT * mean) threshold = MAX_THRESH_FACT * mean;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="comment">/* Recreate the image */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     collapsed = cpl_image_new(1, cpl_vector_get_size(line), CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     pcollapsed = cpl_image_get_data_float(collapsed) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     pline = cpl_vector_get_data(line) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">for</span> (i=0 ; i<cpl_vector_get_size(line) ; i++)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         pcollapsed[i] = (<span class="keywordtype">float</span>)pline[i] ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_vector_delete(line) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">/* Binarise the image */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> ((mask = cpl_mask_threshold_image_create(collapsed, threshold,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>             DBL_MAX)) == NULL) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot binarise"</span>) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">if</span> (cpl_mask_count(mask) < 1) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"not enough signal to detect spectra"</span>) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         cpl_mask_delete(mask) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Labelise the different detected apertures */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">if</span> ((labels = cpl_image_labelise_mask_create(mask, &nlabels))==NULL) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot labelise"</span>) ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         cpl_mask_delete(mask) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     cpl_mask_delete(mask) ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* Create the detected apertures list */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">if</span> ((aperts = cpl_apertures_new_from_image(collapsed, labels)) == NULL) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot compute apertures"</span>) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         cpl_image_delete(labels) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_image_delete(labels) ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="comment">/* Select only relevant specs, create corresponding LUT's */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">if</span> (select_valid_spectra(collapsed, aperts, offset, shadows, SPEC_MAXWIDTH,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                 &n_valid_specs, &valid_specs) == -1) {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         cpl_msg_debug(cpl_func, </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                 <span class="stringliteral">"Could not select valid spectra from the %"</span>CPL_SIZE_FORMAT</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                 <span class="stringliteral">" apertures in %"</span>CPL_SIZE_FORMAT<span class="stringliteral">"-col 1D-image, offset=%d"</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                 <span class="stringliteral">", min_bright=%d"</span>,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                       cpl_apertures_get_size(aperts),</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                       cpl_image_get_size_y(collapsed), offset, SPEC_MAXWIDTH);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="keywordflow">if</span> (cpl_msg_get_level() <= CPL_MSG_DEBUG)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>             cpl_apertures_dump(aperts, stderr);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         cpl_image_delete(collapsed);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         cpl_apertures_delete(aperts);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">if</span> (n_valid_specs < 1) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"no valid spectrum detected"</span>) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         cpl_free(valid_specs) ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         cpl_apertures_delete(aperts) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="comment">/* Look for the brightest, among the detected spectra */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     *pos = cpl_apertures_get_centroid_y(aperts, valid_specs[0]+1) ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     brightness = cpl_apertures_get_flux(aperts, valid_specs[0]+1) ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">for</span> (i=0 ; i<n_valid_specs ; i++) {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         <span class="keywordflow">if</span> (cpl_apertures_get_flux(aperts, valid_specs[i]+1) > brightness) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>             *pos = cpl_apertures_get_centroid_y(aperts, valid_specs[i]+1) ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>             brightness = cpl_apertures_get_flux(aperts, valid_specs[i]+1) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_apertures_delete(aperts) ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     cpl_free(valid_specs) ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">/* Minimum brightness required */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">if</span> (brightness < min_bright) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"brightness %f too low <%f"</span>, brightness,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                 min_bright) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno"><a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961">  273</a></span> cpl_vector * <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         <span class="keyword">const</span> cpl_vector    *   in,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         <span class="keywordtype">int</span>                     fwhm,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         <span class="keywordtype">double</span>                  sigma,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         <span class="keywordtype">int</span>                     display,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         cpl_vector          **  fwhms_out,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         cpl_vector          **  areas_out)</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     cpl_vector      *   filtered ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     cpl_vector      *   spec_clean ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     cpl_vector      *   spec_convolved ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordtype">double</span>          *   pspec_convolved ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordtype">int</span>                 filt_size ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_vector      *   conv_kernel ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_vector      *   extract ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     cpl_vector      *   extract_x ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     cpl_vector      *   big_detected ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     cpl_vector      *   big_fwhms ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     cpl_vector      *   big_area ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordtype">double</span>          *   pbig_detected ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keywordtype">double</span>          *   pbig_fwhms ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="keywordtype">double</span>          *   pbig_area ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_vector      *   detected ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordtype">double</span>          *   pdetected ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     cpl_vector      *   fwhms ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordtype">double</span>          *   pfwhms ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     cpl_vector      *   area ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">double</span>          *   parea ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordtype">double</span>              max, med, stdev, cur_val ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordtype">double</span>              x0, sig, norm, offset ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordtype">int</span>                 nb_det, nb_samples, hwidth, start, stop ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     nb_samples = cpl_vector_get_size(in) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     filt_size = 5 ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     hwidth = 5 ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="comment">/* Subtract the low frequency part */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     cpl_msg_info(__func__, <span class="stringliteral">"Low Frequency signal removal"</span>) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">if</span> ((filtered=cpl_vector_filter_median_create(in, filt_size))==NULL){</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot filter the spectrum"</span>) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     spec_clean = cpl_vector_duplicate(in) ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     cpl_vector_subtract(spec_clean, filtered) ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     cpl_vector_delete(filtered) ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">/* Display if requested */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="keywordflow">if</span> (display) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         cpl_plot_vector(</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Intensity (ADU)';"</span>,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         <span class="stringliteral">"t 'Filtered extracted spectrum' w lines"</span>, <span class="stringliteral">""</span>, spec_clean);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="comment">/* Convolve */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     spec_convolved = cpl_vector_duplicate(spec_clean) ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordflow">if</span> (fwhm > 0) {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         cpl_msg_info(__func__, <span class="stringliteral">"Spectrum convolution"</span>) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="comment">/* Create convolution kernel */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>         <span class="keywordflow">if</span> ((conv_kernel = irplib_wlxcorr_convolve_create_kernel(fwhm,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                         fwhm)) == NULL) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot create convolution kernel"</span>) ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>             cpl_vector_delete(spec_clean) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>             cpl_vector_delete(spec_convolved) ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="comment">/* Smooth the instrument resolution */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         <span class="keywordflow">if</span> (irplib_wlxcorr_convolve(spec_convolved, conv_kernel)) {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot smoothe the signal"</span>);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>             cpl_vector_delete(spec_clean) ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>             cpl_vector_delete(spec_convolved) ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>             cpl_vector_delete(conv_kernel) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         cpl_vector_delete(conv_kernel) ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="comment">/* Display if requested */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         <span class="keywordflow">if</span> (display) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             cpl_plot_vector(</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Intensity (ADU)';"</span>,</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>             <span class="stringliteral">"t 'Convolved extracted spectrum' w lines"</span>, <span class="stringliteral">""</span>, spec_convolved);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="comment">/* Apply the detection */</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     big_detected = cpl_vector_duplicate(spec_convolved) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     big_fwhms = cpl_vector_duplicate(spec_convolved) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     big_area = cpl_vector_duplicate(spec_convolved) ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     pbig_detected = cpl_vector_get_data(big_detected) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     pbig_fwhms = cpl_vector_get_data(big_fwhms) ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     pbig_area = cpl_vector_get_data(big_area) ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     pspec_convolved = cpl_vector_get_data(spec_convolved) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="comment">/* To avoid detection on the side */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     pspec_convolved[0] = pspec_convolved[nb_samples-1] = 0.0 ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* Compute stats */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     max     =   cpl_vector_get_max(spec_convolved) ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     stdev   =   cpl_vector_get_stdev(spec_convolved) ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     med     =   cpl_vector_get_median_const(spec_convolved) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="comment">/* Loop on the detected lines */</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     nb_det = 0 ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     <span class="keywordflow">while</span> (max > med + stdev * sigma) {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         <span class="comment">/* Compute the position */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         i=0 ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         <span class="keywordflow">while</span> (pspec_convolved[i] < max) i++ ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         <span class="keywordflow">if</span> (i<=0 || i>=nb_samples-1) break ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>         <span class="comment">/* Extract the line */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         <span class="keywordflow">if</span> (i - hwidth >= 0)                start = i - hwidth ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         <span class="keywordflow">else</span>                                start = 0 ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keywordflow">if</span> (i + hwidth <= nb_samples-1)     stop = i + hwidth ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <span class="keywordflow">else</span>                                stop = nb_samples-1 ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         extract = cpl_vector_extract(spec_clean, start, stop, 1) ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         extract_x = cpl_vector_duplicate(extract) ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">for</span> (j=0 ; j<cpl_vector_get_size(extract_x) ; j++) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>             cpl_vector_set(extract_x, j, (<span class="keywordtype">double</span>)j+1) ;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         }</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         <span class="comment">/* Fit the gaussian */</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">if</span> (cpl_vector_fit_gaussian(extract_x, NULL, extract, NULL, </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                     CPL_FIT_ALL, &x0, &sig, &norm, &offset, NULL, NULL, </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                     NULL) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             cpl_msg_warning(__func__, </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                     <span class="stringliteral">"Cannot fit a gaussian at [%d, %d]"</span>,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                     start, stop) ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>             cpl_error_reset() ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             pbig_detected[nb_det] = x0+start ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             pbig_area[nb_det] = norm ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>             pbig_fwhms[nb_det] = 2*sig*sqrt(2*log(2)) ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>             cpl_msg_debug(__func__, <span class="stringliteral">"Line nb %d at position %g"</span>,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                     nb_det+1, pbig_detected[nb_det]) ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>             nb_det ++ ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         cpl_vector_delete(extract) ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         cpl_vector_delete(extract_x) ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="comment">/* Cancel out the line on the left */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         j = i-1 ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         cur_val = pspec_convolved[i] ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         <span class="keywordflow">while</span> (j>=0 && pspec_convolved[j] < cur_val) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>             cur_val = pspec_convolved[j] ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>             pspec_convolved[j] = 0.0 ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>             j-- ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         <span class="comment">/* Cancel out the line on the right */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         j = i+1 ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         cur_val = pspec_convolved[i] ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <span class="keywordflow">while</span> (j<=nb_samples-1 && pspec_convolved[j] < cur_val) {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>             cur_val = pspec_convolved[j] ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             pspec_convolved[j] = 0.0 ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             j++ ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         <span class="comment">/* Cancel out the line on center */</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         pspec_convolved[i] = 0.0 ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         <span class="comment">/* Recompute the stats */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         max     =   cpl_vector_get_max(spec_convolved) ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         stdev   =   cpl_vector_get_stdev(spec_convolved) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>         med     =   cpl_vector_get_median_const(spec_convolved) ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_vector_delete(spec_convolved) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     cpl_vector_delete(spec_clean) ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="comment">/* Create the output vector */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">if</span> (nb_det == 0) {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         detected = NULL ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         area = NULL ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>         fwhms = NULL ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         detected = cpl_vector_new(nb_det) ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         area = cpl_vector_new(nb_det) ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         fwhms = cpl_vector_new(nb_det) ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         pdetected = cpl_vector_get_data(detected) ;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         parea = cpl_vector_get_data(area) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         pfwhms = cpl_vector_get_data(fwhms) ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="keywordflow">for</span> (i=0 ; i<nb_det ; i++) {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             pdetected[i] = pbig_detected[i] ;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             parea[i] = pbig_area[i] ;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             pfwhms[i] = pbig_fwhms[i] ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     cpl_vector_delete(big_detected) ;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     cpl_vector_delete(big_area) ;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     cpl_vector_delete(big_fwhms) ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     <span class="keywordflow">if</span> (fwhms_out == NULL)  cpl_vector_delete(fwhms) ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     <span class="keywordflow">else</span>                    *fwhms_out = fwhms ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     <span class="keywordflow">if</span> (areas_out == NULL)  cpl_vector_delete(area) ;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     <span class="keywordflow">else</span>                    *areas_out = area ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="keywordflow">return</span> detected ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="keyword">static</span> <span class="keywordtype">int</span> select_valid_spectra(</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         cpl_image       *   in,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         cpl_apertures   *   aperts,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         <span class="keywordtype">int</span>                 offset,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         spec_shadows        shadows,</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         <span class="keywordtype">int</span>                 max_spec_width,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         <span class="keywordtype">int</span>             *   n_valid_specs,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         <span class="keywordtype">int</span>             **  valid_specs)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordtype">int</span>                 nb_aperts ;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     *valid_specs = NULL ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     nb_aperts = cpl_apertures_get_size(aperts) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     *n_valid_specs = 0 ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordflow">if</span> (nb_aperts < 1) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="comment">/* Count nb of valid specs */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     j = 0 ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     <span class="keywordflow">for</span> (i=0 ; i<nb_aperts ; i++)</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         <span class="keywordflow">if</span> (valid_spectrum(in, aperts, offset, shadows, max_spec_width,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                     i+1)) (*n_valid_specs)++ ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <span class="comment">/* Associate to each spectrum, its object number */</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="keywordflow">if</span> (*n_valid_specs) {</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         *valid_specs = cpl_calloc(*n_valid_specs, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>         j = 0 ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>         <span class="keywordflow">for</span> (i=0 ; i<nb_aperts ; i++)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>             <span class="keywordflow">if</span> (valid_spectrum(in, aperts, offset, shadows, max_spec_width,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                         i+1)) {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                 (*valid_specs)[j] = i ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>                 j++ ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     } <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="keyword">static</span> <span class="keywordtype">int</span> valid_spectrum(</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         cpl_image       *   in,</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         cpl_apertures   *   aperts,</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         <span class="keywordtype">int</span>                 offset,</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         spec_shadows        shadows,</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         <span class="keywordtype">int</span>                 max_spec_width,</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         <span class="keywordtype">int</span>                 objnum)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <span class="keywordtype">int</span>                 objwidth ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="keywordtype">double</span>              valover, valunder, valcenter ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="comment">/* Find objwidth */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     objwidth = cpl_apertures_get_top(aperts, objnum) -</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         cpl_apertures_get_bottom(aperts, objnum) + 1 ;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">if</span> (objwidth > max_spec_width) {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"object is too wide"</span>) ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="comment">/* Object is too small */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="keywordflow">if</span> (cpl_apertures_get_npix(aperts, objnum) < 2) <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="comment">/* no shadow required */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordflow">if</span> (shadows == NO_SHADOW) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="comment">/* Get the median of the object (valcenter) */</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     valcenter = cpl_apertures_get_median(aperts, objnum) ;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="comment">/* Get the black shadows medians (valunder and valover) */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordflow">if</span> (cpl_apertures_get_bottom(aperts, objnum) - offset < 1) valunder = 0.0 ;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     <span class="keywordflow">else</span> valunder = cpl_image_get_median_window(in, 1,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>             cpl_apertures_get_bottom(aperts, objnum) - offset, 1, </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             cpl_apertures_get_top(aperts, objnum) - offset) ;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordflow">if</span> (cpl_apertures_get_top(aperts, objnum) + offset > 1024) valover = 0.0 ;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <span class="keywordflow">else</span> valover = cpl_image_get_median_window(in, 1,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>             cpl_apertures_get_bottom(aperts, objnum) + offset, 1, </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             cpl_apertures_get_top(aperts, objnum) + offset) ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="keywordflow">switch</span> (shadows) {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         <span class="keywordflow">case</span> TWO_SHADOWS:</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         <span class="keywordflow">if</span> ((valunder < -fabs(valcenter/SPEC_SHADOW_FACT)) &&</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>             (valover < -fabs(valcenter/SPEC_SHADOW_FACT))    &&</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>             (valunder/valover > 0.5) &&</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>             (valunder/valover < 2.0)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         <span class="keywordflow">case</span> ONE_SHADOW:</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         <span class="keywordflow">if</span> ((valunder < -fabs(valcenter/SPEC_SHADOW_FACT)) ||</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>             (valover < -fabs(valcenter/SPEC_SHADOW_FACT))) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         <span class="keywordflow">case</span> NO_SHADOW:</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"unknown spec_detect_mode"</span>) ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         break ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"No spectrum(%d): under=%g, center=%g, over=%g"</span>,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                   shadows, valunder, valcenter, valover);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__spectrum_8h_source.html b/html/irplib__spectrum_8h_source.html
index 73051e0..21efc8b 100644
--- a/html/irplib__spectrum_8h_source.html
+++ b/html/irplib__spectrum_8h_source.html
@@ -2,74 +2,105 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_spectrum.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_spectrum.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_spectrum.h,v 1.7 2009/07/30 12:38:37 yjung Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: yjung $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/07/30 12:38:37 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_SPECTRUM_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SPECTRUM_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                New types</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">typedef</span> <span class="keyword">enum</span> SPEC_SHADOWS {
-<a name="l00042"></a>00042     <span class="comment">/* 2 shadows above and below true spectrum */</span>
-<a name="l00043"></a>00043     TWO_SHADOWS,
-<a name="l00044"></a>00044     <span class="comment">/* 1 shadow at specified distance from spectrum */</span>
-<a name="l00045"></a>00045     ONE_SHADOW,
-<a name="l00046"></a>00046     <span class="comment">/* Do not search for shadow */</span>
-<a name="l00047"></a>00047     NO_SHADOW
-<a name="l00048"></a>00048 } spec_shadows ;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                Prototypes</span>
-<a name="l00052"></a>00052 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0" title="Finds the brightest spectrum in an image.">irplib_spectrum_find_brightest</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, spec_shadows, 
-<a name="l00055"></a>00055         <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *) ;
-<a name="l00056"></a>00056 cpl_vector * <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">int</span>,
-<a name="l00057"></a>00057         <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, cpl_vector **, cpl_vector **) ;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_spectrum.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_spectrum.h,v 1.7 2009/07/30 12:38:37 yjung Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: yjung $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/07/30 12:38:37 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_SPECTRUM_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_SPECTRUM_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> SPEC_SHADOWS {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     <span class="comment">/* 2 shadows above and below true spectrum */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     TWO_SHADOWS,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     <span class="comment">/* 1 shadow at specified distance from spectrum */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     ONE_SHADOW,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="comment">/* Do not search for shadow */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     NO_SHADOW</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> } spec_shadows ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                Prototypes</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__spectrum.html#ga9ac928ba9a48e864b56e921c970638c0" title="Finds the brightest spectrum in an image.">irplib_spectrum_find_brightest</a>(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">int</span>, spec_shadows, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> cpl_vector * <a class="code" href="group__irplib__spectrum.html#ga1885902c29d7383674c85e2c3d935961" title="Detect the brightest features in a spectrum.">irplib_spectrum_detect_peaks</a>(<span class="keyword">const</span> cpl_vector *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, cpl_vector **, cpl_vector **) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__stdstar_8c_source.html b/html/irplib__stdstar_8c_source.html
index e6036fa..5904958 100644
--- a/html/irplib__stdstar_8c_source.html
+++ b/html/irplib__stdstar_8c_source.html
@@ -2,729 +2,760 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_stdstar.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_stdstar.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_stdstar.c,v 1.45 2013/03/01 10:27:07 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/03/01 10:27:07 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.45 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "irplib_stdstar.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "irplib_wcs.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <math.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <float.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                                   Defines</span>
-<a name="l00047"></a>00047 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMESET_GET_CONST cpl_frameset_get_position_const</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="comment">/* Remove this branch once CPL versions less than 6.3 are no longer supported */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define IRPLIB_FRAMESET_GET_CONST cpl_frameset_get_frame_const</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">                                   Functions code</span>
-<a name="l00066"></a>00066 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 cpl_error_code
-<a name="l00089"></a><a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d">00089</a> <a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(cpl_frameset        *   set_in,
-<a name="l00090"></a>00090                               <span class="keyword">const</span> cpl_frameset  *   set_raw,
-<a name="l00091"></a>00091                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   recipe_name,
-<a name="l00092"></a>00092                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   pro_cat,
-<a name="l00093"></a>00093                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   pro_type,
-<a name="l00094"></a>00094                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   package_name,
-<a name="l00095"></a>00095                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   ins_name,
-<a name="l00096"></a>00096                               cpl_table * (*convert_ascii_table)(<span class="keyword">const</span> <span class="keywordtype">char</span> *))
-<a name="l00097"></a>00097 {
-<a name="l00098"></a>00098     <span class="comment">/* Number of catalogs */</span>
-<a name="l00099"></a>00099     <span class="keyword">const</span> cpl_size     nb_catalogs = cpl_frameset_get_size(set_raw);
-<a name="l00100"></a>00100     cpl_propertylist * plist_ext;
-<a name="l00101"></a>00101     <span class="keywordtype">char</span>             * out_name;
-<a name="l00102"></a>00102     cpl_error_code     error = CPL_ERROR_NONE;
-<a name="l00103"></a>00103     cpl_size           i;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     <span class="comment">/* Check entries */</span>
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (set_in == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00107"></a>00107     <span class="keywordflow">if</span> (set_raw == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00108"></a>00108     <span class="keywordflow">if</span> (recipe_name == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00109"></a>00109     <span class="keywordflow">if</span> (pro_cat == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00110"></a>00110     <span class="keywordflow">if</span> (ins_name == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00111"></a>00111     <span class="keywordflow">if</span> (convert_ascii_table == NULL) <span class="keywordflow">return</span>
-<a name="l00112"></a>00112         cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114     <span class="comment">/* Define the file name */</span>
-<a name="l00115"></a>00115     out_name = cpl_sprintf(<span class="stringliteral">"%s"</span> CPL_DFS_FITS, recipe_name);
-<a name="l00116"></a>00116     
-<a name="l00117"></a>00117     plist_ext = cpl_propertylist_new();
-<a name="l00118"></a>00118     
-<a name="l00119"></a>00119     <span class="comment">/* Process the catalogs */</span>
-<a name="l00120"></a>00120     <span class="keywordflow">for</span> (i = 0; i < nb_catalogs; i++) {
-<a name="l00121"></a>00121         <span class="comment">/* Get the catalog name */</span>
-<a name="l00122"></a>00122         <span class="keyword">const</span> cpl_frame * cur_frame = IRPLIB_FRAMESET_GET_CONST(set_raw, i);
-<a name="l00123"></a>00123         <span class="keyword">const</span> <span class="keywordtype">char</span>      * cat_name = cpl_frame_get_filename(cur_frame);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125         cpl_table       * out = convert_ascii_table(cat_name);
-<a name="l00126"></a>00126      
-<a name="l00127"></a>00127         <span class="comment">/* Create the output table */</span>
-<a name="l00128"></a>00128         <span class="keywordflow">if</span> (out == NULL) {
-<a name="l00129"></a>00129             error = cpl_error_get_code() ? cpl_error_set_where(cpl_func)
-<a name="l00130"></a>00130                 : cpl_error_set(cpl_func, CPL_ERROR_UNSPECIFIED);
-<a name="l00131"></a>00131             <span class="keywordflow">break</span>;
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134         <span class="keywordflow">if</span> (cpl_table_get_nrow(out) == 0) {
-<a name="l00135"></a>00135             cpl_table_delete(out);
-<a name="l00136"></a>00136             error = cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l00137"></a>00137                                           <span class="stringliteral">"Empty catalogue %d in '%s'"</span>,
-<a name="l00138"></a>00138                                           (<span class="keywordtype">int</span>)i+1, cat_name);
-<a name="l00139"></a>00139             <span class="keywordflow">break</span>;
-<a name="l00140"></a>00140         }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142         cpl_propertylist_update_string(plist_ext, <span class="stringliteral">"EXTNAME"</span>, cat_name);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144         <span class="comment">/* Write the table */</span>
-<a name="l00145"></a>00145         <span class="keywordflow">if</span> (i == 0) {
-<a name="l00146"></a>00146             cpl_parameterlist * parlist = cpl_parameterlist_new();
-<a name="l00147"></a>00147             cpl_propertylist  * plist   = cpl_propertylist_new();
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149             <span class="comment">/* Mandatory keywords */</span>
-<a name="l00150"></a>00150             cpl_propertylist_append_string(plist, <span class="stringliteral">"INSTRUME"</span>, ins_name);
-<a name="l00151"></a>00151             cpl_propertylist_append_string(plist, CPL_DFS_PRO_CATG, pro_cat);
-<a name="l00152"></a>00152             <span class="keywordflow">if</span> (pro_type != NULL) {
-<a name="l00153"></a>00153                 cpl_propertylist_append_string(plist, CPL_DFS_PRO_TYPE,
-<a name="l00154"></a>00154                                                pro_type);
-<a name="l00155"></a>00155             }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157             error = cpl_dfs_save_table(set_in, NULL, parlist, set_raw, NULL,
-<a name="l00158"></a>00158                                        out, plist_ext, recipe_name, plist,
-<a name="l00159"></a>00159                                        NULL, package_name, out_name);
-<a name="l00160"></a>00160             cpl_parameterlist_delete(parlist);
-<a name="l00161"></a>00161             cpl_propertylist_delete(plist);
-<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163             error = cpl_table_save(out, NULL, plist_ext, out_name,
-<a name="l00164"></a>00164                                    CPL_IO_EXTEND);
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167         cpl_table_delete(out);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169         <span class="keywordflow">if</span> (error) {
-<a name="l00170"></a>00170             (void)cpl_error_set_where(cpl_func);
-<a name="l00171"></a>00171             <span class="keywordflow">break</span>;
-<a name="l00172"></a>00172         }
-<a name="l00173"></a>00173     }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     cpl_propertylist_delete(plist_ext);
-<a name="l00176"></a>00176     cpl_free(out_name);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="keywordflow">return</span> error;
-<a name="l00179"></a>00179 }
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00194"></a>00194 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00195"></a><a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1">00195</a> cpl_table * <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(
-<a name="l00196"></a>00196         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filename, 
-<a name="l00197"></a>00197         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   ext_name)
-<a name="l00198"></a>00198 {
-<a name="l00199"></a>00199     <span class="keywordtype">int</span>                     next;
-<a name="l00200"></a>00200     cpl_propertylist    *   plist;
-<a name="l00201"></a>00201     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   cur_name;
-<a name="l00202"></a>00202     cpl_table           *   out;
-<a name="l00203"></a>00203     cpl_table           *   out_cur;
-<a name="l00204"></a>00204     cpl_frame           *   cur_frame;
-<a name="l00205"></a>00205     <span class="keywordtype">int</span>                     i;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     <span class="comment">/* Check entries */</span>
-<a name="l00208"></a>00208     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00209"></a>00209     <span class="keywordflow">if</span> (ext_name == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00210"></a>00210     
-<a name="l00211"></a>00211     <span class="comment">/* Initialise */</span>
-<a name="l00212"></a>00212     out = NULL;
-<a name="l00213"></a>00213     
-<a name="l00214"></a>00214     <span class="comment">/* Get the number of extensions in the catalog */</span>
-<a name="l00215"></a>00215     cur_frame = cpl_frame_new();
-<a name="l00216"></a>00216     cpl_frame_set_filename(cur_frame, filename);
-<a name="l00217"></a>00217     next = cpl_frame_get_nextensions(cur_frame);
-<a name="l00218"></a>00218     cpl_frame_delete(cur_frame);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="comment">/* Loop on the extentions */</span>
-<a name="l00221"></a>00221     <span class="keywordflow">for</span> (i=0; i<next; i++) {
-<a name="l00222"></a>00222         <span class="comment">/* Check the name of the current extension */</span>
-<a name="l00223"></a>00223         <span class="keywordflow">if</span> ((plist = cpl_propertylist_load_regexp(filename, i+1, <span class="stringliteral">"EXTNAME"</span>, 
-<a name="l00224"></a>00224                         0)) == NULL) {
-<a name="l00225"></a>00225             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load header of %d th extension"</span>,
-<a name="l00226"></a>00226                     i+1);
-<a name="l00227"></a>00227             <span class="keywordflow">return</span> NULL;
-<a name="l00228"></a>00228         }
-<a name="l00229"></a>00229         cur_name = cpl_propertylist_get_string(plist, <span class="stringliteral">"EXTNAME"</span>);
-<a name="l00230"></a>00230         
-<a name="l00231"></a>00231         <span class="comment">/* Check the current extension */</span>
-<a name="l00232"></a>00232         <span class="keywordflow">if</span> (!strcmp(cur_name, ext_name)) {
-<a name="l00233"></a>00233             <span class="comment">/* Load the table */</span>
-<a name="l00234"></a>00234             <span class="keywordflow">if</span> (out == NULL) {
-<a name="l00235"></a>00235                 out = cpl_table_load(filename, i+1, 1);
-<a name="l00236"></a>00236                 cpl_table_new_column(out, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);
-<a name="l00237"></a>00237                 cpl_table_fill_column_window_string(out, IRPLIB_STDSTAR_CAT_COL,
-<a name="l00238"></a>00238                                                     0, cpl_table_get_nrow(out),
-<a name="l00239"></a>00239                                                     cur_name);
-<a name="l00240"></a>00240                 <span class="keywordflow">if</span> (out == NULL) {
-<a name="l00241"></a>00241                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);
-<a name="l00242"></a>00242                     cpl_propertylist_delete(plist);
-<a name="l00243"></a>00243                     <span class="keywordflow">return</span> NULL;
-<a name="l00244"></a>00244                 }
-<a name="l00245"></a>00245             }
-<a name="l00246"></a>00246         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(ext_name, <span class="stringliteral">"all"</span>)) {
-<a name="l00247"></a>00247             <span class="comment">/* Load the table and append it */</span>
-<a name="l00248"></a>00248             <span class="keywordflow">if</span> (i==0) {
-<a name="l00249"></a>00249                 <span class="comment">/* Load the first table */</span>
-<a name="l00250"></a>00250                 out = cpl_table_load(filename, i+1, 1);
-<a name="l00251"></a>00251                 cpl_table_new_column(out, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);
-<a name="l00252"></a>00252                 cpl_table_fill_column_window_string(out, IRPLIB_STDSTAR_CAT_COL,
-<a name="l00253"></a>00253                                                     0, cpl_table_get_nrow(out),
-<a name="l00254"></a>00254                                                     cur_name);
-<a name="l00255"></a>00255                 <span class="keywordflow">if</span> (out == NULL) {
-<a name="l00256"></a>00256                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);
-<a name="l00257"></a>00257                     cpl_propertylist_delete(plist); 
-<a name="l00258"></a>00258                     <span class="keywordflow">return</span> NULL;
-<a name="l00259"></a>00259                 }
-<a name="l00260"></a>00260             } <span class="keywordflow">else</span> {
-<a name="l00261"></a>00261                 <span class="comment">/* Load the current table */</span>
-<a name="l00262"></a>00262                 out_cur = cpl_table_load(filename, i+1, 1);
-<a name="l00263"></a>00263                 <span class="keywordflow">if</span> (out_cur == NULL) {
-<a name="l00264"></a>00264                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);
-<a name="l00265"></a>00265                     cpl_table_delete(out);
-<a name="l00266"></a>00266                     cpl_propertylist_delete(plist); 
-<a name="l00267"></a>00267                     <span class="keywordflow">return</span> NULL;
-<a name="l00268"></a>00268                 }
-<a name="l00269"></a>00269                 cpl_table_new_column(out_cur, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);
-<a name="l00270"></a>00270                 cpl_table_fill_column_window_string(out_cur, IRPLIB_STDSTAR_CAT_COL,
-<a name="l00271"></a>00271                                                     0, cpl_table_get_nrow(out_cur),
-<a name="l00272"></a>00272                                                     cur_name);
-<a name="l00273"></a>00273                 <span class="comment">/* Append the table */</span>
-<a name="l00274"></a>00274                 <span class="keywordflow">if</span> (cpl_table_insert(out, out_cur, 
-<a name="l00275"></a>00275                             cpl_table_get_nrow(out)) != CPL_ERROR_NONE) {
-<a name="l00276"></a>00276                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot merge table %d"</span>, i+1);
-<a name="l00277"></a>00277                     cpl_table_delete(out);
-<a name="l00278"></a>00278                     cpl_table_delete(out_cur);
-<a name="l00279"></a>00279                     cpl_propertylist_delete(plist); 
-<a name="l00280"></a>00280                     <span class="keywordflow">return</span> NULL;
-<a name="l00281"></a>00281                 }
-<a name="l00282"></a>00282                 cpl_table_delete(out_cur);
-<a name="l00283"></a>00283             }
-<a name="l00284"></a>00284         }
-<a name="l00285"></a>00285         cpl_propertylist_delete(plist);
-<a name="l00286"></a>00286     }
-<a name="l00287"></a>00287     <span class="keywordflow">return</span> out;
-<a name="l00288"></a>00288 }
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00299"></a>00299 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00300"></a><a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc">00300</a> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(
-<a name="l00301"></a>00301         <span class="keyword">const</span> cpl_table  *   catal)
-<a name="l00302"></a>00302 {
-<a name="l00303"></a>00303     <span class="comment">/* Check for all the mandatory columns */</span>
-<a name="l00304"></a>00304     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_STAR_COL)) {
-<a name="l00305"></a>00305         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00306"></a>00306                 <span class="stringliteral">"Missing column: %s"</span>,
-<a name="l00307"></a>00307                 IRPLIB_STDSTAR_STAR_COL);
-<a name="l00308"></a>00308     }
-<a name="l00309"></a>00309     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_TYPE_COL)) {
-<a name="l00310"></a>00310         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00311"></a>00311                 <span class="stringliteral">"Missing column: %s"</span>,
-<a name="l00312"></a>00312                 IRPLIB_STDSTAR_TYPE_COL);
-<a name="l00313"></a>00313     }
-<a name="l00314"></a>00314     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_CAT_COL)) {
-<a name="l00315"></a>00315         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, 
-<a name="l00316"></a>00316                 CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00317"></a>00317                 <span class="stringliteral">"Missing column: %s"</span>,
-<a name="l00318"></a>00318                 IRPLIB_STDSTAR_CAT_COL);
-<a name="l00319"></a>00319     }
-<a name="l00320"></a>00320     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_RA_COL)) {
-<a name="l00321"></a>00321         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, 
-<a name="l00322"></a>00322                 CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00323"></a>00323                 <span class="stringliteral">"Missing column: %s"</span>,
-<a name="l00324"></a>00324                 IRPLIB_STDSTAR_RA_COL);
-<a name="l00325"></a>00325     }
-<a name="l00326"></a>00326     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_DEC_COL)) {
-<a name="l00327"></a>00327         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, 
-<a name="l00328"></a>00328                 CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00329"></a>00329                 <span class="stringliteral">"Missing column: %s"</span>,
-<a name="l00330"></a>00330                 IRPLIB_STDSTAR_DEC_COL);
-<a name="l00331"></a>00331     }
-<a name="l00332"></a>00332     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00333"></a>00333 }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00347"></a>00347 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00348"></a><a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8">00348</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(
-<a name="l00349"></a>00349         cpl_table   *   cat, 
-<a name="l00350"></a>00350         <span class="keywordtype">double</span>          ra, 
-<a name="l00351"></a>00351         <span class="keywordtype">double</span>          dec, 
-<a name="l00352"></a>00352         <span class="keywordtype">double</span>          dist)
-<a name="l00353"></a>00353 {
-<a name="l00354"></a>00354     <span class="keywordtype">double</span>              distance;
-<a name="l00355"></a>00355     <span class="keywordtype">int</span>                 nrows;
-<a name="l00356"></a>00356     <span class="keywordtype">int</span>                 i;
-<a name="l00357"></a>00357     
-<a name="l00358"></a>00358     <span class="comment">/* Check entries */</span>
-<a name="l00359"></a>00359     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361     <span class="comment">/* Get the number of selected rows */</span>
-<a name="l00362"></a>00362     nrows = cpl_table_get_nrow(cat);
-<a name="l00363"></a>00363     
-<a name="l00364"></a>00364     <span class="comment">/* Check if the columns are there */</span>
-<a name="l00365"></a>00365     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_RA_COL)) {
-<a name="l00366"></a>00366         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_RA_COL);
-<a name="l00367"></a>00367         <span class="keywordflow">return</span> -1;
-<a name="l00368"></a>00368     }
-<a name="l00369"></a>00369     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_DEC_COL)) {
-<a name="l00370"></a>00370         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_DEC_COL);
-<a name="l00371"></a>00371         <span class="keywordflow">return</span> -1;
-<a name="l00372"></a>00372     }
-<a name="l00373"></a>00373     
-<a name="l00374"></a>00374     <span class="comment">/* Compute distances of the selected rows */</span>
-<a name="l00375"></a>00375     <span class="keywordflow">for</span> (i=0; i<nrows; i++) {
-<a name="l00376"></a>00376         <span class="keywordflow">if</span> (cpl_table_is_selected(cat, i)) {
-<a name="l00377"></a>00377             <span class="comment">/* The row is selected - compute the distance */</span>
-<a name="l00378"></a>00378             distance = irplib_wcs_great_circle_dist(ra, dec, 
-<a name="l00379"></a>00379                     cpl_table_get_double(cat, IRPLIB_STDSTAR_RA_COL, i, NULL),
-<a name="l00380"></a>00380                     cpl_table_get_double(cat, IRPLIB_STDSTAR_DEC_COL, i, NULL));            
-<a name="l00381"></a>00381             <span class="keywordflow">if</span> (distance > dist) cpl_table_unselect_row(cat, i);
-<a name="l00382"></a>00382         }
-<a name="l00383"></a>00383     }
-<a name="l00384"></a>00384     <span class="keywordflow">return</span> 0;
-<a name="l00385"></a>00385 }
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00396"></a>00396 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00397"></a><a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab">00397</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(
-<a name="l00398"></a>00398         cpl_table   *   cat, 
-<a name="l00399"></a>00399         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   mag_colname)
-<a name="l00400"></a>00400 {
-<a name="l00401"></a>00401     <span class="comment">/* Check entries */</span>
-<a name="l00402"></a>00402     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00403"></a>00403     <span class="keywordflow">if</span> (mag_colname == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405     <span class="comment">/* Check that the table has the mag column */</span>
-<a name="l00406"></a>00406     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, mag_colname)) {
-<a name="l00407"></a>00407         cpl_msg_error(cpl_func, <span class="stringliteral">"Column %s does not exist in the catalog"</span>,
-<a name="l00408"></a>00408                 mag_colname);
-<a name="l00409"></a>00409         <span class="keywordflow">return</span> -1;
-<a name="l00410"></a>00410     }
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     <span class="comment">/* Apply the selection */</span>
-<a name="l00413"></a>00413     <span class="keywordflow">if</span> (cpl_table_and_selected_double(cat, mag_colname, CPL_NOT_GREATER_THAN, 
-<a name="l00414"></a>00414                 98.0) <= 0) {
-<a name="l00415"></a>00415         cpl_msg_error(cpl_func, <span class="stringliteral">"Column %s does not exist in the catalog"</span>,
-<a name="l00416"></a>00416                 mag_colname);
-<a name="l00417"></a>00417         <span class="keywordflow">return</span> -1;
-<a name="l00418"></a>00418     }
-<a name="l00419"></a>00419     <span class="keywordflow">return</span> 0;
-<a name="l00420"></a>00420 }
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00432"></a>00432 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00433"></a><a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5">00433</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(
-<a name="l00434"></a>00434         <span class="keyword">const</span> cpl_table     *   cat, 
-<a name="l00435"></a>00435         <span class="keywordtype">double</span>                  ra, 
-<a name="l00436"></a>00436         <span class="keywordtype">double</span>                  dec)
-<a name="l00437"></a>00437 {
-<a name="l00438"></a>00438     <span class="keywordtype">double</span>              min_dist, distance;
-<a name="l00439"></a>00439     <span class="keywordtype">int</span>                 nrows;
-<a name="l00440"></a>00440     <span class="keywordtype">int</span>                 ind;
-<a name="l00441"></a>00441     <span class="keywordtype">int</span>                 i;
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443     <span class="comment">/* Check entries */</span>
-<a name="l00444"></a>00444     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446     <span class="comment">/* Initialize */</span>
-<a name="l00447"></a>00447     min_dist = 1000.0;
-<a name="l00448"></a>00448     ind = -1;
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450     <span class="comment">/* Get the number of selected rows */</span>
-<a name="l00451"></a>00451     nrows = cpl_table_get_nrow(cat);
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453     <span class="comment">/* Check if the columns are there */</span>
-<a name="l00454"></a>00454     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_RA_COL)) {
-<a name="l00455"></a>00455         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_RA_COL);
-<a name="l00456"></a>00456         <span class="keywordflow">return</span> -1;
-<a name="l00457"></a>00457     }
-<a name="l00458"></a>00458     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_DEC_COL)) {
-<a name="l00459"></a>00459         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_DEC_COL);
-<a name="l00460"></a>00460         <span class="keywordflow">return</span> -1;
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462     
-<a name="l00463"></a>00463     <span class="comment">/* Compute distances of the selected rows */</span>
-<a name="l00464"></a>00464     <span class="keywordflow">for</span> (i=0; i<nrows; i++) {
-<a name="l00465"></a>00465         <span class="keywordflow">if</span> (cpl_table_is_selected(cat, i)) {
-<a name="l00466"></a>00466             <span class="comment">/* The row is selected - compute the distance */</span>
-<a name="l00467"></a>00467             distance = irplib_wcs_great_circle_dist(ra, dec,
-<a name="l00468"></a>00468                     cpl_table_get_double(cat, IRPLIB_STDSTAR_RA_COL, i, NULL),
-<a name="l00469"></a>00469                     cpl_table_get_double(cat, IRPLIB_STDSTAR_DEC_COL, i, NULL));
-<a name="l00470"></a>00470             <span class="keywordflow">if</span> (distance <= min_dist) {
-<a name="l00471"></a>00471                 min_dist = distance;
-<a name="l00472"></a>00472                 ind = i;
-<a name="l00473"></a>00473             }
-<a name="l00474"></a>00474         }
-<a name="l00475"></a>00475     }
-<a name="l00476"></a>00476     <span class="keywordflow">return</span> ind;
-<a name="l00477"></a>00477 }
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00500"></a>00500 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00501"></a><a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027">00501</a> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027" title="Find the closest star to ra, dec in the catalog.">irplib_stdstar_find_star</a>(
-<a name="l00502"></a>00502         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   catfile,
-<a name="l00503"></a>00503         <span class="keywordtype">double</span>                  ra, 
-<a name="l00504"></a>00504         <span class="keywordtype">double</span>                  dec,
-<a name="l00505"></a>00505         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   band,
-<a name="l00506"></a>00506         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   catname,
-<a name="l00507"></a>00507         <span class="keywordtype">double</span>              *   mag,
-<a name="l00508"></a>00508         <span class="keywordtype">char</span>                **  name,
-<a name="l00509"></a>00509         <span class="keywordtype">char</span>                **  type,
-<a name="l00510"></a>00510         <span class="keywordtype">char</span>                **  usedcatname,
-<a name="l00511"></a>00511         <span class="keywordtype">double</span>              *   star_ra,
-<a name="l00512"></a>00512         <span class="keywordtype">double</span>              *   star_dec,
-<a name="l00513"></a>00513         <span class="keywordtype">double</span>                  dist_am)
-<a name="l00514"></a>00514 {
-<a name="l00515"></a>00515     cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00516"></a>00516     cpl_table   *   catal;
-<a name="l00517"></a>00517     <span class="keyword">const</span> <span class="keywordtype">double</span>    dist = dist_am / 60.0;
-<a name="l00518"></a>00518     <span class="keywordtype">int</span>             ind;
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520     <span class="comment">/* Check entries */</span>
-<a name="l00521"></a>00521     <span class="keywordflow">if</span> (catfile == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00522"></a>00522     <span class="keywordflow">if</span> (band    == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00523"></a>00523     <span class="keywordflow">if</span> (catname == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l00524"></a>00524     
-<a name="l00525"></a>00525     <span class="comment">/* Load the catalog */</span>
-<a name="l00526"></a>00526     <span class="keywordflow">if</span> ((catal = <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(catfile, catname)) == NULL) {
-<a name="l00527"></a>00527         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_FILE_NOT_FOUND,
-<a name="l00528"></a>00528                                            <span class="stringliteral">"Cannot load the catalog %s from %s"</span>,
-<a name="l00529"></a>00529                                            catname, catfile);
-<a name="l00530"></a>00530     }
-<a name="l00531"></a>00531     
-<a name="l00532"></a>00532     <span class="comment">/* Check the columns are present */</span>
-<a name="l00533"></a>00533     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(catal) != CPL_ERROR_NONE) {
-<a name="l00534"></a>00534         cpl_table_delete(catal);
-<a name="l00535"></a>00535         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00536"></a>00536     }
-<a name="l00537"></a>00537     
-<a name="l00538"></a>00538     <span class="comment">/* Select stars with known magnitude */</span>
-<a name="l00539"></a>00539     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(catal, band) == -1) {
-<a name="l00540"></a>00540         cpl_table_delete(catal);
-<a name="l00541"></a>00541         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00542"></a>00542                                            <span class="stringliteral">"Cannot select stars in that band"</span>);
-<a name="l00543"></a>00543     }
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545     <span class="comment">/* Select stars within a given distance */</span>
-<a name="l00546"></a>00546     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(catal, ra, dec, dist) == -1) {
-<a name="l00547"></a>00547         cpl_table_delete(catal);
-<a name="l00548"></a>00548         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00549"></a>00549                                            <span class="stringliteral">"Cannot select close stars"</span>);
-<a name="l00550"></a>00550     }
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552     <span class="comment">/* Take the closest */</span>
-<a name="l00553"></a>00553     <span class="keywordflow">if</span> ((ind=<a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(catal, ra, dec)) < 0) {
-<a name="l00554"></a>00554         cpl_table_delete(catal);
-<a name="l00555"></a>00555         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00556"></a>00556                                            <span class="stringliteral">"Cannot get the closest star with "</span>
-<a name="l00557"></a>00557                                            <span class="stringliteral">"known %s magnitude"</span>,band);
-<a name="l00558"></a>00558     }
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560     <span class="keywordflow">if</span>(mag != NULL)
-<a name="l00561"></a>00561         *mag = cpl_table_get_double(catal, band, ind, NULL);
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563     <span class="keywordflow">if</span>(name != NULL)
-<a name="l00564"></a>00564     {
-<a name="l00565"></a>00565         *name = cpl_strdup(cpl_table_get_string(catal,
-<a name="l00566"></a>00566                                                 IRPLIB_STDSTAR_STAR_COL, ind));
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568     }
-<a name="l00569"></a>00569     <span class="keywordflow">if</span>(type != NULL)
-<a name="l00570"></a>00570     {
-<a name="l00571"></a>00571         *type = cpl_strdup(cpl_table_get_string(catal, IRPLIB_STDSTAR_TYPE_COL,
-<a name="l00572"></a>00572                                                 ind));
-<a name="l00573"></a>00573     }
-<a name="l00574"></a>00574     <span class="keywordflow">if</span>(usedcatname != NULL)
-<a name="l00575"></a>00575     {
-<a name="l00576"></a>00576         <span class="keywordflow">if</span>(strcmp(catname, <span class="stringliteral">"all"</span>))
-<a name="l00577"></a>00577             *usedcatname = cpl_strdup(catname);
-<a name="l00578"></a>00578         <span class="keywordflow">else</span>
-<a name="l00579"></a>00579         {
-<a name="l00580"></a>00580             *usedcatname = cpl_strdup(cpl_table_get_string
-<a name="l00581"></a>00581                                       (catal, IRPLIB_STDSTAR_CAT_COL, ind));
-<a name="l00582"></a>00582         }
-<a name="l00583"></a>00583     }
-<a name="l00584"></a>00584     <span class="keywordflow">if</span>(star_ra != NULL)
-<a name="l00585"></a>00585         *star_ra  = cpl_table_get_double(catal, IRPLIB_STDSTAR_RA_COL, ind, NULL);
-<a name="l00586"></a>00586     <span class="keywordflow">if</span>(star_dec != NULL)
-<a name="l00587"></a>00587         *star_dec = cpl_table_get_double(catal, IRPLIB_STDSTAR_DEC_COL, ind, NULL);
-<a name="l00588"></a>00588     
-<a name="l00589"></a>00589     <span class="comment">/* Free and return */</span>
-<a name="l00590"></a>00590     cpl_table_delete(catal);
-<a name="l00591"></a>00591     <span class="keywordflow">return</span> cpl_errorstate_is_equal(prestate) ? CPL_ERROR_NONE
-<a name="l00592"></a>00592         : cpl_error_set_where(cpl_func);
-<a name="l00593"></a>00593 }
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00608"></a>00608 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00609"></a><a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba">00609</a> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba" title="Get the conversion.">irplib_stdstar_get_conversion</a>(
-<a name="l00610"></a>00610         <span class="keyword">const</span> cpl_bivector  *   spec,
-<a name="l00611"></a>00611         <span class="keywordtype">double</span>                  dit,
-<a name="l00612"></a>00612         <span class="keywordtype">double</span>                  surface,
-<a name="l00613"></a>00613         <span class="keywordtype">double</span>                  gain,
-<a name="l00614"></a>00614         <span class="keywordtype">double</span>                  mag)
-<a name="l00615"></a>00615 {
-<a name="l00616"></a>00616     <span class="keywordtype">double</span>                      h = 6.62e-27;
-<a name="l00617"></a>00617     <span class="keywordtype">double</span>                      c = 3e18;
-<a name="l00618"></a>00618     <span class="keyword">const</span> cpl_vector    *       wave;
-<a name="l00619"></a>00619     <span class="keyword">const</span> cpl_vector    *       extr;
-<a name="l00620"></a>00620     cpl_vector          *       out;
-<a name="l00621"></a>00621     <span class="keywordtype">double</span>                      factor;
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623     <span class="comment">/* Test entries */</span>
-<a name="l00624"></a>00624     <span class="keywordflow">if</span> (spec == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00625"></a>00625     <span class="keywordflow">if</span> (dit <= 0.0) <span class="keywordflow">return</span> NULL;
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627     <span class="comment">/* Get the extracted spectrum */</span>
-<a name="l00628"></a>00628     wave = cpl_bivector_get_x_const(spec);
-<a name="l00629"></a>00629     extr = cpl_bivector_get_y_const(spec);
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631     <span class="comment">/* Get the spectrum */</span>
-<a name="l00632"></a>00632     out = cpl_vector_duplicate(extr);
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634     <span class="comment">/* Divide by DIT */</span>
-<a name="l00635"></a>00635     cpl_vector_divide_scalar(out, dit);
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637     <span class="comment">/* Divide by the surface */</span>
-<a name="l00638"></a>00638     cpl_vector_divide_scalar(out, surface);
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640     <span class="comment">/* Multiply by the gain */</span>
-<a name="l00641"></a>00641     cpl_vector_multiply_scalar(out, gain);
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643     <span class="comment">/* Multiply by the difference magnitude */</span>
-<a name="l00644"></a>00644     factor = pow(10, mag/2.5);
-<a name="l00645"></a>00645     cpl_vector_multiply_scalar(out, factor);
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647     <span class="comment">/* Divide by the dispersion */</span>
-<a name="l00648"></a>00648     factor = (cpl_vector_get(wave, cpl_vector_get_size(wave)-1) -
-<a name="l00649"></a>00649             cpl_vector_get(wave, 0)) / cpl_vector_get_size(wave);
-<a name="l00650"></a>00650     cpl_vector_divide_scalar(out, factor);
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652     <span class="comment">/* Multiply by the energy of the photon */</span>
-<a name="l00653"></a>00653     cpl_vector_multiply_scalar(out, h*c);
-<a name="l00654"></a>00654     cpl_vector_divide(out, wave);
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656     <span class="keywordflow">return</span> out;
-<a name="l00657"></a>00657 }
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00667"></a>00667 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00668"></a><a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab">00668</a> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab" title="Get the 0 magnitude spectrum.">irplib_stdstar_get_mag_zero</a>(
-<a name="l00669"></a>00669         <span class="keyword">const</span> cpl_bivector  *   sed,
-<a name="l00670"></a>00670         <span class="keyword">const</span> cpl_vector    *   waves,
-<a name="l00671"></a>00671         <span class="keywordtype">double</span>                  cent_wl)
-<a name="l00672"></a>00672 {
-<a name="l00673"></a>00673     <span class="keywordtype">double</span>              wmin, wmax, wstep;
-<a name="l00674"></a>00674     <span class="keywordtype">int</span>                 nb_sed;
-<a name="l00675"></a>00675     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   sed_x;
-<a name="l00676"></a>00676     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   sed_y;
-<a name="l00677"></a>00677     cpl_bivector    *   sed_loc;
-<a name="l00678"></a>00678     <span class="keywordtype">double</span>          *   sed_loc_x;
-<a name="l00679"></a>00679     <span class="keywordtype">double</span>          *   sed_loc_y;
-<a name="l00680"></a>00680     cpl_vector      *   out;
-<a name="l00681"></a>00681     cpl_bivector    *   out_biv;
-<a name="l00682"></a>00682     <span class="keywordtype">double</span>              f0_jan, f0_erg, cent_val;
-<a name="l00683"></a>00683     <span class="keywordtype">int</span>                 i;
-<a name="l00684"></a>00684 
-<a name="l00685"></a>00685     <span class="comment">/* Test entries */</span>
-<a name="l00686"></a>00686     <span class="keywordflow">if</span> (sed == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00687"></a>00687     <span class="keywordflow">if</span> (waves == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689     <span class="comment">/* Initialise */</span>
-<a name="l00690"></a>00690     nb_sed = cpl_bivector_get_size(sed);
-<a name="l00691"></a>00691     sed_x = cpl_bivector_get_x_data_const(sed);
-<a name="l00692"></a>00692     sed_y = cpl_bivector_get_y_data_const(sed);
-<a name="l00693"></a>00693     wstep = sed_x[1] - sed_x[0];
-<a name="l00694"></a>00694     wmin = cpl_vector_get(waves, 0);
-<a name="l00695"></a>00695     wmax = cpl_vector_get(waves, cpl_vector_get_size(waves)-1);
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697     <span class="comment">/* Expand sed with 0 to have it bigger than the required wavelengths */</span>
-<a name="l00698"></a>00698     sed_loc = cpl_bivector_new(nb_sed + 4);
-<a name="l00699"></a>00699     sed_loc_x = cpl_bivector_get_x_data(sed_loc);
-<a name="l00700"></a>00700     sed_loc_y = cpl_bivector_get_y_data(sed_loc);
-<a name="l00701"></a>00701     <span class="keywordflow">for</span> (i=0; i<nb_sed; i++) {
-<a name="l00702"></a>00702         sed_loc_x[i+2] = sed_x[i];
-<a name="l00703"></a>00703         sed_loc_y[i+2] = sed_y[i];
-<a name="l00704"></a>00704     }
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706     <span class="comment">/* Low bound */</span>
-<a name="l00707"></a>00707     sed_loc_x[1] = sed_loc_x[2] - wstep;
-<a name="l00708"></a>00708     <span class="keywordflow">if</span> (sed_loc_x[2] < wmin) {
-<a name="l00709"></a>00709         sed_loc_x[0] = sed_loc_x[1] - wstep;
-<a name="l00710"></a>00710     } <span class="keywordflow">else</span> {
-<a name="l00711"></a>00711         sed_loc_x[0] = wmin - wstep;
-<a name="l00712"></a>00712     }
-<a name="l00713"></a>00713     sed_loc_y[0] = 1e-20;
-<a name="l00714"></a>00714     sed_loc_y[1] = 1e-20;
-<a name="l00715"></a>00715 
-<a name="l00716"></a>00716     <span class="comment">/* High bound */</span>
-<a name="l00717"></a>00717     sed_loc_x[nb_sed+2] = sed_loc_x[nb_sed+1] + wstep;
-<a name="l00718"></a>00718     <span class="keywordflow">if</span> (sed_loc_x[nb_sed+1] > wmax) {
-<a name="l00719"></a>00719         sed_loc_x[nb_sed+3] = sed_loc_x[nb_sed+2] + wstep;
-<a name="l00720"></a>00720     } <span class="keywordflow">else</span> {
-<a name="l00721"></a>00721         sed_loc_x[nb_sed+3] = wmax + wstep;
-<a name="l00722"></a>00722     }
-<a name="l00723"></a>00723     sed_loc_y[nb_sed+2] = 1e-20;
-<a name="l00724"></a>00724     sed_loc_y[nb_sed+3] = 1e-20;
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726     <span class="comment">/* Create the output bivector */</span>
-<a name="l00727"></a>00727     out = cpl_vector_duplicate(waves);
-<a name="l00728"></a>00728     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);
-<a name="l00729"></a>00729     <span class="comment">/* the X entry (waves) is not modified by cpl_bivector_interpolate_linear */</span>
-<a name="l00730"></a>00730     out_biv = cpl_bivector_wrap_vectors((cpl_vector*)waves, out);
-<a name="l00731"></a>00731     IRPLIB_DIAG_PRAGMA_POP;
-<a name="l00732"></a>00732     <span class="comment">/* Interpolate */</span>
-<a name="l00733"></a>00733     <span class="keywordflow">if</span> (cpl_bivector_interpolate_linear(out_biv, sed_loc) != CPL_ERROR_NONE) {
-<a name="l00734"></a>00734         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot interpolate the wavelength"</span>);
-<a name="l00735"></a>00735         cpl_bivector_unwrap_vectors(out_biv);
-<a name="l00736"></a>00736         cpl_vector_delete(out);
-<a name="l00737"></a>00737         cpl_bivector_delete(sed_loc);
-<a name="l00738"></a>00738         <span class="keywordflow">return</span> NULL;
-<a name="l00739"></a>00739     }
-<a name="l00740"></a>00740     cpl_bivector_unwrap_vectors(out_biv);
-<a name="l00741"></a>00741     cpl_bivector_delete(sed_loc);
-<a name="l00742"></a>00742 
-<a name="l00743"></a>00743     <span class="comment">/* Compute f0_jan */</span>
-<a name="l00744"></a>00744     f0_jan = 5513.15 / ( pow(cent_wl,3) * (exp(1.2848/cent_wl)-1) );
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746     <span class="comment">/* Convert f0 Jansky -> ergs/s/cm^2/Angstrom */</span>
-<a name="l00747"></a>00747     f0_erg = f0_jan * 1e-26 * 1e7 * 3e18 / (1e4 * cent_wl*cent_wl*1e4*1e4);
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749     <span class="comment">/* Scale out so that the central value is f0 */</span>
-<a name="l00750"></a>00750     cent_val = cpl_vector_get(out, cpl_vector_get_size(out)/2);
-<a name="l00751"></a>00751     <span class="keywordflow">if</span> (cent_val <= 0.0) {
-<a name="l00752"></a>00752         cpl_msg_error(cpl_func, <span class="stringliteral">"Negative or 0 central value"</span>);
-<a name="l00753"></a>00753         cpl_vector_delete(out);
-<a name="l00754"></a>00754         <span class="keywordflow">return</span> NULL;
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756     cpl_vector_multiply_scalar(out, f0_erg/cent_val);
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758     <span class="comment">/* Return */</span>
-<a name="l00759"></a>00759     <span class="keywordflow">return</span> out;
-<a name="l00760"></a>00760 }
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00772"></a>00772 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00773"></a><a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea">00773</a> cpl_bivector * <a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea" title="Get the SED.">irplib_stdstar_get_sed</a>(
-<a name="l00774"></a>00774         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   seds_file,
-<a name="l00775"></a>00775         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   sptype)
-<a name="l00776"></a>00776 {
-<a name="l00777"></a>00777     cpl_table           *   seds;
-<a name="l00778"></a>00778     cpl_bivector        *   out;
-<a name="l00779"></a>00779     cpl_vector          *   wave;
-<a name="l00780"></a>00780     cpl_vector          *   sed;
-<a name="l00781"></a>00781     cpl_bivector        *   tmp;
-<a name="l00782"></a>00782     <span class="keywordtype">int</span>                     nlines;
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784     <span class="comment">/* Test entries */</span>
-<a name="l00785"></a>00785     <span class="keywordflow">if</span> (seds_file == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00786"></a>00786     <span class="keywordflow">if</span> (sptype == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788     <span class="comment">/* Load the table */</span>
-<a name="l00789"></a>00789     <span class="keywordflow">if</span> ((seds = cpl_table_load(seds_file, 1, 0)) == NULL) {
-<a name="l00790"></a>00790         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the table"</span>);
-<a name="l00791"></a>00791         <span class="keywordflow">return</span> NULL;
-<a name="l00792"></a>00792     }
-<a name="l00793"></a>00793 
-<a name="l00794"></a>00794     <span class="comment">/* Check if the column is there */</span>
-<a name="l00795"></a>00795     <span class="keywordflow">if</span> (!cpl_table_has_column(seds, sptype)) {
-<a name="l00796"></a>00796         cpl_msg_error(cpl_func, <span class="stringliteral">"SED of the requested star not available"</span>);
-<a name="l00797"></a>00797         cpl_table_delete(seds);
-<a name="l00798"></a>00798         <span class="keywordflow">return</span> NULL;
-<a name="l00799"></a>00799     }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     <span class="comment">/* Get the nb lines */</span>
-<a name="l00802"></a>00802     nlines = cpl_table_get_nrow(seds);
-<a name="l00803"></a>00803 
-<a name="l00804"></a>00804     <span class="comment">/* Get the wavelength as a vector */</span>
-<a name="l00805"></a>00805     <span class="keywordflow">if</span> ((wave = cpl_vector_wrap(nlines,
-<a name="l00806"></a>00806             cpl_table_get_data_double(seds, <span class="stringliteral">"Wavelength"</span>))) == NULL) {
-<a name="l00807"></a>00807         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot get the Wavelength column"</span>);
-<a name="l00808"></a>00808         cpl_table_delete(seds);
-<a name="l00809"></a>00809         <span class="keywordflow">return</span> NULL;
-<a name="l00810"></a>00810     }
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812     <span class="comment">/* Get the SED as a vector */</span>
-<a name="l00813"></a>00813     <span class="keywordflow">if</span> ((sed = cpl_vector_wrap(nlines,
-<a name="l00814"></a>00814             cpl_table_get_data_double(seds, sptype))) == NULL) {
-<a name="l00815"></a>00815         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot get the SED column"</span>);
-<a name="l00816"></a>00816         cpl_table_delete(seds);
-<a name="l00817"></a>00817         cpl_vector_unwrap(wave);
-<a name="l00818"></a>00818         <span class="keywordflow">return</span> NULL;
-<a name="l00819"></a>00819     }
-<a name="l00820"></a>00820     tmp = cpl_bivector_wrap_vectors(wave, sed);
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822     <span class="comment">/* Create the output bivector */</span>
-<a name="l00823"></a>00823     out = cpl_bivector_duplicate(tmp);
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825     <span class="comment">/* Free */</span>
-<a name="l00826"></a>00826     cpl_bivector_unwrap_vectors(tmp);
-<a name="l00827"></a>00827     cpl_vector_unwrap(wave);
-<a name="l00828"></a>00828     cpl_vector_unwrap(sed);
-<a name="l00829"></a>00829     cpl_table_delete(seds);
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831     <span class="comment">/* Return  */</span>
-<a name="l00832"></a>00832     <span class="keywordflow">return</span> out;
-<a name="l00833"></a>00833 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_stdstar.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_stdstar.c,v 1.45 2013/03/01 10:27:07 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/03/01 10:27:07 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.45 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "irplib_stdstar.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "irplib_wcs.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_FRAMESET_GET_CONST cpl_frameset_get_position_const</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="comment">/* Remove this branch once CPL versions less than 6.3 are no longer supported */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define IRPLIB_FRAMESET_GET_CONST cpl_frameset_get_frame_const</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                                   Functions code</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> cpl_error_code</div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d">   89</a></span> <a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(cpl_frameset        *   set_in,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                               <span class="keyword">const</span> cpl_frameset  *   set_raw,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   recipe_name,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   pro_cat,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   pro_type,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   package_name,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>          *   ins_name,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                               cpl_table * (*convert_ascii_table)(<span class="keyword">const</span> <span class="keywordtype">char</span> *))</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="comment">/* Number of catalogs */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keyword">const</span> cpl_size     nb_catalogs = cpl_frameset_get_size(set_raw);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_propertylist * plist_ext;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordtype">char</span>             * out_name;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     cpl_error_code     error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     cpl_size           i;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">if</span> (set_in == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">if</span> (set_raw == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">if</span> (recipe_name == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">if</span> (pro_cat == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordflow">if</span> (ins_name == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">if</span> (convert_ascii_table == NULL) <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="comment">/* Define the file name */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     out_name = cpl_sprintf(<span class="stringliteral">"%s"</span> CPL_DFS_FITS, recipe_name);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     plist_ext = cpl_propertylist_new();</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Process the catalogs */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">for</span> (i = 0; i < nb_catalogs; i++) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         <span class="comment">/* Get the catalog name */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <span class="keyword">const</span> cpl_frame * cur_frame = IRPLIB_FRAMESET_GET_CONST(set_raw, i);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>      * cat_name = cpl_frame_get_filename(cur_frame);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         cpl_table       * out = convert_ascii_table(cat_name);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>      </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         <span class="comment">/* Create the output table */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         <span class="keywordflow">if</span> (out == NULL) {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>             error = cpl_error_get_code() ? cpl_error_set_where(cpl_func)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                 : cpl_error_set(cpl_func, CPL_ERROR_UNSPECIFIED);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         <span class="keywordflow">if</span> (cpl_table_get_nrow(out) == 0) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             cpl_table_delete(out);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>             error = cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                           <span class="stringliteral">"Empty catalogue %d in '%s'"</span>,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                                           (<span class="keywordtype">int</span>)i+1, cat_name);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         cpl_propertylist_update_string(plist_ext, <span class="stringliteral">"EXTNAME"</span>, cat_name);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         <span class="comment">/* Write the table */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         <span class="keywordflow">if</span> (i == 0) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>             cpl_parameterlist * parlist = cpl_parameterlist_new();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             cpl_propertylist  * plist   = cpl_propertylist_new();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>             <span class="comment">/* Mandatory keywords */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             cpl_propertylist_append_string(plist, <span class="stringliteral">"INSTRUME"</span>, ins_name);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>             cpl_propertylist_append_string(plist, CPL_DFS_PRO_CATG, pro_cat);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>             <span class="keywordflow">if</span> (pro_type != NULL) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                 cpl_propertylist_append_string(plist, CPL_DFS_PRO_TYPE,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                                pro_type);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>             }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>             error = cpl_dfs_save_table(set_in, NULL, parlist, set_raw, NULL,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                        out, plist_ext, recipe_name, plist,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                        NULL, package_name, out_name);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>             cpl_parameterlist_delete(parlist);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>             cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>             error = cpl_table_save(out, NULL, plist_ext, out_name,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                                    CPL_IO_EXTEND);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         cpl_table_delete(out);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             (void)cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_propertylist_delete(plist_ext);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     cpl_free(out_name);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1">  195</a></span> cpl_table * <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filename, </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   ext_name)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordtype">int</span>                     next;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_propertylist    *   plist;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   cur_name;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_table           *   out;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     cpl_table           *   out_cur;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_frame           *   cur_frame;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">if</span> (ext_name == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     out = NULL;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="comment">/* Get the number of extensions in the catalog */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     cur_frame = cpl_frame_new();</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_frame_set_filename(cur_frame, filename);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     next = cpl_frame_get_nextensions(cur_frame);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_frame_delete(cur_frame);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="comment">/* Loop on the extentions */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">for</span> (i=0; i<next; i++) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         <span class="comment">/* Check the name of the current extension */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="keywordflow">if</span> ((plist = cpl_propertylist_load_regexp(filename, i+1, <span class="stringliteral">"EXTNAME"</span>, </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                         0)) == NULL) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load header of %d th extension"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                     i+1);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>             <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         cur_name = cpl_propertylist_get_string(plist, <span class="stringliteral">"EXTNAME"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         <span class="comment">/* Check the current extension */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keywordflow">if</span> (!strcmp(cur_name, ext_name)) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>             <span class="comment">/* Load the table */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>             <span class="keywordflow">if</span> (out == NULL) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                 out = cpl_table_load(filename, i+1, 1);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                 cpl_table_new_column(out, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                 cpl_table_fill_column_window_string(out, IRPLIB_STDSTAR_CAT_COL,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                                                     0, cpl_table_get_nrow(out),</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                                                     cur_name);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                 <span class="keywordflow">if</span> (out == NULL) {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                 }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>             }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(ext_name, <span class="stringliteral">"all"</span>)) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>             <span class="comment">/* Load the table and append it */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>             <span class="keywordflow">if</span> (i==0) {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                 <span class="comment">/* Load the first table */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                 out = cpl_table_load(filename, i+1, 1);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                 cpl_table_new_column(out, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                 cpl_table_fill_column_window_string(out, IRPLIB_STDSTAR_CAT_COL,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                                     0, cpl_table_get_nrow(out),</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                                     cur_name);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                 <span class="keywordflow">if</span> (out == NULL) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                     cpl_propertylist_delete(plist); </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                 }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                 <span class="comment">/* Load the current table */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                 out_cur = cpl_table_load(filename, i+1, 1);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                 <span class="keywordflow">if</span> (out_cur == NULL) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load extension %d"</span>, i+1);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                     cpl_table_delete(out);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                     cpl_propertylist_delete(plist); </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                 }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                 cpl_table_new_column(out_cur, IRPLIB_STDSTAR_CAT_COL, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                 cpl_table_fill_column_window_string(out_cur, IRPLIB_STDSTAR_CAT_COL,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                                                     0, cpl_table_get_nrow(out_cur),</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                                                     cur_name);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                 <span class="comment">/* Append the table */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                 <span class="keywordflow">if</span> (cpl_table_insert(out, out_cur, </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                             cpl_table_get_nrow(out)) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                     cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot merge table %d"</span>, i+1);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                     cpl_table_delete(out);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                     cpl_table_delete(out_cur);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                     cpl_propertylist_delete(plist); </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                 }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                 cpl_table_delete(out_cur);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>             }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc">  300</a></span> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keyword">const</span> cpl_table  *   catal)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="comment">/* Check for all the mandatory columns */</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_STAR_COL)) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                 <span class="stringliteral">"Missing column: %s"</span>,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                 IRPLIB_STDSTAR_STAR_COL);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_TYPE_COL)) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                 <span class="stringliteral">"Missing column: %s"</span>,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 IRPLIB_STDSTAR_TYPE_COL);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_CAT_COL)) {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                 CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                 <span class="stringliteral">"Missing column: %s"</span>,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                 IRPLIB_STDSTAR_CAT_COL);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_RA_COL)) {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                 CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                 <span class="stringliteral">"Missing column: %s"</span>,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                 IRPLIB_STDSTAR_RA_COL);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(catal, IRPLIB_STDSTAR_DEC_COL)) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                 CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                 <span class="stringliteral">"Missing column: %s"</span>,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                 IRPLIB_STDSTAR_DEC_COL);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8">  348</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         cpl_table   *   cat, </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <span class="keywordtype">double</span>          ra, </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keywordtype">double</span>          dec, </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="keywordtype">double</span>          dist)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordtype">double</span>              distance;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keywordtype">int</span>                 nrows;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keywordtype">int</span>                 i;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="comment">/* Get the number of selected rows */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     nrows = cpl_table_get_nrow(cat);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="comment">/* Check if the columns are there */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_RA_COL)) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_RA_COL);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_DEC_COL)) {</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_DEC_COL);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="comment">/* Compute distances of the selected rows */</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordflow">for</span> (i=0; i<nrows; i++) {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         <span class="keywordflow">if</span> (cpl_table_is_selected(cat, i)) {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>             <span class="comment">/* The row is selected - compute the distance */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>             distance = irplib_wcs_great_circle_dist(ra, dec, </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                     cpl_table_get_double(cat, IRPLIB_STDSTAR_RA_COL, i, NULL),</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                     cpl_table_get_double(cat, IRPLIB_STDSTAR_DEC_COL, i, NULL));            </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             <span class="keywordflow">if</span> (distance > dist) cpl_table_unselect_row(cat, i);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         }</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab">  397</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         cpl_table   *   cat, </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   mag_colname)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordflow">if</span> (mag_colname == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="comment">/* Check that the table has the mag column */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, mag_colname)) {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Column %s does not exist in the catalog"</span>,</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                 mag_colname);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="comment">/* Apply the selection */</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordflow">if</span> (cpl_table_and_selected_double(cat, mag_colname, CPL_NOT_GREATER_THAN, </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                 98.0) <= 0) {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Column %s does not exist in the catalog"</span>,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                 mag_colname);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     }</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5">  433</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         <span class="keyword">const</span> cpl_table     *   cat, </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         <span class="keywordtype">double</span>                  ra, </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         <span class="keywordtype">double</span>                  dec)</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="keywordtype">double</span>              min_dist, distance;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="keywordtype">int</span>                 nrows;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordtype">int</span>                 ind;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordtype">int</span>                 i;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     <span class="comment">/* Initialize */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     min_dist = 1000.0;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     ind = -1;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     <span class="comment">/* Get the number of selected rows */</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     nrows = cpl_table_get_nrow(cat);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="comment">/* Check if the columns are there */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_RA_COL)) {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_RA_COL);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(cat, IRPLIB_STDSTAR_DEC_COL)) {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Missing %s column"</span>, IRPLIB_STDSTAR_DEC_COL);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="comment">/* Compute distances of the selected rows */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     <span class="keywordflow">for</span> (i=0; i<nrows; i++) {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>         <span class="keywordflow">if</span> (cpl_table_is_selected(cat, i)) {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>             <span class="comment">/* The row is selected - compute the distance */</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             distance = irplib_wcs_great_circle_dist(ra, dec,</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                     cpl_table_get_double(cat, IRPLIB_STDSTAR_RA_COL, i, NULL),</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                     cpl_table_get_double(cat, IRPLIB_STDSTAR_DEC_COL, i, NULL));</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>             <span class="keywordflow">if</span> (distance <= min_dist) {</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                 min_dist = distance;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                 ind = i;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordflow">return</span> ind;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027">  501</a></span> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027" title="Find the closest star to ra, dec in the catalog.">irplib_stdstar_find_star</a>(</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   catfile,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <span class="keywordtype">double</span>                  ra, </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         <span class="keywordtype">double</span>                  dec,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   band,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   catname,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         <span class="keywordtype">double</span>              *   mag,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         <span class="keywordtype">char</span>                **  name,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         <span class="keywordtype">char</span>                **  type,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         <span class="keywordtype">char</span>                **  usedcatname,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         <span class="keywordtype">double</span>              *   star_ra,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         <span class="keywordtype">double</span>              *   star_dec,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         <span class="keywordtype">double</span>                  dist_am)</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     cpl_table   *   catal;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    dist = dist_am / 60.0;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="keywordtype">int</span>             ind;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordflow">if</span> (catfile == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordflow">if</span> (band    == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <span class="keywordflow">if</span> (catname == NULL) <span class="keywordflow">return</span> cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="comment">/* Load the catalog */</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keywordflow">if</span> ((catal = <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(catfile, catname)) == NULL) {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_FILE_NOT_FOUND,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                                            <span class="stringliteral">"Cannot load the catalog %s from %s"</span>,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                                            catname, catfile);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="comment">/* Check the columns are present */</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(catal) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>         cpl_table_delete(catal);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="comment">/* Select stars with known magnitude */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(catal, band) == -1) {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         cpl_table_delete(catal);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                                            <span class="stringliteral">"Cannot select stars in that band"</span>);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <span class="comment">/* Select stars within a given distance */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(catal, ra, dec, dist) == -1) {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         cpl_table_delete(catal);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                                            <span class="stringliteral">"Cannot select close stars"</span>);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="comment">/* Take the closest */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="keywordflow">if</span> ((ind=<a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(catal, ra, dec)) < 0) {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         cpl_table_delete(catal);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                                            <span class="stringliteral">"Cannot get the closest star with "</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                                            <span class="stringliteral">"known %s magnitude"</span>,band);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="keywordflow">if</span>(mag != NULL)</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         *mag = cpl_table_get_double(catal, band, ind, NULL);</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">if</span>(name != NULL)</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         *name = cpl_strdup(cpl_table_get_string(catal,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                                                 IRPLIB_STDSTAR_STAR_COL, ind));</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordflow">if</span>(type != NULL)</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         *type = cpl_strdup(cpl_table_get_string(catal, IRPLIB_STDSTAR_TYPE_COL,</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                                                 ind));</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">if</span>(usedcatname != NULL)</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         <span class="keywordflow">if</span>(strcmp(catname, <span class="stringliteral">"all"</span>))</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>             *usedcatname = cpl_strdup(catname);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         {</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             *usedcatname = cpl_strdup(cpl_table_get_string</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>                                       (catal, IRPLIB_STDSTAR_CAT_COL, ind));</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         }</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     }</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     <span class="keywordflow">if</span>(star_ra != NULL)</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         *star_ra  = cpl_table_get_double(catal, IRPLIB_STDSTAR_RA_COL, ind, NULL);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     <span class="keywordflow">if</span>(star_dec != NULL)</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         *star_dec = cpl_table_get_double(catal, IRPLIB_STDSTAR_DEC_COL, ind, NULL);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     cpl_table_delete(catal);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="keywordflow">return</span> cpl_errorstate_is_equal(prestate) ? CPL_ERROR_NONE</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         : cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> }</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba">  609</a></span> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba" title="Get the conversion.">irplib_stdstar_get_conversion</a>(</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         <span class="keyword">const</span> cpl_bivector  *   spec,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         <span class="keywordtype">double</span>                  dit,</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>         <span class="keywordtype">double</span>                  surface,</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>         <span class="keywordtype">double</span>                  gain,</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         <span class="keywordtype">double</span>                  mag)</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> {</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     <span class="keywordtype">double</span>                      h = 6.62e-27;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <span class="keywordtype">double</span>                      c = 3e18;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keyword">const</span> cpl_vector    *       wave;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="keyword">const</span> cpl_vector    *       extr;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     cpl_vector          *       out;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keywordtype">double</span>                      factor;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="keywordflow">if</span> (spec == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     <span class="keywordflow">if</span> (dit <= 0.0) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     <span class="comment">/* Get the extracted spectrum */</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     wave = cpl_bivector_get_x_const(spec);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     extr = cpl_bivector_get_y_const(spec);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     <span class="comment">/* Get the spectrum */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     out = cpl_vector_duplicate(extr);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="comment">/* Divide by DIT */</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     cpl_vector_divide_scalar(out, dit);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="comment">/* Divide by the surface */</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     cpl_vector_divide_scalar(out, surface);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="comment">/* Multiply by the gain */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     cpl_vector_multiply_scalar(out, gain);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="comment">/* Multiply by the difference magnitude */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     factor = pow(10, mag/2.5);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     cpl_vector_multiply_scalar(out, factor);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="comment">/* Divide by the dispersion */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     factor = (cpl_vector_get(wave, cpl_vector_get_size(wave)-1) -</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>             cpl_vector_get(wave, 0)) / cpl_vector_get_size(wave);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     cpl_vector_divide_scalar(out, factor);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     <span class="comment">/* Multiply by the energy of the photon */</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     cpl_vector_multiply_scalar(out, h*c);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     cpl_vector_divide(out, wave);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab">  668</a></span> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab" title="Get the 0 magnitude spectrum.">irplib_stdstar_get_mag_zero</a>(</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         <span class="keyword">const</span> cpl_bivector  *   sed,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         <span class="keyword">const</span> cpl_vector    *   waves,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         <span class="keywordtype">double</span>                  cent_wl)</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> {</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="keywordtype">double</span>              wmin, wmax, wstep;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordtype">int</span>                 nb_sed;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   sed_x;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   sed_y;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     cpl_bivector    *   sed_loc;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="keywordtype">double</span>          *   sed_loc_x;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     <span class="keywordtype">double</span>          *   sed_loc_y;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     cpl_vector      *   out;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     cpl_bivector    *   out_biv;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     <span class="keywordtype">double</span>              f0_jan, f0_erg, cent_val;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     <span class="keywordtype">int</span>                 i;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> </div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordflow">if</span> (sed == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     <span class="keywordflow">if</span> (waves == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     nb_sed = cpl_bivector_get_size(sed);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     sed_x = cpl_bivector_get_x_data_const(sed);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     sed_y = cpl_bivector_get_y_data_const(sed);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     wstep = sed_x[1] - sed_x[0];</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     wmin = cpl_vector_get(waves, 0);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     wmax = cpl_vector_get(waves, cpl_vector_get_size(waves)-1);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="comment">/* Expand sed with 0 to have it bigger than the required wavelengths */</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     sed_loc = cpl_bivector_new(nb_sed + 4);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     sed_loc_x = cpl_bivector_get_x_data(sed_loc);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     sed_loc_y = cpl_bivector_get_y_data(sed_loc);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordflow">for</span> (i=0; i<nb_sed; i++) {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         sed_loc_x[i+2] = sed_x[i];</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         sed_loc_y[i+2] = sed_y[i];</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="comment">/* Low bound */</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     sed_loc_x[1] = sed_loc_x[2] - wstep;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     <span class="keywordflow">if</span> (sed_loc_x[2] < wmin) {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>         sed_loc_x[0] = sed_loc_x[1] - wstep;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         sed_loc_x[0] = wmin - wstep;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     sed_loc_y[0] = 1e-20;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     sed_loc_y[1] = 1e-20;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="comment">/* High bound */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     sed_loc_x[nb_sed+2] = sed_loc_x[nb_sed+1] + wstep;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordflow">if</span> (sed_loc_x[nb_sed+1] > wmax) {</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         sed_loc_x[nb_sed+3] = sed_loc_x[nb_sed+2] + wstep;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>         sed_loc_x[nb_sed+3] = wmax + wstep;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     }</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     sed_loc_y[nb_sed+2] = 1e-20;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     sed_loc_y[nb_sed+3] = 1e-20;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="comment">/* Create the output bivector */</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     out = cpl_vector_duplicate(waves);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     IRPLIB_DIAG_PRAGMA_PUSH_IGN(-Wcast-qual);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     <span class="comment">/* the X entry (waves) is not modified by cpl_bivector_interpolate_linear */</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     out_biv = cpl_bivector_wrap_vectors((cpl_vector*)waves, out);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     IRPLIB_DIAG_PRAGMA_POP;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="comment">/* Interpolate */</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     <span class="keywordflow">if</span> (cpl_bivector_interpolate_linear(out_biv, sed_loc) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot interpolate the wavelength"</span>);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         cpl_bivector_unwrap_vectors(out_biv);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>         cpl_vector_delete(out);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>         cpl_bivector_delete(sed_loc);</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     cpl_bivector_unwrap_vectors(out_biv);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     cpl_bivector_delete(sed_loc);</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="comment">/* Compute f0_jan */</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     f0_jan = 5513.15 / ( pow(cent_wl,3) * (exp(1.2848/cent_wl)-1) );</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     <span class="comment">/* Convert f0 Jansky -> ergs/s/cm^2/Angstrom */</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     f0_erg = f0_jan * 1e-26 * 1e7 * 3e18 / (1e4 * cent_wl*cent_wl*1e4*1e4);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="comment">/* Scale out so that the central value is f0 */</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     cent_val = cpl_vector_get(out, cpl_vector_get_size(out)/2);</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordflow">if</span> (cent_val <= 0.0) {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Negative or 0 central value"</span>);</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         cpl_vector_delete(out);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     cpl_vector_multiply_scalar(out, f0_erg/cent_val);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> }</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno"><a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea">  773</a></span> cpl_bivector * <a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea" title="Get the SED.">irplib_stdstar_get_sed</a>(</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   seds_file,</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   sptype)</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     cpl_table           *   seds;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     cpl_bivector        *   out;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     cpl_vector          *   wave;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     cpl_vector          *   sed;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     cpl_bivector        *   tmp;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     <span class="keywordtype">int</span>                     nlines;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     <span class="keywordflow">if</span> (seds_file == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     <span class="keywordflow">if</span> (sptype == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     <span class="comment">/* Load the table */</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="keywordflow">if</span> ((seds = cpl_table_load(seds_file, 1, 0)) == NULL) {</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot load the table"</span>);</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     }</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="comment">/* Check if the column is there */</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keywordflow">if</span> (!cpl_table_has_column(seds, sptype)) {</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"SED of the requested star not available"</span>);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>         cpl_table_delete(seds);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="comment">/* Get the nb lines */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     nlines = cpl_table_get_nrow(seds);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="comment">/* Get the wavelength as a vector */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordflow">if</span> ((wave = cpl_vector_wrap(nlines,</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             cpl_table_get_data_double(seds, <span class="stringliteral">"Wavelength"</span>))) == NULL) {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot get the Wavelength column"</span>);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         cpl_table_delete(seds);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     <span class="comment">/* Get the SED as a vector */</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordflow">if</span> ((sed = cpl_vector_wrap(nlines,</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             cpl_table_get_data_double(seds, sptype))) == NULL) {</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot get the SED column"</span>);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>         cpl_table_delete(seds);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         cpl_vector_unwrap(wave);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     tmp = cpl_bivector_wrap_vectors(wave, sed);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="comment">/* Create the output bivector */</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     out = cpl_bivector_duplicate(tmp);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> </div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="comment">/* Free */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     cpl_bivector_unwrap_vectors(tmp);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     cpl_vector_unwrap(wave);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     cpl_vector_unwrap(sed);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     cpl_table_delete(seds);</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__stdstar_8h_source.html b/html/irplib__stdstar_8h_source.html
index 1413e85..af30761 100644
--- a/html/irplib__stdstar_8h_source.html
+++ b/html/irplib__stdstar_8h_source.html
@@ -2,95 +2,126 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_stdstar.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_stdstar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_stdstar.h,v 1.16 2013/02/27 10:37:52 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/02/27 10:37:52 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.16 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_STDSTAR_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STDSTAR_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Defines</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#define     IRPLIB_STDSTAR_STAR_COL     "STARS"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_TYPE_COL     "SP_TYPE"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_RA_COL       "RA"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_DEC_COL      "DEC"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_CAT_COL      "CATALOG"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="comment">/* Maximum allowed distance [arc minutes] between observation and</span>
-<a name="l00048"></a>00048 <span class="comment">   catalogue coordinates  */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define     IRPLIB_STDSTAR_MAXDIST       2.0</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="comment">/* Magical value to indicate an invalid magnitude  */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define     IRPLIB_STDSTAR_NOMAG         99.0</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="comment">/* Use this limit in comparisons regarding an invalid magnitude  */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define     IRPLIB_STDSTAR_LIMIT         (IRPLIB_STDSTAR_NOMAG-1.0)</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                                   Function prototypes</span>
-<a name="l00059"></a>00059 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 cpl_error_code
-<a name="l00062"></a>00062 <a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(cpl_frameset *, <span class="keyword">const</span> cpl_frameset *,
-<a name="l00063"></a>00063                               <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00064"></a>00064                               <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00065"></a>00065                               cpl_table * (*)(<span class="keyword">const</span> <span class="keywordtype">char</span> *));
-<a name="l00066"></a>00066 cpl_table * <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00067"></a>00067 cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(<span class="keyword">const</span> cpl_table  *);
-<a name="l00068"></a>00068 <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(cpl_table *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00069"></a>00069 <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00070"></a>00070 <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(<span class="keyword">const</span> cpl_table *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00071"></a>00071 cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027" title="Find the closest star to ra, dec in the catalog.">irplib_stdstar_find_star</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *, 
-<a name="l00072"></a>00072         <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **, 
-<a name="l00073"></a>00073         <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>  * , <span class="keywordtype">double</span>);
-<a name="l00074"></a>00074 cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba" title="Get the conversion.">irplib_stdstar_get_conversion</a>(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00075"></a>00075         <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00076"></a>00076 cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab" title="Get the 0 magnitude spectrum.">irplib_stdstar_get_mag_zero</a>(<span class="keyword">const</span> cpl_bivector *,
-<a name="l00077"></a>00077         <span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>);
-<a name="l00078"></a>00078 cpl_bivector * <a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea" title="Get the SED.">irplib_stdstar_get_sed</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_stdstar.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_stdstar.h,v 1.16 2013/02/27 10:37:52 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/02/27 10:37:52 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.16 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_STDSTAR_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STDSTAR_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#define     IRPLIB_STDSTAR_STAR_COL     "STARS"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_TYPE_COL     "SP_TYPE"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_RA_COL       "RA"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_DEC_COL      "DEC"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define     IRPLIB_STDSTAR_CAT_COL      "CATALOG"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Maximum allowed distance [arc minutes] between observation and</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   catalogue coordinates  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#define     IRPLIB_STDSTAR_MAXDIST       2.0</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* Magical value to indicate an invalid magnitude  */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#define     IRPLIB_STDSTAR_NOMAG         99.0</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* Use this limit in comparisons regarding an invalid magnitude  */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#define     IRPLIB_STDSTAR_LIMIT         (IRPLIB_STDSTAR_NOMAG-1.0)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                                   Function prototypes</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_error_code</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(cpl_frameset *, <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               cpl_table * (*)(<span class="keyword">const</span> <span class="keywordtype">char</span> *));</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> cpl_table * <a class="code" href="group__irplib__stdstar.html#ga1690bd84c24e905e384b8f725bf7aff1" title="Load the FITS catalog in a table.">irplib_stdstar_load_catalog</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga2dbe2031bf6d669778dca42f6c343efc" title="Check that the table has the relevant columns of a stdstar table.">irplib_stdstar_check_columns_exist</a>(<span class="keyword">const</span> cpl_table  *);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga080e06303f3f83a91959ac01381dc4e8" title="Select the stars that are within a given distance.">irplib_stdstar_select_stars_dist</a>(cpl_table *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga28316d8f0619bdbd0040b1f56799e7ab" title="Select the stars that have a known magnitude.">irplib_stdstar_select_stars_mag</a>(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__stdstar.html#ga36b4c90fd548dd0c00afe97b17a558e5" title="Find the closest star.">irplib_stdstar_find_closest</a>(<span class="keyword">const</span> cpl_table *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> cpl_error_code <a class="code" href="group__irplib__stdstar.html#ga4d69ae957de04b1769ac225f12834027" title="Find the closest star to ra, dec in the catalog.">irplib_stdstar_find_star</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keyword">const</span> <span class="keywordtype">char</sp [...]
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **, <span class="keywordtype">char</span> **, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>  * , <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga93b46d8ac857a0d0fdc781b56a91a8ba" title="Get the conversion.">irplib_stdstar_get_conversion</a>(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> cpl_vector * <a class="code" href="group__irplib__stdstar.html#ga6e68e6a9d0bbb41ef717234b9f289dab" title="Get the 0 magnitude spectrum.">irplib_stdstar_get_mag_zero</a>(<span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="keyword">const</span> cpl_vector *, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> cpl_bivector * <a class="code" href="group__irplib__stdstar.html#gabbad67ff18cb901914caa9e864969dea" title="Get the SED.">irplib_stdstar_get_sed</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__strehl_8c_source.html b/html/irplib__strehl_8c_source.html
index 8595df7..59d9418 100644
--- a/html/irplib__strehl_8c_source.html
+++ b/html/irplib__strehl_8c_source.html
@@ -2,676 +2,707 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_strehl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_strehl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_strehl.c,v 1.43 2009/11/18 21:37:48 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/11/18 21:37:48 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.43 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <assert.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <math.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <float.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "irplib_strehl.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                                   Define</span>
-<a name="l00054"></a>00054 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#ifndef IRPLIB_STREHL_RAD_CENTRAL</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_RAD_CENTRAL 5</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#define IRPLIB_DISK_BG_MIN_PIX_NB    30</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISK_BG_REJ_LOW       0.1</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISK_BG_REJ_HIGH      0.1</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">                                   Functions prototypes</span>
-<a name="l00066"></a>00066 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">static</span> cpl_image * irplib_strehl_generate_otf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00069"></a>00069                                               <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H1(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_G(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_sinc(<span class="keywordtype">double</span>);
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_TelOTF(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00075"></a>00075 <span class="keyword">static</span> cpl_error_code update_bad_pixel_map(cpl_image* im);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                                   Functions code</span>
-<a name="l00080"></a>00080 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 cpl_error_code update_bad_pixel_map(cpl_image* im)
-<a name="l00089"></a>00089 {
-<a name="l00090"></a>00090     <span class="keywordtype">int</span> szx = cpl_image_get_size_x(im);
-<a name="l00091"></a>00091     <span class="keywordtype">int</span> szy = cpl_image_get_size_y(im);
-<a name="l00092"></a>00092     <span class="keywordtype">int</span> x = 0;
-<a name="l00093"></a>00093     cpl_mask* bpm = cpl_image_get_bpm(im);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     <span class="keywordflow">for</span> (x = 1; x <=szx; x++)
-<a name="l00096"></a>00096     {
-<a name="l00097"></a>00097         <span class="keywordtype">int</span> y = 0;
-<a name="l00098"></a>00098         <span class="keywordflow">for</span>(y = 1; y <= szy; y++)
-<a name="l00099"></a>00099         {
-<a name="l00100"></a>00100             <span class="keywordtype">int</span> isnull = 0;
-<a name="l00101"></a>00101             <span class="keywordtype">double</span> value = cpl_image_get(im, x, y, &isnull);
-<a name="l00102"></a>00102             <span class="keywordflow">if</span> (isnan(value))
-<a name="l00103"></a>00103             {
-<a name="l00104"></a>00104                 cpl_mask_set(bpm, x, y, CPL_BINARY_1);
-<a name="l00105"></a>00105             }
-<a name="l00106"></a>00106         }
-<a name="l00107"></a>00107     }
-<a name="l00108"></a>00108     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00109"></a>00109 }
-<a name="l00140"></a>00140 cpl_error_code irplib_strehl_mark_bad_and_compute(cpl_image *   im,
-<a name="l00141"></a>00141                                      <span class="keywordtype">double</span>              m1,
-<a name="l00142"></a>00142                                      <span class="keywordtype">double</span>              m2,
-<a name="l00143"></a>00143                                      <span class="keywordtype">double</span>              lam,
-<a name="l00144"></a>00144                                      <span class="keywordtype">double</span>              dlam,
-<a name="l00145"></a>00145                                      <span class="keywordtype">double</span>              pscale,
-<a name="l00146"></a>00146                                      <span class="keywordtype">int</span>                 size,
-<a name="l00147"></a>00147                                      <span class="keywordtype">double</span>              xpos,
-<a name="l00148"></a>00148                                      <span class="keywordtype">double</span>              ypos,
-<a name="l00149"></a>00149                                      <span class="keywordtype">double</span>              r1,
-<a name="l00150"></a>00150                                      <span class="keywordtype">double</span>              r2,
-<a name="l00151"></a>00151                                      <span class="keywordtype">double</span>              r3,
-<a name="l00152"></a>00152                                      <span class="keywordtype">int</span>                 noise_box_sz,
-<a name="l00153"></a>00153                                      <span class="keywordtype">int</span>                 noise_nsamples,
-<a name="l00154"></a>00154                                      <span class="keywordtype">double</span>          *   strehl,
-<a name="l00155"></a>00155                                      <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l00156"></a>00156                                      <span class="keywordtype">double</span>          *   star_bg,
-<a name="l00157"></a>00157                                      <span class="keywordtype">double</span>          *   star_peak,
-<a name="l00158"></a>00158                                      <span class="keywordtype">double</span>          *   star_flux,
-<a name="l00159"></a>00159                                      <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l00160"></a>00160                                      <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l00161"></a>00161                                      <span class="keywordtype">double</span>          *   bg_noise)
-<a name="l00162"></a>00162 {
-<a name="l00163"></a>00163     cpl_ensure_code(!update_bad_pixel_map(im), cpl_error_get_code());
-<a name="l00164"></a>00164     <span class="keywordflow">return</span> irplib_strehl_compute(im, m1, m2, lam, dlam, pscale, size, xpos, ypos,
-<a name="l00165"></a>00165             r1,
-<a name="l00166"></a>00166             r2,
-<a name="l00167"></a>00167             r3,
-<a name="l00168"></a>00168             noise_box_sz,
-<a name="l00169"></a>00169             noise_nsamples,
-<a name="l00170"></a>00170             strehl,
-<a name="l00171"></a>00171             strehl_err,
-<a name="l00172"></a>00172             star_bg,
-<a name="l00173"></a>00173             star_peak,
-<a name="l00174"></a>00174             star_flux,
-<a name="l00175"></a>00175             psf_peak,
-<a name="l00176"></a>00176             psf_flux,
-<a name="l00177"></a>00177             bg_noise);
-<a name="l00178"></a>00178 }
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00211"></a>00211 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00212"></a>00212 cpl_error_code irplib_strehl_compute(<span class="keyword">const</span> cpl_image *   im,
-<a name="l00213"></a>00213                                      <span class="keywordtype">double</span>              m1,
-<a name="l00214"></a>00214                                      <span class="keywordtype">double</span>              m2,
-<a name="l00215"></a>00215                                      <span class="keywordtype">double</span>              lam,
-<a name="l00216"></a>00216                                      <span class="keywordtype">double</span>              dlam,
-<a name="l00217"></a>00217                                      <span class="keywordtype">double</span>              pscale,
-<a name="l00218"></a>00218                                      <span class="keywordtype">int</span>                 size,
-<a name="l00219"></a>00219                                      <span class="keywordtype">double</span>              xpos,
-<a name="l00220"></a>00220                                      <span class="keywordtype">double</span>              ypos,
-<a name="l00221"></a>00221                                      <span class="keywordtype">double</span>              r1,
-<a name="l00222"></a>00222                                      <span class="keywordtype">double</span>              r2,
-<a name="l00223"></a>00223                                      <span class="keywordtype">double</span>              r3,
-<a name="l00224"></a>00224                                      <span class="keywordtype">int</span>                 noise_box_sz,
-<a name="l00225"></a>00225                                      <span class="keywordtype">int</span>                 noise_nsamples,
-<a name="l00226"></a>00226                                      <span class="keywordtype">double</span>          *   strehl,
-<a name="l00227"></a>00227                                      <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l00228"></a>00228                                      <span class="keywordtype">double</span>          *   star_bg,
-<a name="l00229"></a>00229                                      <span class="keywordtype">double</span>          *   star_peak,
-<a name="l00230"></a>00230                                      <span class="keywordtype">double</span>          *   star_flux,
-<a name="l00231"></a>00231                                      <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l00232"></a>00232                                      <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l00233"></a>00233                                      <span class="keywordtype">double</span>          *   bg_noise)
-<a name="l00234"></a>00234 {
-<a name="l00235"></a>00235     cpl_image  * psf;
-<a name="l00236"></a>00236     <span class="keywordtype">double</span>       star_radius, max_radius;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     <span class="comment">/* FIXME: Arbitrary choice of image border */</span>
-<a name="l00239"></a>00239     <span class="keyword">const</span> <span class="keywordtype">double</span> window_size = (double)(IRPLIB_STREHL_RAD_CENTRAL);
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="comment">/* Determined empirically by C. Lidman for Strehl error computation */</span>
-<a name="l00242"></a>00242     <span class="keyword">const</span> <span class="keywordtype">double</span> strehl_error_coefficient = CPL_MATH_PI * 0.007 / 0.0271;
-<a name="l00243"></a>00243     <span class="keywordtype">double</span>       ring[4];
-<a name="l00244"></a>00244     <span class="comment">/* cpl_flux_get_noise_ring() must succeed with this many tries */</span>
-<a name="l00245"></a>00245     <span class="keywordtype">int</span>          ring_tries = 3;
-<a name="l00246"></a>00246     cpl_errorstate prestate;
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     <span class="comment">/* Check compile-time constant */</span>
-<a name="l00249"></a>00249     cpl_ensure_code(window_size > 0.0,  CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     <span class="comment">/* Test inputs */</span>
-<a name="l00252"></a>00252     cpl_ensure_code(im != NULL,         CPL_ERROR_NULL_INPUT);
-<a name="l00253"></a>00253     cpl_ensure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);
-<a name="l00254"></a>00254     cpl_ensure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00255"></a>00255     cpl_ensure_code(star_bg != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l00256"></a>00256     cpl_ensure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l00257"></a>00257     cpl_ensure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l00258"></a>00258     cpl_ensure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l00259"></a>00259     cpl_ensure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     cpl_ensure_code(pscale > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     cpl_ensure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00264"></a>00264     cpl_ensure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00265"></a>00265     cpl_ensure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span>
-<a name="l00268"></a>00268     <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span>
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270     <span class="comment">/* Generate first appropriate PSF to find max peak */</span>
-<a name="l00271"></a>00271     psf = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale, size);
-<a name="l00272"></a>00272     cpl_ensure_code(psf != NULL,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     <span class="comment">/* Compute flux in PSF and find max peak */</span>
-<a name="l00275"></a>00275     *psf_peak = cpl_image_get_max(psf);
-<a name="l00276"></a>00276     cpl_image_delete(psf);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     assert( *psf_peak > 0.0); <span class="comment">/* The ideal PSF has a positive maximum */</span>
-<a name="l00279"></a>00279     *psf_flux = 1.0; <span class="comment">/* The psf flux, cpl_image_get_flux(psf), is always 1 */</span>
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="comment">/* Measure the background in the candidate image */</span>
-<a name="l00282"></a>00282     *star_bg = irplib_strehl_ring_background(im, xpos, ypos, r2/pscale, r3/pscale,
-<a name="l00283"></a>00283                                              IRPLIB_BG_METHOD_AVER_REJ);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     <span class="comment">/* Compute star_radius in pixels */</span>
-<a name="l00286"></a>00286     star_radius = r1/pscale;
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     <span class="comment">/* Measure the flux on the candidate image */</span>
-<a name="l00289"></a>00289     *star_flux = irplib_strehl_disk_flux(im, xpos, ypos, star_radius, *star_bg);
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     cpl_ensure_code(*star_flux > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     <span class="comment">/* Find the peak value on the central part of the candidate image */</span>
-<a name="l00294"></a>00294     max_radius = window_size < star_radius ? window_size : star_radius;
-<a name="l00295"></a>00295     cpl_ensure_code(!irplib_strehl_disk_max(im, xpos, ypos, max_radius,
-<a name="l00296"></a>00296                                             star_peak), cpl_error_get_code());
-<a name="l00297"></a>00297     *star_peak -= *star_bg;
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     cpl_ensure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <span class="comment">/* Compute Strehl */</span>
-<a name="l00302"></a>00302     <span class="comment">/* (StarPeak / StarFlux) / (PsfPeak / PsfFlux) */</span>
-<a name="l00303"></a>00303     *strehl = (*star_peak * *psf_flux ) / ( *star_flux * *psf_peak);
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305     <span class="keywordflow">if</span> (*strehl > 1)
-<a name="l00306"></a>00306         cpl_msg_warning(cpl_func, <span class="stringliteral">"Extreme Strehl-ratio=%g, star_peak=%g, "</span>
-<a name="l00307"></a>00307                         <span class="stringliteral">"star_flux=%g, psf_peak=%g, psf_flux=%g"</span>, *strehl,
-<a name="l00308"></a>00308                         *star_peak, *star_flux, *psf_peak, *psf_flux);
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310     <span class="comment">/* Compute Strehl error */</span>
-<a name="l00311"></a>00311     <span class="comment">/* computation could fail if the image contains pixels with NaN value*/</span>
-<a name="l00312"></a>00312     ring[0] = xpos;
-<a name="l00313"></a>00313     ring[1] = ypos;
-<a name="l00314"></a>00314     ring[2] = r2/pscale;
-<a name="l00315"></a>00315     ring[3] = r3/pscale;
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317     <span class="comment">/* FIXME: With CPL 5.1 the recoverable error</span>
-<a name="l00318"></a>00318 <span class="comment">       will be CPL_ERROR_DATA_NOT_FOUND */</span>
-<a name="l00319"></a>00319     prestate = cpl_errorstate_get();
-<a name="l00320"></a>00320     <span class="keywordflow">while</span> (cpl_flux_get_noise_ring(im, ring, noise_box_sz, noise_nsamples,
-<a name="l00321"></a>00321                                    bg_noise, NULL) && --ring_tries > 0);
-<a name="l00322"></a>00322     <span class="keywordflow">if</span> (ring_tries > 0) {
-<a name="l00323"></a>00323         cpl_errorstate_set(prestate); <span class="comment">/* Recover, if an error happened */</span>
-<a name="l00324"></a>00324     } <span class="keywordflow">else</span> {
-<a name="l00325"></a>00325         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00326"></a>00326     }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     *strehl_err = strehl_error_coefficient * (*bg_noise) * pscale *
-<a name="l00329"></a>00329         star_radius * star_radius / *star_flux;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="comment">/* This check should not be able to fail, but just to be sure */</span>
-<a name="l00332"></a>00332     cpl_ensure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00335"></a>00335 }
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00353"></a>00353 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00354"></a>00354 <span class="keywordtype">double</span> irplib_strehl_disk_flux(<span class="keyword">const</span> cpl_image * im,
-<a name="l00355"></a>00355                                <span class="keywordtype">double</span>            xpos,
-<a name="l00356"></a>00356                                <span class="keywordtype">double</span>            ypos,
-<a name="l00357"></a>00357                                <span class="keywordtype">double</span>            rad,
-<a name="l00358"></a>00358                                <span class="keywordtype">double</span>            bg)
-<a name="l00359"></a>00359 {
-<a name="l00360"></a>00360     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr = rad * rad;
-<a name="l00361"></a>00361     <span class="keywordtype">double</span>          sqrest;
-<a name="l00362"></a>00362     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pim;
-<a name="l00363"></a>00363     <span class="keywordtype">double</span>          flux = 0.0;
-<a name="l00364"></a>00364     <span class="keywordtype">double</span>          yj, xi;
-<a name="l00365"></a>00365     <span class="keywordtype">int</span>             nx, ny;
-<a name="l00366"></a>00366     <span class="keywordtype">int</span>             lx, ly, ux, uy;
-<a name="l00367"></a>00367     <span class="keywordtype">int</span>             i, j;
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     <span class="comment">/* Check entries */</span>
-<a name="l00371"></a>00371     cpl_ensure(im != NULL, CPL_ERROR_NULL_INPUT, 0.0);
-<a name="l00372"></a>00372     cpl_ensure(cpl_image_get_type(im) == CPL_TYPE_FLOAT,
-<a name="l00373"></a>00373                CPL_ERROR_UNSUPPORTED_MODE, 0.0);
-<a name="l00374"></a>00374     cpl_ensure(rad > 0.0, CPL_ERROR_ILLEGAL_INPUT, 0.0);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     nx = cpl_image_get_size_x(im);
-<a name="l00377"></a>00377     ny = cpl_image_get_size_y(im);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="comment">/* Round down */</span>
-<a name="l00380"></a>00380     lx = (int)(xpos - rad);
-<a name="l00381"></a>00381     ly = (int)(ypos - rad);
-<a name="l00382"></a>00382     <span class="keywordflow">if</span> (lx < 0) lx = 0;
-<a name="l00383"></a>00383     <span class="keywordflow">if</span> (ly < 0) ly = 0;
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     <span class="comment">/* Round up */</span>
-<a name="l00386"></a>00386     ux = (int)(xpos + rad) + 1;
-<a name="l00387"></a>00387     uy = (int)(ypos + rad) + 1;
-<a name="l00388"></a>00388     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;
-<a name="l00389"></a>00389     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391     pim = cpl_image_get_data_float_const(im);
-<a name="l00392"></a>00392     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {
-<a name="l00393"></a>00393         yj = (double)j - ypos;
-<a name="l00394"></a>00394         sqrest = sqr - yj * yj;
-<a name="l00395"></a>00395         <span class="keywordflow">for</span> (i=lx; i<ux ; i++) {
-<a name="l00396"></a>00396             xi = (double)i - xpos;
-<a name="l00397"></a>00397             <span class="keywordflow">if</span> (sqrest >= xi * xi && <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pim[i+j*nx]) == 0) {
-<a name="l00398"></a>00398                 flux += (double)pim[i+j*nx] - bg;
-<a name="l00399"></a>00399             }
-<a name="l00400"></a>00400         }
-<a name="l00401"></a>00401     }
-<a name="l00402"></a>00402     <span class="keywordflow">return</span> flux;
-<a name="l00403"></a>00403 }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00419"></a>00419 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00420"></a>00420 <span class="keywordtype">double</span> irplib_strehl_ring_background(<span class="keyword">const</span> cpl_image *       im,
-<a name="l00421"></a>00421                                      <span class="keywordtype">double</span>                  xpos,
-<a name="l00422"></a>00422                                      <span class="keywordtype">double</span>                  ypos,
-<a name="l00423"></a>00423                                      <span class="keywordtype">double</span>                  rad_int,
-<a name="l00424"></a>00424                                      <span class="keywordtype">double</span>                  rad_ext,
-<a name="l00425"></a>00425                                      irplib_strehl_bg_method mode)
-<a name="l00426"></a>00426 {
-<a name="l00427"></a>00427     <span class="keywordtype">int</span>             npix;
-<a name="l00428"></a>00428     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr_int = rad_int * rad_int;
-<a name="l00429"></a>00429     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr_ext = rad_ext * rad_ext;
-<a name="l00430"></a>00430     <span class="keywordtype">double</span>          dist;
-<a name="l00431"></a>00431     cpl_vector  *   pix_arr;
-<a name="l00432"></a>00432     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pim;
-<a name="l00433"></a>00433     <span class="keywordtype">double</span>          flux = 0.0;
-<a name="l00434"></a>00434     <span class="keywordtype">double</span>          yj, xi;
-<a name="l00435"></a>00435     <span class="keywordtype">int</span>             lx, ly, ux, uy;
-<a name="l00436"></a>00436     <span class="keywordtype">int</span>             nx, ny;
-<a name="l00437"></a>00437     <span class="keywordtype">int</span>             i, j;
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439     <span class="comment">/* Check entries */</span>
-<a name="l00440"></a>00440     cpl_ensure(im != NULL, CPL_ERROR_NULL_INPUT, 0.0);
-<a name="l00441"></a>00441     cpl_ensure(cpl_image_get_type(im) == CPL_TYPE_FLOAT,
-<a name="l00442"></a>00442                CPL_ERROR_UNSUPPORTED_MODE, 0.0);
-<a name="l00443"></a>00443     cpl_ensure(rad_int > 0.0, CPL_ERROR_ILLEGAL_INPUT, 0.0);
-<a name="l00444"></a>00444     cpl_ensure(rad_ext > rad_int, CPL_ERROR_ILLEGAL_INPUT, 0.0);
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446     cpl_ensure(mode == IRPLIB_BG_METHOD_AVER_REJ ||
-<a name="l00447"></a>00447                mode == IRPLIB_BG_METHOD_MEDIAN,
-<a name="l00448"></a>00448                CPL_ERROR_UNSUPPORTED_MODE, 0.0);
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450     nx = cpl_image_get_size_x(im);
-<a name="l00451"></a>00451     ny = cpl_image_get_size_y(im);
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453     <span class="comment">/* Round down */</span>
-<a name="l00454"></a>00454     lx = (int)(xpos - rad_ext);
-<a name="l00455"></a>00455     ly = (int)(ypos - rad_ext);
-<a name="l00456"></a>00456     <span class="keywordflow">if</span> (lx < 0) lx = 0;
-<a name="l00457"></a>00457     <span class="keywordflow">if</span> (ly < 0) ly = 0;
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459     <span class="comment">/* Round up */</span>
-<a name="l00460"></a>00460     ux = (int)(xpos + rad_ext) + 1;
-<a name="l00461"></a>00461     uy = (int)(ypos + rad_ext) + 1;
-<a name="l00462"></a>00462     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;
-<a name="l00463"></a>00463     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     npix = (ux - lx + 1) * (uy - ly + 1);
-<a name="l00466"></a>00466     cpl_ensure(npix >= IRPLIB_DISK_BG_MIN_PIX_NB, CPL_ERROR_DATA_NOT_FOUND, 0.0);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468     <span class="comment">/* Allocate pixel array to hold values in the ring */</span>
-<a name="l00469"></a>00469     pix_arr = cpl_vector_new(npix);
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471     <span class="comment">/* Count number of pixels in the ring */</span>
-<a name="l00472"></a>00472     <span class="comment">/* Retrieve all pixels which belong to the ring */</span>
-<a name="l00473"></a>00473     pim = cpl_image_get_data_float_const(im);
-<a name="l00474"></a>00474     npix = 0;
-<a name="l00475"></a>00475     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {
-<a name="l00476"></a>00476         yj = (double)j - ypos;
-<a name="l00477"></a>00477         <span class="keywordflow">for</span> (i=lx ; i<ux; i++) {
-<a name="l00478"></a>00478             xi = (double)i - xpos;
-<a name="l00479"></a>00479             dist = yj * yj + xi * xi;
-<a name="l00480"></a>00480             <span class="keywordflow">if</span> (sqr_int <= dist && dist <= sqr_ext &&
-<a name="l00481"></a>00481                 <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pim[i+j*nx]) == 0) {
-<a name="l00482"></a>00482                 cpl_vector_set(pix_arr, npix, (<span class="keywordtype">double</span>)pim[i+j*nx]);
-<a name="l00483"></a>00483                 npix++;
-<a name="l00484"></a>00484             }
-<a name="l00485"></a>00485         }
-<a name="l00486"></a>00486     }
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488     <span class="keywordflow">if</span> (npix < IRPLIB_DISK_BG_MIN_PIX_NB) {
-<a name="l00489"></a>00489         cpl_vector_delete(pix_arr);
-<a name="l00490"></a>00490         cpl_ensure(0, CPL_ERROR_DATA_NOT_FOUND, 0.0);
-<a name="l00491"></a>00491     }
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493     <span class="comment">/* Should not be able to fail now */</span>
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     <span class="comment">/* Resize pixel array to actual number of values within the ring */</span>
-<a name="l00496"></a>00496     cpl_vector_set_size(pix_arr, npix);
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498     <span class="keywordflow">if</span> (mode == IRPLIB_BG_METHOD_AVER_REJ) {
-<a name="l00499"></a>00499         <span class="keyword">const</span> <span class="keywordtype">int</span> low_ind  = (int)((<span class="keywordtype">double</span>)npix * IRPLIB_DISK_BG_REJ_LOW);
-<a name="l00500"></a>00500         <span class="keyword">const</span> <span class="keywordtype">int</span> high_ind = (int)((<span class="keywordtype">double</span>)npix
-<a name="l00501"></a>00501                                    * (1.0 - IRPLIB_DISK_BG_REJ_HIGH));
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503         <span class="comment">/* Sort the array */</span>
-<a name="l00504"></a>00504         cpl_vector_sort(pix_arr, 1);
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506         <span class="keywordflow">for</span> (i=low_ind ; i<high_ind ; i++) {
-<a name="l00507"></a>00507             flux += cpl_vector_get(pix_arr, i);
-<a name="l00508"></a>00508         }
-<a name="l00509"></a>00509         <span class="keywordflow">if</span> (high_ind - low_ind > 1) flux /= (double)(high_ind - low_ind);
-<a name="l00510"></a>00510     } <span class="keywordflow">else</span> <span class="comment">/* if (mode == IRPLIB_BG_METHOD_MEDIAN) */</span> {
-<a name="l00511"></a>00511         flux = cpl_vector_get_median(pix_arr);
-<a name="l00512"></a>00512     }
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514     cpl_vector_delete(pix_arr);
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516     <span class="keywordflow">return</span> flux;
-<a name="l00517"></a>00517 }
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00539"></a>00539 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00540"></a>00540 cpl_image * irplib_strehl_generate_psf(
-<a name="l00541"></a>00541         <span class="keywordtype">double</span>   m1,
-<a name="l00542"></a>00542         <span class="keywordtype">double</span>   m2,
-<a name="l00543"></a>00543         <span class="keywordtype">double</span>   lam,
-<a name="l00544"></a>00544         <span class="keywordtype">double</span>   dlam,
-<a name="l00545"></a>00545         <span class="keywordtype">double</span>   pscale,
-<a name="l00546"></a>00546         <span class="keywordtype">int</span>      size)
-<a name="l00547"></a>00547 {
-<a name="l00548"></a>00548     cpl_image * otf_image = irplib_strehl_generate_otf(m1, m2, lam, dlam,
-<a name="l00549"></a>00549             size, pscale);
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551     <span class="keywordflow">if</span> (otf_image == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553     <span class="comment">/* Transform back to real space</span>
-<a name="l00554"></a>00554 <span class="comment">       - Normalization is unnecessary, due to the subsequent normalisation.</span>
-<a name="l00555"></a>00555 <span class="comment">       - An OTF is point symmetric about its center, i.e. it is even,</span>
-<a name="l00556"></a>00556 <span class="comment">         i.e. the real space image is real.</span>
-<a name="l00557"></a>00557 <span class="comment">       - Because of this a forward FFT works as well.</span>
-<a name="l00558"></a>00558 <span class="comment">       - If the PSF ever needs to have its images halves swapped add</span>
-<a name="l00559"></a>00559 <span class="comment">         CPL_FFT_SWAP_HALVES to the FFT call.</span>
-<a name="l00560"></a>00560 <span class="comment">     */</span>
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562     <span class="keywordflow">if</span> (cpl_image_fft(otf_image, NULL, CPL_FFT_UNNORMALIZED) ||
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564         <span class="comment">/* Compute absolute values of PSF */</span>
-<a name="l00565"></a>00565         cpl_image_abs(otf_image) ||
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567         <span class="comment">/* Normalize PSF to get flux=1  */</span>
-<a name="l00568"></a>00568         cpl_image_normalise(otf_image, CPL_NORM_FLUX)) {
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570         cpl_image_delete(otf_image);
-<a name="l00571"></a>00571         <span class="keywordflow">return</span> NULL;
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574     <span class="keywordflow">return</span> otf_image;
-<a name="l00575"></a>00575 }
-<a name="l00576"></a>00576 
-<a name="l00579"></a>00579 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00595"></a>00595 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00596"></a>00596 <span class="keyword">static</span> cpl_image * irplib_strehl_generate_otf(
-<a name="l00597"></a>00597         <span class="keywordtype">double</span>  m1,
-<a name="l00598"></a>00598         <span class="keywordtype">double</span>  m2,
-<a name="l00599"></a>00599         <span class="keywordtype">double</span>  lam,
-<a name="l00600"></a>00600         <span class="keywordtype">double</span>  dlam,
-<a name="l00601"></a>00601         <span class="keywordtype">int</span>     size,
-<a name="l00602"></a>00602         <span class="keywordtype">double</span>  pscale)
-<a name="l00603"></a>00603 {
-<a name="l00604"></a>00604     cpl_image   *   otf_image;
-<a name="l00605"></a>00605     <span class="keywordtype">double</span>      *   otf_data;
-<a name="l00606"></a>00606     <span class="keywordtype">double</span>          obs_ratio ;  <span class="comment">/* m1 / m2    */</span>
-<a name="l00607"></a>00607     <span class="keywordtype">double</span>          f_max ;      <span class="comment">/* cut-off frequency        */</span>
-<a name="l00608"></a>00608     <span class="keywordtype">int</span>             pix0 ;      <span class="comment">/* Pixel corresponding to the zero frequency */</span>
-<a name="l00609"></a>00609     <span class="keywordtype">double</span>          a, x, y;
-<a name="l00610"></a>00610     <span class="keywordtype">double</span>          f, rsq, fc, invfc, lambda;
-<a name="l00611"></a>00611     <span class="keywordtype">double</span>          sincy;
-<a name="l00612"></a>00612     <span class="keywordtype">double</span>          invsize;
-<a name="l00613"></a>00613     <span class="keyword">register</span> <span class="keywordtype">int</span>    pos;
-<a name="l00614"></a>00614     <span class="keywordtype">int</span>             i, j, k;
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617     cpl_ensure(m2   > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00618"></a>00618     cpl_ensure(m1   > m2,       CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00619"></a>00619     cpl_ensure(lam  > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00620"></a>00620     cpl_ensure(dlam > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00621"></a>00621     cpl_ensure(size > 0,        CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00622"></a>00622     cpl_ensure(pscale > 0.0,    CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624     <span class="comment">/* Convert pixel scale from sec to radians, microns in meters    */</span>
-<a name="l00625"></a>00625     pscale /= (double)206265;
-<a name="l00626"></a>00626     lam /= (double)1.0e6;
-<a name="l00627"></a>00627     dlam /= (double)1.0e6;
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629     <span class="comment">/* Obscuration ratio    */</span>
-<a name="l00630"></a>00630     obs_ratio = m2 / m1;
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632     <span class="comment">/* Pixel corresponding to the zero frequency    */</span>
-<a name="l00633"></a>00633     pix0 = size/2;
-<a name="l00634"></a>00634     invsize = (double)1.0 / (<span class="keywordtype">double</span>)size;
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636     <span class="comment">/* Cut-off frequency in pixels  */</span>
-<a name="l00637"></a>00637     f_max = m1 * pscale * (double)size / lam;
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639     <span class="comment">/* Allocate for output image    */</span>
-<a name="l00640"></a>00640     otf_image = cpl_image_new(size, size, CPL_TYPE_DOUBLE);
-<a name="l00641"></a>00641     <span class="keywordflow">if</span> (otf_image==NULL) <span class="keywordflow">return</span> NULL;
-<a name="l00642"></a>00642     otf_data = cpl_image_get_data_double(otf_image);
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644     <span class="comment">/* Now compute the OTF  */</span>
-<a name="l00645"></a>00645     <span class="comment">/* OPTIMIZED CODE !!! LIMITED READABILITY !!!   */</span>
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647     <span class="keywordflow">for</span> (k=1 ; k<=9 ; k++) {    <span class="comment">/* iteration on the wavelength  */</span>
-<a name="l00648"></a>00648         <span class="comment">/* Compute intermediate cut-off frequency   */</span>
-<a name="l00649"></a>00649         lambda = (double)(lam - dlam*(<span class="keywordtype">double</span>)(k-5)/8.0);
-<a name="l00650"></a>00650         fc = (double)f_max * (<span class="keywordtype">double</span>)lam / lambda;
-<a name="l00651"></a>00651         invfc = 1.0 / fc;
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653         <span class="comment">/* Convolution with the detector pixels */</span>
-<a name="l00654"></a>00654         pos = 0;
-<a name="l00655"></a>00655         <span class="keywordflow">for</span> (j=0 ; j<size ; j++) {
-<a name="l00656"></a>00656             y = (double)(j-pix0);
-<a name="l00657"></a>00657             sincy = PSF_sinc(CPL_MATH_PI * y * invsize);
-<a name="l00658"></a>00658             <span class="keywordflow">for</span> (i=0 ; i<size ; i++) {
-<a name="l00659"></a>00659                 x = (double)(i-pix0);
-<a name="l00660"></a>00660                 rsq = x*x + y*y;
-<a name="l00661"></a>00661                 <span class="keywordflow">if</span> (rsq < fc*fc) {
-<a name="l00662"></a>00662                     <span class="keywordflow">if</span> (rsq < 0.01)
-<a name="l00663"></a>00663                         a = 1.0;
-<a name="l00664"></a>00664                     <span class="keywordflow">else</span> {
-<a name="l00665"></a>00665                         f = sqrt(rsq) * invfc;
-<a name="l00666"></a>00666                         a = PSF_TelOTF(f,obs_ratio) *
-<a name="l00667"></a>00667                             PSF_sinc(CPL_MATH_PI * x * invsize) * sincy;
-<a name="l00668"></a>00668                     }
-<a name="l00669"></a>00669                 } <span class="keywordflow">else</span> {
-<a name="l00670"></a>00670                     a = 0.0;
-<a name="l00671"></a>00671                 }
-<a name="l00672"></a>00672                 otf_data[pos++] += a / 9.0;
-<a name="l00673"></a>00673             }
-<a name="l00674"></a>00674         }
-<a name="l00675"></a>00675     }
-<a name="l00676"></a>00676     <span class="keywordflow">return</span> otf_image;
-<a name="l00677"></a>00677 }
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679 <span class="comment">/*----------------------------------------------------------------------------*</span>
-<a name="l00680"></a>00680 <span class="comment"> * H1 function</span>
-<a name="l00681"></a>00681 <span class="comment"> *----------------------------------------------------------------------------*/</span>
-<a name="l00682"></a>00682 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H1(
-<a name="l00683"></a>00683         <span class="keywordtype">double</span>  f,
-<a name="l00684"></a>00684         <span class="keywordtype">double</span>  u,
-<a name="l00685"></a>00685         <span class="keywordtype">double</span>  v)
-<a name="l00686"></a>00686 {
-<a name="l00687"></a>00687     <span class="keyword">const</span> <span class="keywordtype">double</span> e = fabs(1.0-v) > 0.0 ? -1.0 : 1.0; <span class="comment">/* e = 1.0 iff v = 1.0 */</span>
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689     <span class="keywordflow">return</span>((v*v/CPL_MATH_PI)*acos((f/v)*(1.0+e*(1.0-u*u)/(4.0*f*f))));
-<a name="l00690"></a>00690 }
-<a name="l00691"></a>00691 
-<a name="l00692"></a>00692 <span class="comment">/*----------------------------------------------------------------------------*</span>
-<a name="l00693"></a>00693 <span class="comment"> * H2 function</span>
-<a name="l00694"></a>00694 <span class="comment"> *----------------------------------------------------------------------------*/</span>
-<a name="l00695"></a>00695 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H2(<span class="keywordtype">double</span>  f,
-<a name="l00696"></a>00696                      <span class="keywordtype">double</span>  u)
-<a name="l00697"></a>00697 {
-<a name="l00698"></a>00698     <span class="keyword">const</span> <span class="keywordtype">double</span> tmp1 = (2.0 * f) / (1.0 + u);
-<a name="l00699"></a>00699     <span class="keyword">const</span> <span class="keywordtype">double</span> tmp2 = (1.0 - u) / (2.0 * f);
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701     <span class="keywordflow">return</span> -1.0 * (f/CPL_MATH_PI) * (1.0+u)
-<a name="l00702"></a>00702         * sqrt((1.0-tmp1*tmp1)*(1.0-tmp2*tmp2));
-<a name="l00703"></a>00703 }
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705 <span class="comment">/*----------------------------------------------------------------------------*</span>
-<a name="l00706"></a>00706 <span class="comment"> * G function</span>
-<a name="l00707"></a>00707 <span class="comment"> *----------------------------------------------------------------------------*/</span>
-<a name="l00708"></a>00708 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_G(<span class="keywordtype">double</span>  f,
-<a name="l00709"></a>00709                     <span class="keywordtype">double</span>  u)
-<a name="l00710"></a>00710 {
-<a name="l00711"></a>00711     <span class="keywordflow">if</span> (f <= (1.0-u)/2.0) <span class="keywordflow">return</span>(u*u);
-<a name="l00712"></a>00712     <span class="keywordflow">if</span> (f >= (1.0+u)/2.0) <span class="keywordflow">return</span>(0.0);
-<a name="l00713"></a>00713     <span class="keywordflow">else</span> <span class="keywordflow">return</span>(PSF_H1(f,u,1.0) + PSF_H1(f,u,u) + PSF_H2(f,u));
-<a name="l00714"></a>00714 }
-<a name="l00715"></a>00715 
-<a name="l00716"></a>00716 <span class="comment">/*----------------------------------------------------------------------------*</span>
-<a name="l00717"></a>00717 <span class="comment"> * sinc function</span>
-<a name="l00718"></a>00718 <span class="comment"> *----------------------------------------------------------------------------*/</span>
-<a name="l00719"></a>00719 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_sinc(<span class="keywordtype">double</span> x)
-<a name="l00720"></a>00720 {
-<a name="l00721"></a>00721   <span class="keywordflow">return</span> fabs(x) > fabs(sin(x)) ? sin(x)/x : 1.0;
-<a name="l00722"></a>00722 }
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724 <span class="comment">/*----------------------------------------------------------------------------*</span>
-<a name="l00725"></a>00725 <span class="comment"> * Telescope OTF function</span>
-<a name="l00726"></a>00726 <span class="comment"> *----------------------------------------------------------------------------*/</span>
-<a name="l00727"></a>00727 <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_TelOTF(<span class="keywordtype">double</span>  f,
-<a name="l00728"></a>00728                          <span class="keywordtype">double</span>  u)
-<a name="l00729"></a>00729 {
-<a name="l00730"></a>00730     <span class="keywordflow">return</span>((PSF_G(f,1.0)+u*u*PSF_G(f/u,1.0)-2.0*PSF_G(f,u))/(1.0-u*u));
-<a name="l00731"></a>00731 }
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00745"></a>00745 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00746"></a>00746 cpl_error_code irplib_strehl_disk_max(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,
-<a name="l00747"></a>00747                                              <span class="keywordtype">double</span>            xpos,
-<a name="l00748"></a>00748                                              <span class="keywordtype">double</span>            ypos,
-<a name="l00749"></a>00749                                              <span class="keywordtype">double</span>            radius,
-<a name="l00750"></a>00750                                              <span class="keywordtype">double</span>          * ppeak)
-<a name="l00751"></a>00751 {
-<a name="l00752"></a>00752 
-<a name="l00753"></a>00753     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr = radius * radius;
-<a name="l00754"></a>00754     <span class="keywordtype">double</span>          sqrest;
-<a name="l00755"></a>00755     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pself;
-<a name="l00756"></a>00756     <span class="keywordtype">float</span>           peak = FLT_MAX;  <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00757"></a>00757     <span class="keywordtype">double</span>          yj, xi;
-<a name="l00758"></a>00758     <span class="keywordtype">int</span>             nx, ny;
-<a name="l00759"></a>00759     <span class="keywordtype">int</span>             lx, ly, ux, uy;
-<a name="l00760"></a>00760     <span class="keywordtype">int</span>             i, j;
-<a name="l00761"></a>00761     cpl_boolean     first = CPL_TRUE;
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764     <span class="comment">/* Check entries */</span>
-<a name="l00765"></a>00765     cpl_ensure_code(ppeak != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00766"></a>00766     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00767"></a>00767     cpl_ensure_code(cpl_image_get_type(<span class="keyword">self</span>) == CPL_TYPE_FLOAT,
-<a name="l00768"></a>00768                     CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00769"></a>00769     cpl_ensure_code(radius > 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771     nx = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00772"></a>00772     ny = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774     <span class="comment">/* Round down */</span>
-<a name="l00775"></a>00775     lx = (int)(xpos - radius);
-<a name="l00776"></a>00776     ly = (int)(ypos - radius);
-<a name="l00777"></a>00777     <span class="keywordflow">if</span> (lx < 0) lx = 0;
-<a name="l00778"></a>00778     <span class="keywordflow">if</span> (ly < 0) ly = 0;
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780     <span class="comment">/* Round up */</span>
-<a name="l00781"></a>00781     ux = (int)(xpos + radius) + 1;
-<a name="l00782"></a>00782     uy = (int)(ypos + radius) + 1;
-<a name="l00783"></a>00783     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;
-<a name="l00784"></a>00784     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786     pself = cpl_image_get_data_float_const(<span class="keyword">self</span>);
-<a name="l00787"></a>00787     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {
-<a name="l00788"></a>00788         yj = (double)j - ypos;
-<a name="l00789"></a>00789         sqrest = sqr - yj * yj;
-<a name="l00790"></a>00790         <span class="keywordflow">for</span> (i=lx; i<ux ; i++) {
-<a name="l00791"></a>00791             xi = (double)i - xpos;
-<a name="l00792"></a>00792             <span class="keywordflow">if</span> (sqrest >= xi * xi && <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pself[i+j*nx]) == 0) {
-<a name="l00793"></a>00793                 <span class="keywordflow">if</span> (first || pself[i+j*nx] > peak) {
-<a name="l00794"></a>00794                     first = CPL_FALSE;
-<a name="l00795"></a>00795                     peak = pself[i+j*nx];
-<a name="l00796"></a>00796                 }
-<a name="l00797"></a>00797             }
-<a name="l00798"></a>00798         }
-<a name="l00799"></a>00799     }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     cpl_ensure_code(!first, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803     *ppeak = (double)peak;
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00806"></a>00806 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_strehl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_strehl.c,v 1.43 2009/11/18 21:37:48 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/11/18 21:37:48 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.43 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "irplib_strehl.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#ifndef IRPLIB_STREHL_RAD_CENTRAL</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_RAD_CENTRAL 5</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#define IRPLIB_DISK_BG_MIN_PIX_NB    30</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISK_BG_REJ_LOW       0.1</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DISK_BG_REJ_HIGH      0.1</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                                   Functions prototypes</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> cpl_image * irplib_strehl_generate_otf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                               <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H1(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H2(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_G(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_sinc(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_TelOTF(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> cpl_error_code update_bad_pixel_map(cpl_image* im);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                                   Functions code</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> cpl_error_code update_bad_pixel_map(cpl_image* im)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">int</span> szx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">int</span> szy = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">int</span> x = 0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_mask* bpm = cpl_image_get_bpm(im);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">for</span> (x = 1; x <=szx; x++)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">int</span> y = 0;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordflow">for</span>(y = 1; y <= szy; y++)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>             <span class="keywordtype">int</span> isnull = 0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>             <span class="keywordtype">double</span> value = cpl_image_get(im, x, y, &isnull);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>             <span class="keywordflow">if</span> (isnan(value))</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>             {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                 cpl_mask_set(bpm, x, y, CPL_BINARY_1);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>             }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> cpl_error_code irplib_strehl_mark_bad_and_compute(cpl_image *   im,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                                      <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                                      <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                                      <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                      <span class="keywordtype">double</span>              dlam,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                      <span class="keywordtype">double</span>              pscale,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                      <span class="keywordtype">int</span>                 size,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                      <span class="keywordtype">double</span>              xpos,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                      <span class="keywordtype">double</span>              ypos,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                      <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                      <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                      <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                      <span class="keywordtype">int</span>                 noise_box_sz,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                      <span class="keywordtype">int</span>                 noise_nsamples,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                      <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                      <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                      <span class="keywordtype">double</span>          *   star_bg,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                      <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                      <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                      <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                      <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                      <span class="keywordtype">double</span>          *   bg_noise)</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_ensure_code(!update_bad_pixel_map(im), cpl_error_get_code());</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">return</span> irplib_strehl_compute(im, m1, m2, lam, dlam, pscale, size, xpos, ypos,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>             r1,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>             r2,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>             r3,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             noise_box_sz,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>             noise_nsamples,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             strehl,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             strehl_err,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>             star_bg,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>             star_peak,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             star_flux,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>             psf_peak,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>             psf_flux,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>             bg_noise);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> cpl_error_code irplib_strehl_compute(<span class="keyword">const</span> cpl_image *   im,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                                      <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                                      <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                                      <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                      <span class="keywordtype">double</span>              dlam,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                      <span class="keywordtype">double</span>              pscale,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                                      <span class="keywordtype">int</span>                 size,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                                      <span class="keywordtype">double</span>              xpos,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                                      <span class="keywordtype">double</span>              ypos,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                                      <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                                      <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                                      <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                                      <span class="keywordtype">int</span>                 noise_box_sz,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                                      <span class="keywordtype">int</span>                 noise_nsamples,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                                      <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                                      <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                      <span class="keywordtype">double</span>          *   star_bg,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                                      <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                                      <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                                      <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                                      <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                                      <span class="keywordtype">double</span>          *   bg_noise)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cpl_image  * psf;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordtype">double</span>       star_radius, max_radius;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="comment">/* FIXME: Arbitrary choice of image border */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> window_size = (double)(IRPLIB_STREHL_RAD_CENTRAL);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="comment">/* Determined empirically by C. Lidman for Strehl error computation */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> strehl_error_coefficient = CPL_MATH_PI * 0.007 / 0.0271;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordtype">double</span>       ring[4];</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="comment">/* cpl_flux_get_noise_ring() must succeed with this many tries */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordtype">int</span>          ring_tries = 3;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_errorstate prestate;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="comment">/* Check compile-time constant */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     cpl_ensure_code(window_size > 0.0,  CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="comment">/* Test inputs */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_ensure_code(im != NULL,         CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     cpl_ensure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     cpl_ensure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     cpl_ensure_code(star_bg != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cpl_ensure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     cpl_ensure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     cpl_ensure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     cpl_ensure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cpl_ensure_code(pscale > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     cpl_ensure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     cpl_ensure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     cpl_ensure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="comment">/* Generate first appropriate PSF to find max peak */</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     psf = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale, size);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cpl_ensure_code(psf != NULL,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="comment">/* Compute flux in PSF and find max peak */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     *psf_peak = cpl_image_get_max(psf);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_image_delete(psf);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     assert( *psf_peak > 0.0); <span class="comment">/* The ideal PSF has a positive maximum */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     *psf_flux = 1.0; <span class="comment">/* The psf flux, cpl_image_get_flux(psf), is always 1 */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="comment">/* Measure the background in the candidate image */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     *star_bg = irplib_strehl_ring_background(im, xpos, ypos, r2/pscale, r3/pscale,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                                              IRPLIB_BG_METHOD_AVER_REJ);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="comment">/* Compute star_radius in pixels */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     star_radius = r1/pscale;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="comment">/* Measure the flux on the candidate image */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     *star_flux = irplib_strehl_disk_flux(im, xpos, ypos, star_radius, *star_bg);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     cpl_ensure_code(*star_flux > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="comment">/* Find the peak value on the central part of the candidate image */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     max_radius = window_size < star_radius ? window_size : star_radius;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_ensure_code(!irplib_strehl_disk_max(im, xpos, ypos, max_radius,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                             star_peak), cpl_error_get_code());</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     *star_peak -= *star_bg;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     cpl_ensure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">/* Compute Strehl */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="comment">/* (StarPeak / StarFlux) / (PsfPeak / PsfFlux) */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     *strehl = (*star_peak * *psf_flux ) / ( *star_flux * *psf_peak);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordflow">if</span> (*strehl > 1)</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"Extreme Strehl-ratio=%g, star_peak=%g, "</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                         <span class="stringliteral">"star_flux=%g, psf_peak=%g, psf_flux=%g"</span>, *strehl,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                         *star_peak, *star_flux, *psf_peak, *psf_flux);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="comment">/* Compute Strehl error */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="comment">/* computation could fail if the image contains pixels with NaN value*/</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     ring[0] = xpos;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     ring[1] = ypos;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     ring[2] = r2/pscale;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     ring[3] = r3/pscale;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="comment">/* FIXME: With CPL 5.1 the recoverable error</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">       will be CPL_ERROR_DATA_NOT_FOUND */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">while</span> (cpl_flux_get_noise_ring(im, ring, noise_box_sz, noise_nsamples,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                                    bg_noise, NULL) && --ring_tries > 0);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="keywordflow">if</span> (ring_tries > 0) {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         cpl_errorstate_set(prestate); <span class="comment">/* Recover, if an error happened */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     *strehl_err = strehl_error_coefficient * (*bg_noise) * pscale *</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         star_radius * star_radius / *star_flux;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="comment">/* This check should not be able to fail, but just to be sure */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     cpl_ensure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="keywordtype">double</span> irplib_strehl_disk_flux(<span class="keyword">const</span> cpl_image * im,</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                                <span class="keywordtype">double</span>            xpos,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                                <span class="keywordtype">double</span>            ypos,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                                <span class="keywordtype">double</span>            rad,</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                                <span class="keywordtype">double</span>            bg)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr = rad * rad;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keywordtype">double</span>          sqrest;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pim;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordtype">double</span>          flux = 0.0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordtype">double</span>          yj, xi;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordtype">int</span>             nx, ny;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordtype">int</span>             lx, ly, ux, uy;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordtype">int</span>             i, j;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cpl_ensure(im != NULL, CPL_ERROR_NULL_INPUT, 0.0);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_ensure(cpl_image_get_type(im) == CPL_TYPE_FLOAT,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                CPL_ERROR_UNSUPPORTED_MODE, 0.0);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     cpl_ensure(rad > 0.0, CPL_ERROR_ILLEGAL_INPUT, 0.0);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     nx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     ny = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="comment">/* Round down */</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     lx = (int)(xpos - rad);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     ly = (int)(ypos - rad);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     <span class="keywordflow">if</span> (lx < 0) lx = 0;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keywordflow">if</span> (ly < 0) ly = 0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="comment">/* Round up */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     ux = (int)(xpos + rad) + 1;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     uy = (int)(ypos + rad) + 1;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     pim = cpl_image_get_data_float_const(im);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         yj = (double)j - ypos;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         sqrest = sqr - yj * yj;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">for</span> (i=lx; i<ux ; i++) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>             xi = (double)i - xpos;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             <span class="keywordflow">if</span> (sqrest >= xi * xi && irplib_isnan(pim[i+j*nx]) == 0) {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                 flux += (double)pim[i+j*nx] - bg;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>             }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordflow">return</span> flux;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="keywordtype">double</span> irplib_strehl_ring_background(<span class="keyword">const</span> cpl_image *       im,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                      <span class="keywordtype">double</span>                  xpos,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                      <span class="keywordtype">double</span>                  ypos,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                      <span class="keywordtype">double</span>                  rad_int,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                      <span class="keywordtype">double</span>                  rad_ext,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                      irplib_strehl_bg_method mode)</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="keywordtype">int</span>             npix;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr_int = rad_int * rad_int;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr_ext = rad_ext * rad_ext;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordtype">double</span>          dist;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     cpl_vector  *   pix_arr;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pim;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     <span class="keywordtype">double</span>          flux = 0.0;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="keywordtype">double</span>          yj, xi;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordtype">int</span>             lx, ly, ux, uy;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordtype">int</span>             nx, ny;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     <span class="keywordtype">int</span>             i, j;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     cpl_ensure(im != NULL, CPL_ERROR_NULL_INPUT, 0.0);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_ensure(cpl_image_get_type(im) == CPL_TYPE_FLOAT,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                CPL_ERROR_UNSUPPORTED_MODE, 0.0);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     cpl_ensure(rad_int > 0.0, CPL_ERROR_ILLEGAL_INPUT, 0.0);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     cpl_ensure(rad_ext > rad_int, CPL_ERROR_ILLEGAL_INPUT, 0.0);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     cpl_ensure(mode == IRPLIB_BG_METHOD_AVER_REJ ||</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                mode == IRPLIB_BG_METHOD_MEDIAN,</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                CPL_ERROR_UNSUPPORTED_MODE, 0.0);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     nx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     ny = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="comment">/* Round down */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     lx = (int)(xpos - rad_ext);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     ly = (int)(ypos - rad_ext);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     <span class="keywordflow">if</span> (lx < 0) lx = 0;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     <span class="keywordflow">if</span> (ly < 0) ly = 0;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="comment">/* Round up */</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     ux = (int)(xpos + rad_ext) + 1;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     uy = (int)(ypos + rad_ext) + 1;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     npix = (ux - lx + 1) * (uy - ly + 1);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     cpl_ensure(npix >= IRPLIB_DISK_BG_MIN_PIX_NB, CPL_ERROR_DATA_NOT_FOUND, 0.0);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     <span class="comment">/* Allocate pixel array to hold values in the ring */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     pix_arr = cpl_vector_new(npix);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="comment">/* Count number of pixels in the ring */</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="comment">/* Retrieve all pixels which belong to the ring */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     pim = cpl_image_get_data_float_const(im);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     npix = 0;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         yj = (double)j - ypos;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         <span class="keywordflow">for</span> (i=lx ; i<ux; i++) {</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             xi = (double)i - xpos;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>             dist = yj * yj + xi * xi;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>             <span class="keywordflow">if</span> (sqr_int <= dist && dist <= sqr_ext &&</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                 irplib_isnan(pim[i+j*nx]) == 0) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                 cpl_vector_set(pix_arr, npix, (<span class="keywordtype">double</span>)pim[i+j*nx]);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                 npix++;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             }</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     }</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="keywordflow">if</span> (npix < IRPLIB_DISK_BG_MIN_PIX_NB) {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         cpl_vector_delete(pix_arr);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         cpl_ensure(0, CPL_ERROR_DATA_NOT_FOUND, 0.0);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="comment">/* Should not be able to fail now */</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="comment">/* Resize pixel array to actual number of values within the ring */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     cpl_vector_set_size(pix_arr, npix);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">if</span> (mode == IRPLIB_BG_METHOD_AVER_REJ) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> low_ind  = (int)((<span class="keywordtype">double</span>)npix * IRPLIB_DISK_BG_REJ_LOW);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> high_ind = (int)((<span class="keywordtype">double</span>)npix</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                                    * (1.0 - IRPLIB_DISK_BG_REJ_HIGH));</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <span class="comment">/* Sort the array */</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         cpl_vector_sort(pix_arr, 1);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         <span class="keywordflow">for</span> (i=low_ind ; i<high_ind ; i++) {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>             flux += cpl_vector_get(pix_arr, i);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         <span class="keywordflow">if</span> (high_ind - low_ind > 1) flux /= (double)(high_ind - low_ind);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     } <span class="keywordflow">else</span> <span class="comment">/* if (mode == IRPLIB_BG_METHOD_MEDIAN) */</span> {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         flux = cpl_vector_get_median(pix_arr);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     }</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     cpl_vector_delete(pix_arr);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="keywordflow">return</span> flux;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> cpl_image * irplib_strehl_generate_psf(</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         <span class="keywordtype">double</span>   m1,</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         <span class="keywordtype">double</span>   m2,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         <span class="keywordtype">double</span>   lam,</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         <span class="keywordtype">double</span>   dlam,</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         <span class="keywordtype">double</span>   pscale,</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         <span class="keywordtype">int</span>      size)</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     cpl_image * otf_image = irplib_strehl_generate_otf(m1, m2, lam, dlam,</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             size, pscale);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="keywordflow">if</span> (otf_image == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="comment">/* Transform back to real space</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="comment">       - Normalization is unnecessary, due to the subsequent normalisation.</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">       - An OTF is point symmetric about its center, i.e. it is even,</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment">         i.e. the real space image is real.</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="comment">       - Because of this a forward FFT works as well.</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="comment">       - If the PSF ever needs to have its images halves swapped add</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="comment">         CPL_FFT_SWAP_HALVES to the FFT call.</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="keywordflow">if</span> (cpl_image_fft(otf_image, NULL, CPL_FFT_UNNORMALIZED) ||</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         <span class="comment">/* Compute absolute values of PSF */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         cpl_image_abs(otf_image) ||</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         <span class="comment">/* Normalize PSF to get flux=1  */</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         cpl_image_normalise(otf_image, CPL_NORM_FLUX)) {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         cpl_image_delete(otf_image);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">return</span> otf_image;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> }</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="keyword">static</span> cpl_image * irplib_strehl_generate_otf(</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <span class="keywordtype">double</span>  m1,</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         <span class="keywordtype">double</span>  m2,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         <span class="keywordtype">double</span>  lam,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         <span class="keywordtype">double</span>  dlam,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         <span class="keywordtype">int</span>     size,</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="keywordtype">double</span>  pscale)</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     cpl_image   *   otf_image;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordtype">double</span>      *   otf_data;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     <span class="keywordtype">double</span>          obs_ratio ;  <span class="comment">/* m1 / m2    */</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <span class="keywordtype">double</span>          f_max ;      <span class="comment">/* cut-off frequency        */</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keywordtype">int</span>             pix0 ;      <span class="comment">/* Pixel corresponding to the zero frequency */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     <span class="keywordtype">double</span>          a, x, y;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     <span class="keywordtype">double</span>          f, rsq, fc, invfc, lambda;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     <span class="keywordtype">double</span>          sincy;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="keywordtype">double</span>          invsize;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keyword">register</span> <span class="keywordtype">int</span>    pos;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     <span class="keywordtype">int</span>             i, j, k;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     cpl_ensure(m2   > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     cpl_ensure(m1   > m2,       CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     cpl_ensure(lam  > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     cpl_ensure(dlam > 0.0,      CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     cpl_ensure(size > 0,        CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     cpl_ensure(pscale > 0.0,    CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="comment">/* Convert pixel scale from sec to radians, microns in meters    */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     pscale /= (double)206265;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     lam /= (double)1.0e6;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     dlam /= (double)1.0e6;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     <span class="comment">/* Obscuration ratio    */</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     obs_ratio = m2 / m1;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     <span class="comment">/* Pixel corresponding to the zero frequency    */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     pix0 = size/2;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     invsize = (double)1.0 / (<span class="keywordtype">double</span>)size;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="comment">/* Cut-off frequency in pixels  */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     f_max = m1 * pscale * (double)size / lam;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="comment">/* Allocate for output image    */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     otf_image = cpl_image_new(size, size, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="keywordflow">if</span> (otf_image==NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     otf_data = cpl_image_get_data_double(otf_image);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="comment">/* Now compute the OTF  */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="comment">/* OPTIMIZED CODE !!! LIMITED READABILITY !!!   */</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="keywordflow">for</span> (k=1 ; k<=9 ; k++) {    <span class="comment">/* iteration on the wavelength  */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         <span class="comment">/* Compute intermediate cut-off frequency   */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         lambda = (double)(lam - dlam*(<span class="keywordtype">double</span>)(k-5)/8.0);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         fc = (double)f_max * (<span class="keywordtype">double</span>)lam / lambda;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         invfc = 1.0 / fc;</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         <span class="comment">/* Convolution with the detector pixels */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         pos = 0;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         <span class="keywordflow">for</span> (j=0 ; j<size ; j++) {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>             y = (double)(j-pix0);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>             sincy = PSF_sinc(CPL_MATH_PI * y * invsize);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>             <span class="keywordflow">for</span> (i=0 ; i<size ; i++) {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                 x = (double)(i-pix0);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                 rsq = x*x + y*y;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                 <span class="keywordflow">if</span> (rsq < fc*fc) {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                     <span class="keywordflow">if</span> (rsq < 0.01)</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                         a = 1.0;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                     <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                         f = sqrt(rsq) * invfc;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                         a = PSF_TelOTF(f,obs_ratio) *</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                             PSF_sinc(CPL_MATH_PI * x * invsize) * sincy;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                     }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                     a = 0.0;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                 }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                 otf_data[pos++] += a / 9.0;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>             }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         }</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keywordflow">return</span> otf_image;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> }</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="comment">/*----------------------------------------------------------------------------*</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment"> * H1 function</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment"> *----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H1(</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         <span class="keywordtype">double</span>  f,</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         <span class="keywordtype">double</span>  u,</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>         <span class="keywordtype">double</span>  v)</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> {</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> e = fabs(1.0-v) > 0.0 ? -1.0 : 1.0; <span class="comment">/* e = 1.0 iff v = 1.0 */</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <span class="keywordflow">return</span>((v*v/CPL_MATH_PI)*acos((f/v)*(1.0+e*(1.0-u*u)/(4.0*f*f))));</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> }</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="comment">/*----------------------------------------------------------------------------*</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="comment"> * H2 function</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="comment"> *----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_H2(<span class="keywordtype">double</span>  f,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                      <span class="keywordtype">double</span>  u)</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> tmp1 = (2.0 * f) / (1.0 + u);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> tmp2 = (1.0 - u) / (2.0 * f);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordflow">return</span> -1.0 * (f/CPL_MATH_PI) * (1.0+u)</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         * sqrt((1.0-tmp1*tmp1)*(1.0-tmp2*tmp2));</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> }</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> <span class="comment">/*----------------------------------------------------------------------------*</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="comment"> * G function</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="comment"> *----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_G(<span class="keywordtype">double</span>  f,</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                     <span class="keywordtype">double</span>  u)</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> {</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordflow">if</span> (f <= (1.0-u)/2.0) <span class="keywordflow">return</span>(u*u);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordflow">if</span> (f >= (1.0+u)/2.0) <span class="keywordflow">return</span>(0.0);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span>(PSF_H1(f,u,1.0) + PSF_H1(f,u,u) + PSF_H2(f,u));</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> </div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="comment">/*----------------------------------------------------------------------------*</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="comment"> * sinc function</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="comment"> *----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_sinc(<span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keywordflow">return</span> fabs(x) > fabs(sin(x)) ? sin(x)/x : 1.0;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> }</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="comment">/*----------------------------------------------------------------------------*</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="comment"> * Telescope OTF function</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="comment"> *----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="keyword">static</span> <span class="keywordtype">double</span> PSF_TelOTF(<span class="keywordtype">double</span>  f,</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>                          <span class="keywordtype">double</span>  u)</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> {</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     <span class="keywordflow">return</span>((PSF_G(f,1.0)+u*u*PSF_G(f/u,1.0)-2.0*PSF_G(f,u))/(1.0-u*u));</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> cpl_error_code irplib_strehl_disk_max(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>                                              <span class="keywordtype">double</span>            xpos,</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>                                              <span class="keywordtype">double</span>            ypos,</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>                                              <span class="keywordtype">double</span>            radius,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                                              <span class="keywordtype">double</span>          * ppeak)</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    sqr = radius * radius;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     <span class="keywordtype">double</span>          sqrest;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keyword">const</span> <span class="keywordtype">float</span> *   pself;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordtype">float</span>           peak = FLT_MAX;  <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordtype">double</span>          yj, xi;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordtype">int</span>             nx, ny;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="keywordtype">int</span>             lx, ly, ux, uy;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     <span class="keywordtype">int</span>             i, j;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     cpl_boolean     first = CPL_TRUE;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     cpl_ensure_code(ppeak != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     cpl_ensure_code(<span class="keyword">self</span>  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     cpl_ensure_code(cpl_image_get_type(<span class="keyword">self</span>) == CPL_TYPE_FLOAT,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                     CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     cpl_ensure_code(radius > 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     nx = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     ny = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="comment">/* Round down */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     lx = (int)(xpos - radius);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     ly = (int)(ypos - radius);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     <span class="keywordflow">if</span> (lx < 0) lx = 0;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="keywordflow">if</span> (ly < 0) ly = 0;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     <span class="comment">/* Round up */</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     ux = (int)(xpos + radius) + 1;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     uy = (int)(ypos + radius) + 1;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     <span class="keywordflow">if</span> (ux > (nx-1)) ux = nx-1;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">if</span> (uy > (ny-1)) uy = ny-1;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     pself = cpl_image_get_data_float_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">for</span> (j=ly ; j<uy ; j++) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>         yj = (double)j - ypos;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>         sqrest = sqr - yj * yj;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         <span class="keywordflow">for</span> (i=lx; i<ux ; i++) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>             xi = (double)i - xpos;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>             <span class="keywordflow">if</span> (sqrest >= xi * xi && irplib_isnan(pself[i+j*nx]) == 0) {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                 <span class="keywordflow">if</span> (first || pself[i+j*nx] > peak) {</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                     first = CPL_FALSE;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                     peak = pself[i+j*nx];</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                 }</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     cpl_ensure_code(!first, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     *ppeak = (double)peak;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__strehl_8h_source.html b/html/irplib__strehl_8h_source.html
index 155c3c2..893436a 100644
--- a/html/irplib__strehl_8h_source.html
+++ b/html/irplib__strehl_8h_source.html
@@ -2,90 +2,121 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_strehl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_strehl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_strehl.h,v 1.12 2009/06/29 14:32:53 kmirny Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/06/29 14:32:53 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.12 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_STREHL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Define</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#ifndef IRPLIB_STREHL_BORDER</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_BORDER        5</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="keyword">typedef</span> <span class="keyword">enum</span> {
-<a name="l00046"></a>00046     IRPLIB_BG_METHOD_AVER_REJ,
-<a name="l00047"></a>00047     IRPLIB_BG_METHOD_MEDIAN
-<a name="l00048"></a>00048 } irplib_strehl_bg_method;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                               Functions prototypes</span>
-<a name="l00052"></a>00052 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 cpl_error_code irplib_strehl_compute(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00055"></a>00055                                      <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00056"></a>00056                                      <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00057"></a>00057                                      <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00058"></a>00058                                      <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);
-<a name="l00059"></a>00059 cpl_error_code irplib_strehl_mark_bad_and_compute(
-<a name="l00060"></a>00060                     cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00061"></a>00061                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00062"></a>00062                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00063"></a>00063                     <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,
-<a name="l00064"></a>00064                     <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);
-<a name="l00065"></a>00065 <span class="keywordtype">double</span> irplib_strehl_disk_flux(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00066"></a>00066                                <span class="keywordtype">double</span>);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keywordtype">double</span> irplib_strehl_ring_background(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00069"></a>00069                                      <span class="keywordtype">double</span>, irplib_strehl_bg_method);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 cpl_image * irplib_strehl_generate_psf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00072"></a>00072                                        <span class="keywordtype">int</span>);
-<a name="l00073"></a>00073 cpl_error_code irplib_strehl_disk_max(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00074"></a>00074                                              <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);
-<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_strehl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_strehl.h,v 1.12 2009/06/29 14:32:53 kmirny Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/06/29 14:32:53 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.12 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_STREHL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#ifndef IRPLIB_STREHL_BORDER</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STREHL_BORDER        5</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     IRPLIB_BG_METHOD_AVER_REJ,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     IRPLIB_BG_METHOD_MEDIAN</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> } irplib_strehl_bg_method;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                               Functions prototypes</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> cpl_error_code irplib_strehl_compute(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                                      <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                      <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                                      <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                                      <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> cpl_error_code irplib_strehl_mark_bad_and_compute(</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                     cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                     <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                     <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">double</span> irplib_strehl_disk_flux(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                                <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">double</span> irplib_strehl_ring_background(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                      <span class="keywordtype">double</span>, irplib_strehl_bg_method);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> cpl_image * irplib_strehl_generate_psf(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                        <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> cpl_error_code irplib_strehl_disk_max(<span class="keyword">const</span> cpl_image *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                              <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__utils_8c_source.html b/html/irplib__utils_8c_source.html
index 46ed771..3be83cb 100644
--- a/html/irplib__utils_8c_source.html
+++ b/html/irplib__utils_8c_source.html
@@ -2,1219 +2,1300 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_utils.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_utils.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_utils.c,v 1.82 2013/02/27 16:00:29 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/02/27 16:00:29 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.82 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <string.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <assert.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                           Defines</span>
-<a name="l00047"></a>00047 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#ifndef inline</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                           Missing Function Prototypes</span>
-<a name="l00062"></a>00062 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#if defined HAVE_ISNAN && HAVE_ISNAN != 0</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#if !defined isnan && defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 0</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="comment">/* HP-UX and Solaris may have isnan() available at link-time</span>
-<a name="l00067"></a>00067 <span class="comment">   without the prototype */</span>
-<a name="l00068"></a>00068 <span class="keywordtype">int</span> isnan(<span class="keywordtype">double</span>);
-<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                           Private Function Prototypes</span>
-<a name="l00074"></a>00074 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_data_get_double(<span class="keyword">const</span> <span class="keywordtype">void</span> *, cpl_type, <span class="keywordtype">int</span>)
-<a name="l00077"></a>00077 <span class="preprocessor">#ifdef CPL_HAVE_GNUC_NONNULL</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>     __attribute__((nonnull))
-<a name="l00079"></a>00079 <span class="preprocessor">#endif</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>    ;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_data_set_double(<span class="keywordtype">void</span> *, cpl_type, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>)
-<a name="l00083"></a>00083 <span class="preprocessor">#ifdef CPL_HAVE_GNUC_NONNULL</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>     __attribute__((nonnull))
-<a name="l00085"></a>00085 <span class="preprocessor">#endif</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>    ;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span>
-<a name="l00090"></a>00090 <span class="keywordtype">void</span> irplib_errorstate_dump_one_level(<span class="keywordtype">void</span> (*)(<span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00091"></a>00091                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...)
-<a name="l00092"></a>00092   #ifdef __GNUC__
-<a name="l00093"></a>00093       __attribute__((format (printf, 2, 3)))
-<a name="l00094"></a>00094   #endif
-<a name="l00095"></a>00095                                       , <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);
-<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">double</span> frame_get_exptime(<span class="keyword">const</span> cpl_frame * pframe);
-<a name="l00097"></a>00097 <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort(<span class="keywordtype">int</span>* index, <span class="keywordtype">double</span>* exptime, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">static</span> cpl_error_code irplib_dfs_product_save(cpl_frameset *,
-<a name="l00100"></a>00100                                               cpl_propertylist *,
-<a name="l00101"></a>00101                                               <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00102"></a>00102                                               <span class="keyword">const</span> cpl_frameset *,
-<a name="l00103"></a>00103                                               <span class="keyword">const</span> cpl_frame *,
-<a name="l00104"></a>00104                                               <span class="keyword">const</span> cpl_imagelist *,
-<a name="l00105"></a>00105                                               <span class="keyword">const</span> cpl_image *,
-<a name="l00106"></a>00106                                               cpl_type,
-<a name="l00107"></a>00107                                               <span class="keyword">const</span> cpl_table *,
-<a name="l00108"></a>00108                                               <span class="keyword">const</span> cpl_propertylist *,
-<a name="l00109"></a>00109                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00110"></a>00110                                               <span class="keyword">const</span> cpl_propertylist *,
-<a name="l00111"></a>00111                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00112"></a>00112                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00113"></a>00113                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00119"></a>00119 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00123"></a>00123 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00136"></a><a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386">00136</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386" title="Dump a single CPL error at the CPL warning level.">irplib_errorstate_dump_warning</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span> first,
-<a name="l00137"></a>00137                                     <span class="keywordtype">unsigned</span> last)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     irplib_errorstate_dump_one_level(&cpl_msg_warning, <span class="keyword">self</span>, first, last);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="keyword">static</span> cpl_polynomial * irplib_polynomial_fit_1d_create_common(
-<a name="l00145"></a>00145         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l00146"></a>00146         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l00147"></a>00147         <span class="keywordtype">int</span>                     degree,
-<a name="l00148"></a>00148         <span class="keywordtype">double</span>              *   mse,
-<a name="l00149"></a>00149         <span class="keywordtype">double</span>              *  rechisq
-<a name="l00150"></a>00150         );
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00162"></a>00162 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00163"></a><a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb">00163</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb" title="Dump a single CPL error at the CPL info level.">irplib_errorstate_dump_info</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span> first,
-<a name="l00164"></a>00164                                     <span class="keywordtype">unsigned</span> last)
-<a name="l00165"></a>00165 {
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     irplib_errorstate_dump_one_level(&cpl_msg_info, <span class="keyword">self</span>, first, last);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00183"></a><a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1">00183</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span> first,
-<a name="l00184"></a>00184                                     <span class="keywordtype">unsigned</span> last)
-<a name="l00185"></a>00185 {
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     irplib_errorstate_dump_one_level(&cpl_msg_debug, <span class="keyword">self</span>, first, last);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00213"></a>00213 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00214"></a><a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e">00214</a> cpl_error_code <a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image</a>(cpl_frameset            * allframes,
-<a name="l00215"></a>00215                                      <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00216"></a>00216                                      <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00217"></a>00217                                      <span class="keyword">const</span> cpl_image         * image,
-<a name="l00218"></a>00218                                      cpl_type_bpp              bpp,
-<a name="l00219"></a>00219                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00220"></a>00220                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,
-<a name="l00221"></a>00221                                      <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00222"></a>00222                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00223"></a>00223                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00224"></a>00224                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)
-<a name="l00225"></a>00225 {
-<a name="l00226"></a>00226     cpl_errorstate     prestate = cpl_errorstate_get();
-<a name="l00227"></a>00227     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)
-<a name="l00228"></a>00228         : cpl_propertylist_new();
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(allframes, NULL, parlist, usedframes, NULL, image,
-<a name="l00233"></a>00233                            bpp, recipe, prolist, remregexp, pipe_id, filename);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     cpl_propertylist_delete(prolist);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 }
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00260"></a>00260 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00261"></a>00261 cpl_error_code
-<a name="l00262"></a><a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7">00262</a> <a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7" title="Save a propertylist as a DFS-compliant pipeline product.">irplib_dfs_save_propertylist</a>(cpl_frameset            * allframes,
-<a name="l00263"></a>00263                              <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00264"></a>00264                              <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00265"></a>00265                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00266"></a>00266                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,
-<a name="l00267"></a>00267                              <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00268"></a>00268                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00269"></a>00269                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00270"></a>00270                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)
-<a name="l00271"></a>00271 {
-<a name="l00272"></a>00272     cpl_errorstate     prestate = cpl_errorstate_get();
-<a name="l00273"></a>00273     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)
-<a name="l00274"></a>00274         : cpl_propertylist_new();
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     cpl_dfs_save_propertylist(allframes, NULL, parlist, usedframes, NULL,
-<a name="l00279"></a>00279                               recipe, prolist, remregexp, pipe_id, filename);
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     cpl_propertylist_delete(prolist);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 }
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00308"></a>00308 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00309"></a><a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1">00309</a> cpl_error_code <a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1" title="Save an imagelist as a DFS-compliant pipeline product.">irplib_dfs_save_imagelist</a>(cpl_frameset            * allframes,
-<a name="l00310"></a>00310                                          <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00311"></a>00311                                          <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00312"></a>00312                                          <span class="keyword">const</span> cpl_imagelist     * imagelist,
-<a name="l00313"></a>00313                                          cpl_type_bpp              bpp,
-<a name="l00314"></a>00314                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00315"></a>00315                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,
-<a name="l00316"></a>00316                                          <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00317"></a>00317                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00318"></a>00318                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00319"></a>00319                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)
-<a name="l00320"></a>00320 {
-<a name="l00321"></a>00321     cpl_errorstate     prestate = cpl_errorstate_get();
-<a name="l00322"></a>00322     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)
-<a name="l00323"></a>00323         : cpl_propertylist_new();
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327     cpl_dfs_save_imagelist(allframes, NULL, parlist, usedframes, NULL,
-<a name="l00328"></a>00328                            imagelist, bpp, recipe, prolist, remregexp, pipe_id,
-<a name="l00329"></a>00329                            filename);
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     cpl_propertylist_delete(prolist);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00336"></a>00336 }
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00356"></a>00356 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00357"></a><a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade">00357</a> cpl_error_code <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(cpl_frameset            * allframes,
-<a name="l00358"></a>00358                                      <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00359"></a>00359                                      <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00360"></a>00360                                      <span class="keyword">const</span> cpl_table         * table,
-<a name="l00361"></a>00361                                      <span class="keyword">const</span> cpl_propertylist  * tablelist,
-<a name="l00362"></a>00362                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00363"></a>00363                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,
-<a name="l00364"></a>00364                                      <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00365"></a>00365                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00366"></a>00366                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00367"></a>00367                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)
-<a name="l00368"></a>00368 {
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     cpl_errorstate     prestate = cpl_errorstate_get();
-<a name="l00371"></a>00371     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)
-<a name="l00372"></a>00372         : cpl_propertylist_new();
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     cpl_dfs_save_table(allframes, NULL, parlist, usedframes, NULL,
-<a name="l00377"></a>00377                            table, tablelist, recipe, prolist, remregexp,
-<a name="l00378"></a>00378                            pipe_id, filename);
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380     cpl_propertylist_delete(prolist);
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00385"></a>00385 }
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00416"></a>00416 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00417"></a><a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451">00417</a> cpl_error_code <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(cpl_frameset            * allframes,
-<a name="l00418"></a>00418                                       cpl_propertylist        * header,
-<a name="l00419"></a>00419                                       <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00420"></a>00420                                       <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00421"></a>00421                                       <span class="keyword">const</span> cpl_frame         * inherit,
-<a name="l00422"></a>00422                                       <span class="keyword">const</span> cpl_image         * image,
-<a name="l00423"></a>00423                                       cpl_type                  type,
-<a name="l00424"></a>00424                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00425"></a>00425                                       <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00426"></a>00426                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00427"></a>00427                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00428"></a>00428                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)
-<a name="l00429"></a>00429 {
-<a name="l00430"></a>00430     <span class="keywordflow">return</span>
-<a name="l00431"></a>00431         irplib_dfs_product_save(allframes, header, parlist, usedframes, inherit,
-<a name="l00432"></a>00432                                 NULL, image, type, NULL, NULL, recipe,
-<a name="l00433"></a>00433                                 applist, remregexp, pipe_id, filename)
-<a name="l00434"></a>00434         ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 }
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00463"></a>00463 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 <span class="keyword">static</span>
-<a name="l00466"></a>00466 cpl_error_code irplib_dfs_product_save(cpl_frameset            * allframes,
-<a name="l00467"></a>00467                                        cpl_propertylist        * header,
-<a name="l00468"></a>00468                                        <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00469"></a>00469                                        <span class="keyword">const</span> cpl_frameset      * usedframes,
-<a name="l00470"></a>00470                                        <span class="keyword">const</span> cpl_frame         * inherit,
-<a name="l00471"></a>00471                                        <span class="keyword">const</span> cpl_imagelist     * imagelist,
-<a name="l00472"></a>00472                                        <span class="keyword">const</span> cpl_image         * image,
-<a name="l00473"></a>00473                                        cpl_type                  type,
-<a name="l00474"></a>00474                                        <span class="keyword">const</span> cpl_table         * table,
-<a name="l00475"></a>00475                                        <span class="keyword">const</span> cpl_propertylist  * tablelist,
-<a name="l00476"></a>00476                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,
-<a name="l00477"></a>00477                                        <span class="keyword">const</span> cpl_propertylist  * applist,
-<a name="l00478"></a>00478                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00479"></a>00479                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00480"></a>00480                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename) {
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482     <span class="keyword">const</span> <span class="keywordtype">char</span>       * procat;
-<a name="l00483"></a>00483     cpl_propertylist * plist;
-<a name="l00484"></a>00484     cpl_frame        * product_frame;
-<a name="l00485"></a>00485     <span class="comment">/* Inside this function the product-types are numbered:</span>
-<a name="l00486"></a>00486 <span class="comment">       0: imagelist</span>
-<a name="l00487"></a>00487 <span class="comment">       1: table</span>
-<a name="l00488"></a>00488 <span class="comment">       2: image</span>
-<a name="l00489"></a>00489 <span class="comment">       3: propertylist only</span>
-<a name="l00490"></a>00490 <span class="comment">    */</span>
-<a name="l00491"></a>00491     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>     pronum
-<a name="l00492"></a>00492         = imagelist != NULL ? 0 : table != NULL ? 1 :  (image != NULL ? 2 : 3);
-<a name="l00493"></a>00493     <span class="keyword">const</span> <span class="keywordtype">char</span>       * proname[] = {<span class="stringliteral">"imagelist"</span>, <span class="stringliteral">"table"</span>, <span class="stringliteral">"image"</span>,
-<a name="l00494"></a>00494                                     <span class="stringliteral">"propertylist"</span>};
-<a name="l00495"></a>00495     <span class="comment">/* FIXME: Define a frame type for an imagelist and when data-less */</span>
-<a name="l00496"></a>00496     <span class="keyword">const</span> <span class="keywordtype">int</span>          protype[] = {CPL_FRAME_TYPE_ANY, CPL_FRAME_TYPE_TABLE,
-<a name="l00497"></a>00497                                     CPL_FRAME_TYPE_IMAGE, CPL_FRAME_TYPE_ANY};
-<a name="l00498"></a>00498     cpl_error_code     error = CPL_ERROR_NONE;
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     <span class="comment">/* No more than one of imagelist, table and image may be non-NULL */</span>
-<a name="l00502"></a>00502     <span class="comment">/* tablelist may only be non-NULL when table is non-NULL */</span>
-<a name="l00503"></a>00503     <span class="keywordflow">if</span> (imagelist != NULL) {
-<a name="l00504"></a>00504         assert(pronum == 0);
-<a name="l00505"></a>00505         assert(image == NULL);
-<a name="l00506"></a>00506         assert(table == NULL);
-<a name="l00507"></a>00507         assert(tablelist == NULL);
-<a name="l00508"></a>00508     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (table != NULL) {
-<a name="l00509"></a>00509         assert(pronum == 1);
-<a name="l00510"></a>00510         assert(imagelist == NULL);
-<a name="l00511"></a>00511         assert(image == NULL);
-<a name="l00512"></a>00512     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (image != NULL) {
-<a name="l00513"></a>00513         assert(pronum == 2);
-<a name="l00514"></a>00514         assert(imagelist == NULL);
-<a name="l00515"></a>00515         assert(table == NULL);
-<a name="l00516"></a>00516         assert(tablelist == NULL);
-<a name="l00517"></a>00517     } <span class="keywordflow">else</span> {
-<a name="l00518"></a>00518         assert(pronum == 3);
-<a name="l00519"></a>00519         assert(imagelist == NULL);
-<a name="l00520"></a>00520         assert(table == NULL);
-<a name="l00521"></a>00521         assert(tablelist == NULL);
-<a name="l00522"></a>00522         assert(image == NULL);
-<a name="l00523"></a>00523     }
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525     cpl_ensure_code(allframes  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00526"></a>00526     cpl_ensure_code(parlist    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00527"></a>00527     cpl_ensure_code(usedframes != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00528"></a>00528     cpl_ensure_code(recipe     != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00529"></a>00529     cpl_ensure_code(applist    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00530"></a>00530     cpl_ensure_code(pipe_id    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00531"></a>00531     cpl_ensure_code(filename   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     procat = cpl_propertylist_get_string(applist, CPL_DFS_PRO_CATG);
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535     cpl_ensure_code(procat     != NULL, cpl_error_get_code());
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537     cpl_msg_info(cpl_func, <span class="stringliteral">"Writing FITS %s product(%s): %s"</span>, proname[pronum],
-<a name="l00538"></a>00538                  procat, filename);
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540     product_frame = cpl_frame_new();
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542     <span class="comment">/* Create product frame */</span>
-<a name="l00543"></a>00543     error |= cpl_frame_set_filename(product_frame, filename);
-<a name="l00544"></a>00544     error |= cpl_frame_set_tag(product_frame, procat);
-<a name="l00545"></a>00545     error |= cpl_frame_set_type(product_frame, protype[pronum]);
-<a name="l00546"></a>00546     error |= cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT);
-<a name="l00547"></a>00547     error |= cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL);
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549     <span class="keywordflow">if</span> (error) {
-<a name="l00550"></a>00550         cpl_frame_delete(product_frame);
-<a name="l00551"></a>00551         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00552"></a>00552     }
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554     <span class="keywordflow">if</span> (header != NULL) {
-<a name="l00555"></a>00555         cpl_propertylist_empty(header);
-<a name="l00556"></a>00556         plist = header;
-<a name="l00557"></a>00557     } <span class="keywordflow">else</span> {
-<a name="l00558"></a>00558         plist = cpl_propertylist_new();
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561     <span class="comment">/* Add any QC parameters here */</span>
-<a name="l00562"></a>00562     <span class="keywordflow">if</span> (applist != NULL) error = cpl_propertylist_copy_property_regexp(plist,
-<a name="l00563"></a>00563                                                                        applist,
-<a name="l00564"></a>00564                                                                        <span class="stringliteral">"."</span>, 0);
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00567"></a>00567     <span class="keywordflow">if</span> (!error)
-<a name="l00568"></a>00568         error = cpl_dfs_setup_product_header(plist, product_frame, usedframes,
-<a name="l00569"></a>00569                                              parlist, recipe, pipe_id,
-<a name="l00570"></a>00570                                              <span class="stringliteral">"PRO-1.15"</span>, inherit);
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572     <span class="keywordflow">if</span> (remregexp != NULL && !error) {
-<a name="l00573"></a>00573         cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00574"></a>00574         (void)cpl_propertylist_erase_regexp(plist, remregexp, 0);
-<a name="l00575"></a>00575         <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) error = cpl_error_get_code();
-<a name="l00576"></a>00576     }
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578     <span class="keywordflow">if</span> (!error) {
-<a name="l00579"></a>00579         <span class="keywordflow">switch</span> (pronum) {
-<a name="l00580"></a>00580             <span class="keywordflow">case</span> 0:
-<a name="l00581"></a>00581                 error = cpl_imagelist_save(imagelist, filename, type, plist,
-<a name="l00582"></a>00582                                            CPL_IO_CREATE);
-<a name="l00583"></a>00583                 <span class="keywordflow">break</span>;
-<a name="l00584"></a>00584             <span class="keywordflow">case</span> 1:
-<a name="l00585"></a>00585                 error = cpl_table_save(table, plist, tablelist, filename,
-<a name="l00586"></a>00586                                        CPL_IO_CREATE);
-<a name="l00587"></a>00587                 <span class="keywordflow">break</span>;
-<a name="l00588"></a>00588             <span class="keywordflow">case</span> 2:
-<a name="l00589"></a>00589                 error = cpl_image_save(image, filename, type, plist,
-<a name="l00590"></a>00590                                        CPL_IO_CREATE);
-<a name="l00591"></a>00591                 <span class="keywordflow">break</span>;
-<a name="l00592"></a>00592             <span class="keywordflow">default</span>:
-<a name="l00593"></a>00593                 <span class="comment">/* case 3: */</span>
-<a name="l00594"></a>00594                 error = cpl_propertylist_save(plist, filename, CPL_IO_CREATE);
-<a name="l00595"></a>00595         }
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598     <span class="keywordflow">if</span> (!error) {
-<a name="l00599"></a>00599         <span class="comment">/* Insert the frame of the saved file in the input frameset */</span>
-<a name="l00600"></a>00600         error = cpl_frameset_insert(allframes, product_frame);
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602     } <span class="keywordflow">else</span> {
-<a name="l00603"></a>00603         cpl_frame_delete(product_frame);
-<a name="l00604"></a>00604     }
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606     <span class="keywordflow">if</span> (plist != header) cpl_propertylist_delete(plist);
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608     cpl_ensure_code(!error, error);
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612 }    
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00670"></a>00670 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00671"></a><a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954">00671</a> cpl_error_code <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,
-<a name="l00672"></a>00672                                   cpl_image * im_low,
-<a name="l00673"></a>00673                                   cpl_image * im_mid,
-<a name="l00674"></a>00674                                   cpl_image * im_high,
-<a name="l00675"></a>00675                                   <span class="keywordtype">double</span> th_low,
-<a name="l00676"></a>00676                                   cpl_boolean isleq_low,
-<a name="l00677"></a>00677                                   <span class="keywordtype">double</span> th_high,
-<a name="l00678"></a>00678                                   cpl_boolean isgeq_high,
-<a name="l00679"></a>00679                                   <span class="keywordtype">double</span> alt_low,
-<a name="l00680"></a>00680                                   <span class="keywordtype">double</span> alt_high,
-<a name="l00681"></a>00681                                   cpl_boolean isbad_low,
-<a name="l00682"></a>00682                                   cpl_boolean isbad_mid,
-<a name="l00683"></a>00683                                   cpl_boolean isbad_high)
-<a name="l00684"></a>00684 {
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686     <span class="keyword">const</span> <span class="keywordtype">void</span>       * selfdata = cpl_image_get_data_const(<span class="keyword">self</span>);
-<a name="l00687"></a>00687     <span class="comment">/* hasbpm reduces check-overhead if self does not have a bpm, and if</span>
-<a name="l00688"></a>00688 <span class="comment">       self is also passed as an output image, that ends up with bad pixels */</span>
-<a name="l00689"></a>00689     <span class="comment">/* FIXME: Need a proper way to know if a bpm has been allocated :-((((((( */</span>
-<a name="l00690"></a>00690     <span class="keyword">const</span> cpl_boolean  hasbpm
-<a name="l00691"></a>00691         = cpl_image_count_rejected(<span class="keyword">self</span>) ? CPL_TRUE : CPL_FALSE;
-<a name="l00692"></a>00692     <span class="keyword">const</span> cpl_binary * selfbpm = hasbpm
-<a name="l00693"></a>00693         ? cpl_mask_get_data_const(cpl_image_get_bpm_const(<span class="keyword">self</span>)) : NULL;
-<a name="l00694"></a>00694     <span class="keyword">const</span> cpl_type     selftype = cpl_image_get_type(<span class="keyword">self</span>);
-<a name="l00695"></a>00695     <span class="keyword">const</span> <span class="keywordtype">int</span>          nx = cpl_image_get_size_x(<span class="keyword">self</span>);
-<a name="l00696"></a>00696     <span class="keyword">const</span> <span class="keywordtype">int</span>          ny = cpl_image_get_size_y(<span class="keyword">self</span>);
-<a name="l00697"></a>00697     <span class="keyword">const</span> <span class="keywordtype">int</span>          npix = nx * ny;
-<a name="l00698"></a>00698     <span class="keyword">const</span> cpl_boolean  do_low   = im_low  != NULL;
-<a name="l00699"></a>00699     <span class="keyword">const</span> cpl_boolean  do_mid   = im_mid  != NULL;
-<a name="l00700"></a>00700     <span class="keyword">const</span> cpl_boolean  do_high  = im_high != NULL;
-<a name="l00701"></a>00701     <span class="keywordtype">void</span>             * lowdata  = NULL;
-<a name="l00702"></a>00702     <span class="keywordtype">void</span>             * middata  = NULL;
-<a name="l00703"></a>00703     <span class="keywordtype">void</span>             * highdata = NULL;
-<a name="l00704"></a>00704     cpl_binary       * lowbpm   = NULL;
-<a name="l00705"></a>00705     cpl_binary       * midbpm   = NULL;
-<a name="l00706"></a>00706     cpl_binary       * highbpm  = NULL;
-<a name="l00707"></a>00707     <span class="keyword">const</span> cpl_type     lowtype
-<a name="l00708"></a>00708         = do_low ? cpl_image_get_type(im_low) : CPL_TYPE_INVALID;
-<a name="l00709"></a>00709     <span class="keyword">const</span> cpl_type     midtype
-<a name="l00710"></a>00710         = do_mid ? cpl_image_get_type(im_mid) : CPL_TYPE_INVALID;
-<a name="l00711"></a>00711     <span class="keyword">const</span> cpl_type     hightype
-<a name="l00712"></a>00712         = do_high ? cpl_image_get_type(im_high) : CPL_TYPE_INVALID;
-<a name="l00713"></a>00713     <span class="keywordtype">int</span> i;
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715 
-<a name="l00716"></a>00716     cpl_ensure_code(<span class="keyword">self</span> != NULL,                CPL_ERROR_NULL_INPUT);
-<a name="l00717"></a>00717     cpl_ensure_code(do_low || do_mid || do_high, CPL_ERROR_NULL_INPUT);
-<a name="l00718"></a>00718     cpl_ensure_code(th_low <= th_high,           CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720     <span class="keywordflow">if</span> (do_low) {
-<a name="l00721"></a>00721         cpl_ensure_code(cpl_image_get_size_x(im_low) == nx,
-<a name="l00722"></a>00722                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00723"></a>00723         cpl_ensure_code(cpl_image_get_size_y(im_low) == ny,
-<a name="l00724"></a>00724                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00725"></a>00725         lowdata = cpl_image_get_data(im_low);
-<a name="l00726"></a>00726     }
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728     <span class="keywordflow">if</span> (do_mid) {
-<a name="l00729"></a>00729         cpl_ensure_code(cpl_image_get_size_x(im_mid) == nx,
-<a name="l00730"></a>00730                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00731"></a>00731         cpl_ensure_code(cpl_image_get_size_y(im_mid) == ny,
-<a name="l00732"></a>00732                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00733"></a>00733         middata = cpl_image_get_data(im_mid);
-<a name="l00734"></a>00734     }
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736     <span class="keywordflow">if</span> (do_high) {
-<a name="l00737"></a>00737         cpl_ensure_code(cpl_image_get_size_x(im_high) == nx,
-<a name="l00738"></a>00738                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00739"></a>00739         cpl_ensure_code(cpl_image_get_size_y(im_high) == ny,
-<a name="l00740"></a>00740                         CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00741"></a>00741         highdata = cpl_image_get_data(im_high);
-<a name="l00742"></a>00742     }
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744     <span class="comment">/* From this point a failure would indicate a serious bug in CPL */</span>
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746     <span class="keywordflow">for</span> (i = 0; i < npix; i++) {
-<a name="l00747"></a>00747         <span class="keyword">const</span> <span class="keywordtype">double</span> value = irplib_data_get_double(selfdata, selftype, i);
-<a name="l00748"></a>00748         cpl_boolean  isalt_low   = do_low;
-<a name="l00749"></a>00749         cpl_boolean  isalt_mid   = do_mid;
-<a name="l00750"></a>00750         cpl_boolean  isalt_high  = do_high;
-<a name="l00751"></a>00751         cpl_boolean  setbad_low  = do_low;
-<a name="l00752"></a>00752         cpl_boolean  setbad_mid  = do_mid;
-<a name="l00753"></a>00753         cpl_boolean  setbad_high = do_high;
-<a name="l00754"></a>00754         <span class="keyword">const</span> <span class="keywordtype">void</span> * setdata     = NULL;
-<a name="l00755"></a>00755         <span class="keywordtype">double</span>       alt_mid     = 0.0; <span class="comment">/* Avoid (false) uninit warning */</span>
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757         <span class="keywordflow">if</span> (isleq_low ? value <= th_low : value < th_low) {
-<a name="l00758"></a>00758             <span class="keywordflow">if</span> (do_low) {
-<a name="l00759"></a>00759                 isalt_low = CPL_FALSE;
-<a name="l00760"></a>00760                 irplib_data_set_double(lowdata, lowtype, i, value);
-<a name="l00761"></a>00761                 setbad_low = hasbpm && selfbpm[i];
-<a name="l00762"></a>00762                 setdata = lowdata;
-<a name="l00763"></a>00763             }
-<a name="l00764"></a>00764             alt_mid = alt_low;
-<a name="l00765"></a>00765         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isgeq_high ? value >= th_high : value > th_high) {
-<a name="l00766"></a>00766             <span class="keywordflow">if</span> (do_high) {
-<a name="l00767"></a>00767                 isalt_high = CPL_FALSE;
-<a name="l00768"></a>00768                 irplib_data_set_double(highdata, hightype, i, value);
-<a name="l00769"></a>00769                 setbad_high = hasbpm && selfbpm[i];
-<a name="l00770"></a>00770                 setdata = highdata;
-<a name="l00771"></a>00771             }
-<a name="l00772"></a>00772             alt_mid = alt_high;
-<a name="l00773"></a>00773         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (do_mid) {
-<a name="l00774"></a>00774             isalt_mid = CPL_FALSE;
-<a name="l00775"></a>00775             irplib_data_set_double(middata, midtype, i, value);
-<a name="l00776"></a>00776             setbad_mid = hasbpm && selfbpm[i];
-<a name="l00777"></a>00777             setdata = middata;
-<a name="l00778"></a>00778         }
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780         <span class="keywordflow">if</span> (isalt_low && lowdata != setdata) {
-<a name="l00781"></a>00781             irplib_data_set_double(lowdata, lowtype, i, alt_low);
-<a name="l00782"></a>00782             setbad_low = isbad_low;
-<a name="l00783"></a>00783         }
-<a name="l00784"></a>00784         <span class="keywordflow">if</span> (isalt_mid && middata != setdata) {
-<a name="l00785"></a>00785             irplib_data_set_double(middata, midtype, i, alt_mid);
-<a name="l00786"></a>00786             setbad_mid = isbad_mid;
-<a name="l00787"></a>00787         }
-<a name="l00788"></a>00788         <span class="keywordflow">if</span> (isalt_high && highdata != setdata) {
-<a name="l00789"></a>00789             irplib_data_set_double(highdata, hightype, i, alt_high);
-<a name="l00790"></a>00790             setbad_high = isbad_high;
-<a name="l00791"></a>00791         }
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793         <span class="keywordflow">if</span> (setbad_low) {
-<a name="l00794"></a>00794             <span class="keywordflow">if</span> (lowbpm == NULL) lowbpm
-<a name="l00795"></a>00795                 = cpl_mask_get_data(cpl_image_get_bpm(im_low));
-<a name="l00796"></a>00796             lowbpm[i] = CPL_BINARY_1;
-<a name="l00797"></a>00797         }
-<a name="l00798"></a>00798         <span class="keywordflow">if</span> (setbad_mid) {
-<a name="l00799"></a>00799             <span class="keywordflow">if</span> (midbpm == NULL) midbpm
-<a name="l00800"></a>00800                 = cpl_mask_get_data(cpl_image_get_bpm(im_mid));
-<a name="l00801"></a>00801             midbpm[i] = CPL_BINARY_1;
-<a name="l00802"></a>00802         }
-<a name="l00803"></a>00803         <span class="keywordflow">if</span> (setbad_high) {
-<a name="l00804"></a>00804             <span class="keywordflow">if</span> (highbpm == NULL) highbpm
-<a name="l00805"></a>00805                 = cpl_mask_get_data(cpl_image_get_bpm(im_high));
-<a name="l00806"></a>00806             highbpm[i] = CPL_BINARY_1;
-<a name="l00807"></a>00807         }
-<a name="l00808"></a>00808     }
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812 }
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00863"></a>00863 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865 cpl_error_code
-<a name="l00866"></a><a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df">00866</a> <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s).">irplib_dfs_table_convert</a>(cpl_table               * <span class="keyword">self</span>,
-<a name="l00867"></a>00867                          cpl_frameset            * allframes,
-<a name="l00868"></a>00868                          <span class="keyword">const</span> cpl_frameset      * useframes,
-<a name="l00869"></a>00869                          <span class="keywordtype">int</span>                       maxlinelen,
-<a name="l00870"></a>00870                          <span class="keywordtype">char</span>                      commentchar,
-<a name="l00871"></a>00871                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * product_name,
-<a name="l00872"></a>00872                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * procatg,
-<a name="l00873"></a>00873                          <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l00874"></a>00874                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe_name,
-<a name="l00875"></a>00875                          <span class="keyword">const</span> cpl_propertylist  * mainlist,
-<a name="l00876"></a>00876                          <span class="keyword">const</span> cpl_propertylist  * extlist,
-<a name="l00877"></a>00877                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,
-<a name="l00878"></a>00878                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * instrume,
-<a name="l00879"></a>00879                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,
-<a name="l00880"></a>00880                          cpl_boolean (*table_set_row)
-<a name="l00881"></a>00881                          (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-<a name="l00882"></a>00882                           <span class="keyword">const</span> cpl_frame *,
-<a name="l00883"></a>00883                           <span class="keyword">const</span> cpl_parameterlist *),
-<a name="l00884"></a>00884                          cpl_error_code (*table_check)
-<a name="l00885"></a>00885                          (cpl_table *,
-<a name="l00886"></a>00886                           <span class="keyword">const</span> cpl_frameset *,
-<a name="l00887"></a>00887                           <span class="keyword">const</span> cpl_parameterlist *))
-<a name="l00888"></a>00888 {
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     <span class="keyword">const</span> <span class="keywordtype">char</span>       * filename;
-<a name="l00891"></a>00891     cpl_propertylist * applist    = NULL;
-<a name="l00892"></a>00892     cpl_errorstate     prestate   = cpl_errorstate_get();
-<a name="l00893"></a>00893     cpl_error_code     error;
-<a name="l00894"></a>00894     <span class="keywordtype">char</span>             * fallback_filename = NULL;
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896     cpl_ensure_code(<span class="keyword">self</span>         != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00897"></a>00897     cpl_ensure_code(allframes    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00898"></a>00898     cpl_ensure_code(useframes    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00899"></a>00899     cpl_ensure_code(procatg      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00900"></a>00900     cpl_ensure_code(parlist      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00901"></a>00901     cpl_ensure_code(recipe_name  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00902"></a>00902     cpl_ensure_code(instrume     != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00903"></a>00903     cpl_ensure_code(pipe_id      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905     cpl_ensure_code(!<a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(<span class="keyword">self</span>, useframes,
-<a name="l00906"></a>00906                                                      maxlinelen,
-<a name="l00907"></a>00907                                                      commentchar,
-<a name="l00908"></a>00908                                                      parlist,
-<a name="l00909"></a>00909                                                      table_set_row),
-<a name="l00910"></a>00910                     cpl_error_get_code());
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912     <span class="keywordflow">if</span> (table_check != NULL && (table_check(<span class="keyword">self</span>, useframes, parlist) ||
-<a name="l00913"></a>00913                                 !cpl_errorstate_is_equal(prestate))) {
-<a name="l00914"></a>00914         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l00915"></a>00915                                      <span class="stringliteral">"Consistency check of table failed"</span>);
-<a name="l00916"></a>00916     }
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918     fallback_filename = cpl_sprintf(<span class="stringliteral">"%s"</span> CPL_DFS_FITS, recipe_name);
-<a name="l00919"></a>00919     filename = product_name != NULL ? product_name : fallback_filename;
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921     applist = mainlist == NULL
-<a name="l00922"></a>00922         ? cpl_propertylist_new() : cpl_propertylist_duplicate(mainlist);
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924     error = cpl_propertylist_update_string(applist, <span class="stringliteral">"INSTRUME"</span>, instrume);
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926     <span class="keywordflow">if</span> (!error)
-<a name="l00927"></a>00927         error = <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(allframes, parlist, useframes, <span class="keyword">self</span>,
-<a name="l00928"></a>00928                                       extlist, recipe_name, procatg, applist,
-<a name="l00929"></a>00929                                       remregexp, pipe_id, filename);
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931     cpl_propertylist_delete(applist);
-<a name="l00932"></a>00932     cpl_free(fallback_filename);
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934     <span class="comment">/* Propagate the error, if any */</span>
-<a name="l00935"></a>00935     cpl_ensure_code(!error, error);
-<a name="l00936"></a>00936 
-<a name="l00937"></a>00937     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00938"></a>00938 
-<a name="l00939"></a>00939 }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00992"></a>00992 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994 cpl_error_code
-<a name="l00995"></a><a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d">00995</a> <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(cpl_table               * <span class="keyword">self</span>,
-<a name="l00996"></a>00996                                 <span class="keyword">const</span> cpl_frameset      * useframes,
-<a name="l00997"></a>00997                                 <span class="keywordtype">int</span>                       maxlinelen,
-<a name="l00998"></a>00998                                 <span class="keywordtype">char</span>                      commentchar,
-<a name="l00999"></a>00999                                 <span class="keyword">const</span> cpl_parameterlist * parlist,
-<a name="l01000"></a>01000                                 cpl_boolean (*table_set_row)
-<a name="l01001"></a>01001                                 (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-<a name="l01002"></a>01002                                  <span class="keyword">const</span> cpl_frame *,
-<a name="l01003"></a>01003                                  <span class="keyword">const</span> cpl_parameterlist *))
-<a name="l01004"></a>01004 {
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006     <span class="keyword">const</span> cpl_frame  * rawframe;
-<a name="l01007"></a>01007     <span class="keywordtype">char</span>             * linebuffer = NULL;
-<a name="l01008"></a>01008     FILE             * stream     = NULL;
-<a name="l01009"></a>01009     <span class="keywordtype">int</span>                nfiles     = 0;
-<a name="l01010"></a>01010     <span class="keywordtype">int</span>                nrow       = cpl_table_get_nrow(<span class="keyword">self</span>);
-<a name="l01011"></a>01011     <span class="keywordtype">int</span>                irow       = 0;
-<a name="l01012"></a>01012     cpl_errorstate     prestate   = cpl_errorstate_get();
-<a name="l01013"></a>01013 
-<a name="l01014"></a>01014     cpl_ensure_code(<span class="keyword">self</span>         != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01015"></a>01015     cpl_ensure_code(useframes    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01016"></a>01016     cpl_ensure_code(maxlinelen > 0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01017"></a>01017     cpl_ensure_code(parlist      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01018"></a>01018     cpl_ensure_code(table_set_row != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01019"></a>01019 
-<a name="l01020"></a>01020     linebuffer = cpl_malloc(maxlinelen);
-<a name="l01021"></a>01021 
-<a name="l01022"></a>01022     <span class="keywordflow">for</span> (rawframe = cpl_frameset_get_first_const(useframes);
-<a name="l01023"></a>01023          rawframe != NULL;
-<a name="l01024"></a>01024          rawframe = cpl_frameset_get_next_const(useframes), nfiles++) {
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026         <span class="keyword">const</span> <span class="keywordtype">char</span> * rawfile = cpl_frame_get_filename(rawframe);
-<a name="l01027"></a>01027         <span class="keyword">const</span> <span class="keywordtype">char</span> * done; <span class="comment">/* Indicate when the reading is done */</span>
-<a name="l01028"></a>01028         <span class="keyword">const</span> <span class="keywordtype">int</span> irowpre = irow;
-<a name="l01029"></a>01029         <span class="keywordtype">int</span> iirow = 0;
-<a name="l01030"></a>01030         <span class="keywordtype">int</span> ierror;
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032         <span class="keywordflow">if</span> (rawfile == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Should not happen... */</span>
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034         stream = fopen(rawfile, <span class="stringliteral">"r"</span>);
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036         <span class="keywordflow">if</span> (stream == NULL) {
-<a name="l01037"></a>01037 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01038"></a>01038 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_FILE_IO, <span class="stringliteral">"Could not "</span>
-<a name="l01039"></a>01039                                   <span class="stringliteral">"open %s for reading"</span>, rawfile);
-<a name="l01040"></a>01040 <span class="preprocessor">#else</span>
-<a name="l01041"></a>01041 <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_FILE_IO, <span class="stringliteral">"Could not "</span>
-<a name="l01042"></a>01042                                   <span class="stringliteral">"open file for reading"</span>);
-<a name="l01043"></a>01043 <span class="preprocessor">#endif</span>
-<a name="l01044"></a>01044 <span class="preprocessor"></span>            <span class="keywordflow">break</span>;
-<a name="l01045"></a>01045         }
-<a name="l01046"></a>01046 
-<a name="l01047"></a>01047         <span class="keywordflow">for</span> (;(done = fgets(linebuffer, maxlinelen, stream)) != NULL; iirow++) {
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049             <span class="keywordflow">if</span> (linebuffer[0] != commentchar) {
-<a name="l01050"></a>01050                 cpl_boolean didset;
-<a name="l01051"></a>01051 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01052"></a>01052 <span class="preprocessor"></span>                <span class="keyword">const</span> <span class="keywordtype">int</span> prerow = irow;
-<a name="l01053"></a>01053 <span class="preprocessor">#endif</span>
-<a name="l01054"></a>01054 <span class="preprocessor"></span>
-<a name="l01055"></a>01055                 <span class="keywordflow">if</span> (irow == nrow) {
-<a name="l01056"></a>01056                     nrow += nrow ? nrow : 1;
-<a name="l01057"></a>01057                     <span class="keywordflow">if</span> (cpl_table_set_size(<span class="keyword">self</span>, nrow)) <span class="keywordflow">break</span>;
-<a name="l01058"></a>01058                 }
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060                 didset = table_set_row(<span class="keyword">self</span>, linebuffer, irow, rawframe,
-<a name="l01061"></a>01061                                        parlist);
-<a name="l01062"></a>01062                 <span class="keywordflow">if</span> (didset) irow++;
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064                 <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {
-<a name="l01065"></a>01065                     <span class="keywordflow">if</span> (didset)
-<a name="l01066"></a>01066 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01067"></a>01067 <span class="preprocessor"></span>                        cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01068"></a>01068                                               <span class="stringliteral">"Failed to set table row %d "</span>
-<a name="l01069"></a>01069                                               <span class="stringliteral">"using line %d from %d. file %s"</span>,
-<a name="l01070"></a>01070                                               1+prerow, iirow+1,
-<a name="l01071"></a>01071                                               nfiles+1, rawfile);
-<a name="l01072"></a>01072                     <span class="keywordflow">else</span>
-<a name="l01073"></a>01073                         cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01074"></a>01074                                               <span class="stringliteral">"Failure with line %d from %d. "</span>
-<a name="l01075"></a>01075                                               <span class="stringliteral">"file %s"</span>, iirow+1,
-<a name="l01076"></a>01076                                               nfiles+1, rawfile);
-<a name="l01077"></a>01077 <span class="preprocessor">#else</span>
-<a name="l01078"></a>01078 <span class="preprocessor"></span>                        cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01079"></a>01079                                               <span class="stringliteral">"Failed to set table row"</span>
-<a name="l01080"></a>01080                                               <span class="stringliteral">"using catalogue line"</span>);
-<a name="l01081"></a>01081                     <span class="keywordflow">else</span>
-<a name="l01082"></a>01082                         cpl_error_set_message(cpl_func, cpl_error_get_code(),
-<a name="l01083"></a>01083                                               <span class="stringliteral">"Failure with catalogue line"</span>);
-<a name="l01084"></a>01084 <span class="preprocessor">#endif</span>
-<a name="l01085"></a>01085 <span class="preprocessor"></span>
-<a name="l01086"></a>01086                     <span class="keywordflow">break</span>;
-<a name="l01087"></a>01087                 }
-<a name="l01088"></a>01088             }
-<a name="l01089"></a>01089         }
-<a name="l01090"></a>01090         <span class="keywordflow">if</span> (done != NULL) <span class="keywordflow">break</span>;
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092         ierror = fclose(stream);
-<a name="l01093"></a>01093         stream = NULL;
-<a name="l01094"></a>01094         <span class="keywordflow">if</span> (ierror) <span class="keywordflow">break</span>;
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097         <span class="keywordflow">if</span> (irow == irowpre)
-<a name="l01098"></a>01098             cpl_msg_warning(cpl_func, <span class="stringliteral">"No usable lines in the %d. file: %s"</span>,
-<a name="l01099"></a>01099                             1+nfiles, rawfile);
-<a name="l01100"></a>01100     }
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102     cpl_free(linebuffer);
-<a name="l01103"></a>01103     <span class="keywordflow">if</span> (stream != NULL) fclose(stream);
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105     <span class="comment">/* Check for premature end */</span>
-<a name="l01106"></a>01106     cpl_ensure_code(rawframe == NULL, cpl_error_get_code());
-<a name="l01107"></a>01107 
-<a name="l01108"></a>01108     <span class="keywordflow">if</span> (irow == 0) {
-<a name="l01109"></a>01109 <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span>
-<a name="l01110"></a>01110 <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l01111"></a>01111                                      <span class="stringliteral">"No usable lines in the %d input "</span>
-<a name="l01112"></a>01112                                      <span class="stringliteral">"frame(s)"</span>, nfiles);
-<a name="l01113"></a>01113 <span class="preprocessor">#else</span>
-<a name="l01114"></a>01114 <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l01115"></a>01115                                      <span class="stringliteral">"No usable lines in the input frame(s)"</span>);
-<a name="l01116"></a>01116 <span class="preprocessor">#endif</span>
-<a name="l01117"></a>01117 <span class="preprocessor"></span>    }
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119     <span class="comment">/* Resize the table to the actual number of rows set */</span>
-<a name="l01120"></a>01120     cpl_ensure_code(!cpl_table_set_size(<span class="keyword">self</span>, irow), cpl_error_get_code());
-<a name="l01121"></a>01121 
-<a name="l01122"></a>01122     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01123"></a>01123 }
-<a name="l01124"></a>01124 
-<a name="l01125"></a>01125 
-<a name="l01126"></a>01126 
-<a name="l01127"></a>01127 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01139"></a>01139 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01140"></a><a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e">01140</a> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(<span class="keywordtype">void</span>)
-<a name="l01141"></a>01141 {
-<a name="l01142"></a>01142     <span class="keywordflow">return</span>;
-<a name="l01143"></a>01143 }
-<a name="l01144"></a>01144 
-<a name="l01145"></a>01145 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01152"></a>01152 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01153"></a><a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde">01153</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde" title="Comparison function to identify different input frames.">irplib_compare_tags</a>(
-<a name="l01154"></a>01154         cpl_frame   *   frame1,
-<a name="l01155"></a>01155         cpl_frame   *   frame2)
-<a name="l01156"></a>01156 {
-<a name="l01157"></a>01157     <span class="keyword">const</span> <span class="keywordtype">char</span>            *   v1 ;
-<a name="l01158"></a>01158     <span class="keyword">const</span> <span class="keywordtype">char</span>            *   v2 ;
-<a name="l01159"></a>01159 
-<a name="l01160"></a>01160     <span class="comment">/* Test entries */</span>
-<a name="l01161"></a>01161     <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01162"></a>01162 
-<a name="l01163"></a>01163     <span class="comment">/* Get the tags */</span>
-<a name="l01164"></a>01164     <span class="keywordflow">if</span> ((v1 = cpl_frame_get_tag(frame1)) == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01165"></a>01165     <span class="keywordflow">if</span> ((v2 = cpl_frame_get_tag(frame2)) == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01166"></a>01166 
-<a name="l01167"></a>01167     <span class="comment">/* Compare the tags */</span>
-<a name="l01168"></a>01168     <span class="keywordflow">if</span> (strcmp(v1, v2)) <span class="keywordflow">return</span> 0 ;
-<a name="l01169"></a>01169     <span class="keywordflow">else</span> <span class="keywordflow">return</span> 1 ;
-<a name="l01170"></a>01170 }
-<a name="l01171"></a>01171 
-<a name="l01172"></a>01172 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01188"></a>01188 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01189"></a><a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134">01189</a> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134" title="Find the filename with the given tag in a frame set.">irplib_frameset_find_file</a>(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self</span>,
-<a name="l01190"></a>01190                                       <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)
-<a name="l01191"></a>01191 {
-<a name="l01192"></a>01192     <span class="keyword">const</span> cpl_frame * frame = cpl_frameset_find_const(<span class="keyword">self</span>, tag);
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197     <span class="keywordflow">if</span> (frame == NULL) <span class="keywordflow">return</span> NULL;
-<a name="l01198"></a>01198 
-<a name="l01199"></a>01199     <span class="keywordflow">if</span> (cpl_frameset_find_const(<span class="keyword">self</span>, NULL))
-<a name="l01200"></a>01200         cpl_msg_warning(cpl_func,
-<a name="l01201"></a>01201             <span class="stringliteral">"Frameset has more than one file with tag: %s"</span>,
-<a name="l01202"></a>01202                         tag);
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204     <span class="keywordflow">return</span> cpl_frame_get_filename(frame);
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206 }
-<a name="l01207"></a>01207 
-<a name="l01208"></a>01208 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01218"></a>01218 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01219"></a>01219 <span class="keyword">const</span>
-<a name="l01220"></a><a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68">01220</a> cpl_frame * <a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68" title="Find the first frame belonging to the given group.">irplib_frameset_get_first_from_group</a>(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self</span>,
-<a name="l01221"></a>01221                                                  cpl_frame_group      group)
-<a name="l01222"></a>01222 {
-<a name="l01223"></a>01223     <span class="keyword">const</span> cpl_frame * frame;
-<a name="l01224"></a>01224 
-<a name="l01225"></a>01225     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);
-<a name="l01226"></a>01226 
-<a name="l01227"></a>01227     <span class="keywordflow">for</span> (frame = cpl_frameset_get_first_const(<span class="keyword">self</span>); frame != NULL ;
-<a name="l01228"></a>01228          frame = cpl_frameset_get_next_const(<span class="keyword">self</span>)) {
-<a name="l01229"></a>01229         <span class="keywordflow">if</span> (cpl_frame_get_group(frame) == group) <span class="keywordflow">break</span>;
-<a name="l01230"></a>01230     }
-<a name="l01231"></a>01231     <span class="keywordflow">return</span> frame;
-<a name="l01232"></a>01232 }
-<a name="l01233"></a>01233 
-<a name="l01234"></a>01234 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01253"></a>01253 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01254"></a><a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1">01254</a> cpl_error_code <a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1" title="Find the aperture(s) with the greatest flux.">irplib_apertures_find_max_flux</a>(<span class="keyword">const</span> cpl_apertures * <span class="keyword">self</span>,
-<a name="l01255"></a>01255                                               <span class="keywordtype">int</span> * ind, <span class="keywordtype">int</span> nfind)
-<a name="l01256"></a>01256 {
-<a name="l01257"></a>01257     <span class="keyword">const</span> <span class="keywordtype">int</span>    nsize = cpl_apertures_get_size(<span class="keyword">self</span>);
-<a name="l01258"></a>01258     <span class="keywordtype">int</span>          ifind;
-<a name="l01259"></a>01259 
-<a name="l01260"></a>01260 
-<a name="l01261"></a>01261     cpl_ensure_code(nsize > 0,      cpl_error_get_code());
-<a name="l01262"></a>01262     cpl_ensure_code(ind,          CPL_ERROR_NULL_INPUT);
-<a name="l01263"></a>01263     cpl_ensure_code(nfind > 0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01264"></a>01264     cpl_ensure_code(nfind <= nsize, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266     <span class="keywordflow">for</span> (ifind=0; ifind < nfind; ifind++) {
-<a name="l01267"></a>01267         <span class="keywordtype">double</span> maxflux = -1;
-<a name="l01268"></a>01268         <span class="keywordtype">int</span> maxind = -1;
-<a name="l01269"></a>01269         <span class="keywordtype">int</span> i;
-<a name="l01270"></a>01270         <span class="keywordflow">for</span> (i=1; i <= nsize; i++) {
-<a name="l01271"></a>01271             <span class="keywordtype">int</span> k;
-<a name="l01272"></a>01272 
-<a name="l01273"></a>01273             <span class="comment">/* The flux has to be the highest among those not already found */</span>
-<a name="l01274"></a>01274             <span class="keywordflow">for</span> (k=0; k < ifind; k++) <span class="keywordflow">if</span> (ind[k] == i) <span class="keywordflow">break</span>;
-<a name="l01275"></a>01275 
-<a name="l01276"></a>01276             <span class="keywordflow">if</span> (k == ifind) {
-<a name="l01277"></a>01277                 <span class="comment">/* i has not been inserted into ind */</span>
-<a name="l01278"></a>01278                 <span class="keyword">const</span> <span class="keywordtype">double</span> flux = cpl_apertures_get_flux(<span class="keyword">self</span>, i);
-<a name="l01279"></a>01279 
-<a name="l01280"></a>01280                 <span class="keywordflow">if</span> (maxind < 0 || flux > maxflux) {
-<a name="l01281"></a>01281                     maxind = i;
-<a name="l01282"></a>01282                     maxflux = flux;
-<a name="l01283"></a>01283                 }
-<a name="l01284"></a>01284             }
-<a name="l01285"></a>01285         }
-<a name="l01286"></a>01286         ind[ifind] = maxind;
-<a name="l01287"></a>01287     }
-<a name="l01288"></a>01288 
-<a name="l01289"></a>01289     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291 }
-<a name="l01292"></a>01292 
-<a name="l01293"></a>01293 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01297"></a>01297 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01298"></a><a class="code" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f">01298</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f" title="portable isinf">irplib_isinf</a>(<span class="keywordtype">double</span> value)
-<a name="l01299"></a>01299 {
-<a name="l01300"></a>01300 <span class="preprocessor">#if defined HAVE_ISINF && HAVE_ISINF</span>
-<a name="l01301"></a>01301 <span class="preprocessor"></span>    <span class="keywordflow">return</span> isinf(value);
-<a name="l01302"></a>01302 <span class="preprocessor">#else</span>
-<a name="l01303"></a>01303 <span class="preprocessor"></span>    <span class="keywordflow">return</span> value != 0 && value == 2 * value;
-<a name="l01304"></a>01304 <span class="preprocessor">#endif</span>
-<a name="l01305"></a>01305 <span class="preprocessor"></span>}
-<a name="l01306"></a>01306 
-<a name="l01307"></a>01307 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01311"></a>01311 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01312"></a><a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4">01312</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(<span class="keywordtype">double</span> value)
-<a name="l01313"></a>01313 {
-<a name="l01314"></a>01314 <span class="preprocessor">#if defined HAVE_ISNAN && HAVE_ISNAN</span>
-<a name="l01315"></a>01315 <span class="preprocessor"></span>    <span class="keywordflow">return</span> isnan(value);
-<a name="l01316"></a>01316 <span class="preprocessor">#else</span>
-<a name="l01317"></a>01317 <span class="preprocessor"></span>    <span class="keywordflow">return</span> value != value;
-<a name="l01318"></a>01318 <span class="preprocessor">#endif</span>
-<a name="l01319"></a>01319 <span class="preprocessor"></span>}
-<a name="l01320"></a>01320 
-<a name="l01325"></a>01325 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01336"></a>01336 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01337"></a>01337 <span class="keyword">inline</span> <span class="keyword">static</span>
-<a name="l01338"></a>01338 <span class="keywordtype">double</span> irplib_data_get_double(<span class="keyword">const</span> <span class="keywordtype">void</span> * <span class="keyword">self</span>, cpl_type type, <span class="keywordtype">int</span> i)
-<a name="l01339"></a>01339 {
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341     <span class="keywordtype">double</span> value;
-<a name="l01342"></a>01342 
-<a name="l01343"></a>01343 
-<a name="l01344"></a>01344     <span class="keywordflow">switch</span> (type) {
-<a name="l01345"></a>01345     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l01346"></a>01346         {
-<a name="l01347"></a>01347             <span class="keyword">const</span> <span class="keywordtype">float</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">float</span>*)<span class="keyword">self</span>;
-<a name="l01348"></a>01348             value = (double)pself[i];
-<a name="l01349"></a>01349             <span class="keywordflow">break</span>;
-<a name="l01350"></a>01350         }
-<a name="l01351"></a>01351     <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l01352"></a>01352         {
-<a name="l01353"></a>01353             <span class="keyword">const</span> <span class="keywordtype">int</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">int</span>*)<span class="keyword">self</span>;
-<a name="l01354"></a>01354             value = (double)pself[i];
-<a name="l01355"></a>01355             <span class="keywordflow">break</span>;
-<a name="l01356"></a>01356         }
-<a name="l01357"></a>01357     <span class="keywordflow">default</span>: <span class="comment">/* case CPL_TYPE_DOUBLE */</span>
-<a name="l01358"></a>01358         {
-<a name="l01359"></a>01359             <span class="keyword">const</span> <span class="keywordtype">double</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">double</span>*)<span class="keyword">self</span>;
-<a name="l01360"></a>01360             value = pself[i];
-<a name="l01361"></a>01361             <span class="keywordflow">break</span>;
-<a name="l01362"></a>01362         }
-<a name="l01363"></a>01363     }
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365     <span class="keywordflow">return</span> value;
-<a name="l01366"></a>01366 
-<a name="l01367"></a>01367 }
-<a name="l01368"></a>01368 
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01381"></a>01381 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01382"></a>01382 <span class="keyword">inline</span> <span class="keyword">static</span>
-<a name="l01383"></a>01383 <span class="keywordtype">void</span> irplib_data_set_double(<span class="keywordtype">void</span> * <span class="keyword">self</span>, cpl_type type, <span class="keywordtype">int</span> i, <span class="keywordtype">double</span> value)
-<a name="l01384"></a>01384 {
-<a name="l01385"></a>01385 
-<a name="l01386"></a>01386     <span class="keywordflow">switch</span> (type) {
-<a name="l01387"></a>01387     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l01388"></a>01388         {
-<a name="l01389"></a>01389             <span class="keywordtype">float</span> * pself = (<span class="keywordtype">float</span>*)<span class="keyword">self</span>;
-<a name="l01390"></a>01390             pself[i] = (float)value;
-<a name="l01391"></a>01391             <span class="keywordflow">break</span>;
-<a name="l01392"></a>01392         }
-<a name="l01393"></a>01393     <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l01394"></a>01394         {
-<a name="l01395"></a>01395             <span class="keywordtype">int</span> * pself = (<span class="keywordtype">int</span>*)<span class="keyword">self</span>;
-<a name="l01396"></a>01396             pself[i] = (int)value;
-<a name="l01397"></a>01397             <span class="keywordflow">break</span>;
-<a name="l01398"></a>01398         }
-<a name="l01399"></a>01399     <span class="keywordflow">default</span>: <span class="comment">/* case CPL_TYPE_DOUBLE */</span>
-<a name="l01400"></a>01400         {
-<a name="l01401"></a>01401             <span class="keywordtype">double</span> * pself = (<span class="keywordtype">double</span>*)<span class="keyword">self</span>;
-<a name="l01402"></a>01402             pself[i] = value;
-<a name="l01403"></a>01403             <span class="keywordflow">break</span>;
-<a name="l01404"></a>01404         }
-<a name="l01405"></a>01405     }
-<a name="l01406"></a>01406 }
-<a name="l01407"></a>01407 
-<a name="l01408"></a>01408 
-<a name="l01409"></a>01409 
-<a name="l01410"></a>01410 
-<a name="l01411"></a>01411 
-<a name="l01412"></a>01412 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01423"></a>01423 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01424"></a>01424 <span class="keyword">static</span>
-<a name="l01425"></a>01425 <span class="keywordtype">void</span> irplib_errorstate_dump_one_level(<span class="keywordtype">void</span> (*messenger)(<span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l01426"></a>01426                                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...),
-<a name="l01427"></a>01427                                       <span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span> first,
-<a name="l01428"></a>01428                                       <span class="keywordtype">unsigned</span> last)
-<a name="l01429"></a>01429 {
-<a name="l01430"></a>01430 
-<a name="l01431"></a>01431     <span class="keyword">const</span> cpl_boolean is_reverse = first > last ? CPL_TRUE : CPL_FALSE;
-<a name="l01432"></a>01432     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>    newest     = is_reverse ? first : last;
-<a name="l01433"></a>01433     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>    oldest     = is_reverse ? last : first;
-<a name="l01434"></a>01434     <span class="keyword">const</span> <span class="keywordtype">char</span>      * revmsg     = is_reverse ? <span class="stringliteral">" in reverse order"</span> : <span class="stringliteral">""</span>;
-<a name="l01435"></a>01435 
-<a name="l01436"></a>01436 
-<a name="l01437"></a>01437     <span class="comment">/*</span>
-<a name="l01438"></a>01438 <span class="comment">    cx_assert( messenger != NULL );</span>
-<a name="l01439"></a>01439 <span class="comment">    cx_assert( oldest <= self );</span>
-<a name="l01440"></a>01440 <span class="comment">    cx_assert( newest >= self );</span>
-<a name="l01441"></a>01441 <span class="comment">    */</span>
-<a name="l01442"></a>01442 
-<a name="l01443"></a>01443     <span class="keywordflow">if</span> (newest == 0) {
-<a name="l01444"></a>01444         messenger(cpl_func, <span class="stringliteral">"No error(s) to dump"</span>);
-<a name="l01445"></a>01445         <span class="comment">/* cx_assert( oldest == 0); */</span>
-<a name="l01446"></a>01446     } <span class="keywordflow">else</span> {
-<a name="l01447"></a>01447         <span class="comment">/*</span>
-<a name="l01448"></a>01448 <span class="comment">          cx_assert( oldest > 0);</span>
-<a name="l01449"></a>01449 <span class="comment">          cx_assert( newest >= oldest);</span>
-<a name="l01450"></a>01450 <span class="comment">        */</span>
-<a name="l01451"></a>01451         <span class="keywordflow">if</span> (<span class="keyword">self</span> == first) {
-<a name="l01452"></a>01452             <span class="keywordflow">if</span> (oldest == 1) {
-<a name="l01453"></a>01453                 messenger(cpl_func, <span class="stringliteral">"Dumping all %u error(s)%s:"</span>, newest,
-<a name="l01454"></a>01454                           revmsg);
-<a name="l01455"></a>01455             } <span class="keywordflow">else</span> {
-<a name="l01456"></a>01456                 messenger(cpl_func, <span class="stringliteral">"Dumping the %u most recent error(s) "</span>
-<a name="l01457"></a>01457                           <span class="stringliteral">"out of a total of %u errors%s:"</span>,
-<a name="l01458"></a>01458                           newest - oldest + 1, newest, revmsg);
-<a name="l01459"></a>01459             }
-<a name="l01460"></a>01460             cpl_msg_indent_more();
-<a name="l01461"></a>01461         }
-<a name="l01462"></a>01462 
-<a name="l01463"></a>01463         messenger(cpl_func, <span class="stringliteral">"[%u/%u] '%s' (%u) at %s"</span>, <span class="keyword">self</span>, newest,
-<a name="l01464"></a>01464                   cpl_error_get_message(), cpl_error_get_code(),
-<a name="l01465"></a>01465                   cpl_error_get_where());
-<a name="l01466"></a>01466 
-<a name="l01467"></a>01467         <span class="keywordflow">if</span> (<span class="keyword">self</span> == last) cpl_msg_indent_less();
-<a name="l01468"></a>01468     }
-<a name="l01469"></a>01469 }
-<a name="l01470"></a>01470 
-<a name="l01471"></a>01471 cpl_polynomial * irplib_polynomial_fit_1d_create_chiq(
-<a name="l01472"></a>01472         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l01473"></a>01473         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l01474"></a>01474         <span class="keywordtype">int</span>                     degree,
-<a name="l01475"></a>01475         <span class="keywordtype">double</span>              *   rechisq
-<a name="l01476"></a>01476         )
-<a name="l01477"></a>01477  {
-<a name="l01478"></a>01478     <span class="keywordflow">return</span> irplib_polynomial_fit_1d_create_common(x_pos, values, degree, NULL, rechisq);
-<a name="l01479"></a>01479  }
-<a name="l01480"></a>01480 cpl_polynomial * irplib_polynomial_fit_1d_create(
-<a name="l01481"></a>01481         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l01482"></a>01482         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l01483"></a>01483         <span class="keywordtype">int</span>                     degree,
-<a name="l01484"></a>01484         <span class="keywordtype">double</span>              *   mse
-<a name="l01485"></a>01485         )
-<a name="l01486"></a>01486 {
-<a name="l01487"></a>01487 
-<a name="l01488"></a>01488     <span class="keywordflow">return</span> irplib_polynomial_fit_1d_create_common(x_pos, values, degree, mse, NULL);
-<a name="l01489"></a>01489 }
-<a name="l01490"></a>01490 <span class="keyword">static</span> cpl_polynomial * irplib_polynomial_fit_1d_create_common(
-<a name="l01491"></a>01491         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l01492"></a>01492         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l01493"></a>01493         <span class="keywordtype">int</span>                     degree,
-<a name="l01494"></a>01494         <span class="keywordtype">double</span>              *   mse,
-<a name="l01495"></a>01495         <span class="keywordtype">double</span>              *  rechisq
-<a name="l01496"></a>01496         )
-<a name="l01497"></a>01497 {
-<a name="l01498"></a>01498     cpl_polynomial * fit1d = NULL;
-<a name="l01499"></a>01499     cpl_size loc_degree = (cpl_size)degree ;
-<a name="l01500"></a>01500     <span class="keywordtype">int</span> x_size = 0;
-<a name="l01501"></a>01501     fit1d = cpl_polynomial_new(1);
-<a name="l01502"></a>01502     x_size = cpl_vector_get_size(x_pos);    
-<a name="l01503"></a>01503     <span class="keywordflow">if</span>(fit1d != NULL && x_size > 1)
-<a name="l01504"></a>01504     {
-<a name="l01505"></a>01505         cpl_matrix     * samppos = NULL;
-<a name="l01506"></a>01506         cpl_vector     * fitresidual = NULL;
-<a name="l01507"></a>01507         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01508"></a>01508         samppos = cpl_matrix_wrap(1, x_size,
-<a name="l01509"></a>01509                                   (<span class="keywordtype">double</span>*)cpl_vector_get_data_const(x_pos));
-<a name="l01510"></a>01510         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01511"></a>01511         fitresidual = cpl_vector_new(x_size);
-<a name="l01512"></a>01512         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01513"></a>01513         cpl_polynomial_fit(fit1d, samppos, NULL, values, NULL,
-<a name="l01514"></a>01514                            CPL_FALSE, NULL, &loc_degree);
-<a name="l01515"></a>01515         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01516"></a>01516         cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL,
-<a name="l01517"></a>01517                                                 fit1d, samppos, rechisq);
-<a name="l01518"></a>01518         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01519"></a>01519         <span class="keywordflow">if</span> (mse)
-<a name="l01520"></a>01520         {
-<a name="l01521"></a>01521             *mse = cpl_vector_product(fitresidual, fitresidual)
-<a name="l01522"></a>01522                 / cpl_vector_get_size(fitresidual);
-<a name="l01523"></a>01523         }
-<a name="l01524"></a>01524         cpl_matrix_unwrap(samppos);
-<a name="l01525"></a>01525         cpl_vector_delete(fitresidual);
-<a name="l01526"></a>01526     }
-<a name="l01527"></a>01527     <span class="keywordflow">return</span> fit1d;
-<a name="l01528"></a>01528 }
-<a name="l01529"></a>01529 
-<a name="l01530"></a>01530 <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort(<span class="keywordtype">int</span>* iindex, <span class="keywordtype">double</span>* exptime, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right)
-<a name="l01531"></a>01531 {
-<a name="l01532"></a>01532     <span class="keywordtype">int</span> i = left;
-<a name="l01533"></a>01533     <span class="keywordtype">int</span> j = right;
-<a name="l01534"></a>01534     <span class="keywordtype">int</span> pivot = (i + j) / 2;
-<a name="l01535"></a>01535     <span class="keywordtype">double</span> index_value = exptime[pivot];
-<a name="l01536"></a>01536     <span class="keywordflow">do</span>
-<a name="l01537"></a>01537     {
-<a name="l01538"></a>01538         <span class="keywordflow">while</span>(exptime[i] < index_value) i++;
-<a name="l01539"></a>01539         <span class="keywordflow">while</span>(exptime[j] > index_value) j--;
-<a name="l01540"></a>01540         <span class="keywordflow">if</span> (i <= j)
-<a name="l01541"></a>01541         {
-<a name="l01542"></a>01542             <span class="keywordflow">if</span>(i < j)
-<a name="l01543"></a>01543             {
-<a name="l01544"></a>01544                 <span class="keywordtype">int</span> tmp = iindex[i];
-<a name="l01545"></a>01545                 <span class="keywordtype">double</span> dtmp = exptime[i];
-<a name="l01546"></a>01546                 iindex[i]=iindex[j];
-<a name="l01547"></a>01547                 iindex[j]=tmp;
-<a name="l01548"></a>01548                 exptime[i] = exptime[j];
-<a name="l01549"></a>01549                 exptime[j] = dtmp;
-<a name="l01550"></a>01550             }
-<a name="l01551"></a>01551             i++;
-<a name="l01552"></a>01552             j--;
-<a name="l01553"></a>01553         }
-<a name="l01554"></a>01554     } <span class="keywordflow">while</span> (i <= j);
-<a name="l01555"></a>01555 
-<a name="l01556"></a>01556     <span class="keywordflow">if</span> (i < right)
-<a name="l01557"></a>01557     {
-<a name="l01558"></a>01558         quicksort(iindex, exptime, i, right);
-<a name="l01559"></a>01559     }
-<a name="l01560"></a>01560     <span class="keywordflow">if</span> (left < j)
-<a name="l01561"></a>01561     {
-<a name="l01562"></a>01562         quicksort(iindex, exptime,left, j);
-<a name="l01563"></a>01563     }
-<a name="l01564"></a>01564 }
-<a name="l01565"></a>01565 cpl_error_code irplib_frameset_sort(<span class="keyword">const</span> cpl_frameset *  <span class="keyword">self</span>, <span class="keywordtype">int</span>* iindex, <span class="keywordtype">double</span>* exptime)
-<a name="l01566"></a>01566 {
-<a name="l01567"></a>01567     <span class="keywordtype">int</span> sz = 0;
-<a name="l01568"></a>01568     <span class="keywordtype">int</span> i = 0;
-<a name="l01569"></a>01569     <span class="keyword">const</span> cpl_frame* tmp_frame = 0;
-<a name="l01570"></a>01570     cpl_error_code error = CPL_ERROR_NONE;
-<a name="l01571"></a>01571     sz = cpl_frameset_get_size(<span class="keyword">self</span>);
-<a name="l01572"></a>01572 
-<a name="l01573"></a>01573     <span class="comment">/* 1. get an array of frames */</span>
-<a name="l01574"></a>01574     tmp_frame = cpl_frameset_get_first_const(<span class="keyword">self</span>);
-<a name="l01575"></a>01575     <span class="keywordflow">while</span>(tmp_frame)
-<a name="l01576"></a>01576     {
-<a name="l01577"></a>01577         exptime[i] = frame_get_exptime(tmp_frame);
-<a name="l01578"></a>01578         iindex[i] = i;
-<a name="l01579"></a>01579         tmp_frame = cpl_frameset_get_next_const(<span class="keyword">self</span>);
-<a name="l01580"></a>01580         i++;
-<a name="l01581"></a>01581     }
-<a name="l01582"></a>01582     <span class="comment">/* 2.sort */</span>
-<a name="l01583"></a>01583     quicksort(iindex, exptime, 0, sz - 1);
-<a name="l01584"></a>01584 
-<a name="l01585"></a>01585     <span class="keywordflow">return</span> error;
-<a name="l01586"></a>01586 }
-<a name="l01587"></a>01587 
-<a name="l01588"></a>01588 <span class="keyword">static</span> <span class="keywordtype">double</span> frame_get_exptime(<span class="keyword">const</span> cpl_frame * pframe)
-<a name="l01589"></a>01589 {
-<a name="l01590"></a>01590     cpl_propertylist       *plist = 0;
-<a name="l01591"></a>01591     <span class="keywordtype">double</span>                  dval = 0;
-<a name="l01592"></a>01592 
-<a name="l01593"></a>01593     plist = cpl_propertylist_load(cpl_frame_get_filename(pframe),0);
-<a name="l01594"></a>01594     <span class="keywordflow">if</span>(plist)
-<a name="l01595"></a>01595     {
-<a name="l01596"></a>01596       cpl_error_code err = CPL_ERROR_NONE;  
-<a name="l01597"></a>01597         dval = cpl_propertylist_get_double(plist, <span class="stringliteral">"EXPTIME"</span>);
-<a name="l01598"></a>01598        err = cpl_error_get_code();
-<a name="l01599"></a>01599        <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)
-<a name="l01600"></a>01600        {
-<a name="l01601"></a>01601          cpl_msg_error(cpl_func, <span class="stringliteral">"error during reading EXPTIME key from the frame [%s]"</span>, cpl_frame_get_filename(pframe));
-<a name="l01602"></a>01602        }
-<a name="l01603"></a>01603     }
-<a name="l01604"></a>01604     <span class="comment">/* Free and return */</span>
-<a name="l01605"></a>01605     cpl_propertylist_delete(plist);
-<a name="l01606"></a>01606     <span class="keywordflow">return</span> dval;
-<a name="l01607"></a>01607 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_utils.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_utils.c,v 1.85 2013/07/04 12:10:55 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/07/04 12:10:55 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.85 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <assert.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <errno.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                           Defines</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#ifndef inline</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                           Missing Function Prototypes</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                           Private Function Prototypes</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_data_get_double(<span class="keyword">const</span> <span class="keywordtype">void</span> *, cpl_type, <span class="keywordtype">int</span>)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#ifdef CPL_HAVE_GNUC_NONNULL</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span>     __attribute__((nonnull))</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span>    ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_data_set_double(<span class="keywordtype">void</span> *, cpl_type, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#ifdef CPL_HAVE_GNUC_NONNULL</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span>     __attribute__((nonnull))</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span>    ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keywordtype">void</span> irplib_errorstate_dump_one_level(<span class="keywordtype">void</span> (*)(<span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                                                <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   #ifdef __GNUC__</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>       __attribute__((format (printf, 2, 3)))</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   #endif</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                                       , <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">double</span> frame_get_exptime(<span class="keyword">const</span> cpl_frame * pframe);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort(<span class="keywordtype">int</span>* index, <span class="keywordtype">double</span>* exptime, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> cpl_error_code irplib_dfs_product_save(cpl_frameset *,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                               cpl_propertylist *,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                               <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                               <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                                               <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                                               <span class="keyword">const</span> cpl_imagelist *,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                                               <span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                               cpl_type,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                               <span class="keyword">const</span> cpl_table *,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                               <span class="keyword">const</span> cpl_propertylist *,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                               <span class="keyword">const</span> cpl_propertylist *,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386">  130</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386" title="Dump a single CPL error at the CPL warning level.">irplib_errorstate_dump_warning</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned [...]
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                                     <span class="keywordtype">unsigned</span> last)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     irplib_errorstate_dump_one_level(&cpl_msg_warning, <span class="keyword">self</span>, first, last);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="keyword">static</span> cpl_polynomial * irplib_polynomial_fit_1d_create_common(</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         <span class="keywordtype">double</span>              *   mse,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         <span class="keywordtype">double</span>              *  rechisq</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         );</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb">  157</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb" title="Dump a single CPL error at the CPL info level.">irplib_errorstate_dump_info</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span [...]
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                     <span class="keywordtype">unsigned</span> last)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     irplib_errorstate_dump_one_level(&cpl_msg_info, <span class="keyword">self</span>, first, last);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1">  177</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>(<span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</sp [...]
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                                     <span class="keywordtype">unsigned</span> last)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     irplib_errorstate_dump_one_level(&cpl_msg_debug, <span class="keyword">self</span>, first, last);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e">  208</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image</a>(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                                      <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                                      <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                                      <span class="keyword">const</span> cpl_image         * image,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                                      cpl_type_bpp              bpp,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                                      <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     cpl_errorstate     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         : cpl_propertylist_new();</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(allframes, NULL, parlist, usedframes, NULL, image,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                            bpp, recipe, prolist, remregexp, pipe_id, filename);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     cpl_propertylist_delete(prolist);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> cpl_error_code</div>
+<div class="line"><a name="l00256"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7">  256</a></span> <a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7" title="Save a propertylist as a DFS-compliant pipeline product.">irplib_dfs_save_propertylist</a>(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                              <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                              <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                              <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     cpl_errorstate     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         : cpl_propertylist_new();</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cpl_dfs_save_propertylist(allframes, NULL, parlist, usedframes, NULL,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                               recipe, prolist, remregexp, pipe_id, filename);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     cpl_propertylist_delete(prolist);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1">  303</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1" title="Save an imagelist as a DFS-compliant pipeline product.">irplib_dfs_save_imagelist</a>(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                          <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                          <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                          <span class="keyword">const</span> cpl_imagelist     * imagelist,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                          cpl_type_bpp              bpp,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                          <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     cpl_errorstate     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         : cpl_propertylist_new();</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     cpl_dfs_save_imagelist(allframes, NULL, parlist, usedframes, NULL,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                            imagelist, bpp, recipe, prolist, remregexp, pipe_id,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                            filename);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     cpl_propertylist_delete(prolist);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade">  351</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                                      <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                                      <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                                      <span class="keyword">const</span> cpl_table         * table,</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                                      <span class="keyword">const</span> cpl_propertylist  * tablelist,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * procat,</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                                      <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     cpl_errorstate     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     cpl_propertylist * prolist  = applist ? cpl_propertylist_duplicate(applist)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         : cpl_propertylist_new();</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     cpl_propertylist_update_string(prolist, CPL_DFS_PRO_CATG, procat);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     cpl_dfs_save_table(allframes, NULL, parlist, usedframes, NULL,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                            table, tablelist, recipe, prolist, remregexp,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                            pipe_id, filename);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     cpl_propertylist_delete(prolist);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451">  411</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                       cpl_propertylist        * header,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                       <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                       <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                       <span class="keyword">const</span> cpl_frame         * inherit,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                       <span class="keyword">const</span> cpl_image         * image,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                       cpl_type                  type,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                       <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename)</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     <span class="keywordflow">return</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         irplib_dfs_product_save(allframes, header, parlist, usedframes, inherit,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                 NULL, image, type, NULL, NULL, recipe,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                 applist, remregexp, pipe_id, filename)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> cpl_error_code irplib_dfs_product_save(cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                                        cpl_propertylist        * header,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                        <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                                        <span class="keyword">const</span> cpl_frameset      * usedframes,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                        <span class="keyword">const</span> cpl_frame         * inherit,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                                        <span class="keyword">const</span> cpl_imagelist     * imagelist,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                        <span class="keyword">const</span> cpl_image         * image,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                        cpl_type                  type,</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                                        <span class="keyword">const</span> cpl_table         * table,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                                        <span class="keyword">const</span> cpl_propertylist  * tablelist,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                                        <span class="keyword">const</span> cpl_propertylist  * applist,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                        <span class="keyword">const</span> <span class="keywordtype">char</span>              * filename) {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>       * procat;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     cpl_propertylist * plist;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     cpl_frame        * product_frame;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="comment">/* Inside this function the product-types are numbered:</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">       0: imagelist</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="comment">       1: table</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">       2: image</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">       3: propertylist only</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>     pronum</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         = imagelist != NULL ? 0 : table != NULL ? 1 :  (image != NULL ? 2 : 3);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>       * proname[] = {<span class="stringliteral">"imagelist"</span>, <span class="stringliteral">"table"</span>, <span class="stringliteral">"image"</span>,</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                                     <span class="stringliteral">"propertylist"</span>};</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="comment">/* FIXME: Define a frame type for an imagelist and when data-less */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          protype[] = {CPL_FRAME_TYPE_ANY, CPL_FRAME_TYPE_TABLE,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                                     CPL_FRAME_TYPE_IMAGE, CPL_FRAME_TYPE_ANY};</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     cpl_error_code     error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="comment">/* No more than one of imagelist, table and image may be non-NULL */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     <span class="comment">/* tablelist may only be non-NULL when table is non-NULL */</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordflow">if</span> (imagelist != NULL) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         assert(pronum == 0);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         assert(image == NULL);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         assert(table == NULL);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         assert(tablelist == NULL);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (table != NULL) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         assert(pronum == 1);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         assert(imagelist == NULL);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         assert(image == NULL);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (image != NULL) {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         assert(pronum == 2);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         assert(imagelist == NULL);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         assert(table == NULL);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         assert(tablelist == NULL);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         assert(pronum == 3);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         assert(imagelist == NULL);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>         assert(table == NULL);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         assert(tablelist == NULL);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         assert(image == NULL);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     cpl_ensure_code(allframes  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     cpl_ensure_code(parlist    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     cpl_ensure_code(usedframes != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     cpl_ensure_code(recipe     != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     cpl_ensure_code(applist    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     cpl_ensure_code(pipe_id    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     cpl_ensure_code(filename   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     procat = cpl_propertylist_get_string(applist, CPL_DFS_PRO_CATG);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     cpl_ensure_code(procat     != NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Writing FITS %s product(%s): %s"</span>, proname[pronum],</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                  procat, filename);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     product_frame = cpl_frame_new();</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     error |= cpl_frame_set_filename(product_frame, filename);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     error |= cpl_frame_set_tag(product_frame, procat);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     error |= cpl_frame_set_type(product_frame, protype[pronum]);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     error |= cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     error |= cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         cpl_frame_delete(product_frame);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     <span class="keywordflow">if</span> (header != NULL) {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         cpl_propertylist_empty(header);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         plist = header;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         plist = cpl_propertylist_new();</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     }</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <span class="comment">/* Add any QC parameters here */</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">if</span> (applist != NULL) error = cpl_propertylist_copy_property_regexp(plist,</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                                                                        applist,</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>                                                                        <span class="stringliteral">"."</span>, 0);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="keywordflow">if</span> (!error)</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         error = cpl_dfs_setup_product_header(plist, product_frame, usedframes,</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                                              parlist, recipe, pipe_id,</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                                              <span class="stringliteral">"PRO-1.15"</span>, inherit);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordflow">if</span> (remregexp != NULL && !error) {</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         (void)cpl_propertylist_erase_regexp(plist, remregexp, 0);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) error = cpl_error_get_code();</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     }</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         <span class="keywordflow">switch</span> (pronum) {</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                 error = cpl_imagelist_save(imagelist, filename, type, plist,</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>                                            CPL_IO_CREATE);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>             <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>                 error = cpl_table_save(table, plist, tablelist, filename,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                                        CPL_IO_CREATE);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>             <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>                 error = cpl_image_save(image, filename, type, plist,</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                                        CPL_IO_CREATE);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>             <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>                 <span class="comment">/* case 3: */</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>                 error = cpl_propertylist_save(plist, filename, CPL_IO_CREATE);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     }</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         <span class="comment">/* Insert the frame of the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         error = cpl_frameset_insert(allframes, product_frame);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         cpl_frame_delete(product_frame);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     <span class="keywordflow">if</span> (plist != header) cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> }    </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954">  665</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(<span class="keyword">const</span> cpl_image * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                                   cpl_image * im_low,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                                   cpl_image * im_mid,</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                                   cpl_image * im_high,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                                   <span class="keywordtype">double</span> th_low,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                                   cpl_boolean isleq_low,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                                   <span class="keywordtype">double</span> th_high,</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                                   cpl_boolean isgeq_high,</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                                   <span class="keywordtype">double</span> alt_low,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                                   <span class="keywordtype">double</span> alt_high,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                                   cpl_boolean isbad_low,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                                   cpl_boolean isbad_mid,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                                   cpl_boolean isbad_high)</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> {</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     <span class="keyword">const</span> <span class="keywordtype">void</span>       * selfdata = cpl_image_get_data_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     <span class="comment">/* hasbpm reduces check-overhead if self does not have a bpm, and if</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="comment">       self is also passed as an output image, that ends up with bad pixels */</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     <span class="comment">/* FIXME: Need a proper way to know if a bpm has been allocated :-((((((( */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="keyword">const</span> cpl_boolean  hasbpm</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>         = cpl_image_count_rejected(<span class="keyword">self</span>) ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keyword">const</span> cpl_binary * selfbpm = hasbpm</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         ? cpl_mask_get_data_const(cpl_image_get_bpm_const(<span class="keyword">self</span>)) : NULL;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="keyword">const</span> cpl_type     selftype = cpl_image_get_type(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          nx = cpl_image_get_size_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          ny = cpl_image_get_size_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          npix = nx * ny;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <span class="keyword">const</span> cpl_boolean  do_low   = im_low  != NULL;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="keyword">const</span> cpl_boolean  do_mid   = im_mid  != NULL;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keyword">const</span> cpl_boolean  do_high  = im_high != NULL;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordtype">void</span>             * lowdata  = NULL;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <span class="keywordtype">void</span>             * middata  = NULL;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="keywordtype">void</span>             * highdata = NULL;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     cpl_binary       * lowbpm   = NULL;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     cpl_binary       * midbpm   = NULL;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     cpl_binary       * highbpm  = NULL;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keyword">const</span> cpl_type     lowtype</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         = do_low ? cpl_image_get_type(im_low) : CPL_TYPE_INVALID;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     <span class="keyword">const</span> cpl_type     midtype</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         = do_mid ? cpl_image_get_type(im_mid) : CPL_TYPE_INVALID;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keyword">const</span> cpl_type     hightype</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>         = do_high ? cpl_image_get_type(im_high) : CPL_TYPE_INVALID;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL,                CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     cpl_ensure_code(do_low || do_mid || do_high, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     cpl_ensure_code(th_low <= th_high,           CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordflow">if</span> (do_low) {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>         cpl_ensure_code(cpl_image_get_size_x(im_low) == nx,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         cpl_ensure_code(cpl_image_get_size_y(im_low) == ny,</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         lowdata = cpl_image_get_data(im_low);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     }</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordflow">if</span> (do_mid) {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>         cpl_ensure_code(cpl_image_get_size_x(im_mid) == nx,</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>         cpl_ensure_code(cpl_image_get_size_y(im_mid) == ny,</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         middata = cpl_image_get_data(im_mid);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     <span class="keywordflow">if</span> (do_high) {</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         cpl_ensure_code(cpl_image_get_size_x(im_high) == nx,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         cpl_ensure_code(cpl_image_get_size_y(im_high) == ny,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>                         CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         highdata = cpl_image_get_data(im_high);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     }</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     <span class="comment">/* From this point a failure would indicate a serious bug in CPL */</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <span class="keywordflow">for</span> (i = 0; i < npix; i++) {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> value = irplib_data_get_double(selfdata, selftype, i);</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>         cpl_boolean  isalt_low   = do_low;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         cpl_boolean  isalt_mid   = do_mid;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         cpl_boolean  isalt_high  = do_high;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         cpl_boolean  setbad_low  = do_low;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         cpl_boolean  setbad_mid  = do_mid;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         cpl_boolean  setbad_high = do_high;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         <span class="keyword">const</span> <span class="keywordtype">void</span> * setdata     = NULL;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <span class="keywordtype">double</span>       alt_mid     = 0.0; <span class="comment">/* Avoid (false) uninit warning */</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">if</span> (isleq_low ? value <= th_low : value < th_low) {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>             <span class="keywordflow">if</span> (do_low) {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>                 isalt_low = CPL_FALSE;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                 irplib_data_set_double(lowdata, lowtype, i, value);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                 setbad_low = hasbpm && selfbpm[i];</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>                 setdata = lowdata;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>             }</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>             alt_mid = alt_low;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isgeq_high ? value >= th_high : value > th_high) {</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>             <span class="keywordflow">if</span> (do_high) {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                 isalt_high = CPL_FALSE;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                 irplib_data_set_double(highdata, hightype, i, value);</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                 setbad_high = hasbpm && selfbpm[i];</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                 setdata = highdata;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>             }</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             alt_mid = alt_high;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (do_mid) {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>             isalt_mid = CPL_FALSE;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>             irplib_data_set_double(middata, midtype, i, value);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>             setbad_mid = hasbpm && selfbpm[i];</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>             setdata = middata;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         <span class="keywordflow">if</span> (isalt_low && lowdata != setdata) {</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>             irplib_data_set_double(lowdata, lowtype, i, alt_low);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>             setbad_low = isbad_low;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         <span class="keywordflow">if</span> (isalt_mid && middata != setdata) {</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             irplib_data_set_double(middata, midtype, i, alt_mid);</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             setbad_mid = isbad_mid;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         }</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         <span class="keywordflow">if</span> (isalt_high && highdata != setdata) {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             irplib_data_set_double(highdata, hightype, i, alt_high);</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>             setbad_high = isbad_high;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>         <span class="keywordflow">if</span> (setbad_low) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             <span class="keywordflow">if</span> (lowbpm == NULL) lowbpm</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                 = cpl_mask_get_data(cpl_image_get_bpm(im_low));</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>             lowbpm[i] = CPL_BINARY_1;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         }</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         <span class="keywordflow">if</span> (setbad_mid) {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>             <span class="keywordflow">if</span> (midbpm == NULL) midbpm</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                 = cpl_mask_get_data(cpl_image_get_bpm(im_mid));</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>             midbpm[i] = CPL_BINARY_1;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         }</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>         <span class="keywordflow">if</span> (setbad_high) {</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>             <span class="keywordflow">if</span> (highbpm == NULL) highbpm</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                 = cpl_mask_get_data(cpl_image_get_bpm(im_high));</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>             highbpm[i] = CPL_BINARY_1;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     }</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> cpl_error_code</div>
+<div class="line"><a name="l00860"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df">  860</a></span> <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s)">irplib_dfs_table_convert</a>(cpl_table               * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                          cpl_frameset            * allframes,</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                          <span class="keyword">const</span> cpl_frameset      * useframes,</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                          <span class="keywordtype">int</span>                       maxlinelen,</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>                          <span class="keywordtype">char</span>                      commentchar,</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * product_name,</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * procatg,</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                          <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * recipe_name,</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                          <span class="keyword">const</span> cpl_propertylist  * mainlist,</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                          <span class="keyword">const</span> cpl_propertylist  * extlist,</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * remregexp,</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * instrume,</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>              * pipe_id,</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>                          cpl_boolean (*table_set_row)</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>                          (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>                           <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>                           <span class="keyword">const</span> cpl_parameterlist *),</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>                          cpl_error_code (*table_check)</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>                          (cpl_table *,</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>                           <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>                           <span class="keyword">const</span> cpl_parameterlist *))</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>       * filename;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     cpl_propertylist * applist    = NULL;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     cpl_errorstate     prestate   = cpl_errorstate_get();</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     cpl_error_code     error;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <span class="keywordtype">char</span>             * fallback_filename = NULL;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     cpl_ensure_code(<span class="keyword">self</span>         != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     cpl_ensure_code(allframes    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     cpl_ensure_code(useframes    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     cpl_ensure_code(procatg      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     cpl_ensure_code(parlist      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     cpl_ensure_code(recipe_name  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     cpl_ensure_code(instrume     != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     cpl_ensure_code(pipe_id      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     cpl_ensure_code(!<a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(<span class="keyword">self</span>, useframes,</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                                                      maxlinelen,</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                                                      commentchar,</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>                                                      parlist,</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>                                                      table_set_row),</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>                     cpl_error_get_code());</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordflow">if</span> (table_check != NULL && (table_check(<span class="keyword">self</span>, useframes, parlist) ||</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                                 !cpl_errorstate_is_equal(prestate))) {</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>                                      <span class="stringliteral">"Consistency check of table failed"</span>);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     }</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     fallback_filename = cpl_sprintf(<span class="stringliteral">"%s"</span> CPL_DFS_FITS, recipe_name);</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     filename = product_name != NULL ? product_name : fallback_filename;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     applist = mainlist == NULL</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         ? cpl_propertylist_new() : cpl_propertylist_duplicate(mainlist);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     error = cpl_propertylist_update_string(applist, <span class="stringliteral">"INSTRUME"</span>, instrume);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     <span class="keywordflow">if</span> (!error)</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         error = <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(allframes, parlist, useframes, <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>                                       extlist, recipe_name, procatg, applist,</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>                                       remregexp, pipe_id, filename);</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     cpl_propertylist_delete(applist);</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     cpl_free(fallback_filename);</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="comment">/* Propagate the error, if any */</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> }</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> cpl_error_code</div>
+<div class="line"><a name="l00989"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d">  989</a></span> <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(cpl_table               * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>                                 <span class="keyword">const</span> cpl_frameset      * useframes,</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>                                 <span class="keywordtype">int</span>                       maxlinelen,</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>                                 <span class="keywordtype">char</span>                      commentchar,</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>                                 <span class="keyword">const</span> cpl_parameterlist * parlist,</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>                                 cpl_boolean (*table_set_row)</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                                 (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>                                  <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>                                  <span class="keyword">const</span> cpl_parameterlist *))</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> {</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     <span class="keyword">const</span> cpl_frame  * rawframe;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     <span class="keywordtype">char</span>             * linebuffer = NULL;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     FILE             * stream     = NULL;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     <span class="keywordtype">int</span>                nfiles     = 0;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     <span class="keywordtype">int</span>                nrow       = cpl_table_get_nrow(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     <span class="keywordtype">int</span>                irow       = 0;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     cpl_errorstate     prestate   = cpl_errorstate_get();</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     cpl_ensure_code(<span class="keyword">self</span>         != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     cpl_ensure_code(useframes    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     cpl_ensure_code(maxlinelen > 0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     cpl_ensure_code(parlist      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     cpl_ensure_code(table_set_row != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     linebuffer = cpl_malloc(maxlinelen);</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     <span class="keywordflow">for</span> (rawframe = cpl_frameset_get_first_const(useframes);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>          rawframe != NULL;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>          rawframe = cpl_frameset_get_next_const(useframes), nfiles++) {</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * rawfile = cpl_frame_get_filename(rawframe);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * done; <span class="comment">/* Indicate when the reading is done */</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> irowpre = irow;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         <span class="keywordtype">int</span> iirow = 0;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>         <span class="keywordtype">int</span> ierror;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         <span class="keywordflow">if</span> (rawfile == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Should not happen... */</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         stream = fopen(rawfile, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         <span class="keywordflow">if</span> (stream == NULL) {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_FILE_IO, <span class="stringliteral">"Could not "</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>                                   <span class="stringliteral">"open %s for reading"</span>, rawfile);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="preprocessor"></span>            cpl_error_set_message(cpl_func, CPL_ERROR_FILE_IO, <span class="stringliteral">"Could not "</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>                                   <span class="stringliteral">"open file for reading"</span>);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="preprocessor"></span>            <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>         <span class="keywordflow">for</span> (;(done = fgets(linebuffer, maxlinelen, stream)) != NULL; iirow++) {</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>             <span class="keywordflow">if</span> (linebuffer[0] != commentchar) {</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>                 cpl_boolean didset;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="preprocessor"></span>                <span class="keyword">const</span> <span class="keywordtype">int</span> prerow = irow;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>                 <span class="keywordflow">if</span> (irow == nrow) {</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>                     nrow += nrow ? nrow : 1;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>                     <span class="keywordflow">if</span> (cpl_table_set_size(<span class="keyword">self</span>, nrow)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                 }</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>                 didset = table_set_row(<span class="keyword">self</span>, linebuffer, irow, rawframe,</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                                        parlist);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                 <span class="keywordflow">if</span> (didset) irow++;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                 <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                     <span class="keywordflow">if</span> (didset)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="preprocessor"></span>                        cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>                                               <span class="stringliteral">"Failed to set table row %d "</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>                                               <span class="stringliteral">"using line %d from %d. file %s"</span>,</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>                                               1+prerow, iirow+1,</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>                                               nfiles+1, rawfile);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>                         cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>                                               <span class="stringliteral">"Failure with line %d from %d. "</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>                                               <span class="stringliteral">"file %s"</span>, iirow+1,</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>                                               nfiles+1, rawfile);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="preprocessor"></span>                        cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>                                               <span class="stringliteral">"Failed to set table row"</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                                               <span class="stringliteral">"using catalogue line"</span>);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>                         cpl_error_set_message(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>                                               <span class="stringliteral">"Failure with catalogue line"</span>);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>                     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>                 }</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>             }</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>         }</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         <span class="keywordflow">if</span> (done != NULL) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         ierror = fclose(stream);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         stream = NULL;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>         <span class="keywordflow">if</span> (ierror) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         <span class="keywordflow">if</span> (irow == irowpre)</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>             cpl_msg_warning(cpl_func, <span class="stringliteral">"No usable lines in the %d. file: %s"</span>,</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                             1+nfiles, rawfile);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     }</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     cpl_free(linebuffer);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     <span class="keywordflow">if</span> (stream != NULL) fclose(stream);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     <span class="comment">/* Check for premature end */</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     cpl_ensure_code(rawframe == NULL, cpl_error_get_code());</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordflow">if</span> (irow == 0) {</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="preprocessor">#if defined CPL_HAVE_VA_ARGS && CPL_HAVE_VA_ARGS != 0</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>                                      <span class="stringliteral">"No usable lines in the %d input "</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>                                      <span class="stringliteral">"frame(s)"</span>, nfiles);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="preprocessor"></span>        <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                                      <span class="stringliteral">"No usable lines in the input frame(s)"</span>);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> <span class="preprocessor"></span>    }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     <span class="comment">/* Resize the table to the actual number of rows set */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     cpl_ensure_code(!cpl_table_set_size(<span class="keyword">self</span>, irow), cpl_error_get_code());</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e"> 1134</a></span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> }</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde"> 1147</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde" title="Comparison function to identify different input frames.">irplib_compare_tags</a>(</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         cpl_frame   *   frame1,</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         cpl_frame   *   frame2)</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> {</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>            *   v1 ;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>            *   v2 ;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     <span class="comment">/* Get the tags */</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     <span class="keywordflow">if</span> ((v1 = cpl_frame_get_tag(frame1)) == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     <span class="keywordflow">if</span> ((v2 = cpl_frame_get_tag(frame2)) == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="comment">/* Compare the tags */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     <span class="keywordflow">if</span> (strcmp(v1, v2)) <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134"> 1183</a></span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134" title="Find the filename with the given tag in a frame set.">irplib_frameset_find_file</a>(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self [...]
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="keyword">const</span> cpl_frame * frame = cpl_frameset_find_const(<span class="keyword">self</span>, tag);</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     <span class="keywordflow">if</span> (frame == NULL) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     <span class="keywordflow">if</span> (cpl_frameset_find_const(<span class="keyword">self</span>, NULL))</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>         cpl_msg_warning(cpl_func,</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>             <span class="stringliteral">"Frameset has more than one file with tag: %s"</span>,</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>                         tag);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordflow">return</span> cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> }</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="keyword">const</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68"> 1214</a></span> cpl_frame * <a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68" title="Find the first frame belonging to the given group.">irplib_frameset_get_first_from_group</a>(<span class="keyword">const</span> cpl_frameset * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>                                                  cpl_frame_group      group)</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> {</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="keyword">const</span> cpl_frame * frame;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, NULL);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     <span class="keywordflow">for</span> (frame = cpl_frameset_get_first_const(<span class="keyword">self</span>); frame != NULL ;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>          frame = cpl_frameset_get_next_const(<span class="keyword">self</span>)) {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         <span class="keywordflow">if</span> (cpl_frame_get_group(frame) == group) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>     }</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     <span class="keywordflow">return</span> frame;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> }</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"><a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1"> 1248</a></span> cpl_error_code <a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1" title="Find the aperture(s) with the greatest flux.">irplib_apertures_find_max_flux</a>(<span class="keyword">const</span> cpl_apertures * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>                                               <span class="keywordtype">int</span> * ind, <span class="keywordtype">int</span> nfind)</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> {</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>    nsize = cpl_apertures_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     <span class="keywordtype">int</span>          ifind;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     cpl_ensure_code(nsize > 0,      cpl_error_get_code());</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     cpl_ensure_code(ind,          CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     cpl_ensure_code(nfind > 0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     cpl_ensure_code(nfind <= nsize, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="keywordflow">for</span> (ifind=0; ifind < nfind; ifind++) {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>         <span class="keywordtype">double</span> maxflux = -1;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         <span class="keywordtype">int</span> maxind = -1;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>         <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>         <span class="keywordflow">for</span> (i=1; i <= nsize; i++) {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>             <span class="keywordtype">int</span> k;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             <span class="comment">/* The flux has to be the highest among those not already found */</span></div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>             <span class="keywordflow">for</span> (k=0; k < ifind; k++) <span class="keywordflow">if</span> (ind[k] == i) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>             <span class="keywordflow">if</span> (k == ifind) {</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>                 <span class="comment">/* i has not been inserted into ind */</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> flux = cpl_apertures_get_flux(<span class="keyword">self</span>, i);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>                 <span class="keywordflow">if</span> (maxind < 0 || flux > maxflux) {</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>                     maxind = i;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>                     maxflux = flux;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>                 }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>             }</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>         }</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>         ind[ifind] = maxind;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>     }</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> }</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="keyword">inline</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordtype">double</span> irplib_data_get_double(<span class="keyword">const</span> <span class="keywordtype">void</span> * <span class="keyword">self</span>, cpl_type type, <span class="keywordtype">int</span> i)</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> {</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     <span class="keywordtype">double</span> value;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     <span class="keywordflow">switch</span> (type) {</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>         {</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>             <span class="keyword">const</span> <span class="keywordtype">float</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">float</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>             value = (double)pself[i];</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>         }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>     <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>         {</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">int</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>             value = (double)pself[i];</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         }</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>     <span class="keywordflow">default</span>: <span class="comment">/* case CPL_TYPE_DOUBLE */</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>         {</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> * pself = (<span class="keyword">const</span> <span class="keywordtype">double</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>             value = pself[i];</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>         }</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     }</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> </div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>     <span class="keywordflow">return</span> value;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> }</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> </div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> </div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="keyword">inline</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="keywordtype">void</span> irplib_data_set_double(<span class="keywordtype">void</span> * <span class="keyword">self</span>, cpl_type type, <span class="keywordtype">int</span> i, <span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>     <span class="keywordflow">switch</span> (type) {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>         {</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>             <span class="keywordtype">float</span> * pself = (<span class="keywordtype">float</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>             pself[i] = (float)value;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>         }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>     <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>         {</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>             <span class="keywordtype">int</span> * pself = (<span class="keywordtype">int</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>             pself[i] = (int)value;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>         }</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">default</span>: <span class="comment">/* case CPL_TYPE_DOUBLE */</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>         {</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>             <span class="keywordtype">double</span> * pself = (<span class="keywordtype">double</span>*)<span class="keyword">self</span>;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>             pself[i] = value;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>         }</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="keywordtype">void</span> irplib_errorstate_dump_one_level(<span class="keywordtype">void</span> (*messenger)(<span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>                                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *, ...),</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>                                       <span class="keywordtype">unsigned</span> <span class="keyword">self</span>, <span class="keywordtype">unsigned</span> first,</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>                                       <span class="keywordtype">unsigned</span> last)</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> {</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> </div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>     <span class="keyword">const</span> cpl_boolean is_reverse = first > last ? CPL_TRUE : CPL_FALSE;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>    newest     = is_reverse ? first : last;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     <span class="keyword">const</span> <span class="keywordtype">unsigned</span>    oldest     = is_reverse ? last : first;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      * revmsg     = is_reverse ? <span class="stringliteral">" in reverse order"</span> : <span class="stringliteral">""</span>;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> <span class="comment">    cx_assert( messenger != NULL );</span></div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">    cx_assert( oldest <= self );</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">    cx_assert( newest >= self );</span></div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keywordflow">if</span> (newest == 0) {</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         messenger(cpl_func, <span class="stringliteral">"No error(s) to dump"</span>);</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>         <span class="comment">/* cx_assert( oldest == 0); */</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment">          cx_assert( oldest > 0);</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">          cx_assert( newest >= oldest);</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>         <span class="keywordflow">if</span> (<span class="keyword">self</span> == first) {</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>             <span class="keywordflow">if</span> (oldest == 1) {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>                 messenger(cpl_func, <span class="stringliteral">"Dumping all %u error(s)%s:"</span>, newest,</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>                           revmsg);</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>                 messenger(cpl_func, <span class="stringliteral">"Dumping the %u most recent error(s) "</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>                           <span class="stringliteral">"out of a total of %u errors%s:"</span>,</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>                           newest - oldest + 1, newest, revmsg);</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>             }</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>             cpl_msg_indent_more();</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>         }</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>         messenger(cpl_func, <span class="stringliteral">"[%u/%u] '%s' (%u) at %s"</span>, <span class="keyword">self</span>, newest,</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>                   cpl_error_get_message(), cpl_error_get_code(),</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>                   cpl_error_get_where());</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>         <span class="keywordflow">if</span> (<span class="keyword">self</span> == last) cpl_msg_indent_less();</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>     }</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> }</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> cpl_polynomial * irplib_polynomial_fit_1d_create_chiq(</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>         <span class="keywordtype">double</span>              *   rechisq</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>         )</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>  {</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     <span class="keywordflow">return</span> irplib_polynomial_fit_1d_create_common(x_pos, values, degree, NULL, rechisq);</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>  }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> cpl_polynomial * irplib_polynomial_fit_1d_create(</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         <span class="keywordtype">double</span>              *   mse</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>         )</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> {</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>     <span class="keywordflow">return</span> irplib_polynomial_fit_1d_create_common(x_pos, values, degree, mse, NULL);</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> }</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="keyword">static</span> cpl_polynomial * irplib_polynomial_fit_1d_create_common(</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         <span class="keywordtype">double</span>              *   mse,</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>         <span class="keywordtype">double</span>              *  rechisq</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>         )</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> {</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     cpl_polynomial * fit1d = NULL;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     cpl_size loc_degree = (cpl_size)degree ;</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="keywordtype">int</span> x_size = 0;</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     fit1d = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     x_size = cpl_vector_get_size(x_pos);    </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordflow">if</span>(fit1d != NULL && x_size > 1)</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     {</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>         cpl_matrix     * samppos = NULL;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>         cpl_vector     * fitresidual = NULL;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>         samppos = cpl_matrix_wrap(1, x_size,</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>                                   (<span class="keywordtype">double</span>*)cpl_vector_get_data_const(x_pos));</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         fitresidual = cpl_vector_new(x_size);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>         cpl_polynomial_fit(fit1d, samppos, NULL, values, NULL,</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>                            CPL_FALSE, NULL, &loc_degree);</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL,</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>                                                 fit1d, samppos, rechisq);</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>         cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>         <span class="keywordflow">if</span> (mse)</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>         {</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>             *mse = cpl_vector_product(fitresidual, fitresidual)</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>                 / cpl_vector_get_size(fitresidual);</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>         }</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>         cpl_matrix_unwrap(samppos);</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>         cpl_vector_delete(fitresidual);</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     }</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     <span class="keywordflow">return</span> fit1d;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> }</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> </div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort(<span class="keywordtype">int</span>* iindex, <span class="keywordtype">double</span>* exptime, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right)</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <span class="keywordtype">int</span> i = left;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>     <span class="keywordtype">int</span> j = right;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     <span class="keywordtype">int</span> pivot = (i + j) / 2;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordtype">double</span> index_value = exptime[pivot];</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     <span class="keywordflow">do</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     {</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>         <span class="keywordflow">while</span>(exptime[i] < index_value) i++;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>         <span class="keywordflow">while</span>(exptime[j] > index_value) j--;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         <span class="keywordflow">if</span> (i <= j)</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>         {</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>             <span class="keywordflow">if</span>(i < j)</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>             {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>                 <span class="keywordtype">int</span> tmp = iindex[i];</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>                 <span class="keywordtype">double</span> dtmp = exptime[i];</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>                 iindex[i]=iindex[j];</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>                 iindex[j]=tmp;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>                 exptime[i] = exptime[j];</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>                 exptime[j] = dtmp;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>             }</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>             i++;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>             j--;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>         }</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     } <span class="keywordflow">while</span> (i <= j);</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> </div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     <span class="keywordflow">if</span> (i < right)</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     {</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>         quicksort(iindex, exptime, i, right);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     }</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>     <span class="keywordflow">if</span> (left < j)</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         quicksort(iindex, exptime,left, j);</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     }</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> }</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> cpl_error_code irplib_frameset_sort(<span class="keyword">const</span> cpl_frameset *  <span class="keyword">self</span>, <span class="keywordtype">int</span>* iindex, <span class="keywordtype">double</span>* exptime)</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> {</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>     <span class="keywordtype">int</span> sz = 0;</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>     <span class="keyword">const</span> cpl_frame* tmp_frame = 0;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>     cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     sz = cpl_frameset_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>     <span class="comment">/* 1. get an array of frames */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>     tmp_frame = cpl_frameset_get_first_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     <span class="keywordflow">while</span>(tmp_frame)</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     {</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>         exptime[i] = frame_get_exptime(tmp_frame);</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>         iindex[i] = i;</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>         tmp_frame = cpl_frameset_get_next_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>         i++;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     }</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     <span class="comment">/* 2.sort */</span></div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     quicksort(iindex, exptime, 0, sz - 1);</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> </div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> }</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="keyword">static</span> <span class="keywordtype">double</span> frame_get_exptime(<span class="keyword">const</span> cpl_frame * pframe)</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> {</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     <span class="keywordtype">double</span> dval = 0;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     cpl_propertylist * plist =</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>         cpl_propertylist_load_regexp(cpl_frame_get_filename(pframe), 0,</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>                                      <span class="stringliteral">"EXPTIME"</span>, CPL_FALSE);</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     <span class="keywordflow">if</span>(plist) {</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         dval = cpl_propertylist_get_double(plist, <span class="stringliteral">"EXPTIME"</span>);</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>         <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>             cpl_msg_error(cpl_func, <span class="stringliteral">"error during reading EXPTIME key from "</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                           <span class="stringliteral">"the frame [%s]"</span>, cpl_frame_get_filename(pframe));</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>         }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>     }</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     <span class="keywordflow">return</span> dval;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> }</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> </div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="keywordtype">void</span> * irplib_aligned_malloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size)</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> {</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="preprocessor">#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> aligned_alloc(alignment, size);</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="preprocessor">#elif defined HAVE_POSIX_MEMALIGN && defined HAVE_DECL_POSIX_MEMALIGN</span></div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="preprocessor"></span>    <span class="keywordtype">void</span> *ptr;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>     <span class="keywordflow">if</span> (alignment == 1)</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>         <span class="keywordflow">return</span> malloc (size);</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>     <span class="keywordflow">if</span> (alignment == 2 || (<span class="keyword">sizeof</span> (<span class="keywordtype">void</span> *) == 8 && alignment == 4))</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>         alignment = <span class="keyword">sizeof</span> (<span class="keywordtype">void</span> *);</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     <span class="keywordflow">if</span> (posix_memalign (&ptr, alignment, size) == 0)</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>         <span class="keywordflow">return</span> ptr;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> <span class="preprocessor"></span>    <span class="comment">/* copied from gmm_malloc.h in gcc-4.8 */</span></div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="keywordtype">void</span> * malloc_ptr;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="keywordtype">void</span> * aligned_ptr;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> </div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     <span class="comment">/* Error if align is not a power of two.  */</span></div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     <span class="keywordflow">if</span> (alignment & (alignment - 1)) {</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>         errno = EINVAL;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>     }</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> </div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>     <span class="keywordflow">if</span> (size == 0)</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     <span class="comment">/* Assume malloc'd pointer is aligned at least to sizeof (void*).</span></div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span> <span class="comment">       If necessary, add another sizeof (void*) to store the value</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment">       returned by malloc. Effectively this enforces a minimum alignment</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment">       of sizeof double. */</span></div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     <span class="keywordflow">if</span> (alignment < 2 * <span class="keyword">sizeof</span> (<span class="keywordtype">void</span> *))</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>         alignment = 2 * <span class="keyword">sizeof</span> (<span class="keywordtype">void</span> *);</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     malloc_ptr = malloc (size + alignment);</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     <span class="keywordflow">if</span> (!malloc_ptr)</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="comment">/* Align  We have at least sizeof (void *) space below malloc'd ptr. */</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     aligned_ptr = (<span class="keywordtype">void</span> *) (((<span class="keywordtype">size_t</span>) malloc_ptr + alignment)</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>                             & ~((size_t) (alignment) - 1));</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     <span class="comment">/* Store the original pointer just before p.  */</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     *(((<span class="keywordtype">void</span> **) aligned_ptr) - 1) = malloc_ptr;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     <span class="keywordflow">return</span> aligned_ptr;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> <span class="keywordtype">void</span> * irplib_aligned_calloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> nelem, <span class="keywordtype">size_t</span> nbytes)</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> {</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     <span class="keywordtype">void</span> * buffer = irplib_aligned_malloc(alignment, nelem * nbytes);</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keywordflow">if</span> (buffer == NULL)</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>     <span class="comment">/* cast to aligned pointer helps compilers to emit better (builtin) code */</span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     memset((<span class="keywordtype">size_t</span> *)buffer, 0, nelem * nbytes);</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>     <span class="keywordflow">return</span> buffer;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> }</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="keywordtype">void</span> irplib_aligned_free (<span class="keywordtype">void</span> * aligned_ptr)</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> {</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> <span class="preprocessor">#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> <span class="preprocessor"></span>  free(aligned_ptr);</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> <span class="preprocessor">#elif defined HAVE_POSIX_MEMALIGN && defined HAVE_DECL_POSIX_MEMALIGN</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span> <span class="preprocessor"></span>  free(aligned_ptr);</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span> (aligned_ptr)</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>       free (*(((<span class="keywordtype">void</span> **) aligned_ptr) - 1));</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span> <span class="preprocessor"></span>}</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__utils_8h_source.html b/html/irplib__utils_8h_source.html
index 92193e8..6848384 100644
--- a/html/irplib__utils_8h_source.html
+++ b/html/irplib__utils_8h_source.html
@@ -2,454 +2,550 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_utils.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_utils.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_utils.h,v 1.57 2013/02/27 16:02:02 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/02/27 16:02:02 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.57 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Log: irplib_utils.h,v $</span>
-<a name="l00027"></a>00027 <span class="comment"> * Revision 1.57  2013/02/27 16:02:02  jtaylor</span>
-<a name="l00028"></a>00028 <span class="comment"> * add diagnostic pragma macros</span>
-<a name="l00029"></a>00029 <span class="comment"> *</span>
-<a name="l00030"></a>00030 <span class="comment"> * Revision 1.56  2012/08/06 06:14:18  llundin</span>
-<a name="l00031"></a>00031 <span class="comment"> * irplib_errorstate_warning(): Replaced by cpl_errorstate_dump_one_warning() from CPL 6.X</span>
-<a name="l00032"></a>00032 <span class="comment"> *</span>
-<a name="l00033"></a>00033 <span class="comment"> * Revision 1.55  2011/06/01 06:47:56  llundin</span>
-<a name="l00034"></a>00034 <span class="comment"> * skip_if_lt(): Fix previous edits switch of A and B in error message</span>
-<a name="l00035"></a>00035 <span class="comment"> *</span>
-<a name="l00036"></a>00036 <span class="comment"> * Revision 1.54  2011/05/26 08:08:56  llundin</span>
-<a name="l00037"></a>00037 <span class="comment"> * skip_if_lt(): Support printf-style error message, name-space protect temporary variables</span>
-<a name="l00038"></a>00038 <span class="comment"> *</span>
-<a name="l00039"></a>00039 <span class="comment"> * Revision 1.53  2011/05/09 07:51:18  llundin</span>
-<a name="l00040"></a>00040 <span class="comment"> * irplib_dfs_save_image_(): Modified from cpl_dfs_save_image(). irplib_dfs_save_image(): Use irplib_dfs_save_image_()</span>
-<a name="l00041"></a>00041 <span class="comment"> *</span>
-<a name="l00042"></a>00042 <span class="comment"> * Revision 1.52  2010/03/23 07:57:59  kmirny</span>
-<a name="l00043"></a>00043 <span class="comment"> * DFS08552, Documentation for irplib_frameset_sort</span>
-<a name="l00044"></a>00044 <span class="comment"> *</span>
-<a name="l00045"></a>00045 <span class="comment"> * Revision 1.51  2009/12/16 14:59:30  cgarcia</span>
-<a name="l00046"></a>00046 <span class="comment"> * Avoid name clash with index function</span>
-<a name="l00047"></a>00047 <span class="comment"> *</span>
-<a name="l00048"></a>00048 <span class="comment"> * Revision 1.50  2009/08/17 15:10:16  kmirny</span>
-<a name="l00049"></a>00049 <span class="comment"> *</span>
-<a name="l00050"></a>00050 <span class="comment"> * DFS07454 DFS07437</span>
-<a name="l00051"></a>00051 <span class="comment"> *</span>
-<a name="l00052"></a>00052 <span class="comment"> */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#ifndef IRPLIB_UTILS_H</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_UTILS_H</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                                   Includes</span>
-<a name="l00059"></a>00059 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="preprocessor">#include <stdarg.h></span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">                                   Define</span>
-<a name="l00067"></a>00067 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#define IRPLIB_XSTRINGIFY(TOSTRING) #TOSTRING</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STRINGIFY(TOSTRING) IRPLIB_XSTRINGIFY(TOSTRING)</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="preprocessor">#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_IGN(x)        \</span>
-<a name="l00075"></a>00075 <span class="preprocessor">    _Pragma("GCC diagnostic push") \</span>
-<a name="l00076"></a>00076 <span class="preprocessor">    _Pragma(IRPLIB_STRINGIFY(GCC diagnostic ignored #x))</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_ERR(x)        \</span>
-<a name="l00078"></a>00078 <span class="preprocessor">    _Pragma("GCC diagnostic push") \</span>
-<a name="l00079"></a>00079 <span class="preprocessor">    _Pragma(IRPLIB_STRINGIFY(GCC diagnostic error #x))</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_POP \</span>
-<a name="l00081"></a>00081 <span class="preprocessor">    _Pragma("GCC diagnostic pop")</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_IGN(x)</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_ERR(x)</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_POP</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="comment">/* FIXME: Remove when no longer used by any irplib-based pipelines */</span>
-<a name="l00090"></a>00090 <span class="comment">/* Useful for debugging */</span>
-<a name="l00091"></a>00091 <span class="preprocessor">#define irplib_trace()  do if (cpl_error_get_code()) { \</span>
-<a name="l00092"></a>00092 <span class="preprocessor">    cpl_msg_debug(cpl_func, __FILE__ " at line %d: ERROR '%s' at %s", \</span>
-<a name="l00093"></a>00093 <span class="preprocessor">         __LINE__, cpl_error_get_message(), cpl_error_get_where()); \</span>
-<a name="l00094"></a>00094 <span class="preprocessor">  } else { \</span>
-<a name="l00095"></a>00095 <span class="preprocessor">    cpl_msg_debug(cpl_func, __FILE__ " at line %d: OK", __LINE__); \</span>
-<a name="l00096"></a>00096 <span class="preprocessor">  } while (0)</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>
-<a name="l00098"></a>00098 <span class="preprocessor">#define irplib_error_recover(ESTATE, ...)                       \</span>
-<a name="l00099"></a>00099 <span class="preprocessor">    do if (!cpl_errorstate_is_equal(ESTATE)) {                  \</span>
-<a name="l00100"></a>00100 <span class="preprocessor">        cpl_msg_warning(cpl_func, __VA_ARGS__);                 \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">        cpl_msg_indent_more();                                  \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">        cpl_errorstate_dump(ESTATE, CPL_FALSE,                  \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">                            cpl_errorstate_dump_one_warning);   \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">        cpl_msg_indent_less();                                  \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">        cpl_errorstate_set(ESTATE);                             \</span>
-<a name="l00106"></a>00106 <span class="preprocessor">    } while (0)</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 <span class="comment">/*</span>
-<a name="l00112"></a>00112 <span class="comment">  @brief Declare a function suitable for use with irplib_dfs_table_convert()</span>
-<a name="l00113"></a>00113 <span class="comment">  @param  table_set_row    The name of the function to declare</span>
-<a name="l00114"></a>00114 <span class="comment">  @see irplib_dfs_table_convert(), irplib_table_read_from_frameset()</span>
-<a name="l00115"></a>00115 <span class="comment"></span>
-<a name="l00116"></a>00116 <span class="comment">*/</span>
-<a name="l00117"></a>00117 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 <span class="preprocessor">#define IRPLIB_UTIL_SET_ROW(table_set_row)                      \</span>
-<a name="l00119"></a>00119 <span class="preprocessor">    cpl_boolean table_set_row(cpl_table *,                      \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">                              const char *,                     \</span>
-<a name="l00121"></a>00121 <span class="preprocessor">                              int,                              \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">                              const cpl_frame *,                \</span>
-<a name="l00123"></a>00123 <span class="preprocessor">                              const cpl_parameterlist *)</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00127"></a>00127 <span class="comment">/*</span>
-<a name="l00128"></a>00128 <span class="comment">  @brief Declare a function suitable for use with irplib_dfs_table_convert()</span>
-<a name="l00129"></a>00129 <span class="comment">  @param  table_check    The name of the function to declare</span>
-<a name="l00130"></a>00130 <span class="comment">  @see irplib_dfs_table_convert()</span>
-<a name="l00131"></a>00131 <span class="comment"></span>
-<a name="l00132"></a>00132 <span class="comment">*/</span>
-<a name="l00133"></a>00133 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="preprocessor">#define IRPLIB_UTIL_CHECK(table_check)                          \</span>
-<a name="l00135"></a>00135 <span class="preprocessor">    cpl_error_code table_check(cpl_table *,                     \</span>
-<a name="l00136"></a>00136 <span class="preprocessor">                               const cpl_frameset *,            \</span>
-<a name="l00137"></a>00137 <span class="preprocessor">                               const cpl_parameterlist *)</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span>
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00141"></a>00141 <span class="comment">/*</span>
-<a name="l00142"></a>00142 <span class="comment">  @brief   Conditional skip to the (unqiue) return point of the function</span>
-<a name="l00143"></a>00143 <span class="comment">  @param   CONDITION    The condition to check</span>
-<a name="l00144"></a>00144 <span class="comment">  @see cpl_error_ensure()</span>
-<a name="l00145"></a>00145 <span class="comment"></span>
-<a name="l00146"></a>00146 <span class="comment">  skip_if() takes one argument, which is a logical expression.</span>
-<a name="l00147"></a>00147 <span class="comment">  If the logical expression is false skip_if() takes no action and</span>
-<a name="l00148"></a>00148 <span class="comment">  program execution continues.</span>
-<a name="l00149"></a>00149 <span class="comment">  If the logical expression is true this indicates an error. In this case</span>
-<a name="l00150"></a>00150 <span class="comment">  skip_if() will set the location of the error to the point where it</span>
-<a name="l00151"></a>00151 <span class="comment">  was invoked in the recipe code (unless the error location is already in the</span>
-<a name="l00152"></a>00152 <span class="comment">  recipe code). If no error code had been set, then skip_if() will set one.</span>
-<a name="l00153"></a>00153 <span class="comment">  Finally, skip_if() causes program execution to skip to the macro 'end_skip'.</span>
-<a name="l00154"></a>00154 <span class="comment">  The macro end_skip is located towards the end of the function, after</span>
-<a name="l00155"></a>00155 <span class="comment">  which all resource deallocation and the function return is located.</span>
-<a name="l00156"></a>00156 <span class="comment"></span>
-<a name="l00157"></a>00157 <span class="comment">  The use of skip_if() assumes the following coding practice:</span>
-<a name="l00158"></a>00158 <span class="comment">  1) Pointers used for dynamically allocated memory that they "own" shall always</span>
-<a name="l00159"></a>00159 <span class="comment">     point to either NULL or to allocated memory (including CPL-objects).</span>
-<a name="l00160"></a>00160 <span class="comment">  2) Such pointers may not be reused to point to memory whose deallocation</span>
-<a name="l00161"></a>00161 <span class="comment">     requires calls to different functions.</span>
-<a name="l00162"></a>00162 <span class="comment">  3) Pointers of type FILE should be set NULL when not pointing to an open</span>
-<a name="l00163"></a>00163 <span class="comment">     stream and their closing calls (fclose(), freopen(), etc.) following the</span>
-<a name="l00164"></a>00164 <span class="comment">     'end_skip' should be guarded against such NULL pointers.</span>
-<a name="l00165"></a>00165 <span class="comment"></span>
-<a name="l00166"></a>00166 <span class="comment">  Error checking with skip_if() is encouraged due to the following advantages:</span>
-<a name="l00167"></a>00167 <span class="comment">  1) It ensures that a CPL-error code is set.</span>
-<a name="l00168"></a>00168 <span class="comment">  2) It ensures that the location of the error in the _recipe_ code is noted.</span>
-<a name="l00169"></a>00169 <span class="comment">  3) The error checking may be confined to a single concise line.</span>
-<a name="l00170"></a>00170 <span class="comment">  4) It is not necessary to replicate memory deallocation for every error</span>
-<a name="l00171"></a>00171 <span class="comment">     condition.</span>
-<a name="l00172"></a>00172 <span class="comment">  5) If more extensive error reporting/handling is required it is not precluded</span>
-<a name="l00173"></a>00173 <span class="comment">     by the use of skip_if().</span>
-<a name="l00174"></a>00174 <span class="comment">  6) It allows for a single point of function return.</span>
-<a name="l00175"></a>00175 <span class="comment">  7) It allows for optional, uniformly formatted debugging/tracing information</span>
-<a name="l00176"></a>00176 <span class="comment">     at each macro invocation.</span>
-<a name="l00177"></a>00177 <span class="comment"></span>
-<a name="l00178"></a>00178 <span class="comment">  The implementation of skip_if() uses a goto/label construction.</span>
-<a name="l00179"></a>00179 <span class="comment">  According to Kerningham & Ritchie, The C Programming Language, 2nd edition,</span>
-<a name="l00180"></a>00180 <span class="comment">  Section 3.8:</span>
-<a name="l00181"></a>00181 <span class="comment">  "This organization is handy if the error-handling code is non-trivial,</span>
-<a name="l00182"></a>00182 <span class="comment">  and if errors can occur in several places."</span>
-<a name="l00183"></a>00183 <span class="comment"></span>
-<a name="l00184"></a>00184 <span class="comment">  The use of goto for any other purpose should be avoided.</span>
-<a name="l00185"></a>00185 <span class="comment"></span>
-<a name="l00186"></a>00186 <span class="comment">*/</span>
-<a name="l00187"></a>00187 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="preprocessor">#define skip_if(CONDITION)                                                     \</span>
-<a name="l00189"></a>00189 <span class="preprocessor">    do {                                                                       \</span>
-<a name="l00190"></a>00190 <span class="preprocessor">        cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \</span>
-<a name="l00191"></a>00191 <span class="preprocessor">                         goto cleanup, "Propagating a pre-existing error");    \</span>
-<a name="l00192"></a>00192 <span class="preprocessor">        cpl_error_ensure(!(CONDITION), cpl_error_get_code(),                   \</span>
-<a name="l00193"></a>00193 <span class="preprocessor">                         goto cleanup, "Propagating error");\</span>
-<a name="l00194"></a>00194 <span class="preprocessor">    } while (0)</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span>
-<a name="l00196"></a>00196 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00197"></a>00197 <span class="comment">/*</span>
-<a name="l00198"></a>00198 <span class="comment">  @brief   Skip if A < B</span>
-<a name="l00199"></a>00199 <span class="comment">  @param   A   The 1st double to compare</span>
-<a name="l00200"></a>00200 <span class="comment">  @param   B   The 2nd double to compare</span>
-<a name="l00201"></a>00201 <span class="comment">  @param   MSG A printf-style error message, 1st arg should be a string literal</span>
-<a name="l00202"></a>00202 <span class="comment">  @see skip_if()</span>
-<a name="l00203"></a>00203 <span class="comment">  @note A and B are evaluated exactly once</span>
-<a name="l00204"></a>00204 <span class="comment"></span>
-<a name="l00205"></a>00205 <span class="comment">  If no CPL error is set, sets CPL_ERROR_DATA_NOT_FOUND on failure</span>
-<a name="l00206"></a>00206 <span class="comment">*/</span>
-<a name="l00207"></a>00207 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00208"></a>00208 <span class="preprocessor">#define skip_if_lt(A, B, ...)                                                  \</span>
-<a name="l00209"></a>00209 <span class="preprocessor">    do {                                                                       \</span>
-<a name="l00210"></a>00210 <span class="preprocessor">        </span><span class="comment">/* Name-space protected one-time only evaluation */</span>                    \
-<a name="l00211"></a>00211         const double irplib_utils_a = (double)(A);                             \
-<a name="l00212"></a>00212         const double irplib_utils_b = (double)(B);                             \
-<a name="l00213"></a>00213                                                                                \
-<a name="l00214"></a>00214         cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \
-<a name="l00215"></a>00215                          goto cleanup, "Propagating a pre-existing error");    \
-<a name="l00216"></a>00216         if (irplib_utils_a < irplib_utils_b) {                                 \
-<a name="l00217"></a>00217             char * irplib_utils_msg = cpl_sprintf(__VA_ARGS__);                \
-<a name="l00218"></a>00218             (void)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,    \
-<a name="l00219"></a>00219                                         "Need at least %g (not %g) %s",        \
-<a name="l00220"></a>00220                                         irplib_utils_b, irplib_utils_a,        \
-<a name="l00221"></a>00221                                         irplib_utils_msg);                     \
-<a name="l00222"></a>00222             cpl_free(irplib_utils_msg);                                        \
-<a name="l00223"></a>00223             goto cleanup;                                                      \
-<a name="l00224"></a>00224         }                                                                      \
-<a name="l00225"></a>00225     } while (0)
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00228"></a>00228 <span class="comment">/*</span>
-<a name="l00229"></a>00229 <span class="comment">  @brief   Conditional skip on coding bug</span>
-<a name="l00230"></a>00230 <span class="comment">  @param   CONDITION    The condition to check</span>
-<a name="l00231"></a>00231 <span class="comment">  @see skip_if()</span>
-<a name="l00232"></a>00232 <span class="comment">  @note unlike assert() this check cannot be disabled</span>
-<a name="l00233"></a>00233 <span class="comment"> */</span>
-<a name="l00234"></a>00234 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00235"></a>00235 <span class="preprocessor">#define bug_if(CONDITION)                                                      \</span>
-<a name="l00236"></a>00236 <span class="preprocessor">    do {                                                                       \</span>
-<a name="l00237"></a>00237 <span class="preprocessor">        cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \</span>
-<a name="l00238"></a>00238 <span class="preprocessor">                         goto cleanup, "Propagating an unexpected error, "     \</span>
-<a name="l00239"></a>00239 <span class="preprocessor">                         "please report to " PACKAGE_BUGREPORT);               \</span>
-<a name="l00240"></a>00240 <span class="preprocessor">        cpl_error_ensure(!(CONDITION), CPL_ERROR_UNSPECIFIED,                  \</span>
-<a name="l00241"></a>00241 <span class="preprocessor">                         goto cleanup, "Internal error, please report to "     \</span>
-<a name="l00242"></a>00242 <span class="preprocessor">                         PACKAGE_BUGREPORT);                                   \</span>
-<a name="l00243"></a>00243 <span class="preprocessor">    } while (0)</span>
-<a name="l00244"></a>00244 <span class="preprocessor"></span>
-<a name="l00245"></a>00245 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00246"></a>00246 <span class="comment">/*</span>
-<a name="l00247"></a>00247 <span class="comment">  @brief   Conditional skip with error creation</span>
-<a name="l00248"></a>00248 <span class="comment">  @param   CONDITION    The condition to check</span>
-<a name="l00249"></a>00249 <span class="comment">  @param   ERROR        The error code to set</span>
-<a name="l00250"></a>00250 <span class="comment">  @param   MSG          A printf-style error message. As a matter of</span>
-<a name="l00251"></a>00251 <span class="comment">                        user-friendliness the message should mention any</span>
-<a name="l00252"></a>00252 <span class="comment">                        value that caused the @em CONDITION to fail.</span>
-<a name="l00253"></a>00253 <span class="comment">  @see skip_if()</span>
-<a name="l00254"></a>00254 <span class="comment">  @note unlike assert() this check cannot be disabled</span>
-<a name="l00255"></a>00255 <span class="comment"> */</span>
-<a name="l00256"></a>00256 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00257"></a>00257 <span class="preprocessor">#define error_if(CONDITION, ERROR, ...)                                 \</span>
-<a name="l00258"></a>00258 <span class="preprocessor">    cpl_error_ensure(cpl_error_get_code() == CPL_ERROR_NONE &&          \</span>
-<a name="l00259"></a>00259 <span class="preprocessor">                     !(CONDITION), ERROR, goto cleanup,  __VA_ARGS__)</span>
-<a name="l00260"></a>00260 <span class="preprocessor"></span>
-<a name="l00261"></a>00261 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00262"></a>00262 <span class="comment">/*</span>
-<a name="l00263"></a>00263 <span class="comment">  @brief   Propagate a preexisting error, if any</span>
-<a name="l00264"></a>00264 <span class="comment">  @param   MSG          A printf-style error message.</span>
-<a name="l00265"></a>00265 <span class="comment">  @see skip_if()</span>
-<a name="l00266"></a>00266 <span class="comment"> */</span>
-<a name="l00267"></a>00267 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00268"></a>00268 <span class="preprocessor">#define any_if(...)                                                     \</span>
-<a name="l00269"></a>00269 <span class="preprocessor">    cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),       \</span>
-<a name="l00270"></a>00270 <span class="preprocessor">                     goto cleanup,  __VA_ARGS__)</span>
-<a name="l00271"></a>00271 <span class="preprocessor"></span>
-<a name="l00272"></a>00272 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00273"></a>00273 <span class="comment">/*</span>
-<a name="l00274"></a>00274 <span class="comment">  @brief   Define the single point of resource deallocation and return</span>
-<a name="l00275"></a>00275 <span class="comment">  @see skip_if()</span>
-<a name="l00276"></a>00276 <span class="comment">  @note end_skip should be used exactly once in functions that use skip_if() etc</span>
-<a name="l00277"></a>00277 <span class="comment">*/</span>
-<a name="l00278"></a>00278 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00279"></a>00279 <span class="preprocessor">#define end_skip \</span>
-<a name="l00280"></a>00280 <span class="preprocessor">    do {                                                                     \</span>
-<a name="l00281"></a>00281 <span class="preprocessor">        cleanup:                                                             \</span>
-<a name="l00282"></a>00282 <span class="preprocessor">        if (cpl_error_get_code())                                            \</span>
-<a name="l00283"></a>00283 <span class="preprocessor">            cpl_msg_debug(cpl_func, "Cleanup in " __FILE__ " line %u with "  \</span>
-<a name="l00284"></a>00284 <span class="preprocessor">                          "error '%s' at %s", __LINE__,                      \</span>
-<a name="l00285"></a>00285 <span class="preprocessor">                          cpl_error_get_message(), cpl_error_get_where());   \</span>
-<a name="l00286"></a>00286 <span class="preprocessor">        else                                                                 \</span>
-<a name="l00287"></a>00287 <span class="preprocessor">            cpl_msg_debug(cpl_func, "Cleanup in " __FILE__ " line %u",       \</span>
-<a name="l00288"></a>00288 <span class="preprocessor">                          __LINE__);                                         \</span>
-<a name="l00289"></a>00289 <span class="preprocessor">    } while (0)</span>
-<a name="l00290"></a>00290 <span class="preprocessor"></span>
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00304"></a>00304 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00305"></a>00305 <span class="preprocessor">#define irplib_ensure(CONDITION, ec, ...)                                      \</span>
-<a name="l00306"></a>00306 <span class="preprocessor">    cpl_error_ensure(CONDITION, ec, goto cleanup,  __VA_ARGS__)</span>
-<a name="l00307"></a>00307 <span class="preprocessor"></span>
-<a name="l00308"></a>00308 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00338"></a>00338 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 <span class="preprocessor">#define irplib_check(COMMAND, ...)                                             \</span>
-<a name="l00341"></a>00341 <span class="preprocessor">  do {                                                                         \</span>
-<a name="l00342"></a>00342 <span class="preprocessor">    cpl_errorstate irplib_check_prestate = cpl_errorstate_get();               \</span>
-<a name="l00343"></a>00343 <span class="preprocessor">    skip_if(0);                                                                \</span>
-<a name="l00344"></a>00344 <span class="preprocessor">    COMMAND;                                                                   \</span>
-<a name="l00345"></a>00345 <span class="preprocessor">        irplib_trace(); \</span>
-<a name="l00346"></a>00346 <span class="preprocessor">    irplib_ensure(cpl_errorstate_is_equal(irplib_check_prestate),              \</span>
-<a name="l00347"></a>00347 <span class="preprocessor">                  cpl_error_get_code(), __VA_ARGS__);                          \</span>
-<a name="l00348"></a>00348 <span class="preprocessor">        irplib_trace(); \</span>
-<a name="l00349"></a>00349 <span class="preprocessor">  } while (0)</span>
-<a name="l00350"></a>00350 <span class="preprocessor"></span>
-<a name="l00351"></a>00351 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00352"></a>00352 <span class="comment">                                   Function prototypes</span>
-<a name="l00353"></a>00353 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 cpl_error_code <a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image</a>(cpl_frameset            *,
-<a name="l00356"></a>00356                                      <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00357"></a>00357                                      <span class="keyword">const</span> cpl_frameset      *,
-<a name="l00358"></a>00358                                      <span class="keyword">const</span> cpl_image         *,
-<a name="l00359"></a>00359                                      cpl_type_bpp             ,
-<a name="l00360"></a>00360                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00361"></a>00361                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00362"></a>00362                                      <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00363"></a>00363                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00364"></a>00364                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00365"></a>00365                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *);
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 cpl_error_code <a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7" title="Save a propertylist as a DFS-compliant pipeline product.">irplib_dfs_save_propertylist</a>(cpl_frameset            *,
-<a name="l00369"></a>00369                                             <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00370"></a>00370                                             <span class="keyword">const</span> cpl_frameset      *,
-<a name="l00371"></a>00371                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00372"></a>00372                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00373"></a>00373                                             <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00374"></a>00374                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00375"></a>00375                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00376"></a>00376                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 cpl_error_code <a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1" title="Save an imagelist as a DFS-compliant pipeline product.">irplib_dfs_save_imagelist</a>(cpl_frameset            *,
-<a name="l00379"></a>00379                                          <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00380"></a>00380                                          <span class="keyword">const</span> cpl_frameset      *,
-<a name="l00381"></a>00381                                          <span class="keyword">const</span> cpl_imagelist     *,
-<a name="l00382"></a>00382                                          cpl_type_bpp             ,
-<a name="l00383"></a>00383                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00384"></a>00384                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00385"></a>00385                                          <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00386"></a>00386                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00387"></a>00387                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00388"></a>00388                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *);
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390 cpl_error_code <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(cpl_frameset            *,
-<a name="l00391"></a>00391                                      <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00392"></a>00392                                      <span class="keyword">const</span> cpl_frameset      *,
-<a name="l00393"></a>00393                                      <span class="keyword">const</span> cpl_table         *,
-<a name="l00394"></a>00394                                      <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00395"></a>00395                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00396"></a>00396                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00397"></a>00397                                      <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00398"></a>00398                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00399"></a>00399                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00400"></a>00400                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *);
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 cpl_error_code <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(cpl_frameset            *,
-<a name="l00403"></a>00403                                       cpl_propertylist        *,
-<a name="l00404"></a>00404                                       <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00405"></a>00405                                       <span class="keyword">const</span> cpl_frameset      *,
-<a name="l00406"></a>00406                                       <span class="keyword">const</span> cpl_frame         *,
-<a name="l00407"></a>00407                                       <span class="keyword">const</span> cpl_image         *,
-<a name="l00408"></a>00408                                       cpl_type                 ,
-<a name="l00409"></a>00409                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00410"></a>00410                                       <span class="keyword">const</span> cpl_propertylist  *,
-<a name="l00411"></a>00411                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00412"></a>00412                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,
-<a name="l00413"></a>00413                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *);
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415 <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(<span class="keywordtype">void</span>);
-<a name="l00416"></a>00416 <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde" title="Comparison function to identify different input frames.">irplib_compare_tags</a>(cpl_frame *, cpl_frame *);
-<a name="l00417"></a>00417 <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134" title="Find the filename with the given tag in a frame set.">irplib_frameset_find_file</a>(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00418"></a>00418 <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68" title="Find the first frame belonging to the given group.">irplib_frameset_get_first_from_group</a>(<span class="keyword">const</span> cpl_frameset *,
-<a name="l00419"></a>00419                                                        cpl_frame_group);
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421 cpl_error_code <a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1" title="Find the aperture(s) with the greatest flux.">irplib_apertures_find_max_flux</a>(<span class="keyword">const</span> cpl_apertures *, <span class="keywordtype">int</span> *,
-<a name="l00422"></a>00422                                               <span class="keywordtype">int</span>);
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f" title="portable isinf">irplib_isinf</a>(<span class="keywordtype">double</span> value);
-<a name="l00425"></a>00425 <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(<span class="keywordtype">double</span> value);
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427 cpl_error_code
-<a name="l00428"></a>00428 <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s).">irplib_dfs_table_convert</a>(cpl_table *, cpl_frameset *, <span class="keyword">const</span> cpl_frameset *,
-<a name="l00429"></a>00429                          <span class="keywordtype">int</span>, <span class="keywordtype">char</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00430"></a>00430                          <span class="keyword">const</span> cpl_parameterlist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00431"></a>00431                          <span class="keyword">const</span> cpl_propertylist *, <span class="keyword">const</span> cpl_propertylist *,
-<a name="l00432"></a>00432                          <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00433"></a>00433                          cpl_boolean (*)(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,
-<a name="l00434"></a>00434                                             <span class="keyword">const</span> cpl_frame *,
-<a name="l00435"></a>00435                                             <span class="keyword">const</span> cpl_parameterlist *),
-<a name="l00436"></a>00436                          cpl_error_code (*)(cpl_table *,
-<a name="l00437"></a>00437                                             <span class="keyword">const</span> cpl_frameset *,
-<a name="l00438"></a>00438                                             <span class="keyword">const</span> cpl_parameterlist *));
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440 cpl_error_code <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(cpl_table *,
-<a name="l00441"></a>00441                                                <span class="keyword">const</span> cpl_frameset *,
-<a name="l00442"></a>00442                                                <span class="keywordtype">int</span>,
-<a name="l00443"></a>00443                                                <span class="keywordtype">char</span>,
-<a name="l00444"></a>00444                                                <span class="keyword">const</span> cpl_parameterlist *,
-<a name="l00445"></a>00445                                                cpl_boolean (*)
-<a name="l00446"></a>00446                                                (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,
-<a name="l00447"></a>00447                                                 <span class="keywordtype">int</span>, <span class="keyword">const</span> cpl_frame *,
-<a name="l00448"></a>00448                                                 <span class="keyword">const</span> cpl_parameterlist *));
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 cpl_error_code <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(<span class="keyword">const</span> cpl_image *,
-<a name="l00451"></a>00451                                   cpl_image *, cpl_image *, cpl_image *,
-<a name="l00452"></a>00452                                   <span class="keywordtype">double</span>, cpl_boolean,
-<a name="l00453"></a>00453                                   <span class="keywordtype">double</span>, cpl_boolean,
-<a name="l00454"></a>00454                                   <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00455"></a>00455                                   cpl_boolean, cpl_boolean, cpl_boolean);
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386" title="Dump a single CPL error at the CPL warning level.">irplib_errorstate_dump_warning</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);
-<a name="l00458"></a>00458 <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb" title="Dump a single CPL error at the CPL info level.">irplib_errorstate_dump_info</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);
-<a name="l00459"></a>00459 <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);
-<a name="l00460"></a>00460 <span class="comment">/* wrapper for replace deprecated function cpl_polynomial_fit_1d_create*/</span>
-<a name="l00461"></a>00461 cpl_polynomial * irplib_polynomial_fit_1d_create(
-<a name="l00462"></a>00462         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l00463"></a>00463         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l00464"></a>00464         <span class="keywordtype">int</span>                     degree,
-<a name="l00465"></a>00465         <span class="keywordtype">double</span>              *   mse
-<a name="l00466"></a>00466         );
-<a name="l00467"></a>00467 cpl_polynomial * irplib_polynomial_fit_1d_create_chiq(
-<a name="l00468"></a>00468         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l00469"></a>00469         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l00470"></a>00470         <span class="keywordtype">int</span>                     degree,
-<a name="l00471"></a>00471         <span class="keywordtype">double</span>              *   rechiq
-<a name="l00472"></a>00472         );
-<a name="l00473"></a>00473 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00481"></a>00481 cpl_error_code irplib_frameset_sort(
-<a name="l00482"></a>00482         <span class="keyword">const</span> cpl_frameset *  <span class="keyword">self</span>,
-<a name="l00483"></a>00483         <span class="keywordtype">int</span>* iindex,
-<a name="l00484"></a>00484         <span class="keywordtype">double</span>* exptime);
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_utils.h,v 1.60 2013/08/21 14:55:14 cgarcia Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: cgarcia $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/08/21 14:55:14 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.60 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Log: irplib_utils.h,v $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * Revision 1.60  2013/08/21 14:55:14  cgarcia</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * Include math.h for declaration of isinf and isnan to avoid compiler warning</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * Revision 1.59  2013/03/15 09:06:06  jtaylor</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * add irplib_aligned_{[mc]alloc,free}</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * allow portable allocation of aligned memory for vectorization</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.58  2013/03/15 09:05:28  jtaylor</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * move isnan and isinf to header so it is inlineable and use gcc builtin for better performance</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.57  2013/02/27 16:02:02  jtaylor</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * add diagnostic pragma macros</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.56  2012/08/06 06:14:18  llundin</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * irplib_errorstate_warning(): Replaced by cpl_errorstate_dump_one_warning() from CPL 6.X</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.55  2011/06/01 06:47:56  llundin</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * skip_if_lt(): Fix previous edits switch of A and B in error message</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> * Revision 1.54  2011/05/26 08:08:56  llundin</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> * skip_if_lt(): Support printf-style error message, name-space protect temporary variables</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> * Revision 1.53  2011/05/09 07:51:18  llundin</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> * irplib_dfs_save_image_(): Modified from cpl_dfs_save_image(). irplib_dfs_save_image(): Use irplib_dfs_save_image_()</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> * Revision 1.52  2010/03/23 07:57:59  kmirny</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * DFS08552, Documentation for irplib_frameset_sort</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> * Revision 1.51  2009/12/16 14:59:30  cgarcia</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> * Avoid name clash with index function</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * Revision 1.50  2009/08/17 15:10:16  kmirny</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> * DFS07454 DFS07437</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#ifndef IRPLIB_UTILS_H</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_UTILS_H</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <stdarg.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor">#define IRPLIB_XSTRINGIFY(TOSTRING) #TOSTRING</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_STRINGIFY(TOSTRING) IRPLIB_XSTRINGIFY(TOSTRING)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#if !defined __GNUC__ && !defined __inline__</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#define __inline__ inline</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define __inline__</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_IGN(x)        \</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">    _Pragma("GCC diagnostic push") \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">    _Pragma(IRPLIB_STRINGIFY(GCC diagnostic ignored #x))</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_ERR(x)        \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">    _Pragma("GCC diagnostic push") \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">    _Pragma(IRPLIB_STRINGIFY(GCC diagnostic error #x))</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_POP \</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor">    _Pragma("GCC diagnostic pop")</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_IGN(x)</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_PUSH_ERR(x)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_DIAG_PRAGMA_POP</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/* FIXME: Remove when no longer used by any irplib-based pipelines */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/* Useful for debugging */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#define irplib_trace()  do if (cpl_error_get_code()) { \</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">    cpl_msg_debug(cpl_func, __FILE__ " at line %d: ERROR '%s' at %s", \</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor">         __LINE__, cpl_error_get_message(), cpl_error_get_where()); \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">  } else { \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">    cpl_msg_debug(cpl_func, __FILE__ " at line %d: OK", __LINE__); \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">  } while (0)</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor">#define irplib_error_recover(ESTATE, ...)                       \</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">    do if (!cpl_errorstate_is_equal(ESTATE)) {                  \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">        cpl_msg_warning(cpl_func, __VA_ARGS__);                 \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">        cpl_msg_indent_more();                                  \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">        cpl_errorstate_dump(ESTATE, CPL_FALSE,                  \</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">                            cpl_errorstate_dump_one_warning);   \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">        cpl_msg_indent_less();                                  \</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor">        cpl_errorstate_set(ESTATE);                             \</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">  @brief Declare a function suitable for use with irplib_dfs_table_convert()</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">  @param  table_set_row    The name of the function to declare</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">  @see irplib_dfs_table_convert(), irplib_table_read_from_frameset()</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment"></span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor">#define IRPLIB_UTIL_SET_ROW(table_set_row)                      \</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">    cpl_boolean table_set_row(cpl_table *,                      \</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor">                              const char *,                     \</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor">                              int,                              \</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor">                              const cpl_frame *,                \</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">                              const cpl_parameterlist *)</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">  @brief Declare a function suitable for use with irplib_dfs_table_convert()</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">  @param  table_check    The name of the function to declare</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">  @see irplib_dfs_table_convert()</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">#define IRPLIB_UTIL_CHECK(table_check)                          \</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">    cpl_error_code table_check(cpl_table *,                     \</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor">                               const cpl_frameset *,            \</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">                               const cpl_parameterlist *)</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">  @brief   Conditional skip to the (unqiue) return point of the function</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">  @param   CONDITION    The condition to check</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">  @see cpl_error_ensure()</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment"></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">  skip_if() takes one argument, which is a logical expression.</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">  If the logical expression is false skip_if() takes no action and</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">  program execution continues.</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">  If the logical expression is true this indicates an error. In this case</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">  skip_if() will set the location of the error to the point where it</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">  was invoked in the recipe code (unless the error location is already in the</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">  recipe code). If no error code had been set, then skip_if() will set one.</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">  Finally, skip_if() causes program execution to skip to the macro 'end_skip'.</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">  The macro end_skip is located towards the end of the function, after</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">  which all resource deallocation and the function return is located.</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">  The use of skip_if() assumes the following coding practice:</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">  1) Pointers used for dynamically allocated memory that they "own" shall always</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">     point to either NULL or to allocated memory (including CPL-objects).</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">  2) Such pointers may not be reused to point to memory whose deallocation</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">     requires calls to different functions.</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">  3) Pointers of type FILE should be set NULL when not pointing to an open</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">     stream and their closing calls (fclose(), freopen(), etc.) following the</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">     'end_skip' should be guarded against such NULL pointers.</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment"></span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">  Error checking with skip_if() is encouraged due to the following advantages:</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">  1) It ensures that a CPL-error code is set.</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">  2) It ensures that the location of the error in the _recipe_ code is noted.</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">  3) The error checking may be confined to a single concise line.</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">  4) It is not necessary to replicate memory deallocation for every error</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">     condition.</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">  5) If more extensive error reporting/handling is required it is not precluded</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">     by the use of skip_if().</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">  6) It allows for a single point of function return.</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">  7) It allows for optional, uniformly formatted debugging/tracing information</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">     at each macro invocation.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment"></span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">  The implementation of skip_if() uses a goto/label construction.</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">  According to Kerningham & Ritchie, The C Programming Language, 2nd edition,</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">  Section 3.8:</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">  "This organization is handy if the error-handling code is non-trivial,</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">  and if errors can occur in several places."</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment"></span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">  The use of goto for any other purpose should be avoided.</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment"></span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor">#define skip_if(CONDITION)                                                     \</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">    do {                                                                       \</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor">        cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">                         goto cleanup, "Propagating a pre-existing error");    \</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">        cpl_error_ensure(!(CONDITION), cpl_error_get_code(),                   \</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor">                         goto cleanup, "Propagating error");\</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">  @brief   Skip if A < B</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">  @param   A   The 1st double to compare</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">  @param   B   The 2nd double to compare</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">  @param   MSG A printf-style error message, 1st arg should be a string literal</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">  @see skip_if()</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">  @note A and B are evaluated exactly once</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment"></span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">  If no CPL error is set, sets CPL_ERROR_DATA_NOT_FOUND on failure</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="preprocessor">#define skip_if_lt(A, B, ...)                                                  \</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="preprocessor">    do {                                                                       \</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">        </span><span class="comment">/* Name-space protected one-time only evaluation */</span><span class="preprocessor">                    \</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="preprocessor">        const double irplib_utils_a = (double)(A);                             \</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="preprocessor">        const double irplib_utils_b = (double)(B);                             \</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">                                                                               \</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">        cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">                         goto cleanup, "Propagating a pre-existing error");    \</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">        if (irplib_utils_a < irplib_utils_b) {                                 \</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">            char * irplib_utils_msg = cpl_sprintf(__VA_ARGS__);                \</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">            (void)cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,    \</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">                                        "Need at least %g (not %g) %s",        \</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">                                        irplib_utils_b, irplib_utils_a,        \</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="preprocessor">                                        irplib_utils_msg);                     \</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="preprocessor">            cpl_free(irplib_utils_msg);                                        \</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="preprocessor">            goto cleanup;                                                      \</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="preprocessor">        }                                                                      \</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">  @brief   Conditional skip on coding bug</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">  @param   CONDITION    The condition to check</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">  @see skip_if()</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">  @note unlike assert() this check cannot be disabled</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">#define bug_if(CONDITION)                                                      \</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">    do {                                                                       \</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">        cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),          \</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">                         goto cleanup, "Propagating an unexpected error, "     \</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="preprocessor">                         "please report to " PACKAGE_BUGREPORT);               \</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">        cpl_error_ensure(!(CONDITION), CPL_ERROR_UNSPECIFIED,                  \</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="preprocessor">                         goto cleanup, "Internal error, please report to "     \</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="preprocessor">                         PACKAGE_BUGREPORT);                                   \</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">  @brief   Conditional skip with error creation</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">  @param   CONDITION    The condition to check</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">  @param   ERROR        The error code to set</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">  @param   MSG          A printf-style error message. As a matter of</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">                        user-friendliness the message should mention any</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">                        value that caused the @em CONDITION to fail.</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">  @see skip_if()</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">  @note unlike assert() this check cannot be disabled</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="preprocessor">#define error_if(CONDITION, ERROR, ...)                                 \</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="preprocessor">    cpl_error_ensure(cpl_error_get_code() == CPL_ERROR_NONE &&          \</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="preprocessor">                     !(CONDITION), ERROR, goto cleanup,  __VA_ARGS__)</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">  @brief   Propagate a preexisting error, if any</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">  @param   MSG          A printf-style error message.</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">  @see skip_if()</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">#define any_if(...)                                                     \</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor">    cpl_error_ensure(!cpl_error_get_code(), cpl_error_get_code(),       \</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="preprocessor">                     goto cleanup,  __VA_ARGS__)</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">  @brief   Define the single point of resource deallocation and return</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">  @see skip_if()</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">  @note end_skip should be used exactly once in functions that use skip_if() etc</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="preprocessor">#define end_skip \</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">    do {                                                                     \</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor">        cleanup:                                                             \</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor">        if (cpl_error_get_code())                                            \</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="preprocessor">            cpl_msg_debug(cpl_func, "Cleanup in " __FILE__ " line %u with "  \</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor">                          "error '%s' at %s", __LINE__,                      \</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor">                          cpl_error_get_message(), cpl_error_get_where());   \</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="preprocessor">        else                                                                 \</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="preprocessor">            cpl_msg_debug(cpl_func, "Cleanup in " __FILE__ " line %u",       \</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="preprocessor">                          __LINE__);                                         \</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">#define irplib_ensure(CONDITION, ec, ...)                                      \</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor">    cpl_error_ensure(CONDITION, ec, goto cleanup,  __VA_ARGS__)</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="preprocessor">#define irplib_check(COMMAND, ...)                                             \</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="preprocessor">  do {                                                                         \</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor">    cpl_errorstate irplib_check_prestate = cpl_errorstate_get();               \</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor">    skip_if(0);                                                                \</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor">    COMMAND;                                                                   \</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="preprocessor">        irplib_trace(); \</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="preprocessor">    irplib_ensure(cpl_errorstate_is_equal(irplib_check_prestate),              \</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="preprocessor">                  cpl_error_get_code(), __VA_ARGS__);                          \</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="preprocessor">        irplib_trace(); \</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="preprocessor">  } while (0)</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">                                   Function prototypes</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga346842d722834a2e6221ff2d86314b7e" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image</a>(cpl_frameset            *,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                                      <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                      <span class="keyword">const</span> cpl_frameset      *,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                                      <span class="keyword">const</span> cpl_image         *,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                                      cpl_type_bpp             ,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                                      <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga4dc12f321e7aeb5e67ff19f815bfd7b7" title="Save a propertylist as a DFS-compliant pipeline product.">irplib_dfs_save_propertylist</a>(cpl_frameset            *,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                                             <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                                             <span class="keyword">const</span> cpl_frameset      *,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                                             <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                                             <span class="keyword">const</span> <span class="keywordtype">char</span>              *);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga66f7adc9e165b4e934e3d57a700f55c1" title="Save an imagelist as a DFS-compliant pipeline product.">irplib_dfs_save_imagelist</a>(cpl_frameset            *,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                          <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                                          <span class="keyword">const</span> cpl_frameset      *,</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                                          <span class="keyword">const</span> cpl_imagelist     *,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                                          cpl_type_bpp             ,</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                          <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                                          <span class="keyword">const</span> <span class="keywordtype">char</span>              *);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga62a91f8630af11164547c168660b2ade" title="Save a table as a DFS-compliant pipeline product.">irplib_dfs_save_table</a>(cpl_frameset            *,</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>                                      <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                      <span class="keyword">const</span> cpl_frameset      *,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                      <span class="keyword">const</span> cpl_table         *,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                      <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                      <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>              *);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga1fd7c2f4c00014049b0bf4bf6814b451" title="Save an image as a DFS-compliant pipeline product.">irplib_dfs_save_image_</a>(cpl_frameset            *,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                       cpl_propertylist        *,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                       <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                       <span class="keyword">const</span> cpl_frameset      *,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                       <span class="keyword">const</span> cpl_frame         *,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                       <span class="keyword">const</span> cpl_image         *,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                       cpl_type                 ,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                       <span class="keyword">const</span> cpl_propertylist  *,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>              *);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__utils.html#gae13f0d6b24ade506a99ac9c4bb09efde" title="Comparison function to identify different input frames.">irplib_compare_tags</a>(cpl_frame *, cpl_frame *);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="group__irplib__utils.html#ga9fe4dca85dee68061114e26fdc72a134" title="Find the filename with the given tag in a frame set.">irplib_frameset_find_file</a>(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="keyword">const</span> cpl_frame * <a class="code" href="group__irplib__utils.html#ga5b20a00f315410b49b1db1dd2417fe68" title="Find the first frame belonging to the given group.">irplib_frameset_get_first_from_group</a>(<span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                                        cpl_frame_group);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> cpl_error_code <a class="code" href="group__irplib__utils.html#gac568c70a57ef8610f5fedc9f1943a3a1" title="Find the aperture(s) with the greatest flux.">irplib_apertures_find_max_flux</a>(<span class="keyword">const</span> cpl_apertures *, <span class="keywordtype">int</span> *,</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                                               <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="preprocessor">#if defined HAVE_ISNAN && HAVE_ISNAN != 0</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="preprocessor"></span><span class="preprocessor">#if !defined isnan && defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 0</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="preprocessor"></span><span class="comment">/* HP-UX and Solaris may have isnan() available at link-time</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">   without the prototype */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="keywordtype">int</span> isnan(<span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> cpl_error_code</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <a class="code" href="group__irplib__utils.html#ga3d1a791b5dc870770611c7dbf60d02df" title="Create a DFS product with one table from one or more (ASCII) file(s)">irplib_dfs_table_convert</a>(cpl_table *, cpl_frameset *, <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                          <span class="keywordtype">int</span>, <span class="keywordtype">char</span>, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                          <span class="keyword">const</span> cpl_parameterlist *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                          <span class="keyword">const</span> cpl_propertylist *, <span class="keyword">const</span> cpl_propertylist *,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                          cpl_boolean (*)(cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                                             <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                                             <span class="keyword">const</span> cpl_parameterlist *),</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                          cpl_error_code (*)(cpl_table *,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                                             <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                                             <span class="keyword">const</span> cpl_parameterlist *));</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga59a68df1795523d4f7653875bd9fc01d" title="Set the rows of a table with data from one or more (ASCII) files.">irplib_table_read_from_frameset</a>(cpl_table *,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                                <span class="keyword">const</span> cpl_frameset *,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                                <span class="keywordtype">char</span>,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                                <span class="keyword">const</span> cpl_parameterlist *,</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                                                cpl_boolean (*)</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                                                (cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                                                 <span class="keywordtype">int</span>, <span class="keyword">const</span> cpl_frame *,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                                                 <span class="keyword">const</span> cpl_parameterlist *));</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> cpl_error_code <a class="code" href="group__irplib__utils.html#ga832676f36ecd647b77f4bb373b2d1954" title="Split the values in an image in three according to two thresholds.">irplib_image_split</a>(<span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                   cpl_image *, cpl_image *, cpl_image *,</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                                   <span class="keywordtype">double</span>, cpl_boolean,</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                                   <span class="keywordtype">double</span>, cpl_boolean,</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                                   <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>                                   cpl_boolean, cpl_boolean, cpl_boolean);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga6b29dac884b62ab52f43dd670d4d8386" title="Dump a single CPL error at the CPL warning level.">irplib_errorstate_dump_warning</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga901ff52a1c9dcdfcf2d2632d31064bdb" title="Dump a single CPL error at the CPL info level.">irplib_errorstate_dump_info</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="keywordtype">void</span> <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>(<span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>, <span class="keywordtype">unsigned</span>);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">/* wrapper for replace deprecated function cpl_polynomial_fit_1d_create*/</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> cpl_polynomial * irplib_polynomial_fit_1d_create(</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>         <span class="keywordtype">double</span>              *   mse</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         );</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> cpl_polynomial * irplib_polynomial_fit_1d_create_chiq(</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         <span class="keywordtype">double</span>              *   rechiq</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         );</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> cpl_error_code irplib_frameset_sort(</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         <span class="keyword">const</span> cpl_frameset *  <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         <span class="keywordtype">int</span>* iindex,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         <span class="keywordtype">double</span>* exptime);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment">/* FIXME: add alloc_size(2) */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="keywordtype">void</span> * irplib_aligned_malloc(<span class="keywordtype">size_t</span> alignment, <span class="keywordtype">size_t</span> size) CPL_ATTR_ALLOC;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="keywordtype">void</span> * irplib_aligned_calloc(<span class="keywordtype">size_t</span> alignment,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                              <span class="keywordtype">size_t</span> nelem, <span class="keywordtype">size_t</span> nbytes) CPL_ATTR_ALLOC;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="keywordtype">void</span> irplib_aligned_free (<span class="keywordtype">void</span> * aligned_ptr);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="comment">                                   Function inlines</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="keyword">static</span> __inline__ <span class="keywordtype">int</span> irplib_isinf(<span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">/* documented only on 4.4, but available in at least 4.2 */</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="preprocessor">#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> __builtin_isinf(value);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="preprocessor">#elif defined HAVE_ISINF && HAVE_ISINF</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> isinf(value);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> value != 0 && value == 2 * value;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="keyword">static</span> __inline__ <span class="keywordtype">int</span> irplib_isnan(<span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">/* documented only on 4.4, but available in at least 4.2 */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> __builtin_isnan(value);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="preprocessor">#elif defined HAVE_ISNAN && HAVE_ISNAN</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> isnan(value);</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> value != value;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wavecal_8c_source.html b/html/irplib__wavecal_8c_source.html
index 2e1e5ab..254b328 100644
--- a/html/irplib__wavecal_8c_source.html
+++ b/html/irplib__wavecal_8c_source.html
@@ -2,1544 +2,1575 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wavecal.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wavecal.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wavecal.c,v 1.52 2012/08/03 21:05:32 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IRPLIB Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/08/03 21:05:32 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.52 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#include "irplib_wavecal_impl.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* Needed for irplib_errorstate_dump_debug() */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="preprocessor">#include <string.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <math.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="preprocessor">#ifdef HAVE_GSL</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#include <gsl/gsl_multimin.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                               Private types</span>
-<a name="l00059"></a>00059 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     <span class="keyword">const</span> cpl_vector * observed;
-<a name="l00064"></a>00064     cpl_polynomial   * disp1d;
-<a name="l00065"></a>00065     cpl_vector       * spectrum;
-<a name="l00066"></a>00066     irplib_base_spectrum_model * param;
-<a name="l00067"></a>00067     cpl_error_code  (* filler)(cpl_vector *, <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00068"></a>00068                                irplib_base_spectrum_model *);
-<a name="l00069"></a>00069     cpl_vector       * vxc;
-<a name="l00070"></a>00070     <span class="keywordtype">double</span>             xc;
-<a name="l00071"></a>00071     <span class="keywordtype">int</span>                maxxc;
-<a name="l00072"></a>00072     <span class="keywordtype">double</span>             mxc;
-<a name="l00073"></a>00073     cpl_polynomial   * mdisp;
-<a name="l00074"></a>00074     <span class="keywordtype">int</span>                ishift;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 } irplib_multimin;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                               Defines</span>
-<a name="l00080"></a>00080 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="preprocessor">#ifndef inline</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span>
-<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>
-<a name="l00086"></a>00086 <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00090"></a>00090 <span class="comment">                                   Private functions</span>
-<a name="l00091"></a>00091 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="preprocessor">#ifdef HAVE_GSL</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> irplib_gsl_correlation(<span class="keyword">const</span> gsl_vector *, <span class="keywordtype">void</span> *);
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="keyword">static</span> cpl_error_code
-<a name="l00098"></a>00098 irplib_polynomial_find_1d_from_correlation_(cpl_polynomial *, <span class="keywordtype">int</span>,
-<a name="l00099"></a>00099                                             <span class="keyword">const</span> cpl_vector *,
-<a name="l00100"></a>00100                                             irplib_base_spectrum_model *,
-<a name="l00101"></a>00101                                             cpl_error_code (*)
-<a name="l00102"></a>00102                                             (cpl_vector *,
-<a name="l00103"></a>00103                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00104"></a>00104                                              irplib_base_spectrum_model *),
-<a name="l00105"></a>00105                                             <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00106"></a>00106                                             <span class="keywordtype">double</span> *, cpl_boolean *);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 
-<a name="l00118"></a>00118 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00126"></a>00126 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00127"></a><a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25">00127</a> <span class="keywordtype">int</span> <a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25" title="Count the positive Y-entries in a given X-range.">irplib_bivector_count_positive</a>(<span class="keyword">const</span> cpl_bivector * <span class="keyword">self</span>,
-<a name="l00128"></a>00128                                   <span class="keywordtype">double</span>               x_min,
-<a name="l00129"></a>00129                                   <span class="keywordtype">double</span>               x_max)
-<a name="l00130"></a>00130 {
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="keyword">const</span> <span class="keywordtype">int</span>      nself = cpl_bivector_get_size(<span class="keyword">self</span>);
-<a name="l00133"></a>00133     <span class="keyword">const</span> <span class="keywordtype">double</span> * px    = cpl_bivector_get_x_data_const(<span class="keyword">self</span>);
-<a name="l00134"></a>00134     <span class="keyword">const</span> <span class="keywordtype">double</span> * py    = cpl_bivector_get_y_data_const(<span class="keyword">self</span>);
-<a name="l00135"></a>00135     <span class="keywordtype">int</span>            npos  = 0;
-<a name="l00136"></a>00136     <span class="keywordtype">int</span>            i     = 0;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, -1);
-<a name="l00139"></a>00139     cpl_ensure(x_min <= x_max, CPL_ERROR_ILLEGAL_INPUT, -2);
-<a name="l00140"></a>00140     
-<a name="l00141"></a>00141     <span class="comment">/* FIXME: Use cpl_vector_find() */</span>
-<a name="l00142"></a>00142     <span class="keywordflow">while</span> (i < nself && px[i] < x_min) i++;
-<a name="l00143"></a>00143     <span class="keywordflow">while</span> (i < nself && px[i] < x_max)
-<a name="l00144"></a>00144         <span class="keywordflow">if</span> (py[i++] > 0) npos++;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keywordflow">return</span> npos;
-<a name="l00147"></a>00147 }
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00159"></a>00159 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00160"></a><a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb">00160</a> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb" title="Fit a 2D-dispersion from an image of wavelengths.">irplib_polynomial_fit_2d_dispersion</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00161"></a>00161                                                    <span class="keyword">const</span> cpl_image * imgwave,
-<a name="l00162"></a>00162                                                    <span class="keywordtype">int</span> fitdeg, <span class="keywordtype">double</span> * presid)
-<a name="l00163"></a>00163 {
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keyword">const</span> <span class="keywordtype">int</span>        nx = cpl_image_get_size_x(imgwave);
-<a name="l00166"></a>00166     <span class="keyword">const</span> <span class="keywordtype">int</span>        ny = cpl_image_get_size_y(imgwave);
-<a name="l00167"></a>00167     <span class="keyword">const</span> <span class="keywordtype">int</span>        nbad = cpl_image_count_rejected(imgwave);
-<a name="l00168"></a>00168     <span class="keyword">const</span> <span class="keywordtype">int</span>        nsamp = nx * ny - nbad;
-<a name="l00169"></a>00169     cpl_matrix     * xy_pos;
-<a name="l00170"></a>00170     <span class="keywordtype">double</span>         * xdata;
-<a name="l00171"></a>00171     <span class="keywordtype">double</span>         * ydata;
-<a name="l00172"></a>00172     cpl_vector     * wlen;
-<a name="l00173"></a>00173     <span class="keywordtype">double</span>         * dwlen;
-<a name="l00174"></a>00174     <span class="keyword">const</span> cpl_size   nfitdeg = (cpl_size)fitdeg;
-<a name="l00175"></a>00175     <span class="keywordtype">int</span> i, j;
-<a name="l00176"></a>00176     <span class="keywordtype">int</span> k = 0;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     cpl_ensure_code(<span class="keyword">self</span>    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00179"></a>00179     cpl_ensure_code(imgwave != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00180"></a>00180     cpl_ensure_code(presid  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00181"></a>00181     cpl_ensure_code(fitdeg > 0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 2,
-<a name="l00184"></a>00184                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     xy_pos = cpl_matrix_new(2, nsamp);
-<a name="l00187"></a>00187     xdata = cpl_matrix_get_data(xy_pos);
-<a name="l00188"></a>00188     ydata = xdata + nsamp;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     dwlen = (<span class="keywordtype">double</span>*)cpl_malloc(nsamp * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00191"></a>00191     wlen = cpl_vector_wrap(nsamp, dwlen);
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">for</span> (i=1; i <= nx; i++) {
-<a name="l00194"></a>00194         <span class="keywordflow">for</span> (j=1; j <= ny; j++) {
-<a name="l00195"></a>00195             <span class="keywordtype">int</span> is_bad;
-<a name="l00196"></a>00196             <span class="keyword">const</span> <span class="keywordtype">double</span> value = cpl_image_get(imgwave, i, j, &is_bad);
-<a name="l00197"></a>00197             <span class="keywordflow">if</span> (!is_bad) {
-<a name="l00198"></a>00198                 xdata[k] = i;
-<a name="l00199"></a>00199                 ydata[k] = j;
-<a name="l00200"></a>00200                 dwlen[k] = value;
-<a name="l00201"></a>00201                 k++;
-<a name="l00202"></a>00202             }
-<a name="l00203"></a>00203         }
-<a name="l00204"></a>00204     }
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     cpl_msg_info(cpl_func, <span class="stringliteral">"Fitting 2D polynomial to %d X %d image, ignoring "</span>
-<a name="l00207"></a>00207                  <span class="stringliteral">"%d poorly calibrated pixels"</span>, nx, ny, nbad);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     <span class="keywordflow">if</span> (cpl_polynomial_fit(<span class="keyword">self</span>, xy_pos, NULL, wlen, NULL, CPL_FALSE, NULL,
-<a name="l00210"></a>00210                            &nfitdeg) == CPL_ERROR_NONE && presid != NULL) {
-<a name="l00211"></a>00211         cpl_vector_fill_polynomial_fit_residual(wlen, wlen, NULL, <span class="keyword">self</span>, xy_pos,
-<a name="l00212"></a>00212                                                 NULL);
-<a name="l00213"></a>00213         *presid = cpl_vector_product(wlen, wlen)/nsamp;
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215     cpl_matrix_delete(xy_pos);
-<a name="l00216"></a>00216     cpl_vector_delete(wlen);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     cpl_ensure_code(k == nsamp, CPL_ERROR_UNSPECIFIED);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00242"></a>00242 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00243"></a>00243 cpl_error_code
-<a name="l00244"></a><a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86">00244</a> <a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86" title="Modify self by maximizing the cross-correlation.">irplib_polynomial_find_1d_from_correlation</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00245"></a>00245                                            <span class="keywordtype">int</span> maxdeg,
-<a name="l00246"></a>00246                                            <span class="keyword">const</span> cpl_vector * obs,
-<a name="l00247"></a>00247                                            irplib_base_spectrum_model * model,
-<a name="l00248"></a>00248                                            cpl_error_code (* filler)
-<a name="l00249"></a>00249                                            (cpl_vector *,
-<a name="l00250"></a>00250                                             <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00251"></a>00251                                             irplib_base_spectrum_model *),
-<a name="l00252"></a>00252                                            <span class="keywordtype">double</span> pixtol,
-<a name="l00253"></a>00253                                            <span class="keywordtype">double</span> pixstep,
-<a name="l00254"></a>00254                                            <span class="keywordtype">int</span> hsize,
-<a name="l00255"></a>00255                                            <span class="keywordtype">int</span> maxite,
-<a name="l00256"></a>00256                                            <span class="keywordtype">double</span> * pxc)
-<a name="l00257"></a>00257 {
-<a name="l00258"></a>00258     cpl_boolean restart = CPL_FALSE;
-<a name="l00259"></a>00259     <span class="keyword">const</span> cpl_error_code error = irplib_polynomial_find_1d_from_correlation_
-<a name="l00260"></a>00260         (<span class="keyword">self</span>, maxdeg, obs, model, filler, pixtol, pixstep, hsize, maxite, pxc,
-<a name="l00261"></a>00261          &restart);
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) :
-<a name="l00264"></a>00264         (restart ? cpl_error_set(cpl_func, CPL_ERROR_CONTINUE)
-<a name="l00265"></a>00265          : CPL_ERROR_NONE);
-<a name="l00266"></a>00266 }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00289"></a>00289 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00290"></a>00290 <span class="keyword">static</span> cpl_error_code
-<a name="l00291"></a>00291 irplib_polynomial_find_1d_from_correlation_(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00292"></a>00292                                             <span class="keywordtype">int</span> maxdeg,
-<a name="l00293"></a>00293                                             <span class="keyword">const</span> cpl_vector * obs,
-<a name="l00294"></a>00294                                             irplib_base_spectrum_model * model,
-<a name="l00295"></a>00295                                             cpl_error_code (* filler)
-<a name="l00296"></a>00296                                             (cpl_vector *,
-<a name="l00297"></a>00297                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00298"></a>00298                                              irplib_base_spectrum_model *),
-<a name="l00299"></a>00299                                             <span class="keywordtype">double</span> pixtol,
-<a name="l00300"></a>00300                                             <span class="keywordtype">double</span> pixstep,
-<a name="l00301"></a>00301                                             <span class="keywordtype">int</span> hsize,
-<a name="l00302"></a>00302                                             <span class="keywordtype">int</span> maxite,
-<a name="l00303"></a>00303                                             <span class="keywordtype">double</span> * pxc,
-<a name="l00304"></a>00304                                             cpl_boolean * prestart)
-<a name="l00305"></a>00305 {
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 <span class="preprocessor">#ifdef HAVE_GSL</span>
-<a name="l00308"></a>00308 <span class="preprocessor"></span>    <span class="keyword">const</span> gsl_multimin_fminimizer_type * T = gsl_multimin_fminimizer_nmsimplex;
-<a name="l00309"></a>00309     gsl_multimin_fminimizer * minimizer;
-<a name="l00310"></a>00310     gsl_multimin_function my_func;
-<a name="l00311"></a>00311     irplib_multimin data;
-<a name="l00312"></a>00312     gsl_vector * dispgsl;
-<a name="l00313"></a>00313     gsl_vector * stepsize;
-<a name="l00314"></a>00314     gsl_vector * dispprev;
-<a name="l00315"></a>00315     <span class="keywordtype">int</span> status = GSL_CONTINUE;
-<a name="l00316"></a>00316     <span class="keyword">const</span> <span class="keywordtype">int</span> nobs = cpl_vector_get_size(obs);
-<a name="l00317"></a>00317     <span class="keyword">const</span> cpl_size nfit = maxdeg + 1;
-<a name="l00318"></a>00318     cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00319"></a>00319     <span class="comment">/* Convert pixel step to wavelength step on detector center */</span>
-<a name="l00320"></a>00320     <span class="keyword">const</span> <span class="keywordtype">double</span> wlstep =
-<a name="l00321"></a>00321         cpl_polynomial_eval_1d_diff(<span class="keyword">self</span>, 0.5 * (nobs + pixstep),
-<a name="l00322"></a>00322                                     0.5 * (nobs - pixstep), NULL);
-<a name="l00323"></a>00323     <span class="keywordtype">double</span> wlstepi = wlstep;
-<a name="l00324"></a>00324     <span class="keywordtype">double</span> size;
-<a name="l00325"></a>00325     <span class="keywordtype">int</span> iter;
-<a name="l00326"></a>00326     cpl_size i;
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="preprocessor">#endif</span>
-<a name="l00329"></a>00329 <span class="preprocessor"></span>
-<a name="l00330"></a>00330     cpl_ensure_code(prestart != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00331"></a>00331     *prestart = CPL_FALSE;
-<a name="l00332"></a>00332     cpl_ensure_code(<span class="keyword">self</span>     != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00333"></a>00333     cpl_ensure_code(obs      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00334"></a>00334     cpl_ensure_code(model    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00335"></a>00335     cpl_ensure_code(filler   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00336"></a>00336     cpl_ensure_code(pxc      != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l00339"></a>00339                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,
-<a name="l00342"></a>00342                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344     cpl_ensure_code(maxdeg  >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00345"></a>00345     cpl_ensure_code(pixtol  > 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00346"></a>00346     cpl_ensure_code(pixstep > 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00347"></a>00347     cpl_ensure_code(hsize   >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00348"></a>00348     cpl_ensure_code(maxite  >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 <span class="preprocessor">#ifndef HAVE_GSL</span>
-<a name="l00351"></a>00351 <span class="preprocessor"></span>    <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_UNSUPPORTED_MODE,
-<a name="l00352"></a>00352                                  <span class="stringliteral">"GSL is not available"</span>);
-<a name="l00353"></a>00353 <span class="preprocessor">#else</span>
-<a name="l00354"></a>00354 <span class="preprocessor"></span>
-<a name="l00355"></a>00355     minimizer = gsl_multimin_fminimizer_alloc(T, (<span class="keywordtype">size_t</span>)nfit);
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357     cpl_ensure_code(minimizer != NULL, CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00358"></a>00358        
-<a name="l00359"></a>00359     dispgsl  = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);
-<a name="l00360"></a>00360     stepsize = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);
-<a name="l00361"></a>00361     dispprev = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363     <span class="keywordflow">for</span> (i=0; i < nfit; i++) {
-<a name="l00364"></a>00364         <span class="keyword">const</span> <span class="keywordtype">double</span> value = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i);
-<a name="l00365"></a>00365         gsl_vector_set(dispgsl, (<span class="keywordtype">size_t</span>)i, value);
-<a name="l00366"></a>00366         gsl_vector_set(stepsize, (<span class="keywordtype">size_t</span>)i, wlstepi);
-<a name="l00367"></a>00367         wlstepi /= (double)nobs;
-<a name="l00368"></a>00368     }
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     my_func.n = nfit;
-<a name="l00371"></a>00371     my_func.f = &irplib_gsl_correlation;
-<a name="l00372"></a>00372     my_func.params = (<span class="keywordtype">void</span> *)(&data);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     data.observed = obs;
-<a name="l00375"></a>00375     data.disp1d   = <span class="keyword">self</span>;
-<a name="l00376"></a>00376     data.spectrum = cpl_vector_new(nobs + 2 * hsize);
-<a name="l00377"></a>00377     data.vxc      = cpl_vector_new(1 + 2 * hsize);
-<a name="l00378"></a>00378     data.param    = model;
-<a name="l00379"></a>00379     data.filler   = filler;
-<a name="l00380"></a>00380     data.maxxc    = 0; <span class="comment">/* Output */</span>
-<a name="l00381"></a>00381     data.ishift   = 0; <span class="comment">/* Output */</span>
-<a name="l00382"></a>00382     data.mxc      = -1.0; <span class="comment">/* Output */</span>
-<a name="l00383"></a>00383     data.mdisp    = NULL; <span class="comment">/* Output */</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     gsl_multimin_fminimizer_set (minimizer, &my_func, dispgsl, stepsize);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387     <span class="keywordflow">for</span> (iter = 0; status == GSL_CONTINUE && iter < maxite; iter++) {
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389         <span class="keyword">const</span> <span class="keywordtype">double</span> fprev = minimizer->fval;
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391         gsl_vector_memcpy(dispprev, minimizer->x);
-<a name="l00392"></a>00392         status = gsl_multimin_fminimizer_iterate(minimizer);
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394         <span class="keywordflow">if</span> (status || !cpl_errorstate_is_equal(prestate)) <span class="keywordflow">break</span>;
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396         size = gsl_multimin_fminimizer_size (minimizer);
-<a name="l00397"></a>00397         status = gsl_multimin_test_size (size, pixtol);
-<a name="l00398"></a>00398      
-<a name="l00399"></a>00399         <span class="keywordflow">if</span> (status == GSL_SUCCESS) {
-<a name="l00400"></a>00400             cpl_msg_debug(cpl_func, <span class="stringliteral">"converged to minimum at"</span>);
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402             <span class="keywordflow">if</span> (nfit == 0) {
-<a name="l00403"></a>00403                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g df() = %g size = %g"</span>, 
-<a name="l00404"></a>00404                               iter,
-<a name="l00405"></a>00405                               gsl_vector_get (minimizer->x, 0)
-<a name="l00406"></a>00406                               - gsl_vector_get (dispprev, 0), 
-<a name="l00407"></a>00407                               minimizer->fval - fprev, size);
-<a name="l00408"></a>00408             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nfit == 1) {
-<a name="l00409"></a>00409                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g %g df() = %g size = %g"</span>, 
-<a name="l00410"></a>00410                               iter,
-<a name="l00411"></a>00411                               gsl_vector_get (minimizer->x, 0)
-<a name="l00412"></a>00412                               - gsl_vector_get (dispprev, 0), 
-<a name="l00413"></a>00413                               gsl_vector_get (minimizer->x, 1)
-<a name="l00414"></a>00414                               - gsl_vector_get (dispprev, 1), 
-<a name="l00415"></a>00415                               minimizer->fval - fprev, size);
-<a name="l00416"></a>00416             } <span class="keywordflow">else</span> {
-<a name="l00417"></a>00417                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g %g %g df() = %g size = %g"</span>, 
-<a name="l00418"></a>00418                               iter,
-<a name="l00419"></a>00419                               gsl_vector_get (minimizer->x, 0)
-<a name="l00420"></a>00420                               - gsl_vector_get (dispprev, 0), 
-<a name="l00421"></a>00421                               gsl_vector_get (minimizer->x, 1)
-<a name="l00422"></a>00422                               - gsl_vector_get (dispprev, 1), 
-<a name="l00423"></a>00423                               gsl_vector_get (minimizer->x, 2)
-<a name="l00424"></a>00424                               - gsl_vector_get (dispprev, 2), 
-<a name="l00425"></a>00425                               minimizer->fval - fprev, size);
-<a name="l00426"></a>00426             }
-<a name="l00427"></a>00427         }
-<a name="l00428"></a>00428     }
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430     <span class="keywordflow">if</span> (status == GSL_SUCCESS && cpl_errorstate_is_equal(prestate)) {
-<a name="l00431"></a>00431         <span class="keywordflow">if</span> (data.mxc > -minimizer->fval) {
-<a name="l00432"></a>00432             *pxc = data.mxc;
-<a name="l00433"></a>00433             cpl_msg_warning(cpl_func, <span class="stringliteral">"Local maximum: %g(%d) > %g"</span>,
-<a name="l00434"></a>00434                             data.mxc, data.ishift, -minimizer->fval);
-<a name="l00435"></a>00435             cpl_polynomial_shift_1d(data.mdisp, 0, (<span class="keywordtype">double</span>)data.ishift);
-<a name="l00436"></a>00436             cpl_polynomial_copy(<span class="keyword">self</span>, data.mdisp);
-<a name="l00437"></a>00437             *prestart = CPL_TRUE;
-<a name="l00438"></a>00438         } <span class="keywordflow">else</span> {
-<a name="l00439"></a>00439             *pxc = -minimizer->fval;
-<a name="l00440"></a>00440             <span class="keywordflow">for</span> (i=0; i < nfit; i++) {
-<a name="l00441"></a>00441                 <span class="keyword">const</span> <span class="keywordtype">double</span> value = gsl_vector_get(minimizer->x, i);
-<a name="l00442"></a>00442                 cpl_polynomial_set_coeff(<span class="keyword">self</span>, &i, value);
-<a name="l00443"></a>00443             }
-<a name="l00444"></a>00444         }
-<a name="l00445"></a>00445     }
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447     cpl_vector_delete(data.spectrum);
-<a name="l00448"></a>00448     cpl_vector_delete(data.vxc);
-<a name="l00449"></a>00449     cpl_polynomial_delete(data.mdisp);
-<a name="l00450"></a>00450     gsl_multimin_fminimizer_free(minimizer);
-<a name="l00451"></a>00451     gsl_vector_free(dispgsl);
-<a name="l00452"></a>00452     gsl_vector_free(dispprev);
-<a name="l00453"></a>00453     gsl_vector_free(stepsize);
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455     cpl_ensure_code(status != GSL_CONTINUE, CPL_ERROR_CONTINUE);
-<a name="l00456"></a>00456     cpl_ensure_code(status == GSL_SUCCESS, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00457"></a>00457     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00460"></a>00460 <span class="preprocessor">#endif</span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span>}
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00492"></a>00492 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00493"></a>00493 cpl_error_code
-<a name="l00494"></a><a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a">00494</a> <a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a>(cpl_vector * <span class="keyword">self</span>,
-<a name="l00495"></a>00495                                  <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l00496"></a>00496                                  irplib_base_spectrum_model * lsslamp)
-<a name="l00497"></a>00497 {
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499     irplib_line_spectrum_model * arclamp
-<a name="l00500"></a>00500         = (irplib_line_spectrum_model *)lsslamp;
-<a name="l00501"></a>00501     cpl_error_code error;
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505     arclamp->cost++;
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,
-<a name="l00508"></a>00508                                                    arclamp->linepix,
-<a name="l00509"></a>00509                                                    arclamp->erftmp,
-<a name="l00510"></a>00510                                                    disp,
-<a name="l00511"></a>00511                                                    arclamp->lines,
-<a name="l00512"></a>00512                                                    arclamp->wslit,
-<a name="l00513"></a>00513                                                    arclamp->wfwhm,
-<a name="l00514"></a>00514                                                    arclamp->xtrunc,
-<a name="l00515"></a>00515                                                    0, CPL_FALSE, CPL_FALSE,
-<a name="l00516"></a>00516                                                    &(arclamp->ulines));
-<a name="l00517"></a>00517     cpl_ensure_code(!error, error);
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519     arclamp->xcost++;
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00522"></a>00522 }
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00537"></a>00537 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00538"></a>00538 cpl_error_code
-<a name="l00539"></a><a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f">00539</a> <a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum</a>(cpl_vector * <span class="keyword">self</span>,
-<a name="l00540"></a>00540                                     <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l00541"></a>00541                                     irplib_base_spectrum_model * lsslamp)
-<a name="l00542"></a>00542 {
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544     irplib_line_spectrum_model * arclamp
-<a name="l00545"></a>00545         = (irplib_line_spectrum_model *)lsslamp;
-<a name="l00546"></a>00546     cpl_error_code error;
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550     arclamp->cost++;
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,
-<a name="l00553"></a>00553                                                    arclamp->linepix,
-<a name="l00554"></a>00554                                                    arclamp->erftmp,
-<a name="l00555"></a>00555                                                    disp,
-<a name="l00556"></a>00556                                                    arclamp->lines,
-<a name="l00557"></a>00557                                                    arclamp->wslit,
-<a name="l00558"></a>00558                                                    arclamp->wfwhm,
-<a name="l00559"></a>00559                                                    arclamp->xtrunc,
-<a name="l00560"></a>00560                                                    0, CPL_FALSE, CPL_TRUE,
-<a name="l00561"></a>00561                                                    &(arclamp->ulines));
-<a name="l00562"></a>00562     cpl_ensure_code(!error, error);
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564     arclamp->xcost++;
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00567"></a>00567 }
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00583"></a>00583 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00584"></a>00584 cpl_error_code
-<a name="l00585"></a><a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95">00585</a> <a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast</a>(cpl_vector * <span class="keyword">self</span>,
-<a name="l00586"></a>00586                                       <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l00587"></a>00587                                       irplib_base_spectrum_model * lsslamp)
-<a name="l00588"></a>00588 {
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590     irplib_line_spectrum_model * arclamp
-<a name="l00591"></a>00591         = (irplib_line_spectrum_model *)lsslamp;
-<a name="l00592"></a>00592     cpl_error_code error;
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596     arclamp->cost++;
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,
-<a name="l00599"></a>00599                                                    arclamp->linepix,
-<a name="l00600"></a>00600                                                    arclamp->erftmp,
-<a name="l00601"></a>00601                                                    disp,
-<a name="l00602"></a>00602                                                    arclamp->lines,
-<a name="l00603"></a>00603                                                    arclamp->wslit,
-<a name="l00604"></a>00604                                                    arclamp->wfwhm,
-<a name="l00605"></a>00605                                                    arclamp->xtrunc,
-<a name="l00606"></a>00606                                                    0, CPL_TRUE, CPL_FALSE,
-<a name="l00607"></a>00607                                                    &(arclamp->ulines));
-<a name="l00608"></a>00608     cpl_ensure_code(!error, error);
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     arclamp->xcost++;
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00613"></a>00613 }
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00628"></a>00628 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00629"></a>00629 cpl_error_code
-<a name="l00630"></a><a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c">00630</a> <a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum_fast</a>(cpl_vector * <span class="keyword">self</span>,
-<a name="l00631"></a>00631                                          <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l00632"></a>00632                                          irplib_base_spectrum_model * lsslamp)
-<a name="l00633"></a>00633 {
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635     irplib_line_spectrum_model * arclamp
-<a name="l00636"></a>00636         = (irplib_line_spectrum_model *)lsslamp;
-<a name="l00637"></a>00637     cpl_error_code error;
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641     arclamp->cost++;
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,
-<a name="l00644"></a>00644                                                    arclamp->linepix,
-<a name="l00645"></a>00645                                                    arclamp->erftmp,
-<a name="l00646"></a>00646                                                    disp,
-<a name="l00647"></a>00647                                                    arclamp->lines,
-<a name="l00648"></a>00648                                                    arclamp->wslit,
-<a name="l00649"></a>00649                                                    arclamp->wfwhm,
-<a name="l00650"></a>00650                                                    arclamp->xtrunc,
-<a name="l00651"></a>00651                                                    0, CPL_TRUE, CPL_TRUE,
-<a name="l00652"></a>00652                                                    &(arclamp->ulines));
-<a name="l00653"></a>00653     cpl_ensure_code(!error, error);
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655     arclamp->xcost++;
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00658"></a>00658 }
-<a name="l00659"></a>00659 
-<a name="l00660"></a>00660 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00671"></a>00671 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00672"></a><a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d">00672</a> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(<span class="keyword">const</span> cpl_vector * <span class="keyword">self</span>,
-<a name="l00673"></a>00673                                               <span class="keyword">const</span> cpl_polynomial * disp1d,
-<a name="l00674"></a>00674                                               irplib_base_spectrum_model * model,
-<a name="l00675"></a>00675                                               cpl_error_code (* filler)
-<a name="l00676"></a>00676                                               (cpl_vector *,
-<a name="l00677"></a>00677                                                <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00678"></a>00678                                                irplib_base_spectrum_model *))
-<a name="l00679"></a>00679 {
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681     cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00682"></a>00682     cpl_vector * wl;
-<a name="l00683"></a>00683     cpl_vector * spectrum;
-<a name="l00684"></a>00684     cpl_vector * vxc;
-<a name="l00685"></a>00685     <span class="keyword">const</span> <span class="keywordtype">int</span> len = cpl_vector_get_size(<span class="keyword">self</span>);
-<a name="l00686"></a>00686     <span class="keywordtype">double</span> maxval, xc;
-<a name="l00687"></a>00687     <span class="keywordtype">int</span> ixc;
-<a name="l00688"></a>00688     <span class="keywordtype">int</span> error = 0;
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00691"></a>00691     cpl_ensure_code(disp1d != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00692"></a>00692     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00693"></a>00693     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     cpl_ensure_code(cpl_polynomial_get_dimension(disp1d) == 1,
-<a name="l00696"></a>00696                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698     cpl_ensure_code(cpl_polynomial_get_degree(disp1d) > 0,
-<a name="l00699"></a>00699                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701     wl = cpl_vector_new(len);
-<a name="l00702"></a>00702     spectrum = cpl_vector_new(len);
-<a name="l00703"></a>00703     vxc = cpl_vector_new(1);
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705     error |= (int)cpl_vector_fill_polynomial(wl, disp1d, 1.0, 1.0);
-<a name="l00706"></a>00706     error |= filler(spectrum, disp1d, model);
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708     ixc = cpl_vector_correlate(vxc, <span class="keyword">self</span>, spectrum);
-<a name="l00709"></a>00709     xc = cpl_vector_get(vxc, ixc);
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711     maxval = cpl_vector_get_max(spectrum);
-<a name="l00712"></a>00712     <span class="keywordflow">if</span> (maxval != 0.0) 
-<a name="l00713"></a>00713         error |= cpl_vector_multiply_scalar(spectrum,
-<a name="l00714"></a>00714                                              cpl_vector_get_max(<span class="keyword">self</span>)/maxval);
-<a name="l00715"></a>00715     <span class="keywordflow">if</span> (!error) {
-<a name="l00716"></a>00716         <span class="keyword">const</span> cpl_vector * spair[] = {wl, <span class="keyword">self</span>, spectrum};
-<a name="l00717"></a>00717         <span class="keywordtype">char</span> * pre = cpl_sprintf(<span class="stringliteral">"set grid;set xlabel 'Wavelength (%g -> %g)'; "</span>
-<a name="l00718"></a>00718                                  <span class="stringliteral">"set ylabel 'Intensity';"</span>, cpl_vector_get(wl, 0),
-<a name="l00719"></a>00719                                  cpl_vector_get(wl, len-1));
-<a name="l00720"></a>00720         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Observed and modelled spectra (%d pixel "</span>
-<a name="l00721"></a>00721                                    <span class="stringliteral">"XC=%g) ' w linespoints"</span>, len, xc);
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723         (void)cpl_plot_vectors(pre, title, <span class="stringliteral">""</span>, spair, 3);
-<a name="l00724"></a>00724         cpl_free(pre);
-<a name="l00725"></a>00725         cpl_free(title);
-<a name="l00726"></a>00726     }
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728     cpl_vector_delete(wl);
-<a name="l00729"></a>00729     cpl_vector_delete(spectrum);
-<a name="l00730"></a>00730     cpl_vector_delete(vxc);
-<a name="l00731"></a>00731 
-<a name="l00732"></a>00732     cpl_errorstate_set(prestate);
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00735"></a>00735 }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00757"></a>00757 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00758"></a>00758 cpl_error_code
-<a name="l00759"></a><a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6">00759</a> <a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(cpl_bivector * <span class="keyword">self</span>,
-<a name="l00760"></a>00760                                             <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l00761"></a>00761                                             <span class="keyword">const</span> cpl_vector * obs,
-<a name="l00762"></a>00762                                             irplib_base_spectrum_model * model,
-<a name="l00763"></a>00763                                             cpl_error_code (*filler)
-<a name="l00764"></a>00764                                             (cpl_vector *,
-<a name="l00765"></a>00765                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00766"></a>00766                                              irplib_base_spectrum_model *),
-<a name="l00767"></a>00767                                             <span class="keywordtype">int</span> hsize,
-<a name="l00768"></a>00768                                             cpl_boolean doplot,
-<a name="l00769"></a>00769                                             <span class="keywordtype">double</span> *pxc)
-<a name="l00770"></a>00770 {
-<a name="l00771"></a>00771 
-<a name="l00772"></a>00772     <span class="keyword">const</span> <span class="keywordtype">int</span>        nobs   = cpl_vector_get_size(obs);
-<a name="l00773"></a>00773     <span class="keyword">const</span> <span class="keywordtype">int</span>        nmodel = 2 * hsize + nobs;
-<a name="l00774"></a>00774     cpl_polynomial * shdisp;
-<a name="l00775"></a>00775     cpl_vector     * xself = cpl_bivector_get_x(<span class="keyword">self</span>);
-<a name="l00776"></a>00776     cpl_vector     * yself = cpl_bivector_get_y(<span class="keyword">self</span>);
-<a name="l00777"></a>00777     cpl_vector     * mspec1d;
-<a name="l00778"></a>00778     cpl_vector     * xcorr;
-<a name="l00779"></a>00779     cpl_error_code   error = CPL_ERROR_NONE;
-<a name="l00780"></a>00780     <span class="keywordtype">double</span>           xcprev, xcnext;
-<a name="l00781"></a>00781     <span class="keywordtype">int</span>              ixc, imax = 0;
-<a name="l00782"></a>00782     <span class="keywordtype">int</span>              i;
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00785"></a>00785     cpl_ensure_code(disp   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00786"></a>00786     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00787"></a>00787     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00788"></a>00788     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00789"></a>00789     cpl_ensure_code(hsize  >  0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00790"></a>00790 
-<a name="l00791"></a>00791     shdisp = cpl_polynomial_duplicate(disp);
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793     <span class="comment">/* Shift reference by -hsize so filler can be used without offset */</span>
-<a name="l00794"></a>00794     <span class="keywordflow">if</span> (cpl_polynomial_shift_1d(shdisp, 0, -hsize)) {
-<a name="l00795"></a>00795         cpl_polynomial_delete(shdisp);
-<a name="l00796"></a>00796         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00797"></a>00797     }
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799     mspec1d = cpl_vector_new(nmodel);
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     <span class="keywordflow">if</span> (filler(mspec1d, shdisp, model)) {
-<a name="l00802"></a>00802         cpl_vector_delete(mspec1d);
-<a name="l00803"></a>00803         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00804"></a>00804     }
-<a name="l00805"></a>00805 
-<a name="l00806"></a>00806     <span class="comment">/* Should not be able to fail now */</span>
-<a name="l00807"></a>00807     xcorr = cpl_vector_new(1 + 2 * hsize);
-<a name="l00808"></a>00808     ixc = cpl_vector_correlate(xcorr, mspec1d, obs);
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810 <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span>
-<a name="l00811"></a>00811 <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span>
-<a name="l00812"></a>00812     irplib_polynomial_dump_corr_step(shdisp, xcorr, <span class="stringliteral">"Shift"</span>);
-<a name="l00813"></a>00813 <span class="preprocessor">#endif</span>
-<a name="l00814"></a>00814 <span class="preprocessor"></span>
-<a name="l00815"></a>00815     cpl_vector_delete(mspec1d);
-<a name="l00816"></a>00816     cpl_polynomial_delete(shdisp);
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818     <span class="comment">/* Find local maxima. */</span>
-<a name="l00819"></a>00819     <span class="comment">/* FIXME(?): Also include stationary points */</span>
-<a name="l00820"></a>00820     i = 0;
-<a name="l00821"></a>00821     xcprev = cpl_vector_get(xcorr, i);
-<a name="l00822"></a>00822     xcnext = cpl_vector_get(xcorr, i+1);
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824     <span class="keywordflow">if</span> (xcprev >= xcnext) {
-<a name="l00825"></a>00825         <span class="comment">/* 1st data point is an extreme */</span>
-<a name="l00826"></a>00826         <span class="comment">/* FIXME: This could also be an error, recoverable by caller by</span>
-<a name="l00827"></a>00827 <span class="comment">           increasing hsize */</span>
-<a name="l00828"></a>00828         imax++;
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830         cpl_vector_set(xself, 0, i - hsize);
-<a name="l00831"></a>00831         cpl_vector_set(yself, 0, xcprev);
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833     }
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835     <span class="keywordflow">for</span> (i = 1; i < 2 * hsize; i++) {
-<a name="l00836"></a>00836         <span class="keyword">const</span> <span class="keywordtype">double</span> xc = xcnext;
-<a name="l00837"></a>00837         xcnext = cpl_vector_get(xcorr, i+1);
-<a name="l00838"></a>00838         <span class="keywordflow">if</span> (xc >= xcprev && xc >= xcnext) {
-<a name="l00839"></a>00839             <span class="comment">/* Found (local) maximum at shift i - hsize */</span>
-<a name="l00840"></a>00840             <span class="keywordtype">int</span> j;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842             imax++;
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844             <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) < imax) {
-<a name="l00845"></a>00845                 cpl_vector_set_size(xself, imax);
-<a name="l00846"></a>00846                 cpl_vector_set_size(yself, imax);
-<a name="l00847"></a>00847             }
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849             <span class="keywordflow">for</span> (j = imax-1; j > 0; j--) {
-<a name="l00850"></a>00850                 <span class="keywordflow">if</span> (xc <= cpl_vector_get(yself, j-1)) <span class="keywordflow">break</span>;
-<a name="l00851"></a>00851                 cpl_vector_set(xself, j, cpl_vector_get(xself, j-1));
-<a name="l00852"></a>00852                 cpl_vector_set(yself, j, cpl_vector_get(yself, j-1));
-<a name="l00853"></a>00853             }
-<a name="l00854"></a>00854             cpl_vector_set(xself, j, i - hsize);
-<a name="l00855"></a>00855             cpl_vector_set(yself, j, xc);
-<a name="l00856"></a>00856         }
-<a name="l00857"></a>00857         xcprev = xc;
-<a name="l00858"></a>00858     }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860     <span class="comment">/* assert( i == 2 * hsize ); */</span>
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862     <span class="keywordflow">if</span> (xcnext >= xcprev) {
-<a name="l00863"></a>00863         <span class="comment">/* Last data point is an extreme */</span>
-<a name="l00864"></a>00864         <span class="comment">/* FIXME: This could also be an error, recoverable by caller by</span>
-<a name="l00865"></a>00865 <span class="comment">           increasing hsize */</span>
-<a name="l00866"></a>00866         <span class="keywordtype">int</span> j;
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868         imax++;
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870         <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) < imax) {
-<a name="l00871"></a>00871             cpl_vector_set_size(xself, imax);
-<a name="l00872"></a>00872             cpl_vector_set_size(yself, imax);
-<a name="l00873"></a>00873         }
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875         <span class="keywordflow">for</span> (j = imax-1; j > 0; j--) {
-<a name="l00876"></a>00876             <span class="keywordflow">if</span> (xcnext <= cpl_vector_get(yself, j-1)) <span class="keywordflow">break</span>;
-<a name="l00877"></a>00877             cpl_vector_set(xself, j, cpl_vector_get(xself, j-1));
-<a name="l00878"></a>00878             cpl_vector_set(yself, j, cpl_vector_get(yself, j-1));
-<a name="l00879"></a>00879         }
-<a name="l00880"></a>00880         cpl_vector_set(xself, j, i - hsize);
-<a name="l00881"></a>00881         cpl_vector_set(yself, j, xcnext);
-<a name="l00882"></a>00882 
-<a name="l00883"></a>00883     }
-<a name="l00884"></a>00884 
-<a name="l00885"></a>00885     <span class="keywordflow">if</span> (doplot) {
-<a name="l00886"></a>00886         <span class="comment">/* Vector of -hsize, 1-hsize, 2-hsize, ..., 0, ..., hsize */</span>
-<a name="l00887"></a>00887         cpl_vector * xvals = cpl_vector_new(1 + 2 * hsize);
-<a name="l00888"></a>00888         cpl_bivector * bcorr = cpl_bivector_wrap_vectors(xvals, xcorr);
-<a name="l00889"></a>00889         <span class="keywordtype">double</span> x = (double)-hsize;
-<a name="l00890"></a>00890         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Cross-correlation of shifted %d-pixel "</span>
-<a name="l00891"></a>00891                                    <span class="stringliteral">"spectrum (XCmax=%g at %d)' w linespoints"</span>,
-<a name="l00892"></a>00892                                    nobs, cpl_vector_get(xcorr, ixc),
-<a name="l00893"></a>00893                                    ixc - hsize);
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895         <span class="keywordflow">for</span> (i = 0; i < 1 + 2 * hsize; i++, x += 1.0) {
-<a name="l00896"></a>00896             cpl_vector_set(xvals, i, x);
-<a name="l00897"></a>00897         }
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Offset [pixel]';"</span>, title,
-<a name="l00900"></a>00900                              <span class="stringliteral">""</span>, bcorr);
-<a name="l00901"></a>00901         cpl_bivector_unwrap_vectors(bcorr);
-<a name="l00902"></a>00902         cpl_vector_delete(xvals);
-<a name="l00903"></a>00903         cpl_free(title);
-<a name="l00904"></a>00904     }
-<a name="l00905"></a>00905 
-<a name="l00906"></a>00906     <span class="keywordflow">if</span> (pxc != NULL) *pxc = cpl_vector_get(xcorr, hsize);
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908     cpl_vector_delete(xcorr);
-<a name="l00909"></a>00909 
-<a name="l00910"></a>00910     <span class="keywordflow">if</span> (imax < 1) {
-<a name="l00911"></a>00911         error = CPL_ERROR_DATA_NOT_FOUND;
-<a name="l00912"></a>00912     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) > imax) {
-<a name="l00913"></a>00913         cpl_vector_set_size(xself, imax);
-<a name="l00914"></a>00914         cpl_vector_set_size(yself, imax);
-<a name="l00915"></a>00915     }
-<a name="l00916"></a>00916 
-<a name="l00917"></a>00917     <span class="comment">/* Propagate error, if any */</span>
-<a name="l00918"></a>00918     <span class="keywordflow">return</span> cpl_error_set(cpl_func, error);
-<a name="l00919"></a>00919 }
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00934"></a>00934 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00935"></a>00935 cpl_error_code
-<a name="l00936"></a><a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56">00936</a> <a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56" title="Shift self by the amount that maximizes the cross-correlation.">irplib_polynomial_shift_1d_from_correlation</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l00937"></a>00937                                             <span class="keyword">const</span> cpl_vector * obs,
-<a name="l00938"></a>00938                                             irplib_base_spectrum_model * model,
-<a name="l00939"></a>00939                                             cpl_error_code (*filler)
-<a name="l00940"></a>00940                                             (cpl_vector *,
-<a name="l00941"></a>00941                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00942"></a>00942                                              irplib_base_spectrum_model *),
-<a name="l00943"></a>00943                                             <span class="keywordtype">int</span> hsize,
-<a name="l00944"></a>00944                                             cpl_boolean doplot,
-<a name="l00945"></a>00945                                             <span class="keywordtype">double</span> * pxc)
-<a name="l00946"></a>00946 {
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948     <span class="keyword">const</span> <span class="keywordtype">int</span>      nobs   = cpl_vector_get_size(obs);
-<a name="l00949"></a>00949     <span class="keyword">const</span> <span class="keywordtype">int</span>      nmodel = 2 * hsize + nobs;
-<a name="l00950"></a>00950     cpl_vector   * mspec1d;
-<a name="l00951"></a>00951     cpl_vector   * xcorr;
-<a name="l00952"></a>00952     cpl_error_code error;
-<a name="l00953"></a>00953     <span class="keywordtype">int</span>            ixc, xxc;
-<a name="l00954"></a>00954     <span class="keywordtype">double</span>         xc;
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00957"></a>00957     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00958"></a>00958     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00959"></a>00959     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00960"></a>00960     cpl_ensure_code(hsize  >  0,    CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962     <span class="comment">/* Shift reference by -hsize so filler can be used without offset */</span>
-<a name="l00963"></a>00963     cpl_ensure_code(!cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, -hsize),
-<a name="l00964"></a>00964                     cpl_error_get_code());
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     mspec1d = cpl_vector_new(nmodel);
-<a name="l00967"></a>00967 
-<a name="l00968"></a>00968     <span class="keywordflow">if</span> (filler(mspec1d, <span class="keyword">self</span>, model)) {
-<a name="l00969"></a>00969         cpl_vector_delete(mspec1d);
-<a name="l00970"></a>00970         cpl_ensure_code(0, cpl_error_get_code());
-<a name="l00971"></a>00971     }
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973     <span class="comment">/* Should not be able to fail now */</span>
-<a name="l00974"></a>00974     xcorr = cpl_vector_new(1 + 2 * hsize);
-<a name="l00975"></a>00975     ixc = cpl_vector_correlate(xcorr, mspec1d, obs);
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977 <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span>
-<a name="l00978"></a>00978 <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span>
-<a name="l00979"></a>00979     irplib_polynomial_dump_corr_step(<span class="keyword">self</span>, xcorr, <span class="stringliteral">"Shift"</span>);
-<a name="l00980"></a>00980 <span class="preprocessor">#endif</span>
-<a name="l00981"></a>00981 <span class="preprocessor"></span>
-<a name="l00982"></a>00982     cpl_vector_delete(mspec1d);
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984     error = cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, (<span class="keywordtype">double</span>)ixc);
-<a name="l00985"></a>00985 
-<a name="l00986"></a>00986     xc = cpl_vector_get(xcorr, ixc);
-<a name="l00987"></a>00987 
-<a name="l00988"></a>00988     xxc = ixc - hsize; <span class="comment">/* The effect of the two shifts */</span>
-<a name="l00989"></a>00989 
-<a name="l00990"></a>00990     cpl_msg_info(cpl_func, <span class="stringliteral">"Shifting %d pixels (%g < %g)"</span>, xxc,
-<a name="l00991"></a>00991                  cpl_vector_get(xcorr, hsize), xc);
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993     <span class="keywordflow">if</span> (doplot) {
-<a name="l00994"></a>00994         cpl_vector * xvals = cpl_vector_new(1 + 2 * hsize);
-<a name="l00995"></a>00995         cpl_bivector * bcorr = cpl_bivector_wrap_vectors(xvals, xcorr);
-<a name="l00996"></a>00996         <span class="keywordtype">int</span> i;
-<a name="l00997"></a>00997         <span class="keywordtype">double</span> x = (double)-hsize;
-<a name="l00998"></a>00998         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Cross-correlation of shifted %d-pixel "</span>
-<a name="l00999"></a>00999                                    <span class="stringliteral">"spectrum (XCmax=%g at %d)' w linespoints"</span>,
-<a name="l01000"></a>01000                                    nobs, cpl_vector_get(xcorr, ixc), xxc);
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002         <span class="keywordflow">for</span> (i = 0; i < 1 + 2 * hsize; i++, x += 1.0) {
-<a name="l01003"></a>01003             cpl_vector_set(xvals, i, x);
-<a name="l01004"></a>01004         }
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Offset [pixel]';"</span>, title,
-<a name="l01007"></a>01007                              <span class="stringliteral">""</span>, bcorr);
-<a name="l01008"></a>01008         cpl_bivector_unwrap_vectors(bcorr);
-<a name="l01009"></a>01009         cpl_vector_delete(xvals);
-<a name="l01010"></a>01010         cpl_free(title);
-<a name="l01011"></a>01011     }
-<a name="l01012"></a>01012 
-<a name="l01013"></a>01013     cpl_vector_delete(xcorr);
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015     cpl_ensure_code(!error, error);
-<a name="l01016"></a>01016 
-<a name="l01017"></a>01017     <span class="keywordflow">if</span> (pxc != NULL) *pxc = xc;
-<a name="l01018"></a>01018 
-<a name="l01019"></a>01019     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021 }
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01044"></a>01044 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01045"></a>01045 cpl_error_code
-<a name="l01046"></a><a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761">01046</a> <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(cpl_vector * <span class="keyword">self</span>,
-<a name="l01047"></a>01047                                        cpl_vector * linepix,
-<a name="l01048"></a>01048                                        cpl_vector * erftmp,
-<a name="l01049"></a>01049                                        <span class="keyword">const</span> cpl_polynomial * disp,
-<a name="l01050"></a>01050                                        <span class="keyword">const</span> cpl_bivector * lines,
-<a name="l01051"></a>01051                                        <span class="keywordtype">double</span> wslit,
-<a name="l01052"></a>01052                                        <span class="keywordtype">double</span> wfwhm,
-<a name="l01053"></a>01053                                        <span class="keywordtype">double</span> xtrunc,
-<a name="l01054"></a>01054                                        <span class="keywordtype">int</span> hsize,
-<a name="l01055"></a>01055                                        cpl_boolean dofast,
-<a name="l01056"></a>01056                                        cpl_boolean dolog,
-<a name="l01057"></a>01057                                        cpl_size * pulines)
-<a name="l01058"></a>01058 {
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060     cpl_errorstate     prestate;
-<a name="l01061"></a>01061     <span class="keyword">const</span> <span class="keywordtype">double</span>       sigma = wfwhm * CPL_MATH_SIG_FWHM;
-<a name="l01062"></a>01062     <span class="keyword">const</span> cpl_vector * xlines  = cpl_bivector_get_x_const(lines);
-<a name="l01063"></a>01063     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dxlines = cpl_vector_get_data_const(xlines);
-<a name="l01064"></a>01064     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dylines = cpl_bivector_get_y_data_const(lines);
-<a name="l01065"></a>01065     <span class="keywordtype">double</span>           * plinepix
-<a name="l01066"></a>01066         = linepix ? cpl_vector_get_data(linepix) : NULL;
-<a name="l01067"></a>01067     <span class="keyword">const</span> <span class="keywordtype">int</span>          nlines  = cpl_vector_get_size(xlines);
-<a name="l01068"></a>01068     <span class="keyword">const</span> <span class="keywordtype">int</span>          nself   = cpl_vector_get_size(<span class="keyword">self</span>);
-<a name="l01069"></a>01069     <span class="keywordtype">double</span>           * dself   = cpl_vector_get_data(<span class="keyword">self</span>);
-<a name="l01070"></a>01070     cpl_polynomial   * dispi;
-<a name="l01071"></a>01071     <span class="keywordtype">double</span>           * profile = NULL;
-<a name="l01072"></a>01072     <span class="keyword">const</span> cpl_size     i0 = 0;
-<a name="l01073"></a>01073     <span class="keyword">const</span> <span class="keywordtype">double</span>       p0 = cpl_polynomial_get_coeff(disp, &i0);
-<a name="l01074"></a>01074     <span class="keywordtype">double</span>             wl;
-<a name="l01075"></a>01075     <span class="keywordtype">double</span>             xpos = (double)(1-hsize)-xtrunc;
-<a name="l01076"></a>01076     <span class="keyword">const</span> <span class="keywordtype">double</span>       xmax = (double)(nself-hsize)+xtrunc;
-<a name="l01077"></a>01077     <span class="keywordtype">double</span>             xderiv, xextreme;
-<a name="l01078"></a>01078     cpl_error_code     error = CPL_ERROR_NONE;
-<a name="l01079"></a>01079     <span class="keywordtype">int</span>                iline;
-<a name="l01080"></a>01080     cpl_size           ulines = 0;
-<a name="l01081"></a>01081 
-<a name="l01082"></a>01082     cpl_ensure_code(<span class="keyword">self</span>    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01083"></a>01083     cpl_ensure_code(disp    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01084"></a>01084     cpl_ensure_code(lines   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086     cpl_ensure_code(wslit  >  0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01087"></a>01087     cpl_ensure_code(wfwhm  >  0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01088"></a>01088     cpl_ensure_code(hsize  >= 0,   CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01089"></a>01089     cpl_ensure_code(xtrunc >  0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01090"></a>01090     cpl_ensure_code(nself  > 2 * hsize, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092     cpl_ensure_code(cpl_polynomial_get_dimension(disp) == 1,
-<a name="l01093"></a>01093                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01094"></a>01094     cpl_ensure_code(cpl_polynomial_get_degree(disp) > 0,
-<a name="l01095"></a>01095                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097     <span class="comment">/* The smallest wavelength contributing to the spectrum. */</span>
-<a name="l01098"></a>01098     wl = cpl_polynomial_eval_1d(disp, xpos, &xderiv);
-<a name="l01099"></a>01099 
-<a name="l01100"></a>01100     <span class="keywordflow">if</span> (wl <= 0.0) <span class="keywordflow">return</span>
-<a name="l01101"></a>01101         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT, __FILE__,
-<a name="l01102"></a>01102                                     __LINE__, <span class="stringliteral">"Non-positive wavelength at x=%g: "</span>
-<a name="l01103"></a>01103                                     <span class="stringliteral">"P(x)=%g, P'(x)=%g"</span>, xpos, wl, xderiv);
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105     <span class="keywordflow">if</span> (xderiv <= 0.0) <span class="keywordflow">return</span>
-<a name="l01106"></a>01106         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT, __FILE__,
-<a name="l01107"></a>01107                                     __LINE__, <span class="stringliteral">"Non-increasing dispersion at "</span>
-<a name="l01108"></a>01108                                     <span class="stringliteral">"x=%g: P'(x)=%g, P(x)=%g"</span>, xpos, xderiv, wl);
-<a name="l01109"></a>01109 
-<a name="l01110"></a>01110     <span class="comment">/* Find the 1st line */</span>
-<a name="l01111"></a>01111     iline = cpl_vector_find(xlines, wl);
-<a name="l01112"></a>01112 
-<a name="l01113"></a>01113     <span class="comment">/* The first line must be at least at wl */</span>
-<a name="l01114"></a>01114     <span class="keywordflow">if</span> (dxlines[iline] < wl) iline++;
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116     <span class="keywordflow">if</span> (iline >= nlines) <span class="keywordflow">return</span>
-<a name="l01117"></a>01117         cpl_error_set_message_macro(cpl_func, CPL_ERROR_DATA_NOT_FOUND, __FILE__,
-<a name="l01118"></a>01118                                     __LINE__, <span class="stringliteral">"The %d-line catalogue has only "</span>
-<a name="l01119"></a>01119                                     <span class="stringliteral">"lines below P(%g)=%g > %g"</span>, nlines, xpos,
-<a name="l01120"></a>01120                                     wl, dxlines[nlines-1]);
-<a name="l01121"></a>01121 
-<a name="l01122"></a>01122     memset(dself, 0, nself * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01123"></a>01123 
-<a name="l01124"></a>01124     dispi = cpl_polynomial_duplicate(disp);
-<a name="l01125"></a>01125 
-<a name="l01126"></a>01126     <span class="comment">/* Verify monotony of dispersion */</span>
-<a name="l01127"></a>01127     cpl_polynomial_derivative(dispi, 0);
-<a name="l01128"></a>01128 
-<a name="l01129"></a>01129     prestate = cpl_errorstate_get();
-<a name="l01130"></a>01130 
-<a name="l01131"></a>01131     <span class="keywordflow">if</span> (cpl_polynomial_solve_1d(dispi, 0.5*(nlines+1), &xextreme, 1)) {
-<a name="l01132"></a>01132         cpl_errorstate_set(prestate);
-<a name="l01133"></a>01133     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xpos < xextreme && xextreme < xmax) {
-<a name="l01134"></a>01134         cpl_polynomial_delete(dispi);
-<a name="l01135"></a>01135         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l01136"></a>01136                                            __FILE__, __LINE__, <span class="stringliteral">"Non-monotone "</span>
-<a name="l01137"></a>01137                                            <span class="stringliteral">"dispersion at x=%g: P'(x)=0, "</span>
-<a name="l01138"></a>01138                                            <span class="stringliteral">"P(x)=%g"</span>, xextreme,
-<a name="l01139"></a>01139                                            cpl_polynomial_eval_1d(disp, xextreme,
-<a name="l01140"></a>01140                                                                   NULL));
-<a name="l01141"></a>01141     }
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143     <span class="keywordflow">if</span> (dofast) {
-<a name="l01144"></a>01144         <span class="keyword">const</span> <span class="keywordtype">int</span> npix = 1+(int)xtrunc;
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146         <span class="keywordflow">if</span> (erftmp != NULL && cpl_vector_get_size(erftmp) == npix &&
-<a name="l01147"></a>01147             cpl_vector_get(erftmp, 0) > 0.0) {
-<a name="l01148"></a>01148             profile = cpl_vector_get_data(erftmp);
-<a name="l01149"></a>01149         } <span class="keywordflow">else</span> {
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151             <span class="keyword">const</span> <span class="keywordtype">double</span> yval =  0.5 / wslit;
-<a name="l01152"></a>01152             <span class="keyword">const</span> <span class="keywordtype">double</span> x0p  =  0.5 * wslit + 0.5;
-<a name="l01153"></a>01153             <span class="keyword">const</span> <span class="keywordtype">double</span> x0n  = -0.5 * wslit + 0.5;
-<a name="l01154"></a>01154             <span class="keywordtype">double</span>       x1diff
-<a name="l01155"></a>01155                 = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma)
-<a name="l01156"></a>01156                 - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma);
-<a name="l01157"></a>01157             <span class="keywordtype">int</span>          ipix;
-<a name="l01158"></a>01158 
-<a name="l01159"></a>01159             <span class="keywordflow">if</span> (erftmp == NULL) {
-<a name="l01160"></a>01160                 profile = (<span class="keywordtype">double</span>*)cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*(size_t)npix);
-<a name="l01161"></a>01161             } <span class="keywordflow">else</span> {
-<a name="l01162"></a>01162                 cpl_vector_set_size(erftmp, npix);
-<a name="l01163"></a>01163                 profile = cpl_vector_get_data(erftmp);
-<a name="l01164"></a>01164             }
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166             profile[0] = 2.0 * yval * x1diff;
-<a name="l01167"></a>01167 
-<a name="l01168"></a>01168             <span class="keywordflow">for</span> (ipix = 1; ipix < npix; ipix++) {
-<a name="l01169"></a>01169                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = (double)ipix;
-<a name="l01170"></a>01170                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = x1 + 0.5 * wslit + 0.5;
-<a name="l01171"></a>01171                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = x1 - 0.5 * wslit + 0.5;
-<a name="l01172"></a>01172                 <span class="keyword">const</span> <span class="keywordtype">double</span> x0diff = x1diff;
-<a name="l01173"></a>01173 
-<a name="l01174"></a>01174                 x1diff = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma)
-<a name="l01175"></a>01175                     - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma);
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177                 profile[ipix] = yval * (x1diff - x0diff);
-<a name="l01178"></a>01178 
-<a name="l01179"></a>01179             }
-<a name="l01180"></a>01180         }
-<a name="l01181"></a>01181     }
-<a name="l01182"></a>01182 
-<a name="l01183"></a>01183     cpl_polynomial_copy(dispi, disp);
-<a name="l01184"></a>01184 
-<a name="l01185"></a>01185     <span class="comment">/* FIXME: A custom version of cpl_polynomial_solve_1d() which returns</span>
-<a name="l01186"></a>01186 <span class="comment">       P'(xpos) can be used for the 1st NR-iteration. */</span>
-<a name="l01187"></a>01187     <span class="comment">/* Further, the sign of P'(xpos) could be checked for all lines. */</span>
-<a name="l01188"></a>01188     <span class="comment">/* Perform 1st NR-iteration in solving for P(xpos) = dxlines[iline] */</span>
-<a name="l01189"></a>01189     xpos -= (wl - dxlines[iline]) / xderiv;
-<a name="l01190"></a>01190 
-<a name="l01191"></a>01191     <span class="comment">/* Iterate through the lines */</span>
-<a name="l01192"></a>01192     <span class="keywordflow">for</span> (; !error && iline < nlines; iline++) {
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194         <span class="comment">/* Lines may have a non-physical intensity (e.g. zero) to indicate some</span>
-<a name="l01195"></a>01195 <span class="comment">           property of the line, e.g. unknown intensity due to blending */</span>
-<a name="l01196"></a>01196         <span class="keywordflow">if</span> (dylines[iline] <= 0.0) <span class="keywordflow">continue</span>;
-<a name="l01197"></a>01197 
-<a name="l01198"></a>01198         <span class="comment">/* Use 1st guess, if available (Use 0.0 to flag unavailable) */</span>
-<a name="l01199"></a>01199         <span class="keywordflow">if</span> (plinepix != NULL && plinepix[iline] > 0.0) xpos = plinepix[iline];
-<a name="l01200"></a>01200 
-<a name="l01201"></a>01201         <span class="keywordflow">if</span> (xpos > xmax) xpos = xmax; <span class="comment">/* FIXME: Better to limit xpos ? */</span>
-<a name="l01202"></a>01202 
-<a name="l01203"></a>01203         <span class="comment">/* Find the (sub-) pixel position of the line */</span>
-<a name="l01204"></a>01204         error = cpl_polynomial_set_coeff(dispi, &i0, p0 - dxlines[iline]) ||
-<a name="l01205"></a>01205             cpl_polynomial_solve_1d(dispi, xpos, &xpos, 1);
-<a name="l01206"></a>01206 
-<a name="l01207"></a>01207         <span class="keywordflow">if</span> (xpos > xmax) {
-<a name="l01208"></a>01208             <span class="keywordflow">if</span> (error) {
-<a name="l01209"></a>01209                 error = 0;
-<a name="l01210"></a>01210                 cpl_msg_debug(cpl_func, <span class="stringliteral">"Stopping spectrum fill at line %d/%d "</span>
-<a name="l01211"></a>01211                              <span class="stringliteral">"at xpos=%g > xmax=%g"</span>,
-<a name="l01212"></a>01212                              iline, nlines, xpos, xmax);
-<a name="l01213"></a>01213                 cpl_errorstate_dump(prestate, CPL_FALSE,
-<a name="l01214"></a>01214                                     <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);
-<a name="l01215"></a>01215                 cpl_errorstate_set(prestate);
-<a name="l01216"></a>01216             }
-<a name="l01217"></a>01217             <span class="keywordflow">break</span>;
-<a name="l01218"></a>01218         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error) {
-<a name="l01219"></a>01219             <span class="keywordflow">if</span> (linepix != NULL && ulines) (void)cpl_vector_fill(linepix, 0.0);
-<a name="l01220"></a>01220             (void)cpl_error_set_message_macro(cpl_func, cpl_error_get_code(),
-<a name="l01221"></a>01221                                               __FILE__, __LINE__,
-<a name="l01222"></a>01222                                               <span class="stringliteral">"Could not find pixel-position "</span>
-<a name="l01223"></a>01223                                               <span class="stringliteral">"of line %d/%d at wavelength=%g."</span>
-<a name="l01224"></a>01224                                               <span class="stringliteral">" xpos=%g, xmax=%g"</span>,
-<a name="l01225"></a>01225                                               iline, nlines, dxlines[iline],
-<a name="l01226"></a>01226                                               xpos, xmax);
-<a name="l01227"></a>01227             <span class="keywordflow">break</span>;
-<a name="l01228"></a>01228         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dofast) {
-<a name="l01229"></a>01229             <span class="keyword">const</span> <span class="keywordtype">double</span> frac  = fabs(xpos - floor(xpos));
-<a name="l01230"></a>01230 <span class="preprocessor">#ifdef IRPLIB_WAVECAL_FAST_FAST</span>
-<a name="l01231"></a>01231 <span class="preprocessor"></span>            <span class="keyword">const</span> <span class="keywordtype">double</span> frac0 = 1.0 - frac; <span class="comment">/* Weight opposite of distance */</span>
-<a name="l01232"></a>01232 <span class="preprocessor">#else</span>
-<a name="l01233"></a>01233 <span class="preprocessor"></span>            <span class="comment">/* Center intensity correctly */</span>
-<a name="l01234"></a>01234             <span class="keyword">const</span> <span class="keywordtype">double</span> ep1pw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac + 0.5 * wslit, sigma);
-<a name="l01235"></a>01235             <span class="keyword">const</span> <span class="keywordtype">double</span> en1pw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac + 0.5 * wslit - 1.0,
-<a name="l01236"></a>01236                                                       sigma);
-<a name="l01237"></a>01237             <span class="keyword">const</span> <span class="keywordtype">double</span> ep1nw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac - 0.5 * wslit, sigma);
-<a name="l01238"></a>01238             <span class="keyword">const</span> <span class="keywordtype">double</span> en1nw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac - 0.5 * wslit - 1.0,
-<a name="l01239"></a>01239                                                       sigma);
-<a name="l01240"></a>01240             <span class="keyword">const</span> <span class="keywordtype">double</span> frac0
-<a name="l01241"></a>01241                 = (en1nw - en1pw) / (ep1pw - en1pw - ep1nw + en1nw);
-<a name="l01242"></a>01242 
-<a name="l01243"></a>01243 <span class="preprocessor">#endif</span>
-<a name="l01244"></a>01244 <span class="preprocessor"></span>            <span class="keyword">const</span> <span class="keywordtype">double</span> frac1 = 1.0 - frac0;
-<a name="l01245"></a>01245             <span class="keyword">const</span> <span class="keywordtype">double</span> yval0 = frac0 * dylines[iline];
-<a name="l01246"></a>01246             <span class="keyword">const</span> <span class="keywordtype">double</span> yval1 = frac1 * dylines[iline];
-<a name="l01247"></a>01247             <span class="keyword">const</span> <span class="keywordtype">int</span>    npix  = 1+(int)xtrunc;
-<a name="l01248"></a>01248             <span class="keywordtype">int</span>          ipix;
-<a name="l01249"></a>01249             <span class="keywordtype">int</span>          i0n    = hsize - 1 + floor(xpos);
-<a name="l01250"></a>01250             <span class="keywordtype">int</span>          i0p    = i0n;
-<a name="l01251"></a>01251             <span class="keywordtype">int</span>          i1n    = i0n + 1;
-<a name="l01252"></a>01252             <span class="keywordtype">int</span>          i1p    = i1n;
-<a name="l01253"></a>01253             cpl_boolean  didline = CPL_FALSE;
-<a name="l01254"></a>01254 
-<a name="l01255"></a>01255 
-<a name="l01256"></a>01256             <span class="comment">/* Update 1st guess for next time, if available */</span>
-<a name="l01257"></a>01257             <span class="keywordflow">if</span> (plinepix != NULL) plinepix[iline] =  xpos;
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259             <span class="keywordflow">if</span> (frac0 < 0.0) {
-<a name="l01260"></a>01260                 (void)cpl_error_set_message_macro(cpl_func,
-<a name="l01261"></a>01261                                                   CPL_ERROR_UNSPECIFIED,
-<a name="l01262"></a>01262                                                   __FILE__, __LINE__,
-<a name="l01263"></a>01263                                                   <span class="stringliteral">"Illegal split at x=%g: %g + "</span>
-<a name="l01264"></a>01264                                                   <span class="stringliteral">"%g = 1"</span>, xpos, frac0, frac1);
-<a name="l01265"></a>01265 <span class="preprocessor">#ifdef IRPLIB_WAVEVAL_DEBUG</span>
-<a name="l01266"></a>01266 <span class="preprocessor"></span>            } <span class="keywordflow">else</span> {
-<a name="l01267"></a>01267                 cpl_msg_warning(cpl_func,<span class="stringliteral">"profile split at x=%g: %g + %g = 1"</span>,
-<a name="l01268"></a>01268                                 xpos, frac0, frac1);
-<a name="l01269"></a>01269 <span class="preprocessor">#endif</span>
-<a name="l01270"></a>01270 <span class="preprocessor"></span>            }
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272             <span class="keywordflow">for</span> (ipix = 0; ipix < npix; ipix++, i0n--, i0p++, i1n--, i1p++) {
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274                 <span class="keywordflow">if</span> (i0n >= 0 && i0n < nself) {
-<a name="l01275"></a>01275                     dself[i0n] += yval0 * profile[ipix];
-<a name="l01276"></a>01276                     didline = CPL_TRUE;
-<a name="l01277"></a>01277                 }
-<a name="l01278"></a>01278                 <span class="keywordflow">if</span> (i1n >= 0 && i1n < nself && ipix + 1 < npix) {
-<a name="l01279"></a>01279                     dself[i1n] += yval1 * profile[ipix+1];
-<a name="l01280"></a>01280                     didline = CPL_TRUE;
-<a name="l01281"></a>01281                 }
-<a name="l01282"></a>01282 
-<a name="l01283"></a>01283                 <span class="keywordflow">if</span> (ipix == 0) <span class="keywordflow">continue</span>;
-<a name="l01284"></a>01284 
-<a name="l01285"></a>01285                 <span class="keywordflow">if</span> (i0p >= 0 && i0p < nself) {
-<a name="l01286"></a>01286                     dself[i0p] += yval0 * profile[ipix];
-<a name="l01287"></a>01287                     didline = CPL_TRUE;
-<a name="l01288"></a>01288                 }
-<a name="l01289"></a>01289                 <span class="keywordflow">if</span> (i1p >= 0 && i1p < nself && ipix + 1 < npix) {
-<a name="l01290"></a>01290                     dself[i1p] += yval1 * profile[ipix+1];
-<a name="l01291"></a>01291                     didline = CPL_TRUE;
-<a name="l01292"></a>01292                 }
-<a name="l01293"></a>01293             }
-<a name="l01294"></a>01294 
-<a name="l01295"></a>01295             <span class="keywordflow">if</span> (didline) ulines++;
-<a name="l01296"></a>01296 
-<a name="l01297"></a>01297         } <span class="keywordflow">else</span> {
-<a name="l01298"></a>01298             <span class="keyword">const</span> <span class="keywordtype">double</span> yval = 0.5 * dylines[iline] / wslit;
-<a name="l01299"></a>01299             <span class="keyword">const</span> <span class="keywordtype">int</span>    ifirst = IRPLIB_MAX((<span class="keywordtype">int</span>)(xpos-xtrunc+0.5), 1-hsize);
-<a name="l01300"></a>01300             <span class="keyword">const</span> <span class="keywordtype">int</span>    ilast  = IRPLIB_MIN((<span class="keywordtype">int</span>)(xpos+xtrunc), nself-hsize);
-<a name="l01301"></a>01301             <span class="keywordtype">int</span>          ipix;
-<a name="l01302"></a>01302             <span class="keyword">const</span> <span class="keywordtype">double</span> x0 = (double)ifirst - xpos;
-<a name="l01303"></a>01303             <span class="keyword">const</span> <span class="keywordtype">double</span> x0p = x0 + 0.5*wslit - 0.5;
-<a name="l01304"></a>01304             <span class="keyword">const</span> <span class="keywordtype">double</span> x0n = x0 - 0.5*wslit - 0.5;
-<a name="l01305"></a>01305             <span class="keywordtype">double</span>       x1diff
-<a name="l01306"></a>01306                 = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma)
-<a name="l01307"></a>01307                 - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma);
-<a name="l01308"></a>01308 
-<a name="l01309"></a>01309             <span class="comment">/* Update 1st guess for next time, if available */</span>
-<a name="l01310"></a>01310             <span class="keywordflow">if</span> (plinepix != NULL) plinepix[iline] =  xpos;
-<a name="l01311"></a>01311 
-<a name="l01312"></a>01312             <span class="keywordflow">if</span> (ilast >= ifirst) ulines++;
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314             <span class="keywordflow">for</span> (ipix = ifirst; ipix <= ilast; ipix++) {
-<a name="l01315"></a>01315                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = (double)ipix - xpos;
-<a name="l01316"></a>01316                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = x1 + 0.5*wslit + 0.5;
-<a name="l01317"></a>01317                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = x1 - 0.5*wslit + 0.5;
-<a name="l01318"></a>01318                 <span class="keyword">const</span> <span class="keywordtype">double</span> x0diff = x1diff;
-<a name="l01319"></a>01319 
-<a name="l01320"></a>01320                 x1diff = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma)
-<a name="l01321"></a>01321                     - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma);
-<a name="l01322"></a>01322 
-<a name="l01323"></a>01323                 dself[ipix+hsize-1] += yval * (x1diff - x0diff);
-<a name="l01324"></a>01324 
-<a name="l01325"></a>01325             }
-<a name="l01326"></a>01326         }
-<a name="l01327"></a>01327     }
-<a name="l01328"></a>01328 
-<a name="l01329"></a>01329     cpl_polynomial_delete(dispi);
-<a name="l01330"></a>01330     <span class="keywordflow">if</span> (erftmp == NULL) cpl_free(profile);
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332     cpl_ensure_code(!error, cpl_error_get_code());
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334     <span class="keywordflow">if</span> (dolog) {
-<a name="l01335"></a>01335         <span class="keywordtype">int</span> i;
-<a name="l01336"></a>01336         <span class="keywordflow">for</span> (i = 0; i < nself; i++) {
-<a name="l01337"></a>01337             dself[i] = dself[i] > 0.0 ? log(1.0 + dself[i]) : 0.0;
-<a name="l01338"></a>01338         }
-<a name="l01339"></a>01339     }
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341     <span class="keywordflow">if</span> (!ulines) <span class="keywordflow">return</span>
-<a name="l01342"></a>01342         cpl_error_set_message_macro(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l01343"></a>01343                                     __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span>
-<a name="l01344"></a>01344                                     <span class="stringliteral">"catalogue has no lines in the range "</span>
-<a name="l01345"></a>01345                                     <span class="stringliteral">"%g -> P(%g)=%g"</span>, nlines, wl, xmax,
-<a name="l01346"></a>01346                                     cpl_polynomial_eval_1d(disp, xmax, NULL));
-<a name="l01347"></a>01347 
-<a name="l01348"></a>01348     <span class="keywordflow">if</span> (pulines != NULL) *pulines = ulines;
-<a name="l01349"></a>01349 
-<a name="l01350"></a>01350     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01351"></a>01351 }
-<a name="l01352"></a>01352 
-<a name="l01353"></a>01353 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01362"></a>01362 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01363"></a><a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f">01363</a> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> sigma)
-<a name="l01364"></a>01364 {
-<a name="l01365"></a>01365     <span class="keywordflow">return</span> x * erf( x / (sigma * CPL_MATH_SQRT2))
-<a name="l01366"></a>01366        + 2.0 * sigma/CPL_MATH_SQRT2PI * exp(-0.5 * x * x / (sigma * sigma));
-<a name="l01367"></a>01367 }
-<a name="l01368"></a>01368 
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370 <span class="preprocessor">#ifdef HAVE_GSL</span>
-<a name="l01371"></a>01371 <span class="preprocessor"></span>
-<a name="l01372"></a>01372 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01379"></a>01379 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01380"></a>01380 <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_gsl_correlation(<span class="keyword">const</span> gsl_vector * <span class="keyword">self</span>, <span class="keywordtype">void</span> * data)
-<a name="l01381"></a>01381 {
-<a name="l01382"></a>01382 
-<a name="l01383"></a>01383     irplib_multimin * mindata = (irplib_multimin *)data;
-<a name="l01384"></a>01384     cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l01385"></a>01385     <span class="keywordtype">int</span> nobs, nmodel, ndiff;
-<a name="l01386"></a>01386     cpl_size i;
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);
-<a name="l01389"></a>01389     cpl_ensure(data != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);
-<a name="l01390"></a>01390 
-<a name="l01391"></a>01391     cpl_ensure(mindata->filler   != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);
-<a name="l01392"></a>01392     cpl_ensure(mindata->observed != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);
-<a name="l01393"></a>01393     cpl_ensure(mindata->spectrum != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);
-<a name="l01394"></a>01394 
-<a name="l01395"></a>01395     nobs   = cpl_vector_get_size(mindata->observed);
-<a name="l01396"></a>01396     nmodel = cpl_vector_get_size(mindata->spectrum);
-<a name="l01397"></a>01397     ndiff  = nmodel - nobs;
-<a name="l01398"></a>01398 
-<a name="l01399"></a>01399     cpl_ensure((ndiff & 1) == 0, CPL_ERROR_ILLEGAL_INPUT, GSL_NAN);
-<a name="l01400"></a>01400 
-<a name="l01401"></a>01401     cpl_ensure(cpl_vector_get_size(mindata->vxc) == 1 + ndiff,
-<a name="l01402"></a>01402                CPL_ERROR_ILLEGAL_INPUT, GSL_NAN);
-<a name="l01403"></a>01403 
-<a name="l01404"></a>01404     ndiff /= 2;
-<a name="l01405"></a>01405 
-<a name="l01406"></a>01406     <span class="keywordflow">for</span> (i=0; i < (cpl_size)self->size; i++) {
-<a name="l01407"></a>01407         <span class="keyword">const</span> <span class="keywordtype">double</span> value = gsl_vector_get(<span class="keyword">self</span>, (<span class="keywordtype">size_t</span>)i);
-<a name="l01408"></a>01408         cpl_polynomial_set_coeff(mindata->disp1d, &i, value);
-<a name="l01409"></a>01409     }
-<a name="l01410"></a>01410 
-<a name="l01411"></a>01411     <span class="comment">/* Shift reference by -ndiff so filler can be used without offset.</span>
-<a name="l01412"></a>01412 <span class="comment">       The subsequent polynomial shift is reduced by -ndiff. */</span>
-<a name="l01413"></a>01413     cpl_ensure_code(!cpl_polynomial_shift_1d(mindata->disp1d, 0, -ndiff),
-<a name="l01414"></a>01414                     cpl_error_get_code());
-<a name="l01415"></a>01415 
-<a name="l01416"></a>01416     <span class="keywordflow">if</span> (mindata->filler(mindata->spectrum, mindata->disp1d,
-<a name="l01417"></a>01417                         mindata->param)
-<a name="l01418"></a>01418         || !cpl_errorstate_is_equal(prestate)) {
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420         <span class="comment">/* The fill failed. Ensure the discarding of this candidate by</span>
-<a name="l01421"></a>01421 <span class="comment">           setting the cross-correlation to its minimum possible value. */</span>
-<a name="l01422"></a>01422 
-<a name="l01423"></a>01423         (void)cpl_vector_fill(mindata->vxc, -1.0);
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425         mindata->maxxc = ndiff;
-<a name="l01426"></a>01426 
-<a name="l01427"></a>01427         <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {
-<a name="l01428"></a>01428                 cpl_msg_debug(cpl_func, <span class="stringliteral">"Spectrum fill failed:"</span>);
-<a name="l01429"></a>01429                 cpl_errorstate_dump(prestate, CPL_FALSE,
-<a name="l01430"></a>01430                                     <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);
-<a name="l01431"></a>01431                 cpl_errorstate_set(prestate);
-<a name="l01432"></a>01432         }
-<a name="l01433"></a>01433     } <span class="keywordflow">else</span> {
-<a name="l01434"></a>01434 
-<a name="l01435"></a>01435         mindata->maxxc = cpl_vector_correlate(mindata->vxc,
-<a name="l01436"></a>01436                                               mindata->spectrum,
-<a name="l01437"></a>01437                                               mindata->observed);
-<a name="l01438"></a>01438     }
-<a name="l01439"></a>01439 
-<a name="l01440"></a>01440 <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span>
-<a name="l01441"></a>01441 <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span>
-<a name="l01442"></a>01442     irplib_polynomial_dump_corr_step(mindata->disp1d, mindata->vxc,
-<a name="l01443"></a>01443                                      <span class="stringliteral">"Optimize"</span>);
-<a name="l01444"></a>01444 <span class="preprocessor">#endif</span>
-<a name="l01445"></a>01445 <span class="preprocessor"></span>
-<a name="l01446"></a>01446     mindata->xc = cpl_vector_get(mindata->vxc, ndiff);
-<a name="l01447"></a>01447 
-<a name="l01448"></a>01448     <span class="keywordflow">if</span> (mindata->maxxc != ndiff &&
-<a name="l01449"></a>01449         cpl_vector_get(mindata->vxc, mindata->maxxc) > mindata->mxc) {
-<a name="l01450"></a>01450         <span class="keyword">const</span> irplib_base_spectrum_model * arclamp
-<a name="l01451"></a>01451             = (<span class="keyword">const</span> irplib_base_spectrum_model *)mindata->param;
-<a name="l01452"></a>01452 
-<a name="l01453"></a>01453         if (mindata->mdisp == NULL) {
-<a name="l01454"></a>01454             mindata->mdisp = cpl_polynomial_duplicate(mindata->disp1d);
-<a name="l01455"></a>01455         } <span class="keywordflow">else</span> {
-<a name="l01456"></a>01456             cpl_polynomial_copy(mindata->mdisp, mindata->disp1d);
-<a name="l01457"></a>01457         }
-<a name="l01458"></a>01458         mindata->mxc = cpl_vector_get(mindata->vxc, mindata->maxxc);
-<a name="l01459"></a>01459         mindata->ishift = mindata->maxxc; <span class="comment">/* Offset -ndiff pre-shifted above */</span>
-<a name="l01460"></a>01460         cpl_msg_debug(cpl_func, <span class="stringliteral">"Local maximum: %g(%d) > %g(%d) (cost=%u:%u. "</span>
-<a name="l01461"></a>01461                       <span class="stringliteral">"lines=%u)"</span>, mindata->mxc, mindata->maxxc, mindata->xc,
-<a name="l01462"></a>01462                       ndiff, (<span class="keywordtype">unsigned</span>)arclamp->cost, (<span class="keywordtype">unsigned</span>)arclamp->xcost,
-<a name="l01463"></a>01463                       (<span class="keywordtype">unsigned</span>)arclamp->ulines);
-<a name="l01464"></a>01464     }
-<a name="l01465"></a>01465 
-<a name="l01466"></a>01466     <span class="keywordflow">return</span> -mindata->xc;
-<a name="l01467"></a>01467 }
-<a name="l01468"></a>01468 
-<a name="l01469"></a>01469 <span class="preprocessor">#endif</span>
-<a name="l01470"></a>01470 <span class="preprocessor"></span>
-<a name="l01471"></a>01471 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01494"></a>01494 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01495"></a>01495 cpl_error_code
-<a name="l01496"></a><a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8">01496</a> <a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8" title="Modify self by maximizing the cross-correlation across all maxima.">irplib_polynomial_find_1d_from_correlation_all</a>(cpl_polynomial * <span class="keyword">self</span>,
-<a name="l01497"></a>01497                                                <span class="keywordtype">int</span> maxdeg,
-<a name="l01498"></a>01498                                                <span class="keyword">const</span> cpl_vector * obs,
-<a name="l01499"></a>01499                                                <span class="keywordtype">int</span> nmaxima,
-<a name="l01500"></a>01500                                                <span class="keywordtype">int</span> linelim,
-<a name="l01501"></a>01501                                                irplib_base_spectrum_model* model,
-<a name="l01502"></a>01502                                                cpl_error_code (* filler)
-<a name="l01503"></a>01503                                                (cpl_vector *,
-<a name="l01504"></a>01504                                                 <span class="keyword">const</span> cpl_polynomial *,
-<a name="l01505"></a>01505                                                 irplib_base_spectrum_model *),
-<a name="l01506"></a>01506                                                <span class="keywordtype">double</span> pixtol,
-<a name="l01507"></a>01507                                                <span class="keywordtype">double</span> pixstep,
-<a name="l01508"></a>01508                                                <span class="keywordtype">int</span> hsize,
-<a name="l01509"></a>01509                                                <span class="keywordtype">int</span> maxite,
-<a name="l01510"></a>01510                                                <span class="keywordtype">int</span> maxfail,
-<a name="l01511"></a>01511                                                <span class="keywordtype">int</span> maxcont,
-<a name="l01512"></a>01512                                                cpl_boolean doplot,
-<a name="l01513"></a>01513                                                <span class="keywordtype">double</span> * pxc)
-<a name="l01514"></a>01514 {
-<a name="l01515"></a>01515 
-<a name="l01516"></a>01516 <span class="preprocessor">#ifdef HAVE_GSL</span>
-<a name="l01517"></a>01517 <span class="preprocessor"></span>
-<a name="l01518"></a>01518     cpl_errorstate     prestate = cpl_errorstate_get();
-<a name="l01519"></a>01519     cpl_polynomial   * start;
-<a name="l01520"></a>01520     cpl_polynomial   * cand;
-<a name="l01521"></a>01521     cpl_polynomial   * backup;
-<a name="l01522"></a>01522     cpl_error_code     error = CPL_ERROR_NONE;
-<a name="l01523"></a>01523     <span class="keywordtype">double</span>             xc;
-<a name="l01524"></a>01524     cpl_bivector     * xtshift = cpl_bivector_new(nmaxima ? nmaxima : 1);
-<a name="l01525"></a>01525     <span class="keyword">const</span> cpl_vector * xtshiftx = cpl_bivector_get_x_const(xtshift);
-<a name="l01526"></a>01526     <span class="keyword">const</span> cpl_vector * xtshifty = cpl_bivector_get_y_const(xtshift);
-<a name="l01527"></a>01527     <span class="keywordtype">int</span>                nshift;
-<a name="l01528"></a>01528     <span class="keywordtype">int</span>                imaximum = -1;
-<a name="l01529"></a>01529     <span class="keywordtype">int</span>                imaxima;
-<a name="l01530"></a>01530 
-<a name="l01531"></a>01531 <span class="preprocessor">#endif</span>
-<a name="l01532"></a>01532 <span class="preprocessor"></span>
-<a name="l01533"></a>01533     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01534"></a>01534     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01535"></a>01535     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01536"></a>01536     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01537"></a>01537     cpl_ensure_code(pxc    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01538"></a>01538 
-<a name="l01539"></a>01539     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,
-<a name="l01540"></a>01540                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01541"></a>01541 
-<a name="l01542"></a>01542     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,
-<a name="l01543"></a>01543                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01544"></a>01544 
-<a name="l01545"></a>01545     cpl_ensure_code(maxdeg  >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01546"></a>01546     cpl_ensure_code(pixtol  > 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01547"></a>01547     cpl_ensure_code(pixstep > 0.0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01548"></a>01548     cpl_ensure_code(hsize   >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01549"></a>01549     cpl_ensure_code(maxite  >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01550"></a>01550     cpl_ensure_code(nmaxima >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01551"></a>01551     cpl_ensure_code(maxfail >   0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01552"></a>01552     cpl_ensure_code(maxcont >   0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01553"></a>01553     cpl_ensure_code(linelim >=  0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01554"></a>01554 
-<a name="l01555"></a>01555 <span class="preprocessor">#ifndef HAVE_GSL</span>
-<a name="l01556"></a>01556 <span class="preprocessor"></span>    <span class="comment">/* Avoid unused variable warning */</span>
-<a name="l01557"></a>01557     cpl_ensure_code(doplot == CPL_TRUE || doplot == CPL_FALSE,
-<a name="l01558"></a>01558                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01559"></a>01559     <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_UNSUPPORTED_MODE,
-<a name="l01560"></a>01560                                  <span class="stringliteral">"GSL is not available"</span>);
-<a name="l01561"></a>01561 <span class="preprocessor">#else</span>
-<a name="l01562"></a>01562 <span class="preprocessor"></span>
-<a name="l01563"></a>01563     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(xtshift, <span class="keyword">self</span>, obs,
-<a name="l01564"></a>01564                                                     model, filler,
-<a name="l01565"></a>01565                                                     hsize, doplot, &xc)) {
-<a name="l01566"></a>01566         cpl_bivector_delete(xtshift);
-<a name="l01567"></a>01567         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l01568"></a>01568     }
-<a name="l01569"></a>01569 
-<a name="l01570"></a>01570     <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {
-<a name="l01571"></a>01571         <span class="comment">/* The initial, optimal (integer) shift */</span>
-<a name="l01572"></a>01572         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, 0);
-<a name="l01573"></a>01573         <span class="keyword">const</span> <span class="keywordtype">double</span> xc0 = cpl_vector_get(xtshifty, 0);
-<a name="l01574"></a>01574 
-<a name="l01575"></a>01575         cpl_msg_warning(cpl_func, <span class="stringliteral">"Doing only shift=%g pixels with lines=%u > "</span>
-<a name="l01576"></a>01576                         <span class="stringliteral">"%d and XC=%g"</span>, xxc, (<span class="keywordtype">unsigned</span>)model->ulines, linelim,
-<a name="l01577"></a>01577                         xc0);
-<a name="l01578"></a>01578 
-<a name="l01579"></a>01579         cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, xxc);
-<a name="l01580"></a>01580 
-<a name="l01581"></a>01581         *pxc = xc0;
-<a name="l01582"></a>01582 
-<a name="l01583"></a>01583         cpl_bivector_delete(xtshift);
-<a name="l01584"></a>01584 
-<a name="l01585"></a>01585         <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01586"></a>01586     }
-<a name="l01587"></a>01587 
-<a name="l01588"></a>01588     start  = cpl_polynomial_duplicate(<span class="keyword">self</span>);
-<a name="l01589"></a>01589     cand   = cpl_polynomial_new(1);
-<a name="l01590"></a>01590     backup = cpl_polynomial_new(1);
-<a name="l01591"></a>01591 
-<a name="l01592"></a>01592     <span class="comment">/* Number of (local) maxima to use as starting point of the optimization */</span>
-<a name="l01593"></a>01593     nshift = cpl_bivector_get_size(xtshift);
-<a name="l01594"></a>01594     <span class="keywordflow">if</span> (nmaxima == 0 || nmaxima > nshift) nmaxima = nshift;
-<a name="l01595"></a>01595 
-<a name="l01596"></a>01596     cpl_msg_info(cpl_func, <span class="stringliteral">"Optimizing %d/%d local shift-maxima "</span>
-<a name="l01597"></a>01597                  <span class="stringliteral">"(no-shift xc=%g. linelim=%d)"</span>, nmaxima, nshift, xc, linelim);
-<a name="l01598"></a>01598     <span class="keywordflow">if</span> (cpl_msg_get_level() <= CPL_MSG_DEBUG)
-<a name="l01599"></a>01599         cpl_bivector_dump(xtshift, stdout);
-<a name="l01600"></a>01600 
-<a name="l01601"></a>01601     <span class="keywordflow">for</span> (imaxima = 0; imaxima < nmaxima; imaxima++) {
-<a name="l01602"></a>01602         <span class="comment">/* The initial, optimal (integer) shift */</span>
-<a name="l01603"></a>01603         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, imaxima);
-<a name="l01604"></a>01604         <span class="keywordtype">double</span> xtpixstep = pixstep;
-<a name="l01605"></a>01605         <span class="keywordtype">double</span> xtpixtol  = pixtol;
-<a name="l01606"></a>01606         <span class="keywordtype">double</span> xtxc;
-<a name="l01607"></a>01607         cpl_boolean ok = CPL_FALSE;
-<a name="l01608"></a>01608         <span class="keywordtype">int</span> nfail;
-<a name="l01609"></a>01609 
-<a name="l01610"></a>01610 
-<a name="l01611"></a>01611         cpl_polynomial_copy(cand, start);
-<a name="l01612"></a>01612         cpl_polynomial_shift_1d(cand, 0, xxc);
-<a name="l01613"></a>01613         cpl_polynomial_copy(backup, cand);
-<a name="l01614"></a>01614 
-<a name="l01615"></a>01615         <span class="comment">/* Increase tolerance until convergence */</span>
-<a name="l01616"></a>01616         <span class="keywordflow">for</span> (nfail = 0; nfail < maxfail; nfail++, xtpixtol *= 2.0,
-<a name="l01617"></a>01617                  xtpixstep *= 2.0) {
-<a name="l01618"></a>01618             <span class="keywordtype">int</span> restart = maxcont;
-<a name="l01619"></a>01619             cpl_boolean redo;
-<a name="l01620"></a>01620 
-<a name="l01621"></a>01621             <span class="keywordflow">do</span> {
-<a name="l01622"></a>01622                 <span class="keywordflow">if</span> (error) {
-<a name="l01623"></a>01623                     cpl_errorstate_dump(prestate, CPL_FALSE,
-<a name="l01624"></a>01624                                         <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);
-<a name="l01625"></a>01625                     cpl_errorstate_set(prestate);
-<a name="l01626"></a>01626                 }
-<a name="l01627"></a>01627                 error = irplib_polynomial_find_1d_from_correlation_
-<a name="l01628"></a>01628                     (cand, maxdeg, obs, model,
-<a name="l01629"></a>01629                      filler, xtpixtol, xtpixstep, 2,
-<a name="l01630"></a>01630                      maxite, &xtxc, &redo);
-<a name="l01631"></a>01631                 <span class="keywordflow">if</span> (redo && !error) error = CPL_ERROR_CONTINUE;
-<a name="l01632"></a>01632             } <span class="keywordflow">while</span> (((!error && redo) || error == CPL_ERROR_CONTINUE)
-<a name="l01633"></a>01633                      && --restart);
-<a name="l01634"></a>01634 
-<a name="l01635"></a>01635             <span class="keywordflow">if</span> (!error && !redo) {
-<a name="l01636"></a>01636                 cpl_msg_debug(cpl_func, <span class="stringliteral">"XC(imax=%d/%d:xtpixtol=%g): %g "</span>
-<a name="l01637"></a>01637                               <span class="stringliteral">"(cost=%u:%u)"</span>, 1+imaxima, nmaxima, xtpixtol,
-<a name="l01638"></a>01638                               xtxc, (<span class="keywordtype">unsigned</span>)model->cost,
-<a name="l01639"></a>01639                               (<span class="keywordtype">unsigned</span>)model->xcost);
-<a name="l01640"></a>01640                 <span class="keywordflow">break</span>;
-<a name="l01641"></a>01641             }
-<a name="l01642"></a>01642             cpl_msg_warning(cpl_func, <span class="stringliteral">"Increasing xtpixtol from %g (%g, imax="</span>
-<a name="l01643"></a>01643                             <span class="stringliteral">"%d/%d)"</span>, xtpixtol, xtpixstep, 1+imaxima, nmaxima);
-<a name="l01644"></a>01644             <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {
-<a name="l01645"></a>01645                 cpl_msg_warning(cpl_func, <span class="stringliteral">"Stopping search-refinement via "</span>
-<a name="l01646"></a>01646                                 <span class="stringliteral">"catalogue with %u lines > %d"</span>,
-<a name="l01647"></a>01647                                 (<span class="keywordtype">unsigned</span>)model->ulines, linelim);
-<a name="l01648"></a>01648                 <span class="keywordflow">break</span>;
-<a name="l01649"></a>01649             }
-<a name="l01650"></a>01650             cpl_polynomial_copy(cand, start);
-<a name="l01651"></a>01651         }
-<a name="l01652"></a>01652 
-<a name="l01653"></a>01653         <span class="comment">/* Decrease tolerance until divergence, keep previous */</span>
-<a name="l01654"></a>01654         <span class="keywordflow">for</span> (; !error && xtpixtol > 0.0; xtpixtol *= 0.25, xtpixstep *= 0.5) {
-<a name="l01655"></a>01655             <span class="keywordtype">int</span> restart = maxcont;
-<a name="l01656"></a>01656             cpl_boolean redo;
-<a name="l01657"></a>01657 
-<a name="l01658"></a>01658             cpl_polynomial_copy(backup, cand);
-<a name="l01659"></a>01659             <span class="keywordflow">do</span> {
-<a name="l01660"></a>01660                 <span class="keywordflow">if</span> (error) {
-<a name="l01661"></a>01661                     cpl_errorstate_dump(prestate, CPL_FALSE,
-<a name="l01662"></a>01662                                         <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);
-<a name="l01663"></a>01663                     cpl_errorstate_set(prestate);
-<a name="l01664"></a>01664                 }
-<a name="l01665"></a>01665                 error = irplib_polynomial_find_1d_from_correlation_
-<a name="l01666"></a>01666                     (cand, maxdeg, obs, model, filler,
-<a name="l01667"></a>01667                      xtpixtol, xtpixstep, 2, maxite, &xtxc, &redo);
-<a name="l01668"></a>01668                 <span class="keywordflow">if</span> (redo && !error) error = CPL_ERROR_CONTINUE;
-<a name="l01669"></a>01669             } <span class="keywordflow">while</span> (((!error && redo) || error == CPL_ERROR_CONTINUE)
-<a name="l01670"></a>01670                      && --restart);
-<a name="l01671"></a>01671             <span class="keywordflow">if</span> (error) <span class="keywordflow">break</span>;
-<a name="l01672"></a>01672             ok = CPL_TRUE;
-<a name="l01673"></a>01673             <span class="keywordflow">if</span> (redo) <span class="keywordflow">break</span>;
-<a name="l01674"></a>01674             cpl_msg_debug(cpl_func, <span class="stringliteral">"XC(imax=%d/%d:xtpixtol=%g): %g (cost=%u:%u"</span>
-<a name="l01675"></a>01675                           <span class="stringliteral">". ulines=%u)"</span>, 1+imaxima, nmaxima, xtpixtol, xtxc,
-<a name="l01676"></a>01676                           (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,
-<a name="l01677"></a>01677                           (<span class="keywordtype">unsigned</span>)model->ulines);
-<a name="l01678"></a>01678             <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {
-<a name="l01679"></a>01679                 cpl_msg_info(cpl_func, <span class="stringliteral">"Stopping search-refinement via "</span>
-<a name="l01680"></a>01680                              <span class="stringliteral">"catalogue with %u lines > %u"</span>,
-<a name="l01681"></a>01681                              (<span class="keywordtype">unsigned</span>)model->ulines, linelim);
-<a name="l01682"></a>01682                 <span class="keywordflow">break</span>;
-<a name="l01683"></a>01683             }
-<a name="l01684"></a>01684         }
-<a name="l01685"></a>01685 
-<a name="l01686"></a>01686         <span class="keywordflow">if</span> (error) {
-<a name="l01687"></a>01687             error = 0;
-<a name="l01688"></a>01688             cpl_errorstate_dump(prestate, CPL_FALSE,
-<a name="l01689"></a>01689                                 <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);
-<a name="l01690"></a>01690             cpl_errorstate_set(prestate);
-<a name="l01691"></a>01691             cpl_polynomial_copy(cand, backup);
-<a name="l01692"></a>01692         }
-<a name="l01693"></a>01693         <span class="keywordflow">if</span> (ok && xtxc > xc) {
-<a name="l01694"></a>01694             imaximum = imaxima;
-<a name="l01695"></a>01695             cpl_polynomial_copy(<span class="keyword">self</span>, cand);
-<a name="l01696"></a>01696             xc = xtxc;
-<a name="l01697"></a>01697 
-<a name="l01698"></a>01698             cpl_msg_info(cpl_func, <span class="stringliteral">"XC(imax=%d/%d): %g -> %g (initial-shift=%g. "</span>
-<a name="l01699"></a>01699                          <span class="stringliteral">"cost=%u:%u. lines=%u)"</span>, 1+imaxima, nmaxima,
-<a name="l01700"></a>01700                          cpl_vector_get(xtshifty, imaxima), xtxc,
-<a name="l01701"></a>01701                          cpl_vector_get(xtshiftx, imaxima),
-<a name="l01702"></a>01702                          (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,
-<a name="l01703"></a>01703                          (<span class="keywordtype">unsigned</span>)model->ulines);
-<a name="l01704"></a>01704         } <span class="keywordflow">else</span> {
-<a name="l01705"></a>01705             cpl_msg_info(cpl_func, <span class="stringliteral">"xc(imax=%d/%d): %g -> %g (initial-shift=%g. "</span>
-<a name="l01706"></a>01706                          <span class="stringliteral">"cost=%u:%u. lines=%u)"</span>, 1+imaxima, nmaxima,
-<a name="l01707"></a>01707                          cpl_vector_get(xtshifty, imaxima), xtxc,
-<a name="l01708"></a>01708                          cpl_vector_get(xtshiftx, imaxima),
-<a name="l01709"></a>01709                          (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,
-<a name="l01710"></a>01710                          (<span class="keywordtype">unsigned</span>)model->ulines);
-<a name="l01711"></a>01711         }
-<a name="l01712"></a>01712     }
-<a name="l01713"></a>01713 
-<a name="l01714"></a>01714     cpl_polynomial_delete(start);
-<a name="l01715"></a>01715     cpl_polynomial_delete(backup);
-<a name="l01716"></a>01716     cpl_polynomial_delete(cand);
-<a name="l01717"></a>01717 
-<a name="l01718"></a>01718     <span class="keywordflow">if</span> (imaximum < 0) {
-<a name="l01719"></a>01719       <span class="comment">/* The initial, optimal (integer) shift */</span>
-<a name="l01720"></a>01720         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, 0);
-<a name="l01721"></a>01721         <span class="keyword">const</span> <span class="keywordtype">double</span> xc0 = cpl_vector_get(xtshifty, 0);
-<a name="l01722"></a>01722 
-<a name="l01723"></a>01723         error = cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,
-<a name="l01724"></a>01724                                       <span class="stringliteral">"Could not improve XC=%g over %d "</span>
-<a name="l01725"></a>01725                                       <span class="stringliteral">"local shift-maxima, best at shift %g"</span>,
-<a name="l01726"></a>01726                                       xc0, nmaxima, xxc);
-<a name="l01727"></a>01727     } <span class="keywordflow">else</span> {
-<a name="l01728"></a>01728         cpl_msg_info(cpl_func, <span class="stringliteral">"Maximal XC=%g (up from %g, with initial pixel-"</span>
-<a name="l01729"></a>01729                      <span class="stringliteral">"shift of %g) at %d/%d local shift-maximi"</span>, xc,
-<a name="l01730"></a>01730                      cpl_vector_get(xtshifty, imaximum),
-<a name="l01731"></a>01731                      cpl_vector_get(xtshiftx, imaximum),
-<a name="l01732"></a>01732                      1+imaximum, nmaxima);
-<a name="l01733"></a>01733 
-<a name="l01734"></a>01734         <span class="keywordflow">if</span> (doplot) {
-<a name="l01735"></a>01735             <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(obs, <span class="keyword">self</span>, model, filler);
-<a name="l01736"></a>01736         }
-<a name="l01737"></a>01737 
-<a name="l01738"></a>01738         *pxc = xc;
-<a name="l01739"></a>01739     }
-<a name="l01740"></a>01740 
-<a name="l01741"></a>01741     cpl_bivector_delete(xtshift);
-<a name="l01742"></a>01742 
-<a name="l01743"></a>01743     <span class="keywordflow">return</span> error;
-<a name="l01744"></a>01744 
-<a name="l01745"></a>01745 <span class="preprocessor">#endif</span>
-<a name="l01746"></a>01746 <span class="preprocessor"></span>
-<a name="l01747"></a>01747 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wavecal.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wavecal.c,v 1.52 2012/08/03 21:05:32 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IRPLIB Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/08/03 21:05:32 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.52 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "irplib_wavecal_impl.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* Needed for irplib_errorstate_dump_debug() */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#ifdef HAVE_GSL</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#include <gsl/gsl_multimin.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                               Private types</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keyword">const</span> cpl_vector * observed;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     cpl_polynomial   * disp1d;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     cpl_vector       * spectrum;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     irplib_base_spectrum_model * param;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     cpl_error_code  (* filler)(cpl_vector *, <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                irplib_base_spectrum_model *);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     cpl_vector       * vxc;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">double</span>             xc;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordtype">int</span>                maxxc;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">double</span>             mxc;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     cpl_polynomial   * mdisp;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordtype">int</span>                ishift;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> } irplib_multimin;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                               Defines</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor">#ifndef inline</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">                                   Private functions</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#ifdef HAVE_GSL</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">double</span> irplib_gsl_correlation(<span class="keyword">const</span> gsl_vector *, <span class="keywordtype">void</span> *);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> irplib_polynomial_find_1d_from_correlation_(cpl_polynomial *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                                             <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                             irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                             cpl_error_code (*)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                             <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                             <span class="keywordtype">double</span> *, cpl_boolean *);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25">  127</a></span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25" title="Count the positive Y-entries in a given X-range.">irplib_bivector_count_positive</a>(<span class="keyword">const</span> cpl_bivector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                                   <span class="keywordtype">double</span>               x_min,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                   <span class="keywordtype">double</span>               x_max)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      nself = cpl_bivector_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> * px    = cpl_bivector_get_x_data_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> * py    = cpl_bivector_get_y_data_const(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordtype">int</span>            npos  = 0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">int</span>            i     = 0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, -1);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_ensure(x_min <= x_max, CPL_ERROR_ILLEGAL_INPUT, -2);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* FIXME: Use cpl_vector_find() */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">while</span> (i < nself && px[i] < x_min) i++;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">while</span> (i < nself && px[i] < x_max)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         <span class="keywordflow">if</span> (py[i++] > 0) npos++;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">return</span> npos;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb">  160</a></span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb" title="Fit a 2D-dispersion from an image of wavelengths.">irplib_polynomial_fit_2d_dispersion</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                                    <span class="keyword">const</span> cpl_image * imgwave,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                                    <span class="keywordtype">int</span> fitdeg, <span class="keywordtype">double</span> * presid)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nx = cpl_image_get_size_x(imgwave);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        ny = cpl_image_get_size_y(imgwave);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nbad = cpl_image_count_rejected(imgwave);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nsamp = nx * ny - nbad;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_matrix     * xy_pos;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordtype">double</span>         * xdata;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordtype">double</span>         * ydata;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_vector     * wlen;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">double</span>         * dwlen;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keyword">const</span> cpl_size   nfitdeg = (cpl_size)fitdeg;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordtype">int</span> k = 0;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_ensure_code(<span class="keyword">self</span>    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_ensure_code(imgwave != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_ensure_code(presid  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_ensure_code(fitdeg > 0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 2,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     xy_pos = cpl_matrix_new(2, nsamp);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     xdata = cpl_matrix_get_data(xy_pos);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     ydata = xdata + nsamp;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     dwlen = (<span class="keywordtype">double</span>*)cpl_malloc(nsamp * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     wlen = cpl_vector_wrap(nsamp, dwlen);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">for</span> (i=1; i <= nx; i++) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="keywordflow">for</span> (j=1; j <= ny; j++) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>             <span class="keywordtype">int</span> is_bad;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> value = cpl_image_get(imgwave, i, j, &is_bad);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>             <span class="keywordflow">if</span> (!is_bad) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                 xdata[k] = i;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                 ydata[k] = j;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                 dwlen[k] = value;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                 k++;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>             }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Fitting 2D polynomial to %d X %d image, ignoring "</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                  <span class="stringliteral">"%d poorly calibrated pixels"</span>, nx, ny, nbad);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">if</span> (cpl_polynomial_fit(<span class="keyword">self</span>, xy_pos, NULL, wlen, NULL, CPL_FALSE, NULL,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                            &nfitdeg) == CPL_ERROR_NONE && presid != NULL) {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         cpl_vector_fill_polynomial_fit_residual(wlen, wlen, NULL, <span class="keyword">self</span>, xy_pos,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                                                 NULL);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         *presid = cpl_vector_product(wlen, wlen)/nsamp;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     cpl_matrix_delete(xy_pos);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_vector_delete(wlen);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_ensure_code(k == nsamp, CPL_ERROR_UNSPECIFIED);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> cpl_error_code</div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86">  244</a></span> <a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86" title="Modify self by maximizing the cross-correlation.">irplib_polynomial_find_1d_from_correlation</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                                            <span class="keywordtype">int</span> maxdeg,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                                            <span class="keyword">const</span> cpl_vector * obs,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                                            irplib_base_spectrum_model * model,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                                            cpl_error_code (* filler)</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                            (cpl_vector *,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                             <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                                             irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                                            <span class="keywordtype">double</span> pixtol,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                            <span class="keywordtype">double</span> pixstep,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                            <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                                            <span class="keywordtype">int</span> maxite,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                                            <span class="keywordtype">double</span> * pxc)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     cpl_boolean restart = CPL_FALSE;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keyword">const</span> cpl_error_code error = irplib_polynomial_find_1d_from_correlation_</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         (<span class="keyword">self</span>, maxdeg, obs, model, filler, pixtol, pixstep, hsize, maxite, pxc,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>          &restart);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">return</span> error ? cpl_error_set_where(cpl_func) :</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         (restart ? cpl_error_set(cpl_func, CPL_ERROR_CONTINUE)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>          : CPL_ERROR_NONE);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> irplib_polynomial_find_1d_from_correlation_(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                                             <span class="keywordtype">int</span> maxdeg,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                                             <span class="keyword">const</span> cpl_vector * obs,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                             irplib_base_spectrum_model * model,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                             cpl_error_code (* filler)</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                                             <span class="keywordtype">double</span> pixtol,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                                             <span class="keywordtype">double</span> pixstep,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                                             <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                                             <span class="keywordtype">int</span> maxite,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                                             <span class="keywordtype">double</span> * pxc,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                             cpl_boolean * prestart)</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="preprocessor">#ifdef HAVE_GSL</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="preprocessor"></span>    <span class="keyword">const</span> gsl_multimin_fminimizer_type * T = gsl_multimin_fminimizer_nmsimplex;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     gsl_multimin_fminimizer * minimizer;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     gsl_multimin_function my_func;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     irplib_multimin data;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     gsl_vector * dispgsl;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     gsl_vector * stepsize;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     gsl_vector * dispprev;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordtype">int</span> status = GSL_CONTINUE;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> nobs = cpl_vector_get_size(obs);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keyword">const</span> cpl_size nfit = maxdeg + 1;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="comment">/* Convert pixel step to wavelength step on detector center */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> wlstep =</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         cpl_polynomial_eval_1d_diff(<span class="keyword">self</span>, 0.5 * (nobs + pixstep),</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                                     0.5 * (nobs - pixstep), NULL);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordtype">double</span> wlstepi = wlstep;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordtype">double</span> size;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="keywordtype">int</span> iter;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     cpl_size i;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     cpl_ensure_code(prestart != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     *prestart = CPL_FALSE;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     cpl_ensure_code(<span class="keyword">self</span>     != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     cpl_ensure_code(obs      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     cpl_ensure_code(model    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     cpl_ensure_code(filler   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     cpl_ensure_code(pxc      != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     cpl_ensure_code(maxdeg  >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     cpl_ensure_code(pixtol  > 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     cpl_ensure_code(pixstep > 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     cpl_ensure_code(hsize   >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     cpl_ensure_code(maxite  >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor">#ifndef HAVE_GSL</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="preprocessor"></span>    <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_UNSUPPORTED_MODE,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                                  <span class="stringliteral">"GSL is not available"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     minimizer = gsl_multimin_fminimizer_alloc(T, (<span class="keywordtype">size_t</span>)nfit);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     cpl_ensure_code(minimizer != NULL, CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>        </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     dispgsl  = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     stepsize = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     dispprev = gsl_vector_alloc((<span class="keywordtype">size_t</span>)nfit);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordflow">for</span> (i=0; i < nfit; i++) {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> value = cpl_polynomial_get_coeff(<span class="keyword">self</span>, &i);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         gsl_vector_set(dispgsl, (<span class="keywordtype">size_t</span>)i, value);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         gsl_vector_set(stepsize, (<span class="keywordtype">size_t</span>)i, wlstepi);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         wlstepi /= (double)nobs;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     my_func.n = nfit;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     my_func.f = &irplib_gsl_correlation;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     my_func.params = (<span class="keywordtype">void</span> *)(&data);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     data.observed = obs;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     data.disp1d   = <span class="keyword">self</span>;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     data.spectrum = cpl_vector_new(nobs + 2 * hsize);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     data.vxc      = cpl_vector_new(1 + 2 * hsize);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     data.param    = model;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     data.filler   = filler;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     data.maxxc    = 0; <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     data.ishift   = 0; <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     data.mxc      = -1.0; <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     data.mdisp    = NULL; <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     gsl_multimin_fminimizer_set (minimizer, &my_func, dispgsl, stepsize);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordflow">for</span> (iter = 0; status == GSL_CONTINUE && iter < maxite; iter++) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> fprev = minimizer->fval;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         gsl_vector_memcpy(dispprev, minimizer->x);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         status = gsl_multimin_fminimizer_iterate(minimizer);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         <span class="keywordflow">if</span> (status || !cpl_errorstate_is_equal(prestate)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         size = gsl_multimin_fminimizer_size (minimizer);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         status = gsl_multimin_test_size (size, pixtol);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>      </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">if</span> (status == GSL_SUCCESS) {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             cpl_msg_debug(cpl_func, <span class="stringliteral">"converged to minimum at"</span>);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             <span class="keywordflow">if</span> (nfit == 0) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g df() = %g size = %g"</span>, </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                               iter,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                               gsl_vector_get (minimizer->x, 0)</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                               - gsl_vector_get (dispprev, 0), </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                               minimizer->fval - fprev, size);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nfit == 1) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g %g df() = %g size = %g"</span>, </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                               iter,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                               gsl_vector_get (minimizer->x, 0)</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                               - gsl_vector_get (dispprev, 0), </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                               gsl_vector_get (minimizer->x, 1)</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                               - gsl_vector_get (dispprev, 1), </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                               minimizer->fval - fprev, size);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"%5d %g %g %g df() = %g size = %g"</span>, </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                               iter,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                               gsl_vector_get (minimizer->x, 0)</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                               - gsl_vector_get (dispprev, 0), </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                               gsl_vector_get (minimizer->x, 1)</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                               - gsl_vector_get (dispprev, 1), </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                               gsl_vector_get (minimizer->x, 2)</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                               - gsl_vector_get (dispprev, 2), </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                               minimizer->fval - fprev, size);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>             }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordflow">if</span> (status == GSL_SUCCESS && cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         <span class="keywordflow">if</span> (data.mxc > -minimizer->fval) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             *pxc = data.mxc;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>             cpl_msg_warning(cpl_func, <span class="stringliteral">"Local maximum: %g(%d) > %g"</span>,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                             data.mxc, data.ishift, -minimizer->fval);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>             cpl_polynomial_shift_1d(data.mdisp, 0, (<span class="keywordtype">double</span>)data.ishift);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>             cpl_polynomial_copy(<span class="keyword">self</span>, data.mdisp);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>             *prestart = CPL_TRUE;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>             *pxc = -minimizer->fval;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             <span class="keywordflow">for</span> (i=0; i < nfit; i++) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> value = gsl_vector_get(minimizer->x, i);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                 cpl_polynomial_set_coeff(<span class="keyword">self</span>, &i, value);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         }</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     cpl_vector_delete(data.spectrum);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     cpl_vector_delete(data.vxc);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     cpl_polynomial_delete(data.mdisp);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     gsl_multimin_fminimizer_free(minimizer);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     gsl_vector_free(dispgsl);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     gsl_vector_free(dispprev);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     gsl_vector_free(stepsize);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     cpl_ensure_code(status != GSL_CONTINUE, CPL_ERROR_CONTINUE);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     cpl_ensure_code(status == GSL_SUCCESS, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     cpl_ensure_code(cpl_errorstate_is_equal(prestate), cpl_error_get_code());</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> cpl_error_code</div>
+<div class="line"><a name="l00494"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a">  494</a></span> <a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a>(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                                  <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                                  irplib_base_spectrum_model * lsslamp)</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     irplib_line_spectrum_model * arclamp</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         = (irplib_line_spectrum_model *)lsslamp;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     arclamp->cost++;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                                                    arclamp->linepix,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                                                    arclamp->erftmp,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                                                    disp,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                                                    arclamp->lines,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                                                    arclamp->wslit,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                                                    arclamp->wfwhm,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                                                    arclamp->xtrunc,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                                                    0, CPL_FALSE, CPL_FALSE,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                                                    &(arclamp->ulines));</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     arclamp->xcost++;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> cpl_error_code</div>
+<div class="line"><a name="l00539"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f">  539</a></span> <a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum</a>(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                                     <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                                     irplib_base_spectrum_model * lsslamp)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     irplib_line_spectrum_model * arclamp</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         = (irplib_line_spectrum_model *)lsslamp;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     arclamp->cost++;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                                                    arclamp->linepix,</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                                                    arclamp->erftmp,</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>                                                    disp,</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                                                    arclamp->lines,</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                                                    arclamp->wslit,</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>                                                    arclamp->wfwhm,</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                                                    arclamp->xtrunc,</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                                                    0, CPL_FALSE, CPL_TRUE,</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>                                                    &(arclamp->ulines));</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     arclamp->xcost++;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> }</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> cpl_error_code</div>
+<div class="line"><a name="l00585"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95">  585</a></span> <a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast</a>(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>                                       <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>                                       irplib_base_spectrum_model * lsslamp)</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> {</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     irplib_line_spectrum_model * arclamp</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>         = (irplib_line_spectrum_model *)lsslamp;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     arclamp->cost++;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                                                    arclamp->linepix,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                                                    arclamp->erftmp,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                                                    disp,</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>                                                    arclamp->lines,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                                                    arclamp->wslit,</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>                                                    arclamp->wfwhm,</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>                                                    arclamp->xtrunc,</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>                                                    0, CPL_TRUE, CPL_FALSE,</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>                                                    &(arclamp->ulines));</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     arclamp->xcost++;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> }</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> cpl_error_code</div>
+<div class="line"><a name="l00630"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c">  630</a></span> <a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum_fast</a>(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                                          <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                                          irplib_base_spectrum_model * lsslamp)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     irplib_line_spectrum_model * arclamp</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         = (irplib_line_spectrum_model *)lsslamp;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     cpl_ensure_code(arclamp != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     arclamp->cost++;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(<span class="keyword">self</span>,</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                                                    arclamp->linepix,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                                                    arclamp->erftmp,</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                                                    disp,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                                    arclamp->lines,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                                                    arclamp->wslit,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                                                    arclamp->wfwhm,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                                                    arclamp->xtrunc,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                                                    0, CPL_TRUE, CPL_TRUE,</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                                                    &(arclamp->ulines));</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     arclamp->xcost++;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d">  672</a></span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(<span class="keyword">const</span> cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                                               <span class="keyword">const</span> cpl_polynomial * disp1d,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                                               irplib_base_spectrum_model * model,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                                               cpl_error_code (* filler)</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                                               (cpl_vector *,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                                                <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                                                irplib_base_spectrum_model *))</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     cpl_vector * wl;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     cpl_vector * spectrum;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     cpl_vector * vxc;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> len = cpl_vector_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordtype">double</span> maxval, xc;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     <span class="keywordtype">int</span> ixc;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="keywordtype">int</span> error = 0;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     cpl_ensure_code(disp1d != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     cpl_ensure_code(cpl_polynomial_get_dimension(disp1d) == 1,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     cpl_ensure_code(cpl_polynomial_get_degree(disp1d) > 0,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     wl = cpl_vector_new(len);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     spectrum = cpl_vector_new(len);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     vxc = cpl_vector_new(1);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     error |= (int)cpl_vector_fill_polynomial(wl, disp1d, 1.0, 1.0);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     error |= filler(spectrum, disp1d, model);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     ixc = cpl_vector_correlate(vxc, <span class="keyword">self</span>, spectrum);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     xc = cpl_vector_get(vxc, ixc);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     maxval = cpl_vector_get_max(spectrum);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordflow">if</span> (maxval != 0.0) </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         error |= cpl_vector_multiply_scalar(spectrum,</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>                                              cpl_vector_get_max(<span class="keyword">self</span>)/maxval);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         <span class="keyword">const</span> cpl_vector * spair[] = {wl, <span class="keyword">self</span>, spectrum};</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         <span class="keywordtype">char</span> * pre = cpl_sprintf(<span class="stringliteral">"set grid;set xlabel 'Wavelength (%g -> %g)'; "</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                                  <span class="stringliteral">"set ylabel 'Intensity';"</span>, cpl_vector_get(wl, 0),</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>                                  cpl_vector_get(wl, len-1));</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Observed and modelled spectra (%d pixel "</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>                                    <span class="stringliteral">"XC=%g) ' w linespoints"</span>, len, xc);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>         (void)cpl_plot_vectors(pre, title, <span class="stringliteral">""</span>, spair, 3);</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         cpl_free(pre);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>         cpl_free(title);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     }</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     cpl_vector_delete(wl);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     cpl_vector_delete(spectrum);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     cpl_vector_delete(vxc);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> cpl_error_code</div>
+<div class="line"><a name="l00759"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6">  759</a></span> <a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(cpl_bivector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                                             <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                                             <span class="keyword">const</span> cpl_vector * obs,</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                                             irplib_base_spectrum_model * model,</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                                             cpl_error_code (*filler)</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>                                             <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                                             cpl_boolean doplot,</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                                             <span class="keywordtype">double</span> *pxc)</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nobs   = cpl_vector_get_size(obs);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>        nmodel = 2 * hsize + nobs;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     cpl_polynomial * shdisp;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     cpl_vector     * xself = cpl_bivector_get_x(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     cpl_vector     * yself = cpl_bivector_get_y(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     cpl_vector     * mspec1d;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     cpl_vector     * xcorr;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     cpl_error_code   error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     <span class="keywordtype">double</span>           xcprev, xcnext;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     <span class="keywordtype">int</span>              ixc, imax = 0;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     <span class="keywordtype">int</span>              i;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     cpl_ensure_code(disp   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     cpl_ensure_code(hsize  >  0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> </div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     shdisp = cpl_polynomial_duplicate(disp);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     <span class="comment">/* Shift reference by -hsize so filler can be used without offset */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="keywordflow">if</span> (cpl_polynomial_shift_1d(shdisp, 0, -hsize)) {</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         cpl_polynomial_delete(shdisp);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     mspec1d = cpl_vector_new(nmodel);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="keywordflow">if</span> (filler(mspec1d, shdisp, model)) {</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         cpl_vector_delete(mspec1d);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     }</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="comment">/* Should not be able to fail now */</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     xcorr = cpl_vector_new(1 + 2 * hsize);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     ixc = cpl_vector_correlate(xcorr, mspec1d, obs);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     irplib_polynomial_dump_corr_step(shdisp, xcorr, <span class="stringliteral">"Shift"</span>);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     cpl_vector_delete(mspec1d);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     cpl_polynomial_delete(shdisp);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     <span class="comment">/* Find local maxima. */</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="comment">/* FIXME(?): Also include stationary points */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     i = 0;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     xcprev = cpl_vector_get(xcorr, i);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     xcnext = cpl_vector_get(xcorr, i+1);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordflow">if</span> (xcprev >= xcnext) {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>         <span class="comment">/* 1st data point is an extreme */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>         <span class="comment">/* FIXME: This could also be an error, recoverable by caller by</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="comment">           increasing hsize */</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>         imax++;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>         cpl_vector_set(xself, 0, i - hsize);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         cpl_vector_set(yself, 0, xcprev);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     }</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     <span class="keywordflow">for</span> (i = 1; i < 2 * hsize; i++) {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xc = xcnext;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>         xcnext = cpl_vector_get(xcorr, i+1);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>         <span class="keywordflow">if</span> (xc >= xcprev && xc >= xcnext) {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>             <span class="comment">/* Found (local) maximum at shift i - hsize */</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>             <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             imax++;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>             <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) < imax) {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>                 cpl_vector_set_size(xself, imax);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>                 cpl_vector_set_size(yself, imax);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>             }</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> </div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             <span class="keywordflow">for</span> (j = imax-1; j > 0; j--) {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                 <span class="keywordflow">if</span> (xc <= cpl_vector_get(yself, j-1)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>                 cpl_vector_set(xself, j, cpl_vector_get(xself, j-1));</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                 cpl_vector_set(yself, j, cpl_vector_get(yself, j-1));</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>             }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>             cpl_vector_set(xself, j, i - hsize);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>             cpl_vector_set(yself, j, xc);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         }</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         xcprev = xc;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <span class="comment">/* assert( i == 2 * hsize ); */</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="keywordflow">if</span> (xcnext >= xcprev) {</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         <span class="comment">/* Last data point is an extreme */</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>         <span class="comment">/* FIXME: This could also be an error, recoverable by caller by</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment">           increasing hsize */</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>         <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         imax++;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>         <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) < imax) {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>             cpl_vector_set_size(xself, imax);</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>             cpl_vector_set_size(yself, imax);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         }</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>         <span class="keywordflow">for</span> (j = imax-1; j > 0; j--) {</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>             <span class="keywordflow">if</span> (xcnext <= cpl_vector_get(yself, j-1)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>             cpl_vector_set(xself, j, cpl_vector_get(xself, j-1));</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>             cpl_vector_set(yself, j, cpl_vector_get(yself, j-1));</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>         }</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>         cpl_vector_set(xself, j, i - hsize);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>         cpl_vector_set(yself, j, xcnext);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     }</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <span class="keywordflow">if</span> (doplot) {</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         <span class="comment">/* Vector of -hsize, 1-hsize, 2-hsize, ..., 0, ..., hsize */</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>         cpl_vector * xvals = cpl_vector_new(1 + 2 * hsize);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>         cpl_bivector * bcorr = cpl_bivector_wrap_vectors(xvals, xcorr);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>         <span class="keywordtype">double</span> x = (double)-hsize;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Cross-correlation of shifted %d-pixel "</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>                                    <span class="stringliteral">"spectrum (XCmax=%g at %d)' w linespoints"</span>,</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>                                    nobs, cpl_vector_get(xcorr, ixc),</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>                                    ixc - hsize);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>         <span class="keywordflow">for</span> (i = 0; i < 1 + 2 * hsize; i++, x += 1.0) {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>             cpl_vector_set(xvals, i, x);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         }</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Offset [pixel]';"</span>, title,</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                              <span class="stringliteral">""</span>, bcorr);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         cpl_bivector_unwrap_vectors(bcorr);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>         cpl_vector_delete(xvals);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         cpl_free(title);</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     }</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordflow">if</span> (pxc != NULL) *pxc = cpl_vector_get(xcorr, hsize);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>     cpl_vector_delete(xcorr);</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordflow">if</span> (imax < 1) {</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>         error = CPL_ERROR_DATA_NOT_FOUND;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cpl_bivector_get_size(<span class="keyword">self</span>) > imax) {</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         cpl_vector_set_size(xself, imax);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         cpl_vector_set_size(yself, imax);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     }</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="comment">/* Propagate error, if any */</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     <span class="keywordflow">return</span> cpl_error_set(cpl_func, error);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> cpl_error_code</div>
+<div class="line"><a name="l00936"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56">  936</a></span> <a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56" title="Shift self by the amount that maximizes the cross-correlation.">irplib_polynomial_shift_1d_from_correlation</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                                             <span class="keyword">const</span> cpl_vector * obs,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                             irplib_base_spectrum_model * model,</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                                             cpl_error_code (*filler)</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>                                             <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>                                             cpl_boolean doplot,</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>                                             <span class="keywordtype">double</span> * pxc)</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> {</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      nobs   = cpl_vector_get_size(obs);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>      nmodel = 2 * hsize + nobs;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     cpl_vector   * mspec1d;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     cpl_vector   * xcorr;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     <span class="keywordtype">int</span>            ixc, xxc;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     <span class="keywordtype">double</span>         xc;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     cpl_ensure_code(hsize  >  0,    CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="comment">/* Shift reference by -hsize so filler can be used without offset */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     cpl_ensure_code(!cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, -hsize),</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>                     cpl_error_get_code());</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     mspec1d = cpl_vector_new(nmodel);</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">if</span> (filler(mspec1d, <span class="keyword">self</span>, model)) {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         cpl_vector_delete(mspec1d);</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>         cpl_ensure_code(0, cpl_error_get_code());</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="comment">/* Should not be able to fail now */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     xcorr = cpl_vector_new(1 + 2 * hsize);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     ixc = cpl_vector_correlate(xcorr, mspec1d, obs);</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> </div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     irplib_polynomial_dump_corr_step(<span class="keyword">self</span>, xcorr, <span class="stringliteral">"Shift"</span>);</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     cpl_vector_delete(mspec1d);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     error = cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, (<span class="keywordtype">double</span>)ixc);</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     xc = cpl_vector_get(xcorr, ixc);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     xxc = ixc - hsize; <span class="comment">/* The effect of the two shifts */</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Shifting %d pixels (%g < %g)"</span>, xxc,</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>                  cpl_vector_get(xcorr, hsize), xc);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordflow">if</span> (doplot) {</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>         cpl_vector * xvals = cpl_vector_new(1 + 2 * hsize);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>         cpl_bivector * bcorr = cpl_bivector_wrap_vectors(xvals, xcorr);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>         <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         <span class="keywordtype">double</span> x = (double)-hsize;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         <span class="keywordtype">char</span> * title = cpl_sprintf(<span class="stringliteral">"t 'Cross-correlation of shifted %d-pixel "</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>                                    <span class="stringliteral">"spectrum (XCmax=%g at %d)' w linespoints"</span>,</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>                                    nobs, cpl_vector_get(xcorr, ixc), xxc);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         <span class="keywordflow">for</span> (i = 0; i < 1 + 2 * hsize; i++, x += 1.0) {</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>             cpl_vector_set(xvals, i, x);</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>         }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>         cpl_plot_bivector(<span class="stringliteral">"set grid;set xlabel 'Offset [pixel]';"</span>, title,</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                              <span class="stringliteral">""</span>, bcorr);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         cpl_bivector_unwrap_vectors(bcorr);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>         cpl_vector_delete(xvals);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         cpl_free(title);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     cpl_vector_delete(xcorr);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     <span class="keywordflow">if</span> (pxc != NULL) *pxc = xc;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> cpl_error_code</div>
+<div class="line"><a name="l01046"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761"> 1046</a></span> <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>                                        cpl_vector * linepix,</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>                                        cpl_vector * erftmp,</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>                                        <span class="keyword">const</span> cpl_polynomial * disp,</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>                                        <span class="keyword">const</span> cpl_bivector * lines,</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>                                        <span class="keywordtype">double</span> wslit,</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                                        <span class="keywordtype">double</span> wfwhm,</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>                                        <span class="keywordtype">double</span> xtrunc,</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>                                        <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                                        cpl_boolean dofast,</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                                        cpl_boolean dolog,</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>                                        cpl_size * pulines)</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> {</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     cpl_errorstate     prestate;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>       sigma = wfwhm * CPL_MATH_SIG_FWHM;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     <span class="keyword">const</span> cpl_vector * xlines  = cpl_bivector_get_x_const(lines);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dxlines = cpl_vector_get_data_const(xlines);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dylines = cpl_bivector_get_y_data_const(lines);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     <span class="keywordtype">double</span>           * plinepix</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>         = linepix ? cpl_vector_get_data(linepix) : NULL;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          nlines  = cpl_vector_get_size(xlines);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          nself   = cpl_vector_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordtype">double</span>           * dself   = cpl_vector_get_data(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     cpl_polynomial   * dispi;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     <span class="keywordtype">double</span>           * profile = NULL;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     <span class="keyword">const</span> cpl_size     i0 = 0;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>       p0 = cpl_polynomial_get_coeff(disp, &i0);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="keywordtype">double</span>             wl;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     <span class="keywordtype">double</span>             xpos = (double)(1-hsize)-xtrunc;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>       xmax = (double)(nself-hsize)+xtrunc;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="keywordtype">double</span>             xderiv, xextreme;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     cpl_error_code     error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     <span class="keywordtype">int</span>                iline;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     cpl_size           ulines = 0;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     cpl_ensure_code(<span class="keyword">self</span>    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     cpl_ensure_code(disp    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     cpl_ensure_code(lines   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>     cpl_ensure_code(wslit  >  0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     cpl_ensure_code(wfwhm  >  0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     cpl_ensure_code(hsize  >= 0,   CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     cpl_ensure_code(xtrunc >  0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     cpl_ensure_code(nself  > 2 * hsize, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     cpl_ensure_code(cpl_polynomial_get_dimension(disp) == 1,</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     cpl_ensure_code(cpl_polynomial_get_degree(disp) > 0,</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     <span class="comment">/* The smallest wavelength contributing to the spectrum. */</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     wl = cpl_polynomial_eval_1d(disp, xpos, &xderiv);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="keywordflow">if</span> (wl <= 0.0) <span class="keywordflow">return</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT, __FILE__,</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                                     __LINE__, <span class="stringliteral">"Non-positive wavelength at x=%g: "</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                                     <span class="stringliteral">"P(x)=%g, P'(x)=%g"</span>, xpos, wl, xderiv);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>     <span class="keywordflow">if</span> (xderiv <= 0.0) <span class="keywordflow">return</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT, __FILE__,</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                                     __LINE__, <span class="stringliteral">"Non-increasing dispersion at "</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                                     <span class="stringliteral">"x=%g: P'(x)=%g, P(x)=%g"</span>, xpos, xderiv, wl);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     <span class="comment">/* Find the 1st line */</span></div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     iline = cpl_vector_find(xlines, wl);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     <span class="comment">/* The first line must be at least at wl */</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     <span class="keywordflow">if</span> (dxlines[iline] < wl) iline++;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">if</span> (iline >= nlines) <span class="keywordflow">return</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_DATA_NOT_FOUND, __FILE__,</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>                                     __LINE__, <span class="stringliteral">"The %d-line catalogue has only "</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>                                     <span class="stringliteral">"lines below P(%g)=%g > %g"</span>, nlines, xpos,</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>                                     wl, dxlines[nlines-1]);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     memset(dself, 0, nself * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     dispi = cpl_polynomial_duplicate(disp);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     <span class="comment">/* Verify monotony of dispersion */</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     cpl_polynomial_derivative(dispi, 0);</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <span class="keywordflow">if</span> (cpl_polynomial_solve_1d(dispi, 0.5*(nlines+1), &xextreme, 1)) {</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (xpos < xextreme && xextreme < xmax) {</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         cpl_polynomial_delete(dispi);</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>                                            __FILE__, __LINE__, <span class="stringliteral">"Non-monotone "</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>                                            <span class="stringliteral">"dispersion at x=%g: P'(x)=0, "</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>                                            <span class="stringliteral">"P(x)=%g"</span>, xextreme,</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>                                            cpl_polynomial_eval_1d(disp, xextreme,</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>                                                                   NULL));</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     <span class="keywordflow">if</span> (dofast) {</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         <span class="keyword">const</span> <span class="keywordtype">int</span> npix = 1+(int)xtrunc;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         <span class="keywordflow">if</span> (erftmp != NULL && cpl_vector_get_size(erftmp) == npix &&</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>             cpl_vector_get(erftmp, 0) > 0.0) {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>             profile = cpl_vector_get_data(erftmp);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> yval =  0.5 / wslit;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> x0p  =  0.5 * wslit + 0.5;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> x0n  = -0.5 * wslit + 0.5;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             <span class="keywordtype">double</span>       x1diff</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                 = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma)</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>                 - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma);</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             <span class="keywordtype">int</span>          ipix;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> </div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>             <span class="keywordflow">if</span> (erftmp == NULL) {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>                 profile = (<span class="keywordtype">double</span>*)cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)*(size_t)npix);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>                 cpl_vector_set_size(erftmp, npix);</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>                 profile = cpl_vector_get_data(erftmp);</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>             }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>             profile[0] = 2.0 * yval * x1diff;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> </div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>             <span class="keywordflow">for</span> (ipix = 1; ipix < npix; ipix++) {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = (double)ipix;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = x1 + 0.5 * wslit + 0.5;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = x1 - 0.5 * wslit + 0.5;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x0diff = x1diff;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                 x1diff = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma)</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                     - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>                 profile[ipix] = yval * (x1diff - x0diff);</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>             }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         }</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     }</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     cpl_polynomial_copy(dispi, disp);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="comment">/* FIXME: A custom version of cpl_polynomial_solve_1d() which returns</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">       P'(xpos) can be used for the 1st NR-iteration. */</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     <span class="comment">/* Further, the sign of P'(xpos) could be checked for all lines. */</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     <span class="comment">/* Perform 1st NR-iteration in solving for P(xpos) = dxlines[iline] */</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     xpos -= (wl - dxlines[iline]) / xderiv;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     <span class="comment">/* Iterate through the lines */</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <span class="keywordflow">for</span> (; !error && iline < nlines; iline++) {</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>         <span class="comment">/* Lines may have a non-physical intensity (e.g. zero) to indicate some</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> <span class="comment">           property of the line, e.g. unknown intensity due to blending */</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         <span class="keywordflow">if</span> (dylines[iline] <= 0.0) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         <span class="comment">/* Use 1st guess, if available (Use 0.0 to flag unavailable) */</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         <span class="keywordflow">if</span> (plinepix != NULL && plinepix[iline] > 0.0) xpos = plinepix[iline];</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> </div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         <span class="keywordflow">if</span> (xpos > xmax) xpos = xmax; <span class="comment">/* FIXME: Better to limit xpos ? */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="comment">/* Find the (sub-) pixel position of the line */</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>         error = cpl_polynomial_set_coeff(dispi, &i0, p0 - dxlines[iline]) ||</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>             cpl_polynomial_solve_1d(dispi, xpos, &xpos, 1);</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> </div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>         <span class="keywordflow">if</span> (xpos > xmax) {</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>             <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>                 error = 0;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"Stopping spectrum fill at line %d/%d "</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                              <span class="stringliteral">"at xpos=%g > xmax=%g"</span>,</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>                              iline, nlines, xpos, xmax);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>                 cpl_errorstate_dump(prestate, CPL_FALSE,</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>                                     <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>                 cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>             }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>             <span class="keywordflow">if</span> (linepix != NULL && ulines) (void)cpl_vector_fill(linepix, 0.0);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>             (void)cpl_error_set_message_macro(cpl_func, cpl_error_get_code(),</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>                                               __FILE__, __LINE__,</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                                               <span class="stringliteral">"Could not find pixel-position "</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                                               <span class="stringliteral">"of line %d/%d at wavelength=%g."</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                                               <span class="stringliteral">" xpos=%g, xmax=%g"</span>,</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                                               iline, nlines, dxlines[iline],</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>                                               xpos, xmax);</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (dofast) {</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> frac  = fabs(xpos - floor(xpos));</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> <span class="preprocessor">#ifdef IRPLIB_WAVECAL_FAST_FAST</span></div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> <span class="preprocessor"></span>            <span class="keyword">const</span> <span class="keywordtype">double</span> frac0 = 1.0 - frac; <span class="comment">/* Weight opposite of distance */</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="preprocessor"></span>            <span class="comment">/* Center intensity correctly */</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> ep1pw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac + 0.5 * wslit, sigma);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> en1pw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac + 0.5 * wslit - 1.0,</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>                                                       sigma);</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> ep1nw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac - 0.5 * wslit, sigma);</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> en1nw = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(frac - 0.5 * wslit - 1.0,</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                                                       sigma);</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> frac0</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                 = (en1nw - en1pw) / (ep1pw - en1pw - ep1nw + en1nw);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="preprocessor"></span>            <span class="keyword">const</span> <span class="keywordtype">double</span> frac1 = 1.0 - frac0;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> yval0 = frac0 * dylines[iline];</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> yval1 = frac1 * dylines[iline];</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>             <span class="keyword">const</span> <span class="keywordtype">int</span>    npix  = 1+(int)xtrunc;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>             <span class="keywordtype">int</span>          ipix;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>             <span class="keywordtype">int</span>          i0n    = hsize - 1 + floor(xpos);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>             <span class="keywordtype">int</span>          i0p    = i0n;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>             <span class="keywordtype">int</span>          i1n    = i0n + 1;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>             <span class="keywordtype">int</span>          i1p    = i1n;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>             cpl_boolean  didline = CPL_FALSE;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> </div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>             <span class="comment">/* Update 1st guess for next time, if available */</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>             <span class="keywordflow">if</span> (plinepix != NULL) plinepix[iline] =  xpos;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>             <span class="keywordflow">if</span> (frac0 < 0.0) {</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>                 (void)cpl_error_set_message_macro(cpl_func,</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>                                                   CPL_ERROR_UNSPECIFIED,</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>                                                   __FILE__, __LINE__,</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>                                                   <span class="stringliteral">"Illegal split at x=%g: %g + "</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>                                                   <span class="stringliteral">"%g = 1"</span>, xpos, frac0, frac1);</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="preprocessor">#ifdef IRPLIB_WAVEVAL_DEBUG</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> <span class="preprocessor"></span>            } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                 cpl_msg_warning(cpl_func,<span class="stringliteral">"profile split at x=%g: %g + %g = 1"</span>,</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>                                 xpos, frac0, frac1);</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="preprocessor"></span>            }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>             <span class="keywordflow">for</span> (ipix = 0; ipix < npix; ipix++, i0n--, i0p++, i1n--, i1p++) {</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>                 <span class="keywordflow">if</span> (i0n >= 0 && i0n < nself) {</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>                     dself[i0n] += yval0 * profile[ipix];</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>                     didline = CPL_TRUE;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>                 }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>                 <span class="keywordflow">if</span> (i1n >= 0 && i1n < nself && ipix + 1 < npix) {</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>                     dself[i1n] += yval1 * profile[ipix+1];</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>                     didline = CPL_TRUE;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>                 }</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>                 <span class="keywordflow">if</span> (ipix == 0) <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>                 <span class="keywordflow">if</span> (i0p >= 0 && i0p < nself) {</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>                     dself[i0p] += yval0 * profile[ipix];</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>                     didline = CPL_TRUE;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>                 }</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>                 <span class="keywordflow">if</span> (i1p >= 0 && i1p < nself && ipix + 1 < npix) {</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>                     dself[i1p] += yval1 * profile[ipix+1];</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>                     didline = CPL_TRUE;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>                 }</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>             }</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> </div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>             <span class="keywordflow">if</span> (didline) ulines++;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> yval = 0.5 * dylines[iline] / wslit;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>             <span class="keyword">const</span> <span class="keywordtype">int</span>    ifirst = IRPLIB_MAX((<span class="keywordtype">int</span>)(xpos-xtrunc+0.5), 1-hsize);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>             <span class="keyword">const</span> <span class="keywordtype">int</span>    ilast  = IRPLIB_MIN((<span class="keywordtype">int</span>)(xpos+xtrunc), nself-hsize);</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>             <span class="keywordtype">int</span>          ipix;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> x0 = (double)ifirst - xpos;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> x0p = x0 + 0.5*wslit - 0.5;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> x0n = x0 - 0.5*wslit - 0.5;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>             <span class="keywordtype">double</span>       x1diff</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>                 = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma)</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>                 - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>             <span class="comment">/* Update 1st guess for next time, if available */</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>             <span class="keywordflow">if</span> (plinepix != NULL) plinepix[iline] =  xpos;</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>             <span class="keywordflow">if</span> (ilast >= ifirst) ulines++;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>             <span class="keywordflow">for</span> (ipix = ifirst; ipix <= ilast; ipix++) {</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = (double)ipix - xpos;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = x1 + 0.5*wslit + 0.5;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = x1 - 0.5*wslit + 0.5;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> x0diff = x1diff;</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>                 x1diff = <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma)</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>                     - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma);</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>                 dself[ipix+hsize-1] += yval * (x1diff - x0diff);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>             }</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>         }</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>     }</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>     cpl_polynomial_delete(dispi);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     <span class="keywordflow">if</span> (erftmp == NULL) cpl_free(profile);</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     cpl_ensure_code(!error, cpl_error_get_code());</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     <span class="keywordflow">if</span> (dolog) {</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>         <span class="keywordflow">for</span> (i = 0; i < nself; i++) {</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>             dself[i] = dself[i] > 0.0 ? log(1.0 + dself[i]) : 0.0;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         }</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>     <span class="keywordflow">if</span> (!ulines) <span class="keywordflow">return</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>                                     __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>                                     <span class="stringliteral">"catalogue has no lines in the range "</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>                                     <span class="stringliteral">"%g -> P(%g)=%g"</span>, nlines, wl, xmax,</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>                                     cpl_polynomial_eval_1d(disp, xmax, NULL));</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>     <span class="keywordflow">if</span> (pulines != NULL) *pulines = ulines;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> }</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f"> 1363</a></span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(<span class="keywordtype">double</span> x, <span class="keywordtype [...]
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> {</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">return</span> x * erf( x / (sigma * CPL_MATH_SQRT2))</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>        + 2.0 * sigma/CPL_MATH_SQRT2PI * exp(-0.5 * x * x / (sigma * sigma));</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> </div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> <span class="preprocessor">#ifdef HAVE_GSL</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="keyword">static</span> <span class="keywordtype">double</span> irplib_gsl_correlation(<span class="keyword">const</span> gsl_vector * <span class="keyword">self</span>, <span class="keywordtype">void</span> * data)</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> {</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     irplib_multimin * mindata = (irplib_multimin *)data;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>     cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>     <span class="keywordtype">int</span> nobs, nmodel, ndiff;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     cpl_size i;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     cpl_ensure(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     cpl_ensure(data != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> </div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>     cpl_ensure(mindata->filler   != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>     cpl_ensure(mindata->observed != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>     cpl_ensure(mindata->spectrum != NULL, CPL_ERROR_NULL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> </div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>     nobs   = cpl_vector_get_size(mindata->observed);</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     nmodel = cpl_vector_get_size(mindata->spectrum);</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>     ndiff  = nmodel - nobs;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     cpl_ensure((ndiff & 1) == 0, CPL_ERROR_ILLEGAL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     cpl_ensure(cpl_vector_get_size(mindata->vxc) == 1 + ndiff,</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>                CPL_ERROR_ILLEGAL_INPUT, GSL_NAN);</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     ndiff /= 2;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keywordflow">for</span> (i=0; i < (cpl_size)self->size; i++) {</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> value = gsl_vector_get(<span class="keyword">self</span>, (<span class="keywordtype">size_t</span>)i);</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>         cpl_polynomial_set_coeff(mindata->disp1d, &i, value);</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     }</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     <span class="comment">/* Shift reference by -ndiff so filler can be used without offset.</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="comment">       The subsequent polynomial shift is reduced by -ndiff. */</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     cpl_ensure_code(!cpl_polynomial_shift_1d(mindata->disp1d, 0, -ndiff),</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>                     cpl_error_get_code());</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     <span class="keywordflow">if</span> (mindata->filler(mindata->spectrum, mindata->disp1d,</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>                         mindata->param)</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>         || !cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>         <span class="comment">/* The fill failed. Ensure the discarding of this candidate by</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="comment">           setting the cross-correlation to its minimum possible value. */</span></div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> </div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>         (void)cpl_vector_fill(mindata->vxc, -1.0);</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>         mindata->maxxc = ndiff;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>         <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"Spectrum fill failed:"</span>);</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>                 cpl_errorstate_dump(prestate, CPL_FALSE,</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>                                     <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>                 cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         }</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> </div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>         mindata->maxxc = cpl_vector_correlate(mindata->vxc,</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>                                               mindata->spectrum,</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>                                               mindata->observed);</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>     }</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="preprocessor">#ifdef IRPLIB_SPC_DUMP</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> <span class="preprocessor"></span>    <span class="comment">/* Need irplib_wavecal.c rev. 1.12 through 1.15 */</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>     irplib_polynomial_dump_corr_step(mindata->disp1d, mindata->vxc,</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>                                      <span class="stringliteral">"Optimize"</span>);</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>     mindata->xc = cpl_vector_get(mindata->vxc, ndiff);</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordflow">if</span> (mindata->maxxc != ndiff &&</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>         cpl_vector_get(mindata->vxc, mindata->maxxc) > mindata->mxc) {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         <span class="keyword">const</span> irplib_base_spectrum_model * arclamp</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>             = (<span class="keyword">const</span> irplib_base_spectrum_model *)mindata->param;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> </div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         if (mindata->mdisp == NULL) {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>             mindata->mdisp = cpl_polynomial_duplicate(mindata->disp1d);</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>             cpl_polynomial_copy(mindata->mdisp, mindata->disp1d);</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         mindata->mxc = cpl_vector_get(mindata->vxc, mindata->maxxc);</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>         mindata->ishift = mindata->maxxc; <span class="comment">/* Offset -ndiff pre-shifted above */</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         cpl_msg_debug(cpl_func, <span class="stringliteral">"Local maximum: %g(%d) > %g(%d) (cost=%u:%u. "</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>                       <span class="stringliteral">"lines=%u)"</span>, mindata->mxc, mindata->maxxc, mindata->xc,</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>                       ndiff, (<span class="keywordtype">unsigned</span>)arclamp->cost, (<span class="keywordtype">unsigned</span>)arclamp->xcost,</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>                       (<span class="keywordtype">unsigned</span>)arclamp->ulines);</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     }</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> </div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="keywordflow">return</span> -mindata->xc;</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> }</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> cpl_error_code</div>
+<div class="line"><a name="l01496"></a><span class="lineno"><a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8"> 1496</a></span> <a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8" title="Modify self by maximizing the cross-correlation across all maxima.">irplib_polynomial_find_1d_from_correlation_all</a>(cpl_polynomial * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>                                                <span class="keywordtype">int</span> maxdeg,</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>                                                <span class="keyword">const</span> cpl_vector * obs,</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>                                                <span class="keywordtype">int</span> nmaxima,</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>                                                <span class="keywordtype">int</span> linelim,</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>                                                irplib_base_spectrum_model* model,</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>                                                cpl_error_code (* filler)</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>                                                (cpl_vector *,</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>                                                 <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>                                                 irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>                                                <span class="keywordtype">double</span> pixtol,</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>                                                <span class="keywordtype">double</span> pixstep,</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>                                                <span class="keywordtype">int</span> hsize,</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>                                                <span class="keywordtype">int</span> maxite,</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>                                                <span class="keywordtype">int</span> maxfail,</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>                                                <span class="keywordtype">int</span> maxcont,</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>                                                cpl_boolean doplot,</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>                                                <span class="keywordtype">double</span> * pxc)</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> {</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="preprocessor">#ifdef HAVE_GSL</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     cpl_errorstate     prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     cpl_polynomial   * start;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     cpl_polynomial   * cand;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     cpl_polynomial   * backup;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     cpl_error_code     error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     <span class="keywordtype">double</span>             xc;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     cpl_bivector     * xtshift = cpl_bivector_new(nmaxima ? nmaxima : 1);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     <span class="keyword">const</span> cpl_vector * xtshiftx = cpl_bivector_get_x_const(xtshift);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>     <span class="keyword">const</span> cpl_vector * xtshifty = cpl_bivector_get_y_const(xtshift);</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     <span class="keywordtype">int</span>                nshift;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     <span class="keywordtype">int</span>                imaximum = -1;</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     <span class="keywordtype">int</span>                imaxima;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> </div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>     cpl_ensure_code(<span class="keyword">self</span>   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>     cpl_ensure_code(obs    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>     cpl_ensure_code(model  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>     cpl_ensure_code(filler != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     cpl_ensure_code(pxc    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>     cpl_ensure_code(cpl_polynomial_get_dimension(<span class="keyword">self</span>) == 1,</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     cpl_ensure_code(cpl_polynomial_get_degree(<span class="keyword">self</span>) > 0,</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>     cpl_ensure_code(maxdeg  >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>     cpl_ensure_code(pixtol  > 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     cpl_ensure_code(pixstep > 0.0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     cpl_ensure_code(hsize   >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     cpl_ensure_code(maxite  >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>     cpl_ensure_code(nmaxima >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>     cpl_ensure_code(maxfail >   0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>     cpl_ensure_code(maxcont >   0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     cpl_ensure_code(linelim >=  0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> </div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="preprocessor">#ifndef HAVE_GSL</span></div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="preprocessor"></span>    <span class="comment">/* Avoid unused variable warning */</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     cpl_ensure_code(doplot == CPL_TRUE || doplot == CPL_FALSE,</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     <span class="keywordflow">return</span> cpl_error_set_message(cpl_func, CPL_ERROR_UNSUPPORTED_MODE,</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>                                  <span class="stringliteral">"GSL is not available"</span>);</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(xtshift, <span class="keyword">self</span>, obs,</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                                                     model, filler,</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>                                                     hsize, doplot, &xc)) {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>         cpl_bivector_delete(xtshift);</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>         <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     }</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>     <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>         <span class="comment">/* The initial, optimal (integer) shift */</span></div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, 0);</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xc0 = cpl_vector_get(xtshifty, 0);</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> </div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"Doing only shift=%g pixels with lines=%u > "</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>                         <span class="stringliteral">"%d and XC=%g"</span>, xxc, (<span class="keywordtype">unsigned</span>)model->ulines, linelim,</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>                         xc0);</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span> </div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>         cpl_polynomial_shift_1d(<span class="keyword">self</span>, 0, xxc);</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>         *pxc = xc0;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> </div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>         cpl_bivector_delete(xtshift);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> </div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>         <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>     }</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> </div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     start  = cpl_polynomial_duplicate(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>     cand   = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>     backup = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> </div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>     <span class="comment">/* Number of (local) maxima to use as starting point of the optimization */</span></div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>     nshift = cpl_bivector_get_size(xtshift);</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>     <span class="keywordflow">if</span> (nmaxima == 0 || nmaxima > nshift) nmaxima = nshift;</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Optimizing %d/%d local shift-maxima "</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>                  <span class="stringliteral">"(no-shift xc=%g. linelim=%d)"</span>, nmaxima, nshift, xc, linelim);</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     <span class="keywordflow">if</span> (cpl_msg_get_level() <= CPL_MSG_DEBUG)</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>         cpl_bivector_dump(xtshift, stdout);</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> </div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     <span class="keywordflow">for</span> (imaxima = 0; imaxima < nmaxima; imaxima++) {</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>         <span class="comment">/* The initial, optimal (integer) shift */</span></div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, imaxima);</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>         <span class="keywordtype">double</span> xtpixstep = pixstep;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>         <span class="keywordtype">double</span> xtpixtol  = pixtol;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>         <span class="keywordtype">double</span> xtxc;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>         cpl_boolean ok = CPL_FALSE;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>         <span class="keywordtype">int</span> nfail;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>         cpl_polynomial_copy(cand, start);</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>         cpl_polynomial_shift_1d(cand, 0, xxc);</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>         cpl_polynomial_copy(backup, cand);</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>         <span class="comment">/* Increase tolerance until convergence */</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>         <span class="keywordflow">for</span> (nfail = 0; nfail < maxfail; nfail++, xtpixtol *= 2.0,</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>                  xtpixstep *= 2.0) {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>             <span class="keywordtype">int</span> restart = maxcont;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>             cpl_boolean redo;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>             <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>                 <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>                     cpl_errorstate_dump(prestate, CPL_FALSE,</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>                                         <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>                     cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>                 }</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>                 error = irplib_polynomial_find_1d_from_correlation_</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>                     (cand, maxdeg, obs, model,</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>                      filler, xtpixtol, xtpixstep, 2,</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>                      maxite, &xtxc, &redo);</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>                 <span class="keywordflow">if</span> (redo && !error) error = CPL_ERROR_CONTINUE;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>             } <span class="keywordflow">while</span> (((!error && redo) || error == CPL_ERROR_CONTINUE)</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>                      && --restart);</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>             <span class="keywordflow">if</span> (!error && !redo) {</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>                 cpl_msg_debug(cpl_func, <span class="stringliteral">"XC(imax=%d/%d:xtpixtol=%g): %g "</span></div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>                               <span class="stringliteral">"(cost=%u:%u)"</span>, 1+imaxima, nmaxima, xtpixtol,</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>                               xtxc, (<span class="keywordtype">unsigned</span>)model->cost,</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>                               (<span class="keywordtype">unsigned</span>)model->xcost);</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>             }</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>             cpl_msg_warning(cpl_func, <span class="stringliteral">"Increasing xtpixtol from %g (%g, imax="</span></div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>                             <span class="stringliteral">"%d/%d)"</span>, xtpixtol, xtpixstep, 1+imaxima, nmaxima);</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>             <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>                 cpl_msg_warning(cpl_func, <span class="stringliteral">"Stopping search-refinement via "</span></div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>                                 <span class="stringliteral">"catalogue with %u lines > %d"</span>,</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>                                 (<span class="keywordtype">unsigned</span>)model->ulines, linelim);</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>             }</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>             cpl_polynomial_copy(cand, start);</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>         }</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> </div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>         <span class="comment">/* Decrease tolerance until divergence, keep previous */</span></div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>         <span class="keywordflow">for</span> (; !error && xtpixtol > 0.0; xtpixtol *= 0.25, xtpixstep *= 0.5) {</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>             <span class="keywordtype">int</span> restart = maxcont;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>             cpl_boolean redo;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>             cpl_polynomial_copy(backup, cand);</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>             <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>                 <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>                     cpl_errorstate_dump(prestate, CPL_FALSE,</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>                                         <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>                     cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>                 }</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>                 error = irplib_polynomial_find_1d_from_correlation_</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>                     (cand, maxdeg, obs, model, filler,</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>                      xtpixtol, xtpixstep, 2, maxite, &xtxc, &redo);</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>                 <span class="keywordflow">if</span> (redo && !error) error = CPL_ERROR_CONTINUE;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>             } <span class="keywordflow">while</span> (((!error && redo) || error == CPL_ERROR_CONTINUE)</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>                      && --restart);</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>             <span class="keywordflow">if</span> (error) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>             ok = CPL_TRUE;</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>             <span class="keywordflow">if</span> (redo) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>             cpl_msg_debug(cpl_func, <span class="stringliteral">"XC(imax=%d/%d:xtpixtol=%g): %g (cost=%u:%u"</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>                           <span class="stringliteral">". ulines=%u)"</span>, 1+imaxima, nmaxima, xtpixtol, xtxc,</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>                           (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>                           (<span class="keywordtype">unsigned</span>)model->ulines);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>             <span class="keywordflow">if</span> (model->ulines > (cpl_size)linelim) {</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>                 cpl_msg_info(cpl_func, <span class="stringliteral">"Stopping search-refinement via "</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>                              <span class="stringliteral">"catalogue with %u lines > %u"</span>,</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>                              (<span class="keywordtype">unsigned</span>)model->ulines, linelim);</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>             }</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>         }</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> </div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>         <span class="keywordflow">if</span> (error) {</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>             error = 0;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>             cpl_errorstate_dump(prestate, CPL_FALSE,</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>                                 <a class="code" href="group__irplib__utils.html#ga26c6209e5df98978e2922a15b47b47d1" title="Dump a single CPL error at the CPL debug level.">irplib_errorstate_dump_debug</a>);</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>             cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>             cpl_polynomial_copy(cand, backup);</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>         }</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>         <span class="keywordflow">if</span> (ok && xtxc > xc) {</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>             imaximum = imaxima;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>             cpl_polynomial_copy(<span class="keyword">self</span>, cand);</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>             xc = xtxc;</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> </div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>             cpl_msg_info(cpl_func, <span class="stringliteral">"XC(imax=%d/%d): %g -> %g (initial-shift=%g. "</span></div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>                          <span class="stringliteral">"cost=%u:%u. lines=%u)"</span>, 1+imaxima, nmaxima,</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>                          cpl_vector_get(xtshifty, imaxima), xtxc,</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>                          cpl_vector_get(xtshiftx, imaxima),</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>                          (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>                          (<span class="keywordtype">unsigned</span>)model->ulines);</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>             cpl_msg_info(cpl_func, <span class="stringliteral">"xc(imax=%d/%d): %g -> %g (initial-shift=%g. "</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>                          <span class="stringliteral">"cost=%u:%u. lines=%u)"</span>, 1+imaxima, nmaxima,</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>                          cpl_vector_get(xtshifty, imaxima), xtxc,</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>                          cpl_vector_get(xtshiftx, imaxima),</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>                          (<span class="keywordtype">unsigned</span>)model->cost, (<span class="keywordtype">unsigned</span>)model->xcost,</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>                          (<span class="keywordtype">unsigned</span>)model->ulines);</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>         }</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     }</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> </div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>     cpl_polynomial_delete(start);</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     cpl_polynomial_delete(backup);</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     cpl_polynomial_delete(cand);</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> </div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     <span class="keywordflow">if</span> (imaximum < 0) {</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>       <span class="comment">/* The initial, optimal (integer) shift */</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xxc = cpl_vector_get(xtshiftx, 0);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xc0 = cpl_vector_get(xtshifty, 0);</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>         error = cpl_error_set_message(cpl_func, CPL_ERROR_DATA_NOT_FOUND,</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>                                       <span class="stringliteral">"Could not improve XC=%g over %d "</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>                                       <span class="stringliteral">"local shift-maxima, best at shift %g"</span>,</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>                                       xc0, nmaxima, xxc);</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>         cpl_msg_info(cpl_func, <span class="stringliteral">"Maximal XC=%g (up from %g, with initial pixel-"</span></div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>                      <span class="stringliteral">"shift of %g) at %d/%d local shift-maximi"</span>, xc,</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>                      cpl_vector_get(xtshifty, imaximum),</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>                      cpl_vector_get(xtshiftx, imaximum),</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>                      1+imaximum, nmaxima);</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> </div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>         <span class="keywordflow">if</span> (doplot) {</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>             <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(obs, <span class="keyword">self</span>, model, filler);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>         }</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>         *pxc = xc;</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     }</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> </div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     cpl_bivector_delete(xtshift);</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> </div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> </div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wavecal_8h_source.html b/html/irplib__wavecal_8h_source.html
index 9295e0a..5d1e09e 100644
--- a/html/irplib__wavecal_8h_source.html
+++ b/html/irplib__wavecal_8h_source.html
@@ -2,193 +2,224 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wavecal.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wavecal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wavecal.h,v 1.18 2012/08/03 21:05:33 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IRPLIB Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/08/03 21:05:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.18 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_WAVECAL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                   Define</span>
-<a name="l00040"></a>00040 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#define IRPLIB_WAVECAL_MODEL_COEFFS       4</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="comment">/* The number of columns is 5 + IRPLIB_WAVECAL_MODEL_COEFFS */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#define IRPLIB_WAVECAL_MODEL_COLS         9</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#define IRPLIB_WAVECAL_LAB_MODE           "SpecMode"</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_RESID          "Residual"</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_ORDER          "Fit_Order"</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_XMIN           "XMin"</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_XMAX           "XMax"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C1             "C_1"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C2             "C_2"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C3             "C_3"</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C4             "C_4"</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define IRPLIB_WAVECAL_LAB_WAVE           "WAVELENGTH"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_INTENS         "INTENSITY"</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                               New Types</span>
-<a name="l00062"></a>00062 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/* Any spectrum model must have these members first! */</span>
-<a name="l00065"></a>00065 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00066"></a>00066     cpl_size             cost;    <span class="comment">/* May be incremented for cost counting */</span>
-<a name="l00067"></a>00067     cpl_size             xcost;   <span class="comment">/* Ditto (can exclude failed fills) */</span>
-<a name="l00068"></a>00068     cpl_size             ulines;  <span class="comment">/* May be set to number of lines used */</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 } irplib_base_spectrum_model;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00073"></a>00073     cpl_size             cost;    <span class="comment">/* May be incremented for cost counting */</span>
-<a name="l00074"></a>00074     cpl_size             xcost;   <span class="comment">/* Ditto (can exclude failed fills) */</span>
-<a name="l00075"></a>00075     cpl_size             ulines;  <span class="comment">/* May be set to number of lines used */</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="keywordtype">double</span>               wslit;  <span class="comment">/* Slit Width */</span>
-<a name="l00078"></a>00078     <span class="keywordtype">double</span>               wfwhm;  <span class="comment">/* FWHM of transfer function */</span>
-<a name="l00079"></a>00079     <span class="keywordtype">double</span>               xtrunc; <span class="comment">/* Truncate transfer function beyond xtrunc,</span>
-<a name="l00080"></a>00080 <span class="comment">                                    xtrunc > 0 */</span>
-<a name="l00081"></a>00081     <span class="keyword">const</span> cpl_bivector * lines;  <span class="comment">/* Catalogue of intensities, with</span>
-<a name="l00082"></a>00082 <span class="comment">                                    increasing X-vector elements */</span>
-<a name="l00083"></a>00083     cpl_vector         * linepix;  <span class="comment">/* Catalogue of line pixel positions</span>
-<a name="l00084"></a>00084 <span class="comment">                                      - zero for uninitialized */</span>
-<a name="l00085"></a>00085     cpl_vector         * erftmp;  <span class="comment">/* Temporary storage for erf() values</span>
-<a name="l00086"></a>00086 <span class="comment">                                      - zero for uninitialized */</span>
-<a name="l00087"></a>00087 } irplib_line_spectrum_model;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00090"></a>00090 <span class="comment">                                   Function Prototypes</span>
-<a name="l00091"></a>00091 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 cpl_error_code
-<a name="l00094"></a>00094 <a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8" title="Modify self by maximizing the cross-correlation across all maxima.">irplib_polynomial_find_1d_from_correlation_all</a>(cpl_polynomial *,
-<a name="l00095"></a>00095                                                <span class="keywordtype">int</span>,
-<a name="l00096"></a>00096                                                <span class="keyword">const</span> cpl_vector *,
-<a name="l00097"></a>00097                                                <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00098"></a>00098                                                irplib_base_spectrum_model *,
-<a name="l00099"></a>00099                                                cpl_error_code (*)
-<a name="l00100"></a>00100                                                (cpl_vector *,
-<a name="l00101"></a>00101                                                 <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00102"></a>00102                                                 irplib_base_spectrum_model *),
-<a name="l00103"></a>00103                                                <span class="keywordtype">double</span>,
-<a name="l00104"></a>00104                                                <span class="keywordtype">double</span>,
-<a name="l00105"></a>00105                                                <span class="keywordtype">int</span>,
-<a name="l00106"></a>00106                                                <span class="keywordtype">int</span>,
-<a name="l00107"></a>00107                                                <span class="keywordtype">int</span>,
-<a name="l00108"></a>00108                                                <span class="keywordtype">int</span>,
-<a name="l00109"></a>00109                                                cpl_boolean,
-<a name="l00110"></a>00110                                                <span class="keywordtype">double</span> *);
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 cpl_error_code
-<a name="l00113"></a>00113 <a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(cpl_bivector *,
-<a name="l00114"></a>00114                                             <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00115"></a>00115                                             <span class="keyword">const</span> cpl_vector *,
-<a name="l00116"></a>00116                                             irplib_base_spectrum_model *,
-<a name="l00117"></a>00117                                             cpl_error_code (*)
-<a name="l00118"></a>00118                                             (cpl_vector *,
-<a name="l00119"></a>00119                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00120"></a>00120                                              irplib_base_spectrum_model *),
-<a name="l00121"></a>00121                                             <span class="keywordtype">int</span>,
-<a name="l00122"></a>00122                                             cpl_boolean,
-<a name="l00123"></a>00123                                             <span class="keywordtype">double</span> *);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 cpl_error_code
-<a name="l00126"></a>00126 <a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56" title="Shift self by the amount that maximizes the cross-correlation.">irplib_polynomial_shift_1d_from_correlation</a>(cpl_polynomial *,
-<a name="l00127"></a>00127                                             <span class="keyword">const</span> cpl_vector *,
-<a name="l00128"></a>00128                                             irplib_base_spectrum_model *,
-<a name="l00129"></a>00129                                             cpl_error_code (*)
-<a name="l00130"></a>00130                                             (cpl_vector *,
-<a name="l00131"></a>00131                                              <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00132"></a>00132                                              irplib_base_spectrum_model *),
-<a name="l00133"></a>00133                                             <span class="keywordtype">int</span>, cpl_boolean, <span class="keywordtype">double</span> *);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 cpl_error_code
-<a name="l00136"></a>00136 <a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86" title="Modify self by maximizing the cross-correlation.">irplib_polynomial_find_1d_from_correlation</a>(cpl_polynomial *, <span class="keywordtype">int</span>,
-<a name="l00137"></a>00137                                            <span class="keyword">const</span> cpl_vector *,
-<a name="l00138"></a>00138                                            irplib_base_spectrum_model *,
-<a name="l00139"></a>00139                                            cpl_error_code (*)
-<a name="l00140"></a>00140                                            (cpl_vector *,
-<a name="l00141"></a>00141                                             <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00142"></a>00142                                             irplib_base_spectrum_model *),
-<a name="l00143"></a>00143                                            <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00144"></a>00144                                            <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a>(cpl_vector *,
-<a name="l00147"></a>00147                                                 <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00148"></a>00148                                                 irplib_base_spectrum_model *);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 cpl_error_code <a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum</a>(cpl_vector *,
-<a name="l00151"></a>00151                                                    <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00152"></a>00152                                                    irplib_base_spectrum_model *);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 cpl_error_code
-<a name="l00155"></a>00155 <a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast</a>(cpl_vector *,
-<a name="l00156"></a>00156                                       <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00157"></a>00157                                       irplib_base_spectrum_model *);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 cpl_error_code
-<a name="l00160"></a>00160 <a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum_fast</a>(cpl_vector *,
-<a name="l00161"></a>00161                                          <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00162"></a>00162                                          irplib_base_spectrum_model *);
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(<span class="keyword">const</span> cpl_vector *,
-<a name="l00165"></a>00165                                               <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00166"></a>00166                                               irplib_base_spectrum_model *,
-<a name="l00167"></a>00167                                               cpl_error_code (*)
-<a name="l00168"></a>00168                                               (cpl_vector *,
-<a name="l00169"></a>00169                                                <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00170"></a>00170                                                irplib_base_spectrum_model *));
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb" title="Fit a 2D-dispersion from an image of wavelengths.">irplib_polynomial_fit_2d_dispersion</a>(cpl_polynomial *,
-<a name="l00173"></a>00173                                                    <span class="keyword">const</span> cpl_image *,
-<a name="l00174"></a>00174                                                    <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="keywordtype">int</span> <a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25" title="Count the positive Y-entries in a given X-range.">irplib_bivector_count_positive</a>(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wavecal.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wavecal.h,v 1.18 2012/08/03 21:05:33 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IRPLIB Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/08/03 21:05:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.18 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_WAVECAL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define IRPLIB_WAVECAL_MODEL_COEFFS       4</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="comment">/* The number of columns is 5 + IRPLIB_WAVECAL_MODEL_COEFFS */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#define IRPLIB_WAVECAL_MODEL_COLS         9</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#define IRPLIB_WAVECAL_LAB_MODE           "SpecMode"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_RESID          "Residual"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_ORDER          "Fit_Order"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_XMIN           "XMin"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_XMAX           "XMax"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C1             "C_1"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C2             "C_2"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C3             "C_3"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_C4             "C_4"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define IRPLIB_WAVECAL_LAB_WAVE           "WAVELENGTH"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_LAB_INTENS         "INTENSITY"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                               New Types</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/* Any spectrum model must have these members first! */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     cpl_size             cost;    <span class="comment">/* May be incremented for cost counting */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     cpl_size             xcost;   <span class="comment">/* Ditto (can exclude failed fills) */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     cpl_size             ulines;  <span class="comment">/* May be set to number of lines used */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> } irplib_base_spectrum_model;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     cpl_size             cost;    <span class="comment">/* May be incremented for cost counting */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     cpl_size             xcost;   <span class="comment">/* Ditto (can exclude failed fills) */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     cpl_size             ulines;  <span class="comment">/* May be set to number of lines used */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordtype">double</span>               wslit;  <span class="comment">/* Slit Width */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordtype">double</span>               wfwhm;  <span class="comment">/* FWHM of transfer function */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordtype">double</span>               xtrunc; <span class="comment">/* Truncate transfer function beyond xtrunc,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                                    xtrunc > 0 */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keyword">const</span> cpl_bivector * lines;  <span class="comment">/* Catalogue of intensities, with</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">                                    increasing X-vector elements */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_vector         * linepix;  <span class="comment">/* Catalogue of line pixel positions</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">                                      - zero for uninitialized */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_vector         * erftmp;  <span class="comment">/* Temporary storage for erf() values</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                                      - zero for uninitialized */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> } irplib_line_spectrum_model;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">                                   Function Prototypes</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> cpl_error_code</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <a class="code" href="group__irplib__wavecal.html#ga7e782bcb7ec0e638a93dba628916a7a8" title="Modify self by maximizing the cross-correlation across all maxima.">irplib_polynomial_find_1d_from_correlation_all</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                                <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                                                <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                                                irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                                                cpl_error_code (*)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                                (cpl_vector *,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                                 <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                                 irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                                <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                                <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                                                <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                                                cpl_boolean,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                                <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> cpl_error_code</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <a class="code" href="group__irplib__wavecal.html#ga260740bf1f3fc364b301519eab3249a6" title="Find shift(s) that maximizes (locally) the cross-correlation.">irplib_bivector_find_shift_from_correlation</a>(cpl_bivector *,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                                             <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                             <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                                             irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                                             cpl_error_code (*)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                             <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                                             cpl_boolean,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                                             <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> cpl_error_code</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <a class="code" href="group__irplib__wavecal.html#gadf93655e2c7c0d5df23e2e3de66d0b56" title="Shift self by the amount that maximizes the cross-correlation.">irplib_polynomial_shift_1d_from_correlation</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                             <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                                             irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                             cpl_error_code (*)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                                             (cpl_vector *,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                                              <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                                              irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                                             <span class="keywordtype">int</span>, cpl_boolean, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> cpl_error_code</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <a class="code" href="group__irplib__wavecal.html#ga8f49c4927c50a461288e8f19720dff86" title="Modify self by maximizing the cross-correlation.">irplib_polynomial_find_1d_from_correlation</a>(cpl_polynomial *, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                            <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                                            irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                                            cpl_error_code (*)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                                            (cpl_vector *,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                                             <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                                             irplib_base_spectrum_model *),</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                                            <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                            <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga1d49cb7f85fc246c8fdf38625c769f7a" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum</a>(cpl_vector *,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                                 <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                                 irplib_base_spectrum_model *);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#gad22539bf83d1b08d845ed5f618a4009f" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum</a>(cpl_vector *,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                                    <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                                    irplib_base_spectrum_model *);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> cpl_error_code</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <a class="code" href="group__irplib__wavecal.html#ga6a463d7816b4164fdd23a4df2805cc95" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_line_spectrum_fast</a>(cpl_vector *,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                       <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                       irplib_base_spectrum_model *);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> cpl_error_code</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <a class="code" href="group__irplib__wavecal.html#ga75a85320c74d1088eeaeec97974d793c" title="Generate a 1D spectrum from a model and a dispersion relation.">irplib_vector_fill_logline_spectrum_fast</a>(cpl_vector *,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                          <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                          irplib_base_spectrum_model *);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga7bac402a4e2c60f7646f1e655a66833d" title="Plot a 1D spectrum and one from a model.">irplib_plot_spectrum_and_model</a>(<span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                               <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                               irplib_base_spectrum_model *,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                               cpl_error_code (*)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                                               (cpl_vector *,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                                <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                                                irplib_base_spectrum_model *));</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga2dd3251367e2ee8b8bd5ce080e9f31bb" title="Fit a 2D-dispersion from an image of wavelengths.">irplib_polynomial_fit_2d_dispersion</a>(cpl_polynomial *,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                                                    <span class="keyword">const</span> cpl_image *,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                                    <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keywordtype">int</span> <a class="code" href="group__irplib__wavecal.html#ga03d7f038adc7e18e7a9071581fa47a25" title="Count the positive Y-entries in a given X-range.">irplib_bivector_count_positive</a>(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wavecal__impl_8h_source.html b/html/irplib__wavecal__impl_8h_source.html
index 6f46262..5bd1b2b 100644
--- a/html/irplib__wavecal__impl_8h_source.html
+++ b/html/irplib__wavecal__impl_8h_source.html
@@ -2,71 +2,102 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wavecal_impl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wavecal_impl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wavecal_impl.h,v 1.7 2012/08/03 21:05:34 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IRPLIB Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/08/03 21:05:34 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_WAVECAL_IMPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_IMPL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "irplib_wavecal.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                             Private Function Prototypes</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(cpl_vector *,
-<a name="l00042"></a>00042                                                       cpl_vector *,
-<a name="l00043"></a>00043                                                       cpl_vector *,
-<a name="l00044"></a>00044                                                       <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00045"></a>00045                                                       <span class="keyword">const</span> cpl_bivector *,
-<a name="l00046"></a>00046                                                       <span class="keywordtype">double</span>,
-<a name="l00047"></a>00047                                                       <span class="keywordtype">double</span>,
-<a name="l00048"></a>00048                                                       <span class="keywordtype">double</span>,
-<a name="l00049"></a>00049                                                       <span class="keywordtype">int</span>,
-<a name="l00050"></a>00050                                                       cpl_boolean,
-<a name="l00051"></a>00051                                                       cpl_boolean,
-<a name="l00052"></a>00052                                                       cpl_size *);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">double</span> <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wavecal_impl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wavecal_impl.h,v 1.7 2012/08/03 21:05:34 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IRPLIB Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/08/03 21:05:34 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_WAVECAL_IMPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WAVECAL_IMPL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "irplib_wavecal.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                             Private Function Prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> cpl_error_code <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(cpl_vector *,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                                                       cpl_vector *,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                                                       cpl_vector *,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                                                       <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                                                       <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                                                       <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                                                       <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                                                       <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                                                       <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                                                       cpl_boolean,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                                                       cpl_boolean,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                                                       cpl_size *);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">double</span> <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wcs_8c_source.html b/html/irplib__wcs_8c_source.html
index 32bc206..504ec9e 100644
--- a/html/irplib__wcs_8c_source.html
+++ b/html/irplib__wcs_8c_source.html
@@ -2,310 +2,341 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wcs.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wcs.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wcs.c,v 1.8 2010/10/07 14:10:55 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2010/10/07 14:10:55 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_wcs.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="keyword">static</span> cpl_error_code irplib_wcs_is_iso8601(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);
-<a name="l00048"></a>00048 
-<a name="l00051"></a>00051 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 cpl_error_code irplib_wcs_xytoradec(<span class="keyword">const</span> cpl_wcs *wcs,
-<a name="l00064"></a>00064                                     <span class="keywordtype">double</span>         x,
-<a name="l00065"></a>00065                                     <span class="keywordtype">double</span>         y,
-<a name="l00066"></a>00066                                     <span class="keywordtype">double</span>        *ra,
-<a name="l00067"></a>00067                                     <span class="keywordtype">double</span>        *dec)
-<a name="l00068"></a>00068 {
-<a name="l00069"></a>00069     cpl_matrix   * xy;
-<a name="l00070"></a>00070     cpl_matrix   * radec  = NULL;
-<a name="l00071"></a>00071     cpl_array    * status = NULL;
-<a name="l00072"></a>00072     cpl_error_code error;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     cpl_ensure_code(ra  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00075"></a>00075     cpl_ensure_code(dec != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="comment">/* Load up the information */</span>
-<a name="l00078"></a>00078     xy = cpl_matrix_new(1, 2);
-<a name="l00079"></a>00079     cpl_matrix_set(xy, 0, 0, x);
-<a name="l00080"></a>00080     cpl_matrix_set(xy, 0, 1, y);
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     <span class="comment">/* Call the conversion routine */</span>
-<a name="l00083"></a>00083     error = cpl_wcs_convert(wcs, xy, &radec, &status, CPL_WCS_PHYS2WORLD);
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     cpl_matrix_delete(xy);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     <span class="keywordflow">if</span> (!error) {
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089         <span class="comment">/* Pass it back now */</span>
-<a name="l00090"></a>00090         *ra  = cpl_matrix_get(radec, 0, 0);
-<a name="l00091"></a>00091         *dec = cpl_matrix_get(radec, 0, 1);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     <span class="comment">/* Tidy and propagate error, if any */</span>
-<a name="l00096"></a>00096     cpl_matrix_delete(radec);
-<a name="l00097"></a>00097     cpl_array_delete(status);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00100"></a>00100 }
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 cpl_error_code irplib_wcs_radectoxy(<span class="keyword">const</span> cpl_wcs * wcs,
-<a name="l00115"></a>00115                                     <span class="keywordtype">double</span>          ra,
-<a name="l00116"></a>00116                                     <span class="keywordtype">double</span>          dec,
-<a name="l00117"></a>00117                                     <span class="keywordtype">double</span>        * x,
-<a name="l00118"></a>00118                                     <span class="keywordtype">double</span>        * y)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120     cpl_matrix   * radec;
-<a name="l00121"></a>00121     cpl_matrix   * xy = NULL;
-<a name="l00122"></a>00122     cpl_array    * status   = NULL;
-<a name="l00123"></a>00123     cpl_error_code error;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125     cpl_ensure_code(x != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00126"></a>00126     cpl_ensure_code(y != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="comment">/* Feed the matrix with RA, DEC */</span>
-<a name="l00129"></a>00129     radec = cpl_matrix_new(1, 2);
-<a name="l00130"></a>00130     cpl_matrix_set(radec, 0, 0, ra);
-<a name="l00131"></a>00131     cpl_matrix_set(radec, 0, 1, dec);
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     error = cpl_wcs_convert(wcs, radec, &xy, &status, CPL_WCS_WORLD2PHYS);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     cpl_matrix_delete(radec);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (!error) {
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139         *x  = cpl_matrix_get(xy, 0, 0);
-<a name="l00140"></a>00140         *y  = cpl_matrix_get(xy, 0, 1);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="comment">/* Tidy and propagate error, if any */</span>
-<a name="l00145"></a>00145     cpl_array_delete(status);
-<a name="l00146"></a>00146     cpl_matrix_delete(xy);
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00162"></a>00162 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00163"></a>00163 <span class="keywordtype">double</span> irplib_wcs_great_circle_dist(<span class="keywordtype">double</span> ra1,
-<a name="l00164"></a>00164                                     <span class="keywordtype">double</span> dec1,
-<a name="l00165"></a>00165                                     <span class="keywordtype">double</span> ra2,
-<a name="l00166"></a>00166                                     <span class="keywordtype">double</span> dec2)
-<a name="l00167"></a>00167 {
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="comment">/* Convert all input from degrees to radian - and back for the result */</span>
-<a name="l00170"></a>00170     <span class="keyword">const</span> <span class="keywordtype">double</span> dra  = sin( CPL_MATH_RAD_DEG * (ra2  - ra1 )/2.0 );
-<a name="l00171"></a>00171     <span class="keyword">const</span> <span class="keywordtype">double</span> ddec = sin( CPL_MATH_RAD_DEG * (dec2 - dec1)/2.0 );
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     dec1 *= CPL_MATH_RAD_DEG;
-<a name="l00174"></a>00174     dec2 *= CPL_MATH_RAD_DEG;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="keywordflow">return</span> 2.0 * asin(sqrt( ddec*ddec + cos(dec1)*cos(dec2)*dra*dra))
-<a name="l00177"></a>00177         * CPL_MATH_DEG_RAD;
-<a name="l00178"></a>00178 }
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00195"></a>00195 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00196"></a>00196 cpl_error_code irplib_wcs_mjd_from_iso8601(<span class="keywordtype">double</span> * pmjd, <span class="keywordtype">int</span> year, <span class="keywordtype">int</span> month,
-<a name="l00197"></a>00197                                            <span class="keywordtype">int</span> day, <span class="keywordtype">int</span> hour, <span class="keywordtype">int</span> minute,
-<a name="l00198"></a>00198                                            <span class="keywordtype">double</span> second)
-<a name="l00199"></a>00199 {
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     cpl_ensure_code(pmjd  != NULL,        CPL_ERROR_NULL_INPUT);
-<a name="l00202"></a>00202     cpl_ensure_code(!irplib_wcs_is_iso8601(year, month, day, hour, minute,
-<a name="l00203"></a>00203                                            second), cpl_error_get_code());
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="comment">/* Compute MJD. */</span>
-<a name="l00206"></a>00206     *pmjd = (double)((1461*(year - (12-month)/10 + 4712))/4
-<a name="l00207"></a>00207                      + (306*((month+9)%12) + 5)/10
-<a name="l00208"></a>00208                      - (3*((year - (12-month)/10 + 4900)/100))/4
-<a name="l00209"></a>00209                      + day - 2399904)
-<a name="l00210"></a>00210         + (hour + (minute + second/60.0)/60.0)/24.0;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00233"></a>00233 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00234"></a>00234 cpl_error_code irplib_wcs_iso8601_from_string(<span class="keywordtype">int</span> * pyear, <span class="keywordtype">int</span> * pmonth,
-<a name="l00235"></a>00235                                               <span class="keywordtype">int</span> * pday, <span class="keywordtype">int</span> * phour,
-<a name="l00236"></a>00236                                               <span class="keywordtype">int</span> * pminute, <span class="keywordtype">double</span> * psecond,
-<a name="l00237"></a>00237                                               <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601)
-<a name="l00238"></a>00238 {
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240     <span class="comment">/* Standard year-2000 form: CCYY-MM-DD[Thh:mm:ss[.sss...]] */</span>
-<a name="l00241"></a>00241     <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601format = <span class="stringliteral">"%4d-%2d-%2dT%2d:%2d:%lf"</span>;
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     cpl_ensure_code(pyear   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00244"></a>00244     cpl_ensure_code(pmonth  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00245"></a>00245     cpl_ensure_code(pday    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00246"></a>00246     cpl_ensure_code(phour   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00247"></a>00247     cpl_ensure_code(pminute != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00248"></a>00248     cpl_ensure_code(psecond != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00249"></a>00249     cpl_ensure_code(iso8601 != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     cpl_error_ensure(sscanf(iso8601, iso8601format, pyear, pmonth,
-<a name="l00252"></a>00252                             pday, phour, pminute, psecond) == 6,
-<a name="l00253"></a>00253                      CPL_ERROR_ILLEGAL_INPUT, <span class="keywordflow">return</span> cpl_error_get_code(),
-<a name="l00254"></a>00254                      <span class="stringliteral">"%s is not formatted as %s"</span>, iso8601, iso8601format);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     cpl_ensure_code(!irplib_wcs_is_iso8601(*pyear, *pmonth, *pday, *phour,
-<a name="l00257"></a>00257                                            *pminute, *psecond),
-<a name="l00258"></a>00258                     cpl_error_get_code());
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00273"></a>00273 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00274"></a>00274 cpl_error_code irplib_wcs_mjd_from_string(<span class="keywordtype">double</span> * pmjd, <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601)
-<a name="l00275"></a>00275 {
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     <span class="keywordtype">int</span> year, day, month, hour, minute;
-<a name="l00279"></a>00279     <span class="keywordtype">double</span> second;
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> irplib_wcs_iso8601_from_string(&year, &month, &day, &hour,
-<a name="l00282"></a>00282                                           &minute, &second, iso8601)
-<a name="l00283"></a>00283         || irplib_wcs_mjd_from_iso8601(pmjd, year, month, day, hour, minute,
-<a name="l00284"></a>00284                                        second)
-<a name="l00285"></a>00285         ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;
-<a name="l00286"></a>00286 }
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00304"></a>00304 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00305"></a>00305 cpl_error_code irplib_wcs_iso8601_from_mjd(<span class="keywordtype">int</span> * pyear, <span class="keywordtype">int</span> * pmonth,
-<a name="l00306"></a>00306                                            <span class="keywordtype">int</span> * pday, <span class="keywordtype">int</span> * phour,
-<a name="l00307"></a>00307                                            <span class="keywordtype">int</span> * pminute, <span class="keywordtype">double</span> * psecond,
-<a name="l00308"></a>00308                                            <span class="keywordtype">double</span> mjd)
-<a name="l00309"></a>00309 {
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     <span class="keywordtype">int</span> jd, n4, dd;
-<a name="l00312"></a>00312     <span class="keywordtype">double</span> t;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314     cpl_ensure_code(pyear   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00315"></a>00315     cpl_ensure_code(pmonth  != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00316"></a>00316     cpl_ensure_code(pday    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00317"></a>00317     cpl_ensure_code(phour   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00318"></a>00318     cpl_ensure_code(pminute != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00319"></a>00319     cpl_ensure_code(psecond != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     <span class="comment">/* Copied from datfix() in wcslib (v. 4.4.4) */</span>
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323     jd = 2400001 + (int)mjd;
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     n4 =  4*(jd + ((2*((4*jd - 17918)/146097)*3)/4 + 1)/2 - 37);
-<a name="l00326"></a>00326     dd = 10*(((n4-237)%1461)/4) + 5;
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     *pyear  = n4/1461 - 4712;
-<a name="l00329"></a>00329     *pmonth = (2 + dd/306)%12 + 1;
-<a name="l00330"></a>00330     *pday   = (dd%306)/10 + 1;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332     t = mjd - (int)mjd; <span class="comment">/* t is now days */</span>
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     t *= 24.0; <span class="comment">/* t is now hours */</span>
-<a name="l00335"></a>00335     *phour = (int)t;
-<a name="l00336"></a>00336     t = 60.0 * (t - *phour); <span class="comment">/* t is now minutes */</span>
-<a name="l00337"></a>00337     *pminute = (int)t;
-<a name="l00338"></a>00338     *psecond = 60.0 * (t - *pminute);
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="comment">/* A failure here implies that this code has a bug */</span>
-<a name="l00341"></a>00341     cpl_ensure_code(!irplib_wcs_is_iso8601(*pyear, *pmonth, *pday, *phour,
-<a name="l00342"></a>00342                                            *pminute, *psecond),
-<a name="l00343"></a>00343                     CPL_ERROR_UNSPECIFIED);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00346"></a>00346 }
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00351"></a>00351 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00363"></a>00363 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00364"></a>00364 <span class="keyword">static</span> cpl_error_code irplib_wcs_is_iso8601(<span class="keywordtype">int</span> year, <span class="keywordtype">int</span> month,
-<a name="l00365"></a>00365                                             <span class="keywordtype">int</span> day, <span class="keywordtype">int</span> hour,
-<a name="l00366"></a>00366                                             <span class="keywordtype">int</span> minute, <span class="keywordtype">double</span> second)
-<a name="l00367"></a>00367 {
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369     <span class="keyword">const</span> cpl_boolean is_leap = year % 4 ? CPL_FALSE : CPL_TRUE;
-<a name="l00370"></a>00370     <span class="keyword">const</span> <span class="keywordtype">int</span> mlen[] = {0, 31, is_leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30,
-<a name="l00371"></a>00371                         31, 30, 31};
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373     cpl_ensure_code(month > 0,            CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00374"></a>00374     cpl_ensure_code(month <= 12,          CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     cpl_ensure_code(day   > 0,            CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00377"></a>00377     cpl_ensure_code(day   <= mlen[month], CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     cpl_ensure_code(minute  < 60,         CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00380"></a>00380     cpl_ensure_code(minute  >= 0,         CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382     cpl_ensure_code(second  < 60.0,       CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00383"></a>00383     cpl_ensure_code(second  >= 0.0,       CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     cpl_ensure_code(hour  >= 0,           CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00386"></a>00386     <span class="comment">/* 24:00:00 is valid ISO-8601 */</span>
-<a name="l00387"></a>00387     cpl_ensure_code(hour  <= (minute > 0 || second > 0.0 ? 23 : 24),
-<a name="l00388"></a>00388                     CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00391"></a>00391 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wcs.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wcs.c,v 1.8 2010/10/07 14:10:55 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2010/10/07 14:10:55 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_wcs.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> cpl_error_code irplib_wcs_is_iso8601(<span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> cpl_error_code irplib_wcs_xytoradec(<span class="keyword">const</span> cpl_wcs *wcs,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                                     <span class="keywordtype">double</span>         x,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                                     <span class="keywordtype">double</span>         y,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                                     <span class="keywordtype">double</span>        *ra,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                                     <span class="keywordtype">double</span>        *dec)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     cpl_matrix   * xy;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_matrix   * radec  = NULL;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     cpl_array    * status = NULL;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     cpl_ensure_code(ra  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     cpl_ensure_code(dec != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="comment">/* Load up the information */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     xy = cpl_matrix_new(1, 2);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     cpl_matrix_set(xy, 0, 0, x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     cpl_matrix_set(xy, 0, 1, y);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="comment">/* Call the conversion routine */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     error = cpl_wcs_convert(wcs, xy, &radec, &status, CPL_WCS_PHYS2WORLD);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_matrix_delete(xy);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="comment">/* Pass it back now */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         *ra  = cpl_matrix_get(radec, 0, 0);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         *dec = cpl_matrix_get(radec, 0, 1);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="comment">/* Tidy and propagate error, if any */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_matrix_delete(radec);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_array_delete(status);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> cpl_error_code irplib_wcs_radectoxy(<span class="keyword">const</span> cpl_wcs * wcs,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                     <span class="keywordtype">double</span>          ra,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                                     <span class="keywordtype">double</span>          dec,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                                     <span class="keywordtype">double</span>        * x,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                     <span class="keywordtype">double</span>        * y)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_matrix   * radec;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_matrix   * xy = NULL;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_array    * status   = NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     cpl_error_code error;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     cpl_ensure_code(x != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     cpl_ensure_code(y != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="comment">/* Feed the matrix with RA, DEC */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     radec = cpl_matrix_new(1, 2);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     cpl_matrix_set(radec, 0, 0, ra);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     cpl_matrix_set(radec, 0, 1, dec);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     error = cpl_wcs_convert(wcs, radec, &xy, &status, CPL_WCS_WORLD2PHYS);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_matrix_delete(radec);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span> (!error) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         *x  = cpl_matrix_get(xy, 0, 0);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         *y  = cpl_matrix_get(xy, 0, 1);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="comment">/* Tidy and propagate error, if any */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_array_delete(status);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_matrix_delete(xy);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">return</span> cpl_error_set_where(cpl_func);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">double</span> irplib_wcs_great_circle_dist(<span class="keywordtype">double</span> ra1,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                                     <span class="keywordtype">double</span> dec1,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                     <span class="keywordtype">double</span> ra2,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                     <span class="keywordtype">double</span> dec2)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">/* Convert all input from degrees to radian - and back for the result */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> dra  = sin( CPL_MATH_RAD_DEG * (ra2  - ra1 )/2.0 );</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> ddec = sin( CPL_MATH_RAD_DEG * (dec2 - dec1)/2.0 );</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     dec1 *= CPL_MATH_RAD_DEG;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     dec2 *= CPL_MATH_RAD_DEG;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">return</span> 2.0 * asin(sqrt( ddec*ddec + cos(dec1)*cos(dec2)*dra*dra))</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         * CPL_MATH_DEG_RAD;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> cpl_error_code irplib_wcs_mjd_from_iso8601(<span class="keywordtype">double</span> * pmjd, <span class="keywordtype">int</span> year, <span class="keywordtype">int</span> month,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                            <span class="keywordtype">int</span> day, <span class="keywordtype">int</span> hour, <span class="keywordtype">int</span> minute,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                            <span class="keywordtype">double</span> second)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cpl_ensure_code(pmjd  != NULL,        CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_ensure_code(!irplib_wcs_is_iso8601(year, month, day, hour, minute,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                            second), cpl_error_get_code());</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* Compute MJD. */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     *pmjd = (double)((1461*(year - (12-month)/10 + 4712))/4</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                      + (306*((month+9)%12) + 5)/10</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                      - (3*((year - (12-month)/10 + 4900)/100))/4</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                      + day - 2399904)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         + (hour + (minute + second/60.0)/60.0)/24.0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> cpl_error_code irplib_wcs_iso8601_from_string(<span class="keywordtype">int</span> * pyear, <span class="keywordtype">int</span> * pmonth,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                                               <span class="keywordtype">int</span> * pday, <span class="keywordtype">int</span> * phour,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                                               <span class="keywordtype">int</span> * pminute, <span class="keywordtype">double</span> * psecond,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                                               <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="comment">/* Standard year-2000 form: CCYY-MM-DD[Thh:mm:ss[.sss...]] */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601format = <span class="stringliteral">"%4d-%2d-%2dT%2d:%2d:%lf"</span>;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     cpl_ensure_code(pyear   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_ensure_code(pmonth  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     cpl_ensure_code(pday    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_ensure_code(phour   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     cpl_ensure_code(pminute != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     cpl_ensure_code(psecond != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     cpl_ensure_code(iso8601 != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     cpl_error_ensure(sscanf(iso8601, iso8601format, pyear, pmonth,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                             pday, phour, pminute, psecond) == 6,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                      CPL_ERROR_ILLEGAL_INPUT, <span class="keywordflow">return</span> cpl_error_get_code(),</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                      <span class="stringliteral">"%s is not formatted as %s"</span>, iso8601, iso8601format);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cpl_ensure_code(!irplib_wcs_is_iso8601(*pyear, *pmonth, *pday, *phour,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                                            *pminute, *psecond),</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                     cpl_error_get_code());</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> cpl_error_code irplib_wcs_mjd_from_string(<span class="keywordtype">double</span> * pmjd, <span class="keyword">const</span> <span class="keywordtype">char</span> * iso8601)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="keywordtype">int</span> year, day, month, hour, minute;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordtype">double</span> second;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">return</span> irplib_wcs_iso8601_from_string(&year, &month, &day, &hour,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                           &minute, &second, iso8601)</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         || irplib_wcs_mjd_from_iso8601(pmjd, year, month, day, hour, minute,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                                        second)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         ? cpl_error_set_where(cpl_func) : CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> cpl_error_code irplib_wcs_iso8601_from_mjd(<span class="keywordtype">int</span> * pyear, <span class="keywordtype">int</span> * pmonth,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                            <span class="keywordtype">int</span> * pday, <span class="keywordtype">int</span> * phour,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                            <span class="keywordtype">int</span> * pminute, <span class="keywordtype">double</span> * psecond,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                            <span class="keywordtype">double</span> mjd)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordtype">int</span> jd, n4, dd;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">double</span> t;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     cpl_ensure_code(pyear   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     cpl_ensure_code(pmonth  != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_ensure_code(pday    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     cpl_ensure_code(phour   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     cpl_ensure_code(pminute != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     cpl_ensure_code(psecond != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="comment">/* Copied from datfix() in wcslib (v. 4.4.4) */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     jd = 2400001 + (int)mjd;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     n4 =  4*(jd + ((2*((4*jd - 17918)/146097)*3)/4 + 1)/2 - 37);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     dd = 10*(((n4-237)%1461)/4) + 5;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     *pyear  = n4/1461 - 4712;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     *pmonth = (2 + dd/306)%12 + 1;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     *pday   = (dd%306)/10 + 1;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     t = mjd - (int)mjd; <span class="comment">/* t is now days */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     t *= 24.0; <span class="comment">/* t is now hours */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     *phour = (int)t;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     t = 60.0 * (t - *phour); <span class="comment">/* t is now minutes */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     *pminute = (int)t;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     *psecond = 60.0 * (t - *pminute);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="comment">/* A failure here implies that this code has a bug */</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     cpl_ensure_code(!irplib_wcs_is_iso8601(*pyear, *pmonth, *pday, *phour,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                                            *pminute, *psecond),</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                     CPL_ERROR_UNSPECIFIED);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="keyword">static</span> cpl_error_code irplib_wcs_is_iso8601(<span class="keywordtype">int</span> year, <span class="keywordtype">int</span> month,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                             <span class="keywordtype">int</span> day, <span class="keywordtype">int</span> hour,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                             <span class="keywordtype">int</span> minute, <span class="keywordtype">double</span> second)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keyword">const</span> cpl_boolean is_leap = year % 4 ? CPL_FALSE : CPL_TRUE;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> mlen[] = {0, 31, is_leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                         31, 30, 31};</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_ensure_code(month > 0,            CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     cpl_ensure_code(month <= 12,          CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     cpl_ensure_code(day   > 0,            CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     cpl_ensure_code(day   <= mlen[month], CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     cpl_ensure_code(minute  < 60,         CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     cpl_ensure_code(minute  >= 0,         CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     cpl_ensure_code(second  < 60.0,       CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     cpl_ensure_code(second  >= 0.0,       CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     cpl_ensure_code(hour  >= 0,           CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="comment">/* 24:00:00 is valid ISO-8601 */</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     cpl_ensure_code(hour  <= (minute > 0 || second > 0.0 ? 23 : 24),</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                     CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wcs_8h_source.html b/html/irplib__wcs_8h_source.html
index 09899ca..5ee063b 100644
--- a/html/irplib__wcs_8h_source.html
+++ b/html/irplib__wcs_8h_source.html
@@ -2,81 +2,112 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wcs.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wcs.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wcs.h,v 1.7 2010/10/07 14:10:55 llundin Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: llundin $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2010/10/07 14:10:55 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_WCS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WCS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_error_code irplib_wcs_xytoradec(<span class="keyword">const</span> cpl_wcs * wcs,
-<a name="l00038"></a>00038                                     <span class="keywordtype">double</span>          x,
-<a name="l00039"></a>00039                                     <span class="keywordtype">double</span>          y,
-<a name="l00040"></a>00040                                     <span class="keywordtype">double</span>        * ra,
-<a name="l00041"></a>00041                                     <span class="keywordtype">double</span>        * dec);
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 cpl_error_code irplib_wcs_radectoxy(<span class="keyword">const</span> cpl_wcs * wcs,
-<a name="l00044"></a>00044                                     <span class="keywordtype">double</span>          ra,
-<a name="l00045"></a>00045                                     <span class="keywordtype">double</span>          dec,
-<a name="l00046"></a>00046                                     <span class="keywordtype">double</span>        * x,
-<a name="l00047"></a>00047                                     <span class="keywordtype">double</span>        * y);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keywordtype">double</span> irplib_wcs_great_circle_dist(<span class="keywordtype">double</span> ra1,
-<a name="l00050"></a>00050                                     <span class="keywordtype">double</span> dec1,
-<a name="l00051"></a>00051                                     <span class="keywordtype">double</span> ra2,
-<a name="l00052"></a>00052                                     <span class="keywordtype">double</span> dec2);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 cpl_error_code irplib_wcs_iso8601_from_string(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
-<a name="l00056"></a>00056                                               <span class="keywordtype">double</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 cpl_error_code irplib_wcs_mjd_from_iso8601(<span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,
-<a name="l00059"></a>00059                                            <span class="keywordtype">double</span>);
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 cpl_error_code irplib_wcs_mjd_from_string(<span class="keywordtype">double</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 cpl_error_code irplib_wcs_iso8601_from_mjd(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,
-<a name="l00064"></a>00064                                            <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wcs.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wcs.h,v 1.7 2010/10/07 14:10:55 llundin Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: llundin $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2010/10/07 14:10:55 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_WCS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WCS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_error_code irplib_wcs_xytoradec(<span class="keyword">const</span> cpl_wcs * wcs,</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>                                     <span class="keywordtype">double</span>          x,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>                                     <span class="keywordtype">double</span>          y,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>                                     <span class="keywordtype">double</span>        * ra,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                                     <span class="keywordtype">double</span>        * dec);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> cpl_error_code irplib_wcs_radectoxy(<span class="keyword">const</span> cpl_wcs * wcs,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                                     <span class="keywordtype">double</span>          ra,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                                     <span class="keywordtype">double</span>          dec,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                                     <span class="keywordtype">double</span>        * x,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                                     <span class="keywordtype">double</span>        * y);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">double</span> irplib_wcs_great_circle_dist(<span class="keywordtype">double</span> ra1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                                     <span class="keywordtype">double</span> dec1,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                                     <span class="keywordtype">double</span> ra2,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                                     <span class="keywordtype">double</span> dec2);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> cpl_error_code irplib_wcs_iso8601_from_string(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                               <span class="keywordtype">double</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> cpl_error_code irplib_wcs_mjd_from_iso8601(<span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                                            <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_error_code irplib_wcs_mjd_from_string(<span class="keywordtype">double</span> *, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> cpl_error_code irplib_wcs_iso8601_from_mjd(<span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *, <span class="keywordtype">int</span> *,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                                            <span class="keywordtype">double</span> *, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wlxcorr_8c_source.html b/html/irplib__wlxcorr_8c_source.html
index 01e29c7..edf8635 100644
--- a/html/irplib__wlxcorr_8c_source.html
+++ b/html/irplib__wlxcorr_8c_source.html
@@ -2,1101 +2,1132 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wlxcorr.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wlxcorr.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wlxcorr.c,v 1.58 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IRPLIB package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.58 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_wavecal_impl.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "irplib_wlxcorr.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                           Defines</span>
-<a name="l00059"></a>00059 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#ifndef inline</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span>
-<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#define IRPLIB_PTR_SWAP(a,b)                                               \</span>
-<a name="l00076"></a>00076 <span class="preprocessor">    do { void * irplib_ptr_swap =(a);(a)=(b);(b)=irplib_ptr_swap; } while (0)</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span>
-<a name="l00078"></a>00078 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                           Private functions</span>
-<a name="l00080"></a>00080 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_wlxcorr_estimate(cpl_vector *, cpl_vector *,
-<a name="l00083"></a>00083                                     <span class="keyword">const</span> cpl_vector *,
-<a name="l00084"></a>00084                                     <span class="keyword">const</span> cpl_bivector *,
-<a name="l00085"></a>00085                                     <span class="keyword">const</span> cpl_vector *,
-<a name="l00086"></a>00086                                     <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00087"></a>00087                                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_wlxcorr_signal_resample(cpl_vector *, <span class="keyword">const</span> cpl_vector *, 
-<a name="l00090"></a>00090         <span class="keyword">const</span> cpl_bivector *) ;
-<a name="l00091"></a>00091 <span class="keyword">static</span> cpl_error_code cpl_vector_fill_lss_profile_symmetric(cpl_vector *,
-<a name="l00092"></a>00092                                                             <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00093"></a>00093 <span class="keyword">static</span> cpl_error_code irplib_wlcalib_fill_spectrum(cpl_vector *,
-<a name="l00094"></a>00094                                                 <span class="keyword">const</span> cpl_bivector *,
-<a name="l00095"></a>00095                                                 <span class="keyword">const</span> cpl_vector *,
-<a name="l00096"></a>00096                                                 <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">int</span>);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="keyword">static</span> cpl_boolean irplib_wlcalib_is_lines(<span class="keyword">const</span> cpl_vector *,
-<a name="l00099"></a>00099                                         <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00100"></a>00100                                         <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);
-<a name="l00101"></a>00101 
-<a name="l00105"></a>00105 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00141"></a>00141 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00142"></a>00142 cpl_polynomial * irplib_wlxcorr_best_poly(<span class="keyword">const</span> cpl_vector     * spectrum,
-<a name="l00143"></a>00143                                           <span class="keyword">const</span> cpl_bivector   * lines_catalog,
-<a name="l00144"></a>00144                                           <span class="keywordtype">int</span>                    degree,
-<a name="l00145"></a>00145                                           <span class="keyword">const</span> cpl_polynomial * guess_poly,
-<a name="l00146"></a>00146                                           <span class="keyword">const</span> cpl_vector     * wl_error,
-<a name="l00147"></a>00147                                           <span class="keywordtype">int</span>                    nsamples,
-<a name="l00148"></a>00148                                           <span class="keywordtype">double</span>                 slitw,
-<a name="l00149"></a>00149                                           <span class="keywordtype">double</span>                 fwhm,
-<a name="l00150"></a>00150                                           <span class="keywordtype">double</span>               * xc,
-<a name="l00151"></a>00151                                           cpl_table           ** wlres,
-<a name="l00152"></a>00152                                           cpl_vector          ** xcorrs)
-<a name="l00153"></a>00153 {
-<a name="l00154"></a>00154     <span class="keyword">const</span> <span class="keywordtype">int</span>         spec_sz = cpl_vector_get_size(spectrum);
-<a name="l00155"></a>00155     <span class="keyword">const</span> <span class="keywordtype">int</span>         nfree   = cpl_vector_get_size(wl_error);
-<a name="l00156"></a>00156     <span class="keywordtype">int</span>               ntests  = 1;
-<a name="l00157"></a>00157     cpl_vector      * model;
-<a name="l00158"></a>00158     cpl_vector      * vxc;
-<a name="l00159"></a>00159     cpl_vector      * init_pts_wl;
-<a name="l00160"></a>00160     cpl_matrix      * init_pts_x;
-<a name="l00161"></a>00161     cpl_vector      * pts_wl;
-<a name="l00162"></a>00162     cpl_vector      * vxcorrs;
-<a name="l00163"></a>00163     cpl_vector      * conv_kernel = NULL;    
-<a name="l00164"></a>00164     cpl_polynomial  * poly_sol;
-<a name="l00165"></a>00165     cpl_polynomial  * poly_candi;
-<a name="l00166"></a>00166     <span class="keyword">const</span> <span class="keywordtype">double</span>    * pwl_error = cpl_vector_get_data_const(wl_error); 
-<a name="l00167"></a>00167     <span class="keyword">const</span> <span class="keywordtype">double</span>    * dxc;
-<a name="l00168"></a>00168     cpl_size          degree_loc ;
-<a name="l00169"></a>00169     <span class="keyword">const</span> cpl_boolean symsamp = CPL_TRUE; <span class="comment">/* init_pts_x is symmetric */</span>
-<a name="l00170"></a>00170     <span class="keyword">const</span> cpl_boolean is_lines
-<a name="l00171"></a>00171         = irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),
-<a name="l00172"></a>00172                                guess_poly, spec_sz, 1.0);
-<a name="l00173"></a>00173     <span class="keywordtype">int</span>               i;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="comment">/* FIXME: Need mode parameter for catalogue type (lines <=> profile) */</span>
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     <span class="comment">/* In case of failure */</span>
-<a name="l00178"></a>00178     <span class="keywordflow">if</span> (wlres  != NULL) *wlres  = NULL;
-<a name="l00179"></a>00179     <span class="keywordflow">if</span> (xcorrs != NULL) *xcorrs = NULL;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     <span class="comment">/* Useful for knowing if resampling is used */</span>
-<a name="l00182"></a>00182     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking %d^%d dispersion polynomials (slitw=%g, "</span>
-<a name="l00183"></a>00183                   <span class="stringliteral">"fwhm=%g) against %d-point observed spectrum with%s "</span>
-<a name="l00184"></a>00184                   <span class="stringliteral">"catalog resampling"</span>, nsamples, nfree, slitw, fwhm, spec_sz,
-<a name="l00185"></a>00185                   is_lines ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     cpl_ensure(xc            != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00188"></a>00188     *xc = -1.0;
-<a name="l00189"></a>00189     cpl_ensure(spectrum      != NULL,  CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00190"></a>00190     cpl_ensure(lines_catalog != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00191"></a>00191     cpl_ensure(guess_poly    != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00192"></a>00192     cpl_ensure(wl_error      != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00193"></a>00193     cpl_ensure(nfree         >= 2,    CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00194"></a>00194     cpl_ensure(nsamples      >  0,    CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00195"></a>00195     <span class="comment">/* FIXME: degree is redundant */</span>
-<a name="l00196"></a>00196     cpl_ensure(1 + degree   == nfree, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     cpl_ensure(cpl_polynomial_get_dimension(guess_poly) == 1,
-<a name="l00199"></a>00199                CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     <span class="keywordflow">if</span> (nsamples > 1) {
-<a name="l00202"></a>00202         <span class="comment">/* Search place must consist of more than one point */</span>
-<a name="l00203"></a>00203         <span class="comment">/* FIXME: The bounds should probably not be negative */</span>
-<a name="l00204"></a>00204         <span class="keywordflow">for</span> (i = 0; i < nfree; i++) {
-<a name="l00205"></a>00205             <span class="keywordflow">if</span> (pwl_error[i] != 0.0) <span class="keywordflow">break</span>;
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207         cpl_ensure(i < nfree, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00208"></a>00208     }
-<a name="l00209"></a>00209  
-<a name="l00210"></a>00210     <span class="keywordflow">if</span> (!is_lines) {
-<a name="l00211"></a>00211         <span class="comment">/* Create the convolution kernel */</span>
-<a name="l00212"></a>00212         conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw, fwhm);
-<a name="l00213"></a>00213         cpl_ensure(conv_kernel   != NULL, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     <span class="comment">/* Create initial test points */</span>
-<a name="l00217"></a>00217     init_pts_x  = cpl_matrix_new(1, nfree);
-<a name="l00218"></a>00218     init_pts_wl = cpl_vector_new(nfree);
-<a name="l00219"></a>00219     pts_wl      = cpl_vector_new(nfree);
-<a name="l00220"></a>00220     <span class="keywordflow">for</span> (i = 0; i < nfree; i++) {
-<a name="l00221"></a>00221         <span class="keyword">const</span> <span class="keywordtype">double</span> xpos  = spec_sz * i / (double)degree;
-<a name="l00222"></a>00222         <span class="keyword">const</span> <span class="keywordtype">double</span> wlpos = cpl_polynomial_eval_1d(guess_poly, xpos, NULL)
-<a name="l00223"></a>00223             - 0.5 * pwl_error[i];
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225         cpl_matrix_set(init_pts_x, 0, i, xpos);
-<a name="l00226"></a>00226         cpl_vector_set(init_pts_wl,   i, wlpos);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228         ntests *= nsamples; <span class="comment">/* Count number of tests */</span>
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230     }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     vxcorrs = xcorrs != NULL ? cpl_vector_new(ntests) : NULL;
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     poly_sol   = cpl_polynomial_new(1);
-<a name="l00235"></a>00235     poly_candi = cpl_polynomial_new(1);
-<a name="l00236"></a>00236     model = cpl_vector_new(spec_sz);
-<a name="l00237"></a>00237     vxc = cpl_vector_new(1);
-<a name="l00238"></a>00238     dxc = cpl_vector_get_data_const(vxc);
-<a name="l00239"></a>00239    
-<a name="l00240"></a>00240     <span class="comment">/* Create the polynomial candidates and estimate them */</span>
-<a name="l00241"></a>00241     <span class="keywordflow">for</span> (i=0; i < ntests; i++) {
-<a name="l00242"></a>00242         <span class="keywordtype">int</span>    idiv = i;
-<a name="l00243"></a>00243         <span class="keywordtype">int</span>    deg;
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245         <span class="comment">/* Update wavelength at one anchor point - and reset wavelengths</span>
-<a name="l00246"></a>00246 <span class="comment">           to their default for any anchor point(s) at higher wavelengths */</span>
-<a name="l00247"></a>00247         <span class="keywordflow">for</span> (deg = degree; deg >= 0; deg--, idiv /= nsamples) {
-<a name="l00248"></a>00248             <span class="keyword">const</span> <span class="keywordtype">int</span> imod = idiv % nsamples;
-<a name="l00249"></a>00249             <span class="keyword">const</span> <span class="keywordtype">double</span> wlpos = cpl_vector_get(init_pts_wl, deg)
-<a name="l00250"></a>00250                                + imod * pwl_error[deg] / nsamples;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252             <span class="comment">/* FIXME: If wlpos causes pts_wl to be non-increasing, the</span>
-<a name="l00253"></a>00253 <span class="comment">               solution will be non-physical with no need for evaluation.</span>
-<a name="l00254"></a>00254 <span class="comment">               (*xc could be set to -1 in this case). */</span>
-<a name="l00255"></a>00255             cpl_vector_set(pts_wl, deg, wlpos);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257             <span class="keywordflow">if</span> (imod > 0) <span class="keywordflow">break</span>;
-<a name="l00258"></a>00258         }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260         <span class="comment">/* Generate */</span>
-<a name="l00261"></a>00261         degree_loc = (cpl_size)degree ;
-<a name="l00262"></a>00262         cpl_polynomial_fit(poly_candi, init_pts_x, &symsamp, pts_wl,
-<a name="l00263"></a>00263                            NULL, CPL_FALSE, NULL, &degree_loc);
-<a name="l00264"></a>00264         <span class="comment">/* *** Estimate *** */</span>
-<a name="l00265"></a>00265         irplib_wlxcorr_estimate(vxc, model, spectrum, lines_catalog,
-<a name="l00266"></a>00266                                 conv_kernel, poly_candi, slitw, fwhm);
-<a name="l00267"></a>00267         <span class="keywordflow">if</span> (vxcorrs != NULL) cpl_vector_set(vxcorrs, i, *dxc);
-<a name="l00268"></a>00268         <span class="keywordflow">if</span> (*dxc > *xc) {
-<a name="l00269"></a>00269             <span class="comment">/* Found a better solution */</span>
-<a name="l00270"></a>00270             *xc = *dxc;
-<a name="l00271"></a>00271             IRPLIB_PTR_SWAP(poly_sol, poly_candi);
-<a name="l00272"></a>00272         }
-<a name="l00273"></a>00273     }
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275     cpl_vector_delete(model);
-<a name="l00276"></a>00276     cpl_vector_delete(vxc);
-<a name="l00277"></a>00277     cpl_vector_delete(conv_kernel);
-<a name="l00278"></a>00278     cpl_vector_delete(pts_wl);
-<a name="l00279"></a>00279     cpl_matrix_delete(init_pts_x);
-<a name="l00280"></a>00280     cpl_vector_delete(init_pts_wl);
-<a name="l00281"></a>00281     cpl_polynomial_delete(poly_candi);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 <span class="preprocessor">#ifdef CPL_WLCALIB_FAIL_ON_CONSTANT</span>
-<a name="l00284"></a>00284 <span class="preprocessor"></span>    <span class="comment">/* FIXME: */</span>
-<a name="l00285"></a>00285     <span class="keywordflow">if</span> (cpl_polynomial_get_degree(poly_sol) == 0) {
-<a name="l00286"></a>00286         cpl_polynomial_delete(poly_sol);
-<a name="l00287"></a>00287         cpl_vector_delete(vxcorrs);
-<a name="l00288"></a>00288         *xc = 0.0;
-<a name="l00289"></a>00289         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
-<a name="l00290"></a>00290                                     __FILE__, __LINE__, <span class="stringliteral">"Found a constant "</span>
-<a name="l00291"></a>00291                                     <span class="stringliteral">"dispersion"</span>);
-<a name="l00292"></a>00292             cpl_errorstate_dump(prestate, CPL_FALSE, NULL);
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> NULL;
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295 <span class="preprocessor">#endif</span>
-<a name="l00296"></a>00296 <span class="preprocessor"></span>    
-<a name="l00297"></a>00297     <span class="keywordflow">if</span> (wlres != NULL) {
-<a name="l00298"></a>00298         <span class="comment">/* FIXME: A failure in the table creation is not considered a failure</span>
-<a name="l00299"></a>00299 <span class="comment">           of the whole function call (although all outputs may be useless) */</span>
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301         cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00302"></a>00302         <span class="comment">/* Create the spc_table  */</span>
-<a name="l00303"></a>00303         *wlres = irplib_wlxcorr_gen_spc_table(spectrum, lines_catalog, slitw,
-<a name="l00304"></a>00304                                               fwhm, guess_poly, poly_sol);
-<a name="l00305"></a>00305         <span class="keywordflow">if</span> (*wlres == NULL) {
-<a name="l00306"></a>00306             cpl_polynomial_delete(poly_sol);
-<a name="l00307"></a>00307             cpl_vector_delete(vxcorrs);
-<a name="l00308"></a>00308             *xc = -1.0;
-<a name="l00309"></a>00309             cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,
-<a name="l00310"></a>00310                                         __FILE__, __LINE__, <span class="stringliteral">"Cannot generate "</span>
-<a name="l00311"></a>00311                                         <span class="stringliteral">"infos table"</span>);
-<a name="l00312"></a>00312             <span class="comment">/* cpl_errorstate_dump(prestate, CPL_FALSE, NULL); */</span>
-<a name="l00313"></a>00313             cpl_errorstate_set(prestate);
-<a name="l00314"></a>00314             <span class="keywordflow">return</span> NULL;
-<a name="l00315"></a>00315         }
-<a name="l00316"></a>00316     } 
-<a name="l00317"></a>00317     
-<a name="l00318"></a>00318     <span class="keywordflow">if</span> (xcorrs != NULL) {
-<a name="l00319"></a>00319         *xcorrs = vxcorrs;
-<a name="l00320"></a>00320     } <span class="keywordflow">else</span> {
-<a name="l00321"></a>00321         <span class="comment">/* assert(vxcorrs == NULL); */</span>
-<a name="l00322"></a>00322     }
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     <span class="keywordflow">return</span> poly_sol;
-<a name="l00325"></a>00325 }
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00345"></a>00345 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00346"></a>00346 cpl_table * irplib_wlxcorr_gen_spc_table(
-<a name="l00347"></a>00347         <span class="keyword">const</span> cpl_vector        *   spectrum,
-<a name="l00348"></a>00348         <span class="keyword">const</span> cpl_bivector      *   lines_catalog,
-<a name="l00349"></a>00349         <span class="keywordtype">double</span>                      slitw,
-<a name="l00350"></a>00350         <span class="keywordtype">double</span>                      fwhm,
-<a name="l00351"></a>00351         <span class="keyword">const</span> cpl_polynomial    *   guess_poly,
-<a name="l00352"></a>00352         <span class="keyword">const</span> cpl_polynomial    *   corr_poly)
-<a name="l00353"></a>00353 {
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355     cpl_vector      *   conv_kernel = NULL;
-<a name="l00356"></a>00356     cpl_bivector    *   gen_init ;
-<a name="l00357"></a>00357     cpl_bivector    *   gen_corr ;
-<a name="l00358"></a>00358     cpl_table       *   spc_table ;
-<a name="l00359"></a>00359     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pgen ;
-<a name="l00360"></a>00360     <span class="keyword">const</span> <span class="keywordtype">double</span>        xtrunc = 0.5 * slitw + 5.0 * fwhm * CPL_MATH_SIG_FWHM;
-<a name="l00361"></a>00361     <span class="keyword">const</span> <span class="keywordtype">int</span>           spec_sz = cpl_vector_get_size(spectrum);
-<a name="l00362"></a>00362     <span class="keyword">const</span> cpl_boolean   guess_resamp
-<a name="l00363"></a>00363         = !irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),
-<a name="l00364"></a>00364                                 guess_poly, spec_sz, 1.0);
-<a name="l00365"></a>00365     <span class="keyword">const</span> cpl_boolean   corr_resamp
-<a name="l00366"></a>00366         = !irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),
-<a name="l00367"></a>00367                                 corr_poly, spec_sz, 1.0);
-<a name="l00368"></a>00368     cpl_error_code      error;
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     cpl_msg_debug(cpl_func, <span class="stringliteral">"Tabel for guess dispersion polynomial (slitw=%g, "</span>
-<a name="l00371"></a>00371                   <span class="stringliteral">"fwhm=%g) with %d-point observed spectrum with%s catalog re"</span>
-<a name="l00372"></a>00372                   <span class="stringliteral">"sampling"</span>, slitw, fwhm, spec_sz, guess_resamp ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);
-<a name="l00373"></a>00373     cpl_msg_debug(cpl_func, <span class="stringliteral">"Tabel for corr. dispersion polynomial (slitw=%g, "</span>
-<a name="l00374"></a>00374                   <span class="stringliteral">"fwhm=%g) with %d-point observed spectrum with%s catalog re"</span>
-<a name="l00375"></a>00375                   <span class="stringliteral">"sampling"</span>, slitw, fwhm, spec_sz, corr_resamp ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377     <span class="comment">/* Test inputs */</span>
-<a name="l00378"></a>00378     cpl_ensure(spectrum, CPL_ERROR_NULL_INPUT, NULL) ;
-<a name="l00379"></a>00379     cpl_ensure(lines_catalog, CPL_ERROR_NULL_INPUT, NULL) ;
-<a name="l00380"></a>00380     cpl_ensure(guess_poly, CPL_ERROR_NULL_INPUT, NULL) ;
-<a name="l00381"></a>00381     cpl_ensure(corr_poly, CPL_ERROR_NULL_INPUT, NULL) ;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383     <span class="comment">/* Create the convolution kernel */</span>
-<a name="l00384"></a>00384     <span class="keywordflow">if</span> (guess_resamp || corr_resamp) {
-<a name="l00385"></a>00385         conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw, fwhm);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387         <span class="keywordflow">if</span> (conv_kernel == NULL) {
-<a name="l00388"></a>00388             cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00389"></a>00389                                         __FILE__, __LINE__, <span class="stringliteral">"Cannot create "</span>
-<a name="l00390"></a>00390                                         <span class="stringliteral">"convolution kernel"</span>) ;
-<a name="l00391"></a>00391             <span class="keywordflow">return</span> NULL ;
-<a name="l00392"></a>00392         }
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395     <span class="comment">/* Get the emission at initial wavelengths */</span>
-<a name="l00396"></a>00396     gen_init = cpl_bivector_new(spec_sz);
-<a name="l00397"></a>00397     <span class="keywordflow">if</span> (guess_resamp) {
-<a name="l00398"></a>00398         error = irplib_wlcalib_fill_spectrum(cpl_bivector_get_y(gen_init),
-<a name="l00399"></a>00399                                           lines_catalog, conv_kernel,
-<a name="l00400"></a>00400                                           guess_poly, 0);
-<a name="l00401"></a>00401     } <span class="keywordflow">else</span> {
-<a name="l00402"></a>00402         error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>
-<a name="l00403"></a>00403             (cpl_bivector_get_y(gen_init), NULL, NULL,
-<a name="l00404"></a>00404              guess_poly, lines_catalog,
-<a name="l00405"></a>00405              slitw, fwhm, xtrunc, 0, CPL_FALSE, CPL_FALSE, NULL);
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="keywordflow">if</span> (error || cpl_vector_fill_polynomial(cpl_bivector_get_x(gen_init),
-<a name="l00409"></a>00409                                             guess_poly, 1, 1)) {
-<a name="l00410"></a>00410         cpl_vector_delete(conv_kernel);
-<a name="l00411"></a>00411         cpl_bivector_delete(gen_init);
-<a name="l00412"></a>00412         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00413"></a>00413                                     __FILE__, __LINE__, <span class="stringliteral">"Cannot get the "</span>
-<a name="l00414"></a>00414                                     <span class="stringliteral">"emission spectrum"</span>);
-<a name="l00415"></a>00415         <span class="keywordflow">return</span> NULL;
-<a name="l00416"></a>00416     }
-<a name="l00417"></a>00417  
-<a name="l00418"></a>00418     <span class="comment">/* Get the emission at corrected wavelengths */</span>
-<a name="l00419"></a>00419     gen_corr = cpl_bivector_new(spec_sz);
-<a name="l00420"></a>00420     <span class="keywordflow">if</span> (corr_resamp) {
-<a name="l00421"></a>00421         error = irplib_wlcalib_fill_spectrum(cpl_bivector_get_y(gen_corr),
-<a name="l00422"></a>00422                                           lines_catalog, conv_kernel,
-<a name="l00423"></a>00423                                           corr_poly, 0);
-<a name="l00424"></a>00424     } <span class="keywordflow">else</span> {
-<a name="l00425"></a>00425         error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>
-<a name="l00426"></a>00426             (cpl_bivector_get_y(gen_corr), NULL, NULL,
-<a name="l00427"></a>00427              corr_poly, lines_catalog,
-<a name="l00428"></a>00428              slitw, fwhm, xtrunc, 0, CPL_FALSE, CPL_FALSE, NULL);
-<a name="l00429"></a>00429     }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431     <span class="keywordflow">if</span> (error || cpl_vector_fill_polynomial(cpl_bivector_get_x(gen_corr),
-<a name="l00432"></a>00432                                             corr_poly, 1, 1)) {
-<a name="l00433"></a>00433         cpl_vector_delete(conv_kernel);
-<a name="l00434"></a>00434         cpl_bivector_delete(gen_init);
-<a name="l00435"></a>00435         cpl_bivector_delete(gen_corr) ;
-<a name="l00436"></a>00436         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00437"></a>00437                                     __FILE__, __LINE__, <span class="stringliteral">"Cannot get the "</span>
-<a name="l00438"></a>00438                                     <span class="stringliteral">"emission spectrum"</span>);
-<a name="l00439"></a>00439         <span class="keywordflow">return</span> NULL;
-<a name="l00440"></a>00440     }
-<a name="l00441"></a>00441     cpl_vector_delete(conv_kernel) ;
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443     <span class="comment">/* Create the ouput table */</span>
-<a name="l00444"></a>00444     spc_table = cpl_table_new(spec_sz);
-<a name="l00445"></a>00445     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_WAVELENGTH, 
-<a name="l00446"></a>00446             CPL_TYPE_DOUBLE);
-<a name="l00447"></a>00447     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_CAT_INIT, 
-<a name="l00448"></a>00448             CPL_TYPE_DOUBLE);
-<a name="l00449"></a>00449     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_CAT_FINAL, 
-<a name="l00450"></a>00450             CPL_TYPE_DOUBLE);
-<a name="l00451"></a>00451     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_OBS, CPL_TYPE_DOUBLE);
-<a name="l00452"></a>00452     
-<a name="l00453"></a>00453     <span class="comment">/* Update table */</span>
-<a name="l00454"></a>00454     pgen = cpl_bivector_get_x_data_const(gen_corr) ;
-<a name="l00455"></a>00455     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_WAVELENGTH, pgen) ;
-<a name="l00456"></a>00456     pgen = cpl_bivector_get_y_data_const(gen_corr) ;
-<a name="l00457"></a>00457     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_CAT_FINAL, pgen) ;
-<a name="l00458"></a>00458     pgen = cpl_vector_get_data_const(spectrum) ;
-<a name="l00459"></a>00459     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_OBS, pgen) ;
-<a name="l00460"></a>00460     pgen = cpl_bivector_get_y_data_const(gen_init) ;
-<a name="l00461"></a>00461     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_CAT_INIT, pgen);
-<a name="l00462"></a>00462     cpl_bivector_delete(gen_init);
-<a name="l00463"></a>00463     cpl_bivector_delete(gen_corr);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465     <span class="keywordflow">return</span> spc_table ;
-<a name="l00466"></a>00466 }
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00480"></a>00480 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00481"></a>00481 cpl_bivector * irplib_wlxcorr_cat_extract(
-<a name="l00482"></a>00482         <span class="keyword">const</span> cpl_bivector  *   lines_catalog,
-<a name="l00483"></a>00483         <span class="keywordtype">double</span>                  wave_min,
-<a name="l00484"></a>00484         <span class="keywordtype">double</span>                  wave_max)
-<a name="l00485"></a>00485 {
-<a name="l00486"></a>00486     <span class="keyword">const</span> <span class="keywordtype">int</span>           nlines = cpl_bivector_get_size(lines_catalog);
-<a name="l00487"></a>00487     <span class="keywordtype">int</span>                 wave_min_id, wave_max_id ;
-<a name="l00488"></a>00488     cpl_vector       *  sub_cat_wl ;
-<a name="l00489"></a>00489     cpl_vector       *  sub_cat_int ;
-<a name="l00490"></a>00490     <span class="keyword">const</span> cpl_vector *  xlines  = cpl_bivector_get_x_const(lines_catalog);
-<a name="l00491"></a>00491     <span class="keyword">const</span> <span class="keywordtype">double</span>     *  dxlines = cpl_vector_get_data_const(xlines);
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493     cpl_ensure(lines_catalog != NULL, CPL_ERROR_NULL_INPUT,    NULL);
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     <span class="comment">/* Find the 1st line */</span>
-<a name="l00496"></a>00496     wave_min_id = (int)cpl_vector_find(xlines, wave_min);
-<a name="l00497"></a>00497     <span class="keywordflow">if</span> (wave_min_id < 0) {
-<a name="l00498"></a>00498         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00499"></a>00499                                     __FILE__, __LINE__, 
-<a name="l00500"></a>00500                                     <span class="stringliteral">"The starting wavelength cannot be found"</span>) ;
-<a name="l00501"></a>00501         <span class="keywordflow">return</span> NULL ;
-<a name="l00502"></a>00502     }
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504     <span class="comment">/* The first line must be greater than (at least?) wave_min */</span>
-<a name="l00505"></a>00505     <span class="keywordflow">if</span> (dxlines[wave_min_id] <= wave_min) wave_min_id++;
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507     <span class="comment">/* Find the last line */</span>
-<a name="l00508"></a>00508     wave_max_id = (int)cpl_vector_find(xlines, wave_max);
-<a name="l00509"></a>00509     <span class="keywordflow">if</span> (wave_max_id < 0) {
-<a name="l00510"></a>00510         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00511"></a>00511                                     __FILE__, __LINE__, 
-<a name="l00512"></a>00512                                     <span class="stringliteral">"The ending wavelength cannot be found"</span>) ;
-<a name="l00513"></a>00513         <span class="keywordflow">return</span> NULL ;
-<a name="l00514"></a>00514     }
-<a name="l00515"></a>00515     <span class="comment">/* The last line must be less than wave_max */</span>
-<a name="l00516"></a>00516     <span class="keywordflow">if</span> (dxlines[wave_max_id] >= wave_min) wave_max_id--;
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518     <span class="comment">/* Checking the wavelength range at this point via the indices also</span>
-<a name="l00519"></a>00519 <span class="comment">       verifies that they were not found using non-increasing wavelengths */</span>
-<a name="l00520"></a>00520     cpl_ensure(wave_min_id <= wave_max_id, CPL_ERROR_ILLEGAL_INPUT, NULL);
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522     <span class="keywordflow">if</span> (wave_min_id < 0 || wave_max_id == nlines) {
-<a name="l00523"></a>00523         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00524"></a>00524                                     __FILE__, __LINE__, <span class="stringliteral">"The %d-line catalogue "</span>
-<a name="l00525"></a>00525                                     <span class="stringliteral">"has no lines in the range %g -> %g"</span>,
-<a name="l00526"></a>00526                                     nlines, wave_min, wave_max);
-<a name="l00527"></a>00527         <span class="keywordflow">return</span> NULL ;
-<a name="l00528"></a>00528     }
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530     sub_cat_wl = cpl_vector_extract(xlines, wave_min_id, wave_max_id, 1);
-<a name="l00531"></a>00531     sub_cat_int = cpl_vector_extract(cpl_bivector_get_y_const(lines_catalog), 
-<a name="l00532"></a>00532                                      wave_min_id, wave_max_id, 1);
-<a name="l00533"></a>00533  
-<a name="l00534"></a>00534     <span class="keywordflow">return</span> cpl_bivector_wrap_vectors(sub_cat_wl, sub_cat_int);
-<a name="l00535"></a>00535 }
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00554"></a>00554 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00555"></a>00555 cpl_vector * irplib_wlxcorr_convolve_create_kernel(<span class="keywordtype">double</span>  slitw,
-<a name="l00556"></a>00556                                                    <span class="keywordtype">double</span>  fwhm)
-<a name="l00557"></a>00557 {
-<a name="l00558"></a>00558     <span class="keyword">const</span> <span class="keywordtype">double</span>  sigma  = fwhm * CPL_MATH_SIG_FWHM;
-<a name="l00559"></a>00559     <span class="keyword">const</span> <span class="keywordtype">int</span>     size   = 1 + (int)(5.0 * sigma + 0.5*slitw);
-<a name="l00560"></a>00560     cpl_vector  * kernel = cpl_vector_new(size);
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563     <span class="keywordflow">if</span> (cpl_vector_fill_lss_profile_symmetric(kernel, slitw, fwhm)) {
-<a name="l00564"></a>00564         cpl_vector_delete(kernel);
-<a name="l00565"></a>00565         cpl_ensure(0, cpl_error_get_code(), NULL);
-<a name="l00566"></a>00566     }
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568     <span class="keywordflow">return</span> kernel;
-<a name="l00569"></a>00569 }
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00584"></a>00584 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00585"></a>00585 <span class="keywordtype">int</span> irplib_wlxcorr_convolve(
-<a name="l00586"></a>00586         cpl_vector          *   smoothed,
-<a name="l00587"></a>00587         <span class="keyword">const</span> cpl_vector    *   conv_kernel)
-<a name="l00588"></a>00588 {
-<a name="l00589"></a>00589     <span class="keywordtype">int</span>             nsamples ;
-<a name="l00590"></a>00590     <span class="keywordtype">int</span>             ihwidth ;
-<a name="l00591"></a>00591     cpl_vector  *   raw ;
-<a name="l00592"></a>00592     <span class="keywordtype">double</span>      *   psmoothe ;
-<a name="l00593"></a>00593     <span class="keywordtype">double</span>      *   praw ;
-<a name="l00594"></a>00594     <span class="keyword">const</span> <span class="keywordtype">double</span>*   psymm ;
-<a name="l00595"></a>00595     <span class="keywordtype">int</span>             i, j ;
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597     <span class="comment">/* Test entries */</span>
-<a name="l00598"></a>00598     cpl_ensure(smoothed, CPL_ERROR_NULL_INPUT, -1) ;
-<a name="l00599"></a>00599     cpl_ensure(conv_kernel, CPL_ERROR_NULL_INPUT, -1) ;
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601     <span class="comment">/* Initialise */</span>
-<a name="l00602"></a>00602     nsamples = cpl_vector_get_size(smoothed) ;
-<a name="l00603"></a>00603     ihwidth = cpl_vector_get_size(conv_kernel) - 1 ;
-<a name="l00604"></a>00604     cpl_ensure(ihwidth<nsamples, CPL_ERROR_ILLEGAL_INPUT, -1) ;
-<a name="l00605"></a>00605     psymm = cpl_vector_get_data_const(conv_kernel) ;
-<a name="l00606"></a>00606     psmoothe = cpl_vector_get_data(smoothed) ;
-<a name="l00607"></a>00607     
-<a name="l00608"></a>00608     <span class="comment">/* Create raw vector */</span>
-<a name="l00609"></a>00609     raw = cpl_vector_duplicate(smoothed) ;
-<a name="l00610"></a>00610     praw = cpl_vector_get_data(raw) ;
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="comment">/* Convolve with the symmetric function */</span>
-<a name="l00613"></a>00613     <span class="keywordflow">for</span> (i=0 ; i<ihwidth ; i++) {
-<a name="l00614"></a>00614         psmoothe[i] = praw[i] * psymm[0];
-<a name="l00615"></a>00615         <span class="keywordflow">for</span> (j=1 ; j <= ihwidth ; j++) {
-<a name="l00616"></a>00616             <span class="keyword">const</span> <span class="keywordtype">int</span> k = i-j < 0 ? 0 : i-j;
-<a name="l00617"></a>00617             psmoothe[i] += (praw[k]+praw[i+j]) * psymm[j];
-<a name="l00618"></a>00618         }
-<a name="l00619"></a>00619     }
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621     <span class="keywordflow">for</span> (i=ihwidth ; i<nsamples-ihwidth ; i++) {
-<a name="l00622"></a>00622         psmoothe[i] = praw[i] * psymm[0];
-<a name="l00623"></a>00623         <span class="keywordflow">for</span> (j=1 ; j<=ihwidth ; j++)
-<a name="l00624"></a>00624             psmoothe[i] += (praw[i-j]+praw[i+j]) * psymm[j];
-<a name="l00625"></a>00625     }
-<a name="l00626"></a>00626     <span class="keywordflow">for</span> (i=nsamples-ihwidth ; i<nsamples ; i++) {
-<a name="l00627"></a>00627         psmoothe[i] = praw[i] * psymm[0];
-<a name="l00628"></a>00628         <span class="keywordflow">for</span> (j=1 ; j<=ihwidth ; j++) {
-<a name="l00629"></a>00629             <span class="keyword">const</span> <span class="keywordtype">int</span> k = i+j > nsamples-1 ? nsamples - 1 : i+j;
-<a name="l00630"></a>00630             psmoothe[i] += (praw[k]+praw[i-j]) * psymm[j];
-<a name="l00631"></a>00631         }
-<a name="l00632"></a>00632     }
-<a name="l00633"></a>00633     cpl_vector_delete(raw) ;
-<a name="l00634"></a>00634     <span class="keywordflow">return</span> 0 ;
-<a name="l00635"></a>00635 }
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00647"></a>00647 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00648"></a>00648 <span class="keywordtype">int</span> irplib_wlxcorr_plot_solution(
-<a name="l00649"></a>00649         <span class="keyword">const</span> cpl_polynomial    *   init,
-<a name="l00650"></a>00650         <span class="keyword">const</span> cpl_polynomial    *   comp,
-<a name="l00651"></a>00651         <span class="keyword">const</span> cpl_polynomial    *   sol,
-<a name="l00652"></a>00652         <span class="keywordtype">int</span>                         pix_start,
-<a name="l00653"></a>00653         <span class="keywordtype">int</span>                         pix_stop) 
-<a name="l00654"></a>00654 {
-<a name="l00655"></a>00655     <span class="keywordtype">int</span>                 nsamples, nplots ;
-<a name="l00656"></a>00656     cpl_vector      **  vectors ;
-<a name="l00657"></a>00657     cpl_bivector    *   bivector ;
-<a name="l00658"></a>00658     <span class="keywordtype">double</span>              diff ;
-<a name="l00659"></a>00659     <span class="keywordtype">int</span>                 i ;
-<a name="l00660"></a>00660     
-<a name="l00661"></a>00661     <span class="comment">/* Test entries */</span>
-<a name="l00662"></a>00662     <span class="keywordflow">if</span> (init == NULL || comp == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00663"></a>00663     
-<a name="l00664"></a>00664     <span class="comment">/* Initialise */</span>
-<a name="l00665"></a>00665     nsamples = pix_stop - pix_start + 1 ;
-<a name="l00666"></a>00666     <span class="keywordflow">if</span> (sol != NULL)    nplots = 3 ;
-<a name="l00667"></a>00667     <span class="keywordflow">else</span>                nplots = 2 ;
-<a name="l00668"></a>00668     
-<a name="l00669"></a>00669     <span class="comment">/* Create vectors */</span>
-<a name="l00670"></a>00670     vectors = cpl_malloc((nplots+1)*<span class="keyword">sizeof</span>(cpl_vector*)) ;
-<a name="l00671"></a>00671     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) vectors[i] = cpl_vector_new(nsamples) ;
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673     <span class="comment">/* First plot with the lambda/pixel relation */</span>
-<a name="l00674"></a>00674     <span class="comment">/* Fill vectors */</span>
-<a name="l00675"></a>00675     <span class="keywordflow">for</span> (i=0 ; i<nsamples ; i++) {
-<a name="l00676"></a>00676         cpl_vector_set(vectors[0], i, pix_start+i) ;
-<a name="l00677"></a>00677         cpl_vector_set(vectors[1], i, 
-<a name="l00678"></a>00678                 cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;
-<a name="l00679"></a>00679         cpl_vector_set(vectors[2], i, 
-<a name="l00680"></a>00680                 cpl_polynomial_eval_1d(comp, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;
-<a name="l00681"></a>00681         <span class="keywordflow">if</span> (sol != NULL) 
-<a name="l00682"></a>00682             cpl_vector_set(vectors[3], i, 
-<a name="l00683"></a>00683                     cpl_polynomial_eval_1d(sol, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;
-<a name="l00684"></a>00684     }
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686     <span class="comment">/* Plot */</span>
-<a name="l00687"></a>00687     cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (pixels)';"</span>, 
-<a name="l00688"></a>00688         <span class="stringliteral">"t '1-Initial / 2-Computed / 3-Solution' w lines"</span>, 
-<a name="l00689"></a>00689         <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, nplots+1);
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691     <span class="comment">/* Free vectors */</span>
-<a name="l00692"></a>00692     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) cpl_vector_delete(vectors[i]) ;
-<a name="l00693"></a>00693     cpl_free(vectors) ;
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     <span class="comment">/* Allocate vectors */</span>
-<a name="l00696"></a>00696     nplots -- ;
-<a name="l00697"></a>00697     vectors = cpl_malloc((nplots+1)*<span class="keyword">sizeof</span>(cpl_vector*)) ;
-<a name="l00698"></a>00698     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) vectors[i] = cpl_vector_new(nsamples) ;
-<a name="l00699"></a>00699     
-<a name="l00700"></a>00700     <span class="comment">/* Second plot with the delta-lambda/pixel relation */</span>
-<a name="l00701"></a>00701     <span class="comment">/* Fill vectors */</span>
-<a name="l00702"></a>00702     <span class="keywordflow">for</span> (i=0 ; i<nsamples ; i++) {
-<a name="l00703"></a>00703         cpl_vector_set(vectors[0], i, pix_start+i) ;
-<a name="l00704"></a>00704         diff = cpl_polynomial_eval_1d(comp, (<span class="keywordtype">double</span>)(pix_start+i), NULL) -
-<a name="l00705"></a>00705             cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL) ;
-<a name="l00706"></a>00706         cpl_vector_set(vectors[1], i, diff) ;
-<a name="l00707"></a>00707         <span class="keywordflow">if</span> (sol != NULL) {
-<a name="l00708"></a>00708             diff = cpl_polynomial_eval_1d(sol, (<span class="keywordtype">double</span>)(pix_start+i), NULL) -
-<a name="l00709"></a>00709                 cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL) ;
-<a name="l00710"></a>00710             cpl_vector_set(vectors[2], i, diff) ;
-<a name="l00711"></a>00711         }
-<a name="l00712"></a>00712     }
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714     <span class="comment">/* Plot */</span>
-<a name="l00715"></a>00715     <span class="keywordflow">if</span> (sol == NULL) {
-<a name="l00716"></a>00716         bivector = cpl_bivector_wrap_vectors(vectors[0], vectors[1]) ;
-<a name="l00717"></a>00717         cpl_plot_bivector(
-<a name="l00718"></a>00718 <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Wavelength difference';"</span>, 
-<a name="l00719"></a>00719             <span class="stringliteral">"t 'Computed-Initial wavelenth' w lines"</span>, <span class="stringliteral">""</span>, bivector);
-<a name="l00720"></a>00720         cpl_bivector_unwrap_vectors(bivector) ;
-<a name="l00721"></a>00721     } <span class="keywordflow">else</span> {
-<a name="l00722"></a>00722         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (pixels)';"</span>, 
-<a name="l00723"></a>00723             <span class="stringliteral">"t '1-Computed - Initial / 2--Solution - Initial' w lines"</span>, 
-<a name="l00724"></a>00724             <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, nplots+1);
-<a name="l00725"></a>00725     }
-<a name="l00726"></a>00726     
-<a name="l00727"></a>00727     <span class="comment">/* Free vectors */</span>
-<a name="l00728"></a>00728     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) cpl_vector_delete(vectors[i]) ;
-<a name="l00729"></a>00729     cpl_free(vectors) ;
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731     <span class="comment">/* Return */</span>
-<a name="l00732"></a>00732     <span class="keywordflow">return</span> 0 ;
-<a name="l00733"></a>00733 }
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00746"></a>00746 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00747"></a>00747 <span class="keywordtype">int</span> irplib_wlxcorr_plot_spc_table(
-<a name="l00748"></a>00748         <span class="keyword">const</span> cpl_table     *   spc_table, 
-<a name="l00749"></a>00749         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   title,
-<a name="l00750"></a>00750         <span class="keywordtype">int</span>                     first_plotted_line,
-<a name="l00751"></a>00751         <span class="keywordtype">int</span>                     last_plotted_line) 
-<a name="l00752"></a>00752 {
-<a name="l00753"></a>00753     <span class="keywordtype">char</span>                title_loc[1024] ;
-<a name="l00754"></a>00754     cpl_vector      **  vectors ;
-<a name="l00755"></a>00755     cpl_vector      **  sub_vectors ;
-<a name="l00756"></a>00756     cpl_vector      *   tmp_vec ;
-<a name="l00757"></a>00757     <span class="keywordtype">int</span>                 nsamples ;
-<a name="l00758"></a>00758     <span class="keywordtype">double</span>              max, mean1, mean3 ;
-<a name="l00759"></a>00759     <span class="keywordtype">int</span>                 start_ind, stop_ind, hsize_pix ;
-<a name="l00760"></a>00760     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762     <span class="comment">/* Test entries */</span>
-<a name="l00763"></a>00763     <span class="keywordflow">if</span> (first_plotted_line > last_plotted_line) <span class="keywordflow">return</span> -1 ;
-<a name="l00764"></a>00764     <span class="keywordflow">if</span> (spc_table == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00765"></a>00765     
-<a name="l00766"></a>00766     <span class="comment">/* Initialise */</span>
-<a name="l00767"></a>00767     nsamples = cpl_table_get_nrow(spc_table) ;
-<a name="l00768"></a>00768     hsize_pix = 10 ;
-<a name="l00769"></a>00769     
-<a name="l00770"></a>00770     sprintf(title_loc, 
-<a name="l00771"></a>00771         <span class="stringliteral">"t '%s - 1-Initial catalog/2-Corrected catalog/3-Observed' w lines"</span>,
-<a name="l00772"></a>00772         title) ;
-<a name="l00773"></a>00773     title_loc[1023] = (char)0 ;
-<a name="l00774"></a>00774     
-<a name="l00775"></a>00775     vectors = cpl_malloc(4*<span class="keyword">sizeof</span>(cpl_vector*)) ;
-<a name="l00776"></a>00776     vectors[0] = cpl_vector_wrap(nsamples, 
-<a name="l00777"></a>00777             cpl_table_get_data_double((cpl_table*)spc_table,
-<a name="l00778"></a>00778                 IRPLIB_WLXCORR_COL_WAVELENGTH));
-<a name="l00779"></a>00779     vectors[1] = cpl_vector_wrap(nsamples, 
-<a name="l00780"></a>00780             cpl_table_get_data_double((cpl_table*)spc_table, 
-<a name="l00781"></a>00781                 IRPLIB_WLXCORR_COL_CAT_INIT));
-<a name="l00782"></a>00782     vectors[2] = cpl_vector_wrap(nsamples, 
-<a name="l00783"></a>00783             cpl_table_get_data_double((cpl_table*)spc_table, 
-<a name="l00784"></a>00784                 IRPLIB_WLXCORR_COL_CAT_FINAL));
-<a name="l00785"></a>00785     vectors[3] = cpl_vector_wrap(nsamples, 
-<a name="l00786"></a>00786             cpl_table_get_data_double((cpl_table*)spc_table, 
-<a name="l00787"></a>00787                 IRPLIB_WLXCORR_COL_OBS)) ;
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789     <span class="comment">/* Scale the signal for a bettre display */</span>
-<a name="l00790"></a>00790     mean1 = cpl_vector_get_mean(vectors[1]) ;
-<a name="l00791"></a>00791     mean3 = cpl_vector_get_mean(vectors[3]) ;
-<a name="l00792"></a>00792     <span class="keywordflow">if</span> (fabs(mean3) > 1)
-<a name="l00793"></a>00793         cpl_vector_multiply_scalar(vectors[3], fabs(mean1/mean3)) ;
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795     cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';"</span>, title_loc,
-<a name="l00796"></a>00796         <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, 4);
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798     <span class="comment">/* Unscale the signal */</span>
-<a name="l00799"></a>00799     <span class="keywordflow">if</span> (fabs(mean3) > 1)
-<a name="l00800"></a>00800         cpl_vector_multiply_scalar(vectors[3], mean3/mean1) ;
-<a name="l00801"></a>00801 
-<a name="l00802"></a>00802     <span class="comment">/* Loop on the brightest lines and zoom on them */</span>
-<a name="l00803"></a>00803     sprintf(title_loc, 
-<a name="l00804"></a>00804 <span class="stringliteral">"t '%s - 1-Initial catalog/2-Corrected catalog/3-Observed (ZOOMED)' w lines"</span>,
-<a name="l00805"></a>00805         title) ;
-<a name="l00806"></a>00806     title_loc[1023] = (char)0 ;
-<a name="l00807"></a>00807     tmp_vec = cpl_vector_duplicate(vectors[2]) ;
-<a name="l00808"></a>00808     <span class="keywordflow">for</span> (i=0 ; i<last_plotted_line ; i++) {
-<a name="l00809"></a>00809         <span class="comment">/* Find the brightest line */</span>
-<a name="l00810"></a>00810         <span class="keywordflow">if</span> ((max = cpl_vector_get_max(tmp_vec)) <= 0.0) break ;
-<a name="l00811"></a>00811         <span class="keywordflow">for</span> (j=0 ; j<nsamples ; j++) {
-<a name="l00812"></a>00812             <span class="keywordflow">if</span> (cpl_vector_get(tmp_vec, j) == max) break ;
-<a name="l00813"></a>00813         }
-<a name="l00814"></a>00814         <span class="keywordflow">if</span> (j-hsize_pix < 0) start_ind = 0 ;
-<a name="l00815"></a>00815         <span class="keywordflow">else</span> start_ind = j-hsize_pix ;
-<a name="l00816"></a>00816         <span class="keywordflow">if</span> (j+hsize_pix > nsamples-1) stop_ind = nsamples-1 ;
-<a name="l00817"></a>00817         <span class="keywordflow">else</span> stop_ind = j+hsize_pix ;
-<a name="l00818"></a>00818         <span class="keywordflow">for</span> (j=start_ind ; j<=stop_ind ; j++) cpl_vector_set(tmp_vec, j, 0.0) ;
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820         <span class="keywordflow">if</span> (i+1 >= first_plotted_line) {
-<a name="l00821"></a>00821             sub_vectors = cpl_malloc(4*<span class="keyword">sizeof</span>(cpl_vector*)) ;
-<a name="l00822"></a>00822             sub_vectors[0]=cpl_vector_extract(vectors[0],start_ind,stop_ind,1);
-<a name="l00823"></a>00823             sub_vectors[1]=cpl_vector_extract(vectors[1],start_ind,stop_ind,1);
-<a name="l00824"></a>00824             sub_vectors[2]=cpl_vector_extract(vectors[2],start_ind,stop_ind,1);
-<a name="l00825"></a>00825             sub_vectors[3]=cpl_vector_extract(vectors[3],start_ind,stop_ind,1);
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827             cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';"</span>, 
-<a name="l00828"></a>00828                     title_loc, <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)sub_vectors, 4);
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830             cpl_vector_delete(sub_vectors[0]) ;
-<a name="l00831"></a>00831             cpl_vector_delete(sub_vectors[1]) ;
-<a name="l00832"></a>00832             cpl_vector_delete(sub_vectors[2]) ;
-<a name="l00833"></a>00833             cpl_vector_delete(sub_vectors[3]) ;
-<a name="l00834"></a>00834             cpl_free(sub_vectors) ;
-<a name="l00835"></a>00835         }
-<a name="l00836"></a>00836     }
-<a name="l00837"></a>00837     cpl_vector_delete(tmp_vec) ;
-<a name="l00838"></a>00838     
-<a name="l00839"></a>00839     cpl_vector_unwrap(vectors[0]) ;
-<a name="l00840"></a>00840     cpl_vector_unwrap(vectors[1]) ;
-<a name="l00841"></a>00841     cpl_vector_unwrap(vectors[2]) ;
-<a name="l00842"></a>00842     cpl_vector_unwrap(vectors[3]) ;
-<a name="l00843"></a>00843     cpl_free(vectors) ;
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845     <span class="keywordflow">return</span> 0 ;
-<a name="l00846"></a>00846 }
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00856"></a>00856 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00857"></a>00857 <span class="keywordtype">int</span> irplib_wlxcorr_catalog_plot(
-<a name="l00858"></a>00858         <span class="keyword">const</span> cpl_bivector      *   cat,
-<a name="l00859"></a>00859         <span class="keywordtype">double</span>                      wmin,
-<a name="l00860"></a>00860         <span class="keywordtype">double</span>                      wmax) 
-<a name="l00861"></a>00861 {
-<a name="l00862"></a>00862     <span class="keywordtype">int</span>                 start, stop ;
-<a name="l00863"></a>00863     cpl_bivector    *   subcat ;
-<a name="l00864"></a>00864     cpl_vector      *   subcat_x ;
-<a name="l00865"></a>00865     cpl_vector      *   subcat_y ;
-<a name="l00866"></a>00866     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pwave ;
-<a name="l00867"></a>00867     <span class="keywordtype">int</span>                 nvals, nvals_tot ;
-<a name="l00868"></a>00868     <span class="keywordtype">int</span>                 i ;
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870     <span class="comment">/* Test entries */</span>
-<a name="l00871"></a>00871     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00872"></a>00872     <span class="keywordflow">if</span> (wmax <= wmin) <span class="keywordflow">return</span> -1 ;
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874     <span class="comment">/* Initialise */</span>
-<a name="l00875"></a>00875     nvals_tot = cpl_bivector_get_size(cat) ;
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877     <span class="comment">/* Count the nb of values */</span>
-<a name="l00878"></a>00878     pwave = cpl_bivector_get_x_data_const(cat) ;
-<a name="l00879"></a>00879     <span class="keywordflow">if</span> (pwave[0] >= wmin) start = 0 ;
-<a name="l00880"></a>00880     <span class="keywordflow">else</span> start = -1 ;
-<a name="l00881"></a>00881     <span class="keywordflow">if</span> (pwave[nvals_tot-1] <= wmax) stop = nvals_tot-1 ;
-<a name="l00882"></a>00882     <span class="keywordflow">else</span> stop = -1 ;
-<a name="l00883"></a>00883     i=0 ;
-<a name="l00884"></a>00884     <span class="keywordflow">while</span> ((pwave[i] < wmin) && (i<nvals_tot-1)) i++ ;
-<a name="l00885"></a>00885     start = i ;
-<a name="l00886"></a>00886     i= nvals_tot-1 ;
-<a name="l00887"></a>00887     <span class="keywordflow">while</span> ((pwave[i] > wmax) && (i>0)) i-- ;
-<a name="l00888"></a>00888     stop = i ;
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     <span class="keywordflow">if</span> (start>=stop) {
-<a name="l00891"></a>00891         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot plot the catalog"</span>) ;
-<a name="l00892"></a>00892         <span class="keywordflow">return</span> -1 ;
-<a name="l00893"></a>00893     }
-<a name="l00894"></a>00894     nvals = start - stop + 1 ;
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896     <span class="comment">/* Create the bivector to plot */</span>
-<a name="l00897"></a>00897     subcat_x = cpl_vector_extract(cpl_bivector_get_x_const(cat),start,stop, 1) ;
-<a name="l00898"></a>00898     subcat_y = cpl_vector_extract(cpl_bivector_get_y_const(cat),start,stop, 1) ;
-<a name="l00899"></a>00899     subcat = cpl_bivector_wrap_vectors(subcat_x, subcat_y) ;
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     <span class="comment">/* Plot */</span>
-<a name="l00902"></a>00902     <span class="keywordflow">if</span> (nvals > 500) {
-<a name="l00903"></a>00903         cpl_plot_bivector(
-<a name="l00904"></a>00904                 <span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';set ylabel 'Emission';"</span>,
-<a name="l00905"></a>00905                 <span class="stringliteral">"t 'Catalog Spectrum' w lines"</span>, <span class="stringliteral">""</span>, subcat);
-<a name="l00906"></a>00906     } <span class="keywordflow">else</span> {
-<a name="l00907"></a>00907         cpl_plot_bivector(
-<a name="l00908"></a>00908                 <span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';set ylabel 'Emission';"</span>,
-<a name="l00909"></a>00909                 <span class="stringliteral">"t 'Catalog Spectrum' w impulses"</span>, <span class="stringliteral">""</span>, subcat);
-<a name="l00910"></a>00910     }
-<a name="l00911"></a>00911     cpl_bivector_unwrap_vectors(subcat) ;
-<a name="l00912"></a>00912     cpl_vector_delete(subcat_x) ;
-<a name="l00913"></a>00913     cpl_vector_delete(subcat_y) ;
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915     <span class="keywordflow">return</span> 0 ;
-<a name="l00916"></a>00916 }
-<a name="l00917"></a>00917    
-<a name="l00920"></a>00920 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00935"></a>00935 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00936"></a>00936 <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_wlxcorr_estimate(cpl_vector           * vxc,
-<a name="l00937"></a>00937                                     cpl_vector           * model,
-<a name="l00938"></a>00938                                     <span class="keyword">const</span> cpl_vector     * spectrum,
-<a name="l00939"></a>00939                                     <span class="keyword">const</span> cpl_bivector   * lines_catalog,
-<a name="l00940"></a>00940                                     <span class="keyword">const</span> cpl_vector     * conv_kernel,
-<a name="l00941"></a>00941                                     <span class="keyword">const</span> cpl_polynomial * poly_candi,
-<a name="l00942"></a>00942                                     <span class="keywordtype">double</span>                 slitw,
-<a name="l00943"></a>00943                                     <span class="keywordtype">double</span>                 fwhm)
-<a name="l00944"></a>00944 {
-<a name="l00945"></a>00945     cpl_errorstate prestate = cpl_errorstate_get();
-<a name="l00946"></a>00946     <span class="keyword">const</span> <span class="keywordtype">int</span> hsize = cpl_vector_get_size(vxc) / 2;
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948     <span class="keywordflow">if</span> (conv_kernel != NULL) {
-<a name="l00949"></a>00949         irplib_wlcalib_fill_spectrum(model, lines_catalog, conv_kernel,
-<a name="l00950"></a>00950                                   poly_candi, hsize);
-<a name="l00951"></a>00951     } <span class="keywordflow">else</span> {
-<a name="l00952"></a>00952         <span class="keyword">const</span> <span class="keywordtype">double</span> xtrunc = 0.5 * slitw + 5.0 * fwhm * CPL_MATH_SIG_FWHM;
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954         <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(model, NULL, NULL, poly_candi,
-<a name="l00955"></a>00955                                                lines_catalog, slitw, fwhm,
-<a name="l00956"></a>00956                                                xtrunc, 0, CPL_FALSE, CPL_FALSE,
-<a name="l00957"></a>00957                                                NULL);
-<a name="l00958"></a>00958     }
-<a name="l00959"></a>00959 
-<a name="l00960"></a>00960     <span class="keywordflow">if</span> (cpl_errorstate_is_equal(prestate))
-<a name="l00961"></a>00961         cpl_vector_correlate(vxc, model, spectrum);
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {
-<a name="l00964"></a>00964         cpl_vector_fill(vxc, 0.0);
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966         <span class="comment">/* cpl_errorstate_dump(prestate, CPL_FALSE, NULL); */</span>
-<a name="l00967"></a>00967         cpl_errorstate_set(prestate);
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969     }
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971     <span class="keywordflow">return</span>;
-<a name="l00972"></a>00972 }
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974 
-<a name="l00975"></a>00975 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00985"></a>00985 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00986"></a>00986 <span class="keyword">static</span> cpl_boolean irplib_wlcalib_is_lines(<span class="keyword">const</span> cpl_vector * wavelengths,
-<a name="l00987"></a>00987                                         <span class="keyword">const</span> cpl_polynomial * disp1d,
-<a name="l00988"></a>00988                                         <span class="keywordtype">int</span> spec_sz,
-<a name="l00989"></a>00989                                         <span class="keywordtype">double</span> tol)
-<a name="l00990"></a>00990 {
-<a name="l00991"></a>00991     <span class="keyword">const</span> <span class="keywordtype">int</span> nlines = cpl_vector_get_size(wavelengths);
-<a name="l00992"></a>00992     <span class="comment">/* The dispersion on the detector center */</span>
-<a name="l00993"></a>00993     <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion = cpl_polynomial_eval_1d_diff(disp1d,
-<a name="l00994"></a>00994                                                           0.5 * spec_sz + 1.0,
-<a name="l00995"></a>00995                                                           0.5 * spec_sz,
-<a name="l00996"></a>00996                                                           NULL);
-<a name="l00997"></a>00997     <span class="keyword">const</span> <span class="keywordtype">double</span> range = cpl_vector_get(wavelengths, nlines-1)
-<a name="l00998"></a>00998         - cpl_vector_get(wavelengths, 0);
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000     cpl_ensure(wavelengths != NULL, CPL_ERROR_NULL_INPUT,    CPL_FALSE);
-<a name="l01001"></a>01001     cpl_ensure(disp1d      != NULL, CPL_ERROR_NULL_INPUT,    CPL_FALSE);
-<a name="l01002"></a>01002     cpl_ensure(cpl_polynomial_get_dimension(disp1d) == 1,
-<a name="l01003"></a>01003                CPL_ERROR_ILLEGAL_INPUT, CPL_FALSE);
-<a name="l01004"></a>01004     cpl_ensure(range > 0.0,      CPL_ERROR_ILLEGAL_INPUT, CPL_FALSE);
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006     <span class="keywordflow">return</span> nlines * fabs(dispersion) <= tol * fabs(range) ? CPL_TRUE
-<a name="l01007"></a>01007         : CPL_FALSE;
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009 }
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01026"></a>01026 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01027"></a>01027 <span class="keyword">static</span>
-<a name="l01028"></a>01028 cpl_error_code irplib_wlcalib_fill_spectrum(cpl_vector           * <span class="keyword">self</span>,
-<a name="l01029"></a>01029                                          <span class="keyword">const</span> cpl_bivector   * lines_catalog,
-<a name="l01030"></a>01030                                          <span class="keyword">const</span> cpl_vector     * conv_kernel,
-<a name="l01031"></a>01031                                          <span class="keyword">const</span> cpl_polynomial * poly,
-<a name="l01032"></a>01032                                          <span class="keywordtype">int</span>                    search_hs)
-<a name="l01033"></a>01033 {
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036     <span class="keyword">const</span> <span class="keywordtype">int</span>          size = cpl_vector_get_size(<span class="keyword">self</span>);
-<a name="l01037"></a>01037     <span class="keyword">const</span> <span class="keywordtype">int</span>          nlines = cpl_bivector_get_size(lines_catalog);
-<a name="l01038"></a>01038     <span class="keyword">const</span> cpl_vector * xlines  = cpl_bivector_get_x_const(lines_catalog);
-<a name="l01039"></a>01039     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dxlines = cpl_vector_get_data_const(xlines);
-<a name="l01040"></a>01040     cpl_bivector     * sub_cat ;
-<a name="l01041"></a>01041     cpl_vector       * sub_cat_x;
-<a name="l01042"></a>01042     cpl_vector       * sub_cat_y;
-<a name="l01043"></a>01043     cpl_vector       * wl_limits;
-<a name="l01044"></a>01044     <span class="keywordtype">double</span>             wave_min, wave_max;
-<a name="l01045"></a>01045     <span class="keywordtype">int</span>                wave_min_id, wave_max_id;
-<a name="l01046"></a>01046     <span class="keywordtype">int</span>                nsub;
-<a name="l01047"></a>01047     <span class="keywordtype">int</span>                error;
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049     cpl_ensure_code(<span class="keyword">self</span>          != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01050"></a>01050     cpl_ensure_code(lines_catalog != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01051"></a>01051     cpl_ensure_code(conv_kernel   != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01052"></a>01052     cpl_ensure_code(poly          != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01053"></a>01053     cpl_ensure_code(size > 0,              CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056     <span class="comment">/* Resample the spectrum */</span>
-<a name="l01057"></a>01057     wl_limits = cpl_vector_new(size + 1);
-<a name="l01058"></a>01058     cpl_vector_fill_polynomial(wl_limits, poly, 0.5 - search_hs, 1);
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060     <span class="comment">/* The spectrum wavelength bounds */</span>
-<a name="l01061"></a>01061     wave_min = cpl_vector_get(wl_limits, 0);
-<a name="l01062"></a>01062     wave_max = cpl_vector_get(wl_limits, size);
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064     <span class="comment">/* Find the 1st line */</span>
-<a name="l01065"></a>01065     wave_min_id = cpl_vector_find(xlines, wave_min);
-<a name="l01066"></a>01066     <span class="comment">/* The first line must be less than or equal to wave_min */</span>
-<a name="l01067"></a>01067     <span class="keywordflow">if</span> (dxlines[wave_min_id] > wave_min) wave_min_id--;
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069     <span class="keywordflow">if</span> (wave_min_id < 0) {
-<a name="l01070"></a>01070         cpl_vector_delete(wl_limits);
-<a name="l01071"></a>01071         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l01072"></a>01072                                            __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span>
-<a name="l01073"></a>01073                                            <span class="stringliteral">"catalogue only has lines above %g"</span>,
-<a name="l01074"></a>01074                                            nlines, wave_min);
-<a name="l01075"></a>01075     }
-<a name="l01076"></a>01076 
-<a name="l01077"></a>01077     <span class="comment">/* Find the last line */</span>
-<a name="l01078"></a>01078     wave_max_id = cpl_vector_find(xlines, wave_max);
-<a name="l01079"></a>01079     <span class="comment">/* The last line must be greater than or equal to wave_max */</span>
-<a name="l01080"></a>01080     <span class="keywordflow">if</span> (dxlines[wave_max_id] < wave_max) wave_max_id++;
-<a name="l01081"></a>01081 
-<a name="l01082"></a>01082     <span class="keywordflow">if</span> (wave_max_id == nlines) {
-<a name="l01083"></a>01083         cpl_vector_delete(wl_limits);
-<a name="l01084"></a>01084         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,
-<a name="l01085"></a>01085                                            __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span>
-<a name="l01086"></a>01086                                            <span class="stringliteral">"catalogue only has lines below %g"</span>,
-<a name="l01087"></a>01087                                            nlines, wave_max);
-<a name="l01088"></a>01088     }
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090     <span class="comment">/* Checking the wavelength range at this point via the indices also</span>
-<a name="l01091"></a>01091 <span class="comment">       verifies that they were not found using non-increasing wavelengths */</span>
-<a name="l01092"></a>01092     nsub = 1 + wave_max_id - wave_min_id;
-<a name="l01093"></a>01093     cpl_ensure_code(nsub > 1, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095     <span class="comment">/* Wrap a new bivector around the relevant part of the catalog */</span>
-<a name="l01096"></a>01096     <span class="comment">/* The data is _not_ modified */</span>
-<a name="l01097"></a>01097     sub_cat_x = cpl_vector_wrap(nsub, wave_min_id + (<span class="keywordtype">double</span>*)dxlines);
-<a name="l01098"></a>01098     sub_cat_y = cpl_vector_wrap(nsub, wave_min_id + (<span class="keywordtype">double</span>*)
-<a name="l01099"></a>01099                                 cpl_bivector_get_y_data_const(lines_catalog));
-<a name="l01100"></a>01100     sub_cat = cpl_bivector_wrap_vectors(sub_cat_x, sub_cat_y);
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102     <span class="comment">/* High resolution catalog */</span>
-<a name="l01103"></a>01103     error = irplib_wlxcorr_signal_resample(<span class="keyword">self</span>, wl_limits, sub_cat);
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105     cpl_vector_delete(wl_limits);
-<a name="l01106"></a>01106     cpl_bivector_unwrap_vectors(sub_cat);
-<a name="l01107"></a>01107     (void)cpl_vector_unwrap(sub_cat_x);
-<a name="l01108"></a>01108     (void)cpl_vector_unwrap(sub_cat_y);
-<a name="l01109"></a>01109 
-<a name="l01110"></a>01110     cpl_ensure_code(!error, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112     <span class="comment">/* Smooth the instrument resolution */</span>
-<a name="l01113"></a>01113     cpl_ensure_code(!irplib_wlxcorr_convolve(<span class="keyword">self</span>, conv_kernel),
-<a name="l01114"></a>01114                     cpl_error_get_code());
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01117"></a>01117 }
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01130"></a>01130 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01131"></a>01131 <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_wlxcorr_signal_resample(
-<a name="l01132"></a>01132         cpl_vector          *   resampled, 
-<a name="l01133"></a>01133         <span class="keyword">const</span> cpl_vector    *   xbounds,
-<a name="l01134"></a>01134         <span class="keyword">const</span> cpl_bivector  *   hires)
-<a name="l01135"></a>01135 {
-<a name="l01136"></a>01136     <span class="keyword">const</span> <span class="keywordtype">int</span>           hrsize = cpl_bivector_get_size(hires);
-<a name="l01137"></a>01137     <span class="keyword">const</span> cpl_vector*   xhires ;
-<a name="l01138"></a>01138     <span class="keyword">const</span> cpl_vector*   yhires ;
-<a name="l01139"></a>01139     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pxhires ;
-<a name="l01140"></a>01140     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pyhires ;
-<a name="l01141"></a>01141     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pxbounds ;
-<a name="l01142"></a>01142     cpl_vector      *   ybounds ;
-<a name="l01143"></a>01143     cpl_bivector    *   boundary ;
-<a name="l01144"></a>01144     <span class="keywordtype">double</span>          *   pybounds ;
-<a name="l01145"></a>01145     <span class="keywordtype">double</span>          *   presampled ;
-<a name="l01146"></a>01146     <span class="keywordtype">int</span>                 nsamples ;
-<a name="l01147"></a>01147     <span class="keywordtype">int</span>                 i, itt ;
-<a name="l01148"></a>01148    
-<a name="l01149"></a>01149     <span class="comment">/* Test entries */</span>
-<a name="l01150"></a>01150     <span class="keywordflow">if</span> ((!resampled) || (!xbounds) || (!hires)) <span class="keywordflow">return</span> -1 ;
-<a name="l01151"></a>01151 
-<a name="l01152"></a>01152     <span class="comment">/* Initialise */</span>
-<a name="l01153"></a>01153     nsamples = cpl_vector_get_size(resampled) ;
-<a name="l01154"></a>01154 
-<a name="l01155"></a>01155     <span class="comment">/* Initialise */</span>
-<a name="l01156"></a>01156     presampled = cpl_vector_get_data(resampled) ;
-<a name="l01157"></a>01157     pxbounds = cpl_vector_get_data_const(xbounds) ;
-<a name="l01158"></a>01158     xhires = cpl_bivector_get_x_const(hires) ;
-<a name="l01159"></a>01159     yhires = cpl_bivector_get_y_const(hires) ;
-<a name="l01160"></a>01160     pxhires = cpl_vector_get_data_const(xhires) ;
-<a name="l01161"></a>01161     pyhires = cpl_vector_get_data_const(yhires) ;
-<a name="l01162"></a>01162     
-<a name="l01163"></a>01163     <span class="comment">/* Create a new vector */</span>
-<a name="l01164"></a>01164     ybounds = cpl_vector_new(cpl_vector_get_size(xbounds)) ;
-<a name="l01165"></a>01165     boundary = cpl_bivector_wrap_vectors((cpl_vector*)xbounds,ybounds) ;
-<a name="l01166"></a>01166     pybounds = cpl_vector_get_data(ybounds) ;
-<a name="l01167"></a>01167 
-<a name="l01168"></a>01168     <span class="comment">/* Test entries */</span>
-<a name="l01169"></a>01169     <span class="keywordflow">if</span> (cpl_bivector_get_size(boundary) != nsamples + 1) {
-<a name="l01170"></a>01170         cpl_bivector_unwrap_vectors(boundary) ;
-<a name="l01171"></a>01171         cpl_vector_delete(ybounds) ;
-<a name="l01172"></a>01172         <span class="keywordflow">return</span> -1 ;
-<a name="l01173"></a>01173     }
-<a name="l01174"></a>01174 
-<a name="l01175"></a>01175     <span class="comment">/* Get the ind  */</span>
-<a name="l01176"></a>01176     itt = cpl_vector_find(xhires, pxbounds[0]);
-<a name="l01177"></a>01177 
-<a name="l01178"></a>01178     <span class="comment">/* Interpolate the signal */</span>
-<a name="l01179"></a>01179     <span class="keywordflow">if</span> (cpl_bivector_interpolate_linear(boundary, hires)) {
-<a name="l01180"></a>01180         cpl_bivector_unwrap_vectors(boundary) ;
-<a name="l01181"></a>01181         cpl_vector_delete(ybounds) ;
-<a name="l01182"></a>01182         <span class="keywordflow">return</span> -1 ;
-<a name="l01183"></a>01183     }
-<a name="l01184"></a>01184 
-<a name="l01185"></a>01185     <span class="comment">/* At this point itt most likely points to element just below</span>
-<a name="l01186"></a>01186 <span class="comment">       pxbounds[0] */</span>
-<a name="l01187"></a>01187     <span class="keywordflow">while</span> (pxhires[itt] < pxbounds[0]) itt++;
-<a name="l01188"></a>01188 
-<a name="l01189"></a>01189     <span class="keywordflow">for</span> (i=0; i < nsamples; i++) {
-<a name="l01190"></a>01190         <span class="comment">/* The i'th signal is the weighted average of the two interpolated</span>
-<a name="l01191"></a>01191 <span class="comment">           signals at the pixel boundaries and those table signals in</span>
-<a name="l01192"></a>01192 <span class="comment">           between */</span>
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194         <span class="keywordtype">double</span> xlow  = pxbounds[i];
-<a name="l01195"></a>01195         <span class="keywordtype">double</span> x     = pxhires[itt];
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197         <span class="keywordflow">if</span> (x > pxbounds[i+1]) x = pxbounds[i+1];
-<a name="l01198"></a>01198         <span class="comment">/* Contribution from interpolated value at wavelength at lower pixel</span>
-<a name="l01199"></a>01199 <span class="comment">           boundary */</span>
-<a name="l01200"></a>01200         presampled[i] = pybounds[i] * (x - xlow);
-<a name="l01201"></a>01201 
-<a name="l01202"></a>01202         <span class="comment">/* Contribution from table values in between pixel boundaries */</span>
-<a name="l01203"></a>01203         <span class="keywordflow">while</span> ((pxhires[itt] < pxbounds[i+1]) && (itt < hrsize)) {
-<a name="l01204"></a>01204             <span class="keyword">const</span> <span class="keywordtype">double</span> xprev = x;
-<a name="l01205"></a>01205             x = pxhires[itt+1];
-<a name="l01206"></a>01206             <span class="keywordflow">if</span> (x > pxbounds[i+1]) x = pxbounds[i+1];
-<a name="l01207"></a>01207             presampled[i] += pyhires[itt] * (x - xlow);
-<a name="l01208"></a>01208             xlow = xprev;
-<a name="l01209"></a>01209             itt++;
-<a name="l01210"></a>01210         }
-<a name="l01211"></a>01211 
-<a name="l01212"></a>01212         <span class="comment">/* Contribution from interpolated value at wavelength at upper pixel</span>
-<a name="l01213"></a>01213 <span class="comment">           boundary */</span>
-<a name="l01214"></a>01214         presampled[i] += pybounds[i+1] * (pxbounds[i+1] - xlow);
-<a name="l01215"></a>01215 
-<a name="l01216"></a>01216         <span class="comment">/* Compute average by dividing integral by length of pixel range</span>
-<a name="l01217"></a>01217 <span class="comment">           (the factor 2 comes from the contributions) */</span>
-<a name="l01218"></a>01218         presampled[i] /= 2 * (pxbounds[i+1] - pxbounds[i]);
-<a name="l01219"></a>01219     }
-<a name="l01220"></a>01220     cpl_bivector_unwrap_vectors(boundary) ;
-<a name="l01221"></a>01221     cpl_vector_delete(ybounds) ;
-<a name="l01222"></a>01222     <span class="keywordflow">return</span> 0 ;
-<a name="l01223"></a>01223 }
-<a name="l01224"></a>01224 
-<a name="l01225"></a>01225 
-<a name="l01226"></a>01226 
-<a name="l01227"></a>01227 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01248"></a>01248 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01249"></a>01249 <span class="keyword">static</span> cpl_error_code cpl_vector_fill_lss_profile_symmetric(cpl_vector * <span class="keyword">self</span>,
-<a name="l01250"></a>01250                                                             <span class="keywordtype">double</span>  slitw,
-<a name="l01251"></a>01251                                                             <span class="keywordtype">double</span>  fwhm)
-<a name="l01252"></a>01252 {
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     <span class="keyword">const</span> <span class="keywordtype">double</span> sigma = fwhm * CPL_MATH_SIG_FWHM;
-<a name="l01255"></a>01255     <span class="keyword">const</span> <span class="keywordtype">int</span>    n     = cpl_vector_get_size(<span class="keyword">self</span>);
-<a name="l01256"></a>01256     <span class="keywordtype">int</span>          i;
-<a name="l01257"></a>01257 
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01260"></a>01260     cpl_ensure_code(slitw > 0.0,  CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01261"></a>01261     cpl_ensure_code(fwhm  > 0.0,  CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263     <span class="comment">/* Cannot fail now */</span>
-<a name="l01264"></a>01264 
-<a name="l01265"></a>01265     <span class="comment">/* Special case for i = 0 */</span>
-<a name="l01266"></a>01266     (void)cpl_vector_set(<span class="keyword">self</span>, 0,
-<a name="l01267"></a>01267                          (<a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(0.5*slitw + 0.5, sigma) -
-<a name="l01268"></a>01268                           <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(0.5*slitw - 0.5, sigma)) / slitw);
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270     <span class="keywordflow">for</span> (i = 1; i < n; i++) {
-<a name="l01271"></a>01271         <span class="comment">/* FIXME: Reuse two irplib_erf_antideriv() calls from previous value */</span>
-<a name="l01272"></a>01272         <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = i + 0.5*slitw + 0.5;
-<a name="l01273"></a>01273         <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = i - 0.5*slitw + 0.5;
-<a name="l01274"></a>01274         <span class="keyword">const</span> <span class="keywordtype">double</span> x0p = i + 0.5*slitw - 0.5;
-<a name="l01275"></a>01275         <span class="keyword">const</span> <span class="keywordtype">double</span> x0n = i - 0.5*slitw - 0.5;
-<a name="l01276"></a>01276         <span class="keyword">const</span> <span class="keywordtype">double</span> val = 0.5/slitw *
-<a name="l01277"></a>01277             (<a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma) - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma) -
-<a name="l01278"></a>01278              <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma) + <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma));
-<a name="l01279"></a>01279         (void)cpl_vector_set(<span class="keyword">self</span>, i, val);
-<a name="l01280"></a>01280     }
-<a name="l01281"></a>01281 
-<a name="l01282"></a>01282     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01283"></a>01283 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wlxcorr.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wlxcorr.c,v 1.58 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IRPLIB package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.58 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_wavecal_impl.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "irplib_wlxcorr.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                           Defines</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#ifndef CPL_SIZE_FORMAT</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_size int</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="comment">/* END TEMPORARY SUPPORT OF CPL 5.x */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#ifndef inline</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define inline </span><span class="comment">/* inline */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#define IRPLIB_MAX(A,B) ((A) > (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_MIN(A,B) ((A) < (B) ? (A) : (B))</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#define IRPLIB_PTR_SWAP(a,b)                                               \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">    do { void * irplib_ptr_swap =(a);(a)=(b);(b)=irplib_ptr_swap; } while (0)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                           Private functions</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_wlxcorr_estimate(cpl_vector *, cpl_vector *,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                     <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                                     <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                                     <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                                     <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                                     <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_wlxcorr_signal_resample(cpl_vector *, <span class="keyword">const</span> cpl_vector *, </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keyword">const</span> cpl_bivector *) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> cpl_error_code cpl_vector_fill_lss_profile_symmetric(cpl_vector *,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                                             <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> cpl_error_code irplib_wlcalib_fill_spectrum(cpl_vector *,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                                 <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                                 <span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                                 <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keyword">static</span> cpl_boolean irplib_wlcalib_is_lines(<span class="keyword">const</span> cpl_vector *,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                                         <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                         <span class="keywordtype">int</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> cpl_polynomial * irplib_wlxcorr_best_poly(<span class="keyword">const</span> cpl_vector     * spectrum,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                                           <span class="keyword">const</span> cpl_bivector   * lines_catalog,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                           <span class="keywordtype">int</span>                    degree,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                           <span class="keyword">const</span> cpl_polynomial * guess_poly,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                           <span class="keyword">const</span> cpl_vector     * wl_error,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                           <span class="keywordtype">int</span>                    nsamples,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                           <span class="keywordtype">double</span>                 slitw,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                           <span class="keywordtype">double</span>                 fwhm,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                           <span class="keywordtype">double</span>               * xc,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                           cpl_table           ** wlres,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                           cpl_vector          ** xcorrs)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>         spec_sz = cpl_vector_get_size(spectrum);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>         nfree   = cpl_vector_get_size(wl_error);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordtype">int</span>               ntests  = 1;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_vector      * model;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_vector      * vxc;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_vector      * init_pts_wl;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_matrix      * init_pts_x;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_vector      * pts_wl;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_vector      * vxcorrs;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_vector      * conv_kernel = NULL;    </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     cpl_polynomial  * poly_sol;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     cpl_polynomial  * poly_candi;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    * pwl_error = cpl_vector_get_data_const(wl_error); </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    * dxc;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     cpl_size          degree_loc ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keyword">const</span> cpl_boolean symsamp = CPL_TRUE; <span class="comment">/* init_pts_x is symmetric */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keyword">const</span> cpl_boolean is_lines</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         = irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                                guess_poly, spec_sz, 1.0);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">int</span>               i;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="comment">/* FIXME: Need mode parameter for catalogue type (lines <=> profile) */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="comment">/* In case of failure */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">if</span> (wlres  != NULL) *wlres  = NULL;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">if</span> (xcorrs != NULL) *xcorrs = NULL;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="comment">/* Useful for knowing if resampling is used */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Checking %d^%d dispersion polynomials (slitw=%g, "</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                   <span class="stringliteral">"fwhm=%g) against %d-point observed spectrum with%s "</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                   <span class="stringliteral">"catalog resampling"</span>, nsamples, nfree, slitw, fwhm, spec_sz,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                   is_lines ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_ensure(xc            != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     *xc = -1.0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     cpl_ensure(spectrum      != NULL,  CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_ensure(lines_catalog != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_ensure(guess_poly    != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     cpl_ensure(wl_error      != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cpl_ensure(nfree         >= 2,    CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_ensure(nsamples      >  0,    CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="comment">/* FIXME: degree is redundant */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_ensure(1 + degree   == nfree, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     cpl_ensure(cpl_polynomial_get_dimension(guess_poly) == 1,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">if</span> (nsamples > 1) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="comment">/* Search place must consist of more than one point */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         <span class="comment">/* FIXME: The bounds should probably not be negative */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordflow">for</span> (i = 0; i < nfree; i++) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>             <span class="keywordflow">if</span> (pwl_error[i] != 0.0) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         cpl_ensure(i < nfree, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>  </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">if</span> (!is_lines) {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <span class="comment">/* Create the convolution kernel */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>         conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw, fwhm);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         cpl_ensure(conv_kernel   != NULL, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="comment">/* Create initial test points */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     init_pts_x  = cpl_matrix_new(1, nfree);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     init_pts_wl = cpl_vector_new(nfree);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     pts_wl      = cpl_vector_new(nfree);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">for</span> (i = 0; i < nfree; i++) {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xpos  = spec_sz * i / (double)degree;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> wlpos = cpl_polynomial_eval_1d(guess_poly, xpos, NULL)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>             - 0.5 * pwl_error[i];</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         cpl_matrix_set(init_pts_x, 0, i, xpos);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         cpl_vector_set(init_pts_wl,   i, wlpos);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         ntests *= nsamples; <span class="comment">/* Count number of tests */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     vxcorrs = xcorrs != NULL ? cpl_vector_new(ntests) : NULL;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     poly_sol   = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     poly_candi = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     model = cpl_vector_new(spec_sz);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     vxc = cpl_vector_new(1);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     dxc = cpl_vector_get_data_const(vxc);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>    </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="comment">/* Create the polynomial candidates and estimate them */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">for</span> (i=0; i < ntests; i++) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         <span class="keywordtype">int</span>    idiv = i;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         <span class="keywordtype">int</span>    deg;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         <span class="comment">/* Update wavelength at one anchor point - and reset wavelengths</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">           to their default for any anchor point(s) at higher wavelengths */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         <span class="keywordflow">for</span> (deg = degree; deg >= 0; deg--, idiv /= nsamples) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> imod = idiv % nsamples;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> wlpos = cpl_vector_get(init_pts_wl, deg)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                + imod * pwl_error[deg] / nsamples;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>             <span class="comment">/* FIXME: If wlpos causes pts_wl to be non-increasing, the</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">               solution will be non-physical with no need for evaluation.</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">               (*xc could be set to -1 in this case). */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>             cpl_vector_set(pts_wl, deg, wlpos);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             <span class="keywordflow">if</span> (imod > 0) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         <span class="comment">/* Generate */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         degree_loc = (cpl_size)degree ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         cpl_polynomial_fit(poly_candi, init_pts_x, &symsamp, pts_wl,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                            NULL, CPL_FALSE, NULL, &degree_loc);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="comment">/* *** Estimate *** */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         irplib_wlxcorr_estimate(vxc, model, spectrum, lines_catalog,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                                 conv_kernel, poly_candi, slitw, fwhm);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         <span class="keywordflow">if</span> (vxcorrs != NULL) cpl_vector_set(vxcorrs, i, *dxc);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         <span class="keywordflow">if</span> (*dxc > *xc) {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>             <span class="comment">/* Found a better solution */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>             *xc = *dxc;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>             IRPLIB_PTR_SWAP(poly_sol, poly_candi);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     cpl_vector_delete(model);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_vector_delete(vxc);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cpl_vector_delete(conv_kernel);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     cpl_vector_delete(pts_wl);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     cpl_matrix_delete(init_pts_x);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     cpl_vector_delete(init_pts_wl);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     cpl_polynomial_delete(poly_candi);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="preprocessor">#ifdef CPL_WLCALIB_FAIL_ON_CONSTANT</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="preprocessor"></span>    <span class="comment">/* FIXME: */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordflow">if</span> (cpl_polynomial_get_degree(poly_sol) == 0) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         cpl_polynomial_delete(poly_sol);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         cpl_vector_delete(vxcorrs);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>         *xc = 0.0;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                     __FILE__, __LINE__, <span class="stringliteral">"Found a constant "</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                     <span class="stringliteral">"dispersion"</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>             cpl_errorstate_dump(prestate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="preprocessor"></span>    </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">if</span> (wlres != NULL) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <span class="comment">/* FIXME: A failure in the table creation is not considered a failure</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">           of the whole function call (although all outputs may be useless) */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="comment">/* Create the spc_table  */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         *wlres = irplib_wlxcorr_gen_spc_table(spectrum, lines_catalog, slitw,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                               fwhm, guess_poly, poly_sol);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         <span class="keywordflow">if</span> (*wlres == NULL) {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>             cpl_polynomial_delete(poly_sol);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>             cpl_vector_delete(vxcorrs);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>             *xc = -1.0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_OUTPUT,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                         __FILE__, __LINE__, <span class="stringliteral">"Cannot generate "</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                         <span class="stringliteral">"infos table"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>             <span class="comment">/* cpl_errorstate_dump(prestate, CPL_FALSE, NULL); */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>             <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     } </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">if</span> (xcorrs != NULL) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         *xcorrs = vxcorrs;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         <span class="comment">/* assert(vxcorrs == NULL); */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordflow">return</span> poly_sol;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> cpl_table * irplib_wlxcorr_gen_spc_table(</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         <span class="keyword">const</span> cpl_vector        *   spectrum,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         <span class="keyword">const</span> cpl_bivector      *   lines_catalog,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         <span class="keywordtype">double</span>                      slitw,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <span class="keywordtype">double</span>                      fwhm,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keyword">const</span> cpl_polynomial    *   guess_poly,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="keyword">const</span> cpl_polynomial    *   corr_poly)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     cpl_vector      *   conv_kernel = NULL;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     cpl_bivector    *   gen_init ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     cpl_bivector    *   gen_corr ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     cpl_table       *   spc_table ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pgen ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>        xtrunc = 0.5 * slitw + 5.0 * fwhm * CPL_MATH_SIG_FWHM;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           spec_sz = cpl_vector_get_size(spectrum);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keyword">const</span> cpl_boolean   guess_resamp</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         = !irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                                 guess_poly, spec_sz, 1.0);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keyword">const</span> cpl_boolean   corr_resamp</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         = !irplib_wlcalib_is_lines(cpl_bivector_get_x_const(lines_catalog),</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                                 corr_poly, spec_sz, 1.0);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     cpl_error_code      error;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Tabel for guess dispersion polynomial (slitw=%g, "</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                   <span class="stringliteral">"fwhm=%g) with %d-point observed spectrum with%s catalog re"</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                   <span class="stringliteral">"sampling"</span>, slitw, fwhm, spec_sz, guess_resamp ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_msg_debug(cpl_func, <span class="stringliteral">"Tabel for corr. dispersion polynomial (slitw=%g, "</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                   <span class="stringliteral">"fwhm=%g) with %d-point observed spectrum with%s catalog re"</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                   <span class="stringliteral">"sampling"</span>, slitw, fwhm, spec_sz, corr_resamp ? <span class="stringliteral">"out"</span> : <span class="stringliteral">""</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="comment">/* Test inputs */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     cpl_ensure(spectrum, CPL_ERROR_NULL_INPUT, NULL) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     cpl_ensure(lines_catalog, CPL_ERROR_NULL_INPUT, NULL) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     cpl_ensure(guess_poly, CPL_ERROR_NULL_INPUT, NULL) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     cpl_ensure(corr_poly, CPL_ERROR_NULL_INPUT, NULL) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="comment">/* Create the convolution kernel */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">if</span> (guess_resamp || corr_resamp) {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         conv_kernel = irplib_wlxcorr_convolve_create_kernel(slitw, fwhm);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         <span class="keywordflow">if</span> (conv_kernel == NULL) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                                         __FILE__, __LINE__, <span class="stringliteral">"Cannot create "</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                                         <span class="stringliteral">"convolution kernel"</span>) ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="comment">/* Get the emission at initial wavelengths */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     gen_init = cpl_bivector_new(spec_sz);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">if</span> (guess_resamp) {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         error = irplib_wlcalib_fill_spectrum(cpl_bivector_get_y(gen_init),</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                                           lines_catalog, conv_kernel,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                                           guess_poly, 0);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>             (cpl_bivector_get_y(gen_init), NULL, NULL,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>              guess_poly, lines_catalog,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>              slitw, fwhm, xtrunc, 0, CPL_FALSE, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordflow">if</span> (error || cpl_vector_fill_polynomial(cpl_bivector_get_x(gen_init),</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>                                             guess_poly, 1, 1)) {</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         cpl_vector_delete(conv_kernel);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         cpl_bivector_delete(gen_init);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                     __FILE__, __LINE__, <span class="stringliteral">"Cannot get the "</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                     <span class="stringliteral">"emission spectrum"</span>);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>  </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="comment">/* Get the emission at corrected wavelengths */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     gen_corr = cpl_bivector_new(spec_sz);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keywordflow">if</span> (corr_resamp) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         error = irplib_wlcalib_fill_spectrum(cpl_bivector_get_y(gen_corr),</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                           lines_catalog, conv_kernel,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                           corr_poly, 0);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         error = <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>             (cpl_bivector_get_y(gen_corr), NULL, NULL,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>              corr_poly, lines_catalog,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>              slitw, fwhm, xtrunc, 0, CPL_FALSE, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     <span class="keywordflow">if</span> (error || cpl_vector_fill_polynomial(cpl_bivector_get_x(gen_corr),</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                             corr_poly, 1, 1)) {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         cpl_vector_delete(conv_kernel);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         cpl_bivector_delete(gen_init);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         cpl_bivector_delete(gen_corr) ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                     __FILE__, __LINE__, <span class="stringliteral">"Cannot get the "</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                                     <span class="stringliteral">"emission spectrum"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_vector_delete(conv_kernel) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     <span class="comment">/* Create the ouput table */</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     spc_table = cpl_table_new(spec_sz);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_WAVELENGTH, </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>             CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_CAT_INIT, </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_CAT_FINAL, </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>             CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     cpl_table_new_column(spc_table, IRPLIB_WLXCORR_COL_OBS, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="comment">/* Update table */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     pgen = cpl_bivector_get_x_data_const(gen_corr) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_WAVELENGTH, pgen) ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     pgen = cpl_bivector_get_y_data_const(gen_corr) ;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_CAT_FINAL, pgen) ;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     pgen = cpl_vector_get_data_const(spectrum) ;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_OBS, pgen) ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     pgen = cpl_bivector_get_y_data_const(gen_init) ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     cpl_table_copy_data_double(spc_table, IRPLIB_WLXCORR_COL_CAT_INIT, pgen);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     cpl_bivector_delete(gen_init);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     cpl_bivector_delete(gen_corr);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     <span class="keywordflow">return</span> spc_table ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> }</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> cpl_bivector * irplib_wlxcorr_cat_extract(</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keyword">const</span> cpl_bivector  *   lines_catalog,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         <span class="keywordtype">double</span>                  wave_min,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         <span class="keywordtype">double</span>                  wave_max)</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           nlines = cpl_bivector_get_size(lines_catalog);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordtype">int</span>                 wave_min_id, wave_max_id ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     cpl_vector       *  sub_cat_wl ;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     cpl_vector       *  sub_cat_int ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keyword">const</span> cpl_vector *  xlines  = cpl_bivector_get_x_const(lines_catalog);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>     *  dxlines = cpl_vector_get_data_const(xlines);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     cpl_ensure(lines_catalog != NULL, CPL_ERROR_NULL_INPUT,    NULL);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="comment">/* Find the 1st line */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     wave_min_id = (int)cpl_vector_find(xlines, wave_min);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordflow">if</span> (wave_min_id < 0) {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                                     __FILE__, __LINE__, </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                                     <span class="stringliteral">"The starting wavelength cannot be found"</span>) ;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="comment">/* The first line must be greater than (at least?) wave_min */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordflow">if</span> (dxlines[wave_min_id] <= wave_min) wave_min_id++;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="comment">/* Find the last line */</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     wave_max_id = (int)cpl_vector_find(xlines, wave_max);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordflow">if</span> (wave_max_id < 0) {</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                                     __FILE__, __LINE__, </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                                     <span class="stringliteral">"The ending wavelength cannot be found"</span>) ;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <span class="comment">/* The last line must be less than wave_max */</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     <span class="keywordflow">if</span> (dxlines[wave_max_id] >= wave_min) wave_max_id--;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="comment">/* Checking the wavelength range at this point via the indices also</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">       verifies that they were not found using non-increasing wavelengths */</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     cpl_ensure(wave_min_id <= wave_max_id, CPL_ERROR_ILLEGAL_INPUT, NULL);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordflow">if</span> (wave_min_id < 0 || wave_max_id == nlines) {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                                     __FILE__, __LINE__, <span class="stringliteral">"The %d-line catalogue "</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                                     <span class="stringliteral">"has no lines in the range %g -> %g"</span>,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                                     nlines, wave_min, wave_max);</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     sub_cat_wl = cpl_vector_extract(xlines, wave_min_id, wave_max_id, 1);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     sub_cat_int = cpl_vector_extract(cpl_bivector_get_y_const(lines_catalog), </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                                      wave_min_id, wave_max_id, 1);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>  </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">return</span> cpl_bivector_wrap_vectors(sub_cat_wl, sub_cat_int);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> cpl_vector * irplib_wlxcorr_convolve_create_kernel(<span class="keywordtype">double</span>  slitw,</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                                                    <span class="keywordtype">double</span>  fwhm)</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>  sigma  = fwhm * CPL_MATH_SIG_FWHM;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>     size   = 1 + (int)(5.0 * sigma + 0.5*slitw);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     cpl_vector  * kernel = cpl_vector_new(size);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">if</span> (cpl_vector_fill_lss_profile_symmetric(kernel, slitw, fwhm)) {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         cpl_vector_delete(kernel);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         cpl_ensure(0, cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keywordflow">return</span> kernel;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> }</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="keywordtype">int</span> irplib_wlxcorr_convolve(</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         cpl_vector          *   smoothed,</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         <span class="keyword">const</span> cpl_vector    *   conv_kernel)</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> {</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     <span class="keywordtype">int</span>             nsamples ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="keywordtype">int</span>             ihwidth ;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     cpl_vector  *   raw ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordtype">double</span>      *   psmoothe ;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="keywordtype">double</span>      *   praw ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>*   psymm ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordtype">int</span>             i, j ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     cpl_ensure(smoothed, CPL_ERROR_NULL_INPUT, -1) ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     cpl_ensure(conv_kernel, CPL_ERROR_NULL_INPUT, -1) ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     nsamples = cpl_vector_get_size(smoothed) ;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     ihwidth = cpl_vector_get_size(conv_kernel) - 1 ;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     cpl_ensure(ihwidth<nsamples, CPL_ERROR_ILLEGAL_INPUT, -1) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     psymm = cpl_vector_get_data_const(conv_kernel) ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     psmoothe = cpl_vector_get_data(smoothed) ;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="comment">/* Create raw vector */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     raw = cpl_vector_duplicate(smoothed) ;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     praw = cpl_vector_get_data(raw) ;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="comment">/* Convolve with the symmetric function */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keywordflow">for</span> (i=0 ; i<ihwidth ; i++) {</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         psmoothe[i] = praw[i] * psymm[0];</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         <span class="keywordflow">for</span> (j=1 ; j <= ihwidth ; j++) {</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> k = i-j < 0 ? 0 : i-j;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>             psmoothe[i] += (praw[k]+praw[i+j]) * psymm[j];</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keywordflow">for</span> (i=ihwidth ; i<nsamples-ihwidth ; i++) {</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>         psmoothe[i] = praw[i] * psymm[0];</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         <span class="keywordflow">for</span> (j=1 ; j<=ihwidth ; j++)</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>             psmoothe[i] += (praw[i-j]+praw[i+j]) * psymm[j];</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     }</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     <span class="keywordflow">for</span> (i=nsamples-ihwidth ; i<nsamples ; i++) {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         psmoothe[i] = praw[i] * psymm[0];</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         <span class="keywordflow">for</span> (j=1 ; j<=ihwidth ; j++) {</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> k = i+j > nsamples-1 ? nsamples - 1 : i+j;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             psmoothe[i] += (praw[k]+praw[i-j]) * psymm[j];</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         }</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     }</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     cpl_vector_delete(raw) ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> }</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="keywordtype">int</span> irplib_wlxcorr_plot_solution(</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         <span class="keyword">const</span> cpl_polynomial    *   init,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         <span class="keyword">const</span> cpl_polynomial    *   comp,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         <span class="keyword">const</span> cpl_polynomial    *   sol,</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         <span class="keywordtype">int</span>                         pix_start,</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         <span class="keywordtype">int</span>                         pix_stop) </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <span class="keywordtype">int</span>                 nsamples, nplots ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     cpl_vector      **  vectors ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     cpl_bivector    *   bivector ;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     <span class="keywordtype">double</span>              diff ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="keywordflow">if</span> (init == NULL || comp == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>     nsamples = pix_stop - pix_start + 1 ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordflow">if</span> (sol != NULL)    nplots = 3 ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordflow">else</span>                nplots = 2 ;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>     </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="comment">/* Create vectors */</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     vectors = cpl_malloc((nplots+1)*<span class="keyword">sizeof</span>(cpl_vector*)) ;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) vectors[i] = cpl_vector_new(nsamples) ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="comment">/* First plot with the lambda/pixel relation */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="comment">/* Fill vectors */</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keywordflow">for</span> (i=0 ; i<nsamples ; i++) {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         cpl_vector_set(vectors[0], i, pix_start+i) ;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         cpl_vector_set(vectors[1], i, </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                 cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         cpl_vector_set(vectors[2], i, </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>                 cpl_polynomial_eval_1d(comp, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         <span class="keywordflow">if</span> (sol != NULL) </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>             cpl_vector_set(vectors[3], i, </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                     cpl_polynomial_eval_1d(sol, (<span class="keywordtype">double</span>)(pix_start+i), NULL)) ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="comment">/* Plot */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (pixels)';"</span>, </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>         <span class="stringliteral">"t '1-Initial / 2-Computed / 3-Solution' w lines"</span>, </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>         <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, nplots+1);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="comment">/* Free vectors */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) cpl_vector_delete(vectors[i]) ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     cpl_free(vectors) ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="comment">/* Allocate vectors */</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     nplots -- ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     vectors = cpl_malloc((nplots+1)*<span class="keyword">sizeof</span>(cpl_vector*)) ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) vectors[i] = cpl_vector_new(nsamples) ;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="comment">/* Second plot with the delta-lambda/pixel relation */</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="comment">/* Fill vectors */</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <span class="keywordflow">for</span> (i=0 ; i<nsamples ; i++) {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         cpl_vector_set(vectors[0], i, pix_start+i) ;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         diff = cpl_polynomial_eval_1d(comp, (<span class="keywordtype">double</span>)(pix_start+i), NULL) -</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>             cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>         cpl_vector_set(vectors[1], i, diff) ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         <span class="keywordflow">if</span> (sol != NULL) {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>             diff = cpl_polynomial_eval_1d(sol, (<span class="keywordtype">double</span>)(pix_start+i), NULL) -</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                 cpl_polynomial_eval_1d(init, (<span class="keywordtype">double</span>)(pix_start+i), NULL) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>             cpl_vector_set(vectors[2], i, diff) ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="comment">/* Plot */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordflow">if</span> (sol == NULL) {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         bivector = cpl_bivector_wrap_vectors(vectors[0], vectors[1]) ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         cpl_plot_bivector(</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="stringliteral">"set grid;set xlabel 'Position (pixels)';set ylabel 'Wavelength difference';"</span>, </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>             <span class="stringliteral">"t 'Computed-Initial wavelenth' w lines"</span>, <span class="stringliteral">""</span>, bivector);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         cpl_bivector_unwrap_vectors(bivector) ;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>         cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Position (pixels)';"</span>, </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>             <span class="stringliteral">"t '1-Computed - Initial / 2--Solution - Initial' w lines"</span>, </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>             <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, nplots+1);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     }</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     <span class="comment">/* Free vectors */</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     <span class="keywordflow">for</span> (i=0 ; i<nplots+1 ; i++) cpl_vector_delete(vectors[i]) ;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     cpl_free(vectors) ;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> }</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="keywordtype">int</span> irplib_wlxcorr_plot_spc_table(</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         <span class="keyword">const</span> cpl_table     *   spc_table, </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   title,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         <span class="keywordtype">int</span>                     first_plotted_line,</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordtype">int</span>                     last_plotted_line) </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     <span class="keywordtype">char</span>                title_loc[1024] ;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     cpl_vector      **  vectors ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     cpl_vector      **  sub_vectors ;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     cpl_vector      *   tmp_vec ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordtype">int</span>                 nsamples ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordtype">double</span>              max, mean1, mean3 ;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="keywordtype">int</span>                 start_ind, stop_ind, hsize_pix ;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     <span class="keywordflow">if</span> (first_plotted_line > last_plotted_line) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="keywordflow">if</span> (spc_table == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     nsamples = cpl_table_get_nrow(spc_table) ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     hsize_pix = 10 ;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     sprintf(title_loc, </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <span class="stringliteral">"t '%s - 1-Initial catalog/2-Corrected catalog/3-Observed' w lines"</span>,</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         title) ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     title_loc[1023] = (char)0 ;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     vectors = cpl_malloc(4*<span class="keyword">sizeof</span>(cpl_vector*)) ;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     vectors[0] = cpl_vector_wrap(nsamples, </div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>             cpl_table_get_data_double((cpl_table*)spc_table,</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>                 IRPLIB_WLXCORR_COL_WAVELENGTH));</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     vectors[1] = cpl_vector_wrap(nsamples, </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             cpl_table_get_data_double((cpl_table*)spc_table, </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                 IRPLIB_WLXCORR_COL_CAT_INIT));</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     vectors[2] = cpl_vector_wrap(nsamples, </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             cpl_table_get_data_double((cpl_table*)spc_table, </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                 IRPLIB_WLXCORR_COL_CAT_FINAL));</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     vectors[3] = cpl_vector_wrap(nsamples, </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             cpl_table_get_data_double((cpl_table*)spc_table, </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>                 IRPLIB_WLXCORR_COL_OBS)) ;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="comment">/* Scale the signal for a bettre display */</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     mean1 = cpl_vector_get_mean(vectors[1]) ;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     mean3 = cpl_vector_get_mean(vectors[3]) ;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordflow">if</span> (fabs(mean3) > 1)</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         cpl_vector_multiply_scalar(vectors[3], fabs(mean1/mean3)) ;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';"</span>, title_loc,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)vectors, 4);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     <span class="comment">/* Unscale the signal */</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="keywordflow">if</span> (fabs(mean3) > 1)</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         cpl_vector_multiply_scalar(vectors[3], mean3/mean1) ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="comment">/* Loop on the brightest lines and zoom on them */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     sprintf(title_loc, </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="stringliteral">"t '%s - 1-Initial catalog/2-Corrected catalog/3-Observed (ZOOMED)' w lines"</span>,</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         title) ;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     title_loc[1023] = (char)0 ;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     tmp_vec = cpl_vector_duplicate(vectors[2]) ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordflow">for</span> (i=0 ; i<last_plotted_line ; i++) {</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         <span class="comment">/* Find the brightest line */</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>         <span class="keywordflow">if</span> ((max = cpl_vector_get_max(tmp_vec)) <= 0.0) break ;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         <span class="keywordflow">for</span> (j=0 ; j<nsamples ; j++) {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>             <span class="keywordflow">if</span> (cpl_vector_get(tmp_vec, j) == max) break ;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         }</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>         <span class="keywordflow">if</span> (j-hsize_pix < 0) start_ind = 0 ;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         <span class="keywordflow">else</span> start_ind = j-hsize_pix ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>         <span class="keywordflow">if</span> (j+hsize_pix > nsamples-1) stop_ind = nsamples-1 ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         <span class="keywordflow">else</span> stop_ind = j+hsize_pix ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         <span class="keywordflow">for</span> (j=start_ind ; j<=stop_ind ; j++) cpl_vector_set(tmp_vec, j, 0.0) ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         <span class="keywordflow">if</span> (i+1 >= first_plotted_line) {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>             sub_vectors = cpl_malloc(4*<span class="keyword">sizeof</span>(cpl_vector*)) ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>             sub_vectors[0]=cpl_vector_extract(vectors[0],start_ind,stop_ind,1);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>             sub_vectors[1]=cpl_vector_extract(vectors[1],start_ind,stop_ind,1);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>             sub_vectors[2]=cpl_vector_extract(vectors[2],start_ind,stop_ind,1);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>             sub_vectors[3]=cpl_vector_extract(vectors[3],start_ind,stop_ind,1);</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>             cpl_plot_vectors(<span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';"</span>, </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                     title_loc, <span class="stringliteral">""</span>, (<span class="keyword">const</span> cpl_vector **)sub_vectors, 4);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>             cpl_vector_delete(sub_vectors[0]) ;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>             cpl_vector_delete(sub_vectors[1]) ;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>             cpl_vector_delete(sub_vectors[2]) ;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>             cpl_vector_delete(sub_vectors[3]) ;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>             cpl_free(sub_vectors) ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>         }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     cpl_vector_delete(tmp_vec) ;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     cpl_vector_unwrap(vectors[0]) ;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     cpl_vector_unwrap(vectors[1]) ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     cpl_vector_unwrap(vectors[2]) ;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     cpl_vector_unwrap(vectors[3]) ;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     cpl_free(vectors) ;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> }</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="keywordtype">int</span> irplib_wlxcorr_catalog_plot(</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         <span class="keyword">const</span> cpl_bivector      *   cat,</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         <span class="keywordtype">double</span>                      wmin,</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         <span class="keywordtype">double</span>                      wmax) </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> {</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="keywordtype">int</span>                 start, stop ;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     cpl_bivector    *   subcat ;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     cpl_vector      *   subcat_x ;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     cpl_vector      *   subcat_y ;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pwave ;</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <span class="keywordtype">int</span>                 nvals, nvals_tot ;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keywordflow">if</span> (cat == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <span class="keywordflow">if</span> (wmax <= wmin) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     nvals_tot = cpl_bivector_get_size(cat) ;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="comment">/* Count the nb of values */</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     pwave = cpl_bivector_get_x_data_const(cat) ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     <span class="keywordflow">if</span> (pwave[0] >= wmin) start = 0 ;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     <span class="keywordflow">else</span> start = -1 ;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordflow">if</span> (pwave[nvals_tot-1] <= wmax) stop = nvals_tot-1 ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordflow">else</span> stop = -1 ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     i=0 ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="keywordflow">while</span> ((pwave[i] < wmin) && (i<nvals_tot-1)) i++ ;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     start = i ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     i= nvals_tot-1 ;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordflow">while</span> ((pwave[i] > wmax) && (i>0)) i-- ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     stop = i ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="keywordflow">if</span> (start>=stop) {</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot plot the catalog"</span>) ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     }</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     nvals = start - stop + 1 ;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="comment">/* Create the bivector to plot */</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     subcat_x = cpl_vector_extract(cpl_bivector_get_x_const(cat),start,stop, 1) ;</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     subcat_y = cpl_vector_extract(cpl_bivector_get_y_const(cat),start,stop, 1) ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     subcat = cpl_bivector_wrap_vectors(subcat_x, subcat_y) ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     <span class="comment">/* Plot */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     <span class="keywordflow">if</span> (nvals > 500) {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         cpl_plot_bivector(</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>                 <span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';set ylabel 'Emission';"</span>,</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>                 <span class="stringliteral">"t 'Catalog Spectrum' w lines"</span>, <span class="stringliteral">""</span>, subcat);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>         cpl_plot_bivector(</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>                 <span class="stringliteral">"set grid;set xlabel 'Wavelength (nm)';set ylabel 'Emission';"</span>,</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>                 <span class="stringliteral">"t 'Catalog Spectrum' w impulses"</span>, <span class="stringliteral">""</span>, subcat);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     }</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     cpl_bivector_unwrap_vectors(subcat) ;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     cpl_vector_delete(subcat_x) ;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     cpl_vector_delete(subcat_y) ;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>    </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="keyword">static</span> <span class="keywordtype">void</span> irplib_wlxcorr_estimate(cpl_vector           * vxc,</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                                     cpl_vector           * model,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                     <span class="keyword">const</span> cpl_vector     * spectrum,</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                                     <span class="keyword">const</span> cpl_bivector   * lines_catalog,</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                                     <span class="keyword">const</span> cpl_vector     * conv_kernel,</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                                     <span class="keyword">const</span> cpl_polynomial * poly_candi,</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                                     <span class="keywordtype">double</span>                 slitw,</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>                                     <span class="keywordtype">double</span>                 fwhm)</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> {</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     cpl_errorstate prestate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> hsize = cpl_vector_get_size(vxc) / 2;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="keywordflow">if</span> (conv_kernel != NULL) {</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         irplib_wlcalib_fill_spectrum(model, lines_catalog, conv_kernel,</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>                                   poly_candi, hsize);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> xtrunc = 0.5 * slitw + 5.0 * fwhm * CPL_MATH_SIG_FWHM;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         <a class="code" href="group__irplib__wavecal.html#ga8a65755ca17c9fa0b69ceb128f544761" title="Generate a 1D spectrum from (arc) lines and a dispersion relation.">irplib_vector_fill_line_spectrum_model</a>(model, NULL, NULL, poly_candi,</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                                                lines_catalog, slitw, fwhm,</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                                                xtrunc, 0, CPL_FALSE, CPL_FALSE,</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                                                NULL);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     <span class="keywordflow">if</span> (cpl_errorstate_is_equal(prestate))</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>         cpl_vector_correlate(vxc, model, spectrum);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(prestate)) {</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>         cpl_vector_fill(vxc, 0.0);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         <span class="comment">/* cpl_errorstate_dump(prestate, CPL_FALSE, NULL); */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         cpl_errorstate_set(prestate);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     }</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> </div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="keyword">static</span> cpl_boolean irplib_wlcalib_is_lines(<span class="keyword">const</span> cpl_vector * wavelengths,</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>                                         <span class="keyword">const</span> cpl_polynomial * disp1d,</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>                                         <span class="keywordtype">int</span> spec_sz,</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>                                         <span class="keywordtype">double</span> tol)</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> {</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> nlines = cpl_vector_get_size(wavelengths);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     <span class="comment">/* The dispersion on the detector center */</span></div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion = cpl_polynomial_eval_1d_diff(disp1d,</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>                                                           0.5 * spec_sz + 1.0,</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                                                           0.5 * spec_sz,</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>                                                           NULL);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> range = cpl_vector_get(wavelengths, nlines-1)</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         - cpl_vector_get(wavelengths, 0);</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     cpl_ensure(wavelengths != NULL, CPL_ERROR_NULL_INPUT,    CPL_FALSE);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     cpl_ensure(disp1d      != NULL, CPL_ERROR_NULL_INPUT,    CPL_FALSE);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     cpl_ensure(cpl_polynomial_get_dimension(disp1d) == 1,</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>                CPL_ERROR_ILLEGAL_INPUT, CPL_FALSE);</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     cpl_ensure(range > 0.0,      CPL_ERROR_ILLEGAL_INPUT, CPL_FALSE);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordflow">return</span> nlines * fabs(dispersion) <= tol * fabs(range) ? CPL_TRUE</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>         : CPL_FALSE;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> cpl_error_code irplib_wlcalib_fill_spectrum(cpl_vector           * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>                                          <span class="keyword">const</span> cpl_bivector   * lines_catalog,</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>                                          <span class="keyword">const</span> cpl_vector     * conv_kernel,</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>                                          <span class="keyword">const</span> cpl_polynomial * poly,</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>                                          <span class="keywordtype">int</span>                    search_hs)</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          size = cpl_vector_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>          nlines = cpl_bivector_get_size(lines_catalog);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keyword">const</span> cpl_vector * xlines  = cpl_bivector_get_x_const(lines_catalog);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>     * dxlines = cpl_vector_get_data_const(xlines);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     cpl_bivector     * sub_cat ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     cpl_vector       * sub_cat_x;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     cpl_vector       * sub_cat_y;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     cpl_vector       * wl_limits;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordtype">double</span>             wave_min, wave_max;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordtype">int</span>                wave_min_id, wave_max_id;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordtype">int</span>                nsub;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     <span class="keywordtype">int</span>                error;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     cpl_ensure_code(<span class="keyword">self</span>          != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     cpl_ensure_code(lines_catalog != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     cpl_ensure_code(conv_kernel   != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     cpl_ensure_code(poly          != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     cpl_ensure_code(size > 0,              CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="comment">/* Resample the spectrum */</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     wl_limits = cpl_vector_new(size + 1);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     cpl_vector_fill_polynomial(wl_limits, poly, 0.5 - search_hs, 1);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="comment">/* The spectrum wavelength bounds */</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     wave_min = cpl_vector_get(wl_limits, 0);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     wave_max = cpl_vector_get(wl_limits, size);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="comment">/* Find the 1st line */</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     wave_min_id = cpl_vector_find(xlines, wave_min);</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     <span class="comment">/* The first line must be less than or equal to wave_min */</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <span class="keywordflow">if</span> (dxlines[wave_min_id] > wave_min) wave_min_id--;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordflow">if</span> (wave_min_id < 0) {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         cpl_vector_delete(wl_limits);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>                                            __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>                                            <span class="stringliteral">"catalogue only has lines above %g"</span>,</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                                            nlines, wave_min);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     }</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="comment">/* Find the last line */</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     wave_max_id = cpl_vector_find(xlines, wave_max);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     <span class="comment">/* The last line must be greater than or equal to wave_max */</span></div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     <span class="keywordflow">if</span> (dxlines[wave_max_id] < wave_max) wave_max_id++;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordflow">if</span> (wave_max_id == nlines) {</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>         cpl_vector_delete(wl_limits);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         <span class="keywordflow">return</span> cpl_error_set_message_macro(cpl_func, CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>                                            __FILE__, __LINE__, <span class="stringliteral">"The %d-line "</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>                                            <span class="stringliteral">"catalogue only has lines below %g"</span>,</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>                                            nlines, wave_max);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     <span class="comment">/* Checking the wavelength range at this point via the indices also</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment">       verifies that they were not found using non-increasing wavelengths */</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     nsub = 1 + wave_max_id - wave_min_id;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     cpl_ensure_code(nsub > 1, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="comment">/* Wrap a new bivector around the relevant part of the catalog */</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     <span class="comment">/* The data is _not_ modified */</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     sub_cat_x = cpl_vector_wrap(nsub, wave_min_id + (<span class="keywordtype">double</span>*)dxlines);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     sub_cat_y = cpl_vector_wrap(nsub, wave_min_id + (<span class="keywordtype">double</span>*)</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>                                 cpl_bivector_get_y_data_const(lines_catalog));</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     sub_cat = cpl_bivector_wrap_vectors(sub_cat_x, sub_cat_y);</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="comment">/* High resolution catalog */</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     error = irplib_wlxcorr_signal_resample(<span class="keyword">self</span>, wl_limits, sub_cat);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>     cpl_vector_delete(wl_limits);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     cpl_bivector_unwrap_vectors(sub_cat);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     (void)cpl_vector_unwrap(sub_cat_x);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     (void)cpl_vector_unwrap(sub_cat_y);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     cpl_ensure_code(!error, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     <span class="comment">/* Smooth the instrument resolution */</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     cpl_ensure_code(!irplib_wlxcorr_convolve(<span class="keyword">self</span>, conv_kernel),</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>                     cpl_error_get_code());</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="keyword">static</span> <span class="keywordtype">int</span> irplib_wlxcorr_signal_resample(</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         cpl_vector          *   resampled, </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <span class="keyword">const</span> cpl_vector    *   xbounds,</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         <span class="keyword">const</span> cpl_bivector  *   hires)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>           hrsize = cpl_bivector_get_size(hires);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keyword">const</span> cpl_vector*   xhires ;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     <span class="keyword">const</span> cpl_vector*   yhires ;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pxhires ;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pyhires ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>    *   pxbounds ;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>     cpl_vector      *   ybounds ;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     cpl_bivector    *   boundary ;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     <span class="keywordtype">double</span>          *   pybounds ;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     <span class="keywordtype">double</span>          *   presampled ;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     <span class="keywordtype">int</span>                 nsamples ;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>     <span class="keywordtype">int</span>                 i, itt ;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>    </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>     <span class="keywordflow">if</span> ((!resampled) || (!xbounds) || (!hires)) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     nsamples = cpl_vector_get_size(resampled) ;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     presampled = cpl_vector_get_data(resampled) ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     pxbounds = cpl_vector_get_data_const(xbounds) ;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     xhires = cpl_bivector_get_x_const(hires) ;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     yhires = cpl_bivector_get_y_const(hires) ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     pxhires = cpl_vector_get_data_const(xhires) ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     pyhires = cpl_vector_get_data_const(yhires) ;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     <span class="comment">/* Create a new vector */</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     ybounds = cpl_vector_new(cpl_vector_get_size(xbounds)) ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>     boundary = cpl_bivector_wrap_vectors((cpl_vector*)xbounds,ybounds) ;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     pybounds = cpl_vector_get_data(ybounds) ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> </div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     <span class="keywordflow">if</span> (cpl_bivector_get_size(boundary) != nsamples + 1) {</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>         cpl_bivector_unwrap_vectors(boundary) ;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>         cpl_vector_delete(ybounds) ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     }</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     <span class="comment">/* Get the ind  */</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     itt = cpl_vector_find(xhires, pxbounds[0]);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="comment">/* Interpolate the signal */</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     <span class="keywordflow">if</span> (cpl_bivector_interpolate_linear(boundary, hires)) {</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         cpl_bivector_unwrap_vectors(boundary) ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>         cpl_vector_delete(ybounds) ;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     }</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="comment">/* At this point itt most likely points to element just below</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">       pxbounds[0] */</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     <span class="keywordflow">while</span> (pxhires[itt] < pxbounds[0]) itt++;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     <span class="keywordflow">for</span> (i=0; i < nsamples; i++) {</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>         <span class="comment">/* The i'th signal is the weighted average of the two interpolated</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">           signals at the pixel boundaries and those table signals in</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment">           between */</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>         <span class="keywordtype">double</span> xlow  = pxbounds[i];</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>         <span class="keywordtype">double</span> x     = pxhires[itt];</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         <span class="keywordflow">if</span> (x > pxbounds[i+1]) x = pxbounds[i+1];</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         <span class="comment">/* Contribution from interpolated value at wavelength at lower pixel</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">           boundary */</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         presampled[i] = pybounds[i] * (x - xlow);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>         <span class="comment">/* Contribution from table values in between pixel boundaries */</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="keywordflow">while</span> ((pxhires[itt] < pxbounds[i+1]) && (itt < hrsize)) {</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> xprev = x;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>             x = pxhires[itt+1];</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>             <span class="keywordflow">if</span> (x > pxbounds[i+1]) x = pxbounds[i+1];</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>             presampled[i] += pyhires[itt] * (x - xlow);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>             xlow = xprev;</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>             itt++;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>         }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>         <span class="comment">/* Contribution from interpolated value at wavelength at upper pixel</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">           boundary */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>         presampled[i] += pybounds[i+1] * (pxbounds[i+1] - xlow);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>         <span class="comment">/* Compute average by dividing integral by length of pixel range</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="comment">           (the factor 2 comes from the contributions) */</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>         presampled[i] /= 2 * (pxbounds[i+1] - pxbounds[i]);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     }</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     cpl_bivector_unwrap_vectors(boundary) ;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     cpl_vector_delete(ybounds) ;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> }</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> <span class="keyword">static</span> cpl_error_code cpl_vector_fill_lss_profile_symmetric(cpl_vector * <span class="keyword">self</span>,</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>                                                             <span class="keywordtype">double</span>  slitw,</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>                                                             <span class="keywordtype">double</span>  fwhm)</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> {</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> sigma = fwhm * CPL_MATH_SIG_FWHM;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keyword">const</span> <span class="keywordtype">int</span>    n     = cpl_vector_get_size(<span class="keyword">self</span>);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     <span class="keywordtype">int</span>          i;</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     cpl_ensure_code(<span class="keyword">self</span> != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     cpl_ensure_code(slitw > 0.0,  CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     cpl_ensure_code(fwhm  > 0.0,  CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     <span class="comment">/* Cannot fail now */</span></div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     <span class="comment">/* Special case for i = 0 */</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     (void)cpl_vector_set(<span class="keyword">self</span>, 0,</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                          (<a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(0.5*slitw + 0.5, sigma) -</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>                           <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(0.5*slitw - 0.5, sigma)) / slitw);</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     <span class="keywordflow">for</span> (i = 1; i < n; i++) {</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>         <span class="comment">/* FIXME: Reuse two irplib_erf_antideriv() calls from previous value */</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> x1p = i + 0.5*slitw + 0.5;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> x1n = i - 0.5*slitw + 0.5;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> x0p = i + 0.5*slitw - 0.5;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> x0n = i - 0.5*slitw - 0.5;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> val = 0.5/slitw *</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>             (<a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1p, sigma) - <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x1n, sigma) -</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>              <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0p, sigma) + <a class="code" href="group__irplib__wavecal.html#ga2da9c21054a19322705de2d4f48d1d3f" title="The antiderivative of erx(x/sigma/sqrt(2)) with respect to x.">irplib_erf_antideriv</a>(x0n, sigma));</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>         (void)cpl_vector_set(<span class="keyword">self</span>, i, val);</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     }</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/irplib__wlxcorr_8h_source.html b/html/irplib__wlxcorr_8h_source.html
index ed2ac5c..20b96b8 100644
--- a/html/irplib__wlxcorr_8h_source.html
+++ b/html/irplib__wlxcorr_8h_source.html
@@ -2,88 +2,119 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: irplib_wlxcorr.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>irplib_wlxcorr.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: irplib_wlxcorr.h,v 1.22 2013/01/29 08:43:33 jtaylor Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IRPLIB package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: jtaylor $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef IRPLIB_WLXCORR_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Include</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                    Define</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/* The 4 columns of the table */</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#define IRPLIB_WLXCORR_COL_WAVELENGTH   "Wavelength"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_CAT_INIT     "Catalog Initial"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_CAT_FINAL    "Catalog Corrected"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_OBS          "Observed"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                                Functions prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> irplib_wlxcorr_plot_spc_table(<span class="keyword">const</span> cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;
-<a name="l00052"></a>00052 <span class="keywordtype">int</span> irplib_wlxcorr_catalog_plot(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>) ;
-<a name="l00053"></a>00053 <span class="keywordtype">int</span> irplib_wlxcorr_plot_solution(<span class="keyword">const</span> cpl_polynomial *, <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00054"></a>00054         <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 cpl_polynomial * irplib_wlxcorr_best_poly(<span class="keyword">const</span> cpl_vector *, 
-<a name="l00057"></a>00057         <span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">int</span>, <span class="keyword">const</span> cpl_polynomial *, <span class="keyword">const</span> cpl_vector *, 
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, cpl_table **, cpl_vector **) ;
-<a name="l00059"></a>00059 cpl_table * irplib_wlxcorr_gen_spc_table(<span class="keyword">const</span> cpl_vector *, 
-<a name="l00060"></a>00060         <span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00061"></a>00061         <span class="keyword">const</span> cpl_polynomial *) ;
-<a name="l00062"></a>00062 cpl_bivector * irplib_wlxcorr_cat_extract(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);
-<a name="l00063"></a>00063 cpl_vector * irplib_wlxcorr_convolve_create_kernel(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>) ;
-<a name="l00064"></a>00064 <span class="keywordtype">int</span> irplib_wlxcorr_convolve(cpl_vector *,<span class="keyword">const</span> cpl_vector *) ;
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 cpl_error_code irplib_wlxcorr_vector_fill_line_spectrum(cpl_vector *,
-<a name="l00068"></a>00068                                                 <span class="keyword">const</span> cpl_polynomial *,
-<a name="l00069"></a>00069                                                 <span class="keyword">const</span> cpl_bivector *,
-<a name="l00070"></a>00070                                                 <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,
-<a name="l00071"></a>00071                                                 <span class="keywordtype">int</span>);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_9dbeae34d65cadb5c6915b8c80494485.html">irplib</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">irplib_wlxcorr.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: irplib_wlxcorr.h,v 1.22 2013/01/29 08:43:33 jtaylor Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IRPLIB package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: jtaylor $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/01/29 08:43:33 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef IRPLIB_WLXCORR_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Include</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                    Define</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* The 4 columns of the table */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define IRPLIB_WLXCORR_COL_WAVELENGTH   "Wavelength"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_CAT_INIT     "Catalog Initial"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_CAT_FINAL    "Catalog Corrected"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define IRPLIB_WLXCORR_COL_OBS          "Observed"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                Functions prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> irplib_wlxcorr_plot_spc_table(<span class="keyword">const</span> cpl_table *, <span class="keyword">const</span> <span class="keywordtype">char</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">int</span> irplib_wlxcorr_catalog_plot(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">int</span> irplib_wlxcorr_plot_solution(<span class="keyword">const</span> cpl_polynomial *, <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keyword">const</span> cpl_polynomial *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> cpl_polynomial * irplib_wlxcorr_best_poly(<span class="keyword">const</span> cpl_vector *, </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">int</span>, <span class="keyword">const</span> cpl_polynomial *, <span class="keyword">const</span> cpl_vector *, </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span> *, cpl_table **, cpl_vector **) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> cpl_table * irplib_wlxcorr_gen_spc_table(<span class="keyword">const</span> cpl_vector *, </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keyword">const</span> cpl_polynomial *) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> cpl_bivector * irplib_wlxcorr_cat_extract(<span class="keyword">const</span> cpl_bivector *, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> cpl_vector * irplib_wlxcorr_convolve_create_kernel(<span class="keywordtype">double</span>, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">int</span> irplib_wlxcorr_convolve(cpl_vector *,<span class="keyword">const</span> cpl_vector *) ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> cpl_error_code irplib_wlxcorr_vector_fill_line_spectrum(cpl_vector *,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                                 <span class="keyword">const</span> cpl_polynomial *,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                                 <span class="keyword">const</span> cpl_bivector *,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                                                 <span class="keywordtype">double</span>, <span class="keywordtype">double</span>, <span class="keywordtype">double</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                                 <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/jquery.js b/html/jquery.js
new file mode 100644
index 0000000..63939e7
--- /dev/null
+++ b/html/jquery.js
@@ -0,0 +1,8 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement( [...]
+{g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=argumen [...]
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]| [...]
+&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsBy [...]
+f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replac [...]
+{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m, [...]
diff --git a/html/modules.html b/html/modules.html
index ec1b0ed..651ed36 100644
--- a/html/modules.html
+++ b/html/modules.html
@@ -2,121 +2,149 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<title>SINFONI Pipeline Reference Manual: Module Index</title>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<title>SINFONI Pipeline Reference Manual: Modules</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<div class="contents">
-<h1>Modules</h1>Here is a list of all modules:<ul>
-<li><a class="el" href="group__sinfo__absolute__utils.html">routines to determine the absolute positions</a></li>
-<li><a class="el" href="group__sinfo__bad__pix__search.html">Bad Pixel Search</a></li>
-<li><a class="el" href="group__sinfo__balance.html">To be removed</a></li>
-<li><a class="el" href="group__sinfo__baryvel.html">Velocity correction</a></li>
-<li><a class="el" href="group__sinfo__boltzmann.html">Boltzmann function operations</a></li>
-<li><a class="el" href="group__sinfo__coltilt.html">Column tilt computation</a></li>
-<li><a class="el" href="group__sinfo__companion.html">To be removed</a></li>
-<li><a class="el" href="group__sinfo__cube__construct.html">Cube generation functions</a></li>
-<li><a class="el" href="group__sinfo__dark__cfg.html">Dark manipulation functions</a></li>
-<li><a class="el" href="group__sinfo__detlin.html">Detector Linearity Determination Functions</a></li>
-<li><a class="el" href="group__sinfo__dfs.html">DFS related Utilities</a></li>
-<li><a class="el" href="group__sinfo__distortion.html">Distortion correction functions</a></li>
-<li><a class="el" href="group__sinfo__dump.html">Print CPL objects</a></li>
-<li><a class="el" href="group__sinfo__error.html">Error handling</a></li>
-<li><a class="el" href="group__sinfo__finddist__cfg.html">functions to determine slitlets distances</a></li>
-<li><a class="el" href="group__sinfo__fit.html">Fit functions</a></li>
-<li><a class="el" href="group__sinfo__flat__cfg.html">Flat manipulation functions</a></li>
-<li><a class="el" href="group__sinfo__focus.html">Focus determination functions</a></li>
-<li><a class="el" href="group__sinfo__function__1d.html">1d functions</a></li>
-<li><a class="el" href="group__spiffi__general__config.html">General configuration parameters</a></li>
-<li><a class="el" href="group__sinfo__globals.html">global functions</a></li>
-<li><a class="el" href="group__sinfo__image__ops.html">Image operations</a></li>
-<li><a class="el" href="group__sinfo__lamp__cfg.html">Flat frame manipulation functions</a></li>
-<li><a class="el" href="group__sinfo__lamp__spec__config.html">Spectroscopic flats manipulation</a></li>
-<li><a class="el" href="group__sinfo__msg.html">Messaging</a></li>
-<li><a class="el" href="group__sinfo__new__cube__ops.html">Cube operations</a></li>
-<li><a class="el" href="group__sinfo__new__resampling.html">Image resampling</a></li>
-<li><a class="el" href="group__sinfo__new__slit__pos.html">Slitlets position determination</a></li>
-<li><a class="el" href="group__sinfo__pfits.html">In/Out on propertylist cards</a></li>
-<li><a class="el" href="group__sinfo__pro__save.html">Functions to save a product</a></li>
-<li><a class="el" href="group__sinfo__produc__config.html">.c Pipeline products configurations</a></li>
-<li><a class="el" href="group__sinfo__qr__companion.html">functions for polynomial solution</a></li>
-<li><a class="el" href="group__sinfo__rec__utils.html">Recipe utilities</a></li>
-<li><a class="el" href="group__sinfo__remove__crh__single.html">Remove Cosmic Rays single (sinfo_remove_crh_single)</a></li>
-<li><a class="el" href="group__sinfo__shift__images.html">Functions to shift images</a></li>
-<li><a class="el" href="group__sinfo__skycor__config.html">Sky residuals corrections configuration</a></li>
-<li><a class="el" href="group__sinfo__spectrum__ops.html">Operations on spectra</a></li>
-<li><a class="el" href="group__sinfo__tilt__cfg.html">tilt computation</a></li>
-<li><a class="el" href="group__sinfo__time.html">Get date/time, possibly in ISO8601 format</a></li>
-<li><a class="el" href="group__sinfo__tpl__dfs.html">DFS related functions</a></li>
-<li><a class="el" href="group__sinfo__tpl__utils.html">Miscellaneous Utilities</a></li>
-<li><a class="el" href="group__sinfo__utilities.html">utilities</a></li>
-<li><a class="el" href="group__sinfo__utils.html">Utility functions</a></li>
-<li><a class="el" href="group__sinfo__utils__wrappers.html">Utility functions (wrappers)</a></li>
-<li><a class="el" href="group__sinfo__img__noise.html">Recipe to determine detector noise</a></li>
-<li><a class="el" href="group__sinfo__rec__detlin.html">Recipe to determine detector linearity</a></li>
-<li><a class="el" href="group__sinfo__rec__distortion.html">Recipe to compute optical distortions</a></li>
-<li><a class="el" href="group__sinfo__rec__jitter.html">Recipe to reduce science, PSF, telluric standards</a></li>
-<li><a class="el" href="group__sinfo__rec__lingain.html">Recipe to monitor detector's linearity and gain</a></li>
-<li><a class="el" href="group__sinfo__rec__mdark.html">Recipe to compute master dark</a></li>
-<li><a class="el" href="group__sinfo__rec__mflat.html">Recipe to compute master flat</a></li>
-<li><a class="el" href="group__sinfo__rec__objnod.html">Recipe to reduce science data</a></li>
-<li><a class="el" href="group__sinfo__rec__psf.html">Recipe to reduce PSF standard star data</a></li>
-<li><a class="el" href="group__sinfo__rec__pupil.html">Recipe to reduce pupil data</a></li>
-<li><a class="el" href="group__sinfo__rec__stdstar.html">Recipe to reduce telluric standard star data</a></li>
-<li><a class="el" href="group__sinfo__rec__wavecal.html">Recipe to reduce arc lamp data</a></li>
-<li><a class="el" href="group__sinfo__step__distortion.html">Recipe to compute optical distortions</a></li>
-<li><a class="el" href="group__sinfo__step__jitter.html">Recipe to reduce science, PSF or telluric standard data</a></li>
-<li><a class="el" href="group__sinfo__step__objnod.html">Recipe to reduce science data</a></li>
-<li><a class="el" href="group__sinfo__step__psf.html">Recipe to reduce PSF data</a></li>
-<li><a class="el" href="group__sinfo__step__stdstar.html">Recipe to reduce telluric standard data</a></li>
-<li><a class="el" href="group__sinfo__utl__bp__mask__add.html">Recipe to coadd bad pixel masks</a></li>
-<li><a class="el" href="group__sinfo__utl__cube2ima.html">Recipe to collapse a cube in an image</a></li>
-<li><a class="el" href="group__sinfo__utl__cube2spectrum.html">Recipe to collapse a cube in a spectrum</a></li>
-<li><a class="el" href="group__sinfo__utl__cube__arith.html">Recipe for cube arithmetics</a></li>
-<li><a class="el" href="group__sinfo__utl__cube__combine.html">Recipe to coadd cubes</a></li>
-<li><a class="el" href="group__sinfo__utl__cube__create.html">Recipe to coadd cubes</a></li>
-<li><a class="el" href="group__sinfo__utl__cube__test.html">Recipe to test cube operations</a></li>
-<li><a class="el" href="group__sinfo__utl__eff.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__illumcorr.html">Recipe to correct for slitlet illumination</a></li>
-<li><a class="el" href="group__sinfo__utl__ima__arith.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__ima__cube__ks__test.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__ima__gauss.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__ima__line__corr.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__remove__crh__single.html">Recipe to remove CRHs from an image</a></li>
-<li><a class="el" href="group__sinfo__utl__skycor.html">Recipe to correct sky residuals on science cubes</a></li>
-<li><a class="el" href="group__sinfo__utl__skymap.html">Recipe to generate a sky map for SINFONI SRTD</a></li>
-<li><a class="el" href="group__sinfo__utl__spectrum__divide__by__blackbody.html">Recipe to correct a spectrum from the blackbody thermal emission</a></li>
-<li><a class="el" href="group__sinfo__utl__spectrum__wavelength__shift.html">Recipe to shift a spectrum in wavelength</a></li>
-<li><a class="el" href="group__sinfo__utl__stdstars.html">Recipe to generate standard stars catalogs</a></li>
-<li><a class="el" href="group__sinfo__utl__table__ex.html">Recipe to do operations on an image</a></li>
-<li><a class="el" href="group__sinfo__utl__table__test.html">Utility to test column table shift</a></li>
-<li><a class="el" href="group__irplib__calib.html">Functions for calibrations</a></li>
-<li><a class="el" href="group__irplib__cat.html">Functions for accessing catalogues</a></li>
-<li><a class="el" href="group__irplib__distortion.html">Distortion correction functions</a></li>
-<li><a class="el" href="group__irplib__flat.html">Functions for flatfielding</a></li>
-<li><a class="el" href="group__irplib__framelist.html">Lists of frames with properties.</a></li>
-<li><a class="el" href="group__irplib__oddeven.html">Odd/Even column effect correction</a></li>
-<li><a class="el" href="group__irplib__plugin.html">Irplib plugin functionality</a></li>
-<li><a class="el" href="group__irplib__polynomial.html">1D-Polynomial roots</a></li>
-<li><a class="el" href="group__irplib__ppm.html">Point pattern matching</a></li>
-<li><a class="el" href="group__irplib__slitpos.html">Functions for slit position</a></li>
-<li><a class="el" href="group__irplib__spectrum.html">Functions for LSS spectra</a></li>
-<li><a class="el" href="group__irplib__stdstar.html">Functions for standard stars</a></li>
-<li><a class="el" href="group__irplib__strehl.html">Functions to compute the Strehl</a></li>
-<li><a class="el" href="group__irplib__utils.html">Miscellaneous Utilities</a></li>
-<li><a class="el" href="group__irplib__wavecal.html">Spectro functionality</a></li>
-<li><a class="el" href="group__irplib__wcs.html">Functions related to WCS</a></li>
-<li><a class="el" href="group__irplib__wlxcorr.html">Wavelength Cross correlation w. plotting</a></li>
-<li><a class="el" href="group__sinfo__absolute.html">Sinfo_absolute</a></li>
-<li><a class="el" href="group__sinfo__flat__ini__file.html">Flat manipulation functions</a></li>
-<li><a class="el" href="group__sinfo__new__bezier.html">Bezier Functions</a></li>
-<li><a class="el" href="group__sinfo__recipes.html">Recipe utilities</a></li>
-</ul>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
 </div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__absolute__utils.html" target="_self">routines to determine the absolute positions</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__bad__pix__search.html" target="_self">Bad Pixel Search</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__balance.html" target="_self">To be removed</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__baryvel.html" target="_self">Velocity correction</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__boltzmann.html" target="_self">Boltzmann function operations</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__coltilt.html" target="_self">Column tilt computation</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__companion.html" target="_self">To be removed</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__cube__construct.html" target="_self">Cube generation functions</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__dark__cfg.html" target="_self">Dark manipulation functions</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__detlin.html" target="_self">Detector Linearity Determination Functions</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__dfs.html" target="_self">DFS related Utilities</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__distortion.html" target="_self">Distortion correction functions</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__dump.html" target="_self">Print CPL objects</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__error.html" target="_self">Error handling</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__finddist__cfg.html" target="_self">functions to determine slitlets distances</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__fit.html" target="_self">Fit functions</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__flat__cfg.html" target="_self">Flat manipulation functions</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__focus.html" target="_self">Focus determination functions</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__function__1d.html" target="_self">1d functions</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__spiffi__general__config.html" target="_self">General configuration parameters</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__globals.html" target="_self">global functions</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__image__ops.html" target="_self">Image operations</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__lamp__cfg.html" target="_self">Flat frame manipulation functions</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__lamp__spec__config.html" target="_self">Spectroscopic flats manipulation</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__msg.html" target="_self">Messaging</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__new__cube__ops.html" target="_self">Cube operations</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__new__resampling.html" target="_self">Image resampling</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__new__slit__pos.html" target="_self">Slitlets position determination</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__pfits.html" target="_self">In/Out on propertylist cards</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__pro__save.html" target="_self">Functions to save a product</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__produc__config.html" target="_self">.c Pipeline products configurations</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__qr__companion.html" target="_self">functions for polynomial solution</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__utils.html" target="_self">Recipe utilities</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__remove__crh__single.html" target="_self">Remove Cosmic Rays single (sinfo_remove_crh_single)</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__shift__images.html" target="_self">Functions to shift images</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__skycor__config.html" target="_self">Sky residuals corrections configuration</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__spectrum__ops.html" target="_self">Operations on spectra</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__tilt__cfg.html" target="_self">tilt computation</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__time.html" target="_self">Get date/time, possibly in ISO8601 format</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__tpl__dfs.html" target="_self">DFS related functions</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__tpl__utils.html" target="_self">Miscellaneous Utilities</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utilities.html" target="_self">utilities</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utils.html" target="_self">Utility functions</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utils__wrappers.html" target="_self">Utility functions (wrappers)</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__img__noise.html" target="_self">Recipe to determine detector noise</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__detlin.html" target="_self">Recipe to determine detector linearity</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__distortion.html" target="_self">Recipe to compute optical distortions</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__jitter.html" target="_self">Recipe to reduce science, PSF, telluric standards</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__lingain.html" target="_self">Recipe to monitor detector's linearity and gain</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__mdark.html" target="_self">Recipe to compute master dark</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__mflat.html" target="_self">Recipe to compute master flat</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__objnod.html" target="_self">Recipe to reduce science data</a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__psf.html" target="_self">Recipe to reduce PSF standard star data</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__pupil.html" target="_self">Recipe to reduce pupil data</a></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__stdstar.html" target="_self">Recipe to reduce telluric standard star data</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__rec__wavecal.html" target="_self">Recipe to reduce arc lamp data</a></td><td class="desc"></td></tr>
+<tr id="row_56_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__step__distortion.html" target="_self">Recipe to compute optical distortions</a></td><td class="desc"></td></tr>
+<tr id="row_57_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__step__jitter.html" target="_self">Recipe to reduce science, PSF or telluric standard data</a></td><td class="desc"></td></tr>
+<tr id="row_58_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__step__objnod.html" target="_self">Recipe to reduce science data</a></td><td class="desc"></td></tr>
+<tr id="row_59_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__step__psf.html" target="_self">Recipe to reduce PSF data</a></td><td class="desc"></td></tr>
+<tr id="row_60_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__step__stdstar.html" target="_self">Recipe to reduce telluric standard data</a></td><td class="desc"></td></tr>
+<tr id="row_61_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__bp__mask__add.html" target="_self">Recipe to coadd bad pixel masks</a></td><td class="desc"></td></tr>
+<tr id="row_62_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube2ima.html" target="_self">Recipe to collapse a cube in an image</a></td><td class="desc"></td></tr>
+<tr id="row_63_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube2spectrum.html" target="_self">Recipe to collapse a cube in a spectrum</a></td><td class="desc"></td></tr>
+<tr id="row_64_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube__arith.html" target="_self">Recipe for cube arithmetics</a></td><td class="desc"></td></tr>
+<tr id="row_65_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube__combine.html" target="_self">Recipe to coadd cubes</a></td><td class="desc"></td></tr>
+<tr id="row_66_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube__create.html" target="_self">Recipe to coadd cubes</a></td><td class="desc"></td></tr>
+<tr id="row_67_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__cube__test.html" target="_self">Recipe to test cube operations</a></td><td class="desc"></td></tr>
+<tr id="row_68_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__eff.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_69_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__illumcorr.html" target="_self">Recipe to correct for slitlet illumination</a></td><td class="desc"></td></tr>
+<tr id="row_70_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__ima__arith.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_71_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__ima__cube__ks__test.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_72_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__ima__gauss.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_73_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__ima__line__corr.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_74_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__remove__crh__single.html" target="_self">Recipe to remove CRHs from an image</a></td><td class="desc"></td></tr>
+<tr id="row_75_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__skycor.html" target="_self">Recipe to correct sky residuals on science cubes</a></td><td class="desc"></td></tr>
+<tr id="row_76_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__skymap.html" target="_self">Recipe to generate a sky map for SINFONI SRTD</a></td><td class="desc"></td></tr>
+<tr id="row_77_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__spectrum__divide__by__blackbody.html" target="_self">Recipe to correct a   spectrum from the blackbody thermal emission</a></td><td class="desc"></td></tr>
+<tr id="row_78_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__spectrum__wavelength__shift.html" target="_self">Recipe to shift a spectrum in  wavelength</a></td><td class="desc"></td></tr>
+<tr id="row_79_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__stdstars.html" target="_self">Recipe to generate standard stars catalogs</a></td><td class="desc"></td></tr>
+<tr id="row_80_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__table__ex.html" target="_self">Recipe to do operations on an image</a></td><td class="desc"></td></tr>
+<tr id="row_81_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__utl__table__test.html" target="_self">Utility to test column table shift</a></td><td class="desc"></td></tr>
+<tr id="row_82_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__calib.html" target="_self">Functions for calibrations</a></td><td class="desc"></td></tr>
+<tr id="row_83_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__cat.html" target="_self">Functions for accessing catalogues</a></td><td class="desc"></td></tr>
+<tr id="row_84_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__distortion.html" target="_self">Distortion correction functions</a></td><td class="desc"></td></tr>
+<tr id="row_85_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__flat.html" target="_self">Functions for flatfielding</a></td><td class="desc"></td></tr>
+<tr id="row_86_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__framelist.html" target="_self">Lists of frames with properties.</a></td><td class="desc"></td></tr>
+<tr id="row_87_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__oddeven.html" target="_self">Odd/Even column effect correction</a></td><td class="desc"></td></tr>
+<tr id="row_88_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__plugin.html" target="_self">Irplib plugin functionality</a></td><td class="desc"></td></tr>
+<tr id="row_89_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__polynomial.html" target="_self">1D-Polynomial roots</a></td><td class="desc"></td></tr>
+<tr id="row_90_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__ppm.html" target="_self">Point pattern matching</a></td><td class="desc"></td></tr>
+<tr id="row_91_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__slitpos.html" target="_self">Functions for slit position</a></td><td class="desc"></td></tr>
+<tr id="row_92_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__spectrum.html" target="_self">Functions for LSS spectra</a></td><td class="desc"></td></tr>
+<tr id="row_93_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__stdstar.html" target="_self">Functions for standard stars</a></td><td class="desc"></td></tr>
+<tr id="row_94_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__strehl.html" target="_self">Functions to compute the Strehl</a></td><td class="desc"></td></tr>
+<tr id="row_95_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__utils.html" target="_self">Miscellaneous Utilities</a></td><td class="desc"></td></tr>
+<tr id="row_96_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__wavecal.html" target="_self">Spectro functionality</a></td><td class="desc"></td></tr>
+<tr id="row_97_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__wcs.html" target="_self">Functions related to WCS</a></td><td class="desc"></td></tr>
+<tr id="row_98_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__irplib__wlxcorr.html" target="_self">Wavelength Cross correlation w. plotting</a></td><td class="desc"></td></tr>
+<tr id="row_99_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__absolute.html" target="_self">Sinfo_absolute</a></td><td class="desc"></td></tr>
+<tr id="row_100_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__flat__ini__file.html" target="_self">Flat manipulation functions</a></td><td class="desc"></td></tr>
+<tr id="row_101_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><a class="el" href="group__sinfo__new__bezier.html" target="_self">Bezier Functions</a></td><td class="desc"></td></tr>
+<tr id="row_102_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><a class="el" href="group__sinfo__recipes.html" target="_self">Recipe utilities</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/nav_f.png b/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
Binary files /dev/null and b/html/nav_f.png differ
diff --git a/html/nav_g.png b/html/nav_g.png
new file mode 100644
index 0000000..9681f15
Binary files /dev/null and b/html/nav_g.png differ
diff --git a/html/nav_h.png b/html/nav_h.png
new file mode 100644
index 0000000..33389b1
Binary files /dev/null and b/html/nav_h.png differ
diff --git a/html/open.png b/html/open.png
new file mode 100644
index 0000000..30f75c7
Binary files /dev/null and b/html/open.png differ
diff --git a/html/recipes_2sinfo__utl__cube2ima_8c_source.html b/html/recipes_2sinfo__utl__cube2ima_8c_source.html
index 725b2c8..8eaa8a2 100644
--- a/html/recipes_2sinfo__utl__cube2ima_8c_source.html
+++ b/html/recipes_2sinfo__utl__cube2ima_8c_source.html
@@ -2,200 +2,231 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2ima.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2ima.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2ima.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="comment">/* cpl */</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037  
-<a name="l00038"></a>00038 <span class="comment">/* irplib */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_utl_cube2ima.h></span>
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                            Functions prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_create(cpl_plugin *) ;
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_exec(cpl_plugin *) ;
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_destroy(cpl_plugin *) ;
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Static variables</span>
-<a name="l00055"></a>00055 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube2ima_description[] =
-<a name="l00058"></a>00058 <span class="stringliteral">"This recipe performs cube to image comversion.\n"</span>
-<a name="l00059"></a>00059 <span class="stringliteral">"The input file is a cube which is contained in the sof file\n"</span>
-<a name="l00060"></a>00060 <span class="stringliteral">"Its tag should be CUBE.\n"</span>
-<a name="l00061"></a>00061 <span class="stringliteral">"The output is an image resulting from the average of the \n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"cube over a  wavelength rage which can be set by parameters \n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws sinfoni.sinfo_utl_cube2ima.we\n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"having aliases 'ws' 'we'\n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"esorex --params sinfo_utl_cube2ima\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"esorex --help sinfo_utl_cube2ima\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"\n"</span>;
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00071"></a>00071 <span class="comment">                                Functions code</span>
-<a name="l00072"></a>00072 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00088"></a><a class="code" href="group__sinfo__utl__cube2ima.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00088</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00089"></a>00089 {
-<a name="l00090"></a>00090     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00091"></a>00091     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     cpl_plugin_init(plugin,
-<a name="l00094"></a>00094                     CPL_PLUGIN_API,
-<a name="l00095"></a>00095                     SINFONI_BINARY_VERSION,
-<a name="l00096"></a>00096                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00097"></a>00097                     <span class="stringliteral">"sinfo_utl_cube2ima"</span>,
-<a name="l00098"></a>00098                     <span class="stringliteral">"Cube to image conversion"</span>,
-<a name="l00099"></a>00099                     sinfo_utl_cube2ima_description,
-<a name="l00100"></a>00100                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00101"></a>00101                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00102"></a>00102                     sinfo_get_license(),
-<a name="l00103"></a>00103                     sinfo_utl_cube2ima_create,
-<a name="l00104"></a>00104                     sinfo_utl_cube2ima_exec,
-<a name="l00105"></a>00105                     sinfo_utl_cube2ima_destroy) ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     cpl_pluginlist_append(list, plugin) ;
-<a name="l00108"></a>00108     
-<a name="l00109"></a>00109     <span class="keywordflow">return</span> 0;
-<a name="l00110"></a>00110 }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00121"></a>00121 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00122"></a>00122 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_create(cpl_plugin * plugin)
-<a name="l00123"></a>00123 {
-<a name="l00124"></a>00124     cpl_recipe      * recipe ;
-<a name="l00125"></a>00125     cpl_parameter   * p ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00129"></a>00129         recipe = (cpl_recipe *)plugin ;
-<a name="l00130"></a>00130     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00131"></a>00131     cpl_error_reset();
-<a name="l00132"></a>00132     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00135"></a>00135     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00138"></a>00138     <span class="comment">/* --stropt */</span>
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     <span class="comment">/* --doubleopt */</span>
-<a name="l00141"></a>00141     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>, 
-<a name="l00142"></a>00142                                 CPL_TYPE_DOUBLE, 
-<a name="l00143"></a>00143                                 <span class="stringliteral">"starting wavelength"</span>, 
-<a name="l00144"></a>00144                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima"</span>, 
-<a name="l00145"></a>00145                                 0.9999) ;
-<a name="l00146"></a>00146     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ws"</span>) ;
-<a name="l00147"></a>00147     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">/* --doubleopt */</span>
-<a name="l00151"></a>00151     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>, 
-<a name="l00152"></a>00152                                 CPL_TYPE_DOUBLE, 
-<a name="l00153"></a>00153                                 <span class="stringliteral">"starting wavelength"</span>, 
-<a name="l00154"></a>00154                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima"</span>, 
-<a name="l00155"></a>00155                                 2.999) ;
-<a name="l00156"></a>00156     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"we"</span>) ;
-<a name="l00157"></a>00157     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159     <span class="comment">/* Return */</span>
-<a name="l00160"></a>00160     <span class="keywordflow">return</span> 0;
-<a name="l00161"></a>00161 }
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_exec(cpl_plugin * plugin)
-<a name="l00171"></a>00171 {
-<a name="l00172"></a>00172     cpl_recipe  *   recipe ;
-<a name="l00173"></a>00173     <span class="keywordtype">int</span> result=0;
-<a name="l00174"></a>00174     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00177"></a>00177     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00178"></a>00178         recipe = (cpl_recipe *)plugin ;
-<a name="l00179"></a>00179     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00182"></a>00182         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     result=sinfo_utl_cube2ima(recipe->parameters, recipe->frames) ;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00187"></a>00187         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00188"></a>00188 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00189"></a>00189         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00190"></a>00190     } 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     <span class="keywordflow">return</span> result ;
-<a name="l00193"></a>00193 }
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00201"></a>00201 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00202"></a>00202 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_destroy(cpl_plugin * plugin)
-<a name="l00203"></a>00203 {
-<a name="l00204"></a>00204     cpl_recipe  *   recipe ;
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00207"></a>00207     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00208"></a>00208         recipe = (cpl_recipe *)plugin ;
-<a name="l00209"></a>00209     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00212"></a>00212     <span class="keywordflow">return</span> 0 ;
-<a name="l00213"></a>00213 }
-<a name="l00214"></a>00214 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_cube2ima.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2ima.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>  </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_utl_cube2ima.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube2ima_description[] =</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="stringliteral">"This recipe performs cube to image comversion.\n"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="stringliteral">"The input file is a cube which is contained in the sof file\n"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="stringliteral">"Its tag should be CUBE.\n"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"The output is an image resulting from the average of the \n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"cube over a  wavelength rage which can be set by parameters \n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws sinfoni.sinfo_utl_cube2ima.we\n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"having aliases 'ws' 'we'\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"esorex --params sinfo_utl_cube2ima\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"esorex --help sinfo_utl_cube2ima\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube2ima.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   88</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     <span class="stringliteral">"sinfo_utl_cube2ima"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     <span class="stringliteral">"Cube to image conversion"</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     sinfo_utl_cube2ima_description,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     sinfo_utl_cube2ima_create,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     sinfo_utl_cube2ima_exec,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     sinfo_utl_cube2ima_destroy) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>, </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                                 <span class="stringliteral">"starting wavelength"</span>, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima"</span>, </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                 0.9999) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ws"</span>) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                 <span class="stringliteral">"starting wavelength"</span>, </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima"</span>, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                 2.999) ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"we"</span>) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     result=sinfo_utl_cube2ima(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     } </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">return</span> result ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/recipes_2sinfo__utl__cube2spectrum_8c_source.html b/html/recipes_2sinfo__utl__cube2spectrum_8c_source.html
index 7b5d524..89709a8 100644
--- a/html/recipes_2sinfo__utl__cube2spectrum_8c_source.html
+++ b/html/recipes_2sinfo__utl__cube2spectrum_8c_source.html
@@ -2,274 +2,305 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2spectrum.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2spectrum.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2spectrum.c,v 1.12 2007/10/26 08:33:11 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 08:33:11 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.12 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="comment">/* irplib */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_utl_cube2spectrum.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00046"></a>00046 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                            Functions prototypes</span>
-<a name="l00048"></a>00048 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_create(cpl_plugin *) ;
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_exec(cpl_plugin *) ;
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_destroy(cpl_plugin *) ;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                            Static variables</span>
-<a name="l00056"></a>00056 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube2spectrum_description[] =
-<a name="l00059"></a>00059 <span class="stringliteral">"This recipe performs cube to 1D spectrum image conversion.\n"</span>
-<a name="l00060"></a>00060 <span class="stringliteral">"The input files is a cube\n"</span>
-<a name="l00061"></a>00061 <span class="stringliteral">"Its associated tag should be CUBE.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"The output is an image resulting from the cube manipulated \n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"according to the value of op\n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"Over an aperture as specified by the parameter \n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.aperture having alias 'op', 'ap'"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"esorex --params sinfo_utl_cube2spectrum\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"esorex --help sinfo_utl_cube2spectrum\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"\n"</span>;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00072"></a>00072 <span class="comment">                                Functions code</span>
-<a name="l00073"></a>00073 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 
-<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00089"></a>00089 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a><a class="code" href="group__sinfo__utl__cube2spectrum.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00090</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00091"></a>00091 {
-<a name="l00092"></a>00092     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00093"></a>00093     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     cpl_plugin_init(plugin,
-<a name="l00096"></a>00096                     CPL_PLUGIN_API,
-<a name="l00097"></a>00097                     SINFONI_BINARY_VERSION,
-<a name="l00098"></a>00098                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00099"></a>00099                     <span class="stringliteral">"sinfo_utl_cube2spectrum"</span>,
-<a name="l00100"></a>00100                     <span class="stringliteral">"Collapse a cube to an image over an aperture"</span>,
-<a name="l00101"></a>00101                     sinfo_utl_cube2spectrum_description,
-<a name="l00102"></a>00102                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00103"></a>00103                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00104"></a>00104                     sinfo_get_license(),
-<a name="l00105"></a>00105                     sinfo_utl_cube2spectrum_create,
-<a name="l00106"></a>00106                     sinfo_utl_cube2spectrum_exec,
-<a name="l00107"></a>00107                     sinfo_utl_cube2spectrum_destroy) ;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     cpl_pluginlist_append(list, plugin) ;
-<a name="l00110"></a>00110     
-<a name="l00111"></a>00111     <span class="keywordflow">return</span> 0;
-<a name="l00112"></a>00112 }
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00123"></a>00123 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00124"></a>00124 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_create(cpl_plugin * plugin)
-<a name="l00125"></a>00125 {
-<a name="l00126"></a>00126     cpl_recipe      * recipe ;
-<a name="l00127"></a>00127     cpl_parameter   * p ;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00130"></a>00130     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00131"></a>00131         recipe = (cpl_recipe *)plugin ;
-<a name="l00132"></a>00132     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00133"></a>00133     cpl_error_reset();
-<a name="l00134"></a>00134     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00137"></a>00137     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00140"></a>00140     <span class="comment">/* --stropt */</span>
-<a name="l00141"></a>00141     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.op"</span>, 
-<a name="l00142"></a>00142             CPL_TYPE_STRING, <span class="stringliteral">"A possible operation:"</span>
-<a name="l00143"></a>00143             <span class="stringliteral">" average, clean_mean, median, sum"</span>, 
-<a name="l00144"></a>00144             <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>,<span class="stringliteral">"average"</span>);
-<a name="l00145"></a>00145     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;
-<a name="l00146"></a>00146     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149      <span class="comment">/* --stropt */</span>
-<a name="l00150"></a>00150     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ap"</span>, 
-<a name="l00151"></a>00151             CPL_TYPE_STRING, <span class="stringliteral">"A possible aperture: rectangle, circle"</span>, 
-<a name="l00152"></a>00152             <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>,<span class="stringliteral">"rectangle"</span>);
-<a name="l00153"></a>00153     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ap"</span>) ;
-<a name="l00154"></a>00154     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="comment">/* --doubleopt */</span>
-<a name="l00158"></a>00158     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.llx"</span>, 
-<a name="l00159"></a>00159                                 CPL_TYPE_INT, 
-<a name="l00160"></a>00160                                 <span class="stringliteral">"Lower left X rectangle coordinate"</span>, 
-<a name="l00161"></a>00161                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 2) ;
-<a name="l00162"></a>00162     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"llx"</span>) ;
-<a name="l00163"></a>00163     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lly"</span>, 
-<a name="l00167"></a>00167                                 CPL_TYPE_INT, 
-<a name="l00168"></a>00168                                 <span class="stringliteral">"Lower left Y rectangle coordinate"</span>, 
-<a name="l00169"></a>00169                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 2) ;
-<a name="l00170"></a>00170     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lly"</span>) ;
-<a name="l00171"></a>00171     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.urx"</span>, 
-<a name="l00175"></a>00175             CPL_TYPE_INT, <span class="stringliteral">"Upper right X rectangle coordinate"</span>, 
-<a name="l00176"></a>00176                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 28) ;
-<a name="l00177"></a>00177     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"urx"</span>) ;
-<a name="l00178"></a>00178     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ury"</span>, 
-<a name="l00182"></a>00182                                 CPL_TYPE_INT, 
-<a name="l00183"></a>00183                                 <span class="stringliteral">"Upper right Y rectangle coordinate"</span>, 
-<a name="l00184"></a>00184                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 28) ;
-<a name="l00185"></a>00185     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ury"</span>) ;
-<a name="l00186"></a>00186     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lo_rej"</span>, 
-<a name="l00191"></a>00191                                 CPL_TYPE_INT, 
-<a name="l00192"></a>00192                                 <span class="stringliteral">"Clean mean low rejection"</span>, 
-<a name="l00193"></a>00193                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 10) ;
-<a name="l00194"></a>00194     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lo_rej"</span>) ;
-<a name="l00195"></a>00195     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.hi_rej"</span>, 
-<a name="l00199"></a>00199                                 CPL_TYPE_INT, 
-<a name="l00200"></a>00200                                 <span class="stringliteral">"Clean mean low rejection"</span>, 
-<a name="l00201"></a>00201                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 10) ;
-<a name="l00202"></a>00202     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"hi_rej"</span>) ;
-<a name="l00203"></a>00203     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centerx"</span>, 
-<a name="l00208"></a>00208                                 CPL_TYPE_INT, 
-<a name="l00209"></a>00209                                 <span class="stringliteral">"Circle center X coordinate"</span>, 
-<a name="l00210"></a>00210                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 16) ;
-<a name="l00211"></a>00211     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"centerx"</span>) ;
-<a name="l00212"></a>00212     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centery"</span>, 
-<a name="l00216"></a>00216                                 CPL_TYPE_INT, 
-<a name="l00217"></a>00217                                 <span class="stringliteral">"Circle center Y coordinate"</span>, 
-<a name="l00218"></a>00218                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 16) ;
-<a name="l00219"></a>00219     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"centery"</span>) ;
-<a name="l00220"></a>00220     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.radius"</span>, 
-<a name="l00224"></a>00224                                 CPL_TYPE_INT, <span class="stringliteral">"Circle radii"</span>, 
-<a name="l00225"></a>00225                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 5) ;
-<a name="l00226"></a>00226     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"radius"</span>) ;
-<a name="l00227"></a>00227     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229  
-<a name="l00230"></a>00230     <span class="comment">/* Return */</span>
-<a name="l00231"></a>00231     <span class="keywordflow">return</span> 0;
-<a name="l00232"></a>00232 }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00240"></a>00240 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00241"></a>00241 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_exec(cpl_plugin * plugin)
-<a name="l00242"></a>00242 {
-<a name="l00243"></a>00243     cpl_recipe  *   recipe ;
-<a name="l00244"></a>00244     <span class="keywordtype">int</span> result=0;
-<a name="l00245"></a>00245     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00248"></a>00248     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00249"></a>00249         recipe = (cpl_recipe *)plugin ;
-<a name="l00250"></a>00250     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="keywordflow">if</span>(sinfo_dfs_set_groups(recipe->frames)) {
-<a name="l00253"></a>00253        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00254"></a>00254        <span class="keywordflow">return</span> -1;
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00257"></a>00257         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     result = sinfo_utl_cube2spectrum(recipe->parameters, recipe->frames,NULL);
-<a name="l00260"></a>00260     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00261"></a>00261         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00262"></a>00262 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00263"></a>00263         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00264"></a>00264     } 
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266     <span class="keywordflow">return</span> result;
-<a name="l00267"></a>00267 }
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00275"></a>00275 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00276"></a>00276 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_destroy(cpl_plugin * plugin)
-<a name="l00277"></a>00277 {
-<a name="l00278"></a>00278     cpl_recipe  *   recipe ;
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00281"></a>00281     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00282"></a>00282         recipe = (cpl_recipe *)plugin ;
-<a name="l00283"></a>00283     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00286"></a>00286     <span class="keywordflow">return</span> 0 ;
-<a name="l00287"></a>00287 }
-<a name="l00288"></a>00288 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_cube2spectrum.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2spectrum.c,v 1.12 2007/10/26 08:33:11 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 08:33:11 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.12 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_utl_cube2spectrum.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube2spectrum_description[] =</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="stringliteral">"This recipe performs cube to 1D spectrum image conversion.\n"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="stringliteral">"The input files is a cube\n"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"Its associated tag should be CUBE.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"The output is an image resulting from the cube manipulated \n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"according to the value of op\n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"Over an aperture as specified by the parameter \n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.aperture having alias 'op', 'ap'"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"esorex --params sinfo_utl_cube2spectrum\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"esorex --help sinfo_utl_cube2spectrum\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube2spectrum.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   90</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     <span class="stringliteral">"sinfo_utl_cube2spectrum"</span>,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     <span class="stringliteral">"Collapse a cube to an image over an aperture"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     sinfo_utl_cube2spectrum_description,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     sinfo_utl_cube2spectrum_create,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     sinfo_utl_cube2spectrum_exec,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     sinfo_utl_cube2spectrum_destroy) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.op"</span>, </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>             CPL_TYPE_STRING, <span class="stringliteral">"A possible operation:"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>             <span class="stringliteral">" average, clean_mean, median, sum"</span>, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>,<span class="stringliteral">"average"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>      <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ap"</span>, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>             CPL_TYPE_STRING, <span class="stringliteral">"A possible aperture: rectangle, circle"</span>, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>,<span class="stringliteral">"rectangle"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ap"</span>) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.llx"</span>, </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                 <span class="stringliteral">"Lower left X rectangle coordinate"</span>, </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 2) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"llx"</span>) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lly"</span>, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                                 <span class="stringliteral">"Lower left Y rectangle coordinate"</span>, </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 2) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lly"</span>) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.urx"</span>, </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>             CPL_TYPE_INT, <span class="stringliteral">"Upper right X rectangle coordinate"</span>, </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 28) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"urx"</span>) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ury"</span>, </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                                 <span class="stringliteral">"Upper right Y rectangle coordinate"</span>, </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 28) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ury"</span>) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lo_rej"</span>, </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                 <span class="stringliteral">"Clean mean low rejection"</span>, </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 10) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lo_rej"</span>) ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.hi_rej"</span>, </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                 <span class="stringliteral">"Clean mean low rejection"</span>, </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 10) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"hi_rej"</span>) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centerx"</span>, </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                                 <span class="stringliteral">"Circle center X coordinate"</span>, </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 16) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"centerx"</span>) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centery"</span>, </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                 <span class="stringliteral">"Circle center Y coordinate"</span>, </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 16) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"centery"</span>) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.radius"</span>, </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                                 CPL_TYPE_INT, <span class="stringliteral">"Circle radii"</span>, </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum"</span>, 5) ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"radius"</span>) ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>  </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">if</span>(sinfo_dfs_set_groups(recipe->frames)) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     result = sinfo_utl_cube2spectrum(recipe->parameters, recipe->frames,NULL);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     } </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/recipes_2sinfo__utl__cube__arith_8c_source.html b/html/recipes_2sinfo__utl__cube__arith_8c_source.html
index fc7a927..ed6bc18 100644
--- a/html/recipes_2sinfo__utl__cube__arith_8c_source.html
+++ b/html/recipes_2sinfo__utl__cube__arith_8c_source.html
@@ -2,216 +2,247 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_arith.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_arith.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_arith.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 <span class="comment">/* irplib */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_utl_cube_arith.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                            Functions prototypes</span>
-<a name="l00050"></a>00050 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_create(cpl_plugin *) ;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_exec(cpl_plugin *) ;
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_destroy(cpl_plugin *) ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00057"></a>00057 <span class="comment">                            Static variables</span>
-<a name="l00058"></a>00058 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description1[] =
-<a name="l00061"></a>00061 <span class="stringliteral">"This recipe perform cube arithmetics.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"If parameter value is specified the input frame is a cube \n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"in a sof file with tag CUBE\n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"Else the input files are a cube and an images or a spectrum\n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"their associated tags should be respectively CUBE, IMA or SPECTRUM.\n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"The output is a cube with tag PRO_CUBE resulting from the operation \n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"CUBE op IMA or \n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"CUBE op SPECTRUM or\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"CUBE op value where op indicates\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"the operation to be performed\n"</span>;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description2[] =
-<a name="l00074"></a>00074 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00075"></a>00075 <span class="stringliteral">"esorex --params sinfo_utl_cube_arith\n"</span>
-<a name="l00076"></a>00076 <span class="stringliteral">"esorex --help sinfo_utl_cube_arith\n"</span>
-<a name="l00077"></a>00077 <span class="stringliteral">"\n"</span>;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description[600];
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00084"></a>00084 <span class="comment">                                Functions code</span>
-<a name="l00085"></a>00085 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00101"></a><a class="code" href="group__sinfo__utl__cube__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00101</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00102"></a>00102 {
-<a name="l00103"></a>00103     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00104"></a>00104     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     strcpy(sinfo_utl_cube_arith_description,sinfo_utl_cube_arith_description1);
-<a name="l00107"></a>00107     strcat(sinfo_utl_cube_arith_description,sinfo_utl_cube_arith_description2);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     cpl_plugin_init(plugin,
-<a name="l00110"></a>00110                     CPL_PLUGIN_API,
-<a name="l00111"></a>00111                     SINFONI_BINARY_VERSION,
-<a name="l00112"></a>00112                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00113"></a>00113                     <span class="stringliteral">"sinfo_utl_cube_arith"</span>,
-<a name="l00114"></a>00114                     <span class="stringliteral">"Cube arithmetics"</span>,
-<a name="l00115"></a>00115                     sinfo_utl_cube_arith_description,
-<a name="l00116"></a>00116                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00117"></a>00117                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00118"></a>00118                     sinfo_get_license(),
-<a name="l00119"></a>00119                     sinfo_utl_cube_arith_create,
-<a name="l00120"></a>00120                     sinfo_utl_cube_arith_exec,
-<a name="l00121"></a>00121                     sinfo_utl_cube_arith_destroy) ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     cpl_pluginlist_append(list, plugin) ;
-<a name="l00124"></a>00124     
-<a name="l00125"></a>00125     <span class="keywordflow">return</span> 0;
-<a name="l00126"></a>00126 }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00137"></a>00137 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_create(cpl_plugin * plugin)
-<a name="l00139"></a>00139 {
-<a name="l00140"></a>00140     cpl_recipe      * recipe ;
-<a name="l00141"></a>00141     cpl_parameter   * p ;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00144"></a>00144     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00145"></a>00145         recipe = (cpl_recipe *)plugin ;
-<a name="l00146"></a>00146     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00147"></a>00147     cpl_error_reset();
-<a name="l00148"></a>00148     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00149"></a>00149     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00150"></a>00150     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00153"></a>00153     <span class="comment">/* --stropt */</span>
-<a name="l00154"></a>00154     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.op"</span>, 
-<a name="l00155"></a>00155                                 CPL_TYPE_STRING, 
-<a name="l00156"></a>00156                                 <span class="stringliteral">"A possible operation: "</span>
-<a name="l00157"></a>00157                                 <span class="stringliteral">"`/','*','+' or `-'"</span>, 
-<a name="l00158"></a>00158                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith"</span>,<span class="stringliteral">"/"</span>);
-<a name="l00159"></a>00159     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;
-<a name="l00160"></a>00160     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="comment">/* --doubleopt */</span>
-<a name="l00164"></a>00164     <span class="comment">/*</span>
-<a name="l00165"></a>00165 <span class="comment">    p = cpl_parameter_new_value("sinfoni.sinfo_utl_cube_arith.temperature", </span>
-<a name="l00166"></a>00166 <span class="comment">                                 CPL_TYPE_DOUBLE, "Black Body Temperature", </span>
-<a name="l00167"></a>00167 <span class="comment">                                 "sinfoni.sinfo_utl_cube_arith", 100000.) ;</span>
-<a name="l00168"></a>00168 <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "temp") ;</span>
-<a name="l00169"></a>00169 <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;</span>
-<a name="l00170"></a>00170 <span class="comment">    */</span>
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>, 
-<a name="l00173"></a>00173                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"A constant to add"</span>, 
-<a name="l00174"></a>00174                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith"</span>, 99999.0) ;
-<a name="l00175"></a>00175     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"value"</span>) ;
-<a name="l00176"></a>00176     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00177"></a>00177  
-<a name="l00178"></a>00178     <span class="comment">/* Return */</span>
-<a name="l00179"></a>00179     <span class="keywordflow">return</span> 0;
-<a name="l00180"></a>00180 }
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_exec(cpl_plugin * plugin)
-<a name="l00190"></a>00190 {
-<a name="l00191"></a>00191     cpl_recipe  *   recipe ;
-<a name="l00192"></a>00192     <span class="keywordtype">int</span> code=0;
-<a name="l00193"></a>00193     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00196"></a>00196     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00197"></a>00197         recipe = (cpl_recipe *)plugin ;
-<a name="l00198"></a>00198     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00199"></a>00199       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00200"></a>00200         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     code = sinfo_utl_cube_arith(recipe->parameters, recipe->frames) ;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00205"></a>00205         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00206"></a>00206 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00207"></a>00207         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00208"></a>00208     } 
-<a name="l00209"></a>00209     <span class="keywordflow">return</span> code;
-<a name="l00210"></a>00210 }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00218"></a>00218 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00219"></a>00219 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_destroy(cpl_plugin * plugin)
-<a name="l00220"></a>00220 {
-<a name="l00221"></a>00221     cpl_recipe  *   recipe ;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00224"></a>00224     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00225"></a>00225         recipe = (cpl_recipe *)plugin ;
-<a name="l00226"></a>00226     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00229"></a>00229     <span class="keywordflow">return</span> 0 ;
-<a name="l00230"></a>00230 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_cube_arith.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_arith.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_utl_cube_arith.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description1[] =</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"This recipe perform cube arithmetics.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"If parameter value is specified the input frame is a cube \n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"in a sof file with tag CUBE\n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"Else the input files are a cube and an images or a spectrum\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"their associated tags should be respectively CUBE, IMA or SPECTRUM.\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"The output is a cube with tag PRO_CUBE resulting from the operation \n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"CUBE op IMA or \n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"CUBE op SPECTRUM or\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"CUBE op value where op indicates\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"the operation to be performed\n"</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description2[] =</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="stringliteral">"esorex --params sinfo_utl_cube_arith\n"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="stringliteral">"esorex --help sinfo_utl_cube_arith\n"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_arith_description[600];</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  101</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     strcpy(sinfo_utl_cube_arith_description,sinfo_utl_cube_arith_description1);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     strcat(sinfo_utl_cube_arith_description,sinfo_utl_cube_arith_description2);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     <span class="stringliteral">"sinfo_utl_cube_arith"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="stringliteral">"Cube arithmetics"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     sinfo_utl_cube_arith_description,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     sinfo_utl_cube_arith_create,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                     sinfo_utl_cube_arith_exec,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                     sinfo_utl_cube_arith_destroy) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.op"</span>, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                 <span class="stringliteral">"A possible operation: "</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                 <span class="stringliteral">"`/','*','+' or `-'"</span>, </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith"</span>,<span class="stringliteral">"/"</span>);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">    p = cpl_parameter_new_value("sinfoni.sinfo_utl_cube_arith.temperature", </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">                                 CPL_TYPE_DOUBLE, "Black Body Temperature", </span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">                                 "sinfoni.sinfo_utl_cube_arith", 100000.) ;</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "temp") ;</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>, </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"A constant to add"</span>, </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith"</span>, 99999.0) ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"value"</span>) ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>  </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     code = sinfo_utl_cube_arith(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     } </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/recipes_2sinfo__utl__cube__combine_8c_source.html b/html/recipes_2sinfo__utl__cube__combine_8c_source.html
index 857a6ca..9638788 100644
--- a/html/recipes_2sinfo__utl__cube__combine_8c_source.html
+++ b/html/recipes_2sinfo__utl__cube__combine_8c_source.html
@@ -2,233 +2,264 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_combine.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_combine.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_combine.c,v 1.12 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.12 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/* irplib */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_utl_cube_combine.h></span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                            Functions prototypes</span>
-<a name="l00050"></a>00050 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_create(cpl_plugin *) ;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_exec(cpl_plugin *) ;
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_destroy(cpl_plugin *) ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00057"></a>00057 <span class="comment">                            Static variables</span>
-<a name="l00058"></a>00058 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_combine_description[] =
-<a name="l00061"></a>00061 <span class="stringliteral">"This recipe perform cubes combination.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"The input files are several cubeses\n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"their associated tags should be the same that is supported by the \n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"recipe sinfo_rec_jitter: OBS_OBJ, OBS_STD, OBS_PSF.\n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes accurding \n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"to the value of op, where op indicates\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"the operation to be performed specified by the parameter \n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.op\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">" having alias 'op'\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"esorex --params sinfo_utl_cube_combine\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"esorex --help sinfo_utl_cube_combine\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"\n"</span>;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00076"></a>00076 <span class="comment">                                Functions code</span>
-<a name="l00077"></a>00077 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00094"></a><a class="code" href="group__sinfo__utl__cube__combine.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00094</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00095"></a>00095 {
-<a name="l00096"></a>00096     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00097"></a>00097     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     cpl_plugin_init(plugin,
-<a name="l00100"></a>00100                     CPL_PLUGIN_API,
-<a name="l00101"></a>00101                     SINFONI_BINARY_VERSION,
-<a name="l00102"></a>00102                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00103"></a>00103                     <span class="stringliteral">"sinfo_utl_cube_combine"</span>,
-<a name="l00104"></a>00104                     <span class="stringliteral">"Coadd cubes in an output cube according "</span>
-<a name="l00105"></a>00105                     <span class="stringliteral">"to user defined offsets"</span>,
-<a name="l00106"></a>00106                     sinfo_utl_cube_combine_description,
-<a name="l00107"></a>00107                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00108"></a>00108                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00109"></a>00109                     sinfo_get_license(),
-<a name="l00110"></a>00110                     sinfo_utl_cube_combine_create,
-<a name="l00111"></a>00111                     sinfo_utl_cube_combine_exec,
-<a name="l00112"></a>00112                     sinfo_utl_cube_combine_destroy) ;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114     cpl_pluginlist_append(list, plugin) ;
-<a name="l00115"></a>00115     
-<a name="l00116"></a>00116     <span class="keywordflow">return</span> 0;
-<a name="l00117"></a>00117 }
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_create(cpl_plugin * plugin)
-<a name="l00130"></a>00130 {
-<a name="l00131"></a>00131     cpl_recipe      * recipe ;
-<a name="l00132"></a>00132     cpl_parameter   * p ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00135"></a>00135     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00136"></a>00136         recipe = (cpl_recipe *)plugin ;
-<a name="l00137"></a>00137     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00138"></a>00138     cpl_error_reset();
-<a name="l00139"></a>00139     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00142"></a>00142     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00145"></a>00145     <span class="comment">/* --stropt */</span>
-<a name="l00146"></a>00146     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_i"</span>, 
-<a name="l00147"></a>00147             CPL_TYPE_STRING, 
-<a name="l00148"></a>00148          <span class="stringliteral">"Input filename. This must be provided and allow the user to set X "</span>
-<a name="l00149"></a>00149          <span class="stringliteral">"and Y cumulative offsets in a two column format"</span>, 
-<a name="l00150"></a>00150          <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,<span class="stringliteral">"offset.list"</span>);
-<a name="l00151"></a>00151     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_i"</span>) ;
-<a name="l00152"></a>00152     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_o"</span>, 
-<a name="l00155"></a>00155             CPL_TYPE_STRING, <span class="stringliteral">"Output filename"</span>, 
-<a name="l00156"></a>00156              <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,<span class="stringliteral">"out_coadd_cube.fits"</span>);
-<a name="l00157"></a>00157     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_o"</span>) ;
-<a name="l00158"></a>00158     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ks_clip"</span>, 
-<a name="l00162"></a>00162             CPL_TYPE_BOOL, <span class="stringliteral">"Kappa sigma clipping"</span>, 
-<a name="l00163"></a>00163             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,FALSE);
-<a name="l00164"></a>00164     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ks_clip"</span>) ;
-<a name="l00165"></a>00165     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.scale_sky"</span>, 
-<a name="l00168"></a>00168             CPL_TYPE_BOOL, <span class="stringliteral">"Scale spatial mean"</span>, 
-<a name="l00169"></a>00169             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,FALSE);
-<a name="l00170"></a>00170     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"scale_sky"</span>) ;
-<a name="l00171"></a>00171     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.kappa"</span>, 
-<a name="l00174"></a>00174             CPL_TYPE_DOUBLE, <span class="stringliteral">"Kappa value for sigma clip"</span>, 
-<a name="l00175"></a>00175             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,2.);
-<a name="l00176"></a>00176     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"kappa"</span>) ;
-<a name="l00177"></a>00177     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <span class="comment">/* --doubleopt */</span>
-<a name="l00181"></a>00181     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.xsize"</span>, 
-<a name="l00182"></a>00182             CPL_TYPE_INT, <span class="stringliteral">"Output cube X size"</span>, 
-<a name="l00183"></a>00183             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>, 80) ;
-<a name="l00184"></a>00184     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;
-<a name="l00185"></a>00185     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ysize"</span>, 
-<a name="l00189"></a>00189             CPL_TYPE_INT, <span class="stringliteral">"Output cube Y size"</span>, 
-<a name="l00190"></a>00190             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>, 80) ;
-<a name="l00191"></a>00191     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;
-<a name="l00192"></a>00192     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194   
-<a name="l00195"></a>00195     <span class="comment">/* Return */</span>
-<a name="l00196"></a>00196     <span class="keywordflow">return</span> 0;
-<a name="l00197"></a>00197 }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00205"></a>00205 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00206"></a>00206 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_exec(cpl_plugin * plugin)
-<a name="l00207"></a>00207 {
-<a name="l00208"></a>00208     cpl_recipe  *   recipe ;
-<a name="l00209"></a>00209     <span class="keywordtype">int</span> result=0;    
-<a name="l00210"></a>00210     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00213"></a>00213     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00214"></a>00214         recipe = (cpl_recipe *)plugin ;
-<a name="l00215"></a>00215     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00216"></a>00216        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00217"></a>00217         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     result=sinfo_utl_cube_combine(recipe->parameters, recipe->frames) ;
-<a name="l00220"></a>00220     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00221"></a>00221         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00222"></a>00222 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00223"></a>00223         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00224"></a>00224     } 
-<a name="l00225"></a>00225     <span class="keywordflow">return</span> result;
-<a name="l00226"></a>00226 }
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00234"></a>00234 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00235"></a>00235 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_destroy(cpl_plugin * plugin)
-<a name="l00236"></a>00236 {
-<a name="l00237"></a>00237     cpl_recipe  *   recipe ;
-<a name="l00238"></a>00238     
-<a name="l00239"></a>00239     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00240"></a>00240     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00241"></a>00241         recipe = (cpl_recipe *)plugin ;
-<a name="l00242"></a>00242     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00245"></a>00245     <span class="keywordflow">return</span> 0 ;
-<a name="l00246"></a>00246 }
-<a name="l00247"></a>00247 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_cube_combine.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_combine.c,v 1.12 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.12 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_utl_cube_combine.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_combine_description[] =</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"This recipe perform cubes combination.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"The input files are several cubeses\n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"their associated tags should be the same that is supported by the \n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"recipe sinfo_rec_jitter: OBS_OBJ, OBS_STD, OBS_PSF.\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes accurding \n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"to the value of op, where op indicates\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"the operation to be performed specified by the parameter \n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.op\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">" having alias 'op'\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"esorex --params sinfo_utl_cube_combine\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"esorex --help sinfo_utl_cube_combine\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube__combine.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   94</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     <span class="stringliteral">"sinfo_utl_cube_combine"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     <span class="stringliteral">"Coadd cubes in an output cube according "</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     <span class="stringliteral">"to user defined offsets"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     sinfo_utl_cube_combine_description,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     sinfo_utl_cube_combine_create,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     sinfo_utl_cube_combine_exec,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     sinfo_utl_cube_combine_destroy) ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_i"</span>, </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>          <span class="stringliteral">"Input filename. This must be provided and allow the user to set X "</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>          <span class="stringliteral">"and Y cumulative offsets in a two column format"</span>, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>          <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,<span class="stringliteral">"offset.list"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_i"</span>) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_o"</span>, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>             CPL_TYPE_STRING, <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>              <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,<span class="stringliteral">"out_coadd_cube.fits"</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_o"</span>) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ks_clip"</span>, </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>             CPL_TYPE_BOOL, <span class="stringliteral">"Kappa sigma clipping"</span>, </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,FALSE);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ks_clip"</span>) ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.scale_sky"</span>, </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             CPL_TYPE_BOOL, <span class="stringliteral">"Scale spatial mean"</span>, </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,FALSE);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"scale_sky"</span>) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.kappa"</span>, </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Kappa value for sigma clip"</span>, </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>,2.);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"kappa"</span>) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.xsize"</span>, </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>             CPL_TYPE_INT, <span class="stringliteral">"Output cube X size"</span>, </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>, 80) ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ysize"</span>, </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>             CPL_TYPE_INT, <span class="stringliteral">"Output cube Y size"</span>, </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>             <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine"</span>, 80) ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordtype">int</span> result=0;    </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     result=sinfo_utl_cube_combine(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     } </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html b/html/recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
index 04151dc..da1cbd1 100644
--- a/html/recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
+++ b/html/recipes_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
@@ -2,191 +2,222 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_divide_by_blackbody.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_divide_by_blackbody.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038  
-<a name="l00039"></a>00039 <span class="comment">/* irplib */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_utl_spectrum_divide_by_blackbody.h></span>
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                            Functions prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_create(cpl_plugin *) ;
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_exec(cpl_plugin *) ;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_destroy(cpl_plugin *) ;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                            Static variables</span>
-<a name="l00057"></a>00057 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description1[] =
-<a name="l00060"></a>00060 <span class="stringliteral">"This recipe divides a spectrum by a black body "</span>
-<a name="l00061"></a>00061 <span class="stringliteral">"spectrum of given temperature.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"The input file is a spectrum. Its associated tag must be SPECTRUM.\n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"The output is a spectrum\n"</span>;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description2[] =
-<a name="l00067"></a>00067 <span class="stringliteral">"Parameter is \n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"having aliases 'temp' \n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"esorex --params sinfo_utl_spectrum_divide_by_blackbody\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"esorex --help sinfo_utl_spectrum_divide_by_blackbody\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"\n"</span>;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description[900];
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                                Functions code</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a><a class="code" href="group__sinfo__utl__spectrum__divide__by__blackbody.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00097</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00098"></a>00098 {
-<a name="l00099"></a>00099     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00100"></a>00100     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     strcpy(sinfo_utl_spectrum_divide_by_blackbody_description,
-<a name="l00103"></a>00103            sinfo_utl_spectrum_divide_by_blackbody_description1);
-<a name="l00104"></a>00104     strcat(sinfo_utl_spectrum_divide_by_blackbody_description,
-<a name="l00105"></a>00105            sinfo_utl_spectrum_divide_by_blackbody_description2);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     cpl_plugin_init(plugin,
-<a name="l00108"></a>00108                     CPL_PLUGIN_API,
-<a name="l00109"></a>00109                     SINFONI_BINARY_VERSION,
-<a name="l00110"></a>00110                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00111"></a>00111                     <span class="stringliteral">"sinfo_utl_spectrum_divide_by_blackbody"</span>,
-<a name="l00112"></a>00112                     <span class="stringliteral">"Spectrum normalization by a blackbody"</span>,
-<a name="l00113"></a>00113                     sinfo_utl_spectrum_divide_by_blackbody_description,
-<a name="l00114"></a>00114                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00115"></a>00115                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00116"></a>00116                     sinfo_get_license(),
-<a name="l00117"></a>00117                     sinfo_utl_spectrum_divide_by_blackbody_create,
-<a name="l00118"></a>00118                     sinfo_utl_spectrum_divide_by_blackbody_exec,
-<a name="l00119"></a>00119                     sinfo_utl_spectrum_divide_by_blackbody_destroy) ;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     cpl_pluginlist_append(list, plugin) ;
-<a name="l00122"></a>00122     
-<a name="l00123"></a>00123     <span class="keywordflow">return</span> 0;
-<a name="l00124"></a>00124 }
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_create(cpl_plugin * plugin)
-<a name="l00137"></a>00137 {
-<a name="l00138"></a>00138     cpl_recipe      * recipe ;
-<a name="l00139"></a>00139     cpl_parameter   * p ;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00142"></a>00142     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00143"></a>00143         recipe = (cpl_recipe *)plugin ;
-<a name="l00144"></a>00144     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     cpl_error_reset();
-<a name="l00147"></a>00147     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00148"></a>00148     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00149"></a>00149     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00152"></a>00152     <span class="comment">/* --stropt */</span>
-<a name="l00153"></a>00153     <span class="comment">/* --doubleopt */</span>
-<a name="l00154"></a>00154     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature"</span>, 
-<a name="l00155"></a>00155             CPL_TYPE_DOUBLE, <span class="stringliteral">"Black Body Temperature"</span>, 
-<a name="l00156"></a>00156             <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody"</span>, 100000.) ;
-<a name="l00157"></a>00157     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"temp"</span>) ;
-<a name="l00158"></a>00158     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">/* Return */</span>
-<a name="l00161"></a>00161     <span class="keywordflow">return</span> 0;
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00171"></a>00171 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_exec(cpl_plugin * plugin)
-<a name="l00172"></a>00172 {
-<a name="l00173"></a>00173     cpl_recipe  *   recipe ;
-<a name="l00174"></a>00174     <span class="keywordtype">int</span> code=0;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00177"></a>00177     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00178"></a>00178         recipe = (cpl_recipe *)plugin ;
-<a name="l00179"></a>00179     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00180"></a>00180  
-<a name="l00181"></a>00181        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00182"></a>00182         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00183"></a>00183     code=sinfo_utl_spectrum_divide_by_blackbody(recipe->parameters, 
-<a name="l00184"></a>00184                                                   recipe->frames) ;
-<a name="l00185"></a>00185     <span class="keywordflow">return</span> code;
-<a name="l00186"></a>00186 }
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00194"></a>00194 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00195"></a>00195 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_destroy(cpl_plugin * plugin)
-<a name="l00196"></a>00196 {
-<a name="l00197"></a>00197     cpl_recipe  *   recipe ;
-<a name="l00198"></a>00198     
-<a name="l00199"></a>00199     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00200"></a>00200     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00201"></a>00201         recipe = (cpl_recipe *)plugin ;
-<a name="l00202"></a>00202     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00205"></a>00205     <span class="keywordflow">return</span> 0 ;
-<a name="l00206"></a>00206 }
-<a name="l00207"></a>00207 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_spectrum_divide_by_blackbody.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.c,v 1.10 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_utl_spectrum_divide_by_blackbody.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description1[] =</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="stringliteral">"This recipe divides a spectrum by a black body "</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"spectrum of given temperature.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"The input file is a spectrum. Its associated tag must be SPECTRUM.\n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"The output is a spectrum\n"</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description2[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"Parameter is \n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"having aliases 'temp' \n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"esorex --params sinfo_utl_spectrum_divide_by_blackbody\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"esorex --help sinfo_utl_spectrum_divide_by_blackbody\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_divide_by_blackbody_description[900];</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__sinfo__utl__spectrum__divide__by__blackbody.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   97</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     strcpy(sinfo_utl_spectrum_divide_by_blackbody_description,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>            sinfo_utl_spectrum_divide_by_blackbody_description1);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     strcat(sinfo_utl_spectrum_divide_by_blackbody_description,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>            sinfo_utl_spectrum_divide_by_blackbody_description2);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     <span class="stringliteral">"sinfo_utl_spectrum_divide_by_blackbody"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     <span class="stringliteral">"Spectrum normalization by a blackbody"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     sinfo_utl_spectrum_divide_by_blackbody_description,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     sinfo_utl_spectrum_divide_by_blackbody_create,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_utl_spectrum_divide_by_blackbody_exec,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     sinfo_utl_spectrum_divide_by_blackbody_destroy) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature"</span>, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Black Body Temperature"</span>, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>             <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody"</span>, 100000.) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"temp"</span>) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>  </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     code=sinfo_utl_spectrum_divide_by_blackbody(recipe->parameters, </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                                                   recipe->frames) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html b/html/recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
index 8f81e4d..4c0f668 100644
--- a/html/recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
+++ b/html/recipes_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
@@ -2,206 +2,237 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_wavelength_shift.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_wavelength_shift.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.c,v 1.11 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.11 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="comment">/* irplib */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038  
-<a name="l00039"></a>00039 <span class="comment">/* irplib */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_utl_spectrum_wavelength_shift.h></span>
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                            Functions prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_create(cpl_plugin *) ;
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_exec(cpl_plugin *) ;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_destroy(cpl_plugin *) ;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                            Static variables</span>
-<a name="l00057"></a>00057 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description1[] =
-<a name="l00060"></a>00060 <span class="stringliteral">"This recipe shifts a spectrum in wavelength using a given \n"</span>
-<a name="l00061"></a>00061 <span class="stringliteral">"interpolation method. The input file is a spectrum.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"Its associated tag should be SPECTRUM.\n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"The output is a spectrum shifted by a given amount. \n"</span>;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description2[] =
-<a name="l00066"></a>00066 <span class="stringliteral">"Parameters are \n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"having aliases 'method' and 'shift' \n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"esorex --params sinfo_utl_spectrum_wavelength_shift\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"esorex --help sinfo_utl_spectrum_wavelength_shift\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"\n"</span>;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description[900];
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                                Functions code</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a><a class="code" href="group__sinfo__utl__spectrum__wavelength__shift.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00097</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00098"></a>00098 {
-<a name="l00099"></a>00099     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00100"></a>00100     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     strcpy(sinfo_utl_spectrum_wavelength_shift_description,
-<a name="l00103"></a>00103            sinfo_utl_spectrum_wavelength_shift_description1);
-<a name="l00104"></a>00104     strcat(sinfo_utl_spectrum_wavelength_shift_description,
-<a name="l00105"></a>00105            sinfo_utl_spectrum_wavelength_shift_description2);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     cpl_plugin_init(plugin,
-<a name="l00108"></a>00108                     CPL_PLUGIN_API,
-<a name="l00109"></a>00109                     SINFONI_BINARY_VERSION,
-<a name="l00110"></a>00110                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00111"></a>00111                     <span class="stringliteral">"sinfo_utl_spectrum_wavelength_shift"</span>,
-<a name="l00112"></a>00112                     <span class="stringliteral">"Spectrum wavelength shift"</span>,
-<a name="l00113"></a>00113                     sinfo_utl_spectrum_wavelength_shift_description,
-<a name="l00114"></a>00114                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00115"></a>00115                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00116"></a>00116                     sinfo_get_license(),
-<a name="l00117"></a>00117                     sinfo_utl_spectrum_wavelength_shift_create,
-<a name="l00118"></a>00118                     sinfo_utl_spectrum_wavelength_shift_exec,
-<a name="l00119"></a>00119                     sinfo_utl_spectrum_wavelength_shift_destroy) ;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     cpl_pluginlist_append(list, plugin) ;
-<a name="l00122"></a>00122     
-<a name="l00123"></a>00123     <span class="keywordflow">return</span> 0;
-<a name="l00124"></a>00124 }
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_create(cpl_plugin * plugin)
-<a name="l00137"></a>00137 {
-<a name="l00138"></a>00138     cpl_recipe      * recipe ;
-<a name="l00139"></a>00139     cpl_parameter   * p ;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00142"></a>00142     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00143"></a>00143         recipe = (cpl_recipe *)plugin ;
-<a name="l00144"></a>00144     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00145"></a>00145     cpl_error_reset();
-<a name="l00146"></a>00146     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00149"></a>00149     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00152"></a>00152      <span class="comment">/* --stropt */</span>
-<a name="l00153"></a>00153     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method"</span>, 
-<a name="l00154"></a>00154                                 CPL_TYPE_STRING, 
-<a name="l00155"></a>00155                                 <span class="stringliteral">"A spectral shift method: "</span>
-<a name="l00156"></a>00156                                 <span class="stringliteral">"'S' (Spline),'P' (Polynomial)"</span>, 
-<a name="l00157"></a>00157                                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith"</span>,<span class="stringliteral">"S"</span>);
-<a name="l00158"></a>00158     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;
-<a name="l00159"></a>00159     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="comment">/* --doubleopt */</span>
-<a name="l00162"></a>00162     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift"</span>, 
-<a name="l00163"></a>00163                                 CPL_TYPE_DOUBLE, 
-<a name="l00164"></a>00164                                 <span class="stringliteral">"wavelength shift in micron"</span>, 
-<a name="l00165"></a>00165                                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift"</span>, 
-<a name="l00166"></a>00166                                 0.1) ;
-<a name="l00167"></a>00167     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"shift"</span>) ;
-<a name="l00168"></a>00168     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="comment">/* Return */</span>
-<a name="l00171"></a>00171     <span class="keywordflow">return</span> 0;
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00180"></a>00180 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_exec(cpl_plugin * plugin)
-<a name="l00182"></a>00182 {
-<a name="l00183"></a>00183     cpl_recipe  *   recipe ;
-<a name="l00184"></a>00184     <span class="keywordtype">int</span> code=0;
-<a name="l00185"></a>00185     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00188"></a>00188     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00189"></a>00189         recipe = (cpl_recipe *)plugin ;
-<a name="l00190"></a>00190     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00191"></a>00191       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00192"></a>00192        SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00193"></a>00193     code = sinfo_utl_spectrum_wavelength_shift(recipe->parameters, 
-<a name="l00194"></a>00194                                                recipe->frames) ;
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00196"></a>00196         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00197"></a>00197 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00198"></a>00198         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00199"></a>00199     } 
-<a name="l00200"></a>00200     <span class="keywordflow">return</span> code ;
-<a name="l00201"></a>00201 }
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00209"></a>00209 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00210"></a>00210 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_destroy(cpl_plugin * plugin)
-<a name="l00211"></a>00211 {
-<a name="l00212"></a>00212     cpl_recipe  *   recipe ;
-<a name="l00213"></a>00213     
-<a name="l00214"></a>00214     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00215"></a>00215     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00216"></a>00216         recipe = (cpl_recipe *)plugin ;
-<a name="l00217"></a>00217     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00220"></a>00220     <span class="keywordflow">return</span> 0 ;
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">recipes/sinfo_utl_spectrum_wavelength_shift.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.c,v 1.11 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.11 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>  </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_utl_spectrum_wavelength_shift.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description1[] =</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="stringliteral">"This recipe shifts a spectrum in wavelength using a given \n"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"interpolation method. The input file is a spectrum.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"Its associated tag should be SPECTRUM.\n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"The output is a spectrum shifted by a given amount. \n"</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description2[] =</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"Parameters are \n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"having aliases 'method' and 'shift' \n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"esorex --params sinfo_utl_spectrum_wavelength_shift\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"esorex --help sinfo_utl_spectrum_wavelength_shift\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_spectrum_wavelength_shift_description[900];</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__sinfo__utl__spectrum__wavelength__shift.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   97</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     strcpy(sinfo_utl_spectrum_wavelength_shift_description,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>            sinfo_utl_spectrum_wavelength_shift_description1);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     strcat(sinfo_utl_spectrum_wavelength_shift_description,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>            sinfo_utl_spectrum_wavelength_shift_description2);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     <span class="stringliteral">"sinfo_utl_spectrum_wavelength_shift"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     <span class="stringliteral">"Spectrum wavelength shift"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     sinfo_utl_spectrum_wavelength_shift_description,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     sinfo_utl_spectrum_wavelength_shift_create,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_utl_spectrum_wavelength_shift_exec,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     sinfo_utl_spectrum_wavelength_shift_destroy) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>      <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method"</span>, </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                 <span class="stringliteral">"A spectral shift method: "</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                 <span class="stringliteral">"'S' (Spline),'P' (Polynomial)"</span>, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith"</span>,<span class="stringliteral">"S"</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift"</span>, </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                                 <span class="stringliteral">"wavelength shift in micron"</span>, </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift"</span>, </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                 0.1) ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"shift"</span>) ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>        SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     code = sinfo_utl_spectrum_wavelength_shift(recipe->parameters, </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                                recipe->frames) ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     } </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__absolute_8c_source.html b/html/sinfo__absolute_8c_source.html
index 93fd315..4441437 100644
--- a/html/sinfo__absolute_8c_source.html
+++ b/html/sinfo__absolute_8c_source.html
@@ -2,3213 +2,3244 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_absolute.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_absolute.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*****************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  14/11/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00029"></a>00029 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/************************************************************************</span>
-<a name="l00038"></a>00038 <span class="comment">*   NAME</span>
-<a name="l00039"></a>00039 <span class="comment">*        sinfo_absolute.c - routines to determine the absolute positions </span>
-<a name="l00040"></a>00040 <span class="comment">*        of the slitlets out of an emission line frame</span>
-<a name="l00041"></a>00041 <span class="comment">*</span>
-<a name="l00042"></a>00042 <span class="comment">*   SYNOPSIS</span>
-<a name="l00043"></a>00043 <span class="comment">*   #include "absolute.h"</span>
-<a name="l00044"></a>00044 <span class="comment">*</span>
-<a name="l00045"></a>00045 <span class="comment">*   1) float sinfo_new_edge( float * xdat, float * parlist, </span>
-<a name="l00046"></a>00046 <span class="comment">                             int * npar, int * ndat )</span>
-<a name="l00047"></a>00047 <span class="comment">*   2) void sinfo_new_edge_deriv( float * xdat, float * parlist, </span>
-<a name="l00048"></a>00048 <span class="comment">                                  float * dervs, int * npar )</span>
-<a name="l00049"></a>00049 <span class="comment">*   3) static int sinfo_new_inv_mat_edge (void)</span>
-<a name="l00050"></a>00050 <span class="comment">*   4) static new_void sinfo_get_mat_edge ( float * xdat,</span>
-<a name="l00051"></a>00051 <span class="comment">*                                 int   * xdim,</span>
-<a name="l00052"></a>00052 <span class="comment">*                                 float * ydat,</span>
-<a name="l00053"></a>00053 <span class="comment">*                                 float * wdat,</span>
-<a name="l00054"></a>00054 <span class="comment">*                                 int   * ndat,</span>
-<a name="l00055"></a>00055 <span class="comment">*                                 float * fpar,</span>
-<a name="l00056"></a>00056 <span class="comment">*                                 float * epar,</span>
-<a name="l00057"></a>00057 <span class="comment">*                                 int   * npar )</span>
-<a name="l00058"></a>00058 <span class="comment">*   5) static int sinfo_new_get_vec_edge ( float * xdat,</span>
-<a name="l00059"></a>00059 <span class="comment">*                                int   * xdim,</span>
-<a name="l00060"></a>00060 <span class="comment">*                                float * ydat,</span>
-<a name="l00061"></a>00061 <span class="comment">*                                float * wdat,</span>
-<a name="l00062"></a>00062 <span class="comment">*                                int   * ndat,</span>
-<a name="l00063"></a>00063 <span class="comment">*                                float * fpar,</span>
-<a name="l00064"></a>00064 <span class="comment">*                                float * epar,</span>
-<a name="l00065"></a>00065 <span class="comment">*                                int   * npar )</span>
-<a name="l00066"></a>00066 <span class="comment">*   6) int sinfo_new_lsqfit_edge ( float * xdat,</span>
-<a name="l00067"></a>00067 <span class="comment">*                        int   * xdim,</span>
-<a name="l00068"></a>00068 <span class="comment">*                        float * ydat,</span>
-<a name="l00069"></a>00069 <span class="comment">*                        float * wdat,</span>
-<a name="l00070"></a>00070 <span class="comment">*                        int   * ndat,</span>
-<a name="l00071"></a>00071 <span class="comment">*                        float * fpar,</span>
-<a name="l00072"></a>00072 <span class="comment">*                        float * epar,</span>
-<a name="l00073"></a>00073 <span class="comment">*                        int   * mpar,</span>
-<a name="l00074"></a>00074 <span class="comment">*                        int   * npar,</span>
-<a name="l00075"></a>00075 <span class="comment">*                        float * tol ,</span>
-<a name="l00076"></a>00076 <span class="comment">*                        int   * its ,</span>
-<a name="l00077"></a>00077 <span class="comment">*                        float * lab  )</span>
-<a name="l00078"></a>00078 <span class="comment">*   7) int sinfo_new_fit_slits_edge( cpl_image   * lineImage, </span>
-<a name="l00079"></a>00079 <span class="comment">*                        FitParams ** par,</span>
-<a name="l00080"></a>00080 <span class="comment">*                        float     ** sinfo_slit_pos,</span>
-<a name="l00081"></a>00081 <span class="comment">*                        int          box_length,</span>
-<a name="l00082"></a>00082 <span class="comment">*                        float        y_box,</span>
-<a name="l00083"></a>00083 <span class="comment">*                        float        diff_tol )</span>
-<a name="l00084"></a>00084 <span class="comment">*   8) int sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,</span>
-<a name="l00085"></a>00085 <span class="comment">*                                     float     ** sinfo_slit_pos,</span>
-<a name="l00086"></a>00086 <span class="comment">*                                     int          box_length,</span>
-<a name="l00087"></a>00087 <span class="comment">*                                     float        y_box,</span>
-<a name="l00088"></a>00088 <span class="comment">*                                     float        diff_tol,</span>
-<a name="l00089"></a>00089 <span class="comment">*                                     int          low_pos,</span>
-<a name="l00090"></a>00090 <span class="comment">*                                     int          high_pos )</span>
-<a name="l00091"></a>00091 <span class="comment">*</span>
-<a name="l00092"></a>00092 <span class="comment">*   DESCRIPTION</span>
-<a name="l00093"></a>00093 <span class="comment">*   1) calculates the value of a slope function with parameters </span>
-<a name="l00094"></a>00094 <span class="comment">*      parlist at the position xdat </span>
-<a name="l00095"></a>00095 <span class="comment">*   2) calculates the partial derivatives for a slope function with</span>
-<a name="l00096"></a>00096 <span class="comment">*      parameters parlist at position xdat </span>
-<a name="l00097"></a>00097 <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span>
-<a name="l00098"></a>00098 <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span>
-<a name="l00099"></a>00099 <span class="comment">*      Numerische Mathematik, 1. Teil.</span>
-<a name="l00100"></a>00100 <span class="comment">*   4) builds the sinfo_matrix </span>
-<a name="l00101"></a>00101 <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span>
-<a name="l00102"></a>00102 <span class="comment">*      built by get_mat_edge(), we only have to rescale it for the </span>
-<a name="l00103"></a>00103 <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span>
-<a name="l00104"></a>00104 <span class="comment">*      the diagonal gets the value 1 + labda.</span>
-<a name="l00105"></a>00105 <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span>
-<a name="l00106"></a>00106 <span class="comment">*      the correction sinfo_vector.</span>
-<a name="l00107"></a>00107 <span class="comment">*   6) this is a routine for making a least-squares fit of a</span>
-<a name="l00108"></a>00108 <span class="comment">*      function to a set of data points. The method used is</span>
-<a name="l00109"></a>00109 <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span>
-<a name="l00110"></a>00110 <span class="comment">*      This method is a mixture of the steepest descent method </span>
-<a name="l00111"></a>00111 <span class="comment">*      and the Taylor method.</span>
-<a name="l00112"></a>00112 <span class="comment">*   7) fits the beginning and end position of the slitlets</span>
-<a name="l00113"></a>00113 <span class="comment">*      by using non-linear least square fitting of a step function</span>
-<a name="l00114"></a>00114 <span class="comment">*      fits a step function to the slitlet edges exposed and indicated</span>
-<a name="l00115"></a>00115 <span class="comment">*      by the brightest emission lines. To achieve this, the fit</span>
-<a name="l00116"></a>00116 <span class="comment">*      parameters are used to find the brightest emission line</span>
-<a name="l00117"></a>00117 <span class="comment">*      and to get its position for each column.</span>
-<a name="l00118"></a>00118 <span class="comment">*      The least squares fit is done by using a box smaller than</span>
-<a name="l00119"></a>00119 <span class="comment">*      the size of two slitlets</span>
-<a name="l00120"></a>00120 <span class="comment">*   8) fits the beginning and end position of the slitlets</span>
-<a name="l00121"></a>00121 <span class="comment">*      by using non-linear least square fitting of an sinfo_edge  function</span>
-<a name="l00122"></a>00122 <span class="comment">*      fits a linear edge function to the slitlet edges exposed and indicated</span>
-<a name="l00123"></a>00123 <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span>
-<a name="l00124"></a>00124 <span class="comment">*      user given positions.</span>
-<a name="l00125"></a>00125 <span class="comment">*      The least squares fit is done by using a box smaller than</span>
-<a name="l00126"></a>00126 <span class="comment">*      the size of two slitlets </span>
-<a name="l00127"></a>00127 <span class="comment">*</span>
-<a name="l00128"></a>00128 <span class="comment">*   FILES</span>
-<a name="l00129"></a>00129 <span class="comment">*</span>
-<a name="l00130"></a>00130 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00131"></a>00131 <span class="comment">*</span>
-<a name="l00132"></a>00132 <span class="comment">*   RETURN VALUES</span>
-<a name="l00133"></a>00133 <span class="comment">*</span>
-<a name="l00134"></a>00134 <span class="comment">*   CAUTIONS</span>
-<a name="l00135"></a>00135 <span class="comment">*</span>
-<a name="l00136"></a>00136 <span class="comment">*   EXAMPLES</span>
-<a name="l00137"></a>00137 <span class="comment">*</span>
-<a name="l00138"></a>00138 <span class="comment">*   SEE ALSO</span>
-<a name="l00139"></a>00139 <span class="comment">*</span>
-<a name="l00140"></a>00140 <span class="comment">*   BUGS</span>
-<a name="l00141"></a>00141 <span class="comment">*</span>
-<a name="l00142"></a>00142 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00143"></a>00143 <span class="comment">*/</span>
-<a name="l00144"></a>00144 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00148"></a>00148 <span class="comment">/*</span>
-<a name="l00149"></a>00149 <span class="comment"> * System Headers</span>
-<a name="l00150"></a>00150 <span class="comment"> */</span>
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="comment">/*</span>
-<a name="l00153"></a>00153 <span class="comment"> * Local Headers</span>
-<a name="l00154"></a>00154 <span class="comment"> */</span>
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="preprocessor">#include "sinfo_absolute.h"</span>
-<a name="l00157"></a>00157 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00158"></a>00158 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00159"></a>00159 <span class="comment"> *                                 Defines</span>
-<a name="l00160"></a>00160 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00161"></a>00161 <span class="keyword">static</span> <span class="keywordtype">float</span>  sqrarg ;
-<a name="l00162"></a>00162 <span class="preprocessor">#define SQR(a) (sqrarg = (a) , sqrarg*sqrarg)</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span>
-<a name="l00164"></a>00164 <span class="preprocessor">#define XDIMA         1         </span><span class="comment">/* dimension of the x values */</span>
-<a name="l00165"></a>00165 <span class="preprocessor">#define TOLA          0.001     </span><span class="comment">/* fitting tolerance */</span>
-<a name="l00166"></a>00166 <span class="preprocessor">#define LABA          0.1       </span><span class="comment">/* labda parameter */</span>
-<a name="l00167"></a>00167 <span class="preprocessor">#define ITSA          200       </span><span class="comment">/* maximum number of iterations */</span>
-<a name="l00168"></a>00168 <span class="preprocessor">#define LABFACA       10.0      </span><span class="comment">/* labda step factor */</span>
-<a name="l00169"></a>00169 <span class="preprocessor">#define LABMAXA       1.0e+10   </span><span class="comment">/* maximum value for labda */</span>
-<a name="l00170"></a>00170 <span class="preprocessor">#define LABMINA       1.0e-10   </span><span class="comment">/* minimum value for labda */</span>
-<a name="l00171"></a>00171 <span class="preprocessor">#define NPAR          4         </span><span class="comment">/* number of fit parameters */</span>
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00174"></a>00174 <span class="comment"> *                                    Local variables</span>
-<a name="l00175"></a>00175 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span>
-<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span>
-<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span>
-<a name="l00180"></a>00180 <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span>
-<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span>
-<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span>
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span>
-<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span>
-<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">float</span>  slopewidth ;              <span class="comment">/* initial value for fit parameter 5: </span>
-<a name="l00186"></a>00186 <span class="comment">                                           width of linear slope */</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00189"></a>00189 <span class="comment"> *                    Functions private to this module</span>
-<a name="l00190"></a>00190 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat_edge (<span class="keywordtype">void</span>) ;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l00194"></a>00194                            <span class="keywordtype">int</span>   * xdim,
-<a name="l00195"></a>00195                            <span class="keywordtype">float</span> * ydat,
-<a name="l00196"></a>00196                            <span class="keywordtype">float</span> * wdat,
-<a name="l00197"></a>00197                            <span class="keywordtype">int</span>   * ndat,
-<a name="l00198"></a>00198                            <span class="keywordtype">float</span> * fpar,
-<a name="l00199"></a>00199                            <span class="keywordtype">float</span> * epar<span class="comment">/*,</span>
-<a name="l00200"></a>00200 <span class="comment">                           int   * npar*/</span> ) ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l00203"></a>00203                           <span class="keywordtype">int</span>   * xdim,
-<a name="l00204"></a>00204                           <span class="keywordtype">float</span> * ydat,
-<a name="l00205"></a>00205                           <span class="keywordtype">float</span> * wdat,
-<a name="l00206"></a>00206                           <span class="keywordtype">int</span>   * ndat,
-<a name="l00207"></a>00207                           <span class="keywordtype">float</span> * fpar,
-<a name="l00208"></a>00208                           <span class="keywordtype">float</span> * epar,
-<a name="l00209"></a>00209                           <span class="keywordtype">int</span>   * npar ) ;
-<a name="l00210"></a>00210 <span class="keywordtype">float</span> 
-<a name="l00211"></a>00211 sinfo_new_hat2 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> );
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="keywordtype">float</span> 
-<a name="l00214"></a>00214 sinfo_new_hat1 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> );
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="keywordtype">void</span> 
-<a name="l00217"></a>00217 sinfo_new_hat_deriv2(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00218"></a>00218                      <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="keywordtype">void</span> 
-<a name="l00221"></a>00221 sinfo_new_hat_deriv1( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00222"></a>00222                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="keywordtype">int</span> 
-<a name="l00225"></a>00225 sinfo_new_fit_slits1( cpl_image   * lineImage, 
-<a name="l00226"></a>00226                FitParams ** par,
-<a name="l00227"></a>00227                <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00228"></a>00228                <span class="keywordtype">int</span>          box_length,
-<a name="l00229"></a>00229               <span class="keywordtype">float</span>        y_box );
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 <span class="keywordtype">int</span> 
-<a name="l00232"></a>00232 sinfo_new_fit_slits( cpl_image   * lineImage, 
-<a name="l00233"></a>00233               FitParams ** par,
-<a name="l00234"></a>00234               <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00235"></a>00235               <span class="keywordtype">int</span>          box_length,
-<a name="l00236"></a>00236               <span class="keywordtype">float</span>        y_box,
-<a name="l00237"></a>00237              <span class="keywordtype">float</span>        slope_width );
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="keywordtype">int</span> 
-<a name="l00242"></a>00242 sinfo_new_fit_slits2( cpl_image   * lineImage, 
-<a name="l00243"></a>00243                FitParams ** par,
-<a name="l00244"></a>00244                <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00245"></a>00245                <span class="keywordtype">int</span>          box_length,
-<a name="l00246"></a>00246                <span class="keywordtype">float</span>        y_box,
-<a name="l00247"></a>00247               <span class="keywordtype">float</span>        diff_tol );
-<a name="l00248"></a>00248 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00249"></a>00249 <span class="comment"> *                            Function codes</span>
-<a name="l00250"></a>00250 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00251"></a>00251 
-<a name="l00270"></a>00270 <span class="keywordtype">float</span> 
-<a name="l00271"></a>00271 sinfo_new_edge ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )
-<a name="l00272"></a>00272 {
-<a name="l00273"></a>00273     <span class="keywordtype">float</span> return_value ;
-<a name="l00274"></a>00274     <span class="keywordtype">float</span> slope1 ;
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="comment">/* compute the slopes */</span>
-<a name="l00277"></a>00277     slope1 = ( parlist[3] - parlist[2] ) / ( parlist[1] - parlist[0] ) ;
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     <span class="comment">/* now build the hat function out of the parameters */</span>
-<a name="l00280"></a>00280     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00281"></a>00281     {
-<a name="l00282"></a>00282         return_value = parlist[2] ;
-<a name="l00283"></a>00283     }
-<a name="l00284"></a>00284     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )
-<a name="l00285"></a>00285     {
-<a name="l00286"></a>00286         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[2] ;
-<a name="l00287"></a>00287     }
-<a name="l00288"></a>00288     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )
-<a name="l00289"></a>00289     {
-<a name="l00290"></a>00290         return_value = parlist[3] ;
-<a name="l00291"></a>00291     }
-<a name="l00292"></a>00292     <span class="keywordflow">else</span>
-<a name="l00293"></a>00293     {
-<a name="l00294"></a>00294         return_value = 0. ;
-<a name="l00295"></a>00295     }
-<a name="l00296"></a>00296     
-<a name="l00297"></a>00297     <span class="keywordflow">return</span> return_value ;
-<a name="l00298"></a>00298 }
-<a name="l00299"></a>00299 
-<a name="l00329"></a>00329 <span class="keywordtype">float</span> 
-<a name="l00330"></a>00330 sinfo_new_hat2 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )
-<a name="l00331"></a>00331 {
-<a name="l00332"></a>00332     <span class="keywordtype">float</span> return_value ;
-<a name="l00333"></a>00333     <span class="keywordtype">float</span> slope1, slope2, slope3 ;
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     <span class="comment">/* compute the slopes */</span>
-<a name="l00336"></a>00336     slope1 = ( parlist[6] - parlist[4] ) / ( parlist[1] - parlist[0] ) ;
-<a name="l00337"></a>00337     slope2 = ( parlist[7] - parlist[5] ) / ( parlist[3] - parlist[2] ) ;
-<a name="l00338"></a>00338     slope3 = ( parlist[7] - parlist[6] ) / ( parlist[2] - parlist[1] ) ;
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <span class="comment">/* now build the hat function out of the parameters */</span>
-<a name="l00341"></a>00341     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00342"></a>00342     {
-<a name="l00343"></a>00343         return_value = parlist[4] ;
-<a name="l00344"></a>00344     }
-<a name="l00345"></a>00345     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )
-<a name="l00346"></a>00346     {
-<a name="l00347"></a>00347         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[4] ;
-<a name="l00348"></a>00348     }
-<a name="l00349"></a>00349     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] && xdat[0] <= parlist[2] )
-<a name="l00350"></a>00350     {
-<a name="l00351"></a>00351         return_value = (xdat[0] - parlist[1]) * slope3 + parlist[6] ;
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[2] && xdat[0] <= parlist[3] )
-<a name="l00354"></a>00354     {
-<a name="l00355"></a>00355         return_value = (parlist[3] - xdat[0]) * slope2 + parlist[5] ;
-<a name="l00356"></a>00356     }
-<a name="l00357"></a>00357     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[3] )
-<a name="l00358"></a>00358     {
-<a name="l00359"></a>00359         return_value = parlist[5] ;
-<a name="l00360"></a>00360     }
-<a name="l00361"></a>00361     <span class="keywordflow">else</span>
-<a name="l00362"></a>00362     {
-<a name="l00363"></a>00363         return_value = 0. ;
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365     
-<a name="l00366"></a>00366     <span class="keywordflow">return</span> return_value ;
-<a name="l00367"></a>00367 }
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 
-<a name="l00399"></a>00399 <span class="keywordtype">float</span> 
-<a name="l00400"></a>00400 sinfo_new_hat1 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )
-<a name="l00401"></a>00401 {
-<a name="l00402"></a>00402     <span class="keywordtype">float</span> return_value=0 ;
-<a name="l00403"></a>00403     <span class="keywordtype">float</span> slope1, slope2 ;
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405    <span class="comment">/* take only positive values for the fit parameters */</span>
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407     <span class="comment">/* compute the slopes */</span>
-<a name="l00408"></a>00408     slope1 = (parlist[4] - parlist[2]) / slopewidth ;
-<a name="l00409"></a>00409     slope2 = (parlist[4] - parlist[3]) / slopewidth ;
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411     <span class="comment">/* now build the hat function out of the parameters */</span>
-<a name="l00412"></a>00412     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00413"></a>00413     {
-<a name="l00414"></a>00414         return_value = parlist[2] ;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[0] + slopewidth )
-<a name="l00417"></a>00417     {
-<a name="l00418"></a>00418         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[2] ;
-<a name="l00419"></a>00419     }
-<a name="l00420"></a>00420     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] + slopewidth && 
-<a name="l00421"></a>00421               xdat[0] <= parlist[1] - slopewidth )
-<a name="l00422"></a>00422     {
-<a name="l00423"></a>00423         return_value = parlist[4] ;
-<a name="l00424"></a>00424     }
-<a name="l00425"></a>00425     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] - slopewidth && xdat[0] <= parlist[1] )
-<a name="l00426"></a>00426     {
-<a name="l00427"></a>00427         return_value = (parlist[1] - xdat[0]) * slope2 + parlist[3] ;
-<a name="l00428"></a>00428     }
-<a name="l00429"></a>00429     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )
-<a name="l00430"></a>00430     {
-<a name="l00431"></a>00431         return_value = parlist[3] ;
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433     
-<a name="l00434"></a>00434     <span class="keywordflow">return</span> return_value ;
-<a name="l00435"></a>00435 }
-<a name="l00436"></a>00436        
-<a name="l00437"></a>00437 
-<a name="l00464"></a>00464 <span class="keywordtype">void</span> 
-<a name="l00465"></a>00465 sinfo_new_edge_deriv( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00466"></a>00466                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )
-<a name="l00467"></a>00467 {
-<a name="l00468"></a>00468     <span class="keywordtype">float</span> deriv1_slope1 ;
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470     <span class="comment">/* compute the slopes */</span>
-<a name="l00471"></a>00471     deriv1_slope1 =( parlist[3] - parlist[2] ) / SQR(parlist[1] - parlist[0]) ;
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473     <span class="comment">/* now build the hat derivatives out of the parameters */</span>
-<a name="l00474"></a>00474     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00475"></a>00475     {
-<a name="l00476"></a>00476         dervs[0] = 0. ;
-<a name="l00477"></a>00477         dervs[1] = 0. ;
-<a name="l00478"></a>00478         dervs[2] = 1. ;
-<a name="l00479"></a>00479         dervs[3] = 0. ;
-<a name="l00480"></a>00480     }
-<a name="l00481"></a>00481     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )
-<a name="l00482"></a>00482     {
-<a name="l00483"></a>00483         dervs[0] = ( xdat[0] - parlist[1] ) * deriv1_slope1  ;
-<a name="l00484"></a>00484         dervs[1] = ( parlist[0] - xdat[0] ) * deriv1_slope1 ;
-<a name="l00485"></a>00485         dervs[2] = ( parlist[0] - xdat[0] ) / ( parlist[1] - parlist[0] ) + 1.;
-<a name="l00486"></a>00486         dervs[3] = ( xdat[0] - parlist[0] ) / ( parlist[1] - parlist[0] ) ;
-<a name="l00487"></a>00487     }
-<a name="l00488"></a>00488     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )
-<a name="l00489"></a>00489     {
-<a name="l00490"></a>00490         dervs[0] = 0. ;
-<a name="l00491"></a>00491         dervs[1] = 0. ;
-<a name="l00492"></a>00492         dervs[2] = 0. ;
-<a name="l00493"></a>00493         dervs[3] = 1. ;
-<a name="l00494"></a>00494     }
-<a name="l00495"></a>00495 }
-<a name="l00530"></a>00530 <span class="keywordtype">void</span> 
-<a name="l00531"></a>00531 sinfo_new_hat_deriv2(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00532"></a>00532                      <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )
-<a name="l00533"></a>00533 {
-<a name="l00534"></a>00534     <span class="keywordtype">float</span> deriv1_slope1 ;
-<a name="l00535"></a>00535     <span class="keywordtype">float</span> deriv1_slope2 ;
-<a name="l00536"></a>00536     <span class="keywordtype">float</span> deriv1_slope3 ;
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538     <span class="comment">/* compute the slopes */</span>
-<a name="l00539"></a>00539     deriv1_slope1 = ( parlist[6] - parlist[4] ) / SQR(parlist[1] - parlist[0]);
-<a name="l00540"></a>00540     deriv1_slope2 = ( parlist[7] - parlist[5] ) / SQR(parlist[3] - parlist[2]);
-<a name="l00541"></a>00541     deriv1_slope3 = ( parlist[7] - parlist[6] ) / SQR(parlist[2] - parlist[1]);
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543     <span class="comment">/* now build the hat derivatives out of the parameters */</span>
-<a name="l00544"></a>00544     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00545"></a>00545     {
-<a name="l00546"></a>00546         dervs[0] = 0. ;
-<a name="l00547"></a>00547         dervs[1] = 0. ;
-<a name="l00548"></a>00548         dervs[2] = 0. ;
-<a name="l00549"></a>00549         dervs[3] = 0. ;
-<a name="l00550"></a>00550         dervs[4] = 1. ;
-<a name="l00551"></a>00551         dervs[5] = 0. ;
-<a name="l00552"></a>00552         dervs[6] = 0. ;
-<a name="l00553"></a>00553         dervs[7] = 0. ;
-<a name="l00554"></a>00554     }
-<a name="l00555"></a>00555     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )
-<a name="l00556"></a>00556     {
-<a name="l00557"></a>00557         dervs[0] = ( xdat[0] - parlist[1] ) * deriv1_slope1  ;
-<a name="l00558"></a>00558         dervs[1] = ( parlist[0] - xdat[0] ) * deriv1_slope1 ;
-<a name="l00559"></a>00559         dervs[2] = 0. ;
-<a name="l00560"></a>00560         dervs[3] = 0. ;
-<a name="l00561"></a>00561         dervs[4] = ( parlist[0] - xdat[0] ) / ( parlist[1] - parlist[0] ) + 1.;
-<a name="l00562"></a>00562         dervs[5] = 0. ;
-<a name="l00563"></a>00563         dervs[6] = ( xdat[0] - parlist[0] ) / ( parlist[1] - parlist[0] ) ;
-<a name="l00564"></a>00564         dervs[7] = 0. ;
-<a name="l00565"></a>00565     }
-<a name="l00566"></a>00566     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] && xdat[0] <= parlist[2] )
-<a name="l00567"></a>00567     {
-<a name="l00568"></a>00568         dervs[0] = 0. ;
-<a name="l00569"></a>00569         dervs[1] = (xdat[0] - parlist[2]) * deriv1_slope3 ;
-<a name="l00570"></a>00570         dervs[2] = (parlist[1] - xdat[0]) * deriv1_slope3 ;
-<a name="l00571"></a>00571         dervs[3] = 0. ;
-<a name="l00572"></a>00572         dervs[4] = 0. ;
-<a name="l00573"></a>00573         dervs[5] = 0. ;
-<a name="l00574"></a>00574         dervs[6] = (parlist[1] - xdat[0]) / (parlist[2] - parlist[1]) + 1. ;
-<a name="l00575"></a>00575         dervs[7] = (xdat[0] - parlist[1]) / (parlist[2] - parlist[1]) ;
-<a name="l00576"></a>00576     }
-<a name="l00577"></a>00577     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[2] && xdat[0] <= parlist[3] )
-<a name="l00578"></a>00578     {
-<a name="l00579"></a>00579         dervs[0] = 0. ;
-<a name="l00580"></a>00580         dervs[1] = 0. ;
-<a name="l00581"></a>00581         dervs[2] = ( parlist[3] - xdat[0] ) * deriv1_slope2 ;
-<a name="l00582"></a>00582         dervs[3] = ( xdat[0] - parlist[2] ) * deriv1_slope2 ;
-<a name="l00583"></a>00583         dervs[4] = 0. ; 
-<a name="l00584"></a>00584         dervs[5] = ( xdat[0] - parlist[3] ) / ( parlist[3] - parlist[2] ) + 1.;
-<a name="l00585"></a>00585         dervs[6] = 0. ;
-<a name="l00586"></a>00586         dervs[7] = ( parlist[3] - xdat[0] ) / ( parlist[3] - parlist[2] ) ;
-<a name="l00587"></a>00587     }
-<a name="l00588"></a>00588     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[3] )
-<a name="l00589"></a>00589     {
-<a name="l00590"></a>00590         dervs[0] = 0. ;
-<a name="l00591"></a>00591         dervs[1] = 0. ;
-<a name="l00592"></a>00592         dervs[2] = 0. ;
-<a name="l00593"></a>00593         dervs[3] = 0. ;
-<a name="l00594"></a>00594         dervs[4] = 0. ;
-<a name="l00595"></a>00595         dervs[5] = 1. ;
-<a name="l00596"></a>00596         dervs[6] = 0. ;
-<a name="l00597"></a>00597         dervs[7] = 0. ;
-<a name="l00598"></a>00598     }
-<a name="l00599"></a>00599 }
-<a name="l00600"></a>00600 
-<a name="l00629"></a>00629 <span class="keywordtype">void</span> 
-<a name="l00630"></a>00630 sinfo_new_hat_deriv1( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00631"></a>00631                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )
-<a name="l00632"></a>00632 {
-<a name="l00633"></a>00633     <span class="comment">/* now build the hat derivatives out of the parameters */</span>
-<a name="l00634"></a>00634     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )
-<a name="l00635"></a>00635     {
-<a name="l00636"></a>00636         dervs[0] = 0. ;
-<a name="l00637"></a>00637         dervs[1] = 0. ;
-<a name="l00638"></a>00638         dervs[2] = 1. ;
-<a name="l00639"></a>00639         dervs[3] = 0. ;
-<a name="l00640"></a>00640         dervs[4] = 0. ;
-<a name="l00641"></a>00641     }
-<a name="l00642"></a>00642     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[0] + slopewidth )
-<a name="l00643"></a>00643     {
-<a name="l00644"></a>00644         dervs[0] = ( parlist[2] - parlist[4] ) / slopewidth ;
-<a name="l00645"></a>00645         dervs[1] = 0. ;
-<a name="l00646"></a>00646         dervs[2] = (( parlist[0] - xdat[0] ) / slopewidth ) + 1. ;
-<a name="l00647"></a>00647         dervs[3] = 0. ;
-<a name="l00648"></a>00648         dervs[4] = ( xdat[0] - parlist[0] ) / slopewidth ;
-<a name="l00649"></a>00649     }
-<a name="l00650"></a>00650     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] + slopewidth && xdat[0] <= 
-<a name="l00651"></a>00651               parlist[1] - slopewidth )
-<a name="l00652"></a>00652     {
-<a name="l00653"></a>00653         dervs[0] = 0. ;
-<a name="l00654"></a>00654         dervs[1] = 0. ;
-<a name="l00655"></a>00655         dervs[2] = 0. ;
-<a name="l00656"></a>00656         dervs[3] = 0. ;
-<a name="l00657"></a>00657         dervs[4] = 1. ;
-<a name="l00658"></a>00658     }
-<a name="l00659"></a>00659     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] - slopewidth && xdat[0] <= parlist[1] )
-<a name="l00660"></a>00660     {
-<a name="l00661"></a>00661         dervs[0] = 0. ;
-<a name="l00662"></a>00662         dervs[1] = ( parlist[4] - parlist[3] ) / slopewidth ;
-<a name="l00663"></a>00663         dervs[2] = 0. ;
-<a name="l00664"></a>00664         dervs[3] = (( xdat[0] - parlist[1] ) / slopewidth ) + 1. ;
-<a name="l00665"></a>00665         dervs[4] = ( parlist[1] - xdat[0] ) / slopewidth ; 
-<a name="l00666"></a>00666     }
-<a name="l00667"></a>00667     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )
-<a name="l00668"></a>00668     {
-<a name="l00669"></a>00669         dervs[0] = 0. ;
-<a name="l00670"></a>00670         dervs[1] = 0. ;
-<a name="l00671"></a>00671         dervs[2] = 0. ;
-<a name="l00672"></a>00672         dervs[3] = 1. ;
-<a name="l00673"></a>00673         dervs[4] = 0. ;
-<a name="l00674"></a>00674     }
-<a name="l00675"></a>00675 }
-<a name="l00676"></a>00676    
-<a name="l00688"></a>00688 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00689"></a>00689 sinfo_new_inv_mat_edge (<span class="keywordtype">void</span>)
-<a name="l00690"></a>00690 {
-<a name="l00691"></a>00691     <span class="keywordtype">double</span> even ;
-<a name="l00692"></a>00692     <span class="keywordtype">double</span> hv[NPAR] ;
-<a name="l00693"></a>00693     <span class="keywordtype">double</span> mjk ;
-<a name="l00694"></a>00694     <span class="keywordtype">double</span> rowmax ;
-<a name="l00695"></a>00695     <span class="keywordtype">int</span> evin ;
-<a name="l00696"></a>00696     <span class="keywordtype">int</span> i, j, k, row ;
-<a name="l00697"></a>00697     <span class="keywordtype">int</span> per[NPAR] ;
-<a name="l00698"></a>00698    
-<a name="l00699"></a>00699     <span class="comment">/* set permutation array */</span>
-<a name="l00700"></a>00700     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00701"></a>00701     {
-<a name="l00702"></a>00702         per[i] = i ;
-<a name="l00703"></a>00703     }
-<a name="l00704"></a>00704     
-<a name="l00705"></a>00705     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span>
-<a name="l00706"></a>00706     {
-<a name="l00707"></a>00707         <span class="comment">/* determine largest element of a row */</span>                           
-<a name="l00708"></a>00708         rowmax = fabs ( matrix2[j][j] ) ;
-<a name="l00709"></a>00709         row = j ;                         
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00712"></a>00712         {
-<a name="l00713"></a>00713             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )
-<a name="l00714"></a>00714             {
-<a name="l00715"></a>00715                 rowmax = fabs( matrix2[i][j] ) ;
-<a name="l00716"></a>00716                 row = i ;
-<a name="l00717"></a>00717             }
-<a name="l00718"></a>00718         }
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720         <span class="comment">/* determinant is zero! */</span>
-<a name="l00721"></a>00721         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )
-<a name="l00722"></a>00722         {
-<a name="l00723"></a>00723             <span class="keywordflow">return</span> -6 ;
-<a name="l00724"></a>00724         }
-<a name="l00725"></a>00725         
-<a name="l00726"></a>00726         <span class="comment">/* if the largest element is not on the diagonal, then permutate rows */</span>
-<a name="l00727"></a>00727         <span class="keywordflow">if</span> ( row > j )
-<a name="l00728"></a>00728         {
-<a name="l00729"></a>00729             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00730"></a>00730             {
-<a name="l00731"></a>00731                 even = matrix2[j][k] ;
-<a name="l00732"></a>00732                 matrix2[j][k] = matrix2[row][k] ;
-<a name="l00733"></a>00733                 matrix2[row][k] = even ;
-<a name="l00734"></a>00734             }
-<a name="l00735"></a>00735             <span class="comment">/* keep track of permutation */</span>
-<a name="l00736"></a>00736             evin = per[j] ;
-<a name="l00737"></a>00737             per[j] = per[row] ;
-<a name="l00738"></a>00738             per[row] = evin ;
-<a name="l00739"></a>00739         }
-<a name="l00740"></a>00740         
-<a name="l00741"></a>00741         <span class="comment">/* modify column */</span>
-<a name="l00742"></a>00742         even = 1.0 / matrix2[j][j] ;
-<a name="l00743"></a>00743         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00744"></a>00744         {
-<a name="l00745"></a>00745             matrix2[i][j] *= even ;
-<a name="l00746"></a>00746         }
-<a name="l00747"></a>00747         matrix2[j][j] = even ;
-<a name="l00748"></a>00748         
-<a name="l00749"></a>00749         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )
-<a name="l00750"></a>00750         {
-<a name="l00751"></a>00751             mjk = matrix2[j][k] ;
-<a name="l00752"></a>00752             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00753"></a>00753             {
-<a name="l00754"></a>00754                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00755"></a>00755             }
-<a name="l00756"></a>00756             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00757"></a>00757             {
-<a name="l00758"></a>00758                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00759"></a>00759             }
-<a name="l00760"></a>00760             matrix2[j][k] = -even * mjk ;
-<a name="l00761"></a>00761         }
-<a name="l00762"></a>00762     
-<a name="l00763"></a>00763         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )
-<a name="l00764"></a>00764         {
-<a name="l00765"></a>00765             mjk = matrix2[j][k] ;
-<a name="l00766"></a>00766             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00767"></a>00767             {
-<a name="l00768"></a>00768                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00769"></a>00769             }
-<a name="l00770"></a>00770             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00771"></a>00771             {
-<a name="l00772"></a>00772                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00773"></a>00773             }
-<a name="l00774"></a>00774             matrix2[j][k] = -even * mjk ;
-<a name="l00775"></a>00775         }
-<a name="l00776"></a>00776     }
-<a name="l00777"></a>00777     
-<a name="l00778"></a>00778     <span class="comment">/* finally, repermute the columns */</span>
-<a name="l00779"></a>00779     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00780"></a>00780     {
-<a name="l00781"></a>00781         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00782"></a>00782         {
-<a name="l00783"></a>00783             hv[per[k]] = matrix2[i][k] ;
-<a name="l00784"></a>00784         }
-<a name="l00785"></a>00785         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00786"></a>00786         {
-<a name="l00787"></a>00787             matrix2[i][k] = hv[k] ;
-<a name="l00788"></a>00788         }
-<a name="l00789"></a>00789     }
-<a name="l00790"></a>00790         
-<a name="l00791"></a>00791     <span class="comment">/* all is well */</span>
-<a name="l00792"></a>00792     <span class="keywordflow">return</span> 0 ;
-<a name="l00793"></a>00793 }
-<a name="l00794"></a>00794     
-<a name="l00813"></a>00813 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00814"></a>00814 sinfo_new_get_mat_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l00815"></a>00815                            <span class="keywordtype">int</span>   * xdim,
-<a name="l00816"></a>00816                            <span class="keywordtype">float</span> * ydat,
-<a name="l00817"></a>00817                            <span class="keywordtype">float</span> * wdat,
-<a name="l00818"></a>00818                            <span class="keywordtype">int</span>   * ndat,
-<a name="l00819"></a>00819                            <span class="keywordtype">float</span> * fpar,
-<a name="l00820"></a>00820                            <span class="keywordtype">float</span> * epar<span class="comment">/*,</span>
-<a name="l00821"></a>00821 <span class="comment">                           int   * npar*/</span> )
-<a name="l00822"></a>00822 {
-<a name="l00823"></a>00823     <span class="keywordtype">double</span> wd ;
-<a name="l00824"></a>00824     <span class="keywordtype">double</span> wn ;
-<a name="l00825"></a>00825     <span class="keywordtype">double</span> yd ;
-<a name="l00826"></a>00826     <span class="keywordtype">int</span> i, j, n ;
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00829"></a>00829     {
-<a name="l00830"></a>00830         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span>
-<a name="l00831"></a>00831         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   <span class="comment">/* zero matrix only on and </span>
-<a name="l00832"></a>00832 <span class="comment">                                         below diagonal */</span>
-<a name="l00833"></a>00833         {
-<a name="l00834"></a>00834             matrix1[j][i] = 0.0 ;
-<a name="l00835"></a>00835         }
-<a name="l00836"></a>00836     }
-<a name="l00837"></a>00837     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00838"></a>00838     
-<a name="l00839"></a>00839     <span class="comment">/* loop through data points */</span>
-<a name="l00840"></a>00840     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00841"></a>00841     {
-<a name="l00842"></a>00842         wn = wdat[n] ;
-<a name="l00843"></a>00843         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span>
-<a name="l00844"></a>00844         {
-<a name="l00845"></a>00845             yd = ydat[n] - sinfo_new_edge( &xdat[(*xdim) * n], 
-<a name="l00846"></a>00846                                            fpar<span class="comment">/*, npar, ndat*/</span> ) ;
-<a name="l00847"></a>00847             sinfo_new_edge_deriv( &xdat[(*xdim) * n], fpar, epar<span class="comment">/*, npar */</span>) ;
-<a name="l00848"></a>00848             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span>
-<a name="l00849"></a>00849             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00850"></a>00850             {
-<a name="l00851"></a>00851                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span>
-<a name="l00852"></a>00852                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span>
-<a name="l00853"></a>00853                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span>
-<a name="l00854"></a>00854                 {
-<a name="l00855"></a>00855                     matrix1[j][i] += epar[parptr[i]] * wd ;
-<a name="l00856"></a>00856                 }
-<a name="l00857"></a>00857             }
-<a name="l00858"></a>00858         }
-<a name="l00859"></a>00859     }                   
-<a name="l00860"></a>00860 }  
-<a name="l00861"></a>00861                 
-<a name="l00862"></a>00862             
-<a name="l00863"></a>00863 
-<a name="l00893"></a>00893 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00894"></a>00894 sinfo_new_get_vec_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l00895"></a>00895                           <span class="keywordtype">int</span>   * xdim,
-<a name="l00896"></a>00896                           <span class="keywordtype">float</span> * ydat,
-<a name="l00897"></a>00897                           <span class="keywordtype">float</span> * wdat,
-<a name="l00898"></a>00898                           <span class="keywordtype">int</span>   * ndat,
-<a name="l00899"></a>00899                           <span class="keywordtype">float</span> * fpar,
-<a name="l00900"></a>00900                           <span class="keywordtype">float</span> * epar,
-<a name="l00901"></a>00901                           <span class="keywordtype">int</span>   * npar )
-<a name="l00902"></a>00902 {
-<a name="l00903"></a>00903     <span class="keywordtype">double</span> dj ;
-<a name="l00904"></a>00904     <span class="keywordtype">double</span> dy ;
-<a name="l00905"></a>00905     <span class="keywordtype">double</span> mii ;
-<a name="l00906"></a>00906     <span class="keywordtype">double</span> mji ;
-<a name="l00907"></a>00907     <span class="keywordtype">double</span> mjj ;
-<a name="l00908"></a>00908     <span class="keywordtype">double</span> wn ;
-<a name="l00909"></a>00909     <span class="keywordtype">int</span> i, j, n, r ;
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span>
-<a name="l00912"></a>00912     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00913"></a>00913     {
-<a name="l00914"></a>00914         mjj = matrix1[j][j] ;
-<a name="l00915"></a>00915         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span>
-<a name="l00916"></a>00916         {
-<a name="l00917"></a>00917             <span class="keywordflow">return</span> -5 ;
-<a name="l00918"></a>00918         }
-<a name="l00919"></a>00919         mjj = sqrt( mjj ) ;
-<a name="l00920"></a>00920         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00921"></a>00921         {
-<a name="l00922"></a>00922             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;
-<a name="l00923"></a>00923             matrix2[i][j] = matrix2[j][i] = mji ;
-<a name="l00924"></a>00924         }
-<a name="l00925"></a>00925         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span>
-<a name="l00926"></a>00926     }    
-<a name="l00927"></a>00927     
-<a name="l00928"></a>00928     <span class="keywordflow">if</span> ( (r = sinfo_new_inv_mat_edge()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span>
-<a name="l00929"></a>00929     {
-<a name="l00930"></a>00930         <span class="keywordflow">return</span> r ;
-<a name="l00931"></a>00931     }
-<a name="l00932"></a>00932     
-<a name="l00933"></a>00933     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )
-<a name="l00934"></a>00934     {
-<a name="l00935"></a>00935         epar[i] = fpar[i] ;
-<a name="l00936"></a>00936     }
-<a name="l00937"></a>00937     
-<a name="l00938"></a>00938     <span class="comment">/* loop to calculate correction sinfo_vector */</span>
-<a name="l00939"></a>00939     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00940"></a>00940     {
-<a name="l00941"></a>00941         dj = 0.0 ;
-<a name="l00942"></a>00942         mjj = matrix1[j][j] ;
-<a name="l00943"></a>00943         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span>
-<a name="l00944"></a>00944         {
-<a name="l00945"></a>00945             <span class="keywordflow">return</span> -7 ;
-<a name="l00946"></a>00946         }
-<a name="l00947"></a>00947         mjj = sqrt ( mjj ) ;
-<a name="l00948"></a>00948         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00949"></a>00949         {
-<a name="l00950"></a>00950             mii = matrix1[i][i] ;
-<a name="l00951"></a>00951             <span class="keywordflow">if</span> ( mii <= 0.0 )
-<a name="l00952"></a>00952             {
-<a name="l00953"></a>00953                 <span class="keywordflow">return</span> -7 ;
-<a name="l00954"></a>00954             }
-<a name="l00955"></a>00955             mii = sqrt( mii ) ;
-<a name="l00956"></a>00956             dj += vec[i] * matrix2[j][i] / mjj / mii ;
-<a name="l00957"></a>00957         }
-<a name="l00958"></a>00958         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span>
-<a name="l00959"></a>00959     }    
-<a name="l00960"></a>00960     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00961"></a>00961  
-<a name="l00962"></a>00962     <span class="comment">/* loop through the data points */</span>
-<a name="l00963"></a>00963     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00964"></a>00964     {
-<a name="l00965"></a>00965         wn = wdat[n] ;               <span class="comment">/* get weight */</span>
-<a name="l00966"></a>00966         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00967"></a>00967         {
-<a name="l00968"></a>00968             dy = ydat[n] - sinfo_new_edge( &xdat[(*xdim) * n], epar
-<a name="l00969"></a>00969                                                 <span class="comment">/*, npar, ndat*/</span>) ;
-<a name="l00970"></a>00970             chi1 += wdat[n] * dy * dy ;
-<a name="l00971"></a>00971         }
-<a name="l00972"></a>00972     }
-<a name="l00973"></a>00973     <span class="keywordflow">return</span> 0 ;
-<a name="l00974"></a>00974 }   
-<a name="l00975"></a>00975     
-<a name="l00976"></a>00976         
-<a name="l01030"></a>01030 <span class="keywordtype">int</span> 
-<a name="l01031"></a>01031 sinfo_new_lsqfit_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l01032"></a>01032                   <span class="keywordtype">int</span>   * xdim,
-<a name="l01033"></a>01033                   <span class="keywordtype">float</span> * ydat,
-<a name="l01034"></a>01034                   <span class="keywordtype">float</span> * wdat,
-<a name="l01035"></a>01035                   <span class="keywordtype">int</span>   * ndat,
-<a name="l01036"></a>01036                   <span class="keywordtype">float</span> * fpar,
-<a name="l01037"></a>01037                   <span class="keywordtype">float</span> * epar,
-<a name="l01038"></a>01038                   <span class="keywordtype">int</span>   * mpar,
-<a name="l01039"></a>01039                   <span class="keywordtype">int</span>   * npar,
-<a name="l01040"></a>01040                   <span class="keywordtype">float</span> * tol ,
-<a name="l01041"></a>01041                   <span class="keywordtype">int</span>   * its ,
-<a name="l01042"></a>01042                   <span class="keywordtype">float</span> * lab  )
-<a name="l01043"></a>01043 {
-<a name="l01044"></a>01044     <span class="keywordtype">int</span> i, n, r ;
-<a name="l01045"></a>01045     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span>
-<a name="l01046"></a>01046     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span>
-<a name="l01047"></a>01047     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span>
-<a name="l01048"></a>01048     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span>
-<a name="l01049"></a>01049 
-<a name="l01050"></a>01050     itc   = 0 ;                    <span class="comment">/* fate of fit */</span>
-<a name="l01051"></a>01051     found = 0 ;                    <span class="comment">/* reset */</span>
-<a name="l01052"></a>01052     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span>
-<a name="l01053"></a>01053     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span>
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )
-<a name="l01056"></a>01056     {
-<a name="l01057"></a>01057         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span>
-<a name="l01058"></a>01058     }
-<a name="l01059"></a>01059     <span class="keywordflow">else</span>
-<a name="l01060"></a>01060     {
-<a name="l01061"></a>01061         tolerance = *tol ;                <span class="comment">/* tolerance */</span>
-<a name="l01062"></a>01062     }
-<a name="l01063"></a>01063     
-<a name="l01064"></a>01064     labda = fabs( *lab ) * LABFACA ;      <span class="comment">/* start value for mixing parameter */</span>
-<a name="l01065"></a>01065     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l01066"></a>01066     {
-<a name="l01067"></a>01067         <span class="keywordflow">if</span> ( mpar[i] )
-<a name="l01068"></a>01068         {
-<a name="l01069"></a>01069             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span>
-<a name="l01070"></a>01070             {
-<a name="l01071"></a>01071                 <span class="keywordflow">return</span> -1 ;
-<a name="l01072"></a>01072             }
-<a name="l01073"></a>01073             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span>
-<a name="l01074"></a>01074         }
-<a name="l01075"></a>01075     }
-<a name="l01076"></a>01076     
-<a name="l01077"></a>01077     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     
-<a name="l01078"></a>01078     {
-<a name="l01079"></a>01079         <span class="keywordflow">return</span> -2 ;
-<a name="l01080"></a>01080     }
-<a name="l01081"></a>01081     
-<a name="l01082"></a>01082     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l01083"></a>01083     {
-<a name="l01084"></a>01084         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l01085"></a>01085         {
-<a name="l01086"></a>01086             nuse ++ ;
-<a name="l01087"></a>01087         }
-<a name="l01088"></a>01088     }
-<a name="l01089"></a>01089     
-<a name="l01090"></a>01090     <span class="keywordflow">if</span> ( nfree >= nuse )
-<a name="l01091"></a>01091     {
-<a name="l01092"></a>01092         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span>
-<a name="l01093"></a>01093     }
-<a name="l01094"></a>01094     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span>
-<a name="l01095"></a>01095     {
-<a name="l01096"></a>01096         <span class="comment">/* initialize fpar array */</span>
-<a name="l01097"></a>01097         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ; 
-<a name="l01098"></a>01098         sinfo_new_get_mat_edge(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;
-<a name="l01099"></a>01099         r =  sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, ndat, 
-<a name="l01100"></a>01100                                       fpar, epar, npar ) ;
-<a name="l01101"></a>01101         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span>
-<a name="l01102"></a>01102         {
-<a name="l01103"></a>01103             <span class="keywordflow">return</span> r ;
-<a name="l01104"></a>01104         }
-<a name="l01105"></a>01105         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l01106"></a>01106         {
-<a name="l01107"></a>01107             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span>
-<a name="l01108"></a>01108             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span>
-<a name="l01109"></a>01109         }
-<a name="l01110"></a>01110         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l01111"></a>01111         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01112"></a>01112         {
-<a name="l01113"></a>01113             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )
-<a name="l01114"></a>01114             {
-<a name="l01115"></a>01115                 <span class="keywordflow">return</span> -7 ;
-<a name="l01116"></a>01116             }
-<a name="l01117"></a>01117             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / 
-<a name="l01118"></a>01118                                      sqrt( matrix1[i][i] ) ;
-<a name="l01119"></a>01119         }
-<a name="l01120"></a>01120     }
-<a name="l01121"></a>01121     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span>
-<a name="l01122"></a>01122     {
-<a name="l01123"></a>01123         <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l01124"></a>01124 <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span>
-<a name="l01125"></a>01125 <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span>
-<a name="l01126"></a>01126 <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span>
-<a name="l01127"></a>01127 <span class="comment">         * the sinfo_matrix and calculate the correction sinfo_vector. In the </span>
-<a name="l01128"></a>01128 <span class="comment">         * inner loop</span>
-<a name="l01129"></a>01129 <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span>
-<a name="l01130"></a>01130 <span class="comment">         * better solution than the previous one. If so, we leave the inner loop</span>
-<a name="l01131"></a>01131 <span class="comment">         * else we increase labda ( give more weight to the steepest descent </span>
-<a name="l01132"></a>01132 <span class="comment">         * method) calculate the correction sinfo_vector and check again. </span>
-<a name="l01133"></a>01133 <span class="comment">         * After the inner loop</span>
-<a name="l01134"></a>01134 <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span>
-<a name="l01135"></a>01135 <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span>
-<a name="l01136"></a>01136 <span class="comment">         */</span>
-<a name="l01137"></a>01137         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span>
-<a name="l01138"></a>01138         {      
-<a name="l01139"></a>01139             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span>
-<a name="l01140"></a>01140             {
-<a name="l01141"></a>01141                 <span class="keywordflow">return</span> -4 ;               
-<a name="l01142"></a>01142             }
-<a name="l01143"></a>01143             sinfo_new_get_mat_edge( xdat, xdim, ydat, wdat, ndat, 
-<a name="l01144"></a>01144                                     fpar, epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l01145"></a>01145             
-<a name="l01146"></a>01146             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l01147"></a>01147 <span class="comment">             * here we decrease labda since we may assume that each iteration</span>
-<a name="l01148"></a>01148 <span class="comment">             * brings us closer to the answer.</span>
-<a name="l01149"></a>01149 <span class="comment">             */</span>
-<a name="l01150"></a>01150             <span class="keywordflow">if</span> ( labda > LABMINA )
-<a name="l01151"></a>01151             {
-<a name="l01152"></a>01152                 labda = labda / LABFACA ;         <span class="comment">/* decrease labda */</span>
-<a name="l01153"></a>01153             }
-<a name="l01154"></a>01154             r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, ndat, 
-<a name="l01155"></a>01155                                          fpar, epar, npar ) ;
-<a name="l01156"></a>01156             <span class="keywordflow">if</span> ( (<span class="keywordtype">int</span>)fpar[1] - (<span class="keywordtype">int</span>)fpar[0] <= 0 && fpar[1] / fpar[0] > 0. )
-<a name="l01157"></a>01157             {
-<a name="l01158"></a>01158                 fpar[1] += 1. ;
-<a name="l01159"></a>01159                 continue ;
-<a name="l01160"></a>01160             } 
-<a name="l01161"></a>01161             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span>
-<a name="l01162"></a>01162             {
-<a name="l01163"></a>01163                 <span class="keywordflow">return</span> r ;
-<a name="l01164"></a>01164             }
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span>
-<a name="l01167"></a>01167             {
-<a name="l01168"></a>01168                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l01169"></a>01169 <span class="comment">                 * The next statement is based on experience, not on the </span>
-<a name="l01170"></a>01170 <span class="comment">                 * mathematics of the problem. It is assumed that we have </span>
-<a name="l01171"></a>01171 <span class="comment">                 * reached convergence when the pure steepest descent method </span>
-<a name="l01172"></a>01172 <span class="comment">                 * does not produce a better solution.</span>
-<a name="l01173"></a>01173 <span class="comment">                 */</span>
-<a name="l01174"></a>01174                 <span class="keywordflow">if</span> ( labda > LABMAXA )    <span class="comment">/* assume solution found */</span>
-<a name="l01175"></a>01175                 {
-<a name="l01176"></a>01176                     break ;
-<a name="l01177"></a>01177                 }
-<a name="l01178"></a>01178                 labda = labda * LABFACA ;   <span class="comment">/* increase mixing parameter */</span>
-<a name="l01179"></a>01179                 r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, 
-<a name="l01180"></a>01180                                              ndat, fpar, epar, npar ) ;
-<a name="l01181"></a>01181                 <span class="keywordflow">if</span> ( (<span class="keywordtype">int</span>)fpar[1] - (<span class="keywordtype">int</span>)fpar[0] <= 0 && 
-<a name="l01182"></a>01182                      fpar[1] / fpar[0] > 0. )
-<a name="l01183"></a>01183                 {
-<a name="l01184"></a>01184                     fpar[1] += 1. ;
-<a name="l01185"></a>01185                     continue ;
-<a name="l01186"></a>01186                 } 
-<a name="l01187"></a>01187                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span>
-<a name="l01188"></a>01188                 {
-<a name="l01189"></a>01189                     <span class="keywordflow">return</span> r ;
-<a name="l01190"></a>01190                 }
-<a name="l01191"></a>01191             }
-<a name="l01192"></a>01192 
-<a name="l01193"></a>01193             <span class="keywordflow">if</span> ( labda <= LABMAXA )        <span class="comment">/* save old parameters */</span>
-<a name="l01194"></a>01194             {
-<a name="l01195"></a>01195                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )
-<a name="l01196"></a>01196                 {
-<a name="l01197"></a>01197                     fpar[i] = epar[i] ;
-<a name="l01198"></a>01198                 }
-<a name="l01199"></a>01199             }
-<a name="l01200"></a>01200             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || 
-<a name="l01201"></a>01201                   (labda > LABMAXA) )
-<a name="l01202"></a>01202             {
-<a name="l01203"></a>01203                 <span class="comment">/*------------------------------------------------------------</span>
-<a name="l01204"></a>01204 <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span>
-<a name="l01205"></a>01205 <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span>
-<a name="l01206"></a>01206 <span class="comment">                 * using the pure Taylor method because we are very close to </span>
-<a name="l01207"></a>01207 <span class="comment">                 * the real solution.</span>
-<a name="l01208"></a>01208 <span class="comment">                 */</span>
-<a name="l01209"></a>01209                 labda = LABMINA ;              <span class="comment">/* for Taylor solution */</span>
-<a name="l01210"></a>01210                 sinfo_new_get_mat_edge ( xdat, xdim, ydat, wdat, ndat, 
-<a name="l01211"></a>01211                                          fpar, epar<span class="comment">/*, npar */</span>) ;
-<a name="l01212"></a>01212                 r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, 
-<a name="l01213"></a>01213                                              ndat, fpar, epar, npar ) ;
-<a name="l01214"></a>01214 
-<a name="l01215"></a>01215                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span>
-<a name="l01216"></a>01216                 {
-<a name="l01217"></a>01217                     <span class="keywordflow">return</span> r ;
-<a name="l01218"></a>01218                 }
-<a name="l01219"></a>01219                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l01220"></a>01220                 {
-<a name="l01221"></a>01221                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span>
-<a name="l01222"></a>01222                 }
-<a name="l01223"></a>01223                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l01224"></a>01224 
-<a name="l01225"></a>01225                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01226"></a>01226                 {
-<a name="l01227"></a>01227                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )
-<a name="l01228"></a>01228                     {
-<a name="l01229"></a>01229                         <span class="keywordflow">return</span> -7 ;
-<a name="l01230"></a>01230                     }
-<a name="l01231"></a>01231                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / 
-<a name="l01232"></a>01232                                              sqrt( matrix1[i][i] ) ;
-<a name="l01233"></a>01233                 }
-<a name="l01234"></a>01234                 found = 1 ;                  <span class="comment">/* we found a solution */</span>
-<a name="l01235"></a>01235             }
-<a name="l01236"></a>01236         }
-<a name="l01237"></a>01237     }
-<a name="l01238"></a>01238     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span>
-<a name="l01239"></a>01239 }
-<a name="l01268"></a>01268 <span class="keywordtype">int</span> 
-<a name="l01269"></a>01269 sinfo_new_fit_slits1( cpl_image   * lineImage, 
-<a name="l01270"></a>01270                FitParams ** par,
-<a name="l01271"></a>01271                <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l01272"></a>01272                <span class="keywordtype">int</span>          box_length,
-<a name="l01273"></a>01273                <span class="keywordtype">float</span>        y_box )
-<a name="l01274"></a>01274 {
-<a name="l01275"></a>01275     <span class="keywordtype">float</span>* position=NULL ;
-<a name="l01276"></a>01276     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l01277"></a>01277     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l01278"></a>01278     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l01279"></a>01279     Vector * box_buffer ;
-<a name="l01280"></a>01280     <span class="keywordtype">float</span> max_intensity ;
-<a name="l01281"></a>01281     <span class="keywordtype">float</span> row_pos ;
-<a name="l01282"></a>01282     <span class="keywordtype">int</span>   col ;
-<a name="l01283"></a>01283     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;
-<a name="l01284"></a>01284     <span class="keywordtype">int</span>   found, init1, init2 ;
-<a name="l01285"></a>01285     <span class="keywordtype">int</span>   line ; 
-<a name="l01286"></a>01286     <span class="keywordtype">int</span>   column ;
-<a name="l01287"></a>01287     <span class="keywordtype">int</span>   slit_length ;
-<a name="l01288"></a>01288     <span class="keywordtype">int</span>   agreed ;
-<a name="l01289"></a>01289     <span class="keywordtype">int</span>   bad_line ;
-<a name="l01290"></a>01290     <span class="keywordtype">int</span>   margin ;
-<a name="l01291"></a>01291     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l01292"></a>01292     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l01293"></a>01293     <span class="keywordtype">int</span>   * mpar ;
-<a name="l01294"></a>01294     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l01295"></a>01295     <span class="keywordtype">float</span> tol, lab ;
-<a name="l01296"></a>01296     <span class="keywordtype">float</span> fitpar[2*NPAR] ;
-<a name="l01297"></a>01297     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l01298"></a>01298     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l01299"></a>01299     <span class="keywordtype">int</span> ilx=0;
-<a name="l01300"></a>01300     <span class="keywordtype">int</span> ily=0;
-<a name="l01301"></a>01301     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01302"></a>01302 
-<a name="l01303"></a>01303 
-<a name="l01304"></a>01304     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l01305"></a>01305     {
-<a name="l01306"></a>01306         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;
-<a name="l01307"></a>01307         <span class="keywordflow">return</span> -1 ;
-<a name="l01308"></a>01308     }
-<a name="l01309"></a>01309     ilx=cpl_image_get_size_x(lineImage);
-<a name="l01310"></a>01310     ily=cpl_image_get_size_y(lineImage);
-<a name="l01311"></a>01311     pidata=cpl_image_get_data_float(lineImage);
-<a name="l01312"></a>01312 
-<a name="l01313"></a>01313     slit_length = (int) sqrt (ilx) ;
-<a name="l01314"></a>01314     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l01315"></a>01315     {
-<a name="l01316"></a>01316         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span>) ;
-<a name="l01317"></a>01317         <span class="keywordflow">return</span> -2 ;
-<a name="l01318"></a>01318     }
-<a name="l01319"></a>01319 
-<a name="l01320"></a>01320     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )
-<a name="l01321"></a>01321     {
-<a name="l01322"></a>01322         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span>) ;
-<a name="l01323"></a>01323         <span class="keywordflow">return</span> -3 ;
-<a name="l01324"></a>01324     }
-<a name="l01325"></a>01325 
-<a name="l01326"></a>01326     <span class="keywordflow">if</span> ( box_length <  slit_length ||
-<a name="l01327"></a>01327          box_length >= 3*slit_length )
-<a name="l01328"></a>01328     {
-<a name="l01329"></a>01329         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;
-<a name="l01330"></a>01330         <span class="keywordflow">return</span> -4 ;
-<a name="l01331"></a>01331     }
-<a name="l01332"></a>01332 
-<a name="l01333"></a>01333     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )
-<a name="l01334"></a>01334     {
-<a name="l01335"></a>01335         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;
-<a name="l01336"></a>01336         <span class="keywordflow">return</span> -5 ;
-<a name="l01337"></a>01337     }
-<a name="l01338"></a>01338 
-<a name="l01339"></a>01339     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span>
-<a name="l01340"></a>01340     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01341"></a>01341     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01342"></a>01342     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01343"></a>01343     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01344"></a>01344     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01345"></a>01345 
-<a name="l01346"></a>01346     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l01347"></a>01347 <span class="comment">     * go through the first image columns and the fit parameters and find </span>
-<a name="l01348"></a>01348 <span class="comment">     *  the line with the highest intensity </span>
-<a name="l01349"></a>01349 <span class="comment">     */</span>
-<a name="l01350"></a>01350     agreed = -1 ;
-<a name="l01351"></a>01351     bad_line = -1 ;
-<a name="l01352"></a>01352     <span class="keywordflow">while</span>( agreed == -1 )
-<a name="l01353"></a>01353     {
-<a name="l01354"></a>01354         found = -1 ;
-<a name="l01355"></a>01355         max_intensity = -FLT_MAX ;
-<a name="l01356"></a>01356         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )
-<a name="l01357"></a>01357         {
-<a name="l01358"></a>01358             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01359"></a>01359             {
-<a name="l01360"></a>01360                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )
-<a name="l01361"></a>01361                 {
-<a name="l01362"></a>01362                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )
-<a name="l01363"></a>01363                     {
-<a name="l01364"></a>01364                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )
-<a name="l01365"></a>01365                         {
-<a name="l01366"></a>01366                             max_intensity = par[i]->fit_par[0] ;
-<a name="l01367"></a>01367                             found = i ;
-<a name="l01368"></a>01368                         }
-<a name="l01369"></a>01369                     }
-<a name="l01370"></a>01370                 }
-<a name="l01371"></a>01371             }  
-<a name="l01372"></a>01372         }
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l01375"></a>01375 <span class="comment">         * check if the found line is usable and if the neighbouring line </span>
-<a name="l01376"></a>01376 <span class="comment">         * have intensity on near rows in neighbouring slitlets </span>
-<a name="l01377"></a>01377 <span class="comment">         */</span>
-<a name="l01378"></a>01378         line    = par[found]->line ;
-<a name="l01379"></a>01379         column  = par[found]->column ;
-<a name="l01380"></a>01380         row_pos = par[found]->fit_par[2] ;
-<a name="l01381"></a>01381         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )
-<a name="l01382"></a>01382         {
-<a name="l01383"></a>01383             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01384"></a>01384             {
-<a name="l01385"></a>01385                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && 
-<a name="l01386"></a>01386                      par[i]->column == column + slit_length )
-<a name="l01387"></a>01387                 {
-<a name="l01388"></a>01388                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&
-<a name="l01389"></a>01389                          par[i]->fit_par[2] >= (row_pos - y_box) )
-<a name="l01390"></a>01390                     {
-<a name="l01391"></a>01391                         bad_line = line ;
-<a name="l01392"></a>01392                     } 
-<a name="l01393"></a>01393                 }
-<a name="l01394"></a>01394             }
-<a name="l01395"></a>01395             <span class="keywordflow">if</span> ( bad_line != line )
-<a name="l01396"></a>01396             {
-<a name="l01397"></a>01397                 agreed = 1 ;
-<a name="l01398"></a>01398                 break ;
-<a name="l01399"></a>01399             }
-<a name="l01400"></a>01400         }
-<a name="l01401"></a>01401         <span class="keywordflow">else</span> 
-<a name="l01402"></a>01402         {
-<a name="l01403"></a>01403           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);
-<a name="l01404"></a>01404           <span class="keywordflow">return</span> -6 ;
-<a name="l01405"></a>01405         }    
-<a name="l01406"></a>01406     }
-<a name="l01407"></a>01407 
-<a name="l01408"></a>01408  
-<a name="l01409"></a>01409     <span class="keywordflow">if</span> ( agreed == -1 )
-<a name="l01410"></a>01410     {
-<a name="l01411"></a>01411         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;
-<a name="l01412"></a>01412         <span class="keywordflow">return</span> -6 ;
-<a name="l01413"></a>01413     }    
-<a name="l01414"></a>01414  
-<a name="l01415"></a>01415     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l01416"></a>01416     n  = 0 ;
-<a name="l01417"></a>01417     ed = 0 ;
-<a name="l01418"></a>01418   
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01421"></a>01421     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01422"></a>01422     {
-<a name="l01423"></a>01423         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01424"></a>01424         {
-<a name="l01425"></a>01425             <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line == line )
-<a name="l01426"></a>01426             {
-<a name="l01427"></a>01427                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )
-<a name="l01428"></a>01428                 {
-<a name="l01429"></a>01429                     position[n] = par[i]->fit_par[2] ;
-<a name="l01430"></a>01430                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )
-<a name="l01431"></a>01431                     {
-<a name="l01432"></a>01432                         sinfo_edge[ed] = col ; 
-<a name="l01433"></a>01433                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l01434"></a>01434                         ed++ ;
-<a name="l01435"></a>01435                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) 
-<a name="l01436"></a>01436                         {
-<a name="l01437"></a>01437                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l01438"></a>01438                         }
-<a name="l01439"></a>01439                     }
-<a name="l01440"></a>01440                     n++ ;
-<a name="l01441"></a>01441                 }
-<a name="l01442"></a>01442             }
-<a name="l01443"></a>01443         }
-<a name="l01444"></a>01444     }
-<a name="l01445"></a>01445     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )
-<a name="l01446"></a>01446     {
-<a name="l01447"></a>01447         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;
-<a name="l01448"></a>01448         <span class="keywordflow">return</span> -7 ;
-<a name="l01449"></a>01449     } 
-<a name="l01450"></a>01450 
-<a name="l01451"></a>01451     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l01452"></a>01452     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l01453"></a>01453     {
-<a name="l01454"></a>01454         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l01455"></a>01455         {
-<a name="l01456"></a>01456             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l01457"></a>01457         }
-<a name="l01458"></a>01458         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||
-<a name="l01459"></a>01459              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )
-<a name="l01460"></a>01460         {
-<a name="l01461"></a>01461             dummyedge[i]   = -1 ;
-<a name="l01462"></a>01462         }
-<a name="l01463"></a>01463         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||
-<a name="l01464"></a>01464              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )
-<a name="l01465"></a>01465         {
-<a name="l01466"></a>01466             dummyedge[i+1] = -1 ; 
-<a name="l01467"></a>01467         }
-<a name="l01468"></a>01468     }
-<a name="l01469"></a>01469     
-<a name="l01470"></a>01470     k = 0 ;
-<a name="l01471"></a>01471     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l01472"></a>01472     {
-<a name="l01473"></a>01473         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l01474"></a>01474         {
-<a name="l01475"></a>01475             edgeclean[k] = dummyedge[i] ;
-<a name="l01476"></a>01476             pos_rowclean[k] = pos_row[i] ;
-<a name="l01477"></a>01477             k++ ;
-<a name="l01478"></a>01478             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )
-<a name="l01479"></a>01479             {
-<a name="l01480"></a>01480                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l01481"></a>01481             }
-<a name="l01482"></a>01482         }
-<a name="l01483"></a>01483     }
-<a name="l01484"></a>01484 
-<a name="l01485"></a>01485     <span class="keywordflow">if</span> ( k != slit_length - 1 )
-<a name="l01486"></a>01486     {
-<a name="l01487"></a>01487         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough clean slitlets found"</span>) ;
-<a name="l01488"></a>01488         <span class="keywordflow">return</span> -7 ;
-<a name="l01489"></a>01489     } 
-<a name="l01490"></a>01490 
-<a name="l01491"></a>01491     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l01492"></a>01492     margin = ( box_length - slit_length ) / 2 ;
-<a name="l01493"></a>01493 
-<a name="l01494"></a>01494     <span class="comment">/* now go through the slitlets and store the intensity in a </span>
-<a name="l01495"></a>01495 <span class="comment">       buffer sinfo_vector */</span>
-<a name="l01496"></a>01496     <span class="keywordflow">for</span> ( j = 0 ; j < k ; j++ )
-<a name="l01497"></a>01497     {
-<a name="l01498"></a>01498         m = 0 ;
-<a name="l01499"></a>01499         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01500"></a>01500         {
-<a name="l01501"></a>01501             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l01502"></a>01502             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l01503"></a>01503             {
-<a name="l01504"></a>01504                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[0]] ;
-<a name="l01505"></a>01505                 m++ ;
-<a name="l01506"></a>01506             }
-<a name="l01507"></a>01507             fitpar[0] = 3. ;
-<a name="l01508"></a>01508             fitpar[1] = 5. ;
-<a name="l01509"></a>01509             fitpar[2] = (float) edgeclean[0] - 1. ;
-<a name="l01510"></a>01510             fitpar[3] = (float) edgeclean[0] + 1. ;
-<a name="l01511"></a>01511           
-<a name="l01512"></a>01512         }
-<a name="l01513"></a>01513         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k - 1 )
-<a name="l01514"></a>01514         {
-<a name="l01515"></a>01515             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l01516"></a>01516                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l01517"></a>01517             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l01518"></a>01518                   col < edgeclean[j] + margin ; col++ )
-<a name="l01519"></a>01519             {
-<a name="l01520"></a>01520                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;
-<a name="l01521"></a>01521                 m++ ;
-<a name="l01522"></a>01522             }
-<a name="l01523"></a>01523             fitpar[0] = (float) margin - 1. ;
-<a name="l01524"></a>01524             fitpar[1] = (float) margin + 1. ;
-<a name="l01525"></a>01525             fitpar[2] = (float) (edgeclean[j] - edgeclean[j-1] + margin) - 1. ;
-<a name="l01526"></a>01526             fitpar[3] = (float) (edgeclean[j] - edgeclean[j-1] + margin) + 1. ;
-<a name="l01527"></a>01527         }
-<a name="l01528"></a>01528         <span class="comment">/*else if ( j == k - 1 )*/</span>
-<a name="l01529"></a>01529         <span class="keywordflow">else</span>
-<a name="l01530"></a>01530         {
-<a name="l01531"></a>01531             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l01532"></a>01532             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l01533"></a>01533             {
-<a name="l01534"></a>01534                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;
-<a name="l01535"></a>01535                 m++ ;
-<a name="l01536"></a>01536             }
-<a name="l01537"></a>01537             fitpar[0] = (float) margin - 1. ;
-<a name="l01538"></a>01538             fitpar[1] = (float) margin + 1. ;
-<a name="l01539"></a>01539             fitpar[2] = (float) (ilx - edgeclean[k-1] + margin) - 3. ;
-<a name="l01540"></a>01540             fitpar[3] = (float) (ilx - edgeclean[k-1] + margin) - 1. ;
-<a name="l01541"></a>01541         }
-<a name="l01542"></a>01542 
-<a name="l01543"></a>01543         xdat = (<span class="keywordtype">float</span> *) cpl_calloc(box_buffer -> n_elements,<span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01544"></a>01544         wdat = (<span class="keywordtype">float</span> *) cpl_calloc(box_buffer -> n_elements,<span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01545"></a>01545         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc(NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01546"></a>01546 
-<a name="l01547"></a>01547         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01548"></a>01548         minval =  FLT_MAX ;
-<a name="l01549"></a>01549         maxval = -FLT_MAX ;
-<a name="l01550"></a>01550         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l01551"></a>01551         {
-<a name="l01552"></a>01552             xdat[i] = i ;
-<a name="l01553"></a>01553             wdat[i] = 1.0 ;
-<a name="l01554"></a>01554             <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )
-<a name="l01555"></a>01555             {
-<a name="l01556"></a>01556                 minval = box_buffer -> data[i] ;
-<a name="l01557"></a>01557             }
-<a name="l01558"></a>01558             <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )
-<a name="l01559"></a>01559             {
-<a name="l01560"></a>01560                 maxval = box_buffer -> data[i] ;
-<a name="l01561"></a>01561             }
-<a name="l01562"></a>01562         }
-<a name="l01563"></a>01563 
-<a name="l01564"></a>01564         fitpar[4] = minval ;
-<a name="l01565"></a>01565         fitpar[5] = minval ;
-<a name="l01566"></a>01566         fitpar[6] = maxval ; 
-<a name="l01567"></a>01567         fitpar[7] = maxval ;
-<a name="l01568"></a>01568 
-<a name="l01569"></a>01569         <span class="comment">/* search for both positions of the half intensity of the </span>
-<a name="l01570"></a>01570 <span class="comment">           hat within the buffer */</span>
-<a name="l01571"></a>01571         init1 = -1 ; 
-<a name="l01572"></a>01572         init2 = -1 ;
-<a name="l01573"></a>01573         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l01574"></a>01574         {
-<a name="l01575"></a>01575             <span class="keywordflow">if</span> ( box_buffer -> data[i] >= ( maxval - minval ) / 2. )
-<a name="l01576"></a>01576             {
-<a name="l01577"></a>01577                 init1 = i ;
-<a name="l01578"></a>01578                 break ;
-<a name="l01579"></a>01579             }
-<a name="l01580"></a>01580         }
-<a name="l01581"></a>01581 
-<a name="l01582"></a>01582         <span class="keywordflow">for</span> ( i = box_buffer->n_elements - 1 ; i >= 0  ; i-- )
-<a name="l01583"></a>01583         {
-<a name="l01584"></a>01584             <span class="keywordflow">if</span> ( box_buffer -> data[i] >= ( maxval + minval ) / 2. )
-<a name="l01585"></a>01585             {
-<a name="l01586"></a>01586                 init2 = i ;
-<a name="l01587"></a>01587                 break ;
-<a name="l01588"></a>01588             }
-<a name="l01589"></a>01589         }
-<a name="l01590"></a>01590   
-<a name="l01591"></a>01591         <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l01592"></a>01592       <span class="comment">/*  if ( init1 != -1 )</span>
-<a name="l01593"></a>01593 <span class="comment">        {</span>
-<a name="l01594"></a>01594 <span class="comment">            fitpar[0] = init1 - 1. ;</span>
-<a name="l01595"></a>01595 <span class="comment">            fitpar[1] = init1 + 1. ;</span>
-<a name="l01596"></a>01596 <span class="comment">        }</span>
-<a name="l01597"></a>01597 <span class="comment">        if ( init2 != -1 )</span>
-<a name="l01598"></a>01598 <span class="comment">        {</span>
-<a name="l01599"></a>01599 <span class="comment">            fitpar[2] = init2 - 1. ;</span>
-<a name="l01600"></a>01600 <span class="comment">            fitpar[3] = init2 + 1. ;</span>
-<a name="l01601"></a>01601 <span class="comment">        } */</span>
-<a name="l01602"></a>01602 
-<a name="l01603"></a>01603         <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l01604"></a>01604         {
-<a name="l01605"></a>01605             mpar[i] = 1 ;
-<a name="l01606"></a>01606             dervpar[i] = 0. ;
-<a name="l01607"></a>01607         }
-<a name="l01608"></a>01608      
-<a name="l01609"></a>01609         xdim     = XDIMA ;
-<a name="l01610"></a>01610         ndat     = box_buffer -> n_elements ;
-<a name="l01611"></a>01611         numpar   = NPAR ;
-<a name="l01612"></a>01612         tol      = TOLA ;
-<a name="l01613"></a>01613         lab      = LABA ;
-<a name="l01614"></a>01614         its      = ITSA ;
-<a name="l01615"></a>01615         
-<a name="l01616"></a>01616         <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l01617"></a>01617         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, 
-<a name="l01618"></a>01618                                                   box_buffer -> data, 
-<a name="l01619"></a>01619                                                   wdat, &ndat, fitpar,
-<a name="l01620"></a>01620                                                   dervpar, mpar, 
-<a name="l01621"></a>01621                                                   &numpar, &tol, 
-<a name="l01622"></a>01622                                                   &its, &lab )) )
-<a name="l01623"></a>01623         {
-<a name="l01624"></a>01624             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"least squares fit failed, error no.: %d"</span>, 
-<a name="l01625"></a>01625                   iters) ;
-<a name="l01626"></a>01626             <span class="keywordflow">return</span> -8 ;
-<a name="l01627"></a>01627         }
-<a name="l01628"></a>01628 
-<a name="l01629"></a>01629 
-<a name="l01630"></a>01630         <span class="comment">/* take care of the column position of the fit boxes to get </span>
-<a name="l01631"></a>01631 <span class="comment">           the absolute positions */</span>
-<a name="l01632"></a>01632         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01633"></a>01633         {
-<a name="l01634"></a>01634             sinfo_slit_pos[0][0] = (fitpar[0] + fitpar[1]) / 2. ;
-<a name="l01635"></a>01635             sinfo_slit_pos[0][1] = (fitpar[2] + fitpar[3]) / 2. ;
-<a name="l01636"></a>01636         }
-<a name="l01637"></a>01637         <span class="keywordflow">else</span>
-<a name="l01638"></a>01638         {
-<a name="l01639"></a>01639             sinfo_slit_pos[j][0] = (fitpar[0] + fitpar[1]) / 2. + 
-<a name="l01640"></a>01640                                    (<span class="keywordtype">float</span>)edgeclean[j-1] - (float)margin ;
-<a name="l01641"></a>01641             sinfo_slit_pos[j][1] = (fitpar[2] + fitpar[3]) / 2. + 
-<a name="l01642"></a>01642                                    (<span class="keywordtype">float</span>)edgeclean[j-1] - (float)margin ;
-<a name="l01643"></a>01643         }
-<a name="l01644"></a>01644      
-<a name="l01645"></a>01645         sinfo_slit_pos[k][0] = (fitpar[0] + fitpar[1]) / 2.  + 
-<a name="l01646"></a>01646                                (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin ;
-<a name="l01647"></a>01647         sinfo_slit_pos[k][1] = (fitpar[2] + fitpar[3]) / 2. + 
-<a name="l01648"></a>01648                                (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin ;
-<a name="l01649"></a>01649 
-<a name="l01650"></a>01650         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l01651"></a>01651         cpl_free( xdat ) ;
-<a name="l01652"></a>01652         cpl_free( wdat ) ;
-<a name="l01653"></a>01653         cpl_free( mpar ) ;
-<a name="l01654"></a>01654     }
-<a name="l01655"></a>01655         
-<a name="l01656"></a>01656     cpl_free( sinfo_edge ) ;
-<a name="l01657"></a>01657     cpl_free( pos_row ) ;
-<a name="l01658"></a>01658     cpl_free( edgeclean ) ;
-<a name="l01659"></a>01659     cpl_free( dummyedge ) ;
-<a name="l01660"></a>01660     cpl_free( pos_rowclean ) ;
-<a name="l01661"></a>01661     cpl_free( position );
-<a name="l01662"></a>01662 
-<a name="l01663"></a>01663     <span class="keywordflow">return</span> 0 ;
-<a name="l01664"></a>01664 }
-<a name="l01665"></a>01665                               
-<a name="l01697"></a>01697 <span class="keywordtype">int</span> 
-<a name="l01698"></a>01698 sinfo_new_fit_slits( cpl_image   * lineImage, 
-<a name="l01699"></a>01699               FitParams ** par,
-<a name="l01700"></a>01700               <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l01701"></a>01701               <span class="keywordtype">int</span>          box_length,
-<a name="l01702"></a>01702               <span class="keywordtype">float</span>        y_box,
-<a name="l01703"></a>01703               <span class="keywordtype">float</span>        slope_width )
-<a name="l01704"></a>01704 {
-<a name="l01705"></a>01705     <span class="keywordtype">float</span>* position=NULL ;
-<a name="l01706"></a>01706 
-<a name="l01707"></a>01707     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l01708"></a>01708     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l01709"></a>01709     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l01710"></a>01710     Vector * box_buffer ;
-<a name="l01711"></a>01711     <span class="keywordtype">float</span> max_intensity ;
-<a name="l01712"></a>01712     <span class="keywordtype">float</span> row_pos ;
-<a name="l01713"></a>01713     <span class="keywordtype">int</span>   col ;
-<a name="l01714"></a>01714     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;
-<a name="l01715"></a>01715     <span class="keywordtype">int</span>   found ;
-<a name="l01716"></a>01716     <span class="keywordtype">int</span>   line ; 
-<a name="l01717"></a>01717     <span class="keywordtype">int</span>   column ;
-<a name="l01718"></a>01718     <span class="keywordtype">int</span>   slit_length ;
-<a name="l01719"></a>01719     <span class="keywordtype">int</span>   agreed ;
-<a name="l01720"></a>01720     <span class="keywordtype">int</span>   bad_line ;
-<a name="l01721"></a>01721     <span class="keywordtype">int</span>   margin ;
-<a name="l01722"></a>01722     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l01723"></a>01723     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l01724"></a>01724     <span class="keywordtype">int</span>   * mpar ;
-<a name="l01725"></a>01725     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l01726"></a>01726     <span class="keywordtype">float</span> tol, lab ;
-<a name="l01727"></a>01727     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l01728"></a>01728     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l01729"></a>01729     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l01730"></a>01730     <span class="keywordtype">int</span> ilx=0;
-<a name="l01731"></a>01731     <span class="keywordtype">int</span> ily=0;
-<a name="l01732"></a>01732     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01733"></a>01733 
-<a name="l01734"></a>01734 
-<a name="l01735"></a>01735     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l01736"></a>01736     {
-<a name="l01737"></a>01737         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;
-<a name="l01738"></a>01738         <span class="keywordflow">return</span> -1 ;
-<a name="l01739"></a>01739     }
-<a name="l01740"></a>01740     ilx=cpl_image_get_size_x(lineImage);
-<a name="l01741"></a>01741     ily=cpl_image_get_size_y(lineImage);
-<a name="l01742"></a>01742     pidata=cpl_image_get_data_float(lineImage);
-<a name="l01743"></a>01743 
-<a name="l01744"></a>01744     slit_length = (int) sqrt (ilx) ;
-<a name="l01745"></a>01745     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l01746"></a>01746     {
-<a name="l01747"></a>01747         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span> ) ;
-<a name="l01748"></a>01748         <span class="keywordflow">return</span> -2 ;
-<a name="l01749"></a>01749     }
-<a name="l01750"></a>01750 
-<a name="l01751"></a>01751     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )
-<a name="l01752"></a>01752     {
-<a name="l01753"></a>01753         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span> ) ;
-<a name="l01754"></a>01754         <span class="keywordflow">return</span> -3 ;
-<a name="l01755"></a>01755     }
-<a name="l01756"></a>01756 
-<a name="l01757"></a>01757     <span class="keywordflow">if</span> ( box_length <  slit_length ||
-<a name="l01758"></a>01758          box_length >= 3*slit_length )
-<a name="l01759"></a>01759     {
-<a name="l01760"></a>01760         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;
-<a name="l01761"></a>01761         <span class="keywordflow">return</span> -4 ;
-<a name="l01762"></a>01762     }
-<a name="l01763"></a>01763 
-<a name="l01764"></a>01764     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )
-<a name="l01765"></a>01765     {
-<a name="l01766"></a>01766         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;
-<a name="l01767"></a>01767         <span class="keywordflow">return</span> -5 ;
-<a name="l01768"></a>01768     }
-<a name="l01769"></a>01769 
-<a name="l01770"></a>01770     <span class="keywordflow">if</span> ( slope_width <= 0. )
-<a name="l01771"></a>01771     {
-<a name="l01772"></a>01772         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong width of linear slope given!"</span>) ;
-<a name="l01773"></a>01773         <span class="keywordflow">return</span> -6 ;
-<a name="l01774"></a>01774     }
-<a name="l01775"></a>01775 
-<a name="l01776"></a>01776     <span class="comment">/* initialize module global variable slopewidth */</span>
-<a name="l01777"></a>01777     slopewidth = slope_width ;
-<a name="l01778"></a>01778 
-<a name="l01779"></a>01779     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span>
-<a name="l01780"></a>01780     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01781"></a>01781     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01782"></a>01782     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01783"></a>01783     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01784"></a>01784     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01785"></a>01785 
-<a name="l01786"></a>01786     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l01787"></a>01787 <span class="comment">     * go through the first image columns and the fit parameters and find </span>
-<a name="l01788"></a>01788 <span class="comment">     * the line with the highest intensity </span>
-<a name="l01789"></a>01789 <span class="comment">     */</span>
-<a name="l01790"></a>01790     agreed = -1 ;
-<a name="l01791"></a>01791     bad_line = -1 ;
-<a name="l01792"></a>01792     <span class="keywordflow">while</span>( agreed == -1 )
-<a name="l01793"></a>01793     {
-<a name="l01794"></a>01794         found = -1 ;
-<a name="l01795"></a>01795         max_intensity = -FLT_MAX ;
-<a name="l01796"></a>01796         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )
-<a name="l01797"></a>01797         {
-<a name="l01798"></a>01798             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01799"></a>01799             {
-<a name="l01800"></a>01800                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )
-<a name="l01801"></a>01801                 {
-<a name="l01802"></a>01802                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )
-<a name="l01803"></a>01803                     {
-<a name="l01804"></a>01804                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )
-<a name="l01805"></a>01805                         {
-<a name="l01806"></a>01806                             max_intensity = par[i]->fit_par[0] ;
-<a name="l01807"></a>01807                             found = i ;
-<a name="l01808"></a>01808                         }
-<a name="l01809"></a>01809                     }
-<a name="l01810"></a>01810                 }
-<a name="l01811"></a>01811             }  
-<a name="l01812"></a>01812         }
-<a name="l01813"></a>01813 
-<a name="l01814"></a>01814         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l01815"></a>01815 <span class="comment">         * check if the found line is usable and if the neighbouring line </span>
-<a name="l01816"></a>01816 <span class="comment">         * have intensity on near rows in neighbouring slitlets </span>
-<a name="l01817"></a>01817 <span class="comment">         */</span>
-<a name="l01818"></a>01818         line    = par[found]->line ;
-<a name="l01819"></a>01819         column  = par[found]->column ;
-<a name="l01820"></a>01820         row_pos = par[found]->fit_par[2] ;
-<a name="l01821"></a>01821         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )
-<a name="l01822"></a>01822         {
-<a name="l01823"></a>01823             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01824"></a>01824             {
-<a name="l01825"></a>01825                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && 
-<a name="l01826"></a>01826                      par[i]->column == column + slit_length )
-<a name="l01827"></a>01827                 {
-<a name="l01828"></a>01828                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&
-<a name="l01829"></a>01829                          par[i]->fit_par[2] >= (row_pos - y_box) )
-<a name="l01830"></a>01830                     {
-<a name="l01831"></a>01831                         bad_line = line ;
-<a name="l01832"></a>01832                     } 
-<a name="l01833"></a>01833                 }
-<a name="l01834"></a>01834             }
-<a name="l01835"></a>01835             <span class="keywordflow">if</span> ( bad_line != line )
-<a name="l01836"></a>01836             {
-<a name="l01837"></a>01837                 agreed = 1 ;
-<a name="l01838"></a>01838                 break ;
-<a name="l01839"></a>01839             }
-<a name="l01840"></a>01840         }
-<a name="l01841"></a>01841         <span class="keywordflow">else</span> 
-<a name="l01842"></a>01842         {
-<a name="l01843"></a>01843           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);
-<a name="l01844"></a>01844           <span class="keywordflow">return</span> -7 ;
-<a name="l01845"></a>01845         }    
-<a name="l01846"></a>01846     }
-<a name="l01847"></a>01847 
-<a name="l01848"></a>01848  
-<a name="l01849"></a>01849     <span class="keywordflow">if</span> ( agreed == -1 )
-<a name="l01850"></a>01850     {
-<a name="l01851"></a>01851         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;
-<a name="l01852"></a>01852         <span class="keywordflow">return</span> -7 ;
-<a name="l01853"></a>01853     }    
-<a name="l01854"></a>01854  
-<a name="l01855"></a>01855     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l01856"></a>01856     n  = 0 ;
-<a name="l01857"></a>01857     ed = 0 ;
-<a name="l01858"></a>01858     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01859"></a>01859 
-<a name="l01860"></a>01860     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01861"></a>01861     {
-<a name="l01862"></a>01862         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01863"></a>01863         {
-<a name="l01864"></a>01864             <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line == line )
-<a name="l01865"></a>01865             {
-<a name="l01866"></a>01866                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )
-<a name="l01867"></a>01867                 {
-<a name="l01868"></a>01868                     position[n] = par[i]->fit_par[2] ;
-<a name="l01869"></a>01869                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )
-<a name="l01870"></a>01870                     {
-<a name="l01871"></a>01871                         sinfo_edge[ed] = col ; 
-<a name="l01872"></a>01872                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l01873"></a>01873                         ed++ ;
-<a name="l01874"></a>01874                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) 
-<a name="l01875"></a>01875                         {
-<a name="l01876"></a>01876                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l01877"></a>01877                         }
-<a name="l01878"></a>01878                     }
-<a name="l01879"></a>01879                     n++ ;
-<a name="l01880"></a>01880                 }
-<a name="l01881"></a>01881             }
-<a name="l01882"></a>01882         }
-<a name="l01883"></a>01883     }
-<a name="l01884"></a>01884     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )
-<a name="l01885"></a>01885     {
-<a name="l01886"></a>01886         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;
-<a name="l01887"></a>01887         <span class="keywordflow">return</span> -8 ;
-<a name="l01888"></a>01888     } 
-<a name="l01889"></a>01889 
-<a name="l01890"></a>01890     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l01891"></a>01891     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l01892"></a>01892     {
-<a name="l01893"></a>01893         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l01894"></a>01894         {
-<a name="l01895"></a>01895             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l01896"></a>01896         }
-<a name="l01897"></a>01897         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||
-<a name="l01898"></a>01898              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )
-<a name="l01899"></a>01899         {
-<a name="l01900"></a>01900             dummyedge[i]   = -1 ;
-<a name="l01901"></a>01901         }
-<a name="l01902"></a>01902         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||
-<a name="l01903"></a>01903              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )
-<a name="l01904"></a>01904         {
-<a name="l01905"></a>01905             dummyedge[i+1] = -1 ; 
-<a name="l01906"></a>01906         }
-<a name="l01907"></a>01907     }
-<a name="l01908"></a>01908     
-<a name="l01909"></a>01909     k = 0 ;
-<a name="l01910"></a>01910     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l01911"></a>01911     {
-<a name="l01912"></a>01912         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l01913"></a>01913         {
-<a name="l01914"></a>01914             edgeclean[k] = dummyedge[i] ;
-<a name="l01915"></a>01915             pos_rowclean[k] = pos_row[i] ;
-<a name="l01916"></a>01916             k++ ;
-<a name="l01917"></a>01917             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )
-<a name="l01918"></a>01918             {
-<a name="l01919"></a>01919                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l01920"></a>01920             }
-<a name="l01921"></a>01921         }
-<a name="l01922"></a>01922     }
-<a name="l01923"></a>01923 
-<a name="l01924"></a>01924     <span class="keywordflow">if</span> ( k != slit_length - 1 )
-<a name="l01925"></a>01925     {
-<a name="l01926"></a>01926         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"not enough clean slitlets found"</span>) ;
-<a name="l01927"></a>01927         <span class="keywordflow">return</span> -7 ;
-<a name="l01928"></a>01928     } 
-<a name="l01929"></a>01929 
-<a name="l01930"></a>01930     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l01931"></a>01931     margin = ( box_length - slit_length ) / 2 ;
-<a name="l01932"></a>01932 
-<a name="l01933"></a>01933     <span class="comment">/* now go through the slitlets and store the intensity in a buffer </span>
-<a name="l01934"></a>01934 <span class="comment">       sinfo_vector */</span>
-<a name="l01935"></a>01935     <span class="keywordflow">for</span> ( j = 0 ; j < k ; j++ )
-<a name="l01936"></a>01936     {
-<a name="l01937"></a>01937         m = 0 ;
-<a name="l01938"></a>01938         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01939"></a>01939         {
-<a name="l01940"></a>01940             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l01941"></a>01941             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l01942"></a>01942             {
-<a name="l01943"></a>01943                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[0]] ;
-<a name="l01944"></a>01944                 m++ ;
-<a name="l01945"></a>01945             }
-<a name="l01946"></a>01946             <span class="comment">/* initial values for the fitted positions */</span>
-<a name="l01947"></a>01947             fitpar[0] = 1. ;
-<a name="l01948"></a>01948             fitpar[1] = (float)edgeclean[0] ;
-<a name="l01949"></a>01949           
-<a name="l01950"></a>01950         }
-<a name="l01951"></a>01951         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k - 1 )
-<a name="l01952"></a>01952         {
-<a name="l01953"></a>01953             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l01954"></a>01954                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l01955"></a>01955             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l01956"></a>01956                   col < edgeclean[j] + margin ; col++ )
-<a name="l01957"></a>01957             {
-<a name="l01958"></a>01958                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;
-<a name="l01959"></a>01959                 m++ ;
-<a name="l01960"></a>01960             }
-<a name="l01961"></a>01961             <span class="comment">/* initial values for the fitted positions */</span>
-<a name="l01962"></a>01962             fitpar[0] = (float)margin ;
-<a name="l01963"></a>01963             fitpar[1] = (float)(edgeclean[j] - edgeclean[j-1] + margin ) ;
-<a name="l01964"></a>01964         }
-<a name="l01965"></a>01965         <span class="comment">/*else if ( j == k - 1 )*/</span>
-<a name="l01966"></a>01966         <span class="keywordflow">else</span>
-<a name="l01967"></a>01967         {
-<a name="l01968"></a>01968             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l01969"></a>01969             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l01970"></a>01970             {
-<a name="l01971"></a>01971                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;
-<a name="l01972"></a>01972                 m++ ;
-<a name="l01973"></a>01973             }
-<a name="l01974"></a>01974             <span class="comment">/* initial values for the fitted positions */</span>
-<a name="l01975"></a>01975             fitpar[0] = (float)margin ;
-<a name="l01976"></a>01976             fitpar[1] = (float)(m - 1) ;
-<a name="l01977"></a>01977         }
-<a name="l01978"></a>01978 
-<a name="l01979"></a>01979         xdat=(<span class="keywordtype">float</span> *) cpl_calloc( box_buffer -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01980"></a>01980         wdat=(<span class="keywordtype">float</span> *) cpl_calloc( box_buffer -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01981"></a>01981         mpar=(<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01982"></a>01982 
-<a name="l01983"></a>01983         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01984"></a>01984         minval =  FLT_MAX ;
-<a name="l01985"></a>01985         maxval = -FLT_MAX ;
-<a name="l01986"></a>01986         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l01987"></a>01987         {
-<a name="l01988"></a>01988             xdat[i] = i ;
-<a name="l01989"></a>01989             wdat[i] = 1.0 ;
-<a name="l01990"></a>01990             <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )
-<a name="l01991"></a>01991             {
-<a name="l01992"></a>01992                 minval = box_buffer -> data[i] ;
-<a name="l01993"></a>01993             }
-<a name="l01994"></a>01994             <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )
-<a name="l01995"></a>01995             {
-<a name="l01996"></a>01996                 maxval = box_buffer -> data[i] ;
-<a name="l01997"></a>01997             }
-<a name="l01998"></a>01998         }
-<a name="l01999"></a>01999 
-<a name="l02000"></a>02000         <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l02001"></a>02001         {
-<a name="l02002"></a>02002             mpar[i] = 1 ;
-<a name="l02003"></a>02003             dervpar[i] = 0. ;
-<a name="l02004"></a>02004         }
-<a name="l02005"></a>02005      
-<a name="l02006"></a>02006         xdim     = XDIMA ;
-<a name="l02007"></a>02007         ndat     = box_buffer -> n_elements ;
-<a name="l02008"></a>02008         numpar   = NPAR ;
-<a name="l02009"></a>02009         tol      = TOLA ;
-<a name="l02010"></a>02010         lab      = LABA ;
-<a name="l02011"></a>02011         its      = ITSA ;
-<a name="l02012"></a>02012         
-<a name="l02013"></a>02013         fitpar[2] = minval ;
-<a name="l02014"></a>02014         fitpar[3] = minval ;
-<a name="l02015"></a>02015         fitpar[4] = maxval ;
-<a name="l02016"></a>02016 
-<a name="l02017"></a>02017         <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l02018"></a>02018         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, 
-<a name="l02019"></a>02019                                                   box_buffer -> data, 
-<a name="l02020"></a>02020                                                   wdat, &ndat, fitpar,
-<a name="l02021"></a>02021                                                   dervpar, mpar, &numpar, 
-<a name="l02022"></a>02022                                                   &tol, &its, &lab )) )
-<a name="l02023"></a>02023         {
-<a name="l02024"></a>02024             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"least squares fit failed, error no.: %d"</span>, 
-<a name="l02025"></a>02025                   iters) ;
-<a name="l02026"></a>02026             <span class="keywordflow">return</span> -9 ;
-<a name="l02027"></a>02027         }
-<a name="l02028"></a>02028 
-<a name="l02029"></a>02029 
-<a name="l02030"></a>02030         <span class="comment">/* take care of the column position of the fit boxes </span>
-<a name="l02031"></a>02031 <span class="comment">           to get the absolute positions */</span>
-<a name="l02032"></a>02032         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02033"></a>02033         {
-<a name="l02034"></a>02034             sinfo_slit_pos[0][0] = fitpar[0] + slopewidth/2. ;
-<a name="l02035"></a>02035             sinfo_slit_pos[0][1] = fitpar[1] - slopewidth/2. ;
-<a name="l02036"></a>02036         }
-<a name="l02037"></a>02037         <span class="keywordflow">else</span>
-<a name="l02038"></a>02038         {
-<a name="l02039"></a>02039             sinfo_slit_pos[j][0] = fitpar[0] + slopewidth/2. + 
-<a name="l02040"></a>02040                                    (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02041"></a>02041             sinfo_slit_pos[j][1] = fitpar[1] - slopewidth/2. + 
-<a name="l02042"></a>02042                                    (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02043"></a>02043         }
-<a name="l02044"></a>02044 
-<a name="l02045"></a>02045         sinfo_slit_pos[k][0] = fitpar[0] + slopewidth/2. + 
-<a name="l02046"></a>02046                                (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02047"></a>02047         sinfo_slit_pos[k][1] = fitpar[1] - slopewidth/2. + 
-<a name="l02048"></a>02048                                (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02049"></a>02049      
-<a name="l02050"></a>02050         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l02051"></a>02051         cpl_free( xdat ) ;
-<a name="l02052"></a>02052         cpl_free( wdat ) ;
-<a name="l02053"></a>02053         cpl_free( mpar ) ;
-<a name="l02054"></a>02054     }
-<a name="l02055"></a>02055         
-<a name="l02056"></a>02056 
-<a name="l02057"></a>02057     cpl_free( sinfo_edge ) ;
-<a name="l02058"></a>02058     cpl_free( pos_row ) ;
-<a name="l02059"></a>02059     cpl_free( edgeclean ) ;
-<a name="l02060"></a>02060     cpl_free( dummyedge ) ;
-<a name="l02061"></a>02061     cpl_free( pos_rowclean ) ;
-<a name="l02062"></a>02062     cpl_free( position );
-<a name="l02063"></a>02063     <span class="keywordflow">return</span> 0 ;
-<a name="l02064"></a>02064 }
-<a name="l02065"></a>02065                               
-<a name="l02110"></a>02110 <span class="keywordtype">int</span> 
-<a name="l02111"></a>02111 sinfo_new_fit_slits2( cpl_image   * lineImage, 
-<a name="l02112"></a>02112                FitParams ** par,
-<a name="l02113"></a>02113                <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l02114"></a>02114                <span class="keywordtype">int</span>          box_length,
-<a name="l02115"></a>02115                <span class="keywordtype">float</span>        y_box,
-<a name="l02116"></a>02116                <span class="keywordtype">float</span>        diff_tol )
-<a name="l02117"></a>02117 {
-<a name="l02118"></a>02118     <span class="keywordtype">float</span>* position=NULL ;
-<a name="l02119"></a>02119     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l02120"></a>02120     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l02121"></a>02121     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l02122"></a>02122     Vector * box_buffer ;
-<a name="l02123"></a>02123     Vector * half_buffer ;
-<a name="l02124"></a>02124     <span class="keywordtype">float</span> max_intensity ;
-<a name="l02125"></a>02125     <span class="keywordtype">float</span> row_pos ;
-<a name="l02126"></a>02126     <span class="keywordtype">int</span>   col ;
-<a name="l02127"></a>02127     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;
-<a name="l02128"></a>02128     <span class="keywordtype">int</span>   found, init1 ;
-<a name="l02129"></a>02129     <span class="keywordtype">int</span>   line ; 
-<a name="l02130"></a>02130     <span class="keywordtype">int</span>   nel, n_right, left_right ;
-<a name="l02131"></a>02131     <span class="keywordtype">int</span>   column ;
-<a name="l02132"></a>02132     <span class="keywordtype">int</span>   slit_length ;
-<a name="l02133"></a>02133     <span class="keywordtype">int</span>   agreed ;
-<a name="l02134"></a>02134     <span class="keywordtype">int</span>   bad_line ;
-<a name="l02135"></a>02135     <span class="keywordtype">int</span>   margin ;
-<a name="l02136"></a>02136     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l02137"></a>02137     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l02138"></a>02138     <span class="keywordtype">int</span>   * mpar ;
-<a name="l02139"></a>02139     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l02140"></a>02140     <span class="keywordtype">float</span> tol, lab ;
-<a name="l02141"></a>02141     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l02142"></a>02142     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l02143"></a>02143     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l02144"></a>02144     <span class="keywordtype">float</span> pos, last_pos ;
-<a name="l02145"></a>02145     <span class="keywordtype">int</span> ilx=0;
-<a name="l02146"></a>02146     <span class="keywordtype">int</span> ily=0;
-<a name="l02147"></a>02147     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02148"></a>02148 
-<a name="l02149"></a>02149 
-<a name="l02150"></a>02150     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l02151"></a>02151     {
-<a name="l02152"></a>02152         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;
-<a name="l02153"></a>02153         <span class="keywordflow">return</span> -1 ;
-<a name="l02154"></a>02154     }
-<a name="l02155"></a>02155     ilx=cpl_image_get_size_x(lineImage);
-<a name="l02156"></a>02156     ily=cpl_image_get_size_y(lineImage);
-<a name="l02157"></a>02157     pidata=cpl_image_get_data_float(lineImage);
-<a name="l02158"></a>02158 
-<a name="l02159"></a>02159     slit_length = (int) sqrt (ilx) ;
-<a name="l02160"></a>02160 
-<a name="l02161"></a>02161     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l02162"></a>02162     {
-<a name="l02163"></a>02163         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span> ) ;
-<a name="l02164"></a>02164         <span class="keywordflow">return</span> -2 ;
-<a name="l02165"></a>02165     }
-<a name="l02166"></a>02166 
-<a name="l02167"></a>02167     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )
-<a name="l02168"></a>02168     {
-<a name="l02169"></a>02169         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span> ) ;
-<a name="l02170"></a>02170         <span class="keywordflow">return</span> -3 ;
-<a name="l02171"></a>02171     }
-<a name="l02172"></a>02172 
-<a name="l02173"></a>02173     <span class="keywordflow">if</span> ( box_length <  slit_length ||
-<a name="l02174"></a>02174          box_length >= 3*slit_length )
-<a name="l02175"></a>02175     {
-<a name="l02176"></a>02176         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;
-<a name="l02177"></a>02177         <span class="keywordflow">return</span> -4 ;
-<a name="l02178"></a>02178     }
-<a name="l02179"></a>02179 
-<a name="l02180"></a>02180     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )
-<a name="l02181"></a>02181     {
-<a name="l02182"></a>02182         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;
-<a name="l02183"></a>02183         <span class="keywordflow">return</span> -5 ;
-<a name="l02184"></a>02184     }
-<a name="l02185"></a>02185 
-<a name="l02186"></a>02186     <span class="keywordflow">if</span> ( diff_tol < 1. )
-<a name="l02187"></a>02187     {
-<a name="l02188"></a>02188         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"diff_tol too small!"</span> ) ;
-<a name="l02189"></a>02189         <span class="keywordflow">return</span> -6 ;
-<a name="l02190"></a>02190     }
-<a name="l02191"></a>02191 
-<a name="l02192"></a>02192     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span>
-<a name="l02193"></a>02193     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02194"></a>02194     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02195"></a>02195     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02196"></a>02196     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02197"></a>02197     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02198"></a>02198 
-<a name="l02199"></a>02199     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l02200"></a>02200 <span class="comment">     * go through the first image columns and the fit parameters and find </span>
-<a name="l02201"></a>02201 <span class="comment">     * the line with the highest intensity </span>
-<a name="l02202"></a>02202 <span class="comment">     */</span>
-<a name="l02203"></a>02203     agreed = -1 ;
-<a name="l02204"></a>02204     bad_line = -1 ;
-<a name="l02205"></a>02205     <span class="keywordflow">while</span>( agreed == -1 )
-<a name="l02206"></a>02206     {
-<a name="l02207"></a>02207         found = -1 ;
-<a name="l02208"></a>02208         max_intensity = -FLT_MAX ;
-<a name="l02209"></a>02209         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )
-<a name="l02210"></a>02210         {
-<a name="l02211"></a>02211             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02212"></a>02212             {
-<a name="l02213"></a>02213                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )
-<a name="l02214"></a>02214                 {
-<a name="l02215"></a>02215                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )
-<a name="l02216"></a>02216                     {
-<a name="l02217"></a>02217                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )
-<a name="l02218"></a>02218                         {
-<a name="l02219"></a>02219                             max_intensity = par[i]->fit_par[0] ;
-<a name="l02220"></a>02220                             found = i ;
-<a name="l02221"></a>02221                         }
-<a name="l02222"></a>02222                     }
-<a name="l02223"></a>02223                 }
-<a name="l02224"></a>02224             }  
-<a name="l02225"></a>02225         }
-<a name="l02226"></a>02226 
-<a name="l02227"></a>02227         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l02228"></a>02228 <span class="comment">         * check if the found line is usable and if the neighbouring line </span>
-<a name="l02229"></a>02229 <span class="comment">         * have intensity on near rows in neighbouring slitlets </span>
-<a name="l02230"></a>02230 <span class="comment">         */</span>
-<a name="l02231"></a>02231         line    = par[found]->line ;
-<a name="l02232"></a>02232         column  = par[found]->column ;
-<a name="l02233"></a>02233         row_pos = par[found]->fit_par[2] ;
-<a name="l02234"></a>02234         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )
-<a name="l02235"></a>02235         {
-<a name="l02236"></a>02236             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02237"></a>02237             {
-<a name="l02238"></a>02238                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && 
-<a name="l02239"></a>02239                      par[i]->column == column + slit_length )
-<a name="l02240"></a>02240                 {
-<a name="l02241"></a>02241                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&
-<a name="l02242"></a>02242                          par[i]->fit_par[2] >= (row_pos - y_box) )
-<a name="l02243"></a>02243                     {
-<a name="l02244"></a>02244                         bad_line = line ;
-<a name="l02245"></a>02245                     } 
-<a name="l02246"></a>02246                 }
-<a name="l02247"></a>02247             }
-<a name="l02248"></a>02248             <span class="keywordflow">if</span> ( bad_line != line )
-<a name="l02249"></a>02249             {
-<a name="l02250"></a>02250                 agreed = 1 ;
-<a name="l02251"></a>02251                 break ;
-<a name="l02252"></a>02252             }
-<a name="l02253"></a>02253         }
-<a name="l02254"></a>02254         <span class="keywordflow">else</span> 
-<a name="l02255"></a>02255         {
-<a name="l02256"></a>02256           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);
-<a name="l02257"></a>02257           <span class="keywordflow">return</span> -7 ;
-<a name="l02258"></a>02258         }    
-<a name="l02259"></a>02259     }
-<a name="l02260"></a>02260 
-<a name="l02261"></a>02261  
-<a name="l02262"></a>02262     <span class="keywordflow">if</span> ( agreed == -1 )
-<a name="l02263"></a>02263     {
-<a name="l02264"></a>02264         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;
-<a name="l02265"></a>02265         <span class="keywordflow">return</span> -7 ;
-<a name="l02266"></a>02266     }    
-<a name="l02267"></a>02267  
-<a name="l02268"></a>02268     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l02269"></a>02269     n  = 0 ;
-<a name="l02270"></a>02270     ed = 0 ;
-<a name="l02271"></a>02271     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02272"></a>02272 
-<a name="l02273"></a>02273     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02274"></a>02274     {
-<a name="l02275"></a>02275         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02276"></a>02276         {
-<a name="l02277"></a>02277             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )
-<a name="l02278"></a>02278             {
-<a name="l02279"></a>02279                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )
-<a name="l02280"></a>02280                 {
-<a name="l02281"></a>02281                     position[n] = par[i]->fit_par[2] ;
-<a name="l02282"></a>02282                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )
-<a name="l02283"></a>02283                     {
-<a name="l02284"></a>02284                         sinfo_edge[ed] = col ; 
-<a name="l02285"></a>02285                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l02286"></a>02286                         ed++ ;
-<a name="l02287"></a>02287                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) 
-<a name="l02288"></a>02288                         {
-<a name="l02289"></a>02289                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l02290"></a>02290                         }
-<a name="l02291"></a>02291                     }
-<a name="l02292"></a>02292                     n++ ;
-<a name="l02293"></a>02293                 }
-<a name="l02294"></a>02294             }
-<a name="l02295"></a>02295         }
-<a name="l02296"></a>02296     }
-<a name="l02297"></a>02297     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )
-<a name="l02298"></a>02298     {
-<a name="l02299"></a>02299         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;
-<a name="l02300"></a>02300         <span class="keywordflow">return</span> -8 ;
-<a name="l02301"></a>02301     } 
-<a name="l02302"></a>02302 
-<a name="l02303"></a>02303     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l02304"></a>02304     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l02305"></a>02305     {
-<a name="l02306"></a>02306         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l02307"></a>02307         {
-<a name="l02308"></a>02308             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l02309"></a>02309         }
-<a name="l02310"></a>02310         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||
-<a name="l02311"></a>02311              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )
-<a name="l02312"></a>02312         {
-<a name="l02313"></a>02313             dummyedge[i]   = -1 ;
-<a name="l02314"></a>02314         }
-<a name="l02315"></a>02315         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||
-<a name="l02316"></a>02316              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )
-<a name="l02317"></a>02317         {
-<a name="l02318"></a>02318             dummyedge[i+1] = -1 ; 
-<a name="l02319"></a>02319         }
-<a name="l02320"></a>02320     }
-<a name="l02321"></a>02321     
-<a name="l02322"></a>02322     k = 0 ;
-<a name="l02323"></a>02323     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l02324"></a>02324     {
-<a name="l02325"></a>02325         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l02326"></a>02326         {
-<a name="l02327"></a>02327             edgeclean[k] = dummyedge[i] ;
-<a name="l02328"></a>02328             pos_rowclean[k] = pos_row[i] ;
-<a name="l02329"></a>02329             k++ ;
-<a name="l02330"></a>02330             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )
-<a name="l02331"></a>02331             {
-<a name="l02332"></a>02332                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l02333"></a>02333             }
-<a name="l02334"></a>02334         }
-<a name="l02335"></a>02335     }
-<a name="l02336"></a>02336 
-<a name="l02337"></a>02337     <span class="keywordflow">if</span> ( k != slit_length - 1 )
-<a name="l02338"></a>02338     {
-<a name="l02339"></a>02339         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough clean slitlets found"</span>) ;
-<a name="l02340"></a>02340         <span class="keywordflow">return</span> -7 ;
-<a name="l02341"></a>02341     } 
-<a name="l02342"></a>02342 
-<a name="l02343"></a>02343     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l02344"></a>02344     margin = ( box_length - slit_length ) / 2 ;
-<a name="l02345"></a>02345 
-<a name="l02346"></a>02346     <span class="comment">/* now go through the slitlets and store the intensity in a </span>
-<a name="l02347"></a>02347 <span class="comment">       buffer sinfo_vector */</span>
-<a name="l02348"></a>02348     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )
-<a name="l02349"></a>02349     {
-<a name="l02350"></a>02350         m = 0 ;
-<a name="l02351"></a>02351         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02352"></a>02352         {
-<a name="l02353"></a>02353             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l02354"></a>02354             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l02355"></a>02355             {
-<a name="l02356"></a>02356                 box_buffer->data[m] = pidata[col +ilx*pos_rowclean[0]] ;
-<a name="l02357"></a>02357                 m++ ;
-<a name="l02358"></a>02358             }
-<a name="l02359"></a>02359         }
-<a name="l02360"></a>02360         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02361"></a>02361         {
-<a name="l02362"></a>02362             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l02363"></a>02363                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l02364"></a>02364             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l02365"></a>02365                   col < edgeclean[j] + margin ; col++ )
-<a name="l02366"></a>02366             {
-<a name="l02367"></a>02367                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;
-<a name="l02368"></a>02368                 m++ ;
-<a name="l02369"></a>02369             }
-<a name="l02370"></a>02370         }
-<a name="l02371"></a>02371         <span class="keywordflow">else</span> 
-<a name="l02372"></a>02372         {
-<a name="l02373"></a>02373             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l02374"></a>02374             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l02375"></a>02375             {
-<a name="l02376"></a>02376                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;
-<a name="l02377"></a>02377                 m++ ;
-<a name="l02378"></a>02378             }
-<a name="l02379"></a>02379         }
-<a name="l02380"></a>02380 
-<a name="l02381"></a>02381         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l02382"></a>02382         { 
-<a name="l02383"></a>02383             nel = 0 ;
-<a name="l02384"></a>02384             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02385"></a>02385             {
-<a name="l02386"></a>02386                 nel = box_buffer -> n_elements / 2 ;
-<a name="l02387"></a>02387             }
-<a name="l02388"></a>02388             <span class="keywordflow">else</span>
-<a name="l02389"></a>02389             {
-<a name="l02390"></a>02390                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )
-<a name="l02391"></a>02391                 {
-<a name="l02392"></a>02392                     nel = box_buffer -> n_elements / 2 ;
-<a name="l02393"></a>02393                 }
-<a name="l02394"></a>02394                 <span class="keywordflow">else</span>
-<a name="l02395"></a>02395                 {
-<a name="l02396"></a>02396                     nel = box_buffer -> n_elements / 2 + 1 ;
-<a name="l02397"></a>02397                 }
-<a name="l02398"></a>02398             }
-<a name="l02399"></a>02399 
-<a name="l02400"></a>02400             <span class="comment">/* now split the buffer in the midth in a left and right </span>
-<a name="l02401"></a>02401 <span class="comment">               part for fitting */</span>
-<a name="l02402"></a>02402             half_buffer = sinfo_new_vector( nel ) ;
-<a name="l02403"></a>02403             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02404"></a>02404             {
-<a name="l02405"></a>02405                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l02406"></a>02406                 {
-<a name="l02407"></a>02407                     half_buffer -> data[i] = box_buffer -> data[i] ;
-<a name="l02408"></a>02408                 }
-<a name="l02409"></a>02409             }
-<a name="l02410"></a>02410             <span class="keywordflow">else</span>
-<a name="l02411"></a>02411             {
-<a name="l02412"></a>02412                 n_right = 0 ;
-<a name="l02413"></a>02413                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; 
-<a name="l02414"></a>02414                       i >= box_buffer -> n_elements - nel ; i-- )
-<a name="l02415"></a>02415                 {
-<a name="l02416"></a>02416                     half_buffer -> data[n_right] = box_buffer -> data[i] ;
-<a name="l02417"></a>02417                     n_right++ ;
-<a name="l02418"></a>02418                 }
-<a name="l02419"></a>02419             }
-<a name="l02420"></a>02420 
-<a name="l02421"></a>02421             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02422"></a>02422             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02423"></a>02423             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l02424"></a>02424 
-<a name="l02425"></a>02425             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l02426"></a>02426             minval =  FLT_MAX ;
-<a name="l02427"></a>02427             maxval = -FLT_MAX ;
-<a name="l02428"></a>02428             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l02429"></a>02429             {
-<a name="l02430"></a>02430                 xdat[i] = i ;
-<a name="l02431"></a>02431                 wdat[i] = 1.0 ;
-<a name="l02432"></a>02432                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )
-<a name="l02433"></a>02433                 {
-<a name="l02434"></a>02434                     minval = half_buffer -> data[i] ;
-<a name="l02435"></a>02435                 }
-<a name="l02436"></a>02436                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )
-<a name="l02437"></a>02437                 {
-<a name="l02438"></a>02438                     maxval = half_buffer -> data[i] ;
-<a name="l02439"></a>02439                 }
-<a name="l02440"></a>02440             }
-<a name="l02441"></a>02441 
-<a name="l02442"></a>02442             fitpar[2] = minval ;
-<a name="l02443"></a>02443             fitpar[3] = maxval ; 
-<a name="l02444"></a>02444 
-<a name="l02445"></a>02445             <span class="comment">/* search for both positions of the half intensity of </span>
-<a name="l02446"></a>02446 <span class="comment">               the hat within the buffer */</span>
-<a name="l02447"></a>02447             init1 = -1 ; 
-<a name="l02448"></a>02448             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l02449"></a>02449             {
-<a name="l02450"></a>02450                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )
-<a name="l02451"></a>02451                 {
-<a name="l02452"></a>02452                     init1 = i ;
-<a name="l02453"></a>02453                     break ;
-<a name="l02454"></a>02454                 }
-<a name="l02455"></a>02455             }
-<a name="l02456"></a>02456 
-<a name="l02457"></a>02457             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l02458"></a>02458             <span class="keywordflow">if</span> ( init1 != -1 )
-<a name="l02459"></a>02459             {
-<a name="l02460"></a>02460                 fitpar[0] = ((float)init1 - 1.) ;
-<a name="l02461"></a>02461                 fitpar[1] = ((float)init1 + 1.) ;
-<a name="l02462"></a>02462             }
-<a name="l02463"></a>02463 
-<a name="l02464"></a>02464             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l02465"></a>02465             {
-<a name="l02466"></a>02466                 mpar[i] = 1 ;
-<a name="l02467"></a>02467                 dervpar[i] = 0. ;
-<a name="l02468"></a>02468             }
-<a name="l02469"></a>02469       
-<a name="l02470"></a>02470             xdim     = XDIMA ;
-<a name="l02471"></a>02471             ndat     = nel ;
-<a name="l02472"></a>02472             numpar   = NPAR ;
-<a name="l02473"></a>02473             tol      = TOLA ;
-<a name="l02474"></a>02474             lab      = LABA ;
-<a name="l02475"></a>02475             its      = ITSA ;
-<a name="l02476"></a>02476          
-<a name="l02477"></a>02477             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l02478"></a>02478             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, 
-<a name="l02479"></a>02479                                                       half_buffer -> data, 
-<a name="l02480"></a>02480                                                       wdat, &ndat, fitpar,
-<a name="l02481"></a>02481                                                       dervpar, mpar, &numpar, 
-<a name="l02482"></a>02482                                                       &tol, &its, &lab )) )
-<a name="l02483"></a>02483             { 
-<a name="l02484"></a>02484                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span>
-<a name="l02485"></a>02485                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error"</span>
-<a name="l02486"></a>02486                                    <span class="stringliteral">" no.: %d in slitlet: %d\n"</span>, iters, j) ;
-<a name="l02487"></a>02487                 fitpar[0] = ((float)init1 - 1.) ;
-<a name="l02488"></a>02488                 fitpar[1] = ((float)init1 + 1.) ;
-<a name="l02489"></a>02489             }
-<a name="l02490"></a>02490 
-<a name="l02491"></a>02491             pos = (fitpar[0] + fitpar[1]) / 2. ;
-<a name="l02492"></a>02492 
-<a name="l02493"></a>02493             <span class="comment">/*---------------------------------------------------------------- </span>
-<a name="l02494"></a>02494 <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span>
-<a name="l02495"></a>02495 <span class="comment">             * slitlets and associate the fit results with the absolute </span>
-<a name="l02496"></a>02496 <span class="comment">             * positions in the image consider the difference of the fitted </span>
-<a name="l02497"></a>02497 <span class="comment">             * slit position to the expected position and decide wether the </span>
-<a name="l02498"></a>02498 <span class="comment">             * fit is taken or the expected value is taken.</span>
-<a name="l02499"></a>02499 <span class="comment">             */</span>
-<a name="l02500"></a>02500             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02501"></a>02501             {
-<a name="l02502"></a>02502                 <span class="comment">/* take care of the column position of the fit boxes </span>
-<a name="l02503"></a>02503 <span class="comment">                   to get the absolute positions */</span>
-<a name="l02504"></a>02504                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02505"></a>02505                 {
-<a name="l02506"></a>02506                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - 
-<a name="l02507"></a>02507                          (float)slit_length)) < diff_tol )
-<a name="l02508"></a>02508                     {
-<a name="l02509"></a>02509                         sinfo_slit_pos[0][0] = pos ;
-<a name="l02510"></a>02510                     }
-<a name="l02511"></a>02511                     <span class="keywordflow">else</span>
-<a name="l02512"></a>02512                     {
-<a name="l02513"></a>02513                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span>
-<a name="l02514"></a>02514                                           <span class="stringliteral">" position of slitlet 0"</span>) ;
-<a name="l02515"></a>02515                         <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>) edgeclean[0] - 1. - 
-<a name="l02516"></a>02516                              (<span class="keywordtype">float</span>)slit_length < 0. )
-<a name="l02517"></a>02517                         {
-<a name="l02518"></a>02518                             sinfo_slit_pos[0][0] = 0. ;
-<a name="l02519"></a>02519                         }
-<a name="l02520"></a>02520                         <span class="keywordflow">else</span>
-<a name="l02521"></a>02521                         {
-<a name="l02522"></a>02522                             sinfo_slit_pos[0][0] = (float)edgeclean[0] - 1. - 
-<a name="l02523"></a>02523                             (<span class="keywordtype">float</span>)slit_length ;
-<a name="l02524"></a>02524                         }
-<a name="l02525"></a>02525                     }
-<a name="l02526"></a>02526                 }
-<a name="l02527"></a>02527                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02528"></a>02528                 {
-<a name="l02529"></a>02529                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l02530"></a>02530                     {
-<a name="l02531"></a>02531                         sinfo_slit_pos[j][0] = pos + (float)edgeclean[j-1] - 
-<a name="l02532"></a>02532                                                (<span class="keywordtype">float</span>)margin ;
-<a name="l02533"></a>02533                     }
-<a name="l02534"></a>02534                     else
-<a name="l02535"></a>02535                     {
-<a name="l02536"></a>02536                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span>
-<a name="l02537"></a>02537                                           <span class="stringliteral">" position of slitlet %d"</span>, j) ;
-<a name="l02538"></a>02538                         sinfo_slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;
-<a name="l02539"></a>02539                     }
-<a name="l02540"></a>02540                 }
-<a name="l02541"></a>02541                 <span class="keywordflow">else</span>
-<a name="l02542"></a>02542                 {
-<a name="l02543"></a>02543                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l02544"></a>02544                     {
-<a name="l02545"></a>02545                         sinfo_slit_pos[k][0] = pos + (float)edgeclean[k-1] - 
-<a name="l02546"></a>02546                                                (<span class="keywordtype">float</span>)margin ;
-<a name="l02547"></a>02547                     }
-<a name="l02548"></a>02548                     else
-<a name="l02549"></a>02549                     {
-<a name="l02550"></a>02550                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span>
-<a name="l02551"></a>02551                                           <span class="stringliteral">" position of slitlet %d"</span>, j) ;
-<a name="l02552"></a>02552                         sinfo_slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;
-<a name="l02553"></a>02553                     }
-<a name="l02554"></a>02554                 }
-<a name="l02555"></a>02555             }
-<a name="l02556"></a>02556             <span class="keywordflow">else</span>
-<a name="l02557"></a>02557             {
-<a name="l02558"></a>02558                 <span class="comment">/* take care of the column position of the fit boxes </span>
-<a name="l02559"></a>02559 <span class="comment">                   to get the absolute positions */</span>
-<a name="l02560"></a>02560                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02561"></a>02561                 {
-<a name="l02562"></a>02562                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - 
-<a name="l02563"></a>02563                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )
-<a name="l02564"></a>02564                     {
-<a name="l02565"></a>02565                         sinfo_slit_pos[0][1] = (float)(box_buffer->n_elements - 
-<a name="l02566"></a>02566                                                 1) - pos ;
-<a name="l02567"></a>02567                     }
-<a name="l02568"></a>02568                     <span class="keywordflow">else</span>
-<a name="l02569"></a>02569                     {
-<a name="l02570"></a>02570                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l02571"></a>02571                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;
-<a name="l02572"></a>02572                         sinfo_slit_pos[0][1] = (float)edgeclean[0] - 1. ;
-<a name="l02573"></a>02573                     }
-<a name="l02574"></a>02574                 }
-<a name="l02575"></a>02575                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02576"></a>02576                 {
-<a name="l02577"></a>02577                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos
-<a name="l02578"></a>02578                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - 
-<a name="l02579"></a>02579                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )
-<a name="l02580"></a>02580                     {
-<a name="l02581"></a>02581                         sinfo_slit_pos[j][1] = (float)(box_buffer->n_elements -
-<a name="l02582"></a>02582                                         1) - pos
-<a name="l02583"></a>02583                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02584"></a>02584                     }
-<a name="l02585"></a>02585                     else
-<a name="l02586"></a>02586                     {
-<a name="l02587"></a>02587                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted right "</span>
-<a name="l02588"></a>02588                                           <span class="stringliteral">"position of slitlet %d"</span>, j) ;
-<a name="l02589"></a>02589                         sinfo_slit_pos[j][1] = (float)edgeclean[j] - 1. ;
-<a name="l02590"></a>02590                     }
-<a name="l02591"></a>02591                 }
-<a name="l02592"></a>02592                 <span class="keywordflow">else</span>
-<a name="l02593"></a>02593                 {
-<a name="l02594"></a>02594                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )
-<a name="l02595"></a>02595                     {
-<a name="l02596"></a>02596                         last_pos = (float)(ilx - 1) ;
-<a name="l02597"></a>02597                     }
-<a name="l02598"></a>02598                     <span class="keywordflow">else</span>
-<a name="l02599"></a>02599                     {
-<a name="l02600"></a>02600                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;
-<a name="l02601"></a>02601                     }
-<a name="l02602"></a>02602                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos
-<a name="l02603"></a>02603                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - 
-<a name="l02604"></a>02604                                last_pos ) < diff_tol )
-<a name="l02605"></a>02605                     {
-<a name="l02606"></a>02606                         sinfo_slit_pos[k][1] = (float)(box_buffer->n_elements -
-<a name="l02607"></a>02607                                                1) - pos
-<a name="l02608"></a>02608                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02609"></a>02609                     }
-<a name="l02610"></a>02610                     else
-<a name="l02611"></a>02611                     {
-<a name="l02612"></a>02612                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted right "</span>
-<a name="l02613"></a>02613                                           <span class="stringliteral">"position of slitlet %d\n"</span>, j) ;
-<a name="l02614"></a>02614                         sinfo_slit_pos[k][1] = last_pos ;
-<a name="l02615"></a>02615                     }
-<a name="l02616"></a>02616                 }
-<a name="l02617"></a>02617             }
-<a name="l02618"></a>02618 
-<a name="l02619"></a>02619             sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l02620"></a>02620             cpl_free( xdat ) ;
-<a name="l02621"></a>02621             cpl_free( wdat ) ;
-<a name="l02622"></a>02622             cpl_free( mpar ) ;
-<a name="l02623"></a>02623         }
-<a name="l02624"></a>02624         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l02625"></a>02625     }
-<a name="l02626"></a>02626         
-<a name="l02627"></a>02627     cpl_free( sinfo_edge ) ;
-<a name="l02628"></a>02628     cpl_free( pos_row ) ;
-<a name="l02629"></a>02629     cpl_free( edgeclean ) ;
-<a name="l02630"></a>02630     cpl_free( dummyedge ) ;
-<a name="l02631"></a>02631     cpl_free( pos_rowclean ) ;
-<a name="l02632"></a>02632     cpl_free(position);
-<a name="l02633"></a>02633     <span class="keywordflow">return</span> 0 ;
-<a name="l02634"></a>02634 }
-<a name="l02635"></a>02635                               
-<a name="l02670"></a>02670 <span class="keywordtype">int</span> 
-<a name="l02671"></a>02671 sinfo_new_fit_slits_edge( cpl_image   * lineImage, 
-<a name="l02672"></a>02672                   FitParams ** par,
-<a name="l02673"></a>02673                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l02674"></a>02674                   <span class="keywordtype">int</span>          box_length,
-<a name="l02675"></a>02675                   <span class="keywordtype">float</span>        y_box,
-<a name="l02676"></a>02676                   <span class="keywordtype">float</span>        diff_tol )
-<a name="l02677"></a>02677 {
-<a name="l02678"></a>02678     <span class="keywordtype">float</span>* position=NULL ;
-<a name="l02679"></a>02679     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l02680"></a>02680     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l02681"></a>02681     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l02682"></a>02682     Vector * box_buffer ;
-<a name="l02683"></a>02683     Vector * half_buffer ;
-<a name="l02684"></a>02684     <span class="keywordtype">float</span> max_intensity ;
-<a name="l02685"></a>02685     <span class="keywordtype">float</span> row_pos ;
-<a name="l02686"></a>02686     <span class="keywordtype">int</span>   row, col ;
-<a name="l02687"></a>02687     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;
-<a name="l02688"></a>02688     <span class="keywordtype">int</span>   found, init1 ;
-<a name="l02689"></a>02689     <span class="keywordtype">int</span>   line ; 
-<a name="l02690"></a>02690     <span class="keywordtype">int</span>   nel, n_right, left_right ;
-<a name="l02691"></a>02691     <span class="keywordtype">int</span>   column ;
-<a name="l02692"></a>02692     <span class="keywordtype">int</span>   slit_length ;
-<a name="l02693"></a>02693     <span class="keywordtype">int</span>   agreed ;
-<a name="l02694"></a>02694     <span class="keywordtype">int</span>   bad_line ;
-<a name="l02695"></a>02695     <span class="keywordtype">int</span>   margin ;
-<a name="l02696"></a>02696     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l02697"></a>02697     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l02698"></a>02698     <span class="keywordtype">int</span>   * mpar ;
-<a name="l02699"></a>02699     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l02700"></a>02700     <span class="keywordtype">float</span> tol, lab ;
-<a name="l02701"></a>02701     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l02702"></a>02702     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l02703"></a>02703     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l02704"></a>02704     <span class="keywordtype">float</span> pos, last_pos ;
-<a name="l02705"></a>02705     <span class="keywordtype">int</span> ilx=0;
-<a name="l02706"></a>02706     <span class="keywordtype">int</span> ily=0;
-<a name="l02707"></a>02707     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02708"></a>02708 
-<a name="l02709"></a>02709 
-<a name="l02710"></a>02710     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l02711"></a>02711     {
-<a name="l02712"></a>02712         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;
-<a name="l02713"></a>02713         <span class="keywordflow">return</span> -1 ;
-<a name="l02714"></a>02714     }
-<a name="l02715"></a>02715     ilx=cpl_image_get_size_x(lineImage);
-<a name="l02716"></a>02716     ily=cpl_image_get_size_y(lineImage);
-<a name="l02717"></a>02717     pidata=cpl_image_get_data_float(lineImage);
-<a name="l02718"></a>02718 
-<a name="l02719"></a>02719     slit_length = (int) sqrt (ilx) ;
-<a name="l02720"></a>02720 
-<a name="l02721"></a>02721     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l02722"></a>02722     {
-<a name="l02723"></a>02723         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line fit parameters given!"</span> ) ;
-<a name="l02724"></a>02724         <span class="keywordflow">return</span> -2 ;
-<a name="l02725"></a>02725     }
-<a name="l02726"></a>02726 
-<a name="l02727"></a>02727     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )
-<a name="l02728"></a>02728     {
-<a name="l02729"></a>02729         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;
-<a name="l02730"></a>02730         <span class="keywordflow">return</span> -3 ;
-<a name="l02731"></a>02731     }
-<a name="l02732"></a>02732 
-<a name="l02733"></a>02733     <span class="keywordflow">if</span> ( box_length <  4 ||
-<a name="l02734"></a>02734          box_length >= 2*slit_length )
-<a name="l02735"></a>02735     {
-<a name="l02736"></a>02736         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;
-<a name="l02737"></a>02737         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Must be 4 <= box_length < %d "</span>,2*slit_length ) ;
-<a name="l02738"></a>02738         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" You have chosen box_length = %d "</span>,box_length);
-<a name="l02739"></a>02739         <span class="keywordflow">return</span> -4 ;
-<a name="l02740"></a>02740     }
-<a name="l02741"></a>02741 
-<a name="l02742"></a>02742     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )
-<a name="l02743"></a>02743     {
-<a name="l02744"></a>02744         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;
-<a name="l02745"></a>02745         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" y_box=%f not in range (0,3]!"</span>,y_box);
-<a name="l02746"></a>02746         <span class="keywordflow">return</span> -5 ;
-<a name="l02747"></a>02747     }
-<a name="l02748"></a>02748 
-<a name="l02749"></a>02749     <span class="keywordflow">if</span> ( diff_tol < 1. )
-<a name="l02750"></a>02750     {
-<a name="l02751"></a>02751         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" diff_tol too small!"</span> ) ;
-<a name="l02752"></a>02752         <span class="keywordflow">return</span> -6 ;
-<a name="l02753"></a>02753     }
-<a name="l02754"></a>02754 
-<a name="l02755"></a>02755     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span>
-<a name="l02756"></a>02756     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02757"></a>02757     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02758"></a>02758     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02759"></a>02759     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02760"></a>02760     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l02761"></a>02761 
-<a name="l02762"></a>02762     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l02763"></a>02763 <span class="comment">     * go through the first image columns and the fit parameters and find </span>
-<a name="l02764"></a>02764 <span class="comment">     * the line with the highest intensity </span>
-<a name="l02765"></a>02765 <span class="comment">     */</span>
-<a name="l02766"></a>02766     agreed = -1 ;
-<a name="l02767"></a>02767     bad_line = -1 ;
-<a name="l02768"></a>02768     <span class="keywordflow">while</span>( agreed == -1 )
-<a name="l02769"></a>02769     {
-<a name="l02770"></a>02770         found = -1 ;
-<a name="l02771"></a>02771         max_intensity = -FLT_MAX ;
-<a name="l02772"></a>02772         <span class="keywordflow">for</span> ( col = 0 ; col < slit_length ; col++ )
-<a name="l02773"></a>02773         {
-<a name="l02774"></a>02774             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02775"></a>02775             {
-<a name="l02776"></a>02776                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line != bad_line )
-<a name="l02777"></a>02777                 {
-<a name="l02778"></a>02778                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )
-<a name="l02779"></a>02779                     {
-<a name="l02780"></a>02780                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] >= 1. && 
-<a name="l02781"></a>02781                              par[i]->fit_par[2] > 0. )
-<a name="l02782"></a>02782                         {
-<a name="l02783"></a>02783                             max_intensity = par[i]->fit_par[0] ;
-<a name="l02784"></a>02784                             found = i ;
-<a name="l02785"></a>02785                         }
-<a name="l02786"></a>02786                     }
-<a name="l02787"></a>02787                 }
-<a name="l02788"></a>02788             }  
-<a name="l02789"></a>02789         }
-<a name="l02790"></a>02790 
-<a name="l02791"></a>02791         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l02792"></a>02792 <span class="comment">         * check if the found line is usable and if the neighbouring line </span>
-<a name="l02793"></a>02793 <span class="comment">         * have intensity on near rows in neighbouring slitlets </span>
-<a name="l02794"></a>02794 <span class="comment">         */</span>
-<a name="l02795"></a>02795         line    = par[found]->line ;
-<a name="l02796"></a>02796         column  = par[found]->column ;
-<a name="l02797"></a>02797         row_pos = par[found]->fit_par[2] ;
-<a name="l02798"></a>02798         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )
-<a name="l02799"></a>02799         {
-<a name="l02800"></a>02800             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02801"></a>02801             {
-<a name="l02802"></a>02802                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && 
-<a name="l02803"></a>02803                      par[i]->column == column + slit_length )
-<a name="l02804"></a>02804                 {
-<a name="l02805"></a>02805                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&
-<a name="l02806"></a>02806                          par[i]->fit_par[2] >= (row_pos - y_box) )
-<a name="l02807"></a>02807                     {
-<a name="l02808"></a>02808                         bad_line = line ;
-<a name="l02809"></a>02809                     } 
-<a name="l02810"></a>02810                 }
-<a name="l02811"></a>02811             }
-<a name="l02812"></a>02812             <span class="keywordflow">if</span> ( bad_line != line )
-<a name="l02813"></a>02813             {
-<a name="l02814"></a>02814                 agreed = 1 ;
-<a name="l02815"></a>02815                 break ;
-<a name="l02816"></a>02816             }
-<a name="l02817"></a>02817         }
-<a name="l02818"></a>02818         <span class="keywordflow">else</span> 
-<a name="l02819"></a>02819         {
-<a name="l02820"></a>02820             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in "</span>
-<a name="l02821"></a>02821                             <span class="stringliteral">"the first image columns"</span>) ;
-<a name="l02822"></a>02822             cpl_free( sinfo_edge ) ;
-<a name="l02823"></a>02823             cpl_free( pos_row ) ;
-<a name="l02824"></a>02824             cpl_free( edgeclean ) ;
-<a name="l02825"></a>02825             cpl_free( dummyedge ) ;
-<a name="l02826"></a>02826             cpl_free( pos_rowclean ) ;
-<a name="l02827"></a>02827             <span class="keywordflow">return</span> -7 ;
-<a name="l02828"></a>02828         }    
-<a name="l02829"></a>02829     }
-<a name="l02830"></a>02830 
-<a name="l02831"></a>02831  
-<a name="l02832"></a>02832     <span class="keywordflow">if</span> ( agreed == -1 )
-<a name="l02833"></a>02833     {
-<a name="l02834"></a>02834         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no emission line found in the first image columns"</span>) ;
-<a name="l02835"></a>02835         cpl_free( sinfo_edge ) ;
-<a name="l02836"></a>02836         cpl_free( pos_row ) ;
-<a name="l02837"></a>02837         cpl_free( edgeclean ) ;
-<a name="l02838"></a>02838         cpl_free( dummyedge ) ;
-<a name="l02839"></a>02839         cpl_free( pos_rowclean ) ;
-<a name="l02840"></a>02840         <span class="keywordflow">return</span> -7 ;
-<a name="l02841"></a>02841     }    
-<a name="l02842"></a>02842  
-<a name="l02843"></a>02843     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l02844"></a>02844     n  = 0 ;
-<a name="l02845"></a>02845     ed = 0 ;
-<a name="l02846"></a>02846     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02847"></a>02847 
-<a name="l02848"></a>02848     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02849"></a>02849     {
-<a name="l02850"></a>02850         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02851"></a>02851         {
-<a name="l02852"></a>02852             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )
-<a name="l02853"></a>02853             {
-<a name="l02854"></a>02854                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && 
-<a name="l02855"></a>02855                      par[i]->fit_par[1] >= 1.  && 
-<a name="l02856"></a>02856                      par[i]->fit_par[2] > 0. )
-<a name="l02857"></a>02857                 {
-<a name="l02858"></a>02858                     position[n] = par[i]->fit_par[2] ;
-<a name="l02859"></a>02859                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )
-<a name="l02860"></a>02860                     {
-<a name="l02861"></a>02861                         sinfo_edge[ed] = col ; 
-<a name="l02862"></a>02862                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l02863"></a>02863                         ed++ ;
-<a name="l02864"></a>02864                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) 
-<a name="l02865"></a>02865                         {
-<a name="l02866"></a>02866                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l02867"></a>02867                         }
-<a name="l02868"></a>02868                     }
-<a name="l02869"></a>02869                     n++ ;
-<a name="l02870"></a>02870                 }
-<a name="l02871"></a>02871             }
-<a name="l02872"></a>02872         }
-<a name="l02873"></a>02873     }
-<a name="l02874"></a>02874     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )
-<a name="l02875"></a>02875     {
-<a name="l02876"></a>02876         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough slitlets found"</span>) ;
-<a name="l02877"></a>02877         cpl_free( sinfo_edge ) ;
-<a name="l02878"></a>02878         cpl_free( pos_row ) ;
-<a name="l02879"></a>02879         cpl_free( edgeclean ) ;
-<a name="l02880"></a>02880         cpl_free( dummyedge ) ;
-<a name="l02881"></a>02881         cpl_free( pos_rowclean ) ;
-<a name="l02882"></a>02882         <span class="keywordflow">return</span> -8 ;
-<a name="l02883"></a>02883     } 
-<a name="l02884"></a>02884 
-<a name="l02885"></a>02885     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l02886"></a>02886     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l02887"></a>02887     {
-<a name="l02888"></a>02888         <span class="keywordflow">if</span> ( i == ed )
-<a name="l02889"></a>02889         {
-<a name="l02890"></a>02890             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < slit_length - 3 ||
-<a name="l02891"></a>02891                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > slit_length + 3 )
-<a name="l02892"></a>02892             {
-<a name="l02893"></a>02893                 dummyedge[i-1]   = -1 ;
-<a name="l02894"></a>02894             }
-<a name="l02895"></a>02895             
-<a name="l02896"></a>02896         }
-<a name="l02897"></a>02897         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l02898"></a>02898         {
-<a name="l02899"></a>02899             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l02900"></a>02900         }
-<a name="l02901"></a>02901         <span class="keywordflow">else</span>
-<a name="l02902"></a>02902         {
-<a name="l02903"></a>02903             continue ;
-<a name="l02904"></a>02904         }
-<a name="l02905"></a>02905         <span class="keywordflow">if</span> ( i < ed )
-<a name="l02906"></a>02906         {
-<a name="l02907"></a>02907             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||
-<a name="l02908"></a>02908                  (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )
-<a name="l02909"></a>02909             {
-<a name="l02910"></a>02910                 dummyedge[i]   = -1 ;
-<a name="l02911"></a>02911             }
-<a name="l02912"></a>02912         }
-<a name="l02913"></a>02913         <span class="keywordflow">if</span> ( i + 1 < ed && dummyedge[i] != -1 )
-<a name="l02914"></a>02914         {
-<a name="l02915"></a>02915             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||
-<a name="l02916"></a>02916                  (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )
-<a name="l02917"></a>02917             {
-<a name="l02918"></a>02918                 dummyedge[i+1] = -1 ; 
-<a name="l02919"></a>02919             }
-<a name="l02920"></a>02920         }
-<a name="l02921"></a>02921     }
-<a name="l02922"></a>02922     
-<a name="l02923"></a>02923     k = 0 ;
-<a name="l02924"></a>02924     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l02925"></a>02925     {
-<a name="l02926"></a>02926         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l02927"></a>02927         {
-<a name="l02928"></a>02928             edgeclean[k] = dummyedge[i] ;
-<a name="l02929"></a>02929             pos_rowclean[k] = pos_row[i] ;
-<a name="l02930"></a>02930             k++ ;
-<a name="l02931"></a>02931             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )
-<a name="l02932"></a>02932             {
-<a name="l02933"></a>02933                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l02934"></a>02934             }
-<a name="l02935"></a>02935         }
-<a name="l02936"></a>02936     }
-<a name="l02937"></a>02937 
-<a name="l02938"></a>02938     <span class="keywordflow">if</span> ( k != slit_length - 1 )
-<a name="l02939"></a>02939     {
-<a name="l02940"></a>02940         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough clean slitlets found"</span>) ;
-<a name="l02941"></a>02941         cpl_free( sinfo_edge ) ;
-<a name="l02942"></a>02942         cpl_free( pos_row ) ;
-<a name="l02943"></a>02943         cpl_free( edgeclean ) ;
-<a name="l02944"></a>02944         cpl_free( dummyedge ) ;
-<a name="l02945"></a>02945         cpl_free( pos_rowclean ) ;
-<a name="l02946"></a>02946         <span class="keywordflow">return</span> -8 ;
-<a name="l02947"></a>02947     } 
-<a name="l02948"></a>02948 
-<a name="l02949"></a>02949     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l02950"></a>02950     margin = box_length / 2 ;
-<a name="l02951"></a>02951 
-<a name="l02952"></a>02952     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l02953"></a>02953 <span class="comment">     * now go through the slitlets, search along each column within a box with </span>
-<a name="l02954"></a>02954 <span class="comment">     * half width y_box the maximum value and store these found values in a </span>
-<a name="l02955"></a>02955 <span class="comment">     * buffer</span>
-<a name="l02956"></a>02956 <span class="comment">     */</span>
-<a name="l02957"></a>02957     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )
-<a name="l02958"></a>02958     {
-<a name="l02959"></a>02959         m = 0 ;
-<a name="l02960"></a>02960         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02961"></a>02961         {
-<a name="l02962"></a>02962             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l02963"></a>02963             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l02964"></a>02964             {
-<a name="l02965"></a>02965                 maxval = -FLT_MAX ;
-<a name="l02966"></a>02966                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; 
-<a name="l02967"></a>02967                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )
-<a name="l02968"></a>02968                 {
-<a name="l02969"></a>02969                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l02970"></a>02970                     {
-<a name="l02971"></a>02971                         maxval = pidata[col + ilx*row] ;
-<a name="l02972"></a>02972                     }
-<a name="l02973"></a>02973                 }
-<a name="l02974"></a>02974                 box_buffer->data[m] = maxval ;
-<a name="l02975"></a>02975                 m++ ;
-<a name="l02976"></a>02976             }
-<a name="l02977"></a>02977         }
-<a name="l02978"></a>02978         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02979"></a>02979         {
-<a name="l02980"></a>02980             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l02981"></a>02981                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l02982"></a>02982             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l02983"></a>02983                   col < edgeclean[j] + margin ; col++ )
-<a name="l02984"></a>02984             {
-<a name="l02985"></a>02985                 maxval = -FLT_MAX ;
-<a name="l02986"></a>02986                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; 
-<a name="l02987"></a>02987                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )
-<a name="l02988"></a>02988                 {
-<a name="l02989"></a>02989                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l02990"></a>02990                     {
-<a name="l02991"></a>02991                         maxval = pidata[col + ilx*row] ;
-<a name="l02992"></a>02992                     }
-<a name="l02993"></a>02993                 }
-<a name="l02994"></a>02994                 box_buffer->data[m] = maxval ;
-<a name="l02995"></a>02995                 m++ ;
-<a name="l02996"></a>02996             }
-<a name="l02997"></a>02997         }
-<a name="l02998"></a>02998         <span class="keywordflow">else</span> 
-<a name="l02999"></a>02999         {
-<a name="l03000"></a>03000             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l03001"></a>03001             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l03002"></a>03002             {
-<a name="l03003"></a>03003                 maxval = -FLT_MAX ;
-<a name="l03004"></a>03004                 <span class="keywordflow">for</span> ( row = pos_rowclean[k] - sinfo_new_nint(y_box) ; 
-<a name="l03005"></a>03005                       row <= pos_rowclean[k] + sinfo_new_nint(y_box) ; row++ )
-<a name="l03006"></a>03006                 {
-<a name="l03007"></a>03007                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l03008"></a>03008                     {
-<a name="l03009"></a>03009                         maxval = pidata[col + ilx*row] ;
-<a name="l03010"></a>03010                     }
-<a name="l03011"></a>03011                 }
-<a name="l03012"></a>03012                 box_buffer->data[m] = maxval ;
-<a name="l03013"></a>03013                 m++ ;
-<a name="l03014"></a>03014             }
-<a name="l03015"></a>03015         }
-<a name="l03016"></a>03016 
-<a name="l03017"></a>03017         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l03018"></a>03018         { 
-<a name="l03019"></a>03019             nel = 0 ;
-<a name="l03020"></a>03020             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l03021"></a>03021             {
-<a name="l03022"></a>03022                 nel = box_buffer -> n_elements / 2 ;
-<a name="l03023"></a>03023             }
-<a name="l03024"></a>03024             <span class="keywordflow">else</span>
-<a name="l03025"></a>03025             {
-<a name="l03026"></a>03026                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )
-<a name="l03027"></a>03027                 {
-<a name="l03028"></a>03028                     nel = box_buffer -> n_elements / 2 ;
-<a name="l03029"></a>03029                 }
-<a name="l03030"></a>03030                 <span class="keywordflow">else</span>
-<a name="l03031"></a>03031                 {
-<a name="l03032"></a>03032                     nel = box_buffer -> n_elements / 2 + 1 ;
-<a name="l03033"></a>03033                 }
-<a name="l03034"></a>03034             }
-<a name="l03035"></a>03035 
-<a name="l03036"></a>03036             <span class="comment">/* now split the buffer in the midth in a left and right </span>
-<a name="l03037"></a>03037 <span class="comment">               part for fitting */</span>
-<a name="l03038"></a>03038             half_buffer = sinfo_new_vector( nel ) ;
-<a name="l03039"></a>03039             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l03040"></a>03040             {
-<a name="l03041"></a>03041                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l03042"></a>03042                 {
-<a name="l03043"></a>03043                     half_buffer -> data[i] = box_buffer -> data[i] ;
-<a name="l03044"></a>03044                 }
-<a name="l03045"></a>03045             }
-<a name="l03046"></a>03046             <span class="keywordflow">else</span>
-<a name="l03047"></a>03047             {
-<a name="l03048"></a>03048                 n_right = 0 ;
-<a name="l03049"></a>03049                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; 
-<a name="l03050"></a>03050                       i >= box_buffer -> n_elements - nel ; i-- )
-<a name="l03051"></a>03051                 {
-<a name="l03052"></a>03052                     half_buffer -> data[n_right] = box_buffer -> data[i] ;
-<a name="l03053"></a>03053                     n_right++ ;
-<a name="l03054"></a>03054                 }
-<a name="l03055"></a>03055             }
-<a name="l03056"></a>03056 
-<a name="l03057"></a>03057             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l03058"></a>03058             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l03059"></a>03059             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l03060"></a>03060 
-<a name="l03061"></a>03061             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l03062"></a>03062             minval =  FLT_MAX ;
-<a name="l03063"></a>03063             maxval = -FLT_MAX ;
-<a name="l03064"></a>03064             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l03065"></a>03065             {
-<a name="l03066"></a>03066                 xdat[i] = i ;
-<a name="l03067"></a>03067                 wdat[i] = 1.0 ;
-<a name="l03068"></a>03068                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )
-<a name="l03069"></a>03069                 {
-<a name="l03070"></a>03070                     minval = half_buffer -> data[i] ;
-<a name="l03071"></a>03071                 }
-<a name="l03072"></a>03072                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )
-<a name="l03073"></a>03073                 {
-<a name="l03074"></a>03074                     maxval = half_buffer -> data[i] ;
-<a name="l03075"></a>03075                 }
-<a name="l03076"></a>03076             }
-<a name="l03077"></a>03077 
-<a name="l03078"></a>03078             fitpar[2] = minval ;
-<a name="l03079"></a>03079             fitpar[3] = maxval ; 
-<a name="l03080"></a>03080 
-<a name="l03081"></a>03081             <span class="comment">/* search for both positions of the half intensity of </span>
-<a name="l03082"></a>03082 <span class="comment">               the hat within the buffer */</span>
-<a name="l03083"></a>03083             init1 = -1 ; 
-<a name="l03084"></a>03084             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l03085"></a>03085             {
-<a name="l03086"></a>03086                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )
-<a name="l03087"></a>03087                 {
-<a name="l03088"></a>03088                     init1 = i ;
-<a name="l03089"></a>03089                     break ;
-<a name="l03090"></a>03090                 }
-<a name="l03091"></a>03091             }
-<a name="l03092"></a>03092 
-<a name="l03093"></a>03093             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l03094"></a>03094             <span class="keywordflow">if</span> ( init1 != -1 )
-<a name="l03095"></a>03095             {
-<a name="l03096"></a>03096                 fitpar[0] = ((float)init1 - 1.) ;
-<a name="l03097"></a>03097                 fitpar[1] = ((float)init1 + 1.) ;
-<a name="l03098"></a>03098             }
-<a name="l03099"></a>03099 
-<a name="l03100"></a>03100             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l03101"></a>03101             {
-<a name="l03102"></a>03102                 mpar[i] = 1 ;
-<a name="l03103"></a>03103                 dervpar[i] = 0. ;
-<a name="l03104"></a>03104             }
-<a name="l03105"></a>03105       
-<a name="l03106"></a>03106             xdim     = XDIMA ;
-<a name="l03107"></a>03107             ndat     = nel ;
-<a name="l03108"></a>03108             numpar   = NPAR ;
-<a name="l03109"></a>03109             tol      = TOLA ;
-<a name="l03110"></a>03110             lab      = LABA ;
-<a name="l03111"></a>03111             its      = ITSA ;
-<a name="l03112"></a>03112          
-<a name="l03113"></a>03113             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l03114"></a>03114             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, 
-<a name="l03115"></a>03115                                                       half_buffer -> data, 
-<a name="l03116"></a>03116                                                       wdat, &ndat, fitpar,
-<a name="l03117"></a>03117                                                       dervpar, mpar, &numpar, 
-<a name="l03118"></a>03118                                                       &tol, &its, &lab )) )
-<a name="l03119"></a>03119             { 
-<a name="l03120"></a>03120                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span>
-<a name="l03121"></a>03121                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed, error "</span>
-<a name="l03122"></a>03122                                    <span class="stringliteral">"no.: %d in slitlet: %d"</span>, iters, j) ;
-<a name="l03123"></a>03123                 fitpar[0] = ((float)init1 - 1.) ;
-<a name="l03124"></a>03124                 fitpar[1] = ((float)init1 + 1.) ;
-<a name="l03125"></a>03125             }
-<a name="l03126"></a>03126 
-<a name="l03127"></a>03127             pos = (fitpar[0] + fitpar[1]) / 2. ;
-<a name="l03128"></a>03128 
-<a name="l03129"></a>03129             <span class="comment">/*----------------------------------------------------------------- </span>
-<a name="l03130"></a>03130 <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span>
-<a name="l03131"></a>03131 <span class="comment">             * slitlets and associate the fit results with the absolute </span>
-<a name="l03132"></a>03132 <span class="comment">             * positions in the image consider the difference of the fitted </span>
-<a name="l03133"></a>03133 <span class="comment">             * slit position to the expected position and decide wether the </span>
-<a name="l03134"></a>03134 <span class="comment">             * fit is taken or the expected value is taken.</span>
-<a name="l03135"></a>03135 <span class="comment">             */</span>
-<a name="l03136"></a>03136             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l03137"></a>03137             {
-<a name="l03138"></a>03138                 <span class="comment">/* take care of the column position of the fit boxes to get </span>
-<a name="l03139"></a>03139 <span class="comment">                   the absolute positions */</span>
-<a name="l03140"></a>03140                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l03141"></a>03141                 {
-<a name="l03142"></a>03142                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - 
-<a name="l03143"></a>03143                          (float)slit_length)) < diff_tol )
-<a name="l03144"></a>03144                     {
-<a name="l03145"></a>03145                         sinfo_slit_pos[0][0] = pos ;
-<a name="l03146"></a>03146                     }
-<a name="l03147"></a>03147                     <span class="keywordflow">else</span>
-<a name="l03148"></a>03148                     {
-<a name="l03149"></a>03149                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l03150"></a>03150                                           <span class="stringliteral">"left position of slitlet 0"</span>) ;
-<a name="l03151"></a>03151                         <span class="keywordflow">if</span> ((<span class="keywordtype">float</span>) edgeclean[0] - 1. - 
-<a name="l03152"></a>03152                             (<span class="keywordtype">float</span>)slit_length < 0. )
-<a name="l03153"></a>03153                         {
-<a name="l03154"></a>03154                             sinfo_slit_pos[0][0] = 0. ;
-<a name="l03155"></a>03155                         }
-<a name="l03156"></a>03156                         <span class="keywordflow">else</span>
-<a name="l03157"></a>03157                         {
-<a name="l03158"></a>03158                             sinfo_slit_pos[0][0] = (float)edgeclean[0] - 1. - 
-<a name="l03159"></a>03159                                                    (<span class="keywordtype">float</span>)slit_length ;
-<a name="l03160"></a>03160                         }
-<a name="l03161"></a>03161                     }
-<a name="l03162"></a>03162                 }
-<a name="l03163"></a>03163                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l03164"></a>03164                 {
-<a name="l03165"></a>03165                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l03166"></a>03166                     {
-<a name="l03167"></a>03167                         sinfo_slit_pos[j][0] = pos + (float)edgeclean[j-1] - 
-<a name="l03168"></a>03168                                                      (<span class="keywordtype">float</span>)margin ;
-<a name="l03169"></a>03169                     }
-<a name="l03170"></a>03170                     else
-<a name="l03171"></a>03171                     {
-<a name="l03172"></a>03172                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l03173"></a>03173                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;
-<a name="l03174"></a>03174                         sinfo_slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;
-<a name="l03175"></a>03175                     }
-<a name="l03176"></a>03176                 }
-<a name="l03177"></a>03177                 <span class="keywordflow">else</span>
-<a name="l03178"></a>03178                 {
-<a name="l03179"></a>03179                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l03180"></a>03180                     {
-<a name="l03181"></a>03181                         sinfo_slit_pos[k][0] = pos + (float)edgeclean[k-1] - 
-<a name="l03182"></a>03182                                                      (<span class="keywordtype">float</span>)margin ;
-<a name="l03183"></a>03183                     }
-<a name="l03184"></a>03184                     else
-<a name="l03185"></a>03185                     {
-<a name="l03186"></a>03186                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left "</span>
-<a name="l03187"></a>03187                                           <span class="stringliteral">"position of slitlet %d"</span>, j) ;
-<a name="l03188"></a>03188                         sinfo_slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;
-<a name="l03189"></a>03189                     }
-<a name="l03190"></a>03190                 }
-<a name="l03191"></a>03191             }
-<a name="l03192"></a>03192             <span class="keywordflow">else</span>
-<a name="l03193"></a>03193             {
-<a name="l03194"></a>03194                 <span class="comment">/* take care of the column position of the fit boxes to </span>
-<a name="l03195"></a>03195 <span class="comment">                   get the absolute positions */</span>
-<a name="l03196"></a>03196                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l03197"></a>03197                 {
-<a name="l03198"></a>03198                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - 
-<a name="l03199"></a>03199                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )
-<a name="l03200"></a>03200                     {
-<a name="l03201"></a>03201                        sinfo_slit_pos[0][1] = (float)(box_buffer->n_elements - 
-<a name="l03202"></a>03202                                                1) - pos ;
-<a name="l03203"></a>03203                     }
-<a name="l03204"></a>03204                     <span class="keywordflow">else</span>
-<a name="l03205"></a>03205                     {
-<a name="l03206"></a>03206                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l03207"></a>03207                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;
-<a name="l03208"></a>03208                         sinfo_slit_pos[0][1] = (float)edgeclean[0] - 1. ;
-<a name="l03209"></a>03209                     }
-<a name="l03210"></a>03210                 }
-<a name="l03211"></a>03211                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l03212"></a>03212                 {
-<a name="l03213"></a>03213                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos
-<a name="l03214"></a>03214                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - 
-<a name="l03215"></a>03215                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )
-<a name="l03216"></a>03216                     {
-<a name="l03217"></a>03217                         sinfo_slit_pos[j][1] = (float)(box_buffer->n_elements -
-<a name="l03218"></a>03218                                                1) - pos
-<a name="l03219"></a>03219                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin;
-<a name="l03220"></a>03220                     }
-<a name="l03221"></a>03221                     else
-<a name="l03222"></a>03222                     {
-<a name="l03223"></a>03223                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l03224"></a>03224                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;
-<a name="l03225"></a>03225                         sinfo_slit_pos[j][1] = (float)edgeclean[j] - 1. ;
-<a name="l03226"></a>03226                     }
-<a name="l03227"></a>03227                 }
-<a name="l03228"></a>03228                 <span class="keywordflow">else</span>
-<a name="l03229"></a>03229                 {
-<a name="l03230"></a>03230                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )
-<a name="l03231"></a>03231                     {
-<a name="l03232"></a>03232                         last_pos = (float)(ilx - 1) ;
-<a name="l03233"></a>03233                     }
-<a name="l03234"></a>03234                     <span class="keywordflow">else</span>
-<a name="l03235"></a>03235                     {
-<a name="l03236"></a>03236                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;
-<a name="l03237"></a>03237                     }
-<a name="l03238"></a>03238                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos
-<a name="l03239"></a>03239                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - 
-<a name="l03240"></a>03240                                last_pos ) < diff_tol )
-<a name="l03241"></a>03241                     {
-<a name="l03242"></a>03242                         sinfo_slit_pos[k][1] = (float)(box_buffer->n_elements -
-<a name="l03243"></a>03243                                                1) - pos
-<a name="l03244"></a>03244                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l03245"></a>03245                     }
-<a name="l03246"></a>03246                     else
-<a name="l03247"></a>03247                     {
-<a name="l03248"></a>03248                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l03249"></a>03249                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;
-<a name="l03250"></a>03250                         sinfo_slit_pos[k][1] = last_pos ;
-<a name="l03251"></a>03251                     }
-<a name="l03252"></a>03252                 }
-<a name="l03253"></a>03253             }
-<a name="l03254"></a>03254 
-<a name="l03255"></a>03255             sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l03256"></a>03256             cpl_free( xdat ) ;
-<a name="l03257"></a>03257             cpl_free( wdat ) ;
-<a name="l03258"></a>03258             cpl_free( mpar ) ;
-<a name="l03259"></a>03259         }
-<a name="l03260"></a>03260         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l03261"></a>03261     }
-<a name="l03262"></a>03262         
-<a name="l03263"></a>03263     cpl_free( sinfo_edge ) ;
-<a name="l03264"></a>03264     cpl_free( pos_row ) ;
-<a name="l03265"></a>03265     cpl_free( edgeclean ) ;
-<a name="l03266"></a>03266     cpl_free( dummyedge ) ;
-<a name="l03267"></a>03267     cpl_free( pos_rowclean ) ;
-<a name="l03268"></a>03268     cpl_free( position );
-<a name="l03269"></a>03269     <span class="keywordflow">return</span> 0 ;
-<a name="l03270"></a>03270 }
-<a name="l03271"></a>03271 
-<a name="l03294"></a>03294 <span class="keywordtype">int</span> 
-<a name="l03295"></a>03295 sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,
-<a name="l03296"></a>03296                                <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l03297"></a>03297                                <span class="keywordtype">int</span>          box_length,
-<a name="l03298"></a>03298                                <span class="keywordtype">float</span>        y_box,
-<a name="l03299"></a>03299                                <span class="keywordtype">float</span>        diff_tol,
-<a name="l03300"></a>03300                                <span class="keywordtype">int</span>          low_pos,
-<a name="l03301"></a>03301                                <span class="keywordtype">int</span>          high_pos )
-<a name="l03302"></a>03302 {
-<a name="l03303"></a>03303     <span class="keywordtype">int</span>*   position=NULL ;
-<a name="l03304"></a>03304     Vector * box_buffer ;
-<a name="l03305"></a>03305     Vector * in_buffer ;
-<a name="l03306"></a>03306     <span class="keywordtype">int</span>   found_row ;
-<a name="l03307"></a>03307     <span class="keywordtype">int</span>   row, col ;
-<a name="l03308"></a>03308     <span class="keywordtype">int</span>   col_first, col_last ;
-<a name="l03309"></a>03309     <span class="keywordtype">int</span>   row_first, row_last ;
-<a name="l03310"></a>03310     <span class="keywordtype">int</span>   i, j, m, n ;
-<a name="l03311"></a>03311     <span class="keywordtype">int</span>   init1 ;
-<a name="l03312"></a>03312     <span class="keywordtype">int</span>   left_right ;
-<a name="l03313"></a>03313     <span class="keywordtype">int</span>   n_buf, shift ;
-<a name="l03314"></a>03314     <span class="keywordtype">int</span>   slit_length ;
-<a name="l03315"></a>03315     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l03316"></a>03316     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l03317"></a>03317     <span class="keywordtype">int</span>   * mpar ;
-<a name="l03318"></a>03318     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l03319"></a>03319     <span class="keywordtype">float</span> tol, lab ;
-<a name="l03320"></a>03320     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l03321"></a>03321     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l03322"></a>03322     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l03323"></a>03323     <span class="keywordtype">float</span> pos ;
-<a name="l03324"></a>03324     <span class="keywordtype">float</span> new_pos ;
-<a name="l03325"></a>03325     <span class="keywordtype">int</span>   slitposition[SLITLENGTH] ;
-<a name="l03326"></a>03326     pixelvalue rowpos[SLITLENGTH] ;
-<a name="l03327"></a>03327     <span class="keywordtype">int</span> ilx=0;
-<a name="l03328"></a>03328     <span class="keywordtype">int</span> ily=0;
-<a name="l03329"></a>03329     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l03330"></a>03330 
-<a name="l03331"></a>03331     slit_length = SLITLENGTH ; <span class="comment">/* this is too high: 64 */</span>
-<a name="l03332"></a>03332     slit_length = N_SLITLETS ; <span class="comment">/* this is better: 32 */</span>
-<a name="l03333"></a>03333 
-<a name="l03334"></a>03334 
-<a name="l03335"></a>03335     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l03336"></a>03336     {
-<a name="l03337"></a>03337         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;
-<a name="l03338"></a>03338         <span class="keywordflow">return</span> -1 ;
-<a name="l03339"></a>03339     }
-<a name="l03340"></a>03340     ilx=cpl_image_get_size_x(lineImage);
-<a name="l03341"></a>03341     ily=cpl_image_get_size_y(lineImage);
-<a name="l03342"></a>03342     pidata=cpl_image_get_data_float(lineImage);
-<a name="l03343"></a>03343 
-<a name="l03344"></a>03344     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )
-<a name="l03345"></a>03345     {
-<a name="l03346"></a>03346         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;
-<a name="l03347"></a>03347         <span class="keywordflow">return</span> -1 ;
-<a name="l03348"></a>03348     }
-<a name="l03349"></a>03349 
-<a name="l03350"></a>03350     <span class="keywordflow">if</span> ( box_length < 4 ||
-<a name="l03351"></a>03351          box_length > 2*slit_length )
-<a name="l03352"></a>03352     {
-<a name="l03353"></a>03353         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;
-<a name="l03354"></a>03354         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Must be 4 <= box_length < %d "</span>,2*slit_length ) ;
-<a name="l03355"></a>03355         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" You have chosen box_length = %d"</span>,box_length);
-<a name="l03356"></a>03356 
-<a name="l03357"></a>03357 
-<a name="l03358"></a>03358         <span class="keywordflow">return</span> -1 ;
-<a name="l03359"></a>03359     }
-<a name="l03360"></a>03360 
-<a name="l03361"></a>03361     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )
-<a name="l03362"></a>03362     {
-<a name="l03363"></a>03363         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;
-<a name="l03364"></a>03364         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"You have chosen y_box=%f not in range (0,6]!"</span>,y_box);
-<a name="l03365"></a>03365         <span class="keywordflow">return</span> -1 ;
-<a name="l03366"></a>03366     }
-<a name="l03367"></a>03367     <span class="keywordflow">if</span> ( diff_tol <= 0. )
-<a name="l03368"></a>03368     {
-<a name="l03369"></a>03369         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong diff_tol given!"</span> ) ;
-<a name="l03370"></a>03370         <span class="keywordflow">return</span> -1 ;
-<a name="l03371"></a>03371     }
-<a name="l03372"></a>03372 
-<a name="l03373"></a>03373         <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || 
-<a name="l03374"></a>03374              high_pos <= 0 || high_pos > ily )
-<a name="l03375"></a>03375     {
-<a name="l03376"></a>03376         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;
-<a name="l03377"></a>03377         <span class="keywordflow">return</span> -1 ;
-<a name="l03378"></a>03378     }
-<a name="l03379"></a>03379 
-<a name="l03380"></a>03380     <span class="comment">/* now search for the maximum between the given positions for each col */</span>
-<a name="l03381"></a>03381     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l03382"></a>03382 
-<a name="l03383"></a>03383     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l03384"></a>03384     {
-<a name="l03385"></a>03385         found_row = -1 ;
-<a name="l03386"></a>03386         maxval = -FLT_MAX ;
-<a name="l03387"></a>03387         <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )
-<a name="l03388"></a>03388         {
-<a name="l03389"></a>03389             <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )
-<a name="l03390"></a>03390             {
-<a name="l03391"></a>03391                 maxval = pidata[col+row*ilx] ;
-<a name="l03392"></a>03392                 found_row = row ;
-<a name="l03393"></a>03393             }
-<a name="l03394"></a>03394         }
-<a name="l03395"></a>03395         <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )
-<a name="l03396"></a>03396         {
-<a name="l03397"></a>03397             position[col] = found_row ;
-<a name="l03398"></a>03398         }
-<a name="l03399"></a>03399         <span class="keywordflow">else</span>
-<a name="l03400"></a>03400         {
-<a name="l03401"></a>03401             position[col] = 0 ;
-<a name="l03402"></a>03402         }
-<a name="l03403"></a>03403     }
-<a name="l03404"></a>03404 
-<a name="l03405"></a>03405     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l03406"></a>03406 <span class="comment">     * now go through the slitlets, search along each column within a box with</span>
-<a name="l03407"></a>03407 <span class="comment">     * half width y_box the maximum value and store these found values in a </span>
-<a name="l03408"></a>03408 <span class="comment">     * buffer</span>
-<a name="l03409"></a>03409 <span class="comment">     */</span>
-<a name="l03410"></a>03410     <span class="keywordflow">for</span> ( j = 0 ; j < slit_length ; j++ )
-<a name="l03411"></a>03411     {
-<a name="l03412"></a>03412         <span class="comment">/* now go through the columns and determine the slitlet positions by</span>
-<a name="l03413"></a>03413 <span class="comment">         * calculating the sinfo_median of the found positions</span>
-<a name="l03414"></a>03414 <span class="comment">         */</span>
-<a name="l03415"></a>03415         n = 0 ;
-<a name="l03416"></a>03416         <span class="keywordflow">for</span> ( col = sinfo_new_nint(sinfo_slit_pos[j][0])+ 1 ; 
-<a name="l03417"></a>03417               col < sinfo_new_nint(sinfo_slit_pos[j][1]) -1 ; col++ )
-<a name="l03418"></a>03418         {
-<a name="l03419"></a>03419             rowpos[n] = (pixelvalue)position[col] ;
-<a name="l03420"></a>03420             n++ ;
-<a name="l03421"></a>03421         }
-<a name="l03422"></a>03422         slitposition[j] = (int)sinfo_new_median(rowpos, n) ;
-<a name="l03423"></a>03423         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l03424"></a>03424 
-<a name="l03425"></a>03425         {
-<a name="l03426"></a>03426             init1 = 0 ;
-<a name="l03427"></a>03427             col_first = sinfo_new_nint( sinfo_slit_pos[j][left_right] ) - 
-<a name="l03428"></a>03428                                         box_length/2 ;
-<a name="l03429"></a>03429             col_last  = sinfo_new_nint( sinfo_slit_pos[j][left_right] ) + 
-<a name="l03430"></a>03430                         box_length/2 ;
-<a name="l03431"></a>03431             <span class="keywordflow">if</span> ( col_first < 0 )
-<a name="l03432"></a>03432             {
-<a name="l03433"></a>03433                 col_first = 0 ;
-<a name="l03434"></a>03434                 init1 = 1 ;
-<a name="l03435"></a>03435             }
-<a name="l03436"></a>03436             <span class="keywordflow">if</span> ( col_last > ilx )
-<a name="l03437"></a>03437             {
-<a name="l03438"></a>03438                 col_last = ilx ;
-<a name="l03439"></a>03439                 init1 = 1 ;
-<a name="l03440"></a>03440             }
-<a name="l03441"></a>03441             <span class="keywordflow">if</span> ( col_last - col_first <= 0 )
-<a name="l03442"></a>03442             {
-<a name="l03443"></a>03443                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" first and last column wrong!"</span> ) ;
-<a name="l03444"></a>03444                 <span class="keywordflow">return</span> -1 ;
-<a name="l03445"></a>03445             }
-<a name="l03446"></a>03446             box_buffer = sinfo_new_vector( col_last - col_first ) ;
-<a name="l03447"></a>03447             m = 0 ;
-<a name="l03448"></a>03448             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l03449"></a>03449             {
-<a name="l03450"></a>03450                 <span class="keywordflow">for</span>( col = col_first ; col < col_last ; col++ )
-<a name="l03451"></a>03451                 {
-<a name="l03452"></a>03452                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;
-<a name="l03453"></a>03453                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;
-<a name="l03454"></a>03454                     <span class="keywordflow">if</span> ( row_first < 0 )
-<a name="l03455"></a>03455                     {
-<a name="l03456"></a>03456                         row_first = 0 ;
-<a name="l03457"></a>03457                     }
-<a name="l03458"></a>03458                     <span class="keywordflow">if</span> ( row_last >= ily  )
-<a name="l03459"></a>03459                     {
-<a name="l03460"></a>03460                         row_last = ily - 1 ;
-<a name="l03461"></a>03461                     }
-<a name="l03462"></a>03462                     maxval = -FLT_MAX ;
-<a name="l03463"></a>03463                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )
-<a name="l03464"></a>03464                     {
-<a name="l03465"></a>03465                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l03466"></a>03466                         {
-<a name="l03467"></a>03467                             maxval = pidata[col + ilx*row] ;
-<a name="l03468"></a>03468                         }
-<a name="l03469"></a>03469                     }
-<a name="l03470"></a>03470                     box_buffer->data[m] = maxval ;
-<a name="l03471"></a>03471                     m++ ;
-<a name="l03472"></a>03472                 }
-<a name="l03473"></a>03473             }
-<a name="l03474"></a>03474             <span class="keywordflow">else</span>
-<a name="l03475"></a>03475             {
-<a name="l03476"></a>03476                 <span class="keywordflow">for</span>( col = col_last-1 ; col >= col_first ; col-- )
-<a name="l03477"></a>03477                 {
-<a name="l03478"></a>03478                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;
-<a name="l03479"></a>03479                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;
-<a name="l03480"></a>03480                     <span class="keywordflow">if</span> ( row_first < 0 )
-<a name="l03481"></a>03481                     {
-<a name="l03482"></a>03482                         row_first = 0 ;
-<a name="l03483"></a>03483                     }
-<a name="l03484"></a>03484                     <span class="keywordflow">if</span> ( row_last >= ily  )
-<a name="l03485"></a>03485                     {
-<a name="l03486"></a>03486                         row_last = ily - 1 ;
-<a name="l03487"></a>03487                     }
-<a name="l03488"></a>03488                     maxval = -FLT_MAX ;
-<a name="l03489"></a>03489                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )
-<a name="l03490"></a>03490                     {
-<a name="l03491"></a>03491                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l03492"></a>03492                         {
-<a name="l03493"></a>03493                             maxval = pidata[col + ilx*row] ;
-<a name="l03494"></a>03494                         }
-<a name="l03495"></a>03495                     }
-<a name="l03496"></a>03496                     box_buffer->data[m] = maxval ;
-<a name="l03497"></a>03497                     m++ ;
-<a name="l03498"></a>03498                 }
-<a name="l03499"></a>03499             }
-<a name="l03500"></a>03500 
-<a name="l03501"></a>03501             xdat=(<span class="keywordtype">float</span> *)cpl_calloc( box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>));
-<a name="l03502"></a>03502             wdat=(<span class="keywordtype">float</span> *)cpl_calloc( box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>));
-<a name="l03503"></a>03503             mpar=(<span class="keywordtype">int</span> *)  cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l03504"></a>03504 
-<a name="l03505"></a>03505             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l03506"></a>03506             minval =  FLT_MAX ;
-<a name="l03507"></a>03507             maxval = -FLT_MAX ;
-<a name="l03508"></a>03508             <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l03509"></a>03509             {
-<a name="l03510"></a>03510                 xdat[i] = i ;
-<a name="l03511"></a>03511                 wdat[i] = 1.0 ;
-<a name="l03512"></a>03512                 <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )
-<a name="l03513"></a>03513                 {
-<a name="l03514"></a>03514                     minval = box_buffer -> data[i] ;
-<a name="l03515"></a>03515                 }
-<a name="l03516"></a>03516                 <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )
-<a name="l03517"></a>03517                 {
-<a name="l03518"></a>03518                     maxval = box_buffer -> data[i] ;
-<a name="l03519"></a>03519                 }
-<a name="l03520"></a>03520             }
-<a name="l03521"></a>03521             fitpar[2] = minval ;
-<a name="l03522"></a>03522             fitpar[3] = maxval ;
-<a name="l03523"></a>03523             <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l03524"></a>03524 <span class="comment">             * if we have too few left background values (at the image edges)</span>
-<a name="l03525"></a>03525 <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span>
-<a name="l03526"></a>03526 <span class="comment">             * values in order to get a good fit</span>
-<a name="l03527"></a>03527 <span class="comment">             */</span>
-<a name="l03528"></a>03528 
-<a name="l03529"></a>03529             <span class="keywordflow">if</span> ( init1 == 1 )
-<a name="l03530"></a>03530             {
-<a name="l03531"></a>03531                 n_buf = box_buffer->n_elements + box_length/2 ;
-<a name="l03532"></a>03532                 in_buffer = sinfo_new_vector( n_buf ) ;
-<a name="l03533"></a>03533                 <span class="keywordflow">for</span> ( i = 0 ; i < box_length/2 ; i++ )
-<a name="l03534"></a>03534                 {
-<a name="l03535"></a>03535                     in_buffer -> data[i] = minval ;
-<a name="l03536"></a>03536                 }
-<a name="l03537"></a>03537                 shift = 0 ;
-<a name="l03538"></a>03538                 <span class="keywordflow">for</span> ( i = box_length/2 ; i < n_buf ; i++ )
-<a name="l03539"></a>03539                 {
-<a name="l03540"></a>03540                     in_buffer -> data[i] = box_buffer -> data[shift] ;
-<a name="l03541"></a>03541                     shift++ ;
-<a name="l03542"></a>03542                 }
-<a name="l03543"></a>03543                 sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l03544"></a>03544                 box_buffer = sinfo_new_vector ( n_buf ) ;
-<a name="l03545"></a>03545                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )
-<a name="l03546"></a>03546                 {
-<a name="l03547"></a>03547                     box_buffer -> data[i] = in_buffer -> data[i] ;
-<a name="l03548"></a>03548                 }
-<a name="l03549"></a>03549                 sinfo_new_destroy_vector ( in_buffer ) ;
-<a name="l03550"></a>03550             }
-<a name="l03551"></a>03551             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l03552"></a>03552             fitpar[0] = (float)box_buffer->n_elements/2. - 1. ;
-<a name="l03553"></a>03553             fitpar[1] = (<span class="keywordtype">float</span>)box_buffer->n_elements/2. + 1. ;
-<a name="l03554"></a>03554 
-<a name="l03555"></a>03555             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l03556"></a>03556             {
-<a name="l03557"></a>03557                 mpar[i] = 1 ;
-<a name="l03558"></a>03558                 dervpar[i] = 0. ;
-<a name="l03559"></a>03559             }
-<a name="l03560"></a>03560 
-<a name="l03561"></a>03561             xdim     = XDIMA ;
-<a name="l03562"></a>03562             ndat     = box_buffer->n_elements ;
-<a name="l03563"></a>03563             numpar   = NPAR ;
-<a name="l03564"></a>03564             tol      = TOLA ;
-<a name="l03565"></a>03565             lab      = LABA ;
-<a name="l03566"></a>03566             its      = ITSA ;
-<a name="l03567"></a>03567 
-<a name="l03568"></a>03568             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l03569"></a>03569             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, 
-<a name="l03570"></a>03570                                                       box_buffer -> data, 
-<a name="l03571"></a>03571                                                       wdat, &ndat, fitpar,
-<a name="l03572"></a>03572                                                       dervpar, mpar, &numpar, 
-<a name="l03573"></a>03573                                                       &tol, &its, &lab )) )
-<a name="l03574"></a>03574             {
-<a name="l03575"></a>03575                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error "</span>
-<a name="l03576"></a>03576                                    <span class="stringliteral">"no.: %d in slitlet: %d\n"</span>, iters, j) ;
-<a name="l03577"></a>03577                 sinfo_new_destroy_vector(box_buffer) ;
-<a name="l03578"></a>03578                 cpl_free( xdat ) ;
-<a name="l03579"></a>03579                 cpl_free( wdat ) ;
-<a name="l03580"></a>03580                 cpl_free( mpar ) ;
-<a name="l03581"></a>03581                 continue ;
-<a name="l03582"></a>03582             }
-<a name="l03583"></a>03583             <span class="keywordflow">if</span> ( fitpar[1] <= fitpar[0] )
-<a name="l03584"></a>03584             {
-<a name="l03585"></a>03585                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"fit failed due to negative slope of "</span>
-<a name="l03586"></a>03586                                    <span class="stringliteral">"sinfo_new_edge function in slitlet: %d"</span>,j);
-<a name="l03587"></a>03587                 sinfo_new_destroy_vector(box_buffer) ;
-<a name="l03588"></a>03588                 cpl_free( xdat ) ;
-<a name="l03589"></a>03589                 cpl_free( wdat ) ;
-<a name="l03590"></a>03590                 cpl_free( mpar ) ;
-<a name="l03591"></a>03591                 continue ;
-<a name="l03592"></a>03592             }
-<a name="l03593"></a>03593 
-<a name="l03594"></a>03594             pos = (fitpar[0] + fitpar[1])/2. ;
-<a name="l03595"></a>03595             <span class="keywordflow">if</span> ( init1 == 1 )
-<a name="l03596"></a>03596             {
-<a name="l03597"></a>03597                 pos -= (float)box_length/2. ;
-<a name="l03598"></a>03598             }
-<a name="l03599"></a>03599 
-<a name="l03600"></a>03600             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l03601"></a>03601 <span class="comment">             * now compute the real slit positions using the guess positions</span>
-<a name="l03602"></a>03602 <span class="comment">             * if the fit did not work the guess positions are taken</span>
-<a name="l03603"></a>03603 <span class="comment">             * the same is done if the deviations are too big.</span>
-<a name="l03604"></a>03604 <span class="comment">             */</span>
-<a name="l03605"></a>03605             <span class="keywordflow">if</span> ( pos != 0. )
-<a name="l03606"></a>03606             {
-<a name="l03607"></a>03607                 <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l03608"></a>03608                 {
-<a name="l03609"></a>03609                     new_pos = (float)col_first + pos ;
-<a name="l03610"></a>03610                 }
-<a name="l03611"></a>03611                 <span class="keywordflow">else</span>
-<a name="l03612"></a>03612                 {
-<a name="l03613"></a>03613                     new_pos = (float)col_last-1 - pos ;
-<a name="l03614"></a>03614                 }
-<a name="l03615"></a>03615                 <span class="keywordflow">if</span> ( fabs(new_pos - sinfo_slit_pos[j][left_right]) < diff_tol )
-<a name="l03616"></a>03616                 {
-<a name="l03617"></a>03617                     sinfo_slit_pos[j][left_right] = new_pos ;
-<a name="l03618"></a>03618                 }
-<a name="l03619"></a>03619                 <span class="keywordflow">else</span>
-<a name="l03620"></a>03620                 {
-<a name="l03621"></a>03621                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" deviation bigger than tolerance,"</span>
-<a name="l03622"></a>03622                                        <span class="stringliteral">" take the estimated slitlet positiona"</span>
-<a name="l03623"></a>03623                                        <span class="stringliteral">" in slitlet: %d\n"</span>, j) ;
-<a name="l03624"></a>03624                 }
-<a name="l03625"></a>03625             }
-<a name="l03626"></a>03626 
-<a name="l03627"></a>03627             cpl_free( xdat ) ;
-<a name="l03628"></a>03628             cpl_free( wdat ) ;
-<a name="l03629"></a>03629             cpl_free( mpar ) ;
-<a name="l03630"></a>03630             sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l03631"></a>03631         }
-<a name="l03632"></a>03632     }
-<a name="l03633"></a>03633     cpl_free(position);
-<a name="l03634"></a>03634     <span class="keywordflow">return</span> 0 ;
-<a name="l03635"></a>03635 }
-<a name="l03636"></a>03636 
-<a name="l03637"></a>03637 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_absolute.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  14/11/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*        sinfo_absolute.c - routines to determine the absolute positions </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*        of the slitlets out of an emission line frame</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*   #include "absolute.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*   1) float sinfo_new_edge( float * xdat, float * parlist, </span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                             int * npar, int * ndat )</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*   2) void sinfo_new_edge_deriv( float * xdat, float * parlist, </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                  float * dervs, int * npar )</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*   3) static int sinfo_new_inv_mat_edge (void)</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*   4) static new_void sinfo_get_mat_edge ( float * xdat,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                                 int   * xdim,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                                 float * ydat,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                                 float * wdat,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                                 int   * ndat,</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*                                 float * fpar,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                                 float * epar,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                                 int   * npar )</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*   5) static int sinfo_new_get_vec_edge ( float * xdat,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                                int   * xdim,</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*                                float * ydat,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                                float * wdat,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                                int   * ndat,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                                float * fpar,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*                                float * epar,</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*                                int   * npar )</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*   6) int sinfo_new_lsqfit_edge ( float * xdat,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                        int   * xdim,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                        float * ydat,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                        float * wdat,</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*                        int   * ndat,</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                        float * fpar,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                        float * epar,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*                        int   * mpar,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*                        int   * npar,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                        float * tol ,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*                        int   * its ,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                        float * lab  )</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*   7) int sinfo_new_fit_slits_edge( cpl_image   * lineImage, </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                        FitParams ** par,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*                        float     ** sinfo_slit_pos,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*                        int          box_length,</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*                        float        y_box,</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*                        float        diff_tol )</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*   8) int sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*                                     float     ** sinfo_slit_pos,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                                     int          box_length,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*                                     float        y_box,</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*                                     float        diff_tol,</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*                                     int          low_pos,</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*                                     int          high_pos )</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*   1) calculates the value of a slope function with parameters </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*      parlist at the position xdat </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*   2) calculates the partial derivatives for a slope function with</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*      parameters parlist at position xdat </span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*      Numerische Mathematik, 1. Teil.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*   4) builds the sinfo_matrix </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*      built by get_mat_edge(), we only have to rescale it for the </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*      the diagonal gets the value 1 + labda.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*      the correction sinfo_vector.</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*   6) this is a routine for making a least-squares fit of a</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*      function to a set of data points. The method used is</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*      This method is a mixture of the steepest descent method </span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*      and the Taylor method.</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*   7) fits the beginning and end position of the slitlets</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*      by using non-linear least square fitting of a step function</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*      fits a step function to the slitlet edges exposed and indicated</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*      by the brightest emission lines. To achieve this, the fit</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*      parameters are used to find the brightest emission line</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*      and to get its position for each column.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*      The least squares fit is done by using a box smaller than</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*      the size of two slitlets</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*   8) fits the beginning and end position of the slitlets</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*      by using non-linear least square fitting of an sinfo_edge  function</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      fits a linear edge function to the slitlet edges exposed and indicated</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*      user given positions.</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*      The least squares fit is done by using a box smaller than</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*      the size of two slitlets </span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">#include "sinfo_absolute.h"</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment"> *                                 Defines</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="keyword">static</span> <span class="keywordtype">float</span>  sqrarg ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">#define SQR(a) (sqrarg = (a) , sqrarg*sqrarg)</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">#define XDIMA         1         </span><span class="comment">/* dimension of the x values */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span><span class="preprocessor">#define TOLA          0.001     </span><span class="comment">/* fitting tolerance */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor"></span><span class="preprocessor">#define LABA          0.1       </span><span class="comment">/* labda parameter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor"></span><span class="preprocessor">#define ITSA          200       </span><span class="comment">/* maximum number of iterations */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span><span class="preprocessor">#define LABFACA       10.0      </span><span class="comment">/* labda step factor */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMAXA       1.0e+10   </span><span class="comment">/* maximum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMINA       1.0e-10   </span><span class="comment">/* minimum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">#define NPAR          4         </span><span class="comment">/* number of fit parameters */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment"> *                                    Local variables</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="keyword">static</span> <span class="keywordtype">float</span>  slopewidth ;              <span class="comment">/* initial value for fit parameter 5: </span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">                                           width of linear slope */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment"> *                    Functions private to this module</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat_edge (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                            <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                            <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                            <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                            <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                            <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                            <span class="keywordtype">float</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">                           int   * npar*/</span> ) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                           <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                           <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                           <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                           <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                           <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                           <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                           <span class="keywordtype">int</span>   * npar ) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> sinfo_new_hat2 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> );</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> sinfo_new_hat1 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> );</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> sinfo_new_hat_deriv2(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                      <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> sinfo_new_hat_deriv1( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> sinfo_new_fit_slits1( cpl_image   * lineImage, </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                FitParams ** par,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>               <span class="keywordtype">float</span>        y_box );</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> sinfo_new_fit_slits( cpl_image   * lineImage, </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>               FitParams ** par,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>               <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>               <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>               <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>              <span class="keywordtype">float</span>        slope_width );</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> sinfo_new_fit_slits2( cpl_image   * lineImage, </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                FitParams ** par,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>               <span class="keywordtype">float</span>        diff_tol );</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> sinfo_new_edge ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordtype">float</span> return_value ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordtype">float</span> slope1 ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/* compute the slopes */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     slope1 = ( parlist[3] - parlist[2] ) / ( parlist[1] - parlist[0] ) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="comment">/* now build the hat function out of the parameters */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         return_value = parlist[2] ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[2] ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         return_value = parlist[3] ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         return_value = 0. ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">return</span> return_value ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> sinfo_new_hat2 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordtype">float</span> return_value ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordtype">float</span> slope1, slope2, slope3 ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="comment">/* compute the slopes */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     slope1 = ( parlist[6] - parlist[4] ) / ( parlist[1] - parlist[0] ) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     slope2 = ( parlist[7] - parlist[5] ) / ( parlist[3] - parlist[2] ) ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     slope3 = ( parlist[7] - parlist[6] ) / ( parlist[2] - parlist[1] ) ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="comment">/* now build the hat function out of the parameters */</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         return_value = parlist[4] ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[4] ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] && xdat[0] <= parlist[2] )</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         return_value = (xdat[0] - parlist[1]) * slope3 + parlist[6] ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[2] && xdat[0] <= parlist[3] )</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     {</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         return_value = (parlist[3] - xdat[0]) * slope2 + parlist[5] ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     }</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[3] )</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     {</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         return_value = parlist[5] ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         return_value = 0. ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordflow">return</span> return_value ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> }</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> sinfo_new_hat1 ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat*/</span> )</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordtype">float</span> return_value=0 ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordtype">float</span> slope1, slope2 ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>    <span class="comment">/* take only positive values for the fit parameters */</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="comment">/* compute the slopes */</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     slope1 = (parlist[4] - parlist[2]) / slopewidth ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     slope2 = (parlist[4] - parlist[3]) / slopewidth ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="comment">/* now build the hat function out of the parameters */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         return_value = parlist[2] ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[0] + slopewidth )</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         return_value = (xdat[0] - parlist[0]) * slope1 + parlist[2] ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] + slopewidth && </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>               xdat[0] <= parlist[1] - slopewidth )</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         return_value = parlist[4] ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] - slopewidth && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         return_value = (parlist[1] - xdat[0]) * slope2 + parlist[3] ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         return_value = parlist[3] ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="keywordflow">return</span> return_value ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>        </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> sinfo_new_edge_deriv( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     <span class="keywordtype">float</span> deriv1_slope1 ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     <span class="comment">/* compute the slopes */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     deriv1_slope1 =( parlist[3] - parlist[2] ) / SQR(parlist[1] - parlist[0]) ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     <span class="comment">/* now build the hat derivatives out of the parameters */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         dervs[2] = 1. ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         dervs[0] = ( xdat[0] - parlist[1] ) * deriv1_slope1  ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         dervs[1] = ( parlist[0] - xdat[0] ) * deriv1_slope1 ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         dervs[2] = ( parlist[0] - xdat[0] ) / ( parlist[1] - parlist[0] ) + 1.;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         dervs[3] = ( xdat[0] - parlist[0] ) / ( parlist[1] - parlist[0] ) ;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     }</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         dervs[3] = 1. ;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> }</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> sinfo_new_hat_deriv2(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                      <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordtype">float</span> deriv1_slope1 ;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="keywordtype">float</span> deriv1_slope2 ;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     <span class="keywordtype">float</span> deriv1_slope3 ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="comment">/* compute the slopes */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     deriv1_slope1 = ( parlist[6] - parlist[4] ) / SQR(parlist[1] - parlist[0]);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     deriv1_slope2 = ( parlist[7] - parlist[5] ) / SQR(parlist[3] - parlist[2]);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     deriv1_slope3 = ( parlist[7] - parlist[6] ) / SQR(parlist[2] - parlist[1]);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="comment">/* now build the hat derivatives out of the parameters */</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     {</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         dervs[4] = 1. ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>         dervs[5] = 0. ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         dervs[6] = 0. ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         dervs[7] = 0. ;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         dervs[0] = ( xdat[0] - parlist[1] ) * deriv1_slope1  ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         dervs[1] = ( parlist[0] - xdat[0] ) * deriv1_slope1 ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         dervs[4] = ( parlist[0] - xdat[0] ) / ( parlist[1] - parlist[0] ) + 1.;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         dervs[5] = 0. ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>         dervs[6] = ( xdat[0] - parlist[0] ) / ( parlist[1] - parlist[0] ) ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         dervs[7] = 0. ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     }</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] && xdat[0] <= parlist[2] )</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     {</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         dervs[1] = (xdat[0] - parlist[2]) * deriv1_slope3 ;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         dervs[2] = (parlist[1] - xdat[0]) * deriv1_slope3 ;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         dervs[4] = 0. ;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         dervs[5] = 0. ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>         dervs[6] = (parlist[1] - xdat[0]) / (parlist[2] - parlist[1]) + 1. ;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         dervs[7] = (xdat[0] - parlist[1]) / (parlist[2] - parlist[1]) ;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     }</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[2] && xdat[0] <= parlist[3] )</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         dervs[2] = ( parlist[3] - xdat[0] ) * deriv1_slope2 ;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         dervs[3] = ( xdat[0] - parlist[2] ) * deriv1_slope2 ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         dervs[4] = 0. ; </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>         dervs[5] = ( xdat[0] - parlist[3] ) / ( parlist[3] - parlist[2] ) + 1.;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         dervs[6] = 0. ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         dervs[7] = ( parlist[3] - xdat[0] ) / ( parlist[3] - parlist[2] ) ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[3] )</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     {</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         dervs[4] = 0. ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         dervs[5] = 1. ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>         dervs[6] = 0. ;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         dervs[7] = 0. ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> sinfo_new_hat_deriv1( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                       <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     <span class="comment">/* now build the hat derivatives out of the parameters */</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="keywordflow">if</span> ( xdat[0] <= parlist[0] )</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     {</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         dervs[2] = 1. ;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>         dervs[4] = 0. ;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     }</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] && xdat[0] <= parlist[0] + slopewidth )</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         dervs[0] = ( parlist[2] - parlist[4] ) / slopewidth ;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>         dervs[2] = (( parlist[0] - xdat[0] ) / slopewidth ) + 1. ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         dervs[4] = ( xdat[0] - parlist[0] ) / slopewidth ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     }</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[0] + slopewidth && xdat[0] <= </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>               parlist[1] - slopewidth )</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         dervs[3] = 0. ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         dervs[4] = 1. ;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] - slopewidth && xdat[0] <= parlist[1] )</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         dervs[1] = ( parlist[4] - parlist[3] ) / slopewidth ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         dervs[3] = (( xdat[0] - parlist[1] ) / slopewidth ) + 1. ;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         dervs[4] = ( parlist[1] - xdat[0] ) / slopewidth ; </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( xdat[0] > parlist[1] )</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>     {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         dervs[0] = 0. ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         dervs[1] = 0. ;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         dervs[2] = 0. ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         dervs[3] = 1. ;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         dervs[4] = 0. ;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     }</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>    </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> sinfo_new_inv_mat_edge (<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> {</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordtype">double</span> even ;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <span class="keywordtype">double</span> hv[NPAR] ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="keywordtype">double</span> mjk ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordtype">double</span> rowmax ;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordtype">int</span> evin ;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <span class="keywordtype">int</span> i, j, k, row ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="keywordtype">int</span> per[NPAR] ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>    </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <span class="comment">/* set permutation array */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         per[i] = i ;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     }</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         <span class="comment">/* determine largest element of a row */</span>                           </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>         rowmax = fabs ( matrix2[j][j] ) ;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>         row = j ;                         </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>         {</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>             {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                 rowmax = fabs( matrix2[i][j] ) ;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                 row = i ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>         }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="comment">/* determinant is zero! */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>         {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>             <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         }</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>         </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         <span class="comment">/* if the largest element is not on the diagonal, then permutate rows */</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         <span class="keywordflow">if</span> ( row > j )</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         {</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>             {</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>                 even = matrix2[j][k] ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                 matrix2[j][k] = matrix2[row][k] ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>                 matrix2[row][k] = even ;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>             }</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>             <span class="comment">/* keep track of permutation */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>             evin = per[j] ;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>             per[j] = per[row] ;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>             per[row] = evin ;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>         }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>         </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>         <span class="comment">/* modify column */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>         even = 1.0 / matrix2[j][j] ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>             matrix2[i][j] *= even ;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         }</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         matrix2[j][j] = even ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         {</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             {</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>             }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>             {</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>             }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         }</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>             {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>             }</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>             {</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>             }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     }</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="comment">/* finally, repermute the columns */</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             hv[per[k]] = matrix2[i][k] ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         {</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>             matrix2[i][k] = hv[k] ;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>         }</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     }</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         </div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     <span class="comment">/* all is well */</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> sinfo_new_get_mat_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                            <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                            <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                            <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                            <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>                            <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>                            <span class="keywordtype">float</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">                           int   * npar*/</span> )</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordtype">double</span> wd ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="keywordtype">double</span> yd ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     <span class="keywordtype">int</span> i, j, n ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     {</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   <span class="comment">/* zero matrix only on and </span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">                                         below diagonal */</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>         {</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>             matrix1[j][i] = 0.0 ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>         }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     <span class="comment">/* loop through data points */</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     {</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>         wn = wdat[n] ;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>         {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>             yd = ydat[n] - sinfo_new_edge( &xdat[(*xdim) * n], </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>                                            fpar<span class="comment">/*, npar, ndat*/</span> ) ;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>             sinfo_new_edge_deriv( &xdat[(*xdim) * n], fpar, epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>             {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                 {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>                     matrix1[j][i] += epar[parptr[i]] * wd ;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>                 }</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             }</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     }                   </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> }  </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                 </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>             </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> sinfo_new_get_vec_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>                           <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>                           <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>                           <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                           <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                           <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                           <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                           <span class="keywordtype">int</span>   * npar )</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     <span class="keywordtype">double</span> dj ;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     <span class="keywordtype">double</span> dy ;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     <span class="keywordtype">double</span> mii ;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordtype">double</span> mji ;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>     <span class="keywordtype">double</span> mjj ;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     <span class="keywordtype">int</span> i, j, n, r ;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         {</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>             <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         }</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         mjj = sqrt( mjj ) ;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         {</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             matrix2[i][j] = matrix2[j][i] = mji ;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         }</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     }    </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="keywordflow">if</span> ( (r = sinfo_new_inv_mat_edge()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     }</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>     </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>         epar[i] = fpar[i] ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     }</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="comment">/* loop to calculate correction sinfo_vector */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     {</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>         dj = 0.0 ;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         {</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>         }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>         mjj = sqrt ( mjj ) ;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         {</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>             mii = matrix1[i][i] ;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>             <span class="keywordflow">if</span> ( mii <= 0.0 )</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>             {</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>             }</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>             mii = sqrt( mii ) ;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>             dj += vec[i] * matrix2[j][i] / mjj / mii ;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>         }</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     }    </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>  </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="comment">/* loop through the data points */</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     {</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>         wn = wdat[n] ;               <span class="comment">/* get weight */</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>             dy = ydat[n] - sinfo_new_edge( &xdat[(*xdim) * n], epar</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>                                                 <span class="comment">/*, npar, ndat*/</span>) ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>             chi1 += wdat[n] * dy * dy ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> }   </div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> sinfo_new_lsqfit_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>                   <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>                   <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>                   <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>                   <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>                   <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>                   <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>                   <span class="keywordtype">int</span>   * mpar,</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>                   <span class="keywordtype">int</span>   * npar,</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>                   <span class="keywordtype">float</span> * tol ,</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>                   <span class="keywordtype">int</span>   * its ,</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>                   <span class="keywordtype">float</span> * lab  )</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> {</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordtype">int</span> i, n, r ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     itc   = 0 ;                    <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     found = 0 ;                    <span class="comment">/* reset */</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     {</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     {</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>         tolerance = *tol ;                <span class="comment">/* tolerance */</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     labda = fabs( *lab ) * LABFACA ;      <span class="comment">/* start value for mixing parameter */</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     {</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>         <span class="keywordflow">if</span> ( mpar[i] )</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>         {</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>             {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>             }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>         }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     }</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     {</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     }</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     {</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>         {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>             nuse ++ ;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     <span class="keywordflow">if</span> ( nfree >= nuse )</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     {</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     {</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         <span class="comment">/* initialize fpar array */</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ; </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         sinfo_new_get_mat_edge(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         r =  sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, ndat, </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>                                       fpar, epar, npar ) ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>         {</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>             <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         }</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>         {</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>         {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>             {</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>             }</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>                                      sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         }</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span></div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="comment">         * the sinfo_matrix and calculate the correction sinfo_vector. In the </span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment">         * inner loop</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="comment">         * better solution than the previous one. If so, we leave the inner loop</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="comment">         * else we increase labda ( give more weight to the steepest descent </span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> <span class="comment">         * method) calculate the correction sinfo_vector and check again. </span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="comment">         * After the inner loop</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         {      </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>             {</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>                 <span class="keywordflow">return</span> -4 ;               </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>             }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>             sinfo_new_get_mat_edge( xdat, xdim, ydat, wdat, ndat, </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>                                     fpar, epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>             </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">             * here we decrease labda since we may assume that each iteration</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> <span class="comment">             * brings us closer to the answer.</span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>             <span class="keywordflow">if</span> ( labda > LABMINA )</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>             {</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>                 labda = labda / LABFACA ;         <span class="comment">/* decrease labda */</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             }</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, ndat, </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                                          fpar, epar, npar ) ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>             <span class="keywordflow">if</span> ( (<span class="keywordtype">int</span>)fpar[1] - (<span class="keywordtype">int</span>)fpar[0] <= 0 && fpar[1] / fpar[0] > 0. )</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>                 fpar[1] += 1. ;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>                 continue ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>             } </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>             {</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>                 <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>             }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>             {</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="comment">                 * The next statement is based on experience, not on the </span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="comment">                 * mathematics of the problem. It is assumed that we have </span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">                 * reached convergence when the pure steepest descent method </span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> <span class="comment">                 * does not produce a better solution.</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                 <span class="keywordflow">if</span> ( labda > LABMAXA )    <span class="comment">/* assume solution found */</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                 {</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                     break ;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>                 }</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>                 labda = labda * LABFACA ;   <span class="comment">/* increase mixing parameter */</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>                 r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>                                              ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>                 <span class="keywordflow">if</span> ( (<span class="keywordtype">int</span>)fpar[1] - (<span class="keywordtype">int</span>)fpar[0] <= 0 && </div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>                      fpar[1] / fpar[0] > 0. )</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>                 {</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>                     fpar[1] += 1. ;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>                     continue ;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>                 } </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>                 {</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>                 }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>             }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>             <span class="keywordflow">if</span> ( labda <= LABMAXA )        <span class="comment">/* save old parameters */</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>             {</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>                 {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>                     fpar[i] = epar[i] ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>                 }</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>             }</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || </div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>                   (labda > LABMAXA) )</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>             {</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>                 <span class="comment">/*------------------------------------------------------------</span></div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">                 * using the pure Taylor method because we are very close to </span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">                 * the real solution.</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>                 labda = LABMINA ;              <span class="comment">/* for Taylor solution */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>                 sinfo_new_get_mat_edge ( xdat, xdim, ydat, wdat, ndat, </div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                                          fpar, epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>                 r = sinfo_new_get_vec_edge ( xdat, xdim, ydat, wdat, </div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>                                              ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span></div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                 {</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                 }</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>                 {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                 }</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>                 {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>                     {</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>                         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                     }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>                                              sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>                 }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>                 found = 1 ;                  <span class="comment">/* we found a solution */</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>             }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>         }</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     }</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> sinfo_new_fit_slits1( cpl_image   * lineImage, </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>                FitParams ** par,</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>                <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>                <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>                <span class="keywordtype">float</span>        y_box )</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> {</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     <span class="keywordtype">float</span>* position=NULL ;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     <span class="keywordtype">float</span> max_intensity ;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>     <span class="keywordtype">float</span> row_pos ;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     <span class="keywordtype">int</span>   col ;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>     <span class="keywordtype">int</span>   found, init1, init2 ;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>     <span class="keywordtype">int</span>   line ; </div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     <span class="keywordtype">int</span>   column ;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <span class="keywordtype">int</span>   agreed ;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     <span class="keywordtype">int</span>   bad_line ;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     <span class="keywordtype">float</span> fitpar[2*NPAR] ;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     {</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     }</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>     slit_length = (int) sqrt (ilx) ;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     {</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span>) ;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     }</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>     {</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span>) ;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>         <span class="keywordflow">return</span> -3 ;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>     }</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>     <span class="keywordflow">if</span> ( box_length <  slit_length ||</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>          box_length >= 3*slit_length )</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     {</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>         <span class="keywordflow">return</span> -4 ;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>     }</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     {</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>         <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     }</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> </div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> </div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">     * go through the first image columns and the fit parameters and find </span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">     *  the line with the highest intensity </span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     agreed = -1 ;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>     bad_line = -1 ;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>     <span class="keywordflow">while</span>( agreed == -1 )</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>         found = -1 ;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>         max_intensity = -FLT_MAX ;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>         {</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             {</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>                 {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>                     {</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>                         {</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>                             max_intensity = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>                             found = i ;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>                         }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>                     }</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>                 }</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>             }  </div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>         }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="comment">         * check if the found line is usable and if the neighbouring line </span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="comment">         * have intensity on near rows in neighbouring slitlets </span></div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>         line    = par[found]->line ;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>         column  = par[found]->column ;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>         row_pos = par[found]->fit_par[2] ;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         {</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>             {</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>                      par[i]->column == column + slit_length )</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>                 {</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>                          par[i]->fit_par[2] >= (row_pos - y_box) )</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>                     {</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>                         bad_line = line ;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>                     } </div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>                 }</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>             }</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>             <span class="keywordflow">if</span> ( bad_line != line )</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>             {</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                 agreed = 1 ;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>                 break ;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>             }</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>         }</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>         {</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>           <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>         }    </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     }</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keywordflow">if</span> ( agreed == -1 )</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     {</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>         <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     }    </div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     n  = 0 ;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     ed = 0 ;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>   </div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         {</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>             <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line == line )</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>             {</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>                 {</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>                     position[n] = par[i]->fit_par[2] ;</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>                     {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>                         sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>                         ed++ ;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) </div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>                         {</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>                         }</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>                     }</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>                     n++ ;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>                 }</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>             }</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>         }</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     }</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>     {</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     } </div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> </div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>     {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         {</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>             dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>         }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>         {</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>             dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>         }</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     }</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     k = 0 ;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     {</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>         {</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>             k++ ;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>             {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>             }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     }</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     <span class="keywordflow">if</span> ( k != slit_length - 1 )</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     {</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough clean slitlets found"</span>) ;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     } </div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     margin = ( box_length - slit_length ) / 2 ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     <span class="comment">/* now go through the slitlets and store the intensity in a </span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment">       buffer sinfo_vector */</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     <span class="keywordflow">for</span> ( j = 0 ; j < k ; j++ )</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>         m = 0 ;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         {</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>             {</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[0]] ;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>                 m++ ;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>             }</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>             fitpar[0] = 3. ;</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>             fitpar[1] = 5. ;</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>             fitpar[2] = (float) edgeclean[0] - 1. ;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>             fitpar[3] = (float) edgeclean[0] + 1. ;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>           </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>         }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k - 1 )</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>         {</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>             {</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>                 m++ ;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>             }</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>             fitpar[0] = (float) margin - 1. ;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>             fitpar[1] = (float) margin + 1. ;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>             fitpar[2] = (float) (edgeclean[j] - edgeclean[j-1] + margin) - 1. ;</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>             fitpar[3] = (float) (edgeclean[j] - edgeclean[j-1] + margin) + 1. ;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         }</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         <span class="comment">/*else if ( j == k - 1 )*/</span></div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>         {</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>             {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>                 m++ ;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>             }</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>             fitpar[0] = (float) margin - 1. ;</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>             fitpar[1] = (float) margin + 1. ;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>             fitpar[2] = (float) (ilx - edgeclean[k-1] + margin) - 3. ;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>             fitpar[3] = (float) (ilx - edgeclean[k-1] + margin) - 1. ;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>         }</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc(box_buffer -> n_elements,<span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc(box_buffer -> n_elements,<span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc(NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>         minval =  FLT_MAX ;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>         {</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>             xdat[i] = i ;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>             wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>             {</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>                 minval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>             }</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>             {</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>                 maxval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>             }</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>         }</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>         fitpar[4] = minval ;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>         fitpar[5] = minval ;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>         fitpar[6] = maxval ; </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>         fitpar[7] = maxval ;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>         <span class="comment">/* search for both positions of the half intensity of the </span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">           hat within the buffer */</span></div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>         init1 = -1 ; </div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>         init2 = -1 ;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>         {</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] >= ( maxval - minval ) / 2. )</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>             {</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>                 init1 = i ;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>                 break ;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>             }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>         }</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>         <span class="keywordflow">for</span> ( i = box_buffer->n_elements - 1 ; i >= 0  ; i-- )</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>         {</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] >= ( maxval + minval ) / 2. )</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>             {</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>                 init2 = i ;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>                 break ;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>             }</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>         }</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   </div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>         <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>       <span class="comment">/*  if ( init1 != -1 )</span></div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">            fitpar[0] = init1 - 1. ;</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="comment">            fitpar[1] = init1 + 1. ;</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment">        }</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">        if ( init2 != -1 )</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> <span class="comment">            fitpar[2] = init2 - 1. ;</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> <span class="comment">            fitpar[3] = init2 + 1. ;</span></div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> <span class="comment">        } */</span></div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span> </div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>         <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>         {</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>             dervpar[i] = 0. ;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>         }</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>      </div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>         xdim     = XDIMA ;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>         ndat     = box_buffer -> n_elements ;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>         numpar   = NPAR ;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>         tol      = TOLA ;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>         lab      = LABA ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>         its      = ITSA ;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>         </div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>         <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, </div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>                                                   box_buffer -> data, </div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>                                                   wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>                                                   dervpar, mpar, </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>                                                   &numpar, &tol, </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>                                                   &its, &lab )) )</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>         {</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"least squares fit failed, error no.: %d"</span>, </div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>                   iters) ;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>             <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>         }</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> </div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> </div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>         <span class="comment">/* take care of the column position of the fit boxes to get </span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> <span class="comment">           the absolute positions */</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>         {</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>             sinfo_slit_pos[0][0] = (fitpar[0] + fitpar[1]) / 2. ;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>             sinfo_slit_pos[0][1] = (fitpar[2] + fitpar[3]) / 2. ;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         }</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>         {</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>             sinfo_slit_pos[j][0] = (fitpar[0] + fitpar[1]) / 2. + </div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>                                    (<span class="keywordtype">float</span>)edgeclean[j-1] - (float)margin ;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>             sinfo_slit_pos[j][1] = (fitpar[2] + fitpar[3]) / 2. + </div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>                                    (<span class="keywordtype">float</span>)edgeclean[j-1] - (float)margin ;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>         }</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>      </div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>         sinfo_slit_pos[k][0] = (fitpar[0] + fitpar[1]) / 2.  + </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>                                (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin ;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>         sinfo_slit_pos[k][1] = (fitpar[2] + fitpar[3]) / 2. + </div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>                                (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin ;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> </div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>         cpl_free( xdat ) ;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>         cpl_free( wdat ) ;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>         cpl_free( mpar ) ;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>     }</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>         </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>     cpl_free( position );</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> </div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> }</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>                               </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> sinfo_new_fit_slits( cpl_image   * lineImage, </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>               FitParams ** par,</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>               <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>               <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>               <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>               <span class="keywordtype">float</span>        slope_width )</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     <span class="keywordtype">float</span>* position=NULL ;</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>     <span class="keywordtype">float</span> max_intensity ;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     <span class="keywordtype">float</span> row_pos ;</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>     <span class="keywordtype">int</span>   col ;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     <span class="keywordtype">int</span>   found ;</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     <span class="keywordtype">int</span>   line ; </div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>     <span class="keywordtype">int</span>   column ;</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>     <span class="keywordtype">int</span>   agreed ;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>     <span class="keywordtype">int</span>   bad_line ;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> </div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     {</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     }</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>     slit_length = (int) sqrt (ilx) ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>     {</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span> ) ;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     }</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> </div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     {</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>         <span class="keywordflow">return</span> -3 ;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     }</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> </div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     <span class="keywordflow">if</span> ( box_length <  slit_length ||</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>          box_length >= 3*slit_length )</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>         <span class="keywordflow">return</span> -4 ;</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     }</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> </div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>         <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>     }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>     <span class="keywordflow">if</span> ( slope_width <= 0. )</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>     {</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong width of linear slope given!"</span>) ;</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>         <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>     }</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>     <span class="comment">/* initialize module global variable slopewidth */</span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>     slopewidth = slope_width ;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> </div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">     * go through the first image columns and the fit parameters and find </span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">     * the line with the highest intensity </span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>     agreed = -1 ;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     bad_line = -1 ;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     <span class="keywordflow">while</span>( agreed == -1 )</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     {</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>         found = -1 ;</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>         max_intensity = -FLT_MAX ;</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>         {</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>             {</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>                 {</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                     {</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>                         {</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>                             max_intensity = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>                             found = i ;</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>                         }</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>                     }</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>                 }</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>             }  </div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>         }</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment">         * check if the found line is usable and if the neighbouring line </span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span> <span class="comment">         * have intensity on near rows in neighbouring slitlets </span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>         line    = par[found]->line ;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>         column  = par[found]->column ;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>         row_pos = par[found]->fit_par[2] ;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>         {</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>             {</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>                      par[i]->column == column + slit_length )</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                 {</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>                          par[i]->fit_par[2] >= (row_pos - y_box) )</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>                     {</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                         bad_line = line ;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>                     } </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>                 }</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>             }</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>             <span class="keywordflow">if</span> ( bad_line != line )</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>             {</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>                 agreed = 1 ;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>                 break ;</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>             }</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>         }</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>         {</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>           <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>         }    </div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>     }</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> </div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>  </div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>     <span class="keywordflow">if</span> ( agreed == -1 )</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>     {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>     }    </div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>  </div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     n  = 0 ;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>     ed = 0 ;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>     {</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>         {</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>             <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line == line )</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>             {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>                 {</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>                     position[n] = par[i]->fit_par[2] ;</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>                     {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>                         sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>                         ed++ ;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) </div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>                         {</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>                         }</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>                     }</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>                     n++ ;</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>                 }</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>             }</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>         }</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>     }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>     {</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>     } </div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> </div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>     {</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>         {</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>         }</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>         {</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>             dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>         }</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>         {</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>             dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>         }</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>     }</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>     </div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>     k = 0 ;</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>     {</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>         {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>             k++ ;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>             {</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>             }</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>         }</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>     }</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> </div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>     <span class="keywordflow">if</span> ( k != slit_length - 1 )</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>     {</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"not enough clean slitlets found"</span>) ;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>     } </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> </div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     margin = ( box_length - slit_length ) / 2 ;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="comment">/* now go through the slitlets and store the intensity in a buffer </span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="comment">       sinfo_vector */</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>     <span class="keywordflow">for</span> ( j = 0 ; j < k ; j++ )</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     {</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>         m = 0 ;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>         {</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>             {</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[0]] ;</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>                 m++ ;</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>             }</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>             <span class="comment">/* initial values for the fitted positions */</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>             fitpar[0] = 1. ;</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>             fitpar[1] = (float)edgeclean[0] ;</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>           </div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>         }</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k - 1 )</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>         {</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>             {</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>                 m++ ;</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>             }</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>             <span class="comment">/* initial values for the fitted positions */</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>             fitpar[0] = (float)margin ;</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>             fitpar[1] = (float)(edgeclean[j] - edgeclean[j-1] + margin ) ;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>         }</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>         <span class="comment">/*else if ( j == k - 1 )*/</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>         {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>             {</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>                 m++ ;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>             }</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>             <span class="comment">/* initial values for the fitted positions */</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>             fitpar[0] = (float)margin ;</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>             fitpar[1] = (float)(m - 1) ;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>         }</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> </div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>         xdat=(<span class="keywordtype">float</span> *) cpl_calloc( box_buffer -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>         wdat=(<span class="keywordtype">float</span> *) cpl_calloc( box_buffer -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>         mpar=(<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> </div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>         minval =  FLT_MAX ;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>         {</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>             xdat[i] = i ;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>             wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>             {</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>                 minval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>             }</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>             {</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>                 maxval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>             }</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>         }</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>         <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>         {</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>             dervpar[i] = 0. ;</div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>         }</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>      </div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>         xdim     = XDIMA ;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>         ndat     = box_buffer -> n_elements ;</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>         numpar   = NPAR ;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>         tol      = TOLA ;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>         lab      = LABA ;</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>         its      = ITSA ;</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>         </div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>         fitpar[2] = minval ;</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>         fitpar[3] = minval ;</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>         fitpar[4] = maxval ;</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> </div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>         <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, </div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>                                                   box_buffer -> data, </div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>                                                   wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>                                                   dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>                                                   &tol, &its, &lab )) )</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>         {</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"least squares fit failed, error no.: %d"</span>, </div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>                   iters) ;</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>             <span class="keywordflow">return</span> -9 ;</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>         }</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> </div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span> </div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>         <span class="comment">/* take care of the column position of the fit boxes </span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> <span class="comment">           to get the absolute positions */</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>         {</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>             sinfo_slit_pos[0][0] = fitpar[0] + slopewidth/2. ;</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>             sinfo_slit_pos[0][1] = fitpar[1] - slopewidth/2. ;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>         }</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>         {</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>             sinfo_slit_pos[j][0] = fitpar[0] + slopewidth/2. + </div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>                                    (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>             sinfo_slit_pos[j][1] = fitpar[1] - slopewidth/2. + </div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>                                    (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>         }</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> </div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>         sinfo_slit_pos[k][0] = fitpar[0] + slopewidth/2. + </div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>                                (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>         sinfo_slit_pos[k][1] = fitpar[1] - slopewidth/2. + </div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>                                (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>      </div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>         cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>         cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>         cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>     }</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>         </div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> </div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>     cpl_free( position );</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> }</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>                               </div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> sinfo_new_fit_slits2( cpl_image   * lineImage, </div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>                FitParams ** par,</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>                <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>                <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>                <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>                <span class="keywordtype">float</span>        diff_tol )</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> {</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>     <span class="keywordtype">float</span>* position=NULL ;</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>     Vector * half_buffer ;</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>     <span class="keywordtype">float</span> max_intensity ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>     <span class="keywordtype">float</span> row_pos ;</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>     <span class="keywordtype">int</span>   col ;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     <span class="keywordtype">int</span>   found, init1 ;</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>     <span class="keywordtype">int</span>   line ; </div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>     <span class="keywordtype">int</span>   nel, n_right, left_right ;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>     <span class="keywordtype">int</span>   column ;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>     <span class="keywordtype">int</span>   agreed ;</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>     <span class="keywordtype">int</span>   bad_line ;</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>     <span class="keywordtype">float</span> pos, last_pos ;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span> </div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> </div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>     {</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line image given!"</span> ) ;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     }</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> </div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>     slit_length = (int) sqrt (ilx) ;</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> </div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>     {</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no line fit parameters given!"</span> ) ;</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>     }</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     {</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>         <span class="keywordflow">return</span> -3 ;</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>     }</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span> </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>     <span class="keywordflow">if</span> ( box_length <  slit_length ||</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>          box_length >= 3*slit_length )</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>     {</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>         <span class="keywordflow">return</span> -4 ;</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>     }</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> </div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>     {</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>         <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>     }</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> </div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     <span class="keywordflow">if</span> ( diff_tol < 1. )</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     {</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"diff_tol too small!"</span> ) ;</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>         <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     }</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> </div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> </div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> <span class="comment">     * go through the first image columns and the fit parameters and find </span></div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> <span class="comment">     * the line with the highest intensity </span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>     agreed = -1 ;</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>     bad_line = -1 ;</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>     <span class="keywordflow">while</span>( agreed == -1 )</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>     {</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>         found = -1 ;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>         max_intensity = -FLT_MAX ;</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>         <span class="keywordflow">for</span> ( col = 0 ; col < box_length ; col++ )</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>         {</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>             {</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>                 {</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>                     {</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>                         {</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>                             max_intensity = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>                             found = i ;</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>                         }</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>                     }</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>                 }</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>             }  </div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>         }</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> </div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> <span class="comment">         * check if the found line is usable and if the neighbouring line </span></div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span> <span class="comment">         * have intensity on near rows in neighbouring slitlets </span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>         line    = par[found]->line ;</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>         column  = par[found]->column ;</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>         row_pos = par[found]->fit_par[2] ;</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>         {</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>             {</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && </div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>                      par[i]->column == column + slit_length )</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>                 {</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>                          par[i]->fit_par[2] >= (row_pos - y_box) )</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>                     {</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>                         bad_line = line ;</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>                     } </div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>                 }</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>             }</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>             <span class="keywordflow">if</span> ( bad_line != line )</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>             {</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>                 agreed = 1 ;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>                 break ;</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>             }</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>         }</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>         {</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>);</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>           <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>         }    </div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     }</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>  </div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>     <span class="keywordflow">if</span> ( agreed == -1 )</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>     {</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>     }    </div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>  </div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>     n  = 0 ;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>     ed = 0 ;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> </div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     {</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>         {</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>             {</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && par[i]->fit_par[1] > 0. )</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>                 {</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>                     position[n] = par[i]->fit_par[2] ;</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>                     {</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>                         sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>                         ed++ ;</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) </div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>                         {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>                         }</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>                     }</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>                     n++ ;</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>                 }</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>             }</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>         }</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>     }</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>     {</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough slitlets found"</span>) ;</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>     } </div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> </div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>     {</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>         {</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>         }</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>              (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>         {</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>             dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>         }</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>         <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>              (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>         {</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>             dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>         }</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     }</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>     </div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>     k = 0 ;</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>     {</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>         {</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>             k++ ;</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>             {</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>             }</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>         }</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>     }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> </div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>     <span class="keywordflow">if</span> ( k != slit_length - 1 )</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>     {</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough clean slitlets found"</span>) ;</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>     } </div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> </div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>     margin = ( box_length - slit_length ) / 2 ;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>     <span class="comment">/* now go through the slitlets and store the intensity in a </span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="comment">       buffer sinfo_vector */</span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>     {</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>         m = 0 ;</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>         {</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>             {</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>                 box_buffer->data[m] = pidata[col +ilx*pos_rowclean[0]] ;</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>                 m++ ;</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>             }</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>         }</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>         {</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>             {</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[j]] ;</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>                 m++ ;</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>             }</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>         }</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>         {</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>             {</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>                 box_buffer->data[m] = pidata[col + ilx*pos_rowclean[k]] ;</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>                 m++ ;</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>             }</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>         }</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> </div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>         { </div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>             nel = 0 ;</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>             {</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>                 nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>             }</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>             {</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>                 {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>                     nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>                 }</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>                 {</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>                     nel = box_buffer -> n_elements / 2 + 1 ;</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>                 }</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>             }</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> </div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>             <span class="comment">/* now split the buffer in the midth in a left and right </span></div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> <span class="comment">               part for fitting */</span></div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>             half_buffer = sinfo_new_vector( nel ) ;</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>             {</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>                 {</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>                     half_buffer -> data[i] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>                 }</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>             }</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>             {</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>                 n_right = 0 ;</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; </div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>                       i >= box_buffer -> n_elements - nel ; i-- )</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>                 {</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>                     half_buffer -> data[n_right] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                     n_right++ ;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>                 }</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>             }</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> </div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> </div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>             {</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>                 {</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>                     minval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>                 }</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>                 {</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>                     maxval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>                 }</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>             }</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span> </div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>             fitpar[2] = minval ;</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>             fitpar[3] = maxval ; </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> </div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>             <span class="comment">/* search for both positions of the half intensity of </span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span> <span class="comment">               the hat within the buffer */</span></div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>             init1 = -1 ; </div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>             {</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>                 {</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>                     init1 = i ;</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>                     break ;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>                 }</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>             }</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>             <span class="keywordflow">if</span> ( init1 != -1 )</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>             {</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>                 fitpar[0] = ((float)init1 - 1.) ;</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>                 fitpar[1] = ((float)init1 + 1.) ;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>             }</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> </div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>             {</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>             }</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>       </div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>             ndat     = nel ;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>             lab      = LABA ;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>             its      = ITSA ;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>          </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, </div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>                                                       half_buffer -> data, </div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>                                                       wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>                                                       dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>                                                       &tol, &its, &lab )) )</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>             { </div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span></div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error"</span></div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>                                    <span class="stringliteral">" no.: %d in slitlet: %d\n"</span>, iters, j) ;</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>                 fitpar[0] = ((float)init1 - 1.) ;</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>                 fitpar[1] = ((float)init1 + 1.) ;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>             }</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>             pos = (fitpar[0] + fitpar[1]) / 2. ;</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> </div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>             <span class="comment">/*---------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span></div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> <span class="comment">             * slitlets and associate the fit results with the absolute </span></div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> <span class="comment">             * positions in the image consider the difference of the fitted </span></div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> <span class="comment">             * slit position to the expected position and decide wether the </span></div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> <span class="comment">             * fit is taken or the expected value is taken.</span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>             {</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>                 <span class="comment">/* take care of the column position of the fit boxes </span></div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> <span class="comment">                   to get the absolute positions */</span></div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>                 {</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>                          (float)slit_length)) < diff_tol )</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>                     {</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>                         sinfo_slit_pos[0][0] = pos ;</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>                     }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>                     {</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span></div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>                                           <span class="stringliteral">" position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>                         <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>) edgeclean[0] - 1. - </div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>                              (<span class="keywordtype">float</span>)slit_length < 0. )</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>                         {</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>                             sinfo_slit_pos[0][0] = 0. ;</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>                         }</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>                         {</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>                             sinfo_slit_pos[0][0] = (float)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>                             (<span class="keywordtype">float</span>)slit_length ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>                         }</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>                     }</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>                 }</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>                 {</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>                     {</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>                         sinfo_slit_pos[j][0] = pos + (float)edgeclean[j-1] - </div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>                                                (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>                     }</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>                     else</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>                     {</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span></div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>                                           <span class="stringliteral">" position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>                         sinfo_slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>                     }</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>                 }</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>                 {</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>                     {</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>                         sinfo_slit_pos[k][0] = pos + (float)edgeclean[k-1] - </div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>                                                (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>                     }</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>                     else</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>                     {</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left"</span></div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>                                           <span class="stringliteral">" position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>                         sinfo_slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>                     }</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>                 }</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>             }</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>             {</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>                 <span class="comment">/* take care of the column position of the fit boxes </span></div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="comment">                   to get the absolute positions */</span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>                 {</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - </div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>                     {</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>                         sinfo_slit_pos[0][1] = (float)(box_buffer->n_elements - </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>                                                 1) - pos ;</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>                     }</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>                     {</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>                         sinfo_slit_pos[0][1] = (float)edgeclean[0] - 1. ;</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>                     }</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>                 }</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>                 {</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - </div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>                     {</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>                         sinfo_slit_pos[j][1] = (float)(box_buffer->n_elements -</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>                                         1) - pos</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>                     }</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>                     else</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>                     {</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted right "</span></div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>                                           <span class="stringliteral">"position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>                         sinfo_slit_pos[j][1] = (float)edgeclean[j] - 1. ;</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>                     }</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>                 }</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>                 {</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>                     {</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>                         last_pos = (float)(ilx - 1) ;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>                     }</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>                     {</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>                     }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - </div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>                                last_pos ) < diff_tol )</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>                     {</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>                         sinfo_slit_pos[k][1] = (float)(box_buffer->n_elements -</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>                                                1) - pos</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>                     }</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>                     else</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>                     {</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted right "</span></div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>                                           <span class="stringliteral">"position of slitlet %d\n"</span>, j) ;</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>                         sinfo_slit_pos[k][1] = last_pos ;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>                     }</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>                 }</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>             }</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> </div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>             sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>         }</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>     }</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>         </div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>     cpl_free(position);</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> }</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>                               </div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> sinfo_new_fit_slits_edge( cpl_image   * lineImage, </div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>                   FitParams ** par,</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>                   <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>                   <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>                   <span class="keywordtype">float</span>        diff_tol )</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> {</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>     <span class="keywordtype">float</span>* position=NULL ;</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>     Vector * half_buffer ;</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>     <span class="keywordtype">float</span> max_intensity ;</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>     <span class="keywordtype">float</span> row_pos ;</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>     <span class="keywordtype">int</span>   row, col ;</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>     <span class="keywordtype">int</span>   found, init1 ;</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>     <span class="keywordtype">int</span>   line ; </div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     <span class="keywordtype">int</span>   nel, n_right, left_right ;</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>     <span class="keywordtype">int</span>   column ;</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     <span class="keywordtype">int</span>   agreed ;</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>     <span class="keywordtype">int</span>   bad_line ;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>     <span class="keywordtype">float</span> pos, last_pos ;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> </div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> </div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>     {</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>     }</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span> </div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>     slit_length = (int) sqrt (ilx) ;</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> </div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>     {</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line fit parameters given!"</span> ) ;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>     }</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span> </div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>     {</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>         <span class="keywordflow">return</span> -3 ;</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>     }</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span> </div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>     <span class="keywordflow">if</span> ( box_length <  4 ||</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>          box_length >= 2*slit_length )</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>     {</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Must be 4 <= box_length < %d "</span>,2*slit_length ) ;</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" You have chosen box_length = %d "</span>,box_length);</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>         <span class="keywordflow">return</span> -4 ;</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>     }</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> </div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 3. )</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>     {</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" y_box=%f not in range (0,3]!"</span>,y_box);</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>         <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>     }</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> </div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>     <span class="keywordflow">if</span> ( diff_tol < 1. )</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     {</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" diff_tol too small!"</span> ) ;</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>         <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>     }</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span> </div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span></div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> </div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span> <span class="comment">     * go through the first image columns and the fit parameters and find </span></div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> <span class="comment">     * the line with the highest intensity </span></div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>     agreed = -1 ;</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>     bad_line = -1 ;</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>     <span class="keywordflow">while</span>( agreed == -1 )</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>     {</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>         found = -1 ;</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>         max_intensity = -FLT_MAX ;</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>         <span class="keywordflow">for</span> ( col = 0 ; col < slit_length ; col++ )</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>         {</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>             {</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i] -> line != bad_line )</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>                 {</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>                     {</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] >= 1. && </div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>                              par[i]->fit_par[2] > 0. )</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>                         {</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>                             max_intensity = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>                             found = i ;</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>                         }</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>                     }</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>                 }</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>             }  </div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>         }</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> </div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> <span class="comment">         * check if the found line is usable and if the neighbouring line </span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> <span class="comment">         * have intensity on near rows in neighbouring slitlets </span></div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>         line    = par[found]->line ;</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>         column  = par[found]->column ;</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>         row_pos = par[found]->fit_par[2] ;</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>         {</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>             {</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && </div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>                      par[i]->column == column + slit_length )</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>                 {</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>                          par[i]->fit_par[2] >= (row_pos - y_box) )</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>                     {</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>                         bad_line = line ;</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>                     } </div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>                 }</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>             }</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>             <span class="keywordflow">if</span> ( bad_line != line )</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>             {</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>                 agreed = 1 ;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>                 break ;</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>             }</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>         }</div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>         {</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in "</span></div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>                             <span class="stringliteral">"the first image columns"</span>) ;</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>             cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>             cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>             cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>             cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>             cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>         }    </div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>     }</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> </div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>  </div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>     <span class="keywordflow">if</span> ( agreed == -1 )</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>     {</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>     }    </div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>  </div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>     n  = 0 ;</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>     ed = 0 ;</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> </div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>     {</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>         {</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>             {</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0. && </div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>                      par[i]->fit_par[1] >= 1.  && </div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>                      par[i]->fit_par[2] > 0. )</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>                 {</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>                     position[n] = par[i]->fit_par[2] ;</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>                     <span class="keywordflow">if</span> ( n > 0 && fabs(position[n] - position[n-1]) > y_box )</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>                     {</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>                         sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>                         pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>                         ed++ ;</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>                         <span class="keywordflow">if</span> ( col >= ilx - slit_length - 5 ) </div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>                         {</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>                             pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>                         }</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>                     }</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>                     n++ ;</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>                 }</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>             }</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>         }</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>     }</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>     <span class="keywordflow">if</span> ( ed < (slit_length - 1) )</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>     {</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough slitlets found"</span>) ;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>     } </div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span> </div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>     {</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>         <span class="keywordflow">if</span> ( i == ed )</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>         {</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < slit_length - 3 ||</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > slit_length + 3 )</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>             {</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>                 dummyedge[i-1]   = -1 ;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>             }</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>             </div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>         }</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>         {</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>         }</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>         {</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>             continue ;</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>         }</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>         <span class="keywordflow">if</span> ( i < ed )</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>         {</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < slit_length - 3 ||</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>                  (sinfo_edge[i] - sinfo_edge[i-1]) > slit_length + 3 )</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>             {</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>                 dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>             }</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>         }</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>         <span class="keywordflow">if</span> ( i + 1 < ed && dummyedge[i] != -1 )</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>         {</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < slit_length - 3 ||</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>                  (sinfo_edge[i+1] - sinfo_edge[i]) > slit_length + 3 )</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>             {</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>                 dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>             }</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>         }</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>     }</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>     </div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>     k = 0 ;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>     {</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>         {</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>             k++ ;</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 6 ) )</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>             {</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>             }</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>         }</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>     }</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span> </div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>     <span class="keywordflow">if</span> ( k != slit_length - 1 )</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>     {</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough clean slitlets found"</span>) ;</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>     } </div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>     margin = box_length / 2 ;</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span> </div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> <span class="comment">     * now go through the slitlets, search along each column within a box with </span></div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> <span class="comment">     * half width y_box the maximum value and store these found values in a </span></div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> <span class="comment">     * buffer</span></div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>     {</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>         m = 0 ;</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>         {</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>             {</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>                 {</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>                     {</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>                     }</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>                 }</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>                 m++ ;</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>             }</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>         }</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>         {</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>             {</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>                 {</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>                     {</div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>                     }</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>                 }</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>                 m++ ;</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>             }</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>         }</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>         {</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>             {</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[k] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>                       row <= pos_rowclean[k] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>                 {</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>                     {</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>                     }</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>                 }</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>                 m++ ;</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>             }</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>         }</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> </div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>         { </div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>             nel = 0 ;</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>             {</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>                 nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>             }</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>             {</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>                 {</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>                     nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>                 }</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>                 {</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>                     nel = box_buffer -> n_elements / 2 + 1 ;</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>                 }</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>             }</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> </div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>             <span class="comment">/* now split the buffer in the midth in a left and right </span></div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="comment">               part for fitting */</span></div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>             half_buffer = sinfo_new_vector( nel ) ;</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>             {</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>                 {</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>                     half_buffer -> data[i] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>                 }</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>             }</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>             {</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>                 n_right = 0 ;</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; </div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>                       i >= box_buffer -> n_elements - nel ; i-- )</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>                 {</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>                     half_buffer -> data[n_right] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>                     n_right++ ;</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>                 }</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>             }</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> </div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> </div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>             {</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>                 {</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>                     minval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>                 }</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>                 {</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>                     maxval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>                 }</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>             }</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> </div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>             fitpar[2] = minval ;</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>             fitpar[3] = maxval ; </div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span> </div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>             <span class="comment">/* search for both positions of the half intensity of </span></div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> <span class="comment">               the hat within the buffer */</span></div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>             init1 = -1 ; </div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>             {</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>                 {</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>                     init1 = i ;</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>                     break ;</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>                 }</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>             }</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span> </div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>             <span class="keywordflow">if</span> ( init1 != -1 )</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>             {</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>                 fitpar[0] = ((float)init1 - 1.) ;</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>                 fitpar[1] = ((float)init1 + 1.) ;</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>             }</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> </div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>             {</div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>             }</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>       </div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>             ndat     = nel ;</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>             lab      = LABA ;</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>             its      = ITSA ;</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>          </div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, </div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>                                                       half_buffer -> data, </div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>                                                       wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>                                                       dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>                                                       &tol, &its, &lab )) )</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>             { </div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span></div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed, error "</span></div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>                                    <span class="stringliteral">"no.: %d in slitlet: %d"</span>, iters, j) ;</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>                 fitpar[0] = ((float)init1 - 1.) ;</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>                 fitpar[1] = ((float)init1 + 1.) ;</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>             }</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> </div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>             pos = (fitpar[0] + fitpar[1]) / 2. ;</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span> </div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>             <span class="comment">/*----------------------------------------------------------------- </span></div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span></div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> <span class="comment">             * slitlets and associate the fit results with the absolute </span></div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span> <span class="comment">             * positions in the image consider the difference of the fitted </span></div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span> <span class="comment">             * slit position to the expected position and decide wether the </span></div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> <span class="comment">             * fit is taken or the expected value is taken.</span></div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>             {</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>                 <span class="comment">/* take care of the column position of the fit boxes to get </span></div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> <span class="comment">                   the absolute positions */</span></div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>                 {</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>                          (float)slit_length)) < diff_tol )</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>                     {</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>                         sinfo_slit_pos[0][0] = pos ;</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>                     }</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>                     {</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>                                           <span class="stringliteral">"left position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>                         <span class="keywordflow">if</span> ((<span class="keywordtype">float</span>) edgeclean[0] - 1. - </div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>                             (<span class="keywordtype">float</span>)slit_length < 0. )</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>                         {</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>                             sinfo_slit_pos[0][0] = 0. ;</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>                         }</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>                         {</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>                             sinfo_slit_pos[0][0] = (float)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>                                                    (<span class="keywordtype">float</span>)slit_length ;</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>                         }</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>                     }</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>                 }</div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>                 {</div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>                     {</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>                         sinfo_slit_pos[j][0] = pos + (float)edgeclean[j-1] - </div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>                                                      (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>                     }</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>                     else</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>                     {</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>                         sinfo_slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>                     }</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>                 }</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>                 {</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>                     {</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>                         sinfo_slit_pos[k][0] = pos + (float)edgeclean[k-1] - </div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>                                                      (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>                     }</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>                     else</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>                     {</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted left "</span></div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>                                           <span class="stringliteral">"position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>                         sinfo_slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;</div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>                     }</div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>                 }</div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>             }</div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>             {</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>                 <span class="comment">/* take care of the column position of the fit boxes to </span></div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> <span class="comment">                   get the absolute positions */</span></div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>                 {</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - </div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>                     {</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>                        sinfo_slit_pos[0][1] = (float)(box_buffer->n_elements - </div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>                                                1) - pos ;</div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>                     }</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>                     {</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>                         sinfo_slit_pos[0][1] = (float)edgeclean[0] - 1. ;</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>                     }</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>                 }</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>                 {</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos</div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - </div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )</div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>                     {</div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>                         sinfo_slit_pos[j][1] = (float)(box_buffer->n_elements -</div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>                                                1) - pos</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin;</div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>                     }</div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>                     else</div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>                     {</div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>                         sinfo_slit_pos[j][1] = (float)edgeclean[j] - 1. ;</div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>                     }</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>                 }</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>                 {</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>                     {</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>                         last_pos = (float)(ilx - 1) ;</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>                     }</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>                     {</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>                     }</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos</div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - </div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>                                last_pos ) < diff_tol )</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>                     {</div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>                         sinfo_slit_pos[k][1] = (float)(box_buffer->n_elements -</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>                                                1) - pos</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>                     }</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>                     else</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>                     {</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>                         sinfo_slit_pos[k][1] = last_pos ;</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>                     }</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>                 }</div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>             }</div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> </div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>             sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>         }</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>     }</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>         </div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>     cpl_free( position );</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> }</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> </div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,</div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>                                <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>                                <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>                                <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>                                <span class="keywordtype">float</span>        diff_tol,</div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>                                <span class="keywordtype">int</span>          low_pos,</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>                                <span class="keywordtype">int</span>          high_pos )</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> {</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>     <span class="keywordtype">int</span>*   position=NULL ;</div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>     Vector * in_buffer ;</div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>     <span class="keywordtype">int</span>   found_row ;</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>     <span class="keywordtype">int</span>   row, col ;</div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>     <span class="keywordtype">int</span>   col_first, col_last ;</div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>     <span class="keywordtype">int</span>   row_first, row_last ;</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>     <span class="keywordtype">int</span>   i, j, m, n ;</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>     <span class="keywordtype">int</span>   init1 ;</div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>     <span class="keywordtype">int</span>   left_right ;</div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>     <span class="keywordtype">int</span>   n_buf, shift ;</div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>     <span class="keywordtype">float</span> pos ;</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>     <span class="keywordtype">float</span> new_pos ;</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>     <span class="keywordtype">int</span>   slitposition[SLITLENGTH] ;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>     pixelvalue rowpos[SLITLENGTH] ;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span> </div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>     slit_length = SLITLENGTH ; <span class="comment">/* this is too high: 64 */</span></div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>     slit_length = N_SLITLETS ; <span class="comment">/* this is better: 32 */</span></div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span> </div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> </div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>     {</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>     }</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> </div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>     <span class="keywordflow">if</span> ( NULL == sinfo_slit_pos )</div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>     {</div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>     }</div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span> </div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>     <span class="keywordflow">if</span> ( box_length < 4 ||</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>          box_length > 2*slit_length )</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>     {</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Must be 4 <= box_length < %d "</span>,2*slit_length ) ;</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" You have chosen box_length = %d"</span>,box_length);</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span> </div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>     }</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span> </div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )</div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>     {</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"You have chosen y_box=%f not in range (0,6]!"</span>,y_box);</div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>     }</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>     <span class="keywordflow">if</span> ( diff_tol <= 0. )</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>     {</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong diff_tol given!"</span> ) ;</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>     }</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> </div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>         <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || </div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>              high_pos <= 0 || high_pos > ily )</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>     {</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>     }</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> </div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>     <span class="comment">/* now search for the maximum between the given positions for each col */</span></div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> </div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>     {</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>         found_row = -1 ;</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>         <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>         {</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>             <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>             {</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>                 maxval = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>                 found_row = row ;</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>             }</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>         }</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>         <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>         {</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>             position[col] = found_row ;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>         }</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>         {</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>             position[col] = 0 ;</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>         }</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>     }</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span> </div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> <span class="comment">     * now go through the slitlets, search along each column within a box with</span></div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span> <span class="comment">     * half width y_box the maximum value and store these found values in a </span></div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span> <span class="comment">     * buffer</span></div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>     <span class="keywordflow">for</span> ( j = 0 ; j < slit_length ; j++ )</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>     {</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>         <span class="comment">/* now go through the columns and determine the slitlet positions by</span></div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span> <span class="comment">         * calculating the sinfo_median of the found positions</span></div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>         n = 0 ;</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>         <span class="keywordflow">for</span> ( col = sinfo_new_nint(sinfo_slit_pos[j][0])+ 1 ; </div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>               col < sinfo_new_nint(sinfo_slit_pos[j][1]) -1 ; col++ )</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>         {</div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>             rowpos[n] = (pixelvalue)position[col] ;</div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>             n++ ;</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>         }</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>         slitposition[j] = (int)sinfo_new_median(rowpos, n) ;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span> </div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>         {</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>             init1 = 0 ;</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>             col_first = sinfo_new_nint( sinfo_slit_pos[j][left_right] ) - </div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>                                         box_length/2 ;</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>             col_last  = sinfo_new_nint( sinfo_slit_pos[j][left_right] ) + </div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>                         box_length/2 ;</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>             <span class="keywordflow">if</span> ( col_first < 0 )</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>             {</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>                 col_first = 0 ;</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>                 init1 = 1 ;</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>             }</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>             <span class="keywordflow">if</span> ( col_last > ilx )</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>             {</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>                 col_last = ilx ;</div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>                 init1 = 1 ;</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>             }</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>             <span class="keywordflow">if</span> ( col_last - col_first <= 0 )</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>             {</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" first and last column wrong!"</span> ) ;</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>             }</div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>             box_buffer = sinfo_new_vector( col_last - col_first ) ;</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>             m = 0 ;</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>             {</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>                 <span class="keywordflow">for</span>( col = col_first ; col < col_last ; col++ )</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>                 {</div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>                     <span class="keywordflow">if</span> ( row_first < 0 )</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>                     {</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>                         row_first = 0 ;</div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>                     }</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>                     <span class="keywordflow">if</span> ( row_last >= ily  )</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>                     {</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>                         row_last = ily - 1 ;</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>                     }</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>                     {</div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>                         {</div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>                             maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>                         }</div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>                     }</div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>                     box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>                     m++ ;</div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>                 }</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>             }</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>             {</div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>                 <span class="keywordflow">for</span>( col = col_last-1 ; col >= col_first ; col-- )</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>                 {</div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>                     <span class="keywordflow">if</span> ( row_first < 0 )</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>                     {</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>                         row_first = 0 ;</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>                     }</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>                     <span class="keywordflow">if</span> ( row_last >= ily  )</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>                     {</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>                         row_last = ily - 1 ;</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>                     }</div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )</div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>                     {</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>                         {</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>                             maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>                         }</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>                     }</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>                     box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>                     m++ ;</div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>                 }</div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>             }</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> </div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>             xdat=(<span class="keywordtype">float</span> *)cpl_calloc( box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>             wdat=(<span class="keywordtype">float</span> *)cpl_calloc( box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>             mpar=(<span class="keywordtype">int</span> *)  cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> </div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>             <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>             {</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>                 <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>                 {</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>                     minval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>                 }</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>                 <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>                 {</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>                     maxval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>                 }</div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>             }</div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>             fitpar[2] = minval ;</div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>             fitpar[3] = maxval ;</div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>             <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span> <span class="comment">             * if we have too few left background values (at the image edges)</span></div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span> <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span></div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span> <span class="comment">             * values in order to get a good fit</span></div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span> </div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>             <span class="keywordflow">if</span> ( init1 == 1 )</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>             {</div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>                 n_buf = box_buffer->n_elements + box_length/2 ;</div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>                 in_buffer = sinfo_new_vector( n_buf ) ;</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < box_length/2 ; i++ )</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>                 {</div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>                     in_buffer -> data[i] = minval ;</div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>                 }</div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>                 shift = 0 ;</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>                 <span class="keywordflow">for</span> ( i = box_length/2 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>                 {</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>                     in_buffer -> data[i] = box_buffer -> data[shift] ;</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>                     shift++ ;</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>                 }</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>                 sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>                 box_buffer = sinfo_new_vector ( n_buf ) ;</div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>                 {</div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>                     box_buffer -> data[i] = in_buffer -> data[i] ;</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>                 }</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>                 sinfo_new_destroy_vector ( in_buffer ) ;</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>             }</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>             fitpar[0] = (float)box_buffer->n_elements/2. - 1. ;</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>             fitpar[1] = (<span class="keywordtype">float</span>)box_buffer->n_elements/2. + 1. ;</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>             {</div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>             }</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> </div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>             ndat     = box_buffer->n_elements ;</div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>             lab      = LABA ;</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>             its      = ITSA ;</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span> </div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_edge( xdat, &xdim, </div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>                                                       box_buffer -> data, </div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>                                                       wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>                                                       dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>                                                       &tol, &its, &lab )) )</div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>             {</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error "</span></div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>                                    <span class="stringliteral">"no.: %d in slitlet: %d\n"</span>, iters, j) ;</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>                 sinfo_new_destroy_vector(box_buffer) ;</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>                 cpl_free( xdat ) ;</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>                 cpl_free( wdat ) ;</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>                 cpl_free( mpar ) ;</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>                 continue ;</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>             }</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>             <span class="keywordflow">if</span> ( fitpar[1] <= fitpar[0] )</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>             {</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"fit failed due to negative slope of "</span></div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>                                    <span class="stringliteral">"sinfo_new_edge function in slitlet: %d"</span>,j);</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>                 sinfo_new_destroy_vector(box_buffer) ;</div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>                 cpl_free( xdat ) ;</div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>                 cpl_free( wdat ) ;</div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>                 cpl_free( mpar ) ;</div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>                 continue ;</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>             }</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span> </div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>             pos = (fitpar[0] + fitpar[1])/2. ;</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>             <span class="keywordflow">if</span> ( init1 == 1 )</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>             {</div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>                 pos -= (float)box_length/2. ;</div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>             }</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> </div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span> <span class="comment">             * now compute the real slit positions using the guess positions</span></div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> <span class="comment">             * if the fit did not work the guess positions are taken</span></div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> <span class="comment">             * the same is done if the deviations are too big.</span></div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>             <span class="keywordflow">if</span> ( pos != 0. )</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>             {</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>                 <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>                 {</div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>                     new_pos = (float)col_first + pos ;</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>                 }</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>                 {</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>                     new_pos = (float)col_last-1 - pos ;</div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>                 }</div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>                 <span class="keywordflow">if</span> ( fabs(new_pos - sinfo_slit_pos[j][left_right]) < diff_tol )</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>                 {</div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>                     sinfo_slit_pos[j][left_right] = new_pos ;</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>                 }</div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>                 {</div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" deviation bigger than tolerance,"</span></div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>                                        <span class="stringliteral">" take the estimated slitlet positiona"</span></div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>                                        <span class="stringliteral">" in slitlet: %d\n"</span>, j) ;</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>                 }</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>             }</div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> </div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>             sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>         }</div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>     }</div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>     cpl_free(position);</div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span> }</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span> </div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__absolute_8h_source.html b/html/sinfo__absolute_8h_source.html
index f8ed7b3..c976e9c 100644
--- a/html/sinfo__absolute_8h_source.html
+++ b/html/sinfo__absolute_8h_source.html
@@ -2,154 +2,185 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_absolute.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_absolute.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*****************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">* "@(#) $Id: sinfo_absolute.h,v 1.3 2007/08/20 10:01:05 amodigli Exp $"</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  14/11/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_ABSOLUTE_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ABSOLUTE_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/************************************************************************</span>
-<a name="l00038"></a>00038 <span class="comment"> * absolute.h</span>
-<a name="l00039"></a>00039 <span class="comment"> * routines to determine the absolute positions of the slitlets out of </span>
-<a name="l00040"></a>00040 <span class="comment"> * an emission line frame</span>
-<a name="l00041"></a>00041 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment"> */</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="comment">/*</span>
-<a name="l00045"></a>00045 <span class="comment"> * header files</span>
-<a name="l00046"></a>00046 <span class="comment"> */</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00052"></a>00052 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00054"></a>00054 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00074"></a>00074 <span class="keywordtype">float</span> 
-<a name="l00075"></a>00075 sinfo_new_edge(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat */</span>) ;
-<a name="l00076"></a>00076 
-<a name="l00090"></a>00090 <span class="keywordtype">float</span> 
-<a name="l00091"></a>00091 <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position...">sinfo_new_boltz</a> ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist ) ;
-<a name="l00092"></a>00092 
-<a name="l00111"></a>00111 <span class="keywordtype">void</span> 
-<a name="l00112"></a>00112 sinfo_new_edge_deriv(<span class="keywordtype">float</span> * xdat, 
-<a name="l00113"></a>00113                      <span class="keywordtype">float</span> * parlist, <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar */</span>) ;
-<a name="l00114"></a>00114 
-<a name="l00132"></a>00132 <span class="keywordtype">void</span> 
-<a name="l00133"></a>00133 <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist...">sinfo_new_boltz_deriv</a>( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, <span class="keywordtype">float</span> * dervs ) ;
-<a name="l00134"></a>00134 
-<a name="l00182"></a>00182 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a> ( <span class="keywordtype">float</span> * xdat,
-<a name="l00183"></a>00183              <span class="keywordtype">int</span>   * xdim,
-<a name="l00184"></a>00184              <span class="keywordtype">float</span> * ydat,
-<a name="l00185"></a>00185              <span class="keywordtype">float</span> * wdat,
-<a name="l00186"></a>00186              <span class="keywordtype">int</span>   * ndat,
-<a name="l00187"></a>00187              <span class="keywordtype">float</span> * fpar,
-<a name="l00188"></a>00188              <span class="keywordtype">float</span> * epar,
-<a name="l00189"></a>00189              <span class="keywordtype">int</span>   * mpar,
-<a name="l00190"></a>00190              <span class="keywordtype">int</span>   * npar,
-<a name="l00191"></a>00191              <span class="keywordtype">float</span> * tol ,
-<a name="l00192"></a>00192              <span class="keywordtype">int</span>   * its ,
-<a name="l00193"></a>00193              <span class="keywordtype">float</span> * lab  ) ;
-<a name="l00194"></a>00194 
-<a name="l00240"></a>00240 <span class="keywordtype">int</span> 
-<a name="l00241"></a>00241 sinfo_new_lsqfit_edge ( <span class="keywordtype">float</span> * xdat,
-<a name="l00242"></a>00242                   <span class="keywordtype">int</span>   * xdim,
-<a name="l00243"></a>00243                   <span class="keywordtype">float</span> * ydat,
-<a name="l00244"></a>00244                   <span class="keywordtype">float</span> * wdat,
-<a name="l00245"></a>00245                   <span class="keywordtype">int</span>   * ndat,
-<a name="l00246"></a>00246                   <span class="keywordtype">float</span> * fpar,
-<a name="l00247"></a>00247                   <span class="keywordtype">float</span> * epar,
-<a name="l00248"></a>00248                   <span class="keywordtype">int</span>   * mpar,
-<a name="l00249"></a>00249                   <span class="keywordtype">int</span>   * npar,
-<a name="l00250"></a>00250                   <span class="keywordtype">float</span> * tol ,
-<a name="l00251"></a>00251                   <span class="keywordtype">int</span>   * its ,
-<a name="l00252"></a>00252                   <span class="keywordtype">float</span> * lab  ) ;
-<a name="l00253"></a>00253 
-<a name="l00288"></a>00288 <span class="keywordtype">int</span> 
-<a name="l00289"></a>00289 sinfo_new_fit_slits_edge( cpl_image   * lineImage,
-<a name="l00290"></a>00290                   FitParams ** par,
-<a name="l00291"></a>00291                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00292"></a>00292                   <span class="keywordtype">int</span>          box_length,
-<a name="l00293"></a>00293                   <span class="keywordtype">float</span>        y_box,
-<a name="l00294"></a>00294                   <span class="keywordtype">float</span>        diff_tol ) ;
-<a name="l00295"></a>00295 
-<a name="l00329"></a>00329 <span class="keywordtype">int</span> 
-<a name="l00330"></a>00330 <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz</a>( cpl_image   * lineImage,
-<a name="l00331"></a>00331                    FitParams ** par,
-<a name="l00332"></a>00332                    <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00333"></a>00333                    <span class="keywordtype">int</span>          box_length,
-<a name="l00334"></a>00334                    <span class="keywordtype">float</span>        y_box,
-<a name="l00335"></a>00335                    <span class="keywordtype">float</span>        diff_tol ) ;
-<a name="l00336"></a>00336 
-<a name="l00358"></a>00358 <span class="keywordtype">int</span> 
-<a name="l00359"></a>00359 <a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz_single_line</a> ( cpl_image   * lineImage,
-<a name="l00360"></a>00360                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00361"></a>00361                   <span class="keywordtype">int</span>          box_length,
-<a name="l00362"></a>00362                   <span class="keywordtype">float</span>        y_box,
-<a name="l00363"></a>00363                   <span class="keywordtype">int</span>          low_pos,
-<a name="l00364"></a>00364                   <span class="keywordtype">int</span>          high_pos ) ;
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366 
-<a name="l00388"></a>00388 <span class="keywordtype">int</span> 
-<a name="l00389"></a>00389 <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz_with_estimate</a> ( cpl_image   * lineImage,
-<a name="l00390"></a>00390                                 <span class="keywordtype">float</span>     ** sinfo_slit_pos,
-<a name="l00391"></a>00391                                 <span class="keywordtype">int</span>          box_length,
-<a name="l00392"></a>00392                                 <span class="keywordtype">float</span>        y_box,
-<a name="l00393"></a>00393                                 <span class="keywordtype">float</span>        diff_tol,
-<a name="l00394"></a>00394                                 <span class="keywordtype">int</span>          low_pos,
-<a name="l00395"></a>00395                                 <span class="keywordtype">int</span>          high_pos ) ;
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 
-<a name="l00420"></a>00420 <span class="keywordtype">int</span> 
-<a name="l00421"></a>00421 sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,
-<a name="l00422"></a>00422                                 <span class="keywordtype">float</span>    ** sinfo_slit_pos,
-<a name="l00423"></a>00423                                 <span class="keywordtype">int</span>         box_length,
-<a name="l00424"></a>00424                                 <span class="keywordtype">float</span>       y_box,
-<a name="l00425"></a>00425                                 <span class="keywordtype">float</span>       diff_tol,
-<a name="l00426"></a>00426                                 <span class="keywordtype">int</span>         low_pos,
-<a name="l00427"></a>00427                                 <span class="keywordtype">int</span>         high_pos ) ;
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_absolute.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* "@(#) $Id: sinfo_absolute.h,v 1.3 2007/08/20 10:01:05 amodigli Exp $"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  14/11/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_ABSOLUTE_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ABSOLUTE_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * absolute.h</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * routines to determine the absolute positions of the slitlets out of </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * an emission line frame</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_new_edge(<span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar, int * ndat */</span>) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position xdat...">sinfo_new_boltz</a> ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist ) ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> sinfo_new_edge_deriv(<span class="keywordtype">float</span> * xdat, </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                      <span class="keywordtype">float</span> * parlist, <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar */</span>) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat...">sinfo_new_boltz_deriv</a>( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, <span class="keywordtype">float</span> * dervs ) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a> ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>              <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>              <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>              <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>              <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>              <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>              <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>              <span class="keywordtype">int</span>   * mpar,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>              <span class="keywordtype">int</span>   * npar,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>              <span class="keywordtype">float</span> * tol ,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>              <span class="keywordtype">int</span>   * its ,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>              <span class="keywordtype">float</span> * lab  ) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> sinfo_new_lsqfit_edge ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                   <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                   <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                   <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                   <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                   <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                   <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                   <span class="keywordtype">int</span>   * mpar,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                   <span class="keywordtype">int</span>   * npar,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                   <span class="keywordtype">float</span> * tol ,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                   <span class="keywordtype">int</span>   * its ,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                   <span class="keywordtype">float</span> * lab  ) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> sinfo_new_fit_slits_edge( cpl_image   * lineImage,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                   FitParams ** par,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                   <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                   <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                   <span class="keywordtype">float</span>        diff_tol ) ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz</a>( cpl_image   * lineImage,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                    FitParams ** par,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                    <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                    <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                    <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                    <span class="keywordtype">float</span>        diff_tol ) ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz_single_line</a> ( cpl_image   * lineImage,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                   <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                   <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                   <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                   <span class="keywordtype">int</span>          low_pos,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                   <span class="keywordtype">int</span>          high_pos ) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square fitting of a Bolt...">sinfo_new_fit_slits_boltz_with_estimate</a> ( cpl_image   * lineImage,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                                 <span class="keywordtype">float</span>     ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                                 <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                                 <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                                 <span class="keywordtype">float</span>        diff_tol,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                                 <span class="keywordtype">int</span>          low_pos,</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                                 <span class="keywordtype">int</span>          high_pos ) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> sinfo_new_fit_slits_edge_with_estimate ( cpl_image   * lineImage,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                 <span class="keywordtype">float</span>    ** sinfo_slit_pos,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                 <span class="keywordtype">int</span>         box_length,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                 <span class="keywordtype">float</span>       y_box,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                 <span class="keywordtype">float</span>       diff_tol,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                 <span class="keywordtype">int</span>         low_pos,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                 <span class="keywordtype">int</span>         high_pos ) ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__atmo__disp_8c_source.html b/html/sinfo__atmo__disp_8c_source.html
index 9a8cd94..f27e185 100644
--- a/html/sinfo__atmo__disp_8c_source.html
+++ b/html/sinfo__atmo__disp_8c_source.html
@@ -2,343 +2,374 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_atmo_disp.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_atmo_disp.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2011/12/08 16:15:40 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> */</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <string.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <math.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_atmo_disp.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keyword">struct </span>_disp_data
-<a name="l00040"></a>00040 {
-<a name="l00041"></a>00041     <span class="keywordtype">double</span> p1;
-<a name="l00042"></a>00042     <span class="keywordtype">double</span> d1;
-<a name="l00043"></a>00043     <span class="keywordtype">double</span> d2;
-<a name="l00044"></a>00044     <span class="keywordtype">double</span> N0;
-<a name="l00045"></a>00045     <span class="keywordtype">double</span> predelta;
-<a name="l00046"></a>00046     <span class="keywordtype">double</span> parallactic_shiftX;
-<a name="l00047"></a>00047     <span class="keywordtype">double</span> parallactic_shiftY;
-<a name="l00048"></a>00048 };
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>_disp_data disp_data;
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_disp_calc_N(<span class="keyword">const</span> disp_data* pdata, <span class="keywordtype">double</span> lambda);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00052"></a>00052 sinfo_disp_prepare_data(disp_data* pdata,
-<a name="l00053"></a>00053             <span class="keywordtype">double</span> lambda0,
-<a name="l00054"></a>00054             <span class="keywordtype">double</span> Tc,
-<a name="l00055"></a>00055             <span class="keywordtype">double</span> rh,
-<a name="l00056"></a>00056             <span class="keywordtype">double</span> airm,
-<a name="l00057"></a>00057             <span class="keywordtype">double</span> p,
-<a name="l00058"></a>00058             <span class="keywordtype">double</span> parallactic,
-<a name="l00059"></a>00059             <span class="keywordtype">double</span> pixelscale );
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00062"></a>00062 sinfo_disp_calc(disp_data* pdata, <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> *shiftx, <span class="keywordtype">double</span> *shiftY);
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_atmo_rotate_point(<span class="keywordtype">double</span>* x_value, <span class="keywordtype">double</span> * y_value, <span class="keywordtype">double</span> rot_angle);
-<a name="l00065"></a>00065 <span class="comment">/*------------------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00068"></a>00068 sinfo_disp_calc_N(<span class="keyword">const</span> disp_data* pdata, <span class="keywordtype">double</span> lambda)
-<a name="l00069"></a>00069 {
-<a name="l00070"></a>00070     <span class="keywordtype">double</span> s = 1.0 /lambda;
-<a name="l00071"></a>00071     <span class="keywordtype">double</span> s2 = s  * s;
-<a name="l00072"></a>00072     <span class="keywordtype">double</span> s3 = s2 * s;
-<a name="l00073"></a>00073     <span class="keywordtype">double</span> s4 = s3 * s;
-<a name="l00074"></a>00074     <span class="keywordtype">double</span> s5 = s4 * s;
-<a name="l00075"></a>00075     <span class="keywordtype">double</span> s6 = s5 * s;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="keywordtype">double</span> a = 83939.7/(130   - s2);
-<a name="l00078"></a>00078     <span class="keywordtype">double</span> b =   4547.3/(38.99 - s2);
-<a name="l00079"></a>00079     <span class="keywordtype">double</span> c = 6487.31 + 58.058*s2 - 0.71150*s4 + 0.08851*s6;
-<a name="l00080"></a>00080     <span class="keywordtype">double</span> N =  1e-8 * ( ((2371.34 + a + b) * pdata->d1)  +  ( c * pdata->d2));
-<a name="l00081"></a>00081     <span class="keywordflow">return</span> N;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 }
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00085"></a>00085 sinfo_disp_prepare_data(disp_data* pdata,
-<a name="l00086"></a>00086         <span class="keywordtype">double</span> lambda0,
-<a name="l00087"></a>00087         <span class="keywordtype">double</span> Tc,
-<a name="l00088"></a>00088         <span class="keywordtype">double</span> rh,
-<a name="l00089"></a>00089         <span class="keywordtype">double</span> airm,
-<a name="l00090"></a>00090         <span class="keywordtype">double</span> p,
-<a name="l00091"></a>00091         <span class="keywordtype">double</span> parallactic,
-<a name="l00092"></a>00092         <span class="keywordtype">double</span> pixelscale )
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094     <span class="keywordtype">double</span> ps,p2,p1,T,T2,T3;
-<a name="l00095"></a>00095     <span class="keywordtype">double</span> zenith;
-<a name="l00096"></a>00096 <span class="comment">//    const double PI_NUMBer = 3.1415926535;</span>
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     T  = Tc + 273.15;T2 = T  * T; T3 = T2 * T;
-<a name="l00099"></a>00099     ps = -10474 + (116.43 * T) - (0.43284 *T2) + (0.00053840 * T3);
-<a name="l00100"></a>00100     p2 = (rh/100)*ps;
-<a name="l00101"></a>00101     p1 = p - p2;
-<a name="l00102"></a>00102     pdata->d1 = (p1/T)*(1+p1*( (57.90e-8) - ((9.3250e-4)/T) + (0.25844/T2)));
-<a name="l00103"></a>00103     pdata->d2 = (p2/T)*(1+p2*(1+3.7e-4*p2)*( (-2.37321e-3) + (2.23366/T) - (710.792/T2) + ((7.75141e-4)/T3) )) ;
-<a name="l00104"></a>00104     pdata->N0 = sinfo_disp_calc_N(pdata, lambda0);
-<a name="l00105"></a>00105     zenith     = acos(1/airm);
-<a name="l00106"></a>00106     pdata->predelta      = ((tan(zenith)) / (PI_NUMB/180)) * 3600;
-<a name="l00107"></a>00107     pdata->parallactic_shiftX = sin ( (parallactic)* (PI_NUMB/180) ) / pixelscale;
-<a name="l00108"></a>00108     pdata->parallactic_shiftY = cos ( (parallactic)* (PI_NUMB/180) ) / pixelscale;
-<a name="l00109"></a>00109     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"atm disp N0[%f] d1[%f] d2[%f] pshiftX[%f] pshiftY[%f]"</span>,
-<a name="l00110"></a>00110             pdata->N0,pdata->d1, pdata->d2,  pdata->parallactic_shiftX ,
-<a name="l00111"></a>00111             pdata->parallactic_shiftY);
-<a name="l00112"></a>00112 }
-<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00114"></a>00114 sinfo_disp_calc(disp_data* pdata, <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> *shiftx, <span class="keywordtype">double</span> *shifty)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116     <span class="keywordtype">double</span> n = sinfo_disp_calc_N(pdata, lambda);
-<a name="l00117"></a>00117     <span class="keywordtype">double</span> delta = pdata->predelta * (n - pdata->N0);
-<a name="l00118"></a>00118     *shiftx = -delta * pdata->parallactic_shiftX;
-<a name="l00119"></a>00119     *shifty = delta * pdata->parallactic_shiftY ;
-<a name="l00120"></a>00120 }
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 cpl_error_code 
-<a name="l00123"></a>00123 sinfo_atm_dispersion_cube(cpl_imagelist* pCube,
-<a name="l00124"></a>00124         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube CRPIX3</span>
-<a name="l00125"></a>00125         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane CRVAL3</span>
-<a name="l00126"></a>00126         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span>
-<a name="l00127"></a>00127         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span>
-<a name="l00128"></a>00128         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span>
-<a name="l00129"></a>00129         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span>
-<a name="l00130"></a>00130         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span>
-<a name="l00131"></a>00131         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span>
-<a name="l00132"></a>00132         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span>
-<a name="l00133"></a>00133         )
-<a name="l00134"></a>00134 {
-<a name="l00135"></a>00135     cpl_error_code err = CPL_ERROR_NONE;
-<a name="l00136"></a>00136     <span class="keywordtype">int</span> cubesize = cpl_imagelist_get_size(pCube);
-<a name="l00137"></a>00137     <span class="keywordtype">double</span> * kernel = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>);
-<a name="l00138"></a>00138     disp_data ddata;
-<a name="l00139"></a>00139     <span class="keywordtype">int</span> i = 0;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     sinfo_disp_prepare_data(&ddata, centlambda, Tc, Rh, airm, p, parallactic, pixelscale);
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     <span class="keywordflow">for</span> (i = 0; i < cubesize; i++)
-<a name="l00144"></a>00144     {
-<a name="l00145"></a>00145         <span class="keywordtype">double</span> shiftx = 0;
-<a name="l00146"></a>00146         <span class="keywordtype">double</span> shifty = 0;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148         cpl_image* pnewImage = 0;
-<a name="l00149"></a>00149         <span class="comment">// 1. get an image</span>
-<a name="l00150"></a>00150         cpl_image* plane = cpl_imagelist_get(pCube, i);
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152         <span class="comment">// 2. calculate dispersion and shift</span>
-<a name="l00153"></a>00153         <span class="keywordtype">double</span> lambda = centlambda - (centpix - i) * pixelsz;
-<a name="l00154"></a>00154         sinfo_disp_calc(&ddata, lambda, &shiftx, &shifty);
-<a name="l00155"></a>00155         <span class="comment">// 3. aplly shift</span>
-<a name="l00156"></a>00156 <span class="comment">//      int szx = cpl_image_get_size_x(plane);</span>
-<a name="l00157"></a>00157         <span class="comment">//int szy = cpl_image_get_size_y(plane);</span>
-<a name="l00158"></a>00158         <span class="comment">//if (i % 10 == 0)</span>
-<a name="l00159"></a>00159             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" shift image #%d, dx[%f] dy[%f]"</span>, i, shiftx, shifty);
-<a name="l00160"></a>00160         pnewImage = sinfo_new_shift_image(
-<a name="l00161"></a>00161             plane,
-<a name="l00162"></a>00162             shiftx,
-<a name="l00163"></a>00163             shifty,
-<a name="l00164"></a>00164             kernel);
-<a name="l00165"></a>00165         err = cpl_imagelist_set(pCube, pnewImage, i);
-<a name="l00166"></a>00166         <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)
-<a name="l00167"></a>00167             <span class="keywordflow">break</span>;
-<a name="l00168"></a>00168     }
-<a name="l00169"></a>00169     cpl_free(kernel);
-<a name="l00170"></a>00170     <span class="keywordflow">return</span> err;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="comment">/*----------------------------------------------------</span>
-<a name="l00176"></a>00176 <span class="comment"> * Atmospheric correction using polynomial fit</span>
-<a name="l00177"></a>00177 <span class="comment"> *----------------------------------------------------*/</span>
-<a name="l00178"></a>00178 cpl_polynomial* 
-<a name="l00179"></a>00179 sinfo_atmo_load_polynom(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename)
-<a name="l00180"></a>00180 {
-<a name="l00181"></a>00181     <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_TEMPLATE = <span class="stringliteral">"col_%d"</span>;
-<a name="l00182"></a>00182     <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_VALUE = <span class="stringliteral">"value"</span>;
-<a name="l00183"></a>00183     cpl_polynomial* poly = NULL;
-<a name="l00184"></a>00184     cpl_table* ptable = NULL;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     ptable = cpl_table_load(filename, 1, 0);
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (ptable)
-<a name="l00188"></a>00188     {
-<a name="l00189"></a>00189         <span class="keywordtype">int</span> dim = 0;
-<a name="l00190"></a>00190         <span class="keywordtype">int</span> nrows = 0;
-<a name="l00191"></a>00191         <span class="keywordtype">int</span> i = 0;
-<a name="l00192"></a>00192         cpl_size* expo = NULL;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194         dim = cpl_table_get_ncol(ptable) - 1;
-<a name="l00195"></a>00195         poly = cpl_polynomial_new(dim );
-<a name="l00196"></a>00196         nrows = cpl_table_get_nrow(ptable);
-<a name="l00197"></a>00197         expo = cpl_malloc(dim * <span class="keyword">sizeof</span>(expo[0]));
-<a name="l00198"></a>00198         memset(&expo[0], 0, dim * <span class="keyword">sizeof</span>(expo[0]));
-<a name="l00199"></a>00199         <span class="keywordflow">for</span> (i = 0; i < nrows; i++)
-<a name="l00200"></a>00200         {
-<a name="l00201"></a>00201             <span class="keywordtype">int</span> j = 0;
-<a name="l00202"></a>00202             <span class="keywordtype">int</span> inull = 0;
-<a name="l00203"></a>00203             <span class="keywordtype">double</span> value = 0;
-<a name="l00204"></a>00204             <span class="keywordflow">for</span> (j = 0; j < dim; j++)
-<a name="l00205"></a>00205             {
-<a name="l00206"></a>00206                 <span class="keywordtype">char</span> col_name[255];
-<a name="l00207"></a>00207                 sprintf(col_name, COL_NAME_TEMPLATE, j);
-<a name="l00208"></a>00208                 expo[j] = cpl_table_get_int(ptable, col_name, i, &inull);
-<a name="l00209"></a>00209             }
-<a name="l00210"></a>00210             value = cpl_table_get(ptable, COL_NAME_VALUE, i, &inull);
-<a name="l00211"></a>00211             cpl_polynomial_set_coeff(poly, expo, value);
-<a name="l00212"></a>00212             <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)
-<a name="l00213"></a>00213             {
-<a name="l00214"></a>00214                 <span class="keywordflow">if</span> (poly)
-<a name="l00215"></a>00215                 {
-<a name="l00216"></a>00216                     sinfo_free_polynomial(&poly);
-<a name="l00217"></a>00217                 }
-<a name="l00218"></a>00218                 <span class="keywordflow">break</span>;
-<a name="l00219"></a>00219             }
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221         cpl_free(expo);
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223     sinfo_free_table(&ptable);
-<a name="l00224"></a>00224     <span class="keywordflow">return</span> poly;
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00228"></a>00228 sinfo_atmo_rotate_point(<span class="keywordtype">double</span>* x_value, <span class="keywordtype">double</span> * y_value, <span class="keywordtype">double</span> rot_angle)
-<a name="l00229"></a>00229 {
-<a name="l00230"></a>00230     <span class="keywordtype">double</span> newx = *x_value * cos(rot_angle) - *y_value * sin(rot_angle);
-<a name="l00231"></a>00231     <span class="keywordtype">double</span> newy = *x_value * sin(rot_angle) + *y_value * cos(rot_angle);
-<a name="l00232"></a>00232     *x_value = newx;
-<a name="l00233"></a>00233     *y_value = newy;
-<a name="l00234"></a>00234 }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 cpl_imagelist* 
-<a name="l00237"></a>00237 sinfo_atmo_apply_cube_polynomial_shift(
-<a name="l00238"></a>00238         cpl_polynomial* poly,
-<a name="l00239"></a>00239         cpl_imagelist* pCube,
-<a name="l00240"></a>00240         <span class="keywordtype">double</span> lambda0,
-<a name="l00241"></a>00241         <span class="keywordtype">double</span> airmass,
-<a name="l00242"></a>00242         <span class="keywordtype">double</span> parallactic, <span class="comment">// should be in radian</span>
-<a name="l00243"></a>00243         <span class="keywordtype">double</span> pixelsz,
-<a name="l00244"></a>00244         <span class="keywordtype">int</span> centpix)
-<a name="l00245"></a>00245 {
-<a name="l00246"></a>00246     cpl_imagelist* retcube = NULL;
-<a name="l00247"></a>00247     cpl_error_code  err = CPL_ERROR_NONE;
-<a name="l00248"></a>00248     cpl_vector* vparams = NULL;
-<a name="l00249"></a>00249     <span class="keywordtype">double</span> * kernel = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>);
-<a name="l00250"></a>00250     <span class="keywordtype">int</span> cubesize = 0;
-<a name="l00251"></a>00251     <span class="keywordtype">int</span> i = 0;
-<a name="l00252"></a>00252     <span class="comment">// the following two parameters are necessary for computing the shift</span>
-<a name="l00253"></a>00253     <span class="comment">// in case when polynom for H+K band is used for H or K</span>
-<a name="l00254"></a>00254     <span class="keywordtype">double</span> l0_shift_x = 0; <span class="comment">// shift for the central point by X</span>
-<a name="l00255"></a>00255     <span class="keywordtype">double</span> l0_shift_y = 0; <span class="comment">// shift for the central point by Y</span>
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     vparams = cpl_vector_new(2);
-<a name="l00258"></a>00258     cpl_vector_set(vparams, 0, airmass);
-<a name="l00259"></a>00259     cpl_vector_set(vparams, 1, lambda0);
-<a name="l00260"></a>00260     err = cpl_error_get_code();
-<a name="l00261"></a>00261     <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)
-<a name="l00262"></a>00262     {
-<a name="l00263"></a>00263         l0_shift_y = cpl_polynomial_eval(poly, vparams); <span class="comment">// North - South</span>
-<a name="l00264"></a>00264         l0_shift_x = 0; <span class="comment">// (EAST-WEST direction)</span>
-<a name="l00265"></a>00265         <span class="comment">// rotate the shift</span>
-<a name="l00266"></a>00266         sinfo_atmo_rotate_point(&l0_shift_x, &l0_shift_y, parallactic);
-<a name="l00267"></a>00267         cubesize = cpl_imagelist_get_size(pCube);
-<a name="l00268"></a>00268         err =  cpl_error_get_code();
-<a name="l00269"></a>00269     }
-<a name="l00270"></a>00270     <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)
-<a name="l00271"></a>00271     {
-<a name="l00272"></a>00272         retcube = cpl_imagelist_new();
-<a name="l00273"></a>00273         <span class="keywordflow">for</span> (i = 0; i < cubesize; i++)
-<a name="l00274"></a>00274         {
-<a name="l00275"></a>00275             <span class="comment">// calculate the wavelength</span>
-<a name="l00276"></a>00276             <span class="keywordtype">double</span> lambda = lambda0 - (centpix - i) * pixelsz;
-<a name="l00277"></a>00277             <span class="keywordtype">double</span> shift_y = 0;
-<a name="l00278"></a>00278             <span class="keywordtype">double</span> shift_x = 0;
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280             cpl_vector_set(vparams, 1, lambda);
-<a name="l00281"></a>00281             <span class="comment">// calc the shift</span>
-<a name="l00282"></a>00282             shift_y = cpl_polynomial_eval(poly, vparams); <span class="comment">// North - South</span>
-<a name="l00283"></a>00283             err = cpl_error_get_code();
-<a name="l00284"></a>00284             <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)
-<a name="l00285"></a>00285             {
-<a name="l00286"></a>00286                 <span class="keywordtype">double</span> res_shift_x = -(shift_x - l0_shift_x);
-<a name="l00287"></a>00287                 <span class="keywordtype">double</span> res_shift_y = -(shift_y - l0_shift_y);
-<a name="l00288"></a>00288                 cpl_image* plane = NULL;
-<a name="l00289"></a>00289                 cpl_image* pimresult = NULL;
-<a name="l00290"></a>00290                 <span class="comment">// rotate the shift</span>
-<a name="l00291"></a>00291                 sinfo_atmo_rotate_point(&res_shift_x, &res_shift_y, parallactic);
-<a name="l00292"></a>00292                 plane = cpl_imagelist_get(pCube, i);
-<a name="l00293"></a>00293                 pimresult = sinfo_new_shift_image(
-<a name="l00294"></a>00294                         plane,
-<a name="l00295"></a>00295                         res_shift_x, <span class="comment">// x shift</span>
-<a name="l00296"></a>00296                         res_shift_y, <span class="comment">// y shift</span>
-<a name="l00297"></a>00297                         kernel);
-<a name="l00298"></a>00298                 <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)
-<a name="l00299"></a>00299                 {
-<a name="l00300"></a>00300                     err = cpl_imagelist_set(retcube, pimresult, i);
-<a name="l00301"></a>00301                 }
-<a name="l00302"></a>00302                 <span class="keywordflow">else</span>
-<a name="l00303"></a>00303                 {
-<a name="l00304"></a>00304                     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error sinfo_new_shift_image, %s"</span>,
-<a name="l00305"></a>00305                                         cpl_error_get_where());
-<a name="l00306"></a>00306                 }
-<a name="l00307"></a>00307                 <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)
-<a name="l00308"></a>00308                     <span class="keywordflow">break</span>;
-<a name="l00309"></a>00309             }
-<a name="l00310"></a>00310             <span class="keywordflow">else</span>
-<a name="l00311"></a>00311             {
-<a name="l00312"></a>00312                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error polynomial_eval, %s"</span>,
-<a name="l00313"></a>00313                         cpl_error_get_where());
-<a name="l00314"></a>00314             }
-<a name="l00315"></a>00315             <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)
-<a name="l00316"></a>00316                 <span class="keywordflow">break</span>;
-<a name="l00317"></a>00317         }
-<a name="l00318"></a>00318     }
-<a name="l00319"></a>00319     <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)
-<a name="l00320"></a>00320     {
-<a name="l00321"></a>00321         sinfo_free_imagelist(&retcube);
-<a name="l00322"></a>00322         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error during shift planes in the cube, %s"</span>,
-<a name="l00323"></a>00323                 cpl_error_get_where());
-<a name="l00324"></a>00324     }
-<a name="l00325"></a>00325     sinfoni_free_vector(&vparams);
-<a name="l00326"></a>00326     cpl_free(kernel);
-<a name="l00327"></a>00327     <span class="keywordflow">return</span> retcube;
-<a name="l00328"></a>00328 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_atmo_disp.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2011/12/08 16:15:40 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_atmo_disp.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keyword">struct </span>_disp_data</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>     <span class="keywordtype">double</span> p1;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     <span class="keywordtype">double</span> d1;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordtype">double</span> d2;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     <span class="keywordtype">double</span> N0;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordtype">double</span> predelta;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="keywordtype">double</span> parallactic_shiftX;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     <span class="keywordtype">double</span> parallactic_shiftY;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> };</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_disp_data disp_data;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_disp_calc_N(<span class="keyword">const</span> disp_data* pdata, <span class="keywordtype">double</span> lambda);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_disp_prepare_data(disp_data* pdata,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>             <span class="keywordtype">double</span> lambda0,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>             <span class="keywordtype">double</span> Tc,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>             <span class="keywordtype">double</span> rh,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>             <span class="keywordtype">double</span> airm,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>             <span class="keywordtype">double</span> p,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>             <span class="keywordtype">double</span> parallactic,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>             <span class="keywordtype">double</span> pixelscale );</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_disp_calc(disp_data* pdata, <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> *shiftx, <span class="keywordtype">double</span> *shiftY);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_atmo_rotate_point(<span class="keywordtype">double</span>* x_value, <span class="keywordtype">double</span> * y_value, <span class="keywordtype">double</span> rot_angle);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*------------------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> sinfo_disp_calc_N(<span class="keyword">const</span> disp_data* pdata, <span class="keywordtype">double</span> lambda)</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">double</span> s = 1.0 /lambda;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordtype">double</span> s2 = s  * s;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">double</span> s3 = s2 * s;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordtype">double</span> s4 = s3 * s;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordtype">double</span> s5 = s4 * s;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordtype">double</span> s6 = s5 * s;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordtype">double</span> a = 83939.7/(130   - s2);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordtype">double</span> b =   4547.3/(38.99 - s2);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordtype">double</span> c = 6487.31 + 58.058*s2 - 0.71150*s4 + 0.08851*s6;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordtype">double</span> N =  1e-8 * ( ((2371.34 + a + b) * pdata->d1)  +  ( c * pdata->d2));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">return</span> N;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_disp_prepare_data(disp_data* pdata,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordtype">double</span> lambda0,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">double</span> Tc,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordtype">double</span> rh,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">double</span> airm,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">double</span> p,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">double</span> parallactic,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">double</span> pixelscale )</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">double</span> ps,p2,p1,T,T2,T3;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">double</span> zenith;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">//    const double PI_NUMBer = 3.1415926535;</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     T  = Tc + 273.15;T2 = T  * T; T3 = T2 * T;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     ps = -10474 + (116.43 * T) - (0.43284 *T2) + (0.00053840 * T3);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     p2 = (rh/100)*ps;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     p1 = p - p2;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     pdata->d1 = (p1/T)*(1+p1*( (57.90e-8) - ((9.3250e-4)/T) + (0.25844/T2)));</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     pdata->d2 = (p2/T)*(1+p2*(1+3.7e-4*p2)*( (-2.37321e-3) + (2.23366/T) - (710.792/T2) + ((7.75141e-4)/T3) )) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     pdata->N0 = sinfo_disp_calc_N(pdata, lambda0);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     zenith     = acos(1/airm);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     pdata->predelta      = ((tan(zenith)) / (PI_NUMB/180)) * 3600;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     pdata->parallactic_shiftX = sin ( (parallactic)* (PI_NUMB/180) ) / pixelscale;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     pdata->parallactic_shiftY = cos ( (parallactic)* (PI_NUMB/180) ) / pixelscale;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"atm disp N0[%f] d1[%f] d2[%f] pshiftX[%f] pshiftY[%f]"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>             pdata->N0,pdata->d1, pdata->d2,  pdata->parallactic_shiftX ,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>             pdata->parallactic_shiftY);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> sinfo_disp_calc(disp_data* pdata, <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> *shiftx, <span class="keywordtype">double</span> *shifty)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">double</span> n = sinfo_disp_calc_N(pdata, lambda);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">double</span> delta = pdata->predelta * (n - pdata->N0);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     *shiftx = -delta * pdata->parallactic_shiftX;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     *shifty = delta * pdata->parallactic_shiftY ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> cpl_error_code </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> sinfo_atm_dispersion_cube(cpl_imagelist* pCube,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube CRPIX3</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane CRVAL3</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         )</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_error_code err = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">int</span> cubesize = cpl_imagelist_get_size(pCube);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">double</span> * kernel = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     disp_data ddata;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     sinfo_disp_prepare_data(&ddata, centlambda, Tc, Rh, airm, p, parallactic, pixelscale);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">for</span> (i = 0; i < cubesize; i++)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         <span class="keywordtype">double</span> shiftx = 0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         <span class="keywordtype">double</span> shifty = 0;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         cpl_image* pnewImage = 0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         <span class="comment">// 1. get an image</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         cpl_image* plane = cpl_imagelist_get(pCube, i);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <span class="comment">// 2. calculate dispersion and shift</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         <span class="keywordtype">double</span> lambda = centlambda - (centpix - i) * pixelsz;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         sinfo_disp_calc(&ddata, lambda, &shiftx, &shifty);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <span class="comment">// 3. aplly shift</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">//      int szx = cpl_image_get_size_x(plane);</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         <span class="comment">//int szy = cpl_image_get_size_y(plane);</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="comment">//if (i % 10 == 0)</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" shift image #%d, dx[%f] dy[%f]"</span>, i, shiftx, shifty);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         pnewImage = sinfo_new_shift_image(</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>             plane,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>             shiftx,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>             shifty,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>             kernel);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         err = cpl_imagelist_set(pCube, pnewImage, i);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_free(kernel);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">return</span> err;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/*----------------------------------------------------</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment"> * Atmospheric correction using polynomial fit</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment"> *----------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> cpl_polynomial* </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> sinfo_atmo_load_polynom(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_TEMPLATE = <span class="stringliteral">"col_%d"</span>;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_VALUE = <span class="stringliteral">"value"</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_polynomial* poly = NULL;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_table* ptable = NULL;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     ptable = cpl_table_load(filename, 1, 0);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> (ptable)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         <span class="keywordtype">int</span> dim = 0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="keywordtype">int</span> nrows = 0;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         cpl_size* expo = NULL;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         dim = cpl_table_get_ncol(ptable) - 1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         poly = cpl_polynomial_new(dim );</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         nrows = cpl_table_get_nrow(ptable);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         expo = cpl_malloc(dim * <span class="keyword">sizeof</span>(expo[0]));</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         memset(&expo[0], 0, dim * <span class="keyword">sizeof</span>(expo[0]));</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         <span class="keywordflow">for</span> (i = 0; i < nrows; i++)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>             <span class="keywordtype">int</span> j = 0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>             <span class="keywordtype">int</span> inull = 0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>             <span class="keywordtype">double</span> value = 0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>             <span class="keywordflow">for</span> (j = 0; j < dim; j++)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>             {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                 <span class="keywordtype">char</span> col_name[255];</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                 sprintf(col_name, COL_NAME_TEMPLATE, j);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                 expo[j] = cpl_table_get_int(ptable, col_name, i, &inull);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>             }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>             value = cpl_table_get(ptable, COL_NAME_VALUE, i, &inull);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>             cpl_polynomial_set_coeff(poly, expo, value);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>             <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>             {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                 <span class="keywordflow">if</span> (poly)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                 {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                     sinfo_free_polynomial(&poly);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                 }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>             }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         cpl_free(expo);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     sinfo_free_table(&ptable);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordflow">return</span> poly;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> sinfo_atmo_rotate_point(<span class="keywordtype">double</span>* x_value, <span class="keywordtype">double</span> * y_value, <span class="keywordtype">double</span> rot_angle)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">double</span> newx = *x_value * cos(rot_angle) - *y_value * sin(rot_angle);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordtype">double</span> newy = *x_value * sin(rot_angle) + *y_value * cos(rot_angle);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     *x_value = newx;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     *y_value = newy;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> cpl_imagelist* </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> sinfo_atmo_apply_cube_polynomial_shift(</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         cpl_polynomial* poly,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         cpl_imagelist* pCube,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         <span class="keywordtype">double</span> lambda0,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         <span class="keywordtype">double</span> airmass,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         <span class="keywordtype">double</span> parallactic, <span class="comment">// should be in radian</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         <span class="keywordtype">double</span> pixelsz,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         <span class="keywordtype">int</span> centpix)</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_imagelist* retcube = NULL;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     cpl_error_code  err = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     cpl_vector* vparams = NULL;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordtype">double</span> * kernel = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordtype">int</span> cubesize = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="comment">// the following two parameters are necessary for computing the shift</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="comment">// in case when polynom for H+K band is used for H or K</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">double</span> l0_shift_x = 0; <span class="comment">// shift for the central point by X</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">double</span> l0_shift_y = 0; <span class="comment">// shift for the central point by Y</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     vparams = cpl_vector_new(2);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     cpl_vector_set(vparams, 0, airmass);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     cpl_vector_set(vparams, 1, lambda0);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     err = cpl_error_get_code();</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         l0_shift_y = cpl_polynomial_eval(poly, vparams); <span class="comment">// North - South</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         l0_shift_x = 0; <span class="comment">// (EAST-WEST direction)</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         <span class="comment">// rotate the shift</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         sinfo_atmo_rotate_point(&l0_shift_x, &l0_shift_y, parallactic);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         cubesize = cpl_imagelist_get_size(pCube);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         err =  cpl_error_get_code();</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         retcube = cpl_imagelist_new();</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <span class="keywordflow">for</span> (i = 0; i < cubesize; i++)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>             <span class="comment">// calculate the wavelength</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             <span class="keywordtype">double</span> lambda = lambda0 - (centpix - i) * pixelsz;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>             <span class="keywordtype">double</span> shift_y = 0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>             <span class="keywordtype">double</span> shift_x = 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>             cpl_vector_set(vparams, 1, lambda);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>             <span class="comment">// calc the shift</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>             shift_y = cpl_polynomial_eval(poly, vparams); <span class="comment">// North - South</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>             err = cpl_error_get_code();</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>             {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                 <span class="keywordtype">double</span> res_shift_x = -(shift_x - l0_shift_x);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                 <span class="keywordtype">double</span> res_shift_y = -(shift_y - l0_shift_y);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                 cpl_image* plane = NULL;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                 cpl_image* pimresult = NULL;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                 <span class="comment">// rotate the shift</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                 sinfo_atmo_rotate_point(&res_shift_x, &res_shift_y, parallactic);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                 plane = cpl_imagelist_get(pCube, i);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                 pimresult = sinfo_new_shift_image(</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                         plane,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                         res_shift_x, <span class="comment">// x shift</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                         res_shift_y, <span class="comment">// y shift</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                         kernel);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                 <span class="keywordflow">if</span> (err == CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                 {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                     err = cpl_imagelist_set(retcube, pimresult, i);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                 }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                 {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error sinfo_new_shift_image, %s"</span>,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                         cpl_error_get_where());</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                 }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                 <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error polynomial_eval, %s"</span>,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                         cpl_error_get_where());</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>             }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>             <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordflow">if</span> (err != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         sinfo_free_imagelist(&retcube);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error during shift planes in the cube, %s"</span>,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                 cpl_error_get_where());</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     sinfoni_free_vector(&vparams);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     cpl_free(kernel);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">return</span> retcube;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__atmo__disp_8h_source.html b/html/sinfo__atmo__disp_8h_source.html
index 063b64b..176752a 100644
--- a/html/sinfo__atmo__disp_8h_source.html
+++ b/html/sinfo__atmo__disp_8h_source.html
@@ -2,85 +2,116 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_atmo_disp.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_atmo_disp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2010/02/08 07:15:18 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00024"></a>00024 <span class="comment"> */</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_ATMO_DISP_H_</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ATMO_DISP_H_</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00029"></a>00029 cpl_error_code 
-<a name="l00030"></a>00030 sinfo_atm_dispersion_cube(cpl_imagelist* pCube,
-<a name="l00031"></a>00031         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube CRPIX3</span>
-<a name="l00032"></a>00032         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane CRVAL3</span>
-<a name="l00033"></a>00033         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span>
-<a name="l00034"></a>00034         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span>
-<a name="l00035"></a>00035         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span>
-<a name="l00036"></a>00036         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span>
-<a name="l00037"></a>00037         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span>
-<a name="l00038"></a>00038         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span>
-<a name="l00039"></a>00039         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span>
-<a name="l00040"></a>00040               );
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keywordtype">void</span> calcAtmosphericDispersion( <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> lambda0, <span class="keywordtype">double</span> *shiftX, <span class="keywordtype">double</span> *shiftY, <span class="keywordtype">double</span> *deltaR,
-<a name="l00044"></a>00044                    <span class="keywordtype">double</span> Tc,
-<a name="l00045"></a>00045                    <span class="keywordtype">double</span> rh,
-<a name="l00046"></a>00046                    <span class="keywordtype">double</span> airm,
-<a name="l00047"></a>00047                    <span class="keywordtype">double</span> p,
-<a name="l00048"></a>00048                    <span class="keywordtype">double</span> parallactic,
-<a name="l00049"></a>00049                    <span class="keywordtype">double</span> pixelscale);
-<a name="l00050"></a>00050 cpl_error_code sinfo_atmo_dispersion_cube(cpl_imagelist* pCube,
-<a name="l00051"></a>00051         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube</span>
-<a name="l00052"></a>00052         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane</span>
-<a name="l00053"></a>00053         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span>
-<a name="l00054"></a>00054         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span>
-<a name="l00055"></a>00055         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span>
-<a name="l00056"></a>00056         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span>
-<a name="l00057"></a>00057         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span>
-<a name="l00058"></a>00058         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span>
-<a name="l00059"></a>00059         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span>
-<a name="l00060"></a>00060         );
-<a name="l00061"></a>00061 cpl_imagelist* sinfo_atmo_apply_cube_polynomial_shift(
-<a name="l00062"></a>00062         cpl_polynomial* poly,
-<a name="l00063"></a>00063         cpl_imagelist* pCube,
-<a name="l00064"></a>00064         <span class="keywordtype">double</span> lambda0,
-<a name="l00065"></a>00065         <span class="keywordtype">double</span> airmass,
-<a name="l00066"></a>00066         <span class="keywordtype">double</span> parallactic, <span class="comment">// should be in radian</span>
-<a name="l00067"></a>00067         <span class="keywordtype">double</span> pixelsz,
-<a name="l00068"></a>00068         <span class="keywordtype">int</span> centpix);
-<a name="l00069"></a>00069 cpl_polynomial* sinfo_atmo_load_polynom(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename);
-<a name="l00070"></a>00070 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_ATM_DISP_H_ */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_atmo_disp.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2010/02/08 07:15:18 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_ATMO_DISP_H_</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ATMO_DISP_H_</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> cpl_error_code </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> sinfo_atm_dispersion_cube(cpl_imagelist* pCube,</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube CRPIX3</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane CRVAL3</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>               );</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">void</span> calcAtmosphericDispersion( <span class="keywordtype">double</span> lambda, <span class="keywordtype">double</span> lambda0, <span class="keywordtype">double</span> *shiftX, <span class="keywordtype">double</span> *shiftY, <span class="keywordtype">double</span> *deltaR,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                    <span class="keywordtype">double</span> Tc,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                    <span class="keywordtype">double</span> rh,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                    <span class="keywordtype">double</span> airm,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                    <span class="keywordtype">double</span> p,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                    <span class="keywordtype">double</span> parallactic,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                    <span class="keywordtype">double</span> pixelscale);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> cpl_error_code sinfo_atmo_dispersion_cube(cpl_imagelist* pCube,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">int</span> centpix, <span class="comment">// central plane in the cube</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">double</span> centlambda, <span class="comment">// wavelength of the central plane</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">double</span> Tc, <span class="comment">// temperature in Celsius TEL.AMBI.TEMP</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">double</span> Rh, <span class="comment">// relative humidity in % TEL.AMBI.RHUM</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">double</span> airm, <span class="comment">// airmass for the moment of observation TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">double</span> p, <span class="comment">// atmospheric pressure TEL.AMBI.PRES</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">double</span> parallactic, <span class="comment">// TEL.PARANG</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">double</span> pixelscale, <span class="comment">// could be for SINFONI 0.025, 0.100, 0.250</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">double</span> pixelsz <span class="comment">// microns per pixel CDELT3</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         );</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_imagelist* sinfo_atmo_apply_cube_polynomial_shift(</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         cpl_polynomial* poly,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         cpl_imagelist* pCube,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">double</span> lambda0,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keywordtype">double</span> airmass,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">double</span> parallactic, <span class="comment">// should be in radian</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">double</span> pixelsz,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">int</span> centpix);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> cpl_polynomial* sinfo_atmo_load_polynom(<span class="keyword">const</span> <span class="keywordtype">char</span>* filename);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_ATM_DISP_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bad__cfg_8c_source.html b/html/sinfo__bad__cfg_8c_source.html
index f48099d..804d065 100644
--- a/html/sinfo__bad__cfg_8c_source.html
+++ b/html/sinfo__bad__cfg_8c_source.html
@@ -2,70 +2,101 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bad_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bad_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_bad_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Autor    :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    handles the data structure bad_config</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_bad_cfg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                              Function codes</span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 bad_config * 
-<a name="l00054"></a>00054 sinfo_bad_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00055"></a>00055 {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(bad_config));
-<a name="l00057"></a>00057 }
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> 
-<a name="l00065"></a>00065 sinfo_bad_cfg_destroy(bad_config * sc)
-<a name="l00066"></a>00066 {
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00069"></a>00069    
-<a name="l00070"></a>00070     <span class="comment">/* Free main struct */</span>
-<a name="l00071"></a>00071     cpl_free(sc);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073     return ;
-<a name="l00074"></a>00074 }
-<a name="l00075"></a>00075 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bad_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_bad_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Autor    :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    handles the data structure bad_config</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_bad_cfg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> bad_config * </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_bad_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(bad_config));</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_bad_cfg_destroy(bad_config * sc)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>    </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     return ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bad__cfg_8h_source.html b/html/sinfo__bad__cfg_8h_source.html
index d1aec5c..1ffd0b3 100644
--- a/html/sinfo__bad__cfg_8h_source.html
+++ b/html/sinfo__bad__cfg_8h_source.html
@@ -2,126 +2,157 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bad_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bad_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    bad_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    bad_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_BAD_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BAD_CFG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Defines</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                   New types</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="comment">/*</span>
-<a name="l00043"></a>00043 <span class="comment">  bad pixels search blackboard container</span>
-<a name="l00044"></a>00044 <span class="comment"></span>
-<a name="l00045"></a>00045 <span class="comment">  This structure holds all information related to the bad pixels search</span>
-<a name="l00046"></a>00046 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00047"></a>00047 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00048"></a>00048 <span class="comment">  the blackboard.</span>
-<a name="l00049"></a>00049 <span class="comment">  */</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="keyword">typedef</span> <span class="keyword">struct </span>bad_config {
-<a name="l00052"></a>00052 <span class="comment">/*-------General---------*/</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span>
-<a name="l00054"></a>00054 <span class="comment">                                       the list of all input frames */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad pixel </span>
-<a name="l00056"></a>00056 <span class="comment">                                        mask (fits file)*/</span>
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*------ BadPix ------*/</span>
-<a name="l00061"></a>00061         <span class="comment">/* factor of noise within which the pixels are used to fit a </span>
-<a name="l00062"></a>00062 <span class="comment">           straight line to the column intensity */</span>
-<a name="l00063"></a>00063         <span class="keywordtype">float</span> sigmaFactor ;      
-<a name="l00064"></a>00064         <span class="comment">/* factor of calculated standard deviation beyond which the </span>
-<a name="l00065"></a>00065 <span class="comment">           deviation of a pixel value from the </span>
-<a name="l00066"></a>00066 <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span>
-<a name="l00067"></a>00067         <span class="keywordtype">float</span> factor ;
-<a name="l00068"></a>00068         <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00069"></a>00069         <span class="keywordtype">int</span> iterations ;
-<a name="l00070"></a>00070         <span class="comment">/* percentage of extreme pixel value to reject when calculating </span>
-<a name="l00071"></a>00071 <span class="comment">           the mean and stdev */</span>
-<a name="l00072"></a>00072         <span class="keywordtype">float</span> loReject ;
-<a name="l00073"></a>00073         <span class="keywordtype">float</span> hiReject ;
-<a name="l00074"></a>00074         <span class="comment">/* pixel coordinate of lower left edge of a rectangle zone from </span>
-<a name="l00075"></a>00075 <span class="comment">           which image statistics are computed */</span>
-<a name="l00076"></a>00076         <span class="keywordtype">int</span> llx ;
-<a name="l00077"></a>00077         <span class="keywordtype">int</span> lly ;
-<a name="l00078"></a>00078         <span class="comment">/* pixel coordinate of upper right edge of a rectangle zone from </span>
-<a name="l00079"></a>00079 <span class="comment">           which image statistics are computed */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">int</span> urx ;
-<a name="l00081"></a>00081         <span class="keywordtype">int</span> ury ;
-<a name="l00082"></a>00082 <span class="comment">/*------ Thresh ------*/</span>
-<a name="l00083"></a>00083         <span class="comment">/* indicates if the values beyond threshold values should </span>
-<a name="l00084"></a>00084 <span class="comment">           be marked as bad before proceeding </span>
-<a name="l00085"></a>00085 <span class="comment">           to sinfo_median filtering */</span>
-<a name="l00086"></a>00086         <span class="keywordtype">int</span> threshInd ;
-<a name="l00087"></a>00087         <span class="comment">/* factor to the clean standard deviation to define the </span>
-<a name="l00088"></a>00088 <span class="comment">           threshold deviation from the clean mean */</span>
-<a name="l00089"></a>00089         <span class="keywordtype">float</span> meanfactor ;
-<a name="l00090"></a>00090         <span class="comment">/* minimum vlaue of good data */</span>
-<a name="l00091"></a>00091         <span class="keywordtype">float</span> mincut ;
-<a name="l00092"></a>00092         <span class="comment">/* maximum vlaue of good data */</span>
-<a name="l00093"></a>00093         <span class="keywordtype">float</span> maxcut ;
-<a name="l00094"></a>00094         <span class="comment">/* indicates which method will be used */</span>
-<a name="l00095"></a>00095         <span class="keywordtype">int</span> methodInd ;
-<a name="l00096"></a>00096 } bad_config ;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00099"></a>00099 <span class="comment">                               Function prototypes</span>
-<a name="l00100"></a>00100 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 
-<a name="l00110"></a>00110 bad_config * 
-<a name="l00111"></a>00111 sinfo_bad_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 
-<a name="l00120"></a>00120 <span class="keywordtype">void</span> 
-<a name="l00121"></a>00121 sinfo_bad_cfg_destroy(bad_config * sc);
-<a name="l00122"></a>00122  
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bad_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    bad_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    bad_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_BAD_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BAD_CFG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  bad pixels search blackboard container</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  This structure holds all information related to the bad pixels search</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>bad_config {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                       the list of all input frames */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad pixel </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                                        mask (fits file)*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*------ BadPix ------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* factor of noise within which the pixels are used to fit a </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">           straight line to the column intensity */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="keywordtype">float</span> sigmaFactor ;      </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="comment">/* factor of calculated standard deviation beyond which the </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">           deviation of a pixel value from the </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">float</span> factor ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">int</span> iterations ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="comment">/* percentage of extreme pixel value to reject when calculating </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">           the mean and stdev */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="comment">/* pixel coordinate of lower left edge of a rectangle zone from </span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">           which image statistics are computed */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">int</span> llx ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="keywordtype">int</span> lly ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="comment">/* pixel coordinate of upper right edge of a rectangle zone from </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">           which image statistics are computed */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">int</span> urx ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="keywordtype">int</span> ury ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*------ Thresh ------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="comment">/* indicates if the values beyond threshold values should </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">           be marked as bad before proceeding </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">           to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordtype">int</span> threshInd ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="comment">/* factor to the clean standard deviation to define the </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">           threshold deviation from the clean mean */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">float</span> meanfactor ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="comment">/* minimum vlaue of good data */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">float</span> mincut ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="comment">/* maximum vlaue of good data */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordtype">float</span> maxcut ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="comment">/* indicates which method will be used */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordtype">int</span> methodInd ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> } bad_config ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> bad_config * </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> sinfo_bad_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> sinfo_bad_cfg_destroy(bad_config * sc);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>  </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bad__ini_8h_source.html b/html/sinfo__bad__ini_8h_source.html
index c43e59d..60df354 100644
--- a/html/sinfo__bad__ini_8h_source.html
+++ b/html/sinfo__bad__ini_8h_source.html
@@ -2,70 +2,101 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bad_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bad_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   bad_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Oct 25, 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span>
-<a name="l00025"></a>00025 <span class="comment">                    bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_BAD_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BAD_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_bad_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Defines</span>
-<a name="l00038"></a>00038 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039  
-<a name="l00040"></a>00040 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                             Function prototypes </span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> 
-<a name="l00055"></a>00055 generateBad_ini_file(
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * ini_name,
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> * name_i,
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> * name_o
-<a name="l00059"></a>00059 );
-<a name="l00060"></a>00060  
-<a name="l00061"></a>00061 
-<a name="l00072"></a>00072 bad_config * 
-<a name="l00073"></a>00073 parse_bad_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bad_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   bad_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Oct 25, 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_BAD_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BAD_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_bad_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>  </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> generateBad_ini_file(</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> );</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>  </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> bad_config * </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> parse_bad_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__baddist__ini__by__cpl_8c_source.html b/html/sinfo__baddist__ini__by__cpl_8c_source.html
index 6838779..bb33a51 100644
--- a/html/sinfo__baddist__ini__by__cpl_8c_source.html
+++ b/html/sinfo__baddist__ini__by__cpl_8c_source.html
@@ -2,270 +2,301 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_baddist_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_baddist_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_baddist_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <string.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_baddist_ini_by_cpl.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                    Functions private to this module</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>  parse_section_frames(bad_config * cfg, 
-<a name="l00047"></a>00047 cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(bad_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(bad_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00050"></a>00050 
-<a name="l00072"></a>00072 bad_config * 
-<a name="l00073"></a>00073 sinfo_parse_cpl_input_baddist(cpl_parameterlist * cpl_cfg, 
-<a name="l00074"></a>00074                                      cpl_frameset* sof,
-<a name="l00075"></a>00075                                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,
-<a name="l00076"></a>00076                                      cpl_frameset** raw) 
-<a name="l00077"></a>00077 {
-<a name="l00078"></a>00078   bad_config    *       cfg ;
-<a name="l00079"></a>00079   <span class="keywordtype">int</span> status = 0;
-<a name="l00080"></a>00080         <span class="comment">/* Removed check on ini_file */</span>
-<a name="l00081"></a>00081         <span class="comment">/* Removed load of ini file */</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083   cfg = sinfo_bad_cfg_create();
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085         <span class="comment">/*</span>
-<a name="l00086"></a>00086 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00087"></a>00087 <span class="comment">         * found in the ini file</span>
-<a name="l00088"></a>00088 <span class="comment">         */</span>
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   parse_section_badpix   (cfg, cpl_cfg);
-<a name="l00091"></a>00091   parse_section_thresh   (cfg, cpl_cfg);
-<a name="l00092"></a>00092   parse_section_frames   (cfg, sof, procatg, raw,&status);
-<a name="l00093"></a>00093   <span class="keywordflow">if</span>(status>0) {
-<a name="l00094"></a>00094                <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00095"></a>00095                 sinfo_bad_cfg_destroy(cfg);
-<a name="l00096"></a>00096                 cfg = NULL ;
-<a name="l00097"></a>00097                 <span class="keywordflow">return</span> NULL ;
-<a name="l00098"></a>00098   }
-<a name="l00099"></a>00099   <span class="keywordflow">return</span> cfg ;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 }
-<a name="l00102"></a>00102 
-<a name="l00114"></a>00114 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00115"></a>00115 parse_section_frames(bad_config   * cfg,
-<a name="l00116"></a>00116                      cpl_frameset * sof,
-<a name="l00117"></a>00117                      <span class="keyword">const</span> <span class="keywordtype">char</span>    * procatg,          
-<a name="l00118"></a>00118                      cpl_frameset ** raw,
-<a name="l00119"></a>00119                      <span class="keywordtype">int</span>* status)
-<a name="l00120"></a>00120 {
-<a name="l00121"></a>00121    <span class="keywordtype">int</span>                i=0;
-<a name="l00122"></a>00122    <span class="keywordtype">int</span>                nraw = 0;
-<a name="l00123"></a>00123    <span class="keywordtype">char</span> *          tag=NULL;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125    <span class="keywordtype">int</span>  nraw_good = 0;
-<a name="l00126"></a>00126    cpl_frame* frame=NULL;
-<a name="l00127"></a>00127    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00128"></a>00128    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00129"></a>00129    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00130"></a>00130    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133      <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_DI) == 0 ) {
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);
-<a name="l00136"></a>00136       nraw=cpl_frameset_get_size(*raw);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_NO) == 0 ) {
-<a name="l00139"></a>00139       
-<a name="l00140"></a>00140       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);
-<a name="l00141"></a>00141       nraw=cpl_frameset_get_size(*raw);
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143    } <span class="keywordflow">else</span> {
-<a name="l00144"></a>00144       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
-<a name="l00145"></a>00145       nraw=cpl_frameset_get_size(*raw);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147       <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00148"></a>00148          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
-<a name="l00149"></a>00149          nraw=cpl_frameset_get_size(*raw);
-<a name="l00150"></a>00150       }   
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152    }
-<a name="l00153"></a>00153     <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00154"></a>00154          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
-<a name="l00155"></a>00155          nraw=cpl_frameset_get_size(*raw);
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00159"></a>00159          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
-<a name="l00160"></a>00160          nraw=cpl_frameset_get_size(*raw);
-<a name="l00161"></a>00161     }
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165    nraw=cpl_frameset_get_size(*raw);
-<a name="l00166"></a>00166    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00167"></a>00167       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s or %s) present in"</span>
-<a name="l00168"></a>00168              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,
-<a name="l00169"></a>00169                          RAW_FLAT_LAMP,RAW_FLAT_NS);
-<a name="l00170"></a>00170       (*status)++;
-<a name="l00171"></a>00171       <span class="keywordflow">return</span>;
-<a name="l00172"></a>00172    }
-<a name="l00173"></a>00173         
-<a name="l00174"></a>00174    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00175"></a>00175    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00176"></a>00176    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178    <span class="comment">/* read input frames */</span>
-<a name="l00179"></a>00179    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00180"></a>00180       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00181"></a>00181       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;
-<a name="l00182"></a>00182       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) 
-<a name="l00183"></a>00183     {
-<a name="l00184"></a>00184              <span class="comment">/* Store file name into framelist */</span>
-<a name="l00185"></a>00185              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00186"></a>00186              nraw_good++;
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188    }
-<a name="l00189"></a>00189    <span class="keywordflow">if</span>(nraw_good<1) {
-<a name="l00190"></a>00190      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);
-<a name="l00191"></a>00191      (*status)++;
-<a name="l00192"></a>00192      <span class="keywordflow">return</span>;
-<a name="l00193"></a>00193    }
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00196"></a>00196    cfg->nframes         = nraw_good ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198    <span class="comment">/* Output */</span>
-<a name="l00199"></a>00199    strcpy(cfg -> outName, BP_DIST_OUT_FILENAME);
-<a name="l00200"></a>00200  
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00205"></a>00205    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00206"></a>00206  
-<a name="l00207"></a>00207     <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00208"></a>00208      {
-<a name="l00209"></a>00209    <span class="keywordflow">case</span> 0: 
-<a name="l00210"></a>00210       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00211"></a>00211       <span class="keywordflow">break</span>;
-<a name="l00212"></a>00212     <span class="keywordflow">case</span> 1: 
-<a name="l00213"></a>00213       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00214"></a>00214       <span class="keywordflow">break</span>;
-<a name="l00215"></a>00215     <span class="keywordflow">case</span> -1:
-<a name="l00216"></a>00216       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00217"></a>00217       <span class="keywordflow">break</span>;
-<a name="l00218"></a>00218     <span class="keywordflow">default</span>: 
-<a name="l00219"></a>00219       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00220"></a>00220       <span class="keywordflow">break</span>;
-<a name="l00221"></a>00221      }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     sinfo_get_band(frame,band);
-<a name="l00224"></a>00224    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,
-<a name="l00225"></a>00225                      spat_res,    lamp_status,    band);
-<a name="l00226"></a>00226    sinfo_get_ins_set(band,&ins_set);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228    <span class="keywordflow">return</span>;
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 
-<a name="l00239"></a>00239 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00240"></a>00240 parse_section_badpix(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00241"></a>00241 {
-<a name="l00242"></a>00242    cpl_parameter *p;     
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.sigma_factor"</span>);
-<a name="l00245"></a>00245    cfg -> sigmaFactor = cpl_parameter_get_double(p);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.method_index"</span>);
-<a name="l00248"></a>00248    cfg -> methodInd = cpl_parameter_get_int(p);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.factor"</span>);
-<a name="l00251"></a>00251    cfg -> factor = cpl_parameter_get_double(p);
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.iterations"</span>);
-<a name="l00254"></a>00254    cfg -> iterations = cpl_parameter_get_int(p);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.low_rejection"</span>);
-<a name="l00257"></a>00257    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.high_rejection"</span>);
-<a name="l00260"></a>00260    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.llx"</span>);
-<a name="l00263"></a>00263    cfg -> llx = cpl_parameter_get_int(p);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.lly"</span>);
-<a name="l00266"></a>00266    cfg -> lly = cpl_parameter_get_int(p);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.urx"</span>);
-<a name="l00269"></a>00269    cfg -> urx = cpl_parameter_get_int(p);
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.ury"</span>);
-<a name="l00272"></a>00272    cfg -> ury = cpl_parameter_get_int(p);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 }
-<a name="l00275"></a>00275 
-<a name="l00283"></a>00283 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00284"></a>00284 parse_section_thresh(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00285"></a>00285 {
-<a name="l00286"></a>00286    cpl_parameter *p;     
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.threshold_index"</span>);
-<a name="l00289"></a>00289    cfg -> threshInd  = cpl_parameter_get_bool(p);
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.mean_factor"</span>);
-<a name="l00292"></a>00292    cfg -> meanfactor = cpl_parameter_get_double(p);
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.min_cut"</span>);
-<a name="l00296"></a>00296    cfg -> mincut = cpl_parameter_get_double(p);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.max_cut"</span>);
-<a name="l00299"></a>00299    cfg -> maxcut = cpl_parameter_get_double(p);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_baddist_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_baddist_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_baddist_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span>  parse_section_frames(bad_config * cfg, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(bad_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(bad_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> bad_config * </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_parse_cpl_input_baddist(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                      cpl_frameset** raw) </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   bad_config    *       cfg ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">int</span> status = 0;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="comment">/* Removed check on ini_file */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* Removed load of ini file */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   cfg = sinfo_bad_cfg_create();</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   parse_section_badpix   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   parse_section_thresh   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   parse_section_frames   (cfg, sof, procatg, raw,&status);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">if</span>(status>0) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 sinfo_bad_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> parse_section_frames(bad_config   * cfg,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                      cpl_frameset * sof,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>    * procatg,          </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                      cpl_frameset ** raw,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span>                i=0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span>                nraw = 0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">char</span> *          tag=NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">int</span>  nraw_good = 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>      <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_DI) == 0 ) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_NO) == 0 ) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       }   </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s or %s) present in"</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                          RAW_FLAT_LAMP,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       (*status)++;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>    <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>              <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>              nraw_good++;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>    }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>    <span class="keywordflow">if</span>(nraw_good<1) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>      (*status)++;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    cfg->nframes         = nraw_good ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    strcpy(cfg -> outName, BP_DIST_OUT_FILENAME);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>  </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>  </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>      {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>      }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> parse_section_badpix(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.sigma_factor"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>    cfg -> sigmaFactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.method_index"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    cfg -> methodInd = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.factor"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    cfg -> factor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.iterations"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    cfg -> iterations = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.low_rejection"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.high_rejection"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.llx"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    cfg -> llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.lly"</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    cfg -> lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.urx"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>    cfg -> urx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.ury"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    cfg -> ury = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> parse_section_thresh(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.threshold_index"</span>);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    cfg -> threshInd  = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.mean_factor"</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    cfg -> meanfactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.min_cut"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    cfg -> mincut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_dist.max_cut"</span>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>    cfg -> maxcut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__baddist__ini__by__cpl_8h_source.html b/html/sinfo__baddist__ini__by__cpl_8h_source.html
index 8c3aa8d..422b903 100644
--- a/html/sinfo__baddist__ini__by__cpl_8h_source.html
+++ b/html/sinfo__baddist__ini__by__cpl_8h_source.html
@@ -2,71 +2,102 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_baddist_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_baddist_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_baddist_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifndef SINFO_BADDIST_INI_BY_CPL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADDIST_INI_BY_CPL_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                Includes</span>
-<a name="l00035"></a>00035 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_bad_cfg.h"</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                Defines</span>
-<a name="l00041"></a>00041 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042  
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                             Function prototypes </span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00053"></a>00053 <span class="keywordtype">void</span> 
-<a name="l00054"></a>00054 sinfo_bad_free(bad_config * cfg);
-<a name="l00055"></a>00055 
-<a name="l00069"></a>00069 bad_config * 
-<a name="l00070"></a>00070 sinfo_parse_cpl_input_baddist(cpl_parameterlist * cpl_cfg, 
-<a name="l00071"></a>00071                               cpl_frameset* sof, 
-<a name="l00072"></a>00072                               <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, 
-<a name="l00073"></a>00073                               cpl_frameset** raw);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_baddist_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_baddist_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifndef SINFO_BADDIST_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADDIST_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_bad_cfg.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_bad_free(bad_config * cfg);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> bad_config * </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> sinfo_parse_cpl_input_baddist(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               cpl_frameset* sof, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               cpl_frameset** raw);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badnorm__ini__by__cpl_8c_source.html b/html/sinfo__badnorm__ini__by__cpl_8c_source.html
index 6112348..9d511f1 100644
--- a/html/sinfo__badnorm__ini__by__cpl_8c_source.html
+++ b/html/sinfo__badnorm__ini__by__cpl_8c_source.html
@@ -2,294 +2,325 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badnorm_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badnorm_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include <string.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_badnorm_ini_by_cpl.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                    Functions private to this module</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>  parse_section_frames(bad_config * cfg, 
-<a name="l00047"></a>00047 cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(bad_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(bad_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00050"></a>00050 
-<a name="l00071"></a>00071 bad_config * 
-<a name="l00072"></a>00072 sinfo_parse_cpl_input_badnorm(cpl_parameterlist * cpl_cfg, 
-<a name="l00073"></a>00073                                      cpl_frameset* sof,
-<a name="l00074"></a>00074                                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,
-<a name="l00075"></a>00075                                      cpl_frameset** raw) 
-<a name="l00076"></a>00076 {
-<a name="l00077"></a>00077   bad_config    *       cfg ;
-<a name="l00078"></a>00078   <span class="keywordtype">int</span> status = 0;
-<a name="l00079"></a>00079         <span class="comment">/* Removed check on ini_file */</span>
-<a name="l00080"></a>00080         <span class="comment">/* Removed load of ini file */</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082   cfg = sinfo_bad_cfg_create();
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084         <span class="comment">/*</span>
-<a name="l00085"></a>00085 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00086"></a>00086 <span class="comment">         * found in the ini file</span>
-<a name="l00087"></a>00087 <span class="comment">         */</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   parse_section_badpix   (cfg, cpl_cfg);
-<a name="l00090"></a>00090   parse_section_thresh   (cfg, cpl_cfg);
-<a name="l00091"></a>00091   parse_section_frames   (cfg, sof, procatg, raw,&status);
-<a name="l00092"></a>00092   <span class="keywordflow">if</span>(status>0) {
-<a name="l00093"></a>00093                <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00094"></a>00094                 sinfo_bad_cfg_destroy(cfg);
-<a name="l00095"></a>00095                 cfg = NULL ;
-<a name="l00096"></a>00096                 <span class="keywordflow">return</span> NULL ;
-<a name="l00097"></a>00097   }
-<a name="l00098"></a>00098   <span class="keywordflow">return</span> cfg ;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 }
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 
-<a name="l00115"></a>00115 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00116"></a>00116 parse_section_frames(bad_config   * cfg,
-<a name="l00117"></a>00117                      cpl_frameset * sof,
-<a name="l00118"></a>00118                      <span class="keyword">const</span> <span class="keywordtype">char</span>         * procatg,          
-<a name="l00119"></a>00119                      cpl_frameset ** raw,
-<a name="l00120"></a>00120                      <span class="keywordtype">int</span>* status)
-<a name="l00121"></a>00121 {
-<a name="l00122"></a>00122    <span class="keywordtype">int</span>                i=0;
-<a name="l00123"></a>00123    <span class="keywordtype">int</span>                nraw = 0;
-<a name="l00124"></a>00124    <span class="keywordtype">char</span> *          tag=NULL;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126    <span class="keywordtype">int</span>  nraw_good = 0;
-<a name="l00127"></a>00127    cpl_frame* frame=NULL;
-<a name="l00128"></a>00128    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00129"></a>00129    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00130"></a>00130    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00131"></a>00131    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00132"></a>00132      <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_DI) == 0 ) {
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);
-<a name="l00135"></a>00135       nraw=cpl_frameset_get_size(*raw);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_NO) == 0 ) {
-<a name="l00138"></a>00138       
-<a name="l00139"></a>00139       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);
-<a name="l00140"></a>00140       nraw=cpl_frameset_get_size(*raw);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142    } <span class="keywordflow">else</span> {
-<a name="l00143"></a>00143       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
-<a name="l00144"></a>00144       nraw=cpl_frameset_get_size(*raw);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146       <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00147"></a>00147          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
-<a name="l00148"></a>00148          nraw=cpl_frameset_get_size(*raw);
-<a name="l00149"></a>00149       }   
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151    }
-<a name="l00152"></a>00152     <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00153"></a>00153          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
-<a name="l00154"></a>00154          nraw=cpl_frameset_get_size(*raw);
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00158"></a>00158          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
-<a name="l00159"></a>00159          nraw=cpl_frameset_get_size(*raw);
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00164"></a>00164       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s or %s or %s) present in"</span>
-<a name="l00165"></a>00165              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,
-<a name="l00166"></a>00166                          PRO_MASTER_FLAT_LAMP,RAW_FLAT_LAMP,RAW_FLAT_NS);
-<a name="l00167"></a>00167       (*status)++;
-<a name="l00168"></a>00168       <span class="keywordflow">return</span>;
-<a name="l00169"></a>00169    }
-<a name="l00170"></a>00170         
-<a name="l00171"></a>00171    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00172"></a>00172    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00173"></a>00173    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175    <span class="comment">/* read input frames */</span>
-<a name="l00176"></a>00176    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00177"></a>00177       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00178"></a>00178       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;
-<a name="l00179"></a>00179       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) 
-<a name="l00180"></a>00180     {
-<a name="l00181"></a>00181              <span class="comment">/* Store file name into framelist */</span>
-<a name="l00182"></a>00182              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00183"></a>00183              nraw_good++;
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185    }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187    <span class="keywordflow">if</span>(nraw_good<1) {
-<a name="l00188"></a>00188      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);
-<a name="l00189"></a>00189      (*status)++;
-<a name="l00190"></a>00190      <span class="keywordflow">return</span>;
-<a name="l00191"></a>00191    }
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00194"></a>00194    cfg->nframes         = nraw_good ;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196    <span class="comment">/* Output */</span>
-<a name="l00197"></a>00197           <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_NO) == 0) {
-<a name="l00198"></a>00198       strcpy(cfg -> outName, BP_NORM_OUT_FILENAME);
-<a name="l00199"></a>00199    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_DI) == 0) {
-<a name="l00200"></a>00200       strcpy(cfg -> outName, BP_DIST_OUT_FILENAME);
-<a name="l00201"></a>00201    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_DEFAULT) == 0) {
-<a name="l00202"></a>00202       strcpy(cfg -> outName, BP_NORM_OUT_FILENAME);
-<a name="l00203"></a>00203    } <span class="keywordflow">else</span> {
-<a name="l00204"></a>00204       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: PRO.CATG %s, not supported!"</span>,procatg);
-<a name="l00205"></a>00205       (*status)++;
-<a name="l00206"></a>00206       <span class="keywordflow">return</span>;
-<a name="l00207"></a>00207    }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00212"></a>00212    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00213"></a>00213  
-<a name="l00214"></a>00214  
-<a name="l00215"></a>00215    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00216"></a>00216      {
-<a name="l00217"></a>00217    <span class="keywordflow">case</span> 0: 
-<a name="l00218"></a>00218       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00219"></a>00219       <span class="keywordflow">break</span>;
-<a name="l00220"></a>00220     <span class="keywordflow">case</span> 1: 
-<a name="l00221"></a>00221       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00222"></a>00222       <span class="keywordflow">break</span>;
-<a name="l00223"></a>00223     <span class="keywordflow">case</span> -1:
-<a name="l00224"></a>00224       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00225"></a>00225       <span class="keywordflow">break</span>;
-<a name="l00226"></a>00226     <span class="keywordflow">default</span>: 
-<a name="l00227"></a>00227       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00228"></a>00228       <span class="keywordflow">break</span>;
-<a name="l00229"></a>00229      }
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231    sinfo_get_band(frame,band);
-<a name="l00232"></a>00232    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00233"></a>00233                      spat_res,              lamp_status,    band);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236    sinfo_get_ins_set(band,&ins_set);
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238    <span class="keywordflow">return</span>;
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-<a name="l00251"></a>00251 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00252"></a>00252 parse_section_badpix(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00253"></a>00253 {
-<a name="l00254"></a>00254    cpl_parameter *p;     
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.sigma_factor"</span>);
-<a name="l00257"></a>00257    cfg -> sigmaFactor = cpl_parameter_get_double(p);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.method_index"</span>);
-<a name="l00260"></a>00260    cfg -> methodInd = cpl_parameter_get_int(p);
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.factor"</span>);
-<a name="l00263"></a>00263    cfg -> factor = cpl_parameter_get_double(p);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.iterations"</span>);
-<a name="l00266"></a>00266    cfg -> iterations = cpl_parameter_get_int(p);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.low_rejection"</span>);
-<a name="l00269"></a>00269    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.high_rejection"</span>);
-<a name="l00272"></a>00272    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.llx"</span>);
-<a name="l00275"></a>00275    cfg -> llx = cpl_parameter_get_int(p);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.lly"</span>);
-<a name="l00278"></a>00278    cfg -> lly = cpl_parameter_get_int(p);
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.urx"</span>);
-<a name="l00281"></a>00281    cfg -> urx = cpl_parameter_get_int(p);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.ury"</span>);
-<a name="l00284"></a>00284    cfg -> ury = cpl_parameter_get_int(p);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 }
-<a name="l00287"></a>00287 
-<a name="l00297"></a>00297 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00298"></a>00298 parse_section_thresh(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00299"></a>00299 {
-<a name="l00300"></a>00300    cpl_parameter *p;     
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.threshold_index"</span>);
-<a name="l00303"></a>00303    cfg -> threshInd  = cpl_parameter_get_bool(p);
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.mean_factor"</span>);
-<a name="l00306"></a>00306    cfg -> meanfactor = cpl_parameter_get_double(p);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.min_cut"</span>);
-<a name="l00310"></a>00310    cfg -> mincut = cpl_parameter_get_double(p);
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.max_cut"</span>);
-<a name="l00313"></a>00313    cfg -> maxcut = cpl_parameter_get_double(p);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 }
-<a name="l00323"></a>00323 <span class="keywordtype">void</span>
-<a name="l00324"></a>00324 sinfo_badnorm_free(bad_config ** cfg)
-<a name="l00325"></a>00325 {  
-<a name="l00326"></a>00326   <span class="keywordflow">if</span>((*cfg) != NULL) {
-<a name="l00327"></a>00327     <span class="keywordflow">if</span>((*cfg)->framelist != NULL) {
-<a name="l00328"></a>00328        cpl_free((*cfg)->framelist);
-<a name="l00329"></a>00329        (*cfg)->framelist=NULL;
-<a name="l00330"></a>00330     }
-<a name="l00331"></a>00331     sinfo_bad_cfg_destroy((*cfg));
-<a name="l00332"></a>00332     *cfg =NULL;
-<a name="l00333"></a>00333   }
-<a name="l00334"></a>00334   <span class="keywordflow">return</span>;
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badnorm_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_badnorm_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span>  parse_section_frames(bad_config * cfg, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(bad_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(bad_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> bad_config * </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_parse_cpl_input_badnorm(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                      cpl_frameset** raw) </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   bad_config    *       cfg ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordtype">int</span> status = 0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* Removed check on ini_file */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="comment">/* Removed load of ini file */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   cfg = sinfo_bad_cfg_create();</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   parse_section_badpix   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   parse_section_thresh   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   parse_section_frames   (cfg, sof, procatg, raw,&status);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordflow">if</span>(status>0) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 sinfo_bad_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> parse_section_frames(bad_config   * cfg,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      cpl_frameset * sof,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>         * procatg,          </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                      cpl_frameset ** raw,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span>                i=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">int</span>                nraw = 0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">char</span> *          tag=NULL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">int</span>  nraw_good = 0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>      <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_DI) == 0 ) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(procatg,PRO_BP_MAP_NO) == 0 ) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       sinfo_extract_raw_frames_type(sof,raw,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       }   </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>          sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>          nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s or %s or %s) present in"</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                          PRO_MASTER_FLAT_LAMP,RAW_FLAT_LAMP,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       (*status)++;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>              <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>              nraw_good++;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>    }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    <span class="keywordflow">if</span>(nraw_good<1) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>      (*status)++;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>    cfg->nframes         = nraw_good ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>           <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_NO) == 0) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       strcpy(cfg -> outName, BP_NORM_OUT_FILENAME);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_DI) == 0) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       strcpy(cfg -> outName, BP_DIST_OUT_FILENAME);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_DEFAULT) == 0) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       strcpy(cfg -> outName, BP_NORM_OUT_FILENAME);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: PRO.CATG %s, not supported!"</span>,procatg);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       (*status)++;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>  </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>  </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>      {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>      }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                      spat_res,              lamp_status,    band);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> parse_section_badpix(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.sigma_factor"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    cfg -> sigmaFactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.method_index"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>    cfg -> methodInd = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.factor"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    cfg -> factor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.iterations"</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    cfg -> iterations = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.low_rejection"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.high_rejection"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.llx"</span>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    cfg -> llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.lly"</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>    cfg -> lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.urx"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    cfg -> urx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.ury"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    cfg -> ury = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> parse_section_thresh(bad_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.threshold_index"</span>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>    cfg -> threshInd  = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.mean_factor"</span>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    cfg -> meanfactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.min_cut"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>    cfg -> mincut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_norm.max_cut"</span>);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>    cfg -> maxcut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> sinfo_badnorm_free(bad_config ** cfg)</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> {  </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">if</span>((*cfg) != NULL) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">if</span>((*cfg)->framelist != NULL) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>        cpl_free((*cfg)->framelist);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>        (*cfg)->framelist=NULL;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     sinfo_bad_cfg_destroy((*cfg));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     *cfg =NULL;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badnorm__ini__by__cpl_8h_source.html b/html/sinfo__badnorm__ini__by__cpl_8h_source.html
index c9dfcc7..ccc0bef 100644
--- a/html/sinfo__badnorm__ini__by__cpl_8h_source.html
+++ b/html/sinfo__badnorm__ini__by__cpl_8h_source.html
@@ -2,65 +2,96 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badnorm_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badnorm_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_BADNORM_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADNORM_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_bad_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Defines</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                             Function prototypes </span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 bad_config * 
-<a name="l00051"></a>00051 sinfo_parse_cpl_input_badnorm(cpl_parameterlist * cpl_cfg, 
-<a name="l00052"></a>00052                               cpl_frameset* sof, 
-<a name="l00053"></a>00053                               <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, 
-<a name="l00054"></a>00054                               cpl_frameset** raw);
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_badnorm_free(bad_config ** cfg);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badnorm_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_BADNORM_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADNORM_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_bad_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> bad_config * </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_parse_cpl_input_badnorm(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                               cpl_frameset* sof, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                               cpl_frameset** raw);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_badnorm_free(bad_config ** cfg);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badsky__cfg_8c_source.html b/html/sinfo__badsky__cfg_8c_source.html
index 239bfa2..a634a98 100644
--- a/html/sinfo__badsky__cfg_8c_source.html
+++ b/html/sinfo__badsky__cfg_8c_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badsky_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badsky_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_badsky_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Autor    :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    handles the data structure bad_config</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_badsky_cfg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                              Function codes</span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 badsky_config * sinfo_badsky_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00054"></a>00054 {
-<a name="l00055"></a>00055     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(badsky_config));
-<a name="l00056"></a>00056 }
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> sinfo_badsky_cfg_destroy(badsky_config * sc)
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00068"></a>00068    
-<a name="l00069"></a>00069     <span class="comment">/* Free main struct */</span>
-<a name="l00070"></a>00070     cpl_free(sc);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     return ;
-<a name="l00073"></a>00073 }
-<a name="l00074"></a>00074 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badsky_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_badsky_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Autor    :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    handles the data structure bad_config</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_badsky_cfg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> badsky_config * sinfo_badsky_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(badsky_config));</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> sinfo_badsky_cfg_destroy(badsky_config * sc)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>    </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     return ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badsky__cfg_8h_source.html b/html/sinfo__badsky__cfg_8h_source.html
index ded1283..daaec32 100644
--- a/html/sinfo__badsky__cfg_8h_source.html
+++ b/html/sinfo__badsky__cfg_8h_source.html
@@ -2,122 +2,153 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badsky_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badsky_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_badsky_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    bad_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_BADSKY_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADSKY_CFG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                   Defines</span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                   New types</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="comment">/*</span>
-<a name="l00042"></a>00042 <span class="comment">  bad pixels search blackboard container</span>
-<a name="l00043"></a>00043 <span class="comment"></span>
-<a name="l00044"></a>00044 <span class="comment">  This structure holds all information related to the bad pixels search</span>
-<a name="l00045"></a>00045 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00046"></a>00046 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00047"></a>00047 <span class="comment">  the blackboard.</span>
-<a name="l00048"></a>00048 <span class="comment">  */</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">typedef</span> <span class="keyword">struct </span>badsky_config {
-<a name="l00051"></a>00051 <span class="comment">/*-------General---------*/</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the </span>
-<a name="l00053"></a>00053 <span class="comment">                                       file containing the list of </span>
-<a name="l00054"></a>00054 <span class="comment">                                       all input frames */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> sinfo_dark[FILE_NAME_SZ] ; <span class="comment">/* Input sinfo_dark */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span>
-<a name="l00057"></a>00057 <span class="comment">                                        bad pixel mask (fits file)*/</span>
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00059"></a>00059         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*------ BadPix ------*/</span>
-<a name="l00062"></a>00062         <span class="comment">/* factor of noise within which the pixels are used to fit a </span>
-<a name="l00063"></a>00063 <span class="comment">           straight line to the column intensity */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> sigmaFactor ;      
-<a name="l00065"></a>00065         <span class="comment">/* factor of calculated standard deviation beyond </span>
-<a name="l00066"></a>00066 <span class="comment">           which the deviation of a pixel value from the </span>
-<a name="l00067"></a>00067 <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">float</span> factor ;
-<a name="l00069"></a>00069         <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00070"></a>00070         <span class="keywordtype">int</span> iterations ;
-<a name="l00071"></a>00071         <span class="comment">/* percentage of extreme pixel value to reject </span>
-<a name="l00072"></a>00072 <span class="comment">           when calculating the mean and stdev */</span>
-<a name="l00073"></a>00073         <span class="keywordtype">float</span> loReject ;
-<a name="l00074"></a>00074         <span class="keywordtype">float</span> hiReject ;
-<a name="l00075"></a>00075         <span class="comment">/* pixel coordinate of lower left sinfo_edge of a </span>
-<a name="l00076"></a>00076 <span class="comment">           rectangle zone from which image statistics are computed */</span>
-<a name="l00077"></a>00077         <span class="keywordtype">int</span> llx ;
-<a name="l00078"></a>00078         <span class="keywordtype">int</span> lly ;
-<a name="l00079"></a>00079         <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle </span>
-<a name="l00080"></a>00080 <span class="comment">           zone from which image statistics are computed */</span>
-<a name="l00081"></a>00081         <span class="keywordtype">int</span> urx ;
-<a name="l00082"></a>00082         <span class="keywordtype">int</span> ury ;
-<a name="l00083"></a>00083 <span class="comment">/*------ Thresh ------*/</span>
-<a name="l00084"></a>00084         <span class="comment">/* indicates if the values beyond threshold values should be </span>
-<a name="l00085"></a>00085 <span class="comment">           marked as bad before proceeding </span>
-<a name="l00086"></a>00086 <span class="comment">           to sinfo_median filtering */</span>
-<a name="l00087"></a>00087         <span class="keywordtype">int</span> threshInd ;
-<a name="l00088"></a>00088         <span class="comment">/* factor to the clean standard deviation to define the </span>
-<a name="l00089"></a>00089 <span class="comment">           threshold deviation from the clean mean */</span>
-<a name="l00090"></a>00090         <span class="keywordtype">float</span> meanfactor ;
-<a name="l00091"></a>00091         <span class="comment">/* minimum vlaue of good data */</span>
-<a name="l00092"></a>00092         <span class="keywordtype">float</span> mincut ;
-<a name="l00093"></a>00093         <span class="comment">/* maximum vlaue of good data */</span>
-<a name="l00094"></a>00094         <span class="keywordtype">float</span> maxcut ;
-<a name="l00095"></a>00095         <span class="comment">/* indicates which method will be used */</span>
-<a name="l00096"></a>00096         <span class="keywordtype">int</span> methodInd ;
-<a name="l00097"></a>00097 } badsky_config ;
-<a name="l00098"></a>00098 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00099"></a>00099 <span class="comment">                               Function prototypes</span>
-<a name="l00100"></a>00100 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00101"></a>00101 
-<a name="l00109"></a>00109 badsky_config * 
-<a name="l00110"></a>00110 sinfo_badsky_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00117"></a>00117 <span class="keywordtype">void</span> 
-<a name="l00118"></a>00118 sinfo_badsky_cfg_destroy(badsky_config * sc);
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badsky_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_badsky_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    bad_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_BADSKY_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADSKY_CFG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  bad pixels search blackboard container</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  This structure holds all information related to the bad pixels search</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>badsky_config {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                       file containing the list of </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                       all input frames */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> sinfo_dark[FILE_NAME_SZ] ; <span class="comment">/* Input sinfo_dark */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                                        bad pixel mask (fits file)*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*------ BadPix ------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="comment">/* factor of noise within which the pixels are used to fit a </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">           straight line to the column intensity */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> sigmaFactor ;      </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* factor of calculated standard deviation beyond </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">           which the deviation of a pixel value from the </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">float</span> factor ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">int</span> iterations ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="comment">/* percentage of extreme pixel value to reject </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">           when calculating the mean and stdev */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="comment">/* pixel coordinate of lower left sinfo_edge of a </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">           rectangle zone from which image statistics are computed */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="keywordtype">int</span> llx ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">int</span> lly ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">           zone from which image statistics are computed */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="keywordtype">int</span> urx ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="keywordtype">int</span> ury ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*------ Thresh ------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="comment">/* indicates if the values beyond threshold values should be </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">           marked as bad before proceeding </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">           to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">int</span> threshInd ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="comment">/* factor to the clean standard deviation to define the </span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">           threshold deviation from the clean mean */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">float</span> meanfactor ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="comment">/* minimum vlaue of good data */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">float</span> mincut ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="comment">/* maximum vlaue of good data */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">float</span> maxcut ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="comment">/* indicates which method will be used */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordtype">int</span> methodInd ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> } badsky_config ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> badsky_config * </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> sinfo_badsky_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> sinfo_badsky_cfg_destroy(badsky_config * sc);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badsky__ini__by__cpl_8c_source.html b/html/sinfo__badsky__ini__by__cpl_8c_source.html
index 88dd0fe..ec79694 100644
--- a/html/sinfo__badsky__ini__by__cpl_8c_source.html
+++ b/html/sinfo__badsky__ini__by__cpl_8c_source.html
@@ -2,259 +2,290 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badsky_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badsky_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_badsky_ini_by_cpl.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_badsky_ini_by_cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                    Functions private to this module</span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span>  
-<a name="l00049"></a>00049 parse_section_frames(badsky_config * cfg, cpl_parameterlist* cpl_cfg, 
-<a name="l00050"></a>00050 cpl_frameset* sof, cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00052"></a>00052 parse_section_badpix(badsky_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00054"></a>00054 parse_section_thresh(badsky_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00060"></a>00060 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                              Function codes</span>
-<a name="l00062"></a>00062 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 badsky_config * 
-<a name="l00075"></a>00075 sinfo_parse_cpl_input_badsky(cpl_parameterlist * cpl_cfg, 
-<a name="l00076"></a>00076                                      cpl_frameset* sof,
-<a name="l00077"></a>00077                                      cpl_frameset** raw) 
-<a name="l00078"></a>00078 {
-<a name="l00079"></a>00079   badsky_config    *       cfg ;
-<a name="l00080"></a>00080   <span class="keywordtype">int</span> status = 0;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082   cfg = sinfo_badsky_cfg_create();
-<a name="l00083"></a>00083   parse_section_badpix   (cfg, cpl_cfg);
-<a name="l00084"></a>00084   parse_section_thresh   (cfg, cpl_cfg);
-<a name="l00085"></a>00085   parse_section_frames   (cfg, cpl_cfg, sof, raw,&status);
-<a name="l00086"></a>00086   <span class="keywordflow">if</span>(status>0) {
-<a name="l00087"></a>00087     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00088"></a>00088     sinfo_badsky_cfg_destroy(cfg);
-<a name="l00089"></a>00089     cfg = NULL ;
-<a name="l00090"></a>00090     <span class="keywordflow">return</span> NULL ;
-<a name="l00091"></a>00091   }
-<a name="l00092"></a>00092   <span class="keywordflow">return</span> cfg ;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 }
-<a name="l00095"></a>00095 
-<a name="l00107"></a>00107 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00108"></a>00108 parse_section_frames(badsky_config   * cfg,
-<a name="l00109"></a>00109                      cpl_parameterlist  * cpl_cfg,
-<a name="l00110"></a>00110                      cpl_frameset * sof,          
-<a name="l00111"></a>00111                      cpl_frameset ** raw,
-<a name="l00112"></a>00112                      <span class="keywordtype">int</span>* status)
-<a name="l00113"></a>00113 {
-<a name="l00114"></a>00114    <span class="keywordtype">int</span>                i=0;
-<a name="l00115"></a>00115    <span class="keywordtype">int</span>                nraw = 0;
-<a name="l00116"></a>00116    <span class="keywordtype">char</span> *          tag=NULL;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118    <span class="keywordtype">int</span>  nraw_good = 0;
-<a name="l00119"></a>00119    cpl_frame* frame=NULL;
-<a name="l00120"></a>00120    cpl_parameter *p;     
-<a name="l00121"></a>00121    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00122"></a>00122    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00123"></a>00123    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00124"></a>00124    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126    *raw=cpl_frameset_new();
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129    sinfo_contains_frames_type(sof,raw,RAW_SKY);
-<a name="l00130"></a>00130    nraw=cpl_frameset_get_size(*raw);
-<a name="l00131"></a>00131    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00132"></a>00132       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames %s  present in"</span>
-<a name="l00133"></a>00133              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_SKY);
-<a name="l00134"></a>00134       (*status)++;
-<a name="l00135"></a>00135       <span class="keywordflow">return</span>;
-<a name="l00136"></a>00136    }
-<a name="l00137"></a>00137         
-<a name="l00138"></a>00138    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00139"></a>00139    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00140"></a>00140    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142    <span class="comment">/* read input frames */</span>
-<a name="l00143"></a>00143    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00144"></a>00144       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00145"></a>00145       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;
-<a name="l00146"></a>00146       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) 
-<a name="l00147"></a>00147     {
-<a name="l00148"></a>00148              <span class="comment">/* Store file name into framelist */</span>
-<a name="l00149"></a>00149              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00150"></a>00150              nraw_good++;
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152    }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154    <span class="keywordflow">if</span>(nraw_good<1) {
-<a name="l00155"></a>00155      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);
-<a name="l00156"></a>00156      (*status)++;
-<a name="l00157"></a>00157      <span class="keywordflow">return</span>;
-<a name="l00158"></a>00158    }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_DARK)) {
-<a name="l00162"></a>00162             frame = cpl_frameset_find(sof,PRO_MASTER_DARK);
-<a name="l00163"></a>00163             strcpy(cfg -> sinfo_dark, 
-<a name="l00164"></a>00164            cpl_strdup(cpl_frame_get_filename(frame)));
-<a name="l00165"></a>00165          } <span class="keywordflow">else</span> {
-<a name="l00166"></a>00166             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_DARK);
-<a name="l00167"></a>00167          }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00170"></a>00170    cfg->nframes         = nraw_good ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172    <span class="comment">/* Output */</span>
-<a name="l00173"></a>00173    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.out_filename"</span>);
-<a name="l00174"></a>00174    strcpy(cfg -> outName, cpl_parameter_get_string(p));
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00177"></a>00177    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00178"></a>00178  
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00181"></a>00181      {
-<a name="l00182"></a>00182    <span class="keywordflow">case</span> 0: 
-<a name="l00183"></a>00183       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00184"></a>00184       <span class="keywordflow">break</span>;
-<a name="l00185"></a>00185     <span class="keywordflow">case</span> 1: 
-<a name="l00186"></a>00186       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00187"></a>00187       <span class="keywordflow">break</span>;
-<a name="l00188"></a>00188     <span class="keywordflow">case</span> -1:
-<a name="l00189"></a>00189       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00190"></a>00190       <span class="keywordflow">break</span>;
-<a name="l00191"></a>00191     <span class="keywordflow">default</span>: 
-<a name="l00192"></a>00192       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00193"></a>00193       <span class="keywordflow">break</span>;
-<a name="l00194"></a>00194      }
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196    sinfo_get_band(frame,band);
-<a name="l00197"></a>00197    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00198"></a>00198                      spat_res,              lamp_status,    band);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201    sinfo_get_ins_set(band,&ins_set);
-<a name="l00202"></a>00202    <span class="keywordflow">return</span>;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 }
-<a name="l00205"></a>00205 
-<a name="l00214"></a>00214 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00215"></a>00215 parse_section_badpix(badsky_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00216"></a>00216 {
-<a name="l00217"></a>00217    cpl_parameter *p;     
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.sigma_factor"</span>);
-<a name="l00220"></a>00220    cfg -> sigmaFactor = cpl_parameter_get_double(p);
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.method_index"</span>);
-<a name="l00223"></a>00223    cfg -> methodInd = cpl_parameter_get_int(p);
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.factor"</span>);
-<a name="l00226"></a>00226    cfg -> factor = cpl_parameter_get_double(p);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.iterations"</span>);
-<a name="l00229"></a>00229    cfg -> iterations = cpl_parameter_get_int(p);
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.low_rejection"</span>);
-<a name="l00232"></a>00232    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.high_rejection"</span>);
-<a name="l00235"></a>00235    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.llx"</span>);
-<a name="l00238"></a>00238    cfg -> llx = cpl_parameter_get_int(p);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.lly"</span>);
-<a name="l00241"></a>00241    cfg -> lly = cpl_parameter_get_int(p);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.urx"</span>);
-<a name="l00244"></a>00244    cfg -> urx = cpl_parameter_get_int(p);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.ury"</span>);
-<a name="l00247"></a>00247    cfg -> ury = cpl_parameter_get_int(p);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249 }
-<a name="l00250"></a>00250 
-<a name="l00259"></a>00259 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00260"></a>00260 parse_section_thresh(badsky_config    * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00261"></a>00261 {
-<a name="l00262"></a>00262    cpl_parameter *p;     
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.threshold_index"</span>);
-<a name="l00265"></a>00265    cfg -> threshInd  = cpl_parameter_get_bool(p);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.mean_factor"</span>);
-<a name="l00268"></a>00268    cfg -> meanfactor = cpl_parameter_get_double(p);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.min_cut"</span>);
-<a name="l00272"></a>00272    cfg -> mincut = cpl_parameter_get_double(p);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.max_cut"</span>);
-<a name="l00275"></a>00275    cfg -> maxcut = cpl_parameter_get_double(p);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 }
-<a name="l00278"></a>00278 
-<a name="l00286"></a>00286 <span class="keywordtype">void</span>
-<a name="l00287"></a>00287 sinfo_badsky_free(badsky_config * cfg)
-<a name="l00288"></a>00288 {  
-<a name="l00289"></a>00289   cpl_free(cfg->framelist);
-<a name="l00290"></a>00290   sinfo_badsky_cfg_destroy(cfg);
-<a name="l00291"></a>00291  
-<a name="l00292"></a>00292   <span class="keywordflow">return</span>;
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badsky_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_badsky_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   parse cpl input for the search of static bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_badsky_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> parse_section_frames(badsky_config * cfg, cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> cpl_frameset* sof, cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> parse_section_badpix(badsky_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> parse_section_thresh(badsky_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> badsky_config * </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_parse_cpl_input_badsky(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                      cpl_frameset** raw) </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   badsky_config    *       cfg ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordtype">int</span> status = 0;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   cfg = sinfo_badsky_cfg_create();</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   parse_section_badpix   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   parse_section_thresh   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   parse_section_frames   (cfg, cpl_cfg, sof, raw,&status);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordflow">if</span>(status>0) {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     sinfo_badsky_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cfg = NULL ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> parse_section_frames(badsky_config   * cfg,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                      cpl_parameterlist  * cpl_cfg,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                      cpl_frameset * sof,          </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                      cpl_frameset ** raw,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    <span class="keywordtype">int</span>                i=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>    <span class="keywordtype">int</span>                nraw = 0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="keywordtype">char</span> *          tag=NULL;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">int</span>  nraw_good = 0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    *raw=cpl_frameset_new();</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    sinfo_contains_frames_type(sof,raw,RAW_SKY);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames %s  present in"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>              <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_SKY);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       (*status)++;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>              <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>              nraw_good++;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    <span class="keywordflow">if</span>(nraw_good<1) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: no good raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>      (*status)++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_DARK)) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>             frame = cpl_frameset_find(sof,PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>             strcpy(cfg -> sinfo_dark, </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>            cpl_strdup(cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>          }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    cfg->nframes         = nraw_good ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.out_filename"</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>    strcpy(cfg -> outName, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>  </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>      {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>      }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                      spat_res,              lamp_status,    band);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> parse_section_badpix(badsky_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.sigma_factor"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    cfg -> sigmaFactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.method_index"</span>);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>    cfg -> methodInd = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.factor"</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>    cfg -> factor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.iterations"</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>    cfg -> iterations = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.low_rejection"</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.high_rejection"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.llx"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    cfg -> llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.lly"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    cfg -> lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.urx"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    cfg -> urx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.ury"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    cfg -> ury = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> parse_section_thresh(badsky_config    * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.threshold_index"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    cfg -> threshInd  = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.mean_factor"</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    cfg -> meanfactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.min_cut"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    cfg -> mincut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_sky.max_cut"</span>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    cfg -> maxcut = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> sinfo_badsky_free(badsky_config * cfg)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> {  </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   cpl_free(cfg->framelist);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   sinfo_badsky_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>  </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__badsky__ini__by__cpl_8h_source.html b/html/sinfo__badsky__ini__by__cpl_8h_source.html
index ea79f2e..ef5c612 100644
--- a/html/sinfo__badsky__ini__by__cpl_8h_source.html
+++ b/html/sinfo__badsky__ini__by__cpl_8h_source.html
@@ -2,65 +2,96 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_badsky_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_badsky_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Jun 16, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_BADSKY_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADSKY_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_badsky_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Defines</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                             Function prototypes </span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 badsky_config * 
-<a name="l00043"></a>00043 sinfo_parse_cpl_input_badsky(cpl_parameterlist * cpl_cfg, 
-<a name="l00044"></a>00044                              cpl_frameset* sof, 
-<a name="l00045"></a>00045                              cpl_frameset** raw);
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="keywordtype">void</span> 
-<a name="l00048"></a>00048 sinfo_badsky_free(badsky_config * cfg);
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_badsky_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_badnorm_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Jun 16, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   parse cpl input for the search for static bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_BADSKY_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BADSKY_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_badsky_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> badsky_config * </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> sinfo_parse_cpl_input_badsky(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                              cpl_frameset* sof, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                              cpl_frameset** raw);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> sinfo_badsky_free(badsky_config * cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__balance_8c_source.html b/html/sinfo__balance_8c_source.html
index b2c0058..be8cc16 100644
--- a/html/sinfo__balance_8c_source.html
+++ b/html/sinfo__balance_8c_source.html
@@ -2,145 +2,176 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_balance.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_balance.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 
-<a name="l00025"></a>00025 <span class="preprocessor">#define RADIX 2</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define RADIX2 (RADIX*RADIX)</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="keywordtype">void</span>
-<a name="l00043"></a>00043 sinfo_balance_companion_matrix (<span class="keywordtype">double</span> *m, <span class="keywordtype">size_t</span> nc)
-<a name="l00044"></a>00044 {
-<a name="l00045"></a>00045   <span class="keywordtype">int</span> not_converged = 1;
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047   <span class="keywordtype">double</span> row_norm = 0;
-<a name="l00048"></a>00048   <span class="keywordtype">double</span> col_norm = 0;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050   <span class="keywordflow">while</span> (not_converged)
-<a name="l00051"></a>00051     {
-<a name="l00052"></a>00052       <span class="keywordtype">size_t</span> i, j;
-<a name="l00053"></a>00053       <span class="keywordtype">double</span> g, f, s;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055       not_converged = 0;
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057       <span class="keywordflow">for</span> (i = 0; i < nc; i++)
-<a name="l00058"></a>00058     {
-<a name="l00059"></a>00059       <span class="comment">/* column norm, excluding the diagonal */</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061       <span class="keywordflow">if</span> (i != nc - 1)
-<a name="l00062"></a>00062         {
-<a name="l00063"></a>00063           col_norm = fabs (MAT (m, i + 1, i, nc));
-<a name="l00064"></a>00064         }
-<a name="l00065"></a>00065       <span class="keywordflow">else</span>
-<a name="l00066"></a>00066         {
-<a name="l00067"></a>00067           col_norm = 0;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069           <span class="keywordflow">for</span> (j = 0; j < nc - 1; j++)
-<a name="l00070"></a>00070         {
-<a name="l00071"></a>00071           col_norm += fabs (MAT (m, j, nc - 1, nc));
-<a name="l00072"></a>00072         }
-<a name="l00073"></a>00073         }
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075       <span class="comment">/* row norm, excluding the diagonal */</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077       <span class="keywordflow">if</span> (i == 0)
-<a name="l00078"></a>00078         {
-<a name="l00079"></a>00079           row_norm = fabs (MAT (m, 0, nc - 1, nc));
-<a name="l00080"></a>00080         }
-<a name="l00081"></a>00081       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == nc - 1)
-<a name="l00082"></a>00082         {
-<a name="l00083"></a>00083           row_norm = fabs (MAT (m, i, i - 1, nc));
-<a name="l00084"></a>00084         }
-<a name="l00085"></a>00085       <span class="keywordflow">else</span>
-<a name="l00086"></a>00086         {
-<a name="l00087"></a>00087           row_norm = (fabs (MAT (m, i, i - 1, nc)) 
-<a name="l00088"></a>00088                           + fabs (MAT (m, i, nc - 1, nc)));
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091       <span class="keywordflow">if</span> (col_norm == 0 || row_norm == 0)
-<a name="l00092"></a>00092         {
-<a name="l00093"></a>00093           <span class="keywordflow">continue</span>;
-<a name="l00094"></a>00094         }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096       g = row_norm / RADIX;
-<a name="l00097"></a>00097       f = 1;
-<a name="l00098"></a>00098       s = col_norm + row_norm;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100       <span class="keywordflow">while</span> (col_norm < g)
-<a name="l00101"></a>00101         {
-<a name="l00102"></a>00102           f *= RADIX;
-<a name="l00103"></a>00103           col_norm *= RADIX2;
-<a name="l00104"></a>00104         }
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106       g = row_norm * RADIX;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108       <span class="keywordflow">while</span> (col_norm > g)
-<a name="l00109"></a>00109         {
-<a name="l00110"></a>00110           f /= RADIX;
-<a name="l00111"></a>00111           col_norm /= RADIX2;
-<a name="l00112"></a>00112         }
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114       <span class="keywordflow">if</span> ((row_norm + col_norm) < 0.95 * s * f)
-<a name="l00115"></a>00115         {
-<a name="l00116"></a>00116           not_converged = 1;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118           g = 1 / f;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120           <span class="keywordflow">if</span> (i == 0)
-<a name="l00121"></a>00121         {
-<a name="l00122"></a>00122           MAT (m, 0, nc - 1, nc) *= g;
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124           <span class="keywordflow">else</span>
-<a name="l00125"></a>00125         {
-<a name="l00126"></a>00126           MAT (m, i, i - 1, nc) *= g;
-<a name="l00127"></a>00127           MAT (m, i, nc - 1, nc) *= g;
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130           <span class="keywordflow">if</span> (i == nc - 1)
-<a name="l00131"></a>00131         {
-<a name="l00132"></a>00132           <span class="keywordflow">for</span> (j = 0; j < nc; j++)
-<a name="l00133"></a>00133             {
-<a name="l00134"></a>00134               MAT (m, j, i, nc) *= f;
-<a name="l00135"></a>00135             }
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137           <span class="keywordflow">else</span>
-<a name="l00138"></a>00138         {
-<a name="l00139"></a>00139           MAT (m, i + 1, i, nc) *= f;
-<a name="l00140"></a>00140         }
-<a name="l00141"></a>00141         }
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143     }
-<a name="l00144"></a>00144 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_balance.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#define RADIX 2</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define RADIX2 (RADIX*RADIX)</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> sinfo_balance_companion_matrix (<span class="keywordtype">double</span> *m, <span class="keywordtype">size_t</span> nc)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>   <span class="keywordtype">int</span> not_converged = 1;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   <span class="keywordtype">double</span> row_norm = 0;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordtype">double</span> col_norm = 0;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">while</span> (not_converged)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>       <span class="keywordtype">size_t</span> i, j;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       <span class="keywordtype">double</span> g, f, s;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>       not_converged = 0;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>       <span class="keywordflow">for</span> (i = 0; i < nc; i++)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       <span class="comment">/* column norm, excluding the diagonal */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>       <span class="keywordflow">if</span> (i != nc - 1)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>           col_norm = fabs (MAT (m, i + 1, i, nc));</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>           col_norm = 0;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>           <span class="keywordflow">for</span> (j = 0; j < nc - 1; j++)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>           col_norm += fabs (MAT (m, j, nc - 1, nc));</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       <span class="comment">/* row norm, excluding the diagonal */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       <span class="keywordflow">if</span> (i == 0)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>           row_norm = fabs (MAT (m, 0, nc - 1, nc));</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == nc - 1)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>           row_norm = fabs (MAT (m, i, i - 1, nc));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>           row_norm = (fabs (MAT (m, i, i - 1, nc)) </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                           + fabs (MAT (m, i, nc - 1, nc)));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       <span class="keywordflow">if</span> (col_norm == 0 || row_norm == 0)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>           <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>       g = row_norm / RADIX;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       f = 1;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       s = col_norm + row_norm;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>       <span class="keywordflow">while</span> (col_norm < g)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>           f *= RADIX;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>           col_norm *= RADIX2;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       g = row_norm * RADIX;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>       <span class="keywordflow">while</span> (col_norm > g)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>           f /= RADIX;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>           col_norm /= RADIX2;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       <span class="keywordflow">if</span> ((row_norm + col_norm) < 0.95 * s * f)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>           not_converged = 1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>           g = 1 / f;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>           <span class="keywordflow">if</span> (i == 0)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           MAT (m, 0, nc - 1, nc) *= g;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>           MAT (m, i, i - 1, nc) *= g;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>           MAT (m, i, nc - 1, nc) *= g;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>           <span class="keywordflow">if</span> (i == nc - 1)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           <span class="keywordflow">for</span> (j = 0; j < nc; j++)</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>             {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>               MAT (m, j, i, nc) *= f;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           MAT (m, i + 1, i, nc) *= f;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__baryvel_8c_source.html b/html/sinfo__baryvel_8c_source.html
index d24de8a..1c09773 100644
--- a/html/sinfo__baryvel_8c_source.html
+++ b/html/sinfo__baryvel_8c_source.html
@@ -2,1040 +2,1071 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_baryvel.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_baryvel.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                            *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the ESO SINFONI Pipeline                            *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                    *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                            *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify     *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by     *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or        *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                      *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                            *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,          *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                             *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                            *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License        *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software              *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA     *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                            */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_baryvel.c,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.3  2012/03/02 08:42:20  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * fixed some typos on doxygen</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.2  2009/04/28 11:42:18  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * now return cpl_error_code</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.1  2009/01/02 08:27:58  amodigli</span>
-<a name="l00033"></a>00033 <span class="comment"> * added to repository</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.8  2007/06/06 08:17:33  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * replace tab with 4 spaces</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> */</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#endif</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">  Includes</span>
-<a name="l00064"></a>00064 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_baryvel.h></span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_utils.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">#include <math.h></span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#define H_GEOLAT "ESO TEL GEOLAT"</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define H_GEOLON "ESO TEL GEOLON"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define H_UTC "UTC"</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>
-<a name="l00082"></a>00082 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00083"></a>00083 <span class="comment">  Local functions</span>
-<a name="l00084"></a>00084 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolat(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolon(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00088"></a>00088 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_utc(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keywordtype">void</span> deg2dms(<span class="keywordtype">double</span> in_val, 
-<a name="l00093"></a>00093             <span class="keywordtype">double</span> *degs,
-<a name="l00094"></a>00094             <span class="keywordtype">double</span> *minutes,
-<a name="l00095"></a>00095             <span class="keywordtype">double</span> *seconds);
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="keyword">static</span> <span class="keywordtype">void</span> deg2hms(<span class="keywordtype">double</span> in_val, 
-<a name="l00098"></a>00098             <span class="keywordtype">double</span> *hour,
-<a name="l00099"></a>00099             <span class="keywordtype">double</span> *min,
-<a name="l00100"></a>00100             <span class="keywordtype">double</span> *sec);
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">void</span> compxy(<span class="keywordtype">double</span> inputr[19], <span class="keywordtype">char</span> inputc[4],
-<a name="l00103"></a>00103            <span class="keywordtype">double</span> outputr[4],
-<a name="l00104"></a>00104            <span class="keywordtype">double</span> utr, <span class="keywordtype">double</span> mod_juldat);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="keyword">static</span> <span class="keywordtype">void</span> barvel(<span class="keywordtype">double</span> DJE, <span class="keywordtype">double</span> DEQ,
-<a name="l00107"></a>00107            <span class="keywordtype">double</span> DVELH[4], <span class="keywordtype">double</span> DVELB[4]);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00120"></a>00120 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00121"></a>00121 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolat(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123     <span class="keywordtype">double</span> returnvalue = 0;
-<a name="l00124"></a>00124     
-<a name="l00125"></a>00125     check(returnvalue=cpl_propertylist_get_double(plist, H_GEOLAT), 
-<a name="l00126"></a>00126        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_GEOLAT);
-<a name="l00127"></a>00127     
-<a name="l00128"></a>00128   cleanup:
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> returnvalue;
-<a name="l00130"></a>00130 }
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolon(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00140"></a>00140 {
-<a name="l00141"></a>00141     <span class="keywordtype">double</span> returnvalue = 0;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     check(returnvalue=cpl_propertylist_get_double(plist, H_GEOLON), 
-<a name="l00144"></a>00144        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_GEOLON);
-<a name="l00145"></a>00145       
-<a name="l00146"></a>00146   cleanup:
-<a name="l00147"></a>00147     <span class="keywordflow">return</span> returnvalue;
-<a name="l00148"></a>00148 }
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00159"></a>00159 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00160"></a>00160 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_utc(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00161"></a>00161 {
-<a name="l00162"></a>00162     <span class="keywordtype">double</span> returnvalue = 0;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     check(returnvalue=cpl_propertylist_get_double(plist, H_UTC), 
-<a name="l00165"></a>00165        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_UTC);
-<a name="l00166"></a>00166      
-<a name="l00167"></a>00167   cleanup:
-<a name="l00168"></a>00168     <span class="keywordflow">return</span> returnvalue;
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="preprocessor">#if 0   </span><span class="comment">/* Not used / needed.</span>
-<a name="l00174"></a>00174 <span class="comment">       We simply get the julian date from the input FITS header */</span>
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="comment">//      SUBROUTINE JULDAT(INDATE,UTR,JD)</span>
-<a name="l00177"></a>00177 <span class="comment">//C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span>
-<a name="l00178"></a>00178 <span class="comment">//C</span>
-<a name="l00179"></a>00179 <span class="comment">//C.IDENTIFICATION</span>
-<a name="l00180"></a>00180 <span class="comment">//C  FORTRAN subroutine                    JULDAT     version 1.0       870102</span>
-<a name="l00181"></a>00181 <span class="comment">//C  original coding:                      D. Gillet        ESO - Garching</span>
-<a name="l00182"></a>00182 <span class="comment">//C  variables renamed and restructured:   D. Baade         ST-ECF, Garching</span>
-<a name="l00183"></a>00183 <span class="comment">//C</span>
-<a name="l00184"></a>00184 <span class="comment">//C.KEYWORDS</span>
-<a name="l00185"></a>00185 <span class="comment">//C  geocentric Julian date</span>
-<a name="l00186"></a>00186 <span class="comment">//C</span>
-<a name="l00187"></a>00187 <span class="comment">//C.PURPOSE</span>
-<a name="l00188"></a>00188 <span class="comment">//C  calculate geocentric Julian date for any civil date (time in UT)</span>
-<a name="l00189"></a>00189 <span class="comment">//C</span>
-<a name="l00190"></a>00190 <span class="comment">//C.ALGORITHM</span>
-<a name="l00191"></a>00191 <span class="comment">//C adapted from MEEUS J.,1980, ASTRONOMICAL FORMULAE FOR CALCULATORS</span>
-<a name="l00192"></a>00192 <span class="comment">//C</span>
-<a name="l00193"></a>00193 <span class="comment">//C.INPUT/OUTPUT</span>
-<a name="l00194"></a>00194 <span class="comment">//C the following are passed from and to the calling program:</span>
-<a name="l00195"></a>00195 <span class="comment">//C  INDATE(3)    :         civil date as year,month,day OR year.fraction</span>
-<a name="l00196"></a>00196 <span class="comment">//C  UT           :         universal time expressed in real hours</span>
-<a name="l00197"></a>00197 <span class="comment">//C  JD           :         real geocentric Julian date</span>
-<a name="l00198"></a>00198 <span class="comment">//C</span>
-<a name="l00199"></a>00199 <span class="comment">//C.REVISIONS</span>
-<a name="l00200"></a>00200 <span class="comment">//C made to accept also REAL dates         D. Baade             910408</span>
-<a name="l00201"></a>00201 <span class="comment">//C</span>
-<a name="l00202"></a>00202 <span class="comment">//C---------------------------------------------------------------------------</span>
-<a name="l00203"></a>00203 <span class="comment">//C</span>
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00206"></a>00206 juldat(<span class="keywordtype">double</span> *INDATE,
-<a name="l00207"></a>00207        <span class="keywordtype">double</span> UTR,
-<a name="l00208"></a>00208        <span class="keywordtype">double</span> *JD)
-<a name="l00209"></a>00209 {
-<a name="l00210"></a>00210   <span class="keywordtype">double</span> UT;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   <span class="keywordtype">int</span> DATE[4];
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   UT=UTR / 24.0;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   <span class="comment">/*</span>
-<a name="l00217"></a>00217 <span class="comment">    CHECK FORMAT OF DATE: may be either year,month,date OR year.fraction,0,0 </span>
-<a name="l00218"></a>00218 <span class="comment">    (Note that the fraction of the year must NOT include fractions of a day.)</span>
-<a name="l00219"></a>00219 <span class="comment">    For all other formats exit and terminate also calling command sequence.</span>
-<a name="l00220"></a>00220 <span class="comment">  </span>
-<a name="l00221"></a>00221 <span class="comment">    IF ((INDATE(1)-INT(INDATE(1))).GT.1.0E-6) THEN </span>
-<a name="l00222"></a>00222 <span class="comment">    IF ((INDATE(2).GT.1.0E-6).OR.(INDATE(3).GT.1.0E-6)) </span>
-<a name="l00223"></a>00223 <span class="comment">    +       CALL   STETER(1,'Error: Date was entered in wrong format.')</span>
-<a name="l00224"></a>00224 <span class="comment"></span>
-<a name="l00225"></a>00225 <span class="comment">    copy date input buffer copy to other buffer so that calling program </span>
-<a name="l00226"></a>00226 <span class="comment">    does not notice any changes</span>
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment">    FIRST CASE: format was year.fraction</span>
-<a name="l00229"></a>00229 <span class="comment"></span>
-<a name="l00230"></a>00230 <span class="comment">    DATE(1)=INT(INDATE(1))</span>
-<a name="l00231"></a>00231 <span class="comment">    FRAC=INDATE(1)-DATE(1)</span>
-<a name="l00232"></a>00232 <span class="comment">    DATE(2)=1</span>
-<a name="l00233"></a>00233 <span class="comment">    DATE(3)=1</span>
-<a name="l00234"></a>00234 <span class="comment">    ELSE</span>
-<a name="l00235"></a>00235 <span class="comment">  </span>
-<a name="l00236"></a>00236 <span class="comment">    SECOND CASE: format was year,month,day</span>
-<a name="l00237"></a>00237 <span class="comment">  */</span>
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239   DATE[1]=sinfo_round_double(INDATE[1]);
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241   FRAC = 0;
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243   DATE[2]=sinfo_round_double(INDATE[2]);
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245   DATE[3]=sinfo_round_double(INDATE[3]);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247   <span class="keywordflow">if</span> ((DATE[2] == 0) &&  (DATE[3] == 0)) {
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     DATE[2]=1;
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     DATE[3]=1;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253   }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255   <span class="comment">/*</span>
-<a name="l00256"></a>00256 <span class="comment">    from here on, the normal procedure applies which is based on the </span>
-<a name="l00257"></a>00257 <span class="comment">    format year,month,day:</span>
-<a name="l00258"></a>00258 <span class="comment">  */</span>
-<a name="l00259"></a>00259   <span class="keywordflow">if</span> (DATE[2] > 2) {
-<a name="l00260"></a>00260     YP=DATE[1];
-<a name="l00261"></a>00261     P=DATE[2];
-<a name="l00262"></a>00262   } <span class="keywordflow">else</span> {
-<a name="l00263"></a>00263     YP=DATE[1]-1;
-<a name="l00264"></a>00264     P=DATE(2)+12.0;
-<a name="l00265"></a>00265   }
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   C = DATE[1] + DATE[2]*1.E-2 + DATE[3]*1.E-4 + UT*1.E-6;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269   <span class="keywordflow">if</span> (C  >   1582.1015E0) {
-<a name="l00270"></a>00270     IA=(int) (YP/100.D0);
-<a name="l00271"></a>00271     A=IA;
-<a name="l00272"></a>00272     IB=2-IA+((int)(A/4.D0));
-<a name="l00273"></a>00273   } <span class="keywordflow">else</span> {
-<a name="l00274"></a>00274     IB=0;
-<a name="l00275"></a>00275   }
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   *JD = ((int) (365.25E0*YP)) + ((<span class="keywordtype">int</span>)(30.6001D0*(P+1.D0))) + DATE[3] + UT
-<a name="l00278"></a>00278     + IB + 1720994.5E0;
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280   <span class="comment">/*</span>
-<a name="l00281"></a>00281 <span class="comment">    finally, take into account fraction of year (if any), respect leap</span>
-<a name="l00282"></a>00282 <span class="comment">    year conventions</span>
-<a name="l00283"></a>00283 <span class="comment">  */</span>
-<a name="l00284"></a>00284   <span class="keywordflow">if</span> (FRAC > 1.0E-6) {
-<a name="l00285"></a>00285     ND=365;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     IF (C >= 1582.1015E0) {
-<a name="l00288"></a>00288       IC = DATE[1] % 4;
-<a name="l00289"></a>00289       <span class="keywordflow">if</span> (IC == 0) {
-<a name="l00290"></a>00290         ND=366;
-<a name="l00291"></a>00291         IC = DATE[1] % 100;
-<a name="l00292"></a>00292         <span class="keywordflow">if</span> (IC == 0) {
-<a name="l00293"></a>00293       IC = DATE[1] % 400;
-<a name="l00294"></a>00294       <span class="keywordflow">if</span> (IC != 0) ND=365;
-<a name="l00295"></a>00295         }
-<a name="l00296"></a>00296       }
-<a name="l00297"></a>00297     }
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     <span class="keywordflow">if</span> (fabs(FRAC*ND-sinfo_round_double(FRAC*ND)) > 0.3) {
-<a name="l00300"></a>00300       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Fraction of year MAY not correspond to "</span>
-<a name="l00301"></a>00301             <span class="stringliteral">"integer number of days"</span>);
-<a name="l00302"></a>00302     }
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     *JD = *JD+sinfo_round_double(FRAC*ND);
-<a name="l00305"></a>00305   }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307   <span class="keywordflow">return</span>;
-<a name="l00308"></a>00308 }
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="preprocessor">#endif</span>
-<a name="l00311"></a>00311 <span class="preprocessor"></span>
-<a name="l00315"></a>00315 <span class="preprocessor">#define MIDAS_BUG 0</span>
-<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00324"></a>00324 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00327"></a>00327 deg2hms(<span class="keywordtype">double</span> in_val, 
-<a name="l00328"></a>00328     <span class="keywordtype">double</span> *hours,
-<a name="l00329"></a>00329     <span class="keywordtype">double</span> *minutes,
-<a name="l00330"></a>00330     <span class="keywordtype">double</span> *seconds)
-<a name="l00331"></a>00331 {
-<a name="l00332"></a>00332   <span class="keywordtype">double</span> tmp;
-<a name="l00333"></a>00333   <span class="keywordtype">char</span> sign;
-<a name="l00334"></a>00334   <span class="keywordflow">if</span> (in_val < 0) {
-<a name="l00335"></a>00335     in_val = fabs(in_val);
-<a name="l00336"></a>00336     sign = <span class="charliteral">'-'</span>;
-<a name="l00337"></a>00337   }
-<a name="l00338"></a>00338   <span class="keywordflow">else</span> {
-<a name="l00339"></a>00339     sign = <span class="charliteral">'+'</span>;
-<a name="l00340"></a>00340   }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342   tmp   = in_val / 15;
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344   <span class="comment">/* takes the integer part = hours */</span>
-<a name="l00345"></a>00345 <span class="preprocessor">#if MIDAS_BUG</span>
-<a name="l00346"></a>00346 <span class="preprocessor"></span>  *hours= sinfo_round_double(tmp);
-<a name="l00347"></a>00347 <span class="preprocessor">#else</span>
-<a name="l00348"></a>00348 <span class="preprocessor"></span>  *hours= (int) tmp;
-<a name="l00349"></a>00349 <span class="preprocessor">#endif</span>
-<a name="l00350"></a>00350 <span class="preprocessor"></span>
-<a name="l00351"></a>00351   <span class="comment">/* takes the mantissa */</span>
-<a name="l00352"></a>00352   tmp   = tmp - *hours;
-<a name="l00353"></a>00353   <span class="comment">/* converts the mantissa in minutes */</span>
-<a name="l00354"></a>00354   tmp   = tmp * 60;
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356   <span class="comment">/* takes the integer part = minutes */</span>
-<a name="l00357"></a>00357 <span class="preprocessor">#if MIDAS_BUG</span>
-<a name="l00358"></a>00358 <span class="preprocessor"></span>  *minutes= sinfo_round_double(tmp);
-<a name="l00359"></a>00359 <span class="preprocessor">#else</span>
-<a name="l00360"></a>00360 <span class="preprocessor"></span>  *minutes= (int) tmp;
-<a name="l00361"></a>00361 <span class="preprocessor">#endif</span>
-<a name="l00362"></a>00362 <span class="preprocessor"></span>
-<a name="l00363"></a>00363   <span class="comment">/* takes the mantissa */</span>
-<a name="l00364"></a>00364   tmp   = tmp - *minutes;
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366   <span class="comment">/* converts the mantissa in seconds = seconds (with decimal) */</span>
-<a name="l00367"></a>00367   *seconds= tmp * 60;
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369   <span class="comment">/* Rather than returning it explicitly, just  attach sign to hours */</span>
-<a name="l00370"></a>00370   <span class="keywordflow">if</span> (sign == <span class="charliteral">'-'</span>) *hours = -(*hours);
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372   <span class="keywordflow">return</span>;
-<a name="l00373"></a>00373 }
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00383"></a>00383 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00386"></a>00386 deg2dms(<span class="keywordtype">double</span> in_val, 
-<a name="l00387"></a>00387     <span class="keywordtype">double</span> *degs,
-<a name="l00388"></a>00388     <span class="keywordtype">double</span> *minutes,
-<a name="l00389"></a>00389     <span class="keywordtype">double</span> *seconds)
-<a name="l00390"></a>00390 {
-<a name="l00391"></a>00391   deg2hms(in_val*15, degs, minutes, seconds);
-<a name="l00392"></a>00392 }
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 <span class="comment">/* @cond Convert FORTRAN indexing -> C indexing */</span>
-<a name="l00399"></a>00399 <span class="preprocessor">#define DCFEL(x,y)  dcfel[y][x]</span>
-<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define DCFEPS(x,y) dcfeps[y][x]</span>
-<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define CCSEL(x,y)  ccsel[y][x]</span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define DCARGS(x,y) dcargs[y][x]</span>
-<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define CCAMPS(x,y) ccamps[y][x]</span>
-<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#define CCSEC(x,y)  ccsec[y][x]</span>
-<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define DCARGM(x,y) dcargm[y][x]</span>
-<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define CCAMPM(x,y) ccampm[y][x]</span>
-<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define DCEPS(x)    dceps[x]</span>
-<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define FORBEL(x)   forbel[x]</span>
-<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define SORBEL(x)   sorbel[x]</span>
-<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define SN(x)       sn[x]</span>
-<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define SINLP(x)    sinlp[x]</span>
-<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define COSLP(x)    coslp[x]</span>
-<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define CCPAMV(x)   ccpamv[x]</span>
-<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="comment">/* @endcond */</span>
-<a name="l00415"></a>00415 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00428"></a>00428 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 <span class="keyword">static</span> 
-<a name="l00432"></a>00432 <span class="keywordtype">void</span> barvel(<span class="keywordtype">double</span> DJE, <span class="keywordtype">double</span> DEQ,
-<a name="l00433"></a>00433         <span class="keywordtype">double</span> DVELH[4], <span class="keywordtype">double</span> DVELB[4])
-<a name="l00434"></a>00434 {
-<a name="l00435"></a>00435   <span class="keywordtype">double</span> sn[5];
-<a name="l00436"></a>00436   <span class="keywordtype">double</span> DT,DTL,DTSQ,DLOCAL;
-<a name="l00437"></a>00437   <span class="keywordtype">double</span> DRD,DRLD;
-<a name="l00438"></a>00438   <span class="keywordtype">double</span> DXBD,DYBD,DZBD,DZHD,DXHD,DYHD;
-<a name="l00439"></a>00439   <span class="keywordtype">double</span> DYAHD,DZAHD,DYABD,DZABD;
-<a name="l00440"></a>00440   <span class="keywordtype">double</span> DML,DEPS,PHI,PHID,PSID,DPARAM,PARAM;
-<a name="l00441"></a>00441   <span class="keywordtype">double</span> PLON,POMG,PECC;
-<a name="l00442"></a>00442   <span class="keywordtype">double</span> PERTL,PERTLD,PERTRD,PERTP,PERTR,PERTPD;
-<a name="l00443"></a>00443   <span class="keywordtype">double</span> SINA,TL;
-<a name="l00444"></a>00444   <span class="keywordtype">double</span> COSA,ESQ;
-<a name="l00445"></a>00445   <span class="keywordtype">double</span> A,B,F,SINF,COSF,T,TSQ,TWOE,TWOG;
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447   <span class="keywordtype">double</span> DPSI,D1PDRO,DSINLS;
-<a name="l00448"></a>00448   <span class="keywordtype">double</span> DCOSLS,DSINEP,DCOSEP;
-<a name="l00449"></a>00449   <span class="keywordtype">double</span> forbel[8], sorbel[18], sinlp[5], coslp[5];
-<a name="l00450"></a>00450   <span class="keywordtype">double</span> SINLM,COSLM,SIGMA;
-<a name="l00451"></a>00451   <span class="keywordtype">int</span> IDEQ,K,N;
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453   <span class="keywordtype">double</span> *E = sorbel + 1 - 1;
-<a name="l00454"></a>00454   <span class="keywordtype">double</span> *G = forbel + 1 - 1;
-<a name="l00455"></a>00455   <span class="keywordtype">double</span> DC2PI = 6.2831853071796E0;
-<a name="l00456"></a>00456   <span class="keywordtype">double</span> CC2PI = 6.283185;             <span class="comment">/* ??? */</span>
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458   <span class="keywordtype">double</span> DC1 = 1.0;
-<a name="l00459"></a>00459   <span class="keywordtype">double</span> DCT0 = 2415020.0E0;
-<a name="l00460"></a>00460   <span class="keywordtype">double</span> DCJUL = 36525.0E0;
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462   <span class="keywordtype">double</span> dcfel[][4] = { {0, 0, 0, 0},
-<a name="l00463"></a>00463             {0, 1.7400353E+00, 6.2833195099091E+02, 5.2796E-06},
-<a name="l00464"></a>00464             {0, 6.2565836E+00, 6.2830194572674E+02,-2.6180E-06},
-<a name="l00465"></a>00465             {0, 4.7199666E+00, 8.3997091449254E+03,-1.9780E-05},
-<a name="l00466"></a>00466             {0, 1.9636505E-01, 8.4334662911720E+03,-5.6044E-05},
-<a name="l00467"></a>00467             {0, 4.1547339E+00, 5.2993466764997E+01, 5.8845E-06},
-<a name="l00468"></a>00468             {0, 4.6524223E+00, 2.1354275911213E+01, 5.6797E-06},
-<a name="l00469"></a>00469             {0, 4.2620486E+00, 7.5025342197656E+00, 5.5317E-06},
-<a name="l00470"></a>00470             {0, 1.4740694E+00, 3.8377331909193E+00, 5.6093E-06} };
-<a name="l00471"></a>00471     
-<a name="l00472"></a>00472   <span class="keywordtype">double</span> dceps[4] = {0, 4.093198E-01,-2.271110E-04,-2.860401E-08};
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474   <span class="keywordtype">double</span> ccsel[][4] = { {0, 0, 0, 0},
-<a name="l00475"></a>00475             {0, 1.675104E-02, -4.179579E-05, -1.260516E-07},
-<a name="l00476"></a>00476             {0, 2.220221E-01,  2.809917E-02,  1.852532E-05},
-<a name="l00477"></a>00477             {0, 1.589963E+00,  3.418075E-02,  1.430200E-05},
-<a name="l00478"></a>00478             {0, 2.994089E+00,  2.590824E-02,  4.155840E-06},
-<a name="l00479"></a>00479             {0, 8.155457E-01,  2.486352E-02,  6.836840E-06},
-<a name="l00480"></a>00480             {0, 1.735614E+00,  1.763719E-02,  6.370440E-06},
-<a name="l00481"></a>00481             {0, 1.968564E+00,  1.524020E-02, -2.517152E-06},
-<a name="l00482"></a>00482             {0, 1.282417E+00,  8.703393E-03,  2.289292E-05},
-<a name="l00483"></a>00483             {0, 2.280820E+00,  1.918010E-02,  4.484520E-06},
-<a name="l00484"></a>00484             {0, 4.833473E-02,  1.641773E-04, -4.654200E-07},
-<a name="l00485"></a>00485             {0, 5.589232E-02, -3.455092E-04, -7.388560E-07},
-<a name="l00486"></a>00486             {0, 4.634443E-02, -2.658234E-05,  7.757000E-08},
-<a name="l00487"></a>00487             {0, 8.997041E-03,  6.329728E-06, -1.939256E-09},
-<a name="l00488"></a>00488             {0, 2.284178E-02, -9.941590E-05,  6.787400E-08},
-<a name="l00489"></a>00489             {0, 4.350267E-02, -6.839749E-05, -2.714956E-07},
-<a name="l00490"></a>00490             {0, 1.348204E-02,  1.091504E-05,  6.903760E-07},
-<a name="l00491"></a>00491             {0, 3.106570E-02, -1.665665E-04, -1.590188E-07} };
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494   <span class="keywordtype">double</span> dcargs[][3] = { {0, 0, 0},
-<a name="l00495"></a>00495              {0, 5.0974222E+00, -7.8604195454652E+02},
-<a name="l00496"></a>00496              {0, 3.9584962E+00, -5.7533848094674E+02},
-<a name="l00497"></a>00497              {0, 1.6338070E+00, -1.1506769618935E+03},
-<a name="l00498"></a>00498              {0, 2.5487111E+00, -3.9302097727326E+02},
-<a name="l00499"></a>00499              {0, 4.9255514E+00, -5.8849265665348E+02},
-<a name="l00500"></a>00500              {0, 1.3363463E+00, -5.5076098609303E+02},
-<a name="l00501"></a>00501              {0, 1.6072053E+00, -5.2237501616674E+02},
-<a name="l00502"></a>00502              {0, 1.3629480E+00, -1.1790629318198E+03},
-<a name="l00503"></a>00503              {0, 5.5657014E+00, -1.0977134971135E+03},
-<a name="l00504"></a>00504              {0, 5.0708205E+00, -1.5774000881978E+02},
-<a name="l00505"></a>00505              {0, 3.9318944E+00,  5.2963464780000E+01},
-<a name="l00506"></a>00506              {0, 4.8989497E+00,  3.9809289073258E+01},
-<a name="l00507"></a>00507              {0, 1.3097446E+00,  7.7540959633708E+01},
-<a name="l00508"></a>00508              {0, 3.5147141E+00,  7.9618578146517E+01},
-<a name="l00509"></a>00509              {0, 3.5413158E+00, -5.4868336758022E+02} };
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512   <span class="keywordtype">double</span> ccamps[][6] = 
-<a name="l00513"></a>00513     {{0, 0, 0, 0, 0, 0},
-<a name="l00514"></a>00514      {0, -2.279594E-5,  1.407414E-5,  8.273188E-6,  1.340565E-5, -2.490817E-7},
-<a name="l00515"></a>00515      {0, -3.494537E-5,  2.860401E-7,  1.289448E-7,  1.627237E-5, -1.823138E-7},
-<a name="l00516"></a>00516      {0,  6.593466E-7,  1.322572E-5,  9.258695E-6, -4.674248E-7, -3.646275E-7},
-<a name="l00517"></a>00517      {0,  1.140767E-5, -2.049792E-5, -4.747930E-6, -2.638763E-6, -1.245408E-7},
-<a name="l00518"></a>00518      {0,  9.516893E-6, -2.748894E-6, -1.319381E-6, -4.549908E-6, -1.864821E-7},
-<a name="l00519"></a>00519      {0,  7.310990E-6, -1.924710E-6, -8.772849E-7, -3.334143E-6, -1.745256E-7},
-<a name="l00520"></a>00520      {0, -2.603449E-6,  7.359472E-6,  3.168357E-6,  1.119056E-6, -1.655307E-7},
-<a name="l00521"></a>00521      {0, -3.228859E-6,  1.308997E-7,  1.013137E-7,  2.403899E-6, -3.736225E-7},
-<a name="l00522"></a>00522      {0,  3.442177E-7,  2.671323E-6,  1.832858E-6, -2.394688E-7, -3.478444E-7},
-<a name="l00523"></a>00523      {0,  8.702406E-6, -8.421214E-6, -1.372341E-6, -1.455234E-6, -4.998479E-8},
-<a name="l00524"></a>00524      {0, -1.488378E-6, -1.251789E-5,  5.226868E-7, -2.049301E-7,  0.0E0},
-<a name="l00525"></a>00525      {0, -8.043059E-6, -2.991300E-6,  1.473654E-7, -3.154542E-7,  0.0E0},
-<a name="l00526"></a>00526      {0,  3.699128E-6, -3.316126E-6,  2.901257E-7,  3.407826E-7,  0.0E0},
-<a name="l00527"></a>00527      {0,  2.550120E-6, -1.241123E-6,  9.901116E-8,  2.210482E-7,  0.0E0},
-<a name="l00528"></a>00528      {0, -6.351059E-7,  2.341650E-6,  1.061492E-6,  2.878231E-7,  0.0E0}};
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532   <span class="keywordtype">double</span> CCSEC3 = -7.757020E-08;
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534   <span class="keywordtype">double</span> ccsec[][4] = { {0, 0, 0, 0},
-<a name="l00535"></a>00535             {0, 1.289600E-06,  5.550147E-01,  2.076942E+00},
-<a name="l00536"></a>00536             {0, 3.102810E-05,  4.035027E+00,  3.525565E-01},
-<a name="l00537"></a>00537             {0, 9.124190E-06,  9.990265E-01,  2.622706E+00},
-<a name="l00538"></a>00538             {0, 9.793240E-07,  5.508259E+00,  1.559103E+01}};
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540   <span class="keywordtype">double</span> DCSLD =  1.990987E-07, CCSGD = 1.990969E-07;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542   <span class="keywordtype">double</span> CCKM = 3.122140E-05, CCMLD = 2.661699E-06, CCFDI = 2.399485E-07;
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544   <span class="keywordtype">double</span> dcargm[][3] = {{0, 0, 0},
-<a name="l00545"></a>00545             {0, 5.1679830E+00,  8.3286911095275E+03},
-<a name="l00546"></a>00546             {0, 5.4913150E+00, -7.2140632838100E+03},
-<a name="l00547"></a>00547             {0, 5.9598530E+00,  1.5542754389685E+04}};
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549   <span class="keywordtype">double</span> ccampm[][5] = {{0, 0, 0, 0, 0},
-<a name="l00550"></a>00550             {0,  1.097594E-01,  2.896773E-07,  5.450474E-02,  1.438491E-07},
-<a name="l00551"></a>00551             {0, -2.223581E-02,  5.083103E-08,  1.002548E-02, -2.291823E-08},
-<a name="l00552"></a>00552             {0,  1.148966E-02,  5.658888E-08,  8.249439E-03,  4.063015E-08} };
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554   <span class="keywordtype">double</span> ccpamv[] = {0, 8.326827E-11, 1.843484E-11, 1.988712E-12, 1.881276E-12};
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556   <span class="keywordtype">double</span> DC1MME = 0.99999696E0;
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558   IDEQ=DEQ;
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560   DT=(DJE-DCT0)/DCJUL;
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562   T=DT;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564   DTSQ=DT*DT;
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566   TSQ=DTSQ;
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568   DML = 0;  <span class="comment">/* Suppress warning */</span>
-<a name="l00569"></a>00569   <span class="keywordflow">for</span> (K = 1; K <= 8; K++) {
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571     DLOCAL=fmod(DCFEL(1,K)+DT*DCFEL(2,K)+DTSQ*DCFEL(3,K),DC2PI);
-<a name="l00572"></a>00572 
-<a name="l00573"></a>00573     <span class="keywordflow">if</span> (K == 1)  DML=DLOCAL;
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575     <span class="keywordflow">if</span> (K != 1)  FORBEL(K-1)=DLOCAL;
-<a name="l00576"></a>00576   }
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578   DEPS=fmod(DCEPS(1)+DT*DCEPS(2)+DTSQ*DCEPS(3), DC2PI);
-<a name="l00579"></a>00579 
-<a name="l00580"></a>00580   <span class="keywordflow">for</span> (K = 1; K <= 17; K++) {
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582     SORBEL(K)=fmod(CCSEL(1,K)+T*CCSEL(2,K)+TSQ*CCSEL(3,K),CC2PI);
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584   }
-<a name="l00585"></a>00585 
-<a name="l00586"></a>00586   <span class="keywordflow">for</span> (K = 1; K <= 4; K++) {
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588     A=fmod(CCSEC(2,K)+T*CCSEC(3,K),CC2PI);
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590     SN(K)=sin(A);
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592   }
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594   PERTL =  CCSEC(1,1)          *SN(1) +CCSEC(1,2)*SN(2)
-<a name="l00595"></a>00595     +(CCSEC(1,3)+T*CCSEC3)*SN(3) +CCSEC(1,4)*SN(4);
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597   PERTLD=0.0;
-<a name="l00598"></a>00598   PERTR =0.0;
-<a name="l00599"></a>00599   PERTRD=0.0;
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601   <span class="keywordflow">for</span> (K = 1; K <= 15; K++) {
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     A=fmod(DCARGS(1,K)+DT*DCARGS(2,K), DC2PI);
-<a name="l00604"></a>00604 
-<a name="l00605"></a>00605     COSA=cos(A);
-<a name="l00606"></a>00606 
-<a name="l00607"></a>00607     SINA=sin(A);
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609     PERTL =PERTL+CCAMPS(1,K)*COSA+CCAMPS(2,K)*SINA;
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611     PERTR =PERTR+CCAMPS(3,K)*COSA+CCAMPS(4,K)*SINA;
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613     <span class="keywordflow">if</span> (K >= 11) <span class="keywordflow">break</span>;
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615     PERTLD=PERTLD+(CCAMPS(2,K)*COSA-CCAMPS(1,K)*SINA)*CCAMPS(5,K);
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617     PERTRD=PERTRD+(CCAMPS(4,K)*COSA-CCAMPS(3,K)*SINA)*CCAMPS(5,K);
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619   }
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622   ESQ=E[1]*E[1];
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624   DPARAM=DC1-ESQ;
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626   PARAM=DPARAM;
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628   TWOE=E[1]+E[1];
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630   TWOG=G[1]+G[1];
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632   PHI=TWOE*((1.0-ESQ*0.125  )*sin(G[1])+E[1]*0.625  *sin(TWOG)
-<a name="l00633"></a>00633         +ESQ*0.5416667  *sin(G[1]+TWOG) ) ;
-<a name="l00634"></a>00634     
-<a name="l00635"></a>00635   F=G[1]+PHI;
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637   SINF=sin(F);
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639   COSF=cos(F);
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641   DPSI=DPARAM/(DC1+E[1]*COSF);
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643   PHID=TWOE*CCSGD*((1.0+ESQ*1.5  )*COSF+E[1]*(1.25  -SINF*SINF*0.5  ));
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645   PSID=CCSGD*E[1]*SINF/sqrt(PARAM);
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647   D1PDRO=(DC1+PERTR);
-<a name="l00648"></a>00648 
-<a name="l00649"></a>00649   DRD=D1PDRO*(PSID+DPSI*PERTRD);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651   DRLD=D1PDRO*DPSI*(DCSLD+PHID+PERTLD);
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653   DTL=fmod(DML+PHI+PERTL, DC2PI);
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655   DSINLS=sin(DTL);
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657   DCOSLS=cos(DTL);
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659   DXHD = DRD*DCOSLS-DRLD*DSINLS;
-<a name="l00660"></a>00660 
-<a name="l00661"></a>00661   DYHD = DRD*DSINLS+DRLD*DCOSLS;
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663   PERTL =0.0;
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665   PERTLD=0.0;
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667   PERTP =0.0;
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669   PERTPD=0.0;
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671   <span class="keywordflow">for</span> (K = 1; K <= 3; K++) {
-<a name="l00672"></a>00672     A=fmod(DCARGM(1,K)+DT*DCARGM(2,K), DC2PI);
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674     SINA  =sin(A);
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676     COSA  =cos(A);
-<a name="l00677"></a>00677 
-<a name="l00678"></a>00678     PERTL =PERTL +CCAMPM(1,K)*SINA;
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680     PERTLD=PERTLD+CCAMPM(2,K)*COSA;
-<a name="l00681"></a>00681 
-<a name="l00682"></a>00682     PERTP =PERTP +CCAMPM(3,K)*COSA;
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684     PERTPD=PERTPD-CCAMPM(4,K)*SINA;
-<a name="l00685"></a>00685   }
-<a name="l00686"></a>00686     
-<a name="l00687"></a>00687   TL=FORBEL(2)+PERTL;
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689   SINLM=sin(TL);
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691   COSLM=cos(TL);
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693   SIGMA=CCKM/(1.0+PERTP);
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695   A=SIGMA*(CCMLD+PERTLD);
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697   B=SIGMA*PERTPD;
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699   DXHD=DXHD+A*SINLM+B*COSLM;
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701   DYHD=DYHD-A*COSLM+B*SINLM;
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703   DZHD=    -SIGMA*CCFDI* cos(FORBEL(3));
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705   DXBD=DXHD*DC1MME;
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707   DYBD=DYHD*DC1MME;
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709   DZBD=DZHD*DC1MME;
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711   <span class="keywordflow">for</span> (K = 1; K <= 4; K++) {
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713     PLON=FORBEL(K+3);
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715     POMG=SORBEL(K+1);
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717     PECC=SORBEL(K+9);
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719     TL=fmod(PLON+2.0*PECC* sin(PLON-POMG), CC2PI);
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     SINLP(K)= sin(TL);
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723     COSLP(K)= cos(TL);
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     DXBD=DXBD+CCPAMV(K)*(SINLP(K)+PECC*sin(POMG));
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727     DYBD=DYBD-CCPAMV(K)*(COSLP(K)+PECC*cos(POMG));
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729     DZBD=DZBD-CCPAMV(K)*SORBEL(K+13)*cos(PLON-SORBEL(K+5));
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731   }
-<a name="l00732"></a>00732     
-<a name="l00733"></a>00733   DCOSEP=cos(DEPS);
-<a name="l00734"></a>00734   DSINEP=sin(DEPS);
-<a name="l00735"></a>00735   DYAHD=DCOSEP*DYHD-DSINEP*DZHD;
-<a name="l00736"></a>00736   DZAHD=DSINEP*DYHD+DCOSEP*DZHD;
-<a name="l00737"></a>00737   DYABD=DCOSEP*DYBD-DSINEP*DZBD;
-<a name="l00738"></a>00738   DZABD=DSINEP*DYBD+DCOSEP*DZBD;
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740   DVELH[1]=DXHD;
-<a name="l00741"></a>00741   DVELH[2]=DYAHD;
-<a name="l00742"></a>00742   DVELH[3]=DZAHD;
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744   DVELB[1]=DXBD;
-<a name="l00745"></a>00745   DVELB[2]=DYABD;
-<a name="l00746"></a>00746   DVELB[3]=DZABD;
-<a name="l00747"></a>00747 
-<a name="l00748"></a>00748   <span class="keywordflow">for</span> (N = 1; N <= 3; N++) {
-<a name="l00749"></a>00749     DVELH[N]=DVELH[N]*1.4959787E8;
-<a name="l00750"></a>00750     DVELB[N]=DVELB[N]*1.4959787E8;
-<a name="l00751"></a>00751   }
-<a name="l00752"></a>00752   <span class="keywordflow">return</span>;
-<a name="l00753"></a>00753 }
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00780"></a>00780 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00781"></a>00781 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00782"></a>00782 compxy(<span class="keywordtype">double</span> inputr[19], <span class="keywordtype">char</span> inputc[4],
-<a name="l00783"></a>00783        <span class="keywordtype">double</span> outputr[4],
-<a name="l00784"></a>00784        <span class="keywordtype">double</span> utr, <span class="keywordtype">double</span> mod_juldat)
-<a name="l00785"></a>00785 {
-<a name="l00786"></a>00786   <span class="keywordtype">double</span> STR;
-<a name="l00787"></a>00787   <span class="keywordtype">double</span> t0, dl, theta0, pe, st0hg, stg;
-<a name="l00788"></a>00788   <span class="keywordtype">double</span> jd, jd0h;
-<a name="l00789"></a>00789   <span class="keywordtype">double</span> dvelb[4], dvelh[4];
-<a name="l00790"></a>00790   <span class="keywordtype">double</span> alp, del, beov, berv, EDV;
-<a name="l00791"></a>00791   <span class="keywordtype">double</span> HAR, phi, heov, herv;
-<a name="l00792"></a>00792   <span class="keywordtype">double</span> *rbuf;
-<a name="l00793"></a>00793   <span class="keywordtype">char</span> inpsgn[4];
-<a name="l00794"></a>00794   <span class="keywordtype">double</span> *olong, *olat, *alpha, *delta;
-<a name="l00795"></a>00795   <span class="keywordtype">char</span> signs[] = <span class="stringliteral">"+++"</span>;
-<a name="l00796"></a>00796   rbuf = inputr;
-<a name="l00797"></a>00797   inpsgn[1] = inputc[1];
-<a name="l00798"></a>00798   inpsgn[2] = inputc[2];
-<a name="l00799"></a>00799   inpsgn[3] = inputc[3];
-<a name="l00800"></a>00800   olong = rbuf + 7 - 1;
-<a name="l00801"></a>00801   olat  = rbuf + 10 - 1;
-<a name="l00802"></a>00802   alpha = rbuf + 13 - 1;
-<a name="l00803"></a>00803   delta = rbuf + 16 - 1;
-<a name="l00804"></a>00804   <span class="comment">// ... convert UT to real hours, calculate Julian date</span>
-<a name="l00805"></a>00805   <span class="comment">/* We know this one already but convert seconds -> hours */</span>
-<a name="l00806"></a>00806   utr /= 3600;
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809   jd = mod_juldat + 2400000.5;
-<a name="l00810"></a>00810   
-<a name="l00811"></a>00811   <span class="comment">// ... likewise convert longitude and latitude of observatory to real hours</span>
-<a name="l00812"></a>00812   <span class="comment">// ... and degrees, respectively; take care of signs</span>
-<a name="l00813"></a>00813   <span class="comment">// ... NOTE: east longitude is assumed for input !!</span>
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815   <span class="keywordflow">if</span> (olong[1] < 0 || olong[2] < 0 ||
-<a name="l00816"></a>00816       olong[3] < 0 || inpsgn[1] == <span class="charliteral">'-'</span>) {
-<a name="l00817"></a>00817     signs[1] = <span class="charliteral">'-'</span>;
-<a name="l00818"></a>00818     olong[1] = fabs(olong[1]);
-<a name="l00819"></a>00819     olong[2] = fabs(olong[2]);
-<a name="l00820"></a>00820     olong[3] = fabs(olong[3]);
-<a name="l00821"></a>00821   }
-<a name="l00822"></a>00822   dl = olong[1]+olong[2]/60.  +olong[3]/3600.;
-<a name="l00823"></a>00823   <span class="keywordflow">if</span> (signs[1]   == <span class="charliteral">'-'</span>) dl = -dl;
-<a name="l00824"></a>00824   dl = -dl*24.  /360.;
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826   <span class="keywordflow">if</span> (olat[1] < 0 || olat[2] < 0 ||
-<a name="l00827"></a>00827       olat[3] < 0 || inpsgn[2] == <span class="charliteral">'-'</span>) {
-<a name="l00828"></a>00828     signs[2] = <span class="charliteral">'-'</span>;
-<a name="l00829"></a>00829  
-<a name="l00830"></a>00830     olat[1] = fabs(olat[1]);
-<a name="l00831"></a>00831     olat[2] = fabs(olat[2]);
-<a name="l00832"></a>00832     olat[3] = fabs(olat[3]);
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834   }
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836   phi = olat[1]+olat[2]/60.  +olat[3]/3600.;
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838   <span class="keywordflow">if</span> (signs[2]   == <span class="charliteral">'-'</span>) phi = -phi;
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840   phi = phi*M_PI/180. ;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842   <span class="comment">// ... convert right ascension and declination to real radians</span>
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844   alp = (alpha[1]*3600. +alpha[2]*60. +alpha[3])*M_PI/(12.  *3600.  );
-<a name="l00845"></a>00845 
-<a name="l00846"></a>00846   <span class="keywordflow">if</span> (delta[1] < 0 || delta[2] < 0 ||
-<a name="l00847"></a>00847       delta[3] < 0 || inpsgn[3] == <span class="charliteral">'-'</span>) {
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849     signs[3] = <span class="charliteral">'-'</span>;
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851     delta[1] = fabs(delta[1]);
-<a name="l00852"></a>00852     delta[2] = fabs(delta[2]);
-<a name="l00853"></a>00853     delta[3] = fabs(delta[3]);
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855   }
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857   del = (delta[1]*3600.0  + delta[2]*60.   + delta[3])
-<a name="l00858"></a>00858     * M_PI/(3600. *180. );
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862   <span class="keywordflow">if</span> (signs[3]   == <span class="charliteral">'-'</span>) del = - del;
-<a name="l00863"></a>00863 
-<a name="l00864"></a>00864   <span class="comment">// ... calculate earth's orbital velocity in rectangular coordinates X,Y,Z</span>
-<a name="l00865"></a>00865   <span class="comment">// ... for both heliocentric and barycentric frames (DVELH, DVELB)</span>
-<a name="l00866"></a>00866   <span class="comment">// ... Note that setting the second argument of BARVEL to zero as done below</span>
-<a name="l00867"></a>00867   <span class="comment">// ... means that the input coordinates will not be corrected for precession.</span>
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870   barvel(jd, 0.0, dvelh, dvelb);
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872   <span class="comment">// ... with the rectangular velocity components known, the respective projections</span>
-<a name="l00873"></a>00873   <span class="comment">// ... HEOV and BEOV on a given line of sight (ALP,DEL) can be determined:</span>
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875   <span class="comment">// ... REFERENCE: THE ASTRONOMICAL ALMANAC 1982 PAGE:B17</span>
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877   beov =
-<a name="l00878"></a>00878     dvelb[1]*cos(alp)*cos(del)+
-<a name="l00879"></a>00879     dvelb[2]*sin(alp)*cos(del)+
-<a name="l00880"></a>00880     dvelb[3]*sin(del);
-<a name="l00881"></a>00881       
-<a name="l00882"></a>00882   heov =
-<a name="l00883"></a>00883     dvelh[1]*cos(alp)*cos(del)+
-<a name="l00884"></a>00884     dvelh[2]*sin(alp)*cos(del)+
-<a name="l00885"></a>00885     dvelh[3]*sin(del);
-<a name="l00886"></a>00886       
-<a name="l00887"></a>00887 
-<a name="l00888"></a>00888   <span class="comment">// ... For determination also of the contribution due to the diurnal rotation of</span>
-<a name="l00889"></a>00889   <span class="comment">// ... the earth (EDV), the hour angle (HAR) is needed at which the observation</span>
-<a name="l00890"></a>00890   <span class="comment">// ... was made which requires conversion of UT to sidereal time (ST).</span>
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892   <span class="comment">// ... Therefore, first compute ST at 0 hours UT (ST0HG)</span>
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894   <span class="comment">// ... REFERENCE : MEEUS J.,1980,ASTRONOMICAL FORMULAE FOR CALCULATORS</span>
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897   jd0h = jd - (utr/24.0);
-<a name="l00898"></a>00898       
-<a name="l00899"></a>00899   t0 = (jd0h-2415020.  )/36525. ;
-<a name="l00900"></a>00900       
-<a name="l00901"></a>00901 
-<a name="l00902"></a>00902   theta0 = 0.276919398  +100.0021359  *t0+0.000001075  *t0*t0 ;
-<a name="l00903"></a>00903 
-<a name="l00904"></a>00904   pe = (int) theta0;
-<a name="l00905"></a>00905 
-<a name="l00906"></a>00906   theta0 = theta0 - pe;
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908   st0hg = theta0*24. ;
-<a name="l00909"></a>00909 
-<a name="l00910"></a>00910   <span class="comment">// ... now do the conversion UT -> ST (MEAN SIDEREAL TIME)</span>
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912   <span class="comment">// ... REFERENCE : THE ASTRONOMICAL ALMANAC 1983, P B7</span>
-<a name="l00913"></a>00913   <span class="comment">// ... IN 1983: 1 MEAN SOLAR DAY = 1.00273790931 MEAN SIDEREAL DAYS</span>
-<a name="l00914"></a>00914   <span class="comment">// ... ST WITHOUT EQUATION OF EQUINOXES CORRECTION => ACCURACY +/- 1 SEC</span>
-<a name="l00915"></a>00915   <span class="comment">//</span>
-<a name="l00916"></a>00916   stg = st0hg+utr*1.00273790931 ;
-<a name="l00917"></a>00917       
-<a name="l00918"></a>00918   <span class="keywordflow">if</span> (stg < dl) stg = stg +24. ;
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920   STR = stg-dl;
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922 
-<a name="l00923"></a>00923   <span class="keywordflow">if</span> (STR >= 24. ) STR = STR-24. ;
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925   STR = STR*M_PI/12. ;
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927   HAR = STR-alp;
-<a name="l00928"></a>00928       
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930   EDV = -0.4654  * sin(HAR)* cos(del)* cos(phi);
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932   <span class="comment">// ... the total correction (in km/s) is the sum of orbital and diurnal components</span>
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935   herv=heov+EDV;
-<a name="l00936"></a>00936   berv=beov+EDV;
-<a name="l00937"></a>00937 
-<a name="l00938"></a>00938   <span class="comment">/* The following is not needed. Do not translate */</span>
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940 <span class="preprocessor">#if 0</span>
-<a name="l00941"></a>00941 <span class="preprocessor"></span>  <span class="comment">// ... Calculation of the barycentric and heliocentric correction times</span>
-<a name="l00942"></a>00942   <span class="comment">// ... (BCT and HCT) requires knowledge of the earth's position in its</span>
-<a name="l00943"></a>00943   <span class="comment">// ... orbit. Subroutine BARCOR returns the rectangular barycentric (DCORB)</span>
-<a name="l00944"></a>00944   <span class="comment">// ... and heliocentric (DCORH) coordinates.</span>
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946   <span class="comment">//      CALL BARCOR(DCORH,DCORB)</span>
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948   <span class="comment">// ... from this, the correction times (in days) can be determined:</span>
-<a name="l00949"></a>00949   <span class="comment">// ... (REFERENCE: THE ASTRONOMICAL ALMANAC 1982 PAGE:B16)</span>
-<a name="l00950"></a>00950 
-<a name="l00951"></a>00951   <span class="comment">//      BCT=+0.0057756D0*(DCORB(1)*DCOS(ALP)*DCOS(DEL)+</span>
-<a name="l00952"></a>00952   <span class="comment">//     1                DCORB(2)*DSIN(ALP)*DCOS(DEL)+</span>
-<a name="l00953"></a>00953   <span class="comment">//     2                DCORB(3)*          DSIN(DEL))</span>
-<a name="l00954"></a>00954   <span class="comment">//      HCT=+0.0057756D0*(DCORH(1)*DCOS(ALP)*DCOS(DEL)+</span>
-<a name="l00955"></a>00955   <span class="comment">//     1                DCORH(2)*DSIN(ALP)*DCOS(DEL)+</span>
-<a name="l00956"></a>00956   <span class="comment">//     2                DCORH(3)*          DSIN(DEL))</span>
-<a name="l00957"></a>00957 
-<a name="l00958"></a>00958   <span class="comment">//... write results to keywords</span>
-<a name="l00959"></a>00959 
-<a name="l00960"></a>00960   <span class="comment">//      CALL STKWRD('OUTPUTD',BCT,1,1,KUN,STAT)    ! barycentric correction time</span>
-<a name="l00961"></a>00961   <span class="comment">//      CALL STKWRD('OUTPUTD',HCT,2,1,KUN,STAT)    ! heliocentric correction time</span>
-<a name="l00962"></a>00962 <span class="preprocessor">#endif</span>
-<a name="l00963"></a>00963 <span class="preprocessor"></span>
-<a name="l00964"></a>00964   rbuf[1] = berv;   <span class="comment">/* barocentric RV correction */</span>
-<a name="l00965"></a>00965   rbuf[2] = herv;   <span class="comment">/* heliocentric RV correction */</span>
-<a name="l00966"></a>00966   rbuf[3] = EDV;    <span class="comment">/* diurnal RV correction */</span>
-<a name="l00967"></a>00967 
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969   outputr[1] = rbuf[1];
-<a name="l00970"></a>00970   outputr[2] = rbuf[2];
-<a name="l00971"></a>00971   outputr[3] = rbuf[3];
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973   <span class="keywordflow">return</span>;
-<a name="l00974"></a>00974 }
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977 
-<a name="l00978"></a>00978 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00985"></a>00985 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00986"></a>00986 cpl_error_code
-<a name="l00987"></a>00987 sinfo_baryvel(<span class="keyword">const</span> cpl_propertylist *raw_header,
-<a name="l00988"></a>00988          <span class="keywordtype">double</span> *bary_corr,
-<a name="l00989"></a>00989          <span class="keywordtype">double</span> *helio_corr)
-<a name="l00990"></a>00990 {
-<a name="l00991"></a>00991 
-<a name="l00992"></a>00992     <span class="keywordtype">double</span> outputr[4];
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994     <span class="keywordtype">char</span> inputc[] = <span class="stringliteral">"X+++"</span>;       <span class="comment">/* 0th index not used */</span>
-<a name="l00995"></a>00995 
-<a name="l00996"></a>00996     <span class="keywordtype">double</span> rneg = 1.0;
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998     <span class="keywordtype">double</span> inputr[19];                  <span class="comment">/* Do not use the zeroth element */</span>
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000 
-<a name="l01001"></a>01001 <span class="comment">/*</span>
-<a name="l01002"></a>01002 <span class="comment">  qc_ra       = m$value({p1},O_POS(1))</span>
-<a name="l01003"></a>01003 <span class="comment">  qc_dec      = m$value({p1},O_POS(2))</span>
-<a name="l01004"></a>01004 <span class="comment">  qc_geolat   = m$value({p1},{h_geolat})</span>
-<a name="l01005"></a>01005 <span class="comment">  qc_geolon   = m$value({p1},{h_geolon})</span>
-<a name="l01006"></a>01006 <span class="comment">  qc_obs_time = m$value({p1},O_TIME(7))  !using an image as input it take the</span>
-<a name="l01007"></a>01007 <span class="comment">                                         !date from the descriptor O_TIME(1,2,3)</span>
-<a name="l01008"></a>01008 <span class="comment">                                         !and the UT from O_TIME(5)</span>
-<a name="l01009"></a>01009 <span class="comment">*/</span>
-<a name="l01010"></a>01010     <span class="keywordtype">double</span> qc_ra;
-<a name="l01011"></a>01011     <span class="keywordtype">double</span> qc_dec;
-<a name="l01012"></a>01012     <span class="keywordtype">double</span> qc_geolat;
-<a name="l01013"></a>01013     <span class="keywordtype">double</span> qc_geolon;
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015     <span class="keywordtype">double</span> utr;
-<a name="l01016"></a>01016     <span class="keywordtype">double</span> mod_juldat;
-<a name="l01017"></a>01017 
-<a name="l01018"></a>01018     <span class="keywordtype">double</span> ra_hour, ra_min, ra_sec;
-<a name="l01019"></a>01019     <span class="keywordtype">double</span> dec_deg, dec_min, dec_sec;
-<a name="l01020"></a>01020     <span class="keywordtype">double</span> lat_deg, lat_min, lat_sec;
-<a name="l01021"></a>01021     <span class="keywordtype">double</span> lon_deg, lon_min, lon_sec;
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023     check( qc_ra       = sinfo_pfits_get_ra(raw_header),  <span class="comment">/* in degrees */</span>
-<a name="l01024"></a>01024        <span class="stringliteral">"Error getting object right ascension"</span>);
-<a name="l01025"></a>01025     check( qc_dec      = sinfo_pfits_get_dec(raw_header),
-<a name="l01026"></a>01026        <span class="stringliteral">"Error getting object declination"</span>);
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028     check( qc_geolat   = sinfo_pfits_get_geolat(raw_header),
-<a name="l01029"></a>01029        <span class="stringliteral">"Error getting telescope latitude"</span>);
-<a name="l01030"></a>01030     check( qc_geolon   = sinfo_pfits_get_geolon(raw_header),
-<a name="l01031"></a>01031        <span class="stringliteral">"Error getting telescope longitude"</span>);
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033     <span class="comment">/* double qc_obs_time = sinfo_pfits_get_exptime(raw_header);   Not used! */</span>
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035     check( utr         = sinfo_pfits_get_utc(raw_header),
-<a name="l01036"></a>01036        <span class="stringliteral">"Error reading UTC"</span>);
-<a name="l01037"></a>01037     check( mod_juldat  = sinfo_pfits_get_mjdobs(raw_header),
-<a name="l01038"></a>01038        <span class="stringliteral">"Error julian date"</span>);
-<a name="l01039"></a>01039 
-<a name="l01040"></a>01040     deg2hms(qc_ra,     &ra_hour, &ra_min, &ra_sec);
-<a name="l01041"></a>01041     deg2dms(qc_dec,    &dec_deg, &dec_min, &dec_sec);
-<a name="l01042"></a>01042     deg2dms(qc_geolat, &lat_deg, &lat_min, &lat_sec);
-<a name="l01043"></a>01043     deg2dms(qc_geolon, &lon_deg, &lon_min, &lon_sec);
-<a name="l01044"></a>01044 
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046     inputr[7] = lon_deg;
-<a name="l01047"></a>01047     inputr[8] = lon_min;
-<a name="l01048"></a>01048     inputr[9] = lon_sec;
-<a name="l01049"></a>01049 
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051     rneg = (inputr[7]*3600.)+(inputr[8]*60.)+inputr[9];
-<a name="l01052"></a>01052 
-<a name="l01053"></a>01053     inputc[1] = (lon_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055     <span class="keywordflow">if</span> (rneg < 0) inputc[1] = <span class="charliteral">'-'</span>;
-<a name="l01056"></a>01056 
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058     inputr[10] = lat_deg;
-<a name="l01059"></a>01059     inputr[11] = lat_min;
-<a name="l01060"></a>01060     inputr[12] = lat_sec;
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063     rneg = (inputr[10]*3600.)+(inputr[11]*60.)+inputr[12];
-<a name="l01064"></a>01064 
-<a name="l01065"></a>01065     inputc[2] = (lat_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067     <span class="keywordflow">if</span> (rneg < 0) inputc[2] = <span class="charliteral">'-'</span>;
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070     inputr[13] = ra_hour;
-<a name="l01071"></a>01071     inputr[14] = ra_min;
-<a name="l01072"></a>01072     inputr[15] = ra_sec;
-<a name="l01073"></a>01073 
-<a name="l01074"></a>01074 
-<a name="l01075"></a>01075     inputr[16] = dec_deg;
-<a name="l01076"></a>01076     inputr[17] = dec_min;
-<a name="l01077"></a>01077     inputr[18] = dec_sec;
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079 
-<a name="l01080"></a>01080     inputc[3] = (dec_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;
-<a name="l01081"></a>01081 
-<a name="l01082"></a>01082     rneg = (inputr[16]*3600.)+(inputr[17]*60.)+inputr[18];
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084     <span class="keywordflow">if</span> (rneg < 0) inputc[3] = <span class="charliteral">'-'</span>;
-<a name="l01085"></a>01085     
-<a name="l01086"></a>01086 
-<a name="l01087"></a>01087 <span class="comment">//C  INPUTR/R/1/3    date: year,month,day</span>
-<a name="l01088"></a>01088 <span class="comment">//C  INPUTR/R/4/3    universal time: hour,min,sec</span>
-<a name="l01089"></a>01089 <span class="comment">//C  INPUTR/R/7/3    EAST longitude of observatory: degree,min,sec  !! NOTE</span>
-<a name="l01090"></a>01090 <span class="comment">//C  INPUTR/R/10/3   latitude of observatory: degree,min,sec</span>
-<a name="l01091"></a>01091 <span class="comment">//C  INPUTR/R/13/3   right ascension: hour,min,sec</span>
-<a name="l01092"></a>01092 <span class="comment">//C  INPUTR/R/16/3   declination: degree,min,sec</span>
-<a name="l01093"></a>01093 
-<a name="l01094"></a>01094     <span class="comment">/* compute the corrections */</span>
-<a name="l01095"></a>01095     compxy(inputr, inputc, outputr, utr, mod_juldat);
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"        Total barycentric RV correction:  %f km/s"</span>, outputr[1]);
-<a name="l01098"></a>01098    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"        Total heliocentric RV correction: %f km/s"</span>, outputr[2]);
-<a name="l01099"></a>01099    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"          (incl. diurnal RV correction of %f km/s)"</span>, outputr[3]);
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102    *bary_corr = outputr[1];
-<a name="l01103"></a>01103    *helio_corr = outputr[2];
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105   cleanup:
-<a name="l01106"></a>01106     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01107"></a>01107        sinfo_check_rec_status(0);
-<a name="l01108"></a>01108     }
-<a name="l01109"></a>01109     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01110"></a>01110 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_baryvel.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                            *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the ESO SINFONI Pipeline                            *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                    *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify     *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by     *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or        *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                      *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,          *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                             *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License        *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software              *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA     *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                            */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_baryvel.c,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.3  2012/03/02 08:42:20  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * fixed some typos on doxygen</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.2  2009/04/28 11:42:18  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * now return cpl_error_code</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.1  2009/01/02 08:27:58  amodigli</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * added to repository</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.8  2007/06/06 08:17:33  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * replace tab with 4 spaces</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  Includes</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_baryvel.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_utils.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#define H_GEOLAT "ESO TEL GEOLAT"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define H_GEOLON "ESO TEL GEOLON"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define H_UTC "UTC"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">  Local functions</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolat(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolon(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_utc(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keyword">static</span> <span class="keywordtype">void</span> deg2dms(<span class="keywordtype">double</span> in_val, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>             <span class="keywordtype">double</span> *degs,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>             <span class="keywordtype">double</span> *minutes,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>             <span class="keywordtype">double</span> *seconds);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keyword">static</span> <span class="keywordtype">void</span> deg2hms(<span class="keywordtype">double</span> in_val, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>             <span class="keywordtype">double</span> *hour,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>             <span class="keywordtype">double</span> *min,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>             <span class="keywordtype">double</span> *sec);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">static</span> <span class="keywordtype">void</span> compxy(<span class="keywordtype">double</span> inputr[19], <span class="keywordtype">char</span> inputc[4],</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>            <span class="keywordtype">double</span> outputr[4],</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>            <span class="keywordtype">double</span> utr, <span class="keywordtype">double</span> mod_juldat);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keyword">static</span> <span class="keywordtype">void</span> barvel(<span class="keywordtype">double</span> DJE, <span class="keywordtype">double</span> DEQ,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>            <span class="keywordtype">double</span> DVELH[4], <span class="keywordtype">double</span> DVELB[4]);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolat(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">double</span> returnvalue = 0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     check(returnvalue=cpl_propertylist_get_double(plist, H_GEOLAT), </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_GEOLAT);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cleanup:</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">return</span> returnvalue;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_geolon(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">double</span> returnvalue = 0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     check(returnvalue=cpl_propertylist_get_double(plist, H_GEOLON), </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_GEOLON);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   cleanup:</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">return</span> returnvalue;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_pfits_get_utc(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">double</span> returnvalue = 0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     check(returnvalue=cpl_propertylist_get_double(plist, H_UTC), </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>        <span class="stringliteral">"Error reading keyword '%s'"</span>, H_UTC);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>      </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cleanup:</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span> returnvalue;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">#if 0   </span><span class="comment">/* Not used / needed.</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">       We simply get the julian date from the input FITS header */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">//      SUBROUTINE JULDAT(INDATE,UTR,JD)</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">//C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">//C.IDENTIFICATION</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">//C  FORTRAN subroutine                    JULDAT     version 1.0       870102</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">//C  original coding:                      D. Gillet        ESO - Garching</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">//C  variables renamed and restructured:   D. Baade         ST-ECF, Garching</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">//C.KEYWORDS</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">//C  geocentric Julian date</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">//C.PURPOSE</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">//C  calculate geocentric Julian date for any civil date (time in UT)</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">//C.ALGORITHM</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">//C adapted from MEEUS J.,1980, ASTRONOMICAL FORMULAE FOR CALCULATORS</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">//C.INPUT/OUTPUT</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">//C the following are passed from and to the calling program:</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">//C  INDATE(3)    :         civil date as year,month,day OR year.fraction</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">//C  UT           :         universal time expressed in real hours</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">//C  JD           :         real geocentric Julian date</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">//C.REVISIONS</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">//C made to accept also REAL dates         D. Baade             910408</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">//C---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">//C</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> juldat(<span class="keywordtype">double</span> *INDATE,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>        <span class="keywordtype">double</span> UTR,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>        <span class="keywordtype">double</span> *JD)</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordtype">double</span> UT;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordtype">int</span> DATE[4];</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   UT=UTR / 24.0;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">    CHECK FORMAT OF DATE: may be either year,month,date OR year.fraction,0,0 </span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">    (Note that the fraction of the year must NOT include fractions of a day.)</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">    For all other formats exit and terminate also calling command sequence.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">  </span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">    IF ((INDATE(1)-INT(INDATE(1))).GT.1.0E-6) THEN </span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">    IF ((INDATE(2).GT.1.0E-6).OR.(INDATE(3).GT.1.0E-6)) </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">    +       CALL   STETER(1,'Error: Date was entered in wrong format.')</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment"></span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">    copy date input buffer copy to other buffer so that calling program </span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">    does not notice any changes</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment"></span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">    FIRST CASE: format was year.fraction</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment"></span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">    DATE(1)=INT(INDATE(1))</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">    FRAC=INDATE(1)-DATE(1)</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">    DATE(2)=1</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">    DATE(3)=1</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">    ELSE</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">  </span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">    SECOND CASE: format was year,month,day</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   DATE[1]=sinfo_round_double(INDATE[1]);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   FRAC = 0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   DATE[2]=sinfo_round_double(INDATE[2]);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   DATE[3]=sinfo_round_double(INDATE[3]);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   <span class="keywordflow">if</span> ((DATE[2] == 0) &&  (DATE[3] == 0)) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     DATE[2]=1;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     DATE[3]=1;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">    from here on, the normal procedure applies which is based on the </span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">    format year,month,day:</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordflow">if</span> (DATE[2] > 2) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     YP=DATE[1];</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     P=DATE[2];</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     YP=DATE[1]-1;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     P=DATE(2)+12.0;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   C = DATE[1] + DATE[2]*1.E-2 + DATE[3]*1.E-4 + UT*1.E-6;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordflow">if</span> (C  >   1582.1015E0) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     IA=(int) (YP/100.D0);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     A=IA;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     IB=2-IA+((int)(A/4.D0));</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     IB=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   *JD = ((int) (365.25E0*YP)) + ((<span class="keywordtype">int</span>)(30.6001D0*(P+1.D0))) + DATE[3] + UT</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     + IB + 1720994.5E0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">    finally, take into account fraction of year (if any), respect leap</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">    year conventions</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordflow">if</span> (FRAC > 1.0E-6) {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     ND=365;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     IF (C >= 1582.1015E0) {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       IC = DATE[1] % 4;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       <span class="keywordflow">if</span> (IC == 0) {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         ND=366;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         IC = DATE[1] % 100;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         <span class="keywordflow">if</span> (IC == 0) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       IC = DATE[1] % 400;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       <span class="keywordflow">if</span> (IC != 0) ND=365;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordflow">if</span> (fabs(FRAC*ND-sinfo_round_double(FRAC*ND)) > 0.3) {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Fraction of year MAY not correspond to "</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>             <span class="stringliteral">"integer number of days"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     *JD = *JD+sinfo_round_double(FRAC*ND);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="preprocessor">#define MIDAS_BUG 0</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> deg2hms(<span class="keywordtype">double</span> in_val, </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordtype">double</span> *hours,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordtype">double</span> *minutes,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordtype">double</span> *seconds)</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="keywordtype">double</span> tmp;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="keywordtype">char</span> sign;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="keywordflow">if</span> (in_val < 0) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     in_val = fabs(in_val);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     sign = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     sign = <span class="charliteral">'+'</span>;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   tmp   = in_val / 15;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <span class="comment">/* takes the integer part = hours */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="preprocessor">#if MIDAS_BUG</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="preprocessor"></span>  *hours= sinfo_round_double(tmp);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="preprocessor"></span>  *hours= (int) tmp;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="comment">/* takes the mantissa */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   tmp   = tmp - *hours;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="comment">/* converts the mantissa in minutes */</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   tmp   = tmp * 60;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="comment">/* takes the integer part = minutes */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="preprocessor">#if MIDAS_BUG</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="preprocessor"></span>  *minutes= sinfo_round_double(tmp);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="preprocessor"></span>  *minutes= (int) tmp;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="comment">/* takes the mantissa */</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   tmp   = tmp - *minutes;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="comment">/* converts the mantissa in seconds = seconds (with decimal) */</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   *seconds= tmp * 60;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="comment">/* Rather than returning it explicitly, just  attach sign to hours */</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordflow">if</span> (sign == <span class="charliteral">'-'</span>) *hours = -(*hours);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> deg2dms(<span class="keywordtype">double</span> in_val, </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordtype">double</span> *degs,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordtype">double</span> *minutes,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordtype">double</span> *seconds)</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   deg2hms(in_val*15, degs, minutes, seconds);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">/* @cond Convert FORTRAN indexing -> C indexing */</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor">#define DCFEL(x,y)  dcfel[y][x]</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="preprocessor"></span><span class="preprocessor">#define DCFEPS(x,y) dcfeps[y][x]</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor"></span><span class="preprocessor">#define CCSEL(x,y)  ccsel[y][x]</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor"></span><span class="preprocessor">#define DCARGS(x,y) dcargs[y][x]</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="preprocessor"></span><span class="preprocessor">#define CCAMPS(x,y) ccamps[y][x]</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="preprocessor"></span><span class="preprocessor">#define CCSEC(x,y)  ccsec[y][x]</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="preprocessor"></span><span class="preprocessor">#define DCARGM(x,y) dcargm[y][x]</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor"></span><span class="preprocessor">#define CCAMPM(x,y) ccampm[y][x]</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="preprocessor"></span><span class="preprocessor">#define DCEPS(x)    dceps[x]</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor"></span><span class="preprocessor">#define FORBEL(x)   forbel[x]</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor"></span><span class="preprocessor">#define SORBEL(x)   sorbel[x]</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor"></span><span class="preprocessor">#define SN(x)       sn[x]</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="preprocessor"></span><span class="preprocessor">#define SINLP(x)    sinlp[x]</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="preprocessor"></span><span class="preprocessor">#define COSLP(x)    coslp[x]</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="preprocessor"></span><span class="preprocessor">#define CCPAMV(x)   ccpamv[x]</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="preprocessor"></span><span class="comment">/* @endcond */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="keyword">static</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="keywordtype">void</span> barvel(<span class="keywordtype">double</span> DJE, <span class="keywordtype">double</span> DEQ,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         <span class="keywordtype">double</span> DVELH[4], <span class="keywordtype">double</span> DVELB[4])</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   <span class="keywordtype">double</span> sn[5];</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   <span class="keywordtype">double</span> DT,DTL,DTSQ,DLOCAL;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordtype">double</span> DRD,DRLD;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <span class="keywordtype">double</span> DXBD,DYBD,DZBD,DZHD,DXHD,DYHD;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   <span class="keywordtype">double</span> DYAHD,DZAHD,DYABD,DZABD;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   <span class="keywordtype">double</span> DML,DEPS,PHI,PHID,PSID,DPARAM,PARAM;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <span class="keywordtype">double</span> PLON,POMG,PECC;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordtype">double</span> PERTL,PERTLD,PERTRD,PERTP,PERTR,PERTPD;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   <span class="keywordtype">double</span> SINA,TL;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   <span class="keywordtype">double</span> COSA,ESQ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="keywordtype">double</span> A,B,F,SINF,COSF,T,TSQ,TWOE,TWOG;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   <span class="keywordtype">double</span> DPSI,D1PDRO,DSINLS;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   <span class="keywordtype">double</span> DCOSLS,DSINEP,DCOSEP;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="keywordtype">double</span> forbel[8], sorbel[18], sinlp[5], coslp[5];</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordtype">double</span> SINLM,COSLM,SIGMA;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordtype">int</span> IDEQ,K,N;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   <span class="keywordtype">double</span> *E = sorbel + 1 - 1;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="keywordtype">double</span> *G = forbel + 1 - 1;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   <span class="keywordtype">double</span> DC2PI = 6.2831853071796E0;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   <span class="keywordtype">double</span> CC2PI = 6.283185;             <span class="comment">/* ??? */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   <span class="keywordtype">double</span> DC1 = 1.0;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   <span class="keywordtype">double</span> DCT0 = 2415020.0E0;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>   <span class="keywordtype">double</span> DCJUL = 36525.0E0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   <span class="keywordtype">double</span> dcfel[][4] = { {0, 0, 0, 0},</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>             {0, 1.7400353E+00, 6.2833195099091E+02, 5.2796E-06},</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>             {0, 6.2565836E+00, 6.2830194572674E+02,-2.6180E-06},</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>             {0, 4.7199666E+00, 8.3997091449254E+03,-1.9780E-05},</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>             {0, 1.9636505E-01, 8.4334662911720E+03,-5.6044E-05},</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             {0, 4.1547339E+00, 5.2993466764997E+01, 5.8845E-06},</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             {0, 4.6524223E+00, 2.1354275911213E+01, 5.6797E-06},</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             {0, 4.2620486E+00, 7.5025342197656E+00, 5.5317E-06},</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>             {0, 1.4740694E+00, 3.8377331909193E+00, 5.6093E-06} };</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   <span class="keywordtype">double</span> dceps[4] = {0, 4.093198E-01,-2.271110E-04,-2.860401E-08};</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="keywordtype">double</span> ccsel[][4] = { {0, 0, 0, 0},</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>             {0, 1.675104E-02, -4.179579E-05, -1.260516E-07},</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>             {0, 2.220221E-01,  2.809917E-02,  1.852532E-05},</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>             {0, 1.589963E+00,  3.418075E-02,  1.430200E-05},</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             {0, 2.994089E+00,  2.590824E-02,  4.155840E-06},</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>             {0, 8.155457E-01,  2.486352E-02,  6.836840E-06},</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>             {0, 1.735614E+00,  1.763719E-02,  6.370440E-06},</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>             {0, 1.968564E+00,  1.524020E-02, -2.517152E-06},</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>             {0, 1.282417E+00,  8.703393E-03,  2.289292E-05},</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             {0, 2.280820E+00,  1.918010E-02,  4.484520E-06},</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             {0, 4.833473E-02,  1.641773E-04, -4.654200E-07},</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>             {0, 5.589232E-02, -3.455092E-04, -7.388560E-07},</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>             {0, 4.634443E-02, -2.658234E-05,  7.757000E-08},</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             {0, 8.997041E-03,  6.329728E-06, -1.939256E-09},</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>             {0, 2.284178E-02, -9.941590E-05,  6.787400E-08},</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             {0, 4.350267E-02, -6.839749E-05, -2.714956E-07},</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>             {0, 1.348204E-02,  1.091504E-05,  6.903760E-07},</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>             {0, 3.106570E-02, -1.665665E-04, -1.590188E-07} };</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   <span class="keywordtype">double</span> dcargs[][3] = { {0, 0, 0},</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>              {0, 5.0974222E+00, -7.8604195454652E+02},</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>              {0, 3.9584962E+00, -5.7533848094674E+02},</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>              {0, 1.6338070E+00, -1.1506769618935E+03},</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>              {0, 2.5487111E+00, -3.9302097727326E+02},</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>              {0, 4.9255514E+00, -5.8849265665348E+02},</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>              {0, 1.3363463E+00, -5.5076098609303E+02},</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>              {0, 1.6072053E+00, -5.2237501616674E+02},</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>              {0, 1.3629480E+00, -1.1790629318198E+03},</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>              {0, 5.5657014E+00, -1.0977134971135E+03},</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>              {0, 5.0708205E+00, -1.5774000881978E+02},</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>              {0, 3.9318944E+00,  5.2963464780000E+01},</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>              {0, 4.8989497E+00,  3.9809289073258E+01},</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>              {0, 1.3097446E+00,  7.7540959633708E+01},</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>              {0, 3.5147141E+00,  7.9618578146517E+01},</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>              {0, 3.5413158E+00, -5.4868336758022E+02} };</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   <span class="keywordtype">double</span> ccamps[][6] = </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     {{0, 0, 0, 0, 0, 0},</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>      {0, -2.279594E-5,  1.407414E-5,  8.273188E-6,  1.340565E-5, -2.490817E-7},</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>      {0, -3.494537E-5,  2.860401E-7,  1.289448E-7,  1.627237E-5, -1.823138E-7},</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>      {0,  6.593466E-7,  1.322572E-5,  9.258695E-6, -4.674248E-7, -3.646275E-7},</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>      {0,  1.140767E-5, -2.049792E-5, -4.747930E-6, -2.638763E-6, -1.245408E-7},</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>      {0,  9.516893E-6, -2.748894E-6, -1.319381E-6, -4.549908E-6, -1.864821E-7},</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>      {0,  7.310990E-6, -1.924710E-6, -8.772849E-7, -3.334143E-6, -1.745256E-7},</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>      {0, -2.603449E-6,  7.359472E-6,  3.168357E-6,  1.119056E-6, -1.655307E-7},</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>      {0, -3.228859E-6,  1.308997E-7,  1.013137E-7,  2.403899E-6, -3.736225E-7},</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>      {0,  3.442177E-7,  2.671323E-6,  1.832858E-6, -2.394688E-7, -3.478444E-7},</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>      {0,  8.702406E-6, -8.421214E-6, -1.372341E-6, -1.455234E-6, -4.998479E-8},</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>      {0, -1.488378E-6, -1.251789E-5,  5.226868E-7, -2.049301E-7,  0.0E0},</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>      {0, -8.043059E-6, -2.991300E-6,  1.473654E-7, -3.154542E-7,  0.0E0},</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>      {0,  3.699128E-6, -3.316126E-6,  2.901257E-7,  3.407826E-7,  0.0E0},</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>      {0,  2.550120E-6, -1.241123E-6,  9.901116E-8,  2.210482E-7,  0.0E0},</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>      {0, -6.351059E-7,  2.341650E-6,  1.061492E-6,  2.878231E-7,  0.0E0}};</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordtype">double</span> CCSEC3 = -7.757020E-08;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="keywordtype">double</span> ccsec[][4] = { {0, 0, 0, 0},</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>             {0, 1.289600E-06,  5.550147E-01,  2.076942E+00},</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>             {0, 3.102810E-05,  4.035027E+00,  3.525565E-01},</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>             {0, 9.124190E-06,  9.990265E-01,  2.622706E+00},</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>             {0, 9.793240E-07,  5.508259E+00,  1.559103E+01}};</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="keywordtype">double</span> DCSLD =  1.990987E-07, CCSGD = 1.990969E-07;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   <span class="keywordtype">double</span> CCKM = 3.122140E-05, CCMLD = 2.661699E-06, CCFDI = 2.399485E-07;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   <span class="keywordtype">double</span> dcargm[][3] = {{0, 0, 0},</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>             {0, 5.1679830E+00,  8.3286911095275E+03},</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>             {0, 5.4913150E+00, -7.2140632838100E+03},</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>             {0, 5.9598530E+00,  1.5542754389685E+04}};</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   <span class="keywordtype">double</span> ccampm[][5] = {{0, 0, 0, 0, 0},</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             {0,  1.097594E-01,  2.896773E-07,  5.450474E-02,  1.438491E-07},</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             {0, -2.223581E-02,  5.083103E-08,  1.002548E-02, -2.291823E-08},</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>             {0,  1.148966E-02,  5.658888E-08,  8.249439E-03,  4.063015E-08} };</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   <span class="keywordtype">double</span> ccpamv[] = {0, 8.326827E-11, 1.843484E-11, 1.988712E-12, 1.881276E-12};</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   <span class="keywordtype">double</span> DC1MME = 0.99999696E0;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   IDEQ=DEQ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   DT=(DJE-DCT0)/DCJUL;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   T=DT;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   DTSQ=DT*DT;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   TSQ=DTSQ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   DML = 0;  <span class="comment">/* Suppress warning */</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <span class="keywordflow">for</span> (K = 1; K <= 8; K++) {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     DLOCAL=fmod(DCFEL(1,K)+DT*DCFEL(2,K)+DTSQ*DCFEL(3,K),DC2PI);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     <span class="keywordflow">if</span> (K == 1)  DML=DLOCAL;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keywordflow">if</span> (K != 1)  FORBEL(K-1)=DLOCAL;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   }</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   DEPS=fmod(DCEPS(1)+DT*DCEPS(2)+DTSQ*DCEPS(3), DC2PI);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="keywordflow">for</span> (K = 1; K <= 17; K++) {</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     SORBEL(K)=fmod(CCSEL(1,K)+T*CCSEL(2,K)+TSQ*CCSEL(3,K),CC2PI);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   }</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="keywordflow">for</span> (K = 1; K <= 4; K++) {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     A=fmod(CCSEC(2,K)+T*CCSEC(3,K),CC2PI);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     SN(K)=sin(A);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   PERTL =  CCSEC(1,1)          *SN(1) +CCSEC(1,2)*SN(2)</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     +(CCSEC(1,3)+T*CCSEC3)*SN(3) +CCSEC(1,4)*SN(4);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   PERTLD=0.0;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   PERTR =0.0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   PERTRD=0.0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   <span class="keywordflow">for</span> (K = 1; K <= 15; K++) {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     A=fmod(DCARGS(1,K)+DT*DCARGS(2,K), DC2PI);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     COSA=cos(A);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     SINA=sin(A);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     PERTL =PERTL+CCAMPS(1,K)*COSA+CCAMPS(2,K)*SINA;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     PERTR =PERTR+CCAMPS(3,K)*COSA+CCAMPS(4,K)*SINA;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keywordflow">if</span> (K >= 11) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     PERTLD=PERTLD+(CCAMPS(2,K)*COSA-CCAMPS(1,K)*SINA)*CCAMPS(5,K);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     PERTRD=PERTRD+(CCAMPS(4,K)*COSA-CCAMPS(3,K)*SINA)*CCAMPS(5,K);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   ESQ=E[1]*E[1];</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   DPARAM=DC1-ESQ;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   PARAM=DPARAM;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   TWOE=E[1]+E[1];</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   TWOG=G[1]+G[1];</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   PHI=TWOE*((1.0-ESQ*0.125  )*sin(G[1])+E[1]*0.625  *sin(TWOG)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>         +ESQ*0.5416667  *sin(G[1]+TWOG) ) ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   F=G[1]+PHI;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   SINF=sin(F);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   COSF=cos(F);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   DPSI=DPARAM/(DC1+E[1]*COSF);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   PHID=TWOE*CCSGD*((1.0+ESQ*1.5  )*COSF+E[1]*(1.25  -SINF*SINF*0.5  ));</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   PSID=CCSGD*E[1]*SINF/sqrt(PARAM);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   D1PDRO=(DC1+PERTR);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   DRD=D1PDRO*(PSID+DPSI*PERTRD);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   DRLD=D1PDRO*DPSI*(DCSLD+PHID+PERTLD);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   DTL=fmod(DML+PHI+PERTL, DC2PI);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>   DSINLS=sin(DTL);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   DCOSLS=cos(DTL);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   DXHD = DRD*DCOSLS-DRLD*DSINLS;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>   DYHD = DRD*DSINLS+DRLD*DCOSLS;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   PERTL =0.0;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   PERTLD=0.0;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   PERTP =0.0;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   PERTPD=0.0;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   <span class="keywordflow">for</span> (K = 1; K <= 3; K++) {</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     A=fmod(DCARGM(1,K)+DT*DCARGM(2,K), DC2PI);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     SINA  =sin(A);</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     COSA  =cos(A);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     PERTL =PERTL +CCAMPM(1,K)*SINA;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     PERTLD=PERTLD+CCAMPM(2,K)*COSA;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     PERTP =PERTP +CCAMPM(3,K)*COSA;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     PERTPD=PERTPD-CCAMPM(4,K)*SINA;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   TL=FORBEL(2)+PERTL;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   SINLM=sin(TL);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   COSLM=cos(TL);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   SIGMA=CCKM/(1.0+PERTP);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   A=SIGMA*(CCMLD+PERTLD);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   B=SIGMA*PERTPD;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   DXHD=DXHD+A*SINLM+B*COSLM;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   DYHD=DYHD-A*COSLM+B*SINLM;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   DZHD=    -SIGMA*CCFDI* cos(FORBEL(3));</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   DXBD=DXHD*DC1MME;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   DYBD=DYHD*DC1MME;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   DZBD=DZHD*DC1MME;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="keywordflow">for</span> (K = 1; K <= 4; K++) {</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     PLON=FORBEL(K+3);</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     POMG=SORBEL(K+1);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     PECC=SORBEL(K+9);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     TL=fmod(PLON+2.0*PECC* sin(PLON-POMG), CC2PI);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     SINLP(K)= sin(TL);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     COSLP(K)= cos(TL);</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     DXBD=DXBD+CCPAMV(K)*(SINLP(K)+PECC*sin(POMG));</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     DYBD=DYBD-CCPAMV(K)*(COSLP(K)+PECC*cos(POMG));</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     DZBD=DZBD-CCPAMV(K)*SORBEL(K+13)*cos(PLON-SORBEL(K+5));</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   DCOSEP=cos(DEPS);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   DSINEP=sin(DEPS);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>   DYAHD=DCOSEP*DYHD-DSINEP*DZHD;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   DZAHD=DSINEP*DYHD+DCOSEP*DZHD;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   DYABD=DCOSEP*DYBD-DSINEP*DZBD;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>   DZABD=DSINEP*DYBD+DCOSEP*DZBD;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   DVELH[1]=DXHD;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   DVELH[2]=DYAHD;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   DVELH[3]=DZAHD;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   DVELB[1]=DXBD;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   DVELB[2]=DYABD;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   DVELB[3]=DZABD;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   <span class="keywordflow">for</span> (N = 1; N <= 3; N++) {</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     DVELH[N]=DVELH[N]*1.4959787E8;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     DVELB[N]=DVELB[N]*1.4959787E8;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>   }</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> compxy(<span class="keywordtype">double</span> inputr[19], <span class="keywordtype">char</span> inputc[4],</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>        <span class="keywordtype">double</span> outputr[4],</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>        <span class="keywordtype">double</span> utr, <span class="keywordtype">double</span> mod_juldat)</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> {</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   <span class="keywordtype">double</span> STR;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>   <span class="keywordtype">double</span> t0, dl, theta0, pe, st0hg, stg;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="keywordtype">double</span> jd, jd0h;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordtype">double</span> dvelb[4], dvelh[4];</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">double</span> alp, del, beov, berv, EDV;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <span class="keywordtype">double</span> HAR, phi, heov, herv;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   <span class="keywordtype">double</span> *rbuf;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordtype">char</span> inpsgn[4];</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   <span class="keywordtype">double</span> *olong, *olat, *alpha, *delta;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="keywordtype">char</span> signs[] = <span class="stringliteral">"+++"</span>;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   rbuf = inputr;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   inpsgn[1] = inputc[1];</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   inpsgn[2] = inputc[2];</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   inpsgn[3] = inputc[3];</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   olong = rbuf + 7 - 1;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   olat  = rbuf + 10 - 1;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   alpha = rbuf + 13 - 1;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   delta = rbuf + 16 - 1;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   <span class="comment">// ... convert UT to real hours, calculate Julian date</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   <span class="comment">/* We know this one already but convert seconds -> hours */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   utr /= 3600;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   jd = mod_juldat + 2400000.5;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   <span class="comment">// ... likewise convert longitude and latitude of observatory to real hours</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   <span class="comment">// ... and degrees, respectively; take care of signs</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   <span class="comment">// ... NOTE: east longitude is assumed for input !!</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   <span class="keywordflow">if</span> (olong[1] < 0 || olong[2] < 0 ||</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>       olong[3] < 0 || inpsgn[1] == <span class="charliteral">'-'</span>) {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     signs[1] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     olong[1] = fabs(olong[1]);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     olong[2] = fabs(olong[2]);</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     olong[3] = fabs(olong[3]);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   dl = olong[1]+olong[2]/60.  +olong[3]/3600.;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   <span class="keywordflow">if</span> (signs[1]   == <span class="charliteral">'-'</span>) dl = -dl;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   dl = -dl*24.  /360.;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   <span class="keywordflow">if</span> (olat[1] < 0 || olat[2] < 0 ||</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>       olat[3] < 0 || inpsgn[2] == <span class="charliteral">'-'</span>) {</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     signs[2] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>  </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     olat[1] = fabs(olat[1]);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     olat[2] = fabs(olat[2]);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     olat[3] = fabs(olat[3]);</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>   }</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   phi = olat[1]+olat[2]/60.  +olat[3]/3600.;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   <span class="keywordflow">if</span> (signs[2]   == <span class="charliteral">'-'</span>) phi = -phi;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>   phi = phi*M_PI/180. ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>   <span class="comment">// ... convert right ascension and declination to real radians</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>   alp = (alpha[1]*3600. +alpha[2]*60. +alpha[3])*M_PI/(12.  *3600.  );</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   <span class="keywordflow">if</span> (delta[1] < 0 || delta[2] < 0 ||</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>       delta[3] < 0 || inpsgn[3] == <span class="charliteral">'-'</span>) {</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> </div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     signs[3] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     delta[1] = fabs(delta[1]);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     delta[2] = fabs(delta[2]);</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     delta[3] = fabs(delta[3]);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>   del = (delta[1]*3600.0  + delta[2]*60.   + delta[3])</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     * M_PI/(3600. *180. );</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   <span class="keywordflow">if</span> (signs[3]   == <span class="charliteral">'-'</span>) del = - del;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   <span class="comment">// ... calculate earth's orbital velocity in rectangular coordinates X,Y,Z</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>   <span class="comment">// ... for both heliocentric and barycentric frames (DVELH, DVELB)</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   <span class="comment">// ... Note that setting the second argument of BARVEL to zero as done below</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>   <span class="comment">// ... means that the input coordinates will not be corrected for precession.</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   barvel(jd, 0.0, dvelh, dvelb);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   <span class="comment">// ... with the rectangular velocity components known, the respective projections</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   <span class="comment">// ... HEOV and BEOV on a given line of sight (ALP,DEL) can be determined:</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>   <span class="comment">// ... REFERENCE: THE ASTRONOMICAL ALMANAC 1982 PAGE:B17</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   beov =</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     dvelb[1]*cos(alp)*cos(del)+</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     dvelb[2]*sin(alp)*cos(del)+</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     dvelb[3]*sin(del);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>       </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   heov =</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     dvelh[1]*cos(alp)*cos(del)+</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     dvelh[2]*sin(alp)*cos(del)+</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     dvelh[3]*sin(del);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>       </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   <span class="comment">// ... For determination also of the contribution due to the diurnal rotation of</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="comment">// ... the earth (EDV), the hour angle (HAR) is needed at which the observation</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   <span class="comment">// ... was made which requires conversion of UT to sidereal time (ST).</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   <span class="comment">// ... Therefore, first compute ST at 0 hours UT (ST0HG)</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   <span class="comment">// ... REFERENCE : MEEUS J.,1980,ASTRONOMICAL FORMULAE FOR CALCULATORS</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>   jd0h = jd - (utr/24.0);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>       </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   t0 = (jd0h-2415020.  )/36525. ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>       </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   theta0 = 0.276919398  +100.0021359  *t0+0.000001075  *t0*t0 ;</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> </div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   pe = (int) theta0;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>   theta0 = theta0 - pe;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   st0hg = theta0*24. ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   <span class="comment">// ... now do the conversion UT -> ST (MEAN SIDEREAL TIME)</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   <span class="comment">// ... REFERENCE : THE ASTRONOMICAL ALMANAC 1983, P B7</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   <span class="comment">// ... IN 1983: 1 MEAN SOLAR DAY = 1.00273790931 MEAN SIDEREAL DAYS</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   <span class="comment">// ... ST WITHOUT EQUATION OF EQUINOXES CORRECTION => ACCURACY +/- 1 SEC</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   stg = st0hg+utr*1.00273790931 ;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>       </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   <span class="keywordflow">if</span> (stg < dl) stg = stg +24. ;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   STR = stg-dl;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   <span class="keywordflow">if</span> (STR >= 24. ) STR = STR-24. ;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   STR = STR*M_PI/12. ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   HAR = STR-alp;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>       </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   EDV = -0.4654  * sin(HAR)* cos(del)* cos(phi);</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   <span class="comment">// ... the total correction (in km/s) is the sum of orbital and diurnal components</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   herv=heov+EDV;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   berv=beov+EDV;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   <span class="comment">/* The following is not needed. Do not translate */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="preprocessor">#if 0</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> <span class="preprocessor"></span>  <span class="comment">// ... Calculation of the barycentric and heliocentric correction times</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   <span class="comment">// ... (BCT and HCT) requires knowledge of the earth's position in its</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   <span class="comment">// ... orbit. Subroutine BARCOR returns the rectangular barycentric (DCORB)</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   <span class="comment">// ... and heliocentric (DCORH) coordinates.</span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <span class="comment">//      CALL BARCOR(DCORH,DCORB)</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   <span class="comment">// ... from this, the correction times (in days) can be determined:</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   <span class="comment">// ... (REFERENCE: THE ASTRONOMICAL ALMANAC 1982 PAGE:B16)</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   <span class="comment">//      BCT=+0.0057756D0*(DCORB(1)*DCOS(ALP)*DCOS(DEL)+</span></div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>   <span class="comment">//     1                DCORB(2)*DSIN(ALP)*DCOS(DEL)+</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>   <span class="comment">//     2                DCORB(3)*          DSIN(DEL))</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>   <span class="comment">//      HCT=+0.0057756D0*(DCORH(1)*DCOS(ALP)*DCOS(DEL)+</span></div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <span class="comment">//     1                DCORH(2)*DSIN(ALP)*DCOS(DEL)+</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   <span class="comment">//     2                DCORH(3)*          DSIN(DEL))</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   <span class="comment">//... write results to keywords</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   <span class="comment">//      CALL STKWRD('OUTPUTD',BCT,1,1,KUN,STAT)    ! barycentric correction time</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>   <span class="comment">//      CALL STKWRD('OUTPUTD',HCT,2,1,KUN,STAT)    ! heliocentric correction time</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   rbuf[1] = berv;   <span class="comment">/* barocentric RV correction */</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>   rbuf[2] = herv;   <span class="comment">/* heliocentric RV correction */</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>   rbuf[3] = EDV;    <span class="comment">/* diurnal RV correction */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   outputr[1] = rbuf[1];</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>   outputr[2] = rbuf[2];</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>   outputr[3] = rbuf[3];</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> </div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> cpl_error_code</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> sinfo_baryvel(<span class="keyword">const</span> cpl_propertylist *raw_header,</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>          <span class="keywordtype">double</span> *bary_corr,</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>          <span class="keywordtype">double</span> *helio_corr)</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> {</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> </div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     <span class="keywordtype">double</span> outputr[4];</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordtype">char</span> inputc[] = <span class="stringliteral">"X+++"</span>;       <span class="comment">/* 0th index not used */</span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     <span class="keywordtype">double</span> rneg = 1.0;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     <span class="keywordtype">double</span> inputr[19];                  <span class="comment">/* Do not use the zeroth element */</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">  qc_ra       = m$value({p1},O_POS(1))</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">  qc_dec      = m$value({p1},O_POS(2))</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">  qc_geolat   = m$value({p1},{h_geolat})</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">  qc_geolon   = m$value({p1},{h_geolon})</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="comment">  qc_obs_time = m$value({p1},O_TIME(7))  !using an image as input it take the</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">                                         !date from the descriptor O_TIME(1,2,3)</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">                                         !and the UT from O_TIME(5)</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     <span class="keywordtype">double</span> qc_ra;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordtype">double</span> qc_dec;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     <span class="keywordtype">double</span> qc_geolat;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     <span class="keywordtype">double</span> qc_geolon;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="keywordtype">double</span> utr;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     <span class="keywordtype">double</span> mod_juldat;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     <span class="keywordtype">double</span> ra_hour, ra_min, ra_sec;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     <span class="keywordtype">double</span> dec_deg, dec_min, dec_sec;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     <span class="keywordtype">double</span> lat_deg, lat_min, lat_sec;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     <span class="keywordtype">double</span> lon_deg, lon_min, lon_sec;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     check( qc_ra       = sinfo_pfits_get_ra(raw_header),  <span class="comment">/* in degrees */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>        <span class="stringliteral">"Error getting object right ascension"</span>);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     check( qc_dec      = sinfo_pfits_get_dec(raw_header),</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>        <span class="stringliteral">"Error getting object declination"</span>);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     check( qc_geolat   = sinfo_pfits_get_geolat(raw_header),</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>        <span class="stringliteral">"Error getting telescope latitude"</span>);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     check( qc_geolon   = sinfo_pfits_get_geolon(raw_header),</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>        <span class="stringliteral">"Error getting telescope longitude"</span>);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="comment">/* double qc_obs_time = sinfo_pfits_get_exptime(raw_header);   Not used! */</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     check( utr         = sinfo_pfits_get_utc(raw_header),</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>        <span class="stringliteral">"Error reading UTC"</span>);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     check( mod_juldat  = sinfo_pfits_get_mjdobs(raw_header),</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>        <span class="stringliteral">"Error julian date"</span>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     deg2hms(qc_ra,     &ra_hour, &ra_min, &ra_sec);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     deg2dms(qc_dec,    &dec_deg, &dec_min, &dec_sec);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     deg2dms(qc_geolat, &lat_deg, &lat_min, &lat_sec);</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     deg2dms(qc_geolon, &lon_deg, &lon_min, &lon_sec);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     inputr[7] = lon_deg;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     inputr[8] = lon_min;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     inputr[9] = lon_sec;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     rneg = (inputr[7]*3600.)+(inputr[8]*60.)+inputr[9];</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     inputc[1] = (lon_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordflow">if</span> (rneg < 0) inputc[1] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     inputr[10] = lat_deg;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     inputr[11] = lat_min;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     inputr[12] = lat_sec;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     rneg = (inputr[10]*3600.)+(inputr[11]*60.)+inputr[12];</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     inputc[2] = (lat_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <span class="keywordflow">if</span> (rneg < 0) inputc[2] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     inputr[13] = ra_hour;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     inputr[14] = ra_min;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     inputr[15] = ra_sec;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     inputr[16] = dec_deg;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     inputr[17] = dec_min;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     inputr[18] = dec_sec;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     inputc[3] = (dec_deg >= 0) ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     rneg = (inputr[16]*3600.)+(inputr[17]*60.)+inputr[18];</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     <span class="keywordflow">if</span> (rneg < 0) inputc[3] = <span class="charliteral">'-'</span>;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment">//C  INPUTR/R/1/3    date: year,month,day</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment">//C  INPUTR/R/4/3    universal time: hour,min,sec</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">//C  INPUTR/R/7/3    EAST longitude of observatory: degree,min,sec  !! NOTE</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">//C  INPUTR/R/10/3   latitude of observatory: degree,min,sec</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment">//C  INPUTR/R/13/3   right ascension: hour,min,sec</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="comment">//C  INPUTR/R/16/3   declination: degree,min,sec</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="comment">/* compute the corrections */</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     compxy(inputr, inputc, outputr, utr, mod_juldat);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"        Total barycentric RV correction:  %f km/s"</span>, outputr[1]);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"        Total heliocentric RV correction: %f km/s"</span>, outputr[2]);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"          (incl. diurnal RV correction of %f km/s)"</span>, outputr[3]);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>    *bary_corr = outputr[1];</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>    *helio_corr = outputr[2];</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   cleanup:</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>        sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     }</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__baryvel_8h_source.html b/html/sinfo__baryvel_8h_source.html
index 3bf1e9a..c2932e1 100644
--- a/html/sinfo__baryvel_8h_source.html
+++ b/html/sinfo__baryvel_8h_source.html
@@ -2,76 +2,107 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_baryvel.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_baryvel.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO UVES Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2009/04/28 11:42:18 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_baryvel.h,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.2  2009/04/28 11:42:18  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * now return cpl_error_code</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.1  2009/01/02 08:38:07  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * added to CVS</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.3  2007/06/06 08:17:33  amodigli</span>
-<a name="l00033"></a>00033 <span class="comment"> * replace tab with 4 spaces</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.2  2007/04/24 12:50:29  jmlarsen</span>
-<a name="l00036"></a>00036 <span class="comment"> * Replaced cpl_propertylist -> uves_propertylist which is much faster</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.1  2006/10/04 11:03:08  jmlarsen</span>
-<a name="l00039"></a>00039 <span class="comment"> * Implemented QC.VRAD parameters</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Revision 1.4  2006/08/17 13:56:52  jmlarsen</span>
-<a name="l00042"></a>00042 <span class="comment"> * Reduced max line length</span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"> * Revision 1.3  2006/02/28 09:15:22  jmlarsen</span>
-<a name="l00045"></a>00045 <span class="comment"> * Minor update</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> * Revision 1.2  2005/12/19 16:17:56  jmlarsen</span>
-<a name="l00048"></a>00048 <span class="comment"> * Replaced bool -> int</span>
-<a name="l00049"></a>00049 <span class="comment"> *</span>
-<a name="l00050"></a>00050 <span class="comment"> */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#ifndef SINFO_BARYVEL_H</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BARYVEL_H</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 cpl_error_code
-<a name="l00057"></a>00057 sinfo_baryvel(<span class="keyword">const</span> cpl_propertylist *raw_header,
-<a name="l00058"></a>00058          <span class="keywordtype">double</span> *barycor,
-<a name="l00059"></a>00059          <span class="keywordtype">double</span> *helicor);
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="preprocessor">#endif  </span><span class="comment">/* SINFO_BARYVEL_H */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_baryvel.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO UVES Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2009/04/28 11:42:18 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_baryvel.h,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.2  2009/04/28 11:42:18  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * now return cpl_error_code</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.1  2009/01/02 08:38:07  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * added to CVS</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.3  2007/06/06 08:17:33  amodigli</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * replace tab with 4 spaces</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.2  2007/04/24 12:50:29  jmlarsen</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * Replaced cpl_propertylist -> uves_propertylist which is much faster</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.1  2006/10/04 11:03:08  jmlarsen</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * Implemented QC.VRAD parameters</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.4  2006/08/17 13:56:52  jmlarsen</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * Reduced max line length</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.3  2006/02/28 09:15:22  jmlarsen</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * Minor update</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> * Revision 1.2  2005/12/19 16:17:56  jmlarsen</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> * Replaced bool -> int</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#ifndef SINFO_BARYVEL_H</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BARYVEL_H</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> cpl_error_code</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> sinfo_baryvel(<span class="keyword">const</span> cpl_propertylist *raw_header,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>          <span class="keywordtype">double</span> *barycor,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>          <span class="keywordtype">double</span> *helicor);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#endif  </span><span class="comment">/* SINFO_BARYVEL_H */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__boltzmann_8c_source.html b/html/sinfo__boltzmann_8c_source.html
index decfda1..16cfccf 100644
--- a/html/sinfo__boltzmann_8c_source.html
+++ b/html/sinfo__boltzmann_8c_source.html
@@ -2,2291 +2,2322 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_boltzmann.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_boltzmann.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  27/02/01  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        new_boltzmann.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        routines to determine the absolute positions of the slitlets out</span>
-<a name="l00033"></a>00033 <span class="comment">*        of an emission line frame</span>
-<a name="l00034"></a>00034 <span class="comment">*</span>
-<a name="l00035"></a>00035 <span class="comment">*   SYNOPSIS</span>
-<a name="l00036"></a>00036 <span class="comment">*   #include "absolute.h"</span>
-<a name="l00037"></a>00037 <span class="comment">*</span>
-<a name="l00038"></a>00038 <span class="comment">*   1) float sinfo_new_boltz ( float * xdat, float * parlist )</span>
-<a name="l00039"></a>00039 <span class="comment">*   2) void sinfo_new_boltz_deriv( float * xdat, float * parlist, </span>
-<a name="l00040"></a>00040 <span class="comment">                                   float * dervs )</span>
-<a name="l00041"></a>00041 <span class="comment">*   3) static int sinfo_new_inv_mat (void)</span>
-<a name="l00042"></a>00042 <span class="comment">*   4) static void sinfo_new_get_mat ( float * xdat,</span>
-<a name="l00043"></a>00043 <span class="comment">*                            int   * xdim,</span>
-<a name="l00044"></a>00044 <span class="comment">*                            float * ydat,</span>
-<a name="l00045"></a>00045 <span class="comment">*                            float * wdat,</span>
-<a name="l00046"></a>00046 <span class="comment">*                            int   * ndat,</span>
-<a name="l00047"></a>00047 <span class="comment">*                            float * fpar,</span>
-<a name="l00048"></a>00048 <span class="comment">*                            float * epar,</span>
-<a name="l00049"></a>00049 <span class="comment">*                            int   * npar )</span>
-<a name="l00050"></a>00050 <span class="comment">*   5) static int sinfo_new_get_vec ( float * xdat,</span>
-<a name="l00051"></a>00051 <span class="comment">*                           int   * xdim,</span>
-<a name="l00052"></a>00052 <span class="comment">*                           float * ydat,</span>
-<a name="l00053"></a>00053 <span class="comment">*                           float * wdat,</span>
-<a name="l00054"></a>00054 <span class="comment">*                           int   * ndat,</span>
-<a name="l00055"></a>00055 <span class="comment">*                           float * fpar,</span>
-<a name="l00056"></a>00056 <span class="comment">*                           float * epar,</span>
-<a name="l00057"></a>00057 <span class="comment">*                           int   * npar )</span>
-<a name="l00058"></a>00058 <span class="comment">*   6) int sinfo_new_lsqfit ( float * xdat,</span>
-<a name="l00059"></a>00059 <span class="comment">*                   int   * xdim,</span>
-<a name="l00060"></a>00060 <span class="comment">*                   float * ydat,</span>
-<a name="l00061"></a>00061 <span class="comment">*                   float * wdat,</span>
-<a name="l00062"></a>00062 <span class="comment">*                   int   * ndat,</span>
-<a name="l00063"></a>00063 <span class="comment">*                   float * fpar,</span>
-<a name="l00064"></a>00064 <span class="comment">*                   float * epar,</span>
-<a name="l00065"></a>00065 <span class="comment">*                   int   * mpar,</span>
-<a name="l00066"></a>00066 <span class="comment">*                   int   * npar,</span>
-<a name="l00067"></a>00067 <span class="comment">*                   float * tol ,</span>
-<a name="l00068"></a>00068 <span class="comment">*                   int   * its ,</span>
-<a name="l00069"></a>00069 <span class="comment">*                   float * lab  )</span>
-<a name="l00070"></a>00070 <span class="comment">*   7) int sinfo_new_fit_slits_boltz( cpl_image   * lineImage, </span>
-<a name="l00071"></a>00071 <span class="comment">*                         FitParams ** par,</span>
-<a name="l00072"></a>00072 <span class="comment">*                         float     ** slit_pos,</span>
-<a name="l00073"></a>00073 <span class="comment">*                         int          box_length,</span>
-<a name="l00074"></a>00074 <span class="comment">*                         float        y_box,</span>
-<a name="l00075"></a>00075 <span class="comment">*                         float        diff_tol )</span>
-<a name="l00076"></a>00076 <span class="comment">*   8) int sinfo_new_fit_slits_boltz_single_line ( cpl_image   * lineImage, </span>
-<a name="l00077"></a>00077 <span class="comment">*                                    float     ** slit_pos,</span>
-<a name="l00078"></a>00078 <span class="comment">*                                    int          box_length,</span>
-<a name="l00079"></a>00079 <span class="comment">*                                    float        y_box,</span>
-<a name="l00080"></a>00080 <span class="comment">*                                int          low_pos,</span>
-<a name="l00081"></a>00081 <span class="comment">*                                    int          high_pos )</span>
-<a name="l00082"></a>00082 <span class="comment">*   9) int sinfo_new_fit_slits_boltz_with_estimate ( cpl_image   * lineImage, </span>
-<a name="l00083"></a>00083 <span class="comment">*                                      float     ** slit_pos,</span>
-<a name="l00084"></a>00084 <span class="comment">*                                      int          box_length,</span>
-<a name="l00085"></a>00085 <span class="comment">*                                      float        y_box,</span>
-<a name="l00086"></a>00086 <span class="comment">*                                      float        diff_tol,</span>
-<a name="l00087"></a>00087 <span class="comment">*                                      int          low_pos,</span>
-<a name="l00088"></a>00088 <span class="comment">*                           int          high_pos )</span>
-<a name="l00089"></a>00089 <span class="comment">*</span>
-<a name="l00090"></a>00090 <span class="comment">*   DESCRIPTION</span>
-<a name="l00091"></a>00091 <span class="comment">*   1) calculates the value of a Boltzmann function with parameters </span>
-<a name="l00092"></a>00092 <span class="comment">*      parlist at the position xdat </span>
-<a name="l00093"></a>00093 <span class="comment">*   2) calculates the partial derivatives for a Boltzmann function with</span>
-<a name="l00094"></a>00094 <span class="comment">*      parameters parlist at position xdat </span>
-<a name="l00095"></a>00095 <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span>
-<a name="l00096"></a>00096 <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span>
-<a name="l00097"></a>00097 <span class="comment">*      Numerische Mathematik, 1. Teil.</span>
-<a name="l00098"></a>00098 <span class="comment">*   4) builds the sinfo_matrix </span>
-<a name="l00099"></a>00099 <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span>
-<a name="l00100"></a>00100 <span class="comment">*      built by get_mat(), we only have to rescale it for the </span>
-<a name="l00101"></a>00101 <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span>
-<a name="l00102"></a>00102 <span class="comment">*      the diagonal gets the value 1 + labda.</span>
-<a name="l00103"></a>00103 <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span>
-<a name="l00104"></a>00104 <span class="comment">*      the correction sinfo_vector.</span>
-<a name="l00105"></a>00105 <span class="comment">*   6) this is a routine for making a least-squares fit of a</span>
-<a name="l00106"></a>00106 <span class="comment">*      function to a set of data points. The method used is</span>
-<a name="l00107"></a>00107 <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span>
-<a name="l00108"></a>00108 <span class="comment">*      This method is a mixture of the steepest descent method </span>
-<a name="l00109"></a>00109 <span class="comment">*      and the Taylor method.</span>
-<a name="l00110"></a>00110 <span class="comment">*   7) fits the beginning and end position of the slitlets</span>
-<a name="l00111"></a>00111 <span class="comment">*      by using non-linear least square fitting of Boltzmann function</span>
-<a name="l00112"></a>00112 <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span>
-<a name="l00113"></a>00113 <span class="comment">*      by the brightest emission lines. To achieve this, the fit</span>
-<a name="l00114"></a>00114 <span class="comment">*      parameters are used to find the brightest emission line</span>
-<a name="l00115"></a>00115 <span class="comment">*      and to get its position for each column.</span>
-<a name="l00116"></a>00116 <span class="comment">*      The least squares fit is done by using a box smaller than</span>
-<a name="l00117"></a>00117 <span class="comment">*      the size of two slitlets</span>
-<a name="l00118"></a>00118 <span class="comment">*   8) fits the beginning and end position of the slitlets</span>
-<a name="l00119"></a>00119 <span class="comment">*      by using non-linear least square fitting of a Boltzmann function</span>
-<a name="l00120"></a>00120 <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span>
-<a name="l00121"></a>00121 <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span>
-<a name="l00122"></a>00122 <span class="comment">*      user given positions.</span>
-<a name="l00123"></a>00123 <span class="comment">*      The least squares fit is done by using a box smaller than</span>
-<a name="l00124"></a>00124 <span class="comment">*      the size of two slitlets </span>
-<a name="l00125"></a>00125 <span class="comment">*   9) fits the beginning and end position of the slitlets</span>
-<a name="l00126"></a>00126 <span class="comment">*      by using non-linear least square fitting of a Boltzmann function</span>
-<a name="l00127"></a>00127 <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span>
-<a name="l00128"></a>00128 <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span>
-<a name="l00129"></a>00129 <span class="comment">*      user given positions.</span>
-<a name="l00130"></a>00130 <span class="comment">*      The least squares fit is done by using a box smaller than</span>
-<a name="l00131"></a>00131 <span class="comment">*      the size of two slitlets </span>
-<a name="l00132"></a>00132 <span class="comment">*</span>
-<a name="l00133"></a>00133 <span class="comment">*   FILES</span>
-<a name="l00134"></a>00134 <span class="comment">*</span>
-<a name="l00135"></a>00135 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00136"></a>00136 <span class="comment">*</span>
-<a name="l00137"></a>00137 <span class="comment">*   RETURN VALUES</span>
-<a name="l00138"></a>00138 <span class="comment">*</span>
-<a name="l00139"></a>00139 <span class="comment">*   CAUTIONS</span>
-<a name="l00140"></a>00140 <span class="comment">*</span>
-<a name="l00141"></a>00141 <span class="comment">*   EXAMPLES</span>
-<a name="l00142"></a>00142 <span class="comment">*</span>
-<a name="l00143"></a>00143 <span class="comment">*   SEE ALSO</span>
-<a name="l00144"></a>00144 <span class="comment">*</span>
-<a name="l00145"></a>00145 <span class="comment">*   BUGS</span>
-<a name="l00146"></a>00146 <span class="comment">*</span>
-<a name="l00147"></a>00147 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00148"></a>00148 <span class="comment">*/</span>
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00152"></a>00152 <span class="preprocessor">#endif</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="comment">/*</span>
-<a name="l00156"></a>00156 <span class="comment"> * System Headers</span>
-<a name="l00157"></a>00157 <span class="comment"> */</span>
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="comment">/*</span>
-<a name="l00160"></a>00160 <span class="comment"> * Local Headers</span>
-<a name="l00161"></a>00161 <span class="comment"> */</span>
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 <span class="preprocessor">#include "sinfo_absolute.h"</span>
-<a name="l00164"></a>00164 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00167"></a>00167 <span class="comment"> *                                 Defines</span>
-<a name="l00168"></a>00168 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="preprocessor">#define XDIMA         1         </span><span class="comment">/* dimension of the x values */</span>
-<a name="l00171"></a>00171 <span class="preprocessor">#define TOLA          0.001     </span><span class="comment">/* fitting tolerance */</span>
-<a name="l00172"></a>00172 <span class="preprocessor">#define LABA          0.1       </span><span class="comment">/* labda parameter */</span>
-<a name="l00173"></a>00173 <span class="preprocessor">#define ITSA          200       </span><span class="comment">/* maximum number of iterations */</span>
-<a name="l00174"></a>00174 <span class="preprocessor">#define LABFACA       10.0      </span><span class="comment">/* labda step factor */</span>
-<a name="l00175"></a>00175 <span class="preprocessor">#define LABMAXA       1.0e+10   </span><span class="comment">/* maximum value for labda */</span>
-<a name="l00176"></a>00176 <span class="preprocessor">#define LABMINA       1.0e-10   </span><span class="comment">/* minimum value for labda */</span>
-<a name="l00177"></a>00177 <span class="preprocessor">#define NPAR          4         </span><span class="comment">/* number of fit parameters */</span>
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00180"></a>00180 <span class="comment"> *                                    Local variables</span>
-<a name="l00181"></a>00181 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span>
-<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span>
-<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span>
-<a name="l00186"></a>00186 <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span>
-<a name="l00187"></a>00187 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span>
-<a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span>
-<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span>
-<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span>
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00193"></a>00193 <span class="comment"> *                    Functions private to this module</span>
-<a name="l00194"></a>00194 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat (<span class="keywordtype">void</span>) ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198 <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat ( <span class="keywordtype">float</span> * xdat,
-<a name="l00199"></a>00199                       <span class="keywordtype">int</span>   * xdim,
-<a name="l00200"></a>00200                       <span class="keywordtype">float</span> * ydat,
-<a name="l00201"></a>00201                       <span class="keywordtype">float</span> * wdat,
-<a name="l00202"></a>00202                       <span class="keywordtype">int</span>   * ndat,
-<a name="l00203"></a>00203                       <span class="keywordtype">float</span> * fpar,
-<a name="l00204"></a>00204                       <span class="keywordtype">float</span> * epar<span class="comment">/*,</span>
-<a name="l00205"></a>00205 <span class="comment">                      int   * npar*/</span> ) ;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec ( <span class="keywordtype">float</span> * xdat,
-<a name="l00208"></a>00208                      <span class="keywordtype">int</span>   * xdim,
-<a name="l00209"></a>00209                      <span class="keywordtype">float</span> * ydat,
-<a name="l00210"></a>00210                      <span class="keywordtype">float</span> * wdat,
-<a name="l00211"></a>00211                      <span class="keywordtype">int</span>   * ndat,
-<a name="l00212"></a>00212                      <span class="keywordtype">float</span> * fpar,
-<a name="l00213"></a>00213                      <span class="keywordtype">float</span> * epar,
-<a name="l00214"></a>00214                      <span class="keywordtype">int</span>   * npar ) ;
-<a name="l00222"></a>00222 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00223"></a>00223 <span class="comment"> *                            Function codes</span>
-<a name="l00224"></a>00224 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00225"></a>00225 
-<a name="l00245"></a><a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1">00245</a> <span class="keywordtype">float</span> <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position...">sinfo_new_boltz</a> ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist )
-<a name="l00246"></a>00246 {
-<a name="l00247"></a>00247     <span class="keywordtype">float</span> return_value ;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     <span class="comment">/* now build the boltzman function out of the parameters */</span>
-<a name="l00250"></a>00250     return_value = 
-<a name="l00251"></a>00251     (parlist[0] - parlist[1]) / (1 + exp(( xdat[0] - parlist[2] ) / 
-<a name="l00252"></a>00252      parlist[3])) + parlist[1] ;
-<a name="l00253"></a>00253     
-<a name="l00254"></a>00254     <span class="keywordflow">return</span> return_value ;
-<a name="l00255"></a>00255 }
-<a name="l00256"></a>00256        
-<a name="l00278"></a><a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30">00278</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist...">sinfo_new_boltz_deriv</a>( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, <span class="keywordtype">floa [...]
-<a name="l00279"></a>00279 {
-<a name="l00280"></a>00280     <span class="keywordtype">float</span> subst ;
-<a name="l00281"></a>00281  
-<a name="l00282"></a>00282     subst = (xdat[0] - parlist[2]) / parlist[3] ;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     dervs[0] = 1. / ( 1. + exp(subst) ) ;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     dervs[1] = -1. / ( 1. + exp(subst) ) + 1. ;
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     dervs[2] = ( (parlist[0] - parlist[1]) / parlist[3] * exp(subst) ) /
-<a name="l00289"></a>00289                ( (1. + exp(subst)) * (1. + exp(subst)) ) ;
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     dervs[3] = ( (parlist[0] - parlist[1]) * (xdat[0] - parlist[2]) /
-<a name="l00292"></a>00292                (parlist[3]*parlist[3]) * exp(subst) ) /
-<a name="l00293"></a>00293                ( (1. + exp(subst)) * (1. + exp(subst)) ) ;
-<a name="l00294"></a>00294 }
-<a name="l00295"></a>00295 
-<a name="l00306"></a>00306 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat (<span class="keywordtype">void</span>)
-<a name="l00307"></a>00307 {
-<a name="l00308"></a>00308     <span class="keywordtype">double</span> even ;
-<a name="l00309"></a>00309     <span class="keywordtype">double</span> hv[NPAR] ;
-<a name="l00310"></a>00310     <span class="keywordtype">double</span> mjk ;
-<a name="l00311"></a>00311     <span class="keywordtype">double</span> rowmax ;
-<a name="l00312"></a>00312     <span class="keywordtype">int</span> evin ;
-<a name="l00313"></a>00313     <span class="keywordtype">int</span> i, j, k, row ;
-<a name="l00314"></a>00314     <span class="keywordtype">int</span> per[NPAR] ;
-<a name="l00315"></a>00315    
-<a name="l00316"></a>00316     <span class="comment">/* set permutation array */</span>
-<a name="l00317"></a>00317     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00318"></a>00318     {
-<a name="l00319"></a>00319         per[i] = i ;
-<a name="l00320"></a>00320     }
-<a name="l00321"></a>00321     
-<a name="l00322"></a>00322     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span>
-<a name="l00323"></a>00323     {
-<a name="l00324"></a>00324         <span class="comment">/* determine largest element of a row */</span>                                
-<a name="l00325"></a>00325         rowmax = fabs ( matrix2[j][j] ) ;
-<a name="l00326"></a>00326         row = j ;                         
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00329"></a>00329         {
-<a name="l00330"></a>00330             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )
-<a name="l00331"></a>00331             {
-<a name="l00332"></a>00332                 rowmax = fabs( matrix2[i][j] ) ;
-<a name="l00333"></a>00333                 row = i ;
-<a name="l00334"></a>00334             }
-<a name="l00335"></a>00335         }
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337         <span class="comment">/* determinant is zero! */</span>
-<a name="l00338"></a>00338         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )
-<a name="l00339"></a>00339         {
-<a name="l00340"></a>00340             <span class="keywordflow">return</span> -6 ;
-<a name="l00341"></a>00341         }
-<a name="l00342"></a>00342         
-<a name="l00343"></a>00343         <span class="comment">/* if the largest element is not on the diagonal, then permutate rows */</span>
-<a name="l00344"></a>00344         <span class="keywordflow">if</span> ( row > j )
-<a name="l00345"></a>00345         {
-<a name="l00346"></a>00346             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00347"></a>00347             {
-<a name="l00348"></a>00348                 even = matrix2[j][k] ;
-<a name="l00349"></a>00349                 matrix2[j][k] = matrix2[row][k] ;
-<a name="l00350"></a>00350                 matrix2[row][k] = even ;
-<a name="l00351"></a>00351             }
-<a name="l00352"></a>00352             <span class="comment">/* keep track of permutation */</span>
-<a name="l00353"></a>00353             evin = per[j] ;
-<a name="l00354"></a>00354             per[j] = per[row] ;
-<a name="l00355"></a>00355             per[row] = evin ;
-<a name="l00356"></a>00356         }
-<a name="l00357"></a>00357         
-<a name="l00358"></a>00358         <span class="comment">/* modify column */</span>
-<a name="l00359"></a>00359         even = 1.0 / matrix2[j][j] ;
-<a name="l00360"></a>00360         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00361"></a>00361         {
-<a name="l00362"></a>00362             matrix2[i][j] *= even ;
-<a name="l00363"></a>00363         }
-<a name="l00364"></a>00364         matrix2[j][j] = even ;
-<a name="l00365"></a>00365         
-<a name="l00366"></a>00366         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )
-<a name="l00367"></a>00367         {
-<a name="l00368"></a>00368             mjk = matrix2[j][k] ;
-<a name="l00369"></a>00369             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00370"></a>00370             {
-<a name="l00371"></a>00371                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00372"></a>00372             }
-<a name="l00373"></a>00373             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00374"></a>00374             {
-<a name="l00375"></a>00375                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00376"></a>00376             }
-<a name="l00377"></a>00377             matrix2[j][k] = -even * mjk ;
-<a name="l00378"></a>00378         }
-<a name="l00379"></a>00379     
-<a name="l00380"></a>00380         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )
-<a name="l00381"></a>00381         {
-<a name="l00382"></a>00382             mjk = matrix2[j][k] ;
-<a name="l00383"></a>00383             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00384"></a>00384             {
-<a name="l00385"></a>00385                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00386"></a>00386             }
-<a name="l00387"></a>00387             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00388"></a>00388             {
-<a name="l00389"></a>00389                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00390"></a>00390             }
-<a name="l00391"></a>00391             matrix2[j][k] = -even * mjk ;
-<a name="l00392"></a>00392         }
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394     
-<a name="l00395"></a>00395     <span class="comment">/* finally, repermute the columns */</span>
-<a name="l00396"></a>00396     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00397"></a>00397     {
-<a name="l00398"></a>00398         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00399"></a>00399         {
-<a name="l00400"></a>00400             hv[per[k]] = matrix2[i][k] ;
-<a name="l00401"></a>00401         }
-<a name="l00402"></a>00402         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00403"></a>00403         {
-<a name="l00404"></a>00404             matrix2[i][k] = hv[k] ;
-<a name="l00405"></a>00405         }
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407         
-<a name="l00408"></a>00408     <span class="comment">/* all is well */</span>
-<a name="l00409"></a>00409     <span class="keywordflow">return</span> 0 ;
-<a name="l00410"></a>00410 }
-<a name="l00411"></a>00411     
-<a name="l00426"></a>00426 <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat ( <span class="keywordtype">float</span> * xdat,
-<a name="l00427"></a>00427                       <span class="keywordtype">int</span>   * xdim,
-<a name="l00428"></a>00428                       <span class="keywordtype">float</span> * ydat,
-<a name="l00429"></a>00429                       <span class="keywordtype">float</span> * wdat,
-<a name="l00430"></a>00430                       <span class="keywordtype">int</span>   * ndat,
-<a name="l00431"></a>00431                       <span class="keywordtype">float</span> * fpar,
-<a name="l00432"></a>00432                       <span class="keywordtype">float</span> * epar<span class="comment">/*,</span>
-<a name="l00433"></a>00433 <span class="comment">                      int   * npar*/</span> )
-<a name="l00434"></a>00434 {
-<a name="l00435"></a>00435     <span class="keywordtype">double</span> wd ;
-<a name="l00436"></a>00436     <span class="keywordtype">double</span> wn ;
-<a name="l00437"></a>00437     <span class="keywordtype">double</span> yd ;
-<a name="l00438"></a>00438     <span class="keywordtype">int</span> i, j, n ;
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00441"></a>00441     {
-<a name="l00442"></a>00442         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span>
-<a name="l00443"></a>00443         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ ) <span class="comment">/* zero sinfo_matrix only </span>
-<a name="l00444"></a>00444 <span class="comment">                                       on and below diagonal */</span>
-<a name="l00445"></a>00445         {
-<a name="l00446"></a>00446             matrix1[j][i] = 0.0 ;
-<a name="l00447"></a>00447         }
-<a name="l00448"></a>00448     }
-<a name="l00449"></a>00449     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00450"></a>00450     
-<a name="l00451"></a>00451     <span class="comment">/* loop through data points */</span>
-<a name="l00452"></a>00452     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00453"></a>00453     {
-<a name="l00454"></a>00454         wn = wdat[n] ;
-<a name="l00455"></a>00455         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span>
-<a name="l00456"></a>00456         {
-<a name="l00457"></a>00457             yd = ydat[n] - <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position...">sinfo_new_boltz</a>( &xdat[(*xdim) * n], fpar ) ;
-<a name="l00458"></a>00458             <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist...">sinfo_new_boltz_deriv</a>( &xdat[(*xdim) * n], fpar, epar ) ;
-<a name="l00459"></a>00459             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span>
-<a name="l00460"></a>00460             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00461"></a>00461             {
-<a name="l00462"></a>00462                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span>
-<a name="l00463"></a>00463                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span>
-<a name="l00464"></a>00464                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span>
-<a name="l00465"></a>00465                 {
-<a name="l00466"></a>00466                     matrix1[j][i] += epar[parptr[i]] * wd ;
-<a name="l00467"></a>00467                 }
-<a name="l00468"></a>00468             }
-<a name="l00469"></a>00469         }
-<a name="l00470"></a>00470     }                   
-<a name="l00471"></a>00471 }  
-<a name="l00472"></a>00472                 
-<a name="l00473"></a>00473             
-<a name="l00495"></a>00495 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec ( <span class="keywordtype">float</span> * xdat,
-<a name="l00496"></a>00496                      <span class="keywordtype">int</span>   * xdim,
-<a name="l00497"></a>00497                      <span class="keywordtype">float</span> * ydat,
-<a name="l00498"></a>00498                      <span class="keywordtype">float</span> * wdat,
-<a name="l00499"></a>00499                      <span class="keywordtype">int</span>   * ndat,
-<a name="l00500"></a>00500                      <span class="keywordtype">float</span> * fpar,
-<a name="l00501"></a>00501                      <span class="keywordtype">float</span> * epar,
-<a name="l00502"></a>00502                      <span class="keywordtype">int</span>   * npar )
-<a name="l00503"></a>00503 {
-<a name="l00504"></a>00504     <span class="keywordtype">double</span> dj ;
-<a name="l00505"></a>00505     <span class="keywordtype">double</span> dy ;
-<a name="l00506"></a>00506     <span class="keywordtype">double</span> mii ;
-<a name="l00507"></a>00507     <span class="keywordtype">double</span> mji ;
-<a name="l00508"></a>00508     <span class="keywordtype">double</span> mjj ;
-<a name="l00509"></a>00509     <span class="keywordtype">double</span> wn ;
-<a name="l00510"></a>00510     <span class="keywordtype">int</span> i, j, n, r ;
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span>
-<a name="l00513"></a>00513     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00514"></a>00514     {
-<a name="l00515"></a>00515         mjj = matrix1[j][j] ;
-<a name="l00516"></a>00516         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span>
-<a name="l00517"></a>00517         {
-<a name="l00518"></a>00518             <span class="keywordflow">return</span> -5 ;
-<a name="l00519"></a>00519         }
-<a name="l00520"></a>00520         mjj = sqrt( mjj ) ;
-<a name="l00521"></a>00521         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00522"></a>00522         {
-<a name="l00523"></a>00523             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;
-<a name="l00524"></a>00524             matrix2[i][j] = matrix2[j][i] = mji ;
-<a name="l00525"></a>00525         }
-<a name="l00526"></a>00526         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span>
-<a name="l00527"></a>00527     }    
-<a name="l00528"></a>00528     
-<a name="l00529"></a>00529     <span class="keywordflow">if</span> ( (r = sinfo_new_inv_mat()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span>
-<a name="l00530"></a>00530     {
-<a name="l00531"></a>00531         <span class="keywordflow">return</span> r ;
-<a name="l00532"></a>00532     }
-<a name="l00533"></a>00533     
-<a name="l00534"></a>00534     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )
-<a name="l00535"></a>00535     {
-<a name="l00536"></a>00536         epar[i] = fpar[i] ;
-<a name="l00537"></a>00537     }
-<a name="l00538"></a>00538     
-<a name="l00539"></a>00539     <span class="comment">/* loop to calculate correction sinfo_vector */</span>
-<a name="l00540"></a>00540     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00541"></a>00541     {
-<a name="l00542"></a>00542         dj = 0.0 ;
-<a name="l00543"></a>00543         mjj = matrix1[j][j] ;
-<a name="l00544"></a>00544         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span>
-<a name="l00545"></a>00545         {
-<a name="l00546"></a>00546             <span class="keywordflow">return</span> -7 ;
-<a name="l00547"></a>00547         }
-<a name="l00548"></a>00548         mjj = sqrt ( mjj ) ;
-<a name="l00549"></a>00549         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00550"></a>00550         {
-<a name="l00551"></a>00551             mii = matrix1[i][i] ;
-<a name="l00552"></a>00552             <span class="keywordflow">if</span> ( mii <= 0.0 )
-<a name="l00553"></a>00553             {
-<a name="l00554"></a>00554                 <span class="keywordflow">return</span> -7 ;
-<a name="l00555"></a>00555             }
-<a name="l00556"></a>00556             mii = sqrt( mii ) ;
-<a name="l00557"></a>00557             dj += vec[i] * matrix2[j][i] / mjj / mii ;
-<a name="l00558"></a>00558         }
-<a name="l00559"></a>00559         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span>
-<a name="l00560"></a>00560     }    
-<a name="l00561"></a>00561     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00562"></a>00562  
-<a name="l00563"></a>00563     <span class="comment">/* loop through the data points */</span>
-<a name="l00564"></a>00564     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00565"></a>00565     {
-<a name="l00566"></a>00566         wn = wdat[n] ;               <span class="comment">/* get weight */</span>
-<a name="l00567"></a>00567         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00568"></a>00568         {
-<a name="l00569"></a>00569             dy = ydat[n] - <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position...">sinfo_new_boltz</a>( &xdat[(*xdim) * n], epar) ;
-<a name="l00570"></a>00570             chi1 += wdat[n] * dy * dy ;
-<a name="l00571"></a>00571         }
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573     <span class="keywordflow">return</span> 0 ;
-<a name="l00574"></a>00574 }   
-<a name="l00575"></a>00575     
-<a name="l00576"></a>00576         
-<a name="l00577"></a>00577 
-<a name="l00627"></a><a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5">00627</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a> ( <span class="keywordtype">float</span> * xdat,
-<a name="l00628"></a>00628              <span class="keywordtype">int</span>   * xdim,
-<a name="l00629"></a>00629              <span class="keywordtype">float</span> * ydat,
-<a name="l00630"></a>00630              <span class="keywordtype">float</span> * wdat,
-<a name="l00631"></a>00631              <span class="keywordtype">int</span>   * ndat,
-<a name="l00632"></a>00632              <span class="keywordtype">float</span> * fpar,
-<a name="l00633"></a>00633              <span class="keywordtype">float</span> * epar,
-<a name="l00634"></a>00634              <span class="keywordtype">int</span>   * mpar,
-<a name="l00635"></a>00635              <span class="keywordtype">int</span>   * npar,
-<a name="l00636"></a>00636              <span class="keywordtype">float</span> * tol ,
-<a name="l00637"></a>00637              <span class="keywordtype">int</span>   * its ,
-<a name="l00638"></a>00638              <span class="keywordtype">float</span> * lab  )
-<a name="l00639"></a>00639 {
-<a name="l00640"></a>00640     <span class="keywordtype">int</span> i, n, r ;
-<a name="l00641"></a>00641     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span>
-<a name="l00642"></a>00642     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span>
-<a name="l00643"></a>00643     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span>
-<a name="l00644"></a>00644     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span>
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646     itc   = 0 ;                    <span class="comment">/* fate of fit */</span>
-<a name="l00647"></a>00647     found = 0 ;                    <span class="comment">/* reset */</span>
-<a name="l00648"></a>00648     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span>
-<a name="l00649"></a>00649     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span>
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )
-<a name="l00652"></a>00652     {
-<a name="l00653"></a>00653         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span>
-<a name="l00654"></a>00654     }
-<a name="l00655"></a>00655     <span class="keywordflow">else</span>
-<a name="l00656"></a>00656     {
-<a name="l00657"></a>00657         tolerance = *tol ;                <span class="comment">/* tolerance */</span>
-<a name="l00658"></a>00658     }
-<a name="l00659"></a>00659     
-<a name="l00660"></a>00660     labda = fabs( *lab ) * LABFACA ;   <span class="comment">/* start value for mixing parameter */</span>
-<a name="l00661"></a>00661     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00662"></a>00662     {
-<a name="l00663"></a>00663         <span class="keywordflow">if</span> ( mpar[i] )
-<a name="l00664"></a>00664         {
-<a name="l00665"></a>00665             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span>
-<a name="l00666"></a>00666             {
-<a name="l00667"></a>00667                 <span class="keywordflow">return</span> -1 ;
-<a name="l00668"></a>00668             }
-<a name="l00669"></a>00669             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span>
-<a name="l00670"></a>00670         }
-<a name="l00671"></a>00671     }
-<a name="l00672"></a>00672     
-<a name="l00673"></a>00673     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     
-<a name="l00674"></a>00674     {
-<a name="l00675"></a>00675         <span class="keywordflow">return</span> -2 ;
-<a name="l00676"></a>00676     }
-<a name="l00677"></a>00677     
-<a name="l00678"></a>00678     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00679"></a>00679     {
-<a name="l00680"></a>00680         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00681"></a>00681         {
-<a name="l00682"></a>00682             nuse ++ ;
-<a name="l00683"></a>00683         }
-<a name="l00684"></a>00684     }
-<a name="l00685"></a>00685     
-<a name="l00686"></a>00686     <span class="keywordflow">if</span> ( nfree >= nuse )
-<a name="l00687"></a>00687     {
-<a name="l00688"></a>00688         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span>
-<a name="l00689"></a>00689     }
-<a name="l00690"></a>00690     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span>
-<a name="l00691"></a>00691     {
-<a name="l00692"></a>00692         <span class="comment">/* initialize fpar array */</span>
-<a name="l00693"></a>00693         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  
-<a name="l00694"></a>00694         sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l00695"></a>00695         r =  sinfo_new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;
-<a name="l00696"></a>00696         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span>
-<a name="l00697"></a>00697         {
-<a name="l00698"></a>00698             <span class="keywordflow">return</span> r ;
-<a name="l00699"></a>00699         }
-<a name="l00700"></a>00700         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00701"></a>00701         {
-<a name="l00702"></a>00702             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span>
-<a name="l00703"></a>00703             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span>
-<a name="l00704"></a>00704         }
-<a name="l00705"></a>00705         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00706"></a>00706         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00707"></a>00707         {
-<a name="l00708"></a>00708             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )
-<a name="l00709"></a>00709             {
-<a name="l00710"></a>00710                 <span class="keywordflow">return</span> -7 ;
-<a name="l00711"></a>00711             }
-<a name="l00712"></a>00712             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / 
-<a name="l00713"></a>00713                                      sqrt( matrix1[i][i] ) ;
-<a name="l00714"></a>00714         }
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span>
-<a name="l00717"></a>00717     {
-<a name="l00718"></a>00718         <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l00719"></a>00719 <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span>
-<a name="l00720"></a>00720 <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span>
-<a name="l00721"></a>00721 <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span>
-<a name="l00722"></a>00722 <span class="comment">         * the sinfo_matrix and calculate the correction sinfo_vector. </span>
-<a name="l00723"></a>00723 <span class="comment">         * In the inner loop</span>
-<a name="l00724"></a>00724 <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span>
-<a name="l00725"></a>00725 <span class="comment">         * better solution than the previous one. If so, we leave the inner </span>
-<a name="l00726"></a>00726 <span class="comment">         * loop</span>
-<a name="l00727"></a>00727 <span class="comment">         * else we increase labda ( give more weight to the steepest descent </span>
-<a name="l00728"></a>00728 <span class="comment">         * method) calculate the correction sinfo_vector and check again. </span>
-<a name="l00729"></a>00729 <span class="comment">         * After the inner loop</span>
-<a name="l00730"></a>00730 <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span>
-<a name="l00731"></a>00731 <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span>
-<a name="l00732"></a>00732 <span class="comment">         */</span>
-<a name="l00733"></a>00733         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span>
-<a name="l00734"></a>00734         {      
-<a name="l00735"></a>00735             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span>
-<a name="l00736"></a>00736             {
-<a name="l00737"></a>00737                 <span class="keywordflow">return</span> -4 ;               
-<a name="l00738"></a>00738             }
-<a name="l00739"></a>00739             sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;
-<a name="l00740"></a>00740             
-<a name="l00741"></a>00741             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l00742"></a>00742 <span class="comment">             * here we decrease labda since we may assume that each iteration</span>
-<a name="l00743"></a>00743 <span class="comment">             * brings us closer to the answer.</span>
-<a name="l00744"></a>00744 <span class="comment">             */</span>
-<a name="l00745"></a>00745             <span class="keywordflow">if</span> ( labda > LABMINA )
-<a name="l00746"></a>00746             {
-<a name="l00747"></a>00747                 labda = labda / LABFACA ;         <span class="comment">/* decrease labda */</span>
-<a name="l00748"></a>00748             }
-<a name="l00749"></a>00749             r = sinfo_new_get_vec ( xdat, xdim, ydat, wdat, 
-<a name="l00750"></a>00750                                     ndat, fpar, epar, npar ) ;
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span>
-<a name="l00753"></a>00753             {
-<a name="l00754"></a>00754                 <span class="keywordflow">return</span> r ;
-<a name="l00755"></a>00755             }
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span>
-<a name="l00758"></a>00758             {
-<a name="l00759"></a>00759                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l00760"></a>00760 <span class="comment">                 * The next statement is based on experience, not on the </span>
-<a name="l00761"></a>00761 <span class="comment">                 * mathematics of the problem. It is assumed that we have </span>
-<a name="l00762"></a>00762 <span class="comment">                 * reached convergence when the pure steepest descent method </span>
-<a name="l00763"></a>00763 <span class="comment">                 * does not produce a better solution.</span>
-<a name="l00764"></a>00764 <span class="comment">                 */</span>
-<a name="l00765"></a>00765                 <span class="keywordflow">if</span> ( labda > LABMAXA )    <span class="comment">/* assume solution found */</span>
-<a name="l00766"></a>00766                 {
-<a name="l00767"></a>00767                     break ;
-<a name="l00768"></a>00768                 }
-<a name="l00769"></a>00769                 labda = labda * LABFACA ;  <span class="comment">/* increase mixing parameter */</span>
-<a name="l00770"></a>00770                 r = sinfo_new_get_vec ( xdat, xdim, ydat, wdat, 
-<a name="l00771"></a>00771                                         ndat, fpar, epar, npar ) ;
-<a name="l00772"></a>00772 
-<a name="l00773"></a>00773                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span>
-<a name="l00774"></a>00774                 {
-<a name="l00775"></a>00775                     <span class="keywordflow">return</span> r ;
-<a name="l00776"></a>00776                 }
-<a name="l00777"></a>00777             }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779             <span class="keywordflow">if</span> ( labda <= LABMAXA )        <span class="comment">/* save old parameters */</span>
-<a name="l00780"></a>00780             {
-<a name="l00781"></a>00781                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )
-<a name="l00782"></a>00782                 {
-<a name="l00783"></a>00783                     fpar[i] = epar[i] ;
-<a name="l00784"></a>00784                 }
-<a name="l00785"></a>00785             }
-<a name="l00786"></a>00786             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || 
-<a name="l00787"></a>00787                  (labda > LABMAXA) )
-<a name="l00788"></a>00788             {
-<a name="l00789"></a>00789                 <span class="comment">/*---------------------------------------------------------</span>
-<a name="l00790"></a>00790 <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span>
-<a name="l00791"></a>00791 <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span>
-<a name="l00792"></a>00792 <span class="comment">                 * using the pure Taylor method because we are very close to </span>
-<a name="l00793"></a>00793 <span class="comment">                 * the real solution.</span>
-<a name="l00794"></a>00794 <span class="comment">                 */</span>
-<a name="l00795"></a>00795                 labda = LABMINA ;              <span class="comment">/* for Taylor solution */</span>
-<a name="l00796"></a>00796                 sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*,npar*/</span>);
-<a name="l00797"></a>00797                 r = sinfo_new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar);
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span>
-<a name="l00800"></a>00800                 {
-<a name="l00801"></a>00801                     <span class="keywordflow">return</span> r ;
-<a name="l00802"></a>00802                 }
-<a name="l00803"></a>00803                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00804"></a>00804                 {
-<a name="l00805"></a>00805                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span>
-<a name="l00806"></a>00806                 }
-<a name="l00807"></a>00807                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00810"></a>00810                 {
-<a name="l00811"></a>00811                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )
-<a name="l00812"></a>00812                     {
-<a name="l00813"></a>00813                         <span class="keywordflow">return</span> -7 ;
-<a name="l00814"></a>00814                     }
-<a name="l00815"></a>00815                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / 
-<a name="l00816"></a>00816                                              sqrt( matrix1[i][i] ) ;
-<a name="l00817"></a>00817                 }
-<a name="l00818"></a>00818                 found = 1 ;                  <span class="comment">/* we found a solution */</span>
-<a name="l00819"></a>00819             }
-<a name="l00820"></a>00820         }
-<a name="l00821"></a>00821     }
-<a name="l00822"></a>00822     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span>
-<a name="l00823"></a>00823 }
-<a name="l00824"></a>00824 
-<a name="l00865"></a><a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d">00865</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz</a> ( cpl_image   * lineImage, 
-<a name="l00866"></a>00866                     FitParams ** par,
-<a name="l00867"></a>00867                     <span class="keywordtype">float</span>     ** slit_pos,
-<a name="l00868"></a>00868                     <span class="keywordtype">int</span>          box_length,
-<a name="l00869"></a>00869                     <span class="keywordtype">float</span>        y_box,
-<a name="l00870"></a>00870                     <span class="keywordtype">float</span>        diff_tol )
-<a name="l00871"></a>00871 {
-<a name="l00872"></a>00872     <span class="keywordtype">float</span>* position=NULL ;
-<a name="l00873"></a>00873     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l00874"></a>00874     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l00875"></a>00875     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l00876"></a>00876     Vector * box_buffer ;
-<a name="l00877"></a>00877     Vector * half_buffer ;
-<a name="l00878"></a>00878     Vector * in_buffer ;
-<a name="l00879"></a>00879     <span class="keywordtype">float</span> max_intensity ;
-<a name="l00880"></a>00880     <span class="keywordtype">float</span> row_pos ;
-<a name="l00881"></a>00881     <span class="keywordtype">int</span>   row, col ;
-<a name="l00882"></a>00882     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;
-<a name="l00883"></a>00883     <span class="keywordtype">int</span>   found, init1 ;
-<a name="l00884"></a>00884     <span class="keywordtype">int</span>   line ; 
-<a name="l00885"></a>00885     <span class="keywordtype">int</span>   nel, n_right, left_right ;
-<a name="l00886"></a>00886     <span class="keywordtype">int</span>   n_buf, edge_ind, shift ;
-<a name="l00887"></a>00887     <span class="keywordtype">int</span>   column ;
-<a name="l00888"></a>00888     <span class="keywordtype">int</span>   slit_length ;
-<a name="l00889"></a>00889     <span class="keywordtype">int</span>   agreed ;
-<a name="l00890"></a>00890     <span class="keywordtype">int</span>   bad_line ;
-<a name="l00891"></a>00891     <span class="keywordtype">int</span>   margin ;
-<a name="l00892"></a>00892     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l00893"></a>00893     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l00894"></a>00894     <span class="keywordtype">int</span>   * mpar ;
-<a name="l00895"></a>00895     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l00896"></a>00896     <span class="keywordtype">float</span> tol, lab ;
-<a name="l00897"></a>00897     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l00898"></a>00898     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l00899"></a>00899     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l00900"></a>00900     <span class="keywordtype">float</span> min ;
-<a name="l00901"></a>00901     <span class="keywordtype">float</span> pos, last_pos ;
-<a name="l00902"></a>00902     <span class="keywordtype">int</span> old_col=0;
-<a name="l00903"></a>00903     <span class="keywordtype">int</span> old_pos=0;
-<a name="l00904"></a>00904     <span class="keywordtype">int</span> ilx=0;
-<a name="l00905"></a>00905     <span class="keywordtype">int</span> ily=0;
-<a name="l00906"></a>00906     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909     slit_length = SLITLENGTH ;
-<a name="l00910"></a>00910     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l00911"></a>00911     {
-<a name="l00912"></a>00912         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;
-<a name="l00913"></a>00913         <span class="keywordflow">return</span> -1 ;
-<a name="l00914"></a>00914     }
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l00917"></a>00917     {
-<a name="l00918"></a>00918         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line fit parameters given!"</span> ) ;
-<a name="l00919"></a>00919         <span class="keywordflow">return</span> -2 ;
-<a name="l00920"></a>00920     }
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922     <span class="keywordflow">if</span> ( NULL == slit_pos )
-<a name="l00923"></a>00923     {
-<a name="l00924"></a>00924         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;
-<a name="l00925"></a>00925         <span class="keywordflow">return</span> -3 ;
-<a name="l00926"></a>00926     }
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     <span class="keywordflow">if</span> ( box_length <  4 ||
-<a name="l00929"></a>00929          box_length > 2*slit_length )
-<a name="l00930"></a>00930     {
-<a name="l00931"></a>00931         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;
-<a name="l00932"></a>00932         <span class="keywordflow">return</span> -4 ;
-<a name="l00933"></a>00933     }
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 6. )
-<a name="l00936"></a>00936     {
-<a name="l00937"></a>00937         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;
-<a name="l00938"></a>00938         <span class="keywordflow">return</span> -5 ;
-<a name="l00939"></a>00939     }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941     <span class="keywordflow">if</span> ( diff_tol < 1. )
-<a name="l00942"></a>00942     {
-<a name="l00943"></a>00943         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" diff_tol too small!"</span> ) ;
-<a name="l00944"></a>00944         <span class="keywordflow">return</span> -6 ;
-<a name="l00945"></a>00945     }
-<a name="l00946"></a>00946  
-<a name="l00947"></a>00947     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span>
-<a name="l00948"></a>00948     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00949"></a>00949     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00950"></a>00950     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00951"></a>00951     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00952"></a>00952     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955     <span class="comment">/* -----------------------------------------------------------------------</span>
-<a name="l00956"></a>00956 <span class="comment">     * go through the first image columns and the fit parameters and find the </span>
-<a name="l00957"></a>00957 <span class="comment">       line with the highest intensity </span>
-<a name="l00958"></a>00958 <span class="comment">     */</span>
-<a name="l00959"></a>00959     agreed = -1 ;
-<a name="l00960"></a>00960     bad_line = -1 ;
-<a name="l00961"></a>00961     <span class="keywordflow">while</span>( agreed == -1 )
-<a name="l00962"></a>00962     {
-<a name="l00963"></a>00963         found = -1 ;
-<a name="l00964"></a>00964         max_intensity = -FLT_MAX ;
-<a name="l00965"></a>00965         <span class="keywordflow">for</span> ( col = 0 ; col < slit_length ; col++ )
-<a name="l00966"></a>00966         {
-<a name="l00967"></a>00967             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l00968"></a>00968             {
-<a name="l00969"></a>00969                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )
-<a name="l00970"></a>00970                 {
-<a name="l00971"></a>00971                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )
-<a name="l00972"></a>00972                     {
-<a name="l00973"></a>00973                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] >= 1. && 
-<a name="l00974"></a>00974                              par[i]->fit_par[2] > 0. )
-<a name="l00975"></a>00975                         {
-<a name="l00976"></a>00976                             max_intensity = par[i]->fit_par[0] ;
-<a name="l00977"></a>00977                             found = i ;
-<a name="l00978"></a>00978                         }
-<a name="l00979"></a>00979                     }
-<a name="l00980"></a>00980                 }
-<a name="l00981"></a>00981             }  
-<a name="l00982"></a>00982         }
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l00985"></a>00985 <span class="comment">         * check if the found line is usable and if the neighbouring line </span>
-<a name="l00986"></a>00986 <span class="comment">         * have intensity on near rows in neighbouring slitlets </span>
-<a name="l00987"></a>00987 <span class="comment">         */</span>
-<a name="l00988"></a>00988         line    = par[found]->line ;
-<a name="l00989"></a>00989         column  = par[found]->column ;
-<a name="l00990"></a>00990         row_pos = par[found]->fit_par[2] ;
-<a name="l00991"></a>00991         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )
-<a name="l00992"></a>00992         {
-<a name="l00993"></a>00993             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l00994"></a>00994             {
-<a name="l00995"></a>00995                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && 
-<a name="l00996"></a>00996                      par[i]->column == column + slit_length )
-<a name="l00997"></a>00997                 {
-<a name="l00998"></a>00998                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&
-<a name="l00999"></a>00999                          par[i]->fit_par[2] >= (row_pos - y_box) )
-<a name="l01000"></a>01000                     {
-<a name="l01001"></a>01001                         bad_line = line ;
-<a name="l01002"></a>01002                     } 
-<a name="l01003"></a>01003                 }
-<a name="l01004"></a>01004             }
-<a name="l01005"></a>01005             <span class="keywordflow">if</span> ( bad_line != line )
-<a name="l01006"></a>01006             {
-<a name="l01007"></a>01007                 agreed = 1 ;
-<a name="l01008"></a>01008                 break ;
-<a name="l01009"></a>01009             }
-<a name="l01010"></a>01010         }
-<a name="l01011"></a>01011         <span class="keywordflow">else</span> 
-<a name="l01012"></a>01012         {
-<a name="l01013"></a>01013           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;
-<a name="l01014"></a>01014             cpl_free( sinfo_edge ) ;
-<a name="l01015"></a>01015             cpl_free( pos_row ) ;
-<a name="l01016"></a>01016             cpl_free( edgeclean ) ;
-<a name="l01017"></a>01017             cpl_free( dummyedge ) ;
-<a name="l01018"></a>01018             cpl_free( pos_rowclean ) ;
-<a name="l01019"></a>01019             <span class="keywordflow">return</span> -7 ;
-<a name="l01020"></a>01020         }    
-<a name="l01021"></a>01021     }
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024 
-<a name="l01025"></a>01025     <span class="keywordflow">if</span> ( agreed == -1 )
-<a name="l01026"></a>01026     {
-<a name="l01027"></a>01027         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no emission line found in the first image columns"</span>) ;
-<a name="l01028"></a>01028         cpl_free( sinfo_edge ) ;
-<a name="l01029"></a>01029         cpl_free( pos_row ) ;
-<a name="l01030"></a>01030         cpl_free( edgeclean ) ;
-<a name="l01031"></a>01031         cpl_free( dummyedge ) ;
-<a name="l01032"></a>01032         cpl_free( pos_rowclean ) ;
-<a name="l01033"></a>01033         <span class="keywordflow">return</span> -7 ;
-<a name="l01034"></a>01034     }    
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036     ilx=cpl_image_get_size_x(lineImage);
-<a name="l01037"></a>01037     ily=cpl_image_get_size_y(lineImage);
-<a name="l01038"></a>01038     pidata=cpl_image_get_data_float(lineImage);
-<a name="l01039"></a>01039 
-<a name="l01040"></a>01040     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l01041"></a>01041     n  = 0 ;
-<a name="l01042"></a>01042     ed = 0 ;
-<a name="l01043"></a>01043     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01044"></a>01044 
-<a name="l01045"></a>01045     <span class="comment">/* was for ( col = 0 ; col < ilx - slit_length/2 ; col++ ) */</span>
-<a name="l01046"></a>01046     <span class="keywordflow">for</span> ( col = slit_length/2 ; col < ilx - slit_length/2 ; col++ )
-<a name="l01047"></a>01047     {
-<a name="l01048"></a>01048         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l01049"></a>01049       {   
-<a name="l01050"></a>01050         <span class="comment">/*</span>
-<a name="l01051"></a>01051 <span class="comment">              printf("p1=%f p2=%f p3=%f\n",</span>
-<a name="l01052"></a>01052 <span class="comment">              par[i]->fit_par[0],par[i]->fit_par[1],par[i]->fit_par[2]);</span>
-<a name="l01053"></a>01053 <span class="comment">        */</span>
-<a name="l01054"></a>01054             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )
-<a name="l01055"></a>01055             {
-<a name="l01056"></a>01056                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0.  && 
-<a name="l01057"></a>01057                      par[i]->fit_par[1] >= 1. && 
-<a name="l01058"></a>01058                      par[i]->fit_par[2] > 0. )
-<a name="l01059"></a>01059                 {
-<a name="l01060"></a>01060                     position[n] = par[i]->fit_par[2] ;
-<a name="l01061"></a>01061                     old_pos=position[n];
-<a name="l01062"></a>01062                     <span class="keywordflow">if</span> ( n > 0 && 
-<a name="l01063"></a>01063                          fabs(position[n] - position[n-1]) > y_box && 
-<a name="l01064"></a>01064                          (col-old_col) > (slit_length-SLIT_POS_ERR) )
-<a name="l01065"></a>01065                     {
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067               old_col=col;
-<a name="l01068"></a>01068               sinfo_edge[ed] = col ; 
-<a name="l01069"></a>01069               pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l01070"></a>01070                       <span class="comment">/* printf("sinfo_edge[%d]=%d , pos_row=%d\n",</span>
-<a name="l01071"></a>01071 <span class="comment">                                 ed,sinfo_edge[ed],pos_row[ed]); */</span> 
-<a name="l01072"></a>01072               ed++ ;
-<a name="l01073"></a>01073               <span class="keywordflow">if</span> ( col >= ilx - slit_length - SLIT_POS_ERR ) {
-<a name="l01074"></a>01074               pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l01075"></a>01075               } 
-<a name="l01076"></a>01076             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((col-old_col) > 
-<a name="l01077"></a>01077                                   (slit_length+SLIT_POS_ERR)) &&
-<a name="l01078"></a>01078                                   (col>120) ) {
-<a name="l01079"></a>01079               old_col=col;
-<a name="l01080"></a>01080               sinfo_edge[ed] = col ; 
-<a name="l01081"></a>01081               pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l01082"></a>01082                       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"add1 slitlet edge[%d]=%d, pos_row=%d"</span>,
-<a name="l01083"></a>01083                      ed,sinfo_edge[ed],pos_row[ed]);
-<a name="l01084"></a>01084               ed++ ;
-<a name="l01085"></a>01085               <span class="keywordflow">if</span> ( col >= ilx - slit_length - SLIT_POS_ERR ) {
-<a name="l01086"></a>01086               pos_row[ed] =  sinfo_new_nint( position[n] ) ;
-<a name="l01087"></a>01087               } 
-<a name="l01088"></a>01088             }
-<a name="l01089"></a>01089                     n++ ;
-<a name="l01090"></a>01090                 }
-<a name="l01091"></a>01091             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((col-old_col) > (slit_length+SLIT_POS_ERR)) && 
-<a name="l01092"></a>01092                         (col>120) ) {
-<a name="l01093"></a>01093           <span class="comment">/*</span>
-<a name="l01094"></a>01094 <span class="comment">              printf("check col=%d col-old_col=%d check=%d\n",</span>
-<a name="l01095"></a>01095 <span class="comment">                     col,(col-old_col),(slit_length+SLIT_POS_ERR));</span>
-<a name="l01096"></a>01096 <span class="comment">          */</span>
-<a name="l01097"></a>01097           position[n] = old_pos ;
-<a name="l01098"></a>01098              
-<a name="l01099"></a>01099           old_col+=slit_length;
-<a name="l01100"></a>01100           sinfo_edge[ed] = old_col; ; 
-<a name="l01101"></a>01101           pos_row[ed] = sinfo_new_nint( position[n-1] ) ;
-<a name="l01102"></a>01102 
-<a name="l01103"></a>01103 
-<a name="l01104"></a>01104           <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"added2 slitlet sinfo_edge[%d]=%d, pos_row=%d"</span>,
-<a name="l01105"></a>01105                   ed,sinfo_edge[ed],pos_row[ed]);
-<a name="l01106"></a>01106           ed++ ;
-<a name="l01107"></a>01107           <span class="keywordflow">if</span> ( old_col >= ilx - slit_length - SLIT_POS_ERR ) {
-<a name="l01108"></a>01108         pos_row[ed] =  old_pos ;
-<a name="l01109"></a>01109           }
-<a name="l01110"></a>01110           n++;
-<a name="l01111"></a>01111         }
-<a name="l01112"></a>01112         }
-<a name="l01113"></a>01113     }
-<a name="l01114"></a>01114 
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116     <span class="keywordflow">if</span> ( ed < (N_SLITLETS - 1) )
-<a name="l01117"></a>01117     {
-<a name="l01118"></a>01118         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough slitlets, found: %d"</span>, ed) ;
-<a name="l01119"></a>01119         cpl_free( sinfo_edge ) ;
-<a name="l01120"></a>01120         cpl_free( pos_row ) ;
-<a name="l01121"></a>01121         cpl_free( edgeclean ) ;
-<a name="l01122"></a>01122         cpl_free( dummyedge ) ;
-<a name="l01123"></a>01123         cpl_free( pos_rowclean ) ;
-<a name="l01124"></a>01124         <span class="keywordflow">return</span> -8 ;
-<a name="l01125"></a>01125     } 
-<a name="l01126"></a>01126 
-<a name="l01127"></a>01127     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l01128"></a>01128     <span class="comment">/* printf("ed=%d\n",ed); */</span>
-<a name="l01129"></a>01129     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l01130"></a>01130     {
-<a name="l01131"></a>01131         <span class="keywordflow">if</span> ( i == ed )
-<a name="l01132"></a>01132         {
-<a name="l01133"></a>01133             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < 
-<a name="l01134"></a>01134                   slit_length - SLIT_LEN_ERR ||
-<a name="l01135"></a>01135                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > 
-<a name="l01136"></a>01136                   slit_length + SLIT_LEN_ERR )
-<a name="l01137"></a>01137             {
-<a name="l01138"></a>01138         <span class="comment">/* printf("e(i-1)=%d e(i-2)=%d i=%d\n",</span>
-<a name="l01139"></a>01139 <span class="comment">                       edge[i-1], edge[i-2],i); */</span>
-<a name="l01140"></a>01140                 dummyedge[i-1]   = -1 ;
-<a name="l01141"></a>01141             }
-<a name="l01142"></a>01142         }
-<a name="l01143"></a>01143         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l01144"></a>01144         {
-<a name="l01145"></a>01145             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l01146"></a>01146         }
-<a name="l01147"></a>01147         <span class="keywordflow">else</span>
-<a name="l01148"></a>01148         {
-<a name="l01149"></a>01149             continue ;
-<a name="l01150"></a>01150         }
-<a name="l01151"></a>01151         <span class="keywordflow">if</span> ( i < ed )
-<a name="l01152"></a>01152         {
-<a name="l01153"></a>01153             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < 
-<a name="l01154"></a>01154                   slit_length - SLIT_LEN_ERR ||
-<a name="l01155"></a>01155                  (sinfo_edge[i] - sinfo_edge[i-1]) > 
-<a name="l01156"></a>01156                   slit_length + SLIT_LEN_ERR )
-<a name="l01157"></a>01157             {
-<a name="l01158"></a>01158         <span class="comment">/* printf("e(i)=%d e(i-1)=%d i=%d\n",edge[i], edge[i-1],i); */</span>
-<a name="l01159"></a>01159                 dummyedge[i]   = -1 ;
-<a name="l01160"></a>01160             }
-<a name="l01161"></a>01161         }
-<a name="l01162"></a>01162         <span class="keywordflow">if</span> ( i+1 < ed && dummyedge[i] != -1 )
-<a name="l01163"></a>01163         {
-<a name="l01164"></a>01164             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < 
-<a name="l01165"></a>01165                   slit_length - SLIT_LEN_ERR ||
-<a name="l01166"></a>01166                  (sinfo_edge[i+1] - sinfo_edge[i]) > 
-<a name="l01167"></a>01167                   slit_length + SLIT_LEN_ERR )
-<a name="l01168"></a>01168             {
-<a name="l01169"></a>01169         <span class="comment">/* printf("e(i+1)=%d e(i)=%d i=%d\n",edge[i+1], edge[i],i); */</span>
-<a name="l01170"></a>01170                 dummyedge[i+1] = -1 ; 
-<a name="l01171"></a>01171             }
-<a name="l01172"></a>01172         }
-<a name="l01173"></a>01173     }
-<a name="l01174"></a>01174 
-<a name="l01175"></a>01175     k = 0 ;
-<a name="l01176"></a>01176     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l01177"></a>01177     {
-<a name="l01178"></a>01178         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l01179"></a>01179         {
-<a name="l01180"></a>01180             edgeclean[k] = dummyedge[i] ;
-<a name="l01181"></a>01181             pos_rowclean[k] = pos_row[i] ;
-<a name="l01182"></a>01182             k++ ;
-<a name="l01183"></a>01183             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length -2*SLIT_LEN_ERR ) )
-<a name="l01184"></a>01184             {
-<a name="l01185"></a>01185                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l01186"></a>01186             } 
-<a name="l01187"></a>01187         }
-<a name="l01188"></a>01188     }
-<a name="l01189"></a>01189     <span class="comment">/*</span>
-<a name="l01190"></a>01190 <span class="comment">    for ( i = 0 ; i < k ; i++ )</span>
-<a name="l01191"></a>01191 <span class="comment">    {</span>
-<a name="l01192"></a>01192 <span class="comment">      sinfo_msg_warning("%d %d", edgeclean[i], pos_rowclean[i]);</span>
-<a name="l01193"></a>01193 <span class="comment">    }</span>
-<a name="l01194"></a>01194 <span class="comment">    */</span>
-<a name="l01195"></a>01195     <span class="keywordflow">if</span> ( k != N_SLITLETS - 1 )
-<a name="l01196"></a>01196     {
-<a name="l01197"></a>01197         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of clean slitlets found: %d"</span>, k+1) ;
-<a name="l01198"></a>01198         cpl_free( sinfo_edge ) ;
-<a name="l01199"></a>01199         cpl_free( pos_row ) ;
-<a name="l01200"></a>01200         cpl_free( edgeclean ) ;
-<a name="l01201"></a>01201         cpl_free( dummyedge ) ;
-<a name="l01202"></a>01202         cpl_free( pos_rowclean ) ;
-<a name="l01203"></a>01203         <span class="keywordflow">return</span> -7 ;
-<a name="l01204"></a>01204     } 
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l01207"></a>01207     margin = box_length / 2 ;
-<a name="l01208"></a>01208 
-<a name="l01209"></a>01209     <span class="comment">/* ----------------------------------------------------------------------</span>
-<a name="l01210"></a>01210 <span class="comment">     * now go through the slitlets, search along each column within a box with </span>
-<a name="l01211"></a>01211 <span class="comment">     * half width y_box the maximum value and store these found values </span>
-<a name="l01212"></a>01212 <span class="comment">     * in a buffer</span>
-<a name="l01213"></a>01213 <span class="comment">     */</span>
-<a name="l01214"></a>01214      <span class="keywordflow">if</span>(
-<a name="l01215"></a>01215          ( (pos_rowclean[0]-sinfo_new_nint(y_box)) < 0 ) ||
-<a name="l01216"></a>01216          ( (pos_rowclean[0]+sinfo_new_nint(y_box)) >ily )
-<a name="l01217"></a>01217        ) {
-<a name="l01218"></a>01218 
-<a name="l01219"></a>01219              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"pos_rowclean[0] <0 something wrong!"</span>) ;
-<a name="l01220"></a>01220              cpl_free( sinfo_edge ) ;
-<a name="l01221"></a>01221              cpl_free( pos_row ) ;
-<a name="l01222"></a>01222              cpl_free( edgeclean ) ;
-<a name="l01223"></a>01223              cpl_free( dummyedge ) ;
-<a name="l01224"></a>01224              cpl_free( pos_rowclean ) ;
-<a name="l01225"></a>01225              <span class="keywordflow">return</span> -7 ;
-<a name="l01226"></a>01226 
-<a name="l01227"></a>01227     }
-<a name="l01228"></a>01228 
-<a name="l01229"></a>01229     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )
-<a name="l01230"></a>01230     {
-<a name="l01231"></a>01231         m = 0 ;
-<a name="l01232"></a>01232         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01233"></a>01233         {
-<a name="l01234"></a>01234             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l01235"></a>01235             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l01236"></a>01236             {
-<a name="l01237"></a>01237                 maxval = -FLT_MAX ;
-<a name="l01238"></a>01238                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; 
-<a name="l01239"></a>01239                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01240"></a>01240                 {
-<a name="l01241"></a>01241                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l01242"></a>01242                     {
-<a name="l01243"></a>01243                         maxval = pidata[col + ilx*row] ;
-<a name="l01244"></a>01244                     }
-<a name="l01245"></a>01245                 }
-<a name="l01246"></a>01246                 box_buffer->data[m] = maxval ;
-<a name="l01247"></a>01247                 m++ ;
-<a name="l01248"></a>01248             }
-<a name="l01249"></a>01249         }
-<a name="l01250"></a>01250         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l01251"></a>01251         {
-<a name="l01252"></a>01252             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l01253"></a>01253                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l01254"></a>01254             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l01255"></a>01255                   col < edgeclean[j] + margin ; col++ )
-<a name="l01256"></a>01256             {
-<a name="l01257"></a>01257                 maxval = -FLT_MAX ;
-<a name="l01258"></a>01258                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; 
-<a name="l01259"></a>01259                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01260"></a>01260                 {
-<a name="l01261"></a>01261                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l01262"></a>01262                     {
-<a name="l01263"></a>01263                         maxval = pidata[col + ilx*row] ;
-<a name="l01264"></a>01264                     }
-<a name="l01265"></a>01265                 }
-<a name="l01266"></a>01266                 box_buffer->data[m] = maxval ;
-<a name="l01267"></a>01267                 m++ ;
-<a name="l01268"></a>01268             }
-<a name="l01269"></a>01269         }
-<a name="l01270"></a>01270         <span class="keywordflow">else</span> 
-<a name="l01271"></a>01271         {
-<a name="l01272"></a>01272             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l01273"></a>01273             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l01274"></a>01274             {
-<a name="l01275"></a>01275                 maxval = -FLT_MAX ;
-<a name="l01276"></a>01276                 <span class="keywordflow">for</span> ( row = pos_rowclean[k-2] - sinfo_new_nint(y_box) ; 
-<a name="l01277"></a>01277                       row <= pos_rowclean[k-2] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01278"></a>01278                 {
-<a name="l01279"></a>01279                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l01280"></a>01280                     {
-<a name="l01281"></a>01281                         maxval = pidata[col + ilx*row] ;
-<a name="l01282"></a>01282                     }
-<a name="l01283"></a>01283                 }
-<a name="l01284"></a>01284                 <span class="keywordflow">if</span>(maxval>0) box_buffer->data[m] = maxval ;
-<a name="l01285"></a>01285         <span class="keywordflow">else</span> box_buffer->data[m] = 0;
-<a name="l01286"></a>01286         m++ ;
-<a name="l01287"></a>01287             }
-<a name="l01288"></a>01288         }
-<a name="l01289"></a>01289 
-<a name="l01290"></a>01290         <span class="comment">/* determine the minimum value in the box to get background1 </span>
-<a name="l01291"></a>01291 <span class="comment">           value for the sinfo_edge slitlets */</span>
-<a name="l01292"></a>01292         min = FLT_MAX ;
-<a name="l01293"></a>01293         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l01294"></a>01294         {
-<a name="l01295"></a>01295             <span class="keywordflow">if</span> ( box_buffer -> data[i] < min )
-<a name="l01296"></a>01296             {
-<a name="l01297"></a>01297                 min = box_buffer -> data[i] ;
-<a name="l01298"></a>01298             }
-<a name="l01299"></a>01299         }
-<a name="l01300"></a>01300 
-<a name="l01301"></a>01301         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l01302"></a>01302         { 
-<a name="l01303"></a>01303             nel = 0 ;
-<a name="l01304"></a>01304             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l01305"></a>01305             {
-<a name="l01306"></a>01306                 nel = box_buffer -> n_elements / 2 ;
-<a name="l01307"></a>01307             }
-<a name="l01308"></a>01308             <span class="keywordflow">else</span>
-<a name="l01309"></a>01309             {
-<a name="l01310"></a>01310                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )
-<a name="l01311"></a>01311                 {
-<a name="l01312"></a>01312                     nel = box_buffer -> n_elements / 2 ;
-<a name="l01313"></a>01313                 }
-<a name="l01314"></a>01314                 <span class="keywordflow">else</span>
-<a name="l01315"></a>01315                 {
-<a name="l01316"></a>01316                     nel = box_buffer -> n_elements / 2 + 1 ;
-<a name="l01317"></a>01317                 }
-<a name="l01318"></a>01318             }
-<a name="l01319"></a>01319 
-<a name="l01320"></a>01320             <span class="comment">/* now split the buffer in the midth in a left and right </span>
-<a name="l01321"></a>01321 <span class="comment">               part for fitting */</span>
-<a name="l01322"></a>01322             half_buffer = sinfo_new_vector( nel ) ;
-<a name="l01323"></a>01323             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l01324"></a>01324             {
-<a name="l01325"></a>01325                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01326"></a>01326                 {
-<a name="l01327"></a>01327                     half_buffer -> data[i] = box_buffer -> data[i] ;
-<a name="l01328"></a>01328                 }
-<a name="l01329"></a>01329             }
-<a name="l01330"></a>01330             <span class="keywordflow">else</span>
-<a name="l01331"></a>01331             {
-<a name="l01332"></a>01332                 n_right = 0 ;
-<a name="l01333"></a>01333                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; 
-<a name="l01334"></a>01334                       i >= box_buffer -> n_elements - nel ; i-- )
-<a name="l01335"></a>01335                 {
-<a name="l01336"></a>01336                     half_buffer -> data[n_right] = box_buffer -> data[i] ;
-<a name="l01337"></a>01337                     n_right++ ;
-<a name="l01338"></a>01338                 }
-<a name="l01339"></a>01339             }
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01342"></a>01342             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01343"></a>01343             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01344"></a>01344 
-<a name="l01345"></a>01345             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01346"></a>01346             minval =  FLT_MAX ;
-<a name="l01347"></a>01347             maxval = -FLT_MAX ;
-<a name="l01348"></a>01348             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01349"></a>01349             {
-<a name="l01350"></a>01350                 xdat[i] = i ;
-<a name="l01351"></a>01351                 wdat[i] = 1.0 ;
-<a name="l01352"></a>01352                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )
-<a name="l01353"></a>01353                 {
-<a name="l01354"></a>01354                     minval = half_buffer -> data[i] ;
-<a name="l01355"></a>01355                 }
-<a name="l01356"></a>01356                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )
-<a name="l01357"></a>01357                 {
-<a name="l01358"></a>01358                     maxval = half_buffer -> data[i] ;
-<a name="l01359"></a>01359                 }
-<a name="l01360"></a>01360             }
-<a name="l01361"></a>01361 
-<a name="l01362"></a>01362             fitpar[0] = minval ;
-<a name="l01363"></a>01363             fitpar[1] = maxval ; 
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365             <span class="comment">/* search for both positions of the half intensity </span>
-<a name="l01366"></a>01366 <span class="comment">               of the hat within the buffer */</span>
-<a name="l01367"></a>01367             init1 = -1 ; 
-<a name="l01368"></a>01368             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01369"></a>01369             {
-<a name="l01370"></a>01370                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )
-<a name="l01371"></a>01371                 {
-<a name="l01372"></a>01372                     init1 = i ;
-<a name="l01373"></a>01373                     break ;
-<a name="l01374"></a>01374                 }
-<a name="l01375"></a>01375             }
-<a name="l01376"></a>01376 
-<a name="l01377"></a>01377             <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l01378"></a>01378 <span class="comment">             * if we have too few left background values (at the image edges)</span>
-<a name="l01379"></a>01379 <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span>
-<a name="l01380"></a>01380 <span class="comment">             * values in order to get a good fit</span>
-<a name="l01381"></a>01381 <span class="comment">             */</span>
-<a name="l01382"></a>01382               
-<a name="l01383"></a>01383             edge_ind = 0 ;
-<a name="l01384"></a>01384             <span class="keywordflow">if</span> ( init1 < 3 )
-<a name="l01385"></a>01385             {
-<a name="l01386"></a>01386                 n_buf = half_buffer->n_elements + margin ;
-<a name="l01387"></a>01387                 in_buffer = sinfo_new_vector( n_buf ) ;     
-<a name="l01388"></a>01388                 <span class="keywordflow">for</span> ( i = 0 ; i < margin ; i++ )
-<a name="l01389"></a>01389                 {
-<a name="l01390"></a>01390                     in_buffer -> data[i] = min ;
-<a name="l01391"></a>01391                 }
-<a name="l01392"></a>01392                 shift = 0 ;
-<a name="l01393"></a>01393                 <span class="keywordflow">for</span> ( i = margin ; i < n_buf ; i++ )
-<a name="l01394"></a>01394                 {
-<a name="l01395"></a>01395                     in_buffer -> data[i] = half_buffer -> data[shift] ;
-<a name="l01396"></a>01396                     shift++ ;
-<a name="l01397"></a>01397                 }
-<a name="l01398"></a>01398                 sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l01399"></a>01399                 half_buffer = sinfo_new_vector ( n_buf ) ;
-<a name="l01400"></a>01400                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )
-<a name="l01401"></a>01401                 {
-<a name="l01402"></a>01402                     half_buffer -> data[i] = in_buffer -> data[i] ;
-<a name="l01403"></a>01403                 }
-<a name="l01404"></a>01404                 edge_ind = 1 ;
-<a name="l01405"></a>01405                 init1 += margin ;
-<a name="l01406"></a>01406                 sinfo_new_destroy_vector ( in_buffer ) ;
-<a name="l01407"></a>01407             }
-<a name="l01408"></a>01408 
-<a name="l01409"></a>01409             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l01410"></a>01410             <span class="keywordflow">if</span> ( init1 != -1 )
-<a name="l01411"></a>01411             {
-<a name="l01412"></a>01412                 fitpar[2] = (float)init1 ;
-<a name="l01413"></a>01413             }
-<a name="l01414"></a>01414             fitpar[3] = 1. ;
-<a name="l01415"></a>01415 
-<a name="l01416"></a>01416             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l01417"></a>01417             {
-<a name="l01418"></a>01418                 mpar[i] = 1 ;
-<a name="l01419"></a>01419                 dervpar[i] = 0. ;
-<a name="l01420"></a>01420             }
-<a name="l01421"></a>01421       
-<a name="l01422"></a>01422             xdim     = XDIMA ;
-<a name="l01423"></a>01423             ndat     = nel ;
-<a name="l01424"></a>01424             numpar   = NPAR ;
-<a name="l01425"></a>01425             tol      = TOLA ;
-<a name="l01426"></a>01426             lab      = LABA ;
-<a name="l01427"></a>01427             its      = ITSA ;
-<a name="l01428"></a>01428          
-<a name="l01429"></a>01429             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l01430"></a>01430             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, 
-<a name="l01431"></a>01431                                                  half_buffer -> data, 
-<a name="l01432"></a>01432                                                  wdat, &ndat, fitpar,
-<a name="l01433"></a>01433                                                  dervpar, mpar, &numpar, 
-<a name="l01434"></a>01434                                                  &tol, &its, &lab )) )
-<a name="l01435"></a>01435             { 
-<a name="l01436"></a>01436                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span>
-<a name="l01437"></a>01437                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed,"</span>
-<a name="l01438"></a>01438                                    <span class="stringliteral">" error no.: %d in slitlet: %d"</span>, iters, j) ;
-<a name="l01439"></a>01439                 fitpar[2] = (float)init1 ;
-<a name="l01440"></a>01440             }
-<a name="l01441"></a>01441 
-<a name="l01442"></a>01442             pos = fitpar[2] ;
-<a name="l01443"></a>01443             <span class="keywordflow">if</span> ( edge_ind == 1 )
-<a name="l01444"></a>01444             {
-<a name="l01445"></a>01445                 pos -= (float)margin ;
-<a name="l01446"></a>01446             }
-<a name="l01447"></a>01447 
-<a name="l01448"></a>01448             <span class="comment">/*---------------------------------------------------------------- </span>
-<a name="l01449"></a>01449 <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span>
-<a name="l01450"></a>01450 <span class="comment">             * slitlets and associate the fit results with the absolute </span>
-<a name="l01451"></a>01451 <span class="comment">             * positions in the image consider the difference of the fitted </span>
-<a name="l01452"></a>01452 <span class="comment">             * slit position to the expected position and decide wether the </span>
-<a name="l01453"></a>01453 <span class="comment">             * fit is taken or the expected value is taken.</span>
-<a name="l01454"></a>01454 <span class="comment">             */</span>
-<a name="l01455"></a>01455             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l01456"></a>01456             {
-<a name="l01457"></a>01457                 <span class="comment">/* take care of the column position of the fit boxes to get </span>
-<a name="l01458"></a>01458 <span class="comment">                   the absolute positions */</span>
-<a name="l01459"></a>01459                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01460"></a>01460                 {
-<a name="l01461"></a>01461                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - 
-<a name="l01462"></a>01462                                      (<span class="keywordtype">float</span>)slit_length)) < diff_tol )
-<a name="l01463"></a>01463                     {
-<a name="l01464"></a>01464                         slit_pos[0][0] = pos ;
-<a name="l01465"></a>01465                     }
-<a name="l01466"></a>01466                     <span class="keywordflow">else</span>
-<a name="l01467"></a>01467                     {
-<a name="l01468"></a>01468                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01469"></a>01469                                           <span class="stringliteral">"left position of slitlet 0"</span>) ;
-<a name="l01470"></a>01470                         <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>) edgeclean[0] - 1. - 
-<a name="l01471"></a>01471                              (<span class="keywordtype">float</span>)slit_length < 0. )
-<a name="l01472"></a>01472                         {
-<a name="l01473"></a>01473                             slit_pos[0][0] = 0. ;
-<a name="l01474"></a>01474                         }
-<a name="l01475"></a>01475                         <span class="keywordflow">else</span>
-<a name="l01476"></a>01476                         {
-<a name="l01477"></a>01477                             slit_pos[0][0] = (float)edgeclean[0] - 1. - 
-<a name="l01478"></a>01478                                              (<span class="keywordtype">float</span>)slit_length ;
-<a name="l01479"></a>01479                         }
-<a name="l01480"></a>01480                     }
-<a name="l01481"></a>01481                 }
-<a name="l01482"></a>01482                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l01483"></a>01483                 {
-<a name="l01484"></a>01484                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l01485"></a>01485                     {
-<a name="l01486"></a>01486                         slit_pos[j][0] = pos + (float)edgeclean[j-1] - 
-<a name="l01487"></a>01487                                                (<span class="keywordtype">float</span>)margin ;
-<a name="l01488"></a>01488                     }
-<a name="l01489"></a>01489                     <span class="keywordflow">else</span>
-<a name="l01490"></a>01490                     {
-<a name="l01491"></a>01491                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01492"></a>01492                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;
-<a name="l01493"></a>01493                         slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;
-<a name="l01494"></a>01494                     }
-<a name="l01495"></a>01495                 }
-<a name="l01496"></a>01496                 <span class="keywordflow">else</span>
-<a name="l01497"></a>01497                 {
-<a name="l01498"></a>01498                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )
-<a name="l01499"></a>01499                     {
-<a name="l01500"></a>01500                         slit_pos[k][0] = pos + (float)edgeclean[k-1] - 
-<a name="l01501"></a>01501                                                (<span class="keywordtype">float</span>)margin ;
-<a name="l01502"></a>01502                     }
-<a name="l01503"></a>01503                     <span class="keywordflow">else</span>
-<a name="l01504"></a>01504                     {
-<a name="l01505"></a>01505                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01506"></a>01506                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;
-<a name="l01507"></a>01507                         slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;
-<a name="l01508"></a>01508                     }
-<a name="l01509"></a>01509                 }
-<a name="l01510"></a>01510             }
-<a name="l01511"></a>01511             <span class="keywordflow">else</span>
-<a name="l01512"></a>01512             {
-<a name="l01513"></a>01513                 <span class="comment">/* take care of the column position of the fit boxes to </span>
-<a name="l01514"></a>01514 <span class="comment">                   get the absolute positions */</span>
-<a name="l01515"></a>01515                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01516"></a>01516                 {
-<a name="l01517"></a>01517                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - 
-<a name="l01518"></a>01518                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )
-<a name="l01519"></a>01519                     {
-<a name="l01520"></a>01520                         slit_pos[0][1] = (float)(box_buffer->n_elements - 1) - 
-<a name="l01521"></a>01521                                          pos ;
-<a name="l01522"></a>01522                     }
-<a name="l01523"></a>01523                     <span class="keywordflow">else</span>
-<a name="l01524"></a>01524                     {
-<a name="l01525"></a>01525                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01526"></a>01526                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;
-<a name="l01527"></a>01527                         slit_pos[0][1] = (float)edgeclean[0] - 1. ;
-<a name="l01528"></a>01528                     }
-<a name="l01529"></a>01529                 }
-<a name="l01530"></a>01530                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l01531"></a>01531                 {
-<a name="l01532"></a>01532                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos
-<a name="l01533"></a>01533                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - 
-<a name="l01534"></a>01534                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )
-<a name="l01535"></a>01535                     {
-<a name="l01536"></a>01536                         slit_pos[j][1] = (float)(box_buffer->n_elements - 1) - 
-<a name="l01537"></a>01537                                          pos
-<a name="l01538"></a>01538                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l01539"></a>01539                     }
-<a name="l01540"></a>01540                     <span class="keywordflow">else</span>
-<a name="l01541"></a>01541                     {
-<a name="l01542"></a>01542                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01543"></a>01543                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;
-<a name="l01544"></a>01544                         slit_pos[j][1] = (float)edgeclean[j] - 1. ;
-<a name="l01545"></a>01545                     }
-<a name="l01546"></a>01546                 }
-<a name="l01547"></a>01547                 <span class="keywordflow">else</span>
-<a name="l01548"></a>01548                 {
-<a name="l01549"></a>01549                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )
-<a name="l01550"></a>01550                     {
-<a name="l01551"></a>01551                         last_pos = (float)(ilx - 1) ;
-<a name="l01552"></a>01552                     }
-<a name="l01553"></a>01553                     <span class="keywordflow">else</span>
-<a name="l01554"></a>01554                     {
-<a name="l01555"></a>01555                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;
-<a name="l01556"></a>01556                     }
-<a name="l01557"></a>01557                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos
-<a name="l01558"></a>01558                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - 
-<a name="l01559"></a>01559                                last_pos ) < diff_tol )
-<a name="l01560"></a>01560                     {
-<a name="l01561"></a>01561                         slit_pos[k][1] = (float)(box_buffer->n_elements - 1) - 
-<a name="l01562"></a>01562                                          pos
-<a name="l01563"></a>01563                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l01564"></a>01564                     }
-<a name="l01565"></a>01565                     <span class="keywordflow">else</span>
-<a name="l01566"></a>01566                     {
-<a name="l01567"></a>01567                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span>
-<a name="l01568"></a>01568                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;
-<a name="l01569"></a>01569                         slit_pos[k][1] = last_pos ;
-<a name="l01570"></a>01570                     }
-<a name="l01571"></a>01571                 }
-<a name="l01572"></a>01572             }
-<a name="l01573"></a>01573 
-<a name="l01574"></a>01574             sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l01575"></a>01575             cpl_free( xdat ) ;
-<a name="l01576"></a>01576             cpl_free( wdat ) ;
-<a name="l01577"></a>01577             cpl_free( mpar ) ;
-<a name="l01578"></a>01578         }
-<a name="l01579"></a>01579         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l01580"></a>01580     }
-<a name="l01581"></a>01581      
-<a name="l01582"></a>01582 
-<a name="l01583"></a>01583     cpl_free( sinfo_edge ) ;
-<a name="l01584"></a>01584     cpl_free( pos_row ) ;
-<a name="l01585"></a>01585     cpl_free( edgeclean ) ;
-<a name="l01586"></a>01586     cpl_free( dummyedge ) ;
-<a name="l01587"></a>01587     cpl_free( pos_rowclean ) ;
-<a name="l01588"></a>01588     cpl_free( position);
-<a name="l01589"></a>01589     <span class="keywordflow">return</span> 0 ;
-<a name="l01590"></a>01590 }
-<a name="l01591"></a>01591 
-<a name="l01619"></a>01619 <span class="keywordtype">int</span> 
-<a name="l01620"></a><a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21">01620</a> <a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz_single_line</a> ( cpl_image   * lineImage, 
-<a name="l01621"></a>01621                               <span class="keywordtype">float</span>     ** slit_pos,
-<a name="l01622"></a>01622                               <span class="keywordtype">int</span>          box_length,
-<a name="l01623"></a>01623                               <span class="keywordtype">float</span>        y_box,
-<a name="l01624"></a>01624                   <span class="keywordtype">int</span>          low_pos,
-<a name="l01625"></a>01625                   <span class="keywordtype">int</span>          high_pos )
-<a name="l01626"></a>01626 {
-<a name="l01627"></a>01627     <span class="keywordtype">int</span>*     position=NULL ;
-<a name="l01628"></a>01628     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;
-<a name="l01629"></a>01629     <span class="keywordtype">int</span>   * dummyedge ;
-<a name="l01630"></a>01630     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;
-<a name="l01631"></a>01631     Vector * box_buffer ;
-<a name="l01632"></a>01632     Vector * half_buffer ;
-<a name="l01633"></a>01633     Vector * in_buffer ;
-<a name="l01634"></a>01634     <span class="keywordtype">int</span>   found_row ;
-<a name="l01635"></a>01635     <span class="keywordtype">int</span>   row, col ;
-<a name="l01636"></a>01636     <span class="keywordtype">int</span>   i, j, k, m, ed ;
-<a name="l01637"></a>01637     <span class="keywordtype">int</span>   init1 ;
-<a name="l01638"></a>01638     <span class="keywordtype">int</span>   nel, n_right, left_right ;
-<a name="l01639"></a>01639     <span class="keywordtype">int</span>   n_buf, edge_ind, shift ;
-<a name="l01640"></a>01640     <span class="keywordtype">int</span>   slit_length ;
-<a name="l01641"></a>01641     <span class="keywordtype">int</span>   margin ;
-<a name="l01642"></a>01642     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l01643"></a>01643     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l01644"></a>01644     <span class="keywordtype">int</span>   * mpar ;
-<a name="l01645"></a>01645     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l01646"></a>01646     <span class="keywordtype">float</span> tol, lab ;
-<a name="l01647"></a>01647     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l01648"></a>01648     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l01649"></a>01649     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l01650"></a>01650     <span class="keywordtype">float</span> min ;
-<a name="l01651"></a>01651     <span class="keywordtype">float</span> pos, last_pos ;
-<a name="l01652"></a>01652     <span class="keywordtype">int</span> ilx=0;
-<a name="l01653"></a>01653     <span class="keywordtype">int</span> ily=0;
-<a name="l01654"></a>01654     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01655"></a>01655 
-<a name="l01656"></a>01656     slit_length = SLITLENGTH ;
-<a name="l01657"></a>01657 
-<a name="l01658"></a>01658     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l01659"></a>01659     {
-<a name="l01660"></a>01660         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;
-<a name="l01661"></a>01661         <span class="keywordflow">return</span> -1 ;
-<a name="l01662"></a>01662     }
-<a name="l01663"></a>01663 
-<a name="l01664"></a>01664     <span class="keywordflow">if</span> ( NULL == slit_pos )
-<a name="l01665"></a>01665     {
-<a name="l01666"></a>01666         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;
-<a name="l01667"></a>01667         <span class="keywordflow">return</span> -1 ;
-<a name="l01668"></a>01668     }
-<a name="l01669"></a>01669 
-<a name="l01670"></a>01670     <span class="keywordflow">if</span> ( box_length <  4 ||
-<a name="l01671"></a>01671          box_length >  2*slit_length )
-<a name="l01672"></a>01672     {
-<a name="l01673"></a>01673         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;
-<a name="l01674"></a>01674         <span class="keywordflow">return</span> -1 ;
-<a name="l01675"></a>01675     }
-<a name="l01676"></a>01676 
-<a name="l01677"></a>01677     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )
-<a name="l01678"></a>01678     {
-<a name="l01679"></a>01679         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;
-<a name="l01680"></a>01680         <span class="keywordflow">return</span> -1 ;
-<a name="l01681"></a>01681     }
-<a name="l01682"></a>01682 
-<a name="l01683"></a>01683     ilx=cpl_image_get_size_x(lineImage);
-<a name="l01684"></a>01684     ily=cpl_image_get_size_y(lineImage);
-<a name="l01685"></a>01685     pidata=cpl_image_get_data_float(lineImage);
-<a name="l01686"></a>01686 
-<a name="l01687"></a>01687     <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || 
-<a name="l01688"></a>01688          high_pos <= 0 || high_pos >= ilx )
-<a name="l01689"></a>01689     {
-<a name="l01690"></a>01690         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;
-<a name="l01691"></a>01691         <span class="keywordflow">return</span> -1 ;
-<a name="l01692"></a>01692     }
-<a name="l01693"></a>01693 
-<a name="l01694"></a>01694     <span class="comment">/* allocate memory for the edges and the row position of the slitlets */</span>
-<a name="l01695"></a>01695     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01696"></a>01696     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01697"></a>01697     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01698"></a>01698     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01699"></a>01699     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l01700"></a>01700 
-<a name="l01701"></a>01701     <span class="comment">/* now search for the maximum between the given positions for each col */</span>
-<a name="l01702"></a>01702     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); ;
-<a name="l01703"></a>01703 
-<a name="l01704"></a>01704     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01705"></a>01705     {
-<a name="l01706"></a>01706         found_row = -1 ;
-<a name="l01707"></a>01707         maxval = -FLT_MAX ;
-<a name="l01708"></a>01708     <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )
-<a name="l01709"></a>01709     {
-<a name="l01710"></a>01710         <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )
-<a name="l01711"></a>01711             {
-<a name="l01712"></a>01712         maxval = pidata[col+row*ilx] ;
-<a name="l01713"></a>01713                 found_row = row ;
-<a name="l01714"></a>01714         }
-<a name="l01715"></a>01715     }
-<a name="l01716"></a>01716     <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )
-<a name="l01717"></a>01717     {
-<a name="l01718"></a>01718             position[col] = found_row ;
-<a name="l01719"></a>01719         }
-<a name="l01720"></a>01720     <span class="keywordflow">else</span>
-<a name="l01721"></a>01721     {
-<a name="l01722"></a>01722         position[col] = 0 ;
-<a name="l01723"></a>01723         }
-<a name="l01724"></a>01724     }
-<a name="l01725"></a>01725 
-<a name="l01726"></a>01726     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> 
-<a name="l01727"></a>01727     ed = 0 ;
-<a name="l01728"></a>01728     <span class="keywordflow">for</span> ( col = 0 ; col < (ilx) - 1 ; col++ )
-<a name="l01729"></a>01729     {
-<a name="l01730"></a>01730         <span class="keywordflow">if</span> ( position[col] > 0 && position[col+1] > 0 &&
-<a name="l01731"></a>01731          abs(position[col+1] - position[col]) > 10 ) 
-<a name="l01732"></a>01732         {
-<a name="l01733"></a>01733             sinfo_edge[ed] = col ; 
-<a name="l01734"></a>01734             pos_row[ed] = position[col] ;
-<a name="l01735"></a>01735             ed++ ;
-<a name="l01736"></a>01736         }
-<a name="l01737"></a>01737 
-<a name="l01738"></a>01738     }
-<a name="l01739"></a>01739     <span class="keywordflow">if</span> (ed <= 1)
-<a name="l01740"></a>01740     {
-<a name="l01741"></a>01741         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no slitlets found!"</span> ) ;
-<a name="l01742"></a>01742         cpl_free( sinfo_edge ) ;
-<a name="l01743"></a>01743         cpl_free( pos_row ) ;
-<a name="l01744"></a>01744         cpl_free( edgeclean ) ;
-<a name="l01745"></a>01745         cpl_free( dummyedge ) ;
-<a name="l01746"></a>01746         cpl_free( pos_rowclean ) ;
-<a name="l01747"></a>01747         <span class="keywordflow">return</span> -1 ;
-<a name="l01748"></a>01748     }
-<a name="l01749"></a>01749 
-<a name="l01750"></a>01750     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span>
-<a name="l01751"></a>01751     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )
-<a name="l01752"></a>01752     {
-<a name="l01753"></a>01753         <span class="keywordflow">if</span> ( i == ed )
-<a name="l01754"></a>01754         {
-<a name="l01755"></a>01755             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < 
-<a name="l01756"></a>01756                   slit_length - SLIT_LEN_ERR ||
-<a name="l01757"></a>01757                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > 
-<a name="l01758"></a>01758                   slit_length + SLIT_LEN_ERR )
-<a name="l01759"></a>01759             {
-<a name="l01760"></a>01760                 dummyedge[i-1]   = -1 ;
-<a name="l01761"></a>01761             }
-<a name="l01762"></a>01762         }
-<a name="l01763"></a>01763         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)
-<a name="l01764"></a>01764         {
-<a name="l01765"></a>01765             dummyedge[i-1] = sinfo_edge[i-1] ;
-<a name="l01766"></a>01766         }
-<a name="l01767"></a>01767         <span class="keywordflow">else</span>
-<a name="l01768"></a>01768         {
-<a name="l01769"></a>01769             continue ;
-<a name="l01770"></a>01770         }
-<a name="l01771"></a>01771         <span class="keywordflow">if</span> ( i < ed )
-<a name="l01772"></a>01772         {
-<a name="l01773"></a>01773             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < 
-<a name="l01774"></a>01774                   slit_length - SLIT_LEN_ERR ||
-<a name="l01775"></a>01775                  (sinfo_edge[i] - sinfo_edge[i-1]) > 
-<a name="l01776"></a>01776                   slit_length + SLIT_LEN_ERR )
-<a name="l01777"></a>01777             {
-<a name="l01778"></a>01778                 dummyedge[i]   = -1 ;
-<a name="l01779"></a>01779             }
-<a name="l01780"></a>01780         }
-<a name="l01781"></a>01781         <span class="keywordflow">if</span> ( i+1 < ed && dummyedge[i] != -1 )
-<a name="l01782"></a>01782         {
-<a name="l01783"></a>01783             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < 
-<a name="l01784"></a>01784                   slit_length - SLIT_LEN_ERR ||
-<a name="l01785"></a>01785                  (sinfo_edge[i+1] - sinfo_edge[i]) > 
-<a name="l01786"></a>01786                   slit_length + SLIT_LEN_ERR )
-<a name="l01787"></a>01787             {
-<a name="l01788"></a>01788                 dummyedge[i+1] = -1 ; 
-<a name="l01789"></a>01789             }
-<a name="l01790"></a>01790         }
-<a name="l01791"></a>01791     }
-<a name="l01792"></a>01792     
-<a name="l01793"></a>01793     k = 0 ;
-<a name="l01794"></a>01794     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )
-<a name="l01795"></a>01795     {
-<a name="l01796"></a>01796         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )
-<a name="l01797"></a>01797         {
-<a name="l01798"></a>01798             edgeclean[k] = dummyedge[i] ;
-<a name="l01799"></a>01799             pos_rowclean[k] = pos_row[i] ;
-<a name="l01800"></a>01800             k++ ;
-<a name="l01801"></a>01801             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 2*SLIT_LEN_ERR ) )
-<a name="l01802"></a>01802             {
-<a name="l01803"></a>01803                 pos_rowclean[k] = pos_row[ed] ;
-<a name="l01804"></a>01804             }
-<a name="l01805"></a>01805         }
-<a name="l01806"></a>01806     }
-<a name="l01807"></a>01807 
-<a name="l01808"></a>01808     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span>
-<a name="l01809"></a>01809     margin = box_length / 2 ;
-<a name="l01810"></a>01810 
-<a name="l01811"></a>01811     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l01812"></a>01812 <span class="comment">     * now go through the slitlets, search along each column within a box with </span>
-<a name="l01813"></a>01813 <span class="comment">     * half width y_box the maximum value and store these found values in a </span>
-<a name="l01814"></a>01814 <span class="comment">     * buffer</span>
-<a name="l01815"></a>01815 <span class="comment">     */</span>
-<a name="l01816"></a>01816     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )
-<a name="l01817"></a>01817     {
-<a name="l01818"></a>01818         m = 0 ;
-<a name="l01819"></a>01819         <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01820"></a>01820         {
-<a name="l01821"></a>01821             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;
-<a name="l01822"></a>01822             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )
-<a name="l01823"></a>01823             {
-<a name="l01824"></a>01824                 maxval = -FLT_MAX ;
-<a name="l01825"></a>01825                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; 
-<a name="l01826"></a>01826                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01827"></a>01827                 {
-<a name="l01828"></a>01828                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l01829"></a>01829                     {
-<a name="l01830"></a>01830                         maxval = pidata[col + ilx*row] ;
-<a name="l01831"></a>01831                     }
-<a name="l01832"></a>01832                 }
-<a name="l01833"></a>01833                 box_buffer->data[m] = maxval ;
-<a name="l01834"></a>01834                 m++ ;
-<a name="l01835"></a>01835             }
-<a name="l01836"></a>01836         }
-<a name="l01837"></a>01837         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l01838"></a>01838         {
-<a name="l01839"></a>01839             box_buffer = sinfo_new_vector( edgeclean[j] - 
-<a name="l01840"></a>01840                                            edgeclean[j-1] + 2*margin ) ;
-<a name="l01841"></a>01841             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; 
-<a name="l01842"></a>01842                   col < edgeclean[j] + margin ; col++ )
-<a name="l01843"></a>01843             {
-<a name="l01844"></a>01844                 maxval = -FLT_MAX ;
-<a name="l01845"></a>01845                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; 
-<a name="l01846"></a>01846                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01847"></a>01847                 {
-<a name="l01848"></a>01848                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l01849"></a>01849                     {
-<a name="l01850"></a>01850                         maxval = pidata[col + ilx*row] ;
-<a name="l01851"></a>01851                     }
-<a name="l01852"></a>01852                 }
-<a name="l01853"></a>01853                 box_buffer->data[m] = maxval ;
-<a name="l01854"></a>01854                 m++ ;
-<a name="l01855"></a>01855             }
-<a name="l01856"></a>01856         }
-<a name="l01857"></a>01857         <span class="keywordflow">else</span> 
-<a name="l01858"></a>01858         {
-<a name="l01859"></a>01859             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;
-<a name="l01860"></a>01860             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )
-<a name="l01861"></a>01861             {
-<a name="l01862"></a>01862         <span class="keywordflow">if</span> ( col < 0 )
-<a name="l01863"></a>01863         {
-<a name="l01864"></a>01864             col = 0 ;
-<a name="l01865"></a>01865                 }
-<a name="l01866"></a>01866 
-<a name="l01867"></a>01867                 maxval = -FLT_MAX ;
-<a name="l01868"></a>01868                 <span class="keywordflow">for</span> ( row = pos_rowclean[k] - sinfo_new_nint(y_box) ; 
-<a name="l01869"></a>01869                       row <= pos_rowclean[k] + sinfo_new_nint(y_box) ; row++ )
-<a name="l01870"></a>01870                 {
-<a name="l01871"></a>01871             <span class="keywordflow">if</span> ( row < 0 )
-<a name="l01872"></a>01872                     {
-<a name="l01873"></a>01873             continue ;
-<a name="l01874"></a>01874                     }
-<a name="l01875"></a>01875                     <span class="keywordflow">if</span> ( maxval < pidata[col + row * ilx] )
-<a name="l01876"></a>01876                     {
-<a name="l01877"></a>01877                         maxval = pidata[col + row * ilx] ;
-<a name="l01878"></a>01878                     }
-<a name="l01879"></a>01879                 }
-<a name="l01880"></a>01880                 box_buffer->data[m] = maxval ;
-<a name="l01881"></a>01881                 m++ ;
-<a name="l01882"></a>01882             }
-<a name="l01883"></a>01883         }
-<a name="l01884"></a>01884 
-<a name="l01885"></a>01885         <span class="comment">/* determine the minimum value in the box to get background1 </span>
-<a name="l01886"></a>01886 <span class="comment">           value for the sinfo_edge slitlets */</span>
-<a name="l01887"></a>01887         min = FLT_MAX ;
-<a name="l01888"></a>01888         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l01889"></a>01889         {
-<a name="l01890"></a>01890             <span class="keywordflow">if</span> ( box_buffer -> data[i] < min )
-<a name="l01891"></a>01891             {
-<a name="l01892"></a>01892                 min = box_buffer -> data[i] ;
-<a name="l01893"></a>01893             }
-<a name="l01894"></a>01894         }
-<a name="l01895"></a>01895 
-<a name="l01896"></a>01896         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l01897"></a>01897         { 
-<a name="l01898"></a>01898             nel = 0 ;
-<a name="l01899"></a>01899             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l01900"></a>01900             {
-<a name="l01901"></a>01901                 nel = box_buffer -> n_elements / 2 ;
-<a name="l01902"></a>01902             }
-<a name="l01903"></a>01903             <span class="keywordflow">else</span>
-<a name="l01904"></a>01904             {
-<a name="l01905"></a>01905                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )
-<a name="l01906"></a>01906                 {
-<a name="l01907"></a>01907                     nel = box_buffer -> n_elements / 2 ;
-<a name="l01908"></a>01908                 }
-<a name="l01909"></a>01909                 <span class="keywordflow">else</span>
-<a name="l01910"></a>01910                 {
-<a name="l01911"></a>01911                     nel = box_buffer -> n_elements / 2 + 1 ;
-<a name="l01912"></a>01912                 }
-<a name="l01913"></a>01913             }
-<a name="l01914"></a>01914 
-<a name="l01915"></a>01915             <span class="comment">/* now split the buffer in the midth in a left and </span>
-<a name="l01916"></a>01916 <span class="comment">               right part for fitting */</span>
-<a name="l01917"></a>01917             half_buffer = sinfo_new_vector( nel ) ;
-<a name="l01918"></a>01918             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l01919"></a>01919             {
-<a name="l01920"></a>01920                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01921"></a>01921                 {
-<a name="l01922"></a>01922                     half_buffer -> data[i] = box_buffer -> data[i] ;
-<a name="l01923"></a>01923                 }
-<a name="l01924"></a>01924             }
-<a name="l01925"></a>01925             <span class="keywordflow">else</span>
-<a name="l01926"></a>01926             {
-<a name="l01927"></a>01927                 n_right = 0 ;
-<a name="l01928"></a>01928                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; 
-<a name="l01929"></a>01929                       i >= box_buffer -> n_elements - nel ; i-- )
-<a name="l01930"></a>01930                 {
-<a name="l01931"></a>01931                     half_buffer -> data[n_right] = box_buffer -> data[i] ;
-<a name="l01932"></a>01932                     n_right++ ;
-<a name="l01933"></a>01933                 }
-<a name="l01934"></a>01934             }
-<a name="l01935"></a>01935 
-<a name="l01936"></a>01936             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01937"></a>01937             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01938"></a>01938             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01939"></a>01939 
-<a name="l01940"></a>01940             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01941"></a>01941             minval =  FLT_MAX ;
-<a name="l01942"></a>01942             maxval = -FLT_MAX ;
-<a name="l01943"></a>01943             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01944"></a>01944             {
-<a name="l01945"></a>01945                 xdat[i] = i ;
-<a name="l01946"></a>01946                 wdat[i] = 1.0 ;
-<a name="l01947"></a>01947                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )
-<a name="l01948"></a>01948                 {
-<a name="l01949"></a>01949                     minval = half_buffer -> data[i] ;
-<a name="l01950"></a>01950                 }
-<a name="l01951"></a>01951                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )
-<a name="l01952"></a>01952                 {
-<a name="l01953"></a>01953                     maxval = half_buffer -> data[i] ;
-<a name="l01954"></a>01954                 }
-<a name="l01955"></a>01955             }
-<a name="l01956"></a>01956             fitpar[0] = minval ;
-<a name="l01957"></a>01957             fitpar[1] = maxval ; 
-<a name="l01958"></a>01958 
-<a name="l01959"></a>01959             <span class="comment">/* search for both positions of the half intensity of </span>
-<a name="l01960"></a>01960 <span class="comment">               the hat within the buffer */</span>
-<a name="l01961"></a>01961             init1 = -1 ; 
-<a name="l01962"></a>01962             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )
-<a name="l01963"></a>01963             {
-<a name="l01964"></a>01964                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )
-<a name="l01965"></a>01965                 {
-<a name="l01966"></a>01966                     init1 = i ;
-<a name="l01967"></a>01967                     break ;
-<a name="l01968"></a>01968                 }
-<a name="l01969"></a>01969             }
-<a name="l01970"></a>01970 
-<a name="l01971"></a>01971             <span class="comment">/*---------------------------------------------------------------</span>
-<a name="l01972"></a>01972 <span class="comment">             * if we have too few left background values (at the image edges)</span>
-<a name="l01973"></a>01973 <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span>
-<a name="l01974"></a>01974 <span class="comment">             * values in order to get a good fit</span>
-<a name="l01975"></a>01975 <span class="comment">             */</span>
-<a name="l01976"></a>01976               
-<a name="l01977"></a>01977             edge_ind = 0 ;
-<a name="l01978"></a>01978             <span class="keywordflow">if</span> ( init1 < 3 )
-<a name="l01979"></a>01979             {
-<a name="l01980"></a>01980                 n_buf = half_buffer->n_elements + margin ;
-<a name="l01981"></a>01981                 in_buffer = sinfo_new_vector( n_buf ) ;     
-<a name="l01982"></a>01982                 <span class="keywordflow">for</span> ( i = 0 ; i < margin ; i++ )
-<a name="l01983"></a>01983                 {
-<a name="l01984"></a>01984                     in_buffer -> data[i] = min ;
-<a name="l01985"></a>01985                 }
-<a name="l01986"></a>01986                 shift = 0 ;
-<a name="l01987"></a>01987                 <span class="keywordflow">for</span> ( i = margin ; i < n_buf ; i++ )
-<a name="l01988"></a>01988                 {
-<a name="l01989"></a>01989                     in_buffer -> data[i] = half_buffer -> data[shift] ;
-<a name="l01990"></a>01990                     shift++ ;
-<a name="l01991"></a>01991                 }
-<a name="l01992"></a>01992                 sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l01993"></a>01993                 half_buffer = sinfo_new_vector ( n_buf ) ;
-<a name="l01994"></a>01994                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )
-<a name="l01995"></a>01995                 {
-<a name="l01996"></a>01996                     half_buffer -> data[i] = in_buffer -> data[i] ;
-<a name="l01997"></a>01997                 }
-<a name="l01998"></a>01998                 edge_ind = 1 ;
-<a name="l01999"></a>01999                 init1 += margin ;
-<a name="l02000"></a>02000                 sinfo_new_destroy_vector ( in_buffer ) ;
-<a name="l02001"></a>02001             }
-<a name="l02002"></a>02002 
-<a name="l02003"></a>02003             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l02004"></a>02004             <span class="keywordflow">if</span> ( init1 != -1 )
-<a name="l02005"></a>02005             {
-<a name="l02006"></a>02006                 fitpar[2] = (float)init1 ;
-<a name="l02007"></a>02007             }
-<a name="l02008"></a>02008             fitpar[3] = 1. ;
-<a name="l02009"></a>02009 
-<a name="l02010"></a>02010             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l02011"></a>02011             {
-<a name="l02012"></a>02012                 mpar[i] = 1 ;
-<a name="l02013"></a>02013                 dervpar[i] = 0. ;
-<a name="l02014"></a>02014             }
-<a name="l02015"></a>02015       
-<a name="l02016"></a>02016             xdim     = XDIMA ;
-<a name="l02017"></a>02017             ndat     = nel ;
-<a name="l02018"></a>02018             numpar   = NPAR ;
-<a name="l02019"></a>02019             tol      = TOLA ;
-<a name="l02020"></a>02020             lab      = LABA ;
-<a name="l02021"></a>02021             its      = ITSA ;
-<a name="l02022"></a>02022          
-<a name="l02023"></a>02023             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l02024"></a>02024             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, 
-<a name="l02025"></a>02025                                                  half_buffer -> data, 
-<a name="l02026"></a>02026                                                  wdat, &ndat, fitpar,
-<a name="l02027"></a>02027                                                  dervpar, mpar, &numpar, 
-<a name="l02028"></a>02028                                                  &tol, &its, &lab )) )
-<a name="l02029"></a>02029             { 
-<a name="l02030"></a>02030                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error "</span>
-<a name="l02031"></a>02031                                    <span class="stringliteral">"no.: %d in slitlet: %d"</span>, iters, j) ;
-<a name="l02032"></a>02032                 fitpar[2] = 0. ;
-<a name="l02033"></a>02033             }
-<a name="l02034"></a>02034         <span class="keywordflow">if</span> ( fitpar[3] <=0. )
-<a name="l02035"></a>02035             { 
-<a name="l02036"></a>02036                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" fit failed due to negative width"</span>
-<a name="l02037"></a>02037                                   <span class="stringliteral">" of boltzmann function in slitlet: %d"</span>, j) ;
-<a name="l02038"></a>02038                 fitpar[2] = 0. ;
-<a name="l02039"></a>02039             }
-<a name="l02040"></a>02040 
-<a name="l02041"></a>02041             pos = fitpar[2] ;
-<a name="l02042"></a>02042             <span class="keywordflow">if</span> ( edge_ind == 1 )
-<a name="l02043"></a>02043             {
-<a name="l02044"></a>02044                 pos -= (float)margin ;
-<a name="l02045"></a>02045             }
-<a name="l02046"></a>02046 
-<a name="l02047"></a>02047             <span class="comment">/*------------------------------------------------------------- </span>
-<a name="l02048"></a>02048 <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span>
-<a name="l02049"></a>02049 <span class="comment">             * slitlets and associate the fit results with the absolute </span>
-<a name="l02050"></a>02050 <span class="comment">             * positions in the image consider the difference of the fitted </span>
-<a name="l02051"></a>02051 <span class="comment">             * slit position to the expected position and decide wether the </span>
-<a name="l02052"></a>02052 <span class="comment">             * fit is taken or the expected value is taken.</span>
-<a name="l02053"></a>02053 <span class="comment">             */</span>
-<a name="l02054"></a>02054             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02055"></a>02055             {
-<a name="l02056"></a>02056                 <span class="comment">/* take care of the column position of the fit boxes to </span>
-<a name="l02057"></a>02057 <span class="comment">                   get the absolute positions */</span>
-<a name="l02058"></a>02058                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02059"></a>02059                 {
-<a name="l02060"></a>02060                     slit_pos[0][0] = pos ;
-<a name="l02061"></a>02061             <span class="keywordflow">if</span> ( slit_pos[0][0] - (<span class="keywordtype">int</span>) slit_pos[0][0] == 0.)
-<a name="l02062"></a>02062             {
-<a name="l02063"></a>02063                         slit_pos[0][0] = 0. ;
-<a name="l02064"></a>02064                     }
-<a name="l02065"></a>02065                 }
-<a name="l02066"></a>02066                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02067"></a>02067                 {
-<a name="l02068"></a>02068                     slit_pos[j][0] = pos + (float)edgeclean[j-1] - 
-<a name="l02069"></a>02069                                            (<span class="keywordtype">float</span>)margin ;
-<a name="l02070"></a>02070             <span class="keywordflow">if</span> ( slit_pos[j][0] - (<span class="keywordtype">int</span>) slit_pos[j][0] == 0.)
-<a name="l02071"></a>02071             {
-<a name="l02072"></a>02072                         slit_pos[j][0] = 0. ;
-<a name="l02073"></a>02073                     }
-<a name="l02074"></a>02074                 }
-<a name="l02075"></a>02075                 <span class="keywordflow">else</span>
-<a name="l02076"></a>02076                 {
-<a name="l02077"></a>02077                     slit_pos[k][0] = pos + (float)edgeclean[k-1] - 
-<a name="l02078"></a>02078                                            (<span class="keywordtype">float</span>)margin ;
-<a name="l02079"></a>02079             <span class="keywordflow">if</span> ( slit_pos[k][0] - (<span class="keywordtype">int</span>) slit_pos[k][0] == 0.)
-<a name="l02080"></a>02080             {
-<a name="l02081"></a>02081                         slit_pos[k][0] = 0. ;
-<a name="l02082"></a>02082                     }
-<a name="l02083"></a>02083                 }
-<a name="l02084"></a>02084             }
-<a name="l02085"></a>02085             <span class="keywordflow">else</span>
-<a name="l02086"></a>02086             {
-<a name="l02087"></a>02087                 <span class="comment">/* take care of the column position of the fit boxes to </span>
-<a name="l02088"></a>02088 <span class="comment">                   get the absolute positions */</span>
-<a name="l02089"></a>02089                 <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02090"></a>02090                 {
-<a name="l02091"></a>02091                     slit_pos[0][1] = (float)(box_buffer->n_elements - 1) - pos;
-<a name="l02092"></a>02092             <span class="keywordflow">if</span> ( slit_pos[0][1] - (<span class="keywordtype">int</span>) slit_pos[0][1] == 0.)
-<a name="l02093"></a>02093             {
-<a name="l02094"></a>02094                         slit_pos[0][1] = 0. ;
-<a name="l02095"></a>02095                     }
-<a name="l02096"></a>02096                 }
-<a name="l02097"></a>02097                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )
-<a name="l02098"></a>02098                 {
-<a name="l02099"></a>02099                     slit_pos[j][1] = (float)(box_buffer->n_elements - 1) - pos
-<a name="l02100"></a>02100                                      + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02101"></a>02101             <span class="keywordflow">if</span> ( slit_pos[j][1] - (<span class="keywordtype">int</span>) slit_pos[j][1] == 0.)
-<a name="l02102"></a>02102             {
-<a name="l02103"></a>02103                         slit_pos[j][1] = 0. ;
-<a name="l02104"></a>02104                     }
-<a name="l02105"></a>02105                 }
-<a name="l02106"></a>02106                 <span class="keywordflow">else</span>
-<a name="l02107"></a>02107                 {
-<a name="l02108"></a>02108                     last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;
-<a name="l02109"></a>02109                     slit_pos[k][1] = (float)(box_buffer->n_elements - 1) - pos
-<a name="l02110"></a>02110                                      + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;
-<a name="l02111"></a>02111             <span class="keywordflow">if</span> ( slit_pos[k][1] - (<span class="keywordtype">int</span>) slit_pos[k][1] == 0.)
-<a name="l02112"></a>02112             {
-<a name="l02113"></a>02113                         slit_pos[k][1] = 0. ;
-<a name="l02114"></a>02114                     }
-<a name="l02115"></a>02115                 }
-<a name="l02116"></a>02116             }
-<a name="l02117"></a>02117 
-<a name="l02118"></a>02118             sinfo_new_destroy_vector ( half_buffer ) ;
-<a name="l02119"></a>02119             cpl_free( xdat ) ;
-<a name="l02120"></a>02120             cpl_free( wdat ) ;
-<a name="l02121"></a>02121             cpl_free( mpar ) ;
-<a name="l02122"></a>02122         }
-<a name="l02123"></a>02123         sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l02124"></a>02124     }
-<a name="l02125"></a>02125         
-<a name="l02126"></a>02126     cpl_free( sinfo_edge ) ;
-<a name="l02127"></a>02127     cpl_free( pos_row ) ;
-<a name="l02128"></a>02128     cpl_free( edgeclean ) ;
-<a name="l02129"></a>02129     cpl_free( dummyedge ) ;
-<a name="l02130"></a>02130     cpl_free( pos_rowclean ) ;
-<a name="l02131"></a>02131     cpl_free( position );
-<a name="l02132"></a>02132     <span class="keywordflow">return</span> 0 ;
-<a name="l02133"></a>02133 }
-<a name="l02134"></a>02134 
-<a name="l02163"></a>02163 <span class="keywordtype">int</span> 
-<a name="l02164"></a><a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb">02164</a> <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz_with_estimate</a> ( cpl_image   * lineImage, 
-<a name="l02165"></a>02165                                 <span class="keywordtype">float</span>     ** slit_pos,
-<a name="l02166"></a>02166                                 <span class="keywordtype">int</span>          box_length,
-<a name="l02167"></a>02167                                 <span class="keywordtype">float</span>        y_box,
-<a name="l02168"></a>02168                                 <span class="keywordtype">float</span>        diff_tol,
-<a name="l02169"></a>02169                     <span class="keywordtype">int</span>          low_pos,
-<a name="l02170"></a>02170                     <span class="keywordtype">int</span>          high_pos )
-<a name="l02171"></a>02171 {
-<a name="l02172"></a>02172     <span class="keywordtype">int</span>*     position=NULL ;
-<a name="l02173"></a>02173     Vector * box_buffer ;
-<a name="l02174"></a>02174     Vector * in_buffer ;
-<a name="l02175"></a>02175     <span class="keywordtype">int</span>   found_row ;
-<a name="l02176"></a>02176     <span class="keywordtype">int</span>   row, col ;
-<a name="l02177"></a>02177     <span class="keywordtype">int</span>   col_first, col_last ;
-<a name="l02178"></a>02178     <span class="keywordtype">int</span>   row_first, row_last ;
-<a name="l02179"></a>02179     <span class="keywordtype">int</span>   i, j, m, n ;
-<a name="l02180"></a>02180     <span class="keywordtype">int</span>   init1 ;
-<a name="l02181"></a>02181     <span class="keywordtype">int</span>   left_right ;
-<a name="l02182"></a>02182     <span class="keywordtype">int</span>   n_buf, shift ;
-<a name="l02183"></a>02183     <span class="keywordtype">int</span>   slit_length ;
-<a name="l02184"></a>02184     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l02185"></a>02185     <span class="keywordtype">int</span>   numpar, its ;
-<a name="l02186"></a>02186     <span class="keywordtype">int</span>   * mpar ;
-<a name="l02187"></a>02187     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l02188"></a>02188     <span class="keywordtype">float</span> tol, lab ;
-<a name="l02189"></a>02189     <span class="keywordtype">float</span> fitpar[NPAR] ;
-<a name="l02190"></a>02190     <span class="keywordtype">float</span> dervpar[NPAR] ;
-<a name="l02191"></a>02191     <span class="keywordtype">float</span> minval, maxval ;
-<a name="l02192"></a>02192     <span class="keywordtype">float</span> pos ;
-<a name="l02193"></a>02193     <span class="keywordtype">float</span> new_pos ;
-<a name="l02194"></a>02194     <span class="keywordtype">int</span>   slitposition[SLITLENGTH] ;
-<a name="l02195"></a>02195     pixelvalue rowpos[SLITLENGTH] ;
-<a name="l02196"></a>02196 
-<a name="l02197"></a>02197     <span class="keywordtype">int</span> ilx=0;
-<a name="l02198"></a>02198     <span class="keywordtype">int</span> ily=0;
-<a name="l02199"></a>02199     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02200"></a>02200 
-<a name="l02201"></a>02201     slit_length = SLITLENGTH ; <span class="comment">/* this setting is too much 64 */</span>
-<a name="l02202"></a>02202     slit_length = N_SLITLETS ; <span class="comment">/* this setting is better: 32 */</span>
-<a name="l02203"></a>02203 
-<a name="l02204"></a>02204     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l02205"></a>02205     {
-<a name="l02206"></a>02206         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;
-<a name="l02207"></a>02207         <span class="keywordflow">return</span> -1 ;
-<a name="l02208"></a>02208     }
-<a name="l02209"></a>02209 
-<a name="l02210"></a>02210     <span class="keywordflow">if</span> ( NULL == slit_pos )
-<a name="l02211"></a>02211     {
-<a name="l02212"></a>02212         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;
-<a name="l02213"></a>02213         <span class="keywordflow">return</span> -1 ;
-<a name="l02214"></a>02214     }
-<a name="l02215"></a>02215 
-<a name="l02216"></a>02216     <span class="keywordflow">if</span> ( box_length < 4 ||
-<a name="l02217"></a>02217          box_length > 2*slit_length )
-<a name="l02218"></a>02218     {
-<a name="l02219"></a>02219         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;
-<a name="l02220"></a>02220         <span class="keywordflow">return</span> -1 ;
-<a name="l02221"></a>02221     }
-<a name="l02222"></a>02222 
-<a name="l02223"></a>02223     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )
-<a name="l02224"></a>02224     {
-<a name="l02225"></a>02225         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;
-<a name="l02226"></a>02226         <span class="keywordflow">return</span> -1 ;
-<a name="l02227"></a>02227     }
-<a name="l02228"></a>02228     <span class="keywordflow">if</span> ( diff_tol <= 0. )
-<a name="l02229"></a>02229     {
-<a name="l02230"></a>02230         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong diff_tol given!"</span> ) ;
-<a name="l02231"></a>02231         <span class="keywordflow">return</span> -1 ;
-<a name="l02232"></a>02232     }
-<a name="l02233"></a>02233 
-<a name="l02234"></a>02234     ilx=cpl_image_get_size_x(lineImage);
-<a name="l02235"></a>02235     ily=cpl_image_get_size_y(lineImage);
-<a name="l02236"></a>02236     pidata=cpl_image_get_data_float(lineImage);
-<a name="l02237"></a>02237 
-<a name="l02238"></a>02238     <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || 
-<a name="l02239"></a>02239          high_pos <= 0 || high_pos > ily )
-<a name="l02240"></a>02240     {
-<a name="l02241"></a>02241         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;
-<a name="l02242"></a>02242         <span class="keywordflow">return</span> -1 ;
-<a name="l02243"></a>02243     }
-<a name="l02244"></a>02244 
-<a name="l02245"></a>02245     <span class="comment">/* now search for the maximum between the given positions for each col */</span>
-<a name="l02246"></a>02246     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02247"></a>02247     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02248"></a>02248     {
-<a name="l02249"></a>02249         found_row = -1 ;
-<a name="l02250"></a>02250         maxval = -FLT_MAX ;
-<a name="l02251"></a>02251     <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )
-<a name="l02252"></a>02252     {
-<a name="l02253"></a>02253         <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )
-<a name="l02254"></a>02254             {
-<a name="l02255"></a>02255         maxval = pidata[col+row*ilx] ;
-<a name="l02256"></a>02256                 found_row = row ;
-<a name="l02257"></a>02257         }
-<a name="l02258"></a>02258     }
-<a name="l02259"></a>02259     <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )
-<a name="l02260"></a>02260     {
-<a name="l02261"></a>02261             position[col] = found_row ;
-<a name="l02262"></a>02262         }
-<a name="l02263"></a>02263     <span class="keywordflow">else</span>
-<a name="l02264"></a>02264     {
-<a name="l02265"></a>02265         position[col] = 0 ;
-<a name="l02266"></a>02266         }
-<a name="l02267"></a>02267     }
-<a name="l02268"></a>02268     
-<a name="l02269"></a>02269     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l02270"></a>02270 <span class="comment">     * now go through the slitlets, search along each column within a box with </span>
-<a name="l02271"></a>02271 <span class="comment">     * half width y_box the maximum value and store these found values in a </span>
-<a name="l02272"></a>02272 <span class="comment">     * buffer</span>
-<a name="l02273"></a>02273 <span class="comment">     */</span>
-<a name="l02274"></a>02274     <span class="keywordflow">for</span> ( j = 0 ; j < slit_length ; j++ )
-<a name="l02275"></a>02275     {
-<a name="l02276"></a>02276         <span class="comment">/* now go through the columns and determine the slitlet positions by</span>
-<a name="l02277"></a>02277 <span class="comment">         * calculating the median of the found positions </span>
-<a name="l02278"></a>02278 <span class="comment">         */</span>
-<a name="l02279"></a>02279         n = 0 ;
-<a name="l02280"></a>02280         
-<a name="l02281"></a>02281         <span class="keywordflow">for</span> ( col = sinfo_new_nint(slit_pos[j][0])+ 1 ; 
-<a name="l02282"></a>02282               col < sinfo_new_nint(slit_pos[j][1]) -1 ; col++ )
-<a name="l02283"></a>02283         {
-<a name="l02284"></a>02284             rowpos[n] = (pixelvalue)position[col] ;
-<a name="l02285"></a>02285             n++ ;
-<a name="l02286"></a>02286         }
-<a name="l02287"></a>02287 
-<a name="l02288"></a>02288         slitposition[j] = (int)sinfo_new_median(rowpos, n) ;
-<a name="l02289"></a>02289         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )
-<a name="l02290"></a>02290         {
-<a name="l02291"></a>02291             init1 = 0 ;
-<a name="l02292"></a>02292             col_first = sinfo_new_nint( slit_pos[j][left_right] ) - 
-<a name="l02293"></a>02293                                         box_length/2 ;
-<a name="l02294"></a>02294             col_last  = sinfo_new_nint( slit_pos[j][left_right] ) + 
-<a name="l02295"></a>02295                                         box_length/2 ;
-<a name="l02296"></a>02296             <span class="keywordflow">if</span> ( col_first < 0 )
-<a name="l02297"></a>02297             {
-<a name="l02298"></a>02298                 col_first = 0 ;
-<a name="l02299"></a>02299                 init1 = 1 ;
-<a name="l02300"></a>02300             }
-<a name="l02301"></a>02301             <span class="keywordflow">if</span> ( col_last > ilx )
-<a name="l02302"></a>02302             {
-<a name="l02303"></a>02303                 col_last = ilx ;
-<a name="l02304"></a>02304                 init1 = 1 ;
-<a name="l02305"></a>02305             }
-<a name="l02306"></a>02306             <span class="keywordflow">if</span> ( col_last - col_first <= 0 )
-<a name="l02307"></a>02307             {
-<a name="l02308"></a>02308                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" first and last column wrong!"</span> ) ;
-<a name="l02309"></a>02309                 <span class="keywordflow">return</span> -1 ;
-<a name="l02310"></a>02310             }
-<a name="l02311"></a>02311             box_buffer = sinfo_new_vector( col_last - col_first ) ;
-<a name="l02312"></a>02312             m = 0 ;
-<a name="l02313"></a>02313 
-<a name="l02314"></a>02314 
-<a name="l02315"></a>02315             <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02316"></a>02316             {
-<a name="l02317"></a>02317                 <span class="keywordflow">for</span>( col = col_first ; col < col_last ; col++ )
-<a name="l02318"></a>02318                 {
-<a name="l02319"></a>02319                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;
-<a name="l02320"></a>02320                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;
-<a name="l02321"></a>02321                     <span class="keywordflow">if</span> ( row_first < 0 )
-<a name="l02322"></a>02322                     {
-<a name="l02323"></a>02323                         row_first = 0 ;
-<a name="l02324"></a>02324                     }
-<a name="l02325"></a>02325                     <span class="keywordflow">if</span> ( row_last >= ily  )
-<a name="l02326"></a>02326                     {
-<a name="l02327"></a>02327                         row_last = ily - 1 ;
-<a name="l02328"></a>02328                     }
-<a name="l02329"></a>02329                     maxval = -FLT_MAX ;
-<a name="l02330"></a>02330                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )
-<a name="l02331"></a>02331                     {
-<a name="l02332"></a>02332                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l02333"></a>02333                         {
-<a name="l02334"></a>02334                             maxval = pidata[col + ilx*row] ;
-<a name="l02335"></a>02335                         }
-<a name="l02336"></a>02336                     }
-<a name="l02337"></a>02337                     box_buffer->data[m] = maxval ;
-<a name="l02338"></a>02338                     m++ ;
-<a name="l02339"></a>02339                 }
-<a name="l02340"></a>02340 
-<a name="l02341"></a>02341             }
-<a name="l02342"></a>02342             <span class="keywordflow">else</span> 
-<a name="l02343"></a>02343             {
-<a name="l02344"></a>02344 
-<a name="l02345"></a>02345                 <span class="keywordflow">for</span>( col = col_last-1 ; col >= col_first ; col-- )
-<a name="l02346"></a>02346                 {
-<a name="l02347"></a>02347                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;
-<a name="l02348"></a>02348                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;
-<a name="l02349"></a>02349                     <span class="keywordflow">if</span> ( row_first < 0 )
-<a name="l02350"></a>02350                     {
-<a name="l02351"></a>02351                         row_first = 0 ;
-<a name="l02352"></a>02352                     }
-<a name="l02353"></a>02353                     <span class="keywordflow">if</span> ( row_last >= ily  )
-<a name="l02354"></a>02354                     {
-<a name="l02355"></a>02355                         row_last = ily - 1 ;
-<a name="l02356"></a>02356                     }
-<a name="l02357"></a>02357                     maxval = -FLT_MAX ;
-<a name="l02358"></a>02358                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )
-<a name="l02359"></a>02359                     {
-<a name="l02360"></a>02360                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )
-<a name="l02361"></a>02361                         {
-<a name="l02362"></a>02362                             maxval = pidata[col + ilx*row] ;
-<a name="l02363"></a>02363                         }
-<a name="l02364"></a>02364                     }
-<a name="l02365"></a>02365                     box_buffer->data[m] = maxval ;
-<a name="l02366"></a>02366                     m++ ;
-<a name="l02367"></a>02367                 }
-<a name="l02368"></a>02368 
-<a name="l02369"></a>02369             }
-<a name="l02370"></a>02370 
-<a name="l02371"></a>02371             xdat=(<span class="keywordtype">float</span> *) cpl_calloc(box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>) );
-<a name="l02372"></a>02372             wdat=(<span class="keywordtype">float</span> *) cpl_calloc(box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>) );
-<a name="l02373"></a>02373             mpar=(<span class="keywordtype">int</span> *)   cpl_calloc(NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l02374"></a>02374 
-<a name="l02375"></a>02375             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l02376"></a>02376             minval =  FLT_MAX ;
-<a name="l02377"></a>02377             maxval = -FLT_MAX ;
-<a name="l02378"></a>02378 
-<a name="l02379"></a>02379             <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )
-<a name="l02380"></a>02380             {
-<a name="l02381"></a>02381                 xdat[i] = i ;
-<a name="l02382"></a>02382                 wdat[i] = 1.0 ;
-<a name="l02383"></a>02383                 <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )
-<a name="l02384"></a>02384                 {
-<a name="l02385"></a>02385                     minval = box_buffer -> data[i] ;
-<a name="l02386"></a>02386                 }
-<a name="l02387"></a>02387                 <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )
-<a name="l02388"></a>02388                 {
-<a name="l02389"></a>02389                     maxval = box_buffer -> data[i] ;
-<a name="l02390"></a>02390                 }
-<a name="l02391"></a>02391             }
-<a name="l02392"></a>02392             fitpar[0] = minval ;
-<a name="l02393"></a>02393             fitpar[1] = maxval ; 
-<a name="l02394"></a>02394 
-<a name="l02395"></a>02395             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l02396"></a>02396 <span class="comment">             * if we have too few left background values (at the image edges)</span>
-<a name="l02397"></a>02397 <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span>
-<a name="l02398"></a>02398 <span class="comment">             * values in order to get a good fit</span>
-<a name="l02399"></a>02399 <span class="comment">             */</span>
-<a name="l02400"></a>02400             
-<a name="l02401"></a>02401   
-<a name="l02402"></a>02402             <span class="keywordflow">if</span> ( init1 == 1 )
-<a name="l02403"></a>02403             {
-<a name="l02404"></a>02404                 n_buf = box_buffer->n_elements + box_length/2 ;
-<a name="l02405"></a>02405                 in_buffer = sinfo_new_vector( n_buf ) ;     
-<a name="l02406"></a>02406                 <span class="keywordflow">for</span> ( i = 0 ; i < box_length/2 ; i++ )
-<a name="l02407"></a>02407                 {
-<a name="l02408"></a>02408                     in_buffer -> data[i] = minval ;
-<a name="l02409"></a>02409                 }
-<a name="l02410"></a>02410                 shift = 0 ;
-<a name="l02411"></a>02411                 <span class="keywordflow">for</span> ( i = box_length/2 ; i < n_buf ; i++ )
-<a name="l02412"></a>02412                 {
-<a name="l02413"></a>02413                     in_buffer -> data[i] = box_buffer -> data[shift] ;
-<a name="l02414"></a>02414                     shift++ ;
-<a name="l02415"></a>02415                 }
-<a name="l02416"></a>02416                 sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l02417"></a>02417                 box_buffer = sinfo_new_vector ( n_buf ) ;
-<a name="l02418"></a>02418                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )
-<a name="l02419"></a>02419                 {
-<a name="l02420"></a>02420                     box_buffer -> data[i] = in_buffer -> data[i] ;
-<a name="l02421"></a>02421                 }
-<a name="l02422"></a>02422                 sinfo_new_destroy_vector ( in_buffer ) ;
-<a name="l02423"></a>02423             }
-<a name="l02424"></a>02424 
-<a name="l02425"></a>02425             <span class="comment">/* determine the initial positions from the found values */</span>
-<a name="l02426"></a>02426             fitpar[2] = (float)box_buffer->n_elements/2.  ;
-<a name="l02427"></a>02427             fitpar[3] = 1. ;
-<a name="l02428"></a>02428 
-<a name="l02429"></a>02429             for ( i = 0 ; i < NPAR ; i++ )
-<a name="l02430"></a>02430             {
-<a name="l02431"></a>02431                 mpar[i] = 1 ;
-<a name="l02432"></a>02432                 dervpar[i] = 0. ;
-<a name="l02433"></a>02433             }
-<a name="l02434"></a>02434       
-<a name="l02435"></a>02435             xdim     = XDIMA ;
-<a name="l02436"></a>02436             ndat     = box_buffer->n_elements ;
-<a name="l02437"></a>02437             numpar   = NPAR ;
-<a name="l02438"></a>02438             tol      = TOLA ;
-<a name="l02439"></a>02439             lab      = LABA ;
-<a name="l02440"></a>02440             its      = ITSA ;
-<a name="l02441"></a>02441          
-<a name="l02442"></a>02442             <span class="comment">/* finally, do the least squares fit over the buffer data */</span>
-<a name="l02443"></a>02443             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, 
-<a name="l02444"></a>02444                                                  box_buffer -> data, 
-<a name="l02445"></a>02445                                                  wdat, &ndat, fitpar,
-<a name="l02446"></a>02446                                                  dervpar, mpar, &numpar, 
-<a name="l02447"></a>02447                                                  &tol, &its, &lab )) )
-<a name="l02448"></a>02448             { 
-<a name="l02449"></a>02449                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed, error "</span>
-<a name="l02450"></a>02450                                    <span class="stringliteral">"no.: %d in slitlet: %d\n"</span>, iters, j) ;
-<a name="l02451"></a>02451                 sinfo_new_destroy_vector(box_buffer) ;
-<a name="l02452"></a>02452                 cpl_free( xdat ) ;
-<a name="l02453"></a>02453                 cpl_free( wdat ) ;
-<a name="l02454"></a>02454                 cpl_free( mpar ) ;
-<a name="l02455"></a>02455                 continue ;
-<a name="l02456"></a>02456             }
-<a name="l02457"></a>02457 
-<a name="l02458"></a>02458         <span class="keywordflow">if</span> ( fitpar[3] <=0. )
-<a name="l02459"></a>02459             { 
-<a name="l02460"></a>02460                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"fit failed due to negative width of "</span>
-<a name="l02461"></a>02461                                    <span class="stringliteral">"boltzmann function in slitlet: %d\n"</span>, j) ;
-<a name="l02462"></a>02462                 sinfo_new_destroy_vector(box_buffer) ;
-<a name="l02463"></a>02463                 cpl_free( xdat ) ;
-<a name="l02464"></a>02464                 cpl_free( wdat ) ;
-<a name="l02465"></a>02465                 cpl_free( mpar ) ;
-<a name="l02466"></a>02466                 continue ;
-<a name="l02467"></a>02467             }
-<a name="l02468"></a>02468             pos = fitpar[2] ;
-<a name="l02469"></a>02469             <span class="keywordflow">if</span> ( init1 == 1 )
-<a name="l02470"></a>02470             {
-<a name="l02471"></a>02471                 pos -= (float)box_length/2. ;
-<a name="l02472"></a>02472             }
-<a name="l02473"></a>02473 
-<a name="l02474"></a>02474             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l02475"></a>02475 <span class="comment">             * now compute the real slit positions using the guess positions</span>
-<a name="l02476"></a>02476 <span class="comment">             * if the fit did not work the guess positions are taken</span>
-<a name="l02477"></a>02477 <span class="comment">             * the same is done if the deviations are too big.</span>
-<a name="l02478"></a>02478 <span class="comment">             */</span>
-<a name="l02479"></a>02479             <span class="keywordflow">if</span> ( pos != 0. )  
-<a name="l02480"></a>02480             {
-<a name="l02481"></a>02481                 <span class="keywordflow">if</span> ( left_right == 0 )
-<a name="l02482"></a>02482                 {
-<a name="l02483"></a>02483                     new_pos = (float)col_first + pos ;
-<a name="l02484"></a>02484                 }
-<a name="l02485"></a>02485                 <span class="keywordflow">else</span>
-<a name="l02486"></a>02486                 {
-<a name="l02487"></a>02487                     new_pos = (float)col_last-1 - pos ;
-<a name="l02488"></a>02488                 }
-<a name="l02489"></a>02489                 <span class="keywordflow">if</span> ( fabs(new_pos - slit_pos[j][left_right]) < diff_tol )
-<a name="l02490"></a>02490                 {
-<a name="l02491"></a>02491                     slit_pos[j][left_right] = new_pos ;
-<a name="l02492"></a>02492                 }
-<a name="l02493"></a>02493                 <span class="keywordflow">else</span>
-<a name="l02494"></a>02494                 {
-<a name="l02495"></a>02495                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" deviation bigger than tolerance,"</span>
-<a name="l02496"></a>02496                                        <span class="stringliteral">" take the estimated slitlet position "</span>
-<a name="l02497"></a>02497                                        <span class="stringliteral">" in slitlet: %d\n"</span>, j) ;
-<a name="l02498"></a>02498                 }
-<a name="l02499"></a>02499             }
-<a name="l02500"></a>02500 
-<a name="l02501"></a>02501             cpl_free( xdat ) ;
-<a name="l02502"></a>02502             cpl_free( wdat ) ;
-<a name="l02503"></a>02503             cpl_free( mpar ) ;
-<a name="l02504"></a>02504             sinfo_new_destroy_vector ( box_buffer ) ;
-<a name="l02505"></a>02505 
-<a name="l02506"></a>02506         }
-<a name="l02507"></a>02507     }
-<a name="l02508"></a>02508     cpl_free(position);
-<a name="l02509"></a>02509     <span class="keywordflow">return</span> 0 ;
-<a name="l02510"></a>02510 }
-<a name="l02511"></a>02511                               
-<a name="l02512"></a>02512 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_boltzmann.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  27/02/01  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        new_boltzmann.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        routines to determine the absolute positions of the slitlets out</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*        of an emission line frame</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*   #include "absolute.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   1) float sinfo_new_boltz ( float * xdat, float * parlist )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   2) void sinfo_new_boltz_deriv( float * xdat, float * parlist, </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   float * dervs )</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   3) static int sinfo_new_inv_mat (void)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*   4) static void sinfo_new_get_mat ( float * xdat,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                            int   * xdim,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                            float * ydat,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*                            float * wdat,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*                            int   * ndat,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                            float * fpar,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                            float * epar,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                            int   * npar )</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*   5) static int sinfo_new_get_vec ( float * xdat,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                           int   * xdim,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                           float * ydat,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                           float * wdat,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                           int   * ndat,</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*                           float * fpar,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                           float * epar,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                           int   * npar )</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*   6) int sinfo_new_lsqfit ( float * xdat,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                   int   * xdim,</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*                   float * ydat,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                   float * wdat,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                   int   * ndat,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                   float * fpar,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*                   float * epar,</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*                   int   * mpar,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                   int   * npar,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                   float * tol ,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                   int   * its ,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                   float * lab  )</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*   7) int sinfo_new_fit_slits_boltz( cpl_image   * lineImage, </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                         FitParams ** par,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                         float     ** slit_pos,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*                         int          box_length,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*                         float        y_box,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                         float        diff_tol )</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*   8) int sinfo_new_fit_slits_boltz_single_line ( cpl_image   * lineImage, </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                                    float     ** slit_pos,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*                                    int          box_length,</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                                    float        y_box,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*                                int          low_pos,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*                                    int          high_pos )</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*   9) int sinfo_new_fit_slits_boltz_with_estimate ( cpl_image   * lineImage, </span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*                                      float     ** slit_pos,</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*                                      int          box_length,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*                                      float        y_box,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                                      float        diff_tol,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*                                      int          low_pos,</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*                           int          high_pos )</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*   1) calculates the value of a Boltzmann function with parameters </span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*      parlist at the position xdat </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*   2) calculates the partial derivatives for a Boltzmann function with</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*      parameters parlist at position xdat </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*      Numerische Mathematik, 1. Teil.</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*   4) builds the sinfo_matrix </span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*      built by get_mat(), we only have to rescale it for the </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*      the diagonal gets the value 1 + labda.</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*      the correction sinfo_vector.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*   6) this is a routine for making a least-squares fit of a</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*      function to a set of data points. The method used is</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*      This method is a mixture of the steepest descent method </span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*      and the Taylor method.</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*   7) fits the beginning and end position of the slitlets</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*      by using non-linear least square fitting of Boltzmann function</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*      by the brightest emission lines. To achieve this, the fit</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*      parameters are used to find the brightest emission line</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*      and to get its position for each column.</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*      The least squares fit is done by using a box smaller than</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*      the size of two slitlets</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*   8) fits the beginning and end position of the slitlets</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*      by using non-linear least square fitting of a Boltzmann function</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      user given positions.</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      The least squares fit is done by using a box smaller than</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*      the size of two slitlets </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*   9) fits the beginning and end position of the slitlets</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*      by using non-linear least square fitting of a Boltzmann function</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*      fits a Boltzmann function to the slitlet edges exposed and indicated</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*      by the brightest emission lines. The slitlet is searched within</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*      user given positions.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*      The least squares fit is done by using a box smaller than</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*      the size of two slitlets </span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">#include "sinfo_absolute.h"</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment"> *                                 Defines</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">#define XDIMA         1         </span><span class="comment">/* dimension of the x values */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">#define TOLA          0.001     </span><span class="comment">/* fitting tolerance */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span><span class="preprocessor">#define LABA          0.1       </span><span class="comment">/* labda parameter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span><span class="preprocessor">#define ITSA          200       </span><span class="comment">/* maximum number of iterations */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor"></span><span class="preprocessor">#define LABFACA       10.0      </span><span class="comment">/* labda step factor */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMAXA       1.0e+10   </span><span class="comment">/* maximum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMINA       1.0e-10   </span><span class="comment">/* minimum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor"></span><span class="preprocessor">#define NPAR          4         </span><span class="comment">/* number of fit parameters */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment"> *                                    Local variables</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment"> *                    Functions private to this module</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                       <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                       <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                       <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                       <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                       <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                       <span class="keywordtype">float</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">                      int   * npar*/</span> ) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                      <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                      <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                      <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                      <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                      <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                      <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                      <span class="keywordtype">int</span>   * npar ) ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1">  245</a></span> <span class="keywordtype">float</span> <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position xdat...">sinfo_new_boltz</a> ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">f [...]
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordtype">float</span> return_value ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">/* now build the boltzman function out of the parameters */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     return_value = </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     (parlist[0] - parlist[1]) / (1 + exp(( xdat[0] - parlist[2] ) / </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>      parlist[3])) + parlist[1] ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordflow">return</span> return_value ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>        </div>
+<div class="line"><a name="l00278"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30">  278</a></span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat...">sinfo_new_boltz_deriv</a>( <span class="keywordtype">float</span> * xdat, <span class= [...]
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordtype">float</span> subst ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>  </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     subst = (xdat[0] - parlist[2]) / parlist[3] ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     dervs[0] = 1. / ( 1. + exp(subst) ) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     dervs[1] = -1. / ( 1. + exp(subst) ) + 1. ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     dervs[2] = ( (parlist[0] - parlist[1]) / parlist[3] * exp(subst) ) /</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                ( (1. + exp(subst)) * (1. + exp(subst)) ) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     dervs[3] = ( (parlist[0] - parlist[1]) * (xdat[0] - parlist[2]) /</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                (parlist[3]*parlist[3]) * exp(subst) ) /</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                ( (1. + exp(subst)) * (1. + exp(subst)) ) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_inv_mat (<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordtype">double</span> even ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordtype">double</span> hv[NPAR] ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordtype">double</span> mjk ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordtype">double</span> rowmax ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">int</span> evin ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordtype">int</span> i, j, k, row ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordtype">int</span> per[NPAR] ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>    </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="comment">/* set permutation array */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         per[i] = i ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         <span class="comment">/* determine largest element of a row */</span>                                </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         rowmax = fabs ( matrix2[j][j] ) ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         row = j ;                         </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>             {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                 rowmax = fabs( matrix2[i][j] ) ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                 row = i ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="comment">/* determinant is zero! */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>             <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         <span class="comment">/* if the largest element is not on the diagonal, then permutate rows */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordflow">if</span> ( row > j )</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>             {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                 even = matrix2[j][k] ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                 matrix2[j][k] = matrix2[row][k] ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                 matrix2[row][k] = even ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>             }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>             <span class="comment">/* keep track of permutation */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>             evin = per[j] ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>             per[j] = per[row] ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>             per[row] = evin ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         }</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         <span class="comment">/* modify column */</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         even = 1.0 / matrix2[j][j] ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>             matrix2[i][j] *= even ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         matrix2[j][j] = even ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>             }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>             {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>             }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>             {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>             }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="comment">/* finally, repermute the columns */</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             hv[per[k]] = matrix2[i][k] ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>             matrix2[i][k] = hv[k] ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="comment">/* all is well */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_new_get_mat ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                       <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                       <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                       <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                       <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                       <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                       <span class="keywordtype">float</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">                      int   * npar*/</span> )</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordtype">double</span> wd ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     <span class="keywordtype">double</span> yd ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="keywordtype">int</span> i, j, n ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ ) <span class="comment">/* zero sinfo_matrix only </span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">                                       on and below diagonal */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>             matrix1[j][i] = 0.0 ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     <span class="comment">/* loop through data points */</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         wn = wdat[n] ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             yd = ydat[n] - <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position xdat...">sinfo_new_boltz</a>( &xdat[(*xdim) * n], fpar ) ;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             <a class="code" href="group__sinfo__boltzmann.html#ga72b3c6f0c971fb402bd68c8d0fcf5e30" title="calculates the partial derivatives for a Boltzmann function with parameters parlist at position xdat...">sinfo_new_boltz_deriv</a>( &xdat[(*xdim) * n], fpar, epar ) ;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>             {</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                 {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                     matrix1[j][i] += epar[parptr[i]] * wd ;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                 }</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     }                   </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> }  </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                 </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_new_get_vec ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                      <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                      <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                      <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                      <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                      <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                      <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                      <span class="keywordtype">int</span>   * npar )</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">double</span> dj ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordtype">double</span> dy ;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordtype">double</span> mii ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordtype">double</span> mji ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keywordtype">double</span> mjj ;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="keywordtype">int</span> i, j, n, r ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>         }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         mjj = sqrt( mjj ) ;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             matrix2[i][j] = matrix2[j][i] = mji ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     }    </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     <span class="keywordflow">if</span> ( (r = sinfo_new_inv_mat()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         epar[i] = fpar[i] ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="comment">/* loop to calculate correction sinfo_vector */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     {</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         dj = 0.0 ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         {</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         }</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         mjj = sqrt ( mjj ) ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         {</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             mii = matrix1[i][i] ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>             <span class="keywordflow">if</span> ( mii <= 0.0 )</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>             {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>             }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>             mii = sqrt( mii ) ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             dj += vec[i] * matrix2[j][i] / mjj / mii ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }    </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>  </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="comment">/* loop through the data points */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>         wn = wdat[n] ;               <span class="comment">/* get weight */</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>             dy = ydat[n] - <a class="code" href="group__sinfo__boltzmann.html#ga858ad4d37da835f1ff4740d0f23920c1" title="calculates the value of a Boltzmann function with parameters parlist at the position xdat...">sinfo_new_boltz</a>( &xdat[(*xdim) * n], epar) ;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>             chi1 += wdat[n] * dy * dy ;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         }</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> }   </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5">  627</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a> ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>              <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>              <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>              <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>              <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>              <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>              <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>              <span class="keywordtype">int</span>   * mpar,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>              <span class="keywordtype">int</span>   * npar,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>              <span class="keywordtype">float</span> * tol ,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>              <span class="keywordtype">int</span>   * its ,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>              <span class="keywordtype">float</span> * lab  )</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> {</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordtype">int</span> i, n, r ;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     itc   = 0 ;                    <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     found = 0 ;                    <span class="comment">/* reset */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     }</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         tolerance = *tol ;                <span class="comment">/* tolerance */</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     labda = fabs( *lab ) * LABFACA ;   <span class="comment">/* start value for mixing parameter */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     {</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">if</span> ( mpar[i] )</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>             {</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>             }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     {</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     }</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         {</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>             nuse ++ ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordflow">if</span> ( nfree >= nuse )</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     {</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>         <span class="comment">/* initialize fpar array */</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>         sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>         r =  sinfo_new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>             <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>             }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>                                      sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         }</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     {</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>         <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="comment">         * the sinfo_matrix and calculate the correction sinfo_vector. </span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="comment">         * In the inner loop</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="comment">         * better solution than the previous one. If so, we leave the inner </span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="comment">         * loop</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="comment">         * else we increase labda ( give more weight to the steepest descent </span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="comment">         * method) calculate the correction sinfo_vector and check again. </span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="comment">         * After the inner loop</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         {      </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>             {</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                 <span class="keywordflow">return</span> -4 ;               </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>             }</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>             </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> <span class="comment">             * here we decrease labda since we may assume that each iteration</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="comment">             * brings us closer to the answer.</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>             <span class="keywordflow">if</span> ( labda > LABMINA )</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>             {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>                 labda = labda / LABFACA ;         <span class="comment">/* decrease labda */</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             }</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>             r = sinfo_new_get_vec ( xdat, xdim, ydat, wdat, </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                                     ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             {</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                 <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>             }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>             {</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">                 * The next statement is based on experience, not on the </span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="comment">                 * mathematics of the problem. It is assumed that we have </span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">                 * reached convergence when the pure steepest descent method </span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> <span class="comment">                 * does not produce a better solution.</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                 <span class="keywordflow">if</span> ( labda > LABMAXA )    <span class="comment">/* assume solution found */</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>                 {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>                     break ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                 }</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                 labda = labda * LABFACA ;  <span class="comment">/* increase mixing parameter */</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                 r = sinfo_new_get_vec ( xdat, xdim, ydat, wdat, </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                                         ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>                 {</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>                 }</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>             }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             <span class="keywordflow">if</span> ( labda <= LABMAXA )        <span class="comment">/* save old parameters */</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>                 {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>                     fpar[i] = epar[i] ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                 }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>             }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>                  (labda > LABMAXA) )</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                 <span class="comment">/*---------------------------------------------------------</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">                 * using the pure Taylor method because we are very close to </span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">                 * the real solution.</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                 labda = LABMINA ;              <span class="comment">/* for Taylor solution */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                 sinfo_new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*,npar*/</span>);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                 r = sinfo_new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>                 {</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>                 }</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>                 {</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>                 }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>                 {</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>                     {</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>                         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>                     }</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                                              sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                 }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                 found = 1 ;                  <span class="comment">/* we found a solution */</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>             }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         }</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> }</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> </div>
+<div class="line"><a name="l00865"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d">  865</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz</a> ( cpl_image   * lineImage, </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                     FitParams ** par,</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                     <span class="keywordtype">float</span>     ** slit_pos,</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                     <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                     <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                     <span class="keywordtype">float</span>        diff_tol )</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> {</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <span class="keywordtype">float</span>* position=NULL ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     Vector * half_buffer ;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     Vector * in_buffer ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     <span class="keywordtype">float</span> max_intensity ;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     <span class="keywordtype">float</span> row_pos ;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordtype">int</span>   row, col ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordtype">int</span>   i, j, k, m, n, ed ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     <span class="keywordtype">int</span>   found, init1 ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="keywordtype">int</span>   line ; </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <span class="keywordtype">int</span>   nel, n_right, left_right ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordtype">int</span>   n_buf, edge_ind, shift ;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordtype">int</span>   column ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     <span class="keywordtype">int</span>   agreed ;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="keywordtype">int</span>   bad_line ;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     <span class="keywordtype">float</span> min ;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     <span class="keywordtype">float</span> pos, last_pos ;</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     <span class="keywordtype">int</span> old_col=0;</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     <span class="keywordtype">int</span> old_pos=0;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     slit_length = SLITLENGTH ;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     {</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     }</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     {</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line fit parameters given!"</span> ) ;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     }</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordflow">if</span> ( NULL == slit_pos )</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     {</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         <span class="keywordflow">return</span> -3 ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     }</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="keywordflow">if</span> ( box_length <  4 ||</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>          box_length > 2*slit_length )</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     {</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         <span class="keywordflow">return</span> -4 ;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     }</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     <span class="keywordflow">if</span> ( y_box <= 0.  || y_box > 6. )</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     {</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>         <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     }</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="keywordflow">if</span> ( diff_tol < 1. )</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     {</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" diff_tol too small!"</span> ) ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>  </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     <span class="comment">/* allocate memory for the edges and the row positon of the slitlets */</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length-1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( 3*slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( slit_length, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     <span class="comment">/* -----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> <span class="comment">     * go through the first image columns and the fit parameters and find the </span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> <span class="comment">       line with the highest intensity </span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     agreed = -1 ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     bad_line = -1 ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordflow">while</span>( agreed == -1 )</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>         found = -1 ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>         max_intensity = -FLT_MAX ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>         <span class="keywordflow">for</span> ( col = 0 ; col < slit_length ; col++ )</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         {</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>             {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>                 <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line != bad_line )</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>                 {</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[0] > max_intensity )</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>                     {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>                         <span class="keywordflow">if</span> ( par[i]->fit_par[1] >= 1. && </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                              par[i]->fit_par[2] > 0. )</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>                         {</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>                             max_intensity = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>                             found = i ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>                         }</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>                     }</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                 }</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>             }  </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         }</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="comment">         * check if the found line is usable and if the neighbouring line </span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> <span class="comment">         * have intensity on near rows in neighbouring slitlets </span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         line    = par[found]->line ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         column  = par[found]->column ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         row_pos = par[found]->fit_par[2] ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         <span class="keywordflow">if</span> ( found >= 0 && max_intensity > 0. )</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         {</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             {</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                 <span class="keywordflow">if</span> ( par[i]->line == line-1 && </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>                      par[i]->column == column + slit_length )</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>                 {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>                     <span class="keywordflow">if</span> ( par[i]->fit_par[2] <= (row_pos + y_box) &&</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>                          par[i]->fit_par[2] >= (row_pos - y_box) )</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>                     {</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>                         bad_line = line ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>                     } </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>                 }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>             }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>             <span class="keywordflow">if</span> ( bad_line != line )</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>             {</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                 agreed = 1 ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>                 break ;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         }</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>             cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>             cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>             cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         }    </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     }</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     <span class="keywordflow">if</span> ( agreed == -1 )</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no emission line found in the first image columns"</span>) ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     }    </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     n  = 0 ;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     ed = 0 ;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="comment">/* was for ( col = 0 ; col < ilx - slit_length/2 ; col++ ) */</span></div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordflow">for</span> ( col = slit_length/2 ; col < ilx - slit_length/2 ; col++ )</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     {</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       {   </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment">              printf("p1=%f p2=%f p3=%f\n",</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">              par[i]->fit_par[0],par[i]->fit_par[1],par[i]->fit_par[2]);</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>             <span class="keywordflow">if</span> ( par[i]->column == col && par[i]->line == line )</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>             {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                 <span class="keywordflow">if</span> ( par[i]->fit_par[0] > 0.  && </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>                      par[i]->fit_par[1] >= 1. && </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                      par[i]->fit_par[2] > 0. )</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                 {</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>                     position[n] = par[i]->fit_par[2] ;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>                     old_pos=position[n];</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>                     <span class="keywordflow">if</span> ( n > 0 && </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>                          fabs(position[n] - position[n-1]) > y_box && </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>                          (col-old_col) > (slit_length-SLIT_POS_ERR) )</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>                     {</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>               old_col=col;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>               sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>               pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>                       <span class="comment">/* printf("sinfo_edge[%d]=%d , pos_row=%d\n",</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">                                 ed,sinfo_edge[ed],pos_row[ed]); */</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>               ed++ ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>               <span class="keywordflow">if</span> ( col >= ilx - slit_length - SLIT_POS_ERR ) {</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>               pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>               } </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((col-old_col) > </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>                                   (slit_length+SLIT_POS_ERR)) &&</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>                                   (col>120) ) {</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>               old_col=col;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>               sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>               pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>                       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"add1 slitlet edge[%d]=%d, pos_row=%d"</span>,</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>                      ed,sinfo_edge[ed],pos_row[ed]);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>               ed++ ;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>               <span class="keywordflow">if</span> ( col >= ilx - slit_length - SLIT_POS_ERR ) {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>               pos_row[ed] =  sinfo_new_nint( position[n] ) ;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>               } </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>             }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>                     n++ ;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>                 }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((col-old_col) > (slit_length+SLIT_POS_ERR)) && </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>                         (col>120) ) {</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>           <span class="comment">/*</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">              printf("check col=%d col-old_col=%d check=%d\n",</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">                     col,(col-old_col),(slit_length+SLIT_POS_ERR));</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment">          */</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>           position[n] = old_pos ;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>              </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>           old_col+=slit_length;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>           sinfo_edge[ed] = old_col; ; </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>           pos_row[ed] = sinfo_new_nint( position[n-1] ) ;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>           <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"added2 slitlet sinfo_edge[%d]=%d, pos_row=%d"</span>,</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>                   ed,sinfo_edge[ed],pos_row[ed]);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>           ed++ ;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>           <span class="keywordflow">if</span> ( old_col >= ilx - slit_length - SLIT_POS_ERR ) {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>         pos_row[ed] =  old_pos ;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>           }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>           n++;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>         }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     }</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">if</span> ( ed < (N_SLITLETS - 1) )</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     {</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough slitlets, found: %d"</span>, ed) ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     } </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     <span class="comment">/* printf("ed=%d\n",ed); */</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     {</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         <span class="keywordflow">if</span> ( i == ed )</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         {</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>             {</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="comment">/* printf("e(i-1)=%d e(i-2)=%d i=%d\n",</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> <span class="comment">                       edge[i-1], edge[i-2],i); */</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>                 dummyedge[i-1]   = -1 ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>             }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         {</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         }</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         {</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>             continue ;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>         }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>         <span class="keywordflow">if</span> ( i < ed )</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>         {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                  (sinfo_edge[i] - sinfo_edge[i-1]) > </div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>         <span class="comment">/* printf("e(i)=%d e(i-1)=%d i=%d\n",edge[i], edge[i-1],i); */</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>                 dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>             }</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>         }</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>         <span class="keywordflow">if</span> ( i+1 < ed && dummyedge[i] != -1 )</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>         {</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                  (sinfo_edge[i+1] - sinfo_edge[i]) > </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>             {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>         <span class="comment">/* printf("e(i+1)=%d e(i)=%d i=%d\n",edge[i+1], edge[i],i); */</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                 dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>             }</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>         }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     }</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     k = 0 ;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     {</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>         {</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>             k++ ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length -2*SLIT_LEN_ERR ) )</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>             {</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>             } </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         }</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     }</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="comment">    for ( i = 0 ; i < k ; i++ )</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment">      sinfo_msg_warning("%d %d", edgeclean[i], pos_rowclean[i]);</span></div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="keywordflow">if</span> ( k != N_SLITLETS - 1 )</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of clean slitlets found: %d"</span>, k+1) ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     } </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     margin = box_length / 2 ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="comment">/* ----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">     * now go through the slitlets, search along each column within a box with </span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> <span class="comment">     * half width y_box the maximum value and store these found values </span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> <span class="comment">     * in a buffer</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>      <span class="keywordflow">if</span>(</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>          ( (pos_rowclean[0]-sinfo_new_nint(y_box)) < 0 ) ||</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>          ( (pos_rowclean[0]+sinfo_new_nint(y_box)) >ily )</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>        ) {</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"pos_rowclean[0] <0 something wrong!"</span>) ;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>              cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>              cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>              cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>              cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>              cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>              <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     }</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>         m = 0 ;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>         {</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>             {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>                 {</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                     {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                     }</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                 }</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>                 m++ ;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>             }</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>         }</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>             {</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>                 {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>                     {</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>                     }</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>                 }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                 m++ ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>             }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>         }</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>         {</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>             {</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[k-2] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>                       row <= pos_rowclean[k-2] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>                 {</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>                     {</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>                     }</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>                 }</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>                 <span class="keywordflow">if</span>(maxval>0) box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         <span class="keywordflow">else</span> box_buffer->data[m] = 0;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>         m++ ;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>             }</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>         }</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>         <span class="comment">/* determine the minimum value in the box to get background1 </span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">           value for the sinfo_edge slitlets */</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>         min = FLT_MAX ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>         {</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] < min )</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>             {</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>                 min = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>             }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>         }</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>         { </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>             nel = 0 ;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>             {</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>                 nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>             }</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>             {</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>                 {</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>                     nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>                 }</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>                 {</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>                     nel = box_buffer -> n_elements / 2 + 1 ;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>                 }</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>             }</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> </div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>             <span class="comment">/* now split the buffer in the midth in a left and right </span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment">               part for fitting */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>             half_buffer = sinfo_new_vector( nel ) ;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>             {</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>                 {</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>                     half_buffer -> data[i] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>                 }</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>             }</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>             {</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>                 n_right = 0 ;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>                       i >= box_buffer -> n_elements - nel ; i-- )</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>                 {</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>                     half_buffer -> data[n_right] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>                     n_right++ ;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>                 }</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>             }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>             {</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                 {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                     minval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>                 }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>                 {</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>                     maxval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>                 }</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>             }</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> </div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>             fitpar[0] = minval ;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>             fitpar[1] = maxval ; </div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             <span class="comment">/* search for both positions of the half intensity </span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">               of the hat within the buffer */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>             init1 = -1 ; </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>             {</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>                 {</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>                     init1 = i ;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>                     break ;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>                 }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>             }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>             <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">             * if we have too few left background values (at the image edges)</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">             * values in order to get a good fit</span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>               </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>             edge_ind = 0 ;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>             <span class="keywordflow">if</span> ( init1 < 3 )</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>             {</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>                 n_buf = half_buffer->n_elements + margin ;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>                 in_buffer = sinfo_new_vector( n_buf ) ;     </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < margin ; i++ )</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>                 {</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>                     in_buffer -> data[i] = min ;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>                 }</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>                 shift = 0 ;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>                 <span class="keywordflow">for</span> ( i = margin ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>                 {</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>                     in_buffer -> data[i] = half_buffer -> data[shift] ;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>                     shift++ ;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                 }</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>                 sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>                 half_buffer = sinfo_new_vector ( n_buf ) ;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>                 {</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>                     half_buffer -> data[i] = in_buffer -> data[i] ;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>                 }</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>                 edge_ind = 1 ;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>                 init1 += margin ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>                 sinfo_new_destroy_vector ( in_buffer ) ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>             }</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>             <span class="keywordflow">if</span> ( init1 != -1 )</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>             {</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>                 fitpar[2] = (float)init1 ;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>             }</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>             fitpar[3] = 1. ;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>             {</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>             }</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>       </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>             ndat     = nel ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>             lab      = LABA ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>             its      = ITSA ;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>          </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>                                                  half_buffer -> data, </div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>                                                  wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>                                                  dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>                                                  &tol, &its, &lab )) )</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>             { </div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>                 <span class="comment">/* if the fit doesn't succeed the initial values are taken */</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed,"</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>                                    <span class="stringliteral">" error no.: %d in slitlet: %d"</span>, iters, j) ;</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>                 fitpar[2] = (float)init1 ;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>             }</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> </div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>             pos = fitpar[2] ;</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>             <span class="keywordflow">if</span> ( edge_ind == 1 )</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>             {</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>                 pos -= (float)margin ;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>             }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>             <span class="comment">/*---------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> <span class="comment">             * slitlets and associate the fit results with the absolute </span></div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="comment">             * positions in the image consider the difference of the fitted </span></div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">             * slit position to the expected position and decide wether the </span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">             * fit is taken or the expected value is taken.</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>             {</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>                 <span class="comment">/* take care of the column position of the fit boxes to get </span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">                   the absolute positions */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>                 {</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>                     <span class="keywordflow">if</span> ( fabs(pos - ((<span class="keywordtype">float</span>)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>                                      (<span class="keywordtype">float</span>)slit_length)) < diff_tol )</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>                     {</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>                         slit_pos[0][0] = pos ;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>                     }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>                     {</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>                                           <span class="stringliteral">"left position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>                         <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>) edgeclean[0] - 1. - </div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>                              (<span class="keywordtype">float</span>)slit_length < 0. )</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>                         {</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>                             slit_pos[0][0] = 0. ;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>                         }</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>                         {</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>                             slit_pos[0][0] = (float)edgeclean[0] - 1. - </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>                                              (<span class="keywordtype">float</span>)slit_length ;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>                         }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>                     }</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>                 }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>                 {</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>                     {</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>                         slit_pos[j][0] = pos + (float)edgeclean[j-1] - </div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>                                                (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>                     }</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>                     {</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>                         slit_pos[j][0] = (float)edgeclean[j-1] - 1. ;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>                     }</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>                 }</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>                 {</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>                     <span class="keywordflow">if</span> ( fabs( pos - (<span class="keywordtype">float</span>)margin ) < diff_tol )</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>                     {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>                         slit_pos[k][0] = pos + (float)edgeclean[k-1] - </div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>                                                (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>                     }</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>                     {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>                                           <span class="stringliteral">"left position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>                         slit_pos[k][0] = (float)edgeclean[k-1] - 1. ;</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>                     }</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>                 }</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>             }</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>             {</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>                 <span class="comment">/* take care of the column position of the fit boxes to </span></div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> <span class="comment">                   get the absolute positions */</span></div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>                 {</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos - </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>                                (<span class="keywordtype">float</span>)edgeclean[0] ) < diff_tol )</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>                     {</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>                         slit_pos[0][1] = (float)(box_buffer->n_elements - 1) - </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>                                          pos ;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>                     }</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>                     {</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>                                           <span class="stringliteral">"right position of slitlet 0"</span>) ;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>                         slit_pos[0][1] = (float)edgeclean[0] - 1. ;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>                     }</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>                 }</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>                 {</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)box_buffer->n_elements - pos</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>                              + (<span class="keywordtype">float</span>)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin - </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>                                (<span class="keywordtype">float</span>)edgeclean[j] ) < diff_tol )</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>                     {</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>                         slit_pos[j][1] = (float)(box_buffer->n_elements - 1) - </div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>                                          pos</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>                                        + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>                     }</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>                     {</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>                         slit_pos[j][1] = (float)edgeclean[j] - 1. ;</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>                     }</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>                 }</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>                 {</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>                     <span class="keywordflow">if</span> ( edgeclean[k-1] + slit_length > ilx )</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>                     {</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>                         last_pos = (float)(ilx - 1) ;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>                     }</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>                     {</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>                         last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>                     }</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>                     <span class="keywordflow">if</span> ( fabs( (<span class="keywordtype">float</span>)(box_buffer->n_elements - 1) - pos</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                              + (<span class="keywordtype">float</span>)edgeclean[k-1] - (float)margin - </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>                                last_pos ) < diff_tol )</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>                     {</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>                         slit_pos[k][1] = (float)(box_buffer->n_elements - 1) - </div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>                                          pos</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>                                        + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                     }</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>                     {</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"something wrong with fitted "</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>                                           <span class="stringliteral">"right position of slitlet %d"</span>, j) ;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>                         slit_pos[k][1] = last_pos ;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>                     }</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>                 }</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>             }</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> </div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>             sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>         }</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     }</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>      </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> </div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     cpl_free( position);</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> }</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> </div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21"> 1620</a></span> <a class="code" href="group__sinfo__boltzmann.html#gafe44b4032a5b85ff4b88bf7518793b21" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz_single_line</a> ( cpl_image   * lineImage, </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>                               <span class="keywordtype">float</span>     ** slit_pos,</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>                               <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>                               <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>                   <span class="keywordtype">int</span>          low_pos,</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>                   <span class="keywordtype">int</span>          high_pos )</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> {</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="keywordtype">int</span>*     position=NULL ;</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <span class="keywordtype">int</span>   * sinfo_edge, * edgeclean ;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <span class="keywordtype">int</span>   * dummyedge ;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     <span class="keywordtype">int</span>   * pos_row, * pos_rowclean ;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     Vector * half_buffer ;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>     Vector * in_buffer ;</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     <span class="keywordtype">int</span>   found_row ;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>     <span class="keywordtype">int</span>   row, col ;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>     <span class="keywordtype">int</span>   i, j, k, m, ed ;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>     <span class="keywordtype">int</span>   init1 ;</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>     <span class="keywordtype">int</span>   nel, n_right, left_right ;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     <span class="keywordtype">int</span>   n_buf, edge_ind, shift ;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     <span class="keywordtype">int</span>   margin ;</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>     <span class="keywordtype">float</span> min ;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>     <span class="keywordtype">float</span> pos, last_pos ;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     slit_length = SLITLENGTH ;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>     {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     }</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> </div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>     <span class="keywordflow">if</span> ( NULL == slit_pos )</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>     {</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>     }</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> </div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>     <span class="keywordflow">if</span> ( box_length <  4 ||</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>          box_length >  2*slit_length )</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>     {</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     }</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> </div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     {</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     }</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> </div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span> </div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>          high_pos <= 0 || high_pos >= ilx )</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     {</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>     }</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <span class="comment">/* allocate memory for the edges and the row position of the slitlets */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     sinfo_edge         = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>     dummyedge    = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>     edgeclean    = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     pos_row      = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     pos_rowclean = (<span class="keywordtype">int</span>*) cpl_calloc( ilx/2, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     <span class="comment">/* now search for the maximum between the given positions for each col */</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); ;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> </div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     {</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>         found_row = -1 ;</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>     <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     {</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>         <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>             {</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>         maxval = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>                 found_row = row ;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>         }</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     }</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>     {</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>             position[col] = found_row ;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>         }</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     {</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>         position[col] = 0 ;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>         }</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     }</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     <span class="comment">/* now find and store the raw sinfo_edge positions of the found slitlet */</span> </div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     ed = 0 ;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     <span class="keywordflow">for</span> ( col = 0 ; col < (ilx) - 1 ; col++ )</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>     {</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>         <span class="keywordflow">if</span> ( position[col] > 0 && position[col+1] > 0 &&</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>          abs(position[col+1] - position[col]) > 10 ) </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>         {</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>             sinfo_edge[ed] = col ; </div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>             pos_row[ed] = position[col] ;</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>             ed++ ;</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>         }</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>     }</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     <span class="keywordflow">if</span> (ed <= 1)</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     {</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no slitlets found!"</span> ) ;</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>         cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>         cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>         cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>         cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>         cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     }</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>     <span class="comment">/* now find the clean sinfo_edge and row positions of the slitlets */</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>     <span class="keywordflow">for</span> ( i = 1 ; i <= ed ; i ++ )</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     {</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>         <span class="keywordflow">if</span> ( i == ed )</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>         {</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i-1] - sinfo_edge[i-2]) < </div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>                  (sinfo_edge[i-1] - sinfo_edge[i-2]) > </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>             {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>                 dummyedge[i-1]   = -1 ;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>             }</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>         }</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>         <span class="keywordflow">if</span> (dummyedge[i-1] != -1)</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>         {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>             dummyedge[i-1] = sinfo_edge[i-1] ;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>         }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>         {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>             continue ;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>         }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>         <span class="keywordflow">if</span> ( i < ed )</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>         {</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i] - sinfo_edge[i-1]) < </div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>                  (sinfo_edge[i] - sinfo_edge[i-1]) > </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>             {</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>                 dummyedge[i]   = -1 ;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>             }</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>         }</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>         <span class="keywordflow">if</span> ( i+1 < ed && dummyedge[i] != -1 )</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>         {</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>             <span class="keywordflow">if</span> ( (sinfo_edge[i+1] - sinfo_edge[i]) < </div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>                   slit_length - SLIT_LEN_ERR ||</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>                  (sinfo_edge[i+1] - sinfo_edge[i]) > </div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>                   slit_length + SLIT_LEN_ERR )</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>             {</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>                 dummyedge[i+1] = -1 ; </div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>             }</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>         }</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     }</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     </div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     k = 0 ;</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ed ; i++ )</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>     {</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>         <span class="keywordflow">if</span> ( dummyedge[i] != -1 && dummyedge[i] != 0 )</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>         {</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>             edgeclean[k] = dummyedge[i] ;</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>             pos_rowclean[k] = pos_row[i] ;</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>             k++ ;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>             <span class="keywordflow">if</span>( edgeclean[k-1] > (ilx - slit_length - 2*SLIT_LEN_ERR ) )</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>             {</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                 pos_rowclean[k] = pos_row[ed] ;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>             }</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>         }</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     }</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>     <span class="comment">/* determine the margins of the fitting box outside the slitlets */</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>     margin = box_length / 2 ;</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> <span class="comment">     * now go through the slitlets, search along each column within a box with </span></div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> <span class="comment">     * half width y_box the maximum value and store these found values in a </span></div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> <span class="comment">     * buffer</span></div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>     <span class="keywordflow">for</span> ( j = 0 ; j <= k ; j++ )</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>         m = 0 ;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>         <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>         {</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>             box_buffer = sinfo_new_vector( edgeclean[0] + margin ) ;</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>             <span class="keywordflow">for</span>( col = 0 ; col < edgeclean[0] + margin ; col++ )</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>             {</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[0] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>                       row <= pos_rowclean[0] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                 {</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>                     {</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                     }</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>                 }</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>                 m++ ;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>             }</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>         }</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>         {</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>             box_buffer = sinfo_new_vector( edgeclean[j] - </div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>                                            edgeclean[j-1] + 2*margin ) ;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>             <span class="keywordflow">for</span> ( col = edgeclean[j - 1] - margin ; </div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>                   col < edgeclean[j] + margin ; col++ )</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>             {</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[j] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>                       row <= pos_rowclean[j] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>                 {</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>                     {</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>                         maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>                     }</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>                 }</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>                 m++ ;</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>             }</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>         }</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>         {</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>             box_buffer = sinfo_new_vector( ilx - edgeclean[k-1] + margin ) ;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>             <span class="keywordflow">for</span> ( col = edgeclean[k - 1] - margin ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>             {</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>         <span class="keywordflow">if</span> ( col < 0 )</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>         {</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>             col = 0 ;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>                 }</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> </div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>                 maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>                 <span class="keywordflow">for</span> ( row = pos_rowclean[k] - sinfo_new_nint(y_box) ; </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>                       row <= pos_rowclean[k] + sinfo_new_nint(y_box) ; row++ )</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>                 {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>             <span class="keywordflow">if</span> ( row < 0 )</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                     {</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>             continue ;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>                     }</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>                     <span class="keywordflow">if</span> ( maxval < pidata[col + row * ilx] )</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>                     {</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>                         maxval = pidata[col + row * ilx] ;</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>                     }</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>                 }</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>                 box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>                 m++ ;</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>             }</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>         }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>         <span class="comment">/* determine the minimum value in the box to get background1 </span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="comment">           value for the sinfo_edge slitlets */</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>         min = FLT_MAX ;</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>         <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>         {</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>             <span class="keywordflow">if</span> ( box_buffer -> data[i] < min )</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>             {</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>                 min = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>             }</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>         }</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> </div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>         { </div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>             nel = 0 ;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>             {</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>                 nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>             }</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>             {</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>                 <span class="keywordflow">if</span> ( box_buffer -> n_elements % 2 == 0 )</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>                 {</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>                     nel = box_buffer -> n_elements / 2 ;</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>                 }</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>                 {</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                     nel = box_buffer -> n_elements / 2 + 1 ;</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                 }</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>             }</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>             <span class="comment">/* now split the buffer in the midth in a left and </span></div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span> <span class="comment">               right part for fitting */</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>             half_buffer = sinfo_new_vector( nel ) ;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>             {</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>                 {</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>                     half_buffer -> data[i] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>                 }</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>             }</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>             {</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>                 n_right = 0 ;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>                 <span class="keywordflow">for</span> ( i = box_buffer -> n_elements - 1 ; </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>                       i >= box_buffer -> n_elements - nel ; i-- )</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>                 {</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>                     half_buffer -> data[n_right] = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>                     n_right++ ;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>                 }</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>             }</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( nel, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> </div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>             {</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>                 {</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>                     minval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>                 }</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>                 {</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>                     maxval = half_buffer -> data[i] ;</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>                 }</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>             }</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>             fitpar[0] = minval ;</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>             fitpar[1] = maxval ; </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> </div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>             <span class="comment">/* search for both positions of the half intensity of </span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> <span class="comment">               the hat within the buffer */</span></div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>             init1 = -1 ; </div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>             <span class="keywordflow">for</span> ( i = 0 ; i < nel ; i++ )</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>             {</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>                 <span class="keywordflow">if</span> ( half_buffer -> data[i] >= ( maxval + minval ) / 2. )</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>                 {</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>                     init1 = i ;</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>                     break ;</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>                 }</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>             }</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> </div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>             <span class="comment">/*---------------------------------------------------------------</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="comment">             * if we have too few left background values (at the image edges)</span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="comment">             * values in order to get a good fit</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>               </div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>             edge_ind = 0 ;</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>             <span class="keywordflow">if</span> ( init1 < 3 )</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>             {</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>                 n_buf = half_buffer->n_elements + margin ;</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>                 in_buffer = sinfo_new_vector( n_buf ) ;     </div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < margin ; i++ )</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>                 {</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>                     in_buffer -> data[i] = min ;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>                 }</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>                 shift = 0 ;</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>                 <span class="keywordflow">for</span> ( i = margin ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>                 {</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>                     in_buffer -> data[i] = half_buffer -> data[shift] ;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>                     shift++ ;</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>                 }</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>                 sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>                 half_buffer = sinfo_new_vector ( n_buf ) ;</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>                 {</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>                     half_buffer -> data[i] = in_buffer -> data[i] ;</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>                 }</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>                 edge_ind = 1 ;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>                 init1 += margin ;</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>                 sinfo_new_destroy_vector ( in_buffer ) ;</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>             }</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> </div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>             <span class="keywordflow">if</span> ( init1 != -1 )</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>             {</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>                 fitpar[2] = (float)init1 ;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>             }</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>             fitpar[3] = 1. ;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> </div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>             <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>             {</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>             }</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>       </div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>             ndat     = nel ;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>             lab      = LABA ;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>             its      = ITSA ;</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>          </div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, </div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>                                                  half_buffer -> data, </div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>                                                  wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>                                                  dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>                                                  &tol, &its, &lab )) )</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>             { </div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" least squares fit failed, error "</span></div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>                                    <span class="stringliteral">"no.: %d in slitlet: %d"</span>, iters, j) ;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>                 fitpar[2] = 0. ;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>             }</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>         <span class="keywordflow">if</span> ( fitpar[3] <=0. )</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>             { </div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" fit failed due to negative width"</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>                                   <span class="stringliteral">" of boltzmann function in slitlet: %d"</span>, j) ;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>                 fitpar[2] = 0. ;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>             }</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>             pos = fitpar[2] ;</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>             <span class="keywordflow">if</span> ( edge_ind == 1 )</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>             {</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>                 pos -= (float)margin ;</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>             }</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> </div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>             <span class="comment">/*------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">             * now discern the left and the right sinfo_edge fit of the </span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="comment">             * slitlets and associate the fit results with the absolute </span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="comment">             * positions in the image consider the difference of the fitted </span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> <span class="comment">             * slit position to the expected position and decide wether the </span></div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> <span class="comment">             * fit is taken or the expected value is taken.</span></div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>             {</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>                 <span class="comment">/* take care of the column position of the fit boxes to </span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="comment">                   get the absolute positions */</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>                 {</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>                     slit_pos[0][0] = pos ;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>             <span class="keywordflow">if</span> ( slit_pos[0][0] - (<span class="keywordtype">int</span>) slit_pos[0][0] == 0.)</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>             {</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>                         slit_pos[0][0] = 0. ;</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>                     }</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>                 }</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>                 {</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>                     slit_pos[j][0] = pos + (float)edgeclean[j-1] - </div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>                                            (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>             <span class="keywordflow">if</span> ( slit_pos[j][0] - (<span class="keywordtype">int</span>) slit_pos[j][0] == 0.)</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>             {</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>                         slit_pos[j][0] = 0. ;</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>                     }</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>                 }</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>                 {</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>                     slit_pos[k][0] = pos + (float)edgeclean[k-1] - </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>                                            (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>             <span class="keywordflow">if</span> ( slit_pos[k][0] - (<span class="keywordtype">int</span>) slit_pos[k][0] == 0.)</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>             {</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>                         slit_pos[k][0] = 0. ;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>                     }</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>                 }</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>             }</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>             {</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>                 <span class="comment">/* take care of the column position of the fit boxes to </span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="comment">                   get the absolute positions */</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>                 <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>                 {</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>                     slit_pos[0][1] = (float)(box_buffer->n_elements - 1) - pos;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>             <span class="keywordflow">if</span> ( slit_pos[0][1] - (<span class="keywordtype">int</span>) slit_pos[0][1] == 0.)</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>             {</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>                         slit_pos[0][1] = 0. ;</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>                     }</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>                 }</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < k )</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>                 {</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>                     slit_pos[j][1] = (float)(box_buffer->n_elements - 1) - pos</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>                                      + (float)edgeclean[j-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>             <span class="keywordflow">if</span> ( slit_pos[j][1] - (<span class="keywordtype">int</span>) slit_pos[j][1] == 0.)</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>             {</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>                         slit_pos[j][1] = 0. ;</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>                     }</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>                 }</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>                 {</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>                     last_pos = (float)(edgeclean[k-1] - 1 + slit_length) ;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>                     slit_pos[k][1] = (float)(box_buffer->n_elements - 1) - pos</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>                                      + (float)edgeclean[k-1] - (<span class="keywordtype">float</span>)margin ;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>             <span class="keywordflow">if</span> ( slit_pos[k][1] - (<span class="keywordtype">int</span>) slit_pos[k][1] == 0.)</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>             {</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>                         slit_pos[k][1] = 0. ;</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>                     }</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>                 }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>             }</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> </div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>             sinfo_new_destroy_vector ( half_buffer ) ;</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>         }</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>         sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>     }</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>         </div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>     cpl_free( sinfo_edge ) ;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>     cpl_free( pos_row ) ;</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     cpl_free( edgeclean ) ;</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>     cpl_free( dummyedge ) ;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>     cpl_free( pos_rowclean ) ;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>     cpl_free( position );</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> }</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> </div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l02164"></a><span class="lineno"><a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb"> 2164</a></span> <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square fitting of a Bolt...">sinfo_new_fit_slits_boltz_with_estimate</a> ( cpl_image   * lineImage, </div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>                                 <span class="keywordtype">float</span>     ** slit_pos,</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>                                 <span class="keywordtype">int</span>          box_length,</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>                                 <span class="keywordtype">float</span>        y_box,</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>                                 <span class="keywordtype">float</span>        diff_tol,</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>                     <span class="keywordtype">int</span>          low_pos,</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>                     <span class="keywordtype">int</span>          high_pos )</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span> {</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>     <span class="keywordtype">int</span>*     position=NULL ;</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>     Vector * box_buffer ;</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>     Vector * in_buffer ;</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>     <span class="keywordtype">int</span>   found_row ;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>     <span class="keywordtype">int</span>   row, col ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>     <span class="keywordtype">int</span>   col_first, col_last ;</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>     <span class="keywordtype">int</span>   row_first, row_last ;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>     <span class="keywordtype">int</span>   i, j, m, n ;</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     <span class="keywordtype">int</span>   init1 ;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>     <span class="keywordtype">int</span>   left_right ;</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>     <span class="keywordtype">int</span>   n_buf, shift ;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>     <span class="keywordtype">int</span>   slit_length ;</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>     <span class="keywordtype">int</span>   numpar, its ;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     <span class="keywordtype">int</span>   * mpar ;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>     <span class="keywordtype">float</span> fitpar[NPAR] ;</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     <span class="keywordtype">float</span> dervpar[NPAR] ;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>     <span class="keywordtype">float</span> minval, maxval ;</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     <span class="keywordtype">float</span> pos ;</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     <span class="keywordtype">float</span> new_pos ;</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>     <span class="keywordtype">int</span>   slitposition[SLITLENGTH] ;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     pixelvalue rowpos[SLITLENGTH] ;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> </div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> </div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>     slit_length = SLITLENGTH ; <span class="comment">/* this setting is too much 64 */</span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>     slit_length = N_SLITLETS ; <span class="comment">/* this setting is better: 32 */</span></div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span> </div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>     {</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line image given!"</span> ) ;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>     }</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> </div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>     <span class="keywordflow">if</span> ( NULL == slit_pos )</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>     {</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array allocated!"</span> ) ;</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>     }</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>     <span class="keywordflow">if</span> ( box_length < 4 ||</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>          box_length > 2*slit_length )</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>     {</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fitting box length given!"</span> ) ;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>     }</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> </div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>     <span class="keywordflow">if</span> ( y_box <= 0. || y_box > 6. )</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>     {</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong y box length given!"</span> ) ;</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>     }</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>     <span class="keywordflow">if</span> ( diff_tol <= 0. )</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>     {</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong diff_tol given!"</span> ) ;</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>     }</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> </div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> </div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>     <span class="keywordflow">if</span> ( low_pos >= high_pos || low_pos < 0 || </div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>          high_pos <= 0 || high_pos > ily )</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>     {</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong user given search positions!"</span> ) ;</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>     }</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span> </div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>     <span class="comment">/* now search for the maximum between the given positions for each col */</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>     position=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>     {</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>         found_row = -1 ;</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>     <span class="keywordflow">for</span> ( row = low_pos ; row <= high_pos ; row++ )</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>     {</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>         <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] )</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>             {</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>         maxval = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>                 found_row = row ;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>         }</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     }</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     <span class="keywordflow">if</span> ( maxval > -FLT_MAX && found_row > low_pos )</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>     {</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>             position[col] = found_row ;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>         }</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>     {</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>         position[col] = 0 ;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>         }</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>     }</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>     </div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="comment">     * now go through the slitlets, search along each column within a box with </span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="comment">     * half width y_box the maximum value and store these found values in a </span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> <span class="comment">     * buffer</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     <span class="keywordflow">for</span> ( j = 0 ; j < slit_length ; j++ )</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>     {</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>         <span class="comment">/* now go through the columns and determine the slitlet positions by</span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span> <span class="comment">         * calculating the median of the found positions </span></div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>         n = 0 ;</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>         </div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>         <span class="keywordflow">for</span> ( col = sinfo_new_nint(slit_pos[j][0])+ 1 ; </div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>               col < sinfo_new_nint(slit_pos[j][1]) -1 ; col++ )</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>         {</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>             rowpos[n] = (pixelvalue)position[col] ;</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>             n++ ;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>         }</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> </div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>         slitposition[j] = (int)sinfo_new_median(rowpos, n) ;</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>         <span class="keywordflow">for</span> ( left_right = 0 ; left_right <= 1 ; left_right++ )</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>         {</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>             init1 = 0 ;</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>             col_first = sinfo_new_nint( slit_pos[j][left_right] ) - </div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>                                         box_length/2 ;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>             col_last  = sinfo_new_nint( slit_pos[j][left_right] ) + </div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>                                         box_length/2 ;</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>             <span class="keywordflow">if</span> ( col_first < 0 )</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>             {</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>                 col_first = 0 ;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>                 init1 = 1 ;</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>             }</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>             <span class="keywordflow">if</span> ( col_last > ilx )</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>             {</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>                 col_last = ilx ;</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>                 init1 = 1 ;</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>             }</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>             <span class="keywordflow">if</span> ( col_last - col_first <= 0 )</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>             {</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" first and last column wrong!"</span> ) ;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>             }</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>             box_buffer = sinfo_new_vector( col_last - col_first ) ;</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>             m = 0 ;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> </div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> </div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>             <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>             {</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>                 <span class="keywordflow">for</span>( col = col_first ; col < col_last ; col++ )</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>                 {</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>                     <span class="keywordflow">if</span> ( row_first < 0 )</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>                     {</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>                         row_first = 0 ;</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>                     }</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>                     <span class="keywordflow">if</span> ( row_last >= ily  )</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>                     {</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>                         row_last = ily - 1 ;</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>                     }</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>                     {</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>                         {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>                             maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>                         }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>                     }</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>                     box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>                     m++ ;</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>                 }</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>             }</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>             {</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> </div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>                 <span class="keywordflow">for</span>( col = col_last-1 ; col >= col_first ; col-- )</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>                 {</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>                     row_first = slitposition[j] - sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>                     row_last  = slitposition[j] + sinfo_new_nint(y_box) ;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>                     <span class="keywordflow">if</span> ( row_first < 0 )</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>                     {</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>                         row_first = 0 ;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>                     }</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>                     <span class="keywordflow">if</span> ( row_last >= ily  )</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>                     {</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>                         row_last = ily - 1 ;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>                     }</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>                     <span class="keywordflow">for</span> ( row = row_first ; row <= row_last ; row++ )</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>                     {</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>                         <span class="keywordflow">if</span> ( maxval < pidata[col + ilx*row] )</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>                         {</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>                             maxval = pidata[col + ilx*row] ;</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>                         }</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>                     }</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>                     box_buffer->data[m] = maxval ;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>                     m++ ;</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>                 }</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> </div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>             }</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> </div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>             xdat=(<span class="keywordtype">float</span> *) cpl_calloc(box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>) );</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>             wdat=(<span class="keywordtype">float</span> *) cpl_calloc(box_buffer->n_elements, sizeof (<span class="keywordtype">float</span>) );</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>             mpar=(<span class="keywordtype">int</span> *)   cpl_calloc(NPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> </div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>             minval =  FLT_MAX ;</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> </div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>             <span class="keywordflow">for</span> ( i = 0 ; i < box_buffer->n_elements ; i++ )</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>             {</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>                 xdat[i] = i ;</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>                 wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>                 <span class="keywordflow">if</span> ( box_buffer -> data[i] < minval )</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>                 {</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>                     minval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>                 }</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>                 <span class="keywordflow">if</span> ( box_buffer -> data[i] > maxval )</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>                 {</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>                     maxval = box_buffer -> data[i] ;</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>                 }</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>             }</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>             fitpar[0] = minval ;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>             fitpar[1] = maxval ; </div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> </div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="comment">             * if we have too few left background values (at the image edges)</span></div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="comment">             * the left margin of the buffer to fit is filled with the minimal</span></div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> <span class="comment">             * values in order to get a good fit</span></div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>             </div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>   </div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>             <span class="keywordflow">if</span> ( init1 == 1 )</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>             {</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>                 n_buf = box_buffer->n_elements + box_length/2 ;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>                 in_buffer = sinfo_new_vector( n_buf ) ;     </div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < box_length/2 ; i++ )</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>                 {</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>                     in_buffer -> data[i] = minval ;</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>                 }</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>                 shift = 0 ;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>                 <span class="keywordflow">for</span> ( i = box_length/2 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>                 {</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>                     in_buffer -> data[i] = box_buffer -> data[shift] ;</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>                     shift++ ;</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>                 }</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>                 sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                 box_buffer = sinfo_new_vector ( n_buf ) ;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < n_buf ; i++ )</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>                 {</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>                     box_buffer -> data[i] = in_buffer -> data[i] ;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>                 }</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>                 sinfo_new_destroy_vector ( in_buffer ) ;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>             }</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> </div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>             <span class="comment">/* determine the initial positions from the found values */</span></div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>             fitpar[2] = (float)box_buffer->n_elements/2.  ;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>             fitpar[3] = 1. ;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> </div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>             for ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>             {</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>                 mpar[i] = 1 ;</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>                 dervpar[i] = 0. ;</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>             }</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>       </div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>             xdim     = XDIMA ;</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>             ndat     = box_buffer->n_elements ;</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>             numpar   = NPAR ;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>             tol      = TOLA ;</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>             lab      = LABA ;</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>             its      = ITSA ;</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>          </div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>             <span class="comment">/* finally, do the least squares fit over the buffer data */</span></div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>             <span class="keywordflow">if</span> ( 0 > ( iters = <a class="code" href="group__sinfo__boltzmann.html#ga7e03e34851f7c367ab3827c58e8c81c5" title="makes a least-squares fit of a function to a set of data points.">sinfo_new_lsqfit</a>( xdat, &xdim, </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>                                                  box_buffer -> data, </div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>                                                  wdat, &ndat, fitpar,</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>                                                  dervpar, mpar, &numpar, </div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>                                                  &tol, &its, &lab )) )</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>             { </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed, error "</span></div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>                                    <span class="stringliteral">"no.: %d in slitlet: %d\n"</span>, iters, j) ;</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>                 sinfo_new_destroy_vector(box_buffer) ;</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>                 cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>                 cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>                 cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>                 continue ;</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>             }</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> </div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>         <span class="keywordflow">if</span> ( fitpar[3] <=0. )</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>             { </div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"fit failed due to negative width of "</span></div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>                                    <span class="stringliteral">"boltzmann function in slitlet: %d\n"</span>, j) ;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>                 sinfo_new_destroy_vector(box_buffer) ;</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>                 cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>                 cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>                 cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>                 continue ;</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>             }</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>             pos = fitpar[2] ;</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>             <span class="keywordflow">if</span> ( init1 == 1 )</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>             {</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>                 pos -= (float)box_length/2. ;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>             }</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span> </div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span> <span class="comment">             * now compute the real slit positions using the guess positions</span></div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> <span class="comment">             * if the fit did not work the guess positions are taken</span></div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> <span class="comment">             * the same is done if the deviations are too big.</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>             <span class="keywordflow">if</span> ( pos != 0. )  </div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>             {</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>                 <span class="keywordflow">if</span> ( left_right == 0 )</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>                 {</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>                     new_pos = (float)col_first + pos ;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>                 }</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>                 {</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>                     new_pos = (float)col_last-1 - pos ;</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>                 }</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>                 <span class="keywordflow">if</span> ( fabs(new_pos - slit_pos[j][left_right]) < diff_tol )</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>                 {</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>                     slit_pos[j][left_right] = new_pos ;</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>                 }</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>                 {</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" deviation bigger than tolerance,"</span></div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>                                        <span class="stringliteral">" take the estimated slitlet position "</span></div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>                                        <span class="stringliteral">" in slitlet: %d\n"</span>, j) ;</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>                 }</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>             }</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> </div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>             cpl_free( xdat ) ;</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>             cpl_free( wdat ) ;</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>             cpl_free( mpar ) ;</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>             sinfo_new_destroy_vector ( box_buffer ) ;</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>         }</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>     }</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>     cpl_free(position);</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>                               </div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__config_8c_source.html b/html/sinfo__bp__config_8c_source.html
index fee6abb..9133995 100644
--- a/html/sinfo__bp__config_8c_source.html
+++ b/html/sinfo__bp__config_8c_source.html
@@ -2,77 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search                                   *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_bp_config.h"</span>
-<a name="l00053"></a>00053   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keywordtype">void</span>
-<a name="l00056"></a>00056  sinfo_bp_config_add(cpl_parameterlist *list)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   cpl_parameter *p;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   <span class="keywordflow">if</span> (!list) {
-<a name="l00062"></a>00062     <span class="keywordflow">return</span>;
-<a name="l00063"></a>00063   }
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065   <span class="comment">/* indicates which method will be used */</span>
-<a name="l00066"></a>00066   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp.method"</span>,
-<a name="l00067"></a>00067                   CPL_TYPE_STRING,
-<a name="l00068"></a>00068                               <span class="stringliteral">"Data reduction method: "</span>,
-<a name="l00069"></a>00069                               <span class="stringliteral">"sinfoni.general_noise"</span>,
-<a name="l00070"></a>00070                               <span class="stringliteral">"Normal"</span>,
-<a name="l00071"></a>00071                               3,
-<a name="l00072"></a>00072                               <span class="stringliteral">"Normal"</span>,<span class="stringliteral">"Linear"</span>,<span class="stringliteral">"Noise"</span>);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bp-method"</span>);
-<a name="l00076"></a>00076   cpl_parameterlist_append(list, p);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   <span class="keywordflow">return</span>;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search                                   *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_bp_config.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>  sinfo_bp_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* indicates which method will be used */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp.method"</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="stringliteral">"Data reduction method: "</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="stringliteral">"sinfoni.general_noise"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"Normal"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               3,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"Normal"</span>,<span class="stringliteral">"Linear"</span>,<span class="stringliteral">"Noise"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bp-method"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__config_8h_source.html b/html/sinfo__bp__config_8h_source.html
index 5fec5fe..6c1b032 100644
--- a/html/sinfo__bp__config_8h_source.html
+++ b/html/sinfo__bp__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>  
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_bp_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_bp_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__dist__config_8c_source.html b/html/sinfo__bp__dist__config_8c_source.html
index 1146624..ea7a69a 100644
--- a/html/sinfo__bp__dist__config_8c_source.html
+++ b/html/sinfo__bp__dist__config_8c_source.html
@@ -2,269 +2,300 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_dist_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_dist_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_dist_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_bp_dist_config.h"</span>
-<a name="l00052"></a>00052   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">void</span>
-<a name="l00055"></a><a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15">00055</a>  <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(cpl_parameterlist *list)
-<a name="l00056"></a>00056 {
-<a name="l00057"></a>00057   cpl_parameter *p;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keywordflow">if</span> (!list) {
-<a name="l00060"></a>00060     <span class="keywordflow">return</span>;
-<a name="l00061"></a>00061   }
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span>
-<a name="l00066"></a>00066 <span class="comment">   to the column intensity */</span>
-<a name="l00067"></a>00067   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.sigma_factor"</span>,
-<a name="l00068"></a>00068                   CPL_TYPE_DOUBLE,
-<a name="l00069"></a>00069                               <span class="stringliteral">"Threshold Sigma Factor: "</span>
-<a name="l00070"></a>00070                               <span class="stringliteral">"to remove the column intensity tilt only "</span>
-<a name="l00071"></a>00071                               <span class="stringliteral">"pixels which lie within a defined noise"</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"limit are used to fit a straight line"</span>,
-<a name="l00073"></a>00073                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00074"></a>00074                               2.0);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bp_dist-s_factor"</span>);
-<a name="l00077"></a>00077   cpl_parameterlist_append(list, p);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="comment">/* bad pixel search determination method */</span>
-<a name="l00080"></a>00080  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_dist.method_index"</span>,
-<a name="l00081"></a>00081                   CPL_TYPE_INT,
-<a name="l00082"></a>00082                               <span class="stringliteral">"Bad pixel Method Index"</span>
-<a name="l00083"></a>00083                               <span class="stringliteral">"1: median of nearest neighbors,"</span>
-<a name="l00084"></a>00084                               <span class="stringliteral">"2: absolute distances check, "</span>
-<a name="l00085"></a>00085                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,
-<a name="l00086"></a>00086                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00087"></a>00087                               1,
-<a name="l00088"></a>00088                               3,1,2,3);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-method_ind"</span>);
-<a name="l00091"></a>00091   cpl_parameterlist_append(list, p);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span>
-<a name="l00094"></a>00094 <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span>
-<a name="l00095"></a>00095 <span class="comment">     a pixel as bad */</span>
-<a name="l00096"></a>00096   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.factor"</span>,
-<a name="l00097"></a>00097                   CPL_TYPE_DOUBLE,
-<a name="l00098"></a>00098                               <span class="stringliteral">"Factor: "</span>
-<a name="l00099"></a>00099            <span class="stringliteral">"if |pixel - sinfo_median| > factor * standard deviation -> "</span>
-<a name="l00100"></a>00100                               <span class="stringliteral">"then the pixel value is replaced by "</span>
-<a name="l00101"></a>00101                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,
-<a name="l00102"></a>00102                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00103"></a>00103                               999.0);
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-fct"</span>);
-<a name="l00106"></a>00106   cpl_parameterlist_append(list, p);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108  <span class="comment">/* no of iterations to find bad pix clusters */</span>
-<a name="l00109"></a>00109   <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00110"></a>00110   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.iterations"</span>,
-<a name="l00111"></a>00111                   CPL_TYPE_INT,
-<a name="l00112"></a>00112                               <span class="stringliteral">"Iterations: number of iterations to of median"</span>
-<a name="l00113"></a>00113                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,
-<a name="l00114"></a>00114                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00115"></a>00115                               8);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-it"</span>);
-<a name="l00118"></a>00118   cpl_parameterlist_append(list, p);
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   <span class="comment">/* float </span>
-<a name="l00121"></a>00121 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00122"></a>00122 <span class="comment">     low and high frame */</span>
-<a name="l00123"></a>00123  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00124"></a>00124 <span class="comment">    and stdev */</span>
-<a name="l00125"></a>00125   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.low_rejection"</span>,
-<a name="l00126"></a>00126                   CPL_TYPE_DOUBLE,
-<a name="l00127"></a>00127                               <span class="stringliteral">"low_rejection: "</span>
-<a name="l00128"></a>00128                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00129"></a>00129                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00130"></a>00130                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00131"></a>00131                               0.1,0.0,1.0);
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-lo_rej"</span>);
-<a name="l00134"></a>00134   cpl_parameterlist_append(list, p);
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136   <span class="comment">/* float </span>
-<a name="l00137"></a>00137 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00138"></a>00138 <span class="comment">     low and high frame */</span>
-<a name="l00139"></a>00139  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00140"></a>00140 <span class="comment">    and stdev */</span>
-<a name="l00141"></a>00141   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.high_rejection"</span>,
-<a name="l00142"></a>00142                   CPL_TYPE_DOUBLE,
-<a name="l00143"></a>00143                               <span class="stringliteral">"high_rejection: "</span>
-<a name="l00144"></a>00144                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00145"></a>00145                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00146"></a>00146                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00147"></a>00147                               0.1,0.0,1.0);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-hi_rej"</span>);
-<a name="l00150"></a>00150   cpl_parameterlist_append(list, p);
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   <span class="comment">/* position in the frame lower left in X */</span>
-<a name="l00154"></a>00154   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00155"></a>00155 <span class="comment">     image statistics are computed */</span>
-<a name="l00156"></a>00156   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.llx"</span>,
-<a name="l00157"></a>00157                   CPL_TYPE_INT,
-<a name="l00158"></a>00158                               <span class="stringliteral">"llx: "</span>
-<a name="l00159"></a>00159                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00160"></a>00160                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00161"></a>00161                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00162"></a>00162                               <span class="stringliteral">"lower left x coordinate"</span>,
-<a name="l00163"></a>00163                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00164"></a>00164                               1350,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00165"></a>00165   <span class="comment">/* 1000 */</span>
-<a name="l00166"></a>00166   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-llx"</span>);
-<a name="l00167"></a>00167   cpl_parameterlist_append(list, p);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171   <span class="comment">/* position in the frame lower left in Y */</span>
-<a name="l00172"></a>00172   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00173"></a>00173 <span class="comment">     image statistics are computed */</span>
-<a name="l00174"></a>00174   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.lly"</span>,
-<a name="l00175"></a>00175                   CPL_TYPE_INT,
-<a name="l00176"></a>00176                               <span class="stringliteral">"lly: "</span>
-<a name="l00177"></a>00177                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00178"></a>00178                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00179"></a>00179                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00180"></a>00180                               <span class="stringliteral">"lower left y coordinate"</span>,
-<a name="l00181"></a>00181                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00182"></a>00182                               1000,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00183"></a>00183   <span class="comment">/* 1000 */</span>
-<a name="l00184"></a>00184   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-lly"</span>);
-<a name="l00185"></a>00185   cpl_parameterlist_append(list, p);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187   <span class="comment">/* Upper right position in CCD : should be urx */</span>
-<a name="l00188"></a>00188   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00189"></a>00189 <span class="comment">    image statistics are computed */</span>
-<a name="l00190"></a>00190   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.urx"</span>,
-<a name="l00191"></a>00191                   CPL_TYPE_INT,
-<a name="l00192"></a>00192                               <span class="stringliteral">"urx: "</span>
-<a name="l00193"></a>00193                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00194"></a>00194                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00195"></a>00195                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00196"></a>00196                               <span class="stringliteral">"upper right x coordinate"</span>,
-<a name="l00197"></a>00197                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00198"></a>00198                               1390,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00199"></a>00199   <span class="comment">/* 1350*/</span>
-<a name="l00200"></a>00200   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-urx"</span>);
-<a name="l00201"></a>00201   cpl_parameterlist_append(list, p);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203   <span class="comment">/* Upper right position in CCD : should be ury */</span>
-<a name="l00204"></a>00204   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00205"></a>00205 <span class="comment">    image statistics are computed */</span>
-<a name="l00206"></a>00206   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.ury"</span>,
-<a name="l00207"></a>00207                   CPL_TYPE_INT,
-<a name="l00208"></a>00208                               <span class="stringliteral">"ury: "</span>
-<a name="l00209"></a>00209                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00210"></a>00210                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00211"></a>00211                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00212"></a>00212                               <span class="stringliteral">"upper right y coordinate"</span>,
-<a name="l00213"></a>00213                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00214"></a>00214                               1200,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00215"></a>00215   <span class="comment">/* 1390 */</span>
-<a name="l00216"></a>00216   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-ury"</span>);
-<a name="l00217"></a>00217   cpl_parameterlist_append(list, p);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span>
-<a name="l00220"></a>00220   <span class="comment">/* indicates if the values beyond threshold values should be marked </span>
-<a name="l00221"></a>00221 <span class="comment">     as bad before proceeding to sinfo_median filtering */</span>
-<a name="l00222"></a>00222   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.threshold_index"</span>,
-<a name="l00223"></a>00223                   CPL_TYPE_BOOL,
-<a name="l00224"></a>00224                               <span class="stringliteral">"Threshold Index: "</span>
-<a name="l00225"></a>00225                               <span class="stringliteral">"indicator that indicates if the values "</span>
-<a name="l00226"></a>00226                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span>
-<a name="l00227"></a>00227                               <span class="stringliteral">"are flagged as bad pixels"</span>,
-<a name="l00228"></a>00228                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00229"></a>00229                               TRUE);
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-thr_ind"</span>);
-<a name="l00232"></a>00232   cpl_parameterlist_append(list, p);
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span>
-<a name="l00235"></a>00235   <span class="comment">/* factor to the clean standard deviation to define the threshold </span>
-<a name="l00236"></a>00236 <span class="comment">     deviation from the clean mean */</span>
-<a name="l00237"></a>00237   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.mean_factor"</span>,
-<a name="l00238"></a>00238                   CPL_TYPE_DOUBLE,
-<a name="l00239"></a>00239                               <span class="stringliteral">"Mean Factor: "</span>
-<a name="l00240"></a>00240                               <span class="stringliteral">"factor to the clean standard deviation to "</span>
-<a name="l00241"></a>00241                               <span class="stringliteral">"define the threshold deviation from the "</span>
-<a name="l00242"></a>00242                               <span class="stringliteral">"clean mean"</span>,
-<a name="l00243"></a>00243                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00244"></a>00244                               999.,0.1,1.e10);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-mean_fct"</span>);
-<a name="l00247"></a>00247   cpl_parameterlist_append(list, p);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.min_cut"</span>,
-<a name="l00252"></a>00252                   CPL_TYPE_DOUBLE,
-<a name="l00253"></a>00253                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00254"></a>00254                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00255"></a>00255                               0.1);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-min_cut"</span>);
-<a name="l00258"></a>00258   cpl_parameterlist_append(list, p);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.max_cut"</span>,
-<a name="l00262"></a>00262                   CPL_TYPE_DOUBLE,
-<a name="l00263"></a>00263                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00264"></a>00264                               <span class="stringliteral">"sinfoni.bp_dist"</span>,
-<a name="l00265"></a>00265                               50000.);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-max_cut"</span>);
-<a name="l00268"></a>00268   cpl_parameterlist_append(list, p);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270   <span class="keywordflow">return</span>;
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_dist_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_dist_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_bp_dist_config.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15">   55</a></span>  <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   to the column intensity */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.sigma_factor"</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="stringliteral">"Threshold Sigma Factor: "</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"to remove the column intensity tilt only "</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"pixels which lie within a defined noise"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"limit are used to fit a straight line"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               2.0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bp_dist-s_factor"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">/* bad pixel search determination method */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_dist.method_index"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"Bad pixel Method Index"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"1: median of nearest neighbors,"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"2: absolute distances check, "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               1,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                               3,1,2,3);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-method_ind"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">     a pixel as bad */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.factor"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               <span class="stringliteral">"Factor: "</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>            <span class="stringliteral">"if |pixel - sinfo_median| > factor * standard deviation -> "</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                               <span class="stringliteral">"then the pixel value is replaced by "</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                               999.0);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-fct"</span>);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>  <span class="comment">/* no of iterations to find bad pix clusters */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.iterations"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"Iterations: number of iterations to of median"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                               8);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-it"</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.low_rejection"</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                               <span class="stringliteral">"low_rejection: "</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-lo_rej"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.high_rejection"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               <span class="stringliteral">"high_rejection: "</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-hi_rej"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="comment">/* position in the frame lower left in X */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.llx"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                               <span class="stringliteral">"llx: "</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                               <span class="stringliteral">"lower left x coordinate"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                               1350,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="comment">/* 1000 */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-llx"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="comment">/* position in the frame lower left in Y */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.lly"</span>,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                               <span class="stringliteral">"lly: "</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"lower left y coordinate"</span>,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               1000,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="comment">/* 1000 */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-lly"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="comment">/* Upper right position in CCD : should be urx */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.urx"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               <span class="stringliteral">"urx: "</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                               <span class="stringliteral">"upper right x coordinate"</span>,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                               1390,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="comment">/* 1350*/</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-urx"</span>);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="comment">/* Upper right position in CCD : should be ury */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.ury"</span>,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"ury: "</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               <span class="stringliteral">"upper right y coordinate"</span>,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               1200,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="comment">/* 1390 */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-ury"</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="comment">/* indicates if the values beyond threshold values should be marked </span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">     as bad before proceeding to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.threshold_index"</span>,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                               <span class="stringliteral">"Threshold Index: "</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="stringliteral">"indicator that indicates if the values "</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                               <span class="stringliteral">"are flagged as bad pixels"</span>,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               TRUE);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-thr_ind"</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="comment">/* factor to the clean standard deviation to define the threshold </span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">     deviation from the clean mean */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_dist.mean_factor"</span>,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               <span class="stringliteral">"Mean Factor: "</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"factor to the clean standard deviation to "</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="stringliteral">"define the threshold deviation from the "</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                               <span class="stringliteral">"clean mean"</span>,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               999.,0.1,1.e10);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-mean_fct"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.min_cut"</span>,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               0.1);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-min_cut"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_dist.max_cut"</span>,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                               <span class="stringliteral">"sinfoni.bp_dist"</span>,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                               50000.);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_dist-max_cut"</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__dist__config_8h_source.html b/html/sinfo__bp__dist__config_8h_source.html
index 184acad..b045c4d 100644
--- a/html/sinfo__bp__dist__config_8h_source.html
+++ b/html/sinfo__bp__dist__config_8h_source.html
@@ -2,56 +2,87 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_dist_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_dist_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_dist_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_DIST_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_DIST_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>  
-<a name="l00034"></a>00034 <span class="comment">/*</span>
-<a name="l00035"></a>00035 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(cpl_parameterlist *list);
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_dist_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_dist_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_DIST_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_DIST_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__lin_8c_source.html b/html/sinfo__bp__lin_8c_source.html
index 4e4a731..9d49f06 100644
--- a/html/sinfo__bp__lin_8c_source.html
+++ b/html/sinfo__bp__lin_8c_source.html
@@ -2,368 +2,399 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_lin.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_lin.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_bp_lin.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    May 5, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Different methods for searching for bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment">                        used in the recipe spiffi_badsearch</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="comment">//#include <cpl_imagelist_basic.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_bp_lin.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_detlin.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_detlin_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                                Defines</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">                             Function Definitions</span>
-<a name="l00059"></a>00059 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 <span class="keywordtype">int</span>
-<a name="l00087"></a>00087 sinfo_new_bp_search_lin(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00088"></a>00088                         cpl_parameterlist* config,
-<a name="l00089"></a>00089                         cpl_frameset* sof)
-<a name="l00090"></a>00090 {
-<a name="l00091"></a>00091   detlin_config * cfg=NULL;
-<a name="l00092"></a>00092   cpl_imagelist * imgl=NULL ;
-<a name="l00093"></a>00093   cpl_imagelist * coeffs_imgl=NULL;
-<a name="l00094"></a>00094   cpl_image * img_tmp=NULL ;
-<a name="l00095"></a>00095   cpl_image * mask=NULL;
-<a name="l00096"></a>00096   cpl_vector* cube_mean=NULL;
-<a name="l00097"></a>00097   cpl_frameset* raw=NULL;
-<a name="l00098"></a>00098   cpl_frameset* raw_on=NULL;
-<a name="l00099"></a>00099   cpl_frameset* raw_of=NULL;
-<a name="l00100"></a>00100   cpl_frame* frm=NULL;
-<a name="l00101"></a>00101   cpl_frame* frm_dup=NULL;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   cpl_table* qclog_tbl=NULL;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105   cpl_parameter *p=NULL;
-<a name="l00106"></a>00106   cpl_polynomial *pol=NULL;
-<a name="l00107"></a>00107   cpl_vector* vec_adl=NULL;
-<a name="l00108"></a>00108   cpl_vector* vec_med=NULL;
-<a name="l00109"></a>00109   <span class="keywordtype">double</span>* mse=NULL;
-<a name="l00110"></a>00110   <span class="keywordtype">int</span> i=0;
-<a name="l00111"></a>00111   <span class="keywordtype">int</span> n_bad=0 ;
-<a name="l00112"></a>00112   <span class="keywordtype">int</span> nff=0;
-<a name="l00113"></a>00113   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l00114"></a>00114   <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];
-<a name="l00115"></a>00115   cpl_table* det_lin=NULL;
-<a name="l00116"></a>00116   <span class="keywordtype">int</span> nraw=0;
-<a name="l00117"></a>00117   <span class="keywordtype">int</span>* status=NULL;
-<a name="l00118"></a>00118   cpl_table* gain=NULL;
-<a name="l00119"></a>00119   <span class="keywordtype">int</span> ngain=0;
-<a name="l00120"></a>00120   <span class="keywordtype">int</span> sz_imgl=0;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> llx=270;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> lly=1030;
-<a name="l00124"></a>00124   <span class="keywordtype">int</span> urx=310;
-<a name="l00125"></a>00125   <span class="keywordtype">int</span> ury=1060;
-<a name="l00126"></a>00126   <span class="keywordtype">int</span> zone[4];
-<a name="l00127"></a>00127   <span class="comment">//int kappa=5;</span>
-<a name="l00128"></a>00128   <span class="comment">//int nclip=25;</span>
-<a name="l00129"></a>00129   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00133"></a>00133   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136   <span class="comment">/* parse the file names and parameters to the bad_config</span>
-<a name="l00137"></a>00137 <span class="comment">     data structure cfg */</span>
-<a name="l00138"></a>00138   check_nomsg(raw=cpl_frameset_new());
-<a name="l00139"></a>00139   cknull(cfg = sinfo_parse_cpl_input_detlin(config,sof,&raw),
-<a name="l00140"></a>00140      <span class="stringliteral">"could not parse .ini file!"</span>);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   <span class="comment">/* ======================================================================</span>
-<a name="l00143"></a>00143 <span class="comment">     DETERMINES LINEARITY COEFF AS DFO DOES</span>
-<a name="l00144"></a>00144 <span class="comment">     ======================================================================</span>
-<a name="l00145"></a>00145 <span class="comment">  */</span>
-<a name="l00146"></a>00146   nff=cpl_frameset_get_size(raw);
-<a name="l00147"></a>00147   raw_on=cpl_frameset_new();
-<a name="l00148"></a>00148   raw_of=cpl_frameset_new();
-<a name="l00149"></a>00149   <span class="comment">/* separates on and off frames */</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151   <span class="keywordflow">for</span>(i=0;i<nff;i++) {
-<a name="l00152"></a>00152     frm=cpl_frameset_get_frame(raw,i);
-<a name="l00153"></a>00153     frm_dup=cpl_frame_duplicate(frm);
-<a name="l00154"></a>00154     <span class="keywordflow">if</span>(sinfo_frame_is_on(frm)) {
-<a name="l00155"></a>00155       cpl_frameset_insert(raw_on,frm_dup);
-<a name="l00156"></a>00156     } <span class="keywordflow">else</span> {
-<a name="l00157"></a>00157       cpl_frameset_insert(raw_of,frm_dup);
-<a name="l00158"></a>00158     }
-<a name="l00159"></a>00159   }
-<a name="l00160"></a>00160   <span class="comment">/*</span>
-<a name="l00161"></a>00161 <span class="comment">    cknull(det_lin=sinfo_get_linearity(raw_on,raw_of),</span>
-<a name="l00162"></a>00162 <span class="comment">    "Error computing linearity");</span>
-<a name="l00163"></a>00163 <span class="comment">  */</span>
-<a name="l00164"></a>00164   zone[0]=llx;
-<a name="l00165"></a>00165   zone[1]=lly;
-<a name="l00166"></a>00166   zone[2]=urx;
-<a name="l00167"></a>00167   zone[3]=ury;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169   <span class="comment">//If one refers to a larger area</span>
-<a name="l00170"></a>00170   zone[0]=20;
-<a name="l00171"></a>00171   zone[1]=2028;
-<a name="l00172"></a>00172   zone[2]=20;
-<a name="l00173"></a>00173   zone[3]=2028;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   <span class="comment">/*</span>
-<a name="l00176"></a>00176 <span class="comment">    cknull(det_lin=irplib_compute_linearity(raw_on,raw_of),</span>
-<a name="l00177"></a>00177 <span class="comment">    "Error computing linearity");</span>
-<a name="l00178"></a>00178 <span class="comment">  */</span>
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180   <span class="keywordflow">if</span>(pdensity > 1 ) {
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     sinfo_msg(<span class="stringliteral">"Computes linearity"</span>);
-<a name="l00183"></a>00183     cknull(det_lin=sinfo_compute_linearity(raw_on,raw_of),
-<a name="l00184"></a>00184        <span class="stringliteral">"Error computing linearity"</span>);
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     check_nomsg(nraw=cpl_table_get_nrow(det_lin));
-<a name="l00187"></a>00187     check_nomsg(vec_adl=cpl_vector_new(nraw));
-<a name="l00188"></a>00188     check_nomsg(vec_med=cpl_vector_new(nraw));
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     <span class="keywordflow">for</span>(i=0;i<nraw;i++) {
-<a name="l00191"></a>00191       cpl_vector_set(vec_adl,i,cpl_table_get_double(det_lin,<span class="stringliteral">"adl"</span>,i,status));
-<a name="l00192"></a>00192       cpl_vector_set(vec_med,i,cpl_table_get_double(det_lin,<span class="stringliteral">"med"</span>,i,status));
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194     check_nomsg(pol=sinfo_polynomial_fit_1d_create(vec_adl,vec_med,
-<a name="l00195"></a>00195                          cfg->order,mse));
-<a name="l00196"></a>00196     sinfo_free_my_vector(&vec_adl);
-<a name="l00197"></a>00197     sinfo_free_my_vector(&vec_med);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00200"></a>00200     cpl_size deg=0;
-<a name="l00201"></a>00201     <span class="keywordflow">for</span>(deg=0;deg<cfg->order+1;deg++) {
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203       snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"%s"</span>,<span class="stringliteral">"QC BP-MAP LIN"</span>,deg,<span class="stringliteral">" MED"</span>);
-<a name="l00204"></a>00204       sinfo_qclog_add_double(qclog_tbl,key_name,
-<a name="l00205"></a>00205                  cpl_polynomial_get_coeff(pol,&deg),
-<a name="l00206"></a>00206                  <span class="stringliteral">"Linearity Polynomial Coeff"</span>,<span class="stringliteral">"%g"</span>);
-<a name="l00207"></a>00207     }
-<a name="l00208"></a>00208     sinfo_free_polynomial(&pol);
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00211"></a>00211     snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));
-<a name="l00212"></a>00212     ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,
-<a name="l00213"></a>00213                      <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     ck0(sinfo_pro_save_tbl(det_lin,raw,sof,BP_LIN_LIN_DET_INFO_OUT_FILENAME,
-<a name="l00216"></a>00216                PRO_LIN_DET_INFO,qclog_tbl,plugin_id,config),
-<a name="l00217"></a>00217     <span class="stringliteral">"cannot dump ims %s"</span>,BP_LIN_LIN_DET_INFO_OUT_FILENAME);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     sinfo_free_table(&det_lin);
-<a name="l00220"></a>00220     sinfo_free_table(&qclog_tbl);
-<a name="l00221"></a>00221   }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223   <span class="comment">/*=======================================================*/</span>
-<a name="l00224"></a>00224   <span class="keywordflow">if</span>(pdensity > 1 ) {
-<a name="l00225"></a>00225     sinfo_msg(<span class="stringliteral">"Computes gain"</span>);
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     cknull(gain=sinfo_compute_gain(raw_on,raw_of),<span class="stringliteral">"Error computing gain"</span>);
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     <span class="comment">//cknull(gain=irplib_compute_gain(raw_on,raw_of,zone,kappa,nclip),</span>
-<a name="l00230"></a>00230     <span class="comment">//         "Error computing gain");</span>
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     sinfo_free_frameset(&raw_on);
-<a name="l00233"></a>00233     sinfo_free_frameset(&raw_of);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     check_nomsg(ngain=cpl_table_get_nrow(gain));
-<a name="l00236"></a>00236     cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     <span class="keywordflow">for</span>(i=0;i<ngain;i++) {
-<a name="l00239"></a>00239       snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i"</span>,<span class="stringliteral">"QC GAIN"</span>,i);
-<a name="l00240"></a>00240       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,
-<a name="l00241"></a>00241                        cpl_table_get_double(gain,<span class="stringliteral">"gain"</span>,i,status),
-<a name="l00242"></a>00242                        <span class="stringliteral">"Detector gain"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00243"></a>00243     }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC GAIN"</span>,
-<a name="l00246"></a>00246                      cpl_table_get_column_median(gain,<span class="stringliteral">"gain"</span>),<span class="stringliteral">"Detector gain median"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00247"></a>00247     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC GAINERR"</span>,
-<a name="l00248"></a>00248                      cpl_table_get_column_stdev(gain,<span class="stringliteral">"gain"</span>),<span class="stringliteral">"Detector gain error"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250     ck0(sinfo_pro_save_tbl(gain,raw,sof,BP_LIN_GAIN_OUT_FILENAME,PRO_GAIN_INFO,
-<a name="l00251"></a>00251                qclog_tbl,plugin_id,config),
-<a name="l00252"></a>00252     <span class="stringliteral">"cannot dump tbl %s"</span>, BP_LIN_GAIN_OUT_FILENAME);
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254     sinfo_free_table(&gain);
-<a name="l00255"></a>00255     sinfo_free_table(&qclog_tbl);
-<a name="l00256"></a>00256   }
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   <span class="comment">/* =======================================================================</span>
-<a name="l00259"></a>00259 <span class="comment">     DETERMINES LINEARITY COEFF AS MPE DOES</span>
-<a name="l00260"></a>00260 <span class="comment">     =======================================================================</span>
-<a name="l00261"></a>00261 <span class="comment">  */</span>
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264   check_nomsg(imgl = cpl_imagelist_new());
-<a name="l00265"></a>00265   <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )
-<a name="l00266"></a>00266     {
-<a name="l00267"></a>00267       <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {
-<a name="l00268"></a>00268     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );
-<a name="l00269"></a>00269     <span class="keywordflow">return</span> -1;
-<a name="l00270"></a>00270       }
-<a name="l00271"></a>00271       check_nomsg(img_tmp=cpl_image_load(cfg->framelist[i],CPL_TYPE_FLOAT,0,0));
-<a name="l00272"></a>00272       check_nomsg(cpl_imagelist_set(imgl,img_tmp,i));
-<a name="l00273"></a>00273     }
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275   <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l00276"></a>00276 <span class="comment">   *---------------------- SEARCH FOR BAD PIXELS---------------------</span>
-<a name="l00277"></a>00277 <span class="comment">   *--------------------------------------------------------------*/</span>
-<a name="l00278"></a>00278   sinfo_msg(<span class="stringliteral">"Search for bad pixels"</span>);
-<a name="l00279"></a>00279   cknull(coeffs_imgl=sinfo_new_fit_intensity_course(imgl,
-<a name="l00280"></a>00280                             cfg->order,
-<a name="l00281"></a>00281                             cfg->loReject,
-<a name="l00282"></a>00282                             cfg->hiReject),
-<a name="l00283"></a>00283      <span class="stringliteral">"could not fit polynomial and store coeffs in a data cube!"</span>);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   sinfo_free_imagelist(&imgl) ;
-<a name="l00286"></a>00286   check_nomsg(sz_imgl=cpl_imagelist_get_size(coeffs_imgl));
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289   <span class="comment">/*---store the polynomial fit coefficients in a data cube----*/</span>
-<a name="l00290"></a>00290   <span class="comment">/* CUBE NOT DUMPED BECAUSE PROBLEMS ON LAST PLANE */</span>
-<a name="l00291"></a>00291   cube_mean=cpl_vector_new(sz_imgl);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293   <span class="comment">/* QC LOG */</span>
-<a name="l00294"></a>00294   cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00295"></a>00295   <span class="keywordflow">for</span>(i=0;i<sz_imgl;i++) {
-<a name="l00296"></a>00296     cpl_vector_set(cube_mean,i,
-<a name="l00297"></a>00297            cpl_image_get_median(cpl_imagelist_get(coeffs_imgl,i)));
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i%s"</span>,<span class="stringliteral">"QC BP-MAP LIN"</span>,i,<span class="stringliteral">" MEAN"</span>);
-<a name="l00300"></a>00300     snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,cpl_vector_get(cube_mean,i));
-<a name="l00301"></a>00301     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,
-<a name="l00302"></a>00302                      cpl_vector_get(cube_mean,i),
-<a name="l00303"></a>00303                      <span class="stringliteral">"Linearity Polynomial Coeff"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   }
-<a name="l00306"></a>00306   sinfo_free_my_vector(&cube_mean);
-<a name="l00307"></a>00307   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00308"></a>00308   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));
-<a name="l00309"></a>00309   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,
-<a name="l00310"></a>00310                    <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313   ck0(sinfo_pro_save_ims(coeffs_imgl,raw,sof,cfg->coeffsCubeName,
-<a name="l00314"></a>00314              PRO_BP_COEFF,qclog_tbl,plugin_id,config),
-<a name="l00315"></a>00315       <span class="stringliteral">"cannot dump ims %s"</span>, cfg->coeffsCubeName);
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317   sinfo_free_table(&qclog_tbl);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319   <span class="comment">/* =======================================================================</span>
-<a name="l00320"></a>00320 <span class="comment">     DETERMINES BAD PIXEL MAP</span>
-<a name="l00321"></a>00321 <span class="comment">     =======================================================================</span>
-<a name="l00322"></a>00322 <span class="comment">  */</span>
-<a name="l00323"></a>00323   sinfo_msg(<span class="stringliteral">"Generates bad pixel map"</span>);
-<a name="l00324"></a>00324   cknull(mask = sinfo_new_search_bad_pixels (coeffs_imgl,
-<a name="l00325"></a>00325                          cfg->threshSigmaFactor,
-<a name="l00326"></a>00326                          cfg->nonlinearThresh,
-<a name="l00327"></a>00327                          cfg->loReject,
-<a name="l00328"></a>00328                          cfg->hiReject),
-<a name="l00329"></a>00329      <span class="stringliteral">"could not create bad pixel mask!"</span>) ;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331   sinfo_free_imagelist(&coeffs_imgl) ;
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333   check_nomsg(n_bad = sinfo_new_count_bad_pixels(mask)) ;
-<a name="l00334"></a>00334   sinfo_msg( <span class="stringliteral">"No of bad pixels: %d"</span>, n_bad ) ;
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   <span class="comment">/* QC LOG */</span>
-<a name="l00337"></a>00337   cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00338"></a>00338   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00339"></a>00339   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));
-<a name="l00340"></a>00340   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,
-<a name="l00341"></a>00341                    <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343   ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_bad,
-<a name="l00344"></a>00344                 <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346   ck0(sinfo_pro_save_ima(mask,raw,sof,cfg->outName,PRO_BP_MAP_NL,qclog_tbl,
-<a name="l00347"></a>00347              plugin_id,config),
-<a name="l00348"></a>00348       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351   <span class="comment">/* ======================================================================</span>
-<a name="l00352"></a>00352 <span class="comment">     FREE MEMORY</span>
-<a name="l00353"></a>00353 <span class="comment">     ======================================================================</span>
-<a name="l00354"></a>00354 <span class="comment">  */</span>
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358   sinfo_free_table(&qclog_tbl);
-<a name="l00359"></a>00359   sinfo_free_image(&mask);
-<a name="l00360"></a>00360   sinfo_free_frameset(&raw);
-<a name="l00361"></a>00361   sinfo_detlin_free(&cfg);
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363   <span class="keywordflow">return</span> 0;
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365  cleanup:
-<a name="l00366"></a>00366   sinfo_free_frameset(&raw_on);
-<a name="l00367"></a>00367   sinfo_free_frameset(&raw_of);
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369   sinfo_free_image(&mask) ;
-<a name="l00370"></a>00370   sinfo_free_my_vector(&cube_mean);
-<a name="l00371"></a>00371   sinfo_free_imagelist(&imgl);
-<a name="l00372"></a>00372   sinfo_free_imagelist(&coeffs_imgl);
-<a name="l00373"></a>00373   sinfo_free_table(&gain);
-<a name="l00374"></a>00374   sinfo_free_table(&qclog_tbl);
-<a name="l00375"></a>00375   sinfo_free_table(&det_lin);
-<a name="l00376"></a>00376   sinfo_free_my_vector(&vec_adl);
-<a name="l00377"></a>00377   sinfo_free_my_vector(&vec_med);
-<a name="l00378"></a>00378   sinfo_free_polynomial(&pol);
-<a name="l00379"></a>00379   sinfo_detlin_free(&cfg);
-<a name="l00380"></a>00380   sinfo_free_frameset(&raw);
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382   <span class="keywordflow">return</span> -1;
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_lin.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_bp_lin.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    May 5, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Different methods for searching for bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        used in the recipe spiffi_badsearch</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">//#include <cpl_imagelist_basic.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_bp_lin.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_detlin.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_detlin_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_new_bp_search_lin(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                         cpl_parameterlist* config,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                         cpl_frameset* sof)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   detlin_config * cfg=NULL;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_imagelist * imgl=NULL ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   cpl_imagelist * coeffs_imgl=NULL;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   cpl_image * img_tmp=NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   cpl_image * mask=NULL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_vector* cube_mean=NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   cpl_frameset* raw_on=NULL;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_frameset* raw_of=NULL;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_parameter *p=NULL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_polynomial *pol=NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_vector* vec_adl=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_vector* vec_med=NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">double</span>* mse=NULL;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">int</span> n_bad=0 ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">int</span> nff=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_table* det_lin=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   cpl_table* gain=NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">int</span> ngain=0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> sz_imgl=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> llx=270;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> lly=1030;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> urx=310;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> ury=1060;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">int</span> zone[4];</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="comment">//int kappa=5;</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="comment">//int nclip=25;</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="comment">/* parse the file names and parameters to the bad_config</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">     data structure cfg */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   cknull(cfg = sinfo_parse_cpl_input_detlin(config,sof,&raw),</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>      <span class="stringliteral">"could not parse .ini file!"</span>);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="comment">/* ======================================================================</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">     DETERMINES LINEARITY COEFF AS DFO DOES</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">     ======================================================================</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   nff=cpl_frameset_get_size(raw);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   raw_on=cpl_frameset_new();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   raw_of=cpl_frameset_new();</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="comment">/* separates on and off frames */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordflow">for</span>(i=0;i<nff;i++) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     frm=cpl_frameset_get_frame(raw,i);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     frm_dup=cpl_frame_duplicate(frm);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordflow">if</span>(sinfo_frame_is_on(frm)) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       cpl_frameset_insert(raw_on,frm_dup);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       cpl_frameset_insert(raw_of,frm_dup);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">    cknull(det_lin=sinfo_get_linearity(raw_on,raw_of),</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">    "Error computing linearity");</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   zone[0]=llx;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   zone[1]=lly;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   zone[2]=urx;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   zone[3]=ury;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="comment">//If one refers to a larger area</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   zone[0]=20;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   zone[1]=2028;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   zone[2]=20;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   zone[3]=2028;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">    cknull(det_lin=irplib_compute_linearity(raw_on,raw_of),</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">    "Error computing linearity");</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">if</span>(pdensity > 1 ) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     sinfo_msg(<span class="stringliteral">"Computes linearity"</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cknull(det_lin=sinfo_compute_linearity(raw_on,raw_of),</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>        <span class="stringliteral">"Error computing linearity"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     check_nomsg(nraw=cpl_table_get_nrow(det_lin));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     check_nomsg(vec_adl=cpl_vector_new(nraw));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     check_nomsg(vec_med=cpl_vector_new(nraw));</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">for</span>(i=0;i<nraw;i++) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       cpl_vector_set(vec_adl,i,cpl_table_get_double(det_lin,<span class="stringliteral">"adl"</span>,i,status));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       cpl_vector_set(vec_med,i,cpl_table_get_double(det_lin,<span class="stringliteral">"med"</span>,i,status));</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     check_nomsg(pol=sinfo_polynomial_fit_1d_create(vec_adl,vec_med,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                          cfg->order,mse));</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     sinfo_free_my_vector(&vec_adl);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     sinfo_free_my_vector(&vec_med);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_size deg=0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">for</span>(deg=0;deg<cfg->order+1;deg++) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"%s"</span>,<span class="stringliteral">"QC BP-MAP LIN"</span>,deg,<span class="stringliteral">" MED"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       sinfo_qclog_add_double(qclog_tbl,key_name,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                  cpl_polynomial_get_coeff(pol,&deg),</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                  <span class="stringliteral">"Linearity Polynomial Coeff"</span>,<span class="stringliteral">"%g"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     sinfo_free_polynomial(&pol);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                      <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     ck0(sinfo_pro_save_tbl(det_lin,raw,sof,BP_LIN_LIN_DET_INFO_OUT_FILENAME,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                PRO_LIN_DET_INFO,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="stringliteral">"cannot dump ims %s"</span>,BP_LIN_LIN_DET_INFO_OUT_FILENAME);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     sinfo_free_table(&det_lin);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="comment">/*=======================================================*/</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">if</span>(pdensity > 1 ) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     sinfo_msg(<span class="stringliteral">"Computes gain"</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     cknull(gain=sinfo_compute_gain(raw_on,raw_of),<span class="stringliteral">"Error computing gain"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="comment">//cknull(gain=irplib_compute_gain(raw_on,raw_of,zone,kappa,nclip),</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="comment">//         "Error computing gain");</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     sinfo_free_frameset(&raw_on);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     sinfo_free_frameset(&raw_of);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     check_nomsg(ngain=cpl_table_get_nrow(gain));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">for</span>(i=0;i<ngain;i++) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i"</span>,<span class="stringliteral">"QC GAIN"</span>,i);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                        cpl_table_get_double(gain,<span class="stringliteral">"gain"</span>,i,status),</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                        <span class="stringliteral">"Detector gain"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC GAIN"</span>,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                      cpl_table_get_column_median(gain,<span class="stringliteral">"gain"</span>),<span class="stringliteral">"Detector gain median"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC GAINERR"</span>,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                      cpl_table_get_column_stdev(gain,<span class="stringliteral">"gain"</span>),<span class="stringliteral">"Detector gain error"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     ck0(sinfo_pro_save_tbl(gain,raw,sof,BP_LIN_GAIN_OUT_FILENAME,PRO_GAIN_INFO,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="stringliteral">"cannot dump tbl %s"</span>, BP_LIN_GAIN_OUT_FILENAME);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     sinfo_free_table(&gain);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="comment">/* =======================================================================</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">     DETERMINES LINEARITY COEFF AS MPE DOES</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">     =======================================================================</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   check_nomsg(imgl = cpl_imagelist_new());</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       check_nomsg(img_tmp=cpl_image_load(cfg->framelist[i],CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       check_nomsg(cpl_imagelist_set(imgl,img_tmp,i));</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">   *---------------------- SEARCH FOR BAD PIXELS---------------------</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">   *--------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   sinfo_msg(<span class="stringliteral">"Search for bad pixels"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   cknull(coeffs_imgl=sinfo_new_fit_intensity_course(imgl,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                             cfg->order,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                             cfg->loReject,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                             cfg->hiReject),</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>      <span class="stringliteral">"could not fit polynomial and store coeffs in a data cube!"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   sinfo_free_imagelist(&imgl) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   check_nomsg(sz_imgl=cpl_imagelist_get_size(coeffs_imgl));</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   <span class="comment">/*---store the polynomial fit coefficients in a data cube----*/</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="comment">/* CUBE NOT DUMPED BECAUSE PROBLEMS ON LAST PLANE */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   cube_mean=cpl_vector_new(sz_imgl);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordflow">for</span>(i=0;i<sz_imgl;i++) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     cpl_vector_set(cube_mean,i,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>            cpl_image_get_median(cpl_imagelist_get(coeffs_imgl,i)));</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i%s"</span>,<span class="stringliteral">"QC BP-MAP LIN"</span>,i,<span class="stringliteral">" MEAN"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,cpl_vector_get(cube_mean,i));</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                      cpl_vector_get(cube_mean,i),</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                      <span class="stringliteral">"Linearity Polynomial Coeff"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   sinfo_free_my_vector(&cube_mean);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                    <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   ck0(sinfo_pro_save_ims(coeffs_imgl,raw,sof,cfg->coeffsCubeName,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>              PRO_BP_COEFF,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       <span class="stringliteral">"cannot dump ims %s"</span>, cfg->coeffsCubeName);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/* =======================================================================</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">     DETERMINES BAD PIXEL MAP</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">     =======================================================================</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   sinfo_msg(<span class="stringliteral">"Generates bad pixel map"</span>);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   cknull(mask = sinfo_new_search_bad_pixels (coeffs_imgl,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                          cfg->threshSigmaFactor,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                          cfg->nonlinearThresh,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                          cfg->loReject,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                          cfg->hiReject),</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>      <span class="stringliteral">"could not create bad pixel mask!"</span>) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   sinfo_free_imagelist(&coeffs_imgl) ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   check_nomsg(n_bad = sinfo_new_count_bad_pixels(mask)) ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   sinfo_msg( <span class="stringliteral">"No of bad pixels: %d"</span>, n_bad ) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                    <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_bad,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                 <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   ck0(sinfo_pro_save_ima(mask,raw,sof,cfg->outName,PRO_BP_MAP_NL,qclog_tbl,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>              plugin_id,config),</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="comment">/* ======================================================================</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">     FREE MEMORY</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">     ======================================================================</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   sinfo_free_image(&mask);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   sinfo_detlin_free(&cfg);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>  cleanup:</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   sinfo_free_frameset(&raw_on);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   sinfo_free_frameset(&raw_of);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   sinfo_free_image(&mask) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   sinfo_free_my_vector(&cube_mean);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   sinfo_free_imagelist(&imgl);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   sinfo_free_imagelist(&coeffs_imgl);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   sinfo_free_table(&gain);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   sinfo_free_table(&det_lin);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   sinfo_free_my_vector(&vec_adl);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   sinfo_free_my_vector(&vec_med);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   sinfo_free_polynomial(&pol);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   sinfo_detlin_free(&cfg);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__lin_8h_source.html b/html/sinfo__bp__lin_8h_source.html
index 2ebe57f..3a00518 100644
--- a/html/sinfo__bp__lin_8h_source.html
+++ b/html/sinfo__bp__lin_8h_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_lin.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_lin.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_BP_LIN_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_LIN_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_bp_lin.h,v 1.2 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * bp_lin.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to search for bad pixels</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> 
-<a name="l00055"></a>00055 sinfo_new_bp_search_lin (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00056"></a>00056                          cpl_parameterlist* config, 
-<a name="l00057"></a>00057                          cpl_frameset* <span class="keyword">set</span>);
-<a name="l00058"></a>00058 <span class="preprocessor">#endif </span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_lin.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_BP_LIN_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_LIN_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_bp_lin.h,v 1.2 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * bp_lin.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to search for bad pixels</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> sinfo_new_bp_search_lin (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                          cpl_parameterlist* config, </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                          cpl_frameset* <span class="keyword">set</span>);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__lin__config_8c_source.html b/html/sinfo__bp__lin__config_8c_source.html
index a280604..774306a 100644
--- a/html/sinfo__bp__lin__config_8c_source.html
+++ b/html/sinfo__bp__lin__config_8c_source.html
@@ -2,144 +2,175 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_lin_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_lin_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_lin_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search  (Linear method)                  *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_bp_lin_config.h"</span>  
-<a name="l00035"></a>00035 
-<a name="l00054"></a>00054   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span>
-<a name="l00057"></a>00057  sinfo_bp_lin_config_add(cpl_parameterlist *list)
-<a name="l00058"></a>00058 {
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   cpl_parameter *p;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   <span class="keywordflow">if</span> (!list) {
-<a name="l00063"></a>00063     <span class="keywordflow">return</span>;
-<a name="l00064"></a>00064   }
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   <span class="comment">/* order of the fit polynomial = number of coefficents - 1 */</span>
-<a name="l00069"></a>00069   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.order"</span>,
-<a name="l00070"></a>00070                   CPL_TYPE_INT,
-<a name="l00071"></a>00071                               <span class="stringliteral">"Order: "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"order of the fit polynomial = "</span>
-<a name="l00073"></a>00073                               <span class="stringliteral">"number of coefficents - 1"</span>,
-<a name="l00074"></a>00074                               <span class="stringliteral">"sinfoni.bp_lin"</span>,
-<a name="l00075"></a>00075                               2);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-order"</span>);
-<a name="l00078"></a>00078   cpl_parameterlist_append(list, p);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.thresh_sigma_factor"</span>,
-<a name="l00083"></a>00083                   CPL_TYPE_DOUBLE,
-<a name="l00084"></a>00084                               <span class="stringliteral">"Threshold Sigma Factor: "</span>
-<a name="l00085"></a>00085                               <span class="stringliteral">"threshold factor of the clean standard "</span>
-<a name="l00086"></a>00086                               <span class="stringliteral">"deviation. If the deviations of the linear "</span>
-<a name="l00087"></a>00087                               <span class="stringliteral">"polynomial coefficients exceed this threshold "</span>
-<a name="l00088"></a>00088                  <span class="stringliteral">"the corresponding pixels are declared as bad "</span>,
-<a name="l00089"></a>00089                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00090"></a>00090                               10.);
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-thresh_sigma_fct"</span>);
-<a name="l00093"></a>00093   cpl_parameterlist_append(list, p);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097   <span class="comment">/* if a non-linear coefficient exceeds this value the </span>
-<a name="l00098"></a>00098 <span class="comment">     corresponding pixel is declared as bad</span>
-<a name="l00099"></a>00099 <span class="comment">  */</span>
-<a name="l00100"></a>00100   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.nlin_threshold"</span>,
-<a name="l00101"></a>00101                   CPL_TYPE_DOUBLE,
-<a name="l00102"></a>00102                               <span class="stringliteral">"Non Linear Threshold"</span>,
-<a name="l00103"></a>00103                               <span class="stringliteral">"sinfoni.bp_lin"</span>,
-<a name="l00104"></a>00104                               0.5);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-nlin_threshold"</span>);
-<a name="l00107"></a>00107   cpl_parameterlist_append(list, p);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110  <span class="comment">/* float </span>
-<a name="l00111"></a>00111 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00112"></a>00112 <span class="comment">     low and high frame */</span>
-<a name="l00113"></a>00113  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00114"></a>00114 <span class="comment">    and stdev */</span>
-<a name="l00115"></a>00115   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_lin.low_rejection"</span>,
-<a name="l00116"></a>00116                   CPL_TYPE_DOUBLE,
-<a name="l00117"></a>00117                               <span class="stringliteral">"low_rejection: "</span>
-<a name="l00118"></a>00118                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00119"></a>00119                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00120"></a>00120                               <span class="stringliteral">"sinfoni.bp_lin"</span>,
-<a name="l00121"></a>00121                               10.,
-<a name="l00122"></a>00122                               0.,
-<a name="l00123"></a>00123                               100.);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-lo_rej"</span>);
-<a name="l00126"></a>00126   cpl_parameterlist_append(list, p);
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128   <span class="comment">/* float </span>
-<a name="l00129"></a>00129 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00130"></a>00130 <span class="comment">     low and high frame */</span>
-<a name="l00131"></a>00131  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00132"></a>00132 <span class="comment">    and stdev */</span>
-<a name="l00133"></a>00133   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_lin.high_rejection"</span>,
-<a name="l00134"></a>00134                   CPL_TYPE_DOUBLE,
-<a name="l00135"></a>00135                               <span class="stringliteral">"high_rejection: "</span>
-<a name="l00136"></a>00136                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00137"></a>00137                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00138"></a>00138                               <span class="stringliteral">"sinfoni.bp_lin"</span>,
-<a name="l00139"></a>00139                               10.,0.,100.);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-hi_rej"</span>);
-<a name="l00142"></a>00142   cpl_parameterlist_append(list, p);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145   <span class="keywordflow">return</span>;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_lin_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_lin_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search  (Linear method)                  *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_bp_lin_config.h"</span>  </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>  sinfo_bp_lin_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* order of the fit polynomial = number of coefficents - 1 */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.order"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"Order: "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"order of the fit polynomial = "</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"number of coefficents - 1"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"sinfoni.bp_lin"</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                               2);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-order"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.thresh_sigma_factor"</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"Threshold Sigma Factor: "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"threshold factor of the clean standard "</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"deviation. If the deviations of the linear "</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               <span class="stringliteral">"polynomial coefficients exceed this threshold "</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                  <span class="stringliteral">"the corresponding pixels are declared as bad "</span>,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                               10.);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-thresh_sigma_fct"</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="comment">/* if a non-linear coefficient exceeds this value the </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">     corresponding pixel is declared as bad</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_lin.nlin_threshold"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               <span class="stringliteral">"Non Linear Threshold"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                               <span class="stringliteral">"sinfoni.bp_lin"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                               0.5);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-nlin_threshold"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>  <span class="comment">/* float </span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_lin.low_rejection"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                               <span class="stringliteral">"low_rejection: "</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                               <span class="stringliteral">"sinfoni.bp_lin"</span>,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                               10.,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               0.,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               100.);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-lo_rej"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_lin.high_rejection"</span>,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                               <span class="stringliteral">"high_rejection: "</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"sinfoni.bp_lin"</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               10.,0.,100.);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_lin-hi_rej"</span>);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__lin__config_8h_source.html b/html/sinfo__bp__lin__config_8h_source.html
index 67071f4..2f8c8a3 100644
--- a/html/sinfo__bp__lin__config_8h_source.html
+++ b/html/sinfo__bp__lin__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_lin_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_lin_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_lin_config.h,v 1.2 2006/10/22 14:12:27 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/22 14:12:27 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_LIN_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_LIN_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>  
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_bp_lin_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_lin_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_lin_config.h,v 1.2 2006/10/22 14:12:27 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/22 14:12:27 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_LIN_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_LIN_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_bp_lin_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__noise_8c_source.html b/html/sinfo__bp__noise_8c_source.html
index da8f7d3..03e402e 100644
--- a/html/sinfo__bp__noise_8c_source.html
+++ b/html/sinfo__bp__noise_8c_source.html
@@ -2,150 +2,181 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_noise.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_noise.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_bp_noise.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    May 5, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Different methods for searching for bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment">                        used in the recipe spiffi_bp_noise </span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_bp_noise.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_detnoise_ini_by_cpl.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_detlin.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                Defines</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                             Function Definitions</span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00074"></a>00074 <span class="keywordtype">int</span> 
-<a name="l00075"></a>00075 sinfo_new_bp_search_noise (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00076"></a>00076                                cpl_parameterlist* config, 
-<a name="l00077"></a>00077                                cpl_frameset* sof, 
-<a name="l00078"></a>00078                                <span class="keyword">const</span> <span class="keywordtype">char</span>* out_name )
-<a name="l00079"></a>00079 {
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     detnoise_config * cfg =NULL;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083     cpl_imagelist * image_list=NULL ;
-<a name="l00084"></a>00084     cpl_image * img_tmp=NULL ;
-<a name="l00085"></a>00085     cpl_image       *  mask=NULL ;
-<a name="l00086"></a>00086     cpl_parameter *p=NULL;
-<a name="l00087"></a>00087     cpl_frameset* raw=NULL;
-<a name="l00088"></a>00088     cpl_table* qclog_tbl=NULL;
-<a name="l00089"></a>00089     <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l00090"></a>00090     <span class="keywordtype">int</span> i=0;
-<a name="l00091"></a>00091     <span class="keywordtype">int</span> n_bad =0;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     <span class="comment">/*parse the file names and parameters to the detnoise_config data </span>
-<a name="l00094"></a>00094 <span class="comment">      structure cfg*/</span>
-<a name="l00095"></a>00095     check_nomsg(raw=cpl_frameset_new());
-<a name="l00096"></a>00096     ck0(sinfo_extract_raw_frames_type1(sof,raw,RAW_DARK),
-<a name="l00097"></a>00097         <span class="stringliteral">"Error extracting %s frames"</span>,RAW_DARK);
-<a name="l00098"></a>00098     cknull(cfg = sinfo_parse_cpl_input_detnoise(config,sof,&raw),
-<a name="l00099"></a>00099            <span class="stringliteral">" could not parse .ini file!"</span>) ;
-<a name="l00100"></a>00100     check_nomsg(image_list = cpl_imagelist_new());
-<a name="l00101"></a>00101     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )
-<a name="l00102"></a>00102     {
-<a name="l00103"></a>00103       <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {
-<a name="l00104"></a>00104     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );
-<a name="l00105"></a>00105     <span class="keywordflow">goto</span> cleanup;
-<a name="l00106"></a>00106       }
-<a name="l00107"></a>00107       check_nomsg(img_tmp=cpl_image_load(cfg->framelist[i],
-<a name="l00108"></a>00108                                          CPL_TYPE_FLOAT,0,0));
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110       check_nomsg(cpl_imagelist_set(image_list,img_tmp,i));
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113     <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l00114"></a>00114 <span class="comment">     *---------------------- SEARCH FOR BAD PIXELS---------------------</span>
-<a name="l00115"></a>00115 <span class="comment">     *-----------------------------------------------------------------*/</span>
-<a name="l00116"></a>00116     sinfo_msg(<span class="stringliteral">"Noise Search for bad pixels"</span>);
-<a name="l00117"></a>00117     <span class="comment">/*---generate the bad pixel mask-------------*/</span>
-<a name="l00118"></a>00118     cknull(mask=sinfo_new_search_bad_pixels_via_noise (image_list, 
-<a name="l00119"></a>00119                                cfg->threshSigmaFactor,
-<a name="l00120"></a>00120                                cfg->loReject,
-<a name="l00121"></a>00121                                cfg->hiReject),
-<a name="l00122"></a>00122        <span class="stringliteral">" could not create bad pixel mask!"</span>) ;
-<a name="l00123"></a>00123     
-<a name="l00124"></a>00124     n_bad = sinfo_new_count_bad_pixels(mask) ;
-<a name="l00125"></a>00125     sinfo_msg (<span class="stringliteral">"number of bad pixels: %d\n"</span>, n_bad) ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     <span class="comment">/* QC LOG */</span>
-<a name="l00128"></a>00128     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00129"></a>00129     check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00130"></a>00130     snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));
-<a name="l00131"></a>00131     ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,
-<a name="l00132"></a>00132                                      <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00133"></a>00133     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_bad,
-<a name="l00134"></a>00134                                      <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     ck0(sinfo_pro_save_ima(mask,raw,sof,(<span class="keywordtype">char</span> *) out_name,
-<a name="l00137"></a>00137                PRO_BP_MAP_HP,qclog_tbl,plugin_id,config),
-<a name="l00138"></a>00138                            <span class="stringliteral">"cannot save ima %s"</span>, out_name);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     sinfo_free_image(&mask);
-<a name="l00141"></a>00141     sinfo_free_table(&qclog_tbl);
-<a name="l00142"></a>00142     sinfo_free_imagelist(&image_list) ;
-<a name="l00143"></a>00143     sinfo_detnoise_free(cfg);
-<a name="l00144"></a>00144     sinfo_free_frameset(&raw);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keywordflow">return</span> 0 ;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148  cleanup:
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     sinfo_free_table(&qclog_tbl);
-<a name="l00151"></a>00151     sinfo_free_imagelist(&image_list) ;
-<a name="l00152"></a>00152     sinfo_free_image(&mask) ;
-<a name="l00153"></a>00153     sinfo_detnoise_free(cfg);
-<a name="l00154"></a>00154     sinfo_free_frameset(&raw);
-<a name="l00155"></a>00155    <span class="keywordflow">return</span> -1 ;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_noise.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_bp_noise.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    May 5, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Different methods for searching for bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        used in the recipe spiffi_bp_noise </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_bp_noise.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_detnoise_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_detlin.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_new_bp_search_noise (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                cpl_parameterlist* config, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                cpl_frameset* sof, </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span>* out_name )</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     detnoise_config * cfg =NULL;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_imagelist * image_list=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_image * img_tmp=NULL ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_image       *  mask=NULL ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     cpl_parameter *p=NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">int</span> n_bad =0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="comment">/*parse the file names and parameters to the detnoise_config data </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">      structure cfg*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     ck0(sinfo_extract_raw_frames_type1(sof,raw,RAW_DARK),</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="stringliteral">"Error extracting %s frames"</span>,RAW_DARK);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     cknull(cfg = sinfo_parse_cpl_input_detnoise(config,sof,&raw),</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>            <span class="stringliteral">" could not parse .ini file!"</span>) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     check_nomsg(image_list = cpl_imagelist_new());</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>       }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       check_nomsg(img_tmp=cpl_image_load(cfg->framelist[i],</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                                          CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>       check_nomsg(cpl_imagelist_set(image_list,img_tmp,i));</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">     *---------------------- SEARCH FOR BAD PIXELS---------------------</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">     *-----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     sinfo_msg(<span class="stringliteral">"Noise Search for bad pixels"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="comment">/*---generate the bad pixel mask-------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     cknull(mask=sinfo_new_search_bad_pixels_via_noise (image_list, </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                cfg->threshSigmaFactor,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                cfg->loReject,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                cfg->hiReject),</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>        <span class="stringliteral">" could not create bad pixel mask!"</span>) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     n_bad = sinfo_new_count_bad_pixels(mask) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     sinfo_msg (<span class="stringliteral">"number of bad pixels: %d\n"</span>, n_bad) ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,key_value,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                                      <span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_bad,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                                      <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     ck0(sinfo_pro_save_ima(mask,raw,sof,(<span class="keywordtype">char</span> *) out_name,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                PRO_BP_MAP_HP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                            <span class="stringliteral">"cannot save ima %s"</span>, out_name);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     sinfo_free_image(&mask);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     sinfo_free_imagelist(&image_list) ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     sinfo_detnoise_free(cfg);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>  cleanup:</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     sinfo_free_imagelist(&image_list) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     sinfo_free_image(&mask) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     sinfo_detnoise_free(cfg);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>    <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__noise_8h_source.html b/html/sinfo__bp__noise_8h_source.html
index e6c3422..d2366a0 100644
--- a/html/sinfo__bp__noise_8h_source.html
+++ b/html/sinfo__bp__noise_8h_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_noise.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_noise.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_BP_NOISE_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NOISE_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_bp_noise.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * bp_noise.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routine to search for bad pixels</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 <span class="comment">/*</span>
-<a name="l00037"></a>00037 <span class="comment"> * header files</span>
-<a name="l00038"></a>00038 <span class="comment"> */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00043"></a>00043 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="keywordtype">int</span> 
-<a name="l00046"></a>00046 sinfo_new_bp_search_noise (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00047"></a>00047                            cpl_parameterlist* config, 
-<a name="l00048"></a>00048                            cpl_frameset* <span class="keyword">set</span>, 
-<a name="l00049"></a>00049                            <span class="keyword">const</span> <span class="keywordtype">char</span>* out_name);
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_noise.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_BP_NOISE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NOISE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_bp_noise.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * bp_noise.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routine to search for bad pixels</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> sinfo_new_bp_search_noise (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                            cpl_parameterlist* config, </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                            cpl_frameset* <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                            <span class="keyword">const</span> <span class="keywordtype">char</span>* out_name);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__noise__config_8c_source.html b/html/sinfo__bp__noise__config_8c_source.html
index e22e8af..1267eee 100644
--- a/html/sinfo__bp__noise__config_8c_source.html
+++ b/html/sinfo__bp__noise__config_8c_source.html
@@ -2,113 +2,144 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_noise_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_noise_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_noise_config.c,v 1.5 2008/01/17 07:54:04 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2008/01/17 07:54:04 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_bp_noise_config.h"</span>
-<a name="l00052"></a>00052   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">void</span>
-<a name="l00055"></a><a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb">00055</a>  <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(cpl_parameterlist *list)
-<a name="l00056"></a>00056 {
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058   cpl_parameter *p;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   <span class="keywordflow">if</span> (!list) {
-<a name="l00061"></a>00061     <span class="keywordflow">return</span>;
-<a name="l00062"></a>00062   }
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span>
-<a name="l00067"></a>00067 <span class="comment">   to the column intensity */</span>
-<a name="l00068"></a>00068   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_noise.thresh_sigma_factor"</span>,
-<a name="l00069"></a>00069                   CPL_TYPE_DOUBLE,
-<a name="l00070"></a>00070                               <span class="stringliteral">"Threshold Sigma Factor: "</span>
-<a name="l00071"></a>00071                               <span class="stringliteral">"If the mean noise exceeds this "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"threshold times the clean standard deviation "</span>
-<a name="l00073"></a>00073                               <span class="stringliteral">"of the clean mean the corresponding pixels "</span>
-<a name="l00074"></a>00074                               <span class="stringliteral">"are declared as bad "</span>,
-<a name="l00075"></a>00075                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00076"></a>00076                               10.);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
-<a name="l00079"></a>00079               <span class="stringliteral">"bp_noise-thresh_sigma_fct"</span>);
-<a name="l00080"></a>00080   cpl_parameterlist_append(list, p);
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="comment">/* float </span>
-<a name="l00083"></a>00083 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00084"></a>00084 <span class="comment">     low and high frame */</span>
-<a name="l00085"></a>00085  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00086"></a>00086 <span class="comment">    and stdev */</span>
-<a name="l00087"></a>00087   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_noise.low_rejection"</span>,
-<a name="l00088"></a>00088                   CPL_TYPE_DOUBLE,
-<a name="l00089"></a>00089                               <span class="stringliteral">"low_rejection: "</span>
-<a name="l00090"></a>00090                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00091"></a>00091                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00092"></a>00092                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00093"></a>00093                               10.,0.,100.);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_noise-lo_rej"</span>);
-<a name="l00096"></a>00096   cpl_parameterlist_append(list, p);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098   <span class="comment">/* float </span>
-<a name="l00099"></a>00099 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00100"></a>00100 <span class="comment">     low and high frame */</span>
-<a name="l00101"></a>00101  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00102"></a>00102 <span class="comment">    and stdev */</span>
-<a name="l00103"></a>00103   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_noise.high_rejection"</span>,
-<a name="l00104"></a>00104                   CPL_TYPE_DOUBLE,
-<a name="l00105"></a>00105                               <span class="stringliteral">"high_rejection: "</span>
-<a name="l00106"></a>00106                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00107"></a>00107                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00108"></a>00108                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00109"></a>00109                               10.,0.,100.);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_noise-hi_rej"</span>);
-<a name="l00112"></a>00112   cpl_parameterlist_append(list, p);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   <span class="keywordflow">return</span>;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_noise_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_noise_config.c,v 1.5 2008/01/17 07:54:04 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2008/01/17 07:54:04 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_bp_noise_config.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb">   55</a></span>  <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   to the column intensity */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_noise.thresh_sigma_factor"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"Threshold Sigma Factor: "</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"If the mean noise exceeds this "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"threshold times the clean standard deviation "</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"of the clean mean the corresponding pixels "</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"are declared as bad "</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                               10.);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>               <span class="stringliteral">"bp_noise-thresh_sigma_fct"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/* float </span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_noise.low_rejection"</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                               <span class="stringliteral">"low_rejection: "</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               10.,0.,100.);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_noise-lo_rej"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_noise.high_rejection"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                               <span class="stringliteral">"high_rejection: "</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               10.,0.,100.);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_noise-hi_rej"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__noise__config_8h_source.html b/html/sinfo__bp__noise__config_8h_source.html
index 00bd46c..f52537b 100644
--- a/html/sinfo__bp__noise__config_8h_source.html
+++ b/html/sinfo__bp__noise__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_noise_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_noise_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_noise_config.h,v 1.2 2006/10/22 14:12:27 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/22 14:12:27 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_NOISE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NOISE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>   
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_noise_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_noise_config.h,v 1.2 2006/10/22 14:12:27 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/22 14:12:27 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_NOISE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NOISE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>   </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__norm_8c_source.html b/html/sinfo__bp__norm_8c_source.html
index c3b3dc8..fdd7382 100644
--- a/html/sinfo__bp__norm_8c_source.html
+++ b/html/sinfo__bp__norm_8c_source.html
@@ -2,368 +2,399 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_norm.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_norm.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_bp_norm.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    May 5, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Different methods for searching for bad pixels</span>
-<a name="l00025"></a>00025 <span class="comment">                        used in the recipe sinfo_rec_mflat </span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_bp_norm.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_detlin.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_badnorm_ini_by_cpl.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_baddist_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00052"></a>00052 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                                Defines</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                             Function Definitions</span>
-<a name="l00057"></a>00057 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="keywordtype">int</span> 
-<a name="l00097"></a>00097 sinfo_new_bp_search_normal (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00098"></a>00098                      cpl_parameterlist* config, 
-<a name="l00099"></a>00099                      cpl_frameset* sof, 
-<a name="l00100"></a>00100                      cpl_frameset* ref_set, 
-<a name="l00101"></a>00101                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)
-<a name="l00102"></a>00102 {
-<a name="l00103"></a>00103   bad_config * cfg =NULL;
-<a name="l00104"></a>00104   cpl_imagelist * image_list =NULL;
-<a name="l00105"></a>00105   cpl_image ** med=NULL ;
-<a name="l00106"></a>00106   cpl_image * medImage =NULL;
-<a name="l00107"></a>00107   cpl_image * medIm =NULL;
-<a name="l00108"></a>00108   cpl_image * colImage =NULL;
-<a name="l00109"></a>00109   cpl_image * compImage =NULL;
-<a name="l00110"></a>00110   cpl_image * maskImage =NULL;
-<a name="l00111"></a>00111   cpl_image * threshIm =NULL;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   Stats * stats =NULL;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_parameter *p=NULL;             
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118   <span class="keywordtype">int</span> no=0;
-<a name="l00119"></a>00119   <span class="keywordtype">float</span> lo_cut=0.;
-<a name="l00120"></a>00120   <span class="keywordtype">float</span> hi_cut=0.;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> i=0;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> n=0;
-<a name="l00124"></a>00124   <span class="keywordtype">int</span> half_box_size=0 ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126   cpl_frameset* raw=NULL;
-<a name="l00127"></a>00127   cpl_table* qclog_tbl=NULL;
-<a name="l00128"></a>00128   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130   <span class="comment">/* parse the file names and parameters to the bad_config data structure </span>
-<a name="l00131"></a>00131 <span class="comment">       cfg */</span>
-<a name="l00132"></a>00132  
-<a name="l00133"></a>00133   sinfo_check_rec_status(0);
-<a name="l00134"></a>00134   check_nomsg(raw=cpl_frameset_new());
-<a name="l00135"></a>00135   sinfo_check_rec_status(1);
-<a name="l00136"></a>00136   <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_NO) == 0) {
-<a name="l00137"></a>00137     cknull(cfg = sinfo_parse_cpl_input_badnorm(config,sof,procatg,&raw),
-<a name="l00138"></a>00138        <span class="stringliteral">"could not parse cpl input!"</span>);
-<a name="l00139"></a>00139   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_DI) == 0) {
-<a name="l00140"></a>00140     cknull(cfg = sinfo_parse_cpl_input_baddist(config,sof,procatg,&raw),
-<a name="l00141"></a>00141        <span class="stringliteral">"could not parse cpl input!"</span>);
-<a name="l00142"></a>00142   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_DEFAULT) == 0) {
-<a name="l00143"></a>00143     cknull(cfg = sinfo_parse_cpl_input_badnorm(config,sof,procatg,&raw),
-<a name="l00144"></a>00144        <span class="stringliteral">"could not parse cpl input!"</span>);
-<a name="l00145"></a>00145   } <span class="keywordflow">else</span> {
-<a name="l00146"></a>00146     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: PRO.CATG %s, not supported!"</span>,procatg);
-<a name="l00147"></a>00147     <span class="keywordflow">goto</span> cleanup;
-<a name="l00148"></a>00148   }
-<a name="l00149"></a>00149   sinfo_check_rec_status(2);
-<a name="l00150"></a>00150   <span class="comment">/* take a clean mean of the frames */</span>
-<a name="l00151"></a>00151   sinfo_msg(<span class="stringliteral">"Takes a clean mean of the frames"</span>);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   check_nomsg(image_list = cpl_imagelist_new());
-<a name="l00154"></a>00154   sinfo_check_rec_status(3);
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156   <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ ){
-<a name="l00157"></a>00157     <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {
-<a name="l00158"></a>00158       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );
-<a name="l00159"></a>00159       <span class="keywordflow">goto</span> cleanup;
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     check_nomsg(cpl_imagelist_set(image_list, 
-<a name="l00163"></a>00163                 cpl_image_load(cfg->framelist[i],CPL_TYPE_FLOAT,0,0),i));
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167   <span class="comment">/* finally take the average image of the cube by </span>
-<a name="l00168"></a>00168 <span class="comment">     rejecting the extreme values */</span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170   check_nomsg(no=cpl_imagelist_get_size(image_list));
-<a name="l00171"></a>00171   lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00172"></a>00172   hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00173"></a>00173   cknull(medImage=cpl_imagelist_collapse_minmax_create(image_list,
-<a name="l00174"></a>00174                                                        lo_cut,
-<a name="l00175"></a>00175                                                        hi_cut),
-<a name="l00176"></a>00176      <span class="stringliteral">"error in sinfo_average_with_rejection"</span>) ;
-<a name="l00177"></a>00177  
-<a name="l00178"></a>00178   <span class="comment">/* free memory */</span>
-<a name="l00179"></a>00179   sinfo_free_imagelist(&image_list) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   <span class="comment">/*----------------------------------------------</span>
-<a name="l00182"></a>00182 <span class="comment">   * remove the intensity tilt from every column</span>
-<a name="l00183"></a>00183 <span class="comment">   * and compute the standard deviation on a rectangular zone</span>
-<a name="l00184"></a>00184 <span class="comment">   */</span>
-<a name="l00185"></a>00185   cknull(medIm = sinfo_new_thresh_image(medImage, cfg->mincut, cfg->maxcut),
-<a name="l00186"></a>00186       <span class="stringliteral">"error sinfo_new_thresh_image"</span>);
-<a name="l00187"></a>00187   cknull(colImage  = sinfo_new_col_tilt( medIm, cfg->sigmaFactor ),
-<a name="l00188"></a>00188         <span class="stringliteral">"sinfo_colTilt failed"</span> ) ;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191   cknull(stats = sinfo_new_image_stats_on_rectangle(colImage, 
-<a name="l00192"></a>00192                             cfg->loReject, 
-<a name="l00193"></a>00193                             cfg->hiReject,
-<a name="l00194"></a>00194                             cfg->llx,
-<a name="l00195"></a>00195                             cfg->lly,
-<a name="l00196"></a>00196                             cfg->urx,
-<a name="l00197"></a>00197                             cfg->ury),
-<a name="l00198"></a>00198      <span class="stringliteral">" sinfo_get_image_stats_on_vig failed"</span>) ;
-<a name="l00199"></a>00199   <span class="keywordflow">if</span>(stats!=NULL) {
-<a name="l00200"></a>00200      sinfo_msg(<span class="stringliteral">"Clean stdev: %f\n"</span>, stats->cleanstdev ) ;
-<a name="l00201"></a>00201      sinfo_msg(<span class="stringliteral">"Clean mean: %f\n"</span>,  stats->cleanmean ) ;
-<a name="l00202"></a>00202   }
-<a name="l00203"></a>00203     
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   <span class="comment">/*</span>
-<a name="l00207"></a>00207 <span class="comment">    cknull_nomsg(qclog_tbl = sinfo_qclog_init());</span>
-<a name="l00208"></a>00208 <span class="comment">    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC ICTILT STDEV",</span>
-<a name="l00209"></a>00209 <span class="comment">                                     stats->cleanstdev,</span>
-<a name="l00210"></a>00210 <span class="comment">                                     "Intensity column clean stdev","%g"));</span>
-<a name="l00211"></a>00211 <span class="comment"> </span>
-<a name="l00212"></a>00212 <span class="comment">    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC ICTILT MEAN",</span>
-<a name="l00213"></a>00213 <span class="comment">                                     stats->cleanmean,</span>
-<a name="l00214"></a>00214 <span class="comment">                                     "Intensity column clean mean","%g"));</span>
-<a name="l00215"></a>00215 <span class="comment"></span>
-<a name="l00216"></a>00216 <span class="comment">    ck0(sinfo_pro_save_ima(colImage,raw,sof,</span>
-<a name="l00217"></a>00217 <span class="comment">                           (char*) BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME,</span>
-<a name="l00218"></a>00218 <span class="comment">                           PRO_INT_COL_TILT_COR,qclog_tbl,plugin_id,config),</span>
-<a name="l00219"></a>00219 <span class="comment">                           "cannot save ima %s",</span>
-<a name="l00220"></a>00220 <span class="comment">                           BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME);</span>
-<a name="l00221"></a>00221 <span class="comment"></span>
-<a name="l00222"></a>00222 <span class="comment">    sinfo_free_table(&qclog_tbl);</span>
-<a name="l00223"></a>00223 <span class="comment">  */</span>
-<a name="l00224"></a>00224     
-<a name="l00225"></a>00225   <span class="comment">/* indicate pixels with great deviations from the clean mean as bad */</span>
-<a name="l00226"></a>00226   <span class="keywordflow">if</span> (cfg->threshInd == 1) {
-<a name="l00227"></a>00227     cknull(threshIm = sinfo_new_thresh_image(colImage, 
-<a name="l00228"></a>00228                       stats->cleanmean-cfg->meanfactor*stats->cleanstdev, 
-<a name="l00229"></a>00229                       stats->cleanmean+cfg->meanfactor*stats->cleanstdev),
-<a name="l00230"></a>00230        <span class="stringliteral">" sinfo_threshImage failed"</span> ) ;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234   <span class="keywordflow">if</span> (cfg->threshInd == 0 ) {
-<a name="l00235"></a>00235     threshIm = colImage ;
-<a name="l00236"></a>00236   }
-<a name="l00237"></a>00237   <span class="comment">/* AMO here invalid fread? */</span>
-<a name="l00238"></a>00238   med = (cpl_image**) cpl_calloc (cfg -> iterations, <span class="keyword">sizeof</span>(cpl_image*)) ;
-<a name="l00239"></a>00239     
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241   <span class="comment">/* filter iteratively the images by a sinfo_median filter of the nearest </span>
-<a name="l00242"></a>00242 <span class="comment">     neighbors under the condition of a deviation greater than a factor </span>
-<a name="l00243"></a>00243 <span class="comment">     times the standard deviation */</span>
-<a name="l00244"></a>00244   sinfo_msg(<span class="stringliteral">"Apply sinfo_median filter on pixel nearest neighbors"</span>);
-<a name="l00245"></a>00245   <span class="keywordflow">if</span> (cfg->methodInd == 1) {
-<a name="l00246"></a>00246     <span class="keywordflow">if</span> (cfg->factor>0) {
-<a name="l00247"></a>00247       cknull(med[0]=sinfo_new_median_image(threshIm,
-<a name="l00248"></a>00248                                            -cfg->factor*stats->cleanstdev),
-<a name="l00249"></a>00249                                            <span class="stringliteral">" sinfo_medianImage failed (1)"</span> ) ;
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251       <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {
-<a name="l00252"></a>00252     cknull(med[i+1]=sinfo_new_median_image(med[i], 
-<a name="l00253"></a>00253                                                -cfg->factor*stats->cleanstdev),
-<a name="l00254"></a>00254                                                <span class="stringliteral">"sinfo_medianImage failed (2)"</span>);
-<a name="l00255"></a>00255       }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     } <span class="keywordflow">else</span> {
-<a name="l00258"></a>00258       cknull(med[0] = sinfo_new_median_image(threshIm, -cfg->factor),
-<a name="l00259"></a>00259          <span class="stringliteral">" sinfo_medianImage failed (1)"</span> ) ;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261       <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {
-<a name="l00262"></a>00262     cknull(med[i+1] = sinfo_new_median_image(med[i], -cfg->factor),
-<a name="l00263"></a>00263            <span class="stringliteral">" sinfo_medianImage failed (%d)"</span>,i ) ;
-<a name="l00264"></a>00264       }
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 2) {
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268     cknull(med[0] = sinfo_new_abs_dist_image(threshIm, -cfg->factor),
-<a name="l00269"></a>00269        <span class="stringliteral">" sinfo_absDistImage failed (1)"</span> ) ;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations -1 ; i++ ) {
-<a name="l00272"></a>00272       cknull(med[i+1] = sinfo_new_abs_dist_image(med[i], -cfg->factor),
-<a name="l00273"></a>00273          <span class="stringliteral">" sinfo_absDistImage failed (2)"</span> ) ;
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 3) {
-<a name="l00276"></a>00276     cknull(med[0] = sinfo_new_mean_image_in_spec(threshIm, 
-<a name="l00277"></a>00277                                            -cfg->factor*stats->cleanstdev),
-<a name="l00278"></a>00278                                        <span class="stringliteral">"sinfo_meanImageInSpec failed (1)"</span>);
-<a name="l00279"></a>00279     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {
-<a name="l00280"></a>00280       cknull(med[i+1] = sinfo_new_mean_image_in_spec(med[i], 
-<a name="l00281"></a>00281                                                -cfg->factor*stats->cleanstdev),
-<a name="l00282"></a>00282                                          <span class="stringliteral">" sinfo_meanImageInSpec failed (2)"</span>);
-<a name="l00283"></a>00283     }
-<a name="l00284"></a>00284   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 4) {
-<a name="l00285"></a>00285     half_box_size = (cfg->urx - cfg->llx) / 2 ;
-<a name="l00286"></a>00286     cknull(med[0] = sinfo_new_local_median_image(threshIm, 
-<a name="l00287"></a>00287                        -cfg->factor,
-<a name="l00288"></a>00288                        cfg->loReject,
-<a name="l00289"></a>00289                        cfg->hiReject,
-<a name="l00290"></a>00290                        half_box_size),
-<a name="l00291"></a>00291        <span class="stringliteral">" sinfo_localMedianImage failed (1)"</span> ) ;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {
-<a name="l00294"></a>00294       cknull(med[i+1] = sinfo_new_local_median_image(med[i],
-<a name="l00295"></a>00295                            -cfg->factor,
-<a name="l00296"></a>00296                            cfg->loReject,
-<a name="l00297"></a>00297                            cfg->hiReject,
-<a name="l00298"></a>00298                            half_box_size),
-<a name="l00299"></a>00299          <span class="stringliteral">" sinfo_localMedianImage failed (2)"</span> ) ;
-<a name="l00300"></a>00300     }
-<a name="l00301"></a>00301   } <span class="keywordflow">else</span> {
-<a name="l00302"></a>00302     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong indicator methodInd !"</span> ) ;
-<a name="l00303"></a>00303     <span class="keywordflow">goto</span> cleanup ;
-<a name="l00304"></a>00304   }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306   <span class="comment">/* compare the filtered image with the input image */</span>
-<a name="l00307"></a>00307   cknull(compImage = sinfo_new_compare_images(threshIm, 
-<a name="l00308"></a>00308                                               med[cfg->iterations - 1], 
-<a name="l00309"></a>00309                                               medImage),
-<a name="l00310"></a>00310                                               <span class="stringliteral">" sinfo_compareImages failed"</span> ) ;
-<a name="l00311"></a>00311     
-<a name="l00312"></a>00312   <span class="comment">/* generate the bad pixel mask */</span>
-<a name="l00313"></a>00313   sinfo_msg(<span class="stringliteral">"Generates bad pixel map"</span>);
-<a name="l00314"></a>00314   cknull(maskImage = sinfo_new_promote_image_to_mask( compImage, &n ),
-<a name="l00315"></a>00315      <span class="stringliteral">" error in sinfo_promoteImageToMask"</span> ) ;
-<a name="l00316"></a>00316   sinfo_msg(<span class="stringliteral">"No of bad pixels:  %d\n"</span>, n ) ;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318   cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00319"></a>00319   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00320"></a>00320   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>, cpl_parameter_get_string(p));
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,
-<a name="l00323"></a>00323                                    key_value,<span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325   ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n,
-<a name="l00326"></a>00326                                            <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     ck0(sinfo_pro_save_ima(maskImage,ref_set,sof,cfg->outName,
-<a name="l00329"></a>00329                procatg,qclog_tbl,plugin_id,config),
-<a name="l00330"></a>00330     <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332   sinfo_free_table(&qclog_tbl);
-<a name="l00333"></a>00333   sinfo_free_image(&maskImage);
-<a name="l00334"></a>00334   sinfo_free_image(&compImage);
-<a name="l00335"></a>00335   sinfo_free_image_array(&med,cfg->iterations);
-<a name="l00336"></a>00336   <span class="comment">/*</span>
-<a name="l00337"></a>00337 <span class="comment">  if (med != NULL) {</span>
-<a name="l00338"></a>00338 <span class="comment">    for ( i = 0 ; i < cfg->iterations ; i++ ) {</span>
-<a name="l00339"></a>00339 <span class="comment">      if(med[i] != NULL) {</span>
-<a name="l00340"></a>00340 <span class="comment">    cpl_image_delete(med[i]) ;</span>
-<a name="l00341"></a>00341 <span class="comment">    med[i]=NULL;</span>
-<a name="l00342"></a>00342 <span class="comment">      }</span>
-<a name="l00343"></a>00343 <span class="comment">    }</span>
-<a name="l00344"></a>00344 <span class="comment">    cpl_free(med) ; </span>
-<a name="l00345"></a>00345 <span class="comment">    med=NULL;</span>
-<a name="l00346"></a>00346 <span class="comment">  }</span>
-<a name="l00347"></a>00347 <span class="comment">  */</span>
-<a name="l00348"></a>00348   <span class="keywordflow">if</span> (stats != NULL) {
-<a name="l00349"></a>00349     cpl_free(stats) ;
-<a name="l00350"></a>00350     stats=NULL;
-<a name="l00351"></a>00351   }
-<a name="l00352"></a>00352   sinfo_free_image(&medIm);
-<a name="l00353"></a>00353   sinfo_free_image(&medImage);
-<a name="l00354"></a>00354   sinfo_free_image(&colImage);
-<a name="l00355"></a>00355   <span class="keywordflow">if</span> (cfg->threshInd == 1 ) {
-<a name="l00356"></a>00356     sinfo_free_image(&threshIm);
-<a name="l00357"></a>00357   }
-<a name="l00358"></a>00358   sinfo_badnorm_free(&cfg) ;
-<a name="l00359"></a>00359   sinfo_free_frameset(&raw);
-<a name="l00360"></a>00360   <span class="keywordflow">return</span> 0;
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362  cleanup:
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364   sinfo_free_image_array(&med,cfg->iterations);
-<a name="l00365"></a>00365   <span class="comment">/*</span>
-<a name="l00366"></a>00366 <span class="comment">  if (med != NULL) {</span>
-<a name="l00367"></a>00367 <span class="comment">    for ( i = 0 ; i < cfg->iterations ; i++ ) {</span>
-<a name="l00368"></a>00368 <span class="comment">      if(med[i] != NULL) {</span>
-<a name="l00369"></a>00369 <span class="comment">    cpl_image_delete(med[i]) ;</span>
-<a name="l00370"></a>00370 <span class="comment">    med[i]=NULL;</span>
-<a name="l00371"></a>00371 <span class="comment">      }</span>
-<a name="l00372"></a>00372 <span class="comment">    }</span>
-<a name="l00373"></a>00373 <span class="comment">    cpl_free(med) ; </span>
-<a name="l00374"></a>00374 <span class="comment">         med=NULL;</span>
-<a name="l00375"></a>00375 <span class="comment">  }</span>
-<a name="l00376"></a>00376 <span class="comment">  */</span>
-<a name="l00377"></a>00377   sinfo_free_image(&compImage) ;
-<a name="l00378"></a>00378   sinfo_free_image(&maskImage) ;
-<a name="l00379"></a>00379   sinfo_free_image(&threshIm) ;
-<a name="l00380"></a>00380   sinfo_free_table(&qclog_tbl);
-<a name="l00381"></a>00381   sinfo_free_image(&threshIm) ;
-<a name="l00382"></a>00382   <span class="keywordflow">if</span> (stats != NULL) {
-<a name="l00383"></a>00383     cpl_free(stats) ;
-<a name="l00384"></a>00384     stats=NULL;
-<a name="l00385"></a>00385   }
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387   sinfo_free_image(&medIm);
-<a name="l00388"></a>00388   sinfo_free_image(&medImage);
-<a name="l00389"></a>00389   sinfo_free_image(&colImage);
-<a name="l00390"></a>00390   sinfo_free_imagelist(&image_list) ;
-<a name="l00391"></a>00391   sinfo_free_frameset(&raw);
-<a name="l00392"></a>00392   sinfo_badnorm_free(&cfg);
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394   <span class="keywordflow">return</span> -1;
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 }
-<a name="l00397"></a>00397 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_norm.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_bp_norm.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    May 5, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Different methods for searching for bad pixels</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        used in the recipe sinfo_rec_mflat </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_bp_norm.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_detlin.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_badnorm_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_baddist_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_new_bp_search_normal (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                      cpl_parameterlist* config, </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                      cpl_frameset* sof, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                      cpl_frameset* ref_set, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   bad_config * cfg =NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_imagelist * image_list =NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_image ** med=NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_image * medImage =NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_image * medIm =NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_image * colImage =NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_image * compImage =NULL;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   cpl_image * maskImage =NULL;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   cpl_image * threshIm =NULL;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   Stats * stats =NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_parameter *p=NULL;             </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">float</span> lo_cut=0.;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">float</span> hi_cut=0.;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> half_box_size=0 ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/* parse the file names and parameters to the bad_config data structure </span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">       cfg */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>  </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   sinfo_check_rec_status(1);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_NO) == 0) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     cknull(cfg = sinfo_parse_cpl_input_badnorm(config,sof,procatg,&raw),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>        <span class="stringliteral">"could not parse cpl input!"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_BP_MAP_DI) == 0) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cknull(cfg = sinfo_parse_cpl_input_baddist(config,sof,procatg,&raw),</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>        <span class="stringliteral">"could not parse cpl input!"</span>);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_DEFAULT) == 0) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     cknull(cfg = sinfo_parse_cpl_input_badnorm(config,sof,procatg,&raw),</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>        <span class="stringliteral">"could not parse cpl input!"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error: PRO.CATG %s, not supported!"</span>,procatg);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   sinfo_check_rec_status(2);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="comment">/* take a clean mean of the frames */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   sinfo_msg(<span class="stringliteral">"Takes a clean mean of the frames"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   check_nomsg(image_list = cpl_imagelist_new());</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   sinfo_check_rec_status(3);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ ){</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->framelist[i]) != 1) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->framelist[i] );</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     check_nomsg(cpl_imagelist_set(image_list, </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                 cpl_image_load(cfg->framelist[i],CPL_TYPE_FLOAT,0,0),i));</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="comment">/* finally take the average image of the cube by </span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">     rejecting the extreme values */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   check_nomsg(no=cpl_imagelist_get_size(image_list));</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cknull(medImage=cpl_imagelist_collapse_minmax_create(image_list,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                                        lo_cut,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                                                        hi_cut),</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>      <span class="stringliteral">"error in sinfo_average_with_rejection"</span>) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>  </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   sinfo_free_imagelist(&image_list) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="comment">/*----------------------------------------------</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">   * remove the intensity tilt from every column</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">   * and compute the standard deviation on a rectangular zone</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cknull(medIm = sinfo_new_thresh_image(medImage, cfg->mincut, cfg->maxcut),</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       <span class="stringliteral">"error sinfo_new_thresh_image"</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   cknull(colImage  = sinfo_new_col_tilt( medIm, cfg->sigmaFactor ),</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="stringliteral">"sinfo_colTilt failed"</span> ) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   cknull(stats = sinfo_new_image_stats_on_rectangle(colImage, </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                             cfg->loReject, </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                             cfg->hiReject,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                             cfg->llx,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                             cfg->lly,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                             cfg->urx,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                             cfg->ury),</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>      <span class="stringliteral">" sinfo_get_image_stats_on_vig failed"</span>) ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">if</span>(stats!=NULL) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>      sinfo_msg(<span class="stringliteral">"Clean stdev: %f\n"</span>, stats->cleanstdev ) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>      sinfo_msg(<span class="stringliteral">"Clean mean: %f\n"</span>,  stats->cleanmean ) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">    cknull_nomsg(qclog_tbl = sinfo_qclog_init());</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC ICTILT STDEV",</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">                                     stats->cleanstdev,</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">                                     "Intensity column clean stdev","%g"));</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC ICTILT MEAN",</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">                                     stats->cleanmean,</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">                                     "Intensity column clean mean","%g"));</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment"></span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">    ck0(sinfo_pro_save_ima(colImage,raw,sof,</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">                           (char*) BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME,</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">                           PRO_INT_COL_TILT_COR,qclog_tbl,plugin_id,config),</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">                           "cannot save ima %s",</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">                           BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME);</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment"></span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">    sinfo_free_table(&qclog_tbl);</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="comment">/* indicate pixels with great deviations from the clean mean as bad */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span> (cfg->threshInd == 1) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     cknull(threshIm = sinfo_new_thresh_image(colImage, </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                       stats->cleanmean-cfg->meanfactor*stats->cleanstdev, </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                       stats->cleanmean+cfg->meanfactor*stats->cleanstdev),</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>        <span class="stringliteral">" sinfo_threshImage failed"</span> ) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">if</span> (cfg->threshInd == 0 ) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     threshIm = colImage ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="comment">/* AMO here invalid fread? */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   med = (cpl_image**) cpl_calloc (cfg -> iterations, <span class="keyword">sizeof</span>(cpl_image*)) ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="comment">/* filter iteratively the images by a sinfo_median filter of the nearest </span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">     neighbors under the condition of a deviation greater than a factor </span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="comment">     times the standard deviation */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   sinfo_msg(<span class="stringliteral">"Apply sinfo_median filter on pixel nearest neighbors"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keywordflow">if</span> (cfg->methodInd == 1) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">if</span> (cfg->factor>0) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       cknull(med[0]=sinfo_new_median_image(threshIm,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                                            -cfg->factor*stats->cleanstdev),</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                            <span class="stringliteral">" sinfo_medianImage failed (1)"</span> ) ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cknull(med[i+1]=sinfo_new_median_image(med[i], </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                                -cfg->factor*stats->cleanstdev),</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                                <span class="stringliteral">"sinfo_medianImage failed (2)"</span>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       cknull(med[0] = sinfo_new_median_image(threshIm, -cfg->factor),</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>          <span class="stringliteral">" sinfo_medianImage failed (1)"</span> ) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>       <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     cknull(med[i+1] = sinfo_new_median_image(med[i], -cfg->factor),</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>            <span class="stringliteral">" sinfo_medianImage failed (%d)"</span>,i ) ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 2) {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     cknull(med[0] = sinfo_new_abs_dist_image(threshIm, -cfg->factor),</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>        <span class="stringliteral">" sinfo_absDistImage failed (1)"</span> ) ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations -1 ; i++ ) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       cknull(med[i+1] = sinfo_new_abs_dist_image(med[i], -cfg->factor),</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>          <span class="stringliteral">" sinfo_absDistImage failed (2)"</span> ) ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 3) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cknull(med[0] = sinfo_new_mean_image_in_spec(threshIm, </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                                            -cfg->factor*stats->cleanstdev),</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                                        <span class="stringliteral">"sinfo_meanImageInSpec failed (1)"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       cknull(med[i+1] = sinfo_new_mean_image_in_spec(med[i], </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                                                -cfg->factor*stats->cleanstdev),</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                          <span class="stringliteral">" sinfo_meanImageInSpec failed (2)"</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->methodInd == 4) {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     half_box_size = (cfg->urx - cfg->llx) / 2 ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cknull(med[0] = sinfo_new_local_median_image(threshIm, </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                        -cfg->factor,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                        cfg->loReject,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                        cfg->hiReject,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                        half_box_size),</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>        <span class="stringliteral">" sinfo_localMedianImage failed (1)"</span> ) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->iterations - 1 ; i++ ) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       cknull(med[i+1] = sinfo_new_local_median_image(med[i],</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                            -cfg->factor,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                            cfg->loReject,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                            cfg->hiReject,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                            half_box_size),</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>          <span class="stringliteral">" sinfo_localMedianImage failed (2)"</span> ) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong indicator methodInd !"</span> ) ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="comment">/* compare the filtered image with the input image */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   cknull(compImage = sinfo_new_compare_images(threshIm, </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                               med[cfg->iterations - 1], </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                               medImage),</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                               <span class="stringliteral">" sinfo_compareImages failed"</span> ) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="comment">/* generate the bad pixel mask */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   sinfo_msg(<span class="stringliteral">"Generates bad pixel map"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   cknull(maskImage = sinfo_new_promote_image_to_mask( compImage, &n ),</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>      <span class="stringliteral">" error in sinfo_promoteImageToMask"</span> ) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   sinfo_msg(<span class="stringliteral">"No of bad pixels:  %d\n"</span>, n ) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   snprintf(key_value, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"QC BP-MAP METHOD"</span>,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                                    key_value,<span class="stringliteral">"BP search method"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                                            <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     ck0(sinfo_pro_save_ima(maskImage,ref_set,sof,cfg->outName,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                procatg,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   sinfo_free_image(&maskImage);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   sinfo_free_image(&compImage);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   sinfo_free_image_array(&med,cfg->iterations);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">  if (med != NULL) {</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">    for ( i = 0 ; i < cfg->iterations ; i++ ) {</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">      if(med[i] != NULL) {</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">    cpl_image_delete(med[i]) ;</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">    med[i]=NULL;</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">    cpl_free(med) ; </span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">    med=NULL;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">if</span> (stats != NULL) {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     cpl_free(stats) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     stats=NULL;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   sinfo_free_image(&medIm);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   sinfo_free_image(&medImage);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   sinfo_free_image(&colImage);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="keywordflow">if</span> (cfg->threshInd == 1 ) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     sinfo_free_image(&threshIm);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   sinfo_badnorm_free(&cfg) ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>  cleanup:</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   sinfo_free_image_array(&med,cfg->iterations);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">  if (med != NULL) {</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">    for ( i = 0 ; i < cfg->iterations ; i++ ) {</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">      if(med[i] != NULL) {</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">    cpl_image_delete(med[i]) ;</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">    med[i]=NULL;</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">    cpl_free(med) ; </span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">         med=NULL;</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   sinfo_free_image(&compImage) ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   sinfo_free_image(&maskImage) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   sinfo_free_image(&threshIm) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   sinfo_free_image(&threshIm) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   <span class="keywordflow">if</span> (stats != NULL) {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     cpl_free(stats) ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     stats=NULL;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   sinfo_free_image(&medIm);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   sinfo_free_image(&medImage);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   sinfo_free_image(&colImage);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   sinfo_free_imagelist(&image_list) ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   sinfo_badnorm_free(&cfg);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__norm_8h_source.html b/html/sinfo__bp__norm_8h_source.html
index f39e33b..828558c 100644
--- a/html/sinfo__bp__norm_8h_source.html
+++ b/html/sinfo__bp__norm_8h_source.html
@@ -2,69 +2,100 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_norm.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_norm.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_BP_NORM_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NORM_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_bp_norm.h,v 1.4 2007/09/21 14:13:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * bp_norm.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routine to search for bad pixels</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00044"></a>00044 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keywordtype">int</span> 
-<a name="l00047"></a>00047 sinfo_new_bp_search_normal (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00048"></a>00048                             cpl_parameterlist* config, 
-<a name="l00049"></a>00049                             cpl_frameset* <span class="keyword">set</span>, 
-<a name="l00050"></a>00050                             cpl_frameset* ref_set, 
-<a name="l00051"></a>00051                             <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg);
-<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_norm.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_BP_NORM_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NORM_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_bp_norm.h,v 1.4 2007/09/21 14:13:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * bp_norm.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routine to search for bad pixels</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> sinfo_new_bp_search_normal (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                             cpl_parameterlist* config, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                             cpl_frameset* <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                             cpl_frameset* ref_set, </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                             <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__norm__config_8c_source.html b/html/sinfo__bp__norm__config_8c_source.html
index 71c9dc3..0505f5e 100644
--- a/html/sinfo__bp__norm__config_8c_source.html
+++ b/html/sinfo__bp__norm__config_8c_source.html
@@ -2,270 +2,301 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_norm_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_norm_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_norm_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_bp_norm_config.h"</span>
-<a name="l00052"></a>00052   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">void</span>
-<a name="l00055"></a><a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0">00055</a>  <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(cpl_parameterlist *list)
-<a name="l00056"></a>00056 {
-<a name="l00057"></a>00057   cpl_parameter *p;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keywordflow">if</span> (!list) {
-<a name="l00060"></a>00060     <span class="keywordflow">return</span>;
-<a name="l00061"></a>00061   }
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064  
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span>
-<a name="l00067"></a>00067 <span class="comment">   to the column intensity */</span>
-<a name="l00068"></a>00068   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.sigma_factor"</span>,
-<a name="l00069"></a>00069                   CPL_TYPE_DOUBLE,
-<a name="l00070"></a>00070                               <span class="stringliteral">"Threshold Sigma Factor: "</span>
-<a name="l00071"></a>00071                               <span class="stringliteral">"to remove the column intensity tilt only "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"pixels which lie within a defined noise"</span>
-<a name="l00073"></a>00073                               <span class="stringliteral">"limit are used to fit a straight line"</span>,
-<a name="l00074"></a>00074                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00075"></a>00075                               5.0);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-s_factor"</span>);
-<a name="l00078"></a>00078   cpl_parameterlist_append(list, p);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080   <span class="comment">/* bad pixel search determination method */</span>
-<a name="l00081"></a>00081  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_norm.method_index"</span>,
-<a name="l00082"></a>00082                   CPL_TYPE_INT,
-<a name="l00083"></a>00083                               <span class="stringliteral">"Bad pixel Method Index"</span>
-<a name="l00084"></a>00084                               <span class="stringliteral">"1: median of nearest neighbors,"</span>
-<a name="l00085"></a>00085                               <span class="stringliteral">"2: absolute distances check, "</span>
-<a name="l00086"></a>00086                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,
-<a name="l00087"></a>00087                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00088"></a>00088                               1,
-<a name="l00089"></a>00089                               3,1,2,3);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-method_ind"</span>);
-<a name="l00092"></a>00092   cpl_parameterlist_append(list, p);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span>
-<a name="l00095"></a>00095 <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span>
-<a name="l00096"></a>00096 <span class="comment">     a pixel as bad */</span>
-<a name="l00097"></a>00097   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.factor"</span>,
-<a name="l00098"></a>00098                   CPL_TYPE_DOUBLE,
-<a name="l00099"></a>00099                               <span class="stringliteral">"Factor: "</span>
-<a name="l00100"></a>00100            <span class="stringliteral">"if |pixel - median| > factor * standard deviation -> "</span>
-<a name="l00101"></a>00101                               <span class="stringliteral">"then the pixel value is replaced by "</span>
-<a name="l00102"></a>00102                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,
-<a name="l00103"></a>00103                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00104"></a>00104                               10.0);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-fct"</span>);
-<a name="l00107"></a>00107   cpl_parameterlist_append(list, p);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109  <span class="comment">/* no of iterations to find bad pix clusters */</span>
-<a name="l00110"></a>00110   <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00111"></a>00111   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.iterations"</span>,
-<a name="l00112"></a>00112                   CPL_TYPE_INT,
-<a name="l00113"></a>00113                               <span class="stringliteral">"Iterations: number of iterations to of median"</span>
-<a name="l00114"></a>00114                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,
-<a name="l00115"></a>00115                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00116"></a>00116                               8);
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-it"</span>);
-<a name="l00119"></a>00119   cpl_parameterlist_append(list, p);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="comment">/* float </span>
-<a name="l00122"></a>00122 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00123"></a>00123 <span class="comment">     low and high frame */</span>
-<a name="l00124"></a>00124  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00125"></a>00125 <span class="comment">    and stdev */</span>
-<a name="l00126"></a>00126   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.low_rejection"</span>,
-<a name="l00127"></a>00127                   CPL_TYPE_DOUBLE,
-<a name="l00128"></a>00128                               <span class="stringliteral">"low_rejection: "</span>
-<a name="l00129"></a>00129                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00130"></a>00130                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00131"></a>00131                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00132"></a>00132                               0.1,0.0,1.0);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-lo_rej"</span>);
-<a name="l00135"></a>00135   cpl_parameterlist_append(list, p);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137   <span class="comment">/* float </span>
-<a name="l00138"></a>00138 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00139"></a>00139 <span class="comment">     low and high frame */</span>
-<a name="l00140"></a>00140  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00141"></a>00141 <span class="comment">    and stdev */</span>
-<a name="l00142"></a>00142   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.high_rejection"</span>,
-<a name="l00143"></a>00143                   CPL_TYPE_DOUBLE,
-<a name="l00144"></a>00144                               <span class="stringliteral">"high_rejection: "</span>
-<a name="l00145"></a>00145                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00146"></a>00146                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00147"></a>00147                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00148"></a>00148                               0.1,0.0,1.0);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-hi_rej"</span>);
-<a name="l00151"></a>00151   cpl_parameterlist_append(list, p);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   <span class="comment">/* position in the frame lower left in X */</span>
-<a name="l00155"></a>00155   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00156"></a>00156 <span class="comment">     image statistics are computed */</span>
-<a name="l00157"></a>00157   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.llx"</span>,
-<a name="l00158"></a>00158                   CPL_TYPE_INT,
-<a name="l00159"></a>00159                               <span class="stringliteral">"llx: "</span>
-<a name="l00160"></a>00160                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00161"></a>00161                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00162"></a>00162                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00163"></a>00163                               <span class="stringliteral">"lower left x coordinate"</span>,
-<a name="l00164"></a>00164                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00165"></a>00165                               270,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-llx"</span>);
-<a name="l00168"></a>00168   cpl_parameterlist_append(list, p);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   <span class="comment">/* position in the frame lower left in Y */</span>
-<a name="l00173"></a>00173   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00174"></a>00174 <span class="comment">     image statistics are computed */</span>
-<a name="l00175"></a>00175   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.lly"</span>,
-<a name="l00176"></a>00176                   CPL_TYPE_INT,
-<a name="l00177"></a>00177                               <span class="stringliteral">"lly: "</span>
-<a name="l00178"></a>00178                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00179"></a>00179                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00180"></a>00180                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00181"></a>00181                               <span class="stringliteral">"lower left y coordinate"</span>,
-<a name="l00182"></a>00182                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00183"></a>00183                               LLY,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-lly"</span>);
-<a name="l00186"></a>00186   cpl_parameterlist_append(list, p);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188   <span class="comment">/* Upper right position in CCD : should be urx */</span>
-<a name="l00189"></a>00189   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00190"></a>00190 <span class="comment">    image statistics are computed */</span>
-<a name="l00191"></a>00191   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.urx"</span>,
-<a name="l00192"></a>00192                   CPL_TYPE_INT,
-<a name="l00193"></a>00193                               <span class="stringliteral">"urx: "</span>
-<a name="l00194"></a>00194                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00195"></a>00195                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00196"></a>00196                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00197"></a>00197                               <span class="stringliteral">"upper right x coordinate"</span>,
-<a name="l00198"></a>00198                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00199"></a>00199                               310,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-urx"</span>);
-<a name="l00202"></a>00202   cpl_parameterlist_append(list, p);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204   <span class="comment">/* Upper right position in CCD : should be ury */</span>
-<a name="l00205"></a>00205   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00206"></a>00206 <span class="comment">    image statistics are computed */</span>
-<a name="l00207"></a>00207   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.ury"</span>,
-<a name="l00208"></a>00208                   CPL_TYPE_INT,
-<a name="l00209"></a>00209                               <span class="stringliteral">"ury: "</span>
-<a name="l00210"></a>00210                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00211"></a>00211                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00212"></a>00212                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00213"></a>00213                               <span class="stringliteral">"upper right y coordinate"</span>,
-<a name="l00214"></a>00214                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00215"></a>00215                               URY,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-ury"</span>);
-<a name="l00218"></a>00218   cpl_parameterlist_append(list, p);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span>
-<a name="l00221"></a>00221   <span class="comment">/* indicates if the values beyond threshold values should be marked </span>
-<a name="l00222"></a>00222 <span class="comment">     as bad before proceeding to sinfo_median filtering */</span>
-<a name="l00223"></a>00223   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.threshold_index"</span>,
-<a name="l00224"></a>00224                   CPL_TYPE_BOOL,
-<a name="l00225"></a>00225                               <span class="stringliteral">"Threshold Index: "</span>
-<a name="l00226"></a>00226                               <span class="stringliteral">"indicator that indicates if the values "</span>
-<a name="l00227"></a>00227                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span>
-<a name="l00228"></a>00228                               <span class="stringliteral">"are flagged as bad pixels"</span>,
-<a name="l00229"></a>00229                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00230"></a>00230                               TRUE);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-thr_ind"</span>);
-<a name="l00233"></a>00233   cpl_parameterlist_append(list, p);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span>
-<a name="l00236"></a>00236   <span class="comment">/* factor to the clean standard deviation to define the threshold </span>
-<a name="l00237"></a>00237 <span class="comment">     deviation from the clean mean */</span>
-<a name="l00238"></a>00238   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.mean_factor"</span>,
-<a name="l00239"></a>00239                   CPL_TYPE_DOUBLE,
-<a name="l00240"></a>00240                               <span class="stringliteral">"Mean Factor: "</span>
-<a name="l00241"></a>00241                               <span class="stringliteral">"factor to the clean standard deviation to "</span>
-<a name="l00242"></a>00242                               <span class="stringliteral">"define the threshold deviation from the "</span>
-<a name="l00243"></a>00243                               <span class="stringliteral">"clean mean"</span>,
-<a name="l00244"></a>00244                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00245"></a>00245                               100.,0.1,1.e10);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-mean_fct"</span>);
-<a name="l00248"></a>00248   cpl_parameterlist_append(list, p);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.min_cut"</span>,
-<a name="l00253"></a>00253                   CPL_TYPE_DOUBLE,
-<a name="l00254"></a>00254                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00255"></a>00255                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00256"></a>00256                               0.0);
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-min_cut"</span>);
-<a name="l00259"></a>00259   cpl_parameterlist_append(list, p);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.max_cut"</span>,
-<a name="l00263"></a>00263                   CPL_TYPE_DOUBLE,
-<a name="l00264"></a>00264                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00265"></a>00265                               <span class="stringliteral">"sinfoni.bp_norm"</span>,
-<a name="l00266"></a>00266                               50000.);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-max_cut"</span>);
-<a name="l00269"></a>00269   cpl_parameterlist_append(list, p);
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   <span class="keywordflow">return</span>;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_norm_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_norm_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_bp_norm_config.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0">   55</a></span>  <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   to the column intensity */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.sigma_factor"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"Threshold Sigma Factor: "</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"to remove the column intensity tilt only "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"pixels which lie within a defined noise"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"limit are used to fit a straight line"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                               5.0);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-s_factor"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="comment">/* bad pixel search determination method */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_norm.method_index"</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"Bad pixel Method Index"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"1: median of nearest neighbors,"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"2: absolute distances check, "</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                               1,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                               3,1,2,3);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-method_ind"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">     a pixel as bad */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.factor"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                               <span class="stringliteral">"Factor: "</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>            <span class="stringliteral">"if |pixel - median| > factor * standard deviation -> "</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                               <span class="stringliteral">"then the pixel value is replaced by "</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                               10.0);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-fct"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>  <span class="comment">/* no of iterations to find bad pix clusters */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.iterations"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               <span class="stringliteral">"Iterations: number of iterations to of median"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                               8);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-it"</span>);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.low_rejection"</span>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                               <span class="stringliteral">"low_rejection: "</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-lo_rej"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.high_rejection"</span>,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                               <span class="stringliteral">"high_rejection: "</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-hi_rej"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="comment">/* position in the frame lower left in X */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.llx"</span>,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                               <span class="stringliteral">"llx: "</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                               <span class="stringliteral">"lower left x coordinate"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                               270,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-llx"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="comment">/* position in the frame lower left in Y */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.lly"</span>,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                               <span class="stringliteral">"lly: "</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"lower left y coordinate"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                               LLY,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-lly"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   <span class="comment">/* Upper right position in CCD : should be urx */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.urx"</span>,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                               <span class="stringliteral">"urx: "</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               <span class="stringliteral">"upper right x coordinate"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                               310,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-urx"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="comment">/* Upper right position in CCD : should be ury */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.ury"</span>,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"ury: "</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                               <span class="stringliteral">"upper right y coordinate"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               URY,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-ury"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="comment">/* indicates if the values beyond threshold values should be marked </span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">     as bad before proceeding to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.threshold_index"</span>,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="stringliteral">"Threshold Index: "</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                               <span class="stringliteral">"indicator that indicates if the values "</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                               <span class="stringliteral">"are flagged as bad pixels"</span>,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                               TRUE);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-thr_ind"</span>);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="comment">/* factor to the clean standard deviation to define the threshold </span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">     deviation from the clean mean */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_norm.mean_factor"</span>,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"Mean Factor: "</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="stringliteral">"factor to the clean standard deviation to "</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                               <span class="stringliteral">"define the threshold deviation from the "</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                               <span class="stringliteral">"clean mean"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                               100.,0.1,1.e10);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-mean_fct"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.min_cut"</span>,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                               0.0);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-min_cut"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_norm.max_cut"</span>,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                               <span class="stringliteral">"sinfoni.bp_norm"</span>,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                               50000.);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_norm-max_cut"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__norm__config_8h_source.html b/html/sinfo__bp__norm__config_8h_source.html
index bbd1e5f..aefa6b8 100644
--- a/html/sinfo__bp__norm__config_8h_source.html
+++ b/html/sinfo__bp__norm__config_8h_source.html
@@ -2,56 +2,87 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_norm_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_norm_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_norm_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_NORM_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NORM_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>  
-<a name="l00034"></a>00034 <span class="comment">/*</span>
-<a name="l00035"></a>00035 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(cpl_parameterlist *list);
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_norm_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_norm_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_NORM_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_NORM_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__sky__config_8c_source.html b/html/sinfo__bp__sky__config_8c_source.html
index 9abe884..d008156 100644
--- a/html/sinfo__bp__sky__config_8c_source.html
+++ b/html/sinfo__bp__sky__config_8c_source.html
@@ -2,280 +2,311 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_sky_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_sky_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_sky_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_bp_sky_config.h"</span>
-<a name="l00052"></a>00052   <span class="comment">/* Bad pixel parameters */</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">void</span>
-<a name="l00055"></a><a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb">00055</a>  <a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb" title="Adds parameters for the spectrum extraction.">sinfo_bp_sky_config_add</a>(cpl_parameterlist *list)
-<a name="l00056"></a>00056 {
-<a name="l00057"></a>00057   cpl_parameter *p;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="keywordflow">if</span> (!list) {
-<a name="l00060"></a>00060     <span class="keywordflow">return</span>;
-<a name="l00061"></a>00061   }
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   <span class="comment">/* Output file name */</span>
-<a name="l00065"></a>00065   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.out_filename"</span>,
-<a name="l00066"></a>00066                   CPL_TYPE_STRING,
-<a name="l00067"></a>00067                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00068"></a>00068                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00069"></a>00069                               <span class="stringliteral">"out_bp_sky.fits"</span>);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"out-bp_sky_filename"</span>);
-<a name="l00073"></a>00073   cpl_parameterlist_append(list, p);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span>
-<a name="l00077"></a>00077 <span class="comment">   to the column intensity */</span>
-<a name="l00078"></a>00078   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.sigma_factor"</span>,
-<a name="l00079"></a>00079                   CPL_TYPE_DOUBLE,
-<a name="l00080"></a>00080                               <span class="stringliteral">"Threshold Sigma Factor: "</span>
-<a name="l00081"></a>00081                               <span class="stringliteral">"to remove the column intensity tilt only "</span>
-<a name="l00082"></a>00082                               <span class="stringliteral">"pixels which lie within a defined noise"</span>
-<a name="l00083"></a>00083                               <span class="stringliteral">"limit are used to fit a straight line"</span>,
-<a name="l00084"></a>00084                               <span class="stringliteral">"sinfoni.bp_noise"</span>,
-<a name="l00085"></a>00085                               5.0);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-s_factor"</span>);
-<a name="l00088"></a>00088   cpl_parameterlist_append(list, p);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   <span class="comment">/* bad pixel search determination method */</span>
-<a name="l00091"></a>00091  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_sky.method_index"</span>,
-<a name="l00092"></a>00092                   CPL_TYPE_INT,
-<a name="l00093"></a>00093                               <span class="stringliteral">"Bad pixel Method Index"</span>
-<a name="l00094"></a>00094                               <span class="stringliteral">"1: median of nearest neighbors,"</span>
-<a name="l00095"></a>00095                               <span class="stringliteral">"2: absolute distances check, "</span>
-<a name="l00096"></a>00096                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,
-<a name="l00097"></a>00097                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00098"></a>00098                               1,
-<a name="l00099"></a>00099                               3,1,2,3);
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-method_ind"</span>);
-<a name="l00102"></a>00102   cpl_parameterlist_append(list, p);
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span>
-<a name="l00105"></a>00105 <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span>
-<a name="l00106"></a>00106 <span class="comment">     a pixel as bad */</span>
-<a name="l00107"></a>00107   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.factor"</span>,
-<a name="l00108"></a>00108                   CPL_TYPE_DOUBLE,
-<a name="l00109"></a>00109                               <span class="stringliteral">"Factor: "</span>
-<a name="l00110"></a>00110            <span class="stringliteral">"if |pixel - sinfo_median| > factor * standard deviation -> "</span>
-<a name="l00111"></a>00111                               <span class="stringliteral">"then the pixel value is replaced by "</span>
-<a name="l00112"></a>00112                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,
-<a name="l00113"></a>00113                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00114"></a>00114                               3.0);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-fct"</span>);
-<a name="l00117"></a>00117   cpl_parameterlist_append(list, p);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119  <span class="comment">/* no of iterations to find bad pix clusters */</span>
-<a name="l00120"></a>00120   <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00121"></a>00121   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.iterations"</span>,
-<a name="l00122"></a>00122                   CPL_TYPE_INT,
-<a name="l00123"></a>00123                               <span class="stringliteral">"Iterations: number of iterations to of median"</span>
-<a name="l00124"></a>00124                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,
-<a name="l00125"></a>00125                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00126"></a>00126                               8);
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-it"</span>);
-<a name="l00129"></a>00129   cpl_parameterlist_append(list, p);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   <span class="comment">/* float </span>
-<a name="l00132"></a>00132 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00133"></a>00133 <span class="comment">     low and high frame */</span>
-<a name="l00134"></a>00134  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00135"></a>00135 <span class="comment">    and stdev */</span>
-<a name="l00136"></a>00136   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.low_rejection"</span>,
-<a name="l00137"></a>00137                   CPL_TYPE_DOUBLE,
-<a name="l00138"></a>00138                               <span class="stringliteral">"low_rejection: "</span>
-<a name="l00139"></a>00139                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00140"></a>00140                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00141"></a>00141                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00142"></a>00142                               0.1,0.0,1.0);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-low_rej"</span>);
-<a name="l00145"></a>00145   cpl_parameterlist_append(list, p);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147   <span class="comment">/* float </span>
-<a name="l00148"></a>00148 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00149"></a>00149 <span class="comment">     low and high frame */</span>
-<a name="l00150"></a>00150  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00151"></a>00151 <span class="comment">    and stdev */</span>
-<a name="l00152"></a>00152   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.high_rejection"</span>,
-<a name="l00153"></a>00153                   CPL_TYPE_DOUBLE,
-<a name="l00154"></a>00154                               <span class="stringliteral">"high_rejection: "</span>
-<a name="l00155"></a>00155                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00156"></a>00156                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00157"></a>00157                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00158"></a>00158                               0.1,0.0,1.0);
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-upp_rej"</span>);
-<a name="l00161"></a>00161   cpl_parameterlist_append(list, p);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164   <span class="comment">/* position in the frame lower left in X */</span>
-<a name="l00165"></a>00165   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00166"></a>00166 <span class="comment">     image statistics are computed */</span>
-<a name="l00167"></a>00167   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.llx"</span>,
-<a name="l00168"></a>00168                   CPL_TYPE_INT,
-<a name="l00169"></a>00169                               <span class="stringliteral">"llx: "</span>
-<a name="l00170"></a>00170                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00171"></a>00171                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00172"></a>00172                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00173"></a>00173                               <span class="stringliteral">"lower left x coordinate"</span>,
-<a name="l00174"></a>00174                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00175"></a>00175                               LLX,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-llx"</span>);
-<a name="l00178"></a>00178   cpl_parameterlist_append(list, p);
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182   <span class="comment">/* position in the frame lower left in Y */</span>
-<a name="l00183"></a>00183   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span>
-<a name="l00184"></a>00184 <span class="comment">     image statistics are computed */</span>
-<a name="l00185"></a>00185   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.lly"</span>,
-<a name="l00186"></a>00186                   CPL_TYPE_INT,
-<a name="l00187"></a>00187                               <span class="stringliteral">"lly: "</span>
-<a name="l00188"></a>00188                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00189"></a>00189                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00190"></a>00190                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00191"></a>00191                               <span class="stringliteral">"lower left y coordinate"</span>,
-<a name="l00192"></a>00192                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00193"></a>00193                               LLY,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-lly"</span>);
-<a name="l00196"></a>00196   cpl_parameterlist_append(list, p);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   <span class="comment">/* Upper right position in CCD : should be urx */</span>
-<a name="l00199"></a>00199   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00200"></a>00200 <span class="comment">    image statistics are computed */</span>
-<a name="l00201"></a>00201   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.urx"</span>,
-<a name="l00202"></a>00202                   CPL_TYPE_INT,
-<a name="l00203"></a>00203                               <span class="stringliteral">"urx: "</span>
-<a name="l00204"></a>00204                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00205"></a>00205                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00206"></a>00206                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00207"></a>00207                               <span class="stringliteral">"upper right x coordinate"</span>,
-<a name="l00208"></a>00208                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00209"></a>00209                               URX,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-urx"</span>);
-<a name="l00212"></a>00212   cpl_parameterlist_append(list, p);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   <span class="comment">/* Upper right position in CCD : should be ury */</span>
-<a name="l00215"></a>00215   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span>
-<a name="l00216"></a>00216 <span class="comment">    image statistics are computed */</span>
-<a name="l00217"></a>00217   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.ury"</span>,
-<a name="l00218"></a>00218                   CPL_TYPE_INT,
-<a name="l00219"></a>00219                               <span class="stringliteral">"ury: "</span>
-<a name="l00220"></a>00220                               <span class="stringliteral">"to compute image statistics on a rectangular"</span>
-<a name="l00221"></a>00221                               <span class="stringliteral">"zone of the image the coordinates of the "</span>
-<a name="l00222"></a>00222                               <span class="stringliteral">"rectangle are needed:"</span> 
-<a name="l00223"></a>00223                               <span class="stringliteral">"upper right y coordinate"</span>,
-<a name="l00224"></a>00224                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00225"></a>00225                               URY,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-ury"</span>);
-<a name="l00228"></a>00228   cpl_parameterlist_append(list, p);
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span>
-<a name="l00231"></a>00231   <span class="comment">/* indicates if the values beyond threshold values should be marked </span>
-<a name="l00232"></a>00232 <span class="comment">     as bad before proceeding to sinfo_median filtering */</span>
-<a name="l00233"></a>00233   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.threshold_index"</span>,
-<a name="l00234"></a>00234                   CPL_TYPE_BOOL,
-<a name="l00235"></a>00235                               <span class="stringliteral">"Threshold Index: "</span>
-<a name="l00236"></a>00236                               <span class="stringliteral">"indicator that indicates if the values "</span>
-<a name="l00237"></a>00237                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span>
-<a name="l00238"></a>00238                               <span class="stringliteral">"are flagged as bad pixels"</span>,
-<a name="l00239"></a>00239                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00240"></a>00240                               TRUE);
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-thr-ind"</span>);
-<a name="l00243"></a>00243   cpl_parameterlist_append(list, p);
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span>
-<a name="l00246"></a>00246   <span class="comment">/* factor to the clean standard deviation to define the threshold </span>
-<a name="l00247"></a>00247 <span class="comment">     deviation from the clean mean */</span>
-<a name="l00248"></a>00248   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.mean_factor"</span>,
-<a name="l00249"></a>00249                   CPL_TYPE_DOUBLE,
-<a name="l00250"></a>00250                               <span class="stringliteral">"Mean Factor: "</span>
-<a name="l00251"></a>00251                               <span class="stringliteral">"factor to the clean standard deviation to "</span>
-<a name="l00252"></a>00252                               <span class="stringliteral">"define the threshold deviation from the "</span>
-<a name="l00253"></a>00253                               <span class="stringliteral">"clean mean"</span>,
-<a name="l00254"></a>00254                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00255"></a>00255                               10.,0.1,1.e10);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-mean-fct"</span>);
-<a name="l00258"></a>00258   cpl_parameterlist_append(list, p);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.min_cut"</span>,
-<a name="l00263"></a>00263                   CPL_TYPE_DOUBLE,
-<a name="l00264"></a>00264                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00265"></a>00265                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00266"></a>00266                               0.1);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-min_cut"</span>);
-<a name="l00269"></a>00269   cpl_parameterlist_append(list, p);
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.max_cut"</span>,
-<a name="l00273"></a>00273                   CPL_TYPE_DOUBLE,
-<a name="l00274"></a>00274                               <span class="stringliteral">"the minimum value of real data"</span>,
-<a name="l00275"></a>00275                               <span class="stringliteral">"sinfoni.bp_sky"</span>,
-<a name="l00276"></a>00276                               50000.);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-max_cut"</span>);
-<a name="l00279"></a>00279   cpl_parameterlist_append(list, p);
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   <span class="keywordflow">return</span>;
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_sky_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_sky_config.c,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_bp_sky_config.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* Bad pixel parameters */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb">   55</a></span>  <a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb" title="Adds parameters for the spectrum extraction.">sinfo_bp_sky_config_add</a>(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.out_filename"</span>,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="stringliteral">"out_bp_sky.fits"</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"out-bp_sky_filename"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/* factor of noise within which the pixels are used to fit a straight line </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">   to the column intensity */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.sigma_factor"</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"Threshold Sigma Factor: "</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="stringliteral">"to remove the column intensity tilt only "</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"pixels which lie within a defined noise"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"limit are used to fit a straight line"</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"sinfoni.bp_noise"</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               5.0);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-s_factor"</span>);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="comment">/* bad pixel search determination method */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.bp_sky.method_index"</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="stringliteral">"Bad pixel Method Index"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               <span class="stringliteral">"1: median of nearest neighbors,"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               <span class="stringliteral">"2: absolute distances check, "</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                               <span class="stringliteral">"3: mean of nearest spectral neighbors"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               1,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                               3,1,2,3);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-method_ind"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="comment">/* factor of calculated standard deviation beyond which the deviation </span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">     of a pixel value from the median of the 8 nearest neighbors declares </span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">     a pixel as bad */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.factor"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"Factor: "</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>            <span class="stringliteral">"if |pixel - sinfo_median| > factor * standard deviation -> "</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                               <span class="stringliteral">"then the pixel value is replaced by "</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"the median of the 8 nearest neighbors"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               3.0);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-fct"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>  <span class="comment">/* no of iterations to find bad pix clusters */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.iterations"</span>,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"Iterations: number of iterations to of median"</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                               <span class="stringliteral">" filtering to find bad pixel clusters"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                               8);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-it"</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.low_rejection"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"low_rejection: "</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-low_rej"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.high_rejection"</span>,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                               <span class="stringliteral">"high_rejection: "</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-upp_rej"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="comment">/* position in the frame lower left in X */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.llx"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                               <span class="stringliteral">"llx: "</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                               <span class="stringliteral">"lower left x coordinate"</span>,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                               LLX,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-llx"</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="comment">/* position in the frame lower left in Y */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="comment">/* pixel coordinate of lower left sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">     image statistics are computed */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.lly"</span>,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                               <span class="stringliteral">"lly: "</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                               <span class="stringliteral">"lower left y coordinate"</span>,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                               LLY,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-lly"</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="comment">/* Upper right position in CCD : should be urx */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.urx"</span>,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                               <span class="stringliteral">"urx: "</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                               <span class="stringliteral">"upper right x coordinate"</span>,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               URX,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-urx"</span>);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="comment">/* Upper right position in CCD : should be ury */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="comment">/* pixel coordinate of upper right sinfo_edge of a rectangle zone from which </span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">    image statistics are computed */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.ury"</span>,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                               <span class="stringliteral">"ury: "</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                               <span class="stringliteral">"to compute image statistics on a rectangular"</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                               <span class="stringliteral">"zone of the image the coordinates of the "</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                               <span class="stringliteral">"rectangle are needed:"</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                               <span class="stringliteral">"upper right y coordinate"</span>,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               URY,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-ury"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="comment">/* boolean (implemented as integer) useda s a switch */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="comment">/* indicates if the values beyond threshold values should be marked </span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">     as bad before proceeding to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.threshold_index"</span>,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                               <span class="stringliteral">"Threshold Index: "</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                               <span class="stringliteral">"indicator that indicates if the values "</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                               <span class="stringliteral">"beyond a threshold deviation from the mean "</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                               <span class="stringliteral">"are flagged as bad pixels"</span>,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               TRUE);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-thr-ind"</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="comment">/* threshold value. Float. Threshold used to find bad pixel */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="comment">/* factor to the clean standard deviation to define the threshold </span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">     deviation from the clean mean */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.bp_sky.mean_factor"</span>,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                               <span class="stringliteral">"Mean Factor: "</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                               <span class="stringliteral">"factor to the clean standard deviation to "</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                               <span class="stringliteral">"define the threshold deviation from the "</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                               <span class="stringliteral">"clean mean"</span>,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               10.,0.1,1.e10);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-mean-fct"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.min_cut"</span>,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                               0.1);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-min_cut"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.bp_sky.max_cut"</span>,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                               <span class="stringliteral">"the minimum value of real data"</span>,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                               <span class="stringliteral">"sinfoni.bp_sky"</span>,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                               50000.);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"bp_sky-max_cut"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__bp__sky__config_8h_source.html b/html/sinfo__bp__sky__config_8h_source.html
index be64835..75d2fc6 100644
--- a/html/sinfo__bp__sky__config_8h_source.html
+++ b/html/sinfo__bp__sky__config_8h_source.html
@@ -2,53 +2,84 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_bp_sky_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_bp_sky_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_bp_sky_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_BP_SKY_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_SKY_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "cpl.h"</span>  
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb" title="Adds parameters for the spectrum extraction.">sinfo_bp_sky_config_add</a>(cpl_parameterlist *list);
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_bp_sky_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_bp_sky_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_BP_SKY_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BP_SKY_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "cpl.h"</span>  </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__bad__pix__search.html#gaba8d9bda2f23ab3e4218598434a3ceeb" title="Adds parameters for the spectrum extraction.">sinfo_bp_sky_config_add</a>(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__coltilt_8c_source.html b/html/sinfo__coltilt_8c_source.html
index 944eb53..891e3da 100644
--- a/html/sinfo__coltilt_8c_source.html
+++ b/html/sinfo__coltilt_8c_source.html
@@ -2,1128 +2,1159 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_coltilt.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_coltilt.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*******************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  19/12/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_coltilt.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        procedures to correct for tilted spectra </span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*   1) float sinfo_new_slope_of_spectrum(cpl_image * ns_image,</span>
-<a name="l00036"></a>00036 <span class="comment">*                             int        box_length,</span>
-<a name="l00037"></a>00037 <span class="comment">*                             float      fwhm,</span>
-<a name="l00038"></a>00038 <span class="comment">*                             float      minDiff )</span>
-<a name="l00039"></a>00039 <span class="comment">*   2) cpl_image * sinfo_new_shift_rows(cpl_image * image,</span>
-<a name="l00040"></a>00040 <span class="comment">*                            float      slope )</span>
-<a name="l00041"></a>00041 <span class="comment">*   3) void sinfo_new_parameter_to_ascii ( float * parameter, </span>
-<a name="l00042"></a>00042 <span class="comment">*                              int n,</span>
-<a name="l00043"></a>00043 <span class="comment">*                              char * filename )</span>
-<a name="l00044"></a>00044 <span class="comment">*   4) float * sinfo_new_ascii_to_parameter ( char * filename,</span>
-<a name="l00045"></a>00045 <span class="comment">*                                 int * n )</span>
-<a name="l00046"></a>00046 <span class="comment">*   5) double * sinfo_new_curvature_of_spectrum( cpl_image * ns_image,</span>
-<a name="l00047"></a>00047 <span class="comment">*                              int        order,</span>
-<a name="l00048"></a>00048 <span class="comment">*                                    int        box_length,</span>
-<a name="l00049"></a>00049 <span class="comment">*                                    int        left_pos,</span>
-<a name="l00050"></a>00050 <span class="comment">*                                    int        right_pos,</span>
-<a name="l00051"></a>00051 <span class="comment">*                                    float      fwhm,</span>
-<a name="l00052"></a>00052 <span class="comment">*                                    float      minDiff )</span>
-<a name="l00053"></a>00053 <span class="comment">*</span>
-<a name="l00054"></a>00054 <span class="comment">*</span>
-<a name="l00055"></a>00055 <span class="comment">*   DESCRIPTION</span>
-<a name="l00056"></a>00056 <span class="comment">*   1)  determines the sub-pixel shifts of each row by using</span>
-<a name="l00057"></a>00057 <span class="comment">*       an image with at least one continuum spectrum of a pinhole</span>
-<a name="l00058"></a>00058 <span class="comment">*       this is done by searching the spectrum within the image</span>
-<a name="l00059"></a>00059 <span class="comment">*       then fitting the spectrum along the rows within a given box</span>
-<a name="l00060"></a>00060 <span class="comment">*       by a sinfo_gaussian, so that the exact position is determined for</span>
-<a name="l00061"></a>00061 <span class="comment">*       each row. Afterwards, a straight line is fitted through the</span>
-<a name="l00062"></a>00062 <span class="comment">*       fitted positions. The slope of this linear fit is returned.</span>
-<a name="l00063"></a>00063 <span class="comment">*   2)  shifts the rows of a raw image by using the output of </span>
-<a name="l00064"></a>00064 <span class="comment">*       sinfo_slopeOfSpectrum and applying polynomial interpolation</span>
-<a name="l00065"></a>00065 <span class="comment">*   3)  stores parameters in an ASCII file </span>
-<a name="l00066"></a>00066 <span class="comment">*   4)  writes parameters stored in an ASCII file in an float array</span>
-<a name="l00067"></a>00067 <span class="comment">*   5)  this routine determines the curvature of a spectrum by fitting</span>
-<a name="l00068"></a>00068 <span class="comment">*       a polynomial to a continuum spectrum. This is done by using</span>
-<a name="l00069"></a>00069 <span class="comment">*       an image with at least one continuum spectrum of a pinhole.</span>
-<a name="l00070"></a>00070 <span class="comment">*       this is done by searching the spectrum within the image</span>
-<a name="l00071"></a>00071 <span class="comment">*       then fitting the spectrum along the rows within a given box</span>
-<a name="l00072"></a>00072 <span class="comment">*       by a sinfo_gaussian, so that the exact position is determined for</span>
-<a name="l00073"></a>00073 <span class="comment">*       each row. Afterwards, a polynomial is fitted through the</span>
-<a name="l00074"></a>00074 <span class="comment">*       found positions. The polynomial coefficients are returned.</span>
-<a name="l00075"></a>00075 <span class="comment">*</span>
-<a name="l00076"></a>00076 <span class="comment">*</span>
-<a name="l00077"></a>00077 <span class="comment">*   FILES</span>
-<a name="l00078"></a>00078 <span class="comment">*</span>
-<a name="l00079"></a>00079 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00080"></a>00080 <span class="comment">*</span>
-<a name="l00081"></a>00081 <span class="comment">*   RETURN VALUES</span>
-<a name="l00082"></a>00082 <span class="comment">*</span>
-<a name="l00083"></a>00083 <span class="comment">*   CAUTIONS</span>
-<a name="l00084"></a>00084 <span class="comment">*</span>
-<a name="l00085"></a>00085 <span class="comment">*   EXAMPLES</span>
-<a name="l00086"></a>00086 <span class="comment">*</span>
-<a name="l00087"></a>00087 <span class="comment">*   SEE ALSO</span>
-<a name="l00088"></a>00088 <span class="comment">*</span>
-<a name="l00089"></a>00089 <span class="comment">*   BUGS</span>
-<a name="l00090"></a>00090 <span class="comment">*</span>
-<a name="l00091"></a>00091 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00092"></a>00092 <span class="comment">*/</span>
-<a name="l00093"></a>00093 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="comment">/*</span>
-<a name="l00101"></a>00101 <span class="comment"> * System Headers</span>
-<a name="l00102"></a>00102 <span class="comment"> */</span>
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="comment">/*</span>
-<a name="l00105"></a>00105 <span class="comment"> * Local Headers</span>
-<a name="l00106"></a>00106 <span class="comment"> */</span>
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="preprocessor">#include "sinfo_coltilt.h"</span>
-<a name="l00109"></a>00109 <span class="preprocessor">#include "sinfo_new_resampling.h"</span>
-<a name="l00110"></a>00110 <span class="preprocessor">#include "sinfo_fit_curve.h"</span>
-<a name="l00111"></a>00111 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00119"></a>00119 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00120"></a>00120 <span class="comment"> *                            Function codes</span>
-<a name="l00121"></a>00121 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00122"></a>00122 
-<a name="l00143"></a>00143 <span class="keywordtype">float</span> 
-<a name="l00144"></a>00144 sinfo_new_slope_of_spectrum( cpl_image * ns_image,
-<a name="l00145"></a>00145                        <span class="keywordtype">int</span>        box_length,
-<a name="l00146"></a>00146                        <span class="keywordtype">float</span>      fwhm,
-<a name="l00147"></a>00147                        <span class="keywordtype">float</span>      minDiff )
-<a name="l00148"></a>00148 {
-<a name="l00149"></a>00149     <span class="keywordtype">int</span> i, k, row, col ;
-<a name="l00150"></a>00150     <span class="keywordtype">int</span> counter, iters ;
-<a name="l00151"></a>00151     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;
-<a name="l00152"></a>00152     <span class="keywordtype">float</span> maxval ;
-<a name="l00153"></a>00153     <span class="keywordtype">float</span> tol, lab ;
-<a name="l00154"></a>00154     <span class="keywordtype">float</span>* col_value=NULL ;
-<a name="l00155"></a>00155     <span class="keywordtype">float</span>* column_value=NULL ;
-<a name="l00156"></a>00156     pixelvalue* col_position=NULL ;
-<a name="l00157"></a>00157     <span class="keywordtype">int</span>* column_position=NULL ;
-<a name="l00158"></a>00158     <span class="keywordtype">float</span>* x_position=NULL ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keywordtype">int</span> col_median ;
-<a name="l00162"></a>00162     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l00163"></a>00163     <span class="keywordtype">int</span> * mpar ;
-<a name="l00164"></a>00164     Vector * line ;
-<a name="l00165"></a>00165     FitParams ** dec_par ;
-<a name="l00166"></a>00166     FitParams *  par ;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     <span class="keywordtype">float</span>* x=NULL; 
-<a name="l00169"></a>00169     <span class="keywordtype">float</span>* y=NULL; 
-<a name="l00170"></a>00170     <span class="keywordtype">float</span>* sig=NULL ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="keywordtype">int</span> position ;
-<a name="l00173"></a>00173     <span class="keywordtype">int</span> ndata, mwt ;
-<a name="l00174"></a>00174     <span class="keywordtype">float</span> a, b, siga, sigb, chi2, q ;
-<a name="l00175"></a>00175     <span class="keywordtype">int</span> bad_ind ;
-<a name="l00176"></a>00176     <span class="keywordtype">int</span> lx=0;
-<a name="l00177"></a>00177     <span class="keywordtype">int</span> ly=0;
-<a name="l00178"></a>00178     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <span class="keywordflow">if</span> ( ns_image == NULL )
-<a name="l00181"></a>00181     {
-<a name="l00182"></a>00182         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sorry, no image given"</span>) ;
-<a name="l00183"></a>00183         <span class="keywordflow">return</span> FLAG ;
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185     lx=cpl_image_get_size_x(ns_image);
-<a name="l00186"></a>00186     ly=cpl_image_get_size_x(ns_image);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     <span class="keywordflow">if</span> ( box_length <= 1 || box_length >= (<span class="keywordtype">int</span>) sqrt(lx) )
-<a name="l00190"></a>00190     {
-<a name="l00191"></a>00191         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong box length given"</span>) ;
-<a name="l00192"></a>00192         <span class="keywordflow">return</span> FLAG ;
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194     <span class="keywordflow">if</span> ( fwhm < 1. || fwhm > 10. )
-<a name="l00195"></a>00195     {
-<a name="l00196"></a>00196         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong full width at half maximum given"</span>) ;
-<a name="l00197"></a>00197         <span class="keywordflow">return</span> FLAG ;
-<a name="l00198"></a>00198     }
-<a name="l00199"></a>00199     <span class="keywordflow">if</span> ( minDiff < 1. )
-<a name="l00200"></a>00200     {
-<a name="l00201"></a>00201         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong amplitude threshold given"</span>) ;
-<a name="l00202"></a>00202         <span class="keywordflow">return</span> FLAG ;
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     col_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00208"></a>00208     column_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00209"></a>00209     col_position=(pixelvalue*)cpl_calloc(ly,<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00210"></a>00210     column_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l00211"></a>00211     x_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     x=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)); 
-<a name="l00216"></a>00216     y=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)); 
-<a name="l00217"></a>00217     sig=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00218"></a>00218     pdata=cpl_image_get_data_float(ns_image);
-<a name="l00219"></a>00219     <span class="comment">/* go through the image rows */</span>
-<a name="l00220"></a>00220     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )
-<a name="l00221"></a>00221     {
-<a name="l00222"></a>00222         col_value[row] = -FLT_MAX ;
-<a name="l00223"></a>00223         col_position[row] = -1. ;
-<a name="l00224"></a>00224         <span class="comment">/* find the maximum value in each row and store the found column */</span>
-<a name="l00225"></a>00225         <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )
-<a name="l00226"></a>00226         {
-<a name="l00227"></a>00227             <span class="keywordflow">if</span> ( pdata[col+row*lx] > col_value[row] )
-<a name="l00228"></a>00228             {
-<a name="l00229"></a>00229                 col_value[row]    = pdata[col+row*lx] ;
-<a name="l00230"></a>00230                 col_position[row] = (pixelvalue)col ;
-<a name="l00231"></a>00231             }
-<a name="l00232"></a>00232         }
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     <span class="comment">/* now determine the sinfo_new_median of the found columns to be sure </span>
-<a name="l00236"></a>00236 <span class="comment">       to have the brightest spectrum */</span>
-<a name="l00237"></a>00237     col_median = (int)sinfo_new_median(col_position, ly) ;
-<a name="l00238"></a>00238     sinfo_msg (<span class="stringliteral">"sinfo_new_median column position of brightest spectrum %d\n"</span>, 
-<a name="l00239"></a>00239               col_median) ;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="comment">/* now find the peaks around col_median over the whole spectral range */</span>
-<a name="l00242"></a>00242     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )
-<a name="l00243"></a>00243     {
-<a name="l00244"></a>00244         x_position[row] = 0. ;
-<a name="l00245"></a>00245         column_value[row] = -FLT_MAX ;
-<a name="l00246"></a>00246         column_position[row] = -1 ;
-<a name="l00247"></a>00247         <span class="keywordflow">for</span> ( col = col_median - box_length ; 
-<a name="l00248"></a>00248               col <= col_median + box_length ; col++ )
-<a name="l00249"></a>00249         {
-<a name="l00250"></a>00250             <span class="keywordflow">if</span> ( pdata[col+row*lx] > column_value[row] )
-<a name="l00251"></a>00251             {
-<a name="l00252"></a>00252                 column_value[row] = pdata[col+row*lx] ; 
-<a name="l00253"></a>00253                 column_position[row] = col ;
-<a name="l00254"></a>00254             }
-<a name="l00255"></a>00255         }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257         <span class="comment">/* allocate memory for the array where the line is fitted in */</span>
-<a name="l00258"></a>00258         <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*box_length + 1)) )
-<a name="l00259"></a>00259         {
-<a name="l00260"></a>00260             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector in row %d"</span>, row) ;
-<a name="l00261"></a>00261             <span class="keywordflow">return</span> FLAG ;
-<a name="l00262"></a>00262         }
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264         <span class="comment">/* allocate memory */</span>
-<a name="l00265"></a>00265         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00266"></a>00266         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00267"></a>00267         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l00268"></a>00268         dec_par = sinfo_new_fit_params(1) ;
-<a name="l00269"></a>00269     par = dec_par[0];
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271         counter = 0 ;
-<a name="l00272"></a>00272         bad_ind = 0 ;
-<a name="l00273"></a>00273         <span class="comment">/* store the values to fit in a Vector object */</span>
-<a name="l00274"></a>00274         <span class="keywordflow">for</span> ( col = column_position[row] - box_length ; 
-<a name="l00275"></a>00275               col <= column_position[row] + box_length ; col++ )
-<a name="l00276"></a>00276         {
-<a name="l00277"></a>00277             <span class="keywordflow">if</span> ( col < 0 || col >= lx )
-<a name="l00278"></a>00278             {
-<a name="l00279"></a>00279                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong spectrum position or box_length "</span>
-<a name="l00280"></a>00280                                  <span class="stringliteral">"given in row: %d"</span>, row) ;
-<a name="l00281"></a>00281                 cpl_free (xdat) ;
-<a name="l00282"></a>00282                 cpl_free (wdat) ;
-<a name="l00283"></a>00283                 cpl_free (mpar) ;
-<a name="l00284"></a>00284                 sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00285"></a>00285                 sinfo_new_destroy_vector( line ) ;
-<a name="l00286"></a>00286                 <span class="keywordflow">return</span> FLAG ;
-<a name="l00287"></a>00287             }
-<a name="l00288"></a>00288             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(pdata[col+row*lx]) )
-<a name="l00289"></a>00289             {
-<a name="l00290"></a>00290                 bad_ind = 1 ;
-<a name="l00291"></a>00291             }
-<a name="l00292"></a>00292             <span class="keywordflow">else</span>
-<a name="l00293"></a>00293             {
-<a name="l00294"></a>00294                 line -> data[counter] = pdata[col + row*lx] ;
-<a name="l00295"></a>00295                 counter++ ;
-<a name="l00296"></a>00296             }
-<a name="l00297"></a>00297         }
-<a name="l00298"></a>00298  
-<a name="l00299"></a>00299         <span class="comment">/* go to the next row if a bad pixel is inside the box */</span>
-<a name="l00300"></a>00300         <span class="keywordflow">if</span> ( bad_ind == 1 )
-<a name="l00301"></a>00301         {
-<a name="l00302"></a>00302             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, bad pixel inside fitting "</span>
-<a name="l00303"></a>00303                                <span class="stringliteral">"box in row: %d"</span>, row) ;
-<a name="l00304"></a>00304             cpl_free (xdat) ;
-<a name="l00305"></a>00305             cpl_free (wdat) ;
-<a name="l00306"></a>00306             cpl_free (mpar) ;
-<a name="l00307"></a>00307             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00308"></a>00308             sinfo_new_destroy_vector( line ) ;
-<a name="l00309"></a>00309             continue ;
-<a name="l00310"></a>00310         }
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l00313"></a>00313 <span class="comment">         * go through the line sinfo_vector</span>
-<a name="l00314"></a>00314 <span class="comment">         * determine the maximum pixel value in the line sinfo_vector</span>
-<a name="l00315"></a>00315 <span class="comment">         */</span>
-<a name="l00316"></a>00316         maxval = -FLT_MAX ;
-<a name="l00317"></a>00317         position = -INT32_MAX ;
-<a name="l00318"></a>00318         <span class="keywordflow">for</span> ( i = 0 ; i < counter ; i++ )
-<a name="l00319"></a>00319         {
-<a name="l00320"></a>00320             xdat[i] = i ;
-<a name="l00321"></a>00321             wdat[i] = 1.0 ;
-<a name="l00322"></a>00322             <span class="keywordflow">if</span> ( line -> data[i] >= maxval )
-<a name="l00323"></a>00323             {
-<a name="l00324"></a>00324                 maxval = line -> data[i] ;
-<a name="l00325"></a>00325                 position = i ;
-<a name="l00326"></a>00326             }
-<a name="l00327"></a>00327         }
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l00330"></a>00330         xdim     = XDIM ;
-<a name="l00331"></a>00331         ndat     = line -> n_elements ;
-<a name="l00332"></a>00332         numpar   = MAXPAR ;
-<a name="l00333"></a>00333         tol      = TOL ;
-<a name="l00334"></a>00334         lab      = LAB ;
-<a name="l00335"></a>00335         its      = ITS ;
-<a name="l00336"></a>00336         (*par).fit_par[1] = fwhm ;
-<a name="l00337"></a>00337         (*par).fit_par[2] = (float) position ;
-<a name="l00338"></a>00338         (*par).fit_par[3] = (float) (line -> data[0] + 
-<a name="l00339"></a>00339                             line -> data[line->n_elements - 1]) / 2.0 ;
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341         (*par).fit_par[0]  = maxval - ((*par).fit_par[3]) ;
-<a name="l00342"></a>00342         <span class="comment">/* exclude negative peaks and low signal cases */</span>
-<a name="l00343"></a>00343         <span class="keywordflow">if</span> ( (*par).fit_par[0] < minDiff )
-<a name="l00344"></a>00344         {
-<a name="l00345"></a>00345             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, negative peak or signal of line "</span>
-<a name="l00346"></a>00346                                <span class="stringliteral">"too low to fit in row: %d"</span>, row) ;
-<a name="l00347"></a>00347             cpl_free (xdat) ;
-<a name="l00348"></a>00348             cpl_free (wdat) ;
-<a name="l00349"></a>00349             cpl_free (mpar) ;
-<a name="l00350"></a>00350             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00351"></a>00351             sinfo_new_destroy_vector( line ) ;
-<a name="l00352"></a>00352             continue ;
-<a name="l00353"></a>00353         }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355         <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )
-<a name="l00356"></a>00356         {
-<a name="l00357"></a>00357             (*par).derv_par[k] = 0.0 ;
-<a name="l00358"></a>00358             mpar[k] = 1 ;
-<a name="l00359"></a>00359         }
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l00362"></a>00362         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l00363"></a>00363                                                line -> data, wdat, 
-<a name="l00364"></a>00364                                                &ndat, (*par).fit_par,
-<a name="l00365"></a>00365                                                (*par).derv_par, mpar, 
-<a name="l00366"></a>00366                                                &numpar, &tol, &its, &lab )) )
-<a name="l00367"></a>00367         {
-<a name="l00368"></a>00368             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit "</span>
-<a name="l00369"></a>00369                                <span class="stringliteral">"failed in row: %d, error no.: %d"</span>,row,iters) ;
-<a name="l00370"></a>00370             cpl_free (xdat) ;
-<a name="l00371"></a>00371             cpl_free (wdat) ;
-<a name="l00372"></a>00372             cpl_free (mpar) ;
-<a name="l00373"></a>00373             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00374"></a>00374             sinfo_new_destroy_vector( line ) ;
-<a name="l00375"></a>00375             continue ;
-<a name="l00376"></a>00376         }
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378         <span class="comment">/* check for negative fit results */</span>
-<a name="l00379"></a>00379         <span class="keywordflow">if</span> ( (*par).fit_par[0] <= 0. || (*par).fit_par[1] <= 0. ||
-<a name="l00380"></a>00380              (*par).fit_par[2] <= 0. )
-<a name="l00381"></a>00381         {
-<a name="l00382"></a>00382             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span>
-<a name="l00383"></a>00383                                <span class="stringliteral">"not used! in row: %d"</span>, row) ;
-<a name="l00384"></a>00384             cpl_free (xdat) ;
-<a name="l00385"></a>00385             cpl_free (wdat) ;
-<a name="l00386"></a>00386             cpl_free (mpar) ;
-<a name="l00387"></a>00387             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00388"></a>00388             sinfo_new_destroy_vector( line ) ;
-<a name="l00389"></a>00389             continue ;
-<a name="l00390"></a>00390         }
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392         <span class="comment">/* correct the fitted position for the given row of the line in </span>
-<a name="l00393"></a>00393 <span class="comment">           image coordinates */</span>
-<a name="l00394"></a>00394         x_position[row] =  (float) (column_position[row] - box_length) + 
-<a name="l00395"></a>00395                            (*par).fit_par[2] ;
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397         <span class="comment">/* store the fit errors of the positions as weights for the later </span>
-<a name="l00398"></a>00398 <span class="comment">           linear fit */</span>
-<a name="l00399"></a>00399         sig[row] = (*par).derv_par[2] ;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401         <span class="comment">/* free memory */</span>
-<a name="l00402"></a>00402         sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00403"></a>00403         sinfo_new_destroy_vector ( line ) ;
-<a name="l00404"></a>00404         cpl_free ( xdat ) ;
-<a name="l00405"></a>00405         cpl_free ( wdat ) ;
-<a name="l00406"></a>00406         cpl_free ( mpar ) ;
-<a name="l00407"></a>00407     }
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409     <span class="comment">/* -----------------------------------------------------------------------</span>
-<a name="l00410"></a>00410 <span class="comment">     * now that we have a sub-pixel resolved list of spectral maxima stored </span>
-<a name="l00411"></a>00411 <span class="comment">     * in x_position[row]</span>
-<a name="l00412"></a>00412 <span class="comment">     * We can fit a flux weighted straight line to the positions to determine </span>
-<a name="l00413"></a>00413 <span class="comment">     * the spectral column shifts.</span>
-<a name="l00414"></a>00414 <span class="comment">     */</span>
-<a name="l00415"></a>00415     ndata = 0 ;
-<a name="l00416"></a>00416     <span class="keywordflow">for</span> ( row = 0 ; row < lx ; row++ )
-<a name="l00417"></a>00417     {
-<a name="l00418"></a>00418         <span class="keywordflow">if</span> ( x_position[row] == 0. || sig[row] == 0. )
-<a name="l00419"></a>00419         {
-<a name="l00420"></a>00420             continue ;
-<a name="l00421"></a>00421         }
-<a name="l00422"></a>00422         <span class="keywordflow">else</span> 
-<a name="l00423"></a>00423         {
-<a name="l00424"></a>00424             y[ndata]   = x_position[row] ;
-<a name="l00425"></a>00425             x[ndata]   = (float)row ;
-<a name="l00426"></a>00426             sig[ndata] = sig[row] ;
-<a name="l00427"></a>00427             ndata++ ;
-<a name="l00428"></a>00428         }
-<a name="l00429"></a>00429     }
-<a name="l00430"></a>00430     <span class="keywordflow">if</span> ( ndata < 10 )
-<a name="l00431"></a>00431     {
-<a name="l00432"></a>00432         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough positions to do the linear fit"</span>) ;
-<a name="l00433"></a>00433         <span class="keywordflow">return</span> FLAG ;
-<a name="l00434"></a>00434     }
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436     <span class="comment">/* now do the fit and return the slope of the straight line */</span>
-<a name="l00437"></a>00437     mwt = 0 ;
-<a name="l00438"></a>00438     sinfo_my_fit(x, y, ndata, sig, mwt, &a, &b, &siga, &sigb, &chi2, &q) ;
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440     cpl_free(col_value) ;
-<a name="l00441"></a>00441     cpl_free(column_value) ;
-<a name="l00442"></a>00442     cpl_free(col_position) ;
-<a name="l00443"></a>00443     cpl_free(column_position) ;
-<a name="l00444"></a>00444     cpl_free(x_position) ;
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446     cpl_free(x); 
-<a name="l00447"></a>00447     cpl_free(y); 
-<a name="l00448"></a>00448     cpl_free(sig) ;
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450     <span class="keywordflow">return</span> b ;
-<a name="l00451"></a>00451 }
-<a name="l00452"></a>00452 
-<a name="l00465"></a>00465 cpl_image * 
-<a name="l00466"></a>00466 sinfo_new_shift_rows( cpl_image * image,
-<a name="l00467"></a>00467                       <span class="keywordtype">float</span>      slope, 
-<a name="l00468"></a>00468                       <span class="keywordtype">int</span>        n_order )
-<a name="l00469"></a>00469 {
-<a name="l00470"></a>00470     cpl_image * returnImage=NULL ;
-<a name="l00471"></a>00471     <span class="keywordtype">float</span> xshift=0 ;
-<a name="l00472"></a>00472     <span class="keywordtype">int</span>   intshift = 0 ;
-<a name="l00473"></a>00473     <span class="keywordtype">float</span> sum=0;
-<a name="l00474"></a>00474     <span class="keywordtype">float</span> new_sum=0;
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476     <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l00477"></a>00477     <span class="keywordtype">float</span>* row_data=NULL ;
-<a name="l00478"></a>00478     <span class="keywordtype">float</span>* corrected_row_data=NULL ;
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480     <span class="keywordtype">float</span> eval=0 <span class="comment">/*, dy*/</span> ;
-<a name="l00481"></a>00481     <span class="keywordtype">float</span> * imageptr=NULL ;
-<a name="l00482"></a>00482     <span class="keywordtype">int</span> col=0;
-<a name="l00483"></a>00483     <span class="keywordtype">int</span> row=0;
-<a name="l00484"></a>00484     <span class="keywordtype">int</span> firstpos=0;
-<a name="l00485"></a>00485     <span class="keywordtype">int</span> n_points=0;
-<a name="l00486"></a>00486     <span class="keywordtype">int</span> i=0;
-<a name="l00487"></a>00487     <span class="keywordtype">int</span> flag=0;
-<a name="l00488"></a>00488     <span class="keywordtype">int</span> ilx=0;
-<a name="l00489"></a>00489     <span class="keywordtype">int</span> ily=0;
-<a name="l00490"></a>00490     <span class="keywordtype">int</span> olx=0;
-<a name="l00491"></a>00491     <span class="keywordtype">int</span> oly=0;
-<a name="l00492"></a>00492     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00493"></a>00493     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l00496"></a>00496     {
-<a name="l00497"></a>00497         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given"</span>) ;
-<a name="l00498"></a>00498         <span class="keywordflow">return</span> NULL ;
-<a name="l00499"></a>00499     }
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     <span class="keywordflow">if</span> ( slope == 0. )
-<a name="l00502"></a>00502     {
-<a name="l00503"></a>00503         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"there is no need to shift the image rows!"</span>) ;
-<a name="l00504"></a>00504         <span class="keywordflow">return</span> NULL ;
-<a name="l00505"></a>00505     }
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507     <span class="keywordflow">if</span> ( n_order <= 0 )
-<a name="l00508"></a>00508     {
-<a name="l00509"></a>00509         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l00510"></a>00510         <span class="keywordflow">return</span> NULL ;
-<a name="l00511"></a>00511     }
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513     returnImage = cpl_image_duplicate( image ) ;
-<a name="l00514"></a>00514     ilx=cpl_image_get_size_x(image);
-<a name="l00515"></a>00515     ily=cpl_image_get_size_y(image);
-<a name="l00516"></a>00516     olx=cpl_image_get_size_x(returnImage);
-<a name="l00517"></a>00517     oly=cpl_image_get_size_y(returnImage);
-<a name="l00518"></a>00518     pidata=cpl_image_get_data_float(image);
-<a name="l00519"></a>00519     podata=cpl_image_get_data_float(returnImage);
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522     n_points = n_order + 1 ;
-<a name="l00523"></a>00523     <span class="keywordflow">if</span> ( n_points % 2 == 0 )
-<a name="l00524"></a>00524     {
-<a name="l00525"></a>00525         firstpos = (int)(n_points/2) - 1 ;
-<a name="l00526"></a>00526     }
-<a name="l00527"></a>00527     <span class="keywordflow">else</span>
-<a name="l00528"></a>00528     {
-<a name="l00529"></a>00529         firstpos = (int)(n_points/2) ;
-<a name="l00530"></a>00530     }
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     xnum=cpl_calloc(n_order + 1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00534"></a>00534     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00535"></a>00535     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537     <span class="comment">/* fill the xa[] array for the polint function */</span>
-<a name="l00538"></a>00538     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )
-<a name="l00539"></a>00539     {
-<a name="l00540"></a>00540         xnum[i] = i ;
-<a name="l00541"></a>00541     }
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543     <span class="comment">/* go through the image rows */</span>
-<a name="l00544"></a>00544     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00545"></a>00545     {
-<a name="l00546"></a>00546         <span class="comment">/* determine the shift for each row, the middle row is not shifted */</span>
-<a name="l00547"></a>00547         xshift = slope * (float)( (ily / 2) - row ) ;
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549         intshift = sinfo_new_nint(xshift) ;
-<a name="l00550"></a>00550         xshift = xshift - (float)intshift ;
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00553"></a>00553         {
-<a name="l00554"></a>00554             corrected_row_data[col] = 0. ;
-<a name="l00555"></a>00555         }
-<a name="l00556"></a>00556         sum = 0. ; <span class="comment">/* initialize flux for later rescaling */</span>
-<a name="l00557"></a>00557         <span class="comment">/* go through the image columns */</span>
-<a name="l00558"></a>00558         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00559"></a>00559         {
-<a name="l00560"></a>00560         <span class="comment">/* consider integer pixel shifts */</span>
-<a name="l00561"></a>00561         <span class="keywordflow">if</span> ( intshift < 0 )
-<a name="l00562"></a>00562             {
-<a name="l00563"></a>00563         <span class="keywordflow">if</span> ( col - intshift < ilx )
-<a name="l00564"></a>00564         {
-<a name="l00565"></a>00565             row_data[col] = pidata[col-intshift+row*ilx] ;
-<a name="l00566"></a>00566                 }
-<a name="l00567"></a>00567         <span class="keywordflow">else</span>
-<a name="l00568"></a>00568         {
-<a name="l00569"></a>00569             row_data[col] = 0. ;
-<a name="l00570"></a>00570                 }
-<a name="l00571"></a>00571         }
-<a name="l00572"></a>00572         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( intshift > 0 )
-<a name="l00573"></a>00573         {
-<a name="l00574"></a>00574         <span class="keywordflow">if</span> ( col - intshift >= 0 )
-<a name="l00575"></a>00575         {
-<a name="l00576"></a>00576             row_data[col] = pidata[col-intshift+row*ilx] ;
-<a name="l00577"></a>00577                 }
-<a name="l00578"></a>00578         <span class="keywordflow">else</span>
-<a name="l00579"></a>00579         {
-<a name="l00580"></a>00580             row_data[col] = 0. ;
-<a name="l00581"></a>00581         }
-<a name="l00582"></a>00582         }
-<a name="l00583"></a>00583         <span class="keywordflow">else</span>
-<a name="l00584"></a>00584         {
-<a name="l00585"></a>00585                row_data[col] = pidata[col+row*ilx] ;
-<a name="l00586"></a>00586         }
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588             <span class="comment">/* don't consider the sinfo_edge pixels for flux calculation */</span>
-<a name="l00589"></a>00589             <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 && !isnan(row_data[col]) )
-<a name="l00590"></a>00590             {
-<a name="l00591"></a>00591                 sum += row_data[col] ;
-<a name="l00592"></a>00592             }
-<a name="l00593"></a>00593             <span class="keywordflow">if</span> (isnan(row_data[col])) 
-<a name="l00594"></a>00594             {
-<a name="l00595"></a>00595                 row_data[col] = 0. ;
-<a name="l00596"></a>00596                 <span class="keywordflow">for</span> (i = col - firstpos ; i < col - firstpos + n_points ; i++ )
-<a name="l00597"></a>00597                 {
-<a name="l00598"></a>00598                     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00599"></a>00599                     <span class="keywordflow">if</span> ( i >= ilx) continue ;
-<a name="l00600"></a>00600                     corrected_row_data[i] = ZERO ;
-<a name="l00601"></a>00601                 }
-<a name="l00602"></a>00602             }
-<a name="l00603"></a>00603         }
-<a name="l00604"></a>00604 
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l00607"></a>00607 <span class="comment">         * now we do the polynomial interpolation to achieve the fractional</span>
-<a name="l00608"></a>00608 <span class="comment">         * shift that means call polint</span>
-<a name="l00609"></a>00609 <span class="comment">         */</span>
-<a name="l00610"></a>00610         new_sum = 0. ;
-<a name="l00611"></a>00611         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00612"></a>00612         {
-<a name="l00613"></a>00613             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l00614"></a>00614 <span class="comment">             * now determine the arrays of size n_points with which the</span>
-<a name="l00615"></a>00615 <span class="comment">             * polynom is determined and determine the position eval</span>
-<a name="l00616"></a>00616 <span class="comment">             * where the polynom is evaluated in polint of N.R..</span>
-<a name="l00617"></a>00617 <span class="comment">             * Take care of the points near the row edges!</span>
-<a name="l00618"></a>00618 <span class="comment">             */</span>
-<a name="l00619"></a>00619             <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) )
-<a name="l00620"></a>00620             {
-<a name="l00621"></a>00621                  continue ;
-<a name="l00622"></a>00622             }
-<a name="l00623"></a>00623             <span class="keywordflow">if</span> ( col - firstpos < 0 )
-<a name="l00624"></a>00624             {
-<a name="l00625"></a>00625                 imageptr = &row_data[0] ;
-<a name="l00626"></a>00626                 eval     = (float)col - xshift ;
-<a name="l00627"></a>00627             }
-<a name="l00628"></a>00628             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col - firstpos + n_points >= ilx )
-<a name="l00629"></a>00629             {
-<a name="l00630"></a>00630                 imageptr = &row_data[ilx - n_points] ;
-<a name="l00631"></a>00631                 eval     = (float)(col + n_points - ilx) - xshift ;
-<a name="l00632"></a>00632             }
-<a name="l00633"></a>00633             <span class="keywordflow">else</span>
-<a name="l00634"></a>00634             {
-<a name="l00635"></a>00635                 imageptr = &row_data[col-firstpos] ;
-<a name="l00636"></a>00636                 eval     = (float)firstpos - xshift ;
-<a name="l00637"></a>00637             }
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639         flag=0;
-<a name="l00640"></a>00640         corrected_row_data[col]=sinfo_new_nev_ille(xnum,imageptr,
-<a name="l00641"></a>00641                                                        n_order,eval,&flag);
-<a name="l00642"></a>00642             <span class="comment">/*polint( xnum - 1, imageptr, n_points, eval, </span>
-<a name="l00643"></a>00643 <span class="comment">                      &corrected_row_data[col], &dy ) ;*/</span>
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645             <span class="comment">/* don't take the sinfo_edge points to calculate </span>
-<a name="l00646"></a>00646 <span class="comment">               the scaling factor */</span>
-<a name="l00647"></a>00647             <span class="keywordflow">if</span> (col != 0 && col != ilx - 1 && !isnan(corrected_row_data[col]) )
-<a name="l00648"></a>00648             {
-<a name="l00649"></a>00649                 new_sum += corrected_row_data[col] ;
-<a name="l00650"></a>00650             }
-<a name="l00651"></a>00651         }
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653         <span class="keywordflow">if</span> ( new_sum == 0. )
-<a name="l00654"></a>00654         {
-<a name="l00655"></a>00655             new_sum = 1. ;
-<a name="l00656"></a>00656         }
-<a name="l00657"></a>00657         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00658"></a>00658         {
-<a name="l00659"></a>00659             <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]))
-<a name="l00660"></a>00660             {
-<a name="l00661"></a>00661                 podata[col+row*ilx] = ZERO ;
-<a name="l00662"></a>00662             }
-<a name="l00663"></a>00663             <span class="keywordflow">else</span>
-<a name="l00664"></a>00664             {
-<a name="l00665"></a>00665               <span class="comment">/* rescale the row data and fill the returned image */</span>
-<a name="l00666"></a>00666               <span class="comment">/* This gives sometimes inconsistent results if </span>
-<a name="l00667"></a>00667 <span class="comment">                 bad pixels are around */</span>
-<a name="l00668"></a>00668               <span class="comment">/* rescaling is commented out because it delivers wrong results</span>
-<a name="l00669"></a>00669 <span class="comment">                 in case of appearance of blanks or bad pixels */</span>
-<a name="l00670"></a>00670              <span class="comment">/*   corrected_row_data[col] *= sum / new_sum ; */</span>
-<a name="l00671"></a>00671                 podata[col+row*ilx] = corrected_row_data[col] ;
-<a name="l00672"></a>00672             }
-<a name="l00673"></a>00673         }
-<a name="l00674"></a>00674     }      
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676     cpl_free(xnum) ;
-<a name="l00677"></a>00677     cpl_free(row_data) ;
-<a name="l00678"></a>00678     cpl_free(corrected_row_data);
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680     <span class="keywordflow">return</span> returnImage ;
-<a name="l00681"></a>00681 }
-<a name="l00682"></a>00682 
-<a name="l00683"></a>00683 
-<a name="l00694"></a>00694 <span class="keywordtype">void</span> 
-<a name="l00695"></a>00695 sinfo_new_parameter_to_ascii ( <span class="keywordtype">float</span> * parameter, 
-<a name="l00696"></a>00696                         <span class="keywordtype">int</span> n,
-<a name="l00697"></a>00697                         <span class="keywordtype">char</span> * filename )
-<a name="l00698"></a>00698 {
-<a name="l00699"></a>00699     FILE * fp ;
-<a name="l00700"></a>00700     <span class="keywordtype">int</span>     i=0 ;
-<a name="l00701"></a>00701 
-<a name="l00702"></a>00702     <span class="keywordflow">if</span> ( parameter == NULL || filename == NULL || n <= 0 )
-<a name="l00703"></a>00703     {
-<a name="l00704"></a>00704         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input is missing or wrong!"</span>) ;
-<a name="l00705"></a>00705         return ;
-<a name="l00706"></a>00706     }
-<a name="l00707"></a>00707     
-<a name="l00708"></a>00708     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"w"</span> ) ) )
-<a name="l00709"></a>00709     {
-<a name="l00710"></a>00710         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s"</span>, filename) ;
-<a name="l00711"></a>00711         return ;
-<a name="l00712"></a>00712     }
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )
-<a name="l00715"></a>00715     {
-<a name="l00716"></a>00716         fprintf (fp, <span class="stringliteral">"%le\n"</span>, parameter[i] ) ;
-<a name="l00717"></a>00717     }
-<a name="l00718"></a>00718     fclose (fp ) ;
-<a name="l00719"></a>00719 }
-<a name="l00720"></a>00720 
-<a name="l00728"></a>00728 <span class="keywordtype">float</span> * 
-<a name="l00729"></a>00729 sinfo_new_ascii_to_parameter ( <span class="keywordtype">char</span> * filename,
-<a name="l00730"></a>00730                            <span class="keywordtype">int</span> * n )
-<a name="l00731"></a>00731 {
-<a name="l00732"></a>00732     FILE * fp ;
-<a name="l00733"></a>00733     <span class="keywordtype">float</span> * parameter=NULL ;
-<a name="l00734"></a>00734     <span class="keywordtype">int</span>     i=0 ;
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736     <span class="keywordflow">if</span> ( filename == NULL || n == NULL )
-<a name="l00737"></a>00737     {
-<a name="l00738"></a>00738         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Input is missing or wrong"</span>) ;
-<a name="l00739"></a>00739         <span class="keywordflow">return</span> NULL ;
-<a name="l00740"></a>00740     }
-<a name="l00741"></a>00741     
-<a name="l00742"></a>00742     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"r"</span> ) ) )
-<a name="l00743"></a>00743     {
-<a name="l00744"></a>00744         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s"</span>, filename) ;
-<a name="l00745"></a>00745         <span class="keywordflow">return</span> NULL ;
-<a name="l00746"></a>00746     }
-<a name="l00747"></a>00747 
-<a name="l00748"></a>00748     <span class="comment">/* allocate memory */</span>
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750     <span class="keywordflow">if</span> (NULL == ( parameter = (<span class="keywordtype">float</span>*) cpl_calloc (ESTIMATE, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )
-<a name="l00751"></a>00751     {
-<a name="l00752"></a>00752         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory"</span>) ;
-<a name="l00753"></a>00753         fclose (fp ) ;
-<a name="l00754"></a>00754         <span class="keywordflow">return</span> NULL ;
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757     i = 0 ;
-<a name="l00758"></a>00758     <span class="keywordflow">while</span> ( fscanf(fp, <span class="stringliteral">"%g\n"</span>, &parameter[i]) != EOF )
-<a name="l00759"></a>00759     {
-<a name="l00760"></a>00760         i++ ;
-<a name="l00761"></a>00761     }
-<a name="l00762"></a>00762     *n = i ;
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764     fclose (fp ) ;
-<a name="l00765"></a>00765 
-<a name="l00766"></a>00766     <span class="keywordflow">return</span> parameter ;
-<a name="l00767"></a>00767 }
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769 
-<a name="l00792"></a>00792 <span class="keywordtype">double</span> * 
-<a name="l00793"></a>00793 sinfo_new_curvature_of_spectrum( cpl_image * ns_image,
-<a name="l00794"></a>00794                     <span class="keywordtype">int</span>        order,
-<a name="l00795"></a>00795                          <span class="keywordtype">int</span>        box_length,
-<a name="l00796"></a>00796                  <span class="keywordtype">int</span>        left_pos,
-<a name="l00797"></a>00797              <span class="keywordtype">int</span>        right_pos,
-<a name="l00798"></a>00798                          <span class="keywordtype">float</span>      fwhm,
-<a name="l00799"></a>00799                          <span class="keywordtype">float</span>      minDiff )
-<a name="l00800"></a>00800 {
-<a name="l00801"></a>00801     <span class="keywordtype">int</span> i=0;
-<a name="l00802"></a>00802     <span class="keywordtype">int</span> k=0;
-<a name="l00803"></a>00803     <span class="keywordtype">int</span> row=0;
-<a name="l00804"></a>00804     <span class="keywordtype">int</span> col=0;
-<a name="l00805"></a>00805     <span class="keywordtype">int</span> counter=0;
-<a name="l00806"></a>00806     <span class="keywordtype">int</span> iters=0;
-<a name="l00807"></a>00807     <span class="keywordtype">int</span> xdim=0;
-<a name="l00808"></a>00808     <span class="keywordtype">int</span> ndat=0;
-<a name="l00809"></a>00809     <span class="keywordtype">int</span> its=0;
-<a name="l00810"></a>00810     <span class="keywordtype">int</span> numpar=0;
-<a name="l00811"></a>00811     <span class="keywordtype">float</span> maxval=0 ;
-<a name="l00812"></a>00812     <span class="keywordtype">float</span> tol=0;
-<a name="l00813"></a>00813     <span class="keywordtype">float</span> lab=0;
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815     <span class="keywordtype">float</span>* col_value=NULL ;
-<a name="l00816"></a>00816     <span class="keywordtype">float</span>* column_value=NULL ;
-<a name="l00817"></a>00817     pixelvalue* col_position=NULL ;
-<a name="l00818"></a>00818     <span class="keywordtype">int</span>* column_position=NULL ;
-<a name="l00819"></a>00819     <span class="keywordtype">float</span>* x_position=NULL ;
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     <span class="keywordtype">int</span> col_median=0;
-<a name="l00822"></a>00822     <span class="keywordtype">float</span> * xdat=NULL;
-<a name="l00823"></a>00823     <span class="keywordtype">float</span> * wdat=NULL;
-<a name="l00824"></a>00824     <span class="keywordtype">int</span> * mpar=NULL;
-<a name="l00825"></a>00825     Vector * line=NULL;
-<a name="l00826"></a>00826     FitParams ** dec_par=NULL ;
-<a name="l00827"></a>00827     FitParams * par=NULL ;
-<a name="l00828"></a>00828     <span class="keywordtype">int</span> position=0 ;
-<a name="l00829"></a>00829     <span class="keywordtype">int</span> ndata=0 ;
-<a name="l00830"></a>00830     <span class="keywordtype">int</span> bad_ind=0 ;
-<a name="l00831"></a>00831     dpoint * list=NULL ;
-<a name="l00832"></a>00832     <span class="keywordtype">double</span> * coeffs=NULL ;
-<a name="l00833"></a>00833     <span class="keywordtype">double</span> offset=0 ;
-<a name="l00834"></a>00834     <span class="keywordtype">int</span> lx=0;
-<a name="l00835"></a>00835     <span class="keywordtype">int</span> ly=0;
-<a name="l00836"></a>00836     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838     <span class="keywordflow">if</span> ( ns_image == NULL )
-<a name="l00839"></a>00839     {
-<a name="l00840"></a>00840         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given"</span>) ;
-<a name="l00841"></a>00841         <span class="keywordflow">return</span> NULL ;
-<a name="l00842"></a>00842     }
-<a name="l00843"></a>00843     lx=cpl_image_get_size_x(ns_image);
-<a name="l00844"></a>00844     ly=cpl_image_get_size_y(ns_image);
-<a name="l00845"></a>00845 
-<a name="l00846"></a>00846     <span class="keywordflow">if</span> ( box_length <= 1 || box_length >= right_pos - left_pos )
-<a name="l00847"></a>00847     {
-<a name="l00848"></a>00848         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong box length given"</span>) ;
-<a name="l00849"></a>00849         <span class="keywordflow">return</span> NULL ;
-<a name="l00850"></a>00850     }
-<a name="l00851"></a>00851     <span class="keywordflow">if</span> ( fwhm < 1. || fwhm > 10. )
-<a name="l00852"></a>00852     {
-<a name="l00853"></a>00853         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong full width at half maximum given"</span>) ;
-<a name="l00854"></a>00854         <span class="keywordflow">return</span> NULL ;
-<a name="l00855"></a>00855     }
-<a name="l00856"></a>00856     <span class="keywordflow">if</span> ( left_pos < 0 || right_pos <= left_pos || right_pos > lx )
-<a name="l00857"></a>00857     {
-<a name="l00858"></a>00858         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong left and right positions"</span>) ;
-<a name="l00859"></a>00859         <span class="keywordflow">return</span> NULL ;
-<a name="l00860"></a>00860     }
-<a name="l00861"></a>00861     <span class="keywordflow">if</span> ( minDiff < 1. )
-<a name="l00862"></a>00862     {
-<a name="l00863"></a>00863         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong amplitude threshold given!"</span>) ;
-<a name="l00864"></a>00864         <span class="keywordflow">return</span> NULL ;
-<a name="l00865"></a>00865     }
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869     col_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00870"></a>00870     column_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00871"></a>00871     col_position=(pixelvalue*)cpl_calloc(ly,<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00872"></a>00872     column_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l00873"></a>00873     x_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875     <span class="comment">/* go through the image rows */</span>
-<a name="l00876"></a>00876     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )
-<a name="l00877"></a>00877     {
-<a name="l00878"></a>00878         col_value[row] = -FLT_MAX ;
-<a name="l00879"></a>00879         col_position[row] = -1. ;
-<a name="l00880"></a>00880         <span class="comment">/* find the maximum value in each row and store the found column */</span>
-<a name="l00881"></a>00881         <span class="keywordflow">for</span> ( col = left_pos ; col < right_pos ; col++ )
-<a name="l00882"></a>00882         {
-<a name="l00883"></a>00883             <span class="keywordflow">if</span> ( pdata[col+row*lx] > col_value[row] )
-<a name="l00884"></a>00884             {
-<a name="l00885"></a>00885                 col_value[row]    = pdata[col+row*lx] ;
-<a name="l00886"></a>00886                 col_position[row] = (pixelvalue)col ;
-<a name="l00887"></a>00887             }
-<a name="l00888"></a>00888         }
-<a name="l00889"></a>00889     }
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     <span class="comment">/* now determine the sinfo_new_median of the found columns to be sure </span>
-<a name="l00892"></a>00892 <span class="comment">       to have the brightest spectrum */</span>
-<a name="l00893"></a>00893     col_median = (int)sinfo_new_median(col_position, right_pos - left_pos) ;
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895     <span class="comment">/* now find the peaks around col_median over the whole spectral range */</span>
-<a name="l00896"></a>00896     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )
-<a name="l00897"></a>00897     {
-<a name="l00898"></a>00898         x_position[row] = 0. ;
-<a name="l00899"></a>00899         column_value[row] = -FLT_MAX ;
-<a name="l00900"></a>00900         column_position[row] = -1 ;
-<a name="l00901"></a>00901         <span class="keywordflow">for</span> ( col = col_median - box_length ; 
-<a name="l00902"></a>00902               col <= col_median + box_length ; col++ )
-<a name="l00903"></a>00903         {
-<a name="l00904"></a>00904             <span class="keywordflow">if</span> ( pdata[col+row*lx] > column_value[row] )
-<a name="l00905"></a>00905             {
-<a name="l00906"></a>00906                 column_value[row] = pdata[col+row*lx] ; 
-<a name="l00907"></a>00907                 column_position[row] = col ;
-<a name="l00908"></a>00908             }
-<a name="l00909"></a>00909         }
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911         <span class="comment">/* allocate memory for the array where the line is fitted in */</span>
-<a name="l00912"></a>00912         <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*box_length + 1)) )
-<a name="l00913"></a>00913         {
-<a name="l00914"></a>00914             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector in row: %d"</span>, row) ;
-<a name="l00915"></a>00915             <span class="keywordflow">return</span> NULL ;
-<a name="l00916"></a>00916         }
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918         <span class="comment">/* allocate memory */</span>
-<a name="l00919"></a>00919         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00920"></a>00920         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00921"></a>00921         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l00922"></a>00922         dec_par = sinfo_new_fit_params(1) ;
-<a name="l00923"></a>00923         par = dec_par[0];
-<a name="l00924"></a>00924     
-<a name="l00925"></a>00925         counter = 0 ;
-<a name="l00926"></a>00926         bad_ind = 0 ;
-<a name="l00927"></a>00927         <span class="comment">/* store the values to fit in a Vector object */</span>
-<a name="l00928"></a>00928         <span class="keywordflow">for</span> ( col = column_position[row] - box_length ; 
-<a name="l00929"></a>00929               col <= column_position[row] + box_length ; col++ )
-<a name="l00930"></a>00930         {
-<a name="l00931"></a>00931             <span class="keywordflow">if</span> ( col < 0 || col >= lx )
-<a name="l00932"></a>00932             {
-<a name="l00933"></a>00933                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong spectrum position or box_length "</span>
-<a name="l00934"></a>00934                                  <span class="stringliteral">"given in row: %d"</span>, row) ;
-<a name="l00935"></a>00935                 cpl_free (xdat) ;
-<a name="l00936"></a>00936                 cpl_free (wdat) ;
-<a name="l00937"></a>00937                 cpl_free (mpar) ;
-<a name="l00938"></a>00938                 sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00939"></a>00939                 sinfo_new_destroy_vector( line ) ;
-<a name="l00940"></a>00940                 <span class="keywordflow">return</span> NULL ;
-<a name="l00941"></a>00941             }
-<a name="l00942"></a>00942             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(pdata[col+row*lx]) )
-<a name="l00943"></a>00943             {
-<a name="l00944"></a>00944                 bad_ind = 1 ;
-<a name="l00945"></a>00945             }
-<a name="l00946"></a>00946             <span class="keywordflow">else</span>
-<a name="l00947"></a>00947             {
-<a name="l00948"></a>00948                 line -> data[counter] = pdata[col + row*lx] ;
-<a name="l00949"></a>00949                 counter++ ;
-<a name="l00950"></a>00950             }
-<a name="l00951"></a>00951         }
-<a name="l00952"></a>00952  
-<a name="l00953"></a>00953         <span class="comment">/* go to the next row if a bad pixel is inside the box */</span>
-<a name="l00954"></a>00954         <span class="keywordflow">if</span> ( bad_ind == 1 )
-<a name="l00955"></a>00955         {
-<a name="l00956"></a>00956             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, bad pixel inside fitting box "</span>
-<a name="l00957"></a>00957                                <span class="stringliteral">"in row: %d"</span>, row) ;
-<a name="l00958"></a>00958             cpl_free (xdat) ;
-<a name="l00959"></a>00959             cpl_free (wdat) ;
-<a name="l00960"></a>00960             cpl_free (mpar) ;
-<a name="l00961"></a>00961             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l00962"></a>00962             sinfo_new_destroy_vector( line ) ;
-<a name="l00963"></a>00963             continue ;
-<a name="l00964"></a>00964         }
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l00967"></a>00967 <span class="comment">         * go through the line sinfo_vector</span>
-<a name="l00968"></a>00968 <span class="comment">         * determine the maximum pixel value in the line sinfo_vector</span>
-<a name="l00969"></a>00969 <span class="comment">         */</span>
-<a name="l00970"></a>00970         maxval = -FLT_MAX ;
-<a name="l00971"></a>00971         position = -INT32_MAX ;
-<a name="l00972"></a>00972         <span class="keywordflow">for</span> ( i = 0 ; i < counter ; i++ )
-<a name="l00973"></a>00973         {
-<a name="l00974"></a>00974             xdat[i] = i ;
-<a name="l00975"></a>00975             wdat[i] = 1.0 ;
-<a name="l00976"></a>00976             <span class="keywordflow">if</span> ( line -> data[i] >= maxval )
-<a name="l00977"></a>00977             {
-<a name="l00978"></a>00978                 maxval = line -> data[i] ;
-<a name="l00979"></a>00979                 position = i ;
-<a name="l00980"></a>00980             }
-<a name="l00981"></a>00981         }
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l00984"></a>00984         xdim     = XDIM ;
-<a name="l00985"></a>00985         ndat     = line -> n_elements ;
-<a name="l00986"></a>00986         numpar   = MAXPAR ;
-<a name="l00987"></a>00987         tol      = TOL ;
-<a name="l00988"></a>00988         lab      = LAB ;
-<a name="l00989"></a>00989         its      = ITS ;
-<a name="l00990"></a>00990         (*par).fit_par[1] = fwhm ;
-<a name="l00991"></a>00991         (*par).fit_par[2] = (float) position ;
-<a name="l00992"></a>00992         (*par).fit_par[3] = (float) (line -> data[0] + 
-<a name="l00993"></a>00993                                      line -> data[line->n_elements - 1]) / 2.0;
-<a name="l00994"></a>00994 
-<a name="l00995"></a>00995         (*par).fit_par[0]  = maxval - ((*par).fit_par[3]) ;
-<a name="l00996"></a>00996         <span class="comment">/* exclude negative peaks and low signal cases */</span>
-<a name="l00997"></a>00997         <span class="keywordflow">if</span> ( (*par).fit_par[0] < minDiff )
-<a name="l00998"></a>00998         {
-<a name="l00999"></a>00999             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, negative peak or signal of line "</span>
-<a name="l01000"></a>01000                                <span class="stringliteral">"too low to fit in row: %d"</span>, row) ;
-<a name="l01001"></a>01001             cpl_free (xdat) ;
-<a name="l01002"></a>01002             cpl_free (wdat) ;
-<a name="l01003"></a>01003             cpl_free (mpar) ;
-<a name="l01004"></a>01004             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l01005"></a>01005             sinfo_new_destroy_vector( line ) ;
-<a name="l01006"></a>01006             continue ;
-<a name="l01007"></a>01007         }
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009         <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )
-<a name="l01010"></a>01010         {
-<a name="l01011"></a>01011             (*par).derv_par[k] = 0.0 ;
-<a name="l01012"></a>01012             mpar[k] = 1 ;
-<a name="l01013"></a>01013         }
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l01016"></a>01016         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l01017"></a>01017                                                line -> data, wdat, 
-<a name="l01018"></a>01018                                                &ndat, (*par).fit_par,
-<a name="l01019"></a>01019                                                (*par).derv_par, mpar, 
-<a name="l01020"></a>01020                                                &numpar, &tol, &its, &lab )) )
-<a name="l01021"></a>01021         {
-<a name="l01022"></a>01022             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed in row: "</span>
-<a name="l01023"></a>01023                                <span class="stringliteral">"%d, error no.: %d"</span>, row, iters) ;
-<a name="l01024"></a>01024             cpl_free (xdat) ;
-<a name="l01025"></a>01025             cpl_free (wdat) ;
-<a name="l01026"></a>01026             cpl_free (mpar) ;
-<a name="l01027"></a>01027             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l01028"></a>01028             sinfo_new_destroy_vector( line ) ;
-<a name="l01029"></a>01029             continue ;
-<a name="l01030"></a>01030         }
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032         <span class="comment">/* check for negative fit results */</span>
-<a name="l01033"></a>01033         <span class="keywordflow">if</span> ( (*par).fit_par[0] <= 0. || (*par).fit_par[1] <= 1. ||
-<a name="l01034"></a>01034              (*par).fit_par[2] <= 0. )
-<a name="l01035"></a>01035         {
-<a name="l01036"></a>01036             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span>
-<a name="l01037"></a>01037                                <span class="stringliteral">"not used! in row: %d"</span>, row) ;
-<a name="l01038"></a>01038             cpl_free (xdat) ;
-<a name="l01039"></a>01039             cpl_free (wdat) ;
-<a name="l01040"></a>01040             cpl_free (mpar) ;
-<a name="l01041"></a>01041             sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l01042"></a>01042             sinfo_new_destroy_vector( line ) ;
-<a name="l01043"></a>01043             continue ;
-<a name="l01044"></a>01044         }
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046         <span class="comment">/* correct the fitted position for the given row of the line </span>
-<a name="l01047"></a>01047 <span class="comment">           in image coordinates */</span>
-<a name="l01048"></a>01048         x_position[row] =  (float) (column_position[row] - box_length) + 
-<a name="l01049"></a>01049                                    (*par).fit_par[2] ;
-<a name="l01050"></a>01050         printf(<span class="stringliteral">"%d %f %f\n"</span>,row, (*par).fit_par[1], x_position[row] ) ;
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052         <span class="comment">/* free memory */</span>
-<a name="l01053"></a>01053         sinfo_new_destroy_fit_params(&dec_par) ;
-<a name="l01054"></a>01054         sinfo_new_destroy_vector ( line ) ;
-<a name="l01055"></a>01055         cpl_free ( xdat ) ;
-<a name="l01056"></a>01056         cpl_free ( wdat ) ;
-<a name="l01057"></a>01057         cpl_free ( mpar ) ;
-<a name="l01058"></a>01058     }
-<a name="l01059"></a>01059     <span class="comment">/* now allocate memory for the data to fit */</span>
-<a name="l01060"></a>01060     <span class="keywordflow">if</span> ( NULL == ( list = (dpoint*) cpl_calloc (ly, <span class="keyword">sizeof</span> (dpoint)) ) ) 
-<a name="l01061"></a>01061     {
-<a name="l01062"></a>01062         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l01063"></a>01063         <span class="keywordflow">return</span> NULL ;
-<a name="l01064"></a>01064     }
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066     <span class="comment">/* ------------------------------------------------------------------------</span>
-<a name="l01067"></a>01067 <span class="comment">     * now that we have a sub-pixel resolved list of spectral maxima stored </span>
-<a name="l01068"></a>01068 <span class="comment">     * in x_position[row] We can fit a flux weighted straight line to the </span>
-<a name="l01069"></a>01069 <span class="comment">     * positions to determine the spectral column shifts.</span>
-<a name="l01070"></a>01070 <span class="comment">     */</span>
-<a name="l01071"></a>01071     offset = (double) ly/2. ;
-<a name="l01072"></a>01072     ndata = 0 ;
-<a name="l01073"></a>01073     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )
-<a name="l01074"></a>01074     {
-<a name="l01075"></a>01075         <span class="keywordflow">if</span> ( x_position[row] == 0. )
-<a name="l01076"></a>01076         {
-<a name="l01077"></a>01077             continue ;
-<a name="l01078"></a>01078         }
-<a name="l01079"></a>01079         <span class="keywordflow">else</span> 
-<a name="l01080"></a>01080         {
-<a name="l01081"></a>01081             list[ndata].y   = (double)x_position[row] ;
-<a name="l01082"></a>01082             list[ndata].x   = (double)row - offset ;
-<a name="l01083"></a>01083             ndata++ ;
-<a name="l01084"></a>01084         }
-<a name="l01085"></a>01085     }
-<a name="l01086"></a>01086     
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088     <span class="keywordflow">if</span> ( NULL == (coeffs = sinfo_fit_1d_poly(order, list, ndata, NULL)) )
-<a name="l01089"></a>01089     {
-<a name="l01090"></a>01090         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"eclipse function sinfo_fit_1d_poly() did not work!"</span>) ;
-<a name="l01091"></a>01091         <span class="keywordflow">return</span> NULL ;
-<a name="l01092"></a>01092     }
-<a name="l01093"></a>01093     cpl_free ( list ) ;
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097     cpl_free(col_value) ;
-<a name="l01098"></a>01098     cpl_free(column_value) ;
-<a name="l01099"></a>01099     cpl_free(col_position) ;
-<a name="l01100"></a>01100     cpl_free(column_position) ;
-<a name="l01101"></a>01101     cpl_free(x_position) ;
-<a name="l01102"></a>01102      
-<a name="l01103"></a>01103     <span class="keywordflow">return</span> coeffs ;
-<a name="l01104"></a>01104 }
-<a name="l01105"></a>01105 
-<a name="l01114"></a>01114 cpl_image * 
-<a name="l01115"></a>01115 sinfo_new_image_warp_fits( cpl_image * image,
-<a name="l01116"></a>01116                       <span class="keywordtype">char</span>      * kernel_type, 
-<a name="l01117"></a>01117                       <span class="keywordtype">char</span>      * poly_table )
-<a name="l01118"></a>01118 {
-<a name="l01119"></a>01119         cpl_image  * warped=NULL;
-<a name="l01120"></a>01120     <span class="comment">/* Following are for polynomial transforms */</span>
-<a name="l01121"></a>01121     cpl_polynomial    * poly_u=NULL;        <span class="comment">/* polynomial definition */</span>
-<a name="l01122"></a>01122     cpl_polynomial    * poly_v=NULL;        <span class="comment">/* polynomial definition */</span>
-<a name="l01123"></a>01123         cpl_table* poly_tbl=NULL;
-<a name="l01124"></a>01124     cpl_vector      *   profile=NULL ;
-<a name="l01125"></a>01125         cpl_size local_pow[2];
-<a name="l01126"></a>01126         <span class="keywordtype">int</span>             i=0;
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128     <span class="comment">/*fscanf(poly_in,"%s",poly_string);*/</span>
-<a name="l01129"></a>01129     <span class="comment">/* sinfo_msg("%s",poly_string); */</span>
-<a name="l01130"></a>01130     
-<a name="l01131"></a>01131     poly_u = cpl_polynomial_new(2);
-<a name="l01132"></a>01132         <span class="keywordflow">if</span> (poly_u == NULL) {
-<a name="l01133"></a>01133             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot read 2D poly from arc table"</span>) ;
-<a name="l01134"></a>01134             <span class="keywordflow">return</span> NULL ;
-<a name="l01135"></a>01135         }
-<a name="l01136"></a>01136  
-<a name="l01137"></a>01137         <span class="keywordflow">if</span> (poly_u != NULL) {
-<a name="l01138"></a>01138       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Get the arc distortion from the file %s"</span>,
-<a name="l01139"></a>01139                           poly_table);
-<a name="l01140"></a>01140       <span class="keywordflow">if</span>(sinfo_is_fits_file(poly_table) != 1) {
-<a name="l01141"></a>01141         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,poly_table);
-<a name="l01142"></a>01142         <span class="keywordflow">return</span> NULL;
-<a name="l01143"></a>01143       }
-<a name="l01144"></a>01144 
-<a name="l01145"></a>01145       <span class="keywordflow">if</span>(NULL==(poly_tbl = cpl_table_load(poly_table,1,0))) {
-<a name="l01146"></a>01146         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot load the arc table"</span>) ;
-<a name="l01147"></a>01147         cpl_polynomial_delete(poly_u) ;
-<a name="l01148"></a>01148         <span class="keywordflow">return</span> NULL ;
-<a name="l01149"></a>01149       }
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151       <span class="keywordflow">for</span> (i=0 ; i<cpl_table_get_nrow(poly_tbl) ; i++) {
-<a name="l01152"></a>01152             local_pow[0] = cpl_table_get_int(poly_tbl, <span class="stringliteral">"degx"</span>, i, NULL) ; 
-<a name="l01153"></a>01153             local_pow[1] = cpl_table_get_int(poly_tbl, <span class="stringliteral">"degy"</span>, i, NULL) ;
-<a name="l01154"></a>01154             cpl_polynomial_set_coeff(poly_u, local_pow,
-<a name="l01155"></a>01155            cpl_table_get_double(poly_tbl, <span class="stringliteral">"coeff"</span>, i, NULL)) ;
-<a name="l01156"></a>01156       }
-<a name="l01157"></a>01157 
-<a name="l01158"></a>01158       cpl_table_delete(poly_tbl) ;
-<a name="l01159"></a>01159     } <span class="keywordflow">else</span> {
-<a name="l01160"></a>01160       sinfo_msg(<span class="stringliteral">"Use the ID polynomial for the arc dist"</span>) ;
-<a name="l01161"></a>01161       local_pow[0] = 1 ;
-<a name="l01162"></a>01162       local_pow[1] = 0 ;
-<a name="l01163"></a>01163       cpl_polynomial_set_coeff(poly_u, local_pow, 1.0) ;
-<a name="l01164"></a>01164     }
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166         poly_v=cpl_polynomial_new(2);
-<a name="l01167"></a>01167         local_pow[0]=0;
-<a name="l01168"></a>01168         local_pow[1]=1;
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170         cpl_polynomial_set_coeff(poly_v,local_pow,1.0);
-<a name="l01171"></a>01171     profile = cpl_vector_new(CPL_KERNEL_DEF_SAMPLES) ;
-<a name="l01172"></a>01172     cpl_vector_fill_kernel_profile(profile, CPL_KERNEL_TANH,
-<a name="l01173"></a>01173                        CPL_KERNEL_DEF_WIDTH) ;
-<a name="l01174"></a>01174     warped=sinfo_new_warp_image_generic(image,kernel_type,poly_u,poly_v);
-<a name="l01175"></a>01175     <span class="comment">/* YVES WAY </span>
-<a name="l01176"></a>01176 <span class="comment">      warped = cpl_image_new(cpl_image_get_size_x(image),</span>
-<a name="l01177"></a>01177 <span class="comment">                                 cpl_image_get_size_y(image),</span>
-<a name="l01178"></a>01178 <span class="comment">                                 CPL_TYPE_FLOAT);</span>
-<a name="l01179"></a>01179 <span class="comment">       </span>
-<a name="l01180"></a>01180 <span class="comment">    if (cpl_image_warp_polynomial(warped, image, poly_u, poly_v, </span>
-<a name="l01181"></a>01181 <span class="comment">                      profile,CPL_KERNEL_DEF_WIDTH,</span>
-<a name="l01182"></a>01182 <span class="comment">                      profile,CPL_KERNEL_DEF_WIDTH)</span>
-<a name="l01183"></a>01183 <span class="comment">        != CPL_ERROR_NONE) {</span>
-<a name="l01184"></a>01184 <span class="comment">            sinfo_msg_error("cannot correct the distortion") ;</span>
-<a name="l01185"></a>01185 <span class="comment">            cpl_image_delete(warped) ;</span>
-<a name="l01186"></a>01186 <span class="comment">            cpl_polynomial_delete(poly_u) ;</span>
-<a name="l01187"></a>01187 <span class="comment">            cpl_polynomial_delete(poly_v) ;</span>
-<a name="l01188"></a>01188 <span class="comment">            cpl_vector_delete(profile) ;</span>
-<a name="l01189"></a>01189 <span class="comment">            return NULL;</span>
-<a name="l01190"></a>01190 <span class="comment">    }</span>
-<a name="l01191"></a>01191 <span class="comment">    */</span>
-<a name="l01192"></a>01192 
-<a name="l01193"></a>01193       cpl_vector_delete(profile) ;
-<a name="l01194"></a>01194       <span class="keywordflow">if</span> (poly_u!=NULL) cpl_polynomial_delete(poly_u);
-<a name="l01195"></a>01195       <span class="keywordflow">if</span> (poly_v!=NULL) cpl_polynomial_delete(poly_v);
-<a name="l01196"></a>01196     
-<a name="l01197"></a>01197       <span class="keywordflow">return</span> warped;
-<a name="l01198"></a>01198 }
-<a name="l01199"></a>01199     
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_coltilt.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  19/12/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_coltilt.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        procedures to correct for tilted spectra </span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   1) float sinfo_new_slope_of_spectrum(cpl_image * ns_image,</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*                             int        box_length,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*                             float      fwhm,</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*                             float      minDiff )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   2) cpl_image * sinfo_new_shift_rows(cpl_image * image,</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*                            float      slope )</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   3) void sinfo_new_parameter_to_ascii ( float * parameter, </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*                              int n,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                              char * filename )</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*   4) float * sinfo_new_ascii_to_parameter ( char * filename,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*                                 int * n )</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*   5) double * sinfo_new_curvature_of_spectrum( cpl_image * ns_image,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                              int        order,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                                    int        box_length,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                                    int        left_pos,</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*                                    int        right_pos,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                                    float      fwhm,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                                    float      minDiff )</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*   1)  determines the sub-pixel shifts of each row by using</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*       an image with at least one continuum spectrum of a pinhole</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*       this is done by searching the spectrum within the image</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*       then fitting the spectrum along the rows within a given box</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*       by a sinfo_gaussian, so that the exact position is determined for</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*       each row. Afterwards, a straight line is fitted through the</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*       fitted positions. The slope of this linear fit is returned.</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*   2)  shifts the rows of a raw image by using the output of </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*       sinfo_slopeOfSpectrum and applying polynomial interpolation</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*   3)  stores parameters in an ASCII file </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*   4)  writes parameters stored in an ASCII file in an float array</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*   5)  this routine determines the curvature of a spectrum by fitting</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*       a polynomial to a continuum spectrum. This is done by using</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*       an image with at least one continuum spectrum of a pinhole.</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*       this is done by searching the spectrum within the image</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*       then fitting the spectrum along the rows within a given box</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*       by a sinfo_gaussian, so that the exact position is determined for</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*       each row. Afterwards, a polynomial is fitted through the</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*       found positions. The polynomial coefficients are returned.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">#include "sinfo_coltilt.h"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#include "sinfo_new_resampling.h"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#include "sinfo_fit_curve.h"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> sinfo_new_slope_of_spectrum( cpl_image * ns_image,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                        <span class="keywordtype">int</span>        box_length,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                        <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                        <span class="keywordtype">float</span>      minDiff )</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordtype">int</span> i, k, row, col ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordtype">int</span> counter, iters ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordtype">float</span> maxval ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">float</span>* col_value=NULL ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">float</span>* column_value=NULL ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     pixelvalue* col_position=NULL ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">int</span>* column_position=NULL ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">float</span>* x_position=NULL ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordtype">int</span> col_median ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">int</span> * mpar ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     Vector * line ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     FitParams ** dec_par ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     FitParams *  par ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordtype">float</span>* x=NULL; </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordtype">float</span>* y=NULL; </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordtype">float</span>* sig=NULL ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordtype">int</span> position ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordtype">int</span> ndata, mwt ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordtype">float</span> a, b, siga, sigb, chi2, q ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordtype">int</span> bad_ind ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">if</span> ( ns_image == NULL )</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sorry, no image given"</span>) ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     lx=cpl_image_get_size_x(ns_image);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     ly=cpl_image_get_size_x(ns_image);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">if</span> ( box_length <= 1 || box_length >= (<span class="keywordtype">int</span>) sqrt(lx) )</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong box length given"</span>) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">if</span> ( fwhm < 1. || fwhm > 10. )</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong full width at half maximum given"</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">if</span> ( minDiff < 1. )</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong amplitude threshold given"</span>) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     col_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     column_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     col_position=(pixelvalue*)cpl_calloc(ly,<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     column_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     x_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     x=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)); </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     y=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)); </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     sig=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     pdata=cpl_image_get_data_float(ns_image);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="comment">/* go through the image rows */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         col_value[row] = -FLT_MAX ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         col_position[row] = -1. ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         <span class="comment">/* find the maximum value in each row and store the found column */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>             <span class="keywordflow">if</span> ( pdata[col+row*lx] > col_value[row] )</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>             {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                 col_value[row]    = pdata[col+row*lx] ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                 col_position[row] = (pixelvalue)col ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>             }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="comment">/* now determine the sinfo_new_median of the found columns to be sure </span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">       to have the brightest spectrum */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     col_median = (int)sinfo_new_median(col_position, ly) ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     sinfo_msg (<span class="stringliteral">"sinfo_new_median column position of brightest spectrum %d\n"</span>, </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>               col_median) ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="comment">/* now find the peaks around col_median over the whole spectral range */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         x_position[row] = 0. ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         column_value[row] = -FLT_MAX ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         column_position[row] = -1 ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         <span class="keywordflow">for</span> ( col = col_median - box_length ; </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>               col <= col_median + box_length ; col++ )</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>             <span class="keywordflow">if</span> ( pdata[col+row*lx] > column_value[row] )</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>             {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                 column_value[row] = pdata[col+row*lx] ; </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                 column_position[row] = col ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>             }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         <span class="comment">/* allocate memory for the array where the line is fitted in */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*box_length + 1)) )</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector in row %d"</span>, row) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>             <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         dec_par = sinfo_new_fit_params(1) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     par = dec_par[0];</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         counter = 0 ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         bad_ind = 0 ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <span class="comment">/* store the values to fit in a Vector object */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         <span class="keywordflow">for</span> ( col = column_position[row] - box_length ; </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>               col <= column_position[row] + box_length ; col++ )</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>             <span class="keywordflow">if</span> ( col < 0 || col >= lx )</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>             {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong spectrum position or box_length "</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                                  <span class="stringliteral">"given in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                 cpl_free (xdat) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                 cpl_free (wdat) ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                 cpl_free (mpar) ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                 sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                 sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                 <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>             }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(pdata[col+row*lx]) )</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>             {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                 bad_ind = 1 ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>             {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                 line -> data[counter] = pdata[col + row*lx] ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                 counter++ ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>             }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>  </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         <span class="comment">/* go to the next row if a bad pixel is inside the box */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <span class="keywordflow">if</span> ( bad_ind == 1 )</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, bad pixel inside fitting "</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                                <span class="stringliteral">"box in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             continue ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">         * go through the line sinfo_vector</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">         * determine the maximum pixel value in the line sinfo_vector</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         position = -INT32_MAX ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         <span class="keywordflow">for</span> ( i = 0 ; i < counter ; i++ )</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>             xdat[i] = i ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             <span class="keywordflow">if</span> ( line -> data[i] >= maxval )</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                 maxval = line -> data[i] ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                 position = i ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>             }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         xdim     = XDIM ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         ndat     = line -> n_elements ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>         tol      = TOL ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         lab      = LAB ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         its      = ITS ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>         (*par).fit_par[1] = fwhm ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         (*par).fit_par[2] = (float) position ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         (*par).fit_par[3] = (float) (line -> data[0] + </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                             line -> data[line->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         (*par).fit_par[0]  = maxval - ((*par).fit_par[3]) ;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         <span class="comment">/* exclude negative peaks and low signal cases */</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         <span class="keywordflow">if</span> ( (*par).fit_par[0] < minDiff )</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, negative peak or signal of line "</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                                <span class="stringliteral">"too low to fit in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>             continue ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>             (*par).derv_par[k] = 0.0 ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>             mpar[k] = 1 ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                                                line -> data, wdat, </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                                                &ndat, (*par).fit_par,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                                (*par).derv_par, mpar, </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                                &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit "</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                                <span class="stringliteral">"failed in row: %d, error no.: %d"</span>,row,iters) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>             continue ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         <span class="comment">/* check for negative fit results */</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         <span class="keywordflow">if</span> ( (*par).fit_par[0] <= 0. || (*par).fit_par[1] <= 0. ||</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>              (*par).fit_par[2] <= 0. )</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                                <span class="stringliteral">"not used! in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>             continue ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <span class="comment">/* correct the fitted position for the given row of the line in </span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="comment">           image coordinates */</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         x_position[row] =  (float) (column_position[row] - box_length) + </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                            (*par).fit_par[2] ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         <span class="comment">/* store the fit errors of the positions as weights for the later </span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">           linear fit */</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         sig[row] = (*par).derv_par[2] ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         sinfo_new_destroy_vector ( line ) ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="comment">/* -----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">     * now that we have a sub-pixel resolved list of spectral maxima stored </span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">     * in x_position[row]</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">     * We can fit a flux weighted straight line to the positions to determine </span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">     * the spectral column shifts.</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     ndata = 0 ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">for</span> ( row = 0 ; row < lx ; row++ )</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         <span class="keywordflow">if</span> ( x_position[row] == 0. || sig[row] == 0. )</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>             continue ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         }</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>             y[ndata]   = x_position[row] ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>             x[ndata]   = (float)row ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>             sig[ndata] = sig[row] ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>             ndata++ ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordflow">if</span> ( ndata < 10 )</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough positions to do the linear fit"</span>) ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="comment">/* now do the fit and return the slope of the straight line */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     mwt = 0 ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     sinfo_my_fit(x, y, ndata, sig, mwt, &a, &b, &siga, &sigb, &chi2, &q) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     cpl_free(col_value) ;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_free(column_value) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     cpl_free(col_position) ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     cpl_free(column_position) ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     cpl_free(x_position) ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     cpl_free(x); </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     cpl_free(y); </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     cpl_free(sig) ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     <span class="keywordflow">return</span> b ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> cpl_image * </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> sinfo_new_shift_rows( cpl_image * image,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                       <span class="keywordtype">float</span>      slope, </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                       <span class="keywordtype">int</span>        n_order )</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     cpl_image * returnImage=NULL ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="keywordtype">float</span> xshift=0 ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="keywordtype">int</span>   intshift = 0 ;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordtype">float</span> new_sum=0;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="keywordtype">float</span>* row_data=NULL ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="keywordtype">float</span>* corrected_row_data=NULL ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordtype">float</span> eval=0 <span class="comment">/*, dy*/</span> ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordtype">float</span> * imageptr=NULL ;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <span class="keywordtype">int</span> firstpos=0;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keywordtype">int</span> n_points=0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordtype">int</span> flag=0;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given"</span>) ;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="keywordflow">if</span> ( slope == 0. )</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"there is no need to shift the image rows!"</span>) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordflow">if</span> ( n_order <= 0 )</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     }</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     returnImage = cpl_image_duplicate( image ) ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     olx=cpl_image_get_size_x(returnImage);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     oly=cpl_image_get_size_y(returnImage);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     podata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     n_points = n_order + 1 ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <span class="keywordflow">if</span> ( n_points % 2 == 0 )</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>         firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     xnum=cpl_calloc(n_order + 1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="comment">/* fill the xa[] array for the polint function */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         xnum[i] = i ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="comment">/* go through the image rows */</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     {</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         <span class="comment">/* determine the shift for each row, the middle row is not shifted */</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         xshift = slope * (float)( (ily / 2) - row ) ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         intshift = sinfo_new_nint(xshift) ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         xshift = xshift - (float)intshift ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>             corrected_row_data[col] = 0. ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         sum = 0. ; <span class="comment">/* initialize flux for later rescaling */</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         {</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>         <span class="comment">/* consider integer pixel shifts */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         <span class="keywordflow">if</span> ( intshift < 0 )</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>             {</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>         <span class="keywordflow">if</span> ( col - intshift < ilx )</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>             row_data[col] = pidata[col-intshift+row*ilx] ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                 }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         {</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>             row_data[col] = 0. ;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                 }</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         }</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( intshift > 0 )</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         {</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>         <span class="keywordflow">if</span> ( col - intshift >= 0 )</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             row_data[col] = pidata[col-intshift+row*ilx] ;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>                 }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         {</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             row_data[col] = 0. ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         }</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         }</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>         {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                row_data[col] = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>             <span class="comment">/* don't consider the sinfo_edge pixels for flux calculation */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>             <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 && !isnan(row_data[col]) )</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>             {</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>                 sum += row_data[col] ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>             }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>             <span class="keywordflow">if</span> (isnan(row_data[col])) </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>             {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                 row_data[col] = 0. ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                 <span class="keywordflow">for</span> (i = col - firstpos ; i < col - firstpos + n_points ; i++ )</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                 {</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                     <span class="keywordflow">if</span> ( i >= ilx) continue ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                     corrected_row_data[i] = ZERO ;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                 }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>             }</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>         }</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment">         * now we do the polynomial interpolation to achieve the fractional</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">         * shift that means call polint</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         new_sum = 0. ;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>         {</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="comment">             * now determine the arrays of size n_points with which the</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment">             * polynom is determined and determine the position eval</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="comment">             * where the polynom is evaluated in polint of N.R..</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="comment">             * Take care of the points near the row edges!</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>             <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) )</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>             {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>                  continue ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>             }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>             <span class="keywordflow">if</span> ( col - firstpos < 0 )</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>             {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                 imageptr = &row_data[0] ;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                 eval     = (float)col - xshift ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>             }</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col - firstpos + n_points >= ilx )</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>             {</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                 imageptr = &row_data[ilx - n_points] ;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                 eval     = (float)(col + n_points - ilx) - xshift ;</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             }</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             {</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                 imageptr = &row_data[col-firstpos] ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                 eval     = (float)firstpos - xshift ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>             }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         flag=0;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>         corrected_row_data[col]=sinfo_new_nev_ille(xnum,imageptr,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                                                        n_order,eval,&flag);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             <span class="comment">/*polint( xnum - 1, imageptr, n_points, eval, </span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> <span class="comment">                      &corrected_row_data[col], &dy ) ;*/</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>             <span class="comment">/* don't take the sinfo_edge points to calculate </span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> <span class="comment">               the scaling factor */</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>             <span class="keywordflow">if</span> (col != 0 && col != ilx - 1 && !isnan(corrected_row_data[col]) )</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>             {</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                 new_sum += corrected_row_data[col] ;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>             }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         <span class="keywordflow">if</span> ( new_sum == 0. )</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>             new_sum = 1. ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>             <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]))</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>             {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                 podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>             }</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>             {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>               <span class="comment">/* rescale the row data and fill the returned image */</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>               <span class="comment">/* This gives sometimes inconsistent results if </span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment">                 bad pixels are around */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>               <span class="comment">/* rescaling is commented out because it delivers wrong results</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="comment">                 in case of appearance of blanks or bad pixels */</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>              <span class="comment">/*   corrected_row_data[col] *= sum / new_sum ; */</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                 podata[col+row*ilx] = corrected_row_data[col] ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>             }</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     }      </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     cpl_free(xnum) ;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     cpl_free(row_data) ;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     cpl_free(corrected_row_data);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> }</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> sinfo_new_parameter_to_ascii ( <span class="keywordtype">float</span> * parameter, </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                         <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>                         <span class="keywordtype">char</span> * filename )</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> {</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     FILE * fp ;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordtype">int</span>     i=0 ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <span class="keywordflow">if</span> ( parameter == NULL || filename == NULL || n <= 0 )</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input is missing or wrong!"</span>) ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>         return ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     }</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"w"</span> ) ) )</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s"</span>, filename) ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         return ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         fprintf (fp, <span class="stringliteral">"%le\n"</span>, parameter[i] ) ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     fclose (fp ) ;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> }</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> sinfo_new_ascii_to_parameter ( <span class="keywordtype">char</span> * filename,</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>                            <span class="keywordtype">int</span> * n )</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> {</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     FILE * fp ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     <span class="keywordtype">float</span> * parameter=NULL ;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordtype">int</span>     i=0 ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     <span class="keywordflow">if</span> ( filename == NULL || n == NULL )</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Input is missing or wrong"</span>) ;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     }</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"r"</span> ) ) )</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     {</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s"</span>, filename) ;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     }</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <span class="keywordflow">if</span> (NULL == ( parameter = (<span class="keywordtype">float</span>*) cpl_calloc (ESTIMATE, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory"</span>) ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         fclose (fp ) ;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     i = 0 ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordflow">while</span> ( fscanf(fp, <span class="stringliteral">"%g\n"</span>, &parameter[i]) != EOF )</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     {</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>         i++ ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     }</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     *n = i ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     fclose (fp ) ;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     <span class="keywordflow">return</span> parameter ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> }</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="keywordtype">double</span> * </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> sinfo_new_curvature_of_spectrum( cpl_image * ns_image,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                     <span class="keywordtype">int</span>        order,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                          <span class="keywordtype">int</span>        box_length,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                  <span class="keywordtype">int</span>        left_pos,</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>              <span class="keywordtype">int</span>        right_pos,</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>                          <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                          <span class="keywordtype">float</span>      minDiff )</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> {</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordtype">int</span> counter=0;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordtype">int</span> iters=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordtype">int</span> xdim=0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordtype">int</span> ndat=0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     <span class="keywordtype">int</span> its=0;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     <span class="keywordtype">int</span> numpar=0;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <span class="keywordtype">float</span> maxval=0 ;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     <span class="keywordtype">float</span> tol=0;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordtype">float</span> lab=0;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordtype">float</span>* col_value=NULL ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     <span class="keywordtype">float</span>* column_value=NULL ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     pixelvalue* col_position=NULL ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     <span class="keywordtype">int</span>* column_position=NULL ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordtype">float</span>* x_position=NULL ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <span class="keywordtype">int</span> col_median=0;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="keywordtype">float</span> * xdat=NULL;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordtype">float</span> * wdat=NULL;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordtype">int</span> * mpar=NULL;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     Vector * line=NULL;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     FitParams ** dec_par=NULL ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     FitParams * par=NULL ;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="keywordtype">int</span> position=0 ;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     <span class="keywordtype">int</span> ndata=0 ;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     <span class="keywordtype">int</span> bad_ind=0 ;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     dpoint * list=NULL ;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     <span class="keywordtype">double</span> * coeffs=NULL ;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     <span class="keywordtype">double</span> offset=0 ;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     <span class="keywordflow">if</span> ( ns_image == NULL )</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     {</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given"</span>) ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     lx=cpl_image_get_size_x(ns_image);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     ly=cpl_image_get_size_y(ns_image);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keywordflow">if</span> ( box_length <= 1 || box_length >= right_pos - left_pos )</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     {</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong box length given"</span>) ;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     }</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     <span class="keywordflow">if</span> ( fwhm < 1. || fwhm > 10. )</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong full width at half maximum given"</span>) ;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="keywordflow">if</span> ( left_pos < 0 || right_pos <= left_pos || right_pos > lx )</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     {</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong left and right positions"</span>) ;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     }</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     <span class="keywordflow">if</span> ( minDiff < 1. )</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     {</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong amplitude threshold given!"</span>) ;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     col_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     column_value=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     col_position=(pixelvalue*)cpl_calloc(ly,<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     column_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     x_position=cpl_calloc(ly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="comment">/* go through the image rows */</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     {</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         col_value[row] = -FLT_MAX ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>         col_position[row] = -1. ;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>         <span class="comment">/* find the maximum value in each row and store the found column */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>         <span class="keywordflow">for</span> ( col = left_pos ; col < right_pos ; col++ )</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>         {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>             <span class="keywordflow">if</span> ( pdata[col+row*lx] > col_value[row] )</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>             {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>                 col_value[row]    = pdata[col+row*lx] ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>                 col_position[row] = (pixelvalue)col ;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>             }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>         }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <span class="comment">/* now determine the sinfo_new_median of the found columns to be sure </span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="comment">       to have the brightest spectrum */</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     col_median = (int)sinfo_new_median(col_position, right_pos - left_pos) ;</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     <span class="comment">/* now find the peaks around col_median over the whole spectral range */</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     {</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>         x_position[row] = 0. ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>         column_value[row] = -FLT_MAX ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>         column_position[row] = -1 ;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         <span class="keywordflow">for</span> ( col = col_median - box_length ; </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>               col <= col_median + box_length ; col++ )</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         {</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>             <span class="keywordflow">if</span> ( pdata[col+row*lx] > column_value[row] )</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>             {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>                 column_value[row] = pdata[col+row*lx] ; </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                 column_position[row] = col ;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>             }</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>         }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>         <span class="comment">/* allocate memory for the array where the line is fitted in */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*box_length + 1)) )</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         dec_par = sinfo_new_fit_params(1) ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>         par = dec_par[0];</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         counter = 0 ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>         bad_ind = 0 ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>         <span class="comment">/* store the values to fit in a Vector object */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         <span class="keywordflow">for</span> ( col = column_position[row] - box_length ; </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>               col <= column_position[row] + box_length ; col++ )</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         {</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>             <span class="keywordflow">if</span> ( col < 0 || col >= lx )</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>             {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong spectrum position or box_length "</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>                                  <span class="stringliteral">"given in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>                 cpl_free (xdat) ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>                 cpl_free (wdat) ;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                 cpl_free (mpar) ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                 sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                 sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>             }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(pdata[col+row*lx]) )</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>             {</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>                 bad_ind = 1 ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>             }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>             {</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>                 line -> data[counter] = pdata[col + row*lx] ;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>                 counter++ ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>             }</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>         }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>  </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         <span class="comment">/* go to the next row if a bad pixel is inside the box */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         <span class="keywordflow">if</span> ( bad_ind == 1 )</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>         {</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, bad pixel inside fitting box "</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                                <span class="stringliteral">"in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>             continue ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>         }</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="comment">         * go through the line sinfo_vector</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> <span class="comment">         * determine the maximum pixel value in the line sinfo_vector</span></div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>         maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         position = -INT32_MAX ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         <span class="keywordflow">for</span> ( i = 0 ; i < counter ; i++ )</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>         {</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>             xdat[i] = i ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>             wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>             <span class="keywordflow">if</span> ( line -> data[i] >= maxval )</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>             {</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>                 maxval = line -> data[i] ;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>                 position = i ;</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>             }</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         }</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>         xdim     = XDIM ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>         ndat     = line -> n_elements ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>         tol      = TOL ;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         lab      = LAB ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         its      = ITS ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         (*par).fit_par[1] = fwhm ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         (*par).fit_par[2] = (float) position ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         (*par).fit_par[3] = (float) (line -> data[0] + </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>                                      line -> data[line->n_elements - 1]) / 2.0;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>         (*par).fit_par[0]  = maxval - ((*par).fit_par[3]) ;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>         <span class="comment">/* exclude negative peaks and low signal cases */</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         <span class="keywordflow">if</span> ( (*par).fit_par[0] < minDiff )</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         {</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, negative peak or signal of line "</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>                                <span class="stringliteral">"too low to fit in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>             continue ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>         }</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>         <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>             (*par).derv_par[k] = 0.0 ;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>             mpar[k] = 1 ;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>         }</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>                                                line -> data, wdat, </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>                                                &ndat, (*par).fit_par,</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                                                (*par).derv_par, mpar, </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>                                                &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>         {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"least squares fit failed in row: "</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>                                <span class="stringliteral">"%d, error no.: %d"</span>, row, iters) ;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>             continue ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         <span class="comment">/* check for negative fit results */</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         <span class="keywordflow">if</span> ( (*par).fit_par[0] <= 0. || (*par).fit_par[1] <= 1. ||</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>              (*par).fit_par[2] <= 0. )</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         {</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>                                <span class="stringliteral">"not used! in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>             cpl_free (xdat) ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>             cpl_free (wdat) ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>             cpl_free (mpar) ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>             sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>             sinfo_new_destroy_vector( line ) ;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>             continue ;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         }</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         <span class="comment">/* correct the fitted position for the given row of the line </span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">           in image coordinates */</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         x_position[row] =  (float) (column_position[row] - box_length) + </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>                                    (*par).fit_par[2] ;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         printf(<span class="stringliteral">"%d %f %f\n"</span>,row, (*par).fit_par[1], x_position[row] ) ;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>         <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>         sinfo_new_destroy_fit_params(&dec_par) ;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         sinfo_new_destroy_vector ( line ) ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>         cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>         cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>         cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     <span class="comment">/* now allocate memory for the data to fit */</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordflow">if</span> ( NULL == ( list = (dpoint*) cpl_calloc (ly, <span class="keyword">sizeof</span> (dpoint)) ) ) </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     {</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     <span class="comment">/* ------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">     * now that we have a sub-pixel resolved list of spectral maxima stored </span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">     * in x_position[row] We can fit a flux weighted straight line to the </span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">     * positions to determine the spectral column shifts.</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     offset = (double) ly/2. ;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     ndata = 0 ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ )</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>         <span class="keywordflow">if</span> ( x_position[row] == 0. )</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>         {</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>             continue ;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>         }</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>         {</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>             list[ndata].y   = (double)x_position[row] ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>             list[ndata].x   = (double)row - offset ;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>             ndata++ ;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         }</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     }</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>     </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     <span class="keywordflow">if</span> ( NULL == (coeffs = sinfo_fit_1d_poly(order, list, ndata, NULL)) )</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     {</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"eclipse function sinfo_fit_1d_poly() did not work!"</span>) ;</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     }</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     cpl_free ( list ) ;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     cpl_free(col_value) ;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     cpl_free(column_value) ;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     cpl_free(col_position) ;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     cpl_free(column_position) ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     cpl_free(x_position) ;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>      </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     <span class="keywordflow">return</span> coeffs ;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> }</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> cpl_image * </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> sinfo_new_image_warp_fits( cpl_image * image,</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>                       <span class="keywordtype">char</span>      * kernel_type, </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>                       <span class="keywordtype">char</span>      * poly_table )</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> {</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         cpl_image  * warped=NULL;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <span class="comment">/* Following are for polynomial transforms */</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     cpl_polynomial    * poly_u=NULL;        <span class="comment">/* polynomial definition */</span></div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     cpl_polynomial    * poly_v=NULL;        <span class="comment">/* polynomial definition */</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         cpl_table* poly_tbl=NULL;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     cpl_vector      *   profile=NULL ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         cpl_size local_pow[2];</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         <span class="keywordtype">int</span>             i=0;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     <span class="comment">/*fscanf(poly_in,"%s",poly_string);*/</span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="comment">/* sinfo_msg("%s",poly_string); */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     poly_u = cpl_polynomial_new(2);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         <span class="keywordflow">if</span> (poly_u == NULL) {</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot read 2D poly from arc table"</span>) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         <span class="keywordflow">if</span> (poly_u != NULL) {</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Get the arc distortion from the file %s"</span>,</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>                           poly_table);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(poly_table) != 1) {</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,poly_table);</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>       }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>       <span class="keywordflow">if</span>(NULL==(poly_tbl = cpl_table_load(poly_table,1,0))) {</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot load the arc table"</span>) ;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         cpl_polynomial_delete(poly_u) ;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>       <span class="keywordflow">for</span> (i=0 ; i<cpl_table_get_nrow(poly_tbl) ; i++) {</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>             local_pow[0] = cpl_table_get_int(poly_tbl, <span class="stringliteral">"degx"</span>, i, NULL) ; </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             local_pow[1] = cpl_table_get_int(poly_tbl, <span class="stringliteral">"degy"</span>, i, NULL) ;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             cpl_polynomial_set_coeff(poly_u, local_pow,</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>            cpl_table_get_double(poly_tbl, <span class="stringliteral">"coeff"</span>, i, NULL)) ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>       }</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>       cpl_table_delete(poly_tbl) ;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>       sinfo_msg(<span class="stringliteral">"Use the ID polynomial for the arc dist"</span>) ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>       local_pow[0] = 1 ;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       local_pow[1] = 0 ;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       cpl_polynomial_set_coeff(poly_u, local_pow, 1.0) ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>         poly_v=cpl_polynomial_new(2);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>         local_pow[0]=0;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>         local_pow[1]=1;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>         cpl_polynomial_set_coeff(poly_v,local_pow,1.0);</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     profile = cpl_vector_new(CPL_KERNEL_DEF_SAMPLES) ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>     cpl_vector_fill_kernel_profile(profile, CPL_KERNEL_TANH,</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                        CPL_KERNEL_DEF_WIDTH) ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     warped=sinfo_new_warp_image_generic(image,kernel_type,poly_u,poly_v);</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     <span class="comment">/* YVES WAY </span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="comment">      warped = cpl_image_new(cpl_image_get_size_x(image),</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="comment">                                 cpl_image_get_size_y(image),</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="comment">                                 CPL_TYPE_FLOAT);</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">       </span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment">    if (cpl_image_warp_polynomial(warped, image, poly_u, poly_v, </span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">                      profile,CPL_KERNEL_DEF_WIDTH,</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">                      profile,CPL_KERNEL_DEF_WIDTH)</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">        != CPL_ERROR_NONE) {</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment">            sinfo_msg_error("cannot correct the distortion") ;</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">            cpl_image_delete(warped) ;</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">            cpl_polynomial_delete(poly_u) ;</span></div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">            cpl_polynomial_delete(poly_v) ;</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> <span class="comment">            cpl_vector_delete(profile) ;</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">            return NULL;</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>       cpl_vector_delete(profile) ;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       <span class="keywordflow">if</span> (poly_u!=NULL) cpl_polynomial_delete(poly_u);</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>       <span class="keywordflow">if</span> (poly_v!=NULL) cpl_polynomial_delete(poly_v);</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>       <span class="keywordflow">return</span> warped;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> }</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__coltilt_8h_source.html b/html/sinfo__coltilt_8h_source.html
index fa7eca4..b424b03 100644
--- a/html/sinfo__coltilt_8h_source.html
+++ b/html/sinfo__coltilt_8h_source.html
@@ -2,117 +2,148 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_coltilt.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_coltilt.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_COLTILT_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_COLTILT_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_coltilt.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  20/12/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_coltilt.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to calculate and correct the spatial tilt of spectra in raw images</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span> 
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_spiffi_types.h"</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">   @name   sinfo_new_slope_of_spectrum()</span>
-<a name="l00050"></a>00050 <span class="comment">   @param  ns_image   image with at least one continuum spectrum of a pinhole</span>
-<a name="l00051"></a>00051 <span class="comment">   @param  box_length width of the box in which the lines are fit by a Gaussian</span>
-<a name="l00052"></a>00052 <span class="comment">   @param  fwhm       first guess of the full width at half maximum</span>
-<a name="l00053"></a>00053 <span class="comment">   @param  min_amplitude_factor factor peak/background below given threshold </span>
-<a name="l00054"></a>00054 <span class="comment">           the fit is not carried through</span>
-<a name="l00055"></a>00055 <span class="comment">   @return slope of a straight line fitted to the spectrum. -FLT_MAX if </span>
-<a name="l00056"></a>00056 <span class="comment">           something went wrong.</span>
-<a name="l00057"></a>00057 <span class="comment">   @doc    determines the sub-pixel shifts of each row by using an image with </span>
-<a name="l00058"></a>00058 <span class="comment">           at least one continuum spectrum of a pinhole this is done by </span>
-<a name="l00059"></a>00059 <span class="comment">           searching the spectrum within the image then fitting the spectrum </span>
-<a name="l00060"></a>00060 <span class="comment">           along the rows within a given box by a Gaussian, so that the exact </span>
-<a name="l00061"></a>00061 <span class="comment">           position is determined for each row. Afterwards, a straight line is </span>
-<a name="l00062"></a>00062 <span class="comment">           fitted through the fitted positions. The slope of this linear fit </span>
-<a name="l00063"></a>00063 <span class="comment">           is returned.</span>
-<a name="l00064"></a>00064 <span class="comment">*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keywordtype">float</span> 
-<a name="l00067"></a>00067 sinfo_new_slope_of_spectrum(cpl_image * ns_image,
-<a name="l00068"></a>00068                        <span class="keywordtype">int</span>        box_length,
-<a name="l00069"></a>00069                        <span class="keywordtype">float</span>      fwhm,
-<a name="l00070"></a>00070                        <span class="keywordtype">float</span>      min_amplitude_factor ) ;
-<a name="l00071"></a>00071 
-<a name="l00084"></a>00084 cpl_image * 
-<a name="l00085"></a>00085 sinfo_new_shift_rows(cpl_image * image,
-<a name="l00086"></a>00086              <span class="keywordtype">float</span>      slope,
-<a name="l00087"></a>00087              <span class="keywordtype">int</span>        n_order ) ;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00100"></a>00100 <span class="keywordtype">void</span> 
-<a name="l00101"></a>00101 sinfo_new_parameter_to_ascii ( <span class="keywordtype">float</span> * parameter,
-<a name="l00102"></a>00102                         <span class="keywordtype">int</span> n,
-<a name="l00103"></a>00103                         <span class="keywordtype">char</span> * filename ) ;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00113"></a>00113 <span class="keywordtype">float</span> * 
-<a name="l00114"></a>00114 sinfo_new_ascii_to_parameter ( <span class="keywordtype">char</span> * filename,
-<a name="l00115"></a>00115                            <span class="keywordtype">int</span>  * n ) ;
-<a name="l00116"></a>00116 
-<a name="l00139"></a>00139 <span class="keywordtype">double</span> * 
-<a name="l00140"></a>00140 sinfo_new_curvature_of_spectrum(cpl_image * ns_image,
-<a name="l00141"></a>00141                 <span class="keywordtype">int</span>        order, 
-<a name="l00142"></a>00142              <span class="keywordtype">int</span>        box_length,
-<a name="l00143"></a>00143              <span class="keywordtype">int</span>        left_pos,
-<a name="l00144"></a>00144                          <span class="keywordtype">int</span>        right_pos,
-<a name="l00145"></a>00145                          <span class="keywordtype">float</span>      fwhm,
-<a name="l00146"></a>00146                          <span class="keywordtype">float</span>      min_amplitude_factor ) ;
-<a name="l00147"></a>00147 
-<a name="l00156"></a>00156 cpl_image * 
-<a name="l00157"></a>00157 sinfo_new_image_warp_fits(cpl_image * image,
-<a name="l00158"></a>00158                       <span class="keywordtype">char</span>      * kernel_type, 
-<a name="l00159"></a>00159                       <span class="keywordtype">char</span>      * poly_table );
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_coltilt.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_COLTILT_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_COLTILT_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_coltilt.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  20/12/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_coltilt.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to calculate and correct the spatial tilt of spectra in raw images</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_spiffi_types.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   @name   sinfo_new_slope_of_spectrum()</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   @param  ns_image   image with at least one continuum spectrum of a pinhole</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   @param  box_length width of the box in which the lines are fit by a Gaussian</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   @param  fwhm       first guess of the full width at half maximum</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   @param  min_amplitude_factor factor peak/background below given threshold </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">           the fit is not carried through</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   @return slope of a straight line fitted to the spectrum. -FLT_MAX if </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">           something went wrong.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">   @doc    determines the sub-pixel shifts of each row by using an image with </span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">           at least one continuum spectrum of a pinhole this is done by </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">           searching the spectrum within the image then fitting the spectrum </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">           along the rows within a given box by a Gaussian, so that the exact </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">           position is determined for each row. Afterwards, a straight line is </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">           fitted through the fitted positions. The slope of this linear fit </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">           is returned.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_slope_of_spectrum(cpl_image * ns_image,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                        <span class="keywordtype">int</span>        box_length,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                        <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                        <span class="keywordtype">float</span>      min_amplitude_factor ) ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> cpl_image * </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_new_shift_rows(cpl_image * image,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>              <span class="keywordtype">float</span>      slope,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>              <span class="keywordtype">int</span>        n_order ) ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> sinfo_new_parameter_to_ascii ( <span class="keywordtype">float</span> * parameter,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                         <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                         <span class="keywordtype">char</span> * filename ) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> sinfo_new_ascii_to_parameter ( <span class="keywordtype">char</span> * filename,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                            <span class="keywordtype">int</span>  * n ) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keywordtype">double</span> * </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> sinfo_new_curvature_of_spectrum(cpl_image * ns_image,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                 <span class="keywordtype">int</span>        order, </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>              <span class="keywordtype">int</span>        box_length,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>              <span class="keywordtype">int</span>        left_pos,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                          <span class="keywordtype">int</span>        right_pos,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                          <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                          <span class="keywordtype">float</span>      min_amplitude_factor ) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> cpl_image * </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> sinfo_new_image_warp_fits(cpl_image * image,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                       <span class="keywordtype">char</span>      * kernel_type, </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                       <span class="keywordtype">char</span>      * poly_table );</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__companion_8c_source.html b/html/sinfo__companion_8c_source.html
index 23a9151..c29da2a 100644
--- a/html/sinfo__companion_8c_source.html
+++ b/html/sinfo__companion_8c_source.html
@@ -2,53 +2,84 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_companion.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_companion.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00023"></a>00023 
-<a name="l00039"></a>00039 <span class="keywordtype">void</span>
-<a name="l00040"></a>00040 sinfo_set_companion_matrix (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> nc, <span class="keywordtype">double</span> *m)
-<a name="l00041"></a>00041 {
-<a name="l00042"></a>00042   <span class="keywordtype">size_t</span> i, j;
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044   <span class="keywordflow">for</span> (i = 0; i < nc; i++)
-<a name="l00045"></a>00045     <span class="keywordflow">for</span> (j = 0; j < nc; j++)
-<a name="l00046"></a>00046       MAT (m, i, j, nc) = 0.0;
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048   <span class="keywordflow">for</span> (i = 1; i < nc; i++)
-<a name="l00049"></a>00049     MAT (m, i, i - 1, nc) = 1.0;
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051   <span class="keywordflow">for</span> (i = 0; i < nc; i++)
-<a name="l00052"></a>00052     MAT (m, i, nc - 1, nc) = -a[i] / a[nc];
-<a name="l00053"></a>00053 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_companion.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> sinfo_set_companion_matrix (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> nc, <span class="keywordtype">double</span> *m)</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">size_t</span> i, j;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordflow">for</span> (i = 0; i < nc; i++)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     <span class="keywordflow">for</span> (j = 0; j < nc; j++)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>       MAT (m, i, j, nc) = 0.0;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">for</span> (i = 1; i < nc; i++)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     MAT (m, i, i - 1, nc) = 1.0;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordflow">for</span> (i = 0; i < nc; i++)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     MAT (m, i, nc - 1, nc) = -a[i] / a[nc];</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__compare__tags_8h_source.html b/html/sinfo__compare__tags_8h_source.html
index e569656..0735a00 100644
--- a/html/sinfo__compare__tags_8h_source.html
+++ b/html/sinfo__compare__tags_8h_source.html
@@ -2,43 +2,74 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_compare_tags.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_compare_tags.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifndef SINFO_COMPARE_TAGS_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_COMPARE_TAGS_H</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include <string.h></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <strings.h></span>
-<a name="l00024"></a>00024 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="keywordtype">int</span> 
-<a name="l00033"></a>00033 compare_tags(cpl_frame   *   frame1,cpl_frame   *   frame2);
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_compare_tags.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifndef SINFO_COMPARE_TAGS_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_COMPARE_TAGS_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> compare_tags(cpl_frame   *   frame1,cpl_frame   *   frame2);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__cpl__size_8h_source.html b/html/sinfo__cpl__size_8h_source.html
index 1128a6c..4c0df80 100644
--- a/html/sinfo__cpl__size_8h_source.html
+++ b/html/sinfo__cpl__size_8h_source.html
@@ -2,32 +2,63 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_cpl_size.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_cpl_size.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * sinfo_cpl_size.h</span>
-<a name="l00003"></a>00003 <span class="comment"> *</span>
-<a name="l00004"></a>00004 <span class="comment"> *  Created on: Nov 23, 2011</span>
-<a name="l00005"></a>00005 <span class="comment"> *      Author: amodigli</span>
-<a name="l00006"></a>00006 <span class="comment"> */</span>
-<a name="l00007"></a>00007 
-<a name="l00008"></a>00008 <span class="preprocessor">#ifndef SINFO_CPL_SIZE_H_</span>
-<a name="l00009"></a>00009 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CPL_SIZE_H_</span>
-<a name="l00010"></a>00010 <span class="preprocessor"></span>
-<a name="l00011"></a>00011 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00012"></a>00012 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE <= CPL_VERSION(5, 5, 0)</span>
-<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> cpl_size; <span class="comment">/* The type as is was up to CPL 5.3 */</span>
-<a name="l00014"></a>00014 <span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span>
-<a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00016"></a>00016 <span class="preprocessor"></span>
-<a name="l00017"></a>00017 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_CPL_SIZE_H_ */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_cpl_size.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * sinfo_cpl_size.h</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *  Created on: Nov 23, 2011</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *      Author: amodigli</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> </div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="preprocessor">#ifndef SINFO_CPL_SIZE_H_</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CPL_SIZE_H_</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE <= CPL_VERSION(5, 5, 0)</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> cpl_size; <span class="comment">/* The type as is was up to CPL 5.3 */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="preprocessor">#define CPL_SIZE_FORMAT "d"</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_CPL_SIZE_H_ */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__cube__construct_8c_source.html b/html/sinfo__cube__construct_8c_source.html
index 1804424..0987ca9 100644
--- a/html/sinfo__cube__construct_8c_source.html
+++ b/html/sinfo__cube__construct_8c_source.html
@@ -2,3267 +2,3298 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_cube_construct.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_cube_construct.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  30/08/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_cube_construct.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        some procedures to construct a data cube</span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*</span>
-<a name="l00036"></a>00036 <span class="comment">*   1) cpl_image * sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,</span>
-<a name="l00037"></a>00037 <span class="comment">*                                         int        hw )</span>
-<a name="l00038"></a>00038 <span class="comment">*</span>
-<a name="l00039"></a>00039 <span class="comment">*   2) float * sinfo_north_south_test( cpl_image * ns_image,</span>
-<a name="l00040"></a>00040 <span class="comment">*                                int        n_slitlets,</span>
-<a name="l00041"></a>00041 <span class="comment">*                                int        halfWidth,</span>
-<a name="l00042"></a>00042 <span class="comment">*                                float      fwhm,</span>
-<a name="l00043"></a>00043 <span class="comment">*                                float      minDiff,</span>
-<a name="l00044"></a>00044 <span class="comment">*                                float      estimated_dist,</span>
-<a name="l00045"></a>00045 <span class="comment">*                                float      devtol )</span>
-<a name="l00046"></a>00046 <span class="comment">*</span>
-<a name="l00047"></a>00047 <span class="comment">*   3) cpl_imagelist * sinfo_new_make_cube ( cpl_image * calibImage,</span>
-<a name="l00048"></a>00048 <span class="comment">*                           float    * distances,</span>
-<a name="l00049"></a>00049 <span class="comment">*                           float    * correct_diff_dist )</span>
-<a name="l00050"></a>00050 <span class="comment">*</span>
-<a name="l00051"></a>00051 <span class="comment">*   4) cpl_imagelist * sinfo_new_make_cube_spi ( cpl_image *  calibImage,</span>
-<a name="l00052"></a>00052 <span class="comment">*                              float    ** slit_edges,</span>
-<a name="l00053"></a>00053 <span class="comment">*                              float    *  shift )</span>
-<a name="l00054"></a>00054 <span class="comment">*</span>
-<a name="l00055"></a>00055 <span class="comment">*   5) cpl_imagelist * sinfo_new_make_cube_dist ( cpl_image * calibImage,</span>
-<a name="l00056"></a>00056 <span class="comment">*                               float      firstCol,</span>
-<a name="l00057"></a>00057 <span class="comment">*                               float    * distances,</span>
-<a name="l00058"></a>00058 <span class="comment">*                               float    * shift )</span>
-<a name="l00059"></a>00059 <span class="comment">*</span>
-<a name="l00060"></a>00060 <span class="comment">*   6) cpl_imagelist * sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,</span>
-<a name="l00061"></a>00061 <span class="comment">*                                 float      firstCol,</span>
-<a name="l00062"></a>00062 <span class="comment">*                                 float    * distances,</span>
-<a name="l00063"></a>00063 <span class="comment">*                                 float    * shift )</span>
-<a name="l00064"></a>00064 <span class="comment">*</span>
-<a name="l00065"></a>00065 <span class="comment">*   7) cpl_imagelist * sinfo_new_make_3D_cube ( cpl_image * calibImage,</span>
-<a name="l00066"></a>00066 <span class="comment">*                             int      * kpixshift,  </span>
-<a name="l00067"></a>00067 <span class="comment">*                             int        kpixfirst )</span>
-<a name="l00068"></a>00068 <span class="comment">*</span>
-<a name="l00069"></a>00069 <span class="comment">*   8) cpl_imagelist * </span>
-<a name="l00070"></a>00070 <span class="comment">       sinfo_new_determine_mask_cube(cpl_imagelist * sourceMaskCube,</span>
-<a name="l00071"></a>00071 <span class="comment">*                                    float     lowLimit,</span>
-<a name="l00072"></a>00072 <span class="comment">*                                    float     highLimit )</span>
-<a name="l00073"></a>00073 <span class="comment">*</span>
-<a name="l00074"></a>00074 <span class="comment">*   9) cpl_imagelist * sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,</span>
-<a name="l00075"></a>00075 <span class="comment">*                               cpl_imagelist * maskCube,</span>
-<a name="l00076"></a>00076 <span class="comment">*                               int       n_neighbors, </span>
-<a name="l00077"></a>00077 <span class="comment">*                               int       max_radius )</span>
-<a name="l00078"></a>00078 <span class="comment">*</span>
-<a name="l00079"></a>00079 <span class="comment">*   10) cpl_imagelist * sinfo_new_fine_tune_cube( cpl_imagelist * cube,</span>
-<a name="l00080"></a>00080 <span class="comment">*                              float   * correct_diff_dist )</span>
-<a name="l00081"></a>00081 <span class="comment">*</span>
-<a name="l00082"></a>00082 <span class="comment">*   11) cpl_imagelist * sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,</span>
-<a name="l00083"></a>00083 <span class="comment">*                                   float   * correct_diff_dist )</span>
-<a name="l00084"></a>00084 <span class="comment">*</span>
-<a name="l00085"></a>00085 <span class="comment">*   12) cpl_imagelist * sinfo_new_fine_tune_cube_by_spline(cpl_imagelist * cube,</span>
-<a name="l00086"></a>00086 <span class="comment">*                                        float   * correct_diff_dist )</span>
-<a name="l00087"></a>00087 <span class="comment">*</span>
-<a name="l00088"></a>00088 <span class="comment">*   DESCRIPTION</span>
-<a name="l00089"></a>00089 <span class="comment">*</span>
-<a name="l00090"></a>00090 <span class="comment">*   1) convolves a north-south-test image with a sinfo_gaussian</span>
-<a name="l00091"></a>00091 <span class="comment">*      with user given integer half width by using the eclipse</span>
-<a name="l00092"></a>00092 <span class="comment">*      routine sinfo_function1d_filter_lowpass().</span>
-<a name="l00093"></a>00093 <span class="comment">*   2) determines the distances of the slitlets</span>
-<a name="l00094"></a>00094 <span class="comment">*   3) makes a data cube out of a resampled source image</span>
-<a name="l00095"></a>00095 <span class="comment">*      this SPIFFI specific routine takes into account the</span>
-<a name="l00096"></a>00096 <span class="comment">*      Spiffi slitlet order on the detector.</span>
-<a name="l00097"></a>00097 <span class="comment">*      Also shifts the resulting image rows by one pixel if</span>
-<a name="l00098"></a>00098 <span class="comment">*      necessary according to the distances array gained from</span>
-<a name="l00099"></a>00099 <span class="comment">*      the north-south test routine.</span>
-<a name="l00100"></a>00100 <span class="comment">*      Can do the same with the bad pixel map image to generate a</span>
-<a name="l00101"></a>00101 <span class="comment">*      bad pixel mask cube.</span>
-<a name="l00102"></a>00102 <span class="comment">*   4) makes a data cube out of a resampled source image</span>
-<a name="l00103"></a>00103 <span class="comment">*      this SPIFFI specific routine takes into account the</span>
-<a name="l00104"></a>00104 <span class="comment">*      Spiffi slitlet order on the detector.</span>
-<a name="l00105"></a>00105 <span class="comment">*      This routine takes fitted slitlet positions into account.</span>
-<a name="l00106"></a>00106 <span class="comment">*      Can do the same with the bad pixel map image to generate a</span>
-<a name="l00107"></a>00107 <span class="comment">*      bad pixel mask cube.</span>
-<a name="l00108"></a>00108 <span class="comment">*   5) makes a data cube out of a resampled source image</span>
-<a name="l00109"></a>00109 <span class="comment">*      this SPIFFI specific routine takes into account the</span>
-<a name="l00110"></a>00110 <span class="comment">*      Spiffi slitlet order on the detector.</span>
-<a name="l00111"></a>00111 <span class="comment">*      Also shifts the resulting image rows by one pixel if</span>
-<a name="l00112"></a>00112 <span class="comment">*      necessary according to the distances array gained from</span>
-<a name="l00113"></a>00113 <span class="comment">*      the north-south test routine.</span>
-<a name="l00114"></a>00114 <span class="comment">*      Can do the same with the bad pixel map image to generate a</span>
-<a name="l00115"></a>00115 <span class="comment">*      bad pixel mask cube.</span>
-<a name="l00116"></a>00116 <span class="comment">*   6) makes a data cube out of a resampled source image</span>
-<a name="l00117"></a>00117 <span class="comment">*      this 3D specific routine takes into account the</span>
-<a name="l00118"></a>00118 <span class="comment">*      3D slitlet order on the detector.</span>
-<a name="l00119"></a>00119 <span class="comment">*      Also shifts the resulting image rows by one pixel if</span>
-<a name="l00120"></a>00120 <span class="comment">*      necessary according to the distances array gained from</span>
-<a name="l00121"></a>00121 <span class="comment">*      the north-south test routine.</span>
-<a name="l00122"></a>00122 <span class="comment">*      Can do the same with the bad pixel map image to generate a</span>
-<a name="l00123"></a>00123 <span class="comment">*      bad pixel mask cube.</span>
-<a name="l00124"></a>00124 <span class="comment">*   7) makes a data cube out of a resampled source image</span>
-<a name="l00125"></a>00125 <span class="comment">*      this MPE 3D specific routine takes into account the</span>
-<a name="l00126"></a>00126 <span class="comment">*      3D slitlet order on the detector.</span>
-<a name="l00127"></a>00127 <span class="comment">*      Also shifts the resulting image row by an integer pixel shift if</span>
-<a name="l00128"></a>00128 <span class="comment">*      necessary according to the input kpixshift array </span>
-<a name="l00129"></a>00129 <span class="comment">*      Can do the same with the bad pixel map image to generate a</span>
-<a name="l00130"></a>00130 <span class="comment">*      bad pixel mask cube.</span>
-<a name="l00131"></a>00131 <span class="comment">*   8) converts resampled bad pixels to real bad pixels in data cubes.</span>
-<a name="l00132"></a>00132 <span class="comment">*   9) Bad pixel interpolation 3D like (saturated pixels exist):</span>
-<a name="l00133"></a>00133 <span class="comment">*      interpolates the bad pixels of the source cube by</span>
-<a name="l00134"></a>00134 <span class="comment">*      using the nearest neighbors. </span>
-<a name="l00135"></a>00135 <span class="comment">*      first it is checked if the bad pixel is interpolatable:</span>
-<a name="l00136"></a>00136 <span class="comment">*      it is only interpolatable if the number of good pixels </span>
-<a name="l00137"></a>00137 <span class="comment">*      in its spectrum of length 2*n_neighbors+1 exceeds 3 and</span>
-<a name="l00138"></a>00138 <span class="comment">*      if there is at least one good pixel on either side of the</span>
-<a name="l00139"></a>00139 <span class="comment">*      central pixel.</span>
-<a name="l00140"></a>00140 <span class="comment">*      Afterwards good neighboring pixels are searched within the </span>
-<a name="l00141"></a>00141 <span class="comment">*      image plane of the bad pixel by using an increasing pixel radius. </span>
-<a name="l00142"></a>00142 <span class="comment">*      Good pixels mean, the corresponding spectral pixels of the </span>
-<a name="l00143"></a>00143 <span class="comment">*      bad pixel and its spatial neighboring pixel must have</span>
-<a name="l00144"></a>00144 <span class="comment">*      at least 2 valid pixel pairs to be able to be used for</span>
-<a name="l00145"></a>00145 <span class="comment">*      the interpolation. The search is stopped if 9 valid neighboring</span>
-<a name="l00146"></a>00146 <span class="comment">*      pixels are found. </span>
-<a name="l00147"></a>00147 <span class="comment">*      Now normalize the found spectral values, collect the valid pixels </span>
-<a name="l00148"></a>00148 <span class="comment">*      (there must be at least 18) and take the sinfo_median of the valid </span>
-<a name="l00149"></a>00149 <span class="comment">*      pixels with which the bad pixel is replaced.</span>
-<a name="l00150"></a>00150 <span class="comment">*   10) fine tunes each row in the right position according </span>
-<a name="l00151"></a>00151 <span class="comment">*      to the distances of the slitlets to each other</span>
-<a name="l00152"></a>00152 <span class="comment">*      (output of the north-south test).</span>
-<a name="l00153"></a>00153 <span class="comment">*      This means that the rows must be realigned by a </span>
-<a name="l00154"></a>00154 <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span>
-<a name="l00155"></a>00155 <span class="comment">*      length. The fractional realignment is done by using</span>
-<a name="l00156"></a>00156 <span class="comment">*      the polynomial interpolation algorithm of N.R. </span>
-<a name="l00157"></a>00157 <span class="comment">*      Each row is rescaled so that the total flux is</span>
-<a name="l00158"></a>00158 <span class="comment">*      conserved.</span>
-<a name="l00159"></a>00159 <span class="comment">*  11) fine tunes each row in the right position according </span>
-<a name="l00160"></a>00160 <span class="comment">*      to the distances of the slitlets to each other</span>
-<a name="l00161"></a>00161 <span class="comment">*      (output of the north-south test).</span>
-<a name="l00162"></a>00162 <span class="comment">*      This means that the rows must be realigned by a </span>
-<a name="l00163"></a>00163 <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span>
-<a name="l00164"></a>00164 <span class="comment">*      length. The fractional realignment is done by using</span>
-<a name="l00165"></a>00165 <span class="comment">*      the FFT algorithm four1() of N.R. </span>
-<a name="l00166"></a>00166 <span class="comment">*  12) fine tunes each row in the right position according </span>
-<a name="l00167"></a>00167 <span class="comment">*      to the distances of the slitlets to each other</span>
-<a name="l00168"></a>00168 <span class="comment">*      (output of the north-south test).</span>
-<a name="l00169"></a>00169 <span class="comment">*      This means that the rows must be realigned by a </span>
-<a name="l00170"></a>00170 <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span>
-<a name="l00171"></a>00171 <span class="comment">*      length. The fractional realignment is done by using</span>
-<a name="l00172"></a>00172 <span class="comment">*      the spline interpolation algorithm splint in connection</span>
-<a name="l00173"></a>00173 <span class="comment">*      with the algorithm spline of N.R. </span>
-<a name="l00174"></a>00174 <span class="comment">*      This algorithms assume that each row is a tabulated</span>
-<a name="l00175"></a>00175 <span class="comment">*      function. The first derivatives of the interpolating</span>
-<a name="l00176"></a>00176 <span class="comment">*      function at the first and last point must be given.</span>
-<a name="l00177"></a>00177 <span class="comment">*      These are set higher than 1xe^30, so the routine</span>
-<a name="l00178"></a>00178 <span class="comment">*      sets the corresponding boundary condition for a natural</span>
-<a name="l00179"></a>00179 <span class="comment">*      spline, with zero second derivative on that boundary.</span>
-<a name="l00180"></a>00180 <span class="comment">*      Each row is rescaled so that the total flux is</span>
-<a name="l00181"></a>00181 <span class="comment">*      conserved.</span>
-<a name="l00182"></a>00182 <span class="comment">*</span>
-<a name="l00183"></a>00183 <span class="comment">*   FILES</span>
-<a name="l00184"></a>00184 <span class="comment">*</span>
-<a name="l00185"></a>00185 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00186"></a>00186 <span class="comment">*</span>
-<a name="l00187"></a>00187 <span class="comment">*   RETURN VALUES</span>
-<a name="l00188"></a>00188 <span class="comment">*</span>
-<a name="l00189"></a>00189 <span class="comment">*   CAUTIONS</span>
-<a name="l00190"></a>00190 <span class="comment">*</span>
-<a name="l00191"></a>00191 <span class="comment">*   EXAMPLES</span>
-<a name="l00192"></a>00192 <span class="comment">*</span>
-<a name="l00193"></a>00193 <span class="comment">*   SEE ALSO</span>
-<a name="l00194"></a>00194 <span class="comment">*</span>
-<a name="l00195"></a>00195 <span class="comment">*   BUGS</span>
-<a name="l00196"></a>00196 <span class="comment">*</span>
-<a name="l00197"></a>00197 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00198"></a>00198 <span class="comment">*/</span>
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00201"></a>00201 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00202"></a>00202 <span class="preprocessor">#endif</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="comment">/*</span>
-<a name="l00207"></a>00207 <span class="comment"> * System Headers</span>
-<a name="l00208"></a>00208 <span class="comment"> */</span>
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 <span class="comment">/*</span>
-<a name="l00211"></a>00211 <span class="comment"> * Local Headers</span>
-<a name="l00212"></a>00212 <span class="comment"> */</span>
-<a name="l00213"></a>00213 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00214"></a>00214 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00215"></a>00215 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00216"></a>00216 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00217"></a>00217 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00218"></a>00218 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00219"></a>00219 <span class="preprocessor">#include "sinfo_fft_base.h"</span>
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00222"></a>00222 sinfo_sort_slitlets(<span class="keyword">const</span> <span class="keywordtype">int</span> kslit);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00226"></a>00226 sinfo_sort_slitlets_array(<span class="keyword">const</span> <span class="keywordtype">int</span> slit, <span class="keywordtype">int</span>* row_index);
-<a name="l00227"></a>00227 
-<a name="l00235"></a>00235 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00236"></a>00236 <span class="comment"> *                            Function codes</span>
-<a name="l00237"></a>00237 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00248"></a>00248 cpl_image * 
-<a name="l00249"></a>00249 sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,
-<a name="l00250"></a>00250                                    <span class="keywordtype">int</span>        hw )
-<a name="l00251"></a>00251 {
-<a name="l00252"></a>00252     cpl_image * returnImage ;
-<a name="l00253"></a>00253     <span class="keywordtype">float</span>* row_buffer=NULL ;
-<a name="l00254"></a>00254     <span class="keywordtype">float</span> * filter ;
-<a name="l00255"></a>00255     <span class="keywordtype">int</span> col, row ;
-<a name="l00256"></a>00256     <span class="keywordtype">int</span> ilx=0;
-<a name="l00257"></a>00257     <span class="keywordtype">int</span> ily=0;
-<a name="l00258"></a>00258  
-<a name="l00259"></a>00259     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00260"></a>00260     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     <span class="keywordflow">if</span> ( lineImage == NULL )
-<a name="l00263"></a>00263     {
-<a name="l00264"></a>00264         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!\n"</span>) ;
-<a name="l00265"></a>00265         <span class="keywordflow">return</span> NULL ;
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267     ilx=cpl_image_get_size_x(lineImage);
-<a name="l00268"></a>00268     ily=cpl_image_get_size_y(lineImage);
-<a name="l00269"></a>00269     pidata=cpl_image_get_data_float(lineImage);
-<a name="l00270"></a>00270     <span class="keywordflow">if</span> ( hw < 1 )
-<a name="l00271"></a>00271     {
-<a name="l00272"></a>00272         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width given!\n"</span>) ;
-<a name="l00273"></a>00273         <span class="keywordflow">return</span> NULL ;
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="comment">/* allocate memory for returned image */</span>
-<a name="l00277"></a>00277     <span class="keywordflow">if</span> ( NULL == ( returnImage = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT ) ))
-<a name="l00278"></a>00278     {
-<a name="l00279"></a>00279         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate a new image\n"</span>);
-<a name="l00280"></a>00280         <span class="keywordflow">return</span> NULL ;
-<a name="l00281"></a>00281     }
-<a name="l00282"></a>00282     podata=cpl_image_get_data_float(returnImage);
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     <span class="comment">/* go through the image rows and save them in a buffer */</span>
-<a name="l00285"></a>00285     row_buffer=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00288"></a>00288     {
-<a name="l00289"></a>00289         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00290"></a>00290         {
-<a name="l00291"></a>00291             <span class="keywordflow">if</span> ( isnan(pidata[col+row*ilx]) )
-<a name="l00292"></a>00292             {
-<a name="l00293"></a>00293                 row_buffer[col] = 0. ;
-<a name="l00294"></a>00294             }
-<a name="l00295"></a>00295             <span class="keywordflow">else</span>
-<a name="l00296"></a>00296             {
-<a name="l00297"></a>00297                 row_buffer[col] = pidata[col + row*ilx] ;
-<a name="l00298"></a>00298             }
-<a name="l00299"></a>00299         }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l00302"></a>00302 <span class="comment">         * now low pass filter the rows by the gaussian and fill the return</span>
-<a name="l00303"></a>00303 <span class="comment">         * image.</span>
-<a name="l00304"></a>00304 <span class="comment">         */</span>
-<a name="l00305"></a>00305         filter = sinfo_function1d_filter_lowpass( row_buffer,
-<a name="l00306"></a>00306                                             ilx,
-<a name="l00307"></a>00307                                             LOW_PASS_GAUSSIAN,
-<a name="l00308"></a>00308                                             hw ) ;
-<a name="l00309"></a>00309         <span class="keywordflow">for</span> ( col = 0 ; col < ily ; col++ )
-<a name="l00310"></a>00310         {
-<a name="l00311"></a>00311             podata[col + row*ilx] = filter[col] ;
-<a name="l00312"></a>00312         }
-<a name="l00313"></a>00313         <span class="comment">/* deallocate memory */</span>
-<a name="l00314"></a>00314         sinfo_function1d_del (filter) ;
-<a name="l00315"></a>00315     }
-<a name="l00316"></a>00316     cpl_free(row_buffer);    
-<a name="l00317"></a>00317     <span class="keywordflow">return</span> returnImage ;
-<a name="l00318"></a>00318 }
-<a name="l00319"></a>00319 
-<a name="l00336"></a>00336 <span class="keywordtype">float</span> * 
-<a name="l00337"></a>00337 sinfo_north_south_test( cpl_image * ns_image,
-<a name="l00338"></a>00338                           <span class="keywordtype">int</span>        n_slitlets,
-<a name="l00339"></a>00339                           <span class="keywordtype">int</span>        halfWidth,
-<a name="l00340"></a>00340                           <span class="keywordtype">float</span>      fwhm,
-<a name="l00341"></a>00341                           <span class="keywordtype">float</span>      minDiff,
-<a name="l00342"></a>00342                           <span class="keywordtype">float</span>      estimated_dist,
-<a name="l00343"></a>00343                           <span class="keywordtype">float</span>      devtol,
-<a name="l00344"></a>00344               <span class="keywordtype">int</span>         bottom,
-<a name="l00345"></a>00345               <span class="keywordtype">int</span>         top )
-<a name="l00346"></a>00346 {
-<a name="l00347"></a>00347     <span class="keywordtype">int</span> i, j, k, m, row, col, n, ni, na ;
-<a name="l00348"></a>00348     <span class="keywordtype">int</span> position, counter, iters ;
-<a name="l00349"></a>00349     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;
-<a name="l00350"></a>00350     pixelvalue row_buf[cpl_image_get_size_x(ns_image)] ;
-<a name="l00351"></a>00351     <span class="keywordtype">float</span> sum, mean, maxval ;
-<a name="l00352"></a>00352     <span class="keywordtype">float</span> tol, lab ;
-<a name="l00353"></a>00353     <span class="keywordtype">float</span> * distances ;
-<a name="l00354"></a>00354     <span class="keywordtype">float</span> distances_buf[cpl_image_get_size_y(ns_image)][n_slitlets-1] ;
-<a name="l00355"></a>00355     <span class="keywordtype">float</span> x_position[n_slitlets] ;
-<a name="l00356"></a>00356     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l00357"></a>00357     <span class="keywordtype">int</span> * mpar ;
-<a name="l00358"></a>00358     <span class="keywordtype">int</span> found[3*n_slitlets], found_clean[3*n_slitlets] ;
-<a name="l00359"></a>00359     <span class="keywordtype">int</span> found_cleanit[3*n_slitlets] ;
-<a name="l00360"></a>00360     Vector * line ;
-<a name="l00361"></a>00361     FitParams ** par ;
-<a name="l00362"></a>00362     <span class="keywordtype">int</span> foundit, begin, end ;
-<a name="l00363"></a>00363     <span class="keywordtype">int</span> zeroindicator ;
-<a name="l00364"></a>00364     <span class="keywordtype">int</span> ilx=0;
-<a name="l00365"></a>00365     <span class="keywordtype">int</span> ily=0;
-<a name="l00366"></a>00366  
-<a name="l00367"></a>00367     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00368"></a>00368  
-<a name="l00369"></a>00369     <span class="keywordflow">if</span> ( ns_image == NULL )
-<a name="l00370"></a>00370     {
-<a name="l00371"></a>00371         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given\n"</span>) ;
-<a name="l00372"></a>00372         <span class="keywordflow">return</span> NULL ;
-<a name="l00373"></a>00373     }
-<a name="l00374"></a>00374     ilx=cpl_image_get_size_x(ns_image);
-<a name="l00375"></a>00375     ily=cpl_image_get_size_y(ns_image);
-<a name="l00376"></a>00376     pidata=cpl_image_get_data_float(ns_image);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="keywordflow">if</span> ( n_slitlets < 1 )
-<a name="l00380"></a>00380     {
-<a name="l00381"></a>00381         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of slitlets given\n"</span>) ;
-<a name="l00382"></a>00382         <span class="keywordflow">return</span> NULL ;
-<a name="l00383"></a>00383     }
-<a name="l00384"></a>00384     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth >= estimated_dist )
-<a name="l00385"></a>00385     {
-<a name="l00386"></a>00386         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong half width given\n"</span>) ;
-<a name="l00387"></a>00387         <span class="keywordflow">return</span> NULL ;
-<a name="l00388"></a>00388     }
-<a name="l00389"></a>00389     <span class="keywordflow">if</span> ( fwhm <= 0. )
-<a name="l00390"></a>00390     {
-<a name="l00391"></a>00391         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fwhm given\n"</span>) ;
-<a name="l00392"></a>00392         <span class="keywordflow">return</span> NULL ;
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394     <span class="keywordflow">if</span> ( minDiff < 1. )
-<a name="l00395"></a>00395     {
-<a name="l00396"></a>00396         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong minDiff given\n"</span>) ;
-<a name="l00397"></a>00397         <span class="keywordflow">return</span> NULL ;
-<a name="l00398"></a>00398     }
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400     <span class="comment">/* allocate memory for output array */</span>
-<a name="l00401"></a>00401     <span class="keywordflow">if</span> (NULL == (distances = (<span class="keywordtype">float</span> *) cpl_calloc ( n_slitlets - 1 , 
-<a name="l00402"></a>00402                                                     <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) 
-<a name="l00403"></a>00403     {
-<a name="l00404"></a>00404         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;
-<a name="l00405"></a>00405         <span class="keywordflow">return</span> NULL ;
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="comment">/* go through the image rows */</span>
-<a name="l00409"></a>00409     <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )
-<a name="l00410"></a>00410     {
-<a name="l00411"></a>00411         zeroindicator = 0 ;
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413         <span class="comment">/* initialize the distance buffer */</span>
-<a name="l00414"></a>00414         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets-1 ; i++ )
-<a name="l00415"></a>00415         {
-<a name="l00416"></a>00416             distances_buf[row][i] = ZERO ;
-<a name="l00417"></a>00417         }
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419         <span class="comment">/* fill the row buffer array with image data */</span>
-<a name="l00420"></a>00420         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00421"></a>00421         {
-<a name="l00422"></a>00422             row_buf[col] = pidata[col + row*ilx] ;
-<a name="l00423"></a>00423         }
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425         <span class="comment">/* determine the mean of the row data */</span>
-<a name="l00426"></a>00426         sum = 0. ;
-<a name="l00427"></a>00427         n = 0 ;
-<a name="l00428"></a>00428         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l00429"></a>00429         {
-<a name="l00430"></a>00430             <span class="keywordflow">if</span> ( isnan(row_buf[i]) )
-<a name="l00431"></a>00431             {
-<a name="l00432"></a>00432                 continue ;
-<a name="l00433"></a>00433             }
-<a name="l00434"></a>00434             sum += row_buf[i] ;
-<a name="l00435"></a>00435             n++ ;
-<a name="l00436"></a>00436         }
-<a name="l00437"></a>00437         mean = sum / (float)n ;
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440         <span class="comment">/* store the positions of image values greater than the mean */</span>
-<a name="l00441"></a>00441         n = 0 ;
-<a name="l00442"></a>00442         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l00443"></a>00443         {
-<a name="l00444"></a>00444             <span class="keywordflow">if</span> (isnan(row_buf[i]))
-<a name="l00445"></a>00445             {
-<a name="l00446"></a>00446                 continue ;
-<a name="l00447"></a>00447             }
-<a name="l00448"></a>00448             <span class="keywordflow">if</span> ( row_buf[i] >  sqrt(mean*mean*9) )
-<a name="l00449"></a>00449             {
-<a name="l00450"></a>00450                 found[n] = i ;
-<a name="l00451"></a>00451                 n++ ;
-<a name="l00452"></a>00452             } 
-<a name="l00453"></a>00453         }
-<a name="l00454"></a>00454        
-<a name="l00455"></a>00455         <span class="keywordflow">if</span> ( n < n_slitlets )
-<a name="l00456"></a>00456         {
-<a name="l00457"></a>00457             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t1 wrong number of intensity columns found "</span>
-<a name="l00458"></a>00458                               <span class="stringliteral">"in row: %d, found number: %d, mean: %g"</span>,
-<a name="l00459"></a>00459                               row, n, mean) ;
-<a name="l00460"></a>00460             continue ;
-<a name="l00461"></a>00461         }
-<a name="l00462"></a>00462         <span class="keywordflow">else</span>
-<a name="l00463"></a>00463         { 
-<a name="l00464"></a>00464             <span class="comment">/* find the maximum value position around the found columns */</span>
-<a name="l00465"></a>00465             na = 0 ;
-<a name="l00466"></a>00466             <span class="keywordflow">for</span> ( i = 1 ; i < n ; i ++ )
-<a name="l00467"></a>00467             {
-<a name="l00468"></a>00468                 <span class="keywordflow">if</span> ( found[i] - found[i-1] < halfWidth )
-<a name="l00469"></a>00469                 {
-<a name="l00470"></a>00470                     begin = found[i] - halfWidth ;
-<a name="l00471"></a>00471                     <span class="keywordflow">if</span> ( begin < 0 )
-<a name="l00472"></a>00472                     {
-<a name="l00473"></a>00473                         begin = 0 ;
-<a name="l00474"></a>00474                     }
-<a name="l00475"></a>00475                     end = found[i] + halfWidth ;
-<a name="l00476"></a>00476                     <span class="keywordflow">if</span> ( end >= ilx )
-<a name="l00477"></a>00477                     {
-<a name="l00478"></a>00478                         end = ilx - 1 ;
-<a name="l00479"></a>00479                     }
-<a name="l00480"></a>00480                     <span class="comment">/* find the maximum value inside the box </span>
-<a name="l00481"></a>00481 <span class="comment">                       around the found positions*/</span>
-<a name="l00482"></a>00482                     maxval = -FLT_MAX ;
-<a name="l00483"></a>00483                     foundit = 0 ;
-<a name="l00484"></a>00484                     <span class="keywordflow">for</span> ( j = begin ; j <= end ; j++ )
-<a name="l00485"></a>00485                     {
-<a name="l00486"></a>00486                         <span class="comment">/* do not consider boxes that contain bad pixels */</span>
-<a name="l00487"></a>00487                         <span class="keywordflow">if</span> (isnan(row_buf[j]))
-<a name="l00488"></a>00488                         {
-<a name="l00489"></a>00489                             continue ;
-<a name="l00490"></a>00490                         }
-<a name="l00491"></a>00491                         <span class="keywordflow">if</span> (row_buf[j] >= maxval )
-<a name="l00492"></a>00492                         {
-<a name="l00493"></a>00493                             maxval = row_buf[j] ;
-<a name="l00494"></a>00494                             foundit = j ;
-<a name="l00495"></a>00495                         }
-<a name="l00496"></a>00496                     }
-<a name="l00497"></a>00497                     <span class="keywordflow">if</span> (maxval == -FLT_MAX)
-<a name="l00498"></a>00498                     {
-<a name="l00499"></a>00499                         continue ;
-<a name="l00500"></a>00500                     }
-<a name="l00501"></a>00501                     <span class="keywordflow">for</span> ( k = 0 ; k < na ; k++ )
-<a name="l00502"></a>00502                     {
-<a name="l00503"></a>00503                         <span class="keywordflow">if</span> ( found_cleanit[k] >= begin && 
-<a name="l00504"></a>00504                              found_cleanit[k] < foundit )
-<a name="l00505"></a>00505                         {
-<a name="l00506"></a>00506                             na-- ;
-<a name="l00507"></a>00507                         }
-<a name="l00508"></a>00508                     }
-<a name="l00509"></a>00509                     <span class="keywordflow">for</span> ( k = 0 ; k < n ; k++ )
-<a name="l00510"></a>00510                     {
-<a name="l00511"></a>00511                         <span class="keywordflow">if</span> ( found[k] == foundit)
-<a name="l00512"></a>00512                         {
-<a name="l00513"></a>00513                  <span class="keywordflow">if</span> (na>0){
-<a name="l00514"></a>00514                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[k] )
-<a name="l00515"></a>00515                             {
-<a name="l00516"></a>00516                                 found_cleanit[na] = found[k] ;
-<a name="l00517"></a>00517                                 na++ ;
-<a name="l00518"></a>00518                             }
-<a name="l00519"></a>00519              }
-<a name="l00520"></a>00520              <span class="keywordflow">else</span>{
-<a name="l00521"></a>00521                 found_cleanit[na] = found[k] ;  
-<a name="l00522"></a>00522                             na++ ;
-<a name="l00523"></a>00523              } 
-<a name="l00524"></a>00524                       }
-<a name="l00525"></a>00525                     }
-<a name="l00526"></a>00526                 }
-<a name="l00527"></a>00527                 <span class="keywordflow">else</span>
-<a name="l00528"></a>00528                 {
-<a name="l00529"></a>00529                     <span class="keywordflow">if</span> ( i == 1 )
-<a name="l00530"></a>00530                     {
-<a name="l00531"></a>00531                         found_cleanit[na] = found[0] ;
-<a name="l00532"></a>00532                         na++ ;
-<a name="l00533"></a>00533                         found_cleanit[na] = found[1] ;
-<a name="l00534"></a>00534                         na++ ;
-<a name="l00535"></a>00535                     }
-<a name="l00536"></a>00536                     <span class="keywordflow">else</span>
-<a name="l00537"></a>00537                     {   
-<a name="l00538"></a>00538                 <span class="keywordflow">if</span> (na>0){
-<a name="l00539"></a>00539                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i-1])
-<a name="l00540"></a>00540                             {
-<a name="l00541"></a>00541                                 found_cleanit[na] = found[i-1] ;
-<a name="l00542"></a>00542                                 na++ ;
-<a name="l00543"></a>00543                             }
-<a name="l00544"></a>00544                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i])
-<a name="l00545"></a>00545                             {
-<a name="l00546"></a>00546                                 found_cleanit[na] = found[i] ;
-<a name="l00547"></a>00547                                 na++ ;
-<a name="l00548"></a>00548                             }
-<a name="l00549"></a>00549                         }
-<a name="l00550"></a>00550             <span class="keywordflow">else</span>
-<a name="l00551"></a>00551                         {
-<a name="l00552"></a>00552                             found_cleanit[na] = found[i] ;
-<a name="l00553"></a>00553                             na++ ;
-<a name="l00554"></a>00554                         }
-<a name="l00555"></a>00555             }  
-<a name="l00556"></a>00556                 }
-<a name="l00557"></a>00557             }
-<a name="l00558"></a>00558             <span class="comment">/* determine only one pixel position for each slitlet intensity */</span>
-<a name="l00559"></a>00559             j = 1 ;
-<a name="l00560"></a>00560             <span class="keywordflow">for</span> ( i = 1 ; i < na ; i++ )
-<a name="l00561"></a>00561             {
-<a name="l00562"></a>00562                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) < 
-<a name="l00563"></a>00563                             (estimated_dist - devtol) ||
-<a name="l00564"></a>00564                      (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) > 
-<a name="l00565"></a>00565                             (estimated_dist + devtol) )
-<a name="l00566"></a>00566                 {
-<a name="l00567"></a>00567                     continue ;
-<a name="l00568"></a>00568                 }
-<a name="l00569"></a>00569                 <span class="keywordflow">else</span>
-<a name="l00570"></a>00570                 {
-<a name="l00571"></a>00571                     found_clean[j-1] = found_cleanit[i-1] ;
-<a name="l00572"></a>00572                     found_clean[j]   = found_cleanit[i] ;
-<a name="l00573"></a>00573                     j++ ;
-<a name="l00574"></a>00574                 }
-<a name="l00575"></a>00575             }
-<a name="l00576"></a>00576         }
-<a name="l00577"></a>00577         <span class="keywordflow">if</span> ( j > n_slitlets )
-<a name="l00578"></a>00578         {
-<a name="l00579"></a>00579             <span class="comment">/* check the distance again */</span>
-<a name="l00580"></a>00580             ni = 1 ;
-<a name="l00581"></a>00581             <span class="keywordflow">for</span> ( i = 1 ; i < j ; i++ )
-<a name="l00582"></a>00582             {
-<a name="l00583"></a>00583                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) < 
-<a name="l00584"></a>00584                             (estimated_dist - devtol ) ||
-<a name="l00585"></a>00585                      (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) > 
-<a name="l00586"></a>00586                             (estimated_dist + devtol ) )
-<a name="l00587"></a>00587                 { 
-<a name="l00588"></a>00588                     continue ;
-<a name="l00589"></a>00589                 }
-<a name="l00590"></a>00590                 <span class="keywordflow">else</span>
-<a name="l00591"></a>00591                 {
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593                     found_clean[ni-1] = found_clean[i-1] ;
-<a name="l00594"></a>00594                     found_clean[ni]   = found_clean[i] ;
-<a name="l00595"></a>00595                     ni++ ;
-<a name="l00596"></a>00596                 }
-<a name="l00597"></a>00597             }
-<a name="l00598"></a>00598             <span class="keywordflow">if</span> ( ni != n_slitlets )
-<a name="l00599"></a>00599             {
-<a name="l00600"></a>00600                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t2 wrong number of intensity columns"</span>
-<a name="l00601"></a>00601                                   <span class="stringliteral">" found in row: %d,  found number: %d"</span>,
-<a name="l00602"></a>00602                                   row, ni) ;
-<a name="l00603"></a>00603                 continue ;
-<a name="l00604"></a>00604             }
-<a name="l00605"></a>00605             <span class="keywordflow">else</span> 
-<a name="l00606"></a>00606             {
-<a name="l00607"></a>00607                 j = ni ;
-<a name="l00608"></a>00608             }
-<a name="l00609"></a>00609         }
-<a name="l00610"></a>00610         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < n_slitlets )
-<a name="l00611"></a>00611         {
-<a name="l00612"></a>00612             cpl_msg_debug (<span class="stringliteral">"north_south_test3:"</span>,
-<a name="l00613"></a>00613                             <span class="stringliteral">"t3 wrong number of intensity columns "</span>
-<a name="l00614"></a>00614                             <span class="stringliteral">"found in row: %d , found number: %d, mean: %g\n"</span>, 
-<a name="l00615"></a>00615                             row, j, mean) ;
-<a name="l00616"></a>00616             continue ;
-<a name="l00617"></a>00617         }
-<a name="l00618"></a>00618         counter = 0 ;
-<a name="l00619"></a>00619         <span class="comment">/* go through the found intensity pixels in one row */</span>
-<a name="l00620"></a>00620         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00621"></a>00621         {
-<a name="l00622"></a>00622             <span class="comment">/* allocate memory for the array where the line is fitted in */</span>
-<a name="l00623"></a>00623             <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*halfWidth + 1)) )
-<a name="l00624"></a>00624             {
-<a name="l00625"></a>00625                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;
-<a name="l00626"></a>00626                 cpl_free(distances) ;
-<a name="l00627"></a>00627                 <span class="keywordflow">return</span> NULL ;
-<a name="l00628"></a>00628             }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630             <span class="comment">/* allocate memory */</span>
-<a name="l00631"></a>00631             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00632"></a>00632             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00633"></a>00633             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l00634"></a>00634             par = sinfo_new_fit_params(1) ;
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636             m = 0 ;
-<a name="l00637"></a>00637             <span class="keywordflow">for</span> ( k = found_clean[i]-halfWidth ; 
-<a name="l00638"></a>00638                   k <= found_clean[i]+halfWidth ; k++ )
-<a name="l00639"></a>00639             {
-<a name="l00640"></a>00640                 <span class="keywordflow">if</span> ( k < 0 )
-<a name="l00641"></a>00641                 {
-<a name="l00642"></a>00642                     k = 0. ;
-<a name="l00643"></a>00643                 }
-<a name="l00644"></a>00644                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( k >= ilx )
-<a name="l00645"></a>00645                 {
-<a name="l00646"></a>00646                     k = ilx - 1 ;
-<a name="l00647"></a>00647                 }
-<a name="l00648"></a>00648                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(row_buf[k]) )
-<a name="l00649"></a>00649                 {
-<a name="l00650"></a>00650                     zeroindicator = 1 ;
-<a name="l00651"></a>00651                     break ;
-<a name="l00652"></a>00652                 }
-<a name="l00653"></a>00653                 <span class="keywordflow">else</span>
-<a name="l00654"></a>00654                 {
-<a name="l00655"></a>00655                     line -> data[m] = row_buf[k] ;
-<a name="l00656"></a>00656                     m++ ;
-<a name="l00657"></a>00657                 }
-<a name="l00658"></a>00658             }
-<a name="l00659"></a>00659             <span class="keywordflow">if</span> ( zeroindicator == 1 )
-<a name="l00660"></a>00660             {
-<a name="l00661"></a>00661                 sinfo_new_destroy_vector(line) ;
-<a name="l00662"></a>00662                 cpl_free(xdat) ;
-<a name="l00663"></a>00663                 cpl_free(wdat) ;
-<a name="l00664"></a>00664                 cpl_free(mpar) ;
-<a name="l00665"></a>00665                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l00666"></a>00666                 break ;
-<a name="l00667"></a>00667             }
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669             <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l00670"></a>00670 <span class="comment">             * go through the spectral sinfo_vector</span>
-<a name="l00671"></a>00671 <span class="comment">             * determine the maximum pixel value in the spectral sinfo_vector</span>
-<a name="l00672"></a>00672 <span class="comment">             */</span>
-<a name="l00673"></a>00673             maxval = -FLT_MAX ;
-<a name="l00674"></a>00674             position = -INT32_MAX ;
-<a name="l00675"></a>00675             <span class="keywordflow">for</span> ( k = 0 ; k < m ; k++ )
-<a name="l00676"></a>00676             {
-<a name="l00677"></a>00677                 xdat[k] = k ;
-<a name="l00678"></a>00678                 wdat[k] = 1.0 ;
-<a name="l00679"></a>00679                 <span class="keywordflow">if</span> ( line -> data[k] >= maxval )
-<a name="l00680"></a>00680                 {
-<a name="l00681"></a>00681                     maxval = line -> data[k] ;
-<a name="l00682"></a>00682                     position = k ;
-<a name="l00683"></a>00683                 }
-<a name="l00684"></a>00684             }
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l00687"></a>00687             xdim     = XDIM ;
-<a name="l00688"></a>00688             ndat     = line -> n_elements ;
-<a name="l00689"></a>00689             numpar   = MAXPAR ;
-<a name="l00690"></a>00690             tol      = TOL ;
-<a name="l00691"></a>00691             lab      = LAB ;
-<a name="l00692"></a>00692             its      = ITS ;
-<a name="l00693"></a>00693             (*par) -> fit_par[1] = fwhm ;
-<a name="l00694"></a>00694             (*par) -> fit_par[2] = (float) position ;
-<a name="l00695"></a>00695             (*par) -> fit_par[3] = (float) (line -> data[0] + 
-<a name="l00696"></a>00696                                    line -> data[line->n_elements - 1]) / 2.0 ;
-<a name="l00697"></a>00697             (*par) -> fit_par[0]  = maxval - ((*par) -> fit_par[3]) ;
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700             <span class="comment">/* exclude negative peaks and low signal cases */</span>
-<a name="l00701"></a>00701             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] < minDiff )
-<a name="l00702"></a>00702             {
-<a name="l00703"></a>00703                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, signal of line too low to fit "</span>
-<a name="l00704"></a>00704                                    <span class="stringliteral">"in row: %d in slitlet %d\n"</span>, row, i) ;
-<a name="l00705"></a>00705                 sinfo_new_destroy_vector(line) ;
-<a name="l00706"></a>00706                 cpl_free(xdat) ;
-<a name="l00707"></a>00707                 cpl_free(wdat) ;
-<a name="l00708"></a>00708                 cpl_free(mpar) ;
-<a name="l00709"></a>00709                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l00710"></a>00710                 continue ;
-<a name="l00711"></a>00711             }
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713             <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )
-<a name="l00714"></a>00714             {
-<a name="l00715"></a>00715                 (*par) -> derv_par[k] = 0.0 ;
-<a name="l00716"></a>00716                 mpar[k] = 1 ;
-<a name="l00717"></a>00717             }
-<a name="l00718"></a>00718             <span class="comment">/* finally, do the least square fit using a Gaussian */</span>
-<a name="l00719"></a>00719             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l00720"></a>00720                                                    line -> data, wdat, &ndat, 
-<a name="l00721"></a>00721                                                    (*par) -> fit_par,
-<a name="l00722"></a>00722                                                    (*par) -> derv_par, mpar, 
-<a name="l00723"></a>00723                                                    &numpar, &tol, &its, &lab)) )
-<a name="l00724"></a>00724             {
-<a name="l00725"></a>00725           <span class="comment">/*</span>
-<a name="l00726"></a>00726 <span class="comment">                cpl_msg_debug ("north_south_test:",</span>
-<a name="l00727"></a>00727 <span class="comment">                               "sinfo_lsqfit_c: least squares fit failed,"</span>
-<a name="l00728"></a>00728 <span class="comment">                               " error no.: %d in row: %d in slitlet %d\n",</span>
-<a name="l00729"></a>00729 <span class="comment">                                iters, row, i) ;</span>
-<a name="l00730"></a>00730 <span class="comment">          */</span>
-<a name="l00731"></a>00731                 sinfo_new_destroy_vector(line) ;
-<a name="l00732"></a>00732                 cpl_free(xdat) ;
-<a name="l00733"></a>00733                 cpl_free(wdat) ;
-<a name="l00734"></a>00734                 cpl_free(mpar) ;
-<a name="l00735"></a>00735                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l00736"></a>00736                 continue ;
-<a name="l00737"></a>00737             }
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739             <span class="comment">/* check for negative fit results */</span>
-<a name="l00740"></a>00740             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] <= 0. || 
-<a name="l00741"></a>00741                  (*par) -> fit_par[1] <= 0. ||
-<a name="l00742"></a>00742                  (*par) -> fit_par[2] < 0. )
-<a name="l00743"></a>00743             {
-<a name="l00744"></a>00744                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span>
-<a name="l00745"></a>00745                                    <span class="stringliteral">"not used! in row %d in slitlet %d"</span>, 
-<a name="l00746"></a>00746                                    row, i) ;
-<a name="l00747"></a>00747                 sinfo_new_destroy_vector(line) ;
-<a name="l00748"></a>00748                 cpl_free(xdat) ;
-<a name="l00749"></a>00749                 cpl_free(wdat) ;
-<a name="l00750"></a>00750                 cpl_free(mpar) ;
-<a name="l00751"></a>00751                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l00752"></a>00752                 continue ;
-<a name="l00753"></a>00753             }
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755             <span class="comment">/* correct the fitted position for the given row of the line </span>
-<a name="l00756"></a>00756 <span class="comment">               in image coordinates */</span>
-<a name="l00757"></a>00757             (*par) -> fit_par[2] =  (float) (found_clean[i] - halfWidth) + 
-<a name="l00758"></a>00758                                             (*par) -> fit_par[2] ;
-<a name="l00759"></a>00759             x_position[counter] = (*par) -> fit_par[2] ;
-<a name="l00760"></a>00760             counter ++ ;
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762             <span class="comment">/* free memory */</span>
-<a name="l00763"></a>00763             sinfo_new_destroy_fit_params(&par) ;
-<a name="l00764"></a>00764             sinfo_new_destroy_vector ( line ) ;
-<a name="l00765"></a>00765             cpl_free ( xdat ) ;
-<a name="l00766"></a>00766             cpl_free ( wdat ) ;
-<a name="l00767"></a>00767             cpl_free ( mpar ) ;
-<a name="l00768"></a>00768         }
-<a name="l00769"></a>00769         <span class="keywordflow">if</span> (zeroindicator == 1)
-<a name="l00770"></a>00770         {
-<a name="l00771"></a>00771             <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"bad pixel in fitting box in row: %d\n"</span>, row) ;
-<a name="l00772"></a>00772             continue ;
-<a name="l00773"></a>00773         }
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775         <span class="keywordflow">if</span> ( counter != n_slitlets )
-<a name="l00776"></a>00776         {
-<a name="l00777"></a>00777             continue ;
-<a name="l00778"></a>00778             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong number of slitlets found in row: %d"</span>,row);
-<a name="l00779"></a>00779         }
-<a name="l00780"></a>00780         <span class="comment">/* store the distances between the sources in a buffer */</span>
-<a name="l00781"></a>00781         <span class="keywordflow">for</span> ( i = 1 ; i < n_slitlets ; i++ )
-<a name="l00782"></a>00782         {
-<a name="l00783"></a>00783             distances_buf[row][i-1] = x_position[i] - x_position[i-1] ;
-<a name="l00784"></a>00784         }
-<a name="l00785"></a>00785     }
-<a name="l00786"></a>00786 
-<a name="l00787"></a>00787     <span class="comment">/* ----------------------------------------------------------------</span>
-<a name="l00788"></a>00788 <span class="comment">     * go through the rows again and take the mean of the distances, </span>
-<a name="l00789"></a>00789 <span class="comment">     * throw away the runaways </span>
-<a name="l00790"></a>00790 <span class="comment">     */</span>
-<a name="l00791"></a>00791     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets-1 ; i++ )
-<a name="l00792"></a>00792     {
-<a name="l00793"></a>00793         n   = 0 ;
-<a name="l00794"></a>00794         sum = 0. ;
-<a name="l00795"></a>00795         <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )
-<a name="l00796"></a>00796         {
-<a name="l00797"></a>00797             <span class="keywordflow">if</span> ( fabs( distances_buf[row][i] - estimated_dist ) > devtol || 
-<a name="l00798"></a>00798                  isnan(distances_buf[row][i]) )
-<a name="l00799"></a>00799             {
-<a name="l00800"></a>00800             <span class="comment">/*</span>
-<a name="l00801"></a>00801 <span class="comment">          sinfo_msg("dist=%g devtol=%g isan=%d", </span>
-<a name="l00802"></a>00802 <span class="comment">            distances_buf[row][i],</span>
-<a name="l00803"></a>00803 <span class="comment">            devtol,</span>
-<a name="l00804"></a>00804 <span class="comment">            isnan(distances_buf[row][i]));</span>
-<a name="l00805"></a>00805 <span class="comment">            */</span>
-<a name="l00806"></a>00806                 continue ;
-<a name="l00807"></a>00807             }
-<a name="l00808"></a>00808             sum += distances_buf[row][i] ;
-<a name="l00809"></a>00809             n++ ;
-<a name="l00810"></a>00810         }
-<a name="l00811"></a>00811         <span class="keywordflow">if</span> ( n < 2 )
-<a name="l00812"></a>00812         {
-<a name="l00813"></a>00813             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"distances array could not be determined "</span>
-<a name="l00814"></a>00814                             <span class="stringliteral">"completely!, deviations of distances from number "</span>
-<a name="l00815"></a>00815                             <span class="stringliteral">"of slitlets too big\n"</span> ) ;
-<a name="l00816"></a>00816             cpl_free(distances) ;
-<a name="l00817"></a>00817             <span class="keywordflow">return</span> NULL ;
-<a name="l00818"></a>00818         }
-<a name="l00819"></a>00819         <span class="keywordflow">else</span>
-<a name="l00820"></a>00820         {
-<a name="l00821"></a>00821             distances[i] = sum / (float)n ;
-<a name="l00822"></a>00822         }
-<a name="l00823"></a>00823     }
-<a name="l00824"></a>00824     <span class="keywordflow">return</span> distances ; 
-<a name="l00825"></a>00825 }
-<a name="l00826"></a>00826 
-<a name="l00850"></a>00850 cpl_imagelist * 
-<a name="l00851"></a>00851 sinfo_new_make_cube ( cpl_image * calibImage,
-<a name="l00852"></a>00852                      <span class="keywordtype">float</span>    * distances,
-<a name="l00853"></a>00853                      <span class="keywordtype">float</span>    * correct_diff_dist )
-<a name="l00854"></a>00854 {
-<a name="l00855"></a>00855     cpl_imagelist * returnCube ;
-<a name="l00856"></a>00856     <span class="keywordtype">int</span> imsize, kslit, kpix ;
-<a name="l00857"></a>00857     <span class="keywordtype">int</span> slit_index ;
-<a name="l00858"></a>00858     <span class="keywordtype">int</span> z, col, recol ;
-<a name="l00859"></a>00859     <span class="keywordtype">int</span> ilx=0;
-<a name="l00860"></a>00860     <span class="keywordtype">int</span> ily=0;
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00863"></a>00863     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00864"></a>00864     cpl_image* o_img;
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866     <span class="keywordflow">if</span> ( NULL == calibImage )
-<a name="l00867"></a>00867     {
-<a name="l00868"></a>00868         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;
-<a name="l00869"></a>00869         <span class="keywordflow">return</span> NULL ;
-<a name="l00870"></a>00870     }
-<a name="l00871"></a>00871     ilx=cpl_image_get_size_x(calibImage);
-<a name="l00872"></a>00872     ily=cpl_image_get_size_y(calibImage);
-<a name="l00873"></a>00873     pidata=cpl_image_get_data_float(calibImage);
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875     <span class="keywordflow">if</span> ( NULL == distances )
-<a name="l00876"></a>00876     {
-<a name="l00877"></a>00877         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!/n"</span>) ;
-<a name="l00878"></a>00878         <span class="keywordflow">return</span> NULL ;
-<a name="l00879"></a>00879     }
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )
-<a name="l00882"></a>00882     {
-<a name="l00883"></a>00883         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"correct_diff_dist array is not allocated!/n"</span>) ;
-<a name="l00884"></a>00884         <span class="keywordflow">return</span> NULL ;
-<a name="l00885"></a>00885     }
-<a name="l00886"></a>00886        
-<a name="l00887"></a>00887     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )
-<a name="l00888"></a>00888     {
-<a name="l00889"></a>00889         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;
-<a name="l00890"></a>00890         <span class="keywordflow">return</span> NULL ;
-<a name="l00891"></a>00891     }
-<a name="l00892"></a>00892     imsize = ilx / N_SLITLETS ;
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894     <span class="comment">/* allocate memory */</span>  
-<a name="l00895"></a>00895     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )
-<a name="l00896"></a>00896     {
-<a name="l00897"></a>00897         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;
-<a name="l00898"></a>00898         <span class="keywordflow">return</span> NULL ;
-<a name="l00899"></a>00899     }
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l00902"></a>00902     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l00903"></a>00903     {
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);
-<a name="l00906"></a>00906       podata=cpl_image_get_data_float(o_img);
-<a name="l00907"></a>00907         kpix       = 0 ;
-<a name="l00908"></a>00908         kslit      = 0 ;
-<a name="l00909"></a>00909         slit_index = -1 ;
-<a name="l00910"></a>00910         recol      = -1 ;
-<a name="l00911"></a>00911         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) <span class="comment">/* go through the image columns */</span>
-<a name="l00912"></a>00912         {
-<a name="l00913"></a>00913             <span class="keywordflow">if</span> ( col % imsize == 0 )
-<a name="l00914"></a>00914             {
-<a name="l00915"></a>00915                 recol = 0 ;
-<a name="l00916"></a>00916                 kslit = col/imsize ;
-<a name="l00917"></a>00917                 <span class="comment">/* sort the slitlets in the right spiffi specific way */</span>
-<a name="l00918"></a>00918                 <span class="keywordflow">if</span>((slit_index=sinfo_sort_slitlets(kslit)) == -1) {
-<a name="l00919"></a>00919                   <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span>
-<a name="l00920"></a>00920                                <span class="stringliteral">"spiffi image,  there must be 32 slitlets!"</span>) ;
-<a name="l00921"></a>00921                         cpl_imagelist_delete(returnCube) ;
-<a name="l00922"></a>00922                         <span class="keywordflow">return</span> NULL ;
-<a name="l00923"></a>00923                 }
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925                 <span class="keywordflow">if</span> ( kslit != 0 )
-<a name="l00926"></a>00926                 {
-<a name="l00927"></a>00927                     <span class="comment">/*-------------------------------------------------------- </span>
-<a name="l00928"></a>00928 <span class="comment">                     * shift the first pixel by an integer if the absolute </span>
-<a name="l00929"></a>00929 <span class="comment">                     * amount of distances[]</span>
-<a name="l00930"></a>00930 <span class="comment">                     * is bigger than 0.5 </span>
-<a name="l00931"></a>00931 <span class="comment">                     */</span>
-<a name="l00932"></a>00932                     kpix = sinfo_new_nint(distances[kslit-1]) ;
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934                     <span class="comment">/*----------------------------------------------- </span>
-<a name="l00935"></a>00935 <span class="comment">                     * now sort the distances array according to the row order </span>
-<a name="l00936"></a>00936 <span class="comment">                     * and add a 0 value for the first (reference) slitlet </span>
-<a name="l00937"></a>00937 <span class="comment">                     * that means row 8 </span>
-<a name="l00938"></a>00938 <span class="comment">                     */</span>
-<a name="l00939"></a>00939                     correct_diff_dist[slit_index] = distances[kslit-1] - 
-<a name="l00940"></a>00940                                                     (float)kpix ;
-<a name="l00941"></a>00941                 }
-<a name="l00942"></a>00942                 <span class="comment">/* refer all distances to the first slitlet */</span>
-<a name="l00943"></a>00943                 <span class="keywordflow">else</span>
-<a name="l00944"></a>00944                 {
-<a name="l00945"></a>00945                     correct_diff_dist[slit_index] = 0. ;
-<a name="l00946"></a>00946                 }
-<a name="l00947"></a>00947             }
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949             <span class="comment">/* fill each cube plane with one image row */</span>
-<a name="l00950"></a>00950             podata[recol+slit_index*imsize] = pidata[col+kpix+z*ilx];
-<a name="l00951"></a>00951             recol++ ;
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953             <span class="keywordflow">if</span> ( recol > imsize )
-<a name="l00954"></a>00954             {
-<a name="l00955"></a>00955                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong column of reconstructed "</span>
-<a name="l00956"></a>00956                                 <span class="stringliteral">"image, shouldn't happen!\n"</span>) ; 
-<a name="l00957"></a>00957                 cpl_imagelist_delete(returnCube) ;
-<a name="l00958"></a>00958                 <span class="keywordflow">return</span> NULL ;
-<a name="l00959"></a>00959             }
-<a name="l00960"></a>00960         }
-<a name="l00961"></a>00961     }
-<a name="l00962"></a>00962     <span class="keywordflow">return</span> returnCube ;
-<a name="l00963"></a>00963 }
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966 
-<a name="l00974"></a>00974 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00975"></a>00975 sinfo_sort_slitlets(<span class="keyword">const</span> <span class="keywordtype">int</span> kslit)
-<a name="l00976"></a>00976 {
-<a name="l00977"></a>00977   <span class="keywordtype">int</span> slit_index=0;
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979   <span class="keywordflow">switch</span> (kslit)
-<a name="l00980"></a>00980     {
-<a name="l00981"></a>00981     <span class="keywordflow">case</span> 0:
-<a name="l00982"></a>00982       slit_index = 8 ;
-<a name="l00983"></a>00983       break ;
-<a name="l00984"></a>00984     <span class="keywordflow">case</span> 1:
-<a name="l00985"></a>00985       slit_index = 7 ;
-<a name="l00986"></a>00986       break ;
-<a name="l00987"></a>00987     <span class="keywordflow">case</span> 2:
-<a name="l00988"></a>00988       slit_index = 9 ;
-<a name="l00989"></a>00989       break ;
-<a name="l00990"></a>00990     <span class="keywordflow">case</span> 3:
-<a name="l00991"></a>00991       slit_index = 6 ;
-<a name="l00992"></a>00992       break ;
-<a name="l00993"></a>00993     <span class="keywordflow">case</span> 4:
-<a name="l00994"></a>00994       slit_index = 10 ;
-<a name="l00995"></a>00995       break ;
-<a name="l00996"></a>00996     <span class="keywordflow">case</span> 5:
-<a name="l00997"></a>00997       slit_index = 5 ;
-<a name="l00998"></a>00998       break ;
-<a name="l00999"></a>00999     <span class="keywordflow">case</span> 6:
-<a name="l01000"></a>01000       slit_index = 11 ;
-<a name="l01001"></a>01001       break ;
-<a name="l01002"></a>01002     <span class="keywordflow">case</span> 7:
-<a name="l01003"></a>01003       slit_index = 4 ;
-<a name="l01004"></a>01004       break ;
-<a name="l01005"></a>01005     <span class="keywordflow">case</span> 8:
-<a name="l01006"></a>01006       slit_index = 12 ;
-<a name="l01007"></a>01007       break ;
-<a name="l01008"></a>01008     <span class="keywordflow">case</span> 9:
-<a name="l01009"></a>01009       slit_index = 3 ;
-<a name="l01010"></a>01010       break ;
-<a name="l01011"></a>01011     <span class="keywordflow">case</span> 10:
-<a name="l01012"></a>01012       slit_index = 13 ;
-<a name="l01013"></a>01013       break ;
-<a name="l01014"></a>01014     <span class="keywordflow">case</span> 11:
-<a name="l01015"></a>01015       slit_index = 2 ;
-<a name="l01016"></a>01016       break ;
-<a name="l01017"></a>01017     <span class="keywordflow">case</span> 12:
-<a name="l01018"></a>01018       slit_index = 14 ;
-<a name="l01019"></a>01019       break ;
-<a name="l01020"></a>01020     <span class="keywordflow">case</span> 13:
-<a name="l01021"></a>01021       slit_index = 1 ;
-<a name="l01022"></a>01022       break ;
-<a name="l01023"></a>01023     <span class="keywordflow">case</span> 14:
-<a name="l01024"></a>01024       slit_index = 15 ;
-<a name="l01025"></a>01025       break ;
-<a name="l01026"></a>01026     <span class="keywordflow">case</span> 15:
-<a name="l01027"></a>01027       slit_index = 0 ;
-<a name="l01028"></a>01028       break ;
-<a name="l01029"></a>01029     <span class="keywordflow">case</span> 16:
-<a name="l01030"></a>01030       slit_index = 31 ;
-<a name="l01031"></a>01031       break ;
-<a name="l01032"></a>01032     <span class="keywordflow">case</span> 17:
-<a name="l01033"></a>01033       slit_index = 16 ;
-<a name="l01034"></a>01034       break ;
-<a name="l01035"></a>01035     <span class="keywordflow">case</span> 18:
-<a name="l01036"></a>01036       slit_index = 30 ;
-<a name="l01037"></a>01037       break ;
-<a name="l01038"></a>01038     <span class="keywordflow">case</span> 19:
-<a name="l01039"></a>01039       slit_index = 17 ;
-<a name="l01040"></a>01040       break ;
-<a name="l01041"></a>01041     <span class="keywordflow">case</span> 20:
-<a name="l01042"></a>01042       slit_index = 29 ;
-<a name="l01043"></a>01043       break ;
-<a name="l01044"></a>01044     <span class="keywordflow">case</span> 21:
-<a name="l01045"></a>01045       slit_index = 18 ;
-<a name="l01046"></a>01046       break ;
-<a name="l01047"></a>01047     <span class="keywordflow">case</span> 22:
-<a name="l01048"></a>01048       slit_index = 28 ;
-<a name="l01049"></a>01049       break ;
-<a name="l01050"></a>01050     <span class="keywordflow">case</span> 23:
-<a name="l01051"></a>01051       slit_index = 19 ;
-<a name="l01052"></a>01052       break ;
-<a name="l01053"></a>01053     <span class="keywordflow">case</span> 24:
-<a name="l01054"></a>01054       slit_index = 27 ;
-<a name="l01055"></a>01055       break ;
-<a name="l01056"></a>01056     <span class="keywordflow">case</span> 25:
-<a name="l01057"></a>01057       slit_index = 20 ;
-<a name="l01058"></a>01058       break ;
-<a name="l01059"></a>01059     <span class="keywordflow">case</span> 26:
-<a name="l01060"></a>01060       slit_index = 26 ;
-<a name="l01061"></a>01061       break ;
-<a name="l01062"></a>01062     <span class="keywordflow">case</span> 27:
-<a name="l01063"></a>01063       slit_index = 21 ;
-<a name="l01064"></a>01064       break ;
-<a name="l01065"></a>01065     <span class="keywordflow">case</span> 28:
-<a name="l01066"></a>01066       slit_index = 25 ;
-<a name="l01067"></a>01067       break ;
-<a name="l01068"></a>01068     <span class="keywordflow">case</span> 29:
-<a name="l01069"></a>01069       slit_index = 22 ;
-<a name="l01070"></a>01070       break ;
-<a name="l01071"></a>01071     <span class="keywordflow">case</span> 30:
-<a name="l01072"></a>01072       slit_index = 24 ;
-<a name="l01073"></a>01073       break ;
-<a name="l01074"></a>01074     <span class="keywordflow">case</span> 31:
-<a name="l01075"></a>01075       slit_index = 23 ;
-<a name="l01076"></a>01076       break ;
-<a name="l01077"></a>01077     <span class="keywordflow">default</span>:
-<a name="l01078"></a>01078       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span>
-<a name="l01079"></a>01079                       <span class="stringliteral">"spiffi image,  there must be 32 slitlets!"</span>) ;
-<a name="l01080"></a>01080       <span class="keywordflow">return</span> -1 ;
-<a name="l01081"></a>01081 
-<a name="l01082"></a>01082                 
-<a name="l01083"></a>01083    }
-<a name="l01084"></a>01084    <span class="keywordflow">return</span> slit_index;
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086 }
-<a name="l01087"></a>01087 
-<a name="l01098"></a>01098 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01099"></a>01099 sinfo_sort_slitlets_array(<span class="keyword">const</span> <span class="keywordtype">int</span> slit, <span class="keywordtype">int</span>* row_index)
-<a name="l01100"></a>01100 {
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102   <span class="keywordflow">switch</span> (slit)
-<a name="l01103"></a>01103     {
-<a name="l01104"></a>01104     <span class="keywordflow">case</span> 0:
-<a name="l01105"></a>01105       row_index[0] = 8 ;
-<a name="l01106"></a>01106       break ;
-<a name="l01107"></a>01107     <span class="keywordflow">case</span> 1:
-<a name="l01108"></a>01108       row_index[1] = 7 ;
-<a name="l01109"></a>01109       break ;
-<a name="l01110"></a>01110     <span class="keywordflow">case</span> 2:
-<a name="l01111"></a>01111       row_index[2] = 9 ;
-<a name="l01112"></a>01112       break ;
-<a name="l01113"></a>01113     <span class="keywordflow">case</span> 3:
-<a name="l01114"></a>01114       row_index[3] = 6 ;
-<a name="l01115"></a>01115       break ;
-<a name="l01116"></a>01116     <span class="keywordflow">case</span> 4:
-<a name="l01117"></a>01117       row_index[4] = 10 ;
-<a name="l01118"></a>01118       break ;
-<a name="l01119"></a>01119     <span class="keywordflow">case</span> 5:
-<a name="l01120"></a>01120       row_index[5] = 5 ;
-<a name="l01121"></a>01121       break ;
-<a name="l01122"></a>01122     <span class="keywordflow">case</span> 6:
-<a name="l01123"></a>01123       row_index[6] = 11 ;
-<a name="l01124"></a>01124       break ;
-<a name="l01125"></a>01125     <span class="keywordflow">case</span> 7:
-<a name="l01126"></a>01126       row_index[7] = 4 ;
-<a name="l01127"></a>01127       break ;
-<a name="l01128"></a>01128     <span class="keywordflow">case</span> 8:
-<a name="l01129"></a>01129       row_index[8] = 12 ;
-<a name="l01130"></a>01130       break ;
-<a name="l01131"></a>01131     <span class="keywordflow">case</span> 9:
-<a name="l01132"></a>01132       row_index[9] = 3 ;
-<a name="l01133"></a>01133       break ;
-<a name="l01134"></a>01134     <span class="keywordflow">case</span> 10:
-<a name="l01135"></a>01135       row_index[10] = 13 ;
-<a name="l01136"></a>01136       break ;
-<a name="l01137"></a>01137     <span class="keywordflow">case</span> 11:
-<a name="l01138"></a>01138       row_index[11] = 2 ;
-<a name="l01139"></a>01139       break ;
-<a name="l01140"></a>01140     <span class="keywordflow">case</span> 12:
-<a name="l01141"></a>01141       row_index[12] = 14 ;
-<a name="l01142"></a>01142       break ;
-<a name="l01143"></a>01143     <span class="keywordflow">case</span> 13:
-<a name="l01144"></a>01144       row_index[13] = 1 ;
-<a name="l01145"></a>01145       break ;
-<a name="l01146"></a>01146     <span class="keywordflow">case</span> 14:
-<a name="l01147"></a>01147       row_index[14] = 15 ;
-<a name="l01148"></a>01148       break ;
-<a name="l01149"></a>01149     <span class="keywordflow">case</span> 15:
-<a name="l01150"></a>01150       row_index[15] = 0 ;
-<a name="l01151"></a>01151       break ;
-<a name="l01152"></a>01152     <span class="keywordflow">case</span> 16:
-<a name="l01153"></a>01153       row_index[16] = 31 ;
-<a name="l01154"></a>01154       break ;
-<a name="l01155"></a>01155     <span class="keywordflow">case</span> 17:
-<a name="l01156"></a>01156       row_index[17] = 16 ;
-<a name="l01157"></a>01157       break ;
-<a name="l01158"></a>01158     <span class="keywordflow">case</span> 18:
-<a name="l01159"></a>01159       row_index[18] = 30 ;
-<a name="l01160"></a>01160       break ;
-<a name="l01161"></a>01161     <span class="keywordflow">case</span> 19:
-<a name="l01162"></a>01162       row_index[19] = 17 ;
-<a name="l01163"></a>01163       break ;
-<a name="l01164"></a>01164     <span class="keywordflow">case</span> 20:
-<a name="l01165"></a>01165       row_index[20] = 29 ;
-<a name="l01166"></a>01166       break ;
-<a name="l01167"></a>01167     <span class="keywordflow">case</span> 21:
-<a name="l01168"></a>01168       row_index[21] = 18 ;
-<a name="l01169"></a>01169       break ;
-<a name="l01170"></a>01170     <span class="keywordflow">case</span> 22:
-<a name="l01171"></a>01171       row_index[22] = 28 ;
-<a name="l01172"></a>01172       break ;
-<a name="l01173"></a>01173     <span class="keywordflow">case</span> 23:
-<a name="l01174"></a>01174       row_index[23] = 19 ;
-<a name="l01175"></a>01175       break ;
-<a name="l01176"></a>01176     <span class="keywordflow">case</span> 24:
-<a name="l01177"></a>01177       row_index[24] = 27 ;
-<a name="l01178"></a>01178       break ;
-<a name="l01179"></a>01179     <span class="keywordflow">case</span> 25:
-<a name="l01180"></a>01180       row_index[25] = 20 ;
-<a name="l01181"></a>01181       break ;
-<a name="l01182"></a>01182     <span class="keywordflow">case</span> 26:
-<a name="l01183"></a>01183       row_index[26] = 26 ;
-<a name="l01184"></a>01184       break ;
-<a name="l01185"></a>01185     <span class="keywordflow">case</span> 27:
-<a name="l01186"></a>01186       row_index[27] = 21 ;
-<a name="l01187"></a>01187       break ;
-<a name="l01188"></a>01188     <span class="keywordflow">case</span> 28:
-<a name="l01189"></a>01189       row_index[28] = 25 ;
-<a name="l01190"></a>01190       break ;
-<a name="l01191"></a>01191     <span class="keywordflow">case</span> 29:
-<a name="l01192"></a>01192       row_index[29] = 22 ;
-<a name="l01193"></a>01193       break ;
-<a name="l01194"></a>01194     <span class="keywordflow">case</span> 30:
-<a name="l01195"></a>01195       row_index[30] = 24 ;
-<a name="l01196"></a>01196       break ;
-<a name="l01197"></a>01197     <span class="keywordflow">case</span> 31:
-<a name="l01198"></a>01198       row_index[31] = 23 ;
-<a name="l01199"></a>01199       break ;
-<a name="l01200"></a>01200     <span class="keywordflow">default</span>:
-<a name="l01201"></a>01201       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a spiffi "</span>
-<a name="l01202"></a>01202                       <span class="stringliteral">"image,  there must be 32 slitlets!\n"</span>) ;
-<a name="l01203"></a>01203       <span class="keywordflow">return</span> -1 ;
-<a name="l01204"></a>01204     }
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206   <span class="keywordflow">return</span> 0;
-<a name="l01207"></a>01207 
-<a name="l01208"></a>01208 }
-<a name="l01209"></a>01209 
-<a name="l01210"></a>01210 
-<a name="l01211"></a>01211 
-<a name="l01228"></a>01228 cpl_imagelist * 
-<a name="l01229"></a>01229 sinfo_new_make_cube_spi ( cpl_image *  calibImage,
-<a name="l01230"></a>01230                         <span class="keywordtype">float</span>    ** slit_edges,
-<a name="l01231"></a>01231                         <span class="keywordtype">float</span>    *  shift )
-<a name="l01232"></a>01232 {
-<a name="l01233"></a>01233     cpl_imagelist * returnCube ;
-<a name="l01234"></a>01234     <span class="keywordtype">float</span> diff, start ;
-<a name="l01235"></a>01235     <span class="keywordtype">float</span> * center ;
-<a name="l01236"></a>01236     <span class="keywordtype">int</span> * row_index ;
-<a name="l01237"></a>01237     <span class="keywordtype">int</span> slit ;
-<a name="l01238"></a>01238     <span class="keywordtype">int</span> col, z ;
-<a name="l01239"></a>01239     <span class="keywordtype">int</span> imsize ;
-<a name="l01240"></a>01240     <span class="keywordtype">int</span> * beginCol ;
-<a name="l01241"></a>01241     <span class="keywordtype">int</span> col_counter ;
-<a name="l01242"></a>01242     <span class="keywordtype">int</span> ilx=0;
-<a name="l01243"></a>01243     <span class="keywordtype">int</span> ily=0;
-<a name="l01244"></a>01244 
-<a name="l01245"></a>01245     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01246"></a>01246     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01247"></a>01247     cpl_image* o_img;
-<a name="l01248"></a>01248 
-<a name="l01249"></a>01249 
-<a name="l01250"></a>01250     <span class="keywordflow">if</span> ( NULL == calibImage )
-<a name="l01251"></a>01251     {
-<a name="l01252"></a>01252         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;
-<a name="l01253"></a>01253         <span class="keywordflow">return</span> NULL ;
-<a name="l01254"></a>01254     }
-<a name="l01255"></a>01255     ilx=cpl_image_get_size_x(calibImage);
-<a name="l01256"></a>01256     ily=cpl_image_get_size_y(calibImage);
-<a name="l01257"></a>01257     pidata=cpl_image_get_data_float(calibImage);
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259     <span class="keywordflow">if</span> ( NULL == slit_edges )
-<a name="l01260"></a>01260     {
-<a name="l01261"></a>01261         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no slit_edges array given from sinfo_fitSlits()!/n"</span>) ;
-<a name="l01262"></a>01262         <span class="keywordflow">return</span> NULL ;
-<a name="l01263"></a>01263     }
-<a name="l01264"></a>01264 
-<a name="l01265"></a>01265     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )
-<a name="l01266"></a>01266     {
-<a name="l01267"></a>01267         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;
-<a name="l01268"></a>01268         <span class="keywordflow">return</span> NULL ;
-<a name="l01269"></a>01269     }
-<a name="l01270"></a>01270     imsize = ilx / N_SLITLETS ;
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272     <span class="comment">/* allocate memory */</span>  
-<a name="l01273"></a>01273     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01274"></a>01274     {
-<a name="l01275"></a>01275         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01276"></a>01276         <span class="keywordflow">return</span> NULL ;
-<a name="l01277"></a>01277     }
-<a name="l01278"></a>01278     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01279"></a>01279     {
-<a name="l01280"></a>01280         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01281"></a>01281         cpl_free(row_index) ;
-<a name="l01282"></a>01282         <span class="keywordflow">return</span> NULL ;
-<a name="l01283"></a>01283     }
-<a name="l01284"></a>01284     <span class="keywordflow">if</span> ( NULL == (center = (<span class="keywordtype">float</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )
-<a name="l01285"></a>01285     {
-<a name="l01286"></a>01286         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01287"></a>01287         cpl_free (row_index) ;
-<a name="l01288"></a>01288         cpl_free (beginCol) ;
-<a name="l01289"></a>01289         <span class="keywordflow">return</span> NULL ;
-<a name="l01290"></a>01290     }
-<a name="l01291"></a>01291     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )
-<a name="l01292"></a>01292     {
-<a name="l01293"></a>01293         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;
-<a name="l01294"></a>01294         cpl_free (row_index) ;
-<a name="l01295"></a>01295         cpl_free (beginCol) ;
-<a name="l01296"></a>01296         cpl_free (center) ;
-<a name="l01297"></a>01297         <span class="keywordflow">return</span> NULL ;
-<a name="l01298"></a>01298     }
-<a name="l01299"></a>01299     <span class="comment">/* determine the absolute center of the slitlets and the distances </span>
-<a name="l01300"></a>01300 <span class="comment">       inside the image*/</span>
-<a name="l01301"></a>01301     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) 
-<a name="l01302"></a>01302     <span class="comment">/* go through the slitlets of each row of the resampled image */</span>
-<a name="l01303"></a>01303     {
-<a name="l01304"></a>01304         center[slit] = (slit_edges[slit][1] + slit_edges[slit][0]) / 2. ;
-<a name="l01305"></a>01305         <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l01306"></a>01306 <span class="comment">         * sort the slitlets in the right spiffi specific way</span>
-<a name="l01307"></a>01307 <span class="comment">         * the row_index describes the row index of the current slitlet </span>
-<a name="l01308"></a>01308 <span class="comment">         * in the resulting cube images.</span>
-<a name="l01309"></a>01309 <span class="comment">         */</span>
-<a name="l01310"></a>01310         <span class="keywordflow">if</span>(-1 == sinfo_sort_slitlets_array(slit,row_index)) {
-<a name="l01311"></a>01311       cpl_imagelist_delete(returnCube) ;
-<a name="l01312"></a>01312       cpl_free (row_index) ;
-<a name="l01313"></a>01313           cpl_free (beginCol) ;
-<a name="l01314"></a>01314           cpl_free (center) ;
-<a name="l01315"></a>01315           <span class="keywordflow">return</span> NULL ;
-<a name="l01316"></a>01316         }
-<a name="l01317"></a>01317         <span class="comment">/* determine the integer column on which the slitlet starts, center the</span>
-<a name="l01318"></a>01318 <span class="comment">           slitlet on the image row */</span>
-<a name="l01319"></a>01319         start = center[slit] - (float) (imsize - 1)/2. ;
-<a name="l01320"></a>01320         beginCol[slit] = sinfo_new_nint (start) ;
-<a name="l01321"></a>01321         <span class="comment">/* determine the error of using integer pixels */</span>
-<a name="l01322"></a>01322         diff = start - (float)beginCol[slit] ;
-<a name="l01323"></a>01323 
-<a name="l01324"></a>01324         <span class="comment">/*-------------------------------------------------------------------- </span>
-<a name="l01325"></a>01325 <span class="comment">         * determine the output shift values by which the rows are finally </span>
-<a name="l01326"></a>01326 <span class="comment">           shifted, consider the integer pixel errors  </span>
-<a name="l01327"></a>01327 <span class="comment">         * resort shift array to get the row index </span>
-<a name="l01328"></a>01328 <span class="comment">         */</span>
-<a name="l01329"></a>01329         shift[row_index[slit]] = diff ;
-<a name="l01330"></a>01330     }   
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l01333"></a>01333     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l01334"></a>01334     {
-<a name="l01335"></a>01335       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);
-<a name="l01336"></a>01336       podata=cpl_image_get_data_float(o_img);
-<a name="l01337"></a>01337       <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )
-<a name="l01338"></a>01338         {
-<a name="l01339"></a>01339       col_counter = beginCol[slit] ;
-<a name="l01340"></a>01340       <span class="comment">/* each slitlet is centered on the final image row */</span>
-<a name="l01341"></a>01341       <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )
-<a name="l01342"></a>01342             {
-<a name="l01343"></a>01343           <span class="keywordflow">if</span> ( col_counter > ilx-1 )
-<a name="l01344"></a>01344                 {
-<a name="l01345"></a>01345           col_counter-- ;
-<a name="l01346"></a>01346                 }
-<a name="l01347"></a>01347           <span class="keywordflow">if</span> ( col_counter + z*ilx < 0 )
-<a name="l01348"></a>01348                 {
-<a name="l01349"></a>01349           podata[col+row_index[slit]*imsize] = pidata[0] ;
-<a name="l01350"></a>01350                 }
-<a name="l01351"></a>01351               <span class="keywordflow">else</span>
-<a name="l01352"></a>01352                 {   
-<a name="l01353"></a>01353                   podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];
-<a name="l01354"></a>01354                 }
-<a name="l01355"></a>01355 
-<a name="l01356"></a>01356                 col_counter++ ;
-<a name="l01357"></a>01357             }
-<a name="l01358"></a>01358         }
-<a name="l01359"></a>01359       cpl_imagelist_set(returnCube,o_img,z);    
-<a name="l01360"></a>01360     }
-<a name="l01361"></a>01361     cpl_free (row_index) ;
-<a name="l01362"></a>01362     cpl_free (beginCol) ;
-<a name="l01363"></a>01363     cpl_free (center) ;
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365     <span class="keywordflow">return</span> returnCube ;
-<a name="l01366"></a>01366 }
-<a name="l01393"></a>01393 cpl_imagelist * 
-<a name="l01394"></a>01394 sinfo_new_make_cube_dist ( cpl_image * calibImage,
-<a name="l01395"></a>01395                          <span class="keywordtype">float</span>      firstCol,
-<a name="l01396"></a>01396                          <span class="keywordtype">float</span>    * distances,
-<a name="l01397"></a>01397                          <span class="keywordtype">float</span>    * shift )
-<a name="l01398"></a>01398 {
-<a name="l01399"></a>01399     cpl_imagelist * returnCube ;
-<a name="l01400"></a>01400     <span class="keywordtype">float</span> di ;
-<a name="l01401"></a>01401     <span class="keywordtype">float</span> diff, start ;
-<a name="l01402"></a>01402     <span class="keywordtype">int</span> * row_index ;
-<a name="l01403"></a>01403     <span class="keywordtype">int</span> slit ;
-<a name="l01404"></a>01404     <span class="keywordtype">int</span> col, z ;
-<a name="l01405"></a>01405     <span class="keywordtype">int</span> imsize ;
-<a name="l01406"></a>01406     <span class="keywordtype">int</span> * beginCol ;
-<a name="l01407"></a>01407     <span class="keywordtype">int</span> col_counter ;
-<a name="l01408"></a>01408     <span class="keywordtype">int</span> ilx=0;
-<a name="l01409"></a>01409     <span class="keywordtype">int</span> ily=0;
-<a name="l01410"></a>01410 
-<a name="l01411"></a>01411     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01412"></a>01412     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01413"></a>01413     cpl_image* o_img;
-<a name="l01414"></a>01414 
-<a name="l01415"></a>01415     <span class="keywordflow">if</span> ( NULL == calibImage )
-<a name="l01416"></a>01416     {
-<a name="l01417"></a>01417         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no resampled image given!\n"</span>) ;
-<a name="l01418"></a>01418         <span class="keywordflow">return</span> NULL ;
-<a name="l01419"></a>01419     }
-<a name="l01420"></a>01420     ilx=cpl_image_get_size_x(calibImage);
-<a name="l01421"></a>01421     ily=cpl_image_get_size_y(calibImage);
-<a name="l01422"></a>01422     pidata=cpl_image_get_data_float(calibImage);
-<a name="l01423"></a>01423 
-<a name="l01424"></a>01424     <span class="keywordflow">if</span> ( NULL == distances )
-<a name="l01425"></a>01425     {
-<a name="l01426"></a>01426         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array given from north_south_test()!"</span>) ;
-<a name="l01427"></a>01427         <span class="keywordflow">return</span> NULL ;
-<a name="l01428"></a>01428     }
-<a name="l01429"></a>01429 
-<a name="l01430"></a>01430     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )
-<a name="l01431"></a>01431     {
-<a name="l01432"></a>01432         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;
-<a name="l01433"></a>01433         <span class="keywordflow">return</span> NULL ;
-<a name="l01434"></a>01434     }
-<a name="l01435"></a>01435     imsize = ilx / N_SLITLETS ;
-<a name="l01436"></a>01436 
-<a name="l01437"></a>01437     <span class="comment">/* allocate memory */</span>  
-<a name="l01438"></a>01438     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01439"></a>01439     {
-<a name="l01440"></a>01440         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01441"></a>01441         <span class="keywordflow">return</span> NULL ;
-<a name="l01442"></a>01442     }
-<a name="l01443"></a>01443     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01444"></a>01444     {
-<a name="l01445"></a>01445         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01446"></a>01446         cpl_free(row_index) ;
-<a name="l01447"></a>01447         <span class="keywordflow">return</span> NULL ;
-<a name="l01448"></a>01448     }
-<a name="l01449"></a>01449     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )
-<a name="l01450"></a>01450     {
-<a name="l01451"></a>01451         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;
-<a name="l01452"></a>01452         cpl_free(row_index) ;
-<a name="l01453"></a>01453         cpl_free(beginCol) ;
-<a name="l01454"></a>01454         <span class="keywordflow">return</span> NULL ;
-<a name="l01455"></a>01455     }
-<a name="l01456"></a>01456 
-<a name="l01457"></a>01457     di = 0. ;
-<a name="l01458"></a>01458     <span class="comment">/* determine the absolute beginning of the slitlets and the distances </span>
-<a name="l01459"></a>01459 <span class="comment">       inside the image*/</span>
-<a name="l01460"></a>01460     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) 
-<a name="l01461"></a>01461     <span class="comment">/* go through the slitlets of each row of the resampled image */</span>
-<a name="l01462"></a>01462     {
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464         <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l01465"></a>01465 <span class="comment">         * sort the slitlets in the right spiffi specific way</span>
-<a name="l01466"></a>01466 <span class="comment">         * the row_index describes the row index of the current slitlet </span>
-<a name="l01467"></a>01467 <span class="comment">         * in the resulting cube images.</span>
-<a name="l01468"></a>01468 <span class="comment">         */</span>
-<a name="l01469"></a>01469         <span class="keywordflow">if</span>(-1 == sinfo_sort_slitlets_array(slit,row_index)) {
-<a name="l01470"></a>01470       cpl_imagelist_delete(returnCube) ;
-<a name="l01471"></a>01471       cpl_free(row_index) ;
-<a name="l01472"></a>01472       cpl_free(beginCol) ;
-<a name="l01473"></a>01473       <span class="keywordflow">return</span> NULL ;
-<a name="l01474"></a>01474         }
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476         <span class="comment">/* determine the integer column on which the slitlet starts */</span>
-<a name="l01477"></a>01477         <span class="keywordflow">if</span> ( slit == 0 )
-<a name="l01478"></a>01478         {
-<a name="l01479"></a>01479             start = firstCol ;
-<a name="l01480"></a>01480         }
-<a name="l01481"></a>01481         <span class="keywordflow">else</span>
-<a name="l01482"></a>01482         {
-<a name="l01483"></a>01483             di += distances[slit-1] ;
-<a name="l01484"></a>01484             start = firstCol + di ;
-<a name="l01485"></a>01485         }
-<a name="l01486"></a>01486         beginCol[slit] = sinfo_new_nint(start) ;
-<a name="l01487"></a>01487 
-<a name="l01488"></a>01488         <span class="comment">/* determine the error of using integer pixels, its always smaller </span>
-<a name="l01489"></a>01489 <span class="comment">           than 1 */</span>
-<a name="l01490"></a>01490         diff = start - (float)beginCol[slit] ;
-<a name="l01491"></a>01491 
-<a name="l01492"></a>01492         <span class="comment">/*---------------------------------------------------------------- </span>
-<a name="l01493"></a>01493 <span class="comment">         * determine the output shift values by which the rows are finally </span>
-<a name="l01494"></a>01494 <span class="comment">         * shifted, consider the integer pixel errors and resort shift array </span>
-<a name="l01495"></a>01495 <span class="comment">         * to get the row index </span>
-<a name="l01496"></a>01496 <span class="comment">         */</span>
-<a name="l01497"></a>01497         shift[row_index[slit]] = diff ;
-<a name="l01498"></a>01498     }   
-<a name="l01499"></a>01499 
-<a name="l01500"></a>01500     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l01501"></a>01501     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l01502"></a>01502     {
-<a name="l01503"></a>01503       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);
-<a name="l01504"></a>01504       podata=cpl_image_get_data_float(o_img);
-<a name="l01505"></a>01505       <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )
-<a name="l01506"></a>01506         {
-<a name="l01507"></a>01507       col_counter = beginCol[slit] ;
-<a name="l01508"></a>01508       <span class="comment">/* each slitlet is centered on the final image row */</span>
-<a name="l01509"></a>01509       <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )
-<a name="l01510"></a>01510             {
-<a name="l01511"></a>01511           <span class="keywordflow">if</span> ( col_counter > ilx-1 )
-<a name="l01512"></a>01512                 {
-<a name="l01513"></a>01513           col_counter-- ;
-<a name="l01514"></a>01514                 }
-<a name="l01515"></a>01515                 <span class="keywordflow">if</span> ( col_counter + z*ilx < 0 )
-<a name="l01516"></a>01516                 {
-<a name="l01517"></a>01517           podata[col+row_index[slit]*imsize] = podata[0] ;
-<a name="l01518"></a>01518                 }
-<a name="l01519"></a>01519                 <span class="keywordflow">else</span>
-<a name="l01520"></a>01520                 {   
-<a name="l01521"></a>01521                   podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];
-<a name="l01522"></a>01522                 }
-<a name="l01523"></a>01523 
-<a name="l01524"></a>01524                 col_counter++ ;
-<a name="l01525"></a>01525             }
-<a name="l01526"></a>01526         }  
-<a name="l01527"></a>01527       cpl_imagelist_set(returnCube,o_img,z);  
-<a name="l01528"></a>01528     }
-<a name="l01529"></a>01529     cpl_free (row_index) ;
-<a name="l01530"></a>01530     cpl_free (beginCol) ;
-<a name="l01531"></a>01531 
-<a name="l01532"></a>01532     <span class="keywordflow">return</span> returnCube ;
-<a name="l01533"></a>01533 }
-<a name="l01560"></a>01560 cpl_imagelist * 
-<a name="l01561"></a>01561 sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,
-<a name="l01562"></a>01562                            <span class="keywordtype">float</span>      firstCol,
-<a name="l01563"></a>01563                            <span class="keywordtype">float</span>    * distances,
-<a name="l01564"></a>01564                            <span class="keywordtype">float</span>    * shift )
-<a name="l01565"></a>01565 {
-<a name="l01566"></a>01566     cpl_imagelist * returnCube ;
-<a name="l01567"></a>01567     <span class="keywordtype">float</span> di ;
-<a name="l01568"></a>01568     <span class="keywordtype">float</span> diff, start ;
-<a name="l01569"></a>01569     <span class="keywordtype">int</span> * row_index ;
-<a name="l01570"></a>01570     <span class="keywordtype">int</span> slit ;
-<a name="l01571"></a>01571     <span class="keywordtype">int</span> col, z ;
-<a name="l01572"></a>01572     <span class="keywordtype">int</span> imsize ;
-<a name="l01573"></a>01573     <span class="keywordtype">int</span> * beginCol ;
-<a name="l01574"></a>01574     <span class="keywordtype">int</span> col_counter ;
-<a name="l01575"></a>01575     <span class="keywordtype">int</span> ilx=0;
-<a name="l01576"></a>01576     <span class="keywordtype">int</span> ily=0;
-<a name="l01577"></a>01577 
-<a name="l01578"></a>01578     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01579"></a>01579     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01580"></a>01580     cpl_image* o_img;
-<a name="l01581"></a>01581 
-<a name="l01582"></a>01582     <span class="keywordflow">if</span> ( NULL == calibImage )
-<a name="l01583"></a>01583     {
-<a name="l01584"></a>01584         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no resampled image given!\n"</span>) ;
-<a name="l01585"></a>01585         <span class="keywordflow">return</span> NULL ;
-<a name="l01586"></a>01586     }
-<a name="l01587"></a>01587     ilx=cpl_image_get_size_x(calibImage);
-<a name="l01588"></a>01588     ily=cpl_image_get_size_y(calibImage);
-<a name="l01589"></a>01589     pidata=cpl_image_get_data_float(calibImage);
-<a name="l01590"></a>01590 
-<a name="l01591"></a>01591     <span class="keywordflow">if</span> ( NULL == distances )
-<a name="l01592"></a>01592     {
-<a name="l01593"></a>01593         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array given from north_south_test()!"</span>) ;
-<a name="l01594"></a>01594         <span class="keywordflow">return</span> NULL ;
-<a name="l01595"></a>01595     }
-<a name="l01596"></a>01596 
-<a name="l01597"></a>01597     <span class="keywordflow">if</span> ( N_SLITLETS != 16 )
-<a name="l01598"></a>01598     {
-<a name="l01599"></a>01599         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;
-<a name="l01600"></a>01600         <span class="keywordflow">return</span> NULL ;
-<a name="l01601"></a>01601     }
-<a name="l01602"></a>01602     imsize = ilx / N_SLITLETS ;
-<a name="l01603"></a>01603 
-<a name="l01604"></a>01604     <span class="comment">/* allocate memory */</span>  
-<a name="l01605"></a>01605     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01606"></a>01606     {
-<a name="l01607"></a>01607         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01608"></a>01608         <span class="keywordflow">return</span> NULL ;
-<a name="l01609"></a>01609     }
-<a name="l01610"></a>01610     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )
-<a name="l01611"></a>01611     {
-<a name="l01612"></a>01612         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;
-<a name="l01613"></a>01613         cpl_free(row_index) ;
-<a name="l01614"></a>01614         <span class="keywordflow">return</span> NULL ;
-<a name="l01615"></a>01615     }
-<a name="l01616"></a>01616     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )
-<a name="l01617"></a>01617     {
-<a name="l01618"></a>01618         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;
-<a name="l01619"></a>01619         cpl_free(row_index) ;
-<a name="l01620"></a>01620         cpl_free(beginCol) ;
-<a name="l01621"></a>01621         <span class="keywordflow">return</span> NULL ;
-<a name="l01622"></a>01622     }
-<a name="l01623"></a>01623 
-<a name="l01624"></a>01624     di = 0. ;
-<a name="l01625"></a>01625     <span class="comment">/* determine the absolute beginning of the slitlets and the distances </span>
-<a name="l01626"></a>01626 <span class="comment">       inside the image*/</span>
-<a name="l01627"></a>01627     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) 
-<a name="l01628"></a>01628     <span class="comment">/* go through the slitlets of each row of the resampled image */</span>
-<a name="l01629"></a>01629     {
-<a name="l01630"></a>01630 
-<a name="l01631"></a>01631         <span class="comment">/* --------------------------------------------------------------</span>
-<a name="l01632"></a>01632 <span class="comment">         * sort the slitlets in the right 3D specific way</span>
-<a name="l01633"></a>01633 <span class="comment">         * the row_index describes the row index of the current slitlet </span>
-<a name="l01634"></a>01634 <span class="comment">         * in the resulting cube images.</span>
-<a name="l01635"></a>01635 <span class="comment">         */</span>
-<a name="l01636"></a>01636         row_index[slit] = slit ;
-<a name="l01637"></a>01637 
-<a name="l01638"></a>01638         <span class="comment">/* determine the integer column on which the slitlet starts */</span>
-<a name="l01639"></a>01639         <span class="keywordflow">if</span> ( slit == 0 )
-<a name="l01640"></a>01640         {
-<a name="l01641"></a>01641             start = firstCol ;
-<a name="l01642"></a>01642         }
-<a name="l01643"></a>01643         <span class="keywordflow">else</span>
-<a name="l01644"></a>01644         {
-<a name="l01645"></a>01645             di += distances[slit-1] ;
-<a name="l01646"></a>01646             start = firstCol + di ;
-<a name="l01647"></a>01647         }
-<a name="l01648"></a>01648         beginCol[slit] = sinfo_new_nint(start) ;
-<a name="l01649"></a>01649 
-<a name="l01650"></a>01650         <span class="comment">/* determine the error of using integer pixels, </span>
-<a name="l01651"></a>01651 <span class="comment">           `its always smaller than 1 */</span>
-<a name="l01652"></a>01652         diff = start - (float)beginCol[slit] ;
-<a name="l01653"></a>01653 
-<a name="l01654"></a>01654         <span class="comment">/*---------------------------------------------------------------- </span>
-<a name="l01655"></a>01655 <span class="comment">         * determine the output shift values by which the rows are finally </span>
-<a name="l01656"></a>01656 <span class="comment">           shifted, consider the integer pixel errors and resort shift array </span>
-<a name="l01657"></a>01657 <span class="comment">           to get the row index </span>
-<a name="l01658"></a>01658 <span class="comment">         */</span>
-<a name="l01659"></a>01659         shift[row_index[slit]] = diff ;
-<a name="l01660"></a>01660     }   
-<a name="l01661"></a>01661 
-<a name="l01662"></a>01662     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l01663"></a>01663     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l01664"></a>01664     {
-<a name="l01665"></a>01665       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);
-<a name="l01666"></a>01666       podata=cpl_image_get_data_float(o_img);
-<a name="l01667"></a>01667         <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )
-<a name="l01668"></a>01668         {
-<a name="l01669"></a>01669             col_counter = beginCol[slit] ;
-<a name="l01670"></a>01670             <span class="comment">/* each slitlet is centered on the final image row */</span>
-<a name="l01671"></a>01671             <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )
-<a name="l01672"></a>01672             {
-<a name="l01673"></a>01673                 <span class="keywordflow">if</span> ( col_counter > ilx-1 )
-<a name="l01674"></a>01674                 {
-<a name="l01675"></a>01675                     col_counter-- ;
-<a name="l01676"></a>01676                 }
-<a name="l01677"></a>01677                 podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];
-<a name="l01678"></a>01678                 col_counter++ ;
-<a name="l01679"></a>01679             }
-<a name="l01680"></a>01680         } 
-<a name="l01681"></a>01681         cpl_imagelist_set(returnCube,o_img,z);   
-<a name="l01682"></a>01682     }
-<a name="l01683"></a>01683     cpl_free (row_index) ;
-<a name="l01684"></a>01684     cpl_free (beginCol) ;
-<a name="l01685"></a>01685 
-<a name="l01686"></a>01686     <span class="keywordflow">return</span> returnCube ;
-<a name="l01687"></a>01687 }
-<a name="l01688"></a>01688 
-<a name="l01706"></a>01706 cpl_imagelist * 
-<a name="l01707"></a>01707 sinfo_new_make_3D_cube ( cpl_image * calibImage,
-<a name="l01708"></a>01708                        <span class="keywordtype">int</span>      * kpixshift, 
-<a name="l01709"></a>01709                        <span class="keywordtype">int</span>        kpixfirst )
-<a name="l01710"></a>01710 {
-<a name="l01711"></a>01711     cpl_imagelist * returnCube ;
-<a name="l01712"></a>01712     <span class="keywordtype">int</span> imsize, kslit, kpix ;
-<a name="l01713"></a>01713     <span class="keywordtype">int</span> z, col, recol ;
-<a name="l01714"></a>01714     <span class="keywordtype">int</span> ilx=0;
-<a name="l01715"></a>01715     <span class="keywordtype">int</span> ily=0;
-<a name="l01716"></a>01716 
-<a name="l01717"></a>01717     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01718"></a>01718     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01719"></a>01719     cpl_image* o_img;
-<a name="l01720"></a>01720 
-<a name="l01721"></a>01721     <span class="keywordflow">if</span> ( NULL == calibImage )
-<a name="l01722"></a>01722     {
-<a name="l01723"></a>01723         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;
-<a name="l01724"></a>01724         <span class="keywordflow">return</span> NULL ;
-<a name="l01725"></a>01725     }
-<a name="l01726"></a>01726     ilx=cpl_image_get_size_x(calibImage);
-<a name="l01727"></a>01727     ily=cpl_image_get_size_y(calibImage);
-<a name="l01728"></a>01728     pidata=cpl_image_get_data_float(calibImage);
-<a name="l01729"></a>01729 
-<a name="l01730"></a>01730     <span class="keywordflow">if</span> ( NULL == kpixshift )
-<a name="l01731"></a>01731     {
-<a name="l01732"></a>01732         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no shift array given!/n"</span>) ;
-<a name="l01733"></a>01733         <span class="keywordflow">return</span> NULL ;
-<a name="l01734"></a>01734     }
-<a name="l01735"></a>01735 
-<a name="l01736"></a>01736     <span class="keywordflow">if</span> ( kpixfirst < 0 )
-<a name="l01737"></a>01737     {
-<a name="l01738"></a>01738         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong first valid pixel given!/n"</span>) ;
-<a name="l01739"></a>01739         <span class="keywordflow">return</span> NULL ;
-<a name="l01740"></a>01740     }
-<a name="l01741"></a>01741 
-<a name="l01742"></a>01742     <span class="keywordflow">if</span> ( N_SLITLETS != 16 )
-<a name="l01743"></a>01743     {
-<a name="l01744"></a>01744         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;
-<a name="l01745"></a>01745         <span class="keywordflow">return</span> NULL ;
-<a name="l01746"></a>01746     }
-<a name="l01747"></a>01747     imsize = ilx / N_SLITLETS ;
-<a name="l01748"></a>01748 
-<a name="l01749"></a>01749     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )
-<a name="l01750"></a>01750     {
-<a name="l01751"></a>01751         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;
-<a name="l01752"></a>01752         <span class="keywordflow">return</span> NULL ;
-<a name="l01753"></a>01753     }
-<a name="l01754"></a>01754 
-<a name="l01755"></a>01755     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l01756"></a>01756     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l01757"></a>01757     {
-<a name="l01758"></a>01758       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);
-<a name="l01759"></a>01759       podata=cpl_image_get_data_float(o_img);
-<a name="l01760"></a>01760         kpix       = 0 ;
-<a name="l01761"></a>01761         kslit      = 0 ;
-<a name="l01762"></a>01762         recol      = -1 ;
-<a name="l01763"></a>01763         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) <span class="comment">/* go through the image columns */</span>
-<a name="l01764"></a>01764         {
-<a name="l01765"></a>01765             <span class="keywordflow">if</span> ( col % imsize == 0 ) 
-<a name="l01766"></a>01766             {
-<a name="l01767"></a>01767                 recol = 0 ;
-<a name="l01768"></a>01768                 kslit = col/imsize ;
-<a name="l01769"></a>01769                 kpix  = kpixfirst + kpixshift[kslit] ;
-<a name="l01770"></a>01770             }
-<a name="l01771"></a>01771 
-<a name="l01772"></a>01772             <span class="comment">/* fill each cube plane with one image row */</span>
-<a name="l01773"></a>01773             podata[recol+kslit*imsize] = pidata[col+kpix+z*ilx] ;
-<a name="l01774"></a>01774             recol++ ;
-<a name="l01775"></a>01775             <span class="keywordflow">if</span> ( recol > imsize )
-<a name="l01776"></a>01776             {
-<a name="l01777"></a>01777                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong column of reconstructed image, i"</span>
-<a name="l01778"></a>01778                                 <span class="stringliteral">"shouldn't happen!\n"</span>) ; 
-<a name="l01779"></a>01779                 cpl_imagelist_delete(returnCube) ;
-<a name="l01780"></a>01780                 <span class="keywordflow">return</span> NULL ;
-<a name="l01781"></a>01781             }
-<a name="l01782"></a>01782         }
-<a name="l01783"></a>01783         cpl_imagelist_set(returnCube,o_img,z);
-<a name="l01784"></a>01784     }
-<a name="l01785"></a>01785     <span class="keywordflow">return</span> returnCube ;
-<a name="l01786"></a>01786 }
-<a name="l01787"></a>01787 
-<a name="l01800"></a>01800 cpl_imagelist * 
-<a name="l01801"></a>01801 sinfo_new_determine_mask_cube ( cpl_imagelist * sourceMaskCube,
-<a name="l01802"></a>01802                               <span class="keywordtype">float</span>     lowLimit,
-<a name="l01803"></a>01803                               <span class="keywordtype">float</span>     highLimit )
-<a name="l01804"></a>01804 {
-<a name="l01805"></a>01805     cpl_imagelist * retCube ; 
-<a name="l01806"></a>01806     <span class="keywordtype">int</span> z, n ;
-<a name="l01807"></a>01807     <span class="keywordtype">int</span> ilx=0;
-<a name="l01808"></a>01808     <span class="keywordtype">int</span> ily=0;
-<a name="l01809"></a>01809     <span class="keywordtype">int</span> inp=0;
-<a name="l01810"></a>01810     <span class="keywordtype">int</span> olx=0;
-<a name="l01811"></a>01811     <span class="keywordtype">int</span> oly=0;
-<a name="l01812"></a>01812     <span class="keywordtype">int</span> onp=0;
-<a name="l01813"></a>01813     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01814"></a>01814     cpl_image* o_img;
-<a name="l01815"></a>01815 
-<a name="l01816"></a>01816     <span class="keywordflow">if</span> ( sourceMaskCube == NULL )
-<a name="l01817"></a>01817     {
-<a name="l01818"></a>01818         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!\n"</span>) ;
-<a name="l01819"></a>01819         <span class="keywordflow">return</span> NULL ;
-<a name="l01820"></a>01820     }
-<a name="l01821"></a>01821     ilx=cpl_image_get_size_x(cpl_imagelist_get(sourceMaskCube,0));
-<a name="l01822"></a>01822     ily=cpl_image_get_size_y(cpl_imagelist_get(sourceMaskCube,0));
-<a name="l01823"></a>01823     inp=cpl_imagelist_get_size(sourceMaskCube);
-<a name="l01824"></a>01824 
-<a name="l01825"></a>01825 
-<a name="l01826"></a>01826     <span class="keywordflow">if</span> ( lowLimit > 0. )
-<a name="l01827"></a>01827     {
-<a name="l01828"></a>01828         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lowLimit wrong!\n"</span>) ;
-<a name="l01829"></a>01829         <span class="keywordflow">return</span> NULL ;
-<a name="l01830"></a>01830     }
-<a name="l01831"></a>01831     <span class="keywordflow">if</span> ( highLimit >= 1. || highLimit < 0. )
-<a name="l01832"></a>01832     {
-<a name="l01833"></a>01833         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"highLimit wrong!\n"</span>) ;
-<a name="l01834"></a>01834         <span class="keywordflow">return</span> NULL ;
-<a name="l01835"></a>01835     }
-<a name="l01836"></a>01836 
-<a name="l01837"></a>01837     retCube = cpl_imagelist_duplicate (sourceMaskCube) ;
-<a name="l01838"></a>01838     onp=inp;
-<a name="l01839"></a>01839     olx=ilx;
-<a name="l01840"></a>01840     oly=ily;
-<a name="l01841"></a>01841 
-<a name="l01842"></a>01842     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )
-<a name="l01843"></a>01843     {
-<a name="l01844"></a>01844       o_img=cpl_imagelist_get(retCube,0);
-<a name="l01845"></a>01845       podata=cpl_image_get_data_float(o_img);
-<a name="l01846"></a>01846         <span class="keywordflow">for</span> ( n = 0 ; n < (int) olx*oly; n++ )
-<a name="l01847"></a>01847         {
-<a name="l01848"></a>01848             <span class="keywordflow">if</span> ( podata[n] == 0. )
-<a name="l01849"></a>01849             {
-<a name="l01850"></a>01850                continue ;
-<a name="l01851"></a>01851             }
-<a name="l01852"></a>01852             <span class="keywordflow">if</span> ( podata[n] == 1. )
-<a name="l01853"></a>01853             {
-<a name="l01854"></a>01854                continue ;
-<a name="l01855"></a>01855             }
-<a name="l01856"></a>01856             <span class="keywordflow">if</span> ( podata[n] >= lowLimit && 
-<a name="l01857"></a>01857                  podata[n] <= highLimit )
-<a name="l01858"></a>01858             {
-<a name="l01859"></a>01859                 podata[n] = 0. ;
-<a name="l01860"></a>01860             }
-<a name="l01861"></a>01861             <span class="keywordflow">else</span> 
-<a name="l01862"></a>01862             {
-<a name="l01863"></a>01863                 podata[n] = 1. ;
-<a name="l01864"></a>01864             }
-<a name="l01865"></a>01865         }
-<a name="l01866"></a>01866     }
-<a name="l01867"></a>01867     <span class="keywordflow">return</span> retCube ;
-<a name="l01868"></a>01868 }
-<a name="l01907"></a>01907 cpl_imagelist * 
-<a name="l01908"></a>01908 sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,
-<a name="l01909"></a>01909                          cpl_imagelist * maskCube,
-<a name="l01910"></a>01910                          <span class="keywordtype">int</span>       n_neighbors, <span class="comment">/* 7 */</span>
-<a name="l01911"></a>01911                          <span class="keywordtype">int</span>       max_radius ) <span class="comment">/* 5 */</span>
-<a name="l01912"></a>01912 {
-<a name="l01913"></a>01913     cpl_imagelist  * returnCube ;
-<a name="l01914"></a>01914     <span class="keywordtype">float</span>** spec=NULL ;
-<a name="l01915"></a>01915     <span class="keywordtype">float</span>* spec1=NULL ;
-<a name="l01916"></a>01916     <span class="keywordtype">int</span> n_im, n_bad, n_bad1, n_bad2 ;
-<a name="l01917"></a>01917     <span class="keywordtype">int</span> n_planes, specn, nspec1 ;
-<a name="l01918"></a>01918     <span class="keywordtype">int</span> i, m, n, z, ni, kk, p ;
-<a name="l01919"></a>01919     <span class="keywordtype">int</span> dis, dismin, dismax ;
-<a name="l01920"></a>01920     <span class="keywordtype">int</span> agreed ;
-<a name="l01921"></a>01921     <span class="keywordtype">int</span> xcordi, ycordi, xcordm, ycordm ;
-<a name="l01922"></a>01922 
-<a name="l01923"></a>01923 
-<a name="l01924"></a>01924 
-<a name="l01925"></a>01925     <span class="keywordtype">int</span> ilx=0;
-<a name="l01926"></a>01926     <span class="keywordtype">int</span> ily=0;
-<a name="l01927"></a>01927     <span class="keywordtype">int</span> inp=0;
-<a name="l01928"></a>01928    
-<a name="l01929"></a>01929     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01930"></a>01930     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01931"></a>01931     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01932"></a>01932     cpl_image* i_img=NULL;
-<a name="l01933"></a>01933     cpl_image* m_img=NULL;
-<a name="l01934"></a>01934     cpl_image* o_img=NULL;
-<a name="l01935"></a>01935 
-<a name="l01936"></a>01936     <span class="keywordflow">if</span> ( NULL == sourceCube )
-<a name="l01937"></a>01937     {
-<a name="l01938"></a>01938         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no source cube given!\n"</span>) ;
-<a name="l01939"></a>01939         <span class="keywordflow">return</span> NULL ;
-<a name="l01940"></a>01940     }
-<a name="l01941"></a>01941 
-<a name="l01942"></a>01942 
-<a name="l01943"></a>01943     ilx=cpl_image_get_size_x(cpl_imagelist_get(sourceCube,0));
-<a name="l01944"></a>01944     ily=cpl_image_get_size_y(cpl_imagelist_get(sourceCube,0));
-<a name="l01945"></a>01945     inp=cpl_imagelist_get_size(sourceCube);
-<a name="l01946"></a>01946 
-<a name="l01947"></a>01947     <span class="keywordflow">if</span> ( NULL == maskCube )
-<a name="l01948"></a>01948     {
-<a name="l01949"></a>01949         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no bad pixel mask cube given!\n"</span>) ;
-<a name="l01950"></a>01950         <span class="keywordflow">return</span> NULL ;
-<a name="l01951"></a>01951     }
-<a name="l01952"></a>01952 
-<a name="l01953"></a>01953     <span class="keywordflow">if</span> ( n_neighbors <= 0 )
-<a name="l01954"></a>01954     {
-<a name="l01955"></a>01955         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of neighbors in the spectral "</span>
-<a name="l01956"></a>01956                         <span class="stringliteral">"direction given!"</span>) ;
-<a name="l01957"></a>01957         <span class="keywordflow">return</span> NULL ;
-<a name="l01958"></a>01958     }
-<a name="l01959"></a>01959    
-<a name="l01960"></a>01960     <span class="keywordflow">if</span> ( max_radius <= 0 )
-<a name="l01961"></a>01961     {
-<a name="l01962"></a>01962         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong maximal radius for interpolation inside "</span>
-<a name="l01963"></a>01963                         <span class="stringliteral">"an image plane given!"</span>) ;
-<a name="l01964"></a>01964         <span class="keywordflow">return</span> NULL ;
-<a name="l01965"></a>01965     }
-<a name="l01966"></a>01966 
-<a name="l01967"></a>01967     returnCube = cpl_imagelist_duplicate(sourceCube) ;
-<a name="l01968"></a>01968     
-<a name="l01969"></a>01969     n_im     = ilx * ily ;
-<a name="l01970"></a>01970     n_planes = inp ;
-<a name="l01971"></a>01971 
-<a name="l01972"></a>01972     spec1=cpl_calloc(300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01973"></a>01973     spec=sinfo_new_2Dfloatarray(100,2*n_neighbors+1) ;
-<a name="l01974"></a>01974 
-<a name="l01975"></a>01975     <span class="comment">/* loop over the image planes and look for bad pixels and correct them */</span>
-<a name="l01976"></a>01976     <span class="keywordflow">for</span> ( z = 0 ; z < n_planes ; z++ ) <span class="comment">/* go through image planes */</span>
-<a name="l01977"></a>01977     {
-<a name="l01978"></a>01978       m_img=cpl_imagelist_get(maskCube,z);
-<a name="l01979"></a>01979       pmdata=cpl_image_get_data_float(m_img);
-<a name="l01980"></a>01980       o_img=cpl_imagelist_get(returnCube,z);
-<a name="l01981"></a>01981       podata=cpl_image_get_data_float(o_img);
-<a name="l01982"></a>01982 
-<a name="l01983"></a>01983         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l01984"></a>01984 <span class="comment">         * determine n, the length of one wing in one spectrum with which the </span>
-<a name="l01985"></a>01985 <span class="comment">         * bad pixel will be interpolated. The length of one wing is </span>
-<a name="l01986"></a>01986 <span class="comment">           n_neighbors but less at the edges of the cube. </span>
-<a name="l01987"></a>01987 <span class="comment">         */</span>
-<a name="l01988"></a>01988         <span class="keywordflow">if</span> ( z < n_neighbors )
-<a name="l01989"></a>01989         {
-<a name="l01990"></a>01990             n = z ;
-<a name="l01991"></a>01991         }
-<a name="l01992"></a>01992         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( n_planes - z <= n_neighbors)
-<a name="l01993"></a>01993         {
-<a name="l01994"></a>01994             n = n_planes - z -1 ;
-<a name="l01995"></a>01995         }
-<a name="l01996"></a>01996         <span class="keywordflow">else</span>
-<a name="l01997"></a>01997         { 
-<a name="l01998"></a>01998             n = n_neighbors ;
-<a name="l01999"></a>01999         }
-<a name="l02000"></a>02000 
-<a name="l02001"></a>02001         <span class="keywordflow">for</span> ( i = 0 ; i < n_im ; i ++ ) <span class="comment">/* go through one image */</span>
-<a name="l02002"></a>02002         {
-<a name="l02003"></a>02003             <span class="comment">/* continue if the pixel is a good one */</span>
-<a name="l02004"></a>02004             <span class="keywordflow">if</span> ( pmdata[i] != 0. )
-<a name="l02005"></a>02005             {
-<a name="l02006"></a>02006                 continue ;
-<a name="l02007"></a>02007             }
-<a name="l02008"></a>02008         
-<a name="l02009"></a>02009             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l02010"></a>02010 <span class="comment">             * exclude pixels with too many bad neighbors in the spectrum.</span>
-<a name="l02011"></a>02011 <span class="comment">             * exit if: too few good pixels in the neighboring spectrum or </span>
-<a name="l02012"></a>02012 <span class="comment">             * good pixels are only on one side of the spectrum.</span>
-<a name="l02013"></a>02013 <span class="comment">             */</span>
-<a name="l02014"></a>02014             n_bad  = 0 ;
-<a name="l02015"></a>02015             n_bad1 = 0 ;
-<a name="l02016"></a>02016             n_bad2 = 0 ;
-<a name="l02017"></a>02017             <span class="comment">/* go through the neighbor spectral pixels */</span>
-<a name="l02018"></a>02018             <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ ) 
-<a name="l02019"></a>02019             {
-<a name="l02020"></a>02020                 <span class="keywordflow">if</span> ( pmdata[i] == 0. )
-<a name="l02021"></a>02021                 {
-<a name="l02022"></a>02022                     n_bad++ ;
-<a name="l02023"></a>02023                     <span class="comment">/* count bad pixels on either spectral side of </span>
-<a name="l02024"></a>02024 <span class="comment">                       the bad pixel to be interpolated */</span>
-<a name="l02025"></a>02025                     <span class="keywordflow">if</span> ( ni < z )
-<a name="l02026"></a>02026                     {
-<a name="l02027"></a>02027                         n_bad1++ ;
-<a name="l02028"></a>02028                     }
-<a name="l02029"></a>02029                     <span class="keywordflow">if</span> ( ni > z )
-<a name="l02030"></a>02030                     {
-<a name="l02031"></a>02031                         n_bad2++ ;
-<a name="l02032"></a>02032                     }
-<a name="l02033"></a>02033                 }
-<a name="l02034"></a>02034             }
-<a name="l02035"></a>02035          
-<a name="l02036"></a>02036             <span class="comment">/*--------------------------------------------------------------- </span>
-<a name="l02037"></a>02037 <span class="comment">             * now the criteria are checked which the neighborhood in the </span>
-<a name="l02038"></a>02038 <span class="comment">               spectral dimension has to match if the pixel is interpolatable.</span>
-<a name="l02039"></a>02039 <span class="comment">             * The total number of the good pixel in the spectrum must be more </span>
-<a name="l02040"></a>02040 <span class="comment">               than 3 and there must be at least one good pixel on either side </span>
-<a name="l02041"></a>02041 <span class="comment">               of the central pixel.</span>
-<a name="l02042"></a>02042 <span class="comment">             */</span>
-<a name="l02043"></a>02043             <span class="keywordflow">if</span> ( (2*n+1 - n_bad) < 3 || (n - n_bad1) < 1 || (n - n_bad2) < 1 )
-<a name="l02044"></a>02044             {
-<a name="l02045"></a>02045                 continue ;
-<a name="l02046"></a>02046             }
-<a name="l02047"></a>02047             
-<a name="l02048"></a>02048             <span class="comment">/* read the master spectrum into the first row of the array spec */</span>
-<a name="l02049"></a>02049             kk = 0 ;
-<a name="l02050"></a>02050             <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )
-<a name="l02051"></a>02051             {
-<a name="l02052"></a>02052           i_img=cpl_imagelist_get(sourceCube,ni);
-<a name="l02053"></a>02053               pidata=cpl_image_get_data_float(i_img);
-<a name="l02054"></a>02054                 spec[1][kk] = pmdata[i] != 0. ? pidata[i] : ZERO ;
-<a name="l02055"></a>02055                 kk++ ; <span class="comment">/* length of spectrum */</span>
-<a name="l02056"></a>02056             }
-<a name="l02057"></a>02057             
-<a name="l02058"></a>02058             <span class="comment">/* look for appropriate neighbors in the x-y neighborhood */</span>
-<a name="l02059"></a>02059             agreed = 1 ; <span class="comment">/* loop guard */</span>
-<a name="l02060"></a>02060             specn  = 2 ; <span class="comment">/* number of spectra in spec. </span>
-<a name="l02061"></a>02061 <span class="comment">                            First is master spectrum */</span>
-<a name="l02062"></a>02062             dismin = 0 ; <span class="comment">/* x+y minimal distance to bad pixel */</span>
-<a name="l02063"></a>02063             dismax = 1 ; <span class="comment">/* x+y maximal distance to bad pixel */</span>
-<a name="l02064"></a>02064             <span class="keywordflow">do</span>
-<a name="l02065"></a>02065             {
-<a name="l02066"></a>02066                 <span class="keywordflow">for</span> ( m = 0 ; m < n_im ; m++ )
-<a name="l02067"></a>02067                 {
-<a name="l02068"></a>02068                     <span class="keywordflow">if</span> ( pmdata[m] == 0. )
-<a name="l02069"></a>02069                     {
-<a name="l02070"></a>02070                         continue ;
-<a name="l02071"></a>02071                     }
-<a name="l02072"></a>02072 
-<a name="l02073"></a>02073                     <span class="comment">/* --------------------------------------------------------</span>
-<a name="l02074"></a>02074 <span class="comment">                     * determine the x and y coordinates of the bad pixel (i)</span>
-<a name="l02075"></a>02075 <span class="comment">                     * and the pixels used to interpolate (m) </span>
-<a name="l02076"></a>02076 <span class="comment">                     */</span>
-<a name="l02077"></a>02077                     xcordi = i % ilx ;
-<a name="l02078"></a>02078                     xcordm = m % ilx ;
-<a name="l02079"></a>02079                     ycordi = i / ilx ;
-<a name="l02080"></a>02080                     ycordm = m / ilx ;
-<a name="l02081"></a>02081                     <span class="comment">/*----------------------------------------------------- </span>
-<a name="l02082"></a>02082 <span class="comment">                     * check the distance: take only close pixels</span>
-<a name="l02083"></a>02083 <span class="comment">                     * extension 'i' is coordinate of the bad pixel to be </span>
-<a name="l02084"></a>02084 <span class="comment">                       interpolated</span>
-<a name="l02085"></a>02085 <span class="comment">                     */</span>
-<a name="l02086"></a>02086                     dis = abs(xcordi-xcordm) + abs(ycordi-ycordm) ;
-<a name="l02087"></a>02087                     <span class="keywordflow">if</span> ( dis <= dismin || dis > dismax )
-<a name="l02088"></a>02088                     {
-<a name="l02089"></a>02089                         continue ;
-<a name="l02090"></a>02090                     }
-<a name="l02091"></a>02091                     <span class="comment">/*--------------------------------------------------------</span>
-<a name="l02092"></a>02092 <span class="comment">                     * check on number of bad pixels in the spectrum of a </span>
-<a name="l02093"></a>02093 <span class="comment">                     * neighbor pixel; reject it if it contains less than 2 </span>
-<a name="l02094"></a>02094 <span class="comment">                     * usable pixel pairs. a bit more explanation:</span>
-<a name="l02095"></a>02095 <span class="comment">                     * let this be a 15 pixel spectrum with the pixel to be </span>
-<a name="l02096"></a>02096 <span class="comment">                     * interpolated denoted by '0' and other bad pixels marked </span>
-<a name="l02097"></a>02097 <span class="comment">                     * with 'b'. Good pixels are marked with '1'. Below a </span>
-<a name="l02098"></a>02098 <span class="comment">                     * neighbor spectrum is drawn containing bad pixels as </span>
-<a name="l02099"></a>02099 <span class="comment">                     * well. The third line shows the position of the usable </span>
-<a name="l02100"></a>02100 <span class="comment">                     * pixel pairs, spectral</span>
-<a name="l02101"></a>02101 <span class="comment">                     * positions, where both spectra have valid pixels.</span>
-<a name="l02102"></a>02102 <span class="comment">                     *</span>
-<a name="l02103"></a>02103 <span class="comment">                     *   1 1 1 b b 1 1 0 b 1 b b 1 b b</span>
-<a name="l02104"></a>02104 <span class="comment">                     *   b 1 1 1 b b 1 1 1 1 1 1 b b 1</span>
-<a name="l02105"></a>02105 <span class="comment">                     *     ^ ^       ^     ^             4 good pixel pairs</span>
-<a name="l02106"></a>02106 <span class="comment">                     */</span>
-<a name="l02107"></a>02107       
-<a name="l02108"></a>02108                     n_bad = 0 ;
-<a name="l02109"></a>02109                     <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )
-<a name="l02110"></a>02110                     {
-<a name="l02111"></a>02111                         <span class="keywordflow">if</span> ( pmdata[i] == 0. || pmdata[m] == 0. )
-<a name="l02112"></a>02112                         {
-<a name="l02113"></a>02113                             n_bad++ ;
-<a name="l02114"></a>02114                         }
-<a name="l02115"></a>02115                     }
-<a name="l02116"></a>02116                     <span class="keywordflow">if</span> ( n_bad > 2*n-1 ) 
-<a name="l02117"></a>02117                     <span class="comment">/* we need at least 2 usable pixel pairs */</span>
-<a name="l02118"></a>02118                     {
-<a name="l02119"></a>02119                         continue ;
-<a name="l02120"></a>02120                     }
-<a name="l02121"></a>02121                     
-<a name="l02122"></a>02122                     <span class="comment">/* transfer the spectrum to the next position </span>
-<a name="l02123"></a>02123 <span class="comment">                       of array spec */</span>
-<a name="l02124"></a>02124                     kk = 0 ;
-<a name="l02125"></a>02125                     <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )
-<a name="l02126"></a>02126                     {
-<a name="l02127"></a>02127               i_img=cpl_imagelist_get(sourceCube,ni);
-<a name="l02128"></a>02128               pidata=cpl_image_get_data_float(i_img);
-<a name="l02129"></a>02129                         spec[specn][kk] = pmdata[m] != 0. ? pidata[m] : ZERO ;
-<a name="l02130"></a>02130                         kk++ ;
-<a name="l02131"></a>02131                     }
-<a name="l02132"></a>02132                     specn++ ;
-<a name="l02133"></a>02133                     <span class="keywordflow">if</span> ( specn > 10 ) <span class="comment">/* if we have 9 neighbors then break */</span>
-<a name="l02134"></a>02134                     {
-<a name="l02135"></a>02135                         agreed = 0 ;
-<a name="l02136"></a>02136                         break ;
-<a name="l02137"></a>02137                     }
-<a name="l02138"></a>02138                 }
-<a name="l02139"></a>02139                 <span class="comment">/* if no break, increase search radius and continue */</span>
-<a name="l02140"></a>02140                 dismin++ ;        
-<a name="l02141"></a>02141                 dismax++ ;
-<a name="l02142"></a>02142                 <span class="comment">/* if search radius is too big, exit with fewer </span>
-<a name="l02143"></a>02143 <span class="comment">                   good neighbors */</span>
-<a name="l02144"></a>02144                 <span class="keywordflow">if</span> ( dismax > max_radius )
-<a name="l02145"></a>02145                 {
-<a name="l02146"></a>02146                     agreed = 0 ;
-<a name="l02147"></a>02147                 }
-<a name="l02148"></a>02148             }   <span class="keywordflow">while</span>(agreed) ;    
-<a name="l02149"></a>02149                        
-<a name="l02150"></a>02150             specn-- ;
-<a name="l02151"></a>02151             dismax -= 2 ;
-<a name="l02152"></a>02152             <span class="comment">/* TODO: why compute dismax is later this is not used? */</span>
-<a name="l02153"></a>02153             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l02154"></a>02154 <span class="comment">             * Take the master spectrum with the bad pixel in the middle and </span>
-<a name="l02155"></a>02155 <span class="comment">               divide it by each of the neighbor spectra and normalize the </span>
-<a name="l02156"></a>02156 <span class="comment">               division with the value in  the center position.</span>
-<a name="l02157"></a>02157 <span class="comment">             */</span>
-<a name="l02158"></a>02158             <span class="keywordflow">for</span> ( kk = 0 ; kk < 2*n+1 ; kk++ )
-<a name="l02159"></a>02159             {
-<a name="l02160"></a>02160                 <span class="keywordflow">if</span> ( kk == n )    <span class="comment">/* do not divide the master bad pixel */</span>
-<a name="l02161"></a>02161                 {
-<a name="l02162"></a>02162                     continue ;
-<a name="l02163"></a>02163                 }
-<a name="l02164"></a>02164 
-<a name="l02165"></a>02165                 <span class="comment">/* do not divide bad pixels in the master spectrum */</span>
-<a name="l02166"></a>02166                 <span class="keywordflow">if</span> ( isnan(spec[1][kk]) ) 
-<a name="l02167"></a>02167                 {
-<a name="l02168"></a>02168                     <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )
-<a name="l02169"></a>02169                     {
-<a name="l02170"></a>02170                         spec[p][kk] = ZERO ;
-<a name="l02171"></a>02171                     }
-<a name="l02172"></a>02172                 }    
-<a name="l02173"></a>02173                 <span class="keywordflow">else</span>       <span class="comment">/* all is well, now divide */</span>
-<a name="l02174"></a>02174                 {
-<a name="l02175"></a>02175                     <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )
-<a name="l02176"></a>02176                     {
-<a name="l02177"></a>02177                         <span class="keywordflow">if</span> ( !isnan(spec[p][kk]) && spec[p][kk] != 0. &&
-<a name="l02178"></a>02178                              !isnan(spec[p][n]) )
-<a name="l02179"></a>02179                         {
-<a name="l02180"></a>02180                             spec[p][kk] = spec[1][kk] / 
-<a name="l02181"></a>02181                                           spec[p][kk] * spec[p][n] ;
-<a name="l02182"></a>02182                         }
-<a name="l02183"></a>02183                         <span class="keywordflow">else</span>
-<a name="l02184"></a>02184                         {
-<a name="l02185"></a>02185                             spec[p][kk] = ZERO ;
-<a name="l02186"></a>02186                         }
-<a name="l02187"></a>02187                     }
-<a name="l02188"></a>02188                 }
-<a name="l02189"></a>02189             }
-<a name="l02190"></a>02190  
-<a name="l02191"></a>02191             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l02192"></a>02192 <span class="comment">             * determine the sinfo_median of all values. With 9 good neighbors </span>
-<a name="l02193"></a>02193 <span class="comment">             * and at least 2 good values per neighbor we have between 18 and </span>
-<a name="l02194"></a>02194 <span class="comment">             * 9*14 values for the statistics. If there are not enough good </span>
-<a name="l02195"></a>02195 <span class="comment">             * neighbors available, only continue if we have collected at </span>
-<a name="l02196"></a>02196 <span class="comment">             * least 18 values.</span>
-<a name="l02197"></a>02197 <span class="comment">             */</span>
-<a name="l02198"></a>02198             nspec1 = 0 ;  
-<a name="l02199"></a>02199             <span class="comment">/* collect the good values in the array spec1 */</span> 
-<a name="l02200"></a>02200             <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )
-<a name="l02201"></a>02201             {
-<a name="l02202"></a>02202                 <span class="keywordflow">for</span> ( kk = 0 ; kk < 2*n+1 ; kk++ )
-<a name="l02203"></a>02203                 {
-<a name="l02204"></a>02204                     <span class="keywordflow">if</span> ( !isnan(spec[p][kk]) && kk != n )
-<a name="l02205"></a>02205                     {
-<a name="l02206"></a>02206                         spec1[nspec1] = spec[p][kk] ;
-<a name="l02207"></a>02207                         nspec1++ ;
-<a name="l02208"></a>02208                     }
-<a name="l02209"></a>02209                 }
-<a name="l02210"></a>02210             }
-<a name="l02211"></a>02211             
-<a name="l02212"></a>02212             <span class="comment">/* now test if we have at least 18 values */</span>
-<a name="l02213"></a>02213             <span class="keywordflow">if</span> ( nspec1 < 18 )
-<a name="l02214"></a>02214             {
-<a name="l02215"></a>02215                 continue ;
-<a name="l02216"></a>02216             }
-<a name="l02217"></a>02217  
-<a name="l02218"></a>02218             <span class="comment">/* interpolate the bad pixel by the sinfo_median of spec1 */</span>
-<a name="l02219"></a>02219             podata[i] = sinfo_new_median(spec1, nspec1) ;
-<a name="l02220"></a>02220             pmdata[i] = 1 ;
-<a name="l02221"></a>02221         }
-<a name="l02222"></a>02222     }           
-<a name="l02223"></a>02223     sinfo_new_destroy_2Dfloatarray(&spec,2*n_neighbors+1) ;
-<a name="l02224"></a>02224     cpl_free(spec1);
-<a name="l02225"></a>02225     <span class="keywordflow">return</span> returnCube ;
-<a name="l02226"></a>02226 }
-<a name="l02247"></a>02247 cpl_imagelist * 
-<a name="l02248"></a>02248 sinfo_new_fine_tune_cube( cpl_imagelist * cube,
-<a name="l02249"></a>02249                                      <span class="keywordtype">float</span>   * correct_diff_dist,
-<a name="l02250"></a>02250                                      <span class="keywordtype">int</span>       n_order )
-<a name="l02251"></a>02251 {
-<a name="l02252"></a>02252     cpl_imagelist * returnCube ;
-<a name="l02253"></a>02253     <span class="keywordtype">float</span>* row_data=NULL ;
-<a name="l02254"></a>02254     <span class="keywordtype">float</span>* corrected_row_data=NULL ;
-<a name="l02255"></a>02255     <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l02256"></a>02256     <span class="keywordtype">float</span> sum, new_sum ;
-<a name="l02257"></a>02257     <span class="keywordtype">float</span> eval<span class="comment">/*, dy*/</span> ;
-<a name="l02258"></a>02258     <span class="keywordtype">float</span> * imageptr ;
-<a name="l02259"></a>02259     <span class="keywordtype">int</span> row, col ;
-<a name="l02260"></a>02260     <span class="keywordtype">int</span> i, z ;
-<a name="l02261"></a>02261     <span class="keywordtype">int</span> imsize, n_points ;
-<a name="l02262"></a>02262     <span class="keywordtype">int</span> firstpos ;
-<a name="l02263"></a>02263     <span class="keywordtype">int</span>  flag;
-<a name="l02264"></a>02264     <span class="keywordtype">int</span> ilx=0;
-<a name="l02265"></a>02265     <span class="keywordtype">int</span> ily=0;
-<a name="l02266"></a>02266     <span class="keywordtype">int</span> inp=0;
-<a name="l02267"></a>02267    
-<a name="l02268"></a>02268     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02269"></a>02269     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02270"></a>02270     cpl_image* i_img=NULL;
-<a name="l02271"></a>02271     cpl_image* o_img=NULL;
-<a name="l02272"></a>02272 
-<a name="l02273"></a>02273 
-<a name="l02274"></a>02274     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l02275"></a>02275     {
-<a name="l02276"></a>02276         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;
-<a name="l02277"></a>02277         <span class="keywordflow">return</span> NULL ;
-<a name="l02278"></a>02278     }
-<a name="l02279"></a>02279     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l02280"></a>02280     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l02281"></a>02281     inp=cpl_imagelist_get_size(cube);
-<a name="l02282"></a>02282 
-<a name="l02283"></a>02283     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )
-<a name="l02284"></a>02284     {
-<a name="l02285"></a>02285         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!n"</span>) ;
-<a name="l02286"></a>02286         <span class="keywordflow">return</span> NULL ;
-<a name="l02287"></a>02287     }
-<a name="l02288"></a>02288   
-<a name="l02289"></a>02289     <span class="keywordflow">if</span> ( n_order <= 0 )
-<a name="l02290"></a>02290     {
-<a name="l02291"></a>02291         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l02292"></a>02292     returnCube = cpl_imagelist_duplicate(cube);
-<a name="l02293"></a>02293         <span class="keywordflow">return</span> returnCube ;
-<a name="l02294"></a>02294     }
-<a name="l02295"></a>02295 
-<a name="l02296"></a>02296     returnCube = cpl_imagelist_duplicate(cube);
-<a name="l02297"></a>02297     
-<a name="l02298"></a>02298     imsize = ily ;
-<a name="l02299"></a>02299     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )
-<a name="l02300"></a>02300     {
-<a name="l02301"></a>02301         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;
-<a name="l02302"></a>02302         <span class="keywordflow">return</span> NULL ;
-<a name="l02303"></a>02303     }
-<a name="l02304"></a>02304 
-<a name="l02305"></a>02305     n_points = n_order + 1 ;
-<a name="l02306"></a>02306     <span class="keywordflow">if</span> ( n_points % 2 == 0 )
-<a name="l02307"></a>02307     {
-<a name="l02308"></a>02308         firstpos = (int)(n_points/2) - 1 ;
-<a name="l02309"></a>02309     }
-<a name="l02310"></a>02310     <span class="keywordflow">else</span>
-<a name="l02311"></a>02311     {
-<a name="l02312"></a>02312         firstpos = (int)(n_points/2) ;
-<a name="l02313"></a>02313     }
-<a name="l02314"></a>02314     xnum=cpl_calloc(n_order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02315"></a>02315 
-<a name="l02316"></a>02316     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )
-<a name="l02317"></a>02317     {
-<a name="l02318"></a>02318         xnum[i] = i ;
-<a name="l02319"></a>02319     }    
-<a name="l02320"></a>02320 
-<a name="l02321"></a>02321     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02322"></a>02322     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02323"></a>02323 
-<a name="l02324"></a>02324     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02325"></a>02325     {
-<a name="l02326"></a>02326       i_img=cpl_imagelist_get(cube,z);
-<a name="l02327"></a>02327       pidata=cpl_image_get_data_float(i_img);
-<a name="l02328"></a>02328       o_img=cpl_imagelist_get(returnCube,z);
-<a name="l02329"></a>02329       podata=cpl_image_get_data_float(o_img);
-<a name="l02330"></a>02330 
-<a name="l02331"></a>02331 
-<a name="l02332"></a>02332         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )
-<a name="l02333"></a>02333         {
-<a name="l02334"></a>02334             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02335"></a>02335             {
-<a name="l02336"></a>02336                 corrected_row_data[col] = 0. ;
-<a name="l02337"></a>02337             }
-<a name="l02338"></a>02338             sum = 0. ; 
-<a name="l02339"></a>02339             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02340"></a>02340             {
-<a name="l02341"></a>02341                 row_data[col] = pidata[col+row*ilx] ;
-<a name="l02342"></a>02342                 <span class="keywordflow">if</span> ( isnan(row_data[col]) )
-<a name="l02343"></a>02343                 {
-<a name="l02344"></a>02344                     row_data[col] = 0. ;
-<a name="l02345"></a>02345                     <span class="keywordflow">for</span> ( i = col - firstpos ; 
-<a name="l02346"></a>02346                           i < col -firstpos+n_points ; i++ )
-<a name="l02347"></a>02347                     {
-<a name="l02348"></a>02348                         <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l02349"></a>02349                         <span class="keywordflow">if</span> ( i >= ilx) continue ; 
-<a name="l02350"></a>02350                         corrected_row_data[i] = ZERO ;
-<a name="l02351"></a>02351                     }
-<a name="l02352"></a>02352                 }
-<a name="l02353"></a>02353                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )
-<a name="l02354"></a>02354                 {
-<a name="l02355"></a>02355                     sum += row_data[col] ;
-<a name="l02356"></a>02356                 }
-<a name="l02357"></a>02357             }
-<a name="l02358"></a>02358 
-<a name="l02359"></a>02359            
-<a name="l02360"></a>02360             new_sum = 0. ;
-<a name="l02361"></a>02361             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02362"></a>02362             {
-<a name="l02363"></a>02363                 
-<a name="l02364"></a>02364                 <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) )
-<a name="l02365"></a>02365                 {
-<a name="l02366"></a>02366                     continue ;
-<a name="l02367"></a>02367                 }
-<a name="l02368"></a>02368                 <span class="keywordflow">if</span> ( col - firstpos < 0 )
-<a name="l02369"></a>02369                 {
-<a name="l02370"></a>02370                     imageptr = &row_data[0] ;
-<a name="l02371"></a>02371                     eval     = correct_diff_dist[row] + col ;
-<a name="l02372"></a>02372                 }
-<a name="l02373"></a>02373                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col - firstpos + n_points >= ilx )
-<a name="l02374"></a>02374                 {
-<a name="l02375"></a>02375                     imageptr = &row_data[ilx - n_points] ;
-<a name="l02376"></a>02376                     eval     = correct_diff_dist[row] + col + n_points - ilx ;
-<a name="l02377"></a>02377                 }
-<a name="l02378"></a>02378                 <span class="keywordflow">else</span>
-<a name="l02379"></a>02379                 {
-<a name="l02380"></a>02380                     imageptr = &row_data[col-firstpos] ;
-<a name="l02381"></a>02381                     eval     = correct_diff_dist[row] + firstpos ;
-<a name="l02382"></a>02382                 }
-<a name="l02383"></a>02383 
-<a name="l02384"></a>02384         
-<a name="l02385"></a>02385         flag = 0;
-<a name="l02386"></a>02386         corrected_row_data[col]=sinfo_new_nev_ille(xnum, imageptr, 
-<a name="l02387"></a>02387                                                        n_order, eval, &flag);
-<a name="l02388"></a>02388 
-<a name="l02389"></a>02389                
-<a name="l02390"></a>02390                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )
-<a name="l02391"></a>02391                 {
-<a name="l02392"></a>02392                     new_sum += corrected_row_data[col] ;
-<a name="l02393"></a>02393                 }
-<a name="l02394"></a>02394             }
-<a name="l02395"></a>02395             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02396"></a>02396             {
-<a name="l02397"></a>02397                 
-<a name="l02398"></a>02398                 <span class="keywordflow">if</span> ( col == 0 )
-<a name="l02399"></a>02399                 {
-<a name="l02400"></a>02400                     podata[col+row*ilx] = ZERO ;
-<a name="l02401"></a>02401                 }
-<a name="l02402"></a>02402                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )
-<a name="l02403"></a>02403                 {
-<a name="l02404"></a>02404                     podata[col+row*ilx] = ZERO ;
-<a name="l02405"></a>02405                 }
-<a name="l02406"></a>02406                 <span class="keywordflow">else</span>
-<a name="l02407"></a>02407                 {
-<a name="l02408"></a>02408                     <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) ) 
-<a name="l02409"></a>02409                     {
-<a name="l02410"></a>02410                         podata[col+row*ilx] = ZERO ;
-<a name="l02411"></a>02411                     }
-<a name="l02412"></a>02412                     <span class="keywordflow">else</span>
-<a name="l02413"></a>02413                     {
-<a name="l02414"></a>02414                         <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum = 1. ;
-<a name="l02415"></a>02415                      
-<a name="l02416"></a>02416                         podata[col+row*ilx] = corrected_row_data[col] ;
-<a name="l02417"></a>02417                     }
-<a name="l02418"></a>02418                 }
-<a name="l02419"></a>02419             }
-<a name="l02420"></a>02420         }
-<a name="l02421"></a>02421     }       
-<a name="l02422"></a>02422 
-<a name="l02423"></a>02423     cpl_free(xnum) ;
-<a name="l02424"></a>02424     cpl_free(row_data) ;
-<a name="l02425"></a>02425     cpl_free(corrected_row_data) ;
-<a name="l02426"></a>02426 
-<a name="l02427"></a>02427     <span class="keywordflow">return</span> returnCube ;
-<a name="l02428"></a>02428 }
-<a name="l02429"></a>02429 
-<a name="l02449"></a>02449 cpl_imagelist * 
-<a name="l02450"></a>02450 sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,
-<a name="l02451"></a>02451                                            <span class="keywordtype">float</span>   * correct_diff_dist )
-<a name="l02452"></a>02452 {
-<a name="l02453"></a>02453     cpl_imagelist * returnCube ;
-<a name="l02454"></a>02454 
-<a name="l02455"></a>02455     <span class="keywordtype">float</span>* row_data=NULL ;
-<a name="l02456"></a>02456     dcomplex* data=NULL ;
-<a name="l02457"></a>02457     dcomplex* corrected_data=NULL ;
-<a name="l02458"></a>02458 
-<a name="l02459"></a>02459     <span class="keywordtype">unsigned</span> nn[2];
-<a name="l02460"></a>02460     <span class="comment">/*float corrected_row_data[cube->lx] ;*/</span>
-<a name="l02461"></a>02461     <span class="keywordtype">float</span> phi, pphi ;
-<a name="l02462"></a>02462     <span class="keywordtype">float</span> coph, siph ;
-<a name="l02463"></a>02463     <span class="keywordtype">int</span> row, col ;
-<a name="l02464"></a>02464     <span class="keywordtype">int</span> i, z ;
-<a name="l02465"></a>02465     <span class="keywordtype">int</span> imsize ;
-<a name="l02466"></a>02466     <span class="keywordtype">int</span> blank_indicator ;
-<a name="l02467"></a>02467 
-<a name="l02468"></a>02468 
-<a name="l02469"></a>02469     <span class="keywordtype">int</span> ilx=0;
-<a name="l02470"></a>02470     <span class="keywordtype">int</span> ily=0;
-<a name="l02471"></a>02471     <span class="keywordtype">int</span> inp=0;
-<a name="l02472"></a>02472    
-<a name="l02473"></a>02473     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02474"></a>02474     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02475"></a>02475     cpl_image* i_img=NULL;
-<a name="l02476"></a>02476     cpl_image* o_img=NULL;
-<a name="l02477"></a>02477 
-<a name="l02478"></a>02478 
-<a name="l02479"></a>02479 
-<a name="l02480"></a>02480     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l02481"></a>02481     {
-<a name="l02482"></a>02482         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input cube given!\n"</span>) ;
-<a name="l02483"></a>02483         <span class="keywordflow">return</span> NULL ;
-<a name="l02484"></a>02484     }
-<a name="l02485"></a>02485     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l02486"></a>02486     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l02487"></a>02487     inp=cpl_imagelist_get_size(cube);
-<a name="l02488"></a>02488 
-<a name="l02489"></a>02489     nn[1] = ilx ;
-<a name="l02490"></a>02490     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )
-<a name="l02491"></a>02491     {
-<a name="l02492"></a>02492         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!"</span>) ;
-<a name="l02493"></a>02493         <span class="keywordflow">return</span> NULL ;
-<a name="l02494"></a>02494     }
-<a name="l02495"></a>02495 
-<a name="l02496"></a>02496     returnCube = cpl_imagelist_duplicate( cube ) ;
-<a name="l02497"></a>02497 
-<a name="l02498"></a>02498     imsize = ily ;
-<a name="l02499"></a>02499     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )
-<a name="l02500"></a>02500     {
-<a name="l02501"></a>02501         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;
-<a name="l02502"></a>02502         <span class="keywordflow">return</span> NULL ;
-<a name="l02503"></a>02503     }
-<a name="l02504"></a>02504 
-<a name="l02505"></a>02505     data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(dcomplex)) ;
-<a name="l02506"></a>02506     corrected_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(dcomplex)) ;
-<a name="l02507"></a>02507 
-<a name="l02508"></a>02508     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02509"></a>02509     <span class="comment">/* loop over the image planes */</span>
-<a name="l02510"></a>02510     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02511"></a>02511     {
-<a name="l02512"></a>02512       i_img=cpl_imagelist_get(cube,z);
-<a name="l02513"></a>02513       pidata=cpl_image_get_data_float(i_img);
-<a name="l02514"></a>02514       o_img=cpl_imagelist_get(returnCube,z);
-<a name="l02515"></a>02515       podata=cpl_image_get_data_float(o_img);
-<a name="l02516"></a>02516         <span class="comment">/* consider one row at a time */</span>
-<a name="l02517"></a>02517         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )
-<a name="l02518"></a>02518         {
-<a name="l02519"></a>02519             blank_indicator = 1 ;
-<a name="l02520"></a>02520             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02521"></a>02521             {
-<a name="l02522"></a>02522                 <span class="comment">/* transfer the row data to a double sized array */</span>
-<a name="l02523"></a>02523                 row_data[col] = pidata[col+row*ilx] ;
-<a name="l02524"></a>02524         data[col].x = row_data[col] ;
-<a name="l02525"></a>02525         data[col].y = 0. ;
-<a name="l02526"></a>02526                 <span class="comment">/* if row contains a blank pixel proceed */</span>
-<a name="l02527"></a>02527                 <span class="keywordflow">if</span> ( isnan(row_data[col]) )
-<a name="l02528"></a>02528                 {
-<a name="l02529"></a>02529                     blank_indicator = 0 ; 
-<a name="l02530"></a>02530                 }
-<a name="l02531"></a>02531             }
-<a name="l02532"></a>02532 
-<a name="l02533"></a>02533             <span class="comment">/* if row contains a blank don't apply FFT but proceed */</span>
-<a name="l02534"></a>02534             <span class="keywordflow">if</span> ( blank_indicator == 0 )
-<a name="l02535"></a>02535             {
-<a name="l02536"></a>02536                 <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02537"></a>02537                 {
-<a name="l02538"></a>02538                     podata[col+row*ilx] = ZERO ;
-<a name="l02539"></a>02539                 }
-<a name="l02540"></a>02540                 continue ;
-<a name="l02541"></a>02541             }
-<a name="l02542"></a>02542            
-<a name="l02543"></a>02543             <span class="comment">/* FFT algorithm of eclipse */</span>
-<a name="l02544"></a>02544             sinfo_fftn( data, nn, 1, 1 ) ;
-<a name="l02545"></a>02545  
-<a name="l02546"></a>02546             <span class="comment">/* calculate the corrected phase shift for each frequency */</span>
-<a name="l02547"></a>02547             phi = 2*PI_NUMB/(float)ilx * correct_diff_dist[row] ;
-<a name="l02548"></a>02548             <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l02549"></a>02549             {
-<a name="l02550"></a>02550                 <span class="comment">/* positive frequencies */</span>
-<a name="l02551"></a>02551                 <span class="keywordflow">if</span> ( i <= ilx/2 )
-<a name="l02552"></a>02552                 {
-<a name="l02553"></a>02553                     <span class="comment">/* phase shift */</span>
-<a name="l02554"></a>02554                     pphi = phi * (float)(i) ;
-<a name="l02555"></a>02555                     <span class="comment">/* Euler factor */</span>
-<a name="l02556"></a>02556                     coph = cos ( pphi ) ;
-<a name="l02557"></a>02557                     siph = sin ( pphi ) ;
-<a name="l02558"></a>02558                 }
-<a name="l02559"></a>02559                 <span class="keywordflow">else</span> <span class="comment">/* negative frequencies */</span>
-<a name="l02560"></a>02560                 {
-<a name="l02561"></a>02561                     <span class="comment">/* phase shift */</span>
-<a name="l02562"></a>02562                     pphi = phi * (float)(i - ilx/2) ;
-<a name="l02563"></a>02563                     <span class="comment">/* Euler factor */</span>
-<a name="l02564"></a>02564                     coph = cos ( pphi ) ;
-<a name="l02565"></a>02565                     siph = sin ( pphi ) ;
-<a name="l02566"></a>02566                 }
-<a name="l02567"></a>02567 
-<a name="l02568"></a>02568                 <span class="comment">/* ------------------------------------------------------------</span>
-<a name="l02569"></a>02569 <span class="comment">                 * now calculate the shift in the pixel space by multiplying</span>
-<a name="l02570"></a>02570 <span class="comment">                 * the fourier transform by the Euler factor of the phase shift</span>
-<a name="l02571"></a>02571 <span class="comment">                 * and inverse fourier transforming.</span>
-<a name="l02572"></a>02572 <span class="comment">                 * used Fourier pair: h(x-x0) <==> H(k)*exp(2*pi*i*k*x0) </span>
-<a name="l02573"></a>02573 <span class="comment">                 */</span>
-<a name="l02574"></a>02574                 <span class="comment">/* calculate real part */</span>
-<a name="l02575"></a>02575                 corrected_data[i].x   = data[i].x * coph - data[i].y * siph ; 
-<a name="l02576"></a>02576                 <span class="comment">/* calculate imaginary part */</span>
-<a name="l02577"></a>02577                 corrected_data[i].y = data[i].x * siph + data[i].y * coph ;
-<a name="l02578"></a>02578             }
-<a name="l02579"></a>02579  
-<a name="l02580"></a>02580             <span class="comment">/* transform back: inverse FFT */</span>
-<a name="l02581"></a>02581             sinfo_fftn( corrected_data, nn, 1, -1 ) ;
-<a name="l02582"></a>02582 
-<a name="l02583"></a>02583             <span class="comment">/* normalize */</span> 
-<a name="l02584"></a>02584             <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l02585"></a>02585             {
-<a name="l02586"></a>02586                 corrected_data[i].x /= ilx ;
-<a name="l02587"></a>02587         corrected_data[i].y /= ilx ;
-<a name="l02588"></a>02588             } 
-<a name="l02589"></a>02589 
-<a name="l02590"></a>02590             <span class="comment">/* now transfer row to output, leave the left-most </span>
-<a name="l02591"></a>02591 <span class="comment">               and right-most pixel column */</span>
-<a name="l02592"></a>02592             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02593"></a>02593             {
-<a name="l02594"></a>02594                 <span class="keywordflow">if</span> ( col == 0 )
-<a name="l02595"></a>02595                 {
-<a name="l02596"></a>02596                     podata[col+row*ilx] = ZERO ;
-<a name="l02597"></a>02597                 }
-<a name="l02598"></a>02598                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )
-<a name="l02599"></a>02599                 {
-<a name="l02600"></a>02600                     podata[col+row*ilx] = ZERO ;
-<a name="l02601"></a>02601                 }
-<a name="l02602"></a>02602                 <span class="keywordflow">else</span>
-<a name="l02603"></a>02603                 {
-<a name="l02604"></a>02604                     podata[col+row*ilx] = corrected_data[col].x ; 
-<a name="l02605"></a>02605                 }
-<a name="l02606"></a>02606             }
-<a name="l02607"></a>02607         }
-<a name="l02608"></a>02608     }
-<a name="l02609"></a>02609 
-<a name="l02610"></a>02610     cpl_free(data) ;
-<a name="l02611"></a>02611     cpl_free(corrected_data) ;
-<a name="l02612"></a>02612 
-<a name="l02613"></a>02613 
-<a name="l02614"></a>02614     cpl_free(row_data);
-<a name="l02615"></a>02615     <span class="keywordflow">return</span> returnCube ;
-<a name="l02616"></a>02616 }
-<a name="l02644"></a>02644 cpl_imagelist * sinfo_new_fine_tune_cube_by_spline ( cpl_imagelist * cube,
-<a name="l02645"></a>02645                                                <span class="keywordtype">float</span>   * correct_diff_dist )
-<a name="l02646"></a>02646 {
-<a name="l02647"></a>02647     cpl_imagelist * returnCube ;
-<a name="l02648"></a>02648 
-<a name="l02649"></a>02649     <span class="keywordtype">float</span>* row_data=NULL ;
-<a name="l02650"></a>02650     <span class="keywordtype">float</span>* corrected_row_data=NULL ;
-<a name="l02651"></a>02651     <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l02652"></a>02652     <span class="keywordtype">float</span>* eval=NULL ;
-<a name="l02653"></a>02653 
-<a name="l02654"></a>02654     <span class="keywordtype">float</span> sum, new_sum ;
-<a name="l02655"></a>02655     <span class="keywordtype">int</span> row, col ;
-<a name="l02656"></a>02656     <span class="keywordtype">int</span> i, z ;
-<a name="l02657"></a>02657     <span class="keywordtype">int</span> imsize ;
-<a name="l02658"></a>02658     <span class="keywordtype">int</span> ilx=0;
-<a name="l02659"></a>02659     <span class="keywordtype">int</span> ily=0;
-<a name="l02660"></a>02660     <span class="keywordtype">int</span> inp=0;
-<a name="l02661"></a>02661    
-<a name="l02662"></a>02662     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02663"></a>02663     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02664"></a>02664     cpl_image* i_img=NULL;
-<a name="l02665"></a>02665     cpl_image* o_img=NULL;
-<a name="l02666"></a>02666 
-<a name="l02667"></a>02667  
-<a name="l02668"></a>02668     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l02669"></a>02669     {
-<a name="l02670"></a>02670         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;
-<a name="l02671"></a>02671         <span class="keywordflow">return</span> NULL ;
-<a name="l02672"></a>02672     }
-<a name="l02673"></a>02673     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l02674"></a>02674     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l02675"></a>02675     inp=cpl_imagelist_get_size(cube);
-<a name="l02676"></a>02676 
-<a name="l02677"></a>02677     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )
-<a name="l02678"></a>02678     {
-<a name="l02679"></a>02679         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!/n"</span>) ;
-<a name="l02680"></a>02680         <span class="keywordflow">return</span> NULL ;
-<a name="l02681"></a>02681     }
-<a name="l02682"></a>02682   
-<a name="l02683"></a>02683     imsize = ily ;
-<a name="l02684"></a>02684     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )
-<a name="l02685"></a>02685     {
-<a name="l02686"></a>02686         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;
-<a name="l02687"></a>02687         <span class="keywordflow">return</span> NULL ;
-<a name="l02688"></a>02688     }
-<a name="l02689"></a>02689   
-<a name="l02690"></a>02690     returnCube = cpl_imagelist_duplicate( cube ) ;
-<a name="l02691"></a>02691 
-<a name="l02692"></a>02692     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02693"></a>02693     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02694"></a>02694     xnum=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02695"></a>02695     eval=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02696"></a>02696   
-<a name="l02697"></a>02697     <span class="comment">/* fill the xa[] array for a polynomial interpolation */</span>
-<a name="l02698"></a>02698     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l02699"></a>02699     {
-<a name="l02700"></a>02700         xnum[i] = i ;
-<a name="l02701"></a>02701     }    
-<a name="l02702"></a>02702 
-<a name="l02703"></a>02703     <span class="comment">/* loop over the image planes */</span>
-<a name="l02704"></a>02704     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02705"></a>02705     {
-<a name="l02706"></a>02706       i_img=cpl_imagelist_get(cube,z);
-<a name="l02707"></a>02707       pidata=cpl_image_get_data_float(i_img);
-<a name="l02708"></a>02708       o_img=cpl_imagelist_get(returnCube,z);
-<a name="l02709"></a>02709       podata=cpl_image_get_data_float(o_img);
-<a name="l02710"></a>02710         <span class="comment">/* consider 1 row at a time */</span>
-<a name="l02711"></a>02711         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )
-<a name="l02712"></a>02712         {
-<a name="l02713"></a>02713             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02714"></a>02714             {
-<a name="l02715"></a>02715                 corrected_row_data[col] = 0. ;
-<a name="l02716"></a>02716             }
-<a name="l02717"></a>02717         sum = 0. ; <span class="comment">/* initialize flux for later rescaling */</span>
-<a name="l02718"></a>02718             <span class="comment">/* go through the columns and compute the flux for each </span>
-<a name="l02719"></a>02719 <span class="comment">               row (leave the sinfo_edge points) */</span>
-<a name="l02720"></a>02720             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02721"></a>02721             {   
-<a name="l02722"></a>02722             eval[col] = correct_diff_dist[row] + (float)col ;
-<a name="l02723"></a>02723                 row_data[col] = pidata[col+row*ilx] ;
-<a name="l02724"></a>02724                 <span class="keywordflow">if</span> (col != 0 && col != ilx - 1 && !isnan(row_data[col]) )
-<a name="l02725"></a>02725                 {
-<a name="l02726"></a>02726                     sum += row_data[col] ;
-<a name="l02727"></a>02727                 }
-<a name="l02728"></a>02728                 <span class="keywordflow">if</span> (isnan(row_data[col]) )
-<a name="l02729"></a>02729                 {
-<a name="l02730"></a>02730                     <span class="keywordflow">for</span> ( i = col -1 ; i <= col+1 ; i++ ) 
-<a name="l02731"></a>02731                     {
-<a name="l02732"></a>02732                         <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l02733"></a>02733                         <span class="keywordflow">if</span> ( i >= ilx ) continue ;
-<a name="l02734"></a>02734                         corrected_row_data[i] = ZERO ; 
-<a name="l02735"></a>02735                     }
-<a name="l02736"></a>02736                     row_data[col] = 0. ;
-<a name="l02737"></a>02737                 }
-<a name="l02738"></a>02738         }
-<a name="l02739"></a>02739 
-<a name="l02740"></a>02740 
-<a name="l02741"></a>02741             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l02742"></a>02742 <span class="comment">             * now we do the cubic spline interpolation to achieve the </span>
-<a name="l02743"></a>02743 <span class="comment">               fractional (see eclipse).</span>
-<a name="l02744"></a>02744 <span class="comment">             */</span>
-<a name="l02745"></a>02745             <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,row_data, ilx, 
-<a name="l02746"></a>02746                                                        eval,corrected_row_data,
-<a name="l02747"></a>02747                                                        ilx ) )
-<a name="l02748"></a>02748         {
-<a name="l02749"></a>02749             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation\n"</span>) ;
-<a name="l02750"></a>02750         cpl_imagelist_delete(returnCube) ;
-<a name="l02751"></a>02751         <span class="keywordflow">return</span> NULL ;
-<a name="l02752"></a>02752         }    
-<a name="l02753"></a>02753 
-<a name="l02754"></a>02754             new_sum = 0. ;
-<a name="l02755"></a>02755             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02756"></a>02756             {
-<a name="l02757"></a>02757                 <span class="keywordflow">if</span> (isnan(corrected_row_data[col])) continue ;
-<a name="l02758"></a>02758                 <span class="comment">/* don't take the sinfo_edge points to calculate </span>
-<a name="l02759"></a>02759 <span class="comment">                   the scaling factor */</span>
-<a name="l02760"></a>02760                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )
-<a name="l02761"></a>02761                 {
-<a name="l02762"></a>02762                     new_sum += corrected_row_data[col] ;
-<a name="l02763"></a>02763                 }
-<a name="l02764"></a>02764             }
-<a name="l02765"></a>02765             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02766"></a>02766             {
-<a name="l02767"></a>02767                 <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l02768"></a>02768 <span class="comment">                 * rescale the row data and fill the returned cube, </span>
-<a name="l02769"></a>02769 <span class="comment">                 * leave the left-most and right-most</span>
-<a name="l02770"></a>02770 <span class="comment">                 * pixel column </span>
-<a name="l02771"></a>02771 <span class="comment">                 */</span>
-<a name="l02772"></a>02772                 <span class="keywordflow">if</span> ( col == 0 )
-<a name="l02773"></a>02773                 {
-<a name="l02774"></a>02774                     podata[col+row*ilx] = ZERO ;
-<a name="l02775"></a>02775                 }
-<a name="l02776"></a>02776                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )
-<a name="l02777"></a>02777                 {
-<a name="l02778"></a>02778                     podata[col+row*ilx] = ZERO ;
-<a name="l02779"></a>02779                 }
-<a name="l02780"></a>02780                 <span class="keywordflow">else</span>
-<a name="l02781"></a>02781                 {
-<a name="l02782"></a>02782                     <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) ) 
-<a name="l02783"></a>02783                     {
-<a name="l02784"></a>02784                         podata[col+row*ilx] = ZERO ;
-<a name="l02785"></a>02785                     }
-<a name="l02786"></a>02786                     <span class="keywordflow">else</span>
-<a name="l02787"></a>02787                     {
-<a name="l02788"></a>02788                         <span class="keywordflow">if</span> (new_sum == 0.) new_sum = 1. ;
-<a name="l02789"></a>02789                      <span class="comment">/* rescaling is commented out because it delivers </span>
-<a name="l02790"></a>02790 <span class="comment">                        wrong results</span>
-<a name="l02791"></a>02791 <span class="comment">                        in case of appearance of blanks or bad pixels */</span>
-<a name="l02792"></a>02792                   <span class="comment">/*       corrected_row_data[col] *= sum / new_sum ; */</span>
-<a name="l02793"></a>02793                         podata[col+row*ilx] = corrected_row_data[col] ;
-<a name="l02794"></a>02794                     }
-<a name="l02795"></a>02795                 }
-<a name="l02796"></a>02796             }
-<a name="l02797"></a>02797         }
-<a name="l02798"></a>02798     }       
-<a name="l02799"></a>02799 
-<a name="l02800"></a>02800     cpl_free(row_data) ;
-<a name="l02801"></a>02801     cpl_free(corrected_row_data) ;
-<a name="l02802"></a>02802     cpl_free(xnum) ;
-<a name="l02803"></a>02803     cpl_free(eval) ;
-<a name="l02804"></a>02804 
-<a name="l02805"></a>02805     <span class="keywordflow">return</span> returnCube ;
-<a name="l02806"></a>02806 }
-<a name="l02807"></a>02807 
-<a name="l02829"></a>02829 <span class="keywordtype">float</span> * 
-<a name="l02830"></a>02830 sinfo_new_calibrate_ns_test( cpl_image * ns_image,
-<a name="l02831"></a>02831                            <span class="keywordtype">int</span>        n_slitlets,
-<a name="l02832"></a>02832                            <span class="keywordtype">int</span>        halfWidth,
-<a name="l02833"></a>02833                            <span class="keywordtype">float</span>      fwhm,
-<a name="l02834"></a>02834                            <span class="keywordtype">float</span>      minDiff,
-<a name="l02835"></a>02835                            <span class="keywordtype">float</span>      estimated_dist,
-<a name="l02836"></a>02836                            <span class="keywordtype">float</span>      devtol,
-<a name="l02837"></a>02837                <span class="keywordtype">int</span>        bottom,
-<a name="l02838"></a>02838                <span class="keywordtype">int</span>        top )
-<a name="l02839"></a>02839 {
-<a name="l02840"></a>02840     <span class="keywordtype">int</span> i, j, k, m, row, col, n, ni, na ;
-<a name="l02841"></a>02841     <span class="keywordtype">int</span> position, counter, iters ;
-<a name="l02842"></a>02842     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;
-<a name="l02843"></a>02843     <span class="keywordtype">float</span> sum, mean, maxval ;
-<a name="l02844"></a>02844     <span class="keywordtype">float</span> tol, lab ;
-<a name="l02845"></a>02845     <span class="keywordtype">float</span> * distances ;
-<a name="l02846"></a>02846     <span class="keywordtype">float</span> * ret_distances ;
-<a name="l02847"></a>02847 
-<a name="l02848"></a>02848     <span class="keywordtype">float</span> * xdat, * wdat ;
-<a name="l02849"></a>02849     <span class="keywordtype">int</span> * mpar ;
-<a name="l02850"></a>02850 
-<a name="l02851"></a>02851     pixelvalue* row_buf=NULL ;
-<a name="l02852"></a>02852     <span class="keywordtype">float</span>** distances_buf=NULL ;
-<a name="l02853"></a>02853     <span class="keywordtype">float</span>* x_position=NULL ;
-<a name="l02854"></a>02854     <span class="keywordtype">int</span>* found=NULL;
-<a name="l02855"></a>02855     <span class="keywordtype">int</span>* found_clean=NULL ;
-<a name="l02856"></a>02856     <span class="keywordtype">int</span>* found_cleanit=NULL ;
-<a name="l02857"></a>02857 
-<a name="l02858"></a>02858     Vector * line ;
-<a name="l02859"></a>02859     FitParams ** par ;
-<a name="l02860"></a>02860     <span class="keywordtype">int</span> foundit, begin, end ;
-<a name="l02861"></a>02861     <span class="keywordtype">int</span> zeroindicator ;
-<a name="l02862"></a>02862     <span class="keywordtype">int</span> row_index ;
-<a name="l02863"></a>02863 
-<a name="l02864"></a>02864     <span class="keywordtype">int</span> ilx=0;
-<a name="l02865"></a>02865     <span class="keywordtype">int</span> ily=0;
-<a name="l02866"></a>02866     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02867"></a>02867 
-<a name="l02868"></a>02868     <span class="keywordflow">if</span> ( ns_image == NULL )
-<a name="l02869"></a>02869     {
-<a name="l02870"></a>02870         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given\n"</span>) ;
-<a name="l02871"></a>02871         <span class="keywordflow">return</span> NULL ;
-<a name="l02872"></a>02872     }
-<a name="l02873"></a>02873     <span class="keywordflow">if</span> ( n_slitlets < 1 )
-<a name="l02874"></a>02874     {
-<a name="l02875"></a>02875         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of slitlets given\n"</span>) ;
-<a name="l02876"></a>02876         <span class="keywordflow">return</span> NULL ;
-<a name="l02877"></a>02877     }
-<a name="l02878"></a>02878     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth >= estimated_dist )
-<a name="l02879"></a>02879     {
-<a name="l02880"></a>02880         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong half width given\n"</span>) ;
-<a name="l02881"></a>02881         <span class="keywordflow">return</span> NULL ;
-<a name="l02882"></a>02882     }
-<a name="l02883"></a>02883     <span class="keywordflow">if</span> ( fwhm <= 0. )
-<a name="l02884"></a>02884     {
-<a name="l02885"></a>02885         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fwhm given\n"</span>) ;
-<a name="l02886"></a>02886         <span class="keywordflow">return</span> NULL ;
-<a name="l02887"></a>02887     }
-<a name="l02888"></a>02888     <span class="keywordflow">if</span> ( minDiff < 1. )
-<a name="l02889"></a>02889     {
-<a name="l02890"></a>02890         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong minDiff given\n"</span>) ;
-<a name="l02891"></a>02891         <span class="keywordflow">return</span> NULL ;
-<a name="l02892"></a>02892     }
-<a name="l02893"></a>02893 
-<a name="l02894"></a>02894     <span class="comment">/* allocate memory for output array */</span>
-<a name="l02895"></a>02895     <span class="keywordflow">if</span> (NULL==(distances=(<span class="keywordtype">float</span> *)cpl_calloc( n_slitlets , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) 
-<a name="l02896"></a>02896     {
-<a name="l02897"></a>02897         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;
-<a name="l02898"></a>02898         <span class="keywordflow">return</span> NULL ;
-<a name="l02899"></a>02899     }
-<a name="l02900"></a>02900     <span class="comment">/* allocate memory for output array */</span>
-<a name="l02901"></a>02901     <span class="keywordflow">if</span> (NULL == (ret_distances = (<span class="keywordtype">float</span> *) cpl_calloc ( n_slitlets , 
-<a name="l02902"></a>02902                                            <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) 
-<a name="l02903"></a>02903     {
-<a name="l02904"></a>02904         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;
-<a name="l02905"></a>02905         <span class="keywordflow">return</span> NULL ;
-<a name="l02906"></a>02906     }
-<a name="l02907"></a>02907 
-<a name="l02908"></a>02908     ilx=cpl_image_get_size_x(ns_image);
-<a name="l02909"></a>02909     ily=cpl_image_get_size_y(ns_image);
-<a name="l02910"></a>02910     pidata=cpl_image_get_data_float(ns_image);
-<a name="l02911"></a>02911 
-<a name="l02912"></a>02912     row_buf=(pixelvalue*)cpl_calloc(ilx,<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l02913"></a>02913     x_position=cpl_calloc(n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02914"></a>02914     found=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l02915"></a>02915     found_clean=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02916"></a>02916     found_cleanit=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02917"></a>02917     distances_buf=sinfo_new_2Dfloatarray(ily,n_slitlets) ;
-<a name="l02918"></a>02918 
-<a name="l02919"></a>02919     <span class="comment">/* go through the image rows */</span>
-<a name="l02920"></a>02920     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02921"></a>02921     {
-<a name="l02922"></a>02922         zeroindicator = 0 ;
-<a name="l02923"></a>02923 
-<a name="l02924"></a>02924         <span class="comment">/* initialize the distance buffer */</span>
-<a name="l02925"></a>02925         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )
-<a name="l02926"></a>02926         {
-<a name="l02927"></a>02927             distances_buf[row][i] = ZERO ;
-<a name="l02928"></a>02928         }
-<a name="l02929"></a>02929 
-<a name="l02930"></a>02930         <span class="comment">/* fill the row buffer array with image data */</span>
-<a name="l02931"></a>02931         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02932"></a>02932         {
-<a name="l02933"></a>02933             row_buf[col] = pidata[col + row*ilx] ;
-<a name="l02934"></a>02934         }
-<a name="l02935"></a>02935 
-<a name="l02936"></a>02936         <span class="comment">/* determine the mean of the row data */</span>
-<a name="l02937"></a>02937         sum = 0. ;
-<a name="l02938"></a>02938         n = 0 ;
-<a name="l02939"></a>02939         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l02940"></a>02940         {
-<a name="l02941"></a>02941             <span class="keywordflow">if</span> ( isnan(row_buf[i]) )
-<a name="l02942"></a>02942             {
-<a name="l02943"></a>02943                 continue ;
-<a name="l02944"></a>02944             }
-<a name="l02945"></a>02945             sum += row_buf[i] ;
-<a name="l02946"></a>02946             n++ ;
-<a name="l02947"></a>02947         }
-<a name="l02948"></a>02948         mean = sum / (float)n ;
-<a name="l02949"></a>02949 
-<a name="l02950"></a>02950         <span class="comment">/* store the positions of image values greater than the mean */</span>
-<a name="l02951"></a>02951         n = 0 ;
-<a name="l02952"></a>02952         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l02953"></a>02953         {
-<a name="l02954"></a>02954             <span class="keywordflow">if</span> (isnan(row_buf[i]))
-<a name="l02955"></a>02955             {
-<a name="l02956"></a>02956                 continue ;
-<a name="l02957"></a>02957             }
-<a name="l02958"></a>02958             <span class="keywordflow">if</span> ( row_buf[i] > mean + ESTIMATE )
-<a name="l02959"></a>02959             {
-<a name="l02960"></a>02960                 found[n] = i ;
-<a name="l02961"></a>02961                 n++ ;
-<a name="l02962"></a>02962             }
-<a name="l02963"></a>02963         }
-<a name="l02964"></a>02964        
-<a name="l02965"></a>02965         <span class="keywordflow">if</span> ( n < n_slitlets )
-<a name="l02966"></a>02966         {
-<a name="l02967"></a>02967             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t4 wrong number of intensity columns "</span>
-<a name="l02968"></a>02968                               <span class="stringliteral">"found in row: %d, found number: %d"</span>, row, n) ;
-<a name="l02969"></a>02969             continue ;
-<a name="l02970"></a>02970         }
-<a name="l02971"></a>02971         <span class="keywordflow">else</span>
-<a name="l02972"></a>02972         { 
-<a name="l02973"></a>02973             <span class="comment">/* find the maximum value position around the found columns */</span>
-<a name="l02974"></a>02974             na = 0 ;
-<a name="l02975"></a>02975             <span class="keywordflow">for</span> ( i = 1 ; i < n ; i ++ )
-<a name="l02976"></a>02976             {
-<a name="l02977"></a>02977                 <span class="keywordflow">if</span> ( found[i] - found[i-1] < halfWidth )
-<a name="l02978"></a>02978                 {
-<a name="l02979"></a>02979                     begin = found[i] - halfWidth ;
-<a name="l02980"></a>02980                     <span class="keywordflow">if</span> ( begin < 0 )
-<a name="l02981"></a>02981                     {
-<a name="l02982"></a>02982                         begin = 0 ;
-<a name="l02983"></a>02983                     }
-<a name="l02984"></a>02984                     end = found[i] + halfWidth ;
-<a name="l02985"></a>02985                     <span class="keywordflow">if</span> ( end >= ilx )
-<a name="l02986"></a>02986                     {
-<a name="l02987"></a>02987                         end = ilx - 1 ;
-<a name="l02988"></a>02988                     }
-<a name="l02989"></a>02989                     <span class="comment">/* find the maximum value inside the box around </span>
-<a name="l02990"></a>02990 <span class="comment">                       the found positions*/</span>
-<a name="l02991"></a>02991                     maxval = -FLT_MAX ;
-<a name="l02992"></a>02992                     foundit = 0 ;
-<a name="l02993"></a>02993                     <span class="keywordflow">for</span> ( j = begin ; j <= end ; j++ )
-<a name="l02994"></a>02994                     {
-<a name="l02995"></a>02995                         <span class="comment">/* do not consider boxes that contain bad pixels */</span>
-<a name="l02996"></a>02996                         <span class="keywordflow">if</span> (isnan(row_buf[j]))
-<a name="l02997"></a>02997                         {
-<a name="l02998"></a>02998                             continue ;
-<a name="l02999"></a>02999                         }
-<a name="l03000"></a>03000                         <span class="keywordflow">if</span> (row_buf[j] >= maxval )
-<a name="l03001"></a>03001                         {
-<a name="l03002"></a>03002                             maxval = row_buf[j] ;
-<a name="l03003"></a>03003                             foundit = j ;
-<a name="l03004"></a>03004                         }
-<a name="l03005"></a>03005                     }
-<a name="l03006"></a>03006                     <span class="keywordflow">if</span> (maxval == -FLT_MAX)
-<a name="l03007"></a>03007                     {
-<a name="l03008"></a>03008                         continue ;
-<a name="l03009"></a>03009                     }
-<a name="l03010"></a>03010                     <span class="keywordflow">for</span> ( k = 0 ; k < na ; k++ )
-<a name="l03011"></a>03011                     {
-<a name="l03012"></a>03012                         <span class="keywordflow">if</span> ( found_cleanit[k] >= begin && 
-<a name="l03013"></a>03013                              found_cleanit[k] < foundit )
-<a name="l03014"></a>03014                         {
-<a name="l03015"></a>03015                             na-- ;
-<a name="l03016"></a>03016                         }
-<a name="l03017"></a>03017                     }
-<a name="l03018"></a>03018                     <span class="keywordflow">for</span> ( k = 0 ; k < n ; k++ )
-<a name="l03019"></a>03019                     {
-<a name="l03020"></a>03020                         <span class="keywordflow">if</span> ( found[k] == foundit)
-<a name="l03021"></a>03021                         {
-<a name="l03022"></a>03022                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[k] )
-<a name="l03023"></a>03023                             {
-<a name="l03024"></a>03024                                 found_cleanit[na] = found[k] ;
-<a name="l03025"></a>03025                                 na++ ;
-<a name="l03026"></a>03026                             }
-<a name="l03027"></a>03027                         }
-<a name="l03028"></a>03028                     }
-<a name="l03029"></a>03029                 }
-<a name="l03030"></a>03030                 <span class="keywordflow">else</span>
-<a name="l03031"></a>03031                 {
-<a name="l03032"></a>03032                     <span class="keywordflow">if</span> ( i == 1 )
-<a name="l03033"></a>03033                     {
-<a name="l03034"></a>03034                         found_cleanit[na] = found[0] ;
-<a name="l03035"></a>03035                         na++ ;
-<a name="l03036"></a>03036                         found_cleanit[na] = found[1] ;
-<a name="l03037"></a>03037                         na++ ;
-<a name="l03038"></a>03038                     }
-<a name="l03039"></a>03039                     <span class="keywordflow">else</span>
-<a name="l03040"></a>03040                     {
-<a name="l03041"></a>03041                         <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i-1])
-<a name="l03042"></a>03042                         {
-<a name="l03043"></a>03043                             found_cleanit[na] = found[i-1] ;
-<a name="l03044"></a>03044                             na++ ;
-<a name="l03045"></a>03045                         }
-<a name="l03046"></a>03046                         <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i])
-<a name="l03047"></a>03047                         {
-<a name="l03048"></a>03048                             found_cleanit[na] = found[i] ;
-<a name="l03049"></a>03049                             na++ ;
-<a name="l03050"></a>03050                         }
-<a name="l03051"></a>03051                     }
-<a name="l03052"></a>03052                 }
-<a name="l03053"></a>03053             }
-<a name="l03054"></a>03054 
-<a name="l03055"></a>03055             <span class="comment">/* determine only one pixel position for each slitlet intensity */</span>
-<a name="l03056"></a>03056             j = 1 ;
-<a name="l03057"></a>03057             <span class="keywordflow">for</span> ( i = 1 ; i < na ; i++ )
-<a name="l03058"></a>03058             {
-<a name="l03059"></a>03059                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) < 
-<a name="l03060"></a>03060                              (estimated_dist - devtol) ||
-<a name="l03061"></a>03061                      (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) > 
-<a name="l03062"></a>03062                              (estimated_dist + devtol) )
-<a name="l03063"></a>03063                 {
-<a name="l03064"></a>03064                     continue ;
-<a name="l03065"></a>03065                 }
-<a name="l03066"></a>03066                 <span class="keywordflow">else</span>
-<a name="l03067"></a>03067                 {
-<a name="l03068"></a>03068                     found_clean[j-1] = found_cleanit[i-1] ;
-<a name="l03069"></a>03069                     found_clean[j]   = found_cleanit[i] ;
-<a name="l03070"></a>03070                     j++ ;
-<a name="l03071"></a>03071                 }
-<a name="l03072"></a>03072             }
-<a name="l03073"></a>03073         }
-<a name="l03074"></a>03074         <span class="keywordflow">if</span> ( j > n_slitlets )
-<a name="l03075"></a>03075         {
-<a name="l03076"></a>03076             <span class="comment">/* check the distance again */</span>
-<a name="l03077"></a>03077             ni = 1 ;
-<a name="l03078"></a>03078             <span class="keywordflow">for</span> ( i = 1 ; i < j ; i++ )
-<a name="l03079"></a>03079             {
-<a name="l03080"></a>03080                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) < 
-<a name="l03081"></a>03081                             (estimated_dist - devtol ) ||
-<a name="l03082"></a>03082                      (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) > 
-<a name="l03083"></a>03083                             (estimated_dist + devtol ) )
-<a name="l03084"></a>03084                 { 
-<a name="l03085"></a>03085                     continue ;
-<a name="l03086"></a>03086                 }
-<a name="l03087"></a>03087                 <span class="keywordflow">else</span>
-<a name="l03088"></a>03088                 {
-<a name="l03089"></a>03089                     found_clean[ni-1] = found_clean[i-1] ;
-<a name="l03090"></a>03090                     found_clean[ni]   = found_clean[i] ;
-<a name="l03091"></a>03091                     ni++ ;
-<a name="l03092"></a>03092                 }
-<a name="l03093"></a>03093             }
-<a name="l03094"></a>03094             <span class="keywordflow">if</span> ( ni != n_slitlets )
-<a name="l03095"></a>03095             {
-<a name="l03096"></a>03096                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t5 wrong number of intensity columns "</span>
-<a name="l03097"></a>03097                                   <span class="stringliteral">"found in row: %d, found number: %d"</span>,
-<a name="l03098"></a>03098                                   row,ni) ;
-<a name="l03099"></a>03099                 continue ;
-<a name="l03100"></a>03100             }
-<a name="l03101"></a>03101             <span class="keywordflow">else</span> 
-<a name="l03102"></a>03102             {
-<a name="l03103"></a>03103                 j = ni ;
-<a name="l03104"></a>03104             }
-<a name="l03105"></a>03105         }
-<a name="l03106"></a>03106         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < n_slitlets )
-<a name="l03107"></a>03107         {
-<a name="l03108"></a>03108             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t6 wrong number of intensity columns found "</span>
-<a name="l03109"></a>03109                               <span class="stringliteral">"in row: %d , found number: %d\n"</span>, row, j) ;
-<a name="l03110"></a>03110             continue ;
-<a name="l03111"></a>03111         }
-<a name="l03112"></a>03112         counter = 0 ;
-<a name="l03113"></a>03113         <span class="comment">/* go through the found intensity pixels in one row */</span>
-<a name="l03114"></a>03114         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l03115"></a>03115         {
-<a name="l03116"></a>03116             <span class="comment">/* allocate memory for the array where the line is fitted in */</span>
-<a name="l03117"></a>03117             <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*halfWidth + 1)) )
-<a name="l03118"></a>03118             {
-<a name="l03119"></a>03119                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;
-<a name="l03120"></a>03120                 cpl_free(distances) ;
-<a name="l03121"></a>03121                 <span class="keywordflow">return</span> NULL ;
-<a name="l03122"></a>03122             }
-<a name="l03123"></a>03123 
-<a name="l03124"></a>03124             <span class="comment">/* allocate memory */</span>
-<a name="l03125"></a>03125             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l03126"></a>03126             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l03127"></a>03127             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l03128"></a>03128             par = sinfo_new_fit_params(1) ;
-<a name="l03129"></a>03129 
-<a name="l03130"></a>03130             m = 0 ;
-<a name="l03131"></a>03131             <span class="keywordflow">for</span> ( k = found_clean[i]-halfWidth ; 
-<a name="l03132"></a>03132                   k <= found_clean[i]+halfWidth ; k++ )
-<a name="l03133"></a>03133             {
-<a name="l03134"></a>03134                 <span class="keywordflow">if</span> ( k < 0 )
-<a name="l03135"></a>03135                 {
-<a name="l03136"></a>03136                     k = 0. ;
-<a name="l03137"></a>03137                 }
-<a name="l03138"></a>03138                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( k >= ilx )
-<a name="l03139"></a>03139                 {
-<a name="l03140"></a>03140                     k = ilx - 1 ;
-<a name="l03141"></a>03141                 }
-<a name="l03142"></a>03142                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(row_buf[k]) )
-<a name="l03143"></a>03143                 {
-<a name="l03144"></a>03144                     zeroindicator = 1 ;
-<a name="l03145"></a>03145                     break ;
-<a name="l03146"></a>03146                 }
-<a name="l03147"></a>03147                 <span class="keywordflow">else</span>
-<a name="l03148"></a>03148                 {
-<a name="l03149"></a>03149                     line -> data[m] = row_buf[k] ;
-<a name="l03150"></a>03150                     m++ ;
-<a name="l03151"></a>03151                 }
-<a name="l03152"></a>03152             }
-<a name="l03153"></a>03153             <span class="keywordflow">if</span> ( zeroindicator == 1 )
-<a name="l03154"></a>03154             {
-<a name="l03155"></a>03155                 sinfo_new_destroy_vector(line) ;
-<a name="l03156"></a>03156                 cpl_free(xdat) ;
-<a name="l03157"></a>03157                 cpl_free(wdat) ;
-<a name="l03158"></a>03158                 cpl_free(mpar) ;
-<a name="l03159"></a>03159                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l03160"></a>03160                 break ;
-<a name="l03161"></a>03161             }
-<a name="l03162"></a>03162 
-<a name="l03163"></a>03163             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l03164"></a>03164 <span class="comment">             * go through the spectral sinfo_vector</span>
-<a name="l03165"></a>03165 <span class="comment">             * determine the maximum pixel value in the spectral sinfo_vector</span>
-<a name="l03166"></a>03166 <span class="comment">             */</span>
-<a name="l03167"></a>03167             maxval = -FLT_MAX ;
-<a name="l03168"></a>03168             position = -INT32_MAX ;
-<a name="l03169"></a>03169             <span class="keywordflow">for</span> ( k = 0 ; k < m ; k++ )
-<a name="l03170"></a>03170             {
-<a name="l03171"></a>03171                 xdat[k] = k ;
-<a name="l03172"></a>03172                 wdat[k] = 1.0 ;
-<a name="l03173"></a>03173                 <span class="keywordflow">if</span> ( line -> data[k] >= maxval )
-<a name="l03174"></a>03174                 {
-<a name="l03175"></a>03175                     maxval = line -> data[k] ;
-<a name="l03176"></a>03176                     position = k ;
-<a name="l03177"></a>03177                 }
-<a name="l03178"></a>03178             }
-<a name="l03179"></a>03179 
-<a name="l03180"></a>03180             <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l03181"></a>03181             xdim     = XDIM ;
-<a name="l03182"></a>03182             ndat     = line -> n_elements ;
-<a name="l03183"></a>03183             numpar   = MAXPAR ;
-<a name="l03184"></a>03184             tol      = TOL ;
-<a name="l03185"></a>03185             lab      = LAB ;
-<a name="l03186"></a>03186             its      = ITS ;
-<a name="l03187"></a>03187             (*par) -> fit_par[1] = fwhm ;
-<a name="l03188"></a>03188             (*par) -> fit_par[2] = (float) position ;
-<a name="l03189"></a>03189             (*par) -> fit_par[3] = (float) (line -> data[0] + 
-<a name="l03190"></a>03190                                     line -> data[line->n_elements - 1]) / 2.0 ;
-<a name="l03191"></a>03191             (*par) -> fit_par[0]  = maxval - ((*par) -> fit_par[3]) ;
-<a name="l03192"></a>03192 
-<a name="l03193"></a>03193 
-<a name="l03194"></a>03194             <span class="comment">/* exclude negative peaks and low signal cases */</span>
-<a name="l03195"></a>03195             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] < minDiff )
-<a name="l03196"></a>03196             {
-<a name="l03197"></a>03197                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, signal of line too low to fit "</span>
-<a name="l03198"></a>03198                                    <span class="stringliteral">"in row: %d in slitlet %d\n"</span>, row, i) ;
-<a name="l03199"></a>03199                 sinfo_new_destroy_vector(line) ;
-<a name="l03200"></a>03200                 cpl_free(xdat) ;
-<a name="l03201"></a>03201                 cpl_free(wdat) ;
-<a name="l03202"></a>03202                 cpl_free(mpar) ;
-<a name="l03203"></a>03203                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l03204"></a>03204                 continue ;
-<a name="l03205"></a>03205             }
-<a name="l03206"></a>03206 
-<a name="l03207"></a>03207             <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )
-<a name="l03208"></a>03208             {
-<a name="l03209"></a>03209                 (*par) -> derv_par[k] = 0.0 ;
-<a name="l03210"></a>03210                 mpar[k] = 1 ;
-<a name="l03211"></a>03211             }
-<a name="l03212"></a>03212             <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l03213"></a>03213             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c(xdat, &xdim, 
-<a name="l03214"></a>03214                                                   line -> data, wdat, 
-<a name="l03215"></a>03215                                                   &ndat, (*par) -> fit_par,
-<a name="l03216"></a>03216                                                   (*par) -> derv_par, mpar, 
-<a name="l03217"></a>03217                                                   &numpar, &tol, 
-<a name="l03218"></a>03218                                                   &its, &lab )) )
-<a name="l03219"></a>03219             {
-<a name="l03220"></a>03220           <span class="comment">/*</span>
-<a name="l03221"></a>03221 <span class="comment">               cpl_msg_debug ("sinfo_calibrate_ns_test:",</span>
-<a name="l03222"></a>03222 <span class="comment">                              "sinfo_lsqfit_c: least squares fit failed,"</span>
-<a name="l03223"></a>03223 <span class="comment">                              " error no.: %d in row: %d in slitlet %d\n", </span>
-<a name="l03224"></a>03224 <span class="comment">                              iters, row, i) ;</span>
-<a name="l03225"></a>03225 <span class="comment">          */</span>
-<a name="l03226"></a>03226                 sinfo_new_destroy_vector(line) ;
-<a name="l03227"></a>03227                 cpl_free(xdat) ;
-<a name="l03228"></a>03228                 cpl_free(wdat) ;
-<a name="l03229"></a>03229                 cpl_free(mpar) ;
-<a name="l03230"></a>03230                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l03231"></a>03231                 continue ;
-<a name="l03232"></a>03232             }
-<a name="l03233"></a>03233 
-<a name="l03234"></a>03234             <span class="comment">/* check for negative fit results */</span>
-<a name="l03235"></a>03235             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] <= 0. || (*par) -> fit_par[1] <= 0. ||
-<a name="l03236"></a>03236                  (*par) -> fit_par[2] < 0. )
-<a name="l03237"></a>03237             {
-<a name="l03238"></a>03238                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, not "</span>
-<a name="l03239"></a>03239                                    <span class="stringliteral">"used! in row %d in slitlet %d"</span>, row, i) ;
-<a name="l03240"></a>03240                 sinfo_new_destroy_vector(line) ;
-<a name="l03241"></a>03241                 cpl_free(xdat) ;
-<a name="l03242"></a>03242                 cpl_free(wdat) ;
-<a name="l03243"></a>03243                 cpl_free(mpar) ;
-<a name="l03244"></a>03244                 sinfo_new_destroy_fit_params(&par) ;
-<a name="l03245"></a>03245                 continue ;
-<a name="l03246"></a>03246             }
-<a name="l03247"></a>03247 
-<a name="l03248"></a>03248             <span class="comment">/* correct the fitted position for the given row of the line </span>
-<a name="l03249"></a>03249 <span class="comment">               in image coordinates */</span>
-<a name="l03250"></a>03250             (*par) -> fit_par[2] =  (float) (found_clean[i] - halfWidth) + 
-<a name="l03251"></a>03251                                     (*par) -> fit_par[2] ;
-<a name="l03252"></a>03252             x_position[counter] = (*par) -> fit_par[2] ;
-<a name="l03253"></a>03253             counter ++ ;
-<a name="l03254"></a>03254 
-<a name="l03255"></a>03255             <span class="comment">/* free memory */</span>
-<a name="l03256"></a>03256             sinfo_new_destroy_fit_params(&par) ;
-<a name="l03257"></a>03257             sinfo_new_destroy_vector ( line ) ;
-<a name="l03258"></a>03258             cpl_free ( xdat ) ;
-<a name="l03259"></a>03259             cpl_free ( wdat ) ;
-<a name="l03260"></a>03260             cpl_free ( mpar ) ;
-<a name="l03261"></a>03261         }
-<a name="l03262"></a>03262         <span class="keywordflow">if</span> (zeroindicator == 1)
-<a name="l03263"></a>03263         {
-<a name="l03264"></a>03264             <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"bad pixel in fitting box in row: %d\n"</span>, row) ;
-<a name="l03265"></a>03265             continue ;
-<a name="l03266"></a>03266         }
-<a name="l03267"></a>03267 
-<a name="l03268"></a>03268         <span class="keywordflow">if</span> ( counter != n_slitlets )
-<a name="l03269"></a>03269         {
-<a name="l03270"></a>03270             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong number of slitlets found "</span>
-<a name="l03271"></a>03271                               <span class="stringliteral">"in row: %d"</span>, row) ;
-<a name="l03272"></a>03272             continue ;
-<a name="l03273"></a>03273         }
-<a name="l03274"></a>03274         <span class="comment">/* store the distances between the sources and the slitlet centers */</span>
-<a name="l03275"></a>03275         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )
-<a name="l03276"></a>03276         {
-<a name="l03277"></a>03277             distances_buf[row][i] = x_position[i] - (15.5 + 32.*(float)i) ;
-<a name="l03278"></a>03278         }
-<a name="l03279"></a>03279     }
-<a name="l03280"></a>03280 
-<a name="l03281"></a>03281     <span class="comment">/* ----------------------------------------------------------------</span>
-<a name="l03282"></a>03282 <span class="comment">     * go through the rows again and take the mean of the distances, </span>
-<a name="l03283"></a>03283 <span class="comment">     * throw away the runaways </span>
-<a name="l03284"></a>03284 <span class="comment">     */</span>
-<a name="l03285"></a>03285     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )
-<a name="l03286"></a>03286     {
-<a name="l03287"></a>03287         n   = 0 ;
-<a name="l03288"></a>03288         sum = 0. ;
-<a name="l03289"></a>03289         <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )
-<a name="l03290"></a>03290         {
-<a name="l03291"></a>03291             <span class="keywordflow">if</span> ( fabs( distances_buf[row][i] ) > devtol || 
-<a name="l03292"></a>03292                  isnan(distances_buf[row][i]) )
-<a name="l03293"></a>03293             {
-<a name="l03294"></a>03294              <span class="comment">/*</span>
-<a name="l03295"></a>03295 <span class="comment">          sinfo_msg("dist=%g devtol=%g isan=%d", </span>
-<a name="l03296"></a>03296 <span class="comment">            distances_buf[row][i],</span>
-<a name="l03297"></a>03297 <span class="comment">            devtol,</span>
-<a name="l03298"></a>03298 <span class="comment">            isnan(distances_buf[row][i]));</span>
-<a name="l03299"></a>03299 <span class="comment">              */</span>              
-<a name="l03300"></a>03300                 continue ;
-<a name="l03301"></a>03301             }
-<a name="l03302"></a>03302             sum += distances_buf[row][i] ;
-<a name="l03303"></a>03303             n++ ;
-<a name="l03304"></a>03304         }
-<a name="l03305"></a>03305         <span class="keywordflow">if</span> ( n < 2 )
-<a name="l03306"></a>03306         {
-<a name="l03307"></a>03307             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"distances array could not be determined"</span>
-<a name="l03308"></a>03308                             <span class="stringliteral">" completely!, deviations of distances from"</span>
-<a name="l03309"></a>03309                             <span class="stringliteral">" devtol too big"</span> ) ;
-<a name="l03310"></a>03310             cpl_free(distances) ;
-<a name="l03311"></a>03311             <span class="keywordflow">return</span> NULL ;
-<a name="l03312"></a>03312         }
-<a name="l03313"></a>03313         <span class="keywordflow">else</span>
-<a name="l03314"></a>03314         {
-<a name="l03315"></a>03315             distances[i] = sum / (float)n ;
-<a name="l03316"></a>03316         }
-<a name="l03317"></a>03317     }
-<a name="l03318"></a>03318 
-<a name="l03319"></a>03319     <span class="comment">/* now sort the result according to the row sequence in the </span>
-<a name="l03320"></a>03320 <span class="comment">       reconstructed image*/</span>
-<a name="l03321"></a>03321     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )
-<a name="l03322"></a>03322     {
-<a name="l03323"></a>03323       <span class="keywordflow">if</span>( (row_index=sinfo_sort_slitlets(i)) == -1) {
-<a name="l03324"></a>03324     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of a slitlet\n"</span>) ;
-<a name="l03325"></a>03325     cpl_free (distances) ;
-<a name="l03326"></a>03326     <span class="keywordflow">return</span> NULL ;
-<a name="l03327"></a>03327       }
-<a name="l03328"></a>03328       ret_distances[row_index] = distances[i] ;
-<a name="l03329"></a>03329     }
-<a name="l03330"></a>03330     cpl_free(distances) ;
-<a name="l03331"></a>03331 
-<a name="l03332"></a>03332     cpl_free(row_buf) ;
-<a name="l03333"></a>03333     cpl_free(x_position) ;
-<a name="l03334"></a>03334     cpl_free(found);
-<a name="l03335"></a>03335     cpl_free(found_clean) ;
-<a name="l03336"></a>03336     cpl_free(found_cleanit) ;
-<a name="l03337"></a>03337     sinfo_new_destroy_2Dfloatarray(&distances_buf,n_slitlets) ;
-<a name="l03338"></a>03338 
-<a name="l03339"></a>03339 
-<a name="l03340"></a>03340     <span class="keywordflow">return</span> ret_distances ; 
-<a name="l03341"></a>03341 }
-<a name="l03366"></a>03366 cpl_image * 
-<a name="l03367"></a>03367 sinfo_new_make_true_resamp(cpl_image * calibImage, 
-<a name="l03368"></a>03368                            cpl_image * wavemap)
-<a name="l03369"></a>03369 {
-<a name="l03370"></a>03370     cpl_image * returnImage ;
-<a name="l03371"></a>03371     <span class="keywordtype">float</span> edges[33] ;
-<a name="l03372"></a>03372     <span class="keywordtype">int</span> imsize, kslit,i,j ;
-<a name="l03373"></a>03373     <span class="keywordtype">int</span> slit_index ;
-<a name="l03374"></a>03374     <span class="keywordtype">int</span> z, col, recol ;
-<a name="l03375"></a>03375     <span class="keywordtype">int</span> wlx=0;
-<a name="l03376"></a>03376     <span class="keywordtype">int</span> wly=0;
-<a name="l03377"></a>03377     <span class="keywordtype">int</span> clx=0;
-<a name="l03378"></a>03378     <span class="keywordtype">int</span> cly=0;
-<a name="l03379"></a>03379   
-<a name="l03380"></a>03380     <span class="keywordtype">float</span>* pcdata=NULL;
-<a name="l03381"></a>03381     <span class="keywordtype">float</span>* pwdata=NULL;
-<a name="l03382"></a>03382     <span class="keywordtype">float</span>* prdata=NULL;
-<a name="l03383"></a>03383 
-<a name="l03384"></a>03384 
-<a name="l03385"></a>03385     wlx=cpl_image_get_size_x(wavemap);
-<a name="l03386"></a>03386     wly=cpl_image_get_size_y(wavemap);
-<a name="l03387"></a>03387     pwdata=cpl_image_get_data_float(wavemap);
-<a name="l03388"></a>03388 
-<a name="l03389"></a>03389     edges[0]=0;
-<a name="l03390"></a>03390     j=1;
-<a name="l03391"></a>03391     <span class="keywordflow">for</span>(i=0;i<wlx-1;i++)
-<a name="l03392"></a>03392     {
-<a name="l03393"></a>03393         <span class="keywordflow">if</span>((pwdata[i]-pwdata[i+1])>0.0025 || (pwdata[i]-pwdata[i+1])<-0.0025)
-<a name="l03394"></a>03394     {
-<a name="l03395"></a>03395         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wavemap sinfo_edge %d"</span>, i+1);
-<a name="l03396"></a>03396         edges[j]=i+1;
-<a name="l03397"></a>03397         j++;
-<a name="l03398"></a>03398     }
-<a name="l03399"></a>03399     }
-<a name="l03400"></a>03400     edges[32]=2048;
-<a name="l03401"></a>03401 
-<a name="l03402"></a>03402     clx=cpl_image_get_size_x(calibImage);
-<a name="l03403"></a>03403     cly=cpl_image_get_size_y(calibImage);
-<a name="l03404"></a>03404     pcdata=cpl_image_get_data_float(calibImage);
-<a name="l03405"></a>03405  
-<a name="l03406"></a>03406     imsize = clx / N_SLITLETS ;
-<a name="l03407"></a>03407 
-<a name="l03408"></a>03408     <span class="comment">/* allocate memory */</span>  
-<a name="l03409"></a>03409     returnImage = cpl_image_new(clx,cly,CPL_TYPE_FLOAT);
-<a name="l03410"></a>03410     prdata=cpl_image_get_data_float(returnImage);
-<a name="l03411"></a>03411     <span class="keywordflow">for</span> ( z = 0 ; z < cly ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l03412"></a>03412     {
-<a name="l03413"></a>03413         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ ) <span class="comment">/* go through the image columns */</span>
-<a name="l03414"></a>03414         prdata[col+z*clx]=ZERO;
-<a name="l03415"></a>03415     }
-<a name="l03416"></a>03416     
-<a name="l03417"></a>03417 
-<a name="l03418"></a>03418     <span class="comment">/* now build the data cube out of the resampled image */</span>
-<a name="l03419"></a>03419     <span class="keywordflow">for</span> ( z = 0 ; z < cly ; z++ ) <span class="comment">/* go through the z-axis */</span>
-<a name="l03420"></a>03420     {
-<a name="l03421"></a>03421         kslit      = 0 ;
-<a name="l03422"></a>03422         slit_index = -1 ;
-<a name="l03423"></a>03423         recol      = -1 ;
-<a name="l03424"></a>03424         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ ) <span class="comment">/* go through the image columns */</span>
-<a name="l03425"></a>03425         {
-<a name="l03426"></a>03426             <span class="comment">/*if ( col % imsize == 0 )</span>
-<a name="l03427"></a>03427 <span class="comment">            {*/</span>
-<a name="l03428"></a>03428                 recol = 0 ;
-<a name="l03429"></a>03429                 <span class="comment">/*kslit = col/imsize ;*/</span>
-<a name="l03430"></a>03430         <span class="keywordflow">for</span>(i=0;i<32;i++)
-<a name="l03431"></a>03431         {
-<a name="l03432"></a>03432           <span class="keywordflow">if</span>(col>=sinfo_new_nint(edges[i]) && 
-<a name="l03433"></a>03433                      col<sinfo_new_nint(edges[i+1]))
-<a name="l03434"></a>03434             kslit=i;
-<a name="l03435"></a>03435         }
-<a name="l03436"></a>03436                 <span class="comment">/* sort the slitlets in the right spiffi specific way */</span>
-<a name="l03437"></a>03437     <span class="keywordflow">if</span>( (slit_index=sinfo_sort_slitlets(kslit)) == -1) {
-<a name="l03438"></a>03438             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span>
-<a name="l03439"></a>03439                              <span class="stringliteral">"spiffi image,  there must be 32 "</span>
-<a name="l03440"></a>03440                 <span class="stringliteral">"slitlets!"</span>) ;
-<a name="l03441"></a>03441         
-<a name="l03442"></a>03442     }
-<a name="l03443"></a>03443 
-<a name="l03444"></a>03444             <span class="comment">/*}*/</span>
-<a name="l03445"></a>03445 
-<a name="l03446"></a>03446             <span class="comment">/* fill each cube plane with one image row */</span>
-<a name="l03447"></a>03447         <span class="keywordflow">if</span>((col-sinfo_new_nint(edges[kslit]))>0 && 
-<a name="l03448"></a>03448                (col-sinfo_new_nint(edges[kslit]))<imsize-1 )
-<a name="l03449"></a>03449                 prdata[(col-sinfo_new_nint(edges[kslit]))+
-<a name="l03450"></a>03450                        slit_index*imsize+z*clx] = 
-<a name="l03451"></a>03451                       pcdata[col+z*clx] ;
-<a name="l03452"></a>03452             <span class="keywordflow">else</span>
-<a name="l03453"></a>03453             prdata[(col-sinfo_new_nint(edges[kslit]))+
-<a name="l03454"></a>03454                         slit_index*imsize+z*clx] = ZERO;
-<a name="l03455"></a>03455             <span class="comment">/*recol++ ;*/</span>
-<a name="l03456"></a>03456 
-<a name="l03457"></a>03457         }
-<a name="l03458"></a>03458     }
-<a name="l03459"></a>03459     <span class="keywordflow">return</span> returnImage ;
-<a name="l03460"></a>03460 }
-<a name="l03461"></a>03461 
-<a name="l03462"></a>03462 <span class="comment">/*The old slitlet order*/</span>
-<a name="l03463"></a>03463 <span class="comment">/*switch (kslit)</span>
-<a name="l03464"></a>03464 <span class="comment">                {</span>
-<a name="l03465"></a>03465 <span class="comment">                    case 0:</span>
-<a name="l03466"></a>03466 <span class="comment">                        slit_index = 23 ;</span>
-<a name="l03467"></a>03467 <span class="comment">                        break ;</span>
-<a name="l03468"></a>03468 <span class="comment">                    case 1:</span>
-<a name="l03469"></a>03469 <span class="comment">                        slit_index = 24 ;</span>
-<a name="l03470"></a>03470 <span class="comment">                        break ;</span>
-<a name="l03471"></a>03471 <span class="comment">                    case 2:</span>
-<a name="l03472"></a>03472 <span class="comment">                        slit_index = 22 ;</span>
-<a name="l03473"></a>03473 <span class="comment">                        break ;</span>
-<a name="l03474"></a>03474 <span class="comment">                    case 3:</span>
-<a name="l03475"></a>03475 <span class="comment">                        slit_index = 25 ;</span>
-<a name="l03476"></a>03476 <span class="comment">                        break ;</span>
-<a name="l03477"></a>03477 <span class="comment">                    case 4:</span>
-<a name="l03478"></a>03478 <span class="comment">                        slit_index = 21 ;</span>
-<a name="l03479"></a>03479 <span class="comment">                        break ;</span>
-<a name="l03480"></a>03480 <span class="comment">                    case 5:</span>
-<a name="l03481"></a>03481 <span class="comment">                        slit_index = 26 ;</span>
-<a name="l03482"></a>03482 <span class="comment">                        break ;</span>
-<a name="l03483"></a>03483 <span class="comment">                    case 6:</span>
-<a name="l03484"></a>03484 <span class="comment">                        slit_index = 20 ;</span>
-<a name="l03485"></a>03485 <span class="comment">                        break ;</span>
-<a name="l03486"></a>03486 <span class="comment">                    case 7:</span>
-<a name="l03487"></a>03487 <span class="comment">                        slit_index = 27 ;</span>
-<a name="l03488"></a>03488 <span class="comment">                        break ;</span>
-<a name="l03489"></a>03489 <span class="comment">                    case 8:</span>
-<a name="l03490"></a>03490 <span class="comment">                        slit_index = 19 ;</span>
-<a name="l03491"></a>03491 <span class="comment">                        break ;</span>
-<a name="l03492"></a>03492 <span class="comment">                    case 9:</span>
-<a name="l03493"></a>03493 <span class="comment">                        slit_index = 28 ;</span>
-<a name="l03494"></a>03494 <span class="comment">                        break ;</span>
-<a name="l03495"></a>03495 <span class="comment">                    case 10:</span>
-<a name="l03496"></a>03496 <span class="comment">                        slit_index = 18 ;</span>
-<a name="l03497"></a>03497 <span class="comment">                        break ;</span>
-<a name="l03498"></a>03498 <span class="comment">                    case 11:</span>
-<a name="l03499"></a>03499 <span class="comment">                        slit_index = 29 ;</span>
-<a name="l03500"></a>03500 <span class="comment">                        break ;</span>
-<a name="l03501"></a>03501 <span class="comment">                    case 12:</span>
-<a name="l03502"></a>03502 <span class="comment">                        slit_index = 17 ;</span>
-<a name="l03503"></a>03503 <span class="comment">                        break ;</span>
-<a name="l03504"></a>03504 <span class="comment">                    case 13:</span>
-<a name="l03505"></a>03505 <span class="comment">                        slit_index = 30 ;</span>
-<a name="l03506"></a>03506 <span class="comment">                        break ;</span>
-<a name="l03507"></a>03507 <span class="comment">                    case 14:</span>
-<a name="l03508"></a>03508 <span class="comment">                        slit_index = 16 ;</span>
-<a name="l03509"></a>03509 <span class="comment">                        break ;</span>
-<a name="l03510"></a>03510 <span class="comment">                    case 15:</span>
-<a name="l03511"></a>03511 <span class="comment">                        slit_index = 31 ;</span>
-<a name="l03512"></a>03512 <span class="comment">                        break ;</span>
-<a name="l03513"></a>03513 <span class="comment">                    case 16:</span>
-<a name="l03514"></a>03514 <span class="comment">                        slit_index = 0 ;</span>
-<a name="l03515"></a>03515 <span class="comment">                        break ;</span>
-<a name="l03516"></a>03516 <span class="comment">                    case 17:</span>
-<a name="l03517"></a>03517 <span class="comment">                        slit_index = 15 ;</span>
-<a name="l03518"></a>03518 <span class="comment">                        break ;</span>
-<a name="l03519"></a>03519 <span class="comment">                    case 18:</span>
-<a name="l03520"></a>03520 <span class="comment">                        slit_index = 1 ;</span>
-<a name="l03521"></a>03521 <span class="comment">                        break ;</span>
-<a name="l03522"></a>03522 <span class="comment">                    case 19:</span>
-<a name="l03523"></a>03523 <span class="comment">                        slit_index = 14 ;</span>
-<a name="l03524"></a>03524 <span class="comment">                        break ;</span>
-<a name="l03525"></a>03525 <span class="comment">                    case 20:</span>
-<a name="l03526"></a>03526 <span class="comment">                        slit_index = 2 ;</span>
-<a name="l03527"></a>03527 <span class="comment">                        break ;</span>
-<a name="l03528"></a>03528 <span class="comment">                    case 21:</span>
-<a name="l03529"></a>03529 <span class="comment">                        slit_index = 13 ;</span>
-<a name="l03530"></a>03530 <span class="comment">                        break ;</span>
-<a name="l03531"></a>03531 <span class="comment">                    case 22:</span>
-<a name="l03532"></a>03532 <span class="comment">                        slit_index = 3 ;</span>
-<a name="l03533"></a>03533 <span class="comment">                        break ;</span>
-<a name="l03534"></a>03534 <span class="comment">                    case 23:</span>
-<a name="l03535"></a>03535 <span class="comment">                        slit_index = 12 ;</span>
-<a name="l03536"></a>03536 <span class="comment">                        break ;</span>
-<a name="l03537"></a>03537 <span class="comment">                    case 24:</span>
-<a name="l03538"></a>03538 <span class="comment">                        slit_index = 4 ;</span>
-<a name="l03539"></a>03539 <span class="comment">                        break ;</span>
-<a name="l03540"></a>03540 <span class="comment">                    case 25:</span>
-<a name="l03541"></a>03541 <span class="comment">                        slit_index = 11 ;</span>
-<a name="l03542"></a>03542 <span class="comment">                        break ;</span>
-<a name="l03543"></a>03543 <span class="comment">                    case 26:</span>
-<a name="l03544"></a>03544 <span class="comment">                        slit_index = 5 ;</span>
-<a name="l03545"></a>03545 <span class="comment">                        break ;</span>
-<a name="l03546"></a>03546 <span class="comment">                    case 27:</span>
-<a name="l03547"></a>03547 <span class="comment">                        slit_index = 10 ;</span>
-<a name="l03548"></a>03548 <span class="comment">                        break ;</span>
-<a name="l03549"></a>03549 <span class="comment">                    case 28:</span>
-<a name="l03550"></a>03550 <span class="comment">                        slit_index = 6 ;</span>
-<a name="l03551"></a>03551 <span class="comment">                        break ;</span>
-<a name="l03552"></a>03552 <span class="comment">                    case 29:</span>
-<a name="l03553"></a>03553 <span class="comment">                        slit_index = 9 ;</span>
-<a name="l03554"></a>03554 <span class="comment">                        break ;</span>
-<a name="l03555"></a>03555 <span class="comment">                    case 30:</span>
-<a name="l03556"></a>03556 <span class="comment">                        slit_index = 7 ;</span>
-<a name="l03557"></a>03557 <span class="comment">                        break ;</span>
-<a name="l03558"></a>03558 <span class="comment">                    case 31:</span>
-<a name="l03559"></a>03559 <span class="comment">                        slit_index = 8 ;</span>
-<a name="l03560"></a>03560 <span class="comment">                        break ;</span>
-<a name="l03561"></a>03561 <span class="comment">                    default:</span>
-<a name="l03562"></a>03562 <span class="comment">                        sinfo_msg_error("wrong slitlet index: couldn't "</span>
-<a name="l03563"></a>03563 <span class="comment">                                        "be a spiffi image,  \</span>
-<a name="l03564"></a>03564 <span class="comment">                                 there must be 32 slitlets!\n") ;</span>
-<a name="l03565"></a>03565 <span class="comment">                        cpl_imagelist_delete(returnCube) ;</span>
-<a name="l03566"></a>03566 <span class="comment">                        return NULL ;</span>
-<a name="l03567"></a>03567 <span class="comment">                        break ;</span>
-<a name="l03568"></a>03568 <span class="comment">                }*/</span>
-<a name="l03569"></a>03569 
-<a name="l03570"></a>03570 
-<a name="l03571"></a>03571 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_cube_construct.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  30/08/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_cube_construct.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        some procedures to construct a data cube</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*   1) cpl_image * sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*                                         int        hw )</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   2) float * sinfo_north_south_test( cpl_image * ns_image,</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*                                int        n_slitlets,</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*                                int        halfWidth,</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*                                float      fwhm,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                                float      minDiff,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                                float      estimated_dist,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*                                float      devtol )</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*   3) cpl_imagelist * sinfo_new_make_cube ( cpl_image * calibImage,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                           float    * distances,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                           float    * correct_diff_dist )</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*   4) cpl_imagelist * sinfo_new_make_cube_spi ( cpl_image *  calibImage,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                              float    ** slit_edges,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                              float    *  shift )</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*   5) cpl_imagelist * sinfo_new_make_cube_dist ( cpl_image * calibImage,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                               float      firstCol,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                               float    * distances,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*                               float    * shift )</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*   6) cpl_imagelist * sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                                 float      firstCol,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                                 float    * distances,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                                 float    * shift )</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*   7) cpl_imagelist * sinfo_new_make_3D_cube ( cpl_image * calibImage,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                             int      * kpixshift,  </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                             int        kpixfirst )</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*   8) cpl_imagelist * </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">       sinfo_new_determine_mask_cube(cpl_imagelist * sourceMaskCube,</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                                    float     lowLimit,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                                    float     highLimit )</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*   9) cpl_imagelist * sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                               cpl_imagelist * maskCube,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*                               int       n_neighbors, </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                               int       max_radius )</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*   10) cpl_imagelist * sinfo_new_fine_tune_cube( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*                              float   * correct_diff_dist )</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*   11) cpl_imagelist * sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*                                   float   * correct_diff_dist )</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*   12) cpl_imagelist * sinfo_new_fine_tune_cube_by_spline(cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                                        float   * correct_diff_dist )</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*   1) convolves a north-south-test image with a sinfo_gaussian</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*      with user given integer half width by using the eclipse</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*      routine sinfo_function1d_filter_lowpass().</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*   2) determines the distances of the slitlets</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*   3) makes a data cube out of a resampled source image</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*      this SPIFFI specific routine takes into account the</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*      Spiffi slitlet order on the detector.</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*      Also shifts the resulting image rows by one pixel if</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*      necessary according to the distances array gained from</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*      the north-south test routine.</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*      Can do the same with the bad pixel map image to generate a</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*      bad pixel mask cube.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*   4) makes a data cube out of a resampled source image</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*      this SPIFFI specific routine takes into account the</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*      Spiffi slitlet order on the detector.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*      This routine takes fitted slitlet positions into account.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*      Can do the same with the bad pixel map image to generate a</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*      bad pixel mask cube.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*   5) makes a data cube out of a resampled source image</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*      this SPIFFI specific routine takes into account the</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*      Spiffi slitlet order on the detector.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*      Also shifts the resulting image rows by one pixel if</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*      necessary according to the distances array gained from</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*      the north-south test routine.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*      Can do the same with the bad pixel map image to generate a</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*      bad pixel mask cube.</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*   6) makes a data cube out of a resampled source image</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*      this 3D specific routine takes into account the</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*      3D slitlet order on the detector.</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*      Also shifts the resulting image rows by one pixel if</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*      necessary according to the distances array gained from</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*      the north-south test routine.</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      Can do the same with the bad pixel map image to generate a</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      bad pixel mask cube.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*   7) makes a data cube out of a resampled source image</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*      this MPE 3D specific routine takes into account the</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*      3D slitlet order on the detector.</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*      Also shifts the resulting image row by an integer pixel shift if</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*      necessary according to the input kpixshift array </span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*      Can do the same with the bad pixel map image to generate a</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*      bad pixel mask cube.</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*   8) converts resampled bad pixels to real bad pixels in data cubes.</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*   9) Bad pixel interpolation 3D like (saturated pixels exist):</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*      interpolates the bad pixels of the source cube by</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*      using the nearest neighbors. </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*      first it is checked if the bad pixel is interpolatable:</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*      it is only interpolatable if the number of good pixels </span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*      in its spectrum of length 2*n_neighbors+1 exceeds 3 and</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*      if there is at least one good pixel on either side of the</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*      central pixel.</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*      Afterwards good neighboring pixels are searched within the </span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*      image plane of the bad pixel by using an increasing pixel radius. </span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*      Good pixels mean, the corresponding spectral pixels of the </span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*      bad pixel and its spatial neighboring pixel must have</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">*      at least 2 valid pixel pairs to be able to be used for</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*      the interpolation. The search is stopped if 9 valid neighboring</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">*      pixels are found. </span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*      Now normalize the found spectral values, collect the valid pixels </span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*      (there must be at least 18) and take the sinfo_median of the valid </span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">*      pixels with which the bad pixel is replaced.</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*   10) fine tunes each row in the right position according </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">*      to the distances of the slitlets to each other</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">*      (output of the north-south test).</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">*      This means that the rows must be realigned by a </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">*      length. The fractional realignment is done by using</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">*      the polynomial interpolation algorithm of N.R. </span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">*      Each row is rescaled so that the total flux is</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">*      conserved.</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">*  11) fine tunes each row in the right position according </span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">*      to the distances of the slitlets to each other</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">*      (output of the north-south test).</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">*      This means that the rows must be realigned by a </span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*      length. The fractional realignment is done by using</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">*      the FFT algorithm four1() of N.R. </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">*  12) fine tunes each row in the right position according </span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">*      to the distances of the slitlets to each other</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">*      (output of the north-south test).</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">*      This means that the rows must be realigned by a </span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">*      fraction of a pixel to accomodate non-integer slit </span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">*      length. The fractional realignment is done by using</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">*      the spline interpolation algorithm splint in connection</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">*      with the algorithm spline of N.R. </span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">*      This algorithms assume that each row is a tabulated</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">*      function. The first derivatives of the interpolating</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">*      function at the first and last point must be given.</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">*      These are set higher than 1xe^30, so the routine</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">*      sets the corresponding boundary condition for a natural</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">*      spline, with zero second derivative on that boundary.</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">*      Each row is rescaled so that the total flux is</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">*      conserved.</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor">#include "sinfo_fft_base.h"</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> sinfo_sort_slitlets(<span class="keyword">const</span> <span class="keywordtype">int</span> kslit);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> sinfo_sort_slitlets_array(<span class="keyword">const</span> <span class="keywordtype">int</span> slit, <span class="keywordtype">int</span>* row_index);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> cpl_image * </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                    <span class="keywordtype">int</span>        hw )</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_image * returnImage ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">float</span>* row_buffer=NULL ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">float</span> * filter ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>  </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">if</span> ( lineImage == NULL )</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">if</span> ( hw < 1 )</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width given!\n"</span>) ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/* allocate memory for returned image */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">if</span> ( NULL == ( returnImage = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT ) ))</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     podata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="comment">/* go through the image rows and save them in a buffer */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     row_buffer=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             <span class="keywordflow">if</span> ( isnan(pidata[col+row*ilx]) )</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>             {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                 row_buffer[col] = 0. ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>             }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>             {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                 row_buffer[col] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>             }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">         * now low pass filter the rows by the gaussian and fill the return</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">         * image.</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         filter = sinfo_function1d_filter_lowpass( row_buffer,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                             ilx,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                             LOW_PASS_GAUSSIAN,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                             hw ) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ily ; col++ )</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             podata[col + row*ilx] = filter[col] ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>         }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         <span class="comment">/* deallocate memory */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         sinfo_function1d_del (filter) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_free(row_buffer);    </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> sinfo_north_south_test( cpl_image * ns_image,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                           <span class="keywordtype">int</span>        n_slitlets,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                           <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                           <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                           <span class="keywordtype">float</span>      minDiff,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                           <span class="keywordtype">float</span>      estimated_dist,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                           <span class="keywordtype">float</span>      devtol,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>               <span class="keywordtype">int</span>         bottom,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>               <span class="keywordtype">int</span>         top )</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordtype">int</span> i, j, k, m, row, col, n, ni, na ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordtype">int</span> position, counter, iters ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     pixelvalue row_buf[cpl_image_get_size_x(ns_image)] ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <span class="keywordtype">float</span> sum, mean, maxval ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     <span class="keywordtype">float</span> * distances ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordtype">float</span> distances_buf[cpl_image_get_size_y(ns_image)][n_slitlets-1] ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keywordtype">float</span> x_position[n_slitlets] ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordtype">int</span> * mpar ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="keywordtype">int</span> found[3*n_slitlets], found_clean[3*n_slitlets] ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordtype">int</span> found_cleanit[3*n_slitlets] ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     Vector * line ;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     FitParams ** par ;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordtype">int</span> foundit, begin, end ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordtype">int</span> zeroindicator ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>  </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>  </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keywordflow">if</span> ( ns_image == NULL )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given\n"</span>) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     ilx=cpl_image_get_size_x(ns_image);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     ily=cpl_image_get_size_y(ns_image);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     pidata=cpl_image_get_data_float(ns_image);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordflow">if</span> ( n_slitlets < 1 )</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of slitlets given\n"</span>) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth >= estimated_dist )</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     {</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong half width given\n"</span>) ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     }</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">if</span> ( fwhm <= 0. )</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fwhm given\n"</span>) ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordflow">if</span> ( minDiff < 1. )</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong minDiff given\n"</span>) ;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="comment">/* allocate memory for output array */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordflow">if</span> (NULL == (distances = (<span class="keywordtype">float</span> *) cpl_calloc ( n_slitlets - 1 , </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                                     <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="comment">/* go through the image rows */</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         zeroindicator = 0 ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         <span class="comment">/* initialize the distance buffer */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets-1 ; i++ )</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>             distances_buf[row][i] = ZERO ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="comment">/* fill the row buffer array with image data */</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         {</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>             row_buf[col] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         <span class="comment">/* determine the mean of the row data */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         sum = 0. ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         n = 0 ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             <span class="keywordflow">if</span> ( isnan(row_buf[i]) )</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                 continue ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>             }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             sum += row_buf[i] ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>             n++ ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         mean = sum / (float)n ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>         <span class="comment">/* store the positions of image values greater than the mean */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>         n = 0 ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             <span class="keywordflow">if</span> (isnan(row_buf[i]))</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>             {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                 continue ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             <span class="keywordflow">if</span> ( row_buf[i] >  sqrt(mean*mean*9) )</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                 found[n] = i ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                 n++ ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             } </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>        </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         <span class="keywordflow">if</span> ( n < n_slitlets )</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t1 wrong number of intensity columns found "</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                               <span class="stringliteral">"in row: %d, found number: %d, mean: %g"</span>,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                               row, n, mean) ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             continue ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>         }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         { </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>             <span class="comment">/* find the maximum value position around the found columns */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>             na = 0 ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n ; i ++ )</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                 <span class="keywordflow">if</span> ( found[i] - found[i-1] < halfWidth )</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                 {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                     begin = found[i] - halfWidth ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                     <span class="keywordflow">if</span> ( begin < 0 )</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                     {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                         begin = 0 ;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                     }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                     end = found[i] + halfWidth ;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                     <span class="keywordflow">if</span> ( end >= ilx )</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                     {</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>                         end = ilx - 1 ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>                     }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                     <span class="comment">/* find the maximum value inside the box </span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="comment">                       around the found positions*/</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                     foundit = 0 ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                     <span class="keywordflow">for</span> ( j = begin ; j <= end ; j++ )</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                     {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                         <span class="comment">/* do not consider boxes that contain bad pixels */</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                         <span class="keywordflow">if</span> (isnan(row_buf[j]))</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                         {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                             continue ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                         }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                         <span class="keywordflow">if</span> (row_buf[j] >= maxval )</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                         {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                             maxval = row_buf[j] ;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                             foundit = j ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                         }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                     }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                     <span class="keywordflow">if</span> (maxval == -FLT_MAX)</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                     {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                         continue ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                     }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                     <span class="keywordflow">for</span> ( k = 0 ; k < na ; k++ )</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                     {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                         <span class="keywordflow">if</span> ( found_cleanit[k] >= begin && </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>                              found_cleanit[k] < foundit )</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>                         {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                             na-- ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                         }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                     }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                     <span class="keywordflow">for</span> ( k = 0 ; k < n ; k++ )</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                     {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                         <span class="keywordflow">if</span> ( found[k] == foundit)</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                         {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                  <span class="keywordflow">if</span> (na>0){</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[k] )</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                             {</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                                 found_cleanit[na] = found[k] ;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                                 na++ ;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                             }</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>              }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>              <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                 found_cleanit[na] = found[k] ;  </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                             na++ ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>              } </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                       }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                     }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                 }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                 {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                     <span class="keywordflow">if</span> ( i == 1 )</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                     {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                         found_cleanit[na] = found[0] ;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                         na++ ;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                         found_cleanit[na] = found[1] ;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                         na++ ;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                     }</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                     {   </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>                 <span class="keywordflow">if</span> (na>0){</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i-1])</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                             {</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                                 found_cleanit[na] = found[i-1] ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                                 na++ ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                             }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i])</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>                             {</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>                                 found_cleanit[na] = found[i] ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>                                 na++ ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>                             }</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                         }</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>                         {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                             found_cleanit[na] = found[i] ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                             na++ ;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                         }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>             }  </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                 }</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             <span class="comment">/* determine only one pixel position for each slitlet intensity */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>             j = 1 ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>             <span class="keywordflow">for</span> ( i = 1 ; i < na ; i++ )</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>             {</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) < </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                             (estimated_dist - devtol) ||</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                      (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) > </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                             (estimated_dist + devtol) )</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                 {</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                     continue ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                 }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                 {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                     found_clean[j-1] = found_cleanit[i-1] ;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                     found_clean[j]   = found_cleanit[i] ;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>                     j++ ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                 }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>             }</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         }</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         <span class="keywordflow">if</span> ( j > n_slitlets )</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             <span class="comment">/* check the distance again */</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             ni = 1 ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>             <span class="keywordflow">for</span> ( i = 1 ; i < j ; i++ )</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>             {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) < </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                             (estimated_dist - devtol ) ||</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                      (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) > </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>                             (estimated_dist + devtol ) )</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>                 { </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>                     continue ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>                 }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>                 {</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                     found_clean[ni-1] = found_clean[i-1] ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>                     found_clean[ni]   = found_clean[i] ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                     ni++ ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                 }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>             }</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>             <span class="keywordflow">if</span> ( ni != n_slitlets )</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>             {</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t2 wrong number of intensity columns"</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                                   <span class="stringliteral">" found in row: %d,  found number: %d"</span>,</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>                                   row, ni) ;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                 continue ;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>             }</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>             {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>                 j = ni ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>             }</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>         }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < n_slitlets )</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>             cpl_msg_debug (<span class="stringliteral">"north_south_test3:"</span>,</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>                             <span class="stringliteral">"t3 wrong number of intensity columns "</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                             <span class="stringliteral">"found in row: %d , found number: %d, mean: %g\n"</span>, </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                             row, j, mean) ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>             continue ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         counter = 0 ;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         <span class="comment">/* go through the found intensity pixels in one row */</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>         {</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>             <span class="comment">/* allocate memory for the array where the line is fitted in */</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>             <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*halfWidth + 1)) )</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>             {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                 cpl_free(distances) ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>             }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             par = sinfo_new_fit_params(1) ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>             m = 0 ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>             <span class="keywordflow">for</span> ( k = found_clean[i]-halfWidth ; </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                   k <= found_clean[i]+halfWidth ; k++ )</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>             {</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 <span class="keywordflow">if</span> ( k < 0 )</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                 {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                     k = 0. ;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                 }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( k >= ilx )</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                 {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                     k = ilx - 1 ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                 }</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(row_buf[k]) )</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                 {</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                     zeroindicator = 1 ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                     break ;</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                 }</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                 {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                     line -> data[m] = row_buf[k] ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                     m++ ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                 }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>             }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>             <span class="keywordflow">if</span> ( zeroindicator == 1 )</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>             {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                 break ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>             }</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>             <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment">             * go through the spectral sinfo_vector</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment">             * determine the maximum pixel value in the spectral sinfo_vector</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>             position = -INT32_MAX ;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>             <span class="keywordflow">for</span> ( k = 0 ; k < m ; k++ )</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>             {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                 xdat[k] = k ;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                 wdat[k] = 1.0 ;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                 <span class="keywordflow">if</span> ( line -> data[k] >= maxval )</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>                 {</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>                     maxval = line -> data[k] ;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                     position = k ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                 }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>             }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>             xdim     = XDIM ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>             ndat     = line -> n_elements ;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>             numpar   = MAXPAR ;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>             tol      = TOL ;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>             lab      = LAB ;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>             its      = ITS ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>             (*par) -> fit_par[1] = fwhm ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>             (*par) -> fit_par[2] = (float) position ;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>             (*par) -> fit_par[3] = (float) (line -> data[0] + </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                                    line -> data[line->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>             (*par) -> fit_par[0]  = maxval - ((*par) -> fit_par[3]) ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             <span class="comment">/* exclude negative peaks and low signal cases */</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] < minDiff )</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>             {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, signal of line too low to fit "</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                                    <span class="stringliteral">"in row: %d in slitlet %d\n"</span>, row, i) ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                 continue ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>             }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>             <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>             {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                 (*par) -> derv_par[k] = 0.0 ;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                 mpar[k] = 1 ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>             <span class="comment">/* finally, do the least square fit using a Gaussian */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>                                                    line -> data, wdat, &ndat, </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>                                                    (*par) -> fit_par,</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>                                                    (*par) -> derv_par, mpar, </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                                                    &numpar, &tol, &its, &lab)) )</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>             {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>           <span class="comment">/*</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="comment">                cpl_msg_debug ("north_south_test:",</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="comment">                               "sinfo_lsqfit_c: least squares fit failed,"</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="comment">                               " error no.: %d in row: %d in slitlet %d\n",</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="comment">                                iters, row, i) ;</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> <span class="comment">          */</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>                 continue ;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>             }</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             <span class="comment">/* check for negative fit results */</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] <= 0. || </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>                  (*par) -> fit_par[1] <= 0. ||</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                  (*par) -> fit_par[2] < 0. )</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>             {</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, "</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>                                    <span class="stringliteral">"not used! in row %d in slitlet %d"</span>, </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>                                    row, i) ;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>                 continue ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>             <span class="comment">/* correct the fitted position for the given row of the line </span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="comment">               in image coordinates */</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>             (*par) -> fit_par[2] =  (float) (found_clean[i] - halfWidth) + </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                                             (*par) -> fit_par[2] ;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>             x_position[counter] = (*par) -> fit_par[2] ;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>             counter ++ ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>             <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>             sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>             sinfo_new_destroy_vector ( line ) ;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         }</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         <span class="keywordflow">if</span> (zeroindicator == 1)</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>             <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"bad pixel in fitting box in row: %d\n"</span>, row) ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>             continue ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         <span class="keywordflow">if</span> ( counter != n_slitlets )</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>             continue ;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong number of slitlets found in row: %d"</span>,row);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         }</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         <span class="comment">/* store the distances between the sources in a buffer */</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         <span class="keywordflow">for</span> ( i = 1 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             distances_buf[row][i-1] = x_position[i] - x_position[i-1] ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="comment">/* ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="comment">     * go through the rows again and take the mean of the distances, </span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="comment">     * throw away the runaways </span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets-1 ; i++ )</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         n   = 0 ;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         sum = 0. ;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         {</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             <span class="keywordflow">if</span> ( fabs( distances_buf[row][i] - estimated_dist ) > devtol || </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>                  isnan(distances_buf[row][i]) )</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>             {</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">          sinfo_msg("dist=%g devtol=%g isan=%d", </span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">            distances_buf[row][i],</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="comment">            devtol,</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">            isnan(distances_buf[row][i]));</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>                 continue ;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>             }</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>             sum += distances_buf[row][i] ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>             n++ ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>         }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         <span class="keywordflow">if</span> ( n < 2 )</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         {</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"distances array could not be determined "</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>                             <span class="stringliteral">"completely!, deviations of distances from number "</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                             <span class="stringliteral">"of slitlets too big\n"</span> ) ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>             cpl_free(distances) ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>             distances[i] = sum / (float)n ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>         }</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     }</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordflow">return</span> distances ; </div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> cpl_imagelist * </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> sinfo_new_make_cube ( cpl_image * calibImage,</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                      <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>                      <span class="keywordtype">float</span>    * correct_diff_dist )</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="keywordtype">int</span> imsize, kslit, kpix ;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     <span class="keywordtype">int</span> slit_index ;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     <span class="keywordtype">int</span> z, col, recol ;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     <span class="keywordflow">if</span> ( NULL == calibImage )</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     }</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     ilx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     ily=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     pidata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="keywordflow">if</span> ( NULL == distances )</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     {</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!/n"</span>) ;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     }</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"correct_diff_dist array is not allocated!/n"</span>) ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     }</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>        </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     {</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     }</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     imsize = ilx / N_SLITLETS ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     <span class="comment">/* allocate memory */</span>  </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     {</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     }</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     {</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> </div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>         kpix       = 0 ;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         kslit      = 0 ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>         slit_index = -1 ;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>         recol      = -1 ;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         {</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>             <span class="keywordflow">if</span> ( col % imsize == 0 )</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>             {</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>                 recol = 0 ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>                 kslit = col/imsize ;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>                 <span class="comment">/* sort the slitlets in the right spiffi specific way */</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>                 <span class="keywordflow">if</span>((slit_index=sinfo_sort_slitlets(kslit)) == -1) {</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>                   <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>                                <span class="stringliteral">"spiffi image,  there must be 32 slitlets!"</span>) ;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>                         cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>                         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>                 }</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>                 <span class="keywordflow">if</span> ( kslit != 0 )</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                 {</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>                     <span class="comment">/*-------------------------------------------------------- </span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="comment">                     * shift the first pixel by an integer if the absolute </span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="comment">                     * amount of distances[]</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="comment">                     * is bigger than 0.5 </span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>                     kpix = sinfo_new_nint(distances[kslit-1]) ;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>                     <span class="comment">/*----------------------------------------------- </span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> <span class="comment">                     * now sort the distances array according to the row order </span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="comment">                     * and add a 0 value for the first (reference) slitlet </span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="comment">                     * that means row 8 </span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                     correct_diff_dist[slit_index] = distances[kslit-1] - </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                                                     (float)kpix ;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                 }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                 <span class="comment">/* refer all distances to the first slitlet */</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>                 {</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>                     correct_diff_dist[slit_index] = 0. ;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>                 }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>             }</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>             <span class="comment">/* fill each cube plane with one image row */</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>             podata[recol+slit_index*imsize] = pidata[col+kpix+z*ilx];</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>             recol++ ;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>             <span class="keywordflow">if</span> ( recol > imsize )</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>             {</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong column of reconstructed "</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                                 <span class="stringliteral">"image, shouldn't happen!\n"</span>) ; </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                 cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>             }</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     }</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> }</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> sinfo_sort_slitlets(<span class="keyword">const</span> <span class="keywordtype">int</span> kslit)</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> {</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>   <span class="keywordtype">int</span> slit_index=0;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>   <span class="keywordflow">switch</span> (kslit)</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>       slit_index = 8 ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>       break ;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>       slit_index = 7 ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>       break ;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>       slit_index = 9 ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       break ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>       slit_index = 6 ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>       break ;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>       slit_index = 10 ;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>       break ;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     <span class="keywordflow">case</span> 5:</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>       slit_index = 5 ;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>       break ;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     <span class="keywordflow">case</span> 6:</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>       slit_index = 11 ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>       break ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     <span class="keywordflow">case</span> 7:</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>       slit_index = 4 ;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>       break ;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     <span class="keywordflow">case</span> 8:</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>       slit_index = 12 ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>       break ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     <span class="keywordflow">case</span> 9:</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>       slit_index = 3 ;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>       break ;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordflow">case</span> 10:</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>       slit_index = 13 ;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>       break ;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     <span class="keywordflow">case</span> 11:</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>       slit_index = 2 ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>       break ;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     <span class="keywordflow">case</span> 12:</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>       slit_index = 14 ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>       break ;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     <span class="keywordflow">case</span> 13:</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>       slit_index = 1 ;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>       break ;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     <span class="keywordflow">case</span> 14:</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>       slit_index = 15 ;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>       break ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     <span class="keywordflow">case</span> 15:</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       slit_index = 0 ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>       break ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordflow">case</span> 16:</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>       slit_index = 31 ;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>       break ;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     <span class="keywordflow">case</span> 17:</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>       slit_index = 16 ;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>       break ;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     <span class="keywordflow">case</span> 18:</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>       slit_index = 30 ;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>       break ;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keywordflow">case</span> 19:</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       slit_index = 17 ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>       break ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     <span class="keywordflow">case</span> 20:</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>       slit_index = 29 ;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>       break ;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordflow">case</span> 21:</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       slit_index = 18 ;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>       break ;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     <span class="keywordflow">case</span> 22:</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>       slit_index = 28 ;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       break ;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     <span class="keywordflow">case</span> 23:</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>       slit_index = 19 ;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>       break ;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     <span class="keywordflow">case</span> 24:</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>       slit_index = 27 ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>       break ;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="keywordflow">case</span> 25:</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>       slit_index = 20 ;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>       break ;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     <span class="keywordflow">case</span> 26:</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>       slit_index = 26 ;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>       break ;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     <span class="keywordflow">case</span> 27:</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>       slit_index = 21 ;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>       break ;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     <span class="keywordflow">case</span> 28:</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>       slit_index = 25 ;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>       break ;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="keywordflow">case</span> 29:</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>       slit_index = 22 ;</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>       break ;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     <span class="keywordflow">case</span> 30:</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>       slit_index = 24 ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       break ;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="keywordflow">case</span> 31:</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       slit_index = 23 ;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>       break ;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>                       <span class="stringliteral">"spiffi image,  there must be 32 slitlets!"</span>) ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>                 </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>    }</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>    <span class="keywordflow">return</span> slit_index;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> sinfo_sort_slitlets_array(<span class="keyword">const</span> <span class="keywordtype">int</span> slit, <span class="keywordtype">int</span>* row_index)</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> {</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>   <span class="keywordflow">switch</span> (slit)</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>       row_index[0] = 8 ;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>       break ;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>       row_index[1] = 7 ;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>       break ;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>       row_index[2] = 9 ;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>       break ;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>       row_index[3] = 6 ;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>       break ;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>       row_index[4] = 10 ;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>       break ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     <span class="keywordflow">case</span> 5:</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>       row_index[5] = 5 ;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>       break ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     <span class="keywordflow">case</span> 6:</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>       row_index[6] = 11 ;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>       break ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     <span class="keywordflow">case</span> 7:</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>       row_index[7] = 4 ;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>       break ;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     <span class="keywordflow">case</span> 8:</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       row_index[8] = 12 ;</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>       break ;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <span class="keywordflow">case</span> 9:</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>       row_index[9] = 3 ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>       break ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     <span class="keywordflow">case</span> 10:</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>       row_index[10] = 13 ;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>       break ;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keywordflow">case</span> 11:</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       row_index[11] = 2 ;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       break ;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     <span class="keywordflow">case</span> 12:</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>       row_index[12] = 14 ;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>       break ;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     <span class="keywordflow">case</span> 13:</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>       row_index[13] = 1 ;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>       break ;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     <span class="keywordflow">case</span> 14:</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>       row_index[14] = 15 ;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>       break ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>     <span class="keywordflow">case</span> 15:</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       row_index[15] = 0 ;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>       break ;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     <span class="keywordflow">case</span> 16:</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>       row_index[16] = 31 ;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>       break ;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="keywordflow">case</span> 17:</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>       row_index[17] = 16 ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>       break ;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     <span class="keywordflow">case</span> 18:</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>       row_index[18] = 30 ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>       break ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="keywordflow">case</span> 19:</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       row_index[19] = 17 ;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       break ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     <span class="keywordflow">case</span> 20:</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       row_index[20] = 29 ;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>       break ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     <span class="keywordflow">case</span> 21:</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>       row_index[21] = 18 ;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>       break ;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     <span class="keywordflow">case</span> 22:</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>       row_index[22] = 28 ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>       break ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     <span class="keywordflow">case</span> 23:</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>       row_index[23] = 19 ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>       break ;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     <span class="keywordflow">case</span> 24:</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>       row_index[24] = 27 ;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>       break ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     <span class="keywordflow">case</span> 25:</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       row_index[25] = 20 ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       break ;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     <span class="keywordflow">case</span> 26:</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>       row_index[26] = 26 ;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>       break ;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="keywordflow">case</span> 27:</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>       row_index[27] = 21 ;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>       break ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     <span class="keywordflow">case</span> 28:</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>       row_index[28] = 25 ;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>       break ;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     <span class="keywordflow">case</span> 29:</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       row_index[29] = 22 ;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>       break ;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keywordflow">case</span> 30:</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>       row_index[30] = 24 ;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>       break ;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordflow">case</span> 31:</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>       row_index[31] = 23 ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>       break ;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a spiffi "</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>                       <span class="stringliteral">"image,  there must be 32 slitlets!\n"</span>) ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     }</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> </div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> }</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> </div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> cpl_imagelist * </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> sinfo_new_make_cube_spi ( cpl_image *  calibImage,</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                         <span class="keywordtype">float</span>    ** slit_edges,</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>                         <span class="keywordtype">float</span>    *  shift )</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> {</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>     <span class="keywordtype">float</span> diff, start ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="keywordtype">float</span> * center ;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     <span class="keywordtype">int</span> * row_index ;</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="keywordtype">int</span> slit ;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     <span class="keywordtype">int</span> col, z ;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>     <span class="keywordtype">int</span> imsize ;</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>     <span class="keywordtype">int</span> * beginCol ;</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     <span class="keywordtype">int</span> col_counter ;</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     <span class="keywordflow">if</span> ( NULL == calibImage )</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     }</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     ilx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     ily=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     pidata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     <span class="keywordflow">if</span> ( NULL == slit_edges )</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no slit_edges array given from sinfo_fitSlits()!/n"</span>) ;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     }</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     {</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     }</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     imsize = ilx / N_SLITLETS ;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <span class="comment">/* allocate memory */</span>  </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     {</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>         cpl_free(row_index) ;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     }</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>     <span class="keywordflow">if</span> ( NULL == (center = (<span class="keywordtype">float</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>     {</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>         cpl_free (row_index) ;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>         cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     }</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     {</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>         cpl_free (row_index) ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>         cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>         cpl_free (center) ;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="comment">/* determine the absolute center of the slitlets and the distances </span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">       inside the image*/</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) </div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     <span class="comment">/* go through the slitlets of each row of the resampled image */</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>         center[slit] = (slit_edges[slit][1] + slit_edges[slit][0]) / 2. ;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>         <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">         * sort the slitlets in the right spiffi specific way</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment">         * the row_index describes the row index of the current slitlet </span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">         * in the resulting cube images.</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>         <span class="keywordflow">if</span>(-1 == sinfo_sort_slitlets_array(slit,row_index)) {</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>       cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>       cpl_free (row_index) ;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>           cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>           cpl_free (center) ;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>           <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>         }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         <span class="comment">/* determine the integer column on which the slitlet starts, center the</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">           slitlet on the image row */</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>         start = center[slit] - (float) (imsize - 1)/2. ;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         beginCol[slit] = sinfo_new_nint (start) ;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         <span class="comment">/* determine the error of using integer pixels */</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         diff = start - (float)beginCol[slit] ;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>         <span class="comment">/*-------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">         * determine the output shift values by which the rows are finally </span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">           shifted, consider the integer pixel errors  </span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">         * resort shift array to get the row index </span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>         shift[row_index[slit]] = diff ;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     }   </div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     {</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>       <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         {</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>       col_counter = beginCol[slit] ;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>       <span class="comment">/* each slitlet is centered on the final image row */</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>       <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>             {</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>           <span class="keywordflow">if</span> ( col_counter > ilx-1 )</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>                 {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>           col_counter-- ;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>                 }</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>           <span class="keywordflow">if</span> ( col_counter + z*ilx < 0 )</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>                 {</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>           podata[col+row_index[slit]*imsize] = pidata[0] ;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>                 }</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>               <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>                 {   </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                   podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                 }</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                 col_counter++ ;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>             }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>         }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>       cpl_imagelist_set(returnCube,o_img,z);    </div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>     }</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>     cpl_free (row_index) ;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>     cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     cpl_free (center) ;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> }</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> cpl_imagelist * </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> sinfo_new_make_cube_dist ( cpl_image * calibImage,</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>                          <span class="keywordtype">float</span>      firstCol,</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>                          <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                          <span class="keywordtype">float</span>    * shift )</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> {</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     <span class="keywordtype">float</span> di ;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     <span class="keywordtype">float</span> diff, start ;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     <span class="keywordtype">int</span> * row_index ;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordtype">int</span> slit ;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     <span class="keywordtype">int</span> col, z ;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordtype">int</span> imsize ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keywordtype">int</span> * beginCol ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordtype">int</span> col_counter ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span> </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     <span class="keywordflow">if</span> ( NULL == calibImage )</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     {</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no resampled image given!\n"</span>) ;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     }</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     ilx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>     ily=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     pidata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> </div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>     <span class="keywordflow">if</span> ( NULL == distances )</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array given from north_south_test()!"</span>) ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>     }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>     <span class="keywordflow">if</span> ( N_SLITLETS != 32 )</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>     {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>     }</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>     imsize = ilx / N_SLITLETS ;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>     <span class="comment">/* allocate memory */</span>  </div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>     {</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>     }</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     {</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>         cpl_free(row_index) ;</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     }</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>     {</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>         cpl_free(row_index) ;</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         cpl_free(beginCol) ;</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>     }</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>     di = 0. ;</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>     <span class="comment">/* determine the absolute beginning of the slitlets and the distances </span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> <span class="comment">       inside the image*/</span></div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     <span class="comment">/* go through the slitlets of each row of the resampled image */</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     {</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>         <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">         * sort the slitlets in the right spiffi specific way</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment">         * the row_index describes the row index of the current slitlet </span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment">         * in the resulting cube images.</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>         <span class="keywordflow">if</span>(-1 == sinfo_sort_slitlets_array(slit,row_index)) {</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>       cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>       cpl_free(row_index) ;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>       cpl_free(beginCol) ;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>         }</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         <span class="comment">/* determine the integer column on which the slitlet starts */</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         <span class="keywordflow">if</span> ( slit == 0 )</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>         {</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>             start = firstCol ;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>         }</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>             di += distances[slit-1] ;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>             start = firstCol + di ;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>         }</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>         beginCol[slit] = sinfo_new_nint(start) ;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>         <span class="comment">/* determine the error of using integer pixels, its always smaller </span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">           than 1 */</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>         diff = start - (float)beginCol[slit] ;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         <span class="comment">/*---------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="comment">         * determine the output shift values by which the rows are finally </span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> <span class="comment">         * shifted, consider the integer pixel errors and resort shift array </span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> <span class="comment">         * to get the row index </span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>         shift[row_index[slit]] = diff ;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     }   </div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     {</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>       <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         {</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>       col_counter = beginCol[slit] ;</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>       <span class="comment">/* each slitlet is centered on the final image row */</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>       <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>             {</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>           <span class="keywordflow">if</span> ( col_counter > ilx-1 )</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>                 {</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>           col_counter-- ;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>                 }</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>                 <span class="keywordflow">if</span> ( col_counter + z*ilx < 0 )</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>                 {</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>           podata[col+row_index[slit]*imsize] = podata[0] ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>                 }</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>                 {   </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>                   podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>                 }</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>                 col_counter++ ;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>             }</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>         }  </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>       cpl_imagelist_set(returnCube,o_img,z);  </div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     }</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     cpl_free (row_index) ;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>     cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span> </div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> }</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> cpl_imagelist * </div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>                            <span class="keywordtype">float</span>      firstCol,</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>                            <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                            <span class="keywordtype">float</span>    * shift )</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="keywordtype">float</span> di ;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     <span class="keywordtype">float</span> diff, start ;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     <span class="keywordtype">int</span> * row_index ;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>     <span class="keywordtype">int</span> slit ;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     <span class="keywordtype">int</span> col, z ;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     <span class="keywordtype">int</span> imsize ;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     <span class="keywordtype">int</span> * beginCol ;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>     <span class="keywordtype">int</span> col_counter ;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>     <span class="keywordflow">if</span> ( NULL == calibImage )</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>     {</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no resampled image given!\n"</span>) ;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>     }</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>     ilx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     ily=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>     pidata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> </div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>     <span class="keywordflow">if</span> ( NULL == distances )</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>     {</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array given from north_south_test()!"</span>) ;</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>     }</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> </div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>     <span class="keywordflow">if</span> ( N_SLITLETS != 16 )</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     {</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     }</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     imsize = ilx / N_SLITLETS ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> </div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="comment">/* allocate memory */</span>  </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="keywordflow">if</span> ( NULL == (row_index = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     {</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>     }</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     <span class="keywordflow">if</span> ( NULL == (beginCol = (<span class="keywordtype">int</span>*) cpl_calloc(N_SLITLETS, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ) )</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>     {</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory \n"</span> ) ;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>         cpl_free(row_index) ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>     }</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     {</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>         cpl_free(row_index) ;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>         cpl_free(beginCol) ;</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     }</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> </div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     di = 0. ;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     <span class="comment">/* determine the absolute beginning of the slitlets and the distances </span></div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> <span class="comment">       inside the image*/</span></div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ ) </div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <span class="comment">/* go through the slitlets of each row of the resampled image */</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     {</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>         <span class="comment">/* --------------------------------------------------------------</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> <span class="comment">         * sort the slitlets in the right 3D specific way</span></div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> <span class="comment">         * the row_index describes the row index of the current slitlet </span></div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> <span class="comment">         * in the resulting cube images.</span></div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         row_index[slit] = slit ;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>         <span class="comment">/* determine the integer column on which the slitlet starts */</span></div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>         <span class="keywordflow">if</span> ( slit == 0 )</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>         {</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>             start = firstCol ;</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>         }</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>         {</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>             di += distances[slit-1] ;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>             start = firstCol + di ;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>         }</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>         beginCol[slit] = sinfo_new_nint(start) ;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span> </div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>         <span class="comment">/* determine the error of using integer pixels, </span></div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> <span class="comment">           `its always smaller than 1 */</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>         diff = start - (float)beginCol[slit] ;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> </div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>         <span class="comment">/*---------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> <span class="comment">         * determine the output shift values by which the rows are finally </span></div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> <span class="comment">           shifted, consider the integer pixel errors and resort shift array </span></div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">           to get the row index </span></div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>         shift[row_index[slit]] = diff ;</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>     }   </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> </div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>     {</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>         <span class="keywordflow">for</span> ( slit = 0 ; slit < N_SLITLETS ; slit++ )</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>         {</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>             col_counter = beginCol[slit] ;</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>             <span class="comment">/* each slitlet is centered on the final image row */</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>             <span class="keywordflow">for</span> ( col = 0 ; col < imsize ; col++ )</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>             {</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>                 <span class="keywordflow">if</span> ( col_counter > ilx-1 )</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>                 {</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>                     col_counter-- ;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>                 }</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>                 podata[col+row_index[slit]*imsize]=pidata[col_counter+z*ilx];</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>                 col_counter++ ;</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>             }</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>         } </div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>         cpl_imagelist_set(returnCube,o_img,z);   </div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>     }</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     cpl_free (row_index) ;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     cpl_free (beginCol) ;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> </div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> }</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> </div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> cpl_imagelist * </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> sinfo_new_make_3D_cube ( cpl_image * calibImage,</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>                        <span class="keywordtype">int</span>      * kpixshift, </div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>                        <span class="keywordtype">int</span>        kpixfirst )</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> {</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     <span class="keywordtype">int</span> imsize, kslit, kpix ;</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>     <span class="keywordtype">int</span> z, col, recol ;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> </div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     <span class="keywordflow">if</span> ( NULL == calibImage )</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     {</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no resampled image given!\n"</span>) ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     }</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     ilx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     ily=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     pidata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     <span class="keywordflow">if</span> ( NULL == kpixshift )</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>     {</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no shift array given!/n"</span>) ;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>     }</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> </div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     <span class="keywordflow">if</span> ( kpixfirst < 0 )</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     {</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong first valid pixel given!/n"</span>) ;</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     }</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> </div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>     <span class="keywordflow">if</span> ( N_SLITLETS != 16 )</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>     {</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of slitlets given \n"</span> ) ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>     }</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     imsize = ilx / N_SLITLETS ;</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     <span class="keywordflow">if</span> ( NULL == (returnCube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>     {</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube \n"</span> ) ;</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>     }</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> </div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>     <span class="keywordflow">for</span> ( z = 0 ; z < ily ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     {</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>       o_img=cpl_image_new(imsize,N_SLITLETS,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>         kpix       = 0 ;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>         kslit      = 0 ;</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>         recol      = -1 ;</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>         {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>             <span class="keywordflow">if</span> ( col % imsize == 0 ) </div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>             {</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>                 recol = 0 ;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>                 kslit = col/imsize ;</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>                 kpix  = kpixfirst + kpixshift[kslit] ;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>             }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> </div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>             <span class="comment">/* fill each cube plane with one image row */</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>             podata[recol+kslit*imsize] = pidata[col+kpix+z*ilx] ;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>             recol++ ;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>             <span class="keywordflow">if</span> ( recol > imsize )</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>             {</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong column of reconstructed image, i"</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>                                 <span class="stringliteral">"shouldn't happen!\n"</span>) ; </div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>                 cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>             }</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>         }</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>         cpl_imagelist_set(returnCube,o_img,z);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>     }</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> }</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> cpl_imagelist * </div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> sinfo_new_determine_mask_cube ( cpl_imagelist * sourceMaskCube,</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>                               <span class="keywordtype">float</span>     lowLimit,</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                               <span class="keywordtype">float</span>     highLimit )</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> {</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>     cpl_imagelist * retCube ; </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     <span class="keywordtype">int</span> z, n ;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>     <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>     cpl_image* o_img;</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>     <span class="keywordflow">if</span> ( sourceMaskCube == NULL )</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!\n"</span>) ;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>     }</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(sourceMaskCube,0));</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(sourceMaskCube,0));</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>     inp=cpl_imagelist_get_size(sourceMaskCube);</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> </div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> </div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>     <span class="keywordflow">if</span> ( lowLimit > 0. )</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>     {</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lowLimit wrong!\n"</span>) ;</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     }</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>     <span class="keywordflow">if</span> ( highLimit >= 1. || highLimit < 0. )</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>     {</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"highLimit wrong!\n"</span>) ;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>     }</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>     retCube = cpl_imagelist_duplicate (sourceMaskCube) ;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>     onp=inp;</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>     olx=ilx;</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>     oly=ily;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> </div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>     {</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>       o_img=cpl_imagelist_get(retCube,0);</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>         <span class="keywordflow">for</span> ( n = 0 ; n < (int) olx*oly; n++ )</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>         {</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>             <span class="keywordflow">if</span> ( podata[n] == 0. )</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>             {</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>                continue ;</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>             }</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>             <span class="keywordflow">if</span> ( podata[n] == 1. )</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>             {</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>                continue ;</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>             }</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>             <span class="keywordflow">if</span> ( podata[n] >= lowLimit && </div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>                  podata[n] <= highLimit )</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>             {</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>                 podata[n] = 0. ;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>             }</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>             {</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>                 podata[n] = 1. ;</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>             }</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>         }</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     }</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>     <span class="keywordflow">return</span> retCube ;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> }</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> cpl_imagelist * </div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>                          cpl_imagelist * maskCube,</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>                          <span class="keywordtype">int</span>       n_neighbors, <span class="comment">/* 7 */</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                          <span class="keywordtype">int</span>       max_radius ) <span class="comment">/* 5 */</span></div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span> {</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>     cpl_imagelist  * returnCube ;</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     <span class="keywordtype">float</span>** spec=NULL ;</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>     <span class="keywordtype">float</span>* spec1=NULL ;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>     <span class="keywordtype">int</span> n_im, n_bad, n_bad1, n_bad2 ;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>     <span class="keywordtype">int</span> n_planes, specn, nspec1 ;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>     <span class="keywordtype">int</span> i, m, n, z, ni, kk, p ;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>     <span class="keywordtype">int</span> dis, dismin, dismax ;</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>     <span class="keywordtype">int</span> agreed ;</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>     <span class="keywordtype">int</span> xcordi, ycordi, xcordm, ycordm ;</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span> </div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> </div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> </div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>    </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     <span class="keywordflow">if</span> ( NULL == sourceCube )</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>     {</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no source cube given!\n"</span>) ;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     }</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> </div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(sourceCube,0));</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(sourceCube,0));</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>     inp=cpl_imagelist_get_size(sourceCube);</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> </div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>     <span class="keywordflow">if</span> ( NULL == maskCube )</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     {</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no bad pixel mask cube given!\n"</span>) ;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>     }</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>     <span class="keywordflow">if</span> ( n_neighbors <= 0 )</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>     {</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of neighbors in the spectral "</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>                         <span class="stringliteral">"direction given!"</span>) ;</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>     }</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>    </div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>     <span class="keywordflow">if</span> ( max_radius <= 0 )</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>     {</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong maximal radius for interpolation inside "</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>                         <span class="stringliteral">"an image plane given!"</span>) ;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>     }</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> </div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>     returnCube = cpl_imagelist_duplicate(sourceCube) ;</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>     </div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>     n_im     = ilx * ily ;</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>     n_planes = inp ;</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>     spec1=cpl_calloc(300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>     spec=sinfo_new_2Dfloatarray(100,2*n_neighbors+1) ;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> </div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>     <span class="comment">/* loop over the image planes and look for bad pixels and correct them */</span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>     <span class="keywordflow">for</span> ( z = 0 ; z < n_planes ; z++ ) <span class="comment">/* go through image planes */</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>     {</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>       m_img=cpl_imagelist_get(maskCube,z);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>       pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>       o_img=cpl_imagelist_get(returnCube,z);</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> </div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span> <span class="comment">         * determine n, the length of one wing in one spectrum with which the </span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> <span class="comment">         * bad pixel will be interpolated. The length of one wing is </span></div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> <span class="comment">           n_neighbors but less at the edges of the cube. </span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>         <span class="keywordflow">if</span> ( z < n_neighbors )</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>         {</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>             n = z ;</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>         }</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( n_planes - z <= n_neighbors)</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>         {</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>             n = n_planes - z -1 ;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>         }</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>         { </div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>             n = n_neighbors ;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>         }</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> </div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_im ; i ++ ) <span class="comment">/* go through one image */</span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>         {</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>             <span class="comment">/* continue if the pixel is a good one */</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>             <span class="keywordflow">if</span> ( pmdata[i] != 0. )</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>             {</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>                 continue ;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>             }</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>         </div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> <span class="comment">             * exclude pixels with too many bad neighbors in the spectrum.</span></div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span> <span class="comment">             * exit if: too few good pixels in the neighboring spectrum or </span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span> <span class="comment">             * good pixels are only on one side of the spectrum.</span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>             n_bad  = 0 ;</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>             n_bad1 = 0 ;</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>             n_bad2 = 0 ;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>             <span class="comment">/* go through the neighbor spectral pixels */</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>             <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ ) </div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>             {</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>                 <span class="keywordflow">if</span> ( pmdata[i] == 0. )</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>                 {</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>                     n_bad++ ;</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>                     <span class="comment">/* count bad pixels on either spectral side of </span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> <span class="comment">                       the bad pixel to be interpolated */</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>                     <span class="keywordflow">if</span> ( ni < z )</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>                     {</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>                         n_bad1++ ;</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>                     }</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>                     <span class="keywordflow">if</span> ( ni > z )</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>                     {</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>                         n_bad2++ ;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>                     }</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>                 }</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>             }</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>          </div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>             <span class="comment">/*--------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="comment">             * now the criteria are checked which the neighborhood in the </span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment">               spectral dimension has to match if the pixel is interpolatable.</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="comment">             * The total number of the good pixel in the spectrum must be more </span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="comment">               than 3 and there must be at least one good pixel on either side </span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> <span class="comment">               of the central pixel.</span></div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>             <span class="keywordflow">if</span> ( (2*n+1 - n_bad) < 3 || (n - n_bad1) < 1 || (n - n_bad2) < 1 )</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>             {</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>                 continue ;</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>             }</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>             </div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>             <span class="comment">/* read the master spectrum into the first row of the array spec */</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>             kk = 0 ;</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>             <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>             {</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>           i_img=cpl_imagelist_get(sourceCube,ni);</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>               pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>                 spec[1][kk] = pmdata[i] != 0. ? pidata[i] : ZERO ;</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>                 kk++ ; <span class="comment">/* length of spectrum */</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>             }</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>             </div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>             <span class="comment">/* look for appropriate neighbors in the x-y neighborhood */</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>             agreed = 1 ; <span class="comment">/* loop guard */</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>             specn  = 2 ; <span class="comment">/* number of spectra in spec. </span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment">                            First is master spectrum */</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>             dismin = 0 ; <span class="comment">/* x+y minimal distance to bad pixel */</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>             dismax = 1 ; <span class="comment">/* x+y maximal distance to bad pixel */</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>             <span class="keywordflow">do</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>             {</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>                 <span class="keywordflow">for</span> ( m = 0 ; m < n_im ; m++ )</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>                 {</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>                     <span class="keywordflow">if</span> ( pmdata[m] == 0. )</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>                     {</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>                         continue ;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>                     }</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span> </div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>                     <span class="comment">/* --------------------------------------------------------</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> <span class="comment">                     * determine the x and y coordinates of the bad pixel (i)</span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> <span class="comment">                     * and the pixels used to interpolate (m) </span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>                     xcordi = i % ilx ;</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>                     xcordm = m % ilx ;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>                     ycordi = i / ilx ;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>                     ycordm = m / ilx ;</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>                     <span class="comment">/*----------------------------------------------------- </span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> <span class="comment">                     * check the distance: take only close pixels</span></div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> <span class="comment">                     * extension 'i' is coordinate of the bad pixel to be </span></div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> <span class="comment">                       interpolated</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>                     dis = abs(xcordi-xcordm) + abs(ycordi-ycordm) ;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>                     <span class="keywordflow">if</span> ( dis <= dismin || dis > dismax )</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>                     {</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>                         continue ;</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>                     }</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>                     <span class="comment">/*--------------------------------------------------------</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> <span class="comment">                     * check on number of bad pixels in the spectrum of a </span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="comment">                     * neighbor pixel; reject it if it contains less than 2 </span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="comment">                     * usable pixel pairs. a bit more explanation:</span></div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> <span class="comment">                     * let this be a 15 pixel spectrum with the pixel to be </span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="comment">                     * interpolated denoted by '0' and other bad pixels marked </span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> <span class="comment">                     * with 'b'. Good pixels are marked with '1'. Below a </span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="comment">                     * neighbor spectrum is drawn containing bad pixels as </span></div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> <span class="comment">                     * well. The third line shows the position of the usable </span></div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> <span class="comment">                     * pixel pairs, spectral</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> <span class="comment">                     * positions, where both spectra have valid pixels.</span></div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span> <span class="comment">                     *</span></div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span> <span class="comment">                     *   1 1 1 b b 1 1 0 b 1 b b 1 b b</span></div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> <span class="comment">                     *   b 1 1 1 b b 1 1 1 1 1 1 b b 1</span></div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> <span class="comment">                     *     ^ ^       ^     ^             4 good pixel pairs</span></div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>       </div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>                     n_bad = 0 ;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>                     <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>                     {</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>                         <span class="keywordflow">if</span> ( pmdata[i] == 0. || pmdata[m] == 0. )</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>                         {</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>                             n_bad++ ;</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>                         }</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>                     }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>                     <span class="keywordflow">if</span> ( n_bad > 2*n-1 ) </div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>                     <span class="comment">/* we need at least 2 usable pixel pairs */</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>                     {</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>                         continue ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>                     }</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>                     </div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>                     <span class="comment">/* transfer the spectrum to the next position </span></div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment">                       of array spec */</span></div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>                     kk = 0 ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>                     <span class="keywordflow">for</span> ( ni = z-n ; ni <= z+n ; ni++ )</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>                     {</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>               i_img=cpl_imagelist_get(sourceCube,ni);</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>               pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>                         spec[specn][kk] = pmdata[m] != 0. ? pidata[m] : ZERO ;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>                         kk++ ;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>                     }</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>                     specn++ ;</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>                     <span class="keywordflow">if</span> ( specn > 10 ) <span class="comment">/* if we have 9 neighbors then break */</span></div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>                     {</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>                         agreed = 0 ;</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>                         break ;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>                     }</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>                 }</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>                 <span class="comment">/* if no break, increase search radius and continue */</span></div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>                 dismin++ ;        </div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>                 dismax++ ;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>                 <span class="comment">/* if search radius is too big, exit with fewer </span></div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> <span class="comment">                   good neighbors */</span></div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>                 <span class="keywordflow">if</span> ( dismax > max_radius )</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>                 {</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>                     agreed = 0 ;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>                 }</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>             }   <span class="keywordflow">while</span>(agreed) ;    </div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>                        </div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>             specn-- ;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>             dismax -= 2 ;</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>             <span class="comment">/* TODO: why compute dismax is later this is not used? */</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> <span class="comment">             * Take the master spectrum with the bad pixel in the middle and </span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> <span class="comment">               divide it by each of the neighbor spectra and normalize the </span></div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span> <span class="comment">               division with the value in  the center position.</span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>             <span class="keywordflow">for</span> ( kk = 0 ; kk < 2*n+1 ; kk++ )</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>             {</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>                 <span class="keywordflow">if</span> ( kk == n )    <span class="comment">/* do not divide the master bad pixel */</span></div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>                 {</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>                     continue ;</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>                 }</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> </div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>                 <span class="comment">/* do not divide bad pixels in the master spectrum */</span></div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>                 <span class="keywordflow">if</span> ( isnan(spec[1][kk]) ) </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>                 {</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>                     <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>                     {</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>                         spec[p][kk] = ZERO ;</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>                     }</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>                 }    </div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>                 <span class="keywordflow">else</span>       <span class="comment">/* all is well, now divide */</span></div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>                 {</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>                     <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>                     {</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>                         <span class="keywordflow">if</span> ( !isnan(spec[p][kk]) && spec[p][kk] != 0. &&</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>                              !isnan(spec[p][n]) )</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>                         {</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>                             spec[p][kk] = spec[1][kk] / </div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>                                           spec[p][kk] * spec[p][n] ;</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>                         }</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>                         {</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>                             spec[p][kk] = ZERO ;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>                         }</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>                     }</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>                 }</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>             }</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>  </div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span> <span class="comment">             * determine the sinfo_median of all values. With 9 good neighbors </span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="comment">             * and at least 2 good values per neighbor we have between 18 and </span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <span class="comment">             * 9*14 values for the statistics. If there are not enough good </span></div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> <span class="comment">             * neighbors available, only continue if we have collected at </span></div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> <span class="comment">             * least 18 values.</span></div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>             nspec1 = 0 ;  </div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>             <span class="comment">/* collect the good values in the array spec1 */</span> </div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>             <span class="keywordflow">for</span> ( p = 2 ; p <= specn ; p++ )</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>             {</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>                 <span class="keywordflow">for</span> ( kk = 0 ; kk < 2*n+1 ; kk++ )</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>                 {</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>                     <span class="keywordflow">if</span> ( !isnan(spec[p][kk]) && kk != n )</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>                     {</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>                         spec1[nspec1] = spec[p][kk] ;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>                         nspec1++ ;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>                     }</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>                 }</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>             }</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>             </div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>             <span class="comment">/* now test if we have at least 18 values */</span></div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>             <span class="keywordflow">if</span> ( nspec1 < 18 )</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>             {</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>                 continue ;</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>             }</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>  </div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>             <span class="comment">/* interpolate the bad pixel by the sinfo_median of spec1 */</span></div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>             podata[i] = sinfo_new_median(spec1, nspec1) ;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>             pmdata[i] = 1 ;</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>         }</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>     }           </div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>     sinfo_new_destroy_2Dfloatarray(&spec,2*n_neighbors+1) ;</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>     cpl_free(spec1);</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> }</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> cpl_imagelist * </div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> sinfo_new_fine_tune_cube( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>                                      <span class="keywordtype">float</span>   * correct_diff_dist,</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>                                      <span class="keywordtype">int</span>       n_order )</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> {</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>     <span class="keywordtype">float</span>* row_data=NULL ;</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>     <span class="keywordtype">float</span>* corrected_row_data=NULL ;</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>     <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>     <span class="keywordtype">float</span> sum, new_sum ;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>     <span class="keywordtype">float</span> eval<span class="comment">/*, dy*/</span> ;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     <span class="keywordtype">float</span> * imageptr ;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     <span class="keywordtype">int</span> row, col ;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>     <span class="keywordtype">int</span> i, z ;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>     <span class="keywordtype">int</span> imsize, n_points ;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>     <span class="keywordtype">int</span> firstpos ;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>     <span class="keywordtype">int</span>  flag;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>    </div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> </div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>     {</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>     }</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> </div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>     {</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!n"</span>) ;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>     }</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>   </div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>     <span class="keywordflow">if</span> ( n_order <= 0 )</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>     {</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>     returnCube = cpl_imagelist_duplicate(cube);</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>         <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>     }</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span> </div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>     returnCube = cpl_imagelist_duplicate(cube);</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>     </div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>     imsize = ily ;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>     {</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     }</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> </div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>     n_points = n_order + 1 ;</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>     <span class="keywordflow">if</span> ( n_points % 2 == 0 )</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>     {</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>         firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>     }</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>     {</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>         firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>     }</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>     xnum=cpl_calloc(n_order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> </div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>     {</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>         xnum[i] = i ;</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>     }    </div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> </div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> </div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>     {</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>       i_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>       o_img=cpl_imagelist_get(returnCube,z);</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> </div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> </div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>         {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>             {</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>                 corrected_row_data[col] = 0. ;</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>             }</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>             sum = 0. ; </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>             {</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>                 row_data[col] = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>                 <span class="keywordflow">if</span> ( isnan(row_data[col]) )</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>                 {</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>                     row_data[col] = 0. ;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>                     <span class="keywordflow">for</span> ( i = col - firstpos ; </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>                           i < col -firstpos+n_points ; i++ )</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>                     {</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>                         <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>                         <span class="keywordflow">if</span> ( i >= ilx) continue ; </div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>                         corrected_row_data[i] = ZERO ;</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>                     }</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>                 }</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>                 {</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>                     sum += row_data[col] ;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>                 }</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>             }</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span> </div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>            </div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>             new_sum = 0. ;</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>             {</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>                 </div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>                 <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) )</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>                 {</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>                     continue ;</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>                 }</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>                 <span class="keywordflow">if</span> ( col - firstpos < 0 )</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>                 {</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>                     imageptr = &row_data[0] ;</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>                     eval     = correct_diff_dist[row] + col ;</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>                 }</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col - firstpos + n_points >= ilx )</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>                 {</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>                     imageptr = &row_data[ilx - n_points] ;</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>                     eval     = correct_diff_dist[row] + col + n_points - ilx ;</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>                 }</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>                 {</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>                     imageptr = &row_data[col-firstpos] ;</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>                     eval     = correct_diff_dist[row] + firstpos ;</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>                 }</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> </div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>         </div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>         flag = 0;</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>         corrected_row_data[col]=sinfo_new_nev_ille(xnum, imageptr, </div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>                                                        n_order, eval, &flag);</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>                </div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>                 {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>                     new_sum += corrected_row_data[col] ;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>                 }</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>             }</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>             {</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>                 </div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>                 <span class="keywordflow">if</span> ( col == 0 )</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>                 {</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>                 }</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>                 {</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>                 }</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>                 {</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>                     <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) ) </div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>                     {</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>                         podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>                     }</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>                     {</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>                         <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum = 1. ;</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>                      </div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>                         podata[col+row*ilx] = corrected_row_data[col] ;</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                     }</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>                 }</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>             }</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>         }</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>     }       </div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> </div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>     cpl_free(xnum) ;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>     cpl_free(row_data) ;</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>     cpl_free(corrected_row_data) ;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span> </div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> }</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> cpl_imagelist * </div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>                                            <span class="keywordtype">float</span>   * correct_diff_dist )</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> {</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> </div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>     <span class="keywordtype">float</span>* row_data=NULL ;</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>     dcomplex* data=NULL ;</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>     dcomplex* corrected_data=NULL ;</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> </div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>     <span class="keywordtype">unsigned</span> nn[2];</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>     <span class="comment">/*float corrected_row_data[cube->lx] ;*/</span></div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>     <span class="keywordtype">float</span> phi, pphi ;</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>     <span class="keywordtype">float</span> coph, siph ;</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>     <span class="keywordtype">int</span> row, col ;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>     <span class="keywordtype">int</span> i, z ;</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>     <span class="keywordtype">int</span> imsize ;</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>     <span class="keywordtype">int</span> blank_indicator ;</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> </div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>    </div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span> </div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> </div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span> </div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>     {</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input cube given!\n"</span>) ;</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>     }</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> </div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>     nn[1] = ilx ;</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>     {</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!"</span>) ;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>     }</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span> </div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>     returnCube = cpl_imagelist_duplicate( cube ) ;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> </div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>     imsize = ily ;</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>     {</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>     }</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> </div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>     data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(dcomplex)) ;</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>     corrected_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(dcomplex)) ;</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> </div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>     <span class="comment">/* loop over the image planes */</span></div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>     {</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>       i_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>       o_img=cpl_imagelist_get(returnCube,z);</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>         <span class="comment">/* consider one row at a time */</span></div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>         {</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>             blank_indicator = 1 ;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>             {</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>                 <span class="comment">/* transfer the row data to a double sized array */</span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>                 row_data[col] = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>         data[col].x = row_data[col] ;</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>         data[col].y = 0. ;</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>                 <span class="comment">/* if row contains a blank pixel proceed */</span></div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>                 <span class="keywordflow">if</span> ( isnan(row_data[col]) )</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>                 {</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>                     blank_indicator = 0 ; </div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>                 }</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>             }</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> </div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>             <span class="comment">/* if row contains a blank don't apply FFT but proceed */</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>             <span class="keywordflow">if</span> ( blank_indicator == 0 )</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>             {</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>                 <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>                 {</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>                 }</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>                 continue ;</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>             }</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>            </div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>             <span class="comment">/* FFT algorithm of eclipse */</span></div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>             sinfo_fftn( data, nn, 1, 1 ) ;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>  </div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>             <span class="comment">/* calculate the corrected phase shift for each frequency */</span></div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>             phi = 2*PI_NUMB/(float)ilx * correct_diff_dist[row] ;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>             <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>             {</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>                 <span class="comment">/* positive frequencies */</span></div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>                 <span class="keywordflow">if</span> ( i <= ilx/2 )</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>                 {</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>                     <span class="comment">/* phase shift */</span></div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>                     pphi = phi * (float)(i) ;</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>                     <span class="comment">/* Euler factor */</span></div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>                     coph = cos ( pphi ) ;</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>                     siph = sin ( pphi ) ;</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>                 }</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>                 <span class="keywordflow">else</span> <span class="comment">/* negative frequencies */</span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>                 {</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>                     <span class="comment">/* phase shift */</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>                     pphi = phi * (float)(i - ilx/2) ;</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>                     <span class="comment">/* Euler factor */</span></div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>                     coph = cos ( pphi ) ;</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>                     siph = sin ( pphi ) ;</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>                 }</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> </div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>                 <span class="comment">/* ------------------------------------------------------------</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> <span class="comment">                 * now calculate the shift in the pixel space by multiplying</span></div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> <span class="comment">                 * the fourier transform by the Euler factor of the phase shift</span></div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> <span class="comment">                 * and inverse fourier transforming.</span></div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> <span class="comment">                 * used Fourier pair: h(x-x0) <==> H(k)*exp(2*pi*i*k*x0) </span></div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>                 <span class="comment">/* calculate real part */</span></div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>                 corrected_data[i].x   = data[i].x * coph - data[i].y * siph ; </div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>                 <span class="comment">/* calculate imaginary part */</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>                 corrected_data[i].y = data[i].x * siph + data[i].y * coph ;</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>             }</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>  </div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>             <span class="comment">/* transform back: inverse FFT */</span></div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>             sinfo_fftn( corrected_data, nn, 1, -1 ) ;</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> </div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>             <span class="comment">/* normalize */</span> </div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>             <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>             {</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>                 corrected_data[i].x /= ilx ;</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>         corrected_data[i].y /= ilx ;</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>             } </div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> </div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>             <span class="comment">/* now transfer row to output, leave the left-most </span></div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> <span class="comment">               and right-most pixel column */</span></div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>             {</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>                 <span class="keywordflow">if</span> ( col == 0 )</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>                 {</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>                 }</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>                 {</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>                 }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>                 {</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>                     podata[col+row*ilx] = corrected_data[col].x ; </div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>                 }</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>             }</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>         }</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>     }</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> </div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>     cpl_free(data) ;</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>     cpl_free(corrected_data) ;</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> </div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>     cpl_free(row_data);</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span> }</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> cpl_imagelist * sinfo_new_fine_tune_cube_by_spline ( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>                                                <span class="keywordtype">float</span>   * correct_diff_dist )</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> {</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>     cpl_imagelist * returnCube ;</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> </div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>     <span class="keywordtype">float</span>* row_data=NULL ;</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>     <span class="keywordtype">float</span>* corrected_row_data=NULL ;</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>     <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>     <span class="keywordtype">float</span>* eval=NULL ;</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> </div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>     <span class="keywordtype">float</span> sum, new_sum ;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>     <span class="keywordtype">int</span> row, col ;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>     <span class="keywordtype">int</span> i, z ;</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>     <span class="keywordtype">int</span> imsize ;</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>    </div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> </div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>  </div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>     {</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>     }</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> </div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>     <span class="keywordflow">if</span> ( NULL == correct_diff_dist )</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>     {</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no distances array from ns_test given!/n"</span>) ;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>     }</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>   </div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>     imsize = ily ;</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>     <span class="keywordflow">if</span> ( imsize != N_SLITLETS )</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>     {</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image size\n"</span> ) ;</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>     }</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>   </div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     returnCube = cpl_imagelist_duplicate( cube ) ;</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span> </div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>     row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     corrected_row_data=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>     xnum=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>     eval=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>   </div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     <span class="comment">/* fill the xa[] array for a polynomial interpolation */</span></div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>     {</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>         xnum[i] = i ;</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>     }    </div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> </div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>     <span class="comment">/* loop over the image planes */</span></div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>     {</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>       i_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>       o_img=cpl_imagelist_get(returnCube,z);</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>         <span class="comment">/* consider 1 row at a time */</span></div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>         <span class="keywordflow">for</span> ( row = 0 ; row < imsize ; row++ )</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>         {</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>             {</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>                 corrected_row_data[col] = 0. ;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>             }</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>         sum = 0. ; <span class="comment">/* initialize flux for later rescaling */</span></div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>             <span class="comment">/* go through the columns and compute the flux for each </span></div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span> <span class="comment">               row (leave the sinfo_edge points) */</span></div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>             {   </div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>             eval[col] = correct_diff_dist[row] + (float)col ;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>                 row_data[col] = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>                 <span class="keywordflow">if</span> (col != 0 && col != ilx - 1 && !isnan(row_data[col]) )</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>                 {</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>                     sum += row_data[col] ;</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>                 }</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>                 <span class="keywordflow">if</span> (isnan(row_data[col]) )</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>                 {</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>                     <span class="keywordflow">for</span> ( i = col -1 ; i <= col+1 ; i++ ) </div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>                     {</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>                         <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>                         <span class="keywordflow">if</span> ( i >= ilx ) continue ;</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>                         corrected_row_data[i] = ZERO ; </div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>                     }</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>                     row_data[col] = 0. ;</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>                 }</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>         }</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> </div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span> </div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> <span class="comment">             * now we do the cubic spline interpolation to achieve the </span></div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> <span class="comment">               fractional (see eclipse).</span></div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>             <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,row_data, ilx, </div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>                                                        eval,corrected_row_data,</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>                                                        ilx ) )</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>         {</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation\n"</span>) ;</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>         cpl_imagelist_delete(returnCube) ;</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>         }    </div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> </div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>             new_sum = 0. ;</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>             {</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>                 <span class="keywordflow">if</span> (isnan(corrected_row_data[col])) continue ;</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>                 <span class="comment">/* don't take the sinfo_edge points to calculate </span></div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="comment">                   the scaling factor */</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>                 <span class="keywordflow">if</span> ( col != 0 && col != ilx - 1 )</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>                 {</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>                     new_sum += corrected_row_data[col] ;</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>                 }</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>             }</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>             {</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>                 <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span> <span class="comment">                 * rescale the row data and fill the returned cube, </span></div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span> <span class="comment">                 * leave the left-most and right-most</span></div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span> <span class="comment">                 * pixel column </span></div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>                 <span class="keywordflow">if</span> ( col == 0 )</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>                 {</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>                 }</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( col == ilx - 1 )</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>                 {</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>                     podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>                 }</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>                 {</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>                     <span class="keywordflow">if</span> ( isnan(corrected_row_data[col]) ) </div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>                     {</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>                         podata[col+row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>                     }</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>                     {</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>                         <span class="keywordflow">if</span> (new_sum == 0.) new_sum = 1. ;</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>                      <span class="comment">/* rescaling is commented out because it delivers </span></div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> <span class="comment">                        wrong results</span></div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> <span class="comment">                        in case of appearance of blanks or bad pixels */</span></div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>                   <span class="comment">/*       corrected_row_data[col] *= sum / new_sum ; */</span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>                         podata[col+row*ilx] = corrected_row_data[col] ;</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>                     }</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>                 }</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>             }</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>         }</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>     }       </div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> </div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>     cpl_free(row_data) ;</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>     cpl_free(corrected_row_data) ;</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>     cpl_free(xnum) ;</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>     cpl_free(eval) ;</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span> </div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>     <span class="keywordflow">return</span> returnCube ;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> }</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> </div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> sinfo_new_calibrate_ns_test( cpl_image * ns_image,</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>                            <span class="keywordtype">int</span>        n_slitlets,</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>                            <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>                            <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>                            <span class="keywordtype">float</span>      minDiff,</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>                            <span class="keywordtype">float</span>      estimated_dist,</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>                            <span class="keywordtype">float</span>      devtol,</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>                <span class="keywordtype">int</span>        bottom,</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>                <span class="keywordtype">int</span>        top )</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span> {</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>     <span class="keywordtype">int</span> i, j, k, m, row, col, n, ni, na ;</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>     <span class="keywordtype">int</span> position, counter, iters ;</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>     <span class="keywordtype">int</span> xdim, ndat, its, numpar ;</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>     <span class="keywordtype">float</span> sum, mean, maxval ;</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>     <span class="keywordtype">float</span> tol, lab ;</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>     <span class="keywordtype">float</span> * distances ;</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>     <span class="keywordtype">float</span> * ret_distances ;</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> </div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>     <span class="keywordtype">float</span> * xdat, * wdat ;</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>     <span class="keywordtype">int</span> * mpar ;</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span> </div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>     pixelvalue* row_buf=NULL ;</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>     <span class="keywordtype">float</span>** distances_buf=NULL ;</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordtype">float</span>* x_position=NULL ;</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>     <span class="keywordtype">int</span>* found=NULL;</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>     <span class="keywordtype">int</span>* found_clean=NULL ;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>     <span class="keywordtype">int</span>* found_cleanit=NULL ;</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> </div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>     Vector * line ;</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>     FitParams ** par ;</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>     <span class="keywordtype">int</span> foundit, begin, end ;</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>     <span class="keywordtype">int</span> zeroindicator ;</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>     <span class="keywordtype">int</span> row_index ;</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> </div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> </div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>     <span class="keywordflow">if</span> ( ns_image == NULL )</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>     {</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no image given\n"</span>) ;</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>     }</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>     <span class="keywordflow">if</span> ( n_slitlets < 1 )</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>     {</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of slitlets given\n"</span>) ;</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>     }</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth >= estimated_dist )</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>     {</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong half width given\n"</span>) ;</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>     }</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>     <span class="keywordflow">if</span> ( fwhm <= 0. )</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>     {</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong fwhm given\n"</span>) ;</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>     }</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>     <span class="keywordflow">if</span> ( minDiff < 1. )</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>     {</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong minDiff given\n"</span>) ;</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>     }</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> </div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>     <span class="comment">/* allocate memory for output array */</span></div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>     <span class="keywordflow">if</span> (NULL==(distances=(<span class="keywordtype">float</span> *)cpl_calloc( n_slitlets , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) </div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>     {</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>     }</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>     <span class="comment">/* allocate memory for output array */</span></div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>     <span class="keywordflow">if</span> (NULL == (ret_distances = (<span class="keywordtype">float</span> *) cpl_calloc ( n_slitlets , </div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>                                            <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ))) </div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>     {</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>     }</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span> </div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>     ilx=cpl_image_get_size_x(ns_image);</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>     ily=cpl_image_get_size_y(ns_image);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>     pidata=cpl_image_get_data_float(ns_image);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> </div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>     row_buf=(pixelvalue*)cpl_calloc(ilx,<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>     x_position=cpl_calloc(n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>     found=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>     found_clean=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>     found_cleanit=cpl_calloc(3*n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>     distances_buf=sinfo_new_2Dfloatarray(ily,n_slitlets) ;</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> </div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>     <span class="comment">/* go through the image rows */</span></div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>     {</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>         zeroindicator = 0 ;</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> </div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>         <span class="comment">/* initialize the distance buffer */</span></div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>         {</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>             distances_buf[row][i] = ZERO ;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>         }</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> </div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>         <span class="comment">/* fill the row buffer array with image data */</span></div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>         {</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>             row_buf[col] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>         }</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span> </div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>         <span class="comment">/* determine the mean of the row data */</span></div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>         sum = 0. ;</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>         n = 0 ;</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>         {</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>             <span class="keywordflow">if</span> ( isnan(row_buf[i]) )</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>             {</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>                 continue ;</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>             }</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>             sum += row_buf[i] ;</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>             n++ ;</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>         }</div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>         mean = sum / (float)n ;</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> </div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>         <span class="comment">/* store the positions of image values greater than the mean */</span></div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>         n = 0 ;</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>         {</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>             <span class="keywordflow">if</span> (isnan(row_buf[i]))</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>             {</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>                 continue ;</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>             }</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>             <span class="keywordflow">if</span> ( row_buf[i] > mean + ESTIMATE )</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>             {</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>                 found[n] = i ;</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>                 n++ ;</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>             }</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>         }</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>        </div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>         <span class="keywordflow">if</span> ( n < n_slitlets )</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>         {</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t4 wrong number of intensity columns "</span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>                               <span class="stringliteral">"found in row: %d, found number: %d"</span>, row, n) ;</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>             continue ;</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>         }</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>         { </div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>             <span class="comment">/* find the maximum value position around the found columns */</span></div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>             na = 0 ;</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n ; i ++ )</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>             {</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>                 <span class="keywordflow">if</span> ( found[i] - found[i-1] < halfWidth )</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>                 {</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>                     begin = found[i] - halfWidth ;</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>                     <span class="keywordflow">if</span> ( begin < 0 )</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>                     {</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>                         begin = 0 ;</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>                     }</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>                     end = found[i] + halfWidth ;</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>                     <span class="keywordflow">if</span> ( end >= ilx )</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>                     {</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>                         end = ilx - 1 ;</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>                     }</div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>                     <span class="comment">/* find the maximum value inside the box around </span></div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> <span class="comment">                       the found positions*/</span></div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>                     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>                     foundit = 0 ;</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>                     <span class="keywordflow">for</span> ( j = begin ; j <= end ; j++ )</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>                     {</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>                         <span class="comment">/* do not consider boxes that contain bad pixels */</span></div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>                         <span class="keywordflow">if</span> (isnan(row_buf[j]))</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>                         {</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>                             continue ;</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>                         }</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>                         <span class="keywordflow">if</span> (row_buf[j] >= maxval )</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>                         {</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>                             maxval = row_buf[j] ;</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>                             foundit = j ;</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>                         }</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>                     }</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>                     <span class="keywordflow">if</span> (maxval == -FLT_MAX)</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>                     {</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>                         continue ;</div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>                     }</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>                     <span class="keywordflow">for</span> ( k = 0 ; k < na ; k++ )</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>                     {</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                         <span class="keywordflow">if</span> ( found_cleanit[k] >= begin && </div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>                              found_cleanit[k] < foundit )</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>                         {</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>                             na-- ;</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>                         }</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>                     }</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>                     <span class="keywordflow">for</span> ( k = 0 ; k < n ; k++ )</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>                     {</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>                         <span class="keywordflow">if</span> ( found[k] == foundit)</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>                         {</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>                             <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[k] )</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>                             {</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>                                 found_cleanit[na] = found[k] ;</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>                                 na++ ;</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>                             }</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>                         }</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>                     }</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>                 }</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>                 {</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>                     <span class="keywordflow">if</span> ( i == 1 )</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>                     {</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>                         found_cleanit[na] = found[0] ;</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>                         na++ ;</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>                         found_cleanit[na] = found[1] ;</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>                         na++ ;</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>                     }</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>                     {</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>                         <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i-1])</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>                         {</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>                             found_cleanit[na] = found[i-1] ;</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>                             na++ ;</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>                         }</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>                         <span class="keywordflow">if</span> ( found_cleanit[na-1] != found[i])</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>                         {</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>                             found_cleanit[na] = found[i] ;</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>                             na++ ;</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>                         }</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>                     }</div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>                 }</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>             }</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span> </div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>             <span class="comment">/* determine only one pixel position for each slitlet intensity */</span></div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>             j = 1 ;</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>             <span class="keywordflow">for</span> ( i = 1 ; i < na ; i++ )</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>             {</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) < </div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>                              (estimated_dist - devtol) ||</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>                      (<span class="keywordtype">float</span>)(found_cleanit[i] - found_cleanit[i-1]) > </div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>                              (estimated_dist + devtol) )</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>                 {</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>                     continue ;</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>                 }</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>                 {</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>                     found_clean[j-1] = found_cleanit[i-1] ;</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>                     found_clean[j]   = found_cleanit[i] ;</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>                     j++ ;</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>                 }</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>             }</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>         }</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>         <span class="keywordflow">if</span> ( j > n_slitlets )</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>         {</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>             <span class="comment">/* check the distance again */</span></div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>             ni = 1 ;</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>             <span class="keywordflow">for</span> ( i = 1 ; i < j ; i++ )</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>             {</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>                 <span class="keywordflow">if</span> ( (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) < </div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>                             (estimated_dist - devtol ) ||</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>                      (<span class="keywordtype">float</span>)(found_clean[i] - found_clean[i-1]) > </div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>                             (estimated_dist + devtol ) )</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>                 { </div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>                     continue ;</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>                 }</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>                 {</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>                     found_clean[ni-1] = found_clean[i-1] ;</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>                     found_clean[ni]   = found_clean[i] ;</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>                     ni++ ;</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>                 }</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>             }</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>             <span class="keywordflow">if</span> ( ni != n_slitlets )</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>             {</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t5 wrong number of intensity columns "</span></div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>                                   <span class="stringliteral">"found in row: %d, found number: %d"</span>,</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>                                   row,ni) ;</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>                 continue ;</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>             }</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>             {</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>                 j = ni ;</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>             }</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>         }</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j < n_slitlets )</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>         {</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"t6 wrong number of intensity columns found "</span></div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>                               <span class="stringliteral">"in row: %d , found number: %d\n"</span>, row, j) ;</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>             continue ;</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>         }</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>         counter = 0 ;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>         <span class="comment">/* go through the found intensity pixels in one row */</span></div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>         {</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>             <span class="comment">/* allocate memory for the array where the line is fitted in */</span></div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>             <span class="keywordflow">if</span> ( NULL == (line = sinfo_new_vector (2*halfWidth + 1)) )</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>             {</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>                 cpl_free(distances) ;</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>             }</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> </div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>             <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>             xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>             wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>             mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>             par = sinfo_new_fit_params(1) ;</div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> </div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>             m = 0 ;</div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>             <span class="keywordflow">for</span> ( k = found_clean[i]-halfWidth ; </div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>                   k <= found_clean[i]+halfWidth ; k++ )</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>             {</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>                 <span class="keywordflow">if</span> ( k < 0 )</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>                 {</div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>                     k = 0. ;</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>                 }</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( k >= ilx )</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>                 {</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>                     k = ilx - 1 ;</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>                 }</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(row_buf[k]) )</div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>                 {</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>                     zeroindicator = 1 ;</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>                     break ;</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>                 }</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>                 {</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>                     line -> data[m] = row_buf[k] ;</div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>                     m++ ;</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>                 }</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>             }</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>             <span class="keywordflow">if</span> ( zeroindicator == 1 )</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>             {</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>                 break ;</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>             }</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span> </div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span> <span class="comment">             * go through the spectral sinfo_vector</span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> <span class="comment">             * determine the maximum pixel value in the spectral sinfo_vector</span></div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>             maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>             position = -INT32_MAX ;</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>             <span class="keywordflow">for</span> ( k = 0 ; k < m ; k++ )</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>             {</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>                 xdat[k] = k ;</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>                 wdat[k] = 1.0 ;</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>                 <span class="keywordflow">if</span> ( line -> data[k] >= maxval )</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>                 {</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>                     maxval = line -> data[k] ;</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>                     position = k ;</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>                 }</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>             }</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span> </div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>             <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>             xdim     = XDIM ;</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>             ndat     = line -> n_elements ;</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>             numpar   = MAXPAR ;</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>             tol      = TOL ;</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>             lab      = LAB ;</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>             its      = ITS ;</div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>             (*par) -> fit_par[1] = fwhm ;</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>             (*par) -> fit_par[2] = (float) position ;</div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>             (*par) -> fit_par[3] = (float) (line -> data[0] + </div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>                                     line -> data[line->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>             (*par) -> fit_par[0]  = maxval - ((*par) -> fit_par[3]) ;</div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> </div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span> </div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>             <span class="comment">/* exclude negative peaks and low signal cases */</span></div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] < minDiff )</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>             {</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sorry, signal of line too low to fit "</span></div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>                                    <span class="stringliteral">"in row: %d in slitlet %d\n"</span>, row, i) ;</div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>                 continue ;</div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>             }</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> </div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>             <span class="keywordflow">for</span> ( k = 0 ; k < MAXPAR ; k++ )</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>             {</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>                 (*par) -> derv_par[k] = 0.0 ;</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>                 mpar[k] = 1 ;</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>             }</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>             <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>             <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c(xdat, &xdim, </div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>                                                   line -> data, wdat, </div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>                                                   &ndat, (*par) -> fit_par,</div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>                                                   (*par) -> derv_par, mpar, </div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>                                                   &numpar, &tol, </div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>                                                   &its, &lab )) )</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>             {</div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>           <span class="comment">/*</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span> <span class="comment">               cpl_msg_debug ("sinfo_calibrate_ns_test:",</span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span> <span class="comment">                              "sinfo_lsqfit_c: least squares fit failed,"</span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span> <span class="comment">                              " error no.: %d in row: %d in slitlet %d\n", </span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> <span class="comment">                              iters, row, i) ;</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> <span class="comment">          */</span></div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>                 continue ;</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>             }</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span> </div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>             <span class="comment">/* check for negative fit results */</span></div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>             <span class="keywordflow">if</span> ( (*par) -> fit_par[0] <= 0. || (*par) -> fit_par[1] <= 0. ||</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>                  (*par) -> fit_par[2] < 0. )</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>             {</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative parameters as fit result, not "</span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>                                    <span class="stringliteral">"used! in row %d in slitlet %d"</span>, row, i) ;</div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>                 sinfo_new_destroy_vector(line) ;</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>                 cpl_free(xdat) ;</div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>                 cpl_free(wdat) ;</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>                 cpl_free(mpar) ;</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>                 sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>                 continue ;</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>             }</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span> </div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>             <span class="comment">/* correct the fitted position for the given row of the line </span></div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> <span class="comment">               in image coordinates */</span></div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>             (*par) -> fit_par[2] =  (float) (found_clean[i] - halfWidth) + </div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>                                     (*par) -> fit_par[2] ;</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>             x_position[counter] = (*par) -> fit_par[2] ;</div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>             counter ++ ;</div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> </div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>             <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>             sinfo_new_destroy_fit_params(&par) ;</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>             sinfo_new_destroy_vector ( line ) ;</div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>         }</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>         <span class="keywordflow">if</span> (zeroindicator == 1)</div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>         {</div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>             <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"bad pixel in fitting box in row: %d\n"</span>, row) ;</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>             continue ;</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>         }</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> </div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>         <span class="keywordflow">if</span> ( counter != n_slitlets )</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>         {</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong number of slitlets found "</span></div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>                               <span class="stringliteral">"in row: %d"</span>, row) ;</div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>             continue ;</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>         }</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>         <span class="comment">/* store the distances between the sources and the slitlet centers */</span></div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>         {</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>             distances_buf[row][i] = x_position[i] - (15.5 + 32.*(float)i) ;</div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>         }</div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>     }</div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span> </div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>     <span class="comment">/* ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> <span class="comment">     * go through the rows again and take the mean of the distances, </span></div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span> <span class="comment">     * throw away the runaways </span></div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>     {</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>         n   = 0 ;</div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>         sum = 0. ;</div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>         <span class="keywordflow">for</span> ( row = bottom ; row < top ; row++ )</div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>         {</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>             <span class="keywordflow">if</span> ( fabs( distances_buf[row][i] ) > devtol || </div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>                  isnan(distances_buf[row][i]) )</div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>             {</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>              <span class="comment">/*</span></div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span> <span class="comment">          sinfo_msg("dist=%g devtol=%g isan=%d", </span></div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span> <span class="comment">            distances_buf[row][i],</span></div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span> <span class="comment">            devtol,</span></div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span> <span class="comment">            isnan(distances_buf[row][i]));</span></div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> <span class="comment">              */</span>              </div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>                 continue ;</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>             }</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>             sum += distances_buf[row][i] ;</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>             n++ ;</div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>         }</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>         <span class="keywordflow">if</span> ( n < 2 )</div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>         {</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"distances array could not be determined"</span></div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>                             <span class="stringliteral">" completely!, deviations of distances from"</span></div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>                             <span class="stringliteral">" devtol too big"</span> ) ;</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>             cpl_free(distances) ;</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>         }</div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>         {</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>             distances[i] = sum / (float)n ;</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>         }</div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>     }</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span> </div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>     <span class="comment">/* now sort the result according to the row sequence in the </span></div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> <span class="comment">       reconstructed image*/</span></div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>     {</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>       <span class="keywordflow">if</span>( (row_index=sinfo_sort_slitlets(i)) == -1) {</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of a slitlet\n"</span>) ;</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>     cpl_free (distances) ;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>       }</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>       ret_distances[row_index] = distances[i] ;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>     }</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>     cpl_free(distances) ;</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> </div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>     cpl_free(row_buf) ;</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>     cpl_free(x_position) ;</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>     cpl_free(found);</div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>     cpl_free(found_clean) ;</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>     cpl_free(found_cleanit) ;</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>     sinfo_new_destroy_2Dfloatarray(&distances_buf,n_slitlets) ;</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> </div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span> </div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>     <span class="keywordflow">return</span> ret_distances ; </div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> }</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span> cpl_image * </div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span> sinfo_new_make_true_resamp(cpl_image * calibImage, </div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>                            cpl_image * wavemap)</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span> {</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>     cpl_image * returnImage ;</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>     <span class="keywordtype">float</span> edges[33] ;</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>     <span class="keywordtype">int</span> imsize, kslit,i,j ;</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>     <span class="keywordtype">int</span> slit_index ;</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>     <span class="keywordtype">int</span> z, col, recol ;</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>     <span class="keywordtype">int</span> wlx=0;</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>     <span class="keywordtype">int</span> wly=0;</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>   </div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>     <span class="keywordtype">float</span>* pcdata=NULL;</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>     <span class="keywordtype">float</span>* pwdata=NULL;</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>     <span class="keywordtype">float</span>* prdata=NULL;</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> </div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> </div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>     wlx=cpl_image_get_size_x(wavemap);</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>     wly=cpl_image_get_size_y(wavemap);</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>     pwdata=cpl_image_get_data_float(wavemap);</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span> </div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>     edges[0]=0;</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>     j=1;</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>     <span class="keywordflow">for</span>(i=0;i<wlx-1;i++)</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>     {</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>         <span class="keywordflow">if</span>((pwdata[i]-pwdata[i+1])>0.0025 || (pwdata[i]-pwdata[i+1])<-0.0025)</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>     {</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wavemap sinfo_edge %d"</span>, i+1);</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>         edges[j]=i+1;</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>         j++;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>     }</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>     }</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>     edges[32]=2048;</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span> </div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>     clx=cpl_image_get_size_x(calibImage);</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>     cly=cpl_image_get_size_y(calibImage);</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>     pcdata=cpl_image_get_data_float(calibImage);</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>  </div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>     imsize = clx / N_SLITLETS ;</div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span> </div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>     <span class="comment">/* allocate memory */</span>  </div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>     returnImage = cpl_image_new(clx,cly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>     prdata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>     <span class="keywordflow">for</span> ( z = 0 ; z < cly ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>     {</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ ) <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>         prdata[col+z*clx]=ZERO;</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>     }</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>     </div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span> </div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>     <span class="comment">/* now build the data cube out of the resampled image */</span></div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>     <span class="keywordflow">for</span> ( z = 0 ; z < cly ; z++ ) <span class="comment">/* go through the z-axis */</span></div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>     {</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>         kslit      = 0 ;</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>         slit_index = -1 ;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>         recol      = -1 ;</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ ) <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>         {</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>             <span class="comment">/*if ( col % imsize == 0 )</span></div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span> <span class="comment">            {*/</span></div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>                 recol = 0 ;</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>                 <span class="comment">/*kslit = col/imsize ;*/</span></div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>         <span class="keywordflow">for</span>(i=0;i<32;i++)</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>         {</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>           <span class="keywordflow">if</span>(col>=sinfo_new_nint(edges[i]) && </div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>                      col<sinfo_new_nint(edges[i+1]))</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>             kslit=i;</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>         }</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>                 <span class="comment">/* sort the slitlets in the right spiffi specific way */</span></div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>     <span class="keywordflow">if</span>( (slit_index=sinfo_sort_slitlets(kslit)) == -1) {</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong slitlet index: couldn't be a "</span></div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>                              <span class="stringliteral">"spiffi image,  there must be 32 "</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>                 <span class="stringliteral">"slitlets!"</span>) ;</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>         </div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>     }</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span> </div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>             <span class="comment">/*}*/</span></div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>             <span class="comment">/* fill each cube plane with one image row */</span></div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>         <span class="keywordflow">if</span>((col-sinfo_new_nint(edges[kslit]))>0 && </div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>                (col-sinfo_new_nint(edges[kslit]))<imsize-1 )</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>                 prdata[(col-sinfo_new_nint(edges[kslit]))+</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>                        slit_index*imsize+z*clx] = </div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>                       pcdata[col+z*clx] ;</div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>             prdata[(col-sinfo_new_nint(edges[kslit]))+</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>                         slit_index*imsize+z*clx] = ZERO;</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>             <span class="comment">/*recol++ ;*/</span></div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span> </div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>         }</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>     }</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> }</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span> </div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span> <span class="comment">/*The old slitlet order*/</span></div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span> <span class="comment">/*switch (kslit)</span></div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span> <span class="comment">                {</span></div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span> <span class="comment">                    case 0:</span></div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span> <span class="comment">                        slit_index = 23 ;</span></div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> <span class="comment">                    case 1:</span></div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> <span class="comment">                        slit_index = 24 ;</span></div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> <span class="comment">                    case 2:</span></div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span> <span class="comment">                        slit_index = 22 ;</span></div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span> <span class="comment">                    case 3:</span></div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> <span class="comment">                        slit_index = 25 ;</span></div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span> <span class="comment">                    case 4:</span></div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span> <span class="comment">                        slit_index = 21 ;</span></div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> <span class="comment">                    case 5:</span></div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> <span class="comment">                        slit_index = 26 ;</span></div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> <span class="comment">                    case 6:</span></div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span> <span class="comment">                        slit_index = 20 ;</span></div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span> <span class="comment">                    case 7:</span></div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> <span class="comment">                        slit_index = 27 ;</span></div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> <span class="comment">                    case 8:</span></div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span> <span class="comment">                        slit_index = 19 ;</span></div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span> <span class="comment">                    case 9:</span></div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span> <span class="comment">                        slit_index = 28 ;</span></div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span> <span class="comment">                    case 10:</span></div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span> <span class="comment">                        slit_index = 18 ;</span></div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span> <span class="comment">                    case 11:</span></div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span> <span class="comment">                        slit_index = 29 ;</span></div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span> <span class="comment">                    case 12:</span></div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> <span class="comment">                        slit_index = 17 ;</span></div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> <span class="comment">                    case 13:</span></div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span> <span class="comment">                        slit_index = 30 ;</span></div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span> <span class="comment">                    case 14:</span></div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> <span class="comment">                        slit_index = 16 ;</span></div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span> <span class="comment">                    case 15:</span></div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span> <span class="comment">                        slit_index = 31 ;</span></div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> <span class="comment">                    case 16:</span></div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> <span class="comment">                        slit_index = 0 ;</span></div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span> <span class="comment">                    case 17:</span></div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span> <span class="comment">                        slit_index = 15 ;</span></div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span> <span class="comment">                    case 18:</span></div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> <span class="comment">                        slit_index = 1 ;</span></div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span> <span class="comment">                    case 19:</span></div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span> <span class="comment">                        slit_index = 14 ;</span></div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span> <span class="comment">                    case 20:</span></div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span> <span class="comment">                        slit_index = 2 ;</span></div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span> <span class="comment">                    case 21:</span></div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span> <span class="comment">                        slit_index = 13 ;</span></div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span> <span class="comment">                    case 22:</span></div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> <span class="comment">                        slit_index = 3 ;</span></div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span> <span class="comment">                    case 23:</span></div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span> <span class="comment">                        slit_index = 12 ;</span></div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span> <span class="comment">                    case 24:</span></div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span> <span class="comment">                        slit_index = 4 ;</span></div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span> <span class="comment">                    case 25:</span></div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span> <span class="comment">                        slit_index = 11 ;</span></div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> <span class="comment">                    case 26:</span></div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> <span class="comment">                        slit_index = 5 ;</span></div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span> <span class="comment">                    case 27:</span></div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span> <span class="comment">                        slit_index = 10 ;</span></div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span> <span class="comment">                    case 28:</span></div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span> <span class="comment">                        slit_index = 6 ;</span></div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span> <span class="comment">                    case 29:</span></div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span> <span class="comment">                        slit_index = 9 ;</span></div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span> <span class="comment">                    case 30:</span></div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> <span class="comment">                        slit_index = 7 ;</span></div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span> <span class="comment">                    case 31:</span></div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span> <span class="comment">                        slit_index = 8 ;</span></div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span> <span class="comment">                    default:</span></div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span> <span class="comment">                        sinfo_msg_error("wrong slitlet index: couldn't "</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> <span class="comment">                                        "be a spiffi image,  \</span></div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span> <span class="comment">                                 there must be 32 slitlets!\n") ;</span></div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span> <span class="comment">                        cpl_imagelist_delete(returnCube) ;</span></div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span> <span class="comment">                        return NULL ;</span></div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span> <span class="comment">                        break ;</span></div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> <span class="comment">                }*/</span></div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span> </div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span> </div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__cube__construct_8h_source.html b/html/sinfo__cube__construct_8h_source.html
index e8772cc..e5e6bef 100644
--- a/html/sinfo__cube__construct_8h_source.html
+++ b/html/sinfo__cube__construct_8h_source.html
@@ -2,151 +2,182 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_cube_construct.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_cube_construct.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_CUBE_CONSTRUCT_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CUBE_CONSTRUCT_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_cube_construct.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/10/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * ned_cube_construct.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines needed to construct a 3D-data cube</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*</span>
-<a name="l00044"></a>00044 <span class="comment"> * function prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> */</span>
-<a name="l00046"></a>00046 
-<a name="l00057"></a>00057 cpl_image * 
-<a name="l00058"></a>00058 sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,<span class="keywordtype">int</span> hw);
-<a name="l00059"></a>00059 
-<a name="l00076"></a>00076 <span class="keywordtype">float</span> * 
-<a name="l00077"></a>00077 sinfo_north_south_test( cpl_image * ns_image,
-<a name="l00078"></a>00078                           <span class="keywordtype">int</span>        n_slitlets,
-<a name="l00079"></a>00079                           <span class="keywordtype">int</span>        halfWidth,
-<a name="l00080"></a>00080                           <span class="keywordtype">float</span>      fwhm,
-<a name="l00081"></a>00081                           <span class="keywordtype">float</span>      minDiff,
-<a name="l00082"></a>00082                           <span class="keywordtype">float</span>      estimated_dist,
-<a name="l00083"></a>00083                           <span class="keywordtype">float</span>      devtol,
-<a name="l00084"></a>00084               <span class="keywordtype">int</span>        top,
-<a name="l00085"></a>00085               <span class="keywordtype">int</span>        bottom ) ;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 
-<a name="l00111"></a>00111 cpl_imagelist * 
-<a name="l00112"></a>00112 sinfo_new_make_cube ( cpl_image * calibImage,
-<a name="l00113"></a>00113                      <span class="keywordtype">float</span>    * distances,
-<a name="l00114"></a>00114                      <span class="keywordtype">float</span>    * correct_diff_dist ) ;
-<a name="l00115"></a>00115 
-<a name="l00132"></a>00132 cpl_imagelist * 
-<a name="l00133"></a>00133 sinfo_new_make_cube_spi ( cpl_image *  calibImage,
-<a name="l00134"></a>00134                         <span class="keywordtype">float</span>    ** slit_edges,
-<a name="l00135"></a>00135                         <span class="keywordtype">float</span>    *  shift ) ;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 
-<a name="l00164"></a>00164 cpl_imagelist * 
-<a name="l00165"></a>00165 sinfo_new_make_cube_dist ( cpl_image * calibImage,
-<a name="l00166"></a>00166                          <span class="keywordtype">float</span>      firstCol,
-<a name="l00167"></a>00167                          <span class="keywordtype">float</span>    * distances,
-<a name="l00168"></a>00168                          <span class="keywordtype">float</span>    * shift ) ;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 
-<a name="l00196"></a>00196 cpl_imagelist * 
-<a name="l00197"></a>00197 sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,
-<a name="l00198"></a>00198                            <span class="keywordtype">float</span>      firstCol,
-<a name="l00199"></a>00199                            <span class="keywordtype">float</span>    * distances,
-<a name="l00200"></a>00200                            <span class="keywordtype">float</span>    * shift ) ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 
-<a name="l00219"></a>00219 cpl_imagelist * 
-<a name="l00220"></a>00220 sinfo_new_make_3D_cube ( cpl_image * calibImage,
-<a name="l00221"></a>00221                        <span class="keywordtype">int</span>      * kpixshift,
-<a name="l00222"></a>00222                        <span class="keywordtype">int</span>        kpixfirst ) ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 
-<a name="l00237"></a>00237 cpl_imagelist * 
-<a name="l00238"></a>00238 sinfo_new_determine_mask_cube ( cpl_imagelist * sourceMaskCube,
-<a name="l00239"></a>00239                               <span class="keywordtype">float</span>     lowLimit,
-<a name="l00240"></a>00240                               <span class="keywordtype">float</span>     highLimit ) ;
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00280"></a>00280 cpl_imagelist * 
-<a name="l00281"></a>00281 sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,
-<a name="l00282"></a>00282                          cpl_imagelist * maskCube,
-<a name="l00283"></a>00283                          <span class="keywordtype">int</span>       n_neighbors,   <span class="comment">/* 7 */</span>
-<a name="l00284"></a>00284                          <span class="keywordtype">int</span>       max_radius ) ; <span class="comment">/* 5 */</span>
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00308"></a>00308 cpl_imagelist * 
-<a name="l00309"></a>00309 sinfo_new_fine_tune_cube( cpl_imagelist * cube,
-<a name="l00310"></a>00310                          <span class="keywordtype">float</span>   * correct_diff_dist,
-<a name="l00311"></a>00311                          <span class="keywordtype">int</span>       n_order) ;
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313 
-<a name="l00334"></a>00334 cpl_imagelist * 
-<a name="l00335"></a>00335 sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,
-<a name="l00336"></a>00336                                 <span class="keywordtype">float</span>   * correct_diff_dist ) ;
-<a name="l00337"></a>00337 
-<a name="l00367"></a>00367 cpl_imagelist * 
-<a name="l00368"></a>00368 sinfo_new_fine_tune_cube_by_spline ( cpl_imagelist * cube,
-<a name="l00369"></a>00369                                  <span class="keywordtype">float</span>   * correct_diff_dist ) ;
-<a name="l00370"></a>00370 
-<a name="l00390"></a>00390 <span class="keywordtype">float</span> * 
-<a name="l00391"></a>00391 sinfo_new_calibrate_ns_test( cpl_image * ns_image,
-<a name="l00392"></a>00392                            <span class="keywordtype">int</span>        n_slitlets,
-<a name="l00393"></a>00393                            <span class="keywordtype">int</span>        halfWidth,
-<a name="l00394"></a>00394                            <span class="keywordtype">float</span>      fwhm,
-<a name="l00395"></a>00395                            <span class="keywordtype">float</span>      minDiff,
-<a name="l00396"></a>00396                            <span class="keywordtype">float</span>      estimated_dist,
-<a name="l00397"></a>00397                            <span class="keywordtype">float</span>      devtol,
-<a name="l00398"></a>00398                <span class="keywordtype">int</span>        bottom,
-<a name="l00399"></a>00399                <span class="keywordtype">int</span>        top ) ;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 cpl_image * 
-<a name="l00403"></a>00403 sinfo_new_make_true_resamp(cpl_image * calibImage, cpl_image* wavemap);
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_cube_construct.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_CUBE_CONSTRUCT_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CUBE_CONSTRUCT_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_cube_construct.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/10/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * ned_cube_construct.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines needed to construct a 3D-data cube</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * function prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> cpl_image * </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> sinfo_new_convolve_ns_image_by_gauss( cpl_image * lineImage,<span class="keywordtype">int</span> hw);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> sinfo_north_south_test( cpl_image * ns_image,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                           <span class="keywordtype">int</span>        n_slitlets,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                           <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                           <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                           <span class="keywordtype">float</span>      minDiff,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                           <span class="keywordtype">float</span>      estimated_dist,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                           <span class="keywordtype">float</span>      devtol,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>               <span class="keywordtype">int</span>        top,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>               <span class="keywordtype">int</span>        bottom ) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> cpl_imagelist * </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> sinfo_new_make_cube ( cpl_image * calibImage,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                      <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      <span class="keywordtype">float</span>    * correct_diff_dist ) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> cpl_imagelist * </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> sinfo_new_make_cube_spi ( cpl_image *  calibImage,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                         <span class="keywordtype">float</span>    ** slit_edges,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                         <span class="keywordtype">float</span>    *  shift ) ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> cpl_imagelist * </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> sinfo_new_make_cube_dist ( cpl_image * calibImage,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                          <span class="keywordtype">float</span>      firstCol,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                          <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                          <span class="keywordtype">float</span>    * shift ) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> cpl_imagelist * </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> sinfo_new_make_3D_cube_dist ( cpl_image * calibImage,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                            <span class="keywordtype">float</span>      firstCol,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                            <span class="keywordtype">float</span>    * distances,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                            <span class="keywordtype">float</span>    * shift ) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> cpl_imagelist * </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> sinfo_new_make_3D_cube ( cpl_image * calibImage,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                        <span class="keywordtype">int</span>      * kpixshift,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                        <span class="keywordtype">int</span>        kpixfirst ) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> cpl_imagelist * </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> sinfo_new_determine_mask_cube ( cpl_imagelist * sourceMaskCube,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               <span class="keywordtype">float</span>     lowLimit,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="keywordtype">float</span>     highLimit ) ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> cpl_imagelist * </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> sinfo_new_interpol_cube ( cpl_imagelist * sourceCube,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                          cpl_imagelist * maskCube,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                          <span class="keywordtype">int</span>       n_neighbors,   <span class="comment">/* 7 */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                          <span class="keywordtype">int</span>       max_radius ) ; <span class="comment">/* 5 */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> cpl_imagelist * </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> sinfo_new_fine_tune_cube( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                          <span class="keywordtype">float</span>   * correct_diff_dist,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                          <span class="keywordtype">int</span>       n_order) ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> cpl_imagelist * </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> sinfo_new_fine_tune_cube_by_FFT( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                                 <span class="keywordtype">float</span>   * correct_diff_dist ) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> cpl_imagelist * </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> sinfo_new_fine_tune_cube_by_spline ( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                                  <span class="keywordtype">float</span>   * correct_diff_dist ) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> sinfo_new_calibrate_ns_test( cpl_image * ns_image,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                            <span class="keywordtype">int</span>        n_slitlets,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                            <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                            <span class="keywordtype">float</span>      fwhm,</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                            <span class="keywordtype">float</span>      minDiff,</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                            <span class="keywordtype">float</span>      estimated_dist,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                            <span class="keywordtype">float</span>      devtol,</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                <span class="keywordtype">int</span>        bottom,</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                <span class="keywordtype">int</span>        top ) ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> cpl_image * </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> sinfo_new_make_true_resamp(cpl_image * calibImage, cpl_image* wavemap);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__cubecreate__ini_8h_source.html b/html/sinfo__cubecreate__ini_8h_source.html
index 6039b87..ad17e9b 100644
--- a/html/sinfo__cubecreate__ini_8h_source.html
+++ b/html/sinfo__cubecreate__ini_8h_source.html
@@ -2,60 +2,91 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_cubecreate_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_cubecreate_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   cubecreate_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Nov 28, 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SPIFFIs creation of a data cube</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_CUBECREATE_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CUBECREATE_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_cubecreate_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Function prototypes </span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="keywordtype">int</span> 
-<a name="l00051"></a>00051 generateCube_ini_file(
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> * ini_name,
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * name_i,
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * name_o,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_c
-<a name="l00056"></a>00056 );
-<a name="l00067"></a>00067 cube_config * 
-<a name="l00068"></a>00068 parse_cube_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_cubecreate_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   cubecreate_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Nov 28, 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SPIFFIs creation of a data cube</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_CUBECREATE_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CUBECREATE_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_cubecreate_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> generateCube_ini_file(</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> );</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> cube_config * </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> parse_cube_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__cfg_8c_source.html b/html/sinfo__dark__cfg_8c_source.html
index 23af42a..e97a993 100644
--- a/html/sinfo__dark__cfg_8c_source.html
+++ b/html/sinfo__dark__cfg_8c_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_dark_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author     :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    configuration handling tools for the generation of</span>
-<a name="l00025"></a>00025 <span class="comment">                        master sinfo_dark frames </span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_dark_cfg.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                              Function codes</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 dark_config * 
-<a name="l00053"></a>00053 sinfo_dark_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00054"></a>00054 {
-<a name="l00055"></a>00055     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(dark_config));
-<a name="l00056"></a>00056 }
-<a name="l00057"></a>00057 
-<a name="l00065"></a>00065 <span class="keywordtype">void</span> sinfo_dark_cfg_destroy(dark_config * cc)
-<a name="l00066"></a>00066 {
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (cc==NULL) return ;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <span class="comment">/* Free main struct */</span>
-<a name="l00070"></a>00070     cpl_free(cc);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     return ;
-<a name="l00073"></a>00073 }
-<a name="l00074"></a>00074 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_dark_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author     :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    configuration handling tools for the generation of</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        master sinfo_dark frames </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_dark_cfg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> dark_config * </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> sinfo_dark_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(dark_config));</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span> sinfo_dark_cfg_destroy(dark_config * cc)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">if</span> (cc==NULL) return ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_free(cc);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     return ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__cfg_8h_source.html b/html/sinfo__dark__cfg_8h_source.html
index f53bb8f..e111509 100644
--- a/html/sinfo__dark__cfg_8h_source.html
+++ b/html/sinfo__dark__cfg_8h_source.html
@@ -2,108 +2,139 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name     :    sinfo_dark_cfg.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00023"></a>00023 <span class="comment">   Description    :    sinfo_dark_cfg.c definitions + handling prototypes</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_DARK_CFG_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                   Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Defines</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   New types</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment">  master dark frame generation blackboard container</span>
-<a name="l00041"></a>00041 <span class="comment"></span>
-<a name="l00042"></a>00042 <span class="comment">  This structure holds all information related to the master dark </span>
-<a name="l00043"></a>00043 <span class="comment">  frame generation</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>dark_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;       <span class="comment">/* file name of frame list */</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input averaged, bad pixel corrected, </span>
-<a name="l00053"></a>00053 <span class="comment">                                 off subtracted, flatfielded, spectral </span>
-<a name="l00054"></a>00054 <span class="comment">                                 tilt corrected list of frames */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">int</span> nframes ;         <span class="comment">/* number of frames in the list */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00057"></a>00057 <span class="comment">                                        data cube */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*------ CleanMean ------*/</span>
-<a name="l00060"></a>00060         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when </span>
-<a name="l00061"></a>00061 <span class="comment">           taking the average of columns */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">float</span> lo_reject ;
-<a name="l00063"></a>00063         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when </span>
-<a name="l00064"></a>00064 <span class="comment">           taking the average of columns */</span>
-<a name="l00065"></a>00065         <span class="keywordtype">float</span> hi_reject ;
-<a name="l00066"></a>00066 <span class="comment">/*------ QCLOG ------*/</span>
-<a name="l00067"></a>00067         <span class="comment">/* RON */</span>
-<a name="l00068"></a>00068         
-<a name="l00069"></a>00069   <span class="keywordtype">int</span> qc_ron_xmin;
-<a name="l00070"></a>00070   <span class="keywordtype">int</span> qc_ron_xmax;
-<a name="l00071"></a>00071   <span class="keywordtype">int</span> qc_ron_ymin;
-<a name="l00072"></a>00072   <span class="keywordtype">int</span> qc_ron_ymax;
-<a name="l00073"></a>00073   <span class="keywordtype">int</span> qc_ron_hsize;
-<a name="l00074"></a>00074   <span class="keywordtype">int</span> qc_ron_nsamp;
-<a name="l00075"></a>00075   <span class="comment">/* FPN */</span>
-<a name="l00076"></a>00076   <span class="keywordtype">int</span> qc_fpn_xmin;
-<a name="l00077"></a>00077   <span class="keywordtype">int</span> qc_fpn_xmax;
-<a name="l00078"></a>00078   <span class="keywordtype">int</span> qc_fpn_ymin;
-<a name="l00079"></a>00079   <span class="keywordtype">int</span> qc_fpn_ymax;
-<a name="l00080"></a>00080   <span class="keywordtype">int</span> qc_fpn_hsize;
-<a name="l00081"></a>00081   <span class="keywordtype">int</span> qc_fpn_nsamp;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 } dark_config ;
-<a name="l00084"></a>00084 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00085"></a>00085 <span class="comment">                               Function prototypes</span>
-<a name="l00086"></a>00086 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00094"></a>00094 dark_config * 
-<a name="l00095"></a>00095 sinfo_dark_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00102"></a>00102 <span class="keywordtype">void</span> 
-<a name="l00103"></a>00103 sinfo_dark_cfg_destroy(dark_config * cc);
-<a name="l00104"></a>00104  
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name     :    sinfo_dark_cfg.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description    :    sinfo_dark_cfg.c definitions + handling prototypes</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_DARK_CFG_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">  master dark frame generation blackboard container</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  This structure holds all information related to the master dark </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  frame generation</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>dark_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;       <span class="comment">/* file name of frame list */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input averaged, bad pixel corrected, </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                 off subtracted, flatfielded, spectral </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                 tilt corrected list of frames */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">int</span> nframes ;         <span class="comment">/* number of frames in the list */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                                        data cube */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*------ CleanMean ------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">           taking the average of columns */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">float</span> lo_reject ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">           taking the average of columns */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keywordtype">float</span> hi_reject ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*------ QCLOG ------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* RON */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">int</span> qc_ron_xmin;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">int</span> qc_ron_xmax;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">int</span> qc_ron_ymin;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordtype">int</span> qc_ron_ymax;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordtype">int</span> qc_ron_hsize;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">int</span> qc_ron_nsamp;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="comment">/* FPN */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">int</span> qc_fpn_xmin;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> qc_fpn_xmax;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordtype">int</span> qc_fpn_ymin;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">int</span> qc_fpn_ymax;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordtype">int</span> qc_fpn_hsize;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">int</span> qc_fpn_nsamp;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> } dark_config ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> dark_config * </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> sinfo_dark_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_dark_cfg_destroy(dark_config * cc);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>  </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__config_8c_source.html b/html/sinfo__dark__config_8c_source.html
index 6c37631..44e7bc5 100644
--- a/html/sinfo__dark__config_8c_source.html
+++ b/html/sinfo__dark__config_8c_source.html
@@ -2,214 +2,245 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_dark_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *   Dark Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_dark_config.h"</span>
-<a name="l00052"></a>00052   <span class="comment">/* Dark Frame Data Reduction parameters */</span>
-<a name="l00053"></a>00053    
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keywordtype">void</span>
-<a name="l00056"></a>00056  sinfo_dark_config_add(cpl_parameterlist *list)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   cpl_parameter *p;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   <span class="keywordflow">if</span> (!list) {
-<a name="l00062"></a>00062     <span class="keywordflow">return</span>;
-<a name="l00063"></a>00063   }
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065   <span class="comment">/* float </span>
-<a name="l00066"></a>00066 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00067"></a>00067 <span class="comment">     low and high frame */</span>
-<a name="l00068"></a>00068  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00069"></a>00069 <span class="comment">    and stdev */</span>
-<a name="l00070"></a>00070   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.low_rejection"</span>,
-<a name="l00071"></a>00071                   CPL_TYPE_DOUBLE,
-<a name="l00072"></a>00072                               <span class="stringliteral">"lower rejection"</span>,
-<a name="l00073"></a>00073                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00074"></a>00074                               0.1,0.0,1.0);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-lo_rej"</span>);
-<a name="l00077"></a>00077   cpl_parameterlist_append(list, p);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="comment">/* float </span>
-<a name="l00080"></a>00080 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00081"></a>00081 <span class="comment">     low and high frame */</span>
-<a name="l00082"></a>00082  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00083"></a>00083 <span class="comment">    and stdev */</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086   <span class="comment">/* QC LOG */</span>
-<a name="l00087"></a>00087   <span class="comment">/* RON */</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.high_rejection"</span>,
-<a name="l00090"></a>00090                   CPL_TYPE_DOUBLE,
-<a name="l00091"></a>00091                               <span class="stringliteral">"higher rejection"</span>,
-<a name="l00092"></a>00092                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00093"></a>00093                               0.1,0.0,1.0);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-hi_rej"</span>);
-<a name="l00096"></a>00096   cpl_parameterlist_append(list, p);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099  
-<a name="l00100"></a>00100   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_xmin"</span>,
-<a name="l00101"></a>00101                   CPL_TYPE_INT,
-<a name="l00102"></a>00102                               <span class="stringliteral">"qc_ron_xmin"</span>,
-<a name="l00103"></a>00103                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00104"></a>00104                               1,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_xmin"</span>);
-<a name="l00107"></a>00107   cpl_parameterlist_append(list, p);
-<a name="l00108"></a>00108   
-<a name="l00109"></a>00109  
-<a name="l00110"></a>00110   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_xmax"</span>,
-<a name="l00111"></a>00111                   CPL_TYPE_INT,
-<a name="l00112"></a>00112                               <span class="stringliteral">"qc_ron_xmax"</span>,
-<a name="l00113"></a>00113                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00114"></a>00114                               2048,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_xmax"</span>);
-<a name="l00117"></a>00117   cpl_parameterlist_append(list, p);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_ymin"</span>,
-<a name="l00120"></a>00120                   CPL_TYPE_INT,
-<a name="l00121"></a>00121                               <span class="stringliteral">"qc_ron_ymin"</span>,
-<a name="l00122"></a>00122                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00123"></a>00123                               1,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_ymin"</span>);
-<a name="l00126"></a>00126   cpl_parameterlist_append(list, p);
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_ymax"</span>,
-<a name="l00130"></a>00130                   CPL_TYPE_INT,
-<a name="l00131"></a>00131                               <span class="stringliteral">"qc_ron_ymax"</span>,
-<a name="l00132"></a>00132                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00133"></a>00133                               2048,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_ymax"</span>);
-<a name="l00136"></a>00136   cpl_parameterlist_append(list, p);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_ron_hsize"</span>,
-<a name="l00139"></a>00139                   CPL_TYPE_INT,
-<a name="l00140"></a>00140                               <span class="stringliteral">"qc_ron_hsize"</span>,
-<a name="l00141"></a>00141                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00142"></a>00142                               4);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_hsize"</span>);
-<a name="l00145"></a>00145   cpl_parameterlist_append(list, p);
-<a name="l00146"></a>00146  
-<a name="l00147"></a>00147   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_ron_nsamp"</span>,
-<a name="l00148"></a>00148                   CPL_TYPE_INT,
-<a name="l00149"></a>00149                               <span class="stringliteral">"qc_ron_nsamp"</span>,
-<a name="l00150"></a>00150                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00151"></a>00151                               100);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_nsamp"</span>);
-<a name="l00154"></a>00154   cpl_parameterlist_append(list, p);
-<a name="l00155"></a>00155  
-<a name="l00156"></a>00156   <span class="comment">/* FPN */</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_xmin"</span>,
-<a name="l00160"></a>00160                   CPL_TYPE_INT,
-<a name="l00161"></a>00161                               <span class="stringliteral">"qc_fpn_xmin"</span>,
-<a name="l00162"></a>00162                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00163"></a>00163                               1,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_xmin"</span>);
-<a name="l00166"></a>00166   cpl_parameterlist_append(list, p);
-<a name="l00167"></a>00167   
-<a name="l00168"></a>00168  
-<a name="l00169"></a>00169   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_xmax"</span>,
-<a name="l00170"></a>00170                   CPL_TYPE_INT,
-<a name="l00171"></a>00171                               <span class="stringliteral">"qc_fpn_xmax"</span>,
-<a name="l00172"></a>00172                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00173"></a>00173                               2047,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_xmax"</span>);
-<a name="l00176"></a>00176   cpl_parameterlist_append(list, p);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_ymin"</span>,
-<a name="l00179"></a>00179                   CPL_TYPE_INT,
-<a name="l00180"></a>00180                               <span class="stringliteral">"qc_fpn_ymin"</span>,
-<a name="l00181"></a>00181                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00182"></a>00182                               1,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_ymin"</span>);
-<a name="l00185"></a>00185   cpl_parameterlist_append(list, p);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_ymax"</span>,
-<a name="l00189"></a>00189                   CPL_TYPE_INT,
-<a name="l00190"></a>00190                               <span class="stringliteral">"qc_fpn_ymax"</span>,
-<a name="l00191"></a>00191                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00192"></a>00192                               2047,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_ymax"</span>);
-<a name="l00195"></a>00195   cpl_parameterlist_append(list, p);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_fpn_hsize"</span>,
-<a name="l00200"></a>00200                   CPL_TYPE_INT,
-<a name="l00201"></a>00201                               <span class="stringliteral">"qc_fpn_hsize"</span>,
-<a name="l00202"></a>00202                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00203"></a>00203                               2);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_hsize"</span>);
-<a name="l00206"></a>00206   cpl_parameterlist_append(list, p);
-<a name="l00207"></a>00207  
-<a name="l00208"></a>00208   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_fpn_nsamp"</span>,
-<a name="l00209"></a>00209                   CPL_TYPE_INT,
-<a name="l00210"></a>00210                               <span class="stringliteral">"qc_fpn_nsamp"</span>,
-<a name="l00211"></a>00211                               <span class="stringliteral">"sinfoni.dark"</span>,
-<a name="l00212"></a>00212                               1000);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_nsamp"</span>);
-<a name="l00215"></a>00215   cpl_parameterlist_append(list, p);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_dark_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *   Dark Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_dark_config.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/* Dark Frame Data Reduction parameters */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>    </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>  sinfo_dark_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.low_rejection"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"lower rejection"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-lo_rej"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="comment">/* RON */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.high_rejection"</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                               <span class="stringliteral">"higher rejection"</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-hi_rej"</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>  </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_xmin"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               <span class="stringliteral">"qc_ron_xmin"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                               1,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_xmin"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>  </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_xmax"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"qc_ron_xmax"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               2048,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_xmax"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_ymin"</span>,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                               <span class="stringliteral">"qc_ron_ymin"</span>,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               1,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_ymin"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_ron_ymax"</span>,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                               <span class="stringliteral">"qc_ron_ymax"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                               2048,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_ymax"</span>);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_ron_hsize"</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                               <span class="stringliteral">"qc_ron_hsize"</span>,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                               4);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_hsize"</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>  </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_ron_nsamp"</span>,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                               <span class="stringliteral">"qc_ron_nsamp"</span>,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                               100);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_ron_nsamp"</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>  </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="comment">/* FPN */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_xmin"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               <span class="stringliteral">"qc_fpn_xmin"</span>,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                               1,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_xmin"</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>  </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_xmax"</span>,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                               <span class="stringliteral">"qc_fpn_xmax"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                               2047,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_xmax"</span>);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_ymin"</span>,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"qc_fpn_ymin"</span>,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               1,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_ymin"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.dark.qc_fpn_ymax"</span>,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                               <span class="stringliteral">"qc_fpn_ymax"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               2047,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_ymax"</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_fpn_hsize"</span>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                               <span class="stringliteral">"qc_fpn_hsize"</span>,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                               2);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_hsize"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>  </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.dark.qc_fpn_nsamp"</span>,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"qc_fpn_nsamp"</span>,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               <span class="stringliteral">"sinfoni.dark"</span>,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               1000);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dark-qc_fpn_nsamp"</span>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__config_8h_source.html b/html/sinfo__dark__config_8h_source.html
index c74e257..edc9a81 100644
--- a/html/sinfo__dark__config_8h_source.html
+++ b/html/sinfo__dark__config_8h_source.html
@@ -2,51 +2,82 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_dark_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Dark Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="comment">/*</span>
-<a name="l00032"></a>00032 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00033"></a>00033 <span class="comment">*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_dark_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_dark_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Dark Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_dark_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__ini_8h_source.html b/html/sinfo__dark__ini_8h_source.html
index 05c0f94..ca4ef2b 100644
--- a/html/sinfo__dark__ini_8h_source.html
+++ b/html/sinfo__dark__ini_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_dark_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Feb 13, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SPIFFIs sinfo_dark frame handling</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_DARK_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_fitshead.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_dark_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                             Function prototypes </span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> 
-<a name="l00052"></a>00052 generateDark_ini_file(
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * ini_name,
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * name_i,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_o
-<a name="l00056"></a>00056 );
-<a name="l00065"></a>00065 dark_config * 
-<a name="l00066"></a>00066 parse_dark_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_dark_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Feb 13, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SPIFFIs sinfo_dark frame handling</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_DARK_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_fitshead.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_dark_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> generateDark_ini_file(</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> );</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> dark_config * </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> parse_dark_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__ini__by__cpl_8c_source.html b/html/sinfo__dark__ini__by__cpl_8c_source.html
index 557a15c..92694ee 100644
--- a/html/sinfo__dark__ini__by__cpl_8c_source.html
+++ b/html/sinfo__dark__ini__by__cpl_8c_source.html
@@ -2,258 +2,289 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_dark_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 18, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   sinfo_dark cpl input file handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_dark_ini_by_cpl.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                    Functions private to this module</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00043"></a>00043 parse_section_frames(dark_config *, cpl_frameset* sof, 
-<a name="l00044"></a>00044                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00046"></a>00046 parse_section_cleanmean(dark_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00048"></a>00048 parse_section_qclog(dark_config * cfg, cpl_parameterlist * cpl_cfg);
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keywordtype">void</span> sinfo_detnoise_free(dark_config * cfg);
-<a name="l00051"></a>00051 
-<a name="l00072"></a>00072 dark_config * 
-<a name="l00073"></a>00073 sinfo_parse_cpl_input_dark(cpl_parameterlist * cpl_cfg, 
-<a name="l00074"></a>00074                            cpl_frameset* sof, 
-<a name="l00075"></a>00075                            cpl_frameset** raw)
-<a name="l00076"></a>00076 {
-<a name="l00077"></a>00077  <span class="keywordtype">int</span> status=0;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079         dark_config   *       cfg ;
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081         <span class="comment">/* Removed check on ini_file */</span>
-<a name="l00082"></a>00082         <span class="comment">/* Removed load of ini file */</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084         cfg = sinfo_dark_cfg_create();
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086         <span class="comment">/*</span>
-<a name="l00087"></a>00087 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00088"></a>00088 <span class="comment">         * found in the ini file</span>
-<a name="l00089"></a>00089 <span class="comment">         */</span>
-<a name="l00090"></a>00090         parse_section_cleanmean    (cfg, cpl_cfg);
-<a name="l00091"></a>00091         parse_section_qclog    (cfg, cpl_cfg); 
-<a name="l00092"></a>00092         parse_section_frames       (cfg, sof, raw, &status);
-<a name="l00093"></a>00093         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00094"></a>00094                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00095"></a>00095                 sinfo_dark_cfg_destroy(cfg);
-<a name="l00096"></a>00096                 cfg = NULL ;
-<a name="l00097"></a>00097                 <span class="keywordflow">return</span> NULL ;
-<a name="l00098"></a>00098         }
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100         <span class="keywordflow">return</span> cfg ;
-<a name="l00101"></a>00101 }
-<a name="l00102"></a>00102 
-<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00114"></a>00114 parse_section_frames(dark_config * cfg,
-<a name="l00115"></a>00115              cpl_frameset * sof,
-<a name="l00116"></a>00116                      cpl_frameset** raw,
-<a name="l00117"></a>00117                      <span class="keywordtype">int</span>* status)
-<a name="l00118"></a>00118 {
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120    <span class="keywordtype">int</span>                     i;
-<a name="l00121"></a>00121    <span class="keywordtype">int</span>                   nraw=0;
-<a name="l00122"></a>00122    <span class="keywordtype">int</span>                   nraw_good=0;
-<a name="l00123"></a>00123    cpl_frame* frame=NULL;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00126"></a>00126    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00127"></a>00127    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00128"></a>00128    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00129"></a>00129    sinfo_extract_raw_frames_type(sof,raw,RAW_DARK);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131    nraw=cpl_frameset_get_size(*raw);
-<a name="l00132"></a>00132    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00133"></a>00133       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span>
-<a name="l00134"></a>00134             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_DARK);
-<a name="l00135"></a>00135           (*status)++;
-<a name="l00136"></a>00136           <span class="keywordflow">return</span>;
-<a name="l00137"></a>00137    }
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00142"></a>00142    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00143"></a>00143    cfg->inFrameList     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146    <span class="comment">/* read input frames */</span>
-<a name="l00147"></a>00147    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00148"></a>00148       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00149"></a>00149       <span class="comment">/* Store file name into framelist */</span>
-<a name="l00150"></a>00150       cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00151"></a>00151       nraw_good++;
-<a name="l00152"></a>00152    }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154    <span class="keywordflow">if</span>(nraw_good<1) {
-<a name="l00155"></a>00155      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input, something wrong!"</span>);
-<a name="l00156"></a>00156      (*status)++;
-<a name="l00157"></a>00157      <span class="keywordflow">return</span>;
-<a name="l00158"></a>00158    }
-<a name="l00159"></a>00159    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00160"></a>00160    cfg->nframes         = nraw ;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162    strcpy(cfg -> outName, DARK_OUT_FILENAME);
-<a name="l00163"></a>00163   
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00166"></a>00166    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00167"></a>00167  
-<a name="l00168"></a>00168    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00169"></a>00169      {
-<a name="l00170"></a>00170    <span class="keywordflow">case</span> 0: 
-<a name="l00171"></a>00171       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00172"></a>00172       <span class="keywordflow">break</span>;
-<a name="l00173"></a>00173     <span class="keywordflow">case</span> 1: 
-<a name="l00174"></a>00174       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00175"></a>00175       <span class="keywordflow">break</span>;
-<a name="l00176"></a>00176     <span class="keywordflow">case</span> -1:
-<a name="l00177"></a>00177       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00178"></a>00178       <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179     <span class="keywordflow">default</span>: 
-<a name="l00180"></a>00180       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00181"></a>00181       <span class="keywordflow">break</span>;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184      }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186    sinfo_get_band(frame,band);
-<a name="l00187"></a>00187    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00188"></a>00188                      spat_res,    lamp_status,    band);
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191    sinfo_get_ins_set(band,&ins_set);
-<a name="l00192"></a>00192    return ;
-<a name="l00193"></a>00193 }
-<a name="l00194"></a>00194 
-<a name="l00203"></a>00203 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00204"></a>00204 parse_section_cleanmean(dark_config * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00205"></a>00205 {
-<a name="l00206"></a>00206    cpl_parameter *p;  
-<a name="l00207"></a>00207    
-<a name="l00208"></a>00208    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.low_rejection"</span>);
-<a name="l00209"></a>00209    cfg -> lo_reject = cpl_parameter_get_double(p);
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.high_rejection"</span>);
-<a name="l00212"></a>00212    cfg -> hi_reject = cpl_parameter_get_double(p);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 }
-<a name="l00215"></a>00215 
-<a name="l00223"></a>00223 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00224"></a>00224 parse_section_qclog(dark_config * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00225"></a>00225 {
-<a name="l00226"></a>00226    cpl_parameter *p;  
-<a name="l00227"></a>00227    
-<a name="l00228"></a>00228    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_xmin"</span>);
-<a name="l00229"></a>00229    cfg -> qc_ron_xmin = cpl_parameter_get_int(p);
-<a name="l00230"></a>00230    
-<a name="l00231"></a>00231    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_xmax"</span>);
-<a name="l00232"></a>00232    cfg -> qc_ron_xmax = cpl_parameter_get_int(p);
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_ymin"</span>);
-<a name="l00235"></a>00235    cfg -> qc_ron_ymin = cpl_parameter_get_int(p);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_ymax"</span>);
-<a name="l00238"></a>00238    cfg -> qc_ron_ymax = cpl_parameter_get_int(p);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_hsize"</span>);
-<a name="l00241"></a>00241    cfg -> qc_ron_hsize = cpl_parameter_get_int(p);
-<a name="l00242"></a>00242    
-<a name="l00243"></a>00243    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_nsamp"</span>);
-<a name="l00244"></a>00244    cfg -> qc_ron_nsamp = cpl_parameter_get_int(p);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_xmin"</span>);
-<a name="l00249"></a>00249    cfg -> qc_fpn_xmin = cpl_parameter_get_int(p);
-<a name="l00250"></a>00250    
-<a name="l00251"></a>00251    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_xmax"</span>);
-<a name="l00252"></a>00252    cfg -> qc_fpn_xmax = cpl_parameter_get_int(p);
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_ymin"</span>);
-<a name="l00255"></a>00255    cfg -> qc_fpn_ymin = cpl_parameter_get_int(p);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_ymax"</span>);
-<a name="l00258"></a>00258    cfg -> qc_fpn_ymax = cpl_parameter_get_int(p);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_hsize"</span>);
-<a name="l00261"></a>00261    cfg -> qc_fpn_hsize = cpl_parameter_get_int(p);
-<a name="l00262"></a>00262    
-<a name="l00263"></a>00263    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_nsamp"</span>);
-<a name="l00264"></a>00264    cfg -> qc_fpn_nsamp = cpl_parameter_get_int(p);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266    
-<a name="l00267"></a>00267 }
-<a name="l00268"></a>00268 
-<a name="l00275"></a>00275 <span class="keywordtype">void</span>
-<a name="l00276"></a>00276 sinfo_dark_free(dark_config ** cfg)
-<a name="l00277"></a>00277 {  
-<a name="l00278"></a>00278   <span class="keywordtype">int</span> i=0;
-<a name="l00279"></a>00279  
-<a name="l00280"></a>00280   <span class="keywordflow">if</span>((*cfg) != NULL) {
-<a name="l00281"></a>00281     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes;i++) {
-<a name="l00282"></a>00282       <span class="keywordflow">if</span>((*cfg)->inFrameList[i] != NULL) {
-<a name="l00283"></a>00283     cpl_free((*cfg)->inFrameList[i]);
-<a name="l00284"></a>00284     (*cfg)->inFrameList[i]=NULL;
-<a name="l00285"></a>00285       }
-<a name="l00286"></a>00286     }
-<a name="l00287"></a>00287     cpl_free((*cfg)->inFrameList);
-<a name="l00288"></a>00288     (*cfg)->inFrameList=NULL;
-<a name="l00289"></a>00289     sinfo_dark_cfg_destroy((*cfg));
-<a name="l00290"></a>00290     *cfg = NULL;
-<a name="l00291"></a>00291   }
-<a name="l00292"></a>00292   <span class="keywordflow">return</span>;
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_dark_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 18, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   sinfo_dark cpl input file handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_dark_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> parse_section_frames(dark_config *, cpl_frameset* sof, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> parse_section_cleanmean(dark_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> parse_section_qclog(dark_config * cfg, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">void</span> sinfo_detnoise_free(dark_config * cfg);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> dark_config * </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_parse_cpl_input_dark(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                            cpl_frameset* sof, </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                            cpl_frameset** raw)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>  <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         dark_config   *       cfg ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* Removed check on ini_file */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="comment">/* Removed load of ini file */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         cfg = sinfo_dark_cfg_create();</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         parse_section_cleanmean    (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         parse_section_qclog    (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         parse_section_frames       (cfg, sof, raw, &status);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 sinfo_dark_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> parse_section_frames(dark_config * cfg,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                      cpl_frameset** raw,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span>                   nraw=0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span>                   nraw_good=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    sinfo_extract_raw_frames_type(sof,raw,RAW_DARK);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_DARK);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>           (*status)++;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    <span class="comment">/* Removed: get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    cfg->inFrameList     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>    <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       nraw_good++;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    <span class="keywordflow">if</span>(nraw_good<1) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>      (*status)++;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>    strcpy(cfg -> outName, DARK_OUT_FILENAME);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>  </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>      {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>      }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>    return ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> parse_section_cleanmean(dark_config * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>    cpl_parameter *p;  </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.low_rejection"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    cfg -> lo_reject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.high_rejection"</span>);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    cfg -> hi_reject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> parse_section_qclog(dark_config * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>    cpl_parameter *p;  </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>    </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_xmin"</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>    cfg -> qc_ron_xmin = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>    </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_xmax"</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>    cfg -> qc_ron_xmax = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_ymin"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    cfg -> qc_ron_ymin = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_ymax"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    cfg -> qc_ron_ymax = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_hsize"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    cfg -> qc_ron_hsize = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_ron_nsamp"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    cfg -> qc_ron_nsamp = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_xmin"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    cfg -> qc_fpn_xmin = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_xmax"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    cfg -> qc_fpn_xmax = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_ymin"</span>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>    cfg -> qc_fpn_ymin = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_ymax"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>    cfg -> qc_fpn_ymax = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_hsize"</span>);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>    cfg -> qc_fpn_hsize = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.dark.qc_fpn_nsamp"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>    cfg -> qc_fpn_nsamp = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> sinfo_dark_free(dark_config ** cfg)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> {  </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>  </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">if</span>((*cfg) != NULL) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes;i++) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       <span class="keywordflow">if</span>((*cfg)->inFrameList[i] != NULL) {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     cpl_free((*cfg)->inFrameList[i]);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     (*cfg)->inFrameList[i]=NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_free((*cfg)->inFrameList);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     (*cfg)->inFrameList=NULL;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     sinfo_dark_cfg_destroy((*cfg));</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     *cfg = NULL;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dark__ini__by__cpl_8h_source.html b/html/sinfo__dark__ini__by__cpl_8h_source.html
index a12b8b9..1ad8a20 100644
--- a/html/sinfo__dark__ini__by__cpl_8h_source.html
+++ b/html/sinfo__dark__ini__by__cpl_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dark_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dark_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_dark_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 18, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input file handling for SINFONI </span>
-<a name="l00025"></a>00025 <span class="comment">                    dark frame handling</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_DARK_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_INI_BY_CPL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_dark_cfg.h"</span>
-<a name="l00036"></a>00036 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                             Function prototypes </span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 dark_config * 
-<a name="l00052"></a>00052 sinfo_parse_cpl_input_dark(cpl_parameterlist * cpl_cfg, 
-<a name="l00053"></a>00053                            cpl_frameset* sof, 
-<a name="l00054"></a>00054                cpl_frameset** raw);
-<a name="l00055"></a>00055 
-<a name="l00062"></a>00062 <span class="keywordtype">void</span> 
-<a name="l00063"></a>00063 sinfo_dark_free(dark_config ** cfg);
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dark_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_dark_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 18, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input file handling for SINFONI </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    dark frame handling</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_DARK_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DARK_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_dark_cfg.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> dark_config * </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_parse_cpl_input_dark(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                            cpl_frameset* sof, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                cpl_frameset** raw);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_dark_free(dark_config ** cfg);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__define__opt_8h_source.html b/html/sinfo__define__opt_8h_source.html
index 2e7cfd0..4caafe1 100644
--- a/html/sinfo__define__opt_8h_source.html
+++ b/html/sinfo__define__opt_8h_source.html
@@ -2,44 +2,75 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_define_opt.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_define_opt.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifndef SINFO_DEFINE_OPT_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DEFINE_OPT_H</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define OPT_FILE        1001</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define OPT_GENERATE            1002</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define OPT_RB            1003</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define OPT_SORT        1004</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define OPT_IN            2000</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define OPT_OUT            2001</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define OPT_CALIB        2002</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define OPT_CIN         2003</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_define_opt.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifndef SINFO_DEFINE_OPT_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DEFINE_OPT_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_FILE        1001</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_GENERATE            1002</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_RB            1003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_SORT        1004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_IN            2000</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_OUT            2001</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_CALIB        2002</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define OPT_CIN         2003</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin_8c_source.html b/html/sinfo__detlin_8c_source.html
index 4b488ed..ab5dc17 100644
--- a/html/sinfo__detlin_8c_source.html
+++ b/html/sinfo__detlin_8c_source.html
@@ -2,1125 +2,1156 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*******************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* amodigli  18/04/02  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*</span>
-<a name="l00036"></a>00036 <span class="comment"> * System Headers</span>
-<a name="l00037"></a>00037 <span class="comment"> */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment"> * Local Headers</span>
-<a name="l00041"></a>00041 <span class="comment"> */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_detlin.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_fit_curve.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment"> *                            Function codes</span>
-<a name="l00056"></a>00056 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00079"></a>00079 cpl_imagelist * 
-<a name="l00080"></a>00080 sinfo_new_fit_intensity_course(cpl_imagelist * flatStack,
-<a name="l00081"></a>00081                               <span class="keywordtype">int</span>       order,
-<a name="l00082"></a>00082                               <span class="keywordtype">float</span>     loReject,
-<a name="l00083"></a>00083                               <span class="keywordtype">float</span>     hiReject )
-<a name="l00084"></a>00084 {
-<a name="l00085"></a>00085     cpl_imagelist * ret_iml ;
-<a name="l00086"></a>00086     dpoint  * points ;
-<a name="l00087"></a>00087     <span class="keywordtype">int</span>       i, z ;
-<a name="l00088"></a>00088     <span class="keywordtype">double</span> * coeffs ;
-<a name="l00089"></a>00089     Stats  ** stats=NULL ;
-<a name="l00090"></a>00090     <span class="keywordtype">int</span> sx;
-<a name="l00091"></a>00091     <span class="keywordtype">int</span> sy;
-<a name="l00092"></a>00092     <span class="keywordtype">int</span> sz;
-<a name="l00093"></a>00093     <span class="keywordtype">float</span>* psrcdata;
-<a name="l00094"></a>00094     <span class="keywordtype">float</span>* presdata;
-<a name="l00095"></a>00095     cpl_image* img_tmp=NULL;
-<a name="l00096"></a>00096     sx=cpl_image_get_size_x(cpl_imagelist_get(flatStack,0));
-<a name="l00097"></a>00097     sy=cpl_image_get_size_y(cpl_imagelist_get(flatStack,0));
-<a name="l00098"></a>00098     sz=cpl_imagelist_get_size(flatStack);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100     stats=(Stats**) cpl_calloc(sz,<span class="keyword">sizeof</span>(Stats*)) ;
-<a name="l00101"></a>00101   
-<a name="l00102"></a>00102     <span class="keywordflow">if</span> ( NULL == flatStack )
-<a name="l00103"></a>00103     {
-<a name="l00104"></a>00104         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;
-<a name="l00105"></a>00105         <span class="keywordflow">return</span> NULL ;
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     <span class="keywordflow">if</span> ( order <= 0 )
-<a name="l00108"></a>00108     {
-<a name="l00109"></a>00109         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of polynomial given!"</span>) ;
-<a name="l00110"></a>00110         <span class="keywordflow">return</span> NULL ;
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112     <span class="comment">/* allocate memory for returned cube */</span>
-<a name="l00113"></a>00113     ret_iml = cpl_imagelist_new();
-<a name="l00114"></a>00114     <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )
-<a name="l00115"></a>00115     {
-<a name="l00116"></a>00116       img_tmp=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
-<a name="l00117"></a>00117       cpl_imagelist_set(ret_iml,img_tmp,z);
-<a name="l00118"></a>00118     }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )
-<a name="l00121"></a>00121     {
-<a name="l00122"></a>00122       stats[z]=
-<a name="l00123"></a>00123        sinfo_new_image_stats_on_rectangle(cpl_imagelist_get(flatStack,z), 
-<a name="l00124"></a>00124                                                 loReject, 
-<a name="l00125"></a>00125                                                 hiReject, 
-<a name="l00126"></a>00126                                                 0, 
-<a name="l00127"></a>00127                                                 0, 
-<a name="l00128"></a>00128                                                 sx-1, 
-<a name="l00129"></a>00129                                                 sy-1) ;
-<a name="l00130"></a>00130         <span class="keywordflow">if</span> ( stats[z] == NULL )
-<a name="l00131"></a>00131         {
-<a name="l00132"></a>00132             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not compute image statistics "</span>
-<a name="l00133"></a>00133                             <span class="stringliteral">"in plane: %d"</span>, z) ;
-<a name="l00134"></a>00134             cpl_imagelist_delete(ret_iml) ;
-<a name="l00135"></a>00135             <span class="keywordflow">return</span> NULL ;
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137     }
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="comment">/* go through the image plane and store the spectra in a double </span>
-<a name="l00140"></a>00140 <span class="comment">       points data structure */</span>
-<a name="l00141"></a>00141     
-<a name="l00142"></a>00142     <span class="keywordflow">for</span> ( i = 0 ; i < sx*sy ; i++ )
-<a name="l00143"></a>00143     {
-<a name="l00144"></a>00144       <span class="comment">/* allocate dpoint object */</span>
-<a name="l00145"></a>00145       <span class="keywordflow">if</span> ( NULL == ( points = (dpoint*) cpl_calloc(sz, <span class="keyword">sizeof</span>(dpoint)) ) )
-<a name="l00146"></a>00146     {
-<a name="l00147"></a>00147       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!\n"</span>) ;
-<a name="l00148"></a>00148       cpl_imagelist_delete(ret_iml) ;
-<a name="l00149"></a>00149       <span class="keywordflow">return</span> NULL ;
-<a name="l00150"></a>00150     }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152       <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )
-<a name="l00153"></a>00153       {
-<a name="l00154"></a>00154       <span class="keywordflow">if</span>(NULL==(img_tmp = cpl_imagelist_get(flatStack,z))) {
-<a name="l00155"></a>00155         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image!"</span>);
-<a name="l00156"></a>00156           cpl_imagelist_delete(ret_iml) ;
-<a name="l00157"></a>00157             <span class="keywordflow">return</span> NULL;
-<a name="l00158"></a>00158       } <span class="keywordflow">else</span> {
-<a name="l00159"></a>00159         psrcdata=cpl_image_get_data_float(img_tmp);
-<a name="l00160"></a>00160         points[z].x = (double)stats[z]->cleanmean ;
-<a name="l00161"></a>00161         points[z].y = (double)psrcdata[i] ;
-<a name="l00162"></a>00162       }
-<a name="l00163"></a>00163       }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> ( NULL == ( coeffs = sinfo_fit_1d_poly(order, points, sz, NULL) ) )
-<a name="l00167"></a>00167       {
-<a name="l00168"></a>00168       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not fit spectrum of pixel: %d\n"</span>, i) ;
-<a name="l00169"></a>00169       <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )
-<a name="l00170"></a>00170         {
-<a name="l00171"></a>00171           presdata=cpl_image_get_data_float(cpl_imagelist_get(ret_iml,z));
-<a name="l00172"></a>00172           presdata[i] = ZERO ;
-<a name="l00173"></a>00173         }
-<a name="l00174"></a>00174       }
-<a name="l00175"></a>00175       <span class="keywordflow">else</span>
-<a name="l00176"></a>00176       {
-<a name="l00177"></a>00177     <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )
-<a name="l00178"></a>00178         {
-<a name="l00179"></a>00179           <span class="keywordflow">if</span>(NULL==(img_tmp = cpl_imagelist_get(ret_iml,z))) {
-<a name="l00180"></a>00180         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image!"</span>);
-<a name="l00181"></a>00181         cpl_imagelist_delete(ret_iml) ;
-<a name="l00182"></a>00182         <span class="keywordflow">return</span> NULL;
-<a name="l00183"></a>00183           } <span class="keywordflow">else</span> {
-<a name="l00184"></a>00184         presdata=cpl_image_get_data_float(img_tmp);
-<a name="l00185"></a>00185         presdata[i] = coeffs[z] ;
-<a name="l00186"></a>00186           }
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188       }
-<a name="l00189"></a>00189       cpl_free(points) ;
-<a name="l00190"></a>00190       cpl_free(coeffs) ;
-<a name="l00191"></a>00191     }
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )
-<a name="l00194"></a>00194     {
-<a name="l00195"></a>00195         cpl_free (stats[z]) ;
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197     cpl_free(stats);
-<a name="l00198"></a>00198     <span class="keywordflow">return</span> ret_iml ;
-<a name="l00199"></a>00199 }
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00225"></a>00225 cpl_image * sinfo_new_search_bad_pixels( cpl_imagelist *  coeffs,
-<a name="l00226"></a>00226                             <span class="keywordtype">double</span>     threshSigmaFactor,
-<a name="l00227"></a>00227                             <span class="keywordtype">double</span>     nonlinearThresh,
-<a name="l00228"></a>00228                             <span class="keywordtype">float</span>      loReject,
-<a name="l00229"></a>00229                             <span class="keywordtype">float</span>      hiReject )
-<a name="l00230"></a>00230 {
-<a name="l00231"></a>00231      <span class="keywordtype">int</span> i, z ;
-<a name="l00232"></a>00232     Stats * stats ;
-<a name="l00233"></a>00233     <span class="keywordtype">int</span> sx=0;
-<a name="l00234"></a>00234     <span class="keywordtype">int</span> sy=0;
-<a name="l00235"></a>00235     <span class="keywordtype">int</span> sz=0;
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     cpl_image * img_res ;
-<a name="l00238"></a>00238     cpl_image* img_src=NULL;
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240     <span class="keywordtype">float</span>* psrcdata=NULL;
-<a name="l00241"></a>00241     <span class="keywordtype">float</span>* presdata=NULL;
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="keywordflow">if</span> ( NULL == coeffs )
-<a name="l00244"></a>00244     {
-<a name="l00245"></a>00245         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;
-<a name="l00246"></a>00246         <span class="keywordflow">return</span> NULL ;
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248     <span class="keywordflow">if</span> ( threshSigmaFactor <= 0. )
-<a name="l00249"></a>00249     {
-<a name="l00250"></a>00250         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong sigma factor given, 0 or negativ!\n"</span>) ;
-<a name="l00251"></a>00251         <span class="keywordflow">return</span> NULL ;
-<a name="l00252"></a>00252     }
-<a name="l00253"></a>00253     <span class="keywordflow">if</span> ( nonlinearThresh <= 0. )
-<a name="l00254"></a>00254     {
-<a name="l00255"></a>00255         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong nonlinear threshold value given, "</span>
-<a name="l00256"></a>00256                         <span class="stringliteral">"0 or negative!"</span>) ;
-<a name="l00257"></a>00257         <span class="keywordflow">return</span> NULL ;
-<a name="l00258"></a>00258     }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     sz=cpl_imagelist_get_size(coeffs);
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     <span class="keywordflow">if</span> ( sz <= 1 )
-<a name="l00263"></a>00263     {
-<a name="l00264"></a>00264         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given, only one plane!\n"</span>) ;
-<a name="l00265"></a>00265         <span class="keywordflow">return</span> NULL ;
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268     <span class="comment">/* Note that we refer to image #1! */</span>
-<a name="l00269"></a>00269     img_src=cpl_imagelist_get(coeffs,1);
-<a name="l00270"></a>00270     sx=cpl_image_get_size_x(img_src);
-<a name="l00271"></a>00271     sy=cpl_image_get_size_y(img_src);
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     <span class="comment">/* allocate memory for return image */</span>
-<a name="l00274"></a>00274     <span class="keywordflow">if</span> ( NULL == (img_res = cpl_image_new(sx, sy,CPL_TYPE_FLOAT)) )
-<a name="l00275"></a>00275     {
-<a name="l00276"></a>00276         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!\n"</span>) ;
-<a name="l00277"></a>00277         <span class="keywordflow">return</span> NULL ;
-<a name="l00278"></a>00278     }
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="comment">/* first test the sensitivity deviations of each pixel */</span>
-<a name="l00282"></a>00282     <span class="comment">/* determine the clean mean and clean standard deviation </span>
-<a name="l00283"></a>00283 <span class="comment">       in the whole image frame */</span>
-<a name="l00284"></a>00284    
-<a name="l00285"></a>00285     stats = sinfo_new_image_stats_on_rectangle(img_src, 
-<a name="l00286"></a>00286                                                loReject, 
-<a name="l00287"></a>00287                                                hiReject, 0, 0, 
-<a name="l00288"></a>00288                                                sx-1, sy-1) ;
-<a name="l00289"></a>00289     <span class="keywordflow">if</span> ( NULL == stats )
-<a name="l00290"></a>00290     {
-<a name="l00291"></a>00291         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not determine image statistics!\n"</span>) ;
-<a name="l00292"></a>00292         cpl_image_delete(img_res) ;
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> NULL ;
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295     
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     psrcdata=cpl_image_get_data_float(img_src);
-<a name="l00298"></a>00298     presdata=cpl_image_get_data_float(img_res);
-<a name="l00299"></a>00299     <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )
-<a name="l00300"></a>00300     {
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302         <span class="keywordflow">if</span> ( isnan(psrcdata[i]) )
-<a name="l00303"></a>00303         {
-<a name="l00304"></a>00304             presdata[i] = 0. ;
-<a name="l00305"></a>00305         }
-<a name="l00306"></a>00306         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( stats->cleanmean - psrcdata[i] > 
-<a name="l00307"></a>00307                   threshSigmaFactor*stats->cleanstdev )
-<a name="l00308"></a>00308         {
-<a name="l00309"></a>00309             presdata[i] = 0. ;
-<a name="l00310"></a>00310         }
-<a name="l00311"></a>00311         <span class="keywordflow">else</span>
-<a name="l00312"></a>00312         {
-<a name="l00313"></a>00313            presdata[i] = 1. ;
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315     }
-<a name="l00316"></a>00316     cpl_free(stats) ;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     <span class="comment">/* -----------------------------------------------------</span>
-<a name="l00320"></a>00320 <span class="comment">     * now test additionally the non-linearity if available. </span>
-<a name="l00321"></a>00321 <span class="comment">     * if a strong non-linearity occurs for pixels which are </span>
-<a name="l00322"></a>00322 <span class="comment">     * declared "good" so far (normal linear coefficients)</span>
-<a name="l00323"></a>00323 <span class="comment">     * these pixels will be declared bad.    </span>
-<a name="l00324"></a>00324 <span class="comment">     */</span>
-<a name="l00325"></a>00325     <span class="keywordflow">if</span> (sz > 1) 
-<a name="l00326"></a>00326     {
-<a name="l00327"></a>00327         <span class="keywordflow">for</span> ( z = 2 ; z < sz ; z++ )
-<a name="l00328"></a>00328         {
-<a name="l00329"></a>00329       img_src=cpl_imagelist_get(coeffs,z);
-<a name="l00330"></a>00330           sx=cpl_image_get_size_x(img_src);
-<a name="l00331"></a>00331           sy=cpl_image_get_size_y(img_src);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333           psrcdata=cpl_image_get_data_float(img_src);
-<a name="l00334"></a>00334             stats = sinfo_new_image_stats_on_rectangle(img_src, loReject, 
-<a name="l00335"></a>00335                                                  hiReject, 0, 0, sx-1, sy-1) ;
-<a name="l00336"></a>00336             <span class="keywordflow">if</span> ( NULL == stats )
-<a name="l00337"></a>00337             {
-<a name="l00338"></a>00338                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not determine image statistics!\n"</span>) ;
-<a name="l00339"></a>00339                 cpl_image_delete(img_res) ;
-<a name="l00340"></a>00340                 <span class="keywordflow">return</span> NULL ;
-<a name="l00341"></a>00341             }
-<a name="l00342"></a>00342           presdata=cpl_image_get_data_float(img_res);
-<a name="l00343"></a>00343             <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )
-<a name="l00344"></a>00344             {
-<a name="l00345"></a>00345                 <span class="keywordflow">if</span> ( presdata[i] == 1. && 
-<a name="l00346"></a>00346                      (fabs(psrcdata[i] - stats->cleanmean) > 
-<a name="l00347"></a>00347                                      threshSigmaFactor*stats->cleanstdev ||
-<a name="l00348"></a>00348               fabs(psrcdata[i]) > nonlinearThresh ) ) 
-<a name="l00349"></a>00349                 {
-<a name="l00350"></a>00350                     presdata[i] = 0. ;
-<a name="l00351"></a>00351                 }
-<a name="l00352"></a>00352             }
-<a name="l00353"></a>00353             cpl_free(stats) ;
-<a name="l00354"></a>00354         }
-<a name="l00355"></a>00355     }
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357     <span class="keywordflow">return</span> img_res ;
-<a name="l00358"></a>00358 }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 
-<a name="l00383"></a>00383 cpl_image * sinfo_new_search_bad_pixels_via_noise(cpl_imagelist *  darks,
-<a name="l00384"></a>00384                                     <span class="keywordtype">float</span>      threshSigmaFactor,
-<a name="l00385"></a>00385                                     <span class="keywordtype">float</span>      loReject,
-<a name="l00386"></a>00386                                     <span class="keywordtype">float</span>      hiReject )
-<a name="l00387"></a>00387 {
-<a name="l00388"></a>00388     cpl_image * bp_map ;
-<a name="l00389"></a>00389     <span class="keywordtype">int</span>        z, n, i ;
-<a name="l00390"></a>00390     <span class="keywordtype">int</span>        lx, ly ;
-<a name="l00391"></a>00391     <span class="keywordtype">int</span>        row, col ;
-<a name="l00392"></a>00392     <span class="keywordtype">int</span>        low_n, high_n ;
-<a name="l00393"></a>00393     <span class="keywordtype">float</span>    * spectrum ;
-<a name="l00394"></a>00394     <span class="keywordtype">double</span>     pix_sum ;
-<a name="l00395"></a>00395     <span class="keywordtype">double</span>     sqr_sum ;
-<a name="l00396"></a>00396     Stats    * stats ;
-<a name="l00397"></a>00397     cpl_image* img_src=NULL;
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399     <span class="keywordtype">float</span>* psrcdata=NULL;
-<a name="l00400"></a>00400     <span class="keywordtype">float</span>* pbpdata=NULL;
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402     <span class="keywordtype">int</span> lz=0;
-<a name="l00403"></a>00403     
-<a name="l00404"></a>00404     <span class="keywordflow">if</span> ( NULL == darks )
-<a name="l00405"></a>00405     {
-<a name="l00406"></a>00406         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;
-<a name="l00407"></a>00407         <span class="keywordflow">return</span> NULL ;
-<a name="l00408"></a>00408     }
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410     <span class="keywordflow">if</span> ( threshSigmaFactor <= 0. )
-<a name="l00411"></a>00411     {
-<a name="l00412"></a>00412         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"factor is smaller or equal zero!\n"</span>) ;
-<a name="l00413"></a>00413         <span class="keywordflow">return</span> NULL ;
-<a name="l00414"></a>00414     }
-<a name="l00415"></a>00415     <span class="keywordflow">if</span> ( loReject < 0. || hiReject < 0. || (loReject + hiReject) >= 100.  )
-<a name="l00416"></a>00416     {
-<a name="l00417"></a>00417         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong reject percentage values!\n"</span>) ;
-<a name="l00418"></a>00418         <span class="keywordflow">return</span> NULL ;
-<a name="l00419"></a>00419     }
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421     lz=cpl_imagelist_get_size(darks);
-<a name="l00422"></a>00422     <span class="keywordflow">if</span> ( lz < 1 )
-<a name="l00423"></a>00423     {
-<a name="l00424"></a>00424         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough dark frames given for good statistics!"</span>) ;
-<a name="l00425"></a>00425         <span class="keywordflow">return</span> NULL ;
-<a name="l00426"></a>00426     }
-<a name="l00427"></a>00427     img_src=cpl_imagelist_get(darks,0);
-<a name="l00428"></a>00428     
-<a name="l00429"></a>00429     lx = cpl_image_get_size_x(img_src) ;
-<a name="l00430"></a>00430     ly = cpl_image_get_size_y(img_src) ;
-<a name="l00431"></a>00431   
-<a name="l00432"></a>00432     low_n  = (int)(loReject/100. *(<span class="keywordtype">float</span>)lz) ;
-<a name="l00433"></a>00433     high_n = (int)(hiReject/100. *(<span class="keywordtype">float</span>)lz) ;
-<a name="l00434"></a>00434     <span class="keywordflow">if</span> (NULL == (bp_map = cpl_image_new (lx, ly,CPL_TYPE_FLOAT) ) )
-<a name="l00435"></a>00435     {
-<a name="l00436"></a>00436         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate new memory!\n"</span>) ;
-<a name="l00437"></a>00437         <span class="keywordflow">return</span> NULL ;
-<a name="l00438"></a>00438     }
-<a name="l00439"></a>00439     pbpdata=cpl_image_get_data(bp_map);
-<a name="l00440"></a>00440     <span class="keywordflow">if</span> (NULL == (spectrum = (<span class="keywordtype">float</span>*) cpl_calloc(lz, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )
-<a name="l00441"></a>00441     {
-<a name="l00442"></a>00442         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate new memory!\n"</span>) ;
-<a name="l00443"></a>00443         <span class="keywordflow">return</span> NULL ;
-<a name="l00444"></a>00444     }
-<a name="l00445"></a>00445     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ ) {
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447       <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ ) {
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     <span class="keywordflow">for</span> ( z = 0 ; z < lz ; z++ ) {
-<a name="l00450"></a>00450       img_src=cpl_imagelist_get(darks,z);
-<a name="l00451"></a>00451       psrcdata=cpl_image_get_data(img_src);
-<a name="l00452"></a>00452       spectrum[z] = psrcdata[col+lx*row] ;
-<a name="l00453"></a>00453     }
-<a name="l00454"></a>00454     sinfo_pixel_qsort(spectrum, lz) ;
-<a name="l00455"></a>00455     n = 0  ;
-<a name="l00456"></a>00456     pix_sum = 0.; 
-<a name="l00457"></a>00457     sqr_sum = 0.; 
-<a name="l00458"></a>00458     <span class="keywordflow">for</span> ( i = low_n ; i < lz - high_n ; i++ ) {
-<a name="l00459"></a>00459       pix_sum += (double)spectrum[i] ;
-<a name="l00460"></a>00460       sqr_sum += ((double)spectrum[i]*(<span class="keywordtype">double</span>)spectrum[i]) ;
-<a name="l00461"></a>00461       n++ ;
-<a name="l00462"></a>00462     }
-<a name="l00463"></a>00463         <span class="comment">/* compute the noise in each pixel */</span>
-<a name="l00464"></a>00464     pix_sum /= (double)n ;
-<a name="l00465"></a>00465     sqr_sum /= (double)n ;
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467         pbpdata[col+lx*row] = (float)sqrt(sqr_sum - pix_sum*pix_sum) ;
-<a name="l00468"></a>00468       }
-<a name="l00469"></a>00469     }
-<a name="l00470"></a>00470     cpl_free(spectrum) ;
-<a name="l00471"></a>00471     <span class="keywordflow">if</span> ( NULL == (stats = sinfo_new_image_stats_on_rectangle (bp_map, loReject, 
-<a name="l00472"></a>00472                                        hiReject, 200, 200, 800, 800) ) )
-<a name="l00473"></a>00473     {
-<a name="l00474"></a>00474         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image statistics!\n"</span>) ;
-<a name="l00475"></a>00475         cpl_image_delete (bp_map) ;
-<a name="l00476"></a>00476         <span class="keywordflow">return</span> NULL ;
-<a name="l00477"></a>00477     }
-<a name="l00478"></a>00478  
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480     <span class="comment">/* now build the bad pixel mask */</span>
-<a name="l00481"></a>00481     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ ) {
-<a name="l00482"></a>00482       <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ ) {
-<a name="l00483"></a>00483          <span class="keywordflow">if</span> (pbpdata[col+lx*row] >
-<a name="l00484"></a>00484              stats->cleanmean+threshSigmaFactor*stats->cleanstdev ||
-<a name="l00485"></a>00485              pbpdata[col+lx*row] < 
-<a name="l00486"></a>00486              stats->cleanmean-threshSigmaFactor*stats->cleanstdev) 
-<a name="l00487"></a>00487        {
-<a name="l00488"></a>00488              pbpdata[col+lx*row] = 0. ;
-<a name="l00489"></a>00489        }
-<a name="l00490"></a>00490            <span class="keywordflow">else</span>
-<a name="l00491"></a>00491            {
-<a name="l00492"></a>00492          pbpdata[col+lx*row] = 1. ;
-<a name="l00493"></a>00493            }
-<a name="l00494"></a>00494       }
-<a name="l00495"></a>00495     }
-<a name="l00496"></a>00496     cpl_free (stats) ;
-<a name="l00497"></a>00497     <span class="keywordflow">return</span> bp_map ;
-<a name="l00498"></a>00498 }
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501 
-<a name="l00510"></a>00510 <span class="keywordtype">int</span> sinfo_new_count_bad_pixels (cpl_image * bad )
-<a name="l00511"></a>00511 {
-<a name="l00512"></a>00512     <span class="keywordtype">int</span> i, n ;
-<a name="l00513"></a>00513     <span class="keywordtype">int</span> sx=cpl_image_get_size_x(bad);
-<a name="l00514"></a>00514     <span class="keywordtype">int</span> sy=cpl_image_get_size_y(bad);
-<a name="l00515"></a>00515     <span class="keywordtype">float</span>* pbpdata=cpl_image_get_data(bad);
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517     n = 0 ;
-<a name="l00518"></a>00518     <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )
-<a name="l00519"></a>00519     {
-<a name="l00520"></a>00520         <span class="keywordflow">if</span> ( pbpdata[i] == 0 || isnan(pbpdata[i]) )
-<a name="l00521"></a>00521         {
-<a name="l00522"></a>00522             n++ ;
-<a name="l00523"></a>00523         }
-<a name="l00524"></a>00524     }
-<a name="l00525"></a>00525     <span class="keywordflow">return</span> n ;
-<a name="l00526"></a>00526 }
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528 
-<a name="l00556"></a>00556 cpl_image * sinfo_new_abs_dist_image(cpl_image * im, <span class="keywordtype">float</span> fmedian )
-<a name="l00557"></a>00557 {
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559     cpl_image *   image       ;
-<a name="l00560"></a>00560     pixelvalue * value       ;
-<a name="l00561"></a>00561     pixelvalue   dist      ;
-<a name="l00562"></a>00562     pixelvalue   median_dist      ;
-<a name="l00563"></a>00563     pixelvalue*   pix_dist=NULL ;
-<a name="l00564"></a>00564     <span class="keywordtype">int</span>        * position    ;
-<a name="l00565"></a>00565     <span class="keywordtype">int</span>          nposition   ;
-<a name="l00566"></a>00566     <span class="keywordtype">int</span>          n, m, i, j ;
-<a name="l00567"></a>00567     <span class="keywordtype">double</span>       sum, sum2 ;
-<a name="l00568"></a>00568     <span class="keywordtype">double</span>       stdev ;
-<a name="l00569"></a>00569     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l00570"></a>00570     <span class="keywordtype">int</span> lx=0;
-<a name="l00571"></a>00571     <span class="keywordtype">int</span> ly=0;
-<a name="l00572"></a>00572 
-<a name="l00573"></a>00573     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00574"></a>00574      {
-<a name="l00575"></a>00575         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input\n"</span>) ;
-<a name="l00576"></a>00576         <span class="keywordflow">return</span> NULL ;
-<a name="l00577"></a>00577     }
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579     image = cpl_image_duplicate ( im ) ;
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581     <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00582"></a>00582 <span class="comment">     * go through all pixels</span>
-<a name="l00583"></a>00583 <span class="comment">     */</span>
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585     sum = 0. ;
-<a name="l00586"></a>00586     sum2 = 0. ;
-<a name="l00587"></a>00587     m = 0 ;
-<a name="l00588"></a>00588     
-<a name="l00589"></a>00589     pdata = cpl_image_get_data(im);
-<a name="l00590"></a>00590     lx=cpl_image_get_size_x(im);
-<a name="l00591"></a>00591     ly=cpl_image_get_size_y(im);
-<a name="l00592"></a>00592     pix_dist=(pixelvalue*)cpl_calloc(lx*ly,<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594     <span class="keywordflow">for</span> ( i = 0 ;  i < (int) lx*ly ; i++ )
-<a name="l00595"></a>00595     {
-<a name="l00596"></a>00596       <span class="comment">/* blank pixels are not replaced */</span>
-<a name="l00597"></a>00597       <span class="keywordflow">if</span> ( isnan(pdata[i]) )
-<a name="l00598"></a>00598         {
-<a name="l00599"></a>00599       continue ;
-<a name="l00600"></a>00600         }
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span>
-<a name="l00603"></a>00603         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;
-<a name="l00604"></a>00604         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l00607"></a>00607 <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span>
-<a name="l00608"></a>00608 <span class="comment">         */</span>
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span>
-<a name="l00611"></a>00611         position[1] = i + lx     ; <span class="comment">/* upper       */</span>
-<a name="l00612"></a>00612         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span>
-<a name="l00613"></a>00613         position[3] = i + 1      ; <span class="comment">/* right       */</span>
-<a name="l00614"></a>00614         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span>
-<a name="l00615"></a>00615         position[5] = i - lx     ; <span class="comment">/* lower       */</span>
-<a name="l00616"></a>00616         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span>
-<a name="l00617"></a>00617         position[7] = i - 1      ; <span class="comment">/* left        */</span>
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l00620"></a>00620 <span class="comment">         * determine the positions of the image margins, top positions are </span>
-<a name="l00621"></a>00621 <span class="comment">         * changed to low positions and vice versa. Right positions are </span>
-<a name="l00622"></a>00622 <span class="comment">         * changed to left positions and vice versa.</span>
-<a name="l00623"></a>00623 <span class="comment">         */</span>
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span>
-<a name="l00626"></a>00626         {
-<a name="l00627"></a>00627             position[4] += 2 * lx ;
-<a name="l00628"></a>00628             position[5] += 2 * lx ;
-<a name="l00629"></a>00629             position[6] += 2 * lx ;
-<a name="l00630"></a>00630         }
-<a name="l00631"></a>00631         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span>
-<a name="l00632"></a>00632         {
-<a name="l00633"></a>00633             position[0] -= 2 * lx ;
-<a name="l00634"></a>00634             position[1] -= 2 * lx ;
-<a name="l00635"></a>00635             position[2] -= 2 * lx ;
-<a name="l00636"></a>00636         }
-<a name="l00637"></a>00637         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span>
-<a name="l00638"></a>00638         {
-<a name="l00639"></a>00639             position[0] += 2 ;
-<a name="l00640"></a>00640             position[6] += 2 ;
-<a name="l00641"></a>00641             position[7] += 2 ;
-<a name="l00642"></a>00642         }
-<a name="l00643"></a>00643         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span>
-<a name="l00644"></a>00644         {
-<a name="l00645"></a>00645             position[2] -= 2 ;
-<a name="l00646"></a>00646             position[3] -= 2 ;
-<a name="l00647"></a>00647             position[4] -= 2 ;
-<a name="l00648"></a>00648         }
-<a name="l00649"></a>00649 
-<a name="l00650"></a>00650         <span class="comment">/* -------------------------------------------------------------------</span>
-<a name="l00651"></a>00651 <span class="comment">         * read the pixel values of the neighboring pixels,</span>
-<a name="l00652"></a>00652 <span class="comment">         * blanks are not considered</span>
-<a name="l00653"></a>00653 <span class="comment">         */</span>
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655         nposition = 8 ;
-<a name="l00656"></a>00656         n = 0 ;
-<a name="l00657"></a>00657         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )
-<a name="l00658"></a>00658         {
-<a name="l00659"></a>00659             <span class="keywordflow">if</span> ( !isnan(pdata[position[j]]) )
-<a name="l00660"></a>00660             {
-<a name="l00661"></a>00661                 value[n] = pdata[position[j]] ;
-<a name="l00662"></a>00662                 n ++ ;
-<a name="l00663"></a>00663             }
-<a name="l00664"></a>00664         }
-<a name="l00665"></a>00665         nposition = n ;
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span>
-<a name="l00668"></a>00668         {
-<a name="l00669"></a>00669             pdata[i] = ZERO ;
-<a name="l00670"></a>00670             cpl_free(value) ;
-<a name="l00671"></a>00671             cpl_free(position) ;
-<a name="l00672"></a>00672             continue ;
-<a name="l00673"></a>00673         }
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675         <span class="comment">/* determine the absolute distances */</span>
-<a name="l00676"></a>00676         dist = 0. ;
-<a name="l00677"></a>00677         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )
-<a name="l00678"></a>00678         {
-<a name="l00679"></a>00679             dist += (pdata[i] - value[n])*(pdata[i] - value[n]) ;    
-<a name="l00680"></a>00680         }
-<a name="l00681"></a>00681         dist = sqrt(dist)/(float) nposition ;
-<a name="l00682"></a>00682         pix_dist[m] = dist ;
-<a name="l00683"></a>00683         m++ ;
-<a name="l00684"></a>00684         sum += (double)dist ;
-<a name="l00685"></a>00685         sum2 += (double)dist * (<span class="keywordtype">double</span>)dist ;
-<a name="l00686"></a>00686         cpl_free(value) ;
-<a name="l00687"></a>00687         cpl_free(position) ;
-<a name="l00688"></a>00688     }
-<a name="l00689"></a>00689     sum /= (double)m ;
-<a name="l00690"></a>00690     sum2 /= (double)m ;
-<a name="l00691"></a>00691     stdev = sqrt(sum2 - sum*sum) ;
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693     median_dist = sinfo_new_median(pix_dist, m) ;
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )
-<a name="l00696"></a>00696     {
-<a name="l00697"></a>00697         <span class="comment">/* blank pixels are not replaced */</span>
-<a name="l00698"></a>00698         <span class="keywordflow">if</span> ( isnan(pdata[i]) )
-<a name="l00699"></a>00699         {
-<a name="l00700"></a>00700             continue ;
-<a name="l00701"></a>00701         }
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span>
-<a name="l00704"></a>00704         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;
-<a name="l00705"></a>00705         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l00708"></a>00708 <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span>
-<a name="l00709"></a>00709 <span class="comment">         */</span>
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span>
-<a name="l00712"></a>00712         position[1] = i + lx     ; <span class="comment">/* upper       */</span>
-<a name="l00713"></a>00713         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span>
-<a name="l00714"></a>00714         position[3] = i + 1      ; <span class="comment">/* right       */</span>
-<a name="l00715"></a>00715         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span>
-<a name="l00716"></a>00716         position[5] = i - lx     ; <span class="comment">/* lower       */</span>
-<a name="l00717"></a>00717         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span>
-<a name="l00718"></a>00718         position[7] = i - 1      ; <span class="comment">/* left        */</span>
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720         <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l00721"></a>00721 <span class="comment">         * determine the positions of the image margins, top positions are </span>
-<a name="l00722"></a>00722 <span class="comment">         * changed to low positions and vice versa. Right positions are </span>
-<a name="l00723"></a>00723 <span class="comment">         * changed to left positions and vice versa.</span>
-<a name="l00724"></a>00724 <span class="comment">         */</span>
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span>
-<a name="l00727"></a>00727         {
-<a name="l00728"></a>00728             position[4] += 2 * lx ;
-<a name="l00729"></a>00729             position[5] += 2 * lx ;
-<a name="l00730"></a>00730             position[6] += 2 * lx ;
-<a name="l00731"></a>00731         }
-<a name="l00732"></a>00732         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span>
-<a name="l00733"></a>00733         {
-<a name="l00734"></a>00734             position[0] -= 2 * lx ;
-<a name="l00735"></a>00735             position[1] -= 2 * lx ;
-<a name="l00736"></a>00736             position[2] -= 2 * lx ;
-<a name="l00737"></a>00737         }
-<a name="l00738"></a>00738         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span>
-<a name="l00739"></a>00739         {
-<a name="l00740"></a>00740             position[0] += 2 ;
-<a name="l00741"></a>00741             position[6] += 2 ;
-<a name="l00742"></a>00742             position[7] += 2 ;
-<a name="l00743"></a>00743         }
-<a name="l00744"></a>00744         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span>
-<a name="l00745"></a>00745         {
-<a name="l00746"></a>00746             position[2] -= 2 ;
-<a name="l00747"></a>00747             position[3] -= 2 ;
-<a name="l00748"></a>00748             position[4] -= 2 ;
-<a name="l00749"></a>00749         }
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751         <span class="comment">/* -------------------------------------------------------------------</span>
-<a name="l00752"></a>00752 <span class="comment">         * read the pixel values of the neighboring pixels,</span>
-<a name="l00753"></a>00753 <span class="comment">         * blanks are not considered</span>
-<a name="l00754"></a>00754 <span class="comment">         */</span>
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756         nposition = 8 ;
-<a name="l00757"></a>00757         n = 0 ;
-<a name="l00758"></a>00758         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )
-<a name="l00759"></a>00759         {
-<a name="l00760"></a>00760             <span class="keywordflow">if</span> ( !isnan(pdata[position[j]]) )
-<a name="l00761"></a>00761             {
-<a name="l00762"></a>00762                 value[n] = pdata[position[j]] ;
-<a name="l00763"></a>00763                 n ++ ;
-<a name="l00764"></a>00764             }
-<a name="l00765"></a>00765         }
-<a name="l00766"></a>00766         nposition = n ;
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span>
-<a name="l00769"></a>00769         {
-<a name="l00770"></a>00770             pdata[i] = ZERO ;
-<a name="l00771"></a>00771             cpl_free(value) ;
-<a name="l00772"></a>00772             cpl_free(position) ;
-<a name="l00773"></a>00773             continue ;
-<a name="l00774"></a>00774         }
-<a name="l00775"></a>00775 
-<a name="l00776"></a>00776         <span class="comment">/* determine the absolute distances */</span>
-<a name="l00777"></a>00777         dist = 0. ;
-<a name="l00778"></a>00778         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )
-<a name="l00779"></a>00779         {
-<a name="l00780"></a>00780             dist += (pdata[i] - value[n])*(pdata[i] - value[n]) ;    
-<a name="l00781"></a>00781         }
-<a name="l00782"></a>00782         dist = sqrt(dist)/(float) nposition ;
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784 
-<a name="l00785"></a>00785         <span class="comment">/* -----------------------------------------------------------------</span>
-<a name="l00786"></a>00786 <span class="comment">         * replace the pixel value by the sinfo_median on conditions:</span>
-<a name="l00787"></a>00787 <span class="comment">         * fmedian = 0: always replace with sinfo_median.</span>
-<a name="l00788"></a>00788 <span class="comment">         * fmedian < 0: interpret as absolute condition:</span>
-<a name="l00789"></a>00789 <span class="comment">         *              if |pixel - sinfo_median| > -fmedian</span>
-<a name="l00790"></a>00790 <span class="comment">         *              replace with sinfo_median.</span>
-<a name="l00791"></a>00791 <span class="comment">         * fmedian > 0: replace by sinfo_median (fmedian as a factor of</span>
-<a name="l00792"></a>00792 <span class="comment">         *              the square root of the sinfo_median itself)</span>
-<a name="l00793"></a>00793 <span class="comment">         *              if |pixel - median| >= fmedian * sqrt ( median )</span>
-<a name="l00794"></a>00794 <span class="comment">         *              considers a dependence on the pixel value.</span>
-<a name="l00795"></a>00795 <span class="comment">         *              This can be used to consider photon noise.</span>
-<a name="l00796"></a>00796 <span class="comment">         */</span>
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798         <span class="keywordflow">if</span> ( fmedian == 0 )
-<a name="l00799"></a>00799         {
-<a name="l00800"></a>00800             pdata[i] = dist ;
-<a name="l00801"></a>00801         }
-<a name="l00802"></a>00802         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&
-<a name="l00803"></a>00803                   fabs ( median_dist - dist ) >= -fmedian*stdev )
-<a name="l00804"></a>00804         {
-<a name="l00805"></a>00805             pdata[i] = dist ;
-<a name="l00806"></a>00806         }
-<a name="l00807"></a>00807         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&
-<a name="l00808"></a>00808                   fabs ( median_dist - dist ) >= 
-<a name="l00809"></a>00809                   fmedian*stdev * sqrt(fabs(dist)) )
-<a name="l00810"></a>00810         {
-<a name="l00811"></a>00811             pdata[i] = dist ;
-<a name="l00812"></a>00812         }
-<a name="l00813"></a>00813         <span class="keywordflow">else</span>
-<a name="l00814"></a>00814         {
-<a name="l00815"></a>00815             cpl_free (value) ;
-<a name="l00816"></a>00816             cpl_free (position) ;
-<a name="l00817"></a>00817             continue ;
-<a name="l00818"></a>00818         }
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820         cpl_free (value) ;
-<a name="l00821"></a>00821         cpl_free (position) ;
-<a name="l00822"></a>00822     }
-<a name="l00823"></a>00823     cpl_free(pix_dist);
-<a name="l00824"></a>00824     <span class="keywordflow">return</span> image ;
-<a name="l00825"></a>00825 }
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831 
-<a name="l00832"></a>00832 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00833"></a>00833 <span class="comment">   Function:       sinfo_new_local_median_image()</span>
-<a name="l00834"></a>00834 <span class="comment">   In      :       im: input image</span>
-<a name="l00835"></a>00835 <span class="comment">                   fmedian:  a factor to the local standard deviation</span>
-<a name="l00836"></a>00836 <span class="comment">                   loReject, hiReject: fraction of rejected values to determine</span>
-<a name="l00837"></a>00837 <span class="comment">                                       a clean standard deviation</span>
-<a name="l00838"></a>00838 <span class="comment">                   half_box_size: integer half size of the running box to </span>
-<a name="l00839"></a>00839 <span class="comment">                              determine the local clean standard deviation</span>
-<a name="l00840"></a>00840 <span class="comment">   Out     :       resulting image</span>
-<a name="l00841"></a>00841 <span class="comment">   Job     :       filter, calculates the local stdev in a moving box</span>
-<a name="l00842"></a>00842 <span class="comment">                   Then it calculates the difference of the pixel to the median</span>
-<a name="l00843"></a>00843 <span class="comment">                   of the nearest neighbors</span>
-<a name="l00844"></a>00844 <span class="comment">                   by using the 8 closest pixels of every pixel.</span>
-<a name="l00845"></a>00845 <span class="comment">                   The values in the output image are determined according</span>
-<a name="l00846"></a>00846 <span class="comment">                   to the values of the input parameter.</span>
-<a name="l00847"></a>00847 <span class="comment">                   If fmedian = 0: always replace by median</span>
-<a name="l00848"></a>00848 <span class="comment">                   if fmedian < 0: replace median if |median_dist - dist| ></span>
-<a name="l00849"></a>00849 <span class="comment">                                   fmedian * stdev </span>
-<a name="l00850"></a>00850 <span class="comment">                   if fmedian > 0: replace by median (fmedian as a factor of</span>
-<a name="l00851"></a>00851 <span class="comment">                                   the square root of the median itself)</span>
-<a name="l00852"></a>00852 <span class="comment">                                   if |pixel - median| >= fmedian*sqrt(median)</span>
-<a name="l00853"></a>00853 <span class="comment">                   This can be used to consider photon noise.</span>
-<a name="l00854"></a>00854 <span class="comment">                   This considers a dependence of the differences on the</span>
-<a name="l00855"></a>00855 <span class="comment">                   pixel values themselves.</span>
-<a name="l00856"></a>00856 <span class="comment">   Notice       :  it is assumed that most of the 8 nearest neighbor pixels</span>
-<a name="l00857"></a>00857 <span class="comment">                   are not bad pixels!</span>
-<a name="l00858"></a>00858 <span class="comment">                   blank pixels are not replaced!</span>
-<a name="l00859"></a>00859 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861 cpl_image * sinfo_new_local_median_image( cpl_image * im, 
-<a name="l00862"></a>00862                              <span class="keywordtype">float</span> fmedian, 
-<a name="l00863"></a>00863                              <span class="keywordtype">float</span> loReject,
-<a name="l00864"></a>00864                              <span class="keywordtype">float</span> hiReject,
-<a name="l00865"></a>00865                              <span class="keywordtype">int</span> half_box_size )
-<a name="l00866"></a>00866 {
-<a name="l00867"></a>00867     cpl_image *   image       ;
-<a name="l00868"></a>00868     pixelvalue * value       ;
-<a name="l00869"></a>00869     pixelvalue   median      ;
-<a name="l00870"></a>00870     <span class="keywordtype">int</span>        * position    ;
-<a name="l00871"></a>00871     <span class="keywordtype">int</span>          nposition   ;
-<a name="l00872"></a>00872     <span class="keywordtype">int</span>          n, i, j ;
-<a name="l00873"></a>00873     <span class="keywordtype">int</span>          llx, lly, urx, ury ;
-<a name="l00874"></a>00874     Stats *      stats ;
-<a name="l00875"></a>00875     <span class="keywordtype">int</span> lx=0;
-<a name="l00876"></a>00876     <span class="keywordtype">int</span> ly=0;
-<a name="l00877"></a>00877     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00878"></a>00878     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00879"></a>00879 
-<a name="l00880"></a>00880     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00881"></a>00881     {
-<a name="l00882"></a>00882         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;
-<a name="l00883"></a>00883         <span class="keywordflow">return</span> NULL ;
-<a name="l00884"></a>00884     }
-<a name="l00885"></a>00885     <span class="keywordflow">if</span> ( half_box_size < 0 )
-<a name="l00886"></a>00886     {
-<a name="l00887"></a>00887         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"negativ box_size given"</span>) ;
-<a name="l00888"></a>00888         <span class="keywordflow">return</span> NULL ;
-<a name="l00889"></a>00889     }
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     image = cpl_image_duplicate ( im ) ;
-<a name="l00892"></a>00892     lx=cpl_image_get_size_x(im);
-<a name="l00893"></a>00893     ly=cpl_image_get_size_y(im);
-<a name="l00894"></a>00894     pidata=cpl_image_get_data(im);
-<a name="l00895"></a>00895     podata=cpl_image_get_data(image);
-<a name="l00896"></a>00896     <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00897"></a>00897 <span class="comment">     * go through all pixels</span>
-<a name="l00898"></a>00898 <span class="comment">     */</span>
-<a name="l00899"></a>00899 
-<a name="l00900"></a>00900     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )
-<a name="l00901"></a>00901     {
-<a name="l00902"></a>00902         <span class="comment">/* blank pixels are not replaced */</span>
-<a name="l00903"></a>00903         <span class="keywordflow">if</span> ( isnan(pidata[i]) )
-<a name="l00904"></a>00904         {
-<a name="l00905"></a>00905             continue ;
-<a name="l00906"></a>00906         }
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908         <span class="comment">/* compute the image statistics in the box area */</span>
-<a name="l00909"></a>00909         llx = i%lx - half_box_size ; 
-<a name="l00910"></a>00910         <span class="keywordflow">if</span> ( llx < 0 ) llx = 0 ;
-<a name="l00911"></a>00911         lly = i%ly - half_box_size ;
-<a name="l00912"></a>00912         <span class="keywordflow">if</span> ( lly < 0 ) lly = 0 ;
-<a name="l00913"></a>00913         urx = i%lx + half_box_size ; 
-<a name="l00914"></a>00914         <span class="keywordflow">if</span> ( urx >= lx ) urx = lx - 1 ;
-<a name="l00915"></a>00915         ury = i%ly + half_box_size ;
-<a name="l00916"></a>00916         <span class="keywordflow">if</span> ( ury >= ly ) ury = ly - 1 ;
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918         <span class="keywordflow">if</span> ( NULL == (stats = sinfo_new_image_stats_on_rectangle (im, loReject,
-<a name="l00919"></a>00919                                hiReject, llx, lly, urx, ury)) ) 
-<a name="l00920"></a>00920         {
-<a name="l00921"></a>00921             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not determine image statistics "</span>);
-<a name="l00922"></a>00922             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"in pixel %d"</span>, i) ;
-<a name="l00923"></a>00923             continue ;
-<a name="l00924"></a>00924         }
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span>
-<a name="l00927"></a>00927         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;
-<a name="l00928"></a>00928         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930         <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00931"></a>00931 <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span>
-<a name="l00932"></a>00932 <span class="comment">         */</span>
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span>
-<a name="l00935"></a>00935         position[1] = i + lx     ; <span class="comment">/* upper       */</span>
-<a name="l00936"></a>00936         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span>
-<a name="l00937"></a>00937         position[3] = i + 1            ; <span class="comment">/* right       */</span>
-<a name="l00938"></a>00938         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span>
-<a name="l00939"></a>00939         position[5] = i - lx     ; <span class="comment">/* lower       */</span>
-<a name="l00940"></a>00940         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span>
-<a name="l00941"></a>00941         position[7] = i - 1            ; <span class="comment">/* left        */</span>
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943         <span class="comment">/*---------------------------------------------------------------------</span>
-<a name="l00944"></a>00944 <span class="comment">         * determine the positions of the image margins, top positions are </span>
-<a name="l00945"></a>00945 <span class="comment">         * changed to low positions and vice versa. Right positions are </span>
-<a name="l00946"></a>00946 <span class="comment">         * changed to left positions and vice versa.</span>
-<a name="l00947"></a>00947 <span class="comment">         */</span>
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span>
-<a name="l00950"></a>00950         {
-<a name="l00951"></a>00951             position[4] += 2 * lx ;
-<a name="l00952"></a>00952             position[5] += 2 * lx ;
-<a name="l00953"></a>00953             position[6] += 2 * lx ;
-<a name="l00954"></a>00954         }
-<a name="l00955"></a>00955         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span>
-<a name="l00956"></a>00956         {
-<a name="l00957"></a>00957             position[0] -= 2 * lx ;
-<a name="l00958"></a>00958             position[1] -= 2 * lx ;
-<a name="l00959"></a>00959             position[2] -= 2 * lx ;
-<a name="l00960"></a>00960         }
-<a name="l00961"></a>00961         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span>
-<a name="l00962"></a>00962         {
-<a name="l00963"></a>00963             position[0] += 2 ;
-<a name="l00964"></a>00964             position[6] += 2 ;
-<a name="l00965"></a>00965             position[7] += 2 ;
-<a name="l00966"></a>00966         }
-<a name="l00967"></a>00967         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span>
-<a name="l00968"></a>00968         {
-<a name="l00969"></a>00969             position[2] -= 2 ;
-<a name="l00970"></a>00970             position[3] -= 2 ;
-<a name="l00971"></a>00971             position[4] -= 2 ;
-<a name="l00972"></a>00972         }
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974         <span class="comment">/* ------------------------------------------------------------------</span>
-<a name="l00975"></a>00975 <span class="comment">         * read the pixel values of the neighboring pixels,</span>
-<a name="l00976"></a>00976 <span class="comment">         * blanks are not considered</span>
-<a name="l00977"></a>00977 <span class="comment">         */</span>
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979         nposition = 8 ;
-<a name="l00980"></a>00980         n = 0 ;
-<a name="l00981"></a>00981         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )
-<a name="l00982"></a>00982         {
-<a name="l00983"></a>00983             <span class="keywordflow">if</span> ( !isnan(pidata[position[j]]) )
-<a name="l00984"></a>00984             {
-<a name="l00985"></a>00985                 value[n] = pidata[position[j]] ;
-<a name="l00986"></a>00986                 n ++ ;
-<a name="l00987"></a>00987             }
-<a name="l00988"></a>00988         }
-<a name="l00989"></a>00989         nposition = n ;
-<a name="l00990"></a>00990 
-<a name="l00991"></a>00991         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span>
-<a name="l00992"></a>00992         {
-<a name="l00993"></a>00993             podata[i] = ZERO ;
-<a name="l00994"></a>00994             cpl_free(value) ;
-<a name="l00995"></a>00995             cpl_free(position) ;
-<a name="l00996"></a>00996             cpl_free(stats) ;
-<a name="l00997"></a>00997             continue ;
-<a name="l00998"></a>00998         }
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000         <span class="comment">/* sort the values and determine the median */</span>
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002         sinfo_pixel_qsort( value, nposition ) ;
-<a name="l01003"></a>01003         <span class="keywordflow">if</span> ( nposition % 2 == 1 )
-<a name="l01004"></a>01004         {
-<a name="l01005"></a>01005             median = value [ nposition/2 ] ;
-<a name="l01006"></a>01006         }
-<a name="l01007"></a>01007         <span class="keywordflow">else</span>
-<a name="l01008"></a>01008         {
-<a name="l01009"></a>01009             median = ( value [nposition/2 - 1] + value [nposition/2] ) / 2. ;
-<a name="l01010"></a>01010         }
-<a name="l01011"></a>01011 
-<a name="l01012"></a>01012         <span class="comment">/* -----------------------------------------------------------------</span>
-<a name="l01013"></a>01013 <span class="comment">         * replace the pixel value by the median on conditions:</span>
-<a name="l01014"></a>01014 <span class="comment">         * fmedian = 0: always replace with median.</span>
-<a name="l01015"></a>01015 <span class="comment">         * fmedian > 0: replace by median (fmedian as a factor of</span>
-<a name="l01016"></a>01016 <span class="comment">         *              the square root of the median itself)</span>
-<a name="l01017"></a>01017 <span class="comment">         *              if |pixel - median| >= fmedian * sqrt ( median )</span>
-<a name="l01018"></a>01018 <span class="comment">         *              considers a dependence on the pixel value.</span>
-<a name="l01019"></a>01019 <span class="comment">         *              This can be used to consider photon noise.</span>
-<a name="l01020"></a>01020 <span class="comment">         */</span>
-<a name="l01021"></a>01021 
-<a name="l01022"></a>01022         <span class="keywordflow">if</span> ( fmedian == 0 )
-<a name="l01023"></a>01023         {
-<a name="l01024"></a>01024             podata[i] = median ;
-<a name="l01025"></a>01025         }
-<a name="l01026"></a>01026         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&
-<a name="l01027"></a>01027                   fabs ( median - pidata[i] ) >= -fmedian * stats->cleanstdev)
-<a name="l01028"></a>01028         {
-<a name="l01029"></a>01029             podata[i] = median ;
-<a name="l01030"></a>01030         }
-<a name="l01031"></a>01031         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&
-<a name="l01032"></a>01032                   fabs ( median - pidata[i] ) >= fmedian * sqrt(fabs(median)) )
-<a name="l01033"></a>01033         {
-<a name="l01034"></a>01034             podata[i] = median ;
-<a name="l01035"></a>01035         }
-<a name="l01036"></a>01036         <span class="keywordflow">else</span>
-<a name="l01037"></a>01037         {
-<a name="l01038"></a>01038             cpl_free (value) ;
-<a name="l01039"></a>01039             cpl_free (position) ;
-<a name="l01040"></a>01040             cpl_free (stats) ;
-<a name="l01041"></a>01041             continue ;
-<a name="l01042"></a>01042         }
-<a name="l01043"></a>01043 
-<a name="l01044"></a>01044         cpl_free (value) ;
-<a name="l01045"></a>01045         cpl_free (position) ;
-<a name="l01046"></a>01046         cpl_free (stats) ;
-<a name="l01047"></a>01047     }
-<a name="l01048"></a>01048     <span class="keywordflow">return</span> image ;
-<a name="l01049"></a>01049 }
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052 
-<a name="l01053"></a>01053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l01054"></a>01054 <span class="comment">   Function:       sinfo_new_mean_image_in_spec()</span>
-<a name="l01055"></a>01055 <span class="comment">   In      :       image, a threshold parameter</span>
-<a name="l01056"></a>01056 <span class="comment">   Out     :       resulting image</span>
-<a name="l01057"></a>01057 <span class="comment">   Job     :       mean filter, calculates the mean for an image</span>
-<a name="l01058"></a>01058 <span class="comment">                   by using the 4 closest pixels of every pixel in spectral </span>
-<a name="l01059"></a>01059 <span class="comment">                   direction (column).</span>
-<a name="l01060"></a>01060 <span class="comment">                   The values in the output image are determined according</span>
-<a name="l01061"></a>01061 <span class="comment">                   to the values of the input parameter.</span>
-<a name="l01062"></a>01062 <span class="comment">                   If fmedian = 0: always replace by mean</span>
-<a name="l01063"></a>01063 <span class="comment">                   if fmedian < 0: replace by mean if |pixel - mean| ></span>
-<a name="l01064"></a>01064 <span class="comment">                                        -fmedian</span>
-<a name="l01065"></a>01065 <span class="comment">                   if fmedian > 0: replace by mean (fmedian as a factor of</span>
-<a name="l01066"></a>01066 <span class="comment">                                   the square root of the mean itself)</span>
-<a name="l01067"></a>01067 <span class="comment">                                   if |pixel - mean| >= fmedian * sqrt ( mean )</span>
-<a name="l01068"></a>01068 <span class="comment">                   This can be used to consider photon noise.</span>
-<a name="l01069"></a>01069 <span class="comment">                   This considers a dependence of the differences on the</span>
-<a name="l01070"></a>01070 <span class="comment">                   pixel values themselves.</span>
-<a name="l01071"></a>01071 <span class="comment">   Notice       :  it is assumed that most of the 4 nearest neighbor pixels</span>
-<a name="l01072"></a>01072 <span class="comment">                   are not bad pixels!</span>
-<a name="l01073"></a>01073 <span class="comment">                   blank pixels are not replaced!</span>
-<a name="l01074"></a>01074 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01075"></a>01075 
-<a name="l01076"></a>01076 cpl_image * sinfo_new_mean_image_in_spec( cpl_image * im, <span class="keywordtype">float</span> fmedian )
-<a name="l01077"></a>01077 {
-<a name="l01078"></a>01078     cpl_image *   image       ;
-<a name="l01079"></a>01079     pixelvalue * value       ;
-<a name="l01080"></a>01080     pixelvalue   mean      ;
-<a name="l01081"></a>01081     <span class="keywordtype">int</span>        * position    ;
-<a name="l01082"></a>01082     <span class="keywordtype">int</span>          nposition   ;
-<a name="l01083"></a>01083     <span class="keywordtype">int</span>          n, i, j ;
-<a name="l01084"></a>01084     <span class="keywordtype">int</span> lx=0;
-<a name="l01085"></a>01085     <span class="keywordtype">int</span> ly=0;
-<a name="l01086"></a>01086     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01087"></a>01087     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l01090"></a>01090     {
-<a name="l01091"></a>01091         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;
-<a name="l01092"></a>01092         <span class="keywordflow">return</span> NULL ;
-<a name="l01093"></a>01093     }
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095     image = cpl_image_duplicate ( im ) ;
-<a name="l01096"></a>01096     lx=cpl_image_get_size_x(im);
-<a name="l01097"></a>01097     ly=cpl_image_get_size_y(im);
-<a name="l01098"></a>01098     pidata=cpl_image_get_data(im);
-<a name="l01099"></a>01099     podata=cpl_image_get_data(image);
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101     <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l01102"></a>01102 <span class="comment">     * go through all pixels</span>
-<a name="l01103"></a>01103 <span class="comment">     */</span>
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )
-<a name="l01106"></a>01106     {
-<a name="l01107"></a>01107         <span class="comment">/* blank pixels are not replaced */</span>
-<a name="l01108"></a>01108         <span class="keywordflow">if</span> ( isnan(pidata[i]) )
-<a name="l01109"></a>01109         {
-<a name="l01110"></a>01110             continue ;
-<a name="l01111"></a>01111         }
-<a name="l01112"></a>01112 
-<a name="l01113"></a>01113         <span class="comment">/* initialize the buffer variables for the 2 nearest </span>
-<a name="l01114"></a>01114 <span class="comment">           spectral neighbors */</span>
-<a name="l01115"></a>01115         value = (pixelvalue * )cpl_calloc ( 4, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;
-<a name="l01116"></a>01116         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 4, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;
-<a name="l01117"></a>01117 
-<a name="l01118"></a>01118         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l01119"></a>01119 <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span>
-<a name="l01120"></a>01120 <span class="comment">         */</span>
-<a name="l01121"></a>01121 
-<a name="l01122"></a>01122         position[0] = i + lx     ; <span class="comment">/* upper       */</span>
-<a name="l01123"></a>01123         position[1] = i + 2*lx   ; <span class="comment">/* upper       */</span>
-<a name="l01124"></a>01124         position[2] = i - lx     ; <span class="comment">/* lower       */</span>
-<a name="l01125"></a>01125         position[3] = i - 2*lx   ; <span class="comment">/* lower       */</span>
-<a name="l01126"></a>01126 
-<a name="l01127"></a>01127         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l01128"></a>01128 <span class="comment">         * determine the positions of the image margins, top positions are </span>
-<a name="l01129"></a>01129 <span class="comment">         * changed to low positions and vice versa. Right positions are changed</span>
-<a name="l01130"></a>01130 <span class="comment">         * to left positions and vice versa.</span>
-<a name="l01131"></a>01131 <span class="comment">         */</span>
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span>
-<a name="l01134"></a>01134         {
-<a name="l01135"></a>01135             position[2] += 2 * lx ;
-<a name="l01136"></a>01136             position[3] += 4 * lx ;
-<a name="l01137"></a>01137         }
-<a name="l01138"></a>01138         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span>
-<a name="l01139"></a>01139         {
-<a name="l01140"></a>01140             position[0] -= 2 * lx ;
-<a name="l01141"></a>01141             position[1] -= 4 * lx ;
-<a name="l01142"></a>01142         }
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144         <span class="comment">/* -------------------------------------------------------------------</span>
-<a name="l01145"></a>01145 <span class="comment">         * read the pixel values of the neighboring pixels,</span>
-<a name="l01146"></a>01146 <span class="comment">         * blanks are not considered</span>
-<a name="l01147"></a>01147 <span class="comment">         */</span>
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149         nposition = 4 ;
-<a name="l01150"></a>01150         n = 0 ;
-<a name="l01151"></a>01151         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )
-<a name="l01152"></a>01152         {
-<a name="l01153"></a>01153             <span class="keywordflow">if</span> ( !isnan(pidata[position[j]]) )
-<a name="l01154"></a>01154             {
-<a name="l01155"></a>01155                 value[n] = pidata[position[j]] ;
-<a name="l01156"></a>01156                 n ++ ;
-<a name="l01157"></a>01157             }
-<a name="l01158"></a>01158         }
-<a name="l01159"></a>01159         nposition = n ;
-<a name="l01160"></a>01160 
-<a name="l01161"></a>01161         <span class="keywordflow">if</span> ( nposition < 1 )  <span class="comment">/* all neighbors are blank */</span>
-<a name="l01162"></a>01162         {
-<a name="l01163"></a>01163             podata[i] = ZERO ;
-<a name="l01164"></a>01164             cpl_free(value) ;
-<a name="l01165"></a>01165             cpl_free(position) ;
-<a name="l01166"></a>01166             continue ;
-<a name="l01167"></a>01167         }
-<a name="l01168"></a>01168 
-<a name="l01169"></a>01169         <span class="comment">/* determine the mean */</span>
-<a name="l01170"></a>01170         mean = 0. ;
-<a name="l01171"></a>01171         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )
-<a name="l01172"></a>01172         {
-<a name="l01173"></a>01173             mean += value[n] ;
-<a name="l01174"></a>01174         }
-<a name="l01175"></a>01175         mean /= (float) nposition ;
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177         <span class="comment">/* -----------------------------------------------------------------</span>
-<a name="l01178"></a>01178 <span class="comment">         * replace the pixel value by the median on conditions:</span>
-<a name="l01179"></a>01179 <span class="comment">         * fmedian = 0:","always replace with mean.</span>
-<a name="l01180"></a>01180 <span class="comment">         * fmedian < 0: interpret as absolute condition:</span>
-<a name="l01181"></a>01181 <span class="comment">         *              if |pixel - mean| > -fmedian</span>
-<a name="l01182"></a>01182 <span class="comment">         *              replace with mean.</span>
-<a name="l01183"></a>01183 <span class="comment">         */</span>
-<a name="l01184"></a>01184 
-<a name="l01185"></a>01185         <span class="keywordflow">if</span> ( fmedian == 0 )
-<a name="l01186"></a>01186         {
-<a name="l01187"></a>01187             podata[i] = mean ;
-<a name="l01188"></a>01188         }
-<a name="l01189"></a>01189         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&
-<a name="l01190"></a>01190                   fabs ( mean - pidata[i] ) >= -fmedian )
-<a name="l01191"></a>01191         {
-<a name="l01192"></a>01192             podata[i] = mean ;
-<a name="l01193"></a>01193         }
-<a name="l01194"></a>01194         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&
-<a name="l01195"></a>01195                   fabs ( mean - pidata[i] ) >= fmedian * sqrt(fabs(mean)) )
-<a name="l01196"></a>01196         {
-<a name="l01197"></a>01197             podata[i] = mean ;
-<a name="l01198"></a>01198         }
-<a name="l01199"></a>01199         <span class="keywordflow">else</span>
-<a name="l01200"></a>01200         {
-<a name="l01201"></a>01201             cpl_free (value) ;
-<a name="l01202"></a>01202             cpl_free (position) ;
-<a name="l01203"></a>01203             continue ;
-<a name="l01204"></a>01204         }
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206         cpl_free (value) ;
-<a name="l01207"></a>01207         cpl_free (position) ;
-<a name="l01208"></a>01208     }
-<a name="l01209"></a>01209     <span class="keywordflow">return</span> image ;
-<a name="l01210"></a>01210 }
-<a name="l01211"></a>01211 
-<a name="l01212"></a>01212 
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 
-<a name="l01215"></a>01215 
-<a name="l01216"></a>01216 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* amodigli  18/04/02  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_detlin.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_fit_curve.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> cpl_imagelist * </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_new_fit_intensity_course(cpl_imagelist * flatStack,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="keywordtype">int</span>       order,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="keywordtype">float</span>     loReject,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="keywordtype">float</span>     hiReject )</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_imagelist * ret_iml ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     dpoint  * points ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordtype">int</span>       i, z ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keywordtype">double</span> * coeffs ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     Stats  ** stats=NULL ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">int</span> sx;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">int</span> sy;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">int</span> sz;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keywordtype">float</span>* psrcdata;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">float</span>* presdata;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_image* img_tmp=NULL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     sx=cpl_image_get_size_x(cpl_imagelist_get(flatStack,0));</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     sy=cpl_image_get_size_y(cpl_imagelist_get(flatStack,0));</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     sz=cpl_imagelist_get_size(flatStack);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     stats=(Stats**) cpl_calloc(sz,<span class="keyword">sizeof</span>(Stats*)) ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">if</span> ( NULL == flatStack )</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">if</span> ( order <= 0 )</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of polynomial given!"</span>) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="comment">/* allocate memory for returned cube */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     ret_iml = cpl_imagelist_new();</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       img_tmp=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       cpl_imagelist_set(ret_iml,img_tmp,z);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       stats[z]=</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>        sinfo_new_image_stats_on_rectangle(cpl_imagelist_get(flatStack,z), </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                                                 loReject, </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                                                 hiReject, </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                                                 0, </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                                 0, </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                                                 sx-1, </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                                 sy-1) ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <span class="keywordflow">if</span> ( stats[z] == NULL )</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not compute image statistics "</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                             <span class="stringliteral">"in plane: %d"</span>, z) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>             cpl_imagelist_delete(ret_iml) ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="comment">/* go through the image plane and store the spectra in a double </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">       points data structure */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">for</span> ( i = 0 ; i < sx*sy ; i++ )</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       <span class="comment">/* allocate dpoint object */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       <span class="keywordflow">if</span> ( NULL == ( points = (dpoint*) cpl_calloc(sz, <span class="keyword">sizeof</span>(dpoint)) ) )</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!\n"</span>) ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       cpl_imagelist_delete(ret_iml) ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <span class="keywordflow">if</span>(NULL==(img_tmp = cpl_imagelist_get(flatStack,z))) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image!"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>           cpl_imagelist_delete(ret_iml) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>             <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         psrcdata=cpl_image_get_data_float(img_tmp);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         points[z].x = (double)stats[z]->cleanmean ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         points[z].y = (double)psrcdata[i] ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       <span class="keywordflow">if</span> ( NULL == ( coeffs = sinfo_fit_1d_poly(order, points, sz, NULL) ) )</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not fit spectrum of pixel: %d\n"</span>, i) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           presdata=cpl_image_get_data_float(cpl_imagelist_get(ret_iml,z));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>           presdata[i] = ZERO ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">for</span> ( z = 0 ; z < order+1 ; z++ )</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>           <span class="keywordflow">if</span>(NULL==(img_tmp = cpl_imagelist_get(ret_iml,z))) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image!"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         cpl_imagelist_delete(ret_iml) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>           } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         presdata=cpl_image_get_data_float(img_tmp);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         presdata[i] = coeffs[z] ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>           }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       cpl_free(points) ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       cpl_free(coeffs) ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">for</span> ( z = 0 ; z < sz ; z++ )</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         cpl_free (stats[z]) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_free(stats);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">return</span> ret_iml ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> cpl_image * sinfo_new_search_bad_pixels( cpl_imagelist *  coeffs,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                             <span class="keywordtype">double</span>     threshSigmaFactor,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                             <span class="keywordtype">double</span>     nonlinearThresh,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                             <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                             <span class="keywordtype">float</span>      hiReject )</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>      <span class="keywordtype">int</span> i, z ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     Stats * stats ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     cpl_image * img_res ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     cpl_image* img_src=NULL;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordtype">float</span>* psrcdata=NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordtype">float</span>* presdata=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> ( NULL == coeffs )</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">if</span> ( threshSigmaFactor <= 0. )</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong sigma factor given, 0 or negativ!\n"</span>) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">if</span> ( nonlinearThresh <= 0. )</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong nonlinear threshold value given, "</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                         <span class="stringliteral">"0 or negative!"</span>) ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     sz=cpl_imagelist_get_size(coeffs);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">if</span> ( sz <= 1 )</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given, only one plane!\n"</span>) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="comment">/* Note that we refer to image #1! */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     img_src=cpl_imagelist_get(coeffs,1);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     sx=cpl_image_get_size_x(img_src);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     sy=cpl_image_get_size_y(img_src);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="comment">/* allocate memory for return image */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">if</span> ( NULL == (img_res = cpl_image_new(sx, sy,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!\n"</span>) ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="comment">/* first test the sensitivity deviations of each pixel */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="comment">/* determine the clean mean and clean standard deviation </span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">       in the whole image frame */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     stats = sinfo_new_image_stats_on_rectangle(img_src, </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                                                loReject, </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                                                hiReject, 0, 0, </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                                                sx-1, sy-1) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordflow">if</span> ( NULL == stats )</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not determine image statistics!\n"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         cpl_image_delete(img_res) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     psrcdata=cpl_image_get_data_float(img_src);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     presdata=cpl_image_get_data_float(img_res);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="keywordflow">if</span> ( isnan(psrcdata[i]) )</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>             presdata[i] = 0. ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( stats->cleanmean - psrcdata[i] > </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                   threshSigmaFactor*stats->cleanstdev )</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             presdata[i] = 0. ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>         {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>            presdata[i] = 1. ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     cpl_free(stats) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="comment">/* -----------------------------------------------------</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">     * now test additionally the non-linearity if available. </span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">     * if a strong non-linearity occurs for pixels which are </span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">     * declared "good" so far (normal linear coefficients)</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">     * these pixels will be declared bad.    </span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="keywordflow">if</span> (sz > 1) </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         <span class="keywordflow">for</span> ( z = 2 ; z < sz ; z++ )</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       img_src=cpl_imagelist_get(coeffs,z);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>           sx=cpl_image_get_size_x(img_src);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>           sy=cpl_image_get_size_y(img_src);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>           psrcdata=cpl_image_get_data_float(img_src);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             stats = sinfo_new_image_stats_on_rectangle(img_src, loReject, </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                                                  hiReject, 0, 0, sx-1, sy-1) ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>             <span class="keywordflow">if</span> ( NULL == stats )</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>             {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not determine image statistics!\n"</span>) ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                 cpl_image_delete(img_res) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>             }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>           presdata=cpl_image_get_data_float(img_res);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>             <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>             {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                 <span class="keywordflow">if</span> ( presdata[i] == 1. && </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                      (fabs(psrcdata[i] - stats->cleanmean) > </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                      threshSigmaFactor*stats->cleanstdev ||</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>               fabs(psrcdata[i]) > nonlinearThresh ) ) </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                 {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                     presdata[i] = 0. ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                 }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>             }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>             cpl_free(stats) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="keywordflow">return</span> img_res ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> cpl_image * sinfo_new_search_bad_pixels_via_noise(cpl_imagelist *  darks,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                                     <span class="keywordtype">float</span>      threshSigmaFactor,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                                     <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                                     <span class="keywordtype">float</span>      hiReject )</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     cpl_image * bp_map ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordtype">int</span>        z, n, i ;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordtype">int</span>        lx, ly ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordtype">int</span>        row, col ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <span class="keywordtype">int</span>        low_n, high_n ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="keywordtype">float</span>    * spectrum ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordtype">double</span>     pix_sum ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordtype">double</span>     sqr_sum ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     Stats    * stats ;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     cpl_image* img_src=NULL;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordtype">float</span>* psrcdata=NULL;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordtype">float</span>* pbpdata=NULL;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordtype">int</span> lz=0;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="keywordflow">if</span> ( NULL == darks )</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!\n"</span>) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="keywordflow">if</span> ( threshSigmaFactor <= 0. )</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"factor is smaller or equal zero!\n"</span>) ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     }</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordflow">if</span> ( loReject < 0. || hiReject < 0. || (loReject + hiReject) >= 100.  )</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong reject percentage values!\n"</span>) ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     lz=cpl_imagelist_get_size(darks);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="keywordflow">if</span> ( lz < 1 )</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough dark frames given for good statistics!"</span>) ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     img_src=cpl_imagelist_get(darks,0);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     lx = cpl_image_get_size_x(img_src) ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     ly = cpl_image_get_size_y(img_src) ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     low_n  = (int)(loReject/100. *(<span class="keywordtype">float</span>)lz) ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     high_n = (int)(hiReject/100. *(<span class="keywordtype">float</span>)lz) ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="keywordflow">if</span> (NULL == (bp_map = cpl_image_new (lx, ly,CPL_TYPE_FLOAT) ) )</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate new memory!\n"</span>) ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     }</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     pbpdata=cpl_image_get_data(bp_map);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordflow">if</span> (NULL == (spectrum = (<span class="keywordtype">float</span>*) cpl_calloc(lz, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ) )</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate new memory!\n"</span>) ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     }</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ ) {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>       <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ ) {</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">for</span> ( z = 0 ; z < lz ; z++ ) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       img_src=cpl_imagelist_get(darks,z);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>       psrcdata=cpl_image_get_data(img_src);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       spectrum[z] = psrcdata[col+lx*row] ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     sinfo_pixel_qsort(spectrum, lz) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     n = 0  ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     pix_sum = 0.; </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     sqr_sum = 0.; </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordflow">for</span> ( i = low_n ; i < lz - high_n ; i++ ) {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>       pix_sum += (double)spectrum[i] ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       sqr_sum += ((double)spectrum[i]*(<span class="keywordtype">double</span>)spectrum[i]) ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       n++ ;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         <span class="comment">/* compute the noise in each pixel */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     pix_sum /= (double)n ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     sqr_sum /= (double)n ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>         pbpdata[col+lx*row] = (float)sqrt(sqr_sum - pix_sum*pix_sum) ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     cpl_free(spectrum) ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="keywordflow">if</span> ( NULL == (stats = sinfo_new_image_stats_on_rectangle (bp_map, loReject, </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                        hiReject, 200, 200, 800, 800) ) )</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     {</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get image statistics!\n"</span>) ;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>         cpl_image_delete (bp_map) ;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>  </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="comment">/* now build the bad pixel mask */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ly ; row++ ) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ ) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>          <span class="keywordflow">if</span> (pbpdata[col+lx*row] ></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>              stats->cleanmean+threshSigmaFactor*stats->cleanstdev ||</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>              pbpdata[col+lx*row] < </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>              stats->cleanmean-threshSigmaFactor*stats->cleanstdev) </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>        {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>              pbpdata[col+lx*row] = 0. ;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>        }</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>            {</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>          pbpdata[col+lx*row] = 1. ;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>            }</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>       }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     cpl_free (stats) ;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordflow">return</span> bp_map ;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="keywordtype">int</span> sinfo_new_count_bad_pixels (cpl_image * bad )</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="keywordtype">int</span> i, n ;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordtype">int</span> sx=cpl_image_get_size_x(bad);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     <span class="keywordtype">int</span> sy=cpl_image_get_size_y(bad);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     <span class="keywordtype">float</span>* pbpdata=cpl_image_get_data(bad);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     n = 0 ;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) sx*sy ; i++ )</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     {</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         <span class="keywordflow">if</span> ( pbpdata[i] == 0 || isnan(pbpdata[i]) )</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>             n++ ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">return</span> n ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> cpl_image * sinfo_new_abs_dist_image(cpl_image * im, <span class="keywordtype">float</span> fmedian )</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     cpl_image *   image       ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     pixelvalue * value       ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     pixelvalue   dist      ;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     pixelvalue   median_dist      ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     pixelvalue*   pix_dist=NULL ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="keywordtype">int</span>        * position    ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordtype">int</span>          nposition   ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordtype">int</span>          n, m, i, j ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordtype">double</span>       sum, sum2 ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keywordtype">double</span>       stdev ;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>      {</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input\n"</span>) ;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     image = cpl_image_duplicate ( im ) ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="comment">     * go through all pixels</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     sum = 0. ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     sum2 = 0. ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     m = 0 ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     pdata = cpl_image_get_data(im);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     pix_dist=(pixelvalue*)cpl_calloc(lx*ly,<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="keywordflow">for</span> ( i = 0 ;  i < (int) lx*ly ; i++ )</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>       <span class="comment">/* blank pixels are not replaced */</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>       <span class="keywordflow">if</span> ( isnan(pdata[i]) )</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>       continue ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         position[1] = i + lx     ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>         position[3] = i + 1      ; <span class="comment">/* right       */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         position[5] = i - lx     ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         position[7] = i - 1      ; <span class="comment">/* left        */</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment">         * determine the positions of the image margins, top positions are </span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="comment">         * changed to low positions and vice versa. Right positions are </span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> <span class="comment">         * changed to left positions and vice versa.</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>             position[4] += 2 * lx ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>             position[5] += 2 * lx ;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>             position[6] += 2 * lx ;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>         }</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>             position[0] -= 2 * lx ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             position[1] -= 2 * lx ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>             position[2] -= 2 * lx ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         }</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>             position[0] += 2 ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>             position[6] += 2 ;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>             position[7] += 2 ;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>         }</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>             position[2] -= 2 ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>             position[3] -= 2 ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>             position[4] -= 2 ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         <span class="comment">/* -------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">         * read the pixel values of the neighboring pixels,</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="comment">         * blanks are not considered</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         nposition = 8 ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         n = 0 ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>             <span class="keywordflow">if</span> ( !isnan(pdata[position[j]]) )</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>             {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                 value[n] = pdata[position[j]] ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                 n ++ ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>             }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         nposition = n ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>             pdata[i] = ZERO ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>             cpl_free(value) ;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>             cpl_free(position) ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>             continue ;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         <span class="comment">/* determine the absolute distances */</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         dist = 0. ;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         {</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>             dist += (pdata[i] - value[n])*(pdata[i] - value[n]) ;    </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         dist = sqrt(dist)/(float) nposition ;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>         pix_dist[m] = dist ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         m++ ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         sum += (double)dist ;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>         sum2 += (double)dist * (<span class="keywordtype">double</span>)dist ;</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         cpl_free(value) ;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         cpl_free(position) ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     sum /= (double)m ;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     sum2 /= (double)m ;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     stdev = sqrt(sum2 - sum*sum) ;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     median_dist = sinfo_new_median(pix_dist, m) ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         <span class="comment">/* blank pixels are not replaced */</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         <span class="keywordflow">if</span> ( isnan(pdata[i]) )</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             continue ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         }</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>         position[1] = i + lx     ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         position[3] = i + 1      ; <span class="comment">/* right       */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         position[5] = i - lx     ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>         position[7] = i - 1      ; <span class="comment">/* left        */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="comment">         * determine the positions of the image margins, top positions are </span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="comment">         * changed to low positions and vice versa. Right positions are </span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="comment">         * changed to left positions and vice versa.</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>             position[4] += 2 * lx ;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>             position[5] += 2 * lx ;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>             position[6] += 2 * lx ;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>             position[0] -= 2 * lx ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>             position[1] -= 2 * lx ;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>             position[2] -= 2 * lx ;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>         }</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>         {</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>             position[0] += 2 ;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>             position[6] += 2 ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>             position[7] += 2 ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         }</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>             position[2] -= 2 ;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>             position[3] -= 2 ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             position[4] -= 2 ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         }</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="comment">/* -------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="comment">         * read the pixel values of the neighboring pixels,</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="comment">         * blanks are not considered</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>         nposition = 8 ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>         n = 0 ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         {</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>             <span class="keywordflow">if</span> ( !isnan(pdata[position[j]]) )</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>             {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                 value[n] = pdata[position[j]] ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                 n ++ ;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>             }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         }</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         nposition = n ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         {</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>             pdata[i] = ZERO ;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>             cpl_free(value) ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>             cpl_free(position) ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>             continue ;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         }</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> </div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         <span class="comment">/* determine the absolute distances */</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         dist = 0. ;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         {</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             dist += (pdata[i] - value[n])*(pdata[i] - value[n]) ;    </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         }</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         dist = sqrt(dist)/(float) nposition ;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         <span class="comment">/* -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">         * replace the pixel value by the sinfo_median on conditions:</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> <span class="comment">         * fmedian = 0: always replace with sinfo_median.</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> <span class="comment">         * fmedian < 0: interpret as absolute condition:</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="comment">         *              if |pixel - sinfo_median| > -fmedian</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">         *              replace with sinfo_median.</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">         * fmedian > 0: replace by sinfo_median (fmedian as a factor of</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">         *              the square root of the sinfo_median itself)</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">         *              if |pixel - median| >= fmedian * sqrt ( median )</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">         *              considers a dependence on the pixel value.</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="comment">         *              This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         <span class="keywordflow">if</span> ( fmedian == 0 )</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         {</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>             pdata[i] = dist ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>                   fabs ( median_dist - dist ) >= -fmedian*stdev )</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         {</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>             pdata[i] = dist ;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>         }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>                   fabs ( median_dist - dist ) >= </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>                   fmedian*stdev * sqrt(fabs(dist)) )</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>         {</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             pdata[i] = dist ;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         }</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>         {</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             cpl_free (value) ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>             cpl_free (position) ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>             continue ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         cpl_free (value) ;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>         cpl_free (position) ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     }</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     cpl_free(pix_dist);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">   Function:       sinfo_new_local_median_image()</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="comment">   In      :       im: input image</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="comment">                   fmedian:  a factor to the local standard deviation</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="comment">                   loReject, hiReject: fraction of rejected values to determine</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="comment">                                       a clean standard deviation</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="comment">                   half_box_size: integer half size of the running box to </span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="comment">                              determine the local clean standard deviation</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="comment">   Out     :       resulting image</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> <span class="comment">   Job     :       filter, calculates the local stdev in a moving box</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="comment">                   Then it calculates the difference of the pixel to the median</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> <span class="comment">                   of the nearest neighbors</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="comment">                   by using the 8 closest pixels of every pixel.</span></div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="comment">                   The values in the output image are determined according</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="comment">                   to the values of the input parameter.</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="comment">                   If fmedian = 0: always replace by median</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="comment">                   if fmedian < 0: replace median if |median_dist - dist| ></span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="comment">                                   fmedian * stdev </span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="comment">                   if fmedian > 0: replace by median (fmedian as a factor of</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="comment">                                   the square root of the median itself)</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="comment">                                   if |pixel - median| >= fmedian*sqrt(median)</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="comment">                   This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> <span class="comment">                   This considers a dependence of the differences on the</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="comment">                   pixel values themselves.</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">   Notice       :  it is assumed that most of the 8 nearest neighbor pixels</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="comment">                   are not bad pixels!</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="comment">                   blank pixels are not replaced!</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> cpl_image * sinfo_new_local_median_image( cpl_image * im, </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                              <span class="keywordtype">float</span> fmedian, </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                              <span class="keywordtype">float</span> loReject,</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>                              <span class="keywordtype">float</span> hiReject,</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>                              <span class="keywordtype">int</span> half_box_size )</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> {</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     cpl_image *   image       ;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     pixelvalue * value       ;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     pixelvalue   median      ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     <span class="keywordtype">int</span>        * position    ;</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keywordtype">int</span>          nposition   ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <span class="keywordtype">int</span>          n, i, j ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     <span class="keywordtype">int</span>          llx, lly, urx, ury ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     Stats *      stats ;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     {</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     }</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <span class="keywordflow">if</span> ( half_box_size < 0 )</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"negativ box_size given"</span>) ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     image = cpl_image_duplicate ( im ) ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     podata=cpl_image_get_data(image);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment">     * go through all pixels</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     {</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>         <span class="comment">/* blank pixels are not replaced */</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         <span class="keywordflow">if</span> ( isnan(pidata[i]) )</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>         {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>             continue ;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>         }</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         <span class="comment">/* compute the image statistics in the box area */</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>         llx = i%lx - half_box_size ; </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>         <span class="keywordflow">if</span> ( llx < 0 ) llx = 0 ;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>         lly = i%ly - half_box_size ;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         <span class="keywordflow">if</span> ( lly < 0 ) lly = 0 ;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         urx = i%lx + half_box_size ; </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         <span class="keywordflow">if</span> ( urx >= lx ) urx = lx - 1 ;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>         ury = i%ly + half_box_size ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         <span class="keywordflow">if</span> ( ury >= ly ) ury = ly - 1 ;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="keywordflow">if</span> ( NULL == (stats = sinfo_new_image_stats_on_rectangle (im, loReject,</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>                                hiReject, llx, lly, urx, ury)) ) </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         {</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not determine image statistics "</span>);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"in pixel %d"</span>, i) ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             continue ;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         }</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>         <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>         position[1] = i + lx     ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>         position[3] = i + 1            ; <span class="comment">/* right       */</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>         position[5] = i - lx     ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>         position[7] = i - 1            ; <span class="comment">/* left        */</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         <span class="comment">/*---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> <span class="comment">         * determine the positions of the image margins, top positions are </span></div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> <span class="comment">         * changed to low positions and vice versa. Right positions are </span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> <span class="comment">         * changed to left positions and vice versa.</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span></div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>         {</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>             position[4] += 2 * lx ;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>             position[5] += 2 * lx ;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>             position[6] += 2 * lx ;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         }</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>         {</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>             position[0] -= 2 * lx ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>             position[1] -= 2 * lx ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>             position[2] -= 2 * lx ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>         {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>             position[0] += 2 ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>             position[6] += 2 ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>             position[7] += 2 ;</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>         }</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>         {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>             position[2] -= 2 ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>             position[3] -= 2 ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>             position[4] -= 2 ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         <span class="comment">/* ------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> <span class="comment">         * read the pixel values of the neighboring pixels,</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="comment">         * blanks are not considered</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         nposition = 8 ;</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         n = 0 ;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         {</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>             <span class="keywordflow">if</span> ( !isnan(pidata[position[j]]) )</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>             {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>                 value[n] = pidata[position[j]] ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>                 n ++ ;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>             }</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         }</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         nposition = n ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> </div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span></div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         {</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             cpl_free(value) ;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>             cpl_free(position) ;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>             cpl_free(stats) ;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>             continue ;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         }</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         <span class="comment">/* sort the values and determine the median */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         sinfo_pixel_qsort( value, nposition ) ;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         <span class="keywordflow">if</span> ( nposition % 2 == 1 )</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>         {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>             median = value [ nposition/2 ] ;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>         }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         {</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             median = ( value [nposition/2 - 1] + value [nposition/2] ) / 2. ;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>         }</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         <span class="comment">/* -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> <span class="comment">         * replace the pixel value by the median on conditions:</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> <span class="comment">         * fmedian = 0: always replace with median.</span></div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="comment">         * fmedian > 0: replace by median (fmedian as a factor of</span></div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">         *              the square root of the median itself)</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">         *              if |pixel - median| >= fmedian * sqrt ( median )</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">         *              considers a dependence on the pixel value.</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> <span class="comment">         *              This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>         <span class="keywordflow">if</span> ( fmedian == 0 )</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>             podata[i] = median ;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>         }</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>                   fabs ( median - pidata[i] ) >= -fmedian * stats->cleanstdev)</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         {</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>             podata[i] = median ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>                   fabs ( median - pidata[i] ) >= fmedian * sqrt(fabs(median)) )</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>             podata[i] = median ;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>             cpl_free (value) ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>             cpl_free (position) ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>             cpl_free (stats) ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>             continue ;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>         }</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         cpl_free (value) ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>         cpl_free (position) ;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         cpl_free (stats) ;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     }</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> }</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> <span class="comment">   Function:       sinfo_new_mean_image_in_spec()</span></div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> <span class="comment">   In      :       image, a threshold parameter</span></div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="comment">   Out     :       resulting image</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> <span class="comment">   Job     :       mean filter, calculates the mean for an image</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment">                   by using the 4 closest pixels of every pixel in spectral </span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">                   direction (column).</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment">                   The values in the output image are determined according</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">                   to the values of the input parameter.</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">                   If fmedian = 0: always replace by mean</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="comment">                   if fmedian < 0: replace by mean if |pixel - mean| ></span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> <span class="comment">                                        -fmedian</span></div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">                   if fmedian > 0: replace by mean (fmedian as a factor of</span></div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">                                   the square root of the mean itself)</span></div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">                                   if |pixel - mean| >= fmedian * sqrt ( mean )</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">                   This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">                   This considers a dependence of the differences on the</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">                   pixel values themselves.</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">   Notice       :  it is assumed that most of the 4 nearest neighbor pixels</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="comment">                   are not bad pixels!</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> <span class="comment">                   blank pixels are not replaced!</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> cpl_image * sinfo_new_mean_image_in_spec( cpl_image * im, <span class="keywordtype">float</span> fmedian )</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> {</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     cpl_image *   image       ;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     pixelvalue * value       ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     pixelvalue   mean      ;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordtype">int</span>        * position    ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordtype">int</span>          nposition   ;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     <span class="keywordtype">int</span>          n, i, j ;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     {</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     image = cpl_image_duplicate ( im ) ;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     podata=cpl_image_get_data(image);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="comment">     * go through all pixels</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i++ )</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     {</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>         <span class="comment">/* blank pixels are not replaced */</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>         <span class="keywordflow">if</span> ( isnan(pidata[i]) )</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>             continue ;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>         <span class="comment">/* initialize the buffer variables for the 2 nearest </span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment">           spectral neighbors */</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>         value = (pixelvalue * )cpl_calloc ( 4, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 4, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>         position[0] = i + lx     ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         position[1] = i + 2*lx   ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         position[2] = i - lx     ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         position[3] = i - 2*lx   ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="comment">         * determine the positions of the image margins, top positions are </span></div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="comment">         * changed to low positions and vice versa. Right positions are changed</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="comment">         * to left positions and vice versa.</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span></div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>             position[2] += 2 * lx ;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>             position[3] += 4 * lx ;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         }</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>         {</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>             position[0] -= 2 * lx ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>             position[1] -= 4 * lx ;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         <span class="comment">/* -------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> <span class="comment">         * read the pixel values of the neighboring pixels,</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="comment">         * blanks are not considered</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         nposition = 4 ;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>         n = 0 ;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>         {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             <span class="keywordflow">if</span> ( !isnan(pidata[position[j]]) )</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                 value[n] = pidata[position[j]] ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>                 n ++ ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             }</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>         }</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>         nposition = n ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>         <span class="keywordflow">if</span> ( nposition < 1 )  <span class="comment">/* all neighbors are blank */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>         {</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>             cpl_free(value) ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>             cpl_free(position) ;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>             continue ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>         }</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>         <span class="comment">/* determine the mean */</span></div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>         mean = 0. ;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>         <span class="keywordflow">for</span> ( n = 0 ; n < nposition ; n++ )</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>         {</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>             mean += value[n] ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>         }</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>         mean /= (float) nposition ;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>         <span class="comment">/* -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="comment">         * replace the pixel value by the median on conditions:</span></div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">         * fmedian = 0:","always replace with mean.</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="comment">         * fmedian < 0: interpret as absolute condition:</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">         *              if |pixel - mean| > -fmedian</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">         *              replace with mean.</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>         <span class="keywordflow">if</span> ( fmedian == 0 )</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>         {</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>             podata[i] = mean ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         }</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>                   fabs ( mean - pidata[i] ) >= -fmedian )</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         {</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>             podata[i] = mean ;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>         }</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>                   fabs ( mean - pidata[i] ) >= fmedian * sqrt(fabs(mean)) )</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         {</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>             podata[i] = mean ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         }</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         {</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>             cpl_free (value) ;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>             cpl_free (position) ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>             continue ;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>         }</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>         cpl_free (value) ;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>         cpl_free (position) ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>     }</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin_8h_source.html b/html/sinfo__detlin_8h_source.html
index b7caddd..e35ed54 100644
--- a/html/sinfo__detlin_8h_source.html
+++ b/html/sinfo__detlin_8h_source.html
@@ -2,132 +2,163 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_DETLIN_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/*******************************************************************************</span>
-<a name="l00023"></a>00023 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00024"></a>00024 <span class="comment">*</span>
-<a name="l00025"></a>00025 <span class="comment">* "@(#) $Id: sinfo_detlin.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00026"></a>00026 <span class="comment">*</span>
-<a name="l00027"></a>00027 <span class="comment">* who       when      what</span>
-<a name="l00028"></a>00028 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">* amodigli  04/01/06  created</span>
-<a name="l00030"></a>00030 <span class="comment">*/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/************************************************************************</span>
-<a name="l00033"></a>00033 <span class="comment"> * sinfo_detlin.h</span>
-<a name="l00034"></a>00034 <span class="comment"> * detector linearity routines</span>
-<a name="l00035"></a>00035 <span class="comment"> * to search for static bad pixels</span>
-<a name="l00036"></a>00036 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment"> */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment"> * header files</span>
-<a name="l00041"></a>00041 <span class="comment"> */</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 cpl_imagelist * 
-<a name="l00067"></a>00067 sinfo_new_fit_intensity_course(cpl_imagelist * flatStack,
-<a name="l00068"></a>00068                               <span class="keywordtype">int</span>       order,
-<a name="l00069"></a>00069                               <span class="keywordtype">float</span>     loReject,
-<a name="l00070"></a>00070                               <span class="keywordtype">float</span>     hiReject ) ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00093"></a>00093 cpl_image * 
-<a name="l00094"></a>00094 sinfo_new_search_bad_pixels(cpl_imagelist *  coeffs,
-<a name="l00095"></a>00095                             <span class="keywordtype">double</span>     threshSigmaFactor,
-<a name="l00096"></a>00096                             <span class="keywordtype">double</span>     nonlinearThresh,
-<a name="l00097"></a>00097                             <span class="keywordtype">float</span>      loReject,
-<a name="l00098"></a>00098                             <span class="keywordtype">float</span>      hiReject ) ;
-<a name="l00099"></a>00099 
-<a name="l00117"></a>00117 cpl_image * 
-<a name="l00118"></a>00118 sinfo_new_search_bad_pixels_via_noise( cpl_imagelist *  darks,
-<a name="l00119"></a>00119                                     <span class="keywordtype">float</span>      threshSigmaFactor,
-<a name="l00120"></a>00120                                     <span class="keywordtype">float</span>      loReject,
-<a name="l00121"></a>00121                                     <span class="keywordtype">float</span>      hiReject ) ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="comment">/*</span>
-<a name="l00125"></a>00125 <span class="comment">   @name   sinfo_new_count_bad_pixels()</span>
-<a name="l00126"></a>00126 <span class="comment">   @memo     this routine counts the number of bad pixels</span>
-<a name="l00127"></a>00127 <span class="comment">   @param  bad bad pixel mask</span>
-<a name="l00128"></a>00128 <span class="comment">   @return      number of bad pixels.</span>
-<a name="l00129"></a>00129 <span class="comment">*/</span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="keywordtype">int</span> 
-<a name="l00132"></a>00132 sinfo_new_count_bad_pixels ( cpl_image * bad ) ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="comment">/*</span>
-<a name="l00136"></a>00136 <span class="comment">   @name   sinfo_new_abs_dist_image()</span>
-<a name="l00137"></a>00137 <span class="comment">   @param  image, a threshold parameter</span>
-<a name="l00138"></a>00138 <span class="comment">   @result resulting image</span>
-<a name="l00139"></a>00139 <span class="comment">   @doc    filter, calculates the absolute distances of the nearest neighbors </span>
-<a name="l00140"></a>00140 <span class="comment">           for an image by using the 8 closest pixels of every pixel.</span>
-<a name="l00141"></a>00141 <span class="comment">           The values in the output image are determined according</span>
-<a name="l00142"></a>00142 <span class="comment">           to the values of the input parameter.</span>
-<a name="l00143"></a>00143 <span class="comment">           If fmedian = 0: always replace by abs. distances</span>
-<a name="l00144"></a>00144 <span class="comment">           if fmedian < 0: replace by abs. distances if |median_dist - dist| ></span>
-<a name="l00145"></a>00145 <span class="comment">                                        -fmedian</span>
-<a name="l00146"></a>00146 <span class="comment">           if fmedian > 0: replace by abs. distances (fmedian as a factor of</span>
-<a name="l00147"></a>00147 <span class="comment">                           the square root of the distance itself)</span>
-<a name="l00148"></a>00148 <span class="comment">           if |median_dist - dist| >= fmedian * sqrt ( dist )</span>
-<a name="l00149"></a>00149 <span class="comment">           This can be used to consider photon noise.</span>
-<a name="l00150"></a>00150 <span class="comment">           This considers a dependence of the differences on the</span>
-<a name="l00151"></a>00151 <span class="comment">           pixel values themselves.</span>
-<a name="l00152"></a>00152 <span class="comment">   @note   it is assumed that most of the 8 nearest neighbor pixels</span>
-<a name="l00153"></a>00153 <span class="comment">           are not bad pixels! blank pixels are not replaced!</span>
-<a name="l00154"></a>00154 <span class="comment">*/</span>
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 cpl_image * 
-<a name="l00158"></a>00158 sinfo_new_abs_dist_image(cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00183"></a>00183 cpl_image * 
-<a name="l00184"></a>00184 sinfo_new_mean_image_in_spec(cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;
-<a name="l00185"></a>00185 
-<a name="l00208"></a>00208 cpl_image * 
-<a name="l00209"></a>00209 sinfo_new_local_median_image(cpl_image * im,
-<a name="l00210"></a>00210                              <span class="keywordtype">float</span> fmedian,
-<a name="l00211"></a>00211                              <span class="keywordtype">float</span> loReject,
-<a name="l00212"></a>00212                              <span class="keywordtype">float</span> hiReject,
-<a name="l00213"></a>00213                              <span class="keywordtype">int</span> half_box_size ) ;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_DETLIN_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* "@(#) $Id: sinfo_detlin.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">* amodigli  04/01/06  created</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * sinfo_detlin.h</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * detector linearity routines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * to search for static bad pixels</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> cpl_imagelist * </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_fit_intensity_course(cpl_imagelist * flatStack,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="keywordtype">int</span>       order,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="keywordtype">float</span>     loReject,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="keywordtype">float</span>     hiReject ) ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> cpl_image * </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> sinfo_new_search_bad_pixels(cpl_imagelist *  coeffs,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                             <span class="keywordtype">double</span>     threshSigmaFactor,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                             <span class="keywordtype">double</span>     nonlinearThresh,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                             <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                             <span class="keywordtype">float</span>      hiReject ) ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> cpl_image * </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> sinfo_new_search_bad_pixels_via_noise( cpl_imagelist *  darks,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                     <span class="keywordtype">float</span>      threshSigmaFactor,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                     <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                     <span class="keywordtype">float</span>      hiReject ) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">   @name   sinfo_new_count_bad_pixels()</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">   @memo     this routine counts the number of bad pixels</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">   @param  bad bad pixel mask</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">   @return      number of bad pixels.</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> sinfo_new_count_bad_pixels ( cpl_image * bad ) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">   @name   sinfo_new_abs_dist_image()</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">   @param  image, a threshold parameter</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">   @result resulting image</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">   @doc    filter, calculates the absolute distances of the nearest neighbors </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">           for an image by using the 8 closest pixels of every pixel.</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">           The values in the output image are determined according</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">           to the values of the input parameter.</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">           If fmedian = 0: always replace by abs. distances</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">           if fmedian < 0: replace by abs. distances if |median_dist - dist| ></span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">                                        -fmedian</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">           if fmedian > 0: replace by abs. distances (fmedian as a factor of</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">                           the square root of the distance itself)</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">           if |median_dist - dist| >= fmedian * sqrt ( dist )</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">           This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">           This considers a dependence of the differences on the</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">           pixel values themselves.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">   @note   it is assumed that most of the 8 nearest neighbor pixels</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">           are not bad pixels! blank pixels are not replaced!</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> cpl_image * </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> sinfo_new_abs_dist_image(cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> cpl_image * </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> sinfo_new_mean_image_in_spec(cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> cpl_image * </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> sinfo_new_local_median_image(cpl_image * im,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                              <span class="keywordtype">float</span> fmedian,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                              <span class="keywordtype">float</span> loReject,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                              <span class="keywordtype">float</span> hiReject,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                              <span class="keywordtype">int</span> half_box_size ) ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin__cfg_8c_source.html b/html/sinfo__detlin__cfg_8c_source.html
index 979b676..4a40f21 100644
--- a/html/sinfo__detlin__cfg_8c_source.html
+++ b/html/sinfo__detlin__cfg_8c_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_detlin_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Autor    :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    April 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    handles the data structure detlin_config</span>
-<a name="l00025"></a>00025 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span>
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                              Function codes</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 detlin_config * 
-<a name="l00049"></a>00049 sinfo_detlin_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00050"></a>00050 {
-<a name="l00051"></a>00051     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(detlin_config));
-<a name="l00052"></a>00052 }
-<a name="l00053"></a>00053 
-<a name="l00060"></a>00060 <span class="keywordtype">void</span> sinfo_detlin_cfg_destroy(detlin_config * sc)
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00064"></a>00064     <span class="comment">/* cpl_free(sc->framelist) ; */</span>
-<a name="l00065"></a>00065     <span class="comment">/* Free main struct */</span>
-<a name="l00066"></a>00066     cpl_free(sc);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     return ;
-<a name="l00069"></a>00069 }
-<a name="l00070"></a>00070 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_detlin_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Autor    :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    April 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    handles the data structure detlin_config</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> detlin_config * </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> sinfo_detlin_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(detlin_config));</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">void</span> sinfo_detlin_cfg_destroy(detlin_config * sc)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="comment">/* cpl_free(sc->framelist) ; */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     return ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin__cfg_8h_source.html b/html/sinfo__detlin__cfg_8h_source.html
index 5f4ee84..472385f 100644
--- a/html/sinfo__detlin__cfg_8h_source.html
+++ b/html/sinfo__detlin__cfg_8h_source.html
@@ -2,102 +2,133 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_detlin_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    April 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    sinfo_detlin_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_DETLIN_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  bad pixels search blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the bad pixels search</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>detlin_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span>
-<a name="l00052"></a>00052 <span class="comment">                                       the list of all input frames */</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad pixel </span>
-<a name="l00054"></a>00054 <span class="comment">                                        mask (fits file)*/</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*------ Response------*/</span>
-<a name="l00059"></a>00059         <span class="comment">/* order of the fit polynomial */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">int</span> order ;      
-<a name="l00061"></a>00061         <span class="comment">/* factor to the standard deviation of the zero and slope polynomial </span>
-<a name="l00062"></a>00062 <span class="comment">           coefficient. if the deviation exceeds the resulting value the </span>
-<a name="l00063"></a>00063 <span class="comment">           corresponding pixel is declared as bad */</span> 
-<a name="l00064"></a>00064         <span class="keywordtype">double</span> threshSigmaFactor ;      
-<a name="l00065"></a>00065         <span class="comment">/*if a non-linear coefficient exceeds this value the corresponding </span>
-<a name="l00066"></a>00066 <span class="comment">          pixel is declared as bad*/</span>
-<a name="l00067"></a>00067         <span class="keywordtype">double</span> nonlinearThresh ;      
-<a name="l00068"></a>00068         <span class="comment">/* percentage of rejected low intensity pixels before determining</span>
-<a name="l00069"></a>00069 <span class="comment">           image statistics (mean and standard deviation)*/</span>
-<a name="l00070"></a>00070         <span class="keywordtype">float</span> loReject ;
-<a name="l00071"></a>00071         <span class="comment">/* percentage of rejected high intensity pixels before determining</span>
-<a name="l00072"></a>00072 <span class="comment">           image statistics (mean and standard deviation) */</span>
-<a name="l00073"></a>00073         <span class="keywordtype">float</span> hiReject ;
-<a name="l00074"></a>00074         <span class="comment">/*name of the data cube storing the found polynomial coefficients*/</span>
-<a name="l00075"></a>00075         <span class="keywordtype">char</span> coeffsCubeName[FILE_NAME_SZ] ;
-<a name="l00076"></a>00076 } detlin_config ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                               Function prototypes</span>
-<a name="l00080"></a>00080 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 detlin_config * 
-<a name="l00089"></a>00089 sinfo_detlin_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00090"></a>00090 
-<a name="l00097"></a>00097 <span class="keywordtype">void</span> 
-<a name="l00098"></a>00098 sinfo_detlin_cfg_destroy(detlin_config * sc);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_detlin_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    April 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    sinfo_detlin_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_DETLIN_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  bad pixels search blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the bad pixels search</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>detlin_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                       the list of all input frames */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad pixel </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                        mask (fits file)*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*------ Response------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="comment">/* order of the fit polynomial */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">int</span> order ;      </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* factor to the standard deviation of the zero and slope polynomial </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">           coefficient. if the deviation exceeds the resulting value the </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">           corresponding pixel is declared as bad */</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">double</span> threshSigmaFactor ;      </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/*if a non-linear coefficient exceeds this value the corresponding </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">          pixel is declared as bad*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">double</span> nonlinearThresh ;      </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="comment">/* percentage of rejected low intensity pixels before determining</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">           image statistics (mean and standard deviation)*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="comment">/* percentage of rejected high intensity pixels before determining</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">           image statistics (mean and standard deviation) */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="comment">/*name of the data cube storing the found polynomial coefficients*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">char</span> coeffsCubeName[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> } detlin_config ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> detlin_config * </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_detlin_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> sinfo_detlin_cfg_destroy(detlin_config * sc);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin__ini_8h_source.html b/html/sinfo__detlin__ini_8h_source.html
index d2c9c6a..3b6e28e 100644
--- a/html/sinfo__detlin__ini_8h_source.html
+++ b/html/sinfo__detlin__ini_8h_source.html
@@ -2,63 +2,94 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detlin_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    April 19, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    prepare handling of .ini file for the search for static </span>
-<a name="l00025"></a>00025 <span class="comment">                        bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_DETLIN_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Defines</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                             Function prototypes </span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> 
-<a name="l00052"></a>00052 generateDetlin_ini_file(
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * ini_name,
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * name_i,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_o
-<a name="l00056"></a>00056 );
-<a name="l00065"></a>00065 detlin_config * 
-<a name="l00066"></a>00066 parse_detlin_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detlin_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    April 19, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    prepare handling of .ini file for the search for static </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_DETLIN_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> generateDetlin_ini_file(</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> );</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> detlin_config * </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> parse_detlin_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin__ini__by__cpl_8c_source.html b/html/sinfo__detlin__ini__by__cpl_8c_source.html
index 3f73f9b..1dc6957 100644
--- a/html/sinfo__detlin__ini__by__cpl_8c_source.html
+++ b/html/sinfo__detlin__ini__by__cpl_8c_source.html
@@ -2,233 +2,264 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detlin_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    May 17, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    produce and read an .ini file for the search of static</span>
-<a name="l00025"></a>00025 <span class="comment">                        bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <string.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_detlin_ini_by_cpl.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00040"></a>00040 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                    Functions private to this module</span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00044"></a>00044 parse_section_frames(detlin_config *, 
-<a name="l00045"></a>00045                 cpl_frameset* sof, cpl_frameset** raw,<span class="keywordtype">int</span>* status);
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00047"></a>00047 parse_section_response(detlin_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00048"></a>00048 
-<a name="l00068"></a>00068 detlin_config * 
-<a name="l00069"></a>00069 sinfo_parse_cpl_input_detlin(cpl_parameterlist * cpl_cfg, cpl_frameset* sof, 
-<a name="l00070"></a>00070  cpl_frameset** raw)
-<a name="l00071"></a>00071 {
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073         detlin_config    *    cfg ;
-<a name="l00074"></a>00074         <span class="keywordtype">int</span>                   status ;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076         <span class="comment">/* check on input ini file removed */</span>
-<a name="l00077"></a>00077         <span class="comment">/* loading input ini file removed */</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080         cfg = sinfo_detlin_cfg_create();
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082         <span class="comment">/*</span>
-<a name="l00083"></a>00083 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00084"></a>00084 <span class="comment">         * found in the ini file</span>
-<a name="l00085"></a>00085 <span class="comment">         */</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087         status = 0 ;
-<a name="l00088"></a>00088         parse_section_response(cfg, cpl_cfg);
-<a name="l00089"></a>00089         parse_section_frames(cfg, sof, raw,  &status);
-<a name="l00090"></a>00090         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00091"></a>00091                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00092"></a>00092                 sinfo_detlin_free(&cfg);
-<a name="l00093"></a>00093                 cfg = NULL ;
-<a name="l00094"></a>00094                 <span class="keywordflow">return</span> NULL ;
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096         <span class="keywordflow">return</span> cfg ;
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>   
-<a name="l00111"></a>00111 parse_section_frames(detlin_config * cfg,
-<a name="l00112"></a>00112              cpl_frameset * sof,
-<a name="l00113"></a>00113                      cpl_frameset** raw,
-<a name="l00114"></a>00114                      <span class="keywordtype">int</span>* status)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117    <span class="keywordtype">int</span>                     i=0;
-<a name="l00118"></a>00118    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l00119"></a>00119    <span class="keywordtype">int</span>  nraw = 0;
-<a name="l00120"></a>00120    <span class="keywordtype">int</span>  nraw_good = 0;
-<a name="l00121"></a>00121    cpl_frame* frame=NULL;
-<a name="l00122"></a>00122    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00123"></a>00123    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00124"></a>00124    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00125"></a>00125    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00126"></a>00126   
-<a name="l00127"></a>00127    sinfo_extract_raw_frames_type(sof,raw,RAW_LINEARITY_LAMP);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129    nraw=cpl_frameset_get_size(*raw);
-<a name="l00130"></a>00130  
-<a name="l00131"></a>00131    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00132"></a>00132       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Too few (%d) raw frames (%s)  present in"</span>
-<a name="l00133"></a>00133              <span class="stringliteral">"frameset!Aborting..."</span>,nraw, RAW_LINEARITY_LAMP);
-<a name="l00134"></a>00134       (*status)++;
-<a name="l00135"></a>00135       <span class="keywordflow">return</span>;
-<a name="l00136"></a>00136    }
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140    <span class="comment">/* get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00141"></a>00141    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00142"></a>00142    cfg->framelist = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)); 
-<a name="l00143"></a>00143    
-<a name="l00144"></a>00144   <span class="comment">/* read input frames */</span>
-<a name="l00145"></a>00145    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00146"></a>00146      <span class="comment">/* cfg->framelist[i] = cpl_malloc(FILE_NAME_SZ * sizeof(char));  */</span>
-<a name="l00147"></a>00147       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00148"></a>00148      <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame))==1) 
-<a name="l00149"></a>00149     {
-<a name="l00150"></a>00150           tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;
-<a name="l00151"></a>00151       <span class="keywordflow">if</span>(sinfo_is_flat_lindet(tag) || sinfo_is_dark(tag)) {
-<a name="l00152"></a>00152           <span class="comment">/* Store file name into framelist */</span>
-<a name="l00153"></a>00153              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00154"></a>00154              nraw_good++;
-<a name="l00155"></a>00155       }
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157    }
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00160"></a>00160    cfg->nframes         = nraw_good ;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163    <span class="keywordflow">if</span> (nraw_good < (cfg->order+1)) {
-<a name="l00164"></a>00164       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Too few (%d) raw frames (%s)  present in"</span>
-<a name="l00165"></a>00165              <span class="stringliteral">"frameset as we do a %d order polymnomial fit"</span> 
-<a name="l00166"></a>00166                          <span class="stringliteral">"!Aborting..."</span>,nraw_good, 
-<a name="l00167"></a>00167                          RAW_LINEARITY_LAMP,cfg->order);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169       (*status)++;
-<a name="l00170"></a>00170       <span class="keywordflow">return</span>;
-<a name="l00171"></a>00171    }
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174    strcpy(cfg -> outName, BP_LIN_OUT_FILENAME);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176    check_nomsg(frame = cpl_frameset_get_frame(*raw,0));
-<a name="l00177"></a>00177    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00178"></a>00178  
-<a name="l00179"></a>00179    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00180"></a>00180      {
-<a name="l00181"></a>00181    <span class="keywordflow">case</span> 0: 
-<a name="l00182"></a>00182       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00183"></a>00183       <span class="keywordflow">break</span>;
-<a name="l00184"></a>00184     <span class="keywordflow">case</span> 1: 
-<a name="l00185"></a>00185       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00186"></a>00186       <span class="keywordflow">break</span>;
-<a name="l00187"></a>00187     <span class="keywordflow">case</span> -1:
-<a name="l00188"></a>00188       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00189"></a>00189       <span class="keywordflow">break</span>;
-<a name="l00190"></a>00190     <span class="keywordflow">default</span>: 
-<a name="l00191"></a>00191       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00192"></a>00192       <span class="keywordflow">break</span>;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195      }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197    sinfo_get_band(frame,band);
-<a name="l00198"></a>00198    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00199"></a>00199                      spat_res,              lamp_status,    band);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202    sinfo_get_ins_set(band,&ins_set);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204   
-<a name="l00205"></a>00205   cleanup:
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207    <span class="keywordflow">return</span>;
-<a name="l00208"></a>00208 }
-<a name="l00217"></a>00217 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00218"></a>00218 parse_section_response(detlin_config * cfg,cpl_parameterlist *   cpl_cfg)
-<a name="l00219"></a>00219 {
-<a name="l00220"></a>00220    cpl_parameter *p;     
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.order"</span>);
-<a name="l00223"></a>00223    cfg -> order = cpl_parameter_get_int(p);
-<a name="l00224"></a>00224  
-<a name="l00225"></a>00225    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_lin.thresh_sigma_factor"</span>);
-<a name="l00226"></a>00226    cfg->threshSigmaFactor = (float) cpl_parameter_get_double(p);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.low_rejection"</span>);
-<a name="l00229"></a>00229    cfg -> loReject = (float) cpl_parameter_get_double(p);
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.high_rejection"</span>);
-<a name="l00232"></a>00232    cfg -> hiReject = (float) cpl_parameter_get_double(p);
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_lin.nlin_threshold"</span>);
-<a name="l00235"></a>00235    cfg->nonlinearThresh = (float) cpl_parameter_get_double(p);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237    <span class="comment">/* name of the data cube storing the found polynomial coefficients */</span>
-<a name="l00238"></a>00238    strcpy(cfg->coeffsCubeName, BP_LIN_COEFFS_CUBE_OUT_FILENAME);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240    return ;
-<a name="l00241"></a>00241 }
-<a name="l00248"></a>00248 <span class="keywordtype">void</span>
-<a name="l00249"></a>00249 sinfo_detlin_free(detlin_config ** cfg)
-<a name="l00250"></a>00250 {  
-<a name="l00251"></a>00251   <span class="keywordtype">int</span> i=0;
-<a name="l00252"></a>00252   <span class="keywordflow">if</span>(*cfg!=NULL) {
-<a name="l00253"></a>00253     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes; i++) {
-<a name="l00254"></a>00254       <span class="keywordflow">if</span>((*cfg)->framelist[i] != NULL) cpl_free((*cfg)->framelist[i]);
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256     cpl_free((*cfg)->framelist);
-<a name="l00257"></a>00257     sinfo_detlin_cfg_destroy((*cfg));
-<a name="l00258"></a>00258     *cfg = NULL;
-<a name="l00259"></a>00259   }
-<a name="l00260"></a>00260   <span class="keywordflow">return</span>;
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detlin_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    May 17, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    produce and read an .ini file for the search of static</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_detlin_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> parse_section_frames(detlin_config *, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                 cpl_frameset* sof, cpl_frameset** raw,<span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> parse_section_response(detlin_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> detlin_config * </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> sinfo_parse_cpl_input_detlin(cpl_parameterlist * cpl_cfg, cpl_frameset* sof, </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>  cpl_frameset** raw)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         detlin_config    *    cfg ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="keywordtype">int</span>                   status ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="comment">/* check on input ini file removed */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/* loading input ini file removed */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         cfg = sinfo_detlin_cfg_create();</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         status = 0 ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         parse_section_response(cfg, cpl_cfg);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         parse_section_frames(cfg, sof, raw,  &status);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                 sinfo_detlin_free(&cfg);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">void</span>   </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> parse_section_frames(detlin_config * cfg,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                      cpl_frameset** raw,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>    <span class="keywordtype">int</span>                     i=0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="keywordtype">int</span>  nraw = 0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">int</span>  nraw_good = 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    sinfo_extract_raw_frames_type(sof,raw,RAW_LINEARITY_LAMP);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>  </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Too few (%d) raw frames (%s)  present in"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>              <span class="stringliteral">"frameset!Aborting..."</span>,nraw, RAW_LINEARITY_LAMP);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       (*status)++;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="comment">/* get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    cfg->framelist = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)); </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>      <span class="comment">/* cfg->framelist[i] = cpl_malloc(FILE_NAME_SZ * sizeof(char));  */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>      <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>           tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       <span class="keywordflow">if</span>(sinfo_is_flat_lindet(tag) || sinfo_is_dark(tag)) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>           <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>              nraw_good++;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>    }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    cfg->nframes         = nraw_good ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    <span class="keywordflow">if</span> (nraw_good < (cfg->order+1)) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Too few (%d) raw frames (%s)  present in"</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>              <span class="stringliteral">"frameset as we do a %d order polymnomial fit"</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                          <span class="stringliteral">"!Aborting..."</span>,nraw_good, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                          RAW_LINEARITY_LAMP,cfg->order);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       (*status)++;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>    }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>    strcpy(cfg -> outName, BP_LIN_OUT_FILENAME);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    check_nomsg(frame = cpl_frameset_get_frame(*raw,0));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>  </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>      {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>      }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                      spat_res,              lamp_status,    band);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   cleanup:</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> parse_section_response(detlin_config * cfg,cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.order"</span>);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>    cfg -> order = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>  </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_lin.thresh_sigma_factor"</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>    cfg->threshSigmaFactor = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.low_rejection"</span>);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>    cfg -> loReject = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_lin.high_rejection"</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>    cfg -> hiReject = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_lin.nlin_threshold"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    cfg->nonlinearThresh = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    <span class="comment">/* name of the data cube storing the found polynomial coefficients */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    strcpy(cfg->coeffsCubeName, BP_LIN_COEFFS_CUBE_OUT_FILENAME);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    return ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> sinfo_detlin_free(detlin_config ** cfg)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> {  </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">if</span>(*cfg!=NULL) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes; i++) {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">if</span>((*cfg)->framelist[i] != NULL) cpl_free((*cfg)->framelist[i]);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cpl_free((*cfg)->framelist);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     sinfo_detlin_cfg_destroy((*cfg));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     *cfg = NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detlin__ini__by__cpl_8h_source.html b/html/sinfo__detlin__ini__by__cpl_8h_source.html
index b3918e5..dce6447 100644
--- a/html/sinfo__detlin__ini__by__cpl_8h_source.html
+++ b/html/sinfo__detlin__ini__by__cpl_8h_source.html
@@ -2,64 +2,95 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detlin_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detlin_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detlin_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 17, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span>
-<a name="l00025"></a>00025 <span class="comment">                    bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_DETLIN_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Defines</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                             Function prototypes </span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 detlin_config * 
-<a name="l00053"></a>00053 sinfo_parse_cpl_input_detlin(cpl_parameterlist * cpl_cfg, 
-<a name="l00054"></a>00054                              cpl_frameset* sof, 
-<a name="l00055"></a>00055                              cpl_frameset** raw);
-<a name="l00056"></a>00056 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_detlin_free(detlin_config ** cfg);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detlin_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detlin_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 17, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_DETLIN_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETLIN_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_detlin_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> detlin_config * </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> sinfo_parse_cpl_input_detlin(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                              cpl_frameset* sof, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                              cpl_frameset** raw);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_detlin_free(detlin_config ** cfg);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detnoise__cfg_8c_source.html b/html/sinfo__detnoise__cfg_8c_source.html
index bc65887..462dc58 100644
--- a/html/sinfo__detnoise__cfg_8c_source.html
+++ b/html/sinfo__detnoise__cfg_8c_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detnoise_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detnoise_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_detnoise_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Autor    :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    handles the data structure detnoise_config</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                              Function codes</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 detnoise_config * 
-<a name="l00052"></a>00052 sinfo_detnoise_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00053"></a>00053 {
-<a name="l00054"></a>00054     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(detnoise_config));
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_detnoise_cfg_destroy(detnoise_config * sc)
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00067"></a>00067     <span class="comment">/* Free main struct */</span>
-<a name="l00068"></a>00068     cpl_free(sc);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070     return ;
-<a name="l00071"></a>00071 }
-<a name="l00072"></a>00072 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detnoise_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_detnoise_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Autor    :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    handles the data structure detnoise_config</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> detnoise_config * </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_detnoise_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(detnoise_config));</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_detnoise_cfg_destroy(detnoise_config * sc)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     return ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detnoise__cfg_8h_source.html b/html/sinfo__detnoise__cfg_8h_source.html
index 9bd0e40..bf8cbc7 100644
--- a/html/sinfo__detnoise__cfg_8h_source.html
+++ b/html/sinfo__detnoise__cfg_8h_source.html
@@ -2,91 +2,122 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detnoise_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detnoise_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_detnoise_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    sinfo_detnoise_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_DETNOISE_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  bad pixels search blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the bad pixels search</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>detnoise_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span>
-<a name="l00052"></a>00052 <span class="comment">                                       the list of all input frames */</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad </span>
-<a name="l00054"></a>00054 <span class="comment">                                        pixel mask (fits file)*/</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*------searchBad------*/</span>
-<a name="l00059"></a>00059         <span class="comment">/* factor to the standard deviation of the mean standard deviation. */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">double</span> threshSigmaFactor ;      
-<a name="l00061"></a>00061         <span class="comment">/* percentage of rejected low intensity pixels before determining</span>
-<a name="l00062"></a>00062 <span class="comment">           image statistics (mean and standard deviation)*/</span>
-<a name="l00063"></a>00063         <span class="keywordtype">float</span> loReject ;
-<a name="l00064"></a>00064         <span class="comment">/* percentage of rejected high intensity pixels before determining</span>
-<a name="l00065"></a>00065 <span class="comment">           image statistics (mean and standard deviation) */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">float</span> hiReject ;
-<a name="l00067"></a>00067 } detnoise_config ;
-<a name="l00068"></a>00068 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00069"></a>00069 <span class="comment">                               Function prototypes</span>
-<a name="l00070"></a>00070 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 detnoise_config * 
-<a name="l00079"></a>00079 sinfo_detnoise_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00086"></a>00086 <span class="keywordtype">void</span> 
-<a name="l00087"></a>00087 sinfo_detnoise_cfg_destroy(detnoise_config * sc);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detnoise_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_detnoise_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    sinfo_detnoise_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_DETNOISE_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  bad pixels search blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the bad pixels search</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>detnoise_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                       the list of all input frames */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting bad </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                        pixel mask (fits file)*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*------searchBad------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="comment">/* factor to the standard deviation of the mean standard deviation. */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">double</span> threshSigmaFactor ;      </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* percentage of rejected low intensity pixels before determining</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">           image statistics (mean and standard deviation)*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="comment">/* percentage of rejected high intensity pixels before determining</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">           image statistics (mean and standard deviation) */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> } detnoise_config ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> detnoise_config * </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_detnoise_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_detnoise_cfg_destroy(detnoise_config * sc);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detnoise__ini_8h_source.html b/html/sinfo__detnoise__ini_8h_source.html
index f204be3..46315a6 100644
--- a/html/sinfo__detnoise__ini_8h_source.html
+++ b/html/sinfo__detnoise__ini_8h_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detnoise_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detnoise_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detnoise_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   September 3, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span>
-<a name="l00025"></a>00025 <span class="comment">                    bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_DETNOISE_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Defines</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                             Function prototypes </span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 <span class="keywordtype">int</span> 
-<a name="l00053"></a>00053 generateDetnoise_ini_file(
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * ini_name,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_i,
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * name_o
-<a name="l00057"></a>00057 );
-<a name="l00066"></a>00066 detnoise_config * 
-<a name="l00067"></a>00067 parse_detnoise_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00068"></a>00068  
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detnoise_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detnoise_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   September 3, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_DETNOISE_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> generateDetnoise_ini_file(</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> );</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> detnoise_config * </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> parse_detnoise_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>  </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detnoise__ini__by__cpl_8c_source.html b/html/sinfo__detnoise__ini__by__cpl_8c_source.html
index 084fc7d..85b7651 100644
--- a/html/sinfo__detnoise__ini__by__cpl_8c_source.html
+++ b/html/sinfo__detnoise__ini__by__cpl_8c_source.html
@@ -2,198 +2,229 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detnoise_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detnoise_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detnoise_ini.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modiglini</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 17, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   produce and read an .ini file for the search of static</span>
-<a name="l00025"></a>00025 <span class="comment">                    bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <string.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_detnoise_ini_by_cpl.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                    Functions private to this module</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keyword">static</span> <span class="keywordtype">void</span>  
-<a name="l00044"></a>00044 parse_section_frames(detnoise_config * cfg, 
-<a name="l00045"></a>00045                      cpl_frameset* sof, 
-<a name="l00046"></a>00046                      cpl_frameset** raw, 
-<a name="l00047"></a>00047                      <span class="keywordtype">int</span>* status);
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span>  
-<a name="l00049"></a>00049 parse_section_badsearch(detnoise_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00050"></a>00050 
-<a name="l00058"></a>00058 <span class="comment">/****************************************************************************/</span>
-<a name="l00070"></a>00070 detnoise_config * 
-<a name="l00071"></a>00071 sinfo_parse_cpl_input_detnoise(cpl_parameterlist * cpl_cfg, 
-<a name="l00072"></a>00072                                cpl_frameset* sof, 
-<a name="l00073"></a>00073                                cpl_frameset** raw)
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076   detnoise_config    *    cfg ;
-<a name="l00077"></a>00077   <span class="keywordtype">int</span> status=0;
-<a name="l00078"></a>00078   <span class="comment">/* Removed check on ini_file */</span>
-<a name="l00079"></a>00079   <span class="comment">/* Removed load of ini file */</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081   cfg = sinfo_detnoise_cfg_create();
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083    <span class="comment">/*</span>
-<a name="l00084"></a>00084 <span class="comment">   * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00085"></a>00085 <span class="comment">   * found in the ini file</span>
-<a name="l00086"></a>00086 <span class="comment">   */</span>
-<a name="l00087"></a>00087   parse_section_badsearch(cfg, cpl_cfg);
-<a name="l00088"></a>00088   parse_section_frames(cfg, sof, raw, &status);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090          <span class="keywordflow">if</span> (status > 0) {
-<a name="l00091"></a>00091                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00092"></a>00092                 sinfo_detnoise_free(cfg);
-<a name="l00093"></a>00093                 cfg = NULL ;
-<a name="l00094"></a>00094                 <span class="keywordflow">return</span> NULL ;
-<a name="l00095"></a>00095         }
-<a name="l00096"></a>00096   <span class="keywordflow">return</span> cfg ;
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00111"></a>00111 parse_section_frames(detnoise_config * cfg,
-<a name="l00112"></a>00112              cpl_frameset * sof,
-<a name="l00113"></a>00113                      cpl_frameset** raw,
-<a name="l00114"></a>00114                      <span class="keywordtype">int</span>* status)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116    <span class="keywordtype">int</span>                     i;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118    <span class="keywordtype">int</span>  nraw = 0;
-<a name="l00119"></a>00119    cpl_frame* frame=NULL;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00122"></a>00122    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00123"></a>00123    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00124"></a>00124    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128    sinfo_extract_raw_frames_type2(sof,raw,RAW_DARK);
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130    nraw = cpl_frameset_get_size(*raw);
-<a name="l00131"></a>00131    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00132"></a>00132       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span>
-<a name="l00133"></a>00133             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_DARK);
-<a name="l00134"></a>00134       (*status)++;
-<a name="l00135"></a>00135           <span class="keywordflow">return</span>;
-<a name="l00136"></a>00136    }
-<a name="l00137"></a>00137  
-<a name="l00138"></a>00138    <span class="comment">/* get "general:infile" read it, check input sinfo_matrix */</span>
-<a name="l00139"></a>00139    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00140"></a>00140    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00141"></a>00141    cfg->nframes       = nraw ;
-<a name="l00142"></a>00142    cfg->framelist  =  cpl_malloc(nraw*<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)); 
-<a name="l00143"></a>00143   <span class="comment">/* read input frames */</span>
-<a name="l00144"></a>00144    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00145"></a>00145       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00146"></a>00146       <span class="comment">/* Store file name into framelist */</span>
-<a name="l00147"></a>00147        cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00148"></a>00148    }
-<a name="l00149"></a>00149  
-<a name="l00150"></a>00150    strcpy(cfg -> outName, BP_NOISE_OUT_FILENAME);
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00153"></a>00153    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00154"></a>00154    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00155"></a>00155      {
-<a name="l00156"></a>00156    <span class="keywordflow">case</span> 0: 
-<a name="l00157"></a>00157       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00158"></a>00158       <span class="keywordflow">break</span>;
-<a name="l00159"></a>00159     <span class="keywordflow">case</span> 1: 
-<a name="l00160"></a>00160       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00161"></a>00161       <span class="keywordflow">break</span>;
-<a name="l00162"></a>00162     <span class="keywordflow">case</span> -1:
-<a name="l00163"></a>00163       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00164"></a>00164       <span class="keywordflow">break</span>;
-<a name="l00165"></a>00165     <span class="keywordflow">default</span>: 
-<a name="l00166"></a>00166       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00167"></a>00167       <span class="keywordflow">break</span>;
-<a name="l00168"></a>00168      }
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170    sinfo_get_band(frame,band);
-<a name="l00171"></a>00171    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00172"></a>00172                      spat_res,    lamp_status,    band);
-<a name="l00173"></a>00173    
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175    sinfo_get_ins_set(band,&ins_set);
-<a name="l00176"></a>00176    <span class="keywordflow">return</span>;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 }
-<a name="l00182"></a>00182 
-<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00191"></a>00191 parse_section_badsearch(detnoise_config * cfg,cpl_parameterlist *   cpl_cfg)
-<a name="l00192"></a>00192 {  
-<a name="l00193"></a>00193    cpl_parameter *p;   
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_noise.low_rejection"</span>);
-<a name="l00196"></a>00196    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_noise.high_rejection"</span>);
-<a name="l00199"></a>00199    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_noise.thresh_sigma_factor"</span>);
-<a name="l00202"></a>00202    cfg->threshSigmaFactor = cpl_parameter_get_double(p);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 }
-<a name="l00212"></a>00212 <span class="keywordtype">void</span>
-<a name="l00213"></a>00213 sinfo_detnoise_free(detnoise_config * cfg)
-<a name="l00214"></a>00214 {
-<a name="l00215"></a>00215   <span class="keywordtype">int</span> i=0;
-<a name="l00216"></a>00216   <span class="keywordflow">if</span>(cfg != NULL) {
-<a name="l00217"></a>00217     <span class="keywordflow">for</span>(i=0;i<cfg->nframes;i++){
-<a name="l00218"></a>00218       <span class="keywordflow">if</span>(cfg->framelist[i] != NULL) cpl_free(cfg->framelist[i]);
-<a name="l00219"></a>00219     }
-<a name="l00220"></a>00220     <span class="keywordflow">if</span>(cfg->framelist) {
-<a name="l00221"></a>00221       <span class="keywordflow">if</span>(cfg->framelist != NULL) cpl_free(cfg->framelist);
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223     sinfo_detnoise_cfg_destroy(cfg);
-<a name="l00224"></a>00224   }
-<a name="l00225"></a>00225 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detnoise_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detnoise_ini.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modiglini</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 17, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   produce and read an .ini file for the search of static</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_detnoise_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keyword">static</span> <span class="keywordtype">void</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> parse_section_frames(detnoise_config * cfg, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                      cpl_frameset* sof, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                      cpl_frameset** raw, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                      <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> parse_section_badsearch(detnoise_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/****************************************************************************/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> detnoise_config * </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_parse_cpl_input_detnoise(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                cpl_frameset* sof, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                cpl_frameset** raw)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   detnoise_config    *    cfg ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="comment">/* Removed check on ini_file */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">/* Removed load of ini file */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   cfg = sinfo_detnoise_cfg_create();</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">   * found in the ini file</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   parse_section_badsearch(cfg, cpl_cfg);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   parse_section_frames(cfg, sof, raw, &status);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>          <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                 sinfo_detnoise_free(cfg);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> parse_section_frames(detnoise_config * cfg,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                      cpl_frameset** raw,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">int</span>  nraw = 0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    sinfo_extract_raw_frames_type2(sof,raw,RAW_DARK);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    nraw = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,RAW_DARK);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       (*status)++;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>  </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    <span class="comment">/* get "general:infile" read it, check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    cfg->nframes       = nraw ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    cfg->framelist  =  cpl_malloc(nraw*<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)); </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>        cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>    }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>  </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    strcpy(cfg -> outName, BP_NOISE_OUT_FILENAME);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>      {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>      }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> parse_section_badsearch(detnoise_config * cfg,cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {  </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    cpl_parameter *p;   </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_noise.low_rejection"</span>);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.bp_noise.high_rejection"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.bp_noise.thresh_sigma_factor"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    cfg->threshSigmaFactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> sinfo_detnoise_free(detnoise_config * cfg)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">if</span>(cfg != NULL) {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">for</span>(i=0;i<cfg->nframes;i++){</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       <span class="keywordflow">if</span>(cfg->framelist[i] != NULL) cpl_free(cfg->framelist[i]);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">if</span>(cfg->framelist) {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       <span class="keywordflow">if</span>(cfg->framelist != NULL) cpl_free(cfg->framelist);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     sinfo_detnoise_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__detnoise__ini__by__cpl_8h_source.html b/html/sinfo__detnoise__ini__by__cpl_8h_source.html
index 858ede7..3abeb68 100644
--- a/html/sinfo__detnoise__ini__by__cpl_8h_source.html
+++ b/html/sinfo__detnoise__ini__by__cpl_8h_source.html
@@ -2,65 +2,96 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_detnoise_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_detnoise_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_detnoise_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    September 3, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span>
-<a name="l00025"></a>00025 <span class="comment">                        bad pixels</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_DETNOISE_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_msg.h"</span> 
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Defines</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                             Function prototypes </span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 detnoise_config * 
-<a name="l00054"></a>00054 sinfo_parse_cpl_input_detnoise(cpl_parameterlist * cpl_cfg, 
-<a name="l00055"></a>00055                                cpl_frameset* sof, 
-<a name="l00056"></a>00056                                cpl_frameset** raw);
-<a name="l00057"></a>00057 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> 
-<a name="l00065"></a>00065 sinfo_detnoise_free(detnoise_config * cfg);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_detnoise_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_detnoise_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    September 3, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   prepare handling of .ini file for the search for static </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        bad pixels</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_DETNOISE_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DETNOISE_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_detnoise_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_msg.h"</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> detnoise_config * </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_parse_cpl_input_detnoise(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                                cpl_frameset* sof, </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                cpl_frameset** raw);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_detnoise_free(detnoise_config * cfg);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dfs_8c_source.html b/html/sinfo__dfs_8c_source.html
index 9a44729..8ad586d 100644
--- a/html/sinfo__dfs_8c_source.html
+++ b/html/sinfo__dfs_8c_source.html
@@ -2,4219 +2,4250 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dfs.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dfs.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_dfs.c,v 1.43 2013/01/24 15:56:40 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2013/01/24 15:56:40 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.43 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">  Macros</span>
-<a name="l00033"></a>00033 <span class="comment">  ----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">  Private to this module</span>
-<a name="l00038"></a>00038 <span class="comment">  ----------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">  Includes</span>
-<a name="l00043"></a>00043 <span class="comment">  ----------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <math.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_skycor.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <unistd.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00058"></a>00058 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/* defines */</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#define FITS_MAGIC_SZ      6</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_AMOEBA_NMAX 5000</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>
-<a name="l00071"></a>00071 <span class="comment">/* function prototypes */</span>
-<a name="l00072"></a>00072 <span class="comment">/*</span>
-<a name="l00073"></a>00073 <span class="comment">  static int</span>
-<a name="l00074"></a>00074 <span class="comment">  sinfo_stat_rectangle(cpl_image* img,</span>
-<a name="l00075"></a>00075 <span class="comment">  const int kappa,</span>
-<a name="l00076"></a>00076 <span class="comment">  const int nclip,</span>
-<a name="l00077"></a>00077 <span class="comment">  double *mean,</span>
-<a name="l00078"></a>00078 <span class="comment">  double *stdev);</span>
-<a name="l00079"></a>00079 <span class="comment">*/</span>
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00081"></a>00081 sinfo_fit_amoeba_get_psum(<span class="keywordtype">int</span> ndim, <span class="keywordtype">int</span> mpts, <span class="keywordtype">double</span>** p, <span class="keywordtype">double</span>* psum);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="keyword">static</span>  <span class="keywordtype">double</span>
-<a name="l00085"></a>00085 sinfo_fit_amotry(<span class="keywordtype">double</span>** p,
-<a name="l00086"></a>00086                  <span class="keywordtype">double</span> y[],
-<a name="l00087"></a>00087                  <span class="keywordtype">double</span> psum[],
-<a name="l00088"></a>00088                  <span class="keywordtype">int</span> ndim,
-<a name="l00089"></a>00089                  <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),
-<a name="l00090"></a>00090                  <span class="keywordtype">int</span> ihi,
-<a name="l00091"></a>00091                  <span class="keywordtype">double</span> fac);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00095"></a>00095 get_chisq(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,
-<a name="l00096"></a>00096           <span class="keywordtype">int</span> (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),
-<a name="l00097"></a>00097           <span class="keyword">const</span> <span class="keywordtype">double</span> *a,
-<a name="l00098"></a>00098           <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00099"></a>00099           <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00100"></a>00100           <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma);
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">int</span> get_candidate(<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],
-<a name="l00103"></a>00103                          <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,
-<a name="l00104"></a>00104                          <span class="keywordtype">double</span> lambda,
-<a name="l00105"></a>00105                          <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00106"></a>00106                                      <span class="keywordtype">double</span> *result),
-<a name="l00107"></a>00107                          <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00108"></a>00108                                      <span class="keywordtype">double</span> result[]),
-<a name="l00109"></a>00109                          <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00110"></a>00110                          <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00111"></a>00111                          <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma,
-<a name="l00112"></a>00112                          <span class="keywordtype">double</span> *partials,
-<a name="l00113"></a>00113                          cpl_matrix *alpha,
-<a name="l00114"></a>00114                          cpl_matrix *beta,
-<a name="l00115"></a>00115                          <span class="keywordtype">double</span> *a_da);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="keywordtype">int</span>
-<a name="l00120"></a>00120 sinfo_frame_is_raw_dark(<span class="keywordtype">char</span> * tag);
-<a name="l00121"></a>00121 
-<a name="l00127"></a>00127 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 cpl_frameset *
-<a name="l00136"></a>00136 sinfo_frameset_extract(<span class="keyword">const</span> cpl_frameset *frames,
-<a name="l00137"></a>00137                        <span class="keyword">const</span> <span class="keywordtype">char</span> *tag)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139    cpl_frameset *subset = NULL;
-<a name="l00140"></a>00140    <span class="keyword">const</span> cpl_frame *f;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144    assure( frames != NULL, CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Null frameset"</span> );
-<a name="l00145"></a>00145    assure( tag    != NULL, CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Null tag"</span> );
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147    subset = cpl_frameset_new();
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149    <span class="keywordflow">for</span> (f = cpl_frameset_find_const(frames, tag);
-<a name="l00150"></a>00150         f != NULL;
-<a name="l00151"></a>00151         f = cpl_frameset_find_const(frames, NULL)) {
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153       cpl_frameset_insert(subset, cpl_frame_duplicate(f));
-<a name="l00154"></a>00154    }
-<a name="l00155"></a>00155   cleanup:
-<a name="l00156"></a>00156    <span class="keywordflow">return</span> subset;
-<a name="l00157"></a>00157 }
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00166"></a>00166 <span class="keywordtype">int</span> sinfo_print_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val) {
-<a name="l00167"></a>00167    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00168"></a>00168       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Recipe status at %d"</span>,val);
-<a name="l00169"></a>00169       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>,(<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_error_get_message());
-<a name="l00170"></a>00170       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>,(<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_error_get_where());
-<a name="l00171"></a>00171       <span class="keywordflow">return</span> -1;
-<a name="l00172"></a>00172    }
-<a name="l00173"></a>00173    <span class="keywordflow">return</span> 0;
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 
-<a name="l00193"></a>00193 cpl_vector*
-<a name="l00194"></a>00194 sinfo_vector_clip(<span class="keyword">const</span> cpl_vector* vinp,
-<a name="l00195"></a>00195                   <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00196"></a>00196                   <span class="keyword">const</span> <span class="keywordtype">int</span> n,
-<a name="l00197"></a>00197                   <span class="keyword">const</span> <span class="keywordtype">int</span> method)
-<a name="l00198"></a>00198 {
-<a name="l00199"></a>00199    cpl_vector* vout=NULL;
-<a name="l00200"></a>00200    cpl_vector* vtmp=NULL;
-<a name="l00201"></a>00201    <span class="keywordtype">int</span> size=0;
-<a name="l00202"></a>00202    <span class="keywordtype">int</span> j=0;
-<a name="l00203"></a>00203    <span class="keyword">register</span> <span class="keywordtype">int</span> i=0;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205    <span class="keywordtype">double</span> mean=0;
-<a name="l00206"></a>00206    <span class="keywordtype">double</span> median=0;
-<a name="l00207"></a>00207    <span class="keywordtype">double</span> stdev=0;
-<a name="l00208"></a>00208    <span class="keywordtype">double</span>* pt=NULL;
-<a name="l00209"></a>00209    <span class="keywordtype">double</span>* po=NULL;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211    cknull(vinp,<span class="stringliteral">"Null input vector"</span>);
-<a name="l00212"></a>00212    check_nomsg(vout=cpl_vector_duplicate(vinp));
-<a name="l00213"></a>00213    check_nomsg(mean=cpl_vector_get_mean(vout));
-<a name="l00214"></a>00214    check_nomsg(median=cpl_vector_get_median_const(vout));
-<a name="l00215"></a>00215    check_nomsg(stdev=cpl_vector_get_stdev(vout));
-<a name="l00216"></a>00216    check_nomsg(pt=cpl_vector_get_data(vtmp));
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218    <span class="keywordflow">if</span>(method == 0) {
-<a name="l00219"></a>00219       <span class="comment">/*</span>
-<a name="l00220"></a>00220 <span class="comment">         are rejected</span>
-<a name="l00221"></a>00221 <span class="comment">         values ||val-mean|| > kappa*sigma</span>
-<a name="l00222"></a>00222 <span class="comment">      */</span>
-<a name="l00223"></a>00223       <span class="keywordflow">for</span>(j=0;j<n;j++) {
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225          check_nomsg(cpl_vector_sort(vout,1));  <span class="comment">/* sort by increasing data */</span>
-<a name="l00226"></a>00226          check_nomsg(po=cpl_vector_get_data(vout));
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228          <span class="keywordflow">if</span>( (size > 1) && (fabs(po[size-1]-mean) > kappa*stdev)) {
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230             size--;
-<a name="l00231"></a>00231             check_nomsg(vtmp=cpl_vector_new(size));
-<a name="l00232"></a>00232             check_nomsg(pt=cpl_vector_get_data(vtmp));
-<a name="l00233"></a>00233             <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00234"></a>00234                pt[i]=po[i];
-<a name="l00235"></a>00235             }
-<a name="l00236"></a>00236             check_nomsg(cpl_vector_delete(vout));
-<a name="l00237"></a>00237             check_nomsg(vout=cpl_vector_duplicate(vtmp));
-<a name="l00238"></a>00238             check_nomsg(cpl_vector_delete(vtmp));
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240             check_nomsg(mean=cpl_vector_get_mean(vout));
-<a name="l00241"></a>00241             check_nomsg(stdev=cpl_vector_get_stdev(vout));
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243          }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245       }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247    } <span class="keywordflow">else</span> {
-<a name="l00248"></a>00248       <span class="comment">/*</span>
-<a name="l00249"></a>00249 <span class="comment">         are rejected</span>
-<a name="l00250"></a>00250 <span class="comment">         values ||val-median|| > kappa*sigma</span>
-<a name="l00251"></a>00251 <span class="comment">      */</span>
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254       <span class="keywordflow">for</span>(j=0;j<n;j++) {
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256          check_nomsg(cpl_vector_sort(vout,1));  <span class="comment">/* sort by increasing data */</span>
-<a name="l00257"></a>00257          check_nomsg(po=cpl_vector_get_data(vout));
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259          <span class="keywordflow">if</span>( (size > 1) && (fabs(po[size-1]-median) > kappa*stdev)) {
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261             size--;
-<a name="l00262"></a>00262             check_nomsg(vtmp=cpl_vector_new(size));
-<a name="l00263"></a>00263             check_nomsg(pt=cpl_vector_get_data(vtmp));
-<a name="l00264"></a>00264             <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00265"></a>00265                pt[i]=po[i];
-<a name="l00266"></a>00266             }
-<a name="l00267"></a>00267             check_nomsg(cpl_vector_delete(vout));
-<a name="l00268"></a>00268             check_nomsg(vout=cpl_vector_duplicate(vtmp));
-<a name="l00269"></a>00269             check_nomsg(cpl_vector_delete(vtmp));
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271             check_nomsg(median=cpl_vector_get_median_const(vout));
-<a name="l00272"></a>00272             check_nomsg(stdev=cpl_vector_get_stdev(vout));
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274          }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276       }
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281    }
-<a name="l00282"></a>00282    <span class="keywordflow">return</span> vout;
-<a name="l00283"></a>00283   cleanup:
-<a name="l00284"></a>00284    <span class="keywordflow">return</span> NULL;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 }
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00325"></a>00325 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00326"></a>00326 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00327"></a>00327 get_candidate(<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],
-<a name="l00328"></a>00328               <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,
-<a name="l00329"></a>00329               <span class="keywordtype">double</span> lambda,
-<a name="l00330"></a>00330               <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),
-<a name="l00331"></a>00331               <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> result[]),
-<a name="l00332"></a>00332               <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00333"></a>00333               <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00334"></a>00334               <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma,
-<a name="l00335"></a>00335               <span class="keywordtype">double</span> *partials,
-<a name="l00336"></a>00336               cpl_matrix *alpha,
-<a name="l00337"></a>00337               cpl_matrix *beta,
-<a name="l00338"></a>00338               <span class="keywordtype">double</span> *a_da)
-<a name="l00339"></a>00339 {
-<a name="l00340"></a>00340    <span class="keywordtype">int</span> Mfit = 0;         <span class="comment">/* Number of non-constant fit parameters */</span>
-<a name="l00341"></a>00341    cpl_matrix *da;       <span class="comment">/* Solution of   alpha * da = beta */</span>
-<a name="l00342"></a>00342    <span class="keywordtype">double</span> *alpha_data;
-<a name="l00343"></a>00343    <span class="keywordtype">double</span> *beta_data;
-<a name="l00344"></a>00344    <span class="keywordtype">double</span> *da_data;
-<a name="l00345"></a>00345    <span class="keywordtype">int</span> i, imfit = 0;
-<a name="l00346"></a>00346    <span class="keywordtype">int</span> j, jmfit = 0;
-<a name="l00347"></a>00347    <span class="keywordtype">int</span> k = 0;
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349    <span class="comment">/* For efficiency, don't check input in this static function */</span>
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351    Mfit = cpl_matrix_get_nrow(alpha);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353    alpha_data    = cpl_matrix_get_data(alpha);
-<a name="l00354"></a>00354    beta_data     = cpl_matrix_get_data(beta);
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356    <span class="comment">/* Build alpha, beta:</span>
-<a name="l00357"></a>00357 <span class="comment">    *</span>
-<a name="l00358"></a>00358 <span class="comment">    *  alpha[i,j] = sum_{k=1,N} (sigma_k)^-2 * df/da_i * df/da_j  *</span>
-<a name="l00359"></a>00359 <span class="comment">    *                           (1 + delta_ij lambda) ,</span>
-<a name="l00360"></a>00360 <span class="comment">    *</span>
-<a name="l00361"></a>00361 <span class="comment">    *   beta[i]   = sum_{k=1,N} (sigma_k)^-2 * ( y_k - f(x_k) ) * df/da_i</span>
-<a name="l00362"></a>00362 <span class="comment">    *</span>
-<a name="l00363"></a>00363 <span class="comment">    * where (i,j) loop over the non-constant parameters (0 to Mfit-1),</span>
-<a name="l00364"></a>00364 <span class="comment">    * delta is Kronecker's delta, and all df/da are evaluated in x_k</span>
-<a name="l00365"></a>00365 <span class="comment">    */</span>
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367    cpl_matrix_fill(alpha, 0.0);
-<a name="l00368"></a>00368    cpl_matrix_fill(beta , 0.0);
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370    <span class="keywordflow">for</span> (k = 0; k < N; k++)
-<a name="l00371"></a>00371    {
-<a name="l00372"></a>00372       <span class="keywordtype">double</span> sm2 = 0.0;                <span class="comment">/* (sigma_k)^-2 */</span>
-<a name="l00373"></a>00373       <span class="keywordtype">double</span> fx_k = 0.0;               <span class="comment">/* f(x_k)       */</span>
-<a name="l00374"></a>00374       <span class="keyword">const</span> <span class="keywordtype">double</span> *x_k = &(x[0+k*D]); <span class="comment">/* x_k          */</span>
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376       <span class="keywordflow">if</span> (sigma == NULL)
-<a name="l00377"></a>00377       {
-<a name="l00378"></a>00378          sm2 = 1.0;
-<a name="l00379"></a>00379       }
-<a name="l00380"></a>00380       <span class="keywordflow">else</span>
-<a name="l00381"></a>00381       {
-<a name="l00382"></a>00382          sm2 = 1.0 / (sigma[k] * sigma[k]);
-<a name="l00383"></a>00383       }
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385       <span class="comment">/* Evaluate f(x_k) */</span>
-<a name="l00386"></a>00386       cpl_ensure( f(x_k, a, &fx_k) == 0, CPL_ERROR_ILLEGAL_INPUT, -1);
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388       <span class="comment">/* Evaluate (all) df/da (x_k) */</span>
-<a name="l00389"></a>00389       cpl_ensure( dfda(x_k, a, partials) == 0,
-<a name="l00390"></a>00390                   CPL_ERROR_ILLEGAL_INPUT, -1);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392       <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)
-<a name="l00393"></a>00393       {
-<a name="l00394"></a>00394          <span class="keywordflow">if</span> (ia[i] != 0)
-<a name="l00395"></a>00395          {
-<a name="l00396"></a>00396             <span class="comment">/* Beta */</span>
-<a name="l00397"></a>00397             beta_data[imfit] +=
-<a name="l00398"></a>00398                sm2 * (y[k] - fx_k) * partials[i];
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400             <span class="comment">/* Alpha is symmetrical, so compute</span>
-<a name="l00401"></a>00401 <span class="comment">               only lower-left part */</span>
-<a name="l00402"></a>00402             <span class="keywordflow">for</span> (j = 0, jmfit = 0; j < i; j++)
-<a name="l00403"></a>00403             {
-<a name="l00404"></a>00404                <span class="keywordflow">if</span> (ia[j] != 0)
-<a name="l00405"></a>00405                {
-<a name="l00406"></a>00406                   alpha_data[jmfit + imfit*Mfit] +=
-<a name="l00407"></a>00407                      sm2 * partials[i] *
-<a name="l00408"></a>00408                      partials[j];
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410                   jmfit += 1;
-<a name="l00411"></a>00411                }
-<a name="l00412"></a>00412             }
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414             <span class="comment">/* Alpha, diagonal terms */</span>
-<a name="l00415"></a>00415             j = i;
-<a name="l00416"></a>00416             jmfit = imfit;
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418             alpha_data[jmfit + imfit*Mfit] +=
-<a name="l00419"></a>00419                sm2 * partials[i] *
-<a name="l00420"></a>00420                partials[j] * (1 + lambda);
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422             imfit += 1;
-<a name="l00423"></a>00423          }
-<a name="l00424"></a>00424       }
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426       cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);
-<a name="l00427"></a>00427    }
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429    <span class="comment">/* Create upper-right part of alpha */</span>
-<a name="l00430"></a>00430    <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++) {
-<a name="l00431"></a>00431       <span class="keywordflow">if</span> (ia[i] != 0) {
-<a name="l00432"></a>00432          <span class="keywordflow">for</span> (j = i+1, jmfit = imfit+1; j < M; j++) {
-<a name="l00433"></a>00433             <span class="keywordflow">if</span> (ia[j] != 0) {
-<a name="l00434"></a>00434                alpha_data[jmfit+imfit*Mfit] = alpha_data[imfit+jmfit*Mfit];
-<a name="l00435"></a>00435                jmfit += 1;
-<a name="l00436"></a>00436             }
-<a name="l00437"></a>00437          }
-<a name="l00438"></a>00438          cpl_ensure( jmfit == Mfit,CPL_ERROR_ILLEGAL_INPUT,-1 );
-<a name="l00439"></a>00439          imfit += 1;
-<a name="l00440"></a>00440       }
-<a name="l00441"></a>00441    }
-<a name="l00442"></a>00442    cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444    da = cpl_matrix_solve(alpha, beta);
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446    cpl_ensure(da != NULL, cpl_error_get_code(), -1);
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448    <span class="comment">/* Create a+da vector by adding a and da */</span>
-<a name="l00449"></a>00449    da_data   = cpl_matrix_get_data(da);
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451    <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)
-<a name="l00452"></a>00452    {
-<a name="l00453"></a>00453       <span class="keywordflow">if</span> (ia[i] != 0)
-<a name="l00454"></a>00454       {
-<a name="l00455"></a>00455          a_da[i] = a[i] + da_data[0 + imfit*1];
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457          imfit += 1;
-<a name="l00458"></a>00458       }
-<a name="l00459"></a>00459       <span class="keywordflow">else</span>
-<a name="l00460"></a>00460       {
-<a name="l00461"></a>00461          a_da[i] = a[i];
-<a name="l00462"></a>00462       }
-<a name="l00463"></a>00463    }
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465    cpl_ensure( imfit == Mfit ,CPL_ERROR_ILLEGAL_INPUT,-1);
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467    cpl_matrix_delete(da);
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469    <span class="keywordflow">return</span> 0;
-<a name="l00470"></a>00470 }
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00496"></a>00496 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00499"></a>00499 get_chisq(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,
-<a name="l00500"></a>00500           <span class="keywordtype">int</span> (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),
-<a name="l00501"></a>00501           <span class="keyword">const</span> <span class="keywordtype">double</span> *a,
-<a name="l00502"></a>00502           <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00503"></a>00503           <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00504"></a>00504           <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma)
-<a name="l00505"></a>00505 {
-<a name="l00506"></a>00506    <span class="keywordtype">double</span> chi_sq;     <span class="comment">/* Result */</span>
-<a name="l00507"></a>00507    <span class="keywordtype">int</span> i = 0;
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509    <span class="comment">/* For efficiency, don't check input in this static function */</span>
-<a name="l00510"></a>00510    chi_sq = 0.0;
-<a name="l00511"></a>00511    <span class="keywordflow">for</span> (i = 0; i < N; i++)
-<a name="l00512"></a>00512    {
-<a name="l00513"></a>00513       <span class="keywordtype">double</span> fx_i;
-<a name="l00514"></a>00514       <span class="keywordtype">double</span> residual;                 <span class="comment">/* Residual in units of uncertainty */</span>
-<a name="l00515"></a>00515       <span class="keyword">const</span> <span class="keywordtype">double</span> *x_i = &(x[0+i*D]);
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517       <span class="comment">/* Evaluate */</span>
-<a name="l00518"></a>00518       cpl_ensure( f(x_i,
-<a name="l00519"></a>00519                     a,
-<a name="l00520"></a>00520                     &fx_i) == 0, CPL_ERROR_ILLEGAL_INPUT, -1.0);
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522       <span class="comment">/* Accumulate */</span>
-<a name="l00523"></a>00523       <span class="keywordflow">if</span> (sigma == NULL)
-<a name="l00524"></a>00524       {
-<a name="l00525"></a>00525          residual = (fx_i - y[i]);
-<a name="l00526"></a>00526       }
-<a name="l00527"></a>00527       <span class="keywordflow">else</span>
-<a name="l00528"></a>00528       {
-<a name="l00529"></a>00529          residual = (fx_i - y[i]) / sigma[i];
-<a name="l00530"></a>00530       }
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532       chi_sq += residual*residual;
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534    }
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536    <span class="keywordflow">return</span> chi_sq;
-<a name="l00537"></a>00537 }
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541 <span class="preprocessor">#ifndef CPL_VECTOR_FIT_MAXITER</span>
-<a name="l00542"></a>00542 <span class="preprocessor"></span><span class="preprocessor">#define CPL_VECTOR_FIT_MAXITER 1000</span>
-<a name="l00543"></a>00543 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00544"></a>00544 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00611"></a>00611 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00612"></a>00612 cpl_error_code
-<a name="l00613"></a>00613 sinfo_fit_lm(<span class="keyword">const</span> cpl_matrix *x,
-<a name="l00614"></a>00614              <span class="keyword">const</span> cpl_matrix *sigma_x,
-<a name="l00615"></a>00615              <span class="keyword">const</span> cpl_vector *y,
-<a name="l00616"></a>00616              <span class="keyword">const</span> cpl_vector *sigma_y,
-<a name="l00617"></a>00617              cpl_vector *a,
-<a name="l00618"></a>00618              <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],
-<a name="l00619"></a>00619              <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l00620"></a>00620                          <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00621"></a>00621                          <span class="keywordtype">double</span> *result),
-<a name="l00622"></a>00622              <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l00623"></a>00623                          <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00624"></a>00624                          <span class="keywordtype">double</span> result[]),
-<a name="l00625"></a>00625              <span class="keywordtype">double</span> *mse,
-<a name="l00626"></a>00626              <span class="keywordtype">double</span> *red_chisq,
-<a name="l00627"></a>00627              cpl_matrix **covariance)
-<a name="l00628"></a>00628 {
-<a name="l00629"></a>00629    <span class="keyword">const</span> <span class="keywordtype">double</span> *x_data     = NULL; <span class="comment">/* Pointer to input data                  */</span>
-<a name="l00630"></a>00630    <span class="keyword">const</span> <span class="keywordtype">double</span> *y_data     = NULL; <span class="comment">/* Pointer to input data                  */</span>
-<a name="l00631"></a>00631    <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma_data = NULL; <span class="comment">/* Pointer to input data                  */</span>
-<a name="l00632"></a>00632    <span class="keywordtype">int</span> N    = 0;                    <span class="comment">/* Number of data points                  */</span>
-<a name="l00633"></a>00633    <span class="keywordtype">int</span> D    = 0;                    <span class="comment">/* Dimension of x-points                  */</span>
-<a name="l00634"></a>00634    <span class="keywordtype">int</span> M    = 0;                    <span class="comment">/* Number of fit parameters               */</span>
-<a name="l00635"></a>00635    <span class="keywordtype">int</span> Mfit = 0;                    <span class="comment">/* Number of non-constant fit</span>
-<a name="l00636"></a>00636 <span class="comment">                                       parameters                             */</span>
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638    <span class="keywordtype">double</span> lambda    = 0.0;          <span class="comment">/* Lambda in L-M algorithm                */</span>
-<a name="l00639"></a>00639    <span class="keywordtype">double</span> MAXLAMBDA = 10e40;        <span class="comment">/* Parameter to control the graceful exit</span>
-<a name="l00640"></a>00640 <span class="comment">                                       if steepest descent unexpectedly fails */</span>
-<a name="l00641"></a>00641    <span class="keywordtype">double</span> chi_sq    = 0.0;          <span class="comment">/* Current  chi^2                         */</span>
-<a name="l00642"></a>00642    <span class="keywordtype">int</span> count        = 0;            <span class="comment">/* Number of successive small improvements</span>
-<a name="l00643"></a>00643 <span class="comment">                                       in chi^2 */</span>
-<a name="l00644"></a>00644    <span class="keywordtype">int</span> iterations   = 0;
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646    cpl_matrix *alpha  = NULL;       <span class="comment">/* The MxM ~curvature matrix used in L-M  */</span>
-<a name="l00647"></a>00647    cpl_matrix *beta   = NULL;       <span class="comment">/* Mx1 matrix = -.5 grad(chi^2)           */</span>
-<a name="l00648"></a>00648    <span class="keywordtype">double</span> *a_data     = NULL;       <span class="comment">/* Parameters, a                          */</span>
-<a name="l00649"></a>00649    <span class="keywordtype">double</span> *a_da       = NULL;       <span class="comment">/* Candidate position a+da                */</span>
-<a name="l00650"></a>00650    <span class="keywordtype">double</span> *part       = NULL;       <span class="comment">/* The partial derivatives df/da          */</span>
-<a name="l00651"></a>00651    <span class="keywordtype">int</span> *ia_local      = NULL;       <span class="comment">/* non-NULL version of ia                 */</span>
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653    <span class="comment">/* If covariance computation is requested, then either</span>
-<a name="l00654"></a>00654 <span class="comment">    * return the covariance matrix or return NULL.</span>
-<a name="l00655"></a>00655 <span class="comment">    */</span>
-<a name="l00656"></a>00656    <span class="keywordflow">if</span> (covariance != NULL) *covariance = NULL;
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658    <span class="comment">/* Validate input */</span>
-<a name="l00659"></a>00659    cpl_ensure_code(x       != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00660"></a>00660    cpl_ensure_code(sigma_x == NULL, CPL_ERROR_UNSUPPORTED_MODE);
-<a name="l00661"></a>00661    cpl_ensure_code(y       != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00662"></a>00662    cpl_ensure_code(a       != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00663"></a>00663    <span class="comment">/* ia may be NULL */</span>
-<a name="l00664"></a>00664    cpl_ensure_code(f       != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00665"></a>00665    cpl_ensure_code(dfda    != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667    <span class="comment">/* Chi^2 and covariance computations require sigmas to be known */</span>
-<a name="l00668"></a>00668    cpl_ensure_code( sigma_y != NULL ||
-<a name="l00669"></a>00669                     (red_chisq == NULL && covariance == NULL),
-<a name="l00670"></a>00670                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672    D = cpl_matrix_get_ncol(x);
-<a name="l00673"></a>00673    N = cpl_matrix_get_nrow(x);
-<a name="l00674"></a>00674    M = cpl_vector_get_size(a);
-<a name="l00675"></a>00675    cpl_ensure_code(N > 0 && D > 0 && M > 0, CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677    cpl_ensure_code( cpl_vector_get_size(y) == N,
-<a name="l00678"></a>00678                     CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680    x_data = cpl_matrix_get_data_const(x);
-<a name="l00681"></a>00681    y_data = cpl_vector_get_data_const(y);
-<a name="l00682"></a>00682    a_data = cpl_vector_get_data(a);
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684    <span class="keywordflow">if</span> (sigma_y != NULL)
-<a name="l00685"></a>00685    {
-<a name="l00686"></a>00686       cpl_ensure_code( cpl_vector_get_size(sigma_y) == N,
-<a name="l00687"></a>00687                        CPL_ERROR_INCOMPATIBLE_INPUT);
-<a name="l00688"></a>00688       <span class="comment">/* Sigmas must be positive */</span>
-<a name="l00689"></a>00689       cpl_ensure_code( cpl_vector_get_min (sigma_y) > 0,
-<a name="l00690"></a>00690                        CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00691"></a>00691       sigma_data = cpl_vector_get_data_const(sigma_y);
-<a name="l00692"></a>00692    }
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694    ia_local = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00695"></a>00695    cpl_ensure_code(ia_local != NULL, CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697    <span class="comment">/* Count non-constant fit parameters, copy ia */</span>
-<a name="l00698"></a>00698    <span class="keywordflow">if</span> (ia != NULL)
-<a name="l00699"></a>00699    {
-<a name="l00700"></a>00700       <span class="keywordtype">int</span> i;
-<a name="l00701"></a>00701 
-<a name="l00702"></a>00702       Mfit = 0;
-<a name="l00703"></a>00703       <span class="keywordflow">for</span> (i = 0; i < M; i++)
-<a name="l00704"></a>00704       {
-<a name="l00705"></a>00705          ia_local[i] = ia[i];
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707          <span class="keywordflow">if</span> (ia[i] != 0)
-<a name="l00708"></a>00708          {
-<a name="l00709"></a>00709             Mfit += 1;
-<a name="l00710"></a>00710          }
-<a name="l00711"></a>00711       }
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713       <span class="keywordflow">if</span> (! (Mfit > 0))
-<a name="l00714"></a>00714       {
-<a name="l00715"></a>00715          cpl_free(ia_local);
-<a name="l00716"></a>00716          cpl_ensure_code( CPL_FALSE,
-<a name="l00717"></a>00717                           CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00718"></a>00718       }
-<a name="l00719"></a>00719    }
-<a name="l00720"></a>00720    <span class="keywordflow">else</span>
-<a name="l00721"></a>00721    {
-<a name="l00722"></a>00722       <span class="comment">/* All parameters participate */</span>
-<a name="l00723"></a>00723       <span class="keywordtype">int</span> i;
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725       Mfit = M;
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727       <span class="keywordflow">for</span> (i = 0; i < M; i++)
-<a name="l00728"></a>00728       {
-<a name="l00729"></a>00729          ia_local[i] = 1;
-<a name="l00730"></a>00730       }
-<a name="l00731"></a>00731    }
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733    <span class="comment">/* To compute reduced chi^2, we need N > Mfit */</span>
-<a name="l00734"></a>00734    <span class="keywordflow">if</span> (! ( red_chisq == NULL || N > Mfit ) )
-<a name="l00735"></a>00735    {
-<a name="l00736"></a>00736       cpl_free(ia_local);
-<a name="l00737"></a>00737       cpl_ensure_code(
-<a name="l00738"></a>00738          CPL_FALSE,
-<a name="l00739"></a>00739          CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00740"></a>00740    }
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742    <span class="comment">/* Create alpha, beta, a_da, part  work space */</span>
-<a name="l00743"></a>00743    alpha = cpl_matrix_new(Mfit, Mfit);
-<a name="l00744"></a>00744    <span class="keywordflow">if</span> (alpha == NULL)
-<a name="l00745"></a>00745    {
-<a name="l00746"></a>00746       cpl_free(ia_local);
-<a name="l00747"></a>00747       cpl_ensure_code(
-<a name="l00748"></a>00748          CPL_FALSE,
-<a name="l00749"></a>00749          CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00750"></a>00750    }
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752    beta = cpl_matrix_new(Mfit, 1);
-<a name="l00753"></a>00753    <span class="keywordflow">if</span> (beta == NULL)
-<a name="l00754"></a>00754    {
-<a name="l00755"></a>00755       cpl_free(ia_local);
-<a name="l00756"></a>00756       cpl_matrix_delete(alpha);
-<a name="l00757"></a>00757       cpl_ensure_code(
-<a name="l00758"></a>00758          CPL_FALSE,
-<a name="l00759"></a>00759          CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00760"></a>00760    }
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762    a_da = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00763"></a>00763    <span class="keywordflow">if</span> (a_da == NULL)
-<a name="l00764"></a>00764    {
-<a name="l00765"></a>00765       cpl_free(ia_local);
-<a name="l00766"></a>00766       cpl_matrix_delete(alpha);
-<a name="l00767"></a>00767       cpl_matrix_delete(beta);
-<a name="l00768"></a>00768       cpl_ensure_code(
-<a name="l00769"></a>00769          CPL_FALSE,
-<a name="l00770"></a>00770          CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00771"></a>00771    }
-<a name="l00772"></a>00772 
-<a name="l00773"></a>00773    part = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00774"></a>00774    <span class="keywordflow">if</span> (part == NULL)
-<a name="l00775"></a>00775    {
-<a name="l00776"></a>00776       cpl_free(ia_local);
-<a name="l00777"></a>00777       cpl_matrix_delete(alpha);
-<a name="l00778"></a>00778       cpl_matrix_delete(beta);
-<a name="l00779"></a>00779       cpl_free(a_da);
-<a name="l00780"></a>00780       cpl_ensure_code(
-<a name="l00781"></a>00781          CPL_FALSE,
-<a name="l00782"></a>00782          CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l00783"></a>00783    }
-<a name="l00784"></a>00784 
-<a name="l00785"></a>00785    <span class="comment">/* Initialize loop variables */</span>
-<a name="l00786"></a>00786    lambda = 0.001;
-<a name="l00787"></a>00787    count = 0;
-<a name="l00788"></a>00788    iterations = 0;
-<a name="l00789"></a>00789    <span class="keywordflow">if</span>( (chi_sq = get_chisq(N, D, f, a_data, x_data, y_data, sigma_data)) < 0)
-<a name="l00790"></a>00790    {
-<a name="l00791"></a>00791       cpl_free(ia_local);
-<a name="l00792"></a>00792       cpl_matrix_delete(alpha);
-<a name="l00793"></a>00793       cpl_matrix_delete(beta);
-<a name="l00794"></a>00794       cpl_free(a_da);
-<a name="l00795"></a>00795       cpl_free(part);
-<a name="l00796"></a>00796       cpl_ensure_code(
-<a name="l00797"></a>00797          CPL_FALSE,
-<a name="l00798"></a>00798          cpl_error_get_code());
-<a name="l00799"></a>00799    }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801    <span class="comment">/* uves_msg_debug("Initial chi^2 = %f", chi_sq); */</span>
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803    <span class="comment">/* Iterate until chi^2 didn't improve substantially many (say, 5)</span>
-<a name="l00804"></a>00804 <span class="comment">      times in a row */</span>
-<a name="l00805"></a>00805    <span class="keywordflow">while</span> (count < 5 &&
-<a name="l00806"></a>00806           lambda < MAXLAMBDA &&
-<a name="l00807"></a>00807           iterations < CPL_VECTOR_FIT_MAXITER)
-<a name="l00808"></a>00808    {
-<a name="l00809"></a>00809       <span class="comment">/* In each iteration lambda increases, or chi^2 decreases or</span>
-<a name="l00810"></a>00810 <span class="comment">         count increases. Because chi^2 is bounded from below</span>
-<a name="l00811"></a>00811 <span class="comment">         (and lambda and count from above), the loop will terminate */</span>
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813       <span class="keywordtype">double</span> chi_sq_candidate = 0.0;
-<a name="l00814"></a>00814       <span class="keywordtype">int</span> returncode = 0;
-<a name="l00815"></a>00815 
-<a name="l00816"></a>00816       <span class="comment">/* Get candidate position in parameter space = a+da,</span>
-<a name="l00817"></a>00817 <span class="comment">       * where  alpha * da = beta .</span>
-<a name="l00818"></a>00818 <span class="comment">       * Increase lambda until alpha is non-singular</span>
-<a name="l00819"></a>00819 <span class="comment">       */</span>
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821       <span class="keywordflow">while</span>( (returncode = get_candidate(a_data, ia_local,
-<a name="l00822"></a>00822                                          M, N, D,
-<a name="l00823"></a>00823                                          lambda, f, dfda,
-<a name="l00824"></a>00824                                          x_data, y_data, sigma_data,
-<a name="l00825"></a>00825                                          part, alpha, beta, a_da)
-<a name="l00826"></a>00826                 ) != 0
-<a name="l00827"></a>00827              && cpl_error_get_code() == CPL_ERROR_SINGULAR_MATRIX
-<a name="l00828"></a>00828              && lambda < MAXLAMBDA)
-<a name="l00829"></a>00829       {
-<a name="l00830"></a>00830          <span class="comment">/* uves_msg_debug("Singular matrix. lambda = %e", lambda); */</span>
-<a name="l00831"></a>00831          cpl_error_reset();
-<a name="l00832"></a>00832          lambda *= 9.0;
-<a name="l00833"></a>00833       }
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835       <span class="comment">/* Set error if lambda diverged */</span>
-<a name="l00836"></a>00836       <span class="keywordflow">if</span> ( !( lambda < MAXLAMBDA ) )
-<a name="l00837"></a>00837       {
-<a name="l00838"></a>00838          cpl_free(ia_local);
-<a name="l00839"></a>00839          cpl_matrix_delete(alpha);
-<a name="l00840"></a>00840          cpl_matrix_delete(beta);
-<a name="l00841"></a>00841          cpl_free(a_da);
-<a name="l00842"></a>00842          cpl_free(part);
-<a name="l00843"></a>00843          cpl_ensure_code(
-<a name="l00844"></a>00844             CPL_FALSE,
-<a name="l00845"></a>00845             CPL_ERROR_CONTINUE);
-<a name="l00846"></a>00846       }
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848       <span class="keywordflow">if</span> (returncode != 0)
-<a name="l00849"></a>00849       {
-<a name="l00850"></a>00850          cpl_free(ia_local);
-<a name="l00851"></a>00851          cpl_matrix_delete(alpha);
-<a name="l00852"></a>00852          cpl_matrix_delete(beta);
-<a name="l00853"></a>00853          cpl_free(a_da);
-<a name="l00854"></a>00854          cpl_free(part);
-<a name="l00855"></a>00855          cpl_ensure_code(
-<a name="l00856"></a>00856             CPL_FALSE,
-<a name="l00857"></a>00857             cpl_error_get_code());
-<a name="l00858"></a>00858       }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860       <span class="comment">/* Get chi^2(a+da) */</span>
-<a name="l00861"></a>00861       <span class="keywordflow">if</span> ((chi_sq_candidate = get_chisq(N, D, f, a_da,
-<a name="l00862"></a>00862                                         x_data, y_data, sigma_data)) < 0)
-<a name="l00863"></a>00863       {
-<a name="l00864"></a>00864          cpl_free(ia_local);
-<a name="l00865"></a>00865          cpl_matrix_delete(alpha);
-<a name="l00866"></a>00866          cpl_matrix_delete(beta);
-<a name="l00867"></a>00867          cpl_free(a_da);
-<a name="l00868"></a>00868          cpl_free(part);
-<a name="l00869"></a>00869          cpl_ensure_code(
-<a name="l00870"></a>00870             CPL_FALSE,
-<a name="l00871"></a>00871             cpl_error_get_code());
-<a name="l00872"></a>00872       }
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874       <span class="comment">/* uves_msg_debug("Chi^2 = %f  Candidate = %f  Lambda = %e",</span>
-<a name="l00875"></a>00875 <span class="comment">         chi_sq, chi_sq_candidate, lambda);  */</span>
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877       <span class="keywordflow">if</span> (chi_sq_candidate > chi_sq)
-<a name="l00878"></a>00878       {
-<a name="l00879"></a>00879          <span class="comment">/* Move towards steepest descent */</span>
-<a name="l00880"></a>00880          lambda *= 9.0;
-<a name="l00881"></a>00881       }
-<a name="l00882"></a>00882       <span class="keywordflow">else</span>
-<a name="l00883"></a>00883       {
-<a name="l00884"></a>00884          <span class="comment">/* Move towards Newton's algorithm */</span>
-<a name="l00885"></a>00885          lambda /= 10.0;
-<a name="l00886"></a>00886 
-<a name="l00887"></a>00887          <span class="comment">/* Count the number of successive improvements in chi^2 of</span>
-<a name="l00888"></a>00888 <span class="comment">            less than 0.01 relative */</span>
-<a name="l00889"></a>00889          <span class="keywordflow">if</span> ( chi_sq == 0 ||
-<a name="l00890"></a>00890               (chi_sq - chi_sq_candidate)/chi_sq < .01)
-<a name="l00891"></a>00891          {
-<a name="l00892"></a>00892             count += 1;
-<a name="l00893"></a>00893          }
-<a name="l00894"></a>00894          <span class="keywordflow">else</span>
-<a name="l00895"></a>00895          {
-<a name="l00896"></a>00896             <span class="comment">/* Chi^2 improved by a significant amount,</span>
-<a name="l00897"></a>00897 <span class="comment">               reset counter */</span>
-<a name="l00898"></a>00898             count = 0;
-<a name="l00899"></a>00899          }
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901          <span class="comment">/* chi^2 improved, update a and chi^2 */</span>
-<a name="l00902"></a>00902          {
-<a name="l00903"></a>00903             <span class="keywordtype">int</span> i;
-<a name="l00904"></a>00904             <span class="keywordflow">for</span> (i = 0; i < M; i++) a_data[i] = a_da[i];
-<a name="l00905"></a>00905          }
-<a name="l00906"></a>00906          chi_sq = chi_sq_candidate;
-<a name="l00907"></a>00907       }
-<a name="l00908"></a>00908       iterations++;
-<a name="l00909"></a>00909    }
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911    <span class="comment">/* Set error if we didn't converge */</span>
-<a name="l00912"></a>00912    <span class="keywordflow">if</span> ( !( lambda < MAXLAMBDA && iterations < CPL_VECTOR_FIT_MAXITER ) )
-<a name="l00913"></a>00913    {
-<a name="l00914"></a>00914       cpl_free(ia_local);
-<a name="l00915"></a>00915       cpl_matrix_delete(alpha);
-<a name="l00916"></a>00916       cpl_matrix_delete(beta);
-<a name="l00917"></a>00917       cpl_free(a_da);
-<a name="l00918"></a>00918       cpl_free(part);
-<a name="l00919"></a>00919       cpl_ensure_code(
-<a name="l00920"></a>00920          CPL_FALSE,
-<a name="l00921"></a>00921          CPL_ERROR_CONTINUE);
-<a name="l00922"></a>00922    }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924    <span class="comment">/* Compute mse if requested */</span>
-<a name="l00925"></a>00925    <span class="keywordflow">if</span> (mse != NULL)
-<a name="l00926"></a>00926    {
-<a name="l00927"></a>00927       <span class="keywordtype">int</span> i;
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929       *mse = 0.0;
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931       <span class="keywordflow">for</span>(i = 0; i < N; i++)
-<a name="l00932"></a>00932       {
-<a name="l00933"></a>00933          <span class="keywordtype">double</span> fx_i = 0.0;
-<a name="l00934"></a>00934          <span class="keywordtype">double</span> residual = 0.0;
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936          <span class="comment">/* Evaluate f(x_i) at the best fit parameters */</span>
-<a name="l00937"></a>00937          <span class="keywordflow">if</span>( f(&(x_data[i*D]),
-<a name="l00938"></a>00938                a_data,
-<a name="l00939"></a>00939                &fx_i) != 0)
-<a name="l00940"></a>00940          {
-<a name="l00941"></a>00941             cpl_free(ia_local);
-<a name="l00942"></a>00942             cpl_matrix_delete(alpha);
-<a name="l00943"></a>00943             cpl_matrix_delete(beta);
-<a name="l00944"></a>00944             cpl_free(a_da);
-<a name="l00945"></a>00945             cpl_free(part);
-<a name="l00946"></a>00946             cpl_ensure_code(
-<a name="l00947"></a>00947                CPL_FALSE,
-<a name="l00948"></a>00948                CPL_ERROR_ILLEGAL_INPUT);
-<a name="l00949"></a>00949          }
-<a name="l00950"></a>00950 
-<a name="l00951"></a>00951          residual = y_data[i] - fx_i;
-<a name="l00952"></a>00952          *mse += residual * residual;
-<a name="l00953"></a>00953       }
-<a name="l00954"></a>00954       *mse /= N;
-<a name="l00955"></a>00955    }
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957    <span class="comment">/* Compute reduced chi^2 if requested */</span>
-<a name="l00958"></a>00958    <span class="keywordflow">if</span> (red_chisq != NULL)
-<a name="l00959"></a>00959    {
-<a name="l00960"></a>00960       <span class="comment">/* We already know the optimal chi^2 (and that N > Mfit)*/</span>
-<a name="l00961"></a>00961       *red_chisq = chi_sq / (N-Mfit);
-<a name="l00962"></a>00962    }
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964    <span class="comment">/* Compute covariance matrix if requested</span>
-<a name="l00965"></a>00965 <span class="comment">    * cov = alpha(lambda=0)^-1</span>
-<a name="l00966"></a>00966 <span class="comment">    */</span>
-<a name="l00967"></a>00967    <span class="keywordflow">if</span> (covariance != NULL)
-<a name="l00968"></a>00968    {
-<a name="l00969"></a>00969       cpl_matrix *cov;
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971       <span class="keywordflow">if</span>( get_candidate(a_data, ia_local,
-<a name="l00972"></a>00972                         M, N, D, 0.0, f, dfda,
-<a name="l00973"></a>00973                         x_data, y_data, sigma_data,
-<a name="l00974"></a>00974                         part, alpha, beta, a_da)
-<a name="l00975"></a>00975           != 0)
-<a name="l00976"></a>00976       {
-<a name="l00977"></a>00977          cpl_free(ia_local);
-<a name="l00978"></a>00978          cpl_matrix_delete(alpha);
-<a name="l00979"></a>00979          cpl_matrix_delete(beta);
-<a name="l00980"></a>00980          cpl_free(a_da);
-<a name="l00981"></a>00981          cpl_free(part);
-<a name="l00982"></a>00982          cpl_ensure_code(
-<a name="l00983"></a>00983             CPL_FALSE,
-<a name="l00984"></a>00984             cpl_error_get_code());
-<a name="l00985"></a>00985       }
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987       cov = cpl_matrix_invert_create(alpha);
-<a name="l00988"></a>00988       <span class="keywordflow">if</span> (cov == NULL)
-<a name="l00989"></a>00989       {
-<a name="l00990"></a>00990          cpl_free(ia_local);
-<a name="l00991"></a>00991          cpl_matrix_delete(alpha);
-<a name="l00992"></a>00992          cpl_matrix_delete(beta);
-<a name="l00993"></a>00993          cpl_free(a_da);
-<a name="l00994"></a>00994          cpl_free(part);
-<a name="l00995"></a>00995          cpl_ensure_code(
-<a name="l00996"></a>00996             CPL_FALSE,
-<a name="l00997"></a>00997             cpl_error_get_code());
-<a name="l00998"></a>00998       }
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000       <span class="comment">/* Make sure that variances are positive */</span>
-<a name="l01001"></a>01001       {
-<a name="l01002"></a>01002          <span class="keywordtype">int</span> i;
-<a name="l01003"></a>01003          <span class="keywordflow">for</span> (i = 0; i < Mfit; i++)
-<a name="l01004"></a>01004          {
-<a name="l01005"></a>01005             <span class="keywordflow">if</span> ( !(cpl_matrix_get(cov, i, i) > 0) )
-<a name="l01006"></a>01006             {
-<a name="l01007"></a>01007                cpl_free(ia_local);
-<a name="l01008"></a>01008                cpl_matrix_delete(alpha);
-<a name="l01009"></a>01009                cpl_matrix_delete(beta);
-<a name="l01010"></a>01010                cpl_free(a_da);
-<a name="l01011"></a>01011                cpl_free(part);
-<a name="l01012"></a>01012                cpl_matrix_delete(cov);
-<a name="l01013"></a>01013                *covariance = NULL;
-<a name="l01014"></a>01014                cpl_ensure_code(
-<a name="l01015"></a>01015                   CPL_FALSE,
-<a name="l01016"></a>01016                   CPL_ERROR_SINGULAR_MATRIX);
-<a name="l01017"></a>01017             }
-<a name="l01018"></a>01018          }
-<a name="l01019"></a>01019       }
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021       <span class="comment">/* Expand covariance matrix from Mfit x Mfit</span>
-<a name="l01022"></a>01022 <span class="comment">         to M x M. Set rows/columns corresponding to fixed</span>
-<a name="l01023"></a>01023 <span class="comment">         parameters to zero */</span>
-<a name="l01024"></a>01024 
-<a name="l01025"></a>01025       *covariance = cpl_matrix_new(M, M);
-<a name="l01026"></a>01026       <span class="keywordflow">if</span> (*covariance == NULL)
-<a name="l01027"></a>01027       {
-<a name="l01028"></a>01028          cpl_free(ia_local);
-<a name="l01029"></a>01029          cpl_matrix_delete(alpha);
-<a name="l01030"></a>01030          cpl_matrix_delete(beta);
-<a name="l01031"></a>01031          cpl_free(a_da);
-<a name="l01032"></a>01032          cpl_free(part);
-<a name="l01033"></a>01033          cpl_matrix_delete(cov);
-<a name="l01034"></a>01034          cpl_ensure_code(
-<a name="l01035"></a>01035             CPL_FALSE,
-<a name="l01036"></a>01036             CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l01037"></a>01037       }
-<a name="l01038"></a>01038 
-<a name="l01039"></a>01039       {
-<a name="l01040"></a>01040          <span class="keywordtype">int</span> j, jmfit;
-<a name="l01041"></a>01041 
-<a name="l01042"></a>01042          <span class="keywordflow">for</span> (j = 0, jmfit = 0; j < M; j++)
-<a name="l01043"></a>01043             <span class="keywordflow">if</span> (ia_local[j] != 0)
-<a name="l01044"></a>01044             {
-<a name="l01045"></a>01045                <span class="keywordtype">int</span> i, imfit;
-<a name="l01046"></a>01046 
-<a name="l01047"></a>01047                <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)
-<a name="l01048"></a>01048                   <span class="keywordflow">if</span> (ia_local[i] != 0)
-<a name="l01049"></a>01049                   {
-<a name="l01050"></a>01050                      cpl_matrix_set(*covariance, i, j,
-<a name="l01051"></a>01051                                     cpl_matrix_get(
-<a name="l01052"></a>01052                                        cov, imfit, jmfit));
-<a name="l01053"></a>01053                      imfit += 1;
-<a name="l01054"></a>01054                   }
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056                cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058                jmfit += 1;
-<a name="l01059"></a>01059             }
-<a name="l01060"></a>01060 
-<a name="l01061"></a>01061          cpl_ensure( jmfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1 );
-<a name="l01062"></a>01062       }
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064       cpl_matrix_delete(cov);
-<a name="l01065"></a>01065    }
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067    cpl_free(ia_local);
-<a name="l01068"></a>01068    cpl_matrix_delete(alpha);
-<a name="l01069"></a>01069    cpl_matrix_delete(beta);
-<a name="l01070"></a>01070    cpl_free(a_da);
-<a name="l01071"></a>01071    cpl_free(part);
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073    <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01074"></a>01074 }
-<a name="l01075"></a>01075 
-<a name="l01076"></a>01076 
-<a name="l01077"></a>01077 
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079 
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081 
-<a name="l01082"></a>01082 
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084 
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086 
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01091"></a>01091 
-<a name="l01103"></a>01103 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01104"></a>01104 sinfo_fit_amoeba_get_psum(<span class="keywordtype">int</span> ndim, <span class="keywordtype">int</span> mpts, <span class="keywordtype">double</span>** p, <span class="keywordtype">double</span>* psum)
-<a name="l01105"></a>01105 {
-<a name="l01106"></a>01106    <span class="keywordtype">int</span> i=0;
-<a name="l01107"></a>01107    <span class="keywordtype">int</span> j=0;
-<a name="l01108"></a>01108    <span class="keywordtype">double</span> sum=0;
-<a name="l01109"></a>01109    <span class="keywordflow">for</span> (j=0;j<ndim;j++) {
-<a name="l01110"></a>01110       <span class="keywordflow">for</span> (sum=0.0,i=0;i<mpts;i++) {
-<a name="l01111"></a>01111          sum += p[i][j];
-<a name="l01112"></a>01112       }
-<a name="l01113"></a>01113       psum[j]=sum;
-<a name="l01114"></a>01114    }
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116 }
-<a name="l01117"></a>01117 
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119 <span class="preprocessor">#define SINFO_FIT_AMOEBA_SWAP(a,b) {swap=(a);(a)=(b);(b)=swap;}</span>
-<a name="l01120"></a>01120 <span class="preprocessor"></span>
-<a name="l01121"></a>01121 
-<a name="l01122"></a>01122 
-<a name="l01149"></a>01149 <span class="keywordtype">void</span>
-<a name="l01150"></a>01150 sinfo_fit_amoeba(
-<a name="l01151"></a>01151    <span class="keywordtype">double</span>**p,
-<a name="l01152"></a>01152    <span class="keywordtype">double</span> y[],
-<a name="l01153"></a>01153    <span class="keywordtype">int</span> ndim,
-<a name="l01154"></a>01154    <span class="keywordtype">double</span> ftol,
-<a name="l01155"></a>01155    <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),
-<a name="l01156"></a>01156    <span class="keywordtype">int</span>* nfunk)
-<a name="l01157"></a>01157 {
-<a name="l01158"></a>01158 
-<a name="l01159"></a>01159 
-<a name="l01160"></a>01160    <span class="keywordtype">int</span> i=0;
-<a name="l01161"></a>01161    <span class="keywordtype">int</span> ihi=0;
-<a name="l01162"></a>01162    <span class="keywordtype">int</span> ilo=0;
-<a name="l01163"></a>01163    <span class="keywordtype">int</span> inhi=0;
-<a name="l01164"></a>01164    <span class="keywordtype">int</span> j=0;
-<a name="l01165"></a>01165    <span class="keywordtype">int</span> mpts=ndim+1;
-<a name="l01166"></a>01166    <span class="keywordtype">double</span> rtol=0;
-<a name="l01167"></a>01167    <span class="keywordtype">double</span> swap=0;
-<a name="l01168"></a>01168    <span class="keywordtype">double</span> ysave=0;
-<a name="l01169"></a>01169    <span class="keywordtype">double</span> ytry=0;
-<a name="l01170"></a>01170    cpl_vector* sum=NULL;
-<a name="l01171"></a>01171    <span class="keywordtype">double</span>* psum=NULL;
-<a name="l01172"></a>01172 
-<a name="l01173"></a>01173    sum=cpl_vector_new(ndim);
-<a name="l01174"></a>01174    psum=cpl_vector_get_data(sum);
-<a name="l01175"></a>01175    *nfunk=0;
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177    sinfo_fit_amoeba_get_psum(ndim,mpts,p,psum);
-<a name="l01178"></a>01178 
-<a name="l01179"></a>01179    <span class="keywordflow">for</span>(;;) {
-<a name="l01180"></a>01180       ilo=0;
-<a name="l01181"></a>01181       <span class="comment">/*</span>
-<a name="l01182"></a>01182 <span class="comment">        First we must determine which point is the highest (worst),</span>
-<a name="l01183"></a>01183 <span class="comment">        next-highest, and lowest (best), by looping over the points</span>
-<a name="l01184"></a>01184 <span class="comment">        in the simplex</span>
-<a name="l01185"></a>01185 <span class="comment">      */</span>
-<a name="l01186"></a>01186       ihi=y[0]>y[1] ? (inhi=1,0) : (inhi=0,1);
-<a name="l01187"></a>01187 
-<a name="l01188"></a>01188       <span class="keywordflow">for</span> (i=0;i< mpts;i++) {
-<a name="l01189"></a>01189          <span class="keywordflow">if</span> (y[i] <= y[ilo]) ilo=i;
-<a name="l01190"></a>01190          <span class="keywordflow">if</span> (y[i] > y[ihi]) {
-<a name="l01191"></a>01191             inhi=ihi;
-<a name="l01192"></a>01192             ihi=i;
-<a name="l01193"></a>01193          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (y[i] > y[inhi] && i != ihi) inhi=i;
-<a name="l01194"></a>01194       }
-<a name="l01195"></a>01195       rtol=2.0*fabs(y[ihi]-y[ilo])/(fabs(y[ihi])+fabs(y[ilo]));
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197       <span class="comment">/*</span>
-<a name="l01198"></a>01198 <span class="comment">        compute the fractional range from highest to lowest and return if</span>
-<a name="l01199"></a>01199 <span class="comment">        satisfactory</span>
-<a name="l01200"></a>01200 <span class="comment">      */</span>
-<a name="l01201"></a>01201       <span class="keywordflow">if</span>(rtol < ftol) { <span class="comment">// if returning, but best point and value is in slot 1</span>
-<a name="l01202"></a>01202          SINFO_FIT_AMOEBA_SWAP(y[0],y[ilo]);
-<a name="l01203"></a>01203          <span class="keywordflow">for</span> (i=0;i<ndim;i++) SINFO_FIT_AMOEBA_SWAP(p[1][i],p[ilo][i]);
-<a name="l01204"></a>01204          <span class="keywordflow">break</span>;
-<a name="l01205"></a>01205       }
-<a name="l01206"></a>01206       <span class="keywordflow">if</span> (*nfunk >= SINFO_FIT_AMOEBA_NMAX) {
-<a name="l01207"></a>01207          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NMAX exceeded"</span>);
-<a name="l01208"></a>01208          SINFO_FIT_AMOEBA_SWAP(y[0],y[ilo]);
-<a name="l01209"></a>01209          <span class="keywordflow">for</span> (i=0;i<ndim;i++) SINFO_FIT_AMOEBA_SWAP(p[1][i],p[ilo][i]);
-<a name="l01210"></a>01210          <span class="keywordflow">for</span> (i=0;i<ndim;i++) {
-<a name="l01211"></a>01211             sinfo_msg(<span class="stringliteral">"p[1][i]=%g p[ilo][i]=%g ilo=%d"</span>,p[1][i],p[ilo][i],ilo);
-<a name="l01212"></a>01212          }
-<a name="l01213"></a>01213          assure(*nfunk >= SINFO_FIT_AMOEBA_NMAX,CPL_ERROR_UNSPECIFIED,
-<a name="l01214"></a>01214                 <span class="stringliteral">"NMAX exceeded"</span>);
-<a name="l01215"></a>01215          <span class="keywordflow">break</span>;
-<a name="l01216"></a>01216 
-<a name="l01217"></a>01217       }
-<a name="l01218"></a>01218       *nfunk +=2;
-<a name="l01219"></a>01219       <span class="comment">/*</span>
-<a name="l01220"></a>01220 <span class="comment">        Begin a new iteration. First extrapolate by a Factor -1 through the face</span>
-<a name="l01221"></a>01221 <span class="comment">        of the simplex across the high point, i.e. reflect the simplex from the</span>
-<a name="l01222"></a>01222 <span class="comment">        high point</span>
-<a name="l01223"></a>01223 <span class="comment">      */</span>
-<a name="l01224"></a>01224       ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,-1.0);
-<a name="l01225"></a>01225       <span class="keywordflow">if</span>(ytry <= y[ilo]) {
-<a name="l01226"></a>01226          <span class="comment">/*</span>
-<a name="l01227"></a>01227 <span class="comment">            Gives a result better than the best point, so try an additional</span>
-<a name="l01228"></a>01228 <span class="comment">            extrapolation by a factor 2</span>
-<a name="l01229"></a>01229 <span class="comment">         */</span>
-<a name="l01230"></a>01230          ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,2.0);
-<a name="l01231"></a>01231       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ytry >= y[inhi]) {
-<a name="l01232"></a>01232 
-<a name="l01233"></a>01233          <span class="comment">/*</span>
-<a name="l01234"></a>01234 <span class="comment">           The reflected point is worse than the second highest, so look for an</span>
-<a name="l01235"></a>01235 <span class="comment">           intermediate lower point, i.e. do a one-dimensional contraction</span>
-<a name="l01236"></a>01236 <span class="comment">         */</span>
-<a name="l01237"></a>01237          ysave=y[ihi];
-<a name="l01238"></a>01238          ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,0.5);
-<a name="l01239"></a>01239          <span class="keywordflow">if</span>(ytry >= ysave) {
-<a name="l01240"></a>01240             <span class="comment">/*</span>
-<a name="l01241"></a>01241 <span class="comment">               Can't seem to get rid of that high point.</span>
-<a name="l01242"></a>01242 <span class="comment">               Better contract around the lowest (best) point</span>
-<a name="l01243"></a>01243 <span class="comment">            */</span>
-<a name="l01244"></a>01244             <span class="keywordflow">for</span>(i=0;i<mpts;i++) {
-<a name="l01245"></a>01245                <span class="keywordflow">if</span>(i != ilo) {
-<a name="l01246"></a>01246                   <span class="keywordflow">for</span>( j=0;j<ndim;j++) {
-<a name="l01247"></a>01247                      p[i][j]=psum[j]=0.5*(p[i][j]+p[ilo][j]);
-<a name="l01248"></a>01248                   }
-<a name="l01249"></a>01249                   y[i]=(*funk)(psum);
-<a name="l01250"></a>01250                }
-<a name="l01251"></a>01251             }
-<a name="l01252"></a>01252             *nfunk += ndim; <span class="comment">/* Keep track of function evaluations */</span>
-<a name="l01253"></a>01253             sinfo_fit_amoeba_get_psum(ndim,mpts,p,psum);<span class="comment">/* Recomputes psum */</span>
-<a name="l01254"></a>01254          }
-<a name="l01255"></a>01255       } <span class="keywordflow">else</span> {
-<a name="l01256"></a>01256          --(*nfunk);
-<a name="l01257"></a>01257          <span class="comment">/* Go back for the test of doneness and the next iteration */</span>
-<a name="l01258"></a>01258       }
-<a name="l01259"></a>01259    }
-<a name="l01260"></a>01260   cleanup:
-<a name="l01261"></a>01261    cpl_vector_delete(sum);
-<a name="l01262"></a>01262 }
-<a name="l01263"></a>01263 
-<a name="l01264"></a>01264 
-<a name="l01265"></a>01265 <span class="keyword">static</span>  <span class="keywordtype">double</span>
-<a name="l01266"></a>01266 sinfo_fit_amotry(<span class="keywordtype">double</span>** p, <span class="keywordtype">double</span> y[], <span class="keywordtype">double</span> psum[], <span class="keywordtype">int</span> ndim,
-<a name="l01267"></a>01267                  <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),<span class="keywordtype">int</span> ihi, <span class="keywordtype">double</span> fac)
-<a name="l01268"></a>01268 {
-<a name="l01269"></a>01269    <span class="keywordtype">int</span> j;
-<a name="l01270"></a>01270    <span class="keywordtype">double</span> fac1=0;
-<a name="l01271"></a>01271    <span class="keywordtype">double</span> fac2=0;
-<a name="l01272"></a>01272    <span class="keywordtype">double</span> ytry=0;
-<a name="l01273"></a>01273    cpl_vector * vtry=NULL;
-<a name="l01274"></a>01274    <span class="keywordtype">double</span> *ptry=NULL;
-<a name="l01275"></a>01275 
-<a name="l01276"></a>01276    vtry=cpl_vector_new(ndim);
-<a name="l01277"></a>01277    ptry=cpl_vector_get_data(vtry);
-<a name="l01278"></a>01278 
-<a name="l01279"></a>01279    fac1=(1.0-fac)/ndim;
-<a name="l01280"></a>01280    fac2=fac1-fac;
-<a name="l01281"></a>01281 
-<a name="l01282"></a>01282    <span class="keywordflow">for</span> (j=0;j<ndim;j++) {
-<a name="l01283"></a>01283       ptry[j]=psum[j]*fac1-p[ihi][j]*fac2;
-<a name="l01284"></a>01284    }
-<a name="l01285"></a>01285    ytry=(*funk)(ptry);
-<a name="l01286"></a>01286    <span class="keywordflow">if</span> (ytry < y[ihi]) {
-<a name="l01287"></a>01287       y[ihi]=ytry;
-<a name="l01288"></a>01288       <span class="keywordflow">for</span> (j=0;j<ndim;j++) {
-<a name="l01289"></a>01289          psum[j] += ptry[j]-p[ihi][j];
-<a name="l01290"></a>01290          p[ihi][j]=ptry[j];
-<a name="l01291"></a>01291       }
-<a name="l01292"></a>01292    }
-<a name="l01293"></a>01293    sinfo_free_my_vector(&vtry);
-<a name="l01294"></a>01294    <span class="keywordflow">return</span> ytry;
-<a name="l01295"></a>01295 }
-<a name="l01296"></a>01296 
-<a name="l01297"></a>01297 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01298"></a>01298 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01308"></a>01308 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01309"></a>01309 
-<a name="l01310"></a>01310 <span class="keywordtype">int</span> sinfo_vector_dindgen(cpl_vector** v)
-<a name="l01311"></a>01311 {
-<a name="l01312"></a>01312 
-<a name="l01313"></a>01313    <span class="keywordtype">int</span> sz=0;
-<a name="l01314"></a>01314    <span class="keywordtype">int</span> i=0;
-<a name="l01315"></a>01315 
-<a name="l01316"></a>01316    cknull(*v,<span class="stringliteral">"Null input vector"</span>);
-<a name="l01317"></a>01317    check(sz=cpl_vector_get_size(*v),<span class="stringliteral">"Getting size of a vector"</span>);
-<a name="l01318"></a>01318 
-<a name="l01319"></a>01319    <span class="keywordflow">for</span>(i=0;i<sz;i++) {
-<a name="l01320"></a>01320       cpl_vector_set(*v,i,(<span class="keywordtype">double</span>)i);
-<a name="l01321"></a>01321    }
-<a name="l01322"></a>01322 
-<a name="l01323"></a>01323    <span class="keywordflow">return</span> 0;
-<a name="l01324"></a>01324   cleanup:
-<a name="l01325"></a>01325    <span class="keywordflow">return</span> -1;
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327 }
-<a name="l01328"></a>01328 
-<a name="l01329"></a>01329 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01340"></a>01340 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01341"></a>01341 
-<a name="l01342"></a>01342 <span class="keywordtype">int</span> sinfo_is_fits_file(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)
-<a name="l01343"></a>01343 {
-<a name="l01344"></a>01344    FILE    *fp ;
-<a name="l01345"></a>01345    <span class="keywordtype">char</span>    *magic ;
-<a name="l01346"></a>01346    <span class="keywordtype">int</span>        isfits ;
-<a name="l01347"></a>01347 
-<a name="l01348"></a>01348    <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">"r"</span>))==NULL) {
-<a name="l01349"></a>01349       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open file [%s]"</span>, filename) ;
-<a name="l01350"></a>01350       <span class="keywordflow">return</span> -1 ;
-<a name="l01351"></a>01351    }
-<a name="l01352"></a>01352 
-<a name="l01353"></a>01353    magic = cpl_calloc(FITS_MAGIC_SZ+1, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>)) ;
-<a name="l01354"></a>01354    (void)fread(magic, 1, FITS_MAGIC_SZ, fp) ;
-<a name="l01355"></a>01355    (void)fclose(fp) ;
-<a name="l01356"></a>01356    magic[FITS_MAGIC_SZ] = (char)0 ;
-<a name="l01357"></a>01357    <span class="keywordflow">if</span> (strstr(magic, <span class="stringliteral">"SIMPLE"</span>)!=NULL)
-<a name="l01358"></a>01358       isfits = 1 ;
-<a name="l01359"></a>01359    <span class="keywordflow">else</span>
-<a name="l01360"></a>01360       isfits = 0 ;
-<a name="l01361"></a>01361    cpl_free(magic) ;
-<a name="l01362"></a>01362    <span class="keywordflow">return</span> isfits ;
-<a name="l01363"></a>01363 }
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01371"></a>01371 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01372"></a>01372 cpl_error_code
-<a name="l01373"></a>01373 sinfo_table_correl(cpl_table * t1, cpl_table* t2, cpl_table* range,<span class="keywordtype">double</span>* xcor)
-<a name="l01374"></a>01374 {
-<a name="l01375"></a>01375 
-<a name="l01376"></a>01376    <span class="keywordtype">double</span> wsr=0;
-<a name="l01377"></a>01377    <span class="keywordtype">double</span> wer=0;
-<a name="l01378"></a>01378    <span class="keywordtype">int</span> nr=0;
-<a name="l01379"></a>01379    <span class="keywordtype">int</span> i=0;
-<a name="l01380"></a>01380    <span class="keywordtype">int</span> status=0;
-<a name="l01381"></a>01381    <span class="keywordtype">int</span> nrows=0;
-<a name="l01382"></a>01382    <span class="keywordtype">double</span> mean=0;
-<a name="l01383"></a>01383    <span class="keywordtype">double</span> prod=0;
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385    cpl_table* tmp_t1=NULL;
-<a name="l01386"></a>01386    cpl_table* tmp_t2=NULL;
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388    check_nomsg(nr=cpl_table_get_nrow(range));
-<a name="l01389"></a>01389    <span class="keywordflow">for</span>(i=0;i<nr;i++) {
-<a name="l01390"></a>01390       wsr=cpl_table_get_double(range,<span class="stringliteral">"WSTART"</span>,i,&status);
-<a name="l01391"></a>01391       wer=cpl_table_get_double(range,<span class="stringliteral">"WEND"</span>,i,&status);
-<a name="l01392"></a>01392       cpl_table_and_selected_double(t1,<span class="stringliteral">"WAVE"</span>,CPL_NOT_LESS_THAN,wsr);
-<a name="l01393"></a>01393       cpl_table_and_selected_double(t1,<span class="stringliteral">"WAVE"</span>,CPL_NOT_GREATER_THAN,wer);
-<a name="l01394"></a>01394       tmp_t1=cpl_table_extract_selected(t1);
-<a name="l01395"></a>01395       cpl_table_and_selected_double(t2,<span class="stringliteral">"WAVE"</span>,CPL_NOT_LESS_THAN,wsr);
-<a name="l01396"></a>01396       cpl_table_and_selected_double(t2,<span class="stringliteral">"WAVE"</span>,CPL_NOT_GREATER_THAN,wer);
-<a name="l01397"></a>01397       tmp_t2=cpl_table_extract_selected(t2);
-<a name="l01398"></a>01398       cpl_table_duplicate_column(tmp_t1,<span class="stringliteral">"INT1"</span>,tmp_t1,<span class="stringliteral">"INT"</span>);
-<a name="l01399"></a>01399       cpl_table_duplicate_column(tmp_t1,<span class="stringliteral">"INT2"</span>,tmp_t2,<span class="stringliteral">"INT"</span>);
-<a name="l01400"></a>01400       cpl_table_multiply_columns(tmp_t1,<span class="stringliteral">"INT1"</span>,<span class="stringliteral">"INT2"</span>);
-<a name="l01401"></a>01401       mean=cpl_table_get_column_mean(tmp_t1,<span class="stringliteral">"INT1"</span>);
-<a name="l01402"></a>01402       nrows=cpl_table_get_nrow(tmp_t1);
-<a name="l01403"></a>01403       prod=mean*nrows;
-<a name="l01404"></a>01404       *xcor+=prod;
-<a name="l01405"></a>01405    }
-<a name="l01406"></a>01406 
-<a name="l01407"></a>01407   cleanup:
-<a name="l01408"></a>01408    <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01409"></a>01409 }
-<a name="l01415"></a>01415 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01416"></a>01416 cpl_error_code
-<a name="l01417"></a>01417 sinfo_frameset_merge(cpl_frameset * set1, cpl_frameset* set2)
-<a name="l01418"></a>01418 {
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420    cpl_frame* frm_tmp=NULL;
-<a name="l01421"></a>01421    cpl_frame* frm_dup=NULL;
-<a name="l01422"></a>01422 
-<a name="l01423"></a>01423    passure(set1 != NULL, <span class="stringliteral">"Wrong input set"</span>);
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425    check_nomsg(frm_tmp = cpl_frameset_get_first(set2));
-<a name="l01426"></a>01426    <span class="keywordflow">while</span> (frm_tmp != NULL)
-<a name="l01427"></a>01427    {
-<a name="l01428"></a>01428       frm_dup=cpl_frame_duplicate(frm_tmp);
-<a name="l01429"></a>01429       cpl_frameset_insert(set1,frm_dup);
-<a name="l01430"></a>01430       frm_tmp = cpl_frameset_get_next(set2);
-<a name="l01431"></a>01431    }
-<a name="l01432"></a>01432 
-<a name="l01433"></a>01433   cleanup:
-<a name="l01434"></a>01434    <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01435"></a>01435 }
-<a name="l01436"></a>01436 
-<a name="l01437"></a>01437 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01445"></a>01445 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01446"></a>01446 
-<a name="l01447"></a>01447 cpl_error_code
-<a name="l01448"></a>01448 sinfo_extract_frames_group_type(<span class="keyword">const</span> cpl_frameset * <span class="keyword">set</span>,
-<a name="l01449"></a>01449                                 cpl_frameset** ext,
-<a name="l01450"></a>01450                                 cpl_frame_group type)
-<a name="l01451"></a>01451 {
-<a name="l01452"></a>01452    <span class="keyword">const</span> cpl_frame* frm_tmp=NULL;
-<a name="l01453"></a>01453    cpl_frame* frm_dup=NULL;
-<a name="l01454"></a>01454    cpl_frame_group g;
-<a name="l01455"></a>01455 
-<a name="l01456"></a>01456    check_nomsg(*ext = cpl_frameset_new());
-<a name="l01457"></a>01457    check_nomsg(frm_tmp = cpl_frameset_get_first_const(<span class="keyword">set</span>));
-<a name="l01458"></a>01458    <span class="keywordflow">while</span> (frm_tmp != NULL)
-<a name="l01459"></a>01459    {
-<a name="l01460"></a>01460       g=cpl_frame_get_group(frm_tmp);
-<a name="l01461"></a>01461       <span class="keywordflow">if</span>(g == type) {
-<a name="l01462"></a>01462          frm_dup=cpl_frame_duplicate(frm_tmp);
-<a name="l01463"></a>01463          cpl_frameset_insert(*ext,frm_dup);
-<a name="l01464"></a>01464          <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"group %d insert file %s "</span>,
-<a name="l01465"></a>01465                          type,cpl_frame_get_filename(frm_dup));
-<a name="l01466"></a>01466       }
-<a name="l01467"></a>01467       frm_tmp = cpl_frameset_get_next_const(<span class="keyword">set</span>);
-<a name="l01468"></a>01468    }
-<a name="l01469"></a>01469 
-<a name="l01470"></a>01470   cleanup:
-<a name="l01471"></a>01471    <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01472"></a>01472 }
-<a name="l01473"></a>01473 
-<a name="l01474"></a>01474 
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476 
-<a name="l01487"></a>01487 <span class="keywordtype">int</span>
-<a name="l01488"></a>01488 sinfo_get_pupil_shift(cpl_imagelist* iml,<span class="keyword">const</span> <span class="keywordtype">int</span> n,cpl_table** qclog_tbl)
-<a name="l01489"></a>01489 {
-<a name="l01490"></a>01490    cpl_size max_ima_x=0;
-<a name="l01491"></a>01491    cpl_size max_ima_y=0;
-<a name="l01492"></a>01492    <span class="keywordtype">int</span> nx=0;
-<a name="l01493"></a>01493    <span class="keywordtype">int</span> ny=0;
-<a name="l01494"></a>01494 
-<a name="l01495"></a>01495    <span class="keywordtype">double</span> xshift=0;
-<a name="l01496"></a>01496    <span class="keywordtype">double</span> yshift=0;
-<a name="l01497"></a>01497 
-<a name="l01498"></a>01498    <span class="keywordtype">double</span> max_ima_cx=0;
-<a name="l01499"></a>01499    <span class="keywordtype">double</span> max_ima_cy=0;
-<a name="l01500"></a>01500 
-<a name="l01501"></a>01501    cpl_image* img=NULL;
-<a name="l01502"></a>01502    cpl_image* img_dup=NULL;
-<a name="l01503"></a>01503 
-<a name="l01504"></a>01504    <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];
-<a name="l01505"></a>01505 
-<a name="l01506"></a>01506    img=cpl_imagelist_collapse_median_create(iml);
-<a name="l01507"></a>01507    nx=cpl_image_get_size_x(img);
-<a name="l01508"></a>01508    ny=cpl_image_get_size_y(img);
-<a name="l01509"></a>01509 
-<a name="l01510"></a>01510    img_dup=cpl_image_duplicate(img);
-<a name="l01511"></a>01511    sinfo_clean_nan(&img_dup);
-<a name="l01512"></a>01512    cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y);
-<a name="l01513"></a>01513    max_ima_cx=cpl_image_get_centroid_x_window(img_dup,1,1,nx,ny);
-<a name="l01514"></a>01514    max_ima_cy=cpl_image_get_centroid_y_window(img_dup,1,1,nx,ny);
-<a name="l01515"></a>01515 
-<a name="l01516"></a>01516    cpl_image_delete(img_dup);
-<a name="l01517"></a>01517 
-<a name="l01518"></a>01518 
-<a name="l01519"></a>01519    xshift=max_ima_cx-(double)nx/2;
-<a name="l01520"></a>01520    yshift=max_ima_cy-(double)ny/2;
-<a name="l01521"></a>01521 
-<a name="l01522"></a>01522    snprintf(key_name,<span class="keyword">sizeof</span>(key_name),<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC PUPIL"</span>,n,<span class="stringliteral">" SHIFTX"</span>);
-<a name="l01523"></a>01523    sinfo_qclog_add_double(*qclog_tbl,key_name,xshift,
-<a name="l01524"></a>01524                           <span class="stringliteral">"X shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>);
-<a name="l01525"></a>01525 
-<a name="l01526"></a>01526    snprintf(key_name,<span class="keyword">sizeof</span>(key_name),<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC PUPIL"</span>,n,<span class="stringliteral">" SHIFTY"</span>);
-<a name="l01527"></a>01527    sinfo_qclog_add_double(*qclog_tbl,key_name,yshift,
-<a name="l01528"></a>01528                           <span class="stringliteral">"Y shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>);
-<a name="l01529"></a>01529    cpl_image_delete(img);
-<a name="l01530"></a>01530 
-<a name="l01531"></a>01531    <span class="keywordflow">return</span> 0;
-<a name="l01532"></a>01532 }
-<a name="l01533"></a>01533 
-<a name="l01534"></a>01534 
-<a name="l01535"></a>01535 
-<a name="l01542"></a>01542 <span class="keywordtype">int</span> sinfo_get_strehl_type(cpl_frameset* sof)
-<a name="l01543"></a>01543 {
-<a name="l01544"></a>01544    <span class="keywordtype">int</span> strehl_sw=0;
-<a name="l01545"></a>01545    <span class="keywordtype">int</span> nobs=0;
-<a name="l01546"></a>01546    <span class="keywordtype">int</span> i=0;
-<a name="l01547"></a>01547    cpl_frameset* obs=NULL;
-<a name="l01548"></a>01548 
-<a name="l01549"></a>01549    cpl_frame* frame=NULL;
-<a name="l01550"></a>01550    <span class="keywordtype">float</span>* pix_scale=NULL;
-<a name="l01551"></a>01551    cpl_propertylist* plist=NULL;
-<a name="l01552"></a>01552 
-<a name="l01553"></a>01553    obs = cpl_frameset_new();
-<a name="l01554"></a>01554 
-<a name="l01555"></a>01555    sinfo_contains_frames_kind(sof,obs,PRO_OBS_PSF);
-<a name="l01556"></a>01556 
-<a name="l01557"></a>01557    nobs=cpl_frameset_get_size(obs);
-<a name="l01558"></a>01558    <span class="keywordflow">if</span> (nobs < 1) {
-<a name="l01559"></a>01559       sinfo_contains_frames_kind(sof,obs,PRO_OBS_STD);
-<a name="l01560"></a>01560       nobs=cpl_frameset_get_size(obs);
-<a name="l01561"></a>01561    }
-<a name="l01562"></a>01562 
-<a name="l01563"></a>01563    nobs=cpl_frameset_get_size(obs);
-<a name="l01564"></a>01564 
-<a name="l01565"></a>01565    <span class="keywordflow">if</span> (nobs < 1) {
-<a name="l01566"></a>01566       <span class="keywordflow">return</span> 0;
-<a name="l01567"></a>01567    } <span class="keywordflow">else</span> {
-<a name="l01568"></a>01568       pix_scale=cpl_calloc(nobs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01569"></a>01569       <span class="keywordflow">for</span>(i=0;i<nobs;i++) {
-<a name="l01570"></a>01570          frame=cpl_frameset_get_frame(obs,i);
-<a name="l01571"></a>01571          plist=cpl_propertylist_load(cpl_frame_get_filename(frame),0);
-<a name="l01572"></a>01572          pix_scale[i]=sinfo_pfits_get_pixscale(plist);
-<a name="l01573"></a>01573          cpl_propertylist_delete(plist);
-<a name="l01574"></a>01574       }
-<a name="l01575"></a>01575       <span class="keywordflow">if</span>(sinfo_pix_scale_isnot_const(pix_scale,nobs)) {
-<a name="l01576"></a>01576          strehl_sw=1;
-<a name="l01577"></a>01577       }
-<a name="l01578"></a>01578       cpl_free(pix_scale);
-<a name="l01579"></a>01579    }
-<a name="l01580"></a>01580    cpl_frameset_delete(obs);
-<a name="l01581"></a>01581 
-<a name="l01582"></a>01582    <span class="keywordflow">return</span> strehl_sw;
-<a name="l01583"></a>01583 
-<a name="l01584"></a>01584 }
-<a name="l01585"></a>01585 
-<a name="l01586"></a>01586 
-<a name="l01587"></a>01587 
-<a name="l01594"></a>01594 <span class="keywordtype">double</span> sinfo_get_wave_cent(<span class="keyword">const</span> <span class="keywordtype">char</span>* band)
-<a name="l01595"></a>01595 {
-<a name="l01596"></a>01596    <span class="keywordtype">double</span> lam=0.;
-<a name="l01597"></a>01597    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {
-<a name="l01598"></a>01598       lam=1.950;
-<a name="l01599"></a>01599    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {
-<a name="l01600"></a>01600       lam=2.175;
-<a name="l01601"></a>01601    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {
-<a name="l01602"></a>01602       lam=1.225;
-<a name="l01603"></a>01603    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {
-<a name="l01604"></a>01604       lam=1.675;
-<a name="l01605"></a>01605    }
-<a name="l01606"></a>01606    <span class="keywordflow">return</span> lam;
-<a name="l01607"></a>01607 
-<a name="l01608"></a>01608 }
-<a name="l01609"></a>01609 
-<a name="l01610"></a>01610 
-<a name="l01611"></a>01611 
-<a name="l01620"></a>01620 <span class="keywordtype">int</span> sinfo_pix_scale_isnot_const(<span class="keywordtype">float</span>* pix_scale, <span class="keyword">const</span> <span class="keywordtype">int</span> n) {
-<a name="l01621"></a>01621    <span class="keywordtype">int</span> i=0;
-<a name="l01622"></a>01622    <span class="keywordtype">float</span> eps=0.0001;
-<a name="l01623"></a>01623    <span class="keywordtype">float</span> ref=pix_scale[0];
-<a name="l01624"></a>01624 
-<a name="l01625"></a>01625    <span class="keywordflow">for</span>(i=1;i<n;i++) {
-<a name="l01626"></a>01626       <span class="keywordflow">if</span>(fabs(pix_scale[i]-ref) > eps) <span class="keywordflow">return</span> 1;
-<a name="l01627"></a>01627    }
-<a name="l01628"></a>01628    <span class="keywordflow">return</span> 0;
-<a name="l01629"></a>01629 }
-<a name="l01630"></a>01630 
-<a name="l01631"></a>01631 
-<a name="l01639"></a>01639 <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_get_pix_scale(<span class="keywordtype">float</span> ps) {
-<a name="l01640"></a>01640 
-<a name="l01641"></a>01641    <span class="keyword">const</span> <span class="keywordtype">char</span>* key_value;
-<a name="l01642"></a>01642    <span class="keywordtype">float</span> eps=0.0001;
-<a name="l01643"></a>01643 
-<a name="l01644"></a>01644    <span class="keywordflow">if</span>(fabs(ps - 0.025) < eps) {
-<a name="l01645"></a>01645       key_value=<span class="stringliteral">"0.025"</span>;
-<a name="l01646"></a>01646    }
-<a name="l01647"></a>01647    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 0.1) < eps) {
-<a name="l01648"></a>01648       key_value=<span class="stringliteral">"0.1"</span>;
-<a name="l01649"></a>01649    }
-<a name="l01650"></a>01650    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 0.25) < eps) {
-<a name="l01651"></a>01651       key_value=<span class="stringliteral">"0.25"</span>;
-<a name="l01652"></a>01652    }
-<a name="l01653"></a>01653    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 1.0) < eps) {
-<a name="l01654"></a>01654       key_value=<span class="stringliteral">"pupil"</span>;
-<a name="l01655"></a>01655    } <span class="keywordflow">else</span> {
-<a name="l01656"></a>01656       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"ps=%f. Failed to set pixel scale"</span>,ps);
-<a name="l01657"></a>01657       <span class="keywordflow">return</span> NULL;
-<a name="l01658"></a>01658    }
-<a name="l01659"></a>01659 
-<a name="l01660"></a>01660    <span class="keywordflow">return</span> key_value;
-<a name="l01661"></a>01661 }
-<a name="l01662"></a>01662 
-<a name="l01663"></a>01663 
-<a name="l01679"></a>01679 <span class="keywordtype">int</span>  sinfo_get_clean_mean_window(cpl_image* img,
-<a name="l01680"></a>01680                                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,
-<a name="l01681"></a>01681                                  <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip,
-<a name="l01682"></a>01682                                  <span class="keywordtype">double</span>* local_clean_mean,
-<a name="l01683"></a>01683                                  <span class="keywordtype">double</span>* clean_stdev)
-<a name="l01684"></a>01684 {
-<a name="l01685"></a>01685 
-<a name="l01686"></a>01686    <span class="keywordtype">double</span> mean=0;
-<a name="l01687"></a>01687    <span class="keywordtype">double</span> stdev=0;
-<a name="l01688"></a>01688    <span class="keywordtype">double</span> threshold=0;
-<a name="l01689"></a>01689    <span class="keywordtype">double</span> lo_cut=0;
-<a name="l01690"></a>01690    <span class="keywordtype">double</span> hi_cut=0;
-<a name="l01691"></a>01691    cpl_mask* mask=NULL;
-<a name="l01692"></a>01692    cpl_image* tmp=NULL;
-<a name="l01693"></a>01693    cpl_stats* stats=NULL;
-<a name="l01694"></a>01694    <span class="keywordtype">int</span> i=0;
-<a name="l01695"></a>01695 
-<a name="l01696"></a>01696    tmp=cpl_image_extract(img,llx,lly,urx,ury);
-<a name="l01697"></a>01697    cpl_image_accept_all(tmp);
-<a name="l01698"></a>01698    <span class="keywordflow">for</span>(i=0;i<nclip;i++) {
-<a name="l01699"></a>01699 
-<a name="l01700"></a>01700 
-<a name="l01701"></a>01701       cpl_stats_delete(stats);
-<a name="l01702"></a>01702       stats = cpl_stats_new_from_image(tmp, CPL_STATS_MEAN | CPL_STATS_STDEV);
-<a name="l01703"></a>01703       mean = cpl_stats_get_mean(stats);
-<a name="l01704"></a>01704       stdev = cpl_stats_get_stdev(stats);
-<a name="l01705"></a>01705 
-<a name="l01706"></a>01706       threshold=kappa*stdev;
-<a name="l01707"></a>01707       lo_cut=mean-threshold;
-<a name="l01708"></a>01708       hi_cut=mean+threshold;
-<a name="l01709"></a>01709       cpl_image_accept_all(tmp);
-<a name="l01710"></a>01710       mask=cpl_mask_threshold_image_create(tmp,lo_cut,hi_cut);
-<a name="l01711"></a>01711 
-<a name="l01712"></a>01712       cpl_mask_not(mask);
-<a name="l01713"></a>01713       cpl_image_reject_from_mask(tmp,mask);
-<a name="l01714"></a>01714       cpl_mask_delete(mask);
-<a name="l01715"></a>01715 
-<a name="l01716"></a>01716 
-<a name="l01717"></a>01717    }
-<a name="l01718"></a>01718    *local_clean_mean=mean;
-<a name="l01719"></a>01719    *clean_stdev=stdev;
-<a name="l01720"></a>01720    cpl_image_delete(tmp);
-<a name="l01721"></a>01721    cpl_stats_delete(stats);
-<a name="l01722"></a>01722 
-<a name="l01723"></a>01723 
-<a name="l01724"></a>01724    <span class="keywordflow">return</span> 0;
-<a name="l01725"></a>01725 
-<a name="l01726"></a>01726 
-<a name="l01727"></a>01727 }
-<a name="l01733"></a>01733 <span class="keywordtype">int</span> sinfo_check_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val) {
-<a name="l01734"></a>01734    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01735"></a>01735       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error before %d"</span>,val);
-<a name="l01736"></a>01736       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l01737"></a>01737       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_where());
-<a name="l01738"></a>01738       <span class="keywordflow">return</span> -1;
-<a name="l01739"></a>01739    }
-<a name="l01740"></a>01740    <span class="keywordflow">return</span> 0;
-<a name="l01741"></a>01741 }
-<a name="l01742"></a>01742 
-<a name="l01749"></a>01749 <span class="keywordtype">int</span>
-<a name="l01750"></a>01750 sinfo_clean_nan(cpl_image** im)
-<a name="l01751"></a>01751 {
-<a name="l01752"></a>01752    <span class="keywordtype">int</span> i=0;
-<a name="l01753"></a>01753    <span class="keywordtype">int</span> j=0;
-<a name="l01754"></a>01754    <span class="keywordtype">int</span> nx=0;
-<a name="l01755"></a>01755    <span class="keywordtype">int</span> ny=0;
-<a name="l01756"></a>01756    <span class="keywordtype">float</span>* data=NULL;
-<a name="l01757"></a>01757 
-<a name="l01758"></a>01758    nx=cpl_image_get_size_x(*im);
-<a name="l01759"></a>01759    ny=cpl_image_get_size_y(*im);
-<a name="l01760"></a>01760    data=cpl_image_get_data_float(*im);
-<a name="l01761"></a>01761 
-<a name="l01762"></a>01762    <span class="keywordflow">for</span>(j=0;j<ny;j++) {
-<a name="l01763"></a>01763       <span class="keywordflow">for</span>(i=0;i<nx;i++) {
-<a name="l01764"></a>01764          <span class="keywordflow">if</span>(isnan(data[j*nx+i]) != 0) {
-<a name="l01765"></a>01765             data[j*nx+i] = 0;
-<a name="l01766"></a>01766          }
-<a name="l01767"></a>01767       }
-<a name="l01768"></a>01768    }
-<a name="l01769"></a>01769    <span class="keywordflow">return</span> 0;
-<a name="l01770"></a>01770 }
-<a name="l01771"></a>01771 
-<a name="l01781"></a>01781 <span class="keywordtype">void</span>
-<a name="l01782"></a>01782 sinfo_add_pro_fits_key(cpl_propertylist * plist,
-<a name="l01783"></a>01783                        <span class="keywordtype">char</span>* pro_catg,
-<a name="l01784"></a>01784                        <span class="keywordtype">char</span>* file_name,
-<a name="l01785"></a>01785                        <span class="keywordtype">char</span>* out_name)
-<a name="l01786"></a>01786 {
-<a name="l01787"></a>01787 
-<a name="l01788"></a>01788    <span class="keywordtype">char</span>* date=NULL;
-<a name="l01789"></a>01789    date     = sinfo_get_datetime_iso8601() ;
-<a name="l01790"></a>01790 
-<a name="l01791"></a>01791    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01792"></a>01792                                         KEY_NAME_PIPEFILE, out_name) ;
-<a name="l01793"></a>01793    cpl_propertylist_set_comment(plist, KEY_NAME_PIPEFILE,KEY_HELP_PIPEFILE) ;
-<a name="l01794"></a>01794 
-<a name="l01795"></a>01795    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01796"></a>01796                                         KEY_NAME_HPRO_DID, KEY_VALUE_HPRO_DID) ;
-<a name="l01797"></a>01797    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DID,KEY_HELP_HPRO_DID) ;
-<a name="l01798"></a>01798 
-<a name="l01799"></a>01799    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01800"></a>01800                                         KEY_NAME_HPRO_TYPE, <span class="stringliteral">"REDUCED"</span>) ;
-<a name="l01801"></a>01801    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_TYPE, KEY_HELP_HPRO_TYPE) ;
-<a name="l01802"></a>01802 
-<a name="l01803"></a>01803    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01804"></a>01804                                         KEY_NAME_HPRO_CATG, pro_catg) ;
-<a name="l01805"></a>01805    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_CATG,  KEY_HELP_HPRO_CATG);
-<a name="l01806"></a>01806 
-<a name="l01807"></a>01807    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01808"></a>01808                                         KEY_NAME_HPRO_STATUS, <span class="stringliteral">"OK"</span>) ;
-<a name="l01809"></a>01809    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_STATUS,KEY_HELP_HPRO_CATG);
-<a name="l01810"></a>01810 
-<a name="l01811"></a>01811    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01812"></a>01812                                         KEY_NAME_HPRO_DATE, date) ;
-<a name="l01813"></a>01813    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DATE, KEY_HELP_HPRO_DATE);
-<a name="l01814"></a>01814 
-<a name="l01815"></a>01815    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01816"></a>01816                                         KEY_NAME_HPRO_RECID, file_name) ;
-<a name="l01817"></a>01817    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_RECID,KEY_HELP_HPRO_RECID);
-<a name="l01818"></a>01818 
-<a name="l01819"></a>01819    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,
-<a name="l01820"></a>01820                                         KEY_NAME_HPRO_DRSID, PACKAGE_VERSION);
-<a name="l01821"></a>01821    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DRSID,KEY_HELP_HPRO_DRSID);
-<a name="l01822"></a>01822 
-<a name="l01823"></a>01823 
-<a name="l01824"></a>01824 }
-<a name="l01825"></a>01825 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01832"></a>01832 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01833"></a>01833 <span class="keywordtype">int</span>  sinfo_compare_tags(
-<a name="l01834"></a>01834    <span class="keyword">const</span> cpl_frame   *   frame1,
-<a name="l01835"></a>01835    <span class="keyword">const</span> cpl_frame   *   frame2)
-<a name="l01836"></a>01836 {
-<a name="l01837"></a>01837    <span class="keywordtype">char</span>            *   v1 ;
-<a name="l01838"></a>01838    <span class="keywordtype">char</span>            *   v2 ;
-<a name="l01839"></a>01839 
-<a name="l01840"></a>01840    <span class="comment">/* Test entries */</span>
-<a name="l01841"></a>01841    <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01842"></a>01842 
-<a name="l01843"></a>01843    <span class="comment">/* Get the tags */</span>
-<a name="l01844"></a>01844    <span class="keywordflow">if</span> ((v1 = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame1)) == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01845"></a>01845    <span class="keywordflow">if</span> ((v2 = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame2)) == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01846"></a>01846 
-<a name="l01847"></a>01847    <span class="comment">/* Compare the tags */</span>
-<a name="l01848"></a>01848    <span class="keywordflow">if</span> (strcmp(v1, v2)) <span class="keywordflow">return</span> 0 ;
-<a name="l01849"></a>01849    <span class="keywordflow">else</span> <span class="keywordflow">return</span> 1 ;
-<a name="l01850"></a>01850 }
-<a name="l01851"></a>01851 
-<a name="l01860"></a>01860 <span class="keywordtype">int</span> sinfo_extract_raw_pinhole_frames(cpl_frameset * sof, cpl_frameset** raw)
-<a name="l01861"></a>01861 {
-<a name="l01862"></a>01862    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l01863"></a>01863    <span class="keywordtype">char</span>* name=NULL;
-<a name="l01864"></a>01864    cpl_frame* frame   = NULL;
-<a name="l01865"></a>01865    <span class="keywordtype">int</span> nsof=0;
-<a name="l01866"></a>01866    <span class="keywordtype">int</span> i=0;
-<a name="l01867"></a>01867    nsof = cpl_frameset_get_size(sof);
-<a name="l01868"></a>01868    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l01869"></a>01869       frame = cpl_frameset_get_frame(sof,i);
-<a name="l01870"></a>01870       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l01871"></a>01871       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l01872"></a>01872          <span class="comment">/* to go on the file must exist */</span>
-<a name="l01873"></a>01873          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l01874"></a>01874             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l01875"></a>01875             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l01876"></a>01876             <span class="keywordflow">if</span>(sinfo_frame_is_pinhole_lamp(tag) == 1) {
-<a name="l01877"></a>01877                cpl_frameset_insert(*raw,frame);
-<a name="l01878"></a>01878             }
-<a name="l01879"></a>01879          }
-<a name="l01880"></a>01880       }
-<a name="l01881"></a>01881    }
-<a name="l01882"></a>01882    <span class="keywordflow">return</span> 0;
-<a name="l01883"></a>01883 }
-<a name="l01884"></a>01884 
-<a name="l01885"></a>01885 
-<a name="l01886"></a>01886 <span class="keywordtype">int</span> sinfo_get_ins_set(<span class="keywordtype">char</span>* band,<span class="keywordtype">int</span>* ins_set){
-<a name="l01887"></a>01887 
-<a name="l01888"></a>01888    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {
-<a name="l01889"></a>01889       *ins_set = 0;
-<a name="l01890"></a>01890    }
-<a name="l01891"></a>01891    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {
-<a name="l01892"></a>01892       *ins_set = 1;
-<a name="l01893"></a>01893    }
-<a name="l01894"></a>01894    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {
-<a name="l01895"></a>01895       *ins_set = 2;
-<a name="l01896"></a>01896    }
-<a name="l01897"></a>01897    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {
-<a name="l01898"></a>01898       *ins_set = 3;
-<a name="l01899"></a>01899    }
-<a name="l01900"></a>01900    <span class="keywordflow">return</span> 0;
-<a name="l01901"></a>01901 
-<a name="l01902"></a>01902 
-<a name="l01903"></a>01903 }
-<a name="l01904"></a>01904 <span class="keywordtype">int</span> sinfo_extract_raw_frames(cpl_frameset * sof, cpl_frameset** raw)
-<a name="l01905"></a>01905 {
-<a name="l01906"></a>01906    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l01907"></a>01907    <span class="keywordtype">char</span>* name=NULL;
-<a name="l01908"></a>01908    cpl_frame* frame   = NULL;
-<a name="l01909"></a>01909    <span class="keywordtype">int</span> nsof=0;
-<a name="l01910"></a>01910    <span class="keywordtype">int</span> i=0;
-<a name="l01911"></a>01911    nsof = cpl_frameset_get_size(sof);
-<a name="l01912"></a>01912    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l01913"></a>01913       frame = cpl_frameset_get_frame(sof,i);
-<a name="l01914"></a>01914       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l01915"></a>01915       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l01916"></a>01916          <span class="comment">/* to go on the file must exist */</span>
-<a name="l01917"></a>01917          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l01918"></a>01918             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l01919"></a>01919             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l01920"></a>01920             <span class="keywordflow">if</span>(sinfo_frame_is_raw(tag) == 1) {
-<a name="l01921"></a>01921                cpl_frameset_insert(*raw,frame);
-<a name="l01922"></a>01922             }
-<a name="l01923"></a>01923          }
-<a name="l01924"></a>01924       }
-<a name="l01925"></a>01925    }
-<a name="l01926"></a>01926    <span class="keywordflow">return</span> 0;
-<a name="l01927"></a>01927 }
-<a name="l01928"></a>01928 
-<a name="l01929"></a>01929 <span class="keywordtype">int</span> sinfo_remove_qc_frames(cpl_frameset* sof,cpl_frameset** raw)
-<a name="l01930"></a>01930 {
-<a name="l01931"></a>01931    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l01932"></a>01932    <span class="keywordtype">char</span>* name=NULL;
-<a name="l01933"></a>01933    cpl_frame* frame   = NULL;
-<a name="l01934"></a>01934    <span class="keywordtype">int</span> nsof=0;
-<a name="l01935"></a>01935    <span class="keywordtype">int</span> i=0;
-<a name="l01936"></a>01936 
-<a name="l01937"></a>01937    nsof = cpl_frameset_get_size(sof);
-<a name="l01938"></a>01938    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l01939"></a>01939       frame = cpl_frameset_get_frame(sof,i);
-<a name="l01940"></a>01940       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l01941"></a>01941       <span class="comment">/* sinfo_msg("name=%s",name); */</span>
-<a name="l01942"></a>01942       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l01943"></a>01943          <span class="comment">/* sinfo_msg("\t exist "); */</span>
-<a name="l01944"></a>01944          <span class="comment">/* to go on the file must exist */</span>
-<a name="l01945"></a>01945          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l01946"></a>01946             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l01947"></a>01947             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l01948"></a>01948             <span class="comment">/* sinfo_msg("\t tag %s\n ",tag); */</span>
-<a name="l01949"></a>01949             <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"QC"</span>) != NULL) {
-<a name="l01950"></a>01950                <span class="comment">/* sinfo_msg("remove frame %s\n",name); */</span>
-<a name="l01951"></a>01951                cpl_frameset_erase(*raw,tag);
-<a name="l01952"></a>01952             }
-<a name="l01953"></a>01953          }
-<a name="l01954"></a>01954       } <span class="keywordflow">else</span> {
-<a name="l01955"></a>01955          <span class="comment">/* sinfo_msg("remove frame\n"); */</span>
-<a name="l01956"></a>01956          cpl_frameset_erase_frame(*raw,frame);
-<a name="l01957"></a>01957       }
-<a name="l01958"></a>01958    }
-<a name="l01959"></a>01959    <span class="keywordflow">return</span> 0;
-<a name="l01960"></a>01960 
-<a name="l01961"></a>01961 }
-<a name="l01962"></a>01962 
-<a name="l01963"></a>01963 
-<a name="l01964"></a>01964 <span class="keywordtype">int</span> sinfo_contains_frames_kind(cpl_frameset * sof,
-<a name="l01965"></a>01965                                cpl_frameset* raw,
-<a name="l01966"></a>01966                                <span class="keyword">const</span> <span class="keywordtype">char</span>*         type)
-<a name="l01967"></a>01967 {
-<a name="l01968"></a>01968    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l01969"></a>01969    <span class="keywordtype">char</span>* name=NULL;
-<a name="l01970"></a>01970    cpl_frame* frame   = NULL;
-<a name="l01971"></a>01971    cpl_frame* frame_dup   = NULL;
-<a name="l01972"></a>01972 
-<a name="l01973"></a>01973    <span class="keywordtype">int</span> nsof=0;
-<a name="l01974"></a>01974    <span class="keywordtype">int</span> i=0;
-<a name="l01975"></a>01975    nsof = cpl_frameset_get_size(sof);
-<a name="l01976"></a>01976    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l01977"></a>01977      frame = cpl_frameset_get_frame(sof,i);
-<a name="l01978"></a>01978       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l01979"></a>01979       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l01980"></a>01980          <span class="comment">/* to go on the file must exist */</span>
-<a name="l01981"></a>01981          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l01982"></a>01982             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l01983"></a>01983             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l01984"></a>01984             <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l01985"></a>01985             <span class="keywordflow">if</span>(strstr(tag,type) != NULL) {
-<a name="l01986"></a>01986                <span class="comment">/* sinfo_msg("Match name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l01987"></a>01987                frame_dup = cpl_frame_duplicate(frame);
-<a name="l01988"></a>01988                cpl_frameset_insert(raw,frame_dup);
-<a name="l01989"></a>01989                <span class="comment">/* sinfo_msg("inserted\n"); */</span>
-<a name="l01990"></a>01990             }
-<a name="l01991"></a>01991          }
-<a name="l01992"></a>01992       }
-<a name="l01993"></a>01993    }
-<a name="l01994"></a>01994    <span class="keywordflow">return</span> 0;
-<a name="l01995"></a>01995 }
-<a name="l01996"></a>01996 
-<a name="l01997"></a>01997 
-<a name="l01998"></a>01998 
-<a name="l01999"></a>01999 
-<a name="l02000"></a>02000 <span class="keywordtype">int</span> sinfo_is_fibres_on_off(cpl_frameset * sof,
-<a name="l02001"></a>02001                            cpl_frameset* raw)
-<a name="l02002"></a>02002 {
-<a name="l02003"></a>02003    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02004"></a>02004    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02005"></a>02005    cpl_frame* frame   = NULL;
-<a name="l02006"></a>02006    cpl_frame* frame_dup   = NULL;
-<a name="l02007"></a>02007 
-<a name="l02008"></a>02008    <span class="keywordtype">int</span> nsof=0;
-<a name="l02009"></a>02009    <span class="keywordtype">int</span> i=0;
-<a name="l02010"></a>02010    nsof = cpl_frameset_get_size(sof);
-<a name="l02011"></a>02011    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02012"></a>02012       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02013"></a>02013       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02014"></a>02014       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l02015"></a>02015          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02016"></a>02016          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02017"></a>02017             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02018"></a>02018             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02019"></a>02019             <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l02020"></a>02020             <span class="keywordflow">if</span>( strcmp(tag,PRO_FIBRE_NS_STACKED ) == 0) {
-<a name="l02021"></a>02021                <span class="comment">/* sinfo_msg("Match name=%s tag=%s type=%s\n",name,tag); */</span>
-<a name="l02022"></a>02022                frame_dup = cpl_frame_duplicate(frame);
-<a name="l02023"></a>02023                cpl_frameset_insert(raw,frame_dup);
-<a name="l02024"></a>02024                <span class="comment">/* sinfo_msg("inserted\n"); */</span>
-<a name="l02025"></a>02025             }
-<a name="l02026"></a>02026          }
-<a name="l02027"></a>02027       }
-<a name="l02028"></a>02028    }
-<a name="l02029"></a>02029    <span class="keywordflow">return</span> 0;
-<a name="l02030"></a>02030 }
-<a name="l02031"></a>02031 
-<a name="l02032"></a>02032 
-<a name="l02033"></a>02033 <span class="keywordtype">int</span> sinfo_contains_frames_type(cpl_frameset * sof,
-<a name="l02034"></a>02034                                cpl_frameset** raw,
-<a name="l02035"></a>02035                                <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)
-<a name="l02036"></a>02036 {
-<a name="l02037"></a>02037    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02038"></a>02038    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02039"></a>02039    cpl_frame* frame   = NULL;
-<a name="l02040"></a>02040    cpl_frame* frame_dup   = NULL;
-<a name="l02041"></a>02041    <span class="keywordtype">int</span> nsof=0;
-<a name="l02042"></a>02042    <span class="keywordtype">int</span> i=0;
-<a name="l02043"></a>02043    nsof = cpl_frameset_get_size(sof);
-<a name="l02044"></a>02044    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02045"></a>02045       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02046"></a>02046       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02047"></a>02047       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l02048"></a>02048          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02049"></a>02049          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02050"></a>02050             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02051"></a>02051             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02052"></a>02052             <span class="keywordflow">if</span>(strstr(tag,type) != NULL) {
-<a name="l02053"></a>02053                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l02054"></a>02054                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02055"></a>02055                cpl_frameset_insert(*raw,frame_dup);
-<a name="l02056"></a>02056             }
-<a name="l02057"></a>02057          }
-<a name="l02058"></a>02058       }
-<a name="l02059"></a>02059    }
-<a name="l02060"></a>02060    <span class="keywordflow">return</span> 0;
-<a name="l02061"></a>02061 }
-<a name="l02062"></a>02062 
-<a name="l02063"></a>02063 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type2(cpl_frameset * sof,
-<a name="l02064"></a>02064                                    cpl_frameset** raw,
-<a name="l02065"></a>02065                                    <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)
-<a name="l02066"></a>02066 {
-<a name="l02067"></a>02067 
-<a name="l02068"></a>02068    cpl_frame* frame=NULL;
-<a name="l02069"></a>02069    cpl_frame* frame_dup   = NULL;
-<a name="l02070"></a>02070    frame = cpl_frameset_find(sof,type);
-<a name="l02071"></a>02071    <span class="keywordflow">while</span>(frame) {
-<a name="l02072"></a>02072       frame_dup=cpl_frame_duplicate(frame);
-<a name="l02073"></a>02073       cpl_frameset_insert(*raw,frame_dup);
-<a name="l02074"></a>02074       frame = cpl_frameset_find(sof,NULL);
-<a name="l02075"></a>02075    }
-<a name="l02076"></a>02076    <span class="keywordflow">return</span> 0;
-<a name="l02077"></a>02077 
-<a name="l02078"></a>02078 }
-<a name="l02079"></a>02079 
-<a name="l02080"></a>02080 
-<a name="l02081"></a>02081 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type1(cpl_frameset * sof,
-<a name="l02082"></a>02082                                    cpl_frameset* raw,
-<a name="l02083"></a>02083                                    <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)
-<a name="l02084"></a>02084 {
-<a name="l02085"></a>02085 
-<a name="l02086"></a>02086    cpl_frame* frame=NULL;
-<a name="l02087"></a>02087    cpl_frame* frame_dup   = NULL;
-<a name="l02088"></a>02088    frame = cpl_frameset_find(sof,type);
-<a name="l02089"></a>02089    <span class="keywordflow">while</span>(frame) {
-<a name="l02090"></a>02090       frame_dup=cpl_frame_duplicate(frame);
-<a name="l02091"></a>02091       cpl_frameset_insert(raw,frame_dup);
-<a name="l02092"></a>02092       frame = cpl_frameset_find(sof,NULL);
-<a name="l02093"></a>02093    }
-<a name="l02094"></a>02094    <span class="keywordflow">return</span> 0;
-<a name="l02095"></a>02095 
-<a name="l02096"></a>02096 }
-<a name="l02097"></a>02097 
-<a name="l02098"></a>02098 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type(cpl_frameset * sof,
-<a name="l02099"></a>02099                                   cpl_frameset** raw,
-<a name="l02100"></a>02100                                   <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)
-<a name="l02101"></a>02101 {
-<a name="l02102"></a>02102    <span class="keywordtype">char</span> tag[FILE_NAME_SZ];
-<a name="l02103"></a>02103    <span class="keywordtype">char</span> name[FILE_NAME_SZ];
-<a name="l02104"></a>02104    cpl_frame* frame   = NULL;
-<a name="l02105"></a>02105    cpl_frame* frame_dup   = NULL;
-<a name="l02106"></a>02106    <span class="keywordtype">int</span> nsof=0;
-<a name="l02107"></a>02107    <span class="keywordtype">int</span> i=0;
-<a name="l02108"></a>02108    nsof = cpl_frameset_get_size(sof);
-<a name="l02109"></a>02109    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02110"></a>02110       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02111"></a>02111       strcpy(name, cpl_frame_get_filename(frame));
-<a name="l02112"></a>02112       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l02113"></a>02113          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02114"></a>02114          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02115"></a>02115             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02116"></a>02116             strcpy(tag,cpl_frame_get_tag(frame));
-<a name="l02117"></a>02117             <span class="keywordflow">if</span>(strcmp(tag,type) == 0) {
-<a name="l02118"></a>02118                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l02119"></a>02119                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02120"></a>02120 
-<a name="l02121"></a>02121                cpl_frameset_insert(*raw,frame_dup);
-<a name="l02122"></a>02122             }
-<a name="l02123"></a>02123          }
-<a name="l02124"></a>02124       }
-<a name="l02125"></a>02125    }
-<a name="l02126"></a>02126    <span class="keywordflow">return</span> 0;
-<a name="l02127"></a>02127 }
-<a name="l02128"></a>02128 
-<a name="l02129"></a>02129 <span class="keywordtype">int</span> sinfo_extract_frames_type(cpl_frameset * sof,
-<a name="l02130"></a>02130                               cpl_frameset * raw,
-<a name="l02131"></a>02131                               <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)
-<a name="l02132"></a>02132 {
-<a name="l02133"></a>02133    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02134"></a>02134    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02135"></a>02135    cpl_frame* frame   = NULL;
-<a name="l02136"></a>02136    cpl_frame* frame_dup   = NULL;
-<a name="l02137"></a>02137    <span class="keywordtype">int</span> nsof=0;
-<a name="l02138"></a>02138    <span class="keywordtype">int</span> i=0;
-<a name="l02139"></a>02139    nsof = cpl_frameset_get_size(sof);
-<a name="l02140"></a>02140    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02141"></a>02141       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02142"></a>02142       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02143"></a>02143       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {
-<a name="l02144"></a>02144          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02145"></a>02145          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02146"></a>02146             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02147"></a>02147             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02148"></a>02148             <span class="keywordflow">if</span>(strcmp(tag,type) == 0) {
-<a name="l02149"></a>02149                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span>
-<a name="l02150"></a>02150                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02151"></a>02151                cpl_frameset_insert(raw,frame_dup);
-<a name="l02152"></a>02152             }
-<a name="l02153"></a>02153          }
-<a name="l02154"></a>02154       }
-<a name="l02155"></a>02155    }
-<a name="l02156"></a>02156    <span class="keywordflow">return</span> 0;
-<a name="l02157"></a>02157 }
-<a name="l02158"></a>02158 
-<a name="l02159"></a>02159 
-<a name="l02160"></a>02160 <span class="keywordtype">int</span> sinfo_extract_obj_frames(cpl_frameset * sof, cpl_frameset* obj)
-<a name="l02161"></a>02161 {
-<a name="l02162"></a>02162    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02163"></a>02163    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02164"></a>02164    cpl_frame* frame   = NULL;
-<a name="l02165"></a>02165    cpl_frame* frame_dup   = NULL;
-<a name="l02166"></a>02166 
-<a name="l02167"></a>02167    <span class="keywordtype">int</span> nsof=0;
-<a name="l02168"></a>02168    <span class="keywordtype">int</span> i=0;
-<a name="l02169"></a>02169    nsof = cpl_frameset_get_size(sof);
-<a name="l02170"></a>02170    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02171"></a>02171       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02172"></a>02172       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02173"></a>02173       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02174"></a>02174          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02175"></a>02175          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02176"></a>02176             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02177"></a>02177             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02178"></a>02178             <span class="keywordflow">if</span>(sinfo_tag_is_obj(tag) == 1) {
-<a name="l02179"></a>02179                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02180"></a>02180                cpl_frameset_insert(obj,frame_dup);
-<a name="l02181"></a>02181             }
-<a name="l02182"></a>02182          }
-<a name="l02183"></a>02183       }
-<a name="l02184"></a>02184    }
-<a name="l02185"></a>02185 
-<a name="l02186"></a>02186    <span class="keywordflow">return</span> 0;
-<a name="l02187"></a>02187 }
-<a name="l02188"></a>02188 
-<a name="l02189"></a>02189 
-<a name="l02190"></a>02190 <span class="keywordtype">int</span> sinfo_extract_obj_products(cpl_frameset * sof, cpl_frameset* obj)
-<a name="l02191"></a>02191 {
-<a name="l02192"></a>02192    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02193"></a>02193    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02194"></a>02194    cpl_frame* frame   = NULL;
-<a name="l02195"></a>02195    cpl_frame* frame_dup   = NULL;
-<a name="l02196"></a>02196 
-<a name="l02197"></a>02197    <span class="keywordtype">int</span> nsof=0;
-<a name="l02198"></a>02198    <span class="keywordtype">int</span> i=0;
-<a name="l02199"></a>02199    nsof = cpl_frameset_get_size(sof);
-<a name="l02200"></a>02200    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02201"></a>02201       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02202"></a>02202       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02203"></a>02203       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02204"></a>02204          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02205"></a>02205          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02206"></a>02206             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02207"></a>02207             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02208"></a>02208             <span class="keywordflow">if</span>(sinfo_tag_is_objpro(tag) == 1) {
-<a name="l02209"></a>02209                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02210"></a>02210                cpl_frameset_insert(obj,frame_dup);
-<a name="l02211"></a>02211             }
-<a name="l02212"></a>02212          }
-<a name="l02213"></a>02213       }
-<a name="l02214"></a>02214    }
-<a name="l02215"></a>02215 
-<a name="l02216"></a>02216    <span class="keywordflow">return</span> 0;
-<a name="l02217"></a>02217 }
-<a name="l02218"></a>02218 
-<a name="l02219"></a>02219 <span class="keywordtype">int</span> sinfo_extract_on_frames(cpl_frameset * sof, cpl_frameset* on)
-<a name="l02220"></a>02220 {
-<a name="l02221"></a>02221    cpl_frame* frame   = NULL;
-<a name="l02222"></a>02222    cpl_frame* frame_dup   = NULL;
-<a name="l02223"></a>02223 
-<a name="l02224"></a>02224    <span class="keywordtype">int</span> nsof=0;
-<a name="l02225"></a>02225    <span class="keywordtype">int</span> i=0;
-<a name="l02226"></a>02226    nsof = cpl_frameset_get_size(sof);
-<a name="l02227"></a>02227    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02228"></a>02228       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02229"></a>02229       <span class="keywordflow">if</span>(sinfo_frame_is_on(frame) ==1) {
-<a name="l02230"></a>02230          frame_dup=cpl_frame_duplicate(frame);
-<a name="l02231"></a>02231          cpl_frameset_insert(on,frame_dup);
-<a name="l02232"></a>02232       }
-<a name="l02233"></a>02233    }
-<a name="l02234"></a>02234 
-<a name="l02235"></a>02235    <span class="keywordflow">return</span> 0;
-<a name="l02236"></a>02236 }
-<a name="l02237"></a>02237 
-<a name="l02238"></a>02238 <span class="keywordtype">int</span> sinfo_extract_sky_frames(cpl_frameset * sof, cpl_frameset* sky)
-<a name="l02239"></a>02239 {
-<a name="l02240"></a>02240    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02241"></a>02241    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02242"></a>02242    cpl_frame* frame   = NULL;
-<a name="l02243"></a>02243    cpl_frame* frame_dup   = NULL;
-<a name="l02244"></a>02244    <span class="keywordtype">int</span> nsof=0;
-<a name="l02245"></a>02245    <span class="keywordtype">int</span> i=0;
-<a name="l02246"></a>02246    nsof = cpl_frameset_get_size(sof);
-<a name="l02247"></a>02247    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02248"></a>02248       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02249"></a>02249       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02250"></a>02250       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02251"></a>02251          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02252"></a>02252          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02253"></a>02253             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02254"></a>02254             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02255"></a>02255             <span class="keywordflow">if</span>(sinfo_tag_is_sky(tag) == 1) {
-<a name="l02256"></a>02256                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02257"></a>02257                cpl_frameset_insert(sky,frame_dup);
-<a name="l02258"></a>02258             }
-<a name="l02259"></a>02259          }
-<a name="l02260"></a>02260       }
-<a name="l02261"></a>02261    }
-<a name="l02262"></a>02262 
-<a name="l02263"></a>02263    <span class="keywordflow">return</span> 0;
-<a name="l02264"></a>02264 }
-<a name="l02265"></a>02265 
-<a name="l02266"></a>02266 
-<a name="l02267"></a>02267 
-<a name="l02268"></a>02268 <span class="keywordtype">int</span> sinfo_extract_off_frames(cpl_frameset * sof, cpl_frameset* off)
-<a name="l02269"></a>02269 {
-<a name="l02270"></a>02270    cpl_frame* frame   = NULL;
-<a name="l02271"></a>02271    cpl_frame* frame_dup   = NULL;
-<a name="l02272"></a>02272    <span class="keywordtype">int</span> nsof=0;
-<a name="l02273"></a>02273    <span class="keywordtype">int</span> i=0;
-<a name="l02274"></a>02274    nsof = cpl_frameset_get_size(sof);
-<a name="l02275"></a>02275    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02276"></a>02276       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02277"></a>02277       <span class="keywordflow">if</span>(sinfo_frame_is_on(frame)) {
-<a name="l02278"></a>02278          frame_dup=cpl_frame_duplicate(frame);
-<a name="l02279"></a>02279          cpl_frameset_insert(off,frame_dup);
-<a name="l02280"></a>02280       }
-<a name="l02281"></a>02281    }
-<a name="l02282"></a>02282 
-<a name="l02283"></a>02283    <span class="keywordflow">return</span> 0;
-<a name="l02284"></a>02284 }
-<a name="l02285"></a>02285 
-<a name="l02286"></a>02286 <span class="keywordtype">int</span> sinfo_extract_mst_frames(cpl_frameset * sof, cpl_frameset* cdb)
-<a name="l02287"></a>02287 {
-<a name="l02288"></a>02288    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02289"></a>02289    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02290"></a>02290    cpl_frame* frame   = NULL;
-<a name="l02291"></a>02291    cpl_frame* frame_dup   = NULL;
-<a name="l02292"></a>02292    <span class="keywordtype">int</span> nsof=0;
-<a name="l02293"></a>02293    <span class="keywordtype">int</span> i=0;
-<a name="l02294"></a>02294 
-<a name="l02295"></a>02295    nsof = cpl_frameset_get_size(sof);
-<a name="l02296"></a>02296    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02297"></a>02297       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02298"></a>02298       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02299"></a>02299       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02300"></a>02300          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02301"></a>02301          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02302"></a>02302             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02303"></a>02303             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02304"></a>02304             <span class="keywordflow">if</span>(sinfo_frame_is_cdb(tag) == 1) {
-<a name="l02305"></a>02305                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02306"></a>02306                cpl_frameset_insert(cdb,frame_dup);
-<a name="l02307"></a>02307             }
-<a name="l02308"></a>02308          }
-<a name="l02309"></a>02309       }
-<a name="l02310"></a>02310    }
-<a name="l02311"></a>02311 
-<a name="l02312"></a>02312    <span class="keywordflow">return</span> 0;
-<a name="l02313"></a>02313 }
-<a name="l02314"></a>02314 
-<a name="l02315"></a>02315 cpl_frameset* sinfo_frameset_join(cpl_frameset* fs1,cpl_frameset* fs2) {
-<a name="l02316"></a>02316 
-<a name="l02317"></a>02317    cpl_frameset* join=NULL;
-<a name="l02318"></a>02318    cpl_frame* frm=NULL;
-<a name="l02319"></a>02319    cpl_frame* frm_dup=NULL;
-<a name="l02320"></a>02320    <span class="keywordtype">int</span> i=0;
-<a name="l02321"></a>02321    <span class="keywordtype">int</span> n=0;
-<a name="l02322"></a>02322 
-<a name="l02323"></a>02323    join=cpl_frameset_new();
-<a name="l02324"></a>02324 
-<a name="l02325"></a>02325    n=cpl_frameset_get_size(fs1);
-<a name="l02326"></a>02326    <span class="keywordflow">for</span>(i=0;i<n; i++) {
-<a name="l02327"></a>02327       frm=cpl_frameset_get_frame(fs1,i);
-<a name="l02328"></a>02328       frm_dup= cpl_frame_duplicate(frm);
-<a name="l02329"></a>02329       cpl_frameset_insert(join,frm_dup);
-<a name="l02330"></a>02330    }
-<a name="l02331"></a>02331 
-<a name="l02332"></a>02332    n=cpl_frameset_get_size(fs2);
-<a name="l02333"></a>02333    <span class="keywordflow">for</span>(i=0;i<n; i++) {
-<a name="l02334"></a>02334       frm=cpl_frameset_get_frame(fs2,i);
-<a name="l02335"></a>02335       frm_dup= cpl_frame_duplicate(frm);
-<a name="l02336"></a>02336       cpl_frameset_insert(join,frm_dup);
-<a name="l02337"></a>02337    }
-<a name="l02338"></a>02338 
-<a name="l02339"></a>02339 
-<a name="l02340"></a>02340    <span class="keywordflow">return</span> join;
-<a name="l02341"></a>02341 
-<a name="l02342"></a>02342 }
-<a name="l02343"></a>02343 
-<a name="l02344"></a>02344 
-<a name="l02345"></a>02345 <span class="keywordtype">int</span> sinfo_extract_stk_frames(cpl_frameset * sof,
-<a name="l02346"></a>02346                              cpl_frameset* res)
-<a name="l02347"></a>02347 {
-<a name="l02348"></a>02348    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02349"></a>02349    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02350"></a>02350    cpl_frame* frame   = NULL;
-<a name="l02351"></a>02351    cpl_frame* frame_dup   = NULL;
-<a name="l02352"></a>02352    <span class="keywordtype">int</span> nsof=0;
-<a name="l02353"></a>02353    <span class="keywordtype">int</span> i=0;
-<a name="l02354"></a>02354 
-<a name="l02355"></a>02355    nsof = cpl_frameset_get_size(sof);
-<a name="l02356"></a>02356    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02357"></a>02357       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02358"></a>02358       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02359"></a>02359       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02360"></a>02360          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02361"></a>02361          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02362"></a>02362             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02363"></a>02363             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02364"></a>02364             <span class="keywordflow">if</span>(sinfo_frame_is_stk(tag) == 1) {
-<a name="l02365"></a>02365                frame_dup=cpl_frame_duplicate(frame);
-<a name="l02366"></a>02366                cpl_frameset_insert(res,frame_dup);
-<a name="l02367"></a>02367             }
-<a name="l02368"></a>02368          }
-<a name="l02369"></a>02369       }
-<a name="l02370"></a>02370    }
-<a name="l02371"></a>02371 
-<a name="l02372"></a>02372    <span class="keywordflow">return</span> 0;
-<a name="l02373"></a>02373 }
-<a name="l02374"></a>02374 
-<a name="l02375"></a>02375 
-<a name="l02376"></a>02376 <span class="keywordtype">int</span>
-<a name="l02377"></a>02377 sinfo_extract_preoptic_frames(cpl_frameset * sof,
-<a name="l02378"></a>02378                               cpl_frameset** res,
-<a name="l02379"></a>02379                               <span class="keyword">const</span> <span class="keywordtype">char</span>* val)
-<a name="l02380"></a>02380 {
-<a name="l02381"></a>02381    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02382"></a>02382    cpl_frame* frame   = NULL;
-<a name="l02383"></a>02383    cpl_frame* frame_dup   = NULL;
-<a name="l02384"></a>02384    <span class="keywordtype">int</span> nsof=0;
-<a name="l02385"></a>02385    <span class="keywordtype">int</span> i=0;
-<a name="l02386"></a>02386 
-<a name="l02387"></a>02387    nsof = cpl_frameset_get_size(sof);
-<a name="l02388"></a>02388    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02389"></a>02389       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02390"></a>02390       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02391"></a>02391       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02392"></a>02392          <span class="keywordflow">if</span>(sinfo_frame_is_preoptic(frame,val) == 1) {
-<a name="l02393"></a>02393             frame_dup=cpl_frame_duplicate(frame);
-<a name="l02394"></a>02394             cpl_frameset_insert(*res,frame_dup);
-<a name="l02395"></a>02395          }
-<a name="l02396"></a>02396       }
-<a name="l02397"></a>02397    }
-<a name="l02398"></a>02398 
-<a name="l02399"></a>02399    <span class="keywordflow">return</span> 0;
-<a name="l02400"></a>02400 }
-<a name="l02401"></a>02401 
-<a name="l02402"></a>02402 <span class="keywordtype">int</span> sinfo_extract_raw_stack_frames(cpl_frameset * sof, cpl_frameset** pro)
-<a name="l02403"></a>02403 {
-<a name="l02404"></a>02404    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02405"></a>02405    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02406"></a>02406    cpl_frame* frame   = NULL;
-<a name="l02407"></a>02407    cpl_frame* frame_dup   = NULL;
-<a name="l02408"></a>02408 
-<a name="l02409"></a>02409    <span class="keywordtype">int</span> nsof=0;
-<a name="l02410"></a>02410    <span class="keywordtype">int</span> i=0;
-<a name="l02411"></a>02411    nsof = cpl_frameset_get_size(sof);
-<a name="l02412"></a>02412 
-<a name="l02413"></a>02413    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02414"></a>02414       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02415"></a>02415       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02416"></a>02416       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02417"></a>02417          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02418"></a>02418          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02419"></a>02419             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02420"></a>02420             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02421"></a>02421             <span class="comment">/* sinfo_msg("tag=%s\n",tag); */</span>
-<a name="l02422"></a>02422             <span class="keywordflow">if</span>(sinfo_frame_is_raw_stack(tag) == 1) {
-<a name="l02423"></a>02423                frame_dup   = cpl_frame_duplicate(frame);
-<a name="l02424"></a>02424                cpl_frameset_insert(*pro,frame_dup);
-<a name="l02425"></a>02425             }
-<a name="l02426"></a>02426          }
-<a name="l02427"></a>02427       }
-<a name="l02428"></a>02428    }
-<a name="l02429"></a>02429 
-<a name="l02430"></a>02430    <span class="keywordflow">return</span> 0;
-<a name="l02431"></a>02431 }
-<a name="l02432"></a>02432 
-<a name="l02433"></a>02433 
-<a name="l02434"></a>02434 <span class="keywordtype">int</span> sinfo_extract_raw_slit_frames(cpl_frameset * sof, cpl_frameset** pro)
-<a name="l02435"></a>02435 {
-<a name="l02436"></a>02436    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l02437"></a>02437    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02438"></a>02438    cpl_frame* frame   = NULL;
-<a name="l02439"></a>02439    <span class="keywordtype">int</span> nsof=0;
-<a name="l02440"></a>02440    <span class="keywordtype">int</span> i=0;
-<a name="l02441"></a>02441    nsof = cpl_frameset_get_size(sof);
-<a name="l02442"></a>02442    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {
-<a name="l02443"></a>02443       frame = cpl_frameset_get_frame(sof,i);
-<a name="l02444"></a>02444       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l02445"></a>02445       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {
-<a name="l02446"></a>02446          <span class="comment">/* to go on the file must exist */</span>
-<a name="l02447"></a>02447          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l02448"></a>02448             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span>
-<a name="l02449"></a>02449             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l02450"></a>02450             <span class="keywordflow">if</span>(sinfo_frame_is_slit_lamp(tag) == 1) {
-<a name="l02451"></a>02451                cpl_frameset_insert(*pro,frame);
-<a name="l02452"></a>02452             }
-<a name="l02453"></a>02453          }
-<a name="l02454"></a>02454       }
-<a name="l02455"></a>02455    }
-<a name="l02456"></a>02456 
-<a name="l02457"></a>02457    <span class="keywordflow">return</span> 0;
-<a name="l02458"></a>02458 }
-<a name="l02459"></a>02459 
-<a name="l02460"></a>02460 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02466"></a>02466 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02467"></a>02467 <span class="keywordtype">int</span> sinfo_frame_is_raw(<span class="keywordtype">char</span> * tag)
-<a name="l02468"></a>02468 {
-<a name="l02469"></a>02469    <span class="comment">/* Test entries */</span>
-<a name="l02470"></a>02470    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02471"></a>02471 
-<a name="l02472"></a>02472    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02473"></a>02473    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l02474"></a>02474    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PINHOLE_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02475"></a>02475    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SLIT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02476"></a>02476    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02477"></a>02477    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02478"></a>02478    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02479"></a>02479    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_NS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02480"></a>02480    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02481"></a>02481    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_EW)) <span class="keywordflow">return</span> 1 ;
-<a name="l02482"></a>02482    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_NS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02483"></a>02483    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_SKY)) <span class="keywordflow">return</span> 1 ;
-<a name="l02484"></a>02484    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLUX_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02485"></a>02485    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02486"></a>02486    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FOCUS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02487"></a>02487 
-<a name="l02488"></a>02488    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD)) <span class="keywordflow">return</span> 1 ;
-<a name="l02489"></a>02489    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02490"></a>02490    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02491"></a>02491    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_STD)) <span class="keywordflow">return</span> 1 ;
-<a name="l02492"></a>02492    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_OH)) <span class="keywordflow">return</span> 1 ;
-<a name="l02493"></a>02493    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02494"></a>02494 
-<a name="l02495"></a>02495    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PUPIL_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02496"></a>02496    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_JITTER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02497"></a>02497    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_JITTER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02498"></a>02498    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING)) <span class="keywordflow">return</span> 1 ;
-<a name="l02499"></a>02499    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02500"></a>02500    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING)) <span class="keywordflow">return</span> 1 ;
-<a name="l02501"></a>02501 
-<a name="l02502"></a>02502    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02503"></a>02503    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02504"></a>02504    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02505"></a>02505    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02506"></a>02506    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02507"></a>02507    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02508"></a>02508 
-<a name="l02509"></a>02509 
-<a name="l02510"></a>02510    <span class="keywordflow">return</span> 0 ;
-<a name="l02511"></a>02511 }
-<a name="l02512"></a>02512 
-<a name="l02513"></a>02513 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02519"></a>02519 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02520"></a>02520 <span class="keywordtype">int</span> sinfo_frame_is_raw_stack(<span class="keywordtype">char</span> * tag)
-<a name="l02521"></a>02521 {
-<a name="l02522"></a>02522    <span class="comment">/* Test entries */</span>
-<a name="l02523"></a>02523    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02524"></a>02524 
-<a name="l02525"></a>02525 
-<a name="l02526"></a>02526    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_DUMMY)) <span class="keywordflow">return</span> 1 ;
-<a name="l02527"></a>02527    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02528"></a>02528    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02529"></a>02529    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02530"></a>02530    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02531"></a>02531 
-<a name="l02532"></a>02532    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLUX_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02533"></a>02533    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_NS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02534"></a>02534    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_EW)) <span class="keywordflow">return</span> 1 ;
-<a name="l02535"></a>02535 
-<a name="l02536"></a>02536    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02537"></a>02537    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_PSF)) <span class="keywordflow">return</span> 1 ;
-<a name="l02538"></a>02538    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l02539"></a>02539 
-<a name="l02540"></a>02540    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FOCUS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02541"></a>02541 
-<a name="l02542"></a>02542    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PUPIL_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02543"></a>02543    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_JITTER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02544"></a>02544    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_JITTER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02545"></a>02545    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING)) <span class="keywordflow">return</span> 1 ;
-<a name="l02546"></a>02546    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02547"></a>02547    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING)) <span class="keywordflow">return</span> 1 ;
-<a name="l02548"></a>02548 
-<a name="l02549"></a>02549    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02550"></a>02550    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02551"></a>02551    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;
-<a name="l02552"></a>02552 
-<a name="l02553"></a>02553 
-<a name="l02554"></a>02554    <span class="keywordflow">if</span> (!strcmp(tag, RAW_IMAGE_PRE_OBJECT)) <span class="keywordflow">return</span> 1 ;
-<a name="l02555"></a>02555    <span class="keywordflow">if</span> (!strcmp(tag, RAW_IMAGE_PRE_SKY)) <span class="keywordflow">return</span> 1 ;
-<a name="l02556"></a>02556    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD)) <span class="keywordflow">return</span> 1 ;
-<a name="l02557"></a>02557    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_STD)) <span class="keywordflow">return</span> 1 ;
-<a name="l02558"></a>02558    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_OH)) <span class="keywordflow">return</span> 1 ;
-<a name="l02559"></a>02559    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02560"></a>02560    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02561"></a>02561    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY)) <span class="keywordflow">return</span> 1 ;
-<a name="l02562"></a>02562 
-<a name="l02563"></a>02563    <span class="keywordflow">return</span> 0 ;
-<a name="l02564"></a>02564 }
-<a name="l02565"></a>02565 
-<a name="l02566"></a>02566 
-<a name="l02567"></a>02567 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02573"></a>02573 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02574"></a>02574 <span class="keywordtype">int</span> sinfo_frame_is_raw_dark(<span class="keywordtype">char</span> * tag)
-<a name="l02575"></a>02575 {
-<a name="l02576"></a>02576    <span class="comment">/* Test entries */</span>
-<a name="l02577"></a>02577    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02578"></a>02578 
-<a name="l02579"></a>02579    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l02580"></a>02580 
-<a name="l02581"></a>02581    <span class="keywordflow">return</span> 0 ;
-<a name="l02582"></a>02582 }
-<a name="l02583"></a>02583 
-<a name="l02584"></a>02584 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02590"></a>02590 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02591"></a>02591 <span class="keywordtype">int</span> sinfo_frame_is_slit_lamp(<span class="keywordtype">char</span> * tag)
-<a name="l02592"></a>02592 {
-<a name="l02593"></a>02593    <span class="comment">/* Test entries */</span>
-<a name="l02594"></a>02594    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02595"></a>02595 
-<a name="l02596"></a>02596    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SLIT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02597"></a>02597 
-<a name="l02598"></a>02598    <span class="keywordflow">return</span> 0 ;
-<a name="l02599"></a>02599 }
-<a name="l02600"></a>02600 
-<a name="l02601"></a>02601 
-<a name="l02602"></a>02602 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02608"></a>02608 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02609"></a>02609 <span class="keywordtype">int</span> sinfo_frame_is_pinhole_lamp(<span class="keywordtype">char</span> * tag)
-<a name="l02610"></a>02610 {
-<a name="l02611"></a>02611    <span class="comment">/* Test entries */</span>
-<a name="l02612"></a>02612    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02613"></a>02613 
-<a name="l02614"></a>02614    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PINHOLE_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02615"></a>02615 
-<a name="l02616"></a>02616    <span class="keywordflow">return</span> 0 ;
-<a name="l02617"></a>02617 }
-<a name="l02618"></a>02618 
-<a name="l02619"></a>02619 
-<a name="l02620"></a>02620 <span class="keywordtype">int</span> sinfo_frame_is_cdb(<span class="keywordtype">char</span> * tag)
-<a name="l02621"></a>02621 {
-<a name="l02622"></a>02622    <span class="comment">/* Test entries */</span>
-<a name="l02623"></a>02623    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02624"></a>02624    <span class="comment">/* For the moment not checked the following:</span>
-<a name="l02625"></a>02625 <span class="comment"></span>
-<a name="l02626"></a>02626 <span class="comment">   PRO_STACKED</span>
-<a name="l02627"></a>02627 <span class="comment">   PRO_SLIT_ON</span>
-<a name="l02628"></a>02628 <span class="comment">   PRO_FLUX_LAMP_STACKED</span>
-<a name="l02629"></a>02629 <span class="comment">   PRO_WAVE_LAMP_STACKED</span>
-<a name="l02630"></a>02630 <span class="comment">   PRO_PSF_CALIBRATOR_STACKED</span>
-<a name="l02631"></a>02631 <span class="comment">   PRO_FOCUS_STACKED</span>
-<a name="l02632"></a>02632 <span class="comment">   PRO_OBJECT_NODDING_STACKED</span>
-<a name="l02633"></a>02633 <span class="comment">   PRO_OBJECT_SKYSPIDER_STACKED</span>
-<a name="l02634"></a>02634 <span class="comment">   PRO_SKY_NODDING_STACKED</span>
-<a name="l02635"></a>02635 <span class="comment">   PRO_STD_NODDING_STACKED</span>
-<a name="l02636"></a>02636 <span class="comment">   PRO_MASK_CUBE</span>
-<a name="l02637"></a>02637 <span class="comment">   PRO_PSF</span>
-<a name="l02638"></a>02638 <span class="comment">   TMP_FOCUS</span>
-<a name="l02639"></a>02639 <span class="comment">   TMP_FOCUS_ON</span>
-<a name="l02640"></a>02640 <span class="comment">   TMP_FOCUS_OFF</span>
-<a name="l02641"></a>02641 <span class="comment">   PRO_FOCUS</span>
-<a name="l02642"></a>02642 <span class="comment">   PRO_FOCUS_GAUSS</span>
-<a name="l02643"></a>02643 <span class="comment">   PRO_SPECTRA</span>
-<a name="l02644"></a>02644 <span class="comment">   PRO_CUBE</span>
-<a name="l02645"></a>02645 <span class="comment">   PRO_CUBE_COLL</span>
-<a name="l02646"></a>02646 <span class="comment">   PRO_SLOPEX</span>
-<a name="l02647"></a>02647 <span class="comment">   PRO_SLOPEY</span>
-<a name="l02648"></a>02648 <span class="comment">   PRO_MASK_CUBE</span>
-<a name="l02649"></a>02649 <span class="comment">   PRO_OBJ_CUBE</span>
-<a name="l02650"></a>02650 <span class="comment">   PRO_BP_COEFF</span>
-<a name="l02651"></a>02651 <span class="comment">   */</span>
-<a name="l02652"></a>02652 
-<a name="l02653"></a>02653    <span class="keywordflow">if</span> (!strcmp(tag, REF_LINE_ARC)) <span class="keywordflow">return</span> 1 ;
-<a name="l02654"></a>02654    <span class="keywordflow">if</span> (!strcmp(tag, REF_LINE_OH)) <span class="keywordflow">return</span> 1 ;
-<a name="l02655"></a>02655    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02656"></a>02656    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_HP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02657"></a>02657    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_DI)) <span class="keywordflow">return</span> 1 ;
-<a name="l02658"></a>02658    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_NO)) <span class="keywordflow">return</span> 1 ;
-<a name="l02659"></a>02659    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_NL)) <span class="keywordflow">return</span> 1 ;
-<a name="l02660"></a>02660    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_BP_MAP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02661"></a>02661    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l02662"></a>02662    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLOPE)) <span class="keywordflow">return</span> 1 ;
-<a name="l02663"></a>02663    <span class="keywordflow">if</span> (!strcmp(tag, PRO_DISTORTION)) <span class="keywordflow">return</span> 1 ;
-<a name="l02664"></a>02664    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLITLETS_DISTANCE)) <span class="keywordflow">return</span> 1 ;
-<a name="l02665"></a>02665    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02666"></a>02666    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;
-<a name="l02667"></a>02667    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;
-<a name="l02668"></a>02668    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02669"></a>02669    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS_GUESS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02670"></a>02670    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_PAR_LIST)) <span class="keywordflow">return</span> 1 ;
-<a name="l02671"></a>02671    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_COEF_SLIT)) <span class="keywordflow">return</span> 1 ;
-<a name="l02672"></a>02672    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_LAMP_SPEC)) <span class="keywordflow">return</span> 1 ;
-<a name="l02673"></a>02673    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_TWIFLAT)) <span class="keywordflow">return</span> 1 ;
-<a name="l02674"></a>02674    <span class="keywordflow">if</span> (!strcmp(tag, PRO_COEFF_LIST)) <span class="keywordflow">return</span> 1 ;
-<a name="l02675"></a>02675    <span class="keywordflow">if</span> (!strcmp(tag, PRO_INDEX_LIST)) <span class="keywordflow">return</span> 1 ;
-<a name="l02676"></a>02676    <span class="keywordflow">if</span> (!strcmp(tag, PRO_HALO_SPECT)) <span class="keywordflow">return</span> 1 ;
-<a name="l02677"></a>02677    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FIRST_COL)) <span class="keywordflow">return</span> 1 ;
-<a name="l02678"></a>02678    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FOCUS)) <span class="keywordflow">return</span> 1 ;
-<a name="l02679"></a>02679    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_MAP)) <span class="keywordflow">return</span> 1 ;
-<a name="l02680"></a>02680    <span class="keywordflow">if</span> (!strcmp(tag, PRO_REF_ATM_REF_CORR)) <span class="keywordflow">return</span> 1 ;
-<a name="l02681"></a>02681 
-<a name="l02682"></a>02682    <span class="keywordflow">return</span> 0;
-<a name="l02683"></a>02683 
-<a name="l02684"></a>02684 }
-<a name="l02685"></a>02685 
-<a name="l02686"></a>02686 
-<a name="l02687"></a>02687 
-<a name="l02688"></a>02688 
-<a name="l02689"></a>02689 <span class="keywordtype">int</span> sinfo_frame_is_stk(<span class="keywordtype">char</span> * tag)
-<a name="l02690"></a>02690 {
-<a name="l02691"></a>02691    <span class="comment">/* Test entries */</span>
-<a name="l02692"></a>02692    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l02693"></a>02693    <span class="comment">/* For the moment not checked the following: */</span>
-<a name="l02694"></a>02694 
-<a name="l02695"></a>02695 
-<a name="l02696"></a>02696    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_STACKED_DUMMY)) <span class="keywordflow">return</span> 1 ;
-<a name="l02697"></a>02697    <span class="keywordflow">if</span> (!strcmp(tag, PRO_STACK_SKY_DIST)) <span class="keywordflow">return</span> 1 ;
-<a name="l02698"></a>02698    <span class="keywordflow">if</span> (!strcmp(tag, PRO_STACK_MFLAT_DIST)) <span class="keywordflow">return</span> 1 ;
-<a name="l02699"></a>02699    <span class="keywordflow">if</span> (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l02700"></a>02700 
-<a name="l02701"></a>02701 
-<a name="l02702"></a>02702    <span class="keywordflow">return</span> 0;
-<a name="l02703"></a>02703 
-<a name="l02704"></a>02704 }
-<a name="l02705"></a>02705 
-<a name="l02706"></a>02706 <span class="keywordtype">int</span>
-<a name="l02707"></a>02707 sinfo_propertylist_has(cpl_propertylist* plist,
-<a name="l02708"></a>02708                        <span class="keyword">const</span> <span class="keywordtype">char</span>* key) {
-<a name="l02709"></a>02709 
-<a name="l02710"></a>02710    <span class="keywordflow">return</span> cpl_propertylist_has(plist,key);
-<a name="l02711"></a>02711 
-<a name="l02712"></a>02712 }
-<a name="l02713"></a>02713 
-<a name="l02714"></a>02714 <span class="keywordtype">int</span> sinfo_frame_is_preoptic(cpl_frame* frame,<span class="keyword">const</span> <span class="keywordtype">char</span>* val)
-<a name="l02715"></a>02715 {
-<a name="l02716"></a>02716 
-<a name="l02717"></a>02717    <span class="keywordtype">char</span>* file=NULL;
-<a name="l02718"></a>02718    <span class="keywordtype">char</span> popt[FILE_NAME_SZ];
-<a name="l02719"></a>02719    cpl_propertylist* plist=NULL;
-<a name="l02720"></a>02720 
-<a name="l02721"></a>02721 
-<a name="l02722"></a>02722    file = cpl_strdup(cpl_frame_get_filename(frame)) ;
-<a name="l02723"></a>02723    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
-<a name="l02724"></a>02724       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l02725"></a>02725       cpl_propertylist_delete(plist) ;
-<a name="l02726"></a>02726       cpl_free(file);
-<a name="l02727"></a>02727       <span class="keywordflow">return</span> -1 ;
-<a name="l02728"></a>02728    }
-<a name="l02729"></a>02729 
-<a name="l02730"></a>02730    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
-<a name="l02731"></a>02731       strcpy(popt,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
-<a name="l02732"></a>02732    } <span class="keywordflow">else</span> {
-<a name="l02733"></a>02733       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);
-<a name="l02734"></a>02734       cpl_free(file);
-<a name="l02735"></a>02735       <span class="keywordflow">return</span> -1;
-<a name="l02736"></a>02736    }
-<a name="l02737"></a>02737    cpl_propertylist_delete(plist) ;
-<a name="l02738"></a>02738    cpl_free(file);
-<a name="l02739"></a>02739 
-<a name="l02740"></a>02740    <span class="keywordflow">if</span> (strstr(val,popt) != NULL) <span class="keywordflow">return</span> 1 ;
-<a name="l02741"></a>02741 
-<a name="l02742"></a>02742 
-<a name="l02743"></a>02743    <span class="keywordflow">return</span> 0;
-<a name="l02744"></a>02744 
-<a name="l02745"></a>02745 }
-<a name="l02746"></a>02746 
-<a name="l02747"></a>02747 
-<a name="l02748"></a>02748 <span class="keywordtype">int</span> sinfo_get_preoptic(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keyword">const</span> <span class="keywordtype">char</span>* val)
-<a name="l02749"></a>02749 {
-<a name="l02750"></a>02750 
-<a name="l02751"></a>02751    cpl_propertylist* plist=NULL;
-<a name="l02752"></a>02752 
-<a name="l02753"></a>02753 
-<a name="l02754"></a>02754    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
-<a name="l02755"></a>02755       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l02756"></a>02756       cpl_propertylist_delete(plist) ;
-<a name="l02757"></a>02757       <span class="keywordflow">return</span> -1 ;
-<a name="l02758"></a>02758    }
-<a name="l02759"></a>02759 
-<a name="l02760"></a>02760    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
-<a name="l02761"></a>02761       strcpy((<span class="keywordtype">char</span>*)val,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
-<a name="l02762"></a>02762    } <span class="keywordflow">else</span> {
-<a name="l02763"></a>02763       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);
-<a name="l02764"></a>02764       <span class="keywordflow">return</span> -1;
-<a name="l02765"></a>02765    }
-<a name="l02766"></a>02766    cpl_propertylist_delete(plist) ;
-<a name="l02767"></a>02767 
-<a name="l02768"></a>02768    <span class="keywordflow">return</span> 0;
-<a name="l02769"></a>02769 
-<a name="l02770"></a>02770 }
-<a name="l02771"></a>02771 
-<a name="l02772"></a>02772 <span class="comment">/*</span>
-<a name="l02773"></a>02773 <span class="comment">  static int</span>
-<a name="l02774"></a>02774 <span class="comment">  sinfo_stat_rectangle(cpl_image* img,</span>
-<a name="l02775"></a>02775 <span class="comment">  const int kappa,</span>
-<a name="l02776"></a>02776 <span class="comment">  const int nclip,</span>
-<a name="l02777"></a>02777 <span class="comment">  double *mean,</span>
-<a name="l02778"></a>02778 <span class="comment">  double *stdev)</span>
-<a name="l02779"></a>02779 <span class="comment">  {</span>
-<a name="l02780"></a>02780 <span class="comment"></span>
-<a name="l02781"></a>02781 <span class="comment">  double sum=0;</span>
-<a name="l02782"></a>02782 <span class="comment">  double sum2=0;</span>
-<a name="l02783"></a>02783 <span class="comment">  double noise=0;</span>
-<a name="l02784"></a>02784 <span class="comment"></span>
-<a name="l02785"></a>02785 <span class="comment">  double* pim=NULL;</span>
-<a name="l02786"></a>02786 <span class="comment">  int i=0;</span>
-<a name="l02787"></a>02787 <span class="comment">  int j=0;</span>
-<a name="l02788"></a>02788 <span class="comment">  int kk=0;</span>
-<a name="l02789"></a>02789 <span class="comment">  int sx=0;</span>
-<a name="l02790"></a>02790 <span class="comment">  int sy=0;</span>
-<a name="l02791"></a>02791 <span class="comment"></span>
-<a name="l02792"></a>02792 <span class="comment">  *mean=0;</span>
-<a name="l02793"></a>02793 <span class="comment">  pim=cpl_image_get_data(img);</span>
-<a name="l02794"></a>02794 <span class="comment">  kk=0;</span>
-<a name="l02795"></a>02795 <span class="comment">  for(i=0;i<sx*sy;i++) {</span>
-<a name="l02796"></a>02796 <span class="comment">  *mean+=pim[i];</span>
-<a name="l02797"></a>02797 <span class="comment">  }</span>
-<a name="l02798"></a>02798 <span class="comment">  *mean/=(sx*sy);</span>
-<a name="l02799"></a>02799 <span class="comment"></span>
-<a name="l02800"></a>02800 <span class="comment">  for(i=0;i<sx*sy;i++) {</span>
-<a name="l02801"></a>02801 <span class="comment">  sum+=(pim[i]-*mean)*(pim[i]-*mean);</span>
-<a name="l02802"></a>02802 <span class="comment">  }</span>
-<a name="l02803"></a>02803 <span class="comment">  noise=sqrt(sum/(sx*sy));</span>
-<a name="l02804"></a>02804 <span class="comment"></span>
-<a name="l02805"></a>02805 <span class="comment"></span>
-<a name="l02806"></a>02806 <span class="comment">  //clean a bit the bad pixels</span>
-<a name="l02807"></a>02807 <span class="comment">  for(j=0;j<nclip;j++) {</span>
-<a name="l02808"></a>02808 <span class="comment">  sum=0;</span>
-<a name="l02809"></a>02809 <span class="comment">  sum2=0;</span>
-<a name="l02810"></a>02810 <span class="comment">  kk=0;</span>
-<a name="l02811"></a>02811 <span class="comment">  for(i=0;i<sx*sy;i++) {</span>
-<a name="l02812"></a>02812 <span class="comment">  if(fabs(pim[i]-*mean)<kappa*noise) {</span>
-<a name="l02813"></a>02813 <span class="comment"></span>
-<a name="l02814"></a>02814 <span class="comment">  sum  +=(pim[i]-*mean)*(pim[i]-*mean);</span>
-<a name="l02815"></a>02815 <span class="comment">  sum2 += pim[i];</span>
-<a name="l02816"></a>02816 <span class="comment">  kk+=1;</span>
-<a name="l02817"></a>02817 <span class="comment">  }</span>
-<a name="l02818"></a>02818 <span class="comment">  noise=sqrt(sum/kk);</span>
-<a name="l02819"></a>02819 <span class="comment">  *mean=sum2/kk;</span>
-<a name="l02820"></a>02820 <span class="comment"></span>
-<a name="l02821"></a>02821 <span class="comment">  }</span>
-<a name="l02822"></a>02822 <span class="comment"></span>
-<a name="l02823"></a>02823 <span class="comment">  }</span>
-<a name="l02824"></a>02824 <span class="comment">  *stdev=noise;</span>
-<a name="l02825"></a>02825 <span class="comment"></span>
-<a name="l02826"></a>02826 <span class="comment">  return 0;</span>
-<a name="l02827"></a>02827 <span class="comment"></span>
-<a name="l02828"></a>02828 <span class="comment">  }</span>
-<a name="l02829"></a>02829 <span class="comment">*/</span>
-<a name="l02830"></a>02830 
-<a name="l02831"></a>02831 cpl_table* sinfo_compute_gain(cpl_frameset* son, cpl_frameset* sof)
-<a name="l02832"></a>02832 {
-<a name="l02833"></a>02833 
-<a name="l02834"></a>02834 
-<a name="l02835"></a>02835    cpl_frame*    frm=NULL;
-<a name="l02836"></a>02836 
-<a name="l02837"></a>02837    cpl_image* img_on1=NULL;
-<a name="l02838"></a>02838    cpl_image* img_on2=NULL;
-<a name="l02839"></a>02839    cpl_image* img_on_dif=NULL;
-<a name="l02840"></a>02840    cpl_image* img_on_sub=NULL;
-<a name="l02841"></a>02841 
-<a name="l02842"></a>02842 
-<a name="l02843"></a>02843    cpl_image* img_of1=NULL;
-<a name="l02844"></a>02844    cpl_image* img_of2=NULL;
-<a name="l02845"></a>02845    cpl_image* img_of_dif=NULL;
-<a name="l02846"></a>02846    cpl_image* img_of_sub=NULL;
-<a name="l02847"></a>02847 
-<a name="l02848"></a>02848    cpl_table* res_tbl=NULL;
-<a name="l02849"></a>02849    cpl_vector* dit_on=NULL;
-<a name="l02850"></a>02850    cpl_vector* dit_of=NULL;
-<a name="l02851"></a>02851    cpl_vector* exptime_on=NULL;
-<a name="l02852"></a>02852    cpl_vector* exptime_of=NULL;
-<a name="l02853"></a>02853    cpl_propertylist* plist=NULL;
-<a name="l02854"></a>02854 
-<a name="l02855"></a>02855    <span class="keywordtype">int</span> non=0;
-<a name="l02856"></a>02856    <span class="keywordtype">int</span> nof=0;
-<a name="l02857"></a>02857    <span class="keywordtype">int</span> nfr=0;
-<a name="l02858"></a>02858    <span class="keywordtype">double</span> avg_on1=0;
-<a name="l02859"></a>02859    <span class="keywordtype">double</span> avg_on2=0;
-<a name="l02860"></a>02860    <span class="keywordtype">double</span> avg_of1=0;
-<a name="l02861"></a>02861    <span class="keywordtype">double</span> avg_of2=0;
-<a name="l02862"></a>02862    <span class="keywordtype">double</span> std=0;
-<a name="l02863"></a>02863 
-<a name="l02864"></a>02864    <span class="keywordtype">double</span> sig_on_dif=0;
-<a name="l02865"></a>02865    <span class="keywordtype">double</span> sig_of_dif=0;
-<a name="l02866"></a>02866    <span class="keywordtype">char</span>* name=NULL;
-<a name="l02867"></a>02867    <span class="keywordtype">int</span> i=0;
-<a name="l02868"></a>02868    <span class="keywordtype">int</span> m=0;
-<a name="l02869"></a>02869 
-<a name="l02870"></a>02870    <span class="keywordtype">int</span> llx=270;
-<a name="l02871"></a>02871    <span class="keywordtype">int</span> lly=1000;
-<a name="l02872"></a>02872    <span class="keywordtype">int</span> urx=320;
-<a name="l02873"></a>02873    <span class="keywordtype">int</span> ury=1050;
-<a name="l02874"></a>02874    <span class="keywordtype">int</span> zone[4];
-<a name="l02875"></a>02875    <span class="keywordtype">double</span> gain=0;
-<a name="l02876"></a>02876    <span class="keywordtype">double</span> dit_ref=0;
-<a name="l02877"></a>02877    <span class="keywordtype">double</span> dit_tmp=0;
-<a name="l02878"></a>02878    <span class="keywordtype">double</span> exptime_ref=0;
-<a name="l02879"></a>02879    <span class="keywordtype">double</span> exptime_tmp=0;
-<a name="l02880"></a>02880    <span class="keywordtype">int</span> kappa=5;
-<a name="l02881"></a>02881    <span class="keywordtype">int</span> nclip=25;
-<a name="l02882"></a>02882    <span class="keywordtype">double</span> centre=0;
-<a name="l02883"></a>02883 
-<a name="l02884"></a>02884    non = cpl_frameset_get_size(son);
-<a name="l02885"></a>02885    nof = cpl_frameset_get_size(sof);
-<a name="l02886"></a>02886    nfr = (non <= nof) ? non : nof;
-<a name="l02887"></a>02887 
-<a name="l02888"></a>02888    dit_on=cpl_vector_new(nfr);
-<a name="l02889"></a>02889    dit_of=cpl_vector_new(nfr);
-<a name="l02890"></a>02890    exptime_on=cpl_vector_new(nfr);
-<a name="l02891"></a>02891    exptime_of=cpl_vector_new(nfr);
-<a name="l02892"></a>02892 
-<a name="l02893"></a>02893    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l02894"></a>02894 
-<a name="l02895"></a>02895       frm=cpl_frameset_get_frame(son,i);
-<a name="l02896"></a>02896       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02897"></a>02897       plist=cpl_propertylist_load(name,0);
-<a name="l02898"></a>02898       dit_ref=sinfo_pfits_get_dit(plist);
-<a name="l02899"></a>02899       exptime_ref=(double)sinfo_pfits_get_exp_time(plist);
-<a name="l02900"></a>02900       cpl_propertylist_delete(plist);
-<a name="l02901"></a>02901       cpl_vector_set(dit_on,i,dit_ref);
-<a name="l02902"></a>02902       cpl_vector_set(exptime_on,i,exptime_ref);
-<a name="l02903"></a>02903 
-<a name="l02904"></a>02904       frm=cpl_frameset_get_frame(sof,i);
-<a name="l02905"></a>02905       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02906"></a>02906       plist=cpl_propertylist_load(name,0);
-<a name="l02907"></a>02907       dit_ref=sinfo_pfits_get_dit(plist);
-<a name="l02908"></a>02908       exptime_ref=(double)sinfo_pfits_get_exp_time(plist);
-<a name="l02909"></a>02909       cpl_propertylist_delete(plist);
-<a name="l02910"></a>02910       cpl_vector_set(dit_of,i,dit_ref);
-<a name="l02911"></a>02911       cpl_vector_set(exptime_of,i,exptime_ref);
-<a name="l02912"></a>02912 
-<a name="l02913"></a>02913    }
-<a name="l02914"></a>02914 
-<a name="l02915"></a>02915 
-<a name="l02916"></a>02916 
-<a name="l02917"></a>02917    zone[0]=270;
-<a name="l02918"></a>02918    zone[1]=1030;
-<a name="l02919"></a>02919    zone[2]=310;
-<a name="l02920"></a>02920    zone[3]=1060;
-<a name="l02921"></a>02921 
-<a name="l02922"></a>02922 
-<a name="l02923"></a>02923 
-<a name="l02924"></a>02924    zone[0]=20;
-<a name="l02925"></a>02925    zone[1]=2028;
-<a name="l02926"></a>02926    zone[2]=20;
-<a name="l02927"></a>02927    zone[3]=2028;
-<a name="l02928"></a>02928 
-<a name="l02929"></a>02929 
-<a name="l02930"></a>02930 
-<a name="l02931"></a>02931    check_nomsg(res_tbl=cpl_table_new(nfr));
-<a name="l02932"></a>02932    cpl_table_new_column(res_tbl,<span class="stringliteral">"adu"</span>, CPL_TYPE_DOUBLE);
-<a name="l02933"></a>02933    cpl_table_new_column(res_tbl,<span class="stringliteral">"gain"</span>, CPL_TYPE_DOUBLE);
-<a name="l02934"></a>02934 
-<a name="l02935"></a>02935    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l02936"></a>02936       frm=cpl_frameset_get_frame(son,i);
-<a name="l02937"></a>02937       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02938"></a>02938       img_on1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
-<a name="l02939"></a>02939 
-<a name="l02940"></a>02940       frm=cpl_frameset_get_frame(sof,i);
-<a name="l02941"></a>02941       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02942"></a>02942       img_of1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
-<a name="l02943"></a>02943 
-<a name="l02944"></a>02944 
-<a name="l02945"></a>02945       dit_ref=cpl_vector_get(dit_on,i);
-<a name="l02946"></a>02946       exptime_ref=cpl_vector_get(exptime_on,i);
-<a name="l02947"></a>02947 
-<a name="l02948"></a>02948 
-<a name="l02949"></a>02949       <span class="keywordflow">for</span>(m=0;m<nfr; m++) {
-<a name="l02950"></a>02950          <span class="keywordflow">if</span>(m != i) {
-<a name="l02951"></a>02951             frm=cpl_frameset_get_frame(son,m);
-<a name="l02952"></a>02952             name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02953"></a>02953             dit_tmp=cpl_vector_get(dit_on,m);
-<a name="l02954"></a>02954             exptime_tmp=cpl_vector_get(exptime_on,m);
-<a name="l02955"></a>02955             <span class="keywordflow">if</span>(dit_tmp == dit_ref && exptime_tmp == exptime_ref) {
-<a name="l02956"></a>02956                <span class="comment">/* sinfo_msg("m=%d i=%d\n",m,i); */</span>
-<a name="l02957"></a>02957                img_on2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
-<a name="l02958"></a>02958                frm=cpl_frameset_get_frame(sof,m);
-<a name="l02959"></a>02959                name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l02960"></a>02960                img_of2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
-<a name="l02961"></a>02961 
-<a name="l02962"></a>02962                img_on_dif=cpl_image_subtract_create(img_on1,img_on2);
-<a name="l02963"></a>02963                img_of_dif=cpl_image_subtract_create(img_of1,img_of2);
-<a name="l02964"></a>02964 
-<a name="l02965"></a>02965                img_on_sub=cpl_image_extract(img_on_dif,llx,lly,urx,ury);
-<a name="l02966"></a>02966                img_of_sub=cpl_image_extract(img_of_dif,llx,lly,urx,ury);
-<a name="l02967"></a>02967 
-<a name="l02968"></a>02968                sinfo_get_clean_mean_window(img_on1,llx,lly,urx,ury,kappa,
-<a name="l02969"></a>02969                                            nclip,&avg_on1,&std);
-<a name="l02970"></a>02970                sinfo_get_clean_mean_window(img_on2,llx,lly,urx,ury,kappa,
-<a name="l02971"></a>02971                                            nclip,&avg_on2,&std);
-<a name="l02972"></a>02972                sinfo_get_clean_mean_window(img_of1,llx,lly,urx,ury,kappa,
-<a name="l02973"></a>02973                                            nclip,&avg_of1,&std);
-<a name="l02974"></a>02974                sinfo_get_clean_mean_window(img_of2,llx,lly,urx,ury,kappa,
-<a name="l02975"></a>02975                                            nclip,&avg_of2,&std);
-<a name="l02976"></a>02976                <span class="comment">/*</span>
-<a name="l02977"></a>02977 <span class="comment">                 cpl_image_save(img_on_sub,"ima_on_sub.fits",</span>
-<a name="l02978"></a>02978 <span class="comment">                                CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l02979"></a>02979 <span class="comment">                 cpl_image_save(img_of_sub,"ima_of_sub.fits",</span>
-<a name="l02980"></a>02980 <span class="comment">                                CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l02981"></a>02981 <span class="comment">               */</span>
-<a name="l02982"></a>02982                <span class="comment">/*</span>
-<a name="l02983"></a>02983 <span class="comment">               //worse accuracy</span>
-<a name="l02984"></a>02984 <span class="comment">               sinfo_stat_rectangle(img_on_dif,kappa,nclip,</span>
-<a name="l02985"></a>02985 <span class="comment">                                    &centre,&sig_on_dif);</span>
-<a name="l02986"></a>02986 <span class="comment">               sinfo_stat_rectangle(img_of_dif,kappa,nclip,</span>
-<a name="l02987"></a>02987 <span class="comment">                                    &centre,&sig_of_dif);</span>
-<a name="l02988"></a>02988 <span class="comment">               */</span>
-<a name="l02989"></a>02989 
-<a name="l02990"></a>02990 
-<a name="l02991"></a>02991                <span class="comment">//better accuracy</span>
-<a name="l02992"></a>02992                sinfo_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,
-<a name="l02993"></a>02993                                            nclip,&centre,&sig_on_dif);
-<a name="l02994"></a>02994                sinfo_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,
-<a name="l02995"></a>02995                                            nclip,&centre,&sig_of_dif);
-<a name="l03012"></a>03012                cpl_image_delete(img_on2);
-<a name="l03013"></a>03013                cpl_image_delete(img_of2);
-<a name="l03014"></a>03014                cpl_image_delete(img_on_dif);
-<a name="l03015"></a>03015                cpl_image_delete(img_of_dif);
-<a name="l03016"></a>03016                cpl_image_delete(img_on_sub);
-<a name="l03017"></a>03017                cpl_image_delete(img_of_sub);
-<a name="l03018"></a>03018 
-<a name="l03019"></a>03019                gain=((avg_on1+avg_on2)-(avg_of1+avg_of2))/
-<a name="l03020"></a>03020                   ((sig_on_dif*sig_on_dif)-(sig_of_dif*sig_of_dif));
-<a name="l03021"></a>03021 
-<a name="l03022"></a>03022                cpl_table_set_double(res_tbl,<span class="stringliteral">"gain"</span>,m,gain);
-<a name="l03023"></a>03023                cpl_table_set_double(res_tbl,<span class="stringliteral">"adu"</span>,m,
-<a name="l03024"></a>03024                                     ((avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2));
-<a name="l03025"></a>03025                <span class="comment">/* sinfo_msg("gain=%f ADU=%f\n",gain,</span>
-<a name="l03026"></a>03026 <span class="comment">                  (avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2);</span>
-<a name="l03027"></a>03027 <span class="comment">                  sinfo_msg("g=%f avg_on1=%f avg_on2=%f",gain,avg_on1,avg_on2);</span>
-<a name="l03028"></a>03028 <span class="comment">                 sinfo_msg("avg_of1=%f avg_of2=%f sig_on_dif=%f sig_of_dif=%f",</span>
-<a name="l03029"></a>03029 <span class="comment">                  avg_of1,avg_of2,sig_on_dif,sig_of_dif);</span>
-<a name="l03030"></a>03030 <span class="comment">               */</span>
-<a name="l03031"></a>03031 
-<a name="l03032"></a>03032             }
-<a name="l03033"></a>03033          }
-<a name="l03034"></a>03034       }
-<a name="l03035"></a>03035       cpl_image_delete(img_on1);
-<a name="l03036"></a>03036       cpl_image_delete(img_of1);
-<a name="l03037"></a>03037    }
-<a name="l03038"></a>03038 
-<a name="l03039"></a>03039 
-<a name="l03040"></a>03040    <span class="comment">/*</span>
-<a name="l03041"></a>03041 <span class="comment">     sinfo_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,</span>
-<a name="l03042"></a>03042 <span class="comment">     nclip,&avg,&sig_on_dif);</span>
-<a name="l03043"></a>03043 <span class="comment">     sinfo_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,</span>
-<a name="l03044"></a>03044 <span class="comment">     nclip,&avg,&sig_of_dif);</span>
-<a name="l03045"></a>03045 <span class="comment">   */</span>
-<a name="l03046"></a>03046 
-<a name="l03047"></a>03047    cpl_vector_delete(dit_on);
-<a name="l03048"></a>03048    cpl_vector_delete(dit_of);
-<a name="l03049"></a>03049    cpl_vector_delete(exptime_on);
-<a name="l03050"></a>03050    cpl_vector_delete(exptime_of);
-<a name="l03051"></a>03051 
-<a name="l03052"></a>03052    <span class="keywordflow">return</span> res_tbl;
-<a name="l03053"></a>03053 
-<a name="l03054"></a>03054   cleanup:
-<a name="l03055"></a>03055    <span class="keywordflow">return</span> NULL;
-<a name="l03056"></a>03056 
-<a name="l03057"></a>03057 }
-<a name="l03058"></a>03058 
-<a name="l03059"></a>03059 
-<a name="l03060"></a>03060 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03072"></a>03072 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03073"></a>03073 
-<a name="l03074"></a>03074 <span class="keywordtype">int</span>
-<a name="l03075"></a>03075 sinfo_image_estimate_noise(cpl_image* img,
-<a name="l03076"></a>03076                            <span class="keyword">const</span> <span class="keywordtype">int</span> noise_fit,
-<a name="l03077"></a>03077                            <span class="keywordtype">double</span>* centre,
-<a name="l03078"></a>03078                            <span class="keywordtype">double</span>* noise)
-<a name="l03079"></a>03079 {
-<a name="l03080"></a>03080 
-<a name="l03081"></a>03081    <span class="keywordtype">int</span> nbins=0;
-<a name="l03082"></a>03082 
-<a name="l03083"></a>03083    <span class="keywordtype">int</span> xsz=0;
-<a name="l03084"></a>03084    <span class="keywordtype">int</span> ysz=0;
-<a name="l03085"></a>03085    <span class="keywordtype">int</span> n=0;
-<a name="l03086"></a>03086    <span class="keywordtype">int</span> i=0;
-<a name="l03087"></a>03087    <span class="keywordtype">int</span> r=0;
-<a name="l03088"></a>03088 
-<a name="l03089"></a>03089    <span class="keywordtype">int</span> ndist=0;
-<a name="l03090"></a>03090    <span class="keywordtype">double</span> min_fct=HISTO_DIST_TEMPC_MIN_FCT;
-<a name="l03091"></a>03091    <span class="keywordtype">double</span> max_fct=HISTO_DIST_TEMPC_MAX_FCT;
-<a name="l03092"></a>03092    <span class="keywordtype">double</span> avg_d=0;
-<a name="l03093"></a>03093    <span class="keywordtype">double</span> std_d=0;
-<a name="l03094"></a>03094    <span class="keywordtype">double</span> hmin=0;
-<a name="l03095"></a>03095    <span class="keywordtype">double</span> hmax=0;
-<a name="l03096"></a>03096    <span class="keywordtype">double</span> kappa=3;
-<a name="l03097"></a>03097 
-<a name="l03098"></a>03098    <span class="keywordtype">double</span>* pdata=NULL;
-<a name="l03099"></a>03099    <span class="keywordtype">double</span>* disth=NULL;
-<a name="l03100"></a>03100    <span class="keywordtype">double</span>* distx=NULL;
-<a name="l03101"></a>03101 
-<a name="l03102"></a>03102    <span class="keywordtype">double</span> peak=0;
-<a name="l03103"></a>03103    <span class="keywordtype">double</span> tempc=0;
-<a name="l03104"></a>03104    <span class="keywordtype">double</span> value=0;
-<a name="l03105"></a>03105    <span class="keywordtype">double</span> x0=0;
-<a name="l03106"></a>03106    <span class="keywordtype">double</span> sigma=0;
-<a name="l03107"></a>03107    <span class="keywordtype">double</span> area=0;
-<a name="l03108"></a>03108    <span class="keywordtype">double</span> offset=0;
-<a name="l03109"></a>03109    <span class="comment">//double mse=0;</span>
-<a name="l03110"></a>03110    <span class="comment">//double chired=0;</span>
-<a name="l03111"></a>03111 
-<a name="l03112"></a>03112    cpl_table* data_tbl=NULL;
-<a name="l03113"></a>03113    cpl_table* histo=NULL;
-<a name="l03114"></a>03114    cpl_table* dist=NULL;
-<a name="l03115"></a>03115    cpl_table* min_xi=NULL;
-<a name="l03116"></a>03116    cpl_table* tmp_tbl1=NULL;
-<a name="l03117"></a>03117    cpl_table* tmp_tbl2=NULL;
-<a name="l03118"></a>03118    cpl_vector* vx=NULL;
-<a name="l03119"></a>03119    cpl_vector* vy=NULL;
-<a name="l03120"></a>03120    cpl_vector* sx=NULL;
-<a name="l03121"></a>03121    cpl_vector* sy=NULL;
-<a name="l03122"></a>03122 
-<a name="l03123"></a>03123    <span class="comment">// Get Object relevant information</span>
-<a name="l03124"></a>03124    check_nomsg(xsz=cpl_image_get_size_x(img));
-<a name="l03125"></a>03125    check_nomsg(ysz=cpl_image_get_size_y(img));
-<a name="l03126"></a>03126    n=xsz*ysz;
-<a name="l03127"></a>03127    nbins=sqrt(n);
-<a name="l03128"></a>03128    check_nomsg(data_tbl=cpl_table_new(n));
-<a name="l03129"></a>03129    check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));
-<a name="l03130"></a>03130 
-<a name="l03131"></a>03131    check_nomsg(pdata=cpl_image_get_data(img));
-<a name="l03132"></a>03132    <span class="keywordflow">for</span>(i=0;i<n;i++) {
-<a name="l03133"></a>03133       <span class="keywordflow">if</span>(!isnan(pdata[i])) {
-<a name="l03134"></a>03134          cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]);
-<a name="l03135"></a>03135          r++;
-<a name="l03136"></a>03136       }
-<a name="l03137"></a>03137    }
-<a name="l03138"></a>03138 
-<a name="l03139"></a>03139    check_nomsg(cpl_table_erase_invalid(data_tbl));
-<a name="l03140"></a>03140    check_nomsg(avg_d=cpl_table_get_column_mean(data_tbl,<span class="stringliteral">"DATA"</span>));
-<a name="l03141"></a>03141    check_nomsg(std_d=cpl_table_get_column_stdev(data_tbl,<span class="stringliteral">"DATA"</span>));
-<a name="l03142"></a>03142 
-<a name="l03143"></a>03143    cpl_table_save(data_tbl, NULL, NULL, <span class="stringliteral">"out_data.fits"</span>, CPL_IO_DEFAULT);
-<a name="l03144"></a>03144 
-<a name="l03145"></a>03145    hmin=avg_d-kappa*std_d;
-<a name="l03146"></a>03146    hmax=avg_d+kappa*std_d;
-<a name="l03147"></a>03147    <span class="comment">//sinfo_msg("mean=%g stdv=%g",avg_d,std_d);</span>
-<a name="l03148"></a>03148    <span class="comment">//sinfo_msg("hmin=%g hmax=%g",hmin,hmax);</span>
-<a name="l03149"></a>03149    <span class="comment">//sinfo_msg("Computes histogram");</span>
-<a name="l03150"></a>03150    ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);
-<a name="l03151"></a>03151 
-<a name="l03152"></a>03152    value=(double)(hmax-hmin)/nbins/2.;
-<a name="l03153"></a>03153    <span class="comment">//sinfo_msg("value=%10.8f",value);</span>
-<a name="l03154"></a>03154    <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_pippo.fits", CPL_IO_DEFAULT0);</span>
-<a name="l03155"></a>03155 
-<a name="l03156"></a>03156    check_nomsg(peak=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));
-<a name="l03157"></a>03157    <span class="comment">//sinfo_msg("peak=%f",peak);</span>
-<a name="l03158"></a>03158    sinfo_free_table(&tmp_tbl1);
-<a name="l03159"></a>03159 
-<a name="l03160"></a>03160    check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,CPL_EQUAL_TO,peak));
-<a name="l03161"></a>03161 
-<a name="l03162"></a>03162    <span class="comment">//cpl_table_save(tmp_tbl1, NULL, NULL, "out_tmp_tbl1.fits", CPL_IO_DEFAULT);</span>
-<a name="l03163"></a>03163 
-<a name="l03164"></a>03164 
-<a name="l03165"></a>03165    check_nomsg(*centre=cpl_table_get_column_mean(tmp_tbl1,<span class="stringliteral">"HL"</span>));
-<a name="l03166"></a>03166    <span class="comment">//sinfo_msg("Background level=%f",*centre);</span>
-<a name="l03167"></a>03167 
-<a name="l03168"></a>03168    sinfo_free_table(&tmp_tbl1);
-<a name="l03169"></a>03169    check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,
-<a name="l03170"></a>03170                                                  CPL_GREATER_THAN,
-<a name="l03171"></a>03171                                                  peak/HISTO_Y_CUT));
-<a name="l03172"></a>03172    sinfo_free_table(&tmp_tbl2);
-<a name="l03173"></a>03173    check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,
-<a name="l03174"></a>03174                                                  CPL_LESS_THAN,peak));
-<a name="l03175"></a>03175    sinfo_free_table(&tmp_tbl1);
-<a name="l03176"></a>03176 
-<a name="l03177"></a>03177    check_nomsg(tempc=*centre-cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"HL"</span>));
-<a name="l03178"></a>03178    <span class="comment">//sinfo_msg("min HX %f",cpl_table_get_column_min(tmp_tbl2,"HL"));</span>
-<a name="l03179"></a>03179    sinfo_free_table(&tmp_tbl2);
-<a name="l03180"></a>03180    <span class="comment">//sinfo_msg("Tempc=%f",tempc);</span>
-<a name="l03181"></a>03181    check_nomsg(dist=sinfo_where_tab_min_max(histo,<span class="stringliteral">"HL"</span>,
-<a name="l03182"></a>03182                                             CPL_GREATER_THAN,
-<a name="l03183"></a>03183                                             *centre-min_fct*tempc,
-<a name="l03184"></a>03184                                             CPL_NOT_GREATER_THAN,
-<a name="l03185"></a>03185                                             *centre+max_fct*tempc));
-<a name="l03186"></a>03186 
-<a name="l03187"></a>03187    offset=cpl_table_get_column_min(histo,<span class="stringliteral">"HY"</span>);
-<a name="l03188"></a>03188    sinfo_free_table(&histo);
-<a name="l03189"></a>03189 
-<a name="l03190"></a>03190 
-<a name="l03191"></a>03191    check_nomsg(ndist=cpl_table_get_nrow(dist));
-<a name="l03192"></a>03192    check_nomsg(cpl_table_cast_column(dist,<span class="stringliteral">"HY"</span>,<span class="stringliteral">"HYdouble"</span>,CPL_TYPE_DOUBLE));
-<a name="l03193"></a>03193    check_nomsg(disth=cpl_table_get_data_double(dist,<span class="stringliteral">"HYdouble"</span>));
-<a name="l03194"></a>03194    check_nomsg(distx=cpl_table_get_data_double(dist,<span class="stringliteral">"HL"</span>));
-<a name="l03195"></a>03195    cpl_table_save(dist, NULL, NULL, <span class="stringliteral">"out_dist.fits"</span>, CPL_IO_DEFAULT);
-<a name="l03196"></a>03196 
-<a name="l03197"></a>03197    <span class="comment">//TODO</span>
-<a name="l03198"></a>03198    <span class="comment">//gaussfit(distx,disty,dista,nterms=3);</span>
-<a name="l03199"></a>03199    <span class="comment">//*noise=dista[2];</span>
-<a name="l03200"></a>03200    *noise=tempc/2;
-<a name="l03201"></a>03201    <span class="comment">/* THIS DOES NOT WORK */</span>
-<a name="l03202"></a>03202    <span class="comment">//sinfo_msg("FWHM/2=%f",*noise);</span>
-<a name="l03203"></a>03203 
-<a name="l03204"></a>03204    <span class="keywordflow">if</span>(noise_fit == 1) {
-<a name="l03205"></a>03205       check_nomsg(vy=cpl_vector_wrap(ndist,disth));
-<a name="l03206"></a>03206       check_nomsg(vx=cpl_vector_wrap(ndist,distx));
-<a name="l03207"></a>03207       check_nomsg(sx=cpl_vector_new(ndist));
-<a name="l03208"></a>03208       check_nomsg(cpl_vector_fill(sx,1.));
-<a name="l03209"></a>03209       check_nomsg(sy=cpl_vector_duplicate(sx));
-<a name="l03210"></a>03210       x0=*centre;
-<a name="l03211"></a>03211       sigma=tempc/2;
-<a name="l03212"></a>03212 
-<a name="l03213"></a>03213       <span class="keywordflow">if</span>(CPL_ERROR_NONE != cpl_vector_fit_gaussian(vx,NULL,
-<a name="l03214"></a>03214                                                    vy,NULL,
-<a name="l03215"></a>03215                                                    CPL_FIT_ALL,
-<a name="l03216"></a>03216                                                    &x0,&sigma,&area,&offset,
-<a name="l03217"></a>03217                                                    NULL,NULL,NULL)) {
-<a name="l03218"></a>03218          cpl_error_reset();
-<a name="l03219"></a>03219       }
-<a name="l03220"></a>03220       <span class="comment">//sinfo_msg("Gauss fit parameters:"</span>
-<a name="l03221"></a>03221       <span class="comment">//          "x0=%f sigma=%f area=%f offset=%f mse=%f chired=%f",</span>
-<a name="l03222"></a>03222       <span class="comment">//           x0,sigma,area,offset,mse,chired);</span>
-<a name="l03223"></a>03223       <span class="comment">//sinfo_msg("Background level=%f",*centre);</span>
-<a name="l03224"></a>03224       <span class="comment">//sinfo_msg("Noise=%f",sigma);</span>
-<a name="l03225"></a>03225       *noise=sigma;
-<a name="l03226"></a>03226       sinfo_unwrap_vector(&vx);
-<a name="l03227"></a>03227       sinfo_unwrap_vector(&vy);
-<a name="l03228"></a>03228       sinfo_free_my_vector(&sx);
-<a name="l03229"></a>03229       sinfo_free_my_vector(&sy);
-<a name="l03230"></a>03230    }
-<a name="l03231"></a>03231    sinfo_free_table(&dist);
-<a name="l03232"></a>03232 
-<a name="l03233"></a>03233    <span class="keywordflow">return</span> 0;
-<a name="l03234"></a>03234 
-<a name="l03235"></a>03235   cleanup:
-<a name="l03236"></a>03236    sinfo_free_table(&min_xi);
-<a name="l03237"></a>03237    sinfo_free_table(&tmp_tbl1);
-<a name="l03238"></a>03238    sinfo_free_table(&tmp_tbl2);
-<a name="l03239"></a>03239    sinfo_free_table(&histo);
-<a name="l03240"></a>03240    sinfo_free_table(&dist);
-<a name="l03241"></a>03241    sinfo_free_table(&data_tbl);
-<a name="l03242"></a>03242    sinfo_free_my_vector(&sx);
-<a name="l03243"></a>03243    sinfo_free_my_vector(&sy);
-<a name="l03244"></a>03244    sinfo_unwrap_vector(&vx);
-<a name="l03245"></a>03245    sinfo_unwrap_vector(&vy);
-<a name="l03246"></a>03246 
-<a name="l03247"></a>03247    <span class="keywordflow">return</span> -1;
-<a name="l03248"></a>03248 
-<a name="l03249"></a>03249 }
-<a name="l03250"></a>03250 
-<a name="l03251"></a>03251 
-<a name="l03252"></a>03252 
-<a name="l03253"></a>03253 
-<a name="l03254"></a>03254 
-<a name="l03255"></a>03255 cpl_table* sinfo_compute_linearity(cpl_frameset* son, cpl_frameset* sof)
-<a name="l03256"></a>03256 {
-<a name="l03257"></a>03257 
-<a name="l03258"></a>03258    cpl_frame*    frm=NULL;
-<a name="l03259"></a>03259 
-<a name="l03260"></a>03260    <span class="keywordtype">int</span>* status=0;
-<a name="l03261"></a>03261    <span class="keywordtype">int</span> non=0;
-<a name="l03262"></a>03262    <span class="keywordtype">int</span> nof=0;
-<a name="l03263"></a>03263    <span class="keywordtype">int</span> nfr=0;
-<a name="l03264"></a>03264    <span class="keywordtype">int</span> i=0;
-<a name="l03265"></a>03265    <span class="keywordtype">double</span> med_on=0;
-<a name="l03266"></a>03266    <span class="keywordtype">double</span> avg_on=0;
-<a name="l03267"></a>03267    <span class="keywordtype">double</span> med_of=0;
-<a name="l03268"></a>03268    <span class="keywordtype">double</span> avg_of=0;
-<a name="l03269"></a>03269    <span class="keywordtype">double</span> med_dit=0;
-<a name="l03270"></a>03270    <span class="keywordtype">double</span> avg_dit=0;
-<a name="l03271"></a>03271 
-<a name="l03272"></a>03272    <span class="keywordtype">double</span> med=0;
-<a name="l03273"></a>03273    <span class="keywordtype">double</span> avg=0;
-<a name="l03274"></a>03274 
-<a name="l03275"></a>03275    <span class="keywordtype">char</span>* name=NULL;
-<a name="l03276"></a>03276    cpl_image* img=NULL;
-<a name="l03277"></a>03277    cpl_vector* vec_adl=NULL;
-<a name="l03278"></a>03278    cpl_vector* vec_dit=NULL;
-<a name="l03279"></a>03279    cpl_vector* vec_avg=NULL;
-<a name="l03280"></a>03280    cpl_vector* vec_med=NULL;
-<a name="l03281"></a>03281    cpl_vector* vec_avg_dit=NULL;
-<a name="l03282"></a>03282    cpl_vector* vec_med_dit=NULL;
-<a name="l03283"></a>03283    cpl_propertylist* plist=NULL;
-<a name="l03284"></a>03284 
-<a name="l03285"></a>03285    <span class="keywordtype">double</span> dit=0;
-<a name="l03286"></a>03286    cpl_table* lin_tbl=NULL;
-<a name="l03287"></a>03287 
-<a name="l03288"></a>03288 
-<a name="l03289"></a>03289    non = cpl_frameset_get_size(son);
-<a name="l03290"></a>03290    nof = cpl_frameset_get_size(sof);
-<a name="l03291"></a>03291    nfr = (non <= nof) ? non : nof;
-<a name="l03292"></a>03292 
-<a name="l03293"></a>03293    lin_tbl=cpl_table_new(nfr);
-<a name="l03294"></a>03294    cpl_table_new_column(lin_tbl,<span class="stringliteral">"med"</span>, CPL_TYPE_DOUBLE);
-<a name="l03295"></a>03295    cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg"</span>, CPL_TYPE_DOUBLE);
-<a name="l03296"></a>03296    cpl_table_new_column(lin_tbl,<span class="stringliteral">"med_dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l03297"></a>03297    cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg_dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l03298"></a>03298    cpl_table_new_column(lin_tbl,<span class="stringliteral">"dit"</span>, CPL_TYPE_DOUBLE);
-<a name="l03299"></a>03299    vec_med=cpl_vector_new(nfr);
-<a name="l03300"></a>03300    vec_avg=cpl_vector_new(nfr);
-<a name="l03301"></a>03301    vec_med_dit=cpl_vector_new(nfr);
-<a name="l03302"></a>03302    vec_avg_dit=cpl_vector_new(nfr);
-<a name="l03303"></a>03303    vec_dit=cpl_vector_new(nfr);
-<a name="l03304"></a>03304    vec_adl=cpl_vector_new(nfr);
-<a name="l03305"></a>03305 
-<a name="l03306"></a>03306    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l03307"></a>03307       frm=cpl_frameset_get_frame(son,i);
-<a name="l03308"></a>03308       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l03309"></a>03309       img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l03310"></a>03310       med_on=cpl_image_get_median(img);
-<a name="l03311"></a>03311       avg_on=cpl_image_get_mean(img);
-<a name="l03312"></a>03312       cpl_image_delete(img);
-<a name="l03313"></a>03313 
-<a name="l03314"></a>03314       frm=cpl_frameset_get_frame(sof,i);
-<a name="l03315"></a>03315       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);
-<a name="l03316"></a>03316       img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l03317"></a>03317       med_of=cpl_image_get_median(img);
-<a name="l03318"></a>03318       avg_of=cpl_image_get_mean(img);
-<a name="l03319"></a>03319       cpl_image_delete(img);
-<a name="l03320"></a>03320 
-<a name="l03321"></a>03321       med=med_on-med_of;
-<a name="l03322"></a>03322       avg=avg_on-avg_of;
-<a name="l03323"></a>03323       plist=cpl_propertylist_load(name,0);
-<a name="l03324"></a>03324       dit=(double)sinfo_pfits_get_dit(plist);
-<a name="l03325"></a>03325       cpl_propertylist_delete(plist);
-<a name="l03326"></a>03326       avg_dit=avg/dit;
-<a name="l03327"></a>03327       med_dit=med/dit;
-<a name="l03328"></a>03328 
-<a name="l03329"></a>03329       cpl_vector_set(vec_dit,i,dit);
-<a name="l03330"></a>03330       cpl_vector_set(vec_avg,i,avg);
-<a name="l03331"></a>03331       cpl_vector_set(vec_med,i,med);
-<a name="l03332"></a>03332       cpl_vector_set(vec_avg_dit,i,avg_dit);
-<a name="l03333"></a>03333       cpl_vector_set(vec_med_dit,i,med_dit);
-<a name="l03334"></a>03334 
-<a name="l03335"></a>03335       cpl_table_set_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,dit);
-<a name="l03336"></a>03336       cpl_table_set_double(lin_tbl,<span class="stringliteral">"med"</span>,i,med);
-<a name="l03337"></a>03337       cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg"</span>,i,avg);
-<a name="l03338"></a>03338       cpl_table_set_double(lin_tbl,<span class="stringliteral">"med_dit"</span>,i,med_dit);
-<a name="l03339"></a>03339       cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg_dit"</span>,i,avg_dit);
-<a name="l03340"></a>03340 
-<a name="l03341"></a>03341    }
-<a name="l03342"></a>03342    cpl_table_new_column(lin_tbl,<span class="stringliteral">"adl"</span>, CPL_TYPE_DOUBLE);
-<a name="l03343"></a>03343    med_dit=cpl_vector_get_mean(vec_med_dit);
-<a name="l03344"></a>03344    avg_dit=cpl_vector_get_mean(vec_avg_dit);
-<a name="l03345"></a>03345 
-<a name="l03346"></a>03346    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {
-<a name="l03347"></a>03347       dit = cpl_table_get_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,status);
-<a name="l03348"></a>03348       cpl_vector_set(vec_adl,i,dit*med_dit);
-<a name="l03349"></a>03349       cpl_table_set_double(lin_tbl,<span class="stringliteral">"adl"</span>,i,dit*med_dit);
-<a name="l03350"></a>03350    }
-<a name="l03351"></a>03351 
-<a name="l03352"></a>03352    cpl_vector_delete(vec_dit);
-<a name="l03353"></a>03353    cpl_vector_delete(vec_adl);
-<a name="l03354"></a>03354    cpl_vector_delete(vec_avg);
-<a name="l03355"></a>03355    cpl_vector_delete(vec_med);
-<a name="l03356"></a>03356    cpl_vector_delete(vec_avg_dit);
-<a name="l03357"></a>03357    cpl_vector_delete(vec_med_dit);
-<a name="l03358"></a>03358 
-<a name="l03359"></a>03359 
-<a name="l03360"></a>03360    <span class="keywordflow">return</span> lin_tbl;
-<a name="l03361"></a>03361 
-<a name="l03362"></a>03362 }
-<a name="l03363"></a>03363 
-<a name="l03364"></a>03364 <span class="comment">/*--------------------------------------------------------------------*/</span>
-<a name="l03371"></a>03371 <span class="comment">/*--------------------------------------------------------------------*/</span>
-<a name="l03372"></a>03372 <span class="keywordtype">int</span>
-<a name="l03373"></a>03373 sinfo_get_ron(cpl_frameset    *   framelist,
-<a name="l03374"></a>03374               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmin,
-<a name="l03375"></a>03375               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmax,
-<a name="l03376"></a>03376               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymin,
-<a name="l03377"></a>03377               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymax,
-<a name="l03378"></a>03378               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_hsize,
-<a name="l03379"></a>03379               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_nsamp,
-<a name="l03380"></a>03380               <span class="keywordtype">double</span>** ron)
-<a name="l03381"></a>03381 {
-<a name="l03382"></a>03382    cpl_imagelist   *   iset =NULL;
-<a name="l03383"></a>03383    cpl_image       *   tmp_im =NULL;
-<a name="l03384"></a>03384    cpl_size                 zone[4] ;
-<a name="l03385"></a>03385    <span class="keywordtype">double</span>              rms  =0;
-<a name="l03386"></a>03386    <span class="keywordtype">double</span>              ndit =0;
-<a name="l03387"></a>03387    cpl_frame       *   frame =NULL;
-<a name="l03388"></a>03388    <span class="keywordtype">int</span>                 i;
-<a name="l03389"></a>03389    cpl_propertylist* plist=NULL;
-<a name="l03390"></a>03390 
-<a name="l03391"></a>03391    <span class="comment">/* Test entries */</span>
-<a name="l03392"></a>03392 
-<a name="l03393"></a>03393    <span class="keywordflow">if</span> (framelist == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03394"></a>03394 
-<a name="l03395"></a>03395    <span class="comment">/* Load the current set */</span>
-<a name="l03396"></a>03396    <span class="keywordflow">if</span> ((iset = sinfo_new_frameset_to_iset(framelist)) == NULL) {
-<a name="l03397"></a>03397       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load the data"</span>) ;
-<a name="l03398"></a>03398       <span class="keywordflow">return</span> -1 ;
-<a name="l03399"></a>03399    }
-<a name="l03400"></a>03400 
-<a name="l03401"></a>03401    <span class="comment">/* Initialise */</span>
-<a name="l03402"></a>03402    zone[0]=ron_xmin;
-<a name="l03403"></a>03403    zone[1]=ron_xmax;
-<a name="l03404"></a>03404    zone[2]=ron_ymin;
-<a name="l03405"></a>03405    zone[3]=ron_ymax;
-<a name="l03406"></a>03406 
-<a name="l03407"></a>03407    <span class="comment">/* Loop on all pairs */</span>
-<a name="l03408"></a>03408    <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(iset)-1 ; i++) {
-<a name="l03409"></a>03409 
-<a name="l03410"></a>03410       <span class="comment">/* Compute the current subtracted image */</span>
-<a name="l03411"></a>03411       <span class="keywordflow">if</span> ((tmp_im=cpl_image_subtract_create(cpl_imagelist_get(iset,i),
-<a name="l03412"></a>03412                                             cpl_imagelist_get(iset, i+1)))
-<a name="l03413"></a>03413           == NULL) {
-<a name="l03414"></a>03414          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot subtract the images"</span>) ;
-<a name="l03415"></a>03415          sinfo_free_imagelist(&iset) ;
-<a name="l03416"></a>03416          <span class="keywordflow">return</span> -1 ;
-<a name="l03417"></a>03417       }
-<a name="l03418"></a>03418 
-<a name="l03419"></a>03419       <span class="comment">/* Compute the read-out noise */</span>
-<a name="l03420"></a>03420       <span class="keywordflow">if</span> (cpl_flux_get_noise_window(tmp_im, zone, ron_hsize,
-<a name="l03421"></a>03421                                     ron_nsamp, &rms, NULL) != CPL_ERROR_NONE) {
-<a name="l03422"></a>03422          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot compute the RON"</span>) ;
-<a name="l03423"></a>03423          sinfo_free_image(&tmp_im) ;
-<a name="l03424"></a>03424          sinfo_free_imagelist(&iset) ;
-<a name="l03425"></a>03425          <span class="keywordflow">return</span> -1 ;
-<a name="l03426"></a>03426       }
-<a name="l03427"></a>03427       sinfo_free_image(&tmp_im) ;
-<a name="l03428"></a>03428       <span class="comment">/* Normalise the RON with NDIT */</span>
-<a name="l03429"></a>03429       frame = cpl_frameset_get_frame(framelist, i) ;
-<a name="l03430"></a>03430       cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(frame),
-<a name="l03431"></a>03431                                                0));
-<a name="l03432"></a>03432       ndit=sinfo_pfits_get_ndit(plist);
-<a name="l03433"></a>03433       sinfo_free_propertylist(&plist);
-<a name="l03434"></a>03434 
-<a name="l03435"></a>03435       (*ron)[i] = rms * sqrt(ndit/2.0) ;
-<a name="l03436"></a>03436 
-<a name="l03437"></a>03437    }
-<a name="l03438"></a>03438 
-<a name="l03439"></a>03439    <span class="comment">/* Free and return */</span>
-<a name="l03440"></a>03440    sinfo_free_imagelist(&iset) ;
-<a name="l03441"></a>03441    <span class="keywordflow">return</span> 0 ;
-<a name="l03442"></a>03442 
-<a name="l03443"></a>03443   cleanup:
-<a name="l03444"></a>03444    sinfo_free_image(&tmp_im);
-<a name="l03445"></a>03445    sinfo_free_imagelist(&iset);
-<a name="l03446"></a>03446    sinfo_free_propertylist(&plist);
-<a name="l03447"></a>03447    <span class="keywordflow">return</span> -1;
-<a name="l03448"></a>03448 
-<a name="l03449"></a>03449 }
-<a name="l03450"></a>03450 
-<a name="l03451"></a>03451 
-<a name="l03452"></a>03452 
-<a name="l03453"></a>03453 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03459"></a>03459 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03460"></a>03460 <span class="keywordtype">int</span> sinfo_stack_get_pro_tag(<span class="keywordtype">char</span> * tag_in, <span class="keywordtype">char</span>* tag_out)
-<a name="l03461"></a>03461 {
-<a name="l03462"></a>03462    <span class="comment">/* Test entries */</span>
-<a name="l03463"></a>03463    <span class="keywordflow">if</span> (tag_in == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03464"></a>03464    <span class="comment">/* here for the moment we set the same PRO ID as a non stacked frame */</span>
-<a name="l03465"></a>03465    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_LAMP_DITHER) == 0 ) {
-<a name="l03466"></a>03466       strcpy(tag_out,PRO_WAVE_LAMP_STACKED);
-<a name="l03467"></a>03467       <span class="keywordflow">return</span> 0 ;
-<a name="l03468"></a>03468    }
-<a name="l03469"></a>03469 
-<a name="l03470"></a>03470 
-<a name="l03471"></a>03471    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_LAMP) == 0 ) {
-<a name="l03472"></a>03472       strcpy(tag_out,PRO_WAVE_LAMP_STACKED);
-<a name="l03473"></a>03473       <span class="keywordflow">return</span> 0 ;
-<a name="l03474"></a>03474    }
-<a name="l03475"></a>03475 
-<a name="l03476"></a>03476    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_NS_DITHER) == 0 ) {
-<a name="l03477"></a>03477       strcpy(tag_out,PRO_WAVE_NS_STACKED);
-<a name="l03478"></a>03478       <span class="keywordflow">return</span> 0 ;
-<a name="l03479"></a>03479    }
-<a name="l03480"></a>03480 
-<a name="l03481"></a>03481 
-<a name="l03482"></a>03482    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_NS) == 0 ) {
-<a name="l03483"></a>03483       strcpy(tag_out,PRO_WAVE_NS_STACKED);
-<a name="l03484"></a>03484       <span class="keywordflow">return</span> 0 ;
-<a name="l03485"></a>03485    }
-<a name="l03486"></a>03486 
-<a name="l03487"></a>03487 
-<a name="l03488"></a>03488    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_LAMP) == 0 ) {
-<a name="l03489"></a>03489       strcpy(tag_out,PRO_FIBRE_LAMP_STACKED);
-<a name="l03490"></a>03490       <span class="keywordflow">return</span> 0 ;
-<a name="l03491"></a>03491    }
-<a name="l03492"></a>03492 
-<a name="l03493"></a>03493    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_EW) == 0 ) {
-<a name="l03494"></a>03494       strcpy(tag_out,PRO_FIBRE_EW_STACKED);
-<a name="l03495"></a>03495       <span class="keywordflow">return</span> 0 ;
-<a name="l03496"></a>03496    }
-<a name="l03497"></a>03497 
-<a name="l03498"></a>03498    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_NS) == 0 ) {
-<a name="l03499"></a>03499       strcpy(tag_out,PRO_FIBRE_NS_STACKED);
-<a name="l03500"></a>03500       <span class="keywordflow">return</span> 0 ;
-<a name="l03501"></a>03501    }
-<a name="l03502"></a>03502 
-<a name="l03503"></a>03503 
-<a name="l03504"></a>03504    <span class="keywordflow">if</span> (strcmp(tag_in,PRO_FIBRE_NS_STACKED_ON) == 0 ) {
-<a name="l03505"></a>03505       strcpy(tag_out,PRO_FIBRE_NS_STACKED);
-<a name="l03506"></a>03506       <span class="keywordflow">return</span> 0 ;
-<a name="l03507"></a>03507    }
-<a name="l03508"></a>03508 
-<a name="l03509"></a>03509    <span class="keywordflow">if</span> (strcmp(tag_in,PRO_FIBRE_NS_STACKED) == 0 ) {
-<a name="l03510"></a>03510       strcpy(tag_out,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l03511"></a>03511       <span class="keywordflow">return</span> 0 ;
-<a name="l03512"></a>03512    }
-<a name="l03513"></a>03513 
-<a name="l03514"></a>03514 
-<a name="l03515"></a>03515    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_SLIT_LAMP) == 0 ) {
-<a name="l03516"></a>03516       strcpy(tag_out,PRO_SLIT_LAMP_STACKED);
-<a name="l03517"></a>03517       <span class="keywordflow">return</span> 0 ;
-<a name="l03518"></a>03518    }
-<a name="l03519"></a>03519 
-<a name="l03520"></a>03520 
-<a name="l03521"></a>03521    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"FLUX"</span>) != NULL ) {
-<a name="l03522"></a>03522       strcpy(tag_out,PRO_FLUX_LAMP_STACKED);
-<a name="l03523"></a>03523       <span class="keywordflow">return</span> 0 ;
-<a name="l03524"></a>03524    }
-<a name="l03525"></a>03525 
-<a name="l03526"></a>03526    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"PSF"</span>) != NULL ) {
-<a name="l03527"></a>03527       strcpy(tag_out,PRO_PSF_CALIBRATOR_STACKED);
-<a name="l03528"></a>03528       <span class="keywordflow">return</span> 0 ;
-<a name="l03529"></a>03529    }
-<a name="l03530"></a>03530 
-<a name="l03531"></a>03531 
-<a name="l03532"></a>03532    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"FOCUS"</span>) != NULL ) {
-<a name="l03533"></a>03533       strcpy(tag_out,PRO_FOCUS_STACKED);
-<a name="l03534"></a>03534       <span class="keywordflow">return</span> 0 ;
-<a name="l03535"></a>03535    }
-<a name="l03536"></a>03536 
-<a name="l03537"></a>03537    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"OBJECT_NODDING"</span>) != NULL ) {
-<a name="l03538"></a>03538       strcpy(tag_out,PRO_OBJECT_NODDING_STACKED);
-<a name="l03539"></a>03539       <span class="keywordflow">return</span> 0 ;
-<a name="l03540"></a>03540    }
-<a name="l03541"></a>03541 
-<a name="l03542"></a>03542    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"SKY_NODDING"</span>) != NULL ) {
-<a name="l03543"></a>03543       strcpy(tag_out,PRO_SKY_NODDING_STACKED);
-<a name="l03544"></a>03544       <span class="keywordflow">return</span> 0 ;
-<a name="l03545"></a>03545    }
-<a name="l03546"></a>03546 
-<a name="l03547"></a>03547    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"STD_NODDING"</span>) != NULL ) {
-<a name="l03548"></a>03548       strcpy(tag_out,PRO_STD_NODDING_STACKED);
-<a name="l03549"></a>03549       <span class="keywordflow">return</span> 0 ;
-<a name="l03550"></a>03550    }
-<a name="l03551"></a>03551 
-<a name="l03552"></a>03552    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"OBJECT_SKYSPIDER"</span>) != NULL ) {
-<a name="l03553"></a>03553       strcpy(tag_out,PRO_OBJECT_SKYSPIDER_STACKED);
-<a name="l03554"></a>03554       <span class="keywordflow">return</span> 0 ;
-<a name="l03555"></a>03555    }
-<a name="l03556"></a>03556 
-<a name="l03557"></a>03557 
-<a name="l03558"></a>03558    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD) != NULL ) {
-<a name="l03559"></a>03559       strcpy(tag_out,PRO_STD_STACKED);
-<a name="l03560"></a>03560       <span class="keywordflow">return</span> 0 ;
-<a name="l03561"></a>03561    }
-<a name="l03562"></a>03562 
-<a name="l03563"></a>03563 
-<a name="l03564"></a>03564    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_STD) != NULL ) {
-<a name="l03565"></a>03565       strcpy(tag_out,PRO_SKY_STD_STACKED);
-<a name="l03566"></a>03566       <span class="keywordflow">return</span> 0 ;
-<a name="l03567"></a>03567    }
-<a name="l03568"></a>03568 
-<a name="l03569"></a>03569    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_OH) != NULL ) {
-<a name="l03570"></a>03570       strcpy(tag_out,PRO_SKY_OH_STACKED);
-<a name="l03571"></a>03571       <span class="keywordflow">return</span> 0 ;
-<a name="l03572"></a>03572    }
-<a name="l03573"></a>03573 
-<a name="l03574"></a>03574    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_PSF_CALIBRATOR) != NULL ) {
-<a name="l03575"></a>03575       strcpy(tag_out,PRO_SKY_PSF_CALIBRATOR_STACKED);
-<a name="l03576"></a>03576       <span class="keywordflow">return</span> 0 ;
-<a name="l03577"></a>03577    }
-<a name="l03578"></a>03578 
-<a name="l03579"></a>03579    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD_STAR) != NULL ) {
-<a name="l03580"></a>03580       strcpy(tag_out,PRO_STD_STAR_STACKED);
-<a name="l03581"></a>03581       <span class="keywordflow">return</span> 0 ;
-<a name="l03582"></a>03582    }
-<a name="l03583"></a>03583 
-<a name="l03584"></a>03584    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD_STAR) != NULL ) {
-<a name="l03585"></a>03585       strcpy(tag_out,PRO_STD_STAR_DITHER_STACKED);
-<a name="l03586"></a>03586       <span class="keywordflow">return</span> 0 ;
-<a name="l03587"></a>03587    }
-<a name="l03588"></a>03588 
-<a name="l03589"></a>03589    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY) != NULL ) {
-<a name="l03590"></a>03590       strcpy(tag_out,PRO_SKY_STACKED);
-<a name="l03591"></a>03591       <span class="keywordflow">return</span> 0 ;
-<a name="l03592"></a>03592    }
-<a name="l03593"></a>03593 
-<a name="l03594"></a>03594 
-<a name="l03595"></a>03595    <span class="keywordflow">return</span> 1 ;
-<a name="l03596"></a>03596 }
-<a name="l03597"></a>03597 
-<a name="l03598"></a>03598 
-<a name="l03599"></a>03599 <span class="keywordtype">int</span> sinfo_is_dark(<span class="keywordtype">char</span> * tag)
-<a name="l03600"></a>03600 {
-<a name="l03601"></a>03601    <span class="comment">/* Test entries */</span>
-<a name="l03602"></a>03602    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03603"></a>03603 
-<a name="l03604"></a>03604    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l03605"></a>03605    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_DARK)) <span class="keywordflow">return</span> 1 ;
-<a name="l03606"></a>03606    <span class="keywordflow">return</span> 0 ;
-<a name="l03607"></a>03607 }
-<a name="l03608"></a>03608 
-<a name="l03609"></a>03609 <span class="keywordtype">int</span> sinfo_is_flat_bp(<span class="keywordtype">char</span> * tag)
-<a name="l03610"></a>03610 {
-<a name="l03611"></a>03611    <span class="comment">/* Test entries */</span>
-<a name="l03612"></a>03612    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03613"></a>03613 
-<a name="l03614"></a>03614    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03615"></a>03615    <span class="keywordflow">return</span> 0 ;
-<a name="l03616"></a>03616 }
-<a name="l03617"></a>03617 
-<a name="l03618"></a>03618 <span class="keywordtype">int</span> sinfo_is_flat_lindet(<span class="keywordtype">char</span> * tag)
-<a name="l03619"></a>03619 {
-<a name="l03620"></a>03620    <span class="comment">/* Test entries */</span>
-<a name="l03621"></a>03621    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03622"></a>03622 
-<a name="l03623"></a>03623    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03624"></a>03624    <span class="keywordflow">return</span> 0 ;
-<a name="l03625"></a>03625 }
-<a name="l03626"></a>03626 
-<a name="l03627"></a>03627 
-<a name="l03628"></a>03628 <span class="keywordtype">int</span> sinfo_blank2dot(<span class="keyword">const</span> <span class="keywordtype">char</span> * in, <span class="keywordtype">char</span>* ou)
-<a name="l03629"></a>03629 {
-<a name="l03630"></a>03630    <span class="keywordtype">int</span> len=0;
-<a name="l03631"></a>03631    <span class="keywordtype">int</span> i=0;
-<a name="l03632"></a>03632 
-<a name="l03633"></a>03633    strcpy(ou,in);
-<a name="l03634"></a>03634    len = strlen(in);
-<a name="l03635"></a>03635    <span class="keywordflow">for</span> (i=0;i<len;i++)
-<a name="l03636"></a>03636    {
-<a name="l03637"></a>03637       <span class="keywordflow">if</span> (in[i] == <span class="charliteral">' '</span>) {
-<a name="l03638"></a>03638          ou[i] =  <span class="charliteral">'.'</span>;
-<a name="l03639"></a>03639       }
-<a name="l03640"></a>03640    }
-<a name="l03641"></a>03641    <span class="keywordflow">return</span> 0;
-<a name="l03642"></a>03642 }
-<a name="l03643"></a>03643 
-<a name="l03644"></a>03644 
-<a name="l03645"></a>03645 <span class="keywordtype">int</span> sinfo_is_sky_flat(<span class="keywordtype">char</span> * tag)
-<a name="l03646"></a>03646 {
-<a name="l03647"></a>03647    <span class="comment">/* Test entries */</span>
-<a name="l03648"></a>03648    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03649"></a>03649    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_SKY)) <span class="keywordflow">return</span> 1 ;
-<a name="l03650"></a>03650    <span class="keywordflow">return</span> 0 ;
-<a name="l03651"></a>03651 }
-<a name="l03652"></a>03652 
-<a name="l03653"></a>03653 
-<a name="l03654"></a>03654 
-<a name="l03655"></a>03655 <span class="keywordtype">int</span> sinfo_is_master_flat(<span class="keywordtype">char</span> * tag)
-<a name="l03656"></a>03656 {
-<a name="l03657"></a>03657    <span class="comment">/* Test entries */</span>
-<a name="l03658"></a>03658    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03659"></a>03659 
-<a name="l03660"></a>03660    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03661"></a>03661    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;
-<a name="l03662"></a>03662    <span class="keywordflow">return</span> 0 ;
-<a name="l03663"></a>03663 }
-<a name="l03664"></a>03664 
-<a name="l03665"></a>03665 <span class="keywordtype">int</span> sinfo_is_master_flat_dither(<span class="keywordtype">char</span> * tag)
-<a name="l03666"></a>03666 {
-<a name="l03667"></a>03667    <span class="comment">/* Test entries */</span>
-<a name="l03668"></a>03668    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03669"></a>03669 
-<a name="l03670"></a>03670    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;
-<a name="l03671"></a>03671    <span class="keywordflow">return</span> 0 ;
-<a name="l03672"></a>03672 }
-<a name="l03673"></a>03673 
-<a name="l03674"></a>03674 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03680"></a>03680 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03681"></a>03681 <span class="keywordtype">int</span> sinfo_is_stack(<span class="keywordtype">char</span> * tag)
-<a name="l03682"></a>03682 {
-<a name="l03683"></a>03683    <span class="comment">/* Test entries */</span>
-<a name="l03684"></a>03684    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03685"></a>03685 
-<a name="l03686"></a>03686    <span class="keywordflow">if</span> (strstr(tag, PRO_STACKED) != NULL) <span class="keywordflow">return</span> 1 ;
-<a name="l03687"></a>03687    <span class="keywordflow">return</span> 0 ;
-<a name="l03688"></a>03688 }
-<a name="l03689"></a>03689 
-<a name="l03690"></a>03690 <span class="keywordtype">int</span> sinfo_is_mflat(<span class="keywordtype">char</span> * tag)
-<a name="l03691"></a>03691 {
-<a name="l03692"></a>03692    <span class="comment">/* Test entries */</span>
-<a name="l03693"></a>03693    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03694"></a>03694 
-<a name="l03695"></a>03695    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03696"></a>03696    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;
-<a name="l03697"></a>03697    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;
-<a name="l03698"></a>03698    <span class="keywordflow">return</span> 0 ;
-<a name="l03699"></a>03699 }
-<a name="l03700"></a>03700 
-<a name="l03701"></a>03701 
-<a name="l03702"></a>03702 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03708"></a>03708 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03709"></a>03709 <span class="keywordtype">int</span> sinfo_is_psf_calibrator_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03710"></a>03710 {
-<a name="l03711"></a>03711    <span class="comment">/* Test entries */</span>
-<a name="l03712"></a>03712    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03713"></a>03713 
-<a name="l03714"></a>03714    <span class="keywordflow">if</span> (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03715"></a>03715    <span class="keywordflow">return</span> 0 ;
-<a name="l03716"></a>03716 }
-<a name="l03717"></a>03717 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03723"></a>03723 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03724"></a>03724 <span class="keywordtype">int</span> sinfo_is_focus_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03725"></a>03725 {
-<a name="l03726"></a>03726    <span class="comment">/* Test entries */</span>
-<a name="l03727"></a>03727    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03728"></a>03728 
-<a name="l03729"></a>03729    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FOCUS_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03730"></a>03730    <span class="keywordflow">return</span> 0 ;
-<a name="l03731"></a>03731 }
-<a name="l03732"></a>03732 
-<a name="l03733"></a>03733 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03739"></a>03739 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03740"></a>03740 <span class="keywordtype">int</span> sinfo_is_lamp_wave_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03741"></a>03741 {
-<a name="l03742"></a>03742    <span class="comment">/* Test entries */</span>
-<a name="l03743"></a>03743    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03744"></a>03744 
-<a name="l03745"></a>03745    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_LAMP_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03746"></a>03746    <span class="keywordflow">return</span> 0 ;
-<a name="l03747"></a>03747 }
-<a name="l03748"></a>03748 
-<a name="l03749"></a>03749 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03755"></a>03755 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03756"></a>03756 <span class="keywordtype">int</span> sinfo_is_lamp_flux_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03757"></a>03757 {
-<a name="l03758"></a>03758    <span class="comment">/* Test entries */</span>
-<a name="l03759"></a>03759    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03760"></a>03760 
-<a name="l03761"></a>03761    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FLUX_LAMP_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03762"></a>03762    <span class="keywordflow">return</span> 0 ;
-<a name="l03763"></a>03763 }
-<a name="l03764"></a>03764 
-<a name="l03765"></a>03765 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03771"></a>03771 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03772"></a>03772 <span class="keywordtype">int</span> sinfo_is_object_nodding_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03773"></a>03773 {
-<a name="l03774"></a>03774    <span class="comment">/* Test entries */</span>
-<a name="l03775"></a>03775    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03776"></a>03776 
-<a name="l03777"></a>03777    <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBJECT_NODDING_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03778"></a>03778    <span class="keywordflow">return</span> 0 ;
-<a name="l03779"></a>03779 }
-<a name="l03780"></a>03780 
-<a name="l03781"></a>03781 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03787"></a>03787 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03788"></a>03788 <span class="keywordtype">int</span> sinfo_is_object_skyspider_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03789"></a>03789 {
-<a name="l03790"></a>03790    <span class="comment">/* Test entries */</span>
-<a name="l03791"></a>03791    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03792"></a>03792 
-<a name="l03793"></a>03793    <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBJECT_SKYSPIDER_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03794"></a>03794    <span class="keywordflow">return</span> 0 ;
-<a name="l03795"></a>03795 }
-<a name="l03796"></a>03796 
-<a name="l03797"></a>03797 
-<a name="l03798"></a>03798 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03804"></a>03804 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03805"></a>03805 <span class="keywordtype">int</span> sinfo_is_sky_nodding_stacked(<span class="keywordtype">char</span> * tag)
-<a name="l03806"></a>03806 {
-<a name="l03807"></a>03807    <span class="comment">/* Test entries */</span>
-<a name="l03808"></a>03808    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03809"></a>03809 
-<a name="l03810"></a>03810    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_NODDING_STACKED)) <span class="keywordflow">return</span> 1 ;
-<a name="l03811"></a>03811    <span class="keywordflow">return</span> 0 ;
-<a name="l03812"></a>03812 }
-<a name="l03813"></a>03813 
-<a name="l03814"></a>03814 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03820"></a>03820 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03821"></a>03821 <span class="keywordtype">int</span> sinfo_is_wavemap(<span class="keywordtype">char</span> * tag)
-<a name="l03822"></a>03822 {
-<a name="l03823"></a>03823    <span class="comment">/* Test entries */</span>
-<a name="l03824"></a>03824    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03825"></a>03825 
-<a name="l03826"></a>03826    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_MAP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03827"></a>03827    <span class="keywordflow">return</span> 0 ;
-<a name="l03828"></a>03828 }
-<a name="l03829"></a>03829 
-<a name="l03830"></a>03830 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03836"></a>03836 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03837"></a>03837 <span class="keywordtype">int</span> sinfo_is_halosp(<span class="keywordtype">char</span> * tag)
-<a name="l03838"></a>03838 {
-<a name="l03839"></a>03839    <span class="comment">/* Test entries */</span>
-<a name="l03840"></a>03840    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03841"></a>03841 
-<a name="l03842"></a>03842    <span class="keywordflow">if</span> (!strcmp(tag, PRO_HALO_SPECT)) <span class="keywordflow">return</span> 1 ;
-<a name="l03843"></a>03843    <span class="keywordflow">return</span> 0 ;
-<a name="l03844"></a>03844 }
-<a name="l03845"></a>03845 
-<a name="l03846"></a>03846 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03852"></a>03852 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03853"></a>03853 <span class="keywordtype">int</span> sinfo_is_distlist(<span class="keywordtype">char</span> * tag)
-<a name="l03854"></a>03854 {
-<a name="l03855"></a>03855    <span class="comment">/* Test entries */</span>
-<a name="l03856"></a>03856    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03857"></a>03857 
-<a name="l03858"></a>03858    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLITLETS_DISTANCE)) <span class="keywordflow">return</span> 1 ;
-<a name="l03859"></a>03859    <span class="keywordflow">return</span> 0 ;
-<a name="l03860"></a>03860 }
-<a name="l03861"></a>03861 
-<a name="l03862"></a>03862 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03868"></a>03868 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03869"></a>03869 <span class="keywordtype">int</span> sinfo_is_slitpos(<span class="keywordtype">char</span> * tag)
-<a name="l03870"></a>03870 {
-<a name="l03871"></a>03871    <span class="comment">/* Test entries */</span>
-<a name="l03872"></a>03872    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03873"></a>03873 
-<a name="l03874"></a>03874    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS)) <span class="keywordflow">return</span> 1 ;
-<a name="l03875"></a>03875    <span class="keywordflow">return</span> 0 ;
-<a name="l03876"></a>03876 }
-<a name="l03877"></a>03877 
-<a name="l03878"></a>03878 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03884"></a>03884 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03885"></a>03885 <span class="keywordtype">int</span> sinfo_is_firstcol(<span class="keywordtype">char</span> * tag)
-<a name="l03886"></a>03886 {
-<a name="l03887"></a>03887    <span class="comment">/* Test entries */</span>
-<a name="l03888"></a>03888    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03889"></a>03889 
-<a name="l03890"></a>03890    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FIRST_COL)) <span class="keywordflow">return</span> 1 ;
-<a name="l03891"></a>03891    <span class="keywordflow">return</span> 0 ;
-<a name="l03892"></a>03892 }
-<a name="l03893"></a>03893 
-<a name="l03894"></a>03894 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03900"></a>03900 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03901"></a>03901 <span class="keywordtype">int</span> sinfo_is_bpmap(<span class="keywordtype">char</span> * tag)
-<a name="l03902"></a>03902 {
-<a name="l03903"></a>03903    <span class="comment">/* Test entries */</span>
-<a name="l03904"></a>03904    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l03905"></a>03905 
-<a name="l03906"></a>03906    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP)) <span class="keywordflow">return</span> 1 ;
-<a name="l03907"></a>03907    <span class="keywordflow">return</span> 0 ;
-<a name="l03908"></a>03908 }
-<a name="l03909"></a>03909 
-<a name="l03910"></a>03910 
-<a name="l03911"></a>03911 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03920"></a>03920 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03921"></a>03921 
-<a name="l03922"></a>03922 <span class="keywordtype">int</span> sinfo_get_band(cpl_frame * ref_frame,<span class="keywordtype">char</span> * band)
-<a name="l03923"></a>03923 {
-<a name="l03924"></a>03924 
-<a name="l03925"></a>03925    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l03926"></a>03926    cpl_propertylist* plist=NULL;
-<a name="l03927"></a>03927 
-<a name="l03928"></a>03928    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l03929"></a>03929    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l03930"></a>03930       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l03931"></a>03931       cpl_propertylist_delete(plist) ;
-<a name="l03932"></a>03932       <span class="keywordflow">return</span> -1 ;
-<a name="l03933"></a>03933    }
-<a name="l03934"></a>03934 
-<a name="l03935"></a>03935    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_FILT_NAME)) {
-<a name="l03936"></a>03936       strcpy(band, cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));
-<a name="l03937"></a>03937       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_FILT_NAME, band); */</span>
-<a name="l03938"></a>03938 
-<a name="l03939"></a>03939    } <span class="keywordflow">else</span> {
-<a name="l03940"></a>03940       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_FILT_NAME);
-<a name="l03941"></a>03941       <span class="keywordflow">return</span> -1;
-<a name="l03942"></a>03942    }
-<a name="l03943"></a>03943 
-<a name="l03944"></a>03944    cpl_free(ref_file);
-<a name="l03945"></a>03945    cpl_propertylist_delete(plist);
-<a name="l03946"></a>03946    <span class="keywordflow">return</span> 0;
-<a name="l03947"></a>03947 }
-<a name="l03948"></a>03948 
-<a name="l03949"></a>03949 
-<a name="l03950"></a>03950 
-<a name="l03951"></a>03951 
-<a name="l03952"></a>03952 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03960"></a>03960 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l03961"></a>03961 
-<a name="l03962"></a>03962 <span class="keywordtype">int</span> sinfo_get_obsname(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* obs_name)
-<a name="l03963"></a>03963 {
-<a name="l03964"></a>03964 
-<a name="l03965"></a>03965    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l03966"></a>03966    cpl_propertylist* plist=NULL;
-<a name="l03967"></a>03967 
-<a name="l03968"></a>03968    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l03969"></a>03969    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l03970"></a>03970       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l03971"></a>03971       cpl_propertylist_delete(plist) ;
-<a name="l03972"></a>03972       <span class="keywordflow">return</span> -1 ;
-<a name="l03973"></a>03973    }
-<a name="l03974"></a>03974 
-<a name="l03975"></a>03975    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_OBS_NAME)) {
-<a name="l03976"></a>03976       strcpy((<span class="keywordtype">char</span>*)obs_name, cpl_propertylist_get_string(plist,
-<a name="l03977"></a>03977                                                           KEY_NAME_OBS_NAME));
-<a name="l03978"></a>03978       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_OBS_NAME, obs_name); */</span>
-<a name="l03979"></a>03979 
-<a name="l03980"></a>03980    } <span class="keywordflow">else</span> {
-<a name="l03981"></a>03981       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_OBS_NAME);
-<a name="l03982"></a>03982       <span class="keywordflow">return</span> -1;
-<a name="l03983"></a>03983    }
-<a name="l03984"></a>03984 
-<a name="l03985"></a>03985    cpl_free(ref_file);
-<a name="l03986"></a>03986    cpl_propertylist_delete(plist);
-<a name="l03987"></a>03987    <span class="keywordflow">return</span> 0;
-<a name="l03988"></a>03988 }
-<a name="l03989"></a>03989 
-<a name="l03990"></a>03990 
-<a name="l03991"></a>03991 
-<a name="l03992"></a>03992 
-<a name="l03993"></a>03993 
-<a name="l03994"></a>03994 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04002"></a>04002 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04003"></a>04003 
-<a name="l04004"></a>04004 <span class="keywordtype">int</span> sinfo_get_keyvalue_int(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)
-<a name="l04005"></a>04005 {
-<a name="l04006"></a>04006 
-<a name="l04007"></a>04007    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l04008"></a>04008    cpl_propertylist* plist=NULL;
-<a name="l04009"></a>04009    <span class="keywordtype">int</span> result=0;
-<a name="l04010"></a>04010 
-<a name="l04011"></a>04011    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l04012"></a>04012 
-<a name="l04013"></a>04013    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04014"></a>04014       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04015"></a>04015       cpl_propertylist_delete(plist) ;
-<a name="l04016"></a>04016       <span class="keywordflow">return</span> -1;
-<a name="l04017"></a>04017    }
-<a name="l04018"></a>04018 
-<a name="l04019"></a>04019 
-<a name="l04020"></a>04020    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {
-<a name="l04021"></a>04021       result=cpl_propertylist_get_int(plist,key_name);
-<a name="l04022"></a>04022    } <span class="keywordflow">else</span> {
-<a name="l04023"></a>04023       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);
-<a name="l04024"></a>04024       <span class="keywordflow">return</span> -1;
-<a name="l04025"></a>04025    }
-<a name="l04026"></a>04026 
-<a name="l04027"></a>04027    cpl_free(ref_file);
-<a name="l04028"></a>04028    cpl_propertylist_delete(plist);
-<a name="l04029"></a>04029 
-<a name="l04030"></a>04030    <span class="keywordflow">return</span> result;
-<a name="l04031"></a>04031 }
-<a name="l04032"></a>04032 
-<a name="l04033"></a>04033 
-<a name="l04034"></a>04034 
-<a name="l04035"></a>04035 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04043"></a>04043 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04044"></a>04044 
-<a name="l04045"></a>04045 <span class="keywordtype">float</span> sinfo_get_keyvalue_float(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)
-<a name="l04046"></a>04046 {
-<a name="l04047"></a>04047 
-<a name="l04048"></a>04048    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l04049"></a>04049    cpl_propertylist* plist=NULL;
-<a name="l04050"></a>04050    <span class="keywordtype">float</span> result=0;
-<a name="l04051"></a>04051 
-<a name="l04052"></a>04052    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l04053"></a>04053 
-<a name="l04054"></a>04054    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04055"></a>04055       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04056"></a>04056       cpl_propertylist_delete(plist) ;
-<a name="l04057"></a>04057       <span class="keywordflow">return</span> -1;
-<a name="l04058"></a>04058    }
-<a name="l04059"></a>04059 
-<a name="l04060"></a>04060 
-<a name="l04061"></a>04061    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {
-<a name="l04062"></a>04062       result=cpl_propertylist_get_float(plist,key_name);
-<a name="l04063"></a>04063    } <span class="keywordflow">else</span> {
-<a name="l04064"></a>04064       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);
-<a name="l04065"></a>04065       <span class="keywordflow">return</span> -1;
-<a name="l04066"></a>04066    }
-<a name="l04067"></a>04067 
-<a name="l04068"></a>04068    cpl_free(ref_file);
-<a name="l04069"></a>04069    cpl_propertylist_delete(plist);
-<a name="l04070"></a>04070 
-<a name="l04071"></a>04071    <span class="keywordflow">return</span> result;
-<a name="l04072"></a>04072 }
-<a name="l04073"></a>04073 
-<a name="l04074"></a>04074 
-<a name="l04075"></a>04075 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04083"></a>04083 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04084"></a>04084 
-<a name="l04085"></a>04085 <span class="keywordtype">char</span> sinfo_get_keyvalue_bool(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)
-<a name="l04086"></a>04086 {
-<a name="l04087"></a>04087 
-<a name="l04088"></a>04088    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l04089"></a>04089    cpl_propertylist* plist=NULL;
-<a name="l04090"></a>04090    <span class="keywordtype">int</span> res_val=0;
-<a name="l04091"></a>04091 
-<a name="l04092"></a>04092    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l04093"></a>04093 
-<a name="l04094"></a>04094    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04095"></a>04095       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04096"></a>04096       cpl_propertylist_delete(plist) ;
-<a name="l04097"></a>04097       <span class="keywordflow">return</span> <span class="charliteral">'0'</span>;
-<a name="l04098"></a>04098    }
-<a name="l04099"></a>04099 
-<a name="l04100"></a>04100 
-<a name="l04101"></a>04101    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {
-<a name="l04102"></a>04102       res_val=cpl_propertylist_get_bool(plist,key_name);
-<a name="l04103"></a>04103    } <span class="keywordflow">else</span> {
-<a name="l04104"></a>04104       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);
-<a name="l04105"></a>04105       <span class="keywordflow">return</span> <span class="charliteral">'0'</span>;
-<a name="l04106"></a>04106    }
-<a name="l04107"></a>04107 
-<a name="l04108"></a>04108    cpl_free(ref_file);
-<a name="l04109"></a>04109    cpl_propertylist_delete(plist);
-<a name="l04110"></a>04110    <span class="keywordflow">if</span>(res_val == 1) {
-<a name="l04111"></a>04111       <span class="keywordflow">return</span> <span class="charliteral">'T'</span>;
-<a name="l04112"></a>04112    } <span class="keywordflow">else</span> {
-<a name="l04113"></a>04113       <span class="keywordflow">return</span> <span class="charliteral">'F'</span>;
-<a name="l04114"></a>04114    }
-<a name="l04115"></a>04115 }
-<a name="l04116"></a>04116 
-<a name="l04117"></a>04117 
-<a name="l04118"></a>04118 
-<a name="l04119"></a>04119 
-<a name="l04120"></a>04120 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04128"></a>04128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04129"></a>04129 
-<a name="l04130"></a>04130 <span class="keyword">const</span> <span class="keywordtype">char</span>*
-<a name="l04131"></a>04131 sinfo_get_keyvalue_string(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)
-<a name="l04132"></a>04132 {
-<a name="l04133"></a>04133 
-<a name="l04134"></a>04134    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l04135"></a>04135    cpl_propertylist* plist=NULL;
-<a name="l04136"></a>04136    <span class="keyword">const</span> <span class="keywordtype">char</span>* result=NULL;
-<a name="l04137"></a>04137 
-<a name="l04138"></a>04138    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
-<a name="l04139"></a>04139 
-<a name="l04140"></a>04140    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04141"></a>04141       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04142"></a>04142       cpl_propertylist_delete(plist) ;
-<a name="l04143"></a>04143       <span class="keywordflow">return</span> FALSE;
-<a name="l04144"></a>04144    }
-<a name="l04145"></a>04145 
-<a name="l04146"></a>04146 
-<a name="l04147"></a>04147    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {
-<a name="l04148"></a>04148       result=cpl_propertylist_get_string(plist,key_name);
-<a name="l04149"></a>04149    } <span class="keywordflow">else</span> {
-<a name="l04150"></a>04150       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);
-<a name="l04151"></a>04151       <span class="keywordflow">return</span> NULL;
-<a name="l04152"></a>04152    }
-<a name="l04153"></a>04153 
-<a name="l04154"></a>04154    cpl_free(ref_file);
-<a name="l04155"></a>04155    cpl_propertylist_delete(plist);
-<a name="l04156"></a>04156 
-<a name="l04157"></a>04157    <span class="keywordflow">return</span> result;
-<a name="l04158"></a>04158 }
-<a name="l04159"></a>04159 
-<a name="l04160"></a>04160 
-<a name="l04161"></a>04161 
-<a name="l04162"></a>04162 <span class="keywordtype">double</span> sinfo_get_mjd_obs(cpl_frame * frame)
-<a name="l04163"></a>04163 {
-<a name="l04164"></a>04164    cpl_propertylist* plist=NULL;
-<a name="l04165"></a>04165    <span class="keyword">const</span> <span class="keywordtype">char</span>* file=NULL;
-<a name="l04166"></a>04166 
-<a name="l04167"></a>04167    <span class="keywordtype">double</span> mjd_obs=0.;
-<a name="l04168"></a>04168    file = cpl_frame_get_filename(frame) ;
-<a name="l04169"></a>04169 
-<a name="l04170"></a>04170    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
-<a name="l04171"></a>04171       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l04172"></a>04172       sinfo_free_propertylist(&plist) ;
-<a name="l04173"></a>04173       <span class="keywordflow">return</span> -1 ;
-<a name="l04174"></a>04174    }
-<a name="l04175"></a>04175 
-<a name="l04176"></a>04176    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
-<a name="l04177"></a>04177       mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
-<a name="l04178"></a>04178    } <span class="keywordflow">else</span> {
-<a name="l04179"></a>04179       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);
-<a name="l04180"></a>04180       sinfo_free_propertylist(&plist) ;
-<a name="l04181"></a>04181       <span class="keywordflow">return</span> -1;
-<a name="l04182"></a>04182    }
-<a name="l04183"></a>04183    sinfo_free_propertylist(&plist) ;
-<a name="l04184"></a>04184 
-<a name="l04185"></a>04185    <span class="keywordflow">return</span> mjd_obs;
-<a name="l04186"></a>04186 
-<a name="l04187"></a>04187 }
-<a name="l04188"></a>04188 
-<a name="l04189"></a>04189 
-<a name="l04190"></a>04190 
-<a name="l04191"></a>04191 
-<a name="l04192"></a>04192 <span class="keywordtype">double</span> sinfo_get_cumoffsetx(cpl_frame * frame)
-<a name="l04193"></a>04193 {
-<a name="l04194"></a>04194    cpl_propertylist* plist=NULL;
-<a name="l04195"></a>04195    <span class="keywordtype">char</span>* file=NULL;
-<a name="l04196"></a>04196 
-<a name="l04197"></a>04197    <span class="keywordtype">double</span> result=0.;
-<a name="l04198"></a>04198    file = cpl_strdup( cpl_frame_get_filename(frame)) ;
-<a name="l04199"></a>04199 
-<a name="l04200"></a>04200    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
-<a name="l04201"></a>04201       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l04202"></a>04202       cpl_propertylist_delete(plist) ;
-<a name="l04203"></a>04203       cpl_free(file);
-<a name="l04204"></a>04204       <span class="keywordflow">return</span> -1 ;
-<a name="l04205"></a>04205    }
-<a name="l04206"></a>04206 
-<a name="l04207"></a>04207    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CUMOFFX)) {
-<a name="l04208"></a>04208       result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFX);
-<a name="l04209"></a>04209    } <span class="keywordflow">else</span> {
-<a name="l04210"></a>04210       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_CUMOFFX);
-<a name="l04211"></a>04211       cpl_propertylist_delete(plist) ;
-<a name="l04212"></a>04212       <span class="keywordflow">return</span> -1;
-<a name="l04213"></a>04213    }
-<a name="l04214"></a>04214    cpl_propertylist_delete(plist) ;
-<a name="l04215"></a>04215    cpl_free(file);
-<a name="l04216"></a>04216 
-<a name="l04217"></a>04217    <span class="keywordflow">return</span> result;
-<a name="l04218"></a>04218 
-<a name="l04219"></a>04219 }
-<a name="l04220"></a>04220 
-<a name="l04221"></a>04221 
-<a name="l04222"></a>04222 
-<a name="l04223"></a>04223 
-<a name="l04224"></a>04224 <span class="keywordtype">double</span> sinfo_get_cumoffsety(cpl_frame * frame)
-<a name="l04225"></a>04225 {
-<a name="l04226"></a>04226    cpl_propertylist* plist=NULL;
-<a name="l04227"></a>04227    <span class="keywordtype">char</span>* file=NULL;
-<a name="l04228"></a>04228 
-<a name="l04229"></a>04229    <span class="keywordtype">double</span> result=0.;
-<a name="l04230"></a>04230    file = cpl_strdup( cpl_frame_get_filename(frame)) ;
-<a name="l04231"></a>04231 
-<a name="l04232"></a>04232    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
-<a name="l04233"></a>04233       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l04234"></a>04234       cpl_propertylist_delete(plist) ;
-<a name="l04235"></a>04235       cpl_free(file);
-<a name="l04236"></a>04236       <span class="keywordflow">return</span> -1 ;
-<a name="l04237"></a>04237    }
-<a name="l04238"></a>04238 
-<a name="l04239"></a>04239    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CUMOFFY)) {
-<a name="l04240"></a>04240       result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFY);
-<a name="l04241"></a>04241    } <span class="keywordflow">else</span> {
-<a name="l04242"></a>04242       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_CUMOFFY);
-<a name="l04243"></a>04243       cpl_propertylist_delete(plist) ;
-<a name="l04244"></a>04244       <span class="keywordflow">return</span> -1;
-<a name="l04245"></a>04245    }
-<a name="l04246"></a>04246    cpl_propertylist_delete(plist) ;
-<a name="l04247"></a>04247    cpl_free(file);
-<a name="l04248"></a>04248 
-<a name="l04249"></a>04249    <span class="keywordflow">return</span> result;
-<a name="l04250"></a>04250 
-<a name="l04251"></a>04251 }
-<a name="l04252"></a>04252 
-<a name="l04253"></a>04253 <span class="keywordtype">int</span> sinfo_frame_is_dither(cpl_frame * frame)
-<a name="l04254"></a>04254 {
-<a name="l04255"></a>04255 
-<a name="l04256"></a>04256    <span class="keywordtype">char</span> file[256];
-<a name="l04257"></a>04257    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l04258"></a>04258 
-<a name="l04259"></a>04259 
-<a name="l04260"></a>04260    cpl_propertylist* plist=NULL;
-<a name="l04261"></a>04261    <span class="keywordtype">int</span> grat_encoder=0;
-<a name="l04262"></a>04262    <span class="keywordtype">int</span> dith_status=1;
-<a name="l04263"></a>04263    <span class="keywordtype">int</span> len=0;
-<a name="l04264"></a>04264 
-<a name="l04265"></a>04265 
-<a name="l04266"></a>04266    cknull(frame,<span class="stringliteral">"Null input frame. Exit!"</span>);
-<a name="l04267"></a>04267 
-<a name="l04268"></a>04268    cknull_nomsg(strcpy(file,cpl_frame_get_filename(frame)));
-<a name="l04269"></a>04269    len= strlen(file);
-<a name="l04270"></a>04270 
-<a name="l04271"></a>04271    <span class="keywordflow">if</span>(len<1) <span class="keywordflow">goto</span> cleanup;
-<a name="l04272"></a>04272    <span class="keywordflow">if</span>(sinfo_file_exists(file)==0) <span class="keywordflow">goto</span> cleanup;
-<a name="l04273"></a>04273    <span class="comment">//file = cpl_strdup(cpl_frame_get_filename(frame)) ;</span>
-<a name="l04274"></a>04274    cknull(plist = cpl_propertylist_load(file, 0),
-<a name="l04275"></a>04275       <span class="stringliteral">"getting header from reference frame %s"</span>,file);
-<a name="l04276"></a>04276 
-<a name="l04277"></a>04277    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_FILT_NAME)) {
-<a name="l04278"></a>04278       strcpy(band,cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));
-<a name="l04279"></a>04279    } <span class="keywordflow">else</span> {
-<a name="l04280"></a>04280       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_FILT_NAME);
-<a name="l04281"></a>04281       sinfo_free_propertylist(&plist) ;
-<a name="l04282"></a>04282       <span class="keywordflow">return</span> -1;
-<a name="l04283"></a>04283    }
-<a name="l04284"></a>04284 
-<a name="l04285"></a>04285    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_GRAT_ENC)) {
-<a name="l04286"></a>04286       grat_encoder = cpl_propertylist_get_int(plist, KEY_NAME_GRAT_ENC);
-<a name="l04287"></a>04287    } <span class="keywordflow">else</span> {
-<a name="l04288"></a>04288       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_GRAT_ENC);
-<a name="l04289"></a>04289       sinfo_free_propertylist(&plist) ;
-<a name="l04290"></a>04290       <span class="keywordflow">return</span> -1;
-<a name="l04291"></a>04291    }
-<a name="l04292"></a>04292 
-<a name="l04293"></a>04293    sinfo_free_propertylist(&plist) ;
-<a name="l04294"></a>04294 
-<a name="l04295"></a>04295    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {
-<a name="l04296"></a>04296       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_H) <= GRAT_VAL_TOL ) {
-<a name="l04297"></a>04297          dith_status = 0;
-<a name="l04298"></a>04298       } <span class="keywordflow">else</span> {
-<a name="l04299"></a>04299          dith_status = 0;
-<a name="l04300"></a>04300       }
-<a name="l04301"></a>04301    }
-<a name="l04302"></a>04302    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {
-<a name="l04303"></a>04303       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_HK) <= GRAT_VAL_TOL ) {
-<a name="l04304"></a>04304          dith_status = 0;
-<a name="l04305"></a>04305       } <span class="keywordflow">else</span> {
-<a name="l04306"></a>04306          dith_status = 0;
-<a name="l04307"></a>04307       }
-<a name="l04308"></a>04308    }
-<a name="l04309"></a>04309    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {
-<a name="l04310"></a>04310       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_K) <= GRAT_VAL_TOL ) {
-<a name="l04311"></a>04311          dith_status = 0;
-<a name="l04312"></a>04312       } <span class="keywordflow">else</span> {
-<a name="l04313"></a>04313          dith_status = 0;
-<a name="l04314"></a>04314       }
-<a name="l04315"></a>04315    }
-<a name="l04316"></a>04316    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {
-<a name="l04317"></a>04317       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_J) <= GRAT_VAL_TOL ) {
-<a name="l04318"></a>04318          dith_status = 0;
-<a name="l04319"></a>04319       } <span class="keywordflow">else</span> {
-<a name="l04320"></a>04320          dith_status = 0;
-<a name="l04321"></a>04321       }
-<a name="l04322"></a>04322    }
-<a name="l04323"></a>04323  cleanup:
-<a name="l04324"></a>04324 
-<a name="l04325"></a>04325    sinfo_free_propertylist(&plist) ;
-<a name="l04326"></a>04326    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l04327"></a>04327      <span class="keywordflow">return</span> -1;
-<a name="l04328"></a>04328    } <span class="keywordflow">else</span> {
-<a name="l04329"></a>04329      <span class="keywordflow">return</span> dith_status;
-<a name="l04330"></a>04330    }
-<a name="l04331"></a>04331 }
-<a name="l04332"></a>04332 
-<a name="l04333"></a>04333 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04342"></a>04342 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04343"></a>04343 
-<a name="l04344"></a>04344 <span class="keywordtype">int</span> sinfo_get_spatial_res(cpl_frame * ref_frame, <span class="keywordtype">char</span> * spat_res)
-<a name="l04345"></a>04345 {
-<a name="l04346"></a>04346 
-<a name="l04347"></a>04347    <span class="keyword">const</span> <span class="keywordtype">char</span>* ref_file;
-<a name="l04348"></a>04348    cpl_propertylist* plist=NULL;
-<a name="l04349"></a>04349 
-<a name="l04350"></a>04350    ref_file=cpl_frame_get_filename(ref_frame) ;
-<a name="l04351"></a>04351    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04352"></a>04352       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04353"></a>04353       sinfo_free_propertylist(&plist) ;
-<a name="l04354"></a>04354       <span class="keywordflow">return</span> -1 ;
-<a name="l04355"></a>04355 
-<a name="l04356"></a>04356    }
-<a name="l04357"></a>04357 
-<a name="l04358"></a>04358    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
-<a name="l04359"></a>04359       strcpy(spat_res,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
-<a name="l04360"></a>04360       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_PREOPTICS, spat_res); */</span>
-<a name="l04361"></a>04361    } <span class="keywordflow">else</span> {
-<a name="l04362"></a>04362       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);
-<a name="l04363"></a>04363       sinfo_free_propertylist(&plist);
-<a name="l04364"></a>04364       <span class="keywordflow">return</span> -1;
-<a name="l04365"></a>04365    }
-<a name="l04366"></a>04366    sinfo_free_propertylist(&plist);
-<a name="l04367"></a>04367    <span class="keywordflow">return</span> 0;
-<a name="l04368"></a>04368 
-<a name="l04369"></a>04369 }
-<a name="l04370"></a>04370 
-<a name="l04371"></a>04371 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04379"></a>04379 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04380"></a>04380 
-<a name="l04381"></a>04381 <span class="keywordtype">int</span> sinfo_frame_is_sky(cpl_frame * ref_frame)
-<a name="l04382"></a>04382 {
-<a name="l04383"></a>04383 
-<a name="l04384"></a>04384    <span class="keywordtype">char</span>  dpr_type[FILE_NAME_SZ];
-<a name="l04385"></a>04385    <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l04386"></a>04386    <span class="keyword">const</span> <span class="keywordtype">char</span>* sval=NULL;
-<a name="l04387"></a>04387 
-<a name="l04388"></a>04388    <span class="keywordtype">int</span> result=0;
-<a name="l04389"></a>04389    cpl_propertylist* plist=NULL;
-<a name="l04390"></a>04390 
-<a name="l04391"></a>04391    sval = cpl_frame_get_filename(ref_frame) ;
-<a name="l04392"></a>04392    ref_file = cpl_strdup(sval) ;
-<a name="l04393"></a>04393 
-<a name="l04394"></a>04394    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l04395"></a>04395       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04396"></a>04396       cpl_propertylist_delete(plist) ;
-<a name="l04397"></a>04397       cpl_free(ref_file);
-<a name="l04398"></a>04398       <span class="keywordflow">return</span> -1 ;
-<a name="l04399"></a>04399    }
-<a name="l04400"></a>04400 
-<a name="l04401"></a>04401    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l04402"></a>04402       strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));
-<a name="l04403"></a>04403       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_DPR_TYPE, dpr_type); */</span>
-<a name="l04404"></a>04404    } <span class="keywordflow">else</span> {
-<a name="l04405"></a>04405       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_DPR_TYPE);
-<a name="l04406"></a>04406       cpl_propertylist_delete(plist) ;
-<a name="l04407"></a>04407       cpl_free(ref_file);
-<a name="l04408"></a>04408       <span class="keywordflow">return</span> -1;
-<a name="l04409"></a>04409    }
-<a name="l04410"></a>04410    cpl_propertylist_delete(plist);
-<a name="l04411"></a>04411    <span class="keywordflow">if</span>(strstr(dpr_type,RAW_SKY) != NULL) {
-<a name="l04412"></a>04412       result=1;
-<a name="l04413"></a>04413    }
-<a name="l04414"></a>04414    cpl_free(ref_file);
-<a name="l04415"></a>04415 
-<a name="l04416"></a>04416    <span class="keywordflow">return</span> result;
-<a name="l04417"></a>04417 
-<a name="l04418"></a>04418 }
-<a name="l04419"></a>04419 
-<a name="l04420"></a>04420 
-<a name="l04421"></a>04421 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04429"></a>04429 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04430"></a>04430 
-<a name="l04431"></a>04431 <span class="keywordtype">int</span> sinfo_tag_is_sky(<span class="keywordtype">char</span> * tag)
-<a name="l04432"></a>04432 {
-<a name="l04433"></a>04433 
-<a name="l04434"></a>04434    <span class="keywordtype">int</span> result=0;
-<a name="l04435"></a>04435 
-<a name="l04436"></a>04436    <span class="keywordflow">if</span>(
-<a name="l04437"></a>04437       (strcmp(tag,RAW_SKY) == 0)         ||
-<a name="l04438"></a>04438       (strcmp(tag,RAW_IMAGE_PRE_SKY) == 0)         ||
-<a name="l04439"></a>04439       (strcmp(tag,RAW_SKY_NODDING) == 0) ||
-<a name="l04440"></a>04440       (strcmp(tag,RAW_SKY_JITTER) == 0) ||
-<a name="l04441"></a>04441       (strcmp(tag,RAW_SKY_STD) == 0)     ||
-<a name="l04442"></a>04442       (strcmp(tag,RAW_FIBRE_DARK) == 0) ||
-<a name="l04443"></a>04443       (strcmp(tag,RAW_SKY_OH) == 0)      ||
-<a name="l04444"></a>04444       (strcmp(tag,RAW_SKY_PSF_CALIBRATOR) == 0)
-<a name="l04445"></a>04445       ) {
-<a name="l04446"></a>04446       result=1;
-<a name="l04447"></a>04447    }
-<a name="l04448"></a>04448 
-<a name="l04449"></a>04449    <span class="keywordflow">return</span> result;
-<a name="l04450"></a>04450 
-<a name="l04451"></a>04451 }
-<a name="l04452"></a>04452 
-<a name="l04453"></a>04453 
-<a name="l04454"></a>04454 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04462"></a>04462 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04463"></a>04463 
-<a name="l04464"></a>04464 <span class="keywordtype">int</span> sinfo_tag_is_obj(<span class="keywordtype">char</span> * tag)
-<a name="l04465"></a>04465 {
-<a name="l04466"></a>04466 
-<a name="l04467"></a>04467    <span class="keywordtype">int</span> result=0;
-<a name="l04468"></a>04468 
-<a name="l04469"></a>04469    <span class="keywordflow">if</span>(
-<a name="l04470"></a>04470       (strcmp(tag,RAW_PUPIL_LAMP) == 0) ||
-<a name="l04471"></a>04471       (strcmp(tag,RAW_OBJECT) == 0)         ||
-<a name="l04472"></a>04472       (strcmp(tag,RAW_IMAGE_PRE_OBJECT) == 0)         ||
-<a name="l04473"></a>04473       (strcmp(tag,RAW_OBJECT_NODDING) == 0) ||
-<a name="l04474"></a>04474       (strcmp(tag,RAW_OBJECT_JITTER) == 0) ||
-<a name="l04475"></a>04475       (strcmp(tag,RAW_PSF_CALIBRATOR) == 0) ||
-<a name="l04476"></a>04476       (strcmp(tag,RAW_FIBRE_PSF) == 0) ||
-<a name="l04477"></a>04477       (strcmp(tag,RAW_STD) == 0)            ||
-<a name="l04478"></a>04478       (strcmp(tag,RAW_STD_STAR) == 0)
-<a name="l04479"></a>04479 
-<a name="l04480"></a>04480       ) {
-<a name="l04481"></a>04481       result=1;
-<a name="l04482"></a>04482    }
-<a name="l04483"></a>04483 
-<a name="l04484"></a>04484    <span class="keywordflow">return</span> result;
-<a name="l04485"></a>04485 
-<a name="l04486"></a>04486 }
-<a name="l04487"></a>04487 
-<a name="l04488"></a>04488 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04496"></a>04496 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04497"></a>04497 
-<a name="l04498"></a>04498 <span class="keywordtype">int</span> sinfo_tag_is_objpro(<span class="keywordtype">char</span> * tag)
-<a name="l04499"></a>04499 {
-<a name="l04500"></a>04500 
-<a name="l04501"></a>04501    <span class="keywordtype">int</span> result=0;
-<a name="l04502"></a>04502 
-<a name="l04503"></a>04503    <span class="keywordflow">if</span>(
-<a name="l04504"></a>04504       (strcmp(tag,PRO_COADD_OBJ) == 0) ||
-<a name="l04505"></a>04505       (strcmp(tag,PRO_COADD_PSF) == 0) ||
-<a name="l04506"></a>04506       (strcmp(tag,PRO_COADD_STD) == 0) ||
-<a name="l04507"></a>04507       (strcmp(tag,PRO_OBS_OBJ) == 0) ||
-<a name="l04508"></a>04508       (strcmp(tag,PRO_OBS_PSF) == 0) ||
-<a name="l04509"></a>04509       (strcmp(tag,PRO_OBS_STD) == 0) ||
-<a name="l04510"></a>04510       (strcmp(tag,PRO_PSF_CALIBRATOR_STACKED) == 0) ||
-<a name="l04511"></a>04511       (strcmp(tag,PRO_SKY_PSF_CALIBRATOR_STACKED) == 0) ||
-<a name="l04512"></a>04512       (strcmp(tag,PRO_STD_STACKED) == 0) ||
-<a name="l04513"></a>04513       (strcmp(tag,PRO_SKY_STD_STACKED) == 0) ||
-<a name="l04514"></a>04514       (strcmp(tag,PRO_OBJECT_NODDING_STACKED) == 0) ||
-<a name="l04515"></a>04515       (strcmp(tag,PRO_SKY_NODDING_STACKED) == 0)
-<a name="l04516"></a>04516       ) {
-<a name="l04517"></a>04517       result=1;
-<a name="l04518"></a>04518    }
-<a name="l04519"></a>04519 
-<a name="l04520"></a>04520    <span class="keywordflow">return</span> result;
-<a name="l04521"></a>04521 
-<a name="l04522"></a>04522 }
-<a name="l04523"></a>04523 
-<a name="l04524"></a>04524 
-<a name="l04525"></a>04525 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04533"></a>04533 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l04534"></a>04534 
-<a name="l04535"></a>04535 <span class="keywordtype">int</span> sinfo_frame_is_on(cpl_frame * ref_frame)
-<a name="l04536"></a>04536 {
-<a name="l04537"></a>04537 
-<a name="l04538"></a>04538    <span class="keywordtype">char</span> ref_file[FILE_NAME_SZ];
-<a name="l04539"></a>04539    <span class="keywordtype">char</span> dpr_type[FILE_NAME_SZ];
-<a name="l04540"></a>04540    <span class="keywordtype">int</span> lamp_Xe=0;
-<a name="l04541"></a>04541    <span class="keywordtype">int</span> lamp_Kr=0;
-<a name="l04542"></a>04542    <span class="keywordtype">int</span> lamp_Ne=0;
-<a name="l04543"></a>04543    <span class="keywordtype">int</span> lamp_Ar=0;
-<a name="l04544"></a>04544    <span class="keywordtype">int</span> lamp_Halo=0;
-<a name="l04545"></a>04545    <span class="keywordtype">int</span> len=0;
-<a name="l04546"></a>04546    <span class="keywordtype">int</span> result=0;
-<a name="l04547"></a>04547    cpl_propertylist* plist=NULL;
-<a name="l04548"></a>04548    <span class="keyword">const</span> <span class="keywordtype">char</span>* filename=NULL;
-<a name="l04549"></a>04549    cknull(ref_frame,<span class="stringliteral">"Null input frame. Exit!"</span>);
-<a name="l04550"></a>04550 
-<a name="l04551"></a>04551    cknull_nomsg(filename=cpl_frame_get_filename(ref_frame));
-<a name="l04552"></a>04552    len= strlen(filename);
-<a name="l04553"></a>04553    <span class="keywordflow">if</span>(len<1) <span class="keywordflow">goto</span> cleanup;
-<a name="l04554"></a>04554 
-<a name="l04555"></a>04555    check_nomsg(strcpy(ref_file, filename)) ;
-<a name="l04556"></a>04556    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file,0)) == NULL)) {
-<a name="l04557"></a>04557       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);
-<a name="l04558"></a>04558       sinfo_free_propertylist(&plist) ;
-<a name="l04559"></a>04559       <span class="keywordflow">return</span> -1 ;
-<a name="l04560"></a>04560    }
-<a name="l04561"></a>04561 
-<a name="l04562"></a>04562 <span class="comment">/*-----------------------------------------------------------------------</span>
-<a name="l04563"></a>04563 <span class="comment">  in J  Argon (4)</span>
-<a name="l04564"></a>04564 <span class="comment">  in H Xenon and Argon (1+4)</span>
-<a name="l04565"></a>04565 <span class="comment">  in K Neon (3)</span>
-<a name="l04566"></a>04566 <span class="comment">  in H+K Xenon (1)</span>
-<a name="l04567"></a>04567 <span class="comment">  -------------------------------------------------------------------------*/</span>
-<a name="l04568"></a>04568    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l04569"></a>04569       strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));
-<a name="l04570"></a>04570       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_DPR_TYPE, dpr_type); */</span>
-<a name="l04571"></a>04571    } <span class="keywordflow">else</span> {
-<a name="l04572"></a>04572       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_DPR_TYPE);
-<a name="l04573"></a>04573       sinfo_free_propertylist(&plist);
-<a name="l04574"></a>04574       <span class="keywordflow">return</span> -1;
-<a name="l04575"></a>04575    }
-<a name="l04576"></a>04576 
-<a name="l04577"></a>04577    <span class="comment">/*</span>
-<a name="l04578"></a>04578 <span class="comment">     In order to use the frame tag to identify frames we have to add this line</span>
-<a name="l04579"></a>04579 <span class="comment">     strcpy(dpr_type,cpl_frame_get_tag(ref_frame));</span>
-<a name="l04580"></a>04580 <span class="comment"></span>
-<a name="l04581"></a>04581 <span class="comment">   */</span>
-<a name="l04582"></a>04582 
-<a name="l04583"></a>04583    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"STD"</span>) != NULL) {
-<a name="l04584"></a>04584       result = 1;
-<a name="l04585"></a>04585       sinfo_free_propertylist(&plist);
-<a name="l04586"></a>04586       <span class="keywordflow">return</span> result;
-<a name="l04587"></a>04587    }
-<a name="l04588"></a>04588 
-<a name="l04589"></a>04589    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"PSF"</span>) != NULL) {
-<a name="l04590"></a>04590       result = 1;
-<a name="l04591"></a>04591       sinfo_free_propertylist(&plist);
-<a name="l04592"></a>04592       <span class="keywordflow">return</span> result;
-<a name="l04593"></a>04593    }
-<a name="l04594"></a>04594 
-<a name="l04595"></a>04595    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"SKY"</span>) != NULL) {
-<a name="l04596"></a>04596       result = 0;
-<a name="l04597"></a>04597       sinfo_free_propertylist(&plist);
-<a name="l04598"></a>04598       <span class="keywordflow">return</span> result;
-<a name="l04599"></a>04599    }
-<a name="l04600"></a>04600 
-<a name="l04601"></a>04601 
-<a name="l04602"></a>04602    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"OBJECT"</span>) != NULL) {
-<a name="l04603"></a>04603       result = 1;
-<a name="l04604"></a>04604       sinfo_free_propertylist(&plist);
-<a name="l04605"></a>04605       <span class="keywordflow">return</span> result;
-<a name="l04606"></a>04606    }
-<a name="l04607"></a>04607    <span class="comment">/*</span>
-<a name="l04608"></a>04608 <span class="comment">     if(strstr(dpr_type,"PUPIL") != NULL) {</span>
-<a name="l04609"></a>04609 <span class="comment">     result = 1;</span>
-<a name="l04610"></a>04610 <span class="comment">     cpl_propertylist_delete(plist);</span>
-<a name="l04611"></a>04611 <span class="comment">     return result;</span>
-<a name="l04612"></a>04612 <span class="comment">     }</span>
-<a name="l04613"></a>04613 <span class="comment">   */</span>
-<a name="l04614"></a>04614 
-<a name="l04615"></a>04615    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_XE)) {
-<a name="l04616"></a>04616       lamp_Xe=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_XE);
-<a name="l04617"></a>04617       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_XE, lamp_Xe); */</span>
-<a name="l04618"></a>04618    } <span class="keywordflow">else</span> {
-<a name="l04619"></a>04619       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_XE);
-<a name="l04620"></a>04620       sinfo_free_propertylist(&plist);
-<a name="l04621"></a>04621       <span class="keywordflow">return</span> -1;
-<a name="l04622"></a>04622    }
-<a name="l04623"></a>04623 
-<a name="l04624"></a>04624    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_KR)) {
-<a name="l04625"></a>04625       lamp_Kr=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_KR);
-<a name="l04626"></a>04626       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_KR, lamp_Kr); */</span>
-<a name="l04627"></a>04627    } <span class="keywordflow">else</span> {
-<a name="l04628"></a>04628       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_KR);
-<a name="l04629"></a>04629       sinfo_free_propertylist(&plist);
-<a name="l04630"></a>04630       <span class="keywordflow">return</span> -1;
-<a name="l04631"></a>04631    }
-<a name="l04632"></a>04632 
-<a name="l04633"></a>04633    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_NE)) {
-<a name="l04634"></a>04634       lamp_Ne=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_NE);
-<a name="l04635"></a>04635       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_NE, lamp_Ne); */</span>
-<a name="l04636"></a>04636    } <span class="keywordflow">else</span> {
-<a name="l04637"></a>04637       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_NE);
-<a name="l04638"></a>04638       sinfo_free_propertylist(&plist);
-<a name="l04639"></a>04639       <span class="keywordflow">return</span> -1;
-<a name="l04640"></a>04640    }
-<a name="l04641"></a>04641 
-<a name="l04642"></a>04642    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_AR)) {
-<a name="l04643"></a>04643       lamp_Ar=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_AR);
-<a name="l04644"></a>04644       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_AR, lamp_Ar); */</span>
-<a name="l04645"></a>04645    } <span class="keywordflow">else</span> {
-<a name="l04646"></a>04646       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_AR);
-<a name="l04647"></a>04647       sinfo_free_propertylist(&plist);
-<a name="l04648"></a>04648       <span class="keywordflow">return</span> -1;
-<a name="l04649"></a>04649    }
-<a name="l04650"></a>04650 
-<a name="l04651"></a>04651    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l04652"></a>04652       lamp_Halo=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_HALO);
-<a name="l04653"></a>04653       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_HALO, lamp_Halo); */</span>
-<a name="l04654"></a>04654    } <span class="keywordflow">else</span> {
-<a name="l04655"></a>04655       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_HALO);
-<a name="l04656"></a>04656       sinfo_free_propertylist(&plist);
-<a name="l04657"></a>04657       <span class="keywordflow">return</span> -1;
-<a name="l04658"></a>04658    }
-<a name="l04659"></a>04659 
-<a name="l04660"></a>04660 
-<a name="l04661"></a>04661 
-<a name="l04662"></a>04662 
-<a name="l04663"></a>04663    <span class="keywordflow">if</span>(lamp_Xe) {
-<a name="l04664"></a>04664       result=1;
-<a name="l04665"></a>04665    }
-<a name="l04666"></a>04666 
-<a name="l04667"></a>04667    <span class="keywordflow">if</span>(lamp_Kr) {
-<a name="l04668"></a>04668       result=1;
-<a name="l04669"></a>04669    }
-<a name="l04670"></a>04670 
-<a name="l04671"></a>04671    <span class="keywordflow">if</span>(lamp_Ne) {
-<a name="l04672"></a>04672       result=1;
-<a name="l04673"></a>04673    }
-<a name="l04674"></a>04674 
-<a name="l04675"></a>04675    <span class="keywordflow">if</span>(lamp_Ar) {
-<a name="l04676"></a>04676       result=1;
-<a name="l04677"></a>04677    }
-<a name="l04678"></a>04678 
-<a name="l04679"></a>04679 
-<a name="l04680"></a>04680    <span class="keywordflow">if</span>(lamp_Halo) {
-<a name="l04681"></a>04681       result=1;
-<a name="l04682"></a>04682    }
-<a name="l04683"></a>04683 
-<a name="l04684"></a>04684   cleanup:
-<a name="l04685"></a>04685    sinfo_free_propertylist(&plist);
-<a name="l04686"></a>04686    <span class="keywordflow">return</span> result;
-<a name="l04687"></a>04687 
-<a name="l04688"></a>04688 
-<a name="l04689"></a>04689 }
-<a name="l04690"></a>04690 
-<a name="l04691"></a>04691 
-<a name="l04692"></a>04692 
-<a name="l04693"></a>04693 <span class="keywordtype">int</span>
-<a name="l04694"></a>04694 sinfo_pfits_add_qc(cpl_propertylist       *   plist,
-<a name="l04695"></a>04695                    qc_log          *   qclog)
-<a name="l04696"></a>04696 {
-<a name="l04697"></a>04697    <span class="keywordtype">char</span>            key_name[80] ;
-<a name="l04698"></a>04698    <span class="keywordtype">char</span>            key_value[80] ;
-<a name="l04699"></a>04699 
-<a name="l04700"></a>04700    <span class="keywordtype">int</span>             i =0;
-<a name="l04701"></a>04701 
-<a name="l04702"></a>04702    <span class="comment">/* Test entries */</span>
-<a name="l04703"></a>04703    <span class="keywordflow">if</span> (plist == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l04704"></a>04704 
-<a name="l04705"></a>04705    <span class="comment">/* Parameter Name:    PIPEFILE */</span>
-<a name="l04706"></a>04706    <span class="comment">/* we add ESO prefix to FITS keywords" */</span>
-<a name="l04707"></a>04707    <span class="keywordflow">for</span>(i=0;i<qclog[0].n;i++) {
-<a name="l04708"></a>04708       strcpy(key_name,<span class="stringliteral">"ESO "</span>);
-<a name="l04709"></a>04709       strcat(key_name,qclog[i].name);
-<a name="l04710"></a>04710       <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"string"</span>) == 0) {
-<a name="l04711"></a>04711          snprintf(key_value,<span class="keyword">sizeof</span>(key_value)-1,<span class="stringliteral">"%s"</span>,qclog[i].s_val);
-<a name="l04712"></a>04712          cpl_propertylist_append_string(plist, key_name,key_value) ;
-<a name="l04713"></a>04713          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
-<a name="l04714"></a>04714 
-<a name="l04715"></a>04715       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"bool"</span>) == 0) {
-<a name="l04716"></a>04716          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%i"</span>,(<span class="keywordtype">int</span>)qclog[i].n_val);
-<a name="l04717"></a>04717          cpl_propertylist_append_bool(plist, key_name,(<span class="keywordtype">int</span>)qclog[i].n_val) ;
-<a name="l04718"></a>04718          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
-<a name="l04719"></a>04719       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"int"</span>) == 0) {
-<a name="l04720"></a>04720          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%i"</span>,(<span class="keywordtype">int</span>)qclog[i].n_val);
-<a name="l04721"></a>04721          cpl_propertylist_append_int(plist, key_name,(<span class="keywordtype">int</span>)qclog[i].n_val) ;
-<a name="l04722"></a>04722          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
-<a name="l04723"></a>04723       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"float"</span>) == 0) {
-<a name="l04724"></a>04724          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%f"</span>,(<span class="keywordtype">float</span>)qclog[i].n_val);
-<a name="l04725"></a>04725          cpl_propertylist_append_float(plist, key_name,(<span class="keywordtype">float</span>)qclog[i].n_val) ;
-<a name="l04726"></a>04726          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
-<a name="l04727"></a>04727       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"double"</span>) == 0) {
-<a name="l04728"></a>04728          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%f"</span>,qclog[i].n_val);
-<a name="l04729"></a>04729          cpl_propertylist_append_double(plist, key_name,qclog[i].n_val) ;
-<a name="l04730"></a>04730          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
-<a name="l04731"></a>04731       }
-<a name="l04732"></a>04732 
-<a name="l04733"></a>04733    }
-<a name="l04734"></a>04734 
-<a name="l04735"></a>04735    <span class="keywordflow">return</span> 0 ;
-<a name="l04736"></a>04736 }
-<a name="l04737"></a>04737 
-<a name="l04738"></a>04738 
-<a name="l04739"></a>04739 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dfs.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_dfs.c,v 1.44 2013/09/17 08:11:22 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/09/17 08:11:22 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.44 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  Macros</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">  ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">  Private to this module</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">  ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  Includes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_skycor.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/* defines */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#define FITS_MAGIC_SZ      6</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_AMOEBA_NMAX 5000</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/* function prototypes */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">  static int</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">  sinfo_stat_rectangle(cpl_image* img,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">  const int kappa,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  const int nclip,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">  double *mean,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">  double *stdev);</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> sinfo_fit_amoeba_get_psum(<span class="keywordtype">int</span> ndim, <span class="keywordtype">int</span> mpts, <span class="keywordtype">double</span>** p, <span class="keywordtype">double</span>* psum);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span>  <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_fit_amotry(<span class="keywordtype">double</span>** p,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                  <span class="keywordtype">double</span> y[],</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                  <span class="keywordtype">double</span> psum[],</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                  <span class="keywordtype">int</span> ndim,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                  <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                  <span class="keywordtype">int</span> ihi,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                  <span class="keywordtype">double</span> fac);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> get_chisq(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>           <span class="keywordtype">int</span> (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *a,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">static</span> <span class="keywordtype">int</span> get_candidate(<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                          <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                          <span class="keywordtype">double</span> lambda,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                          <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                      <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                          <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                                      <span class="keywordtype">double</span> result[]),</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                          <span class="keywordtype">double</span> *partials,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                          cpl_matrix *alpha,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                          cpl_matrix *beta,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                          <span class="keywordtype">double</span> *a_da);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> sinfo_frame_is_raw_dark(<span class="keywordtype">char</span> * tag);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> cpl_frameset *</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> sinfo_frameset_extract(<span class="keyword">const</span> cpl_frameset *frames,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span> *tag)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    cpl_frameset *subset = NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="keyword">const</span> cpl_frame *f;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    assure( frames != NULL, CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Null frameset"</span> );</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    assure( tag    != NULL, CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Null tag"</span> );</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    subset = cpl_frameset_new();</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>    <span class="keywordflow">for</span> (f = cpl_frameset_find_const(frames, tag);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         f != NULL;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         f = cpl_frameset_find_const(frames, NULL)) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       cpl_frameset_insert(subset, cpl_frame_duplicate(f));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cleanup:</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    <span class="keywordflow">return</span> subset;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="keywordtype">int</span> sinfo_print_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Recipe status at %d"</span>,val);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>,(<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_error_get_message());</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>,(<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_error_get_where());</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> cpl_vector*</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> sinfo_vector_clip(<span class="keyword">const</span> cpl_vector* vinp,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> method)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    cpl_vector* vout=NULL;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    cpl_vector* vtmp=NULL;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    <span class="keywordtype">int</span> size=0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    <span class="keyword">register</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>    <span class="keywordtype">double</span> median=0;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    <span class="keywordtype">double</span> stdev=0;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>    <span class="keywordtype">double</span>* pt=NULL;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    cknull(vinp,<span class="stringliteral">"Null input vector"</span>);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    check_nomsg(vout=cpl_vector_duplicate(vinp));</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>    check_nomsg(mean=cpl_vector_get_mean(vout));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    check_nomsg(median=cpl_vector_get_median_const(vout));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    check_nomsg(stdev=cpl_vector_get_stdev(vout));</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>    check_nomsg(pt=cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    <span class="keywordflow">if</span>(method == 0) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">         are rejected</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">         values ||val-mean|| > kappa*sigma</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       <span class="keywordflow">for</span>(j=0;j<n;j++) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>          check_nomsg(cpl_vector_sort(vout,1));  <span class="comment">/* sort by increasing data */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>          check_nomsg(po=cpl_vector_get_data(vout));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>          <span class="keywordflow">if</span>( (size > 1) && (fabs(po[size-1]-mean) > kappa*stdev)) {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>             size--;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>             check_nomsg(vtmp=cpl_vector_new(size));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>             check_nomsg(pt=cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>             <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                pt[i]=po[i];</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>             }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>             check_nomsg(cpl_vector_delete(vout));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>             check_nomsg(vout=cpl_vector_duplicate(vtmp));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>             check_nomsg(cpl_vector_delete(vtmp));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>             check_nomsg(mean=cpl_vector_get_mean(vout));</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>             check_nomsg(stdev=cpl_vector_get_stdev(vout));</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>          }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">         are rejected</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">         values ||val-median|| > kappa*sigma</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">for</span>(j=0;j<n;j++) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>          check_nomsg(cpl_vector_sort(vout,1));  <span class="comment">/* sort by increasing data */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>          check_nomsg(po=cpl_vector_get_data(vout));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>          <span class="keywordflow">if</span>( (size > 1) && (fabs(po[size-1]-median) > kappa*stdev)) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>             size--;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>             check_nomsg(vtmp=cpl_vector_new(size));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>             check_nomsg(pt=cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>             <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                pt[i]=po[i];</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>             }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>             check_nomsg(cpl_vector_delete(vout));</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>             check_nomsg(vout=cpl_vector_duplicate(vtmp));</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>             check_nomsg(cpl_vector_delete(vtmp));</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>             check_nomsg(median=cpl_vector_get_median_const(vout));</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>             check_nomsg(stdev=cpl_vector_get_stdev(vout));</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>          }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>    <span class="keywordflow">return</span> vout;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   cleanup:</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> get_candidate(<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>               <span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>               <span class="keywordtype">double</span> lambda,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>               <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>               <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> result[]),</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>               <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>               <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>               <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>               <span class="keywordtype">double</span> *partials,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>               cpl_matrix *alpha,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>               cpl_matrix *beta,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>               <span class="keywordtype">double</span> *a_da)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    <span class="keywordtype">int</span> Mfit = 0;         <span class="comment">/* Number of non-constant fit parameters */</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>    cpl_matrix *da;       <span class="comment">/* Solution of   alpha * da = beta */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>    <span class="keywordtype">double</span> *alpha_data;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>    <span class="keywordtype">double</span> *beta_data;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>    <span class="keywordtype">double</span> *da_data;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>    <span class="keywordtype">int</span> i, imfit = 0;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>    <span class="keywordtype">int</span> j, jmfit = 0;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>    <span class="keywordtype">int</span> k = 0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>    <span class="comment">/* For efficiency, don't check input in this static function */</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    Mfit = cpl_matrix_get_nrow(alpha);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>    alpha_data    = cpl_matrix_get_data(alpha);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    beta_data     = cpl_matrix_get_data(beta);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    <span class="comment">/* Build alpha, beta:</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">    *</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">    *  alpha[i,j] = sum_{k=1,N} (sigma_k)^-2 * df/da_i * df/da_j  *</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">    *                           (1 + delta_ij lambda) ,</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">    *</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">    *   beta[i]   = sum_{k=1,N} (sigma_k)^-2 * ( y_k - f(x_k) ) * df/da_i</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">    *</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">    * where (i,j) loop over the non-constant parameters (0 to Mfit-1),</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">    * delta is Kronecker's delta, and all df/da are evaluated in x_k</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>    cpl_matrix_fill(alpha, 0.0);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>    cpl_matrix_fill(beta , 0.0);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>    <span class="keywordflow">for</span> (k = 0; k < N; k++)</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>    {</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       <span class="keywordtype">double</span> sm2 = 0.0;                <span class="comment">/* (sigma_k)^-2 */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       <span class="keywordtype">double</span> fx_k = 0.0;               <span class="comment">/* f(x_k)       */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       <span class="keyword">const</span> <span class="keywordtype">double</span> *x_k = &(x[0+k*D]); <span class="comment">/* x_k          */</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>       <span class="keywordflow">if</span> (sigma == NULL)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>       {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>          sm2 = 1.0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>          sm2 = 1.0 / (sigma[k] * sigma[k]);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       <span class="comment">/* Evaluate f(x_k) */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       cpl_ensure( f(x_k, a, &fx_k) == 0, CPL_ERROR_ILLEGAL_INPUT, -1);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <span class="comment">/* Evaluate (all) df/da (x_k) */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       cpl_ensure( dfda(x_k, a, partials) == 0,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                   CPL_ERROR_ILLEGAL_INPUT, -1);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>       <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>          <span class="keywordflow">if</span> (ia[i] != 0)</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>          {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>             <span class="comment">/* Beta */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             beta_data[imfit] +=</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                sm2 * (y[k] - fx_k) * partials[i];</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             <span class="comment">/* Alpha is symmetrical, so compute</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">               only lower-left part */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             <span class="keywordflow">for</span> (j = 0, jmfit = 0; j < i; j++)</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>             {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                <span class="keywordflow">if</span> (ia[j] != 0)</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                   alpha_data[jmfit + imfit*Mfit] +=</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                      sm2 * partials[i] *</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                      partials[j];</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                   jmfit += 1;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>             }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>             <span class="comment">/* Alpha, diagonal terms */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>             j = i;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>             jmfit = imfit;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>             alpha_data[jmfit + imfit*Mfit] +=</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                sm2 * partials[i] *</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                partials[j] * (1 + lambda);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>             imfit += 1;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>          }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>       }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>    }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>    <span class="comment">/* Create upper-right part of alpha */</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>    <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       <span class="keywordflow">if</span> (ia[i] != 0) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>          <span class="keywordflow">for</span> (j = i+1, jmfit = imfit+1; j < M; j++) {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>             <span class="keywordflow">if</span> (ia[j] != 0) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                alpha_data[jmfit+imfit*Mfit] = alpha_data[imfit+jmfit*Mfit];</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                jmfit += 1;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>             }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>          }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>          cpl_ensure( jmfit == Mfit,CPL_ERROR_ILLEGAL_INPUT,-1 );</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>          imfit += 1;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>    }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>    cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>    da = cpl_matrix_solve(alpha, beta);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>    cpl_ensure(da != NULL, cpl_error_get_code(), -1);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>    <span class="comment">/* Create a+da vector by adding a and da */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>    da_data   = cpl_matrix_get_data(da);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>    <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>    {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       <span class="keywordflow">if</span> (ia[i] != 0)</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>       {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>          a_da[i] = a[i] + da_data[0 + imfit*1];</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>          imfit += 1;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       {</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>          a_da[i] = a[i];</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>    }</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>    cpl_ensure( imfit == Mfit ,CPL_ERROR_ILLEGAL_INPUT,-1);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>    cpl_matrix_delete(da);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> get_chisq(<span class="keywordtype">int</span> N, <span class="keywordtype">int</span> D,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>           <span class="keywordtype">int</span> (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], <span class="keyword">const</span> <span class="keywordtype">double</span> a[], <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *a,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma)</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>    <span class="keywordtype">double</span> chi_sq;     <span class="comment">/* Result */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>    <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>    <span class="comment">/* For efficiency, don't check input in this static function */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>    chi_sq = 0.0;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>    <span class="keywordflow">for</span> (i = 0; i < N; i++)</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>    {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       <span class="keywordtype">double</span> fx_i;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="keywordtype">double</span> residual;                 <span class="comment">/* Residual in units of uncertainty */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       <span class="keyword">const</span> <span class="keywordtype">double</span> *x_i = &(x[0+i*D]);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>       <span class="comment">/* Evaluate */</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>       cpl_ensure( f(x_i,</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                     a,</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                     &fx_i) == 0, CPL_ERROR_ILLEGAL_INPUT, -1.0);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>       <span class="comment">/* Accumulate */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>       <span class="keywordflow">if</span> (sigma == NULL)</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>       {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>          residual = (fx_i - y[i]);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>          residual = (fx_i - y[i]) / sigma[i];</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       chi_sq += residual*residual;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>    }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>    <span class="keywordflow">return</span> chi_sq;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor">#ifndef CPL_VECTOR_FIT_MAXITER</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="preprocessor"></span><span class="preprocessor">#define CPL_VECTOR_FIT_MAXITER 1000</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> cpl_error_code</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> sinfo_fit_lm(<span class="keyword">const</span> cpl_matrix *x,</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>              <span class="keyword">const</span> cpl_matrix *sigma_x,</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>              <span class="keyword">const</span> cpl_vector *y,</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>              <span class="keyword">const</span> cpl_vector *sigma_y,</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>              cpl_vector *a,</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>              <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>              <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>                          <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>              <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                          <span class="keywordtype">double</span> result[]),</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>              <span class="keywordtype">double</span> *mse,</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>              <span class="keywordtype">double</span> *red_chisq,</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>              cpl_matrix **covariance)</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> {</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>    <span class="keyword">const</span> <span class="keywordtype">double</span> *x_data     = NULL; <span class="comment">/* Pointer to input data                  */</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>    <span class="keyword">const</span> <span class="keywordtype">double</span> *y_data     = NULL; <span class="comment">/* Pointer to input data                  */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>    <span class="keyword">const</span> <span class="keywordtype">double</span> *sigma_data = NULL; <span class="comment">/* Pointer to input data                  */</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>    <span class="keywordtype">int</span> N    = 0;                    <span class="comment">/* Number of data points                  */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>    <span class="keywordtype">int</span> D    = 0;                    <span class="comment">/* Dimension of x-points                  */</span></div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>    <span class="keywordtype">int</span> M    = 0;                    <span class="comment">/* Number of fit parameters               */</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>    <span class="keywordtype">int</span> Mfit = 0;                    <span class="comment">/* Number of non-constant fit</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="comment">                                       parameters                             */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>    <span class="keywordtype">double</span> lambda    = 0.0;          <span class="comment">/* Lambda in L-M algorithm                */</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>    <span class="keywordtype">double</span> MAXLAMBDA = 10e40;        <span class="comment">/* Parameter to control the graceful exit</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> <span class="comment">                                       if steepest descent unexpectedly fails */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>    <span class="keywordtype">double</span> chi_sq    = 0.0;          <span class="comment">/* Current  chi^2                         */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>    <span class="keywordtype">int</span> count        = 0;            <span class="comment">/* Number of successive small improvements</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> <span class="comment">                                       in chi^2 */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>    <span class="keywordtype">int</span> iterations   = 0;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>    cpl_matrix *alpha  = NULL;       <span class="comment">/* The MxM ~curvature matrix used in L-M  */</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>    cpl_matrix *beta   = NULL;       <span class="comment">/* Mx1 matrix = -.5 grad(chi^2)           */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>    <span class="keywordtype">double</span> *a_data     = NULL;       <span class="comment">/* Parameters, a                          */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>    <span class="keywordtype">double</span> *a_da       = NULL;       <span class="comment">/* Candidate position a+da                */</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>    <span class="keywordtype">double</span> *part       = NULL;       <span class="comment">/* The partial derivatives df/da          */</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>    <span class="keywordtype">int</span> *ia_local      = NULL;       <span class="comment">/* non-NULL version of ia                 */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>    <span class="comment">/* If covariance computation is requested, then either</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> <span class="comment">    * return the covariance matrix or return NULL.</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>    <span class="keywordflow">if</span> (covariance != NULL) *covariance = NULL;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>    <span class="comment">/* Validate input */</span></div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>    cpl_ensure_code(x       != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>    cpl_ensure_code(sigma_x == NULL, CPL_ERROR_UNSUPPORTED_MODE);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>    cpl_ensure_code(y       != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>    cpl_ensure_code(a       != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>    <span class="comment">/* ia may be NULL */</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>    cpl_ensure_code(f       != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>    cpl_ensure_code(dfda    != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>    <span class="comment">/* Chi^2 and covariance computations require sigmas to be known */</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>    cpl_ensure_code( sigma_y != NULL ||</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                     (red_chisq == NULL && covariance == NULL),</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>    D = cpl_matrix_get_ncol(x);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>    N = cpl_matrix_get_nrow(x);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>    M = cpl_vector_get_size(a);</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>    cpl_ensure_code(N > 0 && D > 0 && M > 0, CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>    cpl_ensure_code( cpl_vector_get_size(y) == N,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                     CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>    x_data = cpl_matrix_get_data_const(x);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>    y_data = cpl_vector_get_data_const(y);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>    a_data = cpl_vector_get_data(a);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>    <span class="keywordflow">if</span> (sigma_y != NULL)</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>    {</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>       cpl_ensure_code( cpl_vector_get_size(sigma_y) == N,</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                        CPL_ERROR_INCOMPATIBLE_INPUT);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       <span class="comment">/* Sigmas must be positive */</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>       cpl_ensure_code( cpl_vector_get_min (sigma_y) > 0,</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>                        CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>       sigma_data = cpl_vector_get_data_const(sigma_y);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>    }</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>    ia_local = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>    cpl_ensure_code(ia_local != NULL, CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>    <span class="comment">/* Count non-constant fit parameters, copy ia */</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>    <span class="keywordflow">if</span> (ia != NULL)</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>    {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>       <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>       Mfit = 0;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>       <span class="keywordflow">for</span> (i = 0; i < M; i++)</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>       {</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>          ia_local[i] = ia[i];</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>          <span class="keywordflow">if</span> (ia[i] != 0)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>          {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             Mfit += 1;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>          }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>       }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>       <span class="keywordflow">if</span> (! (Mfit > 0))</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>       {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>          cpl_ensure_code( CPL_FALSE,</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>                           CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>       }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>    }</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>    {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>       <span class="comment">/* All parameters participate */</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>       <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>       Mfit = M;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>       <span class="keywordflow">for</span> (i = 0; i < M; i++)</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>       {</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>          ia_local[i] = 1;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>       }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>    }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>    <span class="comment">/* To compute reduced chi^2, we need N > Mfit */</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>    <span class="keywordflow">if</span> (! ( red_chisq == NULL || N > Mfit ) )</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>    {</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>          CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>    }</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>    <span class="comment">/* Create alpha, beta, a_da, part  work space */</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>    alpha = cpl_matrix_new(Mfit, Mfit);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>    <span class="keywordflow">if</span> (alpha == NULL)</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>    {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>          CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>    }</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>    beta = cpl_matrix_new(Mfit, 1);</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>    <span class="keywordflow">if</span> (beta == NULL)</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>    {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>       cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>          CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>    }</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>    a_da = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>    <span class="keywordflow">if</span> (a_da == NULL)</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>    {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>       cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>       cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>          CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>    }</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>    part = cpl_malloc(M * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>    <span class="keywordflow">if</span> (part == NULL)</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>    {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>       cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>       cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>       cpl_free(a_da);</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>          CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>    }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>    <span class="comment">/* Initialize loop variables */</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>    lambda = 0.001;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>    count = 0;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>    iterations = 0;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>    <span class="keywordflow">if</span>( (chi_sq = get_chisq(N, D, f, a_data, x_data, y_data, sigma_data)) < 0)</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>    {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>       cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>       cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>       cpl_free(a_da);</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>       cpl_free(part);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>          cpl_error_get_code());</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>    }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>    <span class="comment">/* uves_msg_debug("Initial chi^2 = %f", chi_sq); */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>    <span class="comment">/* Iterate until chi^2 didn't improve substantially many (say, 5)</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">      times in a row */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>    <span class="keywordflow">while</span> (count < 5 &&</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>           lambda < MAXLAMBDA &&</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>           iterations < CPL_VECTOR_FIT_MAXITER)</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>    {</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>       <span class="comment">/* In each iteration lambda increases, or chi^2 decreases or</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="comment">         count increases. Because chi^2 is bounded from below</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="comment">         (and lambda and count from above), the loop will terminate */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>       <span class="keywordtype">double</span> chi_sq_candidate = 0.0;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>       <span class="keywordtype">int</span> returncode = 0;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>       <span class="comment">/* Get candidate position in parameter space = a+da,</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="comment">       * where  alpha * da = beta .</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="comment">       * Increase lambda until alpha is non-singular</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>       <span class="keywordflow">while</span>( (returncode = get_candidate(a_data, ia_local,</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>                                          M, N, D,</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>                                          lambda, f, dfda,</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>                                          x_data, y_data, sigma_data,</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>                                          part, alpha, beta, a_da)</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>                 ) != 0</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>              && cpl_error_get_code() == CPL_ERROR_SINGULAR_MATRIX</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>              && lambda < MAXLAMBDA)</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>       {</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>          <span class="comment">/* uves_msg_debug("Singular matrix. lambda = %e", lambda); */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>          cpl_error_reset();</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>          lambda *= 9.0;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>       }</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>       <span class="comment">/* Set error if lambda diverged */</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>       <span class="keywordflow">if</span> ( !( lambda < MAXLAMBDA ) )</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>       {</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>          cpl_free(part);</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>             CPL_FALSE,</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>             CPL_ERROR_CONTINUE);</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>       }</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       <span class="keywordflow">if</span> (returncode != 0)</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>       {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>          cpl_free(part);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             CPL_FALSE,</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             cpl_error_get_code());</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>       }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>       <span class="comment">/* Get chi^2(a+da) */</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>       <span class="keywordflow">if</span> ((chi_sq_candidate = get_chisq(N, D, f, a_da,</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                                         x_data, y_data, sigma_data)) < 0)</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>       {</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>          cpl_free(part);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>             CPL_FALSE,</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>             cpl_error_get_code());</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>       }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>       <span class="comment">/* uves_msg_debug("Chi^2 = %f  Candidate = %f  Lambda = %e",</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="comment">         chi_sq, chi_sq_candidate, lambda);  */</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>       <span class="keywordflow">if</span> (chi_sq_candidate > chi_sq)</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>       {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>          <span class="comment">/* Move towards steepest descent */</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>          lambda *= 9.0;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>       }</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>       {</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>          <span class="comment">/* Move towards Newton's algorithm */</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>          lambda /= 10.0;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>          <span class="comment">/* Count the number of successive improvements in chi^2 of</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">            less than 0.01 relative */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>          <span class="keywordflow">if</span> ( chi_sq == 0 ||</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>               (chi_sq - chi_sq_candidate)/chi_sq < .01)</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>          {</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>             count += 1;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>          }</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>          <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>          {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>             <span class="comment">/* Chi^2 improved by a significant amount,</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment">               reset counter */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>             count = 0;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>          }</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>          <span class="comment">/* chi^2 improved, update a and chi^2 */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>          {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>             <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>             <span class="keywordflow">for</span> (i = 0; i < M; i++) a_data[i] = a_da[i];</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>          }</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>          chi_sq = chi_sq_candidate;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>       }</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>       iterations++;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>    }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>    <span class="comment">/* Set error if we didn't converge */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>    <span class="keywordflow">if</span> ( !( lambda < MAXLAMBDA && iterations < CPL_VECTOR_FIT_MAXITER ) )</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>    {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>       cpl_free(ia_local);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>       cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>       cpl_free(a_da);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>       cpl_free(part);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>       cpl_ensure_code(</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>          CPL_FALSE,</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>          CPL_ERROR_CONTINUE);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>    }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>    <span class="comment">/* Compute mse if requested */</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>    <span class="keywordflow">if</span> (mse != NULL)</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>    {</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>       <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>       *mse = 0.0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>       <span class="keywordflow">for</span>(i = 0; i < N; i++)</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>       {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>          <span class="keywordtype">double</span> fx_i = 0.0;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>          <span class="keywordtype">double</span> residual = 0.0;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>          <span class="comment">/* Evaluate f(x_i) at the best fit parameters */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>          <span class="keywordflow">if</span>( f(&(x_data[i*D]),</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                a_data,</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                &fx_i) != 0)</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>          {</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>             cpl_free(ia_local);</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>             cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>             cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>             cpl_free(a_da);</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>             cpl_free(part);</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>             cpl_ensure_code(</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>                CPL_FALSE,</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>                CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>          }</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>          residual = y_data[i] - fx_i;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>          *mse += residual * residual;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>       }</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>       *mse /= N;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>    }</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>    <span class="comment">/* Compute reduced chi^2 if requested */</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>    <span class="keywordflow">if</span> (red_chisq != NULL)</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>    {</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>       <span class="comment">/* We already know the optimal chi^2 (and that N > Mfit)*/</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>       *red_chisq = chi_sq / (N-Mfit);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>    }</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>    <span class="comment">/* Compute covariance matrix if requested</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="comment">    * cov = alpha(lambda=0)^-1</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>    <span class="keywordflow">if</span> (covariance != NULL)</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>    {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>       cpl_matrix *cov;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>       <span class="keywordflow">if</span>( get_candidate(a_data, ia_local,</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>                         M, N, D, 0.0, f, dfda,</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>                         x_data, y_data, sigma_data,</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                         part, alpha, beta, a_da)</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>           != 0)</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>       {</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>          cpl_free(part);</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>             CPL_FALSE,</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>             cpl_error_get_code());</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>       }</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>       cov = cpl_matrix_invert_create(alpha);</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>       <span class="keywordflow">if</span> (cov == NULL)</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       {</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>          cpl_free(part);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>             CPL_FALSE,</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>             cpl_error_get_code());</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>       }</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>       <span class="comment">/* Make sure that variances are positive */</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>       {</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>          <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>          <span class="keywordflow">for</span> (i = 0; i < Mfit; i++)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>          {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>             <span class="keywordflow">if</span> ( !(cpl_matrix_get(cov, i, i) > 0) )</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>             {</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                cpl_free(ia_local);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>                cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>                cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>                cpl_free(a_da);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>                cpl_free(part);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>                cpl_matrix_delete(cov);</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>                *covariance = NULL;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>                cpl_ensure_code(</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>                   CPL_FALSE,</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                   CPL_ERROR_SINGULAR_MATRIX);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>          }</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>       }</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>       <span class="comment">/* Expand covariance matrix from Mfit x Mfit</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> <span class="comment">         to M x M. Set rows/columns corresponding to fixed</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">         parameters to zero */</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>       *covariance = cpl_matrix_new(M, M);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>       <span class="keywordflow">if</span> (*covariance == NULL)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>          cpl_free(ia_local);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>          cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>          cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>          cpl_free(a_da);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>          cpl_free(part);</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>          cpl_matrix_delete(cov);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>          cpl_ensure_code(</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>             CPL_FALSE,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>             CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>       }</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>       {</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>          <span class="keywordtype">int</span> j, jmfit;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span> </div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>          <span class="keywordflow">for</span> (j = 0, jmfit = 0; j < M; j++)</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>             <span class="keywordflow">if</span> (ia_local[j] != 0)</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>             {</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>                <span class="keywordtype">int</span> i, imfit;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>                <span class="keywordflow">for</span> (i = 0, imfit = 0; i < M; i++)</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>                   <span class="keywordflow">if</span> (ia_local[i] != 0)</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>                   {</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>                      cpl_matrix_set(*covariance, i, j,</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>                                     cpl_matrix_get(</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                                        cov, imfit, jmfit));</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>                      imfit += 1;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>                   }</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                cpl_ensure( imfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                jmfit += 1;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>             }</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>          cpl_ensure( jmfit == Mfit, CPL_ERROR_ILLEGAL_INPUT,-1 );</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>       }</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>       cpl_matrix_delete(cov);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>    }</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>    cpl_free(ia_local);</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>    cpl_matrix_delete(alpha);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>    cpl_matrix_delete(beta);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>    cpl_free(a_da);</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>    cpl_free(part);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>    <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> sinfo_fit_amoeba_get_psum(<span class="keywordtype">int</span> ndim, <span class="keywordtype">int</span> mpts, <span class="keywordtype">double</span>** p, <span class="keywordtype">double</span>* psum)</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> {</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>    <span class="keywordtype">double</span> sum=0;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>    <span class="keywordflow">for</span> (j=0;j<ndim;j++) {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       <span class="keywordflow">for</span> (sum=0.0,i=0;i<mpts;i++) {</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>          sum += p[i][j];</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>       }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>       psum[j]=sum;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>    }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> }</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="preprocessor">#define SINFO_FIT_AMOEBA_SWAP(a,b) {swap=(a);(a)=(b);(b)=swap;}</span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> sinfo_fit_amoeba(</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>    <span class="keywordtype">double</span>**p,</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>    <span class="keywordtype">double</span> y[],</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>    <span class="keywordtype">int</span> ndim,</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>    <span class="keywordtype">double</span> ftol,</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>    <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>    <span class="keywordtype">int</span>* nfunk)</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> </div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>    <span class="keywordtype">int</span> ihi=0;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>    <span class="keywordtype">int</span> ilo=0;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>    <span class="keywordtype">int</span> inhi=0;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>    <span class="keywordtype">int</span> mpts=ndim+1;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>    <span class="keywordtype">double</span> rtol=0;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>    <span class="keywordtype">double</span> swap=0;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>    <span class="keywordtype">double</span> ysave=0;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>    <span class="keywordtype">double</span> ytry=0;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>    cpl_vector* sum=NULL;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>    <span class="keywordtype">double</span>* psum=NULL;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span> </div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>    sum=cpl_vector_new(ndim);</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>    psum=cpl_vector_get_data(sum);</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>    *nfunk=0;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>    sinfo_fit_amoeba_get_psum(ndim,mpts,p,psum);</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>    <span class="keywordflow">for</span>(;;) {</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       ilo=0;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> <span class="comment">        First we must determine which point is the highest (worst),</span></div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">        next-highest, and lowest (best), by looping over the points</span></div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> <span class="comment">        in the simplex</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>       ihi=y[0]>y[1] ? (inhi=1,0) : (inhi=0,1);</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span> </div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>       <span class="keywordflow">for</span> (i=0;i< mpts;i++) {</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>          <span class="keywordflow">if</span> (y[i] <= y[ilo]) ilo=i;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>          <span class="keywordflow">if</span> (y[i] > y[ihi]) {</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>             inhi=ihi;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>             ihi=i;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (y[i] > y[inhi] && i != ihi) inhi=i;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       }</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>       rtol=2.0*fabs(y[ihi]-y[ilo])/(fabs(y[ihi])+fabs(y[ilo]));</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> <span class="comment">        compute the fractional range from highest to lowest and return if</span></div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> <span class="comment">        satisfactory</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>       <span class="keywordflow">if</span>(rtol < ftol) { <span class="comment">// if returning, but best point and value is in slot 1</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>          SINFO_FIT_AMOEBA_SWAP(y[0],y[ilo]);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>          <span class="keywordflow">for</span> (i=0;i<ndim;i++) SINFO_FIT_AMOEBA_SWAP(p[1][i],p[ilo][i]);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>       }</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>       <span class="keywordflow">if</span> (*nfunk >= SINFO_FIT_AMOEBA_NMAX) {</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NMAX exceeded"</span>);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>          SINFO_FIT_AMOEBA_SWAP(y[0],y[ilo]);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>          <span class="keywordflow">for</span> (i=0;i<ndim;i++) SINFO_FIT_AMOEBA_SWAP(p[1][i],p[ilo][i]);</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>          <span class="keywordflow">for</span> (i=0;i<ndim;i++) {</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>             sinfo_msg(<span class="stringliteral">"p[1][i]=%g p[ilo][i]=%g ilo=%d"</span>,p[1][i],p[ilo][i],ilo);</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>          }</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>          assure(*nfunk >= SINFO_FIT_AMOEBA_NMAX,CPL_ERROR_UNSPECIFIED,</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>                 <span class="stringliteral">"NMAX exceeded"</span>);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> </div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>       }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>       *nfunk +=2;</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment">        Begin a new iteration. First extrapolate by a Factor -1 through the face</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment">        of the simplex across the high point, i.e. reflect the simplex from the</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="comment">        high point</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>       ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,-1.0);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>       <span class="keywordflow">if</span>(ytry <= y[ilo]) {</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>          <span class="comment">/*</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment">            Gives a result better than the best point, so try an additional</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment">            extrapolation by a factor 2</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>          ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,2.0);</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ytry >= y[inhi]) {</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>          <span class="comment">/*</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">           The reflected point is worse than the second highest, so look for an</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">           intermediate lower point, i.e. do a one-dimensional contraction</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>          ysave=y[ihi];</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>          ytry=sinfo_fit_amotry(p,y,psum,ndim,funk,ihi,0.5);</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>          <span class="keywordflow">if</span>(ytry >= ysave) {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment">               Can't seem to get rid of that high point.</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">               Better contract around the lowest (best) point</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>             <span class="keywordflow">for</span>(i=0;i<mpts;i++) {</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                <span class="keywordflow">if</span>(i != ilo) {</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>                   <span class="keywordflow">for</span>( j=0;j<ndim;j++) {</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>                      p[i][j]=psum[j]=0.5*(p[i][j]+p[ilo][j]);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>                   }</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>                   y[i]=(*funk)(psum);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>                }</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>             }</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>             *nfunk += ndim; <span class="comment">/* Keep track of function evaluations */</span></div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>             sinfo_fit_amoeba_get_psum(ndim,mpts,p,psum);<span class="comment">/* Recomputes psum */</span></div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>          }</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>          --(*nfunk);</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>          <span class="comment">/* Go back for the test of doneness and the next iteration */</span></div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>       }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>    }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>   cleanup:</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>    cpl_vector_delete(sum);</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> }</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="keyword">static</span>  <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> sinfo_fit_amotry(<span class="keywordtype">double</span>** p, <span class="keywordtype">double</span> y[], <span class="keywordtype">double</span> psum[], <span class="keywordtype">int</span> ndim,</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                  <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),<span class="keywordtype">int</span> ihi, <span class="keywordtype">double</span> fac)</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> {</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>    <span class="keywordtype">int</span> j;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>    <span class="keywordtype">double</span> fac1=0;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>    <span class="keywordtype">double</span> fac2=0;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>    <span class="keywordtype">double</span> ytry=0;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>    cpl_vector * vtry=NULL;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>    <span class="keywordtype">double</span> *ptry=NULL;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>    vtry=cpl_vector_new(ndim);</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>    ptry=cpl_vector_get_data(vtry);</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>    fac1=(1.0-fac)/ndim;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>    fac2=fac1-fac;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>    <span class="keywordflow">for</span> (j=0;j<ndim;j++) {</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>       ptry[j]=psum[j]*fac1-p[ihi][j]*fac2;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>    }</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>    ytry=(*funk)(ptry);</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>    <span class="keywordflow">if</span> (ytry < y[ihi]) {</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>       y[ihi]=ytry;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>       <span class="keywordflow">for</span> (j=0;j<ndim;j++) {</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>          psum[j] += ptry[j]-p[ihi][j];</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>          p[ihi][j]=ptry[j];</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>       }</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>    }</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>    sinfo_free_my_vector(&vtry);</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>    <span class="keywordflow">return</span> ytry;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> }</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordtype">int</span> sinfo_vector_dindgen(cpl_vector** v)</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> {</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>    <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>    cknull(*v,<span class="stringliteral">"Null input vector"</span>);</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>    check(sz=cpl_vector_get_size(*v),<span class="stringliteral">"Getting size of a vector"</span>);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>    <span class="keywordflow">for</span>(i=0;i<sz;i++) {</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>       cpl_vector_set(*v,i,(<span class="keywordtype">double</span>)i);</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>    }</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   cleanup:</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> </div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> }</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="keywordtype">int</span> sinfo_is_fits_file(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> {</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>    FILE    *fp ;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>    <span class="keywordtype">char</span>    *magic ;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>    <span class="keywordtype">int</span>        isfits ;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>    <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">"r"</span>))==NULL) {</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open file [%s]"</span>, filename) ;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>    }</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>    magic = cpl_calloc(FITS_MAGIC_SZ+1, <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>)) ;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>    (void)fread(magic, 1, FITS_MAGIC_SZ, fp) ;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>    (void)fclose(fp) ;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>    magic[FITS_MAGIC_SZ] = (char)0 ;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>    <span class="keywordflow">if</span> (strstr(magic, <span class="stringliteral">"SIMPLE"</span>)!=NULL)</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>       isfits = 1 ;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>       isfits = 0 ;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>    cpl_free(magic) ;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>    <span class="keywordflow">return</span> isfits ;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> cpl_error_code</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> sinfo_table_correl(cpl_table * t1, cpl_table* t2, cpl_table* range,<span class="keywordtype">double</span>* xcor)</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> {</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>    <span class="keywordtype">double</span> wsr=0;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>    <span class="keywordtype">double</span> wer=0;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>    <span class="keywordtype">int</span> nr=0;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>    <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>    <span class="keywordtype">int</span> nrows=0;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>    <span class="keywordtype">double</span> prod=0;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>    cpl_table* tmp_t1=NULL;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>    cpl_table* tmp_t2=NULL;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>    check_nomsg(nr=cpl_table_get_nrow(range));</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>    <span class="keywordflow">for</span>(i=0;i<nr;i++) {</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>       wsr=cpl_table_get_double(range,<span class="stringliteral">"WSTART"</span>,i,&status);</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>       wer=cpl_table_get_double(range,<span class="stringliteral">"WEND"</span>,i,&status);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>       cpl_table_and_selected_double(t1,<span class="stringliteral">"WAVE"</span>,CPL_NOT_LESS_THAN,wsr);</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>       cpl_table_and_selected_double(t1,<span class="stringliteral">"WAVE"</span>,CPL_NOT_GREATER_THAN,wer);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>       tmp_t1=cpl_table_extract_selected(t1);</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>       cpl_table_and_selected_double(t2,<span class="stringliteral">"WAVE"</span>,CPL_NOT_LESS_THAN,wsr);</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>       cpl_table_and_selected_double(t2,<span class="stringliteral">"WAVE"</span>,CPL_NOT_GREATER_THAN,wer);</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>       tmp_t2=cpl_table_extract_selected(t2);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>       cpl_table_duplicate_column(tmp_t1,<span class="stringliteral">"INT1"</span>,tmp_t1,<span class="stringliteral">"INT"</span>);</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>       cpl_table_duplicate_column(tmp_t1,<span class="stringliteral">"INT2"</span>,tmp_t2,<span class="stringliteral">"INT"</span>);</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>       cpl_table_multiply_columns(tmp_t1,<span class="stringliteral">"INT1"</span>,<span class="stringliteral">"INT2"</span>);</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>       mean=cpl_table_get_column_mean(tmp_t1,<span class="stringliteral">"INT1"</span>);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>       nrows=cpl_table_get_nrow(tmp_t1);</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>       prod=mean*nrows;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>       *xcor+=prod;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>    }</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>   cleanup:</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>    <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> }</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> cpl_error_code</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> sinfo_frameset_merge(cpl_frameset * set1, cpl_frameset* set2)</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>    cpl_frame* frm_tmp=NULL;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>    cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> </div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>    passure(set1 != NULL, <span class="stringliteral">"Wrong input set"</span>);</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>    check_nomsg(frm_tmp = cpl_frameset_get_first(set2));</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>    <span class="keywordflow">while</span> (frm_tmp != NULL)</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>    {</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>       frm_dup=cpl_frame_duplicate(frm_tmp);</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>       cpl_frameset_insert(set1,frm_dup);</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>       frm_tmp = cpl_frameset_get_next(set2);</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>    }</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>   cleanup:</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>    <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> }</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> cpl_error_code</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> sinfo_extract_frames_group_type(<span class="keyword">const</span> cpl_frameset * <span class="keyword">set</span>,</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>                                 cpl_frameset** ext,</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>                                 cpl_frame_group type)</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> {</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>    <span class="keyword">const</span> cpl_frame* frm_tmp=NULL;</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>    cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>    cpl_frame_group g;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> </div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>    check_nomsg(*ext = cpl_frameset_new());</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>    check_nomsg(frm_tmp = cpl_frameset_get_first_const(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>    <span class="keywordflow">while</span> (frm_tmp != NULL)</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>    {</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>       g=cpl_frame_get_group(frm_tmp);</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>       <span class="keywordflow">if</span>(g == type) {</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>          frm_dup=cpl_frame_duplicate(frm_tmp);</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>          cpl_frameset_insert(*ext,frm_dup);</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>          <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"group %d insert file %s "</span>,</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>                          type,cpl_frame_get_filename(frm_dup));</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>       }</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>       frm_tmp = cpl_frameset_get_next_const(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>    }</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>   cleanup:</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>    <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> }</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> </div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> sinfo_get_pupil_shift(cpl_imagelist* iml,<span class="keyword">const</span> <span class="keywordtype">int</span> n,cpl_table** qclog_tbl)</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> {</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>    cpl_size max_ima_x=0;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>    cpl_size max_ima_y=0;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>    <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>    <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>    <span class="keywordtype">double</span> xshift=0;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>    <span class="keywordtype">double</span> yshift=0;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> </div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>    <span class="keywordtype">double</span> max_ima_cx=0;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>    <span class="keywordtype">double</span> max_ima_cy=0;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> </div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>    cpl_image* img=NULL;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>    cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> </div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>    <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> </div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>    img=cpl_imagelist_collapse_median_create(iml);</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>    nx=cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>    ny=cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> </div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>    img_dup=cpl_image_duplicate(img);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>    sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>    cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y);</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>    max_ima_cx=cpl_image_get_centroid_x_window(img_dup,1,1,nx,ny);</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>    max_ima_cy=cpl_image_get_centroid_y_window(img_dup,1,1,nx,ny);</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> </div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>    cpl_image_delete(img_dup);</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span> </div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>    xshift=max_ima_cx-(double)nx/2;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>    yshift=max_ima_cy-(double)ny/2;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> </div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>    snprintf(key_name,<span class="keyword">sizeof</span>(key_name),<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC PUPIL"</span>,n,<span class="stringliteral">" SHIFTX"</span>);</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>    sinfo_qclog_add_double(*qclog_tbl,key_name,xshift,</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>                           <span class="stringliteral">"X shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>);</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>    snprintf(key_name,<span class="keyword">sizeof</span>(key_name),<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC PUPIL"</span>,n,<span class="stringliteral">" SHIFTY"</span>);</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>    sinfo_qclog_add_double(*qclog_tbl,key_name,yshift,</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>                           <span class="stringliteral">"Y shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>);</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>    cpl_image_delete(img);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> </div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> }</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> </div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="keywordtype">int</span> sinfo_get_strehl_type(cpl_frameset* sof)</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> {</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>    <span class="keywordtype">int</span> strehl_sw=0;</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>    <span class="keywordtype">int</span> nobs=0;</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>    cpl_frameset* obs=NULL;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> </div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>    <span class="keywordtype">float</span>* pix_scale=NULL;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>    obs = cpl_frameset_new();</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> </div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>    sinfo_contains_frames_kind(sof,obs,PRO_OBS_PSF);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> </div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>    nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>    <span class="keywordflow">if</span> (nobs < 1) {</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>       sinfo_contains_frames_kind(sof,obs,PRO_OBS_STD);</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>       nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>    }</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>    nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span> </div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>    <span class="keywordflow">if</span> (nobs < 1) {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>       pix_scale=cpl_calloc(nobs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>       <span class="keywordflow">for</span>(i=0;i<nobs;i++) {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>          frame=cpl_frameset_get_frame(obs,i);</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>          plist=cpl_propertylist_load(cpl_frame_get_filename(frame),0);</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>          pix_scale[i]=sinfo_pfits_get_pixscale(plist);</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>          cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>       }</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>       <span class="keywordflow">if</span>(sinfo_pix_scale_isnot_const(pix_scale,nobs)) {</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>          strehl_sw=1;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>       }</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>       cpl_free(pix_scale);</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>    }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>    cpl_frameset_delete(obs);</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>    <span class="keywordflow">return</span> strehl_sw;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> }</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> </div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="keywordtype">double</span> sinfo_get_wave_cent(<span class="keyword">const</span> <span class="keywordtype">char</span>* band)</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> {</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>    <span class="keywordtype">double</span> lam=0.;</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>       lam=1.950;</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>       lam=2.175;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>       lam=1.225;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>       lam=1.675;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>    }</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>    <span class="keywordflow">return</span> lam;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> </div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> }</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="keywordtype">int</span> sinfo_pix_scale_isnot_const(<span class="keywordtype">float</span>* pix_scale, <span class="keyword">const</span> <span class="keywordtype">int</span> n) {</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>    <span class="keywordtype">float</span> eps=0.0001;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>    <span class="keywordtype">float</span> ref=pix_scale[0];</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> </div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>    <span class="keywordflow">for</span>(i=1;i<n;i++) {</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>       <span class="keywordflow">if</span>(fabs(pix_scale[i]-ref) > eps) <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>    }</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> }</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_get_pix_scale(<span class="keywordtype">float</span> ps) {</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* key_value;</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>    <span class="keywordtype">float</span> eps=0.0001;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>    <span class="keywordflow">if</span>(fabs(ps - 0.025) < eps) {</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>       key_value=<span class="stringliteral">"0.025"</span>;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>    }</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 0.1) < eps) {</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>       key_value=<span class="stringliteral">"0.1"</span>;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>    }</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 0.25) < eps) {</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>       key_value=<span class="stringliteral">"0.25"</span>;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>    }</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(ps - 1.0) < eps) {</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>       key_value=<span class="stringliteral">"pupil"</span>;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"ps=%f. Failed to set pixel scale"</span>,ps);</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>    }</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>    <span class="keywordflow">return</span> key_value;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> }</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> </div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> <span class="keywordtype">int</span>  sinfo_get_clean_mean_window(cpl_image* img,</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>                                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, <span class="keyword">const</span> <span class="keywordtype">int</span> nclip,</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>                                  <span class="keywordtype">double</span>* local_clean_mean,</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>                                  <span class="keywordtype">double</span>* clean_stdev)</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> {</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> </div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>    <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>    <span class="keywordtype">double</span> stdev=0;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>    <span class="keywordtype">double</span> threshold=0;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>    <span class="keywordtype">double</span> lo_cut=0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>    <span class="keywordtype">double</span> hi_cut=0;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>    cpl_mask* mask=NULL;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>    cpl_image* tmp=NULL;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>    cpl_stats* stats=NULL;</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>    tmp=cpl_image_extract(img,llx,lly,urx,ury);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>    cpl_image_accept_all(tmp);</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>    <span class="keywordflow">for</span>(i=0;i<nclip;i++) {</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> </div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>       cpl_stats_delete(stats);</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>       stats = cpl_stats_new_from_image(tmp, CPL_STATS_MEAN | CPL_STATS_STDEV);</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>       mean = cpl_stats_get_mean(stats);</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>       stdev = cpl_stats_get_stdev(stats);</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> </div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>       threshold=kappa*stdev;</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>       lo_cut=mean-threshold;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>       hi_cut=mean+threshold;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>       cpl_image_accept_all(tmp);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>       mask=cpl_mask_threshold_image_create(tmp,lo_cut,hi_cut);</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> </div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>       cpl_mask_not(mask);</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>       cpl_image_reject_from_mask(tmp,mask);</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>       cpl_mask_delete(mask);</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> </div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>    }</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>    *local_clean_mean=mean;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>    *clean_stdev=stdev;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>    cpl_image_delete(tmp);</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>    cpl_stats_delete(stats);</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> </div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> </div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> }</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="keywordtype">int</span> sinfo_check_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val) {</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error before %d"</span>,val);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_where());</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>    }</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> }</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> </div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> sinfo_clean_nan(cpl_image** im)</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> {</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>    <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>    <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>    <span class="keywordtype">float</span>* data=NULL;</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> </div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>    nx=cpl_image_get_size_x(*im);</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>    ny=cpl_image_get_size_y(*im);</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>    data=cpl_image_get_data_float(*im);</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>    <span class="keywordflow">for</span>(j=0;j<ny;j++) {</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>       <span class="keywordflow">for</span>(i=0;i<nx;i++) {</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>          <span class="keywordflow">if</span>(isnan(data[j*nx+i]) != 0) {</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>             data[j*nx+i] = 0;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>          }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>       }</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>    }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> }</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> </div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> sinfo_add_pro_fits_key(cpl_propertylist * plist,</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>                        <span class="keywordtype">char</span>* pro_catg,</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>                        <span class="keywordtype">char</span>* file_name,</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>                        <span class="keywordtype">char</span>* out_name)</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>    <span class="keywordtype">char</span>* date=NULL;</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>    date     = sinfo_get_datetime_iso8601() ;</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> </div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>                                         KEY_NAME_PIPEFILE, out_name) ;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>    cpl_propertylist_set_comment(plist, KEY_NAME_PIPEFILE,KEY_HELP_PIPEFILE) ;</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>                                         KEY_NAME_HPRO_DID, KEY_VALUE_HPRO_DID) ;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DID,KEY_HELP_HPRO_DID) ;</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> </div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>                                         KEY_NAME_HPRO_TYPE, <span class="stringliteral">"REDUCED"</span>) ;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_TYPE, KEY_HELP_HPRO_TYPE) ;</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> </div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>                                         KEY_NAME_HPRO_CATG, pro_catg) ;</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_CATG,  KEY_HELP_HPRO_CATG);</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> </div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>                                         KEY_NAME_HPRO_STATUS, <span class="stringliteral">"OK"</span>) ;</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_STATUS,KEY_HELP_HPRO_CATG);</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>                                         KEY_NAME_HPRO_DATE, date) ;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DATE, KEY_HELP_HPRO_DATE);</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> </div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>                                         KEY_NAME_HPRO_RECID, file_name) ;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_RECID,KEY_HELP_HPRO_RECID);</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span> </div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>    cpl_propertylist_insert_after_string(plist, <span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>                                         KEY_NAME_HPRO_DRSID, PACKAGE_VERSION);</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>    cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DRSID,KEY_HELP_HPRO_DRSID);</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> </div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> </div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> }</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> <span class="keywordtype">int</span>  sinfo_compare_tags(</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>    <span class="keyword">const</span> cpl_frame   *   frame1,</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>    <span class="keyword">const</span> cpl_frame   *   frame2)</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> {</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>    <span class="keywordtype">char</span>            *   v1 ;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>    <span class="keywordtype">char</span>            *   v2 ;</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>    <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> </div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>    <span class="comment">/* Get the tags */</span></div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>    <span class="keywordflow">if</span> ((v1 = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame1)) == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>    <span class="keywordflow">if</span> ((v2 = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame2)) == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> </div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>    <span class="comment">/* Compare the tags */</span></div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>    <span class="keywordflow">if</span> (strcmp(v1, v2)) <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>    <span class="keywordflow">else</span> <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> }</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="keywordtype">int</span> sinfo_extract_raw_pinhole_frames(cpl_frameset * sof, cpl_frameset** raw)</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> {</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>             <span class="keywordflow">if</span>(sinfo_frame_is_pinhole_lamp(tag) == 1) {</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>                cpl_frameset_insert(*raw,frame);</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>             }</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>          }</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>       }</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>    }</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> </div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="keywordtype">int</span> sinfo_get_ins_set(<span class="keywordtype">char</span>* band,<span class="keywordtype">int</span>* ins_set){</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>       *ins_set = 0;</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>    }</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>       *ins_set = 1;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>    }</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>       *ins_set = 2;</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>    }</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>       *ins_set = 3;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>    }</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span> </div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> </div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> }</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames(cpl_frameset * sof, cpl_frameset** raw)</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> {</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>             <span class="keywordflow">if</span>(sinfo_frame_is_raw(tag) == 1) {</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>                cpl_frameset_insert(*raw,frame);</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>             }</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>          }</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>       }</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>    }</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> }</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> <span class="keywordtype">int</span> sinfo_remove_qc_frames(cpl_frameset* sof,cpl_frameset** raw)</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> {</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> </div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>       <span class="comment">/* sinfo_msg("name=%s",name); */</span></div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>          <span class="comment">/* sinfo_msg("\t exist "); */</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>             <span class="comment">/* sinfo_msg("\t tag %s\n ",tag); */</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>             <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"QC"</span>) != NULL) {</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>                <span class="comment">/* sinfo_msg("remove frame %s\n",name); */</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>                cpl_frameset_erase(*raw,tag);</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>             }</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>          }</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>          <span class="comment">/* sinfo_msg("remove frame\n"); */</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>          cpl_frameset_erase_frame(*raw,frame);</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>       }</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>    }</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> </div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> }</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> </div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="keywordtype">int</span> sinfo_contains_frames_kind(cpl_frameset * sof,</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>                                cpl_frameset* raw,</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span>*         type)</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> </div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>      frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>             <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>             <span class="keywordflow">if</span>(strstr(tag,type) != NULL) {</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>                <span class="comment">/* sinfo_msg("Match name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>                frame_dup = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>                cpl_frameset_insert(raw,frame_dup);</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>                <span class="comment">/* sinfo_msg("inserted\n"); */</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>             }</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>          }</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>       }</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>    }</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> }</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> </div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> </div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> </div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="keywordtype">int</span> sinfo_is_fibres_on_off(cpl_frameset * sof,</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>                            cpl_frameset* raw)</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> {</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> </div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>             <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>             <span class="keywordflow">if</span>( strcmp(tag,PRO_FIBRE_NS_STACKED ) == 0) {</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>                <span class="comment">/* sinfo_msg("Match name=%s tag=%s type=%s\n",name,tag); */</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>                frame_dup = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>                cpl_frameset_insert(raw,frame_dup);</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>                <span class="comment">/* sinfo_msg("inserted\n"); */</span></div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>             }</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>          }</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>       }</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>    }</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span> }</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span> </div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> </div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="keywordtype">int</span> sinfo_contains_frames_type(cpl_frameset * sof,</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>                                cpl_frameset** raw,</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> {</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>             <span class="keywordflow">if</span>(strstr(tag,type) != NULL) {</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>                cpl_frameset_insert(*raw,frame_dup);</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>             }</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>          }</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>       }</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>    }</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> }</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> </div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type2(cpl_frameset * sof,</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>                                    cpl_frameset** raw,</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>                                    <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> {</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> </div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>    frame = cpl_frameset_find(sof,type);</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>    <span class="keywordflow">while</span>(frame) {</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>       frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>       cpl_frameset_insert(*raw,frame_dup);</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>       frame = cpl_frameset_find(sof,NULL);</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>    }</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> </div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> }</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> </div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type1(cpl_frameset * sof,</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>                                    cpl_frameset* raw,</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>                                    <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> {</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> </div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>    frame = cpl_frameset_find(sof,type);</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>    <span class="keywordflow">while</span>(frame) {</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>       frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>       cpl_frameset_insert(raw,frame_dup);</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>       frame = cpl_frameset_find(sof,NULL);</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>    }</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span> </div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> }</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span> </div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type(cpl_frameset * sof,</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>                                   cpl_frameset** raw,</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>                                   <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> {</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>    <span class="keywordtype">char</span> tag[FILE_NAME_SZ];</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>    <span class="keywordtype">char</span> name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>       strcpy(name, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>             strcpy(tag,cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>             <span class="keywordflow">if</span>(strcmp(tag,type) == 0) {</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span> </div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>                cpl_frameset_insert(*raw,frame_dup);</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>             }</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>          }</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>       }</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>    }</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> }</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> </div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="keywordtype">int</span> sinfo_extract_frames_type(cpl_frameset * sof,</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>                               cpl_frameset * raw,</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>*          type)</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span> {</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) == 1) {</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>             <span class="keywordflow">if</span>(strcmp(tag,type) == 0) {</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>                <span class="comment">/* sinfo_msg("name=%s tag=%s type=%s\n",name,tag,type); */</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>                cpl_frameset_insert(raw,frame_dup);</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>             }</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>          }</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>       }</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>    }</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> }</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span> </div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> </div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> <span class="keywordtype">int</span> sinfo_extract_obj_frames(cpl_frameset * sof, cpl_frameset* obj)</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> {</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>             <span class="keywordflow">if</span>(sinfo_tag_is_obj(tag) == 1) {</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>                cpl_frameset_insert(obj,frame_dup);</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>             }</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>          }</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>       }</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>    }</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span> </div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> }</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> </div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> <span class="keywordtype">int</span> sinfo_extract_obj_products(cpl_frameset * sof, cpl_frameset* obj)</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> {</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> </div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>             <span class="keywordflow">if</span>(sinfo_tag_is_objpro(tag) == 1) {</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>                cpl_frameset_insert(obj,frame_dup);</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>             }</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>          }</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>       }</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>    }</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> }</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> </div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> <span class="keywordtype">int</span> sinfo_extract_on_frames(cpl_frameset * sof, cpl_frameset* on)</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> {</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> </div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>       <span class="keywordflow">if</span>(sinfo_frame_is_on(frame) ==1) {</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>          frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>          cpl_frameset_insert(on,frame_dup);</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>       }</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>    }</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> </div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> }</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> </div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> <span class="keywordtype">int</span> sinfo_extract_sky_frames(cpl_frameset * sof, cpl_frameset* sky)</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> {</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>             <span class="keywordflow">if</span>(sinfo_tag_is_sky(tag) == 1) {</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>                cpl_frameset_insert(sky,frame_dup);</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>             }</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>          }</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>       }</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>    }</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span> </div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> }</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> </div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> </div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> </div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> <span class="keywordtype">int</span> sinfo_extract_off_frames(cpl_frameset * sof, cpl_frameset* off)</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> {</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>       <span class="keywordflow">if</span>(sinfo_frame_is_on(frame)) {</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>          frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>          cpl_frameset_insert(off,frame_dup);</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>       }</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>    }</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span> </div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> }</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span> </div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> <span class="keywordtype">int</span> sinfo_extract_mst_frames(cpl_frameset * sof, cpl_frameset* cdb)</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> {</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> </div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>             <span class="keywordflow">if</span>(sinfo_frame_is_cdb(tag) == 1) {</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>                cpl_frameset_insert(cdb,frame_dup);</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>             }</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>          }</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>       }</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>    }</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span> </div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> }</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span> </div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> cpl_frameset* sinfo_frameset_join(cpl_frameset* fs1,cpl_frameset* fs2) {</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> </div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>    cpl_frameset* join=NULL;</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>    cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>    cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>    <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> </div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>    join=cpl_frameset_new();</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> </div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>    n=cpl_frameset_get_size(fs1);</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>    <span class="keywordflow">for</span>(i=0;i<n; i++) {</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>       frm=cpl_frameset_get_frame(fs1,i);</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>       frm_dup= cpl_frame_duplicate(frm);</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>       cpl_frameset_insert(join,frm_dup);</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>    }</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> </div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>    n=cpl_frameset_get_size(fs2);</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>    <span class="keywordflow">for</span>(i=0;i<n; i++) {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>       frm=cpl_frameset_get_frame(fs2,i);</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>       frm_dup= cpl_frame_duplicate(frm);</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>       cpl_frameset_insert(join,frm_dup);</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>    }</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> </div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>    <span class="keywordflow">return</span> join;</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> </div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> }</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> </div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> </div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> <span class="keywordtype">int</span> sinfo_extract_stk_frames(cpl_frameset * sof,</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>                              cpl_frameset* res)</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> {</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> </div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>             <span class="keywordflow">if</span>(sinfo_frame_is_stk(tag) == 1) {</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>                frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>                cpl_frameset_insert(res,frame_dup);</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>             }</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>          }</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>       }</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>    }</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> }</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> </div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> </div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> sinfo_extract_preoptic_frames(cpl_frameset * sof,</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>                               cpl_frameset** res,</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* val)</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> {</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> </div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>          <span class="keywordflow">if</span>(sinfo_frame_is_preoptic(frame,val) == 1) {</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>             frame_dup=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>             cpl_frameset_insert(*res,frame_dup);</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>          }</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>       }</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>    }</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> }</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> </div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> <span class="keywordtype">int</span> sinfo_extract_raw_stack_frames(cpl_frameset * sof, cpl_frameset** pro)</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> {</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>    cpl_frame* frame_dup   = NULL;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span> </div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> </div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>             <span class="comment">/* sinfo_msg("tag=%s\n",tag); */</span></div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>             <span class="keywordflow">if</span>(sinfo_frame_is_raw_stack(tag) == 1) {</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>                frame_dup   = cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>                cpl_frameset_insert(*pro,frame_dup);</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>             }</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>          }</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>       }</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>    }</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> </div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span> }</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> </div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> </div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> <span class="keywordtype">int</span> sinfo_extract_raw_slit_frames(cpl_frameset * sof, cpl_frameset** pro)</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> {</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>    <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>    nsof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>    <span class="keywordflow">for</span> (i=0 ; i<nsof ; i++) {</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>       frame = cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(name) ==1) {</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>          <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>          <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>             <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span></div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>             tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>             <span class="keywordflow">if</span>(sinfo_frame_is_slit_lamp(tag) == 1) {</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>                cpl_frameset_insert(*pro,frame);</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>             }</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>          }</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>       }</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>    }</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> }</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> </div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> <span class="keywordtype">int</span> sinfo_frame_is_raw(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> {</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span> </div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PINHOLE_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SLIT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_NS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_EW)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_NS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_SKY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLUX_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FOCUS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_STD)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_OH)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> </div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PUPIL_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_JITTER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_JITTER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> </div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> </div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> </div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> }</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> </div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> <span class="keywordtype">int</span> sinfo_frame_is_raw_stack(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> {</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> </div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_DUMMY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_LAMP_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_WAVE_NS_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> </div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLUX_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_NS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_EW)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> </div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_PSF)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FIBRE_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> </div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FOCUS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> </div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PUPIL_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_JITTER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_JITTER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> </div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_NODDING_DITHER)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> </div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> </div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_IMAGE_PRE_OBJECT)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_IMAGE_PRE_SKY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_STD)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_OH)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_STD_STAR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SKY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> </div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> }</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> </div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> <span class="keywordtype">int</span> sinfo_frame_is_raw_dark(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span> {</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> </div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> </div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> }</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> </div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> <span class="keywordtype">int</span> sinfo_frame_is_slit_lamp(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> {</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_SLIT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> </div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> }</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> </div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> </div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> <span class="keywordtype">int</span> sinfo_frame_is_pinhole_lamp(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> {</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_PINHOLE_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> </div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> }</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> </div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> </div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span> <span class="keywordtype">int</span> sinfo_frame_is_cdb(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> {</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>    <span class="comment">/* For the moment not checked the following:</span></div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span> <span class="comment"></span></div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> <span class="comment">   PRO_STACKED</span></div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> <span class="comment">   PRO_SLIT_ON</span></div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> <span class="comment">   PRO_FLUX_LAMP_STACKED</span></div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span> <span class="comment">   PRO_WAVE_LAMP_STACKED</span></div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> <span class="comment">   PRO_PSF_CALIBRATOR_STACKED</span></div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> <span class="comment">   PRO_FOCUS_STACKED</span></div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> <span class="comment">   PRO_OBJECT_NODDING_STACKED</span></div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> <span class="comment">   PRO_OBJECT_SKYSPIDER_STACKED</span></div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> <span class="comment">   PRO_SKY_NODDING_STACKED</span></div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> <span class="comment">   PRO_STD_NODDING_STACKED</span></div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> <span class="comment">   PRO_MASK_CUBE</span></div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> <span class="comment">   PRO_PSF</span></div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> <span class="comment">   TMP_FOCUS</span></div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span> <span class="comment">   TMP_FOCUS_ON</span></div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> <span class="comment">   TMP_FOCUS_OFF</span></div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span> <span class="comment">   PRO_FOCUS</span></div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> <span class="comment">   PRO_FOCUS_GAUSS</span></div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span> <span class="comment">   PRO_SPECTRA</span></div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> <span class="comment">   PRO_CUBE</span></div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> <span class="comment">   PRO_CUBE_COLL</span></div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> <span class="comment">   PRO_SLOPEX</span></div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> <span class="comment">   PRO_SLOPEY</span></div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> <span class="comment">   PRO_MASK_CUBE</span></div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> <span class="comment">   PRO_OBJ_CUBE</span></div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span> <span class="comment">   PRO_BP_COEFF</span></div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> </div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>    <span class="keywordflow">if</span> (!strcmp(tag, REF_LINE_ARC)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>    <span class="keywordflow">if</span> (!strcmp(tag, REF_LINE_OH)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_HP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_DI)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_NO)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_NL)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_BP_MAP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLOPE)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_DISTORTION)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLITLETS_DISTANCE)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS_GUESS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_PAR_LIST)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_COEF_SLIT)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_LAMP_SPEC)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_TWIFLAT)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_COEFF_LIST)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_INDEX_LIST)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_HALO_SPECT)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FIRST_COL)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FOCUS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_MAP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_REF_ATM_REF_CORR)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> </div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> </div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> }</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> </div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> </div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span> </div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span> </div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> <span class="keywordtype">int</span> sinfo_frame_is_stk(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> {</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>    <span class="comment">/* For the moment not checked the following: */</span></div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> </div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span> </div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_STACKED_DUMMY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_STACK_SKY_DIST)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_STACK_MFLAT_DIST)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> </div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> </div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> </div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> }</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span> </div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> sinfo_propertylist_has(cpl_propertylist* plist,</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* key) {</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> </div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>    <span class="keywordflow">return</span> cpl_propertylist_has(plist,key);</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span> </div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span> }</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> </div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> <span class="keywordtype">int</span> sinfo_frame_is_preoptic(cpl_frame* frame,<span class="keyword">const</span> <span class="keywordtype">char</span>* val)</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span> {</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span> </div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>    <span class="keywordtype">char</span>* file=NULL;</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>    <span class="keywordtype">char</span> popt[FILE_NAME_SZ];</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> </div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span> </div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>    file = cpl_strdup(cpl_frame_get_filename(frame)) ;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>       cpl_free(file);</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>    }</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span> </div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>       strcpy(popt,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>       cpl_free(file);</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>    }</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>    cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>    cpl_free(file);</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> </div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>    <span class="keywordflow">if</span> (strstr(val,popt) != NULL) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> </div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> </div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> </div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> }</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> </div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span> </div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> <span class="keywordtype">int</span> sinfo_get_preoptic(<span class="keyword">const</span> <span class="keywordtype">char</span>* file, <span class="keyword">const</span> <span class="keywordtype">char</span>* val)</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> {</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span> </div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span> </div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> </div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>    }</div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> </div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>       strcpy((<span class="keywordtype">char</span>*)val,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>    }</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>    cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> </div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span> </div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span> }</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span> </div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span> <span class="comment">  static int</span></div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span> <span class="comment">  sinfo_stat_rectangle(cpl_image* img,</span></div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span> <span class="comment">  const int kappa,</span></div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> <span class="comment">  const int nclip,</span></div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span> <span class="comment">  double *mean,</span></div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span> <span class="comment">  double *stdev)</span></div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span> <span class="comment">  {</span></div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span> <span class="comment"></span></div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> <span class="comment">  double sum=0;</span></div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span> <span class="comment">  double sum2=0;</span></div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span> <span class="comment">  double noise=0;</span></div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span> <span class="comment"></span></div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> <span class="comment">  double* pim=NULL;</span></div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span> <span class="comment">  int i=0;</span></div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span> <span class="comment">  int j=0;</span></div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span> <span class="comment">  int kk=0;</span></div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span> <span class="comment">  int sx=0;</span></div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> <span class="comment">  int sy=0;</span></div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> <span class="comment"></span></div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> <span class="comment">  *mean=0;</span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span> <span class="comment">  pim=cpl_image_get_data(img);</span></div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span> <span class="comment">  kk=0;</span></div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span> <span class="comment">  for(i=0;i<sx*sy;i++) {</span></div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span> <span class="comment">  *mean+=pim[i];</span></div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span> <span class="comment">  *mean/=(sx*sy);</span></div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> <span class="comment"></span></div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> <span class="comment">  for(i=0;i<sx*sy;i++) {</span></div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> <span class="comment">  sum+=(pim[i]-*mean)*(pim[i]-*mean);</span></div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> <span class="comment">  noise=sqrt(sum/(sx*sy));</span></div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span> <span class="comment"></span></div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span> <span class="comment"></span></div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> <span class="comment">  //clean a bit the bad pixels</span></div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> <span class="comment">  for(j=0;j<nclip;j++) {</span></div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span> <span class="comment">  sum=0;</span></div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span> <span class="comment">  sum2=0;</span></div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span> <span class="comment">  kk=0;</span></div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> <span class="comment">  for(i=0;i<sx*sy;i++) {</span></div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span> <span class="comment">  if(fabs(pim[i]-*mean)<kappa*noise) {</span></div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span> <span class="comment"></span></div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span> <span class="comment">  sum  +=(pim[i]-*mean)*(pim[i]-*mean);</span></div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span> <span class="comment">  sum2 += pim[i];</span></div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span> <span class="comment">  kk+=1;</span></div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> <span class="comment">  noise=sqrt(sum/kk);</span></div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> <span class="comment">  *mean=sum2/kk;</span></div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span> <span class="comment"></span></div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span> <span class="comment"></span></div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span> <span class="comment">  *stdev=noise;</span></div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span> <span class="comment"></span></div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> <span class="comment">  return 0;</span></div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> <span class="comment"></span></div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span> </div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span> cpl_table* sinfo_compute_gain(cpl_frameset* son, cpl_frameset* sof)</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> {</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span> </div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span> </div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>    cpl_frame*    frm=NULL;</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> </div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>    cpl_image* img_on1=NULL;</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>    cpl_image* img_on2=NULL;</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>    cpl_image* img_on_dif=NULL;</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>    cpl_image* img_on_sub=NULL;</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span> </div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span> </div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>    cpl_image* img_of1=NULL;</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>    cpl_image* img_of2=NULL;</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>    cpl_image* img_of_dif=NULL;</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>    cpl_image* img_of_sub=NULL;</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> </div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>    cpl_table* res_tbl=NULL;</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>    cpl_vector* dit_on=NULL;</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>    cpl_vector* dit_of=NULL;</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>    cpl_vector* exptime_on=NULL;</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>    cpl_vector* exptime_of=NULL;</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span> </div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>    <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>    <span class="keywordtype">int</span> nof=0;</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>    <span class="keywordtype">int</span> nfr=0;</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>    <span class="keywordtype">double</span> avg_on1=0;</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>    <span class="keywordtype">double</span> avg_on2=0;</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>    <span class="keywordtype">double</span> avg_of1=0;</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>    <span class="keywordtype">double</span> avg_of2=0;</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>    <span class="keywordtype">double</span> std=0;</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> </div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>    <span class="keywordtype">double</span> sig_on_dif=0;</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>    <span class="keywordtype">double</span> sig_of_dif=0;</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>    <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span> </div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>    <span class="keywordtype">int</span> llx=270;</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>    <span class="keywordtype">int</span> lly=1000;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>    <span class="keywordtype">int</span> urx=320;</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>    <span class="keywordtype">int</span> ury=1050;</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>    <span class="keywordtype">int</span> zone[4];</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>    <span class="keywordtype">double</span> gain=0;</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>    <span class="keywordtype">double</span> dit_ref=0;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>    <span class="keywordtype">double</span> dit_tmp=0;</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>    <span class="keywordtype">double</span> exptime_ref=0;</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>    <span class="keywordtype">double</span> exptime_tmp=0;</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>    <span class="keywordtype">int</span> kappa=5;</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>    <span class="keywordtype">int</span> nclip=25;</div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>    <span class="keywordtype">double</span> centre=0;</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span> </div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>    non = cpl_frameset_get_size(son);</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>    nof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>    nfr = (non <= nof) ? non : nof;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span> </div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>    dit_on=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>    dit_of=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>    exptime_on=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>    exptime_of=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span> </div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span> </div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>       frm=cpl_frameset_get_frame(son,i);</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>       plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>       dit_ref=sinfo_pfits_get_dit(plist);</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>       exptime_ref=(double)sinfo_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>       cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>       cpl_vector_set(dit_on,i,dit_ref);</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>       cpl_vector_set(exptime_on,i,exptime_ref);</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> </div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>       frm=cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>       plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>       dit_ref=sinfo_pfits_get_dit(plist);</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>       exptime_ref=(double)sinfo_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>       cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>       cpl_vector_set(dit_of,i,dit_ref);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>       cpl_vector_set(exptime_of,i,exptime_ref);</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> </div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>    }</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> </div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span> </div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> </div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>    zone[0]=270;</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>    zone[1]=1030;</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>    zone[2]=310;</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>    zone[3]=1060;</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span> </div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span> </div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> </div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>    zone[0]=20;</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>    zone[1]=2028;</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>    zone[2]=20;</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>    zone[3]=2028;</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> </div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> </div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span> </div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>    check_nomsg(res_tbl=cpl_table_new(nfr));</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>    cpl_table_new_column(res_tbl,<span class="stringliteral">"adu"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>    cpl_table_new_column(res_tbl,<span class="stringliteral">"gain"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> </div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>       frm=cpl_frameset_get_frame(son,i);</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>       img_on1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> </div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>       frm=cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>       img_of1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> </div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> </div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>       dit_ref=cpl_vector_get(dit_on,i);</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>       exptime_ref=cpl_vector_get(exptime_on,i);</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> </div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>       <span class="keywordflow">for</span>(m=0;m<nfr; m++) {</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>          <span class="keywordflow">if</span>(m != i) {</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>             frm=cpl_frameset_get_frame(son,m);</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>             name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>             dit_tmp=cpl_vector_get(dit_on,m);</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>             exptime_tmp=cpl_vector_get(exptime_on,m);</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>             <span class="keywordflow">if</span>(dit_tmp == dit_ref && exptime_tmp == exptime_ref) {</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>                <span class="comment">/* sinfo_msg("m=%d i=%d\n",m,i); */</span></div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>                img_on2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>                frm=cpl_frameset_get_frame(sof,m);</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>                name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>                img_of2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> </div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>                img_on_dif=cpl_image_subtract_create(img_on1,img_on2);</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>                img_of_dif=cpl_image_subtract_create(img_of1,img_of2);</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> </div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>                img_on_sub=cpl_image_extract(img_on_dif,llx,lly,urx,ury);</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>                img_of_sub=cpl_image_extract(img_of_dif,llx,lly,urx,ury);</div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> </div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>                sinfo_get_clean_mean_window(img_on1,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>                                            nclip,&avg_on1,&std);</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>                sinfo_get_clean_mean_window(img_on2,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>                                            nclip,&avg_on2,&std);</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>                sinfo_get_clean_mean_window(img_of1,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>                                            nclip,&avg_of1,&std);</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>                sinfo_get_clean_mean_window(img_of2,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>                                            nclip,&avg_of2,&std);</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>                <span class="comment">/*</span></div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span> <span class="comment">                 cpl_image_save(img_on_sub,"ima_on_sub.fits",</span></div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> <span class="comment">                                CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> <span class="comment">                 cpl_image_save(img_of_sub,"ima_of_sub.fits",</span></div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> <span class="comment">                                CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> <span class="comment">               */</span></div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>                <span class="comment">/*</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> <span class="comment">               //worse accuracy</span></div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span> <span class="comment">               sinfo_stat_rectangle(img_on_dif,kappa,nclip,</span></div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> <span class="comment">                                    &centre,&sig_on_dif);</span></div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> <span class="comment">               sinfo_stat_rectangle(img_of_dif,kappa,nclip,</span></div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> <span class="comment">                                    &centre,&sig_of_dif);</span></div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> <span class="comment">               */</span></div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> </div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> </div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>                <span class="comment">//better accuracy</span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>                sinfo_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>                                            nclip,&centre,&sig_on_dif);</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>                sinfo_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>                                            nclip,&centre,&sig_of_dif);</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                cpl_image_delete(img_on2);</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>                cpl_image_delete(img_of2);</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>                cpl_image_delete(img_on_dif);</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>                cpl_image_delete(img_of_dif);</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>                cpl_image_delete(img_on_sub);</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>                cpl_image_delete(img_of_sub);</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> </div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>                gain=((avg_on1+avg_on2)-(avg_of1+avg_of2))/</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>                   ((sig_on_dif*sig_on_dif)-(sig_of_dif*sig_of_dif));</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> </div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>                cpl_table_set_double(res_tbl,<span class="stringliteral">"gain"</span>,m,gain);</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>                cpl_table_set_double(res_tbl,<span class="stringliteral">"adu"</span>,m,</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>                                     ((avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2));</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>                <span class="comment">/* sinfo_msg("gain=%f ADU=%f\n",gain,</span></div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> <span class="comment">                  (avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2);</span></div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> <span class="comment">                  sinfo_msg("g=%f avg_on1=%f avg_on2=%f",gain,avg_on1,avg_on2);</span></div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> <span class="comment">                 sinfo_msg("avg_of1=%f avg_of2=%f sig_on_dif=%f sig_of_dif=%f",</span></div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> <span class="comment">                  avg_of1,avg_of2,sig_on_dif,sig_of_dif);</span></div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> <span class="comment">               */</span></div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> </div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>             }</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>          }</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>       }</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>       cpl_image_delete(img_on1);</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>       cpl_image_delete(img_of1);</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>    }</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> </div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> </div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> <span class="comment">     sinfo_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,</span></div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <span class="comment">     nclip,&avg,&sig_on_dif);</span></div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> <span class="comment">     sinfo_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,</span></div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> <span class="comment">     nclip,&avg,&sig_of_dif);</span></div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> </div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>    cpl_vector_delete(dit_on);</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>    cpl_vector_delete(dit_of);</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>    cpl_vector_delete(exptime_on);</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>    cpl_vector_delete(exptime_of);</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>    <span class="keywordflow">return</span> res_tbl;</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> </div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>   cleanup:</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> </div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> }</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> </div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> </div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> </div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> sinfo_image_estimate_noise(cpl_image* img,</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>                            <span class="keyword">const</span> <span class="keywordtype">int</span> noise_fit,</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>                            <span class="keywordtype">double</span>* centre,</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>                            <span class="keywordtype">double</span>* noise)</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span> {</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span> </div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>    <span class="keywordtype">int</span> nbins=0;</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> </div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>    <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>    <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>    <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>    <span class="keywordtype">int</span> r=0;</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span> </div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>    <span class="keywordtype">int</span> ndist=0;</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>    <span class="keywordtype">double</span> min_fct=HISTO_DIST_TEMPC_MIN_FCT;</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>    <span class="keywordtype">double</span> max_fct=HISTO_DIST_TEMPC_MAX_FCT;</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>    <span class="keywordtype">double</span> avg_d=0;</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>    <span class="keywordtype">double</span> std_d=0;</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>    <span class="keywordtype">double</span> hmin=0;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>    <span class="keywordtype">double</span> hmax=0;</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>    <span class="keywordtype">double</span> kappa=3;</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span> </div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>    <span class="keywordtype">double</span>* pdata=NULL;</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>    <span class="keywordtype">double</span>* disth=NULL;</div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>    <span class="keywordtype">double</span>* distx=NULL;</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span> </div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>    <span class="keywordtype">double</span> peak=0;</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>    <span class="keywordtype">double</span> tempc=0;</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>    <span class="keywordtype">double</span> value=0;</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>    <span class="keywordtype">double</span> x0=0;</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>    <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>    <span class="keywordtype">double</span> area=0;</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>    <span class="keywordtype">double</span> offset=0;</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>    <span class="comment">//double mse=0;</span></div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>    <span class="comment">//double chired=0;</span></div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> </div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>    cpl_table* data_tbl=NULL;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>    cpl_table* histo=NULL;</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>    cpl_table* dist=NULL;</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>    cpl_table* min_xi=NULL;</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>    cpl_table* tmp_tbl1=NULL;</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>    cpl_table* tmp_tbl2=NULL;</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>    cpl_vector* vx=NULL;</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>    cpl_vector* vy=NULL;</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>    cpl_vector* sx=NULL;</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>    cpl_vector* sy=NULL;</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span> </div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>    <span class="comment">// Get Object relevant information</span></div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>    check_nomsg(xsz=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>    check_nomsg(ysz=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>    n=xsz*ysz;</div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>    nbins=sqrt(n);</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>    check_nomsg(data_tbl=cpl_table_new(n));</div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>    check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> </div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>    check_nomsg(pdata=cpl_image_get_data(img));</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>    <span class="keywordflow">for</span>(i=0;i<n;i++) {</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>       <span class="keywordflow">if</span>(!isnan(pdata[i])) {</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>          cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]);</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>          r++;</div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>       }</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>    }</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> </div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>    check_nomsg(cpl_table_erase_invalid(data_tbl));</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>    check_nomsg(avg_d=cpl_table_get_column_mean(data_tbl,<span class="stringliteral">"DATA"</span>));</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>    check_nomsg(std_d=cpl_table_get_column_stdev(data_tbl,<span class="stringliteral">"DATA"</span>));</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span> </div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>    cpl_table_save(data_tbl, NULL, NULL, <span class="stringliteral">"out_data.fits"</span>, CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span> </div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>    hmin=avg_d-kappa*std_d;</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>    hmax=avg_d+kappa*std_d;</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>    <span class="comment">//sinfo_msg("mean=%g stdv=%g",avg_d,std_d);</span></div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>    <span class="comment">//sinfo_msg("hmin=%g hmax=%g",hmin,hmax);</span></div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>    <span class="comment">//sinfo_msg("Computes histogram");</span></div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>    ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span> </div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>    value=(double)(hmax-hmin)/nbins/2.;</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>    <span class="comment">//sinfo_msg("value=%10.8f",value);</span></div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>    <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_pippo.fits", CPL_IO_DEFAULT0);</span></div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span> </div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>    check_nomsg(peak=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>    <span class="comment">//sinfo_msg("peak=%f",peak);</span></div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>    sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span> </div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>    check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,CPL_EQUAL_TO,peak));</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span> </div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>    <span class="comment">//cpl_table_save(tmp_tbl1, NULL, NULL, "out_tmp_tbl1.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> </div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span> </div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>    check_nomsg(*centre=cpl_table_get_column_mean(tmp_tbl1,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>    <span class="comment">//sinfo_msg("Background level=%f",*centre);</span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> </div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>    sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>    check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>                                                  CPL_GREATER_THAN,</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>                                                  peak/HISTO_Y_CUT));</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>    sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>    check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>                                                  CPL_LESS_THAN,peak));</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>    sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> </div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>    check_nomsg(tempc=*centre-cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>    <span class="comment">//sinfo_msg("min HX %f",cpl_table_get_column_min(tmp_tbl2,"HL"));</span></div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>    sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>    <span class="comment">//sinfo_msg("Tempc=%f",tempc);</span></div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>    check_nomsg(dist=sinfo_where_tab_min_max(histo,<span class="stringliteral">"HL"</span>,</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>                                             CPL_GREATER_THAN,</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>                                             *centre-min_fct*tempc,</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>                                             CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>                                             *centre+max_fct*tempc));</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> </div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>    offset=cpl_table_get_column_min(histo,<span class="stringliteral">"HY"</span>);</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>    sinfo_free_table(&histo);</div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span> </div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span> </div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>    check_nomsg(ndist=cpl_table_get_nrow(dist));</div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>    check_nomsg(cpl_table_cast_column(dist,<span class="stringliteral">"HY"</span>,<span class="stringliteral">"HYdouble"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>    check_nomsg(disth=cpl_table_get_data_double(dist,<span class="stringliteral">"HYdouble"</span>));</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>    check_nomsg(distx=cpl_table_get_data_double(dist,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>    cpl_table_save(dist, NULL, NULL, <span class="stringliteral">"out_dist.fits"</span>, CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span> </div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>    <span class="comment">//TODO</span></div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>    <span class="comment">//gaussfit(distx,disty,dista,nterms=3);</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>    <span class="comment">//*noise=dista[2];</span></div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>    *noise=tempc/2;</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>    <span class="comment">/* THIS DOES NOT WORK */</span></div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>    <span class="comment">//sinfo_msg("FWHM/2=%f",*noise);</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> </div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>    <span class="keywordflow">if</span>(noise_fit == 1) {</div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>       check_nomsg(vy=cpl_vector_wrap(ndist,disth));</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>       check_nomsg(vx=cpl_vector_wrap(ndist,distx));</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>       check_nomsg(sx=cpl_vector_new(ndist));</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>       check_nomsg(cpl_vector_fill(sx,1.));</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>       check_nomsg(sy=cpl_vector_duplicate(sx));</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>       x0=*centre;</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>       sigma=tempc/2;</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> </div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>       <span class="keywordflow">if</span>(CPL_ERROR_NONE != cpl_vector_fit_gaussian(vx,NULL,</div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>                                                    vy,NULL,</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>                                                    CPL_FIT_ALL,</div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>                                                    &x0,&sigma,&area,&offset,</div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>                                                    NULL,NULL,NULL)) {</div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>          cpl_error_reset();</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>       }</div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>       <span class="comment">//sinfo_msg("Gauss fit parameters:"</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>       <span class="comment">//          "x0=%f sigma=%f area=%f offset=%f mse=%f chired=%f",</span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>       <span class="comment">//           x0,sigma,area,offset,mse,chired);</span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>       <span class="comment">//sinfo_msg("Background level=%f",*centre);</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>       <span class="comment">//sinfo_msg("Noise=%f",sigma);</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>       *noise=sigma;</div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>       sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>       sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>       sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>       sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>    }</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>    sinfo_free_table(&dist);</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span> </div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> </div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>   cleanup:</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>    sinfo_free_table(&min_xi);</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>    sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>    sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>    sinfo_free_table(&histo);</div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>    sinfo_free_table(&dist);</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>    sinfo_free_table(&data_tbl);</div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>    sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>    sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>    sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>    sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span> </div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> </div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span> }</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span> </div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span> </div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span> </div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span> </div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> </div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> cpl_table* sinfo_compute_linearity(cpl_frameset* son, cpl_frameset* sof)</div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> {</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> </div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>    cpl_frame*    frm=NULL;</div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> </div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>    <span class="keywordtype">int</span>* status=0;</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>    <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>    <span class="keywordtype">int</span> nof=0;</div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>    <span class="keywordtype">int</span> nfr=0;</div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>    <span class="keywordtype">double</span> med_on=0;</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>    <span class="keywordtype">double</span> avg_on=0;</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>    <span class="keywordtype">double</span> med_of=0;</div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>    <span class="keywordtype">double</span> avg_of=0;</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>    <span class="keywordtype">double</span> med_dit=0;</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>    <span class="keywordtype">double</span> avg_dit=0;</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> </div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>    <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>    <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span> </div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>    <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>    cpl_image* img=NULL;</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>    cpl_vector* vec_adl=NULL;</div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>    cpl_vector* vec_dit=NULL;</div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>    cpl_vector* vec_avg=NULL;</div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>    cpl_vector* vec_med=NULL;</div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>    cpl_vector* vec_avg_dit=NULL;</div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>    cpl_vector* vec_med_dit=NULL;</div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> </div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>    <span class="keywordtype">double</span> dit=0;</div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>    cpl_table* lin_tbl=NULL;</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span> </div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span> </div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>    non = cpl_frameset_get_size(son);</div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>    nof = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>    nfr = (non <= nof) ? non : nof;</div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span> </div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>    lin_tbl=cpl_table_new(nfr);</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"med"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"med_dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"avg_dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"dit"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>    vec_med=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>    vec_avg=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>    vec_med_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>    vec_avg_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>    vec_dit=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>    vec_adl=cpl_vector_new(nfr);</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span> </div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>       frm=cpl_frameset_get_frame(son,i);</div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>       img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>       med_on=cpl_image_get_median(img);</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>       avg_on=cpl_image_get_mean(img);</div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>       cpl_image_delete(img);</div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> </div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>       frm=cpl_frameset_get_frame(sof,i);</div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>       name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frm);</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>       img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>       med_of=cpl_image_get_median(img);</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>       avg_of=cpl_image_get_mean(img);</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>       cpl_image_delete(img);</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> </div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>       med=med_on-med_of;</div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>       avg=avg_on-avg_of;</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>       plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>       dit=(double)sinfo_pfits_get_dit(plist);</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>       cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>       avg_dit=avg/dit;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>       med_dit=med/dit;</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span> </div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>       cpl_vector_set(vec_dit,i,dit);</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>       cpl_vector_set(vec_avg,i,avg);</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>       cpl_vector_set(vec_med,i,med);</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>       cpl_vector_set(vec_avg_dit,i,avg_dit);</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>       cpl_vector_set(vec_med_dit,i,med_dit);</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> </div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,dit);</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"med"</span>,i,med);</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg"</span>,i,avg);</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"med_dit"</span>,i,med_dit);</div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"avg_dit"</span>,i,avg_dit);</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> </div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>    }</div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>    cpl_table_new_column(lin_tbl,<span class="stringliteral">"adl"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>    med_dit=cpl_vector_get_mean(vec_med_dit);</div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>    avg_dit=cpl_vector_get_mean(vec_avg_dit);</div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> </div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>    <span class="keywordflow">for</span>(i=0;i<nfr;i++) {</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>       dit = cpl_table_get_double(lin_tbl,<span class="stringliteral">"dit"</span>,i,status);</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>       cpl_vector_set(vec_adl,i,dit*med_dit);</div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>       cpl_table_set_double(lin_tbl,<span class="stringliteral">"adl"</span>,i,dit*med_dit);</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>    }</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span> </div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>    cpl_vector_delete(vec_dit);</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>    cpl_vector_delete(vec_adl);</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>    cpl_vector_delete(vec_avg);</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>    cpl_vector_delete(vec_med);</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>    cpl_vector_delete(vec_avg_dit);</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>    cpl_vector_delete(vec_med_dit);</div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span> </div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span> </div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>    <span class="keywordflow">return</span> lin_tbl;</div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span> </div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span> }</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span> </div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span> <span class="comment">/*--------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span> <span class="comment">/*--------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span> sinfo_get_ron(cpl_frameset    *   framelist,</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmin,</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmax,</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymin,</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymax,</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_hsize,</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> ron_nsamp,</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>               <span class="keywordtype">double</span>** ron)</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span> {</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>    cpl_imagelist   *   iset =NULL;</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>    cpl_image       *   tmp_im =NULL;</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>    cpl_size                 zone[4] ;</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>    <span class="keywordtype">double</span>              rms  =0;</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>    <span class="keywordtype">double</span>              ndit =0;</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>    cpl_frame       *   frame =NULL;</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>    <span class="keywordtype">int</span>                 i;</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span> </div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span> </div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>    <span class="keywordflow">if</span> (framelist == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span> </div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>    <span class="comment">/* Load the current set */</span></div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>    <span class="keywordflow">if</span> ((iset = sinfo_new_frameset_to_iset(framelist)) == NULL) {</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load the data"</span>) ;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>    }</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> </div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>    <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>    zone[0]=ron_xmin;</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>    zone[1]=ron_xmax;</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>    zone[2]=ron_ymin;</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>    zone[3]=ron_ymax;</div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>    <span class="comment">/* Loop on all pairs */</span></div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>    <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(iset)-1 ; i++) {</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span> </div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>       <span class="comment">/* Compute the current subtracted image */</span></div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>       <span class="keywordflow">if</span> ((tmp_im=cpl_image_subtract_create(cpl_imagelist_get(iset,i),</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>                                             cpl_imagelist_get(iset, i+1)))</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>           == NULL) {</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot subtract the images"</span>) ;</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>          sinfo_free_imagelist(&iset) ;</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>       }</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span> </div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>       <span class="comment">/* Compute the read-out noise */</span></div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>       <span class="keywordflow">if</span> (cpl_flux_get_noise_window(tmp_im, zone, ron_hsize,</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>                                     ron_nsamp, &rms, NULL) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot compute the RON"</span>) ;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>          sinfo_free_image(&tmp_im) ;</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>          sinfo_free_imagelist(&iset) ;</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>       }</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>       sinfo_free_image(&tmp_im) ;</div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>       <span class="comment">/* Normalise the RON with NDIT */</span></div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>       frame = cpl_frameset_get_frame(framelist, i) ;</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>       cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(frame),</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>                                                0));</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>       ndit=sinfo_pfits_get_ndit(plist);</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span> </div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>       (*ron)[i] = rms * sqrt(ndit/2.0) ;</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span> </div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>    }</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> </div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>    <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>    sinfo_free_imagelist(&iset) ;</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span> </div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>   cleanup:</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>    sinfo_free_image(&tmp_im);</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>    sinfo_free_imagelist(&iset);</div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> </div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span> }</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span> </div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> </div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span> </div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> <span class="keywordtype">int</span> sinfo_stack_get_pro_tag(<span class="keywordtype">char</span> * tag_in, <span class="keywordtype">char</span>* tag_out)</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span> {</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>    <span class="keywordflow">if</span> (tag_in == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>    <span class="comment">/* here for the moment we set the same PRO ID as a non stacked frame */</span></div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_LAMP_DITHER) == 0 ) {</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>       strcpy(tag_out,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>    }</div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span> </div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span> </div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_LAMP) == 0 ) {</div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>       strcpy(tag_out,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>    }</div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> </div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_NS_DITHER) == 0 ) {</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>       strcpy(tag_out,PRO_WAVE_NS_STACKED);</div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>    }</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> </div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> </div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_WAVE_NS) == 0 ) {</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>       strcpy(tag_out,PRO_WAVE_NS_STACKED);</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>    }</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span> </div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span> </div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_LAMP) == 0 ) {</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>       strcpy(tag_out,PRO_FIBRE_LAMP_STACKED);</div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>    }</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span> </div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_EW) == 0 ) {</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>       strcpy(tag_out,PRO_FIBRE_EW_STACKED);</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>    }</div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> </div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_FIBRE_NS) == 0 ) {</div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>       strcpy(tag_out,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>    }</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> </div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span> </div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>    <span class="keywordflow">if</span> (strcmp(tag_in,PRO_FIBRE_NS_STACKED_ON) == 0 ) {</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>       strcpy(tag_out,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>    }</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> </div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>    <span class="keywordflow">if</span> (strcmp(tag_in,PRO_FIBRE_NS_STACKED) == 0 ) {</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>       strcpy(tag_out,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>    }</div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> </div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> </div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>    <span class="keywordflow">if</span> (strcmp(tag_in,RAW_SLIT_LAMP) == 0 ) {</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>       strcpy(tag_out,PRO_SLIT_LAMP_STACKED);</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>    }</div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span> </div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> </div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"FLUX"</span>) != NULL ) {</div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>       strcpy(tag_out,PRO_FLUX_LAMP_STACKED);</div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>    }</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span> </div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"PSF"</span>) != NULL ) {</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>       strcpy(tag_out,PRO_PSF_CALIBRATOR_STACKED);</div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>    }</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span> </div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span> </div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"FOCUS"</span>) != NULL ) {</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>       strcpy(tag_out,PRO_FOCUS_STACKED);</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>    }</div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> </div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"OBJECT_NODDING"</span>) != NULL ) {</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>       strcpy(tag_out,PRO_OBJECT_NODDING_STACKED);</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>    }</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span> </div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"SKY_NODDING"</span>) != NULL ) {</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>       strcpy(tag_out,PRO_SKY_NODDING_STACKED);</div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>    }</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span> </div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"STD_NODDING"</span>) != NULL ) {</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>       strcpy(tag_out,PRO_STD_NODDING_STACKED);</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>    }</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span> </div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>    <span class="keywordflow">if</span> (strstr(tag_in, <span class="stringliteral">"OBJECT_SKYSPIDER"</span>) != NULL ) {</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>       strcpy(tag_out,PRO_OBJECT_SKYSPIDER_STACKED);</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>    }</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> </div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> </div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD) != NULL ) {</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>       strcpy(tag_out,PRO_STD_STACKED);</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>    }</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span> </div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> </div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_STD) != NULL ) {</div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>       strcpy(tag_out,PRO_SKY_STD_STACKED);</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>    }</div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> </div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_OH) != NULL ) {</div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>       strcpy(tag_out,PRO_SKY_OH_STACKED);</div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>    }</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span> </div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY_PSF_CALIBRATOR) != NULL ) {</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>       strcpy(tag_out,PRO_SKY_PSF_CALIBRATOR_STACKED);</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>    }</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span> </div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD_STAR) != NULL ) {</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>       strcpy(tag_out,PRO_STD_STAR_STACKED);</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>    }</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span> </div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_STD_STAR) != NULL ) {</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>       strcpy(tag_out,PRO_STD_STAR_DITHER_STACKED);</div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>    }</div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span> </div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>    <span class="keywordflow">if</span> (strstr(tag_in, RAW_SKY) != NULL ) {</div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>       strcpy(tag_out,PRO_SKY_STACKED);</div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>    }</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span> </div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span> </div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>    <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span> }</div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span> </div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span> </div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> <span class="keywordtype">int</span> sinfo_is_dark(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span> {</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> </div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_DARK)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> }</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> </div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span> <span class="keywordtype">int</span> sinfo_is_flat_bp(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span> {</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span> </div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span> }</div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span> </div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span> <span class="keywordtype">int</span> sinfo_is_flat_lindet(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span> {</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span> </div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span> }</div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> </div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span> </div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span> <span class="keywordtype">int</span> sinfo_blank2dot(<span class="keyword">const</span> <span class="keywordtype">char</span> * in, <span class="keywordtype">char</span>* ou)</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span> {</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>    <span class="keywordtype">int</span> len=0;</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span> </div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>    strcpy(ou,in);</div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>    len = strlen(in);</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>    <span class="keywordflow">for</span> (i=0;i<len;i++)</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>    {</div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>       <span class="keywordflow">if</span> (in[i] == <span class="charliteral">' '</span>) {</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>          ou[i] =  <span class="charliteral">'.'</span>;</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>       }</div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>    }</div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span> }</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span> </div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span> </div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span> <span class="keywordtype">int</span> sinfo_is_sky_flat(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span> {</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>    <span class="keywordflow">if</span> (!strcmp(tag, RAW_FLAT_SKY)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span> }</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> </div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span> </div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span> </div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span> <span class="keywordtype">int</span> sinfo_is_master_flat(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span> {</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span> </div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span> }</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span> </div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span> <span class="keywordtype">int</span> sinfo_is_master_flat_dither(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span> {</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span> </div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span> }</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span> </div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span> <span class="keywordtype">int</span> sinfo_is_stack(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span> {</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span> </div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>    <span class="keywordflow">if</span> (strstr(tag, PRO_STACKED) != NULL) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span> }</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span> </div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span> <span class="keywordtype">int</span> sinfo_is_mflat(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span> {</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span> </div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP1)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_MASTER_FLAT_LAMP2)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span> }</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span> </div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span> </div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span> <span class="keywordtype">int</span> sinfo_is_psf_calibrator_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span> {</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span> </div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span> }</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span> <span class="keywordtype">int</span> sinfo_is_focus_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span> {</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span> </div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FOCUS_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span> }</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span> </div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> <span class="keywordtype">int</span> sinfo_is_lamp_wave_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span> {</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span> </div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_LAMP_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span> }</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span> </div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span> <span class="keywordtype">int</span> sinfo_is_lamp_flux_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span> {</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span> </div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FLUX_LAMP_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span> }</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span> </div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> <span class="keywordtype">int</span> sinfo_is_object_nodding_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span> {</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span> </div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBJECT_NODDING_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span> }</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span> </div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span> <span class="keywordtype">int</span> sinfo_is_object_skyspider_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span> {</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span> </div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBJECT_SKYSPIDER_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span> }</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span> </div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span> </div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span> <span class="keywordtype">int</span> sinfo_is_sky_nodding_stacked(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span> {</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span> </div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SKY_NODDING_STACKED)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span> }</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span> </div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span> <span class="keywordtype">int</span> sinfo_is_wavemap(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span> {</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span> </div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_WAVE_MAP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span> }</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span> </div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span> <span class="keywordtype">int</span> sinfo_is_halosp(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> {</div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span> </div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_HALO_SPECT)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span> }</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span> </div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span> <span class="keywordtype">int</span> sinfo_is_distlist(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span> {</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span> </div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLITLETS_DISTANCE)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span> }</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span> </div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span> <span class="keywordtype">int</span> sinfo_is_slitpos(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span> {</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span> </div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_SLIT_POS)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span> }</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span> </div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span> <span class="keywordtype">int</span> sinfo_is_firstcol(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span> {</div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span> </div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_FIRST_COL)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span> }</div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span> </div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span> <span class="keywordtype">int</span> sinfo_is_bpmap(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span> {</div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>    <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span> </div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>    <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP)) <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span> }</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span> </div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span> </div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span> </div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span> <span class="keywordtype">int</span> sinfo_get_band(cpl_frame * ref_frame,<span class="keywordtype">char</span> * band)</div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span> {</div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span> </div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span> </div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>    }</div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span> </div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_FILT_NAME)) {</div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>       strcpy(band, cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));</div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_FILT_NAME, band); */</span></div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span> </div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_FILT_NAME);</div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>    }</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span> </div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span> }</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span> </div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span> </div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span> </div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span> </div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span> </div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span> <span class="keywordtype">int</span> sinfo_get_obsname(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* obs_name)</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span> {</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span> </div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span> </div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>    }</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span> </div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_OBS_NAME)) {</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>       strcpy((<span class="keywordtype">char</span>*)obs_name, cpl_propertylist_get_string(plist,</div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>                                                           KEY_NAME_OBS_NAME));</div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_OBS_NAME, obs_name); */</span></div>
+<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span> </div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_OBS_NAME);</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>    }</div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span> </div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span> }</div>
+<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span> </div>
+<div class="line"><a name="l03990"></a><span class="lineno"> 3990</span> </div>
+<div class="line"><a name="l03991"></a><span class="lineno"> 3991</span> </div>
+<div class="line"><a name="l03992"></a><span class="lineno"> 3992</span> </div>
+<div class="line"><a name="l03993"></a><span class="lineno"> 3993</span> </div>
+<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span> </div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span> <span class="keywordtype">int</span> sinfo_get_keyvalue_int(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span> {</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span> </div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span> </div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span> </div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>    }</div>
+<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span> </div>
+<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span> </div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {</div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>       result=cpl_propertylist_get_int(plist,key_name);</div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);</div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>    }</div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span> </div>
+<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span> </div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span> }</div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span> </div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span> </div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span> </div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span> </div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span> <span class="keywordtype">float</span> sinfo_get_keyvalue_float(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)</div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span> {</div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span> </div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>    <span class="keywordtype">float</span> result=0;</div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span> </div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span> </div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>    }</div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span> </div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span> </div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {</div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>       result=cpl_propertylist_get_float(plist,key_name);</div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);</div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>    }</div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span> </div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span> </div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span> }</div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span> </div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span> </div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span> </div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span> <span class="keywordtype">char</span> sinfo_get_keyvalue_bool(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)</div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span> {</div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span> </div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>    <span class="keywordtype">int</span> res_val=0;</div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span> </div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span> </div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>       <span class="keywordflow">return</span> <span class="charliteral">'0'</span>;</div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>    }</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span> </div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span> </div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {</div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>       res_val=cpl_propertylist_get_bool(plist,key_name);</div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);</div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>       <span class="keywordflow">return</span> <span class="charliteral">'0'</span>;</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>    }</div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span> </div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>    <span class="keywordflow">if</span>(res_val == 1) {</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>       <span class="keywordflow">return</span> <span class="charliteral">'T'</span>;</div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>       <span class="keywordflow">return</span> <span class="charliteral">'F'</span>;</div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>    }</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span> }</div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span> </div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span> </div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span> </div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span> </div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span> </div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span> <span class="keyword">const</span> <span class="keywordtype">char</span>*</div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span> sinfo_get_keyvalue_string(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name)</div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span> {</div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span> </div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* result=NULL;</div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span> </div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>    ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span> </div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>       <span class="keywordflow">return</span> FALSE;</div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span>    }</div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span> </div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span> </div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, key_name)) {</div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>       result=cpl_propertylist_get_string(plist,key_name);</div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,key_name);</div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>    }</div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span> </div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span> </div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span> }</div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span> </div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span> </div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span> </div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span> <span class="keywordtype">double</span> sinfo_get_mjd_obs(cpl_frame * frame)</div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span> {</div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* file=NULL;</div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span> </div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>    <span class="keywordtype">double</span> mjd_obs=0.;</div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span>    file = cpl_frame_get_filename(frame) ;</div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span> </div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>    }</div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span> </div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {</div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>       mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>    }</div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span> </div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span>    <span class="keywordflow">return</span> mjd_obs;</div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span> </div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span> }</div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span> </div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span> </div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span> </div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span> </div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span> <span class="keywordtype">double</span> sinfo_get_cumoffsetx(cpl_frame * frame)</div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span> {</div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>    <span class="keywordtype">char</span>* file=NULL;</div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span> </div>
+<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>    <span class="keywordtype">double</span> result=0.;</div>
+<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>    file = cpl_strdup( cpl_frame_get_filename(frame)) ;</div>
+<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span> </div>
+<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>       cpl_free(file);</div>
+<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>    }</div>
+<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span> </div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CUMOFFX)) {</div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span>       result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFX);</div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_CUMOFFX);</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>    }</div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>    cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>    cpl_free(file);</div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span> </div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span> </div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span> }</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span> </div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span> </div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span> </div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span> </div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span> <span class="keywordtype">double</span> sinfo_get_cumoffsety(cpl_frame * frame)</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span> {</div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>    <span class="keywordtype">char</span>* file=NULL;</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span> </div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>    <span class="keywordtype">double</span> result=0.;</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>    file = cpl_strdup( cpl_frame_get_filename(frame)) ;</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span> </div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>       cpl_free(file);</div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>    }</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span> </div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CUMOFFY)) {</div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>       result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFY);</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_CUMOFFY);</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>    }</div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>    cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>    cpl_free(file);</div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span> </div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> </div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span> }</div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span> </div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span> <span class="keywordtype">int</span> sinfo_frame_is_dither(cpl_frame * frame)</div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span> {</div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span> </div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>    <span class="keywordtype">char</span> file[256];</div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span> </div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> </div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>    <span class="keywordtype">int</span> grat_encoder=0;</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>    <span class="keywordtype">int</span> dith_status=1;</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>    <span class="keywordtype">int</span> len=0;</div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span> </div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span> </div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>    cknull(frame,<span class="stringliteral">"Null input frame. Exit!"</span>);</div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span> </div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>    cknull_nomsg(strcpy(file,cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>    len= strlen(file);</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span> </div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>    <span class="keywordflow">if</span>(len<1) <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>    <span class="keywordflow">if</span>(sinfo_file_exists(file)==0) <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>    <span class="comment">//file = cpl_strdup(cpl_frame_get_filename(frame)) ;</span></div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>    cknull(plist = cpl_propertylist_load(file, 0),</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>       <span class="stringliteral">"getting header from reference frame %s"</span>,file);</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span> </div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_FILT_NAME)) {</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>       strcpy(band,cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_FILT_NAME);</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>    }</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span> </div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_GRAT_ENC)) {</div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>       grat_encoder = cpl_propertylist_get_int(plist, KEY_NAME_GRAT_ENC);</div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_GRAT_ENC);</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span>    }</div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span> </div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span> </div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>    <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H"</span>) == 0) {</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_H) <= GRAT_VAL_TOL ) {</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>          dith_status = 0;</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>          dith_status = 0;</div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>       }</div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span>    }</div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"H+K"</span>) == 0) {</div>
+<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_HK) <= GRAT_VAL_TOL ) {</div>
+<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>          dith_status = 0;</div>
+<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>          dith_status = 0;</div>
+<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span>       }</div>
+<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>    }</div>
+<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"K"</span>) == 0) {</div>
+<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_K) <= GRAT_VAL_TOL ) {</div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span>          dith_status = 0;</div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>          dith_status = 0;</div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span>       }</div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>    }</div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(band,<span class="stringliteral">"J"</span>) == 0) {</div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>       <span class="keywordflow">if</span>( abs(grat_encoder - GRAT_VAL2_J) <= GRAT_VAL_TOL ) {</div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>          dith_status = 0;</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>          dith_status = 0;</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>       }</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>    }</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>  cleanup:</div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span> </div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>    <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>      <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>      <span class="keywordflow">return</span> dith_status;</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>    }</div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span> }</div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span> </div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span> </div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span> <span class="keywordtype">int</span> sinfo_get_spatial_res(cpl_frame * ref_frame, <span class="keywordtype">char</span> * spat_res)</div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span> {</div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span> </div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* ref_file;</div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span> </div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>    ref_file=cpl_frame_get_filename(ref_frame) ;</div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span> </div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>    }</div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span> </div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_PREOPTICS)) {</div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>       strcpy(spat_res,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));</div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_PREOPTICS, spat_res); */</span></div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_PREOPTICS);</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>    }</div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span> </div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span> }</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span> </div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span> </div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span> <span class="keywordtype">int</span> sinfo_frame_is_sky(cpl_frame * ref_frame)</div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span> {</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span> </div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>    <span class="keywordtype">char</span>  dpr_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>    <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* sval=NULL;</div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span> </div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span> </div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>    sval = cpl_frame_get_filename(ref_frame) ;</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>    ref_file = cpl_strdup(sval) ;</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span> </div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>       cpl_free(ref_file);</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>    }</div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> </div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>       strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));</div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_DPR_TYPE, dpr_type); */</span></div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_DPR_TYPE);</div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>       cpl_free(ref_file);</div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>    }</div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>    cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>    <span class="keywordflow">if</span>(strstr(dpr_type,RAW_SKY) != NULL) {</div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>       result=1;</div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>    }</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>    cpl_free(ref_file);</div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span> </div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span> </div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span> }</div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span> </div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span> </div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span> </div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span> <span class="keywordtype">int</span> sinfo_tag_is_sky(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span> {</div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span> </div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span> </div>
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>    <span class="keywordflow">if</span>(</div>
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>       (strcmp(tag,RAW_SKY) == 0)         ||</div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>       (strcmp(tag,RAW_IMAGE_PRE_SKY) == 0)         ||</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>       (strcmp(tag,RAW_SKY_NODDING) == 0) ||</div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>       (strcmp(tag,RAW_SKY_JITTER) == 0) ||</div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>       (strcmp(tag,RAW_SKY_STD) == 0)     ||</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>       (strcmp(tag,RAW_FIBRE_DARK) == 0) ||</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>       (strcmp(tag,RAW_SKY_OH) == 0)      ||</div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>       (strcmp(tag,RAW_SKY_PSF_CALIBRATOR) == 0)</div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>       ) {</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>       result=1;</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>    }</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span> </div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04450"></a><span class="lineno"> 4450</span> </div>
+<div class="line"><a name="l04451"></a><span class="lineno"> 4451</span> }</div>
+<div class="line"><a name="l04452"></a><span class="lineno"> 4452</span> </div>
+<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span> </div>
+<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span> </div>
+<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span> <span class="keywordtype">int</span> sinfo_tag_is_obj(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span> {</div>
+<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span> </div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span> </div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>    <span class="keywordflow">if</span>(</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>       (strcmp(tag,RAW_PUPIL_LAMP) == 0) ||</div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>       (strcmp(tag,RAW_OBJECT) == 0)         ||</div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>       (strcmp(tag,RAW_IMAGE_PRE_OBJECT) == 0)         ||</div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>       (strcmp(tag,RAW_OBJECT_NODDING) == 0) ||</div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>       (strcmp(tag,RAW_OBJECT_JITTER) == 0) ||</div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>       (strcmp(tag,RAW_PSF_CALIBRATOR) == 0) ||</div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>       (strcmp(tag,RAW_FIBRE_PSF) == 0) ||</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>       (strcmp(tag,RAW_STD) == 0)            ||</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>       (strcmp(tag,RAW_STD_STAR) == 0)</div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span> </div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>       ) {</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>       result=1;</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>    }</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span> </div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span> </div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span> }</div>
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span> </div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span> </div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span> <span class="keywordtype">int</span> sinfo_tag_is_objpro(<span class="keywordtype">char</span> * tag)</div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span> {</div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span> </div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span> </div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>    <span class="keywordflow">if</span>(</div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>       (strcmp(tag,PRO_COADD_OBJ) == 0) ||</div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>       (strcmp(tag,PRO_COADD_PSF) == 0) ||</div>
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>       (strcmp(tag,PRO_COADD_STD) == 0) ||</div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>       (strcmp(tag,PRO_OBS_OBJ) == 0) ||</div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>       (strcmp(tag,PRO_OBS_PSF) == 0) ||</div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>       (strcmp(tag,PRO_OBS_STD) == 0) ||</div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>       (strcmp(tag,PRO_PSF_CALIBRATOR_STACKED) == 0) ||</div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>       (strcmp(tag,PRO_SKY_PSF_CALIBRATOR_STACKED) == 0) ||</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>       (strcmp(tag,PRO_STD_STACKED) == 0) ||</div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>       (strcmp(tag,PRO_SKY_STD_STACKED) == 0) ||</div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>       (strcmp(tag,PRO_OBJECT_NODDING_STACKED) == 0) ||</div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>       (strcmp(tag,PRO_SKY_NODDING_STACKED) == 0)</div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>       ) {</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>       result=1;</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>    }</div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span> </div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span> </div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span> }</div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span> </div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span> </div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span> </div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span> <span class="keywordtype">int</span> sinfo_frame_is_on(cpl_frame * ref_frame)</div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span> {</div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span> </div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>    <span class="keywordtype">char</span> ref_file[FILE_NAME_SZ];</div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>    <span class="keywordtype">char</span> dpr_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>    <span class="keywordtype">int</span> lamp_Xe=0;</div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>    <span class="keywordtype">int</span> lamp_Kr=0;</div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>    <span class="keywordtype">int</span> lamp_Ne=0;</div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>    <span class="keywordtype">int</span> lamp_Ar=0;</div>
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>    <span class="keywordtype">int</span> lamp_Halo=0;</div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>    <span class="keywordtype">int</span> len=0;</div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* filename=NULL;</div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>    cknull(ref_frame,<span class="stringliteral">"Null input frame. Exit!"</span>);</div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span> </div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>    cknull_nomsg(filename=cpl_frame_get_filename(ref_frame));</div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>    len= strlen(filename);</div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>    <span class="keywordflow">if</span>(len<1) <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span> </div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>    check_nomsg(strcpy(ref_file, filename)) ;</div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>    <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file,0)) == NULL)) {</div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>    }</div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span> </div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span> <span class="comment">/*-----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span> <span class="comment">  in J  Argon (4)</span></div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span> <span class="comment">  in H Xenon and Argon (1+4)</span></div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span> <span class="comment">  in K Neon (3)</span></div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span> <span class="comment">  in H+K Xenon (1)</span></div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span> <span class="comment">  -------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>       strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>       <span class="comment">/* sinfo_msg("%s value is %s", KEY_NAME_DPR_TYPE, dpr_type); */</span></div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_DPR_TYPE);</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>    }</div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span> </div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span> <span class="comment">     In order to use the frame tag to identify frames we have to add this line</span></div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span> <span class="comment">     strcpy(dpr_type,cpl_frame_get_tag(ref_frame));</span></div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span> <span class="comment"></span></div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span> </div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"STD"</span>) != NULL) {</div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>       result = 1;</div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>       <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>    }</div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span> </div>
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"PSF"</span>) != NULL) {</div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>       result = 1;</div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>       <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>    }</div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span> </div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"SKY"</span>) != NULL) {</div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span>       result = 0;</div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>       <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>    }</div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span> </div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span> </div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>    <span class="keywordflow">if</span>(strstr(dpr_type,<span class="stringliteral">"OBJECT"</span>) != NULL) {</div>
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>       result = 1;</div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>       <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>    }</div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span> <span class="comment">     if(strstr(dpr_type,"PUPIL") != NULL) {</span></div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span> <span class="comment">     result = 1;</span></div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span> <span class="comment">     cpl_propertylist_delete(plist);</span></div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span> <span class="comment">     return result;</span></div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span> </div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_XE)) {</div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>       lamp_Xe=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_XE);</div>
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_XE, lamp_Xe); */</span></div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_XE);</div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span>    }</div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span> </div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_KR)) {</div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span>       lamp_Kr=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_KR);</div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_KR, lamp_Kr); */</span></div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_KR);</div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>    }</div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span> </div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_NE)) {</div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span>       lamp_Ne=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_NE);</div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_NE, lamp_Ne); */</span></div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_NE);</div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>    }</div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span> </div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_AR)) {</div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>       lamp_Ar=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_AR);</div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_AR, lamp_Ar); */</span></div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_AR);</div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>    }</div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span> </div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>    <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>       lamp_Halo=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_HALO);</div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>       <span class="comment">/* sinfo_msg("%s value is %d", KEY_NAME_LAMP_HALO, lamp_Halo); */</span></div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_LAMP_HALO);</div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>    }</div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span> </div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span> </div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span> </div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span> </div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span>    <span class="keywordflow">if</span>(lamp_Xe) {</div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span>       result=1;</div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>    }</div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span> </div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>    <span class="keywordflow">if</span>(lamp_Kr) {</div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span>       result=1;</div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>    }</div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span> </div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>    <span class="keywordflow">if</span>(lamp_Ne) {</div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>       result=1;</div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>    }</div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span> </div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>    <span class="keywordflow">if</span>(lamp_Ar) {</div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>       result=1;</div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span>    }</div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span> </div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span> </div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>    <span class="keywordflow">if</span>(lamp_Halo) {</div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>       result=1;</div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>    }</div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span> </div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span>   cleanup:</div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> </div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span> </div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span> }</div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span> </div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span> </div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span> </div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span> sinfo_pfits_add_qc(cpl_propertylist       *   plist,</div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>                    qc_log          *   qclog)</div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span> {</div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>    <span class="keywordtype">char</span>            key_name[80] ;</div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>    <span class="keywordtype">char</span>            key_value[80] ;</div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span> </div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>    <span class="keywordtype">int</span>             i =0;</div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span> </div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span>    <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>    <span class="keywordflow">if</span> (plist == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span> </div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>    <span class="comment">/* Parameter Name:    PIPEFILE */</span></div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>    <span class="comment">/* we add ESO prefix to FITS keywords" */</span></div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span>    <span class="keywordflow">for</span>(i=0;i<qclog[0].n;i++) {</div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>       strcpy(key_name,<span class="stringliteral">"ESO "</span>);</div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>       strcat(key_name,qclog[i].name);</div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>       <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"string"</span>) == 0) {</div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span>          snprintf(key_value,<span class="keyword">sizeof</span>(key_value)-1,<span class="stringliteral">"%s"</span>,qclog[i].s_val);</div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span>          cpl_propertylist_append_string(plist, key_name,key_value) ;</div>
+<div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;</div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span> </div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"bool"</span>) == 0) {</div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%i"</span>,(<span class="keywordtype">int</span>)qclog[i].n_val);</div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>          cpl_propertylist_append_bool(plist, key_name,(<span class="keywordtype">int</span>)qclog[i].n_val) ;</div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;</div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"int"</span>) == 0) {</div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%i"</span>,(<span class="keywordtype">int</span>)qclog[i].n_val);</div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>          cpl_propertylist_append_int(plist, key_name,(<span class="keywordtype">int</span>)qclog[i].n_val) ;</div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;</div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"float"</span>) == 0) {</div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span>          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%f"</span>,(<span class="keywordtype">float</span>)qclog[i].n_val);</div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span>          cpl_propertylist_append_float(plist, key_name,(<span class="keywordtype">float</span>)qclog[i].n_val) ;</div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span>          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;</div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(qclog[i].type,<span class="stringliteral">"double"</span>) == 0) {</div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span>          snprintf(key_value,<span class="keyword">sizeof</span>(key_value),<span class="stringliteral">"%f"</span>,qclog[i].n_val);</div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span>          cpl_propertylist_append_double(plist, key_name,qclog[i].n_val) ;</div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span>          cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;</div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span>       }</div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span> </div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span>    }</div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> </div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span>    <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span> }</div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span> </div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span> </div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dfs_8h_source.html b/html/sinfo__dfs_8h_source.html
index e9aa7c2..e578af2 100644
--- a/html/sinfo__dfs_8h_source.html
+++ b/html/sinfo__dfs_8h_source.html
@@ -2,67 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dfs.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dfs.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_dfs.h,v 1.3 2010/02/17 09:23:43 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2010/02/17 09:23:43 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_DFS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DFS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*--------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                 general Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00038"></a>00038 <span class="comment">/* #include "utilities.h" */</span>   <span class="comment">/* critical for other modules */</span>
-<a name="l00039"></a>00039 <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                   Defines</span>
-<a name="l00041"></a>00041 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_ref_types.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00047"></a>00047 <span class="comment">/* ---------------------------------------------------------------------- </span>
-<a name="l00048"></a>00048 <span class="comment">   functions</span>
-<a name="l00049"></a>00049 <span class="comment">---------------------------------------------------------------------- */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00051"></a>00051 CPL_END_DECLS
-<a name="l00052"></a>00052 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dfs.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_dfs.h,v 1.3 2010/02/17 09:23:43 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2010/02/17 09:23:43 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_DFS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DFS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*--------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                 general Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* #include "utilities.h" */</span>   <span class="comment">/* critical for other modules */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_ref_types.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* ---------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   functions</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">---------------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__distortion_8c_source.html b/html/sinfo__distortion_8c_source.html
index 935febd..24f777c 100644
--- a/html/sinfo__distortion_8c_source.html
+++ b/html/sinfo__distortion_8c_source.html
@@ -2,1512 +2,1543 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_distortion.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_distortion.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_distortion.c,v 1.37 2012/03/05 16:34:06 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/05 16:34:06 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.37 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <math.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_distortion.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "irplib_flat.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00048"></a>00048 <span class="comment">//#include "sinfo_irplib_cpl_wrp.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                   Define</span>
-<a name="l00052"></a>00052 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#define ARC_NBSAMPLES       20</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define ARC_THRESHFACT      (1.0/3.0)</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINGOODPIX      100</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINARCLENFACT   1.19   </span><span class="comment">/* 1.1-2 */</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define ARC_MINNBARCS       32     </span><span class="comment">/* 4-32 */</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#define ARC_RANGE_FACT      3.0</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define ARC_WINDOWSIZE      10  </span><span class="comment">/* 32 */</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="preprocessor">#define TRESH_MEDIAN_MIN    0.0</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define TRESH_SIGMA_MAX     200.0</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                                Functions prototypes</span>
-<a name="l00074"></a>00074 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 <span class="keyword">static</span> cpl_apertures *
-<a name="l00076"></a>00076 sinfo_distortion_detect_arcs_new(cpl_image* ,cpl_image   **,
-<a name="l00077"></a>00077                                  <span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">double</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">double</span>,<span class="keywordtype">int</span>);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keyword">static</span>
-<a name="l00080"></a>00080 cpl_apertures * sinfo_distortion_detect_arcs(cpl_image *,
-<a name="l00081"></a>00081         cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00083"></a>00083 sinfo_distortion_fill_badzones(cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>) ;
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00085"></a>00085 sinfo_distortion_threshold1d(cpl_image *, <span class="keywordtype">double</span>, cpl_image *, <span class="keywordtype">double</span>) ;
-<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00087"></a>00087 sinfo_distortion_purge_arcs(cpl_image *, cpl_apertures **,
-<a name="l00088"></a>00088                             cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>) ;
-<a name="l00089"></a>00089 <span class="keyword">static</span> cpl_bivector **
-<a name="l00090"></a>00090 sinfo_distortion_get_arc_positions(cpl_image *,
-<a name="l00091"></a>00091                                    cpl_image *,
-<a name="l00092"></a>00092                                    cpl_apertures *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> **) ;
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_distortion_fine_pos(cpl_image *, cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;
-<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_sub_hor_lowpass(cpl_image *, <span class="keywordtype">int</span>) ;
-<a name="l00095"></a>00095 <span class="keyword">static</span> cpl_image * sinfo_distortion_remove_ramp(<span class="keyword">const</span> cpl_image *) ;
-<a name="l00096"></a>00096 <span class="keyword">static</span> cpl_image *
-<a name="l00097"></a>00097 sinfo_distortion_smooth(cpl_image* inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r,<span class="keyword">const</span> <span class="keywordtype">int</span> d);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00103"></a>00103 <span class="comment">                                Functions code</span>
-<a name="l00104"></a>00104 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00117"></a>00117 <span class="keyword">static</span> cpl_image *
-<a name="l00118"></a>00118 sinfo_distortion_smooth(cpl_image* inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r,<span class="keyword">const</span> <span class="keywordtype">int</span> d)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="keywordtype">int</span> sx=0;
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> sy=0;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> i=0;
-<a name="l00124"></a>00124   <span class="keywordtype">int</span> j=0;
-<a name="l00125"></a>00125   <span class="keywordtype">int</span> z=0;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="keywordtype">float</span> sum;
-<a name="l00128"></a>00128   cpl_image* out=NULL;
-<a name="l00129"></a>00129   <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00130"></a>00130   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00131"></a>00131   <span class="keywordtype">int</span> min=0;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   cknull(inp,<span class="stringliteral">"Null input image!"</span>);
-<a name="l00134"></a>00134   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l00135"></a>00135   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l00136"></a>00136   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l00137"></a>00137   check_nomsg(pi=cpl_image_get_data_float(inp));
-<a name="l00138"></a>00138   check_nomsg(po=cpl_image_get_data_float(out));
-<a name="l00139"></a>00139   min = r/2;
-<a name="l00140"></a>00140   <span class="keywordflow">switch</span> (d) {
-<a name="l00141"></a>00141   <span class="keywordflow">case</span> 0:
-<a name="l00142"></a>00142     <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l00143"></a>00143       <span class="keywordflow">for</span>(i=min;i<sx-min;i++) {
-<a name="l00144"></a>00144     sum=0;
-<a name="l00145"></a>00145     <span class="keywordflow">for</span>(z=i-min;z<i+min+1;z++) {
-<a name="l00146"></a>00146       sum+=pi[z+j*sx];
-<a name="l00147"></a>00147     }
-<a name="l00148"></a>00148         po[i+j*sx]=sum/r;
-<a name="l00149"></a>00149       }
-<a name="l00150"></a>00150     }
-<a name="l00151"></a>00151     <span class="keywordflow">break</span>;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   <span class="keywordflow">case</span> 1:
-<a name="l00154"></a>00154     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l00155"></a>00155       <span class="keywordflow">for</span>(j=min;j<sy-min;j++) {
-<a name="l00156"></a>00156     sum=0;
-<a name="l00157"></a>00157     <span class="keywordflow">for</span>(z=j-min;z<j+min+1;z++) {
-<a name="l00158"></a>00158       sum+=pi[i+z*sx];
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160         po[i+j*sx]=sum;
-<a name="l00161"></a>00161       }
-<a name="l00162"></a>00162     }
-<a name="l00163"></a>00163     <span class="keywordflow">break</span>;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   <span class="keywordflow">default</span>:
-<a name="l00166"></a>00166     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);
-<a name="l00167"></a>00167     <span class="keywordflow">goto</span> cleanup;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169   }
-<a name="l00170"></a>00170   check_nomsg(cpl_image_delete(inp));
-<a name="l00171"></a>00171   <span class="keywordflow">return</span> out;
-<a name="l00172"></a>00172  cleanup:
-<a name="l00173"></a>00173   <span class="keywordflow">return</span> NULL;
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 cpl_image *
-<a name="l00190"></a>00190 sinfo_distortion_image_restore(<span class="keyword">const</span> cpl_image* inp,
-<a name="l00191"></a>00191                                <span class="keyword">const</span> <span class="keywordtype">int</span> r,
-<a name="l00192"></a>00192                                <span class="keyword">const</span> <span class="keywordtype">int</span> d,
-<a name="l00193"></a>00193                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00194"></a>00194                                <span class="keyword">const</span> <span class="keywordtype">int</span> ks_method,
-<a name="l00195"></a>00195                                <span class="keyword">const</span> <span class="keywordtype">int</span> n)
-<a name="l00196"></a>00196 {
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   <span class="keywordtype">int</span> sx=0;
-<a name="l00199"></a>00199   <span class="keywordtype">int</span> sy=0;
-<a name="l00200"></a>00200   <span class="keywordtype">int</span> i=0;
-<a name="l00201"></a>00201   <span class="keywordtype">int</span> j=0;
-<a name="l00202"></a>00202   <span class="keywordtype">int</span> z=0;
-<a name="l00203"></a>00203   <span class="keywordtype">int</span> k=0;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   cpl_image* out=NULL;
-<a name="l00207"></a>00207   <span class="keyword">const</span> <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00208"></a>00208   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00209"></a>00209   <span class="keywordtype">int</span> min=0;
-<a name="l00210"></a>00210   cpl_vector* vec=NULL;
-<a name="l00211"></a>00211   <span class="keywordtype">double</span>* pv=NULL;
-<a name="l00212"></a>00212   <span class="keywordtype">double</span> mean=0;
-<a name="l00213"></a>00213   <span class="keywordtype">double</span> median=0;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215   cknull(inp,<span class="stringliteral">"Null input image!"</span>);
-<a name="l00216"></a>00216   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l00217"></a>00217   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l00218"></a>00218   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l00219"></a>00219   check_nomsg(pi=cpl_image_get_data_float_const(inp));
-<a name="l00220"></a>00220   check_nomsg(po=cpl_image_get_data_float(out));
-<a name="l00221"></a>00221   min = r/2;
-<a name="l00222"></a>00222   check_nomsg(vec=cpl_vector_new(r));
-<a name="l00223"></a>00223   check_nomsg(pv=cpl_vector_get_data(vec));
-<a name="l00224"></a>00224   <span class="keywordflow">switch</span> (d) {
-<a name="l00225"></a>00225   <span class="keywordflow">case</span> 0:
-<a name="l00226"></a>00226     <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l00227"></a>00227       <span class="keywordflow">for</span>(i=min;i<sx-min;i++) {
-<a name="l00228"></a>00228     k=0;
-<a name="l00229"></a>00229     <span class="keywordflow">for</span>(z=i-min;z<i+min+1;z++) {
-<a name="l00230"></a>00230       pv[k]=(double)pi[z+j*sx];
-<a name="l00231"></a>00231           k++;
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233         cknull_nomsg(vec=sinfo_vector_clip(vec,kappa,n,ks_method));
-<a name="l00234"></a>00234         check_nomsg(mean=cpl_vector_get_mean(vec));
-<a name="l00235"></a>00235         check_nomsg(median=cpl_vector_get_mean(vec));
-<a name="l00236"></a>00236         po[i+j*sx]+=(mean-median);
-<a name="l00237"></a>00237       }
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239     <span class="keywordflow">break</span>;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241   <span class="keywordflow">case</span> 1:
-<a name="l00242"></a>00242     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l00243"></a>00243       <span class="keywordflow">for</span>(j=min;j<sy-min;j++) {
-<a name="l00244"></a>00244         k=0;
-<a name="l00245"></a>00245     <span class="keywordflow">for</span>(z=j-min;z<j+min+1;z++) {
-<a name="l00246"></a>00246       pv[k]=(double)pi[i+z*sx];
-<a name="l00247"></a>00247           k++;
-<a name="l00248"></a>00248     }
-<a name="l00249"></a>00249         cknull_nomsg(vec=sinfo_vector_clip(vec,kappa,n,ks_method));
-<a name="l00250"></a>00250         check_nomsg(mean=cpl_vector_get_mean(vec));
-<a name="l00251"></a>00251         check_nomsg(median=cpl_vector_get_mean(vec));
-<a name="l00252"></a>00252         po[i+j*sx]+=(mean-median);
-<a name="l00253"></a>00253       }
-<a name="l00254"></a>00254     }
-<a name="l00255"></a>00255     <span class="keywordflow">break</span>;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   <span class="keywordflow">default</span>:
-<a name="l00258"></a>00258     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);
-<a name="l00259"></a>00259     <span class="keywordflow">goto</span> cleanup;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   }
-<a name="l00262"></a>00262   check_nomsg(cpl_image_delete((cpl_image*)inp));
-<a name="l00263"></a>00263   <span class="keywordflow">return</span> out;
-<a name="l00264"></a>00264  cleanup:
-<a name="l00265"></a>00265   <span class="keywordflow">return</span> NULL;
-<a name="l00266"></a>00266 }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00292"></a>00292 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00293"></a>00293 cpl_polynomial * sinfo_distortion_estimate_new(
-<a name="l00294"></a>00294         <span class="keyword">const</span> cpl_image *   org,
-<a name="l00295"></a>00295         <span class="keywordtype">int</span>                 xmin,
-<a name="l00296"></a>00296         <span class="keywordtype">int</span>                 ymin,
-<a name="l00297"></a>00297         <span class="keywordtype">int</span>                 xmax,
-<a name="l00298"></a>00298         <span class="keywordtype">int</span>                 ymax,
-<a name="l00299"></a>00299         <span class="keywordtype">int</span>                 auto_ramp_sub,
-<a name="l00300"></a>00300         <span class="keywordtype">int</span>                 arc_sat,
-<a name="l00301"></a>00301         <span class="keywordtype">int</span>                 max_arc_width,
-<a name="l00302"></a>00302         <span class="keywordtype">double</span>              kappa,
-<a name="l00303"></a>00303         <span class="keywordtype">double</span>              arcs_min_arclen_factor,
-<a name="l00304"></a>00304         <span class="keywordtype">int</span>                 arcs_window_size,
-<a name="l00305"></a>00305         <span class="keywordtype">int</span>                 smooth_rad,
-<a name="l00306"></a>00306         <span class="keywordtype">int</span>                 degree,
-<a name="l00307"></a>00307         <span class="keywordtype">double</span>              offset,
-<a name="l00308"></a>00308         cpl_apertures   **  arcs)
-<a name="l00309"></a>00309 {
-<a name="l00310"></a>00310     cpl_image       *   local_im ;
-<a name="l00311"></a>00311     cpl_image       *   label_image ;
-<a name="l00312"></a>00312     <span class="keywordtype">double</span>              rightmost, leftmost ;
-<a name="l00313"></a>00313     cpl_bivector    **  arcs_pos ;
-<a name="l00314"></a>00314     <span class="keywordtype">double</span>          *   parc_posx ;
-<a name="l00315"></a>00315     <span class="keywordtype">double</span>          *   parc_posy ;
-<a name="l00316"></a>00316     <span class="keywordtype">double</span>          *   lines_pos ;
-<a name="l00317"></a>00317     cpl_bivector    *   grid ;
-<a name="l00318"></a>00318     <span class="keywordtype">double</span>          *   pgridx ;
-<a name="l00319"></a>00319     <span class="keywordtype">double</span>          *   pgridy ;
-<a name="l00320"></a>00320     cpl_vector      *   values_to_fit ;
-<a name="l00321"></a>00321     <span class="keywordtype">double</span>          *   pvalues_to_fit ;
-<a name="l00322"></a>00322     <span class="keywordtype">int</span>                 min_arc_range ;
-<a name="l00323"></a>00323     <span class="keywordtype">int</span>                 n_calib ;
-<a name="l00324"></a>00324     <span class="keywordtype">int</span>                 n_arcs ;
-<a name="l00325"></a>00325     cpl_polynomial  *   poly2d ;
-<a name="l00326"></a>00326     <span class="keywordtype">int</span>                 nx ;
-<a name="l00327"></a>00327     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329     <span class="comment">/* AMO added to use offset */</span>
-<a name="l00330"></a>00330     cpl_vector    *     lines_pos_tmp ;
-<a name="l00331"></a>00331     cpl_bivector    *   grid_tmp ;
-<a name="l00332"></a>00332     cpl_vector* grid_tot=0;
-<a name="l00333"></a>00333     <span class="keywordtype">double</span>* pgrid_tmp_x=NULL;
-<a name="l00334"></a>00334     <span class="keywordtype">double</span>* pgrid_tmp_y=NULL;
-<a name="l00335"></a>00335     <span class="keywordtype">double</span>* pgrid_tot=NULL;
-<a name="l00336"></a>00336     <span class="keywordtype">double</span>* plines_pos_tmp=NULL;
-<a name="l00337"></a>00337     <span class="keywordtype">int</span> n_lines=0;
-<a name="l00338"></a>00338     <span class="keywordtype">int</span> k=0;
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     <span class="comment">/* Check entries */</span>
-<a name="l00342"></a>00342     <span class="keywordflow">if</span> (org == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00343"></a>00343     <span class="keywordflow">if</span> (kappa < 0.0) <span class="keywordflow">return</span> NULL ;
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="comment">/* Initialise */</span>
-<a name="l00346"></a>00346     n_calib = ARC_NBSAMPLES ;
-<a name="l00347"></a>00347     nx = cpl_image_get_size_x(org) ;
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <span class="keywordflow">if</span> (auto_ramp_sub) {
-<a name="l00350"></a>00350         local_im = sinfo_distortion_remove_ramp(org) ;
-<a name="l00351"></a>00351     } <span class="keywordflow">else</span> {
-<a name="l00352"></a>00352         <span class="comment">/* Local copy of input image */</span>
-<a name="l00353"></a>00353         local_im = cpl_image_duplicate(org) ;
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355     <span class="keywordflow">if</span> (local_im == NULL) {
-<a name="l00356"></a>00356         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot clean the image"</span>) ;
-<a name="l00357"></a>00357         <span class="keywordflow">return</span> NULL ;
-<a name="l00358"></a>00358     }
-<a name="l00359"></a>00359     <span class="keywordflow">if</span>(smooth_rad > 1) {
-<a name="l00360"></a>00360       local_im=sinfo_distortion_smooth(local_im,smooth_rad,1);
-<a name="l00361"></a>00361       <span class="comment">//cpl_image_save(local_im,"out_local_im.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00362"></a>00362       <span class="comment">//               NULL,CPL_IO_DEFAULT);</span>
-<a name="l00363"></a>00363       <span class="comment">//local_im=sinfo_distortion_image_restore(local_im,smooth_rad,1,2,0,2);</span>
-<a name="l00364"></a>00364       <span class="comment">//cpl_image_save(local_im,"out_local_im_post.fits",</span>
-<a name="l00365"></a>00365       <span class="comment">//               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367     }
-<a name="l00368"></a>00368     <span class="comment">/* Detect the arcs in the input image */</span>
-<a name="l00369"></a>00369     cpl_msg_info(cpl_func, <span class="stringliteral">"Detect arcs"</span>) ;
-<a name="l00370"></a>00370     <span class="keywordflow">if</span> ((*arcs = sinfo_distortion_detect_arcs_new(local_im,
-<a name="l00371"></a>00371                     &label_image,
-<a name="l00372"></a>00372                     arc_sat, max_arc_width, kappa,
-<a name="l00373"></a>00373                     xmin, ymin, xmax, ymax,
-<a name="l00374"></a>00374                     arcs_min_arclen_factor,arcs_window_size)) == NULL) {
-<a name="l00375"></a>00375         cpl_image_delete(local_im) ;
-<a name="l00376"></a>00376         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect the arcs"</span>) ;
-<a name="l00377"></a>00377         <span class="keywordflow">return</span> NULL ;
-<a name="l00378"></a>00378     }
-<a name="l00379"></a>00379     n_arcs = cpl_apertures_get_size(*arcs) ;
-<a name="l00380"></a>00380     cpl_msg_info(cpl_func, <span class="stringliteral">"%d detected arcs"</span>, n_arcs) ;
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span>
-<a name="l00383"></a>00383     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1) ;
-<a name="l00384"></a>00384     <span class="keywordflow">for</span> (i=1 ; i<n_arcs ; i++) {
-<a name="l00385"></a>00385         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)
-<a name="l00386"></a>00386             leftmost = cpl_apertures_get_pos_x(*arcs, i+1) ;
-<a name="l00387"></a>00387         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)
-<a name="l00388"></a>00388             rightmost = cpl_apertures_get_pos_x(*arcs, i+1) ;
-<a name="l00389"></a>00389     }
-<a name="l00390"></a>00390     min_arc_range = (int)(nx / ARC_RANGE_FACT) ;
-<a name="l00391"></a>00391     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {
-<a name="l00392"></a>00392         cpl_msg_error(cpl_func, <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,
-<a name="l00393"></a>00393                 rightmost, leftmost, min_arc_range) ;
-<a name="l00394"></a>00394         cpl_apertures_delete(*arcs) ;
-<a name="l00395"></a>00395         cpl_image_delete(local_im) ;
-<a name="l00396"></a>00396         cpl_image_delete(label_image) ;
-<a name="l00397"></a>00397         <span class="keywordflow">return</span> NULL ;
-<a name="l00398"></a>00398     }
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span>
-<a name="l00401"></a>00401     cpl_msg_info(cpl_func, <span class="stringliteral">"Create deformation grid"</span>) ;
-<a name="l00402"></a>00402     lines_pos = cpl_malloc(n_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00403"></a>00403     <span class="keywordflow">if</span> ((arcs_pos = sinfo_distortion_get_arc_positions(local_im,
-<a name="l00404"></a>00404                     label_image, *arcs, n_calib, &lines_pos))==NULL){
-<a name="l00405"></a>00405         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot get arcs positions"</span>) ;
-<a name="l00406"></a>00406         cpl_apertures_delete(*arcs) ;
-<a name="l00407"></a>00407         cpl_image_delete(local_im) ;
-<a name="l00408"></a>00408         cpl_free(lines_pos) ;
-<a name="l00409"></a>00409         cpl_image_delete(label_image) ;
-<a name="l00410"></a>00410         <span class="keywordflow">return</span> NULL ;
-<a name="l00411"></a>00411     }
-<a name="l00412"></a>00412     cpl_image_delete(label_image) ;
-<a name="l00413"></a>00413     cpl_image_delete(local_im) ;
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415     <span class="comment">/* Prepare the fitting */</span>
-<a name="l00416"></a>00416     lines_pos_tmp=cpl_vector_new(n_arcs);
-<a name="l00417"></a>00417     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420     sinfo_msg(<span class="stringliteral">"Fit the 2d polynomial"</span>) ;
-<a name="l00421"></a>00421     grid = cpl_bivector_new(n_arcs * n_calib) ;
-<a name="l00422"></a>00422     pgridx = cpl_bivector_get_x_data(grid) ;
-<a name="l00423"></a>00423     pgridy = cpl_bivector_get_y_data(grid) ;
-<a name="l00424"></a>00424     values_to_fit = cpl_vector_new(n_arcs * n_calib) ;
-<a name="l00425"></a>00425     pvalues_to_fit = cpl_vector_get_data(values_to_fit) ;
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {
-<a name="l00428"></a>00428         parc_posx = cpl_bivector_get_x_data(arcs_pos[i]) ;
-<a name="l00429"></a>00429         parc_posy = cpl_bivector_get_y_data(arcs_pos[i]) ;
-<a name="l00430"></a>00430         <span class="keywordflow">for</span> (j=0 ; j<n_calib ; j++) {
-<a name="l00431"></a>00431             plines_pos_tmp[i]=lines_pos[i] ;
-<a name="l00432"></a>00432             pgridx[j+i*n_calib] = lines_pos[i] ;
-<a name="l00433"></a>00433             pgridy[j+i*n_calib] = parc_posy[j] ;
-<a name="l00434"></a>00434             pvalues_to_fit[j+i*n_calib] = parc_posx[j] ;
-<a name="l00435"></a>00435         }
-<a name="l00436"></a>00436     }
-<a name="l00437"></a>00437     <span class="comment">/* AMO new to use offset */</span>
-<a name="l00438"></a>00438     n_lines= n_arcs/32.0;
-<a name="l00439"></a>00439     <span class="keywordflow">if</span>(n_lines < 1) {
-<a name="l00440"></a>00440       n_lines=1;
-<a name="l00441"></a>00441     }
-<a name="l00442"></a>00442     cpl_vector_sort(lines_pos_tmp,1);
-<a name="l00443"></a>00443     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);
-<a name="l00444"></a>00444     grid_tmp=cpl_bivector_duplicate(grid);
-<a name="l00445"></a>00445     grid_tot=cpl_vector_new(n_calib);
-<a name="l00446"></a>00446     pgrid_tmp_x = cpl_bivector_get_x_data(grid_tmp) ;
-<a name="l00447"></a>00447     pgrid_tmp_y = cpl_bivector_get_y_data(grid_tmp) ;
-<a name="l00448"></a>00448     pgrid_tot = cpl_vector_get_data(grid_tot);
-<a name="l00449"></a>00449     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {
-<a name="l00450"></a>00450       pgrid_tot[j]=0;
-<a name="l00451"></a>00451       <span class="keywordflow">for</span>(i=n_lines ;i<n_arcs;i=i+n_lines)
-<a name="l00452"></a>00452     {
-<a name="l00453"></a>00453       <span class="keywordflow">for</span>(k=0;k<n_lines;k++) {
-<a name="l00454"></a>00454         pgrid_tot[j] += (plines_pos_tmp[i+k]-
-<a name="l00455"></a>00455                              plines_pos_tmp[k]);
-<a name="l00456"></a>00456         <span class="comment">/*</span>
-<a name="l00457"></a>00457 <span class="comment">            sinfo_msg("diff=%g",(plines_pos_tmp[i+k]-</span>
-<a name="l00458"></a>00458 <span class="comment">                 plines_pos_tmp[k]));</span>
-<a name="l00459"></a>00459 <span class="comment">        */</span>
-<a name="l00460"></a>00460       }
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462       <span class="comment">/*</span>
-<a name="l00463"></a>00463 <span class="comment">      sinfo_msg("j=%d pgrid_tot=%g",j,pgrid_tot[j]);</span>
-<a name="l00464"></a>00464 <span class="comment">      */</span>
-<a name="l00465"></a>00465     }
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {
-<a name="l00468"></a>00468       <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {
-<a name="l00469"></a>00469      pgridx[j+i*n_calib]=pgridx[j+i*n_calib]*
-<a name="l00470"></a>00470                              ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-offset;
-<a name="l00471"></a>00471      <span class="comment">/*</span>
-<a name="l00472"></a>00472 <span class="comment">         sinfo_msg_error("AMo after corr grid[%d,%d]=%g",</span>
-<a name="l00473"></a>00473 <span class="comment">                          i,k,pgridx[k+i*n_calib]);</span>
-<a name="l00474"></a>00474 <span class="comment">     */</span>
-<a name="l00475"></a>00475      pgrid_tmp_x[j+i*n_calib]=pgrid_tmp_x[j+i*n_calib]*
-<a name="l00476"></a>00476                                   ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-
-<a name="l00477"></a>00477                                   offset;
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479       }
-<a name="l00480"></a>00480     }
-<a name="l00481"></a>00481     cpl_vector_delete(lines_pos_tmp);
-<a name="l00482"></a>00482     cpl_bivector_delete(grid_tmp);
-<a name="l00483"></a>00483     cpl_vector_delete(grid_tot);
-<a name="l00484"></a>00484     <span class="comment">/* end AMO: to use the offset */</span>
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(arcs_pos[i]) ;
-<a name="l00488"></a>00488     cpl_free(arcs_pos) ;
-<a name="l00489"></a>00489     cpl_free(lines_pos) ;
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491     <span class="comment">/* Apply the fitting */</span>
-<a name="l00492"></a>00492     <span class="keywordflow">if</span> ((poly2d = sinfo_polynomial_fit_2d_create(grid, values_to_fit,
-<a name="l00493"></a>00493                     degree, NULL))==NULL) {
-<a name="l00494"></a>00494         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot apply the 2d fit"</span>) ;
-<a name="l00495"></a>00495         cpl_bivector_delete(grid) ;
-<a name="l00496"></a>00496         cpl_vector_delete(values_to_fit) ;
-<a name="l00497"></a>00497         cpl_apertures_delete(*arcs) ;
-<a name="l00498"></a>00498         <span class="keywordflow">return</span> NULL ;
-<a name="l00499"></a>00499     }
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501     <span class="comment">/* Free and return */</span>
-<a name="l00502"></a>00502     cpl_bivector_delete(grid) ;
-<a name="l00503"></a>00503     cpl_vector_delete(values_to_fit) ;
-<a name="l00504"></a>00504     <span class="keywordflow">return</span> poly2d ;
-<a name="l00505"></a>00505 }
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00525"></a>00525 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00526"></a>00526 <span class="keyword">static</span> cpl_apertures * sinfo_distortion_detect_arcs_new(
-<a name="l00527"></a>00527         cpl_image   *   im,
-<a name="l00528"></a>00528         cpl_image   **  label_im,
-<a name="l00529"></a>00529         <span class="keywordtype">int</span>             arc_sat,
-<a name="l00530"></a>00530         <span class="keywordtype">int</span>             max_arc_width,
-<a name="l00531"></a>00531         <span class="keywordtype">double</span>          kappa,
-<a name="l00532"></a>00532         <span class="keywordtype">int</span>             xmin,
-<a name="l00533"></a>00533         <span class="keywordtype">int</span>             ymin,
-<a name="l00534"></a>00534         <span class="keywordtype">int</span>             xmax,
-<a name="l00535"></a>00535         <span class="keywordtype">int</span>             ymax,
-<a name="l00536"></a>00536         <span class="keywordtype">double</span> arcs_min_arclen_factor,
-<a name="l00537"></a>00537         <span class="keywordtype">int</span> arcs_window_size)
-<a name="l00538"></a>00538 {
-<a name="l00539"></a>00539     cpl_image       *   filt_im ;
-<a name="l00540"></a>00540     cpl_matrix      *   filter ;
-<a name="l00541"></a>00541     cpl_image       *   collapsed ;
-<a name="l00542"></a>00542     cpl_mask        *   bin_im ;
-<a name="l00543"></a>00543     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma ;
-<a name="l00544"></a>00544     <span class="keywordtype">int</span>                 min_arclen = 0 ;
-<a name="l00545"></a>00545     cpl_apertures   *   det ;
-<a name="l00546"></a>00546     cpl_size                 nobj ;
-<a name="l00547"></a>00547     <span class="keywordtype">int</span>                 ngoodpix ;
-<a name="l00548"></a>00548     <span class="keywordtype">int</span>                 ny ;
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550     ny = cpl_image_get_size_y(im) ;
-<a name="l00551"></a>00551     <span class="comment">/* Default values for output parameters */</span>
-<a name="l00552"></a>00552     *label_im = NULL ;
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span>
-<a name="l00555"></a>00555     median_val = cpl_image_get_median_dev(im, &sigma) ;
-<a name="l00556"></a>00556     fillval = median_val-sigma/2.0 ;
-<a name="l00557"></a>00557     <span class="keywordflow">if</span> (sinfo_distortion_fill_badzones(im, xmin, ymin, xmax, ymax,
-<a name="l00558"></a>00558                 fillval) == -1) {
-<a name="l00559"></a>00559         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot fill bad zones"</span>) ;
-<a name="l00560"></a>00560         <span class="keywordflow">return</span> NULL ;
-<a name="l00561"></a>00561     }
-<a name="l00562"></a>00562     <span class="comment">/* Median vertical filter */</span>
-<a name="l00563"></a>00563     filter = cpl_matrix_new(3, 1) ;
-<a name="l00564"></a>00564     cpl_matrix_fill(filter, 1.0) ;
-<a name="l00565"></a>00565     <span class="comment">/* filt_im = cpl_image_filter_median(im, filter) ; */</span>
-<a name="l00566"></a>00566     filt_im = cpl_image_duplicate(im) ;
-<a name="l00567"></a>00567     cpl_matrix_delete(filter) ;
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569     <span class="comment">/* Subtract a low-pass */</span>
-<a name="l00570"></a>00570     <span class="comment">/* AMO: suppressed as may remove arcs */</span>
-<a name="l00571"></a>00571     <span class="keywordflow">if</span> (sinfo_distortion_sub_hor_lowpass(filt_im, arcs_window_size) == -1) {
-<a name="l00572"></a>00572         cpl_image_delete(filt_im) ;
-<a name="l00573"></a>00573         <span class="keywordflow">return</span> NULL ;
-<a name="l00574"></a>00574     }
-<a name="l00575"></a>00575     <span class="comment">//cpl_image_save(filt_im,"out_filt_im_lp.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00576"></a>00576     <span class="comment">//               NULL,CPL_IO_DEFAULT);</span>
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578     <span class="comment">/* Get relevant stats for thresholding */</span>
-<a name="l00579"></a>00579     median_val = cpl_image_get_median_dev(filt_im, &sigma) ;
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581     <span class="comment">/* Correct median_val and sigma if necessary */</span>
-<a name="l00582"></a>00582     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN ;
-<a name="l00583"></a>00583     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX ;
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585     <span class="comment">/* Set the threshold */</span>
-<a name="l00586"></a>00586     threshold = median_val + sigma * kappa ;
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588     <span class="comment">/* Collapse the image */</span>
-<a name="l00589"></a>00589     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0) ;
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span>
-<a name="l00592"></a>00592     <span class="keywordflow">if</span> (sinfo_distortion_threshold1d(filt_im, median_val,
-<a name="l00593"></a>00593                                      collapsed, 0.0)==-1) {
-<a name="l00594"></a>00594         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot threshold the filtered image"</span>) ;
-<a name="l00595"></a>00595         cpl_image_delete(filt_im) ;
-<a name="l00596"></a>00596         cpl_image_delete(collapsed) ;
-<a name="l00597"></a>00597         <span class="keywordflow">return</span> NULL ;
-<a name="l00598"></a>00598     }
-<a name="l00599"></a>00599     cpl_image_delete(collapsed) ;
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601     <span class="comment">/* Binarize the image */</span>
-<a name="l00602"></a>00602     bin_im = cpl_mask_threshold_image_create(filt_im, threshold,
-<a name="l00603"></a>00603             SINFO_DBL_MAX);
-<a name="l00604"></a>00604     cpl_image_delete(filt_im) ;
-<a name="l00605"></a>00605     <span class="keywordflow">if</span> (bin_im == NULL) {
-<a name="l00606"></a>00606         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot binarise the image"</span>) ;
-<a name="l00607"></a>00607         <span class="keywordflow">return</span> NULL ;
-<a name="l00608"></a>00608     }
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     <span class="comment">/* Test if there are enough good pixels */</span>
-<a name="l00611"></a>00611     ngoodpix = cpl_mask_count(bin_im) ;
-<a name="l00612"></a>00612     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {
-<a name="l00613"></a>00613         cpl_msg_error(cpl_func, <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix) ;
-<a name="l00614"></a>00614         cpl_mask_delete(bin_im) ;
-<a name="l00615"></a>00615         <span class="keywordflow">return</span> NULL ;
-<a name="l00616"></a>00616     }
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618     <span class="comment">/* Apply a morphological closing to clean the isolated pixels */</span>
-<a name="l00619"></a>00619     filter = cpl_matrix_new(3, 3) ;
-<a name="l00620"></a>00620     cpl_matrix_fill(filter, 1.0) ;
-<a name="l00621"></a>00621     cpl_mask_closing(bin_im, filter) ;
-<a name="l00622"></a>00622     cpl_matrix_delete(filter) ;
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624     <span class="comment">/* Labelize pixel map to a label image */</span>
-<a name="l00625"></a>00625     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj) ;
-<a name="l00626"></a>00626     cpl_mask_delete(bin_im) ;
-<a name="l00627"></a>00627     <span class="comment">//cpl_image_save(*label_im,"out_label_im.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00628"></a>00628     <span class="comment">//               NULL,CPL_IO_DEFAULT);</span>
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     <span class="comment">/* Compute statistics on objects */</span>
-<a name="l00631"></a>00631     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {
-<a name="l00632"></a>00632         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot compute arcs stats"</span>) ;
-<a name="l00633"></a>00633         cpl_image_delete(*label_im) ;
-<a name="l00634"></a>00634         *label_im = NULL ;
-<a name="l00635"></a>00635         <span class="keywordflow">return</span> NULL ;
-<a name="l00636"></a>00636     }
-<a name="l00637"></a>00637     <span class="comment">/* Set min_arclen */</span>
-<a name="l00638"></a>00638     min_arclen = (int)(ny /arcs_min_arclen_factor) ;
-<a name="l00639"></a>00639     <span class="comment">//cpl_image_save(im,"out_im.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641     <span class="comment">/* Purge non-relevant arcs */</span>
-<a name="l00642"></a>00642     <span class="comment">/* cpl_apertures_dump(det,stdout); */</span>
-<a name="l00643"></a>00643     <span class="keywordflow">if</span> (sinfo_distortion_purge_arcs(im, &det, label_im, min_arclen,
-<a name="l00644"></a>00644                 max_arc_width, arc_sat) == -1) {
-<a name="l00645"></a>00645         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot purge the arcs"</span>) ;
-<a name="l00646"></a>00646         cpl_image_delete(*label_im) ;
-<a name="l00647"></a>00647         *label_im = NULL ;
-<a name="l00648"></a>00648         cpl_apertures_delete(det) ;
-<a name="l00649"></a>00649         <span class="keywordflow">return</span> NULL ;
-<a name="l00650"></a>00650     }
-<a name="l00651"></a>00651     <span class="comment">/* cpl_apertures_dump(det,stdout); */</span>
-<a name="l00652"></a>00652     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {
-<a name="l00653"></a>00653         cpl_msg_error(cpl_func, <span class="stringliteral">"Not enough valid arcs (%"</span> 
-<a name="l00654"></a>00654                       CPL_SIZE_FORMAT <span class="stringliteral">" < %d)"</span>,
-<a name="l00655"></a>00655                 cpl_apertures_get_size(det), ARC_MINNBARCS) ;
-<a name="l00656"></a>00656         cpl_image_delete(*label_im) ;
-<a name="l00657"></a>00657         *label_im = NULL ;
-<a name="l00658"></a>00658         cpl_apertures_delete(det) ;
-<a name="l00659"></a>00659         <span class="keywordflow">return</span> NULL ;
-<a name="l00660"></a>00660     }
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662     <span class="comment">/* Return  */</span>
-<a name="l00663"></a>00663     <span class="keywordflow">return</span> det ;
-<a name="l00664"></a>00664 }
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00692"></a>00692 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00693"></a>00693 cpl_polynomial * sinfo_distortion_estimate(
-<a name="l00694"></a>00694         <span class="keyword">const</span> cpl_image *   org,
-<a name="l00695"></a>00695         <span class="keywordtype">int</span>                 xmin,
-<a name="l00696"></a>00696         <span class="keywordtype">int</span>                 ymin,
-<a name="l00697"></a>00697         <span class="keywordtype">int</span>                 xmax,
-<a name="l00698"></a>00698         <span class="keywordtype">int</span>                 ymax,
-<a name="l00699"></a>00699         <span class="keywordtype">int</span>                 auto_ramp_sub,
-<a name="l00700"></a>00700         <span class="keywordtype">int</span>                 arc_sat,
-<a name="l00701"></a>00701         <span class="keywordtype">int</span>                 max_arc_width,
-<a name="l00702"></a>00702         <span class="keywordtype">int</span>                 degree,
-<a name="l00703"></a>00703         <span class="keywordtype">double</span>              offset,
-<a name="l00704"></a>00704         cpl_apertures   **  arcs)
-<a name="l00705"></a>00705 {
-<a name="l00706"></a>00706     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_estimate"</span> ;
-<a name="l00707"></a>00707     cpl_image       *   local_im ;
-<a name="l00708"></a>00708     cpl_image       *   label_image ;
-<a name="l00709"></a>00709     <span class="keywordtype">double</span>              rightmost, leftmost ;
-<a name="l00710"></a>00710     cpl_bivector    **  arcs_pos ;
-<a name="l00711"></a>00711     <span class="keywordtype">double</span>          *   parc_posx ;
-<a name="l00712"></a>00712     <span class="keywordtype">double</span>          *   parc_posy ;
-<a name="l00713"></a>00713     <span class="keywordtype">double</span>          *   lines_pos ;
-<a name="l00714"></a>00714     cpl_bivector    *   grid ;
-<a name="l00715"></a>00715     <span class="keywordtype">double</span>          *   pgridx ;
-<a name="l00716"></a>00716     <span class="keywordtype">double</span>          *   pgridy ;
-<a name="l00717"></a>00717     cpl_vector      *   values_to_fit ;
-<a name="l00718"></a>00718     <span class="keywordtype">double</span>          *   pvalues_to_fit ;
-<a name="l00719"></a>00719     <span class="keywordtype">int</span>                 min_arc_range ;
-<a name="l00720"></a>00720     <span class="keywordtype">int</span>                 n_calib ;
-<a name="l00721"></a>00721     <span class="keywordtype">int</span>                 n_arcs ;
-<a name="l00722"></a>00722     cpl_polynomial  *   poly2d ;
-<a name="l00723"></a>00723     <span class="keywordtype">int</span>                 nx ;
-<a name="l00724"></a>00724     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726     <span class="comment">/* AMO added to use offset */</span>
-<a name="l00727"></a>00727     cpl_vector    *     lines_pos_tmp ;
-<a name="l00728"></a>00728     cpl_bivector    *   grid_tmp ;
-<a name="l00729"></a>00729     <span class="keywordtype">int</span> n_lines=0;
-<a name="l00730"></a>00730     <span class="keywordtype">int</span> k=0;
-<a name="l00731"></a>00731     cpl_vector* grid_tot=0;
-<a name="l00732"></a>00732     <span class="keywordtype">double</span>* pgrid_tmp_x=NULL;
-<a name="l00733"></a>00733     <span class="keywordtype">double</span>* pgrid_tmp_y=NULL;
-<a name="l00734"></a>00734     <span class="keywordtype">double</span>* pgrid_tot=NULL;
-<a name="l00735"></a>00735     <span class="keywordtype">double</span>* plines_pos_tmp=NULL;
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737     <span class="comment">/* Check entries */</span>
-<a name="l00738"></a>00738     <span class="keywordflow">if</span> (org == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740     <span class="comment">/* Initialise */</span>
-<a name="l00741"></a>00741     n_calib = ARC_NBSAMPLES ;
-<a name="l00742"></a>00742     nx = cpl_image_get_size_x(org) ;
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744     <span class="keywordflow">if</span> (auto_ramp_sub) {
-<a name="l00745"></a>00745         local_im = sinfo_distortion_remove_ramp(org) ;
-<a name="l00746"></a>00746     } <span class="keywordflow">else</span> {
-<a name="l00747"></a>00747         <span class="comment">/* Local copy of input image */</span>
-<a name="l00748"></a>00748         local_im = cpl_image_duplicate(org) ;
-<a name="l00749"></a>00749     }
-<a name="l00750"></a>00750     <span class="keywordflow">if</span> (local_im == NULL) {
-<a name="l00751"></a>00751         cpl_msg_error(fctid, <span class="stringliteral">"Cannot clean the image"</span>) ;
-<a name="l00752"></a>00752         <span class="keywordflow">return</span> NULL ;
-<a name="l00753"></a>00753     }
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755     <span class="comment">/* Detect the arcs in the input image */</span>
-<a name="l00756"></a>00756     cpl_msg_info(fctid, <span class="stringliteral">"Detect arcs"</span>) ;
-<a name="l00757"></a>00757     <span class="keywordflow">if</span> ((*arcs = sinfo_distortion_detect_arcs(local_im,
-<a name="l00758"></a>00758                     &label_image,
-<a name="l00759"></a>00759                     arc_sat, max_arc_width,
-<a name="l00760"></a>00760                     xmin, ymin, xmax, ymax)) == NULL) {
-<a name="l00761"></a>00761         cpl_image_delete(local_im) ;
-<a name="l00762"></a>00762         cpl_msg_error(fctid, <span class="stringliteral">"Cannot detect the arcs"</span>) ;
-<a name="l00763"></a>00763         <span class="keywordflow">return</span> NULL ;
-<a name="l00764"></a>00764     }
-<a name="l00765"></a>00765     n_arcs = cpl_apertures_get_size(*arcs) ;
-<a name="l00766"></a>00766     cpl_msg_info(fctid, <span class="stringliteral">"%d detected arcs"</span>, n_arcs) ;
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span>
-<a name="l00769"></a>00769     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1) ;
-<a name="l00770"></a>00770     <span class="keywordflow">for</span> (i=1 ; i<n_arcs ; i++) {
-<a name="l00771"></a>00771         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)
-<a name="l00772"></a>00772             leftmost = cpl_apertures_get_pos_x(*arcs, i+1) ;
-<a name="l00773"></a>00773         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)
-<a name="l00774"></a>00774             rightmost = cpl_apertures_get_pos_x(*arcs, i+1) ;
-<a name="l00775"></a>00775     }
-<a name="l00776"></a>00776     min_arc_range = (int)(nx / ARC_RANGE_FACT) ;
-<a name="l00777"></a>00777     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {
-<a name="l00778"></a>00778         cpl_msg_error(fctid, <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,
-<a name="l00779"></a>00779                 rightmost, leftmost, min_arc_range) ;
-<a name="l00780"></a>00780         cpl_apertures_delete(*arcs) ;
-<a name="l00781"></a>00781         cpl_image_delete(local_im) ;
-<a name="l00782"></a>00782         cpl_image_delete(label_image) ;
-<a name="l00783"></a>00783         <span class="keywordflow">return</span> NULL ;
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span>
-<a name="l00787"></a>00787     cpl_msg_info(fctid, <span class="stringliteral">"Create deformation grid"</span>) ;
-<a name="l00788"></a>00788     lines_pos = cpl_malloc(n_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00789"></a>00789     <span class="keywordflow">if</span> ((arcs_pos = sinfo_distortion_get_arc_positions(local_im,
-<a name="l00790"></a>00790                     label_image, *arcs, n_calib, &lines_pos))==NULL){
-<a name="l00791"></a>00791         cpl_msg_error(fctid, <span class="stringliteral">"cannot get arcs positions"</span>) ;
-<a name="l00792"></a>00792         cpl_apertures_delete(*arcs) ;
-<a name="l00793"></a>00793         cpl_image_delete(local_im) ;
-<a name="l00794"></a>00794         cpl_free(lines_pos) ;
-<a name="l00795"></a>00795         cpl_image_delete(label_image) ;
-<a name="l00796"></a>00796         <span class="keywordflow">return</span> NULL ;
-<a name="l00797"></a>00797     }
-<a name="l00798"></a>00798     cpl_image_delete(label_image) ;
-<a name="l00799"></a>00799     cpl_image_delete(local_im) ;
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     <span class="comment">/* Prepare the fitting */</span>
-<a name="l00802"></a>00802     lines_pos_tmp=cpl_vector_new(n_arcs);
-<a name="l00803"></a>00803     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805     cpl_msg_info(fctid, <span class="stringliteral">"Fit the 2d polynomial"</span>) ;
-<a name="l00806"></a>00806     grid = cpl_bivector_new(n_arcs * n_calib) ;
-<a name="l00807"></a>00807     pgridx = cpl_bivector_get_x_data(grid) ;
-<a name="l00808"></a>00808     pgridy = cpl_bivector_get_y_data(grid) ;
-<a name="l00809"></a>00809     values_to_fit = cpl_vector_new(n_arcs * n_calib) ;
-<a name="l00810"></a>00810     pvalues_to_fit = cpl_vector_get_data(values_to_fit) ;
-<a name="l00811"></a>00811     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {
-<a name="l00812"></a>00812         parc_posx = cpl_bivector_get_x_data(arcs_pos[i]) ;
-<a name="l00813"></a>00813         parc_posy = cpl_bivector_get_y_data(arcs_pos[i]) ;
-<a name="l00814"></a>00814         <span class="keywordflow">for</span> (j=0 ; j<n_calib ; j++) {
-<a name="l00815"></a>00815             plines_pos_tmp[i]=lines_pos[i] ;
-<a name="l00816"></a>00816             pgridx[j+i*n_calib] = lines_pos[i] ;
-<a name="l00817"></a>00817             pgridy[j+i*n_calib] = parc_posy[j] ;
-<a name="l00818"></a>00818             pvalues_to_fit[j+i*n_calib] = parc_posx[j];
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820 <span class="comment">/*</span>
-<a name="l00821"></a>00821 <span class="comment">      sinfo_msg("pgridx=%g pgridy=%g pvalues=%g",</span>
-<a name="l00822"></a>00822 <span class="comment">          pgridx[j+i*n_calib],pgridy[j+i*n_calib],pvalues_to_fit[j+i*n_calib]);</span>
-<a name="l00823"></a>00823 <span class="comment">*/</span>
-<a name="l00824"></a>00824         }
-<a name="l00825"></a>00825     }
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828     <span class="comment">/* AMO new to use offset */</span>
-<a name="l00829"></a>00829     n_lines= n_arcs/32.0;
-<a name="l00830"></a>00830     <span class="keywordflow">if</span>(n_lines < 1) {
-<a name="l00831"></a>00831       n_lines=1;
-<a name="l00832"></a>00832     }
-<a name="l00833"></a>00833     cpl_vector_sort(lines_pos_tmp,1);
-<a name="l00834"></a>00834     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836     grid_tmp=cpl_bivector_duplicate(grid);
-<a name="l00837"></a>00837     grid_tot=cpl_vector_new(n_calib);
-<a name="l00838"></a>00838     pgrid_tmp_x = cpl_bivector_get_x_data(grid_tmp) ;
-<a name="l00839"></a>00839     pgrid_tmp_y = cpl_bivector_get_y_data(grid_tmp) ;
-<a name="l00840"></a>00840     pgrid_tot = cpl_vector_get_data(grid_tot);
-<a name="l00841"></a>00841     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {
-<a name="l00842"></a>00842       pgrid_tot[j]=0;
-<a name="l00843"></a>00843       <span class="keywordflow">for</span>(i=n_lines ;i<n_arcs;i=i+n_lines)
-<a name="l00844"></a>00844     {
-<a name="l00845"></a>00845       <span class="keywordflow">for</span>(k=0;k<n_lines;k++) {
-<a name="l00846"></a>00846         pgrid_tot[j] += (plines_pos_tmp[i+k]-
-<a name="l00847"></a>00847                              plines_pos_tmp[k]);
-<a name="l00848"></a>00848         <span class="comment">/*</span>
-<a name="l00849"></a>00849 <span class="comment">            sinfo_msg("diff=%g",(plines_pos_tmp[i+k]-</span>
-<a name="l00850"></a>00850 <span class="comment">                 plines_pos_tmp[k]));</span>
-<a name="l00851"></a>00851 <span class="comment">        */</span>
-<a name="l00852"></a>00852       }
-<a name="l00853"></a>00853     }
-<a name="l00854"></a>00854       <span class="comment">/*</span>
-<a name="l00855"></a>00855 <span class="comment">      sinfo_msg("j=%d pgrid_tot=%g",j,pgrid_tot[j]);</span>
-<a name="l00856"></a>00856 <span class="comment">      */</span>
-<a name="l00857"></a>00857     }
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {
-<a name="l00860"></a>00860       <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {
-<a name="l00861"></a>00861      pgridx[j+i*n_calib]=pgridx[j+i*n_calib]*
-<a name="l00862"></a>00862                              ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-offset;
-<a name="l00863"></a>00863      <span class="comment">/*</span>
-<a name="l00864"></a>00864 <span class="comment">         sinfo_msg_error("AMo after corr grid[%d,%d]=%g",</span>
-<a name="l00865"></a>00865 <span class="comment">                          i,k,pgridx[k+i*n_calib]);</span>
-<a name="l00866"></a>00866 <span class="comment">     */</span>
-<a name="l00867"></a>00867      pgrid_tmp_x[j+i*n_calib]=pgrid_tmp_x[j+i*n_calib]*
-<a name="l00868"></a>00868                                   ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-
-<a name="l00869"></a>00869                                    offset;
-<a name="l00870"></a>00870 
-<a name="l00871"></a>00871       }
-<a name="l00872"></a>00872     }
-<a name="l00873"></a>00873     <span class="comment">/* end AMO: to use the offset */</span>
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(arcs_pos[i]) ;
-<a name="l00877"></a>00877     cpl_free(arcs_pos) ;
-<a name="l00878"></a>00878     cpl_free(lines_pos) ;
-<a name="l00879"></a>00879 
-<a name="l00880"></a>00880     <span class="comment">/* Apply the fitting */</span>
-<a name="l00881"></a>00881     <span class="keywordflow">if</span> ((poly2d = sinfo_polynomial_fit_2d_create(grid, values_to_fit,
-<a name="l00882"></a>00882                     degree, NULL))==NULL) {
-<a name="l00883"></a>00883         cpl_msg_error(fctid, <span class="stringliteral">"cannot apply the 2d fit"</span>) ;
-<a name="l00884"></a>00884         cpl_bivector_delete(grid) ;
-<a name="l00885"></a>00885         cpl_vector_delete(values_to_fit) ;
-<a name="l00886"></a>00886         cpl_apertures_delete(*arcs) ;
-<a name="l00887"></a>00887         <span class="keywordflow">return</span> NULL ;
-<a name="l00888"></a>00888     }
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     <span class="comment">/* Free and return */</span>
-<a name="l00891"></a>00891     cpl_bivector_delete(grid) ;
-<a name="l00892"></a>00892     cpl_vector_delete(values_to_fit) ;
-<a name="l00893"></a>00893     <span class="keywordflow">return</span> poly2d ;
-<a name="l00894"></a>00894 }
-<a name="l00895"></a>00895 
-<a name="l00898"></a>00898 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00913"></a>00913 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00914"></a>00914 <span class="keyword">static</span> cpl_apertures * sinfo_distortion_detect_arcs(
-<a name="l00915"></a>00915         cpl_image   *   im,
-<a name="l00916"></a>00916         cpl_image   **  label_im,
-<a name="l00917"></a>00917         <span class="keywordtype">int</span>             arc_sat,
-<a name="l00918"></a>00918         <span class="keywordtype">int</span>             max_arc_width,
-<a name="l00919"></a>00919         <span class="keywordtype">int</span>             xmin,
-<a name="l00920"></a>00920         <span class="keywordtype">int</span>             ymin,
-<a name="l00921"></a>00921         <span class="keywordtype">int</span>             xmax,
-<a name="l00922"></a>00922         <span class="keywordtype">int</span>             ymax)
-<a name="l00923"></a>00923 {
-<a name="l00924"></a>00924     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_detect_arcs"</span> ;
-<a name="l00925"></a>00925     cpl_image       *   filt_im ;
-<a name="l00926"></a>00926     cpl_matrix      *   filter ;
-<a name="l00927"></a>00927     cpl_image       *   collapsed ;
-<a name="l00928"></a>00928     cpl_mask        *   bin_im ;
-<a name="l00929"></a>00929     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma ;
-<a name="l00930"></a>00930     <span class="keywordtype">int</span>                 min_arclen = 0 ;
-<a name="l00931"></a>00931     cpl_apertures   *   det ;
-<a name="l00932"></a>00932     cpl_size                 nobj ;
-<a name="l00933"></a>00933     <span class="keywordtype">int</span>                 ngoodpix ;
-<a name="l00934"></a>00934     <span class="keywordtype">int</span>                 ny ;
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936     ny = cpl_image_get_size_y(im) ;
-<a name="l00937"></a>00937 
-<a name="l00938"></a>00938     <span class="comment">/* Default values for output parameters */</span>
-<a name="l00939"></a>00939     *label_im = NULL ;
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span>
-<a name="l00942"></a>00942     median_val = cpl_image_get_median_dev(im, &sigma) ;
-<a name="l00943"></a>00943     fillval = median_val-sigma/2.0 ;
-<a name="l00944"></a>00944     <span class="keywordflow">if</span> (sinfo_distortion_fill_badzones(im, xmin, ymin, xmax, ymax,
-<a name="l00945"></a>00945                 fillval) == -1) {
-<a name="l00946"></a>00946         cpl_msg_error(fctid, <span class="stringliteral">"cannot fill bad zones"</span>) ;
-<a name="l00947"></a>00947         <span class="keywordflow">return</span> NULL ;
-<a name="l00948"></a>00948     }
-<a name="l00949"></a>00949 
-<a name="l00950"></a>00950     <span class="comment">/* Median vertical filter */</span>
-<a name="l00951"></a>00951     filter = cpl_matrix_new(3, 1) ;
-<a name="l00952"></a>00952     cpl_matrix_fill(filter, 1.0) ;
-<a name="l00953"></a>00953     <span class="comment">/* filt_im = cpl_image_filter_median(im, filter) ; */</span>
-<a name="l00954"></a>00954     filt_im = cpl_image_duplicate(im) ;
-<a name="l00955"></a>00955     cpl_matrix_delete(filter) ;
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957     <span class="comment">/* Subtract a low-pass */</span>
-<a name="l00958"></a>00958     <span class="keywordflow">if</span> (sinfo_distortion_sub_hor_lowpass(filt_im, ARC_WINDOWSIZE) == -1) {
-<a name="l00959"></a>00959         cpl_image_delete(filt_im) ;
-<a name="l00960"></a>00960         <span class="keywordflow">return</span> NULL ;
-<a name="l00961"></a>00961     }
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963     <span class="comment">/* Get relevant stats for thresholding */</span>
-<a name="l00964"></a>00964     median_val = cpl_image_get_median_dev(filt_im, &sigma) ;
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     <span class="comment">/* Correct median_val and sigma if necessary */</span>
-<a name="l00967"></a>00967     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN ;
-<a name="l00968"></a>00968     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX ;
-<a name="l00969"></a>00969 
-<a name="l00970"></a>00970     <span class="comment">/* Set the threshold */</span>
-<a name="l00971"></a>00971     threshold = median_val + sigma * ARC_THRESHFACT ;
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973     <span class="comment">/* Collapse the image */</span>
-<a name="l00974"></a>00974     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0) ;
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span>
-<a name="l00977"></a>00977     <span class="keywordflow">if</span> (sinfo_distortion_threshold1d(filt_im, median_val,
-<a name="l00978"></a>00978                                      collapsed, 0.0)==-1) {
-<a name="l00979"></a>00979         cpl_msg_error(fctid, <span class="stringliteral">"cannot threshold the filtered image"</span>) ;
-<a name="l00980"></a>00980         cpl_image_delete(filt_im) ;
-<a name="l00981"></a>00981         cpl_image_delete(collapsed) ;
-<a name="l00982"></a>00982         <span class="keywordflow">return</span> NULL ;
-<a name="l00983"></a>00983     }
-<a name="l00984"></a>00984     cpl_image_delete(collapsed) ;
-<a name="l00985"></a>00985 
-<a name="l00986"></a>00986     <span class="comment">/* Binarize the image */</span>
-<a name="l00987"></a>00987     bin_im = cpl_mask_threshold_image_create(filt_im, threshold,
-<a name="l00988"></a>00988             SINFO_DBL_MAX);
-<a name="l00989"></a>00989     cpl_image_delete(filt_im) ;
-<a name="l00990"></a>00990     <span class="keywordflow">if</span> (bin_im == NULL) {
-<a name="l00991"></a>00991         cpl_msg_error(fctid, <span class="stringliteral">"cannot binarise the image"</span>) ;
-<a name="l00992"></a>00992         <span class="keywordflow">return</span> NULL ;
-<a name="l00993"></a>00993     }
-<a name="l00994"></a>00994 
-<a name="l00995"></a>00995     <span class="comment">/* Test if there are enough good pixels */</span>
-<a name="l00996"></a>00996     ngoodpix = cpl_mask_count(bin_im) ;
-<a name="l00997"></a>00997     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {
-<a name="l00998"></a>00998         cpl_msg_error(fctid, <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix) ;
-<a name="l00999"></a>00999         cpl_mask_delete(bin_im) ;
-<a name="l01000"></a>01000         <span class="keywordflow">return</span> NULL ;
-<a name="l01001"></a>01001     }
-<a name="l01002"></a>01002 
-<a name="l01003"></a>01003     <span class="comment">/* Apply a morphological closing to clean the isolated pixels */</span>
-<a name="l01004"></a>01004     filter = cpl_matrix_new(3, 3) ;
-<a name="l01005"></a>01005     cpl_matrix_fill(filter, 1.0) ;
-<a name="l01006"></a>01006     cpl_mask_closing(bin_im, filter) ;
-<a name="l01007"></a>01007     cpl_matrix_delete(filter) ;
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009     <span class="comment">/* Labelize pixel map to a label image */</span>
-<a name="l01010"></a>01010     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj) ;
-<a name="l01011"></a>01011     cpl_mask_delete(bin_im) ;
-<a name="l01012"></a>01012 
-<a name="l01013"></a>01013     <span class="comment">/* Compute statistics on objects */</span>
-<a name="l01014"></a>01014     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {
-<a name="l01015"></a>01015         cpl_msg_error(fctid, <span class="stringliteral">"Cannot compute arcs stats"</span>) ;
-<a name="l01016"></a>01016         cpl_image_delete(*label_im) ;
-<a name="l01017"></a>01017         *label_im = NULL ;
-<a name="l01018"></a>01018         <span class="keywordflow">return</span> NULL ;
-<a name="l01019"></a>01019     }
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021     <span class="comment">/* Set min_arclen */</span>
-<a name="l01022"></a>01022     min_arclen = (int)(ny / ARC_MINARCLENFACT) ;
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024     <span class="comment">/* Purge non-relevant arcs */</span>
-<a name="l01025"></a>01025     <span class="keywordflow">if</span> (sinfo_distortion_purge_arcs(im, &det, label_im, min_arclen,
-<a name="l01026"></a>01026                 max_arc_width, arc_sat) == -1) {
-<a name="l01027"></a>01027         cpl_msg_error(fctid, <span class="stringliteral">"Cannot purge the arcs"</span>) ;
-<a name="l01028"></a>01028         cpl_image_delete(*label_im) ;
-<a name="l01029"></a>01029         *label_im = NULL ;
-<a name="l01030"></a>01030         cpl_apertures_delete(det) ;
-<a name="l01031"></a>01031         <span class="keywordflow">return</span> NULL ;
-<a name="l01032"></a>01032     }
-<a name="l01033"></a>01033     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {
-<a name="l01034"></a>01034         cpl_msg_error(fctid, <span class="stringliteral">"Not enough valid arcs (%"</span> 
-<a name="l01035"></a>01035                       CPL_SIZE_FORMAT <span class="stringliteral">" < %d)"</span>,
-<a name="l01036"></a>01036                 cpl_apertures_get_size(det), ARC_MINNBARCS) ;
-<a name="l01037"></a>01037         cpl_image_delete(*label_im) ;
-<a name="l01038"></a>01038         *label_im = NULL ;
-<a name="l01039"></a>01039         cpl_apertures_delete(det) ;
-<a name="l01040"></a>01040         <span class="keywordflow">return</span> NULL ;
-<a name="l01041"></a>01041     }
-<a name="l01042"></a>01042 
-<a name="l01043"></a>01043     <span class="comment">/* Return  */</span>
-<a name="l01044"></a>01044     <span class="keywordflow">return</span> det ;
-<a name="l01045"></a>01045 }
-<a name="l01046"></a>01046 
-<a name="l01047"></a>01047 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_fill_badzones(
-<a name="l01048"></a>01048         cpl_image   *   im,
-<a name="l01049"></a>01049         <span class="keywordtype">int</span>             xmin,
-<a name="l01050"></a>01050         <span class="keywordtype">int</span>             ymin,
-<a name="l01051"></a>01051         <span class="keywordtype">int</span>             xmax,
-<a name="l01052"></a>01052         <span class="keywordtype">int</span>             ymax,
-<a name="l01053"></a>01053         <span class="keywordtype">double</span>          fillval)
-<a name="l01054"></a>01054 {
-<a name="l01055"></a>01055     <span class="keywordtype">float</span>       *   pfi ;
-<a name="l01056"></a>01056     <span class="keywordtype">int</span>             nx, ny ;
-<a name="l01057"></a>01057     <span class="keywordtype">int</span>             i, j ;
-<a name="l01058"></a>01058 
-<a name="l01059"></a>01059     <span class="comment">/* Check entries */</span>
-<a name="l01060"></a>01060     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01061"></a>01061     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063     <span class="comment">/* Get the data */</span>
-<a name="l01064"></a>01064     pfi = cpl_image_get_data_float(im) ;
-<a name="l01065"></a>01065     nx = cpl_image_get_size_x(im) ;
-<a name="l01066"></a>01066     ny = cpl_image_get_size_y(im) ;
-<a name="l01067"></a>01067 
-<a name="l01068"></a>01068     <span class="comment">/* Fill the zone */</span>
-<a name="l01069"></a>01069     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l01070"></a>01070         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {
-<a name="l01071"></a>01071             <span class="keywordflow">if</span> ((i<xmin-1) || (i>xmax-1) || (j<ymin-1) || (j>ymax-1)) {
-<a name="l01072"></a>01072                 pfi[i+j*nx] = (float)fillval ;
-<a name="l01073"></a>01073             }
-<a name="l01074"></a>01074         }
-<a name="l01075"></a>01075     }
-<a name="l01076"></a>01076     <span class="keywordflow">return</span> 0 ;
-<a name="l01077"></a>01077 }
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_threshold1d(
-<a name="l01080"></a>01080         cpl_image   *   im,
-<a name="l01081"></a>01081         <span class="keywordtype">double</span>          threshold,
-<a name="l01082"></a>01082         cpl_image   *   im1d,
-<a name="l01083"></a>01083         <span class="keywordtype">double</span>          newval)
-<a name="l01084"></a>01084 {
-<a name="l01085"></a>01085     <span class="keywordtype">float</span>       *   pim ;
-<a name="l01086"></a>01086     <span class="keywordtype">float</span>       *   pim1d ;
-<a name="l01087"></a>01087     <span class="keywordtype">int</span>             nx, ny ;
-<a name="l01088"></a>01088     <span class="keywordtype">int</span>             i, j ;
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090     <span class="comment">/* Check entries */</span>
-<a name="l01091"></a>01091     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01092"></a>01092     <span class="keywordflow">if</span> (im1d == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01093"></a>01093     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;
-<a name="l01094"></a>01094     <span class="keywordflow">if</span> (cpl_image_get_type(im1d) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096     <span class="comment">/* Get access to the im / im1d data */</span>
-<a name="l01097"></a>01097     pim = cpl_image_get_data_float(im) ;
-<a name="l01098"></a>01098     pim1d = cpl_image_get_data_float(im1d) ;
-<a name="l01099"></a>01099     nx = cpl_image_get_size_x(im) ;
-<a name="l01100"></a>01100     ny = cpl_image_get_size_y(im) ;
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102     <span class="comment">/* Apply the thresholding */</span>
-<a name="l01103"></a>01103     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)
-<a name="l01104"></a>01104         <span class="keywordflow">if</span> (pim1d[i] < threshold) {
-<a name="l01105"></a>01105             <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) pim[i+j*nx] = (<span class="keywordtype">float</span>)newval ;
-<a name="l01106"></a>01106         }
-<a name="l01107"></a>01107 
-<a name="l01108"></a>01108     <span class="comment">/* Return */</span>
-<a name="l01109"></a>01109     <span class="keywordflow">return</span> 0 ;
-<a name="l01110"></a>01110 }
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_sub_hor_lowpass(
-<a name="l01113"></a>01113         cpl_image   *   im,
-<a name="l01114"></a>01114         <span class="keywordtype">int</span>             filt_size)
-<a name="l01115"></a>01115 {
-<a name="l01116"></a>01116     cpl_vector  *   linehi ;
-<a name="l01117"></a>01117     cpl_vector  *   linelo ;
-<a name="l01118"></a>01118     cpl_vector  *   avglinehi ;
-<a name="l01119"></a>01119     cpl_vector  *   avglinelo ;
-<a name="l01120"></a>01120     <span class="keywordtype">double</span>      *   pavglinehi ;
-<a name="l01121"></a>01121     <span class="keywordtype">float</span>       *   pim ;
-<a name="l01122"></a>01122     <span class="keywordtype">int</span>             lopos, hipos, nx, ny ;
-<a name="l01123"></a>01123     <span class="keywordtype">int</span>             i, j ;
-<a name="l01124"></a>01124 
-<a name="l01125"></a>01125     <span class="comment">/* Test entries */</span>
-<a name="l01126"></a>01126     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01127"></a>01127     <span class="keywordflow">if</span> (filt_size <= 0) <span class="keywordflow">return</span> -1 ;
-<a name="l01128"></a>01128 
-<a name="l01129"></a>01129     <span class="comment">/* Initialise */</span>
-<a name="l01130"></a>01130     nx = cpl_image_get_size_x(im) ;
-<a name="l01131"></a>01131     ny = cpl_image_get_size_y(im) ;
-<a name="l01132"></a>01132     lopos = (int)(ny/4) ;
-<a name="l01133"></a>01133     hipos = (int)(3*ny/4) ;
-<a name="l01134"></a>01134 
-<a name="l01135"></a>01135     <span class="comment">/* Get the vectors out of the image */</span>
-<a name="l01136"></a>01136     <span class="keywordflow">if</span> ((linehi = cpl_vector_new_from_image_row(im, hipos)) == NULL) {
-<a name="l01137"></a>01137         <span class="keywordflow">return</span> -1 ;
-<a name="l01138"></a>01138     }
-<a name="l01139"></a>01139     <span class="keywordflow">if</span> ((linelo = cpl_vector_new_from_image_row(im, lopos)) == NULL) {
-<a name="l01140"></a>01140         cpl_vector_delete(linehi) ;
-<a name="l01141"></a>01141         <span class="keywordflow">return</span> -1 ;
-<a name="l01142"></a>01142     }
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144     <span class="comment">/* Filter the vectors */</span>
-<a name="l01145"></a>01145     <span class="keywordflow">if</span> ((avglinehi = cpl_vector_filter_median_create(linehi,
-<a name="l01146"></a>01146                     filt_size)) == NULL) {
-<a name="l01147"></a>01147         cpl_vector_delete(linehi) ;
-<a name="l01148"></a>01148         cpl_vector_delete(linelo) ;
-<a name="l01149"></a>01149         <span class="keywordflow">return</span> -1 ;
-<a name="l01150"></a>01150     }
-<a name="l01151"></a>01151     cpl_vector_delete(linehi) ;
-<a name="l01152"></a>01152 
-<a name="l01153"></a>01153     <span class="keywordflow">if</span> ((avglinelo = cpl_vector_filter_median_create(linelo,
-<a name="l01154"></a>01154                     filt_size)) == NULL) {
-<a name="l01155"></a>01155         cpl_vector_delete(linelo) ;
-<a name="l01156"></a>01156         cpl_vector_delete(avglinehi) ;
-<a name="l01157"></a>01157         <span class="keywordflow">return</span> -1 ;
-<a name="l01158"></a>01158     }
-<a name="l01159"></a>01159     cpl_vector_delete(linelo) ;
-<a name="l01160"></a>01160 
-<a name="l01161"></a>01161     <span class="comment">/* Average the filtered vectors to get the low freq signal */</span>
-<a name="l01162"></a>01162     cpl_vector_add(avglinehi, avglinelo) ;
-<a name="l01163"></a>01163     cpl_vector_delete(avglinelo) ;
-<a name="l01164"></a>01164     cpl_vector_divide_scalar(avglinehi, 2.0) ;
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166     <span class="comment">/* Subtract the low frequency signal */</span>
-<a name="l01167"></a>01167     pavglinehi = cpl_vector_get_data(avglinehi) ;
-<a name="l01168"></a>01168     pim = cpl_image_get_data_float(im) ;
-<a name="l01169"></a>01169     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l01170"></a>01170         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {
-<a name="l01171"></a>01171             pim[i+j*nx] -= pavglinehi[i] ;
-<a name="l01172"></a>01172         }
-<a name="l01173"></a>01173     }
-<a name="l01174"></a>01174     cpl_vector_delete(avglinehi) ;
-<a name="l01175"></a>01175 
-<a name="l01176"></a>01176     <span class="keywordflow">return</span> 0 ;
-<a name="l01177"></a>01177 }
-<a name="l01178"></a>01178 
-<a name="l01179"></a>01179 
-<a name="l01180"></a>01180 
-<a name="l01181"></a>01181 
-<a name="l01182"></a>01182 
-<a name="l01183"></a>01183 
-<a name="l01184"></a>01184 
-<a name="l01185"></a>01185 
-<a name="l01186"></a>01186 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_purge_arcs(
-<a name="l01187"></a>01187         cpl_image       *   im,
-<a name="l01188"></a>01188         cpl_apertures   **  arcs,
-<a name="l01189"></a>01189         cpl_image       **  lab_im,
-<a name="l01190"></a>01190         <span class="keywordtype">int</span>                 min_arclen,
-<a name="l01191"></a>01191         <span class="keywordtype">int</span>                 max_arcwidth,
-<a name="l01192"></a>01192         <span class="keywordtype">double</span>              arc_sat)
-<a name="l01193"></a>01193 {
-<a name="l01194"></a>01194     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   fctid = <span class="stringliteral">"sinfo_distortion_purge_arcs"</span> ;
-<a name="l01195"></a>01195     <span class="keywordtype">int</span>             nb_arcs ;
-<a name="l01196"></a>01196     <span class="keywordtype">int</span>         *   selection ;
-<a name="l01197"></a>01197     <span class="keywordtype">int</span>             arclen, arcwidth, edge ;
-<a name="l01198"></a>01198     <span class="keywordtype">double</span>          mean ;
-<a name="l01199"></a>01199     <span class="keywordtype">int</span>         *   plabim ;
-<a name="l01200"></a>01200     cpl_mask    *   bin_im ;
-<a name="l01201"></a>01201     <span class="keywordtype">int</span>             nx, ny ;
-<a name="l01202"></a>01202     <span class="keywordtype">int</span>             i, j ;
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204     <span class="comment">/* Check entries */</span>
-<a name="l01205"></a>01205     <span class="keywordflow">if</span> (arcs == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01206"></a>01206     <span class="keywordflow">if</span> (*arcs == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01207"></a>01207     <span class="keywordflow">if</span> (*lab_im == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01208"></a>01208 
-<a name="l01209"></a>01209     <span class="comment">/* Get number of arcs */</span>
-<a name="l01210"></a>01210     nb_arcs = cpl_apertures_get_size(*arcs) ;
-<a name="l01211"></a>01211     nx = cpl_image_get_size_x(*lab_im) ;
-<a name="l01212"></a>01212     ny = cpl_image_get_size_y(*lab_im) ;
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214     <span class="comment">/* Allocate selection array */</span>
-<a name="l01215"></a>01215     selection = cpl_malloc(nb_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l01216"></a>01216     <span class="comment">/* Loop on the different arcs candidates */</span>
-<a name="l01217"></a>01217     <span class="comment">/* sinfo_msg("min_arclen=%d max_arcwidth=%d",min_arclen,max_arcwidth); */</span>
-<a name="l01218"></a>01218     <span class="keywordflow">for</span> (i=0 ; i<nb_arcs ; i++) {
-<a name="l01219"></a>01219         arclen = cpl_apertures_get_top(*arcs, i+1) -
-<a name="l01220"></a>01220             cpl_apertures_get_bottom(*arcs, i+1) + 1 ;
-<a name="l01221"></a>01221         arcwidth = cpl_apertures_get_right(*arcs, i+1) -
-<a name="l01222"></a>01222             cpl_apertures_get_left(*arcs, i+1) + 1 ;
-<a name="l01223"></a>01223         edge = cpl_apertures_get_left_y(*arcs, i+1) ;
-<a name="l01224"></a>01224         mean = cpl_apertures_get_mean(*arcs, i+1) ;
-<a name="l01225"></a>01225 
-<a name="l01226"></a>01226         <span class="comment">/* Test if the current object is a valid arc */</span>
-<a name="l01227"></a>01227 
-<a name="l01228"></a>01228         <span class="keywordflow">if</span> (
-<a name="l01229"></a>01229             (arclen>min_arclen) &&
-<a name="l01230"></a>01230         (arcwidth<max_arcwidth) &&
-<a name="l01231"></a>01231             (edge>0) &&
-<a name="l01232"></a>01232             (mean < arc_sat)) {
-<a name="l01233"></a>01233       <span class="comment">/*</span>
-<a name="l01234"></a>01234 <span class="comment">        sinfo_msg_warning("Take Pos=%5.4d len=%d width=%d edge=%d mean=%f ",</span>
-<a name="l01235"></a>01235 <span class="comment">    (cpl_apertures_get_right(*arcs, i+1)+cpl_apertures_get_left(*arcs, i+1))/2,</span>
-<a name="l01236"></a>01236 <span class="comment">     arclen,arcwidth,edge,mean);</span>
-<a name="l01237"></a>01237 <span class="comment">      */</span>
-<a name="l01238"></a>01238             selection[i] = 1 ;
-<a name="l01239"></a>01239         } <span class="keywordflow">else</span> {
-<a name="l01240"></a>01240       <span class="comment">/*</span>
-<a name="l01241"></a>01241 <span class="comment">    sinfo_msg_warning("Rej Pos=%5.4d len=%d width=%d edge=%d mean=%f i=%d",</span>
-<a name="l01242"></a>01242 <span class="comment">         (cpl_apertures_get_right(*arcs, i+1)+</span>
-<a name="l01243"></a>01243 <span class="comment">          cpl_apertures_get_left(*arcs, i+1))/2,arclen,arcwidth,edge,mean,i);</span>
-<a name="l01244"></a>01244 <span class="comment">      */</span>
-<a name="l01245"></a>01245             selection[i] = 0 ;
-<a name="l01246"></a>01246         }
-<a name="l01247"></a>01247     }
-<a name="l01248"></a>01248 
-<a name="l01249"></a>01249     <span class="comment">/* Update the labelised image by erasing non valid arcs */</span>
-<a name="l01250"></a>01250     <span class="keywordflow">for</span> (i=0 ; i<nb_arcs ; i++) {
-<a name="l01251"></a>01251         <span class="keywordflow">if</span> (selection[i] == 0) {
-<a name="l01252"></a>01252             plabim = cpl_image_get_data_int(*lab_im) ;
-<a name="l01253"></a>01253             <span class="keywordflow">for</span> (j=0 ; j<nx*ny ; j++) {
-<a name="l01254"></a>01254                 <span class="keywordflow">if</span> (plabim[j] == i+1) plabim[j] = 0 ;
-<a name="l01255"></a>01255             }
-<a name="l01256"></a>01256         }
-<a name="l01257"></a>01257     }
-<a name="l01258"></a>01258     cpl_free(selection) ;
-<a name="l01259"></a>01259 
-<a name="l01260"></a>01260     <span class="comment">/* Reset the labels to have consecutive ones */</span>
-<a name="l01261"></a>01261     bin_im = cpl_mask_threshold_image_create(*lab_im, 0.5, SINFO_DBL_MAX) ;
-<a name="l01262"></a>01262     cpl_image_delete(*lab_im) ;
-<a name="l01263"></a>01263     *lab_im = cpl_image_labelise_mask_create(bin_im, NULL) ;
-<a name="l01264"></a>01264     cpl_mask_delete(bin_im) ;
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266     <span class="comment">/* Purge the bad arcs */</span>
-<a name="l01267"></a>01267     cpl_apertures_delete(*arcs) ;
-<a name="l01268"></a>01268     *arcs = cpl_apertures_new_from_image(im, *lab_im) ;
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270     <span class="comment">/* Check if there are some valid arcs */</span>
-<a name="l01271"></a>01271     <span class="keywordflow">if</span> (cpl_apertures_get_size(*arcs) <= 0) {
-<a name="l01272"></a>01272         cpl_msg_error(fctid, <span class="stringliteral">"No valid arc found"</span>) ;
-<a name="l01273"></a>01273         <span class="keywordflow">return</span> -1 ;
-<a name="l01274"></a>01274     }
-<a name="l01275"></a>01275     <span class="comment">/* Return  */</span>
-<a name="l01276"></a>01276     <span class="keywordflow">return</span> 0 ;
-<a name="l01277"></a>01277 }
-<a name="l01278"></a>01278 
-<a name="l01279"></a>01279 <span class="keyword">static</span> cpl_bivector **
-<a name="l01280"></a>01280 sinfo_distortion_get_arc_positions(
-<a name="l01281"></a>01281         cpl_image       *   in,
-<a name="l01282"></a>01282         cpl_image       *   label_im,
-<a name="l01283"></a>01283         cpl_apertures   *   det,
-<a name="l01284"></a>01284         <span class="keywordtype">int</span>                 nb_samples,
-<a name="l01285"></a>01285         <span class="keywordtype">double</span>          **  lines_pos)
-<a name="l01286"></a>01286 {
-<a name="l01287"></a>01287     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_get_arc_positions"</span> ;
-<a name="l01288"></a>01288     <span class="keywordtype">int</span>                 n_arcs ;
-<a name="l01289"></a>01289     cpl_image       *   filt_img ;
-<a name="l01290"></a>01290     cpl_matrix      *   kernel ;
-<a name="l01291"></a>01291     cpl_bivector    **  pos ;
-<a name="l01292"></a>01292     <span class="keywordtype">double</span>          *   biv_x ;
-<a name="l01293"></a>01293     <span class="keywordtype">double</span>          *   biv_y ;
-<a name="l01294"></a>01294     <span class="keywordtype">double</span>              x_finepos ;
-<a name="l01295"></a>01295     <span class="keywordtype">int</span>             *   plabel_im ;
-<a name="l01296"></a>01296     <span class="keywordtype">int</span>             *   arcs_samples_y ;
-<a name="l01297"></a>01297     <span class="keywordtype">int</span>             *   computed ;
-<a name="l01298"></a>01298     <span class="keywordtype">double</span>              arclen ;
-<a name="l01299"></a>01299     <span class="keywordtype">int</span>                 use_this_arc ;
-<a name="l01300"></a>01300     <span class="keywordtype">int</span>                 obj ;
-<a name="l01301"></a>01301     <span class="keywordtype">int</span>                 nx, ny ;
-<a name="l01302"></a>01302     <span class="keywordtype">int</span>                 i, j, k ;
-<a name="l01303"></a>01303 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)</span>
-<a name="l01304"></a>01304 <span class="preprocessor"></span>    cpl_mask*          mask=NULL;
-<a name="l01305"></a>01305 <span class="preprocessor">#endif</span>
-<a name="l01306"></a>01306 <span class="preprocessor"></span>
-<a name="l01307"></a>01307     <span class="comment">/* Check entries */</span>
-<a name="l01308"></a>01308 
-<a name="l01309"></a>01309     <span class="comment">/* Initialise */</span>
-<a name="l01310"></a>01310     n_arcs = cpl_apertures_get_size(det) ;
-<a name="l01311"></a>01311     nx = cpl_image_get_size_x(label_im) ;
-<a name="l01312"></a>01312     ny = cpl_image_get_size_y(label_im) ;
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314     <span class="comment">/* Allocate positions (pos. of n_arcs*nb_samples pts on the arcs) */</span>
-<a name="l01315"></a>01315     pos = cpl_calloc(n_arcs, <span class="keyword">sizeof</span>(cpl_bivector*)) ;
-<a name="l01316"></a>01316     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) pos[i] = cpl_bivector_new(nb_samples) ;
-<a name="l01317"></a>01317 
-<a name="l01318"></a>01318     <span class="comment">/* Median filter on input image */</span>
-<a name="l01319"></a>01319     kernel = cpl_matrix_new(3, 3) ;
-<a name="l01320"></a>01320     cpl_matrix_fill(kernel, 1.0) ;
-<a name="l01321"></a>01321 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)</span>
-<a name="l01322"></a>01322 <span class="preprocessor"></span>    filt_img=cpl_image_duplicate(in);
-<a name="l01323"></a>01323     mask=cpl_mask_new(3,3);
-<a name="l01324"></a>01324     cpl_mask_not(mask);
-<a name="l01325"></a>01325     cpl_image_filter_mask(filt_img,in,mask,CPL_FILTER_MEDIAN,CPL_BORDER_FILTER);
-<a name="l01326"></a>01326     cpl_mask_delete(mask);
-<a name="l01327"></a>01327 <span class="preprocessor">#else</span>
-<a name="l01328"></a>01328 <span class="preprocessor"></span>    filt_img = cpl_image_filter_median(in, kernel) ;
-<a name="l01329"></a>01329 <span class="preprocessor">#endif</span>
-<a name="l01330"></a>01330 <span class="preprocessor"></span>    cpl_matrix_delete(kernel) ;
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332     <span class="comment">/* Measured Arcs coordinates along curvature */</span>
-<a name="l01333"></a>01333     arcs_samples_y = cpl_malloc(n_arcs * nb_samples * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l01334"></a>01334     computed = cpl_calloc(n_arcs*nb_samples, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l01335"></a>01335 
-<a name="l01336"></a>01336     <span class="comment">/* Find out the Y coordinates along the arcs  */</span>
-<a name="l01337"></a>01337     <span class="keywordflow">for</span> (j=0 ; j<n_arcs ; j++) {
-<a name="l01338"></a>01338         arclen = cpl_apertures_get_top(det,j+1) -
-<a name="l01339"></a>01339             cpl_apertures_get_bottom(det,j+1) + 1 ;
-<a name="l01340"></a>01340         <span class="keywordflow">for</span> (i=0 ; i<nb_samples ; i++) {
-<a name="l01341"></a>01341             arcs_samples_y[i+j*nb_samples] =
-<a name="l01342"></a>01342                 (int)(cpl_apertures_get_bottom(det, j+1) +
-<a name="l01343"></a>01343                       (arclen * (i + 0.5)) / (<span class="keywordtype">double</span>)nb_samples) ;
-<a name="l01344"></a>01344         }
-<a name="l01345"></a>01345     }
-<a name="l01346"></a>01346 
-<a name="l01347"></a>01347     <span class="comment">/* Find out the X coord. at nb_samples Y positions on all arcs */</span>
-<a name="l01348"></a>01348     plabel_im = cpl_image_get_data_int(label_im) ;
-<a name="l01349"></a>01349     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {
-<a name="l01350"></a>01350         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {
-<a name="l01351"></a>01351             <span class="comment">/* use_this_arc is set to 1 if we are on the arc at a y */</span>
-<a name="l01352"></a>01352             <span class="comment">/* coordinate where the x coord should be found */</span>
-<a name="l01353"></a>01353             obj = plabel_im[i + j * nx] ;
-<a name="l01354"></a>01354             <span class="comment">/* Handle background */</span>
-<a name="l01355"></a>01355             <span class="keywordflow">if</span> (obj==0) continue ;
-<a name="l01356"></a>01356             <span class="comment">/* Decrease by one to index the array from 0 */</span>
-<a name="l01357"></a>01357             <span class="keywordflow">else</span> obj-- ;
-<a name="l01358"></a>01358 
-<a name="l01359"></a>01359             use_this_arc = 0 ;
-<a name="l01360"></a>01360             <span class="keywordflow">for</span> (k=0 ; k<nb_samples ; k++) {
-<a name="l01361"></a>01361                 <span class="keywordflow">if</span> (arcs_samples_y[k+obj*nb_samples] == j) {
-<a name="l01362"></a>01362                     use_this_arc = 1 ;
-<a name="l01363"></a>01363                     break ;
-<a name="l01364"></a>01364                 }
-<a name="l01365"></a>01365             }
-<a name="l01366"></a>01366             <span class="keywordflow">if</span> ((use_this_arc)  && (computed[k+obj*nb_samples] == 0)) {
-<a name="l01367"></a>01367                 <span class="comment">/* Find x coordinate of obj at the Y coord. */</span>
-<a name="l01368"></a>01368                 <span class="keywordflow">if</span> ((x_finepos = sinfo_distortion_fine_pos(filt_img,
-<a name="l01369"></a>01369                                 label_im, i, j)) < 0.0) {
-<a name="l01370"></a>01370                     cpl_msg_error(fctid, <span class="stringliteral">"cannot find fine arc position"</span>) ;
-<a name="l01371"></a>01371                     cpl_image_delete(filt_img) ;
-<a name="l01372"></a>01372                     cpl_free(arcs_samples_y);
-<a name="l01373"></a>01373                     cpl_free(computed) ;
-<a name="l01374"></a>01374                     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(pos[i]);
-<a name="l01375"></a>01375                     cpl_free(pos) ;
-<a name="l01376"></a>01376                     <span class="keywordflow">return</span> NULL ;
-<a name="l01377"></a>01377                 } <span class="keywordflow">else</span> {
-<a name="l01378"></a>01378                     biv_x = cpl_bivector_get_x_data(pos[obj]) ;
-<a name="l01379"></a>01379                     biv_y = cpl_bivector_get_y_data(pos[obj]) ;
-<a name="l01380"></a>01380                     biv_x[k] = x_finepos ;
-<a name="l01381"></a>01381                     biv_y[k] = j ;
-<a name="l01382"></a>01382                     (*lines_pos)[obj] = cpl_apertures_get_centroid_x(det,obj+1);
-<a name="l01383"></a>01383                     computed[k+obj*nb_samples] = 1 ;
-<a name="l01384"></a>01384                 }
-<a name="l01385"></a>01385             }
-<a name="l01386"></a>01386         }
-<a name="l01387"></a>01387     }
-<a name="l01388"></a>01388 
-<a name="l01389"></a>01389     <span class="comment">/* Free and return */</span>
-<a name="l01390"></a>01390     cpl_image_delete(filt_img) ;
-<a name="l01391"></a>01391     cpl_free(arcs_samples_y) ;
-<a name="l01392"></a>01392     cpl_free(computed) ;
-<a name="l01393"></a>01393     <span class="keywordflow">return</span> pos ;
-<a name="l01394"></a>01394 }
-<a name="l01395"></a>01395 
-<a name="l01396"></a>01396 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l01397"></a>01397 sinfo_distortion_fine_pos(
-<a name="l01398"></a>01398         cpl_image   *   im,
-<a name="l01399"></a>01399         cpl_image   *   label_im,
-<a name="l01400"></a>01400         <span class="keywordtype">int</span>             x,
-<a name="l01401"></a>01401         <span class="keywordtype">int</span>             y)
-<a name="l01402"></a>01402 {
-<a name="l01403"></a>01403     <span class="keywordtype">float</span>   *   pim ;
-<a name="l01404"></a>01404     <span class="keywordtype">int</span>     *   plabel_im ;
-<a name="l01405"></a>01405     <span class="keywordtype">int</span>         objnum ;
-<a name="l01406"></a>01406     <span class="keywordtype">int</span>         curr_obj ;
-<a name="l01407"></a>01407     <span class="keywordtype">int</span>         start_pos ;
-<a name="l01408"></a>01408     <span class="keywordtype">double</span>      grav_c ;
-<a name="l01409"></a>01409     <span class="keywordtype">double</span>      sum ;
-<a name="l01410"></a>01410     <span class="keywordtype">double</span>      max ;
-<a name="l01411"></a>01411     <span class="keywordtype">double</span>      val ;
-<a name="l01412"></a>01412     <span class="keywordtype">int</span>         maxpos ;
-<a name="l01413"></a>01413     <span class="keywordtype">int</span>         im_extrem ;
-<a name="l01414"></a>01414     <span class="keywordtype">double</span>      arc_pos ;
-<a name="l01415"></a>01415     <span class="keywordtype">int</span>         nx ;
-<a name="l01416"></a>01416 
-<a name="l01417"></a>01417     <span class="comment">/* Initialize */</span>
-<a name="l01418"></a>01418     nx = cpl_image_get_size_x(im) ;
-<a name="l01419"></a>01419     grav_c = 0.0 ;
-<a name="l01420"></a>01420     sum    = 0.0 ;
-<a name="l01421"></a>01421     start_pos = x ;
-<a name="l01422"></a>01422     maxpos = start_pos ;
-<a name="l01423"></a>01423     pim = cpl_image_get_data_float(im) ;
-<a name="l01424"></a>01424     max    = (double)pim[start_pos + y * nx] ;
-<a name="l01425"></a>01425     plabel_im = cpl_image_get_data_int(label_im) ;
-<a name="l01426"></a>01426     objnum = plabel_im[start_pos + y * nx] ;
-<a name="l01427"></a>01427     im_extrem = nx ;
-<a name="l01428"></a>01428 
-<a name="l01429"></a>01429     <span class="comment">/* While we stay in the same object... */</span>
-<a name="l01430"></a>01430     <span class="keywordflow">do</span> {
-<a name="l01431"></a>01431         val = (double)pim[start_pos + y * nx] ;
-<a name="l01432"></a>01432         <span class="keywordflow">if</span> (start_pos == 0) grav_c = 0.0 ;
-<a name="l01433"></a>01433         <span class="keywordflow">else</span> grav_c += start_pos * val ;
-<a name="l01434"></a>01434         sum += val ;
-<a name="l01435"></a>01435         <span class="keywordflow">if</span> (val > max) {
-<a name="l01436"></a>01436             max = val ;
-<a name="l01437"></a>01437             maxpos = start_pos ;
-<a name="l01438"></a>01438         }
-<a name="l01439"></a>01439 
-<a name="l01440"></a>01440         <span class="comment">/* Next point */</span>
-<a name="l01441"></a>01441         start_pos++ ;
-<a name="l01442"></a>01442 
-<a name="l01443"></a>01443         curr_obj = plabel_im[start_pos + y * nx] ;
-<a name="l01444"></a>01444     } <span class="keywordflow">while</span> (curr_obj == objnum) ;
-<a name="l01445"></a>01445 
-<a name="l01446"></a>01446     <span class="comment">/* Returned position is the gravity center or the max in bad cases */</span>
-<a name="l01447"></a>01447     <span class="keywordflow">if</span> ((fabs(grav_c) < 1.0e-40) || (fabs(sum) < 1.0e-40)) {
-<a name="l01448"></a>01448         arc_pos = maxpos ;
-<a name="l01449"></a>01449     } <span class="keywordflow">else</span> {
-<a name="l01450"></a>01450         arc_pos = grav_c / sum ;
-<a name="l01451"></a>01451         <span class="keywordflow">if</span> (fabs(arc_pos) >= start_pos) arc_pos = maxpos ;
-<a name="l01452"></a>01452     }
-<a name="l01453"></a>01453 
-<a name="l01454"></a>01454     <span class="comment">/* Return */</span>
-<a name="l01455"></a>01455     <span class="keywordflow">return</span> arc_pos ;
-<a name="l01456"></a>01456 }
-<a name="l01457"></a>01457 
-<a name="l01458"></a>01458 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01464"></a>01464 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01465"></a>01465 <span class="preprocessor">#define IS_NB_TESTPOINTS    8</span>
-<a name="l01466"></a>01466 <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_SLOPE        0.01</span>
-<a name="l01467"></a>01467 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_SLOPE_DIF    0.075</span>
-<a name="l01468"></a>01468 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_FIT_EDGE_DIF 0.05</span>
-<a name="l01469"></a>01469 <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_RAMP         10.0</span>
-<a name="l01470"></a>01470 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR        13.0</span>
-<a name="l01471"></a>01471 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR_DIF    8.0</span>
-<a name="l01472"></a>01472 <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_INTER_DIF    20.0</span>
-<a name="l01473"></a>01473 <span class="preprocessor"></span><span class="preprocessor">#define IS_SKIPZONE         2.5</span>
-<a name="l01474"></a>01474 <span class="preprocessor"></span><span class="preprocessor">#define SQR(x) ((x)*(x))</span>
-<a name="l01475"></a>01475 <span class="preprocessor"></span><span class="keyword">static</span> cpl_image * sinfo_distortion_remove_ramp(<span class="keyword">const</span> cpl_image * in)
-<a name="l01476"></a>01476 {
-<a name="l01477"></a>01477     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_remove_ramp"</span> ;
-<a name="l01478"></a>01478     <span class="keywordtype">int</span>                 ramp_present ;
-<a name="l01479"></a>01479     <span class="keywordtype">int</span>                 nx, ny ;
-<a name="l01480"></a>01480     <span class="keywordtype">int</span>                 y, yhi, ylo;
-<a name="l01481"></a>01481     cpl_vector      *   tmp_vector ;
-<a name="l01482"></a>01482     cpl_bivector    *   testpointlo ;
-<a name="l01483"></a>01483     <span class="keywordtype">double</span>          *   testpointlo_x ;
-<a name="l01484"></a>01484     <span class="keywordtype">double</span>          *   testpointlo_y ;
-<a name="l01485"></a>01485     cpl_bivector    *   testpointhi ;
-<a name="l01486"></a>01486     <span class="keywordtype">double</span>          *   testpointhi_x ;
-<a name="l01487"></a>01487     <span class="keywordtype">double</span>          *   testpointhi_y ;
-<a name="l01488"></a>01488     <span class="keywordtype">int</span>                 spacing;
-<a name="l01489"></a>01489     <span class="keywordtype">double</span>              rampdif, fitslope;
-<a name="l01490"></a>01490     <span class="keywordtype">double</span>          *   pol_coefhi,
-<a name="l01491"></a>01491                     *   pol_coeflo ;
-<a name="l01492"></a>01492     cpl_vector      *   median ;
-<a name="l01493"></a>01493     <span class="keywordtype">double</span>          *   median_data ;
-<a name="l01494"></a>01494     <span class="keywordtype">double</span>              medianerrlo, medianerrhi;
-<a name="l01495"></a>01495     <span class="keywordtype">double</span>              slope ;
-<a name="l01496"></a>01496     cpl_image       *   out ;
-<a name="l01497"></a>01497     <span class="keywordtype">float</span>           *   pout ;
-<a name="l01498"></a>01498     <span class="keywordtype">float</span>               val ;
-<a name="l01499"></a>01499     <span class="keywordtype">int</span>                 i, j ;
-<a name="l01500"></a>01500 
-<a name="l01501"></a>01501     <span class="comment">/* Initialise */</span>
-<a name="l01502"></a>01502     nx = cpl_image_get_size_x(in) ;
-<a name="l01503"></a>01503     ny = cpl_image_get_size_y(in) ;
-<a name="l01504"></a>01504 
-<a name="l01505"></a>01505     <span class="comment">/* Check entries */</span>
-<a name="l01506"></a>01506     <span class="keywordflow">if</span> (in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l01507"></a>01507 
-<a name="l01508"></a>01508     <span class="keywordflow">if</span> (ny<IS_SKIPZONE*IS_NB_TESTPOINTS){
-<a name="l01509"></a>01509         cpl_msg_error(fctid, <span class="stringliteral">"image has %d lines, min=%d "</span>,
-<a name="l01510"></a>01510                 ny, (<span class="keywordtype">int</span>)(IS_SKIPZONE*IS_NB_TESTPOINTS*2));
-<a name="l01511"></a>01511         <span class="keywordflow">return</span> NULL ;
-<a name="l01512"></a>01512     }
-<a name="l01513"></a>01513 
-<a name="l01514"></a>01514     slope=0.0 ;
-<a name="l01515"></a>01515     spacing= ny / (IS_SKIPZONE*IS_NB_TESTPOINTS) ;
-<a name="l01516"></a>01516     yhi = (int)(ny/2) ;
-<a name="l01517"></a>01517     ylo = yhi - 1 ;
-<a name="l01518"></a>01518     <span class="comment">/* Fill the vectors */</span>
-<a name="l01519"></a>01519     testpointhi = cpl_bivector_new(IS_NB_TESTPOINTS) ;
-<a name="l01520"></a>01520     testpointhi_x = cpl_bivector_get_x_data(testpointhi) ;
-<a name="l01521"></a>01521     testpointhi_y = cpl_bivector_get_y_data(testpointhi) ;
-<a name="l01522"></a>01522     testpointlo = cpl_bivector_new(IS_NB_TESTPOINTS) ;
-<a name="l01523"></a>01523     testpointlo_x = cpl_bivector_get_x_data(testpointlo) ;
-<a name="l01524"></a>01524     testpointlo_y = cpl_bivector_get_y_data(testpointlo) ;
-<a name="l01525"></a>01525     <span class="keywordflow">for</span> (i=0 ; i<IS_NB_TESTPOINTS ; i++) {
-<a name="l01526"></a>01526         y = yhi + i * spacing;
-<a name="l01527"></a>01527         tmp_vector = cpl_vector_new_from_image_row(in, y+1) ;
-<a name="l01528"></a>01528         testpointhi_x[i] = y - ny / 2;
-<a name="l01529"></a>01529         testpointhi_y[i] = cpl_vector_get_median_const(tmp_vector) ;
-<a name="l01530"></a>01530         cpl_vector_delete(tmp_vector) ;
-<a name="l01531"></a>01531         y = ylo - i * spacing;
-<a name="l01532"></a>01532         tmp_vector = cpl_vector_new_from_image_row(in, y+1) ;
-<a name="l01533"></a>01533         testpointlo_x[IS_NB_TESTPOINTS-i-1] = y ;
-<a name="l01534"></a>01534         testpointlo_y[IS_NB_TESTPOINTS-i-1]=
-<a name="l01535"></a>01535       cpl_vector_get_median_const(tmp_vector);
-<a name="l01536"></a>01536         cpl_vector_delete(tmp_vector) ;
-<a name="l01537"></a>01537     }
-<a name="l01538"></a>01538 
-<a name="l01539"></a>01539     <span class="comment">/* Apply the fit */</span>
-<a name="l01540"></a>01540     pol_coefhi = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointhi_x,
-<a name="l01541"></a>01541             testpointhi_y, IS_NB_TESTPOINTS) ;
-<a name="l01542"></a>01542     pol_coeflo = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointlo_x,
-<a name="l01543"></a>01543             testpointlo_y, IS_NB_TESTPOINTS) ;
-<a name="l01544"></a>01544 
-<a name="l01545"></a>01545     <span class="comment">/* Compute the errors */</span>
-<a name="l01546"></a>01546     median = cpl_vector_new(IS_NB_TESTPOINTS) ;
-<a name="l01547"></a>01547     median_data = cpl_vector_get_data(median) ;
-<a name="l01548"></a>01548     <span class="keywordflow">for</span> (i=0 ; i<IS_NB_TESTPOINTS ; i++) {
-<a name="l01549"></a>01549         median_data[i]=SQR(testpointhi_y[i]
-<a name="l01550"></a>01550                 - pol_coefhi[0] - pol_coefhi[1] * testpointhi_x[i]);
-<a name="l01551"></a>01551     }
-<a name="l01552"></a>01552     medianerrhi = cpl_vector_get_median_const(median) ;
-<a name="l01553"></a>01553     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {
-<a name="l01554"></a>01554         median_data[i]=SQR(testpointlo_y[i]
-<a name="l01555"></a>01555                 - pol_coeflo[0] - pol_coeflo[1] * testpointlo_x[i]);
-<a name="l01556"></a>01556     }
-<a name="l01557"></a>01557     medianerrlo = cpl_vector_get_median_const(median) ;
-<a name="l01558"></a>01558     cpl_vector_delete(median) ;
-<a name="l01559"></a>01559     rampdif = testpointlo_y[IS_NB_TESTPOINTS-1] - testpointhi_y[0];
-<a name="l01560"></a>01560     slope = rampdif / (ny/2.0) ;
-<a name="l01561"></a>01561     fitslope = (pol_coefhi[1] + pol_coeflo[1]) / 2.0 ;
-<a name="l01562"></a>01562 
-<a name="l01563"></a>01563     cpl_bivector_delete(testpointlo);
-<a name="l01564"></a>01564     cpl_bivector_delete(testpointhi);
-<a name="l01565"></a>01565 
-<a name="l01566"></a>01566     <span class="comment">/* Decide if there is a ramp or not  */</span>
-<a name="l01567"></a>01567     <span class="keywordflow">if</span> (fabs(rampdif)<IS_MIN_RAMP ||
-<a name="l01568"></a>01568             fabs(pol_coefhi[1]) < IS_MIN_SLOPE ||
-<a name="l01569"></a>01569             fabs(pol_coeflo[1]) < IS_MIN_SLOPE ||
-<a name="l01570"></a>01570             pol_coefhi[1]/pol_coeflo[1]<0.5 ||
-<a name="l01571"></a>01571             pol_coefhi[1]/pol_coeflo[1]>2.0 ||
-<a name="l01572"></a>01572             fabs(pol_coefhi[1]-pol_coeflo[1])>IS_MAX_SLOPE_DIF ||
-<a name="l01573"></a>01573             fabs(pol_coefhi[0]-pol_coeflo[0]) > IS_MAX_INTER_DIF ||
-<a name="l01574"></a>01574             medianerrlo> IS_MAX_MNERR ||
-<a name="l01575"></a>01575             medianerrhi> IS_MAX_MNERR ||
-<a name="l01576"></a>01576             fabs(medianerrlo-medianerrhi) >IS_MAX_MNERR_DIF ||
-<a name="l01577"></a>01577             fabs(slope-fitslope) > IS_MAX_FIT_EDGE_DIF ||
-<a name="l01578"></a>01578             slope/fitslope<0.5 ||
-<a name="l01579"></a>01579             slope/fitslope>2.0) ramp_present = 0 ;
-<a name="l01580"></a>01580     <span class="keywordflow">else</span> ramp_present = 1 ;
-<a name="l01581"></a>01581 
-<a name="l01582"></a>01582     cpl_free(pol_coeflo) ;
-<a name="l01583"></a>01583     cpl_free(pol_coefhi) ;
-<a name="l01584"></a>01584 
-<a name="l01585"></a>01585     <span class="comment">/* Correct the ramp if it is there */</span>
-<a name="l01586"></a>01586     out = cpl_image_duplicate(in) ;
-<a name="l01587"></a>01587     pout = cpl_image_get_data_float(out) ;
-<a name="l01588"></a>01588     <span class="keywordflow">if</span> (ramp_present == 1) {
-<a name="l01589"></a>01589         <span class="keywordflow">for</span> (j=0 ; j<ny/2 ; j++) {
-<a name="l01590"></a>01590             val = slope * (j-ny/2) ;
-<a name="l01591"></a>01591             <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)
-<a name="l01592"></a>01592                 pout[i+j*nx] -= val ;
-<a name="l01593"></a>01593         }
-<a name="l01594"></a>01594         <span class="keywordflow">for</span> (j=ny/2 ; j<ny ; j++) {
-<a name="l01595"></a>01595             val = slope * (j-ny) ;
-<a name="l01596"></a>01596             <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)
-<a name="l01597"></a>01597                 pout[i+j*nx] -= val ;
-<a name="l01598"></a>01598         }
-<a name="l01599"></a>01599 
-<a name="l01600"></a>01600     }
-<a name="l01601"></a>01601 
-<a name="l01602"></a>01602     <span class="keywordflow">return</span> out ;
-<a name="l01603"></a>01603 }
-<a name="l01604"></a>01604 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_distortion.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_distortion.c,v 1.37 2012/03/05 16:34:06 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/05 16:34:06 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.37 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_distortion.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "irplib_flat.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">//#include "sinfo_irplib_cpl_wrp.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define ARC_NBSAMPLES       20</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_THRESHFACT      (1.0/3.0)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINGOODPIX      100</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINARCLENFACT   1.19   </span><span class="comment">/* 1.1-2 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_MINNBARCS       32     </span><span class="comment">/* 4-32 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_RANGE_FACT      3.0</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define ARC_WINDOWSIZE      10  </span><span class="comment">/* 32 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#define TRESH_MEDIAN_MIN    0.0</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define TRESH_SIGMA_MAX     200.0</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                                Functions prototypes</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> cpl_apertures *</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_distortion_detect_arcs_new(cpl_image* ,cpl_image   **,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                  <span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">double</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">int</span>,<span class="keywordtype">double</span>,<span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> cpl_apertures * sinfo_distortion_detect_arcs(cpl_image *,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> sinfo_distortion_fill_badzones(cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_distortion_threshold1d(cpl_image *, <span class="keywordtype">double</span>, cpl_image *, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_distortion_purge_arcs(cpl_image *, cpl_apertures **,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                             cpl_image **, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>) ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> cpl_bivector **</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> sinfo_distortion_get_arc_positions(cpl_image *,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                    cpl_image *,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                    cpl_apertures *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> **) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_distortion_fine_pos(cpl_image *, cpl_image *, <span class="keywordtype">int</span>, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_sub_hor_lowpass(cpl_image *, <span class="keywordtype">int</span>) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">static</span> cpl_image * sinfo_distortion_remove_ramp(<span class="keyword">const</span> cpl_image *) ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_distortion_smooth(cpl_image* inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r,<span class="keyword">const</span> <span class="keywordtype">int</span> d);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> sinfo_distortion_smooth(cpl_image* inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r,<span class="keyword">const</span> <span class="keywordtype">int</span> d)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">float</span> sum;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">int</span> min=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cknull(inp,<span class="stringliteral">"Null input image!"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   check_nomsg(pi=cpl_image_get_data_float(inp));</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   check_nomsg(po=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   min = r/2;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordflow">switch</span> (d) {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       <span class="keywordflow">for</span>(i=min;i<sx-min;i++) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     sum=0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">for</span>(z=i-min;z<i+min+1;z++) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       sum+=pi[z+j*sx];</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         po[i+j*sx]=sum/r;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       <span class="keywordflow">for</span>(j=min;j<sy-min;j++) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     sum=0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">for</span>(z=j-min;z<j+min+1;z++) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       sum+=pi[i+z*sx];</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         po[i+j*sx]=sum;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   check_nomsg(cpl_image_delete(inp));</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>  cleanup:</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> cpl_image *</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> sinfo_distortion_image_restore(<span class="keyword">const</span> cpl_image* inp,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> r,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> d,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> ks_method,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keyword">const</span> <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="keywordtype">int</span> min=0;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_vector* vec=NULL;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordtype">double</span>* pv=NULL;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="keywordtype">double</span> median=0;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   cknull(inp,<span class="stringliteral">"Null input image!"</span>);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   check_nomsg(pi=cpl_image_get_data_float_const(inp));</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   check_nomsg(po=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   min = r/2;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   check_nomsg(vec=cpl_vector_new(r));</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   check_nomsg(pv=cpl_vector_get_data(vec));</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">switch</span> (d) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keywordflow">for</span>(i=min;i<sx-min;i++) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     k=0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">for</span>(z=i-min;z<i+min+1;z++) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       pv[k]=(double)pi[z+j*sx];</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>           k++;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         cknull_nomsg(vec=sinfo_vector_clip(vec,kappa,n,ks_method));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         check_nomsg(mean=cpl_vector_get_mean(vec));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         check_nomsg(median=cpl_vector_get_mean(vec));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         po[i+j*sx]+=(mean-median);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       <span class="keywordflow">for</span>(j=min;j<sy-min;j++) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         k=0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">for</span>(z=j-min;z<j+min+1;z++) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       pv[k]=(double)pi[i+z*sx];</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>           k++;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         cknull_nomsg(vec=sinfo_vector_clip(vec,kappa,n,ks_method));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         check_nomsg(mean=cpl_vector_get_mean(vec));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         check_nomsg(median=cpl_vector_get_mean(vec));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         po[i+j*sx]+=(mean-median);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   check_nomsg(cpl_image_delete((cpl_image*)inp));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>  cleanup:</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> cpl_polynomial * sinfo_distortion_estimate_new(</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         <span class="keyword">const</span> cpl_image *   org,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         <span class="keywordtype">int</span>                 xmin,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         <span class="keywordtype">int</span>                 ymin,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         <span class="keywordtype">int</span>                 xmax,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <span class="keywordtype">int</span>                 ymax,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         <span class="keywordtype">int</span>                 auto_ramp_sub,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <span class="keywordtype">int</span>                 arc_sat,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordtype">int</span>                 max_arc_width,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="keywordtype">double</span>              kappa,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         <span class="keywordtype">double</span>              arcs_min_arclen_factor,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <span class="keywordtype">int</span>                 arcs_window_size,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         <span class="keywordtype">int</span>                 smooth_rad,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         <span class="keywordtype">int</span>                 degree,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         <span class="keywordtype">double</span>              offset,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         cpl_apertures   **  arcs)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     cpl_image       *   local_im ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     cpl_image       *   label_image ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">double</span>              rightmost, leftmost ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     cpl_bivector    **  arcs_pos ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordtype">double</span>          *   parc_posx ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordtype">double</span>          *   parc_posy ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordtype">double</span>          *   lines_pos ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     cpl_bivector    *   grid ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordtype">double</span>          *   pgridx ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordtype">double</span>          *   pgridy ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cpl_vector      *   values_to_fit ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordtype">double</span>          *   pvalues_to_fit ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="keywordtype">int</span>                 min_arc_range ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordtype">int</span>                 n_calib ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordtype">int</span>                 n_arcs ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     cpl_polynomial  *   poly2d ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordtype">int</span>                 nx ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="comment">/* AMO added to use offset */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     cpl_vector    *     lines_pos_tmp ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     cpl_bivector    *   grid_tmp ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     cpl_vector* grid_tot=0;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordtype">double</span>* pgrid_tmp_x=NULL;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="keywordtype">double</span>* pgrid_tmp_y=NULL;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="keywordtype">double</span>* pgrid_tot=NULL;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordtype">double</span>* plines_pos_tmp=NULL;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">if</span> (org == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordflow">if</span> (kappa < 0.0) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     n_calib = ARC_NBSAMPLES ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     nx = cpl_image_get_size_x(org) ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">if</span> (auto_ramp_sub) {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         local_im = sinfo_distortion_remove_ramp(org) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="comment">/* Local copy of input image */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         local_im = cpl_image_duplicate(org) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keywordflow">if</span> (local_im == NULL) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot clean the image"</span>) ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">if</span>(smooth_rad > 1) {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       local_im=sinfo_distortion_smooth(local_im,smooth_rad,1);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       <span class="comment">//cpl_image_save(local_im,"out_local_im.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       <span class="comment">//               NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       <span class="comment">//local_im=sinfo_distortion_image_restore(local_im,smooth_rad,1,2,0,2);</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       <span class="comment">//cpl_image_save(local_im,"out_local_im_post.fits",</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       <span class="comment">//               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     }</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="comment">/* Detect the arcs in the input image */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Detect arcs"</span>) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordflow">if</span> ((*arcs = sinfo_distortion_detect_arcs_new(local_im,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                     &label_image,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                     arc_sat, max_arc_width, kappa,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                     xmin, ymin, xmax, ymax,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                     arcs_min_arclen_factor,arcs_window_size)) == NULL) {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot detect the arcs"</span>) ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     n_arcs = cpl_apertures_get_size(*arcs) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"%d detected arcs"</span>, n_arcs) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1) ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">for</span> (i=1 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>             leftmost = cpl_apertures_get_pos_x(*arcs, i+1) ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             rightmost = cpl_apertures_get_pos_x(*arcs, i+1) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     min_arc_range = (int)(nx / ARC_RANGE_FACT) ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                 rightmost, leftmost, min_arc_range) ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     cpl_msg_info(cpl_func, <span class="stringliteral">"Create deformation grid"</span>) ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     lines_pos = cpl_malloc(n_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordflow">if</span> ((arcs_pos = sinfo_distortion_get_arc_positions(local_im,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                     label_image, *arcs, n_calib, &lines_pos))==NULL){</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot get arcs positions"</span>) ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         cpl_free(lines_pos) ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="comment">/* Prepare the fitting */</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     lines_pos_tmp=cpl_vector_new(n_arcs);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     sinfo_msg(<span class="stringliteral">"Fit the 2d polynomial"</span>) ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     grid = cpl_bivector_new(n_arcs * n_calib) ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     pgridx = cpl_bivector_get_x_data(grid) ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     pgridy = cpl_bivector_get_y_data(grid) ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     values_to_fit = cpl_vector_new(n_arcs * n_calib) ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     pvalues_to_fit = cpl_vector_get_data(values_to_fit) ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         parc_posx = cpl_bivector_get_x_data(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         parc_posy = cpl_bivector_get_y_data(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         <span class="keywordflow">for</span> (j=0 ; j<n_calib ; j++) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             plines_pos_tmp[i]=lines_pos[i] ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             pgridx[j+i*n_calib] = lines_pos[i] ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>             pgridy[j+i*n_calib] = parc_posy[j] ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             pvalues_to_fit[j+i*n_calib] = parc_posx[j] ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     <span class="comment">/* AMO new to use offset */</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     n_lines= n_arcs/32.0;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="keywordflow">if</span>(n_lines < 1) {</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       n_lines=1;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     cpl_vector_sort(lines_pos_tmp,1);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     grid_tmp=cpl_bivector_duplicate(grid);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     grid_tot=cpl_vector_new(n_calib);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     pgrid_tmp_x = cpl_bivector_get_x_data(grid_tmp) ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     pgrid_tmp_y = cpl_bivector_get_y_data(grid_tmp) ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     pgrid_tot = cpl_vector_get_data(grid_tot);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       pgrid_tot[j]=0;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>       <span class="keywordflow">for</span>(i=n_lines ;i<n_arcs;i=i+n_lines)</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       <span class="keywordflow">for</span>(k=0;k<n_lines;k++) {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         pgrid_tot[j] += (plines_pos_tmp[i+k]-</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                              plines_pos_tmp[k]);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">            sinfo_msg("diff=%g",(plines_pos_tmp[i+k]-</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">                 plines_pos_tmp[k]));</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="comment">      sinfo_msg("j=%d pgrid_tot=%g",j,pgrid_tot[j]);</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>      pgridx[j+i*n_calib]=pgridx[j+i*n_calib]*</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                              ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-offset;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">         sinfo_msg_error("AMo after corr grid[%d,%d]=%g",</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="comment">                          i,k,pgridx[k+i*n_calib]);</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>      pgrid_tmp_x[j+i*n_calib]=pgrid_tmp_x[j+i*n_calib]*</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                                   ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                                   offset;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>       }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     cpl_vector_delete(lines_pos_tmp);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     cpl_bivector_delete(grid_tmp);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     cpl_vector_delete(grid_tot);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <span class="comment">/* end AMO: to use the offset */</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     cpl_free(arcs_pos) ;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     cpl_free(lines_pos) ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="comment">/* Apply the fitting */</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordflow">if</span> ((poly2d = sinfo_polynomial_fit_2d_create(grid, values_to_fit,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                     degree, NULL))==NULL) {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot apply the 2d fit"</span>) ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         cpl_bivector_delete(grid) ;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         cpl_vector_delete(values_to_fit) ;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     cpl_bivector_delete(grid) ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     cpl_vector_delete(values_to_fit) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordflow">return</span> poly2d ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="keyword">static</span> cpl_apertures * sinfo_distortion_detect_arcs_new(</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>         cpl_image   **  label_im,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>         <span class="keywordtype">int</span>             arc_sat,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         <span class="keywordtype">int</span>             max_arc_width,</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         <span class="keywordtype">double</span>          kappa,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         <span class="keywordtype">int</span>             xmin,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>         <span class="keywordtype">int</span>             ymin,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>         <span class="keywordtype">int</span>             xmax,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         <span class="keywordtype">int</span>             ymax,</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <span class="keywordtype">double</span> arcs_min_arclen_factor,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         <span class="keywordtype">int</span> arcs_window_size)</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> {</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     cpl_image       *   filt_im ;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     cpl_matrix      *   filter ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     cpl_image       *   collapsed ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     cpl_mask        *   bin_im ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma ;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordtype">int</span>                 min_arclen = 0 ;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     cpl_apertures   *   det ;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     cpl_size                 nobj ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="keywordtype">int</span>                 ngoodpix ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     <span class="keywordtype">int</span>                 ny ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     ny = cpl_image_get_size_y(im) ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="comment">/* Default values for output parameters */</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     *label_im = NULL ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     median_val = cpl_image_get_median_dev(im, &sigma) ;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     fillval = median_val-sigma/2.0 ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     <span class="keywordflow">if</span> (sinfo_distortion_fill_badzones(im, xmin, ymin, xmax, ymax,</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>                 fillval) == -1) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot fill bad zones"</span>) ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="comment">/* Median vertical filter */</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     filter = cpl_matrix_new(3, 1) ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     cpl_matrix_fill(filter, 1.0) ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="comment">/* filt_im = cpl_image_filter_median(im, filter) ; */</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     filt_im = cpl_image_duplicate(im) ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     cpl_matrix_delete(filter) ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="comment">/* Subtract a low-pass */</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="comment">/* AMO: suppressed as may remove arcs */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordflow">if</span> (sinfo_distortion_sub_hor_lowpass(filt_im, arcs_window_size) == -1) {</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="comment">//cpl_image_save(filt_im,"out_filt_im_lp.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="comment">//               NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="comment">/* Get relevant stats for thresholding */</span></div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     median_val = cpl_image_get_median_dev(filt_im, &sigma) ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="comment">/* Correct median_val and sigma if necessary */</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="comment">/* Set the threshold */</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     threshold = median_val + sigma * kappa ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="comment">/* Collapse the image */</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0) ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordflow">if</span> (sinfo_distortion_threshold1d(filt_im, median_val,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                                      collapsed, 0.0)==-1) {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot threshold the filtered image"</span>) ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <span class="comment">/* Binarize the image */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     bin_im = cpl_mask_threshold_image_create(filt_im, threshold,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>             SINFO_DBL_MAX);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordflow">if</span> (bin_im == NULL) {</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"cannot binarise the image"</span>) ;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     }</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     <span class="comment">/* Test if there are enough good pixels */</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     ngoodpix = cpl_mask_count(bin_im) ;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix) ;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         cpl_mask_delete(bin_im) ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     }</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="comment">/* Apply a morphological closing to clean the isolated pixels */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     filter = cpl_matrix_new(3, 3) ;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     cpl_matrix_fill(filter, 1.0) ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     cpl_mask_closing(bin_im, filter) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     cpl_matrix_delete(filter) ;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="comment">/* Labelize pixel map to a label image */</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj) ;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     cpl_mask_delete(bin_im) ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     <span class="comment">//cpl_image_save(*label_im,"out_label_im.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <span class="comment">//               NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="comment">/* Compute statistics on objects */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot compute arcs stats"</span>) ;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     }</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="comment">/* Set min_arclen */</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     min_arclen = (int)(ny /arcs_min_arclen_factor) ;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="comment">//cpl_image_save(im,"out_im.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="comment">/* Purge non-relevant arcs */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="comment">/* cpl_apertures_dump(det,stdout); */</span></div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="keywordflow">if</span> (sinfo_distortion_purge_arcs(im, &det, label_im, min_arclen,</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 max_arc_width, arc_sat) == -1) {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Cannot purge the arcs"</span>) ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>         cpl_apertures_delete(det) ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     <span class="comment">/* cpl_apertures_dump(det,stdout); */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         cpl_msg_error(cpl_func, <span class="stringliteral">"Not enough valid arcs (%"</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                       CPL_SIZE_FORMAT <span class="stringliteral">" < %d)"</span>,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                 cpl_apertures_get_size(det), ARC_MINNBARCS) ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         cpl_apertures_delete(det) ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     }</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <span class="keywordflow">return</span> det ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> cpl_polynomial * sinfo_distortion_estimate(</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>         <span class="keyword">const</span> cpl_image *   org,</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>         <span class="keywordtype">int</span>                 xmin,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         <span class="keywordtype">int</span>                 ymin,</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         <span class="keywordtype">int</span>                 xmax,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         <span class="keywordtype">int</span>                 ymax,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         <span class="keywordtype">int</span>                 auto_ramp_sub,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>         <span class="keywordtype">int</span>                 arc_sat,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         <span class="keywordtype">int</span>                 max_arc_width,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         <span class="keywordtype">int</span>                 degree,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         <span class="keywordtype">double</span>              offset,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>         cpl_apertures   **  arcs)</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> {</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_estimate"</span> ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     cpl_image       *   local_im ;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     cpl_image       *   label_image ;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     <span class="keywordtype">double</span>              rightmost, leftmost ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     cpl_bivector    **  arcs_pos ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordtype">double</span>          *   parc_posx ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordtype">double</span>          *   parc_posy ;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keywordtype">double</span>          *   lines_pos ;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     cpl_bivector    *   grid ;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordtype">double</span>          *   pgridx ;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordtype">double</span>          *   pgridy ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     cpl_vector      *   values_to_fit ;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordtype">double</span>          *   pvalues_to_fit ;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     <span class="keywordtype">int</span>                 min_arc_range ;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     <span class="keywordtype">int</span>                 n_calib ;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="keywordtype">int</span>                 n_arcs ;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     cpl_polynomial  *   poly2d ;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordtype">int</span>                 nx ;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="comment">/* AMO added to use offset */</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     cpl_vector    *     lines_pos_tmp ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     cpl_bivector    *   grid_tmp ;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     cpl_vector* grid_tot=0;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="keywordtype">double</span>* pgrid_tmp_x=NULL;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     <span class="keywordtype">double</span>* pgrid_tmp_y=NULL;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordtype">double</span>* pgrid_tot=NULL;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     <span class="keywordtype">double</span>* plines_pos_tmp=NULL;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     <span class="keywordflow">if</span> (org == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     n_calib = ARC_NBSAMPLES ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     nx = cpl_image_get_size_x(org) ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keywordflow">if</span> (auto_ramp_sub) {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         local_im = sinfo_distortion_remove_ramp(org) ;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         <span class="comment">/* Local copy of input image */</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         local_im = cpl_image_duplicate(org) ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     }</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <span class="keywordflow">if</span> (local_im == NULL) {</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         cpl_msg_error(fctid, <span class="stringliteral">"Cannot clean the image"</span>) ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="comment">/* Detect the arcs in the input image */</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     cpl_msg_info(fctid, <span class="stringliteral">"Detect arcs"</span>) ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordflow">if</span> ((*arcs = sinfo_distortion_detect_arcs(local_im,</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                     &label_image,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>                     arc_sat, max_arc_width,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                     xmin, ymin, xmax, ymax)) == NULL) {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         cpl_msg_error(fctid, <span class="stringliteral">"Cannot detect the arcs"</span>) ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     n_arcs = cpl_apertures_get_size(*arcs) ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     cpl_msg_info(fctid, <span class="stringliteral">"%d detected arcs"</span>, n_arcs) ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     <span class="comment">/* Check that the arcs are not concentrated in the same zone */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     rightmost = leftmost = cpl_apertures_get_pos_x(*arcs, 1) ;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     <span class="keywordflow">for</span> (i=1 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) < leftmost)</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>             leftmost = cpl_apertures_get_pos_x(*arcs, i+1) ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         <span class="keywordflow">if</span> (cpl_apertures_get_pos_x(*arcs, i+1) > rightmost)</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>             rightmost = cpl_apertures_get_pos_x(*arcs, i+1) ;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     min_arc_range = (int)(nx / ARC_RANGE_FACT) ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     <span class="keywordflow">if</span> ((<span class="keywordtype">int</span>)(rightmost-leftmost) < min_arc_range) {</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         cpl_msg_error(fctid, <span class="stringliteral">"too narrow range (%g-%g)<%d"</span>,</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>                 rightmost, leftmost, min_arc_range) ;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     <span class="comment">/* Create a 2-D deformation grid with detected arcs */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     cpl_msg_info(fctid, <span class="stringliteral">"Create deformation grid"</span>) ;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     lines_pos = cpl_malloc(n_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="keywordflow">if</span> ((arcs_pos = sinfo_distortion_get_arc_positions(local_im,</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                     label_image, *arcs, n_calib, &lines_pos))==NULL){</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         cpl_msg_error(fctid, <span class="stringliteral">"cannot get arcs positions"</span>) ;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         cpl_free(lines_pos) ;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     cpl_image_delete(label_image) ;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     cpl_image_delete(local_im) ;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="comment">/* Prepare the fitting */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     lines_pos_tmp=cpl_vector_new(n_arcs);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     cpl_msg_info(fctid, <span class="stringliteral">"Fit the 2d polynomial"</span>) ;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     grid = cpl_bivector_new(n_arcs * n_calib) ;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     pgridx = cpl_bivector_get_x_data(grid) ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     pgridy = cpl_bivector_get_y_data(grid) ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     values_to_fit = cpl_vector_new(n_arcs * n_calib) ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     pvalues_to_fit = cpl_vector_get_data(values_to_fit) ;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         parc_posx = cpl_bivector_get_x_data(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         parc_posy = cpl_bivector_get_y_data(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>         <span class="keywordflow">for</span> (j=0 ; j<n_calib ; j++) {</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             plines_pos_tmp[i]=lines_pos[i] ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>             pgridx[j+i*n_calib] = lines_pos[i] ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>             pgridy[j+i*n_calib] = parc_posy[j] ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>             pvalues_to_fit[j+i*n_calib] = parc_posx[j];</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">      sinfo_msg("pgridx=%g pgridy=%g pvalues=%g",</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="comment">          pgridx[j+i*n_calib],pgridy[j+i*n_calib],pvalues_to_fit[j+i*n_calib]);</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>         }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="comment">/* AMO new to use offset */</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     n_lines= n_arcs/32.0;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     <span class="keywordflow">if</span>(n_lines < 1) {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>       n_lines=1;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     }</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     cpl_vector_sort(lines_pos_tmp,1);</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     plines_pos_tmp=cpl_vector_get_data(lines_pos_tmp);</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     grid_tmp=cpl_bivector_duplicate(grid);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     grid_tot=cpl_vector_new(n_calib);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     pgrid_tmp_x = cpl_bivector_get_x_data(grid_tmp) ;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     pgrid_tmp_y = cpl_bivector_get_y_data(grid_tmp) ;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     pgrid_tot = cpl_vector_get_data(grid_tot);</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>       pgrid_tot[j]=0;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>       <span class="keywordflow">for</span>(i=n_lines ;i<n_arcs;i=i+n_lines)</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>       <span class="keywordflow">for</span>(k=0;k<n_lines;k++) {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>         pgrid_tot[j] += (plines_pos_tmp[i+k]-</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                              plines_pos_tmp[k]);</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="comment">            sinfo_msg("diff=%g",(plines_pos_tmp[i+k]-</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="comment">                 plines_pos_tmp[k]));</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>       }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="comment">      sinfo_msg("j=%d pgrid_tot=%g",j,pgrid_tot[j]);</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     }</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     <span class="keywordflow">for</span>(j=0;j<n_calib;j++) {</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>       <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) {</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>      pgridx[j+i*n_calib]=pgridx[j+i*n_calib]*</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                              ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-offset;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="comment">         sinfo_msg_error("AMo after corr grid[%d,%d]=%g",</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment">                          i,k,pgridx[k+i*n_calib]);</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>      pgrid_tmp_x[j+i*n_calib]=pgrid_tmp_x[j+i*n_calib]*</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                                   ((nx/32.0)*n_lines*(31*32/2))/pgrid_tot[j]-</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                                    offset;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>       }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     <span class="comment">/* end AMO: to use the offset */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(arcs_pos[i]) ;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     cpl_free(arcs_pos) ;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>     cpl_free(lines_pos) ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     <span class="comment">/* Apply the fitting */</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="keywordflow">if</span> ((poly2d = sinfo_polynomial_fit_2d_create(grid, values_to_fit,</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>                     degree, NULL))==NULL) {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         cpl_msg_error(fctid, <span class="stringliteral">"cannot apply the 2d fit"</span>) ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         cpl_bivector_delete(grid) ;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>         cpl_vector_delete(values_to_fit) ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     cpl_bivector_delete(grid) ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     cpl_vector_delete(values_to_fit) ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     <span class="keywordflow">return</span> poly2d ;</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> }</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="keyword">static</span> cpl_apertures * sinfo_distortion_detect_arcs(</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         cpl_image   **  label_im,</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>         <span class="keywordtype">int</span>             arc_sat,</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="keywordtype">int</span>             max_arc_width,</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         <span class="keywordtype">int</span>             xmin,</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         <span class="keywordtype">int</span>             ymin,</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         <span class="keywordtype">int</span>             xmax,</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         <span class="keywordtype">int</span>             ymax)</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> {</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_detect_arcs"</span> ;</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     cpl_image       *   filt_im ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     cpl_matrix      *   filter ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     cpl_image       *   collapsed ;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     cpl_mask        *   bin_im ;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordtype">double</span>              threshold, fillval, median_val, sigma ;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     <span class="keywordtype">int</span>                 min_arclen = 0 ;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     cpl_apertures   *   det ;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>     cpl_size                 nobj ;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     <span class="keywordtype">int</span>                 ngoodpix ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     <span class="keywordtype">int</span>                 ny ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     ny = cpl_image_get_size_y(im) ;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="comment">/* Default values for output parameters */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     *label_im = NULL ;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="comment">/* Clear zones to be ignored (to avoid false detections) */</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     median_val = cpl_image_get_median_dev(im, &sigma) ;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     fillval = median_val-sigma/2.0 ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     <span class="keywordflow">if</span> (sinfo_distortion_fill_badzones(im, xmin, ymin, xmax, ymax,</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>                 fillval) == -1) {</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>         cpl_msg_error(fctid, <span class="stringliteral">"cannot fill bad zones"</span>) ;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     }</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     <span class="comment">/* Median vertical filter */</span></div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     filter = cpl_matrix_new(3, 1) ;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     cpl_matrix_fill(filter, 1.0) ;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     <span class="comment">/* filt_im = cpl_image_filter_median(im, filter) ; */</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     filt_im = cpl_image_duplicate(im) ;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     cpl_matrix_delete(filter) ;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     <span class="comment">/* Subtract a low-pass */</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     <span class="keywordflow">if</span> (sinfo_distortion_sub_hor_lowpass(filt_im, ARC_WINDOWSIZE) == -1) {</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     }</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="comment">/* Get relevant stats for thresholding */</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     median_val = cpl_image_get_median_dev(filt_im, &sigma) ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     <span class="comment">/* Correct median_val and sigma if necessary */</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <span class="keywordflow">if</span> (median_val < TRESH_MEDIAN_MIN) median_val = TRESH_MEDIAN_MIN ;</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">if</span> (sigma > TRESH_SIGMA_MAX) sigma = TRESH_SIGMA_MAX ;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> </div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     <span class="comment">/* Set the threshold */</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     threshold = median_val + sigma * ARC_THRESHFACT ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="comment">/* Collapse the image */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     collapsed = cpl_image_collapse_median_create(filt_im, 0, 0, 0) ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     <span class="comment">/* Threshold to keep only the arcs - use of the collapsed image */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     <span class="keywordflow">if</span> (sinfo_distortion_threshold1d(filt_im, median_val,</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>                                      collapsed, 0.0)==-1) {</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         cpl_msg_error(fctid, <span class="stringliteral">"cannot threshold the filtered image"</span>) ;</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     }</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     cpl_image_delete(collapsed) ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     <span class="comment">/* Binarize the image */</span></div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     bin_im = cpl_mask_threshold_image_create(filt_im, threshold,</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>             SINFO_DBL_MAX);</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     cpl_image_delete(filt_im) ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordflow">if</span> (bin_im == NULL) {</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         cpl_msg_error(fctid, <span class="stringliteral">"cannot binarise the image"</span>) ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     }</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> </div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     <span class="comment">/* Test if there are enough good pixels */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     ngoodpix = cpl_mask_count(bin_im) ;</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     <span class="keywordflow">if</span> (ngoodpix < ARC_MINGOODPIX) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         cpl_msg_error(fctid, <span class="stringliteral">"Too few (%d) white pixels"</span>, ngoodpix) ;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         cpl_mask_delete(bin_im) ;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     <span class="comment">/* Apply a morphological closing to clean the isolated pixels */</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     filter = cpl_matrix_new(3, 3) ;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     cpl_matrix_fill(filter, 1.0) ;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     cpl_mask_closing(bin_im, filter) ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     cpl_matrix_delete(filter) ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     <span class="comment">/* Labelize pixel map to a label image */</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     *label_im = cpl_image_labelise_mask_create(bin_im, &nobj) ;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     cpl_mask_delete(bin_im) ;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     <span class="comment">/* Compute statistics on objects */</span></div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     <span class="keywordflow">if</span> ((det = cpl_apertures_new_from_image(im, *label_im)) == NULL) {</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         cpl_msg_error(fctid, <span class="stringliteral">"Cannot compute arcs stats"</span>) ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     }</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     <span class="comment">/* Set min_arclen */</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     min_arclen = (int)(ny / ARC_MINARCLENFACT) ;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     <span class="comment">/* Purge non-relevant arcs */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     <span class="keywordflow">if</span> (sinfo_distortion_purge_arcs(im, &det, label_im, min_arclen,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>                 max_arc_width, arc_sat) == -1) {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         cpl_msg_error(fctid, <span class="stringliteral">"Cannot purge the arcs"</span>) ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         cpl_apertures_delete(det) ;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     }</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordflow">if</span> (cpl_apertures_get_size(det) < ARC_MINNBARCS) {</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>         cpl_msg_error(fctid, <span class="stringliteral">"Not enough valid arcs (%"</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>                       CPL_SIZE_FORMAT <span class="stringliteral">" < %d)"</span>,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>                 cpl_apertures_get_size(det), ARC_MINNBARCS) ;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         cpl_image_delete(*label_im) ;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         *label_im = NULL ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         cpl_apertures_delete(det) ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordflow">return</span> det ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> }</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_fill_badzones(</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         <span class="keywordtype">int</span>             xmin,</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         <span class="keywordtype">int</span>             ymin,</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>         <span class="keywordtype">int</span>             xmax,</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>         <span class="keywordtype">int</span>             ymax,</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>         <span class="keywordtype">double</span>          fillval)</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> {</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordtype">float</span>       *   pfi ;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="keywordtype">int</span>             nx, ny ;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     <span class="keywordtype">int</span>             i, j ;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     <span class="comment">/* Get the data */</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     pfi = cpl_image_get_data_float(im) ;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     nx = cpl_image_get_size_x(im) ;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     ny = cpl_image_get_size_y(im) ;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> </div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="comment">/* Fill the zone */</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>             <span class="keywordflow">if</span> ((i<xmin-1) || (i>xmax-1) || (j<ymin-1) || (j>ymax-1)) {</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>                 pfi[i+j*nx] = (float)fillval ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>             }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>         }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     }</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> }</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_threshold1d(</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>         <span class="keywordtype">double</span>          threshold,</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>         cpl_image   *   im1d,</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>         <span class="keywordtype">double</span>          newval)</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     <span class="keywordtype">float</span>       *   pim ;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>     <span class="keywordtype">float</span>       *   pim1d ;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     <span class="keywordtype">int</span>             nx, ny ;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     <span class="keywordtype">int</span>             i, j ;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     <span class="keywordflow">if</span> (im1d == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     <span class="keywordflow">if</span> (cpl_image_get_type(im) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordflow">if</span> (cpl_image_get_type(im1d) != CPL_TYPE_FLOAT) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     <span class="comment">/* Get access to the im / im1d data */</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     pim = cpl_image_get_data_float(im) ;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     pim1d = cpl_image_get_data_float(im1d) ;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     nx = cpl_image_get_size_x(im) ;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     ny = cpl_image_get_size_y(im) ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="comment">/* Apply the thresholding */</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         <span class="keywordflow">if</span> (pim1d[i] < threshold) {</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>             <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) pim[i+j*nx] = (<span class="keywordtype">float</span>)newval ;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>         }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_sub_hor_lowpass(</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>         <span class="keywordtype">int</span>             filt_size)</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> {</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     cpl_vector  *   linehi ;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     cpl_vector  *   linelo ;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     cpl_vector  *   avglinehi ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     cpl_vector  *   avglinelo ;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <span class="keywordtype">double</span>      *   pavglinehi ;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordtype">float</span>       *   pim ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     <span class="keywordtype">int</span>             lopos, hipos, nx, ny ;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>     <span class="keywordtype">int</span>             i, j ;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     <span class="keywordflow">if</span> (im == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     <span class="keywordflow">if</span> (filt_size <= 0) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     nx = cpl_image_get_size_x(im) ;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     ny = cpl_image_get_size_y(im) ;</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     lopos = (int)(ny/4) ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     hipos = (int)(3*ny/4) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     <span class="comment">/* Get the vectors out of the image */</span></div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     <span class="keywordflow">if</span> ((linehi = cpl_vector_new_from_image_row(im, hipos)) == NULL) {</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     }</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     <span class="keywordflow">if</span> ((linelo = cpl_vector_new_from_image_row(im, lopos)) == NULL) {</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         cpl_vector_delete(linehi) ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>     }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     <span class="comment">/* Filter the vectors */</span></div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     <span class="keywordflow">if</span> ((avglinehi = cpl_vector_filter_median_create(linehi,</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>                     filt_size)) == NULL) {</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         cpl_vector_delete(linehi) ;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         cpl_vector_delete(linelo) ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>     }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     cpl_vector_delete(linehi) ;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     <span class="keywordflow">if</span> ((avglinelo = cpl_vector_filter_median_create(linelo,</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>                     filt_size)) == NULL) {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>         cpl_vector_delete(linelo) ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>         cpl_vector_delete(avglinehi) ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     }</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     cpl_vector_delete(linelo) ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="comment">/* Average the filtered vectors to get the low freq signal */</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     cpl_vector_add(avglinehi, avglinelo) ;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     cpl_vector_delete(avglinelo) ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     cpl_vector_divide_scalar(avglinehi, 2.0) ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     <span class="comment">/* Subtract the low frequency signal */</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     pavglinehi = cpl_vector_get_data(avglinehi) ;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     pim = cpl_image_get_data_float(im) ;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>             pim[i+j*nx] -= pavglinehi[i] ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>         }</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     }</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     cpl_vector_delete(avglinehi) ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> }</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> </div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_distortion_purge_arcs(</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         cpl_image       *   im,</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         cpl_apertures   **  arcs,</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         cpl_image       **  lab_im,</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>         <span class="keywordtype">int</span>                 min_arclen,</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         <span class="keywordtype">int</span>                 max_arcwidth,</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>         <span class="keywordtype">double</span>              arc_sat)</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> {</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   fctid = <span class="stringliteral">"sinfo_distortion_purge_arcs"</span> ;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="keywordtype">int</span>             nb_arcs ;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <span class="keywordtype">int</span>         *   selection ;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordtype">int</span>             arclen, arcwidth, edge ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordtype">double</span>          mean ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     <span class="keywordtype">int</span>         *   plabim ;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     cpl_mask    *   bin_im ;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     <span class="keywordtype">int</span>             nx, ny ;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     <span class="keywordtype">int</span>             i, j ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>     <span class="keywordflow">if</span> (arcs == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>     <span class="keywordflow">if</span> (*arcs == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     <span class="keywordflow">if</span> (*lab_im == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="comment">/* Get number of arcs */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     nb_arcs = cpl_apertures_get_size(*arcs) ;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     nx = cpl_image_get_size_x(*lab_im) ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     ny = cpl_image_get_size_y(*lab_im) ;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     <span class="comment">/* Allocate selection array */</span></div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     selection = cpl_malloc(nb_arcs * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="comment">/* Loop on the different arcs candidates */</span></div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="comment">/* sinfo_msg("min_arclen=%d max_arcwidth=%d",min_arclen,max_arcwidth); */</span></div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="keywordflow">for</span> (i=0 ; i<nb_arcs ; i++) {</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>         arclen = cpl_apertures_get_top(*arcs, i+1) -</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>             cpl_apertures_get_bottom(*arcs, i+1) + 1 ;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>         arcwidth = cpl_apertures_get_right(*arcs, i+1) -</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>             cpl_apertures_get_left(*arcs, i+1) + 1 ;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         edge = cpl_apertures_get_left_y(*arcs, i+1) ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>         mean = cpl_apertures_get_mean(*arcs, i+1) ;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>         <span class="comment">/* Test if the current object is a valid arc */</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>         <span class="keywordflow">if</span> (</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>             (arclen>min_arclen) &&</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>         (arcwidth<max_arcwidth) &&</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>             (edge>0) &&</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>             (mean < arc_sat)) {</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">        sinfo_msg_warning("Take Pos=%5.4d len=%d width=%d edge=%d mean=%f ",</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">    (cpl_apertures_get_right(*arcs, i+1)+cpl_apertures_get_left(*arcs, i+1))/2,</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment">     arclen,arcwidth,edge,mean);</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>             selection[i] = 1 ;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> <span class="comment">    sinfo_msg_warning("Rej Pos=%5.4d len=%d width=%d edge=%d mean=%f i=%d",</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> <span class="comment">         (cpl_apertures_get_right(*arcs, i+1)+</span></div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="comment">          cpl_apertures_get_left(*arcs, i+1))/2,arclen,arcwidth,edge,mean,i);</span></div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>             selection[i] = 0 ;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>         }</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     }</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     <span class="comment">/* Update the labelised image by erasing non valid arcs */</span></div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     <span class="keywordflow">for</span> (i=0 ; i<nb_arcs ; i++) {</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         <span class="keywordflow">if</span> (selection[i] == 0) {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>             plabim = cpl_image_get_data_int(*lab_im) ;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>             <span class="keywordflow">for</span> (j=0 ; j<nx*ny ; j++) {</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>                 <span class="keywordflow">if</span> (plabim[j] == i+1) plabim[j] = 0 ;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>             }</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>         }</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     }</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     cpl_free(selection) ;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="comment">/* Reset the labels to have consecutive ones */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     bin_im = cpl_mask_threshold_image_create(*lab_im, 0.5, SINFO_DBL_MAX) ;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     cpl_image_delete(*lab_im) ;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     *lab_im = cpl_image_labelise_mask_create(bin_im, NULL) ;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     cpl_mask_delete(bin_im) ;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     <span class="comment">/* Purge the bad arcs */</span></div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>     cpl_apertures_delete(*arcs) ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     *arcs = cpl_apertures_new_from_image(im, *lab_im) ;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     <span class="comment">/* Check if there are some valid arcs */</span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>     <span class="keywordflow">if</span> (cpl_apertures_get_size(*arcs) <= 0) {</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>         cpl_msg_error(fctid, <span class="stringliteral">"No valid arc found"</span>) ;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     }</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     <span class="comment">/* Return  */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> }</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="keyword">static</span> cpl_bivector **</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> sinfo_distortion_get_arc_positions(</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>         cpl_image       *   in,</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>         cpl_image       *   label_im,</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>         cpl_apertures   *   det,</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>         <span class="keywordtype">int</span>                 nb_samples,</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         <span class="keywordtype">double</span>          **  lines_pos)</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> {</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_get_arc_positions"</span> ;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <span class="keywordtype">int</span>                 n_arcs ;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     cpl_image       *   filt_img ;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     cpl_matrix      *   kernel ;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     cpl_bivector    **  pos ;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     <span class="keywordtype">double</span>          *   biv_x ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     <span class="keywordtype">double</span>          *   biv_y ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     <span class="keywordtype">double</span>              x_finepos ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     <span class="keywordtype">int</span>             *   plabel_im ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     <span class="keywordtype">int</span>             *   arcs_samples_y ;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     <span class="keywordtype">int</span>             *   computed ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     <span class="keywordtype">double</span>              arclen ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="keywordtype">int</span>                 use_this_arc ;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     <span class="keywordtype">int</span>                 obj ;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="keywordtype">int</span>                 nx, ny ;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     <span class="keywordtype">int</span>                 i, j, k ;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="preprocessor"></span>    cpl_mask*          mask=NULL;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     n_arcs = cpl_apertures_get_size(det) ;</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     nx = cpl_image_get_size_x(label_im) ;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>     ny = cpl_image_get_size_y(label_im) ;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     <span class="comment">/* Allocate positions (pos. of n_arcs*nb_samples pts on the arcs) */</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     pos = cpl_calloc(n_arcs, <span class="keyword">sizeof</span>(cpl_bivector*)) ;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) pos[i] = cpl_bivector_new(nb_samples) ;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     <span class="comment">/* Median filter on input image */</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>     kernel = cpl_matrix_new(3, 3) ;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>     cpl_matrix_fill(kernel, 1.0) ;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="preprocessor"></span>    filt_img=cpl_image_duplicate(in);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>     mask=cpl_mask_new(3,3);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>     cpl_mask_not(mask);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>     cpl_image_filter_mask(filt_img,in,mask,CPL_FILTER_MEDIAN,CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>     cpl_mask_delete(mask);</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="preprocessor"></span>    filt_img = cpl_image_filter_median(in, kernel) ;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="preprocessor"></span>    cpl_matrix_delete(kernel) ;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     <span class="comment">/* Measured Arcs coordinates along curvature */</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>     arcs_samples_y = cpl_malloc(n_arcs * nb_samples * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     computed = cpl_calloc(n_arcs*nb_samples, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> </div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>     <span class="comment">/* Find out the Y coordinates along the arcs  */</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     <span class="keywordflow">for</span> (j=0 ; j<n_arcs ; j++) {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         arclen = cpl_apertures_get_top(det,j+1) -</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>             cpl_apertures_get_bottom(det,j+1) + 1 ;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>         <span class="keywordflow">for</span> (i=0 ; i<nb_samples ; i++) {</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>             arcs_samples_y[i+j*nb_samples] =</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>                 (int)(cpl_apertures_get_bottom(det, j+1) +</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>                       (arclen * (i + 0.5)) / (<span class="keywordtype">double</span>)nb_samples) ;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>         }</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     }</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     <span class="comment">/* Find out the X coord. at nb_samples Y positions on all arcs */</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>     plabel_im = cpl_image_get_data_int(label_im) ;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>     <span class="keywordflow">for</span> (i=0 ; i<nx ; i++) {</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>         <span class="keywordflow">for</span> (j=0 ; j<ny ; j++) {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>             <span class="comment">/* use_this_arc is set to 1 if we are on the arc at a y */</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>             <span class="comment">/* coordinate where the x coord should be found */</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>             obj = plabel_im[i + j * nx] ;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>             <span class="comment">/* Handle background */</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>             <span class="keywordflow">if</span> (obj==0) continue ;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>             <span class="comment">/* Decrease by one to index the array from 0 */</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>             <span class="keywordflow">else</span> obj-- ;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             use_this_arc = 0 ;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>             <span class="keywordflow">for</span> (k=0 ; k<nb_samples ; k++) {</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>                 <span class="keywordflow">if</span> (arcs_samples_y[k+obj*nb_samples] == j) {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>                     use_this_arc = 1 ;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>                     break ;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>                 }</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             }</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>             <span class="keywordflow">if</span> ((use_this_arc)  && (computed[k+obj*nb_samples] == 0)) {</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>                 <span class="comment">/* Find x coordinate of obj at the Y coord. */</span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>                 <span class="keywordflow">if</span> ((x_finepos = sinfo_distortion_fine_pos(filt_img,</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>                                 label_im, i, j)) < 0.0) {</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>                     cpl_msg_error(fctid, <span class="stringliteral">"cannot find fine arc position"</span>) ;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>                     cpl_image_delete(filt_img) ;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>                     cpl_free(arcs_samples_y);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>                     cpl_free(computed) ;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>                     <span class="keywordflow">for</span> (i=0 ; i<n_arcs ; i++) cpl_bivector_delete(pos[i]);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>                     cpl_free(pos) ;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>                     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>                     biv_x = cpl_bivector_get_x_data(pos[obj]) ;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>                     biv_y = cpl_bivector_get_y_data(pos[obj]) ;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>                     biv_x[k] = x_finepos ;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>                     biv_y[k] = j ;</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>                     (*lines_pos)[obj] = cpl_apertures_get_centroid_x(det,obj+1);</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>                     computed[k+obj*nb_samples] = 1 ;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>                 }</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>             }</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>         }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>     }</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     cpl_image_delete(filt_img) ;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>     cpl_free(arcs_samples_y) ;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>     cpl_free(computed) ;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>     <span class="keywordflow">return</span> pos ;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> }</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> </div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> sinfo_distortion_fine_pos(</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>         cpl_image   *   im,</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>         cpl_image   *   label_im,</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>         <span class="keywordtype">int</span>             x,</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>         <span class="keywordtype">int</span>             y)</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> {</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordtype">float</span>   *   pim ;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     <span class="keywordtype">int</span>     *   plabel_im ;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordtype">int</span>         objnum ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keywordtype">int</span>         curr_obj ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordtype">int</span>         start_pos ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     <span class="keywordtype">double</span>      grav_c ;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keywordtype">double</span>      sum ;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     <span class="keywordtype">double</span>      max ;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     <span class="keywordtype">double</span>      val ;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordtype">int</span>         maxpos ;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     <span class="keywordtype">int</span>         im_extrem ;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>     <span class="keywordtype">double</span>      arc_pos ;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     <span class="keywordtype">int</span>         nx ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span> </div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     <span class="comment">/* Initialize */</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     nx = cpl_image_get_size_x(im) ;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     grav_c = 0.0 ;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     sum    = 0.0 ;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>     start_pos = x ;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     maxpos = start_pos ;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>     pim = cpl_image_get_data_float(im) ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>     max    = (double)pim[start_pos + y * nx] ;</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     plabel_im = cpl_image_get_data_int(label_im) ;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     objnum = plabel_im[start_pos + y * nx] ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>     im_extrem = nx ;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     <span class="comment">/* While we stay in the same object... */</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>     <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>         val = (double)pim[start_pos + y * nx] ;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         <span class="keywordflow">if</span> (start_pos == 0) grav_c = 0.0 ;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>         <span class="keywordflow">else</span> grav_c += start_pos * val ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>         sum += val ;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>         <span class="keywordflow">if</span> (val > max) {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>             max = val ;</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>             maxpos = start_pos ;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         }</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>         <span class="comment">/* Next point */</span></div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>         start_pos++ ;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>         curr_obj = plabel_im[start_pos + y * nx] ;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     } <span class="keywordflow">while</span> (curr_obj == objnum) ;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> </div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>     <span class="comment">/* Returned position is the gravity center or the max in bad cases */</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>     <span class="keywordflow">if</span> ((fabs(grav_c) < 1.0e-40) || (fabs(sum) < 1.0e-40)) {</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>         arc_pos = maxpos ;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         arc_pos = grav_c / sum ;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>         <span class="keywordflow">if</span> (fabs(arc_pos) >= start_pos) arc_pos = maxpos ;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     }</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>     <span class="keywordflow">return</span> arc_pos ;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> }</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="preprocessor">#define IS_NB_TESTPOINTS    8</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_SLOPE        0.01</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_SLOPE_DIF    0.075</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_FIT_EDGE_DIF 0.05</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MIN_RAMP         10.0</span></div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR        13.0</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_MNERR_DIF    8.0</span></div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_MAX_INTER_DIF    20.0</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="preprocessor"></span><span class="preprocessor">#define IS_SKIPZONE         2.5</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="preprocessor"></span><span class="preprocessor">#define SQR(x) ((x)*(x))</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="preprocessor"></span><span class="keyword">static</span> cpl_image * sinfo_distortion_remove_ramp(<span class="keyword">const</span> cpl_image * in)</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> {</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>      *   fctid = <span class="stringliteral">"sinfo_distortion_remove_ramp"</span> ;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordtype">int</span>                 ramp_present ;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     <span class="keywordtype">int</span>                 nx, ny ;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>     <span class="keywordtype">int</span>                 y, yhi, ylo;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     cpl_vector      *   tmp_vector ;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     cpl_bivector    *   testpointlo ;</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     <span class="keywordtype">double</span>          *   testpointlo_x ;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     <span class="keywordtype">double</span>          *   testpointlo_y ;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     cpl_bivector    *   testpointhi ;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     <span class="keywordtype">double</span>          *   testpointhi_x ;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     <span class="keywordtype">double</span>          *   testpointhi_y ;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     <span class="keywordtype">int</span>                 spacing;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     <span class="keywordtype">double</span>              rampdif, fitslope;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     <span class="keywordtype">double</span>          *   pol_coefhi,</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>                     *   pol_coeflo ;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     cpl_vector      *   median ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     <span class="keywordtype">double</span>          *   median_data ;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     <span class="keywordtype">double</span>              medianerrlo, medianerrhi;</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>     <span class="keywordtype">double</span>              slope ;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     cpl_image       *   out ;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     <span class="keywordtype">float</span>           *   pout ;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <span class="keywordtype">float</span>               val ;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> </div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     nx = cpl_image_get_size_x(in) ;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     ny = cpl_image_get_size_y(in) ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> </div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>     <span class="keywordflow">if</span> (in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> </div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     <span class="keywordflow">if</span> (ny<IS_SKIPZONE*IS_NB_TESTPOINTS){</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>         cpl_msg_error(fctid, <span class="stringliteral">"image has %d lines, min=%d "</span>,</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>                 ny, (<span class="keywordtype">int</span>)(IS_SKIPZONE*IS_NB_TESTPOINTS*2));</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> </div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     slope=0.0 ;</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     spacing= ny / (IS_SKIPZONE*IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>     yhi = (int)(ny/2) ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>     ylo = yhi - 1 ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     <span class="comment">/* Fill the vectors */</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     testpointhi = cpl_bivector_new(IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     testpointhi_x = cpl_bivector_get_x_data(testpointhi) ;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     testpointhi_y = cpl_bivector_get_y_data(testpointhi) ;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     testpointlo = cpl_bivector_new(IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     testpointlo_x = cpl_bivector_get_x_data(testpointlo) ;</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     testpointlo_y = cpl_bivector_get_y_data(testpointlo) ;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     <span class="keywordflow">for</span> (i=0 ; i<IS_NB_TESTPOINTS ; i++) {</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>         y = yhi + i * spacing;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         tmp_vector = cpl_vector_new_from_image_row(in, y+1) ;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         testpointhi_x[i] = y - ny / 2;</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>         testpointhi_y[i] = cpl_vector_get_median_const(tmp_vector) ;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>         cpl_vector_delete(tmp_vector) ;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>         y = ylo - i * spacing;</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>         tmp_vector = cpl_vector_new_from_image_row(in, y+1) ;</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>         testpointlo_x[IS_NB_TESTPOINTS-i-1] = y ;</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>         testpointlo_y[IS_NB_TESTPOINTS-i-1]=</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>       cpl_vector_get_median_const(tmp_vector);</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>         cpl_vector_delete(tmp_vector) ;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>     <span class="comment">/* Apply the fit */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>     pol_coefhi = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointhi_x,</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>             testpointhi_y, IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     pol_coeflo = <a class="code" href="group__irplib__flat.html#ga3e3e3bd45aef34e38758e1f2528d7c91" title="Fit a slope to a list of points (robust fit).">irplib_flat_fit_slope_robust</a>(testpointlo_x,</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>             testpointlo_y, IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>     <span class="comment">/* Compute the errors */</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>     median = cpl_vector_new(IS_NB_TESTPOINTS) ;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     median_data = cpl_vector_get_data(median) ;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     <span class="keywordflow">for</span> (i=0 ; i<IS_NB_TESTPOINTS ; i++) {</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>         median_data[i]=SQR(testpointhi_y[i]</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>                 - pol_coefhi[0] - pol_coefhi[1] * testpointhi_x[i]);</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>     }</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>     medianerrhi = cpl_vector_get_median_const(median) ;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     <span class="keywordflow">for</span> (i=0; i<IS_NB_TESTPOINTS; i++) {</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>         median_data[i]=SQR(testpointlo_y[i]</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>                 - pol_coeflo[0] - pol_coeflo[1] * testpointlo_x[i]);</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     }</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     medianerrlo = cpl_vector_get_median_const(median) ;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>     cpl_vector_delete(median) ;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     rampdif = testpointlo_y[IS_NB_TESTPOINTS-1] - testpointhi_y[0];</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     slope = rampdif / (ny/2.0) ;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>     fitslope = (pol_coefhi[1] + pol_coeflo[1]) / 2.0 ;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>     cpl_bivector_delete(testpointlo);</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>     cpl_bivector_delete(testpointhi);</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> </div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>     <span class="comment">/* Decide if there is a ramp or not  */</span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="keywordflow">if</span> (fabs(rampdif)<IS_MIN_RAMP ||</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>             fabs(pol_coefhi[1]) < IS_MIN_SLOPE ||</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>             fabs(pol_coeflo[1]) < IS_MIN_SLOPE ||</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>             pol_coefhi[1]/pol_coeflo[1]<0.5 ||</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>             pol_coefhi[1]/pol_coeflo[1]>2.0 ||</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>             fabs(pol_coefhi[1]-pol_coeflo[1])>IS_MAX_SLOPE_DIF ||</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>             fabs(pol_coefhi[0]-pol_coeflo[0]) > IS_MAX_INTER_DIF ||</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>             medianerrlo> IS_MAX_MNERR ||</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>             medianerrhi> IS_MAX_MNERR ||</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>             fabs(medianerrlo-medianerrhi) >IS_MAX_MNERR_DIF ||</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>             fabs(slope-fitslope) > IS_MAX_FIT_EDGE_DIF ||</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>             slope/fitslope<0.5 ||</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>             slope/fitslope>2.0) ramp_present = 0 ;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     <span class="keywordflow">else</span> ramp_present = 1 ;</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span> </div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>     cpl_free(pol_coeflo) ;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>     cpl_free(pol_coefhi) ;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> </div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>     <span class="comment">/* Correct the ramp if it is there */</span></div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>     out = cpl_image_duplicate(in) ;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>     pout = cpl_image_get_data_float(out) ;</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     <span class="keywordflow">if</span> (ramp_present == 1) {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>         <span class="keywordflow">for</span> (j=0 ; j<ny/2 ; j++) {</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>             val = slope * (j-ny/2) ;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>             <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>                 pout[i+j*nx] -= val ;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>         }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>         <span class="keywordflow">for</span> (j=ny/2 ; j<ny ; j++) {</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>             val = slope * (j-ny) ;</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>             <span class="keywordflow">for</span> (i=0 ; i<nx ; i++)</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>                 pout[i+j*nx] -= val ;</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>         }</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> </div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>     }</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     <span class="keywordflow">return</span> out ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> }</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__distortion_8h_source.html b/html/sinfo__distortion_8h_source.html
index ab97a14..290a221 100644
--- a/html/sinfo__distortion_8h_source.html
+++ b/html/sinfo__distortion_8h_source.html
@@ -2,90 +2,121 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_distortion.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_distortion.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_distortion.h,v 1.7 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the irplib package</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_DISTORTION_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DISTORTION_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                       Prototypes</span>
-<a name="l00037"></a>00037 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 cpl_polynomial * 
-<a name="l00039"></a>00039 sinfo_distortion_estimate(<span class="keyword">const</span> cpl_image *, 
-<a name="l00040"></a>00040                           <span class="keywordtype">int</span>, 
-<a name="l00041"></a>00041                           <span class="keywordtype">int</span>, 
-<a name="l00042"></a>00042                           <span class="keywordtype">int</span>, 
-<a name="l00043"></a>00043                           <span class="keywordtype">int</span>, 
-<a name="l00044"></a>00044                           <span class="keywordtype">int</span>, 
-<a name="l00045"></a>00045                           <span class="keywordtype">int</span>, 
-<a name="l00046"></a>00046                           <span class="keywordtype">int</span>, 
-<a name="l00047"></a>00047                           <span class="keywordtype">int</span>, 
-<a name="l00048"></a>00048                           <span class="keywordtype">double</span>, 
-<a name="l00049"></a>00049                           cpl_apertures **) ;
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 cpl_polynomial * sinfo_distortion_estimate_new(
-<a name="l00052"></a>00052         <span class="keyword">const</span> cpl_image *   org,
-<a name="l00053"></a>00053         <span class="keywordtype">int</span>                 xmin,
-<a name="l00054"></a>00054         <span class="keywordtype">int</span>                 ymin,
-<a name="l00055"></a>00055         <span class="keywordtype">int</span>                 xmax,
-<a name="l00056"></a>00056         <span class="keywordtype">int</span>                 ymax,
-<a name="l00057"></a>00057         <span class="keywordtype">int</span>                 auto_ramp_sub,
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>                 arc_sat,
-<a name="l00059"></a>00059         <span class="keywordtype">int</span>                 max_arc_width,
-<a name="l00060"></a>00060         <span class="keywordtype">double</span>              kappa,
-<a name="l00061"></a>00061         <span class="keywordtype">double</span>              arcs_min_arclen_factor,
-<a name="l00062"></a>00062         <span class="keywordtype">int</span>                 arcs_window_size,
-<a name="l00063"></a>00063         <span class="keywordtype">int</span>                 smooth_rad,
-<a name="l00064"></a>00064         <span class="keywordtype">int</span>                 degree,
-<a name="l00065"></a>00065         <span class="keywordtype">double</span>              offset,
-<a name="l00066"></a>00066         cpl_apertures   **  arcs);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 cpl_image *
-<a name="l00069"></a>00069 sinfo_distortion_image_restore(<span class="keyword">const</span> cpl_image* inp,
-<a name="l00070"></a>00070                                <span class="keyword">const</span> <span class="keywordtype">int</span> r,
-<a name="l00071"></a>00071                                <span class="keyword">const</span> <span class="keywordtype">int</span> d,
-<a name="l00072"></a>00072                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00073"></a>00073                                <span class="keyword">const</span> <span class="keywordtype">int</span> ks_method,
-<a name="l00074"></a>00074                                <span class="keyword">const</span> <span class="keywordtype">int</span> n);
-<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_distortion.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_distortion.h,v 1.7 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the irplib package</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_DISTORTION_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DISTORTION_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                       Prototypes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> cpl_polynomial * </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> sinfo_distortion_estimate(<span class="keyword">const</span> cpl_image *, </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                           <span class="keywordtype">int</span>, </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                           <span class="keywordtype">double</span>, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                           cpl_apertures **) ;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> cpl_polynomial * sinfo_distortion_estimate_new(</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keyword">const</span> cpl_image *   org,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">int</span>                 xmin,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">int</span>                 ymin,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">int</span>                 xmax,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">int</span>                 ymax,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">int</span>                 auto_ramp_sub,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>                 arc_sat,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">int</span>                 max_arc_width,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">double</span>              kappa,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">double</span>              arcs_min_arclen_factor,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">int</span>                 arcs_window_size,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="keywordtype">int</span>                 smooth_rad,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">int</span>                 degree,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keywordtype">double</span>              offset,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         cpl_apertures   **  arcs);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> cpl_image *</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> sinfo_distortion_image_restore(<span class="keyword">const</span> cpl_image* inp,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> r,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> d,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> ks_method,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__distortion__config_8c_source.html b/html/sinfo__distortion__config_8c_source.html
index 177bb40..3763094 100644
--- a/html/sinfo__distortion__config_8c_source.html
+++ b/html/sinfo__distortion__config_8c_source.html
@@ -2,552 +2,583 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_distortion_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_distortion_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_distortion_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030  <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_distortion_config.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043  <span class="keywordtype">void</span>
-<a name="l00044"></a>00044  sinfo_distortion_config_add(cpl_parameterlist *list)
-<a name="l00045"></a>00045 {
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047   cpl_parameter *p;
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049   <span class="keywordflow">if</span> (!list) {
-<a name="l00050"></a>00050     <span class="keywordflow">return</span>;
-<a name="l00051"></a>00051   }
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   <span class="comment">/* Output file name */</span>
-<a name="l00054"></a>00054 <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/* Find Lines */</span>
-<a name="l00058"></a>00058 <span class="comment">/* indicates if the dispersion relation is already determined or not */</span>
-<a name="l00059"></a>00059   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.calib_indicator"</span>,
-<a name="l00060"></a>00060                   CPL_TYPE_BOOL,
-<a name="l00061"></a>00061                               <span class="stringliteral">"Calib Indicator: "</span>
-<a name="l00062"></a>00062                               <span class="stringliteral">"FALSE: if the dispersion relation is already "</span>
-<a name="l00063"></a>00063                               <span class="stringliteral">"known, the routine can jump to the waveMap "</span>
-<a name="l00064"></a>00064                               <span class="stringliteral">"section "</span>
-<a name="l00065"></a>00065                               <span class="stringliteral">"TRUE: if the dispersion relation "</span>
-<a name="l00066"></a>00066                               <span class="stringliteral">"must first be determined"</span>,
-<a name="l00067"></a>00067                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00068"></a>00068                               TRUE);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-calib_indicator"</span>);
-<a name="l00071"></a>00071   cpl_parameterlist_append(list, p);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span>
-<a name="l00075"></a>00075   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_diff_mean_med_col_int"</span>,
-<a name="l00076"></a>00076                   CPL_TYPE_DOUBLE,
-<a name="l00077"></a>00077                               <span class="stringliteral">"Minimum Of Difference: "</span>
-<a name="l00078"></a>00078                               <span class="stringliteral">"minimum difference of mean and median column "</span>
-<a name="l00079"></a>00079                               <span class="stringliteral">"intensity to carry out the cross correlation"</span>,
-<a name="l00080"></a>00080                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00081"></a>00081                               10.);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,
-<a name="l00084"></a>00084                           <span class="stringliteral">"dist-min_diff_mean_med_col_int"</span>);
-<a name="l00085"></a>00085   cpl_parameterlist_append(list, p);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="comment">/* half width of a box within which the line must sit */</span>
-<a name="l00088"></a>00088   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.half_width"</span>,
-<a name="l00089"></a>00089                   CPL_TYPE_INT,
-<a name="l00090"></a>00090                               <span class="stringliteral">"Half Width: "</span>
-<a name="l00091"></a>00091                               <span class="stringliteral">"half width of a box within which the line "</span>
-<a name="l00092"></a>00092                               <span class="stringliteral">"must be placed"</span>,
-<a name="l00093"></a>00093                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00094"></a>00094                               7);
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-hw"</span>);
-<a name="l00097"></a>00097   cpl_parameterlist_append(list, p);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="comment">/* sigma of Gaussian of artificial model spectra */</span>
-<a name="l00100"></a>00100   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.sigma"</span>,
-<a name="l00101"></a>00101                   CPL_TYPE_DOUBLE,
-<a name="l00102"></a>00102                               <span class="stringliteral">"Sigma: sigma of Gaussian which is convolved "</span>
-<a name="l00103"></a>00103                               <span class="stringliteral">"with the artificial spectrum generated using "</span>
-<a name="l00104"></a>00104                               <span class="stringliteral">"the line list"</span>,
-<a name="l00105"></a>00105                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00106"></a>00106                                2.);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-sigma"</span>);
-<a name="l00109"></a>00109   cpl_parameterlist_append(list, p);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111   <span class="comment">/* Wavelength Calibration */</span>
-<a name="l00112"></a>00112 <span class="comment">/* guess value for fwhm of emission lines */</span>
-<a name="l00113"></a>00113   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fwhm"</span>,
-<a name="l00114"></a>00114                   CPL_TYPE_DOUBLE,
-<a name="l00115"></a>00115                               <span class="stringliteral">"FWHM: initial guess value for the fwhm of "</span>
-<a name="l00116"></a>00116                               <span class="stringliteral">"the Gaussian used for the line fit"</span>,
-<a name="l00117"></a>00117                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00118"></a>00118                                2.83);
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fwhm"</span>);
-<a name="l00121"></a>00121   cpl_parameterlist_append(list, p);
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="comment">/* minimum amplitude of a line to be fitted */</span>
-<a name="l00124"></a>00124   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_amplitude"</span>,
-<a name="l00125"></a>00125                   CPL_TYPE_DOUBLE,
-<a name="l00126"></a>00126                               <span class="stringliteral">"Minimum Of Amplitude: "</span>
-<a name="l00127"></a>00127                               <span class="stringliteral">"of the Gaussian to do the fit"</span>,
-<a name="l00128"></a>00128                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00129"></a>00129                               5.);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-min_amplitude"</span>);
-<a name="l00132"></a>00132   cpl_parameterlist_append(list, p);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="comment">/* maximal residual value for a valid fit */</span>
-<a name="l00135"></a>00135   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.max_residual"</span>,
-<a name="l00136"></a>00136                   CPL_TYPE_DOUBLE,
-<a name="l00137"></a>00137                               <span class="stringliteral">"Maximum Residuals value: "</span>
-<a name="l00138"></a>00138                               <span class="stringliteral">"beyond this value the fit is rejected"</span>,
-<a name="l00139"></a>00139                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00140"></a>00140                               0.5);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-max_residual"</span>);
-<a name="l00143"></a>00143   cpl_parameterlist_append(list, p);
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span>
-<a name="l00146"></a>00146   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.n_a_coefficients"</span>,
-<a name="l00147"></a>00147                   CPL_TYPE_INT,
-<a name="l00148"></a>00148                               <span class="stringliteral">"Number of A coefficients: number of "</span>
-<a name="l00149"></a>00149                               <span class="stringliteral">"polynomial coefficients for the "</span>
-<a name="l00150"></a>00150                               <span class="stringliteral">"dispersion relation"</span>,
-<a name="l00151"></a>00151                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00152"></a>00152                               4);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-n_a_coeffs"</span>);
-<a name="l00155"></a>00155   cpl_parameterlist_append(list, p);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157  <span class="comment">/* # of polynomial coefficients used for the fit of the dispersion </span>
-<a name="l00158"></a>00158 <span class="comment">    coefficients */</span>
-<a name="l00159"></a>00159   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.n_b_coefficients"</span>,
-<a name="l00160"></a>00160                   CPL_TYPE_INT,
-<a name="l00161"></a>00161                               <span class="stringliteral">"Number of B coefficients: "</span>
-<a name="l00162"></a>00162                               <span class="stringliteral">"number of polynomial coefficients for the "</span>
-<a name="l00163"></a>00163                               <span class="stringliteral">"polynomial fit of the dispersion coefficients"</span>,
-<a name="l00164"></a>00164                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00165"></a>00165                               2);
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-n_b_coeffs"</span>);
-<a name="l00168"></a>00168   cpl_parameterlist_append(list, p);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170  <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span>
-<a name="l00171"></a>00171   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.sigma_factor"</span>,
-<a name="l00172"></a>00172                   CPL_TYPE_DOUBLE,
-<a name="l00173"></a>00173                               <span class="stringliteral">"Sigma Factor: "</span>
-<a name="l00174"></a>00174                               <span class="stringliteral">"Factor of the standard deviation of the "</span>
-<a name="l00175"></a>00175                               <span class="stringliteral">"polynomial coefficients of the dispersion "</span>
-<a name="l00176"></a>00176                               <span class="stringliteral">"relation beyond which the coefficients are "</span>
-<a name="l00177"></a>00177                               <span class="stringliteral">"not used for the fit"</span>,
-<a name="l00178"></a>00178                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00179"></a>00179                               1.5);
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-sigma_factor"</span>);
-<a name="l00182"></a>00182   cpl_parameterlist_append(list, p);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184   <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span>
-<a name="l00185"></a>00185 <span class="comment">       should be written into an ASCII file */</span>
-<a name="l00186"></a>00186   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.write_coeffs_ind"</span>,
-<a name="l00187"></a>00187                   CPL_TYPE_BOOL,
-<a name="l00188"></a>00188                               <span class="stringliteral">"Write Coefficients Index: "</span>
-<a name="l00189"></a>00189                               <span class="stringliteral">"indicates if the coefficients should "</span>
-<a name="l00190"></a>00190                               <span class="stringliteral">"be written into a file or not"</span>,
-<a name="l00191"></a>00191                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00192"></a>00192                               TRUE);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-wcoeff_ind"</span>);
-<a name="l00195"></a>00195   cpl_parameterlist_append(list, p);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197   <span class="comment">/* indicates if the fit parameters should be written into an ASCII file */</span>
-<a name="l00198"></a>00198   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.write_par_ind"</span>,
-<a name="l00199"></a>00199                   CPL_TYPE_BOOL,
-<a name="l00200"></a>00200                               <span class="stringliteral">"Write Parameter Index: "</span>
-<a name="l00201"></a>00201                               <span class="stringliteral">"indicates if the fit parameters should "</span>
-<a name="l00202"></a>00202                               <span class="stringliteral">"be written into a file or not "</span>,
-<a name="l00203"></a>00203                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00204"></a>00204                               TRUE);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-par_ind"</span>);
-<a name="l00207"></a>00207   cpl_parameterlist_append(list, p);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210   <span class="comment">/* minimal distance of the slitlets in spectral direction */</span>
-<a name="l00211"></a>00211   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.pixel_dist"</span>,
-<a name="l00212"></a>00212                   CPL_TYPE_INT,
-<a name="l00213"></a>00213                          <span class="stringliteral">"Minimal Slitlets's Distance in spectral direction"</span>,
-<a name="l00214"></a>00214                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00215"></a>00215                               15);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-pixel_dist"</span>);
-<a name="l00218"></a>00218   cpl_parameterlist_append(list, p);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="comment">/* allowed pixel position tolerance between estimated and fitted line </span>
-<a name="l00223"></a>00223 <span class="comment">     position</span>
-<a name="l00224"></a>00224 <span class="comment">  */</span>
-<a name="l00225"></a>00225   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.pixel_tol"</span>,
-<a name="l00226"></a>00226                   CPL_TYPE_DOUBLE,
-<a name="l00227"></a>00227                               <span class="stringliteral">"Pixel Tolerance: allowed pixel position "</span>
-<a name="l00228"></a>00228                               <span class="stringliteral">"tolerance between estimated and fitted "</span>
-<a name="l00229"></a>00229                   <span class="stringliteral">"line position"</span>,
-<a name="l00230"></a>00230                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00231"></a>00231                               5.0);
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-pixel_tol"</span>);
-<a name="l00234"></a>00234   cpl_parameterlist_append(list, p);
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236   <span class="comment">/* Wavelength Map */</span>
-<a name="l00237"></a>00237 <span class="comment">/* indicator if wavelength map should be generated or not */</span>
-<a name="l00238"></a>00238   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.wave_map_ind"</span>,
-<a name="l00239"></a>00239                   CPL_TYPE_BOOL,
-<a name="l00240"></a>00240                               <span class="stringliteral">"Wavelength Map Indicator: "</span>
-<a name="l00241"></a>00241                               <span class="stringliteral">"indicates if the wavelength calibration map "</span>
-<a name="l00242"></a>00242                               <span class="stringliteral">"should be generated (TRUE) or not (FALSE)"</span>,
-<a name="l00243"></a>00243                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00244"></a>00244                               FALSE);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-wave_map_ind"</span>);
-<a name="l00247"></a>00247   cpl_parameterlist_append(list, p);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   <span class="comment">/* magnifying factor for FFT */</span>
-<a name="l00250"></a>00250   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.mag_factor"</span>,
-<a name="l00251"></a>00251                   CPL_TYPE_INT,
-<a name="l00252"></a>00252                               <span class="stringliteral">"Magnificator Factor: "</span>
-<a name="l00253"></a>00253                               <span class="stringliteral">"magnifying factor for the number of pixels "</span>
-<a name="l00254"></a>00254                               <span class="stringliteral">"in the columns needed for FFT"</span>,
-<a name="l00255"></a>00255                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00256"></a>00256                               8);
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-mag_factor"</span>);
-<a name="l00259"></a>00259   cpl_parameterlist_append(list, p);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 <span class="comment">/* Fits Slits */</span>
-<a name="l00262"></a>00262 <span class="comment">/* indicator if the fit of the slit edge positions is carried through or not */</span>
-<a name="l00263"></a>00263   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.slit_pos_indicator"</span>,
-<a name="l00264"></a>00264                   CPL_TYPE_BOOL,
-<a name="l00265"></a>00265                               <span class="stringliteral">"Slit Position Indicator: "</span>
-<a name="l00266"></a>00266                               <span class="stringliteral">"indicates if the fits of the slitlet "</span>
-<a name="l00267"></a>00267                               <span class="stringliteral">"edge positions should be carried "</span>
-<a name="l00268"></a>00268                               <span class="stringliteral">"through or not"</span>,
-<a name="l00269"></a>00269                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00270"></a>00270                               TRUE);
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-slit_pos_ind"</span>);
-<a name="l00273"></a>00273   cpl_parameterlist_append(list, p);
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 <span class="comment">/* indicator if the fit model function is a Boltzmann function or not */</span>
-<a name="l00276"></a>00276   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fit_boltz_indicator"</span>,
-<a name="l00277"></a>00277                   CPL_TYPE_BOOL ,
-<a name="l00278"></a>00278                               <span class="stringliteral">"Fit Boltzmann Indicator: "</span>
-<a name="l00279"></a>00279                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00280"></a>00280                               <span class="stringliteral">"positions is carried trough by using a "</span>
-<a name="l00281"></a>00281                               <span class="stringliteral">"Boltzmann function as model function"</span>,
-<a name="l00282"></a>00282                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00283"></a>00283                               TRUE);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fit_boltz_ind"</span>);
-<a name="l00286"></a>00286   cpl_parameterlist_append(list, p);
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 <span class="comment">/* indicator if the fit model function is a simple edge function or not */</span>
-<a name="l00289"></a>00289   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fit_edge_indicator"</span>,
-<a name="l00290"></a>00290                   CPL_TYPE_BOOL,
-<a name="l00291"></a>00291                               <span class="stringliteral">"Fit Edge Indicator: "</span>
-<a name="l00292"></a>00292                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00293"></a>00293                               <span class="stringliteral">"positions is carried through by using a "</span>
-<a name="l00294"></a>00294                               <span class="stringliteral">"simple edge function as model function"</span>,
-<a name="l00295"></a>00295                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00296"></a>00296                               FALSE);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fit_edge_ind"</span>);
-<a name="l00299"></a>00299   cpl_parameterlist_append(list, p);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301  <span class="comment">/* indicator if the fit guess position are user </span>
-<a name="l00302"></a>00302 <span class="comment">    given or calculated automatically */</span>
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.estimate_indicator"</span>,
-<a name="l00305"></a>00305                   CPL_TYPE_BOOL,
-<a name="l00306"></a>00306                               <span class="stringliteral">"Estimate Indicator: "</span>
-<a name="l00307"></a>00307                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00308"></a>00308                               <span class="stringliteral">"positions is carried through by using a list "</span>
-<a name="l00309"></a>00309                               <span class="stringliteral">"of estimated guess positions in a file (TRUE)"</span>
-<a name="l00310"></a>00310                               <span class="stringliteral">"or if the initial positions are calculated "</span>
-<a name="l00311"></a>00311                               <span class="stringliteral">"automatically (FALSE). The estimation case "</span>
-<a name="l00312"></a>00312                               <span class="stringliteral">"is more stable"</span>,
-<a name="l00313"></a>00313                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00314"></a>00314                               FALSE);
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-estimate_ind"</span>);
-<a name="l00317"></a>00317   cpl_parameterlist_append(list, p);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 <span class="comment">/* pixel length of the row box within which </span>
-<a name="l00320"></a>00320 <span class="comment">   the fit of the slitlet positions is carried out*/</span>
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.box_length"</span>,
-<a name="l00323"></a>00323                   CPL_TYPE_INT,
-<a name="l00324"></a>00324                               <span class="stringliteral">"Box Length: "</span>
-<a name="l00325"></a>00325                               <span class="stringliteral">"pixel length of the row box within "</span>
-<a name="l00326"></a>00326                               <span class="stringliteral">"which the fit is carried out"</span>,
-<a name="l00327"></a>00327                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00328"></a>00328                               32);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-box_len"</span>);
-<a name="l00331"></a>00331   cpl_parameterlist_append(list, p);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 <span class="comment">/* float box half width in spectral direction */</span>
-<a name="l00334"></a>00334   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.y_box"</span>,
-<a name="l00335"></a>00335                   CPL_TYPE_DOUBLE,
-<a name="l00336"></a>00336                               <span class="stringliteral">"Y Box: half width of a small box in "</span>
-<a name="l00337"></a>00337                               <span class="stringliteral">"spectral direction within which the "</span>
-<a name="l00338"></a>00338                               <span class="stringliteral">"maximal intensity pixel is searched"</span>,
-<a name="l00339"></a>00339                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00340"></a>00340                               5.);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-y_box"</span>);
-<a name="l00343"></a>00343   cpl_parameterlist_append(list, p);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span>
-<a name="l00346"></a>00346   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.diff_tol"</span>,
-<a name="l00347"></a>00347                   CPL_TYPE_DOUBLE,
-<a name="l00348"></a>00348                               <span class="stringliteral">"Difference Tolearance: "</span>
-<a name="l00349"></a>00349                               <span class="stringliteral">"maximal tolerable difference of the "</span>
-<a name="l00350"></a>00350                               <span class="stringliteral">"resulting fit positions of the slitlet "</span>
-<a name="l00351"></a>00351                               <span class="stringliteral">"edges with respect to the expected positions"</span>,
-<a name="l00352"></a>00352                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00353"></a>00353                               2.);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-diff_toll"</span>);
-<a name="l00356"></a>00356   cpl_parameterlist_append(list, p);
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.qc_thresh_min"</span>,
-<a name="l00360"></a>00360                   CPL_TYPE_INT,
-<a name="l00361"></a>00361                               <span class="stringliteral">"qc_thresh_min"</span>,
-<a name="l00362"></a>00362                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00363"></a>00363                               0);
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-qc_thresh_min"</span>);
-<a name="l00366"></a>00366   cpl_parameterlist_append(list, p);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.qc_thresh_max"</span>,
-<a name="l00370"></a>00370                   CPL_TYPE_INT,
-<a name="l00371"></a>00371                               <span class="stringliteral">"qc_thresh_max"</span>,
-<a name="l00372"></a>00372                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00373"></a>00373                               49000);
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-qc_thresh_max"</span>);
-<a name="l00376"></a>00376   cpl_parameterlist_append(list, p);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   <span class="comment">/* NORD SOUTH TEST */</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387   <span class="comment">/* Clean Mean */</span>
-<a name="l00388"></a>00388   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.distortion.lower_rejection"</span>,
-<a name="l00389"></a>00389                   CPL_TYPE_DOUBLE,
-<a name="l00390"></a>00390                               <span class="stringliteral">"lower rejection: "</span>
-<a name="l00391"></a>00391                               <span class="stringliteral">"percentage of rejected low intensity pixels "</span>
-<a name="l00392"></a>00392                               <span class="stringliteral">"before averaging"</span>,
-<a name="l00393"></a>00393                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00394"></a>00394                                0.1,0.0,1.0);
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-lo_rejection"</span>);
-<a name="l00397"></a>00397   cpl_parameterlist_append(list, p);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.distortion.higher_rejection"</span>,
-<a name="l00400"></a>00400                   CPL_TYPE_DOUBLE,
-<a name="l00401"></a>00401                               <span class="stringliteral">"higher rejection: "</span>
-<a name="l00402"></a>00402                               <span class="stringliteral">"percentage of rejected high intensity pixels "</span>
-<a name="l00403"></a>00403                               <span class="stringliteral">"before averaging"</span>,
-<a name="l00404"></a>00404                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00405"></a>00405                               0.1,0.0,1.0);
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hi_rejection"</span>);
-<a name="l00408"></a>00408   cpl_parameterlist_append(list, p);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.mask_ind"</span>,
-<a name="l00412"></a>00412                   CPL_TYPE_BOOL,
-<a name="l00413"></a>00413                               <span class="stringliteral">"Mask Index: "</span>
-<a name="l00414"></a>00414                              <span class="stringliteral">"indicator if a bad pixel mask is applied or not"</span>,
-<a name="l00415"></a>00415                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00416"></a>00416                               FALSE);
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-mask_ind"</span>);
-<a name="l00419"></a>00419   cpl_parameterlist_append(list, p);
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422   <span class="comment">/* Gauss Convolution */</span>
-<a name="l00423"></a>00423   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.gauss_ind"</span>,
-<a name="l00424"></a>00424                   CPL_TYPE_BOOL,
-<a name="l00425"></a>00425                               <span class="stringliteral">"Gauss Index: "</span>,
-<a name="l00426"></a>00426                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00427"></a>00427                               FALSE);
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-gauss_ind"</span>);
-<a name="l00430"></a>00430   cpl_parameterlist_append(list, p);
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.kernel_half_width"</span>,
-<a name="l00433"></a>00433                   CPL_TYPE_INT,
-<a name="l00434"></a>00434                               <span class="stringliteral">"Kernel Half Width "</span>
-<a name="l00435"></a>00435                               <span class="stringliteral">"kernel half width of the Gaussian "</span>
-<a name="l00436"></a>00436                               <span class="stringliteral">"response function"</span>,
-<a name="l00437"></a>00437                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00438"></a>00438                                2);
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-khw"</span>);
-<a name="l00441"></a>00441   cpl_parameterlist_append(list, p);
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445   <span class="comment">/* North South Test */</span>
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.ns_half_width"</span>,
-<a name="l00450"></a>00450                   CPL_TYPE_INT,
-<a name="l00451"></a>00451                               <span class="stringliteral">"Half Width"</span>,
-<a name="l00452"></a>00452                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00453"></a>00453                                4);
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hw"</span>);
-<a name="l00456"></a>00456   cpl_parameterlist_append(list, p);
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>,
-<a name="l00459"></a>00459                   CPL_TYPE_DOUBLE,
-<a name="l00460"></a>00460                               <span class="stringliteral">"FWHM"</span>,
-<a name="l00461"></a>00461                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00462"></a>00462                                2.);
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-fwhm"</span>);
-<a name="l00465"></a>00465   cpl_parameterlist_append(list, p);
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_diff"</span>,
-<a name="l00469"></a>00469                   CPL_TYPE_DOUBLE,
-<a name="l00470"></a>00470                               <span class="stringliteral">"Minimum of Difference"</span>,
-<a name="l00471"></a>00471                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00472"></a>00472                               1.);
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-min_diff"</span>);
-<a name="l00475"></a>00475   cpl_parameterlist_append(list, p);
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.dev_tol"</span>,
-<a name="l00479"></a>00479                   CPL_TYPE_DOUBLE,
-<a name="l00480"></a>00480                               <span class="stringliteral">"Dev Tol"</span>,
-<a name="l00481"></a>00481                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00482"></a>00482                               20.);
-<a name="l00483"></a>00483 
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-dev_tol"</span>);
-<a name="l00486"></a>00486   cpl_parameterlist_append(list, p);
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_thresh_factor"</span>,
-<a name="l00490"></a>00490                   CPL_TYPE_DOUBLE,
-<a name="l00491"></a>00491                               <span class="stringliteral">"arcs threshold factor. "</span>
-<a name="l00492"></a>00492                               <span class="stringliteral">"median_value(image)+ kappa*sigma is the "</span>
-<a name="l00493"></a>00493                               <span class="stringliteral">"minimum intensity threshold of accepted image"</span>
-<a name="l00494"></a>00494                               <span class="stringliteral">"pixels"</span>,
-<a name="l00495"></a>00495                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00496"></a>00496                               0.33333);
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_thresh_factor"</span>);
-<a name="l00500"></a>00500   cpl_parameterlist_append(list, p);
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_min_arclen_factor"</span>,
-<a name="l00505"></a>00505                   CPL_TYPE_DOUBLE,
-<a name="l00506"></a>00506                               <span class="stringliteral">"factor which sets minimum arc length (1.0-2)"</span>,
-<a name="l00507"></a>00507                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00508"></a>00508                               1.19);
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_min_arclen_factor"</span>);
-<a name="l00512"></a>00512   cpl_parameterlist_append(list, p);
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_window_size"</span>,
-<a name="l00516"></a>00516                   CPL_TYPE_INT,
-<a name="l00517"></a>00517                               <span class="stringliteral">"Size of window for low pass fileter used in"</span>
-<a name="l00518"></a>00518                               <span class="stringliteral">"an horizzontal low pass filter to remove "</span>
-<a name="l00519"></a>00519                               <span class="stringliteral">"unwanted arcs (5-64)"</span>,
-<a name="l00520"></a>00520                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00521"></a>00521                               14);
-<a name="l00522"></a>00522 
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_window_size"</span>);
-<a name="l00525"></a>00525   cpl_parameterlist_append(list, p);
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.smooth_rad"</span>,
-<a name="l00529"></a>00529                   CPL_TYPE_INT,
-<a name="l00530"></a>00530                               <span class="stringliteral">"Size of smoothing factor (1-11) used to "</span>
-<a name="l00531"></a>00531                               <span class="stringliteral">"prevent for possible intensity drops from "</span>
-<a name="l00532"></a>00532                               <span class="stringliteral">"detector electronics on fibre illuminated "</span>
-<a name="l00533"></a>00533                               <span class="stringliteral">"slitlets (1-11)"</span>,
-<a name="l00534"></a>00534                               <span class="stringliteral">"sinfoni.distortion"</span>,
-<a name="l00535"></a>00535                               3);
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"smooth_rad"</span>);
-<a name="l00539"></a>00539   cpl_parameterlist_append(list, p);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_distortion_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_distortion_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_distortion_config.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  sinfo_distortion_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   }</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/* Find Lines */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/* indicates if the dispersion relation is already determined or not */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.calib_indicator"</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                               <span class="stringliteral">"Calib Indicator: "</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                               <span class="stringliteral">"FALSE: if the dispersion relation is already "</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                               <span class="stringliteral">"known, the routine can jump to the waveMap "</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="stringliteral">"section "</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               <span class="stringliteral">"TRUE: if the dispersion relation "</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                               <span class="stringliteral">"must first be determined"</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               TRUE);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-calib_indicator"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_diff_mean_med_col_int"</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                               <span class="stringliteral">"Minimum Of Difference: "</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                               <span class="stringliteral">"minimum difference of mean and median column "</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                               <span class="stringliteral">"intensity to carry out the cross correlation"</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               10.);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                           <span class="stringliteral">"dist-min_diff_mean_med_col_int"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/* half width of a box within which the line must sit */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.half_width"</span>,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                               <span class="stringliteral">"Half Width: "</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                               <span class="stringliteral">"half width of a box within which the line "</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                               <span class="stringliteral">"must be placed"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               7);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-hw"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">/* sigma of Gaussian of artificial model spectra */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.sigma"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               <span class="stringliteral">"Sigma: sigma of Gaussian which is convolved "</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                               <span class="stringliteral">"with the artificial spectrum generated using "</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                               <span class="stringliteral">"the line list"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                2.);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-sigma"</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="comment">/* Wavelength Calibration */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/* guess value for fwhm of emission lines */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fwhm"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                               <span class="stringliteral">"FWHM: initial guess value for the fwhm of "</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                               <span class="stringliteral">"the Gaussian used for the line fit"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                2.83);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fwhm"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/* minimum amplitude of a line to be fitted */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_amplitude"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                               <span class="stringliteral">"Minimum Of Amplitude: "</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                               <span class="stringliteral">"of the Gaussian to do the fit"</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                               5.);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-min_amplitude"</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/* maximal residual value for a valid fit */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.max_residual"</span>,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                               <span class="stringliteral">"Maximum Residuals value: "</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"beyond this value the fit is rejected"</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                               0.5);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-max_residual"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.n_a_coefficients"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                               <span class="stringliteral">"Number of A coefficients: number of "</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                               <span class="stringliteral">"polynomial coefficients for the "</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                               <span class="stringliteral">"dispersion relation"</span>,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                               4);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-n_a_coeffs"</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>  <span class="comment">/* # of polynomial coefficients used for the fit of the dispersion </span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">    coefficients */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.n_b_coefficients"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               <span class="stringliteral">"Number of B coefficients: "</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                               <span class="stringliteral">"number of polynomial coefficients for the "</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                               <span class="stringliteral">"polynomial fit of the dispersion coefficients"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                               2);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-n_b_coeffs"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>  <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.sigma_factor"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                               <span class="stringliteral">"Sigma Factor: "</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                               <span class="stringliteral">"Factor of the standard deviation of the "</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                               <span class="stringliteral">"polynomial coefficients of the dispersion "</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                               <span class="stringliteral">"relation beyond which the coefficients are "</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                               <span class="stringliteral">"not used for the fit"</span>,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                               1.5);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-sigma_factor"</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">       should be written into an ASCII file */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.write_coeffs_ind"</span>,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                               <span class="stringliteral">"Write Coefficients Index: "</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                               <span class="stringliteral">"indicates if the coefficients should "</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                               <span class="stringliteral">"be written into a file or not"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               TRUE);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-wcoeff_ind"</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="comment">/* indicates if the fit parameters should be written into an ASCII file */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.write_par_ind"</span>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                               <span class="stringliteral">"Write Parameter Index: "</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                               <span class="stringliteral">"indicates if the fit parameters should "</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                               <span class="stringliteral">"be written into a file or not "</span>,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                               TRUE);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-par_ind"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="comment">/* minimal distance of the slitlets in spectral direction */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.pixel_dist"</span>,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                          <span class="stringliteral">"Minimal Slitlets's Distance in spectral direction"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               15);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-pixel_dist"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="comment">/* allowed pixel position tolerance between estimated and fitted line </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">     position</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.pixel_tol"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                               <span class="stringliteral">"Pixel Tolerance: allowed pixel position "</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                               <span class="stringliteral">"tolerance between estimated and fitted "</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                   <span class="stringliteral">"line position"</span>,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                               5.0);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-pixel_tol"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="comment">/* Wavelength Map */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">/* indicator if wavelength map should be generated or not */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.wave_map_ind"</span>,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"Wavelength Map Indicator: "</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="stringliteral">"indicates if the wavelength calibration map "</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                               <span class="stringliteral">"should be generated (TRUE) or not (FALSE)"</span>,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               FALSE);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-wave_map_ind"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="comment">/* magnifying factor for FFT */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.mag_factor"</span>,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                               <span class="stringliteral">"Magnificator Factor: "</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                               <span class="stringliteral">"magnifying factor for the number of pixels "</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"in the columns needed for FFT"</span>,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                               8);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-mag_factor"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">/* Fits Slits */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">/* indicator if the fit of the slit edge positions is carried through or not */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.slit_pos_indicator"</span>,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                               <span class="stringliteral">"Slit Position Indicator: "</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                               <span class="stringliteral">"indicates if the fits of the slitlet "</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                               <span class="stringliteral">"edge positions should be carried "</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                               <span class="stringliteral">"through or not"</span>,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                               TRUE);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-slit_pos_ind"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">/* indicator if the fit model function is a Boltzmann function or not */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fit_boltz_indicator"</span>,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                   CPL_TYPE_BOOL ,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                               <span class="stringliteral">"Fit Boltzmann Indicator: "</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                               <span class="stringliteral">"positions is carried trough by using a "</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                               <span class="stringliteral">"Boltzmann function as model function"</span>,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                               TRUE);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fit_boltz_ind"</span>);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">/* indicator if the fit model function is a simple edge function or not */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.fit_edge_indicator"</span>,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                               <span class="stringliteral">"Fit Edge Indicator: "</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                               <span class="stringliteral">"positions is carried through by using a "</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                               <span class="stringliteral">"simple edge function as model function"</span>,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                               FALSE);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-fit_edge_ind"</span>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>  <span class="comment">/* indicator if the fit guess position are user </span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">    given or calculated automatically */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.estimate_indicator"</span>,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                               <span class="stringliteral">"Estimate Indicator: "</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                               <span class="stringliteral">"positions is carried through by using a list "</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                               <span class="stringliteral">"of estimated guess positions in a file (TRUE)"</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                               <span class="stringliteral">"or if the initial positions are calculated "</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                               <span class="stringliteral">"automatically (FALSE). The estimation case "</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                               <span class="stringliteral">"is more stable"</span>,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                               FALSE);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-estimate_ind"</span>);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">/* pixel length of the row box within which </span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">   the fit of the slitlet positions is carried out*/</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.box_length"</span>,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                               <span class="stringliteral">"Box Length: "</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                               <span class="stringliteral">"pixel length of the row box within "</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                               <span class="stringliteral">"which the fit is carried out"</span>,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                               32);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-box_len"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment">/* float box half width in spectral direction */</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.y_box"</span>,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                               <span class="stringliteral">"Y Box: half width of a small box in "</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                               <span class="stringliteral">"spectral direction within which the "</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                               <span class="stringliteral">"maximal intensity pixel is searched"</span>,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                               5.);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-y_box"</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.diff_tol"</span>,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                               <span class="stringliteral">"Difference Tolearance: "</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                               <span class="stringliteral">"maximal tolerable difference of the "</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                               <span class="stringliteral">"resulting fit positions of the slitlet "</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                               <span class="stringliteral">"edges with respect to the expected positions"</span>,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                               2.);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-diff_toll"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                               <span class="stringliteral">"qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                               0);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                               <span class="stringliteral">"qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                               49000);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"dist-qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="comment">/* NORD SOUTH TEST */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="comment">/* Clean Mean */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.distortion.lower_rejection"</span>,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                               <span class="stringliteral">"lower rejection: "</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                               <span class="stringliteral">"percentage of rejected low intensity pixels "</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                               <span class="stringliteral">"before averaging"</span>,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                                0.1,0.0,1.0);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-lo_rejection"</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.distortion.higher_rejection"</span>,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                               <span class="stringliteral">"higher rejection: "</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                               <span class="stringliteral">"percentage of rejected high intensity pixels "</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                               <span class="stringliteral">"before averaging"</span>,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hi_rejection"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.mask_ind"</span>,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                               <span class="stringliteral">"Mask Index: "</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                              <span class="stringliteral">"indicator if a bad pixel mask is applied or not"</span>,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                               FALSE);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-mask_ind"</span>);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="comment">/* Gauss Convolution */</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.gauss_ind"</span>,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                               <span class="stringliteral">"Gauss Index: "</span>,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                               FALSE);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-gauss_ind"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.kernel_half_width"</span>,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                               <span class="stringliteral">"Kernel Half Width "</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                               <span class="stringliteral">"kernel half width of the Gaussian "</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                               <span class="stringliteral">"response function"</span>,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                                2);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-khw"</span>);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="comment">/* North South Test */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.ns_half_width"</span>,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                               <span class="stringliteral">"Half Width"</span>,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                                4);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hw"</span>);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                               <span class="stringliteral">"FWHM"</span>,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                2.);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-fwhm"</span>);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.min_diff"</span>,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                               <span class="stringliteral">"Minimum of Difference"</span>,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                               1.);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-min_diff"</span>);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.dev_tol"</span>,</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                               <span class="stringliteral">"Dev Tol"</span>,</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                               20.);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-dev_tol"</span>);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_thresh_factor"</span>,</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                               <span class="stringliteral">"arcs threshold factor. "</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                               <span class="stringliteral">"median_value(image)+ kappa*sigma is the "</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                               <span class="stringliteral">"minimum intensity threshold of accepted image"</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                               <span class="stringliteral">"pixels"</span>,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                               0.33333);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_thresh_factor"</span>);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_min_arclen_factor"</span>,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                               <span class="stringliteral">"factor which sets minimum arc length (1.0-2)"</span>,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                               1.19);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_min_arclen_factor"</span>);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.arcs_window_size"</span>,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                               <span class="stringliteral">"Size of window for low pass fileter used in"</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                               <span class="stringliteral">"an horizzontal low pass filter to remove "</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                               <span class="stringliteral">"unwanted arcs (5-64)"</span>,</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                               14);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"arcs_window_size"</span>);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.distortion.smooth_rad"</span>,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                               <span class="stringliteral">"Size of smoothing factor (1-11) used to "</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                               <span class="stringliteral">"prevent for possible intensity drops from "</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                               <span class="stringliteral">"detector electronics on fibre illuminated "</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                               <span class="stringliteral">"slitlets (1-11)"</span>,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                               <span class="stringliteral">"sinfoni.distortion"</span>,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                               3);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"smooth_rad"</span>);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__distortion__config_8h_source.html b/html/sinfo__distortion__config_8h_source.html
index c747580..4072ebf 100644
--- a/html/sinfo__distortion__config_8h_source.html
+++ b/html/sinfo__distortion__config_8h_source.html
@@ -2,47 +2,78 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_distortion_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_distortion_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_distortion_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="keywordtype">void</span> sinfo_distortion_config_add(cpl_parameterlist *list);
-<a name="l00032"></a>00032 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_distortion_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_distortion_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keywordtype">void</span> sinfo_distortion_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dump_8c_source.html b/html/sinfo__dump_8c_source.html
index 3af8c35..920f2a6 100644
--- a/html/sinfo__dump_8c_source.html
+++ b/html/sinfo__dump_8c_source.html
@@ -2,379 +2,410 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dump.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dump.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                           *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the SINFONI   Pipeline                             *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2002,2003 European Southern Observatory                   *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                           *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                     *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                           *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                            *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                           *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software             *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                           */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/09/21 10:55:19 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_dump.c,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.9  2012/09/21 10:55:19  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * removed warning from clang</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.8  2012/03/02 08:42:20  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * fixed some typos on doxygen</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.7  2011/11/23 17:29:19  amodigli</span>
-<a name="l00033"></a>00033 <span class="comment"> * fix warning with cpl6</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.6  2008/01/17 07:54:04  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * shorten long lines</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.5  2007/08/11 10:45:47  amodigli</span>
-<a name="l00039"></a>00039 <span class="comment"> * upgrade to CPL4, fixed compil warnings</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Revision 1.4  2007/06/06 07:10:45  amodigli</span>
-<a name="l00042"></a>00042 <span class="comment"> * replaced tab with 4 spaces</span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"> * Revision 1.3  2006/10/20 08:07:05  amodigli</span>
-<a name="l00045"></a>00045 <span class="comment"> * using prefix sinfo_ in place of sinfoni_ for includes</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> * Revision 1.2  2006/10/16 07:26:23  amodigli</span>
-<a name="l00048"></a>00048 <span class="comment"> * shortened line length</span>
-<a name="l00049"></a>00049 <span class="comment"> *</span>
-<a name="l00050"></a>00050 <span class="comment"> * Revision 1.1  2006/08/09 12:20:11  amodigli</span>
-<a name="l00051"></a>00051 <span class="comment"> * added sinfo_dump.h sinfo_dump.c</span>
-<a name="l00052"></a>00052 <span class="comment"> *</span>
-<a name="l00053"></a>00053 <span class="comment"> * Revision 1.7  2006/05/12 15:02:05  jmlarsen</span>
-<a name="l00054"></a>00054 <span class="comment"> * Support NULL tags</span>
-<a name="l00055"></a>00055 <span class="comment"> *</span>
-<a name="l00056"></a>00056 <span class="comment"> * Revision 1.6  2006/02/28 09:15:22  jmlarsen</span>
-<a name="l00057"></a>00057 <span class="comment"> * Minor update</span>
-<a name="l00058"></a>00058 <span class="comment"> *</span>
-<a name="l00059"></a>00059 <span class="comment"> * Revision 1.5  2006/02/15 13:19:15  jmlarsen</span>
-<a name="l00060"></a>00060 <span class="comment"> * Reduced source code max. line length</span>
-<a name="l00061"></a>00061 <span class="comment"> *</span>
-<a name="l00062"></a>00062 <span class="comment"> * Revision 1.4  2005/12/19 16:17:56  jmlarsen</span>
-<a name="l00063"></a>00063 <span class="comment"> * Replaced bool -> int</span>
-<a name="l00064"></a>00064 <span class="comment"> *</span>
-<a name="l00065"></a>00065 <span class="comment"> */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>
-<a name="l00073"></a>00073 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="preprocessor">#include <sinfo_dump.h></span>
-<a name="l00084"></a>00084 <span class="preprocessor">#include <sinfo_utils.h></span>
-<a name="l00085"></a>00085 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00086"></a>00086 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00087"></a>00087 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00101"></a>00101 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 cpl_error_code
-<a name="l00103"></a>00103 sinfo_print_cpl_propertylist(<span class="keyword">const</span> cpl_propertylist *pl, <span class="keywordtype">long</span> low, <span class="keywordtype">long</span> high)
-<a name="l00104"></a>00104 {
-<a name="l00105"></a>00105     cpl_property *prop;
-<a name="l00106"></a>00106     <span class="keywordtype">long</span> i = 0;
-<a name="l00107"></a>00107     
-<a name="l00108"></a>00108     assure (0 <= low && high <= cpl_propertylist_get_size(pl) && low <= high,
-<a name="l00109"></a>00109         CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Illegal range"</span>);
-<a name="l00110"></a>00110     <span class="comment">/* Printing an empty range is allowed but only when low == high */</span>
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="keywordflow">if</span> (pl == NULL){
-<a name="l00113"></a>00113     sinfo_msg(<span class="stringliteral">"NULL"</span>);
-<a name="l00114"></a>00114     }
-<a name="l00115"></a>00115     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cpl_propertylist_is_empty(pl))  {
-<a name="l00116"></a>00116     sinfo_msg(<span class="stringliteral">"[Empty property list]"</span>);
-<a name="l00117"></a>00117     }
-<a name="l00118"></a>00118     <span class="keywordflow">else</span>    
-<a name="l00119"></a>00119     <span class="keywordflow">for</span> (i = low; i < high; i++)
-<a name="l00120"></a>00120         {
-<a name="l00121"></a>00121         <span class="comment">/* bug workaround: remove const cast when declaration </span>
-<a name="l00122"></a>00122 <span class="comment">           of cpl_propertylist_get() is changed */</span>
-<a name="l00123"></a>00123         prop = cpl_propertylist_get((cpl_propertylist *)pl, i);
-<a name="l00124"></a>00124         check (sinfo_print_cpl_property(prop), 
-<a name="l00125"></a>00125                 <span class="stringliteral">"Error printing property"</span>);
-<a name="l00126"></a>00126         }
-<a name="l00127"></a>00127     
-<a name="l00128"></a>00128   cleanup:
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00130"></a>00130 }
-<a name="l00131"></a>00131 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00139"></a>00139 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 cpl_error_code
-<a name="l00142"></a>00142 sinfo_print_cpl_property(<span class="keyword">const</span> cpl_property *prop)
-<a name="l00143"></a>00143 {
-<a name="l00144"></a>00144     cpl_type t;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="keywordflow">if</span> (prop == NULL)
-<a name="l00147"></a>00147     {
-<a name="l00148"></a>00148         sinfo_msg(<span class="stringliteral">"NULL"</span>);
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150     <span class="keywordflow">else</span>
-<a name="l00151"></a>00151     {   
-<a name="l00152"></a>00152         <span class="comment">/* print property with this formatting</span>
-<a name="l00153"></a>00153 <span class="comment">           NAME =</span>
-<a name="l00154"></a>00154 <span class="comment">             VALUE</span>
-<a name="l00155"></a>00155 <span class="comment">           COMMENT</span>
-<a name="l00156"></a>00156 <span class="comment">        */</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158         <span class="comment">/* print name */</span>
-<a name="l00159"></a>00159         
-<a name="l00160"></a>00160         sinfo_msg(<span class="stringliteral">"%s ="</span>, cpl_property_get_name(prop));
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162         <span class="comment">/* print value */</span>
-<a name="l00163"></a>00163         
-<a name="l00164"></a>00164         check( t = cpl_property_get_type(prop), 
-<a name="l00165"></a>00165                   <span class="stringliteral">"Could not read property type"</span>);
-<a name="l00166"></a>00166         
-<a name="l00167"></a>00167         <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))
-<a name="l00168"></a>00168         {
-<a name="l00169"></a>00169         <span class="keywordflow">case</span> CPL_TYPE_CHAR:
-<a name="l00170"></a>00170             <span class="keywordflow">if</span> (t & CPL_TYPE_FLAG_ARRAY)  <span class="comment">/* if type is string */</span>
-<a name="l00171"></a>00171             {
-<a name="l00172"></a>00172                 sinfo_msg(<span class="stringliteral">"  '%s'"</span>, cpl_property_get_string(prop));
-<a name="l00173"></a>00173             }
-<a name="l00174"></a>00174             <span class="keywordflow">else</span>                          <span class="comment">/* an ordinary char */</span>
-<a name="l00175"></a>00175             {
-<a name="l00176"></a>00176                 sinfo_msg(<span class="stringliteral">"  %c"</span>, cpl_property_get_char(prop));
-<a name="l00177"></a>00177             }
-<a name="l00178"></a>00178             <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179         <span class="keywordflow">case</span> CPL_TYPE_BOOL:    <span class="keywordflow">if</span> (cpl_property_get_bool(prop))
-<a name="l00180"></a>00180             {sinfo_msg(<span class="stringliteral">"  true"</span>);}
-<a name="l00181"></a>00181         <span class="keywordflow">else</span>
-<a name="l00182"></a>00182             {sinfo_msg(<span class="stringliteral">"  false"</span>);}
-<a name="l00183"></a>00183             <span class="keywordflow">break</span>;
-<a name="l00184"></a>00184         <span class="keywordflow">case</span> CPL_TYPE_UCHAR: 
-<a name="l00185"></a>00185       sinfo_msg(<span class="stringliteral">"%c"</span>,cpl_property_get_char(prop)); 
-<a name="l00186"></a>00186           <span class="keywordflow">break</span>;
-<a name="l00187"></a>00187         <span class="keywordflow">case</span> CPL_TYPE_INT:   
-<a name="l00188"></a>00188       sinfo_msg(<span class="stringliteral">"%d"</span>,cpl_property_get_int(prop)); 
-<a name="l00189"></a>00189           <span class="keywordflow">break</span>;
-<a name="l00190"></a>00190         <span class="keywordflow">case</span> CPL_TYPE_UINT:  
-<a name="l00191"></a>00191           sinfo_msg(<span class="stringliteral">"%d"</span>,cpl_property_get_int(prop)); 
-<a name="l00192"></a>00192           <span class="keywordflow">break</span>;
-<a name="l00193"></a>00193         <span class="keywordflow">case</span> CPL_TYPE_LONG: 
-<a name="l00194"></a>00194           sinfo_msg(<span class="stringliteral">"%ld"</span>,cpl_property_get_long(prop)); 
-<a name="l00195"></a>00195           <span class="keywordflow">break</span>;
-<a name="l00196"></a>00196         <span class="keywordflow">case</span> CPL_TYPE_ULONG: 
-<a name="l00197"></a>00197           sinfo_msg(<span class="stringliteral">"%ld"</span>,cpl_property_get_long(prop)); 
-<a name="l00198"></a>00198           <span class="keywordflow">break</span>;
-<a name="l00199"></a>00199         <span class="keywordflow">case</span> CPL_TYPE_FLOAT: 
-<a name="l00200"></a>00200           sinfo_msg(<span class="stringliteral">"%f"</span>,cpl_property_get_float(prop)); 
-<a name="l00201"></a>00201           <span class="keywordflow">break</span>;
-<a name="l00202"></a>00202         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: 
-<a name="l00203"></a>00203           sinfo_msg(<span class="stringliteral">"%f"</span>,cpl_property_get_double(prop)); 
-<a name="l00204"></a>00204           <span class="keywordflow">break</span>;
-<a name="l00205"></a>00205         <span class="keywordflow">case</span> CPL_TYPE_POINTER: 
-<a name="l00206"></a>00206           sinfo_msg(<span class="stringliteral">"POINTER"</span>);    
-<a name="l00207"></a>00207           <span class="keywordflow">break</span>;
-<a name="l00208"></a>00208         <span class="keywordflow">case</span> CPL_TYPE_INVALID: 
-<a name="l00209"></a>00209           sinfo_msg(<span class="stringliteral">"INVALID"</span>);    
-<a name="l00210"></a>00210           <span class="keywordflow">break</span>;
-<a name="l00211"></a>00211         <span class="keywordflow">default</span>: 
-<a name="l00212"></a>00212           sinfo_msg(<span class="stringliteral">"  unrecognized property"</span>);  
-<a name="l00213"></a>00213           <span class="keywordflow">break</span>;
-<a name="l00214"></a>00214         }
-<a name="l00215"></a>00215         
-<a name="l00216"></a>00216         <span class="comment">/* Is this property an array? */</span>
-<a name="l00217"></a>00217         <span class="keywordflow">if</span> (t & CPL_TYPE_FLAG_ARRAY){
-<a name="l00218"></a>00218            cpl_msg_info(cpl_func,<span class="stringliteral">"  (array size = %"</span> CPL_SIZE_FORMAT <span class="stringliteral">" )"</span>, 
-<a name="l00219"></a>00219               cpl_property_get_size(prop));
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222         <span class="comment">/* Print comment */</span>
-<a name="l00223"></a>00223         <span class="keywordflow">if</span> (cpl_property_get_comment(prop) != NULL){
-<a name="l00224"></a>00224         sinfo_msg(<span class="stringliteral">"    %s"</span>, cpl_property_get_comment(prop));
-<a name="l00225"></a>00225         }
-<a name="l00226"></a>00226     }
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228   cleanup:
-<a name="l00229"></a>00229     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00240"></a>00240 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00241"></a>00241 cpl_error_code
-<a name="l00242"></a>00242 sinfo_print_cpl_frameset(<span class="keyword">const</span> cpl_frameset *frames)
-<a name="l00243"></a>00243 {
-<a name="l00244"></a>00244     <span class="comment">/* Two special cases: a NULL frame set and an empty frame set */</span>
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     <span class="keywordflow">if</span> (frames == NULL)
-<a name="l00247"></a>00247     {
-<a name="l00248"></a>00248         sinfo_msg(<span class="stringliteral">"NULL"</span>);
-<a name="l00249"></a>00249     }
-<a name="l00250"></a>00250     <span class="keywordflow">else</span>
-<a name="l00251"></a>00251     {
-<a name="l00252"></a>00252         <span class="keyword">const</span> cpl_frame *f = NULL;
-<a name="l00253"></a>00253         check( f = cpl_frameset_get_first_const(frames), 
-<a name="l00254"></a>00254                    <span class="stringliteral">"Error reading frameset"</span>);
-<a name="l00255"></a>00255         
-<a name="l00256"></a>00256         <span class="keywordflow">if</span> (f == NULL)
-<a name="l00257"></a>00257         {
-<a name="l00258"></a>00258             sinfo_msg(<span class="stringliteral">"[Empty frame set]"</span>);
-<a name="l00259"></a>00259         }
-<a name="l00260"></a>00260         <span class="keywordflow">else</span>
-<a name="l00261"></a>00261         {
-<a name="l00262"></a>00262             <span class="keywordflow">while</span>(f != NULL)
-<a name="l00263"></a>00263             {
-<a name="l00264"></a>00264                 check( sinfo_print_cpl_frame(f), 
-<a name="l00265"></a>00265                                   <span class="stringliteral">"Could not print frame"</span>);
-<a name="l00266"></a>00266                 check( f = cpl_frameset_get_next_const(frames), 
-<a name="l00267"></a>00267                                   <span class="stringliteral">"Error reading frameset"</span>);
-<a name="l00268"></a>00268             }
-<a name="l00269"></a>00269         }
-<a name="l00270"></a>00270     }
-<a name="l00271"></a>00271     
-<a name="l00272"></a>00272   cleanup:
-<a name="l00273"></a>00273     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00274"></a>00274 }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00284"></a>00284 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00285"></a>00285 cpl_error_code
-<a name="l00286"></a>00286 sinfo_print_cpl_frame(<span class="keyword">const</span> cpl_frame *f)
-<a name="l00287"></a>00287 {
-<a name="l00288"></a>00288     <span class="keywordflow">if</span> (f == NULL)
-<a name="l00289"></a>00289     {
-<a name="l00290"></a>00290         sinfo_msg(<span class="stringliteral">"NULL"</span>);
-<a name="l00291"></a>00291     }
-<a name="l00292"></a>00292     <span class="keywordflow">else</span>
-<a name="l00293"></a>00293     {
-<a name="l00294"></a>00294         sinfo_msg(<span class="stringliteral">"%-7s %-20s '%s'"</span>, 
-<a name="l00295"></a>00295              sinfo_tostring_cpl_frame_group(cpl_frame_get_group(f)),
-<a name="l00296"></a>00296              cpl_frame_get_tag(f) != NULL ? 
-<a name="l00297"></a>00297                      cpl_frame_get_tag(f) : <span class="stringliteral">"Null"</span>,
-<a name="l00298"></a>00298              cpl_frame_get_filename(f));
-<a name="l00299"></a>00299         
-<a name="l00300"></a>00300         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"type \t= %s"</span>,   
-<a name="l00301"></a>00301             sinfo_tostring_cpl_frame_type (cpl_frame_get_type (f)));
-<a name="l00302"></a>00302         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"group \t= %s"</span>,  
-<a name="l00303"></a>00303             sinfo_tostring_cpl_frame_group(cpl_frame_get_group(f)));
-<a name="l00304"></a>00304         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"level \t= %s"</span>,  
-<a name="l00305"></a>00305             sinfo_tostring_cpl_frame_level(cpl_frame_get_level(f)));
-<a name="l00306"></a>00306     }
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00309"></a>00309 }
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00317"></a>00317 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00318"></a>00318 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00319"></a>00319 sinfo_tostring_cpl_frame_type(cpl_frame_type ft)
-<a name="l00320"></a>00320 {    
-<a name="l00321"></a>00321     <span class="keywordflow">switch</span>(ft)
-<a name="l00322"></a>00322     {
-<a name="l00323"></a>00323     <span class="keywordflow">case</span> CPL_FRAME_TYPE_NONE:   <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;
-<a name="l00324"></a>00324     <span class="keywordflow">case</span> CPL_FRAME_TYPE_IMAGE:  <span class="keywordflow">return</span> <span class="stringliteral">"IMAGE"</span>;
-<a name="l00325"></a>00325     <span class="keywordflow">case</span> CPL_FRAME_TYPE_MATRIX: <span class="keywordflow">return</span> <span class="stringliteral">"MATRIX"</span>;
-<a name="l00326"></a>00326     <span class="keywordflow">case</span> CPL_FRAME_TYPE_TABLE:  <span class="keywordflow">return</span> <span class="stringliteral">"TABLE"</span>;
-<a name="l00327"></a>00327     <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame type"</span>;
-<a name="l00328"></a>00328     }
-<a name="l00329"></a>00329 }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00337"></a>00337 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00338"></a>00338 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00339"></a>00339 sinfo_tostring_cpl_frame_group(cpl_frame_group fg)
-<a name="l00340"></a>00340 {
-<a name="l00341"></a>00341     <span class="keywordflow">switch</span>(fg)
-<a name="l00342"></a>00342     {
-<a name="l00343"></a>00343     <span class="keywordflow">case</span> CPL_FRAME_GROUP_NONE:    <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;
-<a name="l00344"></a>00344     <span class="keywordflow">case</span> CPL_FRAME_GROUP_RAW:     <span class="keywordflow">return</span> CPL_FRAME_GROUP_RAW_ID;
-<a name="l00345"></a>00345     <span class="keywordflow">case</span> CPL_FRAME_GROUP_CALIB:   <span class="keywordflow">return</span> CPL_FRAME_GROUP_CALIB_ID;
-<a name="l00346"></a>00346     <span class="keywordflow">case</span> CPL_FRAME_GROUP_PRODUCT: <span class="keywordflow">return</span> CPL_FRAME_GROUP_PRODUCT_ID;
-<a name="l00347"></a>00347     <span class="keywordflow">default</span>:
-<a name="l00348"></a>00348         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame group"</span>;
-<a name="l00349"></a>00349     }
-<a name="l00350"></a>00350 }
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00358"></a>00358 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00359"></a>00359 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00360"></a>00360 sinfo_tostring_cpl_frame_level(cpl_frame_level fl)
-<a name="l00361"></a>00361 {
-<a name="l00362"></a>00362     
-<a name="l00363"></a>00363     <span class="keywordflow">switch</span>(fl)
-<a name="l00364"></a>00364     {
-<a name="l00365"></a>00365     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_NONE:        <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;
-<a name="l00366"></a>00366     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_TEMPORARY:   <span class="keywordflow">return</span> <span class="stringliteral">"TEMPORARY"</span>;
-<a name="l00367"></a>00367     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_INTERMEDIATE:<span class="keywordflow">return</span> <span class="stringliteral">"INTERMEDIATE"</span>;
-<a name="l00368"></a>00368     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_FINAL:       <span class="keywordflow">return</span> <span class="stringliteral">"FINAL"</span>;
-<a name="l00369"></a>00369     <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame level"</span>;
-<a name="l00370"></a>00370     }
-<a name="l00371"></a>00371 }
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00380"></a>00380 <span class="comment">/*----------------------------------------------------------------*/</span>
-<a name="l00381"></a>00381 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00382"></a>00382 sinfo_tostring_cpl_type(cpl_type t)
-<a name="l00383"></a>00383 {
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     <span class="comment">/* Note that CPL_TYPE_STRING is shorthand</span>
-<a name="l00386"></a>00386 <span class="comment">       for CPL_TYPE_CHAR | CPL_TYPE_FLAG_ARRAY . */</span>
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="keywordflow">if</span> (!(t & CPL_TYPE_FLAG_ARRAY))
-<a name="l00389"></a>00389     <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))
-<a name="l00390"></a>00390         {
-<a name="l00391"></a>00391         <span class="keywordflow">case</span> CPL_TYPE_CHAR:       <span class="keywordflow">return</span> <span class="stringliteral">"char"</span>;
-<a name="l00392"></a>00392         <span class="keywordflow">case</span> CPL_TYPE_UCHAR:      <span class="keywordflow">return</span> <span class="stringliteral">"uchar"</span>;
-<a name="l00393"></a>00393         <span class="keywordflow">case</span> CPL_TYPE_BOOL:       <span class="keywordflow">return</span> <span class="stringliteral">"boolean"</span>;
-<a name="l00394"></a>00394         <span class="keywordflow">case</span> CPL_TYPE_INT:        <span class="keywordflow">return</span> <span class="stringliteral">"int"</span>;
-<a name="l00395"></a>00395         <span class="keywordflow">case</span> CPL_TYPE_UINT:       <span class="keywordflow">return</span> <span class="stringliteral">"uint"</span>;
-<a name="l00396"></a>00396         <span class="keywordflow">case</span> CPL_TYPE_LONG:       <span class="keywordflow">return</span> <span class="stringliteral">"long"</span>;
-<a name="l00397"></a>00397         <span class="keywordflow">case</span> CPL_TYPE_ULONG:      <span class="keywordflow">return</span> <span class="stringliteral">"ulong"</span>;
-<a name="l00398"></a>00398         <span class="keywordflow">case</span> CPL_TYPE_FLOAT:      <span class="keywordflow">return</span> <span class="stringliteral">"float"</span>;
-<a name="l00399"></a>00399         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:     <span class="keywordflow">return</span> <span class="stringliteral">"double"</span>;
-<a name="l00400"></a>00400         <span class="keywordflow">case</span> CPL_TYPE_POINTER:    <span class="keywordflow">return</span> <span class="stringliteral">"pointer"</span>;
-<a name="l00401"></a>00401 <span class="comment">/* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex"; */</span>
-<a name="l00402"></a>00402         <span class="keywordflow">case</span> CPL_TYPE_INVALID:    <span class="keywordflow">return</span> <span class="stringliteral">"invalid"</span>;
-<a name="l00403"></a>00403         <span class="keywordflow">default</span>:
-<a name="l00404"></a>00404         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized type"</span>;
-<a name="l00405"></a>00405         }
-<a name="l00406"></a>00406     <span class="keywordflow">else</span>
-<a name="l00407"></a>00407     <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))
-<a name="l00408"></a>00408         {
-<a name="l00409"></a>00409         <span class="keywordflow">case</span> CPL_TYPE_CHAR:       <span class="keywordflow">return</span> <span class="stringliteral">"string (char array)"</span>;
-<a name="l00410"></a>00410         <span class="keywordflow">case</span> CPL_TYPE_UCHAR:      <span class="keywordflow">return</span> <span class="stringliteral">"uchar array"</span>;
-<a name="l00411"></a>00411         <span class="keywordflow">case</span> CPL_TYPE_BOOL:       <span class="keywordflow">return</span> <span class="stringliteral">"boolean array"</span>;
-<a name="l00412"></a>00412         <span class="keywordflow">case</span> CPL_TYPE_INT:        <span class="keywordflow">return</span> <span class="stringliteral">"int array"</span>;
-<a name="l00413"></a>00413         <span class="keywordflow">case</span> CPL_TYPE_UINT:       <span class="keywordflow">return</span> <span class="stringliteral">"uint array"</span>;
-<a name="l00414"></a>00414         <span class="keywordflow">case</span> CPL_TYPE_LONG:       <span class="keywordflow">return</span> <span class="stringliteral">"long array"</span>;
-<a name="l00415"></a>00415         <span class="keywordflow">case</span> CPL_TYPE_ULONG:      <span class="keywordflow">return</span> <span class="stringliteral">"ulong array"</span>;
-<a name="l00416"></a>00416         <span class="keywordflow">case</span> CPL_TYPE_FLOAT:      <span class="keywordflow">return</span> <span class="stringliteral">"float array"</span>;
-<a name="l00417"></a>00417         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:     <span class="keywordflow">return</span> <span class="stringliteral">"double array"</span>;
-<a name="l00418"></a>00418         <span class="keywordflow">case</span> CPL_TYPE_POINTER:    <span class="keywordflow">return</span> <span class="stringliteral">"pointer array"</span>;
-<a name="l00419"></a>00419 <span class="comment">/* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex array"; */</span>
-<a name="l00420"></a>00420         <span class="keywordflow">case</span> CPL_TYPE_INVALID:    <span class="keywordflow">return</span> <span class="stringliteral">"invalid (array)"</span>;
-<a name="l00421"></a>00421         <span class="keywordflow">default</span>:
-<a name="l00422"></a>00422         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized type"</span>;
-<a name="l00423"></a>00423         }
-<a name="l00424"></a>00424 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dump.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                           *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the SINFONI   Pipeline                             *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2002,2003 European Southern Observatory                   *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                     *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                            *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software             *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                           */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/09/21 10:55:19 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_dump.c,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.9  2012/09/21 10:55:19  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * removed warning from clang</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.8  2012/03/02 08:42:20  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * fixed some typos on doxygen</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.7  2011/11/23 17:29:19  amodigli</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * fix warning with cpl6</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.6  2008/01/17 07:54:04  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * shorten long lines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.5  2007/08/11 10:45:47  amodigli</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * upgrade to CPL4, fixed compil warnings</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.4  2007/06/06 07:10:45  amodigli</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * replaced tab with 4 spaces</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.3  2006/10/20 08:07:05  amodigli</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * using prefix sinfo_ in place of sinfoni_ for includes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> * Revision 1.2  2006/10/16 07:26:23  amodigli</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> * shortened line length</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> * Revision 1.1  2006/08/09 12:20:11  amodigli</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> * added sinfo_dump.h sinfo_dump.c</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> * Revision 1.7  2006/05/12 15:02:05  jmlarsen</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * Support NULL tags</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> * Revision 1.6  2006/02/28 09:15:22  jmlarsen</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> * Minor update</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * Revision 1.5  2006/02/15 13:19:15  jmlarsen</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * Reduced source code max. line length</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> * Revision 1.4  2005/12/19 16:17:56  jmlarsen</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> * Replaced bool -> int</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#include <sinfo_dump.h></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#include <sinfo_utils.h></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> cpl_error_code</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_print_cpl_propertylist(<span class="keyword">const</span> cpl_propertylist *pl, <span class="keywordtype">long</span> low, <span class="keywordtype">long</span> high)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_property *prop;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordtype">long</span> i = 0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     assure (0 <= low && high <= cpl_propertylist_get_size(pl) && low <= high,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         CPL_ERROR_ILLEGAL_INPUT, <span class="stringliteral">"Illegal range"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/* Printing an empty range is allowed but only when low == high */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordflow">if</span> (pl == NULL){</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     sinfo_msg(<span class="stringliteral">"NULL"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cpl_propertylist_is_empty(pl))  {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     sinfo_msg(<span class="stringliteral">"[Empty property list]"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">else</span>    </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordflow">for</span> (i = low; i < high; i++)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         <span class="comment">/* bug workaround: remove const cast when declaration </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">           of cpl_propertylist_get() is changed */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         prop = cpl_propertylist_get((cpl_propertylist *)pl, i);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         check (sinfo_print_cpl_property(prop), </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                 <span class="stringliteral">"Error printing property"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cleanup:</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> cpl_error_code</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> sinfo_print_cpl_property(<span class="keyword">const</span> cpl_property *prop)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cpl_type t;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordflow">if</span> (prop == NULL)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         sinfo_msg(<span class="stringliteral">"NULL"</span>);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     {   </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <span class="comment">/* print property with this formatting</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">           NAME =</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">             VALUE</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">           COMMENT</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="comment">/* print name */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         sinfo_msg(<span class="stringliteral">"%s ="</span>, cpl_property_get_name(prop));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="comment">/* print value */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         check( t = cpl_property_get_type(prop), </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                   <span class="stringliteral">"Could not read property type"</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         <span class="keywordflow">case</span> CPL_TYPE_CHAR:</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             <span class="keywordflow">if</span> (t & CPL_TYPE_FLAG_ARRAY)  <span class="comment">/* if type is string */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                 sinfo_msg(<span class="stringliteral">"  '%s'"</span>, cpl_property_get_string(prop));</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>             }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             <span class="keywordflow">else</span>                          <span class="comment">/* an ordinary char */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>             {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                 sinfo_msg(<span class="stringliteral">"  %c"</span>, cpl_property_get_char(prop));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>             }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         <span class="keywordflow">case</span> CPL_TYPE_BOOL:    <span class="keywordflow">if</span> (cpl_property_get_bool(prop))</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             {sinfo_msg(<span class="stringliteral">"  true"</span>);}</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>             {sinfo_msg(<span class="stringliteral">"  false"</span>);}</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         <span class="keywordflow">case</span> CPL_TYPE_UCHAR: </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       sinfo_msg(<span class="stringliteral">"%c"</span>,cpl_property_get_char(prop)); </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="keywordflow">case</span> CPL_TYPE_INT:   </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       sinfo_msg(<span class="stringliteral">"%d"</span>,cpl_property_get_int(prop)); </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="keywordflow">case</span> CPL_TYPE_UINT:  </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>           sinfo_msg(<span class="stringliteral">"%d"</span>,cpl_property_get_int(prop)); </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         <span class="keywordflow">case</span> CPL_TYPE_LONG: </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>           sinfo_msg(<span class="stringliteral">"%ld"</span>,cpl_property_get_long(prop)); </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <span class="keywordflow">case</span> CPL_TYPE_ULONG: </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>           sinfo_msg(<span class="stringliteral">"%ld"</span>,cpl_property_get_long(prop)); </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         <span class="keywordflow">case</span> CPL_TYPE_FLOAT: </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>           sinfo_msg(<span class="stringliteral">"%f"</span>,cpl_property_get_float(prop)); </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE: </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>           sinfo_msg(<span class="stringliteral">"%f"</span>,cpl_property_get_double(prop)); </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="keywordflow">case</span> CPL_TYPE_POINTER: </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>           sinfo_msg(<span class="stringliteral">"POINTER"</span>);    </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         <span class="keywordflow">case</span> CPL_TYPE_INVALID: </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>           sinfo_msg(<span class="stringliteral">"INVALID"</span>);    </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>           sinfo_msg(<span class="stringliteral">"  unrecognized property"</span>);  </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         <span class="comment">/* Is this property an array? */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         <span class="keywordflow">if</span> (t & CPL_TYPE_FLAG_ARRAY){</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>            cpl_msg_info(cpl_func,<span class="stringliteral">"  (array size = %"</span> CPL_SIZE_FORMAT <span class="stringliteral">" )"</span>, </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>               cpl_property_get_size(prop));</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         <span class="comment">/* Print comment */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="keywordflow">if</span> (cpl_property_get_comment(prop) != NULL){</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         sinfo_msg(<span class="stringliteral">"    %s"</span>, cpl_property_get_comment(prop));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   cleanup:</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> cpl_error_code</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> sinfo_print_cpl_frameset(<span class="keyword">const</span> cpl_frameset *frames)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="comment">/* Two special cases: a NULL frame set and an empty frame set */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">if</span> (frames == NULL)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         sinfo_msg(<span class="stringliteral">"NULL"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         <span class="keyword">const</span> cpl_frame *f = NULL;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         check( f = cpl_frameset_get_first_const(frames), </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                    <span class="stringliteral">"Error reading frameset"</span>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         <span class="keywordflow">if</span> (f == NULL)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>             sinfo_msg(<span class="stringliteral">"[Empty frame set]"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>             <span class="keywordflow">while</span>(f != NULL)</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>             {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                 check( sinfo_print_cpl_frame(f), </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                                   <span class="stringliteral">"Could not print frame"</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                 check( f = cpl_frameset_get_next_const(frames), </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                                   <span class="stringliteral">"Error reading frameset"</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>             }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   cleanup:</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> cpl_error_code</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> sinfo_print_cpl_frame(<span class="keyword">const</span> cpl_frame *f)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">if</span> (f == NULL)</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         sinfo_msg(<span class="stringliteral">"NULL"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         sinfo_msg(<span class="stringliteral">"%-7s %-20s '%s'"</span>, </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>              sinfo_tostring_cpl_frame_group(cpl_frame_get_group(f)),</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>              cpl_frame_get_tag(f) != NULL ? </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                      cpl_frame_get_tag(f) : <span class="stringliteral">"Null"</span>,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>              cpl_frame_get_filename(f));</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"type \t= %s"</span>,   </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>             sinfo_tostring_cpl_frame_type (cpl_frame_get_type (f)));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"group \t= %s"</span>,  </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>             sinfo_tostring_cpl_frame_group(cpl_frame_get_group(f)));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"level \t= %s"</span>,  </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>             sinfo_tostring_cpl_frame_level(cpl_frame_get_level(f)));</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> sinfo_tostring_cpl_frame_type(cpl_frame_type ft)</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> {    </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordflow">switch</span>(ft)</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordflow">case</span> CPL_FRAME_TYPE_NONE:   <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordflow">case</span> CPL_FRAME_TYPE_IMAGE:  <span class="keywordflow">return</span> <span class="stringliteral">"IMAGE"</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="keywordflow">case</span> CPL_FRAME_TYPE_MATRIX: <span class="keywordflow">return</span> <span class="stringliteral">"MATRIX"</span>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordflow">case</span> CPL_FRAME_TYPE_TABLE:  <span class="keywordflow">return</span> <span class="stringliteral">"TABLE"</span>;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame type"</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> sinfo_tostring_cpl_frame_group(cpl_frame_group fg)</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordflow">switch</span>(fg)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordflow">case</span> CPL_FRAME_GROUP_NONE:    <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">case</span> CPL_FRAME_GROUP_RAW:     <span class="keywordflow">return</span> CPL_FRAME_GROUP_RAW_ID;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">case</span> CPL_FRAME_GROUP_CALIB:   <span class="keywordflow">return</span> CPL_FRAME_GROUP_CALIB_ID;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">case</span> CPL_FRAME_GROUP_PRODUCT: <span class="keywordflow">return</span> CPL_FRAME_GROUP_PRODUCT_ID;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame group"</span>;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> }</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> sinfo_tostring_cpl_frame_level(cpl_frame_level fl)</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordflow">switch</span>(fl)</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_NONE:        <span class="keywordflow">return</span> <span class="stringliteral">"NONE"</span>;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_TEMPORARY:   <span class="keywordflow">return</span> <span class="stringliteral">"TEMPORARY"</span>;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_INTERMEDIATE:<span class="keywordflow">return</span> <span class="stringliteral">"INTERMEDIATE"</span>;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">case</span> CPL_FRAME_LEVEL_FINAL:       <span class="keywordflow">return</span> <span class="stringliteral">"FINAL"</span>;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized frame level"</span>;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> }</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">/*----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> sinfo_tostring_cpl_type(cpl_type t)</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="comment">/* Note that CPL_TYPE_STRING is shorthand</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment">       for CPL_TYPE_CHAR | CPL_TYPE_FLAG_ARRAY . */</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">if</span> (!(t & CPL_TYPE_FLAG_ARRAY))</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keywordflow">case</span> CPL_TYPE_CHAR:       <span class="keywordflow">return</span> <span class="stringliteral">"char"</span>;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <span class="keywordflow">case</span> CPL_TYPE_UCHAR:      <span class="keywordflow">return</span> <span class="stringliteral">"uchar"</span>;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         <span class="keywordflow">case</span> CPL_TYPE_BOOL:       <span class="keywordflow">return</span> <span class="stringliteral">"boolean"</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         <span class="keywordflow">case</span> CPL_TYPE_INT:        <span class="keywordflow">return</span> <span class="stringliteral">"int"</span>;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">case</span> CPL_TYPE_UINT:       <span class="keywordflow">return</span> <span class="stringliteral">"uint"</span>;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         <span class="keywordflow">case</span> CPL_TYPE_LONG:       <span class="keywordflow">return</span> <span class="stringliteral">"long"</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         <span class="keywordflow">case</span> CPL_TYPE_ULONG:      <span class="keywordflow">return</span> <span class="stringliteral">"ulong"</span>;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         <span class="keywordflow">case</span> CPL_TYPE_FLOAT:      <span class="keywordflow">return</span> <span class="stringliteral">"float"</span>;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:     <span class="keywordflow">return</span> <span class="stringliteral">"double"</span>;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         <span class="keywordflow">case</span> CPL_TYPE_POINTER:    <span class="keywordflow">return</span> <span class="stringliteral">"pointer"</span>;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">/* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex"; */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         <span class="keywordflow">case</span> CPL_TYPE_INVALID:    <span class="keywordflow">return</span> <span class="stringliteral">"invalid"</span>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized type"</span>;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordflow">switch</span>(t & (~CPL_TYPE_FLAG_ARRAY))</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         <span class="keywordflow">case</span> CPL_TYPE_CHAR:       <span class="keywordflow">return</span> <span class="stringliteral">"string (char array)"</span>;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         <span class="keywordflow">case</span> CPL_TYPE_UCHAR:      <span class="keywordflow">return</span> <span class="stringliteral">"uchar array"</span>;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         <span class="keywordflow">case</span> CPL_TYPE_BOOL:       <span class="keywordflow">return</span> <span class="stringliteral">"boolean array"</span>;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <span class="keywordflow">case</span> CPL_TYPE_INT:        <span class="keywordflow">return</span> <span class="stringliteral">"int array"</span>;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         <span class="keywordflow">case</span> CPL_TYPE_UINT:       <span class="keywordflow">return</span> <span class="stringliteral">"uint array"</span>;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         <span class="keywordflow">case</span> CPL_TYPE_LONG:       <span class="keywordflow">return</span> <span class="stringliteral">"long array"</span>;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="keywordflow">case</span> CPL_TYPE_ULONG:      <span class="keywordflow">return</span> <span class="stringliteral">"ulong array"</span>;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="keywordflow">case</span> CPL_TYPE_FLOAT:      <span class="keywordflow">return</span> <span class="stringliteral">"float array"</span>;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:     <span class="keywordflow">return</span> <span class="stringliteral">"double array"</span>;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         <span class="keywordflow">case</span> CPL_TYPE_POINTER:    <span class="keywordflow">return</span> <span class="stringliteral">"pointer array"</span>;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="comment">/* not in CPL3.0: case CPL_TYPE_COMPLEX:    return "complex array"; */</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         <span class="keywordflow">case</span> CPL_TYPE_INVALID:    <span class="keywordflow">return</span> <span class="stringliteral">"invalid (array)"</span>;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>         <span class="keywordflow">return</span> <span class="stringliteral">"unrecognized type"</span>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__dump_8h_source.html b/html/sinfo__dump_8h_source.html
index e7b2ef7..2cece28 100644
--- a/html/sinfo__dump_8h_source.html
+++ b/html/sinfo__dump_8h_source.html
@@ -2,99 +2,130 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_dump.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_dump.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                           *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the ESO UVES  Pipeline                             *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                           *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                     *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                           *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                            *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                           *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software             *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                           */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2011/11/23 17:29:09 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_dump.h,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.6  2011/11/23 17:29:09  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * fix warning with cpl6</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.5  2006/10/25 06:46:09  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * fixed warnings from static checks</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.4  2006/10/17 11:13:30  amodigli</span>
-<a name="l00033"></a>00033 <span class="comment"> * added config.h</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.3  2006/10/16 07:26:23  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * shortened line length</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.2  2006/10/04 06:17:45  amodigli</span>
-<a name="l00039"></a>00039 <span class="comment"> * added doxygen doc</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Revision 1.1  2006/08/09 12:20:11  amodigli</span>
-<a name="l00042"></a>00042 <span class="comment"> * added sinfo_dump.h sinfo_dump.c</span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"> * Revision 1.2  2005/12/19 16:17:56  jmlarsen</span>
-<a name="l00045"></a>00045 <span class="comment"> * Replaced bool -> int</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#ifndef SINFO_DUMP_H</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DUMP_H</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 cpl_error_code 
-<a name="l00059"></a>00059 sinfo_print_cpl_propertylist(<span class="keyword">const</span> cpl_propertylist *pl, 
-<a name="l00060"></a>00060                              <span class="keywordtype">long</span> low, 
-<a name="l00061"></a>00061                              <span class="keywordtype">long</span> high);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 cpl_error_code 
-<a name="l00064"></a>00064 sinfo_print_cpl_property(<span class="keyword">const</span> cpl_property *);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 cpl_error_code 
-<a name="l00067"></a>00067 sinfo_print_cpl_frameset(<span class="keyword">const</span> cpl_frameset *);
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 cpl_error_code 
-<a name="l00070"></a>00070 sinfo_print_cpl_frame(<span class="keyword">const</span> cpl_frame *);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00073"></a>00073 sinfo_tostring_cpl_type(cpl_type t);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00076"></a>00076 sinfo_tostring_cpl_frame_type(cpl_frame_type);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00079"></a>00079 sinfo_tostring_cpl_frame_group(cpl_frame_group);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keyword">const</span> <span class="keywordtype">char</span> *
-<a name="l00082"></a>00082 sinfo_tostring_cpl_frame_level(cpl_frame_level);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_DUMP_H */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_dump.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                           *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the ESO UVES  Pipeline                             *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                     *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                            *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software             *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                           */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2011/11/23 17:29:09 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_dump.h,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.6  2011/11/23 17:29:09  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * fix warning with cpl6</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.5  2006/10/25 06:46:09  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * fixed warnings from static checks</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.4  2006/10/17 11:13:30  amodigli</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * added config.h</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.3  2006/10/16 07:26:23  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * shortened line length</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.2  2006/10/04 06:17:45  amodigli</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * added doxygen doc</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.1  2006/08/09 12:20:11  amodigli</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * added sinfo_dump.h sinfo_dump.c</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.2  2005/12/19 16:17:56  jmlarsen</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * Replaced bool -> int</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifndef SINFO_DUMP_H</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DUMP_H</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> cpl_error_code </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> sinfo_print_cpl_propertylist(<span class="keyword">const</span> cpl_propertylist *pl, </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                              <span class="keywordtype">long</span> low, </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                              <span class="keywordtype">long</span> high);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> cpl_error_code </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_print_cpl_property(<span class="keyword">const</span> cpl_property *);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> cpl_error_code </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_print_cpl_frameset(<span class="keyword">const</span> cpl_frameset *);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> cpl_error_code </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> sinfo_print_cpl_frame(<span class="keyword">const</span> cpl_frame *);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_tostring_cpl_type(cpl_type t);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_tostring_cpl_frame_type(cpl_frame_type);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_tostring_cpl_frame_group(cpl_frame_group);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> sinfo_tostring_cpl_frame_level(cpl_frame_level);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_DUMP_H */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__error_8h_source.html b/html/sinfo__error_8h_source.html
index 18fa41e..1e9212f 100644
--- a/html/sinfo__error_8h_source.html
+++ b/html/sinfo__error_8h_source.html
@@ -2,138 +2,169 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_error.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_error.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/10/26 09:42:36 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_error.h,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.13  2007/10/26 09:42:36  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * removed check on CPL_VERSION_CODE (now works only for CPL4)</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.12  2007/08/14 10:01:41  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * added sinfo_stop_if_error</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.11  2007/08/11 10:46:18  amodigli</span>
-<a name="l00033"></a>00033 <span class="comment"> * clean</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.9  2007/08/08 11:17:26  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * change to support CPL31 & CPL40</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.8  2007/06/06 07:10:45  amodigli</span>
-<a name="l00039"></a>00039 <span class="comment"> * replaced tab with 4 spaces</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Revision 1.7  2006/11/21 11:56:10  amodigli</span>
-<a name="l00042"></a>00042 <span class="comment"> * replaced __func__ by cpl_func</span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"> * Revision 1.6  2006/10/16 07:26:23  amodigli</span>
-<a name="l00045"></a>00045 <span class="comment"> * shortened line length</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> * Revision 1.5  2006/10/13 08:09:42  amodigli</span>
-<a name="l00048"></a>00048 <span class="comment"> * shorten line length</span>
-<a name="l00049"></a>00049 <span class="comment"> *</span>
-<a name="l00050"></a>00050 <span class="comment"> * Revision 1.4  2006/10/13 06:34:40  amodigli</span>
-<a name="l00051"></a>00051 <span class="comment"> * shorten line length</span>
-<a name="l00052"></a>00052 <span class="comment"> *</span>
-<a name="l00053"></a>00053 <span class="comment"> * Revision 1.3  2006/10/04 06:17:45  amodigli</span>
-<a name="l00054"></a>00054 <span class="comment"> * added doxygen doc</span>
-<a name="l00055"></a>00055 <span class="comment"> *</span>
-<a name="l00056"></a>00056 <span class="comment"> * Revision 1.2  2006/07/31 06:33:34  amodigli</span>
-<a name="l00057"></a>00057 <span class="comment"> * fixed  bug in ck0 macro</span>
-<a name="l00058"></a>00058 <span class="comment"> *</span>
-<a name="l00059"></a>00059 <span class="comment"> * Revision 1.1  2006/05/30 09:09:37  amodigli</span>
-<a name="l00060"></a>00060 <span class="comment"> * added to repository</span>
-<a name="l00061"></a>00061 <span class="comment"> *</span>
-<a name="l00062"></a>00062 <span class="comment"> *</span>
-<a name="l00063"></a>00063 <span class="comment"> */</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#ifndef SINFO_ERROR_H</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ERROR_H</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                    Includes</span>
-<a name="l00074"></a>00074 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <cpl_error.h></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00079"></a>00079 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment">                             Defines</span>
-<a name="l00081"></a>00081 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 <span class="comment">/* To save some key-strokes, use the irplib error handling macros</span>
-<a name="l00083"></a>00083 <span class="comment">   under different (shorter) names.</span>
-<a name="l00084"></a>00084 <span class="comment">   Additionally, irplib macros require the VA_ARGS to be enclosed in (),</span>
-<a name="l00085"></a>00085 <span class="comment">*/</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="preprocessor">#define assure(BOOL, CODE, ...) \</span>
-<a name="l00088"></a>00088 <span class="preprocessor">  cpl_error_ensure(BOOL, CODE, goto cleanup,__VA_ARGS__)</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span>
-<a name="l00090"></a>00090 <span class="preprocessor">#define assure_nomsg(BOOL, CODE, ...)               \</span>
-<a name="l00091"></a>00091 <span class="preprocessor">  cpl_error_ensure(BOOL, CODE, goto cleanup,__VA_ARGS__)</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span>
-<a name="l00093"></a>00093 <span class="preprocessor">#define sinfo_stop_if_error() \</span>
-<a name="l00094"></a>00094 <span class="preprocessor">     do if(cpl_error_get_code()) { \</span>
-<a name="l00095"></a>00095 <span class="preprocessor">     cpl_msg_error(__func__,"Traced error"); \</span>
-<a name="l00096"></a>00096 <span class="preprocessor">     irplib_trace(); \</span>
-<a name="l00097"></a>00097 <span class="preprocessor">     goto cleanup; \</span>
-<a name="l00098"></a>00098 <span class="preprocessor">     } while (0) </span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span>
-<a name="l00100"></a>00100 <span class="preprocessor">#define ck0(IEXP, ...) \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">  cpl_error_ensure(IEXP == 0, CPL_ERROR_UNSPECIFIED, \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">   goto cleanup,__VA_ARGS__)</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span>
-<a name="l00104"></a>00104 <span class="preprocessor">#define ck0_nomsg(IEXP) ck0(IEXP," ")</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>
-<a name="l00106"></a>00106 <span class="preprocessor">#define cknull(NULLEXP, ...) \</span>
-<a name="l00107"></a>00107 <span class="preprocessor">  cpl_error_ensure((NULLEXP) != NULL, \</span>
-<a name="l00108"></a>00108 <span class="preprocessor">  CPL_ERROR_UNSPECIFIED, goto cleanup,__VA_ARGS__)</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span>
-<a name="l00110"></a>00110 <span class="preprocessor">#define cknull_nomsg(NULLEXP) cknull(NULLEXP," ")</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>
-<a name="l00112"></a>00112 <span class="preprocessor">#define  check(CMD, ...)                                                 \</span>
-<a name="l00113"></a>00113 <span class="preprocessor">  cpl_error_ensure((sinfo_msg_softer(), (CMD), sinfo_msg_louder(),      \</span>
-<a name="l00114"></a>00114 <span class="preprocessor">              cpl_error_get_code() == CPL_ERROR_NONE),       \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">                       cpl_error_get_code(), goto cleanup,__VA_ARGS__)</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 <span class="preprocessor">#define  check_nomsg(CMD) check(CMD, " ")</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span>
-<a name="l00119"></a>00119 <span class="preprocessor">#define passure(BOOL, ...)                                               \</span>
-<a name="l00120"></a>00120 <span class="preprocessor">  cpl_error_ensure(BOOL, CPL_ERROR_UNSPECIFIED, goto cleanup,\</span>
-<a name="l00121"></a>00121 <span class="preprocessor">                      ("Internal error. Please report to "                \</span>
-<a name="l00122"></a>00122 <span class="preprocessor">                      PACKAGE_BUGREPORT " " __VA_ARGS__))</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>                       <span class="comment">//  Assumes that PACKAGE_BUGREPORT</span>
-<a name="l00124"></a>00124                <span class="comment">//contains no formatting special characters  </span>
-<a name="l00125"></a>00125    
-<a name="l00126"></a>00126 
-<a name="l00410"></a>00410 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_error.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/10/26 09:42:36 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_error.h,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.13  2007/10/26 09:42:36  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * removed check on CPL_VERSION_CODE (now works only for CPL4)</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.12  2007/08/14 10:01:41  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * added sinfo_stop_if_error</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.11  2007/08/11 10:46:18  amodigli</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * clean</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.9  2007/08/08 11:17:26  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * change to support CPL31 & CPL40</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.8  2007/06/06 07:10:45  amodigli</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * replaced tab with 4 spaces</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.7  2006/11/21 11:56:10  amodigli</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * replaced __func__ by cpl_func</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.6  2006/10/16 07:26:23  amodigli</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * shortened line length</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> * Revision 1.5  2006/10/13 08:09:42  amodigli</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> * shorten line length</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> * Revision 1.4  2006/10/13 06:34:40  amodigli</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> * shorten line length</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> * Revision 1.3  2006/10/04 06:17:45  amodigli</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * added doxygen doc</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> * Revision 1.2  2006/07/31 06:33:34  amodigli</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> * fixed  bug in ck0 macro</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * Revision 1.1  2006/05/30 09:09:37  amodigli</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * added to repository</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#ifndef SINFO_ERROR_H</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ERROR_H</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                    Includes</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <cpl_error.h></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                             Defines</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/* To save some key-strokes, use the irplib error handling macros</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">   under different (shorter) names.</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   Additionally, irplib macros require the VA_ARGS to be enclosed in (),</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor">#define assure(BOOL, CODE, ...) \</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">  cpl_error_ensure(BOOL, CODE, goto cleanup,__VA_ARGS__)</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor">#define assure_nomsg(BOOL, CODE, ...)               \</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">  cpl_error_ensure(BOOL, CODE, goto cleanup,__VA_ARGS__)</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#define sinfo_stop_if_error() \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">     do if(cpl_error_get_code()) { \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">     cpl_msg_error(__func__,"Traced error"); \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">     irplib_trace(); \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">     goto cleanup; \</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">     } while (0) </span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor">#define ck0(IEXP, ...) \</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor">  cpl_error_ensure(IEXP == 0, CPL_ERROR_UNSPECIFIED, \</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">   goto cleanup,__VA_ARGS__)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor">#define ck0_nomsg(IEXP) ck0(IEXP," ")</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">#define cknull(NULLEXP, ...) \</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">  cpl_error_ensure((NULLEXP) != NULL, \</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">  CPL_ERROR_UNSPECIFIED, goto cleanup,__VA_ARGS__)</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#define cknull_nomsg(NULLEXP) cknull(NULLEXP," ")</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">#define  check(CMD, ...)                                                 \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">  cpl_error_ensure((sinfo_msg_softer(), (CMD), sinfo_msg_louder(),      \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">              cpl_error_get_code() == CPL_ERROR_NONE),       \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">                       cpl_error_get_code(), goto cleanup,__VA_ARGS__)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">#define  check_nomsg(CMD) check(CMD, " ")</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">#define passure(BOOL, ...)                                               \</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">  cpl_error_ensure(BOOL, CPL_ERROR_UNSPECIFIED, goto cleanup,\</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">                      ("Internal error. Please report to "                \</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">                      PACKAGE_BUGREPORT " " __VA_ARGS__))</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor"></span>                       <span class="comment">//  Assumes that PACKAGE_BUGREPORT</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                <span class="comment">//contains no formatting special characters  </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fft__base_8c_source.html b/html/sinfo__fft__base_8c_source.html
index 4ad38bf..472d4de 100644
--- a/html/sinfo__fft__base_8c_source.html
+++ b/html/sinfo__fft__base_8c_source.html
@@ -2,190 +2,221 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fft_base.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fft_base.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_fft_base.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    October 1999</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    base FFT routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment">    $Id: sinfo_fft_base.c,v 1.7 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Revision: 1.7 $</span>
-<a name="l00032"></a>00032 <span class="comment">*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_fft_base.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00047"></a>00047 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                              Function codes</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 <span class="keywordtype">void</span>
-<a name="l00094"></a>00094 sinfo_fftn(
-<a name="l00095"></a>00095     dcomplex data[],
-<a name="l00096"></a>00096     <span class="keywordtype">unsigned</span> nn[],
-<a name="l00097"></a>00097     <span class="keywordtype">int</span> ndim, 
-<a name="l00098"></a>00098     <span class="keywordtype">int</span> isign)
-<a name="l00099"></a>00099 {
-<a name="l00100"></a>00100   <span class="keywordtype">int</span>        idim=0;
-<a name="l00101"></a>00101   <span class="keywordtype">unsigned</span>   i1=0;
-<a name="l00102"></a>00102   <span class="keywordtype">unsigned</span>   i2rev=0;
-<a name="l00103"></a>00103   <span class="keywordtype">unsigned</span>   i3rev=0;
-<a name="l00104"></a>00104   <span class="keywordtype">unsigned</span>   ibit=0;
-<a name="l00105"></a>00105   <span class="keywordtype">unsigned</span>   ip2=0;
-<a name="l00106"></a>00106   <span class="keywordtype">unsigned</span>   ifp1=0;
-<a name="l00107"></a>00107   <span class="keywordtype">unsigned</span>   ifp2=0;
-<a name="l00108"></a>00108   <span class="keywordtype">unsigned</span>   k2=0;
-<a name="l00109"></a>00109   <span class="keywordtype">unsigned</span>   n=0;
-<a name="l00110"></a>00110   <span class="keywordtype">unsigned</span>   nprev = 1;
-<a name="l00111"></a>00111   <span class="keywordtype">unsigned</span>   ntot = 1;
-<a name="l00112"></a>00112   <span class="keyword">register</span>   <span class="keywordtype">unsigned</span> i2=0;
-<a name="l00113"></a>00113   <span class="keyword">register</span>   <span class="keywordtype">unsigned</span> i3=0;
-<a name="l00114"></a>00114   <span class="keywordtype">double</span>        theta=0;
-<a name="l00115"></a>00115   dcomplex   w, wp;
-<a name="l00116"></a>00116   <span class="keywordtype">double</span>        wtemp=0;
-<a name="l00117"></a>00117   dcomplex   temp, wt;
-<a name="l00118"></a>00118   <span class="keywordtype">double</span>       t1=0;
-<a name="l00119"></a>00119   <span class="keywordtype">double</span>     t2=0;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="comment">/*      Compute total number of complex values  */</span>
-<a name="l00122"></a>00122   <span class="keywordflow">for</span> (idim = 0; idim < ndim; ++idim) {
-<a name="l00123"></a>00123     ntot *= nn[idim];
-<a name="l00124"></a>00124   }
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126   <span class="keywordflow">for</span> (idim = ndim - 1; idim >= 0; --idim) {
-<a name="l00127"></a>00127     n = nn[idim];
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     ip2 = nprev * n;        <span class="comment">/*  Unit step for next dimension */</span>
-<a name="l00130"></a>00130     i2rev = 0;              <span class="comment">/*  Bit reversed i2 */</span>
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="comment">/*      This is the bit reversal section of the routine */</span>
-<a name="l00133"></a>00133     <span class="comment">/*      Loop over current dimension     */</span>
-<a name="l00134"></a>00134     <span class="keywordflow">for</span> (i2 = 0; i2 < ip2; i2 += nprev) {
-<a name="l00135"></a>00135       <span class="keywordflow">if</span> (i2 < i2rev) {
-<a name="l00136"></a>00136     <span class="comment">/*      Loop over lower dimensions      */</span>
-<a name="l00137"></a>00137     <span class="keywordflow">for</span> (i1 = i2; i1 < i2 + nprev; ++i1) {
-<a name="l00138"></a>00138       <span class="comment">/*      Loop over higher dimensions  */</span>
-<a name="l00139"></a>00139       <span class="keywordflow">for</span> (i3 = i1; i3 < ntot; i3 += ip2) {
-<a name="l00140"></a>00140         i3rev = i3 + i2rev - i2;
-<a name="l00141"></a>00141         temp = data[i3];
-<a name="l00142"></a>00142         data[i3] = data[i3rev];
-<a name="l00143"></a>00143         data[i3rev] = temp;
-<a name="l00144"></a>00144       }
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146       }
-<a name="l00147"></a>00147       ibit = ip2;
-<a name="l00148"></a>00148       <span class="comment">/*      Increment from high end of i2rev to low */</span>
-<a name="l00149"></a>00149       <span class="keywordflow">do</span> {
-<a name="l00150"></a>00150     ibit >>= 1;
-<a name="l00151"></a>00151     i2rev ^= ibit;
-<a name="l00152"></a>00152       } <span class="keywordflow">while</span> (ibit >= nprev && !(ibit & i2rev));
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">/*      Here begins the Danielson-Lanczos section of the routine */</span>
-<a name="l00156"></a>00156     <span class="comment">/*      Loop over step sizes    */</span>
-<a name="l00157"></a>00157     <span class="keywordflow">for</span> (ifp1 = nprev; ifp1 < ip2; ifp1 <<= 1) {
-<a name="l00158"></a>00158       ifp2 = ifp1 << 1;
-<a name="l00159"></a>00159       <span class="comment">/*  Initialize for the trig. recurrence */</span>
-<a name="l00160"></a>00160       theta = isign * 2.0 * PI_NUMB / (ifp2 / nprev);
-<a name="l00161"></a>00161       wp.x = sin(0.5 * theta);
-<a name="l00162"></a>00162       wp.x *= -2.0 * wp.x;
-<a name="l00163"></a>00163       wp.y = sin(theta);
-<a name="l00164"></a>00164       w.x = 1.0;
-<a name="l00165"></a>00165       w.y = 0.0;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167       <span class="comment">/*  Loop by unit step in current dimension  */</span>
-<a name="l00168"></a>00168       <span class="keywordflow">for</span> (i3 = 0; i3 < ifp1; i3 += nprev) {
-<a name="l00169"></a>00169     <span class="comment">/*      Loop over lower dimensions      */</span>
-<a name="l00170"></a>00170     <span class="keywordflow">for</span> (i1 = i3; i1 < i3 + nprev; ++i1) {
-<a name="l00171"></a>00171       <span class="comment">/*  Loop over higher dimensions */</span>
-<a name="l00172"></a>00172       <span class="keywordflow">for</span> (i2 = i1; i2 < ntot; i2 += ifp2) {
-<a name="l00173"></a>00173         <span class="comment">/*      Danielson-Lanczos formula */</span>
-<a name="l00174"></a>00174         k2 = i2 + ifp1;
-<a name="l00175"></a>00175         wt = data[k2];
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177             <span class="comment">/* Complex multiply using 3 real multiplies.  </span>
-<a name="l00178"></a>00178 <span class="comment">               Should usually be faster.    */</span>
-<a name="l00179"></a>00179         data[k2].x = data[i2].x - (temp.x =
-<a name="l00180"></a>00180                        (t1 = w.x * wt.x) - (t2 = w.y * wt.y));
-<a name="l00181"></a>00181         data[k2].y = data[i2].y - (temp.y =
-<a name="l00182"></a>00182                        (w.x + w.y) * (wt.x + wt.y) - t1 - t2);
-<a name="l00183"></a>00183         data[i2].x += temp.x;
-<a name="l00184"></a>00184         data[i2].y += temp.y;
-<a name="l00185"></a>00185       }
-<a name="l00186"></a>00186     }
-<a name="l00187"></a>00187     <span class="comment">/*      Trigonometric recurrence        */</span>
-<a name="l00188"></a>00188     wtemp = w.x;
-<a name="l00189"></a>00189         <span class="comment">/*    Complex multiply using 3 real multiplies.    */</span>
-<a name="l00190"></a>00190     w.x += (t1 = w.x * wp.x) - (t2 = w.y * wp.y);
-<a name="l00191"></a>00191     w.y += (wtemp + w.y) * (wp.x + wp.y) - t1 - t2;
-<a name="l00192"></a>00192       }
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194     nprev *= n;
-<a name="l00195"></a>00195   }
-<a name="l00196"></a>00196     
-<a name="l00197"></a>00197   return ;
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 
-<a name="l00220"></a>00220 <span class="keywordtype">int</span>
-<a name="l00221"></a>00221 sinfo_is_power_of_2(<span class="keywordtype">int</span> p)
-<a name="l00222"></a>00222 {
-<a name="l00223"></a>00223     <span class="keywordtype">float</span>    c ;
-<a name="l00224"></a>00224     <span class="keywordtype">int</span>        power2 ;
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     <span class="keywordflow">if</span> (p == 0) { <span class="comment">/* Yes, 0 is a power of 2    */</span>
-<a name="l00227"></a>00227         power2 =  1 ;
-<a name="l00228"></a>00228     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p<0) { <span class="comment">/* No, negatives are no power of 2 (in R at least) */</span>
-<a name="l00229"></a>00229         power2 = -1 ;
-<a name="l00230"></a>00230     } <span class="keywordflow">else</span> { <span class="comment">/* Compute log in base 2    */</span>
-<a name="l00231"></a>00231         c = (float)(log((<span class="keywordtype">double</span>)p) / log(2.0)) ;
-<a name="l00232"></a>00232         <span class="keywordflow">if</span> (c == (<span class="keywordtype">float</span>)((int)c)) {
-<a name="l00233"></a>00233             power2 = (int)c ;
-<a name="l00234"></a>00234         } <span class="keywordflow">else</span> {
-<a name="l00235"></a>00235             power2 = -1 ;
-<a name="l00236"></a>00236         }
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238     
-<a name="l00239"></a>00239     <span class="keywordflow">return</span> power2 ;
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fft_base.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_fft_base.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    October 1999</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    base FFT routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Id: sinfo_fft_base.c,v 1.7 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_fft_base.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> sinfo_fftn(</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     dcomplex data[],</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">unsigned</span> nn[],</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordtype">int</span> ndim, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">int</span> isign)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   <span class="keywordtype">int</span>        idim=0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordtype">unsigned</span>   i1=0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keywordtype">unsigned</span>   i2rev=0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordtype">unsigned</span>   i3rev=0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">unsigned</span>   ibit=0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">unsigned</span>   ip2=0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">unsigned</span>   ifp1=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">unsigned</span>   ifp2=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">unsigned</span>   k2=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">unsigned</span>   n=0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">unsigned</span>   nprev = 1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordtype">unsigned</span>   ntot = 1;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keyword">register</span>   <span class="keywordtype">unsigned</span> i2=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keyword">register</span>   <span class="keywordtype">unsigned</span> i3=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">double</span>        theta=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   dcomplex   w, wp;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">double</span>        wtemp=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   dcomplex   temp, wt;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span>       t1=0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">double</span>     t2=0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="comment">/*      Compute total number of complex values  */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordflow">for</span> (idim = 0; idim < ndim; ++idim) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     ntot *= nn[idim];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordflow">for</span> (idim = ndim - 1; idim >= 0; --idim) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     n = nn[idim];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     ip2 = nprev * n;        <span class="comment">/*  Unit step for next dimension */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     i2rev = 0;              <span class="comment">/*  Bit reversed i2 */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">/*      This is the bit reversal section of the routine */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="comment">/*      Loop over current dimension     */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordflow">for</span> (i2 = 0; i2 < ip2; i2 += nprev) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       <span class="keywordflow">if</span> (i2 < i2rev) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/*      Loop over lower dimensions      */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">for</span> (i1 = i2; i1 < i2 + nprev; ++i1) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       <span class="comment">/*      Loop over higher dimensions  */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       <span class="keywordflow">for</span> (i3 = i1; i3 < ntot; i3 += ip2) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         i3rev = i3 + i2rev - i2;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         temp = data[i3];</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         data[i3] = data[i3rev];</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         data[i3rev] = temp;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       ibit = ip2;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       <span class="comment">/*      Increment from high end of i2rev to low */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     ibit >>= 1;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     i2rev ^= ibit;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       } <span class="keywordflow">while</span> (ibit >= nprev && !(ibit & i2rev));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/*      Here begins the Danielson-Lanczos section of the routine */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/*      Loop over step sizes    */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">for</span> (ifp1 = nprev; ifp1 < ip2; ifp1 <<= 1) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       ifp2 = ifp1 << 1;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       <span class="comment">/*  Initialize for the trig. recurrence */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       theta = isign * 2.0 * PI_NUMB / (ifp2 / nprev);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       wp.x = sin(0.5 * theta);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       wp.x *= -2.0 * wp.x;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       wp.y = sin(theta);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       w.x = 1.0;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       w.y = 0.0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       <span class="comment">/*  Loop by unit step in current dimension  */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <span class="keywordflow">for</span> (i3 = 0; i3 < ifp1; i3 += nprev) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">/*      Loop over lower dimensions      */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">for</span> (i1 = i3; i1 < i3 + nprev; ++i1) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       <span class="comment">/*  Loop over higher dimensions */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">for</span> (i2 = i1; i2 < ntot; i2 += ifp2) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="comment">/*      Danielson-Lanczos formula */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         k2 = i2 + ifp1;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         wt = data[k2];</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>             <span class="comment">/* Complex multiply using 3 real multiplies.  </span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">               Should usually be faster.    */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         data[k2].x = data[i2].x - (temp.x =</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                        (t1 = w.x * wt.x) - (t2 = w.y * wt.y));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         data[k2].y = data[i2].y - (temp.y =</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                        (w.x + w.y) * (wt.x + wt.y) - t1 - t2);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         data[i2].x += temp.x;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         data[i2].y += temp.y;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/*      Trigonometric recurrence        */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     wtemp = w.x;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         <span class="comment">/*    Complex multiply using 3 real multiplies.    */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     w.x += (t1 = w.x * wp.x) - (t2 = w.y * wp.y);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     w.y += (wtemp + w.y) * (wp.x + wp.y) - t1 - t2;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     nprev *= n;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   return ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> sinfo_is_power_of_2(<span class="keywordtype">int</span> p)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordtype">float</span>    c ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordtype">int</span>        power2 ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">if</span> (p == 0) { <span class="comment">/* Yes, 0 is a power of 2    */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         power2 =  1 ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (p<0) { <span class="comment">/* No, negatives are no power of 2 (in R at least) */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         power2 = -1 ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     } <span class="keywordflow">else</span> { <span class="comment">/* Compute log in base 2    */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         c = (float)(log((<span class="keywordtype">double</span>)p) / log(2.0)) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keywordflow">if</span> (c == (<span class="keywordtype">float</span>)((int)c)) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>             power2 = (int)c ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>             power2 = -1 ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">return</span> power2 ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fft__base_8h_source.html b/html/sinfo__fft__base_8h_source.html
index 8b7d8e1..b7f9509 100644
--- a/html/sinfo__fft__base_8h_source.html
+++ b/html/sinfo__fft__base_8h_source.html
@@ -2,77 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fft_base.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fft_base.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name     :    sinfo_sinfo_fft_base.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on    :    October 1999</span>
-<a name="l00023"></a>00023 <span class="comment">   Description    :    base FFT routines</span>
-<a name="l00024"></a>00024 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="comment">/*</span>
-<a name="l00026"></a>00026 <span class="comment">    $Id: sinfo_fft_base.h,v 1.6 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00027"></a>00027 <span class="comment">    $Author: amodigli $</span>
-<a name="l00028"></a>00028 <span class="comment">    $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Revision: 1.6 $</span>
-<a name="l00030"></a>00030 <span class="comment">*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#ifndef SINFO_FFT_BASE_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FFT_BASE_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                   New types</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                                   Defines</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#define FFT_FORWARD         1</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define FFT_INVERSE        -1</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                              Function codes</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="keywordtype">void</span>
-<a name="l00092"></a>00092 sinfo_fftn(
-<a name="l00093"></a>00093     dcomplex data[],
-<a name="l00094"></a>00094     <span class="keywordtype">unsigned</span> nn[],
-<a name="l00095"></a>00095     <span class="keywordtype">int</span> ndim, 
-<a name="l00096"></a>00096     <span class="keywordtype">int</span> isign);
-<a name="l00097"></a>00097 
-<a name="l00113"></a>00113 <span class="keywordtype">int</span> sinfo_is_power_of_2(<span class="keywordtype">int</span> p);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="preprocessor">#endif</span>
-<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fft_base.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name     :    sinfo_sinfo_fft_base.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on    :    October 1999</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description    :    base FFT routines</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">    $Id: sinfo_fft_base.h,v 1.6 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifndef SINFO_FFT_BASE_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FFT_BASE_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#define FFT_FORWARD         1</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define FFT_INVERSE        -1</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_fftn(</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     dcomplex data[],</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">unsigned</span> nn[],</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">int</span> ndim, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">int</span> isign);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keywordtype">int</span> sinfo_is_power_of_2(<span class="keywordtype">int</span> p);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__file__handling_8c_source.html b/html/sinfo__file__handling_8c_source.html
index aa294f2..0a9d13c 100644
--- a/html/sinfo__file__handling_8c_source.html
+++ b/html/sinfo__file__handling_8c_source.html
@@ -2,65 +2,96 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_file_handling.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_file_handling.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <string.h></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00025"></a>00025 
-<a name="l00033"></a>00033 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                                        Function codes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keywordtype">int</span> sinfo_file_exists(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)
-<a name="l00053"></a>00053 {
-<a name="l00054"></a>00054   <span class="keywordtype">int</span> exists=0;
-<a name="l00055"></a>00055   FILE* fo=NULL;
-<a name="l00056"></a>00056   <span class="keywordflow">if</span> ((fo=fopen(filename,<span class="stringliteral">"r"</span>))==NULL) {
-<a name="l00057"></a>00057      exists=0;
-<a name="l00058"></a>00058    } <span class="keywordflow">else</span> {
-<a name="l00059"></a>00059      exists=1;
-<a name="l00060"></a>00060    }
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   <span class="keywordflow">if</span>(fo!=NULL) {
-<a name="l00063"></a>00063      fclose(fo);
-<a name="l00064"></a>00064   }
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066    <span class="keywordflow">return</span> exists;
-<a name="l00067"></a>00067 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_file_handling.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                                        Function codes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">int</span> sinfo_file_exists(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span> exists=0;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   FILE* fo=NULL;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">if</span> ((fo=fopen(filename,<span class="stringliteral">"r"</span>))==NULL) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>      exists=0;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>      exists=1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>    }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span>(fo!=NULL) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>      fclose(fo);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>    <span class="keywordflow">return</span> exists;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__file__handling_8h_source.html b/html/sinfo__file__handling_8h_source.html
index f4d8b4e..9091641 100644
--- a/html/sinfo__file__handling_8h_source.html
+++ b/html/sinfo__file__handling_8h_source.html
@@ -2,43 +2,74 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_file_handling.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_file_handling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_FILE_HANDLING_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FILE_HANDLING_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00022"></a>00022 <span class="comment">                                                Function ANSI C prototypes</span>
-<a name="l00023"></a>00023 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00024"></a>00024 
-<a name="l00035"></a>00035 <span class="keywordtype">int</span> 
-<a name="l00036"></a>00036 sinfo_file_exists(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename);
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_file_handling.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_FILE_HANDLING_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FILE_HANDLING_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">                                                Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> sinfo_file_exists(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__finddist__cfg_8c_source.html b/html/sinfo__finddist__cfg_8c_source.html
index 133911e..9920a9d 100644
--- a/html/sinfo__finddist__cfg_8c_source.html
+++ b/html/sinfo__finddist__cfg_8c_source.html
@@ -2,67 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_finddist_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_finddist_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_wavecal_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         : Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    wavelength calibration configuration handling tools</span>
-<a name="l00025"></a>00025 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                   Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span>
-<a name="l00041"></a>00041 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                              Function codes</span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 finddist_config * 
-<a name="l00051"></a>00051 sinfo_finddist_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00052"></a>00052 {
-<a name="l00053"></a>00053     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(finddist_config));
-<a name="l00054"></a>00054 }
-<a name="l00055"></a>00055 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_finddist_cfg_destroy(finddist_config * wc)
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (wc==NULL) return ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     <span class="comment">/* Free main struct */</span>
-<a name="l00069"></a>00069     cpl_free(wc);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071     return ;
-<a name="l00072"></a>00072 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_finddist_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_wavecal_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         : Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    wavelength calibration configuration handling tools</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> finddist_config * </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_finddist_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(finddist_config));</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> }</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_finddist_cfg_destroy(finddist_config * wc)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">if</span> (wc==NULL) return ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     cpl_free(wc);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     return ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__finddist__cfg_8h_source.html b/html/sinfo__finddist__cfg_8h_source.html
index 81211d4..fe25d75 100644
--- a/html/sinfo__finddist__cfg_8h_source.html
+++ b/html/sinfo__finddist__cfg_8h_source.html
@@ -2,157 +2,188 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_finddist_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_finddist_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_wavecal_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    wavecal_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_FINDDIST_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_CFG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  Wavelength calibration blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the wavelength calibration</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>finddist_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input emission line frame */</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> lineList[FILE_NAME_SZ] ; <span class="comment">/* input wavelength and intensity </span>
-<a name="l00053"></a>00053 <span class="comment">                                         line list */</span>
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00055"></a>00055 <span class="comment">                                        wavelength map */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> nsFrame[FILE_NAME_SZ] ; <span class="comment">/* input north-south frame */</span>
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;    <span class="comment">/* input north-south frame */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> fitsname[FILE_NAME_SZ] ;  
-<a name="l00059"></a>00059         <span class="keywordtype">char</span> drs_setup[FILE_NAME_SZ] ;  
-<a name="l00060"></a>00060 <span class="comment">/*------ FindLines ------*/</span>
-<a name="l00061"></a>00061         <span class="comment">/* estimated central wavelength of the image */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">float</span> guessBeginWavelength ;
-<a name="l00063"></a>00063         <span class="comment">/* estimated linear dispersion of emission line frame */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> guessDispersion1 ;
-<a name="l00065"></a>00065         <span class="comment">/* estimated square dispersion of emission line frame */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">float</span> guessDispersion2 ;
-<a name="l00067"></a>00067         <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">float</span> mindiff ;
-<a name="l00069"></a>00069         <span class="comment">/* half width of a box within which the line must sit */</span>
-<a name="l00070"></a>00070         <span class="keywordtype">int</span> halfWidth ;
-<a name="l00071"></a>00071         <span class="comment">/* sigma of Gaussian of artificial model spectra */</span>
-<a name="l00072"></a>00072         <span class="keywordtype">float</span> sigma ; 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/*------ WaveCalib ------*/</span>
-<a name="l00075"></a>00075         <span class="comment">/* guess value for fwhm of emission lines */</span> 
-<a name="l00076"></a>00076         <span class="keywordtype">float</span> fwhm ;
-<a name="l00077"></a>00077         <span class="comment">/* minimum amplitude of a line to be fitted */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">float</span> minAmplitude ;
-<a name="l00079"></a>00079         <span class="comment">/* maximal residual value for a valid fit */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">float</span> maxResidual ;
-<a name="l00081"></a>00081         <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span>
-<a name="l00082"></a>00082         <span class="keywordtype">int</span> nrDispCoefficients ;
-<a name="l00083"></a>00083         <span class="comment">/* # of polynomial coefficients used for the fit of the dispersion </span>
-<a name="l00084"></a>00084 <span class="comment">             coefficients */</span>
-<a name="l00085"></a>00085         <span class="keywordtype">int</span> nrCoefCoefficients ;
-<a name="l00086"></a>00086         <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span>
-<a name="l00087"></a>00087         <span class="keywordtype">float</span> sigmaFactor ;
-<a name="l00088"></a>00088         <span class="comment">/* number of slitlets */</span>
-<a name="l00089"></a>00089         <span class="keywordtype">int</span>    nslitlets ;
-<a name="l00090"></a>00090         <span class="comment">/* minimal pixel distance of slitlets in spectral direction */</span>
-<a name="l00091"></a>00091         <span class="keywordtype">int</span>    pixeldist ;
-<a name="l00092"></a>00092         <span class="comment">/* allowed pixel position tolerance between estimated and </span>
-<a name="l00093"></a>00093 <span class="comment">           fitted line position */</span>
-<a name="l00094"></a>00094         <span class="keywordtype">float</span>  pixel_tolerance  ;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="comment">/*------ WaveMap ------*/</span>
-<a name="l00097"></a>00097     <span class="comment">/* magnifying factor for FFT */</span>
-<a name="l00098"></a>00098     <span class="keywordtype">int</span> magFactor ;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="comment">/*------ FitSlits ------*/</span>
-<a name="l00101"></a>00101     <span class="comment">/* pixel length of the row box within which the fit of the </span>
-<a name="l00102"></a>00102 <span class="comment">           slitlet positions is carried out*/</span>
-<a name="l00103"></a>00103     <span class="keywordtype">int</span> boxLength ;
-<a name="l00104"></a>00104         <span class="comment">/* lower row position for the estimate fit */</span>
-<a name="l00105"></a>00105     <span class="keywordtype">int</span> loPos ;
-<a name="l00106"></a>00106         <span class="comment">/* upper row position for the estimate fit */</span>
-<a name="l00107"></a>00107     <span class="keywordtype">int</span> hiPos ;
-<a name="l00108"></a>00108     <span class="comment">/* float box half width in spectral direction */</span>
-<a name="l00109"></a>00109         <span class="keywordtype">float</span> yBox ;
-<a name="l00110"></a>00110         <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span>
-<a name="l00111"></a>00111         <span class="keywordtype">float</span> diffTol ;
-<a name="l00112"></a>00112 <span class="comment">/*------ NorthSouthTest ------*/</span>
-<a name="l00113"></a>00113         <span class="comment">/* number of slitlets */</span>
-<a name="l00114"></a>00114         <span class="keywordtype">int</span> nslits ;      
-<a name="l00115"></a>00115         <span class="comment">/* pixel half width of a box within which the spatial </span>
-<a name="l00116"></a>00116 <span class="comment">           profile is fitted by a Gaussian */</span>
-<a name="l00117"></a>00117         <span class="keywordtype">int</span> nshalfWidth ;
-<a name="l00118"></a>00118         <span class="comment">/* first guess of the fwhm of the Gaussian fit function */</span>
-<a name="l00119"></a>00119         <span class="keywordtype">float</span> nsfwhm ;
-<a name="l00120"></a>00120         <span class="comment">/* minimum amplitude above which the fit is carried out */</span>
-<a name="l00121"></a>00121         <span class="keywordtype">float</span> minDiff ;
-<a name="l00122"></a>00122         <span class="comment">/* estimated average distance of spectra */</span>
-<a name="l00123"></a>00123         <span class="keywordtype">float</span> estimated_dist ;
-<a name="l00124"></a>00124         <span class="comment">/* maximal pixel tolerance of the slitlet distances */</span>
-<a name="l00125"></a>00125         <span class="keywordtype">float</span> devtol ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="comment">/*----qg log --------*/</span>
-<a name="l00128"></a>00128   <span class="keywordtype">int</span> qc_thresh_min;
-<a name="l00129"></a>00129   <span class="keywordtype">int</span> qc_thresh_max;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 } finddist_config ;
-<a name="l00133"></a>00133 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00134"></a>00134 <span class="comment">                               Function prototypes</span>
-<a name="l00135"></a>00135 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 finddist_config * 
-<a name="l00144"></a>00144 sinfo_finddist_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00145"></a>00145 
-<a name="l00152"></a>00152 <span class="keywordtype">void</span> 
-<a name="l00153"></a>00153 sinfo_finddist_cfg_destroy(finddist_config * jc);
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_finddist_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_wavecal_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    wavecal_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_FINDDIST_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_CFG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  Wavelength calibration blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the wavelength calibration</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>finddist_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input emission line frame */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> lineList[FILE_NAME_SZ] ; <span class="comment">/* input wavelength and intensity </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                         line list */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                        wavelength map */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> nsFrame[FILE_NAME_SZ] ; <span class="comment">/* input north-south frame */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;    <span class="comment">/* input north-south frame */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> fitsname[FILE_NAME_SZ] ;  </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">char</span> drs_setup[FILE_NAME_SZ] ;  </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*------ FindLines ------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* estimated central wavelength of the image */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">float</span> guessBeginWavelength ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* estimated linear dispersion of emission line frame */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> guessDispersion1 ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* estimated square dispersion of emission line frame */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">float</span> guessDispersion2 ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">float</span> mindiff ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="comment">/* half width of a box within which the line must sit */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">int</span> halfWidth ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="comment">/* sigma of Gaussian of artificial model spectra */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">float</span> sigma ; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*------ WaveCalib ------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="comment">/* guess value for fwhm of emission lines */</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">float</span> fwhm ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/* minimum amplitude of a line to be fitted */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">float</span> minAmplitude ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* maximal residual value for a valid fit */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">float</span> maxResidual ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="keywordtype">int</span> nrDispCoefficients ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="comment">/* # of polynomial coefficients used for the fit of the dispersion </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">             coefficients */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">int</span> nrCoefCoefficients ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">float</span> sigmaFactor ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="comment">/* number of slitlets */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">int</span>    nslitlets ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="comment">/* minimal pixel distance of slitlets in spectral direction */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">int</span>    pixeldist ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="comment">/* allowed pixel position tolerance between estimated and </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">           fitted line position */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">float</span>  pixel_tolerance  ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*------ WaveMap ------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="comment">/* magnifying factor for FFT */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">int</span> magFactor ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*------ FitSlits ------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="comment">/* pixel length of the row box within which the fit of the </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">           slitlet positions is carried out*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">int</span> boxLength ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="comment">/* lower row position for the estimate fit */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordtype">int</span> loPos ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         <span class="comment">/* upper row position for the estimate fit */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordtype">int</span> hiPos ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="comment">/* float box half width in spectral direction */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         <span class="keywordtype">float</span> yBox ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         <span class="keywordtype">float</span> diffTol ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*------ NorthSouthTest ------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         <span class="comment">/* number of slitlets */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         <span class="keywordtype">int</span> nslits ;      </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         <span class="comment">/* pixel half width of a box within which the spatial </span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">           profile is fitted by a Gaussian */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         <span class="keywordtype">int</span> nshalfWidth ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         <span class="comment">/* first guess of the fwhm of the Gaussian fit function */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         <span class="keywordtype">float</span> nsfwhm ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         <span class="comment">/* minimum amplitude above which the fit is carried out */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         <span class="keywordtype">float</span> minDiff ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <span class="comment">/* estimated average distance of spectra */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         <span class="keywordtype">float</span> estimated_dist ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         <span class="comment">/* maximal pixel tolerance of the slitlet distances */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         <span class="keywordtype">float</span> devtol ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="comment">/*----qg log --------*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> qc_thresh_min;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> qc_thresh_max;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> } finddist_config ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> finddist_config * </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> sinfo_finddist_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> sinfo_finddist_cfg_destroy(finddist_config * jc);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__finddist__ini_8h_source.html b/html/sinfo__finddist__ini_8h_source.html
index b4be774..5926e71 100644
--- a/html/sinfo__finddist__ini_8h_source.html
+++ b/html/sinfo__finddist__ini_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_finddist_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_finddist_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_wavecal_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sept 14, 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    wavelength calibration ini file handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FINDDIST_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Function prototypes </span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="keywordtype">int</span> 
-<a name="l00051"></a>00051 generatefinddist_ini_file(
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> * ini_name,
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * name_i,
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * name_o,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_n,
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * name_c
-<a name="l00057"></a>00057 );
-<a name="l00058"></a>00058 
-<a name="l00068"></a>00068 finddist_config * 
-<a name="l00069"></a>00069 parse_finddist_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_finddist_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_wavecal_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sept 14, 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    wavelength calibration ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FINDDIST_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> generatefinddist_ini_file(</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_n,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> );</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> finddist_config * </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> parse_finddist_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__finddist__ini__by__cpl_8c_source.html b/html/sinfo__finddist__ini__by__cpl_8c_source.html
index 2c73d6d..2635460 100644
--- a/html/sinfo__finddist__ini__by__cpl_8c_source.html
+++ b/html/sinfo__finddist__ini__by__cpl_8c_source.html
@@ -2,458 +2,489 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_finddist_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_finddist_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_finddist_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Aug 12, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   distortion, slitlet distances, first column CPL input </span>
-<a name="l00025"></a>00025 <span class="comment">                    handling for SINFONI</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <string.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_finddist_ini_by_cpl.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_ref_types.h"</span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                    Functions private to this module</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00043"></a>00043 parse_section_frames(finddist_config *, cpl_parameterlist* cpl_cfg, 
-<a name="l00044"></a>00044                      cpl_frameset* sof, cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00046"></a>00046 parse_section_findlines(finddist_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00048"></a>00048 parse_section_wavecalib(finddist_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00050"></a>00050 parse_section_wavemap(finddist_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00052"></a>00052 parse_section_fitslits(finddist_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00054"></a>00054 parse_section_northsouthtest(finddist_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00056"></a>00056 parse_section_qclog      (finddist_config * cfg, cpl_parameterlist* cpl_cfg);
-<a name="l00057"></a>00057 
-<a name="l00077"></a>00077 finddist_config * 
-<a name="l00078"></a>00078 sinfo_parse_cpl_input_finddist(cpl_parameterlist * cpl_cfg, 
-<a name="l00079"></a>00079                                cpl_frameset* sof, 
-<a name="l00080"></a>00080                                cpl_frameset** raw)
-<a name="l00081"></a>00081 {
-<a name="l00082"></a>00082         finddist_config   *       cfg ;
-<a name="l00083"></a>00083         <span class="keywordtype">int</span>                   status =0;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085         cfg = sinfo_finddist_cfg_create();
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087         parse_section_findlines (cfg, cpl_cfg);
-<a name="l00088"></a>00088         parse_section_wavecalib (cfg, cpl_cfg);
-<a name="l00089"></a>00089         parse_section_wavemap   (cfg, cpl_cfg); 
-<a name="l00090"></a>00090         parse_section_fitslits  (cfg, cpl_cfg); 
-<a name="l00091"></a>00091         parse_section_northsouthtest (cfg, cpl_cfg);
-<a name="l00092"></a>00092         parse_section_qclog(cfg,cpl_cfg);
-<a name="l00093"></a>00093         parse_section_frames   (cfg, cpl_cfg, sof, raw, &status);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00096"></a>00096                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00097"></a>00097                 sinfo_finddist_cfg_destroy(cfg);
-<a name="l00098"></a>00098                 cfg = NULL ;
-<a name="l00099"></a>00099                 <span class="keywordflow">return</span> NULL ;
-<a name="l00100"></a>00100         }
-<a name="l00101"></a>00101         <span class="keywordflow">return</span> cfg ;
-<a name="l00102"></a>00102 }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 
-<a name="l00116"></a>00116 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00117"></a>00117 parse_section_frames(finddist_config * cfg,
-<a name="l00118"></a>00118              cpl_parameterlist * cpl_cfg,
-<a name="l00119"></a>00119              cpl_frameset * sof,
-<a name="l00120"></a>00120                      cpl_frameset** raw,
-<a name="l00121"></a>00121                      <span class="keywordtype">int</span>* status)
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126    <span class="keywordtype">int</span> nframes=0;
-<a name="l00127"></a>00127    <span class="keywordtype">int</span> nraw=0;
-<a name="l00128"></a>00128    cpl_frame* frame   = NULL;
-<a name="l00129"></a>00129    cpl_parameter *p; 
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00133"></a>00133    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00134"></a>00134    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00135"></a>00135    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00136"></a>00136    cpl_table* drs_tab=NULL;
-<a name="l00137"></a>00137    wcal* w=NULL;
-<a name="l00138"></a>00138    <span class="keywordtype">int</span> check=0;
-<a name="l00139"></a>00139    nstpar* nstp=NULL;
-<a name="l00140"></a>00140    distpar* d=NULL;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142    d=sinfo_distpar_new();
-<a name="l00143"></a>00143    w=sinfo_wcal_new();
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145    nframes = cpl_frameset_get_size(sof);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="comment">/* Get the raw and the calibration files */</span>
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150    sinfo_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED);
-<a name="l00151"></a>00151    
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153    nraw=cpl_frameset_get_size(*raw);
-<a name="l00154"></a>00154    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00155"></a>00155       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present "</span>
-<a name="l00156"></a>00156                       <span class="stringliteral">"in frameset!Aborting..."</span>,nraw,PRO_FIBRE_NS_STACKED);
-<a name="l00157"></a>00157         sinfo_distpar_delete(d);
-<a name="l00158"></a>00158     sinfo_wcal_delete(w);
-<a name="l00159"></a>00159           (*status)++;
-<a name="l00160"></a>00160           <span class="keywordflow">return</span>;
-<a name="l00161"></a>00161    }
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED)) {
-<a name="l00165"></a>00165       frame = cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED);
-<a name="l00166"></a>00166       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00167"></a>00167    } <span class="keywordflow">else</span> {
-<a name="l00168"></a>00168       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_LAMP_STACKED);
-<a name="l00169"></a>00169         sinfo_distpar_delete(d);
-<a name="l00170"></a>00170     sinfo_wcal_delete(w);
-<a name="l00171"></a>00171         (*status)++;
-<a name="l00172"></a>00172       <span class="keywordflow">return</span>;
-<a name="l00173"></a>00173    }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175    strcpy(cfg -> outName, DISTORTION_OUT_FILENAME);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,REF_LINE_ARC)) {
-<a name="l00179"></a>00179       frame = cpl_frameset_find(sof,REF_LINE_ARC);
-<a name="l00180"></a>00180       strcpy(cfg -> lineList,cpl_frame_get_filename(frame));
-<a name="l00181"></a>00181    } <span class="keywordflow">else</span> {
-<a name="l00182"></a>00182       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, REF_LINE_ARC);
-<a name="l00183"></a>00183         sinfo_distpar_delete(d);
-<a name="l00184"></a>00184     sinfo_wcal_delete(w);
-<a name="l00185"></a>00185         (*status)++;
-<a name="l00186"></a>00186       <span class="keywordflow">return</span>;
-<a name="l00187"></a>00187    }
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED)) {
-<a name="l00190"></a>00190       frame = cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED);
-<a name="l00191"></a>00191       strcpy(cfg -> nsFrame,cpl_frame_get_filename(frame));
-<a name="l00192"></a>00192    } <span class="keywordflow">else</span> {
-<a name="l00193"></a>00193       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_FIBRE_NS_STACKED);
-<a name="l00194"></a>00194         sinfo_distpar_delete(d);
-<a name="l00195"></a>00195     sinfo_wcal_delete(w);
-<a name="l00196"></a>00196         (*status)++;
-<a name="l00197"></a>00197       <span class="keywordflow">return</span>;
-<a name="l00198"></a>00198    }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {
-<a name="l00202"></a>00202       frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);
-<a name="l00203"></a>00203       strcpy(cfg -> mask,cpl_frame_get_filename(frame));
-<a name="l00204"></a>00204    } <span class="keywordflow">else</span> {
-<a name="l00205"></a>00205       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_BP_MAP_DI);
-<a name="l00206"></a>00206         sinfo_distpar_delete(d);
-<a name="l00207"></a>00207     sinfo_wcal_delete(w);
-<a name="l00208"></a>00208         (*status)++;
-<a name="l00209"></a>00209       <span class="keywordflow">return</span>;
-<a name="l00210"></a>00210    }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213   
-<a name="l00214"></a>00214    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00215"></a>00215    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00216"></a>00216  
-<a name="l00217"></a>00217    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00218"></a>00218      {
-<a name="l00219"></a>00219    <span class="keywordflow">case</span> 0: 
-<a name="l00220"></a>00220       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00221"></a>00221       <span class="keywordflow">break</span>;
-<a name="l00222"></a>00222     <span class="keywordflow">case</span> 1: 
-<a name="l00223"></a>00223       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00224"></a>00224       <span class="keywordflow">break</span>;
-<a name="l00225"></a>00225     <span class="keywordflow">case</span> -1:
-<a name="l00226"></a>00226       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00227"></a>00227       <span class="keywordflow">break</span>;
-<a name="l00228"></a>00228     <span class="keywordflow">default</span>: 
-<a name="l00229"></a>00229       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00230"></a>00230       <span class="keywordflow">break</span>;
-<a name="l00231"></a>00231      }
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233    sinfo_get_band(frame,band);
-<a name="l00234"></a>00234    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,
-<a name="l00235"></a>00235                      spat_res,    lamp_status,    band);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238    sinfo_get_ins_set(band,&ins_set);
-<a name="l00239"></a>00239     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,DRS_SETUP_WAVE)) {
-<a name="l00240"></a>00240      frame = cpl_frameset_find(sof,DRS_SETUP_WAVE);
-<a name="l00241"></a>00241         strcpy(cfg -> drs_setup,cpl_frame_get_filename(frame));
-<a name="l00242"></a>00242         drs_tab = cpl_table_load(cfg->drs_setup,1,0);
-<a name="l00243"></a>00243         w->wstart=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_START"</span>,ins_set,&check);
-<a name="l00244"></a>00244         w->wgdisp1=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_DISP1"</span>,ins_set,&check);
-<a name="l00245"></a>00245         w->wgdisp2=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_DISP2"</span>,ins_set,&check);
-<a name="l00246"></a>00246         w->hw=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_HW"</span>,ins_set,&check);
-<a name="l00247"></a>00247         w->fwhm=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_FWHM"</span>,ins_set,&check);
-<a name="l00248"></a>00248         w->min_amp=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_MIN_AMP"</span>,ins_set,&check);
-<a name="l00249"></a>00249     <span class="comment">/*</span>
-<a name="l00250"></a>00250 <span class="comment">        w->min_dif=cpl_table_get_double(drs_tab,"W_MIN_DIF",ins_set,&check);</span>
-<a name="l00251"></a>00251 <span class="comment">        w->na_coef=cpl_table_get_int(drs_tab,"W_NA_COEFF",ins_set,&check);</span>
-<a name="l00252"></a>00252 <span class="comment">        w->nb_coef=cpl_table_get_int(drs_tab,"W_NB_COEFF",ins_set,&check);</span>
-<a name="l00253"></a>00253 <span class="comment">        w->pixel_tol=cpl_table_get_double(drs_tab,"W_PIX_TOL",ins_set,&check);</span>
-<a name="l00254"></a>00254 <span class="comment">        w->y_box=cpl_table_get_double(drs_tab,"W_Y_BOX",ins_set,&check);</span>
-<a name="l00255"></a>00255 <span class="comment">    */</span>
-<a name="l00256"></a>00256         w->low_pos=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_LOW_POS"</span>,ins_set,&check);
-<a name="l00257"></a>00257         w->hig_pos=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_HI_POS"</span>,ins_set,&check);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     cfg -> guessBeginWavelength = w->wstart;
-<a name="l00260"></a>00260     cfg -> guessDispersion1 =  w->wgdisp1;
-<a name="l00261"></a>00261     cfg -> guessDispersion2 =  w->wgdisp2;
-<a name="l00262"></a>00262     cfg -> halfWidth =         w->hw;
-<a name="l00263"></a>00263     cfg -> fwhm =              w->fwhm;
-<a name="l00264"></a>00264     cfg -> minAmplitude =      w->min_amp;
-<a name="l00265"></a>00265     <span class="comment">/*</span>
-<a name="l00266"></a>00266 <span class="comment">    cfg -> mindiff =           w->min_dif;</span>
-<a name="l00267"></a>00267 <span class="comment">    cfg -> nrDispCoefficients = w->na_coef;</span>
-<a name="l00268"></a>00268 <span class="comment">    cfg -> nrCoefCoefficients = w->nb_coef;</span>
-<a name="l00269"></a>00269 <span class="comment">    cfg -> pixel_tolerance =    w->pixel_tol;</span>
-<a name="l00270"></a>00270 <span class="comment">    cfg -> yBox =               w->y_box;</span>
-<a name="l00271"></a>00271 <span class="comment">    */</span>
-<a name="l00272"></a>00272     cfg -> loPos =              DISTORTION_LOPOS;
-<a name="l00273"></a>00273     cfg -> hiPos =              DISTORTION_HIPOS;
-<a name="l00274"></a>00274     cfg -> pixel_tolerance =    w->pixel_tol;
-<a name="l00275"></a>00275         cfg-> diffTol = d->diff_tol[ins_set];
-<a name="l00276"></a>00276     <span class="comment">/*</span>
-<a name="l00277"></a>00277 <span class="comment">        sinfo_msg("cfg->guessBeginWavelength %g",cfg -> guessBeginWavelength);</span>
-<a name="l00278"></a>00278 <span class="comment">        sinfo_msg("cfg->guessDispersion1 %g",cfg -> guessDispersion1);</span>
-<a name="l00279"></a>00279 <span class="comment">        sinfo_msg("cfg->guessDispersion2 %g",cfg -> guessDispersion2);</span>
-<a name="l00280"></a>00280 <span class="comment">        sinfo_msg("cfg->mindiff %g",cfg -> mindiff);</span>
-<a name="l00281"></a>00281 <span class="comment">        sinfo_msg("cfg->halfWidth %d",cfg ->  halfWidth);</span>
-<a name="l00282"></a>00282 <span class="comment">        sinfo_msg("cfg->fwhm %g",cfg -> fwhm);</span>
-<a name="l00283"></a>00283 <span class="comment">        sinfo_msg("cfg->minAmplitude %g",cfg -> minAmplitude);</span>
-<a name="l00284"></a>00284 <span class="comment">        sinfo_msg("cfg->nrDispCoefficients %d",cfg -> nrDispCoefficients);</span>
-<a name="l00285"></a>00285 <span class="comment">        sinfo_msg("cfg->nrCoefCoefficients %d",cfg -> nrCoefCoefficients);</span>
-<a name="l00286"></a>00286 <span class="comment">        sinfo_msg("cfg->pixel_tolerance  %g",cfg -> pixel_tolerance);</span>
-<a name="l00287"></a>00287 <span class="comment">        sinfo_msg("cfg->loPos %d",cfg -> loPos);</span>
-<a name="l00288"></a>00288 <span class="comment">        sinfo_msg("cfg->hiPos %d",cfg -> hiPos);</span>
-<a name="l00289"></a>00289 <span class="comment">        sinfo_msg("cfg->yBox  %f",cfg -> yBox);</span>
-<a name="l00290"></a>00290 <span class="comment">    */</span>
-<a name="l00291"></a>00291         sinfo_distpar_delete(d);
-<a name="l00292"></a>00292     sinfo_wcal_delete(w);
-<a name="l00293"></a>00293         cpl_table_delete(drs_tab);
-<a name="l00294"></a>00294         <span class="keywordflow">if</span>(-1 == sinfo_check_rec_status(0)) {
-<a name="l00295"></a>00295       (*status)++;
-<a name="l00296"></a>00296       <span class="keywordflow">return</span>;
-<a name="l00297"></a>00297     }
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299    } <span class="keywordflow">else</span> {
-<a name="l00300"></a>00300     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, DRS_SETUP_WAVE);
-<a name="l00301"></a>00301         sinfo_distpar_delete(d);
-<a name="l00302"></a>00302     sinfo_wcal_delete(w);
-<a name="l00303"></a>00303         (*status)++;
-<a name="l00304"></a>00304         <span class="keywordflow">return</span>;
-<a name="l00305"></a>00305    }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308    nstp=sinfo_nstpar_new();  
-<a name="l00309"></a>00309    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>);
-<a name="l00310"></a>00310    <span class="keywordflow">if</span>(cpl_parameter_get_default_flag(p) == 0) {
-<a name="l00311"></a>00311       cfg->nsfwhm=nstp->fwhm[ins_set];
-<a name="l00312"></a>00312    } <span class="keywordflow">else</span> {
-<a name="l00313"></a>00313       cfg->nsfwhm=cpl_parameter_get_double(p);
-<a name="l00314"></a>00314    }
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_diff"</span>);
-<a name="l00317"></a>00317    <span class="keywordflow">if</span>(cpl_parameter_get_default_flag(p) == 0) {
-<a name="l00318"></a>00318      cfg->minDiff=nstp->min_dif[ins_set];
-<a name="l00319"></a>00319    } <span class="keywordflow">else</span> {
-<a name="l00320"></a>00320      cfg->minDiff=cpl_parameter_get_double(p);
-<a name="l00321"></a>00321    }
-<a name="l00322"></a>00322    sinfo_nstpar_delete(nstp);
-<a name="l00323"></a>00323    <span class="comment">//sinfo_msg("cfg -> nsfwhm  %f",cfg -> nsfwhm);</span>
-<a name="l00324"></a>00324    <span class="comment">//sinfo_msg("cfg -> minDiff  %f",cfg -> minDiff);</span>
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327    <span class="keywordflow">return</span>;
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329 }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 
-<a name="l00340"></a>00340 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00341"></a>00341 parse_section_findlines(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00342"></a>00342 {
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344    cpl_parameter* p;
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346    p = cpl_parameterlist_find(cpl_cfg, 
-<a name="l00347"></a>00347                               <span class="stringliteral">"sinfoni.distortion.min_diff_mean_med_col_int"</span>);
-<a name="l00348"></a>00348    cfg -> mindiff =  cpl_parameter_get_double(p);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.half_width"</span>);
-<a name="l00351"></a>00351    cfg -> halfWidth = cpl_parameter_get_int(p);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.sigma"</span>);
-<a name="l00354"></a>00354    cfg -> sigma =  cpl_parameter_get_double(p);
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356    return ;
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358 }
-<a name="l00359"></a>00359 
-<a name="l00367"></a>00367 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00368"></a>00368 parse_section_wavecalib(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00369"></a>00369 {
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372    cpl_parameter* p;
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.fwhm"</span>);
-<a name="l00375"></a>00375    cfg -> fwhm =  cpl_parameter_get_double(p);
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_amplitude"</span>);
-<a name="l00378"></a>00378    cfg -> minAmplitude =  cpl_parameter_get_double(p);
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.max_residual"</span>);
-<a name="l00381"></a>00381    cfg -> maxResidual =  cpl_parameter_get_double(p);
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.n_a_coefficients"</span>);
-<a name="l00384"></a>00384    cfg -> nrDispCoefficients = cpl_parameter_get_int(p);
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.n_b_coefficients"</span>);
-<a name="l00387"></a>00387    cfg -> nrCoefCoefficients = cpl_parameter_get_int(p);
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.sigma_factor"</span>);
-<a name="l00390"></a>00390    cfg -> sigmaFactor =  cpl_parameter_get_double(p);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393    cfg -> nslitlets = NSLITLETS;
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.pixel_dist"</span>);
-<a name="l00396"></a>00396    cfg -> pixeldist = cpl_parameter_get_int(p);
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.pixel_tol"</span>);
-<a name="l00399"></a>00399    cfg -> pixel_tolerance = cpl_parameter_get_double(p);
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403 }
-<a name="l00404"></a>00404 
-<a name="l00412"></a>00412 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00413"></a>00413 parse_section_wavemap(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00414"></a>00414 {
-<a name="l00415"></a>00415    cpl_parameter* p;
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.mag_factor"</span>);
-<a name="l00418"></a>00418    cfg -> magFactor = cpl_parameter_get_int(p);
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420 }
-<a name="l00421"></a>00421 
-<a name="l00429"></a>00429 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00430"></a>00430 parse_section_fitslits(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00431"></a>00431 {
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433    cpl_parameter* p;
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435    cfg -> loPos =  DISTORTION_LOPOS;
-<a name="l00436"></a>00436    cfg -> hiPos =  DISTORTION_HIPOS;
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.box_length"</span>);
-<a name="l00439"></a>00439    cfg -> boxLength = cpl_parameter_get_int(p);
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.y_box"</span>);
-<a name="l00442"></a>00442    cfg -> yBox = cpl_parameter_get_double(p);
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.diff_tol"</span>);
-<a name="l00445"></a>00445    cfg -> diffTol =  cpl_parameter_get_double(p);
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 }
-<a name="l00448"></a>00448 
-<a name="l00456"></a>00456 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00457"></a>00457 parse_section_qclog      (finddist_config * cfg, cpl_parameterlist* cpl_cfg)
-<a name="l00458"></a>00458 {
-<a name="l00459"></a>00459    cpl_parameter* p;
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.qc_thresh_min"</span>);
-<a name="l00462"></a>00462    cfg ->  qc_thresh_min = cpl_parameter_get_int(p);
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.qc_thresh_max"</span>);
-<a name="l00466"></a>00466    cfg ->  qc_thresh_max = cpl_parameter_get_int(p);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469 }
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471 
-<a name="l00479"></a>00479 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00480"></a>00480 parse_section_northsouthtest(finddist_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00481"></a>00481 {
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483    cpl_parameter *p;   
-<a name="l00484"></a>00484    strcat(cfg -> fitsname, DISTORTION_NS_OUT_FILENAME);
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486    cfg -> nslits = NSLITLETS;
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_half_width"</span>);
-<a name="l00489"></a>00489    cfg -> nshalfWidth = cpl_parameter_get_int(p);
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>);
-<a name="l00492"></a>00492    cfg -> nsfwhm = cpl_parameter_get_double(p);
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_diff"</span>);
-<a name="l00495"></a>00495    cfg -> minDiff = cpl_parameter_get_double(p);
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497    cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.dev_tol"</span>);
-<a name="l00500"></a>00500    cfg -> devtol = cpl_parameter_get_double(p);
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502    return ;
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504 }
-<a name="l00505"></a>00505 
-<a name="l00513"></a>00513 <span class="keywordtype">void</span>
-<a name="l00514"></a>00514 sinfo_finddist_free(finddist_config ** cfg)
-<a name="l00515"></a>00515 {  
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517   <span class="keywordflow">if</span>(*cfg!=NULL) {
-<a name="l00518"></a>00518     sinfo_finddist_cfg_destroy(*cfg);
-<a name="l00519"></a>00519     *cfg=NULL;
-<a name="l00520"></a>00520   }
-<a name="l00521"></a>00521   <span class="keywordflow">return</span>;
-<a name="l00522"></a>00522 
-<a name="l00523"></a>00523 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_finddist_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_finddist_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Aug 12, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   distortion, slitlet distances, first column CPL input </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    handling for SINFONI</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_finddist_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_ref_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> parse_section_frames(finddist_config *, cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                      cpl_frameset* sof, cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> parse_section_findlines(finddist_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> parse_section_wavecalib(finddist_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> parse_section_wavemap(finddist_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> parse_section_fitslits(finddist_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> parse_section_northsouthtest(finddist_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> parse_section_qclog      (finddist_config * cfg, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> finddist_config * </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> sinfo_parse_cpl_input_finddist(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                cpl_frameset* sof, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                cpl_frameset** raw)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         finddist_config   *       cfg ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordtype">int</span>                   status =0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         cfg = sinfo_finddist_cfg_create();</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         parse_section_findlines (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         parse_section_wavecalib (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         parse_section_wavemap   (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         parse_section_fitslits  (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         parse_section_northsouthtest (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         parse_section_qclog(cfg,cpl_cfg);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         parse_section_frames   (cfg, cpl_cfg, sof, raw, &status);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                 sinfo_finddist_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> parse_section_frames(finddist_config * cfg,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>              cpl_parameterlist * cpl_cfg,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                      cpl_frameset** raw,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    cpl_table* drs_tab=NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    wcal* w=NULL;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    <span class="keywordtype">int</span> check=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    nstpar* nstp=NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    distpar* d=NULL;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    d=sinfo_distpar_new();</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    w=sinfo_wcal_new();</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    nframes = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* Get the raw and the calibration files */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    sinfo_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present "</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                       <span class="stringliteral">"in frameset!Aborting..."</span>,nraw,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           (*status)++;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED)) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       frame = cpl_frameset_find(sof,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         (*status)++;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    strcpy(cfg -> outName, DISTORTION_OUT_FILENAME);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,REF_LINE_ARC)) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       frame = cpl_frameset_find(sof,REF_LINE_ARC);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       strcpy(cfg -> lineList,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, REF_LINE_ARC);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         (*status)++;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED)) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       frame = cpl_frameset_find(sof,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       strcpy(cfg -> nsFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         (*status)++;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       strcpy(cfg -> mask,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         (*status)++;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>    }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>  </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>      {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>      }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,DRS_SETUP_WAVE)) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>      frame = cpl_frameset_find(sof,DRS_SETUP_WAVE);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         strcpy(cfg -> drs_setup,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         drs_tab = cpl_table_load(cfg->drs_setup,1,0);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         w->wstart=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_START"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         w->wgdisp1=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_DISP1"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         w->wgdisp2=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_DISP2"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         w->hw=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_HW"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         w->fwhm=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_FWHM"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         w->min_amp=cpl_table_get_double(drs_tab,<span class="stringliteral">"W_MIN_AMP"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">        w->min_dif=cpl_table_get_double(drs_tab,"W_MIN_DIF",ins_set,&check);</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">        w->na_coef=cpl_table_get_int(drs_tab,"W_NA_COEFF",ins_set,&check);</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">        w->nb_coef=cpl_table_get_int(drs_tab,"W_NB_COEFF",ins_set,&check);</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">        w->pixel_tol=cpl_table_get_double(drs_tab,"W_PIX_TOL",ins_set,&check);</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">        w->y_box=cpl_table_get_double(drs_tab,"W_Y_BOX",ins_set,&check);</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         w->low_pos=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_LOW_POS"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         w->hig_pos=cpl_table_get_int(drs_tab,<span class="stringliteral">"W_HI_POS"</span>,ins_set,&check);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     cfg -> guessBeginWavelength = w->wstart;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     cfg -> guessDispersion1 =  w->wgdisp1;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cfg -> guessDispersion2 =  w->wgdisp2;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     cfg -> halfWidth =         w->hw;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     cfg -> fwhm =              w->fwhm;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     cfg -> minAmplitude =      w->min_amp;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">    cfg -> mindiff =           w->min_dif;</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">    cfg -> nrDispCoefficients = w->na_coef;</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">    cfg -> nrCoefCoefficients = w->nb_coef;</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">    cfg -> pixel_tolerance =    w->pixel_tol;</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">    cfg -> yBox =               w->y_box;</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cfg -> loPos =              DISTORTION_LOPOS;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     cfg -> hiPos =              DISTORTION_HIPOS;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     cfg -> pixel_tolerance =    w->pixel_tol;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         cfg-> diffTol = d->diff_tol[ins_set];</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">        sinfo_msg("cfg->guessBeginWavelength %g",cfg -> guessBeginWavelength);</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">        sinfo_msg("cfg->guessDispersion1 %g",cfg -> guessDispersion1);</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">        sinfo_msg("cfg->guessDispersion2 %g",cfg -> guessDispersion2);</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">        sinfo_msg("cfg->mindiff %g",cfg -> mindiff);</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">        sinfo_msg("cfg->halfWidth %d",cfg ->  halfWidth);</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">        sinfo_msg("cfg->fwhm %g",cfg -> fwhm);</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">        sinfo_msg("cfg->minAmplitude %g",cfg -> minAmplitude);</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">        sinfo_msg("cfg->nrDispCoefficients %d",cfg -> nrDispCoefficients);</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">        sinfo_msg("cfg->nrCoefCoefficients %d",cfg -> nrCoefCoefficients);</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">        sinfo_msg("cfg->pixel_tolerance  %g",cfg -> pixel_tolerance);</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">        sinfo_msg("cfg->loPos %d",cfg -> loPos);</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">        sinfo_msg("cfg->hiPos %d",cfg -> hiPos);</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">        sinfo_msg("cfg->yBox  %f",cfg -> yBox);</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         cpl_table_delete(drs_tab);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         <span class="keywordflow">if</span>(-1 == sinfo_check_rec_status(0)) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       (*status)++;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, DRS_SETUP_WAVE);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         sinfo_distpar_delete(d);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     sinfo_wcal_delete(w);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         (*status)++;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    nstp=sinfo_nstpar_new();  </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>    <span class="keywordflow">if</span>(cpl_parameter_get_default_flag(p) == 0) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       cfg->nsfwhm=nstp->fwhm[ins_set];</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       cfg->nsfwhm=cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>    }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_diff"</span>);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>    <span class="keywordflow">if</span>(cpl_parameter_get_default_flag(p) == 0) {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>      cfg->minDiff=nstp->min_dif[ins_set];</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>      cfg->minDiff=cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    sinfo_nstpar_delete(nstp);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>    <span class="comment">//sinfo_msg("cfg -> nsfwhm  %f",cfg -> nsfwhm);</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>    <span class="comment">//sinfo_msg("cfg -> minDiff  %f",cfg -> minDiff);</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> parse_section_findlines(finddist_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>    p = cpl_parameterlist_find(cpl_cfg, </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                               <span class="stringliteral">"sinfoni.distortion.min_diff_mean_med_col_int"</span>);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    cfg -> mindiff =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.half_width"</span>);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    cfg -> halfWidth = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.sigma"</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    cfg -> sigma =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    return ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> parse_section_wavecalib(finddist_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> {</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.fwhm"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>    cfg -> fwhm =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_amplitude"</span>);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>    cfg -> minAmplitude =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.max_residual"</span>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>    cfg -> maxResidual =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.n_a_coefficients"</span>);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>    cfg -> nrDispCoefficients = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.n_b_coefficients"</span>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>    cfg -> nrCoefCoefficients = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.sigma_factor"</span>);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>    cfg -> sigmaFactor =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>    cfg -> nslitlets = NSLITLETS;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.pixel_dist"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>    cfg -> pixeldist = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.pixel_tol"</span>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>    cfg -> pixel_tolerance = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> parse_section_wavemap(finddist_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.mag_factor"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>    cfg -> magFactor = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> parse_section_fitslits(finddist_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>    cfg -> loPos =  DISTORTION_LOPOS;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>    cfg -> hiPos =  DISTORTION_HIPOS;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.box_length"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>    cfg -> boxLength = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.y_box"</span>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>    cfg -> yBox = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.diff_tol"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>    cfg -> diffTol =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> parse_section_qclog      (finddist_config * cfg, cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>    cfg ->  qc_thresh_min = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>    cfg ->  qc_thresh_max = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> parse_section_northsouthtest(finddist_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>    cpl_parameter *p;   </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>    strcat(cfg -> fitsname, DISTORTION_NS_OUT_FILENAME);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>    cfg -> nslits = NSLITLETS;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_half_width"</span>);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>    cfg -> nshalfWidth = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.ns_fwhm"</span>);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>    cfg -> nsfwhm = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.min_diff"</span>);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>    cfg -> minDiff = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>    cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.distortion.dev_tol"</span>);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>    cfg -> devtol = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>    return ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> }</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> sinfo_finddist_free(finddist_config ** cfg)</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> {  </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   <span class="keywordflow">if</span>(*cfg!=NULL) {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     sinfo_finddist_cfg_destroy(*cfg);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     *cfg=NULL;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__finddist__ini__by__cpl_8h_source.html b/html/sinfo__finddist__ini__by__cpl_8h_source.html
index 51a3e46..d934ffc 100644
--- a/html/sinfo__finddist__ini__by__cpl_8h_source.html
+++ b/html/sinfo__finddist__ini__by__cpl_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_finddist_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_finddist_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_finddist_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Aug 12, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   Distortions, slitlets distances, </span>
-<a name="l00025"></a>00025 <span class="comment">                    first column determination cpl input </span>
-<a name="l00026"></a>00026 <span class="comment">                    parameters parsing for SINFONI</span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_FINDDIST_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_INI_BY_CPL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                             Function prototypes </span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 finddist_config * 
-<a name="l00052"></a>00052 sinfo_parse_cpl_input_finddist(cpl_parameterlist * cpl_cfg, 
-<a name="l00053"></a>00053                                cpl_frameset* sof, 
-<a name="l00054"></a>00054                    cpl_frameset** raw);
-<a name="l00061"></a>00061 <span class="keywordtype">void</span> 
-<a name="l00062"></a>00062 sinfo_finddist_free(finddist_config ** cfg);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_finddist_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_finddist_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Aug 12, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   Distortions, slitlets distances, </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                    first column determination cpl input </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                    parameters parsing for SINFONI</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_FINDDIST_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FINDDIST_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_finddist_cfg.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> finddist_config * </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_parse_cpl_input_finddist(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                                cpl_frameset* sof, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                    cpl_frameset** raw);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_finddist_free(finddist_config ** cfg);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fit_8c_source.html b/html/sinfo__fit_8c_source.html
index 91f5680..ee8b1c0 100644
--- a/html/sinfo__fit_8c_source.html
+++ b/html/sinfo__fit_8c_source.html
@@ -2,387 +2,418 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fit.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fit.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_fit.h></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <math.h></span>
-<a name="l00034"></a>00034 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00035"></a>00035 sinfo_spline(<span class="keywordtype">double</span> x,
-<a name="l00036"></a>00036              <span class="keywordtype">double</span> cons[],
-<a name="l00037"></a>00037              <span class="keywordtype">double</span> ak[],
-<a name="l00038"></a>00038              <span class="keywordtype">double</span> *sp,
-<a name="l00039"></a>00039              <span class="keywordtype">double</span> *spp,
-<a name="l00040"></a>00040              <span class="keywordtype">double</span> *sppp,
-<a name="l00041"></a>00041              <span class="keywordtype">int</span> n);
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 
-<a name="l00062"></a>00062 <span class="keywordtype">double</span> 
-<a name="l00063"></a>00063 sinfo_amsub(<span class="keywordtype">double</span> d0[],
-<a name="l00064"></a>00064             <span class="keywordtype">double</span> d1[],
-<a name="l00065"></a>00065             <span class="keywordtype">double</span> d2[],
-<a name="l00066"></a>00066             <span class="keywordtype">double</span> value[],
-<a name="l00067"></a>00067             <span class="keywordtype">double</span> range[],
-<a name="l00068"></a>00068             <span class="keywordtype">double</span> tol,
-<a name="l00069"></a>00069             <span class="keywordtype">int</span> ivorf[], 
-<a name="l00070"></a>00070             <span class="keywordtype">int</span> ncon,
-<a name="l00071"></a>00071             <span class="keywordtype">int</span> nref,
-<a name="l00072"></a>00072             <span class="keywordtype">double</span>(*ftbm)(<span class="keywordtype">double</span>[],<span class="keywordtype">int</span> ncon)) 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075   <span class="keywordtype">double</span> alpha=1.0,loc_gamma=1.5;
-<a name="l00076"></a>00076   <span class="keywordtype">double</span> sf,bsave,temp,sum,cval,ccval,beta;
-<a name="l00077"></a>00077   <span class="keywordtype">int</span> idone,nvar,nvec,nrefl,i,j,k,kd1,kval,isign,jvar,imin,imax,i2max,
-<a name="l00078"></a>00078     it1,it2,itemp;
-<a name="l00079"></a>00079   idone=0;
-<a name="l00080"></a>00080   isign=1;
-<a name="l00081"></a>00081   <span class="comment">// we require that nvec=nvar+1, define nvar</span>
-<a name="l00082"></a>00082   nvar=0;
-<a name="l00083"></a>00083  <span class="keywordflow">for</span>(i=0;i<ncon;++i) {
-<a name="l00084"></a>00084    <span class="keywordflow">if</span>(ivorf[i] == 1) {
-<a name="l00085"></a>00085       nvar=nvar+1;
-<a name="l00086"></a>00086    }
-<a name="l00087"></a>00087  }
-<a name="l00088"></a>00088  nvec=nvar+1;
-<a name="l00089"></a>00089  <span class="comment">// sf is the 'shrink' factor</span>
-<a name="l00090"></a>00090  sf=1e5*nvec;
-<a name="l00091"></a>00091  nrefl=0;
-<a name="l00092"></a>00092  value[0]=(*ftbm)(d2,ncon);
-<a name="l00093"></a>00093  <span class="comment">// sinfo_msg("value[0] = %lg",value[0]);</span>
-<a name="l00094"></a>00094  <span class="comment">// initial and shrink calculation of the d1 array, uses range</span>
-<a name="l00095"></a>00095  <span class="comment">// set d2 in the first position -- using Fortran convention of 1st</span>
-<a name="l00096"></a>00096  <span class="comment">// array element moving first</span>
-<a name="l00097"></a>00097  cont20:
-<a name="l00098"></a>00098  kd1=-1;
-<a name="l00099"></a>00099  <span class="keywordflow">for</span>(i=0;i<ncon;++i) {
-<a name="l00100"></a>00100    <span class="keywordflow">if</span>(ivorf[i]==1) {
-<a name="l00101"></a>00101      kd1=kd1+1;
-<a name="l00102"></a>00102      d1[kd1]=d2[i];
-<a name="l00103"></a>00103    }
-<a name="l00104"></a>00104  }
-<a name="l00105"></a>00105  <span class="comment">// now for the next nvar values</span>
-<a name="l00106"></a>00106  kval=0;
-<a name="l00107"></a>00107  <span class="keywordflow">for</span>(jvar=0;jvar<ncon;++jvar) {
-<a name="l00108"></a>00108    <span class="keywordflow">if</span>(ivorf[jvar] == 1) {
-<a name="l00109"></a>00109      kval=kval+1;
-<a name="l00110"></a>00110      bsave=d2[jvar];
-<a name="l00111"></a>00111      isign=-isign;
-<a name="l00112"></a>00112      d2[jvar]=d2[jvar]+isign*range[jvar];
-<a name="l00113"></a>00113      value[kval]=(*ftbm)(d2,ncon);
-<a name="l00114"></a>00114      <span class="keywordflow">for</span>(i=0;i<ncon;++i) {
-<a name="l00115"></a>00115        <span class="keywordflow">if</span>(ivorf[i]==1) {
-<a name="l00116"></a>00116      kd1=kd1+1;
-<a name="l00117"></a>00117          d1[kd1]=d2[i];
-<a name="l00118"></a>00118        }
-<a name="l00119"></a>00119      }
-<a name="l00120"></a>00120      d2[jvar]=bsave;
-<a name="l00121"></a>00121    }
-<a name="l00122"></a>00122  }
-<a name="l00123"></a>00123  <span class="comment">// sinfo_msg(" d1 ");</span>
-<a name="l00124"></a>00124  <span class="comment">// for (j=0;j<nvec;++j) {</span>
-<a name="l00125"></a>00125  <span class="comment">//   for(i=0;i<nvar;++i) {</span>
-<a name="l00126"></a>00126  <span class="comment">//     sinfo_msg("%12.4lg ",d1[i+j*nvar]);</span>
-<a name="l00127"></a>00127  <span class="comment">//   }</span>
-<a name="l00128"></a>00128  <span class="comment">// }</span>
-<a name="l00129"></a>00129  <span class="comment">/* find highest, second highest, and minimum values</span>
-<a name="l00130"></a>00130 <span class="comment">    imax points to the vector with the largest value</span>
-<a name="l00131"></a>00131 <span class="comment">    i2max points to the vector with the second largest value</span>
-<a name="l00132"></a>00132 <span class="comment">    imin points to the vector with the smallest value  */</span>
-<a name="l00133"></a>00133  cont40:
-<a name="l00134"></a>00134  imin=1;
-<a name="l00135"></a>00135  <span class="keywordflow">if</span>(value[0]>value[1]) {
-<a name="l00136"></a>00136    imax=0;
-<a name="l00137"></a>00137    i2max=1;
-<a name="l00138"></a>00138  } <span class="keywordflow">else</span> {
-<a name="l00139"></a>00139    imax=1;
-<a name="l00140"></a>00140    i2max=0;
-<a name="l00141"></a>00141  }
-<a name="l00142"></a>00142  <span class="keywordflow">for</span>(i=0;i<nvec;++i) {
-<a name="l00143"></a>00143    <span class="keywordflow">if</span>(value[i]<value[imin]) imin=i;
-<a name="l00144"></a>00144    <span class="keywordflow">if</span>(value[i]>value[imax]) {
-<a name="l00145"></a>00145      i2max=imax;
-<a name="l00146"></a>00146      imax=i;
-<a name="l00147"></a>00147    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (value[i]>value[i2max]) && (i != imax) ) {
-<a name="l00148"></a>00148        i2max=i;
-<a name="l00149"></a>00149    }
-<a name="l00150"></a>00150  }
-<a name="l00151"></a>00151  <span class="comment">// sinfo_msg(" values after sorting ");</span>
-<a name="l00152"></a>00152  <span class="comment">// for(i=0;i<nvec;++i)sinfo_msg("%12.4lg ",value[i]);</span>
-<a name="l00153"></a>00153  <span class="comment">// sinfo_msg("imin %d,i2max %d,imax %d",imin,i2max,imax); </span>
-<a name="l00154"></a>00154  <span class="comment">// scanf("%d",&itest);</span>
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156  <span class="comment">// check if done</span>
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158  <span class="keywordflow">if</span>(nrefl>=nref) {
-<a name="l00159"></a>00159    sinfo_msg(<span class="stringliteral">" maximum number of reflection reached"</span>);
-<a name="l00160"></a>00160    idone=1;
-<a name="l00161"></a>00161    <span class="keywordflow">goto</span> cont400;
-<a name="l00162"></a>00162  }
-<a name="l00163"></a>00163  <span class="keywordflow">if</span>(value[imin]!=0.0) {
-<a name="l00164"></a>00164    temp=(value[imax]-value[imin])/value[imin];
-<a name="l00165"></a>00165    <span class="keywordflow">if</span>(fabs(temp)<=tol) {
-<a name="l00166"></a>00166      sinfo_msg(<span class="stringliteral">" reached tolerance %lg temp %lg tol"</span>,temp,tol);
-<a name="l00167"></a>00167      idone=1;
-<a name="l00168"></a>00168      <span class="keywordflow">goto</span> cont400;
-<a name="l00169"></a>00169    }
-<a name="l00170"></a>00170  }
-<a name="l00171"></a>00171  <span class="keywordflow">if</span>(value[imax]-value[imin]<=tol) {
-<a name="l00172"></a>00172     sinfo_msg(<span class="stringliteral">"value[max]-value[min]<=tol"</span>);
-<a name="l00173"></a>00173     idone=1;
-<a name="l00174"></a>00174     <span class="keywordflow">goto</span> cont400;
-<a name="l00175"></a>00175  }
-<a name="l00176"></a>00176     
-<a name="l00177"></a>00177  <span class="comment">// *** form d0 the average of all but imax</span>
-<a name="l00178"></a>00178  <span class="keywordflow">for</span>(j=0;j<nvar;++j) {
-<a name="l00179"></a>00179    sum=0.0;
-<a name="l00180"></a>00180    <span class="keywordflow">for</span>(i=0;i<nvec;++i) {
-<a name="l00181"></a>00181       <span class="keywordflow">if</span>(i!=imax)sum=sum+d1[i*nvar+j];
-<a name="l00182"></a>00182    }
-<a name="l00183"></a>00183    d0[j]=sum/(nvec-1);
-<a name="l00184"></a>00184  }
-<a name="l00185"></a>00185  <span class="comment">// sinfo_msg(" D0 values ");</span>
-<a name="l00186"></a>00186  <span class="comment">// for(i=0;i<nvar;++i)sinfo_msg("%12.4lg ",d0[i]);</span>
-<a name="l00187"></a>00187  <span class="comment">// scanf("%d",&itest);</span>
-<a name="l00188"></a>00188  <span class="comment">// reflection</span>
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190  nrefl=nrefl+1;
-<a name="l00191"></a>00191  k=-1;
-<a name="l00192"></a>00192  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00193"></a>00193    <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00194"></a>00194      k=k+1;
-<a name="l00195"></a>00195      it1=imax*nvar+k;
-<a name="l00196"></a>00196      d2[j]=(1+alpha)*d0[k]-alpha*d1[it1];
-<a name="l00197"></a>00197    }
-<a name="l00198"></a>00198  }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200  <span class="comment">// sinfo_msg(" refl d2 ");</span>
-<a name="l00201"></a>00201  <span class="comment">// for(i=0;i<nvar;++i) sinfo_msg("%12.4lg ",d2[i]);</span>
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203  cval=(*ftbm)(d2,ncon);
-<a name="l00204"></a>00204  <span class="comment">// sinfo_msg("refl ftbm %lg",cval);  </span>
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206  <span class="comment">// value is higher than i2max so do contraction</span>
-<a name="l00207"></a>00207  <span class="keywordflow">if</span>(cval>=value[i2max]) <span class="keywordflow">goto</span> cont200;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209  <span class="comment">// value is less than i2max - normal - update d1 and value</span>
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211  value[imax]=cval;
-<a name="l00212"></a>00212  k=-1;
-<a name="l00213"></a>00213  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00214"></a>00214    <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00215"></a>00215      k=k+1;
-<a name="l00216"></a>00216      it1=imax*nvar+k;
-<a name="l00217"></a>00217      d1[it1]=d2[j];
-<a name="l00218"></a>00218    }
-<a name="l00219"></a>00219  }
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221  <span class="comment">// value is less than imin, try expansion</span>
-<a name="l00222"></a>00222  <span class="keywordflow">if</span>(cval<value[imin]) <span class="keywordflow">goto</span> cont300;
-<a name="l00223"></a>00223  <span class="keywordflow">goto</span> cont40;
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225  <span class="comment">// contraction</span>
-<a name="l00226"></a>00226  cont200:
-<a name="l00227"></a>00227  <span class="comment">// sinfo_msg(" contraction ");</span>
-<a name="l00228"></a>00228  beta=0.75;
-<a name="l00229"></a>00229  <span class="keywordflow">for</span>(itemp=0;itemp<3;++itemp) {
-<a name="l00230"></a>00230    <span class="keywordflow">if</span>(cval<=value[imax]) {
-<a name="l00231"></a>00231      value[imax]=cval;
-<a name="l00232"></a>00232      k=-1;
-<a name="l00233"></a>00233      <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00234"></a>00234        <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00235"></a>00235          k=k+1;
-<a name="l00236"></a>00236          it1=imax*nvar+k;
-<a name="l00237"></a>00237          d1[it1]=d2[j];
-<a name="l00238"></a>00238        }
-<a name="l00239"></a>00239      }
-<a name="l00240"></a>00240    }
-<a name="l00241"></a>00241    k=-1;
-<a name="l00242"></a>00242    <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00243"></a>00243      <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00244"></a>00244        k=k+1;
-<a name="l00245"></a>00245        it1=imax*nvar+k;
-<a name="l00246"></a>00246        d2[j]=beta*d1[it1]+(1.-beta)*d0[k];
-<a name="l00247"></a>00247      }
-<a name="l00248"></a>00248    }
-<a name="l00249"></a>00249    cval=ftbm(d2,ncon);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251    <span class="comment">// sinfo_msg(" contraction beta %lg cval %lg ",beta,cval);</span>
-<a name="l00252"></a>00252    <span class="comment">// value is better</span>
-<a name="l00253"></a>00253    <span class="keywordflow">if</span>(cval<value[i2max]) {
-<a name="l00254"></a>00254      value[imax]=cval;
-<a name="l00255"></a>00255      k=-1;
-<a name="l00256"></a>00256      <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00257"></a>00257        <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00258"></a>00258          k=k+1;
-<a name="l00259"></a>00259          it1=imax*nvar+k;
-<a name="l00260"></a>00260          d1[it1]=d2[j];
-<a name="l00261"></a>00261        }
-<a name="l00262"></a>00262      }
-<a name="l00263"></a>00263      <span class="keywordflow">if</span>(cval<value[imin]) sinfo_msg(<span class="stringliteral">" contraction minimum %lg"</span>,cval);
-<a name="l00264"></a>00264      <span class="keywordflow">goto</span> cont40;
-<a name="l00265"></a>00265    }
-<a name="l00266"></a>00266    beta=beta-0.25;
-<a name="l00267"></a>00267  }
-<a name="l00268"></a>00268  sinfo_msg(<span class="stringliteral">" contraction failed  ==>shrink"</span>);
-<a name="l00269"></a>00269  <span class="comment">// scanf("%d",&itest);</span>
-<a name="l00270"></a>00270  <span class="comment">// value is worse so shrink it</span>
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272  <span class="keywordflow">goto</span> cont400;
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274  <span class="comment">// expansion</span>
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276  cont300:
-<a name="l00277"></a>00277  sinfo_msg(<span class="stringliteral">" reflection min %lg \n"</span>, cval);
-<a name="l00278"></a>00278  k=-1;
-<a name="l00279"></a>00279  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00280"></a>00280    <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00281"></a>00281      k=k+1;
-<a name="l00282"></a>00282      d2[j]=loc_gamma*d2[j]+(1.-loc_gamma)*d0[k];
-<a name="l00283"></a>00283    }
-<a name="l00284"></a>00284  }
-<a name="l00285"></a>00285  ccval=(*ftbm)(d2,ncon);
-<a name="l00286"></a>00286  <span class="comment">// value is higher than reflected value ==> discard</span>
-<a name="l00287"></a>00287  <span class="keywordflow">if</span>(ccval>cval) <span class="keywordflow">goto</span> cont40;
-<a name="l00288"></a>00288  <span class="comment">// value is better so use it rather than the reflected point</span>
-<a name="l00289"></a>00289  sinfo_msg(<span class="stringliteral">" expansion minimum %lg \n"</span>,ccval);
-<a name="l00290"></a>00290  value[imax]=ccval;
-<a name="l00291"></a>00291  k=-1;
-<a name="l00292"></a>00292  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00293"></a>00293    <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00294"></a>00294      k=k+1;
-<a name="l00295"></a>00295      it1=imax*nvar+k;
-<a name="l00296"></a>00296      d1[it1]=d2[j];
-<a name="l00297"></a>00297    }
-<a name="l00298"></a>00298  }
-<a name="l00299"></a>00299  <span class="keywordflow">goto</span> cont40;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301  cont400:
-<a name="l00302"></a>00302  <span class="comment">// sinfo_msg(" following cont400 ");</span>
-<a name="l00303"></a>00303  <span class="comment">// scanf("%d",&itest);</span>
-<a name="l00304"></a>00304  <span class="comment">// recalculate d2 and range</span>
-<a name="l00305"></a>00305  <span class="comment">// the range is the average of dist**2 from d1 with min value</span>
-<a name="l00306"></a>00306  k=-1;
-<a name="l00307"></a>00307  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {
-<a name="l00308"></a>00308    <span class="keywordflow">if</span>(ivorf[j]==1) {
-<a name="l00309"></a>00309      k=k+1;
-<a name="l00310"></a>00310      it1=imin*nvar+k;
-<a name="l00311"></a>00311      d2[j]=d1[it1];
-<a name="l00312"></a>00312      sum=0.0;
-<a name="l00313"></a>00313      <span class="keywordflow">for</span>(i=0;i<nvec;++i) {
-<a name="l00314"></a>00314        it1=i*nvar+k;
-<a name="l00315"></a>00315        it2=imin*nvar+k;
-<a name="l00316"></a>00316        sum=sum+(d1[it1]-d1[it2])*(d1[it1]-d1[it2]);
-<a name="l00317"></a>00317      }
-<a name="l00318"></a>00318      range[j]=sf*sqrt(sum/(nvec-1));
-<a name="l00319"></a>00319    }
-<a name="l00320"></a>00320  }
-<a name="l00321"></a>00321  value[1]=value[imin];
-<a name="l00322"></a>00322  sf=.75*sf;
-<a name="l00323"></a>00323  <span class="keywordflow">if</span>(sf<0.1)idone=1;
-<a name="l00324"></a>00324  sinfo_msg(<span class="stringliteral">" shrink factor %lg "</span>,sf);
-<a name="l00325"></a>00325  <span class="keywordflow">if</span>(idone!=1)<span class="keywordflow">goto</span> cont20;
-<a name="l00326"></a>00326  <span class="keywordflow">return</span> value[1];
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00331"></a>00331 sinfo_spline(<span class="keywordtype">double</span> x,
-<a name="l00332"></a>00332              <span class="keywordtype">double</span> cons[],
-<a name="l00333"></a>00333              <span class="keywordtype">double</span> ak[],
-<a name="l00334"></a>00334              <span class="keywordtype">double</span> *sp,
-<a name="l00335"></a>00335              <span class="keywordtype">double</span> *spp,
-<a name="l00336"></a>00336              <span class="keywordtype">double</span> *sppp,
-<a name="l00337"></a>00337              <span class="keywordtype">int</span> n)
-<a name="l00338"></a>00338 {
-<a name="l00339"></a>00339 <span class="keywordtype">double</span> retval=0;
-<a name="l00340"></a>00340 <span class="keywordtype">double</span> xm=0;
-<a name="l00341"></a>00341 <span class="keywordtype">double</span> xm2=0;
-<a name="l00342"></a>00342 <span class="keywordtype">double</span> xm3=0;
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344 <span class="keywordtype">int</span> i=0;
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347  *sp=0;
-<a name="l00348"></a>00348  *spp=0;
-<a name="l00349"></a>00349  *sppp=0;
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351  <span class="keywordflow">for</span>(i=0;i<n;++i) {
-<a name="l00352"></a>00352    <span class="keywordflow">if</span>(ak[i] >= x) {
-<a name="l00353"></a>00353      xm=ak[i]-x;
-<a name="l00354"></a>00354      xm2=xm*xm;
-<a name="l00355"></a>00355      xm3=xm*xm2;
-<a name="l00356"></a>00356      sinfo_msg(<span class="stringliteral">"cons=%g"</span>,cons[i]);
-<a name="l00357"></a>00357      retval+=cons[i]*xm3;
-<a name="l00358"></a>00358      *sp-=3*cons[i]*xm2;
-<a name="l00359"></a>00359      *spp+=6*cons[i]*xm;
-<a name="l00360"></a>00360      *sppp-=6*cons[i];
-<a name="l00361"></a>00361    }
-<a name="l00362"></a>00362  }
-<a name="l00363"></a>00363  sinfo_msg(<span class="stringliteral">"1x=%g retval=%g"</span>,x,retval);
-<a name="l00364"></a>00364  <span class="keywordflow">return</span> retval;
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366 }
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 <span class="keywordtype">double</span> 
-<a name="l00372"></a>00372 sinfo_ftbm(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> cons[])
-<a name="l00373"></a>00373 {
-<a name="l00374"></a>00374   <span class="keywordtype">double</span> retval=0;
-<a name="l00375"></a>00375   <span class="keywordtype">double</span> ak[4]={-1,-.666666666666666,-.333333333333,0};
-<a name="l00376"></a>00376   <span class="keywordtype">double</span> sm1=0;
-<a name="l00377"></a>00377   <span class="keywordtype">double</span> spm1=0;
-<a name="l00378"></a>00378   <span class="keywordtype">double</span> sppm1=0;
-<a name="l00379"></a>00379   <span class="keywordtype">double</span> spppm1=0;
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381   <span class="keywordtype">int</span> n=4;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   sm1=sinfo_spline(x,cons,ak,&spm1,&sppm1,&spppm1,n)-1;
-<a name="l00384"></a>00384   sinfo_msg(<span class="stringliteral">"x=%g val=%g"</span>,x,sm1+1);
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386   retval=sm1*sm1+spm1*spm1+sppm1*sppm1+spppm1*spppm1;
-<a name="l00387"></a>00387   sinfo_msg(<span class="stringliteral">"fitbm: x=%g retval=%g"</span>,x,retval);
-<a name="l00388"></a>00388   
-<a name="l00389"></a>00389   <span class="keywordflow">return</span> retval;
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 }
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fit.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_fit.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> sinfo_spline(<span class="keywordtype">double</span> x,</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>              <span class="keywordtype">double</span> cons[],</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>              <span class="keywordtype">double</span> ak[],</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>              <span class="keywordtype">double</span> *sp,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>              <span class="keywordtype">double</span> *spp,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>              <span class="keywordtype">double</span> *sppp,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>              <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_amsub(<span class="keywordtype">double</span> d0[],</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>             <span class="keywordtype">double</span> d1[],</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>             <span class="keywordtype">double</span> d2[],</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>             <span class="keywordtype">double</span> value[],</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>             <span class="keywordtype">double</span> range[],</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>             <span class="keywordtype">double</span> tol,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>             <span class="keywordtype">int</span> ivorf[], </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>             <span class="keywordtype">int</span> ncon,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>             <span class="keywordtype">int</span> nref,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>             <span class="keywordtype">double</span>(*ftbm)(<span class="keywordtype">double</span>[],<span class="keywordtype">int</span> ncon)) </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">double</span> alpha=1.0,loc_gamma=1.5;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">double</span> sf,bsave,temp,sum,cval,ccval,beta;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span> idone,nvar,nvec,nrefl,i,j,k,kd1,kval,isign,jvar,imin,imax,i2max,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     it1,it2,itemp;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   idone=0;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   isign=1;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="comment">// we require that nvec=nvar+1, define nvar</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   nvar=0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>  <span class="keywordflow">for</span>(i=0;i<ncon;++i) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>    <span class="keywordflow">if</span>(ivorf[i] == 1) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>       nvar=nvar+1;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>    }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>  }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>  nvec=nvar+1;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>  <span class="comment">// sf is the 'shrink' factor</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>  sf=1e5*nvec;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  nrefl=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>  value[0]=(*ftbm)(d2,ncon);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>  <span class="comment">// sinfo_msg("value[0] = %lg",value[0]);</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>  <span class="comment">// initial and shrink calculation of the d1 array, uses range</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>  <span class="comment">// set d2 in the first position -- using Fortran convention of 1st</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>  <span class="comment">// array element moving first</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>  cont20:</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>  kd1=-1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>  <span class="keywordflow">for</span>(i=0;i<ncon;++i) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    <span class="keywordflow">if</span>(ivorf[i]==1) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>      kd1=kd1+1;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>      d1[kd1]=d2[i];</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>  <span class="comment">// now for the next nvar values</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>  kval=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>  <span class="keywordflow">for</span>(jvar=0;jvar<ncon;++jvar) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>    <span class="keywordflow">if</span>(ivorf[jvar] == 1) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>      kval=kval+1;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>      bsave=d2[jvar];</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>      isign=-isign;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>      d2[jvar]=d2[jvar]+isign*range[jvar];</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>      value[kval]=(*ftbm)(d2,ncon);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>      <span class="keywordflow">for</span>(i=0;i<ncon;++i) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>        <span class="keywordflow">if</span>(ivorf[i]==1) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>      kd1=kd1+1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>          d1[kd1]=d2[i];</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>        }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>      }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>      d2[jvar]=bsave;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>  }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>  <span class="comment">// sinfo_msg(" d1 ");</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>  <span class="comment">// for (j=0;j<nvec;++j) {</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>  <span class="comment">//   for(i=0;i<nvar;++i) {</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>  <span class="comment">//     sinfo_msg("%12.4lg ",d1[i+j*nvar]);</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>  <span class="comment">//   }</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>  <span class="comment">// }</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>  <span class="comment">/* find highest, second highest, and minimum values</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">    imax points to the vector with the largest value</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">    i2max points to the vector with the second largest value</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">    imin points to the vector with the smallest value  */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>  cont40:</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>  imin=1;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>  <span class="keywordflow">if</span>(value[0]>value[1]) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    imax=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    i2max=1;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    imax=1;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    i2max=0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>  }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>  <span class="keywordflow">for</span>(i=0;i<nvec;++i) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="keywordflow">if</span>(value[i]<value[imin]) imin=i;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="keywordflow">if</span>(value[i]>value[imax]) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>      i2max=imax;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>      imax=i;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span>( (value[i]>value[i2max]) && (i != imax) ) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>        i2max=i;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>    }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>  }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>  <span class="comment">// sinfo_msg(" values after sorting ");</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>  <span class="comment">// for(i=0;i<nvec;++i)sinfo_msg("%12.4lg ",value[i]);</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>  <span class="comment">// sinfo_msg("imin %d,i2max %d,imax %d",imin,i2max,imax); </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>  <span class="comment">// scanf("%d",&itest);</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>  <span class="comment">// check if done</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>  <span class="keywordflow">if</span>(nrefl>=nref) {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    sinfo_msg(<span class="stringliteral">" maximum number of reflection reached"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    idone=1;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    <span class="keywordflow">goto</span> cont400;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>  }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>  <span class="keywordflow">if</span>(value[imin]!=0.0) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    temp=(value[imax]-value[imin])/value[imin];</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    <span class="keywordflow">if</span>(fabs(temp)<=tol) {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>      sinfo_msg(<span class="stringliteral">" reached tolerance %lg temp %lg tol"</span>,temp,tol);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>      idone=1;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>      <span class="keywordflow">goto</span> cont400;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>  }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>  <span class="keywordflow">if</span>(value[imax]-value[imin]<=tol) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     sinfo_msg(<span class="stringliteral">"value[max]-value[min]<=tol"</span>);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     idone=1;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordflow">goto</span> cont400;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>  }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>  <span class="comment">// *** form d0 the average of all but imax</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>  <span class="keywordflow">for</span>(j=0;j<nvar;++j) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>    sum=0.0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>    <span class="keywordflow">for</span>(i=0;i<nvec;++i) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <span class="keywordflow">if</span>(i!=imax)sum=sum+d1[i*nvar+j];</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>    d0[j]=sum/(nvec-1);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>  }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>  <span class="comment">// sinfo_msg(" D0 values ");</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>  <span class="comment">// for(i=0;i<nvar;++i)sinfo_msg("%12.4lg ",d0[i]);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>  <span class="comment">// scanf("%d",&itest);</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>  <span class="comment">// reflection</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>  nrefl=nrefl+1;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>  k=-1;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>      k=k+1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>      it1=imax*nvar+k;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>      d2[j]=(1+alpha)*d0[k]-alpha*d1[it1];</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>  }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>  <span class="comment">// sinfo_msg(" refl d2 ");</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>  <span class="comment">// for(i=0;i<nvar;++i) sinfo_msg("%12.4lg ",d2[i]);</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>  cval=(*ftbm)(d2,ncon);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>  <span class="comment">// sinfo_msg("refl ftbm %lg",cval);  </span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>  <span class="comment">// value is higher than i2max so do contraction</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>  <span class="keywordflow">if</span>(cval>=value[i2max]) <span class="keywordflow">goto</span> cont200;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>  <span class="comment">// value is less than i2max - normal - update d1 and value</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>  value[imax]=cval;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>  k=-1;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>      k=k+1;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>      it1=imax*nvar+k;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>      d1[it1]=d2[j];</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>  }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>  <span class="comment">// value is less than imin, try expansion</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>  <span class="keywordflow">if</span>(cval<value[imin]) <span class="keywordflow">goto</span> cont300;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>  <span class="keywordflow">goto</span> cont40;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>  <span class="comment">// contraction</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>  cont200:</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>  <span class="comment">// sinfo_msg(" contraction ");</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>  beta=0.75;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>  <span class="keywordflow">for</span>(itemp=0;itemp<3;++itemp) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>    <span class="keywordflow">if</span>(cval<=value[imax]) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>      value[imax]=cval;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>      k=-1;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>      <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>        <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>          k=k+1;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>          it1=imax*nvar+k;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>          d1[it1]=d2[j];</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>        }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>      }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    k=-1;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>      <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>        k=k+1;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>        it1=imax*nvar+k;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>        d2[j]=beta*d1[it1]+(1.-beta)*d0[k];</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>      }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    cval=ftbm(d2,ncon);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    <span class="comment">// sinfo_msg(" contraction beta %lg cval %lg ",beta,cval);</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    <span class="comment">// value is better</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>    <span class="keywordflow">if</span>(cval<value[i2max]) {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>      value[imax]=cval;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>      k=-1;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>      <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>        <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>          k=k+1;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>          it1=imax*nvar+k;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>          d1[it1]=d2[j];</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>        }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>      }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>      <span class="keywordflow">if</span>(cval<value[imin]) sinfo_msg(<span class="stringliteral">" contraction minimum %lg"</span>,cval);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>      <span class="keywordflow">goto</span> cont40;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    beta=beta-0.25;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>  }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>  sinfo_msg(<span class="stringliteral">" contraction failed  ==>shrink"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>  <span class="comment">// scanf("%d",&itest);</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>  <span class="comment">// value is worse so shrink it</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>  <span class="keywordflow">goto</span> cont400;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>  <span class="comment">// expansion</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>  cont300:</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>  sinfo_msg(<span class="stringliteral">" reflection min %lg \n"</span>, cval);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>  k=-1;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>    <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>      k=k+1;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>      d2[j]=loc_gamma*d2[j]+(1.-loc_gamma)*d0[k];</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>  }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>  ccval=(*ftbm)(d2,ncon);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>  <span class="comment">// value is higher than reflected value ==> discard</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>  <span class="keywordflow">if</span>(ccval>cval) <span class="keywordflow">goto</span> cont40;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>  <span class="comment">// value is better so use it rather than the reflected point</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>  sinfo_msg(<span class="stringliteral">" expansion minimum %lg \n"</span>,ccval);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>  value[imax]=ccval;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>  k=-1;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>    <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>      k=k+1;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>      it1=imax*nvar+k;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>      d1[it1]=d2[j];</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>    }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>  }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>  <span class="keywordflow">goto</span> cont40;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>  cont400:</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>  <span class="comment">// sinfo_msg(" following cont400 ");</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>  <span class="comment">// scanf("%d",&itest);</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>  <span class="comment">// recalculate d2 and range</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>  <span class="comment">// the range is the average of dist**2 from d1 with min value</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>  k=-1;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>  <span class="keywordflow">for</span>(j=0;j<ncon;++j) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    <span class="keywordflow">if</span>(ivorf[j]==1) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>      k=k+1;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>      it1=imin*nvar+k;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>      d2[j]=d1[it1];</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>      sum=0.0;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>      <span class="keywordflow">for</span>(i=0;i<nvec;++i) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>        it1=i*nvar+k;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>        it2=imin*nvar+k;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>        sum=sum+(d1[it1]-d1[it2])*(d1[it1]-d1[it2]);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>      }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>      range[j]=sf*sqrt(sum/(nvec-1));</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>    }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>  }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>  value[1]=value[imin];</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>  sf=.75*sf;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>  <span class="keywordflow">if</span>(sf<0.1)idone=1;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>  sinfo_msg(<span class="stringliteral">" shrink factor %lg "</span>,sf);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>  <span class="keywordflow">if</span>(idone!=1)<span class="keywordflow">goto</span> cont20;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>  <span class="keywordflow">return</span> value[1];</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> sinfo_spline(<span class="keywordtype">double</span> x,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>              <span class="keywordtype">double</span> cons[],</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>              <span class="keywordtype">double</span> ak[],</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>              <span class="keywordtype">double</span> *sp,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>              <span class="keywordtype">double</span> *spp,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>              <span class="keywordtype">double</span> *sppp,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>              <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="keywordtype">double</span> retval=0;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="keywordtype">double</span> xm=0;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="keywordtype">double</span> xm2=0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="keywordtype">double</span> xm3=0;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>  *sp=0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>  *spp=0;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>  *sppp=0;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>  <span class="keywordflow">for</span>(i=0;i<n;++i) {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>    <span class="keywordflow">if</span>(ak[i] >= x) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>      xm=ak[i]-x;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>      xm2=xm*xm;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>      xm3=xm*xm2;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>      sinfo_msg(<span class="stringliteral">"cons=%g"</span>,cons[i]);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>      retval+=cons[i]*xm3;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>      *sp-=3*cons[i]*xm2;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>      *spp+=6*cons[i]*xm;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>      *sppp-=6*cons[i];</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>    }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>  }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>  sinfo_msg(<span class="stringliteral">"1x=%g retval=%g"</span>,x,retval);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>  <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> sinfo_ftbm(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> cons[])</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <span class="keywordtype">double</span> retval=0;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <span class="keywordtype">double</span> ak[4]={-1,-.666666666666666,-.333333333333,0};</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="keywordtype">double</span> sm1=0;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="keywordtype">double</span> spm1=0;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordtype">double</span> sppm1=0;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="keywordtype">double</span> spppm1=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordtype">int</span> n=4;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   sm1=sinfo_spline(x,cons,ak,&spm1,&sppm1,&spppm1,n)-1;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   sinfo_msg(<span class="stringliteral">"x=%g val=%g"</span>,x,sm1+1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   retval=sm1*sm1+spm1*spm1+sppm1*sppm1+spppm1*spppm1;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   sinfo_msg(<span class="stringliteral">"fitbm: x=%g retval=%g"</span>,x,retval);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fit_8h_source.html b/html/sinfo__fit_8h_source.html
index a98269a..867d618 100644
--- a/html/sinfo__fit_8h_source.html
+++ b/html/sinfo__fit_8h_source.html
@@ -2,53 +2,84 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fit.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fit.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifndef SINFO_FIT_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_H</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="keywordtype">double</span> 
-<a name="l00022"></a>00022 sinfo_amsub(<span class="keywordtype">double</span> d0[],
-<a name="l00023"></a>00023             <span class="keywordtype">double</span> d1[],
-<a name="l00024"></a>00024             <span class="keywordtype">double</span> d2[],
-<a name="l00025"></a>00025             <span class="keywordtype">double</span> value[],
-<a name="l00026"></a>00026             <span class="keywordtype">double</span> range[],
-<a name="l00027"></a>00027             <span class="keywordtype">double</span> tol,
-<a name="l00028"></a>00028             <span class="keywordtype">int</span> ivorf[], 
-<a name="l00029"></a>00029             <span class="keywordtype">int</span> ncon,
-<a name="l00030"></a>00030             <span class="keywordtype">int</span> nref,
-<a name="l00031"></a>00031         <span class="keywordtype">double</span>(*ftbm)(<span class="keywordtype">double</span>[],<span class="keywordtype">int</span> ncon));
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">double</span> 
-<a name="l00036"></a>00036 sinfo_ftbm(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> cons[]);
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fit.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifndef SINFO_FIT_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor"></span><span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> sinfo_amsub(<span class="keywordtype">double</span> d0[],</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>             <span class="keywordtype">double</span> d1[],</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>             <span class="keywordtype">double</span> d2[],</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>             <span class="keywordtype">double</span> value[],</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>             <span class="keywordtype">double</span> range[],</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>             <span class="keywordtype">double</span> tol,</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>             <span class="keywordtype">int</span> ivorf[], </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>             <span class="keywordtype">int</span> ncon,</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>             <span class="keywordtype">int</span> nref,</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>         <span class="keywordtype">double</span>(*ftbm)(<span class="keywordtype">double</span>[],<span class="keywordtype">int</span> ncon));</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> sinfo_ftbm(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> cons[]);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fit__curve_8c_source.html b/html/sinfo__fit__curve_8c_source.html
index 507b4ec..cf4dfce 100644
--- a/html/sinfo__fit__curve_8c_source.html
+++ b/html/sinfo__fit__curve_8c_source.html
@@ -2,145 +2,176 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fit_curve.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fit_curve.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    fit_curve.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    July 1998</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    1d and 2d fit related routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment">    $Id: sinfo_fit_curve.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00032"></a>00032 <span class="comment">*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <math.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_fit_curve.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_ipow.h"</span>
-<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                            Private functions</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                              Function codes</span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 <span class="keywordtype">double</span> *
-<a name="l00079"></a>00079 sinfo_fit_1d_poly(
-<a name="l00080"></a>00080     <span class="keywordtype">int</span>            poly_deg,
-<a name="l00081"></a>00081     dpoint    *    list,
-<a name="l00082"></a>00082     <span class="keywordtype">int</span>            np,
-<a name="l00083"></a>00083     <span class="keywordtype">double</span>    *    mse
-<a name="l00084"></a>00084 )
-<a name="l00085"></a>00085 {
-<a name="l00086"></a>00086     <span class="keywordtype">int</span>            i, k ;
-<a name="l00087"></a>00087     Matrix        mA, mB, mX ;
-<a name="l00088"></a>00088     <span class="keywordtype">double</span>    *    c ;
-<a name="l00089"></a>00089     <span class="keywordtype">double</span>        err ;
-<a name="l00090"></a>00090     <span class="keywordtype">double</span>        xp, y ;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092     <span class="keywordflow">if</span> (np<poly_deg+1) {
-<a name="l00093"></a>00093         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough points"</span>) ;
-<a name="l00094"></a>00094         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit %dth degree polynomial with %d points"</span>,
-<a name="l00095"></a>00095                 poly_deg, np);
-<a name="l00096"></a>00096         <span class="keywordflow">return</span> NULL;
-<a name="l00097"></a>00097     }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     mA = sinfo_create_mx(poly_deg+1, np) ;
-<a name="l00100"></a>00100     mB = sinfo_create_mx(1, np) ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00103"></a>00103         mA->m[i] = 1.0 ;
-<a name="l00104"></a>00104         <span class="keywordflow">for</span> (k=1 ; k<=poly_deg ; k++) {
-<a name="l00105"></a>00105             mA->m[i+k*np] = sinfo_ipow(list[i].x, k) ;
-<a name="l00106"></a>00106         }
-<a name="l00107"></a>00107         mB->m[i] = list[i].y ;
-<a name="l00108"></a>00108     }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110     <span class="comment">/*</span>
-<a name="l00111"></a>00111 <span class="comment">     * Solve XA=B by a least-square solution (aka pseudo-inverse).</span>
-<a name="l00112"></a>00112 <span class="comment">     */</span>
-<a name="l00113"></a>00113     mX = sinfo_least_sq_mx(mA,mB) ;
-<a name="l00114"></a>00114     <span class="comment">/*</span>
-<a name="l00115"></a>00115 <span class="comment">     * Delete input matrices</span>
-<a name="l00116"></a>00116 <span class="comment">     */</span>
-<a name="l00117"></a>00117     sinfo_close_mx(mA) ;
-<a name="l00118"></a>00118     sinfo_close_mx(mB) ;
-<a name="l00119"></a>00119     <span class="comment">/*</span>
-<a name="l00120"></a>00120 <span class="comment">     * Examine result</span>
-<a name="l00121"></a>00121 <span class="comment">     */</span>
-<a name="l00122"></a>00122     <span class="keywordflow">if</span> (mX==NULL) {
-<a name="l00123"></a>00123         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit: non-invertible sinfo_matrix"</span>) ;
-<a name="l00124"></a>00124         <span class="keywordflow">return</span> NULL ;
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     c = cpl_malloc((poly_deg+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00128"></a>00128     <span class="keywordflow">for</span> (i=0 ; i<(poly_deg+1) ; i++) {
-<a name="l00129"></a>00129         c[i] = mX->m[i] ;
-<a name="l00130"></a>00130     }
-<a name="l00131"></a>00131     sinfo_close_mx(mX) ;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="comment">/*</span>
-<a name="l00134"></a>00134 <span class="comment">     * If requested, compute mean squared error</span>
-<a name="l00135"></a>00135 <span class="comment">     */</span>
-<a name="l00136"></a>00136     <span class="keywordflow">if</span> (mse != NULL) {
-<a name="l00137"></a>00137         err = 0.00 ;
-<a name="l00138"></a>00138         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {
-<a name="l00139"></a>00139             y = c[0] ;
-<a name="l00140"></a>00140             <span class="comment">/*</span>
-<a name="l00141"></a>00141 <span class="comment">             * Compute the value obtained through the fit</span>
-<a name="l00142"></a>00142 <span class="comment">             */</span>
-<a name="l00143"></a>00143             <span class="keywordflow">for</span> (k=1 ; k<=poly_deg ; k++) {
-<a name="l00144"></a>00144                 xp = sinfo_ipow(list[i].x, k) ;
-<a name="l00145"></a>00145                 y += c[k] * xp ; 
-<a name="l00146"></a>00146             }
-<a name="l00147"></a>00147             <span class="comment">/*</span>
-<a name="l00148"></a>00148 <span class="comment">             * Subtract from the true value, square, accumulate</span>
-<a name="l00149"></a>00149 <span class="comment">             */</span>
-<a name="l00150"></a>00150             xp   = sinfo_ipow(list[i].y - y, 2) ;
-<a name="l00151"></a>00151             err += xp ; 
-<a name="l00152"></a>00152         }
-<a name="l00153"></a>00153         <span class="comment">/* Average the error term */</span>
-<a name="l00154"></a>00154         err /= (double)np ;
-<a name="l00155"></a>00155         *mse = err ;
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157     <span class="keywordflow">return</span> c ;
-<a name="l00158"></a>00158 }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fit_curve.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    fit_curve.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    July 1998</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    1d and 2d fit related routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Id: sinfo_fit_curve.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_fit_curve.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_ipow.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                            Private functions</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">double</span> *</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_fit_1d_poly(</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordtype">int</span>            poly_deg,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     dpoint    *    list,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordtype">int</span>            np,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordtype">double</span>    *    mse</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> )</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordtype">int</span>            i, k ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     Matrix        mA, mB, mX ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keywordtype">double</span>    *    c ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keywordtype">double</span>        err ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">double</span>        xp, y ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordflow">if</span> (np<poly_deg+1) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough points"</span>) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit %dth degree polynomial with %d points"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 poly_deg, np);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     mA = sinfo_create_mx(poly_deg+1, np) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     mB = sinfo_create_mx(1, np) ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         mA->m[i] = 1.0 ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keywordflow">for</span> (k=1 ; k<=poly_deg ; k++) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>             mA->m[i+k*np] = sinfo_ipow(list[i].x, k) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         mB->m[i] = list[i].y ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">     * Solve XA=B by a least-square solution (aka pseudo-inverse).</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     mX = sinfo_least_sq_mx(mA,mB) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">     * Delete input matrices</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     sinfo_close_mx(mA) ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     sinfo_close_mx(mB) ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">     * Examine result</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">if</span> (mX==NULL) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit: non-invertible sinfo_matrix"</span>) ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     c = cpl_malloc((poly_deg+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">for</span> (i=0 ; i<(poly_deg+1) ; i++) {</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         c[i] = mX->m[i] ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     sinfo_close_mx(mX) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">     * If requested, compute mean squared error</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">if</span> (mse != NULL) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         err = 0.00 ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keywordflow">for</span> (i=0 ; i<np ; i++) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>             y = c[0] ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">             * Compute the value obtained through the fit</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>             <span class="keywordflow">for</span> (k=1 ; k<=poly_deg ; k++) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                 xp = sinfo_ipow(list[i].x, k) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                 y += c[k] * xp ; </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>             }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">             * Subtract from the true value, square, accumulate</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             xp   = sinfo_ipow(list[i].y - y, 2) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>             err += xp ; </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         <span class="comment">/* Average the error term */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         err /= (double)np ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         *mse = err ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">return</span> c ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__fit__curve_8h_source.html b/html/sinfo__fit__curve_8h_source.html
index 2df7b08..82c143b 100644
--- a/html/sinfo__fit__curve_8h_source.html
+++ b/html/sinfo__fit__curve_8h_source.html
@@ -2,72 +2,103 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_fit_curve.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_fit_curve.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_fit_curve.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    July 1998</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    1d and 2d fit related routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="comment">/*</span>
-<a name="l00029"></a>00029 <span class="comment">    $Id: sinfo_fit_curve.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Author: amodigli $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00032"></a>00032 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00033"></a>00033 <span class="comment">*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#ifndef SINFO_FIT_CURVE_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_CURVE_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Includes</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_matrix.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                              Function codes</span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="keywordtype">double</span> *
-<a name="l00071"></a>00071 sinfo_fit_1d_poly(
-<a name="l00072"></a>00072     <span class="keywordtype">int</span>         poly_deg,
-<a name="l00073"></a>00073     dpoint  *   list,
-<a name="l00074"></a>00074     <span class="keywordtype">int</span>         np,
-<a name="l00075"></a>00075     <span class="keywordtype">double</span>  *   mean_squared_error
-<a name="l00076"></a>00076 ) ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_fit_curve.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_fit_curve.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    July 1998</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    1d and 2d fit related routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Id: sinfo_fit_curve.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifndef SINFO_FIT_CURVE_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FIT_CURVE_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_matrix.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">double</span> *</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_fit_1d_poly(</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">int</span>         poly_deg,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     dpoint  *   list,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordtype">int</span>         np,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordtype">double</span>  *   mean_squared_error</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> ) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__cfg_8c_source.html b/html/sinfo__flat__cfg_8c_source.html
index d10cf54..e716c74 100644
--- a/html/sinfo__flat__cfg_8c_source.html
+++ b/html/sinfo__flat__cfg_8c_source.html
@@ -2,69 +2,100 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_flat_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         : Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    March 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    prepare flatfield frames configuration handling tools</span>
-<a name="l00025"></a>00025 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_flat_cfg.h"</span>
-<a name="l00033"></a>00033 
-<a name="l00041"></a>00041 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                              Function codes</span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 flat_config * sinfo_flat_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00053"></a>00053 {
-<a name="l00054"></a>00054     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(flat_config));
-<a name="l00055"></a>00055 }
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> sinfo_flat_cfg_destroy(flat_config * sc)
-<a name="l00064"></a>00064 {
-<a name="l00065"></a>00065     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067     <span class="comment">/* Free list of frame types */</span>
-<a name="l00068"></a>00068     <span class="comment">/*cpl_free(sc->frametype);*/</span>
-<a name="l00069"></a>00069     <span class="comment">/* Free positions */</span>
-<a name="l00070"></a>00070     <span class="comment">/*cpl_free(sc->frameposition);*/</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     <span class="comment">/* Free main struct */</span>
-<a name="l00073"></a>00073     cpl_free(sc);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075     return ;
-<a name="l00076"></a>00076 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_flat_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         : Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    March 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    prepare flatfield frames configuration handling tools</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_flat_cfg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> flat_config * sinfo_flat_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(flat_config));</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> sinfo_flat_cfg_destroy(flat_config * sc)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="comment">/* Free list of frame types */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="comment">/*cpl_free(sc->frametype);*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="comment">/* Free positions */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="comment">/*cpl_free(sc->frameposition);*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     return ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__cfg_8h_source.html b/html/sinfo__flat__cfg_8h_source.html
index b3f2ed6..0ddb7aa 100644
--- a/html/sinfo__flat__cfg_8h_source.html
+++ b/html/sinfo__flat__cfg_8h_source.html
@@ -2,159 +2,190 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_flat_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    march 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    flat_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FLAT_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  prepare lamp flat fields blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the flatfield handling</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>flat_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing the </span>
-<a name="l00052"></a>00052 <span class="comment">                                       list of all input frames */</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00054"></a>00054 <span class="comment">                                        wavelength map */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">int</span>  * frametype ; <span class="comment">/* list of frame types on or off */</span>
-<a name="l00057"></a>00057         <span class="keywordtype">int</span>  * frameposition ; <span class="comment">/* list of grating positions */</span>  
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>    contains_sky ; <span class="comment">/* indicates if off or sky frames were exposed */</span>
-<a name="l00059"></a>00059      <span class="keywordtype">int</span>    contains_dither ; <span class="comment">/* indicates if spectral dithering was applied */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">int</span>    nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00061"></a>00061         <span class="keywordtype">int</span>    nobj ;  <span class="comment">/* number of object frames in frame list */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">int</span>    noff ;  <span class="comment">/* number of off frames in frame list */</span>
-<a name="l00063"></a>00063      <span class="keywordtype">int</span>    nditherobj ; <span class="comment">/* number of dithered object frames in frame list */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">int</span>    nditheroff ; <span class="comment">/* number of dithered off frames in frame list */</span>
-<a name="l00065"></a>00065 <span class="comment">/*------ CleanMean ------*/</span>
-<a name="l00066"></a>00066         <span class="comment">/* percentage of rejected low intensity pixels */</span>
-<a name="l00067"></a>00067         <span class="keywordtype">float</span> loReject ;      
-<a name="l00068"></a>00068         <span class="comment">/* percentage of rejected high intensity pixels */</span>
-<a name="l00069"></a>00069         <span class="keywordtype">float</span> hiReject ;
-<a name="l00070"></a>00070 <span class="comment">/*------ BadPixel ------*/</span>
-<a name="l00071"></a>00071         <span class="comment">/* indicator if the bad pixels of the flat field are known and </span>
-<a name="l00072"></a>00072 <span class="comment">           if they should be interpolated or not */</span>
-<a name="l00073"></a>00073         <span class="keywordtype">int</span> interpolInd ;
-<a name="l00074"></a>00074         <span class="comment">/* file name of the bad pixel mask fits file */</span>
-<a name="l00075"></a>00075         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;
-<a name="l00076"></a>00076         <span class="comment">/* maximal pixel distance from the bad pixel to which valid </span>
-<a name="l00077"></a>00077 <span class="comment">           pixels are searched for*/</span> 
-<a name="l00078"></a>00078         <span class="keywordtype">int</span> maxRad ;
-<a name="l00079"></a>00079         <span class="comment">/* file name of the slitlet sinfo_edge position list */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">char</span> slitposList[FILE_NAME_SZ] ;
-<a name="l00081"></a>00081 <span class="comment">/*------ BadPix ------*/</span>
-<a name="l00082"></a>00082         <span class="comment">/* indicator if a bad pixel mask should be generated or not */</span>
-<a name="l00083"></a>00083         <span class="keywordtype">int</span> badInd ;
-<a name="l00084"></a>00084         <span class="comment">/* name of the static bad pixel mask to be generated */</span>
-<a name="l00085"></a>00085         <span class="keywordtype">char</span> maskname[FILE_NAME_SZ] ;
-<a name="l00086"></a>00086         <span class="comment">/* factor of noise within which the pixels are used to fit a </span>
-<a name="l00087"></a>00087 <span class="comment">           straight line to the column intensity */</span>
-<a name="l00088"></a>00088         <span class="keywordtype">float</span> sigmaFactor ;
-<a name="l00089"></a>00089         <span class="comment">/* factor of calculated standard deviation beyond which the </span>
-<a name="l00090"></a>00090 <span class="comment">           deviation of a pixel value from the</span>
-<a name="l00091"></a>00091 <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span>
-<a name="l00092"></a>00092         <span class="keywordtype">float</span> factor ;
-<a name="l00093"></a>00093         <span class="comment">/* number of iterations of sinfo_median filter */</span>
-<a name="l00094"></a>00094         <span class="keywordtype">int</span> iterations ;
-<a name="l00095"></a>00095         <span class="comment">/* percentage of extreme pixel value to reject when calculating </span>
-<a name="l00096"></a>00096 <span class="comment">           the mean and stdev */</span>
-<a name="l00097"></a>00097         <span class="keywordtype">float</span> badLoReject ;
-<a name="l00098"></a>00098         <span class="keywordtype">float</span> badHiReject ;
-<a name="l00099"></a>00099         <span class="comment">/* pixel coordinate of lower left edge of a rectangle zone </span>
-<a name="l00100"></a>00100 <span class="comment">           from which image statistics are computed */</span>
-<a name="l00101"></a>00101         <span class="keywordtype">int</span> llx ;
-<a name="l00102"></a>00102         <span class="keywordtype">int</span> lly ;
-<a name="l00103"></a>00103         <span class="comment">/* pixel coordinate of upper right edge of a rectangle zone from </span>
-<a name="l00104"></a>00104 <span class="comment">           which image statistics are computed */</span>
-<a name="l00105"></a>00105         <span class="keywordtype">int</span> urx ;
-<a name="l00106"></a>00106         <span class="keywordtype">int</span> ury ;
-<a name="l00107"></a>00107 <span class="comment">/*------ Thresh ------*/</span>
-<a name="l00108"></a>00108         <span class="comment">/* indicates if the values beyond threshold values should be </span>
-<a name="l00109"></a>00109 <span class="comment">           marked as bad before proceeding</span>
-<a name="l00110"></a>00110 <span class="comment">           to sinfo_median filtering */</span>
-<a name="l00111"></a>00111         <span class="keywordtype">int</span> threshInd ;
-<a name="l00112"></a>00112         <span class="comment">/* factor to the clean standard deviation to define the </span>
-<a name="l00113"></a>00113 <span class="comment">           threshold deviation from the clean mean */</span>
-<a name="l00114"></a>00114         <span class="keywordtype">float</span> meanfactor ;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   <span class="comment">/* QC LOG */</span>
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="comment">/* FPN */</span>
-<a name="l00120"></a>00120   <span class="keywordtype">int</span> qc_fpn_xmin1;
-<a name="l00121"></a>00121   <span class="keywordtype">int</span> qc_fpn_xmax1;
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> qc_fpn_ymin1;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> qc_fpn_ymax1;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   <span class="keywordtype">int</span> qc_fpn_xmin2;
-<a name="l00126"></a>00126   <span class="keywordtype">int</span> qc_fpn_xmax2;
-<a name="l00127"></a>00127   <span class="keywordtype">int</span> qc_fpn_ymin2;
-<a name="l00128"></a>00128   <span class="keywordtype">int</span> qc_fpn_ymax2;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130   <span class="keywordtype">int</span> qc_thresh_min;
-<a name="l00131"></a>00131   <span class="keywordtype">int</span> qc_thresh_max;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 } flat_config ;
-<a name="l00135"></a>00135  
-<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00137"></a>00137 <span class="comment">                               Function prototypes</span>
-<a name="l00138"></a>00138 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00146"></a>00146 flat_config * 
-<a name="l00147"></a>00147 sinfo_flat_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00155"></a>00155 <span class="keywordtype">void</span> 
-<a name="l00156"></a>00156 sinfo_flat_cfg_destroy(flat_config * sc);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_flat_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    march 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    flat_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FLAT_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  prepare lamp flat fields blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the flatfield handling</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>flat_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing the </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                       list of all input frames */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                        wavelength map */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">int</span>  * frametype ; <span class="comment">/* list of frame types on or off */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">int</span>  * frameposition ; <span class="comment">/* list of grating positions */</span>  </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>    contains_sky ; <span class="comment">/* indicates if off or sky frames were exposed */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>      <span class="keywordtype">int</span>    contains_dither ; <span class="comment">/* indicates if spectral dithering was applied */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">int</span>    nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">int</span>    nobj ;  <span class="comment">/* number of object frames in frame list */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">int</span>    noff ;  <span class="comment">/* number of off frames in frame list */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>      <span class="keywordtype">int</span>    nditherobj ; <span class="comment">/* number of dithered object frames in frame list */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">int</span>    nditheroff ; <span class="comment">/* number of dithered off frames in frame list */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*------ CleanMean ------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="comment">/* percentage of rejected low intensity pixels */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">float</span> loReject ;      </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="comment">/* percentage of rejected high intensity pixels */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*------ BadPixel ------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="comment">/* indicator if the bad pixels of the flat field are known and </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">           if they should be interpolated or not */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">int</span> interpolInd ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="comment">/* file name of the bad pixel mask fits file */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="comment">/* maximal pixel distance from the bad pixel to which valid </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">           pixels are searched for*/</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">int</span> maxRad ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* file name of the slitlet sinfo_edge position list */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">char</span> slitposList[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*------ BadPix ------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="comment">/* indicator if a bad pixel mask should be generated or not */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordtype">int</span> badInd ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="comment">/* name of the static bad pixel mask to be generated */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">char</span> maskname[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="comment">/* factor of noise within which the pixels are used to fit a </span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">           straight line to the column intensity */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordtype">float</span> sigmaFactor ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="comment">/* factor of calculated standard deviation beyond which the </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">           deviation of a pixel value from the</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">           median of the 8 nearest neighbors declares a pixel as bad */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">float</span> factor ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="comment">/* number of iterations of sinfo_median filter */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">int</span> iterations ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="comment">/* percentage of extreme pixel value to reject when calculating </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">           the mean and stdev */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">float</span> badLoReject ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordtype">float</span> badHiReject ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="comment">/* pixel coordinate of lower left edge of a rectangle zone </span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">           from which image statistics are computed */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="keywordtype">int</span> llx ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordtype">int</span> lly ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         <span class="comment">/* pixel coordinate of upper right edge of a rectangle zone from </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">           which image statistics are computed */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordtype">int</span> urx ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         <span class="keywordtype">int</span> ury ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*------ Thresh ------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         <span class="comment">/* indicates if the values beyond threshold values should be </span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">           marked as bad before proceeding</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">           to sinfo_median filtering */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         <span class="keywordtype">int</span> threshInd ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         <span class="comment">/* factor to the clean standard deviation to define the </span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">           threshold deviation from the clean mean */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         <span class="keywordtype">float</span> meanfactor ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/* FPN */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> qc_fpn_xmin1;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> qc_fpn_xmax1;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> qc_fpn_ymin1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> qc_fpn_ymax1;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">int</span> qc_fpn_xmin2;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">int</span> qc_fpn_xmax2;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> qc_fpn_ymin2;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> qc_fpn_ymax2;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> qc_thresh_min;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">int</span> qc_thresh_max;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> } flat_config ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>  </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> flat_config * </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> sinfo_flat_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> sinfo_flat_cfg_destroy(flat_config * sc);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__ini_8c_source.html b/html/sinfo__flat__ini_8c_source.html
index 13c6690..dd5b525 100644
--- a/html/sinfo__flat__ini_8c_source.html
+++ b/html/sinfo__flat__ini_8c_source.html
@@ -2,561 +2,592 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_ini.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_ini.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   flat_ini.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Mar 04, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    prepare flatfield frames ini file handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_flat_ini.h"</span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                    Functions private to this module</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00037"></a>00037 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_frames(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00038"></a>00038 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_cleanmean(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpixel(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00040"></a>00040 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpix(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00041"></a>00041 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_thresh(dictionary *, flat_config *, <span class="keywordtype">int</span> *);
-<a name="l00060"></a>00060 flat_config * 
-<a name="l00061"></a>00061 parse_flat_ini_file(<span class="keywordtype">char</span> * ini_name)
-<a name="l00062"></a>00062 {
-<a name="l00063"></a>00063         dictionary    *       sym ;
-<a name="l00064"></a>00064         flat_config   *       cfg ;
-<a name="l00065"></a>00065         <span class="keywordtype">int</span>                   status ;
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067         <span class="keywordflow">if</span> (!sinfo_file_exists(ini_name)) {
-<a name="l00068"></a>00068            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot find ini file [%s]: aborting"</span>, ini_name) ;
-<a name="l00069"></a>00069                 <span class="keywordflow">return</span> NULL ;
-<a name="l00070"></a>00070         }
-<a name="l00071"></a>00071         sym = iniparser_load(ini_name) ;
-<a name="l00072"></a>00072         <span class="keywordflow">if</span> (sym == NULL) {
-<a name="l00073"></a>00073            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"in parsing ini file [%s]: aborting"</span>, ini_name) ;
-<a name="l00074"></a>00074            <span class="keywordflow">return</span> NULL ;
-<a name="l00075"></a>00075         }
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077         cfg = sinfo_flat_cfg_create();
-<a name="l00078"></a>00078         <span class="keywordflow">if</span> (cfg==NULL) {
-<a name="l00079"></a>00079            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocating flat_config struct"</span>);
-<a name="l00080"></a>00080                 iniparser_freedict(sym) ;
-<a name="l00081"></a>00081                 <span class="keywordflow">return</span> NULL ;
-<a name="l00082"></a>00082         }
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084         <span class="comment">/*</span>
-<a name="l00085"></a>00085 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00086"></a>00086 <span class="comment">         * found in the ini file</span>
-<a name="l00087"></a>00087 <span class="comment">         */</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089         status = 0 ;
-<a name="l00090"></a>00090         parse_section_general   (sym, cfg, &status);
-<a name="l00091"></a>00091         parse_section_frames    (sym, cfg, &status);
-<a name="l00092"></a>00092         parse_section_cleanmean (sym, cfg, &status);
-<a name="l00093"></a>00093         parse_section_badpixel  (sym, cfg, &status); 
-<a name="l00094"></a>00094         parse_section_badpix    (sym, cfg, &status); 
-<a name="l00095"></a>00095         parse_section_thresh    (sym, cfg, &status); 
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097         iniparser_freedict(sym);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099         <span class="keywordflow">if</span> (status>0) {
-<a name="l00100"></a>00100           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%d errors in ini file [%s]"</span>, status, ini_name);
-<a name="l00101"></a>00101                 sinfo_flat_cfg_destroy(cfg);
-<a name="l00102"></a>00102                 cfg = NULL ;
-<a name="l00103"></a>00103                 <span class="keywordflow">return</span> NULL ;
-<a name="l00104"></a>00104         }
-<a name="l00105"></a>00105         <span class="keywordflow">return</span> cfg ;
-<a name="l00106"></a>00106 }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00110"></a>00110 <span class="comment">   Functions:   parse_section_xxx()</span>
-<a name="l00111"></a>00111 <span class="comment">   In           :       symbolic table read from ini file</span>
-<a name="l00112"></a>00112 <span class="comment">   Out          :       void</span>
-<a name="l00113"></a>00113 <span class="comment">   Job          :       update a flat_config structure from what can be</span>
-<a name="l00114"></a>00114 <span class="comment">                            found in the ini file.</span>
-<a name="l00115"></a>00115 <span class="comment">   Notice       :       all of these functions update a status integer to</span>
-<a name="l00116"></a>00116 <span class="comment">                        indicate if an error occurred, or leave it as it is if</span>
-<a name="l00117"></a>00117 <span class="comment">                        everything went Ok.</span>
-<a name="l00118"></a>00118 <span class="comment"></span>
-<a name="l00119"></a>00119 <span class="comment">        parse_section_general()</span>
-<a name="l00120"></a>00120 <span class="comment">        parse_section_frames ()</span>
-<a name="l00121"></a>00121 <span class="comment">        parse_section_cleanmean ()</span>
-<a name="l00122"></a>00122 <span class="comment">        parse_section_badpixel  () </span>
-<a name="l00123"></a>00123 <span class="comment">        parse_section_badpix ()</span>
-<a name="l00124"></a>00124 <span class="comment">        parse_section_thresh ()</span>
-<a name="l00125"></a>00125 <span class="comment"></span>
-<a name="l00126"></a>00126 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(
-<a name="l00130"></a>00130         dictionary * sym,
-<a name="l00131"></a>00131         flat_config * cfg,
-<a name="l00132"></a>00132         <span class="keywordtype">int</span> *status
-<a name="l00133"></a>00133 )
-<a name="l00134"></a>00134 {
-<a name="l00135"></a>00135         <span class="keywordtype">char</span>    *       cval ;
-<a name="l00136"></a>00136         <span class="keywordtype">int</span>             ival ;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138         <span class="comment">/*</span>
-<a name="l00139"></a>00139 <span class="comment">         * General section</span>
-<a name="l00140"></a>00140 <span class="comment">         */</span>
-<a name="l00141"></a>00141         cval = iniparser_getstr(sym, <span class="stringliteral">"eclipse:versionnumber"</span>) ;
-<a name="l00142"></a>00142         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00143"></a>00143            <span class="keywordflow">if</span> (strcmp(cval, get_eclipse_version())) {
-<a name="l00144"></a>00144               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"this ini file produced by version %s"</span>, cval);
-<a name="l00145"></a>00145               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"you are running version %s"</span>, 
-<a name="l00146"></a>00146                                 get_eclipse_version());
-<a name="l00147"></a>00147                 }
-<a name="l00148"></a>00148         } <span class="keywordflow">else</span> {
-<a name="l00149"></a>00149               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no eclipse version number found in file"</span>);
-<a name="l00150"></a>00150         }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximummemory"</span>, -1);
-<a name="l00153"></a>00153         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_ram"</span>, ival);
-<a name="l00154"></a>00154         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximumswap"</span>, -1);
-<a name="l00155"></a>00155         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_swap"</span>, ival);
-<a name="l00156"></a>00156         sinfo_set_verbose(iniparser_getboolean(sym, <span class="stringliteral">"general:verbose"</span>, 0));
-<a name="l00157"></a>00157         sinfo_set_debug(iniparser_getboolean(sym, <span class="stringliteral">"general:debug"</span>, 0));
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159         cval = iniparser_getstr(sym, <span class="stringliteral">"general:tmpdirname"</span>);
-<a name="l00160"></a>00160         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00161"></a>00161                 sinfo_set_tmpdirname(cval);
-<a name="l00162"></a>00162         } <span class="keywordflow">else</span> {
-<a name="l00163"></a>00163                 sinfo_set_tmpdirname(<span class="stringliteral">"."</span>);
-<a name="l00164"></a>00164         }
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166         ival = iniparser_getboolean(sym, <span class="stringliteral">"general:logfile"</span>, 0);
-<a name="l00167"></a>00167         <span class="keywordflow">if</span> (ival) {
-<a name="l00168"></a>00168                 cval = iniparser_getstr(sym, <span class="stringliteral">"general:logfilename"</span>);
-<a name="l00169"></a>00169                 <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00170"></a>00170                         sinfo_set_logfile(1);
-<a name="l00171"></a>00171                         sinfo_set_logfilename(cval);
-<a name="l00172"></a>00172                 } <span class="keywordflow">else</span> {
-<a name="l00173"></a>00173                         sinfo_set_logfile(0) ;
-<a name="l00174"></a>00174                 }
-<a name="l00175"></a>00175         }
-<a name="l00176"></a>00176         cval = iniparser_getstr(sym, <span class="stringliteral">"general:outname"</span>);
-<a name="l00177"></a>00177         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00178"></a>00178                 strcpy (cfg -> outName , cval ) ;
-<a name="l00179"></a>00179         } <span class="keywordflow">else</span> {
-<a name="l00180"></a>00180             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" OutName in the .ini file was not found!\n"</span>) ;
-<a name="l00181"></a>00181             (*status)++ ;
-<a name="l00182"></a>00182         }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184         <span class="keywordflow">if</span> (sinfo_verbose_active())
-<a name="l00185"></a>00185                 sinfo_print_memory_parameters();
-<a name="l00186"></a>00186         return ;
-<a name="l00187"></a>00187 }
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_frames(
-<a name="l00190"></a>00190         dictionary * sym,
-<a name="l00191"></a>00191         flat_config * cfg,
-<a name="l00192"></a>00192         <span class="keywordtype">int</span> *status
-<a name="l00193"></a>00193 )
-<a name="l00194"></a>00194 {
-<a name="l00195"></a>00195         <span class="keywordtype">char</span>            *       listname ;
-<a name="l00196"></a>00196         charmatrix      *       charm ;
-<a name="l00197"></a>00197         <span class="keywordtype">int</span>                     i, j ;
-<a name="l00198"></a>00198         <span class="keywordtype">char</span>            *       name,
-<a name="l00199"></a>00199                         *       type ;
-<a name="l00200"></a>00200         <span class="keywordtype">int</span>                     nval, nobj, noff ;
-<a name="l00201"></a>00201         <span class="keywordtype">int</span>                     nditherobj, nditheroff ;
-<a name="l00202"></a>00202         <span class="keywordtype">int</span>                     found_sky ;
-<a name="l00203"></a>00203         <span class="keywordtype">int</span>                     found_dither ;
-<a name="l00204"></a>00204         <span class="keywordtype">char</span>            **      framelist ;
-<a name="l00205"></a>00205         <span class="keywordtype">int</span>             *       frametypes ;
-<a name="l00206"></a>00206         <span class="keywordtype">int</span>             *       frameposition ;
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208         listname = iniparser_getstr(sym, <span class="stringliteral">"general:infile"</span>);
-<a name="l00209"></a>00209         <span class="keywordflow">if</span> (sinfo_is_ascii_list(listname)!=1) {
-<a name="l00210"></a>00210            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"file [%s] is not an ASCII list: aborting"</span>,listname);
-<a name="l00211"></a>00211            (*status)++ ;
-<a name="l00212"></a>00212            return ;
-<a name="l00213"></a>00213         }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215         <span class="comment">/* Read input char sinfo_matrix */</span>
-<a name="l00216"></a>00216         charm = sinfo_charmatrix_read(listname);
-<a name="l00217"></a>00217         <span class="keywordflow">if</span> (charm==NULL) {
-<a name="l00218"></a>00218            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing input list [%s]"</span>, listname);
-<a name="l00219"></a>00219            (*status)++;
-<a name="l00220"></a>00220            return ;
-<a name="l00221"></a>00221         }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223         <span class="comment">/* Check input sinfo_matrix */</span>
-<a name="l00224"></a>00224         nval = charm->ly ;
-<a name="l00225"></a>00225         <span class="keywordflow">for</span> (j=0 ; j<charm->ly ; j++) {
-<a name="l00226"></a>00226            <span class="comment">/* Check file existence */</span>
-<a name="l00227"></a>00227            name = charmatrix_elem(charm, 0, j);
-<a name="l00228"></a>00228            <span class="keywordflow">if</span> (sinfo_file_exists(name)!=1) {
-<a name="l00229"></a>00229               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"file [%s] declared in list does not exist"</span>, 
-<a name="l00230"></a>00230                                 name);
-<a name="l00231"></a>00231               nval -- ;
-<a name="l00232"></a>00232            }
-<a name="l00233"></a>00233         }
-<a name="l00234"></a>00234         <span class="keywordflow">if</span> (nval<1) {
-<a name="l00235"></a>00235            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no valid plane found in list [%s]"</span>, listname);
-<a name="l00236"></a>00236            sinfo_charmatrix_del(charm);
-<a name="l00237"></a>00237            (*status)++ ;
-<a name="l00238"></a>00238            return ;
-<a name="l00239"></a>00239         }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241         <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00242"></a>00242         framelist     = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00243"></a>00243         frametypes    = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00244"></a>00244         frameposition = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246         found_sky     = 0 ;
-<a name="l00247"></a>00247         found_dither  = 0 ;
-<a name="l00248"></a>00248         nobj          = 0 ;
-<a name="l00249"></a>00249         noff          = 0 ;
-<a name="l00250"></a>00250         nditheroff    = 0 ;
-<a name="l00251"></a>00251         nditherobj    = 0 ;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253         <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00254"></a>00254         i = 0 ;
-<a name="l00255"></a>00255         <span class="keywordflow">for</span> (j=0 ; j<charm->ly ; j++) 
-<a name="l00256"></a>00256         {
-<a name="l00257"></a>00257            name = charmatrix_elem(charm, 0, j);
-<a name="l00258"></a>00258            <span class="keywordflow">if</span> (sinfo_file_exists(name)==1) 
-<a name="l00259"></a>00259            {
-<a name="l00260"></a>00260               <span class="comment">/* Store file name into framelist */</span>
-<a name="l00261"></a>00261               framelist[i] = cpl_strdup(name);
-<a name="l00262"></a>00262               <span class="comment">/* Check if a file type is present */</span>
-<a name="l00263"></a>00263               <span class="keywordflow">if</span> (charm->lx>1) 
-<a name="l00264"></a>00264               {
-<a name="l00265"></a>00265                  <span class="comment">/* Get file type */</span>
-<a name="l00266"></a>00266                  type = charmatrix_elem(charm, 1, j);
-<a name="l00267"></a>00267                  strlwc(type);
-<a name="l00268"></a>00268                  <span class="comment">/* Checking if the type contains 'off' or 'sky' */</span>
-<a name="l00269"></a>00269                  <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"sky"</span>)!=NULL || strstr(type, <span class="stringliteral">"off"</span>) != NULL) 
-<a name="l00270"></a>00270                  {
-<a name="l00271"></a>00271                      frametypes[i] = FRAME_OFF ;
-<a name="l00272"></a>00272                      found_sky = 1 ;
-<a name="l00273"></a>00273                      <span class="comment">/* Checking if the type contains 'pos1' or 'pos2' */</span>
-<a name="l00274"></a>00274                      <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"2"</span>)!=NULL) 
-<a name="l00275"></a>00275                      {
-<a name="l00276"></a>00276                         frameposition[i] = FRAME_POS2 ;
-<a name="l00277"></a>00277                         found_dither = 1 ;
-<a name="l00278"></a>00278                         nditheroff++ ;
-<a name="l00279"></a>00279                      }
-<a name="l00280"></a>00280                      <span class="keywordflow">else</span> 
-<a name="l00281"></a>00281                      {
-<a name="l00282"></a>00282                         frameposition[i] = FRAME_POS1 ;
-<a name="l00283"></a>00283                         noff++ ;
-<a name="l00284"></a>00284                      }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286                   }
-<a name="l00287"></a>00287                   <span class="keywordflow">else</span>  
-<a name="l00288"></a>00288                   {
-<a name="l00289"></a>00289                      frametypes[i] = FRAME_ON ;
-<a name="l00290"></a>00290                      <span class="comment">/* Checking if the type contains 'pos1' or 'pos2' */</span>
-<a name="l00291"></a>00291                      <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"2"</span>)!=NULL) 
-<a name="l00292"></a>00292                      {
-<a name="l00293"></a>00293                         frameposition[i] = FRAME_POS2 ;
-<a name="l00294"></a>00294                         found_dither = 1 ;
-<a name="l00295"></a>00295                         nditherobj++ ;
-<a name="l00296"></a>00296                      } 
-<a name="l00297"></a>00297                      <span class="keywordflow">else</span> 
-<a name="l00298"></a>00298                      {
-<a name="l00299"></a>00299                         frameposition[i] = FRAME_POS1 ;
-<a name="l00300"></a>00300                         nobj++ ;
-<a name="l00301"></a>00301                      }
-<a name="l00302"></a>00302                    }
-<a name="l00303"></a>00303                 } 
-<a name="l00304"></a>00304                 <span class="keywordflow">else</span> 
-<a name="l00305"></a>00305                 {
-<a name="l00306"></a>00306                    <span class="comment">/* No type means an object */</span>
-<a name="l00307"></a>00307                    frametypes[i] = FRAME_ON ;
-<a name="l00308"></a>00308                    <span class="comment">/* No type means position 1 */</span>
-<a name="l00309"></a>00309                    frameposition[i] = FRAME_POS1 ;
-<a name="l00310"></a>00310                    nobj ++ ;
-<a name="l00311"></a>00311                 }
-<a name="l00312"></a>00312                 i++ ;
-<a name="l00313"></a>00313             }
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315         sinfo_charmatrix_del(charm);
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317         <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00318"></a>00318         cfg->framelist       = framelist ;
-<a name="l00319"></a>00319         cfg->frametype       = frametypes ;
-<a name="l00320"></a>00320         cfg->frameposition   = frameposition ;
-<a name="l00321"></a>00321         cfg->nframes         = nval ;
-<a name="l00322"></a>00322         cfg->nobj            = nobj ;
-<a name="l00323"></a>00323         cfg->noff            = noff ;
-<a name="l00324"></a>00324         cfg->nditherobj      = nditherobj ;
-<a name="l00325"></a>00325         cfg->nditheroff      = nditheroff ;
-<a name="l00326"></a>00326         cfg->contains_sky    = found_sky ;
-<a name="l00327"></a>00327         cfg->contains_dither = found_dither ;
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329         return ;
-<a name="l00330"></a>00330 }
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_cleanmean(
-<a name="l00333"></a>00333         dictionary * sym,
-<a name="l00334"></a>00334         flat_config * cfg,
-<a name="l00335"></a>00335         <span class="keywordtype">int</span> *status )
-<a name="l00336"></a>00336 {
-<a name="l00337"></a>00337         <span class="keywordtype">float</span>           dval ;
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339         dval = iniparser_getdouble(sym, <span class="stringliteral">"cleanmean:loreject"</span>, -1.) ;
-<a name="l00340"></a>00340         <span class="keywordflow">if</span> (dval!=-1.) 
-<a name="l00341"></a>00341         {
-<a name="l00342"></a>00342             cfg -> loReject = dval ; 
-<a name="l00343"></a>00343         }
-<a name="l00344"></a>00344         <span class="keywordflow">else</span> 
-<a name="l00345"></a>00345         {
-<a name="l00346"></a>00346             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" LoReject in the .ini file was not found!\n"</span>) ;
-<a name="l00347"></a>00347             (*status)++ ;
-<a name="l00348"></a>00348         }
-<a name="l00349"></a>00349         dval = iniparser_getdouble(sym, <span class="stringliteral">"cleanmean:hireject"</span>, -1.) ;
-<a name="l00350"></a>00350         <span class="keywordflow">if</span> (dval!=-1.) 
-<a name="l00351"></a>00351         {
-<a name="l00352"></a>00352             cfg -> hiReject = dval ; 
-<a name="l00353"></a>00353         }
-<a name="l00354"></a>00354         <span class="keywordflow">else</span> 
-<a name="l00355"></a>00355         {
-<a name="l00356"></a>00356             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" hiReject in the .ini file was not found!\n"</span>) ;
-<a name="l00357"></a>00357             (*status)++ ;
-<a name="l00358"></a>00358         }
-<a name="l00359"></a>00359         return ;
-<a name="l00360"></a>00360 }
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpixel(
-<a name="l00363"></a>00363         dictionary * sym,
-<a name="l00364"></a>00364         flat_config * cfg,
-<a name="l00365"></a>00365         <span class="keywordtype">int</span> *status )
-<a name="l00366"></a>00366 {
-<a name="l00367"></a>00367         <span class="keywordtype">int</span>             ival ;
-<a name="l00368"></a>00368         <span class="keywordtype">char</span>        *   cval ;
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370         ival = iniparser_getboolean(sym, <span class="stringliteral">"badpixel:interpolind"</span>, -1) ;
-<a name="l00371"></a>00371         <span class="keywordflow">if</span> (ival != -1)
-<a name="l00372"></a>00372         {
-<a name="l00373"></a>00373             cfg -> interpolInd = ival ;
-<a name="l00374"></a>00374         }
-<a name="l00375"></a>00375         <span class="keywordflow">else</span>
-<a name="l00376"></a>00376         {
-<a name="l00377"></a>00377             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" interpolInd in the .ini file was not found!\n"</span>) ;
-<a name="l00378"></a>00378             (*status)++ ;
-<a name="l00379"></a>00379         }
-<a name="l00380"></a>00380         cval = iniparser_getstr(sym, <span class="stringliteral">"badpixel:mask"</span>) ;
-<a name="l00381"></a>00381         <span class="keywordflow">if</span> (cval != NULL) 
-<a name="l00382"></a>00382         {
-<a name="l00383"></a>00383             strcpy (cfg -> mask , cval)  ;
-<a name="l00384"></a>00384         }
-<a name="l00385"></a>00385         <span class="keywordflow">else</span>
-<a name="l00386"></a>00386         {
-<a name="l00387"></a>00387             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" mask in the .ini file was not found!\n"</span>) ;
-<a name="l00388"></a>00388             (*status)++ ;
-<a name="l00389"></a>00389         }
-<a name="l00390"></a>00390         ival = iniparser_getint(sym, <span class="stringliteral">"badpixel:maxrad"</span>, -1) ;
-<a name="l00391"></a>00391         <span class="keywordflow">if</span> (ival!=-1) 
-<a name="l00392"></a>00392         {
-<a name="l00393"></a>00393             cfg -> maxRad = ival ; 
-<a name="l00394"></a>00394         }
-<a name="l00395"></a>00395         <span class="keywordflow">else</span> 
-<a name="l00396"></a>00396         {
-<a name="l00397"></a>00397             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" MaxRad in the .ini file was not found!\n"</span>) ;
-<a name="l00398"></a>00398             (*status)++ ;
-<a name="l00399"></a>00399         }
-<a name="l00400"></a>00400         cval = iniparser_getstr(sym, <span class="stringliteral">"badpixel:slitposlist"</span>) ;
-<a name="l00401"></a>00401         <span class="keywordflow">if</span> (cval != NULL) 
-<a name="l00402"></a>00402         {
-<a name="l00403"></a>00403             strcpy (cfg -> slitposList , cval) ;
-<a name="l00404"></a>00404         }
-<a name="l00405"></a>00405         <span class="keywordflow">else</span>
-<a name="l00406"></a>00406         {
-<a name="l00407"></a>00407             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" SlitposList in the .ini file was not found!\n"</span>) ;
-<a name="l00408"></a>00408             (*status)++ ;
-<a name="l00409"></a>00409         }
-<a name="l00410"></a>00410 }
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpix(
-<a name="l00413"></a>00413         dictionary * sym,
-<a name="l00414"></a>00414         flat_config * cfg,
-<a name="l00415"></a>00415         <span class="keywordtype">int</span> *status )
-<a name="l00416"></a>00416 {
-<a name="l00417"></a>00417         <span class="keywordtype">int</span>             ival ;
-<a name="l00418"></a>00418         <span class="keywordtype">float</span>           dval ;
-<a name="l00419"></a>00419         <span class="keywordtype">char</span>       *    cval ;
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421         ival = iniparser_getboolean(sym, <span class="stringliteral">"badpix:badind"</span>, -1) ;
-<a name="l00422"></a>00422         <span class="keywordflow">if</span> (ival != -1)
-<a name="l00423"></a>00423         {
-<a name="l00424"></a>00424             cfg -> badInd = ival ;
-<a name="l00425"></a>00425         }
-<a name="l00426"></a>00426         <span class="keywordflow">else</span>
-<a name="l00427"></a>00427         {
-<a name="l00428"></a>00428             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badInd in the .ini file was not found!\n"</span>) ;
-<a name="l00429"></a>00429             (*status)++ ;
-<a name="l00430"></a>00430         }
-<a name="l00431"></a>00431         cval = iniparser_getstr(sym, <span class="stringliteral">"badpix:maskname"</span>) ;
-<a name="l00432"></a>00432         <span class="keywordflow">if</span> (cval != NULL) 
-<a name="l00433"></a>00433         {
-<a name="l00434"></a>00434             strcpy (cfg -> maskname , cval) ;
-<a name="l00435"></a>00435         }
-<a name="l00436"></a>00436         <span class="keywordflow">else</span>
-<a name="l00437"></a>00437         {
-<a name="l00438"></a>00438             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" mask in the .ini file was not found!\n"</span>) ;
-<a name="l00439"></a>00439             (*status)++ ;
-<a name="l00440"></a>00440         }
-<a name="l00441"></a>00441         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:sigmafactor"</span>, -1.) ;
-<a name="l00442"></a>00442         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00443"></a>00443         {
-<a name="l00444"></a>00444             cfg -> sigmaFactor = dval ;
-<a name="l00445"></a>00445         }
-<a name="l00446"></a>00446         <span class="keywordflow">else</span>
-<a name="l00447"></a>00447         {
-<a name="l00448"></a>00448             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sigmaFactor in the .ini file was not found!\n"</span>) ;
-<a name="l00449"></a>00449             (*status)++ ;
-<a name="l00450"></a>00450         }
-<a name="l00451"></a>00451         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:factor"</span>, -1.) ;
-<a name="l00452"></a>00452         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00453"></a>00453         {
-<a name="l00454"></a>00454             cfg -> factor = dval ;
-<a name="l00455"></a>00455         }
-<a name="l00456"></a>00456         <span class="keywordflow">else</span>
-<a name="l00457"></a>00457         {
-<a name="l00458"></a>00458             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;
-<a name="l00459"></a>00459             (*status)++ ;
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:iterations"</span>, -1) ;
-<a name="l00462"></a>00462         <span class="keywordflow">if</span> (ival!=-1)
-<a name="l00463"></a>00463         {
-<a name="l00464"></a>00464             cfg -> iterations = ival ;
-<a name="l00465"></a>00465         }
-<a name="l00466"></a>00466         <span class="keywordflow">else</span>
-<a name="l00467"></a>00467         {
-<a name="l00468"></a>00468             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" iterations in the .ini file was not found!\n"</span>) ;
-<a name="l00469"></a>00469             (*status)++ ;
-<a name="l00470"></a>00470         }
-<a name="l00471"></a>00471         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:badloreject"</span>, -1.) ;
-<a name="l00472"></a>00472         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00473"></a>00473         {
-<a name="l00474"></a>00474             cfg -> badLoReject = dval ;
-<a name="l00475"></a>00475         }
-<a name="l00476"></a>00476         <span class="keywordflow">else</span>
-<a name="l00477"></a>00477         {
-<a name="l00478"></a>00478             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badLoReject in the .ini file was not found!\n"</span>) ;
-<a name="l00479"></a>00479             (*status)++ ;
-<a name="l00480"></a>00480         }
-<a name="l00481"></a>00481         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:badhireject"</span>, -1.) ;
-<a name="l00482"></a>00482         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00483"></a>00483         {
-<a name="l00484"></a>00484             cfg -> badHiReject = dval ;
-<a name="l00485"></a>00485         }
-<a name="l00486"></a>00486         <span class="keywordflow">else</span>
-<a name="l00487"></a>00487         {
-<a name="l00488"></a>00488             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badHiReject in the .ini file was not found!\n"</span>) ;
-<a name="l00489"></a>00489             (*status)++ ;
-<a name="l00490"></a>00490         }
-<a name="l00491"></a>00491         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:llx"</span>, -1) ;
-<a name="l00492"></a>00492         <span class="keywordflow">if</span> (ival!=-1)
-<a name="l00493"></a>00493         {
-<a name="l00494"></a>00494             cfg -> llx = ival ;
-<a name="l00495"></a>00495         }
-<a name="l00496"></a>00496         <span class="keywordflow">else</span>
-<a name="l00497"></a>00497         {
-<a name="l00498"></a>00498             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;
-<a name="l00499"></a>00499             (*status)++ ;
-<a name="l00500"></a>00500         }
-<a name="l00501"></a>00501         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:lly"</span>, -1) ;
-<a name="l00502"></a>00502         <span class="keywordflow">if</span> (ival!=-1)
-<a name="l00503"></a>00503         {
-<a name="l00504"></a>00504             cfg -> lly = ival ;
-<a name="l00505"></a>00505         }
-<a name="l00506"></a>00506         <span class="keywordflow">else</span>
-<a name="l00507"></a>00507         {
-<a name="l00508"></a>00508             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;
-<a name="l00509"></a>00509             (*status)++ ;
-<a name="l00510"></a>00510         }
-<a name="l00511"></a>00511         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:urx"</span>, -1) ;
-<a name="l00512"></a>00512         <span class="keywordflow">if</span> (ival!=-1)
-<a name="l00513"></a>00513         {
-<a name="l00514"></a>00514             cfg -> urx = ival ;
-<a name="l00515"></a>00515         }
-<a name="l00516"></a>00516         <span class="keywordflow">else</span>
-<a name="l00517"></a>00517         {
-<a name="l00518"></a>00518             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;
-<a name="l00519"></a>00519             (*status)++ ;
-<a name="l00520"></a>00520         }
-<a name="l00521"></a>00521         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:ury"</span>, -1) ;
-<a name="l00522"></a>00522         <span class="keywordflow">if</span> (ival!=-1)
-<a name="l00523"></a>00523         {
-<a name="l00524"></a>00524             cfg -> ury = ival ;
-<a name="l00525"></a>00525         }
-<a name="l00526"></a>00526         <span class="keywordflow">else</span>
-<a name="l00527"></a>00527         {
-<a name="l00528"></a>00528             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;
-<a name="l00529"></a>00529             (*status)++ ;
-<a name="l00530"></a>00530         }
-<a name="l00531"></a>00531         return ;
-<a name="l00532"></a>00532 }
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_thresh(
-<a name="l00535"></a>00535         dictionary * sym,
-<a name="l00536"></a>00536         flat_config * cfg,
-<a name="l00537"></a>00537         <span class="keywordtype">int</span> *status )
-<a name="l00538"></a>00538 {
-<a name="l00539"></a>00539         <span class="keywordtype">int</span>             ival ;
-<a name="l00540"></a>00540         <span class="keywordtype">float</span>           dval ;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542         ival = iniparser_getboolean(sym, <span class="stringliteral">"thresh:threshind"</span>, -1) ;
-<a name="l00543"></a>00543         <span class="keywordflow">if</span> (ival != -1)
-<a name="l00544"></a>00544         {
-<a name="l00545"></a>00545             cfg -> threshInd = ival ;
-<a name="l00546"></a>00546         }
-<a name="l00547"></a>00547         <span class="keywordflow">else</span>
-<a name="l00548"></a>00548         {
-<a name="l00549"></a>00549             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" ThreshInd in the .ini file was not found!\n"</span>) ;
-<a name="l00550"></a>00550             (*status)++ ;
-<a name="l00551"></a>00551         }
-<a name="l00552"></a>00552         dval = iniparser_getdouble(sym, <span class="stringliteral">"thresh:meanfactor"</span>, -1.) ;
-<a name="l00553"></a>00553         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00554"></a>00554         {
-<a name="l00555"></a>00555             cfg -> meanfactor = dval ;
-<a name="l00556"></a>00556         }
-<a name="l00557"></a>00557         <span class="keywordflow">else</span>
-<a name="l00558"></a>00558         {
-<a name="l00559"></a>00559             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" meanfactor in the .ini file was not found!\n"</span>) ;
-<a name="l00560"></a>00560             (*status)++ ;
-<a name="l00561"></a>00561         }
-<a name="l00562"></a>00562 }
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_ini.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   flat_ini.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Mar 04, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    prepare flatfield frames ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_flat_ini.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_frames(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_cleanmean(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpixel(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpix(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_thresh(dictionary *, flat_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> flat_config * </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> parse_flat_ini_file(<span class="keywordtype">char</span> * ini_name)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         dictionary    *       sym ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         flat_config   *       cfg ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keywordtype">int</span>                   status ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordflow">if</span> (!sinfo_file_exists(ini_name)) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot find ini file [%s]: aborting"</span>, ini_name) ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         sym = iniparser_load(ini_name) ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordflow">if</span> (sym == NULL) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"in parsing ini file [%s]: aborting"</span>, ini_name) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>            <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         cfg = sinfo_flat_cfg_create();</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordflow">if</span> (cfg==NULL) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocating flat_config struct"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                 iniparser_freedict(sym) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         status = 0 ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         parse_section_general   (sym, cfg, &status);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         parse_section_frames    (sym, cfg, &status);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         parse_section_cleanmean (sym, cfg, &status);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         parse_section_badpixel  (sym, cfg, &status); </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         parse_section_badpix    (sym, cfg, &status); </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         parse_section_thresh    (sym, cfg, &status); </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         iniparser_freedict(sym);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordflow">if</span> (status>0) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%d errors in ini file [%s]"</span>, status, ini_name);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                 sinfo_flat_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">   Functions:   parse_section_xxx()</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">   In           :       symbolic table read from ini file</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">   Out          :       void</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">   Job          :       update a flat_config structure from what can be</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">                            found in the ini file.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">   Notice       :       all of these functions update a status integer to</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">                        indicate if an error occurred, or leave it as it is if</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">                        everything went Ok.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">        parse_section_general()</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">        parse_section_frames ()</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">        parse_section_cleanmean ()</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">        parse_section_badpixel  () </span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">        parse_section_badpix ()</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">        parse_section_thresh ()</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         dictionary * sym,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         <span class="keywordtype">int</span> *status</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> )</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="keywordtype">char</span>    *       cval ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">         * General section</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"eclipse:versionnumber"</span>) ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>            <span class="keywordflow">if</span> (strcmp(cval, get_eclipse_version())) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"this ini file produced by version %s"</span>, cval);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"you are running version %s"</span>, </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                 get_eclipse_version());</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                 }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no eclipse version number found in file"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximummemory"</span>, -1);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_ram"</span>, ival);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximumswap"</span>, -1);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_swap"</span>, ival);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         sinfo_set_verbose(iniparser_getboolean(sym, <span class="stringliteral">"general:verbose"</span>, 0));</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         sinfo_set_debug(iniparser_getboolean(sym, <span class="stringliteral">"general:debug"</span>, 0));</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:tmpdirname"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                 sinfo_set_tmpdirname(cval);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                 sinfo_set_tmpdirname(<span class="stringliteral">"."</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         ival = iniparser_getboolean(sym, <span class="stringliteral">"general:logfile"</span>, 0);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         <span class="keywordflow">if</span> (ival) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                 cval = iniparser_getstr(sym, <span class="stringliteral">"general:logfilename"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                 <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                         sinfo_set_logfile(1);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                         sinfo_set_logfilename(cval);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                         sinfo_set_logfile(0) ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                 }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:outname"</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                 strcpy (cfg -> outName , cval ) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" OutName in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>             (*status)++ ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         <span class="keywordflow">if</span> (sinfo_verbose_active())</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                 sinfo_print_memory_parameters();</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         return ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_frames(</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         dictionary * sym,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="keywordtype">int</span> *status</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> )</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         <span class="keywordtype">char</span>            *       listname ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         charmatrix      *       charm ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <span class="keywordtype">int</span>                     i, j ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="keywordtype">char</span>            *       name,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                         *       type ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordtype">int</span>                     nval, nobj, noff ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         <span class="keywordtype">int</span>                     nditherobj, nditheroff ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keywordtype">int</span>                     found_sky ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         <span class="keywordtype">int</span>                     found_dither ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordtype">char</span>            **      framelist ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="keywordtype">int</span>             *       frametypes ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordtype">int</span>             *       frameposition ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         listname = iniparser_getstr(sym, <span class="stringliteral">"general:infile"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         <span class="keywordflow">if</span> (sinfo_is_ascii_list(listname)!=1) {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"file [%s] is not an ASCII list: aborting"</span>,listname);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>            (*status)++ ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>            return ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         <span class="comment">/* Read input char sinfo_matrix */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         charm = sinfo_charmatrix_read(listname);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         <span class="keywordflow">if</span> (charm==NULL) {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing input list [%s]"</span>, listname);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>            (*status)++;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>            return ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="comment">/* Check input sinfo_matrix */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         nval = charm->ly ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         <span class="keywordflow">for</span> (j=0 ; j<charm->ly ; j++) {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>            <span class="comment">/* Check file existence */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>            name = charmatrix_elem(charm, 0, j);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>            <span class="keywordflow">if</span> (sinfo_file_exists(name)!=1) {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>               <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"file [%s] declared in list does not exist"</span>, </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                                 name);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>               nval -- ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>            }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">if</span> (nval<1) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no valid plane found in list [%s]"</span>, listname);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>            sinfo_charmatrix_del(charm);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>            (*status)++ ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>            return ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         framelist     = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         frametypes    = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         frameposition = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         found_sky     = 0 ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         found_dither  = 0 ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         nobj          = 0 ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         noff          = 0 ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         nditheroff    = 0 ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         nditherobj    = 0 ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         i = 0 ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         <span class="keywordflow">for</span> (j=0 ; j<charm->ly ; j++) </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>            name = charmatrix_elem(charm, 0, j);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>            <span class="keywordflow">if</span> (sinfo_file_exists(name)==1) </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>            {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>               <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>               framelist[i] = cpl_strdup(name);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>               <span class="comment">/* Check if a file type is present */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>               <span class="keywordflow">if</span> (charm->lx>1) </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>               {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                  <span class="comment">/* Get file type */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                  type = charmatrix_elem(charm, 1, j);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                  strlwc(type);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                  <span class="comment">/* Checking if the type contains 'off' or 'sky' */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                  <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"sky"</span>)!=NULL || strstr(type, <span class="stringliteral">"off"</span>) != NULL) </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                  {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                      frametypes[i] = FRAME_OFF ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                      found_sky = 1 ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                      <span class="comment">/* Checking if the type contains 'pos1' or 'pos2' */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                      <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"2"</span>)!=NULL) </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                      {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                         frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                         found_dither = 1 ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                         nditheroff++ ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                      }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                      <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                      {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                         frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                         noff++ ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                      }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                   }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                   <span class="keywordflow">else</span>  </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                   {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                      frametypes[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                      <span class="comment">/* Checking if the type contains 'pos1' or 'pos2' */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                      <span class="keywordflow">if</span> (strstr(type, <span class="stringliteral">"2"</span>)!=NULL) </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                      {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                         frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                         found_dither = 1 ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                         nditherobj++ ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                      } </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                      <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                      {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                         frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                         nobj++ ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                      }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                    }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                 } </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                 <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                 {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                    <span class="comment">/* No type means an object */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                    frametypes[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                    <span class="comment">/* No type means position 1 */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                    frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                    nobj ++ ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                 }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 i++ ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         sinfo_charmatrix_del(charm);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         cfg->framelist       = framelist ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         cfg->frametype       = frametypes ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         cfg->frameposition   = frameposition ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         cfg->nframes         = nval ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         cfg->nobj            = nobj ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         cfg->noff            = noff ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         cfg->nditherobj      = nditherobj ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         cfg->nditheroff      = nditheroff ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         cfg->contains_sky    = found_sky ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         cfg->contains_dither = found_dither ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         return ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_cleanmean(</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>         dictionary * sym,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="keywordtype">int</span> *status )</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="keywordtype">float</span>           dval ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"cleanmean:loreject"</span>, -1.) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">if</span> (dval!=-1.) </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         {</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>             cfg -> loReject = dval ; </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>         {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" LoReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>             (*status)++ ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"cleanmean:hireject"</span>, -1.) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <span class="keywordflow">if</span> (dval!=-1.) </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>             cfg -> hiReject = dval ; </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" hiReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>             (*status)++ ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         return ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpixel(</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         dictionary * sym,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         <span class="keywordtype">int</span> *status )</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> {</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         <span class="keywordtype">char</span>        *   cval ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         ival = iniparser_getboolean(sym, <span class="stringliteral">"badpixel:interpolind"</span>, -1) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <span class="keywordflow">if</span> (ival != -1)</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>             cfg -> interpolInd = ival ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         }</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" interpolInd in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>             (*status)++ ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"badpixel:mask"</span>) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         <span class="keywordflow">if</span> (cval != NULL) </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             strcpy (cfg -> mask , cval)  ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" mask in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>             (*status)++ ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpixel:maxrad"</span>, -1) ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keywordflow">if</span> (ival!=-1) </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>             cfg -> maxRad = ival ; </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" MaxRad in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>             (*status)++ ;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"badpixel:slitposlist"</span>) ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <span class="keywordflow">if</span> (cval != NULL) </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>             strcpy (cfg -> slitposList , cval) ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" SlitposList in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             (*status)++ ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_badpix(</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         dictionary * sym,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="keywordtype">int</span> *status )</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         <span class="keywordtype">float</span>           dval ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="keywordtype">char</span>       *    cval ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         ival = iniparser_getboolean(sym, <span class="stringliteral">"badpix:badind"</span>, -1) ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>         <span class="keywordflow">if</span> (ival != -1)</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>             cfg -> badInd = ival ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badInd in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>             (*status)++ ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"badpix:maskname"</span>) ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <span class="keywordflow">if</span> (cval != NULL) </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             strcpy (cfg -> maskname , cval) ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" mask in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>             (*status)++ ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>         }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:sigmafactor"</span>, -1.) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             cfg -> sigmaFactor = dval ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         {</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sigmaFactor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             (*status)++ ;</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         }</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:factor"</span>, -1.) ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             cfg -> factor = dval ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>         {</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             (*status)++ ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:iterations"</span>, -1) ;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>         <span class="keywordflow">if</span> (ival!=-1)</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>         {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>             cfg -> iterations = ival ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>         }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>         {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" iterations in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             (*status)++ ;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>         }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:badloreject"</span>, -1.) ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         {</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>             cfg -> badLoReject = dval ;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>         }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         {</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badLoReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>             (*status)++ ;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>         }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"badpix:badhireject"</span>, -1.) ;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             cfg -> badHiReject = dval ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>         {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" badHiReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             (*status)++ ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:llx"</span>, -1) ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         <span class="keywordflow">if</span> (ival!=-1)</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>             cfg -> llx = ival ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>             (*status)++ ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:lly"</span>, -1) ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         <span class="keywordflow">if</span> (ival!=-1)</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             cfg -> lly = ival ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         {</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>             (*status)++ ;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:urx"</span>, -1) ;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         <span class="keywordflow">if</span> (ival!=-1)</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>             cfg -> urx = ival ;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>             (*status)++ ;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         ival = iniparser_getint(sym, <span class="stringliteral">"badpix:ury"</span>, -1) ;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         <span class="keywordflow">if</span> (ival!=-1)</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             cfg -> ury = ival ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" factor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>             (*status)++ ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         return ;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_thresh(</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         dictionary * sym,</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         flat_config * cfg,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         <span class="keywordtype">int</span> *status )</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> {</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         <span class="keywordtype">float</span>           dval ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         ival = iniparser_getboolean(sym, <span class="stringliteral">"thresh:threshind"</span>, -1) ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         <span class="keywordflow">if</span> (ival != -1)</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         {</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>             cfg -> threshInd = ival ;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" ThreshInd in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             (*status)++ ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>         }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"thresh:meanfactor"</span>, -1.) ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>             cfg -> meanfactor = dval ;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         }</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" meanfactor in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>             (*status)++ ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__ini_8h_source.html b/html/sinfo__flat__ini_8h_source.html
index a65286d..76cb492 100644
--- a/html/sinfo__flat__ini_8h_source.html
+++ b/html/sinfo__flat__ini_8h_source.html
@@ -2,63 +2,94 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_flat_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Mar 04, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    preparing flatfield ini file handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FLAT_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_flat_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                Defines</span>
-<a name="l00035"></a>00035 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#define FRAME_ON     1 </span><span class="comment">/* object frames */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#define FRAME_OFF    0 </span><span class="comment">/* off frames, that means sky frames or </span>
-<a name="l00038"></a>00038 <span class="comment">                          calibration frames with lamp switched off */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#define FRAME_POS1   2 </span><span class="comment">/* frames exposed with grating position 1 */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#define FRAME_POS2   3 </span><span class="comment">/* frames exposed with dithered grating position 2 */</span>
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                             Function prototypes </span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00054"></a>00054 flat_config * 
-<a name="l00055"></a>00055 parse_flat_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_flat_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Mar 04, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    preparing flatfield ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FLAT_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_flat_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#define FRAME_ON     1 </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF    0 </span><span class="comment">/* off frames, that means sky frames or </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                          calibration frames with lamp switched off */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS1   2 </span><span class="comment">/* frames exposed with grating position 1 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS2   3 </span><span class="comment">/* frames exposed with dithered grating position 2 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> flat_config * </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> parse_flat_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__ini__by__cpl_8c_source.html b/html/sinfo__flat__ini__by__cpl_8c_source.html
index ce1b545..b653fee 100644
--- a/html/sinfo__flat__ini__by__cpl_8c_source.html
+++ b/html/sinfo__flat__ini__by__cpl_8c_source.html
@@ -2,467 +2,498 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_flat_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 19, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   read cpl input for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_flat_ini_by_cpl.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00040"></a>00040 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                    Functions private to this module</span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 <span class="keywordtype">void</span> sinfo_flat_free_alloc(flat_config * cfg);
-<a name="l00044"></a>00044 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00045"></a>00045 parse_section_frames(flat_config *, cpl_frameset* sof, 
-<a name="l00046"></a>00046                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_cleanmean(flat_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpixel(flat_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(flat_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(flat_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00052"></a>00052 parse_section_qclog(flat_config * cfg, cpl_parameterlist *   cpl_cfg);
-<a name="l00074"></a>00074 flat_config * 
-<a name="l00075"></a>00075 sinfo_parse_cpl_input_flat(cpl_parameterlist* cpl_cfg, 
-<a name="l00076"></a>00076                                    cpl_frameset* sof, 
-<a name="l00077"></a>00077                                    cpl_frameset** raw)
-<a name="l00078"></a>00078 {
-<a name="l00079"></a>00079         flat_config   *       cfg = sinfo_flat_cfg_create();
-<a name="l00080"></a>00080         <span class="keywordtype">int</span> status=0;
-<a name="l00081"></a>00081         <span class="comment">/*</span>
-<a name="l00082"></a>00082 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00083"></a>00083 <span class="comment">         * found in the ini file</span>
-<a name="l00084"></a>00084 <span class="comment">         */</span>
-<a name="l00085"></a>00085         parse_section_badpixel  (cfg, cpl_cfg);
-<a name="l00086"></a>00086         parse_section_cleanmean (cfg, cpl_cfg);
-<a name="l00087"></a>00087         parse_section_badpix    (cfg, cpl_cfg);
-<a name="l00088"></a>00088         parse_section_thresh    (cfg, cpl_cfg); 
-<a name="l00089"></a>00089         parse_section_qclog     (cfg,cpl_cfg);
-<a name="l00090"></a>00090       
-<a name="l00091"></a>00091         parse_section_frames    (cfg, sof, raw,  &status);
-<a name="l00092"></a>00092         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00093"></a>00093                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00094"></a>00094                 sinfo_flat_cfg_destroy(cfg);
-<a name="l00095"></a>00095                 cfg = NULL ;
-<a name="l00096"></a>00096                 <span class="keywordflow">return</span> NULL ;
-<a name="l00097"></a>00097         }
-<a name="l00098"></a>00098         <span class="keywordflow">return</span> cfg ;
-<a name="l00099"></a>00099 }
-<a name="l00100"></a>00100 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00111"></a>00111 parse_section_frames(flat_config * cfg,
-<a name="l00112"></a>00112              cpl_frameset * sof,
-<a name="l00113"></a>00113              cpl_frameset ** raw,
-<a name="l00114"></a>00114                      <span class="keywordtype">int</span>* status)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116    <span class="keywordtype">int</span>                     i;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118    <span class="keywordtype">char</span>           *       name ;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120    <span class="keywordtype">int</span>                     nobj, noff ;
-<a name="l00121"></a>00121    <span class="keywordtype">int</span>                     nditherobj, nditheroff ;
-<a name="l00122"></a>00122    <span class="keywordtype">int</span>                     found_sky ;
-<a name="l00123"></a>00123    <span class="keywordtype">int</span>                     found_dither ;
-<a name="l00124"></a>00124    <span class="keywordtype">int</span> nframes=0;
-<a name="l00125"></a>00125    <span class="keywordtype">int</span> nraw=0;
-<a name="l00126"></a>00126    <span class="keywordtype">char</span>* tag;
-<a name="l00127"></a>00127    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00128"></a>00128    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00129"></a>00129    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00130"></a>00130    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132    cpl_frame* frame   = NULL;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135    nframes = cpl_frameset_get_size(sof);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137    sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);
-<a name="l00138"></a>00138    nraw=cpl_frameset_get_size(*raw);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140    <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00141"></a>00141       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);
-<a name="l00142"></a>00142    }   
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145    nraw=cpl_frameset_get_size(*raw);
-<a name="l00146"></a>00146    <span class="keywordflow">if</span> (nraw==0) {
-<a name="l00147"></a>00147        sinfo_msg(<span class="stringliteral">"Frame %s or %s not found!"</span>, RAW_FLAT_LAMP,RAW_FLAT_NS);
-<a name="l00148"></a>00148        (*status)++;
-<a name="l00149"></a>00149        return   ;
-<a name="l00150"></a>00150    }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152    nraw  = cpl_frameset_get_size(*raw);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154    sinfo_msg(<span class="stringliteral">"nraw=%d"</span>,nraw);
-<a name="l00155"></a>00155    <span class="keywordflow">if</span>(nraw<1) {
-<a name="l00156"></a>00156      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input, something wrong!"</span>);
-<a name="l00157"></a>00157      (*status)++;
-<a name="l00158"></a>00158      <span class="keywordflow">return</span>;
-<a name="l00159"></a>00159    }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161    cknull_nomsg(frame = cpl_frameset_get_frame(*raw,0));
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163    ck0_nomsg(sinfo_get_spatial_res(frame,spat_res));
-<a name="l00164"></a>00164    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))
-<a name="l00165"></a>00165      {
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     <span class="keywordflow">case</span> 0: 
-<a name="l00168"></a>00168       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00169"></a>00169       <span class="keywordflow">break</span>;
-<a name="l00170"></a>00170     <span class="keywordflow">case</span> 1: 
-<a name="l00171"></a>00171       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00172"></a>00172       <span class="keywordflow">break</span>;
-<a name="l00173"></a>00173     <span class="keywordflow">case</span> -1:
-<a name="l00174"></a>00174       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00175"></a>00175       <span class="keywordflow">break</span>;
-<a name="l00176"></a>00176     <span class="keywordflow">default</span>: 
-<a name="l00177"></a>00177       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00178"></a>00178       <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180      }
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182    sinfo_get_band(frame,band);
-<a name="l00183"></a>00183    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00184"></a>00184                      spat_res,              lamp_status,    band);
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186    
-<a name="l00187"></a>00187    sinfo_get_ins_set(band,&ins_set);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00191"></a>00191    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00192"></a>00192    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00193"></a>00193    cfg->frameposition = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195    found_sky     = 0 ;
-<a name="l00196"></a>00196    found_dither  = 0 ;
-<a name="l00197"></a>00197    nobj          = 0 ;
-<a name="l00198"></a>00198    noff          = 0 ;
-<a name="l00199"></a>00199    nditheroff    = 0 ;
-<a name="l00200"></a>00200    nditherobj    = 0 ;
-<a name="l00201"></a>00201    <span class="keywordflow">for</span> (i=0;i<nraw;i++) {
-<a name="l00202"></a>00202      cfg->framelist[i]=NULL;
-<a name="l00203"></a>00203      cfg->frametype[i]=-1;
-<a name="l00204"></a>00204      cfg->frameposition[i]=-1;
-<a name="l00205"></a>00205    }
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208    cfg->nframes         = nraw ;
-<a name="l00209"></a>00209     <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00210"></a>00210    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00211"></a>00211       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00212"></a>00212       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00213"></a>00213       <span class="keywordflow">if</span>(sinfo_file_exists(name)==1) {
-<a name="l00214"></a>00214     <span class="comment">/* to go on the file must exist */</span>
-<a name="l00215"></a>00215     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l00216"></a>00216       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> 
-<a name="l00217"></a>00217       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l00218"></a>00218           <span class="comment">/* sinfo_msg("frame %s tag =%s \n",name,tag); */</span>
-<a name="l00219"></a>00219           <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0) ||
-<a name="l00220"></a>00220              (sinfo_frame_is_sky(frame)  == 1) ) 
-<a name="l00221"></a>00221         {
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00224"></a>00224              cfg->frametype[i] = FRAME_OFF ;
-<a name="l00225"></a>00225              found_sky = 1;
-<a name="l00226"></a>00226              <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame)) 
-<a name="l00227"></a>00227            {
-<a name="l00228"></a>00228                 cfg->frameposition[i] = FRAME_POS2 ;
-<a name="l00229"></a>00229                 found_dither = 1 ;
-<a name="l00230"></a>00230                 nditheroff++ ;
-<a name="l00231"></a>00231            }
-<a name="l00232"></a>00232              <span class="keywordflow">else</span> 
-<a name="l00233"></a>00233            {
-<a name="l00234"></a>00234                  cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00235"></a>00235                  noff++ ;
-<a name="l00236"></a>00236            }
-<a name="l00237"></a>00237         }
-<a name="l00238"></a>00238           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_frame_is_on(frame)  == 1) 
-<a name="l00239"></a>00239         {
-<a name="l00240"></a>00240            cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00241"></a>00241            cfg->frametype[i] = FRAME_ON ;
-<a name="l00242"></a>00242           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))
-<a name="l00243"></a>00243         {
-<a name="l00244"></a>00244           cfg->frameposition[i] = FRAME_POS2 ;
-<a name="l00245"></a>00245           found_dither = 1 ;
-<a name="l00246"></a>00246           nditherobj++ ;
-<a name="l00247"></a>00247         }
-<a name="l00248"></a>00248               <span class="keywordflow">else</span> 
-<a name="l00249"></a>00249         {
-<a name="l00250"></a>00250           cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00251"></a>00251           nobj++ ;
-<a name="l00252"></a>00252         }
-<a name="l00253"></a>00253         }
-<a name="l00254"></a>00254  
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256        
-<a name="l00257"></a>00257         <span class="keywordflow">else</span> 
-<a name="l00258"></a>00258       {
-<a name="l00259"></a>00259             <span class="comment">/* No type means an object */</span>
-<a name="l00260"></a>00260             <span class="comment">/* No type means position 1 */</span>
-<a name="l00261"></a>00261     <span class="comment">/*</span>
-<a name="l00262"></a>00262 <span class="comment">        cfg->frametype[i] = FRAME_ON ;</span>
-<a name="l00263"></a>00263 <span class="comment">        cfg->frameposition[i] = FRAME_POS1 ;</span>
-<a name="l00264"></a>00264 <span class="comment">        nobj ++ ;</span>
-<a name="l00265"></a>00265 <span class="comment">    */</span>
-<a name="l00266"></a>00266       }
-<a name="l00267"></a>00267       }
-<a name="l00268"></a>00268       <span class="comment">/* Store file name into framelist */</span>
-<a name="l00269"></a>00269       <span class="comment">/* sinfo_msg("frame=%s\n",cfg->framelist[i]); */</span>
-<a name="l00270"></a>00270     }
-<a name="l00271"></a>00271    
-<a name="l00272"></a>00272    <span class="comment">/*</span>
-<a name="l00273"></a>00273 <span class="comment">   sinfo_msg("Noff= %d Nobj= %d Nditheroff= %d Nditherobj= %d",</span>
-<a name="l00274"></a>00274 <span class="comment">                     noff,nobj,nditheroff,nditherobj);</span>
-<a name="l00275"></a>00275 <span class="comment">   */</span>
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278    <span class="keywordflow">if</span>((nobj<1) && (nditherobj< 1)) {
-<a name="l00279"></a>00279      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no ON raw frame in input, something wrong!"</span>);
-<a name="l00280"></a>00280      sinfo_flat_free_alloc(cfg);
-<a name="l00281"></a>00281      (*status)++;
-<a name="l00282"></a>00282      <span class="keywordflow">return</span>;
-<a name="l00283"></a>00283    }
-<a name="l00284"></a>00284  
-<a name="l00285"></a>00285    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00286"></a>00286    cfg->nobj            = nobj ;
-<a name="l00287"></a>00287    cfg->noff            = noff ;
-<a name="l00288"></a>00288    cfg->nditherobj      = nditherobj ;
-<a name="l00289"></a>00289    cfg->nditheroff      = nditheroff ;
-<a name="l00290"></a>00290    cfg->contains_sky    = found_sky ;
-<a name="l00291"></a>00291    cfg->contains_dither = found_dither ;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293    strcpy(cfg -> outName, LAMP_FLATS_OUT_FILENAME);
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295    <span class="keywordflow">if</span>(cfg->interpolInd != 0) {
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP)) {
-<a name="l00298"></a>00298          frame = cpl_frameset_find(sof,PRO_BP_MAP);
-<a name="l00299"></a>00299          strcpy(cfg -> mask,cpl_frame_get_filename(frame));
-<a name="l00300"></a>00300          <span class="keywordflow">if</span>(sinfo_file_exists(cfg->mask)==1) {
-<a name="l00301"></a>00301          } <span class="keywordflow">else</span> {
-<a name="l00302"></a>00302             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filename %s for Frame %s not found!"</span>, 
-<a name="l00303"></a>00303                        cfg->mask, PRO_BP_MAP);
-<a name="l00304"></a>00304             sinfo_flat_free_alloc(cfg);
-<a name="l00305"></a>00305             (*status)++;
-<a name="l00306"></a>00306            <span class="keywordflow">return</span>;
-<a name="l00307"></a>00307  
-<a name="l00308"></a>00308          }
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310       } <span class="keywordflow">else</span> {
-<a name="l00311"></a>00311         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_BP_MAP);
-<a name="l00312"></a>00312         sinfo_flat_free_alloc(cfg);
-<a name="l00313"></a>00313         (*status)++;
-<a name="l00314"></a>00314        <span class="keywordflow">return</span>;
-<a name="l00315"></a>00315       } 
-<a name="l00316"></a>00316       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {
-<a name="l00317"></a>00317          frame = cpl_frameset_find(sof,PRO_SLIT_POS);
-<a name="l00318"></a>00318          strcpy(cfg -> slitposList,cpl_frame_get_filename(frame));
-<a name="l00319"></a>00319          <span class="keywordflow">if</span>(sinfo_file_exists(cfg->mask) == 1) {
-<a name="l00320"></a>00320          } <span class="keywordflow">else</span> {
-<a name="l00321"></a>00321             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filename %s for Frame %s not found!"</span>, 
-<a name="l00322"></a>00322                        cfg->slitposList, PRO_SLIT_POS);
-<a name="l00323"></a>00323             sinfo_flat_free_alloc(cfg);
-<a name="l00324"></a>00324             (*status)++;
-<a name="l00325"></a>00325             <span class="keywordflow">return</span>;
-<a name="l00326"></a>00326      }
-<a name="l00327"></a>00327       } <span class="keywordflow">else</span> {
-<a name="l00328"></a>00328         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS);
-<a name="l00329"></a>00329         sinfo_flat_free_alloc(cfg);
-<a name="l00330"></a>00330         (*status)++;
-<a name="l00331"></a>00331         <span class="keywordflow">return</span>;
-<a name="l00332"></a>00332       }
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334    }
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   cleanup:
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338    <span class="keywordflow">return</span>;
-<a name="l00339"></a>00339 }
-<a name="l00340"></a>00340 
-<a name="l00348"></a>00348 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00349"></a>00349 parse_section_cleanmean(flat_config * cfg, cpl_parameterlist * cpl_cfg)
-<a name="l00350"></a>00350 {
-<a name="l00351"></a>00351    cpl_parameter *p; 
-<a name="l00352"></a>00352   
-<a name="l00353"></a>00353    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.low_rejection"</span>);
-<a name="l00354"></a>00354    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.high_rejection"</span>);
-<a name="l00357"></a>00357    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359 }
-<a name="l00360"></a>00360 
-<a name="l00368"></a>00368 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00369"></a>00369 parse_section_badpixel(flat_config * cfg, cpl_parameterlist * cpl_cfg)
-<a name="l00370"></a>00370 {
-<a name="l00371"></a>00371    cpl_parameter *p; 
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.interpol_index"</span>);
-<a name="l00374"></a>00374    cfg -> interpolInd = cpl_parameter_get_bool(p);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.max_rad"</span>);
-<a name="l00377"></a>00377    cfg -> maxRad =  cpl_parameter_get_int(p);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379 }
-<a name="l00380"></a>00380 
-<a name="l00388"></a>00388 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00389"></a>00389 parse_section_badpix(flat_config * cfg, cpl_parameterlist * cpl_cfg)
-<a name="l00390"></a>00390 {
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392    cpl_parameter* p;
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_ind"</span>);
-<a name="l00395"></a>00395    cfg ->  badInd = cpl_parameter_get_bool(p);
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397    strcpy(cfg -> maskname, LAMP_FLATS_OUT_BPMAP);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.sigma_factor"</span>);
-<a name="l00400"></a>00400    cfg -> sigmaFactor = cpl_parameter_get_double(p);
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.factor"</span>);
-<a name="l00403"></a>00403    cfg -> factor = cpl_parameter_get_double(p);
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.iterations"</span>);
-<a name="l00406"></a>00406    cfg -> iterations = cpl_parameter_get_int(p);
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_low_rejection"</span>);
-<a name="l00409"></a>00409    cfg -> badLoReject = cpl_parameter_get_double(p);
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_high_rejection"</span>);
-<a name="l00412"></a>00412    cfg -> badHiReject = cpl_parameter_get_double(p);
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.llx"</span>);
-<a name="l00415"></a>00415    cfg -> llx = cpl_parameter_get_int(p);
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.lly"</span>);
-<a name="l00418"></a>00418    cfg -> lly = cpl_parameter_get_int(p);
-<a name="l00419"></a>00419  
-<a name="l00420"></a>00420    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.urx"</span>);
-<a name="l00421"></a>00421    cfg -> urx = cpl_parameter_get_int(p);
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.ury"</span>);
-<a name="l00424"></a>00424    cfg -> ury = cpl_parameter_get_int(p);
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 }
-<a name="l00427"></a>00427 
-<a name="l00435"></a>00435 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00436"></a>00436 parse_section_thresh(flat_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00437"></a>00437 {
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439    cpl_parameter* p;
-<a name="l00440"></a>00440    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.thresh_ind"</span>);
-<a name="l00441"></a>00441    cfg -> threshInd =cpl_parameter_get_bool(p);
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.mean_factor"</span>);
-<a name="l00444"></a>00444    cfg -> meanfactor = cpl_parameter_get_double(p);
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 }
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449 
-<a name="l00457"></a>00457 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00458"></a>00458 parse_section_qclog(flat_config * cfg, cpl_parameterlist *   cpl_cfg)
-<a name="l00459"></a>00459 {
-<a name="l00460"></a>00460    cpl_parameter *p;  
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin1"</span>);
-<a name="l00463"></a>00463    cfg -> qc_fpn_xmin1 = cpl_parameter_get_int(p);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax1"</span>);
-<a name="l00466"></a>00466    cfg -> qc_fpn_xmax1 = cpl_parameter_get_int(p);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin1"</span>);
-<a name="l00469"></a>00469    cfg -> qc_fpn_ymin1 = cpl_parameter_get_int(p);
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax1"</span>);
-<a name="l00472"></a>00472    cfg -> qc_fpn_ymax1 = cpl_parameter_get_int(p);
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin2"</span>);
-<a name="l00475"></a>00475    cfg -> qc_fpn_xmin2 = cpl_parameter_get_int(p);
-<a name="l00476"></a>00476    
-<a name="l00477"></a>00477    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax2"</span>);
-<a name="l00478"></a>00478    cfg -> qc_fpn_xmax2 = cpl_parameter_get_int(p);
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin2"</span>);
-<a name="l00481"></a>00481    cfg -> qc_fpn_ymin2 = cpl_parameter_get_int(p);
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax2"</span>);
-<a name="l00484"></a>00484    cfg -> qc_fpn_ymax2 = cpl_parameter_get_int(p);
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_min"</span>);
-<a name="l00487"></a>00487    cfg -> qc_thresh_min = cpl_parameter_get_int(p);
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_max"</span>);
-<a name="l00490"></a>00490    cfg -> qc_thresh_max = cpl_parameter_get_int(p);
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492 }
-<a name="l00500"></a>00500 <span class="keywordtype">void</span>
-<a name="l00501"></a>00501 sinfo_flat_free(flat_config ** cfg)
-<a name="l00502"></a>00502 {  
-<a name="l00503"></a>00503   <span class="keywordflow">if</span> ((*cfg) != NULL) {
-<a name="l00504"></a>00504     sinfo_flat_free_alloc(*cfg);
-<a name="l00505"></a>00505     sinfo_flat_cfg_destroy(*cfg);
-<a name="l00506"></a>00506     *cfg=NULL;
-<a name="l00507"></a>00507   }
-<a name="l00508"></a>00508   <span class="keywordflow">return</span>;
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 }
-<a name="l00518"></a>00518 <span class="keywordtype">void</span> 
-<a name="l00519"></a>00519 sinfo_flat_free_alloc(flat_config * cfg)
-<a name="l00520"></a>00520 {
-<a name="l00521"></a>00521   <span class="keywordflow">if</span>(cfg->frametype != NULL){
-<a name="l00522"></a>00522        cpl_free(cfg->frametype); 
-<a name="l00523"></a>00523   }
-<a name="l00524"></a>00524   <span class="keywordflow">if</span>(cfg->framelist != NULL) {
-<a name="l00525"></a>00525      cpl_free(cfg->framelist);
-<a name="l00526"></a>00526   }
-<a name="l00527"></a>00527   <span class="keywordflow">if</span>(cfg->frameposition != NULL) {
-<a name="l00528"></a>00528      cpl_free(cfg->frameposition);
-<a name="l00529"></a>00529   }
-<a name="l00530"></a>00530 return ;
-<a name="l00531"></a>00531 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_flat_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 19, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   read cpl input for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_flat_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">void</span> sinfo_flat_free_alloc(flat_config * cfg);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> parse_section_frames(flat_config *, cpl_frameset* sof, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_cleanmean(flat_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpixel(flat_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_badpix(flat_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_thresh(flat_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> parse_section_qclog(flat_config * cfg, cpl_parameterlist *   cpl_cfg);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> flat_config * </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_parse_cpl_input_flat(cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                    cpl_frameset* sof, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                    cpl_frameset** raw)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         flat_config   *       cfg = sinfo_flat_cfg_create();</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         parse_section_badpixel  (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         parse_section_cleanmean (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         parse_section_badpix    (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         parse_section_thresh    (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         parse_section_qclog     (cfg,cpl_cfg);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         parse_section_frames    (cfg, sof, raw,  &status);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 sinfo_flat_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> parse_section_frames(flat_config * cfg,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>              cpl_frameset ** raw,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">char</span>           *       name ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">int</span>                     nobj, noff ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span>                     nditherobj, nditheroff ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span>                     found_sky ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">int</span>                     found_dither ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">char</span>* tag;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    nframes = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_LAMP);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       sinfo_extract_raw_frames_type(sof,raw,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    }   </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>    <span class="keywordflow">if</span> (nraw==0) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>        sinfo_msg(<span class="stringliteral">"Frame %s or %s not found!"</span>, RAW_FLAT_LAMP,RAW_FLAT_NS);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>        (*status)++;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>        return   ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    nraw  = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    sinfo_msg(<span class="stringliteral">"nraw=%d"</span>,nraw);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>    <span class="keywordflow">if</span>(nraw<1) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>      (*status)++;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    cknull_nomsg(frame = cpl_frameset_get_frame(*raw,0));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    ck0_nomsg(sinfo_get_spatial_res(frame,spat_res));</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>      {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>      }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                      spat_res,              lamp_status,    band);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>    </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    cfg->frameposition = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    found_sky     = 0 ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    found_dither  = 0 ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    nobj          = 0 ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    noff          = 0 ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    nditheroff    = 0 ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    nditherobj    = 0 ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    <span class="keywordflow">for</span> (i=0;i<nraw;i++) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>      cfg->framelist[i]=NULL;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>      cfg->frametype[i]=-1;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>      cfg->frameposition[i]=-1;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       <span class="keywordflow">if</span>(sinfo_file_exists(name)==1) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>           <span class="comment">/* sinfo_msg("frame %s tag =%s \n",name,tag); */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>           <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0) ||</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>              (sinfo_frame_is_sky(frame)  == 1) ) </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>              cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>              cfg->frametype[i] = FRAME_OFF ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>              found_sky = 1;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>              <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame)) </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>            {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                 cfg->frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                 found_dither = 1 ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                 nditheroff++ ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>            }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>              <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>            {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                  cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                  noff++ ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>            }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_frame_is_on(frame)  == 1) </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>            cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>            cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>           cfg->frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>           found_dither = 1 ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>           nditherobj++ ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>               <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>           cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>           nobj++ ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>  </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>        </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>             <span class="comment">/* No type means an object */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>             <span class="comment">/* No type means position 1 */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">        cfg->frametype[i] = FRAME_ON ;</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">        cfg->frameposition[i] = FRAME_POS1 ;</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">        nobj ++ ;</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       <span class="comment">/* sinfo_msg("frame=%s\n",cfg->framelist[i]); */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">   sinfo_msg("Noff= %d Nobj= %d Nditheroff= %d Nditherobj= %d",</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">                     noff,nobj,nditheroff,nditherobj);</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>    <span class="keywordflow">if</span>((nobj<1) && (nditherobj< 1)) {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no ON raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>      sinfo_flat_free_alloc(cfg);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>      (*status)++;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>  </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    cfg->nobj            = nobj ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>    cfg->noff            = noff ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>    cfg->nditherobj      = nditherobj ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    cfg->nditheroff      = nditheroff ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>    cfg->contains_sky    = found_sky ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>    cfg->contains_dither = found_dither ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>    strcpy(cfg -> outName, LAMP_FLATS_OUT_FILENAME);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>    <span class="keywordflow">if</span>(cfg->interpolInd != 0) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP)) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>          frame = cpl_frameset_find(sof,PRO_BP_MAP);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>          strcpy(cfg -> mask,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>          <span class="keywordflow">if</span>(sinfo_file_exists(cfg->mask)==1) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filename %s for Frame %s not found!"</span>, </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                        cfg->mask, PRO_BP_MAP);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>             sinfo_flat_free_alloc(cfg);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>             (*status)++;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>  </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>          }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_BP_MAP);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>         sinfo_flat_free_alloc(cfg);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         (*status)++;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>        <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       } </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>          frame = cpl_frameset_find(sof,PRO_SLIT_POS);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>          strcpy(cfg -> slitposList,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>          <span class="keywordflow">if</span>(sinfo_file_exists(cfg->mask) == 1) {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filename %s for Frame %s not found!"</span>, </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                        cfg->slitposList, PRO_SLIT_POS);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             sinfo_flat_free_alloc(cfg);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>             (*status)++;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>      }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         sinfo_flat_free_alloc(cfg);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         (*status)++;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   cleanup:</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> parse_section_cleanmean(flat_config * cfg, cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.low_rejection"</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.high_rejection"</span>);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> parse_section_badpixel(flat_config * cfg, cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.interpol_index"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>    cfg -> interpolInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.max_rad"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>    cfg -> maxRad =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> parse_section_badpix(flat_config * cfg, cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_ind"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>    cfg ->  badInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>    strcpy(cfg -> maskname, LAMP_FLATS_OUT_BPMAP);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.sigma_factor"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>    cfg -> sigmaFactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.factor"</span>);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>    cfg -> factor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.iterations"</span>);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>    cfg -> iterations = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_low_rejection"</span>);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>    cfg -> badLoReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.bad_high_rejection"</span>);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>    cfg -> badHiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.llx"</span>);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>    cfg -> llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.lly"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>    cfg -> lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>  </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.urx"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>    cfg -> urx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.ury"</span>);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>    cfg -> ury = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> parse_section_thresh(flat_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.thresh_ind"</span>);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>    cfg -> threshInd =cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.mean_factor"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>    cfg -> meanfactor = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> parse_section_qclog(flat_config * cfg, cpl_parameterlist *   cpl_cfg)</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>    cpl_parameter *p;  </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin1"</span>);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>    cfg -> qc_fpn_xmin1 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax1"</span>);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>    cfg -> qc_fpn_xmax1 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin1"</span>);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>    cfg -> qc_fpn_ymin1 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax1"</span>);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>    cfg -> qc_fpn_ymax1 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin2"</span>);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>    cfg -> qc_fpn_xmin2 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>    </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax2"</span>);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>    cfg -> qc_fpn_xmax2 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin2"</span>);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>    cfg -> qc_fpn_ymin2 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax2"</span>);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>    cfg -> qc_fpn_ymax2 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>    cfg -> qc_thresh_min = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>    cfg -> qc_thresh_max = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> sinfo_flat_free(flat_config ** cfg)</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> {  </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordflow">if</span> ((*cfg) != NULL) {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     sinfo_flat_free_alloc(*cfg);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     sinfo_flat_cfg_destroy(*cfg);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     *cfg=NULL;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> sinfo_flat_free_alloc(flat_config * cfg)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   <span class="keywordflow">if</span>(cfg->frametype != NULL){</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>        cpl_free(cfg->frametype); </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   }</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   <span class="keywordflow">if</span>(cfg->framelist != NULL) {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>      cpl_free(cfg->framelist);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keywordflow">if</span>(cfg->frameposition != NULL) {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>      cpl_free(cfg->frameposition);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   }</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> return ;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__flat__ini__by__cpl_8h_source.html b/html/sinfo__flat__ini__by__cpl_8h_source.html
index fc1fb66..4d54da0 100644
--- a/html/sinfo__flat__ini__by__cpl_8h_source.html
+++ b/html/sinfo__flat__ini__by__cpl_8h_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_flat_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_flat_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_flat_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   Mar 04, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   flatfield cpl_input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FLAT_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_flat_cfg.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Defines</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#define FRAME_ON     1 </span><span class="comment">/* object frames */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define FRAME_OFF    0 </span><span class="comment">/* off frames, that means sky frames or </span>
-<a name="l00039"></a>00039 <span class="comment">                          calibration frames with lamp switched off */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#define FRAME_POS1   2 </span><span class="comment">/* frames exposed with grating position 1 */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#define FRAME_POS2   3 </span><span class="comment">/* frames exposed with dithered grating position 2 */</span>
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                             Function prototypes </span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00058"></a>00058 flat_config * 
-<a name="l00059"></a>00059 sinfo_parse_cpl_input_flat(cpl_parameterlist * cpl_cfg, 
-<a name="l00060"></a>00060                cpl_frameset* sof, 
-<a name="l00061"></a>00061                            cpl_frameset** raw) ;
-<a name="l00062"></a>00062 
-<a name="l00069"></a>00069 <span class="keywordtype">void</span> sinfo_flat_free(flat_config ** cfg);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_flat_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_flat_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   Mar 04, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   flatfield cpl_input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FLAT_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FLAT_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_flat_cfg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#define FRAME_ON     1 </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF    0 </span><span class="comment">/* off frames, that means sky frames or </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                          calibration frames with lamp switched off */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS1   2 </span><span class="comment">/* frames exposed with grating position 1 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS2   3 </span><span class="comment">/* frames exposed with dithered grating position 2 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> flat_config * </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> sinfo_parse_cpl_input_flat(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                cpl_frameset* sof, </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                            cpl_frameset** raw) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">void</span> sinfo_flat_free(flat_config ** cfg);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus_8c_source.html b/html/sinfo__focus_8c_source.html
index 2d48fcf..5920dd0 100644
--- a/html/sinfo__focus_8c_source.html
+++ b/html/sinfo__focus_8c_source.html
@@ -2,1372 +2,1403 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*******************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  16/01/02  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_focus.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        routines to determine the focus position of the detector</span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*   #include "sinfo_focus.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*</span>
-<a name="l00037"></a>00037 <span class="comment">*   1) double sinfo_new_gaussian_ellipse ( double * xdat, double * parlist )</span>
-<a name="l00038"></a>00038 <span class="comment">*   2) void sinfo_new_gaussian_ellipse_deriv( double * xdat, </span>
-<a name="l00039"></a>00039 <span class="comment">                                              double * parlist, </span>
-<a name="l00040"></a>00040 <span class="comment">                                              double * dervs )</span>
-<a name="l00041"></a>00041 <span class="comment">*   3) static int new_inv_mat (void)</span>
-<a name="l00042"></a>00042 <span class="comment">*   4) static void new_get_mat ( double * xdat,</span>
-<a name="l00043"></a>00043 <span class="comment">*                            int    * xdim,</span>
-<a name="l00044"></a>00044 <span class="comment">*                            double * ydat,</span>
-<a name="l00045"></a>00045 <span class="comment">*                            double * wdat,</span>
-<a name="l00046"></a>00046 <span class="comment">*                            int    * ndat,</span>
-<a name="l00047"></a>00047 <span class="comment">*                            double * fpar,</span>
-<a name="l00048"></a>00048 <span class="comment">*                            double * epar,</span>
-<a name="l00049"></a>00049 <span class="comment">*                            int    * npar )</span>
-<a name="l00050"></a>00050 <span class="comment">*   5) static int new_get_vec ( double * xdat,</span>
-<a name="l00051"></a>00051 <span class="comment">*                           int    * xdim,</span>
-<a name="l00052"></a>00052 <span class="comment">*                           double * ydat,</span>
-<a name="l00053"></a>00053 <span class="comment">*                           double * wdat,</span>
-<a name="l00054"></a>00054 <span class="comment">*                           int    * ndat,</span>
-<a name="l00055"></a>00055 <span class="comment">*                           double * fpar,</span>
-<a name="l00056"></a>00056 <span class="comment">*                           double * epar,</span>
-<a name="l00057"></a>00057 <span class="comment">*                           int    * npar )</span>
-<a name="l00058"></a>00058 <span class="comment">*   6) int new_lsqfit ( double * xdat,</span>
-<a name="l00059"></a>00059 <span class="comment">*                   int    * xdim,</span>
-<a name="l00060"></a>00060 <span class="comment">*                   double * ydat,</span>
-<a name="l00061"></a>00061 <span class="comment">*                   double * wdat,</span>
-<a name="l00062"></a>00062 <span class="comment">*                   int    * ndat,</span>
-<a name="l00063"></a>00063 <span class="comment">*                   double * fpar,</span>
-<a name="l00064"></a>00064 <span class="comment">*                   double * epar,</span>
-<a name="l00065"></a>00065 <span class="comment">*                   int    * mpar,</span>
-<a name="l00066"></a>00066 <span class="comment">*                   int    * npar,</span>
-<a name="l00067"></a>00067 <span class="comment">*                   double * tol ,</span>
-<a name="l00068"></a>00068 <span class="comment">*                   int    * its ,</span>
-<a name="l00069"></a>00069 <span class="comment">*                   double * lab  )</span>
-<a name="l00070"></a>00070 <span class="comment">*   7) int sinfo_new_fit_2d_gaussian( cpl_image   * lineImage, </span>
-<a name="l00071"></a>00071 <span class="comment">*                         double     * fit_par, </span>
-<a name="l00072"></a>00072 <span class="comment">*                         double     * derv_par   </span>
-<a name="l00073"></a>00073 <span class="comment">*                         int        * mpar,</span>
-<a name="l00074"></a>00074 <span class="comment">*                         int          lleftx,</span>
-<a name="l00075"></a>00075 <span class="comment">*                         int          llefty,</span>
-<a name="l00076"></a>00076 <span class="comment">*                         int          halfbox_x,</span>
-<a name="l00077"></a>00077 <span class="comment">*                         int          halfbox_y, int* check )</span>
-<a name="l00078"></a>00078 <span class="comment">*   8) cpl_image * sinfo_new_plot_gaussian ( cpl_image   * image, </span>
-<a name="l00079"></a>00079 <span class="comment">*                                double     * parlist )</span>
-<a name="l00080"></a>00080 <span class="comment">*   9) static int new_gauss2ellipse ( double     * parlist ,</span>
-<a name="l00081"></a>00081 <span class="comment">*  10) float sinfo_new_determine_conversion_factor ( cpl_imagelist * cube, </span>
-<a name="l00082"></a>00082 <span class="comment">*                                        float     mag,</span>
-<a name="l00083"></a>00083 <span class="comment">*                                        float     exptime,</span>
-<a name="l00084"></a>00084 <span class="comment">*                                        int       lleftx,</span>
-<a name="l00085"></a>00085 <span class="comment">*                                        int       llefty,</span>
-<a name="l00086"></a>00086 <span class="comment">*                                        int       halfbox_x,</span>
-<a name="l00087"></a>00087 <span class="comment">*                                        int       halfbox_y, </span>
-<a name="l00088"></a>00088 <span class="comment">*                                        int* check )</span>
-<a name="l00089"></a>00089 <span class="comment">*</span>
-<a name="l00090"></a>00090 <span class="comment">*   DESCRIPTION</span>
-<a name="l00091"></a>00091 <span class="comment">*   1) Compute the value of a 2d Gaussian function at a given point.</span>
-<a name="l00092"></a>00092 <span class="comment">*      The ellptical 2D Gaussian is:</span>
-<a name="l00093"></a>00093 <span class="comment">*      F(x,y) = par(2) * EXP( -4.0*log(2.0)*[(xr/par(4))^2+(yr/par(5))^2]) + </span>
-<a name="l00094"></a>00094 <span class="comment">                par(3),</span>
-<a name="l00095"></a>00095 <span class="comment">*      where: xr = xo * cos(par(6)) + yo * sin(par(6))</span>
-<a name="l00096"></a>00096 <span class="comment">*      yr = -xo * sin(par(6)) + yo * cos(par(6))</span>
-<a name="l00097"></a>00097 <span class="comment">*      and:   x0 = x - par(0)</span>
-<a name="l00098"></a>00098 <span class="comment">*             y0 = y - par(1)</span>
-<a name="l00099"></a>00099 <span class="comment">*   2) calculates the partial derivatives for a 2d Gaussian function with</span>
-<a name="l00100"></a>00100 <span class="comment">*      parameters parlist at position xdat </span>
-<a name="l00101"></a>00101 <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span>
-<a name="l00102"></a>00102 <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span>
-<a name="l00103"></a>00103 <span class="comment">*      Numerische Mathematik, 1. Teil.</span>
-<a name="l00104"></a>00104 <span class="comment">*   4) builds the sinfo_matrix </span>
-<a name="l00105"></a>00105 <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span>
-<a name="l00106"></a>00106 <span class="comment">*      built by get_mat(), we only have to rescale it for the </span>
-<a name="l00107"></a>00107 <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span>
-<a name="l00108"></a>00108 <span class="comment">*      the diagonal gets the value 1 + labda.</span>
-<a name="l00109"></a>00109 <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span>
-<a name="l00110"></a>00110 <span class="comment">*      the correction sinfo_vector.</span>
-<a name="l00111"></a>00111 <span class="comment">*   6) this is a routine for making a least-squares fit of a</span>
-<a name="l00112"></a>00112 <span class="comment">*      function to a set of data points. The method used is</span>
-<a name="l00113"></a>00113 <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span>
-<a name="l00114"></a>00114 <span class="comment">*      This method is a mixture of the steepest descent method </span>
-<a name="l00115"></a>00115 <span class="comment">*      and the Taylor method.</span>
-<a name="l00116"></a>00116 <span class="comment">*   7) fits the image of a point source by using a 2-D Gaussian</span>
-<a name="l00117"></a>00117 <span class="comment">*      fit.</span>
-<a name="l00118"></a>00118 <span class="comment">*   8) plots an image of a given 2D-Gaussian </span>
-<a name="l00119"></a>00119 <span class="comment">*   9) converts gauss parameters to ellipse parameters. </span>
-<a name="l00120"></a>00120 <span class="comment">*  10) determines an intensity conversion factor for the instrument</span>
-<a name="l00121"></a>00121 <span class="comment">*      by fitting a 2D-Gaussian to an collapsed image of a standard star</span>
-<a name="l00122"></a>00122 <span class="comment">*      with known brightness (only for non-AO observations).</span>
-<a name="l00123"></a>00123 <span class="comment">*      Then the resulting Gaussian is integrated and the counts</span>
-<a name="l00124"></a>00124 <span class="comment">*      are divided by the exposure time (Fits header information) </span>
-<a name="l00125"></a>00125 <span class="comment">*</span>
-<a name="l00126"></a>00126 <span class="comment">*   FILES</span>
-<a name="l00127"></a>00127 <span class="comment">*</span>
-<a name="l00128"></a>00128 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00129"></a>00129 <span class="comment">*</span>
-<a name="l00130"></a>00130 <span class="comment">*   RETURN VALUES</span>
-<a name="l00131"></a>00131 <span class="comment">*</span>
-<a name="l00132"></a>00132 <span class="comment">*   CAUTIONS</span>
-<a name="l00133"></a>00133 <span class="comment">*</span>
-<a name="l00134"></a>00134 <span class="comment">*   EXAMPLES</span>
-<a name="l00135"></a>00135 <span class="comment">*</span>
-<a name="l00136"></a>00136 <span class="comment">*   SEE ALSO</span>
-<a name="l00137"></a>00137 <span class="comment">*</span>
-<a name="l00138"></a>00138 <span class="comment">*   BUGS</span>
-<a name="l00139"></a>00139 <span class="comment">*</span>
-<a name="l00140"></a>00140 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00141"></a>00141 <span class="comment">*/</span>
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00145"></a>00145 <span class="preprocessor">#endif</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="comment">/*</span>
-<a name="l00149"></a>00149 <span class="comment"> * System Headers</span>
-<a name="l00150"></a>00150 <span class="comment"> */</span>
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="comment">/*</span>
-<a name="l00153"></a>00153 <span class="comment"> * Local Headers</span>
-<a name="l00154"></a>00154 <span class="comment"> */</span>
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="preprocessor">#include "sinfo_focus.h"</span>
-<a name="l00157"></a>00157 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00158"></a>00158 <span class="preprocessor">#include <float.h></span>
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00161"></a>00161 <span class="comment"> *                                 Defines</span>
-<a name="l00162"></a>00162 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="preprocessor">#define XDIMG          2         </span><span class="comment">/* dimension of the x values */</span>
-<a name="l00165"></a>00165 <span class="preprocessor">#define TOLG           0.001     </span><span class="comment">/* fitting tolerance */</span>
-<a name="l00166"></a>00166 <span class="preprocessor">#define LABG           0.1       </span><span class="comment">/* labda parameter */</span>
-<a name="l00167"></a>00167 <span class="preprocessor">#define ITSG           200       </span><span class="comment">/* maximum number of iterations */</span>
-<a name="l00168"></a>00168 <span class="preprocessor">#define LABFACG        10.0      </span><span class="comment">/* labda step factor */</span>
-<a name="l00169"></a>00169 <span class="preprocessor">#define LABMAXG        1.0e+10   </span><span class="comment">/* maximum value for labda */</span>
-<a name="l00170"></a>00170 <span class="preprocessor">#define LABMING        1.0e-10   </span><span class="comment">/* minimum value for labda */</span>
-<a name="l00171"></a>00171 <span class="preprocessor">#define NPAR           7         </span><span class="comment">/* number of fit parameters */</span>
-<a name="l00172"></a>00172 <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span>
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00176"></a>00176 <span class="comment"> *                                    Local variables</span>
-<a name="l00177"></a>00177 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span>
-<a name="l00180"></a>00180 <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span>
-<a name="l00181"></a>00181 <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span>
-<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span>
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span>
-<a name="l00184"></a>00184 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span>
-<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span>
-<a name="l00186"></a>00186 <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00189"></a>00189 <span class="comment"> *                    Functions private to this module</span>
-<a name="l00190"></a>00190 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>) ;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">double</span> * xdat,
-<a name="l00195"></a>00195                       <span class="keywordtype">int</span>    * xdim,
-<a name="l00196"></a>00196                       <span class="keywordtype">double</span> * ydat,
-<a name="l00197"></a>00197                       <span class="keywordtype">double</span> * wdat,
-<a name="l00198"></a>00198                       <span class="keywordtype">int</span>    * ndat,
-<a name="l00199"></a>00199                       <span class="keywordtype">double</span> * fpar,
-<a name="l00200"></a>00200                       <span class="keywordtype">double</span> * epar<span class="comment">/*,</span>
-<a name="l00201"></a>00201 <span class="comment">                      int    * npar */</span>) ;
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">double</span> * xdat,
-<a name="l00204"></a>00204                      <span class="keywordtype">int</span>    * xdim,
-<a name="l00205"></a>00205                      <span class="keywordtype">double</span> * ydat,
-<a name="l00206"></a>00206                      <span class="keywordtype">double</span> * wdat,
-<a name="l00207"></a>00207                      <span class="keywordtype">int</span>    * ndat,
-<a name="l00208"></a>00208                      <span class="keywordtype">double</span> * fpar,
-<a name="l00209"></a>00209                      <span class="keywordtype">double</span> * epar,
-<a name="l00210"></a>00210                      <span class="keywordtype">int</span>    * npar ) ;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="keyword">static</span> <span class="keywordtype">int</span> new_gauss2Ellipse ( <span class="keywordtype">double</span>  * parlist ) ;
-<a name="l00221"></a>00221 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00222"></a>00222 <span class="comment"> *                            Function codes</span>
-<a name="l00223"></a>00223 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00249"></a>00249 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="keywordtype">double</span> sinfo_new_gaussian_ellipse(<span class="keywordtype">double</span> * xdat, <span class="keywordtype">double</span> * parlist)
-<a name="l00252"></a>00252 {
-<a name="l00253"></a>00253     <span class="keywordtype">double</span>  result ;
-<a name="l00254"></a>00254     <span class="keywordtype">double</span> x ;
-<a name="l00255"></a>00255     <span class="keywordtype">double</span> y ;
-<a name="l00256"></a>00256     <span class="keywordtype">double</span> fwhmx ;
-<a name="l00257"></a>00257     <span class="keywordtype">double</span> fwhmy ;
-<a name="l00258"></a>00258     <span class="keywordtype">double</span> costheta ;
-<a name="l00259"></a>00259     <span class="keywordtype">double</span> sintheta ;
-<a name="l00260"></a>00260     <span class="keywordtype">double</span> argX ;           <span class="comment">/* arguments in the exponent */</span>
-<a name="l00261"></a>00261     <span class="keywordtype">double</span> argY ;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="comment">/* some abbreviations */</span>
-<a name="l00264"></a>00264     x =  xdat[0] -  parlist[0] ;
-<a name="l00265"></a>00265     y =  xdat[1] -  parlist[1] ;
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     fwhmx = fabs(parlist[4]) ;
-<a name="l00268"></a>00268     fwhmy = fabs(parlist[5]) ;
-<a name="l00269"></a>00269     
-<a name="l00270"></a>00270     costheta = cos ( parlist[6] ) ;
-<a name="l00271"></a>00271     sintheta = sin ( parlist[6] ) ;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     argX = x * costheta + y * sintheta ;
-<a name="l00274"></a>00274     argY = -x * sintheta + y * costheta ;
-<a name="l00275"></a>00275     
-<a name="l00276"></a>00276     <span class="comment">/* function */</span>
-<a name="l00277"></a>00277     result =  parlist[2] * exp(-4.*log(2.0)*((argX/fwhmx)*(argX/fwhmx)+
-<a name="l00278"></a>00278                                              (argY/fwhmy)*(argY/fwhmy))) +
-<a name="l00279"></a>00279               parlist[3] ; 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> result ;
-<a name="l00282"></a>00282 }
-<a name="l00283"></a>00283 
-<a name="l00308"></a>00308 <span class="keywordtype">void</span> 
-<a name="l00309"></a>00309 sinfo_new_gaussian_ellipse_deriv(<span class="keywordtype">double</span> * xdat, 
-<a name="l00310"></a>00310                                  <span class="keywordtype">double</span> * parlist, 
-<a name="l00311"></a>00311                                  <span class="keywordtype">double</span> * dervs )
-<a name="l00312"></a>00312 {
-<a name="l00313"></a>00313     <span class="keywordtype">double</span> x ;
-<a name="l00314"></a>00314     <span class="keywordtype">double</span> y ;
-<a name="l00315"></a>00315     <span class="keywordtype">double</span> fwhmx ;
-<a name="l00316"></a>00316     <span class="keywordtype">double</span> fwhmy ;
-<a name="l00317"></a>00317     <span class="keywordtype">double</span> argX ;
-<a name="l00318"></a>00318     <span class="keywordtype">double</span> argY ;
-<a name="l00319"></a>00319     <span class="keywordtype">double</span> expon ;
-<a name="l00320"></a>00320     <span class="keywordtype">double</span> e8log2 ;
-<a name="l00321"></a>00321     <span class="keywordtype">double</span> fwx2 ;
-<a name="l00322"></a>00322     <span class="keywordtype">double</span> fwy2 ;
-<a name="l00323"></a>00323     <span class="keywordtype">double</span> costheta ;
-<a name="l00324"></a>00324     <span class="keywordtype">double</span> sintheta ;
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326     <span class="comment">/* some abbreviations */</span>
-<a name="l00327"></a>00327     x = xdat[0] - parlist[0] ;
-<a name="l00328"></a>00328     y = xdat[1] - parlist[1] ;
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     fwhmx = fabs(parlist[4]) ;
-<a name="l00331"></a>00331     fwhmy = fabs(parlist[5]) ;
-<a name="l00332"></a>00332     fwx2 = fwhmx * fwhmx ;
-<a name="l00333"></a>00333     fwy2 = fwhmy * fwhmy ;
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     costheta = cos ( parlist[6] ) ;
-<a name="l00336"></a>00336     sintheta = sin ( parlist[6] ) ;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338     argX = x * costheta + y * sintheta ;
-<a name="l00339"></a>00339     argY = -x * sintheta + y * costheta ;
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     expon = exp ( -4.0 * log(2.0) * ((argX/fwhmx)*(argX/fwhmx) + 
-<a name="l00342"></a>00342                                      (argY/fwhmy)*(argY/fwhmy)) ) ;
-<a name="l00343"></a>00343     e8log2 = expon * 8.0 * log(2.0) ;
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="comment">/* determine the derivatives */</span>
-<a name="l00346"></a>00346     <span class="comment">/* partial derivative x-position */</span>
-<a name="l00347"></a>00347     dervs[0] = -parlist[2]*e8log2 * (-argX*costheta/fwx2 + argY*sintheta/fwy2);
-<a name="l00348"></a>00348     <span class="comment">/* partial derivative y-position */</span>
-<a name="l00349"></a>00349     dervs[1] = -parlist[2]*e8log2 * (-argX*sintheta/fwx2 - argY*costheta/fwy2);
-<a name="l00350"></a>00350     <span class="comment">/* partial derivative amplitude */</span>
-<a name="l00351"></a>00351     dervs[2] = expon ;
-<a name="l00352"></a>00352     <span class="comment">/* partial derivative background */</span>
-<a name="l00353"></a>00353     dervs[3] = 1. ;
-<a name="l00354"></a>00354     <span class="comment">/* partial derivative fwhmx */</span>
-<a name="l00355"></a>00355     dervs[4] = parlist[2]*e8log2 * argX*argX/(fwx2*fwhmx) ;
-<a name="l00356"></a>00356     <span class="comment">/* partial derivative fwhmy */</span>
-<a name="l00357"></a>00357     dervs[5] = parlist[2]*e8log2 * argY*argY/(fwy2*fwhmy) ;
-<a name="l00358"></a>00358     <span class="comment">/* partial derivative theta */</span>
-<a name="l00359"></a>00359     dervs[6] = -parlist[2]*e8log2 * argY * argX * (1.0/fwx2 - 1.0/fwy2) ;
-<a name="l00360"></a>00360     
-<a name="l00361"></a>00361 }
-<a name="l00362"></a>00362 
-<a name="l00373"></a>00373 <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>)
-<a name="l00374"></a>00374 {
-<a name="l00375"></a>00375     <span class="keywordtype">double</span> even ;
-<a name="l00376"></a>00376     <span class="keywordtype">double</span> hv[NPAR] ;
-<a name="l00377"></a>00377     <span class="keywordtype">double</span> mjk ;
-<a name="l00378"></a>00378     <span class="keywordtype">double</span> rowmax ;
-<a name="l00379"></a>00379     <span class="keywordtype">int</span> evin ;
-<a name="l00380"></a>00380     <span class="keywordtype">int</span> i, j, k, row ;
-<a name="l00381"></a>00381     <span class="keywordtype">int</span> per[NPAR] ;
-<a name="l00382"></a>00382    
-<a name="l00383"></a>00383     <span class="comment">/* set permutation array */</span>
-<a name="l00384"></a>00384     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00385"></a>00385     {
-<a name="l00386"></a>00386         per[i] = i ;
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388     
-<a name="l00389"></a>00389     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span>
-<a name="l00390"></a>00390     {
-<a name="l00391"></a>00391         <span class="comment">/* determine largest element of a row */</span>                                
-<a name="l00392"></a>00392         rowmax = fabs ( matrix2[j][j] ) ;
-<a name="l00393"></a>00393         row = j ;                         
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00396"></a>00396         {
-<a name="l00397"></a>00397             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )
-<a name="l00398"></a>00398             {
-<a name="l00399"></a>00399                 rowmax = fabs( matrix2[i][j] ) ;
-<a name="l00400"></a>00400                 row = i ;
-<a name="l00401"></a>00401             }
-<a name="l00402"></a>00402         }
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404         <span class="comment">/* determinant is zero! */</span>
-<a name="l00405"></a>00405         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )
-<a name="l00406"></a>00406         {
-<a name="l00407"></a>00407             <span class="keywordflow">return</span> -6 ;
-<a name="l00408"></a>00408         }
-<a name="l00409"></a>00409         
-<a name="l00410"></a>00410         <span class="comment">/* if the largest element is not on the diagonal, </span>
-<a name="l00411"></a>00411 <span class="comment">           then permutate rows */</span>
-<a name="l00412"></a>00412         <span class="keywordflow">if</span> ( row > j )
-<a name="l00413"></a>00413         {
-<a name="l00414"></a>00414             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00415"></a>00415             {
-<a name="l00416"></a>00416                 even = matrix2[j][k] ;
-<a name="l00417"></a>00417                 matrix2[j][k] = matrix2[row][k] ;
-<a name="l00418"></a>00418                 matrix2[row][k] = even ;
-<a name="l00419"></a>00419             }
-<a name="l00420"></a>00420             <span class="comment">/* keep track of permutation */</span>
-<a name="l00421"></a>00421             evin = per[j] ;
-<a name="l00422"></a>00422             per[j] = per[row] ;
-<a name="l00423"></a>00423             per[row] = evin ;
-<a name="l00424"></a>00424         }
-<a name="l00425"></a>00425         
-<a name="l00426"></a>00426         <span class="comment">/* modify column */</span>
-<a name="l00427"></a>00427         even = 1.0 / matrix2[j][j] ;
-<a name="l00428"></a>00428         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00429"></a>00429         {
-<a name="l00430"></a>00430             matrix2[i][j] *= even ;
-<a name="l00431"></a>00431         }
-<a name="l00432"></a>00432         matrix2[j][j] = even ;
-<a name="l00433"></a>00433         
-<a name="l00434"></a>00434         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )
-<a name="l00435"></a>00435         {
-<a name="l00436"></a>00436             mjk = matrix2[j][k] ;
-<a name="l00437"></a>00437             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00438"></a>00438             {
-<a name="l00439"></a>00439                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00440"></a>00440             }
-<a name="l00441"></a>00441             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00442"></a>00442             {
-<a name="l00443"></a>00443                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l00444"></a>00444             }
-<a name="l00445"></a>00445             matrix2[j][k] = -even * mjk ;
-<a name="l00446"></a>00446         }
-<a name="l00447"></a>00447     
-<a name="l00448"></a>00448         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )
-<a name="l00449"></a>00449         {
-<a name="l00450"></a>00450             mjk = matrix2[j][k] ;
-<a name="l00451"></a>00451             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00452"></a>00452             {
-<a name="l00453"></a>00453                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00454"></a>00454             }
-<a name="l00455"></a>00455             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l00456"></a>00456             {
-<a name="l00457"></a>00457                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l00458"></a>00458             }
-<a name="l00459"></a>00459             matrix2[j][k] = -even * mjk ;
-<a name="l00460"></a>00460         }
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462     
-<a name="l00463"></a>00463     <span class="comment">/* finally, repermute the columns */</span>
-<a name="l00464"></a>00464     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00465"></a>00465     {
-<a name="l00466"></a>00466         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00467"></a>00467         {
-<a name="l00468"></a>00468             hv[per[k]] = matrix2[i][k] ;
-<a name="l00469"></a>00469         }
-<a name="l00470"></a>00470         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l00471"></a>00471         {
-<a name="l00472"></a>00472             matrix2[i][k] = hv[k] ;
-<a name="l00473"></a>00473         }
-<a name="l00474"></a>00474     }
-<a name="l00475"></a>00475         
-<a name="l00476"></a>00476     <span class="comment">/* all is well */</span>
-<a name="l00477"></a>00477     <span class="keywordflow">return</span> 0 ;
-<a name="l00478"></a>00478 }
-<a name="l00479"></a>00479     
-<a name="l00495"></a>00495 <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">double</span> * xdat,
-<a name="l00496"></a>00496                       <span class="keywordtype">int</span>    * xdim,
-<a name="l00497"></a>00497                       <span class="keywordtype">double</span> * ydat,
-<a name="l00498"></a>00498                       <span class="keywordtype">double</span> * wdat,
-<a name="l00499"></a>00499                       <span class="keywordtype">int</span>    * ndat,
-<a name="l00500"></a>00500                       <span class="keywordtype">double</span> * fpar,
-<a name="l00501"></a>00501                       <span class="keywordtype">double</span> * epar<span class="comment">/*,</span>
-<a name="l00502"></a>00502 <span class="comment">                      int    * npar */</span>)
-<a name="l00503"></a>00503 {
-<a name="l00504"></a>00504     <span class="keywordtype">double</span> wd ;
-<a name="l00505"></a>00505     <span class="keywordtype">double</span> wn ;
-<a name="l00506"></a>00506     <span class="keywordtype">double</span> yd ;
-<a name="l00507"></a>00507     <span class="keywordtype">int</span> i, j, n ;
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00510"></a>00510     {
-<a name="l00511"></a>00511         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span>
-<a name="l00512"></a>00512         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   <span class="comment">/* zero sinfo_matrix only on </span>
-<a name="l00513"></a>00513 <span class="comment">                                         and below diagonal */</span>
-<a name="l00514"></a>00514         {
-<a name="l00515"></a>00515             matrix1[j][i] = 0.0 ;
-<a name="l00516"></a>00516         }
-<a name="l00517"></a>00517     }
-<a name="l00518"></a>00518     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00519"></a>00519     
-<a name="l00520"></a>00520     <span class="comment">/* loop through data points */</span>
-<a name="l00521"></a>00521     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00522"></a>00522     {
-<a name="l00523"></a>00523         wn = wdat[n] ;
-<a name="l00524"></a>00524         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span>
-<a name="l00525"></a>00525         {
-<a name="l00526"></a>00526             yd=ydat[n] - sinfo_new_gaussian_ellipse(&xdat[(*xdim) * n],fpar) ;
-<a name="l00527"></a>00527             sinfo_new_gaussian_ellipse_deriv( &xdat[(*xdim) * n], fpar, epar ) ;
-<a name="l00528"></a>00528             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span>
-<a name="l00529"></a>00529             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00530"></a>00530             {
-<a name="l00531"></a>00531                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span>
-<a name="l00532"></a>00532                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span>
-<a name="l00533"></a>00533                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span>
-<a name="l00534"></a>00534                 {
-<a name="l00535"></a>00535                     matrix1[j][i] += epar[parptr[i]] * wd ;
-<a name="l00536"></a>00536                 }
-<a name="l00537"></a>00537             }
-<a name="l00538"></a>00538         }
-<a name="l00539"></a>00539     }                   
-<a name="l00540"></a>00540 }  
-<a name="l00541"></a>00541                 
-<a name="l00542"></a>00542             
-<a name="l00568"></a>00568 <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">double</span> * xdat,
-<a name="l00569"></a>00569                      <span class="keywordtype">int</span>    * xdim,
-<a name="l00570"></a>00570                      <span class="keywordtype">double</span> * ydat,
-<a name="l00571"></a>00571                      <span class="keywordtype">double</span> * wdat,
-<a name="l00572"></a>00572                      <span class="keywordtype">int</span>    * ndat,
-<a name="l00573"></a>00573                      <span class="keywordtype">double</span> * fpar,
-<a name="l00574"></a>00574                      <span class="keywordtype">double</span> * epar,
-<a name="l00575"></a>00575                      <span class="keywordtype">int</span>    * npar )
-<a name="l00576"></a>00576 {
-<a name="l00577"></a>00577     <span class="keywordtype">double</span> dj ;
-<a name="l00578"></a>00578     <span class="keywordtype">double</span> dy ;
-<a name="l00579"></a>00579     <span class="keywordtype">double</span> mii ;
-<a name="l00580"></a>00580     <span class="keywordtype">double</span> mji ;
-<a name="l00581"></a>00581     <span class="keywordtype">double</span> mjj ;
-<a name="l00582"></a>00582     <span class="keywordtype">double</span> wn ;
-<a name="l00583"></a>00583     <span class="keywordtype">int</span> i, j, n, r ;
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span>
-<a name="l00586"></a>00586     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00587"></a>00587     {
-<a name="l00588"></a>00588         mjj = matrix1[j][j] ;
-<a name="l00589"></a>00589         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span>
-<a name="l00590"></a>00590         {
-<a name="l00591"></a>00591             <span class="keywordflow">return</span> -5 ;
-<a name="l00592"></a>00592         }
-<a name="l00593"></a>00593         mjj = sqrt( mjj ) ;
-<a name="l00594"></a>00594         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00595"></a>00595         {
-<a name="l00596"></a>00596             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;
-<a name="l00597"></a>00597             matrix2[i][j] = matrix2[j][i] = mji ;
-<a name="l00598"></a>00598         }
-<a name="l00599"></a>00599         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span>
-<a name="l00600"></a>00600     }    
-<a name="l00601"></a>00601     
-<a name="l00602"></a>00602     <span class="keywordflow">if</span> ( (r = new_inv_mat()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span>
-<a name="l00603"></a>00603     {
-<a name="l00604"></a>00604         <span class="keywordflow">return</span> r ;
-<a name="l00605"></a>00605     }
-<a name="l00606"></a>00606     
-<a name="l00607"></a>00607     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )
-<a name="l00608"></a>00608     {
-<a name="l00609"></a>00609         epar[i] = fpar[i] ;
-<a name="l00610"></a>00610     }
-<a name="l00611"></a>00611     
-<a name="l00612"></a>00612     <span class="comment">/* loop to calculate correction sinfo_vector */</span>
-<a name="l00613"></a>00613     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00614"></a>00614     {
-<a name="l00615"></a>00615         dj = 0.0 ;
-<a name="l00616"></a>00616         mjj = matrix1[j][j] ;
-<a name="l00617"></a>00617         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span>
-<a name="l00618"></a>00618         {
-<a name="l00619"></a>00619             <span class="keywordflow">return</span> -7 ;
-<a name="l00620"></a>00620         }
-<a name="l00621"></a>00621         mjj = sqrt ( mjj ) ;
-<a name="l00622"></a>00622         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00623"></a>00623         {
-<a name="l00624"></a>00624             mii = matrix1[i][i] ;
-<a name="l00625"></a>00625             <span class="keywordflow">if</span> ( mii <= 0.0 )
-<a name="l00626"></a>00626             {
-<a name="l00627"></a>00627                 <span class="keywordflow">return</span> -7 ;
-<a name="l00628"></a>00628             }
-<a name="l00629"></a>00629             mii = sqrt( mii ) ;
-<a name="l00630"></a>00630             dj += vec[i] * matrix2[j][i] / mjj / mii ;
-<a name="l00631"></a>00631         }
-<a name="l00632"></a>00632         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span>
-<a name="l00633"></a>00633     }    
-<a name="l00634"></a>00634     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l00635"></a>00635  
-<a name="l00636"></a>00636     <span class="comment">/* loop through the data points */</span>
-<a name="l00637"></a>00637     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00638"></a>00638     {
-<a name="l00639"></a>00639         wn = wdat[n] ;               <span class="comment">/* get weight */</span>
-<a name="l00640"></a>00640         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00641"></a>00641         {
-<a name="l00642"></a>00642             dy=ydat[n] - sinfo_new_gaussian_ellipse(&xdat[(*xdim) * n],epar);
-<a name="l00643"></a>00643             chi1 += wdat[n] * dy * dy ;
-<a name="l00644"></a>00644         }
-<a name="l00645"></a>00645     }
-<a name="l00646"></a>00646     <span class="keywordflow">return</span> 0 ;
-<a name="l00647"></a>00647 }   
-<a name="l00648"></a>00648     
-<a name="l00649"></a>00649         
-<a name="l00650"></a>00650 
-<a name="l00698"></a>00698 <span class="keywordtype">int</span> sinfo_new_lsqfitd ( <span class="keywordtype">double</span> * xdat,
-<a name="l00699"></a>00699               <span class="keywordtype">int</span>    * xdim,
-<a name="l00700"></a>00700               <span class="keywordtype">double</span> * ydat,
-<a name="l00701"></a>00701               <span class="keywordtype">double</span> * wdat,
-<a name="l00702"></a>00702               <span class="keywordtype">int</span>    * ndat,
-<a name="l00703"></a>00703               <span class="keywordtype">double</span> * fpar,
-<a name="l00704"></a>00704               <span class="keywordtype">double</span> * epar,
-<a name="l00705"></a>00705               <span class="keywordtype">int</span>    * mpar,
-<a name="l00706"></a>00706               <span class="keywordtype">int</span>    * npar,
-<a name="l00707"></a>00707               <span class="keywordtype">double</span> * tol ,
-<a name="l00708"></a>00708               <span class="keywordtype">int</span>    * its ,
-<a name="l00709"></a>00709               <span class="keywordtype">double</span> * lab  )
-<a name="l00710"></a>00710 {
-<a name="l00711"></a>00711     <span class="keywordtype">int</span> i, n, r ;
-<a name="l00712"></a>00712     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span>
-<a name="l00713"></a>00713     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span>
-<a name="l00714"></a>00714     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span>
-<a name="l00715"></a>00715     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span>
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717     itc   = 0 ;                    <span class="comment">/* fate of fit */</span>
-<a name="l00718"></a>00718     found = 0 ;                    <span class="comment">/* reset */</span>
-<a name="l00719"></a>00719     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span>
-<a name="l00720"></a>00720     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span>
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722     <span class="keywordflow">if</span> ( *tol < (DBL_EPSILON * 10.0 ) )
-<a name="l00723"></a>00723     {
-<a name="l00724"></a>00724         tolerance = DBL_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span>
-<a name="l00725"></a>00725     }
-<a name="l00726"></a>00726     <span class="keywordflow">else</span>
-<a name="l00727"></a>00727     {
-<a name="l00728"></a>00728         tolerance = *tol ;                <span class="comment">/* tolerance */</span>
-<a name="l00729"></a>00729     }
-<a name="l00730"></a>00730     
-<a name="l00731"></a>00731     labda = fabs( *lab ) * LABFACG ; <span class="comment">/* start value for mixing parameter */</span>
-<a name="l00732"></a>00732     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00733"></a>00733     {
-<a name="l00734"></a>00734         <span class="keywordflow">if</span> ( mpar[i] )
-<a name="l00735"></a>00735         {
-<a name="l00736"></a>00736             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span>
-<a name="l00737"></a>00737             {
-<a name="l00738"></a>00738                 <span class="keywordflow">return</span> -1 ;
-<a name="l00739"></a>00739             }
-<a name="l00740"></a>00740             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span>
-<a name="l00741"></a>00741         }
-<a name="l00742"></a>00742     }
-<a name="l00743"></a>00743     
-<a name="l00744"></a>00744     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     
-<a name="l00745"></a>00745     {
-<a name="l00746"></a>00746         <span class="keywordflow">return</span> -2 ;
-<a name="l00747"></a>00747     }
-<a name="l00748"></a>00748     
-<a name="l00749"></a>00749     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00750"></a>00750     {
-<a name="l00751"></a>00751         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00752"></a>00752         {
-<a name="l00753"></a>00753             nuse ++ ;
-<a name="l00754"></a>00754         }
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756     
-<a name="l00757"></a>00757     <span class="keywordflow">if</span> ( nfree >= nuse )
-<a name="l00758"></a>00758     {
-<a name="l00759"></a>00759         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span>
-<a name="l00760"></a>00760     }
-<a name="l00761"></a>00761     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span>
-<a name="l00762"></a>00762     {
-<a name="l00763"></a>00763         <span class="comment">/* initialize fpar array */</span>
-<a name="l00764"></a>00764         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  
-<a name="l00765"></a>00765         new_get_mat ( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar */</span>) ;
-<a name="l00766"></a>00766         r =  new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;
-<a name="l00767"></a>00767         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span>
-<a name="l00768"></a>00768         {
-<a name="l00769"></a>00769             <span class="keywordflow">return</span> r ;
-<a name="l00770"></a>00770         }
-<a name="l00771"></a>00771         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00772"></a>00772         {
-<a name="l00773"></a>00773             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span>
-<a name="l00774"></a>00774             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span>
-<a name="l00775"></a>00775         }
-<a name="l00776"></a>00776         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00777"></a>00777         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00778"></a>00778         {
-<a name="l00779"></a>00779             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )
-<a name="l00780"></a>00780             {
-<a name="l00781"></a>00781                 <span class="keywordflow">return</span> -7 ;
-<a name="l00782"></a>00782             }
-<a name="l00783"></a>00783             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / 
-<a name="l00784"></a>00784                                      sqrt( matrix1[i][i] ) ;
-<a name="l00785"></a>00785         }
-<a name="l00786"></a>00786     }
-<a name="l00787"></a>00787     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span>
-<a name="l00788"></a>00788     {
-<a name="l00789"></a>00789         <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l00790"></a>00790 <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span>
-<a name="l00791"></a>00791 <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span>
-<a name="l00792"></a>00792 <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span>
-<a name="l00793"></a>00793 <span class="comment">         * the matrix and calculate the correction sinfo_vector. In the </span>
-<a name="l00794"></a>00794 <span class="comment">           inner loop</span>
-<a name="l00795"></a>00795 <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span>
-<a name="l00796"></a>00796 <span class="comment">         * better solution than the previous one. If so, we leave the inner loop</span>
-<a name="l00797"></a>00797 <span class="comment">         * else we increase lambda ( give more weight to the steepest descent </span>
-<a name="l00798"></a>00798 <span class="comment">         * method) calculate the correction vector and check again. After the </span>
-<a name="l00799"></a>00799 <span class="comment">         * inner loop</span>
-<a name="l00800"></a>00800 <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span>
-<a name="l00801"></a>00801 <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span>
-<a name="l00802"></a>00802 <span class="comment">         */</span>
-<a name="l00803"></a>00803         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span>
-<a name="l00804"></a>00804         {      
-<a name="l00805"></a>00805             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span>
-<a name="l00806"></a>00806             {
-<a name="l00807"></a>00807                 <span class="keywordflow">return</span> -4 ;               
-<a name="l00808"></a>00808             }
-<a name="l00809"></a>00809             new_get_mat( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l00810"></a>00810             
-<a name="l00811"></a>00811             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l00812"></a>00812 <span class="comment">             * here we decrease labda since we may assume that each iteration</span>
-<a name="l00813"></a>00813 <span class="comment">             * brings us closer to the answer.</span>
-<a name="l00814"></a>00814 <span class="comment">             */</span>
-<a name="l00815"></a>00815             <span class="keywordflow">if</span> ( labda > LABMING )
-<a name="l00816"></a>00816             {
-<a name="l00817"></a>00817                 labda = labda / LABFACG ;         <span class="comment">/* decrease labda */</span>
-<a name="l00818"></a>00818             }
-<a name="l00819"></a>00819             r = new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span>
-<a name="l00822"></a>00822             {
-<a name="l00823"></a>00823                 <span class="keywordflow">return</span> r ;
-<a name="l00824"></a>00824             }
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span>
-<a name="l00827"></a>00827             {
-<a name="l00828"></a>00828                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l00829"></a>00829 <span class="comment">                 * The next statement is based on experience, not on the </span>
-<a name="l00830"></a>00830 <span class="comment">                 * mathematics of the problem. It is assumed that we have </span>
-<a name="l00831"></a>00831 <span class="comment">                 * reached convergence when the pure steepest descent method </span>
-<a name="l00832"></a>00832 <span class="comment">                 * does not produce a better solution.</span>
-<a name="l00833"></a>00833 <span class="comment">                 */</span>
-<a name="l00834"></a>00834                 <span class="keywordflow">if</span> ( labda > LABMAXG )    <span class="comment">/* assume solution found */</span>
-<a name="l00835"></a>00835                 {
-<a name="l00836"></a>00836                     break ;
-<a name="l00837"></a>00837                 }
-<a name="l00838"></a>00838                 labda = labda * LABFACG ; <span class="comment">/* increase mixing parameter */</span>
-<a name="l00839"></a>00839                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span>
-<a name="l00842"></a>00842                 {
-<a name="l00843"></a>00843                     <span class="keywordflow">return</span> r ;
-<a name="l00844"></a>00844                 }
-<a name="l00845"></a>00845             }
-<a name="l00846"></a>00846 
-<a name="l00847"></a>00847             <span class="keywordflow">if</span> ( labda <= LABMAXG )        <span class="comment">/* save old parameters */</span>
-<a name="l00848"></a>00848             {
-<a name="l00849"></a>00849                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )
-<a name="l00850"></a>00850                 {
-<a name="l00851"></a>00851                     fpar[i] = epar[i] ;
-<a name="l00852"></a>00852                 }
-<a name="l00853"></a>00853             }
-<a name="l00854"></a>00854             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || 
-<a name="l00855"></a>00855                       (labda > LABMAXG) )
-<a name="l00856"></a>00856             {
-<a name="l00857"></a>00857                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l00858"></a>00858 <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span>
-<a name="l00859"></a>00859 <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span>
-<a name="l00860"></a>00860 <span class="comment">                 * using the pure Taylor</span>
-<a name="l00861"></a>00861 <span class="comment">                 * method because we are very close to the real solution.</span>
-<a name="l00862"></a>00862 <span class="comment">                 */</span>
-<a name="l00863"></a>00863                 labda = LABMING ;              <span class="comment">/* for Taylor solution */</span>
-<a name="l00864"></a>00864                 new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;
-<a name="l00865"></a>00865                 r=new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar ) ;
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span>
-<a name="l00868"></a>00868                 {
-<a name="l00869"></a>00869                     <span class="keywordflow">return</span> r ;
-<a name="l00870"></a>00870                 }
-<a name="l00871"></a>00871                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00872"></a>00872                 {
-<a name="l00873"></a>00873                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span>
-<a name="l00874"></a>00874                 }
-<a name="l00875"></a>00875                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00878"></a>00878                 {
-<a name="l00879"></a>00879                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )
-<a name="l00880"></a>00880                     {
-<a name="l00881"></a>00881                         <span class="keywordflow">return</span> -7 ;
-<a name="l00882"></a>00882                     }
-<a name="l00883"></a>00883                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / 
-<a name="l00884"></a>00884                                              sqrt( matrix1[i][i] ) ;
-<a name="l00885"></a>00885                 }
-<a name="l00886"></a>00886                 found = 1 ;                  <span class="comment">/* we found a solution */</span>
-<a name="l00887"></a>00887             }
-<a name="l00888"></a>00888         }
-<a name="l00889"></a>00889     }
-<a name="l00890"></a>00890     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span>
-<a name="l00891"></a>00891 }
-<a name="l00892"></a>00892 
-<a name="l00922"></a>00922 <span class="keywordtype">int</span> 
-<a name="l00923"></a>00923 sinfo_new_fit_2d_gaussian ( cpl_image   * image, 
-<a name="l00924"></a>00924                     <span class="keywordtype">double</span>     * fit_par, 
-<a name="l00925"></a>00925                     <span class="keywordtype">double</span>     * derv_par,   
-<a name="l00926"></a>00926                     <span class="keywordtype">int</span>        * mpar,
-<a name="l00927"></a>00927                     <span class="keywordtype">int</span>          lleftx,
-<a name="l00928"></a>00928                     <span class="keywordtype">int</span>          llefty,
-<a name="l00929"></a>00929                     <span class="keywordtype">int</span>          halfbox_x,
-<a name="l00930"></a>00930                     <span class="keywordtype">int</span>          halfbox_y, 
-<a name="l00931"></a>00931                     <span class="keywordtype">int</span>* check )
-<a name="l00932"></a>00932 {
-<a name="l00933"></a>00933     <span class="keywordtype">int</span> i, j, n ;
-<a name="l00934"></a>00934     <span class="keywordtype">int</span> col, row ;
-<a name="l00935"></a>00935     <span class="keywordtype">int</span> boxi, boxj ;
-<a name="l00936"></a>00936     <span class="keywordtype">int</span> iters ;
-<a name="l00937"></a>00937     <span class="keywordtype">int</span> ndata ;
-<a name="l00938"></a>00938     <span class="keywordtype">int</span> xdim ;
-<a name="l00939"></a>00939     <span class="keywordtype">int</span> npar ;
-<a name="l00940"></a>00940     <span class="keywordtype">int</span> its ;
-<a name="l00941"></a>00941     <span class="keywordtype">double</span> lab ;
-<a name="l00942"></a>00942     <span class="keywordtype">double</span> tol ;
-<a name="l00943"></a>00943     <span class="keywordtype">double</span> maxval ;
-<a name="l00944"></a>00944     <span class="keywordtype">double</span> background ;
-<a name="l00945"></a>00945     <span class="keywordtype">double</span> amplitude ;
-<a name="l00946"></a>00946     <span class="keywordtype">float</span> * backarray=NULL ;
-<a name="l00947"></a>00947     <span class="keywordtype">double</span> M, Mx, My ;
-<a name="l00948"></a>00948     <span class="keywordtype">double</span> Mxx, Mxy, Myy ; 
-<a name="l00949"></a>00949     <span class="keywordtype">double</span> X0, Y0 ;
-<a name="l00950"></a>00950     <span class="keywordtype">double</span> xydat[4 *halfbox_x*halfbox_y][XDIMG] ;
-<a name="l00951"></a>00951     <span class="keywordtype">double</span> zdat[4*halfbox_x*halfbox_y] ;
-<a name="l00952"></a>00952     <span class="keywordtype">double</span> wdat[4*halfbox_x*halfbox_y] ;
-<a name="l00953"></a>00953     <span class="keywordtype">double</span> xco, yco ;
-<a name="l00954"></a>00954     <span class="keywordtype">double</span> value ;
-<a name="l00955"></a>00955     <span class="keywordtype">double</span> denom ;
-<a name="l00956"></a>00956     <span class="keywordtype">double</span> temp ;
-<a name="l00957"></a>00957     <span class="keywordtype">int</span> llx, lly ;
-<a name="l00958"></a>00958     <span class="keywordtype">int</span> foundrow ;
-<a name="l00959"></a>00959     <span class="keywordtype">int</span> foundcol ;
-<a name="l00960"></a>00960     <span class="keywordtype">int</span> k ;
-<a name="l00961"></a>00961     <span class="keywordtype">int</span> ilx=0;
-<a name="l00962"></a>00962     <span class="keywordtype">int</span> ily=0;
-<a name="l00963"></a>00963     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     <span class="keywordflow">if</span> ( NULL == image )
-<a name="l00967"></a>00967     {
-<a name="l00968"></a>00968         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given"</span>) ;
-<a name="l00969"></a>00969         <span class="keywordflow">return</span> -1 ;
-<a name="l00970"></a>00970     }
-<a name="l00971"></a>00971     ilx=cpl_image_get_size_x(image);
-<a name="l00972"></a>00972     ily=cpl_image_get_size_y(image);
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974     <span class="keywordflow">if</span> ( NULL == fit_par )
-<a name="l00975"></a>00975     {
-<a name="l00976"></a>00976         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameters given"</span>) ;
-<a name="l00977"></a>00977         <span class="keywordflow">return</span> -1 ;
-<a name="l00978"></a>00978     }
-<a name="l00979"></a>00979     <span class="keywordflow">if</span> ( NULL == derv_par )
-<a name="l00980"></a>00980     {
-<a name="l00981"></a>00981         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no derivatives of fit parameters given"</span>) ;
-<a name="l00982"></a>00982         <span class="keywordflow">return</span> -1 ;
-<a name="l00983"></a>00983     }
-<a name="l00984"></a>00984     <span class="keywordflow">if</span> ( lleftx < 0 || lleftx + 2*halfbox_x >= ilx ||
-<a name="l00985"></a>00985          llefty < 0 || llefty + 2*halfbox_y >= ily )
-<a name="l00986"></a>00986     {
-<a name="l00987"></a>00987         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong lower left point of fitting box given!"</span>) ;
-<a name="l00988"></a>00988         <span class="keywordflow">return</span> -1 ;
-<a name="l00989"></a>00989     }
-<a name="l00990"></a>00990     <span class="keywordflow">if</span> ( halfbox_x <= 1 || halfbox_y <= 1 )
-<a name="l00991"></a>00991     {
-<a name="l00992"></a>00992         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong box dimensions given"</span>) ;
-<a name="l00993"></a>00993         <span class="keywordflow">return</span> -1 ;
-<a name="l00994"></a>00994     }
-<a name="l00995"></a>00995     <span class="comment">/* allocate memory */</span>
-<a name="l00996"></a>00996     <span class="keywordflow">if</span> ( NULL == (backarray = (<span class="keywordtype">float</span>*) cpl_calloc(4*halfbox_x+4*halfbox_y, 
-<a name="l00997"></a>00997                   <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ) ) 
-<a name="l00998"></a>00998     {
-<a name="l00999"></a>00999         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory"</span>) ;
-<a name="l01000"></a>01000         <span class="keywordflow">return</span> -1 ;
-<a name="l01001"></a>01001     }
-<a name="l01002"></a>01002 
-<a name="l01003"></a>01003     <span class="comment">/* -------------------------------------------------------------------</span>
-<a name="l01004"></a>01004 <span class="comment">     * find the initial estimates for the free parameters</span>
-<a name="l01005"></a>01005 <span class="comment">     */</span>
-<a name="l01006"></a>01006 
-<a name="l01007"></a>01007     <span class="comment">/* first search for the position of the maximum intensity */</span>
-<a name="l01008"></a>01008     foundrow = 0 ;
-<a name="l01009"></a>01009     foundcol = 0 ;
-<a name="l01010"></a>01010     maxval   = -SINFO_DBL_MAX ;
-<a name="l01011"></a>01011     pidata=cpl_image_get_data_float(image);
-<a name="l01012"></a>01012     <span class="keywordflow">for</span> ( col = lleftx ; col < lleftx + 2*halfbox_x ; col++ )
-<a name="l01013"></a>01013     {
-<a name="l01014"></a>01014         <span class="keywordflow">for</span> ( row = llefty ; row < llefty + 2*halfbox_y ; row++ )
-<a name="l01015"></a>01015         {
-<a name="l01016"></a>01016             <span class="keywordflow">if</span> ( isnan(pidata[col+row*ilx]) )
-<a name="l01017"></a>01017             {
-<a name="l01018"></a>01018                 continue ;
-<a name="l01019"></a>01019             }
-<a name="l01020"></a>01020             <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] ) 
-<a name="l01021"></a>01021             {
-<a name="l01022"></a>01022                 maxval = pidata[col+row*ilx] ;
-<a name="l01023"></a>01023                 foundrow = row ;
-<a name="l01024"></a>01024                 foundcol = col ;
-<a name="l01025"></a>01025             }
-<a name="l01026"></a>01026         }
-<a name="l01027"></a>01027     }
-<a name="l01028"></a>01028 
-<a name="l01029"></a>01029     <span class="keywordflow">if</span> ( foundrow == 0 || foundcol == 0 || maxval <= 0. ||
-<a name="l01030"></a>01030          foundrow == ilx-1 || foundcol == ily-1 )
-<a name="l01031"></a>01031     {
-<a name="l01032"></a>01032         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no maximum found"</span>) ;
-<a name="l01033"></a>01033         cpl_free(backarray) ;
-<a name="l01034"></a>01034         <span class="keywordflow">return</span> -1 ;
-<a name="l01035"></a>01035     }
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037     <span class="comment">/* determine the lower left sinfo_edge of the fitting box, center it </span>
-<a name="l01038"></a>01038 <span class="comment">       on the maximum value */</span>
-<a name="l01039"></a>01039     llx = foundcol - halfbox_x ;
-<a name="l01040"></a>01040     lly = foundrow - halfbox_y ;
-<a name="l01041"></a>01041     <span class="keywordflow">if</span> ((foundcol - halfbox_x) > 0) {
-<a name="l01042"></a>01042       llx = (foundcol - halfbox_x);
-<a name="l01043"></a>01043     } <span class="keywordflow">else</span> {
-<a name="l01044"></a>01044       llx=1;
-<a name="l01045"></a>01045       check++;
-<a name="l01046"></a>01046     }
-<a name="l01047"></a>01047 
-<a name="l01048"></a>01048     <span class="keywordflow">if</span> ((foundrow - halfbox_y) > 0) {
-<a name="l01049"></a>01049       lly = (foundrow - halfbox_y);
-<a name="l01050"></a>01050     } <span class="keywordflow">else</span> {
-<a name="l01051"></a>01051       lly=1;
-<a name="l01052"></a>01052       check++;
-<a name="l01053"></a>01053     } 
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055     <span class="keywordflow">if</span> ( ( llx + 2*halfbox_x) <  ilx-1 ) {
-<a name="l01056"></a>01056        <span class="comment">//halfbox_x=halfbox_x;</span>
-<a name="l01057"></a>01057     } <span class="keywordflow">else</span> {
-<a name="l01058"></a>01058        halfbox_x=(int) (ilx-2-llx)/2;
-<a name="l01059"></a>01059       check++;
-<a name="l01060"></a>01060     }
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062     <span class="keywordflow">if</span> ( ( lly + 2*halfbox_y) <  ily-1 ) {
-<a name="l01063"></a>01063        <span class="comment">//halfbox_y= halfbox_y;</span>
-<a name="l01064"></a>01064     } <span class="keywordflow">else</span> {
-<a name="l01065"></a>01065       halfbox_y=(int) (ily-2-lly)/2;
-<a name="l01066"></a>01066       check++;
-<a name="l01067"></a>01067     }
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069     <span class="keywordflow">if</span> ( llx <= 0 || lly < 0 || llx + 2*halfbox_x >= ilx-1 ||
-<a name="l01070"></a>01070          lly + 2*halfbox_y >= ily )
-<a name="l01071"></a>01071     {
-<a name="l01072"></a>01072         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"box does not fit into image"</span>) ;
-<a name="l01073"></a>01073         cpl_free(backarray) ;
-<a name="l01074"></a>01074         <span class="keywordflow">return</span> -1 ;
-<a name="l01075"></a>01075     }
-<a name="l01076"></a>01076     
-<a name="l01077"></a>01077     <span class="comment">/* determine the zeroth and first order moments of the image  </span>
-<a name="l01078"></a>01078 <span class="comment">       within the fitting box */</span> 
-<a name="l01079"></a>01079     M = Mx = My = 0. ;
-<a name="l01080"></a>01080     n = 0 ;
-<a name="l01081"></a>01081     boxi = boxj = 0 ;
-<a name="l01082"></a>01082     <span class="keywordflow">for</span> ( j = lly ; j < lly + 2*halfbox_y ; j++ )
-<a name="l01083"></a>01083     {
-<a name="l01084"></a>01084         boxj = j - lly ;
-<a name="l01085"></a>01085         <span class="keywordflow">for</span> ( i = llx ; i < llx + 2*halfbox_x ; i++ )
-<a name="l01086"></a>01086         {
-<a name="l01087"></a>01087             boxi = i - llx ;
-<a name="l01088"></a>01088             <span class="keywordflow">if</span> ( !isnan(pidata[i+j*ilx]) )
-<a name="l01089"></a>01089             {
-<a name="l01090"></a>01090                 M  += pidata[i+j*ilx] ;  
-<a name="l01091"></a>01091                 Mx += (double)boxi * pidata[i+j*ilx] ;
-<a name="l01092"></a>01092                 My += (double)boxj * pidata[i+j*ilx] ;
-<a name="l01093"></a>01093                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l01094"></a>01094 <span class="comment">                 * estimate the amplitude and the background </span>
-<a name="l01095"></a>01095 <span class="comment">                 * go through the margins of the fitting box </span>
-<a name="l01096"></a>01096 <span class="comment">                 * and calculate the clean mean to</span>
-<a name="l01097"></a>01097 <span class="comment">                 * determine the background </span>
-<a name="l01098"></a>01098 <span class="comment">                 */</span>
-<a name="l01099"></a>01099                 <span class="keywordflow">if</span> ( i == llx || i == llx + 2*halfbox_x -1 ||
-<a name="l01100"></a>01100                      j == lly || j == lly + 2*halfbox_y -1 )
-<a name="l01101"></a>01101                 {
-<a name="l01102"></a>01102                     backarray[n] = pidata[i+j*ilx] ;
-<a name="l01103"></a>01103                     n++ ;
-<a name="l01104"></a>01104                 }
-<a name="l01105"></a>01105             }
-<a name="l01106"></a>01106         }
-<a name="l01107"></a>01107     }
-<a name="l01108"></a>01108     <span class="keywordflow">if</span> ( M <= 0. )
-<a name="l01109"></a>01109     {
-<a name="l01110"></a>01110         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"only negative or zero values"</span>) ;
-<a name="l01111"></a>01111         cpl_free(backarray) ;
-<a name="l01112"></a>01112         <span class="keywordflow">return</span> -1 ;
-<a name="l01113"></a>01113     }
-<a name="l01114"></a>01114     <span class="keywordflow">if</span> ( n < 3 )
-<a name="l01115"></a>01115     {
-<a name="l01116"></a>01116         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data points to calculate background"</span>) ;
-<a name="l01117"></a>01117         cpl_free(backarray) ;
-<a name="l01118"></a>01118         <span class="keywordflow">return</span> -1 ;
-<a name="l01119"></a>01119     }
-<a name="l01120"></a>01120     <span class="comment">/* determine the background as sinfo_median of the surrounding pixels */</span>
-<a name="l01121"></a>01121     <span class="keywordflow">if</span> (FLT_MAX==(background=sinfo_new_clean_mean(backarray,n,10.,10.))) 
-<a name="l01122"></a>01122     {
-<a name="l01123"></a>01123         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"it was not possible to compute the "</span>
-<a name="l01124"></a>01124                         <span class="stringliteral">"clean mean of the background values"</span>) ;
-<a name="l01125"></a>01125         cpl_free(backarray) ;
-<a name="l01126"></a>01126         <span class="keywordflow">return</span> -1 ;
-<a name="l01127"></a>01127     }
-<a name="l01128"></a>01128     cpl_free (backarray) ;
-<a name="l01129"></a>01129     <span class="comment">/* now calculate the amplitude estimation */</span>
-<a name="l01130"></a>01130     amplitude = maxval - background ;
-<a name="l01131"></a>01131     <span class="keywordflow">if</span> ( amplitude < 1e-12 )
-<a name="l01132"></a>01132     {
-<a name="l01133"></a>01133         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"amplitude is too small"</span>) ;
-<a name="l01134"></a>01134         <span class="keywordflow">return</span> -1 ;
-<a name="l01135"></a>01135     }
-<a name="l01136"></a>01136 
-<a name="l01137"></a>01137     <span class="comment">/* determine the center of gravity = centroid */</span>
-<a name="l01138"></a>01138     X0 = Mx / M ;
-<a name="l01139"></a>01139     Y0 = My / M ;
-<a name="l01140"></a>01140     <span class="comment">/* if one of the values is outside the fitting box return with error */</span>
-<a name="l01141"></a>01141     <span class="keywordflow">if</span> ( X0 <= 0. || Y0 <= 0. || X0 >= 2.*(<span class="keywordtype">double</span>)halfbox_x || 
-<a name="l01142"></a>01142          Y0 >= 2.*(<span class="keywordtype">double</span>)halfbox_y )
-<a name="l01143"></a>01143     {
-<a name="l01144"></a>01144         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"center of gravity is outside the fitting box!"</span>) ;
-<a name="l01145"></a>01145         <span class="keywordflow">return</span> -1 ;
-<a name="l01146"></a>01146     }
-<a name="l01147"></a>01147     
-<a name="l01148"></a>01148     <span class="comment">/*------------------------------------------------------------------------ </span>
-<a name="l01149"></a>01149 <span class="comment">     * put the data in the 2-d array xydat[][] (pixel position) and zdat[] </span>
-<a name="l01150"></a>01150 <span class="comment">     * (data values) additionally, determine the second order momentum</span>
-<a name="l01151"></a>01151 <span class="comment">     */</span>
-<a name="l01152"></a>01152     n = 0 ;
-<a name="l01153"></a>01153     M = Mx = Mxx = My = Myy = Mxy = 0. ;
-<a name="l01154"></a>01154     boxi = boxj = 0 ;
-<a name="l01155"></a>01155     <span class="keywordflow">for</span> ( j = lly ; j < lly + 2*halfbox_y ; j++ )
-<a name="l01156"></a>01156     {
-<a name="l01157"></a>01157         boxj = j - lly ;
-<a name="l01158"></a>01158         <span class="keywordflow">for</span> ( i = llx ; i < llx + 2*halfbox_x ; i++ )
-<a name="l01159"></a>01159         {
-<a name="l01160"></a>01160             boxi = i - llx ;
-<a name="l01161"></a>01161             value = pidata[i+j*ilx] ;
-<a name="l01162"></a>01162             <span class="keywordflow">if</span> ( !isnan(value) )
-<a name="l01163"></a>01163             {
-<a name="l01164"></a>01164                 xydat[n][0] = (double) boxi ;
-<a name="l01165"></a>01165                 xydat[n][1] = (double) boxj ;
-<a name="l01166"></a>01166                 zdat[n]     = value ;
-<a name="l01167"></a>01167                 wdat[n]     = 1. ;
-<a name="l01168"></a>01168                 n++ ; 
-<a name="l01169"></a>01169                
-<a name="l01170"></a>01170                 <span class="comment">/* now calculate the moments without background in the </span>
-<a name="l01171"></a>01171 <span class="comment">                   centroid coordinate system */</span>
-<a name="l01172"></a>01172                 value -= background ;
-<a name="l01173"></a>01173                 xco = (double) boxi - X0 ;
-<a name="l01174"></a>01174                 yco = (double) boxj - Y0 ;
-<a name="l01175"></a>01175                 M   += value ;
-<a name="l01176"></a>01176                 Mx  += xco * value ;
-<a name="l01177"></a>01177                 My  += yco * value ;
-<a name="l01178"></a>01178                 Mxx += xco * xco * value ;
-<a name="l01179"></a>01179                 Myy += yco * yco * value ;
-<a name="l01180"></a>01180                 Mxy += xco * yco * value ;
-<a name="l01181"></a>01181             }
-<a name="l01182"></a>01182         }
-<a name="l01183"></a>01183     }
-<a name="l01184"></a>01184     <span class="keywordflow">if</span> ( M <= 0. )
-<a name="l01185"></a>01185     {
-<a name="l01186"></a>01186         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"only negative or zero values"</span>) ;
-<a name="l01187"></a>01187         <span class="keywordflow">return</span> -1 ;
-<a name="l01188"></a>01188     }
-<a name="l01189"></a>01189   
-<a name="l01190"></a>01190     <span class="comment">/* ----------------------------------------------------------------</span>
-<a name="l01191"></a>01191 <span class="comment">     * estimate the fwhm_x and fwhm_y and theta </span>
-<a name="l01192"></a>01192 <span class="comment">     */</span> 
-<a name="l01193"></a>01193   
-<a name="l01194"></a>01194     <span class="comment">/* first scale the moments */</span>
-<a name="l01195"></a>01195     <span class="comment">/* TODO: why use Mx is later this is never used? */</span>
-<a name="l01196"></a>01196     Mx  /= M ;
-<a name="l01197"></a>01197     My  /= M ;
-<a name="l01198"></a>01198     Mxx /= M ;
-<a name="l01199"></a>01199     Myy /= M ;
-<a name="l01200"></a>01200     Mxy /= M ;
-<a name="l01201"></a>01201    
-<a name="l01202"></a>01202     denom = 2. * (Mxx*Myy - Mxy*Mxy) ;
-<a name="l01203"></a>01203     <span class="keywordflow">if</span> ( denom == 0. )
-<a name="l01204"></a>01204     {
-<a name="l01205"></a>01205         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"denominator is zero!"</span>) ;
-<a name="l01206"></a>01206         <span class="keywordflow">return</span> -1 ;
-<a name="l01207"></a>01207     }
-<a name="l01208"></a>01208     
-<a name="l01209"></a>01209     <span class="comment">/* now associate the parameter list with the found estimates */</span>
-<a name="l01210"></a>01210     fit_par[0] = X0 ;
-<a name="l01211"></a>01211     fit_par[1] = Y0 ;
-<a name="l01212"></a>01212     fit_par[2] = amplitude ;
-<a name="l01213"></a>01213     fit_par[3] = background ;
-<a name="l01214"></a>01214     fit_par[4] = Myy/denom ;
-<a name="l01215"></a>01215     fit_par[5] = Mxx/denom ;
-<a name="l01216"></a>01216     fit_par[6] = -Mxy/denom ;
-<a name="l01217"></a>01217 
-<a name="l01218"></a>01218     <span class="comment">/* convert the moments to ellipse paramters */</span>
-<a name="l01219"></a>01219     <span class="keywordflow">if</span> ( 0 > new_gauss2Ellipse (fit_par) )
-<a name="l01220"></a>01220     {
-<a name="l01221"></a>01221         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"gauss2Ellipse does not run!"</span>) ;
-<a name="l01222"></a>01222         <span class="keywordflow">return</span> -1 ;
-<a name="l01223"></a>01223     }
-<a name="l01224"></a>01224 
-<a name="l01225"></a>01225     <span class="comment">/* total number of data points */</span>
-<a name="l01226"></a>01226     ndata = 4 * halfbox_x * halfbox_y ;
-<a name="l01227"></a>01227     xdim = XDIMG ; <span class="comment">/* dimension of xydat array */</span>
-<a name="l01228"></a>01228     npar = NPAR ; <span class="comment">/* number of parameters in the fit */</span>
-<a name="l01229"></a>01229     its = ITSG ;
-<a name="l01230"></a>01230     lab = LABG ;
-<a name="l01231"></a>01231     tol = TOLG ;
-<a name="l01232"></a>01232     <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )
-<a name="l01233"></a>01233     {
-<a name="l01234"></a>01234         derv_par[i] = 0. ;
-<a name="l01235"></a>01235     }
-<a name="l01236"></a>01236     
-<a name="l01237"></a>01237     <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfitd ( &xydat[0][0],
-<a name="l01238"></a>01238                                  &xdim,
-<a name="l01239"></a>01239                                  zdat,
-<a name="l01240"></a>01240                                  wdat, 
-<a name="l01241"></a>01241                                  &ndata,
-<a name="l01242"></a>01242                                  fit_par,
-<a name="l01243"></a>01243                                  derv_par,
-<a name="l01244"></a>01244                                  mpar,
-<a name="l01245"></a>01245                                  &npar,
-<a name="l01246"></a>01246                                  &tol,
-<a name="l01247"></a>01247                                  &its,
-<a name="l01248"></a>01248                                  &lab )) ) 
-<a name="l01249"></a>01249     {
-<a name="l01250"></a>01250         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" least squares fit failed, error no: %d!"</span>, iters) ;
-<a name="l01251"></a>01251         <span class="keywordflow">return</span> -1 ;
-<a name="l01252"></a>01252     }
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     <span class="comment">/* exclude impossible fit results */</span>
-<a name="l01255"></a>01255     <span class="keywordflow">if</span> ( fit_par[2] <= 0. || fit_par[4] < 0. || fit_par[5] < 0. )
-<a name="l01256"></a>01256     {
-<a name="l01257"></a>01257         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, some impossible negative fit results!"</span>) ;
-<a name="l01258"></a>01258         <span class="keywordflow">return</span> -1 ;
-<a name="l01259"></a>01259     }
-<a name="l01260"></a>01260     fit_par[0] += llx ;
-<a name="l01261"></a>01261     fit_par[1] += lly ;
-<a name="l01262"></a>01262     <span class="keywordflow">if</span> ( fit_par[0] < llx || fit_par[0] >= llx + 2*halfbox_x ||
-<a name="l01263"></a>01263          fit_par[1] < lly || fit_par[1] >= lly + 2*halfbox_y )
-<a name="l01264"></a>01264     {
-<a name="l01265"></a>01265         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, centroid after the fit "</span>
-<a name="l01266"></a>01266                         <span class="stringliteral">"outside the fitting box"</span>) ;
-<a name="l01267"></a>01267         <span class="keywordflow">return</span> -1 ;
-<a name="l01268"></a>01268     }
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270     <span class="comment">/* exchange fwhmx and fwhmy if |theta| is bigger than </span>
-<a name="l01271"></a>01271 <span class="comment">       pi/4 and subtract pi/2 from theta */</span>
-<a name="l01272"></a>01272     <span class="keywordflow">if</span> ( fabs ( fit_par[6] ) > PI_NUMB / 4. )
-<a name="l01273"></a>01273     {
-<a name="l01274"></a>01274         <span class="comment">/* first convert angle to smaller than 2 pi */</span>
-<a name="l01275"></a>01275         <span class="keywordflow">if</span> ( fabs (fit_par[6]) >= 2. * PI_NUMB )
-<a name="l01276"></a>01276         { 
-<a name="l01277"></a>01277             k = (int) (fit_par[6] / (2.*PI_NUMB)) ;
-<a name="l01278"></a>01278             <span class="keywordflow">if</span> ( k > 0 ) 
-<a name="l01279"></a>01279             {
-<a name="l01280"></a>01280                 fit_par[6] -= k*2.*PI_NUMB ;
-<a name="l01281"></a>01281             }
-<a name="l01282"></a>01282             <span class="keywordflow">else</span>
-<a name="l01283"></a>01283             {
-<a name="l01284"></a>01284                 fit_par[6] += k*2.*PI_NUMB ;
-<a name="l01285"></a>01285             }
-<a name="l01286"></a>01286         }
-<a name="l01287"></a>01287         <span class="comment">/* first convert angle to smaller than pi/2 */</span>
-<a name="l01288"></a>01288         <span class="keywordflow">if</span> ( fabs (fit_par[6]) > PI_NUMB / 2. )
-<a name="l01289"></a>01289         {
-<a name="l01290"></a>01290             <span class="keywordflow">if</span> ( fit_par[6] > 0. )
-<a name="l01291"></a>01291             {
-<a name="l01292"></a>01292                 fit_par[6] -= PI_NUMB ;
-<a name="l01293"></a>01293             }
-<a name="l01294"></a>01294             <span class="keywordflow">else</span>
-<a name="l01295"></a>01295             {
-<a name="l01296"></a>01296                 fit_par[6] += PI_NUMB ;
-<a name="l01297"></a>01297             }
-<a name="l01298"></a>01298         }
-<a name="l01299"></a>01299 
-<a name="l01300"></a>01300         <span class="keywordflow">if</span> ( fabs (fit_par[6]) > PI_NUMB / 4. )
-<a name="l01301"></a>01301         {
-<a name="l01302"></a>01302             temp       = fit_par[4] ;
-<a name="l01303"></a>01303             fit_par[4] = fit_par[5] ;
-<a name="l01304"></a>01304             fit_par[5] = temp ;
-<a name="l01305"></a>01305             <span class="keywordflow">if</span> ( fit_par[6] < 0. )
-<a name="l01306"></a>01306             { 
-<a name="l01307"></a>01307                 fit_par[6] += PI_NUMB / 2. ;
-<a name="l01308"></a>01308             }
-<a name="l01309"></a>01309             <span class="keywordflow">else</span>
-<a name="l01310"></a>01310             {
-<a name="l01311"></a>01311                 fit_par[6] -= PI_NUMB / 2. ;
-<a name="l01312"></a>01312             }  
-<a name="l01313"></a>01313         }
-<a name="l01314"></a>01314     }
-<a name="l01315"></a>01315     
-<a name="l01316"></a>01316     <span class="keywordflow">return</span> iters ;
-<a name="l01317"></a>01317 }
-<a name="l01318"></a>01318 
-<a name="l01328"></a>01328 cpl_image * 
-<a name="l01329"></a>01329 sinfo_new_plot_gaussian (cpl_image   * image, 
-<a name="l01330"></a>01330                          <span class="keywordtype">double</span>     * parlist )
-<a name="l01331"></a>01331 {
-<a name="l01332"></a>01332     <span class="keywordtype">int</span> col, row ;
-<a name="l01333"></a>01333     cpl_image * retImage ;
-<a name="l01334"></a>01334     <span class="keywordtype">double</span> xdat[2] ;
-<a name="l01335"></a>01335     <span class="keywordtype">int</span> ilx=0;
-<a name="l01336"></a>01336     <span class="keywordtype">int</span> ily=0;
-<a name="l01337"></a>01337     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01338"></a>01338 
-<a name="l01339"></a>01339     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l01340"></a>01340     {
-<a name="l01341"></a>01341         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01342"></a>01342         <span class="keywordflow">return</span> NULL ;
-<a name="l01343"></a>01343     }
-<a name="l01344"></a>01344     ilx=cpl_image_get_size_x(image);
-<a name="l01345"></a>01345     ily=cpl_image_get_size_y(image);
-<a name="l01346"></a>01346 
-<a name="l01347"></a>01347     <span class="keywordflow">if</span> ( parlist == NULL ) 
-<a name="l01348"></a>01348     {
-<a name="l01349"></a>01349         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no Gaussian parameters given!"</span>) ;
-<a name="l01350"></a>01350         <span class="keywordflow">return</span> NULL ;
-<a name="l01351"></a>01351     }
-<a name="l01352"></a>01352  
-<a name="l01353"></a>01353     retImage = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT) ;
-<a name="l01354"></a>01354     podata=cpl_image_get_data_float(retImage);
-<a name="l01355"></a>01355     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01356"></a>01356     {
-<a name="l01357"></a>01357         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01358"></a>01358         {
-<a name="l01359"></a>01359             xdat[0] = (double) col ;
-<a name="l01360"></a>01360             xdat[1] = (double) row ;
-<a name="l01361"></a>01361             podata[col+row*ilx] = sinfo_new_gaussian_ellipse( xdat , parlist) ; 
-<a name="l01362"></a>01362         }
-<a name="l01363"></a>01363     }
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365     <span class="keywordflow">return</span> retImage ;
-<a name="l01366"></a>01366 }
-<a name="l01367"></a>01367 
-<a name="l01375"></a>01375 <span class="keyword">static</span> <span class="keywordtype">int</span> new_gauss2Ellipse ( <span class="keywordtype">double</span>     * parlist )
-<a name="l01376"></a>01376 {
-<a name="l01377"></a>01377     <span class="keywordtype">double</span> a, b, c ;
-<a name="l01378"></a>01378     <span class="keywordtype">double</span> ellipseconst ;
-<a name="l01379"></a>01379     <span class="keywordtype">double</span> axisX, axisY, phi ;
-<a name="l01380"></a>01380     <span class="keywordtype">double</span> p ;
-<a name="l01381"></a>01381     
-<a name="l01382"></a>01382     <span class="keywordflow">if</span> ( parlist == NULL )
-<a name="l01383"></a>01383     {
-<a name="l01384"></a>01384         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no parameters given!\n"</span>) ;
-<a name="l01385"></a>01385         <span class="keywordflow">return</span> -1 ;
-<a name="l01386"></a>01386     }
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388     a = parlist[4] ; <span class="comment">/* fwhmx */</span>
-<a name="l01389"></a>01389     b = parlist[5] ; <span class="comment">/* fwhmy */</span>
-<a name="l01390"></a>01390     c = parlist[6] ; <span class="comment">/* theta */</span>
-<a name="l01391"></a>01391 
-<a name="l01392"></a>01392     ellipseconst = 2. * log(2.) ;
-<a name="l01393"></a>01393 
-<a name="l01394"></a>01394     <span class="keywordflow">if</span> ( a*b - c*c <= 0. )
-<a name="l01395"></a>01395     {
-<a name="l01396"></a>01396         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"estimates of moments are unusable, "</span>
-<a name="l01397"></a>01397                           <span class="stringliteral">"they do not make an ellipse!"</span>) ;
-<a name="l01398"></a>01398         <span class="keywordflow">return</span> -1 ;
-<a name="l01399"></a>01399     }
-<a name="l01400"></a>01400     
-<a name="l01401"></a>01401     <span class="keywordflow">if</span> ( a == b )
-<a name="l01402"></a>01402     { 
-<a name="l01403"></a>01403         phi = 0. ;
-<a name="l01404"></a>01404     }
-<a name="l01405"></a>01405     <span class="keywordflow">else</span>
-<a name="l01406"></a>01406     {
-<a name="l01407"></a>01407         phi = 0.5 * atan( 2. * c / (a-b) ) ;
-<a name="l01408"></a>01408     }
-<a name="l01409"></a>01409 
-<a name="l01410"></a>01410     p = sqrt ( (a-b) * (a-b) + 4. * c*c ) ;
-<a name="l01411"></a>01411 
-<a name="l01412"></a>01412     <span class="keywordflow">if</span> ( a > b )
-<a name="l01413"></a>01413     {
-<a name="l01414"></a>01414         axisX = 2. * sqrt ( ellipseconst / (a+b+p) ) ;
-<a name="l01415"></a>01415         axisY = 2. * sqrt ( ellipseconst / (a+b-p) ) ;
-<a name="l01416"></a>01416     }
-<a name="l01417"></a>01417     <span class="keywordflow">else</span>
-<a name="l01418"></a>01418     {
-<a name="l01419"></a>01419         axisX = 2. * sqrt ( ellipseconst / (a+b-p) ) ;
-<a name="l01420"></a>01420         axisY = 2. * sqrt ( ellipseconst / (a+b+p) ) ;
-<a name="l01421"></a>01421     }
-<a name="l01422"></a>01422 
-<a name="l01423"></a>01423     parlist[4] = axisX ;
-<a name="l01424"></a>01424     parlist[5] = axisY ;
-<a name="l01425"></a>01425     parlist[6] = phi ;
-<a name="l01426"></a>01426 
-<a name="l01427"></a>01427     <span class="keywordflow">return</span> 0 ;
-<a name="l01428"></a>01428 }
-<a name="l01429"></a>01429 
-<a name="l01453"></a>01453 <span class="keywordtype">float</span> sinfo_new_determine_conversion_factor ( cpl_imagelist * cube, 
-<a name="l01454"></a>01454                                   <span class="keywordtype">float</span>     mag,
-<a name="l01455"></a>01455                                   <span class="keywordtype">float</span>     exptime,
-<a name="l01456"></a>01456                                   <span class="keywordtype">int</span>       llx,
-<a name="l01457"></a>01457                                   <span class="keywordtype">int</span>       lly,
-<a name="l01458"></a>01458                                   <span class="keywordtype">int</span>       halfbox_x,
-<a name="l01459"></a>01459                                   <span class="keywordtype">int</span>       halfbox_y, 
-<a name="l01460"></a>01460                                   <span class="keywordtype">int</span>* check )
-<a name="l01461"></a>01461 {
-<a name="l01462"></a>01462     <span class="keywordtype">int</span> row, col, i ;
-<a name="l01463"></a>01463     <span class="keywordtype">int</span> first_row, first_col ;
-<a name="l01464"></a>01464     <span class="keywordtype">int</span> last_row, last_col ;
-<a name="l01465"></a>01465     <span class="keywordtype">float</span> factor ;
-<a name="l01466"></a>01466     <span class="keywordtype">int</span> mpar[7] ;
-<a name="l01467"></a>01467     <span class="keywordtype">double</span> fit_par[7] ;
-<a name="l01468"></a>01468     <span class="keywordtype">double</span> derv_par[7] ;
-<a name="l01469"></a>01469     <span class="keywordtype">int</span> fitInd ;
-<a name="l01470"></a>01470     <span class="keywordtype">double</span> sum ;
-<a name="l01471"></a>01471     <span class="keywordtype">double</span> xdat[2] ;
-<a name="l01472"></a>01472     cpl_image * summedIm ;
-<a name="l01473"></a>01473 
-<a name="l01474"></a>01474     <span class="keywordtype">int</span> ilx=0;
-<a name="l01475"></a>01475     <span class="keywordtype">int</span> ily=0;
-<a name="l01476"></a>01476     <span class="keywordtype">int</span> inp=0;
-<a name="l01477"></a>01477 
-<a name="l01478"></a>01478     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l01479"></a>01479     {
-<a name="l01480"></a>01480         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;
-<a name="l01481"></a>01481         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01482"></a>01482     }
-<a name="l01483"></a>01483 
-<a name="l01484"></a>01484     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01485"></a>01485     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01486"></a>01486     inp=cpl_imagelist_get_size(cube);
-<a name="l01487"></a>01487 
-<a name="l01488"></a>01488     <span class="keywordflow">if</span> ( halfbox_x <= 0 || halfbox_y <= 0 || 
-<a name="l01489"></a>01489        2*halfbox_x > ilx || 2*halfbox_y > ily)
-<a name="l01490"></a>01490     {
-<a name="l01491"></a>01491         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong width of halfbox given!"</span>) ;
-<a name="l01492"></a>01492         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01493"></a>01493     }
-<a name="l01494"></a>01494     <span class="keywordflow">if</span> ( exptime <= 0. )
-<a name="l01495"></a>01495     {
-<a name="l01496"></a>01496         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible exposure time given !"</span>) ;
-<a name="l01497"></a>01497         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01498"></a>01498     }
-<a name="l01499"></a>01499 
-<a name="l01500"></a>01500     <span class="comment">/* collapse the cube to be able to do 2D-Gaussian fitting */</span>
-<a name="l01501"></a>01501     <span class="keywordflow">if</span> ( NULL == (summedIm = sinfo_new_sum_cube_to_image(cube)) )
-<a name="l01502"></a>01502     {
-<a name="l01503"></a>01503         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_averageCubeToImage failed!"</span>) ;
-<a name="l01504"></a>01504         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01505"></a>01505     }
-<a name="l01506"></a>01506 
-<a name="l01507"></a>01507     <span class="comment">/* call the 2D-Gaussian fit routine */</span>
-<a name="l01508"></a>01508     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )
-<a name="l01509"></a>01509     {
-<a name="l01510"></a>01510         mpar[i] = 1 ;
-<a name="l01511"></a>01511     }
-<a name="l01512"></a>01512     <span class="keywordflow">if</span> ( -1 == (fitInd = sinfo_new_fit_2d_gaussian(summedIm, fit_par, derv_par,
-<a name="l01513"></a>01513                                                    mpar, llx, lly, halfbox_x, 
-<a name="l01514"></a>01514                                                    halfbox_y, check)) )
-<a name="l01515"></a>01515     {
-<a name="l01516"></a>01516         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"sinfo_fit2dGaussian failed!"</span>) ;
-<a name="l01517"></a>01517         cpl_image_delete( summedIm) ;
-<a name="l01518"></a>01518         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01519"></a>01519     }
-<a name="l01520"></a>01520     cpl_image_delete(summedIm) ;
-<a name="l01521"></a>01521 
-<a name="l01522"></a>01522     <span class="comment">/* now integrate the found 2D Gaussian by first </span>
-<a name="l01523"></a>01523 <span class="comment">       subtracting the background */</span>
-<a name="l01524"></a>01524     <span class="keywordflow">if</span>  ((fit_par[0] - halfbox_x) < 0) {
-<a name="l01525"></a>01525       first_col=0;
-<a name="l01526"></a>01526       check++;
-<a name="l01527"></a>01527     } <span class="keywordflow">else</span> {
-<a name="l01528"></a>01528       first_col=(fit_par[0] - halfbox_x);
-<a name="l01529"></a>01529     }
-<a name="l01530"></a>01530 
-<a name="l01531"></a>01531     <span class="keywordflow">if</span> ((fit_par[0] + halfbox_x) < ilx) {
-<a name="l01532"></a>01532       last_col  = (fit_par[0] + halfbox_x);
-<a name="l01533"></a>01533     } <span class="keywordflow">else</span> {
-<a name="l01534"></a>01534       last_col = (ilx-1) ;
-<a name="l01535"></a>01535       check++;
-<a name="l01536"></a>01536     }
-<a name="l01537"></a>01537 
-<a name="l01538"></a>01538     <span class="keywordflow">if</span> ((fit_par[1] - halfbox_y) < 0) {
-<a name="l01539"></a>01539       first_row=0;
-<a name="l01540"></a>01540       check++;
-<a name="l01541"></a>01541     } <span class="keywordflow">else</span> {
-<a name="l01542"></a>01542       first_row=(fit_par[1] - halfbox_y) ;
-<a name="l01543"></a>01543     }
-<a name="l01544"></a>01544 
-<a name="l01545"></a>01545     <span class="keywordflow">if</span> ((fit_par[1] + halfbox_y) < ily) {
-<a name="l01546"></a>01546       last_row=(fit_par[1] + halfbox_y);
-<a name="l01547"></a>01547     } <span class="keywordflow">else</span> {
-<a name="l01548"></a>01548       last_row= (ily-1);
-<a name="l01549"></a>01549       check++;
-<a name="l01550"></a>01550     }
-<a name="l01551"></a>01551 
-<a name="l01552"></a>01552 
-<a name="l01553"></a>01553     <span class="keywordflow">if</span> ( first_col < 0 || first_row < 0 || last_col >= ilx || last_row >= ily )
-<a name="l01554"></a>01554     {
-<a name="l01555"></a>01555         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"star badly centered in FOV or fitting box too big!"</span>) ;
-<a name="l01556"></a>01556         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01557"></a>01557     }
-<a name="l01558"></a>01558     sum = 0. ;
-<a name="l01559"></a>01559     <span class="keywordflow">for</span> ( row = first_row ; row < last_row ; row++ )  
-<a name="l01560"></a>01560     {
-<a name="l01561"></a>01561         <span class="keywordflow">for</span>( col = first_col ; col < last_col ; col++ )
-<a name="l01562"></a>01562         {
-<a name="l01563"></a>01563             xdat[0] = (double) col ;
-<a name="l01564"></a>01564             xdat[1] = (double) row ;
-<a name="l01565"></a>01565             sum += (sinfo_new_gaussian_ellipse( xdat, fit_par ) - fit_par[3]) ;
-<a name="l01566"></a>01566         }
-<a name="l01567"></a>01567     }
-<a name="l01568"></a>01568     <span class="keywordflow">if</span> ( sum <= 0. )
-<a name="l01569"></a>01569     {
-<a name="l01570"></a>01570         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"zero or negative sum of counts!"</span>) ;
-<a name="l01571"></a>01571         <span class="keywordflow">return</span> -FLT_MAX ;
-<a name="l01572"></a>01572     }
-<a name="l01573"></a>01573     factor = mag / (float)sum * exptime ;
-<a name="l01574"></a>01574     <span class="keywordflow">return</span> factor ;
-<a name="l01575"></a>01575 }
-<a name="l01576"></a>01576                               
-<a name="l01577"></a>01577 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  16/01/02  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_focus.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        routines to determine the focus position of the detector</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   #include "sinfo_focus.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*   1) double sinfo_new_gaussian_ellipse ( double * xdat, double * parlist )</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   2) void sinfo_new_gaussian_ellipse_deriv( double * xdat, </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                              double * parlist, </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                              double * dervs )</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   3) static int new_inv_mat (void)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*   4) static void new_get_mat ( double * xdat,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                            int    * xdim,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                            double * ydat,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*                            double * wdat,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*                            int    * ndat,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                            double * fpar,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                            double * epar,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                            int    * npar )</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*   5) static int new_get_vec ( double * xdat,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                           int    * xdim,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                           double * ydat,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                           double * wdat,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                           int    * ndat,</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*                           double * fpar,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                           double * epar,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                           int    * npar )</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*   6) int new_lsqfit ( double * xdat,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                   int    * xdim,</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*                   double * ydat,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                   double * wdat,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                   int    * ndat,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                   double * fpar,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*                   double * epar,</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*                   int    * mpar,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                   int    * npar,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                   double * tol ,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                   int    * its ,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                   double * lab  )</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*   7) int sinfo_new_fit_2d_gaussian( cpl_image   * lineImage, </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                         double     * fit_par, </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                         double     * derv_par   </span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*                         int        * mpar,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*                         int          lleftx,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                         int          llefty,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*                         int          halfbox_x,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                         int          halfbox_y, int* check )</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*   8) cpl_image * sinfo_new_plot_gaussian ( cpl_image   * image, </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                                double     * parlist )</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*   9) static int new_gauss2ellipse ( double     * parlist ,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*  10) float sinfo_new_determine_conversion_factor ( cpl_imagelist * cube, </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*                                        float     mag,</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*                                        float     exptime,</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*                                        int       lleftx,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*                                        int       llefty,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                                        int       halfbox_x,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*                                        int       halfbox_y, </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*                                        int* check )</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*   1) Compute the value of a 2d Gaussian function at a given point.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*      The ellptical 2D Gaussian is:</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*      F(x,y) = par(2) * EXP( -4.0*log(2.0)*[(xr/par(4))^2+(yr/par(5))^2]) + </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                par(3),</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*      where: xr = xo * cos(par(6)) + yo * sin(par(6))</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*      yr = -xo * sin(par(6)) + yo * cos(par(6))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*      and:   x0 = x - par(0)</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*             y0 = y - par(1)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*   2) calculates the partial derivatives for a 2d Gaussian function with</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*      parameters parlist at position xdat </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*   3) calculates the inverse of matrix2. The algorithm used </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*      is the Gauss-Jordan algorithm described in Stoer,</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*      Numerische Mathematik, 1. Teil.</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*   4) builds the sinfo_matrix </span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*   5) calculates the correction sinfo_vector. The sinfo_matrix has been</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*      built by get_mat(), we only have to rescale it for the </span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*      current value of labda. The sinfo_matrix is rescaled so that</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*      the diagonal gets the value 1 + labda.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*      Next we calculate the inverse of the sinfo_matrix and then</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*      the correction sinfo_vector.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*   6) this is a routine for making a least-squares fit of a</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*      function to a set of data points. The method used is</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*      described in: Marquardt, J.Soc.Ind.Appl.Math. 11. 431 (1963).</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*      This method is a mixture of the steepest descent method </span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*      and the Taylor method.</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*   7) fits the image of a point source by using a 2-D Gaussian</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*      fit.</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*   8) plots an image of a given 2D-Gaussian </span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*   9) converts gauss parameters to ellipse parameters. </span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*  10) determines an intensity conversion factor for the instrument</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*      by fitting a 2D-Gaussian to an collapsed image of a standard star</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      with known brightness (only for non-AO observations).</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      Then the resulting Gaussian is integrated and the counts</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*      are divided by the exposure time (Fits header information) </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor">#include "sinfo_focus.h"</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment"> *                                 Defines</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor">#define XDIMG          2         </span><span class="comment">/* dimension of the x values */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span><span class="preprocessor">#define TOLG           0.001     </span><span class="comment">/* fitting tolerance */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor"></span><span class="preprocessor">#define LABG           0.1       </span><span class="comment">/* labda parameter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor"></span><span class="preprocessor">#define ITSG           200       </span><span class="comment">/* maximum number of iterations */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span><span class="preprocessor">#define LABFACG        10.0      </span><span class="comment">/* labda step factor */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMAXG        1.0e+10   </span><span class="comment">/* maximum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMING        1.0e-10   </span><span class="comment">/* minimum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">#define NPAR           7         </span><span class="comment">/* number of fit parameters */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span><span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment"> *                                    Local variables</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi2 ;                    <span class="comment">/* new reduced chi-squared */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keyword">static</span> <span class="keywordtype">double</span> vec[NPAR] ;               <span class="comment">/* correction sinfo_vector */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[NPAR][NPAR] ;     <span class="comment">/* original sinfo_matrix */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[NPAR][NPAR] ;     <span class="comment">/* inverse of matrix1 */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[NPAR] ;            <span class="comment">/* parameter pointer */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment"> *                    Functions private to this module</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                       <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                       <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                       <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                       <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                       <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                       <span class="keywordtype">double</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">                      int    * npar */</span>) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                      <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                      <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                      <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                      <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                      <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                      <span class="keywordtype">double</span> * epar,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                      <span class="keywordtype">int</span>    * npar ) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_gauss2Ellipse ( <span class="keywordtype">double</span>  * parlist ) ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keywordtype">double</span> sinfo_new_gaussian_ellipse(<span class="keywordtype">double</span> * xdat, <span class="keywordtype">double</span> * parlist)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">double</span>  result ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">double</span> x ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">double</span> y ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordtype">double</span> fwhmx ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordtype">double</span> fwhmy ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordtype">double</span> costheta ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordtype">double</span> sintheta ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">double</span> argX ;           <span class="comment">/* arguments in the exponent */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordtype">double</span> argY ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="comment">/* some abbreviations */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     x =  xdat[0] -  parlist[0] ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     y =  xdat[1] -  parlist[1] ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     fwhmx = fabs(parlist[4]) ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     fwhmy = fabs(parlist[5]) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     costheta = cos ( parlist[6] ) ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     sintheta = sin ( parlist[6] ) ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     argX = x * costheta + y * sintheta ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     argY = -x * sintheta + y * costheta ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/* function */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     result =  parlist[2] * exp(-4.*log(2.0)*((argX/fwhmx)*(argX/fwhmx)+</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                                              (argY/fwhmy)*(argY/fwhmy))) +</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>               parlist[3] ; </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">return</span> result ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> sinfo_new_gaussian_ellipse_deriv(<span class="keywordtype">double</span> * xdat, </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                  <span class="keywordtype">double</span> * parlist, </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                  <span class="keywordtype">double</span> * dervs )</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordtype">double</span> x ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordtype">double</span> y ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordtype">double</span> fwhmx ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordtype">double</span> fwhmy ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordtype">double</span> argX ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordtype">double</span> argY ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordtype">double</span> expon ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordtype">double</span> e8log2 ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordtype">double</span> fwx2 ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="keywordtype">double</span> fwy2 ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordtype">double</span> costheta ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="keywordtype">double</span> sintheta ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="comment">/* some abbreviations */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     x = xdat[0] - parlist[0] ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     y = xdat[1] - parlist[1] ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     fwhmx = fabs(parlist[4]) ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     fwhmy = fabs(parlist[5]) ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     fwx2 = fwhmx * fwhmx ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     fwy2 = fwhmy * fwhmy ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     costheta = cos ( parlist[6] ) ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     sintheta = sin ( parlist[6] ) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     argX = x * costheta + y * sintheta ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     argY = -x * sintheta + y * costheta ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     expon = exp ( -4.0 * log(2.0) * ((argX/fwhmx)*(argX/fwhmx) + </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                                      (argY/fwhmy)*(argY/fwhmy)) ) ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     e8log2 = expon * 8.0 * log(2.0) ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="comment">/* determine the derivatives */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="comment">/* partial derivative x-position */</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     dervs[0] = -parlist[2]*e8log2 * (-argX*costheta/fwx2 + argY*sintheta/fwy2);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="comment">/* partial derivative y-position */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     dervs[1] = -parlist[2]*e8log2 * (-argX*sintheta/fwx2 - argY*costheta/fwy2);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="comment">/* partial derivative amplitude */</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     dervs[2] = expon ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="comment">/* partial derivative background */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     dervs[3] = 1. ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="comment">/* partial derivative fwhmx */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     dervs[4] = parlist[2]*e8log2 * argX*argX/(fwx2*fwhmx) ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="comment">/* partial derivative fwhmy */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     dervs[5] = parlist[2]*e8log2 * argY*argY/(fwy2*fwhmy) ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="comment">/* partial derivative theta */</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     dervs[6] = -parlist[2]*e8log2 * argY * argX * (1.0/fwx2 - 1.0/fwy2) ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordtype">double</span> even ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordtype">double</span> hv[NPAR] ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="keywordtype">double</span> mjk ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordtype">double</span> rowmax ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordtype">int</span> evin ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordtype">int</span> i, j, k, row ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordtype">int</span> per[NPAR] ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>    </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="comment">/* set permutation array */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     {</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         per[i] = i ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="comment">/* determine largest element of a row */</span>                                </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         rowmax = fabs ( matrix2[j][j] ) ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         row = j ;                         </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>             {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                 rowmax = fabs( matrix2[i][j] ) ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                 row = i ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>             }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         }</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="comment">/* determinant is zero! */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         <span class="comment">/* if the largest element is not on the diagonal, </span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">           then permutate rows */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <span class="keywordflow">if</span> ( row > j )</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>             {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                 even = matrix2[j][k] ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                 matrix2[j][k] = matrix2[row][k] ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                 matrix2[row][k] = even ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>             }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>             <span class="comment">/* keep track of permutation */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>             evin = per[j] ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>             per[j] = per[row] ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>             per[row] = evin ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         <span class="comment">/* modify column */</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         even = 1.0 / matrix2[j][j] ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             matrix2[i][j] *= even ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         matrix2[j][j] = even ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>             {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             }</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>         {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>             {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="comment">/* finally, repermute the columns */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>         {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             hv[per[k]] = matrix2[i][k] ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             matrix2[i][k] = hv[k] ;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>         </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="comment">/* all is well */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                       <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                       <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                       <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                       <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                       <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                       <span class="keywordtype">double</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment">                      int    * npar */</span>)</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">double</span> wd ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordtype">double</span> yd ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordtype">int</span> i, j, n ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   <span class="comment">/* zero sinfo_matrix only on </span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">                                         and below diagonal */</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>         {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>             matrix1[j][i] = 0.0 ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     <span class="comment">/* loop through data points */</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         wn = wdat[n] ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         {</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>             yd=ydat[n] - sinfo_new_gaussian_ellipse(&xdat[(*xdim) * n],fpar) ;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>             sinfo_new_gaussian_ellipse_deriv( &xdat[(*xdim) * n], fpar, epar ) ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             {</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                 {</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                     matrix1[j][i] += epar[parptr[i]] * wd ;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                 }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>             }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>         }</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     }                   </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> }  </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                 </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>             </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                      <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                      <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                      <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                      <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>                      <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                      <span class="keywordtype">double</span> * epar,</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                      <span class="keywordtype">int</span>    * npar )</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <span class="keywordtype">double</span> dj ;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordtype">double</span> dy ;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="keywordtype">double</span> mii ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="keywordtype">double</span> mji ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="keywordtype">double</span> mjj ;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordtype">int</span> i, j, n, r ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>         {</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>             <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         }</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         mjj = sqrt( mjj ) ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>             matrix2[i][j] = matrix2[j][i] = mji ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     }    </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     <span class="keywordflow">if</span> ( (r = new_inv_mat()) ) <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>         <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     {</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>         epar[i] = fpar[i] ;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="comment">/* loop to calculate correction sinfo_vector */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         dj = 0.0 ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         {</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         }</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>         mjj = sqrt ( mjj ) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         {</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>             mii = matrix1[i][i] ;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>             <span class="keywordflow">if</span> ( mii <= 0.0 )</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>             {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>             }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>             mii = sqrt( mii ) ;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             dj += vec[i] * matrix2[j][i] / mjj / mii ;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         }</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     }    </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>  </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="comment">/* loop through the data points */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         wn = wdat[n] ;               <span class="comment">/* get weight */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>         {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             dy=ydat[n] - sinfo_new_gaussian_ellipse(&xdat[(*xdim) * n],epar);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>             chi1 += wdat[n] * dy * dy ;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         }</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> }   </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> <span class="keywordtype">int</span> sinfo_new_lsqfitd ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>               <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>               <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>               <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>               <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>               <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>               <span class="keywordtype">double</span> * epar,</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>               <span class="keywordtype">int</span>    * mpar,</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>               <span class="keywordtype">int</span>    * npar,</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>               <span class="keywordtype">double</span> * tol ,</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>               <span class="keywordtype">int</span>    * its ,</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>               <span class="keywordtype">double</span> * lab  )</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> {</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordtype">int</span> i, n, r ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     itc   = 0 ;                    <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     found = 0 ;                    <span class="comment">/* reset */</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span></div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordflow">if</span> ( *tol < (DBL_EPSILON * 10.0 ) )</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     {</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         tolerance = DBL_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     }</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         tolerance = *tol ;                <span class="comment">/* tolerance */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     }</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     labda = fabs( *lab ) * LABFACG ; <span class="comment">/* start value for mixing parameter */</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         <span class="keywordflow">if</span> ( mpar[i] )</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         {</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>             <span class="keywordflow">if</span> ( nfree > NPAR )         <span class="comment">/* too many free parameters */</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>             {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             }</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>         }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     }</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     {</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             nuse ++ ;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordflow">if</span> ( nfree >= nuse )</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     {</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     }</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     {</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <span class="comment">/* initialize fpar array */</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         new_get_mat ( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         r =  new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>             <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         }</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         {</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         {</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>             }</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                                      sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     }</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>         <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span></div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> <span class="comment">         * the matrix and calculate the correction sinfo_vector. In the </span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">           inner loop</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="comment">         * better solution than the previous one. If so, we leave the inner loop</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="comment">         * else we increase lambda ( give more weight to the steepest descent </span></div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> <span class="comment">         * method) calculate the correction vector and check again. After the </span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> <span class="comment">         * inner loop</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="comment">         * we do a final check on the goodness of the fit and if this satisfies</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         {      </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>                 <span class="keywordflow">return</span> -4 ;               </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>             }</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>             new_get_mat( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>             </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> <span class="comment">             * here we decrease labda since we may assume that each iteration</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="comment">             * brings us closer to the answer.</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             <span class="keywordflow">if</span> ( labda > LABMING )</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>             {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                 labda = labda / LABFACG ;         <span class="comment">/* decrease labda */</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>             }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>             r = new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>             {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>                 <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>             }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>             <span class="keywordflow">while</span> ( chi1 >= chi2 )        <span class="comment">/* interpolation loop */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>             {</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="comment">                 * The next statement is based on experience, not on the </span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="comment">                 * mathematics of the problem. It is assumed that we have </span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="comment">                 * reached convergence when the pure steepest descent method </span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">                 * does not produce a better solution.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>                 <span class="keywordflow">if</span> ( labda > LABMAXG )    <span class="comment">/* assume solution found */</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>                 {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>                     break ;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>                 }</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>                 labda = labda * LABFACG ; <span class="comment">/* increase mixing parameter */</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>                 {</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>                 }</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>             }</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>             <span class="keywordflow">if</span> ( labda <= LABMAXG )        <span class="comment">/* save old parameters */</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>             {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                 {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>                     fpar[i] = epar[i] ;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                 }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>             }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>             <span class="keywordflow">if</span> ( (fabs( chi2 - chi1 ) <= (tolerance * chi1)) || </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>                       (labda > LABMAXG) )</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             {</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment">                 * the correct errors of the fitted parameters. This we do by </span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">                 * using the pure Taylor</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="comment">                 * method because we are very close to the real solution.</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                 labda = LABMING ;              <span class="comment">/* for Taylor solution */</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>                 new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>                 r=new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar ) ;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                 {</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                 }</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>                 {</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>                 }</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>                 chi2 = sqrt ( chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>                 {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>                     {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>                         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>                     }</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>                     epar[parptr[i]] = chi2 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>                                              sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>                 }</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>                 found = 1 ;                  <span class="comment">/* we found a solution */</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>             }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>         }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> }</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> sinfo_new_fit_2d_gaussian ( cpl_image   * image, </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>                     <span class="keywordtype">double</span>     * fit_par, </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>                     <span class="keywordtype">double</span>     * derv_par,   </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                     <span class="keywordtype">int</span>        * mpar,</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>                     <span class="keywordtype">int</span>          lleftx,</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>                     <span class="keywordtype">int</span>          llefty,</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>                     <span class="keywordtype">int</span>          halfbox_x,</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>                     <span class="keywordtype">int</span>          halfbox_y, </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>                     <span class="keywordtype">int</span>* check )</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     <span class="keywordtype">int</span> i, j, n ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     <span class="keywordtype">int</span> boxi, boxj ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     <span class="keywordtype">int</span> iters ;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     <span class="keywordtype">int</span> ndata ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="keywordtype">int</span> xdim ;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     <span class="keywordtype">int</span> npar ;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <span class="keywordtype">int</span> its ;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="keywordtype">double</span> lab ;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     <span class="keywordtype">double</span> tol ;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <span class="keywordtype">double</span> maxval ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     <span class="keywordtype">double</span> background ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     <span class="keywordtype">double</span> amplitude ;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keywordtype">float</span> * backarray=NULL ;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     <span class="keywordtype">double</span> M, Mx, My ;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="keywordtype">double</span> Mxx, Mxy, Myy ; </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     <span class="keywordtype">double</span> X0, Y0 ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     <span class="keywordtype">double</span> xydat[4 *halfbox_x*halfbox_y][XDIMG] ;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     <span class="keywordtype">double</span> zdat[4*halfbox_x*halfbox_y] ;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     <span class="keywordtype">double</span> wdat[4*halfbox_x*halfbox_y] ;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     <span class="keywordtype">double</span> xco, yco ;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     <span class="keywordtype">double</span> value ;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     <span class="keywordtype">double</span> denom ;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="keywordtype">double</span> temp ;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     <span class="keywordtype">int</span> llx, lly ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     <span class="keywordtype">int</span> foundrow ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <span class="keywordtype">int</span> foundcol ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     <span class="keywordtype">int</span> k ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     <span class="keywordflow">if</span> ( NULL == image )</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given"</span>) ;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     }</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     <span class="keywordflow">if</span> ( NULL == fit_par )</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     {</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameters given"</span>) ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     }</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     <span class="keywordflow">if</span> ( NULL == derv_par )</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no derivatives of fit parameters given"</span>) ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     }</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keywordflow">if</span> ( lleftx < 0 || lleftx + 2*halfbox_x >= ilx ||</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>          llefty < 0 || llefty + 2*halfbox_y >= ily )</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     {</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong lower left point of fitting box given!"</span>) ;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     }</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordflow">if</span> ( halfbox_x <= 1 || halfbox_y <= 1 )</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong box dimensions given"</span>) ;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     }</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     <span class="keywordflow">if</span> ( NULL == (backarray = (<span class="keywordtype">float</span>*) cpl_calloc(4*halfbox_x+4*halfbox_y, </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>                   <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ) ) </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     {</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory"</span>) ;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     <span class="comment">/* -------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">     * find the initial estimates for the free parameters</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     <span class="comment">/* first search for the position of the maximum intensity */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     foundrow = 0 ;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     foundcol = 0 ;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     maxval   = -SINFO_DBL_MAX ;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     <span class="keywordflow">for</span> ( col = lleftx ; col < lleftx + 2*halfbox_x ; col++ )</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     {</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>         <span class="keywordflow">for</span> ( row = llefty ; row < llefty + 2*halfbox_y ; row++ )</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>             <span class="keywordflow">if</span> ( isnan(pidata[col+row*ilx]) )</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             {</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>                 continue ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>             }</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>             <span class="keywordflow">if</span> ( maxval < pidata[col+row*ilx] ) </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>             {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>                 maxval = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>                 foundrow = row ;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>                 foundcol = col ;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             }</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordflow">if</span> ( foundrow == 0 || foundcol == 0 || maxval <= 0. ||</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>          foundrow == ilx-1 || foundcol == ily-1 )</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     {</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no maximum found"</span>) ;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         cpl_free(backarray) ;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     <span class="comment">/* determine the lower left sinfo_edge of the fitting box, center it </span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> <span class="comment">       on the maximum value */</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>     llx = foundcol - halfbox_x ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     lly = foundrow - halfbox_y ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     <span class="keywordflow">if</span> ((foundcol - halfbox_x) > 0) {</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>       llx = (foundcol - halfbox_x);</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>       llx=1;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>       check++;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     <span class="keywordflow">if</span> ((foundrow - halfbox_y) > 0) {</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       lly = (foundrow - halfbox_y);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>       lly=1;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>       check++;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     } </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordflow">if</span> ( ( llx + 2*halfbox_x) <  ilx-1 ) {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>        <span class="comment">//halfbox_x=halfbox_x;</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>        halfbox_x=(int) (ilx-2-llx)/2;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>       check++;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     }</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     <span class="keywordflow">if</span> ( ( lly + 2*halfbox_y) <  ily-1 ) {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>        <span class="comment">//halfbox_y= halfbox_y;</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>       halfbox_y=(int) (ily-2-lly)/2;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>       check++;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     }</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordflow">if</span> ( llx <= 0 || lly < 0 || llx + 2*halfbox_x >= ilx-1 ||</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>          lly + 2*halfbox_y >= ily )</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     {</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"box does not fit into image"</span>) ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>         cpl_free(backarray) ;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     }</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="comment">/* determine the zeroth and first order moments of the image  </span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> <span class="comment">       within the fitting box */</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     M = Mx = My = 0. ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     n = 0 ;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     boxi = boxj = 0 ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordflow">for</span> ( j = lly ; j < lly + 2*halfbox_y ; j++ )</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     {</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         boxj = j - lly ;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>         <span class="keywordflow">for</span> ( i = llx ; i < llx + 2*halfbox_x ; i++ )</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         {</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>             boxi = i - llx ;</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i+j*ilx]) )</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>             {</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>                 M  += pidata[i+j*ilx] ;  </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>                 Mx += (double)boxi * pidata[i+j*ilx] ;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>                 My += (double)boxj * pidata[i+j*ilx] ;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="comment">                 * estimate the amplitude and the background </span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="comment">                 * go through the margins of the fitting box </span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="comment">                 * and calculate the clean mean to</span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment">                 * determine the background </span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>                 <span class="keywordflow">if</span> ( i == llx || i == llx + 2*halfbox_x -1 ||</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>                      j == lly || j == lly + 2*halfbox_y -1 )</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>                 {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                     backarray[n] = pidata[i+j*ilx] ;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                     n++ ;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>                 }</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>             }</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>         }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     }</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     <span class="keywordflow">if</span> ( M <= 0. )</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"only negative or zero values"</span>) ;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         cpl_free(backarray) ;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     }</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     <span class="keywordflow">if</span> ( n < 3 )</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     {</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data points to calculate background"</span>) ;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         cpl_free(backarray) ;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     }</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <span class="comment">/* determine the background as sinfo_median of the surrounding pixels */</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">if</span> (FLT_MAX==(background=sinfo_new_clean_mean(backarray,n,10.,10.))) </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"it was not possible to compute the "</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>                         <span class="stringliteral">"clean mean of the background values"</span>) ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         cpl_free(backarray) ;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     }</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     cpl_free (backarray) ;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="comment">/* now calculate the amplitude estimation */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     amplitude = maxval - background ;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <span class="keywordflow">if</span> ( amplitude < 1e-12 )</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     {</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"amplitude is too small"</span>) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="comment">/* determine the center of gravity = centroid */</span></div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     X0 = Mx / M ;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     Y0 = My / M ;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     <span class="comment">/* if one of the values is outside the fitting box return with error */</span></div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     <span class="keywordflow">if</span> ( X0 <= 0. || Y0 <= 0. || X0 >= 2.*(<span class="keywordtype">double</span>)halfbox_x || </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>          Y0 >= 2.*(<span class="keywordtype">double</span>)halfbox_y )</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     {</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"center of gravity is outside the fitting box!"</span>) ;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     }</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>     </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     <span class="comment">/*------------------------------------------------------------------------ </span></div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">     * put the data in the 2-d array xydat[][] (pixel position) and zdat[] </span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="comment">     * (data values) additionally, determine the second order momentum</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     n = 0 ;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     M = Mx = Mxx = My = Myy = Mxy = 0. ;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     boxi = boxj = 0 ;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="keywordflow">for</span> ( j = lly ; j < lly + 2*halfbox_y ; j++ )</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     {</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>         boxj = j - lly ;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>         <span class="keywordflow">for</span> ( i = llx ; i < llx + 2*halfbox_x ; i++ )</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>         {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>             boxi = i - llx ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>             value = pidata[i+j*ilx] ;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>             <span class="keywordflow">if</span> ( !isnan(value) )</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>             {</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>                 xydat[n][0] = (double) boxi ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>                 xydat[n][1] = (double) boxj ;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                 zdat[n]     = value ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>                 wdat[n]     = 1. ;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>                 n++ ; </div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>                </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                 <span class="comment">/* now calculate the moments without background in the </span></div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">                   centroid coordinate system */</span></div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                 value -= background ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                 xco = (double) boxi - X0 ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                 yco = (double) boxj - Y0 ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                 M   += value ;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                 Mx  += xco * value ;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>                 My  += yco * value ;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>                 Mxx += xco * xco * value ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>                 Myy += yco * yco * value ;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>                 Mxy += xco * yco * value ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>             }</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>         }</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     }</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     <span class="keywordflow">if</span> ( M <= 0. )</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     {</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"only negative or zero values"</span>) ;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     }</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>   </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     <span class="comment">/* ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="comment">     * estimate the fwhm_x and fwhm_y and theta </span></div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="comment">     */</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="comment">/* first scale the moments */</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="comment">/* TODO: why use Mx is later this is never used? */</span></div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     Mx  /= M ;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     My  /= M ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     Mxx /= M ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     Myy /= M ;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     Mxy /= M ;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>    </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     denom = 2. * (Mxx*Myy - Mxy*Mxy) ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     <span class="keywordflow">if</span> ( denom == 0. )</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     {</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"denominator is zero!"</span>) ;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     }</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>     </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="comment">/* now associate the parameter list with the found estimates */</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     fit_par[0] = X0 ;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     fit_par[1] = Y0 ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     fit_par[2] = amplitude ;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>     fit_par[3] = background ;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     fit_par[4] = Myy/denom ;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     fit_par[5] = Mxx/denom ;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     fit_par[6] = -Mxy/denom ;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="comment">/* convert the moments to ellipse paramters */</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     <span class="keywordflow">if</span> ( 0 > new_gauss2Ellipse (fit_par) )</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"gauss2Ellipse does not run!"</span>) ;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>     }</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     <span class="comment">/* total number of data points */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     ndata = 4 * halfbox_x * halfbox_y ;</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     xdim = XDIMG ; <span class="comment">/* dimension of xydat array */</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>     npar = NPAR ; <span class="comment">/* number of parameters in the fit */</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     its = ITSG ;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     lab = LABG ;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     tol = TOLG ;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     <span class="keywordflow">for</span> ( i = 0 ; i < NPAR ; i++ )</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     {</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>         derv_par[i] = 0. ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     </div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfitd ( &xydat[0][0],</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                                  &xdim,</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                                  zdat,</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>                                  wdat, </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                                  &ndata,</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                                  fit_par,</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>                                  derv_par,</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                                  mpar,</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                                  &npar,</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>                                  &tol,</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>                                  &its,</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>                                  &lab )) ) </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" least squares fit failed, error no: %d!"</span>, iters) ;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="comment">/* exclude impossible fit results */</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keywordflow">if</span> ( fit_par[2] <= 0. || fit_par[4] < 0. || fit_par[5] < 0. )</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     {</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, some impossible negative fit results!"</span>) ;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     fit_par[0] += llx ;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     fit_par[1] += lly ;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     <span class="keywordflow">if</span> ( fit_par[0] < llx || fit_par[0] >= llx + 2*halfbox_x ||</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>          fit_par[1] < lly || fit_par[1] >= lly + 2*halfbox_y )</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, centroid after the fit "</span></div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>                         <span class="stringliteral">"outside the fitting box"</span>) ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     <span class="comment">/* exchange fwhmx and fwhmy if |theta| is bigger than </span></div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="comment">       pi/4 and subtract pi/2 from theta */</span></div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <span class="keywordflow">if</span> ( fabs ( fit_par[6] ) > PI_NUMB / 4. )</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     {</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>         <span class="comment">/* first convert angle to smaller than 2 pi */</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>         <span class="keywordflow">if</span> ( fabs (fit_par[6]) >= 2. * PI_NUMB )</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>         { </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>             k = (int) (fit_par[6] / (2.*PI_NUMB)) ;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>             <span class="keywordflow">if</span> ( k > 0 ) </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>             {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>                 fit_par[6] -= k*2.*PI_NUMB ;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>             }</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>             {</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>                 fit_par[6] += k*2.*PI_NUMB ;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>             }</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>         }</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>         <span class="comment">/* first convert angle to smaller than pi/2 */</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>         <span class="keywordflow">if</span> ( fabs (fit_par[6]) > PI_NUMB / 2. )</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>         {</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>             <span class="keywordflow">if</span> ( fit_par[6] > 0. )</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>             {</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>                 fit_par[6] -= PI_NUMB ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>             }</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>             {</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>                 fit_par[6] += PI_NUMB ;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>             }</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>         }</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> </div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>         <span class="keywordflow">if</span> ( fabs (fit_par[6]) > PI_NUMB / 4. )</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         {</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>             temp       = fit_par[4] ;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>             fit_par[4] = fit_par[5] ;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>             fit_par[5] = temp ;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>             <span class="keywordflow">if</span> ( fit_par[6] < 0. )</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>             { </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>                 fit_par[6] += PI_NUMB / 2. ;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>             }</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>             {</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>                 fit_par[6] -= PI_NUMB / 2. ;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>             }  </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>         }</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     }</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>     <span class="keywordflow">return</span> iters ;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> }</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> cpl_image * </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> sinfo_new_plot_gaussian (cpl_image   * image, </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>                          <span class="keywordtype">double</span>     * parlist )</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> {</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>     cpl_image * retImage ;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     <span class="keywordtype">double</span> xdat[2] ;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> </div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     {</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     }</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     <span class="keywordflow">if</span> ( parlist == NULL ) </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>     {</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no Gaussian parameters given!"</span>) ;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>     }</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     retImage = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>     {</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>         {</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             xdat[0] = (double) col ;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>             xdat[1] = (double) row ;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>             podata[col+row*ilx] = sinfo_new_gaussian_ellipse( xdat , parlist) ; </div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>         }</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     }</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> }</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_gauss2Ellipse ( <span class="keywordtype">double</span>     * parlist )</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>     <span class="keywordtype">double</span> a, b, c ;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>     <span class="keywordtype">double</span> ellipseconst ;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="keywordtype">double</span> axisX, axisY, phi ;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     <span class="keywordtype">double</span> p ;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>     </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>     <span class="keywordflow">if</span> ( parlist == NULL )</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     {</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no parameters given!\n"</span>) ;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     a = parlist[4] ; <span class="comment">/* fwhmx */</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     b = parlist[5] ; <span class="comment">/* fwhmy */</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     c = parlist[6] ; <span class="comment">/* theta */</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> </div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>     ellipseconst = 2. * log(2.) ;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     <span class="keywordflow">if</span> ( a*b - c*c <= 0. )</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>     {</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"estimates of moments are unusable, "</span></div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                           <span class="stringliteral">"they do not make an ellipse!"</span>) ;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     }</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     </div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     <span class="keywordflow">if</span> ( a == b )</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     { </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>         phi = 0. ;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     }</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     {</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>         phi = 0.5 * atan( 2. * c / (a-b) ) ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     p = sqrt ( (a-b) * (a-b) + 4. * c*c ) ;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> </div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordflow">if</span> ( a > b )</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     {</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>         axisX = 2. * sqrt ( ellipseconst / (a+b+p) ) ;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         axisY = 2. * sqrt ( ellipseconst / (a+b-p) ) ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     }</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>         axisX = 2. * sqrt ( ellipseconst / (a+b-p) ) ;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>         axisY = 2. * sqrt ( ellipseconst / (a+b+p) ) ;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>     }</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> </div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>     parlist[4] = axisX ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>     parlist[5] = axisY ;</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     parlist[6] = phi ;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="keywordtype">float</span> sinfo_new_determine_conversion_factor ( cpl_imagelist * cube, </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>                                   <span class="keywordtype">float</span>     mag,</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>                                   <span class="keywordtype">float</span>     exptime,</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>                                   <span class="keywordtype">int</span>       llx,</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>                                   <span class="keywordtype">int</span>       lly,</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>                                   <span class="keywordtype">int</span>       halfbox_x,</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>                                   <span class="keywordtype">int</span>       halfbox_y, </div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>                                   <span class="keywordtype">int</span>* check )</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> {</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordtype">int</span> row, col, i ;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     <span class="keywordtype">int</span> first_row, first_col ;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     <span class="keywordtype">int</span> last_row, last_col ;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     <span class="keywordtype">float</span> factor ;</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="keywordtype">int</span> mpar[7] ;</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     <span class="keywordtype">double</span> fit_par[7] ;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     <span class="keywordtype">double</span> derv_par[7] ;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordtype">int</span> fitInd ;</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     <span class="keywordtype">double</span> sum ;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="keywordtype">double</span> xdat[2] ;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     cpl_image * summedIm ;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> </div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     <span class="keywordflow">if</span> ( halfbox_x <= 0 || halfbox_y <= 0 || </div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>        2*halfbox_x > ilx || 2*halfbox_y > ily)</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     {</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong width of halfbox given!"</span>) ;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     }</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     <span class="keywordflow">if</span> ( exptime <= 0. )</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>     {</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible exposure time given !"</span>) ;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     }</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     <span class="comment">/* collapse the cube to be able to do 2D-Gaussian fitting */</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordflow">if</span> ( NULL == (summedIm = sinfo_new_sum_cube_to_image(cube)) )</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     {</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_averageCubeToImage failed!"</span>) ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     }</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> </div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     <span class="comment">/* call the 2D-Gaussian fit routine */</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>         mpar[i] = 1 ;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>     }</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     <span class="keywordflow">if</span> ( -1 == (fitInd = sinfo_new_fit_2d_gaussian(summedIm, fit_par, derv_par,</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>                                                    mpar, llx, lly, halfbox_x, </div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>                                                    halfbox_y, check)) )</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     {</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"sinfo_fit2dGaussian failed!"</span>) ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>         cpl_image_delete( summedIm) ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     }</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     cpl_image_delete(summedIm) ;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> </div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     <span class="comment">/* now integrate the found 2D Gaussian by first </span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment">       subtracting the background */</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     <span class="keywordflow">if</span>  ((fit_par[0] - halfbox_x) < 0) {</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>       first_col=0;</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       check++;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>       first_col=(fit_par[0] - halfbox_x);</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     }</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> </div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>     <span class="keywordflow">if</span> ((fit_par[0] + halfbox_x) < ilx) {</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>       last_col  = (fit_par[0] + halfbox_x);</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>       last_col = (ilx-1) ;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>       check++;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>     }</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> </div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>     <span class="keywordflow">if</span> ((fit_par[1] - halfbox_y) < 0) {</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>       first_row=0;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>       check++;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>       first_row=(fit_par[1] - halfbox_y) ;</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>     }</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>     <span class="keywordflow">if</span> ((fit_par[1] + halfbox_y) < ily) {</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>       last_row=(fit_par[1] + halfbox_y);</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>       last_row= (ily-1);</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>       check++;</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>     }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     <span class="keywordflow">if</span> ( first_col < 0 || first_row < 0 || last_col >= ilx || last_row >= ily )</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     {</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"star badly centered in FOV or fitting box too big!"</span>) ;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     }</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>     sum = 0. ;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     <span class="keywordflow">for</span> ( row = first_row ; row < last_row ; row++ )  </div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     {</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         <span class="keywordflow">for</span>( col = first_col ; col < last_col ; col++ )</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>         {</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>             xdat[0] = (double) col ;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>             xdat[1] = (double) row ;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>             sum += (sinfo_new_gaussian_ellipse( xdat, fit_par ) - fit_par[3]) ;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>         }</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     }</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     <span class="keywordflow">if</span> ( sum <= 0. )</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"zero or negative sum of counts!"</span>) ;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>         <span class="keywordflow">return</span> -FLT_MAX ;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     }</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     factor = mag / (float)sum * exptime ;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>     <span class="keywordflow">return</span> factor ;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> }</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>                               </div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus_8h_source.html b/html/sinfo__focus_8h_source.html
index b760f26..be60d3e 100644
--- a/html/sinfo__focus_8h_source.html
+++ b/html/sinfo__focus_8h_source.html
@@ -2,107 +2,138 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_FOCUS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_focus.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  04/02/02  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_focus.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * some functions to fit a 2-D Gaussian for focus finding</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="keywordtype">double</span> 
-<a name="l00073"></a>00073 sinfo_new_gaussian_ellipse(<span class="keywordtype">double</span> * xdat, <span class="keywordtype">double</span> * parlist) ;
-<a name="l00074"></a>00074 
-<a name="l00100"></a>00100 <span class="keywordtype">void</span> 
-<a name="l00101"></a>00101 sinfo_new_gaussian_ellipse_deriv( <span class="keywordtype">double</span> * xdat, 
-<a name="l00102"></a>00102                                   <span class="keywordtype">double</span> * parlist, 
-<a name="l00103"></a>00103                                   <span class="keywordtype">double</span> * dervs ) ;
-<a name="l00104"></a>00104 
-<a name="l00150"></a>00150 <span class="keywordtype">int</span> 
-<a name="l00151"></a>00151 sinfo_new_lsqfitd ( <span class="keywordtype">double</span> * xdat,
-<a name="l00152"></a>00152               <span class="keywordtype">int</span>    * xdim,
-<a name="l00153"></a>00153               <span class="keywordtype">double</span> * ydat,
-<a name="l00154"></a>00154               <span class="keywordtype">double</span> * wdat,
-<a name="l00155"></a>00155               <span class="keywordtype">int</span>    * ndat,
-<a name="l00156"></a>00156               <span class="keywordtype">double</span> * fpar,
-<a name="l00157"></a>00157               <span class="keywordtype">double</span> * epar,
-<a name="l00158"></a>00158               <span class="keywordtype">int</span>    * mpar,
-<a name="l00159"></a>00159               <span class="keywordtype">int</span>    * npar,
-<a name="l00160"></a>00160               <span class="keywordtype">double</span> * tol ,
-<a name="l00161"></a>00161               <span class="keywordtype">int</span>    * its ,
-<a name="l00162"></a>00162               <span class="keywordtype">double</span> * lab  ) ;
-<a name="l00163"></a>00163 
-<a name="l00188"></a>00188 <span class="keywordtype">int</span> 
-<a name="l00189"></a>00189 sinfo_new_fit_2d_gaussian ( cpl_image   * image,
-<a name="l00190"></a>00190                     <span class="keywordtype">double</span>     * fit_par,
-<a name="l00191"></a>00191                     <span class="keywordtype">double</span>     * derv_par,
-<a name="l00192"></a>00192                     <span class="keywordtype">int</span>        * mpar,
-<a name="l00193"></a>00193                     <span class="keywordtype">int</span>          lleftx,
-<a name="l00194"></a>00194                     <span class="keywordtype">int</span>          llefty,
-<a name="l00195"></a>00195                     <span class="keywordtype">int</span>          halfbox_x,
-<a name="l00196"></a>00196                     <span class="keywordtype">int</span>          halfbox_y, <span class="keywordtype">int</span>* check ) ;
-<a name="l00197"></a>00197 
-<a name="l00206"></a>00206 cpl_image * 
-<a name="l00207"></a>00207 sinfo_new_plot_gaussian ( cpl_image   * image,
-<a name="l00208"></a>00208                           <span class="keywordtype">double</span>     * parlist ) ;
-<a name="l00209"></a>00209 
-<a name="l00228"></a>00228 <span class="keywordtype">float</span> 
-<a name="l00229"></a>00229 sinfo_new_determine_conversion_factor ( cpl_imagelist * cube,
-<a name="l00230"></a>00230                                   <span class="keywordtype">float</span>     mag,
-<a name="l00231"></a>00231                                   <span class="keywordtype">float</span>     exptime,
-<a name="l00232"></a>00232                                   <span class="keywordtype">int</span>       llx,
-<a name="l00233"></a>00233                                   <span class="keywordtype">int</span>       lly,
-<a name="l00234"></a>00234                                   <span class="keywordtype">int</span>       halfbox_x,
-<a name="l00235"></a>00235                                   <span class="keywordtype">int</span>       halfbox_y, <span class="keywordtype">int</span>* check ) ;
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_FOCUS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_focus.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  04/02/02  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_focus.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * some functions to fit a 2-D Gaussian for focus finding</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_new_gaussian_ellipse(<span class="keywordtype">double</span> * xdat, <span class="keywordtype">double</span> * parlist) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> sinfo_new_gaussian_ellipse_deriv( <span class="keywordtype">double</span> * xdat, </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                   <span class="keywordtype">double</span> * parlist, </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                   <span class="keywordtype">double</span> * dervs ) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> sinfo_new_lsqfitd ( <span class="keywordtype">double</span> * xdat,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>               <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>               <span class="keywordtype">double</span> * ydat,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>               <span class="keywordtype">double</span> * wdat,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>               <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>               <span class="keywordtype">double</span> * fpar,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>               <span class="keywordtype">double</span> * epar,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>               <span class="keywordtype">int</span>    * mpar,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>               <span class="keywordtype">int</span>    * npar,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>               <span class="keywordtype">double</span> * tol ,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>               <span class="keywordtype">int</span>    * its ,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>               <span class="keywordtype">double</span> * lab  ) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> sinfo_new_fit_2d_gaussian ( cpl_image   * image,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                     <span class="keywordtype">double</span>     * fit_par,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                     <span class="keywordtype">double</span>     * derv_par,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                     <span class="keywordtype">int</span>        * mpar,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                     <span class="keywordtype">int</span>          lleftx,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                     <span class="keywordtype">int</span>          llefty,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                     <span class="keywordtype">int</span>          halfbox_x,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                     <span class="keywordtype">int</span>          halfbox_y, <span class="keywordtype">int</span>* check ) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> cpl_image * </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> sinfo_new_plot_gaussian ( cpl_image   * image,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                           <span class="keywordtype">double</span>     * parlist ) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> sinfo_new_determine_conversion_factor ( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                                   <span class="keywordtype">float</span>     mag,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                                   <span class="keywordtype">float</span>     exptime,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                                   <span class="keywordtype">int</span>       llx,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                                   <span class="keywordtype">int</span>       lly,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                                   <span class="keywordtype">int</span>       halfbox_x,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                                   <span class="keywordtype">int</span>       halfbox_y, <span class="keywordtype">int</span>* check ) ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__cfg_8c_source.html b/html/sinfo__focus__cfg_8c_source.html
index 175590c..5090326 100644
--- a/html/sinfo__focus__cfg_8c_source.html
+++ b/html/sinfo__focus__cfg_8c_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_focus_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author     :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    configuration handling tools for the 2d-Gaussian fit </span>
-<a name="l00025"></a>00025 <span class="comment">                        of a point source</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_focus_cfg.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                              Function codes</span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 focus_config * 
-<a name="l00054"></a>00054 sinfo_focus_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00055"></a>00055 {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(focus_config));
-<a name="l00057"></a>00057 }
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> 
-<a name="l00065"></a>00065 sinfo_focus_cfg_destroy(focus_config * cc)
-<a name="l00066"></a>00066 {
-<a name="l00067"></a>00067     <span class="keywordflow">if</span> (cc==NULL) return ;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069     <span class="comment">/* Free main struct */</span>
-<a name="l00070"></a>00070     cpl_free(cc);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     return ;
-<a name="l00073"></a>00073 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_focus_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author     :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    configuration handling tools for the 2d-Gaussian fit </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        of a point source</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_focus_cfg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> focus_config * </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_focus_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(focus_config));</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> }</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_focus_cfg_destroy(focus_config * cc)</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>     <span class="keywordflow">if</span> (cc==NULL) return ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_free(cc);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     return ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__cfg_8h_source.html b/html/sinfo__focus__cfg_8h_source.html
index f6dfe10..faf9968 100644
--- a/html/sinfo__focus__cfg_8h_source.html
+++ b/html/sinfo__focus__cfg_8h_source.html
@@ -2,136 +2,167 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_focus_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    focus_cfg.c definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FOCUS_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  point source 2D-Gaussian fit blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the 2D-Gaussian fit</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>focus_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;       <span class="comment">/* file name of frame list */</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input averaged, bad pixel corrected, </span>
-<a name="l00053"></a>00053 <span class="comment">                                 off subtracted, flatfielded, spectral tilt </span>
-<a name="l00054"></a>00054 <span class="comment">                                 corrected list of frames */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">int</span> nframes ;        <span class="comment">/* number of frames in the list */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span>
-<a name="l00057"></a>00057 <span class="comment">                                        fits data cube */</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*------ Reconstruction ------*/</span>
-<a name="l00060"></a>00060         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels </span>
-<a name="l00061"></a>00061 <span class="comment">           when taking the average of columns */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">float</span> lo_reject ;
-<a name="l00063"></a>00063         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels </span>
-<a name="l00064"></a>00064 <span class="comment">           when taking the average of columns */</span>
-<a name="l00065"></a>00065         <span class="keywordtype">float</span> hi_reject ;
-<a name="l00066"></a>00066         <span class="comment">/* indicates if the slitlet distances are determined by a </span>
-<a name="l00067"></a>00067 <span class="comment">           north-south test (1) </span>
-<a name="l00068"></a>00068 <span class="comment">           or slitlet edge fits (0) */</span> 
-<a name="l00069"></a>00069         <span class="keywordtype">int</span> northsouthInd  ;
-<a name="l00070"></a>00070         <span class="comment">/* name of the ASCII list of the fitted slitlet edge </span>
-<a name="l00071"></a>00071 <span class="comment">          positions or the distances of the slitlets */</span>
-<a name="l00072"></a>00072         <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;
-<a name="l00073"></a>00073         <span class="comment">/* number of slitlets (32) */</span>
-<a name="l00074"></a>00074         <span class="keywordtype">int</span> nslits ;
-<a name="l00075"></a>00075         <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of </span>
-<a name="l00076"></a>00076 <span class="comment">           the first slitlet needed if the slitlet distances were determined </span>
-<a name="l00077"></a>00077 <span class="comment">           by a north south test */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">char</span> firstCol[FILE_NAME_SZ] ;
-<a name="l00079"></a>00079     <span class="comment">/* indicator for the shifting method to use */</span>
-<a name="l00080"></a>00080     <span class="keywordtype">char</span>  method[1] ;
-<a name="l00081"></a>00081         <span class="comment">/* order of polynomial if the polynomial interpolation shifting </span>
-<a name="l00082"></a>00082 <span class="comment">           method is used */</span>
-<a name="l00083"></a>00083         <span class="keywordtype">int</span> order ;
-<a name="l00084"></a>00084 <span class="comment">/*------ Gauss2Dfit ------*/</span>
-<a name="l00085"></a>00085         <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D </span>
-<a name="l00086"></a>00086 <span class="comment">           Gaussian fit */</span>
-<a name="l00087"></a>00087         <span class="keywordtype">int</span> llx ;
-<a name="l00088"></a>00088         <span class="keywordtype">int</span> lly ;
-<a name="l00089"></a>00089         <span class="comment">/* half length in pixels of the box within the point source </span>
-<a name="l00090"></a>00090 <span class="comment">           is fitted in x and y-direction */</span>
-<a name="l00091"></a>00091         <span class="keywordtype">int</span> halfbox_x ;
-<a name="l00092"></a>00092         <span class="keywordtype">int</span> halfbox_y ;
-<a name="l00093"></a>00093         <span class="comment">/* mask parameters ( 1 or 0 ) for the fit parameters. If 1 </span>
-<a name="l00094"></a>00094 <span class="comment">           the corresponding parameter</span>
-<a name="l00095"></a>00095 <span class="comment">           is set free, if 0 the parameter is kept fixed. */</span>
-<a name="l00096"></a>00096         <span class="keywordtype">int</span> mpar0 ; <span class="comment">/* mask for the x-position */</span>
-<a name="l00097"></a>00097         <span class="keywordtype">int</span> mpar1 ; <span class="comment">/* mask for the y-position */</span>
-<a name="l00098"></a>00098         <span class="keywordtype">int</span> mpar2 ; <span class="comment">/* mask for the amplitude */</span>
-<a name="l00099"></a>00099         <span class="keywordtype">int</span> mpar3 ; <span class="comment">/* mask for the background */</span>
-<a name="l00100"></a>00100         <span class="keywordtype">int</span> mpar4 ; <span class="comment">/* mask for the fwhmx */</span>
-<a name="l00101"></a>00101         <span class="keywordtype">int</span> mpar5 ; <span class="comment">/* mask for the fwhmy */</span>
-<a name="l00102"></a>00102         <span class="keywordtype">int</span> mpar6 ; <span class="comment">/* mask for the position angle of fwhmx line */</span>
-<a name="l00103"></a>00103         <span class="comment">/* name of the resulting ASCII file containing the fit parameters */</span>
-<a name="l00104"></a>00104         <span class="keywordtype">char</span> fitlist[FILE_NAME_SZ] ;
-<a name="l00105"></a>00105         <span class="comment">/* indicator if the resulting 2D-Gaussian is stored in a fits </span>
-<a name="l00106"></a>00106 <span class="comment">           file or not */</span>
-<a name="l00107"></a>00107         <span class="keywordtype">int</span> plotGaussInd ;
-<a name="l00108"></a>00108         <span class="comment">/* name of the fits file containing the resulting 2D-Gaussian */</span>
-<a name="l00109"></a>00109         <span class="keywordtype">char</span> gaussplotName[FILE_NAME_SZ] ;
-<a name="l00110"></a>00110 } focus_config ;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00113"></a>00113 <span class="comment">                               Function prototypes</span>
-<a name="l00114"></a>00114 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00122"></a>00122 focus_config * 
-<a name="l00123"></a>00123 sinfo_focus_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00124"></a>00124 
-<a name="l00131"></a>00131 <span class="keywordtype">void</span> 
-<a name="l00132"></a>00132 sinfo_focus_cfg_destroy(focus_config * cc);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_focus_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    focus_cfg.c definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FOCUS_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  point source 2D-Gaussian fit blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the 2D-Gaussian fit</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>focus_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;       <span class="comment">/* file name of frame list */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input averaged, bad pixel corrected, </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                 off subtracted, flatfielded, spectral tilt </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                 corrected list of frames */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">int</span> nframes ;        <span class="comment">/* number of frames in the list */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                                        fits data cube */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*------ Reconstruction ------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">           when taking the average of columns */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">float</span> lo_reject ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">           when taking the average of columns */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="keywordtype">float</span> hi_reject ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="comment">/* indicates if the slitlet distances are determined by a </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">           north-south test (1) </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">           or slitlet edge fits (0) */</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">int</span> northsouthInd  ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="comment">/* name of the ASCII list of the fitted slitlet edge </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">          positions or the distances of the slitlets */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="comment">/* number of slitlets (32) */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="keywordtype">int</span> nslits ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">           the first slitlet needed if the slitlet distances were determined </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">           by a north south test */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">char</span> firstCol[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="comment">/* indicator for the shifting method to use */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordtype">char</span>  method[1] ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* order of polynomial if the polynomial interpolation shifting </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">           method is used */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordtype">int</span> order ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*------ Gauss2Dfit ------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">           Gaussian fit */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">int</span> llx ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordtype">int</span> lly ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="comment">/* half length in pixels of the box within the point source </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">           is fitted in x and y-direction */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">int</span> halfbox_x ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">int</span> halfbox_y ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="comment">/* mask parameters ( 1 or 0 ) for the fit parameters. If 1 </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">           the corresponding parameter</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">           is set free, if 0 the parameter is kept fixed. */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordtype">int</span> mpar0 ; <span class="comment">/* mask for the x-position */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">int</span> mpar1 ; <span class="comment">/* mask for the y-position */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordtype">int</span> mpar2 ; <span class="comment">/* mask for the amplitude */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordtype">int</span> mpar3 ; <span class="comment">/* mask for the background */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="keywordtype">int</span> mpar4 ; <span class="comment">/* mask for the fwhmx */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="keywordtype">int</span> mpar5 ; <span class="comment">/* mask for the fwhmy */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordtype">int</span> mpar6 ; <span class="comment">/* mask for the position angle of fwhmx line */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         <span class="comment">/* name of the resulting ASCII file containing the fit parameters */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keywordtype">char</span> fitlist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="comment">/* indicator if the resulting 2D-Gaussian is stored in a fits </span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">           file or not */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         <span class="keywordtype">int</span> plotGaussInd ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         <span class="comment">/* name of the fits file containing the resulting 2D-Gaussian */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         <span class="keywordtype">char</span> gaussplotName[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> } focus_config ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> focus_config * </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> sinfo_focus_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> sinfo_focus_cfg_destroy(focus_config * cc);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__determination__config_8c_source.html b/html/sinfo__focus__determination__config_8c_source.html
index 875aea4..efecaf2 100644
--- a/html/sinfo__focus__determination__config_8c_source.html
+++ b/html/sinfo__focus__determination__config_8c_source.html
@@ -2,305 +2,336 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_determination_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_determination_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_focus_determination_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031  <span class="comment">/****************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment">  *   Focus Determination                                        *</span>
-<a name="l00033"></a>00033 <span class="comment">  ****************************************************************/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "cpl_parameterlist.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_focus_determination_config.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00046"></a>00046   <span class="comment">/* Focus Determination Parameters Definition */</span>
-<a name="l00047"></a>00047    
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keywordtype">void</span>
-<a name="l00050"></a>00050  sinfo_focus_determination_config_add(cpl_parameterlist *list)
-<a name="l00051"></a>00051 {
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   cpl_parameter *p;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   <span class="keywordflow">if</span> (!list) {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span>;
-<a name="l00057"></a>00057   }
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   <span class="comment">/* Output file name */</span>
-<a name="l00060"></a>00060   <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00061"></a>00061   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.output_filename"</span>,
-<a name="l00062"></a>00062                   CPL_TYPE_STRING,
-<a name="l00063"></a>00063                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00064"></a>00064                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00065"></a>00065                               FOCUS_OUT_FILENAME);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-focus_filename"</span>);
-<a name="l00069"></a>00069   cpl_parameterlist_append(list, p);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.focus.method"</span>,
-<a name="l00074"></a>00074                   CPL_TYPE_STRING,
-<a name="l00075"></a>00075                               <span class="stringliteral">"Shifting method to use: "</span>,
-<a name="l00076"></a>00076                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00077"></a>00077                               <span class="stringliteral">"P"</span>,
-<a name="l00078"></a>00078                                3,
-<a name="l00079"></a>00079                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"F"</span>,<span class="stringliteral">"S"</span>);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-method"</span>);
-<a name="l00082"></a>00082   cpl_parameterlist_append(list, p);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085   <span class="comment">/* Reconstruction */</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087  <span class="comment">/* float </span>
-<a name="l00088"></a>00088 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00089"></a>00089 <span class="comment">     low and high frame */</span>
-<a name="l00090"></a>00090  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00091"></a>00091 <span class="comment">    and stdev */</span>
-<a name="l00092"></a>00092   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.lower_rejection"</span>,
-<a name="l00093"></a>00093                   CPL_TYPE_DOUBLE,
-<a name="l00094"></a>00094                               <span class="stringliteral">"lower rejection"</span>,
-<a name="l00095"></a>00095                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00096"></a>00096                                0.1,0.0,1.0);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-low_rejection"</span>);
-<a name="l00100"></a>00100   cpl_parameterlist_append(list, p);
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102   <span class="comment">/* float </span>
-<a name="l00103"></a>00103 <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span>
-<a name="l00104"></a>00104 <span class="comment">     low and high frame */</span>
-<a name="l00105"></a>00105  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span>
-<a name="l00106"></a>00106 <span class="comment">    and stdev */</span>
-<a name="l00107"></a>00107   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.higher_rejection"</span>,
-<a name="l00108"></a>00108                   CPL_TYPE_DOUBLE,
-<a name="l00109"></a>00109                               <span class="stringliteral">"high rejection"</span>,
-<a name="l00110"></a>00110                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00111"></a>00111                                0.1,0.0,1.0);
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-high_rejection"</span>);
-<a name="l00115"></a>00115   cpl_parameterlist_append(list, p);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="comment">/* indicates if the slitlet distances are determined by </span>
-<a name="l00118"></a>00118 <span class="comment">   a north-south test (1) </span>
-<a name="l00119"></a>00119 <span class="comment">           or </span>
-<a name="l00120"></a>00120 <span class="comment">   slitlet sinfo_edge fits (0) */</span> 
-<a name="l00121"></a>00121   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.north_south_index"</span>,
-<a name="l00122"></a>00122                   CPL_TYPE_BOOL,
-<a name="l00123"></a>00123                               <span class="stringliteral">"North South Index"</span>,
-<a name="l00124"></a>00124                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00125"></a>00125                               TRUE);
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-ns_index"</span>);
-<a name="l00128"></a>00128   cpl_parameterlist_append(list, p);
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130   <span class="comment">/* number of slitlets (32) */</span>
-<a name="l00131"></a>00131   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.nslits"</span>,
-<a name="l00132"></a>00132                   CPL_TYPE_INT,
-<a name="l00133"></a>00133                               <span class="stringliteral">"Number Of Slits"</span>,
-<a name="l00134"></a>00134                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00135"></a>00135                               32);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-nslits"</span>);
-<a name="l00139"></a>00139   cpl_parameterlist_append(list, p);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.order"</span>,
-<a name="l00142"></a>00142                   CPL_TYPE_INT,
-<a name="l00143"></a>00143                               <span class="stringliteral">"Order"</span>,
-<a name="l00144"></a>00144                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00145"></a>00145                               2);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-order"</span>);
-<a name="l00148"></a>00148   cpl_parameterlist_append(list, p);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151   <span class="comment">/* Gauss 2D Fit */</span>
-<a name="l00152"></a>00152   <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D Gaussian fit */</span>
-<a name="l00153"></a>00153   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.llx"</span>,
-<a name="l00154"></a>00154                   CPL_TYPE_INT,
-<a name="l00155"></a>00155                               <span class="stringliteral">"llx"</span>,
-<a name="l00156"></a>00156                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00157"></a>00157                               9,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-llx"</span>);
-<a name="l00160"></a>00160   cpl_parameterlist_append(list, p);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162   <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D Gaussian fit */</span>
-<a name="l00163"></a>00163   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.lly"</span>,
-<a name="l00164"></a>00164                   CPL_TYPE_INT,
-<a name="l00165"></a>00165                               <span class="stringliteral">"lly"</span>,
-<a name="l00166"></a>00166                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00167"></a>00167                               9,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-lly"</span>);
-<a name="l00171"></a>00171   cpl_parameterlist_append(list, p);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="comment">/* half length in pixels of the box within the point source is fitted in x </span>
-<a name="l00174"></a>00174 <span class="comment">   and y-direction */</span>
-<a name="l00175"></a>00175   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.halfbox_x"</span>,
-<a name="l00176"></a>00176                   CPL_TYPE_INT,
-<a name="l00177"></a>00177                               <span class="stringliteral">"half box x"</span>,
-<a name="l00178"></a>00178                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00179"></a>00179                               7,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-hbx"</span>);
-<a name="l00182"></a>00182   cpl_parameterlist_append(list, p);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184 <span class="comment">/* half length in pixels of the box within the point source is fitted in x </span>
-<a name="l00185"></a>00185 <span class="comment">   and y-direction */</span>
-<a name="l00186"></a>00186   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.halfbox_y"</span>,
-<a name="l00187"></a>00187                   CPL_TYPE_INT,
-<a name="l00188"></a>00188                               <span class="stringliteral">"half box y"</span>,
-<a name="l00189"></a>00189                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00190"></a>00190                               7,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-hby"</span>);
-<a name="l00194"></a>00194   cpl_parameterlist_append(list, p);
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196   <span class="comment">/* mask for the x-position */</span>
-<a name="l00197"></a>00197   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar0"</span>,
-<a name="l00198"></a>00198                   CPL_TYPE_INT,
-<a name="l00199"></a>00199                               <span class="stringliteral">"mask par 0"</span>,
-<a name="l00200"></a>00200                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00201"></a>00201                               1);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar0"</span>);
-<a name="l00204"></a>00204   cpl_parameterlist_append(list, p);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   <span class="comment">/* mask for the y-position */</span>
-<a name="l00207"></a>00207   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar1"</span>,
-<a name="l00208"></a>00208                   CPL_TYPE_INT,
-<a name="l00209"></a>00209                               <span class="stringliteral">"mask par 1"</span>,
-<a name="l00210"></a>00210                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00211"></a>00211                               1);
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar1"</span>);
-<a name="l00214"></a>00214   cpl_parameterlist_append(list, p);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   <span class="comment">/* mask for the amplitude */</span>
-<a name="l00217"></a>00217   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar2"</span>,
-<a name="l00218"></a>00218                   CPL_TYPE_INT,
-<a name="l00219"></a>00219                               <span class="stringliteral">"mask par 2"</span>,
-<a name="l00220"></a>00220                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00221"></a>00221                               1);
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar2"</span>);
-<a name="l00224"></a>00224   cpl_parameterlist_append(list, p);
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226   <span class="comment">/* mask for the background */</span>
-<a name="l00227"></a>00227   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar3"</span>,
-<a name="l00228"></a>00228                   CPL_TYPE_INT,
-<a name="l00229"></a>00229                               <span class="stringliteral">"mask par 3"</span>,
-<a name="l00230"></a>00230                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00231"></a>00231                               1);
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar3"</span>);
-<a name="l00234"></a>00234   cpl_parameterlist_append(list, p);
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236   <span class="comment">/* mask for the fwhmx */</span>
-<a name="l00237"></a>00237   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar4"</span>,
-<a name="l00238"></a>00238                   CPL_TYPE_INT,
-<a name="l00239"></a>00239                               <span class="stringliteral">"mask par 4"</span>,
-<a name="l00240"></a>00240                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00241"></a>00241                               1);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar4"</span>);
-<a name="l00244"></a>00244   cpl_parameterlist_append(list, p);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   <span class="comment">/* mask for the fwhmy */</span>
-<a name="l00247"></a>00247   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar5"</span>,
-<a name="l00248"></a>00248                   CPL_TYPE_INT,
-<a name="l00249"></a>00249                               <span class="stringliteral">"mask par 5"</span>,
-<a name="l00250"></a>00250                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00251"></a>00251                               1);
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar5"</span>);
-<a name="l00254"></a>00254   cpl_parameterlist_append(list, p);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256   <span class="comment">/* mask for the position angle of fwhmx line */</span>
-<a name="l00257"></a>00257   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar6"</span>,
-<a name="l00258"></a>00258                   CPL_TYPE_INT,
-<a name="l00259"></a>00259                               <span class="stringliteral">"mask par 6"</span>,
-<a name="l00260"></a>00260                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00261"></a>00261                               1);
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar6"</span>);
-<a name="l00264"></a>00264   cpl_parameterlist_append(list, p);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266   <span class="comment">/* name of the resulting ASCII file containing the fit parameters */</span>
-<a name="l00267"></a>00267   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.fit_list"</span>,
-<a name="l00268"></a>00268                   CPL_TYPE_STRING,
-<a name="l00269"></a>00269                               <span class="stringliteral">"Fit List: "</span>,
-<a name="l00270"></a>00270                               <span class="stringliteral">"sinfoni.fit_list"</span>,
-<a name="l00271"></a>00271                               FOCUS_FITPAR_OUT_FILENAME);
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-fit_list"</span>);
-<a name="l00274"></a>00274   cpl_parameterlist_append(list, p);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276  <span class="comment">/* indicator if the resulting 2D-Gaussian is stored in a fits file or not */</span>
-<a name="l00277"></a>00277   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.plot_gauss_ind"</span>,
-<a name="l00278"></a>00278                   CPL_TYPE_BOOL,
-<a name="l00279"></a>00279                               <span class="stringliteral">"Plot Gauss Ind"</span>,
-<a name="l00280"></a>00280                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00281"></a>00281                               TRUE);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-gauss_ind"</span>);
-<a name="l00284"></a>00284   cpl_parameterlist_append(list, p);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287   <span class="comment">/* name of the fits file containing the resulting 2D-Gaussian */</span>
-<a name="l00288"></a>00288   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.gauss_plot_name"</span>,
-<a name="l00289"></a>00289                   CPL_TYPE_STRING,
-<a name="l00290"></a>00290                               <span class="stringliteral">"Gauss Plot Name: "</span>,
-<a name="l00291"></a>00291                               <span class="stringliteral">"sinfoni.focus"</span>,
-<a name="l00292"></a>00292                               FOCUS_GAUSSPLOT_OUT_FILENAME);
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294   cpl_parameter_set_alias(p,  
-<a name="l00295"></a>00295        CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-gauss_plot_name"</span>);
-<a name="l00296"></a>00296   cpl_parameterlist_append(list, p);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_determination_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_focus_determination_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  *   Focus Determination                                        *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "cpl_parameterlist.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_focus_determination_config.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   <span class="comment">/* Focus Determination Parameters Definition */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>    </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  sinfo_focus_determination_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.output_filename"</span>,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               FOCUS_OUT_FILENAME);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-focus_filename"</span>);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>  p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.focus.method"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                               <span class="stringliteral">"Shifting method to use: "</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                               <span class="stringliteral">"P"</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                3,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"F"</span>,<span class="stringliteral">"S"</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-method"</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   <span class="comment">/* Reconstruction */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>  <span class="comment">/* float </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.lower_rejection"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               <span class="stringliteral">"lower rejection"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                0.1,0.0,1.0);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-low_rejection"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="comment">/* float </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">     threshold used in the clean mean percentage of rejection used to reject </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">     low and high frame */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>  <span class="comment">/* percentage of extreme pixel value to reject when calculating the mean </span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">    and stdev */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.higher_rejection"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"high rejection"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                                0.1,0.0,1.0);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-high_rejection"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/* indicates if the slitlet distances are determined by </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">   a north-south test (1) </span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">           or </span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">   slitlet sinfo_edge fits (0) */</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.north_south_index"</span>,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"North South Index"</span>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                               TRUE);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-ns_index"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/* number of slitlets (32) */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.nslits"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                               <span class="stringliteral">"Number Of Slits"</span>,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                               32);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-nslits"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.order"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               <span class="stringliteral">"Order"</span>,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                               2);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-order"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="comment">/* Gauss 2D Fit */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D Gaussian fit */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.llx"</span>,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                               <span class="stringliteral">"llx"</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                               9,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-llx"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="comment">/* lower left sinfo_edge coordinates of fitting box for 2D Gaussian fit */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.lly"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                               <span class="stringliteral">"lly"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                               9,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-lly"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/* half length in pixels of the box within the point source is fitted in x </span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">   and y-direction */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.halfbox_x"</span>,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                               <span class="stringliteral">"half box x"</span>,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                               7,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-hbx"</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">/* half length in pixels of the box within the point source is fitted in x </span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">   and y-direction */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.focus.halfbox_y"</span>,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                               <span class="stringliteral">"half box y"</span>,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                               7,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-hby"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="comment">/* mask for the x-position */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar0"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                               <span class="stringliteral">"mask par 0"</span>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                               1);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar0"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/* mask for the y-position */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar1"</span>,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"mask par 1"</span>,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               1);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar1"</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="comment">/* mask for the amplitude */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar2"</span>,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                               <span class="stringliteral">"mask par 2"</span>,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                               1);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar2"</span>);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="comment">/* mask for the background */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar3"</span>,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               <span class="stringliteral">"mask par 3"</span>,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                               1);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar3"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="comment">/* mask for the fwhmx */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar4"</span>,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               <span class="stringliteral">"mask par 4"</span>,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               1);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar4"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="comment">/* mask for the fwhmy */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar5"</span>,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                               <span class="stringliteral">"mask par 5"</span>,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                               1);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar5"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="comment">/* mask for the position angle of fwhmx line */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.mpar6"</span>,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="stringliteral">"mask par 6"</span>,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               1);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-mpar6"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="comment">/* name of the resulting ASCII file containing the fit parameters */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.fit_list"</span>,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                               <span class="stringliteral">"Fit List: "</span>,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                               <span class="stringliteral">"sinfoni.fit_list"</span>,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                               FOCUS_FITPAR_OUT_FILENAME);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-fit_list"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>  <span class="comment">/* indicator if the resulting 2D-Gaussian is stored in a fits file or not */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.plot_gauss_ind"</span>,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                               <span class="stringliteral">"Plot Gauss Ind"</span>,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                               TRUE);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-gauss_ind"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="comment">/* name of the fits file containing the resulting 2D-Gaussian */</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.focus.gauss_plot_name"</span>,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                               <span class="stringliteral">"Gauss Plot Name: "</span>,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                               <span class="stringliteral">"sinfoni.focus"</span>,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                               FOCUS_GAUSSPLOT_OUT_FILENAME);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   cpl_parameter_set_alias(p,  </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>        CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"focus-det-gauss_plot_name"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__determination__config_8h_source.html b/html/sinfo__focus__determination__config_8h_source.html
index 3b8dbd1..50f310e 100644
--- a/html/sinfo__focus__determination__config_8h_source.html
+++ b/html/sinfo__focus__determination__config_8h_source.html
@@ -2,51 +2,82 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_determination_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_determination_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_focus_determination_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *   Focus Determination                                        *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00032"></a>00032 <span class="comment">/*</span>
-<a name="l00033"></a>00033 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00034"></a>00034 <span class="comment">*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00036"></a>00036 <span class="keywordtype">void</span> sinfo_focus_determination_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_determination_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_focus_determination_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *   Focus Determination                                        *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keywordtype">void</span> sinfo_focus_determination_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__ini_8h_source.html b/html/sinfo__focus__ini_8h_source.html
index 2d0a518..e1457aa 100644
--- a/html/sinfo__focus__ini_8h_source.html
+++ b/html/sinfo__focus__ini_8h_source.html
@@ -2,64 +2,95 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_focus_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Feb 13, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SPIFFIs focus finding</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FOCUS_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_focus_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                             Function prototypes </span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> 
-<a name="l00052"></a>00052 generateFocus_ini_file(
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * ini_name,
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> * name_i,
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * name_o
-<a name="l00056"></a>00056 );
-<a name="l00057"></a>00057  
-<a name="l00068"></a>00068 focus_config * 
-<a name="l00069"></a>00069 parse_focus_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00070"></a>00070  
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_focus_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Feb 13, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SPIFFIs focus finding</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FOCUS_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_focus_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> generateFocus_ini_file(</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> );</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>  </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> focus_config * </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> parse_focus_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>  </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__ini__by__cpl_8c_source.html b/html/sinfo__focus__ini__by__cpl_8c_source.html
index f6c43db..4ca9099 100644
--- a/html/sinfo__focus__ini__by__cpl_8c_source.html
+++ b/html/sinfo__focus__ini__by__cpl_8c_source.html
@@ -2,288 +2,319 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_focus_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 20, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_focus_ini_by_cpl.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                    Functions private to this module</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00041"></a>00041 parse_section_frames(focus_config *, cpl_parameterlist* cpl_cfg, 
-<a name="l00042"></a>00042                    cpl_frameset* sof,cpl_frameset** stk, <span class="keywordtype">int</span>* status);
-<a name="l00043"></a>00043 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00044"></a>00044 parse_section_reconstruction(focus_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00046"></a>00046 parse_section_gauss2dfit(focus_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00047"></a>00047 
-<a name="l00070"></a>00070 focus_config * 
-<a name="l00071"></a>00071 sinfo_parse_cpl_input_focus(cpl_parameterlist * cpl_cfg, cpl_frameset* sof,
-<a name="l00072"></a>00072                      cpl_frameset** stk)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074         focus_config  *       cfg = sinfo_focus_cfg_create();
-<a name="l00075"></a>00075   <span class="keywordtype">int</span> status=0;
-<a name="l00076"></a>00076         <span class="comment">/*</span>
-<a name="l00077"></a>00077 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00078"></a>00078 <span class="comment">         * found in the ini file</span>
-<a name="l00079"></a>00079 <span class="comment">         */</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081         parse_section_reconstruction   (cfg, cpl_cfg);
-<a name="l00082"></a>00082         parse_section_gauss2dfit       (cfg, cpl_cfg);
-<a name="l00083"></a>00083         parse_section_frames           (cfg, cpl_cfg,sof,stk,&status);
-<a name="l00084"></a>00084         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00085"></a>00085                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00086"></a>00086                 sinfo_focus_cfg_destroy(cfg);
-<a name="l00087"></a>00087                 cfg = NULL ;
-<a name="l00088"></a>00088                 <span class="keywordflow">return</span> NULL ;
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090         <span class="keywordflow">return</span> cfg ;
-<a name="l00091"></a>00091 }
-<a name="l00092"></a>00092 
-<a name="l00103"></a>00103 <span class="keyword">static</span> <span class="keywordtype">void</span>   
-<a name="l00104"></a>00104 parse_section_frames(focus_config * cfg,
-<a name="l00105"></a>00105                      cpl_parameterlist* cpl_cfg,
-<a name="l00106"></a>00106                      cpl_frameset* sof,
-<a name="l00107"></a>00107                      cpl_frameset** raw, 
-<a name="l00108"></a>00108                      <span class="keywordtype">int</span>* status)
-<a name="l00109"></a>00109 {
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112    <span class="keywordtype">char</span>            *       name ;
-<a name="l00113"></a>00113     <span class="keywordtype">int</span> nframes=0;
-<a name="l00114"></a>00114    <span class="keywordtype">int</span> nraw=0;
-<a name="l00115"></a>00115    cpl_frame* frame   = NULL;
-<a name="l00116"></a>00116    cpl_parameter *p; 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00120"></a>00120    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00121"></a>00121    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00122"></a>00122    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125    <span class="keywordtype">char</span> * tag;
-<a name="l00126"></a>00126    <span class="keywordtype">int</span> i=0;
-<a name="l00127"></a>00127    nframes = cpl_frameset_get_size(sof);
-<a name="l00128"></a>00128     <span class="comment">/* Get the raw and the calibration files */</span>
-<a name="l00129"></a>00129     <span class="comment">/* Labelise the input frames according to their tags */</span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   *raw=cpl_frameset_new();
-<a name="l00132"></a>00132    sinfo_extract_raw_frames_type(sof,raw,PRO_FOCUS_STACKED);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135    nraw=cpl_frameset_get_size(*raw);
-<a name="l00136"></a>00136    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00137"></a>00137       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span>
-<a name="l00138"></a>00138             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,PRO_FOCUS_STACKED);
-<a name="l00139"></a>00139           (*status)++;
-<a name="l00140"></a>00140           <span class="keywordflow">return</span>;
-<a name="l00141"></a>00141    }
-<a name="l00142"></a>00142    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00143"></a>00143    cfg->inFrameList     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00144"></a>00144  
-<a name="l00145"></a>00145    <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00146"></a>00146    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00147"></a>00147       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00148"></a>00148       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00149"></a>00149       <span class="keywordflow">if</span>(sinfo_file_exists(name)==1) {
-<a name="l00150"></a>00150     <span class="comment">/* to go on the file must exist */</span>
-<a name="l00151"></a>00151     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l00152"></a>00152       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> 
-<a name="l00153"></a>00153       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l00154"></a>00154           <span class="keywordflow">if</span>(sinfo_is_stack(tag)) 
-<a name="l00155"></a>00155         {
-<a name="l00156"></a>00156              cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00157"></a>00157         }
-<a name="l00158"></a>00158           <span class="keywordflow">else</span> {
-<a name="l00159"></a>00159             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No good frame tag %s in input frame set"</span>,tag);
-<a name="l00160"></a>00160         (*status)++;
-<a name="l00161"></a>00161             <span class="keywordflow">return</span>;
-<a name="l00162"></a>00162       }
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164       }
-<a name="l00165"></a>00165       <span class="comment">/* Store file name into inFrameList */</span>
-<a name="l00166"></a>00166    }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00169"></a>00169    cfg->nframes = nraw ;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.output_filename"</span>);
-<a name="l00173"></a>00173    strcpy(cfg -> outName, cpl_parameter_get_string(p));
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_FIRST_COL)) {
-<a name="l00176"></a>00176       frame = cpl_frameset_find(sof,PRO_FIRST_COL);
-<a name="l00177"></a>00177       strcpy(cfg -> firstCol,cpl_strdup(cpl_frame_get_filename(frame)));
-<a name="l00178"></a>00178    } <span class="keywordflow">else</span> {
-<a name="l00179"></a>00179       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_FIRST_COL);
-<a name="l00180"></a>00180         (*status)++;
-<a name="l00181"></a>00181       <span class="keywordflow">return</span>;
-<a name="l00182"></a>00182    }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE)) {
-<a name="l00185"></a>00185       frame = cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE);
-<a name="l00186"></a>00186       strcpy(cfg -> poslist,cpl_strdup(cpl_frame_get_filename(frame)));
-<a name="l00187"></a>00187    } <span class="keywordflow">else</span> {
-<a name="l00188"></a>00188       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_SLITLETS_DISTANCE);
-<a name="l00189"></a>00189         (*status)++;
-<a name="l00190"></a>00190       <span class="keywordflow">return</span>;
-<a name="l00191"></a>00191    }
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00196"></a>00196    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00197"></a>00197  
-<a name="l00198"></a>00198    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00199"></a>00199      {
-<a name="l00200"></a>00200    <span class="keywordflow">case</span> 0: 
-<a name="l00201"></a>00201       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00202"></a>00202       <span class="keywordflow">break</span>;
-<a name="l00203"></a>00203     <span class="keywordflow">case</span> 1: 
-<a name="l00204"></a>00204       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00205"></a>00205       <span class="keywordflow">break</span>;
-<a name="l00206"></a>00206     <span class="keywordflow">case</span> -1:
-<a name="l00207"></a>00207       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00208"></a>00208       <span class="keywordflow">break</span>;
-<a name="l00209"></a>00209     <span class="keywordflow">default</span>: 
-<a name="l00210"></a>00210       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00211"></a>00211       <span class="keywordflow">break</span>;
-<a name="l00212"></a>00212      }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214    sinfo_get_band(frame,band);
-<a name="l00215"></a>00215    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,
-<a name="l00216"></a>00216                      spat_res,    lamp_status,    band);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219    sinfo_get_ins_set(band,&ins_set);
-<a name="l00220"></a>00220    <span class="keywordflow">return</span>;
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-<a name="l00230"></a>00230 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00231"></a>00231 parse_section_reconstruction(focus_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00232"></a>00232 {
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235   cpl_parameter* p;
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.lower_rejection"</span>);
-<a name="l00238"></a>00238    cfg -> lo_reject = cpl_parameter_get_double(p);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.higher_rejection"</span>);
-<a name="l00241"></a>00241    cfg -> hi_reject =  cpl_parameter_get_double(p);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.north_south_index"</span>);
-<a name="l00244"></a>00244    cfg -> northsouthInd = cpl_parameter_get_bool(p);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.nslits"</span>);
-<a name="l00247"></a>00247    cfg -> nslits = cpl_parameter_get_int(p);
-<a name="l00248"></a>00248  
-<a name="l00249"></a>00249    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.method"</span>);
-<a name="l00250"></a>00250    strcpy(cfg->method, cpl_parameter_get_string(p));
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.order"</span>);
-<a name="l00253"></a>00253    cfg -> order= cpl_parameter_get_int(p);
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 }
-<a name="l00256"></a>00256 
-<a name="l00264"></a>00264 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00265"></a>00265 parse_section_gauss2dfit(focus_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00266"></a>00266 {
-<a name="l00267"></a>00267  cpl_parameter* p;
-<a name="l00268"></a>00268    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.llx"</span>);
-<a name="l00269"></a>00269    cfg -> llx = cpl_parameter_get_int(p);
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.lly"</span>);
-<a name="l00272"></a>00272    cfg -> lly = cpl_parameter_get_int(p);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.halfbox_x"</span>);
-<a name="l00275"></a>00275    cfg -> halfbox_x =  cpl_parameter_get_int(p);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.halfbox_y"</span>);
-<a name="l00278"></a>00278    cfg -> halfbox_y = cpl_parameter_get_int(p);
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar0"</span>);
-<a name="l00281"></a>00281    cfg -> mpar0 = cpl_parameter_get_int(p);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar1"</span>);
-<a name="l00284"></a>00284    cfg -> mpar1 = cpl_parameter_get_int(p);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar2"</span>);
-<a name="l00287"></a>00287    cfg -> mpar2 = cpl_parameter_get_int(p);
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar3"</span>);
-<a name="l00290"></a>00290    cfg -> mpar3 = cpl_parameter_get_int(p);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar4"</span>);
-<a name="l00293"></a>00293    cfg -> mpar4 = cpl_parameter_get_int(p);
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar5"</span>);
-<a name="l00296"></a>00296    cfg -> mpar5 = cpl_parameter_get_int(p);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar6"</span>);
-<a name="l00299"></a>00299    cfg -> mpar6 = cpl_parameter_get_int(p);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.fit_list"</span>);
-<a name="l00302"></a>00302    strcpy(cfg -> fitlist, cpl_parameter_get_string(p));
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304    <span class="comment">/* int or string ?*/</span>
-<a name="l00305"></a>00305    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.plot_gauss_ind"</span>);
-<a name="l00306"></a>00306    cfg -> plotGaussInd = cpl_parameter_get_bool(p);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.gauss_plot_name"</span>);
-<a name="l00309"></a>00309    strcpy( cfg -> gaussplotName, cpl_parameter_get_string(p));
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311    return ;
-<a name="l00312"></a>00312 }
-<a name="l00319"></a>00319 <span class="keywordtype">void</span>
-<a name="l00320"></a>00320 sinfo_free_focus(focus_config * cfg) {
-<a name="l00321"></a>00321    cpl_free(cfg->inFrameList);
-<a name="l00322"></a>00322    sinfo_focus_cfg_destroy (cfg);
-<a name="l00323"></a>00323   
-<a name="l00324"></a>00324    <span class="keywordflow">return</span>;
-<a name="l00325"></a>00325 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_focus_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 20, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_focus_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> parse_section_frames(focus_config *, cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                    cpl_frameset* sof,cpl_frameset** stk, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> parse_section_reconstruction(focus_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> parse_section_gauss2dfit(focus_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> focus_config * </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_parse_cpl_input_focus(cpl_parameterlist * cpl_cfg, cpl_frameset* sof,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                      cpl_frameset** stk)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         focus_config  *       cfg = sinfo_focus_cfg_create();</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         parse_section_reconstruction   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         parse_section_gauss2dfit       (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         parse_section_frames           (cfg, cpl_cfg,sof,stk,&status);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                 sinfo_focus_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">static</span> <span class="keywordtype">void</span>   </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> parse_section_frames(focus_config * cfg,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                      cpl_parameterlist* cpl_cfg,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                      cpl_frameset** raw, </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    <span class="keywordtype">char</span>            *       name ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">char</span> * tag;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    nframes = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="comment">/* Get the raw and the calibration files */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="comment">/* Labelise the input frames according to their tags */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   *raw=cpl_frameset_new();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    sinfo_extract_raw_frames_type(sof,raw,PRO_FOCUS_STACKED);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    nraw=cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames (%s) present in"</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>             <span class="stringliteral">"frameset!Aborting..."</span>,nraw,PRO_FOCUS_STACKED);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           (*status)++;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    cfg->inFrameList     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>  </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       name= (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       <span class="keywordflow">if</span>(sinfo_file_exists(name)==1) {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>           <span class="keywordflow">if</span>(sinfo_is_stack(tag)) </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>              cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No good frame tag %s in input frame set"</span>,tag);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         (*status)++;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       <span class="comment">/* Store file name into inFrameList */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    cfg->nframes = nraw ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.output_filename"</span>);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    strcpy(cfg -> outName, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_FIRST_COL)) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       frame = cpl_frameset_find(sof,PRO_FIRST_COL);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       strcpy(cfg -> firstCol,cpl_strdup(cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_FIRST_COL);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         (*status)++;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE)) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       frame = cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       strcpy(cfg -> poslist,cpl_strdup(cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_SLITLETS_DISTANCE);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         (*status)++;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>  </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>      {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>      }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> parse_section_reconstruction(focus_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.lower_rejection"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    cfg -> lo_reject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.higher_rejection"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    cfg -> hi_reject =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.north_south_index"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    cfg -> northsouthInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.nslits"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    cfg -> nslits = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>  </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.method"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    strcpy(cfg->method, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.order"</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>    cfg -> order= cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> parse_section_gauss2dfit(focus_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>  cpl_parameter* p;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.llx"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>    cfg -> llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.lly"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    cfg -> lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.halfbox_x"</span>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    cfg -> halfbox_x =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.halfbox_y"</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>    cfg -> halfbox_y = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar0"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    cfg -> mpar0 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar1"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    cfg -> mpar1 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar2"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>    cfg -> mpar2 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar3"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>    cfg -> mpar3 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar4"</span>);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>    cfg -> mpar4 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar5"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    cfg -> mpar5 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.mpar6"</span>);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>    cfg -> mpar6 = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.fit_list"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>    strcpy(cfg -> fitlist, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>    <span class="comment">/* int or string ?*/</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.plot_gauss_ind"</span>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    cfg -> plotGaussInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.focus.gauss_plot_name"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    strcpy( cfg -> gaussplotName, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>    return ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> sinfo_free_focus(focus_config * cfg) {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    cpl_free(cfg->inFrameList);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    sinfo_focus_cfg_destroy (cfg);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__focus__ini__by__cpl_8h_source.html b/html/sinfo__focus__ini__by__cpl_8h_source.html
index 4f8b790..f531716 100644
--- a/html/sinfo__focus__ini__by__cpl_8h_source.html
+++ b/html/sinfo__focus__ini__by__cpl_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_focus_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_focus_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_focus_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 20, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input handling for SPIFFIs focus finding</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_FOCUS_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_focus_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                             Function prototypes </span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00045"></a>00045 <span class="keywordtype">void</span> 
-<a name="l00046"></a>00046 sinfo_free_focus(focus_config * cfg);
-<a name="l00047"></a>00047 
-<a name="l00060"></a>00060 focus_config * 
-<a name="l00061"></a>00061 sinfo_parse_cpl_input_focus(cpl_parameterlist * cpl_cfg, 
-<a name="l00062"></a>00062                             cpl_frameset* sof, 
-<a name="l00063"></a>00063                             cpl_frameset** stk) ;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_focus_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_focus_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 20, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input handling for SPIFFIs focus finding</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_FOCUS_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FOCUS_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_focus_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> sinfo_free_focus(focus_config * cfg);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> focus_config * </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> sinfo_parse_cpl_input_focus(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                             cpl_frameset* sof, </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                             cpl_frameset** stk) ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__function__1d_8c_source.html b/html/sinfo__function__1d_8c_source.html
index e02f4a9..aa48967 100644
--- a/html/sinfo__function__1d_8c_source.html
+++ b/html/sinfo__function__1d_8c_source.html
@@ -2,723 +2,754 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_function_1d.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_function_1d.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    function_1d.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    Tue, Sept 23 1997    </span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    1d signal processing related routines    </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"> $Id: sinfo_function_1d.c,v 1.7 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Revision: 1.7 $</span>
-<a name="l00032"></a>00032 <span class="comment"> */</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Includes</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <math.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_fit_curve.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_median.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                                   Defines</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="comment">/*</span>
-<a name="l00058"></a>00058 <span class="comment"> * This parameter sets up the half size of the domain around which a</span>
-<a name="l00059"></a>00059 <span class="comment"> * centroid position will be computed.</span>
-<a name="l00060"></a>00060 <span class="comment"> */</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define HALF_CENTROID_DOMAIN    5</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                        Private function prototypes</span>
-<a name="l00064"></a>00064 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 <span class="keyword">static</span> <span class="keywordtype">double</span> * function1d_generate_smooth_kernel(<span class="keywordtype">int</span> filt_type, <span class="keywordtype">int</span> hw);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00068"></a>00068 function1d_search_value(
-<a name="l00069"></a>00069     pixelvalue  *   x,
-<a name="l00070"></a>00070     <span class="keywordtype">int</span>             len,
-<a name="l00071"></a>00071     pixelvalue      key,
-<a name="l00072"></a>00072     <span class="keywordtype">int</span>         *   foundPtr
-<a name="l00073"></a>00073 ) ;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00076"></a>00076 <span class="comment">                              Function codes</span>
-<a name="l00077"></a>00077 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00094"></a>00094 pixelvalue *
-<a name="l00095"></a>00095 sinfo_function1d_new(<span class="keywordtype">int</span> nsamples)
-<a name="l00096"></a>00096 {
-<a name="l00097"></a>00097     <span class="keywordflow">if</span> (nsamples<1) <span class="keywordflow">return</span> NULL ;
-<a name="l00098"></a>00098     <span class="keywordflow">return</span> cpl_calloc(nsamples, <span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00099"></a>00099 }
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 
-<a name="l00111"></a>00111 <span class="keywordtype">void</span> 
-<a name="l00112"></a>00112 sinfo_function1d_del(pixelvalue * s)
-<a name="l00113"></a>00113 {
-<a name="l00114"></a>00114     <span class="keywordflow">if</span> (s)
-<a name="l00115"></a>00115         cpl_free(s);
-<a name="l00116"></a>00116     return ;
-<a name="l00117"></a>00117 }
-<a name="l00118"></a>00118 
-<a name="l00135"></a>00135 pixelvalue * 
-<a name="l00136"></a>00136 sinfo_function1d_dup(pixelvalue * arr, <span class="keywordtype">int</span> ns)
-<a name="l00137"></a>00137 {
-<a name="l00138"></a>00138     pixelvalue    *    n_arr ;
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     n_arr = sinfo_function1d_new(ns);
-<a name="l00141"></a>00141     memcpy(n_arr, arr, ns * <span class="keyword">sizeof</span>(pixelvalue));
-<a name="l00142"></a>00142     <span class="keywordflow">return</span> n_arr ;
-<a name="l00143"></a>00143 }
-<a name="l00144"></a>00144 
-<a name="l00160"></a>00160 <span class="keywordtype">double</span>
-<a name="l00161"></a>00161 sinfo_function1d_find_centroid(
-<a name="l00162"></a>00162     pixelvalue    *    line,    <span class="comment">/*    the input line    */</span>
-<a name="l00163"></a>00163     <span class="keywordtype">int</span>    npix    <span class="comment">/*     number of pixels in this line    */</span>
-<a name="l00164"></a>00164 )
-<a name="l00165"></a>00165 {
-<a name="l00166"></a>00166     pixelvalue    max ;
-<a name="l00167"></a>00167     <span class="keywordtype">double</span>        centroid ;
-<a name="l00168"></a>00168     <span class="keywordtype">double</span>        weights ;
-<a name="l00169"></a>00169     <span class="keywordtype">int</span>            i, maxpos ;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171     <span class="comment">/*</span>
-<a name="l00172"></a>00172 <span class="comment">     * Search for the maximum pixel value on the line</span>
-<a name="l00173"></a>00173 <span class="comment">     */</span>
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     max = line[0] ;
-<a name="l00176"></a>00176     maxpos = 0 ;
-<a name="l00177"></a>00177     <span class="keywordflow">for</span> (i=1 ; i<npix ; i++) {
-<a name="l00178"></a>00178         <span class="keywordflow">if</span> (line[i]>max) {
-<a name="l00179"></a>00179             max = line[i] ;
-<a name="l00180"></a>00180             maxpos = i ;
-<a name="l00181"></a>00181         }
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="comment">/*</span>
-<a name="l00185"></a>00185 <span class="comment">     * The centroid position is the weighted average over the maximum </span>
-<a name="l00186"></a>00186 <span class="comment">     * pixel neighborhood.</span>
-<a name="l00187"></a>00187 <span class="comment">     */</span>
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     centroid = 0.0 ;
-<a name="l00190"></a>00190     weights  = 0.0 ;
-<a name="l00191"></a>00191     <span class="keywordflow">for</span> (i=maxpos-HALF_CENTROID_DOMAIN; 
-<a name="l00192"></a>00192             i<=maxpos+HALF_CENTROID_DOMAIN; i++) {
-<a name="l00193"></a>00193         centroid += (double)line[i] * (<span class="keywordtype">double</span>)i ;
-<a name="l00194"></a>00194         weights  += (double)line[i] ;
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     centroid /= weights ;
-<a name="l00198"></a>00198     <span class="keywordflow">return</span> centroid ;    
-<a name="l00199"></a>00199 }
-<a name="l00200"></a>00200 
-<a name="l00223"></a>00223 <span class="keywordtype">double</span>
-<a name="l00224"></a>00224 sinfo_function1d_find_locmax(
-<a name="l00225"></a>00225     pixelvalue    *    line,
-<a name="l00226"></a>00226     <span class="keywordtype">int</span>                npix,
-<a name="l00227"></a>00227     <span class="keywordtype">int</span>                where,
-<a name="l00228"></a>00228     <span class="keywordtype">int</span>                hs
-<a name="l00229"></a>00229 )
-<a name="l00230"></a>00230 {
-<a name="l00231"></a>00231     pixelvalue    max ;
-<a name="l00232"></a>00232     <span class="keywordtype">double</span>        centroid ;
-<a name="l00233"></a>00233     <span class="keywordtype">double</span>        weights ;
-<a name="l00234"></a>00234     <span class="keywordtype">int</span>            i, maxpos ;
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> ((where<hs) || (where>(npix-hs-1))) {
-<a name="l00238"></a>00238         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)-1.0 ;
-<a name="l00239"></a>00239     }
-<a name="l00240"></a>00240     
-<a name="l00241"></a>00241     <span class="comment">/*</span>
-<a name="l00242"></a>00242 <span class="comment">     * Search for the closest local maximal around the requested range.</span>
-<a name="l00243"></a>00243 <span class="comment">     */</span>
-<a name="l00244"></a>00244     max = line[where] ;
-<a name="l00245"></a>00245     maxpos = where ;
-<a name="l00246"></a>00246     <span class="keywordflow">for</span> (i=-hs ; i<=hs ; i++) {
-<a name="l00247"></a>00247         <span class="keywordflow">if</span> (line[where+i]>max) {
-<a name="l00248"></a>00248             max = line[where+i] ;
-<a name="l00249"></a>00249             maxpos = where+i ;
-<a name="l00250"></a>00250         }
-<a name="l00251"></a>00251     }
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     <span class="comment">/*</span>
-<a name="l00254"></a>00254 <span class="comment">     * The centroid position is the weighted average over the maximum </span>
-<a name="l00255"></a>00255 <span class="comment">     * pixel neighborhood.</span>
-<a name="l00256"></a>00256 <span class="comment">     */</span>
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258     centroid = 0.0 ;
-<a name="l00259"></a>00259     weights  = 0.0 ;
-<a name="l00260"></a>00260     <span class="keywordflow">for</span> (i=maxpos-hs; i<=maxpos+hs; i++) {
-<a name="l00261"></a>00261         centroid += (double)line[i] * (<span class="keywordtype">double</span>)i ;
-<a name="l00262"></a>00262         weights  += (double)line[i] ;
-<a name="l00263"></a>00263     }
-<a name="l00264"></a>00264     <span class="keywordflow">if</span> (fabs(weights)>1e-6) {
-<a name="l00265"></a>00265         centroid /= weights ;
-<a name="l00266"></a>00266     } <span class="keywordflow">else</span> {
-<a name="l00267"></a>00267         centroid = -1.0 ;
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269     <span class="keywordflow">return</span> centroid ;    
-<a name="l00270"></a>00270 }
-<a name="l00271"></a>00271 
-<a name="l00296"></a>00296 pixelvalue *
-<a name="l00297"></a>00297 sinfo_function1d_filter_lowpass(
-<a name="l00298"></a>00298     pixelvalue    *    input_sig,
-<a name="l00299"></a>00299     <span class="keywordtype">int</span>                samples,
-<a name="l00300"></a>00300     <span class="keywordtype">int</span>                filter_type,
-<a name="l00301"></a>00301     <span class="keywordtype">int</span>                hw
-<a name="l00302"></a>00302 )
-<a name="l00303"></a>00303 {
-<a name="l00304"></a>00304     pixelvalue    *    out_sig ;
-<a name="l00305"></a>00305     <span class="keywordtype">int</span>                i, j ;
-<a name="l00306"></a>00306     <span class="keywordtype">double</span>            replace ;
-<a name="l00307"></a>00307     <span class="keywordtype">double</span>        *    kernel ;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309     <span class="comment">/* allocate output signal */</span>
-<a name="l00310"></a>00310     out_sig = sinfo_function1d_new(samples);
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     <span class="comment">/* generate low-pass filter kernel */</span>
-<a name="l00313"></a>00313     kernel = function1d_generate_smooth_kernel(filter_type, hw) ;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     <span class="comment">/* compute sinfo_edge effects for the first hw elements */</span>
-<a name="l00316"></a>00316     <span class="keywordflow">for</span> (i=0 ; i<hw ; i++) {
-<a name="l00317"></a>00317         replace = 0.0 ;
-<a name="l00318"></a>00318         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {
-<a name="l00319"></a>00319             <span class="keywordflow">if</span> (i+j<0) {
-<a name="l00320"></a>00320                 replace += kernel[hw+j] * (double)input_sig[0] ;
-<a name="l00321"></a>00321             } <span class="keywordflow">else</span> {
-<a name="l00322"></a>00322                 replace += kernel[hw+j] * (double)input_sig[i+j] ;
-<a name="l00323"></a>00323             }
-<a name="l00324"></a>00324         }
-<a name="l00325"></a>00325         out_sig[i] = (pixelvalue)replace ;
-<a name="l00326"></a>00326     }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     <span class="comment">/* compute sinfo_edge effects for the last hw elements */</span>
-<a name="l00329"></a>00329     <span class="keywordflow">for</span> (i=samples-hw ; i<samples ; i++) {
-<a name="l00330"></a>00330         replace = 0.0 ;
-<a name="l00331"></a>00331         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {
-<a name="l00332"></a>00332             <span class="keywordflow">if</span> (i+j>samples-1) {
-<a name="l00333"></a>00333                 replace += kernel[hw+j] * (double)input_sig[samples-1] ;
-<a name="l00334"></a>00334             } <span class="keywordflow">else</span> {
-<a name="l00335"></a>00335                 replace += kernel[hw+j] * (double)input_sig[i+j] ;
-<a name="l00336"></a>00336             }
-<a name="l00337"></a>00337         }
-<a name="l00338"></a>00338         out_sig[i] = (pixelvalue)replace ;
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     <span class="comment">/* compute all other elements */</span>
-<a name="l00342"></a>00342     <span class="keywordflow">for</span> (i=hw ; i<samples-hw ; i++) {
-<a name="l00343"></a>00343         replace = 0.0 ;
-<a name="l00344"></a>00344         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {
-<a name="l00345"></a>00345             replace += kernel[hw+j] * (double)input_sig[i+j] ;
-<a name="l00346"></a>00346         }
-<a name="l00347"></a>00347         out_sig[i] = (pixelvalue)replace ;
-<a name="l00348"></a>00348     }
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350     cpl_free(kernel) ;
-<a name="l00351"></a>00351     <span class="keywordflow">return</span> out_sig ;
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 }
-<a name="l00354"></a>00354 
-<a name="l00371"></a>00371 <span class="keyword">static</span> <span class="keywordtype">double</span> * 
-<a name="l00372"></a>00372 function1d_generate_smooth_kernel(<span class="keywordtype">int</span> filt_type, <span class="keywordtype">int</span> hw)
-<a name="l00373"></a>00373 {
-<a name="l00374"></a>00374     <span class="keywordtype">double</span>  *   kernel ;
-<a name="l00375"></a>00375     <span class="keywordtype">double</span>      norm ;
-<a name="l00376"></a>00376     <span class="keywordtype">int</span>         i ;
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     kernel = (<span class="keywordtype">double</span>*)cpl_calloc(2*hw+1, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380     <span class="keywordflow">switch</span>(filt_type) {
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382         <span class="keywordflow">case</span> LOW_PASS_LINEAR:
-<a name="l00383"></a>00383         <span class="keywordflow">for</span> (i=-hw ; i<=hw ; i++) {
-<a name="l00384"></a>00384             <span class="comment">/* flat kernel */</span>
-<a name="l00385"></a>00385             kernel[hw+i] = 1.0 / (double)(2*hw+1) ;
-<a name="l00386"></a>00386         }
-<a name="l00387"></a>00387         break ;
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389         <span class="keywordflow">case</span> LOW_PASS_GAUSSIAN:
-<a name="l00390"></a>00390         norm = 0.00 ;
-<a name="l00391"></a>00391         <span class="keywordflow">for</span> (i=-hw ; i<=hw ; i++) {
-<a name="l00392"></a>00392             <span class="comment">/* sinfo_gaussian kernel */</span>
-<a name="l00393"></a>00393             kernel[hw+i] = exp(-(<span class="keywordtype">double</span>)(i*i)) ;
-<a name="l00394"></a>00394             norm += kernel[hw+i] ;
-<a name="l00395"></a>00395         }
-<a name="l00396"></a>00396         <span class="keywordflow">for</span> (i=0 ; i<2*hw+1 ; i++) {
-<a name="l00397"></a>00397             kernel[i] /= norm ;
-<a name="l00398"></a>00398         }
-<a name="l00399"></a>00399         break ;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401         <span class="keywordflow">default</span>:
-<a name="l00402"></a>00402         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized low pass filter: "</span>
-<a name="l00403"></a>00403                                 <span class="stringliteral">"cannot generate kernel"</span>) ;
-<a name="l00404"></a>00404         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>*)NULL ;
-<a name="l00405"></a>00405         break ;
-<a name="l00406"></a>00406     }
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     <span class="keywordflow">return</span> kernel ;
-<a name="l00409"></a>00409 }
-<a name="l00410"></a>00410 
-<a name="l00429"></a>00429 pixelvalue * 
-<a name="l00430"></a>00430 sinfo_function1d_median_smooth(
-<a name="l00431"></a>00431     pixelvalue * list,
-<a name="l00432"></a>00432     <span class="keywordtype">int</span>          np,
-<a name="l00433"></a>00433     <span class="keywordtype">int</span>             hw)
-<a name="l00434"></a>00434 {
-<a name="l00435"></a>00435     <span class="keywordtype">int</span>             i,j ;
-<a name="l00436"></a>00436     pixelvalue    *    row ;
-<a name="l00437"></a>00437     pixelvalue    *     smoothed ;
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439     <span class="comment">/* simply copy first 3 and last 3 items */</span>
-<a name="l00440"></a>00440     smoothed = sinfo_function1d_new(np);
-<a name="l00441"></a>00441     <span class="keywordflow">for</span> (i=0 ; i<hw ; i++) {
-<a name="l00442"></a>00442         smoothed[i] = list[i] ;
-<a name="l00443"></a>00443     }
-<a name="l00444"></a>00444     <span class="keywordflow">for</span> (i=np-hw ; i<np ; i++) {
-<a name="l00445"></a>00445         smoothed[i] = list[i] ;
-<a name="l00446"></a>00446     }
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448     <span class="comment">/* sinfo_median filter on all central items */</span>
-<a name="l00449"></a>00449     row = sinfo_function1d_new(2*hw+1);
-<a name="l00450"></a>00450     <span class="keywordflow">for</span> (i=hw ; i<np-hw ; i++) {
-<a name="l00451"></a>00451         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {
-<a name="l00452"></a>00452             row[j+hw] = list[i+j] ;
-<a name="l00453"></a>00453         }
-<a name="l00454"></a>00454         smoothed[i] = sinfo_median_pixelvalue(row, 2*hw+1) ; 
-<a name="l00455"></a>00455     }
-<a name="l00456"></a>00456     sinfo_function1d_del(row) ;
-<a name="l00457"></a>00457     <span class="keywordflow">return</span> smoothed ;
-<a name="l00458"></a>00458 }
-<a name="l00459"></a>00459 
-<a name="l00476"></a>00476 <span class="preprocessor">#define LOWFREQ_PASSES        5</span>
-<a name="l00477"></a>00477 <span class="preprocessor"></span>
-<a name="l00478"></a>00478 pixelvalue * 
-<a name="l00479"></a>00479 sinfo_function1d_remove_lowfreq(
-<a name="l00480"></a>00480     pixelvalue * pixel_signal,
-<a name="l00481"></a>00481     <span class="keywordtype">int</span>             ns)
-<a name="l00482"></a>00482 {
-<a name="l00483"></a>00483     pixelvalue    *    sig_in ;
-<a name="l00484"></a>00484     pixelvalue    *    smooth ;
-<a name="l00485"></a>00485     <span class="keywordtype">int</span>                i ;
-<a name="l00486"></a>00486     
-<a name="l00487"></a>00487     
-<a name="l00488"></a>00488     <span class="comment">/* Apply severe low-pass filter several times */</span>
-<a name="l00489"></a>00489     sig_in = sinfo_function1d_dup(pixel_signal, ns);
-<a name="l00490"></a>00490     <span class="keywordflow">for</span> (i=0 ; i<LOWFREQ_PASSES ; i++) {
-<a name="l00491"></a>00491         smooth = sinfo_function1d_filter_lowpass( sig_in, ns, 
-<a name="l00492"></a>00492                          LOW_PASS_LINEAR, 5);
-<a name="l00493"></a>00493         cpl_free(sig_in);
-<a name="l00494"></a>00494         sig_in = smooth ;
-<a name="l00495"></a>00495     }
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497     <span class="comment">/* Subtract smoothed signal from input signal */</span>
-<a name="l00498"></a>00498     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {
-<a name="l00499"></a>00499         smooth[i] = pixel_signal[i] - smooth[i];
-<a name="l00500"></a>00500     }
-<a name="l00501"></a>00501     <span class="keywordflow">return</span> smooth ;
-<a name="l00502"></a>00502 }
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504 <span class="preprocessor">#undef LOWFREQ_PASSES</span>
-<a name="l00505"></a>00505 <span class="preprocessor"></span>
-<a name="l00527"></a>00527 <span class="preprocessor">#define SAMPLE_BORDER    10</span>
-<a name="l00528"></a>00528 <span class="preprocessor"></span>
-<a name="l00529"></a>00529 pixelvalue * 
-<a name="l00530"></a>00530 sinfo_function1d_remove_thermalbg(
-<a name="l00531"></a>00531     pixelvalue * pixel_signal,
-<a name="l00532"></a>00532     <span class="keywordtype">int</span>             ns)
-<a name="l00533"></a>00533 {
-<a name="l00534"></a>00534     pixelvalue    *    smooth ;
-<a name="l00535"></a>00535     <span class="keywordtype">int</span>                i ;
-<a name="l00536"></a>00536     
-<a name="l00537"></a>00537     <span class="keywordtype">int</span>                nmin ;
-<a name="l00538"></a>00538     pixelvalue        lef[2], rig[2];
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540     pixelvalue    *    x,
-<a name="l00541"></a>00541                 *    y,
-<a name="l00542"></a>00542                 *    spl_x,
-<a name="l00543"></a>00543                 *    spl_y ;
-<a name="l00544"></a>00544     <span class="keywordtype">double</span>            med_y ;
-<a name="l00545"></a>00545     <span class="keywordtype">double</span>            avg2med ;
-<a name="l00546"></a>00546     <span class="keywordtype">double</span>            dist ;
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548     
-<a name="l00549"></a>00549     <span class="comment">/* Detect all local minima */</span>
-<a name="l00550"></a>00550     nmin = 0 ;
-<a name="l00551"></a>00551     x = sinfo_function1d_new(ns);
-<a name="l00552"></a>00552     y = sinfo_function1d_new(ns);
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554     <span class="keywordflow">for</span> (i=SAMPLE_BORDER ; i<(ns-SAMPLE_BORDER) ; i++) {
-<a name="l00555"></a>00555         lef[0] = pixel_signal[i-2];
-<a name="l00556"></a>00556         lef[1] = pixel_signal[i-1];
-<a name="l00557"></a>00557         rig[0] = pixel_signal[i+1];
-<a name="l00558"></a>00558         rig[1] = pixel_signal[i+2];
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560         <span class="keywordflow">if</span> ( (pixel_signal[i] < lef[0]) &&
-<a name="l00561"></a>00561              (pixel_signal[i] < lef[1]) &&
-<a name="l00562"></a>00562              (pixel_signal[i] < rig[0]) &&
-<a name="l00563"></a>00563              (pixel_signal[i] < rig[1])) {
-<a name="l00564"></a>00564             x[nmin] = (pixelvalue)i ;
-<a name="l00565"></a>00565             y[nmin] = pixel_signal[i];
-<a name="l00566"></a>00566             nmin ++ ;
-<a name="l00567"></a>00567         }
-<a name="l00568"></a>00568     }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571     <span class="comment">/* Interpolate linearly missing values */</span>
-<a name="l00572"></a>00572     spl_x = sinfo_function1d_new(ns);
-<a name="l00573"></a>00573     spl_y = sinfo_function1d_new(ns);
-<a name="l00574"></a>00574     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {
-<a name="l00575"></a>00575         spl_x[i] = (pixelvalue)i ;
-<a name="l00576"></a>00576     }
-<a name="l00577"></a>00577     sinfo_function1d_interpolate_linear(x, y, nmin, spl_x, spl_y, ns);
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579     sinfo_function1d_del(x) ;
-<a name="l00580"></a>00580     sinfo_function1d_del(y) ;
-<a name="l00581"></a>00581     sinfo_function1d_del(spl_x);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583     <span class="comment">/* Compute sinfo_median and average distance to the sinfo_median */</span>
-<a name="l00584"></a>00584     med_y = (double)sinfo_median_pixelvalue(pixel_signal, ns);
-<a name="l00585"></a>00585     avg2med = 0.0 ;
-<a name="l00586"></a>00586     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {
-<a name="l00587"></a>00587         avg2med += fabs((<span class="keywordtype">double</span>)pixel_signal[i] - med_y) ;
-<a name="l00588"></a>00588     }
-<a name="l00589"></a>00589     avg2med /= (double)ns ;
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591     <span class="comment">/* Reset all pixels out of sinfo_median + 2 * avg2med to zero. */</span>
-<a name="l00592"></a>00592     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {
-<a name="l00593"></a>00593         dist = fabs((<span class="keywordtype">double</span>)pixel_signal[i] - med_y);
-<a name="l00594"></a>00594         <span class="keywordflow">if</span> (dist > (2.0*avg2med)) {
-<a name="l00595"></a>00595             spl_y[i] = (pixelvalue)0 ;
-<a name="l00596"></a>00596         }
-<a name="l00597"></a>00597     }
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599 
-<a name="l00600"></a>00600     smooth = sinfo_function1d_new(ns);
-<a name="l00601"></a>00601     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {
-<a name="l00602"></a>00602         <span class="keywordflow">if</span> (spl_y[i]>1e-4) {
-<a name="l00603"></a>00603             smooth[i] = pixel_signal[i] - spl_y[i];
-<a name="l00604"></a>00604         } <span class="keywordflow">else</span> {
-<a name="l00605"></a>00605             smooth[i] = 0.0 ;
-<a name="l00606"></a>00606         }
-<a name="l00607"></a>00607     }
-<a name="l00608"></a>00608     sinfo_function1d_del(spl_y);
-<a name="l00609"></a>00609     <span class="keywordflow">return</span> smooth ;
-<a name="l00610"></a>00610 }
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612 <span class="preprocessor">#undef LOWFREQ_PASSES</span>
-<a name="l00613"></a>00613 <span class="preprocessor"></span>
-<a name="l00635"></a>00635 <span class="keywordtype">void</span> 
-<a name="l00636"></a>00636 sinfo_function1d_interpolate_linear(
-<a name="l00637"></a>00637     pixelvalue    *    x,
-<a name="l00638"></a>00638     pixelvalue    *    y,
-<a name="l00639"></a>00639     <span class="keywordtype">int</span>                len,
-<a name="l00640"></a>00640     pixelvalue    *    spl_x,
-<a name="l00641"></a>00641     pixelvalue    *    spl_y,
-<a name="l00642"></a>00642     <span class="keywordtype">int</span>                spl_len
-<a name="l00643"></a>00643 )
-<a name="l00644"></a>00644 {
-<a name="l00645"></a>00645     <span class="keywordtype">double</span>        a, b ;
-<a name="l00646"></a>00646     <span class="keywordtype">int</span>            i, j ;
-<a name="l00647"></a>00647     <span class="keywordtype">int</span>            found ;
-<a name="l00648"></a>00648 
-<a name="l00649"></a>00649     <span class="keywordflow">for</span> (i=0 ; i<spl_len ; i++) {
-<a name="l00650"></a>00650         <span class="comment">/* Find (x1,y1) on the left of the current point */</span>
-<a name="l00651"></a>00651         found = 0 ;
-<a name="l00652"></a>00652         <span class="keywordflow">for</span> (j=0 ; j<(len-1) ; j++) {
-<a name="l00653"></a>00653             <span class="keywordflow">if</span> ((spl_x[i]>=x[j]) && (spl_x[i]<=x[j+1])) {
-<a name="l00654"></a>00654                 found++ ;
-<a name="l00655"></a>00655                 break ;
-<a name="l00656"></a>00656             }
-<a name="l00657"></a>00657         }
-<a name="l00658"></a>00658         <span class="keywordflow">if</span> (!found) {
-<a name="l00659"></a>00659             spl_y[i] = 0.0;
-<a name="l00660"></a>00660         } <span class="keywordflow">else</span> {
-<a name="l00661"></a>00661             a = ((double)y[j+1]-(<span class="keywordtype">double</span>)y[j]) /
-<a name="l00662"></a>00662                 ((<span class="keywordtype">double</span>)x[j+1]-(double)x[j]);
-<a name="l00663"></a>00663             b = (double)y[j] - a * (<span class="keywordtype">double</span>)x[j] ;
-<a name="l00664"></a>00664             spl_y[i] = (pixelvalue)(a * (<span class="keywordtype">double</span>)spl_x[i] + b) ;
-<a name="l00665"></a>00665         }
-<a name="l00666"></a>00666     }
-<a name="l00667"></a>00667     return ;
-<a name="l00668"></a>00668 }
-<a name="l00669"></a>00669 
-<a name="l00686"></a>00686 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00687"></a>00687 function1d_search_value(
-<a name="l00688"></a>00688     pixelvalue    *    x,
-<a name="l00689"></a>00689     <span class="keywordtype">int</span>             len,
-<a name="l00690"></a>00690     pixelvalue         key,
-<a name="l00691"></a>00691     <span class="keywordtype">int</span>         *    foundPtr
-<a name="l00692"></a>00692 )
-<a name="l00693"></a>00693 {
-<a name="l00694"></a>00694     <span class="keywordtype">int</span>    high,
-<a name="l00695"></a>00695         low,
-<a name="l00696"></a>00696         middle;
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698     low  = 0;
-<a name="l00699"></a>00699     high = len - 1;
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701     <span class="keywordflow">while</span> (high >= low) {
-<a name="l00702"></a>00702         middle = (high + low) / 2;
-<a name="l00703"></a>00703         <span class="keywordflow">if</span> (key > x[middle]) {
-<a name="l00704"></a>00704             low = middle + 1;
-<a name="l00705"></a>00705         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key < x[middle]) {
-<a name="l00706"></a>00706             high = middle - 1;
-<a name="l00707"></a>00707         } <span class="keywordflow">else</span> {
-<a name="l00708"></a>00708             *foundPtr = 1;
-<a name="l00709"></a>00709             <span class="keywordflow">return</span> (middle);
-<a name="l00710"></a>00710         }
-<a name="l00711"></a>00711     }
-<a name="l00712"></a>00712     *foundPtr = 0;
-<a name="l00713"></a>00713     <span class="keywordflow">return</span> (low);
-<a name="l00714"></a>00714 }
-<a name="l00715"></a>00715 
-<a name="l00741"></a>00741 <span class="keywordtype">int</span>
-<a name="l00742"></a>00742 sinfo_function1d_natural_spline(
-<a name="l00743"></a>00743     pixelvalue    *     x,
-<a name="l00744"></a>00744     pixelvalue    *     y,
-<a name="l00745"></a>00745     <span class="keywordtype">int</span>             len,
-<a name="l00746"></a>00746     pixelvalue    *     splX,
-<a name="l00747"></a>00747     pixelvalue    *     splY,
-<a name="l00748"></a>00748     <span class="keywordtype">int</span>             splLen
-<a name="l00749"></a>00749 )
-<a name="l00750"></a>00750 {
-<a name="l00751"></a>00751     <span class="keywordtype">int</span>             end;
-<a name="l00752"></a>00752     <span class="keywordtype">int</span>             loc,
-<a name="l00753"></a>00753                     found;
-<a name="l00754"></a>00754     <span class="keyword">register</span> <span class="keywordtype">int</span>     i,
-<a name="l00755"></a>00755                     j,
-<a name="l00756"></a>00756                     n;
-<a name="l00757"></a>00757     <span class="keywordtype">double</span>         *    h; <span class="comment">/* sinfo_vector of deltas in x */</span>
-<a name="l00758"></a>00758     <span class="keywordtype">double</span>         *    alpha;
-<a name="l00759"></a>00759     <span class="keywordtype">double</span>         *    l,
-<a name="l00760"></a>00760                 *    mu,
-<a name="l00761"></a>00761                 *    z,
-<a name="l00762"></a>00762                 *    a,
-<a name="l00763"></a>00763                 *    b,
-<a name="l00764"></a>00764                 *    c,
-<a name="l00765"></a>00765                 *    d,
-<a name="l00766"></a>00766                     v;
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768     end = len - 1;
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770     a = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * splLen * 9) ;
-<a name="l00771"></a>00771     b = a + len;
-<a name="l00772"></a>00772     c = b + len;
-<a name="l00773"></a>00773     d = c + len;
-<a name="l00774"></a>00774     h = d + len;
-<a name="l00775"></a>00775     l = h + len;
-<a name="l00776"></a>00776     z = l + len;
-<a name="l00777"></a>00777     mu = z + len;
-<a name="l00778"></a>00778     alpha = mu + len;
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780     <span class="keywordflow">for</span> (i = 0; i < len; i++) {
-<a name="l00781"></a>00781         a[i] = (double)y[i];
-<a name="l00782"></a>00782     }
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784     <span class="comment">/* Calculate sinfo_vector of differences */</span>
-<a name="l00785"></a>00785     <span class="keywordflow">for</span> (i = 0; i < end; i++) {
-<a name="l00786"></a>00786         h[i] = (double)x[i + 1] - (<span class="keywordtype">double</span>)x[i];
-<a name="l00787"></a>00787         <span class="keywordflow">if</span> (h[i] < 0.0) {
-<a name="l00788"></a>00788             cpl_free(a) ;
-<a name="l00789"></a>00789             <span class="keywordflow">return</span> -1;
-<a name="l00790"></a>00790         }
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793     <span class="comment">/* Calculate alpha sinfo_vector */</span>
-<a name="l00794"></a>00794     <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {
-<a name="l00795"></a>00795         <span class="comment">/* n = i - 1 */</span>
-<a name="l00796"></a>00796         alpha[i] = 3.0 * ((a[i+1] / h[i]) - (a[i] / h[n]) - (a[i] / h[i]) +
-<a name="l00797"></a>00797                   (a[n] / h[n]));
-<a name="l00798"></a>00798     }
-<a name="l00799"></a>00799 
-<a name="l00800"></a>00800     <span class="comment">/* Vectors to solve the tridiagonal sinfo_matrix */</span>
-<a name="l00801"></a>00801     l[0] = l[end] = 1.0;
-<a name="l00802"></a>00802     mu[0] = mu[end] = 0.0;
-<a name="l00803"></a>00803     z[0] = z[end] = 0.0;
-<a name="l00804"></a>00804     c[0] = c[end] = 0.0;
-<a name="l00805"></a>00805 
-<a name="l00806"></a>00806     <span class="comment">/* Calculate the intermediate results */</span>
-<a name="l00807"></a>00807     <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {
-<a name="l00808"></a>00808         <span class="comment">/* n = i-1 */</span>
-<a name="l00809"></a>00809         l[i] = 2 * (h[i] + h[n]) - h[n] * mu[n];
-<a name="l00810"></a>00810         mu[i] = h[i] / l[i];
-<a name="l00811"></a>00811         z[i] = (alpha[i] - h[n] * z[n]) / l[i];
-<a name="l00812"></a>00812     }
-<a name="l00813"></a>00813     <span class="keywordflow">for</span> (n = end, j = end - 1; j >= 0; j--, n--) {
-<a name="l00814"></a>00814         <span class="comment">/* n = j + 1 */</span>
-<a name="l00815"></a>00815         c[j] = z[j] - mu[j] * c[n];
-<a name="l00816"></a>00816         b[j] = (a[n] - a[j]) / h[j] - h[j] * (c[n] + 2.0 * c[j]) / 3.0;
-<a name="l00817"></a>00817         d[j] = (c[n] - c[j]) / (3.0 * h[j]);
-<a name="l00818"></a>00818     }
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820     <span class="comment">/* Now calculate the new values */</span>
-<a name="l00821"></a>00821     <span class="keywordflow">for</span> (j = 0; j < splLen; j++) {
-<a name="l00822"></a>00822          v = (double)splX[j];
-<a name="l00823"></a>00823      splY[j] = (pixelvalue)0;
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825      <span class="comment">/* Is it outside the interval? */</span>
-<a name="l00826"></a>00826      <span class="keywordflow">if</span> ((v < (<span class="keywordtype">double</span>)x[0]) || (v > (<span class="keywordtype">double</span>)x[end])) {
-<a name="l00827"></a>00827         <span class="keywordflow">continue</span>;
-<a name="l00828"></a>00828      }
-<a name="l00829"></a>00829      <span class="comment">/* Search for the interval containing v in the x sinfo_vector */</span>
-<a name="l00830"></a>00830      loc = function1d_search_value(x, len, (pixelvalue)v, &found);
-<a name="l00831"></a>00831      <span class="keywordflow">if</span> (found) {
-<a name="l00832"></a>00832         splY[j] = y[loc];
-<a name="l00833"></a>00833      } <span class="keywordflow">else</span> {
-<a name="l00834"></a>00834         loc--;
-<a name="l00835"></a>00835         v -= (double)x[loc];
-<a name="l00836"></a>00836         splY[j] = (pixelvalue)(    a[loc] +
-<a name="l00837"></a>00837                         v * (b[loc] +
-<a name="l00838"></a>00838                    v * (c[loc] +
-<a name="l00839"></a>00839                     v * d[loc])));
-<a name="l00840"></a>00840         }
-<a name="l00841"></a>00841     }
-<a name="l00842"></a>00842     cpl_free(a) ;
-<a name="l00843"></a>00843     <span class="keywordflow">return</span> 0;
-<a name="l00844"></a>00844 }
-<a name="l00845"></a>00845 
-<a name="l00864"></a>00864 pixelvalue
-<a name="l00865"></a>00865 sinfo_function1d_average_reject(
-<a name="l00866"></a>00866     pixelvalue    *    line,
-<a name="l00867"></a>00867     <span class="keywordtype">int</span>                npix,
-<a name="l00868"></a>00868     <span class="keywordtype">int</span>                pix_low,
-<a name="l00869"></a>00869     <span class="keywordtype">int</span>                pix_high)
-<a name="l00870"></a>00870 {
-<a name="l00871"></a>00871     pixelvalue    *    sorted ;
-<a name="l00872"></a>00872     <span class="keywordtype">int</span>                i ;
-<a name="l00873"></a>00873     <span class="keywordtype">double</span>            avg ;
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875     <span class="comment">/* Sanity tests */</span>
-<a name="l00876"></a>00876     <span class="keywordflow">if</span> ((line==NULL) || (npix<1)) <span class="keywordflow">return</span> (pixelvalue)0 ;
-<a name="l00877"></a>00877     <span class="keywordflow">if</span> ((pix_low+pix_high)>=npix) <span class="keywordflow">return</span> (pixelvalue)0 ;
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879     <span class="comment">/* Copy input line and sort it */</span>
-<a name="l00880"></a>00880     sorted = cpl_malloc(npix * <span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00881"></a>00881     memcpy(sorted, line, npix * <span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00882"></a>00882     sinfo_pixel_qsort(sorted, npix);
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884     <span class="comment">/* Find out average of remaining values */</span>
-<a name="l00885"></a>00885     avg = 0.00 ;
-<a name="l00886"></a>00886     <span class="keywordflow">for</span> (i=pix_low+1 ; i<(npix-pix_high) ; i++) {
-<a name="l00887"></a>00887         avg += (double)sorted[i] ;
-<a name="l00888"></a>00888     }
-<a name="l00889"></a>00889     cpl_free(sorted);
-<a name="l00890"></a>00890     avg /= (double)(npix - pix_high - pix_low) ;
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892     <span class="keywordflow">return</span> (pixelvalue)avg ;
-<a name="l00893"></a>00893 }
-<a name="l00894"></a>00894 
-<a name="l00920"></a>00920 <span class="preprocessor">#define STEP_MIN    (-half_search)</span>
-<a name="l00921"></a>00921 <span class="preprocessor"></span><span class="preprocessor">#define STEP_MAX    (half_search)</span>
-<a name="l00922"></a>00922 <span class="preprocessor"></span>
-<a name="l00923"></a>00923 <span class="keywordtype">double</span> 
-<a name="l00924"></a>00924 sinfo_function1d_xcorrelate(
-<a name="l00925"></a>00925     pixelvalue *    line_i,
-<a name="l00926"></a>00926     <span class="keywordtype">int</span>             width_i,
-<a name="l00927"></a>00927     pixelvalue *    line_t,
-<a name="l00928"></a>00928     <span class="keywordtype">int</span>             width_t,
-<a name="l00929"></a>00929     <span class="keywordtype">int</span>                half_search,
-<a name="l00930"></a>00930     <span class="keywordtype">double</span>     *    delta
-<a name="l00931"></a>00931 )
-<a name="l00932"></a>00932 {
-<a name="l00933"></a>00933     <span class="keywordtype">double</span> * xcorr ;
-<a name="l00934"></a>00934     <span class="keywordtype">double</span>   xcorr_max ;
-<a name="l00935"></a>00935     <span class="keywordtype">double</span>   mean_i, mean_t ;
-<a name="l00936"></a>00936     <span class="keywordtype">double</span>   rms_i, rms_t ;
-<a name="l00937"></a>00937     <span class="keywordtype">double</span>   sum, sqsum ;
-<a name="l00938"></a>00938     <span class="keywordtype">double</span>   norm ;
-<a name="l00939"></a>00939     <span class="keywordtype">int</span>      maxpos ;
-<a name="l00940"></a>00940     <span class="keywordtype">int</span>      nsteps ;
-<a name="l00941"></a>00941     <span class="keywordtype">int</span>      i ;
-<a name="l00942"></a>00942     <span class="keywordtype">int</span>      step ;
-<a name="l00943"></a>00943     <span class="keywordtype">int</span>      nval ;
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946     <span class="comment">/* Compute normalization factors */</span>
-<a name="l00947"></a>00947     sum = sqsum = 0.00 ;
-<a name="l00948"></a>00948     <span class="keywordflow">for</span> (i=0 ; i<width_i ; i++) {
-<a name="l00949"></a>00949         sum += (double)line_i[i] ;
-<a name="l00950"></a>00950         sqsum += (double)line_i[i] * (<span class="keywordtype">double</span>)line_i[i];
-<a name="l00951"></a>00951     }
-<a name="l00952"></a>00952     mean_i = sum / (double)width_i ;
-<a name="l00953"></a>00953     sqsum /= (double)width_i ;
-<a name="l00954"></a>00954     rms_i = sqsum - mean_i*mean_i ;
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     sum = sqsum = 0.00 ;
-<a name="l00957"></a>00957     <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {
-<a name="l00958"></a>00958         sum += (double)line_t[i] ;
-<a name="l00959"></a>00959         sqsum += (double)line_t[i] * (<span class="keywordtype">double</span>)line_t[i];
-<a name="l00960"></a>00960     }
-<a name="l00961"></a>00961     mean_t = sum / (double)width_t ;
-<a name="l00962"></a>00962     sqsum /= (double)width_t ;
-<a name="l00963"></a>00963     rms_t = sqsum - mean_t*mean_t ;
-<a name="l00964"></a>00964 
-<a name="l00965"></a>00965     norm = 1.00 / sqrt(rms_i * rms_t);
-<a name="l00966"></a>00966 
-<a name="l00967"></a>00967     nsteps = (STEP_MAX - STEP_MIN) +1 ;
-<a name="l00968"></a>00968     xcorr = cpl_malloc(nsteps * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00969"></a>00969     <span class="keywordflow">for</span> (step=STEP_MIN ; step<=STEP_MAX ; step++) {
-<a name="l00970"></a>00970         xcorr[step-STEP_MIN] = 0.00 ;
-<a name="l00971"></a>00971         nval = 0 ;
-<a name="l00972"></a>00972         <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {
-<a name="l00973"></a>00973             <span class="keywordflow">if</span> ((i+step > 0) &&
-<a name="l00974"></a>00974                 (i+step < width_i)) {
-<a name="l00975"></a>00975             xcorr[step-STEP_MIN] += ((double)line_t[i] - mean_t) *
-<a name="l00976"></a>00976                                     ((double)line_i[i+step] - mean_i) *
-<a name="l00977"></a>00977                                     norm ;
-<a name="l00978"></a>00978                 nval++ ;
-<a name="l00979"></a>00979             }
-<a name="l00980"></a>00980         }
-<a name="l00981"></a>00981         xcorr[step-STEP_MIN] /= (double)nval ;
-<a name="l00982"></a>00982     }
-<a name="l00983"></a>00983     xcorr_max = xcorr[0] ;
-<a name="l00984"></a>00984     maxpos    = 0 ;
-<a name="l00985"></a>00985     <span class="keywordflow">for</span> (i=0 ; i<nsteps ; i++) {
-<a name="l00986"></a>00986         <span class="keywordflow">if</span> (xcorr[i]>xcorr_max) {
-<a name="l00987"></a>00987             maxpos = i ;
-<a name="l00988"></a>00988             xcorr_max = xcorr[i];
-<a name="l00989"></a>00989         }
-<a name="l00990"></a>00990     }
-<a name="l00991"></a>00991     cpl_free(xcorr);
-<a name="l00992"></a>00992     (*delta) = + ((double)STEP_MIN + (<span class="keywordtype">double</span>)maxpos);
-<a name="l00993"></a>00993     <span class="keywordflow">return</span> xcorr_max ;
-<a name="l00994"></a>00994 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_function_1d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    function_1d.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    Tue, Sept 23 1997    </span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    1d signal processing related routines    </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Id: sinfo_function_1d.c,v 1.7 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_fit_curve.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_median.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> * This parameter sets up the half size of the domain around which a</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * centroid position will be computed.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define HALF_CENTROID_DOMAIN    5</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                        Private function prototypes</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">static</span> <span class="keywordtype">double</span> * function1d_generate_smooth_kernel(<span class="keywordtype">int</span> filt_type, <span class="keywordtype">int</span> hw);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> function1d_search_value(</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     pixelvalue  *   x,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     pixelvalue      key,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">int</span>         *   foundPtr</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> ) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> pixelvalue *</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> sinfo_function1d_new(<span class="keywordtype">int</span> nsamples)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordflow">if</span> (nsamples<1) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">return</span> cpl_calloc(nsamples, <span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> sinfo_function1d_del(pixelvalue * s)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">if</span> (s)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         cpl_free(s);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     return ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> pixelvalue * </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> sinfo_function1d_dup(pixelvalue * arr, <span class="keywordtype">int</span> ns)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     pixelvalue    *    n_arr ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     n_arr = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     memcpy(n_arr, arr, ns * <span class="keyword">sizeof</span>(pixelvalue));</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">return</span> n_arr ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> sinfo_function1d_find_centroid(</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     pixelvalue    *    line,    <span class="comment">/*    the input line    */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">int</span>    npix    <span class="comment">/*     number of pixels in this line    */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> )</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> {</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     pixelvalue    max ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">double</span>        centroid ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordtype">double</span>        weights ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordtype">int</span>            i, maxpos ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">     * Search for the maximum pixel value on the line</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     max = line[0] ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     maxpos = 0 ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">for</span> (i=1 ; i<npix ; i++) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         <span class="keywordflow">if</span> (line[i]>max) {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>             max = line[i] ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             maxpos = i ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">     * The centroid position is the weighted average over the maximum </span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">     * pixel neighborhood.</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     centroid = 0.0 ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     weights  = 0.0 ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">for</span> (i=maxpos-HALF_CENTROID_DOMAIN; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>             i<=maxpos+HALF_CENTROID_DOMAIN; i++) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         centroid += (double)line[i] * (<span class="keywordtype">double</span>)i ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         weights  += (double)line[i] ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     centroid /= weights ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">return</span> centroid ;    </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> sinfo_function1d_find_locmax(</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     pixelvalue    *    line,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordtype">int</span>                npix,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordtype">int</span>                where,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordtype">int</span>                hs</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> )</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     pixelvalue    max ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordtype">double</span>        centroid ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">double</span>        weights ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordtype">int</span>            i, maxpos ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> ((where<hs) || (where>(npix-hs-1))) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)-1.0 ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">     * Search for the closest local maximal around the requested range.</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     max = line[where] ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     maxpos = where ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">for</span> (i=-hs ; i<=hs ; i++) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         <span class="keywordflow">if</span> (line[where+i]>max) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>             max = line[where+i] ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>             maxpos = where+i ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">     * The centroid position is the weighted average over the maximum </span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">     * pixel neighborhood.</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     centroid = 0.0 ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     weights  = 0.0 ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">for</span> (i=maxpos-hs; i<=maxpos+hs; i++) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         centroid += (double)line[i] * (<span class="keywordtype">double</span>)i ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         weights  += (double)line[i] ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="keywordflow">if</span> (fabs(weights)>1e-6) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         centroid /= weights ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         centroid = -1.0 ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordflow">return</span> centroid ;    </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> pixelvalue *</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> sinfo_function1d_filter_lowpass(</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     pixelvalue    *    input_sig,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordtype">int</span>                samples,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">int</span>                filter_type,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordtype">int</span>                hw</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> )</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     pixelvalue    *    out_sig ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordtype">int</span>                i, j ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordtype">double</span>            replace ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordtype">double</span>        *    kernel ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="comment">/* allocate output signal */</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     out_sig = sinfo_function1d_new(samples);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="comment">/* generate low-pass filter kernel */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     kernel = function1d_generate_smooth_kernel(filter_type, hw) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="comment">/* compute sinfo_edge effects for the first hw elements */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">for</span> (i=0 ; i<hw ; i++) {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         replace = 0.0 ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>             <span class="keywordflow">if</span> (i+j<0) {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                 replace += kernel[hw+j] * (double)input_sig[0] ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                 replace += kernel[hw+j] * (double)input_sig[i+j] ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         out_sig[i] = (pixelvalue)replace ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="comment">/* compute sinfo_edge effects for the last hw elements */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">for</span> (i=samples-hw ; i<samples ; i++) {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         replace = 0.0 ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>             <span class="keywordflow">if</span> (i+j>samples-1) {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                 replace += kernel[hw+j] * (double)input_sig[samples-1] ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                 replace += kernel[hw+j] * (double)input_sig[i+j] ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>             }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         out_sig[i] = (pixelvalue)replace ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="comment">/* compute all other elements */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">for</span> (i=hw ; i<samples-hw ; i++) {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         replace = 0.0 ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>             replace += kernel[hw+j] * (double)input_sig[i+j] ;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         out_sig[i] = (pixelvalue)replace ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     cpl_free(kernel) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <span class="keywordflow">return</span> out_sig ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="keyword">static</span> <span class="keywordtype">double</span> * </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> function1d_generate_smooth_kernel(<span class="keywordtype">int</span> filt_type, <span class="keywordtype">int</span> hw)</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordtype">double</span>  *   kernel ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordtype">double</span>      norm ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordtype">int</span>         i ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     kernel = (<span class="keywordtype">double</span>*)cpl_calloc(2*hw+1, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordflow">switch</span>(filt_type) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         <span class="keywordflow">case</span> LOW_PASS_LINEAR:</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         <span class="keywordflow">for</span> (i=-hw ; i<=hw ; i++) {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>             <span class="comment">/* flat kernel */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             kernel[hw+i] = 1.0 / (double)(2*hw+1) ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         break ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         <span class="keywordflow">case</span> LOW_PASS_GAUSSIAN:</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         norm = 0.00 ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keywordflow">for</span> (i=-hw ; i<=hw ; i++) {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>             <span class="comment">/* sinfo_gaussian kernel */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>             kernel[hw+i] = exp(-(<span class="keywordtype">double</span>)(i*i)) ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>             norm += kernel[hw+i] ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         }</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         <span class="keywordflow">for</span> (i=0 ; i<2*hw+1 ; i++) {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             kernel[i] /= norm ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         }</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         break ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized low pass filter: "</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                 <span class="stringliteral">"cannot generate kernel"</span>) ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>*)NULL ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         break ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordflow">return</span> kernel ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> pixelvalue * </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> sinfo_function1d_median_smooth(</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     pixelvalue * list,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     <span class="keywordtype">int</span>          np,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     <span class="keywordtype">int</span>             hw)</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordtype">int</span>             i,j ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     pixelvalue    *    row ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     pixelvalue    *     smoothed ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="comment">/* simply copy first 3 and last 3 items */</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     smoothed = sinfo_function1d_new(np);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordflow">for</span> (i=0 ; i<hw ; i++) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>         smoothed[i] = list[i] ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="keywordflow">for</span> (i=np-hw ; i<np ; i++) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         smoothed[i] = list[i] ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     <span class="comment">/* sinfo_median filter on all central items */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     row = sinfo_function1d_new(2*hw+1);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     <span class="keywordflow">for</span> (i=hw ; i<np-hw ; i++) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         <span class="keywordflow">for</span> (j=-hw ; j<=hw ; j++) {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             row[j+hw] = list[i+j] ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         smoothed[i] = sinfo_median_pixelvalue(row, 2*hw+1) ; </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     sinfo_function1d_del(row) ;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     <span class="keywordflow">return</span> smoothed ;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="preprocessor">#define LOWFREQ_PASSES        5</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> pixelvalue * </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> sinfo_function1d_remove_lowfreq(</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     pixelvalue * pixel_signal,</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordtype">int</span>             ns)</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     pixelvalue    *    sig_in ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     pixelvalue    *    smooth ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keywordtype">int</span>                i ;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="comment">/* Apply severe low-pass filter several times */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     sig_in = sinfo_function1d_dup(pixel_signal, ns);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keywordflow">for</span> (i=0 ; i<LOWFREQ_PASSES ; i++) {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>         smooth = sinfo_function1d_filter_lowpass( sig_in, ns, </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                          LOW_PASS_LINEAR, 5);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         cpl_free(sig_in);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         sig_in = smooth ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="comment">/* Subtract smoothed signal from input signal */</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         smooth[i] = pixel_signal[i] - smooth[i];</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="keywordflow">return</span> smooth ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> }</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="preprocessor">#undef LOWFREQ_PASSES</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="preprocessor">#define SAMPLE_BORDER    10</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> pixelvalue * </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> sinfo_function1d_remove_thermalbg(</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     pixelvalue * pixel_signal,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="keywordtype">int</span>             ns)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> {</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     pixelvalue    *    smooth ;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="keywordtype">int</span>                i ;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="keywordtype">int</span>                nmin ;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     pixelvalue        lef[2], rig[2];</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     pixelvalue    *    x,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                 *    y,</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                 *    spl_x,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                 *    spl_y ;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordtype">double</span>            med_y ;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <span class="keywordtype">double</span>            avg2med ;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     <span class="keywordtype">double</span>            dist ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     <span class="comment">/* Detect all local minima */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     nmin = 0 ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     x = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     y = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     <span class="keywordflow">for</span> (i=SAMPLE_BORDER ; i<(ns-SAMPLE_BORDER) ; i++) {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         lef[0] = pixel_signal[i-2];</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         lef[1] = pixel_signal[i-1];</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         rig[0] = pixel_signal[i+1];</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         rig[1] = pixel_signal[i+2];</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>         <span class="keywordflow">if</span> ( (pixel_signal[i] < lef[0]) &&</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>              (pixel_signal[i] < lef[1]) &&</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>              (pixel_signal[i] < rig[0]) &&</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>              (pixel_signal[i] < rig[1])) {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>             x[nmin] = (pixelvalue)i ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>             y[nmin] = pixel_signal[i];</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>             nmin ++ ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         }</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="comment">/* Interpolate linearly missing values */</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     spl_x = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     spl_y = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         spl_x[i] = (pixelvalue)i ;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     }</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     sinfo_function1d_interpolate_linear(x, y, nmin, spl_x, spl_y, ns);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     sinfo_function1d_del(x) ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     sinfo_function1d_del(y) ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     sinfo_function1d_del(spl_x);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="comment">/* Compute sinfo_median and average distance to the sinfo_median */</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     med_y = (double)sinfo_median_pixelvalue(pixel_signal, ns);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     avg2med = 0.0 ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         avg2med += fabs((<span class="keywordtype">double</span>)pixel_signal[i] - med_y) ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     }</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     avg2med /= (double)ns ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="comment">/* Reset all pixels out of sinfo_median + 2 * avg2med to zero. */</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         dist = fabs((<span class="keywordtype">double</span>)pixel_signal[i] - med_y);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         <span class="keywordflow">if</span> (dist > (2.0*avg2med)) {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>             spl_y[i] = (pixelvalue)0 ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>         }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     }</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     smooth = sinfo_function1d_new(ns);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <span class="keywordflow">for</span> (i=0 ; i<ns ; i++) {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="keywordflow">if</span> (spl_y[i]>1e-4) {</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>             smooth[i] = pixel_signal[i] - spl_y[i];</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>             smooth[i] = 0.0 ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     }</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     sinfo_function1d_del(spl_y);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     <span class="keywordflow">return</span> smooth ;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="preprocessor">#undef LOWFREQ_PASSES</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> sinfo_function1d_interpolate_linear(</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     pixelvalue    *    x,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     pixelvalue    *    y,</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="keywordtype">int</span>                len,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     pixelvalue    *    spl_x,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     pixelvalue    *    spl_y,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordtype">int</span>                spl_len</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> )</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="keywordtype">double</span>        a, b ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordtype">int</span>            i, j ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="keywordtype">int</span>            found ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">for</span> (i=0 ; i<spl_len ; i++) {</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         <span class="comment">/* Find (x1,y1) on the left of the current point */</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         found = 0 ;</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         <span class="keywordflow">for</span> (j=0 ; j<(len-1) ; j++) {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>             <span class="keywordflow">if</span> ((spl_x[i]>=x[j]) && (spl_x[i]<=x[j+1])) {</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                 found++ ;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                 break ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>             }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         <span class="keywordflow">if</span> (!found) {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>             spl_y[i] = 0.0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>             a = ((double)y[j+1]-(<span class="keywordtype">double</span>)y[j]) /</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                 ((<span class="keywordtype">double</span>)x[j+1]-(double)x[j]);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>             b = (double)y[j] - a * (<span class="keywordtype">double</span>)x[j] ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>             spl_y[i] = (pixelvalue)(a * (<span class="keywordtype">double</span>)spl_x[i] + b) ;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         }</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     return ;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> function1d_search_value(</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     pixelvalue    *    x,</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     pixelvalue         key,</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordtype">int</span>         *    foundPtr</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> )</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordtype">int</span>    high,</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>         low,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         middle;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     low  = 0;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     high = len - 1;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordflow">while</span> (high >= low) {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>         middle = (high + low) / 2;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         <span class="keywordflow">if</span> (key > x[middle]) {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>             low = middle + 1;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key < x[middle]) {</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>             high = middle - 1;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>             *foundPtr = 1;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             <span class="keywordflow">return</span> (middle);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>         }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     *foundPtr = 0;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keywordflow">return</span> (low);</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> }</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> sinfo_function1d_natural_spline(</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     pixelvalue    *     x,</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     pixelvalue    *     y,</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     pixelvalue    *     splX,</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     pixelvalue    *     splY,</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="keywordtype">int</span>             splLen</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> )</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> {</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordtype">int</span>             end;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordtype">int</span>             loc,</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>                     found;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     <span class="keyword">register</span> <span class="keywordtype">int</span>     i,</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                     j,</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>                     n;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordtype">double</span>         *    h; <span class="comment">/* sinfo_vector of deltas in x */</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordtype">double</span>         *    alpha;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="keywordtype">double</span>         *    l,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                 *    mu,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                 *    z,</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                 *    a,</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                 *    b,</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                 *    c,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                 *    d,</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>                     v;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     end = len - 1;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     a = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * splLen * 9) ;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     b = a + len;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     c = b + len;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     d = c + len;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     h = d + len;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     l = h + len;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     z = l + len;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     mu = z + len;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     alpha = mu + len;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     <span class="keywordflow">for</span> (i = 0; i < len; i++) {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         a[i] = (double)y[i];</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     }</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="comment">/* Calculate sinfo_vector of differences */</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     <span class="keywordflow">for</span> (i = 0; i < end; i++) {</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         h[i] = (double)x[i + 1] - (<span class="keywordtype">double</span>)x[i];</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>         <span class="keywordflow">if</span> (h[i] < 0.0) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             cpl_free(a) ;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>             <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         }</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     }</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     <span class="comment">/* Calculate alpha sinfo_vector */</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         <span class="comment">/* n = i - 1 */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         alpha[i] = 3.0 * ((a[i+1] / h[i]) - (a[i] / h[n]) - (a[i] / h[i]) +</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                   (a[n] / h[n]));</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> </div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     <span class="comment">/* Vectors to solve the tridiagonal sinfo_matrix */</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     l[0] = l[end] = 1.0;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     mu[0] = mu[end] = 0.0;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     z[0] = z[end] = 0.0;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     c[0] = c[end] = 0.0;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="comment">/* Calculate the intermediate results */</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         <span class="comment">/* n = i-1 */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         l[i] = 2 * (h[i] + h[n]) - h[n] * mu[n];</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>         mu[i] = h[i] / l[i];</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         z[i] = (alpha[i] - h[n] * z[n]) / l[i];</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     }</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordflow">for</span> (n = end, j = end - 1; j >= 0; j--, n--) {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>         <span class="comment">/* n = j + 1 */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         c[j] = z[j] - mu[j] * c[n];</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>         b[j] = (a[n] - a[j]) / h[j] - h[j] * (c[n] + 2.0 * c[j]) / 3.0;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         d[j] = (c[n] - c[j]) / (3.0 * h[j]);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="comment">/* Now calculate the new values */</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <span class="keywordflow">for</span> (j = 0; j < splLen; j++) {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>          v = (double)splX[j];</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>      splY[j] = (pixelvalue)0;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> </div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>      <span class="comment">/* Is it outside the interval? */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>      <span class="keywordflow">if</span> ((v < (<span class="keywordtype">double</span>)x[0]) || (v > (<span class="keywordtype">double</span>)x[end])) {</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>         <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>      }</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>      <span class="comment">/* Search for the interval containing v in the x sinfo_vector */</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>      loc = function1d_search_value(x, len, (pixelvalue)v, &found);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>      <span class="keywordflow">if</span> (found) {</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>         splY[j] = y[loc];</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>         loc--;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>         v -= (double)x[loc];</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>         splY[j] = (pixelvalue)(    a[loc] +</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>                         v * (b[loc] +</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>                    v * (c[loc] +</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>                     v * d[loc])));</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>         }</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     }</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> pixelvalue</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> sinfo_function1d_average_reject(</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     pixelvalue    *    line,</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <span class="keywordtype">int</span>                npix,</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <span class="keywordtype">int</span>                pix_low,</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     <span class="keywordtype">int</span>                pix_high)</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     pixelvalue    *    sorted ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <span class="keywordtype">int</span>                i ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     <span class="keywordtype">double</span>            avg ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="comment">/* Sanity tests */</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keywordflow">if</span> ((line==NULL) || (npix<1)) <span class="keywordflow">return</span> (pixelvalue)0 ;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="keywordflow">if</span> ((pix_low+pix_high)>=npix) <span class="keywordflow">return</span> (pixelvalue)0 ;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     <span class="comment">/* Copy input line and sort it */</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     sorted = cpl_malloc(npix * <span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     memcpy(sorted, line, npix * <span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     sinfo_pixel_qsort(sorted, npix);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="comment">/* Find out average of remaining values */</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     avg = 0.00 ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordflow">for</span> (i=pix_low+1 ; i<(npix-pix_high) ; i++) {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>         avg += (double)sorted[i] ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     cpl_free(sorted);</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     avg /= (double)(npix - pix_high - pix_low) ;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <span class="keywordflow">return</span> (pixelvalue)avg ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> }</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="preprocessor">#define STEP_MIN    (-half_search)</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="preprocessor"></span><span class="preprocessor">#define STEP_MAX    (half_search)</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> sinfo_function1d_xcorrelate(</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     pixelvalue *    line_i,</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     <span class="keywordtype">int</span>             width_i,</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     pixelvalue *    line_t,</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="keywordtype">int</span>             width_t,</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordtype">int</span>                half_search,</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     <span class="keywordtype">double</span>     *    delta</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> )</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     <span class="keywordtype">double</span> * xcorr ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     <span class="keywordtype">double</span>   xcorr_max ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     <span class="keywordtype">double</span>   mean_i, mean_t ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     <span class="keywordtype">double</span>   rms_i, rms_t ;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     <span class="keywordtype">double</span>   sum, sqsum ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="keywordtype">double</span>   norm ;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     <span class="keywordtype">int</span>      maxpos ;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <span class="keywordtype">int</span>      nsteps ;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="keywordtype">int</span>      i ;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     <span class="keywordtype">int</span>      step ;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <span class="keywordtype">int</span>      nval ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="comment">/* Compute normalization factors */</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     sum = sqsum = 0.00 ;</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="keywordflow">for</span> (i=0 ; i<width_i ; i++) {</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         sum += (double)line_i[i] ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>         sqsum += (double)line_i[i] * (<span class="keywordtype">double</span>)line_i[i];</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     mean_i = sum / (double)width_i ;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     sqsum /= (double)width_i ;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     rms_i = sqsum - mean_i*mean_i ;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     sum = sqsum = 0.00 ;</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         sum += (double)line_t[i] ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         sqsum += (double)line_t[i] * (<span class="keywordtype">double</span>)line_t[i];</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     mean_t = sum / (double)width_t ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     sqsum /= (double)width_t ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     rms_t = sqsum - mean_t*mean_t ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> </div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     norm = 1.00 / sqrt(rms_i * rms_t);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> </div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     nsteps = (STEP_MAX - STEP_MIN) +1 ;</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     xcorr = cpl_malloc(nsteps * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     <span class="keywordflow">for</span> (step=STEP_MIN ; step<=STEP_MAX ; step++) {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>         xcorr[step-STEP_MIN] = 0.00 ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         nval = 0 ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>             <span class="keywordflow">if</span> ((i+step > 0) &&</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                 (i+step < width_i)) {</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>             xcorr[step-STEP_MIN] += ((double)line_t[i] - mean_t) *</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>                                     ((double)line_i[i+step] - mean_i) *</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>                                     norm ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>                 nval++ ;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>             }</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         }</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         xcorr[step-STEP_MIN] /= (double)nval ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     }</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     xcorr_max = xcorr[0] ;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     maxpos    = 0 ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keywordflow">for</span> (i=0 ; i<nsteps ; i++) {</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>         <span class="keywordflow">if</span> (xcorr[i]>xcorr_max) {</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>             maxpos = i ;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>             xcorr_max = xcorr[i];</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         }</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     }</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     cpl_free(xcorr);</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     (*delta) = + ((double)STEP_MIN + (<span class="keywordtype">double</span>)maxpos);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordflow">return</span> xcorr_max ;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__function__1d_8h_source.html b/html/sinfo__function__1d_8h_source.html
index f0acf09..f9954e5 100644
--- a/html/sinfo__function__1d_8h_source.html
+++ b/html/sinfo__function__1d_8h_source.html
@@ -2,153 +2,184 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_function_1d.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_function_1d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_function_1d.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    Tue, Sept 23 1997    </span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    1d signal processing related routines    </span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="comment">/*</span>
-<a name="l00027"></a>00027 <span class="comment"> $Id: sinfo_function_1d.h,v 1.6 2008/03/25 08:20:43 amodigli Exp $</span>
-<a name="l00028"></a>00028 <span class="comment"> $Author: amodigli $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Date: 2008/03/25 08:20:43 $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Revision: 1.6 $</span>
-<a name="l00031"></a>00031 <span class="comment"> */</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifndef SINFO_FUNCTION_1D_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FUNCTION_1D_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pixel_handling.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                                   Defines</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="comment">/* Low pass filter types: */</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#define LOW_PASS_LINEAR            100</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define LOW_PASS_GAUSSIAN        101</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">                          Function ANSI C prototypes</span>
-<a name="l00051"></a>00051 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 pixelvalue * 
-<a name="l00068"></a>00068 sinfo_function1d_new(<span class="keywordtype">int</span> nsamples);
-<a name="l00069"></a>00069 
-<a name="l00079"></a>00079 <span class="keywordtype">void</span> 
-<a name="l00080"></a>00080 sinfo_function1d_del(pixelvalue * s);
-<a name="l00097"></a>00097 pixelvalue * 
-<a name="l00098"></a>00098 sinfo_function1d_dup(pixelvalue * arr, <span class="keywordtype">int</span> ns);
-<a name="l00099"></a>00099 
-<a name="l00116"></a>00116 <span class="keywordtype">double</span>
-<a name="l00117"></a>00117 sinfo_function1d_find_centroid(
-<a name="l00118"></a>00118     pixelvalue  *   line,   <span class="comment">/*  the input line                  */</span>
-<a name="l00119"></a>00119     <span class="keywordtype">int</span>             npix    <span class="comment">/*  number of pixels in this line   */</span>
-<a name="l00120"></a>00120 );
-<a name="l00121"></a>00121 
-<a name="l00144"></a>00144 <span class="keywordtype">double</span>
-<a name="l00145"></a>00145 sinfo_function1d_find_locmax(
-<a name="l00146"></a>00146     pixelvalue  *   line,
-<a name="l00147"></a>00147     <span class="keywordtype">int</span>             npix,
-<a name="l00148"></a>00148     <span class="keywordtype">int</span>             where,
-<a name="l00149"></a>00149     <span class="keywordtype">int</span>             hs
-<a name="l00150"></a>00150 ) ;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00177"></a>00177 pixelvalue *
-<a name="l00178"></a>00178 sinfo_function1d_filter_lowpass(
-<a name="l00179"></a>00179     pixelvalue  *   input_sig,
-<a name="l00180"></a>00180     <span class="keywordtype">int</span>             samples,
-<a name="l00181"></a>00181     <span class="keywordtype">int</span>             filter_type,
-<a name="l00182"></a>00182     <span class="keywordtype">int</span>             hw
-<a name="l00183"></a>00183 ) ;
-<a name="l00184"></a>00184 
-<a name="l00203"></a>00203 pixelvalue * 
-<a name="l00204"></a>00204 sinfo_function1d_median_smooth(
-<a name="l00205"></a>00205     pixelvalue * list,
-<a name="l00206"></a>00206     <span class="keywordtype">int</span>          np,
-<a name="l00207"></a>00207     <span class="keywordtype">int</span>          hw);
-<a name="l00208"></a>00208 
-<a name="l00225"></a>00225 pixelvalue * 
-<a name="l00226"></a>00226 sinfo_function1d_remove_lowfreq(
-<a name="l00227"></a>00227     pixelvalue * loc_signal,
-<a name="l00228"></a>00228     <span class="keywordtype">int</span>          ns);
-<a name="l00229"></a>00229 
-<a name="l00251"></a>00251 pixelvalue * 
-<a name="l00252"></a>00252 sinfo_function1d_remove_thermalbg(
-<a name="l00253"></a>00253     pixelvalue * pixel_signal,
-<a name="l00254"></a>00254     <span class="keywordtype">int</span>          ns);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256 
-<a name="l00278"></a>00278 <span class="keywordtype">void</span> 
-<a name="l00279"></a>00279 sinfo_function1d_interpolate_linear(
-<a name="l00280"></a>00280     pixelvalue  *   x,
-<a name="l00281"></a>00281     pixelvalue  *   y,
-<a name="l00282"></a>00282     <span class="keywordtype">int</span>             len,
-<a name="l00283"></a>00283     pixelvalue  *   spl_x,
-<a name="l00284"></a>00284     pixelvalue  *   spl_y,
-<a name="l00285"></a>00285     <span class="keywordtype">int</span>             spl_len
-<a name="l00286"></a>00286 );
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00314"></a>00314 <span class="keywordtype">int</span>
-<a name="l00315"></a>00315 sinfo_function1d_natural_spline(
-<a name="l00316"></a>00316     pixelvalue  *   x,
-<a name="l00317"></a>00317     pixelvalue  *   y,
-<a name="l00318"></a>00318     <span class="keywordtype">int</span>             len,
-<a name="l00319"></a>00319     pixelvalue  *   splX,
-<a name="l00320"></a>00320     pixelvalue  *   splY,
-<a name="l00321"></a>00321     <span class="keywordtype">int</span>             splLen
-<a name="l00322"></a>00322 ) ;
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324 
-<a name="l00343"></a>00343 pixelvalue
-<a name="l00344"></a>00344 sinfo_function1d_average_reject(
-<a name="l00345"></a>00345     pixelvalue  *   line,
-<a name="l00346"></a>00346     <span class="keywordtype">int</span>             npix,
-<a name="l00347"></a>00347     <span class="keywordtype">int</span>             pix_low,
-<a name="l00348"></a>00348     <span class="keywordtype">int</span>             pix_high);
-<a name="l00349"></a>00349 
-<a name="l00374"></a>00374 <span class="keywordtype">double</span> 
-<a name="l00375"></a>00375 sinfo_function1d_xcorrelate(
-<a name="l00376"></a>00376     pixelvalue *    line_i,
-<a name="l00377"></a>00377     <span class="keywordtype">int</span>             width_i,
-<a name="l00378"></a>00378     pixelvalue *    line_t,
-<a name="l00379"></a>00379     <span class="keywordtype">int</span>             width_t,
-<a name="l00380"></a>00380     <span class="keywordtype">int</span>             half_search,
-<a name="l00381"></a>00381     <span class="keywordtype">double</span>     *    delta);
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_function_1d.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_function_1d.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    Tue, Sept 23 1997    </span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    1d signal processing related routines    </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> $Id: sinfo_function_1d.h,v 1.6 2008/03/25 08:20:43 amodigli Exp $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Date: 2008/03/25 08:20:43 $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifndef SINFO_FUNCTION_1D_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FUNCTION_1D_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pixel_handling.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/* Low pass filter types: */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#define LOW_PASS_LINEAR            100</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define LOW_PASS_GAUSSIAN        101</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                          Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> pixelvalue * </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> sinfo_function1d_new(<span class="keywordtype">int</span> nsamples);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_function1d_del(pixelvalue * s);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> pixelvalue * </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> sinfo_function1d_dup(pixelvalue * arr, <span class="keywordtype">int</span> ns);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> sinfo_function1d_find_centroid(</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     pixelvalue  *   line,   <span class="comment">/*  the input line                  */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">int</span>             npix    <span class="comment">/*  number of pixels in this line   */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> );</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> sinfo_function1d_find_locmax(</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     pixelvalue  *   line,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordtype">int</span>             npix,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordtype">int</span>             where,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordtype">int</span>             hs</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> ) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> pixelvalue *</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> sinfo_function1d_filter_lowpass(</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     pixelvalue  *   input_sig,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordtype">int</span>             samples,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordtype">int</span>             filter_type,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordtype">int</span>             hw</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> ) ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> pixelvalue * </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> sinfo_function1d_median_smooth(</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     pixelvalue * list,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordtype">int</span>          np,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordtype">int</span>          hw);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> pixelvalue * </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> sinfo_function1d_remove_lowfreq(</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     pixelvalue * loc_signal,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordtype">int</span>          ns);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> pixelvalue * </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> sinfo_function1d_remove_thermalbg(</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     pixelvalue * pixel_signal,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">int</span>          ns);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> sinfo_function1d_interpolate_linear(</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     pixelvalue  *   x,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     pixelvalue  *   y,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     pixelvalue  *   spl_x,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     pixelvalue  *   spl_y,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordtype">int</span>             spl_len</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> );</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> sinfo_function1d_natural_spline(</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     pixelvalue  *   x,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     pixelvalue  *   y,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     pixelvalue  *   splX,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     pixelvalue  *   splY,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordtype">int</span>             splLen</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> ) ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> pixelvalue</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> sinfo_function1d_average_reject(</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     pixelvalue  *   line,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordtype">int</span>             npix,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordtype">int</span>             pix_low,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordtype">int</span>             pix_high);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> sinfo_function1d_xcorrelate(</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     pixelvalue *    line_i,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="keywordtype">int</span>             width_i,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     pixelvalue *    line_t,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordtype">int</span>             width_t,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordtype">int</span>             half_search,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordtype">double</span>     *    delta);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__functions_8h_source.html b/html/sinfo__functions_8h_source.html
index 8419b97..524eab5 100644
--- a/html/sinfo__functions_8h_source.html
+++ b/html/sinfo__functions_8h_source.html
@@ -2,288 +2,319 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_functions.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_functions.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_functions.h,v 1.13 2009/03/04 10:17:38 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/03/04 10:17:38 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_FUNCTIONS_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FUNCTIONS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <sinfo_time.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <sinfo_skycor.h></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">int</span> sinfo_print_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 cpl_frameset *
-<a name="l00038"></a>00038 sinfo_frameset_extract(<span class="keyword">const</span> cpl_frameset *frames,<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keywordtype">int</span> 
-<a name="l00041"></a>00041 sinfo_propertylist_has(cpl_propertylist* plist,<span class="keyword">const</span> <span class="keywordtype">char</span>* key);
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 cpl_vector* 
-<a name="l00044"></a>00044 sinfo_vector_clip(<span class="keyword">const</span> cpl_vector* vinp, 
-<a name="l00045"></a>00045                   <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, 
-<a name="l00046"></a>00046                   <span class="keyword">const</span> <span class="keywordtype">int</span> n, 
-<a name="l00047"></a>00047                   <span class="keyword">const</span> <span class="keywordtype">int</span> method);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keywordtype">int</span>
-<a name="l00051"></a>00051 sinfo_image_estimate_noise(cpl_image* img,
-<a name="l00052"></a>00052                             <span class="keyword">const</span> <span class="keywordtype">int</span> noise_fit, 
-<a name="l00053"></a>00053                             <span class="keywordtype">double</span>* centre, 
-<a name="l00054"></a>00054                <span class="keywordtype">double</span>* noise);
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 cpl_table* sinfo_compute_gain(cpl_frameset* son, cpl_frameset* sof);
-<a name="l00058"></a>00058 cpl_table* sinfo_compute_linearity(cpl_frameset* son, cpl_frameset* sof);
-<a name="l00059"></a>00059 cpl_error_code sinfo_fit_lm(<span class="keyword">const</span> cpl_matrix *x, 
-<a name="l00060"></a>00060                             <span class="keyword">const</span> cpl_matrix *sigma_x,
-<a name="l00061"></a>00061                 <span class="keyword">const</span> cpl_vector *y, 
-<a name="l00062"></a>00062                             <span class="keyword">const</span> cpl_vector *sigma_y,
-<a name="l00063"></a>00063                       cpl_vector *a, 
-<a name="l00064"></a>00064                             <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],
-<a name="l00065"></a>00065                 <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], 
-<a name="l00066"></a>00066                                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[], 
-<a name="l00067"></a>00067                           <span class="keywordtype">double</span> *result),
-<a name="l00068"></a>00068                  <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], 
-<a name="l00069"></a>00069                                              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], 
-<a name="l00070"></a>00070                          <span class="keywordtype">double</span> result[]),
-<a name="l00071"></a>00071                  <span class="keywordtype">double</span> *mse,
-<a name="l00072"></a>00072                  <span class="keywordtype">double</span> *red_chisq,
-<a name="l00073"></a>00073                  cpl_matrix **covariance);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keywordtype">void</span>
-<a name="l00076"></a>00076 sinfo_fit_amoeba(<span class="keywordtype">double</span>**p, 
-<a name="l00077"></a>00077        <span class="keywordtype">double</span> y[], 
-<a name="l00078"></a>00078        <span class="keywordtype">int</span> ndim, 
-<a name="l00079"></a>00079        <span class="keywordtype">double</span> ftol, 
-<a name="l00080"></a>00080        <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),
-<a name="l00081"></a>00081        <span class="keywordtype">int</span>* nfunk);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keywordtype">int</span> sinfo_vector_dindgen(cpl_vector** v);
-<a name="l00084"></a>00084 <span class="keywordtype">int</span> sinfo_is_fits_file(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);
-<a name="l00085"></a>00085 cpl_error_code
-<a name="l00086"></a>00086 sinfo_extract_frames_group_type(<span class="keyword">const</span> cpl_frameset * <span class="keyword">set</span>, 
-<a name="l00087"></a>00087                                 cpl_frameset** ext, cpl_frame_group type);
-<a name="l00088"></a>00088 cpl_error_code sinfo_frameset_merge(cpl_frameset * set1, 
-<a name="l00089"></a>00089                                     cpl_frameset* set2);
-<a name="l00090"></a>00090 cpl_error_code
-<a name="l00091"></a>00091 sinfo_table_correl(cpl_table * t1, 
-<a name="l00092"></a>00092                    cpl_table* t2, 
-<a name="l00093"></a>00093                    cpl_table* range,
-<a name="l00094"></a>00094                    <span class="keywordtype">double</span>* xcor);
-<a name="l00095"></a>00095 <span class="keywordtype">int</span> 
-<a name="l00096"></a>00096 sinfo_get_pupil_shift(cpl_imagelist* iml,<span class="keyword">const</span> <span class="keywordtype">int</span> n,cpl_table** qclog_tbl);
-<a name="l00097"></a>00097 <span class="keywordtype">int</span> sinfo_get_preoptic(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* val);
-<a name="l00098"></a>00098 <span class="keywordtype">int</span> sinfo_get_keyvalue_int(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);
-<a name="l00099"></a>00099 <span class="keywordtype">float</span> sinfo_get_keyvalue_float(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);
-<a name="l00100"></a>00100 <span class="keywordtype">double</span> sinfo_get_keyvalue_double(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);
-<a name="l00101"></a>00101 <span class="keywordtype">char</span> sinfo_get_keyvalue_bool(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);
-<a name="l00102"></a>00102 <span class="keyword">const</span> <span class="keywordtype">char</span>* 
-<a name="l00103"></a>00103 sinfo_get_keyvalue_string(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);
-<a name="l00104"></a>00104 <span class="keywordtype">int</span> sinfo_get_strehl_type(cpl_frameset* sof);
-<a name="l00105"></a>00105 <span class="keywordtype">double</span> sinfo_get_wave_cent(<span class="keyword">const</span> <span class="keywordtype">char</span>* band);
-<a name="l00106"></a>00106 <span class="keywordtype">void</span> sinfo_memory_status(<span class="keywordtype">void</span>);
-<a name="l00107"></a>00107 <span class="keywordtype">int</span> sinfo_check_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val);
-<a name="l00108"></a>00108 <span class="keywordtype">void</span> 
-<a name="l00109"></a>00109 sinfo_add_pro_fits_key(cpl_propertylist * plist,  
-<a name="l00110"></a>00110                        <span class="keywordtype">char</span>* pro_catg, 
-<a name="l00111"></a>00111                        <span class="keywordtype">char</span>* file_name, 
-<a name="l00112"></a>00112                        <span class="keywordtype">char</span>* out_name);
-<a name="l00113"></a>00113 <span class="comment">/* ---------------------------------------------------------------------- </span>
-<a name="l00114"></a>00114 <span class="comment">   group of frames</span>
-<a name="l00115"></a>00115 <span class="comment">---------------------------------------------------------------------- */</span>
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="keywordtype">int</span> 
-<a name="l00120"></a>00120 sinfoni_extract_raw_linearity_frames(cpl_frameset * sof, cpl_frameset** raw);
-<a name="l00121"></a>00121 <span class="keywordtype">int</span> sinfoni_extract_raw_dark_frames(cpl_frameset * sof, cpl_frameset** raw);
-<a name="l00122"></a>00122 <span class="keywordtype">int</span> sinfo_extract_raw_pinhole_frames(cpl_frameset * sof, cpl_frameset** raw);
-<a name="l00123"></a>00123 <span class="keywordtype">int</span> sinfo_extract_raw_slit_frames(cpl_frameset * sof, cpl_frameset** raw);
-<a name="l00124"></a>00124 <span class="keywordtype">int</span> sinfo_extract_raw_stack_frames(cpl_frameset * sof, cpl_frameset** pro);
-<a name="l00125"></a>00125 <span class="keywordtype">int</span> sinfo_extract_on_frames(cpl_frameset * sof, cpl_frameset* on);
-<a name="l00126"></a>00126 <span class="keywordtype">int</span> sinfo_extract_off_frames(cpl_frameset * sof, cpl_frameset* off);
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="keywordtype">int</span> sinfo_extract_raw_frames(cpl_frameset * sof, cpl_frameset** raw); 
-<a name="l00129"></a>00129 <span class="keywordtype">int</span> sinfoni_extract_pro_frames(cpl_frameset * sof, cpl_frameset** pro); 
-<a name="l00130"></a>00130 <span class="keywordtype">int</span> sinfo_extract_cdb_frames(cpl_frameset * sof, cpl_frameset** cdb);
-<a name="l00131"></a>00131  
-<a name="l00132"></a>00132 <span class="keywordtype">int</span> sinfo_extract_obj_frames(cpl_frameset * sof, cpl_frameset* obj);
-<a name="l00133"></a>00133 <span class="keywordtype">int</span> sinfo_extract_sky_frames(cpl_frameset * sof, cpl_frameset* sky);
-<a name="l00134"></a>00134 <span class="keywordtype">int</span> sinfo_extract_mst_frames(cpl_frameset * sof, cpl_frameset* cdb); 
-<a name="l00135"></a>00135 <span class="keywordtype">int</span> sinfo_extract_stk_frames(cpl_frameset * sof, cpl_frameset* res);
-<a name="l00136"></a>00136 <span class="keywordtype">int</span> 
-<a name="l00137"></a>00137 sinfo_extract_preoptic_frames(cpl_frameset * sof, 
-<a name="l00138"></a>00138                               cpl_frameset** res, 
-<a name="l00139"></a>00139                               <span class="keyword">const</span> <span class="keywordtype">char</span>* pre_opt);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="keywordtype">double</span> sinfo_get_cumoffsetx(cpl_frame * frame);
-<a name="l00142"></a>00142 <span class="keywordtype">double</span> sinfo_get_cumoffsety(cpl_frame * frame);
-<a name="l00143"></a>00143 <span class="keywordtype">int</span> sinfo_tag_is_objpro(<span class="keywordtype">char</span> * tag);
-<a name="l00144"></a>00144 <span class="keywordtype">int</span> sinfo_extract_obj_products(cpl_frameset * sof, cpl_frameset* obj);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 cpl_frameset* sinfo_frameset_join(cpl_frameset* fs1,cpl_frameset* fs2);
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_get_pix_scale(<span class="keywordtype">float</span> ps);
-<a name="l00149"></a>00149 <span class="keywordtype">int</span> sinfo_pix_scale_isnot_const(<span class="keywordtype">float</span>* pix_scale, <span class="keywordtype">int</span> size);
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="keywordtype">int</span> sinfo_contains_frames_kind(cpl_frameset * sof, 
-<a name="l00152"></a>00152                                  cpl_frameset* raw,
-<a name="l00153"></a>00153                                  <span class="keyword">const</span> <span class="keywordtype">char</span>*         type);
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="keywordtype">int</span> sinfo_contains_frames_type(cpl_frameset * sof, 
-<a name="l00156"></a>00156                                     cpl_frameset** raw,
-<a name="l00157"></a>00157                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type(cpl_frameset * sof, 
-<a name="l00161"></a>00161                                     cpl_frameset** raw,
-<a name="l00162"></a>00162                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type2(cpl_frameset * sof, 
-<a name="l00165"></a>00165                                     cpl_frameset** raw,
-<a name="l00166"></a>00166                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168 <span class="keywordtype">int</span> sinfo_extract_raw_frames_type1(cpl_frameset * sof, 
-<a name="l00169"></a>00169                                     cpl_frameset* raw,
-<a name="l00170"></a>00170                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="keywordtype">int</span> sinfo_extract_frames_type(cpl_frameset * sof, 
-<a name="l00173"></a>00173                                 cpl_frameset * raw,
-<a name="l00174"></a>00174                 <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="keywordtype">int</span> sinfo_remove_qc_frames(cpl_frameset* sof,cpl_frameset** raw);
-<a name="l00177"></a>00177 <span class="comment">/* ---------------------------------------------------------------------- </span>
-<a name="l00178"></a>00178 <span class="comment">   single frames</span>
-<a name="l00179"></a>00179 <span class="comment">---------------------------------------------------------------------- */</span>
-<a name="l00180"></a>00180 <span class="keywordtype">double</span> sinfo_get_mjd_obs(cpl_frame * frame);
-<a name="l00181"></a>00181 <span class="keywordtype">int</span> sinfo_frame_is_raw(<span class="keywordtype">char</span> * tag); 
-<a name="l00182"></a>00182 <span class="keywordtype">int</span> sinfoni_frame_is_pro(<span class="keywordtype">char</span> * tag); 
-<a name="l00183"></a>00183 <span class="keywordtype">int</span> sinfo_frame_is_cdb(<span class="keywordtype">char</span> * tag); 
-<a name="l00184"></a>00184 <span class="keywordtype">int</span> sinfo_frame_is_stk(<span class="keywordtype">char</span> * tag); 
-<a name="l00185"></a>00185 <span class="keywordtype">int</span> sinfo_frame_is_preoptic(cpl_frame*, <span class="keyword">const</span> <span class="keywordtype">char</span>* val); 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="keywordtype">int</span> sinfo_frame_is_pinhole_lamp(<span class="keywordtype">char</span> * tag); 
-<a name="l00188"></a>00188 <span class="keywordtype">int</span> sinfo_frame_is_raw_stack(<span class="keywordtype">char</span> * tag); 
-<a name="l00189"></a>00189 <span class="keywordtype">int</span> sinfo_frame_is_slit_lamp(<span class="keywordtype">char</span> * tag); 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="keywordtype">int</span> sinfo_is_flat_bp(<span class="keywordtype">char</span> * tag);
-<a name="l00193"></a>00193 <span class="keywordtype">int</span> sinfo_is_flat_lindet(<span class="keywordtype">char</span> * tag);
-<a name="l00194"></a>00194 <span class="keywordtype">int</span> sinfo_is_dark(<span class="keywordtype">char</span> * tag);
-<a name="l00195"></a>00195 <span class="keywordtype">int</span> sinfoni_is_pinhole_lamp(<span class="keywordtype">char</span> * tag) ;
-<a name="l00196"></a>00196 <span class="keywordtype">int</span> sinfoni_is_raw_stack(<span class="keywordtype">char</span> * tag) ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198 <span class="keywordtype">int</span> sinfoni_is_lamp_slit(<span class="keywordtype">char</span> * tag) ;
-<a name="l00199"></a>00199 <span class="keywordtype">int</span> sinfo_is_sky_flat(<span class="keywordtype">char</span> * tag) ;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 <span class="keywordtype">int</span> sinfo_is_mflat(<span class="keywordtype">char</span> * tag) ;
-<a name="l00202"></a>00202 <span class="keywordtype">int</span> sinfo_is_master_flat(<span class="keywordtype">char</span> * tag) ;
-<a name="l00203"></a>00203 <span class="keywordtype">int</span> sinfo_is_master_flat_dither(<span class="keywordtype">char</span> * tag) ;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="keywordtype">int</span> sinfo_is_stack(<span class="keywordtype">char</span> * tag) ;
-<a name="l00206"></a>00206 <span class="keywordtype">int</span> sinfo_is_lamp_wave_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00207"></a>00207 <span class="keywordtype">int</span> sinfo_is_lamp_flux_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00208"></a>00208 <span class="keywordtype">int</span> sinfo_is_psf_calibrator_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00209"></a>00209 <span class="keywordtype">int</span> sinfo_is_focus_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00210"></a>00210 <span class="keywordtype">int</span> sinfo_is_object_nodding_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00211"></a>00211 <span class="keywordtype">int</span> sinfo_is_sky_nodding_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00212"></a>00212 <span class="keywordtype">int</span> sinfo_is_object_skyspider_stacked(<span class="keywordtype">char</span> * tag) ;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="keywordtype">int</span> sinfo_blank2dot(<span class="keyword">const</span> <span class="keywordtype">char</span> * in, <span class="keywordtype">char</span>* ou) ;
-<a name="l00216"></a>00216 <span class="keywordtype">int</span> sinfo_is_bpmap(<span class="keywordtype">char</span> *) ;
-<a name="l00217"></a>00217 <span class="keywordtype">int</span> sinfo_is_slitpos(<span class="keywordtype">char</span> * tag) ;
-<a name="l00218"></a>00218 <span class="keywordtype">int</span> sinfo_is_wavemap(<span class="keywordtype">char</span> * tag) ;
-<a name="l00219"></a>00219 <span class="keywordtype">int</span> sinfo_is_halosp(<span class="keywordtype">char</span> * tag) ;
-<a name="l00220"></a>00220 <span class="keywordtype">int</span> sinfo_is_distlist(<span class="keywordtype">char</span> * tag) ;
-<a name="l00221"></a>00221 <span class="keywordtype">int</span> sinfo_is_firstcol(<span class="keywordtype">char</span> * tag) ;
-<a name="l00222"></a>00222 <span class="keywordtype">int</span> sinfo_is_fibres_on_off(cpl_frameset * sof, 
-<a name="l00223"></a>00223                  cpl_frameset* raw);
-<a name="l00224"></a>00224 <span class="comment">/* ---------------------------------------------------------------------- </span>
-<a name="l00225"></a>00225 <span class="comment">   Extra functionalities</span>
-<a name="l00226"></a>00226 <span class="comment">---------------------------------------------------------------------- */</span>
-<a name="l00227"></a>00227 <span class="keywordtype">int</span>
-<a name="l00228"></a>00228 sinfo_clean_nan(cpl_image** im);
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 <span class="keywordtype">int</span>  sinfo_get_clean_mean_window(cpl_image* img, 
-<a name="l00231"></a>00231                                  <span class="keywordtype">int</span> llx, 
-<a name="l00232"></a>00232                                  <span class="keywordtype">int</span> lly, 
-<a name="l00233"></a>00233                                  <span class="keywordtype">int</span> urx, 
-<a name="l00234"></a>00234                                  <span class="keywordtype">int</span> ury, 
-<a name="l00235"></a>00235                                  <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, 
-<a name="l00236"></a>00236                                  <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, 
-<a name="l00237"></a>00237                                  <span class="keywordtype">double</span>* sinfo_clean_mean, 
-<a name="l00238"></a>00238                                  <span class="keywordtype">double</span>* clean_stdev);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 <span class="keywordtype">int</span> sinfo_get_obsname(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* ob_name);
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243  <span class="keywordtype">int</span> sinfo_get_ron(cpl_frameset    *   framelist,
-<a name="l00244"></a>00244                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmin,
-<a name="l00245"></a>00245                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmax,
-<a name="l00246"></a>00246                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymin,
-<a name="l00247"></a>00247                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymax,
-<a name="l00248"></a>00248                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_hsize,
-<a name="l00249"></a>00249                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_nsamp,
-<a name="l00250"></a>00250              <span class="keywordtype">double</span>** ron);
-<a name="l00251"></a>00251 <span class="keywordtype">int</span> sinfo_stack_get_pro_tag(<span class="keywordtype">char</span> * tag_in, <span class="keywordtype">char</span>* tag_out) ; 
-<a name="l00252"></a>00252 <span class="keywordtype">int</span> sinfo_compare_tags(<span class="keyword">const</span> cpl_frame *, <span class="keyword">const</span> cpl_frame *) ;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 <span class="keywordtype">int</span> sinfo_get_spatial_res(cpl_frame * ref_frame,<span class="keywordtype">char</span> * spat_res);
-<a name="l00255"></a>00255 <span class="keywordtype">int</span> sinfo_frame_is_dither(cpl_frame * ref_frame);
-<a name="l00256"></a>00256 <span class="keywordtype">int</span> sinfo_frame_is_sky(cpl_frame * ref_frame);
-<a name="l00257"></a>00257 <span class="keywordtype">int</span> sinfo_tag_is_obj(<span class="keywordtype">char</span> * ref_frame);
-<a name="l00258"></a>00258 <span class="keywordtype">int</span> sinfo_tag_is_sky(<span class="keywordtype">char</span> * ref_frame);
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 <span class="keywordtype">int</span> sinfo_frame_is_on(cpl_frame * ref_frame);
-<a name="l00261"></a>00261 <span class="keywordtype">int</span> sinfo_get_band(cpl_frame * ref_frame,<span class="keywordtype">char</span> * band);
-<a name="l00262"></a>00262 <span class="keywordtype">int</span> sinfo_get_ins_set(<span class="keywordtype">char</span>* band,<span class="keywordtype">int</span>* ins_set);
-<a name="l00263"></a>00263 <span class="keywordtype">int</span> sinfoni_get_ins_setting(cpl_frame * ref_file,<span class="keywordtype">char</span> * set_id);
-<a name="l00264"></a>00264 <span class="keywordtype">int</span> sinfo_pfits_add_qc(cpl_propertylist * plist,qc_log * qclog);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 CPL_END_DECLS
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_functions.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_functions.h,v 1.13 2009/03/04 10:17:38 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/03/04 10:17:38 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_FUNCTIONS_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_FUNCTIONS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <sinfo_time.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <sinfo_skycor.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">int</span> sinfo_print_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> cpl_frameset *</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> sinfo_frameset_extract(<span class="keyword">const</span> cpl_frameset *frames,<span class="keyword">const</span> <span class="keywordtype">char</span> *tag);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> sinfo_propertylist_has(cpl_propertylist* plist,<span class="keyword">const</span> <span class="keywordtype">char</span>* key);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> cpl_vector* </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> sinfo_vector_clip(<span class="keyword">const</span> cpl_vector* vinp, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> n, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> method);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_image_estimate_noise(cpl_image* img,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                             <span class="keyword">const</span> <span class="keywordtype">int</span> noise_fit, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                             <span class="keywordtype">double</span>* centre, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                <span class="keywordtype">double</span>* noise);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> cpl_table* sinfo_compute_gain(cpl_frameset* son, cpl_frameset* sof);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> cpl_table* sinfo_compute_linearity(cpl_frameset* son, cpl_frameset* sof);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> cpl_error_code sinfo_fit_lm(<span class="keyword">const</span> cpl_matrix *x, </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                             <span class="keyword">const</span> cpl_matrix *sigma_x,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                 <span class="keyword">const</span> cpl_vector *y, </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                             <span class="keyword">const</span> cpl_vector *sigma_y,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                       cpl_vector *a, </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                             <span class="keyword">const</span> <span class="keywordtype">int</span> ia[],</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                 <span class="keywordtype">int</span>    (*f)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[], </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                           <span class="keywordtype">double</span> *result),</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                  <span class="keywordtype">int</span> (*dfda)(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                          <span class="keywordtype">double</span> result[]),</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                  <span class="keywordtype">double</span> *mse,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                  <span class="keywordtype">double</span> *red_chisq,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                  cpl_matrix **covariance);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_fit_amoeba(<span class="keywordtype">double</span>**p, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>        <span class="keywordtype">double</span> y[], </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>        <span class="keywordtype">int</span> ndim, </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>        <span class="keywordtype">double</span> ftol, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>        <span class="keywordtype">double</span> (*funk)(<span class="keywordtype">double</span>[]),</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>        <span class="keywordtype">int</span>* nfunk);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keywordtype">int</span> sinfo_vector_dindgen(cpl_vector** v);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keywordtype">int</span> sinfo_is_fits_file(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> cpl_error_code</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> sinfo_extract_frames_group_type(<span class="keyword">const</span> cpl_frameset * <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                                 cpl_frameset** ext, cpl_frame_group type);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> cpl_error_code sinfo_frameset_merge(cpl_frameset * set1, </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                                     cpl_frameset* set2);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> cpl_error_code</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> sinfo_table_correl(cpl_table * t1, </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                    cpl_table* t2, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                    cpl_table* range,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                    <span class="keywordtype">double</span>* xcor);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> sinfo_get_pupil_shift(cpl_imagelist* iml,<span class="keyword">const</span> <span class="keywordtype">int</span> n,cpl_table** qclog_tbl);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">int</span> sinfo_get_preoptic(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* val);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keywordtype">int</span> sinfo_get_keyvalue_int(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keywordtype">float</span> sinfo_get_keyvalue_float(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">double</span> sinfo_get_keyvalue_double(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">char</span> sinfo_get_keyvalue_bool(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_get_keyvalue_string(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_name);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keywordtype">int</span> sinfo_get_strehl_type(cpl_frameset* sof);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keywordtype">double</span> sinfo_get_wave_cent(<span class="keyword">const</span> <span class="keywordtype">char</span>* band);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keywordtype">void</span> sinfo_memory_status(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keywordtype">int</span> sinfo_check_rec_status(<span class="keyword">const</span> <span class="keywordtype">int</span> val);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> sinfo_add_pro_fits_key(cpl_propertylist * plist,  </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                        <span class="keywordtype">char</span>* pro_catg, </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                        <span class="keywordtype">char</span>* file_name, </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                        <span class="keywordtype">char</span>* out_name);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/* ---------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">   group of frames</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">---------------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> sinfoni_extract_raw_linearity_frames(cpl_frameset * sof, cpl_frameset** raw);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="keywordtype">int</span> sinfoni_extract_raw_dark_frames(cpl_frameset * sof, cpl_frameset** raw);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">int</span> sinfo_extract_raw_pinhole_frames(cpl_frameset * sof, cpl_frameset** raw);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keywordtype">int</span> sinfo_extract_raw_slit_frames(cpl_frameset * sof, cpl_frameset** raw);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keywordtype">int</span> sinfo_extract_raw_stack_frames(cpl_frameset * sof, cpl_frameset** pro);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keywordtype">int</span> sinfo_extract_on_frames(cpl_frameset * sof, cpl_frameset* on);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keywordtype">int</span> sinfo_extract_off_frames(cpl_frameset * sof, cpl_frameset* off);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames(cpl_frameset * sof, cpl_frameset** raw); </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="keywordtype">int</span> sinfoni_extract_pro_frames(cpl_frameset * sof, cpl_frameset** pro); </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keywordtype">int</span> sinfo_extract_cdb_frames(cpl_frameset * sof, cpl_frameset** cdb);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>  </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="keywordtype">int</span> sinfo_extract_obj_frames(cpl_frameset * sof, cpl_frameset* obj);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="keywordtype">int</span> sinfo_extract_sky_frames(cpl_frameset * sof, cpl_frameset* sky);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="keywordtype">int</span> sinfo_extract_mst_frames(cpl_frameset * sof, cpl_frameset* cdb); </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keywordtype">int</span> sinfo_extract_stk_frames(cpl_frameset * sof, cpl_frameset* res);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> sinfo_extract_preoptic_frames(cpl_frameset * sof, </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               cpl_frameset** res, </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* pre_opt);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keywordtype">double</span> sinfo_get_cumoffsetx(cpl_frame * frame);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="keywordtype">double</span> sinfo_get_cumoffsety(cpl_frame * frame);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keywordtype">int</span> sinfo_tag_is_objpro(<span class="keywordtype">char</span> * tag);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="keywordtype">int</span> sinfo_extract_obj_products(cpl_frameset * sof, cpl_frameset* obj);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> cpl_frameset* sinfo_frameset_join(cpl_frameset* fs1,cpl_frameset* fs2);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_get_pix_scale(<span class="keywordtype">float</span> ps);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keywordtype">int</span> sinfo_pix_scale_isnot_const(<span class="keywordtype">float</span>* pix_scale, <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">int</span> sinfo_contains_frames_kind(cpl_frameset * sof, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                  cpl_frameset* raw,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>*         type);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keywordtype">int</span> sinfo_contains_frames_type(cpl_frameset * sof, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                     cpl_frameset** raw,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type(cpl_frameset * sof, </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                     cpl_frameset** raw,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type2(cpl_frameset * sof, </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                     cpl_frameset** raw,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keywordtype">int</span> sinfo_extract_raw_frames_type1(cpl_frameset * sof, </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                     cpl_frameset* raw,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                                     <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="keywordtype">int</span> sinfo_extract_frames_type(cpl_frameset * sof, </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                                 cpl_frameset * raw,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                 <span class="keyword">const</span> <span class="keywordtype">char</span>*          type);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keywordtype">int</span> sinfo_remove_qc_frames(cpl_frameset* sof,cpl_frameset** raw);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/* ---------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">   single frames</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">---------------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keywordtype">double</span> sinfo_get_mjd_obs(cpl_frame * frame);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keywordtype">int</span> sinfo_frame_is_raw(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keywordtype">int</span> sinfoni_frame_is_pro(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keywordtype">int</span> sinfo_frame_is_cdb(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="keywordtype">int</span> sinfo_frame_is_stk(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="keywordtype">int</span> sinfo_frame_is_preoptic(cpl_frame*, <span class="keyword">const</span> <span class="keywordtype">char</span>* val); </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keywordtype">int</span> sinfo_frame_is_pinhole_lamp(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keywordtype">int</span> sinfo_frame_is_raw_stack(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keywordtype">int</span> sinfo_frame_is_slit_lamp(<span class="keywordtype">char</span> * tag); </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keywordtype">int</span> sinfo_is_flat_bp(<span class="keywordtype">char</span> * tag);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="keywordtype">int</span> sinfo_is_flat_lindet(<span class="keywordtype">char</span> * tag);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="keywordtype">int</span> sinfo_is_dark(<span class="keywordtype">char</span> * tag);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keywordtype">int</span> sinfoni_is_pinhole_lamp(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="keywordtype">int</span> sinfoni_is_raw_stack(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="keywordtype">int</span> sinfoni_is_lamp_slit(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="keywordtype">int</span> sinfo_is_sky_flat(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="keywordtype">int</span> sinfo_is_mflat(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keywordtype">int</span> sinfo_is_master_flat(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keywordtype">int</span> sinfo_is_master_flat_dither(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="keywordtype">int</span> sinfo_is_stack(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="keywordtype">int</span> sinfo_is_lamp_wave_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keywordtype">int</span> sinfo_is_lamp_flux_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="keywordtype">int</span> sinfo_is_psf_calibrator_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="keywordtype">int</span> sinfo_is_focus_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keywordtype">int</span> sinfo_is_object_nodding_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="keywordtype">int</span> sinfo_is_sky_nodding_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="keywordtype">int</span> sinfo_is_object_skyspider_stacked(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keywordtype">int</span> sinfo_blank2dot(<span class="keyword">const</span> <span class="keywordtype">char</span> * in, <span class="keywordtype">char</span>* ou) ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="keywordtype">int</span> sinfo_is_bpmap(<span class="keywordtype">char</span> *) ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="keywordtype">int</span> sinfo_is_slitpos(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="keywordtype">int</span> sinfo_is_wavemap(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="keywordtype">int</span> sinfo_is_halosp(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="keywordtype">int</span> sinfo_is_distlist(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keywordtype">int</span> sinfo_is_firstcol(<span class="keywordtype">char</span> * tag) ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="keywordtype">int</span> sinfo_is_fibres_on_off(cpl_frameset * sof, </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                  cpl_frameset* raw);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/* ---------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">   Extra functionalities</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">---------------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> sinfo_clean_nan(cpl_image** im);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keywordtype">int</span>  sinfo_get_clean_mean_window(cpl_image* img, </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                                  <span class="keywordtype">int</span> llx, </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                                  <span class="keywordtype">int</span> lly, </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                                  <span class="keywordtype">int</span> urx, </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                                  <span class="keywordtype">int</span> ury, </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> kappa, </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> nclip, </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                                  <span class="keywordtype">double</span>* sinfo_clean_mean, </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                                  <span class="keywordtype">double</span>* clean_stdev);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="keywordtype">int</span> sinfo_get_obsname(cpl_frame * ref_frame, <span class="keyword">const</span> <span class="keywordtype">char</span>* ob_name);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>  <span class="keywordtype">int</span> sinfo_get_ron(cpl_frameset    *   framelist,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmin,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_xmax,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymin,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_ymax,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_hsize,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> ron_nsamp,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>              <span class="keywordtype">double</span>** ron);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keywordtype">int</span> sinfo_stack_get_pro_tag(<span class="keywordtype">char</span> * tag_in, <span class="keywordtype">char</span>* tag_out) ; </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="keywordtype">int</span> sinfo_compare_tags(<span class="keyword">const</span> cpl_frame *, <span class="keyword">const</span> cpl_frame *) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="keywordtype">int</span> sinfo_get_spatial_res(cpl_frame * ref_frame,<span class="keywordtype">char</span> * spat_res);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="keywordtype">int</span> sinfo_frame_is_dither(cpl_frame * ref_frame);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="keywordtype">int</span> sinfo_frame_is_sky(cpl_frame * ref_frame);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="keywordtype">int</span> sinfo_tag_is_obj(<span class="keywordtype">char</span> * ref_frame);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="keywordtype">int</span> sinfo_tag_is_sky(<span class="keywordtype">char</span> * ref_frame);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="keywordtype">int</span> sinfo_frame_is_on(cpl_frame * ref_frame);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="keywordtype">int</span> sinfo_get_band(cpl_frame * ref_frame,<span class="keywordtype">char</span> * band);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="keywordtype">int</span> sinfo_get_ins_set(<span class="keywordtype">char</span>* band,<span class="keywordtype">int</span>* ins_set);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="keywordtype">int</span> sinfoni_get_ins_setting(cpl_frame * ref_file,<span class="keywordtype">char</span> * set_id);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keywordtype">int</span> sinfo_pfits_add_qc(cpl_propertylist * plist,qc_log * qclog);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__general__config_8c_source.html b/html/sinfo__general__config_8c_source.html
index 4731a91..1b073b4 100644
--- a/html/sinfo__general__config_8c_source.html
+++ b/html/sinfo__general__config_8c_source.html
@@ -2,106 +2,137 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_general_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_general_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_general_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_general_config.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00056"></a>00056   <span class="comment">/* General data reduction parameters */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keywordtype">void</span>
-<a name="l00059"></a>00059  sinfo_general_config_add(cpl_parameterlist *list)
-<a name="l00060"></a>00060 {
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   cpl_parameter *p;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   <span class="keywordflow">if</span> (!list) {
-<a name="l00065"></a>00065     <span class="keywordflow">return</span>;
-<a name="l00066"></a>00066   }
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   <span class="comment">/* indicates if parameters will be overwritten */</span>
-<a name="l00069"></a>00069   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.overwrite_parameters"</span>,
-<a name="l00070"></a>00070                   CPL_TYPE_BOOL,
-<a name="l00071"></a>00071                               <span class="stringliteral">"Overwrite DRS ini parameters: "</span>,
-<a name="l00072"></a>00072                               <span class="stringliteral">"sinfoni.general"</span>,
-<a name="l00073"></a>00073                               TRUE);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"gen-overpar"</span>);
-<a name="l00076"></a>00076   cpl_parameterlist_append(list, p);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_sw"</span>,
-<a name="l00079"></a>00079                               CPL_TYPE_BOOL,
-<a name="l00080"></a>00080                               <span class="stringliteral">"Correct for bad lines introduced by "</span>
-<a name="l00081"></a>00081                               <span class="stringliteral">"instrument software: "</span>,
-<a name="l00082"></a>00082                               <span class="stringliteral">"sinfoni.general"</span>,
-<a name="l00083"></a>00083                               FALSE);
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_sw"</span>);
-<a name="l00086"></a>00086   cpl_parameterlist_append(list, p);
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   <span class="comment">/* Fill the parameters list */</span>
-<a name="l00090"></a>00090   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_kappa"</span>, 
-<a name="l00091"></a>00091                               CPL_TYPE_INT,
-<a name="l00092"></a>00092                               <span class="stringliteral">"Kappa sigma value"</span>, 
-<a name="l00093"></a>00093                               <span class="stringliteral">"sinfoni.general"</span>,18);
-<a name="l00094"></a>00094   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_kappa"</span>) ;
-<a name="l00095"></a>00095   cpl_parameterlist_append(list, p) ;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_filt_rad"</span>, 
-<a name="l00098"></a>00098                               CPL_TYPE_INT,
-<a name="l00099"></a>00099                   <span class="stringliteral">"Filtering radii applied during median filter."</span>
-<a name="l00100"></a>00100                               <span class="stringliteral">" Should be small"</span>, 
-<a name="l00101"></a>00101                   <span class="stringliteral">"sinfoni.general"</span>,3) ;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_filt_rad"</span>) ;
-<a name="l00104"></a>00104   cpl_parameterlist_append(list, p) ;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107   <span class="keywordflow">return</span>;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_general_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_general_config.c,v 1.6 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_general_config.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="comment">/* General data reduction parameters */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>  sinfo_general_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* indicates if parameters will be overwritten */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.overwrite_parameters"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"Overwrite DRS ini parameters: "</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"sinfoni.general"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               TRUE);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"gen-overpar"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_sw"</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                               CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"Correct for bad lines introduced by "</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="stringliteral">"instrument software: "</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"sinfoni.general"</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               FALSE);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_sw"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_kappa"</span>, </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                               <span class="stringliteral">"Kappa sigma value"</span>, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="stringliteral">"sinfoni.general"</span>,18);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_kappa"</span>) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.general.lc_filt_rad"</span>, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                   <span class="stringliteral">"Filtering radii applied during median filter."</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                               <span class="stringliteral">" Should be small"</span>, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                   <span class="stringliteral">"sinfoni.general"</span>,3) ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lc_filt_rad"</span>) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__general__config_8h_source.html b/html/sinfo__general__config_8h_source.html
index 9f3d218..697bac0 100644
--- a/html/sinfo__general__config_8h_source.html
+++ b/html/sinfo__general__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_general_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_general_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_general_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_GENERAL_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_GENERAL_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_general_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_general_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_general_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_GENERAL_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_GENERAL_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_general_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__globals_8c_source.html b/html/sinfo__globals_8c_source.html
index ed3d7bb..f55d147 100644
--- a/html/sinfo__globals_8c_source.html
+++ b/html/sinfo__globals_8c_source.html
@@ -2,184 +2,215 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_globals.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_globals.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00026"></a>00026 
-<a name="l00041"></a>00041 amoeba_dat*
-<a name="l00042"></a>00042 sinfo_amoeba_new(cpl_vector* vx, 
-<a name="l00043"></a>00043                  cpl_vector* vy, 
-<a name="l00044"></a>00044                  cpl_vector* sx, 
-<a name="l00045"></a>00045                  cpl_vector* sy)
-<a name="l00046"></a>00046  {
-<a name="l00047"></a>00047    amoeba_dat * a;
-<a name="l00048"></a>00048    a= cpl_malloc(<span class="keyword">sizeof</span>(amoeba_dat));
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050    a->vx=cpl_vector_duplicate(vx);
-<a name="l00051"></a>00051    a->vy=cpl_vector_duplicate(vy);
-<a name="l00052"></a>00052    a->sx=cpl_vector_duplicate(sx);
-<a name="l00053"></a>00053    a->sy=cpl_vector_duplicate(sy);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056   <span class="keywordflow">return</span> a;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 }
-<a name="l00065"></a>00065 <span class="keywordtype">void</span>
-<a name="l00066"></a>00066 sinfo_amoeba_delete(amoeba_dat** a)
-<a name="l00067"></a>00067 {
-<a name="l00068"></a>00068   sinfo_free_my_vector(&((*a)->vx));
-<a name="l00069"></a>00069   sinfo_free_my_vector(&((*a)->vy));
-<a name="l00070"></a>00070   sinfo_free_my_vector(&((*a)->sx));
-<a name="l00071"></a>00071   sinfo_free_my_vector(&((*a)->sy));
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073   cpl_free(*a);
-<a name="l00074"></a>00074   *a=NULL;
-<a name="l00075"></a>00075 }
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 
-<a name="l00084"></a>00084 fake*
-<a name="l00085"></a>00085 sinfo_fake_new(<span class="keywordtype">void</span>)
-<a name="l00086"></a>00086  {
-<a name="l00087"></a>00087    fake * f;
-<a name="l00088"></a>00088    f= cpl_malloc(<span class="keyword">sizeof</span>(fake));
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   strcpy(f->pro_class,<span class="stringliteral">"DEFAULT"</span>);
-<a name="l00091"></a>00091   f->frm_switch=0;
-<a name="l00092"></a>00092   f->is_fake_sky=0;
-<a name="l00093"></a>00093   f->mask_index=1;
-<a name="l00094"></a>00094   f->ind_index=0;
-<a name="l00095"></a>00095   f->flat_index=1;
-<a name="l00096"></a>00096   f->wfix_index=1;
-<a name="l00097"></a>00097   f->low_rej=0.1;
-<a name="l00098"></a>00098   f->hig_rej=0.1;
-<a name="l00099"></a>00099   <span class="keywordflow">return</span> f;
-<a name="l00100"></a>00100 }
-<a name="l00107"></a>00107 <span class="keywordtype">void</span>
-<a name="l00108"></a>00108 sinfo_fake_delete(fake** f)
-<a name="l00109"></a>00109 {
-<a name="l00110"></a>00110   cpl_free(*f);
-<a name="l00111"></a>00111   *f=NULL;
-<a name="l00112"></a>00112 }
-<a name="l00113"></a>00113 
-<a name="l00120"></a>00120 wcal*
-<a name="l00121"></a>00121 sinfo_wcal_new(<span class="keywordtype">void</span>)
-<a name="l00122"></a>00122  {
-<a name="l00123"></a>00123    wcal * w;
-<a name="l00124"></a>00124    w= cpl_malloc(<span class="keyword">sizeof</span>(wcal));
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126    w->wstart=1.65;
-<a name="l00127"></a>00127    w->wgdisp1=-0.000200018796022;
-<a name="l00128"></a>00128    w->wgdisp2=9.30345245278e-10;
-<a name="l00129"></a>00129    w->min_dif=10.0;
-<a name="l00130"></a>00130    w->hw=7;
-<a name="l00131"></a>00131    w->fwhm=2.83;
-<a name="l00132"></a>00132    w->min_amp=5.0;
-<a name="l00133"></a>00133    w->na_coef=3;
-<a name="l00134"></a>00134    w->nb_coef=2;
-<a name="l00135"></a>00135    w->pixel_tol=7.0;
-<a name="l00136"></a>00136    w->y_box=2.0;
-<a name="l00137"></a>00137    w->low_pos=750;
-<a name="l00138"></a>00138    w->hig_pos=1000;
-<a name="l00139"></a>00139  
-<a name="l00140"></a>00140   <span class="keywordflow">return</span> w;
-<a name="l00141"></a>00141 }
-<a name="l00148"></a>00148 <span class="keywordtype">void</span>
-<a name="l00149"></a>00149 sinfo_wcal_delete(wcal* w)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151   cpl_free(w);
-<a name="l00152"></a>00152 }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00162"></a>00162 stack*
-<a name="l00163"></a>00163 sinfo_stack_new(<span class="keywordtype">void</span>)
-<a name="l00164"></a>00164  {
-<a name="l00165"></a>00165    stack * s;
-<a name="l00166"></a>00166    s= cpl_malloc(<span class="keyword">sizeof</span>(stack));
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168    strcpy(s->do_class,<span class="stringliteral">"DEFAULT"</span>);
-<a name="l00169"></a>00169    strcpy(s->index_list,<span class="stringliteral">"indexlist"</span>);
-<a name="l00170"></a>00170    s->warp_fix_ind=1;
-<a name="l00171"></a>00171   
-<a name="l00172"></a>00172   <span class="keywordflow">return</span> s;
-<a name="l00173"></a>00173 }
-<a name="l00180"></a>00180 <span class="keywordtype">void</span>
-<a name="l00181"></a>00181 sinfo_stack_delete(stack* s)
-<a name="l00182"></a>00182 {
-<a name="l00183"></a>00183   cpl_free(s);
-<a name="l00184"></a>00184 }
-<a name="l00191"></a>00191 nstpar*
-<a name="l00192"></a>00192 sinfo_nstpar_new(<span class="keywordtype">void</span>)
-<a name="l00193"></a>00193  {
-<a name="l00194"></a>00194    nstpar * n;
-<a name="l00195"></a>00195    n= cpl_malloc(<span class="keyword">sizeof</span>(nstpar));
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197    n->fwhm[0]=2.0;
-<a name="l00198"></a>00198    n->fwhm[1]=5.0;
-<a name="l00199"></a>00199    n->fwhm[2]=2.0;
-<a name="l00200"></a>00200    n->fwhm[3]=2.0;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202    n->min_dif[0]=1.0;
-<a name="l00203"></a>00203    n->min_dif[1]=5.0;
-<a name="l00204"></a>00204    n->min_dif[2]=5.0;
-<a name="l00205"></a>00205    n->min_dif[3]=5.0;
-<a name="l00206"></a>00206  
-<a name="l00207"></a>00207   <span class="keywordflow">return</span> n;
-<a name="l00208"></a>00208 }
-<a name="l00215"></a>00215 <span class="keywordtype">void</span>
-<a name="l00216"></a>00216 sinfo_nstpar_delete(nstpar* n)
-<a name="l00217"></a>00217 {
-<a name="l00218"></a>00218   cpl_free(n);
-<a name="l00219"></a>00219 }
-<a name="l00227"></a>00227 distpar*
-<a name="l00228"></a>00228 sinfo_distpar_new(<span class="keywordtype">void</span>)
-<a name="l00229"></a>00229  {
-<a name="l00230"></a>00230    distpar * d;
-<a name="l00231"></a>00231    d= cpl_malloc(<span class="keyword">sizeof</span>(distpar));
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233    d->diff_tol[0]=2.0;
-<a name="l00234"></a>00234    d->diff_tol[1]=4.0;
-<a name="l00235"></a>00235    d->diff_tol[2]=2.0;
-<a name="l00236"></a>00236    d->diff_tol[3]=4.0;
-<a name="l00237"></a>00237  
-<a name="l00238"></a>00238   <span class="keywordflow">return</span> d;
-<a name="l00239"></a>00239 }
-<a name="l00246"></a>00246 <span class="keywordtype">void</span>
-<a name="l00247"></a>00247 sinfo_distpar_delete(distpar* d)
-<a name="l00248"></a>00248 {
-<a name="l00249"></a>00249   cpl_free(d);
-<a name="l00250"></a>00250 }
-<a name="l00251"></a>00251 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_globals.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> amoeba_dat*</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> sinfo_amoeba_new(cpl_vector* vx, </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                  cpl_vector* vy, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                  cpl_vector* sx, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                  cpl_vector* sy)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>  {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>    amoeba_dat * a;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>    a= cpl_malloc(<span class="keyword">sizeof</span>(amoeba_dat));</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>    a->vx=cpl_vector_duplicate(vx);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>    a->vy=cpl_vector_duplicate(vy);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>    a->sx=cpl_vector_duplicate(sx);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>    a->sy=cpl_vector_duplicate(sy);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">return</span> a;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> sinfo_amoeba_delete(amoeba_dat** a)</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   sinfo_free_my_vector(&((*a)->vx));</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   sinfo_free_my_vector(&((*a)->vy));</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   sinfo_free_my_vector(&((*a)->sx));</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   sinfo_free_my_vector(&((*a)->sy));</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   cpl_free(*a);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   *a=NULL;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> fake*</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_fake_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>  {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>    fake * f;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>    f= cpl_malloc(<span class="keyword">sizeof</span>(fake));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   strcpy(f->pro_class,<span class="stringliteral">"DEFAULT"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   f->frm_switch=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   f->is_fake_sky=0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   f->mask_index=1;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   f->ind_index=0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   f->flat_index=1;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   f->wfix_index=1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   f->low_rej=0.1;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   f->hig_rej=0.1;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">return</span> f;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> sinfo_fake_delete(fake** f)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   cpl_free(*f);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   *f=NULL;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> wcal*</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> sinfo_wcal_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>  {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    wcal * w;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    w= cpl_malloc(<span class="keyword">sizeof</span>(wcal));</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    w->wstart=1.65;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    w->wgdisp1=-0.000200018796022;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    w->wgdisp2=9.30345245278e-10;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    w->min_dif=10.0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    w->hw=7;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    w->fwhm=2.83;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    w->min_amp=5.0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    w->na_coef=3;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    w->nb_coef=2;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    w->pixel_tol=7.0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    w->y_box=2.0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    w->low_pos=750;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    w->hig_pos=1000;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordflow">return</span> w;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> sinfo_wcal_delete(wcal* w)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_free(w);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> stack*</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> sinfo_stack_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    stack * s;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    s= cpl_malloc(<span class="keyword">sizeof</span>(stack));</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>    strcpy(s->do_class,<span class="stringliteral">"DEFAULT"</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    strcpy(s->index_list,<span class="stringliteral">"indexlist"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    s->warp_fix_ind=1;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">return</span> s;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> sinfo_stack_delete(stack* s)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   cpl_free(s);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> nstpar*</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> sinfo_nstpar_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>  {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>    nstpar * n;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    n= cpl_malloc(<span class="keyword">sizeof</span>(nstpar));</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    n->fwhm[0]=2.0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    n->fwhm[1]=5.0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    n->fwhm[2]=2.0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    n->fwhm[3]=2.0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    n->min_dif[0]=1.0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    n->min_dif[1]=5.0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>    n->min_dif[2]=5.0;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    n->min_dif[3]=5.0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>  </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keywordflow">return</span> n;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> sinfo_nstpar_delete(nstpar* n)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_free(n);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> distpar*</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> sinfo_distpar_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>  {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>    distpar * d;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    d= cpl_malloc(<span class="keyword">sizeof</span>(distpar));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>    d->diff_tol[0]=2.0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    d->diff_tol[1]=4.0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    d->diff_tol[2]=2.0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    d->diff_tol[3]=4.0;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">return</span> d;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> sinfo_distpar_delete(distpar* d)</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   cpl_free(d);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__globals_8h_source.html b/html/sinfo__globals_8h_source.html
index dfb7684..6dc4561 100644
--- a/html/sinfo__globals_8h_source.html
+++ b/html/sinfo__globals_8h_source.html
@@ -2,195 +2,232 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_globals.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_globals.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_globals.h,v 1.6 2007/10/09 15:58:00 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/09 15:58:00 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_GLOBALS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_GLOBALS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Defines</span>
-<a name="l00033"></a>00033 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#define SINFO_RESAMP_NROWS 2560</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define PI_NUMB     (3.1415926535897932384626433832795)</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define ZERO    0./0.</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define FLAG    -1.e+9</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define QC_DID_ID                          "SINFONI-1.0.0"</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define FILE_NAME_SZ                       512</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define MAX_NAME_SIZE                      512</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define TELESCOPE_SURFACE                  52.8101279</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define NOISE_HSIZE                        4</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define NOISE_NSAMPLES                     100</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DBL_MIN 1e-37</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DBL_MAX 1e+37</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define IMA_PIX_START                      0</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define IMA_PIX_END                        2047</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define SIZEX                              2048</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define SIZEY                              2048</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define DET_PIX_MIN                        1</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define DET_PIX_MAX                        2048</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#define LLX                                1350</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define LLY                                1000</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define URX                                1390</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define URY                                1200</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define DISTORTION_LOPOS                    974</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_HIPOS                   1074</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#define GRAT_VAL1_HK                       3997330</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_HK                       3997339</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_H                        2948723</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_H                        2948733</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_K                        1893844</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_K                        1893854</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_J                         849618</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_J                         849628</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL_TOL                             4</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#define SKY_FLUX                                 0</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define BKG_VARIANCE                            9.6</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define GAIN                                    2.42</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define MAGNITUDE                              11</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00079"></a>00079 <span class="preprocessor">#define MSG_OVER_WRITE_PAR        "Using default data reduction parameters"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define LAMP_ON     TRUE</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define LAMP_OFF    FALSE</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>
-<a name="l00083"></a>00083 <span class="keyword">struct </span>amoeba_ {
-<a name="l00084"></a>00084   cpl_vector*   vx;
-<a name="l00085"></a>00085   cpl_vector*   vy;
-<a name="l00086"></a>00086   cpl_vector*   sx;
-<a name="l00087"></a>00087   cpl_vector*   sy;
-<a name="l00088"></a>00088 };
-<a name="l00089"></a>00089 <span class="keyword">typedef</span> <span class="keyword">struct </span>amoeba_ amoeba_dat; 
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 amoeba_dat* sinfo_amoeba_new(cpl_vector* vx, 
-<a name="l00092"></a>00092                              cpl_vector* vy, 
-<a name="l00093"></a>00093                              cpl_vector* sx, 
-<a name="l00094"></a>00094                              cpl_vector* sy);
-<a name="l00095"></a>00095 <span class="keywordtype">void</span> sinfo_amoeba_delete(amoeba_dat** a);
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="keyword">struct </span>qc_log_ {
-<a name="l00098"></a>00098   <span class="keywordtype">char</span>   name[30];
-<a name="l00099"></a>00099   <span class="keywordtype">char</span>   type[30];
-<a name="l00100"></a>00100   <span class="keywordtype">char</span>   s_val[30];
-<a name="l00101"></a>00101   <span class="keywordtype">char</span>   comm[30];
-<a name="l00102"></a>00102   <span class="keywordtype">double</span> n_val;
-<a name="l00103"></a>00103   <span class="keywordtype">int</span>    n;
-<a name="l00104"></a>00104 };
-<a name="l00105"></a>00105 <span class="keyword">typedef</span> <span class="keyword">struct </span>qc_log_ qc_log; 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="keyword">struct </span>fake_ {
-<a name="l00108"></a>00108   <span class="keywordtype">char</span>  pro_class[FILE_NAME_SZ];
-<a name="l00109"></a>00109   <span class="keywordtype">int</span>   frm_switch;
-<a name="l00110"></a>00110   <span class="keywordtype">int</span>   is_fake_sky;
-<a name="l00111"></a>00111   <span class="keywordtype">int</span>   mask_index;
-<a name="l00112"></a>00112   <span class="keywordtype">int</span>   ind_index;
-<a name="l00113"></a>00113   <span class="keywordtype">int</span>   flat_index;
-<a name="l00114"></a>00114   <span class="keywordtype">int</span>   wfix_index;
-<a name="l00115"></a>00115   <span class="keywordtype">double</span>   low_rej;
-<a name="l00116"></a>00116   <span class="keywordtype">double</span>   hig_rej;
-<a name="l00117"></a>00117 };
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="keyword">typedef</span> <span class="keyword">struct </span>fake_ fake;
-<a name="l00120"></a>00120 fake* sinfo_fake_new(<span class="keywordtype">void</span>);
-<a name="l00121"></a>00121 <span class="keywordtype">void</span> sinfo_fake_delete(fake** f);
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="keyword">struct </span>wcal_ {
-<a name="l00125"></a>00125   <span class="keywordtype">double</span> wstart;
-<a name="l00126"></a>00126   <span class="keywordtype">double</span> wgdisp1;
-<a name="l00127"></a>00127   <span class="keywordtype">double</span> wgdisp2;
-<a name="l00128"></a>00128   <span class="keywordtype">double</span> min_dif;
-<a name="l00129"></a>00129   <span class="keywordtype">double</span> fwhm;
-<a name="l00130"></a>00130   <span class="keywordtype">double</span> min_amp;
-<a name="l00131"></a>00131   <span class="keywordtype">double</span> pixel_tol;
-<a name="l00132"></a>00132   <span class="keywordtype">double</span> y_box;
-<a name="l00133"></a>00133   <span class="keywordtype">int</span> low_pos;
-<a name="l00134"></a>00134   <span class="keywordtype">int</span> hig_pos;
-<a name="l00135"></a>00135   <span class="keywordtype">int</span>    hw;
-<a name="l00136"></a>00136   <span class="keywordtype">int</span>    na_coef;
-<a name="l00137"></a>00137   <span class="keywordtype">int</span>    nb_coef;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 };
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="keyword">typedef</span> <span class="keyword">struct </span>wcal_ wcal;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 wcal* sinfo_wcal_new(<span class="keywordtype">void</span>);
-<a name="l00144"></a>00144 <span class="keywordtype">void</span> sinfo_wcal_delete(wcal* f);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 <span class="keyword">struct </span>stack_ {
-<a name="l00148"></a>00148   <span class="keywordtype">char</span> do_class[FILE_NAME_SZ];
-<a name="l00149"></a>00149   <span class="keywordtype">char</span> index_list[FILE_NAME_SZ];
-<a name="l00150"></a>00150   <span class="keywordtype">int</span>  warp_fix_ind;
-<a name="l00151"></a>00151 };
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="keyword">typedef</span> <span class="keyword">struct </span>stack_ stack;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 stack* sinfo_stack_new(<span class="keywordtype">void</span>);
-<a name="l00156"></a>00156 <span class="keywordtype">void</span> sinfo_stack_delete(stack* s);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 <span class="keyword">struct </span>nst_ {
-<a name="l00161"></a>00161   <span class="keywordtype">double</span> min_dif[4];
-<a name="l00162"></a>00162   <span class="keywordtype">double</span> fwhm[4];
-<a name="l00163"></a>00163 };
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="keyword">typedef</span> <span class="keyword">struct </span>nst_ nstpar;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 nstpar* sinfo_nstpar_new(<span class="keywordtype">void</span>);
-<a name="l00168"></a>00168 <span class="keywordtype">void</span> sinfo_nstpar_delete(nstpar* n);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="keyword">struct </span>dist_ {
-<a name="l00171"></a>00171   <span class="keywordtype">double</span> diff_tol[4];
-<a name="l00172"></a>00172 };
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 <span class="keyword">typedef</span> <span class="keyword">struct </span>dist_ distpar;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 distpar* sinfo_distpar_new(<span class="keywordtype">void</span>);
-<a name="l00177"></a>00177 <span class="keywordtype">void</span> sinfo_distpar_delete(distpar* d);
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_globals.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_globals.h,v 1.7 2013/07/15 08:14:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/07/15 08:14:08 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_GLOBALS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_GLOBALS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#define SINFO_RESAMP_NROWS 2560</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define PI_NUMB     (3.1415926535897932384626433832795)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define ZERO    0./0.</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define FLAG    -1.e+9</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define QC_DID_ID                          "SINFONI-1.0.0"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define FILE_NAME_SZ                       512</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define MAX_NAME_SIZE                      512</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define TELESCOPE_SURFACE                  52.8101279</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define NOISE_HSIZE                        4</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define NOISE_NSAMPLES                     100</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DBL_MIN 1e-37</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_DBL_MAX 1e+37</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#define IMA_PIX_START                      0</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define IMA_PIX_END                        2047</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define SIZEX                              2048</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define SIZEY                              2048</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define DET_PIX_MIN                        1</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define DET_PIX_MAX                        2048</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define LLX                                1350</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define LLY                                1000</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define URX                                1390</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define URY                                1200</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define DISTORTION_LOPOS                    974</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_HIPOS                   1074</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#define GRAT_VAL1_HK                       3997330</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_HK                       3997339</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_H                        2948723</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_H                        2948733</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_K                        1893844</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_K                        1893854</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL1_J                         849618</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL2_J                         849628</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span><span class="preprocessor">#define GRAT_VAL_TOL                             4</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#define SKY_FLUX                                 0</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define BKG_VARIANCE                            9.6</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define GAIN                                    2.42</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define MAGNITUDE                              11</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#define MSG_OVER_WRITE_PAR        "Using default data reduction parameters"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define LAMP_ON     TRUE</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define LAMP_OFF    FALSE</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/* compat macro */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_frameset_get_frame cpl_frameset_get_position</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define cpl_frameset_get_frame_const cpl_frameset_get_position_const</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">struct </span>amoeba_ {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_vector*   vx;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   cpl_vector*   vy;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_vector*   sx;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   cpl_vector*   sy;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> };</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>amoeba_ amoeba_dat; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> amoeba_dat* sinfo_amoeba_new(cpl_vector* vx, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                              cpl_vector* vy, </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                              cpl_vector* sx, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                              cpl_vector* sy);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">void</span> sinfo_amoeba_delete(amoeba_dat** a);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">struct </span>qc_log_ {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">char</span>   name[30];</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">char</span>   type[30];</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">char</span>   s_val[30];</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">char</span>   comm[30];</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">double</span> n_val;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">int</span>    n;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> };</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>qc_log_ qc_log; </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keyword">struct </span>fake_ {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">char</span>  pro_class[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">int</span>   frm_switch;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span>   is_fake_sky;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span>   mask_index;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">int</span>   ind_index;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">int</span>   flat_index;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span>   wfix_index;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">double</span>   low_rej;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">double</span>   hig_rej;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> };</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>fake_ fake;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> fake* sinfo_fake_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="keywordtype">void</span> sinfo_fake_delete(fake** f);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keyword">struct </span>wcal_ {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">double</span> wstart;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">double</span> wgdisp1;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">double</span> wgdisp2;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">double</span> min_dif;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">double</span> fwhm;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">double</span> min_amp;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">double</span> pixel_tol;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">double</span> y_box;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordtype">int</span> low_pos;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">int</span> hig_pos;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">int</span>    hw;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordtype">int</span>    na_coef;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">int</span>    nb_coef;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> };</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>wcal_ wcal;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> wcal* sinfo_wcal_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keywordtype">void</span> sinfo_wcal_delete(wcal* f);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">struct </span>stack_ {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordtype">char</span> do_class[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordtype">char</span> index_list[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">int</span>  warp_fix_ind;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> };</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>stack_ stack;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> stack* sinfo_stack_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keywordtype">void</span> sinfo_stack_delete(stack* s);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="keyword">struct </span>nst_ {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordtype">double</span> min_dif[4];</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordtype">double</span> fwhm[4];</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> };</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>nst_ nstpar;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> nstpar* sinfo_nstpar_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="keywordtype">void</span> sinfo_nstpar_delete(nstpar* n);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keyword">struct </span>dist_ {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordtype">double</span> diff_tol[4];</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> };</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>dist_ distpar;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> distpar* sinfo_distpar_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keywordtype">void</span> sinfo_distpar_delete(distpar* d);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__hidden_8h_source.html b/html/sinfo__hidden_8h_source.html
index e54ae86..d637f9b 100644
--- a/html/sinfo__hidden_8h_source.html
+++ b/html/sinfo__hidden_8h_source.html
@@ -2,127 +2,158 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_hidden.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_hidden.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_hidden.h,v 1.7 2010/02/12 17:56:35 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2010/02/12 17:56:35 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_HIDDEN_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_HIDDEN_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#define BP_LIN_OUT_FILENAME               "out_bp_lin.fits"</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_GAIN_OUT_FILENAME          "out_gain_info.fits"</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_LIN_DET_INFO_OUT_FILENAME  "out_lin_det_info.fits"</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_COEFFS_CUBE_OUT_FILENAME   "out_bplin_coeffsCube.fits"</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define BP_NOISE_OUT_FILENAME             "out_bp_noise.fits"</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#define BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME  "out_int_col_tilt_corr.fits"</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#define DARK_OUT_FILENAME        "out_dark.fits"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define LAMP_FLATS_OUT_FILENAME   "out_flat.fits"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define LAMP_FLATS_OUT_BPMAP      "out_bpmask.fits"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define BP_NORM_OUT_FILENAME      "out_bp_norm.fits"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define MASTER_BPMAP_OUT_FILENAME "out_bpmap_sum.fits"</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define DISTORTION_NS_OUT_FILENAME "out_ns_distortion.fits"</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_OUT_FILENAME    "out_distortion.fits"</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_STACK_OFF_OUT_FILENAME   "out_ns_stack_off.fits"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_STACK_ON_OUT_FILENAME    "out_ns_stack_on.fits"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#define SLITPOS_OUT_FILENAME       "out_slit_pos.fits"</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define BP_DIST_OUT_FILENAME       "out_bp_dist.fits"</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define COEFF_OUT_FILENAME         "out_coef_params.fits"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define NS_TEST_DISTANCES_OUT_FILENAME "out_distances.fits"</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define NS_TEST_OUT_FILENAME           "out_ns.fits"</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="preprocessor">#define WAVECAL_OUT_FILENAME              "out_wavemap_ima.fits"</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_FIT_PARAMS_OUT_FILENAME   "out_fit_params.fits"</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_FIT_PARAMS_OUT_FILEASCII   "out_fit_params.ascii"</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_COEFF_SLIT_OUT_FILENAME   "outCoeffsSlit.fits"</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_SLIT_POS_OUT_FILENAME     "out_slitpos.fits"</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_RESAMPLED_OUT_FILENAME   "out_resampled_arclamp.fits"</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#define STACKED_OUT_FILENAME                 "out_stack.fits"</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define STACK_MFLAT_DIST_OUT_FILENAME        "out_stack_mflat_dist.fits"</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define STACK_MFLAT_DITHER_DIST_OUT_FILENAME "out_stack_mflat_dither_dist.fits"</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#define STACK_SKY_DIST_OUT_FILENAME             "out_sky_stack_dist"</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#define ESTIMATED_SLITLETS_DISTANCE 64.</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#define PSF_OUT_FILENAME                   "out_psf.fits"</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define PSF_MED_CUB_025_FILENAME           "out_med_cube_025_mas.fits"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define PSF_MED_CUB_100_FILENAME           "out_med_cube_100_mas.fits"</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define PSF_AO_PERFORMANCE_OUT_FILENAME    "out_ao_performance.fits"</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define PSF_ENC_ENERGY_OUT_FILENAME        "out_encircled_energy.fits"</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_OUT_FILENAME               "out_starspectrum.fits"</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_OUT_TABLE                  "out_std_star_spectrum.fits"</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_CONV_OUT_FILENAME          "out_convfactor.fits"</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define SKYPMAP_OUT_FILENAME               "out_skymap.fits"</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define NSLITLETS               32</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 <span class="preprocessor">#define OBJNOD_OUT_BPMAP        "out_objnod_bpmap.fits"</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MED_CUBE     "out_objnod_med_cube.fits"</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_FILENAME     "out_objnod.fits"</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span>
-<a name="l00093"></a>00093 <span class="preprocessor">#define OBJNOD_OUT_MFLAT_CUBE_FILENAME     "out_mflat_cube.fits"</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MFLAT_AVG_FILENAME      "out_mflat_avg.fits"</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MFLAT_MED_FILENAME      "out_mflat_med.fits"</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_OBJ_FILENAME         "out_resampled_obj"</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_SKY_FILENAME         "out_resampled_sky"</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_FLAT_FILENAME        "out_resampled_flat"</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="preprocessor">#define STDSTAR_OUT_MED_CUBE    "out_stdstar_med_cube.fits"</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span>
-<a name="l00103"></a>00103 <span class="preprocessor">#define FOCUS_OUT_FILENAME             "out_focus.fits"</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define FOCUS_FITPAR_OUT_FILENAME      "out_focus_fitpar.fits"</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define FOCUS_GAUSSPLOT_OUT_FILENAME   "out_focus_gaussplot.fits"</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span>
-<a name="l00107"></a>00107 <span class="preprocessor">#define LAMPSPEC_OUT_FILENAME "out_lampspec.fits"</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define TWIFLAT_OUT_FILENAME  "out_twiflat.fits"</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define SKYSPIDER_OUT_FILENAME "out_objnod.fits"</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define SKYSPIDER_MASK_OUT_FILENAME "out_mask_cube_spider.fits"</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define EFFICIENCY_FILENAME "out_efficiency.fits"</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_hidden.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_hidden.h,v 1.7 2010/02/12 17:56:35 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2010/02/12 17:56:35 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_HIDDEN_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_HIDDEN_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#define BP_LIN_OUT_FILENAME               "out_bp_lin.fits"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_GAIN_OUT_FILENAME          "out_gain_info.fits"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_LIN_DET_INFO_OUT_FILENAME  "out_lin_det_info.fits"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_LIN_COEFFS_CUBE_OUT_FILENAME   "out_bplin_coeffsCube.fits"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_NOISE_OUT_FILENAME             "out_bp_noise.fits"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#define BP_NORM_INT_COL_TILT_CORR_OUT_FILENAME  "out_int_col_tilt_corr.fits"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#define DARK_OUT_FILENAME        "out_dark.fits"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define LAMP_FLATS_OUT_FILENAME   "out_flat.fits"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define LAMP_FLATS_OUT_BPMAP      "out_bpmask.fits"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_NORM_OUT_FILENAME      "out_bp_norm.fits"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define MASTER_BPMAP_OUT_FILENAME "out_bpmap_sum.fits"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#define DISTORTION_NS_OUT_FILENAME "out_ns_distortion.fits"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_OUT_FILENAME    "out_distortion.fits"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_STACK_OFF_OUT_FILENAME   "out_ns_stack_off.fits"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define DISTORTION_STACK_ON_OUT_FILENAME    "out_ns_stack_on.fits"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define SLITPOS_OUT_FILENAME       "out_slit_pos.fits"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define BP_DIST_OUT_FILENAME       "out_bp_dist.fits"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define COEFF_OUT_FILENAME         "out_coef_params.fits"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define NS_TEST_DISTANCES_OUT_FILENAME "out_distances.fits"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define NS_TEST_OUT_FILENAME           "out_ns.fits"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define WAVECAL_OUT_FILENAME              "out_wavemap_ima.fits"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_FIT_PARAMS_OUT_FILENAME   "out_fit_params.fits"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_FIT_PARAMS_OUT_FILEASCII   "out_fit_params.ascii"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_COEFF_SLIT_OUT_FILENAME   "outCoeffsSlit.fits"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_SLIT_POS_OUT_FILENAME     "out_slitpos.fits"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define WAVECAL_RESAMPLED_OUT_FILENAME   "out_resampled_arclamp.fits"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#define STACKED_OUT_FILENAME                 "out_stack.fits"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#define STACK_MFLAT_DIST_OUT_FILENAME        "out_stack_mflat_dist.fits"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="preprocessor">#define STACK_MFLAT_DITHER_DIST_OUT_FILENAME "out_stack_mflat_dither_dist.fits"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#define STACK_SKY_DIST_OUT_FILENAME             "out_sky_stack_dist"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#define ESTIMATED_SLITLETS_DISTANCE 64.</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#define PSF_OUT_FILENAME                   "out_psf.fits"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define PSF_MED_CUB_025_FILENAME           "out_med_cube_025_mas.fits"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define PSF_MED_CUB_100_FILENAME           "out_med_cube_100_mas.fits"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define PSF_AO_PERFORMANCE_OUT_FILENAME    "out_ao_performance.fits"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define PSF_ENC_ENERGY_OUT_FILENAME        "out_encircled_energy.fits"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_OUT_FILENAME               "out_starspectrum.fits"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_OUT_TABLE                  "out_std_star_spectrum.fits"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#define STDSTAR_CONV_OUT_FILENAME          "out_convfactor.fits"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define SKYPMAP_OUT_FILENAME               "out_skymap.fits"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define NSLITLETS               32</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#define OBJNOD_OUT_BPMAP        "out_objnod_bpmap.fits"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MED_CUBE     "out_objnod_med_cube.fits"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_FILENAME     "out_objnod.fits"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#define OBJNOD_OUT_MFLAT_CUBE_FILENAME     "out_mflat_cube.fits"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MFLAT_AVG_FILENAME      "out_mflat_avg.fits"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span><span class="preprocessor">#define OBJNOD_OUT_MFLAT_MED_FILENAME      "out_mflat_med.fits"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_OBJ_FILENAME         "out_resampled_obj"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_SKY_FILENAME         "out_resampled_sky"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#define RESAMPLED_OUT_FLAT_FILENAME        "out_resampled_flat"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor">#define STDSTAR_OUT_MED_CUBE    "out_stdstar_med_cube.fits"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor">#define FOCUS_OUT_FILENAME             "out_focus.fits"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span><span class="preprocessor">#define FOCUS_FITPAR_OUT_FILENAME      "out_focus_fitpar.fits"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span><span class="preprocessor">#define FOCUS_GAUSSPLOT_OUT_FILENAME   "out_focus_gaussplot.fits"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">#define LAMPSPEC_OUT_FILENAME "out_lampspec.fits"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span><span class="preprocessor">#define TWIFLAT_OUT_FILENAME  "out_twiflat.fits"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span><span class="preprocessor">#define SKYSPIDER_OUT_FILENAME "out_objnod.fits"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span><span class="preprocessor">#define SKYSPIDER_MASK_OUT_FILENAME "out_mask_cube_spider.fits"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span><span class="preprocessor">#define EFFICIENCY_FILENAME "out_efficiency.fits"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__image__ops_8c_source.html b/html/sinfo__image__ops_8c_source.html
index 5dccd3c..1149203 100644
--- a/html/sinfo__image__ops_8c_source.html
+++ b/html/sinfo__image__ops_8c_source.html
@@ -2,3116 +2,3147 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_image_ops.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_image_ops.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* M.P.E. - SPIFFI project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* rabuter 2004-12-03 support one dimensional image in sinfo_shiftImage</span>
-<a name="l00027"></a>00027 <span class="comment">* schreib  23/05/00  created</span>
-<a name="l00028"></a>00028 <span class="comment">*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="comment">/************************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">*   NAME</span>
-<a name="l00032"></a>00032 <span class="comment">*        sinfo_image_ops.c -</span>
-<a name="l00033"></a>00033 <span class="comment">*        image arithmetic routines</span>
-<a name="l00034"></a>00034 <span class="comment">*</span>
-<a name="l00035"></a>00035 <span class="comment">*   SYNOPSIS</span>
-<a name="l00036"></a>00036 <span class="comment">*   #include "sinfo_image_ops.h"</span>
-<a name="l00037"></a>00037 <span class="comment">*</span>
-<a name="l00038"></a>00038 <span class="comment">*   1) Vector * sinfo_new_mean_of_columns( cpl_image *im )</span>
-<a name="l00039"></a>00039 <span class="comment">*   2) Vector * sinfo_new_clean_mean_of_columns( cpl_image *im,</span>
-<a name="l00040"></a>00040 <span class="comment">*                                   double lo_reject,</span>
-<a name="l00041"></a>00041 <span class="comment">*                                   double hi_reject)</span>
-<a name="l00042"></a>00042 <span class="comment">*   3) cpl_image * sinfo_new_div_image_by_row( cpl_image *im, Vector *row )</span>
-<a name="l00043"></a>00043 <span class="comment">*   4) cpl_image * sinfo_new_mult_row_to_image( cpl_image *im, Vector *row )</span>
-<a name="l00044"></a>00044 <span class="comment">*   5) cpl_image * sinfo_new_col_tilt ( cpl_image * image, float sigmaFactor )</span>
-<a name="l00045"></a>00045 <span class="comment">*   6) cpl_image * sinfo_new_median_image( cpl_image * im, float fmedian )</span>
-<a name="l00046"></a>00046 <span class="comment">*   7) cpl_image * sinfo_new_compare_images( cpl_image * im1,</span>
-<a name="l00047"></a>00047 <span class="comment">                                             cpl_image * im2,</span>
-<a name="l00048"></a>00048 <span class="comment">                                             cpl_image * origim )</span>
-<a name="l00049"></a>00049 <span class="comment">*   8) cpl_image * sinfo_new_thresh_image ( cpl_image * im,</span>
-<a name="l00050"></a>00050 <span class="comment">                                            float lo_cut, float hi_cut )</span>
-<a name="l00051"></a>00051 <span class="comment">*   9) pixel_map * sinfo_new_promote_image_to_pixelmap ( cpl_image * im )</span>
-<a name="l00052"></a>00052 <span class="comment">*  10) cpl_image * sinfo_new_promote_image_to_mask ( cpl_image * im,</span>
-<a name="l00053"></a>00053 <span class="comment">                                                     int * n_badpixels )</span>
-<a name="l00054"></a>00054 <span class="comment">*  11) cpl_image * sinfo_new_mult_image_by_mask ( cpl_image * im,</span>
-<a name="l00055"></a>00055 <span class="comment">                                                  cpl_image * mask )</span>
-<a name="l00056"></a>00056 <span class="comment">*  12) cpl_image * sinfo_new_interpol_image ( cpl_image * im,</span>
-<a name="l00057"></a>00057 <span class="comment">*                                 cpl_image * mask,</span>
-<a name="l00058"></a>00058 <span class="comment">*                                 int        max_radius,</span>
-<a name="l00059"></a>00059 <span class="comment">*                                 int        n_pixels )</span>
-<a name="l00060"></a>00060 <span class="comment">*  13) cpl_image * sinfo_interpol_source_image ( cpl_image * im,</span>
-<a name="l00061"></a>00061 <span class="comment">*                                       cpl_image * mask,</span>
-<a name="l00062"></a>00062 <span class="comment">*                                       int        max_rad,</span>
-<a name="l00063"></a>00063 <span class="comment">*                                       float   ** slit_edges )</span>
-<a name="l00064"></a>00064 <span class="comment">*  14) cpl_image * sinfo_new_stack_row_to_image ( Vector * row, int ly )</span>
-<a name="l00065"></a>00065 <span class="comment">*  15) Stats * sinfo_new_image_stats_on_rectangle ( cpl_image * im,</span>
-<a name="l00066"></a>00066 <span class="comment">*                                      float      loReject,</span>
-<a name="l00067"></a>00067 <span class="comment">*                                      float      hiReject,</span>
-<a name="l00068"></a>00068 <span class="comment">*                                      int        llx,</span>
-<a name="l00069"></a>00069 <span class="comment">*                                      int        lly,</span>
-<a name="l00070"></a>00070 <span class="comment">*                                      int        urx,</span>
-<a name="l00071"></a>00071 <span class="comment">*                                      int        ury )</span>
-<a name="l00072"></a>00072 <span class="comment">*  16) cpl_image * sinfo_new_normalize_to_central_pixel ( cpl_image * image )</span>
-<a name="l00073"></a>00073 <span class="comment">*  17) cpl_image *</span>
-<a name="l00074"></a>00074 <span class="comment">*      sinfo_new_shift_image(</span>
-<a name="l00075"></a>00075 <span class="comment">*            cpl_image    *    image_in,</span>
-<a name="l00076"></a>00076 <span class="comment">*            double           shift_x,</span>
-<a name="l00077"></a>00077 <span class="comment">*            double           shift_y,</span>
-<a name="l00078"></a>00078 <span class="comment">*            double       *   interp_kernel)</span>
-<a name="l00079"></a>00079 <span class="comment">*  18) cpl_image * sinfo_new_combine_masks ( cpl_image * firstMask,</span>
-<a name="l00080"></a>00080 <span class="comment">                                             cpl_image * secondMask )</span>
-<a name="l00081"></a>00081 <span class="comment">*  19) cpl_image * sinfo_new_slice_cube (cpl_imagelist * cube, int x, int y )</span>
-<a name="l00082"></a>00082 <span class="comment">*  20) cpl_image * sinfo_new_div_images_robust ( cpl_image * im1,</span>
-<a name="l00083"></a>00083 <span class="comment">                                                 cpl_image * im2 )</span>
-<a name="l00084"></a>00084 <span class="comment">*</span>
-<a name="l00085"></a>00085 <span class="comment">*</span>
-<a name="l00086"></a>00086 <span class="comment">*   DESCRIPTION</span>
-<a name="l00087"></a>00087 <span class="comment">*   1) takes the average of each image column</span>
-<a name="l00088"></a>00088 <span class="comment">*   2) takes the average of each image column by sorting the</span>
-<a name="l00089"></a>00089 <span class="comment">*      column values and rejecting the given percentage of</span>
-<a name="l00090"></a>00090 <span class="comment">*      the highest and lowest values  [0...1]</span>
-<a name="l00091"></a>00091 <span class="comment">*   3) divides each image column by a row value</span>
-<a name="l00092"></a>00092 <span class="comment">*   4) multiplies each image column with a row value</span>
-<a name="l00093"></a>00093 <span class="comment">*   5) first calculates statistics for each column of an image.</span>
-<a name="l00094"></a>00094 <span class="comment">*      sinfo_median value and standard deviation of columns are de-</span>
-<a name="l00095"></a>00095 <span class="comment">*      termined, blank values are excluded. Fits a straight</span>
-<a name="l00096"></a>00096 <span class="comment">*      line through the pixel values of each column and subtracts</span>
-<a name="l00097"></a>00097 <span class="comment">*      the fit in order to remove the tilt of each column.</span>
-<a name="l00098"></a>00098 <span class="comment">*      Only those pixels are used for the fit that are within</span>
-<a name="l00099"></a>00099 <span class="comment">*      a defined factor of sigma noise limit. The noise is</span>
-<a name="l00100"></a>00100 <span class="comment">*      calculated from pixels between the 10percentil and</span>
-<a name="l00101"></a>00101 <span class="comment">*      90percentil points.</span>
-<a name="l00102"></a>00102 <span class="comment">*      if the straight line could not be determined, the sinfo_median</span>
-<a name="l00103"></a>00103 <span class="comment">*      of the column is subtracted from the column</span>
-<a name="l00104"></a>00104 <span class="comment">*   6) sinfo_median filter, calculates the sinfo_median for an image</span>
-<a name="l00105"></a>00105 <span class="comment">*      by using the 8 closest pixels to each pixel.</span>
-<a name="l00106"></a>00106 <span class="comment">*      The values in the output image are determined according</span>
-<a name="l00107"></a>00107 <span class="comment">*      to the values of the input parameter.</span>
-<a name="l00108"></a>00108 <span class="comment">*      If fmedian = 0: always replace by sinfo_median</span>
-<a name="l00109"></a>00109 <span class="comment">*      if fmedian < 0: replace by sinfo_median if |pixel - sinfo_median| ></span>
-<a name="l00110"></a>00110 <span class="comment">*                      -fmedian</span>
-<a name="l00111"></a>00111 <span class="comment">*      if fmedian > 0: replace by sinfo_median (fmedian as a factor of</span>
-<a name="l00112"></a>00112 <span class="comment">*                      the square root of the sinfo_median itself)</span>
-<a name="l00113"></a>00113 <span class="comment">*                      if |pixel - median| >= fmedian * sqrt ( median )</span>
-<a name="l00114"></a>00114 <span class="comment">*                      This can be used to consider photon noise.</span>
-<a name="l00115"></a>00115 <span class="comment">*                      This considers a dependence of the differences on the</span>
-<a name="l00116"></a>00116 <span class="comment">*                      pixel values themselves.</span>
-<a name="l00117"></a>00117 <span class="comment">*   7) if a pixel value of one image (im1) equals</span>
-<a name="l00118"></a>00118 <span class="comment">*      the pixel value of the other image keep the</span>
-<a name="l00119"></a>00119 <span class="comment">*      pixel value of the original image otherwise replace</span>
-<a name="l00120"></a>00120 <span class="comment">*      it with ZEROs</span>
-<a name="l00121"></a>00121 <span class="comment">*   8) simple search for static bad pixels for a flat field</span>
-<a name="l00122"></a>00122 <span class="comment">*      or sinfo_dark frame, values below and above the threshold</span>
-<a name="l00123"></a>00123 <span class="comment">*      values are set to ZERO.</span>
-<a name="l00124"></a>00124 <span class="comment">*   9) changes an image with ZERO indicated bad pixels to</span>
-<a name="l00125"></a>00125 <span class="comment">*      a bad pixel map.</span>
-<a name="l00126"></a>00126 <span class="comment">*  10) changes an image with ZERO indicated bad pixels to</span>
-<a name="l00127"></a>00127 <span class="comment">*      a bad pixel mask image, that means the returned</span>
-<a name="l00128"></a>00128 <span class="comment">*      image has values 1 at positions of good pixels and</span>
-<a name="l00129"></a>00129 <span class="comment">*      ZEROs at positions of bad pixels.</span>
-<a name="l00130"></a>00130 <span class="comment">*  11) changes an image to an image that has ZERO indicated</span>
-<a name="l00131"></a>00131 <span class="comment">*      static bad pixels</span>
-<a name="l00132"></a>00132 <span class="comment">*  12) interpolates all bad pixels indicated by the bad pixel mask.</span>
-<a name="l00133"></a>00133 <span class="comment">*      Therefore, the mean of at least 2 valid values of</span>
-<a name="l00134"></a>00134 <span class="comment">*      the nearest 8 neighbors is taken. If too much</span>
-<a name="l00135"></a>00135 <span class="comment">*      neighbors are also bad pixels</span>
-<a name="l00136"></a>00136 <span class="comment">*      the neighbor radius is increased to a maximum of</span>
-<a name="l00137"></a>00137 <span class="comment">*      max_radius until n_pixels valid pixels are found.</span>
-<a name="l00138"></a>00138 <span class="comment">*      The valid neighbors are searched by going through</span>
-<a name="l00139"></a>00139 <span class="comment">*      the columns and rows around the central square that</span>
-<a name="l00140"></a>00140 <span class="comment">*      was already searched.</span>
-<a name="l00141"></a>00141 <span class="comment">*      The bad pixel is interpolated by the mean of these</span>
-<a name="l00142"></a>00142 <span class="comment">*      valid pixels (less than 9) or by the sinfo_median of them</span>
-<a name="l00143"></a>00143 <span class="comment">*      (more than 8).</span>
-<a name="l00144"></a>00144 <span class="comment">*  13) interpolates all bad pixels indicated by the bad pixel mask.</span>
-<a name="l00145"></a>00145 <span class="comment">*      Therefore, the mean of the nearest 4 neighbors is taken,</span>
-<a name="l00146"></a>00146 <span class="comment">*      two in spectral direction and 2 in spatial direction.</span>
-<a name="l00147"></a>00147 <span class="comment">*      The routine cares about the image and slitlet edges.</span>
-<a name="l00148"></a>00148 <span class="comment">*      If there are no good pixel found within the nearest neighbors,</span>
-<a name="l00149"></a>00149 <span class="comment">*      the next 4 nearest neighbors in spatial and spectral direction</span>
-<a name="l00150"></a>00150 <span class="comment">*      are searched for valid pixels until a limit of max_rad.</span>
-<a name="l00151"></a>00151 <span class="comment">*      A maximum of 4 valid pixels are used for interpolation by their mean.</span>
-<a name="l00152"></a>00152 <span class="comment">*  14) stack a given image row to build a whole image</span>
-<a name="l00153"></a>00153 <span class="comment">*  15) computes the mean and standard deviation of</span>
-<a name="l00154"></a>00154 <span class="comment">*      a given rectangle on an image by leaving the extreme</span>
-<a name="l00155"></a>00155 <span class="comment">*      intensity values.</span>
-<a name="l00156"></a>00156 <span class="comment">*  16) normalizes a raw flatfield image by dividing by the median of the</span>
-<a name="l00157"></a>00157 <span class="comment">       central spectral pixels to produce a master flatfield</span>
-<a name="l00158"></a>00158 <span class="comment">*  17) This function is a conversion to CPL of the ECLIPSE function</span>
-<a name="l00159"></a>00159 <span class="comment">       shift_image()</span>
-<a name="l00160"></a>00160 <span class="comment">*      but slightly changed. If a blank (ZERO) pixel appears the blank pixel</span>
-<a name="l00161"></a>00161 <span class="comment">*      is shifted but preserved as blank.</span>
-<a name="l00162"></a>00162 <span class="comment">*      If a blank (ZERO) pixel appears within the</span>
-<a name="l00163"></a>00163 <span class="comment">*      interpolation kernel the blank pixel is set to 0.</span>
-<a name="l00164"></a>00164 <span class="comment">*</span>
-<a name="l00165"></a>00165 <span class="comment">*      This function shifts an image by a non-integer offset, using</span>
-<a name="l00166"></a>00166 <span class="comment">*      interpolation. You can either generate an interpolation kernel once and</span>
-<a name="l00167"></a>00167 <span class="comment">*      pass it to this function, or let it generate a default kernel. In the</span>
-<a name="l00168"></a>00168 <span class="comment">*      former case, use sinfo_generate_interpolation_kernel() to generate an</span>
-<a name="l00169"></a>00169 <span class="comment">*      appropriate kernel. In the latter case, pass NULL as last argument. A</span>
-<a name="l00170"></a>00170 <span class="comment">*      default interpolation kernel is then generated then discarded</span>
-<a name="l00171"></a>00171 <span class="comment">       before this function returns.</span>
-<a name="l00172"></a>00172 <span class="comment">*</span>
-<a name="l00173"></a>00173 <span class="comment">*      The returned image is a newly allocated object, it must be deallocated</span>
-<a name="l00174"></a>00174 <span class="comment">*      using cpl_image_delete().</span>
-<a name="l00175"></a>00175 <span class="comment">*  18) combines two bad pixel mask to one using an or relation</span>
-<a name="l00176"></a>00176 <span class="comment">*  19) slices a data cube in x or y direction</span>
-<a name="l00177"></a>00177 <span class="comment">*  20) divides two images by considering blanks and</span>
-<a name="l00178"></a>00178 <span class="comment">*      calculating first 1/im2 by</span>
-<a name="l00179"></a>00179 <span class="comment">*      cutting the very high values and setting to 1,</span>
-<a name="l00180"></a>00180 <span class="comment">*      then multiplying im1 * 1/im2.</span>
-<a name="l00181"></a>00181 <span class="comment">*</span>
-<a name="l00182"></a>00182 <span class="comment">*   FILES</span>
-<a name="l00183"></a>00183 <span class="comment">*</span>
-<a name="l00184"></a>00184 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00185"></a>00185 <span class="comment">*</span>
-<a name="l00186"></a>00186 <span class="comment">*   RETURN VALUES</span>
-<a name="l00187"></a>00187 <span class="comment">*</span>
-<a name="l00188"></a>00188 <span class="comment">*   CAUTIONS</span>
-<a name="l00189"></a>00189 <span class="comment">*</span>
-<a name="l00190"></a>00190 <span class="comment">*   EXAMPLES</span>
-<a name="l00191"></a>00191 <span class="comment">*</span>
-<a name="l00192"></a>00192 <span class="comment">*   SEE ALSO</span>
-<a name="l00193"></a>00193 <span class="comment">*</span>
-<a name="l00194"></a>00194 <span class="comment">*   BUGS</span>
-<a name="l00195"></a>00195 <span class="comment">*</span>
-<a name="l00196"></a>00196 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00197"></a>00197 <span class="comment">*/</span>
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00200"></a>00200 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00201"></a>00201 <span class="preprocessor">#endif</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 <span class="comment">/*</span>
-<a name="l00205"></a>00205 <span class="comment"> * System Headers</span>
-<a name="l00206"></a>00206 <span class="comment"> */</span>
-<a name="l00207"></a>00207 <span class="preprocessor">#include <errno.h></span>
-<a name="l00208"></a>00208 <span class="comment">/*</span>
-<a name="l00209"></a>00209 <span class="comment"> * Local Headers</span>
-<a name="l00210"></a>00210 <span class="comment"> */</span>
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00213"></a>00213 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00214"></a>00214 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00215"></a>00215 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00216"></a>00216 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00225"></a>00225 <span class="keyword">static</span> cpl_image *
-<a name="l00226"></a>00226 sinfo_gen_lowpass(<span class="keyword">const</span> <span class="keywordtype">int</span> xs,
-<a name="l00227"></a>00227                   <span class="keyword">const</span> <span class="keywordtype">int</span> ys,
-<a name="l00228"></a>00228                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_x,
-<a name="l00229"></a>00229                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_y);
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort_int(<span class="keywordtype">int</span>* data, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right);
-<a name="l00235"></a>00235 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00236"></a>00236 <span class="comment"> *                            Function codes</span>
-<a name="l00237"></a>00237 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 
-<a name="l00252"></a>00252 cpl_error_code
-<a name="l00253"></a>00253 sinfo_image_line_corr(<span class="keyword">const</span> <span class="keywordtype">int</span> width,
-<a name="l00254"></a>00254                 <span class="keyword">const</span> <span class="keywordtype">int</span> filt_rad,
-<a name="l00255"></a>00255                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,
-<a name="l00256"></a>00256                 cpl_image* ima_in,
-<a name="l00257"></a>00257                 cpl_image** ima_out)
-<a name="l00258"></a>00258 {
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260   cpl_image* mask=NULL;
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262   cpl_image* ima_backpix=NULL;
-<a name="l00263"></a>00263   cpl_image* ima_backpos=NULL;
-<a name="l00264"></a>00264   cpl_image* ima_ybackpix=NULL;
-<a name="l00265"></a>00265   cpl_image* ima_diffbackpix=NULL;
-<a name="l00266"></a>00266   cpl_image* ima_filt=NULL;
-<a name="l00267"></a>00267   cpl_image* ima = NULL;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269   cpl_matrix* filter=NULL;
-<a name="l00270"></a>00270   <span class="comment">//cpl_mask* bpm_good=NULL; //Is this really useful?</span>
-<a name="l00271"></a>00271   cpl_mask* bpm_bad=NULL;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273   <span class="keywordtype">int</span> sx=0;
-<a name="l00274"></a>00274   <span class="keywordtype">int</span> sy=0;
-<a name="l00275"></a>00275   <span class="keywordtype">int</span> i=0;
-<a name="l00276"></a>00276   <span class="keywordtype">int</span> j=0;
-<a name="l00277"></a>00277   <span class="keywordtype">int</span> k=0;
-<a name="l00278"></a>00278   <span class="keywordtype">double</span> med_back=0;
-<a name="l00279"></a>00279   <span class="keywordtype">double</span> sigma_back=0;
-<a name="l00280"></a>00280   <span class="keywordtype">double</span> medvalue=0;
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282   <span class="keywordtype">float</span>* pima=NULL;
-<a name="l00283"></a>00283   <span class="keywordtype">float</span>* ppix=NULL;
-<a name="l00284"></a>00284   <span class="keywordtype">float</span>* pmsk=NULL;
-<a name="l00285"></a>00285   <span class="keywordtype">int</span>* ppos=NULL;
-<a name="l00286"></a>00286   <span class="keywordtype">int</span>* pbackpix=NULL;
-<a name="l00287"></a>00287   cpl_binary* pbin=NULL;
-<a name="l00288"></a>00288   <span class="keywordtype">double</span> tot=0;
-<a name="l00289"></a>00289   <span class="keywordtype">double</span> mean=0;
-<a name="l00290"></a>00290   <span class="keywordtype">int</span>* ybad=NULL;
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   <span class="keywordtype">int</span> nrow=0;
-<a name="l00293"></a>00293   <span class="keywordtype">int</span> nbad=0;
-<a name="l00294"></a>00294   <span class="keywordtype">int</span> yval=0;
-<a name="l00295"></a>00295   <span class="keywordtype">int</span> yprev=0;
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298   check_nomsg(sx=cpl_image_get_size_x(ima_in));
-<a name="l00299"></a>00299   check_nomsg(sy=cpl_image_get_size_y(ima_in));
-<a name="l00300"></a>00300   check_nomsg(*ima_out=cpl_image_duplicate(ima_in));
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   check_nomsg(mask=cpl_image_new(sx,sy,CPL_TYPE_FLOAT));
-<a name="l00303"></a>00303   check_nomsg(pmsk=cpl_image_get_data_float(mask));
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   <span class="keywordflow">for</span>(i=0;i<width;i++) {
-<a name="l00306"></a>00306     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {
-<a name="l00307"></a>00307       pmsk[j*sx+i]=1;
-<a name="l00308"></a>00308     }
-<a name="l00309"></a>00309   }
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311   <span class="keywordflow">for</span>(i=sx-width;i<sx;i++) {
-<a name="l00312"></a>00312     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {
-<a name="l00313"></a>00313       pmsk[j*sx+i]=1;
-<a name="l00314"></a>00314     }
-<a name="l00315"></a>00315   }
-<a name="l00316"></a>00316   sinfo_free_image(&mask); <span class="comment">//is mask needed?</span>
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319   nrow=2*width*(sy-2*width);
-<a name="l00320"></a>00320   check_nomsg(ima_backpix=cpl_image_new(nrow,1,CPL_TYPE_FLOAT));
-<a name="l00321"></a>00321   check_nomsg(ima_backpos=cpl_image_new(nrow,1,CPL_TYPE_INT));
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323   check_nomsg(pima=cpl_image_get_data_float(ima_in));
-<a name="l00324"></a>00324   check_nomsg(ppix=cpl_image_get_data_float(ima_backpix));
-<a name="l00325"></a>00325   check_nomsg(ppos=cpl_image_get_data_int(ima_backpos));
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327   k=0;
-<a name="l00328"></a>00328   <span class="keywordflow">for</span>(i=0;i<width;i++) {
-<a name="l00329"></a>00329     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {
-<a name="l00330"></a>00330       ppix[k]=pima[j*sx+i];
-<a name="l00331"></a>00331       ppos[k]=j*sx+i;
-<a name="l00332"></a>00332       k++;
-<a name="l00333"></a>00333     }
-<a name="l00334"></a>00334   }
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   <span class="keywordflow">for</span>(i=sx-width;i<sx;i++) {
-<a name="l00337"></a>00337     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {
-<a name="l00338"></a>00338       ppix[k]=pima[j*sx+i];
-<a name="l00339"></a>00339       ppos[k]=j*sx+i;
-<a name="l00340"></a>00340       k++;
-<a name="l00341"></a>00341     }
-<a name="l00342"></a>00342   }
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344   check_nomsg(ima_ybackpix=cpl_image_duplicate(ima_backpos));
-<a name="l00345"></a>00345   sinfo_free_image(&ima_backpos);
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349   check_nomsg(cpl_image_divide_scalar(ima_ybackpix,sx));
-<a name="l00350"></a>00350   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353   check_nomsg(med_back=cpl_image_get_median(ima_backpix));
-<a name="l00354"></a>00354   check_nomsg(ima_diffbackpix=cpl_image_duplicate(ima_backpix));
-<a name="l00355"></a>00355   <span class="comment">//sinfo_msg("med_back=%g",med_back);</span>
-<a name="l00356"></a>00356   check_nomsg(cpl_image_subtract_scalar(ima_diffbackpix,med_back));
-<a name="l00357"></a>00357   <span class="comment">//check_nomsg(cpl_image_save(ima_diffbackpix,"ima_diff.fits",</span>
-<a name="l00358"></a>00358   <span class="comment">//                           CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360   check_nomsg(filter=cpl_matrix_new(1,filt_rad));
-<a name="l00361"></a>00361   check_nomsg(cpl_matrix_fill(filter,1.));
-<a name="l00362"></a>00362   check_nomsg(ima_filt=sinfo_image_filter_median(ima_diffbackpix,filter));
-<a name="l00363"></a>00363   sinfoni_free_matrix(&filter);
-<a name="l00364"></a>00364   <span class="comment">//check_nomsg(cpl_image_save(ima_filt,"ima_filt.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00365"></a>00365   <span class="comment">//             NULL,CPL_IO_DEFAULT));</span>
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367   
-<a name="l00368"></a>00368   check_nomsg(sigma_back=cpl_image_get_stdev(ima_filt));
-<a name="l00369"></a>00369   sinfo_free_image(&ima_filt);
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371   check_nomsg(ima=cpl_image_duplicate(ima_diffbackpix));
-<a name="l00372"></a>00372   sinfo_free_image(&ima_diffbackpix);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374   check_nomsg(cpl_image_abs(ima));
-<a name="l00375"></a>00375   <span class="comment">//sinfo_msg("sigma_back=%g",sigma_back);</span>
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377   <span class="comment">//find good pixels</span>
-<a name="l00378"></a>00378   check_nomsg(bpm_bad=cpl_mask_threshold_image_create(ima,kappa*sigma_back,
-<a name="l00379"></a>00379                               SINFO_DBL_MAX));
-<a name="l00380"></a>00380   <span class="comment">/*check_nomsg(bpm_good=cpl_mask_threshold_image_create(ima,SINFO_DBL_MIN,</span>
-<a name="l00381"></a>00381 <span class="comment">                               kappa*sigma_back));</span>
-<a name="l00382"></a>00382 <span class="comment">  sinfo_free_mask(&bpm_good);</span>
-<a name="l00383"></a>00383 <span class="comment">*/</span>
-<a name="l00384"></a>00384   check_nomsg(cpl_image_reject_from_mask(ima_backpix,bpm_bad));
-<a name="l00385"></a>00385   check_nomsg(medvalue=cpl_image_get_median(ima_backpix));
-<a name="l00386"></a>00386   <span class="comment">//sinfo_msg("medvalue=%g",sigma_back);</span>
-<a name="l00387"></a>00387   check_nomsg(nbad=cpl_mask_count(bpm_bad));
-<a name="l00388"></a>00388   <span class="comment">//sinfo_msg("nbad=%d",nbad);</span>
-<a name="l00389"></a>00389   check_nomsg(cpl_image_reject_from_mask(ima_backpix,bpm_bad));
-<a name="l00390"></a>00390   sinfo_free_image(&ima_backpix);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392   yprev=-1;
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394   check_nomsg(pbin=cpl_mask_get_data(bpm_bad));
-<a name="l00395"></a>00395   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));
-<a name="l00396"></a>00396   cpl_msg_debug(cpl_func, <span class="stringliteral">"%d lines detected"</span>, nbad);
-<a name="l00397"></a>00397   <span class="keywordflow">if</span>(nbad)
-<a name="l00398"></a>00398   {
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400       ybad = cpl_calloc(nbad,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00401"></a>00401       k=0;
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403       <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00404"></a>00404         <span class="keywordflow">if</span>(pbin[i] == CPL_BINARY_1) {
-<a name="l00405"></a>00405            ybad[k]=pbackpix[i] + 1;
-<a name="l00406"></a>00406            k++;
-<a name="l00407"></a>00407         }
-<a name="l00408"></a>00408       }
-<a name="l00409"></a>00409       sinfo_free_mask(&bpm_bad);
-<a name="l00410"></a>00410       sinfo_free_image(&ima_ybackpix);
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412       quicksort_int(&(ybad[0]), 0, nbad-1);
-<a name="l00413"></a>00413       yprev=-1;
-<a name="l00414"></a>00414       <span class="keywordflow">for</span>(k=0;k<nbad;k++) {
-<a name="l00415"></a>00415         yval=ybad[k];
-<a name="l00416"></a>00416         <span class="keywordflow">if</span>(yval == yprev) {
-<a name="l00417"></a>00417           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"skyp %d"</span>,yval);
-<a name="l00418"></a>00418         }
-<a name="l00419"></a>00419         <span class="keywordflow">else</span> {
-<a name="l00420"></a>00420           yprev=yval;
-<a name="l00421"></a>00421           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"correct raw %d"</span>,yval);
-<a name="l00422"></a>00422           check_nomsg(tot=cpl_image_get_flux_window(ima_in,1,yval,width,yval));
-<a name="l00423"></a>00423           check_nomsg(tot+=cpl_image_get_flux_window(ima_in,sx-width+1,
-<a name="l00424"></a>00424                             yval,sx,yval));
-<a name="l00425"></a>00425           mean=tot/(2. * width);
-<a name="l00426"></a>00426           check_nomsg(pima=cpl_image_get_data_float(*ima_out));
-<a name="l00427"></a>00427           <span class="keywordflow">for</span>(i=width;i<sx-width;i++) {
-<a name="l00428"></a>00428         pima[i+(yval-1)*sx]+=(<span class="keywordtype">float</span>)(mean-medvalue);
-<a name="l00429"></a>00429           }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431         }
-<a name="l00432"></a>00432       }
-<a name="l00433"></a>00433   }
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436  cleanup:
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438   sinfo_free_image(&mask); <span class="comment">//is mask needed?</span>
-<a name="l00439"></a>00439   sinfo_free_image(&ima_backpos);
-<a name="l00440"></a>00440   sinfoni_free_matrix(&filter);
-<a name="l00441"></a>00441   sinfo_free_image(&ima_filt);
-<a name="l00442"></a>00442   sinfo_free_image(&ima_diffbackpix);
-<a name="l00443"></a>00443 <span class="comment">//  sinfo_free_mask(&bpm_good);</span>
-<a name="l00444"></a>00444   sinfo_free_image(&ima_backpix);
-<a name="l00445"></a>00445   sinfo_free_mask(&bpm_bad);
-<a name="l00446"></a>00446   sinfo_free_image(&ima_ybackpix);
-<a name="l00447"></a>00447   cpl_image_delete(ima);
-<a name="l00448"></a>00448   cpl_free(ybad);
-<a name="l00449"></a>00449   <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 }
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453 
-<a name="l00462"></a>00462 <span class="keywordtype">double</span> sinfo_new_my_median_image(cpl_image* im)
-<a name="l00463"></a>00463 {
-<a name="l00464"></a>00464   <span class="keywordtype">double</span> m=0;
-<a name="l00465"></a>00465   <span class="keyword">register</span> <span class="keywordtype">int</span> i=0;
-<a name="l00466"></a>00466   <span class="keywordtype">int</span> n=0;
-<a name="l00467"></a>00467   pixelvalue* pv=0;
-<a name="l00468"></a>00468   <span class="keywordtype">int</span> ilx=0;
-<a name="l00469"></a>00469   <span class="keywordtype">int</span> ily=0;
-<a name="l00470"></a>00470   <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473   <span class="keywordflow">if</span>(im==NULL) <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Null Image"</span>);
-<a name="l00474"></a>00474   ilx=cpl_image_get_size_x(im);
-<a name="l00475"></a>00475   ily=cpl_image_get_size_y(im);
-<a name="l00476"></a>00476   pidata=cpl_image_get_data_float(im);
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478    <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00479"></a>00479     {
-<a name="l00480"></a>00480       <span class="keywordflow">if</span> ( isnan(pidata[i]) )
-<a name="l00481"></a>00481         {
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     } <span class="keywordflow">else</span> {
-<a name="l00484"></a>00484       n++;
-<a name="l00485"></a>00485     }
-<a name="l00486"></a>00486     }
-<a name="l00487"></a>00487    pv = cpl_calloc(n,<span class="keyword">sizeof</span>(pixelvalue));
-<a name="l00488"></a>00488    n=0;
-<a name="l00489"></a>00489    <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00490"></a>00490     {
-<a name="l00491"></a>00491       <span class="keywordflow">if</span> ( isnan(pidata[i]) )
-<a name="l00492"></a>00492         {
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494     } <span class="keywordflow">else</span> {
-<a name="l00495"></a>00495       pv[n]=pidata[i];
-<a name="l00496"></a>00496           n++;
-<a name="l00497"></a>00497     }
-<a name="l00498"></a>00498     }
-<a name="l00499"></a>00499    <span class="keywordflow">if</span>(pv == NULL || n == 0) {
-<a name="l00500"></a>00500      m=0;
-<a name="l00501"></a>00501    } <span class="keywordflow">else</span> {
-<a name="l00502"></a>00502      m=sinfo_new_median(pv,n);
-<a name="l00503"></a>00503    }
-<a name="l00504"></a>00504    cpl_free(pv);
-<a name="l00505"></a>00505    <span class="keywordflow">if</span>(isnan(m)){
-<a name="l00506"></a>00506      m=0;
-<a name="l00507"></a>00507    }
-<a name="l00508"></a>00508   <span class="keywordflow">return</span> m;
-<a name="l00509"></a>00509 }
-<a name="l00510"></a>00510 
-<a name="l00519"></a>00519 Vector * sinfo_new_mean_of_columns( cpl_image *im )
-<a name="l00520"></a>00520 {
-<a name="l00521"></a>00521     Vector * row=NULL ;
-<a name="l00522"></a>00522     <span class="keywordtype">int</span> i=0;
-<a name="l00523"></a>00523     <span class="keywordtype">int</span> j=0;
-<a name="l00524"></a>00524     <span class="keywordtype">int</span> ilx=0;
-<a name="l00525"></a>00525     <span class="keywordtype">int</span> ily=0;
-<a name="l00526"></a>00526     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00529"></a>00529     {
-<a name="l00530"></a>00530         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image"</span>) ;
-<a name="l00531"></a>00531         <span class="keywordflow">return</span> NullVector ;
-<a name="l00532"></a>00532     }
-<a name="l00533"></a>00533     ilx=cpl_image_get_size_x(im);
-<a name="l00534"></a>00534     ily=cpl_image_get_size_y(im);
-<a name="l00535"></a>00535     pidata=cpl_image_get_data_float(im);
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537     <span class="comment">/* allocate memory for a row with the length of the image x-axis */</span>
-<a name="l00538"></a>00538     <span class="keywordflow">if</span> ( NULL == (row = sinfo_new_vector (ilx)) )
-<a name="l00539"></a>00539     {
-<a name="l00540"></a>00540         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"not able to allocate a sinfo_vector"</span> ) ;
-<a name="l00541"></a>00541         <span class="keywordflow">return</span> NullVector ;
-<a name="l00542"></a>00542     }
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l00545"></a>00545     {
-<a name="l00546"></a>00546         <span class="keywordflow">for</span> ( j = 0 ; j < ily ; j++ )
-<a name="l00547"></a>00547         {
-<a name="l00548"></a>00548             <span class="keywordflow">if</span> (!isnan(pidata[i+j*ilx]))
-<a name="l00549"></a>00549             {
-<a name="l00550"></a>00550                 row->data[i] += pidata[i + j*(ilx)] ;
-<a name="l00551"></a>00551             }
-<a name="l00552"></a>00552         }
-<a name="l00553"></a>00553 
-<a name="l00554"></a>00554         row->data[i] /= ily ;
-<a name="l00555"></a>00555     }
-<a name="l00556"></a>00556     <span class="keywordflow">return</span> row ;
-<a name="l00557"></a>00557 }
-<a name="l00569"></a>00569 cpl_image * sinfo_new_clean_mean_of_columns( cpl_image *im,
-<a name="l00570"></a>00570                              <span class="keywordtype">float</span> lo_reject,
-<a name="l00571"></a>00571                              <span class="keywordtype">float</span> hi_reject)
-<a name="l00572"></a>00572 {
-<a name="l00573"></a>00573     cpl_image     * row=NULL ;
-<a name="l00574"></a>00574     pixelvalue*   buffer=NULL ;
-<a name="l00575"></a>00575     <span class="keywordtype">int</span>          i=0;
-<a name="l00576"></a>00576     <span class="keywordtype">int</span>          j=0;
-<a name="l00577"></a>00577     <span class="keywordtype">int</span>          k=0;
-<a name="l00578"></a>00578     <span class="keywordtype">int</span>          nv=0;
-<a name="l00579"></a>00579     <span class="keywordtype">int</span>          lo_n=0;
-<a name="l00580"></a>00580     <span class="keywordtype">int</span>          hi_n=0;
-<a name="l00581"></a>00581     <span class="keywordtype">int</span> ilx=0;
-<a name="l00582"></a>00582     <span class="keywordtype">int</span> ily=0;
-<a name="l00583"></a>00583     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00584"></a>00584     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00585"></a>00585 
-<a name="l00586"></a>00586     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00587"></a>00587     {
-<a name="l00588"></a>00588         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image"</span>) ;
-<a name="l00589"></a>00589         <span class="keywordflow">return</span> NULL ;
-<a name="l00590"></a>00590     }
-<a name="l00591"></a>00591     ilx=cpl_image_get_size_x(im);
-<a name="l00592"></a>00592     ily=cpl_image_get_size_y(im);
-<a name="l00593"></a>00593     pidata=cpl_image_get_data_float(im);
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595     <span class="keywordflow">if</span> ((lo_reject + hi_reject) > 0.9)
-<a name="l00596"></a>00596     {
-<a name="l00597"></a>00597         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal rejection thresholds: [%f] and [%f]"</span>,
-<a name="l00598"></a>00598                         lo_reject, hi_reject) ;
-<a name="l00599"></a>00599         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"threshold sum should not be over "</span>
-<a name="l00600"></a>00600                         <span class="stringliteral">"0.90 aborting average"</span>) ;
-<a name="l00601"></a>00601         <span class="keywordflow">return</span> NULL ;
-<a name="l00602"></a>00602     }
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604     lo_n = (int) (ily * lo_reject + 0.5) ;
-<a name="l00605"></a>00605     hi_n = (int) (ily * hi_reject + 0.5) ;
-<a name="l00606"></a>00606     <span class="keywordflow">if</span> (lo_n + hi_n >= ily)
-<a name="l00607"></a>00607     {
-<a name="l00608"></a>00608         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"everything would be rejected"</span>) ;
-<a name="l00609"></a>00609         <span class="keywordflow">return</span> NULL ;
-<a name="l00610"></a>00610     }
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="comment">/* allocate memory for a row with the length of the image x-axis */</span>
-<a name="l00613"></a>00613     <span class="keywordflow">if</span> ( NULL == (row = cpl_image_new (ilx, 1,CPL_TYPE_FLOAT)) )
-<a name="l00614"></a>00614     {
-<a name="l00615"></a>00615         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;
-<a name="l00616"></a>00616         <span class="keywordflow">return</span> NULL ;
-<a name="l00617"></a>00617     }
-<a name="l00618"></a>00618     podata=cpl_image_get_data_float(row);
-<a name="l00619"></a>00619 
-<a name="l00620"></a>00620     buffer=(pixelvalue*) cpl_calloc(ily,<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l00623"></a>00623     {
-<a name="l00624"></a>00624         <span class="keywordflow">for</span> ( j = 0 ; j < ily ; j++ )
-<a name="l00625"></a>00625         {
-<a name="l00626"></a>00626             buffer[j] = pidata[i + j*(ilx)] ;
-<a name="l00627"></a>00627         }
-<a name="l00628"></a>00628         sinfo_pixel_qsort (buffer, ily) ;
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630         nv = 0 ;
-<a name="l00631"></a>00631         <span class="keywordflow">for</span> (k = lo_n ; k < ily - hi_n ; k ++)
-<a name="l00632"></a>00632         {
-<a name="l00633"></a>00633             <span class="keywordflow">if</span> ( !isnan(buffer[k]) )
-<a name="l00634"></a>00634             {
-<a name="l00635"></a>00635                 podata[i] += buffer[k] ;
-<a name="l00636"></a>00636                 nv ++ ;
-<a name="l00637"></a>00637             }
-<a name="l00638"></a>00638         }
-<a name="l00639"></a>00639         podata[i] /= nv ;
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641     }
-<a name="l00642"></a>00642     cpl_free(buffer);
-<a name="l00643"></a>00643     <span class="keywordflow">return</span> row ;
-<a name="l00644"></a>00644 }
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646 
-<a name="l00656"></a>00656 cpl_image * sinfo_new_div_image_by_row( cpl_image *im, Vector *row )
-<a name="l00657"></a>00657 {
-<a name="l00658"></a>00658     cpl_image *image=NULL ;
-<a name="l00659"></a>00659     <span class="keywordtype">int</span>         i=0;
-<a name="l00660"></a>00660     <span class="keywordtype">int</span>         j=0;
-<a name="l00661"></a>00661     <span class="keywordtype">int</span> ilx=0;
-<a name="l00662"></a>00662     <span class="keywordtype">int</span> ily=0;
-<a name="l00663"></a>00663     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00664"></a>00664     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666     <span class="keywordflow">if</span> ( im == NULL || row == NULL )
-<a name="l00667"></a>00667     {
-<a name="l00668"></a>00668         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image or null row"</span>) ;
-<a name="l00669"></a>00669         <span class="keywordflow">return</span> NULL ;
-<a name="l00670"></a>00670     }
-<a name="l00671"></a>00671     ilx=cpl_image_get_size_x(im);
-<a name="l00672"></a>00672     ily=cpl_image_get_size_y(im);
-<a name="l00673"></a>00673     pidata=cpl_image_get_data_float(im);
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675     <span class="keywordflow">if</span> ( ilx != row -> n_elements )
-<a name="l00676"></a>00676     {
-<a name="l00677"></a>00677         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image and row size not compatible"</span>) ;
-<a name="l00678"></a>00678         <span class="keywordflow">return</span> NULL ;
-<a name="l00679"></a>00679     }
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_duplicate (im)) )
-<a name="l00682"></a>00682     {
-<a name="l00683"></a>00683         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot copy image"</span>) ;
-<a name="l00684"></a>00684         <span class="keywordflow">return</span> NULL ;
-<a name="l00685"></a>00685     }
-<a name="l00686"></a>00686     podata=cpl_image_get_data_float(image);
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688     <span class="keywordflow">for</span> (i = 0 ; i < ilx ; i++ )
-<a name="l00689"></a>00689     {
-<a name="l00690"></a>00690         <span class="keywordflow">for</span> (j = 0 ; j < ily ; j++)
-<a name="l00691"></a>00691         {
-<a name="l00692"></a>00692             <span class="keywordflow">if</span> ( !isnan(pidata[i + j*(ilx)]) )
-<a name="l00693"></a>00693             {
-<a name="l00694"></a>00694                 podata[i + j*(ilx)] = pidata[i + j*(ilx)] / row -> data[i] ;
-<a name="l00695"></a>00695             }
-<a name="l00696"></a>00696         }
-<a name="l00697"></a>00697     }
-<a name="l00698"></a>00698     <span class="keywordflow">return</span> image ;
-<a name="l00699"></a>00699 }
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701 
-<a name="l00711"></a>00711 cpl_image * sinfo_new_mult_row_to_image( cpl_image *im, Vector *row )
-<a name="l00712"></a>00712 {
-<a name="l00713"></a>00713     cpl_image *image=NULL;
-<a name="l00714"></a>00714     <span class="keywordtype">int</span>         i=0;
-<a name="l00715"></a>00715     <span class="keywordtype">int</span>         j=0;
-<a name="l00716"></a>00716     <span class="keywordtype">int</span> ilx=0;
-<a name="l00717"></a>00717     <span class="keywordtype">int</span> ily=0;
-<a name="l00718"></a>00718     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00719"></a>00719     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724     <span class="keywordflow">if</span> ( im == NULL || row == NULL )
-<a name="l00725"></a>00725     {
-<a name="l00726"></a>00726         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image or null row"</span>) ;
-<a name="l00727"></a>00727         <span class="keywordflow">return</span> NULL ;
-<a name="l00728"></a>00728     }
-<a name="l00729"></a>00729     ilx=cpl_image_get_size_x(im);
-<a name="l00730"></a>00730     ily=cpl_image_get_size_y(im);
-<a name="l00731"></a>00731     pidata=cpl_image_get_data_float(im);
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733     <span class="keywordflow">if</span> ( ilx != row -> n_elements )
-<a name="l00734"></a>00734     {
-<a name="l00735"></a>00735         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image and row size not compatible"</span>) ;
-<a name="l00736"></a>00736         <span class="keywordflow">return</span> NULL ;
-<a name="l00737"></a>00737     }
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_duplicate (im)) )
-<a name="l00740"></a>00740     {
-<a name="l00741"></a>00741         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot copy image"</span>) ;
-<a name="l00742"></a>00742         <span class="keywordflow">return</span> NULL ;
-<a name="l00743"></a>00743     }
-<a name="l00744"></a>00744     podata=cpl_image_get_data_float(image);
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746     <span class="keywordflow">for</span> (i = 0 ; i < ilx ; i++ )
-<a name="l00747"></a>00747     {
-<a name="l00748"></a>00748         <span class="keywordflow">for</span> (j = 0 ; j < ily ; j++)
-<a name="l00749"></a>00749         {
-<a name="l00750"></a>00750             <span class="keywordflow">if</span> ( !isnan(pidata[i + j*(ilx)]) )
-<a name="l00751"></a>00751             {
-<a name="l00752"></a>00752                 podata[i + j*(ilx)] = pidata[i + j*(ilx)] * row -> data[i] ;
-<a name="l00753"></a>00753             }
-<a name="l00754"></a>00754         }
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756     <span class="keywordflow">return</span> image ;
-<a name="l00757"></a>00757 }
-<a name="l00758"></a>00758 
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760 
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763 
-<a name="l00787"></a>00787 cpl_image * sinfo_new_col_tilt ( cpl_image * image, <span class="keywordtype">float</span> sigmaFactor )
-<a name="l00788"></a>00788 {
-<a name="l00789"></a>00789     cpl_image   * im=NULL;
-<a name="l00790"></a>00790     <span class="keywordtype">float</span>      * column=NULL ;
-<a name="l00791"></a>00791     <span class="keywordtype">double</span>       sum=0;
-<a name="l00792"></a>00792     <span class="keywordtype">double</span>  sum2=0;
-<a name="l00793"></a>00793     <span class="keywordtype">double</span>  mean=0;
-<a name="l00794"></a>00794     <span class="keywordtype">float</span>   sinfo_median=0;
-<a name="l00795"></a>00795     <span class="keywordtype">float</span>   noise=0 ;
-<a name="l00796"></a>00796     <span class="keywordtype">float</span>      * sig=NULL;
-<a name="l00797"></a>00797     <span class="keywordtype">float</span>    * dat=NULL;
-<a name="l00798"></a>00798     <span class="keywordtype">float</span>        a=0;
-<a name="l00799"></a>00799     <span class="keywordtype">float</span>        b=0;
-<a name="l00800"></a>00800     <span class="keywordtype">float</span>        siga=0;
-<a name="l00801"></a>00801     <span class="keywordtype">float</span>        sigb=0;
-<a name="l00802"></a>00802     <span class="keywordtype">float</span>        chi2=0;
-<a name="l00803"></a>00803     <span class="keywordtype">float</span>        q=0;
-<a name="l00804"></a>00804     <span class="keywordtype">int</span>          i=0;
-<a name="l00805"></a>00805     <span class="keywordtype">int</span>          j=0;
-<a name="l00806"></a>00806     <span class="keywordtype">int</span>          colnum=0;
-<a name="l00807"></a>00807     <span class="keywordtype">int</span>         npix=0;
-<a name="l00808"></a>00808     <span class="keywordtype">int</span>         mwt=0 ;
-<a name="l00809"></a>00809     <span class="keywordtype">int</span> lx=0;
-<a name="l00810"></a>00810     <span class="keywordtype">int</span> ly=0;
-<a name="l00811"></a>00811     <span class="keywordtype">float</span>* p_in_data=NULL;
-<a name="l00812"></a>00812     <span class="keywordtype">float</span>* p_ou_data=NULL;
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l00816"></a>00816     {
-<a name="l00817"></a>00817         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image given"</span> ) ;
-<a name="l00818"></a>00818         <span class="keywordflow">return</span> NULL ;
-<a name="l00819"></a>00819     }
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )
-<a name="l00822"></a>00822     {
-<a name="l00823"></a>00823         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no or negative sigma factor"</span>) ;
-<a name="l00824"></a>00824         <span class="keywordflow">return</span> NULL ;
-<a name="l00825"></a>00825     }
-<a name="l00826"></a>00826     lx = cpl_image_get_size_x(image);
-<a name="l00827"></a>00827     ly = cpl_image_get_size_y(image);
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830     <span class="comment">/* allocate memory */</span>
-<a name="l00831"></a>00831     <span class="keywordflow">if</span> ( NULL == (im = cpl_image_new (lx,ly,CPL_TYPE_FLOAT )) )
-<a name="l00832"></a>00832     {
-<a name="l00833"></a>00833         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;
-<a name="l00834"></a>00834         <span class="keywordflow">return</span> NULL ;
-<a name="l00835"></a>00835     }
-<a name="l00836"></a>00836 
-<a name="l00837"></a>00837     <span class="comment">/* go through the columns */</span>
-<a name="l00838"></a>00838     p_in_data = cpl_image_get_data_float(image);
-<a name="l00839"></a>00839     p_ou_data = cpl_image_get_data_float(im);
-<a name="l00840"></a>00840     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i ++ )
-<a name="l00841"></a>00841     {
-<a name="l00842"></a>00842         <span class="comment">/* initialize the buffer variables for each column */</span>
-<a name="l00843"></a>00843         colnum = 0 ;
-<a name="l00844"></a>00844         column = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;
-<a name="l00845"></a>00845         sig    = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;
-<a name="l00846"></a>00846         dat    = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848         <span class="comment">/*select only non-ZERO values of one column*/</span>
-<a name="l00849"></a>00849         <span class="keywordflow">for</span> ( j = 0 ; j < ly ; j++ )
-<a name="l00850"></a>00850         {
-<a name="l00851"></a>00851             <span class="keywordflow">if</span> ( !isnan(p_in_data[i + j*lx]) )
-<a name="l00852"></a>00852             {
-<a name="l00853"></a>00853                 column[j] = p_in_data[i + j*lx] ;
-<a name="l00854"></a>00854                 colnum ++ ;
-<a name="l00855"></a>00855             }
-<a name="l00856"></a>00856         }
-<a name="l00857"></a>00857         <span class="keywordflow">if</span> ( colnum < 10 )
-<a name="l00858"></a>00858         {
-<a name="l00859"></a>00859             <span class="comment">/*sinfo_msg_warning ("sinfo_new_col_tilt:",</span>
-<a name="l00860"></a>00860 <span class="comment">          "column %d has almost only blank pixels and is set to blank", i+1) ;*/</span>
-<a name="l00861"></a>00861             <span class="keywordflow">for</span> ( j = 0 ; j < ly ; j++ )
-<a name="l00862"></a>00862             {
-<a name="l00863"></a>00863                 p_ou_data[i + j*lx] = ZERO;
-<a name="l00864"></a>00864             }
-<a name="l00865"></a>00865             <span class="comment">/*</span>
-<a name="l00866"></a>00866 <span class="comment">            cpl_free (column) ;</span>
-<a name="l00867"></a>00867 <span class="comment">            cpl_free (sig);</span>
-<a name="l00868"></a>00868 <span class="comment">            cpl_free (dat) ;</span>
-<a name="l00869"></a>00869 <span class="comment">            continue ;</span>
-<a name="l00870"></a>00870 <span class="comment">            */</span>
-<a name="l00871"></a>00871         }
-<a name="l00872"></a>00872 
-<a name="l00873"></a>00873         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l00874"></a>00874 <span class="comment">         * sort the data, clip off the extremes, determine the noise</span>
-<a name="l00875"></a>00875 <span class="comment">         * and get the range for the valid data. It is assumed here</span>
-<a name="l00876"></a>00876 <span class="comment">         * that most pixels are o.k.</span>
-<a name="l00877"></a>00877 <span class="comment">         */</span>
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879         sinfo_pixel_qsort (column, colnum) ;
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881         sum   = 0. ;
-<a name="l00882"></a>00882         sum2  = 0. ;
-<a name="l00883"></a>00883         npix  = 0  ;
-<a name="l00884"></a>00884 
-<a name="l00885"></a>00885         <span class="keywordflow">for</span> ( j = 0.1*colnum + 1 ; j <= 0.9*colnum ; j++ )
-<a name="l00886"></a>00886         {
-<a name="l00887"></a>00887             sum  += column[j] ;
-<a name="l00888"></a>00888             sum2 += column[j] * column[j] ;
-<a name="l00889"></a>00889             npix ++ ;
-<a name="l00890"></a>00890         }
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892         <span class="keywordflow">if</span> (npix <= 1)
-<a name="l00893"></a>00893         {
-<a name="l00894"></a>00894             noise = sigmaFactor * 1000.;
-<a name="l00895"></a>00895         }
-<a name="l00896"></a>00896         <span class="keywordflow">else</span>
-<a name="l00897"></a>00897         {
-<a name="l00898"></a>00898             mean   = sum/(float)npix ;
-<a name="l00899"></a>00899             noise  = sqrt( (sum2 - sum*mean)/(<span class="keywordtype">double</span>)(npix -1) ) ;
-<a name="l00900"></a>00900             noise *= sigmaFactor ;
-<a name="l00901"></a>00901         }
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903         <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l00904"></a>00904 <span class="comment">         * determine sinfo_median if colnum is odd, sinfo_median will be the</span>
-<a name="l00905"></a>00905 <span class="comment">           colnum/2 th value, otherwise</span>
-<a name="l00906"></a>00906 <span class="comment">         * sinfo_median is the mean of colnum/2-1 th and colnum/2 th value.</span>
-<a name="l00907"></a>00907 <span class="comment">         */</span>
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909         <span class="keywordflow">if</span> ( colnum % 2 == 1 )
-<a name="l00910"></a>00910         {
-<a name="l00911"></a>00911             sinfo_median = column[colnum/2] ;
-<a name="l00912"></a>00912         }
-<a name="l00913"></a>00913         <span class="keywordflow">else</span>
-<a name="l00914"></a>00914         {
-<a name="l00915"></a>00915             sinfo_median = (column[colnum/2 - 1] + column[colnum/2])/2. ;
-<a name="l00916"></a>00916         }
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918         <span class="comment">/* now select the pixels for the tilt calculation */</span>
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920         colnum = 0 ;
-<a name="l00921"></a>00921         <span class="keywordflow">for</span> ( j = 0; j < ly ; j ++ )
-<a name="l00922"></a>00922         {
-<a name="l00923"></a>00923             <span class="keywordflow">if</span> ( !isnan(p_in_data[i+j*lx]) &&
-<a name="l00924"></a>00924                  fabs ( (p_in_data[i+j*lx]) - sinfo_median) <= noise )
-<a name="l00925"></a>00925             {
-<a name="l00926"></a>00926                 column[colnum] = p_in_data[i+j*lx] ;
-<a name="l00927"></a>00927                 dat[colnum] = (float) j ;
-<a name="l00928"></a>00928                 sig[colnum] = 1. ;
-<a name="l00929"></a>00929                 colnum ++ ;
-<a name="l00930"></a>00930             }
-<a name="l00931"></a>00931         }
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933         <span class="keywordflow">if</span> ( colnum == 0 )
-<a name="l00934"></a>00934         {
-<a name="l00935"></a>00935             <span class="comment">/*for ( j = 0; j < ly; j++ )</span>
-<a name="l00936"></a>00936 <span class="comment">            {</span>
-<a name="l00937"></a>00937 <span class="comment">                p_ou_data[i+j*lx] -= sinfo_median ;</span>
-<a name="l00938"></a>00938 <span class="comment">            }</span>
-<a name="l00939"></a>00939 <span class="comment">            cpl_free (column) ;</span>
-<a name="l00940"></a>00940 <span class="comment">            cpl_free (sig)    ;</span>
-<a name="l00941"></a>00941 <span class="comment">            cpl_free (dat)    ;</span>
-<a name="l00942"></a>00942 <span class="comment">            continue ;*/</span>
-<a name="l00943"></a>00943         a=0./0.;
-<a name="l00944"></a>00944         b=0./0.;
-<a name="l00945"></a>00945         }
-<a name="l00946"></a>00946     <span class="keywordflow">else</span>
-<a name="l00947"></a>00947     {
-<a name="l00948"></a>00948         mwt = 0 ;
-<a name="l00949"></a>00949         sinfo_my_fit ( dat, column, colnum, sig, mwt, &a,
-<a name="l00950"></a>00950                        &b, &siga, &sigb, &chi2, &q ) ;
-<a name="l00951"></a>00951     }
-<a name="l00952"></a>00952         <span class="keywordflow">if</span> ( fabs(b) >= SLOPE || fabs(a) >= SATURATION  ||
-<a name="l00953"></a>00953              isnan(b) || isnan(a))
-<a name="l00954"></a>00954         {
-<a name="l00955"></a>00955             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"linear fit: slope is greater than limit: %f"</span>
-<a name="l00956"></a>00956                                <span class="stringliteral">" saturation level is reached: %f in column"</span>
-<a name="l00957"></a>00957                                <span class="stringliteral">" number %d "</span>, b, a , i+1) ;
-<a name="l00958"></a>00958         }
-<a name="l00959"></a>00959 
-<a name="l00960"></a>00960         <span class="comment">/* subtract fit or sinfo_median from data */</span>
-<a name="l00961"></a>00961         <span class="keywordflow">for</span> ( j = 0; j < ly; j++ )
-<a name="l00962"></a>00962         {
-<a name="l00963"></a>00963             <span class="keywordflow">if</span> ( !isnan(p_in_data[i+j*lx]) &&
-<a name="l00964"></a>00964                  fabs(b) < SLOPE && fabs(a) < SATURATION )
-<a name="l00965"></a>00965             {
-<a name="l00966"></a>00966                 p_ou_data[i+j*lx] = p_in_data[i+j*lx] - (a + b * (float)j) ;
-<a name="l00967"></a>00967             }
-<a name="l00968"></a>00968             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(p_in_data[i+j*lx]) )
-<a name="l00969"></a>00969             {
-<a name="l00970"></a>00970                 p_ou_data[i+j*lx] = ZERO ;
-<a name="l00971"></a>00971             }
-<a name="l00972"></a>00972             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (fabs(b) >= SLOPE ||
-<a name="l00973"></a>00973                        fabs(a) >= SATURATION || isnan(a) || isnan(b)) &&
-<a name="l00974"></a>00974                       !isnan(p_in_data[i+j*lx]) )
-<a name="l00975"></a>00975             {
-<a name="l00976"></a>00976                 p_ou_data[i+j*lx] -= sinfo_median ;
-<a name="l00977"></a>00977             }
-<a name="l00978"></a>00978             <span class="keywordflow">else</span>
-<a name="l00979"></a>00979             {
-<a name="l00980"></a>00980                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" case is not possible! %f %f"</span>, b,a) ;
-<a name="l00981"></a>00981                 <span class="comment">/*cpl_free (column) ;</span>
-<a name="l00982"></a>00982 <span class="comment">                cpl_free (sig)    ;</span>
-<a name="l00983"></a>00983 <span class="comment">                cpl_free (dat)    ;</span>
-<a name="l00984"></a>00984 <span class="comment">                cpl_image_delete(im) ;</span>
-<a name="l00985"></a>00985 <span class="comment">                return NULL ;*/</span>
-<a name="l00986"></a>00986             }
-<a name="l00987"></a>00987         }
-<a name="l00988"></a>00988         cpl_free (column) ;
-<a name="l00989"></a>00989         cpl_free (sig)    ;
-<a name="l00990"></a>00990         cpl_free (dat)    ;
-<a name="l00991"></a>00991     }
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993     <span class="keywordflow">return</span> im     ;
-<a name="l00994"></a>00994 }
-<a name="l00995"></a>00995 
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999 
-<a name="l01023"></a>01023 cpl_image * sinfo_new_median_image( cpl_image * im, <span class="keywordtype">float</span> fmedian )
-<a name="l01024"></a>01024 {
-<a name="l01025"></a>01025     cpl_image *   image=NULL       ;
-<a name="l01026"></a>01026     pixelvalue * value=NULL       ;
-<a name="l01027"></a>01027     pixelvalue   sinfo_median=0      ;
-<a name="l01028"></a>01028     <span class="keywordtype">int</span>        * position=NULL    ;
-<a name="l01029"></a>01029     <span class="keywordtype">int</span>          nposition=0   ;
-<a name="l01030"></a>01030     <span class="keywordtype">int</span>          n=0;
-<a name="l01031"></a>01031     <span class="keywordtype">int</span>          i=0;
-<a name="l01032"></a>01032     <span class="keywordtype">int</span>          j=0;
-<a name="l01033"></a>01033     <span class="keywordtype">int</span> lx=0;
-<a name="l01034"></a>01034     <span class="keywordtype">int</span> ly=0;
-<a name="l01035"></a>01035     <span class="keywordtype">float</span>* p_in_data=NULL;
-<a name="l01036"></a>01036     <span class="keywordtype">float</span>* p_ou_data=NULL;
-<a name="l01037"></a>01037     <span class="keywordtype">int</span> im_size=0;
-<a name="l01038"></a>01038     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l01039"></a>01039     {
-<a name="l01040"></a>01040         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;
-<a name="l01041"></a>01041         <span class="keywordflow">return</span> NULL ;
-<a name="l01042"></a>01042     }
-<a name="l01043"></a>01043 
-<a name="l01044"></a>01044     image = cpl_image_duplicate ( im ) ;
-<a name="l01045"></a>01045     lx=cpl_image_get_size_x(im);
-<a name="l01046"></a>01046     ly=cpl_image_get_size_y(im);
-<a name="l01047"></a>01047     im_size=lx*ly;
-<a name="l01048"></a>01048     p_in_data=cpl_image_get_data_float(im);
-<a name="l01049"></a>01049     p_ou_data=cpl_image_get_data_float(image);
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051     <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l01052"></a>01052 <span class="comment">     * go through all pixels</span>
-<a name="l01053"></a>01053 <span class="comment">     */</span>
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055     <span class="keywordflow">for</span> ( i = 0 ; i < im_size ; i++ )
-<a name="l01056"></a>01056     {
-<a name="l01057"></a>01057         <span class="comment">/* blank pixels are not replaced */</span>
-<a name="l01058"></a>01058         <span class="keywordflow">if</span> ( isnan(p_in_data[i]) )
-<a name="l01059"></a>01059         {
-<a name="l01060"></a>01060             continue ;
-<a name="l01061"></a>01061         }
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span>
-<a name="l01064"></a>01064         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;
-<a name="l01065"></a>01065         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l01068"></a>01068 <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span>
-<a name="l01069"></a>01069 <span class="comment">         */</span>
-<a name="l01070"></a>01070 
-<a name="l01071"></a>01071         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span>
-<a name="l01072"></a>01072         position[1] = i + lx     ; <span class="comment">/* upper       */</span>
-<a name="l01073"></a>01073         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span>
-<a name="l01074"></a>01074         position[3] = i + 1      ; <span class="comment">/* right       */</span>
-<a name="l01075"></a>01075         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span>
-<a name="l01076"></a>01076         position[5] = i - lx     ; <span class="comment">/* lower       */</span>
-<a name="l01077"></a>01077         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span>
-<a name="l01078"></a>01078         position[7] = i - 1      ; <span class="comment">/* left        */</span>
-<a name="l01079"></a>01079 
-<a name="l01080"></a>01080         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l01081"></a>01081 <span class="comment">         * determine the positions of the image margins, top positions are</span>
-<a name="l01082"></a>01082 <span class="comment">           changed to low positions and vice versa. Right positions are</span>
-<a name="l01083"></a>01083 <span class="comment">           changed to left positions and vice versa.</span>
-<a name="l01084"></a>01084 <span class="comment">         */</span>
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span>
-<a name="l01087"></a>01087         {
-<a name="l01088"></a>01088             position[4] += 2 * lx ;
-<a name="l01089"></a>01089             position[5] += 2 * lx ;
-<a name="l01090"></a>01090             position[6] += 2 * lx ;
-<a name="l01091"></a>01091         }
-<a name="l01092"></a>01092         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span>
-<a name="l01093"></a>01093         {
-<a name="l01094"></a>01094             position[0] -= 2 * lx ;
-<a name="l01095"></a>01095             position[1] -= 2 * lx ;
-<a name="l01096"></a>01096             position[2] -= 2 * lx ;
-<a name="l01097"></a>01097         }
-<a name="l01098"></a>01098         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span>
-<a name="l01099"></a>01099         {
-<a name="l01100"></a>01100             position[0] += 2 ;
-<a name="l01101"></a>01101             position[6] += 2 ;
-<a name="l01102"></a>01102             position[7] += 2 ;
-<a name="l01103"></a>01103         }
-<a name="l01104"></a>01104         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span>
-<a name="l01105"></a>01105         {
-<a name="l01106"></a>01106             position[2] -= 2 ;
-<a name="l01107"></a>01107             position[3] -= 2 ;
-<a name="l01108"></a>01108             position[4] -= 2 ;
-<a name="l01109"></a>01109         }
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111         <span class="comment">/* --------------------------------------------------------------------</span>
-<a name="l01112"></a>01112 <span class="comment">         * read the pixel values of the neighboring pixels,</span>
-<a name="l01113"></a>01113 <span class="comment">         * blanks are not considered</span>
-<a name="l01114"></a>01114 <span class="comment">         */</span>
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116         nposition = 8 ;
-<a name="l01117"></a>01117         n = 0 ;
-<a name="l01118"></a>01118         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )
-<a name="l01119"></a>01119         {
-<a name="l01120"></a>01120            <span class="keywordflow">if</span>((position[j] >-1 ) && (position[j]<im_size)) {
-<a name="l01121"></a>01121               <span class="keywordflow">if</span> ( !isnan(p_in_data[position[j]]) )
-<a name="l01122"></a>01122               {
-<a name="l01123"></a>01123                 value[n] = p_in_data[position[j]] ;
-<a name="l01124"></a>01124                 n ++ ;
-<a name="l01125"></a>01125               }
-<a name="l01126"></a>01126            }
-<a name="l01127"></a>01127         }
-<a name="l01128"></a>01128         nposition = n ;
-<a name="l01129"></a>01129 
-<a name="l01130"></a>01130         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span>
-<a name="l01131"></a>01131         {
-<a name="l01132"></a>01132             p_ou_data[i] = ZERO ;
-<a name="l01133"></a>01133             cpl_free(value) ;
-<a name="l01134"></a>01134             cpl_free(position) ;
-<a name="l01135"></a>01135             continue ;
-<a name="l01136"></a>01136         }
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138         <span class="comment">/* sort the values and determine the sinfo_median */</span>
-<a name="l01139"></a>01139 
-<a name="l01140"></a>01140         sinfo_pixel_qsort ( value, nposition ) ;
-<a name="l01141"></a>01141         <span class="keywordflow">if</span> ( nposition % 2 == 1 )
-<a name="l01142"></a>01142         {
-<a name="l01143"></a>01143             sinfo_median = value [ nposition/2 ] ;
-<a name="l01144"></a>01144         }
-<a name="l01145"></a>01145         <span class="keywordflow">else</span>
-<a name="l01146"></a>01146         {
-<a name="l01147"></a>01147             sinfo_median = ( value [nposition/2 - 1] +
-<a name="l01148"></a>01148                              value [nposition/2] ) / 2. ;
-<a name="l01149"></a>01149         }
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151         <span class="comment">/* -----------------------------------------------------------------</span>
-<a name="l01152"></a>01152 <span class="comment">         * replace the pixel value by the sinfo_median on conditions:</span>
-<a name="l01153"></a>01153 <span class="comment">         * fmedian = 0: always replace with sinfo_median.</span>
-<a name="l01154"></a>01154 <span class="comment">         * fmedian < 0: interpret as absolute condition:</span>
-<a name="l01155"></a>01155 <span class="comment">         *              if |pixel - sinfo_median| > -fmedian</span>
-<a name="l01156"></a>01156 <span class="comment">         *              replace with sinfo_median.</span>
-<a name="l01157"></a>01157 <span class="comment">         * fmedian > 0: replace by sinfo_median (fmedian as a factor of</span>
-<a name="l01158"></a>01158 <span class="comment">         *              the square root of the sinfo_median itself)</span>
-<a name="l01159"></a>01159 <span class="comment">         *              if |pixel - sinfo_median| >= fmedian *</span>
-<a name="l01160"></a>01160 <span class="comment">                                                     sqrt ( sinfo_median )</span>
-<a name="l01161"></a>01161 <span class="comment">         *              considers a dependence on the pixel value.</span>
-<a name="l01162"></a>01162 <span class="comment">         *              This can be used to consider photon noise.</span>
-<a name="l01163"></a>01163 <span class="comment">         */</span>
-<a name="l01164"></a>01164 
-<a name="l01165"></a>01165         <span class="keywordflow">if</span> ( fmedian == 0 )
-<a name="l01166"></a>01166         {
-<a name="l01167"></a>01167             p_ou_data[i] = sinfo_median ;
-<a name="l01168"></a>01168         }
-<a name="l01169"></a>01169         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&
-<a name="l01170"></a>01170                   fabs ( sinfo_median - p_in_data[i] ) >= -fmedian )
-<a name="l01171"></a>01171         {
-<a name="l01172"></a>01172             p_ou_data[i] = sinfo_median ;
-<a name="l01173"></a>01173         }
-<a name="l01174"></a>01174         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&
-<a name="l01175"></a>01175                   fabs ( sinfo_median - p_in_data[i] ) >= fmedian *
-<a name="l01176"></a>01176                                                       sqrt(fabs(sinfo_median)) )
-<a name="l01177"></a>01177         {
-<a name="l01178"></a>01178             p_ou_data[i] = sinfo_median ;
-<a name="l01179"></a>01179         }
-<a name="l01180"></a>01180         <span class="keywordflow">else</span>
-<a name="l01181"></a>01181         {
-<a name="l01182"></a>01182             cpl_free (value) ;
-<a name="l01183"></a>01183             cpl_free (position) ;
-<a name="l01184"></a>01184             continue ;
-<a name="l01185"></a>01185         }
-<a name="l01186"></a>01186 
-<a name="l01187"></a>01187         cpl_free (value) ;
-<a name="l01188"></a>01188         cpl_free (position) ;
-<a name="l01189"></a>01189     }
-<a name="l01190"></a>01190     <span class="keywordflow">return</span> image ;
-<a name="l01191"></a>01191 }
-<a name="l01192"></a>01192 
-<a name="l01193"></a>01193 
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195 
-<a name="l01206"></a>01206 cpl_image *
-<a name="l01207"></a>01207 sinfo_new_compare_images(cpl_image * im1,cpl_image * im2,cpl_image * origim )
-<a name="l01208"></a>01208 {
-<a name="l01209"></a>01209     cpl_image * image=NULL ;
-<a name="l01210"></a>01210     <span class="keywordtype">int</span>            i=0 ;
-<a name="l01211"></a>01211     <span class="keywordtype">int</span> lx1=0;
-<a name="l01212"></a>01212     <span class="keywordtype">int</span> ly1=0;
-<a name="l01213"></a>01213     <span class="keywordtype">int</span> lx2=0;
-<a name="l01214"></a>01214     <span class="keywordtype">int</span> ly2=0;
-<a name="l01215"></a>01215     <span class="keywordtype">float</span>* p_in1_data=NULL;
-<a name="l01216"></a>01216     <span class="keywordtype">float</span>* p_in2_data=NULL;
-<a name="l01217"></a>01217     <span class="keywordtype">float</span>* p_ou_data=NULL;
-<a name="l01218"></a>01218     <span class="keywordtype">float</span>* p_org_data=NULL;
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220 
-<a name="l01221"></a>01221     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || origim == NULL )
-<a name="l01222"></a>01222     {
-<a name="l01223"></a>01223         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Null images as input"</span> ) ;
-<a name="l01224"></a>01224         <span class="keywordflow">return</span> NULL ;
-<a name="l01225"></a>01225     }
-<a name="l01226"></a>01226     lx1=cpl_image_get_size_x(im1);
-<a name="l01227"></a>01227     ly1=cpl_image_get_size_y(im1);
-<a name="l01228"></a>01228 
-<a name="l01229"></a>01229     lx2=cpl_image_get_size_x(im2);
-<a name="l01230"></a>01230     ly2=cpl_image_get_size_y(im2);
-<a name="l01231"></a>01231 
-<a name="l01232"></a>01232     p_in1_data=cpl_image_get_data_float(im1);
-<a name="l01233"></a>01233     p_in2_data=cpl_image_get_data_float(im2);
-<a name="l01234"></a>01234     p_org_data=cpl_image_get_data_float(origim);
-<a name="l01235"></a>01235     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )
-<a name="l01236"></a>01236     {
-<a name="l01237"></a>01237         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"incompatible image sizes"</span> ) ;
-<a name="l01238"></a>01238         <span class="keywordflow">return</span> NULL ;
-<a name="l01239"></a>01239     }
-<a name="l01240"></a>01240 
-<a name="l01241"></a>01241     <span class="comment">/* allocate memory */</span>
-<a name="l01242"></a>01242     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_new ( lx1, ly1, CPL_TYPE_FLOAT )) )
-<a name="l01243"></a>01243     {
-<a name="l01244"></a>01244         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;
-<a name="l01245"></a>01245         <span class="keywordflow">return</span> NULL ;
-<a name="l01246"></a>01246     }
-<a name="l01247"></a>01247     p_ou_data=cpl_image_get_data_float(image);
-<a name="l01248"></a>01248     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )
-<a name="l01249"></a>01249     {
-<a name="l01250"></a>01250         <span class="keywordflow">if</span> ( isnan(p_in1_data[i]) && isnan(p_in2_data[i]) )
-<a name="l01251"></a>01251         {
-<a name="l01252"></a>01252             p_ou_data[i] = ZERO ;
-<a name="l01253"></a>01253         }
-<a name="l01254"></a>01254         <span class="keywordflow">else</span>
-<a name="l01255"></a>01255         {
-<a name="l01256"></a>01256             <span class="keywordflow">if</span> ( p_in1_data[i] == p_in2_data[i] )
-<a name="l01257"></a>01257             {
-<a name="l01258"></a>01258                 p_ou_data[i] = p_org_data[i] ;
-<a name="l01259"></a>01259             }
-<a name="l01260"></a>01260             <span class="keywordflow">else</span>
-<a name="l01261"></a>01261             {
-<a name="l01262"></a>01262                 p_ou_data[i] = ZERO ;
-<a name="l01263"></a>01263             }
-<a name="l01264"></a>01264         }
-<a name="l01265"></a>01265     }
-<a name="l01266"></a>01266     <span class="keywordflow">return</span> image ;
-<a name="l01267"></a>01267 }
-<a name="l01268"></a>01268 
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270 
-<a name="l01282"></a>01282 cpl_image *
-<a name="l01283"></a>01283 sinfo_new_promote_image_to_mask (cpl_image * im, <span class="keywordtype">int</span> * n_badpixels )
-<a name="l01284"></a>01284 {
-<a name="l01285"></a>01285     cpl_image * reImage=NULL ;
-<a name="l01286"></a>01286     <span class="keywordtype">int</span>        i=0 ;
-<a name="l01287"></a>01287     <span class="keywordtype">int</span> lx=0;
-<a name="l01288"></a>01288     <span class="keywordtype">int</span> ly=0;
-<a name="l01289"></a>01289     <span class="keywordtype">float</span>* p_in_data=NULL;
-<a name="l01290"></a>01290     <span class="keywordtype">float</span>* p_ou_data=NULL;
-<a name="l01291"></a>01291 
-<a name="l01292"></a>01292     <span class="keywordflow">if</span> ( NULL == im )
-<a name="l01293"></a>01293     {
-<a name="l01294"></a>01294         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01295"></a>01295         <span class="keywordflow">return</span> NULL ;
-<a name="l01296"></a>01296     }
-<a name="l01297"></a>01297     lx=cpl_image_get_size_x(im);
-<a name="l01298"></a>01298     ly=cpl_image_get_size_y(im);
-<a name="l01299"></a>01299     p_in_data=cpl_image_get_data_float(im);
-<a name="l01300"></a>01300 
-<a name="l01301"></a>01301     <span class="comment">/* allocate memory for the returned image */</span>
-<a name="l01302"></a>01302     <span class="keywordflow">if</span> ( NULL == (reImage = cpl_image_new (lx,ly,CPL_TYPE_FLOAT )) )
-<a name="l01303"></a>01303     {
-<a name="l01304"></a>01304         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image!"</span>) ;
-<a name="l01305"></a>01305         <span class="keywordflow">return</span> NULL ;
-<a name="l01306"></a>01306     }
-<a name="l01307"></a>01307     p_ou_data=cpl_image_get_data_float(reImage);
-<a name="l01308"></a>01308 
-<a name="l01309"></a>01309     *n_badpixels = 0 ;
-<a name="l01310"></a>01310     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i ++ )
-<a name="l01311"></a>01311     {
-<a name="l01312"></a>01312         <span class="keywordflow">if</span> ( isnan(p_in_data[i]) )
-<a name="l01313"></a>01313         {
-<a name="l01314"></a>01314             p_ou_data[i] = 0. ;
-<a name="l01315"></a>01315             (*n_badpixels)++ ;
-<a name="l01316"></a>01316         }
-<a name="l01317"></a>01317         <span class="keywordflow">else</span>
-<a name="l01318"></a>01318         {
-<a name="l01319"></a>01319             p_ou_data[i] = 1. ;
-<a name="l01320"></a>01320         }
-<a name="l01321"></a>01321     }
-<a name="l01322"></a>01322     <span class="keywordflow">return</span> reImage ;
-<a name="l01323"></a>01323 }
-<a name="l01324"></a>01324 
-<a name="l01325"></a>01325 
-<a name="l01336"></a>01336 cpl_image * sinfo_new_mult_image_by_mask (cpl_image * im,cpl_image * mask )
-<a name="l01337"></a>01337 {
-<a name="l01338"></a>01338     cpl_image * reImage=NULL ;
-<a name="l01339"></a>01339     <span class="keywordtype">int</span>        i=0 ;
-<a name="l01340"></a>01340     <span class="keywordtype">int</span> ix=0;
-<a name="l01341"></a>01341     <span class="keywordtype">int</span> iy=0;
-<a name="l01342"></a>01342     <span class="keywordtype">int</span> mx=0;
-<a name="l01343"></a>01343     <span class="keywordtype">int</span> my=0;
-<a name="l01344"></a>01344 
-<a name="l01345"></a>01345 
-<a name="l01346"></a>01346     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01347"></a>01347     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01348"></a>01348 
-<a name="l01349"></a>01349     <span class="keywordflow">if</span> ( NULL == im )
-<a name="l01350"></a>01350     {
-<a name="l01351"></a>01351         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01352"></a>01352         <span class="keywordflow">return</span> NULL ;
-<a name="l01353"></a>01353     }
-<a name="l01354"></a>01354     <span class="keywordflow">if</span> ( NULL == mask )
-<a name="l01355"></a>01355     {
-<a name="l01356"></a>01356         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no mask image given!"</span>) ;
-<a name="l01357"></a>01357         <span class="keywordflow">return</span> NULL ;
-<a name="l01358"></a>01358     }
-<a name="l01359"></a>01359     ix=cpl_image_get_size_x(im);
-<a name="l01360"></a>01360     iy=cpl_image_get_size_y(im);
-<a name="l01361"></a>01361     mx=cpl_image_get_size_x(mask);
-<a name="l01362"></a>01362     my=cpl_image_get_size_y(mask);
-<a name="l01363"></a>01363 
-<a name="l01364"></a>01364     <span class="keywordflow">if</span> ( ix != mx || iy != my)
-<a name="l01365"></a>01365     {
-<a name="l01366"></a>01366         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image sizes are not correspondent!"</span>) ;
-<a name="l01367"></a>01367         <span class="keywordflow">return</span> NULL ;
-<a name="l01368"></a>01368     }
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370     reImage = cpl_image_duplicate( im ) ;
-<a name="l01371"></a>01371     podata=cpl_image_get_data_float(reImage);
-<a name="l01372"></a>01372     pmdata=cpl_image_get_data_float(mask);
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ix*iy ; i ++ )
-<a name="l01375"></a>01375     {
-<a name="l01376"></a>01376         <span class="keywordflow">if</span> ( pmdata[i] == 0. )
-<a name="l01377"></a>01377         {
-<a name="l01378"></a>01378             podata[i] = ZERO ;
-<a name="l01379"></a>01379         }
-<a name="l01380"></a>01380     }
-<a name="l01381"></a>01381 
-<a name="l01382"></a>01382     <span class="keywordflow">return</span> reImage ;
-<a name="l01383"></a>01383 }
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385 
-<a name="l01386"></a>01386 
-<a name="l01396"></a>01396 cpl_image *
-<a name="l01397"></a>01397 sinfo_new_thresh_image (cpl_image * im, <span class="keywordtype">float</span> lo_cut, <span class="keywordtype">float</span> hi_cut )
-<a name="l01398"></a>01398 {
-<a name="l01399"></a>01399     cpl_image * image=NULL ;
-<a name="l01400"></a>01400     <span class="keywordtype">float</span>* p_inp_data=NULL;
-<a name="l01401"></a>01401     <span class="keywordtype">float</span>* p_out_data=NULL;
-<a name="l01402"></a>01402     <span class="keywordtype">int</span> lx=0;
-<a name="l01403"></a>01403     <span class="keywordtype">int</span> ly=0;
-<a name="l01404"></a>01404 
-<a name="l01405"></a>01405     <span class="keywordtype">int</span>            i=0 ;
-<a name="l01406"></a>01406 
-<a name="l01407"></a>01407     <span class="keywordflow">if</span> (im == NULL)
-<a name="l01408"></a>01408     {
-<a name="l01409"></a>01409         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image given"</span>) ;
-<a name="l01410"></a>01410         <span class="keywordflow">return</span> NULL ;
-<a name="l01411"></a>01411     }
-<a name="l01412"></a>01412     lx=cpl_image_get_size_x(im);
-<a name="l01413"></a>01413     ly=cpl_image_get_size_y(im);
-<a name="l01414"></a>01414 
-<a name="l01415"></a>01415     image = cpl_image_duplicate(im) ;
-<a name="l01416"></a>01416     p_inp_data=cpl_image_get_data(im);
-<a name="l01417"></a>01417     p_out_data=cpl_image_get_data(image);
-<a name="l01418"></a>01418     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i ++ )
-<a name="l01419"></a>01419     {
-<a name="l01420"></a>01420         <span class="keywordflow">if</span> ( p_inp_data[i] > (pixelvalue) hi_cut ||
-<a name="l01421"></a>01421              p_inp_data[i] < (pixelvalue) lo_cut )
-<a name="l01422"></a>01422         {
-<a name="l01423"></a>01423              p_out_data[i] = ZERO ;
-<a name="l01424"></a>01424         }
-<a name="l01425"></a>01425     }
-<a name="l01426"></a>01426     <span class="keywordflow">return</span> image ;
-<a name="l01427"></a>01427 }
-<a name="l01428"></a>01428 
-<a name="l01429"></a>01429 
-<a name="l01430"></a>01430 
-<a name="l01431"></a>01431 
-<a name="l01456"></a>01456 cpl_image * sinfo_new_interpol_image ( cpl_image * im,
-<a name="l01457"></a>01457                            cpl_image * mask,
-<a name="l01458"></a>01458                            <span class="keywordtype">int</span>        max_radius,
-<a name="l01459"></a>01459                            <span class="keywordtype">int</span>        n_pixels )
-<a name="l01460"></a>01460 {
-<a name="l01461"></a>01461     cpl_image * returnImage=NULL ;
-<a name="l01462"></a>01462     <span class="keywordtype">float</span>* neighbors=NULL ;
-<a name="l01463"></a>01463     <span class="keywordtype">float</span> sum=0;
-<a name="l01464"></a>01464     <span class="keywordtype">float</span> mean=0;
-<a name="l01465"></a>01465     <span class="keywordtype">int</span> i=0;
-<a name="l01466"></a>01466     <span class="keywordtype">int</span> j=0;
-<a name="l01467"></a>01467     <span class="keywordtype">int</span> k=0;
-<a name="l01468"></a>01468     <span class="keywordtype">int</span> row=0;
-<a name="l01469"></a>01469     <span class="keywordtype">int</span> col=0;
-<a name="l01470"></a>01470     <span class="keywordtype">int</span> n_valid=0;
-<a name="l01471"></a>01471     <span class="keywordtype">int</span> agreed=0;
-<a name="l01472"></a>01472 
-<a name="l01473"></a>01473     <span class="keywordtype">int</span> ilx=0;
-<a name="l01474"></a>01474     <span class="keywordtype">int</span> ily=0;
-<a name="l01475"></a>01475     <span class="keywordtype">int</span> mlx=0;
-<a name="l01476"></a>01476     <span class="keywordtype">int</span> mly=0;
-<a name="l01477"></a>01477     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01478"></a>01478     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01479"></a>01479     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01480"></a>01480 
-<a name="l01481"></a>01481     <span class="keywordflow">if</span> ( NULL == im )
-<a name="l01482"></a>01482     {
-<a name="l01483"></a>01483         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;
-<a name="l01484"></a>01484         <span class="keywordflow">return</span> NULL ;
-<a name="l01485"></a>01485     }
-<a name="l01486"></a>01486     ilx=cpl_image_get_size_x(im);
-<a name="l01487"></a>01487     ily=cpl_image_get_size_y(im);
-<a name="l01488"></a>01488     pidata=cpl_image_get_data_float(im);
-<a name="l01489"></a>01489 
-<a name="l01490"></a>01490     <span class="keywordflow">if</span> ( NULL == mask )
-<a name="l01491"></a>01491     {
-<a name="l01492"></a>01492         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no mask image given!"</span>) ;
-<a name="l01493"></a>01493         <span class="keywordflow">return</span> NULL ;
-<a name="l01494"></a>01494     }
-<a name="l01495"></a>01495 
-<a name="l01496"></a>01496     mlx=cpl_image_get_size_x(mask);
-<a name="l01497"></a>01497     mly=cpl_image_get_size_y(mask);
-<a name="l01498"></a>01498     pmdata=cpl_image_get_data_float(mask);
-<a name="l01499"></a>01499 
-<a name="l01500"></a>01500     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )
-<a name="l01501"></a>01501     {
-<a name="l01502"></a>01502         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible !"</span>) ;
-<a name="l01503"></a>01503         <span class="keywordflow">return</span> NULL ;
-<a name="l01504"></a>01504     }
-<a name="l01505"></a>01505 
-<a name="l01506"></a>01506     <span class="keywordflow">if</span> ( max_radius <= 0 )
-<a name="l01507"></a>01507     {
-<a name="l01508"></a>01508         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of pixels for maximal "</span>
-<a name="l01509"></a>01509                         <span class="stringliteral">"search radius given!"</span>) ;
-<a name="l01510"></a>01510         <span class="keywordflow">return</span> NULL ;
-<a name="l01511"></a>01511     }
-<a name="l01512"></a>01512 
-<a name="l01513"></a>01513     <span class="keywordflow">if</span> ( n_pixels <= 2 )
-<a name="l01514"></a>01514     {
-<a name="l01515"></a>01515         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of pixels used "</span>
-<a name="l01516"></a>01516                         <span class="stringliteral">"for interpolation given!"</span>) ;
-<a name="l01517"></a>01517         <span class="keywordflow">return</span> NULL ;
-<a name="l01518"></a>01518     }
-<a name="l01519"></a>01519 
-<a name="l01520"></a>01520     returnImage = cpl_image_duplicate ( im ) ;
-<a name="l01521"></a>01521     podata=cpl_image_get_data_float(returnImage);
-<a name="l01522"></a>01522 
-<a name="l01523"></a>01523     <span class="comment">/* go through the columns and rows of the input and mask image */</span>
-<a name="l01524"></a>01524     neighbors=cpl_calloc(4*max_radius*max_radius,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01525"></a>01525 
-<a name="l01526"></a>01526     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01527"></a>01527     {
-<a name="l01528"></a>01528         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01529"></a>01529         {
-<a name="l01530"></a>01530             <span class="comment">/* look for the ZEROS that means the detected bad pixels */</span>
-<a name="l01531"></a>01531             <span class="keywordflow">if</span> ( isnan(pmdata[col+row*ilx]) || pmdata[col+row*ilx] == 0. )
-<a name="l01532"></a>01532             {
-<a name="l01533"></a>01533                 <span class="comment">/* now the neighbors must be considered */</span>
-<a name="l01534"></a>01534                 n_valid = 0 ;
-<a name="l01535"></a>01535                 agreed  = 0 ;
-<a name="l01536"></a>01536                 <span class="keywordflow">for</span> ( j = 1 ; j <= max_radius ; j++ )
-<a name="l01537"></a>01537                 {
-<a name="l01538"></a>01538 
-<a name="l01539"></a>01539                     <span class="comment">/* go through the left column */</span>
-<a name="l01540"></a>01540                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )
-<a name="l01541"></a>01541                     {
-<a name="l01542"></a>01542                         <span class="keywordflow">if</span> ( col-j >= 0 && row+k < ily && row+k >= 0 )
-<a name="l01543"></a>01543                         {
-<a name="l01544"></a>01544                             <span class="keywordflow">if</span> ( !isnan(pmdata[col-j+(row+k)*mlx]) ||
-<a name="l01545"></a>01545                                  pmdata[col-j+(row+k)*mlx] != 0 )
-<a name="l01546"></a>01546                             {
-<a name="l01547"></a>01547                                 neighbors[n_valid]=pidata[col-j+(row+k)*ilx] ;
-<a name="l01548"></a>01548                                 n_valid++ ;
-<a name="l01549"></a>01549                             }
-<a name="l01550"></a>01550                         }
-<a name="l01551"></a>01551                     }
-<a name="l01552"></a>01552 
-<a name="l01553"></a>01553                     <span class="comment">/* go through the upper row */</span>
-<a name="l01554"></a>01554                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )
-<a name="l01555"></a>01555                     {
-<a name="l01556"></a>01556                         <span class="keywordflow">if</span> ( col+k < ilx && col+k >= 0 && row+j < ily )
-<a name="l01557"></a>01557                         {
-<a name="l01558"></a>01558                             <span class="keywordflow">if</span> ( !isnan(pmdata[col+k+(row+j)*mlx]) ||
-<a name="l01559"></a>01559                                  pmdata[col+k+(row+j)*mlx] != 0. )
-<a name="l01560"></a>01560                             {
-<a name="l01561"></a>01561                                 neighbors[n_valid]=pidata[col+k+(row+j)*ilx] ;
-<a name="l01562"></a>01562                                 n_valid++ ;
-<a name="l01563"></a>01563                             }
-<a name="l01564"></a>01564                         }
-<a name="l01565"></a>01565                     }
-<a name="l01566"></a>01566 
-<a name="l01567"></a>01567                     <span class="comment">/* go through the right column */</span>
-<a name="l01568"></a>01568                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )
-<a name="l01569"></a>01569                     {
-<a name="l01570"></a>01570                         <span class="keywordflow">if</span> ( col+j < ilx  && row-k >= 0 && row-k < ily )
-<a name="l01571"></a>01571                         {
-<a name="l01572"></a>01572                             <span class="keywordflow">if</span> ( !isnan(pmdata[col+j+(row-k)*mlx]) ||
-<a name="l01573"></a>01573                                  pmdata[col+j+(row-k)*mlx] != 0. )
-<a name="l01574"></a>01574                             {
-<a name="l01575"></a>01575                                 neighbors[n_valid]=pidata[col+j+(row-k)*ilx] ;
-<a name="l01576"></a>01576                                 n_valid++ ;
-<a name="l01577"></a>01577                             }
-<a name="l01578"></a>01578                         }
-<a name="l01579"></a>01579                     }
-<a name="l01580"></a>01580 
-<a name="l01581"></a>01581                     <span class="comment">/* go through the lower row */</span>
-<a name="l01582"></a>01582                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )
-<a name="l01583"></a>01583                     {
-<a name="l01584"></a>01584                         <span class="keywordflow">if</span> ( col-k >= 0 && col-k < ilx && row-j < ily )
-<a name="l01585"></a>01585                         {
-<a name="l01586"></a>01586                             <span class="keywordflow">if</span> ( !isnan(pmdata[col-k+(row-j)*mlx]) ||
-<a name="l01587"></a>01587                                  pmdata[col-k+(row-j)*mlx] != 0. )
-<a name="l01588"></a>01588                             {
-<a name="l01589"></a>01589                                 neighbors[n_valid]=pidata[col-k+(row-j)*ilx] ;
-<a name="l01590"></a>01590                                 n_valid++ ;
-<a name="l01591"></a>01591                             }
-<a name="l01592"></a>01592                         }
-<a name="l01593"></a>01593                     }
-<a name="l01594"></a>01594 
-<a name="l01595"></a>01595                     <span class="comment">/* control if the breaking criteria is fullfilled */</span>
-<a name="l01596"></a>01596                     <span class="keywordflow">if</span> ( n_valid >= n_pixels )
-<a name="l01597"></a>01597                     {
-<a name="l01598"></a>01598                         agreed = 1 ;
-<a name="l01599"></a>01599                         break ;
-<a name="l01600"></a>01600                     }
-<a name="l01601"></a>01601                     <span class="comment">/* do a break if more than 2 nearest neighbors are found */</span>
-<a name="l01602"></a>01602                     <span class="keywordflow">if</span> ( j == 1 && n_valid >= 2 )
-<a name="l01603"></a>01603                     {
-<a name="l01604"></a>01604                         agreed = 1 ;
-<a name="l01605"></a>01605                         break ;
-<a name="l01606"></a>01606                     }
-<a name="l01607"></a>01607                 }
-<a name="l01608"></a>01608                 <span class="keywordflow">if</span> ( n_valid < n_pixels && agreed == 0 )
-<a name="l01609"></a>01609                 {
-<a name="l01610"></a>01610                     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough valid neighbors found to "</span>
-<a name="l01611"></a>01611                                     <span class="stringliteral">"interpolate bad pixel in col: "</span>
-<a name="l01612"></a>01612                                     <span class="stringliteral">"%d, row: %d"</span>, col, row ) ;
-<a name="l01613"></a>01613                     <span class="keywordflow">return</span> NULL ;
-<a name="l01614"></a>01614                 }
-<a name="l01615"></a>01615                 <span class="keywordflow">else</span>
-<a name="l01616"></a>01616                 {
-<a name="l01617"></a>01617                     <span class="comment">/* ------------------------------------------------------</span>
-<a name="l01618"></a>01618 <span class="comment">                     * take the mean of the valid neighboring pixels if less</span>
-<a name="l01619"></a>01619 <span class="comment">                     * than 9 valid pixels are available else take the</span>
-<a name="l01620"></a>01620 <span class="comment">                       sinfo_median.</span>
-<a name="l01621"></a>01621 <span class="comment">                     */</span>
-<a name="l01622"></a>01622                     <span class="keywordflow">if</span> ( n_valid <= 8 )
-<a name="l01623"></a>01623                     {
-<a name="l01624"></a>01624                         sum = 0. ;
-<a name="l01625"></a>01625 
-<a name="l01626"></a>01626                         <span class="keywordflow">for</span> ( i = 0 ; i < n_valid ; i++ )
-<a name="l01627"></a>01627                         {
-<a name="l01628"></a>01628                             sum += neighbors[i] ;
-<a name="l01629"></a>01629                         }
-<a name="l01630"></a>01630                         mean = sum / n_valid ;
-<a name="l01631"></a>01631 
-<a name="l01632"></a>01632                         podata[col+row*ilx] = mean ;
-<a name="l01633"></a>01633                     }
-<a name="l01634"></a>01634                     <span class="keywordflow">else</span>
-<a name="l01635"></a>01635                     {
-<a name="l01636"></a>01636                        podata[col+row*ilx]=sinfo_new_median(neighbors,n_valid);
-<a name="l01637"></a>01637                     }
-<a name="l01638"></a>01638                 }
-<a name="l01639"></a>01639             }
-<a name="l01640"></a>01640         }
-<a name="l01641"></a>01641     }
-<a name="l01642"></a>01642     cpl_free(neighbors);
-<a name="l01643"></a>01643     <span class="keywordflow">return</span> returnImage ;
-<a name="l01644"></a>01644 }
-<a name="l01645"></a>01645 
-<a name="l01646"></a>01646 
-<a name="l01669"></a>01669 cpl_image * sinfo_interpol_source_image ( cpl_image * im,
-<a name="l01670"></a>01670                                  cpl_image * mask,
-<a name="l01671"></a>01671                                  <span class="keywordtype">int</span>        max_rad,
-<a name="l01672"></a>01672                                  <span class="keywordtype">float</span>   ** slit_edges )
-<a name="l01673"></a>01673 {
-<a name="l01674"></a>01674     cpl_image * returnImage=NULL ;
-<a name="l01675"></a>01675     <span class="keywordtype">float</span> validpixel[6] ;
-<a name="l01676"></a>01676     <span class="keywordtype">float</span> sum=0 ;
-<a name="l01677"></a>01677     <span class="keywordtype">int</span> n=0;
-<a name="l01678"></a>01678     <span class="keywordtype">int</span> row=0;
-<a name="l01679"></a>01679     <span class="keywordtype">int</span> col=0;
-<a name="l01680"></a>01680     <span class="keywordtype">int</span> i=0;
-<a name="l01681"></a>01681     <span class="keywordtype">int</span> k=0;
-<a name="l01682"></a>01682     <span class="keywordtype">int</span> slitlet=0;
-<a name="l01683"></a>01683     <span class="keywordtype">int</span> n_slitlets=0;
-<a name="l01684"></a>01684     <span class="keywordtype">int</span> ilx=0;
-<a name="l01685"></a>01685     <span class="keywordtype">int</span> ily=0;
-<a name="l01686"></a>01686     <span class="keywordtype">int</span> mlx=0;
-<a name="l01687"></a>01687     <span class="keywordtype">int</span> mly=0;
-<a name="l01688"></a>01688 
-<a name="l01689"></a>01689     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01690"></a>01690     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01691"></a>01691     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01692"></a>01692 
-<a name="l01693"></a>01693 
-<a name="l01694"></a>01694     <span class="keywordflow">if</span> ( NULL == im )
-<a name="l01695"></a>01695     {
-<a name="l01696"></a>01696         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;
-<a name="l01697"></a>01697         <span class="keywordflow">return</span> NULL ;
-<a name="l01698"></a>01698     }
-<a name="l01699"></a>01699     ilx=cpl_image_get_size_x(im);
-<a name="l01700"></a>01700     ily=cpl_image_get_size_y(im);
-<a name="l01701"></a>01701     pidata=cpl_image_get_data_float(im);
-<a name="l01702"></a>01702 
-<a name="l01703"></a>01703     <span class="keywordflow">if</span> ( NULL == mask )
-<a name="l01704"></a>01704     {
-<a name="l01705"></a>01705         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no bad pixel mask image given!"</span>) ;
-<a name="l01706"></a>01706         <span class="keywordflow">return</span> NULL ;
-<a name="l01707"></a>01707     }
-<a name="l01708"></a>01708     mlx=cpl_image_get_size_x(mask);
-<a name="l01709"></a>01709     mly=cpl_image_get_size_y(mask);
-<a name="l01710"></a>01710     pmdata=cpl_image_get_data_float(mask);
-<a name="l01711"></a>01711 
-<a name="l01712"></a>01712     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )
-<a name="l01713"></a>01713     {
-<a name="l01714"></a>01714         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible in size!"</span>) ;
-<a name="l01715"></a>01715         <span class="keywordflow">return</span> NULL ;
-<a name="l01716"></a>01716     }
-<a name="l01717"></a>01717 
-<a name="l01718"></a>01718     <span class="keywordflow">if</span> ( max_rad < 1 )
-<a name="l01719"></a>01719     {
-<a name="l01720"></a>01720         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, wrong maximum distance given!"</span>) ;
-<a name="l01721"></a>01721         <span class="keywordflow">return</span> NULL ;
-<a name="l01722"></a>01722     }
-<a name="l01723"></a>01723 
-<a name="l01724"></a>01724     <span class="keywordflow">if</span> ( slit_edges == NULL )
-<a name="l01725"></a>01725     {
-<a name="l01726"></a>01726         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, array slit_edges is empty!"</span>) ;
-<a name="l01727"></a>01727         <span class="keywordflow">return</span> NULL ;
-<a name="l01728"></a>01728     }
-<a name="l01729"></a>01729 
-<a name="l01730"></a>01730     <span class="comment">/* determine the number of slitlets */</span>
-<a name="l01731"></a>01731     n_slitlets = N_SLITLETS ;
-<a name="l01732"></a>01732 
-<a name="l01733"></a>01733     <span class="comment">/* copy the original image in the image that will be returned */</span>
-<a name="l01734"></a>01734     returnImage = cpl_image_duplicate( im ) ;
-<a name="l01735"></a>01735     podata=cpl_image_get_data_float(returnImage);
-<a name="l01736"></a>01736 
-<a name="l01737"></a>01737     <span class="comment">/* go through the rows and columns of the image and search for</span>
-<a name="l01738"></a>01738 <span class="comment">      the bad pixels */</span>
-<a name="l01739"></a>01739     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01740"></a>01740     {
-<a name="l01741"></a>01741         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01742"></a>01742         {
-<a name="l01743"></a>01743             n = 0 ;
-<a name="l01744"></a>01744             <span class="keywordflow">if</span> ( isnan(pmdata[col + row*mlx]) ||
-<a name="l01745"></a>01745                  pmdata[col + row*mlx] == 0. ||
-<a name="l01746"></a>01746                  isnan(pidata[col + row*mlx]) )
-<a name="l01747"></a>01747             {
-<a name="l01748"></a>01748                 <span class="comment">/* look for the slitlet where the bad pixel is found */</span>
-<a name="l01749"></a>01749                 slitlet = -1000 ;
-<a name="l01750"></a>01750                 <span class="keywordflow">for</span> ( k = 0 ; k < n_slitlets ; k++ )
-<a name="l01751"></a>01751                 {
-<a name="l01752"></a>01752                     <span class="keywordflow">if</span> ( sinfo_new_nint(slit_edges[k][0]) <= col &&
-<a name="l01753"></a>01753                          sinfo_new_nint(slit_edges[k][1]) >= col )
-<a name="l01754"></a>01754                     {
-<a name="l01755"></a>01755                         slitlet = k ;
-<a name="l01756"></a>01756                     }
-<a name="l01757"></a>01757 <span class="comment">/* The following else statement is wrong, because in the</span>
-<a name="l01758"></a>01758 <span class="comment">     end slitlet will always be -1000</span>
-<a name="l01759"></a>01759 <span class="comment">            else</span>
-<a name="l01760"></a>01760 <span class="comment">                    {</span>
-<a name="l01761"></a>01761 <span class="comment">                        slitlet = -1000 ;</span>
-<a name="l01762"></a>01762 <span class="comment">                    }</span>
-<a name="l01763"></a>01763 <span class="comment">*/</span>
-<a name="l01764"></a>01764                 }
-<a name="l01765"></a>01765                 <span class="keywordflow">for</span> ( i = 0 ; i < 6 ; i++ )
-<a name="l01766"></a>01766                 {
-<a name="l01767"></a>01767                     validpixel[i] = 0. ;
-<a name="l01768"></a>01768                 }
-<a name="l01769"></a>01769                 <span class="comment">/* look for the valid nearest neighbors</span>
-<a name="l01770"></a>01770 <span class="comment">                   and collect them but only a maximum of 4 */</span>
-<a name="l01771"></a>01771                 <span class="keywordflow">for</span> ( i = 1 ; i <= max_rad ; i++ )
-<a name="l01772"></a>01772                 {
-<a name="l01773"></a>01773                     <span class="keywordflow">if</span> ( row + i < ily)
-<a name="l01774"></a>01774                     {
-<a name="l01775"></a>01775                         <span class="keywordflow">if</span> ( !isnan(pmdata[col + (row+i) * mlx])
-<a name="l01776"></a>01776                              && pmdata[col + (row+i) * mlx] != 0. &&
-<a name="l01777"></a>01777                                 !isnan(pidata[col + (row+i) * ilx]) )
-<a name="l01778"></a>01778                         {
-<a name="l01779"></a>01779                             validpixel[n] = pidata[col + (row+i) * ilx] ;
-<a name="l01780"></a>01780                             n++ ;
-<a name="l01781"></a>01781                         }
-<a name="l01782"></a>01782                     }
-<a name="l01783"></a>01783                     <span class="keywordflow">if</span> ( row - i >= 0 )
-<a name="l01784"></a>01784                     {
-<a name="l01785"></a>01785                         <span class="keywordflow">if</span> ( !isnan(pmdata[col + (row-i) * mlx])
-<a name="l01786"></a>01786                              && pmdata[col + (row-i) * mlx] != 0. &&
-<a name="l01787"></a>01787                                 !isnan(pidata[col + (row-i) * ilx]) )
-<a name="l01788"></a>01788                         {
-<a name="l01789"></a>01789                             validpixel[n] = pidata[col + (row-i) * ilx] ;
-<a name="l01790"></a>01790                             n++ ;
-<a name="l01791"></a>01791                         }
-<a name="l01792"></a>01792                     }
-<a name="l01793"></a>01793 
-<a name="l01794"></a>01794                     <span class="comment">/* be aware of the slitlet edges in the</span>
-<a name="l01795"></a>01795 <span class="comment">                       spatial direction */</span>
-<a name="l01796"></a>01796                     <span class="keywordflow">if</span> ( col + i < ilx )
-<a name="l01797"></a>01797                     {
-<a name="l01798"></a>01798                       <span class="keywordflow">if</span> (  slitlet != -1000 )
-<a name="l01799"></a>01799                       {
-<a name="l01800"></a>01800                          <span class="keywordflow">if</span> (col+i <= sinfo_new_nint(slit_edges[slitlet][1]) &&
-<a name="l01801"></a>01801                              !isnan(pmdata[col + i + row * mlx]) &&
-<a name="l01802"></a>01802                              pmdata[col + i + row * mlx] != 0. &&
-<a name="l01803"></a>01803                              !isnan(pidata[col + i + row * ilx]) )
-<a name="l01804"></a>01804                          {
-<a name="l01805"></a>01805                              validpixel[n] = pidata[col + i + row * ilx] ;
-<a name="l01806"></a>01806                              n++ ;
-<a name="l01807"></a>01807                          }
-<a name="l01808"></a>01808                       }
-<a name="l01809"></a>01809                     }
-<a name="l01810"></a>01810                     <span class="keywordflow">if</span> ( col - i >= 0 )
-<a name="l01811"></a>01811                     {
-<a name="l01812"></a>01812                       <span class="keywordflow">if</span> ( slitlet != -1000 )
-<a name="l01813"></a>01813                       {
-<a name="l01814"></a>01814                          <span class="keywordflow">if</span> (col-i >= sinfo_new_nint(slit_edges[slitlet][0]) &&
-<a name="l01815"></a>01815                              !isnan(pmdata[col - i + row * mlx]) &&
-<a name="l01816"></a>01816                              pmdata[col - i + row * mlx] != 0. &&
-<a name="l01817"></a>01817                              !isnan(pidata[col - i + row * ilx]) )
-<a name="l01818"></a>01818                          {
-<a name="l01819"></a>01819                              validpixel[n] = pidata[col - i + row * ilx] ;
-<a name="l01820"></a>01820                              n++ ;
-<a name="l01821"></a>01821                          }
-<a name="l01822"></a>01822                       }
-<a name="l01823"></a>01823                     }
-<a name="l01824"></a>01824 
-<a name="l01825"></a>01825                     <span class="keywordflow">if</span> ( i == 1 && n > 1 )
-<a name="l01826"></a>01826                     {
-<a name="l01827"></a>01827                         break ;
-<a name="l01828"></a>01828                     }
-<a name="l01829"></a>01829                     <span class="keywordflow">if</span> ( n > 2 )
-<a name="l01830"></a>01830                     {
-<a name="l01831"></a>01831                         break ;
-<a name="l01832"></a>01832                     }
-<a name="l01833"></a>01833                 }
-<a name="l01834"></a>01834 
-<a name="l01835"></a>01835                 <span class="keywordflow">if</span> ( n == 0 )
-<a name="l01836"></a>01836                 {
-<a name="l01837"></a>01837                     podata[col + row*ilx] = ZERO ;
-<a name="l01838"></a>01838             <span class="comment">/*sinfo_msg_warning("sinfo_interpolSourceImage:",</span>
-<a name="l01839"></a>01839 <span class="comment">                                        "bad pixel in column: %d and row: %d"</span>
-<a name="l01840"></a>01840 <span class="comment">                                        " could not be interpolated!",col,row);</span>
-<a name="l01841"></a>01841 <span class="comment">                             */</span>
-<a name="l01842"></a>01842                 }
-<a name="l01843"></a>01843                 <span class="keywordflow">else</span>
-<a name="l01844"></a>01844                 {
-<a name="l01845"></a>01845                     <span class="comment">/* now compute the mean and replace</span>
-<a name="l01846"></a>01846 <span class="comment">                       the bad pixel value by the mean */</span>
-<a name="l01847"></a>01847                     sum = 0. ;
-<a name="l01848"></a>01848                     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )
-<a name="l01849"></a>01849                     {
-<a name="l01850"></a>01850                         sum += validpixel[i] ;
-<a name="l01851"></a>01851                     }
-<a name="l01852"></a>01852                     podata[col + row*ilx] = sum/n ;
-<a name="l01853"></a>01853                 }
-<a name="l01854"></a>01854             }
-<a name="l01855"></a>01855         }
-<a name="l01856"></a>01856     }
-<a name="l01857"></a>01857 
-<a name="l01858"></a>01858     <span class="keywordflow">return</span> returnImage ;
-<a name="l01859"></a>01859 }
-<a name="l01860"></a>01860 
-<a name="l01870"></a>01870 cpl_image * sinfo_new_stack_row_to_image ( Vector * row, <span class="keywordtype">int</span> ly )
-<a name="l01871"></a>01871 {
-<a name="l01872"></a>01872     cpl_image * image=NULL;
-<a name="l01873"></a>01873     <span class="keywordtype">int</span>        col=0;
-<a name="l01874"></a>01874     <span class="keywordtype">int</span>        ro=0;
-<a name="l01875"></a>01875     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01876"></a>01876 
-<a name="l01877"></a>01877     <span class="keywordflow">if</span> ( row == NullVector )
-<a name="l01878"></a>01878     {
-<a name="l01879"></a>01879         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Null sinfo_vector as input"</span> ) ;
-<a name="l01880"></a>01880         <span class="keywordflow">return</span> NULL ;
-<a name="l01881"></a>01881     }
-<a name="l01882"></a>01882     <span class="keywordflow">if</span> ( ly <= 1 )
-<a name="l01883"></a>01883     {
-<a name="l01884"></a>01884         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image length given"</span> ) ;
-<a name="l01885"></a>01885         <span class="keywordflow">return</span> NULL ;
-<a name="l01886"></a>01886     }
-<a name="l01887"></a>01887 
-<a name="l01888"></a>01888     <span class="comment">/* allocate memory */</span>
-<a name="l01889"></a>01889     <span class="keywordflow">if</span> (NULL == (image = cpl_image_new(row->n_elements ,ly,CPL_TYPE_FLOAT )) )
-<a name="l01890"></a>01890     {
-<a name="l01891"></a>01891         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;
-<a name="l01892"></a>01892         <span class="keywordflow">return</span> NULL ;
-<a name="l01893"></a>01893     }
-<a name="l01894"></a>01894     podata=cpl_image_get_data_float(image);
-<a name="l01895"></a>01895 
-<a name="l01896"></a>01896     <span class="keywordflow">for</span> ( col = 0 ; col < row -> n_elements ; col++ )
-<a name="l01897"></a>01897     {
-<a name="l01898"></a>01898         <span class="keywordflow">for</span> ( ro = 0 ; ro < ly ; ro++ )
-<a name="l01899"></a>01899         {
-<a name="l01900"></a>01900             podata[col + ro*ly] = row -> data[col] ;
-<a name="l01901"></a>01901         }
-<a name="l01902"></a>01902     }
-<a name="l01903"></a>01903     <span class="keywordflow">return</span> image ;
-<a name="l01904"></a>01904 }
-<a name="l01905"></a>01905 
-<a name="l01921"></a>01921 Stats * sinfo_new_image_stats_on_rectangle ( cpl_image * im,
-<a name="l01922"></a>01922                                 <span class="keywordtype">float</span>      loReject,
-<a name="l01923"></a>01923                                 <span class="keywordtype">float</span>      hiReject,
-<a name="l01924"></a>01924                                 <span class="keywordtype">int</span>        llx,
-<a name="l01925"></a>01925                                 <span class="keywordtype">int</span>        lly,
-<a name="l01926"></a>01926                                 <span class="keywordtype">int</span>        urx,
-<a name="l01927"></a>01927                                 <span class="keywordtype">int</span>        ury )
-<a name="l01928"></a>01928 {
-<a name="l01929"></a>01929     Stats * retstats=NULL;
-<a name="l01930"></a>01930     <span class="keywordtype">int</span> i=0 ;
-<a name="l01931"></a>01931     <span class="keywordtype">int</span> row=0;
-<a name="l01932"></a>01932     <span class="keywordtype">int</span> col=0;
-<a name="l01933"></a>01933     <span class="keywordtype">int</span> n=0;
-<a name="l01934"></a>01934     <span class="keywordtype">int</span> npix=0;
-<a name="l01935"></a>01935     <span class="keywordtype">int</span> lo_n=0;
-<a name="l01936"></a>01936     <span class="keywordtype">int</span> hi_n=0;
-<a name="l01937"></a>01937     <span class="keywordtype">double</span> pix_sum=0;
-<a name="l01938"></a>01938     <span class="keywordtype">double</span> sqr_sum=0;
-<a name="l01939"></a>01939     <span class="keywordtype">float</span> * pix_array=NULL;
-<a name="l01940"></a>01940     <span class="keywordtype">int</span> im_lx=0;
-<a name="l01941"></a>01941     <span class="keywordtype">int</span> im_ly=0;
-<a name="l01942"></a>01942     <span class="keywordtype">float</span>* pim=NULL;
-<a name="l01943"></a>01943 
-<a name="l01944"></a>01944     <span class="keywordflow">if</span> ( NULL == im )
-<a name="l01945"></a>01945     {
-<a name="l01946"></a>01946         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;
-<a name="l01947"></a>01947         <span class="keywordflow">return</span> NULL ;
-<a name="l01948"></a>01948     }
-<a name="l01949"></a>01949     <span class="keywordflow">if</span> ( loReject+hiReject >= 100. )
-<a name="l01950"></a>01950     {
-<a name="l01951"></a>01951         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, too much pixels rejected!"</span>) ;
-<a name="l01952"></a>01952         <span class="keywordflow">return</span> NULL ;
-<a name="l01953"></a>01953     }
-<a name="l01954"></a>01954     <span class="keywordflow">if</span> ( loReject < 0. || loReject >= 100. ||
-<a name="l01955"></a>01955          hiReject < 0. || hiReject >= 100. )
-<a name="l01956"></a>01956     {
-<a name="l01957"></a>01957         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, negative reject values!"</span>) ;
-<a name="l01958"></a>01958         <span class="keywordflow">return</span> NULL ;
-<a name="l01959"></a>01959     }
-<a name="l01960"></a>01960 
-<a name="l01961"></a>01961     im_lx=cpl_image_get_size_x(im);
-<a name="l01962"></a>01962     im_ly=cpl_image_get_size_y(im);
-<a name="l01963"></a>01963 
-<a name="l01964"></a>01964     <span class="keywordflow">if</span> ( llx < 0 || lly < 0 || urx < 0 || ury < 0 ||
-<a name="l01965"></a>01965          llx >= im_lx || lly >= im_ly || urx >= im_lx ||
-<a name="l01966"></a>01966          ury >= im_ly || ury <= lly || urx <= llx )
-<a name="l01967"></a>01967     {
-<a name="l01968"></a>01968         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, wrong pixel coordinates of rectangle!"</span>) ;
-<a name="l01969"></a>01969         <span class="keywordflow">return</span> NULL ;
-<a name="l01970"></a>01970     }
-<a name="l01971"></a>01971 
-<a name="l01972"></a>01972      <span class="comment">/* allocate memory */</span>
-<a name="l01973"></a>01973     retstats = (Stats*) cpl_calloc(1, <span class="keyword">sizeof</span>(Stats)) ;
-<a name="l01974"></a>01974     npix = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l01975"></a>01975     pix_array = (<span class="keywordtype">float</span>*) cpl_calloc ( npix, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;
-<a name="l01976"></a>01976 
-<a name="l01977"></a>01977     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l01978"></a>01978 <span class="comment">     * go through the rectangle and copy the pixel values into an array.</span>
-<a name="l01979"></a>01979 <span class="comment">     */</span>
-<a name="l01980"></a>01980     n = 0 ;
-<a name="l01981"></a>01981     pim = cpl_image_get_data_float(im);
-<a name="l01982"></a>01982     <span class="keywordflow">for</span> ( row = lly ; row <= ury ; row++ )
-<a name="l01983"></a>01983     {
-<a name="l01984"></a>01984         <span class="keywordflow">for</span> ( col = llx ; col <= urx ; col++ )
-<a name="l01985"></a>01985         {
-<a name="l01986"></a>01986             <span class="keywordflow">if</span> ( !isnan(pim[col + row*im_lx]) )
-<a name="l01987"></a>01987             {
-<a name="l01988"></a>01988                 pix_array[n] = pim[col + row*im_lx] ;
-<a name="l01989"></a>01989                 n++ ;
-<a name="l01990"></a>01990             }
-<a name="l01991"></a>01991     }
-<a name="l01992"></a>01992     }
-<a name="l01993"></a>01993 
-<a name="l01994"></a>01994     npix = n;
-<a name="l01995"></a>01995     <span class="comment">/*if (n != npix)</span>
-<a name="l01996"></a>01996 <span class="comment">    {</span>
-<a name="l01997"></a>01997 <span class="comment">        sinfo_msg_error("the computed number of pixel equals "</span>
-<a name="l01998"></a>01998 <span class="comment">                        "not the counted number, impossible!") ;</span>
-<a name="l01999"></a>01999 <span class="comment">        cpl_free(retstats) ;</span>
-<a name="l02000"></a>02000 <span class="comment">        cpl_free(pix_array) ;</span>
-<a name="l02001"></a>02001 <span class="comment">        return NULL ;</span>
-<a name="l02002"></a>02002 <span class="comment">    }*/</span>
-<a name="l02003"></a>02003 
-<a name="l02004"></a>02004     <span class="comment">/* determining the clean mean is already done in the recipes */</span>
-<a name="l02005"></a>02005     <span class="keywordflow">if</span> ( FLT_MAX == (retstats->cleanmean = sinfo_new_clean_mean(pix_array,
-<a name="l02006"></a>02006                                            npix, loReject, hiReject)) )
-<a name="l02007"></a>02007     {
-<a name="l02008"></a>02008         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_clean_mean() did not work!"</span>) ;
-<a name="l02009"></a>02009         cpl_free(retstats) ;
-<a name="l02010"></a>02010         cpl_free(pix_array) ;
-<a name="l02011"></a>02011         <span class="keywordflow">return</span> NULL ;
-<a name="l02012"></a>02012     }
-<a name="l02013"></a>02013 
-<a name="l02014"></a>02014     <span class="comment">/* now the clean standard deviation must be calculated */</span>
-<a name="l02015"></a>02015     <span class="comment">/* initialize sums */</span>
-<a name="l02016"></a>02016     lo_n = (int) (loReject / 100. * (<span class="keywordtype">float</span>)npix) ;
-<a name="l02017"></a>02017     hi_n = (int) (hiReject / 100. * (<span class="keywordtype">float</span>)npix) ;
-<a name="l02018"></a>02018     pix_sum = 0. ;
-<a name="l02019"></a>02019     sqr_sum = 0. ;
-<a name="l02020"></a>02020     n = 0 ;
-<a name="l02021"></a>02021     <span class="keywordflow">for</span> ( i = lo_n ; i <= npix - hi_n ; i++ )
-<a name="l02022"></a>02022     {
-<a name="l02023"></a>02023         pix_sum += (double)pix_array[i] ;
-<a name="l02024"></a>02024         sqr_sum += ((double)pix_array[i] * (<span class="keywordtype">double</span>)pix_array[i]) ;
-<a name="l02025"></a>02025         n++ ;
-<a name="l02026"></a>02026     }
-<a name="l02027"></a>02027 
-<a name="l02028"></a>02028     <span class="keywordflow">if</span> ( n == 0 )
-<a name="l02029"></a>02029     {
-<a name="l02030"></a>02030         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"number of clean pixels is zero!"</span>) ;
-<a name="l02031"></a>02031         cpl_free(retstats) ;
-<a name="l02032"></a>02032         cpl_free(pix_array) ;
-<a name="l02033"></a>02033         <span class="keywordflow">return</span> NULL ;
-<a name="l02034"></a>02034     }
-<a name="l02035"></a>02035     retstats -> npix = n ;
-<a name="l02036"></a>02036     pix_sum /= (double) n ;
-<a name="l02037"></a>02037     sqr_sum /= (double) n ;
-<a name="l02038"></a>02038     retstats -> cleanstdev = (float)sqrt(sqr_sum - pix_sum * pix_sum) ;
-<a name="l02039"></a>02039     cpl_free (pix_array) ;
-<a name="l02040"></a>02040     <span class="keywordflow">return</span> retstats ;
-<a name="l02041"></a>02041 }
-<a name="l02042"></a>02042 
-<a name="l02043"></a>02043 
-<a name="l02044"></a>02044 
-<a name="l02053"></a>02053 cpl_image * sinfo_new_normalize_to_central_pixel ( cpl_image * image )
-<a name="l02054"></a>02054 {
-<a name="l02055"></a>02055     <span class="keywordtype">int</span> col=0;
-<a name="l02056"></a>02056     <span class="keywordtype">int</span> row=0;
-<a name="l02057"></a>02057     <span class="keywordtype">int</span> i=0;
-<a name="l02058"></a>02058     <span class="keywordtype">int</span> n=0;
-<a name="l02059"></a>02059     <span class="keywordtype">float</span>* array=NULL ;
-<a name="l02060"></a>02060     <span class="keywordtype">float</span> divisor=0;
-<a name="l02061"></a>02061     cpl_image * retImage=NULL;
-<a name="l02062"></a>02062     <span class="keywordtype">int</span> ilx=0;
-<a name="l02063"></a>02063     <span class="keywordtype">int</span> ily=0;
-<a name="l02064"></a>02064     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02065"></a>02065     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02066"></a>02066 
-<a name="l02067"></a>02067     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l02068"></a>02068     {
-<a name="l02069"></a>02069         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;
-<a name="l02070"></a>02070         <span class="keywordflow">return</span> NULL ;
-<a name="l02071"></a>02071     }
-<a name="l02072"></a>02072     ilx=cpl_image_get_size_x(image);
-<a name="l02073"></a>02073     ily=cpl_image_get_size_y(image);
-<a name="l02074"></a>02074     pidata=cpl_image_get_data_float(image);
-<a name="l02075"></a>02075 
-<a name="l02076"></a>02076     retImage = cpl_image_duplicate(image) ;
-<a name="l02077"></a>02077     podata=cpl_image_get_data_float(retImage);
-<a name="l02078"></a>02078 
-<a name="l02079"></a>02079     n = 0 ;
-<a name="l02080"></a>02080     <span class="comment">/* go through the central two image rows and store</span>
-<a name="l02081"></a>02081 <span class="comment">       the values in an array */</span>
-<a name="l02082"></a>02082     array=cpl_calloc(2*ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02083"></a>02083 
-<a name="l02084"></a>02084     <span class="keywordflow">for</span> ( row = ily/2 ; row < ily/2+1 ; row++ )
-<a name="l02085"></a>02085     {
-<a name="l02086"></a>02086         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02087"></a>02087         {
-<a name="l02088"></a>02088             <span class="keywordflow">if</span> ( !isnan(pidata[col+ilx*row]) )
-<a name="l02089"></a>02089             {
-<a name="l02090"></a>02090                 array[n] = pidata[col+ilx*row] ;
-<a name="l02091"></a>02091                 n++ ;
-<a name="l02092"></a>02092             }
-<a name="l02093"></a>02093         }
-<a name="l02094"></a>02094     }
-<a name="l02095"></a>02095     <span class="comment">/* compute the sinfo_median of the central 2 spectral</span>
-<a name="l02096"></a>02096 <span class="comment">       values of all spatial pixels*/</span>
-<a name="l02097"></a>02097     <span class="keywordflow">if</span> ( isnan(divisor = sinfo_new_median(array, n) ) )
-<a name="l02098"></a>02098     {
-<a name="l02099"></a>02099         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no sinfo_median possible!"</span>) ;
-<a name="l02100"></a>02100         <span class="keywordflow">return</span> NULL ;
-<a name="l02101"></a>02101     }
-<a name="l02102"></a>02102     <span class="keywordflow">if</span> ( 0 == divisor )
-<a name="l02103"></a>02103     {
-<a name="l02104"></a>02104         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot divide by 0"</span>) ;
-<a name="l02105"></a>02105         <span class="keywordflow">return</span> NULL ;
-<a name="l02106"></a>02106     }
-<a name="l02107"></a>02107 
-<a name="l02108"></a>02108     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l02109"></a>02109     {
-<a name="l02110"></a>02110         <span class="keywordflow">if</span> ( isnan(pidata[i]) )
-<a name="l02111"></a>02111         {
-<a name="l02112"></a>02112             podata[i] = ZERO ;
-<a name="l02113"></a>02113         }
-<a name="l02114"></a>02114         <span class="keywordflow">else</span>
-<a name="l02115"></a>02115         {
-<a name="l02116"></a>02116             podata[i] = pidata[i]/divisor ;
-<a name="l02117"></a>02117         }
-<a name="l02118"></a>02118     }
-<a name="l02119"></a>02119     cpl_free(array);
-<a name="l02120"></a>02120     <span class="keywordflow">return</span> retImage ;
-<a name="l02121"></a>02121 }
-<a name="l02122"></a>02122 
-<a name="l02123"></a>02123 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02152"></a>02152 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02153"></a>02153 
-<a name="l02154"></a>02154 cpl_image *
-<a name="l02155"></a>02155 sinfo_new_mpe_shift_image(
-<a name="l02156"></a>02156     cpl_image    *    image_in,
-<a name="l02157"></a>02157     <span class="keywordtype">double</span>           shift_x,
-<a name="l02158"></a>02158     <span class="keywordtype">double</span>           shift_y,
-<a name="l02159"></a>02159     <span class="keywordtype">double</span>       *   interp_kernel)
-<a name="l02160"></a>02160 {
-<a name="l02161"></a>02161     cpl_image    *       shifted=NULL ;
-<a name="l02162"></a>02162     pixelvalue  *       first_pass=NULL ;
-<a name="l02163"></a>02163     pixelvalue  *       second_pass=NULL ;
-<a name="l02164"></a>02164     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;
-<a name="l02165"></a>02165     <span class="keywordtype">int</span>          i=0, j=0 ;
-<a name="l02166"></a>02166     <span class="keywordtype">double</span>           fx=0, fy=0 ;
-<a name="l02167"></a>02167     <span class="keywordtype">double</span>           rx=0, ry=0 ;
-<a name="l02168"></a>02168     <span class="keywordtype">int</span>             px=0, py=0 ;
-<a name="l02169"></a>02169     <span class="keywordtype">int</span>             tabx=0, taby=0 ;
-<a name="l02170"></a>02170     <span class="keywordtype">double</span>           value=0 ;
-<a name="l02171"></a>02171     <span class="keywordtype">size_t</span>          pos ;
-<a name="l02172"></a>02172     <span class="keyword">register</span> pixelvalue     *   pix ;
-<a name="l02173"></a>02173     <span class="keyword">register</span> pixelvalue     *   pixint ;
-<a name="l02174"></a>02174     <span class="keywordtype">int</span>             mid=0;
-<a name="l02175"></a>02175     <span class="keywordtype">double</span>          norm=0 ;
-<a name="l02176"></a>02176     <span class="keywordtype">double</span>       *      ker=NULL ;
-<a name="l02177"></a>02177     <span class="keywordtype">int</span>                         freeKernel = 1 ;
-<a name="l02178"></a>02178 
-<a name="l02179"></a>02179     <span class="keywordtype">int</span> ilx=0;
-<a name="l02180"></a>02180     <span class="keywordtype">int</span> ily=0;
-<a name="l02181"></a>02181     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02182"></a>02182     <span class="keywordtype">float</span>* psdata=NULL;
-<a name="l02183"></a>02183 
-<a name="l02184"></a>02184 
-<a name="l02185"></a>02185     <span class="comment">/* error handling: test entries */</span>
-<a name="l02186"></a>02186     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l02187"></a>02187 
-<a name="l02188"></a>02188     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span>
-<a name="l02189"></a>02189     <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))
-<a name="l02190"></a>02190       <span class="keywordflow">return</span> cpl_image_duplicate(image_in) ;
-<a name="l02191"></a>02191     ilx=cpl_image_get_size_x(image_in);
-<a name="l02192"></a>02192     ily=cpl_image_get_size_y(image_in);
-<a name="l02193"></a>02193     pidata=cpl_image_get_data_float(image_in);
-<a name="l02194"></a>02194 
-<a name="l02195"></a>02195 
-<a name="l02196"></a>02196         <span class="comment">/* See if a kernel needs to be generated */</span>
-<a name="l02197"></a>02197     <span class="keywordflow">if</span> (interp_kernel == NULL) {
-<a name="l02198"></a>02198         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;
-<a name="l02199"></a>02199         <span class="keywordflow">if</span> (ker == NULL) {
-<a name="l02200"></a>02200             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure:aborting resampling"</span>) ;
-<a name="l02201"></a>02201             <span class="keywordflow">return</span> NULL ;
-<a name="l02202"></a>02202         }
-<a name="l02203"></a>02203     } <span class="keywordflow">else</span> {
-<a name="l02204"></a>02204         ker = interp_kernel ;
-<a name="l02205"></a>02205         freeKernel = 0 ;
-<a name="l02206"></a>02206     }
-<a name="l02207"></a>02207 
-<a name="l02208"></a>02208     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;
-<a name="l02209"></a>02209     first_pass = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l02210"></a>02210     shifted = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT) ;
-<a name="l02211"></a>02211     psdata=cpl_image_get_data_float(shifted);
-<a name="l02212"></a>02212 
-<a name="l02213"></a>02213     second_pass = psdata ;
-<a name="l02214"></a>02214 
-<a name="l02215"></a>02215     pix = pidata ;
-<a name="l02216"></a>02216     <span class="keywordflow">if</span> ( ilx != 1 )
-<a name="l02217"></a>02217     {
-<a name="l02218"></a>02218     <span class="keywordflow">for</span> (j=0 ; j<ily ; j++)
-<a name="l02219"></a>02219         {
-<a name="l02220"></a>02220          <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {
-<a name="l02221"></a>02221            fx = (double)i-shift_x ;
-<a name="l02222"></a>02222            px = (int)fx ;
-<a name="l02223"></a>02223            rx = fx - (double)px ;
-<a name="l02224"></a>02224            pos = px + j * ilx ;
-<a name="l02225"></a>02225 
-<a name="l02226"></a>02226            <span class="keywordflow">if</span> ((px>1) && (px<(ilx-2)))
-<a name="l02227"></a>02227            {
-<a name="l02228"></a>02228            tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;
-<a name="l02229"></a>02229            <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span>
-<a name="l02230"></a>02230            <span class="keywordflow">if</span> (isnan(pix[pos]))
-<a name="l02231"></a>02231                {
-<a name="l02232"></a>02232                value = ZERO ;
-<a name="l02233"></a>02233                }
-<a name="l02234"></a>02234            <span class="keywordflow">else</span>
-<a name="l02235"></a>02235                {
-<a name="l02236"></a>02236                <span class="keywordflow">if</span> (isnan(pix[pos-1]))
-<a name="l02237"></a>02237                {
-<a name="l02238"></a>02238                pix[pos-1] = 0. ;
-<a name="l02239"></a>02239                }
-<a name="l02240"></a>02240                <span class="keywordflow">if</span> (isnan(pix[pos+1]))
-<a name="l02241"></a>02241                {
-<a name="l02242"></a>02242                pix[pos+1] = 0. ;
-<a name="l02243"></a>02243                }
-<a name="l02244"></a>02244                <span class="keywordflow">if</span> (isnan(pix[pos+2]))
-<a name="l02245"></a>02245                {
-<a name="l02246"></a>02246                pix[pos+2] = 0. ;
-<a name="l02247"></a>02247                }
-<a name="l02248"></a>02248 
-<a name="l02249"></a>02249                <span class="comment">/*</span>
-<a name="l02250"></a>02250 <span class="comment">            * Sum up over 4 closest pixel values,</span>
-<a name="l02251"></a>02251 <span class="comment">            * weighted by interpolation kernel values</span>
-<a name="l02252"></a>02252 <span class="comment">            */</span>
-<a name="l02253"></a>02253                value =     (double)pix[pos-1] * ker[mid+tabx] +
-<a name="l02254"></a>02254                (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +
-<a name="l02255"></a>02255                (double)pix[pos+1] * ker[mid-tabx] +
-<a name="l02256"></a>02256                (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;
-<a name="l02257"></a>02257                <span class="comment">/*</span>
-<a name="l02258"></a>02258 <span class="comment">            * Also sum up interpolation kernel coefficients</span>
-<a name="l02259"></a>02259 <span class="comment">            * for further normalization</span>
-<a name="l02260"></a>02260 <span class="comment">            */</span>
-<a name="l02261"></a>02261                norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +
-<a name="l02262"></a>02262                (<span class="keywordtype">double</span>)ker[tabx] +
-<a name="l02263"></a>02263                (<span class="keywordtype">double</span>)ker[mid-tabx] +
-<a name="l02264"></a>02264                (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;
-<a name="l02265"></a>02265                if (fabs(norm) > 1e-4) {
-<a name="l02266"></a>02266                value /= norm ;
-<a name="l02267"></a>02267                }
-<a name="l02268"></a>02268                }
-<a name="l02269"></a>02269            } <span class="keywordflow">else</span> {
-<a name="l02270"></a>02270            value = ZERO ;
-<a name="l02271"></a>02271            }
-<a name="l02272"></a>02272            <span class="comment">/*</span>
-<a name="l02273"></a>02273 <span class="comment">        * There may be a problem of rounding here if pixelvalue</span>
-<a name="l02274"></a>02274 <span class="comment">        * has not enough bits to sustain the accuracy.</span>
-<a name="l02275"></a>02275 <span class="comment">        */</span>
-<a name="l02276"></a>02276            <span class="keywordflow">if</span> ( isnan(value) )
-<a name="l02277"></a>02277            {
-<a name="l02278"></a>02278            first_pass[i+j*ilx] = ZERO ;
-<a name="l02279"></a>02279            }
-<a name="l02280"></a>02280            <span class="keywordflow">else</span>
-<a name="l02281"></a>02281            {
-<a name="l02282"></a>02282            first_pass[i+j*ilx] = (pixelvalue)value ;
-<a name="l02283"></a>02283            }
-<a name="l02284"></a>02284          }
-<a name="l02285"></a>02285         }
-<a name="l02286"></a>02286     }
-<a name="l02287"></a>02287     <span class="keywordflow">else</span>
-<a name="l02288"></a>02288     {
-<a name="l02289"></a>02289     memcpy(first_pass,pix,ily*<span class="keyword">sizeof</span>(pixelvalue));
-<a name="l02290"></a>02290     }
-<a name="l02291"></a>02291 
-<a name="l02292"></a>02292     pixint = first_pass ;
-<a name="l02293"></a>02293     <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {
-<a name="l02294"></a>02294         <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {
-<a name="l02295"></a>02295             fy = (double)j - shift_y ;
-<a name="l02296"></a>02296             py = (int)fy ;
-<a name="l02297"></a>02297             ry = fy - (double)py ;
-<a name="l02298"></a>02298             pos = i + py * ilx ;
-<a name="l02299"></a>02299 
-<a name="l02300"></a>02300             taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;
-<a name="l02301"></a>02301 
-<a name="l02302"></a>02302             <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {
-<a name="l02303"></a>02303                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span>
-<a name="l02304"></a>02304                 <span class="keywordflow">if</span> (isnan(pixint[pos]) && ilx != 1 )
-<a name="l02305"></a>02305                 {
-<a name="l02306"></a>02306                     value = ZERO ;
-<a name="l02307"></a>02307                 }
-<a name="l02308"></a>02308                 <span class="keywordflow">else</span>
-<a name="l02309"></a>02309                 {
-<a name="l02310"></a>02310                     <span class="keywordflow">if</span> (isnan(pixint[pos-ilx]))
-<a name="l02311"></a>02311                     {
-<a name="l02312"></a>02312                         pixint[pos-ilx] = 0. ;
-<a name="l02313"></a>02313                     }
-<a name="l02314"></a>02314                     <span class="keywordflow">if</span> (isnan(pixint[pos+ilx]))
-<a name="l02315"></a>02315                     {
-<a name="l02316"></a>02316                         pixint[pos+ilx] = 0. ;
-<a name="l02317"></a>02317                     }
-<a name="l02318"></a>02318                     <span class="keywordflow">if</span> (isnan(pixint[pos+2*ilx]))
-<a name="l02319"></a>02319                     {
-<a name="l02320"></a>02320                         pixint[pos+2*ilx] = 0. ;
-<a name="l02321"></a>02321                     }
-<a name="l02322"></a>02322                     <span class="comment">/*</span>
-<a name="l02323"></a>02323 <span class="comment">                     * Sum up over 4 closest pixel values,</span>
-<a name="l02324"></a>02324 <span class="comment">                     * weighted by interpolation kernel values</span>
-<a name="l02325"></a>02325 <span class="comment">                     */</span>
-<a name="l02326"></a>02326                     value = (double)pixint[pos-ilx] * ker[mid+taby] +
-<a name="l02327"></a>02327                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +
-<a name="l02328"></a>02328                             (double)pixint[pos+ilx] * ker[mid-taby] +
-<a name="l02329"></a>02329                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];
-<a name="l02330"></a>02330                     <span class="comment">/*</span>
-<a name="l02331"></a>02331 <span class="comment">                     * Also sum up interpolation kernel coefficients</span>
-<a name="l02332"></a>02332 <span class="comment">                     * for further normalization</span>
-<a name="l02333"></a>02333 <span class="comment">                     */</span>
-<a name="l02334"></a>02334                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +
-<a name="l02335"></a>02335                                 (<span class="keywordtype">double</span>)ker[taby] +
-<a name="l02336"></a>02336                                 (<span class="keywordtype">double</span>)ker[mid-taby] +
-<a name="l02337"></a>02337                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;
-<a name="l02338"></a>02338 
-<a name="l02339"></a>02339                     if (fabs(norm) > 1e-4) {
-<a name="l02340"></a>02340                         value /= norm ;
-<a name="l02341"></a>02341                     }
-<a name="l02342"></a>02342                 }
-<a name="l02343"></a>02343             } <span class="keywordflow">else</span> {
-<a name="l02344"></a>02344                 value = ZERO ;
-<a name="l02345"></a>02345             }
-<a name="l02346"></a>02346             <span class="keywordflow">if</span> (isnan(value))
-<a name="l02347"></a>02347             {
-<a name="l02348"></a>02348                 second_pass[i+j*ilx] = ZERO ;
-<a name="l02349"></a>02349             }
-<a name="l02350"></a>02350             <span class="keywordflow">else</span>
-<a name="l02351"></a>02351             {
-<a name="l02352"></a>02352                 second_pass[i+j*ilx] = (pixelvalue)value ;
-<a name="l02353"></a>02353             }
-<a name="l02354"></a>02354         }
-<a name="l02355"></a>02355     }
-<a name="l02356"></a>02356 
-<a name="l02357"></a>02357     cpl_free(first_pass) ;
-<a name="l02358"></a>02358     <span class="keywordflow">if</span> (freeKernel)
-<a name="l02359"></a>02359         cpl_free(ker) ;
-<a name="l02360"></a>02360     <span class="keywordflow">return</span> shifted ;
-<a name="l02361"></a>02361 }
-<a name="l02362"></a>02362 
-<a name="l02363"></a>02363 
-<a name="l02364"></a>02364 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02395"></a>02395 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02396"></a>02396 
-<a name="l02397"></a>02397 <span class="keywordtype">void</span>
-<a name="l02398"></a>02398 sinfo_new_shift_image_in_cube(
-<a name="l02399"></a>02399     cpl_image     *   image_in,
-<a name="l02400"></a>02400     <span class="keywordtype">double</span>           shift_x,
-<a name="l02401"></a>02401     <span class="keywordtype">double</span>           shift_y,
-<a name="l02402"></a>02402     <span class="keywordtype">double</span>       *   interp_kernel,
-<a name="l02403"></a>02403     cpl_image     *   shifted,
-<a name="l02404"></a>02404     pixelvalue   *   first_pass)
-<a name="l02405"></a>02405 {
-<a name="l02406"></a>02406     pixelvalue  *       second_pass=NULL ;
-<a name="l02407"></a>02407     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;
-<a name="l02408"></a>02408     <span class="keywordtype">int</span>          i=0, j=0 ;
-<a name="l02409"></a>02409     <span class="keywordtype">double</span>           fx=0, fy=0 ;
-<a name="l02410"></a>02410     <span class="keywordtype">double</span>           rx=0, ry=0 ;
-<a name="l02411"></a>02411     <span class="keywordtype">int</span>             px=0, py=0 ;
-<a name="l02412"></a>02412     <span class="keywordtype">int</span>             tabx=0, taby=0 ;
-<a name="l02413"></a>02413     <span class="keywordtype">double</span>           value=0 ;
-<a name="l02414"></a>02414     <span class="keywordtype">size_t</span>          pos ;
-<a name="l02415"></a>02415     <span class="keyword">register</span> pixelvalue     *   pix ;
-<a name="l02416"></a>02416     <span class="keyword">register</span> pixelvalue     *   pixint ;
-<a name="l02417"></a>02417     <span class="keywordtype">int</span>             mid=0;
-<a name="l02418"></a>02418     <span class="keywordtype">double</span>          norm=0 ;
-<a name="l02419"></a>02419     <span class="keywordtype">double</span>       *      ker=NULL ;
-<a name="l02420"></a>02420     <span class="keywordtype">int</span>                         freeKernel = 1 ;
-<a name="l02421"></a>02421 
-<a name="l02422"></a>02422     <span class="keywordtype">int</span> ilx=0;
-<a name="l02423"></a>02423     <span class="keywordtype">int</span> ily=0;
-<a name="l02424"></a>02424     <span class="keywordtype">int</span> slx=0;
-<a name="l02425"></a>02425     <span class="keywordtype">int</span> sly=0;
-<a name="l02426"></a>02426     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02427"></a>02427     <span class="keywordtype">float</span>* psdata=NULL;
-<a name="l02428"></a>02428 
-<a name="l02429"></a>02429     <span class="comment">/* error handling: test entries */</span>
-<a name="l02430"></a>02430         <span class="keywordflow">if</span> (image_in==NULL) shifted = NULL ;
-<a name="l02431"></a>02431         pidata=cpl_image_get_data_float(image_in);
-<a name="l02432"></a>02432         ilx=cpl_image_get_size_x(image_in);
-<a name="l02433"></a>02433         ily=cpl_image_get_size_y(image_in);
-<a name="l02434"></a>02434 
-<a name="l02435"></a>02435         shifted=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l02436"></a>02436         slx=ilx;
-<a name="l02437"></a>02437         sly=ily;
-<a name="l02438"></a>02438 
-<a name="l02439"></a>02439         psdata=cpl_image_get_data_float(shifted);
-<a name="l02440"></a>02440 
-<a name="l02441"></a>02441         <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span>
-<a name="l02442"></a>02442         <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))
-<a name="l02443"></a>02443                 memcpy(psdata,pidata, (<span class="keywordtype">size_t</span>) slx*sly * <span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l02444"></a>02444 
-<a name="l02445"></a>02445         <span class="comment">/* See if a kernel needs to be generated */</span>
-<a name="l02446"></a>02446     <span class="keywordflow">if</span> (interp_kernel == NULL) {
-<a name="l02447"></a>02447         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;
-<a name="l02448"></a>02448         <span class="keywordflow">if</span> (ker == NULL) {
-<a name="l02449"></a>02449             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure:aborting resampling"</span>) ;
-<a name="l02450"></a>02450             shifted = NULL ;
-<a name="l02451"></a>02451         }
-<a name="l02452"></a>02452     } <span class="keywordflow">else</span> {
-<a name="l02453"></a>02453         ker = interp_kernel ;
-<a name="l02454"></a>02454         freeKernel = 0 ;
-<a name="l02455"></a>02455     }
-<a name="l02456"></a>02456 
-<a name="l02457"></a>02457     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;
-<a name="l02458"></a>02458     second_pass = psdata ;
-<a name="l02459"></a>02459 
-<a name="l02460"></a>02460     pix = pidata ;
-<a name="l02461"></a>02461     <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {
-<a name="l02462"></a>02462         <span class="keywordflow">for</span> (i=1 ; i<ilx-2 ; i++) {
-<a name="l02463"></a>02463             fx = (double)i-shift_x ;
-<a name="l02464"></a>02464             px = (int)fx ;
-<a name="l02465"></a>02465             rx = fx - (double)px ;
-<a name="l02466"></a>02466 
-<a name="l02467"></a>02467             pos = px + j * ilx ;
-<a name="l02468"></a>02468 
-<a name="l02469"></a>02469             <span class="keywordflow">if</span> ((px>1) && (px<(ilx-2))) {
-<a name="l02470"></a>02470                 tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;
-<a name="l02471"></a>02471                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span>
-<a name="l02472"></a>02472                 <span class="keywordflow">if</span> (isnan(pix[pos]))
-<a name="l02473"></a>02473                 {
-<a name="l02474"></a>02474                     value = ZERO ;
-<a name="l02475"></a>02475                 }
-<a name="l02476"></a>02476                 <span class="keywordflow">else</span>
-<a name="l02477"></a>02477                 {
-<a name="l02478"></a>02478                     <span class="keywordflow">if</span> (isnan(pix[pos-1]))
-<a name="l02479"></a>02479                     {
-<a name="l02480"></a>02480                         pix[pos-1] = 0. ;
-<a name="l02481"></a>02481                     }
-<a name="l02482"></a>02482                     <span class="keywordflow">if</span> (isnan(pix[pos+1]))
-<a name="l02483"></a>02483                     {
-<a name="l02484"></a>02484                         pix[pos+1] = 0. ;
-<a name="l02485"></a>02485                     }
-<a name="l02486"></a>02486                     <span class="keywordflow">if</span> (isnan(pix[pos+2]))
-<a name="l02487"></a>02487                     {
-<a name="l02488"></a>02488                         pix[pos+2] = 0. ;
-<a name="l02489"></a>02489                     }
-<a name="l02490"></a>02490 
-<a name="l02491"></a>02491                     <span class="comment">/*</span>
-<a name="l02492"></a>02492 <span class="comment">                     * Sum up over 4 closest pixel values,</span>
-<a name="l02493"></a>02493 <span class="comment">                     * weighted by interpolation kernel values</span>
-<a name="l02494"></a>02494 <span class="comment">                     */</span>
-<a name="l02495"></a>02495                     value =     (double)pix[pos-1] * ker[mid+tabx] +
-<a name="l02496"></a>02496                                 (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +
-<a name="l02497"></a>02497                                 (double)pix[pos+1] * ker[mid-tabx] +
-<a name="l02498"></a>02498                                 (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;
-<a name="l02499"></a>02499                     <span class="comment">/*</span>
-<a name="l02500"></a>02500 <span class="comment">                     * Also sum up interpolation kernel coefficients</span>
-<a name="l02501"></a>02501 <span class="comment">                     * for further normalization</span>
-<a name="l02502"></a>02502 <span class="comment">                     */</span>
-<a name="l02503"></a>02503                     norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +
-<a name="l02504"></a>02504                                 (<span class="keywordtype">double</span>)ker[tabx] +
-<a name="l02505"></a>02505                                 (<span class="keywordtype">double</span>)ker[mid-tabx] +
-<a name="l02506"></a>02506                                 (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;
-<a name="l02507"></a>02507                     if (fabs(norm) > 1e-4) {
-<a name="l02508"></a>02508                         value /= norm ;
-<a name="l02509"></a>02509                     }
-<a name="l02510"></a>02510                 }
-<a name="l02511"></a>02511             } <span class="keywordflow">else</span> {
-<a name="l02512"></a>02512                 value = 0.0 ;
-<a name="l02513"></a>02513             }
-<a name="l02514"></a>02514             <span class="comment">/*</span>
-<a name="l02515"></a>02515 <span class="comment">             * There may be a problem of rounding here if pixelvalue</span>
-<a name="l02516"></a>02516 <span class="comment">             * has not enough bits to sustain the accuracy.</span>
-<a name="l02517"></a>02517 <span class="comment">             */</span>
-<a name="l02518"></a>02518             <span class="keywordflow">if</span> ( isnan(value) )
-<a name="l02519"></a>02519             {
-<a name="l02520"></a>02520                 first_pass[i+j*ilx] = ZERO ;
-<a name="l02521"></a>02521             }
-<a name="l02522"></a>02522             <span class="keywordflow">else</span>
-<a name="l02523"></a>02523             {
-<a name="l02524"></a>02524                 first_pass[i+j*ilx] = (pixelvalue)value ;
-<a name="l02525"></a>02525             }
-<a name="l02526"></a>02526         }
-<a name="l02527"></a>02527     }
-<a name="l02528"></a>02528     pixint = first_pass ;
-<a name="l02529"></a>02529     <span class="keywordflow">for</span> (i=0 ; i< ilx ; i++) {
-<a name="l02530"></a>02530         <span class="keywordflow">for</span> (j=1 ; j< ily-2 ; j++) {
-<a name="l02531"></a>02531             fy = (double)j - shift_y ;
-<a name="l02532"></a>02532             py = (int)fy ;
-<a name="l02533"></a>02533             ry = fy - (double)py ;
-<a name="l02534"></a>02534             pos = i + py * ilx ;
-<a name="l02535"></a>02535 
-<a name="l02536"></a>02536             taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;
-<a name="l02537"></a>02537 
-<a name="l02538"></a>02538             <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {
-<a name="l02539"></a>02539                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span>
-<a name="l02540"></a>02540                 <span class="keywordflow">if</span> (isnan(pixint[pos]))
-<a name="l02541"></a>02541                 {
-<a name="l02542"></a>02542                     value = ZERO ;
-<a name="l02543"></a>02543                 }
-<a name="l02544"></a>02544                 <span class="keywordflow">else</span>
-<a name="l02545"></a>02545                 {
-<a name="l02546"></a>02546                     <span class="keywordflow">if</span> (isnan(pixint[pos-ilx]))
-<a name="l02547"></a>02547                     {
-<a name="l02548"></a>02548                         pixint[pos-ilx] = 0. ;
-<a name="l02549"></a>02549                     }
-<a name="l02550"></a>02550                     <span class="keywordflow">if</span> (isnan(pixint[pos+ilx]))
-<a name="l02551"></a>02551                     {
-<a name="l02552"></a>02552                         pixint[pos+ilx] = 0. ;
-<a name="l02553"></a>02553                     }
-<a name="l02554"></a>02554                     <span class="keywordflow">if</span> (isnan(pixint[pos+2*ilx]))
-<a name="l02555"></a>02555                     {
-<a name="l02556"></a>02556                         pixint[pos+2*ilx] = 0. ;
-<a name="l02557"></a>02557                     }
-<a name="l02558"></a>02558                     <span class="comment">/*</span>
-<a name="l02559"></a>02559 <span class="comment">                     * Sum up over 4 closest pixel values,</span>
-<a name="l02560"></a>02560 <span class="comment">                     * weighted by interpolation kernel values</span>
-<a name="l02561"></a>02561 <span class="comment">                     */</span>
-<a name="l02562"></a>02562                     value = (double)pixint[pos-ilx] * ker[mid+taby] +
-<a name="l02563"></a>02563                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +
-<a name="l02564"></a>02564                             (double)pixint[pos+ilx] * ker[mid-taby] +
-<a name="l02565"></a>02565                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];
-<a name="l02566"></a>02566                     <span class="comment">/*</span>
-<a name="l02567"></a>02567 <span class="comment">                     * Also sum up interpolation kernel coefficients</span>
-<a name="l02568"></a>02568 <span class="comment">                     * for further normalization</span>
-<a name="l02569"></a>02569 <span class="comment">                     */</span>
-<a name="l02570"></a>02570                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +
-<a name="l02571"></a>02571                                 (<span class="keywordtype">double</span>)ker[taby] +
-<a name="l02572"></a>02572                                 (<span class="keywordtype">double</span>)ker[mid-taby] +
-<a name="l02573"></a>02573                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;
-<a name="l02574"></a>02574 
-<a name="l02575"></a>02575                     if (fabs(norm) > 1e-4) {
-<a name="l02576"></a>02576                         value /= norm ;
-<a name="l02577"></a>02577                     }
-<a name="l02578"></a>02578                 }
-<a name="l02579"></a>02579             } <span class="keywordflow">else</span> {
-<a name="l02580"></a>02580           <span class="comment">/* value = 0.0 ; AMo: This affect slitlet #1 */</span>
-<a name="l02581"></a>02581             }
-<a name="l02582"></a>02582             <span class="keywordflow">if</span> (isnan(value))
-<a name="l02583"></a>02583             {
-<a name="l02584"></a>02584                 second_pass[i+j*ilx] = ZERO ;
-<a name="l02585"></a>02585             }
-<a name="l02586"></a>02586             <span class="keywordflow">else</span>
-<a name="l02587"></a>02587             {
-<a name="l02588"></a>02588                 second_pass[i+j*ilx] = (pixelvalue)value ;
-<a name="l02589"></a>02589             }
-<a name="l02590"></a>02590         }
-<a name="l02591"></a>02591     }
-<a name="l02592"></a>02592 
-<a name="l02593"></a>02593     <span class="keywordflow">if</span> (freeKernel)
-<a name="l02594"></a>02594         cpl_free(ker) ;
-<a name="l02595"></a>02595 }
-<a name="l02596"></a>02596 
-<a name="l02597"></a>02597 <span class="comment">/* function to delete the image statistics within python */</span>
-<a name="l02598"></a>02598 <span class="keywordtype">void</span> sinfo_new_del_Stats( Stats * st)
-<a name="l02599"></a>02599 {
-<a name="l02600"></a>02600     cpl_free (st) ;
-<a name="l02601"></a>02601 }
-<a name="l02602"></a>02602 
-<a name="l02609"></a>02609 cpl_image *
-<a name="l02610"></a>02610 sinfo_new_combine_masks ( cpl_image * firstMask, cpl_image * secondMask )
-<a name="l02611"></a>02611 {
-<a name="l02612"></a>02612     cpl_image * retMask=NULL ;
-<a name="l02613"></a>02613     <span class="keywordtype">int</span> n=0 ;
-<a name="l02614"></a>02614     <span class="keywordtype">int</span> olx=0;
-<a name="l02615"></a>02615     <span class="keywordtype">int</span> oly=0;
-<a name="l02616"></a>02616     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02617"></a>02617     <span class="keywordtype">float</span>* pm1data=NULL;
-<a name="l02618"></a>02618     <span class="keywordtype">float</span>* pm2data=NULL;
-<a name="l02619"></a>02619 
-<a name="l02620"></a>02620     <span class="keywordflow">if</span> ( firstMask == NULL || secondMask == NULL )
-<a name="l02621"></a>02621     {
-<a name="l02622"></a>02622         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input mask image given!"</span>) ;
-<a name="l02623"></a>02623         <span class="keywordflow">return</span> NULL ;
-<a name="l02624"></a>02624     }
-<a name="l02625"></a>02625     retMask = cpl_image_duplicate (firstMask) ;
-<a name="l02626"></a>02626     podata = cpl_image_get_data_float(retMask);
-<a name="l02627"></a>02627     pm1data = cpl_image_get_data_float(firstMask);
-<a name="l02628"></a>02628     pm2data = cpl_image_get_data_float(secondMask);
-<a name="l02629"></a>02629     olx=cpl_image_get_size_x(retMask);
-<a name="l02630"></a>02630     oly=cpl_image_get_size_y(retMask);
-<a name="l02631"></a>02631 
-<a name="l02632"></a>02632     <span class="keywordflow">for</span> ( n = 0 ; n < (int) olx*oly ; n++ )
-<a name="l02633"></a>02633     {
-<a name="l02634"></a>02634        <span class="keywordflow">if</span> ( podata[n] == 0. || pm2data[n] == 0. )
-<a name="l02635"></a>02635        {
-<a name="l02636"></a>02636            podata[n] = 0. ;
-<a name="l02637"></a>02637        }
-<a name="l02638"></a>02638        <span class="keywordflow">else</span>
-<a name="l02639"></a>02639        {
-<a name="l02640"></a>02640            podata[n] = 1. ;
-<a name="l02641"></a>02641        }
-<a name="l02642"></a>02642     }
-<a name="l02643"></a>02643     <span class="keywordflow">return</span> retMask ;
-<a name="l02644"></a>02644 }
-<a name="l02645"></a>02645 
-<a name="l02654"></a>02654 cpl_image * sinfo_new_slice_cube (cpl_imagelist * cube, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y )
-<a name="l02655"></a>02655 {
-<a name="l02656"></a>02656     cpl_image * retImage=NULL ;
-<a name="l02657"></a>02657     <span class="keywordtype">int</span> col=0, row=0, z=0 ;
-<a name="l02658"></a>02658     <span class="keywordtype">int</span> inp=0;
-<a name="l02659"></a>02659     <span class="keywordtype">int</span> ilx=0;
-<a name="l02660"></a>02660     <span class="keywordtype">int</span> ily=0;
-<a name="l02661"></a>02661     cpl_image* img=NULL;
-<a name="l02662"></a>02662     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02663"></a>02663     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02664"></a>02664 
-<a name="l02665"></a>02665     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l02666"></a>02666     {
-<a name="l02667"></a>02667         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!"</span>) ;
-<a name="l02668"></a>02668         <span class="keywordflow">return</span> NULL ;
-<a name="l02669"></a>02669     }
-<a name="l02670"></a>02670     <span class="keywordflow">if</span> ( x > 31 || y > 31 )
-<a name="l02671"></a>02671     {
-<a name="l02672"></a>02672         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong x or y values!"</span>) ;
-<a name="l02673"></a>02673     }
-<a name="l02674"></a>02674 
-<a name="l02675"></a>02675     img=cpl_imagelist_get(cube,0);
-<a name="l02676"></a>02676     ilx=cpl_image_get_size_x(img);
-<a name="l02677"></a>02677     ily=cpl_image_get_size_y(img);
-<a name="l02678"></a>02678     inp=cpl_imagelist_get_size(cube);
-<a name="l02679"></a>02679     <span class="keywordflow">if</span> ( x < 0 )
-<a name="l02680"></a>02680     {
-<a name="l02681"></a>02681         <span class="comment">/* allocate memory */</span>
-<a name="l02682"></a>02682         <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_new(ilx, inp, CPL_TYPE_FLOAT)) )
-<a name="l02683"></a>02683         {
-<a name="l02684"></a>02684             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l02685"></a>02685             <span class="keywordflow">return</span> NULL ;
-<a name="l02686"></a>02686         }
-<a name="l02687"></a>02687         podata=cpl_image_get_data_float(retImage);
-<a name="l02688"></a>02688         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02689"></a>02689         {
-<a name="l02690"></a>02690 
-<a name="l02691"></a>02691             pidata=cpl_image_get_data_float(cpl_imagelist_get(cube,z));
-<a name="l02692"></a>02692             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02693"></a>02693             {
-<a name="l02694"></a>02694                 podata[col+z*ilx] = pidata[col+y*ilx] ;
-<a name="l02695"></a>02695             }
-<a name="l02696"></a>02696         }
-<a name="l02697"></a>02697     }
-<a name="l02698"></a>02698     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( y < 0 )
-<a name="l02699"></a>02699     {
-<a name="l02700"></a>02700         <span class="comment">/* allocate memory */</span>
-<a name="l02701"></a>02701         <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_new(ily, inp,CPL_TYPE_FLOAT)) )
-<a name="l02702"></a>02702         {
-<a name="l02703"></a>02703             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l02704"></a>02704             <span class="keywordflow">return</span> NULL ;
-<a name="l02705"></a>02705         }
-<a name="l02706"></a>02706         podata=cpl_image_get_data_float(retImage);
-<a name="l02707"></a>02707 
-<a name="l02708"></a>02708         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02709"></a>02709         {
-<a name="l02710"></a>02710             pidata=cpl_image_get_data_float(cpl_imagelist_get(cube,z));
-<a name="l02711"></a>02711             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02712"></a>02712             {
-<a name="l02713"></a>02713                 podata[row+z*ily] = pidata[x+row*ily] ;
-<a name="l02714"></a>02714             }
-<a name="l02715"></a>02715         }
-<a name="l02716"></a>02716     }
-<a name="l02717"></a>02717     <span class="keywordflow">else</span>
-<a name="l02718"></a>02718     {
-<a name="l02719"></a>02719         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong input!"</span>) ;
-<a name="l02720"></a>02720         <span class="keywordflow">return</span> NULL ;
-<a name="l02721"></a>02721     }
-<a name="l02722"></a>02722     <span class="keywordflow">return</span> retImage ;
-<a name="l02723"></a>02723 }
-<a name="l02724"></a>02724 
-<a name="l02736"></a>02736 cpl_image * sinfo_new_div_images_robust ( cpl_image * im1, cpl_image * im2 )
-<a name="l02737"></a>02737 {
-<a name="l02738"></a>02738     cpl_image * retIm=NULL ;
-<a name="l02739"></a>02739     <span class="keywordtype">float</span> help=0 ;
-<a name="l02740"></a>02740     <span class="keywordtype">int</span> i=0 ;
-<a name="l02741"></a>02741     <span class="keywordtype">int</span> lx1=0;
-<a name="l02742"></a>02742     <span class="keywordtype">int</span> ly1=0;
-<a name="l02743"></a>02743     <span class="keywordtype">int</span> lx2=0;
-<a name="l02744"></a>02744     <span class="keywordtype">int</span> ly2=0;
-<a name="l02745"></a>02745 
-<a name="l02746"></a>02746     <span class="keywordtype">float</span>* p1data=NULL;
-<a name="l02747"></a>02747     <span class="keywordtype">float</span>* p2data=NULL;
-<a name="l02748"></a>02748     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02749"></a>02749 
-<a name="l02750"></a>02750     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL )
-<a name="l02751"></a>02751     {
-<a name="l02752"></a>02752         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input images given!"</span>) ;
-<a name="l02753"></a>02753         <span class="keywordflow">return</span> NULL ;
-<a name="l02754"></a>02754     }
-<a name="l02755"></a>02755     lx1=cpl_image_get_size_x(im1);
-<a name="l02756"></a>02756     ly1=cpl_image_get_size_y(im1);
-<a name="l02757"></a>02757     lx2=cpl_image_get_size_x(im2);
-<a name="l02758"></a>02758     ly2=cpl_image_get_size_y(im2);
-<a name="l02759"></a>02759     p1data=cpl_image_get_data_float(im1);
-<a name="l02760"></a>02760     p2data=cpl_image_get_data_float(im2);
-<a name="l02761"></a>02761 
-<a name="l02762"></a>02762     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )
-<a name="l02763"></a>02763     {
-<a name="l02764"></a>02764         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible!"</span>) ;
-<a name="l02765"></a>02765         <span class="keywordflow">return</span> NULL ;
-<a name="l02766"></a>02766     }
-<a name="l02767"></a>02767     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(lx1, ly1, CPL_TYPE_FLOAT)) )
-<a name="l02768"></a>02768     {
-<a name="l02769"></a>02769         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l02770"></a>02770         <span class="keywordflow">return</span> NULL ;
-<a name="l02771"></a>02771     }
-<a name="l02772"></a>02772     podata=cpl_image_get_data_float(retIm);
-<a name="l02773"></a>02773 
-<a name="l02774"></a>02774     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx2*ly2 ; i++ )
-<a name="l02775"></a>02775     {
-<a name="l02776"></a>02776         <span class="keywordflow">if</span> ( !isnan(p2data[i]) )
-<a name="l02777"></a>02777         {
-<a name="l02778"></a>02778             help = 1./p2data[i] ;
-<a name="l02779"></a>02779             <span class="keywordflow">if</span> (fabs( help )> THRESH )
-<a name="l02780"></a>02780             {
-<a name="l02781"></a>02781                help = 1. ;
-<a name="l02782"></a>02782             }
-<a name="l02783"></a>02783         }
-<a name="l02784"></a>02784         <span class="keywordflow">else</span>
-<a name="l02785"></a>02785         {
-<a name="l02786"></a>02786             help = ZERO ;
-<a name="l02787"></a>02787         }
-<a name="l02788"></a>02788         <span class="keywordflow">if</span> ( isnan(help) || isnan(p1data[i]) )
-<a name="l02789"></a>02789         {
-<a name="l02790"></a>02790             podata[i] = ZERO ;
-<a name="l02791"></a>02791         }
-<a name="l02792"></a>02792         <span class="keywordflow">else</span>
-<a name="l02793"></a>02793         {
-<a name="l02794"></a>02794             podata[i] = p1data[i] * help ;
-<a name="l02795"></a>02795         }
-<a name="l02796"></a>02796     }
-<a name="l02797"></a>02797     <span class="keywordflow">return</span> retIm ;
-<a name="l02798"></a>02798 }
-<a name="l02799"></a>02799 
-<a name="l02800"></a>02800 cpl_image * sinfo_new_null_edges ( cpl_image * image)
-<a name="l02801"></a>02801 {
-<a name="l02802"></a>02802     cpl_image * <span class="keyword">new</span>=NULL ;
-<a name="l02803"></a>02803     <span class="keywordtype">int</span> i=0,j=0 ;
-<a name="l02804"></a>02804     <span class="keywordtype">int</span> ilx=0;
-<a name="l02805"></a>02805     <span class="keywordtype">int</span> ily=0;
-<a name="l02806"></a>02806     <span class="keywordtype">int</span> olx=0;
-<a name="l02807"></a>02807     <span class="keywordtype">int</span> oly=0;
-<a name="l02808"></a>02808 
-<a name="l02809"></a>02809     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02810"></a>02810     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02811"></a>02811 
-<a name="l02812"></a>02812     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l02813"></a>02813     {
-<a name="l02814"></a>02814         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!\n"</span>) ;
-<a name="l02815"></a>02815         <span class="keywordflow">return</span> NULL ;
-<a name="l02816"></a>02816     }
-<a name="l02817"></a>02817 
-<a name="l02818"></a>02818 
-<a name="l02819"></a>02819     <span class="keyword">new</span> = cpl_image_duplicate (image) ;
-<a name="l02820"></a>02820     ilx=cpl_image_get_size_x(image);
-<a name="l02821"></a>02821     ily=cpl_image_get_size_y(image);
-<a name="l02822"></a>02822     olx=cpl_image_get_size_x(<span class="keyword">new</span>);
-<a name="l02823"></a>02823     oly=cpl_image_get_size_y(<span class="keyword">new</span>);
-<a name="l02824"></a>02824     pidata=cpl_image_get_data_float(image);
-<a name="l02825"></a>02825     podata=cpl_image_get_data_float(<span class="keyword">new</span>);
-<a name="l02826"></a>02826 
-<a name="l02827"></a>02827     <span class="keywordflow">for</span> ( i = 0 ; i < olx ; i++ )
-<a name="l02828"></a>02828     {
-<a name="l02829"></a>02829         <span class="keywordflow">for</span> ( j = 0 ; j < 4 ; j++)
-<a name="l02830"></a>02830     {
-<a name="l02831"></a>02831         podata[i+j*olx]=0;
-<a name="l02832"></a>02832         podata[i+(oly-j-1)*olx]=0;
-<a name="l02833"></a>02833     }
-<a name="l02834"></a>02834     }
-<a name="l02835"></a>02835     <span class="keywordflow">for</span> ( i = 0 ; i < oly ; i++ )
-<a name="l02836"></a>02836     {
-<a name="l02837"></a>02837         <span class="keywordflow">for</span> ( j = 0 ; j < 4 ; j++)
-<a name="l02838"></a>02838     {
-<a name="l02839"></a>02839         podata[j+i*olx]=0;
-<a name="l02840"></a>02840         podata[(olx-j-1)+i*olx]=0;
-<a name="l02841"></a>02841     }
-<a name="l02842"></a>02842     }
-<a name="l02843"></a>02843     <span class="keywordflow">return</span> new ;
-<a name="l02844"></a>02844 }
-<a name="l02845"></a>02845 
-<a name="l02846"></a>02846 
-<a name="l02847"></a>02847 <span class="keywordtype">void</span> sinfo_new_used_cor_map( cpl_image *im, cpl_image *map)
-<a name="l02848"></a>02848 {
-<a name="l02849"></a>02849     <span class="keywordtype">int</span> i=0,j=0,loc_index=0;
-<a name="l02850"></a>02850     <span class="keywordtype">float</span> temp_array[2048];
-<a name="l02851"></a>02851     <span class="keywordtype">int</span> lx=cpl_image_get_size_x(im);
-<a name="l02852"></a>02852     <span class="keywordtype">int</span> ly=cpl_image_get_size_y(im);
-<a name="l02853"></a>02853     <span class="keywordtype">float</span>* pidata=cpl_image_get_data_float(im);
-<a name="l02854"></a>02854     <span class="keywordtype">float</span>* pmdata=cpl_image_get_data_float(map);
-<a name="l02855"></a>02855 
-<a name="l02856"></a>02856     <span class="keywordflow">for</span>( j=0; j<ly; j++)
-<a name="l02857"></a>02857     {
-<a name="l02858"></a>02858     <span class="keywordflow">for</span>( i=0;i<lx;i++)
-<a name="l02859"></a>02859         {
-<a name="l02860"></a>02860           loc_index = (int)pmdata[i+j*lx];
-<a name="l02861"></a>02861            temp_array[i] = pidata[loc_index+j*lx];
-<a name="l02862"></a>02862         }
-<a name="l02863"></a>02863     <span class="keywordflow">for</span>( i=0;i<lx;i++)
-<a name="l02864"></a>02864         {
-<a name="l02865"></a>02865           pidata[i+j*lx]= temp_array[i];
-<a name="l02866"></a>02866         }
-<a name="l02867"></a>02867     }
-<a name="l02868"></a>02868 }
-<a name="l02869"></a>02869 
-<a name="l02870"></a>02870 
-<a name="l02871"></a>02871 
-<a name="l02872"></a>02872 
-<a name="l02873"></a>02873 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02896"></a>02896 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02897"></a>02897 
-<a name="l02898"></a>02898 cpl_image *
-<a name="l02899"></a>02899 sinfo_new_shift_image(
-<a name="l02900"></a>02900     cpl_image    *    image_in,
-<a name="l02901"></a>02901     <span class="keywordtype">double</span>           shift_x,
-<a name="l02902"></a>02902     <span class="keywordtype">double</span>           shift_y,
-<a name="l02903"></a>02903     <span class="keywordtype">double</span>       *    interp_kernel)
-<a name="l02904"></a>02904 {
-<a name="l02905"></a>02905     cpl_image    *    shifted=NULL ;
-<a name="l02906"></a>02906     <span class="keywordtype">float</span>  *    first_pass=NULL ;
-<a name="l02907"></a>02907     <span class="keywordtype">float</span>  *    second_pass=NULL ;
-<a name="l02908"></a>02908     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;
-<a name="l02909"></a>02909     <span class="keywordtype">int</span>          i=0, j=0 ;
-<a name="l02910"></a>02910     <span class="keywordtype">double</span>           fx=0, fy=0 ;
-<a name="l02911"></a>02911     <span class="keywordtype">double</span>           rx=0, ry=0 ;
-<a name="l02912"></a>02912     <span class="keywordtype">int</span>             px=0, py=0 ;
-<a name="l02913"></a>02913     <span class="keywordtype">int</span>             tabx=0, taby=0 ;
-<a name="l02914"></a>02914     <span class="keywordtype">double</span>           value=0 ;
-<a name="l02915"></a>02915     <span class="keywordtype">size_t</span>          pos ;
-<a name="l02916"></a>02916     <span class="keyword">register</span> <span class="keywordtype">float</span>     *    pix=NULL ;
-<a name="l02917"></a>02917     <span class="keyword">register</span> <span class="keywordtype">float</span>     *    pixint=NULL ;
-<a name="l02918"></a>02918     <span class="keywordtype">int</span>             mid=0;
-<a name="l02919"></a>02919     <span class="keywordtype">double</span>          norm=0 ;
-<a name="l02920"></a>02920     <span class="keywordtype">double</span>       *    ker=NULL ;
-<a name="l02921"></a>02921     <span class="keywordtype">int</span>                freeKernel = 1 ;
-<a name="l02922"></a>02922     <span class="keywordtype">int</span> ilx=0;
-<a name="l02923"></a>02923     <span class="keywordtype">int</span> ily=0;
-<a name="l02924"></a>02924 
-<a name="l02925"></a>02925     <span class="comment">/* error handling: test entries */</span>
-<a name="l02926"></a>02926     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l02927"></a>02927 
-<a name="l02928"></a>02928     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span>
-<a name="l02929"></a>02929     <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))
-<a name="l02930"></a>02930         <span class="keywordflow">return</span> cpl_image_duplicate(image_in) ;
-<a name="l02931"></a>02931 
-<a name="l02932"></a>02932     <span class="comment">/* See if a kernel needs to be generated */</span>
-<a name="l02933"></a>02933     <span class="keywordflow">if</span> (interp_kernel == NULL) {
-<a name="l02934"></a>02934         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;
-<a name="l02935"></a>02935         <span class="keywordflow">if</span> (ker == NULL) {
-<a name="l02936"></a>02936             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure: aborting resampling"</span>) ;
-<a name="l02937"></a>02937             <span class="keywordflow">return</span> NULL ;
-<a name="l02938"></a>02938         }
-<a name="l02939"></a>02939     } <span class="keywordflow">else</span> {
-<a name="l02940"></a>02940         ker = interp_kernel ;
-<a name="l02941"></a>02941         freeKernel = 0 ;
-<a name="l02942"></a>02942     }
-<a name="l02943"></a>02943 
-<a name="l02944"></a>02944     ilx=cpl_image_get_size_x(image_in);
-<a name="l02945"></a>02945     ily=cpl_image_get_size_y(image_in);
-<a name="l02946"></a>02946 
-<a name="l02947"></a>02947 
-<a name="l02948"></a>02948     pix = cpl_image_get_data_float(image_in);
-<a name="l02949"></a>02949     <span class="keywordflow">if</span> (pix)
-<a name="l02950"></a>02950     {
-<a name="l02951"></a>02951         mid = (int)samples/(<span class="keywordtype">int</span>)2 ;
-<a name="l02952"></a>02952         first_pass = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02953"></a>02953         shifted = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT) ;
-<a name="l02954"></a>02954         second_pass = cpl_image_get_data_float(shifted);
-<a name="l02955"></a>02955         <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {
-<a name="l02956"></a>02956             <span class="keywordflow">for</span> (i=1 ; i<ilx-2 ; i++) {
-<a name="l02957"></a>02957                 fx = (double)i-shift_x ;
-<a name="l02958"></a>02958                 px = (int)fx ;
-<a name="l02959"></a>02959                 rx = fx - (double)px ;
-<a name="l02960"></a>02960 
-<a name="l02961"></a>02961                 pos = px + j * ilx ;
-<a name="l02962"></a>02962 
-<a name="l02963"></a>02963                 <span class="keywordflow">if</span> ((px>1) && (px<(ilx-3))) {
-<a name="l02964"></a>02964                     tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;
-<a name="l02965"></a>02965                     <span class="comment">/*</span>
-<a name="l02966"></a>02966 <span class="comment">                     * Sum up over 4 closest pixel values,</span>
-<a name="l02967"></a>02967 <span class="comment">                     * weighted by interpolation kernel values</span>
-<a name="l02968"></a>02968 <span class="comment">                     */</span>
-<a name="l02969"></a>02969                     value =     (double)pix[pos-1] * ker[mid+tabx] +
-<a name="l02970"></a>02970                                 (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +
-<a name="l02971"></a>02971                                 (double)pix[pos+1] * ker[mid-tabx] +
-<a name="l02972"></a>02972                                 (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;
-<a name="l02973"></a>02973                     <span class="comment">/*</span>
-<a name="l02974"></a>02974 <span class="comment">                     * Also sum up interpolation kernel coefficients</span>
-<a name="l02975"></a>02975 <span class="comment">                     * for further normalization</span>
-<a name="l02976"></a>02976 <span class="comment">                     */</span>
-<a name="l02977"></a>02977                     norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +
-<a name="l02978"></a>02978                                 (<span class="keywordtype">double</span>)ker[tabx] +
-<a name="l02979"></a>02979                                 (<span class="keywordtype">double</span>)ker[mid-tabx] +
-<a name="l02980"></a>02980                                 (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;
-<a name="l02981"></a>02981                     if (fabs(norm) > 1e-4) {
-<a name="l02982"></a>02982                         value /= norm ;
-<a name="l02983"></a>02983                     }
-<a name="l02984"></a>02984                 } <span class="keywordflow">else</span> {
-<a name="l02985"></a>02985                     value = 0.0 ;
-<a name="l02986"></a>02986                 }
-<a name="l02987"></a>02987                 <span class="comment">/*</span>
-<a name="l02988"></a>02988 <span class="comment">                 * There may be a problem of rounding here if pixelvalue</span>
-<a name="l02989"></a>02989 <span class="comment">                 * has not enough bits to sustain the accuracy.</span>
-<a name="l02990"></a>02990 <span class="comment">                 */</span>
-<a name="l02991"></a>02991                 first_pass[i+j*ilx] = (float)value ;
-<a name="l02992"></a>02992             }
-<a name="l02993"></a>02993         }
-<a name="l02994"></a>02994         pixint = first_pass ;
-<a name="l02995"></a>02995         <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {
-<a name="l02996"></a>02996             <span class="keywordflow">for</span> (j=1 ; j<ily-3 ; j++) {
-<a name="l02997"></a>02997                 fy = (double)j - shift_y ;
-<a name="l02998"></a>02998                 py = (int)fy ;
-<a name="l02999"></a>02999                 ry = fy - (double)py ;
-<a name="l03000"></a>03000                 pos = i + py * ilx ;
-<a name="l03001"></a>03001 
-<a name="l03002"></a>03002                 taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;
-<a name="l03003"></a>03003 
-<a name="l03004"></a>03004                 <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {
-<a name="l03005"></a>03005                     <span class="comment">/*</span>
-<a name="l03006"></a>03006 <span class="comment">                     * Sum up over 4 closest pixel values,</span>
-<a name="l03007"></a>03007 <span class="comment">                     * weighted by interpolation kernel values</span>
-<a name="l03008"></a>03008 <span class="comment">                     */</span>
-<a name="l03009"></a>03009                     value = (double)pixint[pos-ilx] * ker[mid+taby] +
-<a name="l03010"></a>03010                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +
-<a name="l03011"></a>03011                             (double)pixint[pos+ilx] * ker[mid-taby] +
-<a name="l03012"></a>03012                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];
-<a name="l03013"></a>03013                     <span class="comment">/*</span>
-<a name="l03014"></a>03014 <span class="comment">                     * Also sum up interpolation kernel coefficients</span>
-<a name="l03015"></a>03015 <span class="comment">                     * for further normalization</span>
-<a name="l03016"></a>03016 <span class="comment">                     */</span>
-<a name="l03017"></a>03017                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +
-<a name="l03018"></a>03018                                 (<span class="keywordtype">double</span>)ker[taby] +
-<a name="l03019"></a>03019                                 (<span class="keywordtype">double</span>)ker[mid-taby] +
-<a name="l03020"></a>03020                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;
-<a name="l03021"></a>03021 
-<a name="l03022"></a>03022                     if (fabs(norm) > 1e-4) {
-<a name="l03023"></a>03023                         value /= norm ;
-<a name="l03024"></a>03024                     }
-<a name="l03025"></a>03025                 } <span class="keywordflow">else</span> {
-<a name="l03026"></a>03026                     value = 0.0 ;
-<a name="l03027"></a>03027                 }
-<a name="l03028"></a>03028                 second_pass[i+j*ilx] = (float)value ;
-<a name="l03029"></a>03029             }
-<a name="l03030"></a>03030         }
-<a name="l03031"></a>03031     }
-<a name="l03032"></a>03032     <span class="keywordflow">else</span>
-<a name="l03033"></a>03033     {
-<a name="l03034"></a>03034         cpl_msg_warning(cpl_func, <span class="stringliteral">"cannot get a data from an image"</span>);
-<a name="l03035"></a>03035     }
-<a name="l03036"></a>03036     cpl_free(first_pass) ;
-<a name="l03037"></a>03037     <span class="keywordflow">if</span> (freeKernel)
-<a name="l03038"></a>03038         cpl_free(ker) ;
-<a name="l03039"></a>03039     <span class="keywordflow">return</span> shifted ;
-<a name="l03040"></a>03040 }
-<a name="l03041"></a>03041 
-<a name="l03042"></a>03042 
-<a name="l03043"></a>03043 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03057"></a>03057 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03058"></a>03058 
-<a name="l03059"></a>03059 cpl_image *
-<a name="l03060"></a>03060 sinfo_image_hermite_interpol(cpl_image * inp)
-<a name="l03061"></a>03061 {
-<a name="l03062"></a>03062 
-<a name="l03063"></a>03063   <span class="comment">/*</span>
-<a name="l03064"></a>03064 <span class="comment">   @param xp     x-value to interpolate</span>
-<a name="l03065"></a>03065 <span class="comment">   @param x      x-values</span>
-<a name="l03066"></a>03066 <span class="comment">   @param y      y-values</span>
-<a name="l03067"></a>03067 <span class="comment">   @param n      array length</span>
-<a name="l03068"></a>03068 <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span>
-<a name="l03069"></a>03069 <span class="comment"></span>
-<a name="l03070"></a>03070 <span class="comment">  sinfo_spline_hermite( double xp, const double *x,</span>
-<a name="l03071"></a>03071 <span class="comment">                        const double *y, int n, int *istart );</span>
-<a name="l03072"></a>03072 <span class="comment"></span>
-<a name="l03073"></a>03073 <span class="comment">  */</span>
-<a name="l03074"></a>03074   <span class="keywordtype">float</span>* pinp=NULL;
-<a name="l03075"></a>03075   <span class="keywordtype">float</span>* pout=NULL;
-<a name="l03076"></a>03076   <span class="keywordtype">int</span> sx=0;
-<a name="l03077"></a>03077   <span class="keywordtype">int</span> sy=0;
-<a name="l03078"></a>03078   <span class="keywordtype">int</span> i=0;
-<a name="l03079"></a>03079   <span class="keywordtype">int</span> j=0;
-<a name="l03080"></a>03080   <span class="keywordtype">int</span> r=5;
-<a name="l03081"></a>03081   <span class="keywordtype">int</span> k=0;
-<a name="l03082"></a>03082 
-<a name="l03083"></a>03083   cpl_image* out=NULL;
-<a name="l03084"></a>03084 
-<a name="l03085"></a>03085   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);
-<a name="l03086"></a>03086   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l03087"></a>03087   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l03088"></a>03088   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l03089"></a>03089   check_nomsg(pinp=cpl_image_get_data_float(inp));
-<a name="l03090"></a>03090   check_nomsg(pout=cpl_image_get_data_float(out));
-<a name="l03091"></a>03091   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {
-<a name="l03092"></a>03092     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l03093"></a>03093       <span class="keywordflow">for</span>(k=-r;k<r;k++) {
-<a name="l03094"></a>03094     pout[j*sx+i]+=pinp[(j+k)*sx+i];
-<a name="l03095"></a>03095       }
-<a name="l03096"></a>03096       pout[j*sx+i]/=2*r;
-<a name="l03097"></a>03097     }
-<a name="l03098"></a>03098   }
-<a name="l03099"></a>03099 
-<a name="l03100"></a>03100  cleanup:
-<a name="l03101"></a>03101 
-<a name="l03102"></a>03102   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l03103"></a>03103     <span class="keywordflow">return</span> NULL;
-<a name="l03104"></a>03104   } <span class="keywordflow">else</span> {
-<a name="l03105"></a>03105     <span class="keywordflow">return</span> out;
-<a name="l03106"></a>03106 
-<a name="l03107"></a>03107   }
-<a name="l03108"></a>03108 
-<a name="l03109"></a>03109 }
-<a name="l03110"></a>03110 
-<a name="l03111"></a>03111 
-<a name="l03112"></a>03112 
-<a name="l03113"></a>03113 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03127"></a>03127 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03128"></a>03128 
-<a name="l03129"></a>03129 cpl_image *
-<a name="l03130"></a>03130 sinfo_image_smooth_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)
-<a name="l03131"></a>03131 {
-<a name="l03132"></a>03132 
-<a name="l03133"></a>03133   <span class="comment">/*</span>
-<a name="l03134"></a>03134 <span class="comment">   @param xp     x-value to interpolate</span>
-<a name="l03135"></a>03135 <span class="comment">   @param x      x-values</span>
-<a name="l03136"></a>03136 <span class="comment">   @param y      y-values</span>
-<a name="l03137"></a>03137 <span class="comment">   @param n      array length</span>
-<a name="l03138"></a>03138 <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span>
-<a name="l03139"></a>03139 <span class="comment"></span>
-<a name="l03140"></a>03140 <span class="comment">  */</span>
-<a name="l03141"></a>03141   <span class="keywordtype">float</span>* pinp=NULL;
-<a name="l03142"></a>03142   <span class="keywordtype">float</span>* pout=NULL;
-<a name="l03143"></a>03143   <span class="keywordtype">int</span> sx=0;
-<a name="l03144"></a>03144   <span class="keywordtype">int</span> sy=0;
-<a name="l03145"></a>03145   <span class="keywordtype">int</span> i=0;
-<a name="l03146"></a>03146   <span class="keywordtype">int</span> j=0;
-<a name="l03147"></a>03147   <span class="keywordtype">int</span> k=0;
-<a name="l03148"></a>03148 
-<a name="l03149"></a>03149   cpl_image* out=NULL;
-<a name="l03150"></a>03150 
-<a name="l03151"></a>03151   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);
-<a name="l03152"></a>03152   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l03153"></a>03153   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l03154"></a>03154   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l03155"></a>03155   check_nomsg(pinp=cpl_image_get_data_float(inp));
-<a name="l03156"></a>03156   check_nomsg(pout=cpl_image_get_data_float(out));
-<a name="l03157"></a>03157   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {
-<a name="l03158"></a>03158     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l03159"></a>03159       <span class="keywordflow">for</span>(k=-r;k<r;k++) {
-<a name="l03160"></a>03160     pout[j*sx+i]+=pinp[(j+k)*sx+i];
-<a name="l03161"></a>03161       }
-<a name="l03162"></a>03162       pout[j*sx+i]/=2*r;
-<a name="l03163"></a>03163     }
-<a name="l03164"></a>03164   }
-<a name="l03165"></a>03165 
-<a name="l03166"></a>03166  cleanup:
-<a name="l03167"></a>03167 
-<a name="l03168"></a>03168   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l03169"></a>03169     <span class="keywordflow">return</span> NULL;
-<a name="l03170"></a>03170   } <span class="keywordflow">else</span> {
-<a name="l03171"></a>03171     <span class="keywordflow">return</span> out;
-<a name="l03172"></a>03172 
-<a name="l03173"></a>03173   }
-<a name="l03174"></a>03174 
-<a name="l03175"></a>03175 }
-<a name="l03176"></a>03176 
-<a name="l03177"></a>03177 
-<a name="l03178"></a>03178 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03192"></a>03192 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03193"></a>03193 
-<a name="l03194"></a>03194 cpl_image *
-<a name="l03195"></a>03195 sinfo_image_smooth_mean_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)
-<a name="l03196"></a>03196 {
-<a name="l03197"></a>03197 
-<a name="l03198"></a>03198   <span class="comment">/*</span>
-<a name="l03199"></a>03199 <span class="comment">   @param xp     x-value to interpolate</span>
-<a name="l03200"></a>03200 <span class="comment">   @param x      x-values</span>
-<a name="l03201"></a>03201 <span class="comment">   @param y      y-values</span>
-<a name="l03202"></a>03202 <span class="comment">   @param n      array length</span>
-<a name="l03203"></a>03203 <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span>
-<a name="l03204"></a>03204 <span class="comment"></span>
-<a name="l03205"></a>03205 <span class="comment">  */</span>
-<a name="l03206"></a>03206   <span class="keywordtype">float</span>* pinp=NULL;
-<a name="l03207"></a>03207   <span class="keywordtype">float</span>* pout=NULL;
-<a name="l03208"></a>03208   <span class="keywordtype">int</span> sx=0;
-<a name="l03209"></a>03209   <span class="keywordtype">int</span> sy=0;
-<a name="l03210"></a>03210   <span class="keywordtype">int</span> i=0;
-<a name="l03211"></a>03211   <span class="keywordtype">int</span> j=0;
-<a name="l03212"></a>03212   <span class="keywordtype">int</span> k=0;
-<a name="l03213"></a>03213 
-<a name="l03214"></a>03214   cpl_image* out=NULL;
-<a name="l03215"></a>03215 
-<a name="l03216"></a>03216   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);
-<a name="l03217"></a>03217   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l03218"></a>03218   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l03219"></a>03219   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l03220"></a>03220   check_nomsg(pinp=cpl_image_get_data_float(inp));
-<a name="l03221"></a>03221   check_nomsg(pout=cpl_image_get_data_float(out));
-<a name="l03222"></a>03222   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {
-<a name="l03223"></a>03223     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l03224"></a>03224       <span class="keywordflow">for</span>(k=-r;k<r;k++) {
-<a name="l03225"></a>03225     pout[j*sx+i]+=pinp[(j+k)*sx+i];
-<a name="l03226"></a>03226       }
-<a name="l03227"></a>03227       pout[j*sx+i]/=2*r;
-<a name="l03228"></a>03228     }
-<a name="l03229"></a>03229   }
-<a name="l03230"></a>03230 
-<a name="l03231"></a>03231  cleanup:
-<a name="l03232"></a>03232 
-<a name="l03233"></a>03233   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l03234"></a>03234     <span class="keywordflow">return</span> NULL;
-<a name="l03235"></a>03235   } <span class="keywordflow">else</span> {
-<a name="l03236"></a>03236     <span class="keywordflow">return</span> out;
-<a name="l03237"></a>03237 
-<a name="l03238"></a>03238   }
-<a name="l03239"></a>03239 
-<a name="l03240"></a>03240 }
-<a name="l03241"></a>03241 
-<a name="l03242"></a>03242 
-<a name="l03243"></a>03243 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03257"></a>03257 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03258"></a>03258 
-<a name="l03259"></a>03259 cpl_image *
-<a name="l03260"></a>03260 sinfo_image_smooth_median_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)
-<a name="l03261"></a>03261 {
-<a name="l03262"></a>03262 
-<a name="l03263"></a>03263   <span class="comment">/*</span>
-<a name="l03264"></a>03264 <span class="comment">   @param xp     x-value to interpolate</span>
-<a name="l03265"></a>03265 <span class="comment">   @param x      x-values</span>
-<a name="l03266"></a>03266 <span class="comment">   @param y      y-values</span>
-<a name="l03267"></a>03267 <span class="comment">   @param n      array length</span>
-<a name="l03268"></a>03268 <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span>
-<a name="l03269"></a>03269 <span class="comment"></span>
-<a name="l03270"></a>03270 <span class="comment">  */</span>
-<a name="l03271"></a>03271   <span class="keywordtype">float</span>* pout=NULL;
-<a name="l03272"></a>03272   <span class="keywordtype">int</span> sx=0;
-<a name="l03273"></a>03273   <span class="keywordtype">int</span> sy=0;
-<a name="l03274"></a>03274   <span class="keywordtype">int</span> i=0;
-<a name="l03275"></a>03275   <span class="keywordtype">int</span> j=0;
-<a name="l03276"></a>03276 
-<a name="l03277"></a>03277   cpl_image* out=NULL;
-<a name="l03278"></a>03278 
-<a name="l03279"></a>03279 
-<a name="l03280"></a>03280   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);
-<a name="l03281"></a>03281   check_nomsg(out=cpl_image_duplicate(inp));
-<a name="l03282"></a>03282   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l03283"></a>03283   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l03284"></a>03284   check_nomsg(pout=cpl_image_get_data_float(out));
-<a name="l03285"></a>03285 
-<a name="l03286"></a>03286   <span class="keywordflow">for</span>(j=r+1;j<sy-r;j++) {
-<a name="l03287"></a>03287     <span class="keywordflow">for</span>(i=1;i<sx;i++) {
-<a name="l03288"></a>03288       pout[j*sx+i]=(float)cpl_image_get_median_window(inp,i,j,i,j+r);
-<a name="l03289"></a>03289     }
-<a name="l03290"></a>03290   }
-<a name="l03291"></a>03291 
-<a name="l03292"></a>03292  cleanup:
-<a name="l03293"></a>03293 
-<a name="l03294"></a>03294   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l03295"></a>03295     <span class="keywordflow">return</span> NULL;
-<a name="l03296"></a>03296   } <span class="keywordflow">else</span> {
-<a name="l03297"></a>03297     <span class="keywordflow">return</span> out;
-<a name="l03298"></a>03298 
-<a name="l03299"></a>03299   }
-<a name="l03300"></a>03300 
-<a name="l03301"></a>03301 }
-<a name="l03302"></a>03302 
-<a name="l03303"></a>03303 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03316"></a>03316 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03317"></a>03317 
-<a name="l03318"></a>03318 cpl_image *
-<a name="l03319"></a>03319 sinfo_image_smooth_fft(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> fy)
-<a name="l03320"></a>03320 {
-<a name="l03321"></a>03321 
-<a name="l03322"></a>03322   <span class="keywordtype">int</span> sx=0;
-<a name="l03323"></a>03323   <span class="keywordtype">int</span> sy=0;
-<a name="l03324"></a>03324 
-<a name="l03325"></a>03325   cpl_image* out=NULL;
-<a name="l03326"></a>03326   cpl_image* im_re=NULL;
-<a name="l03327"></a>03327   cpl_image* im_im=NULL;
-<a name="l03328"></a>03328   cpl_image* ifft_re=NULL;
-<a name="l03329"></a>03329   cpl_image* ifft_im=NULL;
-<a name="l03330"></a>03330   cpl_image* filter=NULL;
-<a name="l03331"></a>03331 
-<a name="l03332"></a>03332   <span class="keywordtype">int</span> sigma_x=0;
-<a name="l03333"></a>03333   <span class="keywordtype">int</span> sigma_y=fy;
-<a name="l03334"></a>03334 
-<a name="l03335"></a>03335   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);
-<a name="l03336"></a>03336   check_nomsg(im_re = cpl_image_cast(inp, CPL_TYPE_DOUBLE));
-<a name="l03337"></a>03337   check_nomsg(im_im = cpl_image_cast(inp, CPL_TYPE_DOUBLE));
-<a name="l03338"></a>03338 
-<a name="l03339"></a>03339   <span class="comment">// Compute FFT</span>
-<a name="l03340"></a>03340   check_nomsg(cpl_image_fft(im_re,im_im,CPL_FFT_DEFAULT));
-<a name="l03341"></a>03341 
-<a name="l03342"></a>03342   check_nomsg(sx=cpl_image_get_size_x(inp));
-<a name="l03343"></a>03343   check_nomsg(sy=cpl_image_get_size_y(inp));
-<a name="l03344"></a>03344   sigma_x=sx;
-<a name="l03345"></a>03345 
-<a name="l03346"></a>03346   <span class="comment">//Generates filter image</span>
-<a name="l03347"></a>03347   check_nomsg(filter = sinfo_gen_lowpass(sx,sy,sigma_x,sigma_y));
-<a name="l03348"></a>03348 
-<a name="l03349"></a>03349   <span class="comment">//Apply filter</span>
-<a name="l03350"></a>03350   cpl_image_multiply(im_re,filter);
-<a name="l03351"></a>03351   cpl_image_multiply(im_im,filter);
-<a name="l03352"></a>03352 
-<a name="l03353"></a>03353   sinfo_free_image(&filter);
-<a name="l03354"></a>03354 
-<a name="l03355"></a>03355   check_nomsg(ifft_re = cpl_image_duplicate(im_re));
-<a name="l03356"></a>03356   check_nomsg(ifft_im = cpl_image_duplicate(im_im));
-<a name="l03357"></a>03357 
-<a name="l03358"></a>03358   sinfo_free_image(&im_re);
-<a name="l03359"></a>03359   sinfo_free_image(&im_im);
-<a name="l03360"></a>03360 
-<a name="l03361"></a>03361   <span class="comment">//Computes FFT-INVERSE</span>
-<a name="l03362"></a>03362   check_nomsg(cpl_image_fft(ifft_re,ifft_im,CPL_FFT_INVERSE));
-<a name="l03363"></a>03363   check_nomsg(out = cpl_image_cast(ifft_re, CPL_TYPE_FLOAT));
-<a name="l03364"></a>03364 
-<a name="l03365"></a>03365  cleanup:
-<a name="l03366"></a>03366 
-<a name="l03367"></a>03367   sinfo_free_image(&ifft_re);
-<a name="l03368"></a>03368   sinfo_free_image(&ifft_im);
-<a name="l03369"></a>03369   sinfo_free_image(&filter);
-<a name="l03370"></a>03370   sinfo_free_image(&im_re);
-<a name="l03371"></a>03371   sinfo_free_image(&im_im);
-<a name="l03372"></a>03372 
-<a name="l03373"></a>03373   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l03374"></a>03374     <span class="keywordflow">return</span> NULL;
-<a name="l03375"></a>03375   } <span class="keywordflow">else</span> {
-<a name="l03376"></a>03376     <span class="keywordflow">return</span> out;
-<a name="l03377"></a>03377   }
-<a name="l03378"></a>03378 
-<a name="l03379"></a>03379 }
-<a name="l03380"></a>03380 
-<a name="l03381"></a>03381 
-<a name="l03382"></a>03382 
-<a name="l03383"></a>03383 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l03399"></a>03399 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l03400"></a>03400 <span class="keyword">static</span> cpl_image *
-<a name="l03401"></a>03401 sinfo_gen_lowpass(<span class="keyword">const</span> <span class="keywordtype">int</span> xs,
-<a name="l03402"></a>03402                   <span class="keyword">const</span> <span class="keywordtype">int</span> ys,
-<a name="l03403"></a>03403                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_x,
-<a name="l03404"></a>03404                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_y)
-<a name="l03405"></a>03405 {
-<a name="l03406"></a>03406 
-<a name="l03407"></a>03407     <span class="keywordtype">int</span> i= 0.0;
-<a name="l03408"></a>03408     <span class="keywordtype">int</span> j= 0.0;
-<a name="l03409"></a>03409     <span class="keywordtype">int</span> hlx= 0.0;
-<a name="l03410"></a>03410     <span class="keywordtype">int</span> hly = 0.0;
-<a name="l03411"></a>03411     <span class="keywordtype">double</span> x= 0.0;
-<a name="l03412"></a>03412     <span class="keywordtype">double</span> y= 0.0;
-<a name="l03413"></a>03413     <span class="keywordtype">double</span> gaussval= 0.0;
-<a name="l03414"></a>03414     <span class="keywordtype">double</span> inv_sigma_x=1./sigma_x;
-<a name="l03415"></a>03415     <span class="keywordtype">double</span> inv_sigma_y=1./sigma_y;
-<a name="l03416"></a>03416 
-<a name="l03417"></a>03417     <span class="keywordtype">float</span> *data;
-<a name="l03418"></a>03418 
-<a name="l03419"></a>03419     cpl_image   *lowpass_image=NULL;
-<a name="l03420"></a>03420 
-<a name="l03421"></a>03421 
-<a name="l03422"></a>03422     lowpass_image = cpl_image_new (xs, ys, CPL_TYPE_FLOAT);
-<a name="l03423"></a>03423     <span class="keywordflow">if</span> (lowpass_image == NULL) {
-<a name="l03424"></a>03424         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot generate lowpass filter <%s>"</span>,
-<a name="l03425"></a>03425                         cpl_error_get_message());
-<a name="l03426"></a>03426         <span class="keywordflow">return</span> NULL;
-<a name="l03427"></a>03427     }
-<a name="l03428"></a>03428 
-<a name="l03429"></a>03429     hlx = xs/2;
-<a name="l03430"></a>03430     hly = ys/2;
-<a name="l03431"></a>03431 
-<a name="l03432"></a>03432     data = cpl_image_get_data_float(lowpass_image);
-<a name="l03433"></a>03433 
-<a name="l03434"></a>03434 <span class="comment">/* Given an image with pixels 0<=i<N, 0<=j<M then the convolution image</span>
-<a name="l03435"></a>03435 <span class="comment">   has the following properties:</span>
-<a name="l03436"></a>03436 <span class="comment"></span>
-<a name="l03437"></a>03437 <span class="comment">   ima[0][0] = 1</span>
-<a name="l03438"></a>03438 <span class="comment">   ima[i][0] = ima[N-i][0] = exp (-0.5 * (i/sig_i)^2)   1<=i<N/2</span>
-<a name="l03439"></a>03439 <span class="comment">   ima[0][j] = ima[0][M-j] = exp (-0.5 * (j/sig_j)^2)   1<=j<M/2</span>
-<a name="l03440"></a>03440 <span class="comment">   ima[i][j] = ima[N-i][j] = ima[i][M-j] = ima[N-i][M-j]</span>
-<a name="l03441"></a>03441 <span class="comment">             = exp (-0.5 * ((i/sig_i)^2 + (j/sig_j)^2))</span>
-<a name="l03442"></a>03442 <span class="comment">*/</span>
-<a name="l03443"></a>03443 
-<a name="l03444"></a>03444     data[0] = 1.0;
-<a name="l03445"></a>03445 
-<a name="l03446"></a>03446     <span class="comment">/* first row */</span>
-<a name="l03447"></a>03447     <span class="keywordflow">for</span> (i=1 ; i<=hlx ; i++) {
-<a name="l03448"></a>03448         x = i * inv_sigma_x;
-<a name="l03449"></a>03449         gaussval = exp(-0.5*x*x);
-<a name="l03450"></a>03450         data[i] = gaussval;
-<a name="l03451"></a>03451         data[xs-i] = gaussval;
-<a name="l03452"></a>03452     }
-<a name="l03453"></a>03453 
-<a name="l03454"></a>03454     <span class="keywordflow">for</span> (j=1; j<=hly ; j++) {
-<a name="l03455"></a>03455         y = j * inv_sigma_y;
-<a name="l03456"></a>03456       <span class="comment">/* first column */</span>
-<a name="l03457"></a>03457         data[j*xs] = exp(-0.5*y*y);
-<a name="l03458"></a>03458         data[(ys-j)*xs] = exp(-0.5*y*y);
-<a name="l03459"></a>03459 
-<a name="l03460"></a>03460         <span class="keywordflow">for</span> (i=1 ; i<=hlx ; i++) {
-<a name="l03461"></a>03461     <span class="comment">/* Use internal symetries */</span>
-<a name="l03462"></a>03462             x = i * inv_sigma_x;
-<a name="l03463"></a>03463             gaussval = exp (-0.5*(x*x+y*y));
-<a name="l03464"></a>03464             data[j*xs+i] = gaussval;
-<a name="l03465"></a>03465             data[(j+1)*xs-i] = gaussval;
-<a name="l03466"></a>03466             data[(ys-j)*xs+i] = gaussval;
-<a name="l03467"></a>03467             data[(ys+1-j)*xs-i] = gaussval;
-<a name="l03468"></a>03468 
-<a name="l03469"></a>03469         }
-<a name="l03470"></a>03470     }
-<a name="l03471"></a>03471 
-<a name="l03472"></a>03472     <span class="comment">/* FIXME: for the moment, reset errno which is coming from exp()</span>
-<a name="l03473"></a>03473 <span class="comment">            in first for-loop at i=348. This is causing cfitsio to</span>
-<a name="l03474"></a>03474 <span class="comment">            fail when loading an extension image (bug in cfitsio too).</span>
-<a name="l03475"></a>03475 <span class="comment">    */</span>
-<a name="l03476"></a>03476     <span class="keywordflow">if</span>(errno != 0)
-<a name="l03477"></a>03477         errno = 0;
-<a name="l03478"></a>03478 
-<a name="l03479"></a>03479     <span class="keywordflow">return</span> lowpass_image;
-<a name="l03480"></a>03480 }
-<a name="l03481"></a>03481 
-<a name="l03482"></a>03482 <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort_int(<span class="keywordtype">int</span>* data, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right)
-<a name="l03483"></a>03483 {
-<a name="l03484"></a>03484     <span class="keywordtype">int</span> i = left;
-<a name="l03485"></a>03485     <span class="keywordtype">int</span> j = right;
-<a name="l03486"></a>03486     <span class="keywordtype">int</span> pivot = (i + j) / 2;
-<a name="l03487"></a>03487     <span class="keywordtype">double</span> index_value = data[pivot];
-<a name="l03488"></a>03488     <span class="keywordflow">do</span>
-<a name="l03489"></a>03489     {
-<a name="l03490"></a>03490         <span class="keywordflow">while</span>(data[i] < index_value) i++;
-<a name="l03491"></a>03491         <span class="keywordflow">while</span>(data[j] > index_value) j--;
-<a name="l03492"></a>03492         <span class="keywordflow">if</span> (i <= j)
-<a name="l03493"></a>03493         {
-<a name="l03494"></a>03494             <span class="keywordflow">if</span>(i < j)
-<a name="l03495"></a>03495             {
-<a name="l03496"></a>03496                 <span class="keywordtype">int</span> tmp = data[i];
-<a name="l03497"></a>03497                 data[i]=data[j];
-<a name="l03498"></a>03498                 data[j]=tmp;
-<a name="l03499"></a>03499             }
-<a name="l03500"></a>03500             i++;
-<a name="l03501"></a>03501             j--;
-<a name="l03502"></a>03502         }
-<a name="l03503"></a>03503     } <span class="keywordflow">while</span> (i <= j);
-<a name="l03504"></a>03504 
-<a name="l03505"></a>03505     <span class="keywordflow">if</span> (i < right)
-<a name="l03506"></a>03506     {
-<a name="l03507"></a>03507         quicksort_int(data, i, right);
-<a name="l03508"></a>03508     }
-<a name="l03509"></a>03509     <span class="keywordflow">if</span> (left < j)
-<a name="l03510"></a>03510     {
-<a name="l03511"></a>03511         quicksort_int(data, left, j);
-<a name="l03512"></a>03512     }
-<a name="l03513"></a>03513 }
-<a name="l03514"></a>03514 
-<a name="l03515"></a>03515 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_image_ops.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* M.P.E. - SPIFFI project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* rabuter 2004-12-03 support one dimensional image in sinfo_shiftImage</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* schreib  23/05/00  created</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        sinfo_image_ops.c -</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*        image arithmetic routines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*   #include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   1) Vector * sinfo_new_mean_of_columns( cpl_image *im )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   2) Vector * sinfo_new_clean_mean_of_columns( cpl_image *im,</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*                                   double lo_reject,</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*                                   double hi_reject)</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*   3) cpl_image * sinfo_new_div_image_by_row( cpl_image *im, Vector *row )</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*   4) cpl_image * sinfo_new_mult_row_to_image( cpl_image *im, Vector *row )</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*   5) cpl_image * sinfo_new_col_tilt ( cpl_image * image, float sigmaFactor )</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*   6) cpl_image * sinfo_new_median_image( cpl_image * im, float fmedian )</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*   7) cpl_image * sinfo_new_compare_images( cpl_image * im1,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                             cpl_image * im2,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                             cpl_image * origim )</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*   8) cpl_image * sinfo_new_thresh_image ( cpl_image * im,</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                                            float lo_cut, float hi_cut )</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*   9) pixel_map * sinfo_new_promote_image_to_pixelmap ( cpl_image * im )</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*  10) cpl_image * sinfo_new_promote_image_to_mask ( cpl_image * im,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                                     int * n_badpixels )</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*  11) cpl_image * sinfo_new_mult_image_by_mask ( cpl_image * im,</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                                  cpl_image * mask )</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*  12) cpl_image * sinfo_new_interpol_image ( cpl_image * im,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                                 cpl_image * mask,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*                                 int        max_radius,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                                 int        n_pixels )</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*  13) cpl_image * sinfo_interpol_source_image ( cpl_image * im,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                                       cpl_image * mask,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                                       int        max_rad,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                                       float   ** slit_edges )</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*  14) cpl_image * sinfo_new_stack_row_to_image ( Vector * row, int ly )</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*  15) Stats * sinfo_new_image_stats_on_rectangle ( cpl_image * im,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                                      float      loReject,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                                      float      hiReject,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                                      int        llx,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                                      int        lly,</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*                                      int        urx,</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                                      int        ury )</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*  16) cpl_image * sinfo_new_normalize_to_central_pixel ( cpl_image * image )</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*  17) cpl_image *</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*      sinfo_new_shift_image(</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*            cpl_image    *    image_in,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*            double           shift_x,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*            double           shift_y,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*            double       *   interp_kernel)</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*  18) cpl_image * sinfo_new_combine_masks ( cpl_image * firstMask,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                                             cpl_image * secondMask )</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*  19) cpl_image * sinfo_new_slice_cube (cpl_imagelist * cube, int x, int y )</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*  20) cpl_image * sinfo_new_div_images_robust ( cpl_image * im1,</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">                                                 cpl_image * im2 )</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*   1) takes the average of each image column</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*   2) takes the average of each image column by sorting the</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*      column values and rejecting the given percentage of</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*      the highest and lowest values  [0...1]</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*   3) divides each image column by a row value</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*   4) multiplies each image column with a row value</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*   5) first calculates statistics for each column of an image.</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*      sinfo_median value and standard deviation of columns are de-</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*      termined, blank values are excluded. Fits a straight</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*      line through the pixel values of each column and subtracts</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*      the fit in order to remove the tilt of each column.</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*      Only those pixels are used for the fit that are within</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*      a defined factor of sigma noise limit. The noise is</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*      calculated from pixels between the 10percentil and</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*      90percentil points.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*      if the straight line could not be determined, the sinfo_median</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*      of the column is subtracted from the column</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*   6) sinfo_median filter, calculates the sinfo_median for an image</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*      by using the 8 closest pixels to each pixel.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*      The values in the output image are determined according</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*      to the values of the input parameter.</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*      If fmedian = 0: always replace by sinfo_median</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*      if fmedian < 0: replace by sinfo_median if |pixel - sinfo_median| ></span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*                      -fmedian</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*      if fmedian > 0: replace by sinfo_median (fmedian as a factor of</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*                      the square root of the sinfo_median itself)</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*                      if |pixel - median| >= fmedian * sqrt ( median )</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*                      This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*                      This considers a dependence of the differences on the</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*                      pixel values themselves.</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*   7) if a pixel value of one image (im1) equals</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*      the pixel value of the other image keep the</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*      pixel value of the original image otherwise replace</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*      it with ZEROs</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*   8) simple search for static bad pixels for a flat field</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      or sinfo_dark frame, values below and above the threshold</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      values are set to ZERO.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*   9) changes an image with ZERO indicated bad pixels to</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*      a bad pixel map.</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*  10) changes an image with ZERO indicated bad pixels to</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*      a bad pixel mask image, that means the returned</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*      image has values 1 at positions of good pixels and</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*      ZEROs at positions of bad pixels.</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*  11) changes an image to an image that has ZERO indicated</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*      static bad pixels</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*  12) interpolates all bad pixels indicated by the bad pixel mask.</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*      Therefore, the mean of at least 2 valid values of</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*      the nearest 8 neighbors is taken. If too much</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*      neighbors are also bad pixels</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*      the neighbor radius is increased to a maximum of</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*      max_radius until n_pixels valid pixels are found.</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*      The valid neighbors are searched by going through</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*      the columns and rows around the central square that</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*      was already searched.</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*      The bad pixel is interpolated by the mean of these</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*      valid pixels (less than 9) or by the sinfo_median of them</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*      (more than 8).</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">*  13) interpolates all bad pixels indicated by the bad pixel mask.</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*      Therefore, the mean of the nearest 4 neighbors is taken,</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">*      two in spectral direction and 2 in spatial direction.</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*      The routine cares about the image and slitlet edges.</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*      If there are no good pixel found within the nearest neighbors,</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">*      the next 4 nearest neighbors in spatial and spectral direction</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*      are searched for valid pixels until a limit of max_rad.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">*      A maximum of 4 valid pixels are used for interpolation by their mean.</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">*  14) stack a given image row to build a whole image</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">*  15) computes the mean and standard deviation of</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*      a given rectangle on an image by leaving the extreme</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">*      intensity values.</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">*  16) normalizes a raw flatfield image by dividing by the median of the</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">       central spectral pixels to produce a master flatfield</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">*  17) This function is a conversion to CPL of the ECLIPSE function</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">       shift_image()</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">*      but slightly changed. If a blank (ZERO) pixel appears the blank pixel</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">*      is shifted but preserved as blank.</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">*      If a blank (ZERO) pixel appears within the</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">*      interpolation kernel the blank pixel is set to 0.</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">*      This function shifts an image by a non-integer offset, using</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">*      interpolation. You can either generate an interpolation kernel once and</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">*      pass it to this function, or let it generate a default kernel. In the</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">*      former case, use sinfo_generate_interpolation_kernel() to generate an</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">*      appropriate kernel. In the latter case, pass NULL as last argument. A</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">*      default interpolation kernel is then generated then discarded</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">       before this function returns.</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">*      The returned image is a newly allocated object, it must be deallocated</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">*      using cpl_image_delete().</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">*  18) combines two bad pixel mask to one using an or relation</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">*  19) slices a data cube in x or y direction</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">*  20) divides two images by considering blanks and</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">*      calculating first 1/im2 by</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">*      cutting the very high values and setting to 1,</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">*      then multiplying im1 * 1/im2.</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor">#include <errno.h></span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> sinfo_gen_lowpass(<span class="keyword">const</span> <span class="keywordtype">int</span> xs,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> ys,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_x,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_y);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort_int(<span class="keywordtype">int</span>* data, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> cpl_error_code</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> sinfo_image_line_corr(<span class="keyword">const</span> <span class="keywordtype">int</span> width,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> filt_rad,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                 cpl_image* ima_in,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                 cpl_image** ima_out)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   cpl_image* mask=NULL;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   cpl_image* ima_backpix=NULL;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   cpl_image* ima_backpos=NULL;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_image* ima_ybackpix=NULL;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cpl_image* ima_diffbackpix=NULL;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   cpl_image* ima_filt=NULL;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   cpl_image* ima = NULL;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   cpl_matrix* filter=NULL;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="comment">//cpl_mask* bpm_good=NULL; //Is this really useful?</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   cpl_mask* bpm_bad=NULL;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordtype">double</span> med_back=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordtype">double</span> sigma_back=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordtype">double</span> medvalue=0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordtype">float</span>* pima=NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordtype">float</span>* ppix=NULL;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordtype">float</span>* pmsk=NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordtype">int</span>* ppos=NULL;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordtype">int</span>* pbackpix=NULL;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   cpl_binary* pbin=NULL;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordtype">double</span> tot=0;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="keywordtype">int</span>* ybad=NULL;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   <span class="keywordtype">int</span> nbad=0;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordtype">int</span> yval=0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordtype">int</span> yprev=0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   check_nomsg(sx=cpl_image_get_size_x(ima_in));</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   check_nomsg(sy=cpl_image_get_size_y(ima_in));</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   check_nomsg(*ima_out=cpl_image_duplicate(ima_in));</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   check_nomsg(mask=cpl_image_new(sx,sy,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   check_nomsg(pmsk=cpl_image_get_data_float(mask));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">for</span>(i=0;i<width;i++) {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       pmsk[j*sx+i]=1;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordflow">for</span>(i=sx-width;i<sx;i++) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       pmsk[j*sx+i]=1;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   sinfo_free_image(&mask); <span class="comment">//is mask needed?</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   nrow=2*width*(sy-2*width);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   check_nomsg(ima_backpix=cpl_image_new(nrow,1,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   check_nomsg(ima_backpos=cpl_image_new(nrow,1,CPL_TYPE_INT));</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   check_nomsg(pima=cpl_image_get_data_float(ima_in));</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   check_nomsg(ppix=cpl_image_get_data_float(ima_backpix));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   check_nomsg(ppos=cpl_image_get_data_int(ima_backpos));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   k=0;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="keywordflow">for</span>(i=0;i<width;i++) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       ppix[k]=pima[j*sx+i];</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       ppos[k]=j*sx+i;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       k++;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="keywordflow">for</span>(i=sx-width;i<sx;i++) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">for</span>(j=width;j<sy-width;j++) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       ppix[k]=pima[j*sx+i];</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       ppos[k]=j*sx+i;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       k++;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   check_nomsg(ima_ybackpix=cpl_image_duplicate(ima_backpos));</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   sinfo_free_image(&ima_backpos);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   check_nomsg(cpl_image_divide_scalar(ima_ybackpix,sx));</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   check_nomsg(med_back=cpl_image_get_median(ima_backpix));</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   check_nomsg(ima_diffbackpix=cpl_image_duplicate(ima_backpix));</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   <span class="comment">//sinfo_msg("med_back=%g",med_back);</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   check_nomsg(cpl_image_subtract_scalar(ima_diffbackpix,med_back));</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   <span class="comment">//check_nomsg(cpl_image_save(ima_diffbackpix,"ima_diff.fits",</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   <span class="comment">//                           CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   check_nomsg(filter=cpl_matrix_new(1,filt_rad));</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   check_nomsg(cpl_matrix_fill(filter,1.));</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   check_nomsg(ima_filt=sinfo_image_filter_median(ima_diffbackpix,filter));</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   sinfoni_free_matrix(&filter);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   <span class="comment">//check_nomsg(cpl_image_save(ima_filt,"ima_filt.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="comment">//             NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   check_nomsg(sigma_back=cpl_image_get_stdev(ima_filt));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   sinfo_free_image(&ima_filt);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   check_nomsg(ima=cpl_image_duplicate(ima_diffbackpix));</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   sinfo_free_image(&ima_diffbackpix);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   check_nomsg(cpl_image_abs(ima));</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   <span class="comment">//sinfo_msg("sigma_back=%g",sigma_back);</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="comment">//find good pixels</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   check_nomsg(bpm_bad=cpl_mask_threshold_image_create(ima,kappa*sigma_back,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                               SINFO_DBL_MAX));</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="comment">/*check_nomsg(bpm_good=cpl_mask_threshold_image_create(ima,SINFO_DBL_MIN,</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">                               kappa*sigma_back));</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">  sinfo_free_mask(&bpm_good);</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   check_nomsg(cpl_image_reject_from_mask(ima_backpix,bpm_bad));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   check_nomsg(medvalue=cpl_image_get_median(ima_backpix));</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   <span class="comment">//sinfo_msg("medvalue=%g",sigma_back);</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   check_nomsg(nbad=cpl_mask_count(bpm_bad));</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="comment">//sinfo_msg("nbad=%d",nbad);</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   check_nomsg(cpl_image_reject_from_mask(ima_backpix,bpm_bad));</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   sinfo_free_image(&ima_backpix);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   yprev=-1;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   check_nomsg(pbin=cpl_mask_get_data(bpm_bad));</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   check_nomsg(pbackpix=cpl_image_get_data_int(ima_ybackpix));</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   cpl_msg_debug(cpl_func, <span class="stringliteral">"%d lines detected"</span>, nbad);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordflow">if</span>(nbad)</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       ybad = cpl_calloc(nbad,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       k=0;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="keywordflow">if</span>(pbin[i] == CPL_BINARY_1) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>            ybad[k]=pbackpix[i] + 1;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>            k++;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>       sinfo_free_mask(&bpm_bad);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>       sinfo_free_image(&ima_ybackpix);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>       quicksort_int(&(ybad[0]), 0, nbad-1);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       yprev=-1;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       <span class="keywordflow">for</span>(k=0;k<nbad;k++) {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         yval=ybad[k];</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="keywordflow">if</span>(yval == yprev) {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"skyp %d"</span>,yval);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         }</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>           yprev=yval;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"correct raw %d"</span>,yval);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>           check_nomsg(tot=cpl_image_get_flux_window(ima_in,1,yval,width,yval));</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>           check_nomsg(tot+=cpl_image_get_flux_window(ima_in,sx-width+1,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                             yval,sx,yval));</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>           mean=tot/(2. * width);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>           check_nomsg(pima=cpl_image_get_data_float(*ima_out));</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>           <span class="keywordflow">for</span>(i=width;i<sx-width;i++) {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>         pima[i+(yval-1)*sx]+=(<span class="keywordtype">float</span>)(mean-medvalue);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>           }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>  cleanup:</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   sinfo_free_image(&mask); <span class="comment">//is mask needed?</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   sinfo_free_image(&ima_backpos);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   sinfoni_free_matrix(&filter);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   sinfo_free_image(&ima_filt);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   sinfo_free_image(&ima_diffbackpix);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="comment">//  sinfo_free_mask(&bpm_good);</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   sinfo_free_image(&ima_backpix);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   sinfo_free_mask(&bpm_bad);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   sinfo_free_image(&ima_ybackpix);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   cpl_image_delete(ima);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   cpl_free(ybad);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> }</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="keywordtype">double</span> sinfo_new_my_median_image(cpl_image* im)</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   <span class="keyword">register</span> <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   pixelvalue* pv=0;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   <span class="keywordflow">if</span>(im==NULL) <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Null Image"</span>);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>    <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>       <span class="keywordflow">if</span> ( isnan(pidata[i]) )</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>       n++;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     }</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>    pv = cpl_calloc(n,<span class="keyword">sizeof</span>(pixelvalue));</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>    n=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>    <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       <span class="keywordflow">if</span> ( isnan(pidata[i]) )</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>         {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       pv[n]=pidata[i];</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>           n++;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     }</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>    <span class="keywordflow">if</span>(pv == NULL || n == 0) {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>      m=0;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>      m=sinfo_new_median(pv,n);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>    }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>    cpl_free(pv);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>    <span class="keywordflow">if</span>(isnan(m)){</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>      m=0;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>    }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="keywordflow">return</span> m;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> }</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> Vector * sinfo_new_mean_of_columns( cpl_image *im )</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     Vector * row=NULL ;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     {</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image"</span>) ;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="comment">/* allocate memory for a row with the length of the image x-axis */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keywordflow">if</span> ( NULL == (row = sinfo_new_vector (ilx)) )</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"not able to allocate a sinfo_vector"</span> ) ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     }</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     {</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ily ; j++ )</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>             <span class="keywordflow">if</span> (!isnan(pidata[i+j*ilx]))</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>                 row->data[i] += pidata[i + j*(ilx)] ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         }</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         row->data[i] /= ily ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">return</span> row ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> cpl_image * sinfo_new_clean_mean_of_columns( cpl_image *im,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                              <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                              <span class="keywordtype">float</span> hi_reject)</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     cpl_image     * row=NULL ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     pixelvalue*   buffer=NULL ;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keywordtype">int</span>          i=0;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordtype">int</span>          j=0;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <span class="keywordtype">int</span>          k=0;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordtype">int</span>          nv=0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="keywordtype">int</span>          lo_n=0;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="keywordtype">int</span>          hi_n=0;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     {</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image"</span>) ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     }</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordflow">if</span> ((lo_reject + hi_reject) > 0.9)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal rejection thresholds: [%f] and [%f]"</span>,</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                         lo_reject, hi_reject) ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"threshold sum should not be over "</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                         <span class="stringliteral">"0.90 aborting average"</span>) ;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     }</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     lo_n = (int) (ily * lo_reject + 0.5) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     hi_n = (int) (ily * hi_reject + 0.5) ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     <span class="keywordflow">if</span> (lo_n + hi_n >= ily)</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"everything would be rejected"</span>) ;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="comment">/* allocate memory for a row with the length of the image x-axis */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keywordflow">if</span> ( NULL == (row = cpl_image_new (ilx, 1,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     podata=cpl_image_get_data_float(row);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     buffer=(pixelvalue*) cpl_calloc(ily,<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     {</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ily ; j++ )</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>         {</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>             buffer[j] = pidata[i + j*(ilx)] ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         }</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         sinfo_pixel_qsort (buffer, ily) ;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>         nv = 0 ;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         <span class="keywordflow">for</span> (k = lo_n ; k < ily - hi_n ; k ++)</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>             <span class="keywordflow">if</span> ( !isnan(buffer[k]) )</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             {</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                 podata[i] += buffer[k] ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                 nv ++ ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>             }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         podata[i] /= nv ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     }</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     cpl_free(buffer);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="keywordflow">return</span> row ;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> }</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> cpl_image * sinfo_new_div_image_by_row( cpl_image *im, Vector *row )</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     cpl_image *image=NULL ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="keywordtype">int</span>         i=0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="keywordtype">int</span>         j=0;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordflow">if</span> ( im == NULL || row == NULL )</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     {</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image or null row"</span>) ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keywordflow">if</span> ( ilx != row -> n_elements )</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image and row size not compatible"</span>) ;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     }</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_duplicate (im)) )</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     {</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot copy image"</span>) ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     podata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="keywordflow">for</span> (i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     {</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>         <span class="keywordflow">for</span> (j = 0 ; j < ily ; j++)</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>         {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i + j*(ilx)]) )</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>             {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>                 podata[i + j*(ilx)] = pidata[i + j*(ilx)] / row -> data[i] ;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>             }</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         }</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     }</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> cpl_image * sinfo_new_mult_row_to_image( cpl_image *im, Vector *row )</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> {</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     cpl_image *image=NULL;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordtype">int</span>         i=0;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordtype">int</span>         j=0;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     <span class="keywordflow">if</span> ( im == NULL || row == NULL )</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     {</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image or null row"</span>) ;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     <span class="keywordflow">if</span> ( ilx != row -> n_elements )</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     {</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image and row size not compatible"</span>) ;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     }</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_duplicate (im)) )</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot copy image"</span>) ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     }</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     podata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     <span class="keywordflow">for</span> (i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     {</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>         <span class="keywordflow">for</span> (j = 0 ; j < ily ; j++)</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         {</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i + j*(ilx)]) )</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>             {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>                 podata[i + j*(ilx)] = pidata[i + j*(ilx)] * row -> data[i] ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             }</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> }</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> cpl_image * sinfo_new_col_tilt ( cpl_image * image, <span class="keywordtype">float</span> sigmaFactor )</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     cpl_image   * im=NULL;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     <span class="keywordtype">float</span>      * column=NULL ;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     <span class="keywordtype">double</span>       sum=0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordtype">double</span>  sum2=0;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     <span class="keywordtype">double</span>  mean=0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="keywordtype">float</span>   sinfo_median=0;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keywordtype">float</span>   noise=0 ;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <span class="keywordtype">float</span>      * sig=NULL;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <span class="keywordtype">float</span>    * dat=NULL;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     <span class="keywordtype">float</span>        a=0;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="keywordtype">float</span>        b=0;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     <span class="keywordtype">float</span>        siga=0;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="keywordtype">float</span>        sigb=0;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordtype">float</span>        chi2=0;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keywordtype">float</span>        q=0;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordtype">int</span>          i=0;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordtype">int</span>          j=0;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordtype">int</span>          colnum=0;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordtype">int</span>         npix=0;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordtype">int</span>         mwt=0 ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <span class="keywordtype">float</span>* p_in_data=NULL;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     <span class="keywordtype">float</span>* p_ou_data=NULL;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image given"</span> ) ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no or negative sigma factor"</span>) ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     lx = cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     ly = cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <span class="keywordflow">if</span> ( NULL == (im = cpl_image_new (lx,ly,CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     <span class="comment">/* go through the columns */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     p_in_data = cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     p_ou_data = cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i ++ )</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     {</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>         <span class="comment">/* initialize the buffer variables for each column */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         colnum = 0 ;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>         column = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>         sig    = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>         dat    = (<span class="keywordtype">float</span> *) cpl_calloc ( ly , <span class="keyword">sizeof</span> (<span class="keywordtype">float</span> *) ) ;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>         <span class="comment">/*select only non-ZERO values of one column*/</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ly ; j++ )</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>         {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>             <span class="keywordflow">if</span> ( !isnan(p_in_data[i + j*lx]) )</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>             {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>                 column[j] = p_in_data[i + j*lx] ;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                 colnum ++ ;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>             }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         }</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         <span class="keywordflow">if</span> ( colnum < 10 )</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         {</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>             <span class="comment">/*sinfo_msg_warning ("sinfo_new_col_tilt:",</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">          "column %d has almost only blank pixels and is set to blank", i+1) ;*/</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>             <span class="keywordflow">for</span> ( j = 0 ; j < ly ; j++ )</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>             {</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                 p_ou_data[i + j*lx] = ZERO;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>             }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="comment">            cpl_free (column) ;</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="comment">            cpl_free (sig);</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="comment">            cpl_free (dat) ;</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="comment">            continue ;</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="comment">         * sort the data, clip off the extremes, determine the noise</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="comment">         * and get the range for the valid data. It is assumed here</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="comment">         * that most pixels are o.k.</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>         sinfo_pixel_qsort (column, colnum) ;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>         sum   = 0. ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>         sum2  = 0. ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         npix  = 0  ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>         <span class="keywordflow">for</span> ( j = 0.1*colnum + 1 ; j <= 0.9*colnum ; j++ )</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         {</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>             sum  += column[j] ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>             sum2 += column[j] * column[j] ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>             npix ++ ;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>         }</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>         <span class="keywordflow">if</span> (npix <= 1)</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>         {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>             noise = sigmaFactor * 1000.;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>         }</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         {</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>             mean   = sum/(float)npix ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>             noise  = sqrt( (sum2 - sum*mean)/(<span class="keywordtype">double</span>)(npix -1) ) ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>             noise *= sigmaFactor ;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         }</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>         <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">         * determine sinfo_median if colnum is odd, sinfo_median will be the</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="comment">           colnum/2 th value, otherwise</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="comment">         * sinfo_median is the mean of colnum/2-1 th and colnum/2 th value.</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>         <span class="keywordflow">if</span> ( colnum % 2 == 1 )</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>         {</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>             sinfo_median = column[colnum/2] ;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         }</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         {</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             sinfo_median = (column[colnum/2 - 1] + column[colnum/2])/2. ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>         }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="comment">/* now select the pixels for the tilt calculation */</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         colnum = 0 ;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         <span class="keywordflow">for</span> ( j = 0; j < ly ; j ++ )</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         {</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             <span class="keywordflow">if</span> ( !isnan(p_in_data[i+j*lx]) &&</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>                  fabs ( (p_in_data[i+j*lx]) - sinfo_median) <= noise )</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>             {</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                 column[colnum] = p_in_data[i+j*lx] ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>                 dat[colnum] = (float) j ;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>                 sig[colnum] = 1. ;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>                 colnum ++ ;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>             }</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         }</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         <span class="keywordflow">if</span> ( colnum == 0 )</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>         {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>             <span class="comment">/*for ( j = 0; j < ly; j++ )</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> <span class="comment">                p_ou_data[i+j*lx] -= sinfo_median ;</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> <span class="comment">            }</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="comment">            cpl_free (column) ;</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="comment">            cpl_free (sig)    ;</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> <span class="comment">            cpl_free (dat)    ;</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> <span class="comment">            continue ;*/</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         a=0./0.;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         b=0./0.;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>         }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     {</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>         mwt = 0 ;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         sinfo_my_fit ( dat, column, colnum, sig, mwt, &a,</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>                        &b, &siga, &sigb, &chi2, &q ) ;</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         <span class="keywordflow">if</span> ( fabs(b) >= SLOPE || fabs(a) >= SATURATION  ||</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>              isnan(b) || isnan(a))</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         {</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"linear fit: slope is greater than limit: %f"</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                                <span class="stringliteral">" saturation level is reached: %f in column"</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                                <span class="stringliteral">" number %d "</span>, b, a , i+1) ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         <span class="comment">/* subtract fit or sinfo_median from data */</span></div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>         <span class="keywordflow">for</span> ( j = 0; j < ly; j++ )</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>         {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>             <span class="keywordflow">if</span> ( !isnan(p_in_data[i+j*lx]) &&</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>                  fabs(b) < SLOPE && fabs(a) < SATURATION )</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>             {</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>                 p_ou_data[i+j*lx] = p_in_data[i+j*lx] - (a + b * (float)j) ;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>             }</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(p_in_data[i+j*lx]) )</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>             {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>                 p_ou_data[i+j*lx] = ZERO ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>             }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (fabs(b) >= SLOPE ||</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>                        fabs(a) >= SATURATION || isnan(a) || isnan(b)) &&</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                       !isnan(p_in_data[i+j*lx]) )</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>             {</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>                 p_ou_data[i+j*lx] -= sinfo_median ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>             }</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>             {</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" case is not possible! %f %f"</span>, b,a) ;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>                 <span class="comment">/*cpl_free (column) ;</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="comment">                cpl_free (sig)    ;</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment">                cpl_free (dat)    ;</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> <span class="comment">                cpl_image_delete(im) ;</span></div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> <span class="comment">                return NULL ;*/</span></div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>             }</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>         }</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         cpl_free (column) ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         cpl_free (sig)    ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         cpl_free (dat)    ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordflow">return</span> im     ;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> }</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> cpl_image * sinfo_new_median_image( cpl_image * im, <span class="keywordtype">float</span> fmedian )</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> {</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     cpl_image *   image=NULL       ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     pixelvalue * value=NULL       ;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     pixelvalue   sinfo_median=0      ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     <span class="keywordtype">int</span>        * position=NULL    ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordtype">int</span>          nposition=0   ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     <span class="keywordtype">int</span>          n=0;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     <span class="keywordtype">int</span>          i=0;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     <span class="keywordtype">int</span>          j=0;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     <span class="keywordtype">float</span>* p_in_data=NULL;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     <span class="keywordtype">float</span>* p_ou_data=NULL;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     <span class="keywordtype">int</span> im_size=0;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>     {</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no image input"</span>) ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     }</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     image = cpl_image_duplicate ( im ) ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     im_size=lx*ly;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     p_in_data=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     p_ou_data=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">     * go through all pixels</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     <span class="keywordflow">for</span> ( i = 0 ; i < im_size ; i++ )</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     {</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>         <span class="comment">/* blank pixels are not replaced */</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>         <span class="keywordflow">if</span> ( isnan(p_in_data[i]) )</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>         {</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>             continue ;</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>         }</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <span class="comment">/* initialize the buffer variables for the 8 nearest neighbors */</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>         value = (pixelvalue * )cpl_calloc ( 8, <span class="keyword">sizeof</span> ( pixelvalue * ) ) ;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>         position = ( <span class="keywordtype">int</span> * ) cpl_calloc ( 8, <span class="keyword">sizeof</span> ( <span class="keywordtype">int</span> * ) ) ;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">         * determine the pixel position of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>         position[0] = i + lx - 1 ; <span class="comment">/* upper left  */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>         position[1] = i + lx     ; <span class="comment">/* upper       */</span></div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>         position[2] = i + lx + 1 ; <span class="comment">/* upper right */</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>         position[3] = i + 1      ; <span class="comment">/* right       */</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>         position[4] = i - lx + 1 ; <span class="comment">/* lower right */</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>         position[5] = i - lx     ; <span class="comment">/* lower       */</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>         position[6] = i - lx - 1 ; <span class="comment">/* lower left  */</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>         position[7] = i - 1      ; <span class="comment">/* left        */</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> <span class="comment">         * determine the positions of the image margins, top positions are</span></div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment">           changed to low positions and vice versa. Right positions are</span></div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="comment">           changed to left positions and vice versa.</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         <span class="keywordflow">if</span> ( i >= 0 && i < lx )    <span class="comment">/* bottom line */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>             position[4] += 2 * lx ;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>             position[5] += 2 * lx ;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>             position[6] += 2 * lx ;</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i >= ((<span class="keywordtype">int</span>) lx*ly - lx ) && i < (<span class="keywordtype">int</span>) lx*ly ) <span class="comment">/* top line */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>         {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>             position[0] -= 2 * lx ;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>             position[1] -= 2 * lx ;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>             position[2] -= 2 * lx ;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>         }</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == 0 )    <span class="comment">/* left side */</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         {</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>             position[0] += 2 ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>             position[6] += 2 ;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>             position[7] += 2 ;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i % lx == lx - 1 )    <span class="comment">/* right side */</span></div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         {</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>             position[2] -= 2 ;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>             position[3] -= 2 ;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>             position[4] -= 2 ;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         <span class="comment">/* --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> <span class="comment">         * read the pixel values of the neighboring pixels,</span></div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="comment">         * blanks are not considered</span></div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         nposition = 8 ;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         n = 0 ;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <span class="keywordflow">for</span> ( j = 0 ; j < nposition ; j ++ )</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         {</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>            <span class="keywordflow">if</span>((position[j] >-1 ) && (position[j]<im_size)) {</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>               <span class="keywordflow">if</span> ( !isnan(p_in_data[position[j]]) )</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>               {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>                 value[n] = p_in_data[position[j]] ;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>                 n ++ ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>               }</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>            }</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         }</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>         nposition = n ;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> </div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         <span class="keywordflow">if</span> ( nposition <= 1 )  <span class="comment">/* almost all neighbors are blank */</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         {</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>             p_ou_data[i] = ZERO ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>             cpl_free(value) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>             cpl_free(position) ;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>             continue ;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>         }</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="comment">/* sort the values and determine the sinfo_median */</span></div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         sinfo_pixel_qsort ( value, nposition ) ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>         <span class="keywordflow">if</span> ( nposition % 2 == 1 )</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         {</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>             sinfo_median = value [ nposition/2 ] ;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         {</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>             sinfo_median = ( value [nposition/2 - 1] +</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>                              value [nposition/2] ) / 2. ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>         <span class="comment">/* -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment">         * replace the pixel value by the sinfo_median on conditions:</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">         * fmedian = 0: always replace with sinfo_median.</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="comment">         * fmedian < 0: interpret as absolute condition:</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">         *              if |pixel - sinfo_median| > -fmedian</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment">         *              replace with sinfo_median.</span></div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">         * fmedian > 0: replace by sinfo_median (fmedian as a factor of</span></div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="comment">         *              the square root of the sinfo_median itself)</span></div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">         *              if |pixel - sinfo_median| >= fmedian *</span></div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="comment">                                                     sqrt ( sinfo_median )</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">         *              considers a dependence on the pixel value.</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> <span class="comment">         *              This can be used to consider photon noise.</span></div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>         <span class="keywordflow">if</span> ( fmedian == 0 )</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>         {</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>             p_ou_data[i] = sinfo_median ;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>         }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian < 0 &&</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                   fabs ( sinfo_median - p_in_data[i] ) >= -fmedian )</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>         {</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>             p_ou_data[i] = sinfo_median ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>         }</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( fmedian > 0 &&</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                   fabs ( sinfo_median - p_in_data[i] ) >= fmedian *</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                                                       sqrt(fabs(sinfo_median)) )</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>         {</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>             p_ou_data[i] = sinfo_median ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>         }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>         {</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>             cpl_free (value) ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>             cpl_free (position) ;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>             continue ;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>         }</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         cpl_free (value) ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         cpl_free (position) ;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     }</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> </div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> </div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> cpl_image *</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> sinfo_new_compare_images(cpl_image * im1,cpl_image * im2,cpl_image * origim )</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     cpl_image * image=NULL ;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     <span class="keywordtype">int</span>            i=0 ;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     <span class="keywordtype">float</span>* p_in1_data=NULL;</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordtype">float</span>* p_in2_data=NULL;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     <span class="keywordtype">float</span>* p_ou_data=NULL;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="keywordtype">float</span>* p_org_data=NULL;</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || origim == NULL )</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Null images as input"</span> ) ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     }</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     p_in1_data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     p_in2_data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>     p_org_data=cpl_image_get_data_float(origim);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     {</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"incompatible image sizes"</span> ) ;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>     }</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     <span class="keywordflow">if</span> ( NULL == (image = cpl_image_new ( lx1, ly1, CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     {</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     }</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     p_ou_data=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         <span class="keywordflow">if</span> ( isnan(p_in1_data[i]) && isnan(p_in2_data[i]) )</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         {</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>             p_ou_data[i] = ZERO ;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>         }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>         {</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>             <span class="keywordflow">if</span> ( p_in1_data[i] == p_in2_data[i] )</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>             {</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>                 p_ou_data[i] = p_org_data[i] ;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>             }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>             {</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>                 p_ou_data[i] = ZERO ;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>             }</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>         }</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     }</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> cpl_image *</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> sinfo_new_promote_image_to_mask (cpl_image * im, <span class="keywordtype">int</span> * n_badpixels )</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> {</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>     cpl_image * reImage=NULL ;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     <span class="keywordtype">int</span>        i=0 ;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     <span class="keywordtype">float</span>* p_in_data=NULL;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     <span class="keywordtype">float</span>* p_ou_data=NULL;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     <span class="keywordflow">if</span> ( NULL == im )</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     {</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     }</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     p_in_data=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="comment">/* allocate memory for the returned image */</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     <span class="keywordflow">if</span> ( NULL == (reImage = cpl_image_new (lx,ly,CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image!"</span>) ;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     }</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     p_ou_data=cpl_image_get_data_float(reImage);</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     *n_badpixels = 0 ;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i ++ )</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     {</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>         <span class="keywordflow">if</span> ( isnan(p_in_data[i]) )</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>         {</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>             p_ou_data[i] = 0. ;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>             (*n_badpixels)++ ;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>         }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>         {</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>             p_ou_data[i] = 1. ;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         }</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>     }</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>     <span class="keywordflow">return</span> reImage ;</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> }</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> cpl_image * sinfo_new_mult_image_by_mask (cpl_image * im,cpl_image * mask )</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>     cpl_image * reImage=NULL ;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="keywordtype">int</span>        i=0 ;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     <span class="keywordtype">int</span> ix=0;</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>     <span class="keywordtype">int</span> iy=0;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>     <span class="keywordtype">int</span> mx=0;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     <span class="keywordtype">int</span> my=0;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> </div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>     <span class="keywordflow">if</span> ( NULL == im )</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>     {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     }</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     <span class="keywordflow">if</span> ( NULL == mask )</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>     {</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no mask image given!"</span>) ;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>     }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>     ix=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>     iy=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>     mx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>     my=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> </div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>     <span class="keywordflow">if</span> ( ix != mx || iy != my)</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     {</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image sizes are not correspondent!"</span>) ;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     reImage = cpl_image_duplicate( im ) ;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     podata=cpl_image_get_data_float(reImage);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ix*iy ; i ++ )</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>     {</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>         <span class="keywordflow">if</span> ( pmdata[i] == 0. )</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>         {</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>         }</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     }</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>     <span class="keywordflow">return</span> reImage ;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> }</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> </div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> </div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> cpl_image *</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> sinfo_new_thresh_image (cpl_image * im, <span class="keywordtype">float</span> lo_cut, <span class="keywordtype">float</span> hi_cut )</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> {</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     cpl_image * image=NULL ;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     <span class="keywordtype">float</span>* p_inp_data=NULL;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     <span class="keywordtype">float</span>* p_out_data=NULL;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> </div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordtype">int</span>            i=0 ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordflow">if</span> (im == NULL)</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     {</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image given"</span>) ;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     }</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     image = cpl_image_duplicate(im) ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     p_inp_data=cpl_image_get_data(im);</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     p_out_data=cpl_image_get_data(image);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx*ly ; i ++ )</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     {</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>         <span class="keywordflow">if</span> ( p_inp_data[i] > (pixelvalue) hi_cut ||</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>              p_inp_data[i] < (pixelvalue) lo_cut )</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>              p_out_data[i] = ZERO ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         }</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     }</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> }</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> </div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> cpl_image * sinfo_new_interpol_image ( cpl_image * im,</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>                            cpl_image * mask,</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>                            <span class="keywordtype">int</span>        max_radius,</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>                            <span class="keywordtype">int</span>        n_pixels )</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> {</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     cpl_image * returnImage=NULL ;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordtype">float</span>* neighbors=NULL ;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     <span class="keywordtype">float</span> mean=0;</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     <span class="keywordtype">int</span> n_valid=0;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="keywordtype">int</span> agreed=0;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>     <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     <span class="keywordflow">if</span> ( NULL == im )</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     {</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     }</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> </div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     <span class="keywordflow">if</span> ( NULL == mask )</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>     {</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no mask image given!"</span>) ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     }</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> </div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     mlx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     mly=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     {</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible !"</span>) ;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     }</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> </div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>     <span class="keywordflow">if</span> ( max_radius <= 0 )</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     {</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of pixels for maximal "</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>                         <span class="stringliteral">"search radius given!"</span>) ;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>     }</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> </div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     <span class="keywordflow">if</span> ( n_pixels <= 2 )</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     {</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of pixels used "</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>                         <span class="stringliteral">"for interpolation given!"</span>) ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     }</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> </div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     returnImage = cpl_image_duplicate ( im ) ;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     podata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     <span class="comment">/* go through the columns and rows of the input and mask image */</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     neighbors=cpl_calloc(4*max_radius*max_radius,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>         {</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>             <span class="comment">/* look for the ZEROS that means the detected bad pixels */</span></div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>             <span class="keywordflow">if</span> ( isnan(pmdata[col+row*ilx]) || pmdata[col+row*ilx] == 0. )</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>             {</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>                 <span class="comment">/* now the neighbors must be considered */</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>                 n_valid = 0 ;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>                 agreed  = 0 ;</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>                 <span class="keywordflow">for</span> ( j = 1 ; j <= max_radius ; j++ )</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>                 {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>                     <span class="comment">/* go through the left column */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>                     {</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>                         <span class="keywordflow">if</span> ( col-j >= 0 && row+k < ily && row+k >= 0 )</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>                         {</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>                             <span class="keywordflow">if</span> ( !isnan(pmdata[col-j+(row+k)*mlx]) ||</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>                                  pmdata[col-j+(row+k)*mlx] != 0 )</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>                             {</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>                                 neighbors[n_valid]=pidata[col-j+(row+k)*ilx] ;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>                                 n_valid++ ;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>                             }</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>                         }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>                     }</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>                     <span class="comment">/* go through the upper row */</span></div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>                     {</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>                         <span class="keywordflow">if</span> ( col+k < ilx && col+k >= 0 && row+j < ily )</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>                         {</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                             <span class="keywordflow">if</span> ( !isnan(pmdata[col+k+(row+j)*mlx]) ||</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>                                  pmdata[col+k+(row+j)*mlx] != 0. )</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>                             {</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>                                 neighbors[n_valid]=pidata[col+k+(row+j)*ilx] ;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>                                 n_valid++ ;</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>                             }</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>                         }</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>                     }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>                     <span class="comment">/* go through the right column */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>                     {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>                         <span class="keywordflow">if</span> ( col+j < ilx  && row-k >= 0 && row-k < ily )</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>                         {</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>                             <span class="keywordflow">if</span> ( !isnan(pmdata[col+j+(row-k)*mlx]) ||</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>                                  pmdata[col+j+(row-k)*mlx] != 0. )</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>                             {</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>                                 neighbors[n_valid]=pidata[col+j+(row-k)*ilx] ;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>                                 n_valid++ ;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>                             }</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>                         }</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>                     }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>                     <span class="comment">/* go through the lower row */</span></div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>                     <span class="keywordflow">for</span> ( k = -j ; k < j ; k++ )</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>                     {</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>                         <span class="keywordflow">if</span> ( col-k >= 0 && col-k < ilx && row-j < ily )</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>                         {</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>                             <span class="keywordflow">if</span> ( !isnan(pmdata[col-k+(row-j)*mlx]) ||</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>                                  pmdata[col-k+(row-j)*mlx] != 0. )</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>                             {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>                                 neighbors[n_valid]=pidata[col-k+(row-j)*ilx] ;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>                                 n_valid++ ;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>                             }</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>                         }</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>                     }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> </div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>                     <span class="comment">/* control if the breaking criteria is fullfilled */</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>                     <span class="keywordflow">if</span> ( n_valid >= n_pixels )</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>                     {</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>                         agreed = 1 ;</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>                         break ;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>                     }</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>                     <span class="comment">/* do a break if more than 2 nearest neighbors are found */</span></div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>                     <span class="keywordflow">if</span> ( j == 1 && n_valid >= 2 )</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>                     {</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>                         agreed = 1 ;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>                         break ;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>                     }</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>                 }</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>                 <span class="keywordflow">if</span> ( n_valid < n_pixels && agreed == 0 )</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>                 {</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>                     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough valid neighbors found to "</span></div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>                                     <span class="stringliteral">"interpolate bad pixel in col: "</span></div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>                                     <span class="stringliteral">"%d, row: %d"</span>, col, row ) ;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>                     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>                 }</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>                 {</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>                     <span class="comment">/* ------------------------------------------------------</span></div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> <span class="comment">                     * take the mean of the valid neighboring pixels if less</span></div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> <span class="comment">                     * than 9 valid pixels are available else take the</span></div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> <span class="comment">                       sinfo_median.</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>                     <span class="keywordflow">if</span> ( n_valid <= 8 )</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>                     {</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>                         sum = 0. ;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> </div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>                         <span class="keywordflow">for</span> ( i = 0 ; i < n_valid ; i++ )</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>                         {</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>                             sum += neighbors[i] ;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>                         }</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>                         mean = sum / n_valid ;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>                         podata[col+row*ilx] = mean ;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>                     }</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>                     {</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>                        podata[col+row*ilx]=sinfo_new_median(neighbors,n_valid);</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>                     }</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>                 }</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>             }</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>         }</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     }</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     cpl_free(neighbors);</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> }</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> cpl_image * sinfo_interpol_source_image ( cpl_image * im,</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>                                  cpl_image * mask,</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>                                  <span class="keywordtype">int</span>        max_rad,</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>                                  <span class="keywordtype">float</span>   ** slit_edges )</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> {</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     cpl_image * returnImage=NULL ;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     <span class="keywordtype">float</span> validpixel[6] ;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     <span class="keywordtype">float</span> sum=0 ;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>     <span class="keywordtype">int</span> slitlet=0;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     <span class="keywordtype">int</span> n_slitlets=0;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>     <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> </div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <span class="keywordflow">if</span> ( NULL == im )</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     {</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     }</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> </div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     <span class="keywordflow">if</span> ( NULL == mask )</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     {</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no bad pixel mask image given!"</span>) ;</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     }</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>     mlx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     mly=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> </div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>     {</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible in size!"</span>) ;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     }</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> </div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     <span class="keywordflow">if</span> ( max_rad < 1 )</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>     {</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, wrong maximum distance given!"</span>) ;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     }</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> </div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     <span class="keywordflow">if</span> ( slit_edges == NULL )</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     {</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, array slit_edges is empty!"</span>) ;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     }</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     <span class="comment">/* determine the number of slitlets */</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>     n_slitlets = N_SLITLETS ;</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> </div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>     <span class="comment">/* copy the original image in the image that will be returned */</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>     returnImage = cpl_image_duplicate( im ) ;</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>     podata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> </div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     <span class="comment">/* go through the rows and columns of the image and search for</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">      the bad pixels */</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     {</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>         {</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>             n = 0 ;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>             <span class="keywordflow">if</span> ( isnan(pmdata[col + row*mlx]) ||</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>                  pmdata[col + row*mlx] == 0. ||</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>                  isnan(pidata[col + row*mlx]) )</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>             {</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>                 <span class="comment">/* look for the slitlet where the bad pixel is found */</span></div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>                 slitlet = -1000 ;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>                 <span class="keywordflow">for</span> ( k = 0 ; k < n_slitlets ; k++ )</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>                 {</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>                     <span class="keywordflow">if</span> ( sinfo_new_nint(slit_edges[k][0]) <= col &&</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>                          sinfo_new_nint(slit_edges[k][1]) >= col )</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>                     {</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>                         slitlet = k ;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>                     }</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span> <span class="comment">/* The following else statement is wrong, because in the</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span> <span class="comment">     end slitlet will always be -1000</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> <span class="comment">            else</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> <span class="comment">                    {</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="comment">                        slitlet = -1000 ;</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">                    }</span></div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>                 }</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < 6 ; i++ )</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>                 {</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>                     validpixel[i] = 0. ;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>                 }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>                 <span class="comment">/* look for the valid nearest neighbors</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="comment">                   and collect them but only a maximum of 4 */</span></div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>                 <span class="keywordflow">for</span> ( i = 1 ; i <= max_rad ; i++ )</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>                 {</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>                     <span class="keywordflow">if</span> ( row + i < ily)</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>                     {</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>                         <span class="keywordflow">if</span> ( !isnan(pmdata[col + (row+i) * mlx])</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>                              && pmdata[col + (row+i) * mlx] != 0. &&</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>                                 !isnan(pidata[col + (row+i) * ilx]) )</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>                         {</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>                             validpixel[n] = pidata[col + (row+i) * ilx] ;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>                             n++ ;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>                         }</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>                     }</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>                     <span class="keywordflow">if</span> ( row - i >= 0 )</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>                     {</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>                         <span class="keywordflow">if</span> ( !isnan(pmdata[col + (row-i) * mlx])</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>                              && pmdata[col + (row-i) * mlx] != 0. &&</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>                                 !isnan(pidata[col + (row-i) * ilx]) )</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>                         {</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>                             validpixel[n] = pidata[col + (row-i) * ilx] ;</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>                             n++ ;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>                         }</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>                     }</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> </div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>                     <span class="comment">/* be aware of the slitlet edges in the</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment">                       spatial direction */</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>                     <span class="keywordflow">if</span> ( col + i < ilx )</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>                     {</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>                       <span class="keywordflow">if</span> (  slitlet != -1000 )</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>                       {</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>                          <span class="keywordflow">if</span> (col+i <= sinfo_new_nint(slit_edges[slitlet][1]) &&</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>                              !isnan(pmdata[col + i + row * mlx]) &&</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>                              pmdata[col + i + row * mlx] != 0. &&</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                              !isnan(pidata[col + i + row * ilx]) )</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>                          {</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>                              validpixel[n] = pidata[col + i + row * ilx] ;</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>                              n++ ;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>                          }</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>                       }</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>                     }</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>                     <span class="keywordflow">if</span> ( col - i >= 0 )</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>                     {</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>                       <span class="keywordflow">if</span> ( slitlet != -1000 )</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>                       {</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>                          <span class="keywordflow">if</span> (col-i >= sinfo_new_nint(slit_edges[slitlet][0]) &&</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>                              !isnan(pmdata[col - i + row * mlx]) &&</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>                              pmdata[col - i + row * mlx] != 0. &&</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>                              !isnan(pidata[col - i + row * ilx]) )</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>                          {</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>                              validpixel[n] = pidata[col - i + row * ilx] ;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>                              n++ ;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>                          }</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>                       }</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>                     }</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> </div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>                     <span class="keywordflow">if</span> ( i == 1 && n > 1 )</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>                     {</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                         break ;</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>                     }</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>                     <span class="keywordflow">if</span> ( n > 2 )</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>                     {</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                         break ;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>                     }</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>                 }</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> </div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>                 <span class="keywordflow">if</span> ( n == 0 )</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>                 {</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>                     podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>             <span class="comment">/*sinfo_msg_warning("sinfo_interpolSourceImage:",</span></div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="comment">                                        "bad pixel in column: %d and row: %d"</span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="comment">                                        " could not be interpolated!",col,row);</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment">                             */</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>                 }</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>                 {</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>                     <span class="comment">/* now compute the mean and replace</span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="comment">                       the bad pixel value by the mean */</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>                     sum = 0. ;</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>                     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>                     {</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>                         sum += validpixel[i] ;</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>                     }</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>                     podata[col + row*ilx] = sum/n ;</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>                 }</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>             }</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>         }</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     }</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> }</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> cpl_image * sinfo_new_stack_row_to_image ( Vector * row, <span class="keywordtype">int</span> ly )</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> {</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>     cpl_image * image=NULL;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>     <span class="keywordtype">int</span>        col=0;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>     <span class="keywordtype">int</span>        ro=0;</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> </div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>     <span class="keywordflow">if</span> ( row == NullVector )</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>     {</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Null sinfo_vector as input"</span> ) ;</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>     }</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>     <span class="keywordflow">if</span> ( ly <= 1 )</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>     {</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong image length given"</span> ) ;</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>     }</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>     <span class="keywordflow">if</span> (NULL == (image = cpl_image_new(row->n_elements ,ly,CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>     {</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span> ) ;</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>     }</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>     podata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> </div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>     <span class="keywordflow">for</span> ( col = 0 ; col < row -> n_elements ; col++ )</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>     {</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>         <span class="keywordflow">for</span> ( ro = 0 ; ro < ly ; ro++ )</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>         {</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>             podata[col + ro*ly] = row -> data[col] ;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>         }</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>     }</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>     <span class="keywordflow">return</span> image ;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> Stats * sinfo_new_image_stats_on_rectangle ( cpl_image * im,</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>                                 <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>                                 <span class="keywordtype">float</span>      hiReject,</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>                                 <span class="keywordtype">int</span>        llx,</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>                                 <span class="keywordtype">int</span>        lly,</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>                                 <span class="keywordtype">int</span>        urx,</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>                                 <span class="keywordtype">int</span>        ury )</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> {</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     Stats * retstats=NULL;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     <span class="keywordtype">int</span> npix=0;</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>     <span class="keywordtype">int</span> lo_n=0;</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     <span class="keywordtype">int</span> hi_n=0;</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>     <span class="keywordtype">double</span> pix_sum=0;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>     <span class="keywordtype">double</span> sqr_sum=0;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>     <span class="keywordtype">float</span> * pix_array=NULL;</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     <span class="keywordtype">int</span> im_lx=0;</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>     <span class="keywordtype">int</span> im_ly=0;</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>     <span class="keywordtype">float</span>* pim=NULL;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> </div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>     <span class="keywordflow">if</span> ( NULL == im )</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>     {</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, no input image given!"</span>) ;</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     }</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>     <span class="keywordflow">if</span> ( loReject+hiReject >= 100. )</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>     {</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, too much pixels rejected!"</span>) ;</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>     }</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>     <span class="keywordflow">if</span> ( loReject < 0. || loReject >= 100. ||</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>          hiReject < 0. || hiReject >= 100. )</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     {</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, negative reject values!"</span>) ;</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>     }</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> </div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>     im_lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>     im_ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>     <span class="keywordflow">if</span> ( llx < 0 || lly < 0 || urx < 0 || ury < 0 ||</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>          llx >= im_lx || lly >= im_ly || urx >= im_lx ||</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>          ury >= im_ly || ury <= lly || urx <= llx )</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>     {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sorry, wrong pixel coordinates of rectangle!"</span>) ;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>     }</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>      <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>     retstats = (Stats*) cpl_calloc(1, <span class="keyword">sizeof</span>(Stats)) ;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>     npix = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>     pix_array = (<span class="keywordtype">float</span>*) cpl_calloc ( npix, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> </div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="comment">     * go through the rectangle and copy the pixel values into an array.</span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     n = 0 ;</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>     pim = cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>     <span class="keywordflow">for</span> ( row = lly ; row <= ury ; row++ )</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>     {</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>         <span class="keywordflow">for</span> ( col = llx ; col <= urx ; col++ )</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>         {</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>             <span class="keywordflow">if</span> ( !isnan(pim[col + row*im_lx]) )</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>             {</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>                 pix_array[n] = pim[col + row*im_lx] ;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>                 n++ ;</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>             }</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>     }</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>     }</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span> </div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     npix = n;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>     <span class="comment">/*if (n != npix)</span></div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> <span class="comment">        sinfo_msg_error("the computed number of pixel equals "</span></div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span> <span class="comment">                        "not the counted number, impossible!") ;</span></div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> <span class="comment">        cpl_free(retstats) ;</span></div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> <span class="comment">        cpl_free(pix_array) ;</span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>     <span class="comment">/* determining the clean mean is already done in the recipes */</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>     <span class="keywordflow">if</span> ( FLT_MAX == (retstats->cleanmean = sinfo_new_clean_mean(pix_array,</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>                                            npix, loReject, hiReject)) )</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>     {</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_clean_mean() did not work!"</span>) ;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>         cpl_free(retstats) ;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>         cpl_free(pix_array) ;</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>     }</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> </div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>     <span class="comment">/* now the clean standard deviation must be calculated */</span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>     <span class="comment">/* initialize sums */</span></div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>     lo_n = (int) (loReject / 100. * (<span class="keywordtype">float</span>)npix) ;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>     hi_n = (int) (hiReject / 100. * (<span class="keywordtype">float</span>)npix) ;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>     pix_sum = 0. ;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>     sqr_sum = 0. ;</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>     n = 0 ;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>     <span class="keywordflow">for</span> ( i = lo_n ; i <= npix - hi_n ; i++ )</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>     {</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>         pix_sum += (double)pix_array[i] ;</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>         sqr_sum += ((double)pix_array[i] * (<span class="keywordtype">double</span>)pix_array[i]) ;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>         n++ ;</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>     }</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> </div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>     <span class="keywordflow">if</span> ( n == 0 )</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>     {</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"number of clean pixels is zero!"</span>) ;</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>         cpl_free(retstats) ;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>         cpl_free(pix_array) ;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>     }</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>     retstats -> npix = n ;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>     pix_sum /= (double) n ;</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>     sqr_sum /= (double) n ;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>     retstats -> cleanstdev = (float)sqrt(sqr_sum - pix_sum * pix_sum) ;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>     cpl_free (pix_array) ;</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>     <span class="keywordflow">return</span> retstats ;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> }</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> </div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> </div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> </div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> cpl_image * sinfo_new_normalize_to_central_pixel ( cpl_image * image )</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> {</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>     <span class="keywordtype">float</span>* array=NULL ;</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     <span class="keywordtype">float</span> divisor=0;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     cpl_image * retImage=NULL;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> </div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>     {</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>     }</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> </div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>     retImage = cpl_image_duplicate(image) ;</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> </div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>     n = 0 ;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>     <span class="comment">/* go through the central two image rows and store</span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> <span class="comment">       the values in an array */</span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>     array=cpl_calloc(2*ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>     <span class="keywordflow">for</span> ( row = ily/2 ; row < ily/2+1 ; row++ )</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     {</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>         {</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>             <span class="keywordflow">if</span> ( !isnan(pidata[col+ilx*row]) )</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>             {</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>                 array[n] = pidata[col+ilx*row] ;</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>                 n++ ;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>             }</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>         }</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>     }</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     <span class="comment">/* compute the sinfo_median of the central 2 spectral</span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> <span class="comment">       values of all spatial pixels*/</span></div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>     <span class="keywordflow">if</span> ( isnan(divisor = sinfo_new_median(array, n) ) )</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     {</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no sinfo_median possible!"</span>) ;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>     }</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>     <span class="keywordflow">if</span> ( 0 == divisor )</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>     {</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot divide by 0"</span>) ;</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>     }</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> </div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>     {</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>         <span class="keywordflow">if</span> ( isnan(pidata[i]) )</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>         {</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>         }</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>         {</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>             podata[i] = pidata[i]/divisor ;</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>         }</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>     }</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>     cpl_free(array);</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> }</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span> </div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> </div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span> cpl_image *</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> sinfo_new_mpe_shift_image(</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     cpl_image    *    image_in,</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>     <span class="keywordtype">double</span>       *   interp_kernel)</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> {</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>     cpl_image    *       shifted=NULL ;</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>     pixelvalue  *       first_pass=NULL ;</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>     pixelvalue  *       second_pass=NULL ;</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>     <span class="keywordtype">int</span>          i=0, j=0 ;</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>     <span class="keywordtype">double</span>           fx=0, fy=0 ;</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>     <span class="keywordtype">double</span>           rx=0, ry=0 ;</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     <span class="keywordtype">int</span>             px=0, py=0 ;</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>     <span class="keywordtype">int</span>             tabx=0, taby=0 ;</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>     <span class="keywordtype">double</span>           value=0 ;</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>     <span class="keywordtype">size_t</span>          pos ;</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>     <span class="keyword">register</span> pixelvalue     *   pix ;</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>     <span class="keyword">register</span> pixelvalue     *   pixint ;</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>     <span class="keywordtype">int</span>             mid=0;</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>     <span class="keywordtype">double</span>          norm=0 ;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>     <span class="keywordtype">double</span>       *      ker=NULL ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>     <span class="keywordtype">int</span>                         freeKernel = 1 ;</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> </div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>     <span class="keywordtype">float</span>* psdata=NULL;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> </div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span> </div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>     <span class="comment">/* error handling: test entries */</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> </div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span></div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>     <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>       <span class="keywordflow">return</span> cpl_image_duplicate(image_in) ;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>     ilx=cpl_image_get_size_x(image_in);</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     ily=cpl_image_get_size_y(image_in);</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     pidata=cpl_image_get_data_float(image_in);</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> </div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span> </div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>         <span class="comment">/* See if a kernel needs to be generated */</span></div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     <span class="keywordflow">if</span> (interp_kernel == NULL) {</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>         <span class="keywordflow">if</span> (ker == NULL) {</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure:aborting resampling"</span>) ;</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>         }</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>         ker = interp_kernel ;</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>         freeKernel = 0 ;</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>     }</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> </div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>     first_pass = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>     shifted = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>     psdata=cpl_image_get_data_float(shifted);</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> </div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>     second_pass = psdata ;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span> </div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>     pix = pidata ;</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>     <span class="keywordflow">if</span> ( ilx != 1 )</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>     {</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>     <span class="keywordflow">for</span> (j=0 ; j<ily ; j++)</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>         {</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>          <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>            fx = (double)i-shift_x ;</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>            px = (int)fx ;</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>            rx = fx - (double)px ;</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>            pos = px + j * ilx ;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> </div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>            <span class="keywordflow">if</span> ((px>1) && (px<(ilx-2)))</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>            {</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>            tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>            <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>            <span class="keywordflow">if</span> (isnan(pix[pos]))</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>                {</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>                value = ZERO ;</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>                }</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>                {</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>                <span class="keywordflow">if</span> (isnan(pix[pos-1]))</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>                {</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>                pix[pos-1] = 0. ;</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>                }</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>                <span class="keywordflow">if</span> (isnan(pix[pos+1]))</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>                {</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>                pix[pos+1] = 0. ;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>                }</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>                <span class="keywordflow">if</span> (isnan(pix[pos+2]))</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>                {</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>                pix[pos+2] = 0. ;</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>                }</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> </div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>                <span class="comment">/*</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="comment">            * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment">            * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>                value =     (double)pix[pos-1] * ker[mid+tabx] +</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>                (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>                (double)pix[pos+1] * ker[mid-tabx] +</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>                (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>                <span class="comment">/*</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> <span class="comment">            * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span> <span class="comment">            * for further normalization</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>                norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>                (<span class="keywordtype">double</span>)ker[tabx] +</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>                (<span class="keywordtype">double</span>)ker[mid-tabx] +</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>                (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>                if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>                value /= norm ;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>                }</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>                }</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>            } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>            value = ZERO ;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>            }</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>            <span class="comment">/*</span></div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> <span class="comment">        * There may be a problem of rounding here if pixelvalue</span></div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span> <span class="comment">        * has not enough bits to sustain the accuracy.</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>            <span class="keywordflow">if</span> ( isnan(value) )</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>            {</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>            first_pass[i+j*ilx] = ZERO ;</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>            }</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>            {</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>            first_pass[i+j*ilx] = (pixelvalue)value ;</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>            }</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>          }</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>         }</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>     }</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>     memcpy(first_pass,pix,ily*<span class="keyword">sizeof</span>(pixelvalue));</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>     }</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span> </div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>     pixint = first_pass ;</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>     <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>         <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>             fy = (double)j - shift_y ;</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>             py = (int)fy ;</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>             ry = fy - (double)py ;</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>             pos = i + py * ilx ;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> </div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>             taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> </div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>             <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>                 <span class="keywordflow">if</span> (isnan(pixint[pos]) && ilx != 1 )</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>                 {</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>                     value = ZERO ;</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>                 }</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>                 {</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos-ilx]))</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>                     {</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>                         pixint[pos-ilx] = 0. ;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>                     }</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos+ilx]))</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>                     {</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>                         pixint[pos+ilx] = 0. ;</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>                     }</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos+2*ilx]))</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>                     {</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>                         pixint[pos+2*ilx] = 0. ;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>                     }</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="comment">                     * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment">                     * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>                     value = (double)pixint[pos-ilx] * ker[mid+taby] +</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>                             (double)pixint[pos+ilx] * ker[mid-taby] +</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="comment">                     * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="comment">                     * for further normalization</span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>                                 (<span class="keywordtype">double</span>)ker[taby] +</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>                                 (<span class="keywordtype">double</span>)ker[mid-taby] +</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>                     if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>                         value /= norm ;</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>                     }</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>                 }</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>                 value = ZERO ;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>             }</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>             <span class="keywordflow">if</span> (isnan(value))</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>             {</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>                 second_pass[i+j*ilx] = ZERO ;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>             }</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>             {</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>                 second_pass[i+j*ilx] = (pixelvalue)value ;</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>             }</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>         }</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>     }</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> </div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>     cpl_free(first_pass) ;</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>     <span class="keywordflow">if</span> (freeKernel)</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>         cpl_free(ker) ;</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>     <span class="keywordflow">return</span> shifted ;</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> }</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span> </div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span> </div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> </div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> sinfo_new_shift_image_in_cube(</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>     cpl_image     *   image_in,</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>     <span class="keywordtype">double</span>       *   interp_kernel,</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>     cpl_image     *   shifted,</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>     pixelvalue   *   first_pass)</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span> {</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>     pixelvalue  *       second_pass=NULL ;</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>     <span class="keywordtype">int</span>          i=0, j=0 ;</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>     <span class="keywordtype">double</span>           fx=0, fy=0 ;</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>     <span class="keywordtype">double</span>           rx=0, ry=0 ;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>     <span class="keywordtype">int</span>             px=0, py=0 ;</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>     <span class="keywordtype">int</span>             tabx=0, taby=0 ;</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>     <span class="keywordtype">double</span>           value=0 ;</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>     <span class="keywordtype">size_t</span>          pos ;</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>     <span class="keyword">register</span> pixelvalue     *   pix ;</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>     <span class="keyword">register</span> pixelvalue     *   pixint ;</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>     <span class="keywordtype">int</span>             mid=0;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>     <span class="keywordtype">double</span>          norm=0 ;</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>     <span class="keywordtype">double</span>       *      ker=NULL ;</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>     <span class="keywordtype">int</span>                         freeKernel = 1 ;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span> </div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>     <span class="keywordtype">int</span> slx=0;</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>     <span class="keywordtype">int</span> sly=0;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>     <span class="keywordtype">float</span>* psdata=NULL;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> </div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>     <span class="comment">/* error handling: test entries */</span></div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>         <span class="keywordflow">if</span> (image_in==NULL) shifted = NULL ;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>         pidata=cpl_image_get_data_float(image_in);</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>         ilx=cpl_image_get_size_x(image_in);</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>         ily=cpl_image_get_size_y(image_in);</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> </div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>         shifted=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>         slx=ilx;</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>         sly=ily;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span> </div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>         psdata=cpl_image_get_data_float(shifted);</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> </div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>         <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>         <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>                 memcpy(psdata,pidata, (<span class="keywordtype">size_t</span>) slx*sly * <span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> </div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>         <span class="comment">/* See if a kernel needs to be generated */</span></div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>     <span class="keywordflow">if</span> (interp_kernel == NULL) {</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>         <span class="keywordflow">if</span> (ker == NULL) {</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure:aborting resampling"</span>) ;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>             shifted = NULL ;</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>         }</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>         ker = interp_kernel ;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>         freeKernel = 0 ;</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>     }</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>     second_pass = psdata ;</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> </div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>     pix = pidata ;</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>     <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>         <span class="keywordflow">for</span> (i=1 ; i<ilx-2 ; i++) {</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>             fx = (double)i-shift_x ;</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>             px = (int)fx ;</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>             rx = fx - (double)px ;</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> </div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>             pos = px + j * ilx ;</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>             <span class="keywordflow">if</span> ((px>1) && (px<(ilx-2))) {</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>                 tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span></div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>                 <span class="keywordflow">if</span> (isnan(pix[pos]))</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>                 {</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>                     value = ZERO ;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>                 }</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>                 {</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>                     <span class="keywordflow">if</span> (isnan(pix[pos-1]))</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>                     {</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>                         pix[pos-1] = 0. ;</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>                     }</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>                     <span class="keywordflow">if</span> (isnan(pix[pos+1]))</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>                     {</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>                         pix[pos+1] = 0. ;</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>                     }</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>                     <span class="keywordflow">if</span> (isnan(pix[pos+2]))</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>                     {</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>                         pix[pos+2] = 0. ;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>                     }</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span> <span class="comment">                     * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span> <span class="comment">                     * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>                     value =     (double)pix[pos-1] * ker[mid+tabx] +</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>                                 (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>                                 (double)pix[pos+1] * ker[mid-tabx] +</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>                                 (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> <span class="comment">                     * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment">                     * for further normalization</span></div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>                     norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>                                 (<span class="keywordtype">double</span>)ker[tabx] +</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>                                 (<span class="keywordtype">double</span>)ker[mid-tabx] +</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>                                 (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>                     if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>                         value /= norm ;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>                     }</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>                 }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>                 value = 0.0 ;</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>             }</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> <span class="comment">             * There may be a problem of rounding here if pixelvalue</span></div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> <span class="comment">             * has not enough bits to sustain the accuracy.</span></div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>             <span class="keywordflow">if</span> ( isnan(value) )</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>             {</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>                 first_pass[i+j*ilx] = ZERO ;</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>             }</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>             {</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>                 first_pass[i+j*ilx] = (pixelvalue)value ;</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>             }</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>         }</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>     }</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>     pixint = first_pass ;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>     <span class="keywordflow">for</span> (i=0 ; i< ilx ; i++) {</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>         <span class="keywordflow">for</span> (j=1 ; j< ily-2 ; j++) {</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>             fy = (double)j - shift_y ;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>             py = (int)fy ;</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>             ry = fy - (double)py ;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>             pos = i + py * ilx ;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> </div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>             taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> </div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>             <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>                 <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span></div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>                 <span class="keywordflow">if</span> (isnan(pixint[pos]))</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>                 {</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>                     value = ZERO ;</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>                 }</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>                 {</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos-ilx]))</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>                     {</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>                         pixint[pos-ilx] = 0. ;</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>                     }</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos+ilx]))</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>                     {</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>                         pixint[pos+ilx] = 0. ;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>                     }</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>                     <span class="keywordflow">if</span> (isnan(pixint[pos+2*ilx]))</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>                     {</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>                         pixint[pos+2*ilx] = 0. ;</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>                     }</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="comment">                     * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <span class="comment">                     * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>                     value = (double)pixint[pos-ilx] * ker[mid+taby] +</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>                             (double)pixint[pos+ilx] * ker[mid-taby] +</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> <span class="comment">                     * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> <span class="comment">                     * for further normalization</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>                                 (<span class="keywordtype">double</span>)ker[taby] +</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>                                 (<span class="keywordtype">double</span>)ker[mid-taby] +</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> </div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>                     if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>                         value /= norm ;</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>                     }</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>                 }</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>           <span class="comment">/* value = 0.0 ; AMo: This affect slitlet #1 */</span></div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>             }</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>             <span class="keywordflow">if</span> (isnan(value))</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>             {</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>                 second_pass[i+j*ilx] = ZERO ;</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>             }</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>             {</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>                 second_pass[i+j*ilx] = (pixelvalue)value ;</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>             }</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>         }</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>     }</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> </div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>     <span class="keywordflow">if</span> (freeKernel)</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>         cpl_free(ker) ;</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> }</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> </div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> <span class="comment">/* function to delete the image statistics within python */</span></div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> <span class="keywordtype">void</span> sinfo_new_del_Stats( Stats * st)</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span> {</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>     cpl_free (st) ;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> cpl_image *</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> sinfo_new_combine_masks ( cpl_image * firstMask, cpl_image * secondMask )</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> {</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>     cpl_image * retMask=NULL ;</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>     <span class="keywordtype">int</span> n=0 ;</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>     <span class="keywordtype">float</span>* pm1data=NULL;</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>     <span class="keywordtype">float</span>* pm2data=NULL;</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> </div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>     <span class="keywordflow">if</span> ( firstMask == NULL || secondMask == NULL )</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>     {</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input mask image given!"</span>) ;</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>     }</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>     retMask = cpl_image_duplicate (firstMask) ;</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>     podata = cpl_image_get_data_float(retMask);</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>     pm1data = cpl_image_get_data_float(firstMask);</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>     pm2data = cpl_image_get_data_float(secondMask);</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>     olx=cpl_image_get_size_x(retMask);</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>     oly=cpl_image_get_size_y(retMask);</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span> </div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (int) olx*oly ; n++ )</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>     {</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>        <span class="keywordflow">if</span> ( podata[n] == 0. || pm2data[n] == 0. )</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>        {</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>            podata[n] = 0. ;</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>        }</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>        <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>        {</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>            podata[n] = 1. ;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>        }</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>     }</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>     <span class="keywordflow">return</span> retMask ;</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> }</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span> cpl_image * sinfo_new_slice_cube (cpl_imagelist * cube, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y )</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span> {</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>     cpl_image * retImage=NULL ;</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>     <span class="keywordtype">int</span> col=0, row=0, z=0 ;</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>     cpl_image* img=NULL;</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> </div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>     {</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!"</span>) ;</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>     }</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>     <span class="keywordflow">if</span> ( x > 31 || y > 31 )</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>     {</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wrong x or y values!"</span>) ;</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>     }</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span> </div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>     img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>     ilx=cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>     ily=cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     <span class="keywordflow">if</span> ( x < 0 )</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>     {</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>         <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_new(ilx, inp, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>         {</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>         }</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>         podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>         {</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> </div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>             pidata=cpl_image_get_data_float(cpl_imagelist_get(cube,z));</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>             <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>             {</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>                 podata[col+z*ilx] = pidata[col+y*ilx] ;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>             }</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>         }</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     }</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( y < 0 )</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>     {</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>         <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_new(ily, inp,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>         {</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>         }</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>         podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> </div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>         {</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>             pidata=cpl_image_get_data_float(cpl_imagelist_get(cube,z));</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>             {</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>                 podata[row+z*ily] = pidata[x+row*ily] ;</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>             }</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>         }</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>     }</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>     {</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong input!"</span>) ;</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>     }</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> }</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span> </div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> cpl_image * sinfo_new_div_images_robust ( cpl_image * im1, cpl_image * im2 )</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> {</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>     cpl_image * retIm=NULL ;</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>     <span class="keywordtype">float</span> help=0 ;</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>     <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> </div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>     <span class="keywordtype">float</span>* p1data=NULL;</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>     <span class="keywordtype">float</span>* p2data=NULL;</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> </div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL )</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>     {</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input images given!"</span>) ;</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>     }</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>     p1data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>     p2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> </div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>     {</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images not compatible!"</span>) ;</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>     }</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(lx1, ly1, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>     {</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>     }</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>     podata=cpl_image_get_data_float(retIm);</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span> </div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx2*ly2 ; i++ )</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>     {</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>         <span class="keywordflow">if</span> ( !isnan(p2data[i]) )</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>         {</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>             help = 1./p2data[i] ;</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>             <span class="keywordflow">if</span> (fabs( help )> THRESH )</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>             {</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>                help = 1. ;</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>             }</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>         }</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>         {</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>             help = ZERO ;</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>         }</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>         <span class="keywordflow">if</span> ( isnan(help) || isnan(p1data[i]) )</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>         {</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>         }</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>         {</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>             podata[i] = p1data[i] * help ;</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>         }</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>     }</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span> }</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span> </div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span> cpl_image * sinfo_new_null_edges ( cpl_image * image)</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span> {</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>     cpl_image * <span class="keyword">new</span>=NULL ;</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>     <span class="keywordtype">int</span> i=0,j=0 ;</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span> </div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span> </div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>     {</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>     }</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> </div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> </div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>     <span class="keyword">new</span> = cpl_image_duplicate (image) ;</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>     olx=cpl_image_get_size_x(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>     oly=cpl_image_get_size_y(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>     podata=cpl_image_get_data_float(<span class="keyword">new</span>);</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> </div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>     <span class="keywordflow">for</span> ( i = 0 ; i < olx ; i++ )</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>     {</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>         <span class="keywordflow">for</span> ( j = 0 ; j < 4 ; j++)</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>     {</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>         podata[i+j*olx]=0;</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>         podata[i+(oly-j-1)*olx]=0;</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>     }</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>     }</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>     <span class="keywordflow">for</span> ( i = 0 ; i < oly ; i++ )</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>     {</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>         <span class="keywordflow">for</span> ( j = 0 ; j < 4 ; j++)</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>     {</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>         podata[j+i*olx]=0;</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>         podata[(olx-j-1)+i*olx]=0;</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>     }</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>     }</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>     <span class="keywordflow">return</span> new ;</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> }</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> </div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span> </div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> <span class="keywordtype">void</span> sinfo_new_used_cor_map( cpl_image *im, cpl_image *map)</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span> {</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>     <span class="keywordtype">int</span> i=0,j=0,loc_index=0;</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>     <span class="keywordtype">float</span> temp_array[2048];</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>     <span class="keywordtype">int</span> lx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>     <span class="keywordtype">int</span> ly=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>     <span class="keywordtype">float</span>* pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>     <span class="keywordtype">float</span>* pmdata=cpl_image_get_data_float(map);</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span> </div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>     <span class="keywordflow">for</span>( j=0; j<ly; j++)</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>     {</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>     <span class="keywordflow">for</span>( i=0;i<lx;i++)</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>         {</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>           loc_index = (int)pmdata[i+j*lx];</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>            temp_array[i] = pidata[loc_index+j*lx];</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>         }</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>     <span class="keywordflow">for</span>( i=0;i<lx;i++)</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>         {</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>           pidata[i+j*lx]= temp_array[i];</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>         }</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>     }</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span> }</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span> </div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> </div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span> </div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span> </div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span> </div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span> cpl_image *</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span> sinfo_new_shift_image(</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>     cpl_image    *    image_in,</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>     <span class="keywordtype">double</span>       *    interp_kernel)</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span> {</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>     cpl_image    *    shifted=NULL ;</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>     <span class="keywordtype">float</span>  *    first_pass=NULL ;</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>     <span class="keywordtype">float</span>  *    second_pass=NULL ;</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>     <span class="keywordtype">int</span>             samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>     <span class="keywordtype">int</span>          i=0, j=0 ;</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>     <span class="keywordtype">double</span>           fx=0, fy=0 ;</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>     <span class="keywordtype">double</span>           rx=0, ry=0 ;</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>     <span class="keywordtype">int</span>             px=0, py=0 ;</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>     <span class="keywordtype">int</span>             tabx=0, taby=0 ;</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>     <span class="keywordtype">double</span>           value=0 ;</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>     <span class="keywordtype">size_t</span>          pos ;</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>     <span class="keyword">register</span> <span class="keywordtype">float</span>     *    pix=NULL ;</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>     <span class="keyword">register</span> <span class="keywordtype">float</span>     *    pixint=NULL ;</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>     <span class="keywordtype">int</span>             mid=0;</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>     <span class="keywordtype">double</span>          norm=0 ;</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>     <span class="keywordtype">double</span>       *    ker=NULL ;</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>     <span class="keywordtype">int</span>                freeKernel = 1 ;</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> </div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>     <span class="comment">/* error handling: test entries */</span></div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> </div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span></div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>     <span class="keywordflow">if</span> ((fabs(shift_x)<1e-2) && (fabs(shift_y)<1e-2))</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>         <span class="keywordflow">return</span> cpl_image_duplicate(image_in) ;</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span> </div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>     <span class="comment">/* See if a kernel needs to be generated */</span></div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>     <span class="keywordflow">if</span> (interp_kernel == NULL) {</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>         ker = sinfo_generate_interpolation_kernel(<span class="stringliteral">"default"</span>) ;</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>         <span class="keywordflow">if</span> (ker == NULL) {</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure: aborting resampling"</span>) ;</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>         }</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>         ker = interp_kernel ;</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>         freeKernel = 0 ;</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>     }</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> </div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>     ilx=cpl_image_get_size_x(image_in);</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>     ily=cpl_image_get_size_y(image_in);</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> </div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> </div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>     pix = cpl_image_get_data_float(image_in);</div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>     <span class="keywordflow">if</span> (pix)</div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>     {</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>         mid = (int)samples/(<span class="keywordtype">int</span>)2 ;</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>         first_pass = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>         shifted = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>         second_pass = cpl_image_get_data_float(shifted);</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>         <span class="keywordflow">for</span> (j=0 ; j<ily ; j++) {</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>             <span class="keywordflow">for</span> (i=1 ; i<ilx-2 ; i++) {</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>                 fx = (double)i-shift_x ;</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>                 px = (int)fx ;</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>                 rx = fx - (double)px ;</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> </div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>                 pos = px + j * ilx ;</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> </div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>                 <span class="keywordflow">if</span> ((px>1) && (px<(ilx-3))) {</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>                     tabx = (int)(fabs((<span class="keywordtype">double</span>)mid * rx)) ;</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> <span class="comment">                     * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> <span class="comment">                     * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>                     value =     (double)pix[pos-1] * ker[mid+tabx] +</div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>                                 (<span class="keywordtype">double</span>)pix[pos] * ker[tabx] +</div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>                                 (double)pix[pos+1] * ker[mid-tabx] +</div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>                                 (<span class="keywordtype">double</span>)pix[pos+2] * ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> <span class="comment">                     * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> <span class="comment">                     * for further normalization</span></div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>                     norm =      (<span class="keywordtype">double</span>)ker[mid+tabx] +</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>                                 (<span class="keywordtype">double</span>)ker[tabx] +</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>                                 (<span class="keywordtype">double</span>)ker[mid-tabx] +</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>                                 (<span class="keywordtype">double</span>)ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>                     if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>                         value /= norm ;</div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>                     }</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>                     value = 0.0 ;</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>                 }</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> <span class="comment">                 * There may be a problem of rounding here if pixelvalue</span></div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> <span class="comment">                 * has not enough bits to sustain the accuracy.</span></div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>                 first_pass[i+j*ilx] = (float)value ;</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>             }</div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>         }</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>         pixint = first_pass ;</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>         <span class="keywordflow">for</span> (i=0 ; i<ilx ; i++) {</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>             <span class="keywordflow">for</span> (j=1 ; j<ily-3 ; j++) {</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>                 fy = (double)j - shift_y ;</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>                 py = (int)fy ;</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>                 ry = fy - (double)py ;</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>                 pos = i + py * ilx ;</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> </div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>                 taby = (int)(fabs((<span class="keywordtype">double</span>)mid * ry)) ;</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> </div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>                 <span class="keywordflow">if</span> ((py>(<span class="keywordtype">int</span>)1) && (py<(ily-2))) {</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span> <span class="comment">                     * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> <span class="comment">                     * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>                     value = (double)pixint[pos-ilx] * ker[mid+taby] +</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>                             (<span class="keywordtype">double</span>)pixint[pos] * ker[taby] +</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>                             (double)pixint[pos+ilx] * ker[mid-taby] +</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                             (<span class="keywordtype">double</span>)pixint[pos+2*ilx]*ker[samples-taby-1];</div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>                     <span class="comment">/*</span></div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> <span class="comment">                     * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span> <span class="comment">                     * for further normalization</span></div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> <span class="comment">                     */</span></div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>                     norm =      (<span class="keywordtype">double</span>)ker[mid+taby] +</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>                                 (<span class="keywordtype">double</span>)ker[taby] +</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>                                 (<span class="keywordtype">double</span>)ker[mid-taby] +</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>                                 (<span class="keywordtype">double</span>)ker[samples-taby-1] ;</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> </div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>                     if (fabs(norm) > 1e-4) {</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>                         value /= norm ;</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>                     }</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>                     value = 0.0 ;</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>                 }</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>                 second_pass[i+j*ilx] = (float)value ;</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>             }</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>         }</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>     }</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>     {</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"cannot get a data from an image"</span>);</div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>     }</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>     cpl_free(first_pass) ;</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>     <span class="keywordflow">if</span> (freeKernel)</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>         cpl_free(ker) ;</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>     <span class="keywordflow">return</span> shifted ;</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> }</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> </div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> </div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> </div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> cpl_image *</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> sinfo_image_hermite_interpol(cpl_image * inp)</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> {</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span> </div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span> <span class="comment">   @param xp     x-value to interpolate</span></div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> <span class="comment">   @param x      x-values</span></div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span> <span class="comment">   @param y      y-values</span></div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> <span class="comment">   @param n      array length</span></div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span></div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span> <span class="comment"></span></div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span> <span class="comment">  sinfo_spline_hermite( double xp, const double *x,</span></div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span> <span class="comment">                        const double *y, int n, int *istart );</span></div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span> <span class="comment"></span></div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>   <span class="keywordtype">float</span>* pinp=NULL;</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>   <span class="keywordtype">float</span>* pout=NULL;</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>   <span class="keywordtype">int</span> r=5;</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span> </div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span> </div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);</div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>   check_nomsg(pinp=cpl_image_get_data_float(inp));</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>   check_nomsg(pout=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>       <span class="keywordflow">for</span>(k=-r;k<r;k++) {</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>     pout[j*sx+i]+=pinp[(j+k)*sx+i];</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>       }</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>       pout[j*sx+i]/=2*r;</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>     }</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>   }</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> </div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>  cleanup:</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span> </div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span> </div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>   }</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> </div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> }</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span> </div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> </div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span> </div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span> </div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span> cpl_image *</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span> sinfo_image_smooth_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span> {</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span> </div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span> <span class="comment">   @param xp     x-value to interpolate</span></div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> <span class="comment">   @param x      x-values</span></div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span> <span class="comment">   @param y      y-values</span></div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> <span class="comment">   @param n      array length</span></div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span> <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span></div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span> <span class="comment"></span></div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>   <span class="keywordtype">float</span>* pinp=NULL;</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>   <span class="keywordtype">float</span>* pout=NULL;</div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span> </div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span> </div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>   check_nomsg(pinp=cpl_image_get_data_float(inp));</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>   check_nomsg(pout=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>       <span class="keywordflow">for</span>(k=-r;k<r;k++) {</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>     pout[j*sx+i]+=pinp[(j+k)*sx+i];</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>       }</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>       pout[j*sx+i]/=2*r;</div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>     }</div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>   }</div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> </div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>  cleanup:</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> </div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span> </div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>   }</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> </div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> }</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> </div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span> </div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span> </div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span> cpl_image *</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> sinfo_image_smooth_mean_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span> {</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span> </div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span> <span class="comment">   @param xp     x-value to interpolate</span></div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span> <span class="comment">   @param x      x-values</span></div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span> <span class="comment">   @param y      y-values</span></div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span> <span class="comment">   @param n      array length</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span></div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="comment"></span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>   <span class="keywordtype">float</span>* pinp=NULL;</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>   <span class="keywordtype">float</span>* pout=NULL;</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> </div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> </div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);</div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>   check_nomsg(pinp=cpl_image_get_data_float(inp));</div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>   check_nomsg(pout=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>   <span class="keywordflow">for</span>(j=r;j<sy-r;j++) {</div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>       <span class="keywordflow">for</span>(k=-r;k<r;k++) {</div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>     pout[j*sx+i]+=pinp[(j+k)*sx+i];</div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>       }</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>       pout[j*sx+i]/=2*r;</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>     }</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>   }</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span> </div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>  cleanup:</div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span> </div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span> </div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>   }</div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> </div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span> }</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> </div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span> </div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> </div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span> cpl_image *</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span> sinfo_image_smooth_median_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span> {</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> </div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span> <span class="comment">   @param xp     x-value to interpolate</span></div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span> <span class="comment">   @param x      x-values</span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span> <span class="comment">   @param y      y-values</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> <span class="comment">   @param n      array length</span></div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span> <span class="comment">   @param istart    (input/output) initial row (set to 0 to search all row)</span></div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> <span class="comment"></span></div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>   <span class="keywordtype">float</span>* pout=NULL;</div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span> </div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span> </div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span> </div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);</div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>   check_nomsg(out=cpl_image_duplicate(inp));</div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>   check_nomsg(pout=cpl_image_get_data_float(out));</div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> </div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>   <span class="keywordflow">for</span>(j=r+1;j<sy-r;j++) {</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>     <span class="keywordflow">for</span>(i=1;i<sx;i++) {</div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>       pout[j*sx+i]=(float)cpl_image_get_median_window(inp,i,j,i,j+r);</div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>     }</div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>   }</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span> </div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>  cleanup:</div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span> </div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span> </div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>   }</div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> </div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span> }</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span> </div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span> </div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span> cpl_image *</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> sinfo_image_smooth_fft(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> fy)</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span> {</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span> </div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span> </div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>   cpl_image* out=NULL;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>   cpl_image* im_re=NULL;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>   cpl_image* im_im=NULL;</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>   cpl_image* ifft_re=NULL;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>   cpl_image* ifft_im=NULL;</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>   cpl_image* filter=NULL;</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> </div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>   <span class="keywordtype">int</span> sigma_x=0;</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>   <span class="keywordtype">int</span> sigma_y=fy;</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> </div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>   cknull(inp,<span class="stringliteral">"Null in put image, exit"</span>);</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>   check_nomsg(im_re = cpl_image_cast(inp, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>   check_nomsg(im_im = cpl_image_cast(inp, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span> </div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>   <span class="comment">// Compute FFT</span></div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>   check_nomsg(cpl_image_fft(im_re,im_im,CPL_FFT_DEFAULT));</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span> </div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>   check_nomsg(sx=cpl_image_get_size_x(inp));</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>   check_nomsg(sy=cpl_image_get_size_y(inp));</div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>   sigma_x=sx;</div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span> </div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>   <span class="comment">//Generates filter image</span></div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>   check_nomsg(filter = sinfo_gen_lowpass(sx,sy,sigma_x,sigma_y));</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span> </div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>   <span class="comment">//Apply filter</span></div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>   cpl_image_multiply(im_re,filter);</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>   cpl_image_multiply(im_im,filter);</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span> </div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>   sinfo_free_image(&filter);</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span> </div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>   check_nomsg(ifft_re = cpl_image_duplicate(im_re));</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>   check_nomsg(ifft_im = cpl_image_duplicate(im_im));</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>   sinfo_free_image(&im_re);</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>   sinfo_free_image(&im_im);</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span> </div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>   <span class="comment">//Computes FFT-INVERSE</span></div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>   check_nomsg(cpl_image_fft(ifft_re,ifft_im,CPL_FFT_INVERSE));</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>   check_nomsg(out = cpl_image_cast(ifft_re, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span> </div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>  cleanup:</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span> </div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>   sinfo_free_image(&ifft_re);</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>   sinfo_free_image(&ifft_im);</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>   sinfo_free_image(&filter);</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>   sinfo_free_image(&im_re);</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>   sinfo_free_image(&im_im);</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> </div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>     <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>   }</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span> </div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span> }</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span> </div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span> </div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> </div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span> sinfo_gen_lowpass(<span class="keyword">const</span> <span class="keywordtype">int</span> xs,</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> ys,</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_x,</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> sigma_y)</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span> {</div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>     <span class="keywordtype">int</span> i= 0.0;</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>     <span class="keywordtype">int</span> j= 0.0;</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>     <span class="keywordtype">int</span> hlx= 0.0;</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>     <span class="keywordtype">int</span> hly = 0.0;</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>     <span class="keywordtype">double</span> x= 0.0;</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>     <span class="keywordtype">double</span> y= 0.0;</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>     <span class="keywordtype">double</span> gaussval= 0.0;</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>     <span class="keywordtype">double</span> inv_sigma_x=1./sigma_x;</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>     <span class="keywordtype">double</span> inv_sigma_y=1./sigma_y;</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span> </div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>     <span class="keywordtype">float</span> *data;</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span> </div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>     cpl_image   *lowpass_image=NULL;</div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span> </div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span> </div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>     lowpass_image = cpl_image_new (xs, ys, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>     <span class="keywordflow">if</span> (lowpass_image == NULL) {</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot generate lowpass filter <%s>"</span>,</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>                         cpl_error_get_message());</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>     }</div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span> </div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>     hlx = xs/2;</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>     hly = ys/2;</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span> </div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>     data = cpl_image_get_data_float(lowpass_image);</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span> </div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span> <span class="comment">/* Given an image with pixels 0<=i<N, 0<=j<M then the convolution image</span></div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span> <span class="comment">   has the following properties:</span></div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span> <span class="comment"></span></div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span> <span class="comment">   ima[0][0] = 1</span></div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> <span class="comment">   ima[i][0] = ima[N-i][0] = exp (-0.5 * (i/sig_i)^2)   1<=i<N/2</span></div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span> <span class="comment">   ima[0][j] = ima[0][M-j] = exp (-0.5 * (j/sig_j)^2)   1<=j<M/2</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span> <span class="comment">   ima[i][j] = ima[N-i][j] = ima[i][M-j] = ima[N-i][M-j]</span></div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span> <span class="comment">             = exp (-0.5 * ((i/sig_i)^2 + (j/sig_j)^2))</span></div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span> </div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>     data[0] = 1.0;</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>     <span class="comment">/* first row */</span></div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>     <span class="keywordflow">for</span> (i=1 ; i<=hlx ; i++) {</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>         x = i * inv_sigma_x;</div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>         gaussval = exp(-0.5*x*x);</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>         data[i] = gaussval;</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>         data[xs-i] = gaussval;</div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>     }</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span> </div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>     <span class="keywordflow">for</span> (j=1; j<=hly ; j++) {</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>         y = j * inv_sigma_y;</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>       <span class="comment">/* first column */</span></div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>         data[j*xs] = exp(-0.5*y*y);</div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>         data[(ys-j)*xs] = exp(-0.5*y*y);</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span> </div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>         <span class="keywordflow">for</span> (i=1 ; i<=hlx ; i++) {</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>     <span class="comment">/* Use internal symetries */</span></div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>             x = i * inv_sigma_x;</div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>             gaussval = exp (-0.5*(x*x+y*y));</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>             data[j*xs+i] = gaussval;</div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>             data[(j+1)*xs-i] = gaussval;</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>             data[(ys-j)*xs+i] = gaussval;</div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>             data[(ys+1-j)*xs-i] = gaussval;</div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> </div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>         }</div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>     }</div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span> </div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>     <span class="comment">/* FIXME: for the moment, reset errno which is coming from exp()</span></div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span> <span class="comment">            in first for-loop at i=348. This is causing cfitsio to</span></div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span> <span class="comment">            fail when loading an extension image (bug in cfitsio too).</span></div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>     <span class="keywordflow">if</span>(errno != 0)</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>         errno = 0;</div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span> </div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>     <span class="keywordflow">return</span> lowpass_image;</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span> }</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span> </div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span> <span class="keyword">static</span> <span class="keywordtype">void</span> quicksort_int(<span class="keywordtype">int</span>* data, <span class="keywordtype">int</span> left, <span class="keywordtype">int</span> right)</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> {</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>     <span class="keywordtype">int</span> i = left;</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>     <span class="keywordtype">int</span> j = right;</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>     <span class="keywordtype">int</span> pivot = (i + j) / 2;</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>     <span class="keywordtype">double</span> index_value = data[pivot];</div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>     <span class="keywordflow">do</span></div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>     {</div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>         <span class="keywordflow">while</span>(data[i] < index_value) i++;</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>         <span class="keywordflow">while</span>(data[j] > index_value) j--;</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>         <span class="keywordflow">if</span> (i <= j)</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>         {</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>             <span class="keywordflow">if</span>(i < j)</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>             {</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>                 <span class="keywordtype">int</span> tmp = data[i];</div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>                 data[i]=data[j];</div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>                 data[j]=tmp;</div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>             }</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>             i++;</div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>             j--;</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>         }</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>     } <span class="keywordflow">while</span> (i <= j);</div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span> </div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>     <span class="keywordflow">if</span> (i < right)</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>     {</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>         quicksort_int(data, i, right);</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>     }</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>     <span class="keywordflow">if</span> (left < j)</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>     {</div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>         quicksort_int(data, left, j);</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>     }</div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span> }</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> </div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__image__ops_8h_source.html b/html/sinfo__image__ops_8h_source.html
index c37ec08..98d612c 100644
--- a/html/sinfo__image__ops_8h_source.html
+++ b/html/sinfo__image__ops_8h_source.html
@@ -2,194 +2,225 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_image_ops.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_image_ops.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_IMAGE_OPS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IMAGE_OPS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_image_ops.h,v 1.9 2008/03/25 08:20:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  04/01/06  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_image_ops.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * image arithmetic routines</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_spiffi_types.h"</span> 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span> 
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00043"></a>00043 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 cpl_image *
-<a name="l00048"></a>00048 sinfo_image_smooth_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r);
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 cpl_error_code
-<a name="l00051"></a>00051 sinfo_image_line_corr(<span class="keyword">const</span> <span class="keywordtype">int</span> width,
-<a name="l00052"></a>00052               <span class="keyword">const</span> <span class="keywordtype">int</span> filt_rad,
-<a name="l00053"></a>00053               <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,
-<a name="l00054"></a>00054               cpl_image* ima,
-<a name="l00055"></a>00055               cpl_image** ima_out);
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 
-<a name="l00079"></a>00079 cpl_image *
-<a name="l00080"></a>00080 sinfo_new_shift_image(
-<a name="l00081"></a>00081     cpl_image    *    image_in,
-<a name="l00082"></a>00082     <span class="keywordtype">double</span>           shift_x,
-<a name="l00083"></a>00083     <span class="keywordtype">double</span>           shift_y,
-<a name="l00084"></a>00084     <span class="keywordtype">double</span>       *    interp_kernel) ;
-<a name="l00091"></a>00091 Vector * 
-<a name="l00092"></a>00092 sinfo_new_mean_of_columns( cpl_image * im ) ;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 
-<a name="l00104"></a>00104 <span class="keywordtype">double</span> 
-<a name="l00105"></a>00105 sinfo_new_my_median_image(cpl_image* im);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 cpl_image * 
-<a name="l00109"></a>00109 sinfo_new_clean_mean_of_columns( cpl_image * im,
-<a name="l00110"></a>00110                                <span class="keywordtype">float</span> lo_reject,
-<a name="l00111"></a>00111                                <span class="keywordtype">float</span> hi_reject) ;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 
-<a name="l00122"></a>00122 cpl_image * 
-<a name="l00123"></a>00123 sinfo_new_div_image_by_row( cpl_image * im, Vector * row ) ;
-<a name="l00124"></a>00124 
-<a name="l00133"></a>00133 cpl_image * 
-<a name="l00134"></a>00134 sinfo_new_mult_row_to_image( cpl_image *im, Vector *row ) ;
-<a name="l00135"></a>00135 
-<a name="l00154"></a>00154 cpl_image * 
-<a name="l00155"></a>00155 sinfo_new_col_tilt ( cpl_image * image, <span class="keywordtype">float</span> sigmaFactor ) ;
-<a name="l00176"></a>00176 cpl_image * 
-<a name="l00177"></a>00177 sinfo_new_median_image( cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;
-<a name="l00178"></a>00178 
-<a name="l00189"></a>00189 cpl_image * 
-<a name="l00190"></a>00190 sinfo_new_compare_images(cpl_image * im1, cpl_image * im2, cpl_image * origim);
-<a name="l00201"></a>00201 cpl_image * 
-<a name="l00202"></a>00202 sinfo_new_thresh_image ( cpl_image * im, <span class="keywordtype">float</span> lo_cut, <span class="keywordtype">float</span> hi_cut ) ;
-<a name="l00203"></a>00203 
-<a name="l00215"></a>00215 cpl_image * 
-<a name="l00216"></a>00216 sinfo_new_promote_image_to_mask(cpl_image * im, <span class="keywordtype">int</span> * n_badpixels ) ;
-<a name="l00227"></a>00227 cpl_image * sinfo_new_mult_image_by_mask ( cpl_image * im, cpl_image * mask ) ;
-<a name="l00228"></a>00228 
-<a name="l00251"></a>00251 cpl_image * 
-<a name="l00252"></a>00252 sinfo_new_interpol_image ( cpl_image * im,
-<a name="l00253"></a>00253                            cpl_image * mask,
-<a name="l00254"></a>00254                            <span class="keywordtype">int</span>        max_radius,
-<a name="l00255"></a>00255                            <span class="keywordtype">int</span>        n_pixels ) ;
-<a name="l00256"></a>00256 
-<a name="l00275"></a>00275 cpl_image * 
-<a name="l00276"></a>00276 sinfo_interpol_source_image ( cpl_image * im,
-<a name="l00277"></a>00277                                  cpl_image * mask,
-<a name="l00278"></a>00278                                  <span class="keywordtype">int</span>        max_rad,
-<a name="l00279"></a>00279                                  <span class="keywordtype">float</span>   ** slit_edges ) ;
-<a name="l00280"></a>00280 
-<a name="l00290"></a>00290 cpl_image * 
-<a name="l00291"></a>00291 sinfo_new_stack_row_to_image ( Vector * row, <span class="keywordtype">int</span> ly ) ;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 
-<a name="l00310"></a>00310 Stats * 
-<a name="l00311"></a>00311 sinfo_new_image_stats_on_rectangle ( cpl_image * im,
-<a name="l00312"></a>00312                                 <span class="keywordtype">float</span>      loReject,
-<a name="l00313"></a>00313                                 <span class="keywordtype">float</span>      hiReject,
-<a name="l00314"></a>00314                                 <span class="keywordtype">int</span>        llx,
-<a name="l00315"></a>00315                                 <span class="keywordtype">int</span>        lly,
-<a name="l00316"></a>00316                                 <span class="keywordtype">int</span>        urx,
-<a name="l00317"></a>00317                                 <span class="keywordtype">int</span>        ury ) ;
-<a name="l00318"></a>00318 
-<a name="l00328"></a>00328 cpl_image * 
-<a name="l00329"></a>00329 sinfo_new_normalize_to_central_pixel ( cpl_image * image ) ;
-<a name="l00330"></a>00330 
-<a name="l00361"></a>00361 cpl_image *
-<a name="l00362"></a>00362 sinfo_new_mpe_shift_image(
-<a name="l00363"></a>00363     cpl_image    *    image_in,
-<a name="l00364"></a>00364     <span class="keywordtype">double</span>           shift_x,
-<a name="l00365"></a>00365     <span class="keywordtype">double</span>           shift_y,
-<a name="l00366"></a>00366     <span class="keywordtype">double</span>       *   interp_kernel) ;
-<a name="l00367"></a>00367 
-<a name="l00377"></a>00377 <span class="keywordtype">void</span>
-<a name="l00378"></a>00378 sinfo_new_shift_image_in_cube(
-<a name="l00379"></a>00379     cpl_image     *   image_in,
-<a name="l00380"></a>00380     <span class="keywordtype">double</span>           shift_x,
-<a name="l00381"></a>00381     <span class="keywordtype">double</span>           shift_y,
-<a name="l00382"></a>00382     <span class="keywordtype">double</span>       *   interp_kernel,
-<a name="l00383"></a>00383     cpl_image     *   shifted,
-<a name="l00384"></a>00384     pixelvalue   *   first_pass) ;
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 <span class="keywordtype">void</span> sinfo_new_del_Stats (Stats *) ;
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 
-<a name="l00398"></a>00398 cpl_image * 
-<a name="l00399"></a>00399 sinfo_new_combine_masks ( cpl_image * firstMask, cpl_image * secondMask ) ;
-<a name="l00400"></a>00400 
-<a name="l00411"></a>00411 cpl_image * 
-<a name="l00412"></a>00412 sinfo_new_slice_cube (cpl_imagelist * cube, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y ) ;
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414 
-<a name="l00425"></a>00425 cpl_image * 
-<a name="l00426"></a>00426 sinfo_new_div_images_robust ( cpl_image * im1, cpl_image * im2 ) ;
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430 cpl_image * 
-<a name="l00431"></a>00431 sinfo_new_null_edges ( cpl_image * image) ;
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435 <span class="keywordtype">void</span> 
-<a name="l00436"></a>00436 sinfo_new_used_cor_map( cpl_image *im, cpl_image *map);
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439 cpl_image *
-<a name="l00440"></a>00440 sinfo_image_smooth_mean_y(cpl_image * inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r);
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442 cpl_image *
-<a name="l00443"></a>00443 sinfo_image_smooth_median_y(cpl_image * inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r);
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445 cpl_image *
-<a name="l00446"></a>00446 sinfo_image_hermite_interpol(cpl_image * inp);
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448 cpl_image *
-<a name="l00449"></a>00449 sinfo_image_smooth_fft(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r);
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_image_ops.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_IMAGE_OPS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IMAGE_OPS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_image_ops.h,v 1.9 2008/03/25 08:20:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  04/01/06  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_image_ops.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * image arithmetic routines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_spiffi_types.h"</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> cpl_image *</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> sinfo_image_smooth_y(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> cpl_error_code</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_image_line_corr(<span class="keyword">const</span> <span class="keywordtype">int</span> width,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> filt_rad,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> kappa,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>               cpl_image* ima,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>               cpl_image** ima_out);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> cpl_image *</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_new_shift_image(</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     cpl_image    *    image_in,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordtype">double</span>       *    interp_kernel) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> Vector * </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_new_mean_of_columns( cpl_image * im ) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> sinfo_new_my_median_image(cpl_image* im);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> cpl_image * </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> sinfo_new_clean_mean_of_columns( cpl_image * im,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                                <span class="keywordtype">float</span> hi_reject) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> cpl_image * </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> sinfo_new_div_image_by_row( cpl_image * im, Vector * row ) ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> cpl_image * </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> sinfo_new_mult_row_to_image( cpl_image *im, Vector *row ) ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> cpl_image * </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> sinfo_new_col_tilt ( cpl_image * image, <span class="keywordtype">float</span> sigmaFactor ) ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> cpl_image * </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> sinfo_new_median_image( cpl_image * im, <span class="keywordtype">float</span> fmedian ) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> cpl_image * </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> sinfo_new_compare_images(cpl_image * im1, cpl_image * im2, cpl_image * origim);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> cpl_image * </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> sinfo_new_thresh_image ( cpl_image * im, <span class="keywordtype">float</span> lo_cut, <span class="keywordtype">float</span> hi_cut ) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> cpl_image * </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> sinfo_new_promote_image_to_mask(cpl_image * im, <span class="keywordtype">int</span> * n_badpixels ) ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> cpl_image * sinfo_new_mult_image_by_mask ( cpl_image * im, cpl_image * mask ) ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> cpl_image * </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> sinfo_new_interpol_image ( cpl_image * im,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                            cpl_image * mask,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                            <span class="keywordtype">int</span>        max_radius,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                            <span class="keywordtype">int</span>        n_pixels ) ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> cpl_image * </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> sinfo_interpol_source_image ( cpl_image * im,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                                  cpl_image * mask,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                                  <span class="keywordtype">int</span>        max_rad,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                                  <span class="keywordtype">float</span>   ** slit_edges ) ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> cpl_image * </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> sinfo_new_stack_row_to_image ( Vector * row, <span class="keywordtype">int</span> ly ) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> Stats * </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> sinfo_new_image_stats_on_rectangle ( cpl_image * im,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                 <span class="keywordtype">float</span>      loReject,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                                 <span class="keywordtype">float</span>      hiReject,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                                 <span class="keywordtype">int</span>        llx,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                                 <span class="keywordtype">int</span>        lly,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                                 <span class="keywordtype">int</span>        urx,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                                 <span class="keywordtype">int</span>        ury ) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> cpl_image * </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> sinfo_new_normalize_to_central_pixel ( cpl_image * image ) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> cpl_image *</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> sinfo_new_mpe_shift_image(</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     cpl_image    *    image_in,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordtype">double</span>       *   interp_kernel) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> sinfo_new_shift_image_in_cube(</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     cpl_image     *   image_in,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordtype">double</span>           shift_x,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordtype">double</span>           shift_y,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     <span class="keywordtype">double</span>       *   interp_kernel,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     cpl_image     *   shifted,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     pixelvalue   *   first_pass) ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="keywordtype">void</span> sinfo_new_del_Stats (Stats *) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> cpl_image * </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> sinfo_new_combine_masks ( cpl_image * firstMask, cpl_image * secondMask ) ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> cpl_image * </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> sinfo_new_slice_cube (cpl_imagelist * cube, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y ) ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> cpl_image * </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> sinfo_new_div_images_robust ( cpl_image * im1, cpl_image * im2 ) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> cpl_image * </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> sinfo_new_null_edges ( cpl_image * image) ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> sinfo_new_used_cor_map( cpl_image *im, cpl_image *map);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> cpl_image *</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> sinfo_image_smooth_mean_y(cpl_image * inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> cpl_image *</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> sinfo_image_smooth_median_y(cpl_image * inp,<span class="keyword">const</span> <span class="keywordtype">int</span> r);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> cpl_image *</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> sinfo_image_hermite_interpol(cpl_image * inp);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> cpl_image *</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> sinfo_image_smooth_fft(cpl_image * inp, <span class="keyword">const</span> <span class="keywordtype">int</span> r);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__img__noise_8c_source.html b/html/sinfo__img__noise_8c_source.html
index aa11188..dbaf1c6 100644
--- a/html/sinfo__img__noise_8c_source.html
+++ b/html/sinfo__img__noise_8c_source.html
@@ -2,139 +2,170 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_img_noise.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_img_noise.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_img_noise.c,v 1.3 2009/09/11 10:00:24 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/09/11 10:00:24 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Log: sinfo_img_noise.c,v $</span>
-<a name="l00027"></a>00027 <span class="comment"> * Revision 1.3  2009/09/11 10:00:24  amodigli</span>
-<a name="l00028"></a>00028 <span class="comment"> * put back include of irplib_detmon.h</span>
-<a name="l00029"></a>00029 <span class="comment"> *</span>
-<a name="l00030"></a>00030 <span class="comment"> * Revision 1.2  2009/09/11 09:25:29  kmirny</span>
-<a name="l00031"></a>00031 <span class="comment"> * changing img_noise from cpl to irplib</span>
-<a name="l00032"></a>00032 <span class="comment"> *</span>
-<a name="l00033"></a>00033 <span class="comment"> * Revision 1.1  2009/09/09 14:17:36  kmirny</span>
-<a name="l00034"></a>00034 <span class="comment"> * Adding img_noise recipe based on detmon</span>
-<a name="l00035"></a>00035 <span class="comment"> *</span>
-<a name="l00036"></a>00036 <span class="comment"> */</span>
-<a name="l00037"></a>00037 
-<a name="l00042"></a>00042 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#endif</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                                Includes</span>
-<a name="l00048"></a>00048 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* std libraries */</span>
-<a name="l00051"></a>00051 <span class="comment">//#include <strings.h></span>
-<a name="l00052"></a>00052 <span class="comment">//#include <string.h></span>
-<a name="l00053"></a>00053 <span class="comment">//#include <stdio.h></span>
-<a name="l00054"></a>00054 <span class="comment">//#include <sinfo_general_config.h></span>
-<a name="l00055"></a>00055 <span class="comment">/* cpl */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00060"></a>00060 <span class="comment">//#include "cpl_utils.h"</span>
-<a name="l00061"></a>00061 <span class="comment">//#include "cpl_hist.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <irplib_detmon.h></span>
-<a name="l00063"></a>00063 <span class="comment">/* Define here the DO.CATG keywords */</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#define  SINFO_PERNOISE_RAW "DARK"</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#define RECIPE_NAME "sinfo_img_noise"</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00070"></a>00070 <span class="comment">                Functions prototypes</span>
-<a name="l00071"></a>00071 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="comment">/*static int sinfo_img_noise(cpl_frameset            * frameset,</span>
-<a name="l00073"></a>00073 <span class="comment">               const cpl_parameterlist * parlist);</span>
-<a name="l00074"></a>00074 <span class="comment">*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 CPL_RECIPE_DEFINE(sinfo_img_noise, SINFONI_BINARY_VERSION,
-<a name="l00078"></a>00078              <span class="comment">/* Replace DETMON_BINARY_VERSION with</span>
-<a name="l00079"></a>00079 <span class="comment">            corresponding pipeline macro */</span>
-<a name="l00080"></a>00080         irplib_detmon_fill_pernoise_params_default(recipe->parameters,
-<a name="l00081"></a>00081                                                 RECIPE_NAME,
-<a name="l00082"></a>00082                                                 PACKAGE_TARNAME),
-<a name="l00083"></a>00083              <span class="comment">/* Replace "sinfoni" with PACKAGE_TARNAME</span>
-<a name="l00084"></a>00084 <span class="comment">            when moved into SINFONI */</span>
-<a name="l00085"></a>00085                      <span class="stringliteral">"Konstantin Mirny"</span>, <span class="stringliteral">"kmirny at eso.org"</span>, <span class="stringliteral">"2009"</span>,
-<a name="l00086"></a>00086                      <span class="stringliteral">"Periodic Noise Characterisation recipe"</span>,
-<a name="l00087"></a>00087                      irplib_detmon_pernoise_get_description(RECIPE_NAME, PACKAGE_TARNAME,
-<a name="l00088"></a>00088                              SINFO_PERNOISE_RAW));
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="comment">/*</span>
-<a name="l00091"></a>00091 <span class="comment">CPL_RECIPE_DEFINE(sinfo_img_noise, SINFONI_BINARY_VERSION,</span>
-<a name="l00092"></a>00092 <span class="comment">                  cpl_detmon_fill_pernoise_params_default(</span>
-<a name="l00093"></a>00093 <span class="comment">                                                            recipe->parameters,</span>
-<a name="l00094"></a>00094 <span class="comment">                                                             RECIPE_NAME,</span>
-<a name="l00095"></a>00095 <span class="comment">                                                             PACKAGE_TARNAME),</span>
-<a name="l00096"></a>00096 <span class="comment">                  "Konstantin Mirny", "kmirny at eso.org", "2009",</span>
-<a name="l00097"></a>00097 <span class="comment">                  "Periodic Noise Characterisation recipe",</span>
-<a name="l00098"></a>00098 <span class="comment">                  cpl_detmon_pernoise_get_description(RECIPE_NAME,</span>
-<a name="l00099"></a>00099 <span class="comment">                                                         PACKAGE_TARNAME,</span>
-<a name="l00100"></a>00100 <span class="comment">                                                         SINFO_PERNOISE_RAW));</span>
-<a name="l00101"></a>00101 <span class="comment">*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00103"></a>00103 <span class="comment">/*</span>
-<a name="l00104"></a>00104 <span class="comment">  @brief    Interpret the command line options and execute the data processing</span>
-<a name="l00105"></a>00105 <span class="comment">  @param    frameset    the frames list</span>
-<a name="l00106"></a>00106 <span class="comment">  @param    parlist     the parameters list</span>
-<a name="l00107"></a>00107 <span class="comment">  @return   0 if everything is ok</span>
-<a name="l00108"></a>00108 <span class="comment"> */</span>
-<a name="l00109"></a>00109 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_img_noise(cpl_frameset            * frameset,
-<a name="l00112"></a>00112                <span class="keyword">const</span> cpl_parameterlist * parlist)
-<a name="l00113"></a>00113 {
-<a name="l00114"></a>00114     <span class="keyword">const</span> cpl_error_code error = irplib_detmon_pernoise(frameset,
-<a name="l00115"></a>00115                                                        parlist,
-<a name="l00116"></a>00116                                                        SINFO_PERNOISE_RAW,
-<a name="l00117"></a>00117                                                        RECIPE_NAME,
-<a name="l00118"></a>00118                                                        PACKAGE_TARNAME,
-<a name="l00119"></a>00119                                                        <span class="stringliteral">"FREQ_TABLE"</span>,
-<a name="l00120"></a>00120                                                        PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-<a name="l00121"></a>00121                                                        NULL);
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="comment">/* Propagate the error, if any */</span>
-<a name="l00124"></a>00124     cpl_ensure_code(!error, error);
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00127"></a>00127 }
-<a name="l00128"></a>00128 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_img_noise.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_img_noise.c,v 1.3 2009/09/11 10:00:24 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/09/11 10:00:24 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Log: sinfo_img_noise.c,v $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * Revision 1.3  2009/09/11 10:00:24  amodigli</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * put back include of irplib_detmon.h</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * Revision 1.2  2009/09/11 09:25:29  kmirny</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * changing img_noise from cpl to irplib</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * Revision 1.1  2009/09/09 14:17:36  kmirny</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * Adding img_noise recipe based on detmon</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* std libraries */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">//#include <strings.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">//#include <string.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">//#include <stdio.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">//#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">//#include "cpl_utils.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">//#include "cpl_hist.h"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <irplib_detmon.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/* Define here the DO.CATG keywords */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#define  SINFO_PERNOISE_RAW "DARK"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#define RECIPE_NAME "sinfo_img_noise"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">                Functions prototypes</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*static int sinfo_img_noise(cpl_frameset            * frameset,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">               const cpl_parameterlist * parlist);</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> CPL_RECIPE_DEFINE(sinfo_img_noise, SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>              <span class="comment">/* Replace DETMON_BINARY_VERSION with</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">            corresponding pipeline macro */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         irplib_detmon_fill_pernoise_params_default(recipe->parameters,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                                                 RECIPE_NAME,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                                 PACKAGE_TARNAME),</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>              <span class="comment">/* Replace "sinfoni" with PACKAGE_TARNAME</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">            when moved into SINFONI */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                      <span class="stringliteral">"Konstantin Mirny"</span>, <span class="stringliteral">"kmirny at eso.org"</span>, <span class="stringliteral">"2009"</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                      <span class="stringliteral">"Periodic Noise Characterisation recipe"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                      irplib_detmon_pernoise_get_description(RECIPE_NAME, PACKAGE_TARNAME,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                              SINFO_PERNOISE_RAW));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">CPL_RECIPE_DEFINE(sinfo_img_noise, SINFONI_BINARY_VERSION,</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">                  cpl_detmon_fill_pernoise_params_default(</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">                                                            recipe->parameters,</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                                                             RECIPE_NAME,</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">                                                             PACKAGE_TARNAME),</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">                  "Konstantin Mirny", "kmirny at eso.org", "2009",</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">                  "Periodic Noise Characterisation recipe",</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">                  cpl_detmon_pernoise_get_description(RECIPE_NAME,</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">                                                         PACKAGE_TARNAME,</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">                                                         SINFO_PERNOISE_RAW));</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">  @brief    Interpret the command line options and execute the data processing</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">  @param    frameset    the frames list</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">  @param    parlist     the parameters list</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">  @return   0 if everything is ok</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_img_noise(cpl_frameset            * frameset,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                <span class="keyword">const</span> cpl_parameterlist * parlist)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keyword">const</span> cpl_error_code error = irplib_detmon_pernoise(frameset,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                                        parlist,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                                                        SINFO_PERNOISE_RAW,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                                                        RECIPE_NAME,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                                        PACKAGE_TARNAME,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                                        <span class="stringliteral">"FREQ_TABLE"</span>,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                                        PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                                        NULL);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">/* Propagate the error, if any */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ipow_8c_source.html b/html/sinfo__ipow_8c_source.html
index 236ff7f..10ba7d7 100644
--- a/html/sinfo__ipow_8c_source.html
+++ b/html/sinfo__ipow_8c_source.html
@@ -2,82 +2,113 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ipow.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ipow.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00023"></a>00023 <span class="comment"> * This function is so generic and used everywhere, it diserves its</span>
-<a name="l00024"></a>00024 <span class="comment"> * own source file...</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 <span class="comment">/*</span>
-<a name="l00027"></a>00027 <span class="comment"> $Id: sinfo_ipow.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00028"></a>00028 <span class="comment"> $Author: amodigli $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Revision: 1.4 $</span>
-<a name="l00031"></a>00031 <span class="comment"> */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_ipow.h"</span>
-<a name="l00054"></a>00054 <span class="keywordtype">double</span> sinfo_ipow(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> p)
-<a name="l00055"></a>00055 {
-<a name="l00056"></a>00056     <span class="keywordtype">double</span> r, recip ;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058     <span class="comment">/* Get rid of trivial cases */</span>
-<a name="l00059"></a>00059     <span class="keywordflow">switch</span> (p) {
-<a name="l00060"></a>00060         <span class="keywordflow">case</span> 0:
-<a name="l00061"></a>00061         <span class="keywordflow">return</span> 1.00 ;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063         <span class="keywordflow">case</span> 1:
-<a name="l00064"></a>00064         <span class="keywordflow">return</span> x ;
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066         <span class="keywordflow">case</span> 2:
-<a name="l00067"></a>00067         <span class="keywordflow">return</span> x*x ;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069         <span class="keywordflow">case</span> 3:
-<a name="l00070"></a>00070         <span class="keywordflow">return</span> x*x*x ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072         <span class="keywordflow">case</span> -1:
-<a name="l00073"></a>00073         <span class="keywordflow">return</span> 1.00 / x ;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075         <span class="keywordflow">case</span> -2:
-<a name="l00076"></a>00076         <span class="keywordflow">return</span> (1.00 / x) * (1.00 / x) ;
-<a name="l00077"></a>00077     }
-<a name="l00078"></a>00078     <span class="keywordflow">if</span> (p>0) {
-<a name="l00079"></a>00079         r = x ;
-<a name="l00080"></a>00080         <span class="keywordflow">while</span> (--p) r *= x ;
-<a name="l00081"></a>00081     } <span class="keywordflow">else</span> {
-<a name="l00082"></a>00082         r = recip = 1.00 / x ;
-<a name="l00083"></a>00083         <span class="keywordflow">while</span> (++p) r *= recip ;
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085     <span class="keywordflow">return</span> r;
-<a name="l00086"></a>00086 }
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ipow.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * This function is so generic and used everywhere, it diserves its</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * own source file...</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> $Id: sinfo_ipow.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_ipow.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">double</span> sinfo_ipow(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> p)</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordtype">double</span> r, recip ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="comment">/* Get rid of trivial cases */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>     <span class="keywordflow">switch</span> (p) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordflow">return</span> 1.00 ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordflow">return</span> x ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordflow">return</span> x*x ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordflow">return</span> x*x*x ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordflow">return</span> 1.00 / x ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordflow">case</span> -2:</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordflow">return</span> (1.00 / x) * (1.00 / x) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">if</span> (p>0) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         r = x ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordflow">while</span> (--p) r *= x ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         r = recip = 1.00 / x ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordflow">while</span> (++p) r *= recip ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">return</span> r;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ipow_8h_source.html b/html/sinfo__ipow_8h_source.html
index 8ffa067..f473019 100644
--- a/html/sinfo__ipow_8h_source.html
+++ b/html/sinfo__ipow_8h_source.html
@@ -2,57 +2,88 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ipow.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ipow.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_ipow.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    June 1999</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    integer powers</span>
-<a name="l00025"></a>00025 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"> $Id: sinfo_ipow.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Revision: 1.3 $</span>
-<a name="l00032"></a>00032 <span class="comment"> */</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifndef SINFO_IPOW_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IPOW_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                               Function prototypes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="keywordtype">double</span> 
-<a name="l00054"></a>00054 sinfo_ipow(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> p);
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ipow.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_ipow.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    June 1999</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    integer powers</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Id: sinfo_ipow.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifndef SINFO_IPOW_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IPOW_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_ipow(<span class="keywordtype">double</span> x, <span class="keywordtype">int</span> p);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__irplib__cpl__wrp_8h_source.html b/html/sinfo__irplib__cpl__wrp_8h_source.html
index d23210a..de26972 100644
--- a/html/sinfo__irplib__cpl__wrp_8h_source.html
+++ b/html/sinfo__irplib__cpl__wrp_8h_source.html
@@ -2,69 +2,100 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_irplib_cpl_wrp.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_irplib_cpl_wrp.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_irplib_cpl_wrp.h,v 1.3 2009/10/20 14:32:56 kmirny Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2009 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/10/20 14:32:56 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_IRPLIB_CPL_WRP_H_</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IRPLIB_CPL_WRP_H_</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#if 0 //defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(5, 1, 0)</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FILL_PROLIST(par1, par2, par3, par4) cpl_detmon_fill_prolist(par1, par2, par3, par4);</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG_FILL_PARLIST_NIR_DEFAULT(par1, par2, par3) cpl_detmon_lg_fill_parlist_nir_default(par1, par2, par3);</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17) \</span>
-<a name="l00034"></a>00034 <span class="preprocessor">    cpl_detmon_lg(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17);</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FLAT_FIT_SLOPE_ROBUST(p1, p2, p3) cpl_flat_fit_slope_robust(p1, p2, p3);</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define LG_DESCR(p1, p2, p3, p4) cpl_detmon_lg_get_description(p1, p2, p3, p4)</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#include "irplib_detmon_lg.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_detmon.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "irplib_plugin.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "irplib_calib.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "irplib_flat.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define DETMON_FILL_PROLIST(par1, par2, par3, par4) irplib_detmon_fill_prolist(par1, par2, par3, par4);</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG_FILL_PARLIST_NIR_DEFAULT(par1, par2, par3) irplib_detmon_lg_fill_parlist_nir_default(par1, par2, par3);</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17) \</span>
-<a name="l00046"></a>00046 <span class="preprocessor">    irplib_detmon_lg(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17);</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FLAT_FIT_SLOPE_ROBUST(p1, p2, p3) irplib_flat_fit_slope_robust(p1, p2, p3);</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define LG_DESCR(p1, p2, p3, p4) irplib_detmon_lg_get_description(p1, p2, p3, p4)</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_irplib_cpl_wrp.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_irplib_cpl_wrp.h,v 1.3 2009/10/20 14:32:56 kmirny Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/10/20 14:32:56 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_IRPLIB_CPL_WRP_H_</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_IRPLIB_CPL_WRP_H_</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#if 0 //defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(5, 1, 0)</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FILL_PROLIST(par1, par2, par3, par4) cpl_detmon_fill_prolist(par1, par2, par3, par4);</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG_FILL_PARLIST_NIR_DEFAULT(par1, par2, par3) cpl_detmon_lg_fill_parlist_nir_default(par1, par2, par3);</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17) \</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">    cpl_detmon_lg(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17);</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FLAT_FIT_SLOPE_ROBUST(p1, p2, p3) cpl_flat_fit_slope_robust(p1, p2, p3);</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define LG_DESCR(p1, p2, p3, p4) cpl_detmon_lg_get_description(p1, p2, p3, p4)</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#include "irplib_detmon_lg.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_detmon.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "irplib_plugin.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "irplib_calib.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "irplib_flat.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define DETMON_FILL_PROLIST(par1, par2, par3, par4) irplib_detmon_fill_prolist(par1, par2, par3, par4);</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG_FILL_PARLIST_NIR_DEFAULT(par1, par2, par3) irplib_detmon_lg_fill_parlist_nir_default(par1, par2, par3);</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_LG(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17) \</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">    irplib_detmon_lg(par1, par2, par3, par4, par5, par6, par7, par8, par9, par10,p11,p12,p13,p14,p15,p16,p17);</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define DETMON_FLAT_FIT_SLOPE_ROBUST(p1, p2, p3) irplib_flat_fit_slope_robust(p1, p2, p3);</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define LG_DESCR(p1, p2, p3, p4) irplib_detmon_lg_get_description(p1, p2, p3, p4)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__key__names_8h_source.html b/html/sinfo__key__names_8h_source.html
index 8af6d10..c797ef6 100644
--- a/html/sinfo__key__names_8h_source.html
+++ b/html/sinfo__key__names_8h_source.html
@@ -2,243 +2,274 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_key_names.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_key_names.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_key_names.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_KEY_NAMES_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_KEY_NAMES_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 CPL_BEGIN_DECLS
-<a name="l00034"></a>00034 <span class="preprocessor">#define KEY_NAME_CDELT1                     "CDELT1"</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CDELT2                     "CDELT2"</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CDELT3                     "CDELT3"</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define KEY_NAME_CRPIX1                     "CRPIX1"</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRPIX2                     "CRPIX2"</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRPIX3                     "CRPIX3"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#define KEY_NAME_CRVAL1                     "CRVAL1"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRVAL2                     "CRVAL2"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRVAL3                     "CRVAL3"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#define KEY_NAME_LOOP_STATE                "ESO AOS RTC LOOP STATE"</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LOOP_LGS                  "ESO AOS RTC LOOP LGS"</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_INS1_MODE                 "ESO INS1 MODE"</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define PAF_NAME_LOOP_STATE                "AOS RTC LOOP STATE"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_LOOP_LGS                  "AOS RTC LOOP LGS"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_INS1_MODE                 "INS1 MODE"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define KEY_HELP_LOOP_STATE                "Loop state, open or closed"</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_LOOP_LGS                  "LGS loop on or off"</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_INS1_MODE                 "Instrument mode used."</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define KEY_NAME_CUMOFFX                   "ESO SEQ CUMOFFSETX"</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CUMOFFY                   "ESO SEQ CUMOFFSETY"</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define KEY_NAME_MJD_OBS                   "MJD-OBS"</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_OBS_NAME                   "ESO OBS NAME"</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#define KEY_NAME_PRO_CATG                  "ESO PRO CATG"</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_CATG                  "PRO CATG"</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_CATG                  "Category of pipeline product frame"</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#define KEY_NAME_DET_DIT                   "ESO DET DIT"</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_DIT                   "DET DIT"</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_DIT                   "Integration Time"</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#define KEY_NAME_DET_NDIT                  "ESO DET NDIT"</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_NDIT                  "DET NDIT"</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_NDIT                  "# of Sub-Integrations"</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>
-<a name="l00077"></a>00077 <span class="preprocessor">#define KEY_NAME_NCORRS_NAME               "ESO DET NCORRS NAME"</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_NCORRS_NAME               "DET NCORRS NAME"</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_NCORRS_NAME               "Read-Out Mode Name"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>
-<a name="l00081"></a>00081 <span class="preprocessor">#define KEY_NAME_DET_NDSAMPLES             "ESO DET NDSAMPLES"</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_NDSAMPLES             "# of Non-Dest. Samples"</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_NDSAMPLES             "DET NDSAMPLES"</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="preprocessor">#define KEY_NAME_FILT_NAME                 "ESO INS FILT1 NAME"</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_FILT_NAME                 "INS FILT1 NAME"</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_FILT_NAME                 "Filter name."</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span>
-<a name="l00090"></a>00090 <span class="preprocessor">#define KEY_NAME_FILT_ID                   "ESO INS FILT1 ID"</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_FILT_ID                   "INS FILT1 ID"</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_FILT_ID                   "Filter unique id."</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span>
-<a name="l00094"></a>00094 <span class="preprocessor">#define KEY_NAME_GRAT_NAME                 "ESO INS GRAT1 NAME"</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_GRAT_NAME                 "INS GRAT1 NAME"</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_GRAT_NAME                 "Grating common name."</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>
-<a name="l00098"></a>00098 <span class="preprocessor">#define KEY_NAME_INS_SETUP                 "ESO INS SETUP ID"</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_INS_SETUP                 "INS SETUP ID"</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_INS_SETUP                 "Instrument setup identifier."</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span>
-<a name="l00102"></a>00102 <span class="preprocessor">#define KEY_NAME_GRAT_WLEN                 "ESO INS GRAT1 WLEN"</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_GRAT_WLEN                 "INS GRAT1 WLEN"</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_GRAT_WLEN                 "Grating central wavelength [nm]."</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="preprocessor">#define KEY_NAME_PRO_REC1_RAW1_NAME        "ESO PRO REC1 RAW1 NAME"</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span>
-<a name="l00109"></a>00109 <span class="preprocessor">#define KEY_NAME_LAMP_XE                   "ESO INS1 LAMP1 ST"</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_KR                   "ESO INS1 LAMP2 ST"</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_NE                   "ESO INS1 LAMP3 ST"</span>
-<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_AR                   "ESO INS1 LAMP4 ST"</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_HALO                 "ESO INS1 LAMP5 ST"</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_LAMP_HALO                 "INS1 LAMP5 ST"</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_LAMP_HALO                 "Lamp activated."</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 <span class="preprocessor">#define KEY_NAME_SHUT2_ST                  "ESO INS1 SHUT2 ST"</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_SHUT2_ST                  "INS1 SHUT2 ST"</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_SHUT2_ST                  "Shutter open."</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>
-<a name="l00121"></a>00121 <span class="preprocessor">#define KEY_NAME_PREOPTICS                 "ESO INS OPTI1 NAME"</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PREOPTICS                 "INS OPTI1 NAME"</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PREOPTICS                 "OPTIi name."</span>
-<a name="l00124"></a>00124 <span class="preprocessor"></span>
-<a name="l00125"></a>00125 <span class="preprocessor">#define KEY_NAME_DPR_TYPE                  "ESO DPR TYPE"</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_TYPE                  "DPR TYPE"</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_TYPE                  "Observation type"</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span>
-<a name="l00129"></a>00129 <span class="preprocessor">#define KEY_NAME_DPR_CATG                  "ESO DPR CATG"</span>
-<a name="l00130"></a>00130 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_CATG                  "DPR CATG"</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_CATG                  "Observation category"</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>
-<a name="l00133"></a>00133 <span class="preprocessor">#define KEY_NAME_DPR_TECH                  "ESO DPR TECH"</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_TECH                  "DPR TECH"</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_TECH                  "Observation technique"</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span>
-<a name="l00137"></a>00137 <span class="preprocessor">#define KEY_NAME_PIPE_ID                   "ESO PRO REC1 PIPE ID"</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PIPE_ID                   "PRO REC1 PIPE ID"</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PIPE_ID                   "Pipeline (unique) identifier"</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span>
-<a name="l00141"></a>00141 <span class="preprocessor">#define KEY_NAME_PIPEFILE                  "PIPEFILE"</span>
-<a name="l00142"></a>00142 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PIPEFILE                  "Filename of data product"</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span>
-<a name="l00144"></a>00144 <span class="preprocessor">#define KEY_NAME_PRO_TYPE                  "ESO PRO TYPE"</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_TYPE                  "PRO TYPE"</span>
-<a name="l00146"></a>00146 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_TYPE                  "Product Type"</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span>
-<a name="l00148"></a>00148 <span class="preprocessor">#define KEY_NAME_PRO_REDLEVEL              "ESO PRO REDLEVEL"</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span>
-<a name="l00150"></a>00150 <span class="preprocessor">#define KEY_NAME_PRO_CATG                  "ESO PRO CATG"</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_CATG                  "PRO CATG"</span>
-<a name="l00152"></a>00152 <span class="preprocessor"></span>
-<a name="l00153"></a>00153 <span class="preprocessor">#define KEY_NAME_PRO_STATUS                "ESO PRO STATUS"</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>
-<a name="l00155"></a>00155 <span class="preprocessor">#define KEY_NAME_PRO_DATE                  "ESO PRO DATE"</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span>
-<a name="l00157"></a>00157 <span class="preprocessor">#define KEY_NAME_DATE_OBS                  "DATE-OBS"</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DATE_OBS                  "Observing date"</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span>
-<a name="l00160"></a>00160 <span class="preprocessor">#define KEY_NAME_TEL_AIRM_START            "ESO TEL AIRM START"</span>
-<a name="l00161"></a>00161 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_TEL_AIRM_START            "TEL AIRM START"</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_TEL_AIRM_START            "Airmass at start"</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span>
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 <span class="preprocessor">#define KEY_NAME_ARCFILE                   "ARCFILE"</span>
-<a name="l00167"></a>00167 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_ARCFILE                   "Archive file name"</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span>
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 <span class="preprocessor">#define KEY_NAME_TPL_ID                    "ESO TPL ID"</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_TPL_ID                    "TPL ID"</span>
-<a name="l00172"></a>00172 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_TPL_ID                    "Template sig"</span>
-<a name="l00173"></a>00173 <span class="preprocessor"></span>
-<a name="l00174"></a>00174 <span class="preprocessor">#define KEY_NAME_DATANCOM                  "DATANCOM"</span>
-<a name="l00175"></a>00175 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_PRO_DATANCOM              "ESO PRO DATANCOM"</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_DATANCOM              "PRO DATANCOM"</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_DATANCOM              "Number of frames combined"</span>
-<a name="l00178"></a>00178 <span class="preprocessor"></span>
-<a name="l00179"></a>00179 <span class="preprocessor">#define KEY_NAME_PRO_RECID                "ESO PRO REC1 ID"</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_RECID                "PRO REC1 ID"</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_RECID                "Pipeline recipe (unique) identifier"</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span>
-<a name="l00183"></a>00183 <span class="preprocessor">#define KEY_NAME_PRO_DRSID                 "ESO PRO REC1 DRS ID"</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_DRSID                 "PRO REC1 DRS ID"</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_DRSID                 "Data Reduction System identifier"</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span>
-<a name="l00187"></a>00187 <span class="preprocessor">#define KEY_NAME_HPRO_TYPE                 "HIERARCH ESO PRO TYPE"</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_TYPE                "product type"</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span>
-<a name="l00190"></a>00190 <span class="preprocessor">#define KEY_NAME_HPRO_CATG                 "HIERARCH ESO PRO CATG"</span>
-<a name="l00191"></a>00191 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_CATG                 "product category"</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>
-<a name="l00193"></a>00193 <span class="preprocessor">#define KEY_NAME_HPRO_STATUS               "HIERARCH ESO PRO STATUS"</span>
-<a name="l00194"></a>00194 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_STATUS               "pipeline status"</span>
-<a name="l00195"></a>00195 <span class="preprocessor"></span>
-<a name="l00196"></a>00196 <span class="preprocessor">#define KEY_NAME_HPRO_DATE                 "HIERARCH ESO PRO DATE"</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DATE                 "pipeline execution date"</span>
-<a name="l00198"></a>00198 <span class="preprocessor"></span>
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 <span class="preprocessor">#define KEY_NAME_HPRO_RECID                "HIERARCH ESO PRO REC ID"</span>
-<a name="l00201"></a>00201 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_RECID                "recipe ID"</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span>
-<a name="l00203"></a>00203 <span class="preprocessor">#define KEY_NAME_HPRO_DRSID                "HIERARCH ESO PRO DRS ID"</span>
-<a name="l00204"></a>00204 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DRSID                "data reduction system ID"</span>
-<a name="l00205"></a>00205 <span class="preprocessor"></span>
-<a name="l00206"></a>00206 <span class="preprocessor">#define KEY_NAME_HPRO_DATANCOM             "HIERARCH ESO PRO DATANCOM"</span>
-<a name="l00207"></a>00207 <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_HPRO_DID                  "HIERARCH ESO PRO DID"</span>
-<a name="l00208"></a>00208 <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_DID                 "PRO-1.15"</span>
-<a name="l00209"></a>00209 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DID                  "Data dictionary for PRO"</span>
-<a name="l00210"></a>00210 <span class="preprocessor"></span>
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="preprocessor">#define KEY_NAME_HPRO_DOID                  "HIERARCH ESO PRO DO ID"</span>
-<a name="l00213"></a>00213 <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_DOID                 "DO-1_18"</span>
-<a name="l00214"></a>00214 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DOID                  "Data Organizer identification ID"</span>
-<a name="l00215"></a>00215 <span class="preprocessor"></span>
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 <span class="preprocessor">#define KEY_NAME_HPRO_RBSID                  "HIERARCH ESO PRO RBS ID"</span>
-<a name="l00218"></a>00218 <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_RBSID                 "RBS-1_11"</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_RBSID      "Reduction Block Scheduler identification ID"</span>
-<a name="l00220"></a>00220 <span class="preprocessor"></span>
-<a name="l00221"></a>00221 <span class="preprocessor">#define KEY_NAME_REC1_RAW1_NAME            "ESO PRO REC1 RAW1 NAME"</span>
-<a name="l00222"></a>00222 <span class="preprocessor"></span>
-<a name="l00223"></a>00223 <span class="preprocessor">#define KEY_NAME_GRAT_ENC                  "ESO INS GRAT1 ENC"</span>
-<a name="l00224"></a>00224 <span class="preprocessor"></span>
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 CPL_END_DECLS
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_key_names.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_key_names.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_KEY_NAMES_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_KEY_NAMES_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#define KEY_NAME_CDELT1                     "CDELT1"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CDELT2                     "CDELT2"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CDELT3                     "CDELT3"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#define KEY_NAME_CRPIX1                     "CRPIX1"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRPIX2                     "CRPIX2"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRPIX3                     "CRPIX3"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define KEY_NAME_CRVAL1                     "CRVAL1"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRVAL2                     "CRVAL2"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CRVAL3                     "CRVAL3"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#define KEY_NAME_LOOP_STATE                "ESO AOS RTC LOOP STATE"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LOOP_LGS                  "ESO AOS RTC LOOP LGS"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_INS1_MODE                 "ESO INS1 MODE"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#define PAF_NAME_LOOP_STATE                "AOS RTC LOOP STATE"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_LOOP_LGS                  "AOS RTC LOOP LGS"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_INS1_MODE                 "INS1 MODE"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define KEY_HELP_LOOP_STATE                "Loop state, open or closed"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_LOOP_LGS                  "LGS loop on or off"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_INS1_MODE                 "Instrument mode used."</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#define KEY_NAME_CUMOFFX                   "ESO SEQ CUMOFFSETX"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_CUMOFFY                   "ESO SEQ CUMOFFSETY"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define KEY_NAME_MJD_OBS                   "MJD-OBS"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_OBS_NAME                   "ESO OBS NAME"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#define KEY_NAME_PRO_CATG                  "ESO PRO CATG"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_CATG                  "PRO CATG"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_CATG                  "Category of pipeline product frame"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#define KEY_NAME_DET_DIT                   "ESO DET DIT"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_DIT                   "DET DIT"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_DIT                   "Integration Time"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#define KEY_NAME_DET_NDIT                  "ESO DET NDIT"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_NDIT                  "DET NDIT"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_NDIT                  "# of Sub-Integrations"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#define KEY_NAME_NCORRS_NAME               "ESO DET NCORRS NAME"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_NCORRS_NAME               "DET NCORRS NAME"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_NCORRS_NAME               "Read-Out Mode Name"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">#define KEY_NAME_DET_NDSAMPLES             "ESO DET NDSAMPLES"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DET_NDSAMPLES             "# of Non-Dest. Samples"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DET_NDSAMPLES             "DET NDSAMPLES"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#define KEY_NAME_FILT_NAME                 "ESO INS FILT1 NAME"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_FILT_NAME                 "INS FILT1 NAME"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_FILT_NAME                 "Filter name."</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor">#define KEY_NAME_FILT_ID                   "ESO INS FILT1 ID"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_FILT_ID                   "INS FILT1 ID"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_FILT_ID                   "Filter unique id."</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">#define KEY_NAME_GRAT_NAME                 "ESO INS GRAT1 NAME"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_GRAT_NAME                 "INS GRAT1 NAME"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_GRAT_NAME                 "Grating common name."</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">#define KEY_NAME_INS_SETUP                 "ESO INS SETUP ID"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_INS_SETUP                 "INS SETUP ID"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_INS_SETUP                 "Instrument setup identifier."</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">#define KEY_NAME_GRAT_WLEN                 "ESO INS GRAT1 WLEN"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_GRAT_WLEN                 "INS GRAT1 WLEN"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_GRAT_WLEN                 "Grating central wavelength [nm]."</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">#define KEY_NAME_PRO_REC1_RAW1_NAME        "ESO PRO REC1 RAW1 NAME"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#define KEY_NAME_LAMP_XE                   "ESO INS1 LAMP1 ST"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_KR                   "ESO INS1 LAMP2 ST"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_NE                   "ESO INS1 LAMP3 ST"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_AR                   "ESO INS1 LAMP4 ST"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_LAMP_HALO                 "ESO INS1 LAMP5 ST"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_LAMP_HALO                 "INS1 LAMP5 ST"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_LAMP_HALO                 "Lamp activated."</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">#define KEY_NAME_SHUT2_ST                  "ESO INS1 SHUT2 ST"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_SHUT2_ST                  "INS1 SHUT2 ST"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_SHUT2_ST                  "Shutter open."</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor">#define KEY_NAME_PREOPTICS                 "ESO INS OPTI1 NAME"</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PREOPTICS                 "INS OPTI1 NAME"</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PREOPTICS                 "OPTIi name."</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="preprocessor">#define KEY_NAME_DPR_TYPE                  "ESO DPR TYPE"</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_TYPE                  "DPR TYPE"</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_TYPE                  "Observation type"</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">#define KEY_NAME_DPR_CATG                  "ESO DPR CATG"</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_CATG                  "DPR CATG"</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_CATG                  "Observation category"</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor">#define KEY_NAME_DPR_TECH                  "ESO DPR TECH"</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_DPR_TECH                  "DPR TECH"</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DPR_TECH                  "Observation technique"</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor">#define KEY_NAME_PIPE_ID                   "ESO PRO REC1 PIPE ID"</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PIPE_ID                   "PRO REC1 PIPE ID"</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PIPE_ID                   "Pipeline (unique) identifier"</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">#define KEY_NAME_PIPEFILE                  "PIPEFILE"</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PIPEFILE                  "Filename of data product"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">#define KEY_NAME_PRO_TYPE                  "ESO PRO TYPE"</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_TYPE                  "PRO TYPE"</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_TYPE                  "Product Type"</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor">#define KEY_NAME_PRO_REDLEVEL              "ESO PRO REDLEVEL"</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor">#define KEY_NAME_PRO_CATG                  "ESO PRO CATG"</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_CATG                  "PRO CATG"</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">#define KEY_NAME_PRO_STATUS                "ESO PRO STATUS"</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">#define KEY_NAME_PRO_DATE                  "ESO PRO DATE"</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#define KEY_NAME_DATE_OBS                  "DATE-OBS"</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_DATE_OBS                  "Observing date"</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor">#define KEY_NAME_TEL_AIRM_START            "ESO TEL AIRM START"</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_TEL_AIRM_START            "TEL AIRM START"</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_TEL_AIRM_START            "Airmass at start"</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor">#define KEY_NAME_ARCFILE                   "ARCFILE"</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_ARCFILE                   "Archive file name"</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor">#define KEY_NAME_TPL_ID                    "ESO TPL ID"</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_TPL_ID                    "TPL ID"</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_TPL_ID                    "Template sig"</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor">#define KEY_NAME_DATANCOM                  "DATANCOM"</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_PRO_DATANCOM              "ESO PRO DATANCOM"</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_DATANCOM              "PRO DATANCOM"</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_DATANCOM              "Number of frames combined"</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">#define KEY_NAME_PRO_RECID                "ESO PRO REC1 ID"</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_RECID                "PRO REC1 ID"</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_RECID                "Pipeline recipe (unique) identifier"</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor">#define KEY_NAME_PRO_DRSID                 "ESO PRO REC1 DRS ID"</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_NAME_PRO_DRSID                 "PRO REC1 DRS ID"</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_PRO_DRSID                 "Data Reduction System identifier"</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">#define KEY_NAME_HPRO_TYPE                 "HIERARCH ESO PRO TYPE"</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_TYPE                "product type"</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor">#define KEY_NAME_HPRO_CATG                 "HIERARCH ESO PRO CATG"</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_CATG                 "product category"</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor">#define KEY_NAME_HPRO_STATUS               "HIERARCH ESO PRO STATUS"</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_STATUS               "pipeline status"</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">#define KEY_NAME_HPRO_DATE                 "HIERARCH ESO PRO DATE"</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DATE                 "pipeline execution date"</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">#define KEY_NAME_HPRO_RECID                "HIERARCH ESO PRO REC ID"</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_RECID                "recipe ID"</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">#define KEY_NAME_HPRO_DRSID                "HIERARCH ESO PRO DRS ID"</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DRSID                "data reduction system ID"</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor">#define KEY_NAME_HPRO_DATANCOM             "HIERARCH ESO PRO DATANCOM"</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_NAME_HPRO_DID                  "HIERARCH ESO PRO DID"</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_DID                 "PRO-1.15"</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DID                  "Data dictionary for PRO"</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="preprocessor">#define KEY_NAME_HPRO_DOID                  "HIERARCH ESO PRO DO ID"</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_DOID                 "DO-1_18"</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_DOID                  "Data Organizer identification ID"</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="preprocessor">#define KEY_NAME_HPRO_RBSID                  "HIERARCH ESO PRO RBS ID"</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_VALUE_HPRO_RBSID                 "RBS-1_11"</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor"></span><span class="preprocessor">#define KEY_HELP_HPRO_RBSID      "Reduction Block Scheduler identification ID"</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">#define KEY_NAME_REC1_RAW1_NAME            "ESO PRO REC1 RAW1 NAME"</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="preprocessor">#define KEY_NAME_GRAT_ENC                  "ESO INS GRAT1 ENC"</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__cfg_8c_source.html b/html/sinfo__lamp__cfg_8c_source.html
index c399a03..a5f66b6 100644
--- a/html/sinfo__lamp__cfg_8c_source.html
+++ b/html/sinfo__lamp__cfg_8c_source.html
@@ -2,68 +2,99 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :sinfo_lamp_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author     :Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :March 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :prepare halogen lamp spectrum frames configuration </span>
-<a name="l00025"></a>00025 <span class="comment">                 handling tools</span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                              Function codes</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 lamp_config * 
-<a name="l00052"></a>00052 sinfo_lamp_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00053"></a>00053 {
-<a name="l00054"></a>00054     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(lamp_config));
-<a name="l00055"></a>00055 }
-<a name="l00056"></a>00056 
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> 
-<a name="l00064"></a>00064 sinfo_lamp_cfg_destroy(lamp_config * sc)
-<a name="l00065"></a>00065 {
-<a name="l00066"></a>00066     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     <span class="comment">/* Free main struct */</span>
-<a name="l00069"></a>00069     cpl_free(sc);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071     return ;
-<a name="l00072"></a>00072 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :sinfo_lamp_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author     :Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :March 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :prepare halogen lamp spectrum frames configuration </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                 handling tools</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> lamp_config * </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_lamp_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(lamp_config));</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_lamp_cfg_destroy(lamp_config * sc)</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     return ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__cfg_8h_source.html b/html/sinfo__lamp__cfg_8h_source.html
index 8df7d26..705f2af 100644
--- a/html/sinfo__lamp__cfg_8h_source.html
+++ b/html/sinfo__lamp__cfg_8h_source.html
@@ -2,95 +2,126 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name     :    sinfo_lamp_cfg.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on    :    March 2002</span>
-<a name="l00023"></a>00023 <span class="comment">   Description    :    lamp_ini definitions + handling prototypes</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_LAMP_CFG_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                   Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Defines</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   New types</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment">  prepare lamp spectrum blackboard container</span>
-<a name="l00041"></a>00041 <span class="comment"></span>
-<a name="l00042"></a>00042 <span class="comment">  This structure holds all information related to the halogen lamp </span>
-<a name="l00043"></a>00043 <span class="comment">  spectrum handling</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>lamp_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* file name of the input halogen </span>
-<a name="l00052"></a>00052 <span class="comment">                                        lamp frame */</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> wavemapim[FILE_NAME_SZ] ; <span class="comment">/* file name of the wavelength map */</span>
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits frame */</span>
-<a name="l00055"></a>00055 <span class="comment">/*------ Resampling ------*/</span>
-<a name="l00056"></a>00056         <span class="comment">/* number of coefficients for the polynomial interpolation </span>
-<a name="l00057"></a>00057 <span class="comment">          (order + 1) */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">int</span> ncoeffs ;
-<a name="l00059"></a>00059         <span class="comment">/* number of rows in the resulting resampled image = </span>
-<a name="l00060"></a>00060 <span class="comment">           number of spectral bins */</span>
-<a name="l00061"></a>00061         <span class="keywordtype">int</span> nrows ;
-<a name="l00062"></a>00062 <span class="comment">/*------ Extractspectrum ------*/</span>
-<a name="l00063"></a>00063         <span class="comment">/* percentage of rejected low intensity pixels */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> loReject ;      
-<a name="l00065"></a>00065         <span class="comment">/* percentage of rejected high intensity pixels */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">float</span> hiReject ;
-<a name="l00067"></a>00067         <span class="comment">/* conversion factor of detector counts per intensity unit */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">float</span> countsToIntensity ;
-<a name="l00069"></a>00069 } lamp_config ;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00072"></a>00072 <span class="comment">                               Function prototypes</span>
-<a name="l00073"></a>00073 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 lamp_config * 
-<a name="l00082"></a>00082 sinfo_lamp_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00083"></a>00083 
-<a name="l00091"></a>00091 <span class="keywordtype">void</span> 
-<a name="l00092"></a>00092 sinfo_lamp_cfg_destroy(lamp_config * sc);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name     :    sinfo_lamp_cfg.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on    :    March 2002</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description    :    lamp_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_LAMP_CFG_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">  prepare lamp spectrum blackboard container</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  This structure holds all information related to the halogen lamp </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  spectrum handling</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>lamp_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* file name of the input halogen </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                        lamp frame */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> wavemapim[FILE_NAME_SZ] ; <span class="comment">/* file name of the wavelength map */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits frame */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*------ Resampling ------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="comment">/* number of coefficients for the polynomial interpolation </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">          (order + 1) */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span> ncoeffs ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="comment">/* number of rows in the resulting resampled image = </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">           number of spectral bins */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">int</span> nrows ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*------ Extractspectrum ------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* percentage of rejected low intensity pixels */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> loReject ;      </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* percentage of rejected high intensity pixels */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* conversion factor of detector counts per intensity unit */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">float</span> countsToIntensity ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> } lamp_config ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> lamp_config * </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> sinfo_lamp_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_lamp_cfg_destroy(lamp_config * sc);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__flats__config_8c_source.html b/html/sinfo__lamp__flats__config_8c_source.html
index 8719240..a8d3a4f 100644
--- a/html/sinfo__lamp__flats__config_8c_source.html
+++ b/html/sinfo__lamp__flats__config_8c_source.html
@@ -2,377 +2,408 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_flats_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_flats_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_flats_config.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span> <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_lamp_flats_config.h"</span>
-<a name="l00042"></a>00042 <span class="keywordtype">void</span>
-<a name="l00043"></a>00043  sinfo_lamp_flats_config_add(cpl_parameterlist *list)
-<a name="l00044"></a>00044 {
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046   cpl_parameter *p;
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048   <span class="keywordflow">if</span> (!list) {
-<a name="l00049"></a>00049     <span class="keywordflow">return</span>;
-<a name="l00050"></a>00050   }
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   <span class="comment">/*Reconstruction */</span>
-<a name="l00053"></a>00053  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00054"></a>00054 <span class="comment">the average of columns */</span>
-<a name="l00055"></a>00055   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.low_rejection"</span>,
-<a name="l00056"></a>00056                   CPL_TYPE_DOUBLE,
-<a name="l00057"></a>00057                               <span class="stringliteral">"lower rejection: "</span>
-<a name="l00058"></a>00058                               <span class="stringliteral">"percentage of rejected low intensity "</span>
-<a name="l00059"></a>00059                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00060"></a>00060                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00061"></a>00061                               0.1,0.0,1.0);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-lo_rej"</span>);
-<a name="l00064"></a>00064   cpl_parameterlist_append(list, p);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00067"></a>00067 <span class="comment">    the average of columns */</span>
-<a name="l00068"></a>00068   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.high_rejection"</span>,
-<a name="l00069"></a>00069                   CPL_TYPE_DOUBLE,
-<a name="l00070"></a>00070                               <span class="stringliteral">"high rejection: "</span>
-<a name="l00071"></a>00071                               <span class="stringliteral">"percentage of rejected high intensity "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"pixels before averaging"</span>,
-<a name="l00073"></a>00073                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00074"></a>00074                               0.1,0.0,1.0);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-hi_rej"</span>);
-<a name="l00077"></a>00077   cpl_parameterlist_append(list, p);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080   <span class="comment">/* indicator if the bad pixels of the flatfield should be interpolated */</span>
-<a name="l00081"></a>00081   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.interpol_index"</span>,
-<a name="l00082"></a>00082                   CPL_TYPE_BOOL,
-<a name="l00083"></a>00083                               <span class="stringliteral">"Interpolation index switch: "</span>
-<a name="l00084"></a>00084                               <span class="stringliteral">"indicator if the bad pixels of the flatfield "</span>
-<a name="l00085"></a>00085                               <span class="stringliteral">"should be interpolated"</span>,
-<a name="l00086"></a>00086                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00087"></a>00087                               FALSE);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,
-<a name="l00091"></a>00091                           <span class="stringliteral">"lamp_flats-interpol_index"</span>);
-<a name="l00092"></a>00092   cpl_parameterlist_append(list, p);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094  
-<a name="l00095"></a>00095   <span class="comment">/* maximal pixel distance from bad pixel to take valid pixels */</span>
-<a name="l00096"></a>00096   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.max_rad"</span>,
-<a name="l00097"></a>00097                   CPL_TYPE_INT,
-<a name="l00098"></a>00098                               <span class="stringliteral">"Max Rad: "</span>
-<a name="l00099"></a>00099                               <span class="stringliteral">"maximal pixel distance from bad pixel "</span>
-<a name="l00100"></a>00100                               <span class="stringliteral">"to take valid pixels"</span>,
-<a name="l00101"></a>00101                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00102"></a>00102                               4);
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-max_rad"</span>);
-<a name="l00105"></a>00105   cpl_parameterlist_append(list, p);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108   <span class="comment">/*  indicator if a bad pixel mask should be generated or not */</span> 
-<a name="l00109"></a>00109   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.bad_ind"</span>,
-<a name="l00110"></a>00110                   CPL_TYPE_BOOL,
-<a name="l00111"></a>00111                               <span class="stringliteral">"indicator if a bad pixel mask should be "</span>
-<a name="l00112"></a>00112                               <span class="stringliteral">"generated or not"</span>,
-<a name="l00113"></a>00113                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00114"></a>00114                               FALSE);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_ind"</span>);
-<a name="l00117"></a>00117   cpl_parameterlist_append(list, p);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="comment">/*</span>
-<a name="l00120"></a>00120 <span class="comment">   factor of the sigma noise limit; to remove the column intensity tilt only </span>
-<a name="l00121"></a>00121 <span class="comment">   pixels which lie within a defined noise limit are used to fit a straight </span>
-<a name="l00122"></a>00122 <span class="comment">   line</span>
-<a name="l00123"></a>00123 <span class="comment">  */</span>
-<a name="l00124"></a>00124   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.sigma_factor"</span>,
-<a name="l00125"></a>00125                   CPL_TYPE_DOUBLE,
-<a name="l00126"></a>00126                               <span class="stringliteral">"Sigma Factor: "</span>
-<a name="l00127"></a>00127                               <span class="stringliteral">"factor of the sigma noise limit; "</span>
-<a name="l00128"></a>00128                               <span class="stringliteral">"to remove the column intensity tilt only "</span>
-<a name="l00129"></a>00129                               <span class="stringliteral">"pixels which lie within a defined noise "</span>
-<a name="l00130"></a>00130                               <span class="stringliteral">"limit are used to fit a straight line"</span>,
-<a name="l00131"></a>00131                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00132"></a>00132                               5.);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-sigma_factor"</span>);
-<a name="l00135"></a>00135   cpl_parameterlist_append(list, p);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137   <span class="comment">/* </span>
-<a name="l00138"></a>00138 <span class="comment">   if |pixel - sinfo_median| > factor * standard deviation -> then the</span>
-<a name="l00139"></a>00139 <span class="comment">    pixel value is replaced by the median of the 8 nearest neighbors</span>
-<a name="l00140"></a>00140 <span class="comment">  */</span>
-<a name="l00141"></a>00141   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.factor"</span>,
-<a name="l00142"></a>00142                   CPL_TYPE_DOUBLE,
-<a name="l00143"></a>00143                               <span class="stringliteral">"Factor: "</span>
-<a name="l00144"></a>00144                    <span class="stringliteral">"if |pixel - median| > factor * standard deviation -> "</span>
-<a name="l00145"></a>00145                    <span class="stringliteral">"then the pixel value is replaced by the median of the 8 "</span>
-<a name="l00146"></a>00146                    <span class="stringliteral">"nearest neighbors"</span>,
-<a name="l00147"></a>00147                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00148"></a>00148                               3.);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-factor"</span>);
-<a name="l00151"></a>00151   cpl_parameterlist_append(list, p);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   <span class="comment">/* number of iterations to of sinfo_median filtering to find bad </span>
-<a name="l00154"></a>00154 <span class="comment">     pixel clusters */</span>
-<a name="l00155"></a>00155   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.iterations"</span>,
-<a name="l00156"></a>00156                   CPL_TYPE_INT,
-<a name="l00157"></a>00157                               <span class="stringliteral">"Iterations: "</span>
-<a name="l00158"></a>00158                               <span class="stringliteral">"number of iterations to of median filtering "</span>
-<a name="l00159"></a>00159                               <span class="stringliteral">"to find bad pixel clusters"</span>,
-<a name="l00160"></a>00160                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00161"></a>00161                               8);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-iterations"</span>);
-<a name="l00164"></a>00164   cpl_parameterlist_append(list, p);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166   <span class="comment">/* percentage of rejected low intensity pixels before averaging */</span>
-<a name="l00167"></a>00167   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.bad_low_rejection"</span>,
-<a name="l00168"></a>00168                   CPL_TYPE_DOUBLE,
-<a name="l00169"></a>00169                               <span class="stringliteral">"low rejection: "</span>
-<a name="l00170"></a>00170                               <span class="stringliteral">"Percentage for bad pixel low rejection"</span>,
-<a name="l00171"></a>00171                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00172"></a>00172                               10.,0.,100.);
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_lo_rej"</span>);
-<a name="l00175"></a>00175   cpl_parameterlist_append(list, p);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="comment">/* percentage of rejected high intensity pixels before averaging */</span>
-<a name="l00178"></a>00178   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.bad_high_rejection"</span>,
-<a name="l00179"></a>00179                   CPL_TYPE_DOUBLE,
-<a name="l00180"></a>00180                               <span class="stringliteral">"high rejection: "</span>
-<a name="l00181"></a>00181                               <span class="stringliteral">"Percentage for bad pixel high rejection"</span>,
-<a name="l00182"></a>00182                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00183"></a>00183                               10.,0.,100.);
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_hi_rej"</span>);
-<a name="l00186"></a>00186   cpl_parameterlist_append(list, p);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189   <span class="comment">/* to compute image statistics on a rectangular zone of the image</span>
-<a name="l00190"></a>00190 <span class="comment">     the coordinates of the rectangle are needed</span>
-<a name="l00191"></a>00191 <span class="comment">  */</span>
-<a name="l00192"></a>00192   <span class="comment">/* lower left x coordinate */</span>
-<a name="l00193"></a>00193   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.llx"</span>,
-<a name="l00194"></a>00194                   CPL_TYPE_INT,
-<a name="l00195"></a>00195                               <span class="stringliteral">"Lower Lext X corner"</span>,
-<a name="l00196"></a>00196                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00197"></a>00197                               1350,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-llx"</span>);
-<a name="l00200"></a>00200   cpl_parameterlist_append(list, p);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202   <span class="comment">/* lower left y coordinate */</span>
-<a name="l00203"></a>00203   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.lly"</span>,
-<a name="l00204"></a>00204                   CPL_TYPE_INT,
-<a name="l00205"></a>00205                               <span class="stringliteral">"Lower Lext Y corner"</span>,
-<a name="l00206"></a>00206                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00207"></a>00207                               1000,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-lly"</span>);
-<a name="l00210"></a>00210   cpl_parameterlist_append(list, p);
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   <span class="comment">/* upper right x coordinate */</span>
-<a name="l00213"></a>00213   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.urx"</span>,
-<a name="l00214"></a>00214                   CPL_TYPE_INT,
-<a name="l00215"></a>00215                               <span class="stringliteral">"Upper right X corner"</span>,
-<a name="l00216"></a>00216                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00217"></a>00217                               1390,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-rrx"</span>);
-<a name="l00220"></a>00220   cpl_parameterlist_append(list, p);
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="comment">/* upper right y coordinate */</span>
-<a name="l00223"></a>00223   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.ury"</span>,
-<a name="l00224"></a>00224                   CPL_TYPE_INT,
-<a name="l00225"></a>00225                               <span class="stringliteral">"Upper right Y corner"</span>,
-<a name="l00226"></a>00226                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00227"></a>00227                               1200,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-ury"</span>);
-<a name="l00230"></a>00230   cpl_parameterlist_append(list, p);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   <span class="comment">/* indicator that indicates if the values beyond a threshold deviation */</span>
-<a name="l00233"></a>00233   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.thresh_ind"</span>,
-<a name="l00234"></a>00234                   CPL_TYPE_BOOL,
-<a name="l00235"></a>00235                               <span class="stringliteral">"Treshold index: "</span>,
-<a name="l00236"></a>00236                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00237"></a>00237                               FALSE);
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-tresh_ind"</span>);
-<a name="l00241"></a>00241   cpl_parameterlist_append(list, p);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243   <span class="comment">/* </span>
-<a name="l00244"></a>00244 <span class="comment">  factor to the clean standard deviation to define the threshold deviation</span>
-<a name="l00245"></a>00245 <span class="comment">  from the clean mean</span>
-<a name="l00246"></a>00246 <span class="comment">  */</span>
-<a name="l00247"></a>00247   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.mean_factor"</span>,
-<a name="l00248"></a>00248                   CPL_TYPE_DOUBLE,
-<a name="l00249"></a>00249                               <span class="stringliteral">"Mean Factor: "</span>
-<a name="l00250"></a>00250                               <span class="stringliteral">"factor to the clean standard deviation to "</span>
-<a name="l00251"></a>00251                               <span class="stringliteral">"define the threshold deviation "</span>
-<a name="l00252"></a>00252                               <span class="stringliteral">"from the clean mean"</span>,
-<a name="l00253"></a>00253                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00254"></a>00254                               10.);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-mean_factor"</span>);
-<a name="l00257"></a>00257   cpl_parameterlist_append(list, p);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260   <span class="comment">/* QC LOG */</span>
-<a name="l00261"></a>00261  <span class="comment">/* FPN */</span>
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin1"</span>,
-<a name="l00265"></a>00265                   CPL_TYPE_INT,
-<a name="l00266"></a>00266                               <span class="stringliteral">"qc_fpn_xmin1"</span>,
-<a name="l00267"></a>00267                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00268"></a>00268                               512,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmin1"</span>);
-<a name="l00271"></a>00271   cpl_parameterlist_append(list, p);
-<a name="l00272"></a>00272   
-<a name="l00273"></a>00273  
-<a name="l00274"></a>00274   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax1"</span>,
-<a name="l00275"></a>00275                   CPL_TYPE_INT,
-<a name="l00276"></a>00276                               <span class="stringliteral">"qc_fpn_xmax1"</span>,
-<a name="l00277"></a>00277                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00278"></a>00278                               1536,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmax1"</span>);
-<a name="l00281"></a>00281   cpl_parameterlist_append(list, p);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin1"</span>,
-<a name="l00284"></a>00284                   CPL_TYPE_INT,
-<a name="l00285"></a>00285                               <span class="stringliteral">"qc_fpn_ymin1"</span>,
-<a name="l00286"></a>00286                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00287"></a>00287                               512,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymin1"</span>);
-<a name="l00290"></a>00290   cpl_parameterlist_append(list, p);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax1"</span>,
-<a name="l00294"></a>00294                   CPL_TYPE_INT,
-<a name="l00295"></a>00295                               <span class="stringliteral">"qc_fpn_ymax1"</span>,
-<a name="l00296"></a>00296                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00297"></a>00297                               1536,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymax1"</span>);
-<a name="l00300"></a>00300   cpl_parameterlist_append(list, p);
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin2"</span>,
-<a name="l00308"></a>00308                   CPL_TYPE_INT,
-<a name="l00309"></a>00309                               <span class="stringliteral">"qc_fpn_xmin2"</span>,
-<a name="l00310"></a>00310                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00311"></a>00311                               1350,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lamp_flats-qc_fpn_xmin2"</span>);
-<a name="l00314"></a>00314   cpl_parameterlist_append(list, p);
-<a name="l00315"></a>00315   
-<a name="l00316"></a>00316  
-<a name="l00317"></a>00317   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax2"</span>,
-<a name="l00318"></a>00318                   CPL_TYPE_INT,
-<a name="l00319"></a>00319                               <span class="stringliteral">"qc_fpn_xmax2"</span>,
-<a name="l00320"></a>00320                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00321"></a>00321                               1390,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmax2"</span>);
-<a name="l00324"></a>00324   cpl_parameterlist_append(list, p);
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin2"</span>,
-<a name="l00327"></a>00327                   CPL_TYPE_INT,
-<a name="l00328"></a>00328                               <span class="stringliteral">"qc_fpn_ymin2"</span>,
-<a name="l00329"></a>00329                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00330"></a>00330                               1000,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymin2"</span>);
-<a name="l00333"></a>00333   cpl_parameterlist_append(list, p);
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax2"</span>,
-<a name="l00337"></a>00337                   CPL_TYPE_INT,
-<a name="l00338"></a>00338                               <span class="stringliteral">"qc_fpn_ymax2"</span>,
-<a name="l00339"></a>00339                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00340"></a>00340                               1200,DET_PIX_MIN,DET_PIX_MAX);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymax2"</span>);
-<a name="l00343"></a>00343   cpl_parameterlist_append(list, p);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_min"</span>,
-<a name="l00350"></a>00350                   CPL_TYPE_INT,
-<a name="l00351"></a>00351                               <span class="stringliteral">"qc_thresh_min"</span>,
-<a name="l00352"></a>00352                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00353"></a>00353                               0);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_thresh_min"</span>);
-<a name="l00356"></a>00356   cpl_parameterlist_append(list, p);
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_max"</span>,
-<a name="l00360"></a>00360                   CPL_TYPE_INT,
-<a name="l00361"></a>00361                               <span class="stringliteral">"qc_thresh_max"</span>,
-<a name="l00362"></a>00362                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00363"></a>00363                               49000);
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_thresh_max"</span>);
-<a name="l00366"></a>00366   cpl_parameterlist_append(list, p);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_flats_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_flats_config.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span> <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_lamp_flats_config.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  sinfo_lamp_flats_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="comment">/*Reconstruction */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.low_rejection"</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                               <span class="stringliteral">"lower rejection: "</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                               <span class="stringliteral">"percentage of rejected low intensity "</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-lo_rej"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">    the average of columns */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.high_rejection"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"high rejection: "</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"percentage of rejected high intensity "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"pixels before averaging"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-hi_rej"</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="comment">/* indicator if the bad pixels of the flatfield should be interpolated */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.interpol_index"</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"Interpolation index switch: "</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"indicator if the bad pixels of the flatfield "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"should be interpolated"</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               FALSE);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                           <span class="stringliteral">"lamp_flats-interpol_index"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>  </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="comment">/* maximal pixel distance from bad pixel to take valid pixels */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.max_rad"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               <span class="stringliteral">"Max Rad: "</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                               <span class="stringliteral">"maximal pixel distance from bad pixel "</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                               <span class="stringliteral">"to take valid pixels"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                               4);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-max_rad"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="comment">/*  indicator if a bad pixel mask should be generated or not */</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.bad_ind"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                               <span class="stringliteral">"indicator if a bad pixel mask should be "</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"generated or not"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               FALSE);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_ind"</span>);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">   factor of the sigma noise limit; to remove the column intensity tilt only </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">   pixels which lie within a defined noise limit are used to fit a straight </span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">   line</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.sigma_factor"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                               <span class="stringliteral">"Sigma Factor: "</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                               <span class="stringliteral">"factor of the sigma noise limit; "</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                               <span class="stringliteral">"to remove the column intensity tilt only "</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                               <span class="stringliteral">"pixels which lie within a defined noise "</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                               <span class="stringliteral">"limit are used to fit a straight line"</span>,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                               5.);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-sigma_factor"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">   if |pixel - sinfo_median| > factor * standard deviation -> then the</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">    pixel value is replaced by the median of the 8 nearest neighbors</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.factor"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               <span class="stringliteral">"Factor: "</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                    <span class="stringliteral">"if |pixel - median| > factor * standard deviation -> "</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                    <span class="stringliteral">"then the pixel value is replaced by the median of the 8 "</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                    <span class="stringliteral">"nearest neighbors"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                               3.);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-factor"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="comment">/* number of iterations to of sinfo_median filtering to find bad </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">     pixel clusters */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.iterations"</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                               <span class="stringliteral">"Iterations: "</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                               <span class="stringliteral">"number of iterations to of median filtering "</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                               <span class="stringliteral">"to find bad pixel clusters"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               8);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-iterations"</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">/* percentage of rejected low intensity pixels before averaging */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.bad_low_rejection"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                               <span class="stringliteral">"low rejection: "</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                               <span class="stringliteral">"Percentage for bad pixel low rejection"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                               10.,0.,100.);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_lo_rej"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/* percentage of rejected high intensity pixels before averaging */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.bad_high_rejection"</span>,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"high rejection: "</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"Percentage for bad pixel high rejection"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                               10.,0.,100.);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bad_hi_rej"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="comment">/* to compute image statistics on a rectangular zone of the image</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">     the coordinates of the rectangle are needed</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="comment">/* lower left x coordinate */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.llx"</span>,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"Lower Lext X corner"</span>,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               1350,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-llx"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="comment">/* lower left y coordinate */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.lly"</span>,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                               <span class="stringliteral">"Lower Lext Y corner"</span>,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                               1000,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-lly"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="comment">/* upper right x coordinate */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.urx"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               <span class="stringliteral">"Upper right X corner"</span>,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                               1390,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-rrx"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="comment">/* upper right y coordinate */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.ury"</span>,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="stringliteral">"Upper right Y corner"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                               1200,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-ury"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="comment">/* indicator that indicates if the values beyond a threshold deviation */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.thresh_ind"</span>,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                               <span class="stringliteral">"Treshold index: "</span>,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                               FALSE);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-tresh_ind"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">  factor to the clean standard deviation to define the threshold deviation</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">  from the clean mean</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.mean_factor"</span>,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                               <span class="stringliteral">"Mean Factor: "</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                               <span class="stringliteral">"factor to the clean standard deviation to "</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                               <span class="stringliteral">"define the threshold deviation "</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                               <span class="stringliteral">"from the clean mean"</span>,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               10.);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-mean_factor"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>  <span class="comment">/* FPN */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin1"</span>,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                               <span class="stringliteral">"qc_fpn_xmin1"</span>,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                               512,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmin1"</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>  </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax1"</span>,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                               <span class="stringliteral">"qc_fpn_xmax1"</span>,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                               1536,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmax1"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin1"</span>,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                               <span class="stringliteral">"qc_fpn_ymin1"</span>,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                               512,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymin1"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax1"</span>,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                               <span class="stringliteral">"qc_fpn_ymax1"</span>,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                               1536,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymax1"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>  p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmin2"</span>,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                               <span class="stringliteral">"qc_fpn_xmin2"</span>,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                               1350,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"lamp_flats-qc_fpn_xmin2"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>  </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_xmax2"</span>,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                               <span class="stringliteral">"qc_fpn_xmax2"</span>,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                               1390,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_xmax2"</span>);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymin2"</span>,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                               <span class="stringliteral">"qc_fpn_ymin2"</span>,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                               1000,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymin2"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_flats.qc_fpn_ymax2"</span>,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                               <span class="stringliteral">"qc_fpn_ymax2"</span>,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                               1200,DET_PIX_MIN,DET_PIX_MAX);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_fpn_ymax2"</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                               <span class="stringliteral">"qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                               0);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                               <span class="stringliteral">"qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                               49000);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__flats__config_8h_source.html b/html/sinfo__lamp__flats__config_8h_source.html
index e870966..13d281e 100644
--- a/html/sinfo__lamp__flats__config_8h_source.html
+++ b/html/sinfo__lamp__flats__config_8h_source.html
@@ -2,54 +2,85 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_flats_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_flats_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_flats_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*</span>
-<a name="l00033"></a>00033 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00034"></a>00034 <span class="comment">*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keywordtype">void</span>
-<a name="l00038"></a>00038 sinfo_lamp_flats_config_add(cpl_parameterlist *list);
-<a name="l00039"></a>00039 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_flats_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_flats_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> sinfo_lamp_flats_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__flats__hidden__config_8c_source.html b/html/sinfo__lamp__flats__hidden__config_8c_source.html
index c184a94..9e20017 100644
--- a/html/sinfo__lamp__flats__hidden__config_8c_source.html
+++ b/html/sinfo__lamp__flats__hidden__config_8c_source.html
@@ -2,91 +2,122 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_flats_hidden_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_flats_hidden_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_flats_hidden_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030  <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_lamp_flats_hidden_config.h"</span>
-<a name="l00043"></a>00043 <span class="keywordtype">void</span>
-<a name="l00044"></a>00044  sinfoni_lamp_flats_hidden_config_add(cpl_parameterlist *list)
-<a name="l00045"></a>00045 {
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047   cpl_parameter *p;
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049   <span class="keywordflow">if</span> (!list) {
-<a name="l00050"></a>00050     <span class="keywordflow">return</span>;
-<a name="l00051"></a>00051   }
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="comment">/* Output file name */</span>
-<a name="l00055"></a>00055 <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00056"></a>00056   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.output_filename"</span>,
-<a name="l00057"></a>00057                   CPL_TYPE_STRING,
-<a name="l00058"></a>00058                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00059"></a>00059                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00060"></a>00060                               <span class="stringliteral">"out_flat.fits"</span>);
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-lampflat_filename"</span>);
-<a name="l00064"></a>00064   cpl_parameterlist_append(list, p);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067   <span class="comment">/* name of the bad pixel mask fits file to be generated */</span>
-<a name="l00068"></a>00068   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.bp_mask_out"</span>,
-<a name="l00069"></a>00069                   CPL_TYPE_STRING,
-<a name="l00070"></a>00070                               <span class="stringliteral">"Output Bad pixel mask: "</span>
-<a name="l00071"></a>00071                               <span class="stringliteral">"name of the bad pixel mask fits file to be "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"generated"</span>,
-<a name="l00073"></a>00073                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,
-<a name="l00074"></a>00074                               <span class="stringliteral">"out_bpmask.fits"</span>);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bp_mask_out"</span>);
-<a name="l00078"></a>00078   cpl_parameterlist_append(list, p);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_flats_hidden_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_flats_hidden_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_lamp_flats_hidden_config.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  sinfoni_lamp_flats_hidden_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> {</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   }</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.output_filename"</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                               <span class="stringliteral">"out_flat.fits"</span>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-lampflat_filename"</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="comment">/* name of the bad pixel mask fits file to be generated */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_flats.bp_mask_out"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"Output Bad pixel mask: "</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"name of the bad pixel mask fits file to be "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"generated"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"sinfoni.lamp_flats"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"out_bpmask.fits"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_flats-bp_mask_out"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__flats__hidden__config_8h_source.html b/html/sinfo__lamp__flats__hidden__config_8h_source.html
index e8bae35..f76686f 100644
--- a/html/sinfo__lamp__flats__hidden__config_8h_source.html
+++ b/html/sinfo__lamp__flats__hidden__config_8h_source.html
@@ -2,54 +2,85 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_flats_hidden_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_flats_hidden_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_flats_hidden_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*</span>
-<a name="l00033"></a>00033 <span class="comment">#include "sinfo_dfs.h"</span>
-<a name="l00034"></a>00034 <span class="comment">*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keywordtype">void</span>
-<a name="l00038"></a>00038 sinfoni_lamp_flats_hidden_config_add(cpl_parameterlist *list);
-<a name="l00039"></a>00039 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_flats_hidden_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_flats_hidden_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> sinfoni_lamp_flats_hidden_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__ini_8c_source.html b/html/sinfo__lamp__ini_8c_source.html
index f137435..a6152d9 100644
--- a/html/sinfo__lamp__ini_8c_source.html
+++ b/html/sinfo__lamp__ini_8c_source.html
@@ -2,363 +2,394 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_ini.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_ini.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   lamp_ini.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :Mar 08, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :prepare lamp spectrum frames ini file handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_lamp_ini.h"</span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                    Functions private to this module</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);
-<a name="l00037"></a>00037 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_resampling(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);
-<a name="l00038"></a>00038 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00039"></a>00039 parse_section_extractspectrum(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);
-<a name="l00040"></a>00040 
-<a name="l00049"></a>00049 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keywordtype">int</span> generateLamp_ini_file(
-<a name="l00070"></a>00070     <span class="keywordtype">char</span> * ini_name,
-<a name="l00071"></a>00071     <span class="keywordtype">char</span> * name_i,
-<a name="l00072"></a>00072     <span class="keywordtype">char</span> * name_o,
-<a name="l00073"></a>00073         <span class="keywordtype">char</span> * name_c
-<a name="l00074"></a>00074 )
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076     FILE * ini_file ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <span class="keywordflow">if</span> (sinfo_file_exists(ini_name)) {
-<a name="l00079"></a>00079        <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"overwriting %s"</span>, ini_name) ;
-<a name="l00080"></a>00080     }
-<a name="l00081"></a>00081     <span class="keywordflow">if</span> ((ini_file = fopen(ini_name, <span class="stringliteral">"w"</span>)) == (FILE*)NULL) {
-<a name="l00082"></a>00082         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot create .ini file %s"</span>, ini_name) ;
-<a name="l00083"></a>00083         <span class="keywordflow">return</span> -1 ;
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086     fprintf(ini_file,
-<a name="l00087"></a>00087 <span class="stringliteral">"#\n"</span>
-<a name="l00088"></a>00088 <span class="stringliteral">"# Configuration file for the extraction of a halogen lamp spectrumn"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"#\n"</span>) ;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     fprintf(ini_file, <span class="stringliteral">"#\n\n[Eclipse]\n"</span>) ;
-<a name="l00092"></a>00092     fprintf(ini_file, <span class="stringliteral">"VersionNumber = %s\n\n"</span>, get_eclipse_version()) ;
-<a name="l00093"></a>00093     fprintf(ini_file,
-<a name="l00094"></a>00094 <span class="stringliteral">"\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"#\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"# ----- [General] configures various software stuff\n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"#\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"# This section is not mandatory. All eclipse routines\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"# should be set once for all in a .eclipse-rc file.\n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"# If you choose to use the variables here, they will\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"# override the settings you have in the environment.\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"# See the eclipse installation manual to see what\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"# these variables refer to.\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"#\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"\n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"[General]\n"</span>
-<a name="l00107"></a>00107 <span class="stringliteral">"# MaximumMemory = 512 ;   integer, maximum megs to allocate in RAM\n"</span>
-<a name="l00108"></a>00108 <span class="stringliteral">"# MaximumSwap   = 2048 ;  integer, maximum megs to allocate in swap\n"</span>
-<a name="l00109"></a>00109 <span class="stringliteral">"# TmpDirName    = .   ;   path to temporary directory\n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"\n"</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"Verbose       = no ;   verbose mode activation\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"Debug         = no ;   debug mode activation\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"# LogFile       = yes ;   activate message logging to a file\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"# LogFileName   = /tmp/spiffi-log ;  log file name\n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"\n"</span>) ;
-<a name="l00118"></a>00118     fprintf(ini_file,
-<a name="l00119"></a>00119 <span class="stringliteral">"#\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"# the following are the names given in the argument of the python script\n"</span>
-<a name="l00121"></a>00121 <span class="stringliteral">"#\n"</span>
-<a name="l00122"></a>00122 <span class="stringliteral">"\n"</span>) ;
-<a name="l00123"></a>00123         fprintf(ini_file,
-<a name="l00124"></a>00124 <span class="stringliteral">"InFrame   = %s ; input file name\n"</span> 
-<a name="l00125"></a>00125 <span class="stringliteral">"Wavemapim = %s ; file name of the wavelength map\n"</span> 
-<a name="l00126"></a>00126 <span class="stringliteral">"OutName   = %s ; name of output fits file\n"</span>
-<a name="l00127"></a>00127 , name_i, name_c, name_o ) ;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     fprintf(ini_file,
-<a name="l00130"></a>00130 <span class="stringliteral">"#\n"</span>
-<a name="l00131"></a>00131 <span class="stringliteral">"# [Resampling] resamples the spectra to a given pixel length\n"</span>
-<a name="l00132"></a>00132 <span class="stringliteral">"# ExtractSpectrum] takes the clean mean along the spatial pixels \n"</span>
-<a name="l00133"></a>00133 <span class="stringliteral">"# by avoiding the bad pixel positions and delivers the final \n"</span>
-<a name="l00134"></a>00134 <span class="stringliteral">"# halogen lamp\n"</span> <span class="stringliteral">"# spectrum\n"</span>
-<a name="l00135"></a>00135 <span class="stringliteral">"\n"</span>
-<a name="l00136"></a>00136 <span class="stringliteral">"[Resampling]\n"</span>
-<a name="l00137"></a>00137 <span class="stringliteral">"Ncoeffs               = 3 ;     number of coefficients for the polynomial\n"</span> 
-<a name="l00138"></a>00138 <span class="stringliteral">"                interpolation\n"</span>
-<a name="l00139"></a>00139 <span class="stringliteral">"Nrows                 = 2560 ;  number of image rows in the resampled frame\n"</span>
-<a name="l00140"></a>00140 <span class="stringliteral">"                (2560 for single frames, 5120 for dithered)\n"</span>
-<a name="l00141"></a>00141 <span class="stringliteral">"[ExtractSpectrum]\n"</span>
-<a name="l00142"></a>00142 <span class="stringliteral">"LoReject              = 0.1 ;   percentage of rejected low intensity pixels\n"</span>
-<a name="l00143"></a>00143 <span class="stringliteral">"                before averaging\n"</span> 
-<a name="l00144"></a>00144 <span class="stringliteral">"HiReject              = 0.1 ;   percentage of rejected high intensity pixels\n"</span>
-<a name="l00145"></a>00145 <span class="stringliteral">"                before averaging\n"</span> 
-<a name="l00146"></a>00146 <span class="stringliteral">"CountsToIntensity     = 1. ;    intensity conversion factor: counts per\n"</span>
-<a name="l00147"></a>00147 <span class="stringliteral">"                intensity unit\n"</span> 
-<a name="l00148"></a>00148 <span class="stringliteral">"\n"</span>
-<a name="l00149"></a>00149 <span class="stringliteral">"\n"</span>) ;
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     fclose(ini_file) ;
-<a name="l00152"></a>00152     <span class="keywordflow">return</span> 0 ;
-<a name="l00153"></a>00153 }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00167"></a>00167 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 lamp_config * parse_lamp_ini_file(<span class="keywordtype">char</span> * ini_name)
-<a name="l00170"></a>00170 {
-<a name="l00171"></a>00171         dictionary    *       sym ;
-<a name="l00172"></a>00172         lamp_config   *       cfg ;
-<a name="l00173"></a>00173         <span class="keywordtype">int</span>                   status ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175         <span class="keywordflow">if</span> (!sinfo_file_exists(ini_name)) {
-<a name="l00176"></a>00176             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot find ini file [%s]: aborting"</span>, ini_name) ;
-<a name="l00177"></a>00177                 <span class="keywordflow">return</span> NULL ;
-<a name="l00178"></a>00178         }
-<a name="l00179"></a>00179         sym = iniparser_load(ini_name) ;
-<a name="l00180"></a>00180         <span class="keywordflow">if</span> (sym == NULL) {
-<a name="l00181"></a>00181             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"in parsing ini file [%s]: aborting"</span>, ini_name) ;
-<a name="l00182"></a>00182                 <span class="keywordflow">return</span> NULL ;
-<a name="l00183"></a>00183         }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185         cfg = sinfo_lamp_cfg_create();
-<a name="l00186"></a>00186         <span class="keywordflow">if</span> (cfg==NULL) {
-<a name="l00187"></a>00187             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocating lamp_config struct"</span>);
-<a name="l00188"></a>00188                 iniparser_freedict(sym) ;
-<a name="l00189"></a>00189                 <span class="keywordflow">return</span> NULL ;
-<a name="l00190"></a>00190         }
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192         <span class="comment">/*</span>
-<a name="l00193"></a>00193 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00194"></a>00194 <span class="comment">         * found in the ini file</span>
-<a name="l00195"></a>00195 <span class="comment">         */</span>
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197         status = 0 ;
-<a name="l00198"></a>00198         parse_section_general   (sym, cfg, &status);
-<a name="l00199"></a>00199         parse_section_resampling    (sym, cfg, &status);
-<a name="l00200"></a>00200         parse_section_extractspectrum (sym, cfg, &status);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202         iniparser_freedict(sym);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204         <span class="keywordflow">if</span> (status>0) {
-<a name="l00205"></a>00205            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%d errors in ini file [%s]"</span>, status, ini_name);
-<a name="l00206"></a>00206                 sinfo_lamp_cfg_destroy(cfg);
-<a name="l00207"></a>00207                 cfg = NULL ;
-<a name="l00208"></a>00208                 <span class="keywordflow">return</span> NULL ;
-<a name="l00209"></a>00209         }
-<a name="l00210"></a>00210         <span class="keywordflow">return</span> cfg ;
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00215"></a>00215 <span class="comment">   Functions:   parse_section_xxx()</span>
-<a name="l00216"></a>00216 <span class="comment">   In           :       symbolic table read from ini file</span>
-<a name="l00217"></a>00217 <span class="comment">   Out          :       void</span>
-<a name="l00218"></a>00218 <span class="comment">   Job          :       update a lamp_config structure from what can be</span>
-<a name="l00219"></a>00219 <span class="comment">                            found in the ini file.</span>
-<a name="l00220"></a>00220 <span class="comment">   Notice       :       all of these functions update a status integer to</span>
-<a name="l00221"></a>00221 <span class="comment">                        indicate if an error occurred, or leave it as it is if</span>
-<a name="l00222"></a>00222 <span class="comment">                        everything went Ok.</span>
-<a name="l00223"></a>00223 <span class="comment"></span>
-<a name="l00224"></a>00224 <span class="comment">        parse_section_general()</span>
-<a name="l00225"></a>00225 <span class="comment">        parse_section_resampling ()</span>
-<a name="l00226"></a>00226 <span class="comment">        parse_section_extractspectrum ()</span>
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00232"></a>00232 parse_section_general(
-<a name="l00233"></a>00233         dictionary * sym,
-<a name="l00234"></a>00234         lamp_config * cfg,
-<a name="l00235"></a>00235         <span class="keywordtype">int</span> *status
-<a name="l00236"></a>00236 )
-<a name="l00237"></a>00237 {
-<a name="l00238"></a>00238         <span class="keywordtype">char</span>    *       cval ;
-<a name="l00239"></a>00239         <span class="keywordtype">int</span>             ival ;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241         <span class="comment">/*</span>
-<a name="l00242"></a>00242 <span class="comment">         * General section</span>
-<a name="l00243"></a>00243 <span class="comment">         */</span>
-<a name="l00244"></a>00244         cval = iniparser_getstr(sym, <span class="stringliteral">"eclipse:versionnumber"</span>) ;
-<a name="l00245"></a>00245         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00246"></a>00246            <span class="keywordflow">if</span> (strcmp(cval, get_eclipse_version())) {
-<a name="l00247"></a>00247                <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"this ini file produced by version %s"</span>, cval);
-<a name="l00248"></a>00248                <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"you are running version %s"</span>, 
-<a name="l00249"></a>00249                                  get_eclipse_version());
-<a name="l00250"></a>00250                 }
-<a name="l00251"></a>00251         } <span class="keywordflow">else</span> {
-<a name="l00252"></a>00252                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no eclipse version number found in file"</span>);
-<a name="l00253"></a>00253         }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximummemory"</span>, -1);
-<a name="l00256"></a>00256         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_ram"</span>, ival);
-<a name="l00257"></a>00257         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximumswap"</span>, -1);
-<a name="l00258"></a>00258         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_swap"</span>, ival);
-<a name="l00259"></a>00259         sinfo_set_verbose(iniparser_getboolean(sym, <span class="stringliteral">"general:verbose"</span>, 0));
-<a name="l00260"></a>00260         sinfo_set_debug(iniparser_getboolean(sym, <span class="stringliteral">"general:debug"</span>, 0));
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262         cval = iniparser_getstr(sym, <span class="stringliteral">"general:tmpdirname"</span>);
-<a name="l00263"></a>00263         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00264"></a>00264                 sinfo_set_tmpdirname(cval);
-<a name="l00265"></a>00265         } <span class="keywordflow">else</span> {
-<a name="l00266"></a>00266                 sinfo_set_tmpdirname(<span class="stringliteral">"."</span>);
-<a name="l00267"></a>00267         }
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269         ival = iniparser_getboolean(sym, <span class="stringliteral">"general:logfile"</span>, 0);
-<a name="l00270"></a>00270         <span class="keywordflow">if</span> (ival) {
-<a name="l00271"></a>00271                 cval = iniparser_getstr(sym, <span class="stringliteral">"general:logfilename"</span>);
-<a name="l00272"></a>00272                 <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00273"></a>00273                         sinfo_set_logfile(1);
-<a name="l00274"></a>00274                         sinfo_set_logfilename(cval);
-<a name="l00275"></a>00275                 } <span class="keywordflow">else</span> {
-<a name="l00276"></a>00276                         sinfo_set_logfile(0) ;
-<a name="l00277"></a>00277                 }
-<a name="l00278"></a>00278         }
-<a name="l00279"></a>00279         cval = iniparser_getstr(sym, <span class="stringliteral">"general:inframe"</span>);
-<a name="l00280"></a>00280         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00281"></a>00281                 strcpy (cfg -> inFrame , cval ) ;
-<a name="l00282"></a>00282         } <span class="keywordflow">else</span> {
-<a name="l00283"></a>00283             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" InFrame in the .ini file was not found!\n"</span>) ;
-<a name="l00284"></a>00284             (*status)++ ;
-<a name="l00285"></a>00285         }
-<a name="l00286"></a>00286         cval = iniparser_getstr(sym, <span class="stringliteral">"general:wavemapim"</span>);
-<a name="l00287"></a>00287         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00288"></a>00288                 strcpy (cfg -> wavemapim , cval ) ;
-<a name="l00289"></a>00289         } <span class="keywordflow">else</span> {
-<a name="l00290"></a>00290             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Wavemapim in the .ini file was not found!\n"</span>) ;
-<a name="l00291"></a>00291             (*status)++ ;
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294         cval = iniparser_getstr(sym, <span class="stringliteral">"general:outname"</span>);
-<a name="l00295"></a>00295         <span class="keywordflow">if</span> (cval!=NULL) {
-<a name="l00296"></a>00296                 strcpy (cfg -> outName , cval );
-<a name="l00297"></a>00297         } <span class="keywordflow">else</span> {
-<a name="l00298"></a>00298             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" OutName in the .ini file was not found!\n"</span>) ;
-<a name="l00299"></a>00299             (*status)++ ;
-<a name="l00300"></a>00300         }
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302         <span class="keywordflow">if</span> (sinfo_verbose_active())
-<a name="l00303"></a>00303                 sinfo_print_memory_parameters();
-<a name="l00304"></a>00304         return ;
-<a name="l00305"></a>00305 }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_resampling(
-<a name="l00308"></a>00308         dictionary * sym,
-<a name="l00309"></a>00309         lamp_config * cfg,
-<a name="l00310"></a>00310         <span class="keywordtype">int</span> *status
-<a name="l00311"></a>00311 )
-<a name="l00312"></a>00312 {
-<a name="l00313"></a>00313         <span class="keywordtype">int</span>             ival ;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315         ival = iniparser_getint(sym, <span class="stringliteral">"resampling:ncoeffs"</span>, -1) ;
-<a name="l00316"></a>00316         <span class="keywordflow">if</span> (ival != -1)
-<a name="l00317"></a>00317         {
-<a name="l00318"></a>00318             cfg -> ncoeffs = ival ;
-<a name="l00319"></a>00319         }
-<a name="l00320"></a>00320         <span class="keywordflow">else</span>
-<a name="l00321"></a>00321         {
-<a name="l00322"></a>00322             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" ncoeffs in the .ini file was not found!\n"</span>) ;
-<a name="l00323"></a>00323             (*status)++ ;
-<a name="l00324"></a>00324         }
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326         ival = iniparser_getint(sym, <span class="stringliteral">"resampling:nrows"</span>, -1) ;
-<a name="l00327"></a>00327         <span class="keywordflow">if</span> (ival != -1)
-<a name="l00328"></a>00328         {
-<a name="l00329"></a>00329             cfg -> nrows = ival ;
-<a name="l00330"></a>00330         }
-<a name="l00331"></a>00331         <span class="keywordflow">else</span>
-<a name="l00332"></a>00332         {
-<a name="l00333"></a>00333             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" nrows in the .ini file was not found!\n"</span>) ;
-<a name="l00334"></a>00334             (*status)++ ;
-<a name="l00335"></a>00335         }
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337         return ;
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339 }
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_extractspectrum(
-<a name="l00342"></a>00342         dictionary * sym,
-<a name="l00343"></a>00343         lamp_config * cfg,
-<a name="l00344"></a>00344         <span class="keywordtype">int</span> *status )
-<a name="l00345"></a>00345 {
-<a name="l00346"></a>00346         <span class="keywordtype">float</span>           dval ;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348         dval = iniparser_getdouble(sym, <span class="stringliteral">"extractspectrum:loreject"</span>, -1.) ;
-<a name="l00349"></a>00349         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00350"></a>00350         {
-<a name="l00351"></a>00351             cfg -> loReject = dval ;
-<a name="l00352"></a>00352         }
-<a name="l00353"></a>00353         <span class="keywordflow">else</span>
-<a name="l00354"></a>00354         {
-<a name="l00355"></a>00355             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" LoReject in the .ini file was not found!\n"</span>) ;
-<a name="l00356"></a>00356             (*status)++ ;
-<a name="l00357"></a>00357         }
-<a name="l00358"></a>00358         dval = iniparser_getdouble(sym, <span class="stringliteral">"extractspectrum:hireject"</span>, -1.) ;
-<a name="l00359"></a>00359         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00360"></a>00360         {
-<a name="l00361"></a>00361             cfg -> hiReject = dval ;
-<a name="l00362"></a>00362         }
-<a name="l00363"></a>00363         <span class="keywordflow">else</span>
-<a name="l00364"></a>00364         {
-<a name="l00365"></a>00365             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" hiReject in the .ini file was not found!\n"</span>) ;
-<a name="l00366"></a>00366             (*status)++ ;
-<a name="l00367"></a>00367         }
-<a name="l00368"></a>00368         dval=iniparser_getdouble(sym,<span class="stringliteral">"extractspectrum:countstointensity"</span>,-1.);
-<a name="l00369"></a>00369         <span class="keywordflow">if</span> (dval!=-1.)
-<a name="l00370"></a>00370         {
-<a name="l00371"></a>00371             cfg -> countsToIntensity = dval ;
-<a name="l00372"></a>00372         }
-<a name="l00373"></a>00373         <span class="keywordflow">else</span>
-<a name="l00374"></a>00374         {
-<a name="l00375"></a>00375           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"CountsToIntensity in the .ini file was not found!"</span>);
-<a name="l00376"></a>00376           (*status)++ ;
-<a name="l00377"></a>00377         }
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379         return ;
-<a name="l00380"></a>00380 }
-<a name="l00381"></a>00381 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_ini.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   lamp_ini.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :Mar 08, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :prepare lamp spectrum frames ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_lamp_ini.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_general(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_resampling(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> parse_section_extractspectrum(dictionary *, lamp_config *, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">int</span> generateLamp_ini_file(</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> )</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     FILE * ini_file ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordflow">if</span> (sinfo_file_exists(ini_name)) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>        <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"overwriting %s"</span>, ini_name) ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordflow">if</span> ((ini_file = fopen(ini_name, <span class="stringliteral">"w"</span>)) == (FILE*)NULL) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot create .ini file %s"</span>, ini_name) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     fprintf(ini_file,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"# Configuration file for the extraction of a halogen lamp spectrumn"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"#\n"</span>) ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     fprintf(ini_file, <span class="stringliteral">"#\n\n[Eclipse]\n"</span>) ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     fprintf(ini_file, <span class="stringliteral">"VersionNumber = %s\n\n"</span>, get_eclipse_version()) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     fprintf(ini_file,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"# ----- [General] configures various software stuff\n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"# This section is not mandatory. All eclipse routines\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"# should be set once for all in a .eclipse-rc file.\n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"# If you choose to use the variables here, they will\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"# override the settings you have in the environment.\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"# See the eclipse installation manual to see what\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"# these variables refer to.\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"[General]\n"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"# MaximumMemory = 512 ;   integer, maximum megs to allocate in RAM\n"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="stringliteral">"# MaximumSwap   = 2048 ;  integer, maximum megs to allocate in swap\n"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"# TmpDirName    = .   ;   path to temporary directory\n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"Verbose       = no ;   verbose mode activation\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"Debug         = no ;   debug mode activation\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"# LogFile       = yes ;   activate message logging to a file\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"# LogFileName   = /tmp/spiffi-log ;  log file name\n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"\n"</span>) ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     fprintf(ini_file,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"# the following are the names given in the argument of the python script\n"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="stringliteral">"\n"</span>) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         fprintf(ini_file,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="stringliteral">"InFrame   = %s ; input file name\n"</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="stringliteral">"Wavemapim = %s ; file name of the wavelength map\n"</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="stringliteral">"OutName   = %s ; name of output fits file\n"</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> , name_i, name_c, name_o ) ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     fprintf(ini_file,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="stringliteral">"#\n"</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="stringliteral">"# [Resampling] resamples the spectra to a given pixel length\n"</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="stringliteral">"# ExtractSpectrum] takes the clean mean along the spatial pixels \n"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="stringliteral">"# by avoiding the bad pixel positions and delivers the final \n"</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="stringliteral">"# halogen lamp\n"</span> <span class="stringliteral">"# spectrum\n"</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="stringliteral">"[Resampling]\n"</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="stringliteral">"Ncoeffs               = 3 ;     number of coefficients for the polynomial\n"</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="stringliteral">"                interpolation\n"</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="stringliteral">"Nrows                 = 2560 ;  number of image rows in the resampled frame\n"</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="stringliteral">"                (2560 for single frames, 5120 for dithered)\n"</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="stringliteral">"[ExtractSpectrum]\n"</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="stringliteral">"LoReject              = 0.1 ;   percentage of rejected low intensity pixels\n"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="stringliteral">"                before averaging\n"</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="stringliteral">"HiReject              = 0.1 ;   percentage of rejected high intensity pixels\n"</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="stringliteral">"                before averaging\n"</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="stringliteral">"CountsToIntensity     = 1. ;    intensity conversion factor: counts per\n"</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="stringliteral">"                intensity unit\n"</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="stringliteral">"\n"</span>) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     fclose(ini_file) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> lamp_config * parse_lamp_ini_file(<span class="keywordtype">char</span> * ini_name)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         dictionary    *       sym ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         lamp_config   *       cfg ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="keywordtype">int</span>                   status ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         <span class="keywordflow">if</span> (!sinfo_file_exists(ini_name)) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot find ini file [%s]: aborting"</span>, ini_name) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         sym = iniparser_load(ini_name) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         <span class="keywordflow">if</span> (sym == NULL) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"in parsing ini file [%s]: aborting"</span>, ini_name) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         cfg = sinfo_lamp_cfg_create();</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <span class="keywordflow">if</span> (cfg==NULL) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocating lamp_config struct"</span>);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                 iniparser_freedict(sym) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         status = 0 ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         parse_section_general   (sym, cfg, &status);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         parse_section_resampling    (sym, cfg, &status);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         parse_section_extractspectrum (sym, cfg, &status);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         iniparser_freedict(sym);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordflow">if</span> (status>0) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%d errors in ini file [%s]"</span>, status, ini_name);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                 sinfo_lamp_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">   Functions:   parse_section_xxx()</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">   In           :       symbolic table read from ini file</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">   Out          :       void</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">   Job          :       update a lamp_config structure from what can be</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">                            found in the ini file.</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">   Notice       :       all of these functions update a status integer to</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">                        indicate if an error occurred, or leave it as it is if</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">                        everything went Ok.</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment"></span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">        parse_section_general()</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">        parse_section_resampling ()</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">        parse_section_extractspectrum ()</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment"></span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> parse_section_general(</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         dictionary * sym,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         lamp_config * cfg,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         <span class="keywordtype">int</span> *status</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> )</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         <span class="keywordtype">char</span>    *       cval ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">         * General section</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"eclipse:versionnumber"</span>) ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>            <span class="keywordflow">if</span> (strcmp(cval, get_eclipse_version())) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"this ini file produced by version %s"</span>, cval);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"you are running version %s"</span>, </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                  get_eclipse_version());</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                 }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no eclipse version number found in file"</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximummemory"</span>, -1);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_ram"</span>, ival);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         ival = iniparser_getint(sym, <span class="stringliteral">"general:maximumswap"</span>, -1);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         <span class="keywordflow">if</span> (ival>0) sinfo_set_memory_parameter(<span class="stringliteral">"max_swap"</span>, ival);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         sinfo_set_verbose(iniparser_getboolean(sym, <span class="stringliteral">"general:verbose"</span>, 0));</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         sinfo_set_debug(iniparser_getboolean(sym, <span class="stringliteral">"general:debug"</span>, 0));</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:tmpdirname"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                 sinfo_set_tmpdirname(cval);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                 sinfo_set_tmpdirname(<span class="stringliteral">"."</span>);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         ival = iniparser_getboolean(sym, <span class="stringliteral">"general:logfile"</span>, 0);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         <span class="keywordflow">if</span> (ival) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                 cval = iniparser_getstr(sym, <span class="stringliteral">"general:logfilename"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                 <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                         sinfo_set_logfile(1);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                         sinfo_set_logfilename(cval);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                         sinfo_set_logfile(0) ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                 }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:inframe"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                 strcpy (cfg -> inFrame , cval ) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" InFrame in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             (*status)++ ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:wavemapim"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                 strcpy (cfg -> wavemapim , cval ) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" Wavemapim in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             (*status)++ ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         cval = iniparser_getstr(sym, <span class="stringliteral">"general:outname"</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         <span class="keywordflow">if</span> (cval!=NULL) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                 strcpy (cfg -> outName , cval );</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" OutName in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>             (*status)++ ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         <span class="keywordflow">if</span> (sinfo_verbose_active())</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                 sinfo_print_memory_parameters();</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         return ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_resampling(</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         dictionary * sym,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         lamp_config * cfg,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordtype">int</span> *status</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> )</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         <span class="keywordtype">int</span>             ival ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         ival = iniparser_getint(sym, <span class="stringliteral">"resampling:ncoeffs"</span>, -1) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>         <span class="keywordflow">if</span> (ival != -1)</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>             cfg -> ncoeffs = ival ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" ncoeffs in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             (*status)++ ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         ival = iniparser_getint(sym, <span class="stringliteral">"resampling:nrows"</span>, -1) ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         <span class="keywordflow">if</span> (ival != -1)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>             cfg -> nrows = ival ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>         {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" nrows in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             (*status)++ ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         return ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_extractspectrum(</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         dictionary * sym,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         lamp_config * cfg,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordtype">int</span> *status )</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         <span class="keywordtype">float</span>           dval ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"extractspectrum:loreject"</span>, -1.) ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>             cfg -> loReject = dval ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         {</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" LoReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             (*status)++ ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         dval = iniparser_getdouble(sym, <span class="stringliteral">"extractspectrum:hireject"</span>, -1.) ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>             cfg -> hiReject = dval ;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" hiReject in the .ini file was not found!\n"</span>) ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>             (*status)++ ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         }</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         dval=iniparser_getdouble(sym,<span class="stringliteral">"extractspectrum:countstointensity"</span>,-1.);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         <span class="keywordflow">if</span> (dval!=-1.)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>             cfg -> countsToIntensity = dval ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"CountsToIntensity in the .ini file was not found!"</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>           (*status)++ ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>         }</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         return ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__ini_8h_source.html b/html/sinfo__lamp__ini_8h_source.html
index 4c44b09..485d10d 100644
--- a/html/sinfo__lamp__ini_8h_source.html
+++ b/html/sinfo__lamp__ini_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name    :   sinfo_lamp_ini.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on   :    Mar 08, 2002</span>
-<a name="l00023"></a>00023 <span class="comment">   Description  :    preparing lamp ini file handling for SPIFFI</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_LAMP_INI_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Function prototypes </span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="keywordtype">int</span> 
-<a name="l00049"></a>00049 generateLamp_ini_file(
-<a name="l00050"></a>00050         <span class="keywordtype">char</span> * ini_name,
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> * name_i,
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> * name_o,
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> * name_c
-<a name="l00054"></a>00054 );
-<a name="l00055"></a>00055 
-<a name="l00065"></a>00065 lamp_config * 
-<a name="l00066"></a>00066 parse_lamp_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name    :   sinfo_lamp_ini.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on   :    Mar 08, 2002</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description  :    preparing lamp ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_LAMP_INI_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> generateLamp_ini_file(</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> );</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> lamp_config * </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> parse_lamp_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__ini__by__cpl_8c_source.html b/html/sinfo__lamp__ini__by__cpl_8c_source.html
index 9bfa497..fb48d1c 100644
--- a/html/sinfo__lamp__ini__by__cpl_8c_source.html
+++ b/html/sinfo__lamp__ini__by__cpl_8c_source.html
@@ -2,207 +2,238 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_lamp_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 26, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   lamp spectrum cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_lamp_ini_by_cpl.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                    Functions private to this module</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00040"></a>00040 parse_section_frames(lamp_config *, 
-<a name="l00041"></a>00041                      cpl_parameterlist* cpl_cfg, 
-<a name="l00042"></a>00042                      cpl_frameset* sof, 
-<a name="l00043"></a>00043                      cpl_frameset** raw, 
-<a name="l00044"></a>00044                      <span class="keywordtype">int</span>* status);
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00047"></a>00047 parse_section_resampling(lamp_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00049"></a>00049 parse_section_extractspectrum(lamp_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00050"></a>00050 
-<a name="l00069"></a>00069 lamp_config * 
-<a name="l00070"></a>00070 sinfo_parse_cpl_input_lamp(cpl_parameterlist* cpl_cfg, 
-<a name="l00071"></a>00071                            cpl_frameset* sof, 
-<a name="l00072"></a>00072                cpl_frameset** raw)
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075         lamp_config   *       cfg= sinfo_lamp_cfg_create();
-<a name="l00076"></a>00076         <span class="keywordtype">int</span> status=0;
-<a name="l00077"></a>00077         <span class="comment">/*</span>
-<a name="l00078"></a>00078 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00079"></a>00079 <span class="comment">         * found in the ini file</span>
-<a name="l00080"></a>00080 <span class="comment">         */</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083         parse_section_resampling    (cfg, cpl_cfg);
-<a name="l00084"></a>00084         parse_section_extractspectrum (cfg, cpl_cfg);
-<a name="l00085"></a>00085         parse_section_frames    (cfg, cpl_cfg, sof, raw,&status);
-<a name="l00086"></a>00086  
-<a name="l00087"></a>00087         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00088"></a>00088                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00089"></a>00089                 sinfo_lamp_cfg_destroy(cfg);
-<a name="l00090"></a>00090                 cfg = NULL ;
-<a name="l00091"></a>00091                 <span class="keywordflow">return</span> NULL ;
-<a name="l00092"></a>00092         }
-<a name="l00093"></a>00093         <span class="keywordflow">return</span> cfg ;
-<a name="l00094"></a>00094 }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 
-<a name="l00106"></a>00106 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00107"></a>00107 parse_section_frames(lamp_config * cfg,
-<a name="l00108"></a>00108              cpl_parameterlist * cpl_cfg,
-<a name="l00109"></a>00109              cpl_frameset * sof,
-<a name="l00110"></a>00110              cpl_frameset ** raw,
-<a name="l00111"></a>00111                      <span class="keywordtype">int</span>* status)
-<a name="l00112"></a>00112 {
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114    cpl_frame* frame   = NULL;
-<a name="l00115"></a>00115    cpl_parameter *p; 
-<a name="l00116"></a>00116    <span class="keywordtype">int</span> nraw=0;
-<a name="l00117"></a>00117     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00118"></a>00118    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00119"></a>00119    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00120"></a>00120    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122    <span class="comment">/* Input */</span>
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124    *raw=cpl_frameset_new();
-<a name="l00125"></a>00125    sinfo_extract_raw_frames_type(sof,raw,PRO_FLUX_LAMP_STACKED);   
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127    nraw    = cpl_frameset_get_size(*raw);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129    <span class="keywordflow">if</span>(nraw<1) {
-<a name="l00130"></a>00130      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame %s in input!"</span>,PRO_FLUX_LAMP_STACKED);
-<a name="l00131"></a>00131      (*status)++;
-<a name="l00132"></a>00132      <span class="keywordflow">return</span>;
-<a name="l00133"></a>00133    }
-<a name="l00134"></a>00134    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00135"></a>00135    strcpy(cfg -> inFrame,cpl_strdup(cpl_frame_get_filename(frame)));
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137    <span class="comment">/* Output */</span>
-<a name="l00138"></a>00138    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.output_filename"</span>);
-<a name="l00139"></a>00139    strcpy(cfg -> outName, cpl_parameter_get_string(p));
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00142"></a>00142    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))
-<a name="l00143"></a>00143      {
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     <span class="keywordflow">case</span> 0: 
-<a name="l00146"></a>00146       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00147"></a>00147       <span class="keywordflow">break</span>;
-<a name="l00148"></a>00148     <span class="keywordflow">case</span> 1: 
-<a name="l00149"></a>00149       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00150"></a>00150       <span class="keywordflow">break</span>;
-<a name="l00151"></a>00151     <span class="keywordflow">case</span> -1:
-<a name="l00152"></a>00152       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00153"></a>00153       <span class="keywordflow">break</span>;
-<a name="l00154"></a>00154     <span class="keywordflow">default</span>: 
-<a name="l00155"></a>00155       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00156"></a>00156       <span class="keywordflow">break</span>;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158      }
-<a name="l00159"></a>00159    sinfo_get_band(frame,band);
-<a name="l00160"></a>00160    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,
-<a name="l00161"></a>00161                      spat_res,    lamp_status,    band);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163    
-<a name="l00164"></a>00164    sinfo_get_ins_set(band,&ins_set);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_MAP)) {
-<a name="l00167"></a>00167       frame = cpl_frameset_find(sof,PRO_WAVE_MAP);
-<a name="l00168"></a>00168       strcpy(cfg -> wavemapim,cpl_strdup(cpl_frame_get_filename(frame)));
-<a name="l00169"></a>00169    } <span class="keywordflow">else</span> {
-<a name="l00170"></a>00170      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_MAP);
-<a name="l00171"></a>00171      (*status)++;
-<a name="l00172"></a>00172      <span class="keywordflow">return</span>;
-<a name="l00173"></a>00173    }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176    return ;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 }
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00190"></a>00190 parse_section_resampling(lamp_config * cfg, cpl_parameterlist * cpl_cfg)
-<a name="l00191"></a>00191 {
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193    cpl_parameter *p; 
-<a name="l00194"></a>00194    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.ncoeffs"</span>);
-<a name="l00195"></a>00195    cfg -> ncoeffs =  cpl_parameter_get_int(p);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.nrows"</span>);
-<a name="l00198"></a>00198    cfg -> nrows =  cpl_parameter_get_int(p);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200    return ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 }
-<a name="l00210"></a>00210 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00211"></a>00211 parse_section_extractspectrum(lamp_config * cfg, cpl_parameterlist * cpl_cfg)
-<a name="l00212"></a>00212 {
-<a name="l00213"></a>00213    cpl_parameter *p; 
-<a name="l00214"></a>00214   
-<a name="l00215"></a>00215    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.lower_rejection"</span>);
-<a name="l00216"></a>00216    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.higher_rejection"</span>);
-<a name="l00219"></a>00219    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.counts_to_intensity"</span>);
-<a name="l00222"></a>00222    cfg -> countsToIntensity = cpl_parameter_get_double(p);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224    return ;
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 }
-<a name="l00233"></a>00233 <span class="keywordtype">void</span>
-<a name="l00234"></a>00234 sinfo_lamp_free(lamp_config * cfg)
-<a name="l00235"></a>00235 {  
-<a name="l00236"></a>00236   sinfo_lamp_cfg_destroy(cfg);
-<a name="l00237"></a>00237   <span class="keywordflow">return</span>;
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_lamp_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 26, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   lamp spectrum cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_lamp_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> parse_section_frames(lamp_config *, </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>                      cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                      cpl_frameset* sof, </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                      cpl_frameset** raw, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                      <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> parse_section_resampling(lamp_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> parse_section_extractspectrum(lamp_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> lamp_config * </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> sinfo_parse_cpl_input_lamp(cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                            cpl_frameset* sof, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                cpl_frameset** raw)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         lamp_config   *       cfg= sinfo_lamp_cfg_create();</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         parse_section_resampling    (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         parse_section_extractspectrum (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         parse_section_frames    (cfg, cpl_cfg, sof, raw,&status);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>  </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                 sinfo_lamp_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> parse_section_frames(lamp_config * cfg,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>              cpl_parameterlist * cpl_cfg,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>              cpl_frameset ** raw,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="comment">/* Input */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    *raw=cpl_frameset_new();</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    sinfo_extract_raw_frames_type(sof,raw,PRO_FLUX_LAMP_STACKED);   </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    nraw    = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordflow">if</span>(nraw<1) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame %s in input!"</span>,PRO_FLUX_LAMP_STACKED);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>      (*status)++;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    strcpy(cfg -> inFrame,cpl_strdup(cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    <span class="comment">/* Output */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.output_filename"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    strcpy(cfg -> outName, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>      {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>      }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_MAP)) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       frame = cpl_frameset_find(sof,PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       strcpy(cfg -> wavemapim,cpl_strdup(cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>      (*status)++;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    return ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> parse_section_resampling(lamp_config * cfg, cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.ncoeffs"</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    cfg -> ncoeffs =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.nrows"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    cfg -> nrows =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    return ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> parse_section_extractspectrum(lamp_config * cfg, cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>    cpl_parameter *p; </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.lower_rejection"</span>);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.higher_rejection"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.lamp_spec.counts_to_intensity"</span>);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    cfg -> countsToIntensity = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    return ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> sinfo_lamp_free(lamp_config * cfg)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> {  </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   sinfo_lamp_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__ini__by__cpl_8h_source.html b/html/sinfo__lamp__ini__by__cpl_8h_source.html
index 5825576..8ac5b6f 100644
--- a/html/sinfo__lamp__ini__by__cpl_8h_source.html
+++ b/html/sinfo__lamp__ini__by__cpl_8h_source.html
@@ -2,60 +2,91 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name    :   sinfo_lamp_ini_by_cpl.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on   :   May 26, 2004</span>
-<a name="l00023"></a>00023 <span class="comment">   Description  :   lamp cpl input handling for SPIFFI</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_LAMP_INI_BY_CPL_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span>
-<a name="l00033"></a>00033 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                             Function prototypes </span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 lamp_config * 
-<a name="l00047"></a>00047 sinfo_parse_cpl_input_lamp(cpl_parameterlist* cpl_cfg, 
-<a name="l00048"></a>00048                            cpl_frameset* sof, 
-<a name="l00049"></a>00049                            cpl_frameset** raw) ;
-<a name="l00050"></a>00050 
-<a name="l00057"></a>00057 <span class="keywordtype">void</span> 
-<a name="l00058"></a>00058 sinfo_lamp_free(lamp_config * cfg);
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name    :   sinfo_lamp_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on   :   May 26, 2004</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description  :   lamp cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_LAMP_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LAMP_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_lamp_cfg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> lamp_config * </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> sinfo_parse_cpl_input_lamp(cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                            cpl_frameset* sof, </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                            cpl_frameset** raw) ;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> sinfo_lamp_free(lamp_config * cfg);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__spec__config_8c_source.html b/html/sinfo__lamp__spec__config_8c_source.html
index c11a642..9433c1b 100644
--- a/html/sinfo__lamp__spec__config_8c_source.html
+++ b/html/sinfo__lamp__spec__config_8c_source.html
@@ -2,133 +2,164 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_spec_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_spec_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_spec_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_lamp_spec_config.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00036"></a>00036   
-<a name="l00044"></a>00044 <span class="keywordtype">void</span>
-<a name="l00045"></a>00045  sinfo_lamp_spec_config_add(cpl_parameterlist *list)
-<a name="l00046"></a>00046 {
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048   cpl_parameter *p;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050   <span class="keywordflow">if</span> (!list) {
-<a name="l00051"></a>00051     <span class="keywordflow">return</span>;
-<a name="l00052"></a>00052   }
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="comment">/* Input file name */</span>
-<a name="l00055"></a>00055   <span class="comment">/* Output file name */</span>
-<a name="l00056"></a>00056 <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00057"></a>00057   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.output_filename"</span>,
-<a name="l00058"></a>00058                   CPL_TYPE_STRING,
-<a name="l00059"></a>00059                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00060"></a>00060                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00061"></a>00061                               <span class="stringliteral">"out_flatspec.fits"</span>);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-lampspec_filename"</span>);
-<a name="l00065"></a>00065   cpl_parameterlist_append(list, p);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   <span class="comment">/* number of coefficients for the polynomial interpolation */</span>
-<a name="l00069"></a>00069  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.ncoeffs"</span>,
-<a name="l00070"></a>00070                   CPL_TYPE_INT,
-<a name="l00071"></a>00071                               <span class="stringliteral">"No of polynomial coeffs"</span>,
-<a name="l00072"></a>00072                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00073"></a>00073                               3);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-ncoeffs"</span>);
-<a name="l00076"></a>00076   cpl_parameterlist_append(list, p);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   <span class="comment">/* number of image rows in the resampled frame </span>
-<a name="l00079"></a>00079 <span class="comment">    (1280 for single frames, 2560 for interleaved frames) */</span>
-<a name="l00080"></a>00080  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.nrows"</span>,
-<a name="l00081"></a>00081                   CPL_TYPE_INT,
-<a name="l00082"></a>00082                               <span class="stringliteral">"No of image rows in resampled frame"</span>,
-<a name="l00083"></a>00083                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00084"></a>00084                               SINFO_RESAMP_NROWS);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-nrows"</span>);
-<a name="l00087"></a>00087   cpl_parameterlist_append(list, p);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091   <span class="comment">/*Reconstruction */</span>
-<a name="l00092"></a>00092  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00093"></a>00093 <span class="comment">the average of columns */</span>
-<a name="l00094"></a>00094   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_spec.lower_rejection"</span>,
-<a name="l00095"></a>00095                   CPL_TYPE_DOUBLE,
-<a name="l00096"></a>00096                               <span class="stringliteral">"lower rejection"</span>,
-<a name="l00097"></a>00097                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00098"></a>00098                               0.1,0.0,1.0);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-low_rejection"</span>);
-<a name="l00101"></a>00101   cpl_parameterlist_append(list, p);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00104"></a>00104 <span class="comment">the average of columns */</span>
-<a name="l00105"></a>00105   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_spec.higher_rejection"</span>,
-<a name="l00106"></a>00106                   CPL_TYPE_DOUBLE,
-<a name="l00107"></a>00107                               <span class="stringliteral">"high rejection"</span>,
-<a name="l00108"></a>00108                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00109"></a>00109                               0.1,0.0,1.0);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-high_rejection"</span>);
-<a name="l00112"></a>00112   cpl_parameterlist_append(list, p);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.counts_to_intensity"</span>,
-<a name="l00116"></a>00116                   CPL_TYPE_DOUBLE,
-<a name="l00117"></a>00117                               <span class="stringliteral">"Counts To Intensity"</span>,
-<a name="l00118"></a>00118                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,
-<a name="l00119"></a>00119                               1.);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-cnt2int"</span>);
-<a name="l00122"></a>00122   cpl_parameterlist_append(list, p);
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_spec_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_spec_config.c,v 1.5 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_lamp_spec_config.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>  sinfo_lamp_spec_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> {</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   }</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="comment">/* Input file name */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.output_filename"</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                               <span class="stringliteral">"out_flatspec.fits"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-lampspec_filename"</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* number of coefficients for the polynomial interpolation */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.ncoeffs"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"No of polynomial coeffs"</span>,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               3);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-ncoeffs"</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="comment">/* number of image rows in the resampled frame </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">    (1280 for single frames, 2560 for interleaved frames) */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.nrows"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"No of image rows in resampled frame"</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               SINFO_RESAMP_NROWS);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-nrows"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/*Reconstruction */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_spec.lower_rejection"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                               <span class="stringliteral">"lower rejection"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-low_rejection"</span>);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.lamp_spec.higher_rejection"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                               <span class="stringliteral">"high rejection"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-high_rejection"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.lamp_spec.counts_to_intensity"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                               <span class="stringliteral">"Counts To Intensity"</span>,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                               <span class="stringliteral">"sinfoni.lamp_spec"</span>,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                               1.);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"lamp_spec-cnt2int"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__lamp__spec__config_8h_source.html b/html/sinfo__lamp__spec__config_8h_source.html
index a20c2ca..7e917ab 100644
--- a/html/sinfo__lamp__spec__config_8h_source.html
+++ b/html/sinfo__lamp__spec__config_8h_source.html
@@ -2,50 +2,81 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_lamp_spec_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_lamp_spec_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_lamp_spec_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="keywordtype">void</span>
-<a name="l00035"></a>00035 sinfo_lamp_spec_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_lamp_spec_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_lamp_spec_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Lamp_Spec Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> sinfo_lamp_spec_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__local__types_8h_source.html b/html/sinfo__local__types_8h_source.html
index 8f0b21e..53ab2fa 100644
--- a/html/sinfo__local__types_8h_source.html
+++ b/html/sinfo__local__types_8h_source.html
@@ -2,146 +2,177 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_local_types.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_local_types.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_local_types.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    Nov 27, 1995</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    all shared local types for eclipse</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">    PUBLIC NOTICE AS REQUIRED BY LAW: Any use of this product, in any</span>
-<a name="l00029"></a>00029 <span class="comment">    manner whatsoever, will increase the amount of disorder in the</span>
-<a name="l00030"></a>00030 <span class="comment">    universe. Although no liability is implied herein, the consumer is</span>
-<a name="l00031"></a>00031 <span class="comment">    warned that this process will ultimately lead to the heat death of the</span>
-<a name="l00032"></a>00032 <span class="comment">    universe.</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="comment">/*</span>
-<a name="l00035"></a>00035 <span class="comment">    $Id: sinfo_local_types.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00036"></a>00036 <span class="comment">    $Author: amodigli $</span>
-<a name="l00037"></a>00037 <span class="comment">    $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00038"></a>00038 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#ifndef SINFO_LOCAL_TYPES_H</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LOCAL_TYPES_H</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                                   Includes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                                   Defines</span>
-<a name="l00048"></a>00048 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                   New types</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="comment">/*</span>
-<a name="l00054"></a>00054 <span class="comment"> * These types are defined for portability issues</span>
-<a name="l00055"></a>00055 <span class="comment"> * On DEC-Alpha stations, long is 64 bits, but int is 32</span>
-<a name="l00056"></a>00056 <span class="comment"> * We have to redefine all int values accordingly to ensure</span>
-<a name="l00057"></a>00057 <span class="comment"> * portability!</span>
-<a name="l00058"></a>00058 <span class="comment"> */</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="preprocessor">#ifdef _DEC_ALPHA</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ulong32 ;
-<a name="l00062"></a>00062 <span class="keyword">typedef</span> <span class="keywordtype">int</span> long32 ;
-<a name="l00063"></a>00063 <span class="preprocessor">#else</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ulong32 ;
-<a name="l00065"></a>00065 <span class="keyword">typedef</span> <span class="keywordtype">long</span> long32 ;
-<a name="l00066"></a>00066 <span class="preprocessor">#endif</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span>
-<a name="l00068"></a>00068 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> ushort16 ;
-<a name="l00069"></a>00069 <span class="keyword">typedef</span> <span class="keywordtype">short</span> short16 ;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> uchar8 ;
-<a name="l00072"></a>00072 <span class="keyword">typedef</span> <span class="keywordtype">char</span> char8 ;
-<a name="l00073"></a>00073  
-<a name="l00074"></a>00074 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> BYTE ;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="comment">/* defined in limits.h, redefined here for portability  */</span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#define LONG32_MIN  (long32)(-2147483647-1) </span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define LONG32_MAX  (long32)(2147483647)</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define ULONG32_MAX (ulong32)(4294967295)</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span>
-<a name="l00082"></a>00082 <span class="preprocessor">#define SHRT16_MIN  (short16)(-32768)</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define SHRT16_MAX  (short16)(32767)</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define USHRT16_MAX (ushort16)(65535)</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span>
-<a name="l00086"></a>00086 <span class="keyword">typedef</span> <span class="keyword">struct </span>_DOUBLE_COMPLEX_ {
-<a name="l00087"></a>00087     <span class="keywordtype">double</span> x, y ;
-<a name="l00088"></a>00088 } dcomplex ;
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/* pixelvalue is the internal Pixel representation  */</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="preprocessor">#ifdef DOUBLEPIX</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">double</span>    pixelvalue ;
-<a name="l00095"></a>00095 <span class="preprocessor">#else</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">float</span>    pixelvalue ;
-<a name="l00097"></a>00097 <span class="preprocessor">#endif</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span>
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="comment">/*</span>
-<a name="l00102"></a>00102 <span class="comment"> * dpoint: useful to store point coordinates in double precision</span>
-<a name="l00103"></a>00103 <span class="comment"> */</span>
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="keyword">typedef</span> <span class="keyword">struct </span>_DPOINT_ {
-<a name="l00106"></a>00106     <span class="keywordtype">double</span> x ;
-<a name="l00107"></a>00107     <span class="keywordtype">double</span> y ;
-<a name="l00108"></a>00108 } dpoint ;
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 <span class="comment">/* Pixel map */</span>
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="keyword">typedef</span> uchar8 binpix ;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="keyword">typedef</span> <span class="keyword">struct </span>_PIXEL_MAP_
-<a name="l00120"></a>00120 {
-<a name="l00121"></a>00121     <span class="keywordtype">int</span>            lx, ly ;
-<a name="l00122"></a>00122     <span class="keywordtype">int</span>            nbpix ;
-<a name="l00123"></a>00123     <span class="keywordtype">int</span>            ngoodpix ;
-<a name="l00124"></a>00124     binpix    *    data ;
-<a name="l00125"></a>00125 } pixel_map ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="preprocessor">#define NullMap (pixel_map*)NULL</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_local_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_local_types.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    Nov 27, 1995</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    all shared local types for eclipse</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    PUBLIC NOTICE AS REQUIRED BY LAW: Any use of this product, in any</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    manner whatsoever, will increase the amount of disorder in the</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    universe. Although no liability is implied herein, the consumer is</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    warned that this process will ultimately lead to the heat death of the</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">    universe.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">    $Id: sinfo_local_types.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">    $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#ifndef SINFO_LOCAL_TYPES_H</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LOCAL_TYPES_H</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * These types are defined for portability issues</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> * On DEC-Alpha stations, long is 64 bits, but int is 32</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> * We have to redefine all int values accordingly to ensure</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> * portability!</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#ifdef _DEC_ALPHA</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ulong32 ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">typedef</span> <span class="keywordtype">int</span> long32 ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ulong32 ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">typedef</span> <span class="keywordtype">long</span> long32 ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> ushort16 ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">typedef</span> <span class="keywordtype">short</span> short16 ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> uchar8 ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">typedef</span> <span class="keywordtype">char</span> char8 ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>  </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> BYTE ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/* defined in limits.h, redefined here for portability  */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#define LONG32_MIN  (long32)(-2147483647-1) </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define LONG32_MAX  (long32)(2147483647)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define ULONG32_MAX (ulong32)(4294967295)</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor">#define SHRT16_MIN  (short16)(-32768)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define SHRT16_MAX  (short16)(32767)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#define USHRT16_MAX (ushort16)(65535)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_DOUBLE_COMPLEX_ {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordtype">double</span> x, y ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> } dcomplex ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/* pixelvalue is the internal Pixel representation  */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">#ifdef DOUBLEPIX</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">double</span>    pixelvalue ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">float</span>    pixelvalue ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> * dpoint: useful to store point coordinates in double precision</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_DPOINT_ {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordtype">double</span> x ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordtype">double</span> y ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> } dpoint ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/* Pixel map */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">typedef</span> uchar8 binpix ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_PIXEL_MAP_</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">int</span>            lx, ly ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">int</span>            nbpix ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">int</span>            ngoodpix ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     binpix    *    data ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> } pixel_map ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor">#define NullMap (pixel_map*)NULL</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__matrix_8c_source.html b/html/sinfo__matrix_8c_source.html
index 8a84248..7cb9563 100644
--- a/html/sinfo__matrix_8c_source.html
+++ b/html/sinfo__matrix_8c_source.html
@@ -2,328 +2,359 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_matrix.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_matrix.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_matrix.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    1994</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    basic 2d sinfo_eclipse_matrix handling routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"> $Id: sinfo_matrix.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Revision: 1.4 $</span>
-<a name="l00032"></a>00032 <span class="comment"> */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_matrix.h"</span>
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                                   Macros</span>
-<a name="l00050"></a>00050 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define dtiny(a) ((a)<0?(a)> -1.e-30:(a)<1.e-30)</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                        Private function prototypes</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span> gauss_pivot(<span class="keywordtype">double</span> *ptra, <span class="keywordtype">double</span> *ptrc, <span class="keywordtype">int</span> n);
-<a name="l00056"></a>00056 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00057"></a>00057 <span class="comment">                              Function codes</span>
-<a name="l00058"></a>00058 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 
-<a name="l00071"></a>00071 Matrix
-<a name="l00072"></a>00072 sinfo_create_mx(<span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> nc)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074     Matrix b;
-<a name="l00075"></a>00075     b = (Matrix)cpl_calloc(1,<span class="keyword">sizeof</span>(sinfo_eclipse_matrix));
-<a name="l00076"></a>00076     b->m = (<span class="keywordtype">double</span>*)cpl_calloc(nr*nc,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00077"></a>00077     b->nr= nr;
-<a name="l00078"></a>00078     b->nc= nc;
-<a name="l00079"></a>00079     <span class="keywordflow">return</span> b;
-<a name="l00080"></a>00080 }
-<a name="l00081"></a>00081 
-<a name="l00091"></a>00091 Matrix
-<a name="l00092"></a>00092 sinfo_copy_mx(Matrix a)
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094     Matrix b = sinfo_create_mx(a->nr,a->nc);
-<a name="l00095"></a>00095     <span class="keywordflow">if</span> (b!=NULL) {
-<a name="l00096"></a>00096         <span class="keyword">register</span> <span class="keywordtype">int</span> s = a->nr*a->nc;
-<a name="l00097"></a>00097         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm = b->m+s;
-<a name="l00098"></a>00098         <span class="keyword">register</span> <span class="keywordtype">double</span> *am = a->m+s;
-<a name="l00099"></a>00099         <span class="keywordflow">while</span> (s--) *--mm = *--am;
-<a name="l00100"></a>00100     }
-<a name="l00101"></a>00101     <span class="keywordflow">return</span> b;
-<a name="l00102"></a>00102 }
-<a name="l00103"></a>00103 
-<a name="l00113"></a>00113 <span class="keywordtype">void</span>
-<a name="l00114"></a>00114 sinfo_close_mx(Matrix a)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116     <span class="keywordflow">if</span> (a==NULL) return ;
-<a name="l00117"></a>00117     <span class="keywordflow">if</span> (a->m != NULL)
-<a name="l00118"></a>00118         cpl_free(a->m);
-<a name="l00119"></a>00119     cpl_free(a);
-<a name="l00120"></a>00120     <span class="keywordflow">return</span>;
-<a name="l00121"></a>00121 }
-<a name="l00122"></a>00122 
-<a name="l00133"></a>00133 Matrix
-<a name="l00134"></a>00134 sinfo_mul_mx(Matrix a, Matrix b)
-<a name="l00135"></a>00135 {
-<a name="l00136"></a>00136     Matrix c, d;
-<a name="l00137"></a>00137     <span class="keywordtype">int</span> n1=a->nr, n2=a->nc, n3=b->nc;
-<a name="l00138"></a>00138     <span class="keyword">register</span> <span class="keywordtype">double</span> *a0;
-<a name="l00139"></a>00139     <span class="keyword">register</span> <span class="keywordtype">double</span> *c0;
-<a name="l00140"></a>00140     <span class="keyword">register</span> <span class="keywordtype">double</span> *d0;
-<a name="l00141"></a>00141     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,k;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     <span class="keywordflow">if</span>(n2!=b->nr) <span class="keywordflow">return</span> NULL;
-<a name="l00144"></a>00144     c = sinfo_create_mx(n1,n3);
-<a name="l00145"></a>00145     d = sinfo_transp_mx(b);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="keywordflow">for</span> (i=0,c0=c->m;i<n1;i++)
-<a name="l00148"></a>00148         <span class="keywordflow">for</span> (j=0,d0=d->m;j<n3;j++,c0++)
-<a name="l00149"></a>00149             <span class="keywordflow">for</span> (k=0,*c0=0,a0=a->m+i*n2;k<n2;k++)
-<a name="l00150"></a>00150                 *c0 += *a0++ * *d0++;
-<a name="l00151"></a>00151     sinfo_close_mx(d);
-<a name="l00152"></a>00152     <span class="keywordflow">return</span> c;
-<a name="l00153"></a>00153 }
-<a name="l00154"></a>00154 
-<a name="l00166"></a>00166 Matrix
-<a name="l00167"></a>00167 sinfo_invert_mx(Matrix aa)
-<a name="l00168"></a>00168 {
-<a name="l00169"></a>00169     Matrix bb;
-<a name="l00170"></a>00170     <span class="keywordtype">int</span> test=1;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="keywordflow">if</span>(aa->nr!=aa->nc) <span class="keywordflow">return</span> NULL;
-<a name="l00173"></a>00173     bb = sinfo_create_mx(aa->nr,aa->nc);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="keywordflow">if</span>(aa->nr==1)
-<a name="l00176"></a>00176     {
-<a name="l00177"></a>00177         <span class="keywordtype">double</span> det;
-<a name="l00178"></a>00178         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;
-<a name="l00179"></a>00179         det= *(aa->m);
-<a name="l00180"></a>00180         <span class="keywordflow">if</span>(dtiny(det)) test=0;
-<a name="l00181"></a>00181         ted=1./det;
-<a name="l00182"></a>00182         *(bb->m)=ted;
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aa->nr==2)
-<a name="l00185"></a>00185     {
-<a name="l00186"></a>00186         <span class="keywordtype">double</span> det;
-<a name="l00187"></a>00187         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;
-<a name="l00188"></a>00188         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm=aa->m;
-<a name="l00189"></a>00189         <span class="keywordtype">double</span> a= *(mm++),b= *(mm++);
-<a name="l00190"></a>00190         <span class="keywordtype">double</span> c= *(mm++),d= *(mm);
-<a name="l00191"></a>00191         det=a*d-b*c;
-<a name="l00192"></a>00192         <span class="keywordflow">if</span>(dtiny(det)) test=0;
-<a name="l00193"></a>00193         ted=1./det;
-<a name="l00194"></a>00194         mm=bb->m;
-<a name="l00195"></a>00195         *(mm++)= d*ted,*(mm++)= -b*ted;
-<a name="l00196"></a>00196         *(mm++)= -c*ted,*(mm)= a*ted;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aa->nr==3)
-<a name="l00199"></a>00199     {
-<a name="l00200"></a>00200         <span class="keywordtype">double</span> det;
-<a name="l00201"></a>00201         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;
-<a name="l00202"></a>00202         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm=aa->m;
-<a name="l00203"></a>00203         <span class="keywordtype">double</span> a= *(mm++),b= *(mm++),c= *(mm++);
-<a name="l00204"></a>00204         <span class="keywordtype">double</span> d= *(mm++),e= *(mm++),f= *(mm++);
-<a name="l00205"></a>00205         <span class="keywordtype">double</span> g= *(mm++),h= *(mm++),i= *(mm);
-<a name="l00206"></a>00206         det=a*e*i-a*h*f-b*d*i+b*g*f+c*d*h-c*g*e;
-<a name="l00207"></a>00207         <span class="keywordflow">if</span>(dtiny(det)) test=0;
-<a name="l00208"></a>00208         ted=1./det;
-<a name="l00209"></a>00209         mm=bb->m;
-<a name="l00210"></a>00210         *(mm++)=(e*i-f*h)*ted,
-<a name="l00211"></a>00211                 *(mm++)=(c*h-b*i)*ted,
-<a name="l00212"></a>00212                 *(mm++)=(b*f-e*c)*ted;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214         *(mm++)=(f*g-d*i)*ted,
-<a name="l00215"></a>00215                 *(mm++)=(a*i-g*c)*ted,
-<a name="l00216"></a>00216                 *(mm++)=(d*c-a*f)*ted;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218         *(mm++)=(d*h-g*e)*ted,
-<a name="l00219"></a>00219                 *(mm++)=(g*b-a*h)*ted,
-<a name="l00220"></a>00220                 *(mm)=(a*e-d*b)*ted;
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222     <span class="keywordflow">else</span>
-<a name="l00223"></a>00223     {
-<a name="l00224"></a>00224         Matrix temp=sinfo_copy_mx(aa);
-<a name="l00225"></a>00225         <span class="keywordflow">if</span>(gauss_pivot(temp->m,bb->m,aa->nr)==0) test=0;
-<a name="l00226"></a>00226         sinfo_close_mx(temp);
-<a name="l00227"></a>00227     }
-<a name="l00228"></a>00228     <span class="keywordflow">if</span>(test==0)
-<a name="l00229"></a>00229     {
-<a name="l00230"></a>00230         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not invertible, aborting inversion"</span>);
-<a name="l00231"></a>00231         <span class="keywordflow">return</span> NULL;
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233     <span class="keywordflow">return</span> bb;
-<a name="l00234"></a>00234 }
-<a name="l00235"></a>00235 
-<a name="l00245"></a>00245 Matrix
-<a name="l00246"></a>00246 sinfo_transp_mx(Matrix a)
-<a name="l00247"></a>00247 {
-<a name="l00248"></a>00248     <span class="keyword">register</span> <span class="keywordtype">int</span> nc=a->nc, nr=a->nr;
-<a name="l00249"></a>00249     <span class="keyword">register</span> <span class="keywordtype">double</span> *a0;
-<a name="l00250"></a>00250     <span class="keyword">register</span> <span class="keywordtype">double</span> *b0;
-<a name="l00251"></a>00251     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j;
-<a name="l00252"></a>00252     Matrix b = sinfo_create_mx(nc,nr);
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254     <span class="keywordflow">if</span> (b == (Matrix)NULL) <span class="keywordflow">return</span> b ;
-<a name="l00255"></a>00255     <span class="keywordflow">for</span> (i=0,b0=b->m;i<nc;i++)
-<a name="l00256"></a>00256         <span class="keywordflow">for</span> (j=0,a0=a->m+i;j<nr;j++,a0+=nc,b0++)
-<a name="l00257"></a>00257             *b0 = *a0;
-<a name="l00258"></a>00258     <span class="keywordflow">return</span> b;
-<a name="l00259"></a>00259 }
-<a name="l00260"></a>00260 
-<a name="l00273"></a>00273 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00274"></a>00274 gauss_pivot(<span class="keywordtype">double</span> *ptra, <span class="keywordtype">double</span> *ptrc, <span class="keywordtype">int</span> n)
-<a name="l00275"></a>00275 <span class="comment">/* c(n,n) = a(n,n)^-1 */</span>
-<a name="l00276"></a>00276 {
-<a name="l00277"></a>00277 <span class="preprocessor">#define SINFO_ABS(a) (((a) > 0) ? (a) : -(a))</span>
-<a name="l00278"></a>00278 <span class="preprocessor"></span>
-<a name="l00279"></a>00279     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,k,l;
-<a name="l00280"></a>00280     <span class="keywordtype">int</span> maj;
-<a name="l00281"></a>00281     <span class="keywordtype">double</span> max,r,t;
-<a name="l00282"></a>00282     <span class="keywordtype">double</span> *ptrb;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     ptrb=(<span class="keywordtype">double</span> *)cpl_calloc(n*n,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00285"></a>00285     <span class="keywordflow">for</span>(i=0;i<n;i++)
-<a name="l00286"></a>00286         ptrb[i*n+i]= 1.0;
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     <span class="keywordflow">for</span> (i=1;i <= n;i++)
-<a name="l00289"></a>00289     {
-<a name="l00290"></a>00290         <span class="comment">/* Search max in current column  */</span>
-<a name="l00291"></a>00291         max = SINFO_ABS(*(ptra + n*i-n));
-<a name="l00292"></a>00292         maj = i;
-<a name="l00293"></a>00293         <span class="keywordflow">for</span> (j = i;j <= n;j++)
-<a name="l00294"></a>00294             <span class="keywordflow">if</span> (SINFO_ABS(*(ptra+n*j+i-n-1)) > max)
-<a name="l00295"></a>00295             {
-<a name="l00296"></a>00296                 maj = j;
-<a name="l00297"></a>00297                 max = SINFO_ABS(*(ptra+n*j+i-n-1));
-<a name="l00298"></a>00298             }
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300         <span class="comment">/* swap lines i and maj */</span>
-<a name="l00301"></a>00301         <span class="keywordflow">if</span> (maj != i)
-<a name="l00302"></a>00302         {
-<a name="l00303"></a>00303             <span class="keywordflow">for</span> (j = i;j <= n;j++)
-<a name="l00304"></a>00304             {
-<a name="l00305"></a>00305                 r = *(ptra+n*maj+j-n-1);
-<a name="l00306"></a>00306                 *(ptra+n*maj+j-n-1) = *(ptra+n*i+j-n-1);
-<a name="l00307"></a>00307                 *(ptra+n*i+j-n-1) = r;
-<a name="l00308"></a>00308             }
-<a name="l00309"></a>00309             <span class="keywordflow">for</span>(l=0;l<n;l++)
-<a name="l00310"></a>00310             {
-<a name="l00311"></a>00311                 r = *(ptrb+l*n+maj-1);
-<a name="l00312"></a>00312                 *(ptrb+l*n+maj-1) = *(ptrb+l*n+i-1);
-<a name="l00313"></a>00313                 *(ptrb+l*n+i-1) = r;
-<a name="l00314"></a>00314             }
-<a name="l00315"></a>00315         }
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317         <span class="comment">/* Subtract line by line */</span>
-<a name="l00318"></a>00318         <span class="keywordflow">for</span> (j = i + 1;j <= n;j++)
-<a name="l00319"></a>00319         {
-<a name="l00320"></a>00320             t = (*(ptra+(n+1)*i-n-1));
-<a name="l00321"></a>00321             <span class="keywordflow">if</span>(dtiny(t)) <span class="keywordflow">return</span>(0);
-<a name="l00322"></a>00322             r = (*(ptra+n*j+i-n-1)) / t;
-<a name="l00323"></a>00323             <span class="keywordflow">for</span>(l=0;l<n;l++)
-<a name="l00324"></a>00324                 *(ptrb+l*n+j-1) -= r * (*(ptrb+l*n+i-1));
-<a name="l00325"></a>00325             <span class="keywordflow">for</span> (k = i;k <= n;k++)
-<a name="l00326"></a>00326                 *(ptra+n*j+k-n-1) -= r * (*(ptra+n*i+k-n-1));
-<a name="l00327"></a>00327         }
-<a name="l00328"></a>00328     }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     <span class="comment">/* Triangular system resolution    */</span>
-<a name="l00331"></a>00331     <span class="keywordflow">for</span>(l=0;l<n;l++)
-<a name="l00332"></a>00332        <span class="keywordflow">for</span> (i = n;i >= 1;i--)
-<a name="l00333"></a>00333        {
-<a name="l00334"></a>00334         t = (*(ptra+(n+1)*i-n-1));
-<a name="l00335"></a>00335         <span class="keywordflow">if</span>(dtiny(t)) <span class="keywordflow">return</span>(0);
-<a name="l00336"></a>00336         *(ptrc+l+(i-1)*n) = (*(ptrb+l*n+i-1)) / t;
-<a name="l00337"></a>00337         <span class="keywordflow">if</span> (i > 1)
-<a name="l00338"></a>00338            <span class="keywordflow">for</span> (j = i - 1;j > 0;j--)
-<a name="l00339"></a>00339             *(ptrb+l*n+j-1) -= (*(ptra+n*j+i-n-1)) * 
-<a name="l00340"></a>00340                                            (*(ptrc+l+(i-1)*n));
-<a name="l00341"></a>00341         }
-<a name="l00342"></a>00342     cpl_free(ptrb);
-<a name="l00343"></a>00343     <span class="keywordflow">return</span>(1);
-<a name="l00344"></a>00344 }
-<a name="l00345"></a>00345 
-<a name="l00365"></a>00365 Matrix 
-<a name="l00366"></a>00366 sinfo_least_sq_mx(
-<a name="l00367"></a>00367     Matrix    A,
-<a name="l00368"></a>00368     Matrix    B
-<a name="l00369"></a>00369 )
-<a name="l00370"></a>00370 {
-<a name="l00371"></a>00371     Matrix    m1,
-<a name="l00372"></a>00372             m2,
-<a name="l00373"></a>00373             m3,
-<a name="l00374"></a>00374             m4,
-<a name="l00375"></a>00375             m5 ;
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     m1 = sinfo_transp_mx(A) ;
-<a name="l00380"></a>00380     m2 = sinfo_mul_mx(A, m1) ;
-<a name="l00381"></a>00381     m3 = sinfo_invert_mx(m2) ;
-<a name="l00382"></a>00382     m4 = sinfo_mul_mx(B, m1) ;
-<a name="l00383"></a>00383     m5 = sinfo_mul_mx(m4, m3) ;
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     sinfo_close_mx(m1) ;
-<a name="l00386"></a>00386     sinfo_close_mx(m2) ;
-<a name="l00387"></a>00387     sinfo_close_mx(m3) ;
-<a name="l00388"></a>00388     sinfo_close_mx(m4) ;
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390     <span class="keywordflow">return</span> m5 ;
-<a name="l00391"></a>00391 }
-<a name="l00392"></a>00392 
-<a name="l00405"></a>00405 <span class="keywordtype">void</span> 
-<a name="l00406"></a>00406 sinfo_print_mx(
-<a name="l00407"></a>00407     Matrix    M,
-<a name="l00408"></a>00408     <span class="keyword">const</span> <span class="keywordtype">char</span> *    name
-<a name="l00409"></a>00409 )
-<a name="l00410"></a>00410 {
-<a name="l00411"></a>00411     <span class="keywordtype">int</span>    i, j ;
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413     fprintf(stdout, <span class="stringliteral">"# sinfo_eclipse_matrix %s is [%d x %d]\n"</span>, 
-<a name="l00414"></a>00414         name, M->nr, M->nc) ;
-<a name="l00415"></a>00415     <span class="keywordflow">for</span> (j=0 ; j<M->nr ; j++) {
-<a name="l00416"></a>00416         <span class="keywordflow">for</span> (i=0 ; i<M->nc ; i++) {
-<a name="l00417"></a>00417             fprintf(stdout, <span class="stringliteral">"%g\t"</span>, M->m[i+j*M->nc]) ;
-<a name="l00418"></a>00418         }
-<a name="l00419"></a>00419         fprintf(stdout, <span class="stringliteral">"\n"</span>) ;
-<a name="l00420"></a>00420     }
-<a name="l00421"></a>00421     fprintf(stdout, <span class="stringliteral">"\n"</span>) ;
-<a name="l00422"></a>00422 }
-<a name="l00423"></a>00423 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_matrix.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_matrix.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    1994</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    basic 2d sinfo_eclipse_matrix handling routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Id: sinfo_matrix.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_matrix.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                   Macros</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#define dtiny(a) ((a)<0?(a)> -1.e-30:(a)<1.e-30)</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                        Private function prototypes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">int</span> gauss_pivot(<span class="keywordtype">double</span> *ptra, <span class="keywordtype">double</span> *ptrc, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> Matrix</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_create_mx(<span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> nc)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     Matrix b;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     b = (Matrix)cpl_calloc(1,<span class="keyword">sizeof</span>(sinfo_eclipse_matrix));</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     b->m = (<span class="keywordtype">double</span>*)cpl_calloc(nr*nc,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     b->nr= nr;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     b->nc= nc;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">return</span> b;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> Matrix</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_copy_mx(Matrix a)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     Matrix b = sinfo_create_mx(a->nr,a->nc);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordflow">if</span> (b!=NULL) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keyword">register</span> <span class="keywordtype">int</span> s = a->nr*a->nc;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm = b->m+s;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> *am = a->m+s;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordflow">while</span> (s--) *--mm = *--am;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">return</span> b;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> sinfo_close_mx(Matrix a)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">if</span> (a==NULL) return ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordflow">if</span> (a->m != NULL)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         cpl_free(a->m);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     cpl_free(a);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> Matrix</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> sinfo_mul_mx(Matrix a, Matrix b)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     Matrix c, d;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">int</span> n1=a->nr, n2=a->nc, n3=b->nc;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> *a0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> *c0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> *d0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,k;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">if</span>(n2!=b->nr) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     c = sinfo_create_mx(n1,n3);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     d = sinfo_transp_mx(b);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">for</span> (i=0,c0=c->m;i<n1;i++)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         <span class="keywordflow">for</span> (j=0,d0=d->m;j<n3;j++,c0++)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>             <span class="keywordflow">for</span> (k=0,*c0=0,a0=a->m+i*n2;k<n2;k++)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                 *c0 += *a0++ * *d0++;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     sinfo_close_mx(d);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">return</span> c;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> Matrix</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> sinfo_invert_mx(Matrix aa)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     Matrix bb;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordtype">int</span> test=1;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">if</span>(aa->nr!=aa->nc) <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     bb = sinfo_create_mx(aa->nr,aa->nc);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordflow">if</span>(aa->nr==1)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         <span class="keywordtype">double</span> det;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         det= *(aa->m);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         <span class="keywordflow">if</span>(dtiny(det)) test=0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         ted=1./det;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         *(bb->m)=ted;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aa->nr==2)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <span class="keywordtype">double</span> det;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm=aa->m;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         <span class="keywordtype">double</span> a= *(mm++),b= *(mm++);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="keywordtype">double</span> c= *(mm++),d= *(mm);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         det=a*d-b*c;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="keywordflow">if</span>(dtiny(det)) test=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         ted=1./det;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         mm=bb->m;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         *(mm++)= d*ted,*(mm++)= -b*ted;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         *(mm++)= -c*ted,*(mm)= a*ted;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aa->nr==3)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordtype">double</span> det;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> ted;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keyword">register</span> <span class="keywordtype">double</span> *mm=aa->m;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         <span class="keywordtype">double</span> a= *(mm++),b= *(mm++),c= *(mm++);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keywordtype">double</span> d= *(mm++),e= *(mm++),f= *(mm++);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="keywordtype">double</span> g= *(mm++),h= *(mm++),i= *(mm);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         det=a*e*i-a*h*f-b*d*i+b*g*f+c*d*h-c*g*e;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="keywordflow">if</span>(dtiny(det)) test=0;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         ted=1./det;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         mm=bb->m;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         *(mm++)=(e*i-f*h)*ted,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                 *(mm++)=(c*h-b*i)*ted,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                 *(mm++)=(b*f-e*c)*ted;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         *(mm++)=(f*g-d*i)*ted,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                 *(mm++)=(a*i-g*c)*ted,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                 *(mm++)=(d*c-a*f)*ted;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>         *(mm++)=(d*h-g*e)*ted,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                 *(mm++)=(g*b-a*h)*ted,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                 *(mm)=(a*e-d*b)*ted;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         Matrix temp=sinfo_copy_mx(aa);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         <span class="keywordflow">if</span>(gauss_pivot(temp->m,bb->m,aa->nr)==0) test=0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         sinfo_close_mx(temp);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">if</span>(test==0)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not invertible, aborting inversion"</span>);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">return</span> bb;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> Matrix</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> sinfo_transp_mx(Matrix a)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> nc=a->nc, nr=a->nr;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> *a0;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> *b0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     Matrix b = sinfo_create_mx(nc,nr);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordflow">if</span> (b == (Matrix)NULL) <span class="keywordflow">return</span> b ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">for</span> (i=0,b0=b->m;i<nc;i++)</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         <span class="keywordflow">for</span> (j=0,a0=a->m+i;j<nr;j++,a0+=nc,b0++)</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             *b0 = *a0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordflow">return</span> b;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> gauss_pivot(<span class="keywordtype">double</span> *ptra, <span class="keywordtype">double</span> *ptrc, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">/* c(n,n) = a(n,n)^-1 */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="preprocessor">#define SINFO_ABS(a) (((a) > 0) ? (a) : -(a))</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,k,l;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordtype">int</span> maj;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordtype">double</span> max,r,t;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordtype">double</span> *ptrb;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     ptrb=(<span class="keywordtype">double</span> *)cpl_calloc(n*n,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordflow">for</span>(i=0;i<n;i++)</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         ptrb[i*n+i]= 1.0;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">for</span> (i=1;i <= n;i++)</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         <span class="comment">/* Search max in current column  */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         max = SINFO_ABS(*(ptra + n*i-n));</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         maj = i;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="keywordflow">for</span> (j = i;j <= n;j++)</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>             <span class="keywordflow">if</span> (SINFO_ABS(*(ptra+n*j+i-n-1)) > max)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>             {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                 maj = j;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                 max = SINFO_ABS(*(ptra+n*j+i-n-1));</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>             }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <span class="comment">/* swap lines i and maj */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordflow">if</span> (maj != i)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>             <span class="keywordflow">for</span> (j = i;j <= n;j++)</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>             {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                 r = *(ptra+n*maj+j-n-1);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                 *(ptra+n*maj+j-n-1) = *(ptra+n*i+j-n-1);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                 *(ptra+n*i+j-n-1) = r;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>             }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             <span class="keywordflow">for</span>(l=0;l<n;l++)</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                 r = *(ptrb+l*n+maj-1);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 *(ptrb+l*n+maj-1) = *(ptrb+l*n+i-1);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                 *(ptrb+l*n+i-1) = r;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>             }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="comment">/* Subtract line by line */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         <span class="keywordflow">for</span> (j = i + 1;j <= n;j++)</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>             t = (*(ptra+(n+1)*i-n-1));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             <span class="keywordflow">if</span>(dtiny(t)) <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             r = (*(ptra+n*j+i-n-1)) / t;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             <span class="keywordflow">for</span>(l=0;l<n;l++)</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                 *(ptrb+l*n+j-1) -= r * (*(ptrb+l*n+i-1));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>             <span class="keywordflow">for</span> (k = i;k <= n;k++)</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                 *(ptra+n*j+k-n-1) -= r * (*(ptra+n*i+k-n-1));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="comment">/* Triangular system resolution    */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">for</span>(l=0;l<n;l++)</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>        <span class="keywordflow">for</span> (i = n;i >= 1;i--)</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>        {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         t = (*(ptra+(n+1)*i-n-1));</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="keywordflow">if</span>(dtiny(t)) <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>         *(ptrc+l+(i-1)*n) = (*(ptrb+l*n+i-1)) / t;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="keywordflow">if</span> (i > 1)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>            <span class="keywordflow">for</span> (j = i - 1;j > 0;j--)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>             *(ptrb+l*n+j-1) -= (*(ptra+n*j+i-n-1)) * </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                                            (*(ptrc+l+(i-1)*n));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     cpl_free(ptrb);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordflow">return</span>(1);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> Matrix </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> sinfo_least_sq_mx(</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     Matrix    A,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     Matrix    B</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     Matrix    m1,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>             m2,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>             m3,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>             m4,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>             m5 ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     m1 = sinfo_transp_mx(A) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     m2 = sinfo_mul_mx(A, m1) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     m3 = sinfo_invert_mx(m2) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     m4 = sinfo_mul_mx(B, m1) ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     m5 = sinfo_mul_mx(m4, m3) ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     sinfo_close_mx(m1) ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     sinfo_close_mx(m2) ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     sinfo_close_mx(m3) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     sinfo_close_mx(m4) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordflow">return</span> m5 ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> }</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> sinfo_print_mx(</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     Matrix    M,</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *    name</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> )</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="keywordtype">int</span>    i, j ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     fprintf(stdout, <span class="stringliteral">"# sinfo_eclipse_matrix %s is [%d x %d]\n"</span>, </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         name, M->nr, M->nc) ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordflow">for</span> (j=0 ; j<M->nr ; j++) {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         <span class="keywordflow">for</span> (i=0 ; i<M->nc ; i++) {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>             fprintf(stdout, <span class="stringliteral">"%g\t"</span>, M->m[i+j*M->nc]) ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>         }</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         fprintf(stdout, <span class="stringliteral">"\n"</span>) ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     fprintf(stdout, <span class="stringliteral">"\n"</span>) ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__matrix_8h_source.html b/html/sinfo__matrix_8h_source.html
index 9d705b0..69dbf23 100644
--- a/html/sinfo__matrix_8h_source.html
+++ b/html/sinfo__matrix_8h_source.html
@@ -2,122 +2,153 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_matrix.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_matrix.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_matrix.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    1994</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    basic 2d sinfo_eclipse_matrix handling routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"> $Id: sinfo_matrix.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Revision: 1.3 $</span>
-<a name="l00032"></a>00032 <span class="comment"> */</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifndef SINFO_MATRIX_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATRIX_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                   Includes</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <math.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                                   Defines</span>
-<a name="l00050"></a>00050 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="preprocessor">#define _(b,i,j) (*((b)->m+(i)*(b)->nc+(j))) </span><span class="comment">/* b(i,j)*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="preprocessor">#define mx_get(M,i,j)    ((M)->m[(i)+(j)*(M)->nc])</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define mx_set(M,i,j,v)    (mx_get(M,i,j)=v)</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">                                   New Types</span>
-<a name="l00060"></a>00060 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keyword">typedef</span> <span class="keyword">struct </span>_MATRIX_ {
-<a name="l00064"></a>00064     <span class="keywordtype">double</span>    *    m;
-<a name="l00065"></a>00065     <span class="keywordtype">int</span>         nr;
-<a name="l00066"></a>00066     <span class="keywordtype">int</span>         nc;
-<a name="l00067"></a>00067 } sinfo_eclipse_matrix, *Matrix;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00072"></a>00072 <span class="comment">                          Function ANSI C prototypes</span>
-<a name="l00073"></a>00073 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 
-<a name="l00086"></a>00086 Matrix
-<a name="l00087"></a>00087 sinfo_create_mx(<span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> nc) ;
-<a name="l00088"></a>00088 
-<a name="l00099"></a>00099 Matrix
-<a name="l00100"></a>00100 sinfo_copy_mx(Matrix a) ;
-<a name="l00101"></a>00101 
-<a name="l00112"></a>00112 <span class="keywordtype">void</span>
-<a name="l00113"></a>00113 sinfo_close_mx(Matrix a) ;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 
-<a name="l00127"></a>00127 Matrix
-<a name="l00128"></a>00128 sinfo_mul_mx(Matrix a, Matrix b) ;
-<a name="l00129"></a>00129 
-<a name="l00143"></a>00143 Matrix
-<a name="l00144"></a>00144 sinfo_invert_mx(Matrix aa) ;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 
-<a name="l00157"></a>00157 Matrix
-<a name="l00158"></a>00158 sinfo_transp_mx(Matrix a) ;
-<a name="l00159"></a>00159 
-<a name="l00179"></a>00179 Matrix sinfo_least_sq_mx(
-<a name="l00180"></a>00180     Matrix  A,
-<a name="l00181"></a>00181     Matrix  B
-<a name="l00182"></a>00182 ) ;
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184 
-<a name="l00197"></a>00197 <span class="keywordtype">void</span> sinfo_print_mx(
-<a name="l00198"></a>00198     Matrix  M,
-<a name="l00199"></a>00199     <span class="keyword">const</span> <span class="keywordtype">char</span> *  name
-<a name="l00200"></a>00200 ) ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_matrix.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_matrix.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    1994</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    basic 2d sinfo_eclipse_matrix handling routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Id: sinfo_matrix.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifndef SINFO_MATRIX_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATRIX_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#define _(b,i,j) (*((b)->m+(i)*(b)->nc+(j))) </span><span class="comment">/* b(i,j)*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define mx_get(M,i,j)    ((M)->m[(i)+(j)*(M)->nc])</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define mx_set(M,i,j,v)    (mx_get(M,i,j)=v)</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                                   New Types</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_MATRIX_ {</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="keywordtype">double</span>    *    m;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordtype">int</span>         nr;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordtype">int</span>         nc;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> } sinfo_eclipse_matrix, *Matrix;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                          Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> Matrix</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_create_mx(<span class="keywordtype">int</span> nr, <span class="keywordtype">int</span> nc) ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> Matrix</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_copy_mx(Matrix a) ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> sinfo_close_mx(Matrix a) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> Matrix</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> sinfo_mul_mx(Matrix a, Matrix b) ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> Matrix</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> sinfo_invert_mx(Matrix aa) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> Matrix</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> sinfo_transp_mx(Matrix a) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> Matrix sinfo_least_sq_mx(</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     Matrix  A,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     Matrix  B</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> ) ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="keywordtype">void</span> sinfo_print_mx(</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     Matrix  M,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *  name</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> ) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__median_8c_source.html b/html/sinfo__median_8c_source.html
index 6e1660b..cd9472b 100644
--- a/html/sinfo__median_8c_source.html
+++ b/html/sinfo__median_8c_source.html
@@ -2,246 +2,277 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_median.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_median.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_median.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    1998</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    Fast sinfo_median finding routines.</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment">    $Id: sinfo_median.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Date: 2012/03/02 08:42:20 $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00032"></a>00032 <span class="comment">*/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Includes</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_median.h"</span>
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                                   Macros</span>
-<a name="l00050"></a>00050 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define median_WIRTH(a,n) sinfo_kth_smallest(a,n,(((n)&1)?((n)/2):(((n)/2)-1)))</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                              Function codes</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 <span class="preprocessor">#define PIX_SWAP(a,b) { register pixelvalue t=(a);(a)=(b);(b)=t; }</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>
-<a name="l00085"></a>00085 pixelvalue 
-<a name="l00086"></a>00086 sinfo_kth_smallest(pixelvalue a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k)
-<a name="l00087"></a>00087 {
-<a name="l00088"></a>00088     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,l,m ;
-<a name="l00089"></a>00089     <span class="keyword">register</span> pixelvalue x ;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     l=0 ; m=n-1 ;
-<a name="l00092"></a>00092     <span class="keywordflow">while</span> (l<m) {
-<a name="l00093"></a>00093         x=a[k] ;
-<a name="l00094"></a>00094         i=l ;
-<a name="l00095"></a>00095         j=m ;
-<a name="l00096"></a>00096         <span class="keywordflow">do</span> {
-<a name="l00097"></a>00097             <span class="keywordflow">while</span> (a[i]<x) i++ ;
-<a name="l00098"></a>00098             <span class="keywordflow">while</span> (x<a[j]) j-- ;
-<a name="l00099"></a>00099             <span class="keywordflow">if</span> (i<=j) {
-<a name="l00100"></a>00100                 PIX_SWAP(a[i],a[j]) ;
-<a name="l00101"></a>00101                 i++ ; j-- ;
-<a name="l00102"></a>00102             }
-<a name="l00103"></a>00103         } <span class="keywordflow">while</span> (i<=j) ;
-<a name="l00104"></a>00104         <span class="keywordflow">if</span> (j<k) l=i ;
-<a name="l00105"></a>00105         <span class="keywordflow">if</span> (k<i) m=j ;
-<a name="l00106"></a>00106     }
-<a name="l00107"></a>00107     <span class="keywordflow">return</span> a[k] ;
-<a name="l00108"></a>00108 }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="preprocessor">#undef PIX_SWAP</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>
-<a name="l00126"></a>00126 <span class="preprocessor">#define DBL_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>
-<a name="l00128"></a>00128 <span class="keywordtype">double</span> 
-<a name="l00129"></a>00129 sinfo_kth_smallest_double(<span class="keywordtype">double</span> a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k)
-<a name="l00130"></a>00130 {
-<a name="l00131"></a>00131     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,l,m ;
-<a name="l00132"></a>00132     <span class="keyword">register</span> <span class="keywordtype">double</span> x ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     l=0 ; m=n-1 ;
-<a name="l00135"></a>00135     <span class="keywordflow">while</span> (l<m) {
-<a name="l00136"></a>00136         x=a[k] ;
-<a name="l00137"></a>00137         i=l ;
-<a name="l00138"></a>00138         j=m ;
-<a name="l00139"></a>00139         <span class="keywordflow">do</span> {
-<a name="l00140"></a>00140             <span class="keywordflow">while</span> (a[i]<x) i++ ;
-<a name="l00141"></a>00141             <span class="keywordflow">while</span> (x<a[j]) j-- ;
-<a name="l00142"></a>00142             <span class="keywordflow">if</span> (i<=j) {
-<a name="l00143"></a>00143                 DBL_SWAP(a[i],a[j]) ;
-<a name="l00144"></a>00144                 i++ ; j-- ;
-<a name="l00145"></a>00145             }
-<a name="l00146"></a>00146         } <span class="keywordflow">while</span> (i<=j) ;
-<a name="l00147"></a>00147         <span class="keywordflow">if</span> (j<k) l=i ;
-<a name="l00148"></a>00148         <span class="keywordflow">if</span> (k<i) m=j ;
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150     <span class="keywordflow">return</span> a[k] ;
-<a name="l00151"></a>00151 }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="preprocessor">#undef DBL_SWAP</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>
-<a name="l00155"></a>00155 <span class="preprocessor">#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); }</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }</span>
-<a name="l00157"></a>00157 <span class="preprocessor"></span>
-<a name="l00172"></a>00172 pixelvalue
-<a name="l00173"></a>00173 sinfo_opt_med3(
-<a name="l00174"></a>00174     pixelvalue  *   p
-<a name="l00175"></a>00175 )
-<a name="l00176"></a>00176 {
-<a name="l00177"></a>00177     PIX_SORT(p[0],p[1]) ; PIX_SORT(p[1],p[2]) ; PIX_SORT(p[0],p[1]) ;
-<a name="l00178"></a>00178     <span class="keywordflow">return</span>(p[1]) ;
-<a name="l00179"></a>00179 }
-<a name="l00180"></a>00180 
-<a name="l00195"></a>00195 pixelvalue
-<a name="l00196"></a>00196 sinfo_opt_med5(
-<a name="l00197"></a>00197     pixelvalue  *   p
-<a name="l00198"></a>00198 )
-<a name="l00199"></a>00199 {
-<a name="l00200"></a>00200     PIX_SORT(p[0],p[1]) ; PIX_SORT(p[3],p[4]) ; PIX_SORT(p[0],p[3]) ;
-<a name="l00201"></a>00201     PIX_SORT(p[1],p[4]) ; PIX_SORT(p[1],p[2]) ; PIX_SORT(p[2],p[3]) ;
-<a name="l00202"></a>00202     PIX_SORT(p[1],p[2]) ; <span class="keywordflow">return</span>(p[2]) ;
-<a name="l00203"></a>00203 }
-<a name="l00204"></a>00204 
-<a name="l00219"></a>00219 pixelvalue
-<a name="l00220"></a>00220 sinfo_opt_med7(
-<a name="l00221"></a>00221     pixelvalue  *   p
-<a name="l00222"></a>00222 )
-<a name="l00223"></a>00223 {
-<a name="l00224"></a>00224     PIX_SORT(p[0], p[5]) ; PIX_SORT(p[0], p[3]) ; PIX_SORT(p[1], p[6]) ;
-<a name="l00225"></a>00225     PIX_SORT(p[2], p[4]) ; PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[5]) ;
-<a name="l00226"></a>00226     PIX_SORT(p[2], p[6]) ; PIX_SORT(p[2], p[3]) ; PIX_SORT(p[3], p[6]) ;
-<a name="l00227"></a>00227     PIX_SORT(p[4], p[5]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[1], p[3]) ;
-<a name="l00228"></a>00228     PIX_SORT(p[3], p[4]) ; <span class="keywordflow">return</span> (p[3]) ;
-<a name="l00229"></a>00229 }
-<a name="l00230"></a>00230 
-<a name="l00249"></a>00249 pixelvalue
-<a name="l00250"></a>00250 sinfo_opt_med9(
-<a name="l00251"></a>00251     pixelvalue  *   p
-<a name="l00252"></a>00252 )
-<a name="l00253"></a>00253 {
-<a name="l00254"></a>00254     PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;
-<a name="l00255"></a>00255     PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[4]) ; PIX_SORT(p[6], p[7]) ;
-<a name="l00256"></a>00256     PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;
-<a name="l00257"></a>00257     PIX_SORT(p[0], p[3]) ; PIX_SORT(p[5], p[8]) ; PIX_SORT(p[4], p[7]) ;
-<a name="l00258"></a>00258     PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ;
-<a name="l00259"></a>00259     PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ;
-<a name="l00260"></a>00260     PIX_SORT(p[4], p[2]) ; <span class="keywordflow">return</span>(p[4]) ;
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00281"></a>00281 pixelvalue
-<a name="l00282"></a>00282 sinfo_opt_med25(
-<a name="l00283"></a>00283     pixelvalue  *   p
-<a name="l00284"></a>00284 )
-<a name="l00285"></a>00285 { 
-<a name="l00286"></a>00286     PIX_SORT(p[0], p[1]) ;   PIX_SORT(p[3], p[4]) ;   PIX_SORT(p[2], p[4]) ;
-<a name="l00287"></a>00287     PIX_SORT(p[2], p[3]) ;   PIX_SORT(p[6], p[7]) ;   PIX_SORT(p[5], p[7]) ;
-<a name="l00288"></a>00288     PIX_SORT(p[5], p[6]) ;   PIX_SORT(p[9], p[10]) ;  PIX_SORT(p[8], p[10]) ;
-<a name="l00289"></a>00289     PIX_SORT(p[8], p[9]) ;   PIX_SORT(p[12], p[13]) ; PIX_SORT(p[11], p[13]) ;
-<a name="l00290"></a>00290     PIX_SORT(p[11], p[12]) ; PIX_SORT(p[15], p[16]) ; PIX_SORT(p[14], p[16]) ;
-<a name="l00291"></a>00291     PIX_SORT(p[14], p[15]) ; PIX_SORT(p[18], p[19]) ; PIX_SORT(p[17], p[19]) ;
-<a name="l00292"></a>00292     PIX_SORT(p[17], p[18]) ; PIX_SORT(p[21], p[22]) ; PIX_SORT(p[20], p[22]) ;
-<a name="l00293"></a>00293     PIX_SORT(p[20], p[21]) ; PIX_SORT(p[23], p[24]) ; PIX_SORT(p[2], p[5]) ;
-<a name="l00294"></a>00294     PIX_SORT(p[3], p[6]) ;   PIX_SORT(p[0], p[6]) ;   PIX_SORT(p[0], p[3]) ;
-<a name="l00295"></a>00295     PIX_SORT(p[4], p[7]) ;   PIX_SORT(p[1], p[7]) ;   PIX_SORT(p[1], p[4]) ;
-<a name="l00296"></a>00296     PIX_SORT(p[11], p[14]) ; PIX_SORT(p[8], p[14]) ;  PIX_SORT(p[8], p[11]) ;
-<a name="l00297"></a>00297     PIX_SORT(p[12], p[15]) ; PIX_SORT(p[9], p[15]) ;  PIX_SORT(p[9], p[12]) ;
-<a name="l00298"></a>00298     PIX_SORT(p[13], p[16]) ; PIX_SORT(p[10], p[16]) ; PIX_SORT(p[10], p[13]) ;
-<a name="l00299"></a>00299     PIX_SORT(p[20], p[23]) ; PIX_SORT(p[17], p[23]) ; PIX_SORT(p[17], p[20]) ;
-<a name="l00300"></a>00300     PIX_SORT(p[21], p[24]) ; PIX_SORT(p[18], p[24]) ; PIX_SORT(p[18], p[21]) ;
-<a name="l00301"></a>00301     PIX_SORT(p[19], p[22]) ; PIX_SORT(p[8], p[17]) ;  PIX_SORT(p[9], p[18]) ;
-<a name="l00302"></a>00302     PIX_SORT(p[0], p[18]) ;  PIX_SORT(p[0], p[9]) ;   PIX_SORT(p[10], p[19]) ;
-<a name="l00303"></a>00303     PIX_SORT(p[1], p[19]) ;  PIX_SORT(p[1], p[10]) ;  PIX_SORT(p[11], p[20]) ;
-<a name="l00304"></a>00304     PIX_SORT(p[2], p[20]) ;  PIX_SORT(p[2], p[11]) ;  PIX_SORT(p[12], p[21]) ;
-<a name="l00305"></a>00305     PIX_SORT(p[3], p[21]) ;  PIX_SORT(p[3], p[12]) ;  PIX_SORT(p[13], p[22]) ;
-<a name="l00306"></a>00306     PIX_SORT(p[4], p[22]) ;  PIX_SORT(p[4], p[13]) ;  PIX_SORT(p[14], p[23]) ;
-<a name="l00307"></a>00307     PIX_SORT(p[5], p[23]) ;  PIX_SORT(p[5], p[14]) ;  PIX_SORT(p[15], p[24]) ;
-<a name="l00308"></a>00308     PIX_SORT(p[6], p[24]) ;  PIX_SORT(p[6], p[15]) ;  PIX_SORT(p[7], p[16]) ;
-<a name="l00309"></a>00309     PIX_SORT(p[7], p[19]) ;  PIX_SORT(p[13], p[21]) ; PIX_SORT(p[15], p[23]) ;
-<a name="l00310"></a>00310     PIX_SORT(p[7], p[13]) ;  PIX_SORT(p[7], p[15]) ;  PIX_SORT(p[1], p[9]) ;
-<a name="l00311"></a>00311     PIX_SORT(p[3], p[11]) ;  PIX_SORT(p[5], p[17]) ;  PIX_SORT(p[11], p[17]) ;
-<a name="l00312"></a>00312     PIX_SORT(p[9], p[17]) ;  PIX_SORT(p[4], p[10]) ;  PIX_SORT(p[6], p[12]) ;
-<a name="l00313"></a>00313     PIX_SORT(p[7], p[14]) ;  PIX_SORT(p[4], p[6]) ;   PIX_SORT(p[4], p[7]) ;
-<a name="l00314"></a>00314     PIX_SORT(p[12], p[14]) ; PIX_SORT(p[10], p[14]) ; PIX_SORT(p[6], p[7]) ;
-<a name="l00315"></a>00315     PIX_SORT(p[10], p[12]) ; PIX_SORT(p[6], p[10]) ;  PIX_SORT(p[6], p[17]) ;
-<a name="l00316"></a>00316     PIX_SORT(p[12], p[17]) ; PIX_SORT(p[7], p[17]) ;  PIX_SORT(p[7], p[10]) ;
-<a name="l00317"></a>00317     PIX_SORT(p[12], p[18]) ; PIX_SORT(p[7], p[12]) ;  PIX_SORT(p[10], p[18]) ;
-<a name="l00318"></a>00318     PIX_SORT(p[12], p[20]) ; PIX_SORT(p[10], p[20]) ; PIX_SORT(p[10], p[12]) ;
-<a name="l00319"></a>00319  
-<a name="l00320"></a>00320     <span class="keywordflow">return</span> (p[12]);
-<a name="l00321"></a>00321 } 
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323 <span class="preprocessor">#undef PIX_SORT</span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span><span class="preprocessor">#undef PIX_SWAP</span>
-<a name="l00325"></a>00325 <span class="preprocessor"></span>
-<a name="l00341"></a>00341 pixelvalue 
-<a name="l00342"></a>00342 sinfo_median_pixelvalue(pixelvalue * a, <span class="keywordtype">int</span> n)
-<a name="l00343"></a>00343 {
-<a name="l00344"></a>00344     pixelvalue    sinfo_median ;
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     <span class="keywordflow">switch</span>(n) {
-<a name="l00347"></a>00347         <span class="keywordflow">case</span> 3:
-<a name="l00348"></a>00348         sinfo_median = sinfo_opt_med3(a);
-<a name="l00349"></a>00349         break ;
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351         <span class="keywordflow">case</span> 5:
-<a name="l00352"></a>00352         sinfo_median = sinfo_opt_med5(a);
-<a name="l00353"></a>00353         break ;
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355         <span class="keywordflow">case</span> 7:
-<a name="l00356"></a>00356         sinfo_median = sinfo_opt_med7(a);
-<a name="l00357"></a>00357         break ;
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359         <span class="keywordflow">case</span> 9:
-<a name="l00360"></a>00360         sinfo_median = sinfo_opt_med9(a);
-<a name="l00361"></a>00361         break ;
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363         <span class="keywordflow">case</span> 25:
-<a name="l00364"></a>00364         sinfo_median = sinfo_opt_med25(a);
-<a name="l00365"></a>00365         break ;
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367         <span class="keywordflow">default</span>:
-<a name="l00368"></a>00368         sinfo_median = median_WIRTH(a,n);
-<a name="l00369"></a>00369         break ;
-<a name="l00370"></a>00370     }
-<a name="l00371"></a>00371     <span class="keywordflow">return</span> sinfo_median;
-<a name="l00372"></a>00372 }
-<a name="l00373"></a>00373 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_median.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_median.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    1998</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    Fast sinfo_median finding routines.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Id: sinfo_median.c,v 1.4 2012/03/02 08:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Date: 2012/03/02 08:42:20 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_median.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                   Macros</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#define median_WIRTH(a,n) sinfo_kth_smallest(a,n,(((n)&1)?((n)/2):(((n)/2)-1)))</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#define PIX_SWAP(a,b) { register pixelvalue t=(a);(a)=(b);(b)=t; }</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> pixelvalue </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> sinfo_kth_smallest(pixelvalue a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,l,m ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keyword">register</span> pixelvalue x ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     l=0 ; m=n-1 ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordflow">while</span> (l<m) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         x=a[k] ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         i=l ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         j=m ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>             <span class="keywordflow">while</span> (a[i]<x) i++ ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>             <span class="keywordflow">while</span> (x<a[j]) j-- ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>             <span class="keywordflow">if</span> (i<=j) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                 PIX_SWAP(a[i],a[j]) ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                 i++ ; j-- ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>             }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         } <span class="keywordflow">while</span> (i<=j) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keywordflow">if</span> (j<k) l=i ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordflow">if</span> (k<i) m=j ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">return</span> a[k] ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#undef PIX_SWAP</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor">#define DBL_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> sinfo_kth_smallest_double(<span class="keywordtype">double</span> a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keyword">register</span> <span class="keywordtype">int</span> i,j,l,m ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keyword">register</span> <span class="keywordtype">double</span> x ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     l=0 ; m=n-1 ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">while</span> (l<m) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         x=a[k] ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         i=l ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         j=m ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>             <span class="keywordflow">while</span> (a[i]<x) i++ ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>             <span class="keywordflow">while</span> (x<a[j]) j-- ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>             <span class="keywordflow">if</span> (i<=j) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                 DBL_SWAP(a[i],a[j]) ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                 i++ ; j-- ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>             }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         } <span class="keywordflow">while</span> (i<=j) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         <span class="keywordflow">if</span> (j<k) l=i ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         <span class="keywordflow">if</span> (k<i) m=j ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">return</span> a[k] ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">#undef DBL_SWAP</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor">#define PIX_SORT(a,b) { if ((a)>(b)) PIX_SWAP((a),(b)); }</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span><span class="preprocessor">#define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> pixelvalue</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> sinfo_opt_med3(</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> )</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     PIX_SORT(p[0],p[1]) ; PIX_SORT(p[1],p[2]) ; PIX_SORT(p[0],p[1]) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">return</span>(p[1]) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> pixelvalue</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> sinfo_opt_med5(</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> )</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     PIX_SORT(p[0],p[1]) ; PIX_SORT(p[3],p[4]) ; PIX_SORT(p[0],p[3]) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     PIX_SORT(p[1],p[4]) ; PIX_SORT(p[1],p[2]) ; PIX_SORT(p[2],p[3]) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     PIX_SORT(p[1],p[2]) ; <span class="keywordflow">return</span>(p[2]) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> pixelvalue</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> sinfo_opt_med7(</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> )</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     PIX_SORT(p[0], p[5]) ; PIX_SORT(p[0], p[3]) ; PIX_SORT(p[1], p[6]) ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     PIX_SORT(p[2], p[4]) ; PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[5]) ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     PIX_SORT(p[2], p[6]) ; PIX_SORT(p[2], p[3]) ; PIX_SORT(p[3], p[6]) ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     PIX_SORT(p[4], p[5]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[1], p[3]) ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     PIX_SORT(p[3], p[4]) ; <span class="keywordflow">return</span> (p[3]) ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> pixelvalue</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> sinfo_opt_med9(</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> )</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     PIX_SORT(p[0], p[1]) ; PIX_SORT(p[3], p[4]) ; PIX_SORT(p[6], p[7]) ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     PIX_SORT(p[1], p[2]) ; PIX_SORT(p[4], p[5]) ; PIX_SORT(p[7], p[8]) ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     PIX_SORT(p[0], p[3]) ; PIX_SORT(p[5], p[8]) ; PIX_SORT(p[4], p[7]) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     PIX_SORT(p[3], p[6]) ; PIX_SORT(p[1], p[4]) ; PIX_SORT(p[2], p[5]) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     PIX_SORT(p[4], p[7]) ; PIX_SORT(p[4], p[2]) ; PIX_SORT(p[6], p[4]) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     PIX_SORT(p[4], p[2]) ; <span class="keywordflow">return</span>(p[4]) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> pixelvalue</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> sinfo_opt_med25(</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> )</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> { </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     PIX_SORT(p[0], p[1]) ;   PIX_SORT(p[3], p[4]) ;   PIX_SORT(p[2], p[4]) ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     PIX_SORT(p[2], p[3]) ;   PIX_SORT(p[6], p[7]) ;   PIX_SORT(p[5], p[7]) ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     PIX_SORT(p[5], p[6]) ;   PIX_SORT(p[9], p[10]) ;  PIX_SORT(p[8], p[10]) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     PIX_SORT(p[8], p[9]) ;   PIX_SORT(p[12], p[13]) ; PIX_SORT(p[11], p[13]) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     PIX_SORT(p[11], p[12]) ; PIX_SORT(p[15], p[16]) ; PIX_SORT(p[14], p[16]) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     PIX_SORT(p[14], p[15]) ; PIX_SORT(p[18], p[19]) ; PIX_SORT(p[17], p[19]) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     PIX_SORT(p[17], p[18]) ; PIX_SORT(p[21], p[22]) ; PIX_SORT(p[20], p[22]) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     PIX_SORT(p[20], p[21]) ; PIX_SORT(p[23], p[24]) ; PIX_SORT(p[2], p[5]) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     PIX_SORT(p[3], p[6]) ;   PIX_SORT(p[0], p[6]) ;   PIX_SORT(p[0], p[3]) ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     PIX_SORT(p[4], p[7]) ;   PIX_SORT(p[1], p[7]) ;   PIX_SORT(p[1], p[4]) ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     PIX_SORT(p[11], p[14]) ; PIX_SORT(p[8], p[14]) ;  PIX_SORT(p[8], p[11]) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     PIX_SORT(p[12], p[15]) ; PIX_SORT(p[9], p[15]) ;  PIX_SORT(p[9], p[12]) ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     PIX_SORT(p[13], p[16]) ; PIX_SORT(p[10], p[16]) ; PIX_SORT(p[10], p[13]) ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     PIX_SORT(p[20], p[23]) ; PIX_SORT(p[17], p[23]) ; PIX_SORT(p[17], p[20]) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     PIX_SORT(p[21], p[24]) ; PIX_SORT(p[18], p[24]) ; PIX_SORT(p[18], p[21]) ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     PIX_SORT(p[19], p[22]) ; PIX_SORT(p[8], p[17]) ;  PIX_SORT(p[9], p[18]) ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     PIX_SORT(p[0], p[18]) ;  PIX_SORT(p[0], p[9]) ;   PIX_SORT(p[10], p[19]) ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     PIX_SORT(p[1], p[19]) ;  PIX_SORT(p[1], p[10]) ;  PIX_SORT(p[11], p[20]) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     PIX_SORT(p[2], p[20]) ;  PIX_SORT(p[2], p[11]) ;  PIX_SORT(p[12], p[21]) ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     PIX_SORT(p[3], p[21]) ;  PIX_SORT(p[3], p[12]) ;  PIX_SORT(p[13], p[22]) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     PIX_SORT(p[4], p[22]) ;  PIX_SORT(p[4], p[13]) ;  PIX_SORT(p[14], p[23]) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     PIX_SORT(p[5], p[23]) ;  PIX_SORT(p[5], p[14]) ;  PIX_SORT(p[15], p[24]) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     PIX_SORT(p[6], p[24]) ;  PIX_SORT(p[6], p[15]) ;  PIX_SORT(p[7], p[16]) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     PIX_SORT(p[7], p[19]) ;  PIX_SORT(p[13], p[21]) ; PIX_SORT(p[15], p[23]) ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     PIX_SORT(p[7], p[13]) ;  PIX_SORT(p[7], p[15]) ;  PIX_SORT(p[1], p[9]) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     PIX_SORT(p[3], p[11]) ;  PIX_SORT(p[5], p[17]) ;  PIX_SORT(p[11], p[17]) ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     PIX_SORT(p[9], p[17]) ;  PIX_SORT(p[4], p[10]) ;  PIX_SORT(p[6], p[12]) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     PIX_SORT(p[7], p[14]) ;  PIX_SORT(p[4], p[6]) ;   PIX_SORT(p[4], p[7]) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     PIX_SORT(p[12], p[14]) ; PIX_SORT(p[10], p[14]) ; PIX_SORT(p[6], p[7]) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     PIX_SORT(p[10], p[12]) ; PIX_SORT(p[6], p[10]) ;  PIX_SORT(p[6], p[17]) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     PIX_SORT(p[12], p[17]) ; PIX_SORT(p[7], p[17]) ;  PIX_SORT(p[7], p[10]) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     PIX_SORT(p[12], p[18]) ; PIX_SORT(p[7], p[12]) ;  PIX_SORT(p[10], p[18]) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     PIX_SORT(p[12], p[20]) ; PIX_SORT(p[10], p[20]) ; PIX_SORT(p[10], p[12]) ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>  </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">return</span> (p[12]);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> } </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">#undef PIX_SORT</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor"></span><span class="preprocessor">#undef PIX_SWAP</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> pixelvalue </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> sinfo_median_pixelvalue(pixelvalue * a, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     pixelvalue    sinfo_median ;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">switch</span>(n) {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>         sinfo_median = sinfo_opt_med3(a);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         break ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keywordflow">case</span> 5:</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         sinfo_median = sinfo_opt_med5(a);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         break ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         <span class="keywordflow">case</span> 7:</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         sinfo_median = sinfo_opt_med7(a);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         break ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         <span class="keywordflow">case</span> 9:</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         sinfo_median = sinfo_opt_med9(a);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         break ;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         <span class="keywordflow">case</span> 25:</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         sinfo_median = sinfo_opt_med25(a);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         break ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         sinfo_median = median_WIRTH(a,n);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         break ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     <span class="keywordflow">return</span> sinfo_median;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__median_8h_source.html b/html/sinfo__median_8h_source.html
index 6b218da..2a147f9 100644
--- a/html/sinfo__median_8h_source.html
+++ b/html/sinfo__median_8h_source.html
@@ -2,102 +2,133 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_median.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_median.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_median.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    1998</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    Fast sinfo_median finding routines</span>
-<a name="l00025"></a>00025 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="comment">/*</span>
-<a name="l00027"></a>00027 <span class="comment">    $Id: sinfo_median.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00028"></a>00028 <span class="comment">    $Author: amodigli $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Revision: 1.3 $</span>
-<a name="l00031"></a>00031 <span class="comment">*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifndef SINFO_MEDIAN_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MEDIAN_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* Get the definition of a pixelvalue */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                               Function prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 pixelvalue 
-<a name="l00076"></a>00076 sinfo_kth_smallest(pixelvalue a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k);
-<a name="l00077"></a>00077 
-<a name="l00092"></a>00092 <span class="keywordtype">double</span> 
-<a name="l00093"></a>00093 sinfo_kth_smallest_double(<span class="keywordtype">double</span> a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k) ;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="preprocessor">#define median_double(a,n) \</span>
-<a name="l00096"></a>00096 <span class="preprocessor">sinfo_kth_smallest_double(a,n,(((n)&1)?((n)/2):(((n)/2)-1)))</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span>
-<a name="l00112"></a>00112 pixelvalue
-<a name="l00113"></a>00113 sinfo_opt_med3(
-<a name="l00114"></a>00114     pixelvalue  *   p
-<a name="l00115"></a>00115 ) ;
-<a name="l00116"></a>00116 
-<a name="l00131"></a>00131 pixelvalue
-<a name="l00132"></a>00132 sinfo_opt_med5(
-<a name="l00133"></a>00133     pixelvalue  *   p
-<a name="l00134"></a>00134 );
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 
-<a name="l00151"></a>00151 pixelvalue
-<a name="l00152"></a>00152 sinfo_opt_med7(
-<a name="l00153"></a>00153     pixelvalue  *   p
-<a name="l00154"></a>00154 ) ;
-<a name="l00155"></a>00155 
-<a name="l00174"></a>00174 pixelvalue
-<a name="l00175"></a>00175 sinfo_opt_med9(
-<a name="l00176"></a>00176     pixelvalue  *   p
-<a name="l00177"></a>00177 ) ;
-<a name="l00178"></a>00178 
-<a name="l00197"></a>00197 pixelvalue
-<a name="l00198"></a>00198 sinfo_opt_med25(
-<a name="l00199"></a>00199     pixelvalue  *   p
-<a name="l00200"></a>00200 ) ;
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 
-<a name="l00218"></a>00218 pixelvalue 
-<a name="l00219"></a>00219 sinfo_median_pixelvalue(pixelvalue * a, <span class="keywordtype">int</span> n);
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_median.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_median.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    1998</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    Fast sinfo_median finding routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">    $Id: sinfo_median.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifndef SINFO_MEDIAN_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MEDIAN_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* Get the definition of a pixelvalue */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> pixelvalue </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_kth_smallest(pixelvalue a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> sinfo_kth_smallest_double(<span class="keywordtype">double</span> a[], <span class="keywordtype">int</span> n, <span class="keywordtype">int</span> k) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#define median_double(a,n) \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">sinfo_kth_smallest_double(a,n,(((n)&1)?((n)/2):(((n)/2)-1)))</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> pixelvalue</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> sinfo_opt_med3(</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> ) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> pixelvalue</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> sinfo_opt_med5(</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> );</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> pixelvalue</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> sinfo_opt_med7(</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> ) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> pixelvalue</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> sinfo_opt_med9(</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> ) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> pixelvalue</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> sinfo_opt_med25(</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     pixelvalue  *   p</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> ) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> pixelvalue </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> sinfo_median_pixelvalue(pixelvalue * a, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__merge_8c_source.html b/html/sinfo__merge_8c_source.html
index 0f244a4..2561d10 100644
--- a/html/sinfo__merge_8c_source.html
+++ b/html/sinfo__merge_8c_source.html
@@ -2,984 +2,1015 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_merge.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_merge.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">* </span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  04/07/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME              </span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_merge.c - merges the rows of two image data frames into</span>
-<a name="l00032"></a>00032 <span class="comment">*                  one frame with doubled column length     </span>
-<a name="l00033"></a>00033 <span class="comment">*        </span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*   #include "merge.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*</span>
-<a name="l00037"></a>00037 <span class="comment">*   a) cpl_image * sinfo_sinfo_merge_images ( cpl_image * im1, </span>
-<a name="l00038"></a>00038 <span class="comment">*                               cpl_image * im2, </span>
-<a name="l00039"></a>00039 <span class="comment">*                               cpl_image * res_image )</span>
-<a name="l00040"></a>00040 <span class="comment">*</span>
-<a name="l00041"></a>00041 <span class="comment">*   1) cpl_image * sinfo_new_remove_general_offset( cpl_image * im1, </span>
-<a name="l00042"></a>00042 <span class="comment">*                                      cpl_image * im2, </span>
-<a name="l00043"></a>00043 <span class="comment">*                                      cpl_image * res_image, </span>
-<a name="l00044"></a>00044 <span class="comment">*                                      int n )</span>
-<a name="l00045"></a>00045 <span class="comment">*</span>
-<a name="l00046"></a>00046 <span class="comment">*   2) cpl_image * sinfo_new_remove_regional_tilt ( cpl_image * im1,</span>
-<a name="l00047"></a>00047 <span class="comment">*                                      cpl_image * im2, </span>
-<a name="l00048"></a>00048 <span class="comment">*                                      cpl_image * res_image )</span>
-<a name="l00049"></a>00049 <span class="comment">*</span>
-<a name="l00050"></a>00050 <span class="comment">*   3) cpl_image * sinfo_new_remove_column_offset ( cpl_image * im1, </span>
-<a name="l00051"></a>00051 <span class="comment">*                                      cpl_image * im2, </span>
-<a name="l00052"></a>00052 <span class="comment">*                                      cpl_image * res_image )</span>
-<a name="l00053"></a>00053 <span class="comment">*</span>
-<a name="l00054"></a>00054 <span class="comment">*   4) cpl_image * sinfo_new_remove_residual_tilt ( cpl_image * im2, </span>
-<a name="l00055"></a>00055 <span class="comment">                                                   cpl_image * res_image )</span>
-<a name="l00056"></a>00056 <span class="comment">*</span>
-<a name="l00057"></a>00057 <span class="comment">*   5) cpl_image * sinfo_new_remove_residual_offset( cpl_image * im2, </span>
-<a name="l00058"></a>00058 <span class="comment">                                                    cpl_image * res_image )</span>
-<a name="l00059"></a>00059 <span class="comment">*</span>
-<a name="l00060"></a>00060 <span class="comment">*   DESCRIPTION</span>
-<a name="l00061"></a>00061 <span class="comment">*   a) merges the rows of two image frames in a way that the resulting</span>
-<a name="l00062"></a>00062 <span class="comment">*      image has double length in y-direction</span>
-<a name="l00063"></a>00063 <span class="comment">*</span>
-<a name="l00064"></a>00064 <span class="comment">*        The procedures are used in the SPIFFI data reduction to merge two </span>
-<a name="l00065"></a>00065 <span class="comment">*        data frames. In order to fully match the two input frames there</span>
-<a name="l00066"></a>00066 <span class="comment">*        are five steps (procedures) foreseen:</span>
-<a name="l00067"></a>00067 <span class="comment">*        1) remove general offset between the frames, created by e.g. different</span>
-<a name="l00068"></a>00068 <span class="comment">*           air masses. </span>
-<a name="l00069"></a>00069 <span class="comment">*        2) remove regional tilt between frames, created by e.g. different </span>
-<a name="l00070"></a>00070 <span class="comment">*           emissivities.</span>
-<a name="l00071"></a>00071 <span class="comment">*        3) remove individual column offsets, created e.g. by imperfect </span>
-<a name="l00072"></a>00072 <span class="comment">*           guiding, offset is divided out.</span>
-<a name="l00073"></a>00073 <span class="comment">*        4) remove residual individual column tilts, created by previous </span>
-<a name="l00074"></a>00074 <span class="comment">*           operations.</span>
-<a name="l00075"></a>00075 <span class="comment">*        5) remove residual column offsets by subtracting the sinfo_median.</span>
-<a name="l00076"></a>00076 <span class="comment">*</span>
-<a name="l00077"></a>00077 <span class="comment">*   FILES</span>
-<a name="l00078"></a>00078 <span class="comment">*</span>
-<a name="l00079"></a>00079 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00080"></a>00080 <span class="comment">*</span>
-<a name="l00081"></a>00081 <span class="comment">*   RETURN VALUES </span>
-<a name="l00082"></a>00082 <span class="comment">*   always the pointer to the image data structure cpl_image</span>
-<a name="l00083"></a>00083 <span class="comment">*</span>
-<a name="l00084"></a>00084 <span class="comment">*   CAUTIONS </span>
-<a name="l00085"></a>00085 <span class="comment">*</span>
-<a name="l00086"></a>00086 <span class="comment">*   EXAMPLES</span>
-<a name="l00087"></a>00087 <span class="comment">*</span>
-<a name="l00088"></a>00088 <span class="comment">*   SEE ALSO</span>
-<a name="l00089"></a>00089 <span class="comment">*   Python script merging.py</span>
-<a name="l00090"></a>00090 <span class="comment">*</span>
-<a name="l00091"></a>00091 <span class="comment">*   BUGS   </span>
-<a name="l00092"></a>00092 <span class="comment">*</span>
-<a name="l00093"></a>00093 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00094"></a>00094 <span class="comment">*/</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00098"></a>00098 <span class="preprocessor">#endif</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="comment">/* </span>
-<a name="l00102"></a>00102 <span class="comment"> * System Headers</span>
-<a name="l00103"></a>00103 <span class="comment"> */</span>
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="comment">/* </span>
-<a name="l00106"></a>00106 <span class="comment"> * Local Headers</span>
-<a name="l00107"></a>00107 <span class="comment"> */</span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="preprocessor">#include "sinfo_merge.h"</span>
-<a name="l00110"></a>00110 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00130"></a>00130 cpl_image * sinfo_sinfo_merge_images ( cpl_image * im1, 
-<a name="l00131"></a>00131                          cpl_image * im2, 
-<a name="l00132"></a>00132                          cpl_image * res_image )
-<a name="l00133"></a>00133 {
-<a name="l00134"></a>00134     cpl_image * out_image ;
-<a name="l00135"></a>00135     cpl_image * residual ;
-<a name="l00136"></a>00136     <span class="keywordtype">int</span> i, j ;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="keywordtype">int</span> lx1=0;
-<a name="l00139"></a>00139     <span class="keywordtype">int</span> ly1=0;
-<a name="l00140"></a>00140     <span class="keywordtype">int</span> lx2=0;
-<a name="l00141"></a>00141     <span class="keywordtype">int</span> ly2=0;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="keywordtype">float</span>* pi1data=NULL;
-<a name="l00145"></a>00145     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00146"></a>00146     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00147"></a>00147     <span class="keywordtype">float</span>* poutdata=NULL;
-<a name="l00148"></a>00148     <span class="keywordtype">float</span>* ptmpdata=NULL;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL)
-<a name="l00153"></a>00153     {
-<a name="l00154"></a>00154         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" null image as input"</span>) ;
-<a name="l00155"></a>00155         <span class="keywordflow">return</span> NULL ;
-<a name="l00156"></a>00156     }
-<a name="l00157"></a>00157     lx1=cpl_image_get_size_x(im1);
-<a name="l00158"></a>00158     ly1=cpl_image_get_size_y(im1);
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     lx2=cpl_image_get_size_x(im2);
-<a name="l00161"></a>00161     ly2=cpl_image_get_size_y(im2);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     pi1data=cpl_image_get_data_float(im1);
-<a name="l00166"></a>00166     pi2data=cpl_image_get_data_float(im2);
-<a name="l00167"></a>00167     pirdata=cpl_image_get_data_float(res_image);
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )
-<a name="l00171"></a>00171     {
-<a name="l00172"></a>00172         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;
-<a name="l00173"></a>00173         <span class="keywordflow">return</span> NULL ;
-<a name="l00174"></a>00174     }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     <span class="comment">/* allocate memory */</span>
-<a name="l00177"></a>00177     <span class="keywordflow">if</span> ( NULL == (out_image = cpl_image_new (lx1, 2 * ly1,CPL_TYPE_FLOAT)) )
-<a name="l00178"></a>00178     {
-<a name="l00179"></a>00179         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image"</span>) ;
-<a name="l00180"></a>00180         <span class="keywordflow">return</span> NULL ;
-<a name="l00181"></a>00181     }
-<a name="l00182"></a>00182     poutdata=cpl_image_get_data_float(out_image);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> ( NULL == (residual = cpl_image_new (lx1, ly1,CPL_TYPE_FLOAT)) )
-<a name="l00185"></a>00185     {
-<a name="l00186"></a>00186         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image "</span>) ;
-<a name="l00187"></a>00187         <span class="keywordflow">return</span> NULL ;
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189     ptmpdata=cpl_image_get_data_float(residual);
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">/* now compute the final residual image */</span>
-<a name="l00192"></a>00192     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )
-<a name="l00193"></a>00193     {
-<a name="l00194"></a>00194         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(pi2data[i]) )
-<a name="l00195"></a>00195         {
-<a name="l00196"></a>00196             ptmpdata[i] = ZERO ;
-<a name="l00197"></a>00197         }   
-<a name="l00198"></a>00198         <span class="keywordflow">else</span>
-<a name="l00199"></a>00199         {
-<a name="l00200"></a>00200             ptmpdata[i] = pi1data[i] - pi2data[i] ;
-<a name="l00201"></a>00201         }
-<a name="l00202"></a>00202         pirdata[i] = ptmpdata[i] ;
-<a name="l00203"></a>00203     }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="comment">/* now merge the two images */</span>
-<a name="l00206"></a>00206     <span class="keywordflow">for</span> ( i = 0 ; i < ly1 ; i ++ )
-<a name="l00207"></a>00207     {
-<a name="l00208"></a>00208         <span class="keywordflow">for</span> ( j = 0 ; j < lx1 ; j ++ )
-<a name="l00209"></a>00209         {
-<a name="l00210"></a>00210             <span class="comment">/* transfer rows to output */</span>
-<a name="l00211"></a>00211             poutdata[2*i*lx1 + j] = pi1data[i*lx1 + j]  ;
-<a name="l00212"></a>00212             poutdata[(2*i+1) * lx1 + j] = pi2data[i*lx1 + j] ;
-<a name="l00213"></a>00213         }     
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     cpl_image_delete (residual) ;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     <span class="keywordflow">return</span> out_image ;
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220     
-<a name="l00221"></a>00221 
-<a name="l00238"></a>00238 cpl_image * sinfo_new_remove_general_offset( cpl_image * im1, 
-<a name="l00239"></a>00239                                 cpl_image * im2, 
-<a name="l00240"></a>00240                                 cpl_image * res_image, 
-<a name="l00241"></a>00241                                 <span class="keywordtype">int</span> n )
-<a name="l00242"></a>00242 {
-<a name="l00243"></a>00243     cpl_image * out_image ;
-<a name="l00244"></a>00244     cpl_image * residual  ;
-<a name="l00245"></a>00245     pixelvalue sum, sqr_sum ;
-<a name="l00246"></a>00246     pixelvalue mean, stdev  ;
-<a name="l00247"></a>00247     <span class="keywordtype">int</span> i, npix ;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     <span class="keywordtype">int</span> lx1=0;
-<a name="l00250"></a>00250     <span class="keywordtype">int</span> ly1=0;
-<a name="l00251"></a>00251     <span class="keywordtype">int</span> lx2=0;
-<a name="l00252"></a>00252     <span class="keywordtype">int</span> ly2=0;
-<a name="l00253"></a>00253     <span class="keywordtype">int</span> lxr=0;
-<a name="l00254"></a>00254     <span class="keywordtype">int</span> lyr=0;
-<a name="l00255"></a>00255     <span class="keywordtype">int</span> lxt=0;
-<a name="l00256"></a>00256     <span class="keywordtype">int</span> lyt=0;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258     <span class="keywordtype">float</span>* pi1data=NULL;
-<a name="l00259"></a>00259     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00260"></a>00260     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00261"></a>00261     <span class="keywordtype">float</span>* poutdata=NULL;
-<a name="l00262"></a>00262     <span class="keywordtype">float</span>* ptmpdata=NULL;
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL )
-<a name="l00267"></a>00267     {
-<a name="l00268"></a>00268         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" null image as input"</span>) ;
-<a name="l00269"></a>00269         <span class="keywordflow">return</span> NULL ;
-<a name="l00270"></a>00270     }
-<a name="l00271"></a>00271     lx1=cpl_image_get_size_x(im1);
-<a name="l00272"></a>00272     ly1=cpl_image_get_size_y(im1);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274     lx2=cpl_image_get_size_x(im2);
-<a name="l00275"></a>00275     ly2=cpl_image_get_size_y(im2);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     pi1data=cpl_image_get_data_float(im1);
-<a name="l00280"></a>00280     pi2data=cpl_image_get_data_float(im2);
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )
-<a name="l00284"></a>00284     {
-<a name="l00285"></a>00285         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" input images are not compatible in size"</span>) ;
-<a name="l00286"></a>00286         <span class="keywordflow">return</span> NULL ;
-<a name="l00287"></a>00287     }
-<a name="l00288"></a>00288     
-<a name="l00289"></a>00289     <span class="keywordflow">if</span> ( n <= 0 )
-<a name="l00290"></a>00290     {
-<a name="l00291"></a>00291         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"number of rows for offset determination "</span>
-<a name="l00292"></a>00292                         <span class="stringliteral">"is 0 or smaller "</span>) ;
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> NULL ;
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295         
-<a name="l00296"></a>00296     <span class="comment">/* allocate memory */</span>
-<a name="l00297"></a>00297     <span class="keywordflow">if</span> ( NULL == (residual = cpl_image_new (lx1, ly1, CPL_TYPE_FLOAT)) )
-<a name="l00298"></a>00298     {
-<a name="l00299"></a>00299         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image "</span>) ;
-<a name="l00300"></a>00300         <span class="keywordflow">return</span> NULL ;
-<a name="l00301"></a>00301     }
-<a name="l00302"></a>00302        
-<a name="l00303"></a>00303     out_image = cpl_image_duplicate( im2 ) ;
-<a name="l00304"></a>00304     poutdata=cpl_image_get_data_float(out_image);
-<a name="l00305"></a>00305     ptmpdata=cpl_image_get_data_float(residual);
-<a name="l00306"></a>00306     lxt=cpl_image_get_size_x(residual);
-<a name="l00307"></a>00307     lyt=cpl_image_get_size_y(residual);
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309     <span class="comment">/* ---------------------------------------------------------------------</span>
-<a name="l00310"></a>00310 <span class="comment">     * first we determine the "good" pixels and subtract the two images </span>
-<a name="l00311"></a>00311 <span class="comment">     * then we determine the mean and 3 sigma</span>
-<a name="l00312"></a>00312 <span class="comment">     */</span>
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314     sum = 0. ;
-<a name="l00315"></a>00315     sqr_sum = 0. ;
-<a name="l00316"></a>00316     npix = 0 ;
-<a name="l00317"></a>00317     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )
-<a name="l00318"></a>00318     {
-<a name="l00319"></a>00319         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(pi2data[i]) )
-<a name="l00320"></a>00320         {
-<a name="l00321"></a>00321             ptmpdata[i] = ZERO ;
-<a name="l00322"></a>00322             continue ;
-<a name="l00323"></a>00323         }   
-<a name="l00324"></a>00324         <span class="keywordflow">else</span>
-<a name="l00325"></a>00325         {
-<a name="l00326"></a>00326             ptmpdata[i] = pi1data[i] - pi2data[i] ;
-<a name="l00327"></a>00327         }
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329         sum += ptmpdata[i] ;
-<a name="l00330"></a>00330         sqr_sum += (ptmpdata[i]) * (ptmpdata[i]) ;
-<a name="l00331"></a>00331         npix ++ ;
-<a name="l00332"></a>00332     }
-<a name="l00333"></a>00333     <span class="keywordflow">if</span> ( npix <= 1 )
-<a name="l00334"></a>00334     {
-<a name="l00335"></a>00335         mean = 0. ;
-<a name="l00336"></a>00336         stdev = 0. ;
-<a name="l00337"></a>00337     }
-<a name="l00338"></a>00338     <span class="keywordflow">else</span>
-<a name="l00339"></a>00339     {
-<a name="l00340"></a>00340         mean = sum / (pixelvalue) npix ;   
-<a name="l00341"></a>00341         <span class="comment">/* stdev is 3 sigma */</span>
-<a name="l00342"></a>00342         stdev = 3 * sqrt(( sqr_sum - sum*mean ) / (pixelvalue)(npix - 1)) ;
-<a name="l00343"></a>00343     }
-<a name="l00344"></a>00344     
-<a name="l00345"></a>00345     <span class="comment">/* exclude everything > 3 sigma */</span>
-<a name="l00346"></a>00346     
-<a name="l00347"></a>00347     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lxt*lyt ; i++ )
-<a name="l00348"></a>00348     {
-<a name="l00349"></a>00349         <span class="keywordflow">if</span> ( fabs( ptmpdata[i] - mean ) > stdev )
-<a name="l00350"></a>00350         {
-<a name="l00351"></a>00351             ptmpdata[i] = ZERO ;
-<a name="l00352"></a>00352         }
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354     
-<a name="l00355"></a>00355     <span class="comment">/* now subtract the general offset which is determined </span>
-<a name="l00356"></a>00356 <span class="comment">       as mean of the first n rows */</span>
-<a name="l00357"></a>00357     
-<a name="l00358"></a>00358     sum = 0. ;
-<a name="l00359"></a>00359     npix = 0 ;
-<a name="l00360"></a>00360     <span class="keywordflow">for</span> ( i = 0 ; i < n * lxt ; i++ )
-<a name="l00361"></a>00361     {
-<a name="l00362"></a>00362         <span class="keywordflow">if</span> ( isnan(ptmpdata[i]) )
-<a name="l00363"></a>00363         {
-<a name="l00364"></a>00364             continue ;
-<a name="l00365"></a>00365         }
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367         sum += ptmpdata[i] ;
-<a name="l00368"></a>00368         npix ++ ;
-<a name="l00369"></a>00369     }
-<a name="l00370"></a>00370     <span class="keywordflow">if</span> ( npix == 0 )
-<a name="l00371"></a>00371     {
-<a name="l00372"></a>00372         mean = 0. ;
-<a name="l00373"></a>00373     }
-<a name="l00374"></a>00374     <span class="keywordflow">else</span>
-<a name="l00375"></a>00375     {
-<a name="l00376"></a>00376         mean = sum / (pixelvalue) npix ;      
-<a name="l00377"></a>00377     } 
-<a name="l00378"></a>00378     
-<a name="l00379"></a>00379     <span class="comment">/* now apply this to the second input image */</span>
-<a name="l00380"></a>00380     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx2*ly2 ; i++ )
-<a name="l00381"></a>00381     {
-<a name="l00382"></a>00382         <span class="keywordflow">if</span> ( isnan(pi2data[i]) )
-<a name="l00383"></a>00383         {
-<a name="l00384"></a>00384             poutdata[i] = ZERO ;
-<a name="l00385"></a>00385             continue ;
-<a name="l00386"></a>00386         }
-<a name="l00387"></a>00387         poutdata[i] = pi2data[i] + mean ;
-<a name="l00388"></a>00388     }    
-<a name="l00389"></a>00389  
-<a name="l00390"></a>00390     <span class="comment">/* now determine the residual image if available */</span>
-<a name="l00391"></a>00391     <span class="keywordflow">if</span> ( res_image != NULL )
-<a name="l00392"></a>00392     {
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394        lxr=cpl_image_get_size_x(res_image);
-<a name="l00395"></a>00395        lyr=cpl_image_get_size_y(res_image);
-<a name="l00396"></a>00396        pirdata=cpl_image_get_data_float(res_image);
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399         <span class="keywordflow">for</span> ( i = 0 ; i < (int) lxt*lyt ; i++ )
-<a name="l00400"></a>00400         {
-<a name="l00401"></a>00401             <span class="keywordflow">if</span> ( isnan(ptmpdata[i]) )
-<a name="l00402"></a>00402             {
-<a name="l00403"></a>00403                 pirdata[i] = ZERO ;
-<a name="l00404"></a>00404                 continue ;
-<a name="l00405"></a>00405             }
-<a name="l00406"></a>00406             pirdata[i] = ptmpdata[i] - mean ;
-<a name="l00407"></a>00407         }
-<a name="l00408"></a>00408     }    
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410     cpl_image_delete (residual) ;
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     <span class="keywordflow">return</span> out_image ;
-<a name="l00413"></a>00413 }
-<a name="l00414"></a>00414 
-<a name="l00427"></a>00427 cpl_image * sinfo_new_remove_regional_tilt ( cpl_image * im1, 
-<a name="l00428"></a>00428                                 cpl_image * im2, 
-<a name="l00429"></a>00429                                 cpl_image * res_image )
-<a name="l00430"></a>00430 {
-<a name="l00431"></a>00431     cpl_image * out_image ;
-<a name="l00432"></a>00432     cpl_image * filtered  ;
-<a name="l00433"></a>00433     <span class="keywordtype">int</span> i, j, k, npix, nrunning ;
-<a name="l00434"></a>00434     pixelvalue a, b, sum, sumx, sumy, sumc, sum2 ;
-<a name="l00435"></a>00435     <span class="keywordtype">int</span> lx1=0;
-<a name="l00436"></a>00436     <span class="keywordtype">int</span> ly1=0;
-<a name="l00437"></a>00437     <span class="keywordtype">int</span> lx2=0;
-<a name="l00438"></a>00438     <span class="keywordtype">int</span> ly2=0;
-<a name="l00439"></a>00439     <span class="keywordtype">int</span> lxr=0;
-<a name="l00440"></a>00440     <span class="keywordtype">int</span> lyr=0;
-<a name="l00441"></a>00441     <span class="keywordtype">int</span> lxf=0;
-<a name="l00442"></a>00442     <span class="keywordtype">int</span> lyf=0;
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444     <span class="keywordtype">float</span>* pi1data=NULL;
-<a name="l00445"></a>00445     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00446"></a>00446     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00447"></a>00447     <span class="keywordtype">float</span>* poutdata=NULL;
-<a name="l00448"></a>00448     <span class="keywordtype">float</span>* pfildata=NULL;
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL )
-<a name="l00452"></a>00452     {
-<a name="l00453"></a>00453         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;
-<a name="l00454"></a>00454         <span class="keywordflow">return</span> NULL ;
-<a name="l00455"></a>00455     }
-<a name="l00456"></a>00456     lx1=cpl_image_get_size_x(im1);
-<a name="l00457"></a>00457     ly1=cpl_image_get_size_y(im1);
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459     lx2=cpl_image_get_size_x(im2);
-<a name="l00460"></a>00460     ly2=cpl_image_get_size_y(im2);
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462     lxr=cpl_image_get_size_x(res_image);
-<a name="l00463"></a>00463     lyr=cpl_image_get_size_y(res_image);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466     pi1data=cpl_image_get_data_float(im1);
-<a name="l00467"></a>00467     pi2data=cpl_image_get_data_float(im2);
-<a name="l00468"></a>00468     pirdata=cpl_image_get_data_float(res_image);
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 ||
-<a name="l00471"></a>00471          lx2 != lxr || ly2 != lyr )
-<a name="l00472"></a>00472     {
-<a name="l00473"></a>00473         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;
-<a name="l00474"></a>00474         <span class="keywordflow">return</span> NULL ;
-<a name="l00475"></a>00475     }
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477     <span class="comment">/* allocate memory */</span>
-<a name="l00478"></a>00478     <span class="keywordflow">if</span> ( NULL == ( filtered = cpl_image_new (lx2, ly2,CPL_TYPE_FLOAT)) )
-<a name="l00479"></a>00479     {
-<a name="l00480"></a>00480         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image "</span>) ;
-<a name="l00481"></a>00481         <span class="keywordflow">return</span> NULL ;
-<a name="l00482"></a>00482     }
-<a name="l00483"></a>00483 
-<a name="l00484"></a>00484     out_image = cpl_image_duplicate( im2 ) ;
-<a name="l00485"></a>00485     poutdata=cpl_image_get_data_float(out_image);
-<a name="l00486"></a>00486     pfildata=cpl_image_get_data_float(filtered);
-<a name="l00487"></a>00487     lxf=cpl_image_get_size_x(filtered);
-<a name="l00488"></a>00488     lyf=cpl_image_get_size_y(filtered);
-<a name="l00489"></a>00489     
-<a name="l00490"></a>00490     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l00491"></a>00491 <span class="comment">     * Now work in the given difference image res_image on each </span>
-<a name="l00492"></a>00492 <span class="comment">       column separately. This image is first smoothed columnwise </span>
-<a name="l00493"></a>00493 <span class="comment">       by a running box</span>
-<a name="l00494"></a>00494 <span class="comment">     */</span>
-<a name="l00495"></a>00495     
-<a name="l00496"></a>00496     nrunning = 31 ; <span class="comment">/* # of points in the running box, odd number required */</span>
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498     <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j ++ ) <span class="comment">/* select a row */</span>
-<a name="l00499"></a>00499     {
-<a name="l00500"></a>00500         <span class="keywordflow">for</span> ( i = 0 ; i < lxr ; i ++ ) <span class="comment">/* go through one row */</span>
-<a name="l00501"></a>00501         {
-<a name="l00502"></a>00502             npix = 0 ;
-<a name="l00503"></a>00503             sum = 0. ;
-<a name="l00504"></a>00504             <span class="keywordflow">for</span> (k = i - (nrunning-1)/2 ; k < i + (nrunning+1)/2; k ++ )
-<a name="l00505"></a>00505             {
-<a name="l00506"></a>00506                 <span class="comment">/* marginal pixels are not considered */</span>
-<a name="l00507"></a>00507                 <span class="keywordflow">if</span> ( k < 2 )
-<a name="l00508"></a>00508                 {
-<a name="l00509"></a>00509                     continue ;
-<a name="l00510"></a>00510                 }
-<a name="l00511"></a>00511                 <span class="keywordflow">if</span> ( k > (lxr) - 2 )
-<a name="l00512"></a>00512                 {
-<a name="l00513"></a>00513                     break ;
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515                 }
-<a name="l00516"></a>00516                 <span class="keywordflow">if</span> ( isnan(pirdata[j*lxr + k]) )
-<a name="l00517"></a>00517                 {
-<a name="l00518"></a>00518                     continue ;
-<a name="l00519"></a>00519                 }
-<a name="l00520"></a>00520                 npix ++ ;
-<a name="l00521"></a>00521                 sum += pirdata[j*lxr + k] ;
-<a name="l00522"></a>00522             }
-<a name="l00523"></a>00523             <span class="keywordflow">if</span> ( npix != 0 )
-<a name="l00524"></a>00524             {
-<a name="l00525"></a>00525                 pfildata[j*lxr + i] = sum/npix ;
-<a name="l00526"></a>00526             }
-<a name="l00527"></a>00527             <span class="keywordflow">else</span>
-<a name="l00528"></a>00528             {
-<a name="l00529"></a>00529                 pfildata[j*lxr + i] = ZERO ;
-<a name="l00530"></a>00530             }
-<a name="l00531"></a>00531         }
-<a name="l00532"></a>00532     }                  
-<a name="l00533"></a>00533    
-<a name="l00534"></a>00534     <span class="comment">/*------------------------------------------------------------------</span>
-<a name="l00535"></a>00535 <span class="comment">     * now determine the tilt in each column and remove it in such a way</span>
-<a name="l00536"></a>00536 <span class="comment">     * that the first rows are used as references that are not changed</span>
-<a name="l00537"></a>00537 <span class="comment">     * a free regression fit is (index i means the sum over i):</span>
-<a name="l00538"></a>00538 <span class="comment">     * ax + b: a = [<xiyi>-<xi><yi>]/[<xi^2>-<xi>^2]</span>
-<a name="l00539"></a>00539 <span class="comment">     * =>    : a = [xiyi - xi<yi>]/[xi^2 - xi<xi>]</span>
-<a name="l00540"></a>00540 <span class="comment">     *         b = <yi> - a<xi></span>
-<a name="l00541"></a>00541 <span class="comment">     */</span>
-<a name="l00542"></a>00542     
-<a name="l00543"></a>00543     <span class="keywordflow">for</span> ( i = 0 ; i < lxf ; i ++ ) <span class="comment">/* one column selected */</span>
-<a name="l00544"></a>00544     {
-<a name="l00545"></a>00545         sumy = 0. ;                   <span class="comment">/* yi   */</span>
-<a name="l00546"></a>00546         sumc = 0. ;                   <span class="comment">/* xiyi */</span>
-<a name="l00547"></a>00547         sumx = 0. ;                   <span class="comment">/* xi   */</span>
-<a name="l00548"></a>00548         sum2 = 0. ;                   <span class="comment">/* xi^2 */</span>
-<a name="l00549"></a>00549         npix = 0  ;  
-<a name="l00550"></a>00550           
-<a name="l00551"></a>00551         <span class="keywordflow">for</span> ( j = 0 ; j < lyf ; j ++ ) 
-<a name="l00552"></a>00552         {
-<a name="l00553"></a>00553             <span class="keywordflow">if</span> ( isnan(pfildata[i + j*lxf]) )
-<a name="l00554"></a>00554             {
-<a name="l00555"></a>00555                 continue ;
-<a name="l00556"></a>00556             }
-<a name="l00557"></a>00557             sumy +=  pfildata[i + j*lxf] ;
-<a name="l00558"></a>00558             sumc += (pfildata[i + j*lxf]) * j ;
-<a name="l00559"></a>00559             sum2 += j*j ;
-<a name="l00560"></a>00560             sumx += j   ;
-<a name="l00561"></a>00561             npix ++     ;
-<a name="l00562"></a>00562         }
-<a name="l00563"></a>00563         <span class="keywordflow">if</span> ( npix > 2 && fabs(sum2 - sumx*sumx/npix) >= 1e-6 ) 
-<a name="l00564"></a>00564         {
-<a name="l00565"></a>00565             a = ( sumc - sumx*sumy/npix ) / ( sum2 - sumx*sumx/npix ) ;
-<a name="l00566"></a>00566             b = ( sumy - a*sumx ) / npix ;
-<a name="l00567"></a>00567         } 
-<a name="l00568"></a>00568         <span class="keywordflow">else</span>
-<a name="l00569"></a>00569         {
-<a name="l00570"></a>00570             a = ZERO ;
-<a name="l00571"></a>00571             b = ZERO ;
-<a name="l00572"></a>00572         }
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574         <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l00575"></a>00575 <span class="comment">         * now correct the second input image im2 and the res_image.</span>
-<a name="l00576"></a>00576 <span class="comment">         */</span> 
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578         <span class="keywordflow">if</span> ( !isnan(a) && !isnan(b) && fabs(a) < 1e8 && fabs(b) < 1e8 )
-<a name="l00579"></a>00579         {
-<a name="l00580"></a>00580             <span class="keywordflow">for</span> ( j = 0 ; j < lyf ; j ++ ) <span class="comment">/* the same column */</span>
-<a name="l00581"></a>00581             {
-<a name="l00582"></a>00582                 <span class="keywordflow">if</span> ( !isnan(poutdata[i + j*lxf]) )
-<a name="l00583"></a>00583                 {
-<a name="l00584"></a>00584                     poutdata[i + j*lxf] += a*j+b ;        
-<a name="l00585"></a>00585                 }
-<a name="l00586"></a>00586             }
-<a name="l00587"></a>00587         }
-<a name="l00588"></a>00588     }
-<a name="l00589"></a>00589    
-<a name="l00590"></a>00590     <span class="comment">/* now compute the final residual image */</span>
-<a name="l00591"></a>00591     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )
-<a name="l00592"></a>00592     {
-<a name="l00593"></a>00593         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(poutdata[i]) )
-<a name="l00594"></a>00594         {
-<a name="l00595"></a>00595             pirdata[i] = ZERO ;
-<a name="l00596"></a>00596         }   
-<a name="l00597"></a>00597         <span class="keywordflow">else</span>
-<a name="l00598"></a>00598         {
-<a name="l00599"></a>00599             pirdata[i] = pi1data[i] - poutdata[i] ;
-<a name="l00600"></a>00600         }
-<a name="l00601"></a>00601     }
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603     cpl_image_delete (filtered) ;
-<a name="l00604"></a>00604    
-<a name="l00605"></a>00605     <span class="keywordflow">return</span> out_image ;
-<a name="l00606"></a>00606 }
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608 
-<a name="l00621"></a>00621 cpl_image * sinfo_new_remove_column_offset ( cpl_image * im1, 
-<a name="l00622"></a>00622                                 cpl_image * im2, 
-<a name="l00623"></a>00623                                 cpl_image * res_image )
-<a name="l00624"></a>00624 {
-<a name="l00625"></a>00625     cpl_image * out_image ;
-<a name="l00626"></a>00626     <span class="keywordtype">int</span> i, j, npix, nrunning ;
-<a name="l00627"></a>00627     pixelvalue sum, sum2, mean, stdev, median1, median2, ratio ;
-<a name="l00628"></a>00628     pixelvalue * column1, * column2 ;
-<a name="l00629"></a>00629     <span class="keywordtype">int</span> lx1=0;
-<a name="l00630"></a>00630     <span class="keywordtype">int</span> ly1=0;
-<a name="l00631"></a>00631     <span class="keywordtype">int</span> lx2=0;
-<a name="l00632"></a>00632     <span class="keywordtype">int</span> ly2=0;
-<a name="l00633"></a>00633     <span class="keywordtype">int</span> lxr=0;
-<a name="l00634"></a>00634     <span class="keywordtype">int</span> lyr=0;
-<a name="l00635"></a>00635     <span class="keywordtype">float</span>* pi1data=NULL;
-<a name="l00636"></a>00636     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00637"></a>00637     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00638"></a>00638     <span class="keywordtype">float</span>* poutdata=NULL;
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL )
-<a name="l00641"></a>00641     {
-<a name="l00642"></a>00642         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;
-<a name="l00643"></a>00643         <span class="keywordflow">return</span> NULL ;
-<a name="l00644"></a>00644     }
-<a name="l00645"></a>00645     lx1=cpl_image_get_size_x(im1);
-<a name="l00646"></a>00646     ly1=cpl_image_get_size_y(im1);
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648     lx2=cpl_image_get_size_x(im2);
-<a name="l00649"></a>00649     ly2=cpl_image_get_size_y(im2);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651     lxr=cpl_image_get_size_x(res_image);
-<a name="l00652"></a>00652     lyr=cpl_image_get_size_y(res_image);
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655     pi1data=cpl_image_get_data_float(im1);
-<a name="l00656"></a>00656     pi2data=cpl_image_get_data_float(im2);
-<a name="l00657"></a>00657     pirdata=cpl_image_get_data_float(res_image);
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 ||
-<a name="l00660"></a>00660          lx2 != lxr || ly2 != lyr )
-<a name="l00661"></a>00661     {
-<a name="l00662"></a>00662         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;
-<a name="l00663"></a>00663         <span class="keywordflow">return</span> NULL ;
-<a name="l00664"></a>00664     }
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666     out_image = cpl_image_duplicate( im2 ) ;
-<a name="l00667"></a>00667     poutdata=cpl_image_get_data_float(out_image);
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669     <span class="comment">/*------------------------------------------------------------------------- </span>
-<a name="l00670"></a>00670 <span class="comment">     *  now we deal with a constant offset in every column. We assume that it </span>
-<a name="l00671"></a>00671 <span class="comment">        is due to redistribution of the flux. So we should divide the offset </span>
-<a name="l00672"></a>00672 <span class="comment">        out.  The ratio is derived from the medians of the contributions </span>
-<a name="l00673"></a>00673 <span class="comment">        rather than the means.</span>
-<a name="l00674"></a>00674 <span class="comment">     */</span>
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676     <span class="keywordflow">for</span> ( i = 0 ; i < lx2 ; i ++ ) <span class="comment">/* select a column */</span>
-<a name="l00677"></a>00677     {
-<a name="l00678"></a>00678         <span class="comment">/* statistics on columns */</span>
-<a name="l00679"></a>00679         sum  = 0.  ;
-<a name="l00680"></a>00680         sum2 = 0. ;
-<a name="l00681"></a>00681         npix = 0  ;
-<a name="l00682"></a>00682         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j ++ )
-<a name="l00683"></a>00683         {
-<a name="l00684"></a>00684             <span class="comment">/* first select only the good pixels */</span>
-<a name="l00685"></a>00685             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*lxr]) )
-<a name="l00686"></a>00686             {
-<a name="l00687"></a>00687                 continue ;
-<a name="l00688"></a>00688             }
-<a name="l00689"></a>00689             sum  += pirdata[i + j*lxr] ;
-<a name="l00690"></a>00690             sum2 += pirdata[i + j*lxr] * 
-<a name="l00691"></a>00691                     pirdata[i + j*lxr] ; 
-<a name="l00692"></a>00692             npix ++ ;
-<a name="l00693"></a>00693         }
-<a name="l00694"></a>00694         <span class="keywordflow">if</span> ( npix <= 1 )
-<a name="l00695"></a>00695         {
-<a name="l00696"></a>00696             continue ;
-<a name="l00697"></a>00697         }
-<a name="l00698"></a>00698         <span class="keywordflow">else</span>
-<a name="l00699"></a>00699         {
-<a name="l00700"></a>00700             mean  = sum/(pixelvalue) npix ;
-<a name="l00701"></a>00701             <span class="keywordflow">if</span> ( (sum2 - sum * mean) < 0 )
-<a name="l00702"></a>00702             {
-<a name="l00703"></a>00703                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"variance is negative"</span>) ; 
-<a name="l00704"></a>00704                 continue ;
-<a name="l00705"></a>00705             }
-<a name="l00706"></a>00706             <span class="keywordflow">else</span>
-<a name="l00707"></a>00707             {
-<a name="l00708"></a>00708                 <span class="comment">/* 2 sigma */</span>
-<a name="l00709"></a>00709                 stdev = 2 * sqrt ( (sum2 - sum*mean)/(pixelvalue)(npix - 1) ) ;
-<a name="l00710"></a>00710             }
-<a name="l00711"></a>00711         }
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713         <span class="comment">/* do it only if the S/N is high enough */</span>
-<a name="l00714"></a>00714         <span class="keywordflow">if</span> ( fabs(mean)/stdev < 0.5 )
-<a name="l00715"></a>00715         {
-<a name="l00716"></a>00716             continue ;
-<a name="l00717"></a>00717         }
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719         <span class="comment">/* exclude everything > 2 sigma */</span>
-<a name="l00720"></a>00720         <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j ++ )
-<a name="l00721"></a>00721         {
-<a name="l00722"></a>00722             <span class="keywordflow">if</span> ( pirdata[i + j*lxr] < mean - stdev ||
-<a name="l00723"></a>00723                  pirdata[i + j*lxr] > mean + stdev )
-<a name="l00724"></a>00724             {
-<a name="l00725"></a>00725                 pirdata[i + j*lxr] = ZERO ;
-<a name="l00726"></a>00726             }
-<a name="l00727"></a>00727         } 
-<a name="l00728"></a>00728         
-<a name="l00729"></a>00729         <span class="comment">/* now deal with the offset */</span>
-<a name="l00730"></a>00730         median1 = 0. ;
-<a name="l00731"></a>00731         median2 = 0. ;
-<a name="l00732"></a>00732         nrunning = 0 ;
-<a name="l00733"></a>00733         <span class="comment">/* allocate memory for the column buffers */</span>
-<a name="l00734"></a>00734         column1 = (pixelvalue *) cpl_calloc ( ly1 , <span class="keyword">sizeof</span> (pixelvalue *) ) ;
-<a name="l00735"></a>00735         column2 = (pixelvalue *) cpl_calloc ( ly2 , <span class="keyword">sizeof</span> (pixelvalue *) ) ; 
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737         <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j++ ) <span class="comment">/* go through one column */</span>
-<a name="l00738"></a>00738         {
-<a name="l00739"></a>00739             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*lxr]) )
-<a name="l00740"></a>00740             {
-<a name="l00741"></a>00741                 continue ;
-<a name="l00742"></a>00742             }
-<a name="l00743"></a>00743             <span class="keywordflow">if</span> ( isnan(pi1data[i+j*lx1]) || isnan(pi2data[i+j*lx2]) )
-<a name="l00744"></a>00744             {
-<a name="l00745"></a>00745                 continue ;
-<a name="l00746"></a>00746             }
-<a name="l00747"></a>00747         column1[nrunning] = pi1data[i + j*lx1] ;
-<a name="l00748"></a>00748             column2[nrunning] = pi2data[i + j*lx2] ;
-<a name="l00749"></a>00749             nrunning ++ ;
-<a name="l00750"></a>00750         }
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752         <span class="comment">/* change the second input image only if there are more then </span>
-<a name="l00753"></a>00753 <span class="comment">           10 % good pixels in a column */</span>
-<a name="l00754"></a>00754         <span class="keywordflow">if</span> ( nrunning > 0.1*lyr )
-<a name="l00755"></a>00755         {
-<a name="l00756"></a>00756             <span class="comment">/* --------------------------------------------------------------</span>
-<a name="l00757"></a>00757 <span class="comment">             * determine the medians of the columns of both images and compute </span>
-<a name="l00758"></a>00758 <span class="comment">               the ratio, the columns of the second input image are multiplied </span>
-<a name="l00759"></a>00759 <span class="comment">               by this ratio to adjust the column offsets. </span>
-<a name="l00760"></a>00760 <span class="comment">             */</span>
-<a name="l00761"></a>00761             median2 = sinfo_new_median( column2, nrunning ) ;
-<a name="l00762"></a>00762             <span class="keywordflow">if</span> ( median2 != 0. )
-<a name="l00763"></a>00763             {
-<a name="l00764"></a>00764                 median1 = sinfo_new_median( column1, nrunning ) ;
-<a name="l00765"></a>00765                 ratio = median1 / median2 ;
-<a name="l00766"></a>00766                 <span class="keywordflow">if</span> ( ratio > 0 )
-<a name="l00767"></a>00767                 {
-<a name="l00768"></a>00768                     <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) <span class="comment">/* go through one column */</span>
-<a name="l00769"></a>00769                     {
-<a name="l00770"></a>00770                         <span class="keywordflow">if</span> ( !isnan(pi2data[i + j*lx2]) )
-<a name="l00771"></a>00771                         {
-<a name="l00772"></a>00772                             poutdata[i + j*lx2] = pi2data[i + j*lx2] * ratio ;
-<a name="l00773"></a>00773                         }
-<a name="l00774"></a>00774                         <span class="keywordflow">else</span>
-<a name="l00775"></a>00775                         {
-<a name="l00776"></a>00776                             poutdata[i + j*lx2] = ZERO ;
-<a name="l00777"></a>00777                         }
-<a name="l00778"></a>00778                     }
-<a name="l00779"></a>00779                 }
-<a name="l00780"></a>00780             }
-<a name="l00781"></a>00781         }   
-<a name="l00782"></a>00782         cpl_free ( column1 ) ;
-<a name="l00783"></a>00783         cpl_free ( column2 ) ;
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786     <span class="comment">/* now compute the final residual image */</span>
-<a name="l00787"></a>00787     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )
-<a name="l00788"></a>00788     {
-<a name="l00789"></a>00789         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(poutdata[i]) )
-<a name="l00790"></a>00790         {
-<a name="l00791"></a>00791             pirdata[i] = ZERO ;
-<a name="l00792"></a>00792         }   
-<a name="l00793"></a>00793         <span class="keywordflow">else</span>
-<a name="l00794"></a>00794         {
-<a name="l00795"></a>00795             pirdata[i] = pi1data[i] - poutdata[i] ;
-<a name="l00796"></a>00796         }
-<a name="l00797"></a>00797     }
-<a name="l00798"></a>00798    
-<a name="l00799"></a>00799     <span class="keywordflow">return</span> out_image ;
-<a name="l00800"></a>00800 }
-<a name="l00801"></a>00801 
-<a name="l00802"></a>00802 
-<a name="l00812"></a>00812 cpl_image * 
-<a name="l00813"></a>00813 sinfo_new_remove_residual_tilt ( cpl_image * im2, cpl_image * res_image )
-<a name="l00814"></a>00814 {
-<a name="l00815"></a>00815     cpl_image * out_image ;
-<a name="l00816"></a>00816     cpl_image * residual  ;
-<a name="l00817"></a>00817     <span class="keywordtype">int</span> i, j, npix ;
-<a name="l00818"></a>00818     pixelvalue a, b, sum, sumx, sumy, sumc, sum2, mean, stdev ;
-<a name="l00819"></a>00819     <span class="keywordtype">int</span> lx2=0;
-<a name="l00820"></a>00820     <span class="keywordtype">int</span> ly2=0;
-<a name="l00821"></a>00821     <span class="keywordtype">int</span> rlx=0;
-<a name="l00822"></a>00822     <span class="keywordtype">int</span> rly=0;
-<a name="l00823"></a>00823     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00824"></a>00824     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00825"></a>00825     <span class="keywordtype">float</span>* poutdata=NULL;
-<a name="l00826"></a>00826     <span class="keywordtype">float</span>* ptmpdata=NULL;
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831     <span class="keywordflow">if</span> ( im2 == NULL || res_image == NULL )
-<a name="l00832"></a>00832     {
-<a name="l00833"></a>00833         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;
-<a name="l00834"></a>00834         <span class="keywordflow">return</span> NULL ;
-<a name="l00835"></a>00835     }
-<a name="l00836"></a>00836     lx2=cpl_image_get_size_x(im2);
-<a name="l00837"></a>00837     ly2=cpl_image_get_size_y(im2);
-<a name="l00838"></a>00838     rlx=cpl_image_get_size_x(res_image);
-<a name="l00839"></a>00839     rly=cpl_image_get_size_y(res_image);
-<a name="l00840"></a>00840     pi2data=cpl_image_get_data_float(im2);
-<a name="l00841"></a>00841     pirdata=cpl_image_get_data_float(res_image);
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843     <span class="keywordflow">if</span> ( lx2 != rlx || ly2 != rly )
-<a name="l00844"></a>00844     {
-<a name="l00845"></a>00845         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;
-<a name="l00846"></a>00846         <span class="keywordflow">return</span> NULL ;
-<a name="l00847"></a>00847     }
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849     out_image = cpl_image_duplicate( im2 ) ;
-<a name="l00850"></a>00850     residual  = cpl_image_duplicate( res_image ) ;
-<a name="l00851"></a>00851     poutdata=cpl_image_get_data_float(out_image);
-<a name="l00852"></a>00852     ptmpdata=cpl_image_get_data_float(residual);
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854     <span class="keywordflow">for</span> ( i = 0 ; i < lx2; i++ ) <span class="comment">/* select one column */</span>
-<a name="l00855"></a>00855     {
-<a name="l00856"></a>00856         sum  = 0. ;
-<a name="l00857"></a>00857         sum2 = 0. ;
-<a name="l00858"></a>00858         npix = 0  ;
-<a name="l00859"></a>00859         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) 
-<a name="l00860"></a>00860         {
-<a name="l00861"></a>00861             <span class="comment">/* first select good pixels and derive the mean </span>
-<a name="l00862"></a>00862 <span class="comment">               and sigma of each column */</span>
-<a name="l00863"></a>00863             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )
-<a name="l00864"></a>00864             {
-<a name="l00865"></a>00865                 continue ;
-<a name="l00866"></a>00866             }
-<a name="l00867"></a>00867             sum  += pirdata[i + j*rlx] ;
-<a name="l00868"></a>00868             sum2 += pirdata[i + j*rlx] *
-<a name="l00869"></a>00869                     pirdata[i + j*rlx] ;
-<a name="l00870"></a>00870             npix ++ ;
-<a name="l00871"></a>00871         }
-<a name="l00872"></a>00872         
-<a name="l00873"></a>00873         <span class="keywordflow">if</span> ( npix <= 1 )
-<a name="l00874"></a>00874         {
-<a name="l00875"></a>00875             continue ;
-<a name="l00876"></a>00876         }
-<a name="l00877"></a>00877         <span class="keywordflow">else</span>
-<a name="l00878"></a>00878         {
-<a name="l00879"></a>00879             mean  = sum / (pixelvalue) npix ;
-<a name="l00880"></a>00880             stdev = 1.5 * sqrt( (sum2 - sum*mean) / (pixelvalue)(npix - 1) ) ;
-<a name="l00881"></a>00881         }
-<a name="l00882"></a>00882  
-<a name="l00883"></a>00883         <span class="comment">/* exclude everything > 1.5 sigma */</span>
-<a name="l00884"></a>00884         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ )
-<a name="l00885"></a>00885         {
-<a name="l00886"></a>00886             <span class="keywordflow">if</span> ( pirdata[i + j*rlx] < mean - stdev ||
-<a name="l00887"></a>00887                  pirdata[i + j*rlx] > mean + stdev )
-<a name="l00888"></a>00888             {
-<a name="l00889"></a>00889                 pirdata[i + j*rlx] = ZERO ;
-<a name="l00890"></a>00890             }
-<a name="l00891"></a>00891         }
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893         <span class="comment">/* now determine the tilt, see function sinfo_removeRegionalTilt </span>
-<a name="l00894"></a>00894 <span class="comment">           for explanation */</span>
-<a name="l00895"></a>00895         sumy = 0. ;                   <span class="comment">/* yi   */</span>
-<a name="l00896"></a>00896         sumc = 0. ;                   <span class="comment">/* xiyi */</span>
-<a name="l00897"></a>00897         sumx = 0. ;                   <span class="comment">/* xi   */</span>
-<a name="l00898"></a>00898         sum2 = 0. ;                   <span class="comment">/* xi^2 */</span>
-<a name="l00899"></a>00899         npix = 0  ;  
-<a name="l00900"></a>00900           
-<a name="l00901"></a>00901         <span class="keywordflow">for</span> ( j = 0 ; j < rly ; j ++ ) 
-<a name="l00902"></a>00902         {
-<a name="l00903"></a>00903             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )
-<a name="l00904"></a>00904             {
-<a name="l00905"></a>00905                 continue ;
-<a name="l00906"></a>00906             }
-<a name="l00907"></a>00907             sumy +=  pirdata[i + j*rlx] ;
-<a name="l00908"></a>00908             sumc += (pirdata[i + j*rlx]) * j ;
-<a name="l00909"></a>00909             sum2 += j*j ;
-<a name="l00910"></a>00910             sumx += j   ;
-<a name="l00911"></a>00911             npix ++     ;
-<a name="l00912"></a>00912         }
-<a name="l00913"></a>00913         <span class="keywordflow">if</span> ( npix > 2 && fabs(sum2 - sumx*sumx/npix) >= 1e-6 ) 
-<a name="l00914"></a>00914         {
-<a name="l00915"></a>00915             a = ( sumc - sumx*sumy/npix ) / ( sum2 - sumx*sumx/npix ) ;
-<a name="l00916"></a>00916             b = ( sumy - a*sumx ) / npix ;
-<a name="l00917"></a>00917         } 
-<a name="l00918"></a>00918         <span class="keywordflow">else</span>
-<a name="l00919"></a>00919         {
-<a name="l00920"></a>00920             a = ZERO ;
-<a name="l00921"></a>00921             b = ZERO ;
-<a name="l00922"></a>00922         }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l00925"></a>00925 <span class="comment">         * now correct the second input image im2 and the res_image.</span>
-<a name="l00926"></a>00926 <span class="comment">         */</span> 
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928         <span class="keywordflow">if</span> ( !isnan(a) && !isnan(b) && fabs(a) < 1e8 && fabs(b) < 1e8 )
-<a name="l00929"></a>00929         {
-<a name="l00930"></a>00930             <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j ++ ) <span class="comment">/* the same column */</span>
-<a name="l00931"></a>00931             {
-<a name="l00932"></a>00932                 <span class="keywordflow">if</span> ( !isnan(poutdata[i+j*lx2]) )
-<a name="l00933"></a>00933                 {
-<a name="l00934"></a>00934                     poutdata[i + j*lx2] += a*j+b ;        
-<a name="l00935"></a>00935                     pirdata[i + j*lx2] = ptmpdata[i + j*lx2] -(a*j+b) ;
-<a name="l00936"></a>00936                 }
-<a name="l00937"></a>00937             }
-<a name="l00938"></a>00938         }
-<a name="l00939"></a>00939     }
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941     cpl_image_delete (residual) ;
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943     <span class="keywordflow">return</span> out_image ;
-<a name="l00944"></a>00944 }
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946 
-<a name="l00957"></a>00957 cpl_image * 
-<a name="l00958"></a>00958 sinfo_new_remove_residual_offset( cpl_image * im2, cpl_image * res_image )
-<a name="l00959"></a>00959 {
-<a name="l00960"></a>00960     cpl_image * out_image ;
-<a name="l00961"></a>00961     <span class="keywordtype">int</span> i, j, npix ;
-<a name="l00962"></a>00962     pixelvalue res_median ;
-<a name="l00963"></a>00963     pixelvalue * column ;
-<a name="l00964"></a>00964     <span class="keywordtype">int</span> lx2=0;
-<a name="l00965"></a>00965     <span class="keywordtype">int</span> ly2=0;
-<a name="l00966"></a>00966     <span class="keywordtype">int</span> rlx=0;
-<a name="l00967"></a>00967     <span class="keywordtype">int</span> rly=0;
-<a name="l00968"></a>00968     <span class="keywordtype">int</span> olx=0;
-<a name="l00969"></a>00969     <span class="keywordtype">int</span> oly=0;
-<a name="l00970"></a>00970     <span class="keywordtype">float</span>* pi2data=NULL;
-<a name="l00971"></a>00971     <span class="keywordtype">float</span>* pirdata=NULL;
-<a name="l00972"></a>00972     <span class="keywordtype">float</span>* poudata=NULL;
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974 
-<a name="l00975"></a>00975     <span class="keywordflow">if</span> ( im2 == NULL || res_image == NULL )
-<a name="l00976"></a>00976     {
-<a name="l00977"></a>00977         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;
-<a name="l00978"></a>00978         <span class="keywordflow">return</span> NULL ;
-<a name="l00979"></a>00979     }
-<a name="l00980"></a>00980     lx2=cpl_image_get_size_x(im2);
-<a name="l00981"></a>00981     ly2=cpl_image_get_size_y(im2);
-<a name="l00982"></a>00982     rlx=cpl_image_get_size_x(res_image);
-<a name="l00983"></a>00983     rly=cpl_image_get_size_y(res_image);
-<a name="l00984"></a>00984     pi2data=cpl_image_get_data_float(im2);
-<a name="l00985"></a>00985     pirdata=cpl_image_get_data_float(res_image);
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987 
-<a name="l00988"></a>00988     <span class="keywordflow">if</span> ( lx2 != rlx || ly2 != rly )
-<a name="l00989"></a>00989     {
-<a name="l00990"></a>00990         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;
-<a name="l00991"></a>00991         <span class="keywordflow">return</span> NULL ;
-<a name="l00992"></a>00992     }
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994     out_image = cpl_image_duplicate( im2 ) ;
-<a name="l00995"></a>00995     poudata=cpl_image_get_data_float(res_image);
-<a name="l00996"></a>00996     olx=cpl_image_get_size_x(res_image);
-<a name="l00997"></a>00997     oly=cpl_image_get_size_y(res_image);
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999     column = (pixelvalue *) cpl_calloc ( ly2 , <span class="keyword">sizeof</span> (pixelvalue *) ) ;
-<a name="l01000"></a>01000     
-<a name="l01001"></a>01001     <span class="keywordflow">for</span> ( i = 0 ; i < lx2 ; i++ ) <span class="comment">/* select one column */</span>
-<a name="l01002"></a>01002     {
-<a name="l01003"></a>01003         npix = 0  ;
-<a name="l01004"></a>01004     <span class="keywordflow">for</span> (j=0;j<ly2;j++)
-<a name="l01005"></a>01005         column[j]=0;
-<a name="l01006"></a>01006 
-<a name="l01007"></a>01007         <span class="keywordflow">for</span> ( j = 0 ; j < rly ; j++ ) <span class="comment">/* go through one column */</span>
-<a name="l01008"></a>01008         {
-<a name="l01009"></a>01009             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )
-<a name="l01010"></a>01010             {
-<a name="l01011"></a>01011                 continue ;
-<a name="l01012"></a>01012             }
-<a name="l01013"></a>01013    
-<a name="l01014"></a>01014             column[npix] = pirdata[i + j*rlx] ;
-<a name="l01015"></a>01015             npix ++ ;
-<a name="l01016"></a>01016         }
-<a name="l01017"></a>01017             
-<a name="l01018"></a>01018         <span class="comment">/* determine the sinfo_median of a column of the residual image */</span>
-<a name="l01019"></a>01019         <span class="keywordflow">if</span> ( npix > 0.1 * rly )
-<a name="l01020"></a>01020         {
-<a name="l01021"></a>01021             res_median = sinfo_new_median( column, npix ) ;
-<a name="l01022"></a>01022         }
-<a name="l01023"></a>01023         <span class="keywordflow">else</span>
-<a name="l01024"></a>01024         {
-<a name="l01025"></a>01025             continue ;
-<a name="l01026"></a>01026         }
-<a name="l01027"></a>01027         
-<a name="l01028"></a>01028         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) <span class="comment">/* go through one column */</span>
-<a name="l01029"></a>01029         {
-<a name="l01030"></a>01030             <span class="keywordflow">if</span> ( !isnan(pi2data[i+j*lx2]))
-<a name="l01031"></a>01031             {
-<a name="l01032"></a>01032                 poudata[i + j*lx2] = pi2data[i + j*lx2] + res_median ;
-<a name="l01033"></a>01033             }
-<a name="l01034"></a>01034             <span class="keywordflow">else</span>
-<a name="l01035"></a>01035             {
-<a name="l01036"></a>01036                 poudata[i + j*lx2] = ZERO ;
-<a name="l01037"></a>01037             }
-<a name="l01038"></a>01038             <span class="keywordflow">if</span> ( !isnan(pirdata[i + j*rlx]) )
-<a name="l01039"></a>01039             {
-<a name="l01040"></a>01040                 pirdata[i + j*rlx] -= res_median ;
-<a name="l01041"></a>01041             }
-<a name="l01042"></a>01042         }
-<a name="l01043"></a>01043     }
-<a name="l01044"></a>01044     cpl_free ( column ) ;
-<a name="l01045"></a>01045     <span class="keywordflow">return</span> out_image ;
-<a name="l01046"></a>01046 }
-<a name="l01048"></a>01048 <span class="comment">/*___oOo___*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_merge.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* </span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  04/07/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME              </span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_merge.c - merges the rows of two image data frames into</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*                  one frame with doubled column length     </span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*        </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   #include "merge.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*   a) cpl_image * sinfo_sinfo_merge_images ( cpl_image * im1, </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*                               cpl_image * im2, </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*                               cpl_image * res_image )</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   1) cpl_image * sinfo_new_remove_general_offset( cpl_image * im1, </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*                                      cpl_image * im2, </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                                      cpl_image * res_image, </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                                      int n )</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*   2) cpl_image * sinfo_new_remove_regional_tilt ( cpl_image * im1,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                                      cpl_image * im2, </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                                      cpl_image * res_image )</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*   3) cpl_image * sinfo_new_remove_column_offset ( cpl_image * im1, </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                                      cpl_image * im2, </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                                      cpl_image * res_image )</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*   4) cpl_image * sinfo_new_remove_residual_tilt ( cpl_image * im2, </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                                   cpl_image * res_image )</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*   5) cpl_image * sinfo_new_remove_residual_offset( cpl_image * im2, </span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">                                                    cpl_image * res_image )</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*   a) merges the rows of two image frames in a way that the resulting</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*      image has double length in y-direction</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*        The procedures are used in the SPIFFI data reduction to merge two </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*        data frames. In order to fully match the two input frames there</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*        are five steps (procedures) foreseen:</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*        1) remove general offset between the frames, created by e.g. different</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*           air masses. </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*        2) remove regional tilt between frames, created by e.g. different </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*           emissivities.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*        3) remove individual column offsets, created e.g. by imperfect </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*           guiding, offset is divided out.</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*        4) remove residual individual column tilts, created by previous </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*           operations.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*        5) remove residual column offsets by subtracting the sinfo_median.</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*   RETURN VALUES </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*   always the pointer to the image data structure cpl_image</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*   CAUTIONS </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*   Python script merging.py</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*   BUGS   </span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#include "sinfo_merge.h"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> cpl_image * sinfo_sinfo_merge_images ( cpl_image * im1, </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                          cpl_image * im2, </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                          cpl_image * res_image )</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_image * residual ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">int</span> i, j ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">float</span>* pi1data=NULL;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordtype">float</span>* poutdata=NULL;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordtype">float</span>* ptmpdata=NULL;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" null image as input"</span>) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     pi1data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> ( NULL == (out_image = cpl_image_new (lx1, 2 * ly1,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     poutdata=cpl_image_get_data_float(out_image);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> ( NULL == (residual = cpl_image_new (lx1, ly1,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image "</span>) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     ptmpdata=cpl_image_get_data_float(residual);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="comment">/* now compute the final residual image */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(pi2data[i]) )</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>             ptmpdata[i] = ZERO ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         }   </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>             ptmpdata[i] = pi1data[i] - pi2data[i] ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         pirdata[i] = ptmpdata[i] ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* now merge the two images */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ly1 ; i ++ )</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         <span class="keywordflow">for</span> ( j = 0 ; j < lx1 ; j ++ )</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>             <span class="comment">/* transfer rows to output */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>             poutdata[2*i*lx1 + j] = pi1data[i*lx1 + j]  ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>             poutdata[(2*i+1) * lx1 + j] = pi2data[i*lx1 + j] ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         }     </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_image_delete (residual) ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> cpl_image * sinfo_new_remove_general_offset( cpl_image * im1, </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                                 cpl_image * im2, </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                                 cpl_image * res_image, </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                                 <span class="keywordtype">int</span> n )</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_image * residual  ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     pixelvalue sum, sqr_sum ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     pixelvalue mean, stdev  ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordtype">int</span> i, npix ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">int</span> lxr=0;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">int</span> lyr=0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">int</span> lxt=0;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordtype">int</span> lyt=0;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordtype">float</span>* pi1data=NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordtype">float</span>* poutdata=NULL;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordtype">float</span>* ptmpdata=NULL;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL )</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" null image as input"</span>) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     pi1data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 )</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordflow">if</span> ( n <= 0 )</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"number of rows for offset determination "</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                         <span class="stringliteral">"is 0 or smaller "</span>) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">if</span> ( NULL == (residual = cpl_image_new (lx1, ly1, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new image "</span>) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>        </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     out_image = cpl_image_duplicate( im2 ) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     poutdata=cpl_image_get_data_float(out_image);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     ptmpdata=cpl_image_get_data_float(residual);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     lxt=cpl_image_get_size_x(residual);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     lyt=cpl_image_get_size_y(residual);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="comment">/* ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">     * first we determine the "good" pixels and subtract the two images </span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">     * then we determine the mean and 3 sigma</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     sum = 0. ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     sqr_sum = 0. ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     npix = 0 ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(pi2data[i]) )</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>             ptmpdata[i] = ZERO ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             continue ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         }   </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>             ptmpdata[i] = pi1data[i] - pi2data[i] ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         sum += ptmpdata[i] ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         sqr_sum += (ptmpdata[i]) * (ptmpdata[i]) ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         npix ++ ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordflow">if</span> ( npix <= 1 )</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         mean = 0. ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>         stdev = 0. ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         mean = sum / (pixelvalue) npix ;   </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         <span class="comment">/* stdev is 3 sigma */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>         stdev = 3 * sqrt(( sqr_sum - sum*mean ) / (pixelvalue)(npix - 1)) ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="comment">/* exclude everything > 3 sigma */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lxt*lyt ; i++ )</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>         <span class="keywordflow">if</span> ( fabs( ptmpdata[i] - mean ) > stdev )</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>             ptmpdata[i] = ZERO ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="comment">/* now subtract the general offset which is determined </span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">       as mean of the first n rows */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     sum = 0. ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     npix = 0 ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n * lxt ; i++ )</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         <span class="keywordflow">if</span> ( isnan(ptmpdata[i]) )</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>             continue ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         sum += ptmpdata[i] ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         npix ++ ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordflow">if</span> ( npix == 0 )</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     {</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         mean = 0. ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         mean = sum / (pixelvalue) npix ;      </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     } </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="comment">/* now apply this to the second input image */</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx2*ly2 ; i++ )</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         <span class="keywordflow">if</span> ( isnan(pi2data[i]) )</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>             poutdata[i] = ZERO ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             continue ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         poutdata[i] = pi2data[i] + mean ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     }    </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>  </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="comment">/* now determine the residual image if available */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="keywordflow">if</span> ( res_image != NULL )</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>        lxr=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>        lyr=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>        pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (int) lxt*lyt ; i++ )</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>             <span class="keywordflow">if</span> ( isnan(ptmpdata[i]) )</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 pirdata[i] = ZERO ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                 continue ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>             }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>             pirdata[i] = ptmpdata[i] - mean ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     }    </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     cpl_image_delete (residual) ;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> cpl_image * sinfo_new_remove_regional_tilt ( cpl_image * im1, </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                 cpl_image * im2, </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                                 cpl_image * res_image )</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     cpl_image * filtered  ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     <span class="keywordtype">int</span> i, j, k, npix, nrunning ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     pixelvalue a, b, sum, sumx, sumy, sumc, sum2 ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="keywordtype">int</span> lxr=0;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordtype">int</span> lyr=0;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordtype">int</span> lxf=0;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     <span class="keywordtype">int</span> lyf=0;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="keywordtype">float</span>* pi1data=NULL;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordtype">float</span>* poutdata=NULL;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     <span class="keywordtype">float</span>* pfildata=NULL;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL )</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     lxr=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     lyr=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     pi1data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 ||</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>          lx2 != lxr || ly2 != lyr )</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     {</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="keywordflow">if</span> ( NULL == ( filtered = cpl_image_new (lx2, ly2,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image "</span>) ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     }</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     out_image = cpl_image_duplicate( im2 ) ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     poutdata=cpl_image_get_data_float(out_image);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     pfildata=cpl_image_get_data_float(filtered);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     lxf=cpl_image_get_size_x(filtered);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     lyf=cpl_image_get_size_y(filtered);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">     * Now work in the given difference image res_image on each </span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">       column separately. This image is first smoothed columnwise </span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">       by a running box</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     nrunning = 31 ; <span class="comment">/* # of points in the running box, odd number required */</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j ++ ) <span class="comment">/* select a row */</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         <span class="keywordflow">for</span> ( i = 0 ; i < lxr ; i ++ ) <span class="comment">/* go through one row */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>             npix = 0 ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>             sum = 0. ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             <span class="keywordflow">for</span> (k = i - (nrunning-1)/2 ; k < i + (nrunning+1)/2; k ++ )</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>             {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                 <span class="comment">/* marginal pixels are not considered */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                 <span class="keywordflow">if</span> ( k < 2 )</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                 {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                     continue ;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                 }</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                 <span class="keywordflow">if</span> ( k > (lxr) - 2 )</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                 {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                     break ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                 }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                 <span class="keywordflow">if</span> ( isnan(pirdata[j*lxr + k]) )</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                 {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                     continue ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                 }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                 npix ++ ;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                 sum += pirdata[j*lxr + k] ;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>             }</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             <span class="keywordflow">if</span> ( npix != 0 )</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                 pfildata[j*lxr + i] = sum/npix ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>             }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                 pfildata[j*lxr + i] = ZERO ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         }</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     }                  </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>    </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="comment">/*------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">     * now determine the tilt in each column and remove it in such a way</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">     * that the first rows are used as references that are not changed</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">     * a free regression fit is (index i means the sum over i):</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="comment">     * ax + b: a = [<xiyi>-<xi><yi>]/[<xi^2>-<xi>^2]</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">     * =>    : a = [xiyi - xi<yi>]/[xi^2 - xi<xi>]</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="comment">     *         b = <yi> - a<xi></span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lxf ; i ++ ) <span class="comment">/* one column selected */</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     {</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         sumy = 0. ;                   <span class="comment">/* yi   */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         sumc = 0. ;                   <span class="comment">/* xiyi */</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         sumx = 0. ;                   <span class="comment">/* xi   */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         sum2 = 0. ;                   <span class="comment">/* xi^2 */</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         npix = 0  ;  </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>           </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>         <span class="keywordflow">for</span> ( j = 0 ; j < lyf ; j ++ ) </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>             <span class="keywordflow">if</span> ( isnan(pfildata[i + j*lxf]) )</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>             {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>                 continue ;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>             }</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             sumy +=  pfildata[i + j*lxf] ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             sumc += (pfildata[i + j*lxf]) * j ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>             sum2 += j*j ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>             sumx += j   ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>             npix ++     ;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>         <span class="keywordflow">if</span> ( npix > 2 && fabs(sum2 - sumx*sumx/npix) >= 1e-6 ) </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>             a = ( sumc - sumx*sumy/npix ) / ( sum2 - sumx*sumx/npix ) ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>             b = ( sumy - a*sumx ) / npix ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>         } </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>             a = ZERO ;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>             b = ZERO ;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>         <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="comment">         * now correct the second input image im2 and the res_image.</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="comment">         */</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         <span class="keywordflow">if</span> ( !isnan(a) && !isnan(b) && fabs(a) < 1e8 && fabs(b) < 1e8 )</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         {</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             <span class="keywordflow">for</span> ( j = 0 ; j < lyf ; j ++ ) <span class="comment">/* the same column */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>             {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>                 <span class="keywordflow">if</span> ( !isnan(poutdata[i + j*lxf]) )</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>                 {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                     poutdata[i + j*lxf] += a*j+b ;        </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                 }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>             }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     }</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>    </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="comment">/* now compute the final residual image */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(poutdata[i]) )</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>             pirdata[i] = ZERO ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>         }   </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>             pirdata[i] = pi1data[i] - poutdata[i] ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     cpl_image_delete (filtered) ;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>    </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> cpl_image * sinfo_new_remove_column_offset ( cpl_image * im1, </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>                                 cpl_image * im2, </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                                 cpl_image * res_image )</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     <span class="keywordtype">int</span> i, j, npix, nrunning ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     pixelvalue sum, sum2, mean, stdev, median1, median2, ratio ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     pixelvalue * column1, * column2 ;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     <span class="keywordtype">int</span> lx1=0;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="keywordtype">int</span> ly1=0;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     <span class="keywordtype">int</span> lxr=0;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="keywordtype">int</span> lyr=0;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordtype">float</span>* pi1data=NULL;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     <span class="keywordtype">float</span>* poutdata=NULL;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordflow">if</span> ( im1 == NULL || im2 == NULL || res_image == NULL )</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     }</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     lx1=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     ly1=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     lxr=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     lyr=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     pi1data=cpl_image_get_data_float(im1);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="keywordflow">if</span> ( lx1 != lx2 || ly1 != ly2 ||</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>          lx2 != lxr || ly2 != lyr )</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     out_image = cpl_image_duplicate( im2 ) ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     poutdata=cpl_image_get_data_float(out_image);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="comment">/*------------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment">     *  now we deal with a constant offset in every column. We assume that it </span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment">        is due to redistribution of the flux. So we should divide the offset </span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="comment">        out.  The ratio is derived from the medians of the contributions </span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="comment">        rather than the means.</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx2 ; i ++ ) <span class="comment">/* select a column */</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     {</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         <span class="comment">/* statistics on columns */</span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         sum  = 0.  ;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         sum2 = 0. ;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         npix = 0  ;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j ++ )</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         {</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>             <span class="comment">/* first select only the good pixels */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*lxr]) )</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>             {</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                 continue ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>             }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>             sum  += pirdata[i + j*lxr] ;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>             sum2 += pirdata[i + j*lxr] * </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>                     pirdata[i + j*lxr] ; </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>             npix ++ ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>         }</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>         <span class="keywordflow">if</span> ( npix <= 1 )</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>         {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>             continue ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         }</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             mean  = sum/(pixelvalue) npix ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>             <span class="keywordflow">if</span> ( (sum2 - sum * mean) < 0 )</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>             {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"variance is negative"</span>) ; </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                 continue ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>             }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>             {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>                 <span class="comment">/* 2 sigma */</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                 stdev = 2 * sqrt ( (sum2 - sum*mean)/(pixelvalue)(npix - 1) ) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>             }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         <span class="comment">/* do it only if the S/N is high enough */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         <span class="keywordflow">if</span> ( fabs(mean)/stdev < 0.5 )</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>         {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>             continue ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>         }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         <span class="comment">/* exclude everything > 2 sigma */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j ++ )</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>         {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>             <span class="keywordflow">if</span> ( pirdata[i + j*lxr] < mean - stdev ||</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                  pirdata[i + j*lxr] > mean + stdev )</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>             {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                 pirdata[i + j*lxr] = ZERO ;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>             }</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         } </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         <span class="comment">/* now deal with the offset */</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>         median1 = 0. ;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         median2 = 0. ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         nrunning = 0 ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         <span class="comment">/* allocate memory for the column buffers */</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         column1 = (pixelvalue *) cpl_calloc ( ly1 , <span class="keyword">sizeof</span> (pixelvalue *) ) ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         column2 = (pixelvalue *) cpl_calloc ( ly2 , <span class="keyword">sizeof</span> (pixelvalue *) ) ; </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>         <span class="keywordflow">for</span> ( j = 0 ; j < lyr ; j++ ) <span class="comment">/* go through one column */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>         {</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*lxr]) )</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>             {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>                 continue ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>             }</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>             <span class="keywordflow">if</span> ( isnan(pi1data[i+j*lx1]) || isnan(pi2data[i+j*lx2]) )</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>             {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>                 continue ;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>             }</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         column1[nrunning] = pi1data[i + j*lx1] ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             column2[nrunning] = pi2data[i + j*lx2] ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>             nrunning ++ ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         }</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         <span class="comment">/* change the second input image only if there are more then </span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> <span class="comment">           10 % good pixels in a column */</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <span class="keywordflow">if</span> ( nrunning > 0.1*lyr )</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>         {</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>             <span class="comment">/* --------------------------------------------------------------</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">             * determine the medians of the columns of both images and compute </span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">               the ratio, the columns of the second input image are multiplied </span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">               by this ratio to adjust the column offsets. </span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>             median2 = sinfo_new_median( column2, nrunning ) ;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>             <span class="keywordflow">if</span> ( median2 != 0. )</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>             {</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                 median1 = sinfo_new_median( column1, nrunning ) ;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                 ratio = median1 / median2 ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>                 <span class="keywordflow">if</span> ( ratio > 0 )</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>                 {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                     <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) <span class="comment">/* go through one column */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                     {</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                         <span class="keywordflow">if</span> ( !isnan(pi2data[i + j*lx2]) )</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                         {</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                             poutdata[i + j*lx2] = pi2data[i + j*lx2] * ratio ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                         }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                         {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>                             poutdata[i + j*lx2] = ZERO ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>                         }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>                     }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>                 }</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             }</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         }   </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         cpl_free ( column1 ) ;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>         cpl_free ( column2 ) ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     <span class="comment">/* now compute the final residual image */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) lx1*ly1 ; i ++ )</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     {</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>         <span class="keywordflow">if</span> ( isnan(pi1data[i]) || isnan(poutdata[i]) )</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>             pirdata[i] = ZERO ;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         }   </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         {</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>             pirdata[i] = pi1data[i] - poutdata[i] ;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         }</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>    </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> cpl_image * </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> sinfo_new_remove_residual_tilt ( cpl_image * im2, cpl_image * res_image )</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> {</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     cpl_image * residual  ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="keywordtype">int</span> i, j, npix ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     pixelvalue a, b, sum, sumx, sumy, sumc, sum2, mean, stdev ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <span class="keywordtype">int</span> rlx=0;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <span class="keywordtype">int</span> rly=0;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="keywordtype">float</span>* poutdata=NULL;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     <span class="keywordtype">float</span>* ptmpdata=NULL;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <span class="keywordflow">if</span> ( im2 == NULL || res_image == NULL )</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     rlx=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     rly=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordflow">if</span> ( lx2 != rlx || ly2 != rly )</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     }</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> </div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     out_image = cpl_image_duplicate( im2 ) ;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     residual  = cpl_image_duplicate( res_image ) ;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     poutdata=cpl_image_get_data_float(out_image);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     ptmpdata=cpl_image_get_data_float(residual);</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx2; i++ ) <span class="comment">/* select one column */</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         sum  = 0. ;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         sum2 = 0. ;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         npix = 0  ;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         {</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>             <span class="comment">/* first select good pixels and derive the mean </span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="comment">               and sigma of each column */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>             {</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>                 continue ;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>             }</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>             sum  += pirdata[i + j*rlx] ;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>             sum2 += pirdata[i + j*rlx] *</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>                     pirdata[i + j*rlx] ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>             npix ++ ;</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>         </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         <span class="keywordflow">if</span> ( npix <= 1 )</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>         {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>             continue ;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>         }</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>             mean  = sum / (pixelvalue) npix ;</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>             stdev = 1.5 * sqrt( (sum2 - sum*mean) / (pixelvalue)(npix - 1) ) ;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>         }</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>  </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         <span class="comment">/* exclude everything > 1.5 sigma */</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ )</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>         {</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>             <span class="keywordflow">if</span> ( pirdata[i + j*rlx] < mean - stdev ||</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>                  pirdata[i + j*rlx] > mean + stdev )</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>             {</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>                 pirdata[i + j*rlx] = ZERO ;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>             }</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>         }</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>         <span class="comment">/* now determine the tilt, see function sinfo_removeRegionalTilt </span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="comment">           for explanation */</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>         sumy = 0. ;                   <span class="comment">/* yi   */</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>         sumc = 0. ;                   <span class="comment">/* xiyi */</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>         sumx = 0. ;                   <span class="comment">/* xi   */</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>         sum2 = 0. ;                   <span class="comment">/* xi^2 */</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>         npix = 0  ;  </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>           </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         <span class="keywordflow">for</span> ( j = 0 ; j < rly ; j ++ ) </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>         {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>             {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>                 continue ;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>             }</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>             sumy +=  pirdata[i + j*rlx] ;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>             sumc += (pirdata[i + j*rlx]) * j ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>             sum2 += j*j ;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>             sumx += j   ;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>             npix ++     ;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         }</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         <span class="keywordflow">if</span> ( npix > 2 && fabs(sum2 - sumx*sumx/npix) >= 1e-6 ) </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         {</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             a = ( sumc - sumx*sumy/npix ) / ( sum2 - sumx*sumx/npix ) ;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>             b = ( sumy - a*sumx ) / npix ;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>         } </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>             a = ZERO ;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>             b = ZERO ;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="comment">         * now correct the second input image im2 and the res_image.</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="comment">         */</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         <span class="keywordflow">if</span> ( !isnan(a) && !isnan(b) && fabs(a) < 1e8 && fabs(b) < 1e8 )</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>         {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>             <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j ++ ) <span class="comment">/* the same column */</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>             {</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>                 <span class="keywordflow">if</span> ( !isnan(poutdata[i+j*lx2]) )</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>                 {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>                     poutdata[i + j*lx2] += a*j+b ;        </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>                     pirdata[i + j*lx2] = ptmpdata[i + j*lx2] -(a*j+b) ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>                 }</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>             }</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>         }</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     }</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     cpl_image_delete (residual) ;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> }</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> cpl_image * </div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> sinfo_new_remove_residual_offset( cpl_image * im2, cpl_image * res_image )</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> {</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     cpl_image * out_image ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordtype">int</span> i, j, npix ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     pixelvalue res_median ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     pixelvalue * column ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     <span class="keywordtype">int</span> lx2=0;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     <span class="keywordtype">int</span> ly2=0;</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     <span class="keywordtype">int</span> rlx=0;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <span class="keywordtype">int</span> rly=0;</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     <span class="keywordtype">float</span>* pi2data=NULL;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     <span class="keywordtype">float</span>* pirdata=NULL;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     <span class="keywordtype">float</span>* poudata=NULL;</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> </div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     <span class="keywordflow">if</span> ( im2 == NULL || res_image == NULL )</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     {</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null image as input"</span>) ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     }</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     lx2=cpl_image_get_size_x(im2);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     ly2=cpl_image_get_size_y(im2);</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     rlx=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     rly=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     pi2data=cpl_image_get_data_float(im2);</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     pirdata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> </div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     <span class="keywordflow">if</span> ( lx2 != rlx || ly2 != rly )</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     {</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"input images are not compatible in size"</span>) ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     }</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     out_image = cpl_image_duplicate( im2 ) ;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     poudata=cpl_image_get_data_float(res_image);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     olx=cpl_image_get_size_x(res_image);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     oly=cpl_image_get_size_y(res_image);</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     column = (pixelvalue *) cpl_calloc ( ly2 , <span class="keyword">sizeof</span> (pixelvalue *) ) ;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx2 ; i++ ) <span class="comment">/* select one column */</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     {</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         npix = 0  ;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     <span class="keywordflow">for</span> (j=0;j<ly2;j++)</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>         column[j]=0;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>         <span class="keywordflow">for</span> ( j = 0 ; j < rly ; j++ ) <span class="comment">/* go through one column */</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         {</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             <span class="keywordflow">if</span> ( isnan(pirdata[i + j*rlx]) )</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>             {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>                 continue ;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>             }</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>    </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             column[npix] = pirdata[i + j*rlx] ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>             npix ++ ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>         }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>         <span class="comment">/* determine the sinfo_median of a column of the residual image */</span></div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>         <span class="keywordflow">if</span> ( npix > 0.1 * rly )</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>             res_median = sinfo_new_median( column, npix ) ;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>         }</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>         {</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             continue ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         <span class="keywordflow">for</span> ( j = 0 ; j < ly2 ; j++ ) <span class="comment">/* go through one column */</span></div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         {</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>             <span class="keywordflow">if</span> ( !isnan(pi2data[i+j*lx2]))</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>             {</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>                 poudata[i + j*lx2] = pi2data[i + j*lx2] + res_median ;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>             }</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>             {</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>                 poudata[i + j*lx2] = ZERO ;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>             }</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>             <span class="keywordflow">if</span> ( !isnan(pirdata[i + j*rlx]) )</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>             {</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>                 pirdata[i + j*rlx] -= res_median ;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>             }</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>         }</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     }</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     cpl_free ( column ) ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordflow">return</span> out_image ;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> }</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment">/*___oOo___*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__merge_8h_source.html b/html/sinfo__merge_8h_source.html
index 8b69252..47ace8a 100644
--- a/html/sinfo__merge_8h_source.html
+++ b/html/sinfo__merge_8h_source.html
@@ -2,92 +2,123 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_merge.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_merge.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_MERGE_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MERGE_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_merge.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  04/07/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_merge.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * merges the rows of two image data frames into one frame with doubled</span>
-<a name="l00034"></a>00034 <span class="comment"> * column length</span>
-<a name="l00035"></a>00035 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment"> */</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*</span>
-<a name="l00039"></a>00039 <span class="comment"> * header files</span>
-<a name="l00040"></a>00040 <span class="comment"> */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*</span>
-<a name="l00046"></a>00046 <span class="comment"> * function prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 
-<a name="l00061"></a>00061 cpl_image * 
-<a name="l00062"></a>00062 sinfo_sinfo_merge_images (cpl_image * im1, 
-<a name="l00063"></a>00063                   cpl_image * im2,
-<a name="l00064"></a>00064                   cpl_image * res_image ) ;
-<a name="l00065"></a>00065 
-<a name="l00078"></a>00078 cpl_image * 
-<a name="l00079"></a>00079 sinfo_new_remove_general_offset(cpl_image * im1, 
-<a name="l00080"></a>00080                       cpl_image * im2, 
-<a name="l00081"></a>00081                       cpl_image * res_image,
-<a name="l00082"></a>00082                       <span class="keywordtype">int</span> n ) ;
-<a name="l00083"></a>00083 
-<a name="l00094"></a>00094 cpl_image * 
-<a name="l00095"></a>00095 sinfo_new_remove_regional_tilt (cpl_image * im1,
-<a name="l00096"></a>00096               cpl_image * im2, 
-<a name="l00097"></a>00097               cpl_image * res_image ) ;
-<a name="l00098"></a>00098 
-<a name="l00110"></a>00110 cpl_image * sinfo_new_remove_column_offset (cpl_image * im1,
-<a name="l00111"></a>00111                       cpl_image * im2,
-<a name="l00112"></a>00112                       cpl_image * res_image );
-<a name="l00113"></a>00113 
-<a name="l00123"></a>00123 cpl_image * 
-<a name="l00124"></a>00124 sinfo_new_remove_residual_tilt (cpl_image * im2,cpl_image * res_image ) ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00137"></a>00137 cpl_image * 
-<a name="l00138"></a>00138 sinfo_new_remove_residual_offset(cpl_image * im2,cpl_image * res_image);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_merge.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_MERGE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MERGE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_merge.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  04/07/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_merge.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * merges the rows of two image data frames into one frame with doubled</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * column length</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> * function prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_image * </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_sinfo_merge_images (cpl_image * im1, </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                   cpl_image * im2,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                   cpl_image * res_image ) ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> cpl_image * </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_new_remove_general_offset(cpl_image * im1, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                       cpl_image * im2, </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                       cpl_image * res_image,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                       <span class="keywordtype">int</span> n ) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> cpl_image * </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> sinfo_new_remove_regional_tilt (cpl_image * im1,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>               cpl_image * im2, </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>               cpl_image * res_image ) ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> cpl_image * sinfo_new_remove_column_offset (cpl_image * im1,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                       cpl_image * im2,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                       cpl_image * res_image );</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> cpl_image * </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> sinfo_new_remove_residual_tilt (cpl_image * im2,cpl_image * res_image ) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> cpl_image * </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> sinfo_new_remove_residual_offset(cpl_image * im2,cpl_image * res_image);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__msg_8c_source.html b/html/sinfo__msg_8c_source.html
index b757669..a2c2293 100644
--- a/html/sinfo__msg_8c_source.html
+++ b/html/sinfo__msg_8c_source.html
@@ -2,246 +2,277 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_msg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_msg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                          *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the ESO SINFO Pipeline                            *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                  *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                          *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify   *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by   *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or      *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                    *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                          *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,        *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                           *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                          *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License      *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software            *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA   *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                          */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2008/02/12 14:57:39 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <stdarg.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00035"></a>00035 
-<a name="l00037"></a>00037 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="preprocessor">#define DEBUG_CALLER 0  </span><span class="comment">/* Define whether to check consistency of </span>
-<a name="l00053"></a>00053 <span class="comment">                           msg_louder/softer calls */</span>
-<a name="l00054"></a>00054 <span class="comment">/* #define DEBUG_CALLER */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#define MAXLEVEL 256</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define MAXSTRINGLENGTH 1000</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> level = 0;  <span class="comment">/* Current message & indentation level </span>
-<a name="l00060"></a>00060 <span class="comment">                          from 0 to MAXLEVEL-1.</span>
-<a name="l00061"></a>00061 <span class="comment">            0 is the most verbose level. */</span>
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keywordtype">int</span> outlevel = -1; <span class="comment">/* Only print message if level is </span>
-<a name="l00063"></a>00063 <span class="comment">                             in {0, 1, ..., outlevel}.</span>
-<a name="l00064"></a>00064 <span class="comment">             Always print if outlevel = - 1 */</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#ifdef DEBUG_CALLER</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *sinfo_callers[MAXLEVEL]; <span class="comment">/* Check the consistency of </span>
-<a name="l00067"></a>00067 <span class="comment">                                         calls to softer/louder  */</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">char</span> printbuffer[MAXSTRINGLENGTH]; <span class="comment">/* Used to pass variable argument </span>
-<a name="l00071"></a>00071 <span class="comment">                                             list to cpl_msg_info() */</span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *domain = <span class="stringliteral">"Undefined domain"</span>;
-<a name="l00074"></a>00074                                      <span class="comment">/* This is to support getting the </span>
-<a name="l00075"></a>00075 <span class="comment">                                        current domain </span>
-<a name="l00076"></a>00076 <span class="comment">                      * which is currently not available in CPL</span>
-<a name="l00077"></a>00077 <span class="comment">                      */</span>
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> initialized = FALSE;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">int</span> number_of_warnings = 0;     <span class="comment">/* Coun't the number of warnings since </span>
-<a name="l00081"></a>00081 <span class="comment">                                          initialization */</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00101"></a><a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc">00101</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init</a>(<span class="keywordtype">int</span> olevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *dom)
-<a name="l00102"></a>00102 {
-<a name="l00103"></a>00103     <span class="comment">/* Initialize per recipe: */</span>
-<a name="l00104"></a>00104     number_of_warnings = 0;
-<a name="l00105"></a>00105         
-<a name="l00106"></a>00106     <span class="keywordflow">if</span> (!initialized)
-<a name="l00107"></a>00107     {
-<a name="l00108"></a>00108         <span class="comment">/* Initialize once: */</span>
-<a name="l00109"></a>00109         outlevel = olevel;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111         cpl_msg_set_indentation(2);
-<a name="l00112"></a>00112         
-<a name="l00113"></a>00113         <span class="comment">/*  CPL message format is</span>
-<a name="l00114"></a>00114 <span class="comment">         *  [Time][Verbosity][domain][component] message</span>
-<a name="l00115"></a>00115 <span class="comment">         *</span>
-<a name="l00116"></a>00116 <span class="comment">         *  Don't show the (variable length and wildly</span>
-<a name="l00117"></a>00117 <span class="comment">         *  fluctuating) component. It interferes with</span>
-<a name="l00118"></a>00118 <span class="comment">         *  indentation. The component is available anyway</span>
-<a name="l00119"></a>00119 <span class="comment">         *  on CPL_MSG_DEBUG level.</span>
-<a name="l00120"></a>00120 <span class="comment">         */</span>
-<a name="l00121"></a>00121         cpl_msg_set_time_on();
-<a name="l00122"></a>00122         <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(dom);
-<a name="l00123"></a>00123         cpl_msg_set_domain_on();
-<a name="l00124"></a>00124         cpl_msg_set_component_off();
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126         initialized = TRUE;
-<a name="l00127"></a>00127     }
-<a name="l00128"></a>00128 }
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00139"></a><a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e">00139</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e" title="Set output level.">sinfo_msg_set_level</a>(<span class="keywordtype">int</span> olevel) 
-<a name="l00140"></a>00140 {
-<a name="l00141"></a>00141     outlevel = olevel; 
-<a name="l00142"></a>00142 } 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00153"></a><a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788">00153</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788" title="Decrease message level.">sinfo_msg_softer_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fctid)
-<a name="l00154"></a>00154 {
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (level + 1 < MAXLEVEL)
-<a name="l00156"></a>00156     {
-<a name="l00157"></a>00157         level++;
-<a name="l00158"></a>00158         cpl_msg_indent_more();
-<a name="l00159"></a>00159 <span class="preprocessor">#if DEBUG_CALLER</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>        sinfo_callers[level] = fctid;
-<a name="l00161"></a>00161 <span class="preprocessor">#else</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span>        fctid = fctid; <span class="comment">/* Satisfy compiler */</span>
-<a name="l00163"></a>00163 <span class="preprocessor">#endif</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span>        }
-<a name="l00165"></a>00165 }
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00175"></a>00175 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00176"></a><a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6">00176</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6" title="Increase message level.">sinfo_msg_louder_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fctid)
-<a name="l00177"></a>00177 {
-<a name="l00178"></a>00178     <span class="keywordflow">if</span> (level == 0)
-<a name="l00179"></a>00179     {
-<a name="l00180"></a>00180         <span class="comment">/* 0 is the loudest, ignore request */</span>
-<a name="l00181"></a>00181         <span class="keywordflow">return</span>;
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     
-<a name="l00184"></a>00184     <span class="comment">/* Only make louder, if called from the same function which called</span>
-<a name="l00185"></a>00185 <span class="comment">       sinfo_msg_softer. (disable check if level is more than MAXLEVEL)</span>
-<a name="l00186"></a>00186 <span class="comment">    */</span>
-<a name="l00187"></a>00187 <span class="preprocessor">#if DEBUG_CALLER</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (level >= MAXLEVEL || strcmp(sinfo_callers[level], fctid) == 0)
-<a name="l00189"></a>00189 <span class="preprocessor">#else</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>    fctid = fctid;              <span class="comment">/* Satisfy compiler */</span>
-<a name="l00191"></a>00191 <span class="preprocessor">#endif</span>
-<a name="l00192"></a>00192 <span class="preprocessor"></span>    {
-<a name="l00193"></a>00193         level--;
-<a name="l00194"></a>00194         cpl_msg_indent_less();
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 <span class="preprocessor">#if DEBUG_CALLER</span>
-<a name="l00197"></a>00197 <span class="preprocessor"></span>    <span class="keywordflow">else</span>
-<a name="l00198"></a>00198     {
-<a name="l00199"></a>00199      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Message level decreased by '%s' but increased by '%s'"</span>,
-<a name="l00200"></a>00200                sinfo_callers[level], fctid);
-<a name="l00201"></a>00201     }
-<a name="l00202"></a>00202 <span class="preprocessor">#endif</span>
-<a name="l00203"></a>00203 <span class="preprocessor"></span>}
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00218"></a>00218 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00219"></a><a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1">00219</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1" title="Print a message on &#39;info&#39; or &#39;debug&#39; level.">sinfo_msg_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *form [...]
-<a name="l00220"></a>00220 {
-<a name="l00221"></a>00221     va_list al;
-<a name="l00222"></a>00222     
-<a name="l00223"></a>00223     va_start(al, format);
-<a name="l00224"></a>00224     vsnprintf(printbuffer, MAXSTRINGLENGTH - 1, format, al);
-<a name="l00225"></a>00225     va_end(al);
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     printbuffer[MAXSTRINGLENGTH - 1] = <span class="charliteral">'\0'</span>;
-<a name="l00228"></a>00228     
-<a name="l00229"></a>00229     <span class="keywordflow">if</span> (outlevel < 0 || level <= outlevel)
-<a name="l00230"></a>00230     {
-<a name="l00231"></a>00231 <span class="comment">/*</span>
-<a name="l00232"></a>00232 <span class="comment">#undef cpl_msg_info</span>
-<a name="l00233"></a>00233 <span class="comment">*/</span>
-<a name="l00234"></a>00234         cpl_msg_info(fct, <span class="stringliteral">"%s"</span>, printbuffer);
-<a name="l00235"></a>00235 <span class="comment">/*</span>
-<a name="l00236"></a>00236 <span class="comment">#define cpl_msg_info(...)  use__sinfo_msg__instead__of__cpl_msg_info</span>
-<a name="l00237"></a>00237 <span class="comment">*/</span>
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239     <span class="keywordflow">else</span>
-<a name="l00240"></a>00240     {
-<a name="l00241"></a>00241         cpl_msg_debug(fct, <span class="stringliteral">"%s"</span>, printbuffer);
-<a name="l00242"></a>00242     }
-<a name="l00243"></a>00243 }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00250"></a>00250 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00251"></a><a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30">00251</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings</a>(<span class="keywordtype">void</span>)
-<a name="l00252"></a>00252 {
-<a name="l00253"></a>00253     <span class="keywordflow">return</span> number_of_warnings;
-<a name="l00254"></a>00254 }
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00265"></a>00265 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00266"></a><a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a">00266</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a" title="Accumulate warnings.">sinfo_msg_add_warnings</a>(<span class="keywordtype">int</span> n)
-<a name="l00267"></a>00267 {
-<a name="l00268"></a>00268     number_of_warnings += n;
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00286"></a>00286 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00287"></a><a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">00287</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28" title="Print a warning message.">sinfo_msg_warning_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)
-<a name="l00288"></a>00288 {
-<a name="l00289"></a>00289     va_list al;
-<a name="l00290"></a>00290     
-<a name="l00291"></a>00291     va_start(al, format);
-<a name="l00292"></a>00292     vsnprintf(printbuffer, MAXSTRINGLENGTH - 1, format, al);
-<a name="l00293"></a>00293     va_end(al);
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295     printbuffer[MAXSTRINGLENGTH - 1] = <span class="charliteral">'\0'</span>;
-<a name="l00296"></a>00296     
-<a name="l00297"></a>00297     cpl_msg_warning(fct, <span class="stringliteral">"%s"</span>, printbuffer);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     number_of_warnings += 1;
-<a name="l00300"></a>00300 }
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00308"></a>00308 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00309"></a><a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a">00309</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a" title="Get current message domain.">sinfo_msg_get_domain</a>(<span class="keywordtype">void</span>)
-<a name="l00310"></a>00310 {
-<a name="l00311"></a>00311     <span class="keywordflow">return</span> domain;
-<a name="l00312"></a>00312 }
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00319"></a>00319 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00320"></a><a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5">00320</a> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *d)
-<a name="l00321"></a>00321 {
-<a name="l00322"></a>00322     <span class="comment">/* Set domain and remember */</span>
-<a name="l00323"></a>00323     cpl_msg_set_domain(d);
-<a name="l00324"></a>00324     domain = d;
-<a name="l00325"></a>00325 }
-<a name="l00326"></a>00326 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_msg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                          *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the ESO SINFO Pipeline                            *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                  *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                          *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify   *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by   *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or      *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                    *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                          *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,        *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                           *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                          *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License      *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software            *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA   *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                          */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2008/02/12 14:57:39 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <stdarg.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#define DEBUG_CALLER 0  </span><span class="comment">/* Define whether to check consistency of </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                           msg_louder/softer calls */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="comment">/* #define DEBUG_CALLER */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define MAXLEVEL 256</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define MAXSTRINGLENGTH 1000</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> level = 0;  <span class="comment">/* Current message & indentation level </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">                          from 0 to MAXLEVEL-1.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">            0 is the most verbose level. */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">int</span> outlevel = -1; <span class="comment">/* Only print message if level is </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                             in {0, 1, ..., outlevel}.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">             Always print if outlevel = - 1 */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#ifdef DEBUG_CALLER</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">char</span> *sinfo_callers[MAXLEVEL]; <span class="comment">/* Check the consistency of </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                                         calls to softer/louder  */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">char</span> printbuffer[MAXSTRINGLENGTH]; <span class="comment">/* Used to pass variable argument </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                                             list to cpl_msg_info() */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *domain = <span class="stringliteral">"Undefined domain"</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                      <span class="comment">/* This is to support getting the </span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">                                        current domain </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                      * which is currently not available in CPL</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">                      */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> initialized = FALSE;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">int</span> number_of_warnings = 0;     <span class="comment">/* Coun't the number of warnings since </span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">                                          initialization */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc">  100</a></span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init</a>(<span class="keywordtype">int</span> olevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *dom)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="comment">/* Initialize per recipe: */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     number_of_warnings = 0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordflow">if</span> (!initialized)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         <span class="comment">/* Initialize once: */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         outlevel = olevel;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         cpl_msg_set_indentation(2);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         <span class="comment">/*  CPL message format is</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">         *  [Time][Verbosity][domain][component] message</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">         *</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">         *  Don't show the (variable length and wildly</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">         *  fluctuating) component. It interferes with</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">         *  indentation. The component is available anyway</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">         *  on CPL_MSG_DEBUG level.</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         cpl_msg_set_time_on();</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(dom);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         cpl_msg_set_domain_on();</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         cpl_msg_set_component_off();</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         initialized = TRUE;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e">  138</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e" title="Set output level.">sinfo_msg_set_level</a>(<span class="keywordtype">int</span> olevel) </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     outlevel = olevel; </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> } </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788">  152</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788" title="Decrease message level.">sinfo_msg_softer_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fctid)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">if</span> (level + 1 < MAXLEVEL)</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         level++;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         cpl_msg_indent_more();</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">#if DEBUG_CALLER</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor"></span>        sinfo_callers[level] = fctid;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor"></span>        fctid = fctid; <span class="comment">/* Satisfy compiler */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor"></span>        }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6">  175</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6" title="Increase message level.">sinfo_msg_louder_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fctid)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">if</span> (level == 0)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         <span class="comment">/* 0 is the loudest, ignore request */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">/* Only make louder, if called from the same function which called</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">       sinfo_msg_softer. (disable check if level is more than MAXLEVEL)</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor">#if DEBUG_CALLER</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (level >= MAXLEVEL || strcmp(sinfo_callers[level], fctid) == 0)</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor"></span>    fctid = fctid;              <span class="comment">/* Satisfy compiler */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor"></span>    {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         level--;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         cpl_msg_indent_less();</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="preprocessor">#if DEBUG_CALLER</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="preprocessor"></span>    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Message level decreased by '%s' but increased by '%s'"</span>,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                sinfo_callers[level], fctid);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="preprocessor"></span>}</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1">  218</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1" title="Print a message on 'info' or 'debug' level.">sinfo_msg_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     va_list al;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     va_start(al, format);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     vsnprintf(printbuffer, MAXSTRINGLENGTH - 1, format, al);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     va_end(al);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     printbuffer[MAXSTRINGLENGTH - 1] = <span class="charliteral">'\0'</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">if</span> (outlevel < 0 || level <= outlevel)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">#undef cpl_msg_info</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         cpl_msg_info(fct, <span class="stringliteral">"%s"</span>, printbuffer);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">#define cpl_msg_info(...)  use__sinfo_msg__instead__of__cpl_msg_info</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         cpl_msg_debug(fct, <span class="stringliteral">"%s"</span>, printbuffer);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30">  250</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">return</span> number_of_warnings;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a">  265</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a" title="Accumulate warnings.">sinfo_msg_add_warnings</a>(<span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     number_of_warnings += n;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28">  286</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28" title="Print a warning message.">sinfo_msg_warning_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     va_list al;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     va_start(al, format);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     vsnprintf(printbuffer, MAXSTRINGLENGTH - 1, format, al);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     va_end(al);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     printbuffer[MAXSTRINGLENGTH - 1] = <span class="charliteral">'\0'</span>;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     cpl_msg_warning(fct, <span class="stringliteral">"%s"</span>, printbuffer);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     number_of_warnings += 1;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a">  308</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a" title="Get current message domain.">sinfo_msg_get_domain</a>(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordflow">return</span> domain;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5">  319</a></span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *d)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">/* Set domain and remember */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     cpl_msg_set_domain(d);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     domain = d;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__msg_8h_source.html b/html/sinfo__msg_8h_source.html
index b12b520..499ca77 100644
--- a/html/sinfo__msg_8h_source.html
+++ b/html/sinfo__msg_8h_source.html
@@ -2,118 +2,149 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_msg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_msg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFO Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/11/21 11:56:10 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_MSG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MSG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span>
-<a name="l00029"></a>00029 <span class="comment">/*</span>
-<a name="l00030"></a>00030 <span class="comment">#include <sinfo_utils.h></span>
-<a name="l00031"></a>00031 <span class="comment">*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl_msg.h></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/* Nothing bad happens if user also calls cpl_msg_info()</span>
-<a name="l00035"></a>00035 <span class="comment"> * but prevent it as a service to the user of this module</span>
-<a name="l00036"></a>00036 <span class="comment">#define cpl_msg_info(...)  use__sinfo_msg__instead__of__cpl_msg_info</span>
-<a name="l00037"></a>00037 <span class="comment">#define cpl_msg_indent()</span>
-<a name="l00038"></a>00038 <span class="comment"> */</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init</a>(<span class="keywordtype">int</span> outlevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *dom);
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e" title="Set output level.">sinfo_msg_set_level</a>(<span class="keywordtype">int</span> olevel);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a" title="Get current message domain.">sinfo_msg_get_domain</a>(<span class="keywordtype">void</span>);
-<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *d);
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/* Convenience macros to save the user from typing function id */</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00069"></a><a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789">00069</a> <span class="preprocessor">#define sinfo_msg_error(...) cpl_msg_error(cpl_func, __VA_ARGS__)</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>
-<a name="l00071"></a>00071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00082"></a><a class="code" href="group__sinfo__msg.html#ga75cab6805099905b3b101f660a907f37">00082</a> <span class="preprocessor">#define sinfo_msg_progress(i, iter, ...) \</span>
-<a name="l00083"></a>00083 <span class="preprocessor">  cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00093"></a><a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6">00093</a> <span class="preprocessor">#define sinfo_msg_warning(...) sinfo_msg_warning_macro(cpl_func, __VA_ARGS__)</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00103"></a><a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8">00103</a> <span class="preprocessor">#define sinfo_msg_debug(...) cpl_msg_debug(cpl_func, __VA_ARGS__)</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span>
-<a name="l00105"></a>00105 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00110"></a>00110 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00111"></a><a class="code" href="group__sinfo__msg.html#gaa6da02902135556d8517de4c05b7a1a6">00111</a> <span class="preprocessor">#define sinfo_msg_low(...)  do {                     \</span>
-<a name="l00112"></a>00112 <span class="preprocessor">                           sinfo_msg_softer();       \</span>
-<a name="l00113"></a>00113 <span class="preprocessor">                           sinfo_msg(__VA_ARGS__);   \</span>
-<a name="l00114"></a>00114 <span class="preprocessor">                           sinfo_msg_louder();       \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">                           } while (FALSE)</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 <span class="preprocessor">#define sinfo_msg(...) sinfo_msg_macro(cpl_func, __VA_ARGS__)</span>
-<a name="l00121"></a>00121 <span class="preprocessor"></span><span class="preprocessor">#define sinfo_msg_softer() sinfo_msg_softer_macro(cpl_func)</span>
-<a name="l00122"></a>00122 <span class="preprocessor"></span><span class="preprocessor">#define sinfo_msg_louder() sinfo_msg_louder_macro(cpl_func)</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1" title="Print a message on &#39;info&#39; or &#39;debug&#39; level.">sinfo_msg_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)
-<a name="l00126"></a>00126 <span class="preprocessor">#ifdef __GNUC__</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span>__attribute__((format (printf, 2, 3)))
-<a name="l00128"></a>00128 <span class="preprocessor">#endif</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28" title="Print a warning message.">sinfo_msg_warning_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)
-<a name="l00132"></a>00132 <span class="preprocessor">#ifdef __GNUC__</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span>__attribute__((format (printf, 2, 3)))
-<a name="l00134"></a>00134 <span class="preprocessor">#endif</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span>;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings</a>(<span class="keywordtype">void</span>);
-<a name="l00138"></a>00138 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a" title="Accumulate warnings.">sinfo_msg_add_warnings</a>(<span class="keywordtype">int</span> n);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788" title="Decrease message level.">sinfo_msg_softer_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct);
-<a name="l00141"></a>00141 <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6" title="Increase message level.">sinfo_msg_louder_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct);
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_MSG_H */</span>
-<a name="l00144"></a>00144 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_msg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFO Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/11/21 11:56:10 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_MSG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MSG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">#include <sinfo_utils.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl_msg.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* Nothing bad happens if user also calls cpl_msg_info()</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * but prevent it as a service to the user of this module</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">#define cpl_msg_info(...)  use__sinfo_msg__instead__of__cpl_msg_info</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">#define cpl_msg_indent()</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga639b5d352f0518db6cc346c0737484cc" title="Initialize messaging.">sinfo_msg_init</a>(<span class="keywordtype">int</span> outlevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *dom);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gad9c8f46542015d0c93094c337a557d5e" title="Set output level.">sinfo_msg_set_level</a>(<span class="keywordtype">int</span> olevel);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__sinfo__msg.html#ga15d005a10b6dac6031d611eecdce129a" title="Get current message domain.">sinfo_msg_get_domain</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga5671e5e7722c35d9d174772c80013ad5" title="Set message domain.">sinfo_msg_set_domain</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *d);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/* Convenience macros to save the user from typing function id */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789">   69</a></span> <span class="preprocessor">#define sinfo_msg_error(...) cpl_msg_error(cpl_func, __VA_ARGS__)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga75cab6805099905b3b101f660a907f37">   82</a></span> <span class="preprocessor">#define sinfo_msg_progress(i, iter, ...) \</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">  cpl_msg_progress(cpl_func, (i), (iter), __VA_ARGS__)</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6">   93</a></span> <span class="preprocessor">#define sinfo_msg_warning(...) sinfo_msg_warning_macro(cpl_func, __VA_ARGS__)</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8">  103</a></span> <span class="preprocessor">#define sinfo_msg_debug(...) cpl_msg_debug(cpl_func, __VA_ARGS__)</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="code" href="group__sinfo__msg.html#gaa6da02902135556d8517de4c05b7a1a6">  111</a></span> <span class="preprocessor">#define sinfo_msg_low(...)  do {                     \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">                           sinfo_msg_softer();       \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">                           sinfo_msg(__VA_ARGS__);   \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">                           sinfo_msg_louder();       \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">                           } while (FALSE)</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor">#define sinfo_msg(...) sinfo_msg_macro(cpl_func, __VA_ARGS__)</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor"></span><span class="preprocessor">#define sinfo_msg_softer() sinfo_msg_softer_macro(cpl_func)</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor"></span><span class="preprocessor">#define sinfo_msg_louder() sinfo_msg_louder_macro(cpl_func)</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gacccff4e78e5f14f06b2c06686a0e19e1" title="Print a message on 'info' or 'debug' level.">sinfo_msg_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor">#ifdef __GNUC__</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor"></span>__attribute__((format (printf, 2, 3)))</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor"></span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga905c39fd148a95c77ea1335aa9441b28" title="Print a warning message.">sinfo_msg_warning_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor">#ifdef __GNUC__</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span>__attribute__((format (printf, 2, 3)))</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__msg.html#ga819ca13f95340688515071106d88af30" title="Get number of warnings printed so far.">sinfo_msg_get_warnings</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gac95702d684d815593ec1516082c0071a" title="Accumulate warnings.">sinfo_msg_add_warnings</a>(<span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#gae0f3e727182610d92efdb755f1da6788" title="Decrease message level.">sinfo_msg_softer_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keywordtype">void</span> <a class="code" href="group__sinfo__msg.html#ga38ac31ae7cb0ce5c792486fd3c9478e6" title="Increase message level.">sinfo_msg_louder_macro</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fct);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_MSG_H */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__add__bp__map_8c_source.html b/html/sinfo__new__add__bp__map_8c_source.html
index 86a5e97..4e73a91 100644
--- a/html/sinfo__new__add__bp__map_8c_source.html
+++ b/html/sinfo__new__add__bp__map_8c_source.html
@@ -2,285 +2,316 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_add_bp_map.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_add_bp_map.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_new_add_bp_map.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Oct 13, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Coadd different BP MAP </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_new_add_bp_map.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00038"></a>00038 <span class="comment">/* #include "image_ops.h" */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_detlin.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                                Prototypes</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                                Defines</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment">  Function Definitions</span>
-<a name="l00053"></a>00053 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 <span class="keywordtype">int</span> 
-<a name="l00072"></a>00072 sinfo_new_add_bp_map (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00073"></a>00073                       cpl_parameterlist* config, 
-<a name="l00074"></a>00074                       cpl_frameset* sof,cpl_frameset* ref_set)
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   <span class="keywordtype">int</span>  nmsk =0;
-<a name="l00078"></a>00078   <span class="keywordtype">int</span>  nmsk_ref_fits =0;
-<a name="l00079"></a>00079   <span class="keywordtype">int</span> i=0;
-<a name="l00080"></a>00080   <span class="keywordtype">int</span> k=0;
-<a name="l00081"></a>00081   <span class="keywordtype">int</span> n_bad=0;
-<a name="l00082"></a>00082   cpl_image**  img_sum=NULL;
-<a name="l00083"></a>00083   cpl_image*   img_set=NULL;
-<a name="l00084"></a>00084   cpl_image*   img_tot=NULL;
-<a name="l00085"></a>00085   cpl_frameset* msk_set=NULL;
-<a name="l00086"></a>00086   cpl_frameset* msk_ref_fits=NULL;
-<a name="l00087"></a>00087   cpl_frame* frame=NULL;
-<a name="l00088"></a>00088   <span class="keywordtype">double</span> max=0;
-<a name="l00089"></a>00089   <span class="keywordtype">char</span> frame_name[FILE_NAME_SZ];
-<a name="l00090"></a>00090   <span class="keywordtype">char</span> out_msk[FILE_NAME_SZ];
-<a name="l00091"></a>00091       
-<a name="l00092"></a>00092   cpl_table* qclog_tbl=NULL;
-<a name="l00093"></a>00093   <span class="keywordtype">char</span> * tag=NULL;
-<a name="l00094"></a>00094   <span class="keywordtype">char</span> * tmp_tag=NULL;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096   strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099   <span class="comment">/* cpl_parameterlist_dump(config); */</span>
-<a name="l00100"></a>00100   check_nomsg(msk_set=cpl_frameset_new());
-<a name="l00101"></a>00101   ck0_nomsg(sinfo_contains_frames_kind(sof,msk_set,<span class="stringliteral">"BP_MAP"</span>));
-<a name="l00102"></a>00102   check_nomsg(nmsk = cpl_frameset_get_size(msk_set));
-<a name="l00103"></a>00103   <span class="keywordflow">if</span>(nmsk == 0) {
-<a name="l00104"></a>00104     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No bad pixel masks to add"</span>);
-<a name="l00105"></a>00105     <span class="keywordflow">goto</span> cleanup;
-<a name="l00106"></a>00106   }
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109   check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
-<a name="l00110"></a>00110   strcpy(frame_name,cpl_frame_get_filename(frame));
-<a name="l00111"></a>00111   check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));
-<a name="l00112"></a>00112   {
-<a name="l00113"></a>00113     check_nomsg(msk_ref_fits=cpl_frameset_new());
-<a name="l00114"></a>00114     <span class="keywordflow">if</span> (nmsk < 1) {
-<a name="l00115"></a>00115       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No input frames. Nothing to do."</span>);
-<a name="l00116"></a>00116       <span class="keywordflow">goto</span> cleanup;
-<a name="l00117"></a>00117     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nmsk==1) {
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Only one input frames. Use it as master."</span>);
-<a name="l00120"></a>00120       check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
-<a name="l00121"></a>00121       strcpy(frame_name,cpl_frame_get_filename(frame));
-<a name="l00122"></a>00122       check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     } <span class="keywordflow">else</span> {
-<a name="l00125"></a>00125        
-<a name="l00126"></a>00126       ck0_nomsg(sinfo_contains_frames_kind(msk_set,
-<a name="l00127"></a>00127                        msk_ref_fits,PRO_BP_MAP_NO));
-<a name="l00128"></a>00128       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130       <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {
-<a name="l00131"></a>00131     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses %s for FITS header"</span>,
-<a name="l00132"></a>00132               PRO_BP_MAP_NO,PRO_BP_MAP_DI);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     ck0_nomsg(sinfo_contains_frames_kind(msk_set,
-<a name="l00135"></a>00135                          msk_ref_fits,PRO_BP_MAP_DI));
-<a name="l00136"></a>00136     check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses %s for FITS header"</span>,
-<a name="l00142"></a>00142                 PRO_BP_MAP_DI,PRO_BP_MAP_NL);
-<a name="l00143"></a>00143         
-<a name="l00144"></a>00144       ck0_nomsg(sinfo_contains_frames_kind(msk_set,
-<a name="l00145"></a>00145                            msk_ref_fits,PRO_BP_MAP_NL));
-<a name="l00146"></a>00146       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148       <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses 1st mask in the list"</span>,
-<a name="l00151"></a>00151                   PRO_BP_MAP_NL);
-<a name="l00152"></a>00152         sinfo_free_frameset(&msk_ref_fits);
-<a name="l00153"></a>00153         check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));
-<a name="l00154"></a>00154         check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));
-<a name="l00155"></a>00155         check_nomsg(cpl_frameset_erase_frame(msk_set,frame));
-<a name="l00156"></a>00156         check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158       } <span class="keywordflow">else</span> {
-<a name="l00159"></a>00159         sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_NL);
-<a name="l00160"></a>00160         check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
-<a name="l00161"></a>00161         strcpy(frame_name,cpl_frame_get_filename(frame));
-<a name="l00162"></a>00162         tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_NL;
-<a name="l00163"></a>00163       }
-<a name="l00164"></a>00164     } <span class="keywordflow">else</span> {
-<a name="l00165"></a>00165           sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_DI);
-<a name="l00166"></a>00166       check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
-<a name="l00167"></a>00167       strcpy(frame_name,cpl_frame_get_filename(frame));
-<a name="l00168"></a>00168       tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_DI;
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170       } <span class="keywordflow">else</span> {
-<a name="l00171"></a>00171         sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_NO);
-<a name="l00172"></a>00172     check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));
-<a name="l00173"></a>00173     strcpy(frame_name,cpl_frame_get_filename(frame));
-<a name="l00174"></a>00174     tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_NO;
-<a name="l00175"></a>00175       }
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     check_nomsg(nmsk = cpl_frameset_get_size(msk_set));  
-<a name="l00179"></a>00179     cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1), 
-<a name="l00180"></a>00180                              <span class="keyword">sizeof</span>(cpl_image*))) ;
-<a name="l00181"></a>00181     cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     <span class="comment">/* here mem leak */</span>
-<a name="l00184"></a>00184     <span class="keywordflow">for</span> (i=0;i<nmsk;i++) {
-<a name="l00185"></a>00185       check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));
-<a name="l00186"></a>00186       check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));
-<a name="l00187"></a>00187       check_nomsg(tmp_tag=(<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame));
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189       <span class="keywordflow">if</span>(strcmp(tmp_tag,tag) == 0 ) {
-<a name="l00190"></a>00190     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00191"></a>00191         check_nomsg(max=cpl_image_get_max(img_set));
-<a name="l00192"></a>00192     <span class="keywordflow">if</span>((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {
-<a name="l00193"></a>00193       sinfo_msg(<span class="stringliteral">"corr1"</span>);
-<a name="l00194"></a>00194       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
-<a name="l00195"></a>00195           sinfo_free_image(&(img_sum[0]));
-<a name="l00196"></a>00196           check_nomsg(img_sum[0]=cpl_image_duplicate(img_set));
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199       } <span class="keywordflow">else</span> {
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00202"></a>00202         check_nomsg(max=cpl_image_get_max(img_set));
-<a name="l00203"></a>00203     <span class="keywordflow">if</span>((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) &&  max>1 ) {
-<a name="l00204"></a>00204       sinfo_msg(<span class="stringliteral">"corr2 name=%s tag=%s"</span>,frame_name,tmp_tag);
-<a name="l00205"></a>00205       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));
-<a name="l00206"></a>00206     }
-<a name="l00207"></a>00207    
-<a name="l00208"></a>00208     cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));
-<a name="l00209"></a>00209     k++;
-<a name="l00210"></a>00210     sinfo_free_image(&img_set);
-<a name="l00211"></a>00211     sinfo_free_image(&(img_sum[k-1]));
-<a name="l00212"></a>00212       }
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214     img_tot=cpl_image_duplicate(img_sum[k]);
-<a name="l00215"></a>00215     sinfo_free_image(&(img_sum[k]));
-<a name="l00216"></a>00216     sinfo_free_array_image(&img_sum);
-<a name="l00217"></a>00217     <span class="comment">/*</span>
-<a name="l00218"></a>00218 <span class="comment"></span>
-<a name="l00219"></a>00219 <span class="comment">    frame = cpl_frameset_get_frame(msk_set,0);</span>
-<a name="l00220"></a>00220 <span class="comment">    strcpy(frame_name,cpl_frame_get_filename(frame));</span>
-<a name="l00221"></a>00221 <span class="comment">    img_sum=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);</span>
-<a name="l00222"></a>00222 <span class="comment">        </span>
-<a name="l00223"></a>00223 <span class="comment">    for (i=1;i<nmsk;i++) {</span>
-<a name="l00224"></a>00224 <span class="comment">    frame = cpl_frameset_get_frame(msk_set,i);</span>
-<a name="l00225"></a>00225 <span class="comment">    strcpy(frame_name,cpl_frame_get_filename(frame));</span>
-<a name="l00226"></a>00226 <span class="comment">    img_set=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);</span>
-<a name="l00227"></a>00227 <span class="comment">    cpl_mask_and(img_sum, img_set);</span>
-<a name="l00228"></a>00228 <span class="comment"></span>
-<a name="l00229"></a>00229 <span class="comment">    }</span>
-<a name="l00230"></a>00230 <span class="comment">    </span>
-<a name="l00231"></a>00231 <span class="comment">    */</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     n_bad = sinfo_new_count_bad_pixels(img_tot) ;
-<a name="l00234"></a>00234     sinfo_msg (<span class="stringliteral">"number of bad pixels: %d\n"</span>, n_bad) ;
-<a name="l00235"></a>00235     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00236"></a>00236     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC MBP_MAP NBADPIX"</span>,
-<a name="l00237"></a>00237                   n_bad,<span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="keywordflow">if</span> (nmsk>1) {
-<a name="l00240"></a>00240       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
-<a name="l00241"></a>00241                  PRO_MASTER_BP_MAP,qclog_tbl,
-<a name="l00242"></a>00242                  plugin_id,config),
-<a name="l00243"></a>00243       <span class="stringliteral">"cannot save ima %s"</span>, out_msk);   
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245     } <span class="keywordflow">else</span> {
-<a name="l00246"></a>00246       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,
-<a name="l00247"></a>00247                  PRO_MASTER_BP_MAP,qclog_tbl,
-<a name="l00248"></a>00248                  plugin_id,config),
-<a name="l00249"></a>00249       <span class="stringliteral">"cannot save ima %s"</span>, out_msk);   
-<a name="l00250"></a>00250     }
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     sinfo_free_image(&img_tot);
-<a name="l00253"></a>00253     sinfo_free_table(&qclog_tbl);
-<a name="l00254"></a>00254     sinfo_free_frameset(&msk_ref_fits);
-<a name="l00255"></a>00255     sinfo_free_frameset(&msk_set);
-<a name="l00256"></a>00256   
-<a name="l00257"></a>00257   }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259  cleanup:
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   sinfo_free_image(&img_tot);
-<a name="l00262"></a>00262   <span class="keywordflow">if</span>(img_sum!=NULL) {
-<a name="l00263"></a>00263     <span class="keywordflow">for</span>(i=0;i<nmsk;i++) {
-<a name="l00264"></a>00264       <span class="keywordflow">if</span>(img_sum[i] != NULL) {
-<a name="l00265"></a>00265     sinfo_free_image(&(img_sum[i]));
-<a name="l00266"></a>00266     img_sum[i]=NULL;         
-<a name="l00267"></a>00267       }
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269     sinfo_free_array_image(&img_sum);
-<a name="l00270"></a>00270     img_sum=NULL;
-<a name="l00271"></a>00271   }
-<a name="l00272"></a>00272   sinfo_free_image(&img_set);
-<a name="l00273"></a>00273   sinfo_free_table(&qclog_tbl);
-<a name="l00274"></a>00274   sinfo_free_frameset(&msk_set);
-<a name="l00275"></a>00275   sinfo_free_frameset(&msk_ref_fits);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00278"></a>00278      <span class="keywordflow">return</span> -1; 
-<a name="l00279"></a>00279   } <span class="keywordflow">else</span> {
-<a name="l00280"></a>00280      <span class="keywordflow">return</span> 0;
-<a name="l00281"></a>00281   }
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_add_bp_map.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_new_add_bp_map.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Oct 13, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Coadd different BP MAP </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_new_add_bp_map.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* #include "image_ops.h" */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_detlin.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                                Prototypes</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  Function Definitions</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_new_add_bp_map (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                       cpl_parameterlist* config, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                       cpl_frameset* sof,cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="keywordtype">int</span>  nmsk =0;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   <span class="keywordtype">int</span>  nmsk_ref_fits =0;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordtype">int</span> n_bad=0;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   cpl_image**  img_sum=NULL;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   cpl_image*   img_set=NULL;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   cpl_image*   img_tot=NULL;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   cpl_frameset* msk_set=NULL;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   cpl_frameset* msk_ref_fits=NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordtype">char</span> frame_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   <span class="keywordtype">char</span> out_msk[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordtype">char</span> * tag=NULL;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordtype">char</span> * tmp_tag=NULL;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   strcpy(out_msk, MASTER_BPMAP_OUT_FILENAME);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="comment">/* cpl_parameterlist_dump(config); */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   check_nomsg(msk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   ck0_nomsg(sinfo_contains_frames_kind(sof,msk_set,<span class="stringliteral">"BP_MAP"</span>));</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   check_nomsg(nmsk = cpl_frameset_get_size(msk_set));</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keywordflow">if</span>(nmsk == 0) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No bad pixel masks to add"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   strcpy(frame_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     check_nomsg(msk_ref_fits=cpl_frameset_new());</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">if</span> (nmsk < 1) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No input frames. Nothing to do."</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nmsk==1) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Only one input frames. Use it as master."</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>       check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>       strcpy(frame_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>        </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       ck0_nomsg(sinfo_contains_frames_kind(msk_set,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                        msk_ref_fits,PRO_BP_MAP_NO));</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses %s for FITS header"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>               PRO_BP_MAP_NO,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     ck0_nomsg(sinfo_contains_frames_kind(msk_set,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                          msk_ref_fits,PRO_BP_MAP_DI));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses %s for FITS header"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                 PRO_BP_MAP_DI,PRO_BP_MAP_NL);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       ck0_nomsg(sinfo_contains_frames_kind(msk_set,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                            msk_ref_fits,PRO_BP_MAP_NL));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       check_nomsg(nmsk_ref_fits = cpl_frameset_get_size(msk_ref_fits));</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       <span class="keywordflow">if</span> (nmsk_ref_fits < 1) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No %s input frames. Uses 1st mask in the list"</span>,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                   PRO_BP_MAP_NL);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         sinfo_free_frameset(&msk_ref_fits);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         check_nomsg(msk_ref_fits=cpl_frameset_duplicate(msk_set));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         check_nomsg(frame = cpl_frameset_get_frame(msk_set,0));</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         check_nomsg(cpl_frameset_erase_frame(msk_set,frame));</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         check_nomsg(tag = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_NL);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         strcpy(frame_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_NL;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       strcpy(frame_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_DI;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         sinfo_msg(<span class="stringliteral">"Uses as reference frame %s"</span>,PRO_BP_MAP_NO);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     check_nomsg(frame = cpl_frameset_get_frame(msk_ref_fits,0));</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     strcpy(frame_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     tag = (<span class="keywordtype">char</span>*) PRO_BP_MAP_NO;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     check_nomsg(nmsk = cpl_frameset_get_size(msk_set));  </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cknull_nomsg(img_sum = (cpl_image**) cpl_calloc ((nmsk+1), </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                              <span class="keyword">sizeof</span>(cpl_image*))) ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cknull_nomsg(img_sum[0]=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">/* here mem leak */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">for</span> (i=0;i<nmsk;i++) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       check_nomsg(frame = cpl_frameset_get_frame(msk_set,i));</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       check_nomsg(strcpy(frame_name,cpl_frame_get_filename(frame)));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       check_nomsg(tmp_tag=(<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <span class="keywordflow">if</span>(strcmp(tmp_tag,tag) == 0 ) {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         check_nomsg(max=cpl_image_get_max(img_set));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">if</span>((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) && max>1 ) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       sinfo_msg(<span class="stringliteral">"corr1"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>           sinfo_free_image(&(img_sum[0]));</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>           check_nomsg(img_sum[0]=cpl_image_duplicate(img_set));</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cknull_nomsg(img_set=cpl_image_load(frame_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         check_nomsg(max=cpl_image_get_max(img_set));</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordflow">if</span>((strcmp(tmp_tag,PRO_BP_MAP_NL) == 0) &&  max>1 ) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       sinfo_msg(<span class="stringliteral">"corr2 name=%s tag=%s"</span>,frame_name,tmp_tag);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       check_nomsg(cpl_image_threshold(img_set,0.5,0.9,1,0));</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cknull_nomsg(img_sum[k+1]=sinfo_new_combine_masks (img_sum[k], img_set));</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     k++;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     sinfo_free_image(&img_set);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     sinfo_free_image(&(img_sum[k-1]));</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     img_tot=cpl_image_duplicate(img_sum[k]);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     sinfo_free_image(&(img_sum[k]));</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     sinfo_free_array_image(&img_sum);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment"></span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">    frame = cpl_frameset_get_frame(msk_set,0);</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">    strcpy(frame_name,cpl_frame_get_filename(frame));</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">    img_sum=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">        </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">    for (i=1;i<nmsk;i++) {</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">    frame = cpl_frameset_get_frame(msk_set,i);</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">    strcpy(frame_name,cpl_frame_get_filename(frame));</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">    img_set=cpl_image_load(frame_name,CPL_TYPE_INT,0,0);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">    cpl_mask_and(img_sum, img_set);</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment"></span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">    </span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     n_bad = sinfo_new_count_bad_pixels(img_tot) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     sinfo_msg (<span class="stringliteral">"number of bad pixels: %d\n"</span>, n_bad) ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC MBP_MAP NBADPIX"</span>,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                   n_bad,<span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span> (nmsk>1) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                  PRO_MASTER_BP_MAP,qclog_tbl,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                  plugin_id,config),</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       <span class="stringliteral">"cannot save ima %s"</span>, out_msk);   </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       ck0(sinfo_pro_save_ima(img_tot,ref_set,sof,out_msk,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                  PRO_MASTER_BP_MAP,qclog_tbl,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                  plugin_id,config),</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       <span class="stringliteral">"cannot save ima %s"</span>, out_msk);   </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     sinfo_free_image(&img_tot);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     sinfo_free_frameset(&msk_ref_fits);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     sinfo_free_frameset(&msk_set);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>  cleanup:</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   sinfo_free_image(&img_tot);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordflow">if</span>(img_sum!=NULL) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">for</span>(i=0;i<nmsk;i++) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <span class="keywordflow">if</span>(img_sum[i] != NULL) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     sinfo_free_image(&(img_sum[i]));</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     img_sum[i]=NULL;         </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     sinfo_free_array_image(&img_sum);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     img_sum=NULL;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   sinfo_free_image(&img_set);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   sinfo_free_frameset(&msk_set);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   sinfo_free_frameset(&msk_ref_fits);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>      <span class="keywordflow">return</span> -1; </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>      <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__add__bp__map_8h_source.html b/html/sinfo__new__add__bp__map_8h_source.html
index c540507..2e36764 100644
--- a/html/sinfo__new__add__bp__map_8h_source.html
+++ b/html/sinfo__new__add__bp__map_8h_source.html
@@ -2,70 +2,101 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_add_bp_map.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_add_bp_map.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_ADD_BP_MAP_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_ADD_BP_MAP_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_add_bp_map.h,v 1.7 2007/09/21 14:13:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  13/10/04  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_add_bp_map.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to search for bad pixels</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_hidden.h></span>  
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="keywordtype">int</span> 
-<a name="l00056"></a>00056 sinfo_new_add_bp_map(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00057"></a>00057                      cpl_parameterlist* config, 
-<a name="l00058"></a>00058                      cpl_frameset* <span class="keyword">set</span>,
-<a name="l00059"></a>00059                      cpl_frameset* ref_set);
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="preprocessor">#endif </span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_add_bp_map.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_ADD_BP_MAP_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_ADD_BP_MAP_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_add_bp_map.h,v 1.7 2007/09/21 14:13:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  13/10/04  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_add_bp_map.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to search for bad pixels</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_hidden.h></span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> sinfo_new_add_bp_map(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                      cpl_parameterlist* config, </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                      cpl_frameset* <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                      cpl_frameset* ref_set);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__bezier_8c_source.html b/html/sinfo__new__bezier_8c_source.html
index 63278fb..28fed55 100644
--- a/html/sinfo__new__bezier_8c_source.html
+++ b/html/sinfo__new__bezier_8c_source.html
@@ -2,1539 +2,1575 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_bezier.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_bezier.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*****************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* M.P.E. - SPIFFI project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00027"></a>00027 <span class="comment">* rabuter 2004-11-04 Fixed error on Find Cosmic when no valid neighboors</span>
-<a name="l00028"></a>00028 <span class="comment">                     where found in the subcube</span>
-<a name="l00029"></a>00029 <span class="comment">* rabuter 10/07/03  created</span>
-<a name="l00030"></a>00030 <span class="comment">*/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/************************************************************************</span>
-<a name="l00033"></a>00033 <span class="comment">*   NAME</span>
-<a name="l00034"></a>00034 <span class="comment">*        sinfo_new_bezier.c -</span>
-<a name="l00035"></a>00035 <span class="comment">*        procedures to correct for bad pixels using bezier splines</span>
-<a name="l00036"></a>00036 <span class="comment">*</span>
-<a name="l00037"></a>00037 <span class="comment">*   SYNOPSIS</span>
-<a name="l00038"></a>00038 <span class="comment">*</span>
-<a name="l00039"></a>00039 <span class="comment">*   DESCRIPTION</span>
-<a name="l00040"></a>00040 <span class="comment">*</span>
-<a name="l00041"></a>00041 <span class="comment">*   FILES</span>
-<a name="l00042"></a>00042 <span class="comment">*</span>
-<a name="l00043"></a>00043 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00044"></a>00044 <span class="comment">*</span>
-<a name="l00045"></a>00045 <span class="comment">*   RETURN VALUES</span>
-<a name="l00046"></a>00046 <span class="comment">*</span>
-<a name="l00047"></a>00047 <span class="comment">*   CAUTIONS</span>
-<a name="l00048"></a>00048 <span class="comment">*</span>
-<a name="l00049"></a>00049 <span class="comment">*   EXAMPLES</span>
-<a name="l00050"></a>00050 <span class="comment">*</span>
-<a name="l00051"></a>00051 <span class="comment">*   SEE ALSO</span>
-<a name="l00052"></a>00052 <span class="comment">*</span>
-<a name="l00053"></a>00053 <span class="comment">*   BUGS</span>
-<a name="l00054"></a>00054 <span class="comment">*</span>
-<a name="l00055"></a>00055 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#endif</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*</span>
-<a name="l00065"></a>00065 <span class="comment"> * System Headers</span>
-<a name="l00066"></a>00066 <span class="comment"> */</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="comment">/*</span>
-<a name="l00069"></a>00069 <span class="comment"> * Local Headers</span>
-<a name="l00070"></a>00070 <span class="comment"> */</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="preprocessor">#include "sinfo_new_bezier.h"</span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00081"></a>00081 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00082"></a>00082 <span class="comment"> *                            Function codes</span>
-<a name="l00083"></a>00083 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 
-<a name="l00093"></a>00093 <span class="keywordtype">int</span> sinfo_im_xy(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y)
-<a name="l00094"></a>00094 {
-<a name="l00095"></a>00095   <span class="keywordtype">int</span> res=0;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097    res=X+Y*cpl_image_get_size_x(im);
-<a name="l00098"></a>00098   <span class="keywordflow">return</span> res;
-<a name="l00099"></a>00099 }
-<a name="l00108"></a>00108 <span class="keywordtype">int</span> sinfo_im_xyz(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z)
-<a name="l00109"></a>00109 {
-<a name="l00110"></a>00110   <span class="keywordtype">int</span> res=0;
-<a name="l00111"></a>00111    res = X+
-<a name="l00112"></a>00112          Y*cpl_image_get_size_x(im)+
-<a name="l00113"></a>00113          Z*cpl_image_get_size_x(im)*
-<a name="l00114"></a>00114            cpl_image_get_size_y(im);
-<a name="l00115"></a>00115   <span class="keywordflow">return</span> res;
-<a name="l00116"></a>00116 }
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00128"></a>00128 <span class="keywordtype">int</span> sinfo_cu_xy(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y)
-<a name="l00129"></a>00129 {
-<a name="l00130"></a>00130   <span class="keywordtype">int</span> res=0;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132    res=X+Y*cpl_image_get_size_x(cpl_imagelist_get(cu,0));
-<a name="l00133"></a>00133   <span class="keywordflow">return</span> res;
-<a name="l00134"></a>00134 }
-<a name="l00145"></a>00145 <span class="keywordtype">int</span> sinfo_cu_xyz(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z)
-<a name="l00146"></a>00146 {
-<a name="l00147"></a>00147   <span class="keywordtype">int</span> res=0;
-<a name="l00148"></a>00148    res = X+
-<a name="l00149"></a>00149          Y*cpl_image_get_size_x(cpl_imagelist_get(cu,0))+
-<a name="l00150"></a>00150          Z*cpl_image_get_size_x(cpl_imagelist_get(cu,0))*
-<a name="l00151"></a>00151            cpl_image_get_size_y(cpl_imagelist_get(cu,0));
-<a name="l00152"></a>00152   <span class="keywordflow">return</span> res;
-<a name="l00153"></a>00153 }
-<a name="l00154"></a>00154 
-<a name="l00169"></a>00169 cpl_image *
-<a name="l00170"></a>00170 sinfo_new_c_bezier_interpolate_image(cpl_image *im,
-<a name="l00171"></a>00171                                      cpl_image *mask,
-<a name="l00172"></a>00172                                      new_Lookup *look,
-<a name="l00173"></a>00173                                            <span class="keywordtype">short</span> rx,
-<a name="l00174"></a>00174                                            <span class="keywordtype">short</span> ry,
-<a name="l00175"></a>00175                                            <span class="keywordtype">short</span> rz,
-<a name="l00176"></a>00176                            <span class="keywordtype">int</span> max_rad ,
-<a name="l00177"></a>00177                                            <span class="keywordtype">float</span>   ** slit_edges )
-<a name="l00178"></a>00178 {
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <span class="keywordtype">int</span> i,j,count;
-<a name="l00181"></a>00181     cpl_imagelist * sc_im,* drs_sc_mask;
-<a name="l00182"></a>00182     cpl_image *auxImage;
-<a name="l00183"></a>00183     cpl_image *tempMask;
-<a name="l00184"></a>00184     <span class="keywordtype">short</span> szx,szy,szz;
-<a name="l00185"></a>00185     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;
-<a name="l00186"></a>00186     <span class="comment">/*float ant,new,dif;*/</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     <span class="keywordtype">int</span> ilx=0;
-<a name="l00189"></a>00189     <span class="keywordtype">int</span> ily=0;
-<a name="l00190"></a>00190     <span class="keywordtype">int</span> mlx=0;
-<a name="l00191"></a>00191     <span class="keywordtype">int</span> mly=0;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00194"></a>00194     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l00195"></a>00195     <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l00196"></a>00196     <span class="keywordtype">float</span>* padata=NULL;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     cpl_image* sc_img=NULL;
-<a name="l00199"></a>00199     cpl_image* drs_img=NULL;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     mlx=cpl_image_get_size_x(mask);
-<a name="l00202"></a>00202     mly=cpl_image_get_size_y(mask);
-<a name="l00203"></a>00203     ilx=cpl_image_get_size_x(im);
-<a name="l00204"></a>00204     ily=cpl_image_get_size_y(im);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     pmdata=cpl_image_get_data_float(mask);
-<a name="l00207"></a>00207     pidata=cpl_image_get_data_float(im);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )
-<a name="l00210"></a>00210     {
-<a name="l00211"></a>00211         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;
-<a name="l00212"></a>00212         <span class="keywordflow">return</span> NULL ;
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     <span class="comment">/* allocate memory for sub cubes*/</span>
-<a name="l00216"></a>00216     szx = (rx * 2 ) + 1;
-<a name="l00217"></a>00217     szy = (ry * 2 ) + 1;
-<a name="l00218"></a>00218     szz = (rz * 2 ) + 1;
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )
-<a name="l00221"></a>00221     {
-<a name="l00222"></a>00222         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;
-<a name="l00223"></a>00223         <span class="keywordflow">return</span> NULL ;
-<a name="l00224"></a>00224     }
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     <span class="keywordflow">for</span>(i=0;i<szz;i++) {
-<a name="l00227"></a>00227       sc_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l00228"></a>00228       cpl_imagelist_set(sc_im,sc_img,i);
-<a name="l00229"></a>00229     }
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )
-<a name="l00232"></a>00232     {
-<a name="l00233"></a>00233         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;
-<a name="l00234"></a>00234         <span class="keywordflow">return</span> NULL ;
-<a name="l00235"></a>00235     }
-<a name="l00236"></a>00236     <span class="keywordflow">for</span>(i=0;i<szz;i++) {
-<a name="l00237"></a>00237       drs_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l00238"></a>00238       cpl_imagelist_set(drs_sc_mask,drs_img,i);
-<a name="l00239"></a>00239     }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="keywordflow">if</span> ( NULL == ( tempMask = cpl_image_new(mlx, mly, CPL_TYPE_FLOAT) ) )
-<a name="l00242"></a>00242     {
-<a name="l00243"></a>00243         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for temporary "</span>
-<a name="l00244"></a>00244                         <span class="stringliteral">"dead pixel mask\n"</span>) ;
-<a name="l00245"></a>00245         <span class="keywordflow">return</span> NULL ;
-<a name="l00246"></a>00246     }
-<a name="l00247"></a>00247     ptdata=cpl_image_get_data_float(tempMask);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     count=0;
-<a name="l00250"></a>00250     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )
-<a name="l00251"></a>00251     {
-<a name="l00252"></a>00252         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )
-<a name="l00253"></a>00253         {
-<a name="l00254"></a>00254         <span class="keywordflow">if</span> ( pmdata[sinfo_im_xy(im,i,j)] ==  cubePT_BADPIXEL )
-<a name="l00255"></a>00255         {
-<a name="l00256"></a>00256           rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;
-<a name="l00257"></a>00257           pidata[sinfo_im_xy(im,i,j)] =
-<a name="l00258"></a>00258                    sinfo_new_c_bezier_correct_pixel( i, j, im, mask, sc_im,
-<a name="l00259"></a>00259                                drs_sc_mask, look, rx_loop, ry_loop, rz_loop );
-<a name="l00260"></a>00260           <span class="comment">/* if not enough neighbors found, increase size of sub</span>
-<a name="l00261"></a>00261 <span class="comment">                     cube until max radius is reached */</span>
-<a name="l00262"></a>00262           <span class="keywordflow">while</span> ( pidata[sinfo_im_xy(im,i,j)] == cubeNONEIGHBOR &&
-<a name="l00263"></a>00263                           rx_loop < rx && ry_loop < ry && rz_loop < rz )
-<a name="l00264"></a>00264             {
-<a name="l00265"></a>00265               rx_loop++ ; ry_loop++; rz_loop++;
-<a name="l00266"></a>00266               <span class="comment">/* sinfo_msg_warning("Increasing radius to %d, in %d %d",</span>
-<a name="l00267"></a>00267 <span class="comment">                                            rx_loop, i, j) ; */</span>
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269               pidata[sinfo_im_xy(im,i,j)] =
-<a name="l00270"></a>00270                         sinfo_new_c_bezier_correct_pixel( i, j, im, mask, sc_im,
-<a name="l00271"></a>00271                                 drs_sc_mask, look, rx_loop, ry_loop, rz_loop );
-<a name="l00272"></a>00272             }
-<a name="l00273"></a>00273           <span class="comment">/* If still not enough neighbors, make result NaN = ZERO</span>
-<a name="l00274"></a>00274 <span class="comment">                     in spred convention */</span>
-<a name="l00275"></a>00275           <span class="keywordflow">if</span> ( pidata[sinfo_im_xy(im,i,j)] == cubeNONEIGHBOR )
-<a name="l00276"></a>00276             {
-<a name="l00277"></a>00277               pidata[sinfo_im_xy(im,i,j)] = ZERO ;
-<a name="l00278"></a>00278             }
-<a name="l00279"></a>00279         count++;
-<a name="l00280"></a>00280         }
-<a name="l00281"></a>00281         <span class="keywordflow">if</span> ( pidata[sinfo_im_xy(im,i,j)] == ZERO )
-<a name="l00282"></a>00282           {
-<a name="l00283"></a>00283         ptdata[sinfo_im_xy(tempMask,i,j)] = 0 ;
-<a name="l00284"></a>00284           }
-<a name="l00285"></a>00285          <span class="keywordflow">else</span>
-<a name="l00286"></a>00286           {
-<a name="l00287"></a>00287         ptdata[sinfo_im_xy(tempMask,i,j)] = 1 ;
-<a name="l00288"></a>00288           }
-<a name="l00289"></a>00289         }
-<a name="l00290"></a>00290     }
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     sinfo_msg(<span class="stringliteral">"Replacing NaN\n"</span>);
-<a name="l00294"></a>00294     auxImage=sinfo_interpol_source_image( im, tempMask, max_rad, slit_edges );
-<a name="l00295"></a>00295     padata=cpl_image_get_data_float(auxImage);
-<a name="l00296"></a>00296     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )
-<a name="l00297"></a>00297     {
-<a name="l00298"></a>00298         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )
-<a name="l00299"></a>00299         {
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301         <span class="keywordflow">if</span> ( isnan(pidata[sinfo_im_xy(im,i,j)])) <span class="comment">/*<= -2e10ZERO )*/</span>
-<a name="l00302"></a>00302         {
-<a name="l00303"></a>00303           <span class="comment">/* sinfo_msg_warning("Replacing NaN -> %d %d %f\n",</span>
-<a name="l00304"></a>00304 <span class="comment">                                       i,j, padata[sinfo_im_xy(im,i,j)] ); */</span>
-<a name="l00305"></a>00305         pidata[sinfo_im_xy(im,i,j)] = padata[sinfo_im_xy(im,i,j)];
-<a name="l00306"></a>00306         }
-<a name="l00307"></a>00307         }
-<a name="l00308"></a>00308     }
-<a name="l00309"></a>00309     cpl_image_delete(auxImage);
-<a name="l00310"></a>00310     cpl_imagelist_delete(sc_im);
-<a name="l00311"></a>00311     cpl_imagelist_delete(drs_sc_mask);
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313     sinfo_msg(<span class="stringliteral">"bad pixels count: %d\n"</span>,count);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316     <span class="keywordflow">return</span> im;
-<a name="l00317"></a>00317 }
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 cpl_image *
-<a name="l00320"></a>00320 sinfo_new_c_bezier_find_bad( cpl_image *im,
-<a name="l00321"></a>00321                                    cpl_image *mask,
-<a name="l00322"></a>00322                                    <span class="comment">/* Lookup *look,*/</span>
-<a name="l00323"></a>00323                                    <span class="keywordtype">short</span> rx,
-<a name="l00324"></a>00324                                    <span class="keywordtype">short</span> ry,
-<a name="l00325"></a>00325                                    <span class="keywordtype">short</span> rz,
-<a name="l00326"></a>00326                        <span class="keywordtype">short</span> lowerI,
-<a name="l00327"></a>00327                                    <span class="keywordtype">short</span> highI,
-<a name="l00328"></a>00328                                    <span class="keywordtype">short</span> lowerJ,
-<a name="l00329"></a>00329                                    <span class="keywordtype">short</span> highJ,
-<a name="l00330"></a>00330                                    <span class="keywordtype">float</span> factor )
-<a name="l00331"></a>00331 {
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333     <span class="keywordtype">int</span> i,j,count;
-<a name="l00334"></a>00334     cpl_imagelist * sc_im,* drs_sc_mask;
-<a name="l00335"></a>00335     <span class="keywordtype">short</span> szx,szy,szz;
-<a name="l00336"></a>00336     <span class="keywordtype">float</span> <span class="comment">/*ant,*/</span>newValue,old<span class="comment">/*,dif,porcentage,distance*/</span>;
-<a name="l00337"></a>00337     <span class="keywordtype">double</span> med, stdev;
-<a name="l00338"></a>00338     <span class="comment">/*cpl_image *out;*/</span>
-<a name="l00339"></a>00339     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     <span class="keywordtype">int</span> ilx=0;
-<a name="l00342"></a>00342     <span class="keywordtype">int</span> ily=0;
-<a name="l00343"></a>00343     <span class="keywordtype">int</span> mlx=0;
-<a name="l00344"></a>00344     <span class="keywordtype">int</span> mly=0;
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00347"></a>00347     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     cpl_image* sc_img=NULL;
-<a name="l00350"></a>00350     cpl_image* drs_img=NULL;
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353     mlx=cpl_image_get_size_x(mask);
-<a name="l00354"></a>00354     mly=cpl_image_get_size_y(mask);
-<a name="l00355"></a>00355     ilx=cpl_image_get_size_x(im);
-<a name="l00356"></a>00356     ily=cpl_image_get_size_y(im);
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358     pmdata=cpl_image_get_data_float(mask);
-<a name="l00359"></a>00359     pidata=cpl_image_get_data_float(im);
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )
-<a name="l00363"></a>00363     {
-<a name="l00364"></a>00364         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;
-<a name="l00365"></a>00365         <span class="keywordflow">return</span> NULL ;
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368     <span class="comment">/* allocate memory for sub cubes*/</span>
-<a name="l00369"></a>00369     szx = (rx * 2 ) + 1;
-<a name="l00370"></a>00370     szy = (ry * 2 ) + 1;
-<a name="l00371"></a>00371     szz = (rz * 2 ) + 1;
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )
-<a name="l00374"></a>00374     {
-<a name="l00375"></a>00375         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;
-<a name="l00376"></a>00376         <span class="keywordflow">return</span> NULL ;
-<a name="l00377"></a>00377     }
-<a name="l00378"></a>00378     <span class="keywordflow">for</span>(i=0;i<szz;i++) {
-<a name="l00379"></a>00379       sc_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l00380"></a>00380       cpl_imagelist_set(sc_im,sc_img,i);
-<a name="l00381"></a>00381     }
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )
-<a name="l00384"></a>00384     {
-<a name="l00385"></a>00385         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;
-<a name="l00386"></a>00386         <span class="keywordflow">return</span> NULL ;
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388     <span class="keywordflow">for</span>(i=0;i<szz;i++) {
-<a name="l00389"></a>00389       drs_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l00390"></a>00390       cpl_imagelist_set(drs_sc_mask,drs_img,i);
-<a name="l00391"></a>00391     }
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393     count=0;
-<a name="l00394"></a>00394     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )
-<a name="l00395"></a>00395     {
-<a name="l00396"></a>00396         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )
-<a name="l00397"></a>00397         {
-<a name="l00398"></a>00398         <span class="keywordflow">if</span> ( i >= lowerI && i < highI && j >= lowerJ && j < highJ )
-<a name="l00399"></a>00399         {
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401         rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;
-<a name="l00402"></a>00402         newValue = sinfo_new_c_bezier_correct_pixel_2D( i, j, im,
-<a name="l00403"></a>00403                                                                 mask,
-<a name="l00404"></a>00404                                                                 sc_im,
-<a name="l00405"></a>00405                                                                 drs_sc_mask,
-<a name="l00406"></a>00406                                                                 <span class="comment">/* look,*/</span>
-<a name="l00407"></a>00407                                                                 rx_loop,
-<a name="l00408"></a>00408                                                                 ry_loop,
-<a name="l00409"></a>00409                                                                 rz_loop,
-<a name="l00410"></a>00410                                                                 &med,
-<a name="l00411"></a>00411                                                                 &stdev,
-<a name="l00412"></a>00412                                                                 factor );
-<a name="l00413"></a>00413             <span class="comment">/* if NaN returned, increase size of sub cube</span>
-<a name="l00414"></a>00414 <span class="comment">                   until max radius is reached */</span>
-<a name="l00415"></a>00415         <span class="keywordflow">while</span> ( newValue == ZERO && rx_loop < rx &&
-<a name="l00416"></a>00416                         ry_loop < ry && rz_loop < rz )
-<a name="l00417"></a>00417             {
-<a name="l00418"></a>00418               rx_loop++ ; ry_loop++; rz_loop++;
-<a name="l00419"></a>00419               <span class="comment">/*sinfo_msg_warning("Increasing radius to %d,</span>
-<a name="l00420"></a>00420 <span class="comment">                        in %d %d", rx_loop, i, j) ;  */</span>
-<a name="l00421"></a>00421                    newValue = sinfo_new_c_bezier_correct_pixel_2D( i, j, im,
-<a name="l00422"></a>00422                                                                       mask,
-<a name="l00423"></a>00423                                                                       sc_im,
-<a name="l00424"></a>00424                                                                     drs_sc_mask,
-<a name="l00425"></a>00425                                                                     <span class="comment">/*, look*/</span>
-<a name="l00426"></a>00426                                                                     rx_loop,
-<a name="l00427"></a>00427                                                                     ry_loop,
-<a name="l00428"></a>00428                                                                     rz_loop,
-<a name="l00429"></a>00429                                                                     &med,
-<a name="l00430"></a>00430                                                                     &stdev,
-<a name="l00431"></a>00431                                                                     factor );
-<a name="l00432"></a>00432             }
-<a name="l00433"></a>00433         <span class="keywordflow">if</span> ( isnan(newValue)) <span class="comment">/*<= -3.e10 ZERO )*/</span>
-<a name="l00434"></a>00434             <span class="keywordflow">continue</span>;
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436         old = pidata[sinfo_im_xy(im,i,j)];
-<a name="l00437"></a>00437         <span class="keywordflow">if</span> ( newValue != old )
-<a name="l00438"></a>00438             {
-<a name="l00439"></a>00439             pidata[sinfo_im_xy(im,i,j)] = newValue;
-<a name="l00440"></a>00440             <span class="comment">/*sinfo_msg_warning("[%d,%d]=%f -> %f, med= %f,</span>
-<a name="l00441"></a>00441 <span class="comment">                      stdev=%f\n",i,j, old, newValue, med, stdev );*/</span>
-<a name="l00442"></a>00442             count++;
-<a name="l00443"></a>00443             }
-<a name="l00444"></a>00444         }
-<a name="l00445"></a>00445         }
-<a name="l00446"></a>00446     }
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     sinfo_msg(<span class="stringliteral">"bad pixels count: %d\n"</span>,count);
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452     cpl_imagelist_delete(sc_im);
-<a name="l00453"></a>00453     cpl_imagelist_delete(drs_sc_mask);
-<a name="l00454"></a>00454     <span class="keywordflow">return</span> im;
-<a name="l00455"></a>00455 }
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 <span class="keywordtype">float</span>
-<a name="l00458"></a>00458 sinfo_new_c_bezier_correct_pixel(<span class="keywordtype">int</span> ipos,
-<a name="l00459"></a>00459                                  <span class="keywordtype">int</span> jpos,
-<a name="l00460"></a>00460                                  cpl_image * im,
-<a name="l00461"></a>00461                                  cpl_image * mask,
-<a name="l00462"></a>00462                      cpl_imagelist * sc_im,
-<a name="l00463"></a>00463                                  cpl_imagelist * drs_sc_mask,
-<a name="l00464"></a>00464                                  new_Lookup * look,
-<a name="l00465"></a>00465                                  <span class="keywordtype">short</span> rx,
-<a name="l00466"></a>00466                                  <span class="keywordtype">short</span> ry,
-<a name="l00467"></a>00467                                  <span class="keywordtype">short</span> rz )
-<a name="l00468"></a>00468 {
-<a name="l00469"></a>00469     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;
-<a name="l00470"></a>00470     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;
-<a name="l00471"></a>00471     <span class="comment">/*float indexIf,indexJf,sp;*/</span>
-<a name="l00472"></a>00472     cpl_image * X, * Y, * Z, * hX;
-<a name="l00473"></a>00473     cpl_imagelist  * id, * jd;
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475     <span class="keywordtype">int</span> idlx=0;
-<a name="l00476"></a>00476     <span class="keywordtype">int</span> idly=0;
-<a name="l00477"></a>00477     <span class="keywordtype">int</span> idnp=0;
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479     <span class="keywordtype">int</span> drslx=0;
-<a name="l00480"></a>00480     <span class="keywordtype">int</span> drsly=0;
-<a name="l00481"></a>00481     <span class="keywordtype">int</span> drsnp=0;
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483 
-<a name="l00484"></a>00484     <span class="keywordtype">float</span>* pXdata=NULL;
-<a name="l00485"></a>00485     <span class="keywordtype">float</span>* pYdata=NULL;
-<a name="l00486"></a>00486     <span class="keywordtype">float</span>* pZdata=NULL;
-<a name="l00487"></a>00487     <span class="keywordtype">float</span>* phXdata=NULL;
-<a name="l00488"></a>00488     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00489"></a>00489     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l00490"></a>00490     <span class="keywordtype">float</span>* piddata=NULL;
-<a name="l00491"></a>00491     <span class="keywordtype">float</span>* pjddata=NULL;
-<a name="l00492"></a>00492     <span class="keywordtype">float</span>* pscdata=NULL;
-<a name="l00493"></a>00493     <span class="keywordtype">float</span>* pdrsdata=NULL;
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     cpl_image* id_img=NULL;
-<a name="l00496"></a>00496     cpl_image* jd_img=NULL;
-<a name="l00497"></a>00497     cpl_image* sc_img=NULL;
-<a name="l00498"></a>00498     cpl_image* drs_img=NULL;
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     X  = look -> X;
-<a name="l00501"></a>00501     Y  = look -> Y;
-<a name="l00502"></a>00502     Z  = look -> Z;
-<a name="l00503"></a>00503     hX = look -> hX;
-<a name="l00504"></a>00504     <span class="keywordtype">id</span> = look -> id;
-<a name="l00505"></a>00505     jd = look -> jd;
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507     <span class="comment">/*</span>
-<a name="l00508"></a>00508 <span class="comment">      phXdata=cpl_image_get_data_float(hX);</span>
-<a name="l00509"></a>00509 <span class="comment">      if ( phXdata[sinfo_im_xy( hX, ipos, jpos)] > 1 )</span>
-<a name="l00510"></a>00510 <span class="comment">    {</span>
-<a name="l00511"></a>00511 <span class="comment">    sinfo_msg_error(" double hit in position [%d,%d]=%f, "</span>
-<a name="l00512"></a>00512 <span class="comment">                        "can not correct\n",</span>
-<a name="l00513"></a>00513 <span class="comment">        ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;</span>
-<a name="l00514"></a>00514 <span class="comment">    return ( -2e10 );</span>
-<a name="l00515"></a>00515 <span class="comment">    }*/</span>
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517     pidata=cpl_image_get_data_float(im);
-<a name="l00518"></a>00518     pmdata=cpl_image_get_data_float(mask);
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520     phXdata=cpl_image_get_data_float(hX);
-<a name="l00521"></a>00521     <span class="keywordflow">if</span> ( phXdata[sinfo_im_xy( hX, ipos, jpos)] < 1 )
-<a name="l00522"></a>00522     {
-<a name="l00523"></a>00523     <span class="comment">/*sinfo_msg_error("no lookup in position [%d,%d]=%f, can not correct",</span>
-<a name="l00524"></a>00524 <span class="comment">      ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;*/</span>
-<a name="l00525"></a>00525     <span class="keywordflow">return</span> ( ZERO );
-<a name="l00526"></a>00526     }
-<a name="l00527"></a>00527     pXdata=cpl_image_get_data_float(X);
-<a name="l00528"></a>00528     pYdata=cpl_image_get_data_float(Y);
-<a name="l00529"></a>00529     pZdata=cpl_image_get_data_float(Z);
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532     ic = pXdata[sinfo_im_xy( X, ipos, jpos)];
-<a name="l00533"></a>00533     jc = pYdata[sinfo_im_xy( Y, ipos, jpos)];
-<a name="l00534"></a>00534     kc = pZdata[sinfo_im_xy( Z, ipos, jpos)];
-<a name="l00535"></a>00535     <span class="comment">/*if ( !(ipos % 16 )  )*/</span>
-<a name="l00536"></a>00536 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00537"></a>00537 <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span>
-<a name="l00538"></a>00538                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d\n"</span>,
-<a name="l00539"></a>00539                     ipos,jpos, ic, jc, kc );
-<a name="l00540"></a>00540 <span class="preprocessor">#endif</span>
-<a name="l00541"></a>00541 <span class="preprocessor"></span>    <span class="comment">/*limit to start not before the beginning of the cube*/</span>
-<a name="l00542"></a>00542     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;
-<a name="l00543"></a>00543     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;
-<a name="l00544"></a>00544     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00547"></a>00547 <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d\n"</span>, ii, jj, kk );
-<a name="l00548"></a>00548 <span class="preprocessor">#endif</span>
-<a name="l00549"></a>00549 <span class="preprocessor"></span>
-<a name="l00550"></a>00550     <span class="comment">/*limit to end not outside of the cube */</span>
-<a name="l00551"></a>00551     szx = (rx * 2 ) + 1;
-<a name="l00552"></a>00552     szy = (ry * 2 ) + 1;
-<a name="l00553"></a>00553     szz = (rz * 2 ) + 1;
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555     idlx=cpl_image_get_size_x(cpl_imagelist_get(<span class="keywordtype">id</span>,0));
-<a name="l00556"></a>00556     idly=cpl_image_get_size_y(cpl_imagelist_get(<span class="keywordtype">id</span>,0));
-<a name="l00557"></a>00557     idnp=cpl_imagelist_get_size(<span class="keywordtype">id</span>);
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559     lx = idlx;
-<a name="l00560"></a>00560     ly = idly;
-<a name="l00561"></a>00561     lz = idnp;
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563     <span class="keywordflow">if</span> ( ( ic + rx ) >= idlx )
-<a name="l00564"></a>00564     szx = szx - ( (ic+rx)-(lx-1) );
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566     <span class="keywordflow">if</span> ( ( jc + ry ) >= idly )
-<a name="l00567"></a>00567     szy = szy - ( (jc+ry)-(ly-1) );
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569     <span class="keywordflow">if</span> ( ( kc + rz ) >= idnp )
-<a name="l00570"></a>00570     szz = szz - ( (kc+rz)-(lz-1) );
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572     drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l00573"></a>00573     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l00574"></a>00574     drsnp=cpl_imagelist_get_size(drs_sc_mask);
-<a name="l00575"></a>00575 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00576"></a>00576 <span class="preprocessor"></span>
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Size of subcube: szx=%d,szy=%d,szz=%d\n"</span>, szx, szy, szz );
-<a name="l00579"></a>00579     <span class="comment">/*fill whole mask with not available*/</span>
-<a name="l00580"></a>00580     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Fill Mask subcube of size: %d,%d,%d, with NOINFO\n"</span>,
-<a name="l00581"></a>00581                      drslx, drsly,  drsnp);
-<a name="l00582"></a>00582 <span class="preprocessor">#endif</span>
-<a name="l00583"></a>00583 <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {
-<a name="l00584"></a>00584       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {
-<a name="l00585"></a>00585     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {
-<a name="l00586"></a>00586       drs_img=cpl_imagelist_get(drs_sc_mask,k);
-<a name="l00587"></a>00587           pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00588"></a>00588       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590       }
-<a name="l00591"></a>00591     }
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593      <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)
-<a name="l00594"></a>00594      {
-<a name="l00595"></a>00595      <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)
-<a name="l00596"></a>00596          {
-<a name="l00597"></a>00597          <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)
-<a name="l00598"></a>00598          {
-<a name="l00599"></a>00599 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00600"></a>00600 <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,
-<a name="l00601"></a>00601                                   i,j,k,is,js,ks);
-<a name="l00602"></a>00602 <span class="preprocessor">#endif</span>
-<a name="l00603"></a>00603 <span class="preprocessor"></span>                 id_img=cpl_imagelist_get(<span class="keywordtype">id</span>,k);
-<a name="l00604"></a>00604                  jd_img=cpl_imagelist_get(jd,k);
-<a name="l00605"></a>00605                  piddata=cpl_image_get_data_float(id_img);
-<a name="l00606"></a>00606                  pjddata=cpl_image_get_data_float(jd_img);
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608                  drs_img=cpl_imagelist_get(drs_sc_mask,ks);
-<a name="l00609"></a>00609                  pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00610"></a>00610                  sc_img=cpl_imagelist_get(sc_im,ks);
-<a name="l00611"></a>00611                  pscdata=cpl_image_get_data_float(sc_img);
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613          indexI = sinfo_new_nint( piddata[sinfo_cu_xy(<span class="keywordtype">id</span>,i,j)] );
-<a name="l00614"></a>00614          indexJ = sinfo_new_nint( pjddata[sinfo_cu_xy(jd,i,j)] );
-<a name="l00615"></a>00615          <span class="keywordflow">if</span> ( indexJ <= -1 || indexJ>=2048 || indexI == -1 )
-<a name="l00616"></a>00616            {
-<a name="l00617"></a>00617              pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] = cubePT_NOINFO;
-<a name="l00618"></a>00618              <span class="keywordflow">continue</span>;
-<a name="l00619"></a>00619            }
-<a name="l00620"></a>00620          pscdata[sinfo_cu_xy(sc_im,is,js)]  =
-<a name="l00621"></a>00621                          pidata[sinfo_im_xy(im,indexI,indexJ)];
-<a name="l00622"></a>00622          pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]  =
-<a name="l00623"></a>00623                          pmdata[sinfo_im_xy(mask,indexI,indexJ)];
-<a name="l00624"></a>00624 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00625"></a>00625 <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ;"</span>
-<a name="l00626"></a>00626                                 <span class="stringliteral">"  Sub is=%d, js=%d, ks=%d  ;"</span>
-<a name="l00627"></a>00627                                 <span class="stringliteral">"  Plane I=%d,J=%d ; mask %f ; im %f"</span>,
-<a name="l00628"></a>00628                         i, j, k, is, js, ks, indexI, indexJ,
-<a name="l00629"></a>00629                                 mask -> data[sinfo_im_xy(mask,indexI,indexJ)],
-<a name="l00630"></a>00630                                 im   -> data[sinfo_im_xy(im,indexI,indexJ)]);
-<a name="l00631"></a>00631 <span class="preprocessor">#endif</span>
-<a name="l00632"></a>00632 <span class="preprocessor"></span>
-<a name="l00633"></a>00633          }
-<a name="l00634"></a>00634          }
-<a name="l00635"></a>00635      }
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638     <span class="comment">/*signal to correct this pixel*/</span>
-<a name="l00639"></a>00639      drs_img=cpl_imagelist_get(drs_sc_mask,rz);
-<a name="l00640"></a>00640      pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00641"></a>00641     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;
-<a name="l00642"></a>00642     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );
-<a name="l00643"></a>00643 }
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645 <span class="keywordtype">float</span>
-<a name="l00646"></a>00646 sinfo_new_c_bezier_correct_pixel_2D(<span class="keywordtype">int</span> ipos,
-<a name="l00647"></a>00647                                     <span class="keywordtype">int</span> jpos,
-<a name="l00648"></a>00648                                     cpl_image * im,
-<a name="l00649"></a>00649                                     cpl_image * mask,
-<a name="l00650"></a>00650                         cpl_imagelist * sc_im,
-<a name="l00651"></a>00651                                     cpl_imagelist * drs_sc_mask,
-<a name="l00652"></a>00652                                     <span class="comment">/* Lookup * look,*/</span>
-<a name="l00653"></a>00653                                     <span class="keywordtype">short</span> rx, <span class="keywordtype">short</span> ry,
-<a name="l00654"></a>00654                                     <span class="keywordtype">short</span> rz ,
-<a name="l00655"></a>00655                                     <span class="keywordtype">double</span> *med ,
-<a name="l00656"></a>00656                         <span class="keywordtype">double</span> *stdev,
-<a name="l00657"></a>00657                                     <span class="keywordtype">float</span> factor )
-<a name="l00658"></a>00658 {
-<a name="l00659"></a>00659     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;
-<a name="l00660"></a>00660     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;
-<a name="l00661"></a>00661     <span class="keywordtype">double</span> sum,aux;
-<a name="l00662"></a>00662     <span class="keywordtype">int</span> counter;
-<a name="l00663"></a>00663     <span class="keywordtype">float</span> sumarr[100];
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666     <span class="keywordtype">int</span> ilx=0;
-<a name="l00667"></a>00667     <span class="keywordtype">int</span> ily=0;
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669     <span class="keywordtype">int</span> drslx=0;
-<a name="l00670"></a>00670     <span class="keywordtype">int</span> drsly=0;
-<a name="l00671"></a>00671     <span class="keywordtype">int</span> drsnp=0;
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674     <span class="keywordtype">float</span>* pidata=0;
-<a name="l00675"></a>00675     <span class="keywordtype">float</span>* pmdata=0;
-<a name="l00676"></a>00676     <span class="keywordtype">float</span>* pscdata=0;
-<a name="l00677"></a>00677     <span class="keywordtype">float</span>* pdrsdata=0;
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679     cpl_image* drs_img=NULL;
-<a name="l00680"></a>00680     cpl_image* sc_img=NULL;
-<a name="l00681"></a>00681 
-<a name="l00682"></a>00682     jc = 0;
-<a name="l00683"></a>00683     ic = ipos;
-<a name="l00684"></a>00684     kc = jpos;
-<a name="l00685"></a>00685     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span>
-<a name="l00686"></a>00686                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d"</span>, ipos,jpos, ic, jc, kc );
-<a name="l00687"></a>00687     <span class="comment">/*limit to start not before the beginning of the cube*/</span>
-<a name="l00688"></a>00688     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;
-<a name="l00689"></a>00689     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;
-<a name="l00690"></a>00690     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;
-<a name="l00691"></a>00691 
-<a name="l00692"></a>00692     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d"</span>, ii, jj, kk );
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694     ilx=cpl_image_get_size_x(im);
-<a name="l00695"></a>00695     ily=cpl_image_get_size_y(im);
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697     <span class="comment">/*limit to end not outside of the cube */</span>
-<a name="l00698"></a>00698     szx = (rx * 2 ) + 1;
-<a name="l00699"></a>00699     szy = (ry * 2 ) + 1;
-<a name="l00700"></a>00700     szz = (rz * 2 ) + 1;
-<a name="l00701"></a>00701     lx = ilx;
-<a name="l00702"></a>00702     ly = ily;
-<a name="l00703"></a>00703     lz = ily;
-<a name="l00704"></a>00704     <span class="keywordflow">if</span> ( ( ic + rx ) >= ilx )
-<a name="l00705"></a>00705     szx = szx - ( (ic+rx)-(lx-1) );
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707     <span class="keywordflow">if</span> ( ( jc + ry ) >= ily )
-<a name="l00708"></a>00708     szy = szy - ( (jc+ry)-(ly-1) );
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710     <span class="keywordflow">if</span> ( ( kc + rz ) >= ily )
-<a name="l00711"></a>00711     szz = szz - ( (kc+rz)-(lz-1) );
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00714"></a>00714 <span class="preprocessor"></span>    drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l00715"></a>00715     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l00716"></a>00716     drsnp=cpl_imagelist_get_size(drs_sc_mask);
-<a name="l00717"></a>00717     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Size of subcube : szx=%d,szy=%d,szz=%d"</span>, szx, szy, szz );
-<a name="l00718"></a>00718     <span class="comment">/*fill whole mask with not available*/</span>
-<a name="l00719"></a>00719     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Fill Mask subcube of size:%d,%d,%d, with NOINFO"</span>,
-<a name="l00720"></a>00720                     drslx, drsly,  drsnp);
-<a name="l00721"></a>00721 <span class="preprocessor">#endif</span>
-<a name="l00722"></a>00722 <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {
-<a name="l00723"></a>00723       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {
-<a name="l00724"></a>00724     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {
-<a name="l00725"></a>00725       drs_img=cpl_imagelist_get(drs_sc_mask,k);
-<a name="l00726"></a>00726       pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00727"></a>00727       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;
-<a name="l00728"></a>00728     }
-<a name="l00729"></a>00729       }
-<a name="l00730"></a>00730     }
-<a name="l00731"></a>00731     counter = 0;
-<a name="l00732"></a>00732     sum=0;
-<a name="l00733"></a>00733     memset(sumarr,0x00,<span class="keyword">sizeof</span>(sumarr));
-<a name="l00734"></a>00734     pidata=cpl_image_get_data(im);
-<a name="l00735"></a>00735     pmdata=cpl_image_get_data(mask);
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737      <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)
-<a name="l00738"></a>00738      {
-<a name="l00739"></a>00739      <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)
-<a name="l00740"></a>00740          {
-<a name="l00741"></a>00741          <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)
-<a name="l00742"></a>00742          {
-<a name="l00743"></a>00743 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00744"></a>00744 <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,
-<a name="l00745"></a>00745                                   i,j,k,is,js,ks);
-<a name="l00746"></a>00746 <span class="preprocessor">#endif</span>
-<a name="l00747"></a>00747 <span class="preprocessor"></span>         indexI = i;
-<a name="l00748"></a>00748          indexJ = k;
-<a name="l00749"></a>00749          <span class="keywordflow">if</span> ( isnan(pidata[sinfo_im_xy(mask,indexI,indexJ)]) )
-<a name="l00750"></a>00750            pmdata[sinfo_im_xy(mask,indexI,indexJ)] = 0;
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752          <span class="keywordflow">if</span> ( pmdata[sinfo_im_xy(mask,indexI,indexJ)] == 1 &&
-<a name="l00753"></a>00753                             ( indexI != ipos || indexJ != jpos) )
-<a name="l00754"></a>00754            {
-<a name="l00755"></a>00755              <span class="comment">/*sumarr[counter] = pidata[sinfo_im_xy(im,indexI,indexJ)];*/</span>
-<a name="l00756"></a>00756              sum = sum + pidata[sinfo_im_xy(im,indexI,indexJ)];
-<a name="l00757"></a>00757              counter++;
-<a name="l00758"></a>00758            }
-<a name="l00759"></a>00759          sc_img=cpl_imagelist_get(sc_im,ks);
-<a name="l00760"></a>00760          pscdata[sinfo_cu_xy(sc_im,is,js)]=
-<a name="l00761"></a>00761                         pidata[sinfo_im_xy(im,indexI,indexJ)];
-<a name="l00762"></a>00762                  drs_img=cpl_imagelist_get(drs_sc_mask,ks);
-<a name="l00763"></a>00763                  pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00764"></a>00764          pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]=
-<a name="l00765"></a>00765                          pmdata[sinfo_im_xy(mask,indexI,indexJ)];
-<a name="l00766"></a>00766 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00767"></a>00767 <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ;  "</span>
-<a name="l00768"></a>00768                                  <span class="stringliteral">"Sub is=%d, js=%d, ks=%d  ; "</span>
-<a name="l00769"></a>00769                                 <span class="stringliteral">" Plane I=%d,J=%d ; mask %f ; im %f"</span>,
-<a name="l00770"></a>00770                         i, j, k, is, js, ks, indexI, indexJ,
-<a name="l00771"></a>00771                                 pmdata[sinfo_im_xy(mask,indexI,indexJ)],
-<a name="l00772"></a>00772                                 pidata[sinfo_im_xy(im,indexI,indexJ)]);
-<a name="l00773"></a>00773 <span class="preprocessor">#endif</span>
-<a name="l00774"></a>00774 <span class="preprocessor"></span>
-<a name="l00775"></a>00775          }
-<a name="l00776"></a>00776          }
-<a name="l00777"></a>00777      }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780     <span class="comment">/*signal to correct this pixel*/</span>
-<a name="l00781"></a>00781     drs_img=cpl_imagelist_get(drs_sc_mask,rz);
-<a name="l00782"></a>00782     pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00783"></a>00783     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;
-<a name="l00784"></a>00784     <span class="keywordflow">if</span> ( counter )
-<a name="l00786"></a>00786     *med = sum/counter;
-<a name="l00787"></a>00787     <span class="keywordflow">else</span>
-<a name="l00788"></a>00788     <span class="keywordflow">return</span>(pidata[sinfo_im_xy(im,ipos,jpos)]);
-<a name="l00789"></a>00789 
-<a name="l00790"></a>00790     <span class="comment">/*sinfo_msg_debug("%f %f %d\n",</span>
-<a name="l00791"></a>00791 <span class="comment">                      sum ,pidata[sinfo_im_xy(im,ipos,jpos)], counter);*/</span>
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793 
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795     sum =0;
-<a name="l00796"></a>00796     counter=0;
-<a name="l00797"></a>00797     <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)
-<a name="l00798"></a>00798       {
-<a name="l00799"></a>00799     <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)
-<a name="l00800"></a>00800       {
-<a name="l00801"></a>00801         <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)
-<a name="l00802"></a>00802           {
-<a name="l00803"></a>00803         drs_img=cpl_imagelist_get(drs_sc_mask,ks);
-<a name="l00804"></a>00804         pdrsdata=cpl_image_get_data_float(drs_img);
-<a name="l00805"></a>00805         indexI = i;
-<a name="l00806"></a>00806         indexJ = k;
-<a name="l00807"></a>00807         <span class="keywordflow">if</span> ( pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] == 1 &&
-<a name="l00808"></a>00808                          ( indexI != ipos || indexJ != jpos) )
-<a name="l00809"></a>00809           {
-<a name="l00810"></a>00810               sc_img=cpl_imagelist_get(sc_im,ks);
-<a name="l00811"></a>00811               pscdata=cpl_image_get_data_float(sc_img);
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813             sum=sum+((pscdata[sinfo_cu_xy(drs_sc_mask,is,js)]- *med) *
-<a name="l00814"></a>00814              (pscdata[sinfo_cu_xy(drs_sc_mask,is,js)] - *med ) );
-<a name="l00815"></a>00815             counter++;
-<a name="l00816"></a>00816           }
-<a name="l00817"></a>00817           }
-<a name="l00818"></a>00818       }
-<a name="l00819"></a>00819       }
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     aux = sum;
-<a name="l00822"></a>00822     sum   = sum / (counter - 1);
-<a name="l00823"></a>00823     *stdev = sqrt( sum );
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825     <span class="keywordflow">if</span> ( (fabs( pidata[sinfo_im_xy(im,ipos,jpos)] - *med ) >
-<a name="l00826"></a>00826          factor * *stdev) ||
-<a name="l00827"></a>00827      isnan(pidata[sinfo_im_xy(im,ipos,jpos)]) )
-<a name="l00828"></a>00828     {
-<a name="l00829"></a>00829     <span class="comment">/*sinfo_msg_debug("[%d,%d]: distance to mean = %f,"</span>
-<a name="l00830"></a>00830 <span class="comment">                          " thres =%f sum=%f, stdev=%f, counter=%d, aux= %f",</span>
-<a name="l00831"></a>00831 <span class="comment">                ipos,jpos, fabs( pidata[sinfo_im_xy(im,ipos,jpos)] - *med),</span>
-<a name="l00832"></a>00832 <span class="comment">                    factor * *stdev, sum,*stdev, counter,aux );</span>
-<a name="l00833"></a>00833 <span class="comment">    pmdata[sinfo_im_xy(mask,ipos,jpos)] = 0;*/</span>
-<a name="l00834"></a>00834     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );
-<a name="l00835"></a>00835     }
-<a name="l00836"></a>00836     <span class="keywordflow">return</span>(pidata[sinfo_im_xy(im,ipos,jpos)]);
-<a name="l00837"></a>00837 }
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841 <span class="keywordtype">float</span>
-<a name="l00842"></a>00842 sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
-<a name="l00843"></a>00843 {
-<a name="l00844"></a>00844     <span class="keywordtype">short</span> pos;
-<a name="l00845"></a>00845     <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> i,j,k;
-<a name="l00846"></a>00846     new_XYZW  indata[1000];
-<a name="l00847"></a>00847     new_XYZW  res;
-<a name="l00848"></a>00848     new_XYZW  selected;
-<a name="l00849"></a>00849     <span class="keywordtype">float</span> step,cumstep,distance,selected_distance;
-<a name="l00850"></a>00850     new_Dim *point=NULL;
-<a name="l00851"></a>00851     <span class="keywordtype">double</span> munk;
-<a name="l00852"></a>00852     <span class="keywordtype">int</span> ilx=0;
-<a name="l00853"></a>00853     <span class="keywordtype">int</span> ily=0;
-<a name="l00854"></a>00854     <span class="keywordtype">int</span> inp=0;
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     <span class="keywordtype">float</span>* padata=NULL;
-<a name="l00857"></a>00857     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00858"></a>00858     cpl_image* i_img=NULL;
-<a name="l00859"></a>00859     cpl_image* a_img=NULL;
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861     selected.w = 0;
-<a name="l00862"></a>00862     memset(indata,0x00,1000*<span class="keyword">sizeof</span>(new_XYZW));
-<a name="l00863"></a>00863     ilx=cpl_image_get_size_x(cpl_imagelist_get(im,0));
-<a name="l00864"></a>00864     ily=cpl_image_get_size_y(cpl_imagelist_get(im,0));
-<a name="l00865"></a>00865     inp=cpl_imagelist_get_size(im);
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867     pos=0;
-<a name="l00868"></a>00868     <span class="keywordflow">for</span>( i=0; i < ilx; i++)
-<a name="l00869"></a>00869     {
-<a name="l00870"></a>00870     <span class="keywordflow">for</span>( j=0; j < ily; j++)
-<a name="l00871"></a>00871         {
-<a name="l00872"></a>00872         <span class="keywordflow">for</span>( k=0; k < inp; k++)
-<a name="l00873"></a>00873         {
-<a name="l00874"></a>00874           a_img=cpl_imagelist_get(action,k);
-<a name="l00875"></a>00875                   padata=cpl_image_get_data_float(a_img);
-<a name="l00876"></a>00876           i_img=cpl_imagelist_get(action,k);
-<a name="l00877"></a>00877                   pidata=cpl_image_get_data_float(i_img);
-<a name="l00878"></a>00878         <span class="keywordflow">if</span> ( padata[sinfo_cu_xy(action,i,j)] == cubePT_USE )
-<a name="l00879"></a>00879             {
-<a name="l00880"></a>00880 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00881"></a>00881 <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Used im[%d,%d,%d]=%lf\n"</span>,
-<a name="l00882"></a>00882                                       i,j,k,pidata[sinfo_im_xy(im,i,j)]);
-<a name="l00883"></a>00883 <span class="preprocessor">#endif</span>
-<a name="l00884"></a>00884 <span class="preprocessor"></span>            indata[pos].x = i;
-<a name="l00885"></a>00885             indata[pos].y = j;
-<a name="l00886"></a>00886             indata[pos].z = k;
-<a name="l00887"></a>00887             indata[pos].w = pidata[sinfo_cu_xy(im,i,j)];
-<a name="l00888"></a>00888             pos++;
-<a name="l00889"></a>00889             }
-<a name="l00890"></a>00890         <span class="keywordflow">else</span>
-<a name="l00891"></a>00891             {
-<a name="l00892"></a>00892             <span class="keywordflow">if</span> ( padata[sinfo_cu_xy(action,i,j)] == cubePT_FIND )
-<a name="l00893"></a>00893             {
-<a name="l00894"></a>00894                (*point).x = i;
-<a name="l00895"></a>00895                (*point).y = j;
-<a name="l00896"></a>00896                (*point).z = k;
-<a name="l00897"></a>00897 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00898"></a>00898 <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Find for im[%d,%d,%d]=%lf reason:%f"</span>,
-<a name="l00899"></a>00899                         i,j,k,pidata[sinfo_im_xy(im,i,j)],
-<a name="l00900"></a>00900                         padata[sinfo_cu_xy(action,i,j)]);
-<a name="l00901"></a>00901 <span class="preprocessor">#endif</span>
-<a name="l00902"></a>00902 <span class="preprocessor"></span>            }
-<a name="l00903"></a>00903             <span class="keywordflow">else</span>
-<a name="l00904"></a>00904             {
-<a name="l00905"></a>00905 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00906"></a>00906 <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Ignored im[%d,%d,%d]=%lf reason:%f"</span>,
-<a name="l00907"></a>00907                         i,j,k,pidata[sinfo_im_xy(im,i,j)],
-<a name="l00908"></a>00908                         padata[sinfo_im_xy(action,i,j)]);
-<a name="l00909"></a>00909 <span class="preprocessor">#endif</span>
-<a name="l00910"></a>00910 <span class="preprocessor"></span>            }
-<a name="l00911"></a>00911             }
-<a name="l00912"></a>00912         }
-<a name="l00913"></a>00913         }
-<a name="l00914"></a>00914     }
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916     
-<a name="l00917"></a>00917     <span class="keywordflow">if</span> ( pos < 2 )
-<a name="l00918"></a>00918     {
-<a name="l00919"></a>00919 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00920"></a>00920 <span class="preprocessor"></span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"subcube contains no valid pixels "</span>
-<a name="l00921"></a>00921                        <span class="stringliteral">"to use in iterpolation"</span>);
-<a name="l00922"></a>00922 <span class="preprocessor">#endif</span>
-<a name="l00923"></a>00923 <span class="preprocessor"></span>    <span class="comment">/*i_img=cpl_imagelist_get((*point).z);</span>
-<a name="l00924"></a>00924 <span class="comment">          pidata=cpl_image_get_data_float(i_img);</span>
-<a name="l00925"></a>00925 <span class="comment">          return( pidata[sinfo_im_xy(im,(*point).x,(*point).y)] );*/</span>
-<a name="l00926"></a>00926     <span class="keywordflow">return</span>( cubeNONEIGHBOR );
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     }
-<a name="l00929"></a>00929 
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931     step    = 0.01;
-<a name="l00932"></a>00932     cumstep = 0.0;
-<a name="l00933"></a>00933     selected_distance=1000;
-<a name="l00934"></a>00934     munk = pow( 1.0-cumstep, (<span class="keywordtype">double</span>)pos - 1 );
-<a name="l00935"></a>00935     <span class="keywordflow">for</span> ( i = 0 ; ( i < 100 ) && ( munk != 0.0 ); i++ )
-<a name="l00936"></a>00936     {
-<a name="l00937"></a>00937     memset( &res, 0x00, <span class="keyword">sizeof</span>(new_XYZW) );
-<a name="l00938"></a>00938     sinfo_new_bezier( indata, pos-1, cumstep, munk, &res);
-<a name="l00939"></a>00939     distance = sqrt( pow( ((*point).x-res.x), 2)+
-<a name="l00940"></a>00940                      pow( ((*point).y-res.y), 2)+
-<a name="l00941"></a>00941                      pow( ((*point).z-res.z), 2) );
-<a name="l00942"></a>00942     <span class="comment">/*sinfo_msg_debug("%lf %lf %lf %lf %lf\n",</span>
-<a name="l00943"></a>00943 <span class="comment">                          res.x,res.y,res.z,res.w,distance);*/</span>
-<a name="l00944"></a>00944     <span class="keywordflow">if</span> ( distance < selected_distance )
-<a name="l00945"></a>00945         {
-<a name="l00946"></a>00946         selected_distance = distance;
-<a name="l00947"></a>00947         selected.x = res.x;
-<a name="l00948"></a>00948         selected.y = res.y;
-<a name="l00949"></a>00949         selected.z = res.z;
-<a name="l00950"></a>00950         selected.w = res.w;
-<a name="l00951"></a>00951         }
-<a name="l00952"></a>00952     cumstep = cumstep + step;
-<a name="l00953"></a>00953     munk = pow( 1.0 - cumstep, (<span class="keywordtype">double</span>)pos - 1 );
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955     }
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l00958"></a>00958 <span class="preprocessor"></span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Selected %lf %lf %lf %lf, distance=%lf"</span>,
-<a name="l00959"></a>00959                     selected.x,selected.y,selected.z,
-<a name="l00960"></a>00960                     selected.w,selected_distance);
-<a name="l00961"></a>00961 <span class="preprocessor">#endif</span>
-<a name="l00962"></a>00962 <span class="preprocessor"></span>   i_img=cpl_imagelist_get(im,(*point).z);
-<a name="l00963"></a>00963     pidata=cpl_image_get_data_float(i_img);
-<a name="l00964"></a>00964     pidata[sinfo_cu_xy(im,(*point).x,(*point).y)] = selected.w;
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     <span class="keywordflow">return</span> selected.w;
-<a name="l00967"></a>00967 }
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969 
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971 <span class="keywordtype">int</span>
-<a name="l00972"></a>00972 sinfo_new_bezier(new_XYZW *p,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> munk,new_XYZW *res )
-<a name="l00973"></a>00973 {
-<a name="l00974"></a>00974    <span class="keywordtype">int</span> k, kn, nn, nkn;
-<a name="l00975"></a>00975    <span class="keywordtype">double</span> blend, muk;
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977    muk = 1;
-<a name="l00978"></a>00978    <span class="keywordflow">for</span> ( k = 0; k <= n; k++ ) {
-<a name="l00979"></a>00979       nn = n;
-<a name="l00980"></a>00980       kn = k;
-<a name="l00981"></a>00981       nkn = n - k;
-<a name="l00982"></a>00982       blend = muk * munk;
-<a name="l00983"></a>00983       muk *= mu;
-<a name="l00984"></a>00984       munk /= ( 1.0 - mu );
-<a name="l00985"></a>00985       <span class="keywordflow">while</span> ( nn >= 1 ) {
-<a name="l00986"></a>00986          blend *= (double)nn;
-<a name="l00987"></a>00987          nn--;
-<a name="l00988"></a>00988          <span class="keywordflow">if</span> ( kn > 1 ) {
-<a name="l00989"></a>00989             blend /= (double)kn;
-<a name="l00990"></a>00990             kn--;
-<a name="l00991"></a>00991          }
-<a name="l00992"></a>00992          <span class="keywordflow">if</span> ( nkn > 1 ) {
-<a name="l00993"></a>00993             blend /= (double)nkn;
-<a name="l00994"></a>00994             nkn--;
-<a name="l00995"></a>00995          }
-<a name="l00996"></a>00996       }
-<a name="l00997"></a>00997       res -> x += p[k].x * blend;
-<a name="l00998"></a>00998       res -> y += p[k].y * blend;
-<a name="l00999"></a>00999       res -> z += p[k].z * blend;
-<a name="l01000"></a>01000       res -> w += p[k].w * blend;
-<a name="l01001"></a>01001    }
-<a name="l01002"></a>01002    <span class="keywordflow">return</span>( 0 );
-<a name="l01003"></a>01003 }
-<a name="l01004"></a>01004 
-<a name="l01005"></a>01005 <span class="keywordtype">int</span>
-<a name="l01006"></a>01006 sinfo_new_c_create_XYZ( new_Lookup *l )
-<a name="l01007"></a>01007 {
-<a name="l01008"></a>01008     cpl_image *imX,*imY,*imZ,*imcX;
-<a name="l01009"></a>01009     <span class="keywordtype">short</span> i,j,k,indexI,indexJ,x,y,z;
-<a name="l01010"></a>01010     <span class="keywordtype">int</span> size;
-<a name="l01011"></a>01011     <span class="keywordtype">int</span> idlx=0;
-<a name="l01012"></a>01012     <span class="keywordtype">int</span> idly=0;
-<a name="l01013"></a>01013     <span class="keywordtype">int</span> idnp=0;
-<a name="l01014"></a>01014     <span class="keywordtype">float</span>* piddata=NULL;
-<a name="l01015"></a>01015     <span class="keywordtype">float</span>* pjddata=NULL;
-<a name="l01016"></a>01016     <span class="keywordtype">float</span>* pXdata=NULL;
-<a name="l01017"></a>01017     <span class="keywordtype">float</span>* pYdata=NULL;
-<a name="l01018"></a>01018     <span class="keywordtype">float</span>* pZdata=NULL;
-<a name="l01019"></a>01019     <span class="keywordtype">float</span>* phXdata=NULL;
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021     cpl_image* i_img=NULL;
-<a name="l01022"></a>01022     cpl_image* j_img=NULL;
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024     idlx=cpl_image_get_size_x(cpl_imagelist_get(l->id,0));
-<a name="l01025"></a>01025     idly=cpl_image_get_size_y(cpl_imagelist_get(l->id,0));
-<a name="l01026"></a>01026     idnp=cpl_imagelist_get_size(l->id);
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028     size = idlx*idly;
-<a name="l01029"></a>01029     <span class="comment">/* allocate memory */</span>
-<a name="l01030"></a>01030     <span class="keywordflow">if</span> ( NULL == (imX = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )
-<a name="l01031"></a>01031         {
-<a name="l01032"></a>01032     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for X !\n"</span>) ;
-<a name="l01033"></a>01033     <span class="keywordflow">return</span> -1 ;
-<a name="l01034"></a>01034         }
-<a name="l01035"></a>01035     <span class="keywordflow">if</span> ( NULL == (imY = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )
-<a name="l01036"></a>01036         {
-<a name="l01037"></a>01037     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for Y !\n"</span>) ;
-<a name="l01038"></a>01038     <span class="keywordflow">return</span> -1 ;
-<a name="l01039"></a>01039         }
-<a name="l01040"></a>01040     <span class="keywordflow">if</span> ( NULL == (imZ = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )
-<a name="l01041"></a>01041         {
-<a name="l01042"></a>01042     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for Z !\n"</span>) ;
-<a name="l01043"></a>01043     <span class="keywordflow">return</span> -1 ;
-<a name="l01044"></a>01044         }
-<a name="l01045"></a>01045     <span class="keywordflow">if</span> ( NULL == (imcX = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )
-<a name="l01046"></a>01046         {
-<a name="l01047"></a>01047     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for cX !\n"</span>) ;
-<a name="l01048"></a>01048     <span class="keywordflow">return</span> -1 ;
-<a name="l01049"></a>01049         }
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051     l -> X  = imX;
-<a name="l01052"></a>01052     l -> Y  = imY;
-<a name="l01053"></a>01053     l -> Z  = imZ;
-<a name="l01054"></a>01054     l -> hX = imcX;
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056     <span class="comment">/*Round id*/</span>
-<a name="l01057"></a>01057     <span class="keywordflow">for</span>( i = 0; i < idlx; i++)
-<a name="l01058"></a>01058     {
-<a name="l01059"></a>01059     <span class="keywordflow">for</span>( j = 0; j < idly; j++)
-<a name="l01060"></a>01060         {
-<a name="l01061"></a>01061         <span class="keywordflow">for</span>( k = 0; k < idnp; k++)
-<a name="l01062"></a>01062         {
-<a name="l01063"></a>01063           i_img=cpl_imagelist_get(l->id,k);
-<a name="l01064"></a>01064           piddata=cpl_image_get_data_float(i_img);
-<a name="l01065"></a>01065           piddata[sinfo_cu_xy(l->id,i,j)] =
-<a name="l01066"></a>01066                   (float)sinfo_new_nint(piddata[sinfo_cu_xy(l->id,i,j)]);
-<a name="l01067"></a>01067         }
-<a name="l01068"></a>01068         }
-<a name="l01069"></a>01069     }
-<a name="l01070"></a>01070 
-<a name="l01071"></a>01071     <span class="comment">/*Round jd*/</span>
-<a name="l01072"></a>01072     <span class="keywordflow">for</span>( i = 0; i < idlx; i++)
-<a name="l01073"></a>01073     {
-<a name="l01074"></a>01074     <span class="keywordflow">for</span>( j = 0; j < idly; j++)
-<a name="l01075"></a>01075         {
-<a name="l01076"></a>01076         <span class="keywordflow">for</span>( k = 0; k < idnp; k++)
-<a name="l01077"></a>01077         {
-<a name="l01078"></a>01078           j_img=cpl_imagelist_get(l->jd,k);
-<a name="l01079"></a>01079           pjddata=cpl_image_get_data_float(j_img);
-<a name="l01080"></a>01080           pjddata[sinfo_cu_xy(l->jd,i,j)] =
-<a name="l01081"></a>01081                  (float)sinfo_new_nint(pjddata[sinfo_cu_xy(l->jd,i,j)]);
-<a name="l01082"></a>01082         }
-<a name="l01083"></a>01083         }
-<a name="l01084"></a>01084     }
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086     <span class="comment">/*Fill with -1 X Y Z*/</span>
-<a name="l01087"></a>01087     <span class="keywordflow">for</span>( i = 0; i < cpl_image_get_size_x(l -> X); i++)
-<a name="l01088"></a>01088     {
-<a name="l01089"></a>01089     <span class="keywordflow">for</span>( j = 0; j < cpl_image_get_size_y(l -> X); j++)
-<a name="l01090"></a>01090         {
-<a name="l01091"></a>01091           pXdata=cpl_image_get_data_float(l->X);
-<a name="l01092"></a>01092           pYdata=cpl_image_get_data_float(l->Y);
-<a name="l01093"></a>01093           pZdata=cpl_image_get_data_float(l->Z);
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095           pXdata[sinfo_im_xy(l->X,i,j)] = ZERO;
-<a name="l01096"></a>01096           pYdata[sinfo_im_xy(l->Y,i,j)] = ZERO;
-<a name="l01097"></a>01097           pZdata[sinfo_im_xy(l->Z,i,j)] = ZERO;
-<a name="l01098"></a>01098         }
-<a name="l01099"></a>01099     }
-<a name="l01100"></a>01100 <span class="preprocessor">#define  FORW</span>
-<a name="l01101"></a>01101 <span class="preprocessor"></span><span class="preprocessor">#ifdef BACK</span>
-<a name="l01102"></a>01102 <span class="preprocessor"></span>    <span class="keywordflow">for</span>( x = idlx - 1;x>=0;x--)
-<a name="l01103"></a>01103     {
-<a name="l01104"></a>01104     <span class="keywordflow">for</span>( y = idly - 1;y>=0;y--)
-<a name="l01105"></a>01105         {
-<a name="l01106"></a>01106         <span class="keywordflow">for</span>( z = idnp - 1;z>=0;z--)
-<a name="l01107"></a>01107 #endif
-<a name="l01108"></a>01108 #ifdef FORW
-<a name="l01109"></a>01109     <span class="keywordflow">for</span>( x = 0; x <  idlx; x++)
-<a name="l01110"></a>01110     {
-<a name="l01111"></a>01111     <span class="keywordflow">for</span>( y = 0; y < idly; y++)
-<a name="l01112"></a>01112         {
-<a name="l01113"></a>01113         <span class="keywordflow">for</span>( z = 0; z < idnp; z++)
-<a name="l01114"></a>01114 #endif
-<a name="l01115"></a>01115           {
-<a name="l01116"></a>01116         i_img=cpl_imagelist_get(l->id,z);
-<a name="l01117"></a>01117         piddata=cpl_image_get_data_float(i_img);
-<a name="l01118"></a>01118         j_img=cpl_imagelist_get(l->jd,z);
-<a name="l01119"></a>01119         pjddata=cpl_image_get_data_float(j_img);
-<a name="l01120"></a>01120         indexI = piddata [sinfo_cu_xy(l->id,x,y)];
-<a name="l01121"></a>01121         indexJ = pjddata [sinfo_cu_xy(l->jd,x,y)];
-<a name="l01122"></a>01122         <span class="keywordflow">if</span> ( indexI > 0.0  && indexI < size  &&
-<a name="l01123"></a>01123              indexJ > 0.0  && indexJ < size )
-<a name="l01124"></a>01124             {
-<a name="l01125"></a>01125             <span class="comment">/*sinfo_msg_debug("%d %d %d = %f, %f\n",</span>
-<a name="l01126"></a>01126 <span class="comment">                      x,y,z,(float)ICube(x,y,z),(float)JCube(x,y,z));*/</span>
-<a name="l01127"></a>01127               pXdata=cpl_image_get_data_float(l->X);
-<a name="l01128"></a>01128               pYdata=cpl_image_get_data_float(l->Y);
-<a name="l01129"></a>01129               pZdata=cpl_image_get_data_float(l->Z);
-<a name="l01130"></a>01130               phXdata=cpl_image_get_data_float(l->hX);
-<a name="l01131"></a>01131 
-<a name="l01132"></a>01132               pXdata[sinfo_im_xy(l->X ,indexI,indexJ)] = x;
-<a name="l01133"></a>01133               phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =
-<a name="l01134"></a>01134                          phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;
-<a name="l01135"></a>01135 
-<a name="l01136"></a>01136             pYdata[sinfo_im_xy(l->Y ,indexI,indexJ)] = y;
-<a name="l01137"></a>01137             <span class="comment">/*phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =</span>
-<a name="l01138"></a>01138 <span class="comment">                      phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;*/</span>
-<a name="l01139"></a>01139 
-<a name="l01140"></a>01140             pZdata[sinfo_im_xy(l->Z ,indexI,indexJ)] = z;
-<a name="l01141"></a>01141             <span class="comment">/*phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =</span>
-<a name="l01142"></a>01142 <span class="comment">                      phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;*/</span>
-<a name="l01143"></a>01143             }
-<a name="l01144"></a>01144         }
-<a name="l01145"></a>01145         }
-<a name="l01146"></a>01146     }
-<a name="l01147"></a>01147 
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149     sinfo_msg(<span class="stringliteral">"Filled X Y Z , cX cY cZ 2D frames\n"</span>);
-<a name="l01150"></a>01150     <span class="keywordflow">return</span>(0);
-<a name="l01151"></a>01151 }
-<a name="l01152"></a>01152 
-<a name="l01158"></a>01158 new_Lookup *
-<a name="l01159"></a>01159 sinfo_new_lookup( <span class="keywordtype">void</span> )
-<a name="l01160"></a>01160 {
-<a name="l01161"></a>01161     new_Lookup *l;
-<a name="l01162"></a>01162     l = (new_Lookup*)cpl_calloc(1, <span class="keyword">sizeof</span>(new_Lookup));
-<a name="l01163"></a>01163     <span class="keywordflow">return</span> (l);
-<a name="l01164"></a>01164 }
-<a name="l01171"></a>01171 <span class="keywordtype">void</span>
-<a name="l01172"></a>01172 sinfo_new_destroy_lookup( new_Lookup *l )
-<a name="l01173"></a>01173 {
-<a name="l01174"></a>01174     <span class="keywordflow">if</span> ( l )
-<a name="l01175"></a>01175     cpl_free(l);
-<a name="l01176"></a>01176 }
-<a name="l01184"></a>01184 <span class="keywordtype">int</span>
-<a name="l01185"></a>01185 sinfo_new_change_mask (cpl_image * mask, cpl_image * im)
-<a name="l01186"></a>01186 {
-<a name="l01187"></a>01187     <span class="keywordtype">int</span> i ;
-<a name="l01188"></a>01188     <span class="keywordtype">int</span> mlx=0;
-<a name="l01189"></a>01189     <span class="keywordtype">int</span> mly=0;
-<a name="l01190"></a>01190     <span class="keywordtype">int</span> ilx=0;
-<a name="l01191"></a>01191     <span class="keywordtype">int</span> ily=0;
-<a name="l01192"></a>01192     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01193"></a>01193     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195     <span class="keywordflow">if</span> (mask == NULL || im == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l01196"></a>01196     ilx=cpl_image_get_size_x(im);
-<a name="l01197"></a>01197     ily=cpl_image_get_size_y(im);
-<a name="l01198"></a>01198     pidata=cpl_image_get_data_float(im);
-<a name="l01199"></a>01199 
-<a name="l01200"></a>01200     mlx=cpl_image_get_size_x(mask);
-<a name="l01201"></a>01201     mly=cpl_image_get_size_y(mask);
-<a name="l01202"></a>01202     pmdata=cpl_image_get_data_float(mask);
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l01205"></a>01205     {
-<a name="l01206"></a>01206         <span class="keywordflow">if</span> (isnan(pidata[i]))
-<a name="l01207"></a>01207         {
-<a name="l01208"></a>01208             pmdata[i] = 0. ;
-<a name="l01209"></a>01209         }
-<a name="l01210"></a>01210     }
-<a name="l01211"></a>01211     <span class="keywordflow">return</span> 0 ;
-<a name="l01212"></a>01212 }
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 
-<a name="l01231"></a>01231 cpl_image *
-<a name="l01232"></a>01232 sinfo_new_c_bezier_find_cosmic( cpl_image *im,
-<a name="l01233"></a>01233                                       cpl_image *mask,
-<a name="l01234"></a>01234                                       new_Lookup *look,
-<a name="l01235"></a>01235                                       <span class="keywordtype">short</span> rx,
-<a name="l01236"></a>01236                                       <span class="keywordtype">short</span> ry,
-<a name="l01237"></a>01237                                       <span class="keywordtype">short</span> rz,
-<a name="l01238"></a>01238                           <span class="keywordtype">short</span> lowerI,
-<a name="l01239"></a>01239                                       <span class="keywordtype">short</span> highI,
-<a name="l01240"></a>01240                                       <span class="keywordtype">short</span> lowerJ,
-<a name="l01241"></a>01241                                       <span class="keywordtype">short</span> highJ,
-<a name="l01242"></a>01242                                       <span class="keywordtype">float</span> factor )
-<a name="l01243"></a>01243 {
-<a name="l01244"></a>01244 
-<a name="l01245"></a>01245     <span class="keywordtype">int</span> i,j,count;
-<a name="l01246"></a>01246     cpl_imagelist * sc_im,* drs_sc_mask;
-<a name="l01247"></a>01247     <span class="keywordtype">short</span> szx,szy,szz;
-<a name="l01248"></a>01248     <span class="keywordtype">float</span> <span class="comment">/*ant,*/</span>newValue,old<span class="comment">/*,dif,porcentage,distance*/</span>;
-<a name="l01249"></a>01249     <span class="keywordtype">double</span> med, stdev;
-<a name="l01250"></a>01250     <span class="comment">/*cpl_image *out;*/</span>
-<a name="l01251"></a>01251     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     cpl_image* o_img=NULL;
-<a name="l01255"></a>01255     <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l01256"></a>01256     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01257"></a>01257 
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259 
-<a name="l01260"></a>01260     <span class="keywordtype">int</span> ilx=0;
-<a name="l01261"></a>01261     <span class="keywordtype">int</span> ily=0;
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263     <span class="keywordtype">int</span> mlx=0;
-<a name="l01264"></a>01264     <span class="keywordtype">int</span> mly=0;
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266 
-<a name="l01267"></a>01267 
-<a name="l01268"></a>01268 
-<a name="l01269"></a>01269     mlx=cpl_image_get_size_x(mask);
-<a name="l01270"></a>01270     mly=cpl_image_get_size_y(mask);
-<a name="l01271"></a>01271     pmdata=cpl_image_get_data_float(mask);
-<a name="l01272"></a>01272 
-<a name="l01273"></a>01273     ilx=cpl_image_get_size_x(im);
-<a name="l01274"></a>01274     ily=cpl_image_get_size_y(im);
-<a name="l01275"></a>01275     pidata=cpl_image_get_data_float(im);
-<a name="l01276"></a>01276 
-<a name="l01277"></a>01277     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )
-<a name="l01278"></a>01278     {
-<a name="l01279"></a>01279         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;
-<a name="l01280"></a>01280         <span class="keywordflow">return</span> NULL ;
-<a name="l01281"></a>01281     }
-<a name="l01282"></a>01282 
-<a name="l01283"></a>01283     <span class="comment">/* allocate memory for sub cubes*/</span>
-<a name="l01284"></a>01284     szx = (rx * 2 ) + 1;
-<a name="l01285"></a>01285     szy = (ry * 2 ) + 1;
-<a name="l01286"></a>01286     szz = (rz * 2 ) + 1;
-<a name="l01287"></a>01287 
-<a name="l01288"></a>01288     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )
-<a name="l01289"></a>01289     {
-<a name="l01290"></a>01290         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;
-<a name="l01291"></a>01291         <span class="keywordflow">return</span> NULL ;
-<a name="l01292"></a>01292     }
-<a name="l01293"></a>01293     <span class="keywordflow">for</span>(i=0;i<szz;i++){
-<a name="l01294"></a>01294       o_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l01295"></a>01295       cpl_imagelist_set(sc_im,o_img,i);
-<a name="l01296"></a>01296     }
-<a name="l01297"></a>01297 
-<a name="l01298"></a>01298     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )
-<a name="l01299"></a>01299     {
-<a name="l01300"></a>01300         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;
-<a name="l01301"></a>01301         <span class="keywordflow">return</span> NULL ;
-<a name="l01302"></a>01302     }
-<a name="l01303"></a>01303 
-<a name="l01304"></a>01304     <span class="keywordflow">for</span>(i=0;i<szz;i++){
-<a name="l01305"></a>01305       o_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);
-<a name="l01306"></a>01306       cpl_imagelist_set(drs_sc_mask,o_img,i);
-<a name="l01307"></a>01307     }
-<a name="l01308"></a>01308 
-<a name="l01309"></a>01309 
-<a name="l01310"></a>01310 
-<a name="l01311"></a>01311 
-<a name="l01312"></a>01312     count=0;
-<a name="l01313"></a>01313     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )
-<a name="l01314"></a>01314     {
-<a name="l01315"></a>01315         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )
-<a name="l01316"></a>01316         {
-<a name="l01317"></a>01317         <span class="keywordflow">if</span> ( i >= lowerI && i < highI && j >= lowerJ && j < highJ )
-<a name="l01318"></a>01318         {
-<a name="l01319"></a>01319 
-<a name="l01320"></a>01320         rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;
-<a name="l01321"></a>01321         newValue = sinfo_new_c_bezier_correct_cosmic( i, j, im,
-<a name="l01322"></a>01322                                                               mask, sc_im,
-<a name="l01323"></a>01323                                                               drs_sc_mask,
-<a name="l01324"></a>01324                                                               look,
-<a name="l01325"></a>01325                                                               rx_loop,
-<a name="l01326"></a>01326                                                               ry_loop,
-<a name="l01327"></a>01327                                                               rz_loop,
-<a name="l01328"></a>01328                                                               &med,
-<a name="l01329"></a>01329                                                               &stdev,
-<a name="l01330"></a>01330                                                               factor );
-<a name="l01331"></a>01331             <span class="comment">/* if no valid neighboors are found, increase size of</span>
-<a name="l01332"></a>01332 <span class="comment">                   sub cube until max radius is reached */</span>
-<a name="l01333"></a>01333         <span class="keywordflow">while</span> ( newValue == cubeNONEIGHBOR && rx_loop < rx &&
-<a name="l01334"></a>01334                         ry_loop < ry && rz_loop < rz )
-<a name="l01335"></a>01335             {
-<a name="l01336"></a>01336               rx_loop++ ; ry_loop++; rz_loop++;
-<a name="l01337"></a>01337               <span class="comment">/*sinfo_msg_debug("Increasing radius to %d, in %d %d",</span>
-<a name="l01338"></a>01338 <span class="comment">                          rx_loop, i, j) ;  */</span>
-<a name="l01339"></a>01339                    newValue = sinfo_new_c_bezier_correct_cosmic( i, j, im,
-<a name="l01340"></a>01340                                                                     mask,
-<a name="l01341"></a>01341                                                                     sc_im,
-<a name="l01342"></a>01342                                                                     drs_sc_mask,
-<a name="l01343"></a>01343                                                                     look,
-<a name="l01344"></a>01344                                                                     rx_loop,
-<a name="l01345"></a>01345                                                                     ry_loop,
-<a name="l01346"></a>01346                                                                     rz_loop,
-<a name="l01347"></a>01347                                                                     &med,
-<a name="l01348"></a>01348                                                                     &stdev,
-<a name="l01349"></a>01349                                                                      factor );
-<a name="l01350"></a>01350             }
-<a name="l01351"></a>01351         <span class="comment">/*give up on increasing the size*/</span>
-<a name="l01352"></a>01352         <span class="keywordflow">if</span> ( isnan(newValue) || newValue == cubeNONEIGHBOR )
-<a name="l01353"></a>01353                 <span class="comment">/*<= -3.e10 ZERO )*/</span>
-<a name="l01354"></a>01354             <span class="keywordflow">continue</span>;
-<a name="l01355"></a>01355 
-<a name="l01356"></a>01356         old = pidata[sinfo_im_xy(im,i,j)];
-<a name="l01357"></a>01357         <span class="keywordflow">if</span> ( newValue != old )
-<a name="l01358"></a>01358             {
-<a name="l01359"></a>01359             pidata[sinfo_im_xy(im,i,j)] = newValue;
-<a name="l01360"></a>01360             <span class="comment">/*sinfo_msg_debug("[%d,%d]=%f -> %f, med= %f, stdev=%f",</span>
-<a name="l01361"></a>01361 <span class="comment">                      i,j, old, newValue, med, stdev ); */</span>
-<a name="l01362"></a>01362             count++;
-<a name="l01363"></a>01363             }
-<a name="l01364"></a>01364         }
-<a name="l01365"></a>01365         }
-<a name="l01366"></a>01366     }
-<a name="l01367"></a>01367 
-<a name="l01368"></a>01368 
-<a name="l01369"></a>01369     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"bad pixels count: %d"</span>,count);
-<a name="l01370"></a>01370 
-<a name="l01371"></a>01371 
-<a name="l01372"></a>01372     cpl_imagelist_delete(sc_im);
-<a name="l01373"></a>01373     cpl_imagelist_delete(drs_sc_mask);
-<a name="l01374"></a>01374     <span class="keywordflow">return</span> im;
-<a name="l01375"></a>01375 }
-<a name="l01376"></a>01376 
-<a name="l01377"></a>01377 
-<a name="l01395"></a>01395 <span class="keywordtype">float</span>
-<a name="l01396"></a>01396 sinfo_new_c_bezier_correct_cosmic(<span class="keywordtype">int</span> ipos,
-<a name="l01397"></a>01397                                   <span class="keywordtype">int</span> jpos,
-<a name="l01398"></a>01398                                   cpl_image * im,
-<a name="l01399"></a>01399                                   cpl_image * mask,
-<a name="l01400"></a>01400                       cpl_imagelist * sc_im,
-<a name="l01401"></a>01401                                   cpl_imagelist * drs_sc_mask,
-<a name="l01402"></a>01402                                   new_Lookup * look,
-<a name="l01403"></a>01403                                   <span class="keywordtype">short</span> rx,
-<a name="l01404"></a>01404                                   <span class="keywordtype">short</span> ry,
-<a name="l01405"></a>01405                                   <span class="keywordtype">short</span> rz ,
-<a name="l01406"></a>01406                                   <span class="keywordtype">double</span> *med ,
-<a name="l01407"></a>01407                       <span class="keywordtype">double</span> *stdev,
-<a name="l01408"></a>01408                                   <span class="keywordtype">float</span> factor )
-<a name="l01409"></a>01409 {
-<a name="l01410"></a>01410     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;
-<a name="l01411"></a>01411     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;
-<a name="l01412"></a>01412     <span class="comment">/*float indexIf,indexJf,sp;*/</span>
-<a name="l01413"></a>01413     cpl_image * X, * Y, * Z, * hX;
-<a name="l01414"></a>01414     cpl_imagelist  * id, * jd;
-<a name="l01415"></a>01415     <span class="keywordtype">short</span> counter;
-<a name="l01416"></a>01416     <span class="keywordtype">double</span> sum;
-<a name="l01417"></a>01417     <span class="keywordtype">float</span>* phXdata=NULL;
-<a name="l01418"></a>01418     <span class="keywordtype">float</span>* pXdata=NULL;
-<a name="l01419"></a>01419     <span class="keywordtype">float</span>* pYdata=NULL;
-<a name="l01420"></a>01420     <span class="keywordtype">float</span>* pZdata=NULL;
-<a name="l01421"></a>01421 
-<a name="l01422"></a>01422     <span class="keywordtype">float</span>* pimdata=NULL;
-<a name="l01423"></a>01423     <span class="keywordtype">float</span>* pscdata=NULL;
-<a name="l01424"></a>01424     <span class="keywordtype">float</span>* pdrsdata=NULL;
-<a name="l01425"></a>01425     <span class="keywordtype">float</span>* piddata=NULL;
-<a name="l01426"></a>01426     <span class="keywordtype">float</span>* pjddata=NULL;
-<a name="l01427"></a>01427     <span class="keywordtype">float</span>* pmaskdata=NULL;
-<a name="l01428"></a>01428 
-<a name="l01429"></a>01429 
-<a name="l01430"></a>01430     <span class="keywordtype">int</span> idlx=0;
-<a name="l01431"></a>01431     <span class="keywordtype">int</span> idly=0;
-<a name="l01432"></a>01432     <span class="keywordtype">int</span> idnp=0;
-<a name="l01433"></a>01433 
-<a name="l01434"></a>01434     <span class="keywordtype">int</span> drslx=0;
-<a name="l01435"></a>01435     <span class="keywordtype">int</span> drsly=0;
-<a name="l01436"></a>01436     <span class="keywordtype">int</span> drsnp=0;
-<a name="l01437"></a>01437 
-<a name="l01438"></a>01438 
-<a name="l01439"></a>01439     X  = look -> X;
-<a name="l01440"></a>01440     Y  = look -> Y;
-<a name="l01441"></a>01441     Z  = look -> Z;
-<a name="l01442"></a>01442     hX = look -> hX;
-<a name="l01443"></a>01443     <span class="keywordtype">id</span> = look -> id;
-<a name="l01444"></a>01444     jd = look -> jd;
-<a name="l01445"></a>01445 
-<a name="l01446"></a>01446     phXdata=cpl_image_get_data_float(hX);
-<a name="l01447"></a>01447     <span class="comment">/*if ( phXdata[sinfo_im_xy( hX, ipos, jpos)] > 1 )</span>
-<a name="l01448"></a>01448 <span class="comment">    {</span>
-<a name="l01449"></a>01449 <span class="comment">    sinfo_msg_error("double hit in position [%d,%d]=%f, can not correct",</span>
-<a name="l01450"></a>01450 <span class="comment">        ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;</span>
-<a name="l01451"></a>01451 <span class="comment">    return ( -2e10 );</span>
-<a name="l01452"></a>01452 <span class="comment">    }*/</span>
-<a name="l01453"></a>01453     <span class="keywordflow">if</span> ( phXdata[sinfo_im_xy( hX, ipos, jpos)] < 1 )
-<a name="l01454"></a>01454     {
-<a name="l01455"></a>01455     <span class="comment">/*sinfo_msg_error("no lookup  in position [%d,%d]=%f, can not correct",</span>
-<a name="l01456"></a>01456 <span class="comment">      ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;*/</span>
-<a name="l01457"></a>01457     <span class="keywordflow">return</span> ( ZERO );
-<a name="l01458"></a>01458     }
-<a name="l01459"></a>01459 
-<a name="l01460"></a>01460     pXdata=cpl_image_get_data_float(X);
-<a name="l01461"></a>01461     pYdata=cpl_image_get_data_float(Y);
-<a name="l01462"></a>01462     pZdata=cpl_image_get_data_float(Z);
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464     ic = pXdata[sinfo_im_xy( X, ipos, jpos)];
-<a name="l01465"></a>01465     jc = pYdata[sinfo_im_xy( Y, ipos, jpos)];
-<a name="l01466"></a>01466     kc = pZdata[sinfo_im_xy( Z, ipos, jpos)];
-<a name="l01467"></a>01467     <span class="comment">/*if ( !(ipos % 16 )  )*/</span>
-<a name="l01468"></a>01468 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l01469"></a>01469 <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span>
-<a name="l01470"></a>01470                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d"</span>, ipos,jpos, ic, jc, kc );
-<a name="l01471"></a>01471 <span class="preprocessor">#endif</span>
-<a name="l01472"></a>01472 <span class="preprocessor"></span>    <span class="comment">/*limit to start not before the beginning of the cube*/</span>
-<a name="l01473"></a>01473     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;
-<a name="l01474"></a>01474     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;
-<a name="l01475"></a>01475     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;
-<a name="l01476"></a>01476 
-<a name="l01477"></a>01477 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l01478"></a>01478 <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d"</span>, ii, jj, kk );
-<a name="l01479"></a>01479 <span class="preprocessor">#endif</span>
-<a name="l01480"></a>01480 <span class="preprocessor"></span>
-<a name="l01481"></a>01481     <span class="comment">/*limit to end not outside of the cube */</span>
-<a name="l01482"></a>01482     szx = (rx * 2 ) + 1;
-<a name="l01483"></a>01483     szy = (ry * 2 ) + 1;
-<a name="l01484"></a>01484     szz = (rz * 2 ) + 1;
-<a name="l01485"></a>01485 
-<a name="l01486"></a>01486     idlx = cpl_image_get_size_x(cpl_imagelist_get(<span class="keywordtype">id</span>,0));
-<a name="l01487"></a>01487     idly = cpl_image_get_size_y(cpl_imagelist_get(<span class="keywordtype">id</span>,0));
-<a name="l01488"></a>01488     idnp = cpl_imagelist_get_size(<span class="keywordtype">id</span>);
-<a name="l01489"></a>01489 
-<a name="l01490"></a>01490     lx = idlx;
-<a name="l01491"></a>01491     ly = idly;
-<a name="l01492"></a>01492     lz = idnp;
-<a name="l01493"></a>01493     <span class="keywordflow">if</span> ( ( ic + rx ) >= idlx )
-<a name="l01494"></a>01494     szx = szx - ( (ic+rx)-(lx-1) );
-<a name="l01495"></a>01495 
-<a name="l01496"></a>01496     <span class="keywordflow">if</span> ( ( jc + ry ) >= idly )
-<a name="l01497"></a>01497     szy = szy - ( (jc+ry)-(ly-1) );
-<a name="l01498"></a>01498 
-<a name="l01499"></a>01499     <span class="keywordflow">if</span> ( ( kc + rz ) >= idnp )
-<a name="l01500"></a>01500     szz = szz - ( (kc+rz)-(lz-1) );
-<a name="l01501"></a>01501 
-<a name="l01502"></a>01502 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l01503"></a>01503 <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Size of subcube : szx=%d,szy=%d,szz=%d\n"</span>, szx, szy, szz );
-<a name="l01504"></a>01504     <span class="comment">/*fill whole mask with not available*/</span>
-<a name="l01505"></a>01505     drsnp=cpl_imagelist_get_size(drs_sc_mask);
-<a name="l01506"></a>01506     drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l01507"></a>01507     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));
-<a name="l01508"></a>01508 
-<a name="l01509"></a>01509     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Fill Mask subcube of size: %d,%d,%d, with NOINFO"</span>,
-<a name="l01510"></a>01510                      drslx, drsly,  drsnp);
-<a name="l01511"></a>01511 <span class="preprocessor">#endif</span>
-<a name="l01512"></a>01512 <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {
-<a name="l01513"></a>01513       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {
-<a name="l01514"></a>01514     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {
-<a name="l01515"></a>01515       pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));
-<a name="l01516"></a>01516       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;
-<a name="l01517"></a>01517     }
-<a name="l01518"></a>01518       }
-<a name="l01519"></a>01519     }
-<a name="l01520"></a>01520     pimdata=cpl_image_get_data_float(im);
-<a name="l01521"></a>01521     pmaskdata=cpl_image_get_data_float(mask);
-<a name="l01522"></a>01522     <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)
-<a name="l01523"></a>01523       {
-<a name="l01524"></a>01524     <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)
-<a name="l01525"></a>01525       {
-<a name="l01526"></a>01526         <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)
-<a name="l01527"></a>01527           {
-<a name="l01528"></a>01528 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l01529"></a>01529 <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,
-<a name="l01530"></a>01530                 i,j,k,is,js,ks);
-<a name="l01531"></a>01531 <span class="preprocessor">#endif</span>
-<a name="l01532"></a>01532 <span class="preprocessor"></span>        piddata=cpl_image_get_data_float(cpl_imagelist_get(<span class="keywordtype">id</span>,k));
-<a name="l01533"></a>01533         pjddata=cpl_image_get_data_float(cpl_imagelist_get(<span class="keywordtype">id</span>,k));
-<a name="l01534"></a>01534           pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,ks));
-<a name="l01535"></a>01535                 pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,ks));
-<a name="l01536"></a>01536 
-<a name="l01537"></a>01537 
-<a name="l01538"></a>01538         indexI = sinfo_new_nint( piddata[sinfo_cu_xy(<span class="keywordtype">id</span>,i,j)] );
-<a name="l01539"></a>01539         indexJ = sinfo_new_nint( pjddata[sinfo_cu_xy(jd,i,j)] );
-<a name="l01540"></a>01540         <span class="keywordflow">if</span> ( indexJ <= -1 || indexJ>=2048 || indexI == -1 )
-<a name="l01541"></a>01541           {
-<a name="l01542"></a>01542             pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] = cubePT_NOINFO;
-<a name="l01543"></a>01543             <span class="keywordflow">continue</span>;
-<a name="l01544"></a>01544           }
-<a name="l01545"></a>01545         pscdata[sinfo_cu_xy(sc_im,is,js)]=
-<a name="l01546"></a>01546                          pimdata[sinfo_im_xy(im,indexI,indexJ)];
-<a name="l01547"></a>01547         pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]=
-<a name="l01548"></a>01548                          pmaskdata[sinfo_im_xy(mask,indexI,indexJ)];
-<a name="l01549"></a>01549 <span class="preprocessor">#ifdef DEBUG</span>
-<a name="l01550"></a>01550 <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ; "</span>
-<a name="l01551"></a>01551                                 <span class="stringliteral">" Sub is=%d, js=%d, ks=%d  ; "</span>
-<a name="l01552"></a>01552                                 <span class="stringliteral">" Plane I=%d,J=%d ; mask %f ; im %f\n"</span>,
-<a name="l01553"></a>01553                         i, j, k, is, js, ks, indexI, indexJ,
-<a name="l01554"></a>01554                                 pmaskdata[sinfo_im_xy(mask,indexI,indexJ)],
-<a name="l01555"></a>01555                                 pimdata[sinfo_im_xy(im,indexI,indexJ)]);
-<a name="l01556"></a>01556 <span class="preprocessor">#endif</span>
-<a name="l01557"></a>01557 <span class="preprocessor"></span>
-<a name="l01558"></a>01558           }
-<a name="l01559"></a>01559       }
-<a name="l01560"></a>01560       }
-<a name="l01561"></a>01561 
-<a name="l01562"></a>01562     <span class="comment">/* ignoring the elements in the slitlet of the tested pixel */</span>
-<a name="l01563"></a>01563 
-<a name="l01564"></a>01564     <span class="keywordflow">for</span>( i = 0; i < szx; i++) {
-<a name="l01565"></a>01565       <span class="keywordflow">for</span>( k = 0;  k < szz; k++) {
-<a name="l01566"></a>01566     pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));
-<a name="l01567"></a>01567     pdrsdata[sinfo_cu_xy(drs_sc_mask,i,ry)] = cubePT_NOINFO;
-<a name="l01568"></a>01568       }
-<a name="l01569"></a>01569     }
-<a name="l01570"></a>01570 <span class="comment">/* now calculate mean and stdev in subcube */</span>
-<a name="l01571"></a>01571 
-<a name="l01572"></a>01572     counter = 0;
-<a name="l01573"></a>01573     sum=0;
-<a name="l01574"></a>01574     <span class="keywordflow">for</span>( i = 0; i < szx; i++)
-<a name="l01575"></a>01575       {
-<a name="l01576"></a>01576     <span class="keywordflow">for</span>( j = 0;  j < szy; j++)
-<a name="l01577"></a>01577       {
-<a name="l01578"></a>01578         <span class="keywordflow">for</span>( k = 0;  k < szz; k++)
-<a name="l01579"></a>01579           {
-<a name="l01580"></a>01580         pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));
-<a name="l01581"></a>01581         pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,k));
-<a name="l01582"></a>01582         <span class="keywordflow">if</span> (pscdata[sinfo_cu_xy(sc_im ,i ,j)] != ZERO &&
-<a name="l01583"></a>01583                     pdrsdata[sinfo_cu_xy(drs_sc_mask,i ,j)] != cubePT_NOINFO)
-<a name="l01584"></a>01584           {
-<a name="l01585"></a>01585             sum = sum + pscdata[sinfo_cu_xy(sc_im ,i ,j)];
-<a name="l01586"></a>01586             counter++;
-<a name="l01587"></a>01587           }
-<a name="l01588"></a>01588           }
-<a name="l01589"></a>01589       }
-<a name="l01590"></a>01590       }
-<a name="l01591"></a>01591 
-<a name="l01592"></a>01592     *med = sum / counter ;
-<a name="l01593"></a>01593 
-<a name="l01594"></a>01594     counter = 0;
-<a name="l01595"></a>01595     sum=0;
-<a name="l01596"></a>01596     <span class="keywordflow">for</span>( i = 0; i < szx; i++)
-<a name="l01597"></a>01597       {
-<a name="l01598"></a>01598     <span class="keywordflow">for</span>( j = 0;  j < szy; j++)
-<a name="l01599"></a>01599       {
-<a name="l01600"></a>01600         <span class="keywordflow">for</span>( k = 0;  k < szz; k++)
-<a name="l01601"></a>01601           {
-<a name="l01602"></a>01602         pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,k));
-<a name="l01603"></a>01603         pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));
-<a name="l01604"></a>01604         <span class="keywordflow">if</span> (pscdata[sinfo_cu_xy(sc_im ,i ,j)] != ZERO &&
-<a name="l01605"></a>01605                     pdrsdata[sinfo_cu_xy(drs_sc_mask,i ,j)] != cubePT_NOINFO)
-<a name="l01606"></a>01606           {
-<a name="l01607"></a>01607                sum = sum + (pscdata[sinfo_cu_xy(sc_im ,i ,j)] - *med) *
-<a name="l01608"></a>01608                                    (pscdata[sinfo_cu_xy(sc_im ,i ,j)] - *med) ;
-<a name="l01609"></a>01609                counter++;
-<a name="l01610"></a>01610           }
-<a name="l01611"></a>01611           }
-<a name="l01612"></a>01612       }
-<a name="l01613"></a>01613       }
-<a name="l01614"></a>01614 
-<a name="l01615"></a>01615     *stdev = sqrt( sum / ( counter - 1 ) );
-<a name="l01616"></a>01616 
-<a name="l01617"></a>01617 
-<a name="l01618"></a>01618     <span class="keywordflow">if</span> ( (fabs( pimdata[sinfo_im_xy(im,ipos,jpos)] - *med ) >
-<a name="l01619"></a>01619           factor * *stdev) ||
-<a name="l01620"></a>01620           isnan(pimdata[sinfo_im_xy(im,ipos,jpos)]) )
-<a name="l01621"></a>01621     {
-<a name="l01622"></a>01622     pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,rz));
-<a name="l01623"></a>01623     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;
-<a name="l01624"></a>01624     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );
-<a name="l01625"></a>01625     }
-<a name="l01626"></a>01626     <span class="keywordflow">else</span>
-<a name="l01627"></a>01627         <span class="keywordflow">return</span>(pimdata[sinfo_im_xy(im,ipos,jpos)]);
-<a name="l01628"></a>01628 
-<a name="l01629"></a>01629 
-<a name="l01630"></a>01630 }
-<a name="l01631"></a>01631 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_bezier.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* M.P.E. - SPIFFI project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* rabuter 2004-11-04 Fixed error on Find Cosmic when no valid neighboors</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                     where found in the subcube</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">* rabuter 10/07/03  created</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*        sinfo_new_bezier.c -</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*        procedures to correct for bad pixels using bezier splines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include "sinfo_new_bezier.h"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">int</span> sinfo_im_xy(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordtype">int</span> res=0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>    res=X+Y*cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keywordtype">int</span> sinfo_im_xyz(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">int</span> res=0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>    res = X+</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>          Y*cpl_image_get_size_x(im)+</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>          Z*cpl_image_get_size_x(im)*</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>            cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="keywordtype">int</span> sinfo_cu_xy(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> res=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    res=X+Y*cpl_image_get_size_x(cpl_imagelist_get(cu,0));</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">int</span> sinfo_cu_xyz(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z)</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">int</span> res=0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>    res = X+</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>          Y*cpl_image_get_size_x(cpl_imagelist_get(cu,0))+</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>          Z*cpl_image_get_size_x(cpl_imagelist_get(cu,0))*</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>            cpl_image_get_size_y(cpl_imagelist_get(cu,0));</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> cpl_image *</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> sinfo_new_c_bezier_interpolate_image(cpl_image *im,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                                      cpl_image *mask,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                                      new_Lookup *look,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                                            <span class="keywordtype">short</span> rx,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                            <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                                            <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                            <span class="keywordtype">int</span> max_rad ,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                                            <span class="keywordtype">float</span>   ** slit_edges )</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordtype">int</span> i,j,count;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_imagelist * sc_im,* drs_sc_mask;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_image *auxImage;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_image *tempMask;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordtype">short</span> szx,szy,szz;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">/*float ant,new,dif;*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordtype">float</span>* padata=NULL;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     cpl_image* sc_img=NULL;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cpl_image* drs_img=NULL;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     mlx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     mly=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="comment">/* allocate memory for sub cubes*/</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       sc_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       cpl_imagelist_set(sc_im,sc_img,i);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       drs_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       cpl_imagelist_set(drs_sc_mask,drs_img,i);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">if</span> ( NULL == ( tempMask = cpl_image_new(mlx, mly, CPL_TYPE_FLOAT) ) )</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for temporary "</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                         <span class="stringliteral">"dead pixel mask\n"</span>) ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     ptdata=cpl_image_get_data_float(tempMask);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     count=0;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         <span class="keywordflow">if</span> ( pmdata[sinfo_im_xy(im,i,j)] ==  cubePT_BADPIXEL )</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>           rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>           pidata[sinfo_im_xy(im,i,j)] =</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                    sinfo_new_c_bezier_correct_pixel( i, j, im, mask, sc_im,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                                drs_sc_mask, look, rx_loop, ry_loop, rz_loop );</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           <span class="comment">/* if not enough neighbors found, increase size of sub</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">                     cube until max radius is reached */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>           <span class="keywordflow">while</span> ( pidata[sinfo_im_xy(im,i,j)] == cubeNONEIGHBOR &&</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                           rx_loop < rx && ry_loop < ry && rz_loop < rz )</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>             {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>               rx_loop++ ; ry_loop++; rz_loop++;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>               <span class="comment">/* sinfo_msg_warning("Increasing radius to %d, in %d %d",</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">                                            rx_loop, i, j) ; */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>               pidata[sinfo_im_xy(im,i,j)] =</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                         sinfo_new_c_bezier_correct_pixel( i, j, im, mask, sc_im,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                                 drs_sc_mask, look, rx_loop, ry_loop, rz_loop );</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>             }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>           <span class="comment">/* If still not enough neighbors, make result NaN = ZERO</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">                     in spred convention */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>           <span class="keywordflow">if</span> ( pidata[sinfo_im_xy(im,i,j)] == cubeNONEIGHBOR )</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>               pidata[sinfo_im_xy(im,i,j)] = ZERO ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>             }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         count++;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         <span class="keywordflow">if</span> ( pidata[sinfo_im_xy(im,i,j)] == ZERO )</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>           {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         ptdata[sinfo_im_xy(tempMask,i,j)] = 0 ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>           }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>          <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>           {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         ptdata[sinfo_im_xy(tempMask,i,j)] = 1 ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>           }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     sinfo_msg(<span class="stringliteral">"Replacing NaN\n"</span>);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     auxImage=sinfo_interpol_source_image( im, tempMask, max_rad, slit_edges );</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     padata=cpl_image_get_data_float(auxImage);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordflow">if</span> ( isnan(pidata[sinfo_im_xy(im,i,j)])) <span class="comment">/*<= -2e10ZERO )*/</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>           <span class="comment">/* sinfo_msg_warning("Replacing NaN -> %d %d %f\n",</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">                                       i,j, padata[sinfo_im_xy(im,i,j)] ); */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         pidata[sinfo_im_xy(im,i,j)] = padata[sinfo_im_xy(im,i,j)];</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     cpl_image_delete(auxImage);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     cpl_imagelist_delete(sc_im);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     cpl_imagelist_delete(drs_sc_mask);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     sinfo_msg(<span class="stringliteral">"bad pixels count: %d\n"</span>,count);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">return</span> im;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> cpl_image *</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> sinfo_new_c_bezier_find_bad( cpl_image *im,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                                    cpl_image *mask,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                                    <span class="comment">/* Lookup *look,*/</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                                    <span class="keywordtype">short</span> rx,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                    <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                                    <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                        <span class="keywordtype">short</span> lowerI,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                    <span class="keywordtype">short</span> highI,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                    <span class="keywordtype">short</span> lowerJ,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                                    <span class="keywordtype">short</span> highJ,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                                    <span class="keywordtype">float</span> factor )</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> {</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="keywordtype">int</span> i,j,count;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     cpl_imagelist * sc_im,* drs_sc_mask;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="keywordtype">short</span> szx,szy,szz;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordtype">float</span> <span class="comment">/*ant,*/</span>newValue,old<span class="comment">/*,dif,porcentage,distance*/</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordtype">double</span> med, stdev;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="comment">/*cpl_image *out;*/</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="comment">//float* pmdata=NULL;</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     cpl_image* sc_img=NULL;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     cpl_image* drs_img=NULL;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     mlx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     mly=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="comment">//pmdata=cpl_image_get_data_float(mask);</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="comment">/* allocate memory for sub cubes*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     }</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       sc_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       cpl_imagelist_set(sc_im,sc_img,i);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++) {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       drs_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       cpl_imagelist_set(drs_sc_mask,drs_img,i);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     }</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     count=0;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         <span class="keywordflow">if</span> ( i >= lowerI && i < highI && j >= lowerJ && j < highJ )</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         newValue = sinfo_new_c_bezier_correct_pixel_2D( i, j, im,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                                                 mask,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                                                                 sc_im,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                                                                 drs_sc_mask,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                                                                 <span class="comment">/* look,*/</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                                                                 rx_loop,</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                                                                 ry_loop,</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>                                                                 rz_loop,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                                                 &med,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                                                 &stdev,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                                                 factor );</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>             <span class="comment">/* if NaN returned, increase size of sub cube</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">                   until max radius is reached */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="keywordflow">while</span> ( newValue == ZERO && rx_loop < rx &&</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                         ry_loop < ry && rz_loop < rz )</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>             {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>               rx_loop++ ; ry_loop++; rz_loop++;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>               <span class="comment">/*sinfo_msg_warning("Increasing radius to %d,</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="comment">                        in %d %d", rx_loop, i, j) ;  */</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                    newValue = sinfo_new_c_bezier_correct_pixel_2D( i, j, im,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                                                       mask,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                                                       sc_im,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                                                     drs_sc_mask,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                                                     <span class="comment">/*, look*/</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                                                     rx_loop,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                                                     ry_loop,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                                                     rz_loop,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                                                                     &med,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                                                     &stdev,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                                                                     factor );</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>         <span class="keywordflow">if</span> ( isnan(newValue)) <span class="comment">/*<= -3.e10 ZERO )*/</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>         old = pidata[sinfo_im_xy(im,i,j)];</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>         <span class="keywordflow">if</span> ( newValue != old )</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>             {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>             pidata[sinfo_im_xy(im,i,j)] = newValue;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             <span class="comment">/*sinfo_msg_warning("[%d,%d]=%f -> %f, med= %f,</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">                      stdev=%f\n",i,j, old, newValue, med, stdev );*/</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             count++;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         }</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     sinfo_msg(<span class="stringliteral">"bad pixels count: %d\n"</span>,count);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     cpl_imagelist_delete(sc_im);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     cpl_imagelist_delete(drs_sc_mask);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     <span class="keywordflow">return</span> im;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="keywordtype">float</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> sinfo_new_c_bezier_correct_pixel(<span class="keywordtype">int</span> ipos,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                                  <span class="keywordtype">int</span> jpos,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                                  cpl_image * im,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                                  cpl_image * mask,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                      cpl_imagelist * sc_im,</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                                  cpl_imagelist * drs_sc_mask,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                  new_Lookup * look,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                                  <span class="keywordtype">short</span> rx,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                  <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                  <span class="keywordtype">short</span> rz )</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     <span class="comment">/*float indexIf,indexJf,sp;*/</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     cpl_image * X, * Y, * Z, * hX;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     cpl_imagelist  * id, * jd;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="keywordtype">int</span> idlx=0;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordtype">int</span> idly=0;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="keywordtype">int</span> idnp=0;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="keywordtype">int</span> drslx=0;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordtype">int</span> drsly=0;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordtype">int</span> drsnp=0;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     <span class="keywordtype">float</span>* pXdata=NULL;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keywordtype">float</span>* pYdata=NULL;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     <span class="keywordtype">float</span>* pZdata=NULL;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordtype">float</span>* phXdata=NULL;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keywordtype">float</span>* piddata=NULL;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="keywordtype">float</span>* pjddata=NULL;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordtype">float</span>* pscdata=NULL;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="keywordtype">float</span>* pdrsdata=NULL;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     cpl_image* id_img=NULL;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     cpl_image* jd_img=NULL;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     cpl_image* sc_img=NULL;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     cpl_image* drs_img=NULL;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     X  = look -> X;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     Y  = look -> Y;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     Z  = look -> Z;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     hX = look -> hX;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">id</span> = look -> id;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     jd = look -> jd;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">      phXdata=cpl_image_get_data_float(hX);</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">      if ( phXdata[sinfo_im_xy( hX, ipos, jpos)] > 1 )</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">    sinfo_msg_error(" double hit in position [%d,%d]=%f, "</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment">                        "can not correct\n",</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">        ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment">    return ( -2e10 );</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     phXdata=cpl_image_get_data_float(hX);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordflow">if</span> ( phXdata[sinfo_im_xy( hX, ipos, jpos)] < 1 )</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <span class="comment">/*sinfo_msg_error("no lookup in position [%d,%d]=%f, can not correct",</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">      ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;*/</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">return</span> ( ZERO );</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     pXdata=cpl_image_get_data_float(X);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     pYdata=cpl_image_get_data_float(Y);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     pZdata=cpl_image_get_data_float(Z);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     ic = pXdata[sinfo_im_xy( X, ipos, jpos)];</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     jc = pYdata[sinfo_im_xy( Y, ipos, jpos)];</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     kc = pZdata[sinfo_im_xy( Z, ipos, jpos)];</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="comment">/*if ( !(ipos % 16 )  )*/</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d\n"</span>,</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                     ipos,jpos, ic, jc, kc );</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="preprocessor"></span>    <span class="comment">/*limit to start not before the beginning of the cube*/</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d\n"</span>, ii, jj, kk );</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <span class="comment">/*limit to end not outside of the cube */</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     idlx=cpl_image_get_size_x(cpl_imagelist_get(<span class="keywordtype">id</span>,0));</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     idly=cpl_image_get_size_y(cpl_imagelist_get(<span class="keywordtype">id</span>,0));</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     idnp=cpl_imagelist_get_size(<span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     lx = idlx;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     ly = idly;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     lz = idnp;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">if</span> ( ( ic + rx ) >= idlx )</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     szx = szx - ( (ic+rx)-(lx-1) );</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordflow">if</span> ( ( jc + ry ) >= idly )</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     szy = szy - ( (jc+ry)-(ly-1) );</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordflow">if</span> ( ( kc + rz ) >= idnp )</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     szz = szz - ( (kc+rz)-(lz-1) );</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     drsnp=cpl_imagelist_get_size(drs_sc_mask);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Size of subcube: szx=%d,szy=%d,szz=%d\n"</span>, szx, szy, szz );</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="comment">/*fill whole mask with not available*/</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Fill Mask subcube of size: %d,%d,%d, with NOINFO\n"</span>,</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>                      drslx, drsly,  drsnp);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       drs_img=cpl_imagelist_get(drs_sc_mask,k);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>           pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>       }</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     }</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>      <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>      {</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>      <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>          {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>          <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>          {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                                   i,j,k,is,js,ks);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="preprocessor"></span>                 id_img=cpl_imagelist_get(<span class="keywordtype">id</span>,k);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>                  jd_img=cpl_imagelist_get(jd,k);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>                  piddata=cpl_image_get_data_float(id_img);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>                  pjddata=cpl_image_get_data_float(jd_img);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>                  drs_img=cpl_imagelist_get(drs_sc_mask,ks);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                  pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                  sc_img=cpl_imagelist_get(sc_im,ks);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                  pscdata=cpl_image_get_data_float(sc_img);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>          indexI = sinfo_new_nint( piddata[sinfo_cu_xy(<span class="keywordtype">id</span>,i,j)] );</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>          indexJ = sinfo_new_nint( pjddata[sinfo_cu_xy(jd,i,j)] );</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>          <span class="keywordflow">if</span> ( indexJ <= -1 || indexJ>=2048 || indexI == -1 )</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>            {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>              pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>              <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>            }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>          pscdata[sinfo_cu_xy(sc_im,is,js)]  =</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>                          pidata[sinfo_im_xy(im,indexI,indexJ)];</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>          pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]  =</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                          pmdata[sinfo_im_xy(mask,indexI,indexJ)];</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ;"</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                                 <span class="stringliteral">"  Sub is=%d, js=%d, ks=%d  ;"</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                                 <span class="stringliteral">"  Plane I=%d,J=%d ; mask %f ; im %f"</span>,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                         i, j, k, is, js, ks, indexI, indexJ,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                                 pmdata[sinfo_im_xy(mask,indexI,indexJ)],</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                                 pidata[sinfo_im_xy(im,indexI,indexJ)]);</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>          }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>          }</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>      }</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     <span class="comment">/*signal to correct this pixel*/</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>      drs_img=cpl_imagelist_get(drs_sc_mask,rz);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>      pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> <span class="keywordtype">float</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> sinfo_new_c_bezier_correct_pixel_2D(<span class="keywordtype">int</span> ipos,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                     <span class="keywordtype">int</span> jpos,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                                     cpl_image * im,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                                     cpl_image * mask,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                         cpl_imagelist * sc_im,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                                     cpl_imagelist * drs_sc_mask,</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                                     <span class="comment">/* Lookup * look,*/</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                                     <span class="keywordtype">short</span> rx, <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                                     <span class="keywordtype">short</span> rz ,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                                     <span class="keywordtype">double</span> *med ,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                         <span class="keywordtype">double</span> *stdev,</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                                     <span class="keywordtype">float</span> factor )</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="keywordtype">double</span> sum;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="keywordtype">int</span> counter;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <span class="keywordtype">float</span> sumarr[100];</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="keywordtype">int</span> drslx=0;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     <span class="keywordtype">int</span> drsly=0;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     <span class="keywordtype">int</span> drsnp=0;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordtype">float</span>* pidata=0;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keywordtype">float</span>* pmdata=0;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keywordtype">float</span>* pscdata=0;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="keywordtype">float</span>* pdrsdata=0;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     cpl_image* drs_img=NULL;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     cpl_image* sc_img=NULL;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     jc = 0;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     ic = ipos;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     kc = jpos;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d"</span>, ipos,jpos, ic, jc, kc );</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     <span class="comment">/*limit to start not before the beginning of the cube*/</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d"</span>, ii, jj, kk );</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="comment">/*limit to end not outside of the cube */</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     lx = ilx;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     ly = ily;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     lz = ily;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     <span class="keywordflow">if</span> ( ( ic + rx ) >= ilx )</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     szx = szx - ( (ic+rx)-(lx-1) );</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordflow">if</span> ( ( jc + ry ) >= ily )</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     szy = szy - ( (jc+ry)-(ly-1) );</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     <span class="keywordflow">if</span> ( ( kc + rz ) >= ily )</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     szz = szz - ( (kc+rz)-(lz-1) );</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> <span class="preprocessor"></span>    drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     drsnp=cpl_imagelist_get_size(drs_sc_mask);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Size of subcube : szx=%d,szy=%d,szz=%d"</span>, szx, szy, szz );</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="comment">/*fill whole mask with not available*/</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Fill Mask subcube of size:%d,%d,%d, with NOINFO"</span>,</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>                     drslx, drsly,  drsnp);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>       drs_img=cpl_imagelist_get(drs_sc_mask,k);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>       pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>       }</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     counter = 0;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     sum=0;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     memset(sumarr,0x00,<span class="keyword">sizeof</span>(sumarr));</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     pmdata=cpl_image_get_data(mask);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>      <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>      {</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>      <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>          {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>          <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>          {</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>                                   i,j,k,is,js,ks);</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> <span class="preprocessor"></span>         indexI = i;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>          indexJ = k;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>          <span class="keywordflow">if</span> ( isnan(pidata[sinfo_im_xy(mask,indexI,indexJ)]) )</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>            pmdata[sinfo_im_xy(mask,indexI,indexJ)] = 0;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>          <span class="keywordflow">if</span> ( pmdata[sinfo_im_xy(mask,indexI,indexJ)] == 1 &&</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>                             ( indexI != ipos || indexJ != jpos) )</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>            {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>              <span class="comment">/*sumarr[counter] = pidata[sinfo_im_xy(im,indexI,indexJ)];*/</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>              sum = sum + pidata[sinfo_im_xy(im,indexI,indexJ)];</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>              counter++;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>            }</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>          sc_img=cpl_imagelist_get(sc_im,ks);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>          pscdata[sinfo_cu_xy(sc_im,is,js)]=</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                         pidata[sinfo_im_xy(im,indexI,indexJ)];</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                  drs_img=cpl_imagelist_get(drs_sc_mask,ks);</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                  pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>          pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]=</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                          pmdata[sinfo_im_xy(mask,indexI,indexJ)];</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> <span class="preprocessor"></span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ;  "</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                                  <span class="stringliteral">"Sub is=%d, js=%d, ks=%d  ; "</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                                 <span class="stringliteral">" Plane I=%d,J=%d ; mask %f ; im %f"</span>,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                         i, j, k, is, js, ks, indexI, indexJ,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                                 pmdata[sinfo_im_xy(mask,indexI,indexJ)],</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                                 pidata[sinfo_im_xy(im,indexI,indexJ)]);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>          }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>          }</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>      }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     <span class="comment">/*signal to correct this pixel*/</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     drs_img=cpl_imagelist_get(drs_sc_mask,rz);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">if</span> ( counter )</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     *med = sum/counter;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     <span class="keywordflow">return</span>(pidata[sinfo_im_xy(im,ipos,jpos)]);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     <span class="comment">/*sinfo_msg_debug("%f %f %d\n",</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="comment">                      sum ,pidata[sinfo_im_xy(im,ipos,jpos)], counter);*/</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     sum =0;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     counter=0;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>       {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>       {</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>           {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         drs_img=cpl_imagelist_get(drs_sc_mask,ks);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         pdrsdata=cpl_image_get_data_float(drs_img);</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         indexI = i;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>         indexJ = k;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         <span class="keywordflow">if</span> ( pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] == 1 &&</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>                          ( indexI != ipos || indexJ != jpos) )</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>           {</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>               sc_img=cpl_imagelist_get(sc_im,ks);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>               pscdata=cpl_image_get_data_float(sc_img);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             sum=sum+((pscdata[sinfo_cu_xy(drs_sc_mask,is,js)]- *med) *</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>              (pscdata[sinfo_cu_xy(drs_sc_mask,is,js)] - *med ) );</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             counter++;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>           }</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>           }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>       }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>       }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">    double aux;</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="comment">    aux = sum;</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     sum   = sum / (counter - 1);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     *stdev = sqrt( sum );</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     <span class="keywordflow">if</span> ( (fabs( pidata[sinfo_im_xy(im,ipos,jpos)] - *med ) ></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>          factor * *stdev) ||</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>      isnan(pidata[sinfo_im_xy(im,ipos,jpos)]) )</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <span class="comment">/*sinfo_msg_debug("[%d,%d]: distance to mean = %f,"</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> <span class="comment">                          " thres =%f sum=%f, stdev=%f, counter=%d, aux= %f",</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">                ipos,jpos, fabs( pidata[sinfo_im_xy(im,ipos,jpos)] - *med),</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="comment">                    factor * *stdev, sum,*stdev, counter,aux );</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="comment">    pmdata[sinfo_im_xy(mask,ipos,jpos)] = 0;*/</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     }</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     <span class="keywordflow">return</span>(pidata[sinfo_im_xy(im,ipos,jpos)]);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> }</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> <span class="keywordtype">float</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keywordtype">short</span> pos;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> i,j,k;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     new_XYZW  indata[1000];</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     new_XYZW  res;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     new_XYZW  selected;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     <span class="keywordtype">float</span> step,cumstep,distance,selected_distance;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     new_Dim *point=NULL;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     <span class="keywordtype">double</span> munk;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     <span class="keywordtype">float</span>* padata=NULL;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     cpl_image* a_img=NULL;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     selected.w = 0;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     memset(indata,0x00,1000*<span class="keyword">sizeof</span>(new_XYZW));</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(im,0));</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(im,0));</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     inp=cpl_imagelist_get_size(im);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     pos=0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     <span class="keywordflow">for</span>( i=0; i < ilx; i++)</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keywordflow">for</span>( j=0; j < ily; j++)</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>         {</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="preprocessor"></span>    <span class="keywordtype">int</span> pix=0;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>            pix=i+j*ilx;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="preprocessor"></span>        <span class="keywordflow">for</span>( k=0; k < inp; k++)</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>           a_img=cpl_imagelist_get(action,k);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>                   padata=cpl_image_get_data_float(a_img);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>           i_img=cpl_imagelist_get(action,k);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>                   pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         <span class="keywordflow">if</span> ( padata[sinfo_cu_xy(action,i,j)] == cubePT_USE )</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>             {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Used im[%d,%d,%d]=%lf\n"</span>,</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>                                       i,j,k,pidata[pix]);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="preprocessor"></span>            indata[pos].x = i;</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>             indata[pos].y = j;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>             indata[pos].z = k;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>             indata[pos].w = pidata[sinfo_cu_xy(im,i,j)];</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>             pos++;</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>             }</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>             {</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>             <span class="keywordflow">if</span> ( padata[sinfo_cu_xy(action,i,j)] == cubePT_FIND )</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>             {</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                (*point).x = i;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                (*point).y = j;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                (*point).z = k;</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Find for im[%d,%d,%d]=%lf reason:%f"</span>,</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>                         i,j,k,pidata[pix],</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>                         padata[sinfo_cu_xy(action,i,j)]);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="preprocessor"></span>            }</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>             {</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> <span class="preprocessor"></span>            <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Ignored im[%d,%d,%d]=%lf reason:%f"</span>,</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>                         i,j,k,pidata[sinfo_im_xy(im,i,j)],</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>                         padata[pix]);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="preprocessor"></span>            }</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>             }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>         }</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         }</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordflow">if</span> ( pos < 2 )</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     {</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="preprocessor"></span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"subcube contains no valid pixels "</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                        <span class="stringliteral">"to use in iterpolation"</span>);</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="preprocessor"></span>    <span class="comment">/*i_img=cpl_imagelist_get((*point).z);</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="comment">          pidata=cpl_image_get_data_float(i_img);</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="comment">          return( pidata[sinfo_im_xy(im,(*point).x,(*point).y)] );*/</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     <span class="keywordflow">return</span>( cubeNONEIGHBOR );</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     }</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     step    = 0.01;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     cumstep = 0.0;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     selected_distance=1000;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     munk = pow( 1.0-cumstep, (<span class="keywordtype">double</span>)pos - 1 );</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <span class="keywordflow">for</span> ( i = 0 ; ( i < 100 ) && ( munk != 0.0 ); i++ )</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     memset( &res, 0x00, <span class="keyword">sizeof</span>(new_XYZW) );</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     sinfo_new_bezier( indata, pos-1, cumstep, munk, &res);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     distance = sqrt( pow( ((*point).x-res.x), 2)+</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>                      pow( ((*point).y-res.y), 2)+</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>                      pow( ((*point).z-res.z), 2) );</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     <span class="comment">/*sinfo_msg_debug("%lf %lf %lf %lf %lf\n",</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> <span class="comment">                          res.x,res.y,res.z,res.w,distance);*/</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     <span class="keywordflow">if</span> ( distance < selected_distance )</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>         {</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>         selected_distance = distance;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         selected.x = res.x;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         selected.y = res.y;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         selected.z = res.z;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>         selected.w = res.w;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>         }</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     cumstep = cumstep + step;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     munk = pow( 1.0 - cumstep, (<span class="keywordtype">double</span>)pos - 1 );</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> <span class="preprocessor"></span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Selected %lf %lf %lf %lf, distance=%lf"</span>,</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>                     selected.x,selected.y,selected.z,</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>                     selected.w,selected_distance);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="preprocessor"></span>   i_img=cpl_imagelist_get(im,(*point).z);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     pidata[sinfo_cu_xy(im,(*point).x,(*point).y)] = selected.w;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     <span class="keywordflow">return</span> selected.w;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span> </div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> sinfo_new_bezier(new_XYZW *p,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> munk,new_XYZW *res )</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> {</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>    <span class="keywordtype">int</span> k, kn, nn, nkn;</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>    <span class="keywordtype">double</span> blend, muk;</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>    muk = 1;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>    <span class="keywordflow">for</span> ( k = 0; k <= n; k++ ) {</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>       nn = n;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>       kn = k;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>       nkn = n - k;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>       blend = muk * munk;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>       muk *= mu;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       munk /= ( 1.0 - mu );</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>       <span class="keywordflow">while</span> ( nn >= 1 ) {</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>          blend *= (double)nn;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>          nn--;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>          <span class="keywordflow">if</span> ( kn > 1 ) {</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             blend /= (double)kn;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>             kn--;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>          }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>          <span class="keywordflow">if</span> ( nkn > 1 ) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>             blend /= (double)nkn;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>             nkn--;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>          }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>       }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>       res -> x += p[k].x * blend;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>       res -> y += p[k].y * blend;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>       res -> z += p[k].z * blend;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>       res -> w += p[k].w * blend;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>    }</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>    <span class="keywordflow">return</span>( 0 );</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> sinfo_new_c_create_XYZ( new_Lookup *l )</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     cpl_image *imX,*imY,*imZ,*imcX;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     <span class="keywordtype">short</span> i,j,k,indexI,indexJ,x,y,z;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="keywordtype">int</span> size;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     <span class="keywordtype">int</span> idlx=0;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     <span class="keywordtype">int</span> idly=0;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     <span class="keywordtype">int</span> idnp=0;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     <span class="keywordtype">float</span>* piddata=NULL;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     <span class="keywordtype">float</span>* pjddata=NULL;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     <span class="keywordtype">float</span>* pXdata=NULL;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     <span class="keywordtype">float</span>* pYdata=NULL;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     <span class="keywordtype">float</span>* pZdata=NULL;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     <span class="keywordtype">float</span>* phXdata=NULL;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>     cpl_image* j_img=NULL;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     idlx=cpl_image_get_size_x(cpl_imagelist_get(l->id,0));</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     idly=cpl_image_get_size_y(cpl_imagelist_get(l->id,0));</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     idnp=cpl_imagelist_get_size(l->id);</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     size = idlx*idly;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     <span class="keywordflow">if</span> ( NULL == (imX = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         {</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for X !\n"</span>) ;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <span class="keywordflow">if</span> ( NULL == (imY = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>         {</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for Y !\n"</span>) ;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         }</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordflow">if</span> ( NULL == (imZ = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         {</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for Z !\n"</span>) ;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         }</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     <span class="keywordflow">if</span> ( NULL == (imcX = cpl_image_new(size, size, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>         {</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for cX !\n"</span>) ;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         }</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     l -> X  = imX;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     l -> Y  = imY;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     l -> Z  = imZ;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     l -> hX = imcX;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     <span class="comment">/*Round id*/</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     <span class="keywordflow">for</span>( i = 0; i < idlx; i++)</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     {</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="keywordflow">for</span>( j = 0; j < idly; j++)</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>         {</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>         <span class="keywordflow">for</span>( k = 0; k < idnp; k++)</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>         {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>           i_img=cpl_imagelist_get(l->id,k);</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>           piddata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>           piddata[sinfo_cu_xy(l->id,i,j)] =</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>                   (float)sinfo_new_nint(piddata[sinfo_cu_xy(l->id,i,j)]);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>         }</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>         }</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="comment">/*Round jd*/</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="keywordflow">for</span>( i = 0; i < idlx; i++)</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     {</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     <span class="keywordflow">for</span>( j = 0; j < idly; j++)</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>         {</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>         <span class="keywordflow">for</span>( k = 0; k < idnp; k++)</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>         {</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>           j_img=cpl_imagelist_get(l->jd,k);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>           pjddata=cpl_image_get_data_float(j_img);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>           pjddata[sinfo_cu_xy(l->jd,i,j)] =</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>                  (float)sinfo_new_nint(pjddata[sinfo_cu_xy(l->jd,i,j)]);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>         }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     }</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     <span class="comment">/*Fill with -1 X Y Z*/</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     <span class="keywordflow">for</span>( i = 0; i < cpl_image_get_size_x(l -> X); i++)</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordflow">for</span>( j = 0; j < cpl_image_get_size_y(l -> X); j++)</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         {</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>           pXdata=cpl_image_get_data_float(l->X);</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>           pYdata=cpl_image_get_data_float(l->Y);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>           pZdata=cpl_image_get_data_float(l->Z);</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>           pXdata[sinfo_im_xy(l->X,i,j)] = ZERO;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>           pYdata[sinfo_im_xy(l->Y,i,j)] = ZERO;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>           pZdata[sinfo_im_xy(l->Z,i,j)] = ZERO;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         }</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     }</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="preprocessor">#define  FORW</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="preprocessor"></span><span class="preprocessor">#ifdef BACK</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>( x = idlx - 1;x>=0;x--)</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     {</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     <span class="keywordflow">for</span>( y = idly - 1;y>=0;y--)</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>         {</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         <span class="keywordflow">for</span>( z = idnp - 1;z>=0;z--)</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> #endif</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> #ifdef FORW</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     <span class="keywordflow">for</span>( x = 0; x <  idlx; x++)</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     {</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">for</span>( y = 0; y < idly; y++)</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         {</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <span class="keywordflow">for</span>( z = 0; z < idnp; z++)</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> #endif</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>           {</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>         i_img=cpl_imagelist_get(l->id,z);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>         piddata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         j_img=cpl_imagelist_get(l->jd,z);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         pjddata=cpl_image_get_data_float(j_img);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         indexI = piddata [sinfo_cu_xy(l->id,x,y)];</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         indexJ = pjddata [sinfo_cu_xy(l->jd,x,y)];</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         <span class="keywordflow">if</span> ( indexI > 0.0  && indexI < size  &&</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>              indexJ > 0.0  && indexJ < size )</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>             {</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>             <span class="comment">/*sinfo_msg_debug("%d %d %d = %f, %f\n",</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="comment">                      x,y,z,(float)ICube(x,y,z),(float)JCube(x,y,z));*/</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>               pXdata=cpl_image_get_data_float(l->X);</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>               pYdata=cpl_image_get_data_float(l->Y);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>               pZdata=cpl_image_get_data_float(l->Z);</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>               phXdata=cpl_image_get_data_float(l->hX);</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>               pXdata[sinfo_im_xy(l->X ,indexI,indexJ)] = x;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>               phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>                          phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>             pYdata[sinfo_im_xy(l->Y ,indexI,indexJ)] = y;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>             <span class="comment">/*phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =</span></div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> <span class="comment">                      phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;*/</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>             pZdata[sinfo_im_xy(l->Z ,indexI,indexJ)] = z;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>             <span class="comment">/*phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] =</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">                      phXdata[sinfo_im_xy(l->hX,indexI,indexJ)] + 1;*/</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>             }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>         }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     }</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     sinfo_msg(<span class="stringliteral">"Filled X Y Z , cX cY cZ 2D frames\n"</span>);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     <span class="keywordflow">return</span>(0);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> }</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> new_Lookup *</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> sinfo_new_lookup( <span class="keywordtype">void</span> )</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> {</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     new_Lookup *l;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     l = (new_Lookup*)cpl_calloc(1, <span class="keyword">sizeof</span>(new_Lookup));</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     <span class="keywordflow">return</span> (l);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> }</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> sinfo_new_destroy_lookup( new_Lookup *l )</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> {</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     <span class="keywordflow">if</span> ( l )</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>     cpl_free(l);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> }</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> sinfo_new_change_mask (cpl_image * mask, cpl_image * im)</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> {</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     <span class="comment">//int mlx=0;</span></div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="comment">//int mly=0;</span></div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     <span class="keywordflow">if</span> (mask == NULL || im == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>     <span class="comment">//mlx=cpl_image_get_size_x(mask);</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>     <span class="comment">//mly=cpl_image_get_size_y(mask);</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     pmdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     {</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>         <span class="keywordflow">if</span> (isnan(pidata[i]))</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>         {</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>             pmdata[i] = 0. ;</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>         }</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> cpl_image *</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> sinfo_new_c_bezier_find_cosmic( cpl_image *im,</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                                       cpl_image *mask,</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                                       new_Lookup *look,</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>                                       <span class="keywordtype">short</span> rx,</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                                       <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                                       <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>                           <span class="keywordtype">short</span> lowerI,</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                                       <span class="keywordtype">short</span> highI,</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                                       <span class="keywordtype">short</span> lowerJ,</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>                                       <span class="keywordtype">short</span> highJ,</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>                                       <span class="keywordtype">float</span> factor )</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> {</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     <span class="keywordtype">int</span> i,j,count;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     cpl_imagelist * sc_im,* drs_sc_mask;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     <span class="keywordtype">short</span> szx,szy,szz;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     <span class="keywordtype">float</span> <span class="comment">/*ant,*/</span>newValue,old<span class="comment">/*,dif,porcentage,distance*/</span>;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="keywordtype">double</span> med, stdev;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="comment">/*cpl_image *out;*/</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     <span class="keywordtype">short</span> rx_loop, ry_loop, rz_loop;</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="comment">//float* pmdata=NULL;</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> </div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     mlx=cpl_image_get_size_x(mask);</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     mly=cpl_image_get_size_y(mask);</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     <span class="comment">//pmdata=cpl_image_get_data_float(mask);</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     pidata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     <span class="keywordflow">if</span> ( mlx != ilx || mly != ily )</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     {</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" data & mask images not compatible in size\n"</span>) ;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     }</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <span class="comment">/* allocate memory for sub cubes*/</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     <span class="keywordflow">if</span> ( NULL == ( sc_im = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     {</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for data subcube\n"</span>) ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     }</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++){</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>       o_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>       cpl_imagelist_set(sc_im,o_img,i);</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     }</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     <span class="keywordflow">if</span> ( NULL == ( drs_sc_mask = cpl_imagelist_new() ) )</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>     {</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory for mask subcube\n"</span>) ;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     }</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     <span class="keywordflow">for</span>(i=0;i<szz;i++){</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>       o_img=cpl_image_new(szx,szy,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>       cpl_imagelist_set(drs_sc_mask,o_img,i);</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>     }</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> </div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>     count=0;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     <span class="keywordflow">for</span> ( i = 0 ; i < mlx; i++ )</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>     {</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         <span class="keywordflow">for</span> ( j = 0 ; j < mly ; j++ )</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         {</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         <span class="keywordflow">if</span> ( i >= lowerI && i < highI && j >= lowerJ && j < highJ )</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>         {</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>         rx_loop = 1 ; ry_loop = 1 ; rz_loop = 1 ;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>         newValue = sinfo_new_c_bezier_correct_cosmic( i, j, im,</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>                                                               mask, sc_im,</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>                                                               drs_sc_mask,</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>                                                               look,</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>                                                               rx_loop,</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>                                                               ry_loop,</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>                                                               rz_loop,</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>                                                               &med,</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>                                                               &stdev,</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>                                                               factor );</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>             <span class="comment">/* if no valid neighboors are found, increase size of</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment">                   sub cube until max radius is reached */</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>         <span class="keywordflow">while</span> ( newValue == cubeNONEIGHBOR && rx_loop < rx &&</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>                         ry_loop < ry && rz_loop < rz )</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>             {</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>               rx_loop++ ; ry_loop++; rz_loop++;</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>               <span class="comment">/*sinfo_msg_debug("Increasing radius to %d, in %d %d",</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment">                          rx_loop, i, j) ;  */</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>                    newValue = sinfo_new_c_bezier_correct_cosmic( i, j, im,</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>                                                                     mask,</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>                                                                     sc_im,</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>                                                                     drs_sc_mask,</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>                                                                     look,</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>                                                                     rx_loop,</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>                                                                     ry_loop,</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>                                                                     rz_loop,</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>                                                                     &med,</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                                                                     &stdev,</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                                                                      factor );</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>             }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>         <span class="comment">/*give up on increasing the size*/</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>         <span class="keywordflow">if</span> ( isnan(newValue) || newValue == cubeNONEIGHBOR )</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>                 <span class="comment">/*<= -3.e10 ZERO )*/</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>         old = pidata[sinfo_im_xy(im,i,j)];</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>         <span class="keywordflow">if</span> ( newValue != old )</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>             {</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>             pidata[sinfo_im_xy(im,i,j)] = newValue;</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             <span class="comment">/*sinfo_msg_debug("[%d,%d]=%f -> %f, med= %f, stdev=%f",</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">                      i,j, old, newValue, med, stdev ); */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>             count++;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>             }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>         }</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>         }</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> </div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"bad pixels count: %d"</span>,count);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>     cpl_imagelist_delete(sc_im);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>     cpl_imagelist_delete(drs_sc_mask);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="keywordflow">return</span> im;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> }</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="keywordtype">float</span></div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span> sinfo_new_c_bezier_correct_cosmic(<span class="keywordtype">int</span> ipos,</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>                                   <span class="keywordtype">int</span> jpos,</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>                                   cpl_image * im,</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>                                   cpl_image * mask,</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>                       cpl_imagelist * sc_im,</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>                                   cpl_imagelist * drs_sc_mask,</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>                                   new_Lookup * look,</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>                                   <span class="keywordtype">short</span> rx,</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>                                   <span class="keywordtype">short</span> ry,</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>                                   <span class="keywordtype">short</span> rz ,</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>                                   <span class="keywordtype">double</span> *med ,</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>                       <span class="keywordtype">double</span> *stdev,</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>                                   <span class="keywordtype">float</span> factor )</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> {</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     <span class="keywordtype">short</span> ic, jc, kc, ii, jj, kk<span class="comment">/*, sjj, skk*/</span>,is,js,ks;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     <span class="keywordtype">short</span> i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     <span class="comment">/*float indexIf,indexJf,sp;*/</span></div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     cpl_image * X, * Y, * Z, * hX;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     cpl_imagelist  * id, * jd;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <span class="keywordtype">short</span> counter;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>     <span class="keywordtype">double</span> sum;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>     <span class="keywordtype">float</span>* phXdata=NULL;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>     <span class="keywordtype">float</span>* pXdata=NULL;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>     <span class="keywordtype">float</span>* pYdata=NULL;</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     <span class="keywordtype">float</span>* pZdata=NULL;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> </div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>     <span class="keywordtype">float</span>* pimdata=NULL;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>     <span class="keywordtype">float</span>* pscdata=NULL;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     <span class="keywordtype">float</span>* pdrsdata=NULL;</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>     <span class="keywordtype">float</span>* piddata=NULL;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>     <span class="keywordtype">float</span>* pjddata=NULL;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>     <span class="keywordtype">float</span>* pmaskdata=NULL;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> </div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>     <span class="keywordtype">int</span> idlx=0;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>     <span class="keywordtype">int</span> idly=0;</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>     <span class="keywordtype">int</span> idnp=0;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> </div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>     <span class="keywordtype">int</span> drslx=0;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>     <span class="keywordtype">int</span> drsly=0;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>     <span class="keywordtype">int</span> drsnp=0;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     X  = look -> X;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>     Y  = look -> Y;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>     Z  = look -> Z;</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>     hX = look -> hX;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordtype">id</span> = look -> id;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     jd = look -> jd;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> </div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     phXdata=cpl_image_get_data_float(hX);</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     <span class="comment">/*if ( phXdata[sinfo_im_xy( hX, ipos, jpos)] > 1 )</span></div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> <span class="comment">    sinfo_msg_error("double hit in position [%d,%d]=%f, can not correct",</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> <span class="comment">        ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> <span class="comment">    return ( -2e10 );</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>     <span class="keywordflow">if</span> ( phXdata[sinfo_im_xy( hX, ipos, jpos)] < 1 )</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     {</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>     <span class="comment">/*sinfo_msg_error("no lookup  in position [%d,%d]=%f, can not correct",</span></div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment">      ipos,jpos,phXdata[sinfo_im_xy(hX,ipos,jpos)]) ;*/</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>     <span class="keywordflow">return</span> ( ZERO );</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     pXdata=cpl_image_get_data_float(X);</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     pYdata=cpl_image_get_data_float(Y);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     pZdata=cpl_image_get_data_float(Z);</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> </div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     ic = pXdata[sinfo_im_xy( X, ipos, jpos)];</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     jc = pYdata[sinfo_im_xy( Y, ipos, jpos)];</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     kc = pZdata[sinfo_im_xy( Z, ipos, jpos)];</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     <span class="comment">/*if ( !(ipos % 16 )  )*/</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Correcting bad pixel : ipos=%d,jpos=%d, "</span></div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>                     <span class="stringliteral">"in Cube -> ic=%d, jc=%d, kc=%d"</span>, ipos,jpos, ic, jc, kc );</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span> <span class="preprocessor"></span>    <span class="comment">/*limit to start not before the beginning of the cube*/</span></div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     ii = ic - rx; <span class="keywordflow">if</span> ( ii < 0 ) ii = 0;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     jj = jc - ry; <span class="keywordflow">if</span> ( jj < 0 ) jj = 0;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>     kk = kc - rz; <span class="keywordflow">if</span> ( kk < 0 ) kk = 0;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> </div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Start Point in Cube -> ii=%d,jj=%d,kk=%d"</span>, ii, jj, kk );</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     <span class="comment">/*limit to end not outside of the cube */</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     szx = (rx * 2 ) + 1;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     szy = (ry * 2 ) + 1;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     szz = (rz * 2 ) + 1;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>     idlx = cpl_image_get_size_x(cpl_imagelist_get(<span class="keywordtype">id</span>,0));</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     idly = cpl_image_get_size_y(cpl_imagelist_get(<span class="keywordtype">id</span>,0));</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     idnp = cpl_imagelist_get_size(<span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>     lx = idlx;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     ly = idly;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     lz = idnp;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <span class="keywordflow">if</span> ( ( ic + rx ) >= idlx )</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>     szx = szx - ( (ic+rx)-(lx-1) );</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> </div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     <span class="keywordflow">if</span> ( ( jc + ry ) >= idly )</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     szy = szy - ( (jc+ry)-(ly-1) );</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> </div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     <span class="keywordflow">if</span> ( ( kc + rz ) >= idnp )</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     szz = szz - ( (kc+rz)-(lz-1) );</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> </div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="preprocessor"></span>    <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Size of subcube : szx=%d,szy=%d,szz=%d\n"</span>, szx, szy, szz );</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     <span class="comment">/*fill whole mask with not available*/</span></div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     drsnp=cpl_imagelist_get_size(drs_sc_mask);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>     drslx=cpl_image_get_size_x(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     drsly=cpl_image_get_size_y(cpl_imagelist_get(drs_sc_mask,0));</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> </div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Fill Mask subcube of size: %d,%d,%d, with NOINFO"</span>,</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>                      drslx, drsly,  drsnp);</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> <span class="preprocessor"></span>    <span class="keywordflow">for</span>( i = 0; i < drslx; i++) {</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>       <span class="keywordflow">for</span>( j = 0; j < drsly; j++) {</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     <span class="keywordflow">for</span>( k = 0; k < drsnp; k++) {</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>       pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>       pdrsdata[sinfo_cu_xy(drs_sc_mask,i,j)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     }</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>       }</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     }</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     pimdata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>     pmaskdata=cpl_image_get_data_float(mask);</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     <span class="keywordflow">for</span>( i = ii,is=0;  i < ii+szx; i++,is++)</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>       {</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     <span class="keywordflow">for</span>( j = jj,js=0;  j < jj+szy; j++,js++)</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>       {</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>         <span class="keywordflow">for</span>( k = kk,ks=0;  k < kk+szz; k++,ks++)</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>           {</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"i=%d j=%d k=%d is=%d ij=%d ik=%d"</span>,</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>                 i,j,k,is,js,ks);</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="preprocessor"></span>        piddata=cpl_image_get_data_float(cpl_imagelist_get(<span class="keywordtype">id</span>,k));</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>         pjddata=cpl_image_get_data_float(cpl_imagelist_get(<span class="keywordtype">id</span>,k));</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>           pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,ks));</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>                 pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,ks));</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>         indexI = sinfo_new_nint( piddata[sinfo_cu_xy(<span class="keywordtype">id</span>,i,j)] );</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>         indexJ = sinfo_new_nint( pjddata[sinfo_cu_xy(jd,i,j)] );</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>         <span class="keywordflow">if</span> ( indexJ <= -1 || indexJ>=2048 || indexI == -1 )</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>           {</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>             pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>             <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>           }</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>         pscdata[sinfo_cu_xy(sc_im,is,js)]=</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>                          pimdata[sinfo_im_xy(im,indexI,indexJ)];</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>         pdrsdata[sinfo_cu_xy(drs_sc_mask,is,js)]=</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>                          pmaskdata[sinfo_im_xy(mask,indexI,indexJ)];</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> <span class="preprocessor">#ifdef DEBUG</span></div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="preprocessor"></span>        <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Cube i=%d, j=%d, k=%d  ; "</span></div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>                                 <span class="stringliteral">" Sub is=%d, js=%d, ks=%d  ; "</span></div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>                                 <span class="stringliteral">" Plane I=%d,J=%d ; mask %f ; im %f\n"</span>,</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                         i, j, k, is, js, ks, indexI, indexJ,</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>                                 pmaskdata[sinfo_im_xy(mask,indexI,indexJ)],</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>                                 pimdata[sinfo_im_xy(im,indexI,indexJ)]);</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>           }</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>       }</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>       }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="comment">/* ignoring the elements in the slitlet of the tested pixel */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     <span class="keywordflow">for</span>( i = 0; i < szx; i++) {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>       <span class="keywordflow">for</span>( k = 0;  k < szz; k++) {</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     pdrsdata[sinfo_cu_xy(drs_sc_mask,i,ry)] = cubePT_NOINFO;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>       }</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>     }</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> <span class="comment">/* now calculate mean and stdev in subcube */</span></div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> </div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>     counter = 0;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>     sum=0;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>     <span class="keywordflow">for</span>( i = 0; i < szx; i++)</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>       {</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>     <span class="keywordflow">for</span>( j = 0;  j < szy; j++)</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>       {</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>         <span class="keywordflow">for</span>( k = 0;  k < szz; k++)</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>           {</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>         pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>         pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,k));</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>         <span class="keywordflow">if</span> (pscdata[sinfo_cu_xy(sc_im ,i ,j)] != ZERO &&</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>                     pdrsdata[sinfo_cu_xy(drs_sc_mask,i ,j)] != cubePT_NOINFO)</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>           {</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>             sum = sum + pscdata[sinfo_cu_xy(sc_im ,i ,j)];</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>             counter++;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>           }</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>           }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>       }</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>       }</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> </div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>     *med = sum / counter ;</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>     counter = 0;</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>     sum=0;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     <span class="keywordflow">for</span>( i = 0; i < szx; i++)</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>       {</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     <span class="keywordflow">for</span>( j = 0;  j < szy; j++)</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>       {</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>         <span class="keywordflow">for</span>( k = 0;  k < szz; k++)</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>           {</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>         pscdata=cpl_image_get_data_float(cpl_imagelist_get(sc_im,k));</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>         pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,k));</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>         <span class="keywordflow">if</span> (pscdata[sinfo_cu_xy(sc_im ,i ,j)] != ZERO &&</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>                     pdrsdata[sinfo_cu_xy(drs_sc_mask,i ,j)] != cubePT_NOINFO)</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>           {</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>                sum = sum + (pscdata[sinfo_cu_xy(sc_im ,i ,j)] - *med) *</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>                                    (pscdata[sinfo_cu_xy(sc_im ,i ,j)] - *med) ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>                counter++;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>           }</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>           }</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>       }</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>       }</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     *stdev = sqrt( sum / ( counter - 1 ) );</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <span class="keywordflow">if</span> ( (fabs( pimdata[sinfo_im_xy(im,ipos,jpos)] - *med ) ></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>           factor * *stdev) ||</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>           isnan(pimdata[sinfo_im_xy(im,ipos,jpos)]) )</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>     {</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     pdrsdata=cpl_image_get_data_float(cpl_imagelist_get(drs_sc_mask,rz));</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     pdrsdata[sinfo_cu_xy(drs_sc_mask,rx,ry)] = cubePT_FIND;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <span class="keywordflow">return</span> ( sinfo_new_c_bezier_interpol( sc_im, drs_sc_mask ) );</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     }</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>         <span class="keywordflow">return</span>(pimdata[sinfo_im_xy(im,ipos,jpos)]);</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span> </div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> }</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__bezier_8h_source.html b/html/sinfo__new__bezier_8h_source.html
index 3c569e8..09f91b0 100644
--- a/html/sinfo__new__bezier_8h_source.html
+++ b/html/sinfo__new__bezier_8h_source.html
@@ -2,198 +2,229 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_bezier.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_bezier.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_BEZIER_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_BEZIER_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_bezier.h,v 1.12 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  10/10/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * bezier.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * bad pixel interpolation routines using bezier splines</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define cubeNONEIGHBOR  -1000000 </span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="comment">/* define new number that indicates that not enough neighors </span>
-<a name="l00050"></a>00050 <span class="comment">   are available for sinfo_Bezier correction */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define cubePT_BADPIXEL   0 </span><span class="comment">/*Bad pixel*/</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define cubePT_USE        1 </span><span class="comment">/*Good pixel*/</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define cubePT_FIND       2 </span><span class="comment">/*Correct that pixel*/</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define cubePT_NOINFO     3 </span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>
-<a name="l00056"></a>00056 <span class="keyword">typedef</span> <span class="keyword">struct </span>new_dim_ {
-<a name="l00057"></a>00057   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> x;
-<a name="l00058"></a>00058   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> y;
-<a name="l00059"></a>00059   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> z;
-<a name="l00060"></a>00060 } new_Dim;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keyword">typedef</span> <span class="keyword">struct </span>new_xyzw_ {
-<a name="l00063"></a>00063   <span class="keywordtype">double</span> x;
-<a name="l00064"></a>00064   <span class="keywordtype">double</span> y;
-<a name="l00065"></a>00065   <span class="keywordtype">double</span> z;
-<a name="l00066"></a>00066   <span class="keywordtype">double</span> w;
-<a name="l00067"></a>00067 } new_XYZW;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keyword">typedef</span> <span class="keyword">struct </span>new_lookup_ {
-<a name="l00070"></a>00070     cpl_image *X;
-<a name="l00071"></a>00071     cpl_image *hX;
-<a name="l00072"></a>00072     cpl_image *Y;
-<a name="l00073"></a>00073     cpl_image *Z;
-<a name="l00074"></a>00074     cpl_imagelist  *id;
-<a name="l00075"></a>00075     cpl_imagelist  *jd;
-<a name="l00076"></a>00076 } new_Lookup;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keywordtype">int</span> sinfo_im_xy(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y); 
-<a name="l00080"></a>00080 <span class="keywordtype">int</span> sinfo_im_xyz(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z); 
-<a name="l00081"></a>00081 <span class="keywordtype">int</span> sinfo_cu_xy(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y); 
-<a name="l00082"></a>00082 <span class="keywordtype">int</span> sinfo_cu_xyz(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z); 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00085"></a>00085 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00086"></a>00086 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 cpl_image * 
-<a name="l00089"></a>00089 sinfo_new_c_bezier_interpolate_image(cpl_image *im, 
-<a name="l00090"></a>00090                                           cpl_image *mask, 
-<a name="l00091"></a>00091                                           new_Lookup *look, 
-<a name="l00092"></a>00092                                           <span class="keywordtype">short</span> rx, 
-<a name="l00093"></a>00093                                           <span class="keywordtype">short</span> ry, 
-<a name="l00094"></a>00094                                           <span class="keywordtype">short</span> rz,
-<a name="l00095"></a>00095                           <span class="keywordtype">int</span> max_rad , 
-<a name="l00096"></a>00096                                           <span class="keywordtype">float</span>   ** slit_edges );
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 cpl_image * 
-<a name="l00099"></a>00099 sinfo_new_c_bezier_find_bad(cpl_image *im, 
-<a name="l00100"></a>00100                                  cpl_image *mask<span class="comment">/*, sinfo_new_lookup *look*/</span>, 
-<a name="l00101"></a>00101                                  <span class="keywordtype">short</span> rx, 
-<a name="l00102"></a>00102                                  <span class="keywordtype">short</span> ry, 
-<a name="l00103"></a>00103                                  <span class="keywordtype">short</span> rz,
-<a name="l00104"></a>00104                      <span class="keywordtype">short</span> lowerI, 
-<a name="l00105"></a>00105                                  <span class="keywordtype">short</span> highI, 
-<a name="l00106"></a>00106                                  <span class="keywordtype">short</span> lowerJ, 
-<a name="l00107"></a>00107                                  <span class="keywordtype">short</span> highJ, 
-<a name="l00108"></a>00108                                  <span class="keywordtype">float</span> factor );
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 <span class="keywordtype">float</span>      
-<a name="l00112"></a>00112 sinfo_new_c_bezier_correct_pixel(<span class="keywordtype">int</span> ipos, 
-<a name="l00113"></a>00113                                      <span class="keywordtype">int</span> jpos, 
-<a name="l00114"></a>00114                      cpl_image *im, 
-<a name="l00115"></a>00115                      cpl_image *mask, 
-<a name="l00116"></a>00116                      cpl_imagelist  *sc_im, 
-<a name="l00117"></a>00117                      cpl_imagelist  *drs_sc_mask, 
-<a name="l00118"></a>00118                      new_Lookup *look, 
-<a name="l00119"></a>00119                                      <span class="keywordtype">short</span> rx, 
-<a name="l00120"></a>00120                                      <span class="keywordtype">short</span> ry, 
-<a name="l00121"></a>00121                                      <span class="keywordtype">short</span> rz  );
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="keywordtype">float</span>      
-<a name="l00125"></a>00125 sinfo_new_c_bezier_correct_pixel_2D( <span class="keywordtype">int</span> ipos ,
-<a name="l00126"></a>00126                                         <span class="keywordtype">int</span> jpos, 
-<a name="l00127"></a>00127                         cpl_image *im, 
-<a name="l00128"></a>00128                         cpl_image *mask, 
-<a name="l00129"></a>00129                         cpl_imagelist  *sc_im, 
-<a name="l00130"></a>00130                         cpl_imagelist  *drs_sc_mask, 
-<a name="l00131"></a>00131                         <span class="comment">/*new_Lookup *look,*/</span> 
-<a name="l00132"></a>00132                                         <span class="keywordtype">short</span> rx, 
-<a name="l00133"></a>00133                                         <span class="keywordtype">short</span> ry, 
-<a name="l00134"></a>00134                                         <span class="keywordtype">short</span> rz , 
-<a name="l00135"></a>00135                                         <span class="keywordtype">double</span> *med, 
-<a name="l00136"></a>00136                                         <span class="keywordtype">double</span> *stdev, 
-<a name="l00137"></a>00137                                         <span class="keywordtype">float</span> factor );
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 <span class="keywordtype">float</span> sinfo_new_c_bezier_interpol(cpl_imagelist * im, cpl_imagelist * action );
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="keywordtype">int</span> sinfo_new_bezier(new_XYZW *p,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> munk,new_XYZW *res );
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="keywordtype">float</span>      
-<a name="l00144"></a>00144 sinfo_new_c_bezier_correct_cosmic( <span class="keywordtype">int</span> ipos ,
-<a name="l00145"></a>00145                                        <span class="keywordtype">int</span> jpos,
-<a name="l00146"></a>00146                                        cpl_image *im,
-<a name="l00147"></a>00147                                        cpl_image *mask,
-<a name="l00148"></a>00148                                        cpl_imagelist  *sc_im,
-<a name="l00149"></a>00149                                        cpl_imagelist  *drs_sc_mask,
-<a name="l00150"></a>00150                                        new_Lookup *look, 
-<a name="l00151"></a>00151                                        <span class="keywordtype">short</span> rx, 
-<a name="l00152"></a>00152                                        <span class="keywordtype">short</span> ry, 
-<a name="l00153"></a>00153                                        <span class="keywordtype">short</span> rz , 
-<a name="l00154"></a>00154                                        <span class="keywordtype">double</span> *med, 
-<a name="l00155"></a>00155                                        <span class="keywordtype">double</span> *stdev, 
-<a name="l00156"></a>00156                                        <span class="keywordtype">float</span> factor );
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 cpl_image * 
-<a name="l00160"></a>00160 sinfo_new_c_bezier_find_cosmic(cpl_image *im, 
-<a name="l00161"></a>00161                                     cpl_image *mask, 
-<a name="l00162"></a>00162                                     new_Lookup *look, 
-<a name="l00163"></a>00163                                     <span class="keywordtype">short</span> rx, 
-<a name="l00164"></a>00164                                     <span class="keywordtype">short</span> ry, 
-<a name="l00165"></a>00165                                     <span class="keywordtype">short</span> rz,
-<a name="l00166"></a>00166                                     <span class="keywordtype">short</span> lowerI, 
-<a name="l00167"></a>00167                                     <span class="keywordtype">short</span> highI, 
-<a name="l00168"></a>00168                                     <span class="keywordtype">short</span> lowerJ, 
-<a name="l00169"></a>00169                                     <span class="keywordtype">short</span> highJ, 
-<a name="l00170"></a>00170                                     <span class="keywordtype">float</span> factor );
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="keywordtype">int</span> sinfo_new_c_create_XYZ( new_Lookup *l );
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 new_Lookup * sinfo_new_lookup( <span class="keywordtype">void</span> ) ;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 <span class="keywordtype">void</span> sinfo_new_destroy_lookup( new_Lookup *l ) ;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="keywordtype">int</span> sinfo_new_change_mask(cpl_image * mask,cpl_image * im ) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 <span class="preprocessor">#endif </span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_bezier.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_BEZIER_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_BEZIER_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_bezier.h,v 1.12 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  10/10/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * bezier.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * bad pixel interpolation routines using bezier splines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#define cubeNONEIGHBOR  -1000000 </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="comment">/* define new number that indicates that not enough neighors </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   are available for sinfo_Bezier correction */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#define cubePT_BADPIXEL   0 </span><span class="comment">/*Bad pixel*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define cubePT_USE        1 </span><span class="comment">/*Good pixel*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define cubePT_FIND       2 </span><span class="comment">/*Correct that pixel*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define cubePT_NOINFO     3 </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>new_dim_ {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> x;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> y;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> z;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> } new_Dim;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>new_xyzw_ {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">double</span> x;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordtype">double</span> y;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">double</span> z;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> w;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> } new_XYZW;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>new_lookup_ {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     cpl_image *X;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     cpl_image *hX;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     cpl_image *Y;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     cpl_image *Z;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     cpl_imagelist  *id;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     cpl_imagelist  *jd;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> } new_Lookup;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">int</span> sinfo_im_xy(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y); </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keywordtype">int</span> sinfo_im_xyz(cpl_image* im, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z); </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keywordtype">int</span> sinfo_cu_xy(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y); </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keywordtype">int</span> sinfo_cu_xyz(cpl_imagelist* cu, <span class="keywordtype">int</span> X, <span class="keywordtype">int</span> Y, <span class="keywordtype">int</span> Z); </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> cpl_image * </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_new_c_bezier_interpolate_image(cpl_image *im, </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                                           cpl_image *mask, </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                           new_Lookup *look, </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                           <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                                           <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                                           <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                           <span class="keywordtype">int</span> max_rad , </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                           <span class="keywordtype">float</span>   ** slit_edges );</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> cpl_image * </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> sinfo_new_c_bezier_find_bad(cpl_image *im, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                  cpl_image *mask<span class="comment">/*, sinfo_new_lookup *look*/</span>, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                  <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                  <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                  <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                      <span class="keywordtype">short</span> lowerI, </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                  <span class="keywordtype">short</span> highI, </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                  <span class="keywordtype">short</span> lowerJ, </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                                  <span class="keywordtype">short</span> highJ, </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                                  <span class="keywordtype">float</span> factor );</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keywordtype">float</span>      </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> sinfo_new_c_bezier_correct_pixel(<span class="keywordtype">int</span> ipos, </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                                      <span class="keywordtype">int</span> jpos, </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      cpl_image *im, </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                      cpl_image *mask, </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                      cpl_imagelist  *sc_im, </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      cpl_imagelist  *drs_sc_mask, </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                      new_Lookup *look, </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                      <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                      <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                                      <span class="keywordtype">short</span> rz  );</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keywordtype">float</span>      </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> sinfo_new_c_bezier_correct_pixel_2D( <span class="keywordtype">int</span> ipos ,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                                         <span class="keywordtype">int</span> jpos, </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                         cpl_image *im, </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                         cpl_image *mask, </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                         cpl_imagelist  *sc_im, </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                         cpl_imagelist  *drs_sc_mask, </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                         <span class="comment">/*new_Lookup *look,*/</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                                         <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                                         <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                                         <span class="keywordtype">short</span> rz , </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                                         <span class="keywordtype">double</span> *med, </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                                         <span class="keywordtype">double</span> *stdev, </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                         <span class="keywordtype">float</span> factor );</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keywordtype">float</span> sinfo_new_c_bezier_interpol(cpl_imagelist * im, cpl_imagelist * action );</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keywordtype">int</span> sinfo_new_bezier(new_XYZW *p,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> mu,<span class="keywordtype">double</span> munk,new_XYZW *res );</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keywordtype">float</span>      </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> sinfo_new_c_bezier_correct_cosmic( <span class="keywordtype">int</span> ipos ,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                        <span class="keywordtype">int</span> jpos,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                        cpl_image *im,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                        cpl_image *mask,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                        cpl_imagelist  *sc_im,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                        cpl_imagelist  *drs_sc_mask,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                        new_Lookup *look, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                        <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                        <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                        <span class="keywordtype">short</span> rz , </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                        <span class="keywordtype">double</span> *med, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                        <span class="keywordtype">double</span> *stdev, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                        <span class="keywordtype">float</span> factor );</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> cpl_image * </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> sinfo_new_c_bezier_find_cosmic(cpl_image *im, </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                                     cpl_image *mask, </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                     new_Lookup *look, </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                                     <span class="keywordtype">short</span> rx, </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                                     <span class="keywordtype">short</span> ry, </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                     <span class="keywordtype">short</span> rz,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                     <span class="keywordtype">short</span> lowerI, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                     <span class="keywordtype">short</span> highI, </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                                     <span class="keywordtype">short</span> lowerJ, </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                     <span class="keywordtype">short</span> highJ, </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                                     <span class="keywordtype">float</span> factor );</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="keywordtype">int</span> sinfo_new_c_create_XYZ( new_Lookup *l );</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> new_Lookup * sinfo_new_lookup( <span class="keywordtype">void</span> ) ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="keywordtype">void</span> sinfo_new_destroy_lookup( new_Lookup *l ) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keywordtype">int</span> sinfo_new_change_mask(cpl_image * mask,cpl_image * im ) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cube__ops_8c_source.html b/html/sinfo__new__cube__ops_8c_source.html
index 15f3d43..4f41b10 100644
--- a/html/sinfo__new__cube__ops_8c_source.html
+++ b/html/sinfo__new__cube__ops_8c_source.html
@@ -2,5011 +2,5054 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cube_ops.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cube_ops.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*$Id: sinfo_new_cube_ops.c,v 1.45 2012/09/21 10:55:38 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  17/05/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 <span class="comment">/*</span>
-<a name="l00029"></a>00029 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> * $Date: 2012/09/21 10:55:38 $</span>
-<a name="l00031"></a>00031 <span class="comment"> * $Revision: 1.45 $</span>
-<a name="l00032"></a>00032 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00033"></a>00033 <span class="comment"> */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/************************************************************************</span>
-<a name="l00036"></a>00036 <span class="comment">*   NAME</span>
-<a name="l00037"></a>00037 <span class="comment">*       sinfo_new_cube_ops.c -</span>
-<a name="l00038"></a>00038 <span class="comment">*       cube arithmetic routines</span>
-<a name="l00039"></a>00039 <span class="comment">*</span>
-<a name="l00040"></a>00040 <span class="comment">*   SYNOPSIS</span>
-<a name="l00041"></a>00041 <span class="comment">*    #include "sinfo_new_cube_ops.h"</span>
-<a name="l00042"></a>00042 <span class="comment">*</span>
-<a name="l00043"></a>00043 <span class="comment">*</span>
-<a name="l00044"></a>00044 <span class="comment">*</span>
-<a name="l00045"></a>00045 <span class="comment">*    2) cpl_imagelist *</span>
-<a name="l00046"></a>00046 <span class="comment">*       sinfo_new_cube_ops( cpl_imagelist    *    cube1,</span>
-<a name="l00047"></a>00047 <span class="comment">*                cpl_imagelist    *    cube2,</span>
-<a name="l00048"></a>00048 <span class="comment">*                int        operation)</span>
-<a name="l00049"></a>00049 <span class="comment">*</span>
-<a name="l00050"></a>00050 <span class="comment">*    3) cpl_imagelist *</span>
-<a name="l00051"></a>00051 <span class="comment">*       sinfo_new_cube_const_ops(</span>
-<a name="l00052"></a>00052 <span class="comment">*                     cpl_imagelist    * cube1,</span>
-<a name="l00053"></a>00053 <span class="comment">*                     double    constant,</span>
-<a name="l00054"></a>00054 <span class="comment">*                     int        operation)</span>
-<a name="l00055"></a>00055 <span class="comment">*</span>
-<a name="l00056"></a>00056 <span class="comment">*    4) cpl_imagelist *</span>
-<a name="l00057"></a>00057 <span class="comment">*       sinfo_new_cube_sub(</span>
-<a name="l00058"></a>00058 <span class="comment">*               cpl_imagelist    *    c1,</span>
-<a name="l00059"></a>00059 <span class="comment">*               cpl_imagelist    *    c2 )</span>
-<a name="l00060"></a>00060 <span class="comment">*</span>
-<a name="l00061"></a>00061 <span class="comment">*    5) cpl_imagelist *</span>
-<a name="l00062"></a>00062 <span class="comment">*       sinfo_new_cube_add(</span>
-<a name="l00063"></a>00063 <span class="comment">*               cpl_imagelist    *    c1,</span>
-<a name="l00064"></a>00064 <span class="comment">*               cpl_imagelist    *    c2  )</span>
-<a name="l00065"></a>00065 <span class="comment">*    6) cpl_imagelist *</span>
-<a name="l00066"></a>00066 <span class="comment">*       sinfo_new_cube_mul(</span>
-<a name="l00067"></a>00067 <span class="comment">*               cpl_imagelist    *    c1,</span>
-<a name="l00068"></a>00068 <span class="comment">*               cpl_imagelist    *    c2 )</span>
-<a name="l00069"></a>00069 <span class="comment">*</span>
-<a name="l00070"></a>00070 <span class="comment">*    7) cpl_imagelist *</span>
-<a name="l00071"></a>00071 <span class="comment">*       sinfo_new_cube_div(</span>
-<a name="l00072"></a>00072 <span class="comment">*               cpl_imagelist    *    c1,</span>
-<a name="l00073"></a>00073 <span class="comment">*               cpl_imagelist    *    c2 )</span>
-<a name="l00074"></a>00074 <span class="comment">*</span>
-<a name="l00075"></a>00075 <span class="comment">*    8) cpl_imagelist * sinfo_new_add_image_to_cube(cpl_imagelist * cu,</span>
-<a name="l00076"></a>00076 <span class="comment">                                                    cpl_image * im)</span>
-<a name="l00077"></a>00077 <span class="comment">*</span>
-<a name="l00078"></a>00078 <span class="comment">*    9) cpl_imagelist * sinfo_new_sub_image_from_cube (cpl_imagelist * cu,</span>
-<a name="l00079"></a>00079 <span class="comment">                                                    cpl_image * im)</span>
-<a name="l00080"></a>00080 <span class="comment">*</span>
-<a name="l00081"></a>00081 <span class="comment">*    10) cpl_imagelist * sinfo_new_mul_image_to_cube(cpl_imagelist * cu,</span>
-<a name="l00082"></a>00082 <span class="comment">                                                    cpl_image * im)</span>
-<a name="l00083"></a>00083 <span class="comment">*</span>
-<a name="l00084"></a>00084 <span class="comment">*    11) cpl_imagelist * sinfo_new_div_cube_by_image(cpl_imagelist * cu,</span>
-<a name="l00085"></a>00085 <span class="comment">                                                    cpl_image * im)</span>
-<a name="l00086"></a>00086 <span class="comment">*</span>
-<a name="l00087"></a>00087 <span class="comment">*    12) cpl_imagelist * sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu,</span>
-<a name="l00088"></a>00088 <span class="comment">                                                    Vector *spec)</span>
-<a name="l00089"></a>00089 <span class="comment">*</span>
-<a name="l00090"></a>00090 <span class="comment">*    13) cpl_imagelist * sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu,</span>
-<a name="l00091"></a>00091 <span class="comment">                                                    Vector *spec)</span>
-<a name="l00092"></a>00092 <span class="comment">*</span>
-<a name="l00093"></a>00093 <span class="comment">*    14) cpl_imagelist * sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu,</span>
-<a name="l00094"></a>00094 <span class="comment">                                                    Vector *spec)</span>
-<a name="l00095"></a>00095 <span class="comment">*</span>
-<a name="l00096"></a>00096 <span class="comment">*    15) cpl_imagelist * sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu,</span>
-<a name="l00097"></a>00097 <span class="comment">                                                    Vector *spec)</span>
-<a name="l00098"></a>00098 <span class="comment">*</span>
-<a name="l00099"></a>00099 <span class="comment">*    16) Vector * sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,</span>
-<a name="l00100"></a>00100 <span class="comment">*                                    int llx,</span>
-<a name="l00101"></a>00101 <span class="comment">*                                    int lly,</span>
-<a name="l00102"></a>00102 <span class="comment">*                                    int urx,</span>
-<a name="l00103"></a>00103 <span class="comment">*                                    int ury,</span>
-<a name="l00104"></a>00104 <span class="comment">*                                    double lo_reject,</span>
-<a name="l00105"></a>00105 <span class="comment">*                                    double hi_reject)</span>
-<a name="l00106"></a>00106 <span class="comment">*</span>
-<a name="l00107"></a>00107 <span class="comment">*    17) cpl_image * sinfo_new_median_cube(cpl_imagelist * cube)</span>
-<a name="l00108"></a>00108 <span class="comment">*</span>
-<a name="l00109"></a>00109 <span class="comment">*    18) cpl_image * sinfo_new_average_cube_to_image(cpl_imagelist * cube)</span>
-<a name="l00110"></a>00110 <span class="comment">*</span>
-<a name="l00111"></a>00111 <span class="comment">*    19) cpl_image * sinfo_new_sum_cube_to_image(cpl_imagelist * cube)</span>
-<a name="l00112"></a>00112 <span class="comment">*</span>
-<a name="l00113"></a>00113 <span class="comment">*    20) cpl_image *</span>
-<a name="l00114"></a>00114 <span class="comment">         sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,</span>
-<a name="l00115"></a>00115 <span class="comment">*                                                   float     dispersion,</span>
-<a name="l00116"></a>00116 <span class="comment">*                                                   float     centralWave,</span>
-<a name="l00117"></a>00117 <span class="comment">*                                                   float     initialLambda,</span>
-<a name="l00118"></a>00118 <span class="comment">*                                                   float     finalLambda)</span>
-<a name="l00119"></a>00119 <span class="comment">*</span>
-<a name="l00120"></a>00120 <span class="comment">*    21) cpl_image * sinfo_new_extract_image_from_cube(cpl_imagelist * cube,</span>
-<a name="l00121"></a>00121 <span class="comment">                                                    int plane_index)</span>
-<a name="l00122"></a>00122 <span class="comment">*</span>
-<a name="l00123"></a>00123 <span class="comment">*    22) Vector * sinfo_new_extract_spectrum_from_cube( cpl_imagelist * cube,</span>
-<a name="l00124"></a>00124 <span class="comment">                                                    int x_pos, int y_pos )</span>
-<a name="l00125"></a>00125 <span class="comment">*    23) cpl_imagelist *</span>
-<a name="l00126"></a>00126 <span class="comment">         sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,</span>
-<a name="l00127"></a>00127 <span class="comment">*                                         cpl_imagelist  * mergedCube,</span>
-<a name="l00128"></a>00128 <span class="comment">*                                         int        n_cubes,</span>
-<a name="l00129"></a>00129 <span class="comment">*                                         float    * cumoffsetx,</span>
-<a name="l00130"></a>00130 <span class="comment">*                                         float    * cumoffsety,</span>
-<a name="l00131"></a>00131 <span class="comment">*                                         float    * exptimes,</span>
-<a name="l00132"></a>00132 <span class="comment">*                                         char     * kernel_type )</span>
-<a name="l00133"></a>00133 <span class="comment">*    24) cpl_imagelist * sinfo_new_interpol_cube_simple( cpl_imagelist * cube,</span>
-<a name="l00134"></a>00134 <span class="comment">*                                      cpl_imagelist * badcube,</span>
-<a name="l00135"></a>00135 <span class="comment">*                                      int       maxdist )</span>
-<a name="l00136"></a>00136 <span class="comment">*</span>
-<a name="l00137"></a>00137 <span class="comment">*</span>
-<a name="l00138"></a>00138 <span class="comment">*    25) cpl_imagelist * sinfo_cube_zshift(const cpl_imagelist * cube,</span>
-<a name="l00139"></a>00139 <span class="comment">*                                          const double shift,</span>
-<a name="l00140"></a>00140 <span class="comment">*                                          double* rest)</span>
-<a name="l00141"></a>00141 <span class="comment">*</span>
-<a name="l00142"></a>00142 <span class="comment">*    26) cpl_imagelist * sinfo_cube_zshift_poly(const cpl_imagelist * cube,</span>
-<a name="l00143"></a>00143 <span class="comment">*                                               const double shift,</span>
-<a name="l00144"></a>00144 <span class="comment">*                                               const int    order)</span>
-<a name="l00145"></a>00145 <span class="comment">*</span>
-<a name="l00146"></a>00146 <span class="comment">*    27) cpl_imagelist * sinfo_cube_zshift_spline3(const cpl_imagelist * cube,</span>
-<a name="l00147"></a>00147 <span class="comment">*                                                  const double shift)</span>
-<a name="l00148"></a>00148 <span class="comment">*</span>
-<a name="l00149"></a>00149 <span class="comment">*</span>
-<a name="l00150"></a>00150 <span class="comment">*</span>
-<a name="l00151"></a>00151 <span class="comment">*</span>
-<a name="l00152"></a>00152 <span class="comment">*   DESCRIPTION</span>
-<a name="l00153"></a>00153 <span class="comment">*    2) 4 operations between 2 cubes</span>
-<a name="l00154"></a>00154 <span class="comment">*    3) 4 operations between a cube and a constant</span>
-<a name="l00155"></a>00155 <span class="comment">*    4)    subtract one cube from another</span>
-<a name="l00156"></a>00156 <span class="comment">*    5) add a cube to another</span>
-<a name="l00157"></a>00157 <span class="comment">*    6) multiply two cubes</span>
-<a name="l00158"></a>00158 <span class="comment">*    7) divide two cubes</span>
-<a name="l00159"></a>00159 <span class="comment">*    8) add an image to all planes in the cube</span>
-<a name="l00160"></a>00160 <span class="comment">*    9) subtract an image from all planes in the cube</span>
-<a name="l00161"></a>00161 <span class="comment">*    10) multiply an image to all planes in the cube</span>
-<a name="l00162"></a>00162 <span class="comment">*    11) divide all planes in the cube by an image</span>
-<a name="l00163"></a>00163 <span class="comment">*    12) adds a spectrum (in z-direction) to all data</span>
-<a name="l00164"></a>00164 <span class="comment">*                        points in a cube</span>
-<a name="l00165"></a>00165 <span class="comment">*    13) subtracts a spectrum (in z-direction) from all</span>
-<a name="l00166"></a>00166 <span class="comment">*                        data points in a cube</span>
-<a name="l00167"></a>00167 <span class="comment">*    14) multiplies a spectrum (in z-direction) to all data</span>
-<a name="l00168"></a>00168 <span class="comment">*                        points in a cube</span>
-<a name="l00169"></a>00169 <span class="comment">*    15) divides all data points of a cube by a spectrum</span>
-<a name="l00170"></a>00170 <span class="comment">*                        (in z-direction)</span>
-<a name="l00171"></a>00171 <span class="comment">*    16) averaging routine to get a better spectral S/N, sorts</span>
-<a name="l00172"></a>00172 <span class="comment">*        the values of the same z-position, cuts the lowest and</span>
-<a name="l00173"></a>00173 <span class="comment">*        highest values according to given thresholds and then</span>
-<a name="l00174"></a>00174 <span class="comment">*        takes the average within the x-y plane , cannot have</span>
-<a name="l00175"></a>00175 <span class="comment">*        a sum of low and high rejected values greater than 90%</span>
-<a name="l00176"></a>00176 <span class="comment">*        of all values</span>
-<a name="l00177"></a>00177 <span class="comment">*    17) determines the sinfo_new_median value in every pixel position</span>
-<a name="l00178"></a>00178 <span class="comment">*        by considering all pixels along the third axis.</span>
-<a name="l00179"></a>00179 <span class="comment">*        ZERO pixels in a plane are not considered. If all</span>
-<a name="l00180"></a>00180 <span class="comment">*        pixels at a position are not valid the result will</span>
-<a name="l00181"></a>00181 <span class="comment">*        be 'ZERO'.</span>
-<a name="l00182"></a>00182 <span class="comment">*    18) determines the average value in every pixel position</span>
-<a name="l00183"></a>00183 <span class="comment">*        by considering all pixels along the third axis.</span>
-<a name="l00184"></a>00184 <span class="comment">*        ZERO pixels in a plane are not considered. If all</span>
-<a name="l00185"></a>00185 <span class="comment">*        pixels at a position are not valid the result will</span>
-<a name="l00186"></a>00186 <span class="comment">*        be 'ZERO'.</span>
-<a name="l00187"></a>00187 <span class="comment">*    19) determines the sum value in every pixel position</span>
-<a name="l00188"></a>00188 <span class="comment">*        by considering all pixels along the third axis.</span>
-<a name="l00189"></a>00189 <span class="comment">*        ZERO pixels in a plane are not considered. If all</span>
-<a name="l00190"></a>00190 <span class="comment">*        pixels at a position are not valid the result will</span>
-<a name="l00191"></a>00191 <span class="comment">*        be 'ZERO'.</span>
-<a name="l00192"></a>00192 <span class="comment">*    20) determines the average value in every pixel position</span>
-<a name="l00193"></a>00193 <span class="comment">*        by considering only the pixels along the third axis</span>
-<a name="l00194"></a>00194 <span class="comment">*        which lie between the given wavelength values.</span>
-<a name="l00195"></a>00195 <span class="comment">*        These values are first recalculated to plane indices</span>
-<a name="l00196"></a>00196 <span class="comment">*        by using the given dispersion and minimum wavelength in</span>
-<a name="l00197"></a>00197 <span class="comment">*        the cube.</span>
-<a name="l00198"></a>00198 <span class="comment">*        ZERO pixels in a plane are not considered. If all</span>
-<a name="l00199"></a>00199 <span class="comment">*        pixels at a position are not valid the result will</span>
-<a name="l00200"></a>00200 <span class="comment">*        be 'ZERO'.</span>
-<a name="l00201"></a>00201 <span class="comment">*    21) returns the wanted image plane of the cube</span>
-<a name="l00202"></a>00202 <span class="comment">*    22) returns the wanted single spectrum of the cube</span>
-<a name="l00203"></a>00203 <span class="comment">*    23) merges jittered data cubes to one bigger cube</span>
-<a name="l00204"></a>00204 <span class="comment">*        by averaging the overlap regions weighted by</span>
-<a name="l00205"></a>00205 <span class="comment">*        the integration times. The x, y size of the final data</span>
-<a name="l00206"></a>00206 <span class="comment">*        cube is user given, and should be between 32 and 64</span>
-<a name="l00207"></a>00207 <span class="comment">*        pixels, while the relative pixel-offset (sub-pixel</span>
-<a name="l00208"></a>00208 <span class="comment">*        accuracy) of the single cubes with respect to the</span>
-<a name="l00209"></a>00209 <span class="comment">*        first cube in the list is read from the SEQ CUMOFFSETX,Y</span>
-<a name="l00210"></a>00210 <span class="comment">*        fits header keyword.</span>
-<a name="l00211"></a>00211 <span class="comment">*   24)  interpolates bad pixel of an object cube if a bad pixel</span>
-<a name="l00212"></a>00212 <span class="comment">*        mask cube is available by using the nearest neighbors</span>
-<a name="l00213"></a>00213 <span class="comment">*        in 3 dimensions.</span>
-<a name="l00214"></a>00214 <span class="comment">*</span>
-<a name="l00215"></a>00215 <span class="comment">*   25)  shifts an imagelist by a given amount to integer pixel accuracy</span>
-<a name="l00216"></a>00216 <span class="comment">*   26)  shifts an imagelist by a given amount to sub-pixel accuracy</span>
-<a name="l00217"></a>00217 <span class="comment">*   27)  shifts an imagelist by a given amount to sub-pixel accuracy</span>
-<a name="l00218"></a>00218 <span class="comment">*   FILES</span>
-<a name="l00219"></a>00219 <span class="comment">*</span>
-<a name="l00220"></a>00220 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00221"></a>00221 <span class="comment">*</span>
-<a name="l00222"></a>00222 <span class="comment">*   RETURN VALUES</span>
-<a name="l00223"></a>00223 <span class="comment">*</span>
-<a name="l00224"></a>00224 <span class="comment">*   CAUTIONS</span>
-<a name="l00225"></a>00225 <span class="comment">*</span>
-<a name="l00226"></a>00226 <span class="comment">*   EXAMPLES</span>
-<a name="l00227"></a>00227 <span class="comment">*</span>
-<a name="l00228"></a>00228 <span class="comment">*   SEE ALSO</span>
-<a name="l00229"></a>00229 <span class="comment">*</span>
-<a name="l00230"></a>00230 <span class="comment">*   BUGS</span>
-<a name="l00231"></a>00231 <span class="comment">*</span>
-<a name="l00232"></a>00232 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00233"></a>00233 <span class="comment">*/</span>
-<a name="l00234"></a>00234 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00235"></a>00235 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00236"></a>00236 <span class="preprocessor">#endif</span>
-<a name="l00237"></a>00237 <span class="preprocessor"></span>
-<a name="l00238"></a>00238 <span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 <span class="comment">/*</span>
-<a name="l00241"></a>00241 <span class="comment"> * System Headers</span>
-<a name="l00242"></a>00242 <span class="comment"> */</span>
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 <span class="preprocessor">#include <sys/types.h></span>
-<a name="l00245"></a>00245 <span class="preprocessor">#include <sys/times.h></span>
-<a name="l00246"></a>00246 <span class="preprocessor">#include <math.h></span>
-<a name="l00247"></a>00247 <span class="comment">/*</span>
-<a name="l00248"></a>00248 <span class="comment"> * Local Headers</span>
-<a name="l00249"></a>00249 <span class="comment"> */</span>
-<a name="l00250"></a>00250 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00251"></a>00251 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00252"></a>00252 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00253"></a>00253 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00254"></a>00254 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00255"></a>00255 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00256"></a>00256 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 <span class="preprocessor">#include <cpl_vector.h></span>
-<a name="l00259"></a>00259 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00260"></a>00260 <span class="comment"> *                            Function codes</span>
-<a name="l00261"></a>00261 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00265"></a>00265 sinfo_shift_cubes(cpl_imagelist** tmpcubes,
-<a name="l00266"></a>00266                   <span class="keywordtype">char</span>* kernel_type,
-<a name="l00267"></a>00267                   <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00268"></a>00268                   cpl_imagelist** cubes,
-<a name="l00269"></a>00269                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00270"></a>00270                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00271"></a>00271                   <span class="keywordtype">float</span>* sub_offsetx,
-<a name="l00272"></a>00272                   <span class="keywordtype">float</span>* sub_offsety,
-<a name="l00273"></a>00273                   <span class="keyword">const</span> <span class="keywordtype">int</span> mlx,
-<a name="l00274"></a>00274                   <span class="keyword">const</span> <span class="keywordtype">int</span> mly,
-<a name="l00275"></a>00275                   cpl_imagelist* mask);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00278"></a>00278 sinfo_build_mask_cube(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00279"></a>00279                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00280"></a>00280                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,
-<a name="l00281"></a>00281                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,
-<a name="l00282"></a>00282                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00283"></a>00283                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,
-<a name="l00284"></a>00284                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,
-<a name="l00285"></a>00285               <span class="keywordtype">double</span>    * exptimes,
-<a name="l00286"></a>00286                       cpl_imagelist** cubes,
-<a name="l00287"></a>00287                       cpl_imagelist** tmpcubes,
-<a name="l00288"></a>00288                       cpl_imagelist* mask);
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00291"></a>00291 sinfo_build_mask_cube_thomas(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00292"></a>00292                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00293"></a>00293                              <span class="keyword">const</span> <span class="keywordtype">int</span> olx,
-<a name="l00294"></a>00294                              <span class="keyword">const</span> <span class="keywordtype">int</span> oly,
-<a name="l00295"></a>00295                              <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00296"></a>00296                              <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,
-<a name="l00297"></a>00297                              <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,
-<a name="l00298"></a>00298                      <span class="keywordtype">double</span>    * exptimes,
-<a name="l00299"></a>00299                              cpl_imagelist** cubes,
-<a name="l00300"></a>00300                              cpl_imagelist** tmpcubes,
-<a name="l00301"></a>00301                  cpl_imagelist* mask);
-<a name="l00302"></a>00302 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00303"></a>00303 sinfo_compute_weight_average(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00304"></a>00304                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00305"></a>00305                              <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l00306"></a>00306                              <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l00307"></a>00307                  <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00308"></a>00308                              cpl_imagelist* mergedCube,
-<a name="l00309"></a>00309                              cpl_imagelist* mask,
-<a name="l00310"></a>00310                              cpl_imagelist** tmpcubes,
-<a name="l00311"></a>00311                  <span class="keywordtype">double</span>* exptimes,
-<a name="l00312"></a>00312                              <span class="keywordtype">int</span>* llx,
-<a name="l00313"></a>00313                              <span class="keywordtype">int</span>* lly);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00316"></a>00316 sinfo_check_input(cpl_imagelist** cubes,
-<a name="l00317"></a>00317                           <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00318"></a>00318                           <span class="keywordtype">float</span>* cumoffsetx,
-<a name="l00319"></a>00319                           <span class="keywordtype">float</span>* cumoffsety,
-<a name="l00320"></a>00320               <span class="keywordtype">double</span>* exptimes);
-<a name="l00321"></a>00321 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00322"></a>00322 sinfo_coadd_with_ks_clip2(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00323"></a>00323             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00324"></a>00324             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l00325"></a>00325             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l00326"></a>00326             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00327"></a>00327             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00328"></a>00328             <span class="keywordtype">int</span>* llx,
-<a name="l00329"></a>00329             <span class="keywordtype">int</span>* lly,
-<a name="l00330"></a>00330                         <span class="keywordtype">double</span>* exptimes,
-<a name="l00331"></a>00331             cpl_imagelist* mask,
-<a name="l00332"></a>00332             cpl_imagelist* mergedCube,
-<a name="l00333"></a>00333                           cpl_imagelist** tmpcubes);
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 <span class="comment">/* temporally commented out as not yet used</span>
-<a name="l00337"></a>00337 <span class="comment">static int</span>
-<a name="l00338"></a>00338 <span class="comment">sinfo_ks_clip(</span>
-<a name="l00339"></a>00339 <span class="comment">          const int n_cubes,</span>
-<a name="l00340"></a>00340 <span class="comment">              const int nc,</span>
-<a name="l00341"></a>00341 <span class="comment">          const int ilx,</span>
-<a name="l00342"></a>00342 <span class="comment">          const int ily,</span>
-<a name="l00343"></a>00343 <span class="comment">          const double kappa,</span>
-<a name="l00344"></a>00344 <span class="comment">          int* llx,</span>
-<a name="l00345"></a>00345 <span class="comment">          int* lly,</span>
-<a name="l00346"></a>00346 <span class="comment">          double* exptimes,</span>
-<a name="l00347"></a>00347 <span class="comment">          cpl_imagelist** tmpcubes,</span>
-<a name="l00348"></a>00348 <span class="comment">              float* podata,</span>
-<a name="l00349"></a>00349 <span class="comment">              float* pmdata,</span>
-<a name="l00350"></a>00350 <span class="comment">          const int x,</span>
-<a name="l00351"></a>00351 <span class="comment">          const int y,</span>
-<a name="l00352"></a>00352 <span class="comment">          const int m,</span>
-<a name="l00353"></a>00353 <span class="comment">          const int mlx,</span>
-<a name="l00354"></a>00354 <span class="comment">          const int olx</span>
-<a name="l00355"></a>00355 <span class="comment">          );</span>
-<a name="l00356"></a>00356 <span class="comment"></span>
-<a name="l00357"></a>00357 <span class="comment"></span>
-<a name="l00358"></a>00358 <span class="comment">*/</span>
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00361"></a>00361 sinfo_coadd_with_ks_clip(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00362"></a>00362             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00363"></a>00363             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l00364"></a>00364             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l00365"></a>00365             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00366"></a>00366             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00367"></a>00367             <span class="keywordtype">int</span>* llx,
-<a name="l00368"></a>00368             <span class="keywordtype">int</span>* lly,
-<a name="l00369"></a>00369                         <span class="keywordtype">double</span>* exptimes,
-<a name="l00370"></a>00370             cpl_imagelist* mask,
-<a name="l00371"></a>00371             cpl_imagelist* mergedCube,
-<a name="l00372"></a>00372                         cpl_imagelist** tmpcubes);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374 
-<a name="l00399"></a>00399 cpl_imagelist *
-<a name="l00400"></a>00400 sinfo_new_cube_ops(
-<a name="l00401"></a>00401     cpl_imagelist    *    cube1,
-<a name="l00402"></a>00402     cpl_imagelist    *    cube2,
-<a name="l00403"></a>00403     <span class="keywordtype">int</span>        operation)
-<a name="l00404"></a>00404 {
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406     <span class="keywordflow">if</span> (cube1==NULL || cube2==NULL)
-<a name="l00407"></a>00407     {
-<a name="l00408"></a>00408         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cubes"</span>);
-<a name="l00409"></a>00409         <span class="keywordflow">return</span> NULL ;
-<a name="l00410"></a>00410     }
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     <span class="keywordflow">switch</span>(operation)
-<a name="l00413"></a>00413     {
-<a name="l00414"></a>00414     <span class="keywordflow">case</span> <span class="charliteral">'+'</span>:
-<a name="l00415"></a>00415     <span class="keywordflow">return</span> sinfo_new_cube_add(cube1, cube2) ;
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <span class="keywordflow">case</span> <span class="charliteral">'-'</span>:
-<a name="l00418"></a>00418     <span class="keywordflow">return</span> sinfo_new_cube_sub(cube1, cube2) ;
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421     <span class="keywordflow">case</span> <span class="charliteral">'*'</span>:
-<a name="l00422"></a>00422     <span class="keywordflow">return</span> sinfo_new_cube_mul(cube1, cube2) ;
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425     <span class="keywordflow">case</span> <span class="charliteral">'/'</span>:
-<a name="l00426"></a>00426     <span class="keywordflow">return</span> sinfo_new_cube_div(cube1, cube2) ;
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429     <span class="keywordflow">default</span>:
-<a name="l00430"></a>00430     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal requested operation: aborting cube arithmetic"</span>) ;
-<a name="l00431"></a>00431     <span class="keywordflow">return</span> NULL ;
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433 }
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00437"></a>00437 <span class="comment">   Function    :    sinfo_new_cube_const_ops()</span>
-<a name="l00438"></a>00438 <span class="comment">   In         :    1 cube, 1 constant, operation to perform</span>
-<a name="l00439"></a>00439 <span class="comment">   Out         :    result cube</span>
-<a name="l00440"></a>00440 <span class="comment">   Job        :    4 operations between a cube and a constant</span>
-<a name="l00441"></a>00441 <span class="comment">   Notice    :    possible operations are:</span>
-<a name="l00442"></a>00442 <span class="comment">                  Addition    '+'</span>
-<a name="l00443"></a>00443 <span class="comment">                  Subtraction     '-'</span>
-<a name="l00444"></a>00444 <span class="comment">                  Multiplication    '*'</span>
-<a name="l00445"></a>00445 <span class="comment">                  Division    '/'</span>
-<a name="l00446"></a>00446 <span class="comment">                  Logarithm    'l'</span>
-<a name="l00447"></a>00447 <span class="comment">                  Power        '^'</span>
-<a name="l00448"></a>00448 <span class="comment">                  Exponentiation    'e'</span>
-<a name="l00449"></a>00449 <span class="comment"></span>
-<a name="l00450"></a>00450 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452 cpl_imagelist *
-<a name="l00453"></a>00453 sinfo_new_cube_const_ops(
-<a name="l00454"></a>00454     cpl_imagelist    *    c1,
-<a name="l00455"></a>00455     <span class="keywordtype">double</span>        constant,
-<a name="l00456"></a>00456     <span class="keywordtype">int</span>        operation)
-<a name="l00457"></a>00457 {
-<a name="l00458"></a>00458     <span class="keywordtype">int</span> ilx1=0;
-<a name="l00459"></a>00459     <span class="keywordtype">int</span> ily1=0;
-<a name="l00460"></a>00460     <span class="keywordtype">int</span> inp1=0;
-<a name="l00461"></a>00461     cpl_imagelist* c2=NULL;
-<a name="l00462"></a>00462     cpl_image* img1=NULL;
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466     <span class="keywordflow">if</span> (c1 == NULL)
-<a name="l00467"></a>00467     {
-<a name="l00468"></a>00468          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cube"</span>) ;
-<a name="l00469"></a>00469          <span class="keywordflow">return</span> NULL ;
-<a name="l00470"></a>00470     }
-<a name="l00471"></a>00471     inp1=cpl_imagelist_get_size(c1);
-<a name="l00472"></a>00472     img1=cpl_imagelist_get(c1,0);
-<a name="l00473"></a>00473     ilx1=cpl_image_get_size_x(img1);
-<a name="l00474"></a>00474     ily1=cpl_image_get_size_y(img1);
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480     <span class="keywordflow">if</span> ((constant == 0.0) && (operation == <span class="charliteral">'/'</span>))
-<a name="l00481"></a>00481     {
-<a name="l00482"></a>00482         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"division by zero requested "</span>
-<a name="l00483"></a>00483                         <span class="stringliteral">"in cube/constant operation"</span>) ;
-<a name="l00484"></a>00484         <span class="keywordflow">return</span> NULL ;
-<a name="l00485"></a>00485     }
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487     <span class="keywordflow">if</span> ( NULL == (c2 = cpl_imagelist_new()) )
-<a name="l00488"></a>00488     {
-<a name="l00489"></a>00489         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l00490"></a>00490         <span class="keywordflow">return</span> NULL ;
-<a name="l00491"></a>00491     }
-<a name="l00492"></a>00492 
-<a name="l00493"></a>00493     c2=cpl_imagelist_duplicate(c1);
-<a name="l00494"></a>00494     <span class="keywordflow">if</span>(operation == <span class="charliteral">'+'</span>) {
-<a name="l00495"></a>00495       cpl_imagelist_add_scalar(c2,constant);
-<a name="l00496"></a>00496     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'-'</span>) {
-<a name="l00497"></a>00497       cpl_imagelist_subtract_scalar(c2,constant);
-<a name="l00498"></a>00498     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'*'</span>) {
-<a name="l00499"></a>00499       cpl_imagelist_multiply_scalar(c2,constant);
-<a name="l00500"></a>00500     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'/'</span>) {
-<a name="l00501"></a>00501       cpl_imagelist_divide_scalar(c2,constant);
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503     } <span class="keywordflow">else</span> {
-<a name="l00504"></a>00504       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation not supported"</span>);
-<a name="l00505"></a>00505       <span class="keywordflow">return</span> NULL;
-<a name="l00506"></a>00506     }
-<a name="l00507"></a>00507     <span class="keywordflow">return</span> c2 ;
-<a name="l00508"></a>00508 }
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00512"></a>00512 <span class="comment"> * Function    :    sinfo_new_cube_sub()</span>
-<a name="l00513"></a>00513 <span class="comment"> * In         :    two cubes</span>
-<a name="l00514"></a>00514 <span class="comment"> * Out         :    result cube</span>
-<a name="l00515"></a>00515 <span class="comment"> * Job        :    subtract one cube from another</span>
-<a name="l00516"></a>00516 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518 cpl_imagelist *
-<a name="l00519"></a>00519 sinfo_new_cube_sub(
-<a name="l00520"></a>00520     cpl_imagelist    *    c1,
-<a name="l00521"></a>00521     cpl_imagelist    *    c2
-<a name="l00522"></a>00522 )
-<a name="l00523"></a>00523 {
-<a name="l00524"></a>00524     cpl_imagelist   *                 c3 ;
-<a name="l00525"></a>00525     ulong32            i ;
-<a name="l00526"></a>00526     <span class="keywordtype">int</span>                     np ;
-<a name="l00527"></a>00527     <span class="keywordtype">int</span> ilx1=0;
-<a name="l00528"></a>00528     <span class="keywordtype">int</span> ily1=0;
-<a name="l00529"></a>00529     <span class="keywordtype">int</span> inp1=0;
-<a name="l00530"></a>00530     <span class="keywordtype">int</span> ilx2=0;
-<a name="l00531"></a>00531     <span class="keywordtype">int</span> ily2=0;
-<a name="l00532"></a>00532     <span class="keywordtype">int</span> inp2=0;
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535     cpl_image* i_img=NULL;
-<a name="l00536"></a>00536     cpl_image* img1=NULL;
-<a name="l00537"></a>00537     cpl_image* img2=NULL;
-<a name="l00538"></a>00538     cpl_image* img3=NULL;
-<a name="l00539"></a>00539     <span class="keywordtype">float</span>* p1data=NULL;
-<a name="l00540"></a>00540     <span class="keywordtype">float</span>* p2data=NULL;
-<a name="l00541"></a>00541     <span class="keywordtype">float</span>* p3data=NULL;
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545     inp1=cpl_imagelist_get_size(c1);
-<a name="l00546"></a>00546     i_img=cpl_imagelist_get(c1,0);
-<a name="l00547"></a>00547     ilx1=cpl_image_get_size_x(i_img);
-<a name="l00548"></a>00548     ily1=cpl_image_get_size_y(i_img);
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551     inp2=cpl_imagelist_get_size(c2);
-<a name="l00552"></a>00552     i_img=cpl_imagelist_get(c2,0);
-<a name="l00553"></a>00553     ilx2=cpl_image_get_size_x(i_img);
-<a name="l00554"></a>00554     ily2=cpl_image_get_size_y(i_img);
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556     <span class="keywordflow">if</span> ((ilx1 != ilx2) ||
-<a name="l00557"></a>00557     (ily1 != ily2))
-<a name="l00558"></a>00558     {
-<a name="l00559"></a>00559     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot subtract"</span>) ;
-<a name="l00560"></a>00560     <span class="keywordflow">return</span> NULL ;
-<a name="l00561"></a>00561     }
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563     <span class="keywordflow">if</span> ((inp2 != inp1) &&
-<a name="l00564"></a>00564     (inp2 != 1))
-<a name="l00565"></a>00565     {
-<a name="l00566"></a>00566     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;
-<a name="l00567"></a>00567     <span class="keywordflow">return</span> NULL ;
-<a name="l00568"></a>00568     }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570     <span class="keywordflow">if</span> ( NULL == (c3 = cpl_imagelist_new()) )
-<a name="l00571"></a>00571     {
-<a name="l00572"></a>00572         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l00573"></a>00573         <span class="keywordflow">return</span> NULL ;
-<a name="l00574"></a>00574     }
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00577"></a>00577     {
-<a name="l00578"></a>00578       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);
-<a name="l00579"></a>00579       cpl_imagelist_set(c3,img3,np);
-<a name="l00580"></a>00580     }
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00584"></a>00584     {
-<a name="l00585"></a>00585       img1=cpl_imagelist_get(c1,np);
-<a name="l00586"></a>00586       p1data=cpl_image_get_data_float(img1);
-<a name="l00587"></a>00587       img2=cpl_imagelist_get(c2,np);
-<a name="l00588"></a>00588       p2data=cpl_image_get_data_float(img2);
-<a name="l00589"></a>00589       img3=cpl_imagelist_get(c3,np);
-<a name="l00590"></a>00590       p3data=cpl_image_get_data_float(img3);
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ily1 ; i++)
-<a name="l00593"></a>00593         {
-<a name="l00594"></a>00594             p3data[i] = p1data[i] - p2data[i] ;
-<a name="l00595"></a>00595     }
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598     <span class="keywordflow">return</span> c3 ;
-<a name="l00599"></a>00599 }
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00603"></a>00603 <span class="comment"> * Function    :    sinfo_new_cube_add()</span>
-<a name="l00604"></a>00604 <span class="comment"> * In         :    two cubes</span>
-<a name="l00605"></a>00605 <span class="comment"> * Out         :    result cube</span>
-<a name="l00606"></a>00606 <span class="comment"> * Job        :    add a cube to another</span>
-<a name="l00607"></a>00607 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609 cpl_imagelist *
-<a name="l00610"></a>00610 sinfo_new_cube_add(
-<a name="l00611"></a>00611     cpl_imagelist    *    c1,
-<a name="l00612"></a>00612     cpl_imagelist    *    c2
-<a name="l00613"></a>00613 )
-<a name="l00614"></a>00614 {
-<a name="l00615"></a>00615     cpl_imagelist  *          c3 ;
-<a name="l00616"></a>00616     ulong32        i ;
-<a name="l00617"></a>00617     <span class="keywordtype">int</span>         np ;
-<a name="l00618"></a>00618     <span class="keywordtype">int</span> ilx1=0;
-<a name="l00619"></a>00619     <span class="keywordtype">int</span> ily1=0;
-<a name="l00620"></a>00620     <span class="keywordtype">int</span> inp1=0;
-<a name="l00621"></a>00621     <span class="keywordtype">int</span> ilx2=0;
-<a name="l00622"></a>00622     <span class="keywordtype">int</span> ily2=0;
-<a name="l00623"></a>00623     <span class="keywordtype">int</span> inp2=0;
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626     cpl_image* i_img=NULL;
-<a name="l00627"></a>00627     cpl_image* img1=NULL;
-<a name="l00628"></a>00628     cpl_image* img2=NULL;
-<a name="l00629"></a>00629     cpl_image* img3=NULL;
-<a name="l00630"></a>00630     <span class="keywordtype">float</span>* p1data=NULL;
-<a name="l00631"></a>00631     <span class="keywordtype">float</span>* p2data=NULL;
-<a name="l00632"></a>00632     <span class="keywordtype">float</span>* p3data=NULL;
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636     inp1=cpl_imagelist_get_size(c1);
-<a name="l00637"></a>00637     i_img=cpl_imagelist_get(c1,0);
-<a name="l00638"></a>00638     ilx1=cpl_image_get_size_x(i_img);
-<a name="l00639"></a>00639     ily1=cpl_image_get_size_y(i_img);
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642     inp2=cpl_imagelist_get_size(c2);
-<a name="l00643"></a>00643     i_img=cpl_imagelist_get(c2,0);
-<a name="l00644"></a>00644     ilx2=cpl_image_get_size_x(i_img);
-<a name="l00645"></a>00645     ily2=cpl_image_get_size_y(i_img);
-<a name="l00646"></a>00646     <span class="keywordflow">if</span> ((ilx1 != ilx2) || (ily1 != ily2))
-<a name="l00647"></a>00647     {
-<a name="l00648"></a>00648     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot add"</span>) ;
-<a name="l00649"></a>00649     <span class="keywordflow">return</span> NULL ;
-<a name="l00650"></a>00650     }
-<a name="l00651"></a>00651     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))
-<a name="l00652"></a>00652     {
-<a name="l00653"></a>00653     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;
-<a name="l00654"></a>00654     <span class="keywordflow">return</span> NULL ;
-<a name="l00655"></a>00655     }
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657     <span class="keywordflow">if</span> (NULL == (c3 = cpl_imagelist_new()) )
-<a name="l00658"></a>00658     {
-<a name="l00659"></a>00659         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span>) ;
-<a name="l00660"></a>00660         <span class="keywordflow">return</span> NULL ;
-<a name="l00661"></a>00661     }
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00664"></a>00664     {
-<a name="l00665"></a>00665       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);
-<a name="l00666"></a>00666       cpl_imagelist_set(c3,img3,np);
-<a name="l00667"></a>00667     }
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00670"></a>00670     {
-<a name="l00671"></a>00671       img1=cpl_imagelist_get(c1,np);
-<a name="l00672"></a>00672       p1data=cpl_image_get_data_float(img1);
-<a name="l00673"></a>00673       img2=cpl_imagelist_get(c2,np);
-<a name="l00674"></a>00674       p2data=cpl_image_get_data_float(img2);
-<a name="l00675"></a>00675       img3=cpl_imagelist_get(c3,np);
-<a name="l00676"></a>00676       p3data=cpl_image_get_data_float(img3);
-<a name="l00677"></a>00677         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ily1 ; i++)
-<a name="l00678"></a>00678         {
-<a name="l00679"></a>00679         p3data[i] = p1data[i] + p2data[i] ;
-<a name="l00680"></a>00680         }
-<a name="l00681"></a>00681     }
-<a name="l00682"></a>00682 
-<a name="l00683"></a>00683     <span class="keywordflow">return</span> c3 ;
-<a name="l00684"></a>00684 }
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00687"></a>00687 <span class="comment"> * Function    :    sinfo_new_cube_mul()</span>
-<a name="l00688"></a>00688 <span class="comment"> * In         :    two cubes</span>
-<a name="l00689"></a>00689 <span class="comment"> * Out         :    result cube</span>
-<a name="l00690"></a>00690 <span class="comment"> * Job        :    multiply 2 cubes</span>
-<a name="l00691"></a>00691 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693 cpl_imagelist *
-<a name="l00694"></a>00694 sinfo_new_cube_mul(
-<a name="l00695"></a>00695     cpl_imagelist    *    c1,
-<a name="l00696"></a>00696     cpl_imagelist    *    c2
-<a name="l00697"></a>00697 )
-<a name="l00698"></a>00698 {
-<a name="l00699"></a>00699     cpl_imagelist             *c3 ;
-<a name="l00700"></a>00700     ulong32        i ;
-<a name="l00701"></a>00701     <span class="keywordtype">int</span>                np ;
-<a name="l00702"></a>00702     <span class="keywordtype">int</span> ilx1=0;
-<a name="l00703"></a>00703     <span class="keywordtype">int</span> ily1=0;
-<a name="l00704"></a>00704     <span class="keywordtype">int</span> inp1=0;
-<a name="l00705"></a>00705     <span class="keywordtype">int</span> ilx2=0;
-<a name="l00706"></a>00706     <span class="keywordtype">int</span> ily2=0;
-<a name="l00707"></a>00707     <span class="keywordtype">int</span> inp2=0;
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710     cpl_image* i_img=NULL;
-<a name="l00711"></a>00711     cpl_image* img1=NULL;
-<a name="l00712"></a>00712     cpl_image* img2=NULL;
-<a name="l00713"></a>00713     cpl_image* img3=NULL;
-<a name="l00714"></a>00714     <span class="keywordtype">float</span>* p1data=NULL;
-<a name="l00715"></a>00715     <span class="keywordtype">float</span>* p2data=NULL;
-<a name="l00716"></a>00716     <span class="keywordtype">float</span>* p3data=NULL;
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     inp1=cpl_imagelist_get_size(c1);
-<a name="l00722"></a>00722     i_img=cpl_imagelist_get(c1,0);
-<a name="l00723"></a>00723     ilx1=cpl_image_get_size_x(i_img);
-<a name="l00724"></a>00724     ily1=cpl_image_get_size_y(i_img);
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727     inp2=cpl_imagelist_get_size(c2);
-<a name="l00728"></a>00728     i_img=cpl_imagelist_get(c2,0);
-<a name="l00729"></a>00729     ilx2=cpl_image_get_size_x(i_img);
-<a name="l00730"></a>00730     ily2=cpl_image_get_size_y(i_img);
-<a name="l00731"></a>00731 
-<a name="l00732"></a>00732     <span class="keywordflow">if</span> ((ilx1 != ilx2) || (ily1 != ily2))
-<a name="l00733"></a>00733     {
-<a name="l00734"></a>00734     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot multiply"</span>) ;
-<a name="l00735"></a>00735     <span class="keywordflow">return</span> NULL ;
-<a name="l00736"></a>00736     }
-<a name="l00737"></a>00737 
-<a name="l00738"></a>00738     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))
-<a name="l00739"></a>00739     {
-<a name="l00740"></a>00740     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;
-<a name="l00741"></a>00741     <span class="keywordflow">return</span> NULL ;
-<a name="l00742"></a>00742     }
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744     <span class="keywordflow">if</span> ( NULL == (c3 = cpl_imagelist_new()) )
-<a name="l00745"></a>00745     {
-<a name="l00746"></a>00746         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l00747"></a>00747         <span class="keywordflow">return</span> NULL ;
-<a name="l00748"></a>00748     }
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00752"></a>00752     {
-<a name="l00753"></a>00753       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);
-<a name="l00754"></a>00754       cpl_imagelist_set(c3,img3,np);
-<a name="l00755"></a>00755     }
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00758"></a>00758     {
-<a name="l00759"></a>00759       img1=cpl_imagelist_get(c1,np);
-<a name="l00760"></a>00760       p1data=cpl_image_get_data_float(img1);
-<a name="l00761"></a>00761       img2=cpl_imagelist_get(c2,np);
-<a name="l00762"></a>00762       p2data=cpl_image_get_data_float(img2);
-<a name="l00763"></a>00763       img3=cpl_imagelist_get(c3,np);
-<a name="l00764"></a>00764       p3data=cpl_image_get_data_float(img3);
-<a name="l00765"></a>00765         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ilx2 ; i++)
-<a name="l00766"></a>00766         {
-<a name="l00767"></a>00767             p3data[i] = p1data[i] * p2data[i] ;
-<a name="l00768"></a>00768         }
-<a name="l00769"></a>00769     }
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771     <span class="keywordflow">return</span> c3 ;
-<a name="l00772"></a>00772 }
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00776"></a>00776 <span class="comment"> * Function    :    sinfo_new_cube_div()</span>
-<a name="l00777"></a>00777 <span class="comment"> * In         :    two cubes</span>
-<a name="l00778"></a>00778 <span class="comment"> * Out         :    result cube</span>
-<a name="l00779"></a>00779 <span class="comment"> * Job        :    divide 2 cubes</span>
-<a name="l00780"></a>00780 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782 cpl_imagelist *
-<a name="l00783"></a>00783 sinfo_new_cube_div(
-<a name="l00784"></a>00784     cpl_imagelist    *    c1,
-<a name="l00785"></a>00785     cpl_imagelist    *    c2
-<a name="l00786"></a>00786 )
-<a name="l00787"></a>00787 {
-<a name="l00788"></a>00788     cpl_imagelist *           c3 ;
-<a name="l00789"></a>00789     ulong32        i ;
-<a name="l00790"></a>00790     <span class="keywordtype">int</span>         np ;
-<a name="l00791"></a>00791     <span class="keywordtype">int</span> ilx1=0;
-<a name="l00792"></a>00792     <span class="keywordtype">int</span> ily1=0;
-<a name="l00793"></a>00793     <span class="keywordtype">int</span> inp1=0;
-<a name="l00794"></a>00794     <span class="keywordtype">int</span> ilx2=0;
-<a name="l00795"></a>00795     <span class="keywordtype">int</span> ily2=0;
-<a name="l00796"></a>00796     <span class="keywordtype">int</span> inp2=0;
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799     cpl_image* i_img=NULL;
-<a name="l00800"></a>00800     cpl_image* img1=NULL;
-<a name="l00801"></a>00801     cpl_image* img2=NULL;
-<a name="l00802"></a>00802     cpl_image* img3=NULL;
-<a name="l00803"></a>00803     <span class="keywordtype">float</span>* p1data=NULL;
-<a name="l00804"></a>00804     <span class="keywordtype">float</span>* p2data=NULL;
-<a name="l00805"></a>00805     <span class="keywordtype">float</span>* p3data=NULL;
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808     inp1=cpl_imagelist_get_size(c1);
-<a name="l00809"></a>00809     i_img=cpl_imagelist_get(c1,0);
-<a name="l00810"></a>00810     ilx1=cpl_image_get_size_x(i_img);
-<a name="l00811"></a>00811     ily1=cpl_image_get_size_y(i_img);
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814     inp2=cpl_imagelist_get_size(c2);
-<a name="l00815"></a>00815     i_img=cpl_imagelist_get(c2,0);
-<a name="l00816"></a>00816     ilx2=cpl_image_get_size_x(i_img);
-<a name="l00817"></a>00817     ily2=cpl_image_get_size_y(i_img);
-<a name="l00818"></a>00818 
-<a name="l00819"></a>00819     <span class="keywordflow">if</span> ((ilx1 != ilx2) ||
-<a name="l00820"></a>00820     (ily1 != ily2))
-<a name="l00821"></a>00821     {
-<a name="l00822"></a>00822     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot divide"</span>) ;
-<a name="l00823"></a>00823     <span class="keywordflow">return</span> NULL ;
-<a name="l00824"></a>00824     }
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))
-<a name="l00827"></a>00827     {
-<a name="l00828"></a>00828     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;
-<a name="l00829"></a>00829     <span class="keywordflow">return</span> NULL ;
-<a name="l00830"></a>00830     }
-<a name="l00831"></a>00831 
-<a name="l00832"></a>00832     <span class="keywordflow">if</span> (NULL == (c3 = cpl_imagelist_new()) )
-<a name="l00833"></a>00833     {
-<a name="l00834"></a>00834         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate a new cube"</span>) ;
-<a name="l00835"></a>00835         <span class="keywordflow">return</span> NULL ;
-<a name="l00836"></a>00836     }
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00839"></a>00839     {
-<a name="l00840"></a>00840       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);
-<a name="l00841"></a>00841       cpl_imagelist_set(c3,img3,np);
-<a name="l00842"></a>00842     }
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)
-<a name="l00845"></a>00845     {
-<a name="l00846"></a>00846       img1=cpl_imagelist_get(c1,np);
-<a name="l00847"></a>00847       p1data=cpl_image_get_data_float(img1);
-<a name="l00848"></a>00848       img2=cpl_imagelist_get(c2,np);
-<a name="l00849"></a>00849       p2data=cpl_image_get_data_float(img2);
-<a name="l00850"></a>00850       img3=cpl_imagelist_get(c3,np);
-<a name="l00851"></a>00851       p3data=cpl_image_get_data_float(img3);
-<a name="l00852"></a>00852 
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854         <span class="keywordflow">for</span> (i=0 ; i< (ulong32) ilx1*ily1 ; i++)
-<a name="l00855"></a>00855         {
-<a name="l00856"></a>00856             <span class="keywordflow">if</span> (fabs((<span class="keywordtype">double</span>)p2data[i]) < 1e-10)
-<a name="l00857"></a>00857             {
-<a name="l00858"></a>00858             p3data[i] = 0.0 ;
-<a name="l00859"></a>00859             }
-<a name="l00860"></a>00860             <span class="keywordflow">else</span>
-<a name="l00861"></a>00861             {
-<a name="l00862"></a>00862                 p3data[i] = p1data[i] / p2data[i] ;
-<a name="l00863"></a>00863             }
-<a name="l00864"></a>00864         }
-<a name="l00865"></a>00865     }
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867     <span class="keywordflow">return</span> c3 ;
-<a name="l00868"></a>00868 }
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870 
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00873"></a>00873 <span class="comment">   Function    :    sinfo_new_add_image_to_cube()</span>
-<a name="l00874"></a>00874 <span class="comment">   In         :    1 allocated cube, 1 allocated image</span>
-<a name="l00875"></a>00875 <span class="comment">   Out         :    result cube</span>
-<a name="l00876"></a>00876 <span class="comment">   Job        :    add an image to all planes in the cube</span>
-<a name="l00877"></a>00877 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879 cpl_imagelist *
-<a name="l00880"></a>00880 sinfo_new_add_image_to_cube(cpl_imagelist * cu, cpl_image * im)
-<a name="l00881"></a>00881 {
-<a name="l00882"></a>00882     cpl_imagelist *   cube ;
-<a name="l00883"></a>00883     <span class="keywordtype">int</span>               i ;
-<a name="l00884"></a>00884     <span class="keywordtype">int</span> clx=0;
-<a name="l00885"></a>00885     <span class="keywordtype">int</span> cly=0;
-<a name="l00886"></a>00886     <span class="keywordtype">int</span> cnp=0;
-<a name="l00887"></a>00887     <span class="keywordtype">int</span> ilx=0;
-<a name="l00888"></a>00888     <span class="keywordtype">int</span> ily=0;
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891     cpl_image* i_img=NULL;
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893     <span class="keywordflow">if</span> (cu==NULL || im==NULL)
-<a name="l00894"></a>00894     {
-<a name="l00895"></a>00895        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;
-<a name="l00896"></a>00896        <span class="keywordflow">return</span> NULL ;
-<a name="l00897"></a>00897     }
-<a name="l00898"></a>00898     cnp=cpl_imagelist_get_size(cu);
-<a name="l00899"></a>00899     i_img=cpl_imagelist_get(cu,0);
-<a name="l00900"></a>00900     clx=cpl_image_get_size_x(i_img);
-<a name="l00901"></a>00901     cly=cpl_image_get_size_y(i_img);
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903     ilx=cpl_image_get_size_x(im);
-<a name="l00904"></a>00904     ily=cpl_image_get_size_y(im);
-<a name="l00905"></a>00905 
-<a name="l00906"></a>00906     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))
-<a name="l00907"></a>00907     {
-<a name="l00908"></a>00908         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot add image to cube"</span>) ;
-<a name="l00909"></a>00909     <span class="keywordflow">return</span> NULL ;
-<a name="l00910"></a>00910     }
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912     cube = cpl_imagelist_duplicate (cu) ;
-<a name="l00913"></a>00913 
-<a name="l00914"></a>00914     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)
-<a name="l00915"></a>00915     {
-<a name="l00916"></a>00916       <span class="comment">/* AMO</span>
-<a name="l00917"></a>00917 <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span>
-<a name="l00918"></a>00918 <span class="comment">       */</span>
-<a name="l00919"></a>00919     cpl_image_add(cpl_imagelist_get(cube,i), im) ;
-<a name="l00920"></a>00920     }
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922     <span class="keywordflow">return</span> cube ;
-<a name="l00923"></a>00923 }
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00926"></a>00926 <span class="comment">   Function    :    sinfo_new_sub_image_from_cube()</span>
-<a name="l00927"></a>00927 <span class="comment">   In         :    1 allocated cube, 1 allocated image</span>
-<a name="l00928"></a>00928 <span class="comment">   Out         :       result cube</span>
-<a name="l00929"></a>00929 <span class="comment">   Job        :    subtract an image from all planes in the cube</span>
-<a name="l00930"></a>00930 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932 cpl_imagelist *
-<a name="l00933"></a>00933 sinfo_new_sub_image_from_cube (cpl_imagelist * cu, cpl_image * im)
-<a name="l00934"></a>00934 {
-<a name="l00935"></a>00935     cpl_imagelist   * cube ;
-<a name="l00936"></a>00936     <span class="keywordtype">int</span>               i ;
-<a name="l00937"></a>00937     <span class="keywordtype">int</span> clx=0;
-<a name="l00938"></a>00938     <span class="keywordtype">int</span> cly=0;
-<a name="l00939"></a>00939     <span class="keywordtype">int</span> cnp=0;
-<a name="l00940"></a>00940     <span class="keywordtype">int</span> ilx=0;
-<a name="l00941"></a>00941     <span class="keywordtype">int</span> ily=0;
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944     cpl_image* i_img=NULL;
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946     <span class="keywordflow">if</span> (cu==NULL || im==NULL)
-<a name="l00947"></a>00947     {
-<a name="l00948"></a>00948         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;
-<a name="l00949"></a>00949         <span class="keywordflow">return</span> NULL ;
-<a name="l00950"></a>00950     }
-<a name="l00951"></a>00951     cnp=cpl_imagelist_get_size(cu);
-<a name="l00952"></a>00952     i_img=cpl_imagelist_get(cu,0);
-<a name="l00953"></a>00953     clx=cpl_image_get_size_x(i_img);
-<a name="l00954"></a>00954     cly=cpl_image_get_size_y(i_img);
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     ilx=cpl_image_get_size_x(im);
-<a name="l00957"></a>00957     ily=cpl_image_get_size_y(im);
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))
-<a name="l00960"></a>00960     {
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot subtract image from cube"</span>) ;
-<a name="l00963"></a>00963         <span class="keywordflow">return</span> NULL ;
-<a name="l00964"></a>00964     }
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966     cube = cpl_imagelist_duplicate (cu) ;
-<a name="l00967"></a>00967 
-<a name="l00968"></a>00968     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)
-<a name="l00969"></a>00969     {
-<a name="l00970"></a>00970       <span class="comment">/* AMO</span>
-<a name="l00971"></a>00971 <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span>
-<a name="l00972"></a>00972 <span class="comment">       */</span>
-<a name="l00973"></a>00973     cpl_image_subtract(cpl_imagelist_get(cube,i), im) ;
-<a name="l00974"></a>00974     }
-<a name="l00975"></a>00975     <span class="keywordflow">return</span> cube ;
-<a name="l00976"></a>00976 }
-<a name="l00977"></a>00977 
-<a name="l00978"></a>00978 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00979"></a>00979 <span class="comment">   Function    :    sinfo_new_mul_image_to_cube()</span>
-<a name="l00980"></a>00980 <span class="comment">   In         :    1 allocated cube, 1 allocated image</span>
-<a name="l00981"></a>00981 <span class="comment">   Out         :    result cube</span>
-<a name="l00982"></a>00982 <span class="comment">   Job        :    multiply an image to all planes in the cube</span>
-<a name="l00983"></a>00983 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985 cpl_imagelist *
-<a name="l00986"></a>00986 sinfo_new_mul_image_to_cube(cpl_imagelist * cu, cpl_image * im)
-<a name="l00987"></a>00987 {
-<a name="l00988"></a>00988     cpl_imagelist   * cube ;
-<a name="l00989"></a>00989     <span class="keywordtype">int</span>               i ;
-<a name="l00990"></a>00990     <span class="keywordtype">int</span> clx=0;
-<a name="l00991"></a>00991     <span class="keywordtype">int</span> cly=0;
-<a name="l00992"></a>00992     <span class="keywordtype">int</span> cnp=0;
-<a name="l00993"></a>00993     <span class="keywordtype">int</span> ilx=0;
-<a name="l00994"></a>00994     <span class="keywordtype">int</span> ily=0;
-<a name="l00995"></a>00995 
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997     cpl_image* i_img=NULL;
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999     <span class="keywordflow">if</span> (cu==NULL || im==NULL)
-<a name="l01000"></a>01000     {
-<a name="l01001"></a>01001         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cube or null image"</span>) ;
-<a name="l01002"></a>01002         <span class="keywordflow">return</span> NULL ;
-<a name="l01003"></a>01003     }
-<a name="l01004"></a>01004     cnp=cpl_imagelist_get_size(cu);
-<a name="l01005"></a>01005     i_img=cpl_imagelist_get(cu,0);
-<a name="l01006"></a>01006     clx=cpl_image_get_size_x(i_img);
-<a name="l01007"></a>01007     cly=cpl_image_get_size_y(i_img);
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009     ilx=cpl_image_get_size_x(im);
-<a name="l01010"></a>01010     ily=cpl_image_get_size_y(im);
-<a name="l01011"></a>01011 
-<a name="l01012"></a>01012     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))
-<a name="l01013"></a>01013     {
-<a name="l01014"></a>01014     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot multiply image by cube"</span>) ;
-<a name="l01015"></a>01015     <span class="keywordflow">return</span> NULL ;
-<a name="l01016"></a>01016     }
-<a name="l01017"></a>01017 
-<a name="l01018"></a>01018     cube = cpl_imagelist_duplicate (cu) ;
-<a name="l01019"></a>01019 
-<a name="l01020"></a>01020     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)
-<a name="l01021"></a>01021     {
-<a name="l01022"></a>01022       <span class="comment">/* AMO</span>
-<a name="l01023"></a>01023 <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span>
-<a name="l01024"></a>01024 <span class="comment">       */</span>
-<a name="l01025"></a>01025     cpl_image_multiply(cpl_imagelist_get(cube,i), im) ;
-<a name="l01026"></a>01026     }
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028     <span class="keywordflow">return</span> cube ;
-<a name="l01029"></a>01029 }
-<a name="l01030"></a>01030 
-<a name="l01031"></a>01031 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01032"></a>01032 <span class="comment">   Function    :    sinfo_new_div_cube_by_image()</span>
-<a name="l01033"></a>01033 <span class="comment">   In         :    1 allocated cube, 1 allocated image</span>
-<a name="l01034"></a>01034 <span class="comment">   Out         :    result cube</span>
-<a name="l01035"></a>01035 <span class="comment">   Job        :    divide all planes in the cube by an image</span>
-<a name="l01036"></a>01036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038 cpl_imagelist *
-<a name="l01039"></a>01039 sinfo_new_div_cube_by_image(cpl_imagelist * cu, cpl_image * im)
-<a name="l01040"></a>01040 {
-<a name="l01041"></a>01041     cpl_imagelist   * cube ;
-<a name="l01042"></a>01042     <span class="keywordtype">int</span>               i ;
-<a name="l01043"></a>01043     <span class="keywordtype">int</span> clx=0;
-<a name="l01044"></a>01044     <span class="keywordtype">int</span> cly=0;
-<a name="l01045"></a>01045     <span class="keywordtype">int</span> cnp=0;
-<a name="l01046"></a>01046     <span class="keywordtype">int</span> ilx=0;
-<a name="l01047"></a>01047     <span class="keywordtype">int</span> ily=0;
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049 
-<a name="l01050"></a>01050     cpl_image* i_img=NULL;
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052     <span class="keywordflow">if</span> (cu==NULL || im==NULL)
-<a name="l01053"></a>01053     {
-<a name="l01054"></a>01054         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;
-<a name="l01055"></a>01055         <span class="keywordflow">return</span> NULL ;
-<a name="l01056"></a>01056     }
-<a name="l01057"></a>01057     cnp=cpl_imagelist_get_size(cu);
-<a name="l01058"></a>01058     i_img=cpl_imagelist_get(cu,0);
-<a name="l01059"></a>01059     clx=cpl_image_get_size_x(i_img);
-<a name="l01060"></a>01060     cly=cpl_image_get_size_y(i_img);
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062     ilx=cpl_image_get_size_x(im);
-<a name="l01063"></a>01063     ily=cpl_image_get_size_y(im);
-<a name="l01064"></a>01064 
-<a name="l01065"></a>01065     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))
-<a name="l01066"></a>01066     {
-<a name="l01067"></a>01067     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot divide cube by image"</span>) ;
-<a name="l01068"></a>01068     <span class="keywordflow">return</span> NULL ;
-<a name="l01069"></a>01069     }
-<a name="l01070"></a>01070 
-<a name="l01071"></a>01071     cube = cpl_imagelist_duplicate (cu) ;
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)
-<a name="l01074"></a>01074     {
-<a name="l01075"></a>01075       <span class="comment">/* AMO</span>
-<a name="l01076"></a>01076 <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span>
-<a name="l01077"></a>01077 <span class="comment">       */</span>
-<a name="l01078"></a>01078     cpl_image_divide(cpl_imagelist_get(cube,i), im) ;
-<a name="l01079"></a>01079     }
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081     <span class="keywordflow">return</span> cube ;
-<a name="l01082"></a>01082 }
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084 
-<a name="l01085"></a>01085 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01086"></a>01086 <span class="comment">   Function    :    sinfo_new_add_spectrum_to_cube()</span>
-<a name="l01087"></a>01087 <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span>
-<a name="l01088"></a>01088 <span class="comment">   Out         :    result cube</span>
-<a name="l01089"></a>01089 <span class="comment">   Job        :    adds a spectrum (in z-direction) to all data</span>
-<a name="l01090"></a>01090 <span class="comment">                        points in a cube</span>
-<a name="l01091"></a>01091 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01092"></a>01092 
-<a name="l01093"></a>01093 cpl_imagelist *
-<a name="l01094"></a>01094 sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu, Vector *spec)
-<a name="l01095"></a>01095 {
-<a name="l01096"></a>01096     cpl_imagelist *   cube ;
-<a name="l01097"></a>01097     <span class="keywordtype">int</span>         i ,j ;
-<a name="l01098"></a>01098     <span class="keywordtype">int</span> ilx=0;
-<a name="l01099"></a>01099     <span class="keywordtype">int</span> ily=0;
-<a name="l01100"></a>01100     <span class="keywordtype">int</span> inp=0;
-<a name="l01101"></a>01101     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01102"></a>01102     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01103"></a>01103     cpl_image* i_img=NULL;
-<a name="l01104"></a>01104     cpl_image* o_img=NULL;
-<a name="l01105"></a>01105 
-<a name="l01106"></a>01106     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)
-<a name="l01107"></a>01107     {
-<a name="l01108"></a>01108         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;
-<a name="l01109"></a>01109         <span class="keywordflow">return</span> NULL ;
-<a name="l01110"></a>01110     }
-<a name="l01111"></a>01111     inp=cpl_imagelist_get_size(cu);
-<a name="l01112"></a>01112     i_img=cpl_imagelist_get(cu,0);
-<a name="l01113"></a>01113     ilx=cpl_image_get_size_x(i_img);
-<a name="l01114"></a>01114     ily=cpl_image_get_size_y(i_img);
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116     <span class="keywordflow">if</span> ( inp != spec -> n_elements )
-<a name="l01117"></a>01117     {
-<a name="l01118"></a>01118         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;
-<a name="l01119"></a>01119         <span class="keywordflow">return</span> NULL ;
-<a name="l01120"></a>01120     }
-<a name="l01121"></a>01121 
-<a name="l01122"></a>01122     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new ()) )
-<a name="l01123"></a>01123     {
-<a name="l01124"></a>01124         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l01125"></a>01125         <span class="keywordflow">return</span> NULL ;
-<a name="l01126"></a>01126     }
-<a name="l01127"></a>01127     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01128"></a>01128     {
-<a name="l01129"></a>01129       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l01130"></a>01130       cpl_imagelist_set(cube,o_img,i);
-<a name="l01131"></a>01131     }
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133 
-<a name="l01134"></a>01134     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01135"></a>01135     {
-<a name="l01136"></a>01136       i_img=cpl_imagelist_get(cu,i);
-<a name="l01137"></a>01137       pidata=cpl_image_get_data_float(i_img);
-<a name="l01138"></a>01138       o_img=cpl_imagelist_get(cube,i);
-<a name="l01139"></a>01139       podata=cpl_image_get_data_float(o_img);
-<a name="l01140"></a>01140         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)
-<a name="l01141"></a>01141         {
-<a name="l01142"></a>01142             podata[j] = pidata[j] + spec -> data[i] ;
-<a name="l01143"></a>01143         }
-<a name="l01144"></a>01144     }
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146     <span class="keywordflow">return</span> cube ;
-<a name="l01147"></a>01147 }
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01150"></a>01150 <span class="comment">   Function    :    sinfo_new_sub_spectrum_from_cube()</span>
-<a name="l01151"></a>01151 <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span>
-<a name="l01152"></a>01152 <span class="comment">   Out         :    result cube</span>
-<a name="l01153"></a>01153 <span class="comment">   Job        :    subtracts a spectrum (in z-direction) from all</span>
-<a name="l01154"></a>01154 <span class="comment">                        data points in a cube</span>
-<a name="l01155"></a>01155 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01156"></a>01156 
-<a name="l01157"></a>01157 cpl_imagelist *
-<a name="l01158"></a>01158 sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu, Vector *spec)
-<a name="l01159"></a>01159 {
-<a name="l01160"></a>01160     cpl_imagelist *   cube ;
-<a name="l01161"></a>01161     <span class="keywordtype">int</span>         i ,j ;
-<a name="l01162"></a>01162     <span class="keywordtype">int</span> ilx=0;
-<a name="l01163"></a>01163     <span class="keywordtype">int</span> ily=0;
-<a name="l01164"></a>01164     <span class="keywordtype">int</span> inp=0;
-<a name="l01165"></a>01165     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01166"></a>01166     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01167"></a>01167     cpl_image* i_img=NULL;
-<a name="l01168"></a>01168     cpl_image* o_img=NULL;
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)
-<a name="l01171"></a>01171     {
-<a name="l01172"></a>01172         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;
-<a name="l01173"></a>01173         <span class="keywordflow">return</span> NULL ;
-<a name="l01174"></a>01174     }
-<a name="l01175"></a>01175     inp=cpl_imagelist_get_size(cu);
-<a name="l01176"></a>01176     i_img=cpl_imagelist_get(cu,0);
-<a name="l01177"></a>01177     ilx=cpl_image_get_size_x(i_img);
-<a name="l01178"></a>01178     ily=cpl_image_get_size_y(i_img);
-<a name="l01179"></a>01179 
-<a name="l01180"></a>01180     <span class="keywordflow">if</span> ( inp != spec -> n_elements )
-<a name="l01181"></a>01181     {
-<a name="l01182"></a>01182         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;
-<a name="l01183"></a>01183         <span class="keywordflow">return</span> NULL ;
-<a name="l01184"></a>01184     }
-<a name="l01185"></a>01185 
-<a name="l01186"></a>01186     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new()) )
-<a name="l01187"></a>01187     {
-<a name="l01188"></a>01188         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l01189"></a>01189         <span class="keywordflow">return</span> NULL ;
-<a name="l01190"></a>01190     }
-<a name="l01191"></a>01191     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01192"></a>01192     {
-<a name="l01193"></a>01193       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l01194"></a>01194       cpl_imagelist_set(cube,o_img,i);
-<a name="l01195"></a>01195     }
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01198"></a>01198     {
-<a name="l01199"></a>01199       i_img=cpl_imagelist_get(cu,i);
-<a name="l01200"></a>01200       pidata=cpl_image_get_data_float(i_img);
-<a name="l01201"></a>01201       o_img=cpl_imagelist_get(cube,i);
-<a name="l01202"></a>01202       podata=cpl_image_get_data_float(o_img);
-<a name="l01203"></a>01203         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)
-<a name="l01204"></a>01204         {
-<a name="l01205"></a>01205             <span class="keywordflow">if</span> ( isnan(pidata[j]) || isnan(spec -> data[i]) )
-<a name="l01206"></a>01206             {
-<a name="l01207"></a>01207                 podata[j] = ZERO ;
-<a name="l01208"></a>01208             }
-<a name="l01209"></a>01209             <span class="keywordflow">else</span>
-<a name="l01210"></a>01210             {
-<a name="l01211"></a>01211                 podata[j] = pidata[j] - spec -> data[i] ;
-<a name="l01212"></a>01212             }
-<a name="l01213"></a>01213         }
-<a name="l01214"></a>01214     }
-<a name="l01215"></a>01215 
-<a name="l01216"></a>01216     <span class="keywordflow">return</span> cube ;
-<a name="l01217"></a>01217 }
-<a name="l01218"></a>01218 
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01221"></a>01221 <span class="comment">   Function    :    sinfo_new_mul_spectrum_to_cube()</span>
-<a name="l01222"></a>01222 <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span>
-<a name="l01223"></a>01223 <span class="comment">   Out         :    result cube</span>
-<a name="l01224"></a>01224 <span class="comment">   Job        :    multiplies a spectrum (in z-direction) to all data</span>
-<a name="l01225"></a>01225 <span class="comment">                        points in a cube</span>
-<a name="l01226"></a>01226 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01227"></a>01227 
-<a name="l01228"></a>01228 cpl_imagelist *
-<a name="l01229"></a>01229 sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu, Vector *spec)
-<a name="l01230"></a>01230 {
-<a name="l01231"></a>01231     cpl_imagelist *   cube ;
-<a name="l01232"></a>01232     <span class="keywordtype">int</span>         i ,j ;
-<a name="l01233"></a>01233     <span class="keywordtype">int</span> ilx=0;
-<a name="l01234"></a>01234     <span class="keywordtype">int</span> ily=0;
-<a name="l01235"></a>01235     <span class="keywordtype">int</span> inp=0;
-<a name="l01236"></a>01236     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01237"></a>01237     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01238"></a>01238     cpl_image* i_img=NULL;
-<a name="l01239"></a>01239     cpl_image* o_img=NULL;
-<a name="l01240"></a>01240 
-<a name="l01241"></a>01241     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)
-<a name="l01242"></a>01242     {
-<a name="l01243"></a>01243         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;
-<a name="l01244"></a>01244         <span class="keywordflow">return</span> NULL ;
-<a name="l01245"></a>01245     }
-<a name="l01246"></a>01246     inp=cpl_imagelist_get_size(cu);
-<a name="l01247"></a>01247     i_img=cpl_imagelist_get(cu,0);
-<a name="l01248"></a>01248     ilx=cpl_image_get_size_x(i_img);
-<a name="l01249"></a>01249     ily=cpl_image_get_size_y(i_img);
-<a name="l01250"></a>01250 
-<a name="l01251"></a>01251     <span class="keywordflow">if</span> ( inp != spec -> n_elements )
-<a name="l01252"></a>01252     {
-<a name="l01253"></a>01253         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;
-<a name="l01254"></a>01254         <span class="keywordflow">return</span> NULL ;
-<a name="l01255"></a>01255     }
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new ()) )
-<a name="l01258"></a>01258     {
-<a name="l01259"></a>01259         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;
-<a name="l01260"></a>01260         <span class="keywordflow">return</span> NULL ;
-<a name="l01261"></a>01261     }
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01264"></a>01264     {
-<a name="l01265"></a>01265       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l01266"></a>01266       cpl_imagelist_set(cube,o_img,i);
-<a name="l01267"></a>01267     }
-<a name="l01268"></a>01268 
-<a name="l01269"></a>01269     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01270"></a>01270     {
-<a name="l01271"></a>01271       i_img=cpl_imagelist_get(cu,i);
-<a name="l01272"></a>01272       pidata=cpl_image_get_data_float(i_img);
-<a name="l01273"></a>01273       o_img=cpl_imagelist_get(cube,i);
-<a name="l01274"></a>01274       podata=cpl_image_get_data_float(o_img);
-<a name="l01275"></a>01275         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)
-<a name="l01276"></a>01276         {
-<a name="l01277"></a>01277             <span class="keywordflow">if</span> ( isnan(pidata[j]) || isnan(spec->data[i]) )
-<a name="l01278"></a>01278             {
-<a name="l01279"></a>01279                 podata[j] = ZERO ;
-<a name="l01280"></a>01280             }
-<a name="l01281"></a>01281             <span class="keywordflow">else</span>
-<a name="l01282"></a>01282             {
-<a name="l01283"></a>01283                 podata[j] = pidata[j] * spec -> data[i] ;
-<a name="l01284"></a>01284             }
-<a name="l01285"></a>01285         }
-<a name="l01286"></a>01286     }
-<a name="l01287"></a>01287 
-<a name="l01288"></a>01288     <span class="keywordflow">return</span> cube ;
-<a name="l01289"></a>01289 }
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291 
-<a name="l01292"></a>01292 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01293"></a>01293 <span class="comment">   Function    :    sinfo_new_div_cube_by_spectrum()</span>
-<a name="l01294"></a>01294 <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span>
-<a name="l01295"></a>01295 <span class="comment">   Out         :    result cube</span>
-<a name="l01296"></a>01296 <span class="comment">   Job        :    divides all data points of a cube by a spectrum</span>
-<a name="l01297"></a>01297 <span class="comment">                        (in z-direction)</span>
-<a name="l01298"></a>01298 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01299"></a>01299 
-<a name="l01300"></a>01300 cpl_imagelist *
-<a name="l01301"></a>01301 sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu, Vector *spec)
-<a name="l01302"></a>01302 {
-<a name="l01303"></a>01303     cpl_imagelist *   cube ;
-<a name="l01304"></a>01304     <span class="keywordtype">float</span>       help ;
-<a name="l01305"></a>01305     <span class="keywordtype">int</span>         i ,j ;
-<a name="l01306"></a>01306     <span class="keywordtype">int</span> ilx=0;
-<a name="l01307"></a>01307     <span class="keywordtype">int</span> ily=0;
-<a name="l01308"></a>01308     <span class="keywordtype">int</span> inp=0;
-<a name="l01309"></a>01309     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01310"></a>01310     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01311"></a>01311     cpl_image* i_img=NULL;
-<a name="l01312"></a>01312     cpl_image* o_img=NULL;
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)
-<a name="l01315"></a>01315     {
-<a name="l01316"></a>01316         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;
-<a name="l01317"></a>01317         <span class="keywordflow">return</span> NULL ;
-<a name="l01318"></a>01318     }
-<a name="l01319"></a>01319     inp=cpl_imagelist_get_size(cu);
-<a name="l01320"></a>01320     i_img=cpl_imagelist_get(cu,0);
-<a name="l01321"></a>01321     ilx=cpl_image_get_size_x(i_img);
-<a name="l01322"></a>01322     ily=cpl_image_get_size_y(i_img);
-<a name="l01323"></a>01323 
-<a name="l01324"></a>01324     <span class="keywordflow">if</span> ( inp != spec -> n_elements )
-<a name="l01325"></a>01325     {
-<a name="l01326"></a>01326         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;
-<a name="l01327"></a>01327         <span class="keywordflow">return</span> NULL ;
-<a name="l01328"></a>01328     }
-<a name="l01329"></a>01329 
-<a name="l01330"></a>01330     <span class="keywordflow">if</span> (NULL == (cube = cpl_imagelist_new ()) )
-<a name="l01331"></a>01331     {
-<a name="l01332"></a>01332         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span>) ;
-<a name="l01333"></a>01333         <span class="keywordflow">return</span> NULL ;
-<a name="l01334"></a>01334     }
-<a name="l01335"></a>01335 
-<a name="l01336"></a>01336     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01337"></a>01337     {
-<a name="l01338"></a>01338       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l01339"></a>01339       cpl_imagelist_set(cube,o_img,i);
-<a name="l01340"></a>01340     }
-<a name="l01341"></a>01341 
-<a name="l01342"></a>01342     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)
-<a name="l01343"></a>01343     {
-<a name="l01344"></a>01344 
-<a name="l01345"></a>01345       i_img=cpl_imagelist_get(cu,i);
-<a name="l01346"></a>01346       pidata=cpl_image_get_data_float(i_img);
-<a name="l01347"></a>01347       o_img=cpl_imagelist_get(cube,i);
-<a name="l01348"></a>01348       podata=cpl_image_get_data_float(o_img);
-<a name="l01349"></a>01349         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)
-<a name="l01350"></a>01350         {
-<a name="l01351"></a>01351             <span class="keywordflow">if</span> (!isnan(spec->data[i]) && spec->data[i] != 0.)
-<a name="l01352"></a>01352             {
-<a name="l01353"></a>01353                 help = 1/spec->data[i] ;
-<a name="l01354"></a>01354                 <span class="keywordflow">if</span> ( help > THRESH )
-<a name="l01355"></a>01355                 {
-<a name="l01356"></a>01356                     help = 1. ;
-<a name="l01357"></a>01357                 }
-<a name="l01358"></a>01358             }
-<a name="l01359"></a>01359             <span class="keywordflow">else</span>
-<a name="l01360"></a>01360             {
-<a name="l01361"></a>01361                 help = ZERO ;
-<a name="l01362"></a>01362             }
-<a name="l01363"></a>01363 
-<a name="l01364"></a>01364             <span class="keywordflow">if</span> ( isnan(help) || isnan(pidata[j]) )
-<a name="l01365"></a>01365             {
-<a name="l01366"></a>01366                 podata[j] = ZERO ;
-<a name="l01367"></a>01367             }
-<a name="l01368"></a>01368             <span class="keywordflow">else</span>
-<a name="l01369"></a>01369             {
-<a name="l01370"></a>01370                 podata[j] = pidata[j] * help ;
-<a name="l01371"></a>01371             }
-<a name="l01372"></a>01372         }
-<a name="l01373"></a>01373     }
-<a name="l01374"></a>01374     <span class="keywordflow">return</span> cube ;
-<a name="l01375"></a>01375 }
-<a name="l01376"></a>01376 
-<a name="l01377"></a>01377 
-<a name="l01378"></a>01378 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01379"></a>01379 <span class="comment">   Function    :    sinfo_new_clean_mean_of_spectra()</span>
-<a name="l01380"></a>01380 <span class="comment">   In         :    1 allocated cube, position of rectangle in x-y plane ,</span>
-<a name="l01381"></a>01381 <span class="comment">                        low and high cut threshold</span>
-<a name="l01382"></a>01382 <span class="comment">   Out         :    result spectrum sinfo_vector</span>
-<a name="l01383"></a>01383 <span class="comment">   Job        :    averaging routine to get a better spectral S/N, sorts</span>
-<a name="l01384"></a>01384 <span class="comment">                        the values of the same z-position, cuts the lowest and</span>
-<a name="l01385"></a>01385 <span class="comment">                        highest values according to given thresholds and then</span>
-<a name="l01386"></a>01386 <span class="comment">                        takes the average within the x-y plane , cannot have</span>
-<a name="l01387"></a>01387 <span class="comment">                        a sum of low and high rejected values greater than 90%</span>
-<a name="l01388"></a>01388 <span class="comment">                        of all values</span>
-<a name="l01389"></a>01389 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01390"></a>01390 
-<a name="l01391"></a>01391 Vector *
-<a name="l01392"></a>01392 sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,
-<a name="l01393"></a>01393                              <span class="keywordtype">int</span> llx,
-<a name="l01394"></a>01394                              <span class="keywordtype">int</span> lly,
-<a name="l01395"></a>01395                              <span class="keywordtype">int</span> urx,
-<a name="l01396"></a>01396                              <span class="keywordtype">int</span> ury,
-<a name="l01397"></a>01397                              <span class="keywordtype">double</span> lo_reject,
-<a name="l01398"></a>01398                              <span class="keywordtype">double</span> hi_reject)
-<a name="l01399"></a>01399 {
-<a name="l01400"></a>01400     Vector                           * mean ;
-<a name="l01401"></a>01401     pixelvalue                   *local_rectangle ;
-<a name="l01402"></a>01402     <span class="keywordtype">int</span>                    i, j, k, l, m ;
-<a name="l01403"></a>01403     <span class="keywordtype">int</span>             recsize, lo_n, hi_n, nv ;
-<a name="l01404"></a>01404     <span class="keywordtype">int</span> ilx=0;
-<a name="l01405"></a>01405     <span class="keywordtype">int</span> ily=0;
-<a name="l01406"></a>01406     <span class="keywordtype">int</span> inp=0;
-<a name="l01407"></a>01407     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01408"></a>01408     cpl_image* i_img=NULL;
-<a name="l01409"></a>01409 
-<a name="l01410"></a>01410     <span class="keywordflow">if</span> ( cube == NULL || cpl_imagelist_get_size(cube) < 1 )
-<a name="l01411"></a>01411     {
-<a name="l01412"></a>01412         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube to take the mean of his spectra"</span>) ;
-<a name="l01413"></a>01413         <span class="keywordflow">return</span> NullVector ;
-<a name="l01414"></a>01414     }
-<a name="l01415"></a>01415     inp=cpl_imagelist_get_size(cube);
-<a name="l01416"></a>01416     i_img=cpl_imagelist_get(cube,0);
-<a name="l01417"></a>01417     ilx=cpl_image_get_size_x(i_img);
-<a name="l01418"></a>01418     ily=cpl_image_get_size_y(i_img);
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420     <span class="keywordflow">if</span> ((llx<1) || (llx>ilx) ||
-<a name="l01421"></a>01421         (urx<1) || (urx>ilx) ||
-<a name="l01422"></a>01422         (lly<1) || (lly>ily) ||
-<a name="l01423"></a>01423         (ury<1) || (ury>ily) ||
-<a name="l01424"></a>01424         (llx>=urx) || (lly>=ury))
-<a name="l01425"></a>01425     {
-<a name="l01426"></a>01426         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"invalid rectangle coordinates:"</span>) ;
-<a name="l01427"></a>01427         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,
-<a name="l01428"></a>01428                         llx, lly, urx, ury) ;
-<a name="l01429"></a>01429         <span class="keywordflow">return</span> NullVector ;
-<a name="l01430"></a>01430     }
-<a name="l01431"></a>01431 
-<a name="l01432"></a>01432     <span class="keywordflow">if</span> ((lo_reject + hi_reject) > 0.9)
-<a name="l01433"></a>01433     {
-<a name="l01434"></a>01434         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal rejection thresholds: [%f] and [%f]"</span>,
-<a name="l01435"></a>01435                         lo_reject, hi_reject) ;
-<a name="l01436"></a>01436         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"threshold sum should not be over 0.9"</span>
-<a name="l01437"></a>01437                         <span class="stringliteral">" aborting average"</span>) ;
-<a name="l01438"></a>01438         <span class="keywordflow">return</span> NullVector ;
-<a name="l01439"></a>01439     }
-<a name="l01440"></a>01440 
-<a name="l01441"></a>01441     <span class="comment">/* shift from FITS coordinates to C coordinates */</span>
-<a name="l01442"></a>01442     llx -- ;
-<a name="l01443"></a>01443     lly -- ;
-<a name="l01444"></a>01444     urx -- ;
-<a name="l01445"></a>01445     ury -- ;
-<a name="l01446"></a>01446 
-<a name="l01447"></a>01447     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l01448"></a>01448 
-<a name="l01449"></a>01449     lo_n = (int) (recsize * lo_reject + 0.5) ;
-<a name="l01450"></a>01450     hi_n = (int) (recsize * hi_reject + 0.5) ;
-<a name="l01451"></a>01451 
-<a name="l01452"></a>01452     <span class="keywordflow">if</span> (lo_n + hi_n >= recsize)
-<a name="l01453"></a>01453     {
-<a name="l01454"></a>01454         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"everything would be rejected"</span>) ;
-<a name="l01455"></a>01455         <span class="keywordflow">return</span> NullVector;
-<a name="l01456"></a>01456     }
-<a name="l01457"></a>01457 
-<a name="l01458"></a>01458     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01459"></a>01459     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )
-<a name="l01460"></a>01460     {
-<a name="l01461"></a>01461         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate a new sinfo_vector"</span>) ;
-<a name="l01462"></a>01462         <span class="keywordflow">return</span> NullVector ;
-<a name="l01463"></a>01463     }
-<a name="l01464"></a>01464 
-<a name="l01465"></a>01465     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01466"></a>01466 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01467"></a>01467 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l01468"></a>01468 <span class="comment">     */</span>
-<a name="l01469"></a>01469     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01470"></a>01470     {
-<a name="l01471"></a>01471       i_img=cpl_imagelist_get(cube,i);
-<a name="l01472"></a>01472       pidata=cpl_image_get_data_float(i_img);
-<a name="l01473"></a>01473       m = 0 ;
-<a name="l01474"></a>01474       local_rectangle=(pixelvalue *)cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l01477"></a>01477         {
-<a name="l01478"></a>01478             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l01479"></a>01479             {
-<a name="l01480"></a>01480                 local_rectangle[m] = pidata[k + j * ilx] ;
-<a name="l01481"></a>01481                 m ++ ;
-<a name="l01482"></a>01482             }
-<a name="l01483"></a>01483         }
-<a name="l01484"></a>01484         <span class="comment">/*sorts the pixelvalues in the buffer*/</span>
-<a name="l01485"></a>01485         sinfo_pixel_qsort (local_rectangle, recsize) ;
-<a name="l01486"></a>01486 
-<a name="l01487"></a>01487         nv = 0 ;
-<a name="l01488"></a>01488         <span class="keywordflow">for</span> ( l = lo_n ; l < (recsize - hi_n) ; l++ )
-<a name="l01489"></a>01489         {
-<a name="l01490"></a>01490             mean -> data[i] += local_rectangle[l] ;
-<a name="l01491"></a>01491             nv ++;
-<a name="l01492"></a>01492         }
-<a name="l01493"></a>01493         mean -> data[i] /= nv ;
-<a name="l01494"></a>01494 
-<a name="l01495"></a>01495         cpl_free ( local_rectangle ) ;
-<a name="l01496"></a>01496     }
-<a name="l01497"></a>01497     <span class="keywordflow">return</span> mean ;
-<a name="l01498"></a>01498 }
-<a name="l01499"></a>01499 
-<a name="l01500"></a>01500 
-<a name="l01501"></a>01501 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01502"></a>01502 <span class="comment">   Function    :sinfo_new_median_cube()</span>
-<a name="l01503"></a>01503 <span class="comment">   In         :1 allocated cube</span>
-<a name="l01504"></a>01504 <span class="comment">   Out         :result image</span>
-<a name="l01505"></a>01505 <span class="comment">   Job        :determines the sinfo_new_median value in every pixel position</span>
-<a name="l01506"></a>01506 <span class="comment">                 by considering all pixels along the third axis.</span>
-<a name="l01507"></a>01507 <span class="comment">                 ZERO pixels in a plane are not considered. If all</span>
-<a name="l01508"></a>01508 <span class="comment">                 pixels at a position are not valid the result will</span>
-<a name="l01509"></a>01509 <span class="comment">                 be 'ZERO'.</span>
-<a name="l01510"></a>01510 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01511"></a>01511 cpl_image *
-<a name="l01512"></a>01512 sinfo_new_median_cube(cpl_imagelist * cube)
-<a name="l01513"></a>01513 {
-<a name="l01514"></a>01514     cpl_image  *         im ;
-<a name="l01515"></a>01515     pixelvalue *    buffer ;
-<a name="l01516"></a>01516     <span class="keywordtype">int</span>        i, j, k, nz ;
-<a name="l01517"></a>01517     <span class="keywordtype">int</span> ilx=0;
-<a name="l01518"></a>01518     <span class="keywordtype">int</span> ily=0;
-<a name="l01519"></a>01519     <span class="keywordtype">int</span> inp=0;
-<a name="l01520"></a>01520     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01521"></a>01521     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01522"></a>01522     cpl_image* i_img=NULL;
-<a name="l01523"></a>01523 
-<a name="l01524"></a>01524     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01525"></a>01525     {
-<a name="l01526"></a>01526         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l01527"></a>01527         <span class="keywordflow">return</span> NULL ;
-<a name="l01528"></a>01528     }
-<a name="l01529"></a>01529     inp=cpl_imagelist_get_size(cube);
-<a name="l01530"></a>01530     i_img=cpl_imagelist_get(cube,0);
-<a name="l01531"></a>01531     ilx=cpl_image_get_size_x(i_img);
-<a name="l01532"></a>01532     ily=cpl_image_get_size_y(i_img);
-<a name="l01533"></a>01533 
-<a name="l01534"></a>01534     <span class="comment">/* allocate memory */</span>
-<a name="l01535"></a>01535     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )
-<a name="l01536"></a>01536     {
-<a name="l01537"></a>01537         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;
-<a name="l01538"></a>01538         <span class="keywordflow">return</span> NULL ;
-<a name="l01539"></a>01539     }
-<a name="l01540"></a>01540 
-<a name="l01541"></a>01541     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01542"></a>01542 <span class="comment">     * transfer each sinfo_vector in z direction in a buffer and collect</span>
-<a name="l01543"></a>01543 <span class="comment">       only non-blank data.</span>
-<a name="l01544"></a>01544 <span class="comment">     */</span>
-<a name="l01545"></a>01545 
-<a name="l01546"></a>01546     podata=cpl_image_get_data_float(im);
-<a name="l01547"></a>01547     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l01548"></a>01548     {
-<a name="l01549"></a>01549         buffer = (pixelvalue *) cpl_calloc (inp, <span class="keyword">sizeof</span> (pixelvalue *));
-<a name="l01550"></a>01550         k = 0 ;
-<a name="l01551"></a>01551         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )
-<a name="l01552"></a>01552         {
-<a name="l01553"></a>01553           i_img=cpl_imagelist_get(cube,j);
-<a name="l01554"></a>01554       pidata=cpl_image_get_data_float(i_img);
-<a name="l01555"></a>01555             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )
-<a name="l01556"></a>01556             {
-<a name="l01557"></a>01557                 buffer[k] = pidata[i] ;
-<a name="l01558"></a>01558                 k ++ ;
-<a name="l01559"></a>01559             }
-<a name="l01560"></a>01560         }
-<a name="l01561"></a>01561         nz = k ;
-<a name="l01562"></a>01562 
-<a name="l01563"></a>01563         <span class="comment">/* proceed depending on the number of valid pixels */</span>
-<a name="l01564"></a>01564         <span class="keywordflow">if</span> ( nz > 2 )
-<a name="l01565"></a>01565         {
-<a name="l01566"></a>01566             podata[i] = sinfo_new_median ( buffer, nz ) ;
-<a name="l01567"></a>01567         }
-<a name="l01568"></a>01568         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 2)
-<a name="l01569"></a>01569         {
-<a name="l01570"></a>01570             podata[i] = (buffer[0] + buffer[1]) / 2. ;
-<a name="l01571"></a>01571         }
-<a name="l01572"></a>01572         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 1)
-<a name="l01573"></a>01573         {
-<a name="l01574"></a>01574             podata[i] = buffer[0] ;
-<a name="l01575"></a>01575         }
-<a name="l01576"></a>01576         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)
-<a name="l01577"></a>01577         {
-<a name="l01578"></a>01578             podata[i] = ZERO ;
-<a name="l01579"></a>01579         }
-<a name="l01580"></a>01580 
-<a name="l01581"></a>01581         cpl_free ( buffer ) ;
-<a name="l01582"></a>01582     }
-<a name="l01583"></a>01583 
-<a name="l01584"></a>01584     <span class="keywordflow">return</span> im ;
-<a name="l01585"></a>01585 }
-<a name="l01586"></a>01586 
-<a name="l01587"></a>01587 
-<a name="l01588"></a>01588 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01589"></a>01589 <span class="comment">   Function    :    sinfo_new_average_cube_to_image()</span>
-<a name="l01590"></a>01590 <span class="comment">   In         :    1 allocated cube</span>
-<a name="l01591"></a>01591 <span class="comment">   Out         :    result image</span>
-<a name="l01592"></a>01592 <span class="comment">   Job        :    determines the average value in every pixel position</span>
-<a name="l01593"></a>01593 <span class="comment">                        by considering all pixels along the third axis.</span>
-<a name="l01594"></a>01594 <span class="comment">                        ZERO pixels in a plane are not considered. If all</span>
-<a name="l01595"></a>01595 <span class="comment">                        pixels at a position are not valid the result will</span>
-<a name="l01596"></a>01596 <span class="comment">                        be 'ZERO'.</span>
-<a name="l01597"></a>01597 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01598"></a>01598 cpl_image *
-<a name="l01599"></a>01599 sinfo_new_average_cube_to_image(cpl_imagelist * cube)
-<a name="l01600"></a>01600 {
-<a name="l01601"></a>01601     cpl_image  *      im ;
-<a name="l01602"></a>01602     <span class="keywordtype">int</span>        i, j, nz ;
-<a name="l01603"></a>01603     <span class="keywordtype">int</span> ilx=0;
-<a name="l01604"></a>01604     <span class="keywordtype">int</span> ily=0;
-<a name="l01605"></a>01605     <span class="keywordtype">int</span> inp=0;
-<a name="l01606"></a>01606     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01607"></a>01607     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01608"></a>01608     cpl_image* i_img=NULL;
-<a name="l01609"></a>01609 
-<a name="l01610"></a>01610     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01611"></a>01611     {
-<a name="l01612"></a>01612         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l01613"></a>01613         <span class="keywordflow">return</span> NULL ;
-<a name="l01614"></a>01614     }
-<a name="l01615"></a>01615     inp=cpl_imagelist_get_size(cube);
-<a name="l01616"></a>01616     i_img=cpl_imagelist_get(cube,0);
-<a name="l01617"></a>01617     ilx=cpl_image_get_size_x(i_img);
-<a name="l01618"></a>01618     ily=cpl_image_get_size_y(i_img);
-<a name="l01619"></a>01619 
-<a name="l01620"></a>01620     <span class="comment">/* allocate memory */</span>
-<a name="l01621"></a>01621     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily,CPL_TYPE_FLOAT )) )
-<a name="l01622"></a>01622     {
-<a name="l01623"></a>01623         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;
-<a name="l01624"></a>01624         <span class="keywordflow">return</span> NULL ;
-<a name="l01625"></a>01625     }
-<a name="l01626"></a>01626 
-<a name="l01627"></a>01627     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01628"></a>01628 <span class="comment">     * transfer each vector in z direction in a buffer and collect</span>
-<a name="l01629"></a>01629 <span class="comment">       only non-blank data.</span>
-<a name="l01630"></a>01630 <span class="comment">     */</span>
-<a name="l01631"></a>01631 
-<a name="l01632"></a>01632     podata=cpl_image_get_data_float(im);
-<a name="l01633"></a>01633     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l01634"></a>01634     {
-<a name="l01635"></a>01635         nz = 0 ;
-<a name="l01636"></a>01636         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )
-<a name="l01637"></a>01637         {
-<a name="l01638"></a>01638           i_img=cpl_imagelist_get(cube,j);
-<a name="l01639"></a>01639       pidata=cpl_image_get_data_float(i_img);
-<a name="l01640"></a>01640             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )
-<a name="l01641"></a>01641             {
-<a name="l01642"></a>01642                 nz ++ ;
-<a name="l01643"></a>01643                 podata[i] += pidata[i] ;
-<a name="l01644"></a>01644             }
-<a name="l01645"></a>01645         }
-<a name="l01646"></a>01646 
-<a name="l01647"></a>01647         <span class="comment">/* proceed depending on the number of valid pixels */</span>
-<a name="l01648"></a>01648         <span class="keywordflow">if</span> ( nz >= 1 )
-<a name="l01649"></a>01649         {
-<a name="l01650"></a>01650             podata[i] /= nz ;
-<a name="l01651"></a>01651         }
-<a name="l01652"></a>01652         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)
-<a name="l01653"></a>01653         {
-<a name="l01654"></a>01654             podata[i] = ZERO ;
-<a name="l01655"></a>01655         }
-<a name="l01656"></a>01656     }
-<a name="l01657"></a>01657 
-<a name="l01658"></a>01658     <span class="keywordflow">return</span> im ;
-<a name="l01659"></a>01659 }
-<a name="l01660"></a>01660 
-<a name="l01661"></a>01661 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01662"></a>01662 <span class="comment">   Function     :       sinfo_new_sum_cube_to_image()</span>
-<a name="l01663"></a>01663 <span class="comment">   In           :       1 allocated cube</span>
-<a name="l01664"></a>01664 <span class="comment">   Out          :       result image</span>
-<a name="l01665"></a>01665 <span class="comment">   Job          :       determines the sum value in every pixel position</span>
-<a name="l01666"></a>01666 <span class="comment">                        by considering all pixels along the third axis.</span>
-<a name="l01667"></a>01667 <span class="comment">                        ZERO pixels in a plane are not considered. If all</span>
-<a name="l01668"></a>01668 <span class="comment">                        pixels at a position are not valid the result will</span>
-<a name="l01669"></a>01669 <span class="comment">                        be 'ZERO'.</span>
-<a name="l01670"></a>01670 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01671"></a>01671 cpl_image *
-<a name="l01672"></a>01672 sinfo_new_sum_cube_to_image(cpl_imagelist * cube)
-<a name="l01673"></a>01673 {
-<a name="l01674"></a>01674     cpl_image  *      im ;
-<a name="l01675"></a>01675     <span class="keywordtype">int</span>        i, j, nz ;
-<a name="l01676"></a>01676     <span class="keywordtype">int</span> ilx=0;
-<a name="l01677"></a>01677     <span class="keywordtype">int</span> ily=0;
-<a name="l01678"></a>01678     <span class="keywordtype">int</span> inp=0;
-<a name="l01679"></a>01679     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01680"></a>01680     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01681"></a>01681     cpl_image* i_img=NULL;
-<a name="l01682"></a>01682 
-<a name="l01683"></a>01683     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01684"></a>01684     {
-<a name="l01685"></a>01685         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l01686"></a>01686         <span class="keywordflow">return</span> NULL ;
-<a name="l01687"></a>01687     }
-<a name="l01688"></a>01688     inp=cpl_imagelist_get_size(cube);
-<a name="l01689"></a>01689     i_img=cpl_imagelist_get(cube,0);
-<a name="l01690"></a>01690     ilx=cpl_image_get_size_x(i_img);
-<a name="l01691"></a>01691     ily=cpl_image_get_size_y(i_img);
-<a name="l01692"></a>01692 
-<a name="l01693"></a>01693     <span class="comment">/* allocate memory */</span>
-<a name="l01694"></a>01694     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )
-<a name="l01695"></a>01695     {
-<a name="l01696"></a>01696         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;
-<a name="l01697"></a>01697         <span class="keywordflow">return</span> NULL ;
-<a name="l01698"></a>01698     }
-<a name="l01699"></a>01699 
-<a name="l01700"></a>01700     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l01701"></a>01701 <span class="comment">     * transfer each vector in z direction in a buffer and collect only</span>
-<a name="l01702"></a>01702 <span class="comment">       non-blank data.</span>
-<a name="l01703"></a>01703 <span class="comment">     */</span>
-<a name="l01704"></a>01704 
-<a name="l01705"></a>01705     podata=cpl_image_get_data_float(im);
-<a name="l01706"></a>01706     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l01707"></a>01707     {
-<a name="l01708"></a>01708         nz = 0 ;
-<a name="l01709"></a>01709         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )
-<a name="l01710"></a>01710         {
-<a name="l01711"></a>01711           i_img=cpl_imagelist_get(cube,j);
-<a name="l01712"></a>01712       pidata=cpl_image_get_data_float(i_img);
-<a name="l01713"></a>01713             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )
-<a name="l01714"></a>01714             {
-<a name="l01715"></a>01715                 nz++ ;
-<a name="l01716"></a>01716                 podata[i] += pidata[i] ;
-<a name="l01717"></a>01717             }
-<a name="l01718"></a>01718         }
-<a name="l01719"></a>01719 
-<a name="l01720"></a>01720         <span class="comment">/* proceed depending on the number of valid pixels */</span>
-<a name="l01721"></a>01721         <span class="keywordflow">if</span> (nz == 0)
-<a name="l01722"></a>01722         {
-<a name="l01723"></a>01723             podata[i] = ZERO ;
-<a name="l01724"></a>01724         }
-<a name="l01725"></a>01725     }
-<a name="l01726"></a>01726 
-<a name="l01727"></a>01727     <span class="keywordflow">return</span> im ;
-<a name="l01728"></a>01728 }
-<a name="l01729"></a>01729 
-<a name="l01730"></a>01730 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01731"></a>01731 <span class="comment">   Function    sinfo_new_average_cube_to_image_between_waves()</span>
-<a name="l01732"></a>01732 <span class="comment">   In         cube: data cube to collapse</span>
-<a name="l01733"></a>01733 <span class="comment">                dispersion: dispersion per pixel in microns/pixel</span>
-<a name="l01734"></a>01734 <span class="comment">                (derived from fits header information)</span>
-<a name="l01735"></a>01735 <span class="comment">                centralWave: central wavelength in the cube in microns</span>
-<a name="l01736"></a>01736 <span class="comment">                                       (derived from fits header information)</span>
-<a name="l01737"></a>01737 <span class="comment">                initialLambda, finalLambda: wavelength values in microns</span>
-<a name="l01738"></a>01738 <span class="comment">                                            within which the cube is averaged</span>
-<a name="l01739"></a>01739 <span class="comment">   Out         :resulting averaged image</span>
-<a name="l01740"></a>01740 <span class="comment">   Job        :determines the average value in every pixel position</span>
-<a name="l01741"></a>01741 <span class="comment">                 by considering only the pixels along the third axis</span>
-<a name="l01742"></a>01742 <span class="comment">                 which lie between the given wavelength values.</span>
-<a name="l01743"></a>01743 <span class="comment">                 These values are first recalculated to plane indices</span>
-<a name="l01744"></a>01744 <span class="comment">                 by using the given dispersion and minimum wavelength in</span>
-<a name="l01745"></a>01745 <span class="comment">                 the cube.</span>
-<a name="l01746"></a>01746 <span class="comment">                 ZERO pixels in a plane are not considered. If all</span>
-<a name="l01747"></a>01747 <span class="comment">                 pixels at a position are not valid the result will</span>
-<a name="l01748"></a>01748 <span class="comment">                 be 'ZERO'.</span>
-<a name="l01749"></a>01749 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01750"></a>01750 cpl_image *
-<a name="l01751"></a>01751 sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,
-<a name="l01752"></a>01752                                            <span class="keywordtype">float</span>     dispersion,
-<a name="l01753"></a>01753                                            <span class="keywordtype">float</span>     centralWave,
-<a name="l01754"></a>01754                                            <span class="keywordtype">float</span>     initialLambda,
-<a name="l01755"></a>01755                                            <span class="keywordtype">float</span>     finalLambda)
-<a name="l01756"></a>01756 {
-<a name="l01757"></a>01757     cpl_image  *      im ;
-<a name="l01758"></a>01758     <span class="keywordtype">int</span>        firstPlane ;
-<a name="l01759"></a>01759     <span class="keywordtype">int</span>        lastPlane ;
-<a name="l01760"></a>01760     <span class="keywordtype">int</span>        i, j, nz ;
-<a name="l01761"></a>01761     <span class="keywordtype">float</span>      minWave ;
-<a name="l01762"></a>01762     <span class="keywordtype">int</span> ilx=0;
-<a name="l01763"></a>01763     <span class="keywordtype">int</span> ily=0;
-<a name="l01764"></a>01764     <span class="keywordtype">int</span> inp=0;
-<a name="l01765"></a>01765     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01766"></a>01766     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01767"></a>01767     cpl_image* i_img=NULL;
-<a name="l01768"></a>01768 
-<a name="l01769"></a>01769     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01770"></a>01770     {
-<a name="l01771"></a>01771         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l01772"></a>01772         <span class="keywordflow">return</span> NULL ;
-<a name="l01773"></a>01773     }
-<a name="l01774"></a>01774     i_img=cpl_imagelist_get(cube,0);
-<a name="l01775"></a>01775     ilx=cpl_image_get_size_x(i_img);
-<a name="l01776"></a>01776     ily=cpl_image_get_size_y(i_img);
-<a name="l01777"></a>01777 
-<a name="l01778"></a>01778     inp=cpl_imagelist_get_size(cube);
-<a name="l01779"></a>01779 
-<a name="l01780"></a>01780     minWave = centralWave - (float) (inp / 2)*dispersion ;
-<a name="l01781"></a>01781 
-<a name="l01782"></a>01782     <span class="keywordflow">if</span> ( dispersion <= 0. || minWave <= 0. )
-<a name="l01783"></a>01783     {
-<a name="l01784"></a>01784         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong dispersion or minimum wavelength given"</span>) ;
-<a name="l01785"></a>01785         <span class="keywordflow">return</span> NULL ;
-<a name="l01786"></a>01786     }
-<a name="l01787"></a>01787 
-<a name="l01788"></a>01788     <span class="keywordflow">if</span> ( initialLambda < minWave ||
-<a name="l01789"></a>01789         (initialLambda >= minWave + dispersion * inp) )
-<a name="l01790"></a>01790     {
-<a name="l01791"></a>01791         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong initial wavelength given"</span>) ;
-<a name="l01792"></a>01792         <span class="keywordflow">return</span> NULL ;
-<a name="l01793"></a>01793     }
-<a name="l01794"></a>01794 
-<a name="l01795"></a>01795     <span class="keywordflow">if</span> ( finalLambda <= minWave ||
-<a name="l01796"></a>01796         (finalLambda > minWave + dispersion * inp) )
-<a name="l01797"></a>01797     {
-<a name="l01798"></a>01798         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong final wavelength given"</span>) ;
-<a name="l01799"></a>01799         <span class="keywordflow">return</span> NULL ;
-<a name="l01800"></a>01800     }
-<a name="l01801"></a>01801 
-<a name="l01802"></a>01802     <span class="comment">/* allocate memory */</span>
-<a name="l01803"></a>01803     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )
-<a name="l01804"></a>01804     {
-<a name="l01805"></a>01805         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;
-<a name="l01806"></a>01806         <span class="keywordflow">return</span> NULL ;
-<a name="l01807"></a>01807     }
-<a name="l01808"></a>01808 
-<a name="l01809"></a>01809     <span class="comment">/* transfer the wavelength range to image plane indices */</span>
-<a name="l01810"></a>01810     firstPlane = sinfo_new_nint ((<span class="keywordtype">double</span>) ((initialLambda - minWave) /
-<a name="l01811"></a>01811                                           dispersion)) ;
-<a name="l01812"></a>01812     lastPlane  = sinfo_new_nint ((<span class="keywordtype">double</span>) ((finalLambda - minWave) /
-<a name="l01813"></a>01813                                           dispersion)) ;
-<a name="l01814"></a>01814 
-<a name="l01815"></a>01815     <span class="keywordflow">if</span> ( firstPlane < 0 || firstPlane >= inp ||
-<a name="l01816"></a>01816          lastPlane  < 0 || lastPlane  >  inp )
-<a name="l01817"></a>01817     {
-<a name="l01818"></a>01818         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong values given!"</span>) ;
-<a name="l01819"></a>01819         <span class="keywordflow">return</span> NULL ;
-<a name="l01820"></a>01820     }
-<a name="l01821"></a>01821 
-<a name="l01822"></a>01822     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01823"></a>01823 <span class="comment">     * transfer each vector in z direction in a buffer and collect only</span>
-<a name="l01824"></a>01824 <span class="comment">       non-blank data.</span>
-<a name="l01825"></a>01825 <span class="comment">     */</span>
-<a name="l01826"></a>01826 
-<a name="l01827"></a>01827 
-<a name="l01828"></a>01828 
-<a name="l01829"></a>01829     podata=cpl_image_get_data_float(im);
-<a name="l01830"></a>01830     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l01831"></a>01831     {
-<a name="l01832"></a>01832         nz = 0 ;
-<a name="l01833"></a>01833 
-<a name="l01834"></a>01834         <span class="keywordflow">for</span> ( j = firstPlane ; j <= lastPlane ; j ++ )
-<a name="l01835"></a>01835         {
-<a name="l01836"></a>01836           i_img=cpl_imagelist_get(cube,j);
-<a name="l01837"></a>01837       pidata=cpl_image_get_data_float(i_img);
-<a name="l01838"></a>01838             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )
-<a name="l01839"></a>01839             {
-<a name="l01840"></a>01840                 nz ++ ;
-<a name="l01841"></a>01841                 podata[i] += pidata[i] ;
-<a name="l01842"></a>01842             }
-<a name="l01843"></a>01843         }
-<a name="l01844"></a>01844 
-<a name="l01845"></a>01845         <span class="comment">/* proceed depending on the number of valid pixels */</span>
-<a name="l01846"></a>01846         <span class="keywordflow">if</span> ( nz >= 1 )
-<a name="l01847"></a>01847         {
-<a name="l01848"></a>01848             podata[i] /= nz ;
-<a name="l01849"></a>01849         }
-<a name="l01850"></a>01850         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)
-<a name="l01851"></a>01851         {
-<a name="l01852"></a>01852             podata[i] = ZERO ;
-<a name="l01853"></a>01853         }
-<a name="l01854"></a>01854     }
-<a name="l01855"></a>01855 
-<a name="l01856"></a>01856     <span class="keywordflow">return</span> im ;
-<a name="l01857"></a>01857 }
-<a name="l01858"></a>01858 
-<a name="l01859"></a>01859 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01860"></a>01860 <span class="comment">   Function    :    sinfo_new_extract_image_from_cube()</span>
-<a name="l01861"></a>01861 <span class="comment">   In         :    1 allocated cube</span>
-<a name="l01862"></a>01862 <span class="comment">                        index of cube plane</span>
-<a name="l01863"></a>01863 <span class="comment">   Out         :    extracted image</span>
-<a name="l01864"></a>01864 <span class="comment">   Job        :    returns the wanted image plane of the cube</span>
-<a name="l01865"></a>01865 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01866"></a>01866 cpl_image *
-<a name="l01867"></a>01867 sinfo_new_extract_image_from_cube(cpl_imagelist * cube, <span class="keywordtype">int</span> plane_index)
-<a name="l01868"></a>01868 {
-<a name="l01869"></a>01869     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01870"></a>01870     {
-<a name="l01871"></a>01871         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l01872"></a>01872         <span class="keywordflow">return</span> NULL ;
-<a name="l01873"></a>01873     }
-<a name="l01874"></a>01874 
-<a name="l01875"></a>01875     <span class="keywordflow">if</span> ( plane_index < 0 || plane_index >= cpl_imagelist_get_size(cube) )
-<a name="l01876"></a>01876     {
-<a name="l01877"></a>01877         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong plane index for image to be extracted"</span>) ;
-<a name="l01878"></a>01878         <span class="keywordflow">return</span> NULL ;
-<a name="l01879"></a>01879     }
-<a name="l01880"></a>01880 
-<a name="l01881"></a>01881     <span class="keywordflow">return</span> cpl_imagelist_get(cube,plane_index) ;
-<a name="l01882"></a>01882 }
-<a name="l01883"></a>01883 
-<a name="l01884"></a>01884 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01885"></a>01885 <span class="comment">   Function    :sinfo_new_extract_spectrum_from_cube()</span>
-<a name="l01886"></a>01886 <span class="comment">   In         :cube: 1 allocated cube</span>
-<a name="l01887"></a>01887 <span class="comment">                 x_pos, y_pos: x, y pixel position of the</span>
-<a name="l01888"></a>01888 <span class="comment">                               spectrum counted from 0</span>
-<a name="l01889"></a>01889 <span class="comment">   Out         :extracted spectral sinfo_vector object</span>
-<a name="l01890"></a>01890 <span class="comment">   Job        :returns the wanted single spectrum of the cube</span>
-<a name="l01891"></a>01891 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01892"></a>01892 Vector *
-<a name="l01893"></a>01893 sinfo_new_extract_spectrum_from_cube(cpl_imagelist * cube,
-<a name="l01894"></a>01894                                      <span class="keywordtype">int</span> x_pos, <span class="keywordtype">int</span> y_pos)
-<a name="l01895"></a>01895 {
-<a name="l01896"></a>01896     Vector * returnedSpectrum ;
-<a name="l01897"></a>01897     <span class="keywordtype">int</span> i ;
-<a name="l01898"></a>01898     <span class="keywordtype">int</span> ilx=0;
-<a name="l01899"></a>01899     <span class="keywordtype">int</span> ily=0;
-<a name="l01900"></a>01900     <span class="keywordtype">int</span> inp=0;
-<a name="l01901"></a>01901     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01902"></a>01902     cpl_image* i_img=NULL;
-<a name="l01903"></a>01903 
-<a name="l01904"></a>01904     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l01905"></a>01905     {
-<a name="l01906"></a>01906         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube given!"</span>) ;
-<a name="l01907"></a>01907         <span class="keywordflow">return</span> NullVector ;
-<a name="l01908"></a>01908     }
-<a name="l01909"></a>01909     i_img=cpl_imagelist_get(cube,0);
-<a name="l01910"></a>01910     ilx=cpl_image_get_size_x(i_img);
-<a name="l01911"></a>01911     ily=cpl_image_get_size_y(i_img);
-<a name="l01912"></a>01912     inp=cpl_imagelist_get_size(cube);
-<a name="l01913"></a>01913 
-<a name="l01914"></a>01914     <span class="keywordflow">if</span> ( x_pos < 0 || x_pos >= ilx )
-<a name="l01915"></a>01915     {
-<a name="l01916"></a>01916         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong x-positon of spectrum given!"</span>) ;
-<a name="l01917"></a>01917         <span class="keywordflow">return</span> NullVector ;
-<a name="l01918"></a>01918     }
-<a name="l01919"></a>01919 
-<a name="l01920"></a>01920     <span class="keywordflow">if</span> ( y_pos < 0 || y_pos >= ily )
-<a name="l01921"></a>01921     {
-<a name="l01922"></a>01922         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong y-positon of spectrum given!"</span>) ;
-<a name="l01923"></a>01923         <span class="keywordflow">return</span> NullVector ;
-<a name="l01924"></a>01924     }
-<a name="l01925"></a>01925 
-<a name="l01926"></a>01926     <span class="comment">/* allocate memory */</span>
-<a name="l01927"></a>01927     <span class="keywordflow">if</span> ( NULL == (returnedSpectrum = sinfo_new_vector ( inp )) )
-<a name="l01928"></a>01928     {
-<a name="l01929"></a>01929         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new spectrum!"</span>) ;
-<a name="l01930"></a>01930         <span class="keywordflow">return</span> NullVector ;
-<a name="l01931"></a>01931     }
-<a name="l01932"></a>01932 
-<a name="l01933"></a>01933     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01934"></a>01934     {
-<a name="l01935"></a>01935       i_img=cpl_imagelist_get(cube,i);
-<a name="l01936"></a>01936       pidata=cpl_image_get_data_float(i_img);
-<a name="l01937"></a>01937       returnedSpectrum -> data[i] = pidata[x_pos + ilx*y_pos] ;
-<a name="l01938"></a>01938     }
-<a name="l01939"></a>01939 
-<a name="l01940"></a>01940     <span class="keywordflow">return</span> returnedSpectrum ;
-<a name="l01941"></a>01941 }
-<a name="l01942"></a>01942 
-<a name="l01943"></a>01943 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l01944"></a>01944 <span class="comment">   Function     :       sinfo_new_combine_jittered_cubes()</span>
-<a name="l01945"></a>01945 <span class="comment">   In           :       cubes: list of jittered cubes to mosaic</span>
-<a name="l01946"></a>01946 <span class="comment">                        mergedCube: resulting merged cube containing the</span>
-<a name="l01947"></a>01947 <span class="comment">                                      jittered cubes</span>
-<a name="l01948"></a>01948 <span class="comment">                        n_cubes: number of cubes in the list to merge</span>
-<a name="l01949"></a>01949 <span class="comment">                        cumoffsetx,y: array of relative x, y pixel offsets</span>
-<a name="l01950"></a>01950 <span class="comment">                                      with respect to the first frame in the</span>
-<a name="l01951"></a>01951 <span class="comment">                                      same sequence as the cube list.</span>
-<a name="l01952"></a>01952 <span class="comment">                        exptimes: exposure times array giving the time</span>
-<a name="l01953"></a>01953 <span class="comment">                                  in the same sequence as the cube list</span>
-<a name="l01954"></a>01954 <span class="comment">                        kernel_type: the name of the interpolation kernel</span>
-<a name="l01955"></a>01955 <span class="comment">                                     that you want to generate using the</span>
-<a name="l01956"></a>01956 <span class="comment">                                     eclipse routine</span>
-<a name="l01957"></a>01957 <span class="comment">                                     sinfo_generate_interpolation_kernel()</span>
-<a name="l01958"></a>01958 <span class="comment">                                     Supported kernels are:</span>
-<a name="l01959"></a>01959 <span class="comment">                                     NULL:      default kernel, currently tanh</span>
-<a name="l01960"></a>01960 <span class="comment">                                     "default": dito</span>
-<a name="l01961"></a>01961 <span class="comment">                                     "tanh":    Hyperbolic tangent</span>
-<a name="l01962"></a>01962 <span class="comment">                                     "sinc2":   Square sinc</span>
-<a name="l01963"></a>01963 <span class="comment">                                     "lanczos": Lanczos2 kernel</span>
-<a name="l01964"></a>01964 <span class="comment">                                     "hamming": Hamming kernel</span>
-<a name="l01965"></a>01965 <span class="comment">                                     "hann":    Hann kernel</span>
-<a name="l01966"></a>01966 <span class="comment">   Out          :       mask: cube of the same size as combinedCube</span>
-<a name="l01967"></a>01967 <span class="comment">                              containing 0 for blank (ZERO pixels) and</span>
-<a name="l01968"></a>01968 <span class="comment">                              the summed integration times for</span>
-<a name="l01969"></a>01969 <span class="comment">                              overlapping regions</span>
-<a name="l01970"></a>01970 <span class="comment">                        mergedCube: final data cube containing the</span>
-<a name="l01971"></a>01971 <span class="comment">                                    jittered cubes</span>
-<a name="l01972"></a>01972 <span class="comment">   Job          :       merges jittered data cubes to one bigger cube</span>
-<a name="l01973"></a>01973 <span class="comment">                        by averaging the overlap regions weighted by</span>
-<a name="l01974"></a>01974 <span class="comment">                        the integration times. The x, y size of the final data</span>
-<a name="l01975"></a>01975 <span class="comment">                        cube is user given, and should be between 32 and 64</span>
-<a name="l01976"></a>01976 <span class="comment">                        pixels, while the relative pixel-offset (sub-pixel</span>
-<a name="l01977"></a>01977 <span class="comment">                        accuracy) of the single cubes with respect to the</span>
-<a name="l01978"></a>01978 <span class="comment">                        first cube in the list is read from the</span>
-<a name="l01979"></a>01979 <span class="comment">                        SEQ CUMOFFSETX,Y</span>
-<a name="l01980"></a>01980 <span class="comment">                        fits header keyword.</span>
-<a name="l01981"></a>01981 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l01982"></a>01982 cpl_imagelist *
-<a name="l01983"></a>01983 sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,
-<a name="l01984"></a>01984                                  cpl_imagelist  * mergedCube,
-<a name="l01985"></a>01985                                  <span class="keywordtype">int</span>        n_cubes,
-<a name="l01986"></a>01986                                  <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l01987"></a>01987                                  <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l01988"></a>01988                                  <span class="keywordtype">float</span>    * exptimes,
-<a name="l01989"></a>01989                                  <span class="keywordtype">char</span>     * kernel_type )
-<a name="l01990"></a>01990 {
-<a name="l01991"></a>01991 
-<a name="l01992"></a>01992     <span class="keywordtype">int</span> i=0 ;
-<a name="l01993"></a>01993     <span class="keywordtype">int</span> x=0;
-<a name="l01994"></a>01994     <span class="keywordtype">int</span> y=0;
-<a name="l01995"></a>01995     <span class="keywordtype">int</span> z=0;
-<a name="l01996"></a>01996     <span class="keywordtype">int</span> llx0=0;
-<a name="l01997"></a>01997     <span class="keywordtype">int</span> lly0=0;
-<a name="l01998"></a>01998     <span class="keywordtype">int</span> posx=0;
-<a name="l01999"></a>01999     <span class="keywordtype">int</span> posy=0;
-<a name="l02000"></a>02000     <span class="keywordtype">float</span> weight=0;
-<a name="l02001"></a>02001     cpl_imagelist * mask=NULL;
-<a name="l02002"></a>02002     <span class="keywordtype">double</span> * kernel=NULL;
-<a name="l02003"></a>02003     <span class="comment">/*cpl_image * shiftedImage ;*/</span>
-<a name="l02004"></a>02004 
-<a name="l02005"></a>02005     <span class="keywordtype">int</span>* llx=NULL ;
-<a name="l02006"></a>02006     <span class="keywordtype">int</span>* lly=NULL ;
-<a name="l02007"></a>02007 
-<a name="l02008"></a>02008     <span class="keywordtype">float</span>* sub_offsetx=NULL ;
-<a name="l02009"></a>02009     <span class="keywordtype">float</span>* sub_offsety=NULL ;
-<a name="l02010"></a>02010 
-<a name="l02011"></a>02011     cpl_imagelist ** tmpcubes=NULL ;
-<a name="l02012"></a>02012     pixelvalue * tmpspace=NULL;
-<a name="l02013"></a>02013 
-<a name="l02014"></a>02014 
-<a name="l02015"></a>02015   <span class="keywordtype">int</span> ilx=0;
-<a name="l02016"></a>02016   <span class="keywordtype">int</span> ily=0;
-<a name="l02017"></a>02017   <span class="keywordtype">int</span> olx=0;
-<a name="l02018"></a>02018   <span class="keywordtype">int</span> oly=0;
-<a name="l02019"></a>02019   <span class="keywordtype">int</span> mlx=0;
-<a name="l02020"></a>02020   <span class="keywordtype">int</span> onp=0;
-<a name="l02021"></a>02021   <span class="keywordtype">int</span> inp=0;
-<a name="l02022"></a>02022 
-<a name="l02023"></a>02023 
-<a name="l02024"></a>02024 
-<a name="l02025"></a>02025   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02026"></a>02026   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l02027"></a>02027   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l02028"></a>02028 
-<a name="l02029"></a>02029   cpl_image* i_img=NULL;
-<a name="l02030"></a>02030   cpl_image* o_img=NULL;
-<a name="l02031"></a>02031   cpl_image* m_img=NULL;
-<a name="l02032"></a>02032   cpl_image* t_img=NULL;
-<a name="l02033"></a>02033 
-<a name="l02034"></a>02034 
-<a name="l02035"></a>02035     <span class="keywordflow">if</span> ( cubes == NULL )
-<a name="l02036"></a>02036     {
-<a name="l02037"></a>02037         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l02038"></a>02038         <span class="keywordflow">return</span> NULL ;
-<a name="l02039"></a>02039     }
-<a name="l02040"></a>02040     <span class="keywordflow">if</span> ( n_cubes <= 0 )
-<a name="l02041"></a>02041     {
-<a name="l02042"></a>02042         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l02043"></a>02043         <span class="keywordflow">return</span> NULL ;
-<a name="l02044"></a>02044     }
-<a name="l02045"></a>02045     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )
-<a name="l02046"></a>02046     {
-<a name="l02047"></a>02047         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;
-<a name="l02048"></a>02048         <span class="keywordflow">return</span> NULL ;
-<a name="l02049"></a>02049     }
-<a name="l02050"></a>02050     <span class="keywordflow">if</span> ( exptimes == NULL )
-<a name="l02051"></a>02051     {
-<a name="l02052"></a>02052         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no exposure time array given!"</span>) ;
-<a name="l02053"></a>02053         <span class="keywordflow">return</span> NULL ;
-<a name="l02054"></a>02054     }
-<a name="l02055"></a>02055 
-<a name="l02056"></a>02056     o_img=cpl_imagelist_get(mergedCube,0);
-<a name="l02057"></a>02057     olx=cpl_image_get_size_x(o_img);
-<a name="l02058"></a>02058     oly=cpl_image_get_size_y(o_img);
-<a name="l02059"></a>02059     onp=cpl_imagelist_get_size(mergedCube);
-<a name="l02060"></a>02060     <span class="keywordflow">if</span> ( NULL == (mask = cpl_imagelist_new()) )
-<a name="l02061"></a>02061     {
-<a name="l02062"></a>02062         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate cube!"</span>) ;
-<a name="l02063"></a>02063         <span class="keywordflow">return</span> NULL ;
-<a name="l02064"></a>02064     }
-<a name="l02065"></a>02065     <span class="keywordflow">for</span>(i=0;i<onp;i++){
-<a name="l02066"></a>02066       o_img=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);
-<a name="l02067"></a>02067       cpl_imagelist_set(mergedCube,o_img,i);
-<a name="l02068"></a>02068     }
-<a name="l02069"></a>02069 
-<a name="l02070"></a>02070     i_img=cpl_imagelist_get(cubes[0],0);
-<a name="l02071"></a>02071     ilx=cpl_image_get_size_x(i_img);
-<a name="l02072"></a>02072     ily=cpl_image_get_size_y(i_img);
-<a name="l02073"></a>02073 
-<a name="l02074"></a>02074     inp=cpl_imagelist_get_size(cubes[0]);
-<a name="l02075"></a>02075 
-<a name="l02076"></a>02076     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02077"></a>02077 <span class="comment">     * center the cubes within the allocated big cube</span>
-<a name="l02078"></a>02078 <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span>
-<a name="l02079"></a>02079 <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span>
-<a name="l02080"></a>02080 <span class="comment">     */</span>
-<a name="l02081"></a>02081     <span class="comment">/* position of first reference frame, centered in big cube */</span>
-<a name="l02082"></a>02082     llx0 = olx/2 - ilx/2 ;
-<a name="l02083"></a>02083     lly0 = oly/2 - ily/2 ;
-<a name="l02084"></a>02084 
-<a name="l02085"></a>02085     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02086"></a>02086 <span class="comment">     * go through the frame list and determine the lower left edge position</span>
-<a name="l02087"></a>02087 <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span>
-<a name="l02088"></a>02088 <span class="comment">     * determined.</span>
-<a name="l02089"></a>02089 <span class="comment">     */</span>
-<a name="l02090"></a>02090 
-<a name="l02091"></a>02091     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); ;
-<a name="l02092"></a>02092     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02093"></a>02093 
-<a name="l02094"></a>02094     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02095"></a>02095     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02096"></a>02096 
-<a name="l02097"></a>02097     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02098"></a>02098     {
-<a name="l02099"></a>02099         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;
-<a name="l02100"></a>02100         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;
-<a name="l02101"></a>02101         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;
-<a name="l02102"></a>02102         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;
-<a name="l02103"></a>02103     }
-<a name="l02104"></a>02104 
-<a name="l02105"></a>02105 
-<a name="l02106"></a>02106     <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l02107"></a>02107 <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span>
-<a name="l02108"></a>02108 <span class="comment">     * that means shift the single image planes of each cube</span>
-<a name="l02109"></a>02109 <span class="comment">     * first determine an interpolation kernel</span>
-<a name="l02110"></a>02110 <span class="comment">     */</span>
-<a name="l02111"></a>02111     <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)))
-<a name="l02112"></a>02112     {
-<a name="l02113"></a>02113         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span>
-<a name="l02114"></a>02114                            <span class="stringliteral">" or no kernel_typ was given, the default kernel"</span>
-<a name="l02115"></a>02115                            <span class="stringliteral">" is used now!"</span>) ;
-<a name="l02116"></a>02116     }
-<a name="l02117"></a>02117     <span class="comment">/* go through the frame list */</span>
-<a name="l02118"></a>02118 
-<a name="l02119"></a>02119 
-<a name="l02120"></a>02120     tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;
-<a name="l02121"></a>02121 
-<a name="l02122"></a>02122     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02123"></a>02123     {
-<a name="l02124"></a>02124         tmpspace = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l02125"></a>02125         tmpcubes[i] = cpl_imagelist_new();
-<a name="l02126"></a>02126 
-<a name="l02127"></a>02127         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l02128"></a>02128         {
-<a name="l02129"></a>02129 
-<a name="l02130"></a>02130 
-<a name="l02131"></a>02131             t_img=sinfo_new_shift_image(cpl_imagelist_get(cubes[i],z),
-<a name="l02132"></a>02132                                   sub_offsetx[i], sub_offsety[i], kernel);
-<a name="l02133"></a>02133 
-<a name="l02134"></a>02134         <span class="keywordflow">if</span> (t_img==NULL)
-<a name="l02135"></a>02135             {
-<a name="l02136"></a>02136                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not shift image plane no %d"</span>
-<a name="l02137"></a>02137                                  <span class="stringliteral">" in cube no %d!"</span>, z, i) ;
-<a name="l02138"></a>02138                 cpl_imagelist_delete(mergedCube) ;
-<a name="l02139"></a>02139                 cpl_imagelist_delete(mask) ;
-<a name="l02140"></a>02140                 cpl_free(kernel) ;
-<a name="l02141"></a>02141                 <span class="keywordflow">return</span> NULL ;
-<a name="l02142"></a>02142             }
-<a name="l02143"></a>02143             cpl_imagelist_set(tmpcubes[i],t_img,z);
-<a name="l02144"></a>02144         }
-<a name="l02145"></a>02145     cpl_free(tmpspace);
-<a name="l02146"></a>02146     }
-<a name="l02147"></a>02147 
-<a name="l02148"></a>02148     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l02149"></a>02149 <span class="comment">     * Build the mask data cube.</span>
-<a name="l02150"></a>02150 <span class="comment">     * The mask is 0 where no data is available, otherwise the integration</span>
-<a name="l02151"></a>02151 <span class="comment">       time of one frame, respectively the summed integration</span>
-<a name="l02152"></a>02152 <span class="comment">     * times in the overlapping regions are inserted</span>
-<a name="l02153"></a>02153 <span class="comment">     */</span>
-<a name="l02154"></a>02154     <span class="comment">/* go through the frame list */</span>
-<a name="l02155"></a>02155     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02156"></a>02156     {
-<a name="l02157"></a>02157 
-<a name="l02158"></a>02158         <span class="comment">/* go through the first image plane of the big data cube */</span>
-<a name="l02159"></a>02159         <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ )
-<a name="l02160"></a>02160         {
-<a name="l02161"></a>02161             <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ )
-<a name="l02162"></a>02162             {
-<a name="l02163"></a>02163                 <span class="comment">/* find the position of the present cube and</span>
-<a name="l02164"></a>02164 <span class="comment">                   go through the single spectra */</span>
-<a name="l02165"></a>02165                 <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l02166"></a>02166                      x >= llx[i] && x < llx[i]+ilx )
-<a name="l02167"></a>02167                 {
-<a name="l02168"></a>02168                     posx = x - llx[i] ;
-<a name="l02169"></a>02169                     posy = y - lly[i] ;
-<a name="l02170"></a>02170                     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )
-<a name="l02171"></a>02171                     {
-<a name="l02172"></a>02172               t_img=cpl_imagelist_get(tmpcubes[i],z);
-<a name="l02173"></a>02173                       ptdata=cpl_image_get_data_float(t_img);
-<a name="l02174"></a>02174               m_img=cpl_imagelist_get(mask,z);
-<a name="l02175"></a>02175                       pmdata=cpl_image_get_data_float(m_img);
-<a name="l02176"></a>02176                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l02177"></a>02177                                          ptdata[posx+posy*ilx] != 0.)
-<a name="l02178"></a>02178                         {
-<a name="l02179"></a>02179                             pmdata[x+y*mlx] += exptimes[i] ;
-<a name="l02180"></a>02180                         }
-<a name="l02181"></a>02181                     }
-<a name="l02182"></a>02182                 }
-<a name="l02183"></a>02183             }
-<a name="l02184"></a>02184         }
-<a name="l02185"></a>02185     }
-<a name="l02186"></a>02186 
-<a name="l02187"></a>02187 
-<a name="l02188"></a>02188 
-<a name="l02189"></a>02189 
-<a name="l02190"></a>02190 
-<a name="l02191"></a>02191 
-<a name="l02192"></a>02192     <span class="comment">/* calculate a weighted average using the</span>
-<a name="l02193"></a>02193 <span class="comment">       exposure time of the single frames</span>
-<a name="l02194"></a>02194 <span class="comment">       of the overlapping regions of the cubes */</span>
-<a name="l02195"></a>02195     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02196"></a>02196     {
-<a name="l02197"></a>02197 
-<a name="l02198"></a>02198         <span class="comment">/* go through the first image plane of the big data cube */</span>
-<a name="l02199"></a>02199         <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ )
-<a name="l02200"></a>02200         {
-<a name="l02201"></a>02201 
-<a name="l02202"></a>02202             <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ )
-<a name="l02203"></a>02203             {
-<a name="l02204"></a>02204 
-<a name="l02205"></a>02205                 <span class="comment">/* find the position of the present cube</span>
-<a name="l02206"></a>02206 <span class="comment">                   and go through the single spectra */</span>
-<a name="l02207"></a>02207                 <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l02208"></a>02208                      x >= llx[i] && x < llx[i]+ilx )
-<a name="l02209"></a>02209                 {
-<a name="l02210"></a>02210 
-<a name="l02211"></a>02211                     posx = x - llx[i] ;
-<a name="l02212"></a>02212                     posy = y - lly[i] ;
-<a name="l02213"></a>02213                     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )
-<a name="l02214"></a>02214                     {
-<a name="l02215"></a>02215 
-<a name="l02216"></a>02216               t_img=cpl_imagelist_get(tmpcubes[i],z);
-<a name="l02217"></a>02217                       ptdata=cpl_image_get_data_float(t_img);
-<a name="l02218"></a>02218               m_img=cpl_imagelist_get(mask,z);
-<a name="l02219"></a>02219                       pmdata=cpl_image_get_data_float(m_img);
-<a name="l02220"></a>02220                       mlx=cpl_image_get_size_x(m_img);
-<a name="l02221"></a>02221 
-<a name="l02222"></a>02222               o_img=cpl_imagelist_get(mergedCube,z);
-<a name="l02223"></a>02223                       podata=cpl_image_get_data_float(o_img);
-<a name="l02224"></a>02224                       podata[x+y*olx]=0;
-<a name="l02225"></a>02225                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]))
-<a name="l02226"></a>02226                         {
-<a name="l02227"></a>02227                             <span class="keywordflow">if</span> (pmdata[x+y*mlx] != 0.)
-<a name="l02228"></a>02228                             {
-<a name="l02229"></a>02229                 <span class="comment">/* adjust the intensities to</span>
-<a name="l02230"></a>02230 <span class="comment">                                   the first reference cube */</span>
-<a name="l02231"></a>02231                                 weight = exptimes[0] / pmdata[x+y*mlx] ;
-<a name="l02232"></a>02232                             }
-<a name="l02233"></a>02233                             <span class="keywordflow">else</span>
-<a name="l02234"></a>02234                             {
-<a name="l02235"></a>02235                                 weight = 0. ;
-<a name="l02236"></a>02236                             }
-<a name="l02237"></a>02237                             podata[x+y*olx] +=
-<a name="l02238"></a>02238                                weight*ptdata[posx+posy*ilx] ;
-<a name="l02239"></a>02239                         }
-<a name="l02240"></a>02240                     }
-<a name="l02241"></a>02241                 }
-<a name="l02242"></a>02242             }
-<a name="l02243"></a>02243         }
-<a name="l02244"></a>02244     }
-<a name="l02245"></a>02245 
-<a name="l02246"></a>02246 
-<a name="l02247"></a>02247 
-<a name="l02248"></a>02248 
-<a name="l02249"></a>02249     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span>
-<a name="l02250"></a>02250     <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span>
-<a name="l02251"></a>02251     cpl_free(kernel) ; <span class="comment">/* originated by eclise-malloc */</span>
-<a name="l02252"></a>02252     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )
-<a name="l02253"></a>02253     {
-<a name="l02254"></a>02254         cpl_imagelist_delete (tmpcubes[i]) ;
-<a name="l02255"></a>02255     }
-<a name="l02256"></a>02256 
-<a name="l02257"></a>02257     cpl_free(tmpcubes); ;
-<a name="l02258"></a>02258     cpl_free(llx); ;
-<a name="l02259"></a>02259     cpl_free(lly) ;
-<a name="l02260"></a>02260 
-<a name="l02261"></a>02261     cpl_free(sub_offsetx) ;
-<a name="l02262"></a>02262     cpl_free(sub_offsety) ;
-<a name="l02263"></a>02263 
-<a name="l02264"></a>02264     <span class="keywordflow">return</span> mask ;
-<a name="l02265"></a>02265 }
-<a name="l02266"></a>02266 
-<a name="l02267"></a>02267 
-<a name="l02268"></a>02268 
-<a name="l02269"></a>02269 
-<a name="l02270"></a>02270 
-<a name="l02271"></a>02271 
-<a name="l02272"></a>02272 
-<a name="l02273"></a>02273 
-<a name="l02303"></a>02303 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l02304"></a>02304 sinfo_build_mask_cube(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l02305"></a>02305                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l02306"></a>02306                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,
-<a name="l02307"></a>02307                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,
-<a name="l02308"></a>02308                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l02309"></a>02309                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,
-<a name="l02310"></a>02310                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,
-<a name="l02311"></a>02311               <span class="keywordtype">double</span>    * exptimes,
-<a name="l02312"></a>02312                       cpl_imagelist** cubes,
-<a name="l02313"></a>02313                       cpl_imagelist** tmpcubes,
-<a name="l02314"></a>02314                       cpl_imagelist* mask)
-<a name="l02315"></a>02315 {
-<a name="l02316"></a>02316 
-<a name="l02317"></a>02317   <span class="keywordtype">int</span> i=0;
-<a name="l02318"></a>02318   <span class="keywordtype">int</span> y=0;
-<a name="l02319"></a>02319   <span class="keywordtype">int</span> z=0;
-<a name="l02320"></a>02320   <span class="keywordtype">int</span> ilx=0;
-<a name="l02321"></a>02321   <span class="keywordtype">int</span> ily=0;
-<a name="l02322"></a>02322   cpl_image* i_img=NULL;
-<a name="l02323"></a>02323   cpl_image* t_img=NULL;
-<a name="l02324"></a>02324   <span class="keywordtype">int</span> posx=0;
-<a name="l02325"></a>02325   <span class="keywordtype">int</span> posy=0;
-<a name="l02326"></a>02326   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l02327"></a>02327   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l02328"></a>02328   <span class="keywordtype">int</span> m=0;
-<a name="l02329"></a>02329   <span class="keywordtype">int</span> x=0;
-<a name="l02330"></a>02330   <span class="keywordtype">int</span> mlx=0;
-<a name="l02331"></a>02331   cpl_image* m_img=NULL;
-<a name="l02332"></a>02332 
-<a name="l02333"></a>02333 
-<a name="l02334"></a>02334   <span class="keywordflow">for</span> ( z = z_min, m=0 ; z < z_max ; z++, m++ ) {
-<a name="l02335"></a>02335 
-<a name="l02336"></a>02336     <span class="comment">// go through the first image plane of the big data cube</span>
-<a name="l02337"></a>02337     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {
-<a name="l02338"></a>02338       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {
-<a name="l02339"></a>02339     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l02340"></a>02340 
-<a name="l02341"></a>02341           i_img=cpl_imagelist_get(cubes[i],0);
-<a name="l02342"></a>02342           ilx=cpl_image_get_size_x(i_img);
-<a name="l02343"></a>02343           ily=cpl_image_get_size_y(i_img);
-<a name="l02344"></a>02344 
-<a name="l02345"></a>02345 
-<a name="l02346"></a>02346       <span class="comment">// find the position of the present cube and go</span>
-<a name="l02347"></a>02347           <span class="comment">// through the single spectra */</span>
-<a name="l02348"></a>02348           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l02349"></a>02349                x >= llx[i] && x < llx[i]+ilx )
-<a name="l02350"></a>02350         {
-<a name="l02351"></a>02351           posx = x - llx[i] ;
-<a name="l02352"></a>02352           posy = y - lly[i] ;
-<a name="l02353"></a>02353 
-<a name="l02354"></a>02354 
-<a name="l02355"></a>02355               t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l02356"></a>02356               ptdata=cpl_image_get_data_float(t_img);
-<a name="l02357"></a>02357               m_img=cpl_imagelist_get(mask,z);
-<a name="l02358"></a>02358               pmdata=cpl_image_get_data_float(m_img);
-<a name="l02359"></a>02359           mlx=cpl_image_get_size_x(m_img);
-<a name="l02360"></a>02360 
-<a name="l02361"></a>02361               <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l02362"></a>02362                          ptdata[posx+posy*ilx] != 0.)
-<a name="l02363"></a>02363         {
-<a name="l02364"></a>02364           pmdata[x+y*mlx] += (float)exptimes[i] ;
-<a name="l02365"></a>02365         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isnan(ptdata[posx+posy*ilx])) {
-<a name="l02366"></a>02366         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ptdata %d, %d, %d is NAN\t"</span>,x,y,z);
-<a name="l02367"></a>02367           } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ptdata[posx+posy*ilx] == 0.) {
-<a name="l02368"></a>02368         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ptdata %d, %d, %d is 0\t"</span>,x,y,z);
-<a name="l02369"></a>02369           }
-<a name="l02370"></a>02370 
-<a name="l02371"></a>02371         } <span class="keywordflow">else</span> {
-<a name="l02372"></a>02372         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"point %d, %d, %d outside range\n"</span>,x,y,z);
-<a name="l02373"></a>02373       }
-<a name="l02374"></a>02374         }
-<a name="l02375"></a>02375       }
-<a name="l02376"></a>02376     }
-<a name="l02377"></a>02377   }
-<a name="l02378"></a>02378   <span class="keywordflow">return</span> 0;
-<a name="l02379"></a>02379 
-<a name="l02380"></a>02380 }
-<a name="l02381"></a>02381 
-<a name="l02382"></a>02382 
-<a name="l02383"></a>02383 
-<a name="l02384"></a>02384 
-<a name="l02385"></a>02385 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l02386"></a>02386 sinfo_build_mask_cube_thomas(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l02387"></a>02387                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l02388"></a>02388                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,
-<a name="l02389"></a>02389                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,
-<a name="l02390"></a>02390                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l02391"></a>02391                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,
-<a name="l02392"></a>02392                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,
-<a name="l02393"></a>02393               <span class="keywordtype">double</span>    * exptimes,
-<a name="l02394"></a>02394                       cpl_imagelist** cubes,
-<a name="l02395"></a>02395                       cpl_imagelist** tmpcubes,
-<a name="l02396"></a>02396                       cpl_imagelist* mask)
-<a name="l02397"></a>02397 {
-<a name="l02398"></a>02398 
-<a name="l02399"></a>02399   <span class="keywordtype">int</span> i=0;
-<a name="l02400"></a>02400   <span class="keywordtype">int</span> y=0;
-<a name="l02401"></a>02401   <span class="keywordtype">int</span> z=0;
-<a name="l02402"></a>02402   <span class="keywordtype">int</span> ilx=0;
-<a name="l02403"></a>02403   <span class="keywordtype">int</span> ily=0;
-<a name="l02404"></a>02404   <span class="keywordtype">int</span> inp=0;
-<a name="l02405"></a>02405   cpl_image* i_img=NULL;
-<a name="l02406"></a>02406   cpl_image* t_img=NULL;
-<a name="l02407"></a>02407   <span class="keywordtype">int</span> posx=0;
-<a name="l02408"></a>02408   <span class="keywordtype">int</span> posy=0;
-<a name="l02409"></a>02409   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l02410"></a>02410   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l02411"></a>02411   <span class="keywordtype">int</span> m=0;
-<a name="l02412"></a>02412   <span class="keywordtype">int</span> x=0;
-<a name="l02413"></a>02413   <span class="keywordtype">int</span> mlx=0;
-<a name="l02414"></a>02414   cpl_image* m_img=NULL;
-<a name="l02415"></a>02415 
-<a name="l02416"></a>02416   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l02417"></a>02417 
-<a name="l02418"></a>02418     i_img=cpl_imagelist_get(cubes[i],0);
-<a name="l02419"></a>02419     ilx=cpl_image_get_size_x(i_img);
-<a name="l02420"></a>02420     ily=cpl_image_get_size_y(i_img);
-<a name="l02421"></a>02421     inp=cpl_imagelist_get_size(cubes[i]);
-<a name="l02422"></a>02422 
-<a name="l02423"></a>02423     <span class="comment">//go through the first image plane of the big data cube</span>
-<a name="l02424"></a>02424     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ){
-<a name="l02425"></a>02425       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ){
-<a name="l02426"></a>02426     <span class="comment">// find the position of the present cube and go</span>
-<a name="l02427"></a>02427     <span class="comment">// through the single spectra</span>
-<a name="l02428"></a>02428         <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l02429"></a>02429              x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l02430"></a>02430       posx = x - llx[i] ;
-<a name="l02431"></a>02431           posy = y - lly[i] ;
-<a name="l02432"></a>02432 
-<a name="l02433"></a>02433       <span class="keywordflow">for</span> ( z = z_min,m=0 ; z < z_max ; z++,m++ ) {
-<a name="l02434"></a>02434         t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l02435"></a>02435             ptdata=cpl_image_get_data_float(t_img);
-<a name="l02436"></a>02436             m_img=cpl_imagelist_get(mask,z);
-<a name="l02437"></a>02437             pmdata=cpl_image_get_data_float(m_img);
-<a name="l02438"></a>02438             mlx=cpl_image_get_size_x(m_img);
-<a name="l02439"></a>02439 
-<a name="l02440"></a>02440             <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l02441"></a>02441         ptdata[posx+posy*ilx] != 0.) {
-<a name="l02442"></a>02442           pmdata[x+y*mlx] += (float)exptimes[i]  ;
-<a name="l02443"></a>02443         }
-<a name="l02444"></a>02444       }
-<a name="l02445"></a>02445     }
-<a name="l02446"></a>02446       }
-<a name="l02447"></a>02447     }
-<a name="l02448"></a>02448   }
-<a name="l02449"></a>02449   <span class="keywordflow">return</span> 0;
-<a name="l02450"></a>02450 }
-<a name="l02451"></a>02451 
-<a name="l02452"></a>02452 
-<a name="l02453"></a>02453 
-<a name="l02454"></a>02454 
-<a name="l02455"></a>02455 
-<a name="l02506"></a>02506 <span class="keywordtype">int</span>
-<a name="l02507"></a>02507 sinfo_new_combine_jittered_cubes_range ( cpl_imagelist ** cubes,
-<a name="l02508"></a>02508                                  cpl_imagelist  * mergedCube,
-<a name="l02509"></a>02509                                  cpl_imagelist  * mask,
-<a name="l02510"></a>02510                                  <span class="keywordtype">int</span>        n_cubes,
-<a name="l02511"></a>02511                                  <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l02512"></a>02512                                  <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l02513"></a>02513                                  <span class="keywordtype">double</span>    * exptimes,
-<a name="l02514"></a>02514                                  <span class="keywordtype">char</span>     * kernel_type,
-<a name="l02515"></a>02515                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z_min, <span class="keyword">const</span> <span class="keywordtype">int</span> z_max )
-<a name="l02516"></a>02516 {
-<a name="l02517"></a>02517 
-<a name="l02518"></a>02518   <span class="keywordtype">int</span> i;
-<a name="l02519"></a>02519   <span class="keywordtype">int</span> llx0, lly0 ;
-<a name="l02520"></a>02520   cpl_imagelist ** tmpcubes=NULL ;
-<a name="l02521"></a>02521   <span class="keywordtype">int</span>* llx=NULL ;
-<a name="l02522"></a>02522   <span class="keywordtype">int</span>* lly=NULL ;
-<a name="l02523"></a>02523   <span class="keywordtype">float</span>* sub_offsetx=NULL ;
-<a name="l02524"></a>02524   <span class="keywordtype">float</span>* sub_offsety=NULL ;
-<a name="l02525"></a>02525 
-<a name="l02526"></a>02526   <span class="keywordtype">int</span> ilx=0;
-<a name="l02527"></a>02527   <span class="keywordtype">int</span> ily=0;
-<a name="l02528"></a>02528   <span class="keywordtype">int</span> olx=0;
-<a name="l02529"></a>02529   <span class="keywordtype">int</span> oly=0;
-<a name="l02530"></a>02530   <span class="keywordtype">int</span> mlx=0;
-<a name="l02531"></a>02531   <span class="keywordtype">int</span> mly=0;
-<a name="l02532"></a>02532 
-<a name="l02533"></a>02533   cpl_image* i_img=NULL;
-<a name="l02534"></a>02534   cpl_image* o_img=NULL;
-<a name="l02535"></a>02535 
-<a name="l02536"></a>02536 
-<a name="l02537"></a>02537   <span class="keywordflow">if</span>(sinfo_check_input(cubes,n_cubes,cumoffsetx,cumoffsety,exptimes) == -1) {
-<a name="l02538"></a>02538     <span class="keywordflow">return</span> -1;
-<a name="l02539"></a>02539   }
-<a name="l02540"></a>02540 
-<a name="l02541"></a>02541     o_img=cpl_imagelist_get(mergedCube,z_min);
-<a name="l02542"></a>02542     olx=cpl_image_get_size_x(o_img);
-<a name="l02543"></a>02543     oly=cpl_image_get_size_y(o_img);
-<a name="l02544"></a>02544     i_img=cpl_imagelist_get(cubes[0],0);
-<a name="l02545"></a>02545     ilx=cpl_image_get_size_x(i_img);
-<a name="l02546"></a>02546     ily=cpl_image_get_size_y(i_img);
-<a name="l02547"></a>02547     mlx=olx;
-<a name="l02548"></a>02548     mly=oly;
-<a name="l02549"></a>02549 
-<a name="l02550"></a>02550 
-<a name="l02551"></a>02551     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02552"></a>02552 <span class="comment">     * center the cubes within the allocated big cube</span>
-<a name="l02553"></a>02553 <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span>
-<a name="l02554"></a>02554 <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span>
-<a name="l02555"></a>02555 <span class="comment">     */</span>
-<a name="l02556"></a>02556     <span class="comment">/* position of first reference frame, centered in big cube */</span>
-<a name="l02557"></a>02557     llx0 = olx/2 - ilx/2 ;
-<a name="l02558"></a>02558     lly0 = oly/2 - ily/2 ;
-<a name="l02559"></a>02559 
-<a name="l02560"></a>02560     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02561"></a>02561 <span class="comment">     * go through the frame list and determine the lower left edge position</span>
-<a name="l02562"></a>02562 <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span>
-<a name="l02563"></a>02563 <span class="comment">     * determined.</span>
-<a name="l02564"></a>02564 <span class="comment">     */</span>
-<a name="l02565"></a>02565 
-<a name="l02566"></a>02566 
-<a name="l02567"></a>02567     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02568"></a>02568     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02569"></a>02569     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02570"></a>02570     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02571"></a>02571 
-<a name="l02572"></a>02572     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02573"></a>02573     {
-<a name="l02574"></a>02574         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;
-<a name="l02575"></a>02575         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;
-<a name="l02576"></a>02576         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;
-<a name="l02577"></a>02577         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;
-<a name="l02578"></a>02578     }
-<a name="l02579"></a>02579 
-<a name="l02580"></a>02580     tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;
-<a name="l02581"></a>02581     <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l02582"></a>02582 <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span>
-<a name="l02583"></a>02583 <span class="comment">     * that means shift the single image planes of each cube</span>
-<a name="l02584"></a>02584 <span class="comment">     * first determine an interpolation kernel</span>
-<a name="l02585"></a>02585 <span class="comment">     */</span>
-<a name="l02586"></a>02586     <span class="keywordflow">if</span>(sinfo_shift_cubes(tmpcubes,kernel_type,n_cubes,cubes,z_min, z_max,
-<a name="l02587"></a>02587              sub_offsetx,sub_offsety,mlx,mly,mask) == -1) {
-<a name="l02588"></a>02588       <span class="keywordflow">return</span> -1;
-<a name="l02589"></a>02589     }
-<a name="l02590"></a>02590 
-<a name="l02591"></a>02591 
-<a name="l02592"></a>02592     <span class="comment">/*-----------------------------------------------------------------------</span>
-<a name="l02593"></a>02593 <span class="comment">     * Build the mask data cube.</span>
-<a name="l02594"></a>02594 <span class="comment">     * The mask is 0 where no data is available, otherwise the</span>
-<a name="l02595"></a>02595 <span class="comment">       integration time of</span>
-<a name="l02596"></a>02596 <span class="comment">     * one frame, respectively the summed integration</span>
-<a name="l02597"></a>02597 <span class="comment">     * times in the overlapping regions are inserted</span>
-<a name="l02598"></a>02598 <span class="comment">     */</span>
-<a name="l02599"></a>02599     <span class="comment">/* go through the frame list */</span>
-<a name="l02600"></a>02600     sinfo_build_mask_cube(z_min,z_max,olx,oly,n_cubes,llx,lly,exptimes,
-<a name="l02601"></a>02601                           cubes,tmpcubes,mask);
-<a name="l02602"></a>02602 
-<a name="l02603"></a>02603 
-<a name="l02604"></a>02604     <span class="comment">/* calculate a weighted average using the exposure time of the</span>
-<a name="l02605"></a>02605 <span class="comment">       single frames of the overlapping regions of the cubes */</span>
-<a name="l02606"></a>02606 
-<a name="l02607"></a>02607     sinfo_compute_weight_average(z_min,z_max,ilx,ily,n_cubes,mergedCube,mask,
-<a name="l02608"></a>02608                                  tmpcubes,exptimes,llx,lly);
-<a name="l02609"></a>02609 
-<a name="l02610"></a>02610     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span>
-<a name="l02611"></a>02611      <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span>
-<a name="l02612"></a>02612 
-<a name="l02613"></a>02613     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )
-<a name="l02614"></a>02614     {
-<a name="l02615"></a>02615         cpl_imagelist_delete (tmpcubes[i]) ;
-<a name="l02616"></a>02616     }
-<a name="l02617"></a>02617 
-<a name="l02618"></a>02618 
-<a name="l02619"></a>02619     cpl_free(tmpcubes) ;
-<a name="l02620"></a>02620     cpl_free(llx) ;
-<a name="l02621"></a>02621     cpl_free(lly) ;
-<a name="l02622"></a>02622     cpl_free(sub_offsetx) ;
-<a name="l02623"></a>02623     cpl_free(sub_offsety) ;
-<a name="l02624"></a>02624 
-<a name="l02625"></a>02625      <span class="keywordflow">return</span> 0 ;
-<a name="l02626"></a>02626 }
-<a name="l02627"></a>02627 
-<a name="l02645"></a>02645 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l02646"></a>02646 sinfo_check_input(cpl_imagelist** cubes,
-<a name="l02647"></a>02647                           <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l02648"></a>02648                           <span class="keywordtype">float</span>* cumoffsetx,
-<a name="l02649"></a>02649                           <span class="keywordtype">float</span>* cumoffsety,
-<a name="l02650"></a>02650               <span class="keywordtype">double</span>* exptimes)
-<a name="l02651"></a>02651 {
-<a name="l02652"></a>02652    <span class="keywordflow">if</span> ( cubes == NULL )
-<a name="l02653"></a>02653     {
-<a name="l02654"></a>02654         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l02655"></a>02655         <span class="keywordflow">return</span> -1 ;
-<a name="l02656"></a>02656     }
-<a name="l02657"></a>02657     <span class="keywordflow">if</span> ( n_cubes <= 0 )
-<a name="l02658"></a>02658     {
-<a name="l02659"></a>02659         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l02660"></a>02660         <span class="keywordflow">return</span> -1 ;
-<a name="l02661"></a>02661     }
-<a name="l02662"></a>02662     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )
-<a name="l02663"></a>02663     {
-<a name="l02664"></a>02664         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;
-<a name="l02665"></a>02665         <span class="keywordflow">return</span> -1;
-<a name="l02666"></a>02666     }
-<a name="l02667"></a>02667     <span class="keywordflow">if</span> ( exptimes == NULL )
-<a name="l02668"></a>02668     {
-<a name="l02669"></a>02669         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no exposure time array given!"</span>) ;
-<a name="l02670"></a>02670         <span class="keywordflow">return</span> -1 ;
-<a name="l02671"></a>02671     }
-<a name="l02672"></a>02672 
-<a name="l02673"></a>02673     <span class="keywordflow">return</span> 0;
-<a name="l02674"></a>02674 }
-<a name="l02675"></a>02675 
-<a name="l02701"></a>02701 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l02702"></a>02702 sinfo_compute_weight_average(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l02703"></a>02703                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l02704"></a>02704                              <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l02705"></a>02705                              <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l02706"></a>02706                  <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l02707"></a>02707                              cpl_imagelist* mergedCube,
-<a name="l02708"></a>02708                              cpl_imagelist* mask,
-<a name="l02709"></a>02709                              cpl_imagelist** tmpcubes,
-<a name="l02710"></a>02710                  <span class="keywordtype">double</span>* exptimes,
-<a name="l02711"></a>02711                              <span class="keywordtype">int</span>* llx,
-<a name="l02712"></a>02712                              <span class="keywordtype">int</span>* lly)
-<a name="l02713"></a>02713 {
-<a name="l02714"></a>02714 
-<a name="l02715"></a>02715   <span class="keywordtype">int</span> m=0;
-<a name="l02716"></a>02716   <span class="keywordtype">int</span> x=0;
-<a name="l02717"></a>02717   <span class="keywordtype">int</span> y=0;
-<a name="l02718"></a>02718   <span class="keywordtype">int</span> z=0;
-<a name="l02719"></a>02719   <span class="keywordtype">int</span> i=0;
-<a name="l02720"></a>02720 
-<a name="l02721"></a>02721   <span class="keywordtype">int</span> mlx=0;
-<a name="l02722"></a>02722   <span class="keywordtype">int</span> mly=0;
-<a name="l02723"></a>02723   <span class="keywordtype">int</span> olx=0;
-<a name="l02724"></a>02724   <span class="keywordtype">int</span> oly=0;
-<a name="l02725"></a>02725 
-<a name="l02726"></a>02726   cpl_image* o_img=NULL;
-<a name="l02727"></a>02727   cpl_image* m_img=NULL;
-<a name="l02728"></a>02728   cpl_image* t_img=NULL;
-<a name="l02729"></a>02729 
-<a name="l02730"></a>02730   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02731"></a>02731   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l02732"></a>02732   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l02733"></a>02733   <span class="keywordtype">double</span> weight=0;
-<a name="l02734"></a>02734 
-<a name="l02735"></a>02735   <span class="keywordtype">int</span> posx=0;
-<a name="l02736"></a>02736   <span class="keywordtype">int</span> posy=0;
-<a name="l02737"></a>02737 
-<a name="l02738"></a>02738 
-<a name="l02739"></a>02739   o_img=cpl_imagelist_get(mergedCube,z_min);
-<a name="l02740"></a>02740   olx=cpl_image_get_size_x(o_img);
-<a name="l02741"></a>02741   oly=cpl_image_get_size_y(o_img);
-<a name="l02742"></a>02742   mlx=olx;
-<a name="l02743"></a>02743   mly=oly;
-<a name="l02744"></a>02744 
-<a name="l02745"></a>02745   <span class="comment">/* calculate a weighted average using the exposure time of the</span>
-<a name="l02746"></a>02746 <span class="comment">     single frames of the overlapping regions of the cubes */</span>
-<a name="l02747"></a>02747   <span class="keywordflow">for</span> ( z = z_min, m = 0 ; z < z_max ; z++, m++ ) {
-<a name="l02748"></a>02748     o_img=cpl_imagelist_get(mergedCube,z);
-<a name="l02749"></a>02749     podata=cpl_image_get_data_float(o_img);
-<a name="l02750"></a>02750     m_img=cpl_imagelist_get(mask,z);
-<a name="l02751"></a>02751     pmdata=cpl_image_get_data_float(m_img);
-<a name="l02752"></a>02752     mlx=cpl_image_get_size_x(m_img);
-<a name="l02753"></a>02753 
-<a name="l02754"></a>02754     <span class="comment">/* go through the first image plane of the big data cube */</span>
-<a name="l02755"></a>02755     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {
-<a name="l02756"></a>02756       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {
-<a name="l02757"></a>02757 
-<a name="l02758"></a>02758        <span class="comment">/* find the position of the present cube and</span>
-<a name="l02759"></a>02759 <span class="comment">          go through the single spectra */</span>
-<a name="l02760"></a>02760 
-<a name="l02761"></a>02761     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l02762"></a>02762 
-<a name="l02763"></a>02763           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l02764"></a>02764                x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l02765"></a>02765         posx = x - llx[i] ;
-<a name="l02766"></a>02766             posy = y - lly[i] ;
-<a name="l02767"></a>02767 
-<a name="l02768"></a>02768             t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l02769"></a>02769             ptdata=cpl_image_get_data_float(t_img);
-<a name="l02770"></a>02770             <span class="comment">/* To prevent black regions in peculiar batterfly cases</span>
-<a name="l02771"></a>02771 <span class="comment">              podata[x+y*olx]=0;</span>
-<a name="l02772"></a>02772 <span class="comment">            */</span>
-<a name="l02773"></a>02773         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx])) {
-<a name="l02774"></a>02774           <span class="keywordflow">if</span> (pmdata[x+y*mlx] != 0.) {
-<a name="l02775"></a>02775                 <span class="comment">/* adjust the intensities to the</span>
-<a name="l02776"></a>02776 <span class="comment">                   first reference cube */</span>
-<a name="l02777"></a>02777         weight = exptimes[0] / pmdata[x+y*mlx] ;
-<a name="l02778"></a>02778           } <span class="keywordflow">else</span> {
-<a name="l02779"></a>02779         weight = 0. ;
-<a name="l02780"></a>02780           }
-<a name="l02781"></a>02781               podata[x+y*olx] += weight*ptdata[posx+posy*ilx] ;
-<a name="l02782"></a>02782 
-<a name="l02783"></a>02783         }
-<a name="l02784"></a>02784       }
-<a name="l02785"></a>02785     }
-<a name="l02786"></a>02786       }
-<a name="l02787"></a>02787     }
-<a name="l02788"></a>02788   }
-<a name="l02789"></a>02789   <span class="keywordflow">return</span> 0;
-<a name="l02790"></a>02790 }
-<a name="l02791"></a>02791 
-<a name="l02792"></a>02792 
-<a name="l02832"></a>02832 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l02833"></a>02833 sinfo_shift_cubes(cpl_imagelist** tmpcubes,
-<a name="l02834"></a>02834                   <span class="keywordtype">char</span>* kernel_type,
-<a name="l02835"></a>02835                   <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l02836"></a>02836                   cpl_imagelist** cubes,
-<a name="l02837"></a>02837                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l02838"></a>02838                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l02839"></a>02839                   <span class="keywordtype">float</span>* sub_offsetx,
-<a name="l02840"></a>02840                   <span class="keywordtype">float</span>* sub_offsety,
-<a name="l02841"></a>02841                   <span class="keyword">const</span> <span class="keywordtype">int</span> mlx,
-<a name="l02842"></a>02842                   <span class="keyword">const</span> <span class="keywordtype">int</span> mly,
-<a name="l02843"></a>02843                   cpl_imagelist* mask)
-<a name="l02844"></a>02844 {
-<a name="l02845"></a>02845 
-<a name="l02846"></a>02846    <span class="keywordtype">double</span> * kernel ;
-<a name="l02847"></a>02847    <span class="keywordtype">int</span> i=0;
-<a name="l02848"></a>02848    cpl_image* i_img=NULL;
-<a name="l02849"></a>02849    <span class="keywordtype">int</span> ilx=0;
-<a name="l02850"></a>02850    <span class="keywordtype">int</span> ily=0;
-<a name="l02851"></a>02851    <span class="keywordtype">int</span> inp=0;
-<a name="l02852"></a>02852    pixelvalue * tmpspace;
-<a name="l02853"></a>02853    <span class="keywordtype">int</span> z=0;
-<a name="l02854"></a>02854    cpl_image* t_img=NULL;
-<a name="l02855"></a>02855    cpl_image* m_img=NULL;
-<a name="l02856"></a>02856    <span class="keywordtype">int</span> m=0;
-<a name="l02857"></a>02857 
-<a name="l02858"></a>02858     <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l02859"></a>02859 <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span>
-<a name="l02860"></a>02860 <span class="comment">     * that means shift the single image planes of each cube</span>
-<a name="l02861"></a>02861 <span class="comment">     * first determine an interpolation kernel</span>
-<a name="l02862"></a>02862 <span class="comment">     */</span>
-<a name="l02863"></a>02863 
-<a name="l02864"></a>02864    <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)) )
-<a name="l02865"></a>02865     {
-<a name="l02866"></a>02866         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span>
-<a name="l02867"></a>02867                            <span class="stringliteral">"or no kernel_typ was given, the default kernel"</span>
-<a name="l02868"></a>02868                            <span class="stringliteral">"is used now!"</span>) ;
-<a name="l02869"></a>02869     }
-<a name="l02870"></a>02870     <span class="comment">/* go through the frame list */</span>
-<a name="l02871"></a>02871 
-<a name="l02872"></a>02872     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l02873"></a>02873     {
-<a name="l02874"></a>02874 
-<a name="l02875"></a>02875       i_img=cpl_imagelist_get(cubes[i],0);
-<a name="l02876"></a>02876       ilx=cpl_image_get_size_x(i_img);
-<a name="l02877"></a>02877       ily=cpl_image_get_size_y(i_img);
-<a name="l02878"></a>02878       inp=cpl_imagelist_get_size(cubes[i]);
-<a name="l02879"></a>02879       tmpspace = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;
-<a name="l02880"></a>02880       tmpcubes[i]=cpl_imagelist_new();
-<a name="l02881"></a>02881 
-<a name="l02882"></a>02882         <span class="keywordflow">for</span> ( z = z_min, m=0 ; z < z_max ; z++, m++ )
-<a name="l02883"></a>02883         {
-<a name="l02884"></a>02884               t_img=sinfo_new_shift_image(cpl_imagelist_get(cubes[i],z),
-<a name="l02885"></a>02885                                           sub_offsetx[i],
-<a name="l02886"></a>02886                                           sub_offsety[i],
-<a name="l02887"></a>02887                                           kernel);
-<a name="l02888"></a>02888 
-<a name="l02889"></a>02889         <span class="keywordflow">if</span> (t_img==NULL)
-<a name="l02890"></a>02890             {
-<a name="l02891"></a>02891                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not shift image plane no %d "</span>
-<a name="l02892"></a>02892                                 <span class="stringliteral">"in cube no %d!"</span>, z, i) ;
-<a name="l02893"></a>02893                 cpl_free(kernel) ;
-<a name="l02894"></a>02894                 <span class="keywordflow">return</span> -1 ;
-<a name="l02895"></a>02895             }
-<a name="l02896"></a>02896 
-<a name="l02897"></a>02897             cpl_imagelist_set(tmpcubes[i],t_img,m);
-<a name="l02898"></a>02898             m_img=cpl_image_new(mlx,mly,CPL_TYPE_FLOAT);
-<a name="l02899"></a>02899             cpl_imagelist_set(mask,m_img,z);
-<a name="l02900"></a>02900         }
-<a name="l02901"></a>02901 
-<a name="l02902"></a>02902      cpl_free(tmpspace);
-<a name="l02903"></a>02903 
-<a name="l02904"></a>02904     }
-<a name="l02905"></a>02905     <span class="keywordflow">if</span>(kernel != NULL) cpl_free(kernel) ;
-<a name="l02906"></a>02906 
-<a name="l02907"></a>02907     <span class="keywordflow">return</span> 0;
-<a name="l02908"></a>02908 
-<a name="l02909"></a>02909 }
-<a name="l02910"></a>02910 
-<a name="l02911"></a>02911 
-<a name="l02912"></a>02912 <span class="comment">/* Temporally commented out as not yet used</span>
-<a name="l02913"></a>02913 <span class="comment">static int</span>
-<a name="l02914"></a>02914 <span class="comment">sinfo_ks_clip(</span>
-<a name="l02915"></a>02915 <span class="comment">          const int n_cubes,</span>
-<a name="l02916"></a>02916 <span class="comment">              const int nc,</span>
-<a name="l02917"></a>02917 <span class="comment">          const int ilx,</span>
-<a name="l02918"></a>02918 <span class="comment">          const int ily,</span>
-<a name="l02919"></a>02919 <span class="comment">          const double kappa,</span>
-<a name="l02920"></a>02920 <span class="comment">          int* llx,</span>
-<a name="l02921"></a>02921 <span class="comment">          int* lly,</span>
-<a name="l02922"></a>02922 <span class="comment">          double* exptimes,</span>
-<a name="l02923"></a>02923 <span class="comment">          cpl_imagelist** tmpcubes,</span>
-<a name="l02924"></a>02924 <span class="comment">              float* podata,</span>
-<a name="l02925"></a>02925 <span class="comment">              float* pmdata,</span>
-<a name="l02926"></a>02926 <span class="comment">          const int x,</span>
-<a name="l02927"></a>02927 <span class="comment">          const int y,</span>
-<a name="l02928"></a>02928 <span class="comment">          const int m,</span>
-<a name="l02929"></a>02929 <span class="comment">          const int mlx,</span>
-<a name="l02930"></a>02930 <span class="comment">          const int olx</span>
-<a name="l02931"></a>02931 <span class="comment">  )</span>
-<a name="l02932"></a>02932 <span class="comment">{</span>
-<a name="l02933"></a>02933 <span class="comment"></span>
-<a name="l02934"></a>02934 <span class="comment"></span>
-<a name="l02935"></a>02935 <span class="comment">  int posx=0;</span>
-<a name="l02936"></a>02936 <span class="comment">  int posy=0;</span>
-<a name="l02937"></a>02937 <span class="comment">  int i=0;</span>
-<a name="l02938"></a>02938 <span class="comment">  int nclip=0;</span>
-<a name="l02939"></a>02939 <span class="comment">  int ks=0;</span>
-<a name="l02940"></a>02940 <span class="comment"></span>
-<a name="l02941"></a>02941 <span class="comment">  float sig=0;</span>
-<a name="l02942"></a>02942 <span class="comment">  float med=0;</span>
-<a name="l02943"></a>02943 <span class="comment">  float ovr=0;</span>
-<a name="l02944"></a>02944 <span class="comment">  float avg=0;</span>
-<a name="l02945"></a>02945 <span class="comment"></span>
-<a name="l02946"></a>02946 <span class="comment">  float* ptdata=NULL;</span>
-<a name="l02947"></a>02947 <span class="comment">  float* pvdata=NULL;</span>
-<a name="l02948"></a>02948 <span class="comment"></span>
-<a name="l02949"></a>02949 <span class="comment">  cpl_image* t_img=NULL;</span>
-<a name="l02950"></a>02950 <span class="comment">  float  msk_sum=0;</span>
-<a name="l02951"></a>02951 <span class="comment">  float  val_msk_sum=0;</span>
-<a name="l02952"></a>02952 <span class="comment">  cpl_image* v_img=NULL;</span>
-<a name="l02953"></a>02953 <span class="comment"></span>
-<a name="l02954"></a>02954 <span class="comment">  cpl_vector* val=NULL;</span>
-<a name="l02955"></a>02955 <span class="comment">  cpl_vector* msk=NULL;</span>
-<a name="l02956"></a>02956 <span class="comment"></span>
-<a name="l02957"></a>02957 <span class="comment">  msk=cpl_vector_new(n_cubes);</span>
-<a name="l02958"></a>02958 <span class="comment">  for (i=0;i<n_cubes;i++) {</span>
-<a name="l02959"></a>02959 <span class="comment">    cpl_vector_set(msk,i,1);</span>
-<a name="l02960"></a>02960 <span class="comment">  }</span>
-<a name="l02961"></a>02961 <span class="comment"></span>
-<a name="l02962"></a>02962 <span class="comment">  // k-s clipping</span>
-<a name="l02963"></a>02963 <span class="comment">  nclip=0;</span>
-<a name="l02964"></a>02964 <span class="comment"></span>
-<a name="l02965"></a>02965 <span class="comment">  for (ks=0;ks<nc;ks++) {</span>
-<a name="l02966"></a>02966 <span class="comment"></span>
-<a name="l02967"></a>02967 <span class="comment">    sig=0;</span>
-<a name="l02968"></a>02968 <span class="comment">    med=0;</span>
-<a name="l02969"></a>02969 <span class="comment">    ovr=0;</span>
-<a name="l02970"></a>02970 <span class="comment">    if(nc-nclip >0) {</span>
-<a name="l02971"></a>02971 <span class="comment">      val=cpl_vector_new(nc-nclip);</span>
-<a name="l02972"></a>02972 <span class="comment">    }</span>
-<a name="l02973"></a>02973 <span class="comment"></span>
-<a name="l02974"></a>02974 <span class="comment">    // fill val</span>
-<a name="l02975"></a>02975 <span class="comment">    for ( i = 0 ; i < n_cubes ; i++ ) {</span>
-<a name="l02976"></a>02976 <span class="comment">      t_img=cpl_imagelist_get(tmpcubes[i],m);</span>
-<a name="l02977"></a>02977 <span class="comment">      ptdata=cpl_image_get_data_float(t_img);</span>
-<a name="l02978"></a>02978 <span class="comment">      if ( y >= lly[i] && y < lly[i]+ily &&</span>
-<a name="l02979"></a>02979 <span class="comment">       x >= llx[i] && x < llx[i]+ilx ) {</span>
-<a name="l02980"></a>02980 <span class="comment">    posx = x - llx[i] ;</span>
-<a name="l02981"></a>02981 <span class="comment">    posy = y - lly[i] ;</span>
-<a name="l02982"></a>02982 <span class="comment">    if (!isnan(ptdata[posx+posy*ilx]) &&</span>
-<a name="l02983"></a>02983 <span class="comment">        ptdata[posx+posy*ilx] != 0. &&</span>
-<a name="l02984"></a>02984 <span class="comment">        (cpl_vector_get(msk,i) != 0)) {</span>
-<a name="l02985"></a>02985 <span class="comment">      cpl_vector_set(val,ovr,(double)ptdata[posx+posy*ilx]);</span>
-<a name="l02986"></a>02986 <span class="comment">      ovr++;</span>
-<a name="l02987"></a>02987 <span class="comment">    }</span>
-<a name="l02988"></a>02988 <span class="comment">      }</span>
-<a name="l02989"></a>02989 <span class="comment">    }</span>
-<a name="l02990"></a>02990 <span class="comment"></span>
-<a name="l02991"></a>02991 <span class="comment">    // get avg, med, sig</span>
-<a name="l02992"></a>02992 <span class="comment">    if(ovr>0) {</span>
-<a name="l02993"></a>02993 <span class="comment">      avg=cpl_vector_get_mean(val);</span>
-<a name="l02994"></a>02994 <span class="comment">      med=cpl_vector_get_median_const(val);</span>
-<a name="l02995"></a>02995 <span class="comment">      if(ovr>1) {</span>
-<a name="l02996"></a>02996 <span class="comment">    sig=cpl_vector_get_stdev(val);</span>
-<a name="l02997"></a>02997 <span class="comment">      } else {</span>
-<a name="l02998"></a>02998 <span class="comment">    sig=0;</span>
-<a name="l02999"></a>02999 <span class="comment">      }</span>
-<a name="l03000"></a>03000 <span class="comment">      cpl_vector_delete(val);</span>
-<a name="l03001"></a>03001 <span class="comment">    }</span>
-<a name="l03002"></a>03002 <span class="comment"></span>
-<a name="l03003"></a>03003 <span class="comment">    for ( i = 0 ; i < n_cubes ; i++ ) {</span>
-<a name="l03004"></a>03004 <span class="comment">      t_img=cpl_imagelist_get(tmpcubes[i],m);</span>
-<a name="l03005"></a>03005 <span class="comment">      ptdata=cpl_image_get_data_float(t_img);</span>
-<a name="l03006"></a>03006 <span class="comment">      // Do k-s clipping at each pixel</span>
-<a name="l03007"></a>03007 <span class="comment">      if ( y >= lly[i] && y < lly[i]+ily &&</span>
-<a name="l03008"></a>03008 <span class="comment">       x >= llx[i] && x < llx[i]+ilx ) {</span>
-<a name="l03009"></a>03009 <span class="comment">    posx = x - llx[i] ;</span>
-<a name="l03010"></a>03010 <span class="comment">    posy = y - lly[i] ;</span>
-<a name="l03011"></a>03011 <span class="comment">    //sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span>
-<a name="l03012"></a>03012 <span class="comment">    //sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span>
-<a name="l03013"></a>03013 <span class="comment">    if (!isnan(ptdata[posx+posy*ilx]) &&</span>
-<a name="l03014"></a>03014 <span class="comment">        ptdata[posx+posy*ilx] != 0. &&</span>
-<a name="l03015"></a>03015 <span class="comment">        (cpl_vector_get(msk,i) != 0)) {</span>
-<a name="l03016"></a>03016 <span class="comment">      if(abs((ptdata[posx+posy*ilx]-med))> kappa*sig) {</span>
-<a name="l03017"></a>03017 <span class="comment">        ptdata[posx+posy*ilx]=0;</span>
-<a name="l03018"></a>03018 <span class="comment"></span>
-<a name="l03019"></a>03019 <span class="comment">        pmdata[x+y*mlx] -= exptimes[i]  ;</span>
-<a name="l03020"></a>03020 <span class="comment"></span>
-<a name="l03021"></a>03021 <span class="comment">        cpl_vector_set(msk,i,0);</span>
-<a name="l03022"></a>03022 <span class="comment">        nclip++;</span>
-<a name="l03023"></a>03023 <span class="comment">      }</span>
-<a name="l03024"></a>03024 <span class="comment">    }</span>
-<a name="l03025"></a>03025 <span class="comment">      }</span>
-<a name="l03026"></a>03026 <span class="comment"></span>
-<a name="l03027"></a>03027 <span class="comment">    }</span>
-<a name="l03028"></a>03028 <span class="comment">  }</span>
-<a name="l03029"></a>03029 <span class="comment"></span>
-<a name="l03030"></a>03030 <span class="comment">  msk_sum=0;</span>
-<a name="l03031"></a>03031 <span class="comment">  val_msk_sum=0;</span>
-<a name="l03032"></a>03032 <span class="comment">  for ( i = 0 ; i < n_cubes ; i++ ) {</span>
-<a name="l03033"></a>03033 <span class="comment">    v_img=cpl_imagelist_get(tmpcubes[i],m);</span>
-<a name="l03034"></a>03034 <span class="comment">    pvdata=cpl_image_get_data_float(v_img);</span>
-<a name="l03035"></a>03035 <span class="comment">    // computes sky at each point</span>
-<a name="l03036"></a>03036 <span class="comment">    if ( y >= lly[i] && y < lly[i]+ily &&</span>
-<a name="l03037"></a>03037 <span class="comment">     x >= llx[i] && x < llx[i]+ilx ) {</span>
-<a name="l03038"></a>03038 <span class="comment">      posx = x - llx[i] ;</span>
-<a name="l03039"></a>03039 <span class="comment">      posy = y - lly[i] ;</span>
-<a name="l03040"></a>03040 <span class="comment">      if (!isnan(pvdata[posx+posy*ilx]) &&</span>
-<a name="l03041"></a>03041 <span class="comment">      pvdata[posx+posy*ilx] != 0. &&</span>
-<a name="l03042"></a>03042 <span class="comment">      (cpl_vector_get(msk,i) != 0)) {</span>
-<a name="l03043"></a>03043 <span class="comment"></span>
-<a name="l03044"></a>03044 <span class="comment">    msk_sum+= pmdata[x+y*mlx];</span>
-<a name="l03045"></a>03045 <span class="comment"></span>
-<a name="l03046"></a>03046 <span class="comment">    val_msk_sum+=pvdata[posx+posy*ilx]*</span>
-<a name="l03047"></a>03047 <span class="comment">      pmdata[x+y*mlx];</span>
-<a name="l03048"></a>03048 <span class="comment"></span>
-<a name="l03049"></a>03049 <span class="comment">      }</span>
-<a name="l03050"></a>03050 <span class="comment">    }</span>
-<a name="l03051"></a>03051 <span class="comment">  }</span>
-<a name="l03052"></a>03052 <span class="comment"></span>
-<a name="l03053"></a>03053 <span class="comment">  podata[x+y*olx]=val_msk_sum/msk_sum;</span>
-<a name="l03054"></a>03054 <span class="comment">  cpl_vector_delete(msk);</span>
-<a name="l03055"></a>03055 <span class="comment"></span>
-<a name="l03056"></a>03056 <span class="comment">  return 0;</span>
-<a name="l03057"></a>03057 <span class="comment"></span>
-<a name="l03058"></a>03058 <span class="comment">}</span>
-<a name="l03059"></a>03059 <span class="comment"></span>
-<a name="l03060"></a>03060 <span class="comment">*/</span>
-<a name="l03061"></a>03061 
-<a name="l03111"></a>03111 <span class="keywordtype">int</span>
-<a name="l03112"></a>03112 sinfo_new_combine_jittered_cubes_thomas_range(cpl_imagelist ** cubes,
-<a name="l03113"></a>03113                     cpl_imagelist  * mergedCube,
-<a name="l03114"></a>03114                     cpl_imagelist  * mask,
-<a name="l03115"></a>03115                     <span class="keywordtype">int</span>        n_cubes,
-<a name="l03116"></a>03116                     <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l03117"></a>03117                     <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l03118"></a>03118                     <span class="keywordtype">double</span>    * exptimes,
-<a name="l03119"></a>03119                     <span class="keywordtype">char</span>     * kernel_type,
-<a name="l03120"></a>03120                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l03121"></a>03121                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l03122"></a>03122                                     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa )
-<a name="l03123"></a>03123 {
-<a name="l03124"></a>03124     <span class="keyword">const</span> <span class="keywordtype">int</span> VERY_BIG_INT = 268431360;
-<a name="l03125"></a>03125   <span class="keywordtype">int</span> i ;
-<a name="l03126"></a>03126   <span class="keywordtype">int</span> llx0, lly0 ;
-<a name="l03127"></a>03127   <span class="keywordtype">int</span>* llx=NULL;
-<a name="l03128"></a>03128   <span class="keywordtype">int</span>* lly=NULL ;
-<a name="l03129"></a>03129   <span class="keywordtype">float</span>* sub_offsetx=NULL ;
-<a name="l03130"></a>03130   <span class="keywordtype">float</span>* sub_offsety=NULL ;
-<a name="l03131"></a>03131   cpl_imagelist ** tmpcubes=NULL ;
-<a name="l03132"></a>03132   <span class="keyword">const</span> <span class="keywordtype">int</span> z_siz=z_max-z_min;
-<a name="l03133"></a>03133   <span class="keywordtype">int</span> ilx=0;
-<a name="l03134"></a>03134   <span class="keywordtype">int</span> ily=0;
-<a name="l03135"></a>03135   <span class="keywordtype">int</span> olx=0;
-<a name="l03136"></a>03136   <span class="keywordtype">int</span> oly=0;
-<a name="l03137"></a>03137   <span class="keywordtype">int</span> mlx=0;
-<a name="l03138"></a>03138   <span class="keywordtype">int</span> mly=0;
-<a name="l03139"></a>03139   <span class="keywordtype">int</span> onp=0;
-<a name="l03140"></a>03140   cpl_image* i_img=NULL;
-<a name="l03141"></a>03141   cpl_image* o_img=NULL;
-<a name="l03142"></a>03142   <span class="keywordtype">int</span> min_lx = VERY_BIG_INT;
-<a name="l03143"></a>03143   <span class="keywordtype">int</span> min_ly = VERY_BIG_INT;
-<a name="l03144"></a>03144 
-<a name="l03145"></a>03145 
-<a name="l03146"></a>03146   <span class="keywordflow">if</span>(sinfo_check_input(cubes,n_cubes,cumoffsetx,cumoffsety,exptimes) == -1) {
-<a name="l03147"></a>03147     <span class="keywordflow">return</span> -1;
-<a name="l03148"></a>03148   }
-<a name="l03149"></a>03149 
-<a name="l03150"></a>03150   <span class="keywordflow">if</span> (z_siz <= 0 ){
-<a name="l03151"></a>03151     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"z_max <= z_min given!"</span>) ;
-<a name="l03152"></a>03152     <span class="keywordflow">return</span> -1 ;
-<a name="l03153"></a>03153   }
-<a name="l03154"></a>03154 
-<a name="l03155"></a>03155   i_img=cpl_imagelist_get(cubes[0],0);
-<a name="l03156"></a>03156   o_img=cpl_imagelist_get(mergedCube,0);
-<a name="l03157"></a>03157   ilx=cpl_image_get_size_x(i_img);
-<a name="l03158"></a>03158   ily=cpl_image_get_size_y(i_img);
-<a name="l03159"></a>03159   olx=cpl_image_get_size_x(o_img);
-<a name="l03160"></a>03160   oly=cpl_image_get_size_y(o_img);
-<a name="l03161"></a>03161   mlx=olx;
-<a name="l03162"></a>03162   mly=oly;
-<a name="l03163"></a>03163 <span class="comment">//  sinfo_msg_warning(" cube size [%d:%d] merged cube size[%d:%d]" , ilx, ily, olx, oly);</span>
-<a name="l03164"></a>03164   <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l03165"></a>03165 <span class="comment">   * center the cubes within the allocated big cube</span>
-<a name="l03166"></a>03166 <span class="comment">   * that means define the (0,0) positions of the cubes in the image planes</span>
-<a name="l03167"></a>03167 <span class="comment">   * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span>
-<a name="l03168"></a>03168 <span class="comment">   */</span>
-<a name="l03169"></a>03169   <span class="comment">/* position of first reference frame, centered in big cube */</span>
-<a name="l03170"></a>03170   llx0 = (1.0 * olx- 1.0 * ilx)/2.0 ;
-<a name="l03171"></a>03171   lly0 = (1.0 * oly - 1.0 * ily)/2.0 ;
-<a name="l03172"></a>03172 <span class="comment">//  sinfo_msg_warning(" zero point [%d:%d]" , llx0, lly0);</span>
-<a name="l03173"></a>03173   <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l03174"></a>03174 <span class="comment">   * go through the frame list and determine the lower left edge position</span>
-<a name="l03175"></a>03175 <span class="comment">   * of the shifted cubes. Additionnally, the sub-pixel offsets are</span>
-<a name="l03176"></a>03176 <span class="comment">   * determined.</span>
-<a name="l03177"></a>03177 <span class="comment">   */</span>
-<a name="l03178"></a>03178 
-<a name="l03179"></a>03179   llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l03180"></a>03180   lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l03181"></a>03181   sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03182"></a>03182   sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03183"></a>03183 
-<a name="l03184"></a>03184   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l03185"></a>03185     llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;
-<a name="l03186"></a>03186 
-<a name="l03187"></a>03187     sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;
-<a name="l03188"></a>03188     lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;
-<a name="l03189"></a>03189     sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;
-<a name="l03190"></a>03190 <span class="comment">/*    sinfo_msg_warning("suboff[%d]= %f %f  ll[%d:%d] cumoffset[%f:%f]" ,</span>
-<a name="l03191"></a>03191 <span class="comment">            i,sub_offsetx[i],sub_offsety[i], llx[i], lly[i],</span>
-<a name="l03192"></a>03192 <span class="comment">            cumoffsetx[i], cumoffsety[i]);*/</span>
-<a name="l03193"></a>03193     <span class="keywordflow">if</span> (llx[i] < min_lx)
-<a name="l03194"></a>03194     {
-<a name="l03195"></a>03195         min_lx = llx[i];
-<a name="l03196"></a>03196     }
-<a name="l03197"></a>03197     <span class="keywordflow">if</span> (lly[i] < min_ly)
-<a name="l03198"></a>03198     {
-<a name="l03199"></a>03199         min_ly = lly[i];
-<a name="l03200"></a>03200     }
-<a name="l03201"></a>03201   }
-<a name="l03202"></a>03202   <span class="comment">/***********---------</span>
-<a name="l03203"></a>03203 <span class="comment">   * "normalize" the shift - minimum should be 0</span>
-<a name="l03204"></a>03204 <span class="comment">   **********************************************/</span>
-<a name="l03205"></a>03205   <span class="keywordflow">if</span> (min_lx != 0)
-<a name="l03206"></a>03206   {
-<a name="l03207"></a>03207     <span class="keywordflow">for</span> (i = 0 ; i < n_cubes ; i++ )
-<a name="l03208"></a>03208     {
-<a name="l03209"></a>03209         llx[i] = llx[i] - min_lx;
-<a name="l03210"></a>03210     }
-<a name="l03211"></a>03211   }
-<a name="l03212"></a>03212   <span class="keywordflow">if</span> (min_ly != 0)
-<a name="l03213"></a>03213   {
-<a name="l03214"></a>03214     <span class="keywordflow">for</span> (i = 0 ; i < n_cubes ; i++ )
-<a name="l03215"></a>03215     {
-<a name="l03216"></a>03216         lly[i] = lly[i] - min_ly;
-<a name="l03217"></a>03217     }
-<a name="l03218"></a>03218   }
-<a name="l03219"></a>03219 
-<a name="l03220"></a>03220   <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l03221"></a>03221 <span class="comment">   * shift the cubes according to the computed sub-pixel offsets</span>
-<a name="l03222"></a>03222 <span class="comment">   * that means shift the single image planes of each cube</span>
-<a name="l03223"></a>03223 <span class="comment">   * first determine an interpolation kernel</span>
-<a name="l03224"></a>03224 <span class="comment">   */</span>
-<a name="l03225"></a>03225 
-<a name="l03226"></a>03226   tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;
-<a name="l03227"></a>03227 
-<a name="l03228"></a>03228   <span class="keywordflow">if</span>(sinfo_shift_cubes(tmpcubes,kernel_type,n_cubes,cubes,z_min, z_max,
-<a name="l03229"></a>03229                sub_offsetx,sub_offsety,mlx,mly,mask) == -1) {
-<a name="l03230"></a>03230     <span class="keywordflow">return</span> -1;
-<a name="l03231"></a>03231 
-<a name="l03232"></a>03232   }
-<a name="l03233"></a>03233 
-<a name="l03234"></a>03234 
-<a name="l03235"></a>03235   <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l03236"></a>03236 <span class="comment">   * Build the mask data cube.</span>
-<a name="l03237"></a>03237 <span class="comment">   * The mask is 0 where no data is available, otherwise the integration</span>
-<a name="l03238"></a>03238 <span class="comment">   * time of one frame, respectively the summed integration</span>
-<a name="l03239"></a>03239 <span class="comment">   * times in the overlapping regions are inserted</span>
-<a name="l03240"></a>03240 <span class="comment">   */</span>
-<a name="l03241"></a>03241   <span class="comment">/* go through the frame list */</span>
-<a name="l03242"></a>03242 
-<a name="l03243"></a>03243 
-<a name="l03244"></a>03244   o_img=cpl_imagelist_get(mergedCube,0);
-<a name="l03245"></a>03245   olx=cpl_image_get_size_x(o_img);
-<a name="l03246"></a>03246   oly=cpl_image_get_size_y(o_img);
-<a name="l03247"></a>03247   onp=cpl_imagelist_get_size(mergedCube);
-<a name="l03248"></a>03248 
-<a name="l03249"></a>03249   <span class="keywordflow">if</span>(-1 == sinfo_build_mask_cube_thomas(z_min,z_max,olx,oly,n_cubes,llx,lly,
-<a name="l03250"></a>03250                     exptimes,cubes,tmpcubes,mask) ) {
-<a name="l03251"></a>03251     <span class="keywordflow">return</span> -1;
-<a name="l03252"></a>03252   }
-<a name="l03254"></a>03254 <span class="comment">/*</span>
-<a name="l03255"></a>03255 <span class="comment">  check_nomsg(sinfo_coadd_with_ks_clip_optimized(z_min,z_max,n_cubes,</span>
-<a name="l03256"></a>03256 <span class="comment">                                           kappa,llx,lly,</span>
-<a name="l03257"></a>03257 <span class="comment">                                           exptimes,mask,mergedCube,tmpcubes));</span>
-<a name="l03258"></a>03258 <span class="comment">*/</span>
-<a name="l03261"></a>03261   check_nomsg(sinfo_coadd_with_ks_clip2(z_min,z_max,ilx,ily,n_cubes,kappa,llx,lly,
-<a name="l03262"></a>03262                                         exptimes,mask,mergedCube,tmpcubes));
-<a name="l03263"></a>03263 
-<a name="l03265"></a>03265   <span class="comment">/* convert the "free space" in the cube to blank pixels */</span>
-<a name="l03266"></a>03266   <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span>
-<a name="l03267"></a>03267   <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedSky) ; */</span>
-<a name="l03268"></a>03268   <span class="comment">//cpl_free(kernel) ; /* originated by eclise-malloc */</span>
-<a name="l03269"></a>03269 
-<a name="l03270"></a>03270   cleanup:
-<a name="l03271"></a>03271 
-<a name="l03272"></a>03272   <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l03273"></a>03273     cpl_imagelist_delete (tmpcubes[i]) ;
-<a name="l03274"></a>03274   }
-<a name="l03275"></a>03275 
-<a name="l03276"></a>03276   cpl_free(tmpcubes);
-<a name="l03277"></a>03277   cpl_free(llx);
-<a name="l03278"></a>03278   cpl_free(lly) ;
-<a name="l03279"></a>03279   cpl_free(sub_offsetx) ;
-<a name="l03280"></a>03280   cpl_free(sub_offsety) ;
-<a name="l03281"></a>03281   sinfo_print_rec_status(0);
-<a name="l03282"></a>03282 
-<a name="l03283"></a>03283   <span class="keywordflow">return</span> 0 ;
-<a name="l03284"></a>03284 }
-<a name="l03285"></a>03285 
-<a name="l03299"></a>03299 cpl_imagelist *
-<a name="l03300"></a>03300 sinfo_new_interpol_cube_simple( cpl_imagelist * cube,
-<a name="l03301"></a>03301                       cpl_imagelist * badcube,
-<a name="l03302"></a>03302                       <span class="keywordtype">int</span>       maxdist )
-<a name="l03303"></a>03303 {
-<a name="l03304"></a>03304   cpl_imagelist * intercube ;
-<a name="l03305"></a>03305   <span class="keywordtype">float</span>*     goodNeighbors=NULL ;
-<a name="l03306"></a>03306   <span class="keywordtype">int</span> z, row, col ;
-<a name="l03307"></a>03307   <span class="keywordtype">int</span> nx, ny, nz ;
-<a name="l03308"></a>03308   <span class="keywordtype">int</span> llx, lly, llz ;
-<a name="l03309"></a>03309   <span class="keywordtype">int</span> zi, coli, rowi ;
-<a name="l03310"></a>03310   <span class="keywordtype">int</span> n ;
-<a name="l03311"></a>03311 
-<a name="l03312"></a>03312 
-<a name="l03313"></a>03313 
-<a name="l03314"></a>03314 
-<a name="l03315"></a>03315   <span class="keywordtype">int</span> clx=0;
-<a name="l03316"></a>03316   <span class="keywordtype">int</span> cly=0;
-<a name="l03317"></a>03317   <span class="keywordtype">int</span> blx=0;
-<a name="l03318"></a>03318   <span class="keywordtype">int</span> bly=0;
-<a name="l03319"></a>03319 
-<a name="l03320"></a>03320   <span class="keywordtype">int</span> cnp=0;
-<a name="l03321"></a>03321 
-<a name="l03322"></a>03322 
-<a name="l03323"></a>03323   <span class="keywordtype">float</span>* pbdata=NULL;
-<a name="l03324"></a>03324   <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l03325"></a>03325   <span class="keywordtype">float</span>* pbzidata=NULL;
-<a name="l03326"></a>03326   <span class="keywordtype">float</span>* pczidata=NULL;
-<a name="l03327"></a>03327 
-<a name="l03328"></a>03328   cpl_image* c_img=NULL;
-<a name="l03329"></a>03329   cpl_image* b_img=NULL;
-<a name="l03330"></a>03330   cpl_image* i_img=NULL;
-<a name="l03331"></a>03331 
-<a name="l03332"></a>03332   cpl_image* bzi_img=NULL;
-<a name="l03333"></a>03333   cpl_image* czi_img=NULL;
-<a name="l03334"></a>03334 
-<a name="l03335"></a>03335 
-<a name="l03336"></a>03336 
-<a name="l03337"></a>03337     <span class="keywordflow">if</span> ( cube == NULL || badcube == NULL )
-<a name="l03338"></a>03338     {
-<a name="l03339"></a>03339         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!"</span>) ;
-<a name="l03340"></a>03340         <span class="keywordflow">return</span> NULL ;
-<a name="l03341"></a>03341     }
-<a name="l03342"></a>03342     <span class="keywordflow">if</span> ( maxdist < 1 )
-<a name="l03343"></a>03343     {
-<a name="l03344"></a>03344         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong maxrad given!"</span>) ;
-<a name="l03345"></a>03345         <span class="keywordflow">return</span> NULL ;
-<a name="l03346"></a>03346     }
-<a name="l03347"></a>03347     intercube = cpl_imagelist_duplicate(cube) ;
-<a name="l03348"></a>03348 
-<a name="l03349"></a>03349     goodNeighbors=cpl_calloc((2*maxdist+1)*(2*maxdist+1)*(2*maxdist+1) -1,
-<a name="l03350"></a>03350                              <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03351"></a>03351 
-<a name="l03352"></a>03352     cnp=cpl_imagelist_get_size(cube);
-<a name="l03353"></a>03353     <span class="keywordflow">for</span> ( z = 0 ; z < cnp ; z++ )
-<a name="l03354"></a>03354     {
-<a name="l03355"></a>03355       b_img=cpl_imagelist_get(badcube,z);
-<a name="l03356"></a>03356       i_img=cpl_imagelist_get(intercube,z);
-<a name="l03357"></a>03357       pbdata=cpl_image_get_data_float(b_img);
-<a name="l03358"></a>03358       pidata=cpl_image_get_data_float(i_img);
-<a name="l03359"></a>03359       blx=cpl_image_get_size_x(b_img);
-<a name="l03360"></a>03360       bly=cpl_image_get_size_y(b_img);
-<a name="l03361"></a>03361 
-<a name="l03362"></a>03362       c_img=cpl_imagelist_get(cube,z);
-<a name="l03363"></a>03363       clx=cpl_image_get_size_x(c_img);
-<a name="l03364"></a>03364       cly=cpl_image_get_size_y(c_img);
-<a name="l03365"></a>03365 
-<a name="l03366"></a>03366         <span class="keywordflow">for</span> ( row = 0 ; row < cly ; row++ )
-<a name="l03367"></a>03367         {
-<a name="l03368"></a>03368             <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )
-<a name="l03369"></a>03369             {
-<a name="l03370"></a>03370                 <span class="keywordflow">if</span> ( pbdata[col+row*clx] == 0 )
-<a name="l03371"></a>03371                 {
-<a name="l03372"></a>03372                     <span class="comment">/* determine the lower left sinfo_edge of the cube */</span>
-<a name="l03373"></a>03373                     llx = col - maxdist ;
-<a name="l03374"></a>03374                     nx = 2*maxdist +1 ;
-<a name="l03375"></a>03375                     <span class="keywordflow">if</span> (llx < 0)
-<a name="l03376"></a>03376                     {
-<a name="l03377"></a>03377                        nx += llx ;
-<a name="l03378"></a>03378                        llx = 0 ;
-<a name="l03379"></a>03379                     }
-<a name="l03380"></a>03380                     <span class="keywordflow">if</span> ( llx + nx > clx )
-<a name="l03381"></a>03381                     {
-<a name="l03382"></a>03382                         nx -= (llx + nx - clx) ;
-<a name="l03383"></a>03383                     }
-<a name="l03384"></a>03384 
-<a name="l03385"></a>03385                     lly = row - maxdist ;
-<a name="l03386"></a>03386                     ny = 2*maxdist +1 ;
-<a name="l03387"></a>03387                     <span class="keywordflow">if</span> (lly < 0)
-<a name="l03388"></a>03388                     {
-<a name="l03389"></a>03389                        ny += lly ;
-<a name="l03390"></a>03390                        lly = 0 ;
-<a name="l03391"></a>03391                     }
-<a name="l03392"></a>03392                     <span class="keywordflow">if</span> ( lly + ny > cly )
-<a name="l03393"></a>03393                     {
-<a name="l03394"></a>03394                         ny -= (lly + ny - cly) ;
-<a name="l03395"></a>03395                     }
-<a name="l03396"></a>03396 
-<a name="l03397"></a>03397                     llz = z - maxdist ;
-<a name="l03398"></a>03398                     nz = 2*maxdist +1 ;
-<a name="l03399"></a>03399                     <span class="keywordflow">if</span> (llz < 0)
-<a name="l03400"></a>03400                     {
-<a name="l03401"></a>03401                        nz += llz ;
-<a name="l03402"></a>03402                        llz = 0 ;
-<a name="l03403"></a>03403                     }
-<a name="l03404"></a>03404                     <span class="keywordflow">if</span> ( llz + nz > cnp )
-<a name="l03405"></a>03405                     {
-<a name="l03406"></a>03406                         nz -= (llz + nz - cnp) ;
-<a name="l03407"></a>03407                     }
-<a name="l03408"></a>03408                     n = 0 ;
-<a name="l03409"></a>03409                     <span class="keywordflow">for</span> ( zi = llz ; zi < llz+nz ; zi++ )
-<a name="l03410"></a>03410                     {
-<a name="l03411"></a>03411               bzi_img=cpl_imagelist_get(badcube,zi);
-<a name="l03412"></a>03412               czi_img=cpl_imagelist_get(cube,zi);
-<a name="l03413"></a>03413                       pbzidata=cpl_image_get_data_float(bzi_img);
-<a name="l03414"></a>03414                       pczidata=cpl_image_get_data_float(czi_img);
-<a name="l03415"></a>03415 
-<a name="l03416"></a>03416                         <span class="keywordflow">for</span> ( rowi = lly ; rowi < lly+ny ; rowi++ )
-<a name="l03417"></a>03417                         {
-<a name="l03418"></a>03418                             <span class="keywordflow">for</span> ( coli = llx ; coli < llx+nx ; coli++ )
-<a name="l03419"></a>03419                             {
-<a name="l03420"></a>03420                                 <span class="keywordflow">if</span> ( pbzidata[coli+rowi*blx] == 1 )
-<a name="l03421"></a>03421                                 {
-<a name="l03422"></a>03422                   goodNeighbors[n] = pczidata[coli+rowi*clx] ;
-<a name="l03423"></a>03423                   n++ ;
-<a name="l03424"></a>03424                                 }
-<a name="l03425"></a>03425                             }
-<a name="l03426"></a>03426                         }
-<a name="l03427"></a>03427                     }
-<a name="l03428"></a>03428                     <span class="keywordflow">if</span> ( n > 0 )
-<a name="l03429"></a>03429                     {
-<a name="l03430"></a>03430                         pidata[col+row*clx]=sinfo_new_median(goodNeighbors,n);
-<a name="l03431"></a>03431                         pbdata[col+row*clx]=1 ;
-<a name="l03432"></a>03432                     }
-<a name="l03433"></a>03433                     <span class="keywordflow">else</span>
-<a name="l03434"></a>03434                     {
-<a name="l03435"></a>03435                         continue ;
-<a name="l03436"></a>03436                     }
-<a name="l03437"></a>03437                 }
-<a name="l03438"></a>03438             }
-<a name="l03439"></a>03439         }
-<a name="l03440"></a>03440     }
-<a name="l03441"></a>03441     cpl_free(goodNeighbors) ;
-<a name="l03442"></a>03442     <span class="keywordflow">return</span> intercube ;
-<a name="l03443"></a>03443 }
-<a name="l03444"></a>03444 
-<a name="l03445"></a>03445 
-<a name="l03446"></a>03446 
-<a name="l03447"></a>03447 
-<a name="l03448"></a>03448 
-<a name="l03501"></a>03501 cpl_imagelist *
-<a name="l03502"></a>03502 sinfo_new_combine_cubes ( cpl_imagelist ** cubes,
-<a name="l03503"></a>03503                          cpl_imagelist  * mergedCube,
-<a name="l03504"></a>03504                          <span class="keywordtype">int</span>        n_cubes,
-<a name="l03505"></a>03505                          <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l03506"></a>03506                          <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l03507"></a>03507                          <span class="keywordtype">float</span>      factor,
-<a name="l03508"></a>03508                          <span class="keywordtype">char</span>     * kernel_type )
-<a name="l03509"></a>03509 {
-<a name="l03510"></a>03510   <span class="keywordtype">int</span> i=0 ;
-<a name="l03511"></a>03511   <span class="keywordtype">int</span> x=0;
-<a name="l03512"></a>03512   <span class="keywordtype">int</span> y=0;
-<a name="l03513"></a>03513   <span class="keywordtype">int</span> z=0;
-<a name="l03514"></a>03514   <span class="keywordtype">int</span> llx0=0;
-<a name="l03515"></a>03515   <span class="keywordtype">int</span> lly0=0;
-<a name="l03516"></a>03516   <span class="keywordtype">int</span> posx=0;
-<a name="l03517"></a>03517   <span class="keywordtype">int</span> posy=0;
-<a name="l03518"></a>03518   cpl_imagelist * mask=NULL ;
-<a name="l03519"></a>03519   <span class="keywordtype">double</span> * kernel=NULL ;
-<a name="l03520"></a>03520   cpl_image * shiftedImage=NULL ;
-<a name="l03521"></a>03521   <span class="keywordtype">int</span> n=0;
-<a name="l03522"></a>03522   <span class="keywordtype">int</span> ns=0;
-<a name="l03523"></a>03523   <span class="keywordtype">double</span> sum=0;
-<a name="l03524"></a>03524   <span class="keywordtype">double</span> sum2=0;
-<a name="l03525"></a>03525   <span class="keywordtype">double</span> mean=0;
-<a name="l03526"></a>03526   <span class="keywordtype">double</span> sigma=0;
-<a name="l03527"></a>03527 
-<a name="l03528"></a>03528   cpl_imagelist ** tmpcubes=NULL ;
-<a name="l03529"></a>03529 
-<a name="l03530"></a>03530   <span class="keywordtype">int</span>* llx=NULL ;
-<a name="l03531"></a>03531   <span class="keywordtype">int</span>* lly=NULL ;
-<a name="l03532"></a>03532 
-<a name="l03533"></a>03533   <span class="keywordtype">float</span>* sub_offsetx=NULL ;
-<a name="l03534"></a>03534   <span class="keywordtype">float</span>* sub_offsety=NULL ;
-<a name="l03535"></a>03535   <span class="keywordtype">float</span>* cubedata=NULL ;
-<a name="l03536"></a>03536 
-<a name="l03537"></a>03537   <span class="keywordtype">int</span> mlx=0;
-<a name="l03538"></a>03538   <span class="keywordtype">int</span> mly=0;
-<a name="l03539"></a>03539   <span class="keywordtype">int</span> clx=0;
-<a name="l03540"></a>03540   <span class="keywordtype">int</span> cly=0;
-<a name="l03541"></a>03541   <span class="keywordtype">int</span> mnp=0;
-<a name="l03542"></a>03542   <span class="keywordtype">int</span> cnp=0;
-<a name="l03543"></a>03543 
-<a name="l03544"></a>03544 
-<a name="l03545"></a>03545   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l03546"></a>03546   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l03547"></a>03547   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l03548"></a>03548 
-<a name="l03549"></a>03549   cpl_image* tmp_img=NULL;
-<a name="l03550"></a>03550   cpl_image* o_img=NULL;
-<a name="l03551"></a>03551   cpl_image* m_img=NULL;
-<a name="l03552"></a>03552   cpl_image* c_img=NULL;
-<a name="l03553"></a>03553   cpl_image* t_img=NULL;
-<a name="l03554"></a>03554 
-<a name="l03555"></a>03555 
-<a name="l03556"></a>03556 
-<a name="l03557"></a>03557 
-<a name="l03558"></a>03558   <span class="keywordflow">if</span> ( cubes == NULL )
-<a name="l03559"></a>03559     {
-<a name="l03560"></a>03560         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l03561"></a>03561         <span class="keywordflow">return</span> NULL ;
-<a name="l03562"></a>03562     }
-<a name="l03563"></a>03563 
-<a name="l03564"></a>03564 
-<a name="l03565"></a>03565   <span class="keywordflow">if</span> ( mergedCube == NULL )
-<a name="l03566"></a>03566     {
-<a name="l03567"></a>03567         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no out cube  given!"</span>) ;
-<a name="l03568"></a>03568         <span class="keywordflow">return</span> NULL ;
-<a name="l03569"></a>03569     }
-<a name="l03570"></a>03570 
-<a name="l03571"></a>03571 
-<a name="l03572"></a>03572     <span class="keywordflow">if</span> ( n_cubes <= 0 )
-<a name="l03573"></a>03573     {
-<a name="l03574"></a>03574         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l03575"></a>03575         <span class="keywordflow">return</span> NULL ;
-<a name="l03576"></a>03576     }
-<a name="l03577"></a>03577     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )
-<a name="l03578"></a>03578     {
-<a name="l03579"></a>03579         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;
-<a name="l03580"></a>03580         <span class="keywordflow">return</span> NULL;
-<a name="l03581"></a>03581     }
-<a name="l03582"></a>03582 
-<a name="l03583"></a>03583   <span class="keywordflow">if</span> ( factor <= 0. )
-<a name="l03584"></a>03584     {
-<a name="l03585"></a>03585         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong factor given!"</span>) ;
-<a name="l03586"></a>03586         <span class="keywordflow">return</span> NULL ;
-<a name="l03587"></a>03587     }
-<a name="l03588"></a>03588 
-<a name="l03589"></a>03589   m_img=cpl_imagelist_get(mergedCube,0);
-<a name="l03590"></a>03590   mlx=cpl_image_get_size_x(m_img);
-<a name="l03591"></a>03591   mly=cpl_image_get_size_y(m_img);
-<a name="l03592"></a>03592   cnp=cpl_imagelist_get_size(cubes[0]);
-<a name="l03593"></a>03593   c_img=cpl_imagelist_get(cubes[0],0);
-<a name="l03594"></a>03594   clx=cpl_image_get_size_x(c_img);
-<a name="l03595"></a>03595   cly=cpl_image_get_size_y(c_img);
-<a name="l03596"></a>03596 
-<a name="l03597"></a>03597 
-<a name="l03598"></a>03598   tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;
-<a name="l03599"></a>03599 
-<a name="l03600"></a>03600         <span class="comment">/* allocation for a cube structure without the image planes  */</span>
-<a name="l03601"></a>03601     <span class="comment">/*</span>
-<a name="l03602"></a>03602 <span class="comment">   for ( i = 0 ; i < n_cubes ; i++ )</span>
-<a name="l03603"></a>03603 <span class="comment">    {</span>
-<a name="l03604"></a>03604 <span class="comment">         tmpcubes[i] = (cpl_imagelist*)cpl_malloc(sizeof(cpl_imagelist)) ;</span>
-<a name="l03605"></a>03605 <span class="comment">        tmpcubes[i]->plane = (cpl_image**)cpl_calloc(cubes[0]->np ,</span>
-<a name="l03606"></a>03606 <span class="comment">                              sizeof(cpl_image*)) ;</span>
-<a name="l03607"></a>03607 <span class="comment"></span>
-<a name="l03608"></a>03608 <span class="comment">        tmpcubes[i]->lx = cubes[0]->lx ;</span>
-<a name="l03609"></a>03609 <span class="comment">        tmpcubes[i]->ly = cubes[0]->ly ;</span>
-<a name="l03610"></a>03610 <span class="comment">        tmpcubes[i]->np = cubes[0]->np ;</span>
-<a name="l03611"></a>03611 <span class="comment">        tmpcubes[i]->nbpix = (ulong32)cubes[0]->lx *</span>
-<a name="l03612"></a>03612 <span class="comment">                             (ulong32)cubes[0]->ly *</span>
-<a name="l03613"></a>03613 <span class="comment">                             (ulong32)cubes[0]->np ;</span>
-<a name="l03614"></a>03614 <span class="comment">        tmpcubes[i]->history = (char*)NULL ;</span>
-<a name="l03615"></a>03615 <span class="comment">        tmpcubes[i]->n_comments = 0 ;</span>
-<a name="l03616"></a>03616 <span class="comment">        tmpcubes[i]->orig_ptype = BPP_DEFAULT ;</span>
-<a name="l03617"></a>03617 <span class="comment">        tmpcubes[i]->filename = NULL ;</span>
-<a name="l03618"></a>03618 <span class="comment">    }</span>
-<a name="l03619"></a>03619 <span class="comment">    */</span>
-<a name="l03620"></a>03620     tmpcubes[0]=cpl_imagelist_duplicate(cubes[0]);
-<a name="l03621"></a>03621 
-<a name="l03622"></a>03622     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l03623"></a>03623 <span class="comment">     * center the cubes within the allocated big cube</span>
-<a name="l03624"></a>03624 <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span>
-<a name="l03625"></a>03625 <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span>
-<a name="l03626"></a>03626 <span class="comment">     */</span>
-<a name="l03627"></a>03627     <span class="comment">/* position of first reference frame, centered in big cube */</span>
-<a name="l03628"></a>03628     llx0 = mlx/2 - clx/2 ;
-<a name="l03629"></a>03629     lly0 = mly/2 - cly/2 ;
-<a name="l03630"></a>03630 
-<a name="l03631"></a>03631     <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l03632"></a>03632 <span class="comment">     * go through the frame list and determine the lower left edge position</span>
-<a name="l03633"></a>03633 <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span>
-<a name="l03634"></a>03634 <span class="comment">     * determined.</span>
-<a name="l03635"></a>03635 <span class="comment">     */</span>
-<a name="l03636"></a>03636 
-<a name="l03637"></a>03637 
-<a name="l03638"></a>03638     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l03639"></a>03639     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l03640"></a>03640     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03641"></a>03641     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03642"></a>03642 
-<a name="l03643"></a>03643     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l03644"></a>03644     {
-<a name="l03645"></a>03645         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;
-<a name="l03646"></a>03646         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;
-<a name="l03647"></a>03647         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;
-<a name="l03648"></a>03648         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;
-<a name="l03649"></a>03649     }
-<a name="l03650"></a>03650 
-<a name="l03651"></a>03651     <span class="comment">/* -------------------------------------------------------------</span>
-<a name="l03652"></a>03652 <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span>
-<a name="l03653"></a>03653 <span class="comment">     * that means shift the single image planes of each cube</span>
-<a name="l03654"></a>03654 <span class="comment">     * first determine an interpolation kernel</span>
-<a name="l03655"></a>03655 <span class="comment">     */</span>
-<a name="l03656"></a>03656     <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)) )
-<a name="l03657"></a>03657     {
-<a name="l03658"></a>03658         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span>
-<a name="l03659"></a>03659                            <span class="stringliteral">" or no kernel_typ was given, the default kernel"</span>
-<a name="l03660"></a>03660                            <span class="stringliteral">" is used now!"</span>) ;
-<a name="l03661"></a>03661     }
-<a name="l03662"></a>03662     <span class="comment">/* go through the frame list */</span>
-<a name="l03663"></a>03663     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l03664"></a>03664     {
-<a name="l03665"></a>03665       <span class="comment">/* go through the image planes and shift each plane by a</span>
-<a name="l03666"></a>03666 <span class="comment">         sub-pixel value */</span>
-<a name="l03667"></a>03667       <span class="keywordflow">for</span> ( z = 0 ; z < cnp ; z++ )
-<a name="l03668"></a>03668         {
-<a name="l03669"></a>03669       tmp_img=cpl_imagelist_get(cubes[i],z);
-<a name="l03670"></a>03670       <span class="keywordflow">if</span> ( NULL == (shiftedImage = sinfo_new_shift_image(tmp_img,
-<a name="l03671"></a>03671                                sub_offsetx[i],
-<a name="l03672"></a>03672                                sub_offsety[i],
-<a name="l03673"></a>03673                                kernel ) ) )
-<a name="l03674"></a>03674             {
-<a name="l03675"></a>03675           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not shift image plane no %d "</span>
-<a name="l03676"></a>03676                                <span class="stringliteral">"in cube no %d!"</span>, z, i) ;
-<a name="l03677"></a>03677           cpl_imagelist_delete(mergedCube) ;
-<a name="l03678"></a>03678           cpl_imagelist_delete(mask) ;
-<a name="l03679"></a>03679           cpl_free(kernel) ;
-<a name="l03680"></a>03680           <span class="keywordflow">return</span> NULL ;
-<a name="l03681"></a>03681             }
-<a name="l03682"></a>03682       cpl_imagelist_set(tmpcubes[i],shiftedImage,z);
-<a name="l03683"></a>03683         }
-<a name="l03684"></a>03684     }
-<a name="l03685"></a>03685 
-<a name="l03686"></a>03686     cubedata=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03687"></a>03687 
-<a name="l03688"></a>03688     <span class="keywordflow">for</span> ( y = 0 ; y < mly ; y++ )
-<a name="l03689"></a>03689     {
-<a name="l03690"></a>03690         <span class="keywordflow">for</span> ( x = 0 ; x < mlx ; x++ )
-<a name="l03691"></a>03691         {
-<a name="l03692"></a>03692             <span class="keywordflow">for</span> ( z = 0 ; z < mnp ; z++ )
-<a name="l03693"></a>03693             {
-<a name="l03694"></a>03694                 sum = 0. ;
-<a name="l03695"></a>03695                 sum2 = 0. ;
-<a name="l03696"></a>03696                 n = 0 ;
-<a name="l03697"></a>03697                 <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )
-<a name="l03698"></a>03698                 {
-<a name="l03699"></a>03699           c_img=cpl_imagelist_get(cubes[i],z);
-<a name="l03700"></a>03700 
-<a name="l03701"></a>03701           clx=cpl_image_get_size_x(c_img);
-<a name="l03702"></a>03702           cly=cpl_image_get_size_y(c_img);
-<a name="l03703"></a>03703 
-<a name="l03704"></a>03704           t_img=cpl_imagelist_get(tmpcubes[i],z);
-<a name="l03705"></a>03705                   ptdata=cpl_image_get_data_float(t_img);
-<a name="l03706"></a>03706 
-<a name="l03707"></a>03707           m_img=cpl_imagelist_get(mergedCube,z);
-<a name="l03708"></a>03708                   pmdata=cpl_image_get_data_float(m_img);
-<a name="l03709"></a>03709           o_img=cpl_imagelist_get(mask,z);
-<a name="l03710"></a>03710                   podata=cpl_image_get_data_float(o_img);
-<a name="l03711"></a>03711                   <span class="comment">/*</span>
-<a name="l03712"></a>03712 <span class="comment">                    find the position of the present cube and go</span>
-<a name="l03713"></a>03713 <span class="comment">                    through the single spectra</span>
-<a name="l03714"></a>03714 <span class="comment">                   */</span>
-<a name="l03715"></a>03715                     <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+cly &&
-<a name="l03716"></a>03716                          x >= llx[i] && x < llx[i]+clx )
-<a name="l03717"></a>03717                     {
-<a name="l03718"></a>03718                         posx = x - llx[i] ;
-<a name="l03719"></a>03719                         posy = y - lly[i] ;
-<a name="l03720"></a>03720                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*clx]))
-<a name="l03721"></a>03721                         {
-<a name="l03722"></a>03722                             sum += ptdata[posx+posy*clx] ;
-<a name="l03723"></a>03723                             sum2 += (ptdata[posx+posy*clx] *
-<a name="l03724"></a>03724                                      ptdata[posx+posy*clx]) ;
-<a name="l03725"></a>03725                             cubedata[n] = ptdata[posx+posy*clx] ;
-<a name="l03726"></a>03726                             n++ ;
-<a name="l03727"></a>03727                         }
-<a name="l03728"></a>03728                     }
-<a name="l03729"></a>03729                 }
-<a name="l03730"></a>03730 
-<a name="l03731"></a>03731                 <span class="keywordflow">if</span> ( n == 0 )
-<a name="l03732"></a>03732                 {
-<a name="l03733"></a>03733                     mean = 0. ;
-<a name="l03734"></a>03734                     sigma = 0. ;
-<a name="l03735"></a>03735                     pmdata[x+y*mlx] = 0. ;
-<a name="l03736"></a>03736                     podata[x+y*mlx] = 0 ;
-<a name="l03737"></a>03737                 }
-<a name="l03738"></a>03738                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( n == 1 )
-<a name="l03739"></a>03739                 {
-<a name="l03740"></a>03740                     mean = sum ;
-<a name="l03741"></a>03741                     sigma = 0. ;
-<a name="l03742"></a>03742                     pmdata[x+y*mlx] = mean ;
-<a name="l03743"></a>03743                     podata[x+y*mlx] = 1 ;
-<a name="l03744"></a>03744                 }
-<a name="l03745"></a>03745                 <span class="keywordflow">else</span>
-<a name="l03746"></a>03746                 {
-<a name="l03747"></a>03747                     mean = sum/(double)n ;
-<a name="l03748"></a>03748                     sigma = sqrt( (sum2 - sum*mean) / (<span class="keywordtype">double</span>)(n - 1) ) ;
-<a name="l03749"></a>03749                     ns = 0 ;
-<a name="l03750"></a>03750                     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )
-<a name="l03751"></a>03751                     {
-<a name="l03752"></a>03752                         <span class="keywordflow">if</span> ( cubedata[i] > mean+factor*sigma ||
-<a name="l03753"></a>03753                              cubedata[i] < mean-factor*sigma )
-<a name="l03754"></a>03754                         {
-<a name="l03755"></a>03755                             continue ;
-<a name="l03756"></a>03756                         }
-<a name="l03757"></a>03757                         <span class="keywordflow">else</span>
-<a name="l03758"></a>03758                         {
-<a name="l03759"></a>03759                             pmdata[x+y*mlx] += cubedata[i] ;
-<a name="l03760"></a>03760                             ns++ ;
-<a name="l03761"></a>03761                         }
-<a name="l03762"></a>03762                     }
-<a name="l03763"></a>03763                     <span class="keywordflow">if</span> ( ns == 0 )
-<a name="l03764"></a>03764                     {
-<a name="l03765"></a>03765                         pmdata[x+y*mlx] = 0. ;
-<a name="l03766"></a>03766                     }
-<a name="l03767"></a>03767                     <span class="keywordflow">else</span>
-<a name="l03768"></a>03768                     {
-<a name="l03769"></a>03769                         pmdata[x+y*mlx] /= (float)ns ;
-<a name="l03770"></a>03770                     }
-<a name="l03771"></a>03771                     podata[x+y*mlx] = (float)ns ;
-<a name="l03772"></a>03772                 }
-<a name="l03773"></a>03773             }
-<a name="l03774"></a>03774         }
-<a name="l03775"></a>03775     }
-<a name="l03776"></a>03776 
-<a name="l03777"></a>03777     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )
-<a name="l03778"></a>03778     {
-<a name="l03779"></a>03779         cpl_imagelist_delete (tmpcubes[i]) ;
-<a name="l03780"></a>03780     }
-<a name="l03781"></a>03781     cpl_free(tmpcubes);
-<a name="l03782"></a>03782     cpl_free(llx);
-<a name="l03783"></a>03783     cpl_free(lly);
-<a name="l03784"></a>03784     cpl_free(sub_offsetx);
-<a name="l03785"></a>03785     cpl_free(sub_offsety);
-<a name="l03786"></a>03786     cpl_free(cubedata);
-<a name="l03787"></a>03787 
-<a name="l03788"></a>03788     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span>
-<a name="l03789"></a>03789     sinfo_new_convert_0_to_ZERO_for_cubes(mergedCube) ;
-<a name="l03790"></a>03790     cpl_free(kernel) ;
-<a name="l03791"></a>03791     <span class="keywordflow">return</span> mask ;
-<a name="l03792"></a>03792 }
-<a name="l03793"></a>03793 
-<a name="l03794"></a>03794 cpl_imagelist *
-<a name="l03795"></a>03795 sinfo_new_bin_cube(cpl_imagelist *cu,
-<a name="l03796"></a>03796                              <span class="keywordtype">int</span> xscale,
-<a name="l03797"></a>03797                              <span class="keywordtype">int</span> yscale,
-<a name="l03798"></a>03798                              <span class="keywordtype">int</span> xmin,
-<a name="l03799"></a>03799                              <span class="keywordtype">int</span> xmax,
-<a name="l03800"></a>03800                              <span class="keywordtype">int</span> ymin,
-<a name="l03801"></a>03801                              <span class="keywordtype">int</span> ymax)
-<a name="l03802"></a>03802 {
-<a name="l03803"></a>03803   <span class="keywordtype">int</span> i,j,k;
-<a name="l03804"></a>03804   cpl_imagelist * cube;
-<a name="l03805"></a>03805   <span class="keywordtype">int</span> ilx=0;
-<a name="l03806"></a>03806   <span class="keywordtype">int</span> ily=0;
-<a name="l03807"></a>03807   <span class="keywordtype">int</span> olx=0;
-<a name="l03808"></a>03808   <span class="keywordtype">int</span> oly=0;
-<a name="l03809"></a>03809   <span class="keywordtype">int</span> inp=0;
-<a name="l03810"></a>03810 
-<a name="l03811"></a>03811   <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l03812"></a>03812   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l03813"></a>03813   cpl_image* i_img=NULL;
-<a name="l03814"></a>03814   cpl_image* o_img=NULL;
-<a name="l03815"></a>03815 
-<a name="l03816"></a>03816 
-<a name="l03817"></a>03817   <span class="comment">/* old code</span>
-<a name="l03818"></a>03818 <span class="comment">  if (NULL == (cube = sinfo_newCube (xmax-xmin+1,ymax-ymin+1, cu->np)) )</span>
-<a name="l03819"></a>03819 <span class="comment">  {</span>
-<a name="l03820"></a>03820 <span class="comment">      sinfo_msg_error ("cannot allocate new cube") ;</span>
-<a name="l03821"></a>03821 <span class="comment">      return NULL ;</span>
-<a name="l03822"></a>03822 <span class="comment">  }</span>
-<a name="l03823"></a>03823 <span class="comment">  */</span>
-<a name="l03824"></a>03824   inp=cpl_imagelist_get_size(cu);
-<a name="l03825"></a>03825   i_img=cpl_imagelist_get(cu,0);
-<a name="l03826"></a>03826   ilx=cpl_image_get_size_x(i_img);
-<a name="l03827"></a>03827   ily=cpl_image_get_size_y(i_img);
-<a name="l03828"></a>03828   olx=xmax-xmin+1;
-<a name="l03829"></a>03829   oly=ymax-ymin+1;
-<a name="l03830"></a>03830 
-<a name="l03831"></a>03831 
-<a name="l03832"></a>03832   cube=cpl_imagelist_new();
-<a name="l03833"></a>03833   <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ ) {
-<a name="l03834"></a>03834     o_img = cpl_image_new(olx,oly,CPL_TYPE_FLOAT);
-<a name="l03835"></a>03835     cpl_imagelist_set(cube,o_img,i);
-<a name="l03836"></a>03836   }
-<a name="l03837"></a>03837 
-<a name="l03838"></a>03838 
-<a name="l03839"></a>03839   <span class="keywordflow">for</span> (i=0;i<inp;i++){
-<a name="l03840"></a>03840       i_img=cpl_imagelist_get(cu,i);
-<a name="l03841"></a>03841       pidata=cpl_image_get_data_float(i_img);
-<a name="l03842"></a>03842       o_img=cpl_imagelist_get(cube,i);
-<a name="l03843"></a>03843       podata=cpl_image_get_data_float(o_img);
-<a name="l03844"></a>03844       <span class="keywordflow">for</span> (j=0 ; j < olx ; j++) {
-<a name="l03845"></a>03845           <span class="keywordflow">for</span> (k=0 ; k< oly ; k++) {
-<a name="l03846"></a>03846           podata[j+k*olx]=pidata[((int) (j+xmin)/xscale)+
-<a name="l03847"></a>03847                                      ((<span class="keywordtype">int</span>) (k+ymin)/yscale)*ilx]/
-<a name="l03848"></a>03848                                        (xscale*yscale);
-<a name="l03849"></a>03849       }
-<a name="l03850"></a>03850       }
-<a name="l03851"></a>03851   }
-<a name="l03852"></a>03852 
-<a name="l03853"></a>03853   <span class="keywordflow">return</span> cube;
-<a name="l03854"></a>03854 }
-<a name="l03855"></a>03855 
-<a name="l03856"></a>03856 
-<a name="l03857"></a>03857 cpl_imagelist *
-<a name="l03858"></a>03858 sinfo_new_scale_cube(cpl_imagelist *cu,
-<a name="l03859"></a>03859                                <span class="keywordtype">float</span> xscale,
-<a name="l03860"></a>03860                                <span class="keywordtype">float</span> yscale,
-<a name="l03861"></a>03861                                <span class="keywordtype">char</span> * kernel_type)
-<a name="l03862"></a>03862 {
-<a name="l03863"></a>03863     cpl_imagelist    *    cube ;
-<a name="l03864"></a>03864     <span class="keywordtype">int</span>             i=0, j=0, k=0, l=0 ;
-<a name="l03865"></a>03865     <span class="keywordtype">int</span>             lx_out, ly_out ;
-<a name="l03866"></a>03866     <span class="keywordtype">double</span>           cur ;
-<a name="l03867"></a>03867     <span class="keywordtype">double</span>      *    invert_transform ;
-<a name="l03868"></a>03868     <span class="keywordtype">double</span>           neighbors[16] ;
-<a name="l03869"></a>03869     <span class="keywordtype">double</span>           rsc[8],
-<a name="l03870"></a>03870                     sumrs ;
-<a name="l03871"></a>03871     <span class="keywordtype">double</span>        param[6];
-<a name="l03872"></a>03872     <span class="keywordtype">double</span>           x, y ;
-<a name="l03873"></a>03873     <span class="keywordtype">int</span>             px, py ;
-<a name="l03874"></a>03874     <span class="keywordtype">int</span>             pos ;
-<a name="l03875"></a>03875     <span class="keywordtype">int</span>             tabx, taby ;
-<a name="l03876"></a>03876     <span class="keywordtype">double</span>      *    kernel ;
-<a name="l03877"></a>03877     <span class="keywordtype">int</span>                  leaps[16] ;
-<a name="l03878"></a>03878     <span class="keywordtype">int</span>                 ilx=0;
-<a name="l03879"></a>03879     <span class="keywordtype">int</span>                 ily=0;
-<a name="l03880"></a>03880     <span class="keywordtype">int</span>                 tlx=0;
-<a name="l03881"></a>03881     <span class="keywordtype">int</span>                 tly=0;
-<a name="l03882"></a>03882     <span class="keywordtype">int</span>                 inp;
-<a name="l03883"></a>03883     <span class="keywordtype">float</span>*              podata=0;
-<a name="l03884"></a>03884     cpl_image*          in_img=NULL;
-<a name="l03885"></a>03885     cpl_image*          ou_img=NULL;
-<a name="l03886"></a>03886 
-<a name="l03887"></a>03887 
-<a name="l03888"></a>03888     <span class="keywordflow">if</span> (cu == NULL)
-<a name="l03889"></a>03889     {
-<a name="l03890"></a>03890         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;
-<a name="l03891"></a>03891         <span class="keywordflow">return</span> NULL ;
-<a name="l03892"></a>03892     }
-<a name="l03893"></a>03893 
-<a name="l03894"></a>03894     param[0]=xscale;
-<a name="l03895"></a>03895     param[1]=0;
-<a name="l03896"></a>03896     param[2]=0;
-<a name="l03897"></a>03897     param[3]=0;
-<a name="l03898"></a>03898     param[4]=yscale;
-<a name="l03899"></a>03899     param[5]=0;
-<a name="l03900"></a>03900 
-<a name="l03901"></a>03901 
-<a name="l03902"></a>03902     invert_transform = sinfo_invert_linear_transform(param) ;
-<a name="l03903"></a>03903     <span class="keywordflow">if</span> (invert_transform == NULL) {
-<a name="l03904"></a>03904         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute sinfo_invert transform: "</span>
-<a name="l03905"></a>03905                         <span class="stringliteral">"aborting warping"</span>) ;
-<a name="l03906"></a>03906         <span class="keywordflow">return</span> NULL ;
-<a name="l03907"></a>03907     }
-<a name="l03908"></a>03908 
-<a name="l03909"></a>03909     <span class="comment">/* Generate default interpolation kernel */</span>
-<a name="l03910"></a>03910     kernel = sinfo_generate_interpolation_kernel(kernel_type) ;
-<a name="l03911"></a>03911     <span class="keywordflow">if</span> (kernel == NULL) {
-<a name="l03912"></a>03912         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot generate kernel: aborting resampling"</span>) ;
-<a name="l03913"></a>03913         <span class="keywordflow">return</span> NULL ;
-<a name="l03914"></a>03914     }
-<a name="l03915"></a>03915 
-<a name="l03916"></a>03916     <span class="comment">/* Compute new image size   */</span>
-<a name="l03917"></a>03917     <span class="comment">/* Compute new image size   */</span>
-<a name="l03918"></a>03918     ilx=cpl_image_get_size_x(cpl_imagelist_get(cu,0));
-<a name="l03919"></a>03919     ily=cpl_image_get_size_y(cpl_imagelist_get(cu,0));
-<a name="l03920"></a>03920     inp=cpl_imagelist_get_size(cu);
-<a name="l03921"></a>03921 
-<a name="l03922"></a>03922     lx_out = (int) ilx*xscale ;
-<a name="l03923"></a>03923     ly_out = (int) ily*yscale ;
-<a name="l03924"></a>03924 
-<a name="l03925"></a>03925     cube=cpl_imagelist_new();
-<a name="l03926"></a>03926     <span class="keywordflow">for</span> ( l = 0 ; l < inp ; l++ ) {
-<a name="l03927"></a>03927      in_img = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);
-<a name="l03928"></a>03928      cpl_imagelist_set(cube,in_img,l);
-<a name="l03929"></a>03929     }
-<a name="l03930"></a>03930 
-<a name="l03931"></a>03931     <span class="comment">/* old code</span>
-<a name="l03932"></a>03932 <span class="comment">    if (NULL == (cube = sinfo_newCube (lx_out, ly_out, cu->np)) )</span>
-<a name="l03933"></a>03933 <span class="comment">    {</span>
-<a name="l03934"></a>03934 <span class="comment">        sinfo_msg_error (" cannot allocate new cube") ;</span>
-<a name="l03935"></a>03935 <span class="comment">        return NULL ;</span>
-<a name="l03936"></a>03936 <span class="comment">    }</span>
-<a name="l03937"></a>03937 <span class="comment">    */</span>
-<a name="l03938"></a>03938 
-<a name="l03939"></a>03939     <span class="keywordflow">for</span> (l=0;l<inp;l++){
-<a name="l03940"></a>03940       in_img=cpl_imagelist_get(cu,l);
-<a name="l03941"></a>03941       ou_img=cpl_imagelist_get(cube,l);
-<a name="l03942"></a>03942       tlx=cpl_image_get_size_x(in_img);
-<a name="l03943"></a>03943       tly=cpl_image_get_size_y(in_img);
-<a name="l03944"></a>03944       podata=cpl_image_get_data_float(ou_img);
-<a name="l03945"></a>03945         <span class="comment">/* Pre compute leaps for 16 closest neighbors positions */</span>
-<a name="l03946"></a>03946         leaps[0] = -1 - tlx ;
-<a name="l03947"></a>03947         leaps[1] =    - tlx ;
-<a name="l03948"></a>03948         leaps[2] =  1 - tlx ;
-<a name="l03949"></a>03949         leaps[3] =  2 - tlx ;
-<a name="l03950"></a>03950 
-<a name="l03951"></a>03951         leaps[4] = -1 ;
-<a name="l03952"></a>03952         leaps[5] =  0 ;
-<a name="l03953"></a>03953         leaps[6] =  1 ;
-<a name="l03954"></a>03954         leaps[7] =  2 ;
-<a name="l03955"></a>03955 
-<a name="l03956"></a>03956         leaps[8] = -1 + tlx ;
-<a name="l03957"></a>03957         leaps[9] =      tlx ;
-<a name="l03958"></a>03958         leaps[10]=  1 + tlx ;
-<a name="l03959"></a>03959         leaps[11]=  2 + tlx ;
-<a name="l03960"></a>03960 
-<a name="l03961"></a>03961         leaps[12]= -1 + 2*tlx ;
-<a name="l03962"></a>03962         leaps[13]=      2*tlx ;
-<a name="l03963"></a>03963         leaps[14]=  1 + 2*tlx ;
-<a name="l03964"></a>03964         leaps[15]=  2 + 2*tlx ;
-<a name="l03965"></a>03965 
-<a name="l03966"></a>03966         <span class="comment">/* Double loop on the output image  */</span>
-<a name="l03967"></a>03967         <span class="keywordflow">for</span> (j=0 ; j < ly_out ; j++) {
-<a name="l03968"></a>03968             <span class="keywordflow">for</span> (i=0 ; i< lx_out ; i++) {
-<a name="l03969"></a>03969                 <span class="comment">/* Compute the original source for this pixel   */</span>
-<a name="l03970"></a>03970 
-<a name="l03971"></a>03971                 x = invert_transform[0] * (double)i +
-<a name="l03972"></a>03972                     invert_transform[1] * (<span class="keywordtype">double</span>)j +
-<a name="l03973"></a>03973                 invert_transform[2] ;
-<a name="l03974"></a>03974 
-<a name="l03975"></a>03975                 y = invert_transform[3] * (<span class="keywordtype">double</span>)i +
-<a name="l03976"></a>03976                 invert_transform[4] * (<span class="keywordtype">double</span>)j +
-<a name="l03977"></a>03977                 invert_transform[5] ;
-<a name="l03978"></a>03978 
-<a name="l03979"></a>03979             <span class="comment">/* Which is the closest integer positioned neighbor?    */</span>
-<a name="l03980"></a>03980                 px = (<span class="keywordtype">int</span>)x ;
-<a name="l03981"></a>03981         py = (<span class="keywordtype">int</span>)y ;
-<a name="l03982"></a>03982 
-<a name="l03983"></a>03983                 if ((px < 1) ||
-<a name="l03984"></a>03984                     (px > (tlx-2)) ||
-<a name="l03985"></a>03985                     (py < 1) ||
-<a name="l03986"></a>03986                     (py > (tly-2)))
-<a name="l03987"></a>03987                     podata[i+j*lx_out] = (pixelvalue)0.0 ;
-<a name="l03988"></a>03988                 else {
-<a name="l03989"></a>03989                     <span class="comment">/* Now feed the positions for the closest 16 neighbors  */</span>
-<a name="l03990"></a>03990                     pos = px + py * tlx ;
-<a name="l03991"></a>03991                     <span class="keywordflow">for</span> (k=0 ; k<16 ; k++){
-<a name="l03992"></a>03992                         <span class="keywordflow">if</span>(!isnan(podata[(<span class="keywordtype">int</span>)(pos+leaps[k])])) neighbors[k] =
-<a name="l03993"></a>03993                          (<span class="keywordtype">double</span>)(podata[(int)(pos+leaps[k])]) ;
-<a name="l03994"></a>03994                 <span class="keywordflow">else</span> neighbors[k]=0;
-<a name="l03995"></a>03995             }
-<a name="l03996"></a>03996 
-<a name="l03997"></a>03997                     <span class="comment">/* Which tabulated value index shall we use?    */</span>
-<a name="l03998"></a>03998                     tabx = (x - (double)px) * (double)(TABSPERPIX) ;
-<a name="l03999"></a>03999                     taby = (y - (double)py) * (double)(TABSPERPIX) ;
-<a name="l04000"></a>04000 
-<a name="l04001"></a>04001                     <span class="comment">/* Compute resampling coefficients  */</span>
-<a name="l04002"></a>04002                     <span class="comment">/* rsc[0..3] in x, rsc[4..7] in y   */</span>
-<a name="l04003"></a>04003 
-<a name="l04004"></a>04004                     rsc[0] = kernel[TABSPERPIX + tabx] ;
-<a name="l04005"></a>04005                     rsc[1] = kernel[tabx] ;
-<a name="l04006"></a>04006                     rsc[2] = kernel[TABSPERPIX - tabx] ;
-<a name="l04007"></a>04007                     rsc[3] = kernel[2 * TABSPERPIX - tabx] ;
-<a name="l04008"></a>04008                     rsc[4] = kernel[TABSPERPIX + taby] ;
-<a name="l04009"></a>04009                     rsc[5] = kernel[taby] ;
-<a name="l04010"></a>04010                     rsc[6] = kernel[TABSPERPIX - taby] ;
-<a name="l04011"></a>04011                     rsc[7] = kernel[2 * TABSPERPIX - taby] ;
-<a name="l04012"></a>04012 
-<a name="l04013"></a>04013                     sumrs = (rsc[0]+rsc[1]+rsc[2]+rsc[3]) *
-<a name="l04014"></a>04014                         (rsc[4]+rsc[5]+rsc[6]+rsc[7]) ;
-<a name="l04015"></a>04015 
-<a name="l04016"></a>04016                     <span class="comment">/* Compute interpolated pixel now   */</span>
-<a name="l04017"></a>04017                     cur =   rsc[4] * (  rsc[0]*neighbors[0] +
-<a name="l04018"></a>04018                                     rsc[1]*neighbors[1] +
-<a name="l04019"></a>04019                                     rsc[2]*neighbors[2] +
-<a name="l04020"></a>04020                                     rsc[3]*neighbors[3] ) +
-<a name="l04021"></a>04021                         rsc[5] * (  rsc[0]*neighbors[4] +
-<a name="l04022"></a>04022                                     rsc[1]*neighbors[5] +
-<a name="l04023"></a>04023                                     rsc[2]*neighbors[6] +
-<a name="l04024"></a>04024                                     rsc[3]*neighbors[7] ) +
-<a name="l04025"></a>04025                         rsc[6] * (  rsc[0]*neighbors[8] +
-<a name="l04026"></a>04026                                     rsc[1]*neighbors[9] +
-<a name="l04027"></a>04027                                     rsc[2]*neighbors[10] +
-<a name="l04028"></a>04028                                     rsc[3]*neighbors[11] ) +
-<a name="l04029"></a>04029                         rsc[7] * (  rsc[0]*neighbors[12] +
-<a name="l04030"></a>04030                                     rsc[1]*neighbors[13] +
-<a name="l04031"></a>04031                                     rsc[2]*neighbors[14] +
-<a name="l04032"></a>04032                                     rsc[3]*neighbors[15] ) ;
-<a name="l04033"></a>04033 
-<a name="l04034"></a>04034                     <span class="comment">/* Affect the value to the output image */</span>
-<a name="l04035"></a>04035                     podata[i+j*lx_out] = (pixelvalue)(cur/sumrs) ;
-<a name="l04036"></a>04036                     <span class="comment">/* done ! */</span>
-<a name="l04037"></a>04037                 }
-<a name="l04038"></a>04038             }
-<a name="l04039"></a>04039         }
-<a name="l04040"></a>04040     }
-<a name="l04041"></a>04041     cpl_free(kernel) ;
-<a name="l04042"></a>04042     cpl_free(invert_transform) ;
-<a name="l04043"></a>04043     <span class="keywordflow">return</span> cube ;
-<a name="l04044"></a>04044 }
-<a name="l04045"></a>04045 
-<a name="l04046"></a>04046 
-<a name="l04056"></a>04056 cpl_imagelist *
-<a name="l04057"></a>04057 sinfo_cube_zshift(<span class="keyword">const</span> cpl_imagelist * cube_inp,
-<a name="l04058"></a>04058                   <span class="keyword">const</span> <span class="keywordtype">double</span> shift,
-<a name="l04059"></a>04059                   <span class="keywordtype">double</span>* sub_shift)
-<a name="l04060"></a>04060 {
-<a name="l04061"></a>04061 
-<a name="l04062"></a>04062     cpl_imagelist * cube_out=NULL ;
-<a name="l04063"></a>04063     <span class="keyword">const</span> cpl_image* img_inp=NULL;
-<a name="l04064"></a>04064     cpl_image* img_out=NULL;
-<a name="l04065"></a>04065     <span class="keywordtype">int</span>        col, row,z ;
-<a name="l04066"></a>04066     <span class="keywordtype">int</span>        int_shift ;
-<a name="l04067"></a>04067     <span class="keywordtype">int</span> ilx=0;
-<a name="l04068"></a>04068     <span class="keywordtype">int</span> ily=0;
-<a name="l04069"></a>04069     <span class="keywordtype">int</span> ilz=0;
-<a name="l04070"></a>04070 
-<a name="l04071"></a>04071     <span class="keywordtype">int</span> olx=0;
-<a name="l04072"></a>04072     <span class="keywordtype">int</span> oly=0;
-<a name="l04073"></a>04073     <span class="keywordtype">int</span> olz=0;
-<a name="l04074"></a>04074     <span class="keywordtype">int</span> i=0;
-<a name="l04075"></a>04075     <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l04076"></a>04076     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l04077"></a>04077 
-<a name="l04078"></a>04078     cknull(cube_inp,<span class="stringliteral">"no input cube given!"</span>) ;
-<a name="l04079"></a>04079     check_nomsg(img_inp=cpl_imagelist_get_const(cube_inp,0));
-<a name="l04080"></a>04080     check_nomsg(ilx=cpl_image_get_size_x(img_inp));
-<a name="l04081"></a>04081     check_nomsg(ily=cpl_image_get_size_y(img_inp));
-<a name="l04082"></a>04082     check_nomsg(ilz=cpl_imagelist_get_size(cube_inp));
-<a name="l04083"></a>04083 
-<a name="l04084"></a>04084     olx=ilx;
-<a name="l04085"></a>04085     oly=ily;
-<a name="l04086"></a>04086     olz=ilz;
-<a name="l04087"></a>04087 
-<a name="l04088"></a>04088     int_shift = sinfo_new_nint(shift) ;
-<a name="l04089"></a>04089     *sub_shift = shift - (double) int_shift ;
-<a name="l04090"></a>04090     <span class="keywordflow">if</span> ( int_shift == 0 )
-<a name="l04091"></a>04091     {
-<a name="l04092"></a>04092         cube_out =cpl_imagelist_duplicate(cube_inp) ;
-<a name="l04093"></a>04093         <span class="keywordflow">return</span> cube_out ;
-<a name="l04094"></a>04094     }
-<a name="l04095"></a>04095     <span class="keywordflow">else</span>
-<a name="l04096"></a>04096     {
-<a name="l04097"></a>04097       <span class="comment">/* allocate memory */</span>
-<a name="l04098"></a>04098       cknull(cube_out = cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l04099"></a>04099       <span class="keywordflow">for</span> ( i = 0 ; i < olz ; i++ ) {
-<a name="l04100"></a>04100         check_nomsg(img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT));
-<a name="l04101"></a>04101         check_nomsg(cpl_imagelist_set(cube_out,img_out,i));
-<a name="l04102"></a>04102      }
-<a name="l04103"></a>04103     }
-<a name="l04104"></a>04104 
-<a name="l04105"></a>04105     <span class="keywordflow">for</span>(z=0; z< ilz; z++) {
-<a name="l04106"></a>04106       <span class="keywordflow">if</span> ( (z-int_shift >= 0 ) && (z - int_shift < olz) ) {
-<a name="l04107"></a>04107         check_nomsg(img_inp=cpl_imagelist_get_const(cube_inp,z));
-<a name="l04108"></a>04108         check_nomsg(img_out=cpl_imagelist_get(cube_out,z-int_shift));
-<a name="l04109"></a>04109     check_nomsg(pidata=cpl_image_get_data_float_const(img_inp));
-<a name="l04110"></a>04110     check_nomsg(podata=cpl_image_get_data_float(img_out));
-<a name="l04111"></a>04111     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {
-<a name="l04112"></a>04112       <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {
-<a name="l04113"></a>04113         podata[col+row*olx] = pidata[col+row*olx] ;
-<a name="l04114"></a>04114       }
-<a name="l04115"></a>04115     }
-<a name="l04116"></a>04116       }
-<a name="l04117"></a>04117     }
-<a name="l04118"></a>04118     <span class="keywordflow">return</span> cube_out ;
-<a name="l04119"></a>04119 
-<a name="l04120"></a>04120  cleanup:
-<a name="l04121"></a>04121     sinfo_free_imagelist(&cube_out);
-<a name="l04122"></a>04122     <span class="keywordflow">return</span> NULL ;
-<a name="l04123"></a>04123 }
-<a name="l04124"></a>04124 
-<a name="l04134"></a>04134 cpl_imagelist *
-<a name="l04135"></a>04135 sinfo_cube_zshift_poly(<span class="keyword">const</span> cpl_imagelist * cube_inp,
-<a name="l04136"></a>04136                        <span class="keyword">const</span> <span class="keywordtype">double</span> sub_shift,
-<a name="l04137"></a>04137                        <span class="keyword">const</span> <span class="keywordtype">int</span>    order)
-<a name="l04138"></a>04138 {
-<a name="l04139"></a>04139   cpl_imagelist * cube_out ;
-<a name="l04140"></a>04140 
-<a name="l04141"></a>04141   <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l04142"></a>04142   <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l04143"></a>04143   <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l04144"></a>04144 
-<a name="l04145"></a>04145   <span class="keywordtype">float</span> sum=0;
-<a name="l04146"></a>04146   <span class="keywordtype">float</span> new_sum=0 ;
-<a name="l04147"></a>04147   <span class="keywordtype">float</span> eval=0 ;
-<a name="l04148"></a>04148   <span class="keywordtype">float</span> * imageptr=NULL ;
-<a name="l04149"></a>04149   <span class="keywordtype">int</span> row=0;
-<a name="l04150"></a>04150   <span class="keywordtype">int</span> col=0 ;
-<a name="l04151"></a>04151   <span class="keywordtype">int</span> firstpos=0 ;
-<a name="l04152"></a>04152   <span class="keywordtype">int</span> n_points=0 ;
-<a name="l04153"></a>04153   <span class="keywordtype">int</span> i=0 ;
-<a name="l04154"></a>04154   <span class="keywordtype">int</span> flag=0;
-<a name="l04155"></a>04155   <span class="keywordtype">int</span> ilx=0;
-<a name="l04156"></a>04156   <span class="keywordtype">int</span> ily=0;
-<a name="l04157"></a>04157   <span class="keywordtype">int</span> ilz=0;
-<a name="l04158"></a>04158 
-<a name="l04159"></a>04159   <span class="keywordtype">int</span> olx=0;
-<a name="l04160"></a>04160   <span class="keywordtype">int</span> oly=0;
-<a name="l04161"></a>04161   <span class="keywordtype">int</span> olz=0;
-<a name="l04162"></a>04162   <span class="keywordtype">int</span> z=0;
-<a name="l04163"></a>04163 
-<a name="l04164"></a>04164   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l04165"></a>04165   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l04166"></a>04166   <span class="keyword">const</span> cpl_image* img_inp=NULL;
-<a name="l04167"></a>04167   cpl_image* img_out=NULL;
-<a name="l04168"></a>04168 
-<a name="l04169"></a>04169   <span class="keywordflow">if</span> ( cube_inp == NULL ) {
-<a name="l04170"></a>04170     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no imagelist given!"</span>) ;
-<a name="l04171"></a>04171     <span class="keywordflow">return</span> NULL ;
-<a name="l04172"></a>04172   }
-<a name="l04173"></a>04173 
-<a name="l04174"></a>04174   img_inp=cpl_imagelist_get_const(cube_inp,0);
-<a name="l04175"></a>04175 
-<a name="l04176"></a>04176   ilx=cpl_image_get_size_x(img_inp);
-<a name="l04177"></a>04177   ily=cpl_image_get_size_y(img_inp);
-<a name="l04178"></a>04178   ilz=cpl_imagelist_get_size(cube_inp);
-<a name="l04179"></a>04179 
-<a name="l04180"></a>04180   <span class="keywordflow">if</span> ( order <= 0 ) {
-<a name="l04181"></a>04181     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l04182"></a>04182     <span class="keywordflow">return</span> NULL ;
-<a name="l04183"></a>04183   }
-<a name="l04184"></a>04184 
-<a name="l04185"></a>04185 
-<a name="l04186"></a>04186   olx=ilx;
-<a name="l04187"></a>04187   oly=ily;
-<a name="l04188"></a>04188   olz=ilz;
-<a name="l04189"></a>04189   <span class="comment">/* allocate memory */</span>
-<a name="l04190"></a>04190 
-<a name="l04191"></a>04191   <span class="keywordflow">if</span> ( NULL == (cube_out = cpl_imagelist_new()) ) {
-<a name="l04192"></a>04192     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l04193"></a>04193     <span class="keywordflow">return</span> NULL ;
-<a name="l04194"></a>04194   } <span class="keywordflow">else</span> {
-<a name="l04195"></a>04195     <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {
-<a name="l04196"></a>04196       img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);
-<a name="l04197"></a>04197       cpl_imagelist_set(cube_out,img_out,i);
-<a name="l04198"></a>04198     }
-<a name="l04199"></a>04199   }
-<a name="l04200"></a>04200 
-<a name="l04201"></a>04201 
-<a name="l04202"></a>04202   n_points = order + 1 ;
-<a name="l04203"></a>04203   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {
-<a name="l04204"></a>04204     firstpos = (int)(n_points/2) - 1 ;
-<a name="l04205"></a>04205   } <span class="keywordflow">else</span> {
-<a name="l04206"></a>04206     firstpos = (int)(n_points/2) ;
-<a name="l04207"></a>04207   }
-<a name="l04208"></a>04208 
-<a name="l04209"></a>04209   spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04210"></a>04210   corrected_spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04211"></a>04211   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04212"></a>04212 
-<a name="l04213"></a>04213 
-<a name="l04214"></a>04214   <span class="comment">/* fill the xa[] array for the polint function */</span>
-<a name="l04215"></a>04215   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {
-<a name="l04216"></a>04216     xnum[i] = i ;
-<a name="l04217"></a>04217   }
-<a name="l04218"></a>04218 
-<a name="l04219"></a>04219   <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {
-<a name="l04220"></a>04220     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {
-<a name="l04221"></a>04221       <span class="keywordflow">for</span>( z=0; z< ilz; z++) {
-<a name="l04222"></a>04222         corrected_spec[z] = 0. ;
-<a name="l04223"></a>04223       }
-<a name="l04224"></a>04224       sum = 0. ;
-<a name="l04225"></a>04225       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {
-<a name="l04226"></a>04226     img_inp=cpl_imagelist_get_const(cube_inp,z);
-<a name="l04227"></a>04227         pidata=cpl_image_get_data_float_const(img_inp);
-<a name="l04228"></a>04228     spec[z] = pidata[col + row*ilx] ;
-<a name="l04229"></a>04229     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l04230"></a>04230           spec[z] = 0. ;
-<a name="l04231"></a>04231 
-<a name="l04232"></a>04232       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {
-<a name="l04233"></a>04233         <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l04234"></a>04234             <span class="keywordflow">if</span> ( i >= ilz) continue  ;
-<a name="l04235"></a>04235             corrected_spec[i] = ZERO ;
-<a name="l04236"></a>04236           }
-<a name="l04237"></a>04237         }
-<a name="l04238"></a>04238         <span class="keywordflow">if</span> ( z != 0 && z != ilz - 1 ) {
-<a name="l04239"></a>04239           sum += spec[z] ;
-<a name="l04240"></a>04240         }
-<a name="l04241"></a>04241 
-<a name="l04242"></a>04242       }
-<a name="l04243"></a>04243 
-<a name="l04244"></a>04244       new_sum = 0. ;
-<a name="l04245"></a>04245       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {
-<a name="l04246"></a>04246 
-<a name="l04247"></a>04247         <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l04248"></a>04248 <span class="comment">         * now determine the arrays of size n_points with which the</span>
-<a name="l04249"></a>04249 <span class="comment">         * polynom is determined and determine the position eval</span>
-<a name="l04250"></a>04250 <span class="comment">         * where the polynom is evaluated in polynomial interpolation.</span>
-<a name="l04251"></a>04251 <span class="comment">         * Take care of the points near the row edges!</span>
-<a name="l04252"></a>04252 <span class="comment">         */</span>
-<a name="l04253"></a>04253         <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;
-<a name="l04254"></a>04254         <span class="keywordflow">if</span> ( z - firstpos < 0 ) {
-<a name="l04255"></a>04255           imageptr = &spec[0] ;
-<a name="l04256"></a>04256           eval     = sub_shift + z ;
-<a name="l04257"></a>04257         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= ilz ) {
-<a name="l04258"></a>04258           imageptr = &spec[ilz - n_points] ;
-<a name="l04259"></a>04259           eval     = sub_shift + z + n_points - ilz ;
-<a name="l04260"></a>04260         } <span class="keywordflow">else</span> {
-<a name="l04261"></a>04261       imageptr = &spec[z-firstpos] ;
-<a name="l04262"></a>04262           eval     = sub_shift + firstpos ;
-<a name="l04263"></a>04263         }
-<a name="l04264"></a>04264 
-<a name="l04265"></a>04265         flag=0;
-<a name="l04266"></a>04266         corrected_spec[z]=sinfo_new_nev_ille(xnum,imageptr,order,eval,&flag);
-<a name="l04267"></a>04267         <span class="keywordflow">if</span> ( z != 0 && z != ilz - 1 ) {
-<a name="l04268"></a>04268           new_sum += corrected_spec[z] ;
-<a name="l04269"></a>04269         }
-<a name="l04270"></a>04270       }
-<a name="l04271"></a>04271 
-<a name="l04272"></a>04272       <span class="comment">/* fill the output spectrum */</span>
-<a name="l04273"></a>04273       <span class="keywordflow">for</span> (z = 0 ; z < ilz ; z++ )
-<a name="l04274"></a>04274       {
-<a name="l04275"></a>04275         img_out=cpl_imagelist_get(cube_out,z);
-<a name="l04276"></a>04276         podata=cpl_image_get_data_float(img_out);
-<a name="l04277"></a>04277         <span class="keywordflow">if</span> ( new_sum == 0. ) {
-<a name="l04278"></a>04278           new_sum = 1. ;
-<a name="l04279"></a>04279         }
-<a name="l04280"></a>04280         <span class="keywordflow">if</span> ( z == 0 ) {
-<a name="l04281"></a>04281           podata[col+row*olx] = ZERO ;
-<a name="l04282"></a>04282         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == ilz - 1 ) {
-<a name="l04283"></a>04283           podata[col+row*olx] = ZERO ;
-<a name="l04284"></a>04284         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l04285"></a>04285           podata[col+row*olx] = ZERO ;
-<a name="l04286"></a>04286         } <span class="keywordflow">else</span> {
-<a name="l04287"></a>04287           corrected_spec[z] *= sum / new_sum ;
-<a name="l04288"></a>04288           podata[col+row*olx] = corrected_spec[z] ;
-<a name="l04289"></a>04289     }
-<a name="l04290"></a>04290       }
-<a name="l04291"></a>04291 
-<a name="l04292"></a>04292     }
-<a name="l04293"></a>04293   }
-<a name="l04294"></a>04294 
-<a name="l04295"></a>04295   cpl_free(spec) ;
-<a name="l04296"></a>04296   cpl_free(corrected_spec) ;
-<a name="l04297"></a>04297   cpl_free(xnum) ;
-<a name="l04298"></a>04298   <span class="keywordflow">return</span> cube_out ;
-<a name="l04299"></a>04299 
-<a name="l04300"></a>04300 
-<a name="l04301"></a>04301 }
-<a name="l04302"></a>04302 
-<a name="l04311"></a>04311 cpl_imagelist *
-<a name="l04312"></a>04312 sinfo_cube_zshift_spline3(<span class="keyword">const</span> cpl_imagelist * cube_inp,
-<a name="l04313"></a>04313                           <span class="keyword">const</span> <span class="keywordtype">double</span> sub_shift)
-<a name="l04314"></a>04314 {
-<a name="l04315"></a>04315 
-<a name="l04316"></a>04316   cpl_imagelist * cube_out=NULL ;
-<a name="l04317"></a>04317   <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l04318"></a>04318   <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l04319"></a>04319   <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l04320"></a>04320   <span class="keywordtype">float</span>* eval=NULL ;
-<a name="l04321"></a>04321   <span class="keywordtype">float</span> sum=0;
-<a name="l04322"></a>04322   <span class="keywordtype">float</span> new_sum=0 ;
-<a name="l04323"></a>04323   <span class="keywordtype">int</span> row=0;
-<a name="l04324"></a>04324   <span class="keywordtype">int</span> col=0;
-<a name="l04325"></a>04325   <span class="keywordtype">int</span> i=0;
-<a name="l04326"></a>04326   <span class="keywordtype">int</span> z=0;
-<a name="l04327"></a>04327 
-<a name="l04328"></a>04328   <span class="keywordtype">int</span> ilx=0;
-<a name="l04329"></a>04329   <span class="keywordtype">int</span> ily=0;
-<a name="l04330"></a>04330   <span class="keywordtype">int</span> ilz=0;
-<a name="l04331"></a>04331   <span class="keywordtype">int</span> olx=0;
-<a name="l04332"></a>04332   <span class="keywordtype">int</span> oly=0;
-<a name="l04333"></a>04333   <span class="keywordtype">int</span> olz=0;
-<a name="l04334"></a>04334 
-<a name="l04335"></a>04335   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l04336"></a>04336   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l04337"></a>04337   <span class="keyword">const</span> cpl_image* img_inp=NULL;
-<a name="l04338"></a>04338   cpl_image* img_out=NULL;
-<a name="l04339"></a>04339 
-<a name="l04340"></a>04340   <span class="keywordflow">if</span> ( cube_inp == NULL ) {
-<a name="l04341"></a>04341     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no imagelist given!"</span>) ;
-<a name="l04342"></a>04342     <span class="keywordflow">return</span> NULL ;
-<a name="l04343"></a>04343   }
-<a name="l04344"></a>04344 
-<a name="l04345"></a>04345   img_inp=cpl_imagelist_get_const(cube_inp,0);
-<a name="l04346"></a>04346   ilx=cpl_image_get_size_x(img_inp);
-<a name="l04347"></a>04347   ily=cpl_image_get_size_y(img_inp);
-<a name="l04348"></a>04348   ilz=cpl_imagelist_get_size(cube_inp);
-<a name="l04349"></a>04349 
-<a name="l04350"></a>04350 
-<a name="l04351"></a>04351   olx=ilx;
-<a name="l04352"></a>04352   oly=ily;
-<a name="l04353"></a>04353   olz=ilz;
-<a name="l04354"></a>04354   <span class="comment">/* allocate memory */</span>
-<a name="l04355"></a>04355   <span class="keywordflow">if</span> ( NULL == (cube_out = cpl_imagelist_new()) ) {
-<a name="l04356"></a>04356     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l04357"></a>04357     <span class="keywordflow">return</span> NULL ;
-<a name="l04358"></a>04358   } <span class="keywordflow">else</span> {
-<a name="l04359"></a>04359     <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {
-<a name="l04360"></a>04360       img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);
-<a name="l04361"></a>04361       cpl_imagelist_set(cube_out,img_out,i);
-<a name="l04362"></a>04362     }
-<a name="l04363"></a>04363   }
-<a name="l04364"></a>04364 
-<a name="l04365"></a>04365   xnum=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04366"></a>04366   <span class="comment">/* fill the xa[] array for the spline function */</span>
-<a name="l04367"></a>04367   <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {
-<a name="l04368"></a>04368     xnum[i] = i ;
-<a name="l04369"></a>04369   }
-<a name="l04370"></a>04370 
-<a name="l04371"></a>04371   spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04372"></a>04372   corrected_spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04373"></a>04373   eval=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l04374"></a>04374 
-<a name="l04375"></a>04375   <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {
-<a name="l04376"></a>04376     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {
-<a name="l04377"></a>04377       sum = 0. ;
-<a name="l04378"></a>04378       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {
-<a name="l04379"></a>04379     img_inp=cpl_imagelist_get_const(cube_inp,z);
-<a name="l04380"></a>04380         pidata=cpl_image_get_data_float_const(img_inp);
-<a name="l04381"></a>04381     spec[z] = pidata[col + row*ilx] ;
-<a name="l04382"></a>04382     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l04383"></a>04383       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {
-<a name="l04384"></a>04384         <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l04385"></a>04385         <span class="keywordflow">if</span> ( i >= ilz) continue ;
-<a name="l04386"></a>04386         corrected_spec[i] = ZERO ;
-<a name="l04387"></a>04387       }
-<a name="l04388"></a>04388       spec[z] = 0. ;
-<a name="l04389"></a>04389     }
-<a name="l04390"></a>04390     sum += spec[z] ;
-<a name="l04391"></a>04391     eval[z] = (float)sub_shift+(<span class="keywordtype">float</span>)z ;
-<a name="l04392"></a>04392       }
-<a name="l04393"></a>04393       <span class="comment">/* now we do the spline interpolation*/</span>
-<a name="l04394"></a>04394       <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline( xnum, spec, ilz, eval,
-<a name="l04395"></a>04395                                               corrected_spec, ilz ) )
-<a name="l04396"></a>04396         {
-<a name="l04397"></a>04397       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;
-<a name="l04398"></a>04398       <span class="keywordflow">return</span> NULL ;
-<a name="l04399"></a>04399         }
-<a name="l04400"></a>04400 
-<a name="l04401"></a>04401       new_sum = 0. ;
-<a name="l04402"></a>04402       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {
-<a name="l04403"></a>04403     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l04404"></a>04404       continue ;
-<a name="l04405"></a>04405     }
-<a name="l04406"></a>04406     new_sum += corrected_spec[z] ;
-<a name="l04407"></a>04407       }
-<a name="l04408"></a>04408       <span class="comment">/* fill output imagelist */</span>
-<a name="l04409"></a>04409       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {
-<a name="l04410"></a>04410         img_out=cpl_imagelist_get(cube_out,z);
-<a name="l04411"></a>04411         podata=cpl_image_get_data_float(img_out);
-<a name="l04412"></a>04412     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;
-<a name="l04413"></a>04413     {
-<a name="l04414"></a>04414       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l04415"></a>04415         podata[col+row*olx] = ZERO ;
-<a name="l04416"></a>04416       } <span class="keywordflow">else</span> {
-<a name="l04417"></a>04417         corrected_spec[z] *= sum / new_sum ;
-<a name="l04418"></a>04418         podata[col+row*olx] = corrected_spec[z] ;
-<a name="l04419"></a>04419       }
-<a name="l04420"></a>04420     }
-<a name="l04421"></a>04421       }
-<a name="l04422"></a>04422     }
-<a name="l04423"></a>04423   }
-<a name="l04424"></a>04424   cpl_free(xnum);
-<a name="l04425"></a>04425   cpl_free(spec) ;
-<a name="l04426"></a>04426   cpl_free(corrected_spec) ;
-<a name="l04427"></a>04427   cpl_free(eval) ;
-<a name="l04428"></a>04428 
-<a name="l04429"></a>04429   <span class="keywordflow">return</span> cube_out ;
-<a name="l04430"></a>04430 }
-<a name="l04431"></a>04431 
-<a name="l04433"></a>04433 <span class="comment">/* The structure for stroing index data for kappa-sigma</span>
-<a name="l04434"></a>04434 <span class="comment"> *</span>
-<a name="l04435"></a>04435 <span class="comment"> * */</span>
-<a name="l04436"></a>04436 <span class="keyword">struct </span>_CubeData
-<a name="l04437"></a>04437 {
-<a name="l04438"></a>04438     <span class="keywordtype">int</span> iCubeNumber;
-<a name="l04439"></a>04439     <span class="keywordtype">int</span> iLocalX;
-<a name="l04440"></a>04440     <span class="keywordtype">int</span> iLocalY;
-<a name="l04441"></a>04441 };
-<a name="l04442"></a>04442 <span class="keyword">typedef</span> <span class="keyword">struct </span>_CubeData CubeData;
-<a name="l04443"></a>04443 
-<a name="l04444"></a>04444 <span class="keyword">struct </span>_CubeDataVector
-<a name="l04445"></a>04445 {
-<a name="l04446"></a>04446     <span class="keywordtype">int</span> size;
-<a name="l04447"></a>04447     CubeData** pdata;
-<a name="l04448"></a>04448 };
-<a name="l04449"></a>04449 <span class="keyword">typedef</span> <span class="keyword">struct </span>_CubeDataVector CubeDataVector;
-<a name="l04467"></a>04467 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_kappa_sigma_offset_with_mask(
-<a name="l04468"></a>04468         <span class="keywordtype">int</span> z_min,
-<a name="l04469"></a>04469         <span class="keywordtype">int</span> z_max,
-<a name="l04470"></a>04470         <span class="keywordtype">int</span> nCubes,
-<a name="l04471"></a>04471         cpl_imagelist** inputCubes,
-<a name="l04472"></a>04472         <span class="keywordtype">double</span>* exptimes,
-<a name="l04473"></a>04473         cpl_imagelist* imResult,
-<a name="l04474"></a>04474         <span class="keywordtype">int</span>* offsetX,
-<a name="l04475"></a>04475         <span class="keywordtype">int</span>* offsetY,
-<a name="l04476"></a>04476         cpl_imagelist* sky_mask,
-<a name="l04477"></a>04477         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa
-<a name="l04478"></a>04478         );
-<a name="l04479"></a>04479 <span class="keywordtype">void</span> kappa_sigma_CubeDataVector(
-<a name="l04480"></a>04480         <span class="keywordtype">int</span> globalX,
-<a name="l04481"></a>04481         <span class="keywordtype">int</span> globalY,
-<a name="l04482"></a>04482         CubeDataVector* pCubeDataVector,
-<a name="l04483"></a>04483         cpl_imagelist* imlistResult,
-<a name="l04484"></a>04484         cpl_imagelist** input_cubes,
-<a name="l04485"></a>04485         cpl_imagelist* sky_mask,
-<a name="l04486"></a>04486         <span class="keywordtype">int</span> iPlanesNumber,
-<a name="l04487"></a>04487         <span class="keywordtype">int</span> z_min,
-<a name="l04488"></a>04488         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l04489"></a>04489         <span class="keywordtype">double</span>* exptimes
-<a name="l04490"></a>04490         );
-<a name="l04491"></a>04491 
-<a name="l04492"></a>04492 <span class="keywordtype">double</span> kappa_sigma_array_with_mask(cpl_array* parray, <span class="keywordtype">int</span> szArray, <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,cpl_image* imMask, <span class="keywordtype">double</span>* exptimes, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">double</span> mask_delta)
-<a name="l04493"></a>04493 {
-<a name="l04494"></a>04494     <span class="keywordtype">double</span> result = 0;
-<a name="l04495"></a>04495     <span class="keywordtype">int</span> nInvalidPoints = 0;
-<a name="l04496"></a>04496     <span class="keyword">const</span> <span class="keywordtype">double</span> EPS = 1E-10;
-<a name="l04497"></a>04497     <span class="comment">//sinfo_msg("kappa_sigma_array_with_mask, x[%d] y[%d]"</span>
-<a name="l04498"></a>04498     <span class="keywordtype">double</span> mask_adjustment = mask_delta;
-<a name="l04499"></a>04499     <span class="keywordflow">do</span>
-<a name="l04500"></a>04500     {
-<a name="l04501"></a>04501         <span class="keywordtype">double</span> median = 0;
-<a name="l04502"></a>04502         <span class="keywordtype">double</span> sig = 0;
-<a name="l04503"></a>04503         <span class="keywordtype">int</span> z = 0;
-<a name="l04504"></a>04504         nInvalidPoints = 0;
-<a name="l04505"></a>04505 
-<a name="l04506"></a>04506         check_nomsg(median = cpl_array_get_median(parray));
-<a name="l04507"></a>04507         check_nomsg(sig = cpl_array_get_stdev(parray));
-<a name="l04508"></a>04508         <span class="keywordflow">for</span> (z = 0; z < szArray; z++)
-<a name="l04509"></a>04509         {
-<a name="l04510"></a>04510             <span class="keywordtype">int</span> isnull = 0;
-<a name="l04511"></a>04511             <span class="keywordtype">double</span> value = 0;
-<a name="l04512"></a>04512             check_nomsg(value = cpl_array_get(parray, z, &isnull));
-<a name="l04513"></a>04513             <span class="keywordflow">if</span>(!isnull)
-<a name="l04514"></a>04514             {
-<a name="l04515"></a>04515                 <span class="keywordflow">if</span> (fabs(value - median) > (kappa * sig))
-<a name="l04516"></a>04516                 {
-<a name="l04517"></a>04517 
-<a name="l04518"></a>04518    <span class="comment">//                       sinfo_msg("entered");</span>
-<a name="l04519"></a>04519     <span class="comment">//        sinfo_msg("val=%g check=%g",</span>
-<a name="l04520"></a>04520     <span class="comment">//              fabs(value - median),(kappa * sig));</span>
-<a name="l04521"></a>04521 <span class="comment">//            sinfo_msg("kappa=%f sig=%g median=%g value=%g",</span>
-<a name="l04522"></a>04522 <span class="comment">//                  kappa,sig,median,value);</span>
-<a name="l04523"></a>04523 
-<a name="l04524"></a>04524                     <span class="comment">//double msk_new_value = 0;</span>
-<a name="l04525"></a>04525                     cpl_array_fill_window_invalid(parray, z, 1);
-<a name="l04526"></a>04526                     mask_adjustment += exptimes[z];
-<a name="l04527"></a>04527                     ++nInvalidPoints;
-<a name="l04528"></a>04528                 }
-<a name="l04529"></a>04529             }
-<a name="l04530"></a>04530         }
-<a name="l04531"></a>04531         <span class="comment">/*if (nInvalidPoints)</span>
-<a name="l04532"></a>04532 <span class="comment">        {</span>
-<a name="l04533"></a>04533 <span class="comment">            sinfo_msg("nInvalidPoints %d[%d][%d] median[%f] sig[%f]", nInvalidPoints,x,y, median, sig );</span>
-<a name="l04534"></a>04534 <span class="comment">        }*/</span>
-<a name="l04535"></a>04535 
-<a name="l04536"></a>04536     }
-<a name="l04537"></a>04537     <span class="keywordflow">while</span> (nInvalidPoints);
-<a name="l04538"></a>04538     <span class="keywordflow">if</span>(imMask && fabs(mask_adjustment) > EPS)
-<a name="l04539"></a>04539     {
-<a name="l04540"></a>04540         <span class="comment">// adjust mask image</span>
-<a name="l04541"></a>04541         <span class="keywordtype">int</span> px_rejected = 0;
-<a name="l04542"></a>04542         <span class="keywordtype">double</span> msk_value = 0;
-<a name="l04543"></a>04543         check_nomsg(msk_value = cpl_image_get(imMask, x, y, &px_rejected));
-<a name="l04544"></a>04544         check_nomsg(cpl_image_set(imMask, x,y, msk_value - mask_adjustment));
-<a name="l04545"></a>04545     }
-<a name="l04546"></a>04546     <span class="comment">// get a result value for the point</span>
-<a name="l04547"></a>04547     check_nomsg(result = cpl_array_get_mean(parray));
-<a name="l04548"></a>04548     <span class="keywordflow">return</span> result;
-<a name="l04549"></a>04549     cleanup:
-<a name="l04550"></a>04550     sinfo_msg(<span class="stringliteral">"Error in kappa_sigma_array_with_mask"</span>);
-<a name="l04551"></a>04551     <span class="keywordflow">return</span> 0;
-<a name="l04552"></a>04552 }
-<a name="l04553"></a>04553 
-<a name="l04554"></a>04554 
-<a name="l04555"></a>04555 <span class="keywordtype">int</span> sinfo_coadd_with_ks_clip_optimized(
-<a name="l04556"></a>04556             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l04557"></a>04557             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l04558"></a>04558             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l04559"></a>04559             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l04560"></a>04560             <span class="keywordtype">int</span>* llx,
-<a name="l04561"></a>04561             <span class="keywordtype">int</span>* lly,
-<a name="l04562"></a>04562             <span class="keywordtype">double</span>* exptimes,
-<a name="l04563"></a>04563             cpl_imagelist* sky_mask,
-<a name="l04564"></a>04564             cpl_imagelist* mergedCube,
-<a name="l04565"></a>04565             cpl_imagelist** tmpcubes
-<a name="l04566"></a>04566             )
-<a name="l04567"></a>04567 {
-<a name="l04568"></a>04568   <span class="comment">/*</span>
-<a name="l04569"></a>04569 <span class="comment">    sinfo_msg("sinfo_coadd_with_ks_clip_optimized() z_min[%d] z_max[%d] n_cubes[%d] kappa[%f] llx[%d] lly[%d] exptimes[%d] sky_mask[%d]",</span>
-<a name="l04570"></a>04570 <span class="comment">            z_min, z_max, ilx, ily, n_cubes, kappa,llx, lly,exptimes,sky_mask);</span>
-<a name="l04571"></a>04571 <span class="comment">  */</span>
-<a name="l04572"></a>04572    <span class="keywordtype">int</span> result=0;
-<a name="l04573"></a>04573    check_nomsg(result=sinfo_kappa_sigma_offset_with_mask(z_min, z_max, n_cubes, tmpcubes, exptimes, mergedCube, llx, lly, sky_mask, kappa));
-<a name="l04574"></a>04574 
-<a name="l04575"></a>04575   cleanup:
-<a name="l04576"></a>04576 
-<a name="l04577"></a>04577     <span class="keywordflow">return</span> result;
-<a name="l04578"></a>04578 
-<a name="l04579"></a>04579 }
-<a name="l04580"></a>04580 
-<a name="l04581"></a>04581 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_kappa_sigma_offset_with_mask(
-<a name="l04582"></a>04582         <span class="keywordtype">int</span> z_min,
-<a name="l04583"></a>04583         <span class="keywordtype">int</span> z_max,
-<a name="l04584"></a>04584         <span class="keywordtype">int</span> nCubes,
-<a name="l04585"></a>04585         cpl_imagelist** inputCubes,
-<a name="l04586"></a>04586         <span class="keywordtype">double</span>* exptimes,
-<a name="l04587"></a>04587         cpl_imagelist* imResult,
-<a name="l04588"></a>04588         <span class="keywordtype">int</span>* global_offsetX,
-<a name="l04589"></a>04589         <span class="keywordtype">int</span>* global_offsetY,
-<a name="l04590"></a>04590         cpl_imagelist* sky_mask,
-<a name="l04591"></a>04591         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa
-<a name="l04592"></a>04592         )
-<a name="l04593"></a>04593 {
-<a name="l04594"></a>04594     <span class="keyword">const</span> <span class="keywordtype">int</span> BIG_ENOUGH_INT = 65535;
-<a name="l04595"></a>04595     CubeDataVector*** indexX = 0;
-<a name="l04596"></a>04596     <span class="keywordtype">int</span> x = 0;
-<a name="l04597"></a>04597     <span class="keywordtype">int</span> y = 0;
-<a name="l04598"></a>04598     <span class="keywordtype">int</span> z = 0;
-<a name="l04599"></a>04599     <span class="keywordtype">int</span> iPlanesNumber = z_max - z_min;
-<a name="l04600"></a>04600     <span class="keywordtype">int</span> nIndexXbytes = 0;
-<a name="l04601"></a>04601     <span class="keywordtype">int</span> globalSizeX = 0 ;
-<a name="l04602"></a>04602     <span class="keywordtype">int</span> globalSizeY = 0;
-<a name="l04603"></a>04603 
-<a name="l04604"></a>04604     <span class="keywordtype">int</span> xmax = -BIG_ENOUGH_INT;
-<a name="l04605"></a>04605     <span class="keywordtype">int</span> ymax = -BIG_ENOUGH_INT;
-<a name="l04606"></a>04606     <span class="keywordtype">int</span> xmin = BIG_ENOUGH_INT;
-<a name="l04607"></a>04607     <span class="keywordtype">int</span> ymin = BIG_ENOUGH_INT;
-<a name="l04608"></a>04608     <span class="keywordtype">int</span>* offsetX = 0; <span class="comment">// local offset of the cubes, normalized</span>
-<a name="l04609"></a>04609     <span class="keywordtype">int</span>* offsetY = 0;
-<a name="l04610"></a>04610     <span class="comment">//sinfo_msg(" starting kappa-sigma clipping for cubes[%d] planes[%d]", nCubes, z_max - z_min );</span>
-<a name="l04611"></a>04611     <span class="comment">// determine size of the coadded cube</span>
-<a name="l04612"></a>04612         sinfo_check_rec_status(0);
-<a name="l04613"></a>04613     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++)
-<a name="l04614"></a>04614     {
-<a name="l04615"></a>04615 
-<a name="l04616"></a>04616         cpl_imagelist* pCube = inputCubes[z];
-<a name="l04617"></a>04617         cpl_image* pImage = 0;
-<a name="l04618"></a>04618         <span class="keywordtype">int</span> localMaxX = 0;
-<a name="l04619"></a>04619         <span class="keywordtype">int</span> localMaxY = 0;
-<a name="l04620"></a>04620         <span class="keywordtype">int</span> localMinX = 0;
-<a name="l04621"></a>04621         <span class="keywordtype">int</span> localMinY = 0;
-<a name="l04622"></a>04622 
-<a name="l04623"></a>04623         pImage = cpl_imagelist_get(pCube, 0);
-<a name="l04624"></a>04624 
-<a name="l04625"></a>04625         localMaxX = cpl_image_get_size_x(pImage) + global_offsetX[z];
-<a name="l04626"></a>04626         localMaxY = cpl_image_get_size_y(pImage) + global_offsetY[z];
-<a name="l04627"></a>04627         localMinX = global_offsetX[z];
-<a name="l04628"></a>04628         localMinY = global_offsetY[z];
-<a name="l04629"></a>04629 
-<a name="l04630"></a>04630         <span class="keywordflow">if</span>(localMaxX > xmax) xmax = localMaxX;
-<a name="l04631"></a>04631         <span class="keywordflow">if</span>(localMaxY > ymax) ymax = localMaxY;
-<a name="l04632"></a>04632 
-<a name="l04633"></a>04633         <span class="keywordflow">if</span>(localMinX < xmin) xmin = localMinX;
-<a name="l04634"></a>04634         <span class="keywordflow">if</span>(localMinY < ymin) ymin = localMinY;
-<a name="l04635"></a>04635     }
-<a name="l04636"></a>04636         sinfo_check_rec_status(1);
-<a name="l04637"></a>04637 
-<a name="l04638"></a>04638     <span class="comment">// DFS09121 xmax and ymax could be more then output cube - check and adjust</span>
-<a name="l04639"></a>04639     {
-<a name="l04640"></a>04640         <span class="keywordtype">int</span> msize_x = 0;
-<a name="l04641"></a>04641         <span class="keywordtype">int</span> msize_y = 0;
-<a name="l04642"></a>04642         <span class="comment">//sinfo_msg("DFS09121 before:  xmax=%d ymax=%d", xmax, ymax);</span>
-<a name="l04643"></a>04643         cpl_image * pmaskimage = cpl_imagelist_get(sky_mask, 0);
-<a name="l04644"></a>04644         msize_x = cpl_image_get_size_x(pmaskimage);
-<a name="l04645"></a>04645         msize_y = cpl_image_get_size_y(pmaskimage);
-<a name="l04646"></a>04646         xmax = msize_x < xmax ? msize_x : xmax;
-<a name="l04647"></a>04647         ymax = msize_y < ymax ? msize_y : ymax;
-<a name="l04648"></a>04648         <span class="comment">//sinfo_msg("DFS09121 after:  xmax=%d ymax=%d", xmax, ymax);</span>
-<a name="l04649"></a>04649     }
-<a name="l04650"></a>04650     <span class="comment">// rely on the data received outside</span>
-<a name="l04651"></a>04651     globalSizeX = xmax;<span class="comment">// - xmin;</span>
-<a name="l04652"></a>04652     globalSizeY = ymax;<span class="comment">// - ymin;</span>
-<a name="l04653"></a>04653     <span class="comment">// calculate local offset</span>
-<a name="l04654"></a>04654     check_nomsg(offsetX = cpl_malloc(<span class="keyword">sizeof</span>(offsetX[0]) * nCubes));
-<a name="l04655"></a>04655     check_nomsg(offsetY = cpl_malloc(<span class="keyword">sizeof</span>(offsetY[0]) * nCubes));
-<a name="l04656"></a>04656         sinfo_check_rec_status(2);
-<a name="l04657"></a>04657     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++) <span class="comment">// use the offset from the caller</span>
-<a name="l04658"></a>04658     {
-<a name="l04659"></a>04659         offsetX[z] = global_offsetX[z];<span class="comment">// - xmin;</span>
-<a name="l04660"></a>04660         offsetY[z] = global_offsetY[z];<span class="comment">// - ymin;</span>
-<a name="l04661"></a>04661 <span class="comment">//      sinfo_msg("for cube [%d] offset X[%d : %d] Y[%d : %d]", z, offsetX[z], global_offsetX[z], offsetY[z], global_offsetY[z]);</span>
-<a name="l04662"></a>04662     }
-<a name="l04663"></a>04663         sinfo_check_rec_status(3);
-<a name="l04664"></a>04664     <span class="comment">// Because of DFS09121, the allocated size is taken +1</span>
-<a name="l04665"></a>04665     nIndexXbytes = <span class="keyword">sizeof</span>(CubeDataVector**) * (globalSizeX+1 );
-<a name="l04666"></a>04666 <span class="comment">//  sinfo_msg("   kappa_sigma_offset, globalSizeX[%d] globalSizeY[%d] nIndexXbytes[%d]", globalSizeX, globalSizeY, nIndexXbytes);</span>
-<a name="l04667"></a>04667     indexX = cpl_malloc(nIndexXbytes);
-<a name="l04668"></a>04668     memset(&indexX[0], 0, (globalSizeX+1 )* <span class="keyword">sizeof</span>(indexX[0]));
-<a name="l04669"></a>04669     <span class="comment">// prepare result planes and mask</span>
-<a name="l04670"></a>04670 
-<a name="l04671"></a>04671     <span class="comment">// 1. Fill indexes - do it only for a 0 plane in the cube</span>
-<a name="l04672"></a>04672     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++)
-<a name="l04673"></a>04673     {
-<a name="l04674"></a>04674         <span class="keywordtype">int</span> iCubeSizeX = 0;
-<a name="l04675"></a>04675         <span class="keywordtype">int</span> iCubeSizeY = 0;
-<a name="l04676"></a>04676         <span class="keywordtype">int</span> iOffsetX = 0;
-<a name="l04677"></a>04677         <span class="keywordtype">int</span> iOffsetY = 0;
-<a name="l04678"></a>04678 
-<a name="l04679"></a>04679         cpl_imagelist* pCube = inputCubes[z];
-<a name="l04680"></a>04680         cpl_image* pImage = 0;
-<a name="l04681"></a>04681         pImage = cpl_imagelist_get(pCube, 0);
-<a name="l04682"></a>04682 
-<a name="l04683"></a>04683         iCubeSizeX = cpl_image_get_size_x(pImage);
-<a name="l04684"></a>04684         iCubeSizeY = cpl_image_get_size_y(pImage);
-<a name="l04685"></a>04685         iOffsetX = offsetX[z];
-<a name="l04686"></a>04686         iOffsetY = offsetY[z];
-<a name="l04687"></a>04687 <span class="comment">//      sinfo_msg("   processing cube [%d] offsetX[%d] offsetY[%d] iCubeSizeX[%d] iCubeSizeY[%d]", z, iOffsetX, iOffsetY, iCubeSizeX, iCubeSizeY);</span>
-<a name="l04688"></a>04688         <span class="keywordflow">for</span> (x = 1; x <= iCubeSizeX; x++)
-<a name="l04689"></a>04689         {
-<a name="l04690"></a>04690             <span class="keywordtype">int</span> iGlobalX = x + iOffsetX;
-<a name="l04691"></a>04691 
-<a name="l04692"></a>04692             CubeDataVector** ppVector = 0;
-<a name="l04693"></a>04693             <span class="keywordflow">if</span> (indexX[iGlobalX - 1] == 0)
-<a name="l04694"></a>04694             {
-<a name="l04695"></a>04695                 <span class="comment">// Because of DFS09121, the allocated size is taken +1</span>
-<a name="l04696"></a>04696                 <span class="keywordtype">int</span> nBytes = <span class="keyword">sizeof</span>(CubeDataVector*) * (globalSizeY+1 );
-<a name="l04697"></a>04697                 ppVector= cpl_malloc(nBytes);
-<a name="l04698"></a>04698                 memset(&ppVector[0],0,(globalSizeY+1) * <span class="keyword">sizeof</span>(ppVector[0]));
-<a name="l04699"></a>04699                 indexX[iGlobalX - 1] = ppVector;
-<a name="l04700"></a>04700             }
-<a name="l04701"></a>04701             <span class="keywordflow">else</span>
-<a name="l04702"></a>04702             {
-<a name="l04703"></a>04703                 ppVector = indexX[iGlobalX - 1];
-<a name="l04704"></a>04704             }
-<a name="l04705"></a>04705             <span class="keywordflow">for</span> (y = 1; y <=iCubeSizeY; y++)
-<a name="l04706"></a>04706             {
-<a name="l04707"></a>04707                 CubeData* pCubeData = 0;
-<a name="l04708"></a>04708                 <span class="keywordtype">int</span> iGlobalY = y + iOffsetY;
-<a name="l04709"></a>04709                 CubeDataVector* pVector = ppVector[iGlobalY - 1];
-<a name="l04710"></a>04710                 <span class="keywordflow">if</span>(pVector == 0)
-<a name="l04711"></a>04711                 {
-<a name="l04712"></a>04712                     <span class="keywordtype">int</span> nbytes = <span class="keyword">sizeof</span>(CubeDataVector);
-<a name="l04713"></a>04713                     check_nomsg(pVector = cpl_malloc(nbytes));
-<a name="l04714"></a>04714                     ppVector[iGlobalY - 1] = pVector;
-<a name="l04715"></a>04715                     pVector->size = 0;
-<a name="l04716"></a>04716                     nbytes = <span class="keyword">sizeof</span>(CubeData*) * nCubes;
-<a name="l04717"></a>04717                     pVector->pdata = cpl_malloc(nbytes);
-<a name="l04718"></a>04718 <span class="comment">//                  memset(&pVector->pdata[0], 0, nCubes * sizeof(pVector->pdata[0]));</span>
-<a name="l04719"></a>04719                 }
-<a name="l04720"></a>04720                 pCubeData = cpl_malloc(<span class="keyword">sizeof</span>(CubeData));
-<a name="l04721"></a>04721                 pVector->pdata[(pVector->size)++] = pCubeData;
-<a name="l04722"></a>04722                 pCubeData->iCubeNumber = z;
-<a name="l04723"></a>04723                 pCubeData->iLocalX = x;
-<a name="l04724"></a>04724                 pCubeData->iLocalY = y;
-<a name="l04725"></a>04725             }
-<a name="l04726"></a>04726         }
-<a name="l04727"></a>04727     }
-<a name="l04728"></a>04728         sinfo_check_rec_status(4);
-<a name="l04729"></a>04729 
-<a name="l04730"></a>04730     <span class="comment">// 2. for each index value in global coordinates (x,y) call kappa-sigma</span>
-<a name="l04731"></a>04731     <span class="keywordflow">for</span> (x = 1; x <= globalSizeX; x++)
-<a name="l04732"></a>04732     {
-<a name="l04733"></a>04733         CubeDataVector** pDataX = indexX[x - 1];
-<a name="l04734"></a>04734         <span class="keywordflow">if</span> (pDataX)
-<a name="l04735"></a>04735         {
-<a name="l04736"></a>04736             <span class="keywordflow">for</span> (y = 1; y <= globalSizeY; y++)
-<a name="l04737"></a>04737             {
-<a name="l04738"></a>04738                 CubeDataVector* pDataY = pDataX[y - 1];
-<a name="l04739"></a>04739                 <span class="keywordflow">if</span> (pDataY && pDataY->size)
-<a name="l04740"></a>04740                 {
-<a name="l04741"></a>04741                     kappa_sigma_CubeDataVector(x, y, pDataY, imResult, inputCubes, sky_mask, iPlanesNumber, z_min, kappa, exptimes);
-<a name="l04742"></a>04742                 }
-<a name="l04743"></a>04743                 <span class="keywordflow">if</span> (pDataY)
-<a name="l04744"></a>04744                 {
-<a name="l04745"></a>04745                     check_nomsg(cpl_free(pDataY->pdata));
-<a name="l04746"></a>04746                     check_nomsg(cpl_free(pDataY));
-<a name="l04747"></a>04747                 }
-<a name="l04748"></a>04748             }
-<a name="l04749"></a>04749             check_nomsg(cpl_free(pDataX));
-<a name="l04750"></a>04750         }
-<a name="l04751"></a>04751     }
-<a name="l04752"></a>04752     sinfo_check_rec_status(5);
-<a name="l04753"></a>04753     cleanup:
-<a name="l04754"></a>04754     cpl_free(indexX);
-<a name="l04755"></a>04755     cpl_free(offsetX);
-<a name="l04756"></a>04756     cpl_free(offsetY);
-<a name="l04757"></a>04757     <span class="keywordflow">return</span> 0;
-<a name="l04758"></a>04758 
-<a name="l04759"></a>04759 }
-<a name="l04760"></a>04760 
-<a name="l04761"></a>04761 <span class="keywordtype">void</span> kappa_sigma_CubeDataVector(
-<a name="l04762"></a>04762         <span class="keywordtype">int</span> globalX,
-<a name="l04763"></a>04763         <span class="keywordtype">int</span> globalY,
-<a name="l04764"></a>04764         CubeDataVector* pCubeDataVector,
-<a name="l04765"></a>04765         cpl_imagelist* imlistResult,
-<a name="l04766"></a>04766         cpl_imagelist** input_cubes,
-<a name="l04767"></a>04767         cpl_imagelist* sky_mask,
-<a name="l04768"></a>04768         <span class="keywordtype">int</span> iPlanesNumber,
-<a name="l04769"></a>04769         <span class="keywordtype">int</span> z_min,
-<a name="l04770"></a>04770         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l04771"></a>04771         <span class="keywordtype">double</span>* exptimes
-<a name="l04772"></a>04772         )
-<a name="l04773"></a>04773 {
-<a name="l04774"></a>04774     <span class="keywordtype">int</span> plane = 0;
-<a name="l04775"></a>04775     <span class="keywordtype">int</span> z = 0;
-<a name="l04776"></a>04776 
-<a name="l04777"></a>04777     <span class="comment">// iterate through all planes</span>
-<a name="l04778"></a>04778     cpl_array* pArray = 0;
-<a name="l04779"></a>04779     check_nomsg(pArray = cpl_array_new(pCubeDataVector->size, CPL_TYPE_DOUBLE));
-<a name="l04780"></a>04780 
-<a name="l04781"></a>04781 
-<a name="l04782"></a>04782     <span class="keywordflow">for</span> (plane = z_min; plane < z_min + iPlanesNumber; plane++)
-<a name="l04783"></a>04783     {
-<a name="l04784"></a>04784         <span class="keywordtype">double</span> val_msk = 0; <span class="comment">// value of the mask in the point</span>
-<a name="l04785"></a>04785         <span class="keywordtype">int</span> px = 0;
-<a name="l04786"></a>04786         cpl_image* imResult = 0;
-<a name="l04787"></a>04787         cpl_image* imMask = 0;
-<a name="l04788"></a>04788         <span class="keywordtype">double</span> mask_adjustment = 0;
-<a name="l04789"></a>04789         <span class="keywordtype">int</span> nValidPoints = 0;
-<a name="l04790"></a>04790         cpl_array_fill_window_invalid(pArray, 0, pCubeDataVector->size);
-<a name="l04791"></a>04791         check_nomsg(imMask = cpl_imagelist_get(sky_mask, plane - z_min));
-<a name="l04792"></a>04792         check_nomsg(val_msk = cpl_image_get(imMask, globalX, globalY, &px));
-<a name="l04793"></a>04793         <span class="keywordflow">for</span> (z = 0; z < pCubeDataVector->size; z++) <span class="comment">// through all cubes for that point - prepare the array</span>
-<a name="l04794"></a>04794         {
-<a name="l04795"></a>04795 
-<a name="l04796"></a>04796             cpl_imagelist* pCube = 0;
-<a name="l04797"></a>04797             CubeData* pCubeData = pCubeDataVector->pdata[z];
-<a name="l04798"></a>04798             pCube = input_cubes[pCubeData->iCubeNumber];
-<a name="l04799"></a>04799             <span class="keywordflow">if</span> (pCube)
-<a name="l04800"></a>04800             {
-<a name="l04801"></a>04801                 cpl_image* pImage = cpl_imagelist_get(pCube, plane - z_min);
-<a name="l04802"></a>04802 
-<a name="l04803"></a>04803                 <span class="keywordflow">if</span> (pImage)
-<a name="l04804"></a>04804                 {
-<a name="l04805"></a>04805                     <span class="keywordtype">int</span> is_rejected = 0;
-<a name="l04806"></a>04806                     <span class="keywordtype">double</span> value = 0;
-<a name="l04807"></a>04807                     check_nomsg(value = cpl_image_get(pImage, pCubeData->iLocalX, pCubeData->iLocalY, &is_rejected));
-<a name="l04808"></a>04808                     <span class="keywordflow">if</span> (!isnan(value))
-<a name="l04809"></a>04809                     {
-<a name="l04810"></a>04810                         check_nomsg(cpl_array_set(pArray, z, value));
-<a name="l04811"></a>04811                         ++nValidPoints;
-<a name="l04812"></a>04812                     }
-<a name="l04813"></a>04813                     <span class="keywordflow">else</span>
-<a name="l04814"></a>04814                     {
-<a name="l04815"></a>04815                         mask_adjustment += exptimes[z];
-<a name="l04816"></a>04816                     }
-<a name="l04817"></a>04817                 }
-<a name="l04818"></a>04818                 <span class="keywordflow">else</span>
-<a name="l04819"></a>04819                 {
-<a name="l04820"></a>04820                     sinfo_msg(<span class="stringliteral">"kappa_sigma_CubeDataVector() - pImage is null"</span>);
-<a name="l04821"></a>04821                 }
-<a name="l04822"></a>04822             }
-<a name="l04823"></a>04823         }
-<a name="l04824"></a>04824         <span class="keywordflow">if</span>(nValidPoints)
-<a name="l04825"></a>04825         {
-<a name="l04826"></a>04826            kappa_sigma_array_with_mask(pArray, pCubeDataVector->size, kappa, imMask, exptimes, globalX, globalY, mask_adjustment);
-<a name="l04827"></a>04827            check_nomsg(imResult = cpl_imagelist_get(imlistResult, plane));
-<a name="l04828"></a>04828            <span class="keywordflow">if</span> (imResult)
-<a name="l04829"></a>04829            {
-<a name="l04830"></a>04830               check_nomsg(cpl_image_set(imResult, globalX, globalY, cpl_array_get_mean(pArray)));
-<a name="l04831"></a>04831            }
-<a name="l04832"></a>04832            <span class="keywordflow">else</span>
-<a name="l04833"></a>04833            {
-<a name="l04834"></a>04834               sinfo_msg(<span class="stringliteral">"kappa_sigma_CubeDataVector() - imResult is null"</span>);
-<a name="l04835"></a>04835            }
-<a name="l04836"></a>04836         } <span class="keywordflow">else</span>
-<a name="l04837"></a>04837         {
-<a name="l04838"></a>04838             <span class="comment">// adjust the mask</span>
-<a name="l04839"></a>04839             check_nomsg(cpl_image_set(imMask, globalX,globalY, 0));
-<a name="l04840"></a>04840         }
-<a name="l04841"></a>04841     }
-<a name="l04842"></a>04842     <span class="keywordflow">for</span> (z = 0; z < pCubeDataVector->size; z++) <span class="comment">// through all cubes  - delete the data</span>
-<a name="l04843"></a>04843     {
-<a name="l04844"></a>04844         CubeData* pCubeData = pCubeDataVector->pdata[z];
-<a name="l04845"></a>04845         cpl_free(pCubeData);
-<a name="l04846"></a>04846     }
-<a name="l04847"></a>04847     cpl_array_delete(pArray);
-<a name="l04848"></a>04848     <span class="keywordflow">return</span>;
-<a name="l04849"></a>04849     cleanup:
-<a name="l04850"></a>04850 <span class="comment">//  sinfo_msg("   -----cleanup from kappa_sigma_CubeDataVector");</span>
-<a name="l04851"></a>04851     <span class="keywordflow">return</span>;
-<a name="l04852"></a>04852 }
-<a name="l04853"></a>04853 
-<a name="l04854"></a>04854 
-<a name="l04855"></a>04855 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l04856"></a>04856 sinfo_coadd_with_ks_clip(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l04857"></a>04857             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l04858"></a>04858             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l04859"></a>04859             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l04860"></a>04860             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l04861"></a>04861             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l04862"></a>04862             <span class="keywordtype">int</span>* llx,
-<a name="l04863"></a>04863             <span class="keywordtype">int</span>* lly,
-<a name="l04864"></a>04864                         <span class="keywordtype">double</span>* exptimes,
-<a name="l04865"></a>04865             cpl_imagelist* mask,
-<a name="l04866"></a>04866             cpl_imagelist* mergedCube,
-<a name="l04867"></a>04867                         cpl_imagelist** tmpcubes)
-<a name="l04868"></a>04868 
-<a name="l04869"></a>04869 {
-<a name="l04870"></a>04870 
-<a name="l04871"></a>04871   <span class="keywordtype">int</span> m=0;
-<a name="l04872"></a>04872   <span class="keywordtype">int</span> x=0;
-<a name="l04873"></a>04873   <span class="keywordtype">int</span> y=0;
-<a name="l04874"></a>04874   <span class="keywordtype">int</span> z=0;
-<a name="l04875"></a>04875 
-<a name="l04876"></a>04876   <span class="keywordtype">int</span> mlx=0;
-<a name="l04877"></a>04877   <span class="keywordtype">int</span> mly=0;
-<a name="l04878"></a>04878   <span class="keywordtype">int</span> nc=0;
-<a name="l04879"></a>04879   <span class="keywordtype">int</span> olx=0;
-<a name="l04880"></a>04880   <span class="keywordtype">int</span> oly=0;
-<a name="l04881"></a>04881   <span class="keywordtype">int</span> posx=0;
-<a name="l04882"></a>04882   <span class="keywordtype">int</span> posy=0;
-<a name="l04883"></a>04883   <span class="keywordtype">int</span> i=0;
-<a name="l04884"></a>04884   <span class="keywordtype">int</span> nclip=0;
-<a name="l04885"></a>04885   <span class="keywordtype">int</span> ks=0;
-<a name="l04886"></a>04886 
-<a name="l04887"></a>04887   <span class="keywordtype">float</span> sig=0;
-<a name="l04888"></a>04888   <span class="keywordtype">float</span> med=0;
-<a name="l04889"></a>04889   <span class="keywordtype">float</span> ovr=0;
-<a name="l04890"></a>04890   <span class="keywordtype">float</span>  msk_sum=0;
-<a name="l04891"></a>04891   <span class="keywordtype">float</span>  val_msk_sum=0;
-<a name="l04892"></a>04892   <span class="keywordtype">float</span> avg=0;
-<a name="l04893"></a>04893 
-<a name="l04894"></a>04894   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l04895"></a>04895   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l04896"></a>04896   <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l04897"></a>04897   <span class="keywordtype">float</span>* pvdata=NULL;
-<a name="l04898"></a>04898 
-<a name="l04899"></a>04899   cpl_image* m_img=NULL;
-<a name="l04900"></a>04900   cpl_image* o_img=NULL;
-<a name="l04901"></a>04901   cpl_image* t_img=NULL;
-<a name="l04902"></a>04902   cpl_image* v_img=NULL;
-<a name="l04903"></a>04903 
-<a name="l04904"></a>04904 
-<a name="l04905"></a>04905   cpl_vector* val=NULL;
-<a name="l04906"></a>04906   cpl_vector* msk=NULL;
-<a name="l04907"></a>04907 
-<a name="l04908"></a>04908 
-<a name="l04909"></a>04909   o_img=cpl_imagelist_get(mergedCube,0);
-<a name="l04910"></a>04910   olx=cpl_image_get_size_x(o_img);
-<a name="l04911"></a>04911   oly=cpl_image_get_size_y(o_img);
-<a name="l04912"></a>04912 
-<a name="l04913"></a>04913   m=0;
-<a name="l04914"></a>04914   <span class="keywordflow">for</span> ( z = z_min; z < z_max ; z++ ) {
-<a name="l04915"></a>04915     m_img=cpl_imagelist_get(mask,z);
-<a name="l04916"></a>04916     pmdata=cpl_image_get_data_float(m_img);
-<a name="l04917"></a>04917     o_img=cpl_imagelist_get(mergedCube,z);
-<a name="l04918"></a>04918     podata=cpl_image_get_data_float(o_img);
-<a name="l04919"></a>04919     mlx=cpl_image_get_size_x(m_img);
-<a name="l04920"></a>04920     mly=cpl_image_get_size_y(m_img);
-<a name="l04921"></a>04921     <span class="comment">// go through the first image plane of the big data cube </span>
-<a name="l04922"></a>04922     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {
-<a name="l04923"></a>04923       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {
-<a name="l04924"></a>04924     avg=0;
-<a name="l04925"></a>04925     nc=0;
-<a name="l04926"></a>04926     <span class="comment">// computes nc </span>
-<a name="l04927"></a>04927     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l04928"></a>04928       t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l04929"></a>04929       ptdata=cpl_image_get_data_float(t_img);
-<a name="l04930"></a>04930           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l04931"></a>04931                x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l04932"></a>04932         posx = x - llx[i] ;
-<a name="l04933"></a>04933         posy = y - lly[i] ;
-<a name="l04934"></a>04934             <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l04935"></a>04935                        ptdata[posx+posy*ilx] != 0.) {
-<a name="l04936"></a>04936           nc++;
-<a name="l04937"></a>04937         }
-<a name="l04938"></a>04938       }
-<a name="l04939"></a>04939     }
-<a name="l04940"></a>04940         <span class="keywordflow">if</span>( nc > 0 ) {
-<a name="l04941"></a>04941 
-<a name="l04942"></a>04942       
-<a name="l04943"></a>04943       msk=cpl_vector_new(n_cubes);
-<a name="l04944"></a>04944       <span class="keywordflow">for</span> (i=0;i<n_cubes;i++) {
-<a name="l04945"></a>04945         cpl_vector_set(msk,i,1);
-<a name="l04946"></a>04946       }
-<a name="l04947"></a>04947 
-<a name="l04948"></a>04948       <span class="comment">// k-s clipping </span>
-<a name="l04949"></a>04949       nclip=0;
-<a name="l04950"></a>04950 
-<a name="l04951"></a>04951 
-<a name="l04952"></a>04952       <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {
-<a name="l04953"></a>04953         sig=0;
-<a name="l04954"></a>04954         med=0;
-<a name="l04955"></a>04955         ovr=0;
-<a name="l04956"></a>04956         <span class="keywordflow">if</span>(nc-nclip >0) {
-<a name="l04957"></a>04957           val=cpl_vector_new(nc-nclip);
-<a name="l04958"></a>04958         }
-<a name="l04959"></a>04959         <span class="comment">// fill val </span>
-<a name="l04960"></a>04960         <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l04961"></a>04961           t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l04962"></a>04962           ptdata=cpl_image_get_data_float(t_img);
-<a name="l04963"></a>04963               <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l04964"></a>04964                    x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l04965"></a>04965         posx = x - llx[i] ;
-<a name="l04966"></a>04966         posy = y - lly[i] ;
-<a name="l04967"></a>04967                 <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l04968"></a>04968                            ptdata[posx+posy*ilx] != 0. &&
-<a name="l04969"></a>04969             (cpl_vector_get(msk,i) != 0)) {
-<a name="l04970"></a>04970           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)ptdata[posx+posy*ilx]);
-<a name="l04971"></a>04971           ovr++;
-<a name="l04972"></a>04972         }
-<a name="l04973"></a>04973           }
-<a name="l04974"></a>04974         }
-<a name="l04975"></a>04975 
-<a name="l04976"></a>04976         <span class="comment">// get avg, med, sig </span>
-<a name="l04977"></a>04977         <span class="keywordflow">if</span>(ovr>0) {
-<a name="l04978"></a>04978           avg=cpl_vector_get_mean(val);
-<a name="l04979"></a>04979           med=cpl_vector_get_median_const(val);
-<a name="l04980"></a>04980           <span class="keywordflow">if</span>(ovr>1) {
-<a name="l04981"></a>04981         sig=cpl_vector_get_stdev(val);
-<a name="l04982"></a>04982           } <span class="keywordflow">else</span> {
-<a name="l04983"></a>04983         sig=0;
-<a name="l04984"></a>04984           }
-<a name="l04985"></a>04985           cpl_vector_delete(val);
-<a name="l04986"></a>04986         }
-<a name="l04987"></a>04987 
-<a name="l04988"></a>04988         <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l04989"></a>04989           t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l04990"></a>04990           ptdata=cpl_image_get_data_float(t_img);
-<a name="l04991"></a>04991           <span class="comment">// Do k-s clipping at each pixel </span>
-<a name="l04992"></a>04992               <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l04993"></a>04993                    x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l04994"></a>04994         posx = x - llx[i] ;
-<a name="l04995"></a>04995         posy = y - lly[i] ;
-<a name="l04996"></a>04996                 <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&
-<a name="l04997"></a>04997                            ptdata[posx+posy*ilx] != 0. &&
-<a name="l04998"></a>04998             (cpl_vector_get(msk,i) != 0)) {
-<a name="l04999"></a>04999           <span class="keywordflow">if</span>(abs((ptdata[posx+posy*ilx]-med))> kappa*sig) {
-<a name="l05000"></a>05000                     ptdata[posx+posy*ilx]=0;
-<a name="l05001"></a>05001             pmdata[x+y*mlx] -= exptimes[i]  ;
-<a name="l05002"></a>05002             cpl_vector_set(msk,i,0);
-<a name="l05003"></a>05003             nclip++;
-<a name="l05004"></a>05004           }
-<a name="l05005"></a>05005         }
-<a name="l05006"></a>05006           }
-<a name="l05007"></a>05007         }
-<a name="l05008"></a>05008       } <span class="comment">// end of k-s clipping </span>
-<a name="l05009"></a>05009 
-<a name="l05010"></a>05010       msk_sum=0;
-<a name="l05011"></a>05011       val_msk_sum=0;
-<a name="l05012"></a>05012       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l05013"></a>05013         v_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l05014"></a>05014         pvdata=cpl_image_get_data_float(v_img);
-<a name="l05015"></a>05015         <span class="comment">// computes sky at each point </span>
-<a name="l05016"></a>05016             <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l05017"></a>05017                  x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l05018"></a>05018           posx = x - llx[i] ;
-<a name="l05019"></a>05019           posy = y - lly[i] ;
-<a name="l05020"></a>05020               <span class="comment">//sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span>
-<a name="l05021"></a>05021               <span class="comment">//sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span>
-<a name="l05022"></a>05022               <span class="keywordflow">if</span> (!isnan(pvdata[posx+posy*ilx]) &&
-<a name="l05023"></a>05023                          pvdata[posx+posy*ilx] != 0. &&
-<a name="l05024"></a>05024           (cpl_vector_get(msk,i) != 0)) {
-<a name="l05025"></a>05025         msk_sum+=pmdata[x+y*mlx];
-<a name="l05026"></a>05026                 val_msk_sum+=pvdata[posx+posy*ilx]*
-<a name="l05027"></a>05027           pmdata[x+y*mlx];
-<a name="l05028"></a>05028           }
-<a name="l05029"></a>05029         }
-<a name="l05030"></a>05030       }
-<a name="l05031"></a>05031       podata[x+y*olx]=val_msk_sum/msk_sum;
-<a name="l05032"></a>05032       cpl_vector_delete(msk);
-<a name="l05033"></a>05033       <span class="comment">/*</span>
-<a name="l05034"></a>05034 <span class="comment">      sinfo_ks_clip(n_cubes,nc,ilx,ily,kappa,llx,lly,exptimes,</span>
-<a name="l05035"></a>05035 <span class="comment">            tmpcubes,podata,pmdata,x,y,m,mlx,oly);</span>
-<a name="l05036"></a>05036 <span class="comment"></span>
-<a name="l05037"></a>05037 <span class="comment">      */</span>
-<a name="l05038"></a>05038 
-<a name="l05039"></a>05039     } <span class="comment">// end check if overlap nc >0  </span>
-<a name="l05040"></a>05040       } <span class="comment">// end loop over x </span>
-<a name="l05041"></a>05041     } <span class="comment">// end loop over y </span>
-<a name="l05042"></a>05042     m++;
-<a name="l05043"></a>05043   } <span class="comment">// end loop over z </span>
-<a name="l05044"></a>05044 
-<a name="l05045"></a>05045   <span class="keywordflow">return</span> 0;
-<a name="l05046"></a>05046 
-<a name="l05047"></a>05047 
-<a name="l05048"></a>05048 }
-<a name="l05049"></a>05049 
-<a name="l05050"></a>05050 
-<a name="l05051"></a>05051 
-<a name="l05052"></a>05052 
-<a name="l05053"></a>05053 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05054"></a>05054 sinfo_compute_contributes_at_pos(cpl_imagelist** tmpcubes, 
-<a name="l05055"></a>05055                                  <span class="keywordtype">int</span>* llx, <span class="keywordtype">int</span>* lly, 
-<a name="l05056"></a>05056                                  <span class="keyword">const</span> <span class="keywordtype">int</span> x, <span class="keyword">const</span> <span class="keywordtype">int</span> y,
-<a name="l05057"></a>05057                                  <span class="keyword">const</span> <span class="keywordtype">int</span> ilx, <span class="keyword">const</span> <span class="keywordtype">int</span> ily, 
-<a name="l05058"></a>05058                                  <span class="keyword">const</span> <span class="keywordtype">int</span> m,<span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes)
-<a name="l05059"></a>05059 {
-<a name="l05060"></a>05060 
-<a name="l05061"></a>05061    <span class="keywordtype">int</span> result=0;
-<a name="l05062"></a>05062    <span class="keywordtype">int</span> i=0;
-<a name="l05063"></a>05063    <span class="keywordtype">int</span> lox=0;
-<a name="l05064"></a>05064    <span class="keywordtype">int</span> loy=0;
-<a name="l05065"></a>05065    <span class="keywordtype">int</span> upx=0;
-<a name="l05066"></a>05066    <span class="keywordtype">int</span> upy=0;
-<a name="l05067"></a>05067    <span class="keywordtype">int</span> post=0;
-<a name="l05068"></a>05068    <span class="keywordtype">int</span> posx=0;
-<a name="l05069"></a>05069    <span class="keywordtype">int</span> posy=0;
-<a name="l05070"></a>05070 
-<a name="l05071"></a>05071    <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l05072"></a>05072    cpl_image* t_img=NULL;
-<a name="l05073"></a>05073   
-<a name="l05074"></a>05074  
-<a name="l05075"></a>05075    <span class="comment">/* computes nc the number of intensity contributes from </span>
-<a name="l05076"></a>05076 <span class="comment">      each overlapping cube point intensity at x,y</span>
-<a name="l05077"></a>05077 <span class="comment">   */</span>
-<a name="l05078"></a>05078    <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l05079"></a>05079       t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l05080"></a>05080       ptdata=cpl_image_get_data_float(t_img);
-<a name="l05081"></a>05081       lox=llx[i];
-<a name="l05082"></a>05082       loy=lly[i];
-<a name="l05083"></a>05083       upx=llx[i]+ilx;
-<a name="l05084"></a>05084       upy=lly[i]+ily;
-<a name="l05085"></a>05085 
-<a name="l05086"></a>05086       <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {
-<a name="l05087"></a>05087          posx = x - lox;
-<a name="l05088"></a>05088          posy = y - loy;
-<a name="l05089"></a>05089          post = posx+posy*ilx;
-<a name="l05090"></a>05090 
-<a name="l05091"></a>05091          <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0.) {
-<a name="l05092"></a>05092             result++;
-<a name="l05093"></a>05093          }
-<a name="l05094"></a>05094       }
-<a name="l05095"></a>05095    }
-<a name="l05096"></a>05096 
-<a name="l05097"></a>05097 
-<a name="l05098"></a>05098    <span class="keywordflow">return</span> result;
-<a name="l05099"></a>05099 
-<a name="l05100"></a>05100 }
-<a name="l05101"></a>05101 
-<a name="l05102"></a>05102 
-<a name="l05103"></a>05103 
-<a name="l05104"></a>05104 
-<a name="l05105"></a>05105 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05106"></a>05106 sinfo_cubes_coadd_with_ks_clip(cpl_imagelist** tmpcubes, 
-<a name="l05107"></a>05107                                <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,<span class="keyword">const</span> <span class="keywordtype">int</span> nc,
-<a name="l05108"></a>05108                                <span class="keyword">const</span> <span class="keywordtype">int</span> x, <span class="keyword">const</span> <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">int</span> m,
-<a name="l05109"></a>05109                                <span class="keywordtype">int</span>* llx, <span class="keywordtype">int</span>* lly, 
-<a name="l05110"></a>05110                                <span class="keyword">const</span> <span class="keywordtype">int</span> ilx, <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l05111"></a>05111                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, 
-<a name="l05112"></a>05112                                <span class="keywordtype">double</span>* exptimes, <span class="keywordtype">float</span>** pmdata, 
-<a name="l05113"></a>05113                                cpl_vector** msk, <span class="keyword">const</span> <span class="keywordtype">int</span> mlx)
-<a name="l05114"></a>05114 
-<a name="l05115"></a>05115 
-<a name="l05116"></a>05116 {
-<a name="l05117"></a>05117 
-<a name="l05118"></a>05118  
-<a name="l05119"></a>05119    cpl_vector* val=NULL;
-<a name="l05120"></a>05120    cpl_image* t_img=NULL;
-<a name="l05121"></a>05121 
-<a name="l05122"></a>05122    <span class="keywordtype">int</span> i=0;
-<a name="l05123"></a>05123    <span class="keywordtype">int</span> nclip=0;
-<a name="l05124"></a>05124    <span class="keywordtype">int</span> ks=0;
-<a name="l05125"></a>05125    
-<a name="l05126"></a>05126    <span class="keywordtype">int</span> lox=0;
-<a name="l05127"></a>05127    <span class="keywordtype">int</span> loy=0;
-<a name="l05128"></a>05128    <span class="keywordtype">int</span> upx=0;
-<a name="l05129"></a>05129    <span class="keywordtype">int</span> upy=0;
-<a name="l05130"></a>05130 
-<a name="l05131"></a>05131    <span class="keywordtype">int</span> posx=0;
-<a name="l05132"></a>05132    <span class="keywordtype">int</span> posy=0;
-<a name="l05133"></a>05133    <span class="keywordtype">int</span> post=0;
-<a name="l05134"></a>05134 
-<a name="l05135"></a>05135    <span class="keywordtype">int</span> ovr=0;
-<a name="l05136"></a>05136 
-<a name="l05137"></a>05137    <span class="keywordtype">float</span> sig=0;
-<a name="l05138"></a>05138    <span class="keywordtype">float</span> avg=0;
-<a name="l05139"></a>05139    <span class="keywordtype">float</span> med=0;
-<a name="l05140"></a>05140 
-<a name="l05141"></a>05141    <span class="keywordtype">float</span>* ptdata=NULL;
-<a name="l05142"></a>05142    
-<a name="l05143"></a>05143 
-<a name="l05144"></a>05144    <span class="comment">// k-s clipping </span>
-<a name="l05145"></a>05145    nclip=0;
-<a name="l05146"></a>05146 
-<a name="l05147"></a>05147 
-<a name="l05148"></a>05148    <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {
-<a name="l05149"></a>05149       sig=0;
-<a name="l05150"></a>05150       med=0;
-<a name="l05151"></a>05151       ovr=0;
-<a name="l05152"></a>05152       <span class="keywordflow">if</span>(nc-nclip >0) {
-<a name="l05153"></a>05153          check_nomsg(val=cpl_vector_new(nc-nclip));
-<a name="l05154"></a>05154       }
-<a name="l05155"></a>05155       <span class="comment">// fill val </span>
-<a name="l05156"></a>05156       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l05157"></a>05157          check_nomsg(t_img=cpl_imagelist_get(tmpcubes[i],m));
-<a name="l05158"></a>05158          check_nomsg(ptdata=cpl_image_get_data_float(t_img));
-<a name="l05159"></a>05159 
-<a name="l05160"></a>05160          lox=llx[i];
-<a name="l05161"></a>05161          loy=lly[i];
-<a name="l05162"></a>05162          upx=llx[i]+ilx;
-<a name="l05163"></a>05163          upy=lly[i]+ily;
-<a name="l05164"></a>05164 
-<a name="l05165"></a>05165          <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {
-<a name="l05166"></a>05166             posx = x - lox ;
-<a name="l05167"></a>05167             posy = y - loy ;
-<a name="l05168"></a>05168             post=posx+posy*ilx;
-<a name="l05169"></a>05169 
-<a name="l05170"></a>05170             <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0. &&
-<a name="l05171"></a>05171                 (cpl_vector_get(*msk,i) != 0)) {
-<a name="l05172"></a>05172                cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)ptdata[post]);
-<a name="l05173"></a>05173                ovr++;
-<a name="l05174"></a>05174             }
-<a name="l05175"></a>05175          }
-<a name="l05176"></a>05176       }
-<a name="l05177"></a>05177 
-<a name="l05178"></a>05178       <span class="comment">// get avg, med, sig </span>
-<a name="l05179"></a>05179       <span class="keywordflow">if</span>(ovr>0) {
-<a name="l05180"></a>05180          check_nomsg(avg=cpl_vector_get_mean(val));
-<a name="l05181"></a>05181          med=cpl_vector_get_median_const(val);
-<a name="l05182"></a>05182          <span class="keywordflow">if</span>(ovr>1) {
-<a name="l05183"></a>05183             sig=cpl_vector_get_stdev(val);
-<a name="l05184"></a>05184          } <span class="keywordflow">else</span> {
-<a name="l05185"></a>05185             sig=0;
-<a name="l05186"></a>05186          }
-<a name="l05187"></a>05187          cpl_vector_delete(val);
-<a name="l05188"></a>05188       }
-<a name="l05189"></a>05189 
-<a name="l05190"></a>05190       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l05191"></a>05191          t_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l05192"></a>05192          ptdata=cpl_image_get_data_float(t_img);
-<a name="l05193"></a>05193 
-<a name="l05194"></a>05194          lox=llx[i];
-<a name="l05195"></a>05195          loy=lly[i];
-<a name="l05196"></a>05196          upx=llx[i]+ilx;
-<a name="l05197"></a>05197          upy=lly[i]+ily;
-<a name="l05198"></a>05198 
-<a name="l05199"></a>05199          <span class="comment">// Do k-s clipping at each pixel </span>
-<a name="l05200"></a>05200          <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {
-<a name="l05201"></a>05201             posx = x - lox ;
-<a name="l05202"></a>05202             posy = y - loy ;
-<a name="l05203"></a>05203             post = posx+posy*ilx;
-<a name="l05204"></a>05204             <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0. &&
-<a name="l05205"></a>05205                 (cpl_vector_get(*msk,i) != 0)) {
-<a name="l05206"></a>05206                <span class="keywordflow">if</span>( abs( (ptdata[post]-med) ) > kappa*sig ) {
-<a name="l05207"></a>05207                   ptdata[post]=0;
-<a name="l05208"></a>05208                   (*pmdata)[x+y*mlx] -= exptimes[i]  ;
-<a name="l05209"></a>05209                   check_nomsg(cpl_vector_set(*msk,i,0));
-<a name="l05210"></a>05210                   nclip++;
-<a name="l05211"></a>05211                }
-<a name="l05212"></a>05212             }
-<a name="l05213"></a>05213          }
-<a name="l05214"></a>05214       }
-<a name="l05215"></a>05215    } <span class="comment">// end of k-s clipping </span>
-<a name="l05216"></a>05216 
-<a name="l05217"></a>05217   cleanup:
-<a name="l05218"></a>05218    <span class="keywordflow">return</span> 0;
-<a name="l05219"></a>05219 }
-<a name="l05220"></a>05220 
-<a name="l05243"></a>05243 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05244"></a>05244 sinfo_coadd_with_ks_clip2(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l05245"></a>05245             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l05246"></a>05246             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,
-<a name="l05247"></a>05247             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,
-<a name="l05248"></a>05248             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l05249"></a>05249             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l05250"></a>05250             <span class="keywordtype">int</span>* llx,
-<a name="l05251"></a>05251             <span class="keywordtype">int</span>* lly,
-<a name="l05252"></a>05252                         <span class="keywordtype">double</span>* exptimes,
-<a name="l05253"></a>05253             cpl_imagelist* mask,
-<a name="l05254"></a>05254             cpl_imagelist* mergedCube,
-<a name="l05255"></a>05255                         cpl_imagelist** tmpcubes)
-<a name="l05256"></a>05256 
-<a name="l05257"></a>05257 {
-<a name="l05258"></a>05258 
-<a name="l05259"></a>05259   <span class="keywordtype">int</span> m=0;
-<a name="l05260"></a>05260   <span class="keywordtype">int</span> x=0;
-<a name="l05261"></a>05261   <span class="keywordtype">int</span> y=0;
-<a name="l05262"></a>05262   <span class="keywordtype">int</span> z=0;
-<a name="l05263"></a>05263 
-<a name="l05264"></a>05264   <span class="keywordtype">int</span> mlx=0;
-<a name="l05265"></a>05265   <span class="keywordtype">int</span> mly=0;
-<a name="l05266"></a>05266   <span class="keywordtype">int</span> nc=0;
-<a name="l05267"></a>05267   <span class="keywordtype">int</span> olx=0;
-<a name="l05268"></a>05268   <span class="keywordtype">int</span> oly=0;
-<a name="l05269"></a>05269   <span class="keywordtype">int</span> posx=0;
-<a name="l05270"></a>05270   <span class="keywordtype">int</span> posy=0;
-<a name="l05271"></a>05271   <span class="keywordtype">int</span> i=0;
-<a name="l05272"></a>05272 
-<a name="l05273"></a>05273   <span class="keywordtype">float</span>  msk_sum=0;
-<a name="l05274"></a>05274   <span class="keywordtype">float</span>  val_msk_sum=0;
-<a name="l05275"></a>05275   <span class="keywordtype">float</span> avg=0;
-<a name="l05276"></a>05276 
-<a name="l05277"></a>05277   <span class="keywordtype">float</span>* pmdata=NULL;
-<a name="l05278"></a>05278   <span class="keywordtype">float</span>* podata=NULL;
-<a name="l05279"></a>05279   <span class="keywordtype">float</span>* pvdata=NULL;
-<a name="l05280"></a>05280 
-<a name="l05281"></a>05281   cpl_image* m_img=NULL;
-<a name="l05282"></a>05282   cpl_image* o_img=NULL;
-<a name="l05283"></a>05283   cpl_image* v_img=NULL;
-<a name="l05284"></a>05284 
-<a name="l05285"></a>05285 
-<a name="l05286"></a>05286   cpl_vector* msk=NULL;
-<a name="l05287"></a>05287 
-<a name="l05288"></a>05288 
-<a name="l05289"></a>05289   o_img=cpl_imagelist_get(mergedCube,0);
-<a name="l05290"></a>05290   olx=cpl_image_get_size_x(o_img);
-<a name="l05291"></a>05291   oly=cpl_image_get_size_y(o_img);
-<a name="l05292"></a>05292 
-<a name="l05293"></a>05293   m=0;
-<a name="l05294"></a>05294   <span class="keywordflow">for</span> ( z = z_min; z < z_max ; z++ ) {
-<a name="l05295"></a>05295     m_img=cpl_imagelist_get(mask,z);
-<a name="l05296"></a>05296     pmdata=cpl_image_get_data_float(m_img);
-<a name="l05297"></a>05297     o_img=cpl_imagelist_get(mergedCube,z);
-<a name="l05298"></a>05298     podata=cpl_image_get_data_float(o_img);
-<a name="l05299"></a>05299     mlx=cpl_image_get_size_x(m_img);
-<a name="l05300"></a>05300     mly=cpl_image_get_size_y(m_img);
-<a name="l05301"></a>05301     <span class="comment">// go through the first image plane of the big data cube </span>
-<a name="l05302"></a>05302     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {
-<a name="l05303"></a>05303       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {
-<a name="l05304"></a>05304     avg=0;
-<a name="l05305"></a>05305     nc=0;
-<a name="l05306"></a>05306     <span class="comment">// computes nc </span>
-<a name="l05307"></a>05307 
-<a name="l05308"></a>05308         nc=sinfo_compute_contributes_at_pos(tmpcubes,llx,lly,x,y,
-<a name="l05309"></a>05309                                             ilx,ily,m,n_cubes);
-<a name="l05310"></a>05310 
-<a name="l05311"></a>05311         <span class="keywordflow">if</span>( nc > 0 ) {
-<a name="l05312"></a>05312 
-<a name="l05313"></a>05313       
-<a name="l05314"></a>05314       msk=cpl_vector_new(n_cubes);
-<a name="l05315"></a>05315       <span class="keywordflow">for</span> (i=0;i<n_cubes;i++) {
-<a name="l05316"></a>05316         cpl_vector_set(msk,i,1);
-<a name="l05317"></a>05317       }
-<a name="l05318"></a>05318 
-<a name="l05319"></a>05319 
-<a name="l05320"></a>05320            sinfo_cubes_coadd_with_ks_clip(tmpcubes, n_cubes,nc,x,y,m,
-<a name="l05321"></a>05321                                           llx,lly,ilx,ily,kappa, 
-<a name="l05322"></a>05322                                           exptimes,&pmdata, &msk,mlx);
-<a name="l05323"></a>05323 
-<a name="l05324"></a>05324       msk_sum=0;
-<a name="l05325"></a>05325       val_msk_sum=0;
-<a name="l05326"></a>05326       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l05327"></a>05327         v_img=cpl_imagelist_get(tmpcubes[i],m);
-<a name="l05328"></a>05328         pvdata=cpl_image_get_data_float(v_img);
-<a name="l05329"></a>05329         <span class="comment">// computes sky at each point </span>
-<a name="l05330"></a>05330             <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&
-<a name="l05331"></a>05331                  x >= llx[i] && x < llx[i]+ilx ) {
-<a name="l05332"></a>05332           posx = x - llx[i] ;
-<a name="l05333"></a>05333           posy = y - lly[i] ;
-<a name="l05334"></a>05334               <span class="comment">//sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span>
-<a name="l05335"></a>05335               <span class="comment">//sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span>
-<a name="l05336"></a>05336               <span class="keywordflow">if</span> (!isnan(pvdata[posx+posy*ilx]) &&
-<a name="l05337"></a>05337                          pvdata[posx+posy*ilx] != 0. &&
-<a name="l05338"></a>05338           (cpl_vector_get(msk,i) != 0)) {
-<a name="l05339"></a>05339         msk_sum+=pmdata[x+y*mlx];
-<a name="l05340"></a>05340                 val_msk_sum+=pvdata[posx+posy*ilx]*
-<a name="l05341"></a>05341           pmdata[x+y*mlx];
-<a name="l05342"></a>05342           }
-<a name="l05343"></a>05343         }
-<a name="l05344"></a>05344       }
-<a name="l05345"></a>05345       podata[x+y*olx]=val_msk_sum/msk_sum;
-<a name="l05346"></a>05346       cpl_vector_delete(msk);
-<a name="l05347"></a>05347       <span class="comment">/*</span>
-<a name="l05348"></a>05348 <span class="comment">      sinfo_ks_clip(n_cubes,nc,ilx,ily,kappa,llx,lly,exptimes,</span>
-<a name="l05349"></a>05349 <span class="comment">            tmpcubes,podata,pmdata,x,y,m,mlx,oly);</span>
-<a name="l05350"></a>05350 <span class="comment"></span>
-<a name="l05351"></a>05351 <span class="comment">      */</span>
-<a name="l05352"></a>05352 
-<a name="l05353"></a>05353     } <span class="comment">// end check if overlap nc >0  </span>
-<a name="l05354"></a>05354       } <span class="comment">// end loop over x </span>
-<a name="l05355"></a>05355     } <span class="comment">// end loop over y </span>
-<a name="l05356"></a>05356     m++;
-<a name="l05357"></a>05357   } <span class="comment">// end loop over z </span>
-<a name="l05358"></a>05358 
-<a name="l05359"></a>05359   <span class="keywordflow">return</span> 0;
-<a name="l05360"></a>05360 
-<a name="l05361"></a>05361 
-<a name="l05362"></a>05362 }
-<a name="l05363"></a>05363 
-<a name="l05364"></a>05364 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cube_ops.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*$Id: sinfo_new_cube_ops.c,v 1.47 2013/08/02 14:11:23 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  17/05/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * $Date: 2013/08/02 14:11:23 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * $Revision: 1.47 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*       sinfo_new_cube_ops.c -</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*       cube arithmetic routines</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*    #include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*    2) cpl_imagelist *</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*       sinfo_new_cube_ops( cpl_imagelist    *    cube1,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                cpl_imagelist    *    cube2,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                int        operation)</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*    3) cpl_imagelist *</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*       sinfo_new_cube_const_ops(</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                     cpl_imagelist    * cube1,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                     double    constant,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                     int        operation)</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*    4) cpl_imagelist *</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*       sinfo_new_cube_sub(</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*               cpl_imagelist    *    c1,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*               cpl_imagelist    *    c2 )</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*    5) cpl_imagelist *</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*       sinfo_new_cube_add(</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*               cpl_imagelist    *    c1,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*               cpl_imagelist    *    c2  )</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*    6) cpl_imagelist *</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*       sinfo_new_cube_mul(</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*               cpl_imagelist    *    c1,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*               cpl_imagelist    *    c2 )</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*    7) cpl_imagelist *</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*       sinfo_new_cube_div(</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*               cpl_imagelist    *    c1,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*               cpl_imagelist    *    c2 )</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*    8) cpl_imagelist * sinfo_new_add_image_to_cube(cpl_imagelist * cu,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                                                    cpl_image * im)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*    9) cpl_imagelist * sinfo_new_sub_image_from_cube (cpl_imagelist * cu,</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                                                    cpl_image * im)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*    10) cpl_imagelist * sinfo_new_mul_image_to_cube(cpl_imagelist * cu,</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">                                                    cpl_image * im)</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*    11) cpl_imagelist * sinfo_new_div_cube_by_image(cpl_imagelist * cu,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                                                    cpl_image * im)</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*    12) cpl_imagelist * sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu,</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">                                                    Vector *spec)</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*    13) cpl_imagelist * sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu,</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">                                                    Vector *spec)</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*    14) cpl_imagelist * sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu,</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                                                    Vector *spec)</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*    15) cpl_imagelist * sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu,</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">                                                    Vector *spec)</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*    16) Vector * sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*                                    int llx,</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*                                    int lly,</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*                                    int urx,</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*                                    int ury,</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*                                    double lo_reject,</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*                                    double hi_reject)</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*    17) cpl_image * sinfo_new_median_cube(cpl_imagelist * cube)</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*    18) cpl_image * sinfo_new_average_cube_to_image(cpl_imagelist * cube)</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*    19) cpl_image * sinfo_new_sum_cube_to_image(cpl_imagelist * cube)</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*    20) cpl_image *</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">         sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*                                                   float     dispersion,</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*                                                   float     centralWave,</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*                                                   float     initialLambda,</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*                                                   float     finalLambda)</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*    21) cpl_image * sinfo_new_extract_image_from_cube(cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">                                                    int plane_index)</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*    22) Vector * sinfo_new_extract_spectrum_from_cube( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">                                                    int x_pos, int y_pos )</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*    23) cpl_imagelist *</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">         sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*                                         cpl_imagelist  * mergedCube,</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*                                         int        n_cubes,</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*                                         float    * cumoffsetx,</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*                                         float    * cumoffsety,</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*                                         float    * exptimes,</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*                                         char     * kernel_type )</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*    24) cpl_imagelist * sinfo_new_interpol_cube_simple( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*                                      cpl_imagelist * badcube,</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*                                      int       maxdist )</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*    25) cpl_imagelist * sinfo_cube_zshift(const cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*                                          const double shift,</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*                                          double* rest)</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*    26) cpl_imagelist * sinfo_cube_zshift_poly(const cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*                                               const double shift,</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">*                                               const int    order)</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">*    27) cpl_imagelist * sinfo_cube_zshift_spline3(const cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*                                                  const double shift)</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">*    2) 4 operations between 2 cubes</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*    3) 4 operations between a cube and a constant</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">*    4)    subtract one cube from another</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">*    5) add a cube to another</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">*    6) multiply two cubes</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">*    7) divide two cubes</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">*    8) add an image to all planes in the cube</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">*    9) subtract an image from all planes in the cube</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">*    10) multiply an image to all planes in the cube</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">*    11) divide all planes in the cube by an image</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">*    12) adds a spectrum (in z-direction) to all data</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*                        points in a cube</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">*    13) subtracts a spectrum (in z-direction) from all</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">*                        data points in a cube</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">*    14) multiplies a spectrum (in z-direction) to all data</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">*                        points in a cube</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">*    15) divides all data points of a cube by a spectrum</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">*                        (in z-direction)</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">*    16) averaging routine to get a better spectral S/N, sorts</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">*        the values of the same z-position, cuts the lowest and</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">*        highest values according to given thresholds and then</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">*        takes the average within the x-y plane , cannot have</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">*        a sum of low and high rejected values greater than 90%</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">*        of all values</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">*    17) determines the sinfo_new_median value in every pixel position</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">*        by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">*        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">*        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">*        be 'ZERO'.</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">*    18) determines the average value in every pixel position</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*        by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">*        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">*        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">*        be 'ZERO'.</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">*    19) determines the sum value in every pixel position</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">*        by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">*        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">*        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">*        be 'ZERO'.</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">*    20) determines the average value in every pixel position</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">*        by considering only the pixels along the third axis</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">*        which lie between the given wavelength values.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">*        These values are first recalculated to plane indices</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">*        by using the given dispersion and minimum wavelength in</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">*        the cube.</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">*        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">*        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">*        be 'ZERO'.</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">*    21) returns the wanted image plane of the cube</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">*    22) returns the wanted single spectrum of the cube</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">*    23) merges jittered data cubes to one bigger cube</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">*        by averaging the overlap regions weighted by</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">*        the integration times. The x, y size of the final data</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">*        cube is user given, and should be between 32 and 64</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">*        pixels, while the relative pixel-offset (sub-pixel</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">*        accuracy) of the single cubes with respect to the</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">*        first cube in the list is read from the SEQ CUMOFFSETX,Y</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">*        fits header keyword.</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">*   24)  interpolates bad pixel of an object cube if a bad pixel</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">*        mask cube is available by using the nearest neighbors</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">*        in 3 dimensions.</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">*   25)  shifts an imagelist by a given amount to integer pixel accuracy</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">*   26)  shifts an imagelist by a given amount to sub-pixel accuracy</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">*   27)  shifts an imagelist by a given amount to sub-pixel accuracy</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="preprocessor">#include <sys/times.h></span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="preprocessor">#include <cpl_vector.h></span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> sinfo_shift_cubes(cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                   <span class="keywordtype">char</span>* kernel_type,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                   cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                   <span class="keywordtype">float</span>* sub_offsetx,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                   <span class="keywordtype">float</span>* sub_offsety,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> mlx,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> mly,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                   cpl_imagelist* mask);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> sinfo_build_mask_cube(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>               <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                       cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                       cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                       cpl_imagelist* mask);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> sinfo_build_mask_cube_thomas(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> olx,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> oly,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                      <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                              cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                              cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                  cpl_imagelist* mask);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> sinfo_compute_weight_average(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                              cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                              cpl_imagelist* mask,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                              cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                  <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                              <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                              <span class="keywordtype">int</span>* lly);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> sinfo_check_input(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                           <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                           <span class="keywordtype">float</span>* cumoffsetx,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                           <span class="keywordtype">float</span>* cumoffsety,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>               <span class="keywordtype">double</span>* exptimes);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> sinfo_coadd_with_ks_clip2(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                         <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>             cpl_imagelist* mask,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                           cpl_imagelist** tmpcubes);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">/* temporally commented out as not yet used</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">sinfo_ks_clip(</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">          const int n_cubes,</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">              const int nc,</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">          const int ilx,</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">          const int ily,</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">          const double kappa,</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">          int* llx,</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">          int* lly,</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">          double* exptimes,</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">          cpl_imagelist** tmpcubes,</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">              float* podata,</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">              float* pmdata,</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">          const int x,</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">          const int y,</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">          const int m,</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">          const int mlx,</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">          const int olx</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">          );</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment"></span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment"></span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> sinfo_coadd_with_ks_clip(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                         <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             cpl_imagelist* mask,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                         cpl_imagelist** tmpcubes);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> cpl_imagelist *</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> sinfo_new_cube_ops(</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     cpl_imagelist    *    cube1,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     cpl_imagelist    *    cube2,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordtype">int</span>        operation)</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordflow">if</span> (cube1==NULL || cube2==NULL)</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cubes"</span>);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">switch</span>(operation)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <span class="keywordflow">case</span> <span class="charliteral">'+'</span>:</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordflow">return</span> sinfo_new_cube_add(cube1, cube2) ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordflow">case</span> <span class="charliteral">'-'</span>:</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordflow">return</span> sinfo_new_cube_sub(cube1, cube2) ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     <span class="keywordflow">case</span> <span class="charliteral">'*'</span>:</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="keywordflow">return</span> sinfo_new_cube_mul(cube1, cube2) ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="keywordflow">case</span> <span class="charliteral">'/'</span>:</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keywordflow">return</span> sinfo_new_cube_div(cube1, cube2) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal requested operation: aborting cube arithmetic"</span>) ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="comment">   Function    :    sinfo_new_cube_const_ops()</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment">   In         :    1 cube, 1 constant, operation to perform</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">   Job        :    4 operations between a cube and a constant</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">   Notice    :    possible operations are:</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="comment">                  Addition    '+'</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="comment">                  Subtraction     '-'</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">                  Multiplication    '*'</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">                  Division    '/'</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">                  Logarithm    'l'</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment">                  Power        '^'</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="comment">                  Exponentiation    'e'</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment"></span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> cpl_imagelist *</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> sinfo_new_cube_const_ops(</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     <span class="keywordtype">double</span>        constant,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     <span class="keywordtype">int</span>        operation)</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> {</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     <span class="keywordtype">int</span> inp1=0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     cpl_imagelist* c2=NULL;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     cpl_image* img1=NULL;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     <span class="keywordflow">if</span> (c1 == NULL)</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     {</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     inp1=cpl_imagelist_get_size(c1);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     img1=cpl_imagelist_get(c1,0);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     ilx1=cpl_image_get_size_x(img1);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     ily1=cpl_image_get_size_y(img1);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordflow">if</span> ((constant == 0.0) && (operation == <span class="charliteral">'/'</span>))</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"division by zero requested "</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                         <span class="stringliteral">"in cube/constant operation"</span>) ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">if</span> ( NULL == (c2 = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     c2=cpl_imagelist_duplicate(c1);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordflow">if</span>(operation == <span class="charliteral">'+'</span>) {</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       cpl_imagelist_add_scalar(c2,constant);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'-'</span>) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       cpl_imagelist_subtract_scalar(c2,constant);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'*'</span>) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       cpl_imagelist_multiply_scalar(c2,constant);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (operation == <span class="charliteral">'/'</span>) {</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       cpl_imagelist_divide_scalar(c2,constant);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation not supported"</span>);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     }</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordflow">return</span> c2 ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment"> * Function    :    sinfo_new_cube_sub()</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment"> * In         :    two cubes</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment"> * Out         :    result cube</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment"> * Job        :    subtract one cube from another</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> cpl_imagelist *</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> sinfo_new_cube_sub(</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> )</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     cpl_imagelist   *                 c3 ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     ulong32            i ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keywordtype">int</span>                     np ;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     <span class="keywordtype">int</span> inp1=0;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     <span class="keywordtype">int</span> ilx2=0;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     <span class="keywordtype">int</span> ily2=0;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     <span class="keywordtype">int</span> inp2=0;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     cpl_image* img1=NULL;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     cpl_image* img2=NULL;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     cpl_image* img3=NULL;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordtype">float</span>* p1data=NULL;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     <span class="keywordtype">float</span>* p2data=NULL;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="keywordtype">float</span>* p3data=NULL;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     inp1=cpl_imagelist_get_size(c1);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     i_img=cpl_imagelist_get(c1,0);</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     ilx1=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     ily1=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     inp2=cpl_imagelist_get_size(c2);</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     i_img=cpl_imagelist_get(c2,0);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     ilx2=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     ily2=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">if</span> ((ilx1 != ilx2) ||</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     (ily1 != ily2))</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot subtract"</span>) ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">if</span> ((inp2 != inp1) &&</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     (inp2 != 1))</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="keywordflow">if</span> ( NULL == (c3 = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     {</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>       cpl_imagelist_set(c3,img3,np);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       img1=cpl_imagelist_get(c1,np);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       p1data=cpl_image_get_data_float(img1);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       img2=cpl_imagelist_get(c2,np);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       p2data=cpl_image_get_data_float(img2);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       img3=cpl_imagelist_get(c3,np);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>       p3data=cpl_image_get_data_float(img3);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ily1 ; i++)</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>             p3data[i] = p1data[i] - p2data[i] ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     }</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     <span class="keywordflow">return</span> c3 ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment"> * Function    :    sinfo_new_cube_add()</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="comment"> * In         :    two cubes</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="comment"> * Out         :    result cube</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="comment"> * Job        :    add a cube to another</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> cpl_imagelist *</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> sinfo_new_cube_add(</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> )</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     cpl_imagelist  *          c3 ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     ulong32        i ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <span class="keywordtype">int</span>         np ;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     <span class="keywordtype">int</span> inp1=0;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     <span class="keywordtype">int</span> ilx2=0;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     <span class="keywordtype">int</span> ily2=0;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="keywordtype">int</span> inp2=0;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     cpl_image* img1=NULL;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     cpl_image* img2=NULL;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     cpl_image* img3=NULL;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="keywordtype">float</span>* p1data=NULL;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     <span class="keywordtype">float</span>* p2data=NULL;</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     <span class="keywordtype">float</span>* p3data=NULL;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     inp1=cpl_imagelist_get_size(c1);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     i_img=cpl_imagelist_get(c1,0);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     ilx1=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     ily1=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     inp2=cpl_imagelist_get_size(c2);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     i_img=cpl_imagelist_get(c2,0);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     ilx2=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     ily2=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordflow">if</span> ((ilx1 != ilx2) || (ily1 != ily2))</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     {</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot add"</span>) ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     }</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     <span class="keywordflow">if</span> (NULL == (c3 = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span>) ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       cpl_imagelist_set(c3,img3,np);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     }</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     {</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>       img1=cpl_imagelist_get(c1,np);</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>       p1data=cpl_image_get_data_float(img1);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>       img2=cpl_imagelist_get(c2,np);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>       p2data=cpl_image_get_data_float(img2);</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>       img3=cpl_imagelist_get(c3,np);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>       p3data=cpl_image_get_data_float(img3);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ily1 ; i++)</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         {</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         p3data[i] = p1data[i] + p2data[i] ;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     }</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     <span class="keywordflow">return</span> c3 ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> <span class="comment"> * Function    :    sinfo_new_cube_mul()</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="comment"> * In         :    two cubes</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="comment"> * Out         :    result cube</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> <span class="comment"> * Job        :    multiply 2 cubes</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> cpl_imagelist *</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> sinfo_new_cube_mul(</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> )</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> {</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     cpl_imagelist             *c3 ;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     ulong32        i ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordtype">int</span>                np ;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     <span class="keywordtype">int</span> inp1=0;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keywordtype">int</span> ilx2=0;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keywordtype">int</span> ily2=0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordtype">int</span> inp2=0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     cpl_image* img1=NULL;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     cpl_image* img2=NULL;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     cpl_image* img3=NULL;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordtype">float</span>* p1data=NULL;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordtype">float</span>* p2data=NULL;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordtype">float</span>* p3data=NULL;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     inp1=cpl_imagelist_get_size(c1);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     i_img=cpl_imagelist_get(c1,0);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     ilx1=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     ily1=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     inp2=cpl_imagelist_get_size(c2);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     i_img=cpl_imagelist_get(c2,0);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     ilx2=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     ily2=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="keywordflow">if</span> ((ilx1 != ilx2) || (ily1 != ily2))</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot multiply"</span>) ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     }</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     {</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     }</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keywordflow">if</span> ( NULL == (c3 = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     }</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>       cpl_imagelist_set(c3,img3,np);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     }</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     {</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>       img1=cpl_imagelist_get(c1,np);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>       p1data=cpl_image_get_data_float(img1);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>       img2=cpl_imagelist_get(c2,np);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>       p2data=cpl_image_get_data_float(img2);</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>       img3=cpl_imagelist_get(c3,np);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>       p3data=cpl_image_get_data_float(img3);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         <span class="keywordflow">for</span> (i=0 ; i< (ulong32)ilx1*ilx2 ; i++)</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>             p3data[i] = p1data[i] * p2data[i] ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         }</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     }</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     <span class="keywordflow">return</span> c3 ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span> <span class="comment"> * Function    :    sinfo_new_cube_div()</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> <span class="comment"> * In         :    two cubes</span></div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> <span class="comment"> * Out         :    result cube</span></div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> <span class="comment"> * Job        :    divide 2 cubes</span></div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> cpl_imagelist *</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> sinfo_new_cube_div(</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> )</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     cpl_imagelist *           c3 ;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     ulong32        i ;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     <span class="keywordtype">int</span>         np ;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>     <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     <span class="keywordtype">int</span> inp1=0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     <span class="keywordtype">int</span> ilx2=0;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keywordtype">int</span> ily2=0;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <span class="keywordtype">int</span> inp2=0;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     cpl_image* img1=NULL;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     cpl_image* img2=NULL;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     cpl_image* img3=NULL;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keywordtype">float</span>* p1data=NULL;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordtype">float</span>* p2data=NULL;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordtype">float</span>* p3data=NULL;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     inp1=cpl_imagelist_get_size(c1);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     i_img=cpl_imagelist_get(c1,0);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     ilx1=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     ily1=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     inp2=cpl_imagelist_get_size(c2);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     i_img=cpl_imagelist_get(c2,0);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     ilx2=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     ily2=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordflow">if</span> ((ilx1 != ilx2) ||</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     (ily1 != ily2))</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot divide"</span>) ;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     <span class="keywordflow">if</span> ((inp2 != inp1) && (inp2 != 1))</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     {</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute with these number of planes"</span>) ;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     }</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     <span class="keywordflow">if</span> (NULL == (c3 = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     {</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate a new cube"</span>) ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     {</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>       img3=cpl_image_new(ilx1,ily1,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>       cpl_imagelist_set(c3,img3,np);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordflow">for</span> (np=0 ; np < inp1 ; np++)</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>       img1=cpl_imagelist_get(c1,np);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>       p1data=cpl_image_get_data_float(img1);</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       img2=cpl_imagelist_get(c2,np);</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>       p2data=cpl_image_get_data_float(img2);</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>       img3=cpl_imagelist_get(c3,np);</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>       p3data=cpl_image_get_data_float(img3);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <span class="keywordflow">for</span> (i=0 ; i< (ulong32) ilx1*ily1 ; i++)</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>         {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             <span class="keywordflow">if</span> (fabs((<span class="keywordtype">double</span>)p2data[i]) < 1e-10)</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             {</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>             p3data[i] = 0.0 ;</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>             }</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>             {</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                 p3data[i] = p1data[i] / p2data[i] ;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>             }</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>         }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <span class="keywordflow">return</span> c3 ;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> }</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="comment">   Function    :    sinfo_new_add_image_to_cube()</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="comment">   In         :    1 allocated cube, 1 allocated image</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="comment">   Job        :    add an image to all planes in the cube</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> cpl_imagelist *</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> sinfo_new_add_image_to_cube(cpl_imagelist * cu, cpl_image * im)</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> {</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     cpl_imagelist *   cube ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     <span class="keywordtype">int</span>               i ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     <span class="keywordflow">if</span> (cu==NULL || im==NULL)</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     {</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>        <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     }</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     cnp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     clx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     cly=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> </div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>     {</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot add image to cube"</span>) ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     }</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     cube = cpl_imagelist_duplicate (cu) ;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     {</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       <span class="comment">/* AMO</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     cpl_image_add(cpl_imagelist_get(cube,i), im) ;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     }</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> }</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> <span class="comment">   Function    :    sinfo_new_sub_image_from_cube()</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="comment">   In         :    1 allocated cube, 1 allocated image</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="comment">   Out         :       result cube</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="comment">   Job        :    subtract an image from all planes in the cube</span></div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> cpl_imagelist *</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> sinfo_new_sub_image_from_cube (cpl_imagelist * cu, cpl_image * im)</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> {</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     cpl_imagelist   * cube ;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     <span class="keywordtype">int</span>               i ;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keywordflow">if</span> (cu==NULL || im==NULL)</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     {</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     }</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     cnp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     clx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     cly=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     {</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot subtract image from cube"</span>) ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     }</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     cube = cpl_imagelist_duplicate (cu) ;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>       <span class="comment">/* AMO</span></div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span></div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     cpl_image_subtract(cpl_imagelist_get(cube,i), im) ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> }</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> <span class="comment">   Function    :    sinfo_new_mul_image_to_cube()</span></div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> <span class="comment">   In         :    1 allocated cube, 1 allocated image</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> <span class="comment">   Job        :    multiply an image to all planes in the cube</span></div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> cpl_imagelist *</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> sinfo_new_mul_image_to_cube(cpl_imagelist * cu, cpl_image * im)</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> {</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     cpl_imagelist   * cube ;</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     <span class="keywordtype">int</span>               i ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     <span class="keywordflow">if</span> (cu==NULL || im==NULL)</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     {</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"null cube or null image"</span>) ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     cnp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     clx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     cly=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     {</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot multiply image by cube"</span>) ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     cube = cpl_imagelist_duplicate (cu) ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>       <span class="comment">/* AMO</span></div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span></div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     cpl_image_multiply(cpl_imagelist_get(cube,i), im) ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> }</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> <span class="comment">   Function    :    sinfo_new_div_cube_by_image()</span></div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="comment">   In         :    1 allocated cube, 1 allocated image</span></div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> <span class="comment">   Job        :    divide all planes in the cube by an image</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> cpl_imagelist *</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> sinfo_new_div_cube_by_image(cpl_imagelist * cu, cpl_image * im)</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> {</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     cpl_imagelist   * cube ;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     <span class="keywordtype">int</span>               i ;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <span class="keywordflow">if</span> (cu==NULL || im==NULL)</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     {</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null image"</span>) ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     }</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     cnp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>     clx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     cly=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     <span class="keywordflow">if</span> ((clx != ilx) || (cly != ily))</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>     {</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"incompatible size: cannot divide cube by image"</span>) ;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     }</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     cube = cpl_imagelist_duplicate (cu) ;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keywordflow">for</span> (i=0 ; i<cnp ; i++)</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     {</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       <span class="comment">/* AMO</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">        here may be we have to use cpl_image_add_create and cpl_imagelist_set</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     cpl_image_divide(cpl_imagelist_get(cube,i), im) ;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> }</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">   Function    :    sinfo_new_add_spectrum_to_cube()</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> <span class="comment">   Job        :    adds a spectrum (in z-direction) to all data</span></div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="comment">                        points in a cube</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> cpl_imagelist *</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu, Vector *spec)</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> {</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     cpl_imagelist *   cube ;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     <span class="keywordtype">int</span>         i ,j ;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>     }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">if</span> ( inp != spec -> n_elements )</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     {</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span> </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new ()) )</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>     {</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     }</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     {</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>       cpl_imagelist_set(cube,o_img,i);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     }</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     {</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>       i_img=cpl_imagelist_get(cu,i);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       o_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>         {</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>             podata[j] = pidata[j] + spec -> data[i] ;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>         }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> }</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="comment">   Function    :    sinfo_new_sub_spectrum_from_cube()</span></div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">   Job        :    subtracts a spectrum (in z-direction) from all</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="comment">                        data points in a cube</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> cpl_imagelist *</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu, Vector *spec)</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     cpl_imagelist *   cube ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>     <span class="keywordtype">int</span>         i ,j ;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     {</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     }</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>     <span class="keywordflow">if</span> ( inp != spec -> n_elements )</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     {</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> </div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     {</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     {</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>       cpl_imagelist_set(cube,o_img,i);</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     }</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>       i_img=cpl_imagelist_get(cu,i);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>       o_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>         {</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>             <span class="keywordflow">if</span> ( isnan(pidata[j]) || isnan(spec -> data[i]) )</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>             {</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>                 podata[j] = ZERO ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>             }</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>             {</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                 podata[j] = pidata[j] - spec -> data[i] ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>             }</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>         }</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     }</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> <span class="comment">   Function    :    sinfo_new_mul_spectrum_to_cube()</span></div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span></div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">   Job        :    multiplies a spectrum (in z-direction) to all data</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">                        points in a cube</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> cpl_imagelist *</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu, Vector *spec)</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> {</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     cpl_imagelist *   cube ;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     <span class="keywordtype">int</span>         i ,j ;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     }</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> </div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     <span class="keywordflow">if</span> ( inp != spec -> n_elements )</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     {</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     }</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     <span class="keywordflow">if</span> ( NULL == (cube = cpl_imagelist_new ()) )</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     {</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span> ) ;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     }</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     {</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>       cpl_imagelist_set(cube,o_img,i);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>     }</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     {</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>       i_img=cpl_imagelist_get(cu,i);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>       o_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>         {</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>             <span class="keywordflow">if</span> ( isnan(pidata[j]) || isnan(spec->data[i]) )</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>             {</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>                 podata[j] = ZERO ;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>             }</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>             {</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>                 podata[j] = pidata[j] * spec -> data[i] ;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>             }</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         }</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     }</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> }</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">   Function    :    sinfo_new_div_cube_by_spectrum()</span></div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment">   In         :    1 allocated cube, 1 allocated spectrum sinfo_vector</span></div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">   Out         :    result cube</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">   Job        :    divides all data points of a cube by a spectrum</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">                        (in z-direction)</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> </div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> cpl_imagelist *</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu, Vector *spec)</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> {</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     cpl_imagelist *   cube ;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>     <span class="keywordtype">float</span>       help ;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     <span class="keywordtype">int</span>         i ,j ;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     <span class="keywordflow">if</span> (cu == NULL || spec == NULL)</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     {</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube or null spectrum"</span>) ;</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     }</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>     inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>     i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>     <span class="keywordflow">if</span> ( inp != spec -> n_elements )</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>     {</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cube length and spectrum length are not compatible"</span>) ;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     }</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     <span class="keywordflow">if</span> (NULL == (cube = cpl_imagelist_new ()) )</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>     {</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new cube"</span>) ;</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     }</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> </div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>       o_img=cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>       cpl_imagelist_set(cube,o_img,i);</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     }</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>     <span class="keywordflow">for</span> ( i = 0; i < inp; i++)</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     {</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>       i_img=cpl_imagelist_get(cu,i);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>       o_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>         <span class="keywordflow">for</span> ( j = 0; j < (int) ilx*ily; j++)</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>         {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>             <span class="keywordflow">if</span> (!isnan(spec->data[i]) && spec->data[i] != 0.)</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>             {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                 help = 1/spec->data[i] ;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                 <span class="keywordflow">if</span> ( help > THRESH )</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>                 {</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                     help = 1. ;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>                 }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>             }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>             {</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>                 help = ZERO ;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>             }</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> </div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>             <span class="keywordflow">if</span> ( isnan(help) || isnan(pidata[j]) )</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             {</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>                 podata[j] = ZERO ;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>             }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>             {</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>                 podata[j] = pidata[j] * help ;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>             }</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>         }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>     }</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">   Function    :    sinfo_new_clean_mean_of_spectra()</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">   In         :    1 allocated cube, position of rectangle in x-y plane ,</span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">                        low and high cut threshold</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">   Out         :    result spectrum sinfo_vector</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> <span class="comment">   Job        :    averaging routine to get a better spectral S/N, sorts</span></div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> <span class="comment">                        the values of the same z-position, cuts the lowest and</span></div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="comment">                        highest values according to given thresholds and then</span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> <span class="comment">                        takes the average within the x-y plane , cannot have</span></div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> <span class="comment">                        a sum of low and high rejected values greater than 90%</span></div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> <span class="comment">                        of all values</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> </div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> Vector *</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span> sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>                              <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>                              <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>                              <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>                              <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                              <span class="keywordtype">double</span> lo_reject,</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>                              <span class="keywordtype">double</span> hi_reject)</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> {</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     Vector                           * mean ;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     pixelvalue                   *local_rectangle ;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     <span class="keywordtype">int</span>                    i, j, k, l, m ;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordtype">int</span>             recsize, lo_n, hi_n, nv ;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> </div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     <span class="keywordflow">if</span> ( cube == NULL || cpl_imagelist_get_size(cube) < 1 )</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     {</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube to take the mean of his spectra"</span>) ;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>     }</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <span class="keywordflow">if</span> ((llx<1) || (llx>ilx) ||</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>         (urx<1) || (urx>ilx) ||</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         (lly<1) || (lly>ily) ||</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>         (ury<1) || (ury>ily) ||</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>                         llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>     }</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> </div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>     <span class="keywordflow">if</span> ((lo_reject + hi_reject) > 0.9)</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>     {</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"illegal rejection thresholds: [%f] and [%f]"</span>,</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>                         lo_reject, hi_reject) ;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"threshold sum should not be over 0.9"</span></div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>                         <span class="stringliteral">" aborting average"</span>) ;</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>     }</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> </div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>     <span class="comment">/* shift from FITS coordinates to C coordinates */</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>     llx -- ;</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>     lly -- ;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     urx -- ;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>     ury -- ;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> </div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     lo_n = (int) (recsize * lo_reject + 0.5) ;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>     hi_n = (int) (recsize * hi_reject + 0.5) ;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     <span class="keywordflow">if</span> (lo_n + hi_n >= recsize)</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>     {</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"everything would be rejected"</span>) ;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         <span class="keywordflow">return</span> NullVector;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>     }</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> </div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>     {</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     }</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     {</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>       m = 0 ;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>       local_rectangle=(pixelvalue *)cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         {</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>             {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>                 local_rectangle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>                 m ++ ;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>             }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>         }</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>         <span class="comment">/*sorts the pixelvalues in the buffer*/</span></div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>         sinfo_pixel_qsort (local_rectangle, recsize) ;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> </div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>         nv = 0 ;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>         <span class="keywordflow">for</span> ( l = lo_n ; l < (recsize - hi_n) ; l++ )</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>         {</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>             mean -> data[i] += local_rectangle[l] ;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>             nv ++;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         }</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>         mean -> data[i] /= nv ;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>         cpl_free ( local_rectangle ) ;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     }</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     <span class="keywordflow">return</span> mean ;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> }</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> </div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> </div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span> <span class="comment">   Function    :sinfo_new_median_cube()</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">   In         :1 allocated cube</span></div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> <span class="comment">   Out         :result image</span></div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> <span class="comment">   Job        :determines the sinfo_new_median value in every pixel position</span></div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> <span class="comment">                 by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> <span class="comment">                 ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> <span class="comment">                 pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> <span class="comment">                 be 'ZERO'.</span></div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span> cpl_image *</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> sinfo_new_median_cube(cpl_imagelist * cube)</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> {</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     cpl_image  *         im ;</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     pixelvalue *    buffer ;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>     <span class="keywordtype">int</span>        i, j, k, nz ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>     {</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>     }</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>     {</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>     }</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> </div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span> <span class="comment">     * transfer each sinfo_vector in z direction in a buffer and collect</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment">       only non-blank data.</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> </div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>     podata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     {</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>         buffer = (pixelvalue *) cpl_calloc (inp, <span class="keyword">sizeof</span> (pixelvalue *));</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>         k = 0 ;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>         {</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>           i_img=cpl_imagelist_get(cube,j);</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>             {</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>                 buffer[k] = pidata[i] ;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                 k ++ ;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>             }</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>         }</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         nz = k ;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>         <span class="comment">/* proceed depending on the number of valid pixels */</span></div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>         <span class="keywordflow">if</span> ( nz > 2 )</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>         {</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>             podata[i] = sinfo_new_median ( buffer, nz ) ;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>         }</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 2)</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>         {</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>             podata[i] = (buffer[0] + buffer[1]) / 2. ;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>         }</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 1)</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>         {</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>             podata[i] = buffer[0] ;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>         }</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>         {</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>         }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>         cpl_free ( buffer ) ;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>     }</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>     <span class="keywordflow">return</span> im ;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span> }</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> </div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> <span class="comment">   Function    :    sinfo_new_average_cube_to_image()</span></div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> <span class="comment">   In         :    1 allocated cube</span></div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> <span class="comment">   Out         :    result image</span></div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> <span class="comment">   Job        :    determines the average value in every pixel position</span></div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> <span class="comment">                        by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">                        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> <span class="comment">                        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> <span class="comment">                        be 'ZERO'.</span></div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> cpl_image *</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> sinfo_new_average_cube_to_image(cpl_imagelist * cube)</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> {</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     cpl_image  *      im ;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     <span class="keywordtype">int</span>        i, j, nz ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>     {</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>     }</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily,CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     }</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span> <span class="comment">     * transfer each vector in z direction in a buffer and collect</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span> <span class="comment">       only non-blank data.</span></div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     podata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     {</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>         nz = 0 ;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>         {</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>           i_img=cpl_imagelist_get(cube,j);</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>             {</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>                 nz ++ ;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>                 podata[i] += pidata[i] ;</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>             }</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>         }</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>         <span class="comment">/* proceed depending on the number of valid pixels */</span></div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>         <span class="keywordflow">if</span> ( nz >= 1 )</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>         {</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>             podata[i] /= nz ;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>         }</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>         {</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>         }</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     }</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     <span class="keywordflow">return</span> im ;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> }</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> <span class="comment">   Function     :       sinfo_new_sum_cube_to_image()</span></div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> <span class="comment">   In           :       1 allocated cube</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> <span class="comment">   Out          :       result image</span></div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> <span class="comment">   Job          :       determines the sum value in every pixel position</span></div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> <span class="comment">                        by considering all pixels along the third axis.</span></div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> <span class="comment">                        ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> <span class="comment">                        pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment">                        be 'ZERO'.</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> cpl_image *</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> sinfo_new_sum_cube_to_image(cpl_imagelist * cube)</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> {</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     cpl_image  *      im ;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     <span class="keywordtype">int</span>        i, j, nz ;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> </div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     {</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     }</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> </div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     {</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     }</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> </div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> <span class="comment">     * transfer each vector in z direction in a buffer and collect only</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> <span class="comment">       non-blank data.</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     podata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     {</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>         nz = 0 ;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>         <span class="keywordflow">for</span> ( j = 0 ; j < inp ; j ++ )</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>         {</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>           i_img=cpl_imagelist_get(cube,j);</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>             {</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>                 nz++ ;</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>                 podata[i] += pidata[i] ;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>             }</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>         }</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>         <span class="comment">/* proceed depending on the number of valid pixels */</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>         <span class="keywordflow">if</span> (nz == 0)</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>         {</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>         }</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     }</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> </div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     <span class="keywordflow">return</span> im ;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> }</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> <span class="comment">   Function    sinfo_new_average_cube_to_image_between_waves()</span></div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment">   In         cube: data cube to collapse</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment">                dispersion: dispersion per pixel in microns/pixel</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="comment">                (derived from fits header information)</span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment">                centralWave: central wavelength in the cube in microns</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">                                       (derived from fits header information)</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment">                initialLambda, finalLambda: wavelength values in microns</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">                                            within which the cube is averaged</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment">   Out         :resulting averaged image</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment">   Job        :determines the average value in every pixel position</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment">                 by considering only the pixels along the third axis</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> <span class="comment">                 which lie between the given wavelength values.</span></div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> <span class="comment">                 These values are first recalculated to plane indices</span></div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> <span class="comment">                 by using the given dispersion and minimum wavelength in</span></div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> <span class="comment">                 the cube.</span></div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> <span class="comment">                 ZERO pixels in a plane are not considered. If all</span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> <span class="comment">                 pixels at a position are not valid the result will</span></div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> <span class="comment">                 be 'ZERO'.</span></div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> cpl_image *</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>                                            <span class="keywordtype">float</span>     dispersion,</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>                                            <span class="keywordtype">float</span>     centralWave,</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>                                            <span class="keywordtype">float</span>     initialLambda,</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>                                            <span class="keywordtype">float</span>     finalLambda)</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span> {</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     cpl_image  *      im ;</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     <span class="keywordtype">int</span>        firstPlane ;</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     <span class="keywordtype">int</span>        lastPlane ;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>     <span class="keywordtype">int</span>        i, j, nz ;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>     <span class="keywordtype">float</span>      minWave ;</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> </div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>     {</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>     }</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> </div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>     minWave = centralWave - (float) (inp / 2)*dispersion ;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> </div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     <span class="keywordflow">if</span> ( dispersion <= 0. || minWave <= 0. )</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>     {</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong dispersion or minimum wavelength given"</span>) ;</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>     }</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>     <span class="keywordflow">if</span> ( initialLambda < minWave ||</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>         (initialLambda >= minWave + dispersion * inp) )</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>     {</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong initial wavelength given"</span>) ;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     }</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> </div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>     <span class="keywordflow">if</span> ( finalLambda <= minWave ||</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>         (finalLambda > minWave + dispersion * inp) )</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>     {</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong final wavelength given"</span>) ;</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>     }</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>     <span class="keywordflow">if</span> (NULL == (im = cpl_image_new (ilx, ily, CPL_TYPE_FLOAT )) )</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>     {</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new image"</span>) ;</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>     }</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> </div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>     <span class="comment">/* transfer the wavelength range to image plane indices */</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>     firstPlane = sinfo_new_nint ((<span class="keywordtype">double</span>) ((initialLambda - minWave) /</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>                                           dispersion)) ;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>     lastPlane  = sinfo_new_nint ((<span class="keywordtype">double</span>) ((finalLambda - minWave) /</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>                                           dispersion)) ;</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> </div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>     <span class="keywordflow">if</span> ( firstPlane < 0 || firstPlane >= inp ||</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>          lastPlane  < 0 || lastPlane  >  inp )</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     {</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong values given!"</span>) ;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>     }</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> <span class="comment">     * transfer each vector in z direction in a buffer and collect only</span></div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span> <span class="comment">       non-blank data.</span></div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> </div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span> </div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>     podata=cpl_image_get_data_float(im);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>     {</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>         nz = 0 ;</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> </div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>         <span class="keywordflow">for</span> ( j = firstPlane ; j <= lastPlane ; j ++ )</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>         {</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>           i_img=cpl_imagelist_get(cube,j);</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>             <span class="keywordflow">if</span> ( !isnan(pidata[i]) )</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>             {</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>                 nz ++ ;</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>                 podata[i] += pidata[i] ;</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>             }</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>         }</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> </div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>         <span class="comment">/* proceed depending on the number of valid pixels */</span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>         <span class="keywordflow">if</span> ( nz >= 1 )</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>         {</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>             podata[i] /= nz ;</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>         }</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nz == 0)</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>         {</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>             podata[i] = ZERO ;</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>         }</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>     }</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> </div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     <span class="keywordflow">return</span> im ;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> </div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="comment">   Function    :    sinfo_new_extract_image_from_cube()</span></div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="comment">   In         :    1 allocated cube</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">                        index of cube plane</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> <span class="comment">   Out         :    extracted image</span></div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">   Job        :    returns the wanted image plane of the cube</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> cpl_image *</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> sinfo_new_extract_image_from_cube(cpl_imagelist * cube, <span class="keywordtype">int</span> plane_index)</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> {</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>     {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>     }</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> </div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>     <span class="keywordflow">if</span> ( plane_index < 0 || plane_index >= cpl_imagelist_get_size(cube) )</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>     {</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong plane index for image to be extracted"</span>) ;</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>     }</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>     <span class="keywordflow">return</span> cpl_imagelist_get(cube,plane_index) ;</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> }</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span> </div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span> <span class="comment">   Function    :sinfo_new_extract_spectrum_from_cube()</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> <span class="comment">   In         :cube: 1 allocated cube</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="comment">                 x_pos, y_pos: x, y pixel position of the</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span> <span class="comment">                               spectrum counted from 0</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> <span class="comment">   Out         :extracted spectral sinfo_vector object</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> <span class="comment">   Job        :returns the wanted single spectrum of the cube</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> Vector *</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> sinfo_new_extract_spectrum_from_cube(cpl_imagelist * cube,</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>                                      <span class="keywordtype">int</span> x_pos, <span class="keywordtype">int</span> y_pos)</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span> {</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>     Vector * returnedSpectrum ;</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> </div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>     {</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube given!"</span>) ;</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>     }</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>     i_img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> </div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     <span class="keywordflow">if</span> ( x_pos < 0 || x_pos >= ilx )</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>     {</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong x-positon of spectrum given!"</span>) ;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>     }</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> </div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>     <span class="keywordflow">if</span> ( y_pos < 0 || y_pos >= ily )</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>     {</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong y-positon of spectrum given!"</span>) ;</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>     }</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> </div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>     <span class="keywordflow">if</span> ( NULL == (returnedSpectrum = sinfo_new_vector ( inp )) )</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>     {</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new spectrum!"</span>) ;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     }</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span> </div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     {</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>       returnedSpectrum -> data[i] = pidata[x_pos + ilx*y_pos] ;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>     }</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> </div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     <span class="keywordflow">return</span> returnedSpectrum ;</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> }</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="comment">   Function     :       sinfo_new_combine_jittered_cubes()</span></div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> <span class="comment">   In           :       cubes: list of jittered cubes to mosaic</span></div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> <span class="comment">                        mergedCube: resulting merged cube containing the</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> <span class="comment">                                      jittered cubes</span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="comment">                        n_cubes: number of cubes in the list to merge</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="comment">                        cumoffsetx,y: array of relative x, y pixel offsets</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="comment">                                      with respect to the first frame in the</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="comment">                                      same sequence as the cube list.</span></div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">                        exptimes: exposure times array giving the time</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="comment">                                  in the same sequence as the cube list</span></div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> <span class="comment">                        kernel_type: the name of the interpolation kernel</span></div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span> <span class="comment">                                     that you want to generate using the</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> <span class="comment">                                     eclipse routine</span></div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> <span class="comment">                                     sinfo_generate_interpolation_kernel()</span></div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> <span class="comment">                                     Supported kernels are:</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span> <span class="comment">                                     NULL:      default kernel, currently tanh</span></div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> <span class="comment">                                     "default": dito</span></div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> <span class="comment">                                     "tanh":    Hyperbolic tangent</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="comment">                                     "sinc2":   Square sinc</span></div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="comment">                                     "lanczos": Lanczos2 kernel</span></div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">                                     "hamming": Hamming kernel</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> <span class="comment">                                     "hann":    Hann kernel</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment">   Out          :       mask: cube of the same size as combinedCube</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment">                              containing 0 for blank (ZERO pixels) and</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment">                              the summed integration times for</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment">                              overlapping regions</span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">                        mergedCube: final data cube containing the</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="comment">                                    jittered cubes</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="comment">   Job          :       merges jittered data cubes to one bigger cube</span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">                        by averaging the overlap regions weighted by</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="comment">                        the integration times. The x, y size of the final data</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="comment">                        cube is user given, and should be between 32 and 64</span></div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="comment">                        pixels, while the relative pixel-offset (sub-pixel</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="comment">                        accuracy) of the single cubes with respect to the</span></div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="comment">                        first cube in the list is read from the</span></div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="comment">                        SEQ CUMOFFSETX,Y</span></div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> <span class="comment">                        fits header keyword.</span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> cpl_imagelist *</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>                                  cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>                                  <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>                                  <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>                                  <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>                                  <span class="keywordtype">float</span>    * exptimes,</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>                                  <span class="keywordtype">char</span>     * kernel_type )</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> {</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> </div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>     <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>     <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>     <span class="keywordtype">int</span> llx0=0;</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>     <span class="keywordtype">int</span> lly0=0;</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>     <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>     <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>     <span class="keywordtype">float</span> weight=0;</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>     cpl_imagelist * mask=NULL;</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>     <span class="keywordtype">double</span> * kernel=NULL;</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>     <span class="comment">/*cpl_image * shiftedImage ;*/</span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> </div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>     <span class="keywordtype">int</span>* llx=NULL ;</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>     <span class="keywordtype">int</span>* lly=NULL ;</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> </div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>     <span class="keywordtype">float</span>* sub_offsetx=NULL ;</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>     <span class="keywordtype">float</span>* sub_offsety=NULL ;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> </div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>     cpl_imagelist ** tmpcubes=NULL ;</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>     pixelvalue * tmpspace=NULL;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> </div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span> </div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>   <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>   <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> </div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span> </div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span> </div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span> </div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> </div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> </div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>     <span class="keywordflow">if</span> ( cubes == NULL )</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>     {</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>     }</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>     <span class="keywordflow">if</span> ( n_cubes <= 0 )</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>     {</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>     }</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>     {</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>     }</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>     <span class="keywordflow">if</span> ( exptimes == NULL )</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>     {</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no exposure time array given!"</span>) ;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>     }</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> </div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     o_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>     onp=cpl_imagelist_get_size(mergedCube);</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     <span class="keywordflow">if</span> ( NULL == (mask = cpl_imagelist_new()) )</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     {</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate cube!"</span>) ;</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>     }</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>     <span class="keywordflow">for</span>(i=0;i<onp;i++){</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>       o_img=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>       cpl_imagelist_set(mergedCube,o_img,i);</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>     }</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> </div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>     i_img=cpl_imagelist_get(cubes[0],0);</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> </div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>     inp=cpl_imagelist_get_size(cubes[0]);</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> </div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment">     * center the cubes within the allocated big cube</span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span></div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span></div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>     <span class="comment">/* position of first reference frame, centered in big cube */</span></div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>     llx0 = olx/2 - ilx/2 ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>     lly0 = oly/2 - ily/2 ;</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> </div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> <span class="comment">     * go through the frame list and determine the lower left edge position</span></div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span></div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="comment">     * determined.</span></div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> </div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)); ;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> </div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span> </div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     {</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>     }</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> </div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>     <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span> <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span></div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span> <span class="comment">     * that means shift the single image planes of each cube</span></div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span> <span class="comment">     * first determine an interpolation kernel</span></div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>     <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)))</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>     {</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span></div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>                            <span class="stringliteral">" or no kernel_typ was given, the default kernel"</span></div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>                            <span class="stringliteral">" is used now!"</span>) ;</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>     }</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>     <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> </div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> </div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> </div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>     {</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>         tmpspace = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>         tmpcubes[i] = cpl_imagelist_new();</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> </div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>         <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>         {</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> </div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> </div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>             t_img=sinfo_new_shift_image(cpl_imagelist_get(cubes[i],z),</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>                                   sub_offsetx[i], sub_offsety[i], kernel);</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>         <span class="keywordflow">if</span> (t_img==NULL)</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>             {</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not shift image plane no %d"</span></div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>                                  <span class="stringliteral">" in cube no %d!"</span>, z, i) ;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>                 cpl_imagelist_delete(mergedCube) ;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>                 cpl_imagelist_delete(mask) ;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>                 cpl_free(kernel) ;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>             }</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>             cpl_imagelist_set(tmpcubes[i],t_img,z);</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>         }</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>     cpl_free(tmpspace);</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>     }</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span> </div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> <span class="comment">     * Build the mask data cube.</span></div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span> <span class="comment">     * The mask is 0 where no data is available, otherwise the integration</span></div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> <span class="comment">       time of one frame, respectively the summed integration</span></div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> <span class="comment">     * times in the overlapping regions are inserted</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     {</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> </div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>         <span class="comment">/* go through the first image plane of the big data cube */</span></div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>         <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ )</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>         {</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>             <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ )</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>             {</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>                 <span class="comment">/* find the position of the present cube and</span></div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> <span class="comment">                   go through the single spectra */</span></div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>                 <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>                      x >= llx[i] && x < llx[i]+ilx )</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>                 {</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>                     posx = x - llx[i] ;</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>                     posy = y - lly[i] ;</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>                     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>                     {</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>               t_img=cpl_imagelist_get(tmpcubes[i],z);</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>                       ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>               m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>                       pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>                                          ptdata[posx+posy*ilx] != 0.)</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>                         {</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>                             pmdata[x+y*mlx] += exptimes[i] ;</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>                         }</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>                     }</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>                 }</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>             }</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>         }</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>     }</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span> </div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> </div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> </div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span> </div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span> </div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     <span class="comment">/* calculate a weighted average using the</span></div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> <span class="comment">       exposure time of the single frames</span></div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span> <span class="comment">       of the overlapping regions of the cubes */</span></div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>     {</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> </div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>         <span class="comment">/* go through the first image plane of the big data cube */</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>         <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ )</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>         {</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> </div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>             <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ )</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>             {</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> </div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>                 <span class="comment">/* find the position of the present cube</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="comment">                   and go through the single spectra */</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>                 <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>                      x >= llx[i] && x < llx[i]+ilx )</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>                 {</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> </div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>                     posx = x - llx[i] ;</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>                     posy = y - lly[i] ;</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>                     <span class="keywordflow">for</span> ( z = 0 ; z < onp ; z++ )</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>                     {</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>               t_img=cpl_imagelist_get(tmpcubes[i],z);</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>                       ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>               m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>                       pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>                       mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> </div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>               o_img=cpl_imagelist_get(mergedCube,z);</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>                       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>                       podata[x+y*olx]=0;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]))</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>                         {</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>                             <span class="keywordflow">if</span> (pmdata[x+y*mlx] != 0.)</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>                             {</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>                 <span class="comment">/* adjust the intensities to</span></div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> <span class="comment">                                   the first reference cube */</span></div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>                                 weight = exptimes[0] / pmdata[x+y*mlx] ;</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>                             }</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>                             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>                             {</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>                                 weight = 0. ;</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>                             }</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>                             podata[x+y*olx] +=</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>                                weight*ptdata[posx+posy*ilx] ;</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>                         }</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>                     }</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>                 }</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>             }</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>         }</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>     }</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span> </div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> </div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> </div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> </div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>     <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>     cpl_free(kernel) ; <span class="comment">/* originated by eclise-malloc */</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>     {</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>         cpl_imagelist_delete (tmpcubes[i]) ;</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>     }</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> </div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>     cpl_free(tmpcubes); ;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     cpl_free(llx); ;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     cpl_free(lly) ;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>     cpl_free(sub_offsetx) ;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>     cpl_free(sub_offsety) ;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> </div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>     <span class="keywordflow">return</span> mask ;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> }</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span> </div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> </div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> </div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> </div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> </div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> </div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> </div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> sinfo_build_mask_cube(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>               <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>                       cpl_imagelist** cubes,</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>                       cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>                       cpl_imagelist* mask)</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span> {</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span> </div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> </div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> </div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>   <span class="keywordflow">for</span> ( z = z_min, m=0 ; z < z_max ; z++, m++ ) {</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> </div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>     <span class="comment">// go through the first image plane of the big data cube</span></div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>           i_img=cpl_imagelist_get(cubes[i],0);</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>           ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>           ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span> </div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>       <span class="comment">// find the position of the present cube and go</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>           <span class="comment">// through the single spectra */</span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>                x >= llx[i] && x < llx[i]+ilx )</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>         {</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>           posx = x - llx[i] ;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>           posy = y - lly[i] ;</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span> </div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> </div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>               t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>               ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>               m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>               pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>           mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span> </div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>               <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>                          ptdata[posx+posy*ilx] != 0.)</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>         {</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>           pmdata[x+y*mlx] += (float)exptimes[i] ;</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isnan(ptdata[posx+posy*ilx])) {</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ptdata %d, %d, %d is NAN\t"</span>,x,y,z);</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>           } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ptdata[posx+posy*ilx] == 0.) {</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ptdata %d, %d, %d is 0\t"</span>,x,y,z);</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>           }</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> </div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"point %d, %d, %d outside range\n"</span>,x,y,z);</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>       }</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>         }</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>       }</div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>     }</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>   }</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> </div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> }</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> </div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span> </div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> </div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> </div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span> sinfo_build_mask_cube_thomas(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> olx,</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> oly,</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>               <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>                       cpl_imagelist** cubes,</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>                       cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>                       cpl_imagelist* mask)</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> {</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>   <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span> </div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span> </div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>     i_img=cpl_imagelist_get(cubes[i],0);</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>     inp=cpl_imagelist_get_size(cubes[i]);</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span> </div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>     <span class="comment">//go through the first image plane of the big data cube</span></div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ){</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ){</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>     <span class="comment">// find the position of the present cube and go</span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>     <span class="comment">// through the single spectra</span></div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>         <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>              x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>       posx = x - llx[i] ;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>           posy = y - lly[i] ;</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> </div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>       <span class="keywordflow">for</span> ( z = z_min,m=0 ; z < z_max ; z++,m++ ) {</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>         t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>             ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>             m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>             pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>             mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> </div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>             <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>         ptdata[posx+posy*ilx] != 0.) {</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>           pmdata[x+y*mlx] += (float)exptimes[i]  ;</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>         }</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>       }</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>     }</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>       }</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>     }</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>   }</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> }</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> </div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> </div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> </div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> </div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> sinfo_new_combine_jittered_cubes_range ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>                                  cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>                                  cpl_imagelist  * mask,</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>                                  <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>                                  <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>                                  <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>                                  <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>                                  <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z_min, <span class="keyword">const</span> <span class="keywordtype">int</span> z_max )</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> {</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>   <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>   <span class="keywordtype">int</span> llx0, lly0 ;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>   cpl_imagelist ** tmpcubes=NULL ;</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>   <span class="keywordtype">int</span>* llx=NULL ;</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>   <span class="keywordtype">int</span>* lly=NULL ;</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>   <span class="keywordtype">float</span>* sub_offsetx=NULL ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>   <span class="keywordtype">float</span>* sub_offsety=NULL ;</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> </div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> </div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> </div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> </div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>   <span class="keywordflow">if</span>(sinfo_check_input(cubes,n_cubes,cumoffsetx,cumoffsety,exptimes) == -1) {</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>   }</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> </div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>     o_img=cpl_imagelist_get(mergedCube,z_min);</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>     olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>     oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>     i_img=cpl_imagelist_get(cubes[0],0);</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>     ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>     ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>     mlx=olx;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>     mly=oly;</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> </div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> </div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="comment">     * center the cubes within the allocated big cube</span></div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span></div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span></div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>     <span class="comment">/* position of first reference frame, centered in big cube */</span></div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>     llx0 = olx/2 - ilx/2 ;</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>     lly0 = oly/2 - ily/2 ;</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> </div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="comment">     * go through the frame list and determine the lower left edge position</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span></div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> <span class="comment">     * determined.</span></div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> </div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> </div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>     {</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>     }</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> </div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>     tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>     <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span></div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> <span class="comment">     * that means shift the single image planes of each cube</span></div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> <span class="comment">     * first determine an interpolation kernel</span></div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>     <span class="keywordflow">if</span>(sinfo_shift_cubes(tmpcubes,kernel_type,n_cubes,cubes,z_min, z_max,</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>              sub_offsetx,sub_offsety,mlx,mly,mask) == -1) {</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>     }</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> </div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> </div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>     <span class="comment">/*-----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span> <span class="comment">     * Build the mask data cube.</span></div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> <span class="comment">     * The mask is 0 where no data is available, otherwise the</span></div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> <span class="comment">       integration time of</span></div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span> <span class="comment">     * one frame, respectively the summed integration</span></div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> <span class="comment">     * times in the overlapping regions are inserted</span></div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>     <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>     sinfo_build_mask_cube(z_min,z_max,olx,oly,n_cubes,llx,lly,exptimes,</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>                           cubes,tmpcubes,mask);</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> </div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>     <span class="comment">/* calculate a weighted average using the exposure time of the</span></div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> <span class="comment">       single frames of the overlapping regions of the cubes */</span></div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> </div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>     sinfo_compute_weight_average(z_min,z_max,ilx,ily,n_cubes,mergedCube,mask,</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>                                  tmpcubes,exptimes,llx,lly);</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span> </div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span></div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>      <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span></div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> </div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>     {</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>         cpl_imagelist_delete (tmpcubes[i]) ;</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>     }</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> </div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span> </div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>     cpl_free(tmpcubes) ;</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>     cpl_free(llx) ;</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>     cpl_free(lly) ;</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>     cpl_free(sub_offsetx) ;</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>     cpl_free(sub_offsety) ;</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> </div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>      <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> }</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> </div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span> sinfo_check_input(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>                           <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>                           <span class="keywordtype">float</span>* cumoffsetx,</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>                           <span class="keywordtype">float</span>* cumoffsety,</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>               <span class="keywordtype">double</span>* exptimes)</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span> {</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>    <span class="keywordflow">if</span> ( cubes == NULL )</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>     {</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>     }</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>     <span class="keywordflow">if</span> ( n_cubes <= 0 )</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>     {</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>     }</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>     {</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>     }</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>     <span class="keywordflow">if</span> ( exptimes == NULL )</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>     {</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no exposure time array given!"</span>) ;</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>     }</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span> </div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span> }</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span> </div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> sinfo_compute_weight_average(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>                              <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>                              cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>                              cpl_imagelist* mask,</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>                              cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>                  <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>                              <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>                              <span class="keywordtype">int</span>* lly)</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> {</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> </div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span> </div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> </div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span> </div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>   <span class="keywordtype">double</span> weight=0;</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span> </div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> </div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span> </div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>   o_img=cpl_imagelist_get(mergedCube,z_min);</div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>   olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>   oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>   mlx=olx;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>   mly=oly;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span> </div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>   <span class="comment">/* calculate a weighted average using the exposure time of the</span></div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span> <span class="comment">     single frames of the overlapping regions of the cubes */</span></div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>   <span class="keywordflow">for</span> ( z = z_min, m = 0 ; z < z_max ; z++, m++ ) {</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>     o_img=cpl_imagelist_get(mergedCube,z);</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>     podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>     m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>     pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>     mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span> </div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>     <span class="comment">/* go through the first image plane of the big data cube */</span></div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span> </div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>        <span class="comment">/* find the position of the present cube and</span></div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="comment">          go through the single spectra */</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> </div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span> </div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>                x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>         posx = x - llx[i] ;</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>             posy = y - lly[i] ;</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> </div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>             t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>             ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>             <span class="comment">/* To prevent black regions in peculiar batterfly cases</span></div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span> <span class="comment">              podata[x+y*olx]=0;</span></div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx])) {</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>           <span class="keywordflow">if</span> (pmdata[x+y*mlx] != 0.) {</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>                 <span class="comment">/* adjust the intensities to the</span></div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> <span class="comment">                   first reference cube */</span></div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>         weight = exptimes[0] / pmdata[x+y*mlx] ;</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>           } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>         weight = 0. ;</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>           }</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>               podata[x+y*olx] += weight*ptdata[posx+posy*ilx] ;</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span> </div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>         }</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>       }</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>     }</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>       }</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>     }</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>   }</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span> }</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> </div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> </div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span> sinfo_shift_cubes(cpl_imagelist** tmpcubes,</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>                   <span class="keywordtype">char</span>* kernel_type,</div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>                   cpl_imagelist** cubes,</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>                   <span class="keywordtype">float</span>* sub_offsetx,</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>                   <span class="keywordtype">float</span>* sub_offsety,</div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> mlx,</div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> mly,</div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>                   cpl_imagelist* mask)</div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> {</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> </div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>    <span class="keywordtype">double</span> * kernel ;</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>    cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>    <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>    <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>    <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>    pixelvalue * tmpspace;</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>    <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>    cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>    cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>    <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span> </div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>     <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span></div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> <span class="comment">     * that means shift the single image planes of each cube</span></div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span> <span class="comment">     * first determine an interpolation kernel</span></div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span> </div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>    <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)) )</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>     {</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span></div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>                            <span class="stringliteral">"or no kernel_typ was given, the default kernel"</span></div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>                            <span class="stringliteral">"is used now!"</span>) ;</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>     }</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>     <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span> </div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>     {</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span> </div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>       i_img=cpl_imagelist_get(cubes[i],0);</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>       ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>       ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>       inp=cpl_imagelist_get_size(cubes[i]);</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>       tmpspace = cpl_calloc(ilx, ily*<span class="keyword">sizeof</span>(pixelvalue)) ;</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>       tmpcubes[i]=cpl_imagelist_new();</div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> </div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>         <span class="keywordflow">for</span> ( z = z_min, m=0 ; z < z_max ; z++, m++ )</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>         {</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>               t_img=sinfo_new_shift_image(cpl_imagelist_get(cubes[i],z),</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>                                           sub_offsetx[i],</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>                                           sub_offsety[i],</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>                                           kernel);</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span> </div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>         <span class="keywordflow">if</span> (t_img==NULL)</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>             {</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not shift image plane no %d "</span></div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>                                 <span class="stringliteral">"in cube no %d!"</span>, z, i) ;</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>                 cpl_free(kernel) ;</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>             }</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span> </div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>             cpl_imagelist_set(tmpcubes[i],t_img,m);</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>             m_img=cpl_image_new(mlx,mly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>             cpl_imagelist_set(mask,m_img,z);</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>         }</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span> </div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>      cpl_free(tmpspace);</div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> </div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>     }</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>     <span class="keywordflow">if</span>(kernel != NULL) cpl_free(kernel) ;</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span> </div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> </div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span> }</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span> </div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> </div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> <span class="comment">/* Temporally commented out as not yet used</span></div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span> <span class="comment">sinfo_ks_clip(</span></div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span> <span class="comment">          const int n_cubes,</span></div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> <span class="comment">              const int nc,</span></div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> <span class="comment">          const int ilx,</span></div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span> <span class="comment">          const int ily,</span></div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> <span class="comment">          const double kappa,</span></div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> <span class="comment">          int* llx,</span></div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span> <span class="comment">          int* lly,</span></div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span> <span class="comment">          double* exptimes,</span></div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span> <span class="comment">          cpl_imagelist** tmpcubes,</span></div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> <span class="comment">              float* podata,</span></div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span> <span class="comment">              float* pmdata,</span></div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span> <span class="comment">          const int x,</span></div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span> <span class="comment">          const int y,</span></div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span> <span class="comment">          const int m,</span></div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span> <span class="comment">          const int mlx,</span></div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span> <span class="comment">          const int olx</span></div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span> <span class="comment">  )</span></div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span> <span class="comment">{</span></div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span> <span class="comment"></span></div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span> <span class="comment"></span></div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span> <span class="comment">  int posx=0;</span></div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span> <span class="comment">  int posy=0;</span></div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span> <span class="comment">  int i=0;</span></div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span> <span class="comment">  int nclip=0;</span></div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span> <span class="comment">  int ks=0;</span></div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span> <span class="comment"></span></div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span> <span class="comment">  float sig=0;</span></div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span> <span class="comment">  float med=0;</span></div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span> <span class="comment">  float ovr=0;</span></div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> <span class="comment">  float avg=0;</span></div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span> <span class="comment"></span></div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> <span class="comment">  float* ptdata=NULL;</span></div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span> <span class="comment">  float* pvdata=NULL;</span></div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> <span class="comment"></span></div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> <span class="comment">  cpl_image* t_img=NULL;</span></div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span> <span class="comment">  float  msk_sum=0;</span></div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span> <span class="comment">  float  val_msk_sum=0;</span></div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span> <span class="comment">  cpl_image* v_img=NULL;</span></div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> <span class="comment"></span></div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span> <span class="comment">  cpl_vector* val=NULL;</span></div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span> <span class="comment">  cpl_vector* msk=NULL;</span></div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span> <span class="comment"></span></div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span> <span class="comment">  msk=cpl_vector_new(n_cubes);</span></div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> <span class="comment">  for (i=0;i<n_cubes;i++) {</span></div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> <span class="comment">    cpl_vector_set(msk,i,1);</span></div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span> <span class="comment"></span></div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> <span class="comment">  // k-s clipping</span></div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> <span class="comment">  nclip=0;</span></div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span> <span class="comment"></span></div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> <span class="comment">  for (ks=0;ks<nc;ks++) {</span></div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> <span class="comment"></span></div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> <span class="comment">    sig=0;</span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> <span class="comment">    med=0;</span></div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> <span class="comment">    ovr=0;</span></div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> <span class="comment">    if(nc-nclip >0) {</span></div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> <span class="comment">      val=cpl_vector_new(nc-nclip);</span></div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span> <span class="comment"></span></div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span> <span class="comment">    // fill val</span></div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span> <span class="comment">    for ( i = 0 ; i < n_cubes ; i++ ) {</span></div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span> <span class="comment">      t_img=cpl_imagelist_get(tmpcubes[i],m);</span></div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span> <span class="comment">      ptdata=cpl_image_get_data_float(t_img);</span></div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> <span class="comment">      if ( y >= lly[i] && y < lly[i]+ily &&</span></div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span> <span class="comment">       x >= llx[i] && x < llx[i]+ilx ) {</span></div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span> <span class="comment">    posx = x - llx[i] ;</span></div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> <span class="comment">    posy = y - lly[i] ;</span></div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span> <span class="comment">    if (!isnan(ptdata[posx+posy*ilx]) &&</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span> <span class="comment">        ptdata[posx+posy*ilx] != 0. &&</span></div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span> <span class="comment">        (cpl_vector_get(msk,i) != 0)) {</span></div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> <span class="comment">      cpl_vector_set(val,ovr,(double)ptdata[posx+posy*ilx]);</span></div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> <span class="comment">      ovr++;</span></div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> <span class="comment"></span></div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="comment">    // get avg, med, sig</span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> <span class="comment">    if(ovr>0) {</span></div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span> <span class="comment">      avg=cpl_vector_get_mean(val);</span></div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span> <span class="comment">      med=cpl_vector_get_median_const(val);</span></div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span> <span class="comment">      if(ovr>1) {</span></div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span> <span class="comment">    sig=cpl_vector_get_stdev(val);</span></div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span> <span class="comment">      } else {</span></div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span> <span class="comment">    sig=0;</span></div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> <span class="comment">      cpl_vector_delete(val);</span></div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span> <span class="comment"></span></div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span> <span class="comment">    for ( i = 0 ; i < n_cubes ; i++ ) {</span></div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> <span class="comment">      t_img=cpl_imagelist_get(tmpcubes[i],m);</span></div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span> <span class="comment">      ptdata=cpl_image_get_data_float(t_img);</span></div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span> <span class="comment">      // Do k-s clipping at each pixel</span></div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span> <span class="comment">      if ( y >= lly[i] && y < lly[i]+ily &&</span></div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> <span class="comment">       x >= llx[i] && x < llx[i]+ilx ) {</span></div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span> <span class="comment">    posx = x - llx[i] ;</span></div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span> <span class="comment">    posy = y - lly[i] ;</span></div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span> <span class="comment">    //sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span></div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span> <span class="comment">    //sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span></div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span> <span class="comment">    if (!isnan(ptdata[posx+posy*ilx]) &&</span></div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span> <span class="comment">        ptdata[posx+posy*ilx] != 0. &&</span></div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span> <span class="comment">        (cpl_vector_get(msk,i) != 0)) {</span></div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span> <span class="comment">      if(abs((ptdata[posx+posy*ilx]-med))> kappa*sig) {</span></div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> <span class="comment">        ptdata[posx+posy*ilx]=0;</span></div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span> <span class="comment"></span></div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span> <span class="comment">        pmdata[x+y*mlx] -= exptimes[i]  ;</span></div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> <span class="comment"></span></div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span> <span class="comment">        cpl_vector_set(msk,i,0);</span></div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> <span class="comment">        nclip++;</span></div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> <span class="comment"></span></div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span> <span class="comment"></span></div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span> <span class="comment">  msk_sum=0;</span></div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span> <span class="comment">  val_msk_sum=0;</span></div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span> <span class="comment">  for ( i = 0 ; i < n_cubes ; i++ ) {</span></div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span> <span class="comment">    v_img=cpl_imagelist_get(tmpcubes[i],m);</span></div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> <span class="comment">    pvdata=cpl_image_get_data_float(v_img);</span></div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span> <span class="comment">    // computes sky at each point</span></div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span> <span class="comment">    if ( y >= lly[i] && y < lly[i]+ily &&</span></div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span> <span class="comment">     x >= llx[i] && x < llx[i]+ilx ) {</span></div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span> <span class="comment">      posx = x - llx[i] ;</span></div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span> <span class="comment">      posy = y - lly[i] ;</span></div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> <span class="comment">      if (!isnan(pvdata[posx+posy*ilx]) &&</span></div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span> <span class="comment">      pvdata[posx+posy*ilx] != 0. &&</span></div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span> <span class="comment">      (cpl_vector_get(msk,i) != 0)) {</span></div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> <span class="comment"></span></div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span> <span class="comment">    msk_sum+= pmdata[x+y*mlx];</span></div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span> <span class="comment"></span></div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span> <span class="comment">    val_msk_sum+=pvdata[posx+posy*ilx]*</span></div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span> <span class="comment">      pmdata[x+y*mlx];</span></div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span> <span class="comment"></span></div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span> <span class="comment"></span></div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> <span class="comment">  podata[x+y*olx]=val_msk_sum/msk_sum;</span></div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span> <span class="comment">  cpl_vector_delete(msk);</span></div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span> <span class="comment"></span></div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span> <span class="comment">  return 0;</span></div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span> <span class="comment"></span></div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span> <span class="comment">}</span></div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span> <span class="comment"></span></div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> </div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span> sinfo_new_combine_jittered_cubes_thomas_range(cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>                     cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>                     cpl_imagelist  * mask,</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>                     <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>                     <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>                     <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>                     <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>                     <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>                                     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa )</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> {</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> VERY_BIG_INT = 268431360;</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>   <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>   <span class="keywordtype">int</span> llx0, lly0 ;</div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>   <span class="keywordtype">int</span>* llx=NULL;</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>   <span class="keywordtype">int</span>* lly=NULL ;</div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>   <span class="keywordtype">float</span>* sub_offsetx=NULL ;</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>   <span class="keywordtype">float</span>* sub_offsety=NULL ;</div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>   cpl_imagelist ** tmpcubes=NULL ;</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> z_siz=z_max-z_min;</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>   <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>   <span class="keywordtype">int</span> min_lx = VERY_BIG_INT;</div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>   <span class="keywordtype">int</span> min_ly = VERY_BIG_INT;</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span> </div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span> </div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>   <span class="keywordflow">if</span>(sinfo_check_input(cubes,n_cubes,cumoffsetx,cumoffsety,exptimes) == -1) {</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>   }</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span> </div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>   <span class="keywordflow">if</span> (z_siz <= 0 ){</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"z_max <= z_min given!"</span>) ;</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>   }</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> </div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>   i_img=cpl_imagelist_get(cubes[0],0);</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>   o_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>   ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>   ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>   olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>   oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>   mlx=olx;</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>   mly=oly;</div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span> <span class="comment">//  sinfo_msg_warning(" cube size [%d:%d] merged cube size[%d:%d]" , ilx, ily, olx, oly);</span></div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>   <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span> <span class="comment">   * center the cubes within the allocated big cube</span></div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="comment">   * that means define the (0,0) positions of the cubes in the image planes</span></div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> <span class="comment">   * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span></div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>   <span class="comment">/* position of first reference frame, centered in big cube */</span></div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>   llx0 = (1.0 * olx- 1.0 * ilx)/2.0 ;</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>   lly0 = (1.0 * oly - 1.0 * ily)/2.0 ;</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span> <span class="comment">//  sinfo_msg_warning(" zero point [%d:%d]" , llx0, lly0);</span></div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>   <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span> <span class="comment">   * go through the frame list and determine the lower left edge position</span></div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span> <span class="comment">   * of the shifted cubes. Additionnally, the sub-pixel offsets are</span></div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span> <span class="comment">   * determined.</span></div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span> </div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>   llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>   lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>   sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>   sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span> </div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>     llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> </div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>     sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>     lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;</div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>     sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;</div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span> <span class="comment">/*    sinfo_msg_warning("suboff[%d]= %f %f  ll[%d:%d] cumoffset[%f:%f]" ,</span></div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span> <span class="comment">            i,sub_offsetx[i],sub_offsety[i], llx[i], lly[i],</span></div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span> <span class="comment">            cumoffsetx[i], cumoffsety[i]);*/</span></div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>     <span class="keywordflow">if</span> (llx[i] < min_lx)</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>     {</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>         min_lx = llx[i];</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>     }</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>     <span class="keywordflow">if</span> (lly[i] < min_ly)</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>     {</div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>         min_ly = lly[i];</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>     }</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>   }</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>   <span class="comment">/***********---------</span></div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span> <span class="comment">   * "normalize" the shift - minimum should be 0</span></div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> <span class="comment">   **********************************************/</span></div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>   <span class="keywordflow">if</span> (min_lx != 0)</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>   {</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>     <span class="keywordflow">for</span> (i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>     {</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>         llx[i] = llx[i] - min_lx;</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>     }</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>   }</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>   <span class="keywordflow">if</span> (min_ly != 0)</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>   {</div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>     <span class="keywordflow">for</span> (i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>     {</div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>         lly[i] = lly[i] - min_ly;</div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>     }</div>
+<div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>   }</div>
+<div class="line"><a name="l03219"></a><span class="lineno"> 3219</span> </div>
+<div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>   <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l03221"></a><span class="lineno"> 3221</span> <span class="comment">   * shift the cubes according to the computed sub-pixel offsets</span></div>
+<div class="line"><a name="l03222"></a><span class="lineno"> 3222</span> <span class="comment">   * that means shift the single image planes of each cube</span></div>
+<div class="line"><a name="l03223"></a><span class="lineno"> 3223</span> <span class="comment">   * first determine an interpolation kernel</span></div>
+<div class="line"><a name="l03224"></a><span class="lineno"> 3224</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l03225"></a><span class="lineno"> 3225</span> </div>
+<div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>   tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;</div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span> </div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>   <span class="keywordflow">if</span>(sinfo_shift_cubes(tmpcubes,kernel_type,n_cubes,cubes,z_min, z_max,</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>                sub_offsetx,sub_offsety,mlx,mly,mask) == -1) {</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span> </div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>   }</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span> </div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span> </div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>   <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span> <span class="comment">   * Build the mask data cube.</span></div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span> <span class="comment">   * The mask is 0 where no data is available, otherwise the integration</span></div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span> <span class="comment">   * time of one frame, respectively the summed integration</span></div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span> <span class="comment">   * times in the overlapping regions are inserted</span></div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>   <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span> </div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> </div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>   o_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>   olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>   oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>   onp=cpl_imagelist_get_size(mergedCube);</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> </div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>   <span class="keywordflow">if</span>(-1 == sinfo_build_mask_cube_thomas(z_min,z_max,olx,oly,n_cubes,llx,lly,</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>                     exptimes,cubes,tmpcubes,mask) ) {</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>   }</div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> <span class="comment">  check_nomsg(sinfo_coadd_with_ks_clip_optimized(z_min,z_max,n_cubes,</span></div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span> <span class="comment">                                           kappa,llx,lly,</span></div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> <span class="comment">                                           exptimes,mask,mergedCube,tmpcubes));</span></div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>   check_nomsg(sinfo_coadd_with_ks_clip2(z_min,z_max,ilx,ily,n_cubes,kappa,llx,lly,</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>                                         exptimes,mask,mergedCube,tmpcubes));</div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> </div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>   <span class="comment">/* convert the "free space" in the cube to blank pixels */</span></div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>   <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedCube) ; */</span></div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>   <span class="comment">/* convert_0_to_ZERO_for_cubes(mergedSky) ; */</span></div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>   <span class="comment">//cpl_free(kernel) ; /* originated by eclise-malloc */</span></div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> </div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>   cleanup:</div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> </div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>   <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>     cpl_imagelist_delete (tmpcubes[i]) ;</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>   }</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span> </div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>   cpl_free(tmpcubes);</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>   cpl_free(llx);</div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>   cpl_free(lly) ;</div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>   cpl_free(sub_offsetx) ;</div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>   cpl_free(sub_offsety) ;</div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>   sinfo_print_rec_status(0);</div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span> </div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span> }</div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span> </div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span> cpl_imagelist *</div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span> sinfo_new_interpol_cube_simple( cpl_imagelist * cube,</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>                       cpl_imagelist * badcube,</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>                       <span class="keywordtype">int</span>       maxdist )</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> {</div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>   cpl_imagelist * intercube ;</div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>   <span class="keywordtype">float</span>*     goodNeighbors=NULL ;</div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>   <span class="keywordtype">int</span> z, row, col ;</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>   <span class="keywordtype">int</span> nx, ny, nz ;</div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>   <span class="keywordtype">int</span> llx, lly, llz ;</div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>   <span class="keywordtype">int</span> zi, coli, rowi ;</div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>   <span class="keywordtype">int</span> n ;</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span> </div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span> </div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> </div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> </div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>   <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>   <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>   <span class="keywordtype">int</span> blx=0;</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>   <span class="keywordtype">int</span> bly=0;</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span> </div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>   <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span> </div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span> </div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>   <span class="keywordtype">float</span>* pbdata=NULL;</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>   <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>   <span class="keywordtype">float</span>* pbzidata=NULL;</div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>   <span class="keywordtype">float</span>* pczidata=NULL;</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span> </div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>   cpl_image* c_img=NULL;</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>   cpl_image* b_img=NULL;</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span> </div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>   cpl_image* bzi_img=NULL;</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>   cpl_image* czi_img=NULL;</div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span> </div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span> </div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span> </div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>     <span class="keywordflow">if</span> ( cube == NULL || badcube == NULL )</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>     {</div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no cube given!"</span>) ;</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>     }</div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>     <span class="keywordflow">if</span> ( maxdist < 1 )</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>     {</div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong maxrad given!"</span>) ;</div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>     }</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>     intercube = cpl_imagelist_duplicate(cube) ;</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span> </div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>     goodNeighbors=cpl_calloc((2*maxdist+1)*(2*maxdist+1)*(2*maxdist+1) -1,</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>                              <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span> </div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>     cnp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>     <span class="keywordflow">for</span> ( z = 0 ; z < cnp ; z++ )</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>     {</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>       b_img=cpl_imagelist_get(badcube,z);</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>       i_img=cpl_imagelist_get(intercube,z);</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>       pbdata=cpl_image_get_data_float(b_img);</div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>       blx=cpl_image_get_size_x(b_img);</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>       bly=cpl_image_get_size_y(b_img);</div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span> </div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>       c_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>       clx=cpl_image_get_size_x(c_img);</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>       cly=cpl_image_get_size_y(c_img);</div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span> </div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>         <span class="keywordflow">for</span> ( row = 0 ; row < cly ; row++ )</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>         {</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>             <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>             {</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>                 <span class="keywordflow">if</span> ( pbdata[col+row*clx] == 0 )</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>                 {</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>                     <span class="comment">/* determine the lower left sinfo_edge of the cube */</span></div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>                     llx = col - maxdist ;</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>                     nx = 2*maxdist +1 ;</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>                     <span class="keywordflow">if</span> (llx < 0)</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>                     {</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>                        nx += llx ;</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>                        llx = 0 ;</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>                     }</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>                     <span class="keywordflow">if</span> ( llx + nx > clx )</div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>                     {</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>                         nx -= (llx + nx - clx) ;</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>                     }</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> </div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>                     lly = row - maxdist ;</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>                     ny = 2*maxdist +1 ;</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>                     <span class="keywordflow">if</span> (lly < 0)</div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>                     {</div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>                        ny += lly ;</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>                        lly = 0 ;</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>                     }</div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>                     <span class="keywordflow">if</span> ( lly + ny > cly )</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>                     {</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>                         ny -= (lly + ny - cly) ;</div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>                     }</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> </div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>                     llz = z - maxdist ;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>                     nz = 2*maxdist +1 ;</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>                     <span class="keywordflow">if</span> (llz < 0)</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>                     {</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>                        nz += llz ;</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>                        llz = 0 ;</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>                     }</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>                     <span class="keywordflow">if</span> ( llz + nz > cnp )</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>                     {</div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>                         nz -= (llz + nz - cnp) ;</div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>                     }</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>                     n = 0 ;</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>                     <span class="keywordflow">for</span> ( zi = llz ; zi < llz+nz ; zi++ )</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>                     {</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>               bzi_img=cpl_imagelist_get(badcube,zi);</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>               czi_img=cpl_imagelist_get(cube,zi);</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>                       pbzidata=cpl_image_get_data_float(bzi_img);</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>                       pczidata=cpl_image_get_data_float(czi_img);</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span> </div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>                         <span class="keywordflow">for</span> ( rowi = lly ; rowi < lly+ny ; rowi++ )</div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>                         {</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>                             <span class="keywordflow">for</span> ( coli = llx ; coli < llx+nx ; coli++ )</div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>                             {</div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>                                 <span class="keywordflow">if</span> ( pbzidata[coli+rowi*blx] == 1 )</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>                                 {</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>                   goodNeighbors[n] = pczidata[coli+rowi*clx] ;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>                   n++ ;</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>                                 }</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>                             }</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>                         }</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>                     }</div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>                     <span class="keywordflow">if</span> ( n > 0 )</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>                     {</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>                         pidata[col+row*clx]=sinfo_new_median(goodNeighbors,n);</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>                         pbdata[col+row*clx]=1 ;</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>                     }</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>                     {</div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>                         continue ;</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>                     }</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>                 }</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>             }</div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>         }</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>     }</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>     cpl_free(goodNeighbors) ;</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>     <span class="keywordflow">return</span> intercube ;</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span> }</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span> </div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span> </div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span> </div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> </div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span> cpl_imagelist *</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> sinfo_new_combine_cubes ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>                          cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>                          <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>                          <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>                          <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>                          <span class="keywordtype">float</span>      factor,</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>                          <span class="keywordtype">char</span>     * kernel_type )</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span> {</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>   <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>   <span class="keywordtype">int</span> llx0=0;</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>   <span class="keywordtype">int</span> lly0=0;</div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>   cpl_imagelist * mask=NULL ;</div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>   <span class="keywordtype">double</span> * kernel=NULL ;</div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>   cpl_image * shiftedImage=NULL ;</div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>   <span class="keywordtype">int</span> ns=0;</div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>   <span class="keywordtype">double</span> sum=0;</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>   <span class="keywordtype">double</span> sum2=0;</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>   <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>   <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> </div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>   cpl_imagelist ** tmpcubes=NULL ;</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span> </div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>   <span class="keywordtype">int</span>* llx=NULL ;</div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>   <span class="keywordtype">int</span>* lly=NULL ;</div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> </div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>   <span class="keywordtype">float</span>* sub_offsetx=NULL ;</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>   <span class="keywordtype">float</span>* sub_offsety=NULL ;</div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>   <span class="keywordtype">float</span>* cubedata=NULL ;</div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span> </div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>   <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>   <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>   <span class="keywordtype">int</span> mnp=0;</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>   <span class="keywordtype">int</span> cnp=0;</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> </div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> </div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span> </div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>   cpl_image* tmp_img=NULL;</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>   cpl_image* c_img=NULL;</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span> </div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span> </div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span> </div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>   <span class="keywordflow">if</span> ( cubes == NULL )</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>     {</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>     }</div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span> </div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span> </div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>   <span class="keywordflow">if</span> ( mergedCube == NULL )</div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>     {</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no out cube  given!"</span>) ;</div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>     }</div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span> </div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span> </div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>     <span class="keywordflow">if</span> ( n_cubes <= 0 )</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>     {</div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>     }</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>     <span class="keywordflow">if</span> ( cumoffsetx == NULL || cumoffsety == NULL )</div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>     {</div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cumoffsetx/y given!"</span>) ;</div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>     }</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span> </div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>   <span class="keywordflow">if</span> ( factor <= 0. )</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>     {</div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong factor given!"</span>) ;</div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>     }</div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span> </div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>   m_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>   mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>   mly=cpl_image_get_size_y(m_img);</div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>   cnp=cpl_imagelist_get_size(cubes[0]);</div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>   c_img=cpl_imagelist_get(cubes[0],0);</div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>   clx=cpl_image_get_size_x(c_img);</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>   cly=cpl_image_get_size_y(c_img);</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span> </div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span> </div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>   tmpcubes=(cpl_imagelist**)cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(cpl_imagelist*)) ;</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span> </div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>         <span class="comment">/* allocation for a cube structure without the image planes  */</span></div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span> <span class="comment">   for ( i = 0 ; i < n_cubes ; i++ )</span></div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span> <span class="comment">         tmpcubes[i] = (cpl_imagelist*)cpl_malloc(sizeof(cpl_imagelist)) ;</span></div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span> <span class="comment">        tmpcubes[i]->plane = (cpl_image**)cpl_calloc(cubes[0]->np ,</span></div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span> <span class="comment">                              sizeof(cpl_image*)) ;</span></div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> <span class="comment"></span></div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> <span class="comment">        tmpcubes[i]->lx = cubes[0]->lx ;</span></div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span> <span class="comment">        tmpcubes[i]->ly = cubes[0]->ly ;</span></div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span> <span class="comment">        tmpcubes[i]->np = cubes[0]->np ;</span></div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span> <span class="comment">        tmpcubes[i]->nbpix = (ulong32)cubes[0]->lx *</span></div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span> <span class="comment">                             (ulong32)cubes[0]->ly *</span></div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span> <span class="comment">                             (ulong32)cubes[0]->np ;</span></div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span> <span class="comment">        tmpcubes[i]->history = (char*)NULL ;</span></div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span> <span class="comment">        tmpcubes[i]->n_comments = 0 ;</span></div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span> <span class="comment">        tmpcubes[i]->orig_ptype = BPP_DEFAULT ;</span></div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span> <span class="comment">        tmpcubes[i]->filename = NULL ;</span></div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>     tmpcubes[0]=cpl_imagelist_duplicate(cubes[0]);</div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span> </div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span> <span class="comment">     * center the cubes within the allocated big cube</span></div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span> <span class="comment">     * that means define the (0,0) positions of the cubes in the image planes</span></div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span> <span class="comment">     * to sub-pixel accuracy by using cumoffsetx,y and the reference cube</span></div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>     <span class="comment">/* position of first reference frame, centered in big cube */</span></div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>     llx0 = mlx/2 - clx/2 ;</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>     lly0 = mly/2 - cly/2 ;</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span> </div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>     <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span> <span class="comment">     * go through the frame list and determine the lower left edge position</span></div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span> <span class="comment">     * of the shifted cubes. Additionnally, the sub-pixel offsets are</span></div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span> <span class="comment">     * determined.</span></div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span> </div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span> </div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>     llx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>     lly=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>     sub_offsetx=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>     sub_offsety=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span> </div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>     {</div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>         llx[i] = llx0 - sinfo_new_nint(cumoffsetx[i]) ;</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>         sub_offsetx[i] = (float)sinfo_new_nint(cumoffsetx[i]) - cumoffsetx[i] ;</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>         lly[i] = lly0 - sinfo_new_nint(cumoffsety[i]) ;</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>         sub_offsety[i] = (float)sinfo_new_nint(cumoffsety[i]) - cumoffsety[i] ;</div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>     }</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span> </div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>     <span class="comment">/* -------------------------------------------------------------</span></div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> <span class="comment">     * shift the cubes according to the computed sub-pixel offsets</span></div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span> <span class="comment">     * that means shift the single image planes of each cube</span></div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span> <span class="comment">     * first determine an interpolation kernel</span></div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>     <span class="keywordflow">if</span> ( NULL == (kernel = sinfo_generate_interpolation_kernel(kernel_type)) )</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>     {</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"could not generate desired interpolation kernel"</span></div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>                            <span class="stringliteral">" or no kernel_typ was given, the default kernel"</span></div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>                            <span class="stringliteral">" is used now!"</span>) ;</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>     }</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>     <span class="comment">/* go through the frame list */</span></div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>     {</div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>       <span class="comment">/* go through the image planes and shift each plane by a</span></div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span> <span class="comment">         sub-pixel value */</span></div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>       <span class="keywordflow">for</span> ( z = 0 ; z < cnp ; z++ )</div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>         {</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>       tmp_img=cpl_imagelist_get(cubes[i],z);</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>       <span class="keywordflow">if</span> ( NULL == (shiftedImage = sinfo_new_shift_image(tmp_img,</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>                                sub_offsetx[i],</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>                                sub_offsety[i],</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>                                kernel ) ) )</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>             {</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not shift image plane no %d "</span></div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>                                <span class="stringliteral">"in cube no %d!"</span>, z, i) ;</div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>           cpl_imagelist_delete(mergedCube) ;</div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>           cpl_imagelist_delete(mask) ;</div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>           cpl_free(kernel) ;</div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>           <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>             }</div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>       cpl_imagelist_set(tmpcubes[i],shiftedImage,z);</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>         }</div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>     }</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span> </div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>     cubedata=cpl_calloc(n_cubes,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span> </div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>     <span class="keywordflow">for</span> ( y = 0 ; y < mly ; y++ )</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>     {</div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>         <span class="keywordflow">for</span> ( x = 0 ; x < mlx ; x++ )</div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>         {</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>             <span class="keywordflow">for</span> ( z = 0 ; z < mnp ; z++ )</div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>             {</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>                 sum = 0. ;</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>                 sum2 = 0. ;</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>                 n = 0 ;</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>                 {</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>           c_img=cpl_imagelist_get(cubes[i],z);</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span> </div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>           clx=cpl_image_get_size_x(c_img);</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>           cly=cpl_image_get_size_y(c_img);</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span> </div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>           t_img=cpl_imagelist_get(tmpcubes[i],z);</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>                   ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span> </div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>           m_img=cpl_imagelist_get(mergedCube,z);</div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>                   pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>           o_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>                   podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>                   <span class="comment">/*</span></div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span> <span class="comment">                    find the position of the present cube and go</span></div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span> <span class="comment">                    through the single spectra</span></div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span> <span class="comment">                   */</span></div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>                     <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+cly &&</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>                          x >= llx[i] && x < llx[i]+clx )</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>                     {</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>                         posx = x - llx[i] ;</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>                         posy = y - lly[i] ;</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>                         <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*clx]))</div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>                         {</div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>                             sum += ptdata[posx+posy*clx] ;</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>                             sum2 += (ptdata[posx+posy*clx] *</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>                                      ptdata[posx+posy*clx]) ;</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>                             cubedata[n] = ptdata[posx+posy*clx] ;</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>                             n++ ;</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>                         }</div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>                     }</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>                 }</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span> </div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>                 <span class="keywordflow">if</span> ( n == 0 )</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>                 {</div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>                     mean = 0. ;</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>                     sigma = 0. ;</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>                     pmdata[x+y*mlx] = 0. ;</div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>                     podata[x+y*mlx] = 0 ;</div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>                 }</div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( n == 1 )</div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>                 {</div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>                     mean = sum ;</div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>                     sigma = 0. ;</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>                     pmdata[x+y*mlx] = mean ;</div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>                     podata[x+y*mlx] = 1 ;</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>                 }</div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>                 {</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>                     mean = sum/(double)n ;</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>                     sigma = sqrt( (sum2 - sum*mean) / (<span class="keywordtype">double</span>)(n - 1) ) ;</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>                     ns = 0 ;</div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>                     <span class="keywordflow">for</span> ( i = 0 ; i < n ; i++ )</div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>                     {</div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>                         <span class="keywordflow">if</span> ( cubedata[i] > mean+factor*sigma ||</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>                              cubedata[i] < mean-factor*sigma )</div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>                         {</div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>                             continue ;</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>                         }</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>                         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>                         {</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>                             pmdata[x+y*mlx] += cubedata[i] ;</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>                             ns++ ;</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>                         }</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>                     }</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>                     <span class="keywordflow">if</span> ( ns == 0 )</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>                     {</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>                         pmdata[x+y*mlx] = 0. ;</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>                     }</div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>                     {</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>                         pmdata[x+y*mlx] /= (float)ns ;</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>                     }</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>                     podata[x+y*mlx] = (float)ns ;</div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span>                 }</div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>             }</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>         }</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>     }</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span> </div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>     <span class="keywordflow">for</span>( i = 0 ; i < n_cubes ; i++ )</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>     {</div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>         cpl_imagelist_delete (tmpcubes[i]) ;</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>     }</div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>     cpl_free(tmpcubes);</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>     cpl_free(llx);</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>     cpl_free(lly);</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>     cpl_free(sub_offsetx);</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>     cpl_free(sub_offsety);</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>     cpl_free(cubedata);</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span> </div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>     <span class="comment">/* convert the "free space" in the cube to blank pixels */</span></div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>     sinfo_new_convert_0_to_ZERO_for_cubes(mergedCube) ;</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>     cpl_free(kernel) ;</div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>     <span class="keywordflow">return</span> mask ;</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span> }</div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span> </div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span> cpl_imagelist *</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span> sinfo_new_bin_cube(cpl_imagelist *cu,</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>                              <span class="keywordtype">int</span> xscale,</div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>                              <span class="keywordtype">int</span> yscale,</div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>                              <span class="keywordtype">int</span> xmin,</div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>                              <span class="keywordtype">int</span> xmax,</div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>                              <span class="keywordtype">int</span> ymin,</div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>                              <span class="keywordtype">int</span> ymax)</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span> {</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>   <span class="keywordtype">int</span> i,j,k;</div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>   cpl_imagelist * cube;</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>   <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span> </div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>   <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span> </div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span> </div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>   <span class="comment">/* old code</span></div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span> <span class="comment">  if (NULL == (cube = sinfo_newCube (xmax-xmin+1,ymax-ymin+1, cu->np)) )</span></div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span> <span class="comment">  {</span></div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span> <span class="comment">      sinfo_msg_error ("cannot allocate new cube") ;</span></div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span> <span class="comment">      return NULL ;</span></div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>   inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>   i_img=cpl_imagelist_get(cu,0);</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>   ilx=cpl_image_get_size_x(i_img);</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>   ily=cpl_image_get_size_y(i_img);</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>   olx=xmax-xmin+1;</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>   oly=ymax-ymin+1;</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span> </div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span> </div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>   cube=cpl_imagelist_new();</div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>   <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ ) {</div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>     o_img = cpl_image_new(olx,oly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>     cpl_imagelist_set(cube,o_img,i);</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>   }</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span> </div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> </div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>   <span class="keywordflow">for</span> (i=0;i<inp;i++){</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>       i_img=cpl_imagelist_get(cu,i);</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>       o_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>       podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>       <span class="keywordflow">for</span> (j=0 ; j < olx ; j++) {</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>           <span class="keywordflow">for</span> (k=0 ; k< oly ; k++) {</div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>           podata[j+k*olx]=pidata[((int) (j+xmin)/xscale)+</div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>                                      ((<span class="keywordtype">int</span>) (k+ymin)/yscale)*ilx]/</div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>                                        (xscale*yscale);</div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>       }</div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>       }</div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>   }</div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span> </div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>   <span class="keywordflow">return</span> cube;</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span> }</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span> </div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span> </div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span> cpl_imagelist *</div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span> sinfo_new_scale_cube(cpl_imagelist *cu,</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>                                <span class="keywordtype">float</span> xscale,</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>                                <span class="keywordtype">float</span> yscale,</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>                                <span class="keywordtype">char</span> * kernel_type)</div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span> {</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>     cpl_imagelist    *    cube ;</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>     <span class="keywordtype">int</span>             i=0, j=0, k=0, l=0 ;</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>     <span class="keywordtype">int</span>             lx_out, ly_out ;</div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>     <span class="keywordtype">double</span>           cur ;</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>     <span class="keywordtype">double</span>      *    invert_transform ;</div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>     <span class="keywordtype">double</span>           neighbors[16] ;</div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>     <span class="keywordtype">double</span>           rsc[8],</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>                     sumrs ;</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>     <span class="keywordtype">double</span>        param[6];</div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>     <span class="keywordtype">double</span>           x, y ;</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>     <span class="keywordtype">int</span>             px, py ;</div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>     <span class="keywordtype">int</span>             pos ;</div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>     <span class="keywordtype">int</span>             tabx, taby ;</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>     <span class="keywordtype">double</span>      *    kernel ;</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>     <span class="keywordtype">int</span>                  leaps[16] ;</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>     <span class="keywordtype">int</span>                 ilx=0;</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>     <span class="keywordtype">int</span>                 ily=0;</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>     <span class="keywordtype">int</span>                 tlx=0;</div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>     <span class="keywordtype">int</span>                 tly=0;</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>     <span class="keywordtype">int</span>                 inp;</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>     <span class="keywordtype">float</span>*              podata=0;</div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>     cpl_image*          in_img=NULL;</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>     cpl_image*          ou_img=NULL;</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span> </div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span> </div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span>     <span class="keywordflow">if</span> (cu == NULL)</div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span>     {</div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"null cube"</span>) ;</div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span>     }</div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span> </div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span>     param[0]=xscale;</div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span>     param[1]=0;</div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span>     param[2]=0;</div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>     param[3]=0;</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>     param[4]=yscale;</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>     param[5]=0;</div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span> </div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span> </div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>     invert_transform = sinfo_invert_linear_transform(param) ;</div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>     <span class="keywordflow">if</span> (invert_transform == NULL) {</div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot compute sinfo_invert transform: "</span></div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>                         <span class="stringliteral">"aborting warping"</span>) ;</div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>     }</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span> </div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>     <span class="comment">/* Generate default interpolation kernel */</span></div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>     kernel = sinfo_generate_interpolation_kernel(kernel_type) ;</div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>     <span class="keywordflow">if</span> (kernel == NULL) {</div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot generate kernel: aborting resampling"</span>) ;</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>     }</div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span> </div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>     <span class="comment">/* Compute new image size   */</span></div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>     <span class="comment">/* Compute new image size   */</span></div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cu,0));</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cu,0));</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>     inp=cpl_imagelist_get_size(cu);</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span> </div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>     lx_out = (int) ilx*xscale ;</div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>     ly_out = (int) ily*yscale ;</div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span> </div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span>     cube=cpl_imagelist_new();</div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>     <span class="keywordflow">for</span> ( l = 0 ; l < inp ; l++ ) {</div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>      in_img = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>      cpl_imagelist_set(cube,in_img,l);</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>     }</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span> </div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>     <span class="comment">/* old code</span></div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span> <span class="comment">    if (NULL == (cube = sinfo_newCube (lx_out, ly_out, cu->np)) )</span></div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span> <span class="comment">        sinfo_msg_error (" cannot allocate new cube") ;</span></div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span> </div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>     <span class="keywordflow">for</span> (l=0;l<inp;l++){</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span>       in_img=cpl_imagelist_get(cu,l);</div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>       ou_img=cpl_imagelist_get(cube,l);</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>       tlx=cpl_image_get_size_x(in_img);</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span>       tly=cpl_image_get_size_y(in_img);</div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>       podata=cpl_image_get_data_float(ou_img);</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>         <span class="comment">/* Pre compute leaps for 16 closest neighbors positions */</span></div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>         leaps[0] = -1 - tlx ;</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>         leaps[1] =    - tlx ;</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span>         leaps[2] =  1 - tlx ;</div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>         leaps[3] =  2 - tlx ;</div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span> </div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>         leaps[4] = -1 ;</div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>         leaps[5] =  0 ;</div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span>         leaps[6] =  1 ;</div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span>         leaps[7] =  2 ;</div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span> </div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span>         leaps[8] = -1 + tlx ;</div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span>         leaps[9] =      tlx ;</div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>         leaps[10]=  1 + tlx ;</div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>         leaps[11]=  2 + tlx ;</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span> </div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>         leaps[12]= -1 + 2*tlx ;</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>         leaps[13]=      2*tlx ;</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span>         leaps[14]=  1 + 2*tlx ;</div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span>         leaps[15]=  2 + 2*tlx ;</div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span> </div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>         <span class="comment">/* Double loop on the output image  */</span></div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>         <span class="keywordflow">for</span> (j=0 ; j < ly_out ; j++) {</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>             <span class="keywordflow">for</span> (i=0 ; i< lx_out ; i++) {</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span>                 <span class="comment">/* Compute the original source for this pixel   */</span></div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span> </div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>                 x = invert_transform[0] * (double)i +</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span>                     invert_transform[1] * (<span class="keywordtype">double</span>)j +</div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>                 invert_transform[2] ;</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span> </div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>                 y = invert_transform[3] * (<span class="keywordtype">double</span>)i +</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>                 invert_transform[4] * (<span class="keywordtype">double</span>)j +</div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span>                 invert_transform[5] ;</div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span> </div>
+<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>             <span class="comment">/* Which is the closest integer positioned neighbor?    */</span></div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>                 px = (<span class="keywordtype">int</span>)x ;</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>         py = (<span class="keywordtype">int</span>)y ;</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span> </div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>                 if ((px < 1) ||</div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>                     (px > (tlx-2)) ||</div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>                     (py < 1) ||</div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span>                     (py > (tly-2)))</div>
+<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span>                     podata[i+j*lx_out] = (pixelvalue)0.0 ;</div>
+<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>                 else {</div>
+<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>                     <span class="comment">/* Now feed the positions for the closest 16 neighbors  */</span></div>
+<div class="line"><a name="l03990"></a><span class="lineno"> 3990</span>                     pos = px + py * tlx ;</div>
+<div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>                     <span class="keywordflow">for</span> (k=0 ; k<16 ; k++){</div>
+<div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>                         <span class="keywordflow">if</span>(!isnan(podata[(<span class="keywordtype">int</span>)(pos+leaps[k])])) neighbors[k] =</div>
+<div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>                          (<span class="keywordtype">double</span>)(podata[(int)(pos+leaps[k])]) ;</div>
+<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>                 <span class="keywordflow">else</span> neighbors[k]=0;</div>
+<div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>             }</div>
+<div class="line"><a name="l03996"></a><span class="lineno"> 3996</span> </div>
+<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>                     <span class="comment">/* Which tabulated value index shall we use?    */</span></div>
+<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>                     tabx = (x - (double)px) * (double)(TABSPERPIX) ;</div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>                     taby = (y - (double)py) * (double)(TABSPERPIX) ;</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span> </div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>                     <span class="comment">/* Compute resampling coefficients  */</span></div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>                     <span class="comment">/* rsc[0..3] in x, rsc[4..7] in y   */</span></div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span> </div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>                     rsc[0] = kernel[TABSPERPIX + tabx] ;</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>                     rsc[1] = kernel[tabx] ;</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>                     rsc[2] = kernel[TABSPERPIX - tabx] ;</div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span>                     rsc[3] = kernel[2 * TABSPERPIX - tabx] ;</div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>                     rsc[4] = kernel[TABSPERPIX + taby] ;</div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span>                     rsc[5] = kernel[taby] ;</div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span>                     rsc[6] = kernel[TABSPERPIX - taby] ;</div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span>                     rsc[7] = kernel[2 * TABSPERPIX - taby] ;</div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span> </div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span>                     sumrs = (rsc[0]+rsc[1]+rsc[2]+rsc[3]) *</div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span>                         (rsc[4]+rsc[5]+rsc[6]+rsc[7]) ;</div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span> </div>
+<div class="line"><a name="l04016"></a><span class="lineno"> 4016</span>                     <span class="comment">/* Compute interpolated pixel now   */</span></div>
+<div class="line"><a name="l04017"></a><span class="lineno"> 4017</span>                     cur =   rsc[4] * (  rsc[0]*neighbors[0] +</div>
+<div class="line"><a name="l04018"></a><span class="lineno"> 4018</span>                                     rsc[1]*neighbors[1] +</div>
+<div class="line"><a name="l04019"></a><span class="lineno"> 4019</span>                                     rsc[2]*neighbors[2] +</div>
+<div class="line"><a name="l04020"></a><span class="lineno"> 4020</span>                                     rsc[3]*neighbors[3] ) +</div>
+<div class="line"><a name="l04021"></a><span class="lineno"> 4021</span>                         rsc[5] * (  rsc[0]*neighbors[4] +</div>
+<div class="line"><a name="l04022"></a><span class="lineno"> 4022</span>                                     rsc[1]*neighbors[5] +</div>
+<div class="line"><a name="l04023"></a><span class="lineno"> 4023</span>                                     rsc[2]*neighbors[6] +</div>
+<div class="line"><a name="l04024"></a><span class="lineno"> 4024</span>                                     rsc[3]*neighbors[7] ) +</div>
+<div class="line"><a name="l04025"></a><span class="lineno"> 4025</span>                         rsc[6] * (  rsc[0]*neighbors[8] +</div>
+<div class="line"><a name="l04026"></a><span class="lineno"> 4026</span>                                     rsc[1]*neighbors[9] +</div>
+<div class="line"><a name="l04027"></a><span class="lineno"> 4027</span>                                     rsc[2]*neighbors[10] +</div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span>                                     rsc[3]*neighbors[11] ) +</div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span>                         rsc[7] * (  rsc[0]*neighbors[12] +</div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>                                     rsc[1]*neighbors[13] +</div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>                                     rsc[2]*neighbors[14] +</div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>                                     rsc[3]*neighbors[15] ) ;</div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span> </div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span>                     <span class="comment">/* Affect the value to the output image */</span></div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span>                     podata[i+j*lx_out] = (pixelvalue)(cur/sumrs) ;</div>
+<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>                     <span class="comment">/* done ! */</span></div>
+<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>                 }</div>
+<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>             }</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span>         }</div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>     }</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>     cpl_free(kernel) ;</div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>     cpl_free(invert_transform) ;</div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>     <span class="keywordflow">return</span> cube ;</div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span> }</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span> </div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span> </div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span> cpl_imagelist *</div>
+<div class="line"><a name="l04057"></a><span class="lineno"> 4057</span> sinfo_cube_zshift(<span class="keyword">const</span> cpl_imagelist * cube_inp,</div>
+<div class="line"><a name="l04058"></a><span class="lineno"> 4058</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> shift,</div>
+<div class="line"><a name="l04059"></a><span class="lineno"> 4059</span>                   <span class="keywordtype">double</span>* sub_shift)</div>
+<div class="line"><a name="l04060"></a><span class="lineno"> 4060</span> {</div>
+<div class="line"><a name="l04061"></a><span class="lineno"> 4061</span> </div>
+<div class="line"><a name="l04062"></a><span class="lineno"> 4062</span>     cpl_imagelist * cube_out=NULL ;</div>
+<div class="line"><a name="l04063"></a><span class="lineno"> 4063</span>     <span class="keyword">const</span> cpl_image* img_inp=NULL;</div>
+<div class="line"><a name="l04064"></a><span class="lineno"> 4064</span>     cpl_image* img_out=NULL;</div>
+<div class="line"><a name="l04065"></a><span class="lineno"> 4065</span>     <span class="keywordtype">int</span>        col, row,z ;</div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span>     <span class="keywordtype">int</span>        int_shift ;</div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span>     <span class="keywordtype">int</span> ilz=0;</div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span> </div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span>     <span class="keywordtype">int</span> olz=0;</div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>     <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span> </div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>     cknull(cube_inp,<span class="stringliteral">"no input cube given!"</span>) ;</div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>     check_nomsg(img_inp=cpl_imagelist_get_const(cube_inp,0));</div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>     check_nomsg(ilx=cpl_image_get_size_x(img_inp));</div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span>     check_nomsg(ily=cpl_image_get_size_y(img_inp));</div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>     check_nomsg(ilz=cpl_imagelist_get_size(cube_inp));</div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span> </div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>     olx=ilx;</div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span>     oly=ily;</div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>     olz=ilz;</div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span> </div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span>     int_shift = sinfo_new_nint(shift) ;</div>
+<div class="line"><a name="l04089"></a><span class="lineno"> 4089</span>     *sub_shift = shift - (double) int_shift ;</div>
+<div class="line"><a name="l04090"></a><span class="lineno"> 4090</span>     <span class="keywordflow">if</span> ( int_shift == 0 )</div>
+<div class="line"><a name="l04091"></a><span class="lineno"> 4091</span>     {</div>
+<div class="line"><a name="l04092"></a><span class="lineno"> 4092</span>         cube_out =cpl_imagelist_duplicate(cube_inp) ;</div>
+<div class="line"><a name="l04093"></a><span class="lineno"> 4093</span>         <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l04094"></a><span class="lineno"> 4094</span>     }</div>
+<div class="line"><a name="l04095"></a><span class="lineno"> 4095</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04096"></a><span class="lineno"> 4096</span>     {</div>
+<div class="line"><a name="l04097"></a><span class="lineno"> 4097</span>       <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span>       cknull(cube_out = cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span>       <span class="keywordflow">for</span> ( i = 0 ; i < olz ; i++ ) {</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span>         check_nomsg(img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span>         check_nomsg(cpl_imagelist_set(cube_out,img_out,i));</div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>      }</div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>     }</div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span> </div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>     <span class="keywordflow">for</span>(z=0; z< ilz; z++) {</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span>       <span class="keywordflow">if</span> ( (z-int_shift >= 0 ) && (z - int_shift < olz) ) {</div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>         check_nomsg(img_inp=cpl_imagelist_get_const(cube_inp,z));</div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>         check_nomsg(img_out=cpl_imagelist_get(cube_out,z-int_shift));</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>     check_nomsg(pidata=cpl_image_get_data_float_const(img_inp));</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>     check_nomsg(podata=cpl_image_get_data_float(img_out));</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {</div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>       <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>         podata[col+row*olx] = pidata[col+row*olx] ;</div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>       }</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>     }</div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>       }</div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>     }</div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>     <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span> </div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>  cleanup:</div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>     sinfo_free_imagelist(&cube_out);</div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span> }</div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span> </div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span> cpl_imagelist *</div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span> sinfo_cube_zshift_poly(<span class="keyword">const</span> cpl_imagelist * cube_inp,</div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> sub_shift,</div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span>    order)</div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span> {</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span>   cpl_imagelist * cube_out ;</div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span> </div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span>   <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span>   <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span>   <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span> </div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span>   <span class="keywordtype">float</span> new_sum=0 ;</div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span>   <span class="keywordtype">float</span> eval=0 ;</div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span>   <span class="keywordtype">float</span> * imageptr=NULL ;</div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span>   <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span>   <span class="keywordtype">int</span> col=0 ;</div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span>   <span class="keywordtype">int</span> firstpos=0 ;</div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span>   <span class="keywordtype">int</span> n_points=0 ;</div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span>   <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span>   <span class="keywordtype">int</span> flag=0;</div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span>   <span class="keywordtype">int</span> ilz=0;</div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span> </div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span>   <span class="keywordtype">int</span> olz=0;</div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span> </div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span>   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span>   <span class="keyword">const</span> cpl_image* img_inp=NULL;</div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span>   cpl_image* img_out=NULL;</div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span> </div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span>   <span class="keywordflow">if</span> ( cube_inp == NULL ) {</div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no imagelist given!"</span>) ;</div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span>   }</div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span> </div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span>   img_inp=cpl_imagelist_get_const(cube_inp,0);</div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span> </div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span>   ilx=cpl_image_get_size_x(img_inp);</div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span>   ily=cpl_image_get_size_y(img_inp);</div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span>   ilz=cpl_imagelist_get_size(cube_inp);</div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span> </div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span>   <span class="keywordflow">if</span> ( order <= 0 ) {</div>
+<div class="line"><a name="l04181"></a><span class="lineno"> 4181</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l04182"></a><span class="lineno"> 4182</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04183"></a><span class="lineno"> 4183</span>   }</div>
+<div class="line"><a name="l04184"></a><span class="lineno"> 4184</span> </div>
+<div class="line"><a name="l04185"></a><span class="lineno"> 4185</span> </div>
+<div class="line"><a name="l04186"></a><span class="lineno"> 4186</span>   olx=ilx;</div>
+<div class="line"><a name="l04187"></a><span class="lineno"> 4187</span>   oly=ily;</div>
+<div class="line"><a name="l04188"></a><span class="lineno"> 4188</span>   olz=ilz;</div>
+<div class="line"><a name="l04189"></a><span class="lineno"> 4189</span>   <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l04190"></a><span class="lineno"> 4190</span> </div>
+<div class="line"><a name="l04191"></a><span class="lineno"> 4191</span>   <span class="keywordflow">if</span> ( NULL == (cube_out = cpl_imagelist_new()) ) {</div>
+<div class="line"><a name="l04192"></a><span class="lineno"> 4192</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l04193"></a><span class="lineno"> 4193</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04194"></a><span class="lineno"> 4194</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04195"></a><span class="lineno"> 4195</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {</div>
+<div class="line"><a name="l04196"></a><span class="lineno"> 4196</span>       img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l04197"></a><span class="lineno"> 4197</span>       cpl_imagelist_set(cube_out,img_out,i);</div>
+<div class="line"><a name="l04198"></a><span class="lineno"> 4198</span>     }</div>
+<div class="line"><a name="l04199"></a><span class="lineno"> 4199</span>   }</div>
+<div class="line"><a name="l04200"></a><span class="lineno"> 4200</span> </div>
+<div class="line"><a name="l04201"></a><span class="lineno"> 4201</span> </div>
+<div class="line"><a name="l04202"></a><span class="lineno"> 4202</span>   n_points = order + 1 ;</div>
+<div class="line"><a name="l04203"></a><span class="lineno"> 4203</span>   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {</div>
+<div class="line"><a name="l04204"></a><span class="lineno"> 4204</span>     firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l04205"></a><span class="lineno"> 4205</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04206"></a><span class="lineno"> 4206</span>     firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span>   }</div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span> </div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>   spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>   corrected_spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span> </div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span> </div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>   <span class="comment">/* fill the xa[] array for the polint function */</span></div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {</div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>   }</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span> </div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>   <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {</div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>       <span class="keywordflow">for</span>( z=0; z< ilz; z++) {</div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>         corrected_spec[z] = 0. ;</div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>       }</div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>       sum = 0. ;</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {</div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>     img_inp=cpl_imagelist_get_const(cube_inp,z);</div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>         pidata=cpl_image_get_data_float_const(img_inp);</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>     spec[z] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>           spec[z] = 0. ;</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span> </div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span>       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {</div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span>         <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span>             <span class="keywordflow">if</span> ( i >= ilz) continue  ;</div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>             corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>           }</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>         }</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>         <span class="keywordflow">if</span> ( z != 0 && z != ilz - 1 ) {</div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>           sum += spec[z] ;</div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>         }</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span> </div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>       }</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span> </div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>       new_sum = 0. ;</div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {</div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span> </div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>         <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span> <span class="comment">         * now determine the arrays of size n_points with which the</span></div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span> <span class="comment">         * polynom is determined and determine the position eval</span></div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span> <span class="comment">         * where the polynom is evaluated in polynomial interpolation.</span></div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span> <span class="comment">         * Take care of the points near the row edges!</span></div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>         <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;</div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>         <span class="keywordflow">if</span> ( z - firstpos < 0 ) {</div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>           imageptr = &spec[0] ;</div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>           eval     = sub_shift + z ;</div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= ilz ) {</div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>           imageptr = &spec[ilz - n_points] ;</div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span>           eval     = sub_shift + z + n_points - ilz ;</div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>       imageptr = &spec[z-firstpos] ;</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>           eval     = sub_shift + firstpos ;</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>         }</div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span> </div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>         flag=0;</div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span>         corrected_spec[z]=sinfo_new_nev_ille(xnum,imageptr,order,eval,&flag);</div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>         <span class="keywordflow">if</span> ( z != 0 && z != ilz - 1 ) {</div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>           new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>         }</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>       }</div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span> </div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>       <span class="comment">/* fill the output spectrum */</span></div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>       <span class="keywordflow">for</span> (z = 0 ; z < ilz ; z++ )</div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>       {</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>         img_out=cpl_imagelist_get(cube_out,z);</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>         podata=cpl_image_get_data_float(img_out);</div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>         <span class="keywordflow">if</span> ( new_sum == 0. ) {</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>           new_sum = 1. ;</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>         }</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>         <span class="keywordflow">if</span> ( z == 0 ) {</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>           podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == ilz - 1 ) {</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>           podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span>           podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>           corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>           podata[col+row*olx] = corrected_spec[z] ;</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>     }</div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>       }</div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span> </div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>     }</div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>   }</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span> </div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>   cpl_free(spec) ;</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>   cpl_free(corrected_spec) ;</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>   cpl_free(xnum) ;</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span>   <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span> </div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span> </div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span> }</div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span> </div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span> cpl_imagelist *</div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span> sinfo_cube_zshift_spline3(<span class="keyword">const</span> cpl_imagelist * cube_inp,</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>                           <span class="keyword">const</span> <span class="keywordtype">double</span> sub_shift)</div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span> {</div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span> </div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span>   cpl_imagelist * cube_out=NULL ;</div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span>   <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>   <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>   <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>   <span class="keywordtype">float</span>* eval=NULL ;</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>   <span class="keywordtype">float</span> new_sum=0 ;</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span>   <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span>   <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span> </div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span>   <span class="keywordtype">int</span> ilz=0;</div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>   <span class="keywordtype">int</span> olz=0;</div>
+<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span> </div>
+<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span>   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>   <span class="keyword">const</span> cpl_image* img_inp=NULL;</div>
+<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>   cpl_image* img_out=NULL;</div>
+<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span> </div>
+<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>   <span class="keywordflow">if</span> ( cube_inp == NULL ) {</div>
+<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no imagelist given!"</span>) ;</div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>   }</div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span> </div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>   img_inp=cpl_imagelist_get_const(cube_inp,0);</div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>   ilx=cpl_image_get_size_x(img_inp);</div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>   ily=cpl_image_get_size_y(img_inp);</div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>   ilz=cpl_imagelist_get_size(cube_inp);</div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span> </div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span> </div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span>   olx=ilx;</div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>   oly=ily;</div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>   olz=ilz;</div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>   <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>   <span class="keywordflow">if</span> ( NULL == (cube_out = cpl_imagelist_new()) ) {</div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {</div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>       img_out=cpl_image_new(olx,oly,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>       cpl_imagelist_set(cube_out,img_out,i);</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>     }</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>   }</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span> </div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>   xnum=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>   <span class="comment">/* fill the xa[] array for the spline function */</span></div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span>   <span class="keywordflow">for</span> ( i = 0 ; i < ilz ; i++ ) {</div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>   }</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span> </div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>   spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span>   corrected_spec=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>   eval=cpl_calloc(ilz,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span> </div>
+<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>   <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ ) {</div>
+<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) {</div>
+<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span>       sum = 0. ;</div>
+<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {</div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span>     img_inp=cpl_imagelist_get_const(cube_inp,z);</div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span>         pidata=cpl_image_get_data_float_const(img_inp);</div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>     spec[z] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {</div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>         <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span>         <span class="keywordflow">if</span> ( i >= ilz) continue ;</div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>         corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>       }</div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>       spec[z] = 0. ;</div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>     }</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span>     sum += spec[z] ;</div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>     eval[z] = (float)sub_shift+(<span class="keywordtype">float</span>)z ;</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>       }</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>       <span class="comment">/* now we do the spline interpolation*/</span></div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>       <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline( xnum, spec, ilz, eval,</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span>                                               corrected_spec, ilz ) )</div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>         {</div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>         }</div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> </div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>       new_sum = 0. ;</div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {</div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>       continue ;</div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span>     }</div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>     new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>       }</div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>       <span class="comment">/* fill output imagelist */</span></div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>       <span class="keywordflow">for</span> ( z = 0 ; z < ilz ; z++ ) {</div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>         img_out=cpl_imagelist_get(cube_out,z);</div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>         podata=cpl_image_get_data_float(img_out);</div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;</div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>     {</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>         podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>         corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>         podata[col+row*olx] = corrected_spec[z] ;</div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>       }</div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>     }</div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>       }</div>
+<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>     }</div>
+<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>   }</div>
+<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>   cpl_free(xnum);</div>
+<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>   cpl_free(spec) ;</div>
+<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>   cpl_free(corrected_spec) ;</div>
+<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>   cpl_free(eval) ;</div>
+<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span> </div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>   <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span> }</div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span> </div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span> <span class="comment">/* The structure for stroing index data for kappa-sigma</span></div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span> <span class="comment"> * */</span></div>
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span> <span class="keyword">struct </span>_CubeData</div>
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span> {</div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>     <span class="keywordtype">int</span> iCubeNumber;</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>     <span class="keywordtype">int</span> iLocalX;</div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>     <span class="keywordtype">int</span> iLocalY;</div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span> };</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_CubeData CubeData;</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span> </div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span> <span class="keyword">struct </span>_CubeDataVector</div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span> {</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>     <span class="keywordtype">int</span> size;</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>     CubeData** pdata;</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span> };</div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_CubeDataVector CubeDataVector;</div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_kappa_sigma_offset_with_mask(</div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span>         <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>         <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span>         <span class="keywordtype">int</span> nCubes,</div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span>         cpl_imagelist** inputCubes,</div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>         cpl_imagelist* imResult,</div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>         <span class="keywordtype">int</span>* offsetX,</div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>         <span class="keywordtype">int</span>* offsetY,</div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>         cpl_imagelist* sky_mask,</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span>         );</div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span> sinfo_kappa_sigma_CubeDataVector(</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>         <span class="keywordtype">int</span> globalX,</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>         <span class="keywordtype">int</span> globalY,</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>         CubeDataVector* pCubeDataVector,</div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>         cpl_imagelist* imlistResult,</div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>         cpl_imagelist** input_cubes,</div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>         cpl_imagelist* sky_mask,</div>
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>         <span class="keywordtype">int</span> iPlanesNumber,</div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>         <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes</div>
+<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>         );</div>
+<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span> </div>
+<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span> sinfo_kappa_sigma_array_with_mask(cpl_array* parray, <span class="keywordtype">int</span> szArray,</div>
+<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>                                   <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,cpl_image* imMask,</div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>                                   <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,</div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>                                   <span class="keywordtype">double</span> mask_delta)</div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span> {</div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>     <span class="keywordtype">double</span> result = 0;</div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>     <span class="keywordtype">int</span> nInvalidPoints = 0;</div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> EPS = 1E-10;</div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>     <span class="comment">//sinfo_msg("sinfo_kappa_sigma_array_with_mask, x[%d] y[%d]"</span></div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>     <span class="keywordtype">double</span> mask_adjustment = mask_delta;</div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>     <span class="keywordflow">do</span></div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span>     {</div>
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span>         <span class="keywordtype">double</span> median = 0;</div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>         <span class="keywordtype">double</span> sig = 0;</div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span>         <span class="keywordtype">int</span> z = 0;</div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span>         nInvalidPoints = 0;</div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span> </div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>         check_nomsg(median = cpl_array_get_median(parray));</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>         check_nomsg(sig = cpl_array_get_stdev(parray));</div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>         <span class="keywordflow">for</span> (z = 0; z < szArray; z++)</div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span>         {</div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>             <span class="keywordtype">int</span> isnull = 0;</div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>             <span class="keywordtype">double</span> value = 0;</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>             check_nomsg(value = cpl_array_get(parray, z, &isnull));</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span>             <span class="keywordflow">if</span>(!isnull)</div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>             {</div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span>                 <span class="keywordflow">if</span> (fabs(value - median) > (kappa * sig))</div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>                 {</div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span> </div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span>    <span class="comment">//                       sinfo_msg("entered");</span></div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>     <span class="comment">//        sinfo_msg("val=%g check=%g",</span></div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>     <span class="comment">//              fabs(value - median),(kappa * sig));</span></div>
+<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span> <span class="comment">//            sinfo_msg("kappa=%f sig=%g median=%g value=%g",</span></div>
+<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span> <span class="comment">//                  kappa,sig,median,value);</span></div>
+<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span> </div>
+<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>                     <span class="comment">//double msk_new_value = 0;</span></div>
+<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>                     cpl_array_fill_window_invalid(parray, z, 1);</div>
+<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span>                     mask_adjustment += exptimes[z];</div>
+<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>                     ++nInvalidPoints;</div>
+<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span>                 }</div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>             }</div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>         }</div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span>         <span class="comment">/*if (nInvalidPoints)</span></div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span> <span class="comment">            sinfo_msg("nInvalidPoints %d[%d][%d] median[%f] sig[%f]", nInvalidPoints,x,y, median, sig );</span></div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span> <span class="comment">        }*/</span></div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span> </div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span>     }</div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span>     <span class="keywordflow">while</span> (nInvalidPoints);</div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>     <span class="keywordflow">if</span>(imMask && fabs(mask_adjustment) > EPS)</div>
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>     {</div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>         <span class="comment">// adjust mask image</span></div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>         <span class="keywordtype">int</span> px_rejected = 0;</div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>         <span class="keywordtype">double</span> msk_value = 0;</div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>         check_nomsg(msk_value = cpl_image_get(imMask, x, y, &px_rejected));</div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>         check_nomsg(cpl_image_set(imMask, x,y, msk_value - mask_adjustment));</div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>     }</div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>     <span class="comment">// get a result value for the point</span></div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>     check_nomsg(result = cpl_array_get_mean(parray));</div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>     cleanup:</div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>     sinfo_msg(<span class="stringliteral">"Error in sinfo_kappa_sigma_array_with_mask"</span>);</div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span> }</div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span> </div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span> </div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span> <span class="keywordtype">int</span> sinfo_coadd_with_ks_clip_optimized(</div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>             <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>             cpl_imagelist* sky_mask,</div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>             cpl_imagelist** tmpcubes</div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>             )</div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span> {</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span> <span class="comment">    sinfo_msg("sinfo_coadd_with_ks_clip_optimized() z_min[%d] z_max[%d] n_cubes[%d] kappa[%f] llx[%d] lly[%d] exptimes[%d] sky_mask[%d]",</span></div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span> <span class="comment">            z_min, z_max, ilx, ily, n_cubes, kappa,llx, lly,exptimes,sky_mask);</span></div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>    check_nomsg(result=sinfo_kappa_sigma_offset_with_mask(z_min, z_max, n_cubes, tmpcubes, exptimes, mergedCube, llx, lly, sky_mask, kappa));</div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span> </div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>   cleanup:</div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span> </div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span> </div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span> }</div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span> </div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_kappa_sigma_offset_with_mask(</div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>         <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>         <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>         <span class="keywordtype">int</span> nCubes,</div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>         cpl_imagelist** inputCubes,</div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>         cpl_imagelist* imResult,</div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>         <span class="keywordtype">int</span>* global_offsetX,</div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>         <span class="keywordtype">int</span>* global_offsetY,</div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span>         cpl_imagelist* sky_mask,</div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa</div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>         )</div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span> {</div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> BIG_ENOUGH_INT = 65535;</div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>     CubeDataVector*** indexX = 0;</div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>     <span class="keywordtype">int</span> x = 0;</div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>     <span class="keywordtype">int</span> y = 0;</div>
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span>     <span class="keywordtype">int</span> z = 0;</div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span>     <span class="keywordtype">int</span> iPlanesNumber = z_max - z_min;</div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>     <span class="keywordtype">int</span> nIndexXbytes = 0;</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>     <span class="keywordtype">int</span> globalSizeX = 0 ;</div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>     <span class="keywordtype">int</span> globalSizeY = 0;</div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span> </div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>     <span class="keywordtype">int</span> xmax = -BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span>     <span class="keywordtype">int</span> ymax = -BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span>     <span class="keywordtype">int</span> xmin = BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span>     <span class="keywordtype">int</span> ymin = BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>     <span class="keywordtype">int</span>* offsetX = 0; <span class="comment">// local offset of the cubes, normalized</span></div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>     <span class="keywordtype">int</span>* offsetY = 0;</div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>     <span class="comment">//sinfo_msg(" starting kappa-sigma clipping for cubes[%d] planes[%d]", nCubes, z_max - z_min );</span></div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>     <span class="comment">// determine size of the coadded cube</span></div>
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span>         sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span>     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++)</div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>     {</div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span> </div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>         cpl_imagelist* pCube = inputCubes[z];</div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span>         cpl_image* pImage = 0;</div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span>         <span class="keywordtype">int</span> localMaxX = 0;</div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span>         <span class="keywordtype">int</span> localMaxY = 0;</div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span>         <span class="keywordtype">int</span> localMinX = 0;</div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>         <span class="keywordtype">int</span> localMinY = 0;</div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span> </div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span>         pImage = cpl_imagelist_get(pCube, 0);</div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span> </div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>         localMaxX = cpl_image_get_size_x(pImage) + global_offsetX[z];</div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>         localMaxY = cpl_image_get_size_y(pImage) + global_offsetY[z];</div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>         localMinX = global_offsetX[z];</div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>         localMinY = global_offsetY[z];</div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span> </div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>         <span class="keywordflow">if</span>(localMaxX > xmax) xmax = localMaxX;</div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>         <span class="keywordflow">if</span>(localMaxY > ymax) ymax = localMaxY;</div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span> </div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>         <span class="keywordflow">if</span>(localMinX < xmin) xmin = localMinX;</div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>         <span class="keywordflow">if</span>(localMinY < ymin) ymin = localMinY;</div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>     }</div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>         sinfo_check_rec_status(1);</div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span> </div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span>     <span class="comment">// DFS09121 xmax and ymax could be more then output cube - check and adjust</span></div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>     {</div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>         <span class="keywordtype">int</span> msize_x = 0;</div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span>         <span class="keywordtype">int</span> msize_y = 0;</div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>         <span class="comment">//sinfo_msg("DFS09121 before:  xmax=%d ymax=%d", xmax, ymax);</span></div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>         cpl_image * pmaskimage = cpl_imagelist_get(sky_mask, 0);</div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>         msize_x = cpl_image_get_size_x(pmaskimage);</div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>         msize_y = cpl_image_get_size_y(pmaskimage);</div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>         xmax = msize_x < xmax ? msize_x : xmax;</div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span>         ymax = msize_y < ymax ? msize_y : ymax;</div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span>         <span class="comment">//sinfo_msg("DFS09121 after:  xmax=%d ymax=%d", xmax, ymax);</span></div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span>     }</div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span>     <span class="comment">// rely on the data received outside</span></div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>     globalSizeX = xmax;<span class="comment">// - xmin;</span></div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span>     globalSizeY = ymax;<span class="comment">// - ymin;</span></div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>     <span class="comment">// calculate local offset</span></div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span>     check_nomsg(offsetX = cpl_malloc(<span class="keyword">sizeof</span>(offsetX[0]) * nCubes));</div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span>     check_nomsg(offsetY = cpl_malloc(<span class="keyword">sizeof</span>(offsetY[0]) * nCubes));</div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span>         sinfo_check_rec_status(2);</div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span>     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++) <span class="comment">// use the offset from the caller</span></div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span>     {</div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span>         offsetX[z] = global_offsetX[z];<span class="comment">// - xmin;</span></div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>         offsetY[z] = global_offsetY[z];<span class="comment">// - ymin;</span></div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span> <span class="comment">//      sinfo_msg("for cube [%d] offset X[%d : %d] Y[%d : %d]", z, offsetX[z], global_offsetX[z], offsetY[z], global_offsetY[z]);</span></div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>     }</div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span>         sinfo_check_rec_status(3);</div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>     <span class="comment">// Because of DFS09121, the allocated size is taken +1</span></div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span>     nIndexXbytes = <span class="keyword">sizeof</span>(CubeDataVector**) * (globalSizeX+1 );</div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span> <span class="comment">//  sinfo_msg("   kappa_sigma_offset, globalSizeX[%d] globalSizeY[%d] nIndexXbytes[%d]", globalSizeX, globalSizeY, nIndexXbytes);</span></div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>     indexX = cpl_malloc(nIndexXbytes);</div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>     memset(&indexX[0], 0, (globalSizeX+1 )* <span class="keyword">sizeof</span>(indexX[0]));</div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span>     <span class="comment">// prepare result planes and mask</span></div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span> </div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>     <span class="comment">// 1. Fill indexes - do it only for a 0 plane in the cube</span></div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span>     <span class="keywordflow">for</span> (z = 0; z < nCubes; z++)</div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span>     {</div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span>         <span class="keywordtype">int</span> iCubeSizeX = 0;</div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>         <span class="keywordtype">int</span> iCubeSizeY = 0;</div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>         <span class="keywordtype">int</span> iOffsetX = 0;</div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>         <span class="keywordtype">int</span> iOffsetY = 0;</div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span> </div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span>         cpl_imagelist* pCube = inputCubes[z];</div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span>         cpl_image* pImage = 0;</div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>         pImage = cpl_imagelist_get(pCube, 0);</div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> </div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span>         iCubeSizeX = cpl_image_get_size_x(pImage);</div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span>         iCubeSizeY = cpl_image_get_size_y(pImage);</div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span>         iOffsetX = offsetX[z];</div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span>         iOffsetY = offsetY[z];</div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span> <span class="comment">//      sinfo_msg("   processing cube [%d] offsetX[%d] offsetY[%d] iCubeSizeX[%d] iCubeSizeY[%d]", z, iOffsetX, iOffsetY, iCubeSizeX, iCubeSizeY);</span></div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span>         <span class="keywordflow">for</span> (x = 1; x <= iCubeSizeX; x++)</div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span>         {</div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>             <span class="keywordtype">int</span> iGlobalX = x + iOffsetX;</div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span> </div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>             CubeDataVector** ppVector = 0;</div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>             <span class="keywordflow">if</span> (indexX[iGlobalX - 1] == 0)</div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span>             {</div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>                 <span class="comment">// Because of DFS09121, the allocated size is taken +1</span></div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span>                 <span class="keywordtype">int</span> nBytes = <span class="keyword">sizeof</span>(CubeDataVector*) * (globalSizeY+1 );</div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span>                 ppVector= cpl_malloc(nBytes);</div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>                 memset(&ppVector[0],0,(globalSizeY+1) * <span class="keyword">sizeof</span>(ppVector[0]));</div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span>                 indexX[iGlobalX - 1] = ppVector;</div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>             }</div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span>             {</div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>                 ppVector = indexX[iGlobalX - 1];</div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>             }</div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>             <span class="keywordflow">for</span> (y = 1; y <=iCubeSizeY; y++)</div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span>             {</div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span>                 CubeData* pCubeData = 0;</div>
+<div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>                 <span class="keywordtype">int</span> iGlobalY = y + iOffsetY;</div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span>                 CubeDataVector* pVector = ppVector[iGlobalY - 1];</div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span>                 <span class="keywordflow">if</span>(pVector == 0)</div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span>                 {</div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>                     <span class="keywordtype">int</span> nbytes = <span class="keyword">sizeof</span>(CubeDataVector);</div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>                     check_nomsg(pVector = cpl_malloc(nbytes));</div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span>                     ppVector[iGlobalY - 1] = pVector;</div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span>                     pVector->size = 0;</div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>                     nbytes = <span class="keyword">sizeof</span>(CubeData*) * nCubes;</div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>                     pVector->pdata = cpl_malloc(nbytes);</div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span> <span class="comment">//                  memset(&pVector->pdata[0], 0, nCubes * sizeof(pVector->pdata[0]));</span></div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span>                 }</div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span>                 pCubeData = cpl_malloc(<span class="keyword">sizeof</span>(CubeData));</div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span>                 pVector->pdata[(pVector->size)++] = pCubeData;</div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span>                 pCubeData->iCubeNumber = z;</div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span>                 pCubeData->iLocalX = x;</div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span>                 pCubeData->iLocalY = y;</div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span>             }</div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span>         }</div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span>     }</div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span>         sinfo_check_rec_status(4);</div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> </div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span>     <span class="comment">// 2. for each index value in global coordinates (x,y) call kappa-sigma</span></div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span>     <span class="keywordflow">for</span> (x = 1; x <= globalSizeX; x++)</div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span>     {</div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span>         CubeDataVector** pDataX = indexX[x - 1];</div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span>         <span class="keywordflow">if</span> (pDataX)</div>
+<div class="line"><a name="l04740"></a><span class="lineno"> 4740</span>         {</div>
+<div class="line"><a name="l04741"></a><span class="lineno"> 4741</span>             <span class="keywordflow">for</span> (y = 1; y <= globalSizeY; y++)</div>
+<div class="line"><a name="l04742"></a><span class="lineno"> 4742</span>             {</div>
+<div class="line"><a name="l04743"></a><span class="lineno"> 4743</span>                 CubeDataVector* pDataY = pDataX[y - 1];</div>
+<div class="line"><a name="l04744"></a><span class="lineno"> 4744</span>                 <span class="keywordflow">if</span> (pDataY && pDataY->size)</div>
+<div class="line"><a name="l04745"></a><span class="lineno"> 4745</span>                 {</div>
+<div class="line"><a name="l04746"></a><span class="lineno"> 4746</span>                     sinfo_kappa_sigma_CubeDataVector(x, y, pDataY, imResult,</div>
+<div class="line"><a name="l04747"></a><span class="lineno"> 4747</span>                                     inputCubes, sky_mask, iPlanesNumber, z_min,</div>
+<div class="line"><a name="l04748"></a><span class="lineno"> 4748</span>                                     kappa, exptimes);</div>
+<div class="line"><a name="l04749"></a><span class="lineno"> 4749</span>                 }</div>
+<div class="line"><a name="l04750"></a><span class="lineno"> 4750</span>                 <span class="keywordflow">if</span> (pDataY)</div>
+<div class="line"><a name="l04751"></a><span class="lineno"> 4751</span>                 {</div>
+<div class="line"><a name="l04752"></a><span class="lineno"> 4752</span>                     check_nomsg(cpl_free(pDataY->pdata));</div>
+<div class="line"><a name="l04753"></a><span class="lineno"> 4753</span>                     check_nomsg(cpl_free(pDataY));</div>
+<div class="line"><a name="l04754"></a><span class="lineno"> 4754</span>                 }</div>
+<div class="line"><a name="l04755"></a><span class="lineno"> 4755</span>             }</div>
+<div class="line"><a name="l04756"></a><span class="lineno"> 4756</span>             check_nomsg(cpl_free(pDataX));</div>
+<div class="line"><a name="l04757"></a><span class="lineno"> 4757</span>         }</div>
+<div class="line"><a name="l04758"></a><span class="lineno"> 4758</span>     }</div>
+<div class="line"><a name="l04759"></a><span class="lineno"> 4759</span>     sinfo_check_rec_status(5);</div>
+<div class="line"><a name="l04760"></a><span class="lineno"> 4760</span>     cleanup:</div>
+<div class="line"><a name="l04761"></a><span class="lineno"> 4761</span>     cpl_free(indexX);</div>
+<div class="line"><a name="l04762"></a><span class="lineno"> 4762</span>     cpl_free(offsetX);</div>
+<div class="line"><a name="l04763"></a><span class="lineno"> 4763</span>     cpl_free(offsetY);</div>
+<div class="line"><a name="l04764"></a><span class="lineno"> 4764</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04765"></a><span class="lineno"> 4765</span> </div>
+<div class="line"><a name="l04766"></a><span class="lineno"> 4766</span> }</div>
+<div class="line"><a name="l04767"></a><span class="lineno"> 4767</span> </div>
+<div class="line"><a name="l04768"></a><span class="lineno"> 4768</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l04769"></a><span class="lineno"> 4769</span> sinfo_kappa_sigma_CubeDataVector(</div>
+<div class="line"><a name="l04770"></a><span class="lineno"> 4770</span>         <span class="keywordtype">int</span> globalX,</div>
+<div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>         <span class="keywordtype">int</span> globalY,</div>
+<div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>         CubeDataVector* pCubeDataVector,</div>
+<div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>         cpl_imagelist* imlistResult,</div>
+<div class="line"><a name="l04774"></a><span class="lineno"> 4774</span>         cpl_imagelist** input_cubes,</div>
+<div class="line"><a name="l04775"></a><span class="lineno"> 4775</span>         cpl_imagelist* sky_mask,</div>
+<div class="line"><a name="l04776"></a><span class="lineno"> 4776</span>         <span class="keywordtype">int</span> iPlanesNumber,</div>
+<div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>         <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04778"></a><span class="lineno"> 4778</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes</div>
+<div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>         )</div>
+<div class="line"><a name="l04781"></a><span class="lineno"> 4781</span> {</div>
+<div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>     <span class="keywordtype">int</span> plane = 0;</div>
+<div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>     <span class="keywordtype">int</span> z = 0;</div>
+<div class="line"><a name="l04784"></a><span class="lineno"> 4784</span> </div>
+<div class="line"><a name="l04785"></a><span class="lineno"> 4785</span>     <span class="comment">// iterate through all planes</span></div>
+<div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>     cpl_array* pArray = 0;</div>
+<div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>     check_nomsg(pArray = cpl_array_new(pCubeDataVector->size, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l04788"></a><span class="lineno"> 4788</span> </div>
+<div class="line"><a name="l04789"></a><span class="lineno"> 4789</span> </div>
+<div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>     <span class="keywordflow">for</span> (plane = z_min; plane < z_min + iPlanesNumber; plane++)</div>
+<div class="line"><a name="l04791"></a><span class="lineno"> 4791</span>     {</div>
+<div class="line"><a name="l04792"></a><span class="lineno"> 4792</span>         <span class="keywordtype">double</span> val_msk = 0; <span class="comment">// value of the mask in the point</span></div>
+<div class="line"><a name="l04793"></a><span class="lineno"> 4793</span>         <span class="keywordtype">int</span> px = 0;</div>
+<div class="line"><a name="l04794"></a><span class="lineno"> 4794</span>         cpl_image* imResult = 0;</div>
+<div class="line"><a name="l04795"></a><span class="lineno"> 4795</span>         cpl_image* imMask = 0;</div>
+<div class="line"><a name="l04796"></a><span class="lineno"> 4796</span>         <span class="keywordtype">double</span> mask_adjustment = 0;</div>
+<div class="line"><a name="l04797"></a><span class="lineno"> 4797</span>         <span class="keywordtype">int</span> nValidPoints = 0;</div>
+<div class="line"><a name="l04798"></a><span class="lineno"> 4798</span>         cpl_array_fill_window_invalid(pArray, 0, pCubeDataVector->size);</div>
+<div class="line"><a name="l04799"></a><span class="lineno"> 4799</span>         check_nomsg(imMask = cpl_imagelist_get(sky_mask, plane - z_min));</div>
+<div class="line"><a name="l04800"></a><span class="lineno"> 4800</span>         check_nomsg(val_msk = cpl_image_get(imMask, globalX, globalY, &px));</div>
+<div class="line"><a name="l04801"></a><span class="lineno"> 4801</span>         <span class="keywordflow">for</span> (z = 0; z < pCubeDataVector->size; z++) <span class="comment">// through all cubes for that point - prepare the array</span></div>
+<div class="line"><a name="l04802"></a><span class="lineno"> 4802</span>         {</div>
+<div class="line"><a name="l04803"></a><span class="lineno"> 4803</span> </div>
+<div class="line"><a name="l04804"></a><span class="lineno"> 4804</span>             cpl_imagelist* pCube = 0;</div>
+<div class="line"><a name="l04805"></a><span class="lineno"> 4805</span>             CubeData* pCubeData = pCubeDataVector->pdata[z];</div>
+<div class="line"><a name="l04806"></a><span class="lineno"> 4806</span>             pCube = input_cubes[pCubeData->iCubeNumber];</div>
+<div class="line"><a name="l04807"></a><span class="lineno"> 4807</span>             <span class="keywordflow">if</span> (pCube)</div>
+<div class="line"><a name="l04808"></a><span class="lineno"> 4808</span>             {</div>
+<div class="line"><a name="l04809"></a><span class="lineno"> 4809</span>                 cpl_image* pImage = cpl_imagelist_get(pCube, plane - z_min);</div>
+<div class="line"><a name="l04810"></a><span class="lineno"> 4810</span> </div>
+<div class="line"><a name="l04811"></a><span class="lineno"> 4811</span>                 <span class="keywordflow">if</span> (pImage)</div>
+<div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>                 {</div>
+<div class="line"><a name="l04813"></a><span class="lineno"> 4813</span>                     <span class="keywordtype">int</span> is_rejected = 0;</div>
+<div class="line"><a name="l04814"></a><span class="lineno"> 4814</span>                     <span class="keywordtype">double</span> value = 0;</div>
+<div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>                     check_nomsg(value = cpl_image_get(pImage, pCubeData->iLocalX,</div>
+<div class="line"><a name="l04816"></a><span class="lineno"> 4816</span>                                     pCubeData->iLocalY, &is_rejected));</div>
+<div class="line"><a name="l04817"></a><span class="lineno"> 4817</span>                     <span class="keywordflow">if</span> (!isnan(value))</div>
+<div class="line"><a name="l04818"></a><span class="lineno"> 4818</span>                     {</div>
+<div class="line"><a name="l04819"></a><span class="lineno"> 4819</span>                         check_nomsg(cpl_array_set(pArray, z, value));</div>
+<div class="line"><a name="l04820"></a><span class="lineno"> 4820</span>                         ++nValidPoints;</div>
+<div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>                     }</div>
+<div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>                     {</div>
+<div class="line"><a name="l04824"></a><span class="lineno"> 4824</span>                         mask_adjustment += exptimes[z];</div>
+<div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>                     }</div>
+<div class="line"><a name="l04826"></a><span class="lineno"> 4826</span>                 }</div>
+<div class="line"><a name="l04827"></a><span class="lineno"> 4827</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04828"></a><span class="lineno"> 4828</span>                 {</div>
+<div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>                     sinfo_msg(<span class="stringliteral">"pImage is null"</span>);</div>
+<div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>                 }</div>
+<div class="line"><a name="l04831"></a><span class="lineno"> 4831</span>             }</div>
+<div class="line"><a name="l04832"></a><span class="lineno"> 4832</span>         }</div>
+<div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>         <span class="keywordflow">if</span>(nValidPoints)</div>
+<div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>         {</div>
+<div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>            sinfo_kappa_sigma_array_with_mask(pArray, pCubeDataVector->size,</div>
+<div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>                            kappa, imMask, exptimes, globalX, globalY,</div>
+<div class="line"><a name="l04837"></a><span class="lineno"> 4837</span>                            mask_adjustment);</div>
+<div class="line"><a name="l04838"></a><span class="lineno"> 4838</span>            check_nomsg(imResult = cpl_imagelist_get(imlistResult, plane));</div>
+<div class="line"><a name="l04839"></a><span class="lineno"> 4839</span>            <span class="keywordflow">if</span> (imResult)</div>
+<div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>            {</div>
+<div class="line"><a name="l04841"></a><span class="lineno"> 4841</span>               check_nomsg(cpl_image_set(imResult, globalX, globalY,</div>
+<div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>                               cpl_array_get_mean(pArray)));</div>
+<div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>            }</div>
+<div class="line"><a name="l04844"></a><span class="lineno"> 4844</span>            <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>            {</div>
+<div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>               sinfo_msg(<span class="stringliteral">"imResult is null"</span>);</div>
+<div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>            }</div>
+<div class="line"><a name="l04848"></a><span class="lineno"> 4848</span>         } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>         {</div>
+<div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>             <span class="comment">// adjust the mask</span></div>
+<div class="line"><a name="l04851"></a><span class="lineno"> 4851</span>             check_nomsg(cpl_image_set(imMask, globalX,globalY, 0));</div>
+<div class="line"><a name="l04852"></a><span class="lineno"> 4852</span>         }</div>
+<div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>     }</div>
+<div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>     <span class="keywordflow">for</span> (z = 0; z < pCubeDataVector->size; z++) <span class="comment">// through all cubes  - delete the data</span></div>
+<div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>     {</div>
+<div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>         CubeData* pCubeData = pCubeDataVector->pdata[z];</div>
+<div class="line"><a name="l04857"></a><span class="lineno"> 4857</span>         cpl_free(pCubeData);</div>
+<div class="line"><a name="l04858"></a><span class="lineno"> 4858</span>     }</div>
+<div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>     cpl_array_delete(pArray);</div>
+<div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>     cleanup:</div>
+<div class="line"><a name="l04862"></a><span class="lineno"> 4862</span> <span class="comment">//  sinfo_msg("   -----cleanup");</span></div>
+<div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l04864"></a><span class="lineno"> 4864</span> }</div>
+<div class="line"><a name="l04865"></a><span class="lineno"> 4865</span> </div>
+<div class="line"><a name="l04866"></a><span class="lineno"> 4866</span> </div>
+<div class="line"><a name="l04867"></a><span class="lineno"> 4867</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l04868"></a><span class="lineno"> 4868</span> sinfo_coadd_with_ks_clip(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l04869"></a><span class="lineno"> 4869</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l04874"></a><span class="lineno"> 4874</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l04875"></a><span class="lineno"> 4875</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>                         <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l04877"></a><span class="lineno"> 4877</span>             cpl_imagelist* mask,</div>
+<div class="line"><a name="l04878"></a><span class="lineno"> 4878</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l04879"></a><span class="lineno"> 4879</span>                         cpl_imagelist** tmpcubes)</div>
+<div class="line"><a name="l04880"></a><span class="lineno"> 4880</span> </div>
+<div class="line"><a name="l04881"></a><span class="lineno"> 4881</span> {</div>
+<div class="line"><a name="l04882"></a><span class="lineno"> 4882</span> </div>
+<div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l04884"></a><span class="lineno"> 4884</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l04885"></a><span class="lineno"> 4885</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l04887"></a><span class="lineno"> 4887</span> </div>
+<div class="line"><a name="l04888"></a><span class="lineno"> 4888</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l04889"></a><span class="lineno"> 4889</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l04890"></a><span class="lineno"> 4890</span>   <span class="keywordtype">int</span> nc=0;</div>
+<div class="line"><a name="l04891"></a><span class="lineno"> 4891</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l04892"></a><span class="lineno"> 4892</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l04893"></a><span class="lineno"> 4893</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l04894"></a><span class="lineno"> 4894</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l04895"></a><span class="lineno"> 4895</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>   <span class="keywordtype">int</span> nclip=0;</div>
+<div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>   <span class="keywordtype">int</span> ks=0;</div>
+<div class="line"><a name="l04898"></a><span class="lineno"> 4898</span> </div>
+<div class="line"><a name="l04899"></a><span class="lineno"> 4899</span>   <span class="keywordtype">float</span> sig=0;</div>
+<div class="line"><a name="l04900"></a><span class="lineno"> 4900</span>   <span class="keywordtype">float</span> med=0;</div>
+<div class="line"><a name="l04901"></a><span class="lineno"> 4901</span>   <span class="keywordtype">float</span> ovr=0;</div>
+<div class="line"><a name="l04902"></a><span class="lineno"> 4902</span>   <span class="keywordtype">float</span>  msk_sum=0;</div>
+<div class="line"><a name="l04903"></a><span class="lineno"> 4903</span>   <span class="keywordtype">float</span>  val_msk_sum=0;</div>
+<div class="line"><a name="l04904"></a><span class="lineno"> 4904</span>   <span class="keywordtype">float</span> avg=0;</div>
+<div class="line"><a name="l04905"></a><span class="lineno"> 4905</span> </div>
+<div class="line"><a name="l04906"></a><span class="lineno"> 4906</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>   <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l04909"></a><span class="lineno"> 4909</span>   <span class="keywordtype">float</span>* pvdata=NULL;</div>
+<div class="line"><a name="l04910"></a><span class="lineno"> 4910</span> </div>
+<div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l04912"></a><span class="lineno"> 4912</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>   cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>   cpl_image* v_img=NULL;</div>
+<div class="line"><a name="l04915"></a><span class="lineno"> 4915</span> </div>
+<div class="line"><a name="l04916"></a><span class="lineno"> 4916</span> </div>
+<div class="line"><a name="l04917"></a><span class="lineno"> 4917</span>   cpl_vector* val=NULL;</div>
+<div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>   cpl_vector* msk=NULL;</div>
+<div class="line"><a name="l04919"></a><span class="lineno"> 4919</span> </div>
+<div class="line"><a name="l04920"></a><span class="lineno"> 4920</span> </div>
+<div class="line"><a name="l04921"></a><span class="lineno"> 4921</span>   o_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l04922"></a><span class="lineno"> 4922</span>   olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l04923"></a><span class="lineno"> 4923</span>   oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l04924"></a><span class="lineno"> 4924</span> </div>
+<div class="line"><a name="l04925"></a><span class="lineno"> 4925</span>   m=0;</div>
+<div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>   <span class="keywordflow">for</span> ( z = z_min; z < z_max ; z++ ) {</div>
+<div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>     m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l04928"></a><span class="lineno"> 4928</span>     pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>     o_img=cpl_imagelist_get(mergedCube,z);</div>
+<div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>     podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l04931"></a><span class="lineno"> 4931</span>     mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l04932"></a><span class="lineno"> 4932</span>     mly=cpl_image_get_size_y(m_img);</div>
+<div class="line"><a name="l04933"></a><span class="lineno"> 4933</span>     <span class="comment">// go through the first image plane of the big data cube </span></div>
+<div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {</div>
+<div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {</div>
+<div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>     avg=0;</div>
+<div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>     nc=0;</div>
+<div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>     <span class="comment">// computes nc </span></div>
+<div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>       t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l04941"></a><span class="lineno"> 4941</span>       ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>           <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>                x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>         posx = x - llx[i] ;</div>
+<div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>         posy = y - lly[i] ;</div>
+<div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>             <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>                        ptdata[posx+posy*ilx] != 0.) {</div>
+<div class="line"><a name="l04948"></a><span class="lineno"> 4948</span>           nc++;</div>
+<div class="line"><a name="l04949"></a><span class="lineno"> 4949</span>         }</div>
+<div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>       }</div>
+<div class="line"><a name="l04951"></a><span class="lineno"> 4951</span>     }</div>
+<div class="line"><a name="l04952"></a><span class="lineno"> 4952</span>         <span class="keywordflow">if</span>( nc > 0 ) {</div>
+<div class="line"><a name="l04953"></a><span class="lineno"> 4953</span> </div>
+<div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>       </div>
+<div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>       msk=cpl_vector_new(n_cubes);</div>
+<div class="line"><a name="l04956"></a><span class="lineno"> 4956</span>       <span class="keywordflow">for</span> (i=0;i<n_cubes;i++) {</div>
+<div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>         cpl_vector_set(msk,i,1);</div>
+<div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>       }</div>
+<div class="line"><a name="l04959"></a><span class="lineno"> 4959</span> </div>
+<div class="line"><a name="l04960"></a><span class="lineno"> 4960</span>       <span class="comment">// k-s clipping </span></div>
+<div class="line"><a name="l04961"></a><span class="lineno"> 4961</span>       nclip=0;</div>
+<div class="line"><a name="l04962"></a><span class="lineno"> 4962</span> </div>
+<div class="line"><a name="l04963"></a><span class="lineno"> 4963</span> </div>
+<div class="line"><a name="l04964"></a><span class="lineno"> 4964</span>       <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {</div>
+<div class="line"><a name="l04965"></a><span class="lineno"> 4965</span>         sig=0;</div>
+<div class="line"><a name="l04966"></a><span class="lineno"> 4966</span>         med=0;</div>
+<div class="line"><a name="l04967"></a><span class="lineno"> 4967</span>         ovr=0;</div>
+<div class="line"><a name="l04968"></a><span class="lineno"> 4968</span>         <span class="keywordflow">if</span>(nc-nclip >0) {</div>
+<div class="line"><a name="l04969"></a><span class="lineno"> 4969</span>           val=cpl_vector_new(nc-nclip);</div>
+<div class="line"><a name="l04970"></a><span class="lineno"> 4970</span>         }</div>
+<div class="line"><a name="l04971"></a><span class="lineno"> 4971</span>         <span class="comment">// fill val </span></div>
+<div class="line"><a name="l04972"></a><span class="lineno"> 4972</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l04973"></a><span class="lineno"> 4973</span>           t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l04974"></a><span class="lineno"> 4974</span>           ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l04975"></a><span class="lineno"> 4975</span>               <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l04976"></a><span class="lineno"> 4976</span>                    x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l04977"></a><span class="lineno"> 4977</span>         posx = x - llx[i] ;</div>
+<div class="line"><a name="l04978"></a><span class="lineno"> 4978</span>         posy = y - lly[i] ;</div>
+<div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>                 <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>                            ptdata[posx+posy*ilx] != 0. &&</div>
+<div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>             (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)ptdata[posx+posy*ilx]);</div>
+<div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>           ovr++;</div>
+<div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>         }</div>
+<div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>           }</div>
+<div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>         }</div>
+<div class="line"><a name="l04987"></a><span class="lineno"> 4987</span> </div>
+<div class="line"><a name="l04988"></a><span class="lineno"> 4988</span>         <span class="comment">// get avg, med, sig </span></div>
+<div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>         <span class="keywordflow">if</span>(ovr>0) {</div>
+<div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>           avg=cpl_vector_get_mean(val);</div>
+<div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>           med=cpl_vector_get_median_const(val);</div>
+<div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>           <span class="keywordflow">if</span>(ovr>1) {</div>
+<div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>         sig=cpl_vector_get_stdev(val);</div>
+<div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>           } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>         sig=0;</div>
+<div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>           }</div>
+<div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>           cpl_vector_delete(val);</div>
+<div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>         }</div>
+<div class="line"><a name="l04999"></a><span class="lineno"> 4999</span> </div>
+<div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>           t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>           ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>           <span class="comment">// Do k-s clipping at each pixel </span></div>
+<div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>               <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>                    x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>         posx = x - llx[i] ;</div>
+<div class="line"><a name="l05007"></a><span class="lineno"> 5007</span>         posy = y - lly[i] ;</div>
+<div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>                 <span class="keywordflow">if</span> (!isnan(ptdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l05009"></a><span class="lineno"> 5009</span>                            ptdata[posx+posy*ilx] != 0. &&</div>
+<div class="line"><a name="l05010"></a><span class="lineno"> 5010</span>             (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l05011"></a><span class="lineno"> 5011</span>           <span class="keywordflow">if</span>(abs((ptdata[posx+posy*ilx]-med))> kappa*sig) {</div>
+<div class="line"><a name="l05012"></a><span class="lineno"> 5012</span>                     ptdata[posx+posy*ilx]=0;</div>
+<div class="line"><a name="l05013"></a><span class="lineno"> 5013</span>             pmdata[x+y*mlx] -= exptimes[i]  ;</div>
+<div class="line"><a name="l05014"></a><span class="lineno"> 5014</span>             cpl_vector_set(msk,i,0);</div>
+<div class="line"><a name="l05015"></a><span class="lineno"> 5015</span>             nclip++;</div>
+<div class="line"><a name="l05016"></a><span class="lineno"> 5016</span>           }</div>
+<div class="line"><a name="l05017"></a><span class="lineno"> 5017</span>         }</div>
+<div class="line"><a name="l05018"></a><span class="lineno"> 5018</span>           }</div>
+<div class="line"><a name="l05019"></a><span class="lineno"> 5019</span>         }</div>
+<div class="line"><a name="l05020"></a><span class="lineno"> 5020</span>       } <span class="comment">// end of k-s clipping </span></div>
+<div class="line"><a name="l05021"></a><span class="lineno"> 5021</span> </div>
+<div class="line"><a name="l05022"></a><span class="lineno"> 5022</span>       msk_sum=0;</div>
+<div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>       val_msk_sum=0;</div>
+<div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05025"></a><span class="lineno"> 5025</span>         v_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l05026"></a><span class="lineno"> 5026</span>         pvdata=cpl_image_get_data_float(v_img);</div>
+<div class="line"><a name="l05027"></a><span class="lineno"> 5027</span>         <span class="comment">// computes sky at each point </span></div>
+<div class="line"><a name="l05028"></a><span class="lineno"> 5028</span>             <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l05029"></a><span class="lineno"> 5029</span>                  x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l05030"></a><span class="lineno"> 5030</span>           posx = x - llx[i] ;</div>
+<div class="line"><a name="l05031"></a><span class="lineno"> 5031</span>           posy = y - lly[i] ;</div>
+<div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>               <span class="comment">//sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span></div>
+<div class="line"><a name="l05033"></a><span class="lineno"> 5033</span>               <span class="comment">//sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span></div>
+<div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>               <span class="keywordflow">if</span> (!isnan(pvdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>                          pvdata[posx+posy*ilx] != 0. &&</div>
+<div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>           (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>         msk_sum+=pmdata[x+y*mlx];</div>
+<div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>                 val_msk_sum+=pvdata[posx+posy*ilx]*</div>
+<div class="line"><a name="l05039"></a><span class="lineno"> 5039</span>           pmdata[x+y*mlx];</div>
+<div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>           }</div>
+<div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>         }</div>
+<div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>       }</div>
+<div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>       podata[x+y*olx]=val_msk_sum/msk_sum;</div>
+<div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>       cpl_vector_delete(msk);</div>
+<div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l05046"></a><span class="lineno"> 5046</span> <span class="comment">      sinfo_ks_clip(n_cubes,nc,ilx,ily,kappa,llx,lly,exptimes,</span></div>
+<div class="line"><a name="l05047"></a><span class="lineno"> 5047</span> <span class="comment">            tmpcubes,podata,pmdata,x,y,m,mlx,oly);</span></div>
+<div class="line"><a name="l05048"></a><span class="lineno"> 5048</span> <span class="comment"></span></div>
+<div class="line"><a name="l05049"></a><span class="lineno"> 5049</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l05050"></a><span class="lineno"> 5050</span> </div>
+<div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>     } <span class="comment">// end check if overlap nc >0  </span></div>
+<div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>       } <span class="comment">// end loop over x </span></div>
+<div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>     } <span class="comment">// end loop over y </span></div>
+<div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>     m++;</div>
+<div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>   } <span class="comment">// end loop over z </span></div>
+<div class="line"><a name="l05056"></a><span class="lineno"> 5056</span> </div>
+<div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05058"></a><span class="lineno"> 5058</span> </div>
+<div class="line"><a name="l05059"></a><span class="lineno"> 5059</span> </div>
+<div class="line"><a name="l05060"></a><span class="lineno"> 5060</span> }</div>
+<div class="line"><a name="l05061"></a><span class="lineno"> 5061</span> </div>
+<div class="line"><a name="l05062"></a><span class="lineno"> 5062</span> </div>
+<div class="line"><a name="l05063"></a><span class="lineno"> 5063</span> </div>
+<div class="line"><a name="l05064"></a><span class="lineno"> 5064</span> </div>
+<div class="line"><a name="l05065"></a><span class="lineno"> 5065</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05066"></a><span class="lineno"> 5066</span> sinfo_compute_contributes_at_pos(cpl_imagelist** tmpcubes, </div>
+<div class="line"><a name="l05067"></a><span class="lineno"> 5067</span>                                  <span class="keywordtype">int</span>* llx, <span class="keywordtype">int</span>* lly, </div>
+<div class="line"><a name="l05068"></a><span class="lineno"> 5068</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> x, <span class="keyword">const</span> <span class="keywordtype">int</span> y,</div>
+<div class="line"><a name="l05069"></a><span class="lineno"> 5069</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> ilx, <span class="keyword">const</span> <span class="keywordtype">int</span> ily, </div>
+<div class="line"><a name="l05070"></a><span class="lineno"> 5070</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> m,<span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes)</div>
+<div class="line"><a name="l05071"></a><span class="lineno"> 5071</span> {</div>
+<div class="line"><a name="l05072"></a><span class="lineno"> 5072</span> </div>
+<div class="line"><a name="l05073"></a><span class="lineno"> 5073</span>    <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l05074"></a><span class="lineno"> 5074</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05075"></a><span class="lineno"> 5075</span>    <span class="keywordtype">int</span> lox=0;</div>
+<div class="line"><a name="l05076"></a><span class="lineno"> 5076</span>    <span class="keywordtype">int</span> loy=0;</div>
+<div class="line"><a name="l05077"></a><span class="lineno"> 5077</span>    <span class="keywordtype">int</span> upx=0;</div>
+<div class="line"><a name="l05078"></a><span class="lineno"> 5078</span>    <span class="keywordtype">int</span> upy=0;</div>
+<div class="line"><a name="l05079"></a><span class="lineno"> 5079</span>    <span class="keywordtype">int</span> post=0;</div>
+<div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>    <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>    <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l05082"></a><span class="lineno"> 5082</span> </div>
+<div class="line"><a name="l05083"></a><span class="lineno"> 5083</span>    <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l05084"></a><span class="lineno"> 5084</span>    cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>   </div>
+<div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>  </div>
+<div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>    <span class="comment">/* computes nc the number of intensity contributes from </span></div>
+<div class="line"><a name="l05088"></a><span class="lineno"> 5088</span> <span class="comment">      each overlapping cube point intensity at x,y</span></div>
+<div class="line"><a name="l05089"></a><span class="lineno"> 5089</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>    <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05091"></a><span class="lineno"> 5091</span>       t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>       ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>       lox=llx[i];</div>
+<div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>       loy=lly[i];</div>
+<div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>       upx=llx[i]+ilx;</div>
+<div class="line"><a name="l05096"></a><span class="lineno"> 5096</span>       upy=lly[i]+ily;</div>
+<div class="line"><a name="l05097"></a><span class="lineno"> 5097</span> </div>
+<div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>       <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {</div>
+<div class="line"><a name="l05099"></a><span class="lineno"> 5099</span>          posx = x - lox;</div>
+<div class="line"><a name="l05100"></a><span class="lineno"> 5100</span>          posy = y - loy;</div>
+<div class="line"><a name="l05101"></a><span class="lineno"> 5101</span>          post = posx+posy*ilx;</div>
+<div class="line"><a name="l05102"></a><span class="lineno"> 5102</span> </div>
+<div class="line"><a name="l05103"></a><span class="lineno"> 5103</span>          <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0.) {</div>
+<div class="line"><a name="l05104"></a><span class="lineno"> 5104</span>             result++;</div>
+<div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>          }</div>
+<div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>       }</div>
+<div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>    }</div>
+<div class="line"><a name="l05108"></a><span class="lineno"> 5108</span> </div>
+<div class="line"><a name="l05109"></a><span class="lineno"> 5109</span> </div>
+<div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05111"></a><span class="lineno"> 5111</span> </div>
+<div class="line"><a name="l05112"></a><span class="lineno"> 5112</span> }</div>
+<div class="line"><a name="l05113"></a><span class="lineno"> 5113</span> </div>
+<div class="line"><a name="l05114"></a><span class="lineno"> 5114</span> </div>
+<div class="line"><a name="l05115"></a><span class="lineno"> 5115</span> </div>
+<div class="line"><a name="l05116"></a><span class="lineno"> 5116</span> </div>
+<div class="line"><a name="l05117"></a><span class="lineno"> 5117</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05118"></a><span class="lineno"> 5118</span> sinfo_cubes_coadd_with_ks_clip(cpl_imagelist** tmpcubes, </div>
+<div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,<span class="keyword">const</span> <span class="keywordtype">int</span> nc,</div>
+<div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> x, <span class="keyword">const</span> <span class="keywordtype">int</span> y, <span class="keyword">const</span> <span class="keywordtype">int</span> m,</div>
+<div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>                                <span class="keywordtype">int</span>* llx, <span class="keywordtype">int</span>* lly, </div>
+<div class="line"><a name="l05122"></a><span class="lineno"> 5122</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> ilx, <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>                                <span class="keyword">const</span> <span class="keywordtype">double</span> kappa, </div>
+<div class="line"><a name="l05124"></a><span class="lineno"> 5124</span>                                <span class="keywordtype">double</span>* exptimes, <span class="keywordtype">float</span>** pmdata, </div>
+<div class="line"><a name="l05125"></a><span class="lineno"> 5125</span>                                cpl_vector** msk, <span class="keyword">const</span> <span class="keywordtype">int</span> mlx)</div>
+<div class="line"><a name="l05126"></a><span class="lineno"> 5126</span> </div>
+<div class="line"><a name="l05127"></a><span class="lineno"> 5127</span> </div>
+<div class="line"><a name="l05128"></a><span class="lineno"> 5128</span> {</div>
+<div class="line"><a name="l05129"></a><span class="lineno"> 5129</span> </div>
+<div class="line"><a name="l05130"></a><span class="lineno"> 5130</span>  </div>
+<div class="line"><a name="l05131"></a><span class="lineno"> 5131</span>    cpl_vector* val=NULL;</div>
+<div class="line"><a name="l05132"></a><span class="lineno"> 5132</span>    cpl_image* t_img=NULL;</div>
+<div class="line"><a name="l05133"></a><span class="lineno"> 5133</span> </div>
+<div class="line"><a name="l05134"></a><span class="lineno"> 5134</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05135"></a><span class="lineno"> 5135</span>    <span class="keywordtype">int</span> nclip=0;</div>
+<div class="line"><a name="l05136"></a><span class="lineno"> 5136</span>    <span class="keywordtype">int</span> ks=0;</div>
+<div class="line"><a name="l05137"></a><span class="lineno"> 5137</span>    </div>
+<div class="line"><a name="l05138"></a><span class="lineno"> 5138</span>    <span class="keywordtype">int</span> lox=0;</div>
+<div class="line"><a name="l05139"></a><span class="lineno"> 5139</span>    <span class="keywordtype">int</span> loy=0;</div>
+<div class="line"><a name="l05140"></a><span class="lineno"> 5140</span>    <span class="keywordtype">int</span> upx=0;</div>
+<div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>    <span class="keywordtype">int</span> upy=0;</div>
+<div class="line"><a name="l05142"></a><span class="lineno"> 5142</span> </div>
+<div class="line"><a name="l05143"></a><span class="lineno"> 5143</span>    <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l05144"></a><span class="lineno"> 5144</span>    <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>    <span class="keywordtype">int</span> post=0;</div>
+<div class="line"><a name="l05146"></a><span class="lineno"> 5146</span> </div>
+<div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>    <span class="keywordtype">int</span> ovr=0;</div>
+<div class="line"><a name="l05148"></a><span class="lineno"> 5148</span> </div>
+<div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>    <span class="keywordtype">float</span> sig=0;</div>
+<div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>    <span class="keywordtype">float</span> avg=0;</div>
+<div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>    <span class="keywordtype">float</span> med=0;</div>
+<div class="line"><a name="l05152"></a><span class="lineno"> 5152</span> </div>
+<div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>    <span class="keywordtype">float</span>* ptdata=NULL;</div>
+<div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>    </div>
+<div class="line"><a name="l05155"></a><span class="lineno"> 5155</span> </div>
+<div class="line"><a name="l05156"></a><span class="lineno"> 5156</span>    <span class="comment">// k-s clipping </span></div>
+<div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>    nclip=0;</div>
+<div class="line"><a name="l05158"></a><span class="lineno"> 5158</span> </div>
+<div class="line"><a name="l05159"></a><span class="lineno"> 5159</span> </div>
+<div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>    <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {</div>
+<div class="line"><a name="l05161"></a><span class="lineno"> 5161</span>       sig=0;</div>
+<div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>       med=0;</div>
+<div class="line"><a name="l05163"></a><span class="lineno"> 5163</span>       ovr=0;</div>
+<div class="line"><a name="l05164"></a><span class="lineno"> 5164</span>       <span class="keywordflow">if</span>(nc-nclip >0) {</div>
+<div class="line"><a name="l05165"></a><span class="lineno"> 5165</span>          check_nomsg(val=cpl_vector_new(nc-nclip));</div>
+<div class="line"><a name="l05166"></a><span class="lineno"> 5166</span>       }</div>
+<div class="line"><a name="l05167"></a><span class="lineno"> 5167</span>       <span class="comment">// fill val </span></div>
+<div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05169"></a><span class="lineno"> 5169</span>          check_nomsg(t_img=cpl_imagelist_get(tmpcubes[i],m));</div>
+<div class="line"><a name="l05170"></a><span class="lineno"> 5170</span>          check_nomsg(ptdata=cpl_image_get_data_float(t_img));</div>
+<div class="line"><a name="l05171"></a><span class="lineno"> 5171</span> </div>
+<div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>          lox=llx[i];</div>
+<div class="line"><a name="l05173"></a><span class="lineno"> 5173</span>          loy=lly[i];</div>
+<div class="line"><a name="l05174"></a><span class="lineno"> 5174</span>          upx=llx[i]+ilx;</div>
+<div class="line"><a name="l05175"></a><span class="lineno"> 5175</span>          upy=lly[i]+ily;</div>
+<div class="line"><a name="l05176"></a><span class="lineno"> 5176</span> </div>
+<div class="line"><a name="l05177"></a><span class="lineno"> 5177</span>          <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {</div>
+<div class="line"><a name="l05178"></a><span class="lineno"> 5178</span>             posx = x - lox ;</div>
+<div class="line"><a name="l05179"></a><span class="lineno"> 5179</span>             posy = y - loy ;</div>
+<div class="line"><a name="l05180"></a><span class="lineno"> 5180</span>             post=posx+posy*ilx;</div>
+<div class="line"><a name="l05181"></a><span class="lineno"> 5181</span> </div>
+<div class="line"><a name="l05182"></a><span class="lineno"> 5182</span>             <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0. &&</div>
+<div class="line"><a name="l05183"></a><span class="lineno"> 5183</span>                 (cpl_vector_get(*msk,i) != 0)) {</div>
+<div class="line"><a name="l05184"></a><span class="lineno"> 5184</span>                cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)ptdata[post]);</div>
+<div class="line"><a name="l05185"></a><span class="lineno"> 5185</span>                ovr++;</div>
+<div class="line"><a name="l05186"></a><span class="lineno"> 5186</span>             }</div>
+<div class="line"><a name="l05187"></a><span class="lineno"> 5187</span>          }</div>
+<div class="line"><a name="l05188"></a><span class="lineno"> 5188</span>       }</div>
+<div class="line"><a name="l05189"></a><span class="lineno"> 5189</span> </div>
+<div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>       <span class="comment">// get avg, med, sig </span></div>
+<div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>       <span class="keywordflow">if</span>(ovr>0) {</div>
+<div class="line"><a name="l05192"></a><span class="lineno"> 5192</span>          check_nomsg(avg=cpl_vector_get_mean(val));</div>
+<div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>          med=cpl_vector_get_median_const(val);</div>
+<div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>          <span class="keywordflow">if</span>(ovr>1) {</div>
+<div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>             sig=cpl_vector_get_stdev(val);</div>
+<div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>             sig=0;</div>
+<div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>          }</div>
+<div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>          cpl_vector_delete(val);</div>
+<div class="line"><a name="l05200"></a><span class="lineno"> 5200</span>       }</div>
+<div class="line"><a name="l05201"></a><span class="lineno"> 5201</span> </div>
+<div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05203"></a><span class="lineno"> 5203</span>          t_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>          ptdata=cpl_image_get_data_float(t_img);</div>
+<div class="line"><a name="l05205"></a><span class="lineno"> 5205</span> </div>
+<div class="line"><a name="l05206"></a><span class="lineno"> 5206</span>          lox=llx[i];</div>
+<div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>          loy=lly[i];</div>
+<div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>          upx=llx[i]+ilx;</div>
+<div class="line"><a name="l05209"></a><span class="lineno"> 5209</span>          upy=lly[i]+ily;</div>
+<div class="line"><a name="l05210"></a><span class="lineno"> 5210</span> </div>
+<div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>          <span class="comment">// Do k-s clipping at each pixel </span></div>
+<div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>          <span class="keywordflow">if</span> ( y >= loy && y < upy && x >= lox && x < upx ) {</div>
+<div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>             posx = x - lox ;</div>
+<div class="line"><a name="l05214"></a><span class="lineno"> 5214</span>             posy = y - loy ;</div>
+<div class="line"><a name="l05215"></a><span class="lineno"> 5215</span>             post = posx+posy*ilx;</div>
+<div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>             <span class="keywordflow">if</span> (!isnan(ptdata[post]) && ptdata[post] != 0. &&</div>
+<div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>                 (cpl_vector_get(*msk,i) != 0)) {</div>
+<div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>                <span class="keywordflow">if</span>( abs( (ptdata[post]-med) ) > kappa*sig ) {</div>
+<div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>                   ptdata[post]=0;</div>
+<div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>                   (*pmdata)[x+y*mlx] -= exptimes[i]  ;</div>
+<div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>                   check_nomsg(cpl_vector_set(*msk,i,0));</div>
+<div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>                   nclip++;</div>
+<div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>                }</div>
+<div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>             }</div>
+<div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>          }</div>
+<div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>       }</div>
+<div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>    } <span class="comment">// end of k-s clipping </span></div>
+<div class="line"><a name="l05228"></a><span class="lineno"> 5228</span> </div>
+<div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>   cleanup:</div>
+<div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05231"></a><span class="lineno"> 5231</span> }</div>
+<div class="line"><a name="l05232"></a><span class="lineno"> 5232</span> </div>
+<div class="line"><a name="l05255"></a><span class="lineno"> 5255</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05256"></a><span class="lineno"> 5256</span> sinfo_coadd_with_ks_clip2(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l05258"></a><span class="lineno"> 5258</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ilx,</div>
+<div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ily,</div>
+<div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l05263"></a><span class="lineno"> 5263</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>                         <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>             cpl_imagelist* mask,</div>
+<div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>                         cpl_imagelist** tmpcubes)</div>
+<div class="line"><a name="l05268"></a><span class="lineno"> 5268</span> </div>
+<div class="line"><a name="l05269"></a><span class="lineno"> 5269</span> {</div>
+<div class="line"><a name="l05270"></a><span class="lineno"> 5270</span> </div>
+<div class="line"><a name="l05271"></a><span class="lineno"> 5271</span>   <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l05275"></a><span class="lineno"> 5275</span> </div>
+<div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>   <span class="keywordtype">int</span> mlx=0;</div>
+<div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>   <span class="keywordtype">int</span> mly=0;</div>
+<div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>   <span class="keywordtype">int</span> nc=0;</div>
+<div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>   <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>   <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>   <span class="keywordtype">int</span> posx=0;</div>
+<div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>   <span class="keywordtype">int</span> posy=0;</div>
+<div class="line"><a name="l05283"></a><span class="lineno"> 5283</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05284"></a><span class="lineno"> 5284</span> </div>
+<div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>   <span class="keywordtype">float</span>  msk_sum=0;</div>
+<div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>   <span class="keywordtype">float</span>  val_msk_sum=0;</div>
+<div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>   <span class="keywordtype">float</span> avg=0;</div>
+<div class="line"><a name="l05288"></a><span class="lineno"> 5288</span> </div>
+<div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>   <span class="keywordtype">float</span>* pmdata=NULL;</div>
+<div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>   <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l05291"></a><span class="lineno"> 5291</span>   <span class="keywordtype">float</span>* pvdata=NULL;</div>
+<div class="line"><a name="l05292"></a><span class="lineno"> 5292</span> </div>
+<div class="line"><a name="l05293"></a><span class="lineno"> 5293</span>   cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l05294"></a><span class="lineno"> 5294</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l05295"></a><span class="lineno"> 5295</span>   cpl_image* v_img=NULL;</div>
+<div class="line"><a name="l05296"></a><span class="lineno"> 5296</span> </div>
+<div class="line"><a name="l05297"></a><span class="lineno"> 5297</span> </div>
+<div class="line"><a name="l05298"></a><span class="lineno"> 5298</span>   cpl_vector* msk=NULL;</div>
+<div class="line"><a name="l05299"></a><span class="lineno"> 5299</span> </div>
+<div class="line"><a name="l05300"></a><span class="lineno"> 5300</span> </div>
+<div class="line"><a name="l05301"></a><span class="lineno"> 5301</span>   o_img=cpl_imagelist_get(mergedCube,0);</div>
+<div class="line"><a name="l05302"></a><span class="lineno"> 5302</span>   olx=cpl_image_get_size_x(o_img);</div>
+<div class="line"><a name="l05303"></a><span class="lineno"> 5303</span>   oly=cpl_image_get_size_y(o_img);</div>
+<div class="line"><a name="l05304"></a><span class="lineno"> 5304</span> </div>
+<div class="line"><a name="l05305"></a><span class="lineno"> 5305</span>   m=0;</div>
+<div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>   <span class="keywordflow">for</span> ( z = z_min; z < z_max ; z++ ) {</div>
+<div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>     m_img=cpl_imagelist_get(mask,z);</div>
+<div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>     pmdata=cpl_image_get_data_float(m_img);</div>
+<div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>     o_img=cpl_imagelist_get(mergedCube,z);</div>
+<div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>     podata=cpl_image_get_data_float(o_img);</div>
+<div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>     mlx=cpl_image_get_size_x(m_img);</div>
+<div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>     mly=cpl_image_get_size_y(m_img);</div>
+<div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>     <span class="comment">// go through the first image plane of the big data cube </span></div>
+<div class="line"><a name="l05314"></a><span class="lineno"> 5314</span>     <span class="keywordflow">for</span> ( y = 0 ; y < oly ; y++ ) {</div>
+<div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>       <span class="keywordflow">for</span> ( x = 0 ; x < olx ; x++ ) {</div>
+<div class="line"><a name="l05316"></a><span class="lineno"> 5316</span>     avg=0;</div>
+<div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>     nc=0;</div>
+<div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>     <span class="comment">// computes nc </span></div>
+<div class="line"><a name="l05319"></a><span class="lineno"> 5319</span> </div>
+<div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>         nc=sinfo_compute_contributes_at_pos(tmpcubes,llx,lly,x,y,</div>
+<div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>                                             ilx,ily,m,n_cubes);</div>
+<div class="line"><a name="l05322"></a><span class="lineno"> 5322</span> </div>
+<div class="line"><a name="l05323"></a><span class="lineno"> 5323</span>         <span class="keywordflow">if</span>( nc > 0 ) {</div>
+<div class="line"><a name="l05324"></a><span class="lineno"> 5324</span> </div>
+<div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>       </div>
+<div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>       msk=cpl_vector_new(n_cubes);</div>
+<div class="line"><a name="l05327"></a><span class="lineno"> 5327</span>       <span class="keywordflow">for</span> (i=0;i<n_cubes;i++) {</div>
+<div class="line"><a name="l05328"></a><span class="lineno"> 5328</span>         cpl_vector_set(msk,i,1);</div>
+<div class="line"><a name="l05329"></a><span class="lineno"> 5329</span>       }</div>
+<div class="line"><a name="l05330"></a><span class="lineno"> 5330</span> </div>
+<div class="line"><a name="l05331"></a><span class="lineno"> 5331</span> </div>
+<div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>            sinfo_cubes_coadd_with_ks_clip(tmpcubes, n_cubes,nc,x,y,m,</div>
+<div class="line"><a name="l05333"></a><span class="lineno"> 5333</span>                                           llx,lly,ilx,ily,kappa, </div>
+<div class="line"><a name="l05334"></a><span class="lineno"> 5334</span>                                           exptimes,&pmdata, &msk,mlx);</div>
+<div class="line"><a name="l05335"></a><span class="lineno"> 5335</span> </div>
+<div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>       msk_sum=0;</div>
+<div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>       val_msk_sum=0;</div>
+<div class="line"><a name="l05338"></a><span class="lineno"> 5338</span>       <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l05339"></a><span class="lineno"> 5339</span>         v_img=cpl_imagelist_get(tmpcubes[i],m);</div>
+<div class="line"><a name="l05340"></a><span class="lineno"> 5340</span>         pvdata=cpl_image_get_data_float(v_img);</div>
+<div class="line"><a name="l05341"></a><span class="lineno"> 5341</span>         <span class="comment">// computes sky at each point </span></div>
+<div class="line"><a name="l05342"></a><span class="lineno"> 5342</span>             <span class="keywordflow">if</span> ( y >= lly[i] && y < lly[i]+ily &&</div>
+<div class="line"><a name="l05343"></a><span class="lineno"> 5343</span>                  x >= llx[i] && x < llx[i]+ilx ) {</div>
+<div class="line"><a name="l05344"></a><span class="lineno"> 5344</span>           posx = x - llx[i] ;</div>
+<div class="line"><a name="l05345"></a><span class="lineno"> 5345</span>           posy = y - lly[i] ;</div>
+<div class="line"><a name="l05346"></a><span class="lineno"> 5346</span>               <span class="comment">//sinfo_msg_warning("llx[%d]=%d lly[%d],=%d",i,llx[i],i,lly[i]);</span></div>
+<div class="line"><a name="l05347"></a><span class="lineno"> 5347</span>               <span class="comment">//sinfo_msg_warning("posx=%d posy=%d",posx,posy);</span></div>
+<div class="line"><a name="l05348"></a><span class="lineno"> 5348</span>               <span class="keywordflow">if</span> (!isnan(pvdata[posx+posy*ilx]) &&</div>
+<div class="line"><a name="l05349"></a><span class="lineno"> 5349</span>                          pvdata[posx+posy*ilx] != 0. &&</div>
+<div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>           (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l05351"></a><span class="lineno"> 5351</span>         msk_sum+=pmdata[x+y*mlx];</div>
+<div class="line"><a name="l05352"></a><span class="lineno"> 5352</span>                 val_msk_sum+=pvdata[posx+posy*ilx]*</div>
+<div class="line"><a name="l05353"></a><span class="lineno"> 5353</span>           pmdata[x+y*mlx];</div>
+<div class="line"><a name="l05354"></a><span class="lineno"> 5354</span>           }</div>
+<div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>         }</div>
+<div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>       }</div>
+<div class="line"><a name="l05357"></a><span class="lineno"> 5357</span>       podata[x+y*olx]=val_msk_sum/msk_sum;</div>
+<div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>       cpl_vector_delete(msk);</div>
+<div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l05360"></a><span class="lineno"> 5360</span> <span class="comment">      sinfo_ks_clip(n_cubes,nc,ilx,ily,kappa,llx,lly,exptimes,</span></div>
+<div class="line"><a name="l05361"></a><span class="lineno"> 5361</span> <span class="comment">            tmpcubes,podata,pmdata,x,y,m,mlx,oly);</span></div>
+<div class="line"><a name="l05362"></a><span class="lineno"> 5362</span> <span class="comment"></span></div>
+<div class="line"><a name="l05363"></a><span class="lineno"> 5363</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l05364"></a><span class="lineno"> 5364</span> </div>
+<div class="line"><a name="l05365"></a><span class="lineno"> 5365</span>     } <span class="comment">// end check if overlap nc >0  </span></div>
+<div class="line"><a name="l05366"></a><span class="lineno"> 5366</span>       } <span class="comment">// end loop over x </span></div>
+<div class="line"><a name="l05367"></a><span class="lineno"> 5367</span>     } <span class="comment">// end loop over y </span></div>
+<div class="line"><a name="l05368"></a><span class="lineno"> 5368</span>     m++;</div>
+<div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>   } <span class="comment">// end loop over z </span></div>
+<div class="line"><a name="l05370"></a><span class="lineno"> 5370</span> </div>
+<div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05372"></a><span class="lineno"> 5372</span> </div>
+<div class="line"><a name="l05373"></a><span class="lineno"> 5373</span> </div>
+<div class="line"><a name="l05374"></a><span class="lineno"> 5374</span> }</div>
+<div class="line"><a name="l05375"></a><span class="lineno"> 5375</span> </div>
+<div class="line"><a name="l05376"></a><span class="lineno"> 5376</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cube__ops_8h_source.html b/html/sinfo__new__cube__ops_8h_source.html
index 922cb7c..7e7191b 100644
--- a/html/sinfo__new__cube__ops_8h_source.html
+++ b/html/sinfo__new__cube__ops_8h_source.html
@@ -2,315 +2,346 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cube_ops.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cube_ops.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_CUBE_OPS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBE_OPS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  18/05/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment"> * sinfo_new_cube_ops.h</span>
-<a name="l00031"></a>00031 <span class="comment"> * cube arithmetic routines</span>
-<a name="l00032"></a>00032 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment"> */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*</span>
-<a name="l00036"></a>00036 <span class="comment"> * header files</span>
-<a name="l00037"></a>00037 <span class="comment"> */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00060"></a>00060 cpl_imagelist *
-<a name="l00061"></a>00061 sinfo_new_cube_ops(
-<a name="l00062"></a>00062     cpl_imagelist *  cube1,
-<a name="l00063"></a>00063     cpl_imagelist *   cube2,
-<a name="l00064"></a>00064     <span class="keywordtype">int</span>         operation);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00087"></a>00087 cpl_imagelist *
-<a name="l00088"></a>00088 sinfo_new_cube_const_ops(
-<a name="l00089"></a>00089     cpl_imagelist *  cube1,
-<a name="l00090"></a>00090     <span class="keywordtype">double</span>     constant,
-<a name="l00091"></a>00091     <span class="keywordtype">int</span>        operation);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 
-<a name="l00102"></a>00102 cpl_imagelist *
-<a name="l00103"></a>00103 sinfo_new_cube_sub(
-<a name="l00104"></a>00104     cpl_imagelist    *    c1,
-<a name="l00105"></a>00105     cpl_imagelist    *    c2
-<a name="l00106"></a>00106 ) ;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00118"></a>00118 cpl_imagelist *
-<a name="l00119"></a>00119 sinfo_new_cube_add(
-<a name="l00120"></a>00120     cpl_imagelist    *    c1,
-<a name="l00121"></a>00121     cpl_imagelist    *    c2
-<a name="l00122"></a>00122 ) ;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00133"></a>00133 cpl_imagelist *
-<a name="l00134"></a>00134 sinfo_new_cube_mul(
-<a name="l00135"></a>00135     cpl_imagelist    *    c1,
-<a name="l00136"></a>00136     cpl_imagelist    *    c2
-<a name="l00137"></a>00137 ) ;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 
-<a name="l00149"></a>00149 cpl_imagelist *
-<a name="l00150"></a>00150 sinfo_new_cube_div(
-<a name="l00151"></a>00151     cpl_imagelist    *    c1,
-<a name="l00152"></a>00152     cpl_imagelist    *    c2
-<a name="l00153"></a>00153 ) ;
-<a name="l00154"></a>00154 
-<a name="l00163"></a>00163 cpl_imagelist *
-<a name="l00164"></a>00164 sinfo_new_add_image_to_cube(cpl_imagelist * cu, cpl_image * im);
-<a name="l00165"></a>00165 
-<a name="l00174"></a>00174 cpl_imagelist *
-<a name="l00175"></a>00175 sinfo_new_sub_image_from_cube(cpl_imagelist * cu, cpl_image * im);
-<a name="l00176"></a>00176 
-<a name="l00185"></a>00185 cpl_imagelist *
-<a name="l00186"></a>00186 sinfo_new_mul_image_to_cube(cpl_imagelist * cu, cpl_image * im);
-<a name="l00187"></a>00187 
-<a name="l00196"></a>00196 cpl_imagelist *
-<a name="l00197"></a>00197 sinfo_new_div_cube_by_image(cpl_imagelist * cu, cpl_image * im);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 
-<a name="l00208"></a>00208 cpl_imagelist *
-<a name="l00209"></a>00209 sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu, Vector *spec);
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 
-<a name="l00220"></a>00220 cpl_imagelist *
-<a name="l00221"></a>00221 sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu, Vector *spec);
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 
-<a name="l00232"></a>00232 cpl_imagelist *
-<a name="l00233"></a>00233 sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu, Vector *spec);
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00244"></a>00244 cpl_imagelist *
-<a name="l00245"></a>00245 sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu, Vector *spec);
-<a name="l00246"></a>00246 
-<a name="l00266"></a>00266 Vector *
-<a name="l00267"></a>00267 sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,
-<a name="l00268"></a>00268                              <span class="keywordtype">int</span> llx,
-<a name="l00269"></a>00269                              <span class="keywordtype">int</span> lly,
-<a name="l00270"></a>00270                              <span class="keywordtype">int</span> urx,
-<a name="l00271"></a>00271                              <span class="keywordtype">int</span> ury,
-<a name="l00272"></a>00272                              <span class="keywordtype">double</span> lo_reject,
-<a name="l00273"></a>00273                              <span class="keywordtype">double</span> hi_reject);
-<a name="l00274"></a>00274 
-<a name="l00286"></a>00286 cpl_image *
-<a name="l00287"></a>00287 sinfo_new_median_cube(cpl_imagelist * cube) ;
-<a name="l00288"></a>00288 
-<a name="l00300"></a>00300 cpl_image *
-<a name="l00301"></a>00301 sinfo_new_average_cube_to_image(cpl_imagelist * cube) ;
-<a name="l00302"></a>00302 
-<a name="l00313"></a>00313 cpl_image *
-<a name="l00314"></a>00314 sinfo_new_sum_cube_to_image(cpl_imagelist * cube) ;
-<a name="l00315"></a>00315 
-<a name="l00338"></a>00338 cpl_image *
-<a name="l00339"></a>00339 sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,
-<a name="l00340"></a>00340                                            <span class="keywordtype">float</span>     dispersion,
-<a name="l00341"></a>00341                                            <span class="keywordtype">float</span>     centralWave,
-<a name="l00342"></a>00342                                            <span class="keywordtype">float</span>     initialLambda,
-<a name="l00343"></a>00343                                            <span class="keywordtype">float</span>     finalLambda) ;
-<a name="l00344"></a>00344 
-<a name="l00352"></a>00352 cpl_image *
-<a name="l00353"></a>00353 sinfo_new_extract_image_from_cube(cpl_imagelist * cube, <span class="keywordtype">int</span> plane_index) ;
-<a name="l00354"></a>00354 
-<a name="l00363"></a>00363 Vector *
-<a name="l00364"></a>00364 sinfo_new_extract_spectrum_from_cube(cpl_imagelist * cube,
-<a name="l00365"></a>00365                                      <span class="keywordtype">int</span> x_pos,
-<a name="l00366"></a>00366                                      <span class="keywordtype">int</span> y_pos ) ;
-<a name="l00367"></a>00367 
-<a name="l00408"></a>00408 cpl_imagelist *
-<a name="l00409"></a>00409 sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,
-<a name="l00410"></a>00410                                  cpl_imagelist  * mergedCube,
-<a name="l00411"></a>00411                                  <span class="keywordtype">int</span>        n_cubes,
-<a name="l00412"></a>00412                                  <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00413"></a>00413                                  <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00414"></a>00414                                  <span class="keywordtype">float</span>    * exptimes,
-<a name="l00415"></a>00415                    <span class="keywordtype">char</span>     * kernel_type );
-<a name="l00416"></a>00416 
-<a name="l00458"></a>00458 cpl_imagelist *
-<a name="l00459"></a>00459 new_combine_jittered_cubes_it ( cpl_imagelist ** cubes,
-<a name="l00460"></a>00460                                  cpl_imagelist *  mergedCube,
-<a name="l00461"></a>00461                                  cpl_imagelist *  mask,
-<a name="l00462"></a>00462                                  <span class="keywordtype">int</span>        n_cubes,
-<a name="l00463"></a>00463                                  <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00464"></a>00464                                  <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00465"></a>00465                                  <span class="keywordtype">float</span>    * exptimes,
-<a name="l00466"></a>00466                                  <span class="keywordtype">char</span>     * kernel_type,
-<a name="l00467"></a>00467                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z) ;
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469 
-<a name="l00511"></a>00511 <span class="keywordtype">int</span>
-<a name="l00512"></a>00512 sinfo_new_combine_jittered_cubes_thomas_range(cpl_imagelist ** cubes,
-<a name="l00513"></a>00513                     cpl_imagelist  * mergedCube,
-<a name="l00514"></a>00514                     cpl_imagelist  * mask,
-<a name="l00515"></a>00515                     <span class="keywordtype">int</span>        n_cubes,
-<a name="l00516"></a>00516                     <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00517"></a>00517                     <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00518"></a>00518                     <span class="keywordtype">double</span>    * exptimes,
-<a name="l00519"></a>00519                     <span class="keywordtype">char</span>     * kernel_type,
-<a name="l00520"></a>00520                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00521"></a>00521                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00522"></a>00522                                     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa );
-<a name="l00523"></a>00523 
-<a name="l00564"></a>00564 <span class="keywordtype">int</span>
-<a name="l00565"></a>00565 new_combine_jittered_cubes_sky_range (cpl_imagelist ** cubes,
-<a name="l00566"></a>00566                    cpl_imagelist  * mergedCube,
-<a name="l00567"></a>00567                    cpl_imagelist  * mask,
-<a name="l00568"></a>00568                    cpl_imagelist  * mergedSky,
-<a name="l00569"></a>00569                    cpl_imagelist  * mergedMsk,
-<a name="l00570"></a>00570                    cpl_imagelist  * mergeMed,
-<a name="l00571"></a>00571                    cpl_imagelist  * mergeAvg,
-<a name="l00572"></a>00572                    cpl_imagelist  * mergeStd,
-<a name="l00573"></a>00573                    cpl_imagelist  * mergeNc,
-<a name="l00574"></a>00574                    <span class="keywordtype">int</span>        n_cubes,
-<a name="l00575"></a>00575                    <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00576"></a>00576                    <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00577"></a>00577                    <span class="keywordtype">float</span>    * exptimes,
-<a name="l00578"></a>00578                    <span class="keywordtype">char</span>     * kernel_type,
-<a name="l00579"></a>00579                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00580"></a>00580                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);
-<a name="l00581"></a>00581 
-<a name="l00621"></a>00621 <span class="keywordtype">int</span>
-<a name="l00622"></a>00622 sinfo_new_combine_jittered_cubes_range ( cpl_imagelist ** cubes,
-<a name="l00623"></a>00623                                  cpl_imagelist  * mergedCube,
-<a name="l00624"></a>00624                                  cpl_imagelist  * mask,
-<a name="l00625"></a>00625                                  <span class="keywordtype">int</span>        n_cubes,
-<a name="l00626"></a>00626                                  <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00627"></a>00627                                  <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00628"></a>00628                                  <span class="keywordtype">double</span>    * exptimes,
-<a name="l00629"></a>00629                                  <span class="keywordtype">char</span>     * kernel_type,
-<a name="l00630"></a>00630                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z_min, <span class="keyword">const</span> <span class="keywordtype">int</span> z_max );
-<a name="l00631"></a>00631 
-<a name="l00672"></a>00672 <span class="keywordtype">int</span>
-<a name="l00673"></a>00673 new_combine_jittered_cubes_sky_range2 (cpl_imagelist ** cubes,
-<a name="l00674"></a>00674                    cpl_imagelist  * mergedCube,
-<a name="l00675"></a>00675                    cpl_imagelist  * mask,
-<a name="l00676"></a>00676                    cpl_imagelist  * mergedSky,
-<a name="l00677"></a>00677                    cpl_imagelist  * mergedMsk,
-<a name="l00678"></a>00678                    cpl_imagelist  * mergeMed,
-<a name="l00679"></a>00679                    cpl_imagelist  * mergeAvg,
-<a name="l00680"></a>00680                    cpl_imagelist  * mergeStd,
-<a name="l00681"></a>00681                    cpl_imagelist  * mergeNc,
-<a name="l00682"></a>00682                    <span class="keywordtype">int</span>        n_cubes,
-<a name="l00683"></a>00683                    <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00684"></a>00684                    <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00685"></a>00685                    <span class="keywordtype">double</span>    * exptimes,
-<a name="l00686"></a>00686                    <span class="keywordtype">char</span>     * kernel_type,
-<a name="l00687"></a>00687                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00688"></a>00688                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690 
-<a name="l00703"></a>00703 cpl_imagelist *
-<a name="l00704"></a>00704 sinfo_new_interpol_cube_simple( cpl_imagelist * cube,
-<a name="l00705"></a>00705                               cpl_imagelist * badcube,
-<a name="l00706"></a>00706                               <span class="keywordtype">int</span>       maxdist ) ;
-<a name="l00707"></a>00707 
-<a name="l00744"></a>00744 cpl_imagelist *
-<a name="l00745"></a>00745 sinfo_new_combine_cubes ( cpl_imagelist ** cubes,
-<a name="l00746"></a>00746                          cpl_imagelist  * mergedCube,
-<a name="l00747"></a>00747                          <span class="keywordtype">int</span>        n_cubes,
-<a name="l00748"></a>00748                          <span class="keywordtype">float</span>    * cumoffsetx,
-<a name="l00749"></a>00749                          <span class="keywordtype">float</span>    * cumoffsety,
-<a name="l00750"></a>00750                          <span class="keywordtype">float</span>      factor,
-<a name="l00751"></a>00751                          <span class="keywordtype">char</span>     * kernel_type ) ;
-<a name="l00752"></a>00752 
-<a name="l00764"></a>00764 cpl_imagelist *
-<a name="l00765"></a>00765 sinfo_new_bin_cube(cpl_imagelist *cu,
-<a name="l00766"></a>00766                    <span class="keywordtype">int</span> xscale,
-<a name="l00767"></a>00767                    <span class="keywordtype">int</span> yscale,
-<a name="l00768"></a>00768                    <span class="keywordtype">int</span> xmin,
-<a name="l00769"></a>00769                    <span class="keywordtype">int</span> xmax,
-<a name="l00770"></a>00770                    <span class="keywordtype">int</span> ymin,
-<a name="l00771"></a>00771                    <span class="keywordtype">int</span> ymax);
-<a name="l00772"></a>00772 
-<a name="l00792"></a>00792 cpl_imagelist *
-<a name="l00793"></a>00793 sinfo_new_scale_cube(cpl_imagelist *cu,
-<a name="l00794"></a>00794                      <span class="keywordtype">float</span> xscale,
-<a name="l00795"></a>00795                      <span class="keywordtype">float</span> yscale,
-<a name="l00796"></a>00796                      <span class="keywordtype">char</span> * kernel_type);
-<a name="l00797"></a>00797 
-<a name="l00798"></a>00798 
-<a name="l00808"></a>00808 cpl_imagelist *
-<a name="l00809"></a>00809 sinfo_cube_zshift(<span class="keyword">const</span> cpl_imagelist * cube,
-<a name="l00810"></a>00810                   <span class="keyword">const</span> <span class="keywordtype">double</span> shift,
-<a name="l00811"></a>00811                   <span class="keywordtype">double</span>* rest);
-<a name="l00812"></a>00812 
-<a name="l00822"></a>00822 cpl_imagelist *
-<a name="l00823"></a>00823 sinfo_cube_zshift_poly(<span class="keyword">const</span> cpl_imagelist * cube,
-<a name="l00824"></a>00824                        <span class="keyword">const</span> <span class="keywordtype">double</span> shift,
-<a name="l00825"></a>00825                        <span class="keyword">const</span> <span class="keywordtype">int</span>    order);
-<a name="l00826"></a>00826 
-<a name="l00835"></a>00835 cpl_imagelist *
-<a name="l00836"></a>00836 sinfo_cube_zshift_spline3(<span class="keyword">const</span> cpl_imagelist * cube,
-<a name="l00837"></a>00837                           <span class="keyword">const</span> <span class="keywordtype">double</span> shift);
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840 <span class="keywordtype">int</span>
-<a name="l00841"></a>00841 sinfo_coadd_with_ks_clip_optimized(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00842"></a>00842             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,
-<a name="l00843"></a>00843             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,
-<a name="l00844"></a>00844             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00845"></a>00845             <span class="keywordtype">int</span>* llx,
-<a name="l00846"></a>00846             <span class="keywordtype">int</span>* lly,
-<a name="l00847"></a>00847                         <span class="keywordtype">double</span>* exptimes,
-<a name="l00848"></a>00848             cpl_imagelist* mask,
-<a name="l00849"></a>00849             cpl_imagelist* mergedCube,
-<a name="l00850"></a>00850                         cpl_imagelist** tmpcubes);
-<a name="l00851"></a>00851 
-<a name="l00852"></a>00852 <span class="keywordtype">double</span> kappa_sigma_array_with_mask(
-<a name="l00853"></a>00853         cpl_array* parray,
-<a name="l00854"></a>00854         <span class="keywordtype">int</span> szArray,
-<a name="l00855"></a>00855         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,
-<a name="l00856"></a>00856         cpl_image* imMask,
-<a name="l00857"></a>00857         <span class="keywordtype">double</span>* exptimes,
-<a name="l00858"></a>00858         <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">double</span> mas_adjustment
-<a name="l00859"></a>00859         <span class="comment">/*, double* val_msk_sum*/</span>);
-<a name="l00860"></a>00860 <span class="preprocessor">#endif </span>
-<a name="l00864"></a>00864 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cube_ops.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_CUBE_OPS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBE_OPS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  18/05/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * sinfo_new_cube_ops.h</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * cube arithmetic routines</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> cpl_imagelist *</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> sinfo_new_cube_ops(</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     cpl_imagelist *  cube1,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     cpl_imagelist *   cube2,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     <span class="keywordtype">int</span>         operation);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> cpl_imagelist *</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> sinfo_new_cube_const_ops(</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_imagelist *  cube1,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">double</span>     constant,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">int</span>        operation);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> cpl_imagelist *</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_new_cube_sub(</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> ) ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> cpl_imagelist *</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> sinfo_new_cube_add(</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> ) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> cpl_imagelist *</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> sinfo_new_cube_mul(</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> ) ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> cpl_imagelist *</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> sinfo_new_cube_div(</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_imagelist    *    c1,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_imagelist    *    c2</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> ) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> cpl_imagelist *</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> sinfo_new_add_image_to_cube(cpl_imagelist * cu, cpl_image * im);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> cpl_imagelist *</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> sinfo_new_sub_image_from_cube(cpl_imagelist * cu, cpl_image * im);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> cpl_imagelist *</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> sinfo_new_mul_image_to_cube(cpl_imagelist * cu, cpl_image * im);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> cpl_imagelist *</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> sinfo_new_div_cube_by_image(cpl_imagelist * cu, cpl_image * im);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> cpl_imagelist *</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> sinfo_new_add_spectrum_to_cube(cpl_imagelist *cu, Vector *spec);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> cpl_imagelist *</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> sinfo_new_sub_spectrum_from_cube(cpl_imagelist *cu, Vector *spec);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> cpl_imagelist *</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> sinfo_new_mul_spectrum_to_cube(cpl_imagelist *cu, Vector *spec);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> cpl_imagelist *</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> sinfo_new_div_cube_by_spectrum(cpl_imagelist *cu, Vector *spec);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> Vector *</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> sinfo_new_clean_mean_of_spectra(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                              <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                              <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                              <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                              <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                              <span class="keywordtype">double</span> lo_reject,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                              <span class="keywordtype">double</span> hi_reject);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> cpl_image *</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> sinfo_new_median_cube(cpl_imagelist * cube) ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> cpl_image *</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> sinfo_new_average_cube_to_image(cpl_imagelist * cube) ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> cpl_image *</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> sinfo_new_sum_cube_to_image(cpl_imagelist * cube) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> cpl_image *</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> sinfo_new_average_cube_to_image_between_waves (cpl_imagelist * cube,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                                            <span class="keywordtype">float</span>     dispersion,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                                            <span class="keywordtype">float</span>     centralWave,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                                            <span class="keywordtype">float</span>     initialLambda,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                                            <span class="keywordtype">float</span>     finalLambda) ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> cpl_image *</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> sinfo_new_extract_image_from_cube(cpl_imagelist * cube, <span class="keywordtype">int</span> plane_index) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> Vector *</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> sinfo_new_extract_spectrum_from_cube(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                      <span class="keywordtype">int</span> x_pos,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                      <span class="keywordtype">int</span> y_pos ) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> cpl_imagelist *</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> sinfo_new_combine_jittered_cubes ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                  cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                  <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                  <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                  <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                  <span class="keywordtype">float</span>    * exptimes,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                    <span class="keywordtype">char</span>     * kernel_type );</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> cpl_imagelist *</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> new_combine_jittered_cubes_it ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                                  cpl_imagelist *  mergedCube,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                                  cpl_imagelist *  mask,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                  <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                                  <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                  <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                                  <span class="keywordtype">float</span>    * exptimes,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                  <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z) ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> sinfo_new_combine_jittered_cubes_thomas_range(cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                     cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                     cpl_imagelist  * mask,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                     <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                     <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                     <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                     <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                     <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                     <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                                     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa );</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> new_combine_jittered_cubes_sky_range (cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                    cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                    cpl_imagelist  * mask,</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                    cpl_imagelist  * mergedSky,</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                    cpl_imagelist  * mergedMsk,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                    cpl_imagelist  * mergeMed,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                    cpl_imagelist  * mergeAvg,</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                    cpl_imagelist  * mergeStd,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>                    cpl_imagelist  * mergeNc,</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                    <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                    <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>                    <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>                    <span class="keywordtype">float</span>    * exptimes,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>                    <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> sinfo_new_combine_jittered_cubes_range ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                                  cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                                  cpl_imagelist  * mask,</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                                  <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                                  <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                                  <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                                  <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                                  <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                                  <span class="keyword">const</span> <span class="keywordtype">int</span> z_min, <span class="keyword">const</span> <span class="keywordtype">int</span> z_max );</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> new_combine_jittered_cubes_sky_range2 (cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                    cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                    cpl_imagelist  * mask,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                    cpl_imagelist  * mergedSky,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                    cpl_imagelist  * mergedMsk,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                    cpl_imagelist  * mergeMed,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                    cpl_imagelist  * mergeAvg,</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>                    cpl_imagelist  * mergeStd,</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>                    cpl_imagelist  * mergeNc,</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                    <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                    <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>                    <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>                    <span class="keywordtype">double</span>    * exptimes,</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>                    <span class="keywordtype">char</span>     * kernel_type,</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> cpl_imagelist *</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> sinfo_new_interpol_cube_simple( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>                               cpl_imagelist * badcube,</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>                               <span class="keywordtype">int</span>       maxdist ) ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> cpl_imagelist *</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> sinfo_new_combine_cubes ( cpl_imagelist ** cubes,</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>                          cpl_imagelist  * mergedCube,</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>                          <span class="keywordtype">int</span>        n_cubes,</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>                          <span class="keywordtype">float</span>    * cumoffsetx,</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>                          <span class="keywordtype">float</span>    * cumoffsety,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                          <span class="keywordtype">float</span>      factor,</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>                          <span class="keywordtype">char</span>     * kernel_type ) ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> cpl_imagelist *</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> sinfo_new_bin_cube(cpl_imagelist *cu,</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>                    <span class="keywordtype">int</span> xscale,</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>                    <span class="keywordtype">int</span> yscale,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                    <span class="keywordtype">int</span> xmin,</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                    <span class="keywordtype">int</span> xmax,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                    <span class="keywordtype">int</span> ymin,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                    <span class="keywordtype">int</span> ymax);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> cpl_imagelist *</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> sinfo_new_scale_cube(cpl_imagelist *cu,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                      <span class="keywordtype">float</span> xscale,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                      <span class="keywordtype">float</span> yscale,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                      <span class="keywordtype">char</span> * kernel_type);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> </div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> cpl_imagelist *</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> sinfo_cube_zshift(<span class="keyword">const</span> cpl_imagelist * cube,</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>                   <span class="keyword">const</span> <span class="keywordtype">double</span> shift,</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>                   <span class="keywordtype">double</span>* rest);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> cpl_imagelist *</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> sinfo_cube_zshift_poly(<span class="keyword">const</span> cpl_imagelist * cube,</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> shift,</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span>    order);</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> cpl_imagelist *</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> sinfo_cube_zshift_spline3(<span class="keyword">const</span> cpl_imagelist * cube,</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>                           <span class="keyword">const</span> <span class="keywordtype">double</span> shift);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> sinfo_coadd_with_ks_clip_optimized(<span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max,</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes,</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>             <span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>             <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                         <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>             cpl_imagelist* mask,</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>             cpl_imagelist* mergedCube,</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                         cpl_imagelist** tmpcubes);</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="keywordtype">double</span> sinfo_kappa_sigma_array_with_mask(</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>         cpl_array* parray,</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <span class="keywordtype">int</span> szArray,</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>         <span class="keyword">const</span> <span class="keywordtype">double</span> kappa,</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         cpl_image* imMask,</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         <span class="keyword">const</span> <span class="keywordtype">double</span>* exptimes,</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>         <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">double</span> mas_adjustment</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         <span class="comment">/*, double* val_msk_sum*/</span>);</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cubes__build_8c_source.html b/html/sinfo__new__cubes__build_8c_source.html
index 48aaed8..bd69caa 100644
--- a/html/sinfo__new__cubes__build_8c_source.html
+++ b/html/sinfo__new__cubes__build_8c_source.html
@@ -2,928 +2,959 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cubes_build.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cubes_build.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">File name    :       sinfo_new_cubes_build.c</span>
-<a name="l00022"></a>00022 <span class="comment">Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">Created on   :    December 3, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">Description  :    Creates data cubes or merges data cubes</span>
-<a name="l00025"></a>00025 <span class="comment">out of jittered object-sky</span>
-<a name="l00026"></a>00026 <span class="comment">nodding observations</span>
-<a name="l00027"></a>00027 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">  Includes</span>
-<a name="l00034"></a>00034 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_new_cubes_build.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_skycor.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_product_config.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_atmo_disp.h"</span>
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">  Defines</span>
-<a name="l00052"></a>00052 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_atm_correction(cpl_imagelist** ppCube,
-<a name="l00057"></a>00057         cpl_frameset* sof,
-<a name="l00058"></a>00058         <span class="keyword">const</span> <span class="keywordtype">char</span>* polyshiftname,
-<a name="l00059"></a>00059         <span class="keywordtype">double</span> dis_cube,
-<a name="l00060"></a>00060         <span class="keywordtype">double</span> centralLambda_cube,
-<a name="l00061"></a>00061         <span class="keywordtype">int</span> centralpix_cube);
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">  Function Definitions</span>
-<a name="l00065"></a>00065 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="comment">/* Temporally commented out as not used</span>
-<a name="l00067"></a>00067 <span class="comment">static cpl_image*</span>
-<a name="l00068"></a>00068 <span class="comment">sinfo_flux_corr(const cpl_image* inp,const cpl_image* wav,const double dis);</span>
-<a name="l00069"></a>00069 <span class="comment">*/</span>
-<a name="l00078"></a>00078 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">  Function     : sinfo_new_cubes_build()</span>
-<a name="l00080"></a>00080 <span class="comment">  In           : ini_file: file name of according .ini file</span>
-<a name="l00081"></a>00081 <span class="comment">  Out          : integer (0 if it worked, -1 if it doesn't)</span>
-<a name="l00082"></a>00082 <span class="comment">  Job          : this routine carries through the data cube creation of an</span>
-<a name="l00083"></a>00083 <span class="comment">  object science observation using object-sky nodding</span>
-<a name="l00084"></a>00084 <span class="comment">  and jittering. This script expects jittered frames that</span>
-<a name="l00085"></a>00085 <span class="comment">  were already sky-subtracted</span>
-<a name="l00086"></a>00086 <span class="comment">  averaged, flatfielded, spectral tilt corrected and</span>
-<a name="l00087"></a>00087 <span class="comment">  interleaved if necessary</span>
-<a name="l00088"></a>00088 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00089"></a>00089 <span class="keywordtype">int</span> sinfo_new_cubes_build (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config,
-<a name="l00090"></a>00090                cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, <span class="keyword">const</span> <span class="keywordtype">int</span> frame_index)
-<a name="l00091"></a>00091 {
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093   object_config * cfg=NULL ;
-<a name="l00094"></a>00094   cpl_image * im=NULL ;
-<a name="l00095"></a>00095   cpl_image * wavemapim=NULL ;
-<a name="l00096"></a>00096   cpl_image * wim=NULL ;
-<a name="l00097"></a>00097   cpl_image * res_obj=NULL ;
-<a name="l00098"></a>00098   cpl_image * calim=NULL ;
-<a name="l00099"></a>00099   cpl_image * halospec=NULL ;
-<a name="l00100"></a>00100   cpl_image * sky_im=NULL;
-<a name="l00101"></a>00101   cpl_image* res_ima=NULL;
-<a name="l00102"></a>00102   cpl_image* res_wim=NULL;
-<a name="l00103"></a>00103   cpl_image* res_flat=NULL;
-<a name="l00104"></a>00104   cpl_image* res_sky=NULL;
-<a name="l00105"></a>00105   cpl_image* flat_im=NULL;
-<a name="l00106"></a>00106   cpl_image* eima_avg=NULL;
-<a name="l00107"></a>00107   cpl_image* eima_med=NULL;
-<a name="l00108"></a>00108   cpl_imagelist  * cube=NULL ;
-<a name="l00109"></a>00109   cpl_imagelist  * outcube=NULL ;
-<a name="l00110"></a>00110   cpl_imagelist  * outcube2=NULL ;
-<a name="l00111"></a>00111   cpl_imagelist* cflat=NULL;
-<a name="l00112"></a>00112   cpl_imagelist* cflat2=NULL;
-<a name="l00113"></a>00113   cpl_imagelist* csky=NULL;
-<a name="l00114"></a>00114   cpl_imagelist* csky2=NULL;
-<a name="l00115"></a>00115   cpl_propertylist* plist=NULL;
-<a name="l00116"></a>00116   cpl_frame* obj_frm=NULL;
-<a name="l00117"></a>00117   cpl_frame* sky_frm=NULL;
-<a name="l00118"></a>00118   cpl_imagelist* obj_cor=NULL;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   <span class="keywordtype">int</span> sky_cor=0;
-<a name="l00121"></a>00121   <span class="keywordtype">int</span> flux_cor=0;
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> n=0 ;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> cpix=0 ;
-<a name="l00124"></a>00124   <span class="keywordtype">float</span> mi=0 ;
-<a name="l00125"></a>00125   <span class="keywordtype">float</span> ma=0 ;
-<a name="l00126"></a>00126   <span class="keywordtype">float</span> fcol=0 ;
-<a name="l00127"></a>00127   <span class="keywordtype">float</span> center_x=0;
-<a name="l00128"></a>00128   <span class="keywordtype">float</span> center_y=0;
-<a name="l00129"></a>00129   <span class="keywordtype">float</span> *  correct_dist=NULL ;
-<a name="l00130"></a>00130   <span class="keywordtype">float</span> * distances=NULL ;
-<a name="l00131"></a>00131   <span class="keywordtype">float</span> ** slit_edges=NULL ;
-<a name="l00132"></a>00132   <span class="keywordtype">int</span> nx=0;
-<a name="l00133"></a>00133   <span class="keywordtype">int</span> ny=0;
-<a name="l00134"></a>00134   cpl_image* dif=NULL;
-<a name="l00135"></a>00135   <span class="keywordtype">float</span>* pd=NULL;
-<a name="l00136"></a>00136   <span class="keywordtype">float</span>* pw=NULL;
-<a name="l00137"></a>00137   <span class="keywordtype">int</span> i=0;
-<a name="l00138"></a>00138   <span class="keywordtype">int</span> j=0;
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140   <span class="keywordtype">double</span> dis=0 ;
-<a name="l00141"></a>00141   <span class="keywordtype">double</span> cwav=0 ;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];
-<a name="l00144"></a>00144   <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];
-<a name="l00145"></a>00145   <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148   <span class="keywordtype">char</span> * name=NULL ;
-<a name="l00149"></a>00149   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151   cpl_table* qclog_tbl=NULL;
-<a name="l00152"></a>00152   cpl_frameset* stk=NULL;
-<a name="l00153"></a>00153   cpl_parameter* p=NULL;
-<a name="l00154"></a>00154   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00155"></a>00155   sinfo_skycor_qc* sqc=NULL;
-<a name="l00156"></a>00156   cpl_table* int_obj=NULL;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00159"></a>00159   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161   <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {
-<a name="l00162"></a>00162     strcpy(pro_mjit,PRO_MASK_COADD_STD);
-<a name="l00163"></a>00163     strcpy(pro_obs,PRO_OBS_STD);
-<a name="l00164"></a>00164     strcpy(pro_med,PRO_MED_COADD_STD);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {
-<a name="l00167"></a>00167     strcpy(pro_mjit,PRO_MASK_COADD_PSF);
-<a name="l00168"></a>00168     strcpy(pro_obs,PRO_OBS_PSF);
-<a name="l00169"></a>00169     strcpy(pro_med,PRO_MED_COADD_PSF);
-<a name="l00170"></a>00170   } <span class="keywordflow">else</span> {
-<a name="l00171"></a>00171     strcpy(pro_mjit,PRO_MASK_COADD_OBJ);
-<a name="l00172"></a>00172     strcpy(pro_obs,PRO_OBS_OBJ);
-<a name="l00173"></a>00173     strcpy(pro_med,PRO_MED_COADD_OBJ);
-<a name="l00174"></a>00174   }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span>
-<a name="l00178"></a>00178   check_nomsg(stk = cpl_frameset_new());
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180   cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),
-<a name="l00181"></a>00181      <span class="stringliteral">"Error setting parameter configuration"</span>);
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183   ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.fcol"</span>));
-<a name="l00187"></a>00187   check_nomsg(fcol=(<span class="keywordtype">float</span>)cpl_parameter_get_double(p));
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189   <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )
-<a name="l00190"></a>00190     {
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Read FITS information"</span>);
-<a name="l00193"></a>00193       name = cfg->framelist[n] ;
-<a name="l00194"></a>00194       <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {
-<a name="l00195"></a>00195     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00196"></a>00196     <span class="keywordflow">goto</span> cleanup;
-<a name="l00197"></a>00197       }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;
-<a name="l00201"></a>00201       cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),
-<a name="l00202"></a>00202          <span class="stringliteral">" could not load frame %s!"</span>,name) ;
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205       <span class="comment">/*</span>
-<a name="l00206"></a>00206 <span class="comment">       *--------------------------------------------------------------</span>
-<a name="l00207"></a>00207 <span class="comment">       *---------------------RESAMPLING-------------------------------</span>
-<a name="l00208"></a>00208 <span class="comment">       *--------------------------------------------------------------</span>
-<a name="l00209"></a>00209 <span class="comment">       */</span>
-<a name="l00210"></a>00210       sinfo_msg(<span class="stringliteral">"Resampling object"</span>);
-<a name="l00211"></a>00211       cknull(wavemapim = cpl_image_load(cfg->wavemap,CPL_TYPE_FLOAT,0,0),
-<a name="l00212"></a>00212          <span class="stringliteral">"could not load wavemap"</span>);
-<a name="l00213"></a>00213       check_nomsg(wim=cpl_image_duplicate(wavemapim));
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00216"></a>00216                        <span class="stringliteral">"sinfoni.objnod.flux_cor"</span>));
-<a name="l00217"></a>00217       check_nomsg(flux_cor=cpl_parameter_get_bool(p));
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220       nx=cpl_image_get_size_x(wim);
-<a name="l00221"></a>00221       ny=cpl_image_get_size_y(wim);
-<a name="l00222"></a>00222       <span class="comment">/*</span>
-<a name="l00223"></a>00223 <span class="comment">        check_nomsg(pd=cpl_image_get_data(im));</span>
-<a name="l00224"></a>00224 <span class="comment">        //To compare statistics we make sure that the input image has all 1s</span>
-<a name="l00225"></a>00225 <span class="comment"></span>
-<a name="l00226"></a>00226 <span class="comment">    for(i=0;i<nx;i++) {</span>
-<a name="l00227"></a>00227 <span class="comment">    for(j=0;j<ny;j++) {</span>
-<a name="l00228"></a>00228 <span class="comment">    pd[nx*j+i]=1.;</span>
-<a name="l00229"></a>00229 <span class="comment">    }</span>
-<a name="l00230"></a>00230 <span class="comment">    }</span>
-<a name="l00231"></a>00231 <span class="comment">    cpl_image_save(im,"im.fits", CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00232"></a>00232 <span class="comment">      */</span>
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234       cknull(res_ima = sinfo_new_defined_resampling(im,
-<a name="l00235"></a>00235                             wim,
-<a name="l00236"></a>00236                             cfg->ncoeffs,
-<a name="l00237"></a>00237                             &cfg->nrows,
-<a name="l00238"></a>00238                             &dis,
-<a name="l00239"></a>00239                             &mi,
-<a name="l00240"></a>00240                             &ma,
-<a name="l00241"></a>00241                             &cwav,
-<a name="l00242"></a>00242                             &cpix),
-<a name="l00243"></a>00243          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247       <span class="comment">//cpl_image_save(res_ima,"res_im.fits",</span>
-<a name="l00248"></a>00248       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250       <span class="comment">//We create an image with the derivatives</span>
-<a name="l00251"></a>00251       check_nomsg(dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT));
-<a name="l00252"></a>00252       pw=cpl_image_get_data(wim);
-<a name="l00253"></a>00253       pd=cpl_image_get_data(dif);
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256       <span class="keywordflow">for</span>(i=1;i<nx-1;i++) {
-<a name="l00257"></a>00257     <span class="keywordflow">for</span>(j=1;j<ny-1;j++) {
-<a name="l00258"></a>00258       <span class="keywordflow">if</span>(!isnan(pd[nx*j+i])) {
-<a name="l00259"></a>00259         pd[nx*j+i]=2.0*dis/(pw[nx*(j+1)+i]-pw[nx*(j-1)+i]);
-<a name="l00260"></a>00260       }
-<a name="l00261"></a>00261     }
-<a name="l00262"></a>00262     <span class="keywordflow">if</span>(!isnan(pd[i])) {
-<a name="l00263"></a>00263       pd[i]=dis/(pw[nx+i]-pw[i]);
-<a name="l00264"></a>00264     }
-<a name="l00265"></a>00265     <span class="keywordflow">if</span>(!isnan(pd[nx*(ny-1)+i])) {
-<a name="l00266"></a>00266       pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268       }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271       <span class="comment">//cpl_image_save(dif,"diff.fits",</span>
-<a name="l00272"></a>00272       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276       cknull(res_wim = sinfo_new_defined_resampling(dif,
-<a name="l00277"></a>00277                             wim,
-<a name="l00278"></a>00278                             cfg->ncoeffs,
-<a name="l00279"></a>00279                             &cfg->nrows,
-<a name="l00280"></a>00280                             &dis,
-<a name="l00281"></a>00281                             &mi,
-<a name="l00282"></a>00282                             &ma,
-<a name="l00283"></a>00283                             &cwav,
-<a name="l00284"></a>00284                             &cpix),
-<a name="l00285"></a>00285          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289       <span class="comment">//cpl_image_save(res_wim,"res_diff.fits",</span>
-<a name="l00290"></a>00290       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296       <span class="comment">//To rescale in flux we divide the resampled image and</span>
-<a name="l00297"></a>00297       <span class="comment">//the resampled derivatives. At this point res_obj should have same</span>
-<a name="l00298"></a>00298       <span class="comment">//flux as input image (im.diff)</span>
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300       res_obj=cpl_image_duplicate(res_ima);
-<a name="l00301"></a>00301       sinfo_free_image(&res_ima);
-<a name="l00302"></a>00302       <span class="keywordflow">if</span>(flux_cor) {
-<a name="l00303"></a>00303     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);
-<a name="l00304"></a>00304     cpl_image_divide(res_obj,res_wim);
-<a name="l00305"></a>00305       }
-<a name="l00306"></a>00306       <span class="comment">//cpl_image_save(res_obj,"res_obj.fits",</span>
-<a name="l00307"></a>00307       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310       sinfo_free_image(&wim);
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312       <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)) {
-<a name="l00313"></a>00313     snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,
-<a name="l00314"></a>00314          RESAMPLED_OUT_OBJ_FILENAME,
-<a name="l00315"></a>00315          frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00316"></a>00316     ck0(sinfo_pro_save_ima(res_obj,sof,sof,file_name,
-<a name="l00317"></a>00317                    PRO_RESAMPLED_OBJ,
-<a name="l00318"></a>00318                                qclog_tbl,plugin_id,config),
-<a name="l00319"></a>00319         <span class="stringliteral">"cannot save image %s"</span>, file_name);
-<a name="l00320"></a>00320       }
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00324"></a>00324     sinfo_msg(<span class="stringliteral">"Resampling sky"</span>);
-<a name="l00325"></a>00325     check_nomsg(sky_im=cpl_image_load(cfg->sky_dist,CPL_TYPE_FLOAT,0,0));
-<a name="l00326"></a>00326     check_nomsg(wim=cpl_image_duplicate(wavemapim));
-<a name="l00327"></a>00327     cknull(res_ima = sinfo_new_defined_resampling(sky_im,
-<a name="l00328"></a>00328                               wim,
-<a name="l00329"></a>00329                               cfg->ncoeffs,
-<a name="l00330"></a>00330                               &cfg->nrows,
-<a name="l00331"></a>00331                               &dis,
-<a name="l00332"></a>00332                               &mi,
-<a name="l00333"></a>00333                               &ma,
-<a name="l00334"></a>00334                               &cwav,
-<a name="l00335"></a>00335                               &cpix),
-<a name="l00336"></a>00336            <span class="stringliteral">" sinfo_definedResampling() failed"</span> );
-<a name="l00337"></a>00337         res_sky=cpl_image_duplicate(res_ima);
-<a name="l00338"></a>00338         sinfo_free_image(&res_ima);
-<a name="l00339"></a>00339         <span class="keywordflow">if</span>(flux_cor) {
-<a name="l00340"></a>00340           sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);
-<a name="l00341"></a>00341       cpl_image_divide(res_sky,res_wim);
-<a name="l00342"></a>00342     }
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344     sinfo_free_image(&wim);
-<a name="l00345"></a>00345     sinfo_free_image(&sky_im) ;
-<a name="l00346"></a>00346     <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)){
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,
-<a name="l00349"></a>00349            RESAMPLED_OUT_SKY_FILENAME,frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00350"></a>00350       ck0(sinfo_pro_save_ima(res_sky,sof,sof,file_name,
-<a name="l00351"></a>00351                  PRO_RESAMPLED_SKY,
-<a name="l00352"></a>00352                  qclog_tbl,plugin_id,config),
-<a name="l00353"></a>00353           <span class="stringliteral">"cannot save image %s"</span>, file_name);
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358       }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361       <span class="keywordflow">if</span>(n ==0) {
-<a name="l00362"></a>00362     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>) != 0) {
-<a name="l00363"></a>00363       sinfo_msg(<span class="stringliteral">"Resampling master flat"</span>);
-<a name="l00364"></a>00364       cknull(flat_im=cpl_image_load(cfg->mflat_dist,CPL_TYPE_FLOAT,0,0),
-<a name="l00365"></a>00365          <span class="stringliteral">"Distorted master flat field not found\n"</span>
-<a name="l00366"></a>00366          <span class="stringliteral">"You may have set --stack-flat_ind=FALSE\n"</span>
-<a name="l00367"></a>00367          <span class="stringliteral">"Flat field resampling skipped"</span>);
-<a name="l00368"></a>00368       check_nomsg(wim=cpl_image_duplicate(wavemapim));
-<a name="l00369"></a>00369       cknull(res_ima = sinfo_new_defined_resampling(flat_im,
-<a name="l00370"></a>00370                             wim,
-<a name="l00371"></a>00371                             cfg->ncoeffs,
-<a name="l00372"></a>00372                             &cfg->nrows,
-<a name="l00373"></a>00373                             &dis,
-<a name="l00374"></a>00374                             &mi,
-<a name="l00375"></a>00375                             &ma,
-<a name="l00376"></a>00376                             &cwav,
-<a name="l00377"></a>00377                             &cpix),
-<a name="l00378"></a>00378          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381       res_flat=cpl_image_duplicate(res_ima);
-<a name="l00382"></a>00382       sinfo_free_image(&res_ima);
-<a name="l00383"></a>00383       <span class="keywordflow">if</span>(flux_cor) {
-<a name="l00384"></a>00384         sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);
-<a name="l00385"></a>00385         cpl_image_divide(res_flat,res_wim);
-<a name="l00386"></a>00386       }
-<a name="l00387"></a>00387       sinfo_free_image(&wim);
-<a name="l00388"></a>00388       sinfo_free_image(&flat_im) ;
-<a name="l00389"></a>00389       <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)) {
-<a name="l00390"></a>00390         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,
-<a name="l00391"></a>00391              RESAMPLED_OUT_FLAT_FILENAME,frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00392"></a>00392         ck0(sinfo_pro_save_ima(res_flat,sof,sof,file_name,
-<a name="l00393"></a>00393                    PRO_RESAMPLED_FLAT_LAMP,
-<a name="l00394"></a>00394                    qclog_tbl,plugin_id,config),
-<a name="l00395"></a>00395         <span class="stringliteral">"cannot save image %s"</span>, file_name);
-<a name="l00396"></a>00396       }
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399     }
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401       }
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403       sinfo_msg(<span class="stringliteral">"wmin %f wmax %f wcent %f wstep %f cpix %d"</span>,
-<a name="l00404"></a>00404         mi,ma,cwav,dis,cpix);
-<a name="l00405"></a>00405       sinfo_free_image(&res_wim);
-<a name="l00406"></a>00406       sinfo_free_image(&im) ;
-<a name="l00407"></a>00407       sinfo_free_image(&wavemapim) ;
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409       <span class="comment">/*</span>
-<a name="l00410"></a>00410 <span class="comment">       *-------------------------------------------------------------------</span>
-<a name="l00411"></a>00411 <span class="comment">       *----------------Calibration----------------------------------------</span>
-<a name="l00412"></a>00412 <span class="comment">       *-------------------------------------------------------------------</span>
-<a name="l00413"></a>00413 <span class="comment">       */</span>
-<a name="l00414"></a>00414       <span class="comment">/*----Multiply with calibrated halogen lamp spectrum----*/</span>
-<a name="l00415"></a>00415       <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)
-<a name="l00416"></a>00416         {
-<a name="l00417"></a>00417       sinfo_msg(<span class="stringliteral">"Calibration"</span>);
-<a name="l00418"></a>00418       check_nomsg(halospec = cpl_image_load(cfg->halospectrum,
-<a name="l00419"></a>00419                                                 CPL_TYPE_FLOAT,0,0)) ;
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421       cknull(calim = sinfo_new_multiply_image_with_spectrum(res_obj,
-<a name="l00422"></a>00422                                                                 halospec),
-<a name="l00423"></a>00423          <span class="stringliteral">" sinfo_new_multiply_image_with_spectrum() failed"</span> ) ;
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425       sinfo_free_image(&halospec) ;
-<a name="l00426"></a>00426       sinfo_free_image(&res_obj) ;
-<a name="l00427"></a>00427       res_obj = cpl_image_duplicate(calim) ;
-<a name="l00428"></a>00428       sinfo_free_image(&calim);
-<a name="l00429"></a>00429         }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431       <span class="comment">/*</span>
-<a name="l00432"></a>00432 <span class="comment">       *-------------------------------------------------------------------</span>
-<a name="l00433"></a>00433 <span class="comment">       *------------------CUBECREATION-------------------------------------</span>
-<a name="l00434"></a>00434 <span class="comment">       *-------------------------------------------------------------------</span>
-<a name="l00435"></a>00435 <span class="comment">       */</span>
-<a name="l00436"></a>00436       sinfo_msg(<span class="stringliteral">"Cube creation"</span>);
-<a name="l00437"></a>00437       <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span>
-<a name="l00438"></a>00438       <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {
-<a name="l00439"></a>00439     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);
-<a name="l00440"></a>00440     cknull(slit_edges=sinfo_read_slitlets_edges(cfg->nslits,cfg->poslist),
-<a name="l00441"></a>00441            <span class="stringliteral">"error reading slitlets edges"</span>);
-<a name="l00442"></a>00442       } <span class="keywordflow">else</span> {
-<a name="l00443"></a>00443     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);
-<a name="l00444"></a>00444     cknull(distances = sinfo_read_distances(cfg->nslits,cfg->distlist),
-<a name="l00445"></a>00445            <span class="stringliteral">"error reading distances"</span>);
-<a name="l00446"></a>00446       }
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448       cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(cfg->nslits, sizeof (<span class="keywordtype">float</span>)),
-<a name="l00449"></a>00449          <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451       sinfo_msg(<span class="stringliteral">"Create cube object"</span>);
-<a name="l00452"></a>00452       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454         cknull(cube = sinfo_new_make_cube_spi(res_obj,slit_edges,
-<a name="l00455"></a>00455                           correct_dist),
-<a name="l00456"></a>00456            <span class="stringliteral">"could not construct data cube!"</span>) ;
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458       }  <span class="keywordflow">else</span> {
-<a name="l00459"></a>00459     cknull(cube = sinfo_new_make_cube_dist(res_obj,fcol,distances,
-<a name="l00460"></a>00460                            correct_dist),
-<a name="l00461"></a>00461            <span class="stringliteral">"could not construct a data cube!"</span>) ;
-<a name="l00462"></a>00462       }
-<a name="l00463"></a>00463       sinfo_free_image(&res_obj);
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468         sinfo_msg(<span class="stringliteral">"Create cube sky"</span>);
-<a name="l00469"></a>00469         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00470"></a>00470           cknull(csky = sinfo_new_make_cube_spi(res_sky,slit_edges,
-<a name="l00471"></a>00471                         correct_dist),
-<a name="l00472"></a>00472          <span class="stringliteral">"could not construct data cube!"</span>) ;
-<a name="l00473"></a>00473         }  <span class="keywordflow">else</span> {
-<a name="l00474"></a>00474           cknull(csky = sinfo_new_make_cube_dist(res_sky,fcol,distances,
-<a name="l00475"></a>00475                          correct_dist),
-<a name="l00476"></a>00476          <span class="stringliteral">"could not construct a data cube!"</span>) ;
-<a name="l00477"></a>00477         }
-<a name="l00478"></a>00478         sinfo_free_image(&res_sky);
-<a name="l00479"></a>00479       }
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481       <span class="keywordflow">if</span>(n==0) {
-<a name="l00482"></a>00482     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {
-<a name="l00483"></a>00483       sinfo_msg(<span class="stringliteral">"Create cube master flat"</span>);
-<a name="l00484"></a>00484       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00485"></a>00485         cknull(cflat=sinfo_new_make_cube_spi(res_flat,slit_edges,
-<a name="l00486"></a>00486                          correct_dist),
-<a name="l00487"></a>00487            <span class="stringliteral">"could not construct data cube!"</span>) ;
-<a name="l00488"></a>00488       }  <span class="keywordflow">else</span> {
-<a name="l00489"></a>00489         cknull(cflat = sinfo_new_make_cube_dist(res_flat,fcol,distances,
-<a name="l00490"></a>00490                             correct_dist),
-<a name="l00491"></a>00491            <span class="stringliteral">"could not construct a data cube!"</span>) ;
-<a name="l00492"></a>00492       }
-<a name="l00493"></a>00493       sinfo_free_image(&res_flat);
-<a name="l00494"></a>00494     }
-<a name="l00495"></a>00495       }
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 )
-<a name="l00498"></a>00498     {
-<a name="l00499"></a>00499       sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);
-<a name="l00500"></a>00500     }
-<a name="l00501"></a>00501       <span class="keywordflow">else</span>
-<a name="l00502"></a>00502     {
-<a name="l00503"></a>00503       sinfo_new_destroy_array(&distances);
-<a name="l00504"></a>00504     }
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506       <span class="comment">/*</span>
-<a name="l00507"></a>00507 <span class="comment">       *--------------------------------------------------------------------</span>
-<a name="l00508"></a>00508 <span class="comment">       *------------------------FINETUNING----------------------------------</span>
-<a name="l00509"></a>00509 <span class="comment">       *--------------------------------------------------------------------</span>
-<a name="l00510"></a>00510 <span class="comment">       * shift the rows of the reconstructed images of the data cube to the</span>
-<a name="l00511"></a>00511 <span class="comment">       * correct sub pixel position select the shift method: polynomial</span>
-<a name="l00512"></a>00512 <span class="comment">       * interpolation, FFT or cubic spline interpolation</span>
-<a name="l00513"></a>00513 <span class="comment">       *--------------------------------------------------------------------</span>
-<a name="l00514"></a>00514 <span class="comment">       */</span>
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00517"></a>00517     <span class="keywordflow">if</span>(pdensity > 0) {
-<a name="l00518"></a>00518       cknull(csky2=sinfo_new_fine_tune(csky,
-<a name="l00519"></a>00519                        correct_dist,
-<a name="l00520"></a>00520                        cfg->method,
-<a name="l00521"></a>00521                        cfg->order,
-<a name="l00522"></a>00522                        cfg->nslits),
-<a name="l00523"></a>00523          <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525       sinfo_free_imagelist(&csky);
-<a name="l00526"></a>00526       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528       cknull(csky = sinfo_new_bin_cube(csky2,1,2,0,63,0,63),
-<a name="l00529"></a>00529          <span class="stringliteral">"error rebinning sky cube"</span>);
-<a name="l00530"></a>00530       sinfo_free_imagelist(&csky2);
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky_cube"</span>,
-<a name="l00535"></a>00535            frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00536"></a>00536       ck0(sinfo_pro_save_ims(csky,sof,sof,file_name,
-<a name="l00537"></a>00537                  PRO_OBS_SKY,NULL,plugin_id,config),
-<a name="l00538"></a>00538           <span class="stringliteral">"cannot dump cube %s"</span>, file_name);
-<a name="l00539"></a>00539       cknull(eima_med=sinfo_new_median_cube(csky),
-<a name="l00540"></a>00540          <span class="stringliteral">"Creating an average image"</span>);
-<a name="l00541"></a>00541       check_nomsg(center_x = cpl_image_get_size_x(eima_med)/ 2. + 0.5);
-<a name="l00542"></a>00542       check_nomsg(center_y = cpl_image_get_size_y(eima_med)/ 2. + 0.5);
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544       sinfo_new_set_wcs_cube(csky,file_name, cwav,
-<a name="l00545"></a>00545                  dis, cpix, center_x, center_y);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547       sinfo_free_imagelist(&csky) ;
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky_med"</span>,
-<a name="l00550"></a>00550            frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00551"></a>00551       ck0(sinfo_pro_save_ima(eima_med,sof,sof,file_name,
-<a name="l00552"></a>00552                  PRO_SKY_MED,NULL,plugin_id,config),
-<a name="l00553"></a>00553           <span class="stringliteral">"cannot save ima %s"</span>,file_name);
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555       check_nomsg(sinfo_new_set_wcs_image(eima_med,file_name, center_x, center_y));
-<a name="l00556"></a>00556       sinfo_free_image(&eima_med);
-<a name="l00557"></a>00557     }
-<a name="l00558"></a>00558       }
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562       <span class="keywordflow">if</span>(n==0) {
-<a name="l00563"></a>00563     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {
-<a name="l00564"></a>00564       <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l00565"></a>00565         cknull(cflat2=sinfo_new_fine_tune(cflat,
-<a name="l00566"></a>00566                           correct_dist,
-<a name="l00567"></a>00567                           cfg->method,
-<a name="l00568"></a>00568                           cfg->order,
-<a name="l00569"></a>00569                           cfg->nslits),
-<a name="l00570"></a>00570            <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572         sinfo_free_imagelist(&cflat);
-<a name="l00573"></a>00573         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575         cknull(cflat = sinfo_new_bin_cube(cflat2,1,2,0,63,0,63),
-<a name="l00576"></a>00576            <span class="stringliteral">"Error binning flat cube"</span>);
-<a name="l00577"></a>00577         sinfo_free_imagelist(&cflat2);
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579         ck0(sinfo_pro_save_ims(cflat,sof,sof,OBJNOD_OUT_MFLAT_CUBE_FILENAME,
-<a name="l00580"></a>00580                    PRO_MFLAT_CUBE,NULL,plugin_id,config),
-<a name="l00581"></a>00581         <span class="stringliteral">"cannot save cube %s"</span>, OBJNOD_OUT_MFLAT_CUBE_FILENAME);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583         sinfo_new_set_wcs_cube(cflat,OBJNOD_OUT_MFLAT_CUBE_FILENAME,cwav, dis,
-<a name="l00584"></a>00584                    cpix, center_x, center_y);
-<a name="l00585"></a>00585 
-<a name="l00586"></a>00586         cknull(eima_avg=sinfo_new_average_cube_to_image(cflat),
-<a name="l00587"></a>00587            <span class="stringliteral">"Creating an average image"</span>);
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589         ck0(sinfo_pro_save_ima(eima_avg,sof,sof,<span class="stringliteral">"out_mflat_avg.fits"</span>,
-<a name="l00590"></a>00590                    <span class="stringliteral">"MFLAT_AVG"</span>,NULL,plugin_id,config),
-<a name="l00591"></a>00591         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_avg.fits"</span>);
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593         sinfo_free_image(&eima_avg);
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595         cknull(eima_med=sinfo_new_median_cube(cflat),
-<a name="l00596"></a>00596            <span class="stringliteral">"Error computing median on cube flat"</span>);
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598         ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_mflat_med.fits"</span>,
-<a name="l00599"></a>00599                    <span class="stringliteral">"MFLAT_MED"</span>,NULL,plugin_id,config),
-<a name="l00600"></a>00600         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_med.fits"</span>);
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602         sinfo_free_imagelist(&cflat);
-<a name="l00603"></a>00603         sinfo_free_image(&eima_med);
-<a name="l00604"></a>00604       }
-<a name="l00605"></a>00605     }
-<a name="l00606"></a>00606       }
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608       cknull(outcube2=sinfo_new_fine_tune(cube,
-<a name="l00609"></a>00609                       correct_dist,
-<a name="l00610"></a>00610                       cfg->method,
-<a name="l00611"></a>00611                       cfg->order,
-<a name="l00612"></a>00612                       cfg->nslits),
-<a name="l00613"></a>00613          <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00616"></a>00616       cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),
-<a name="l00617"></a>00617          <span class="stringliteral">"Error binning cube"</span>);
-<a name="l00618"></a>00618       sinfo_free_imagelist(&cube);
-<a name="l00619"></a>00619       cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00620"></a>00620       sinfo_get_pupil_shift(outcube,n,&qclog_tbl);
-<a name="l00621"></a>00621       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,
-<a name="l00622"></a>00622            frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624       check_nomsg(center_x = cpl_image_get_size_x(
-<a name="l00625"></a>00625                           cpl_imagelist_get(outcube,0))/2.+0.5) ;
-<a name="l00626"></a>00626       check_nomsg(center_y = cpl_image_get_size_y(
-<a name="l00627"></a>00627                           cpl_imagelist_get(outcube,0))/2.+0.5 );
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629       <span class="comment">/*----------- atmospheric correction --------------*/</span>
-<a name="l00630"></a>00630       <span class="keywordflow">if</span> (cfg->polyshiftname && strlen(cfg->polyshiftname))
-<a name="l00631"></a>00631       {
-<a name="l00632"></a>00632           sinfo_atm_correction(&outcube,
-<a name="l00633"></a>00633                 sof,
-<a name="l00634"></a>00634                 cfg->polyshiftname,
-<a name="l00635"></a>00635                 dis,
-<a name="l00636"></a>00636                 cwav,
-<a name="l00637"></a>00637                 cpix);
-<a name="l00638"></a>00638       }
-<a name="l00639"></a>00639       <span class="comment">/*-------------------------------------------------*/</span>
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641       ck0(sinfo_pro_save_ims(outcube,sof,sof,file_name,
-<a name="l00642"></a>00642                  pro_obs,qclog_tbl,plugin_id,config),
-<a name="l00643"></a>00643       <span class="stringliteral">"cannot save cube %s"</span>, file_name);
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645       sinfo_new_set_wcs_cube(outcube, file_name, cwav, dis,
-<a name="l00646"></a>00646                  cpix, center_x, center_y);
-<a name="l00647"></a>00647       <span class="comment">/* free memory */</span>
-<a name="l00648"></a>00648       <span class="comment">/* to prevent error message comment next line */</span>
-<a name="l00649"></a>00649 
-<a name="l00650"></a>00650       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00651"></a>00651                        <span class="stringliteral">"sinfoni.objnod.sky_cor"</span>));
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653       check_nomsg(sky_cor=cpl_parameter_get_bool(p));
-<a name="l00654"></a>00654       <span class="keywordflow">if</span>(sky_cor == 1 && (pdensity == 1 || pdensity == 3) &&
-<a name="l00655"></a>00655               strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0)
-<a name="l00656"></a>00656       {
-<a name="l00657"></a>00657         obj_frm=cpl_frameset_find(sof,pro_obs);
-<a name="l00658"></a>00658         sky_frm=cpl_frameset_find(sof,PRO_OBS_SKY);
-<a name="l00659"></a>00659         sqc=sinfo_skycor_qc_new();
-<a name="l00660"></a>00660         ck0(sinfo_skycor(config, obj_frm,sky_frm,sqc,&obj_cor,&int_obj),
-<a name="l00661"></a>00661             <span class="stringliteral">"determining sky residuals corrected object"</span>);
-<a name="l00662"></a>00662         cpl_frameset_erase(sof,pro_obs);
-<a name="l00663"></a>00663         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj_cor"</span>,
-<a name="l00664"></a>00664              frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00665"></a>00665         ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC SKYCOR THBKGFIT"</span>,
-<a name="l00666"></a>00666                           sqc->th_fit,<span class="stringliteral">"Thermal background fit success"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668         ck0(sinfo_pro_save_ims(obj_cor,sof,sof,file_name,
-<a name="l00669"></a>00669                    pro_obs,qclog_tbl,plugin_id,config),
-<a name="l00670"></a>00670         <span class="stringliteral">"cannot save cube %s"</span>, file_name);
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672         sinfo_skycor_qc_delete(&sqc);
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674         sinfo_new_set_wcs_cube(obj_cor, file_name, cwav, dis,
-<a name="l00675"></a>00675                    cpix, center_x, center_y);
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677         sinfo_free_imagelist(&obj_cor) ;
-<a name="l00678"></a>00678         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_int_obj"</span>,
-<a name="l00679"></a>00679          frame_index,<span class="stringliteral">".fits"</span>);
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681         ck0(sinfo_pro_save_tbl(int_obj,sof,sof,file_name,
-<a name="l00682"></a>00682                    PRO_SPECTRA_QC,qclog_tbl,plugin_id,config),
-<a name="l00683"></a>00683         <span class="stringliteral">"cannot save cube %s"</span>, file_name);
-<a name="l00684"></a>00684         sinfo_free_table(&int_obj) ;
-<a name="l00685"></a>00685       }
-<a name="l00686"></a>00686       sinfo_free_table(&qclog_tbl);
-<a name="l00687"></a>00687       sinfo_free_imagelist(&outcube2);
-<a name="l00688"></a>00688       sinfo_free_imagelist(&outcube) ;
-<a name="l00689"></a>00689       sinfo_free_float(&correct_dist) ;
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691     } <span class="comment">/* end loop over n (nframes) */</span>
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693   <span class="comment">/* free memory */</span>
-<a name="l00694"></a>00694   sinfo_objnod_free(&cfg);
-<a name="l00695"></a>00695   sinfo_free_frameset(&stk);
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698   <span class="keywordflow">return</span> 0;
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700  cleanup:
-<a name="l00701"></a>00701   sinfo_skycor_qc_delete(&sqc);
-<a name="l00702"></a>00702   sinfo_free_imagelist(&obj_cor) ;
-<a name="l00703"></a>00703   sinfo_free_propertylist(&plist);
-<a name="l00704"></a>00704   sinfo_free_imagelist(&outcube2) ;
-<a name="l00705"></a>00705   sinfo_free_imagelist(&outcube) ;
-<a name="l00706"></a>00706   sinfo_free_table(&qclog_tbl);
-<a name="l00707"></a>00707   sinfo_free_image(&eima_avg);
-<a name="l00708"></a>00708   sinfo_free_image(&eima_med);
-<a name="l00709"></a>00709   sinfo_free_imagelist(&cflat) ;
-<a name="l00710"></a>00710   sinfo_free_imagelist(&cflat2) ;
-<a name="l00711"></a>00711   sinfo_free_imagelist(&cube) ;
-<a name="l00712"></a>00712   sinfo_free_imagelist(&csky) ;
-<a name="l00713"></a>00713   sinfo_free_imagelist(&csky2) ;
-<a name="l00714"></a>00714 
-<a name="l00715"></a>00715   <span class="keywordflow">if</span>(cfg!=NULL) {
-<a name="l00716"></a>00716     <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00717"></a>00717       <span class="keywordflow">if</span>(slit_edges != NULL) {
-<a name="l00718"></a>00718     sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);
-<a name="l00719"></a>00719       }
-<a name="l00720"></a>00720     } <span class="keywordflow">else</span> {
-<a name="l00721"></a>00721       <span class="keywordflow">if</span> (distances != NULL ) {
-<a name="l00722"></a>00722     sinfo_new_destroy_array(&distances);
-<a name="l00723"></a>00723       }
-<a name="l00724"></a>00724     }
-<a name="l00725"></a>00725   }
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727   sinfo_free_float(&correct_dist);
-<a name="l00728"></a>00728   sinfo_free_image(&res_flat);
-<a name="l00729"></a>00729   sinfo_free_image(&res_sky);
-<a name="l00730"></a>00730   sinfo_free_image(&res_wim);
-<a name="l00731"></a>00731   sinfo_free_image(&calim);
-<a name="l00732"></a>00732   sinfo_free_image(&halospec) ;
-<a name="l00733"></a>00733   sinfo_free_image(&sky_im) ;
-<a name="l00734"></a>00734   sinfo_free_image(&res_obj);
-<a name="l00735"></a>00735   sinfo_free_image(&flat_im) ;
-<a name="l00736"></a>00736   sinfo_free_image(&wavemapim);
-<a name="l00737"></a>00737   sinfo_free_image(&wim);
-<a name="l00738"></a>00738   sinfo_free_image(&im);
-<a name="l00739"></a>00739   sinfo_objnod_free(&cfg);
-<a name="l00740"></a>00740   sinfo_free_frameset(&stk);
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742   <span class="keywordflow">return</span> -1;
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744 
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746 }
-<a name="l00747"></a>00747 
-<a name="l00748"></a>00748 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00749"></a>00749 sinfo_atm_correction(cpl_imagelist** ppCube,
-<a name="l00750"></a>00750         cpl_frameset* sof,
-<a name="l00751"></a>00751         <span class="keyword">const</span> <span class="keywordtype">char</span>* polyshiftname,
-<a name="l00752"></a>00752         <span class="keywordtype">double</span> dis_cube,
-<a name="l00753"></a>00753         <span class="keywordtype">double</span> centralLambda_cube,
-<a name="l00754"></a>00754         <span class="keywordtype">int</span> centralpix_cube)
-<a name="l00755"></a>00755 {
-<a name="l00756"></a>00756     cpl_polynomial* poly = NULL;
-<a name="l00757"></a>00757     cpl_frame* first_frame=NULL;
-<a name="l00758"></a>00758     <span class="keyword">const</span> <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l00759"></a>00759     cpl_propertylist *plist_cube = NULL;
-<a name="l00760"></a>00760     cpl_propertylist* ppolylist = NULL;
-<a name="l00761"></a>00761     cpl_imagelist* retcube = NULL;
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763         <span class="comment">/* we use the pointer outcube as a handle to  *ppCube </span>
-<a name="l00764"></a>00764 <span class="comment">             (don't initialize to NULL!)*/</span>
-<a name="l00765"></a>00765     cpl_imagelist* outcube = *ppCube; 
-<a name="l00766"></a>00766        <span class="comment">/* Get the reference file  */</span>
-<a name="l00767"></a>00767     first_frame = cpl_frameset_get_first(sof) ;
-<a name="l00768"></a>00768     ref_file = cpl_frame_get_filename(first_frame) ;
-<a name="l00769"></a>00769     <span class="keywordflow">if</span> (ref_file && strlen(ref_file))
-<a name="l00770"></a>00770     {
-<a name="l00771"></a>00771         <span class="comment">/* Get FITS header from reference file */</span>
-<a name="l00772"></a>00772         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"adjusting atmospheric correction ref_file[%s]"</span>, ref_file);
-<a name="l00773"></a>00773         plist_cube = cpl_propertylist_load(ref_file, 0);
-<a name="l00774"></a>00774         <span class="keywordflow">if</span> (plist_cube)
-<a name="l00775"></a>00775         {
-<a name="l00776"></a>00776               <span class="comment">// check the OPTI1.NAME</span>
-<a name="l00777"></a>00777                 ppolylist = cpl_propertylist_load(polyshiftname,0);
-<a name="l00778"></a>00778             <span class="keywordflow">if</span> (ppolylist)
-<a name="l00779"></a>00779             {
-<a name="l00780"></a>00780                 <span class="keywordtype">double</span> pixelscale = sinfo_pfits_get_pixscale(plist_cube);
-<a name="l00781"></a>00781                 <span class="keywordtype">double</span> poly_pixelscale = sinfo_pfits_get_pixscale(ppolylist);
-<a name="l00782"></a>00782                 <span class="keywordflow">if</span> (fabs(poly_pixelscale - pixelscale) < 1E-8)
-<a name="l00783"></a>00783                 {
-<a name="l00784"></a>00784                     poly = sinfo_atmo_load_polynom(polyshiftname);
-<a name="l00785"></a>00785                     <span class="keywordflow">if</span> (!poly)
-<a name="l00786"></a>00786                     {
-<a name="l00787"></a>00787                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Cannot load polynom from [%s]"</span>, polyshiftname);
-<a name="l00788"></a>00788                     }
-<a name="l00789"></a>00789                     <span class="keywordflow">else</span>
-<a name="l00790"></a>00790                     {
-<a name="l00791"></a>00791                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"polynom from [%s] is loaded"</span>, polyshiftname);
-<a name="l00792"></a>00792                     }
-<a name="l00793"></a>00793                 }
-<a name="l00794"></a>00794                 <span class="keywordflow">else</span>
-<a name="l00795"></a>00795                 {
-<a name="l00796"></a>00796                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"pixelscale for the polynomial fit "</span>
-<a name="l00797"></a>00797                             <span class="stringliteral">"is different: provided[%f] expected[%f]"</span>,
-<a name="l00798"></a>00798                             poly_pixelscale, pixelscale);
-<a name="l00799"></a>00799                 }
-<a name="l00800"></a>00800                 sinfo_free_propertylist(&ppolylist);
-<a name="l00801"></a>00801             }
-<a name="l00802"></a>00802             <span class="keywordflow">if</span> (!poly)
-<a name="l00803"></a>00803             {
-<a name="l00804"></a>00804                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Pixel shift due atmospheric refraction"</span>
-<a name="l00805"></a>00805                       <span class="stringliteral">" would not be applied"</span>);
-<a name="l00806"></a>00806             }
-<a name="l00807"></a>00807         }
-<a name="l00808"></a>00808         <span class="keywordflow">else</span>
-<a name="l00809"></a>00809         {
-<a name="l00810"></a>00810             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"cannot load propertylist for the frame"</span>);
-<a name="l00811"></a>00811         }
-<a name="l00812"></a>00812         <span class="keywordflow">if</span> (poly)
-<a name="l00813"></a>00813         {
-<a name="l00814"></a>00814             <span class="keywordtype">double</span> airmass = (
-<a name="l00815"></a>00815                   (cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO TEL AIRM START"</span>) +
-<a name="l00816"></a>00816                   cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO TEL AIRM END"</span>))
-<a name="l00817"></a>00817                   / 2
-<a name="l00818"></a>00818                   );
-<a name="l00819"></a>00819             <span class="keywordtype">double</span> angle = (
-<a name="l00820"></a>00820                   (cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO ADA ABSROT START"</span>) +
-<a name="l00821"></a>00821                   cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO ADA ABSROT END"</span>))
-<a name="l00822"></a>00822                   / 2
-<a name="l00823"></a>00823                   ) * PI_NUMB / 180;
-<a name="l00824"></a>00824             sinfo_msg(<span class="stringliteral">"dis_cube[%f] centralLambda_cube[%f] centralpix_cube[%d]"</span>,dis_cube,centralLambda_cube,centralpix_cube);
-<a name="l00825"></a>00825             retcube = sinfo_atmo_apply_cube_polynomial_shift(
-<a name="l00826"></a>00826                     poly, outcube,
-<a name="l00827"></a>00827                     centralLambda_cube,
-<a name="l00828"></a>00828                     airmass,
-<a name="l00829"></a>00829                     angle,
-<a name="l00830"></a>00830                     dis_cube,
-<a name="l00831"></a>00831                     centralpix_cube);
-<a name="l00832"></a>00832          sinfo_free_polynomial(&poly);
-<a name="l00833"></a>00833          <span class="keywordflow">if</span> (retcube)
-<a name="l00834"></a>00834          {
-<a name="l00835"></a>00835              sinfo_free_imagelist(&outcube);
-<a name="l00836"></a>00836              *ppCube = retcube;
-<a name="l00837"></a>00837          }
-<a name="l00838"></a>00838       }
-<a name="l00839"></a>00839       sinfo_free_propertylist(&plist_cube);
-<a name="l00840"></a>00840     }
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843     <span class="keywordflow">return</span>;
-<a name="l00844"></a>00844 }
-<a name="l00845"></a>00845 
-<a name="l00846"></a>00846 <span class="comment">/* Temporally commented out as not yet used</span>
-<a name="l00847"></a>00847 <span class="comment">static cpl_image*</span>
-<a name="l00848"></a>00848 <span class="comment">sinfo_flux_corr(const cpl_image* inp,const cpl_image* wav,const double dis)</span>
-<a name="l00849"></a>00849 <span class="comment">{</span>
-<a name="l00850"></a>00850 <span class="comment"></span>
-<a name="l00851"></a>00851 <span class="comment">  cpl_image* out=NULL;</span>
-<a name="l00852"></a>00852 <span class="comment">  cpl_image* dif=NULL;</span>
-<a name="l00853"></a>00853 <span class="comment">  const float* pi=NULL;</span>
-<a name="l00854"></a>00854 <span class="comment">  const float* pw=NULL;</span>
-<a name="l00855"></a>00855 <span class="comment">  float* po=NULL;</span>
-<a name="l00856"></a>00856 <span class="comment">  float* pd=NULL;</span>
-<a name="l00857"></a>00857 <span class="comment"></span>
-<a name="l00858"></a>00858 <span class="comment">  int i=0;</span>
-<a name="l00859"></a>00859 <span class="comment">  int j=0;</span>
-<a name="l00860"></a>00860 <span class="comment">  int nx=0;</span>
-<a name="l00861"></a>00861 <span class="comment">  int ny=0;</span>
-<a name="l00862"></a>00862 <span class="comment">  int stat=0;</span>
-<a name="l00863"></a>00863 <span class="comment">  nx=cpl_image_get_size_x(inp);</span>
-<a name="l00864"></a>00864 <span class="comment">  ny=cpl_image_get_size_y(inp);</span>
-<a name="l00865"></a>00865 <span class="comment"></span>
-<a name="l00866"></a>00866 <span class="comment">  out=cpl_image_new(nx,ny,CPL_TYPE_FLOAT);</span>
-<a name="l00867"></a>00867 <span class="comment">  dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT);</span>
-<a name="l00868"></a>00868 <span class="comment">  pi=cpl_image_get_data_const(inp);</span>
-<a name="l00869"></a>00869 <span class="comment">  pw=cpl_image_get_data_const(wav);</span>
-<a name="l00870"></a>00870 <span class="comment">  po=cpl_image_get_data(out);</span>
-<a name="l00871"></a>00871 <span class="comment">  pd=cpl_image_get_data(dif);</span>
-<a name="l00872"></a>00872 <span class="comment"></span>
-<a name="l00873"></a>00873 <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,501,&stat)-</span>
-<a name="l00874"></a>00874 <span class="comment">                 cpl_image_get(wav,500,499,&stat)));</span>
-<a name="l00875"></a>00875 <span class="comment"></span>
-<a name="l00876"></a>00876 <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,101,&stat)-</span>
-<a name="l00877"></a>00877 <span class="comment">                 cpl_image_get(wav,500,99,&stat)));</span>
-<a name="l00878"></a>00878 <span class="comment"></span>
-<a name="l00879"></a>00879 <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,1001,&stat)-</span>
-<a name="l00880"></a>00880 <span class="comment">                 cpl_image_get(wav,500,999,&stat)));</span>
-<a name="l00881"></a>00881 <span class="comment"></span>
-<a name="l00882"></a>00882 <span class="comment">  for(i=0;i<nx;i++) {</span>
-<a name="l00883"></a>00883 <span class="comment">    for(j=1;j<ny-1;j++) {</span>
-<a name="l00884"></a>00884 <span class="comment">      if(pi[nx*j+i] != ZERO || pw[nx*j+i] != ZERO) {</span>
-<a name="l00885"></a>00885 <span class="comment">    po[nx*j+i]=pi[nx*j+i]*dis/((pw[nx*(j+1)+i]-pw[nx*(j-1)+i])*0.5);</span>
-<a name="l00886"></a>00886 <span class="comment">    pd[nx*j+i]=dis/((pw[nx*(j+1)+i]-pw[nx*(j-1)+i])*0.5);</span>
-<a name="l00887"></a>00887 <span class="comment">      } else {</span>
-<a name="l00888"></a>00888 <span class="comment">    po[nx*j+i]=ZERO;</span>
-<a name="l00889"></a>00889 <span class="comment">    pd[nx*j+i]=ZERO;</span>
-<a name="l00890"></a>00890 <span class="comment">      }</span>
-<a name="l00891"></a>00891 <span class="comment">    }</span>
-<a name="l00892"></a>00892 <span class="comment"></span>
-<a name="l00893"></a>00893 <span class="comment"></span>
-<a name="l00894"></a>00894 <span class="comment">    if(pi[i] != ZERO || pw[i] != ZERO) {</span>
-<a name="l00895"></a>00895 <span class="comment">      po[i]=pi[i]*dis/(pw[nx+i]-pw[i]);</span>
-<a name="l00896"></a>00896 <span class="comment">      pd[i]=dis/(pw[nx+i]-pw[i]);</span>
-<a name="l00897"></a>00897 <span class="comment">    } else {</span>
-<a name="l00898"></a>00898 <span class="comment">      po[i]=ZERO;</span>
-<a name="l00899"></a>00899 <span class="comment">      pd[i]=ZERO;</span>
-<a name="l00900"></a>00900 <span class="comment">    }</span>
-<a name="l00901"></a>00901 <span class="comment"></span>
-<a name="l00902"></a>00902 <span class="comment"></span>
-<a name="l00903"></a>00903 <span class="comment"></span>
-<a name="l00904"></a>00904 <span class="comment">    if(pi[nx*(ny-1)+i] != ZERO || pw[nx*(ny-1)+i] != ZERO) {</span>
-<a name="l00905"></a>00905 <span class="comment">      po[nx*(ny-1)+i]=pi[nx*(ny-1)+i]*dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</span>
-<a name="l00906"></a>00906 <span class="comment">      pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</span>
-<a name="l00907"></a>00907 <span class="comment">    } else {</span>
-<a name="l00908"></a>00908 <span class="comment">      po[nx*(ny-1)+i]=ZERO;</span>
-<a name="l00909"></a>00909 <span class="comment">      pd[nx*(ny-1)+i]=ZERO;</span>
-<a name="l00910"></a>00910 <span class="comment">    }</span>
-<a name="l00911"></a>00911 <span class="comment"></span>
-<a name="l00912"></a>00912 <span class="comment">  }</span>
-<a name="l00913"></a>00913 <span class="comment">  //cpl_image_save(dif,"diff.fits", CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00914"></a>00914 <span class="comment"></span>
-<a name="l00915"></a>00915 <span class="comment">  sinfo_free_image(&dif);</span>
-<a name="l00916"></a>00916 <span class="comment"></span>
-<a name="l00917"></a>00917 <span class="comment"></span>
-<a name="l00918"></a>00918 <span class="comment">  return out;</span>
-<a name="l00919"></a>00919 <span class="comment"></span>
-<a name="l00920"></a>00920 <span class="comment">}</span>
-<a name="l00921"></a>00921 <span class="comment">*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cubes_build.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">File name    :       sinfo_new_cubes_build.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">Created on   :    December 3, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Description  :    Creates data cubes or merges data cubes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">out of jittered object-sky</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">nodding observations</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">  Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_new_cubes_build.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_skycor.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_product_config.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_atmo_disp.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">  Defines</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_atm_correction(cpl_imagelist** ppCube,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* polyshiftname,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">double</span> dis_cube,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">double</span> centralLambda_cube,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">int</span> centralpix_cube);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  Function Definitions</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/* Temporally commented out as not used</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">static cpl_image*</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">sinfo_flux_corr(const cpl_image* inp,const cpl_image* wav,const double dis);</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">  Function     : sinfo_new_cubes_build()</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">  In           : ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">  Out          : integer (0 if it worked, -1 if it doesn't)</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  Job          : this routine carries through the data cube creation of an</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">  object science observation using object-sky nodding</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">  and jittering. This script expects jittered frames that</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">  were already sky-subtracted</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  averaged, flatfielded, spectral tilt corrected and</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">  interleaved if necessary</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">int</span> sinfo_new_cubes_build (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, <span class="keyword">const</span> <span class="keywordtype">int</span> frame_index)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   object_config * cfg=NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   cpl_image * wavemapim=NULL ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_image * wim=NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   cpl_image * res_obj=NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   cpl_image * calim=NULL ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_image * halospec=NULL ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_image * sky_im=NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_image* res_ima=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   cpl_image* res_wim=NULL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_image* res_flat=NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_image* res_sky=NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_image* flat_im=NULL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_image* eima_avg=NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_image* eima_med=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_imagelist  * cube=NULL ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_imagelist  * outcube=NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   cpl_imagelist  * outcube2=NULL ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   cpl_imagelist* cflat=NULL;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   cpl_imagelist* cflat2=NULL;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   cpl_imagelist* csky=NULL;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   cpl_imagelist* csky2=NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_frame* obj_frm=NULL;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_frame* sky_frm=NULL;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   cpl_imagelist* obj_cor=NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> sky_cor=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> flux_cor=0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> n=0 ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> cpix=0 ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">float</span> mi=0 ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">float</span> ma=0 ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">float</span> fcol=0 ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">float</span> center_x=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">float</span> center_y=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">float</span> *  correct_dist=NULL ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">float</span> * distances=NULL ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">float</span> ** slit_edges=NULL ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_image* dif=NULL;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">float</span>* pd=NULL;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">float</span>* pw=NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">double</span> dis=0 ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">double</span> cwav=0 ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordtype">char</span> * name=NULL ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   cpl_frameset* stk=NULL;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   sinfo_skycor_qc* sqc=NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_table* int_obj=NULL;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     strcpy(pro_mjit,PRO_MASK_COADD_STD);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     strcpy(pro_obs,PRO_OBS_STD);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     strcpy(pro_med,PRO_MED_COADD_STD);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     strcpy(pro_mjit,PRO_MASK_COADD_PSF);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     strcpy(pro_obs,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     strcpy(pro_med,PRO_MED_COADD_PSF);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     strcpy(pro_mjit,PRO_MASK_COADD_OBJ);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     strcpy(pro_obs,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     strcpy(pro_med,PRO_MED_COADD_OBJ);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   check_nomsg(stk = cpl_frameset_new());</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>      <span class="stringliteral">"Error setting parameter configuration"</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.fcol"</span>));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   check_nomsg(fcol=(<span class="keywordtype">float</span>)cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Read FITS information"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       name = cfg->framelist[n] ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>          <span class="stringliteral">" could not load frame %s!"</span>,name) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">       *--------------------------------------------------------------</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">       *---------------------RESAMPLING-------------------------------</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">       *--------------------------------------------------------------</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       sinfo_msg(<span class="stringliteral">"Resampling object"</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       cknull(wavemapim = cpl_image_load(cfg->wavemap,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>          <span class="stringliteral">"could not load wavemap"</span>);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       check_nomsg(wim=cpl_image_duplicate(wavemapim));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                        <span class="stringliteral">"sinfoni.objnod.flux_cor"</span>));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       check_nomsg(flux_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       nx=cpl_image_get_size_x(wim);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       ny=cpl_image_get_size_y(wim);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">        check_nomsg(pd=cpl_image_get_data(im));</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">        //To compare statistics we make sure that the input image has all 1s</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment"></span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">    for(i=0;i<nx;i++) {</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">    for(j=0;j<ny;j++) {</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">    pd[nx*j+i]=1.;</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">    cpl_image_save(im,"im.fits", CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       cknull(res_ima = sinfo_new_defined_resampling(im,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                             wim,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                             cfg->ncoeffs,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                             &cfg->nrows,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                             &dis,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                             &mi,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                             &ma,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                             &cwav,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                             &cpix),</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       <span class="comment">//cpl_image_save(res_ima,"res_im.fits",</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       <span class="comment">//We create an image with the derivatives</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       check_nomsg(dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       pw=cpl_image_get_data(wim);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       pd=cpl_image_get_data(dif);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       <span class="keywordflow">for</span>(i=1;i<nx-1;i++) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">for</span>(j=1;j<ny-1;j++) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <span class="keywordflow">if</span>(!isnan(pd[nx*j+i])) {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         pd[nx*j+i]=2.0*dis/(pw[nx*(j+1)+i]-pw[nx*(j-1)+i]);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">if</span>(!isnan(pd[i])) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       pd[i]=dis/(pw[nx+i]-pw[i]);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">if</span>(!isnan(pd[nx*(ny-1)+i])) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       <span class="comment">//cpl_image_save(dif,"diff.fits",</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       cknull(res_wim = sinfo_new_defined_resampling(dif,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                             wim,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                             cfg->ncoeffs,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                             &cfg->nrows,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                             &dis,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                             &mi,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                             &ma,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                             &cwav,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                             &cpix),</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       <span class="comment">//cpl_image_save(res_wim,"res_diff.fits",</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       <span class="comment">//To rescale in flux we divide the resampled image and</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="comment">//the resampled derivatives. At this point res_obj should have same</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       <span class="comment">//flux as input image (im.diff)</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       res_obj=cpl_image_duplicate(res_ima);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       sinfo_free_image(&res_ima);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       <span class="keywordflow">if</span>(flux_cor) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     cpl_image_divide(res_obj,res_wim);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       <span class="comment">//cpl_image_save(res_obj,"res_obj.fits",</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       sinfo_free_image(&wim);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>          RESAMPLED_OUT_OBJ_FILENAME,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>          frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     ck0(sinfo_pro_save_ima(res_obj,sof,sof,file_name,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                    PRO_RESAMPLED_OBJ,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                                qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         <span class="stringliteral">"cannot save image %s"</span>, file_name);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     sinfo_msg(<span class="stringliteral">"Resampling sky"</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     check_nomsg(sky_im=cpl_image_load(cfg->sky_dist,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     check_nomsg(wim=cpl_image_duplicate(wavemapim));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     cknull(res_ima = sinfo_new_defined_resampling(sky_im,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                               wim,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                               cfg->ncoeffs,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                               &cfg->nrows,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                               &dis,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                               &mi,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                               &ma,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                               &cwav,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                               &cpix),</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>            <span class="stringliteral">" sinfo_definedResampling() failed"</span> );</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         res_sky=cpl_image_duplicate(res_ima);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         sinfo_free_image(&res_ima);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         <span class="keywordflow">if</span>(flux_cor) {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>           sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       cpl_image_divide(res_sky,res_wim);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     sinfo_free_image(&wim);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     sinfo_free_image(&sky_im) ;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)){</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>            RESAMPLED_OUT_SKY_FILENAME,frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       ck0(sinfo_pro_save_ima(res_sky,sof,sof,file_name,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                  PRO_RESAMPLED_SKY,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                  qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>           <span class="stringliteral">"cannot save image %s"</span>, file_name);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       <span class="keywordflow">if</span>(n ==0) {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>) != 0) {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       sinfo_msg(<span class="stringliteral">"Resampling master flat"</span>);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       cknull(flat_im=cpl_image_load(cfg->mflat_dist,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>          <span class="stringliteral">"Distorted master flat field not found\n"</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>          <span class="stringliteral">"You may have set --stack-flat_ind=FALSE\n"</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>          <span class="stringliteral">"Flat field resampling skipped"</span>);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       check_nomsg(wim=cpl_image_duplicate(wavemapim));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       cknull(res_ima = sinfo_new_defined_resampling(flat_im,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                             wim,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                             cfg->ncoeffs,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                             &cfg->nrows,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                             &dis,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                             &mi,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                             &ma,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                             &cwav,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                             &cpix),</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       res_flat=cpl_image_duplicate(res_ima);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       sinfo_free_image(&res_ima);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       <span class="keywordflow">if</span>(flux_cor) {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         cpl_image_divide(res_flat,res_wim);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       sinfo_free_image(&wim);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       sinfo_free_image(&flat_im) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 2 && frame_index == 0)) {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>              RESAMPLED_OUT_FLAT_FILENAME,frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         ck0(sinfo_pro_save_ima(res_flat,sof,sof,file_name,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                    PRO_RESAMPLED_FLAT_LAMP,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                    qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         <span class="stringliteral">"cannot save image %s"</span>, file_name);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       }</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       sinfo_msg(<span class="stringliteral">"wmin %f wmax %f wcent %f wstep %f cpix %d"</span>,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         mi,ma,cwav,dis,cpix);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       sinfo_free_image(&res_wim);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       sinfo_free_image(&im) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       sinfo_free_image(&wavemapim) ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">       *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">       *----------------Calibration----------------------------------------</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">       *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       <span class="comment">/*----Multiply with calibrated halogen lamp spectrum----*/</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       sinfo_msg(<span class="stringliteral">"Calibration"</span>);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       check_nomsg(halospec = cpl_image_load(cfg->halospectrum,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                                 CPL_TYPE_FLOAT,0,0)) ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>       cknull(calim = sinfo_new_multiply_image_with_spectrum(res_obj,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                                                 halospec),</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>          <span class="stringliteral">" sinfo_new_multiply_image_with_spectrum() failed"</span> ) ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>       sinfo_free_image(&halospec) ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       sinfo_free_image(&res_obj) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       res_obj = cpl_image_duplicate(calim) ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       sinfo_free_image(&calim);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">       *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">       *------------------CUBECREATION-------------------------------------</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="comment">       *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>       sinfo_msg(<span class="stringliteral">"Cube creation"</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>       <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>       <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     cknull(slit_edges=sinfo_read_slitlets_edges(cfg->nslits,cfg->poslist),</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>            <span class="stringliteral">"error reading slitlets edges"</span>);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     cknull(distances = sinfo_read_distances(cfg->nslits,cfg->distlist),</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>            <span class="stringliteral">"error reading distances"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>       cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(cfg->nslits, sizeof (<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>          <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>       sinfo_msg(<span class="stringliteral">"Create cube object"</span>);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>         cknull(cube = sinfo_new_make_cube_spi(res_obj,slit_edges,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                           correct_dist),</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>            <span class="stringliteral">"could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     cknull(cube = sinfo_new_make_cube_dist(res_obj,fcol,distances,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                            correct_dist),</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>            <span class="stringliteral">"could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       sinfo_free_image(&res_obj);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>         sinfo_msg(<span class="stringliteral">"Create cube sky"</span>);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>           cknull(csky = sinfo_new_make_cube_spi(res_sky,slit_edges,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                         correct_dist),</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>          <span class="stringliteral">"could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>         }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>           cknull(csky = sinfo_new_make_cube_dist(res_sky,fcol,distances,</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                          correct_dist),</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>          <span class="stringliteral">"could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>         sinfo_free_image(&res_sky);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>       }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>       sinfo_msg(<span class="stringliteral">"Create cube master flat"</span>);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         cknull(cflat=sinfo_new_make_cube_spi(res_flat,slit_edges,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                          correct_dist),</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>            <span class="stringliteral">"could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         cknull(cflat = sinfo_new_make_cube_dist(res_flat,fcol,distances,</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                             correct_dist),</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>            <span class="stringliteral">"could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>       }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       sinfo_free_image(&res_flat);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 )</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>       sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     }</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">       *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">       *------------------------FINETUNING----------------------------------</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">       *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment">       * shift the rows of the reconstructed images of the data cube to the</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">       * correct sub pixel position select the shift method: polynomial</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment">       * interpolation, FFT or cubic spline interpolation</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">       *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="keywordflow">if</span>(pdensity > 0) {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>       cknull(csky2=sinfo_new_fine_tune(csky,</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                        correct_dist,</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>                        cfg->method,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>                        cfg->order,</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                        cfg->nslits),</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>          <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>       sinfo_free_imagelist(&csky);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>       cknull(csky = sinfo_new_bin_cube(csky2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>          <span class="stringliteral">"error rebinning sky cube"</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       sinfo_free_imagelist(&csky2);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky_cube"</span>,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>            frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>       ck0(sinfo_pro_save_ims(csky,sof,sof,file_name,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                  PRO_OBS_SKY,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>           <span class="stringliteral">"cannot dump cube %s"</span>, file_name);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       cknull(eima_med=sinfo_new_median_cube(csky),</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>          <span class="stringliteral">"Creating an average image"</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>       check_nomsg(center_x = cpl_image_get_size_x(eima_med)/ 2. + 0.5);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>       check_nomsg(center_y = cpl_image_get_size_y(eima_med)/ 2. + 0.5);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>       sinfo_new_set_wcs_cube(csky,file_name, cwav,</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>                  dis, cpix, center_x, center_y);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>       sinfo_free_imagelist(&csky) ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky_med"</span>,</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>            frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       ck0(sinfo_pro_save_ima(eima_med,sof,sof,file_name,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                  PRO_SKY_MED,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>           <span class="stringliteral">"cannot save ima %s"</span>,file_name);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>       check_nomsg(sinfo_new_set_wcs_image(eima_med,file_name, center_x, center_y));</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>       sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>       }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         cknull(cflat2=sinfo_new_fine_tune(cflat,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                           correct_dist,</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                           cfg->method,</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                           cfg->order,</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                           cfg->nslits),</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>            <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         sinfo_free_imagelist(&cflat);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         cknull(cflat = sinfo_new_bin_cube(cflat2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>            <span class="stringliteral">"Error binning flat cube"</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         sinfo_free_imagelist(&cflat2);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         ck0(sinfo_pro_save_ims(cflat,sof,sof,OBJNOD_OUT_MFLAT_CUBE_FILENAME,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                    PRO_MFLAT_CUBE,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         <span class="stringliteral">"cannot save cube %s"</span>, OBJNOD_OUT_MFLAT_CUBE_FILENAME);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         sinfo_new_set_wcs_cube(cflat,OBJNOD_OUT_MFLAT_CUBE_FILENAME,cwav, dis,</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                    cpix, center_x, center_y);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         cknull(eima_avg=sinfo_new_average_cube_to_image(cflat),</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>            <span class="stringliteral">"Creating an average image"</span>);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>         ck0(sinfo_pro_save_ima(eima_avg,sof,sof,<span class="stringliteral">"out_mflat_avg.fits"</span>,</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                    <span class="stringliteral">"MFLAT_AVG"</span>,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_avg.fits"</span>);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         sinfo_free_image(&eima_avg);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         cknull(eima_med=sinfo_new_median_cube(cflat),</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>            <span class="stringliteral">"Error computing median on cube flat"</span>);</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_mflat_med.fits"</span>,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                    <span class="stringliteral">"MFLAT_MED"</span>,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_med.fits"</span>);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         sinfo_free_imagelist(&cflat);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>         sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>       }</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>       }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>       cknull(outcube2=sinfo_new_fine_tune(cube,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                       correct_dist,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                       cfg->method,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                       cfg->order,</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>                       cfg->nslits),</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>          <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>          <span class="stringliteral">"Error binning cube"</span>);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>       cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>       sinfo_get_pupil_shift(outcube,n,&qclog_tbl);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>            frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>       check_nomsg(center_x = cpl_image_get_size_x(</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                           cpl_imagelist_get(outcube,0))/2.+0.5) ;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>       check_nomsg(center_y = cpl_image_get_size_y(</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                           cpl_imagelist_get(outcube,0))/2.+0.5 );</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>       <span class="comment">/*----------- atmospheric correction --------------*/</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>       <span class="keywordflow">if</span> (cfg->polyshiftname && strlen(cfg->polyshiftname))</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>       {</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>           sinfo_atm_correction(&outcube,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                 sof,</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>                 cfg->polyshiftname,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                 dis,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                 cwav,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                 cpix);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>       <span class="comment">/*-------------------------------------------------*/</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>       ck0(sinfo_pro_save_ims(outcube,sof,sof,file_name,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                  pro_obs,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>       <span class="stringliteral">"cannot save cube %s"</span>, file_name);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>       sinfo_new_set_wcs_cube(outcube, file_name, cwav, dis,</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                  cpix, center_x, center_y);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>       <span class="comment">/* to prevent error message comment next line */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                        <span class="stringliteral">"sinfoni.objnod.sky_cor"</span>));</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       check_nomsg(sky_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>       <span class="keywordflow">if</span>(sky_cor == 1 && (pdensity == 1 || pdensity == 3) &&</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>               strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0)</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         obj_frm=cpl_frameset_find(sof,pro_obs);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         sky_frm=cpl_frameset_find(sof,PRO_OBS_SKY);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         sqc=sinfo_skycor_qc_new();</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         ck0(sinfo_skycor(config, obj_frm,sky_frm,sqc,&obj_cor,&int_obj),</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>             <span class="stringliteral">"determining sky residuals corrected object"</span>);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         cpl_frameset_erase(sof,pro_obs);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj_cor"</span>,</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>              frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>         ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC SKYCOR THBKGFIT"</span>,</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                           sqc->th_fit,<span class="stringliteral">"Thermal background fit success"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         ck0(sinfo_pro_save_ims(obj_cor,sof,sof,file_name,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                    pro_obs,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         <span class="stringliteral">"cannot save cube %s"</span>, file_name);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         sinfo_skycor_qc_delete(&sqc);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         sinfo_new_set_wcs_cube(obj_cor, file_name, cwav, dis,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                    cpix, center_x, center_y);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         sinfo_free_imagelist(&obj_cor) ;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_int_obj"</span>,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>          frame_index,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         ck0(sinfo_pro_save_tbl(int_obj,sof,sof,file_name,</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                    PRO_SPECTRA_QC,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         <span class="stringliteral">"cannot save cube %s"</span>, file_name);</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         sinfo_free_table(&int_obj) ;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>       sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>       sinfo_free_imagelist(&outcube2);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       sinfo_free_imagelist(&outcube) ;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>       sinfo_free_float(&correct_dist) ;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     } <span class="comment">/* end loop over n (nframes) */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>  cleanup:</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   sinfo_skycor_qc_delete(&sqc);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   sinfo_free_imagelist(&obj_cor) ;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   sinfo_free_imagelist(&outcube2) ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   sinfo_free_imagelist(&outcube) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   sinfo_free_image(&eima_avg);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   sinfo_free_imagelist(&cflat) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   sinfo_free_imagelist(&cflat2) ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   sinfo_free_imagelist(&cube) ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   sinfo_free_imagelist(&csky) ;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   sinfo_free_imagelist(&csky2) ;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> </div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   <span class="keywordflow">if</span>(cfg!=NULL) {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>       <span class="keywordflow">if</span>(slit_edges != NULL) {</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>       }</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>       <span class="keywordflow">if</span> (distances != NULL ) {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>       }</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     }</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   }</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   sinfo_free_float(&correct_dist);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   sinfo_free_image(&res_flat);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   sinfo_free_image(&res_sky);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   sinfo_free_image(&res_wim);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   sinfo_free_image(&calim);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   sinfo_free_image(&halospec) ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   sinfo_free_image(&sky_im) ;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   sinfo_free_image(&res_obj);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>   sinfo_free_image(&flat_im) ;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   sinfo_free_image(&wavemapim);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   sinfo_free_image(&wim);</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>   sinfo_free_image(&im);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> }</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> sinfo_atm_correction(cpl_imagelist** ppCube,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* polyshiftname,</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         <span class="keywordtype">double</span> dis_cube,</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         <span class="keywordtype">double</span> centralLambda_cube,</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <span class="keywordtype">int</span> centralpix_cube)</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> {</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     cpl_polynomial* poly = NULL;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     cpl_frame* first_frame=NULL;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     cpl_propertylist *plist_cube = NULL;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     cpl_propertylist* ppolylist = NULL;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     cpl_imagelist* retcube = NULL;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <span class="comment">/* we use the pointer outcube as a handle to  *ppCube </span></div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> <span class="comment">             (don't initialize to NULL!)*/</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     cpl_imagelist* outcube = *ppCube; </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>        <span class="comment">/* Get the reference file  */</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     first_frame = cpl_frameset_get_first(sof) ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     ref_file = cpl_frame_get_filename(first_frame) ;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <span class="keywordflow">if</span> (ref_file && strlen(ref_file))</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <span class="comment">/* Get FITS header from reference file */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"adjusting atmospheric correction ref_file[%s]"</span>, ref_file);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         plist_cube = cpl_propertylist_load(ref_file, 0);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         <span class="keywordflow">if</span> (plist_cube)</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>               <span class="comment">// check the OPTI1.NAME</span></div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>                 ppolylist = cpl_propertylist_load(polyshiftname,0);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>             <span class="keywordflow">if</span> (ppolylist)</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             {</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>                 <span class="keywordtype">double</span> pixelscale = sinfo_pfits_get_pixscale(plist_cube);</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                 <span class="keywordtype">double</span> poly_pixelscale = sinfo_pfits_get_pixscale(ppolylist);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>                 <span class="keywordflow">if</span> (fabs(poly_pixelscale - pixelscale) < 1E-8)</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>                 {</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                     poly = sinfo_atmo_load_polynom(polyshiftname);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>                     <span class="keywordflow">if</span> (!poly)</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>                     {</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Cannot load polynom from [%s]"</span>, polyshiftname);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>                     }</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                     {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"polynom from [%s] is loaded"</span>, polyshiftname);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>                     }</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                 }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                 {</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"pixelscale for the polynomial fit "</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                             <span class="stringliteral">"is different: provided[%f] expected[%f]"</span>,</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>                             poly_pixelscale, pixelscale);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                 }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>                 sinfo_free_propertylist(&ppolylist);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>             }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>             <span class="keywordflow">if</span> (!poly)</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>             {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Pixel shift due atmospheric refraction"</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>                       <span class="stringliteral">" would not be applied"</span>);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>         }</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         {</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"cannot load propertylist for the frame"</span>);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         }</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         <span class="keywordflow">if</span> (poly)</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             <span class="keywordtype">double</span> airmass = (</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                   (cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO TEL AIRM START"</span>) +</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                   cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO TEL AIRM END"</span>))</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>                   / 2</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                   );</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>             <span class="keywordtype">double</span> angle = (</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>                   (cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO ADA ABSROT START"</span>) +</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>                   cpl_propertylist_get_double(plist_cube, <span class="stringliteral">"ESO ADA ABSROT END"</span>))</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>                   / 2</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>                   ) * PI_NUMB / 180;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>             sinfo_msg(<span class="stringliteral">"dis_cube[%f] centralLambda_cube[%f] centralpix_cube[%d]"</span>,dis_cube,centralLambda_cube,centralpix_cube);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>             retcube = sinfo_atmo_apply_cube_polynomial_shift(</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>                     poly, outcube,</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>                     centralLambda_cube,</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                     airmass,</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>                     angle,</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>                     dis_cube,</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>                     centralpix_cube);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>          sinfo_free_polynomial(&poly);</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>          <span class="keywordflow">if</span> (retcube)</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>          {</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>              sinfo_free_imagelist(&outcube);</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>              *ppCube = retcube;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>          }</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>       }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>       sinfo_free_propertylist(&plist_cube);</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     }</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> }</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="comment">/* Temporally commented out as not yet used</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="comment">static cpl_image*</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> <span class="comment">sinfo_flux_corr(const cpl_image* inp,const cpl_image* wav,const double dis)</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> <span class="comment">{</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> <span class="comment"></span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="comment">  cpl_image* out=NULL;</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="comment">  cpl_image* dif=NULL;</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> <span class="comment">  const float* pi=NULL;</span></div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> <span class="comment">  const float* pw=NULL;</span></div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> <span class="comment">  float* po=NULL;</span></div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> <span class="comment">  float* pd=NULL;</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="comment"></span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="comment">  int i=0;</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment">  int j=0;</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">  int nx=0;</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="comment">  int ny=0;</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="comment">  int stat=0;</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> <span class="comment">  nx=cpl_image_get_size_x(inp);</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> <span class="comment">  ny=cpl_image_get_size_y(inp);</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment"></span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="comment">  out=cpl_image_new(nx,ny,CPL_TYPE_FLOAT);</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="comment">  dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT);</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> <span class="comment">  pi=cpl_image_get_data_const(inp);</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> <span class="comment">  pw=cpl_image_get_data_const(wav);</span></div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> <span class="comment">  po=cpl_image_get_data(out);</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> <span class="comment">  pd=cpl_image_get_data(dif);</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> <span class="comment"></span></div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,501,&stat)-</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="comment">                 cpl_image_get(wav,500,499,&stat)));</span></div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> <span class="comment"></span></div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,101,&stat)-</span></div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="comment">                 cpl_image_get(wav,500,99,&stat)));</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> <span class="comment"></span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="comment">  sinfo_msg("dif=%10.8f",2.*dis/(cpl_image_get(wav,500,1001,&stat)-</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="comment">                 cpl_image_get(wav,500,999,&stat)));</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> <span class="comment"></span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> <span class="comment">  for(i=0;i<nx;i++) {</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> <span class="comment">    for(j=1;j<ny-1;j++) {</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="comment">      if(pi[nx*j+i] != ZERO || pw[nx*j+i] != ZERO) {</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="comment">    po[nx*j+i]=pi[nx*j+i]*dis/((pw[nx*(j+1)+i]-pw[nx*(j-1)+i])*0.5);</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="comment">    pd[nx*j+i]=dis/((pw[nx*(j+1)+i]-pw[nx*(j-1)+i])*0.5);</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">      } else {</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">    po[nx*j+i]=ZERO;</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="comment">    pd[nx*j+i]=ZERO;</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="comment"></span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="comment"></span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="comment">    if(pi[i] != ZERO || pw[i] != ZERO) {</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="comment">      po[i]=pi[i]*dis/(pw[nx+i]-pw[i]);</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="comment">      pd[i]=dis/(pw[nx+i]-pw[i]);</span></div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment">    } else {</span></div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="comment">      po[i]=ZERO;</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="comment">      pd[i]=ZERO;</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> <span class="comment"></span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="comment"></span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment"></span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">    if(pi[nx*(ny-1)+i] != ZERO || pw[nx*(ny-1)+i] != ZERO) {</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="comment">      po[nx*(ny-1)+i]=pi[nx*(ny-1)+i]*dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> <span class="comment">      pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> <span class="comment">    } else {</span></div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> <span class="comment">      po[nx*(ny-1)+i]=ZERO;</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="comment">      pd[nx*(ny-1)+i]=ZERO;</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> <span class="comment"></span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> <span class="comment">  //cpl_image_save(dif,"diff.fits", CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="comment"></span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="comment">  sinfo_free_image(&dif);</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> <span class="comment"></span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> <span class="comment"></span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="comment">  return out;</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> <span class="comment"></span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="comment">}</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cubes__build_8h_source.html b/html/sinfo__new__cubes__build_8h_source.html
index f1ed0a7..3d3ea03 100644
--- a/html/sinfo__new__cubes__build_8h_source.html
+++ b/html/sinfo__new__cubes__build_8h_source.html
@@ -2,90 +2,121 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cubes_build.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cubes_build.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_CUBES_BUILD_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBES_BUILD_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_cubes_build.h,v 1.11 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_cubes_build.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to create a data cube</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <math.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">   @name sinfo_new_cubes_build()</span>
-<a name="l00049"></a>00049 <span class="comment">   @param  plugin_id name of recipe plugin</span>
-<a name="l00050"></a>00050 <span class="comment">   @param  config input parameter list</span>
-<a name="l00051"></a>00051 <span class="comment">   @param  sof input frameset</span>
-<a name="l00052"></a>00052 <span class="comment">   @param  procatg</span>
-<a name="l00053"></a>00053 <span class="comment">   @param  frame_index index of processed frame</span>
-<a name="l00054"></a>00054 <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00055"></a>00055 <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span>
-<a name="l00056"></a>00056 <span class="comment">        flatfielded, bad pixel corrected and</span>
-<a name="l00057"></a>00057 <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span>
-<a name="l00058"></a>00058 <span class="comment">        calibration is carried through by using</span>
-<a name="l00059"></a>00059 <span class="comment">        a standard star or a black body measurement. </span>
-<a name="l00060"></a>00060 <span class="comment">        The spectral features of the flatfield halogen lamp are corrected.</span>
-<a name="l00061"></a>00061 <span class="comment">        Afterwards a data cube is created out of the resampled image.</span>
-<a name="l00062"></a>00062 <span class="comment">    It is the users choice to use either</span>
-<a name="l00063"></a>00063 <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span>
-<a name="l00064"></a>00064 <span class="comment">    of the slitlets gained from a north-south-test. </span>
-<a name="l00065"></a>00065 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="keywordtype">int</span> 
-<a name="l00067"></a>00067 sinfo_new_cubes_build (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00068"></a>00068                        cpl_parameterlist* config, 
-<a name="l00069"></a>00069                        cpl_frameset* sof, 
-<a name="l00070"></a>00070                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, 
-<a name="l00071"></a>00071                        <span class="keyword">const</span> <span class="keywordtype">int</span> frame_index) ;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#endif </span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cubes_build.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_CUBES_BUILD_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBES_BUILD_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_cubes_build.h,v 1.11 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_cubes_build.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to create a data cube</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   @name sinfo_new_cubes_build()</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   @param  plugin_id name of recipe plugin</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   @param  config input parameter list</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   @param  sof input frameset</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   @param  procatg</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   @param  frame_index index of processed frame</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">        flatfielded, bad pixel corrected and</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">        calibration is carried through by using</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">        a standard star or a black body measurement. </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">        The spectral features of the flatfield halogen lamp are corrected.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">        Afterwards a data cube is created out of the resampled image.</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">    It is the users choice to use either</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">    of the slitlets gained from a north-south-test. </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_cubes_build (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                        cpl_parameterlist* config, </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                        cpl_frameset* sof, </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> frame_index) ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cubes__coadd_8c_source.html b/html/sinfo__new__cubes__coadd_8c_source.html
index 20d6c9d..b9b9c7e 100644
--- a/html/sinfo__new__cubes__coadd_8c_source.html
+++ b/html/sinfo__new__cubes__coadd_8c_source.html
@@ -2,648 +2,679 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cubes_coadd.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cubes_coadd.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">File name    :       sinfo_new_cubes_coadd.c</span>
-<a name="l00022"></a>00022 <span class="comment">Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">Created on   :    December 3, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">Description  :    Creates data cubes or merges data cubes</span>
-<a name="l00025"></a>00025 <span class="comment">out of jittered object-sky</span>
-<a name="l00026"></a>00026 <span class="comment">nodding observations</span>
-<a name="l00027"></a>00027 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">  Includes</span>
-<a name="l00034"></a>00034 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_new_cubes_coadd.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_baryvel.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00046"></a>00046 <span class="comment">//Used only for sinfo_propertylist_has</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">  Defines</span>
-<a name="l00050"></a>00050 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">  Function Definitions</span>
-<a name="l00056"></a>00056 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00066"></a>00066 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00067"></a>00067 <span class="comment">  Function     : sinfo_new_cubes_coadd()</span>
-<a name="l00068"></a>00068 <span class="comment">  In           : ini_file: file name of according .ini file</span>
-<a name="l00069"></a>00069 <span class="comment">  Out          : integer (0 if it worked, -1 if it doesn't)</span>
-<a name="l00070"></a>00070 <span class="comment">  Job          : this routine carries through the data cube creation of an</span>
-<a name="l00071"></a>00071 <span class="comment">  object science observation using object-sky nodding</span>
-<a name="l00072"></a>00072 <span class="comment">  and jittering. This script expects jittered frames that</span>
-<a name="l00073"></a>00073 <span class="comment">  were already sky-subtracted</span>
-<a name="l00074"></a>00074 <span class="comment">  averaged, flatfielded, spectral tilt corrected and</span>
-<a name="l00075"></a>00075 <span class="comment">  interleaved if necessary</span>
-<a name="l00076"></a>00076 <span class="comment">  ---------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="keywordtype">int</span>
-<a name="l00078"></a>00078 sinfo_new_cubes_coadd (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config,
-<a name="l00079"></a>00079                        cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)
-<a name="l00080"></a>00080 {
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082    object_config * cfg=NULL ;
-<a name="l00083"></a>00083    cpl_image * im=NULL ;
-<a name="l00084"></a>00084    cpl_image* jitter_image=NULL;
-<a name="l00085"></a>00085    cpl_imagelist  ** cube_tmp=NULL ;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087    cpl_imagelist  ** cubeobject=NULL ;
-<a name="l00088"></a>00088    cpl_imagelist  * jittercube=NULL ;
-<a name="l00089"></a>00089    cpl_imagelist  * maskcube=NULL ;
-<a name="l00090"></a>00090    cpl_propertylist* plist=NULL;
-<a name="l00091"></a>00091    <span class="keywordtype">int</span> sky_cor=0;
-<a name="l00092"></a>00092    <span class="keywordtype">int</span> pdensity=0;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094    <span class="keywordtype">int</span> i=0;
-<a name="l00095"></a>00095    <span class="keywordtype">int</span> n=0 ;
-<a name="l00096"></a>00096    <span class="keywordtype">int</span> partind = 0 ;
-<a name="l00097"></a>00097    <span class="keywordtype">int</span> centralpix=0 ;
-<a name="l00098"></a>00098    <span class="keywordtype">int</span> z_siz=0;
-<a name="l00099"></a>00099    <span class="keywordtype">int</span> z_min=0;
-<a name="l00100"></a>00100    <span class="keywordtype">int</span> z_max=0;
-<a name="l00101"></a>00101    <span class="keywordtype">int</span> z=0;
-<a name="l00102"></a>00102    <span class="keywordtype">int</span> z_stp=100;
-<a name="l00103"></a>00103    <span class="keywordtype">int</span> scales_sky=0;
-<a name="l00104"></a>00104    <span class="keywordtype">int</span> ks_clip=0;
-<a name="l00105"></a>00105    <span class="keywordtype">double</span> kappa=2.0;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107    <span class="keywordtype">float</span> ref_offx=0;
-<a name="l00108"></a>00108    <span class="keywordtype">float</span> ref_offy=0;
-<a name="l00109"></a>00109    <span class="keywordtype">float</span> newcenter_x=0 ;
-<a name="l00110"></a>00110    <span class="keywordtype">float</span> newcenter_y=0 ;
-<a name="l00111"></a>00111    <span class="keywordtype">float</span> cd1_1=0;
-<a name="l00112"></a>00112    <span class="keywordtype">float</span> cd1_2=0;
-<a name="l00113"></a>00113    <span class="keywordtype">float</span> cd2_1=0;
-<a name="l00114"></a>00114    <span class="keywordtype">float</span> cd2_2=0;
-<a name="l00115"></a>00115    <span class="keywordtype">double</span> pixelscale=0;
-<a name="l00116"></a>00116    <span class="keywordtype">double</span> angle=0;
-<a name="l00117"></a>00117    <span class="keywordtype">float</span> radangle=0 ;
-<a name="l00118"></a>00118    <span class="keywordtype">double</span> exptime=0 ;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120    <span class="keywordtype">double</span> * times=NULL ;
-<a name="l00121"></a>00121    <span class="keywordtype">float</span> * offsetx=NULL;
-<a name="l00122"></a>00122    <span class="keywordtype">float</span> * offsety=NULL;
-<a name="l00123"></a>00123    <span class="keywordtype">float</span> offx_min=1.e10;
-<a name="l00124"></a>00124    <span class="keywordtype">float</span> offy_min=1.e10;
-<a name="l00125"></a>00125    <span class="keywordtype">float</span> offx_max=-1.e10;
-<a name="l00126"></a>00126    <span class="keywordtype">float</span> offy_max=-1.e10;
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128    <span class="keywordtype">double</span> dis=0 ;
-<a name="l00129"></a>00129    <span class="keywordtype">double</span> centralLambda=0 ;
-<a name="l00130"></a>00130    <span class="keywordtype">double</span> mjd_obs=0;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132    <span class="keywordtype">char</span> name_jitter[MAX_NAME_SIZE] ;
-<a name="l00133"></a>00133    <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];
-<a name="l00134"></a>00134    <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];
-<a name="l00135"></a>00135    <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138    <span class="keywordtype">char</span> * name=NULL ;
-<a name="l00139"></a>00139    <span class="keywordtype">char</span> * partname=NULL;
-<a name="l00140"></a>00140    <span class="keywordtype">char</span> * partname2=NULL ;
-<a name="l00141"></a>00141    <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];
-<a name="l00142"></a>00142    <span class="keywordtype">int</span> vllx=0;
-<a name="l00143"></a>00143    <span class="keywordtype">int</span> vlly=0;
-<a name="l00144"></a>00144    <span class="keywordtype">int</span> vurx=0;
-<a name="l00145"></a>00145    <span class="keywordtype">int</span> vury=0;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147    <span class="keywordtype">int</span> onp=0;
-<a name="l00148"></a>00148    <span class="keywordtype">int</span> j=0;
-<a name="l00149"></a>00149    cpl_image* j_img=NULL;
-<a name="l00150"></a>00150    cpl_image* m_img=NULL;
-<a name="l00151"></a>00151    cpl_table* qclog_tbl=NULL;
-<a name="l00152"></a>00152    cpl_image* ill_cor=NULL;
-<a name="l00153"></a>00153    cpl_frame* frame=NULL;
-<a name="l00154"></a>00154    cpl_frameset* stk=NULL;
-<a name="l00155"></a>00155    cpl_parameter* p=NULL;
-<a name="l00156"></a>00156    <span class="keywordtype">int</span> mosaic_max_size=0;
-<a name="l00157"></a>00157    <span class="keywordtype">double</span> barycor=0;
-<a name="l00158"></a>00158    <span class="keywordtype">double</span> helicor=0;
-<a name="l00159"></a>00159    cpl_table* qclog=NULL;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161    check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00162"></a>00162                                         <span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>));
-<a name="l00163"></a>00163    check_nomsg(mosaic_max_size=cpl_parameter_get_int(p));
-<a name="l00164"></a>00164    check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00165"></a>00165    check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167    <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {
-<a name="l00168"></a>00168       strcpy(pro_mjit,PRO_MASK_COADD_STD);
-<a name="l00169"></a>00169       strcpy(pro_obs,PRO_OBS_STD);
-<a name="l00170"></a>00170       strcpy(pro_med,PRO_MED_COADD_STD);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {
-<a name="l00173"></a>00173       strcpy(pro_mjit,PRO_MASK_COADD_PSF);
-<a name="l00174"></a>00174       strcpy(pro_obs,PRO_OBS_PSF);
-<a name="l00175"></a>00175       strcpy(pro_med,PRO_MED_COADD_PSF);
-<a name="l00176"></a>00176    } <span class="keywordflow">else</span> {
-<a name="l00177"></a>00177       strcpy(pro_mjit,PRO_MASK_COADD_OBJ);
-<a name="l00178"></a>00178       strcpy(pro_obs,PRO_OBS_OBJ);
-<a name="l00179"></a>00179       strcpy(pro_med,PRO_MED_COADD_OBJ);
-<a name="l00180"></a>00180    }
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182    <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span>
-<a name="l00183"></a>00183    check_nomsg(stk = cpl_frameset_new());
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185    cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),
-<a name="l00186"></a>00186           <span class="stringliteral">"Error setting parameter configuration"</span>);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188    ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190    <span class="keywordflow">if</span> ( cfg->jitterind == 1 )
-<a name="l00191"></a>00191    {
-<a name="l00192"></a>00192       cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (cfg->nframes, sizeof (<span class="keywordtype">double</span>)),
-<a name="l00193"></a>00193              <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195       cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00196"></a>00196              <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198       cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00199"></a>00199              <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00200"></a>00200    }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202    <span class="keywordflow">if</span> (cfg->jitterind == 0)
-<a name="l00203"></a>00203    {
-<a name="l00204"></a>00204       <span class="keywordflow">if</span> ( NULL != (partname = strtok(cfg->outName, <span class="stringliteral">"."</span>)))
-<a name="l00205"></a>00205       {
-<a name="l00206"></a>00206          partname2 = strtok (NULL, <span class="stringliteral">"."</span>) ;
-<a name="l00207"></a>00207          partind = 1 ;
-<a name="l00208"></a>00208       }
-<a name="l00209"></a>00209    }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211    ck0(sinfo_auto_size_cube5(cfg,&ref_offx,&ref_offy,
-<a name="l00212"></a>00212                              &offx_min,&offy_min,
-<a name="l00213"></a>00213                              &offx_max,&offy_max),
-<a name="l00214"></a>00214        <span class="stringliteral">"Error resizing cube"</span>);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_ILL_COR)) {
-<a name="l00217"></a>00217       frame = cpl_frameset_find(sof,PRO_ILL_COR);
-<a name="l00218"></a>00218       ill_cor=cpl_image_load(cpl_frame_get_filename(frame),CPL_TYPE_FLOAT,0,0);
-<a name="l00219"></a>00219    } <span class="keywordflow">else</span> {
-<a name="l00220"></a>00220       sinfo_msg(<span class="stringliteral">"Illumination correction image not provided"</span>);
-<a name="l00221"></a>00221       cpl_error_reset();
-<a name="l00222"></a>00222    }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224    <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )
-<a name="l00225"></a>00225    {
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Read FITS information"</span>);
-<a name="l00228"></a>00228       name = cfg->framelist[n] ;
-<a name="l00229"></a>00229       <span class="keywordflow">if</span> (n == 0)
-<a name="l00230"></a>00230       {
-<a name="l00231"></a>00231          strcpy (name_jitter, name) ;
-<a name="l00232"></a>00232       }
-<a name="l00233"></a>00233       <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {
-<a name="l00234"></a>00234          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00235"></a>00235          <span class="keywordflow">goto</span> cleanup;
-<a name="l00236"></a>00236       }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239       <span class="comment">/* get some header values and compute the CD-sinfo_matrix */</span>
-<a name="l00240"></a>00240       plist=cpl_propertylist_load(name,0);
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242       <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
-<a name="l00243"></a>00243          mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
-<a name="l00244"></a>00244       } <span class="keywordflow">else</span> {
-<a name="l00245"></a>00245          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);
-<a name="l00246"></a>00246          cpl_propertylist_delete(plist) ;
-<a name="l00247"></a>00247          <span class="keywordflow">return</span> -1;
-<a name="l00248"></a>00248       }
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251       pixelscale = sinfo_pfits_get_pixscale(plist) /2;
-<a name="l00252"></a>00252       angle = sinfo_pfits_get_posangle(plist) ;
-<a name="l00253"></a>00253       <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span>
-<a name="l00254"></a>00254       <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00255"></a>00255          cpl_error_reset();
-<a name="l00256"></a>00256       }
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258       sinfo_free_propertylist(&plist);
-<a name="l00259"></a>00259       <span class="comment">// The following 5 lines are not really used here!</span>
-<a name="l00260"></a>00260       radangle = angle * PI_NUMB / 180. ;
-<a name="l00261"></a>00261       cd1_1 = cos(radangle) ;
-<a name="l00262"></a>00262       cd1_2 = sin(radangle) ;
-<a name="l00263"></a>00263       cd2_1 = -sin(radangle) ;
-<a name="l00264"></a>00264       cd2_2 = cos(radangle) ;
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;
-<a name="l00267"></a>00267       cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),
-<a name="l00268"></a>00268              <span class="stringliteral">" could not load frame %s!"</span>,name) ;
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270       <span class="keywordflow">if</span> (cfg->jitterind == 1)
-<a name="l00271"></a>00271       {
-<a name="l00272"></a>00272          exptime = sinfo_pfits_get_ditndit(name) ;
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274          <span class="keywordflow">if</span> (exptime == FLAG)
-<a name="l00275"></a>00275          {
-<a name="l00276"></a>00276             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not read fits header keyword exptime!"</span>);
-<a name="l00277"></a>00277             <span class="keywordflow">goto</span> cleanup;
-<a name="l00278"></a>00278          }
-<a name="l00279"></a>00279          times[n] = exptime ;
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281          ck0(sinfo_new_assign_offset(n,name,offsetx,offsety,
-<a name="l00282"></a>00282                                      ref_offx,ref_offy),
-<a name="l00283"></a>00283              <span class="stringliteral">"Error assigning offsets"</span>);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285       }
-<a name="l00286"></a>00286       sinfo_free_image(&im);
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288    } <span class="comment">/* end loop over n (nframes) */</span>
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291    <span class="comment">/* leak free */</span>
-<a name="l00292"></a>00292    <span class="keywordflow">if</span>(cfg->jitterind == 0) {
-<a name="l00293"></a>00293       <span class="keywordflow">goto</span> exit;
-<a name="l00294"></a>00294    }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296    <span class="comment">/* Here in case of autojitter we estimate the sky */</span>
-<a name="l00297"></a>00297    <span class="keywordflow">if</span>( (cfg->size_x*cfg->size_y*cfg->nframes) > (100*mosaic_max_size) ) {
-<a name="l00298"></a>00298       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Coadd cube size:%d,%d. N frames: %d"</span>,
-<a name="l00299"></a>00299                         cfg->size_x,cfg->size_y,cfg->nframes);
-<a name="l00300"></a>00300       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Max allowed should be such "</span>
-<a name="l00301"></a>00301                         <span class="stringliteral">"that sixeX*sixeY*Nframes < 100*%d"</span>,mosaic_max_size);
-<a name="l00302"></a>00302       <span class="keywordflow">goto</span> exit;
-<a name="l00303"></a>00303    }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305    <span class="keywordflow">if</span> ( cfg->jitterind == 1 )
-<a name="l00306"></a>00306    {
-<a name="l00307"></a>00307       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vllx"</span>));
-<a name="l00308"></a>00308       check_nomsg(vllx = cpl_parameter_get_int(p));
-<a name="l00309"></a>00309       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vlly"</span>));
-<a name="l00310"></a>00310       check_nomsg(vlly = cpl_parameter_get_int(p));
-<a name="l00311"></a>00311       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vurx"</span>));
-<a name="l00312"></a>00312       check_nomsg(vurx = cpl_parameter_get_int(p));
-<a name="l00313"></a>00313       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vury"</span>));
-<a name="l00314"></a>00314       check_nomsg(vury = cpl_parameter_get_int(p));
-<a name="l00315"></a>00315       cknull(cube_tmp = (cpl_imagelist**) cpl_calloc (cfg->nframes,
-<a name="l00316"></a>00316                                                       sizeof (cpl_imagelist*)),
-<a name="l00317"></a>00317              <span class="stringliteral">"Could not allocate memory for cube_tmp"</span>);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320       cknull(cubeobject = (cpl_imagelist**) cpl_calloc (cfg->nframes,
-<a name="l00321"></a>00321                                                         sizeof (cpl_imagelist*)),
-<a name="l00322"></a>00322              <span class="stringliteral">"Could not allocate memory for cubeobject"</span>);
-<a name="l00323"></a>00323       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00324"></a>00324                                            <span class="stringliteral">"sinfoni.objnod.sky_cor"</span>));
-<a name="l00325"></a>00325       check_nomsg(sky_cor=cpl_parameter_get_bool(p));
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328       <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00329"></a>00329          <span class="keywordflow">if</span>(sky_cor == 1 && (pdensity == 1 || pdensity == 3) &&
-<a name="l00330"></a>00330             strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00331"></a>00331             sinfo_msg(<span class="stringliteral">"load sky corrected cubes"</span>);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333             snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj_cor"</span>,
-<a name="l00334"></a>00334                      n,<span class="stringliteral">".fits"</span>);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336          } <span class="keywordflow">else</span> {
-<a name="l00337"></a>00337             snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,n,
-<a name="l00338"></a>00338                      <span class="stringliteral">".fits"</span>);
-<a name="l00339"></a>00339          }
-<a name="l00340"></a>00340          check_nomsg(cube_tmp[n] = cpl_imagelist_load(file_name,
-<a name="l00341"></a>00341                                                       CPL_TYPE_FLOAT,0));
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344          check_nomsg(cubeobject[n] = sinfo_new_cube_getvig(
-<a name="l00345"></a>00345                              cube_tmp[n],
-<a name="l00346"></a>00346                              1+vllx,1+vlly,
-<a name="l00347"></a>00347                              64 - vurx, 64 - vury));
-<a name="l00348"></a>00348          check_nomsg(sinfo_free_imagelist(&cube_tmp[n]));
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350       }
-<a name="l00351"></a>00351       sinfo_free_array_imagelist(&cube_tmp);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354    }
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357    <span class="comment">/*</span>
-<a name="l00358"></a>00358 <span class="comment">     ---------------------------------------------------------------------</span>
-<a name="l00359"></a>00359 <span class="comment">     ------------------------JITTERING------------------------------------</span>
-<a name="l00360"></a>00360 <span class="comment">     ---------------------------------------------------------------------</span>
-<a name="l00361"></a>00361 <span class="comment">   */</span>
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363    <span class="keywordflow">if</span> (cfg->jitterind == 1)
-<a name="l00364"></a>00364    {
-<a name="l00365"></a>00365       sinfo_msg(<span class="stringliteral">"Jittering..."</span>);
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367       sinfo_msg(<span class="stringliteral">"Coadded cube size. x: %d y: %d"</span>,
-<a name="l00368"></a>00368                 cfg->size_x,cfg->size_y);
-<a name="l00369"></a>00369       check_nomsg(jittercube = cpl_imagelist_new()) ;
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372       <span class="comment">/*</span>
-<a name="l00373"></a>00373 <span class="comment">         ---------------------------------------------------------------------</span>
-<a name="l00374"></a>00374 <span class="comment">         -------------------THOMAS ALGORITHM----------------------------------</span>
-<a name="l00375"></a>00375 <span class="comment">         ---------------------------------------------------------------------</span>
-<a name="l00376"></a>00376 <span class="comment">      */</span>
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00379"></a>00379                                            <span class="stringliteral">"sinfoni.objnod.scales_sky"</span>));
-<a name="l00380"></a>00380       check_nomsg(scales_sky=cpl_parameter_get_bool(p));
-<a name="l00381"></a>00381       check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>));
-<a name="l00382"></a>00382       check_nomsg(ks_clip = cpl_parameter_get_bool(p));
-<a name="l00383"></a>00383       check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.kappa"</span>));
-<a name="l00384"></a>00384       check_nomsg(kappa = cpl_parameter_get_double(p));
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387       <span class="keywordflow">if</span>(scales_sky == 1) {
-<a name="l00388"></a>00388          sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);
-<a name="l00389"></a>00389          <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {
-<a name="l00390"></a>00390             sinfo_msg(<span class="stringliteral">"Process cube %d\n"</span>,n);
-<a name="l00391"></a>00391             sinfo_new_sinfoni_correct_median_it(&(cubeobject[n]));
-<a name="l00392"></a>00392          }
-<a name="l00393"></a>00393       }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396       <span class="comment">/* AMO CHECK */</span>
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398       cknull(maskcube=cpl_imagelist_new(),<span class="stringliteral">"could not allocate cube!"</span>);
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400       <span class="comment">/* Illumination correction */</span>
-<a name="l00401"></a>00401       <span class="keywordflow">if</span>(ill_cor != NULL) {
-<a name="l00402"></a>00402          <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {
-<a name="l00403"></a>00403             cpl_imagelist_divide_image(cubeobject[n],ill_cor);
-<a name="l00404"></a>00404          }
-<a name="l00405"></a>00405       }
-<a name="l00406"></a>00406       sinfo_free_image(&ill_cor);
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408       sinfo_msg(<span class="stringliteral">"Combine jittered cubes"</span>);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411       <span class="keywordflow">if</span>(ks_clip == 1) {
-<a name="l00412"></a>00412          sinfo_msg(<span class="stringliteral">"Cube coaddition with kappa-sigma"</span>);
-<a name="l00413"></a>00413       }
-<a name="l00414"></a>00414       check_nomsg(onp=cpl_imagelist_get_size(cubeobject[0]));
-<a name="l00415"></a>00415       <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {
-<a name="l00416"></a>00416          z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);
-<a name="l00417"></a>00417          z_min=z;
-<a name="l00418"></a>00418          z_max=z_min+z_siz;
-<a name="l00419"></a>00419          sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,
-<a name="l00420"></a>00420                    z_min,z_max,onp);
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422          <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {
-<a name="l00423"></a>00423             check_nomsg(j_img=cpl_image_new(cfg->size_x,
-<a name="l00424"></a>00424                                             cfg->size_y,CPL_TYPE_FLOAT));
-<a name="l00425"></a>00425             check_nomsg(cpl_imagelist_set(jittercube,j_img,j));
-<a name="l00426"></a>00426             check_nomsg(m_img = cpl_image_new(cfg->size_x,
-<a name="l00427"></a>00427                                               cfg->size_y,CPL_TYPE_FLOAT));
-<a name="l00428"></a>00428             check_nomsg(cpl_imagelist_set(maskcube,m_img,j));
-<a name="l00429"></a>00429          }
-<a name="l00430"></a>00430          <span class="keywordflow">if</span>(ks_clip == 1) {
-<a name="l00431"></a>00431             sinfo_new_combine_jittered_cubes_thomas_range(cubeobject,
-<a name="l00432"></a>00432                                                           jittercube,
-<a name="l00433"></a>00433                                                           maskcube,
-<a name="l00434"></a>00434                                                           cfg->nframes,
-<a name="l00435"></a>00435                                                           offsetx,offsety,
-<a name="l00436"></a>00436                                                           times,
-<a name="l00437"></a>00437                                                           cfg->kernel_type,
-<a name="l00438"></a>00438                                                           z_min,
-<a name="l00439"></a>00439                                                           z_max,
-<a name="l00440"></a>00440                                                           kappa);
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442          } <span class="keywordflow">else</span> {
-<a name="l00443"></a>00443             sinfo_new_combine_jittered_cubes_range(cubeobject,
-<a name="l00444"></a>00444                                                    jittercube,
-<a name="l00445"></a>00445                                                    maskcube,
-<a name="l00446"></a>00446                                                    cfg->nframes,
-<a name="l00447"></a>00447                                                    offsetx,
-<a name="l00448"></a>00448                                                    offsety,
-<a name="l00449"></a>00449                                                    times,
-<a name="l00450"></a>00450                                                    cfg->kernel_type,
-<a name="l00451"></a>00451                                                    z_min,
-<a name="l00452"></a>00452                                                    z_max) ;
-<a name="l00453"></a>00453          }
-<a name="l00454"></a>00454       }
-<a name="l00455"></a>00455       sinfo_new_convert_0_to_ZERO_for_cubes(jittercube) ;
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457       <span class="keywordflow">if</span> (jittercube == NULL)
-<a name="l00458"></a>00458       {
-<a name="l00459"></a>00459          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate new data cube!"</span>) ;
-<a name="l00460"></a>00460          <span class="keywordflow">goto</span> cleanup;
-<a name="l00461"></a>00461       }
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463       <span class="keywordflow">if</span> (maskcube == NULL)
-<a name="l00464"></a>00464       {
-<a name="l00465"></a>00465          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not merge the jittered data cubes\n"</span>) ;
-<a name="l00466"></a>00466          <span class="keywordflow">goto</span> cleanup;
-<a name="l00467"></a>00467       }
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469       <span class="keywordflow">for</span> ( i = 0 ; i <cfg->nframes  ; i++ ) {
-<a name="l00470"></a>00470          sinfo_free_imagelist(&cubeobject[i]);
-<a name="l00471"></a>00471          <span class="comment">//sinfo_msg("offx[%d]=%f,offy[%d]=%f",i,offsetx[i],i,offsety[i]);</span>
-<a name="l00472"></a>00472       }
-<a name="l00473"></a>00473       sinfo_free_array_imagelist(&cubeobject);
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475       <span class="comment">//Old setting</span>
-<a name="l00476"></a>00476       <span class="comment">//newcenter_x = cfg->size_x / 2. + 0.5 ;</span>
-<a name="l00477"></a>00477       <span class="comment">//newcenter_y = cfg->size_y / 2. + 0.5 ;</span>
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480       <span class="comment">/* new setting */</span>
-<a name="l00481"></a>00481       <span class="comment">/*</span>
-<a name="l00482"></a>00482 <span class="comment">        sinfo_msg("offx_min=%f,offy_min=%f",offx_min,offy_min);</span>
-<a name="l00483"></a>00483 <span class="comment">        sinfo_msg("offx_max=%f,offy_max=%f",offx_max,offy_max);</span>
-<a name="l00484"></a>00484 <span class="comment">        sinfo_msg("ref_offx=%f,ref_offy=%f",ref_offx,ref_offy);</span>
-<a name="l00485"></a>00485 <span class="comment"></span>
-<a name="l00486"></a>00486 <span class="comment">        newcenter_x=2*floor(fabs(offx_min)+0.5)+32+8;</span>
-<a name="l00487"></a>00487 <span class="comment">        newcenter_y=-2*floor(fabs(offy_max)+0.5)+32-2;</span>
-<a name="l00488"></a>00488 <span class="comment"></span>
-<a name="l00489"></a>00489 <span class="comment"></span>
-<a name="l00490"></a>00490 <span class="comment">        newcenter_x=cfg->size_x / 2. -offsetx[0];</span>
-<a name="l00491"></a>00491 <span class="comment">        newcenter_y=cfg->size_y / 2. -offsety[0];</span>
-<a name="l00492"></a>00492 <span class="comment">      */</span>
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496       <span class="keywordflow">if</span> (mjd_obs > 53825. ) {
-<a name="l00497"></a>00497          <span class="comment">/* April 1st 2006 */</span>
-<a name="l00498"></a>00498          newcenter_x=cfg->size_x / 2. +2*ref_offx;
-<a name="l00499"></a>00499          newcenter_y=cfg->size_y / 2. +2*ref_offy;
-<a name="l00500"></a>00500       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
-<a name="l00501"></a>00501          <span class="comment">/* after detector's upgrade */</span>
-<a name="l00502"></a>00502          newcenter_x=cfg->size_x / 2. -2*ref_offx;
-<a name="l00503"></a>00503          newcenter_y=cfg->size_y / 2. +2*ref_offy;
-<a name="l00504"></a>00504       } <span class="keywordflow">else</span> {
-<a name="l00505"></a>00505          <span class="comment">/* before detector's upgrade */</span>
-<a name="l00506"></a>00506          newcenter_x=cfg->size_x / 2. +2*ref_offx;
-<a name="l00507"></a>00507          newcenter_y=cfg->size_y / 2. -2*ref_offy;
-<a name="l00508"></a>00508       }
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511       <span class="comment">//sinfo_msg("CRPIX=%f,%f", newcenter_x, newcenter_y);</span>
-<a name="l00512"></a>00512       <span class="comment">//newcenter_x=2*floor(fabs(ref_offx)+0.5);</span>
-<a name="l00513"></a>00513       <span class="comment">//newcenter_y=-2*floor(fabs(ref_offy)+0.5);</span>
-<a name="l00514"></a>00514       <span class="comment">//sinfo_msg_warning("Center image: %f %f",newcenter_x,newcenter_y);</span>
-<a name="l00515"></a>00515       cknull_nomsg(qclog = sinfo_qclog_init());
-<a name="l00516"></a>00516       plist=cpl_propertylist_load(file_name,0);
-<a name="l00517"></a>00517       <span class="keywordflow">if</span>(sinfo_baryvel(plist, &barycor,&helicor) != CPL_ERROR_NONE) {
-<a name="l00518"></a>00518          <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Could not compute velocity corrections"</span>);
-<a name="l00519"></a>00519          cpl_error_reset();
-<a name="l00520"></a>00520       } <span class="keywordflow">else</span> {
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522          check_nomsg(sinfo_qclog_add_double(qclog,
-<a name="l00523"></a>00523                                             <span class="stringliteral">"QC VRAD BARYCOR"</span>,
-<a name="l00524"></a>00524                                             barycor,
-<a name="l00525"></a>00525                                             <span class="stringliteral">"Barycentric radial velocity correction "</span>,
-<a name="l00526"></a>00526                                             <span class="stringliteral">"%13.6f"</span>));
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528          check_nomsg(sinfo_qclog_add_double(qclog,
-<a name="l00529"></a>00529                                             <span class="stringliteral">"QC VRAD HELICOR"</span>,
-<a name="l00530"></a>00530                                             helicor,
-<a name="l00531"></a>00531                                             <span class="stringliteral">"Heliocentric radial velocity correction "</span>,
-<a name="l00532"></a>00532                                             <span class="stringliteral">"%13.6f"</span>));
-<a name="l00533"></a>00533          sinfo_msg(<span class="stringliteral">"Barycor=%g Helicor=%g"</span>,barycor,helicor);
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535          sinfo_free_propertylist(&plist);
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537       }
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539       ck0(sinfo_pro_save_ims(jittercube,sof,sof,cfg->outName,
-<a name="l00540"></a>00540                              procatg,qclog,plugin_id,config),
-<a name="l00541"></a>00541           <span class="stringliteral">"cannot save cube %s"</span>, cfg->outName);
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543       sinfo_free_table(&qclog);
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545       <span class="comment">/* we need to set again the following 3 */</span>
-<a name="l00546"></a>00546       plist=cpl_propertylist_load(file_name,0);
-<a name="l00547"></a>00547       dis=sinfo_pfits_get_cdelt3(plist);
-<a name="l00548"></a>00548       centralLambda=sinfo_pfits_get_crval3(plist);
-<a name="l00549"></a>00549       centralpix=sinfo_pfits_get_crpix3(plist);
-<a name="l00550"></a>00550       sinfo_free_propertylist(&plist);
-<a name="l00551"></a>00551       sinfo_new_set_wcs_cube(jittercube, cfg->outName,
-<a name="l00552"></a>00552                              centralLambda, dis,
-<a name="l00553"></a>00553                              centralpix, newcenter_x, newcenter_y);
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555       cknull(jitter_image = sinfo_new_median_cube(jittercube),
-<a name="l00556"></a>00556              <span class="stringliteral">" could not do sinfo_medianCube()"</span>);
-<a name="l00557"></a>00557       cknull_nomsg(qclog = sinfo_qclog_init());
-<a name="l00558"></a>00558       update_bad_pixel_map(jitter_image);
-<a name="l00559"></a>00559       check_nomsg(sinfo_qclog_add_double(qclog,
-<a name="l00560"></a>00560                                                <span class="stringliteral">"QC FRMDIF MEANSTD"</span>,
-<a name="l00561"></a>00561                                                cpl_image_get_mean(jitter_image),
-<a name="l00562"></a>00562                                                <span class="stringliteral">"mean of the collapesd cube"</span>,
-<a name="l00563"></a>00563                                                <span class="stringliteral">"%13.6f"</span>));
-<a name="l00564"></a>00564       check_nomsg(sinfo_qclog_add_double(qclog,
-<a name="l00565"></a>00565                                                <span class="stringliteral">"QC FRMDIF STDEV"</span>,
-<a name="l00566"></a>00566                                                cpl_image_get_stdev(jitter_image),
-<a name="l00567"></a>00567                                                <span class="stringliteral">"standard deviation of the collapesd cube"</span>,
-<a name="l00568"></a>00568                                                <span class="stringliteral">"%13.6f"</span>));
-<a name="l00569"></a>00569       ck0(sinfo_pro_save_ima(jitter_image,sof,sof,cfg->med_cube_name,
-<a name="l00570"></a>00570                              pro_med,qclog,plugin_id,config),
-<a name="l00571"></a>00571           <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00572"></a>00572       sinfo_free_table(&qclog);
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574       sinfo_new_set_wcs_image(jitter_image, cfg->med_cube_name,
-<a name="l00575"></a>00575                               newcenter_x,newcenter_y);
-<a name="l00576"></a>00576 
-<a name="l00577"></a>00577       sinfo_free_image(&jitter_image);
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579       ck0(sinfo_pro_save_ims(maskcube,sof,sof,cfg->maskname,
-<a name="l00580"></a>00580                              pro_mjit,NULL,plugin_id,config),
-<a name="l00581"></a>00581           <span class="stringliteral">"cannot save cube %s"</span>, cfg->maskname);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583       sinfo_new_set_wcs_cube(maskcube, cfg->maskname,
-<a name="l00584"></a>00584                              centralLambda, dis, centralpix,
-<a name="l00585"></a>00585                              newcenter_x, newcenter_y);
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587       sinfo_free_double(&times) ;
-<a name="l00588"></a>00588       sinfo_free_float(&offsetx) ;
-<a name="l00589"></a>00589       sinfo_free_float(&offsety) ;
-<a name="l00590"></a>00590       sinfo_free_imagelist(&maskcube) ;
-<a name="l00591"></a>00591       sinfo_free_imagelist(&jittercube) ;
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593    } <span class="comment">/* end of jittering */</span>
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595   exit:
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597    <span class="comment">/* free memory */</span>
-<a name="l00598"></a>00598    sinfo_objnod_free(&cfg);
-<a name="l00599"></a>00599    sinfo_free_frameset(&stk);
-<a name="l00600"></a>00600    <span class="keywordflow">return</span> 0;
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602   cleanup:
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604    sinfo_free_image(&jitter_image);
-<a name="l00605"></a>00605    sinfo_free_imagelist(&jittercube) ;
-<a name="l00606"></a>00606    sinfo_free_imagelist(&maskcube) ;
-<a name="l00607"></a>00607    sinfo_free_table(&qclog);
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609    <span class="keywordflow">if</span>(cfg != NULL) {
-<a name="l00610"></a>00610       <span class="keywordflow">if</span>(cube_tmp != NULL) {
-<a name="l00611"></a>00611          <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00612"></a>00612             sinfo_free_imagelist(&(cube_tmp[n]));
-<a name="l00613"></a>00613          }
-<a name="l00614"></a>00614          sinfo_free_array_imagelist(&cube_tmp);
-<a name="l00615"></a>00615       }
-<a name="l00616"></a>00616       <span class="keywordflow">if</span>(cubeobject != NULL) {
-<a name="l00617"></a>00617          <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00618"></a>00618             sinfo_free_imagelist(&(cubeobject[n]));
-<a name="l00619"></a>00619          }
-<a name="l00620"></a>00620          sinfo_free_array_imagelist(&cubeobject);
-<a name="l00621"></a>00621       }
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623    }
-<a name="l00624"></a>00624    sinfo_free_table(&qclog_tbl);
-<a name="l00625"></a>00625    sinfo_free_image(&im);
-<a name="l00626"></a>00626    sinfo_free_image(&ill_cor);
-<a name="l00627"></a>00627    sinfo_free_float(&offsety);
-<a name="l00628"></a>00628    sinfo_free_float(&offsetx);
-<a name="l00629"></a>00629    sinfo_free_double(&times);
-<a name="l00630"></a>00630    sinfo_objnod_free(&cfg);
-<a name="l00631"></a>00631    sinfo_free_frameset(&stk);
-<a name="l00632"></a>00632 
-<a name="l00633"></a>00633    <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00634"></a>00634       sinfo_check_rec_status(0);
-<a name="l00635"></a>00635    }
-<a name="l00636"></a>00636    <span class="keywordflow">return</span> -1;
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640 }
-<a name="l00641"></a>00641 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cubes_coadd.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">File name    :       sinfo_new_cubes_coadd.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">Created on   :    December 3, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">Description  :    Creates data cubes or merges data cubes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">out of jittered object-sky</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">nodding observations</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">  Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_new_cubes_coadd.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_baryvel.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">//Used only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">  Defines</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">  Function Definitions</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">  Function     : sinfo_new_cubes_coadd()</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">  In           : ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">  Out          : integer (0 if it worked, -1 if it doesn't)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">  Job          : this routine carries through the data cube creation of an</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">  object science observation using object-sky nodding</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">  and jittering. This script expects jittered frames that</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">  were already sky-subtracted</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">  averaged, flatfielded, spectral tilt corrected and</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">  interleaved if necessary</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> sinfo_new_cubes_coadd (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                        cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>    object_config * cfg=NULL ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>    cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>    cpl_image* jitter_image=NULL;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>    cpl_imagelist  ** cube_tmp=NULL ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>    cpl_imagelist  ** cubeobject=NULL ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>    cpl_imagelist  * jittercube=NULL ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>    cpl_imagelist  * maskcube=NULL ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>    <span class="keywordtype">int</span> sky_cor=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>    <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>    <span class="keywordtype">int</span> n=0 ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>    <span class="keywordtype">int</span> partind = 0 ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>    <span class="keywordtype">int</span> centralpix=0 ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    <span class="keywordtype">int</span> z_siz=0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    <span class="keywordtype">int</span> z_min=0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    <span class="keywordtype">int</span> z_max=0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    <span class="keywordtype">int</span> z_stp=100;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    <span class="keywordtype">int</span> scales_sky=0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    <span class="keywordtype">int</span> ks_clip=0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="keywordtype">double</span> kappa=2.0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>    <span class="keywordtype">float</span> ref_offx=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>    <span class="keywordtype">float</span> ref_offy=0;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    <span class="keywordtype">float</span> newcenter_x=0 ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    <span class="keywordtype">float</span> newcenter_y=0 ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>    <span class="keywordtype">float</span> cd1_1=0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    <span class="keywordtype">float</span> cd1_2=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>    <span class="keywordtype">float</span> cd2_1=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    <span class="keywordtype">float</span> cd2_2=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>    <span class="keywordtype">double</span> pixelscale=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="keywordtype">double</span> angle=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>    <span class="keywordtype">float</span> radangle=0 ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">double</span> exptime=0 ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">double</span> * times=NULL ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">float</span> * offsetx=NULL;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">float</span> * offsety=NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">float</span> offx_min=1.e10;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">float</span> offy_min=1.e10;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">float</span> offx_max=-1.e10;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">float</span> offy_max=-1.e10;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">double</span> dis=0 ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">double</span> centralLambda=0 ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    <span class="keywordtype">double</span> mjd_obs=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    <span class="keywordtype">char</span> name_jitter[MAX_NAME_SIZE] ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    <span class="keywordtype">char</span> * name=NULL ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    <span class="keywordtype">char</span> * partname=NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="keywordtype">char</span> * partname2=NULL ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    <span class="keywordtype">int</span> vllx=0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="keywordtype">int</span> vlly=0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="keywordtype">int</span> vurx=0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    <span class="keywordtype">int</span> vury=0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>    cpl_image* j_img=NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    cpl_image* ill_cor=NULL;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    cpl_frameset* stk=NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>    cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    <span class="keywordtype">int</span> mosaic_max_size=0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>    <span class="keywordtype">double</span> barycor=0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    <span class="keywordtype">double</span> helicor=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    cpl_table* qclog=NULL;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                                         <span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>));</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    check_nomsg(mosaic_max_size=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>    <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       strcpy(pro_mjit,PRO_MASK_COADD_STD);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>       strcpy(pro_obs,PRO_OBS_STD);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       strcpy(pro_med,PRO_MED_COADD_STD);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       strcpy(pro_mjit,PRO_MASK_COADD_PSF);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       strcpy(pro_obs,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       strcpy(pro_med,PRO_MED_COADD_PSF);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       strcpy(pro_mjit,PRO_MASK_COADD_OBJ);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       strcpy(pro_obs,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       strcpy(pro_med,PRO_MED_COADD_OBJ);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>    }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>    check_nomsg(stk = cpl_frameset_new());</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>    cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>           <span class="stringliteral">"Error setting parameter configuration"</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>    ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>    <span class="keywordflow">if</span> ( cfg->jitterind == 1 )</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (cfg->nframes, sizeof (<span class="keywordtype">double</span>)),</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>              <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>              <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>              <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    <span class="keywordflow">if</span> (cfg->jitterind == 0)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       <span class="keywordflow">if</span> ( NULL != (partname = strtok(cfg->outName, <span class="stringliteral">"."</span>)))</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>          partname2 = strtok (NULL, <span class="stringliteral">"."</span>) ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>          partind = 1 ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    ck0(sinfo_auto_size_cube5(cfg,&ref_offx,&ref_offy,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                              &offx_min,&offy_min,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                              &offx_max,&offy_max),</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>        <span class="stringliteral">"Error resizing cube"</span>);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_ILL_COR)) {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       frame = cpl_frameset_find(sof,PRO_ILL_COR);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       ill_cor=cpl_image_load(cpl_frame_get_filename(frame),CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       sinfo_msg(<span class="stringliteral">"Illumination correction image not provided"</span>);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       cpl_error_reset();</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Read FITS information"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       name = cfg->framelist[n] ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>          strcpy (name_jitter, name) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       <span class="comment">/* get some header values and compute the CD-sinfo_matrix */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>          mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>          cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>          <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       pixelscale = sinfo_pfits_get_pixscale(plist) /2;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       angle = sinfo_pfits_get_posangle(plist) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>          cpl_error_reset();</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       <span class="comment">// The following 5 lines are not really used here!</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       radangle = angle * PI_NUMB / 180. ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>       cd1_1 = cos(radangle) ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       cd1_2 = sin(radangle) ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       cd2_1 = -sin(radangle) ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       cd2_2 = cos(radangle) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>              <span class="stringliteral">" could not load frame %s!"</span>,name) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       <span class="keywordflow">if</span> (cfg->jitterind == 1)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>          exptime = sinfo_pfits_get_ditndit(name) ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>          <span class="keywordflow">if</span> (exptime == FLAG)</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>          {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not read fits header keyword exptime!"</span>);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>          }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>          times[n] = exptime ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>          ck0(sinfo_new_assign_offset(n,name,offsetx,offsety,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                      ref_offx,ref_offy),</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>              <span class="stringliteral">"Error assigning offsets"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       sinfo_free_image(&im);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>    } <span class="comment">/* end loop over n (nframes) */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>    <span class="comment">/* leak free */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    <span class="keywordflow">if</span>(cfg->jitterind == 0) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       <span class="keywordflow">goto</span> exit;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>    }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    <span class="comment">/* Here in case of autojitter we estimate the sky */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>    <span class="keywordflow">if</span>( (cfg->size_x*cfg->size_y*cfg->nframes) > (100*mosaic_max_size) ) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Coadd cube size:%d,%d. N frames: %d"</span>,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                         cfg->size_x,cfg->size_y,cfg->nframes);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Max allowed should be such "</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                         <span class="stringliteral">"that sixeX*sixeY*Nframes < 100*%d"</span>,mosaic_max_size);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       <span class="keywordflow">goto</span> exit;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>    }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    <span class="keywordflow">if</span> ( cfg->jitterind == 1 )</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vllx"</span>));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       check_nomsg(vllx = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vlly"</span>));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       check_nomsg(vlly = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vurx"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       check_nomsg(vurx = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vury"</span>));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       check_nomsg(vury = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       cknull(cube_tmp = (cpl_imagelist**) cpl_calloc (cfg->nframes,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                                                       sizeof (cpl_imagelist*)),</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>              <span class="stringliteral">"Could not allocate memory for cube_tmp"</span>);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       cknull(cubeobject = (cpl_imagelist**) cpl_calloc (cfg->nframes,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                                                         sizeof (cpl_imagelist*)),</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>              <span class="stringliteral">"Could not allocate memory for cubeobject"</span>);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                            <span class="stringliteral">"sinfoni.objnod.sky_cor"</span>));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       check_nomsg(sky_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>          <span class="keywordflow">if</span>(sky_cor == 1 && (pdensity == 1 || pdensity == 3) &&</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>             strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>             sinfo_msg(<span class="stringliteral">"load sky corrected cubes"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>             snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj_cor"</span>,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                      n,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>             snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,n,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                      <span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>          }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>          check_nomsg(cube_tmp[n] = cpl_imagelist_load(file_name,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                                                       CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>          check_nomsg(cubeobject[n] = sinfo_new_cube_getvig(</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                              cube_tmp[n],</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                              1+vllx,1+vlly,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                              64 - vurx, 64 - vury));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>          check_nomsg(sinfo_free_imagelist(&cube_tmp[n]));</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       }</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       sinfo_free_array_imagelist(&cube_tmp);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">     ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">     ------------------------JITTERING------------------------------------</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">     ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>    <span class="keywordflow">if</span> (cfg->jitterind == 1)</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>    {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       sinfo_msg(<span class="stringliteral">"Jittering..."</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       sinfo_msg(<span class="stringliteral">"Coadded cube size. x: %d y: %d"</span>,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                 cfg->size_x,cfg->size_y);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       check_nomsg(jittercube = cpl_imagelist_new()) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">         ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">         -------------------THOMAS ALGORITHM----------------------------------</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">         ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                                            <span class="stringliteral">"sinfoni.objnod.scales_sky"</span>));</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       check_nomsg(scales_sky=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>));</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       check_nomsg(ks_clip = cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.kappa"</span>));</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>       check_nomsg(kappa = cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       <span class="keywordflow">if</span>(scales_sky == 1) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>          sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>          <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>             sinfo_msg(<span class="stringliteral">"Process cube %d\n"</span>,n);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>             sinfo_new_sinfoni_correct_median_it(&(cubeobject[n]));</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>          }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       <span class="comment">/* AMO CHECK */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       cknull(maskcube=cpl_imagelist_new(),<span class="stringliteral">"could not allocate cube!"</span>);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       <span class="comment">/* Illumination correction */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       <span class="keywordflow">if</span>(ill_cor != NULL) {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>          <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>             cpl_imagelist_divide_image(cubeobject[n],ill_cor);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>          }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>       }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>       sinfo_free_image(&ill_cor);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       sinfo_msg(<span class="stringliteral">"Combine jittered cubes"</span>);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       <span class="keywordflow">if</span>(ks_clip == 1) {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>          sinfo_msg(<span class="stringliteral">"Cube coaddition with kappa-sigma"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       check_nomsg(onp=cpl_imagelist_get_size(cubeobject[0]));</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>          z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>          z_min=z;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>          z_max=z_min+z_siz;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>          sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                    z_min,z_max,onp);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>          <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>             check_nomsg(j_img=cpl_image_new(cfg->size_x,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                             cfg->size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>             check_nomsg(cpl_imagelist_set(jittercube,j_img,j));</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>             check_nomsg(m_img = cpl_image_new(cfg->size_x,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                               cfg->size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>             check_nomsg(cpl_imagelist_set(maskcube,m_img,j));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>          }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>          <span class="keywordflow">if</span>(ks_clip == 1) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             sinfo_new_combine_jittered_cubes_thomas_range(cubeobject,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                                           jittercube,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                                                           maskcube,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                                                           cfg->nframes,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                                                           offsetx,offsety,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                                                           times,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                                           cfg->kernel_type,</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                                                           z_min,</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                                                           z_max,</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                                                           kappa);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             sinfo_new_combine_jittered_cubes_range(cubeobject,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                                    jittercube,</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>                                                    maskcube,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                                                    cfg->nframes,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                                                    offsetx,</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                                                    offsety,</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>                                                    times,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                                                    cfg->kernel_type,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                                                    z_min,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                                                    z_max) ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>          }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>       }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       sinfo_new_convert_0_to_ZERO_for_cubes(jittercube) ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       <span class="keywordflow">if</span> (jittercube == NULL)</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate new data cube!"</span>) ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       <span class="keywordflow">if</span> (maskcube == NULL)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not merge the jittered data cubes\n"</span>) ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       }</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>       <span class="keywordflow">for</span> ( i = 0 ; i <cfg->nframes  ; i++ ) {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>          sinfo_free_imagelist(&cubeobject[i]);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>          <span class="comment">//sinfo_msg("offx[%d]=%f,offy[%d]=%f",i,offsetx[i],i,offsety[i]);</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>       }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>       sinfo_free_array_imagelist(&cubeobject);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>       <span class="comment">//Old setting</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>       <span class="comment">//newcenter_x = cfg->size_x / 2. + 0.5 ;</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       <span class="comment">//newcenter_y = cfg->size_y / 2. + 0.5 ;</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>       <span class="comment">/* new setting */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">        sinfo_msg("offx_min=%f,offy_min=%f",offx_min,offy_min);</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">        sinfo_msg("offx_max=%f,offy_max=%f",offx_max,offy_max);</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">        sinfo_msg("ref_offx=%f,ref_offy=%f",ref_offx,ref_offy);</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="comment"></span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="comment">        newcenter_x=2*floor(fabs(offx_min)+0.5)+32+8;</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">        newcenter_y=-2*floor(fabs(offy_max)+0.5)+32-2;</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment"></span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment"></span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="comment">        newcenter_x=cfg->size_x / 2. -offsetx[0];</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">        newcenter_y=cfg->size_y / 2. -offsety[0];</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       <span class="keywordflow">if</span> (mjd_obs > 53825. ) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>          <span class="comment">/* April 1st 2006 */</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>          newcenter_x=cfg->size_x / 2. +2*ref_offx;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>          newcenter_y=cfg->size_y / 2. +2*ref_offy;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>          <span class="comment">/* after detector's upgrade */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>          newcenter_x=cfg->size_x / 2. -2*ref_offx;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>          newcenter_y=cfg->size_y / 2. +2*ref_offy;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>          <span class="comment">/* before detector's upgrade */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>          newcenter_x=cfg->size_x / 2. +2*ref_offx;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>          newcenter_y=cfg->size_y / 2. -2*ref_offy;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>       }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>       <span class="comment">//sinfo_msg("CRPIX=%f,%f", newcenter_x, newcenter_y);</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>       <span class="comment">//newcenter_x=2*floor(fabs(ref_offx)+0.5);</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>       <span class="comment">//newcenter_y=-2*floor(fabs(ref_offy)+0.5);</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="comment">//sinfo_msg_warning("Center image: %f %f",newcenter_x,newcenter_y);</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       cknull_nomsg(qclog = sinfo_qclog_init());</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       plist=cpl_propertylist_load(file_name,0);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>       <span class="keywordflow">if</span>(sinfo_baryvel(plist, &barycor,&helicor) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>          <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Could not compute velocity corrections"</span>);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>          cpl_error_reset();</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>          check_nomsg(sinfo_qclog_add_double(qclog,</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>                                             <span class="stringliteral">"QC VRAD BARYCOR"</span>,</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                                             barycor,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                                             <span class="stringliteral">"Barycentric radial velocity correction "</span>,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                                             <span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>          check_nomsg(sinfo_qclog_add_double(qclog,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                                             <span class="stringliteral">"QC VRAD HELICOR"</span>,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                                             helicor,</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                                             <span class="stringliteral">"Heliocentric radial velocity correction "</span>,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                                             <span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>          sinfo_msg(<span class="stringliteral">"Barycor=%g Helicor=%g"</span>,barycor,helicor);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>          sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>       }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>       ck0(sinfo_pro_save_ims(jittercube,sof,sof,cfg->outName,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                              procatg,qclog,plugin_id,config),</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>           <span class="stringliteral">"cannot save cube %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>       sinfo_free_table(&qclog);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       <span class="comment">/* we need to set again the following 3 */</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>       plist=cpl_propertylist_load(file_name,0);</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>       dis=sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>       centralLambda=sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>       centralpix=sinfo_pfits_get_crpix3(plist);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       sinfo_new_set_wcs_cube(jittercube, cfg->outName,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                              centralLambda, dis,</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                              centralpix, newcenter_x, newcenter_y);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>       cknull(jitter_image = sinfo_new_median_cube(jittercube),</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>              <span class="stringliteral">" could not do sinfo_medianCube()"</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>       cknull_nomsg(qclog = sinfo_qclog_init());</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>       update_bad_pixel_map(jitter_image);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>       check_nomsg(sinfo_qclog_add_double(qclog,</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                                                <span class="stringliteral">"QC FRMDIF MEANSTD"</span>,</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>                                                cpl_image_get_mean(jitter_image),</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                                                <span class="stringliteral">"mean of the collapesd cube"</span>,</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                                                <span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       check_nomsg(sinfo_qclog_add_double(qclog,</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                                                <span class="stringliteral">"QC FRMDIF STDEV"</span>,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                                                cpl_image_get_stdev(jitter_image),</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                                                <span class="stringliteral">"standard deviation of the collapesd cube"</span>,</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                                                <span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>       ck0(sinfo_pro_save_ima(jitter_image,sof,sof,cfg->med_cube_name,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                              pro_med,qclog,plugin_id,config),</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>           <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>       sinfo_free_table(&qclog);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>       sinfo_new_set_wcs_image(jitter_image, cfg->med_cube_name,</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                               newcenter_x,newcenter_y);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>       sinfo_free_image(&jitter_image);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>       ck0(sinfo_pro_save_ims(maskcube,sof,sof,cfg->maskname,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                              pro_mjit,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>           <span class="stringliteral">"cannot save cube %s"</span>, cfg->maskname);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>       sinfo_new_set_wcs_cube(maskcube, cfg->maskname,</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                              centralLambda, dis, centralpix,</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>                              newcenter_x, newcenter_y);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       sinfo_free_double(&times) ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       sinfo_free_float(&offsetx) ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       sinfo_free_float(&offsety) ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>       sinfo_free_imagelist(&maskcube) ;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>       sinfo_free_imagelist(&jittercube) ;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>    } <span class="comment">/* end of jittering */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   exit:</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>    <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>    sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>    sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   cleanup:</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>    sinfo_free_image(&jitter_image);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>    sinfo_free_imagelist(&jittercube) ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>    sinfo_free_imagelist(&maskcube) ;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>    sinfo_free_table(&qclog);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>    <span class="keywordflow">if</span>(cfg != NULL) {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>       <span class="keywordflow">if</span>(cube_tmp != NULL) {</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>          <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>             sinfo_free_imagelist(&(cube_tmp[n]));</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>          }</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>          sinfo_free_array_imagelist(&cube_tmp);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>       }</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       <span class="keywordflow">if</span>(cubeobject != NULL) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>          <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>             sinfo_free_imagelist(&(cubeobject[n]));</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>          }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>          sinfo_free_array_imagelist(&cubeobject);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>    }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>    sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>    sinfo_free_image(&im);</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>    sinfo_free_image(&ill_cor);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>    sinfo_free_float(&offsety);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>    sinfo_free_float(&offsetx);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>    sinfo_free_double(&times);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>    sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>    sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>    <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>    }</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> }</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__cubes__coadd_8h_source.html b/html/sinfo__new__cubes__coadd_8h_source.html
index 2e755f9..b18a808 100644
--- a/html/sinfo__new__cubes__coadd_8h_source.html
+++ b/html/sinfo__new__cubes__coadd_8h_source.html
@@ -2,85 +2,116 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_cubes_coadd.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_cubes_coadd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_CUBES_COADD_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBES_COADD_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_cubes_coadd.h,v 1.10 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_cubes_coadd.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to create a data cube</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <math.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">   @name sinfo_new_cubes_coadd()</span>
-<a name="l00049"></a>00049 <span class="comment">   @param ini_file: file name of according .ini file</span>
-<a name="l00050"></a>00050 <span class="comment">   @param integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00051"></a>00051 <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span>
-<a name="l00052"></a>00052 <span class="comment">        flatfielded, bad pixel corrected and</span>
-<a name="l00053"></a>00053 <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span>
-<a name="l00054"></a>00054 <span class="comment">    calibration is carried through by using</span>
-<a name="l00055"></a>00055 <span class="comment">        a standard star or a black body measurement. </span>
-<a name="l00056"></a>00056 <span class="comment">    The spectral features of the flatfield halogen lamp are corrected.</span>
-<a name="l00057"></a>00057 <span class="comment">        Afterwards a data cube is created out of the resampled image.</span>
-<a name="l00058"></a>00058 <span class="comment">    It is the users choice to use either</span>
-<a name="l00059"></a>00059 <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span>
-<a name="l00060"></a>00060 <span class="comment">    of the slitlets gained from a north-south-test. </span>
-<a name="l00061"></a>00061 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> 
-<a name="l00063"></a>00063 sinfo_new_cubes_coadd (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00064"></a>00064                        cpl_parameterlist* config, 
-<a name="l00065"></a>00065                        cpl_frameset* sof, 
-<a name="l00066"></a>00066                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg) ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#endif </span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_cubes_coadd.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_CUBES_COADD_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_CUBES_COADD_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_cubes_coadd.h,v 1.10 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_cubes_coadd.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to create a data cube</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   @name sinfo_new_cubes_coadd()</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   @param ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   @param integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">        flatfielded, bad pixel corrected and</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">    calibration is carried through by using</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">        a standard star or a black body measurement. </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">    The spectral features of the flatfield halogen lamp are corrected.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">        Afterwards a data cube is created out of the resampled image.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">    It is the users choice to use either</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">    of the slitlets gained from a north-south-test. </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_new_cubes_coadd (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                        cpl_parameterlist* config, </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                        cpl_frameset* sof, </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__dark_8c_source.html b/html/sinfo__new__dark_8c_source.html
index cf736c5..9749802 100644
--- a/html/sinfo__new__dark_8c_source.html
+++ b/html/sinfo__new__dark_8c_source.html
@@ -2,724 +2,755 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_dark.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_dark.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_new_dark.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Master sinfo_dark creation </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_new_dark.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_dark_ini_by_cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                                Defines</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_dark_ron_reduce(cpl_frameset * framelist,
-<a name="l00046"></a>00046                             dark_config* cfg,
-<a name="l00047"></a>00047                             cpl_table* qclog);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00051"></a>00051 sinfo_dark_compare(<span class="keyword">const</span> cpl_frame * frame1, <span class="keyword">const</span> cpl_frame * frame2);
-<a name="l00052"></a>00052 
-<a name="l00062"></a>00062 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                             Function Definitions</span>
-<a name="l00064"></a>00064 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00067"></a>00067 <span class="comment">   @name  sinfo_new_dark()</span>
-<a name="l00068"></a>00068 <span class="comment">   @param  plugin_id recipe id</span>
-<a name="l00069"></a>00069 <span class="comment">   @param  config input parameterlist</span>
-<a name="l00070"></a>00070 <span class="comment">   @param  sof    input set of frames</span>
-<a name="l00071"></a>00071 <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00072"></a>00072 <span class="comment">   @doc </span>
-<a name="l00073"></a>00073 <span class="comment">                  1) Sorts frames according to integration time</span>
-<a name="l00074"></a>00074 <span class="comment">                  2) Take the clean mean of a stack of frames with the </span>
-<a name="l00075"></a>00075 <span class="comment">                  same integration time</span>
-<a name="l00076"></a>00076 <span class="comment"></span>
-<a name="l00077"></a>00077 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keywordtype">int</span> sinfo_new_dark (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, cpl_parameterlist* config, 
-<a name="l00080"></a>00080           cpl_frameset* sof, <span class="keywordtype">char</span>* dark_name)
-<a name="l00081"></a>00081 {
-<a name="l00082"></a>00082     
-<a name="l00083"></a>00083     dark_config * cfg=NULL ;
-<a name="l00084"></a>00084     cpl_imagelist * image_list=NULL ;
-<a name="l00085"></a>00085     cpl_imagelist * object_list=NULL ;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087    
-<a name="l00088"></a>00088     cpl_image * image=NULL ;
-<a name="l00089"></a>00089     cpl_image * eclipse_image=NULL ;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     cpl_image* dark_img=NULL;
-<a name="l00092"></a>00092     cpl_frame* first_frame=NULL;
-<a name="l00093"></a>00093     cpl_vector* qc_dark_median=NULL;
-<a name="l00094"></a>00094     cpl_frameset* raw=NULL;
-<a name="l00095"></a>00095     cpl_table* qclog_tbl=NULL;
-<a name="l00096"></a>00096     cpl_propertylist* rplist=NULL;
-<a name="l00097"></a>00097     cpl_frameset* f_one=NULL;
-<a name="l00098"></a>00098     <span class="keywordtype">int</span> no=0;
-<a name="l00099"></a>00099     <span class="keywordtype">float</span> lo_cut=0.;
-<a name="l00100"></a>00100     <span class="keywordtype">float</span> hi_cut=0.;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="keywordtype">int</span> i = 0;
-<a name="l00103"></a>00103     <span class="keywordtype">int</span> j = 0;
-<a name="l00104"></a>00104     <span class="keywordtype">int</span> n = 0;
-<a name="l00105"></a>00105     <span class="keywordtype">int</span> count = 0;
-<a name="l00106"></a>00106     <span class="keywordtype">int</span>* n_times=NULL;
-<a name="l00107"></a>00107     <span class="keywordtype">double</span> exp_time = 0.;    
-<a name="l00108"></a>00108     <span class="keywordtype">float</span>* int_time=NULL;   
-<a name="l00109"></a>00109     <span class="keywordtype">float</span> time_val = 0.; 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     <span class="keywordtype">char</span>   ref_file[MAX_NAME_SIZE];
-<a name="l00112"></a>00112     cpl_size zone_def[4];
-<a name="l00113"></a>00113     <span class="keywordtype">double</span> qc_ron_val=0;
-<a name="l00114"></a>00114     <span class="keywordtype">double</span> qc_ron_err=0;
-<a name="l00115"></a>00115     <span class="keywordtype">double</span> qc_darkmed_ave=0;
-<a name="l00116"></a>00116     <span class="keywordtype">double</span> qc_darkmed_stdev=0;
-<a name="l00117"></a>00117     <span class="keywordtype">double</span> fpn=0;
-<a name="l00118"></a>00118     cpl_size zone[4];
-<a name="l00119"></a>00119     <span class="keywordtype">int</span> naxis1=0;
-<a name="l00120"></a>00120     <span class="keywordtype">int</span> naxis2=0;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     cpl_size* selection=NULL;
-<a name="l00123"></a>00123     cpl_size nsets=0;
-<a name="l00124"></a>00124     <span class="comment">/* </span>
-<a name="l00125"></a>00125 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">       1) parse the file names and parameters to the dark_config data </span>
-<a name="l00127"></a>00127 <span class="comment">          structure cfg </span>
-<a name="l00128"></a>00128 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00129"></a>00129 <span class="comment">     */</span>
-<a name="l00130"></a>00130  
-<a name="l00131"></a>00131     check_nomsg(raw=cpl_frameset_new());
-<a name="l00132"></a>00132     cknull(cfg = sinfo_parse_cpl_input_dark(config,sof,&raw),
-<a name="l00133"></a>00133            <span class="stringliteral">"could not parse cpl input!"</span>) ;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="comment">/* </span>
-<a name="l00136"></a>00136 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00137"></a>00137 <span class="comment">       2) GET FRAMES AND SORT ACCORDING TO EXPOSURE TIME </span>
-<a name="l00138"></a>00138 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00139"></a>00139 <span class="comment">     */</span>
-<a name="l00140"></a>00140      
-<a name="l00141"></a>00141     <span class="comment">/* </span>
-<a name="l00142"></a>00142 <span class="comment">       2.1) get the total integration time from the fits header and </span>
-<a name="l00143"></a>00143 <span class="comment">            store it in an array</span>
-<a name="l00144"></a>00144 <span class="comment">     */</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="comment">/* 2.1.1) get a data cube to stack darks */</span>
-<a name="l00147"></a>00147     sinfo_msg(<span class="stringliteral">"Build data cube"</span>);
-<a name="l00148"></a>00148     <span class="comment">/* take a clean mean of the frames */</span>
-<a name="l00149"></a>00149     check_nomsg(image_list = cpl_imagelist_new());
-<a name="l00150"></a>00150     int_time = (<span class="keywordtype">float</span>*) cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00151"></a>00151     sinfo_check_rec_status(0);
-<a name="l00152"></a>00152  
-<a name="l00153"></a>00153     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )
-<a name="l00154"></a>00154     {
-<a name="l00155"></a>00155         <span class="keywordflow">if</span> (sinfo_is_fits_file (cfg->inFrameList[i]) != 1) {
-<a name="l00156"></a>00156        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrameList[i]);
-<a name="l00157"></a>00157            <span class="keywordflow">goto</span> cleanup;
-<a name="l00158"></a>00158         }
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     check_nomsg(cpl_imagelist_set(image_list,
-<a name="l00161"></a>00161                     cpl_image_load(cfg->inFrameList[i],CPL_TYPE_FLOAT,0,0),i));
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163         exp_time = sinfo_pfits_get_exptime(cfg->inFrameList[i]);
-<a name="l00164"></a>00164     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00165"></a>00165        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get exposure time from fits header!\n"</span>);
-<a name="l00166"></a>00166            <span class="keywordflow">goto</span> cleanup;
-<a name="l00167"></a>00167     }
-<a name="l00168"></a>00168         sinfo_new_array_set_value(int_time, (<span class="keywordtype">float</span>)exp_time, i);
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170     no=cfg->nframes;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     <span class="comment">/*</span>
-<a name="l00174"></a>00174 <span class="comment">       2.2) find the number of frames with the same integration time</span>
-<a name="l00175"></a>00175 <span class="comment">     */</span>
-<a name="l00176"></a>00176     sinfo_msg(<span class="stringliteral">"Find frames with same tint"</span>);
-<a name="l00177"></a>00177     n = 0;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     n_times = (<span class="keywordtype">int</span>*) cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00180"></a>00180     sinfo_msg(<span class="stringliteral">"Sort frames with same tint"</span>);
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes-1 ; i++ )
-<a name="l00183"></a>00183     {
-<a name="l00184"></a>00184          <span class="keywordflow">if</span> ( sinfo_new_array_get_value(int_time, i+1) != 
-<a name="l00185"></a>00185               sinfo_new_array_get_value(int_time, i)
-<a name="l00186"></a>00186         ) {
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     n_times[n] = i+1;
-<a name="l00189"></a>00189         n = n+1;
-<a name="l00190"></a>00190     }
-<a name="l00191"></a>00191     
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <span class="comment">/* </span>
-<a name="l00195"></a>00195 <span class="comment">       2.3) store the images with the same tint in data cubes and take </span>
-<a name="l00196"></a>00196 <span class="comment">            clean means</span>
-<a name="l00197"></a>00197 <span class="comment">     */</span>
-<a name="l00198"></a>00198     sinfo_msg(<span class="stringliteral">"Do clean mean"</span>);
-<a name="l00199"></a>00199     <span class="keywordflow">if</span> ( n == 0 ) {
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201       sinfo_msg(<span class="stringliteral">"n == 0 "</span>);
-<a name="l00202"></a>00202        time_val = sinfo_new_array_get_value(int_time, 0);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204       cknull(object_list = cpl_imagelist_new(),
-<a name="l00205"></a>00205          <span class="stringliteral">"could not allocate memory for object_list"</span>);
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207        <span class="comment">/* here we have a leak of 80 bytes */</span>
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210        count = 0;
-<a name="l00211"></a>00211        <span class="comment">/* do also QC log */</span>
-<a name="l00212"></a>00212        check_nomsg(qc_dark_median=cpl_vector_new(cfg->nframes));
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214        <span class="comment">/* AMo here there is a leak */</span>
-<a name="l00215"></a>00215        <span class="keywordflow">for</span> ( j = 0 ; j < cfg->nframes ; j++ ) {
-<a name="l00216"></a>00216      check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00217"></a>00217                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00218"></a>00218                      count));
-<a name="l00219"></a>00219      check_nomsg(cpl_vector_set(qc_dark_median,j,
-<a name="l00220"></a>00220                      cpl_image_get_median(cpl_imagelist_get(image_list,j))));
-<a name="l00221"></a>00221          count = count + 1;
-<a name="l00222"></a>00222        }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225  
-<a name="l00226"></a>00226        check_nomsg(qc_darkmed_ave=cpl_vector_get_mean(qc_dark_median));
-<a name="l00227"></a>00227        <span class="keywordflow">if</span> (cfg->nframes > 1) {
-<a name="l00228"></a>00228           check_nomsg(qc_darkmed_stdev=cpl_vector_get_stdev(qc_dark_median));
-<a name="l00229"></a>00229        }
-<a name="l00230"></a>00230        <span class="comment">/* </span>
-<a name="l00231"></a>00231 <span class="comment">        rms   = stdev * sqrt(1-1/(double)cpl_vector_get_size(myvector)); </span>
-<a name="l00232"></a>00232 <span class="comment">       qc_darkmed_stdev = qc_darkmed_stdev * </span>
-<a name="l00233"></a>00233 <span class="comment">                       sqrt(1-1/(double)cpl_vector_get_size(qc_dark_median));</span>
-<a name="l00234"></a>00234 <span class="comment">        */</span>  
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236        check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00237"></a>00237        lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00238"></a>00238        hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240  
-<a name="l00241"></a>00241   
-<a name="l00242"></a>00242        cknull(image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00243"></a>00243                                                          lo_cut,hi_cut),
-<a name="l00244"></a>00244           <span class="stringliteral">"sinfo_average_with_rejection failed"</span>);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246        sinfo_free_imagelist(&object_list);
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248        sinfo_msg(<span class="stringliteral">"dark_name=%s\n"</span>,dark_name);
-<a name="l00249"></a>00249        
-<a name="l00250"></a>00250        check_nomsg(first_frame = cpl_frameset_get_frame(raw, 0)) ;
-<a name="l00251"></a>00251    
-<a name="l00252"></a>00252        strcpy(ref_file,cpl_frame_get_filename(first_frame)) ;
-<a name="l00253"></a>00253        cknull_nomsg(rplist = cpl_propertylist_load(ref_file, 0));
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255        check_nomsg(naxis1=cpl_propertylist_get_int(rplist,<span class="stringliteral">"NAXIS1"</span>));
-<a name="l00256"></a>00256        check_nomsg(naxis2=cpl_propertylist_get_int(rplist,<span class="stringliteral">"NAXIS1"</span>));
-<a name="l00257"></a>00257        sinfo_free_propertylist(&rplist);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259        <span class="keywordflow">if</span>(cfg->qc_ron_xmin < 1) {
-<a name="l00260"></a>00260      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin %d < 1"</span>,cfg->qc_ron_xmin);
-<a name="l00261"></a>00261          <span class="keywordflow">goto</span> cleanup;
-<a name="l00262"></a>00262        }
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264        <span class="keywordflow">if</span>(cfg->qc_ron_xmax > naxis1) {
-<a name="l00265"></a>00265      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax %d > %d"</span>,cfg->qc_ron_xmax,naxis1);
-<a name="l00266"></a>00266          <span class="keywordflow">goto</span> cleanup;
-<a name="l00267"></a>00267        }
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269        <span class="keywordflow">if</span>(cfg->qc_ron_ymin < 1) {
-<a name="l00270"></a>00270      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin %d < 1"</span>,cfg->qc_ron_ymin);
-<a name="l00271"></a>00271          <span class="keywordflow">goto</span> cleanup;
-<a name="l00272"></a>00272        }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274        <span class="keywordflow">if</span>(cfg->qc_ron_ymax > naxis2) {
-<a name="l00275"></a>00275      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax %d > %d"</span>,cfg->qc_ron_ymax,naxis2);
-<a name="l00276"></a>00276          <span class="keywordflow">goto</span> cleanup;
-<a name="l00277"></a>00277        }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279        zone_def[0]=cfg->qc_ron_xmin;
-<a name="l00280"></a>00280        zone_def[1]=cfg->qc_ron_xmax;
-<a name="l00281"></a>00281        zone_def[2]=cfg->qc_ron_ymin;
-<a name="l00282"></a>00282        zone_def[3]=cfg->qc_ron_ymax;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286        check(cpl_flux_get_noise_window(image,
-<a name="l00287"></a>00287                        zone_def,
-<a name="l00288"></a>00288                        cfg->qc_ron_hsize,
-<a name="l00289"></a>00289                        cfg->qc_ron_nsamp,
-<a name="l00290"></a>00290                        &qc_ron_val,
-<a name="l00291"></a>00291                        &qc_ron_err),
-<a name="l00292"></a>00292          <span class="stringliteral">"In computation RON on image %s"</span>,dark_name);
-<a name="l00293"></a>00293       
-<a name="l00294"></a>00294  
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296        <span class="keywordflow">if</span>(cfg->qc_fpn_xmin < 1) {
-<a name="l00297"></a>00297      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_xmin %d < 1"</span>,cfg->qc_fpn_xmin);
-<a name="l00298"></a>00298          <span class="keywordflow">goto</span> cleanup;
-<a name="l00299"></a>00299        }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301        <span class="keywordflow">if</span>(cfg->qc_fpn_xmax > naxis1) {
-<a name="l00302"></a>00302      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_xmax %d > %d"</span>,cfg->qc_fpn_xmax,naxis1);
-<a name="l00303"></a>00303          <span class="keywordflow">goto</span> cleanup;
-<a name="l00304"></a>00304        }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306        <span class="keywordflow">if</span>(cfg->qc_fpn_ymin < 1) {
-<a name="l00307"></a>00307      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_ymin %d < 1"</span>,cfg->qc_fpn_ymin);
-<a name="l00308"></a>00308          <span class="keywordflow">goto</span> cleanup;
-<a name="l00309"></a>00309        }
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311        <span class="keywordflow">if</span>(cfg->qc_fpn_ymax > naxis2) {
-<a name="l00312"></a>00312      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_ymax %d > %d"</span>,cfg->qc_fpn_ymax,naxis2);
-<a name="l00313"></a>00313          <span class="keywordflow">goto</span> cleanup;
-<a name="l00314"></a>00314        }
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316        zone[0]=cfg->qc_fpn_xmin;
-<a name="l00317"></a>00317        zone[1]=cfg->qc_fpn_xmax;
-<a name="l00318"></a>00318        zone[2]=cfg->qc_fpn_ymin;
-<a name="l00319"></a>00319        zone[3]=cfg->qc_fpn_ymax;
-<a name="l00320"></a>00320        check(cpl_flux_get_noise_window(image, zone, cfg->qc_fpn_hsize,
-<a name="l00321"></a>00321                        cfg->qc_fpn_nsamp, &fpn, NULL),
-<a name="l00322"></a>00322          <span class="stringliteral">"Error computing noise in a window"</span>);
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324        <span class="comment">/* QC LOG */</span>
-<a name="l00325"></a>00325        cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKMED AVE"</span>,
-<a name="l00328"></a>00328              qc_darkmed_ave,<span class="stringliteral">"Average of raw darks medians"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKMED STDEV"</span>,
-<a name="l00331"></a>00331                      qc_darkmed_stdev,<span class="stringliteral">"STDEV of raw darks medians"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC RON"</span>,
-<a name="l00334"></a>00334                      qc_ron_val,<span class="stringliteral">"Read Out Noise"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00335"></a>00335        
-<a name="l00336"></a>00336        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC RONRMS"</span>,
-<a name="l00337"></a>00337                      qc_ron_err,<span class="stringliteral">"RMS on Read Out Noise"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKFPN"</span>,
-<a name="l00340"></a>00340                      fpn,<span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342  
-<a name="l00343"></a>00343        <span class="comment">/* special way to calculate RON: for each couple */</span>
-<a name="l00344"></a>00344        
-<a name="l00345"></a>00345        check(selection = cpl_frameset_labelise(raw,sinfo_dark_compare,&nsets),
-<a name="l00346"></a>00346          <span class="stringliteral">"Error labelizing"</span>);
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350        <span class="keywordflow">for</span> ( i = 0 ; i < nsets ; i++ ) {
-<a name="l00351"></a>00351          sinfo_msg(<span class="stringliteral">"Reduce data set no %d out of %"</span> CPL_SIZE_FORMAT <span class="stringliteral">""</span>, i+1, nsets);
-<a name="l00352"></a>00352          cpl_msg_indent_more();
-<a name="l00353"></a>00353      check_nomsg(f_one = cpl_frameset_extract(raw,selection,i));
-<a name="l00354"></a>00354          <span class="keywordflow">if</span> (cpl_frameset_get_size(f_one) < 2) {
-<a name="l00355"></a>00355            <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Skip %d set. One frame, not enough "</span>
-<a name="l00356"></a>00356                              <span class="stringliteral">"to get ron"</span>,i+1);
-<a name="l00357"></a>00357      } <span class="keywordflow">else</span> {
-<a name="l00358"></a>00358            <span class="keywordflow">if</span> (sinfo_dark_ron_reduce(f_one,cfg,qclog_tbl) ) {
-<a name="l00359"></a>00359          <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Cannot reduce set number %d"</span>, i+1) ;
-<a name="l00360"></a>00360        }
-<a name="l00361"></a>00361      }
-<a name="l00362"></a>00362          sinfo_free_frameset(&f_one);
-<a name="l00363"></a>00363          cpl_msg_indent_less();
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365        }
-<a name="l00366"></a>00366        cpl_free(selection);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369        <span class="comment">/* generate a dummy_set with the master dark and a dummy </span>
-<a name="l00370"></a>00370 <span class="comment">              dark=2*master_dark */</span>
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372        ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,
-<a name="l00373"></a>00373                  PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00374"></a>00374                            <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00375"></a>00375        sinfo_free_table(&qclog_tbl);
-<a name="l00376"></a>00376        sinfo_free_image(&image);
-<a name="l00377"></a>00377  
-<a name="l00378"></a>00378     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (n == 1) {
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380        sinfo_msg(<span class="stringliteral">"n == 1"</span>);
-<a name="l00381"></a>00381        time_val = sinfo_new_array_get_value(int_time, 0);
-<a name="l00382"></a>00382        cknull(object_list = cpl_imagelist_new(),
-<a name="l00383"></a>00383            <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385        count = 0;
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387        <span class="keywordflow">for</span> (j =0; j < n_times[0]; j++) {
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389      check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00390"></a>00390                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00391"></a>00391                      count));
-<a name="l00392"></a>00392      count = count + 1;
-<a name="l00393"></a>00393        }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396        check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00397"></a>00397        lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00398"></a>00398        hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00399"></a>00399        check(image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00400"></a>00400                                                         lo_cut,hi_cut),
-<a name="l00401"></a>00401                                  <span class="stringliteral">"sinfo_average_with_rejection failed!"</span>);
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403        sinfo_free_imagelist(&object_list);
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405        cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00406"></a>00406        ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,
-<a name="l00407"></a>00407                                      <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409        ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,
-<a name="l00410"></a>00410                   PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00411"></a>00411                           <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414        sinfo_free_image(&image);
-<a name="l00415"></a>00415        sinfo_free_table(&qclog_tbl);
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417        time_val = sinfo_new_array_get_value(int_time, n_times[0]);
-<a name="l00418"></a>00418        cknull(object_list = cpl_imagelist_new(),
-<a name="l00419"></a>00419           <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00420"></a>00420        count = 0;
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423        <span class="keywordflow">for</span> (j = n_times[0]; j < cfg->nframes; j++) {
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425      check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00426"></a>00426                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00427"></a>00427                      count));
-<a name="l00428"></a>00428          count = count + 1;
-<a name="l00429"></a>00429        }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432        check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00433"></a>00433        lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00434"></a>00434        hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00435"></a>00435        cknull(eclipse_image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00436"></a>00436                                                                  lo_cut,hi_cut),
-<a name="l00437"></a>00437           <span class="stringliteral">"sinfo_average_with_rejection failed!"</span>);
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439        sinfo_free_imagelist(&object_list);
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442        cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00443"></a>00443        ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,
-<a name="l00444"></a>00444                                      <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446        ck0(sinfo_pro_save_ima(eclipse_image,raw,sof,dark_name,
-<a name="l00447"></a>00447                   PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00448"></a>00448                           <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450        sinfo_free_image(&eclipse_image);
-<a name="l00451"></a>00451        sinfo_free_table(&qclog_tbl);
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453     } <span class="keywordflow">else</span> {
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455        sinfo_msg(<span class="stringliteral">"n==else\n"</span>);
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457        <span class="keywordflow">for</span> (i= 0; i < n+1; i++) {
-<a name="l00458"></a>00458          <span class="keywordflow">if</span> ( i == 0 ) {
-<a name="l00459"></a>00459            time_val = sinfo_new_array_get_value(int_time, 0);
-<a name="l00460"></a>00460         check(object_list = cpl_imagelist_new(),
-<a name="l00461"></a>00461                <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463             count = 0;
-<a name="l00464"></a>00464             <span class="keywordflow">for</span> (j = 0; j < n_times[0]; j++) {
-<a name="l00465"></a>00465           check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00466"></a>00466                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00467"></a>00467                           count));
-<a name="l00468"></a>00468           count = count + 1;
-<a name="l00469"></a>00469         }
-<a name="l00470"></a>00470         check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00471"></a>00471         lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00472"></a>00472         hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00473"></a>00473             check(image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00474"></a>00474                                                              lo_cut,hi_cut),
-<a name="l00475"></a>00475                                     <span class="stringliteral">"Error computing average with rejection"</span>);
-<a name="l00476"></a>00476             sinfo_free_imagelist(&object_list);
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478             sinfo_msg(<span class="stringliteral">"dark_name-%s\n"</span>,dark_name);
-<a name="l00479"></a>00479             cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00480"></a>00480             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,
-<a name="l00481"></a>00481                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,
-<a name="l00484"></a>00484                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00485"></a>00485               <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488             sinfo_free_table(&qclog_tbl);
-<a name="l00489"></a>00489             sinfo_free_image(&image);
-<a name="l00490"></a>00490      } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i == n ) {
-<a name="l00491"></a>00491             time_val = sinfo_new_array_get_value(int_time, n_times[n-1]);
-<a name="l00492"></a>00492             cknull(object_list = cpl_imagelist_new(), 
-<a name="l00493"></a>00493                <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495             count = 0;
-<a name="l00496"></a>00496             <span class="keywordflow">for</span> (j = n_times[n-1]; j < cfg->nframes; j++) {
-<a name="l00497"></a>00497           check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00498"></a>00498                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00499"></a>00499                           count));
-<a name="l00500"></a>00500           count = count + 1;
-<a name="l00501"></a>00501         }
-<a name="l00502"></a>00502         check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00503"></a>00503         lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00504"></a>00504         hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00505"></a>00505             check(image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00506"></a>00506                                                              lo_cut,hi_cut),
-<a name="l00507"></a>00507                   <span class="stringliteral">"Error computing average with rejection"</span>);
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509             sinfo_free_imagelist(&object_list);
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511             cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00512"></a>00512             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,
-<a name="l00513"></a>00513                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,
-<a name="l00516"></a>00516                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00517"></a>00517         <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00518"></a>00518             sinfo_free_table(&qclog_tbl);
-<a name="l00519"></a>00519             sinfo_free_image(&image);
-<a name="l00520"></a>00520     } <span class="keywordflow">else</span> {
-<a name="l00521"></a>00521         time_val = sinfo_new_array_get_value(int_time, n_times[i-1]);
-<a name="l00522"></a>00522         cknull(object_list = cpl_imagelist_new(), 
-<a name="l00523"></a>00523                    <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525             count = 0;
-<a name="l00526"></a>00526             <span class="keywordflow">for</span> (j = n_times[i-1]; j < n_times[i]; j++) {
-<a name="l00527"></a>00527           check_nomsg(cpl_imagelist_set(object_list,
-<a name="l00528"></a>00528                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),
-<a name="l00529"></a>00529                           count));
-<a name="l00530"></a>00530           count = count + 1;
-<a name="l00531"></a>00531         }
-<a name="l00532"></a>00532         check_nomsg(no=cpl_imagelist_get_size(object_list));
-<a name="l00533"></a>00533         lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00534"></a>00534         hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00535"></a>00535             cknull(image=cpl_imagelist_collapse_minmax_create(object_list,
-<a name="l00536"></a>00536                                                               lo_cut,hi_cut),
-<a name="l00537"></a>00537                                      <span class="stringliteral">"Error computing average with rejection"</span>);
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539             sinfo_free_imagelist(&object_list);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541             cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00542"></a>00542             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,
-<a name="l00543"></a>00543                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,
-<a name="l00546"></a>00546                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),
-<a name="l00547"></a>00547                                    <span class="stringliteral">"cannot save ima %s"</span>, dark_name);
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549             sinfo_free_image(&image);
-<a name="l00550"></a>00550             sinfo_free_table(&qclog_tbl);
-<a name="l00551"></a>00551     }
-<a name="l00552"></a>00552        
-<a name="l00553"></a>00553        } <span class="comment">/* end for loop */</span>
-<a name="l00554"></a>00554     } <span class="comment">/* end else over n */</span>
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556  
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558        sinfo_free_imagelist(&image_list);
-<a name="l00559"></a>00559        sinfo_free_my_vector(&qc_dark_median);
-<a name="l00560"></a>00560        sinfo_free_int(&n_times);
-<a name="l00561"></a>00561        sinfo_free_float(&int_time);
-<a name="l00562"></a>00562        sinfo_dark_free(&cfg);
-<a name="l00563"></a>00563        sinfo_free_frameset(&raw);
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565       <span class="keywordflow">return</span> 0;
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567  cleanup:
-<a name="l00568"></a>00568        sinfo_free_frameset(&f_one);
-<a name="l00569"></a>00569        cpl_free(selection);
-<a name="l00570"></a>00570        sinfo_free_image(&eclipse_image);
-<a name="l00571"></a>00571        sinfo_free_table(&qclog_tbl);
-<a name="l00572"></a>00572        sinfo_free_image(&dark_img);
-<a name="l00573"></a>00573        sinfo_free_image(&image);
-<a name="l00574"></a>00574        sinfo_free_propertylist(&rplist);
-<a name="l00575"></a>00575        sinfo_free_my_vector(&qc_dark_median);
-<a name="l00576"></a>00576        sinfo_free_imagelist(&object_list);
-<a name="l00577"></a>00577        sinfo_free_int(&n_times);
-<a name="l00578"></a>00578        sinfo_free_float(&int_time);
-<a name="l00579"></a>00579        sinfo_free_imagelist(&image_list);
-<a name="l00580"></a>00580        sinfo_dark_free(&cfg);
-<a name="l00581"></a>00581        sinfo_free_frameset(&raw);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583        <span class="keywordflow">return</span> -1;
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585 }
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592 <span class="comment">/*--------------------------------------------------------------------*/</span>
-<a name="l00599"></a>00599 <span class="comment">/*--------------------------------------------------------------------*/</span>
-<a name="l00600"></a>00600  <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00601"></a>00601 sinfo_dark_ron_reduce(cpl_frameset    *   framelist,
-<a name="l00602"></a>00602               dark_config     *   cfg,
-<a name="l00603"></a>00603               cpl_table       *   qclog_tbl)
-<a name="l00604"></a>00604 {
-<a name="l00605"></a>00605   cpl_imagelist   *   iset =NULL;
-<a name="l00606"></a>00606   <span class="keywordtype">int</span>                 i =0;
-<a name="l00607"></a>00607   <span class="keywordtype">double</span>* ron=NULL;
-<a name="l00608"></a>00608   <span class="comment">/* int nraw=0; */</span>
-<a name="l00609"></a>00609   <span class="keywordtype">int</span> niset=0;
-<a name="l00610"></a>00610   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];
-<a name="l00611"></a>00611   <span class="comment">/* Test entries */</span>
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613   cknull_nomsg(framelist);
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615   <span class="comment">/* Load the current set */</span>
-<a name="l00616"></a>00616   <span class="keywordflow">if</span> ((iset = sinfo_new_frameset_to_iset(framelist)) == NULL) {
-<a name="l00617"></a>00617     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load the data"</span>) ;
-<a name="l00618"></a>00618     <span class="keywordflow">return</span> -1 ;
-<a name="l00619"></a>00619   }
-<a name="l00620"></a>00620   <span class="comment">/* Loop on all pairs */</span>
-<a name="l00621"></a>00621   <span class="comment">/* nraw = cpl_table_get_nrow(qclog_tbl); */</span>
-<a name="l00622"></a>00622   niset=cpl_imagelist_get_size(iset);
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624   ron = cpl_calloc(niset,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626   sinfo_get_ron(framelist,
-<a name="l00627"></a>00627                 cfg->qc_ron_xmin,cfg->qc_ron_xmax,
-<a name="l00628"></a>00628                 cfg->qc_ron_ymin,cfg->qc_ron_ymax,
-<a name="l00629"></a>00629                 cfg->qc_ron_hsize,cfg->qc_ron_nsamp,
-<a name="l00630"></a>00630                 &ron);
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632   <span class="keywordflow">for</span> (i=0 ; i<niset-1 ; i++) {
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634     <span class="comment">/* Write the paf file on disk */</span>
-<a name="l00635"></a>00635     <span class="comment">/* Write QC LOG */</span>
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC RON"</span>,i+1);
-<a name="l00638"></a>00638     sinfo_qclog_add_double(qclog_tbl,key_name,ron[i],
-<a name="l00639"></a>00639                <span class="stringliteral">"Read Out Noise"</span>,<span class="stringliteral">"%f"</span>);
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641   }
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643   cpl_free(ron);
-<a name="l00644"></a>00644   sinfo_free_imagelist(&iset) ;
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646   <span class="keywordflow">return</span> 0 ;
-<a name="l00647"></a>00647  cleanup:
-<a name="l00648"></a>00648   cpl_free(ron);
-<a name="l00649"></a>00649   ron=NULL;
-<a name="l00650"></a>00650   sinfo_free_imagelist(&iset) ;
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652   <span class="keywordflow">return</span> -1;
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654 }
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00664"></a>00664 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00665"></a>00665 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_dark_compare(
-<a name="l00666"></a>00666         <span class="keyword">const</span> cpl_frame   *   frame1,
-<a name="l00667"></a>00667         <span class="keyword">const</span> cpl_frame   *   frame2)
-<a name="l00668"></a>00668 {
-<a name="l00669"></a>00669     <span class="keywordtype">int</span>                 comparison=0 ;
-<a name="l00670"></a>00670     cpl_propertylist *  plist1=NULL;
-<a name="l00671"></a>00671     cpl_propertylist *  plist2=NULL;
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673     <span class="keywordtype">char</span>            *   sval ;
-<a name="l00674"></a>00674     <span class="keywordtype">char</span>                mode1[512] ;
-<a name="l00675"></a>00675     <span class="keywordtype">char</span>                mode2[512] ;
-<a name="l00676"></a>00676     <span class="keywordtype">double</span>              dval1=0;
-<a name="l00677"></a>00677     <span class="keywordtype">double</span>              dval2=0;
-<a name="l00678"></a>00678     <span class="keywordtype">int</span>                 ival1=0;
-<a name="l00679"></a>00679     <span class="keywordtype">int</span>                 ival2=0;
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681     <span class="comment">/* Test entries */</span>
-<a name="l00682"></a>00682     <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684     <span class="comment">/* Get property lists */</span>
-<a name="l00685"></a>00685     cknull(plist1=cpl_propertylist_load(cpl_frame_get_filename(frame1),0),
-<a name="l00686"></a>00686         <span class="stringliteral">"getting header from reference frame"</span>);
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688     cknull(plist2=cpl_propertylist_load(cpl_frame_get_filename(frame2),0),
-<a name="l00689"></a>00689         <span class="stringliteral">"getting header from reference frame"</span>);
-<a name="l00690"></a>00690      
-<a name="l00691"></a>00691     <span class="comment">/* Compare exposure time */</span>
-<a name="l00692"></a>00692     comparison = 1 ;
-<a name="l00693"></a>00693     check(dval1=sinfo_pfits_get_exp_time(plist1),<span class="stringliteral">"To get exptime"</span>);
-<a name="l00694"></a>00694     check(dval2=sinfo_pfits_get_exp_time(plist2),<span class="stringliteral">"To get exptime"</span>);
-<a name="l00695"></a>00695 
-<a name="l00696"></a>00696     <span class="keywordflow">if</span> (fabs(dval1-dval2) > 1e-5) comparison = 0 ;
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698     <span class="comment">/* Compare the readout mode */</span>
-<a name="l00699"></a>00699     check(ival1=sinfo_pfits_get_rom(plist1),<span class="stringliteral">"to get read out mode"</span>);
-<a name="l00700"></a>00700     check(ival2=sinfo_pfits_get_rom(plist2),<span class="stringliteral">"to get read out mode"</span>);
-<a name="l00701"></a>00701     <span class="keywordflow">if</span> (ival1 != ival2) comparison = 0 ;
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703 
-<a name="l00704"></a>00704     <span class="comment">/* Compare the detector mode */</span>
-<a name="l00705"></a>00705     cknull(sval=sinfo_pfits_get_mode(plist1),<span class="stringliteral">"to get detector mode"</span>);
-<a name="l00706"></a>00706     strcpy(mode1, sval) ;
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708     cknull(sval=sinfo_pfits_get_mode(plist2),<span class="stringliteral">"to get detector mode"</span>);
-<a name="l00709"></a>00709     strcpy(mode2, sval) ;
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712     <span class="keywordflow">if</span> (strcmp(mode1, mode2)) comparison = 0 ;
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714     <span class="comment">/* Files have to be consequtive */</span>
-<a name="l00715"></a>00715     <span class="comment">/*</span>
-<a name="l00716"></a>00716 <span class="comment">    check(ival1 = sinfo_pfits_get_expno(plist1),"to get exposure number");</span>
-<a name="l00717"></a>00717 <span class="comment">    check(ival2 = sinfo_pfits_get_expno(plist1),"to get exposure number");</span>
-<a name="l00718"></a>00718 <span class="comment">    if (ival1 != ival2) comparison = 0 ;</span>
-<a name="l00719"></a>00719 <span class="comment">    */</span>
-<a name="l00720"></a>00720     sinfo_free_propertylist(&plist1);
-<a name="l00721"></a>00721     sinfo_free_propertylist(&plist2);
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723     <span class="keywordflow">return</span> comparison ;
-<a name="l00724"></a>00724  cleanup:
-<a name="l00725"></a>00725     sinfo_free_propertylist(&plist1);
-<a name="l00726"></a>00726     sinfo_free_propertylist(&plist2);
-<a name="l00727"></a>00727     <span class="keywordflow">return</span> -1 ;
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729 
-<a name="l00730"></a>00730 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_dark.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_new_dark.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Master sinfo_dark creation </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_new_dark.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_dark_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_dark_ron_reduce(cpl_frameset * framelist,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                             dark_config* cfg,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                             cpl_table* qclog);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_dark_compare(<span class="keyword">const</span> cpl_frame * frame1, <span class="keyword">const</span> cpl_frame * frame2);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   @name  sinfo_new_dark()</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   @param  plugin_id recipe id</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">   @param  config input parameterlist</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">   @param  sof    input set of frames</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">   @doc </span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                  1) Sorts frames according to integration time</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                  2) Take the clean mean of a stack of frames with the </span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">                  same integration time</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">int</span> sinfo_new_dark (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, cpl_parameterlist* config, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>           cpl_frameset* sof, <span class="keywordtype">char</span>* dark_name)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     dark_config * cfg=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_imagelist * image_list=NULL ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_imagelist * object_list=NULL ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>    </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_image * image=NULL ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_image * eclipse_image=NULL ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     cpl_image* dark_img=NULL;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     cpl_frame* first_frame=NULL;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_vector* qc_dark_median=NULL;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_propertylist* rplist=NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_frameset* f_one=NULL;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordtype">float</span> lo_cut=0.;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">float</span> hi_cut=0.;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">int</span> j = 0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordtype">int</span> n = 0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordtype">int</span> count = 0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordtype">int</span>* n_times=NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordtype">double</span> exp_time = 0.;    </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordtype">float</span>* int_time=NULL;   </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordtype">float</span> time_val = 0.; </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordtype">char</span>   ref_file[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     cpl_size zone_def[4];</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordtype">double</span> qc_ron_val=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">double</span> qc_ron_err=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">double</span> qc_darkmed_ave=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">double</span> qc_darkmed_stdev=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">double</span> fpn=0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     cpl_size zone[4];</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">int</span> naxis1=0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordtype">int</span> naxis2=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_size* selection=NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     cpl_size nsets=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">       1) parse the file names and parameters to the dark_config data </span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">          structure cfg </span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>  </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cknull(cfg = sinfo_parse_cpl_input_dark(config,sof,&raw),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>            <span class="stringliteral">"could not parse cpl input!"</span>) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">       2) GET FRAMES AND SORT ACCORDING TO EXPOSURE TIME </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>      </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">       2.1) get the total integration time from the fits header and </span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">            store it in an array</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* 2.1.1) get a data cube to stack darks */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     sinfo_msg(<span class="stringliteral">"Build data cube"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="comment">/* take a clean mean of the frames */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     check_nomsg(image_list = cpl_imagelist_new());</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     int_time = (<span class="keywordtype">float</span>*) cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>  </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes ; i++ )</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         <span class="keywordflow">if</span> (sinfo_is_fits_file (cfg->inFrameList[i]) != 1) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrameList[i]);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>            <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     check_nomsg(cpl_imagelist_set(image_list,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                     cpl_image_load(cfg->inFrameList[i],CPL_TYPE_FLOAT,0,0),i));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         exp_time = sinfo_pfits_get_exptime(cfg->inFrameList[i]);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not get exposure time from fits header!\n"</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>            <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         sinfo_new_array_set_value(int_time, (<span class="keywordtype">float</span>)exp_time, i);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     no=cfg->nframes;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">       2.2) find the number of frames with the same integration time</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     sinfo_msg(<span class="stringliteral">"Find frames with same tint"</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     n = 0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     n_times = (<span class="keywordtype">int</span>*) cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     sinfo_msg(<span class="stringliteral">"Sort frames with same tint"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">for</span> ( i = 0 ; i < cfg->nframes-1 ; i++ )</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>          <span class="keywordflow">if</span> ( sinfo_new_array_get_value(int_time, i+1) != </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>               sinfo_new_array_get_value(int_time, i)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         ) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     n_times[n] = i+1;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         n = n+1;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">       2.3) store the images with the same tint in data cubes and take </span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">            clean means</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     sinfo_msg(<span class="stringliteral">"Do clean mean"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">if</span> ( n == 0 ) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       sinfo_msg(<span class="stringliteral">"n == 0 "</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>        time_val = sinfo_new_array_get_value(int_time, 0);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       cknull(object_list = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>          <span class="stringliteral">"could not allocate memory for object_list"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>        <span class="comment">/* here we have a leak of 80 bytes */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>        count = 0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>        <span class="comment">/* do also QC log */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>        check_nomsg(qc_dark_median=cpl_vector_new(cfg->nframes));</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>        <span class="comment">/* AMo here there is a leak */</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>        <span class="keywordflow">for</span> ( j = 0 ; j < cfg->nframes ; j++ ) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>      check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                      count));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>      check_nomsg(cpl_vector_set(qc_dark_median,j,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                      cpl_image_get_median(cpl_imagelist_get(image_list,j))));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>          count = count + 1;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>        }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>  </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>        check_nomsg(qc_darkmed_ave=cpl_vector_get_mean(qc_dark_median));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>        <span class="keywordflow">if</span> (cfg->nframes > 1) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>           check_nomsg(qc_darkmed_stdev=cpl_vector_get_stdev(qc_dark_median));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>        }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>        <span class="comment">/* </span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">        rms   = stdev * sqrt(1-1/(double)cpl_vector_get_size(myvector)); </span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">       qc_darkmed_stdev = qc_darkmed_stdev * </span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">                       sqrt(1-1/(double)cpl_vector_get_size(qc_dark_median));</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">        */</span>  </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>        check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>        lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>        hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>  </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>        cknull(image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                                                          lo_cut,hi_cut),</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>           <span class="stringliteral">"sinfo_average_with_rejection failed"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>        sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>        sinfo_msg(<span class="stringliteral">"dark_name=%s\n"</span>,dark_name);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>        </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>        check_nomsg(first_frame = cpl_frameset_get_frame(raw, 0)) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>        strcpy(ref_file,cpl_frame_get_filename(first_frame)) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>        cknull_nomsg(rplist = cpl_propertylist_load(ref_file, 0));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>        check_nomsg(naxis1=cpl_propertylist_get_int(rplist,<span class="stringliteral">"NAXIS1"</span>));</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>        check_nomsg(naxis2=cpl_propertylist_get_int(rplist,<span class="stringliteral">"NAXIS1"</span>));</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>        sinfo_free_propertylist(&rplist);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>        <span class="keywordflow">if</span>(cfg->qc_ron_xmin < 1) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin %d < 1"</span>,cfg->qc_ron_xmin);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>        }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>        <span class="keywordflow">if</span>(cfg->qc_ron_xmax > naxis1) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax %d > %d"</span>,cfg->qc_ron_xmax,naxis1);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>        }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>        <span class="keywordflow">if</span>(cfg->qc_ron_ymin < 1) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin %d < 1"</span>,cfg->qc_ron_ymin);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>        }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>        <span class="keywordflow">if</span>(cfg->qc_ron_ymax > naxis2) {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax %d > %d"</span>,cfg->qc_ron_ymax,naxis2);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>        }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>        zone_def[0]=cfg->qc_ron_xmin;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>        zone_def[1]=cfg->qc_ron_xmax;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>        zone_def[2]=cfg->qc_ron_ymin;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>        zone_def[3]=cfg->qc_ron_ymax;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>        check(cpl_flux_get_noise_window(image,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                        zone_def,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                        cfg->qc_ron_hsize,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                        cfg->qc_ron_nsamp,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                        &qc_ron_val,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                        &qc_ron_err),</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>          <span class="stringliteral">"In computation RON on image %s"</span>,dark_name);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>  </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>        <span class="keywordflow">if</span>(cfg->qc_fpn_xmin < 1) {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_xmin %d < 1"</span>,cfg->qc_fpn_xmin);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>        }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>        <span class="keywordflow">if</span>(cfg->qc_fpn_xmax > naxis1) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_xmax %d > %d"</span>,cfg->qc_fpn_xmax,naxis1);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>        }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>        <span class="keywordflow">if</span>(cfg->qc_fpn_ymin < 1) {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_ymin %d < 1"</span>,cfg->qc_fpn_ymin);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>        }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>        <span class="keywordflow">if</span>(cfg->qc_fpn_ymax > naxis2) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_fpn_ymax %d > %d"</span>,cfg->qc_fpn_ymax,naxis2);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>        }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>        zone[0]=cfg->qc_fpn_xmin;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>        zone[1]=cfg->qc_fpn_xmax;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>        zone[2]=cfg->qc_fpn_ymin;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>        zone[3]=cfg->qc_fpn_ymax;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>        check(cpl_flux_get_noise_window(image, zone, cfg->qc_fpn_hsize,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                        cfg->qc_fpn_nsamp, &fpn, NULL),</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>          <span class="stringliteral">"Error computing noise in a window"</span>);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>        <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>        cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKMED AVE"</span>,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>              qc_darkmed_ave,<span class="stringliteral">"Average of raw darks medians"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKMED STDEV"</span>,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                      qc_darkmed_stdev,<span class="stringliteral">"STDEV of raw darks medians"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC RON"</span>,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                      qc_ron_val,<span class="stringliteral">"Read Out Noise"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>        </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC RONRMS"</span>,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                      qc_ron_err,<span class="stringliteral">"RMS on Read Out Noise"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC DARKFPN"</span>,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                      fpn,<span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>  </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>        <span class="comment">/* special way to calculate RON: for each couple */</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>        </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>        check(selection = cpl_frameset_labelise(raw,sinfo_dark_compare,&nsets),</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>          <span class="stringliteral">"Error labelizing"</span>);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>        <span class="keywordflow">for</span> ( i = 0 ; i < nsets ; i++ ) {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>          sinfo_msg(<span class="stringliteral">"Reduce data set no %d out of %"</span> CPL_SIZE_FORMAT <span class="stringliteral">""</span>, i+1, nsets);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>          cpl_msg_indent_more();</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>      check_nomsg(f_one = cpl_frameset_extract(raw,selection,i));</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>          <span class="keywordflow">if</span> (cpl_frameset_get_size(f_one) < 2) {</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>            <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Skip %d set. One frame, not enough "</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                              <span class="stringliteral">"to get ron"</span>,i+1);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>            <span class="keywordflow">if</span> (sinfo_dark_ron_reduce(f_one,cfg,qclog_tbl) ) {</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>          <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Cannot reduce set number %d"</span>, i+1) ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>        }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>      }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>          sinfo_free_frameset(&f_one);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>          cpl_msg_indent_less();</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>        }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>        cpl_free(selection);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>        <span class="comment">/* generate a dummy_set with the master dark and a dummy </span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">              dark=2*master_dark */</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>        ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                  PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                            <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>        sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>        sinfo_free_image(&image);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>  </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (n == 1) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>        sinfo_msg(<span class="stringliteral">"n == 1"</span>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>        time_val = sinfo_new_array_get_value(int_time, 0);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>        cknull(object_list = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>            <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>        count = 0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>        <span class="keywordflow">for</span> (j =0; j < n_times[0]; j++) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>      check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                      count));</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>      count = count + 1;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>        }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>        check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>        lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>        hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>        check(image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                                                         lo_cut,hi_cut),</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                                  <span class="stringliteral">"sinfo_average_with_rejection failed!"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>        sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>        cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>        ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                                      <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>        ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                   PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                           <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>        sinfo_free_image(&image);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>        sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>        time_val = sinfo_new_array_get_value(int_time, n_times[0]);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>        cknull(object_list = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>           <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>        count = 0;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>        <span class="keywordflow">for</span> (j = n_times[0]; j < cfg->nframes; j++) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>      check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                      cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                      count));</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>          count = count + 1;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>        }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>        check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>        lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>        hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>        cknull(eclipse_image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                                                                  lo_cut,hi_cut),</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>           <span class="stringliteral">"sinfo_average_with_rejection failed!"</span>);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>        sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>        cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>        ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                      <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>        ck0(sinfo_pro_save_ima(eclipse_image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                   PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                           <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>        sinfo_free_image(&eclipse_image);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>        sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>        sinfo_msg(<span class="stringliteral">"n==else\n"</span>);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>        <span class="keywordflow">for</span> (i= 0; i < n+1; i++) {</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>          <span class="keywordflow">if</span> ( i == 0 ) {</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>            time_val = sinfo_new_array_get_value(int_time, 0);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         check(object_list = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>             count = 0;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>             <span class="keywordflow">for</span> (j = 0; j < n_times[0]; j++) {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>           check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                           count));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>           count = count + 1;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>         }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>         check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>         hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             check(image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                                              lo_cut,hi_cut),</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                                     <span class="stringliteral">"Error computing average with rejection"</span>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>             sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             sinfo_msg(<span class="stringliteral">"dark_name-%s\n"</span>,dark_name);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>             cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>               <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>             sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             sinfo_free_image(&image);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>      } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( i == n ) {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>             time_val = sinfo_new_array_get_value(int_time, n_times[n-1]);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>             cknull(object_list = cpl_imagelist_new(), </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>             count = 0;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>             <span class="keywordflow">for</span> (j = n_times[n-1]; j < cfg->nframes; j++) {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>           check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                           count));</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>           count = count + 1;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         }</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>         hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>             check(image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                                                              lo_cut,hi_cut),</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                   <span class="stringliteral">"Error computing average with rejection"</span>);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>             sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>             sinfo_free_image(&image);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         time_val = sinfo_new_array_get_value(int_time, n_times[i-1]);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         cknull(object_list = cpl_imagelist_new(), </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>                    <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>             count = 0;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>             <span class="keywordflow">for</span> (j = n_times[i-1]; j < n_times[i]; j++) {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>           check_nomsg(cpl_imagelist_set(object_list,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                           cpl_image_duplicate(cpl_imagelist_get(image_list,j)),</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                           count));</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>           count = count + 1;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         }</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         check_nomsg(no=cpl_imagelist_get_size(object_list));</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>         lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>         hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>             cknull(image=cpl_imagelist_collapse_minmax_create(object_list,</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                                                               lo_cut,hi_cut),</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                                      <span class="stringliteral">"Error computing average with rejection"</span>);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>             sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>             cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>             ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NAME"</span>,1,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                                           <span class="stringliteral">"A description"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>             ck0(sinfo_pro_save_ima(image,raw,sof,dark_name,</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>                    PRO_MASTER_DARK,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>                                    <span class="stringliteral">"cannot save ima %s"</span>, dark_name);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             sinfo_free_image(&image);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>        </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>        } <span class="comment">/* end for loop */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     } <span class="comment">/* end else over n */</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>  </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>        sinfo_free_imagelist(&image_list);</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>        sinfo_free_my_vector(&qc_dark_median);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>        sinfo_free_int(&n_times);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>        sinfo_free_float(&int_time);</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>        sinfo_dark_free(&cfg);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>        sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>  cleanup:</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>        sinfo_free_frameset(&f_one);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>        cpl_free(selection);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>        sinfo_free_image(&eclipse_image);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>        sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>        sinfo_free_image(&dark_img);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>        sinfo_free_image(&image);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>        sinfo_free_propertylist(&rplist);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>        sinfo_free_my_vector(&qc_dark_median);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>        sinfo_free_imagelist(&object_list);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>        sinfo_free_int(&n_times);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>        sinfo_free_float(&int_time);</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>        sinfo_free_imagelist(&image_list);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>        sinfo_dark_free(&cfg);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>        sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> </div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="comment">/*--------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="comment">/*--------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> sinfo_dark_ron_reduce(cpl_frameset    *   framelist,</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>               dark_config     *   cfg,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>               cpl_table       *   qclog_tbl)</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> {</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   cpl_imagelist   *   iset =NULL;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="keywordtype">int</span>                 i =0;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="keywordtype">double</span>* ron=NULL;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   <span class="comment">/* int nraw=0; */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   <span class="keywordtype">int</span> niset=0;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   cknull_nomsg(framelist);</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="comment">/* Load the current set */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   <span class="keywordflow">if</span> ((iset = sinfo_new_frameset_to_iset(framelist)) == NULL) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load the data"</span>) ;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   <span class="comment">/* Loop on all pairs */</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="comment">/* nraw = cpl_table_get_nrow(qclog_tbl); */</span></div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   niset=cpl_imagelist_get_size(iset);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   ron = cpl_calloc(niset,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   sinfo_get_ron(framelist,</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                 cfg->qc_ron_xmin,cfg->qc_ron_xmax,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                 cfg->qc_ron_ymin,cfg->qc_ron_ymax,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                 cfg->qc_ron_hsize,cfg->qc_ron_nsamp,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                 &ron);</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   <span class="keywordflow">for</span> (i=0 ; i<niset-1 ; i++) {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="comment">/* Write the paf file on disk */</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="comment">/* Write QC LOG */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC RON"</span>,i+1);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     sinfo_qclog_add_double(qclog_tbl,key_name,ron[i],</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                <span class="stringliteral">"Read Out Noise"</span>,<span class="stringliteral">"%f"</span>);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   }</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   cpl_free(ron);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   sinfo_free_imagelist(&iset) ;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>  cleanup:</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   cpl_free(ron);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   ron=NULL;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   sinfo_free_imagelist(&iset) ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> }</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_dark_compare(</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         <span class="keyword">const</span> cpl_frame   *   frame1,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         <span class="keyword">const</span> cpl_frame   *   frame2)</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="keywordtype">int</span>                 comparison=0 ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>     cpl_propertylist *  plist1=NULL;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     cpl_propertylist *  plist2=NULL;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="keywordtype">char</span>            *   sval ;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordtype">char</span>                mode1[512] ;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keywordtype">char</span>                mode2[512] ;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keywordtype">double</span>              dval1=0;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="keywordtype">double</span>              dval2=0;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="keywordtype">int</span>                 ival1=0;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     <span class="keywordtype">int</span>                 ival2=0;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     <span class="keywordflow">if</span> (frame1==NULL || frame2==NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="comment">/* Get property lists */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     cknull(plist1=cpl_propertylist_load(cpl_frame_get_filename(frame1),0),</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         <span class="stringliteral">"getting header from reference frame"</span>);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     cknull(plist2=cpl_propertylist_load(cpl_frame_get_filename(frame2),0),</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>         <span class="stringliteral">"getting header from reference frame"</span>);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>      </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="comment">/* Compare exposure time */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     comparison = 1 ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     check(dval1=sinfo_pfits_get_exp_time(plist1),<span class="stringliteral">"To get exptime"</span>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     check(dval2=sinfo_pfits_get_exp_time(plist2),<span class="stringliteral">"To get exptime"</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <span class="keywordflow">if</span> (fabs(dval1-dval2) > 1e-5) comparison = 0 ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     <span class="comment">/* Compare the readout mode */</span></div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     check(ival1=sinfo_pfits_get_rom(plist1),<span class="stringliteral">"to get read out mode"</span>);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     check(ival2=sinfo_pfits_get_rom(plist2),<span class="stringliteral">"to get read out mode"</span>);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordflow">if</span> (ival1 != ival2) comparison = 0 ;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     <span class="comment">/* Compare the detector mode */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     cknull(sval=sinfo_pfits_get_mode(plist1),<span class="stringliteral">"to get detector mode"</span>);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     strcpy(mode1, sval) ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     cknull(sval=sinfo_pfits_get_mode(plist2),<span class="stringliteral">"to get detector mode"</span>);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     strcpy(mode2, sval) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordflow">if</span> (strcmp(mode1, mode2)) comparison = 0 ;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="comment">/* Files have to be consequtive */</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> <span class="comment">    check(ival1 = sinfo_pfits_get_expno(plist1),"to get exposure number");</span></div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> <span class="comment">    check(ival2 = sinfo_pfits_get_expno(plist1),"to get exposure number");</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="comment">    if (ival1 != ival2) comparison = 0 ;</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     sinfo_free_propertylist(&plist1);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     sinfo_free_propertylist(&plist2);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordflow">return</span> comparison ;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>  cleanup:</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     sinfo_free_propertylist(&plist1);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     sinfo_free_propertylist(&plist2);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__dark_8h_source.html b/html/sinfo__new__dark_8h_source.html
index 64a12b1..5ba13b8 100644
--- a/html/sinfo__new__dark_8h_source.html
+++ b/html/sinfo__new__dark_8h_source.html
@@ -2,79 +2,110 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_dark.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_dark.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_DARK_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_DARK_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_dark.h,v 1.6 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_dark.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to create a master sinfo_dark</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>    
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00042"></a>00042 <span class="comment">/*@-skipposixheaders@*/</span>
-<a name="l00043"></a>00043 <span class="comment">/*@=skipposixheaders@*/</span>
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">   @name cpl_dark()</span>
-<a name="l00050"></a>00050 <span class="comment">   @param ini_file: file name of according .ini file</span>
-<a name="l00051"></a>00051 <span class="comment">   @param cpl_parameterlist: structure containing recipe's parameters</span>
-<a name="l00052"></a>00052 <span class="comment">   @param cpl_frameset: structure containing recipe's input files</span>
-<a name="l00053"></a>00053 <span class="comment">   @result integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00054"></a>00054 <span class="comment">   @doc Sorts frames according to integration time</span>
-<a name="l00055"></a>00055 <span class="comment">        Take the clean mean of a stack of frames with the same</span>
-<a name="l00056"></a>00056 <span class="comment">        integration time</span>
-<a name="l00057"></a>00057 <span class="comment"></span>
-<a name="l00058"></a>00058 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 <span class="keywordtype">int</span> 
-<a name="l00060"></a>00060 sinfo_new_dark (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, cpl_parameterlist* config, 
-<a name="l00061"></a>00061           cpl_frameset* <span class="keyword">set</span>, <span class="keywordtype">char</span>* dark_name);
-<a name="l00062"></a>00062 <span class="preprocessor">#endif </span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span>
-<a name="l00064"></a>00064 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_dark.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_DARK_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_DARK_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_dark.h,v 1.6 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_dark.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to create a master sinfo_dark</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span>    </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*@-skipposixheaders@*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*@=skipposixheaders@*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   @name cpl_dark()</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   @param ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   @param cpl_parameterlist: structure containing recipe's parameters</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   @param cpl_frameset: structure containing recipe's input files</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   @result integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   @doc Sorts frames according to integration time</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">        Take the clean mean of a stack of frames with the same</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">        integration time</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> sinfo_new_dark (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, cpl_parameterlist* config, </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>           cpl_frameset* <span class="keyword">set</span>, <span class="keywordtype">char</span>* dark_name);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__find__distortions_8c_source.html b/html/sinfo__new__find__distortions_8c_source.html
index bc75409..4d07e3d 100644
--- a/html/sinfo__new__find__distortions_8c_source.html
+++ b/html/sinfo__new__find__distortions_8c_source.html
@@ -2,765 +2,796 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_find_distortions.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_find_distortions.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_find_distortions.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Aug 12, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_new_find_distortions.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_finddist_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_absolute.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_distortion.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                Defines</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#define SINFO_ARC_SATURATION                 100000</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ARC_MAX_WIDTH                  64</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span>
-<a name="l00056"></a>00056 
-<a name="l00065"></a>00065 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">                             Function Definitions</span>
-<a name="l00067"></a>00067 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00070"></a>00070 <span class="comment">   Function     :       sinfo_find_distortions()</span>
-<a name="l00071"></a>00071 <span class="comment">   In           :</span>
-<a name="l00072"></a>00072 <span class="comment">   Out          :</span>
-<a name="l00073"></a>00073 <span class="comment">   Job          :</span>
-<a name="l00074"></a>00074 <span class="comment"></span>
-<a name="l00075"></a>00075 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00077"></a>00077 new_compute_shift(<span class="keywordtype">double</span> x,
-<a name="l00078"></a>00078           <span class="keywordtype">double</span> y,
-<a name="l00079"></a>00079           <span class="keywordtype">double</span> c00,
-<a name="l00080"></a>00080           <span class="keywordtype">double</span> c10,
-<a name="l00081"></a>00081           <span class="keywordtype">double</span> c01,
-<a name="l00082"></a>00082           <span class="keywordtype">double</span> c11,
-<a name="l00083"></a>00083           <span class="keywordtype">double</span> c20,
-<a name="l00084"></a>00084           <span class="keywordtype">double</span> c02,
-<a name="l00085"></a>00085           <span class="keywordtype">double</span> c21,
-<a name="l00086"></a>00086           <span class="keywordtype">double</span> c12,
-<a name="l00087"></a>00087           <span class="keywordtype">double</span> c30,
-<a name="l00088"></a>00088           <span class="keywordtype">double</span> c03);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="keywordtype">int</span>
-<a name="l00091"></a>00091 sinfo_new_find_distortions(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00092"></a>00092                            cpl_parameterlist* config,
-<a name="l00093"></a>00093                            cpl_frameset* sof,
-<a name="l00094"></a>00094                cpl_frameset* set_fibre_ns)
-<a name="l00095"></a>00095 {
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097   finddist_config * cfg=NULL ;
-<a name="l00098"></a>00098   cpl_image * imonind=NULL ;
-<a name="l00099"></a>00099   cpl_image * impoly=NULL ;
-<a name="l00100"></a>00100   cpl_image * im=NULL ;
-<a name="l00101"></a>00101   cpl_image *  map=NULL ;
-<a name="l00102"></a>00102   cpl_image *  mask=NULL ;
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   <span class="keywordtype">int</span>*            degx=NULL;
-<a name="l00105"></a>00105   <span class="keywordtype">int</span>*            degy=NULL;
-<a name="l00106"></a>00106   <span class="keywordtype">int</span>* n_found_lines=NULL;
-<a name="l00107"></a>00107   <span class="keywordtype">int</span>* sum_pointer=NULL;
-<a name="l00108"></a>00108   <span class="keywordtype">int</span>** row_clean=NULL;
-<a name="l00109"></a>00109   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112   <span class="keywordtype">int</span> x_l=SIZEX/4*1;
-<a name="l00113"></a>00113   <span class="keywordtype">int</span> x_u=SIZEX/4*3;
-<a name="l00114"></a>00114   <span class="keywordtype">int</span> y_l=SIZEY/4*1;
-<a name="l00115"></a>00115   <span class="keywordtype">int</span> y_u=SIZEY/4*3;
-<a name="l00116"></a>00116   <span class="keywordtype">int</span> x_c=SIZEX/4*2;
-<a name="l00117"></a>00117   <span class="keywordtype">int</span> y_c=SIZEY/4*2;
-<a name="l00118"></a>00118   <span class="keyword">const</span> <span class="keywordtype">int</span> pdx=4;
-<a name="l00119"></a>00119   <span class="keyword">const</span> <span class="keywordtype">int</span> pdy=4;
-<a name="l00120"></a>00120   <span class="keywordtype">int</span> check = 0;
-<a name="l00121"></a>00121   <span class="keywordtype">int</span> i = 0;
-<a name="l00122"></a>00122   <span class="keywordtype">int</span> lx=0;
-<a name="l00123"></a>00123   <span class="keywordtype">int</span> ly=0;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126   <span class="keywordtype">int</span> sum=0;
-<a name="l00127"></a>00127   <span class="keywordtype">int</span> n_lines=0;
-<a name="l00128"></a>00128   <span class="keywordtype">int</span> fit=0;
-<a name="l00129"></a>00129   <span class="keywordtype">int</span> n=0;
-<a name="l00130"></a>00130   <span class="keywordtype">int</span> j=0;
-<a name="l00131"></a>00131   cpl_size coef_pow[2];
-<a name="l00132"></a>00132   <span class="keywordtype">int</span> arcs_window_size=0;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134   <span class="keywordtype">float</span> value=0;
-<a name="l00135"></a>00135   <span class="keywordtype">float</span> newval=0;
-<a name="l00136"></a>00136   <span class="keywordtype">float</span> total_dist=0;
-<a name="l00137"></a>00137   <span class="keywordtype">float</span> shift=0;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139   <span class="keywordtype">float</span>* distances=NULL;
-<a name="l00140"></a>00140   <span class="keywordtype">float</span>** wavelength_clean=NULL;
-<a name="l00141"></a>00141   <span class="keywordtype">float</span>** slit_pos=NULL;
-<a name="l00142"></a>00142   <span class="keywordtype">float</span>** acoefs=NULL;
-<a name="l00143"></a>00143   <span class="keywordtype">float</span>* wave=NULL;
-<a name="l00144"></a>00144   <span class="keywordtype">float</span>* intens=NULL;
-<a name="l00145"></a>00145   <span class="keywordtype">float</span>* first =NULL;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147   <span class="keywordtype">double</span>*         coef=NULL;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   <span class="keywordtype">double</span> xshift=0.;
-<a name="l00150"></a>00150   <span class="keywordtype">double</span> arcs_thres_factor=0;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152   <span class="keywordtype">double</span> arcs_min_arclen_factor=0;
-<a name="l00153"></a>00153   <span class="keywordtype">double</span> pcf[pdx][pdy];
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156   <span class="keywordtype">char</span> tbl_name[FILE_NAME_SZ];
-<a name="l00157"></a>00157   <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   cpl_table* poly_tbl=NULL;
-<a name="l00160"></a>00160   cpl_table* tbl_spos=NULL;
-<a name="l00161"></a>00161   cpl_table* tbl_line_list=NULL;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163   FitParams** par=NULL;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   cpl_frameset* stk=NULL;
-<a name="l00166"></a>00166   cpl_table* qclog_tbl=NULL;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168   cpl_polynomial* distor_poly=NULL;
-<a name="l00169"></a>00169   cpl_apertures       *   arcs=NULL ;
-<a name="l00170"></a>00170   cpl_parameter* p=NULL;
-<a name="l00171"></a>00171   <span class="keywordtype">int</span> smooth_rad=0;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00175"></a>00175   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="comment">/*</span>
-<a name="l00178"></a>00178 <span class="comment">    parse the file names and parameters to the finddist_config</span>
-<a name="l00179"></a>00179 <span class="comment">    data structure cfg</span>
-<a name="l00180"></a>00180 <span class="comment">   */</span>
-<a name="l00181"></a>00181   check_nomsg(stk=cpl_frameset_new());
-<a name="l00182"></a>00182   cknull(cfg = sinfo_parse_cpl_input_finddist(config,sof,&stk),
-<a name="l00183"></a>00183      <span class="stringliteral">"could not parse CPL input!"</span>);
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185   <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->inFrame) != 1) {
-<a name="l00186"></a>00186     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);
-<a name="l00187"></a>00187     <span class="keywordflow">goto</span> cleanup;
-<a name="l00188"></a>00188   }
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190   <span class="comment">/* load the emission line frame--- */</span>
-<a name="l00191"></a>00191   check(im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0),
-<a name="l00192"></a>00192     <span class="stringliteral">"could not load arc image"</span>);
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194   <span class="comment">/* load the fake on - fake off frame--- */</span>
-<a name="l00195"></a>00195   check(imonind = cpl_image_load(cfg->nsFrame,CPL_TYPE_FLOAT,0,0),
-<a name="l00196"></a>00196     <span class="stringliteral">"could not load on-off fake image"</span>);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   check(impoly  = cpl_image_load(cfg->nsFrame,CPL_TYPE_FLOAT,0,0),
-<a name="l00199"></a>00199     <span class="stringliteral">"could not load on-off fake image"</span>);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   <span class="comment">/* load the fake on - fake off frame--- */</span>
-<a name="l00202"></a>00202   check(mask = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l00203"></a>00203     <span class="stringliteral">"could not load mask image"</span>);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   check(cpl_image_multiply (im,mask),
-<a name="l00206"></a>00206     <span class="stringliteral">"Failing to correct arc ima by bp mask"</span>);
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208   check(cpl_image_multiply (imonind,mask),
-<a name="l00209"></a>00209     <span class="stringliteral">"Failing to correct on-off fake ima by bp mask"</span>);
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211   check(cpl_image_multiply(impoly,mask),
-<a name="l00212"></a>00212     <span class="stringliteral">"Failing to correct on-off fake ima by bp mask"</span>);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   sinfo_free_image(&mask);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   check_nomsg(lx = cpl_image_get_size_x(im));
-<a name="l00217"></a>00217   check_nomsg(ly = cpl_image_get_size_y(im));
-<a name="l00218"></a>00218   <span class="comment">/* TO BE CHENGED THE FOLLOWING INPUT */</span>
-<a name="l00219"></a>00219   <span class="comment">/* open the line list and read the number of lines */</span>
-<a name="l00220"></a>00220   check(tbl_line_list = cpl_table_load(cfg->lineList,1,0),
-<a name="l00221"></a>00221     <span class="stringliteral">"problems loading table %s"</span>,cfg->lineList);
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223   check_nomsg(n_lines = cpl_table_get_nrow(tbl_line_list));
-<a name="l00224"></a>00224   check_nomsg(wave=cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>));
-<a name="l00225"></a>00225   check_nomsg(intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>));
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227   <span class="comment">/*</span>
-<a name="l00228"></a>00228 <span class="comment">       #---------------------------------------------------------------------</span>
-<a name="l00229"></a>00229 <span class="comment">       #---------------------------FINDLINES---------------------------------</span>
-<a name="l00230"></a>00230 <span class="comment">       #---------------------------------------------------------------------</span>
-<a name="l00231"></a>00231 <span class="comment">  */</span>
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   sinfo_msg(<span class="stringliteral">"Find Lines"</span>);
-<a name="l00234"></a>00234   <span class="comment">/*</span>
-<a name="l00235"></a>00235 <span class="comment">       do the wavelength calibration, that means:</span>
-<a name="l00236"></a>00236 <span class="comment">       find the dispersion relation and parameterize its coefficients</span>
-<a name="l00237"></a>00237 <span class="comment">  */</span>
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239   acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);
-<a name="l00240"></a>00240   <span class="comment">/* allocate memory */</span>
-<a name="l00241"></a>00241   n_found_lines    = sinfo_new_intarray(lx);
-<a name="l00242"></a>00242   row_clean        = sinfo_new_2Dintarray(lx, n_lines);
-<a name="l00243"></a>00243   wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);
-<a name="l00244"></a>00244   sum_pointer      = sinfo_new_intarray(1);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   <span class="comment">/* find the emission lines in each image column */</span>
-<a name="l00247"></a>00247   sinfo_new_intarray_set_value(sum_pointer, 0, 0);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   ck0(check = sinfo_new_find_lines(im,
-<a name="l00250"></a>00250                    wave,
-<a name="l00251"></a>00251                    intens,
-<a name="l00252"></a>00252                    n_lines,
-<a name="l00253"></a>00253                    row_clean,
-<a name="l00254"></a>00254                    wavelength_clean,
-<a name="l00255"></a>00255                    cfg->guessBeginWavelength,
-<a name="l00256"></a>00256                    cfg->guessDispersion1,
-<a name="l00257"></a>00257                    cfg->guessDispersion2,
-<a name="l00258"></a>00258                    cfg->mindiff,
-<a name="l00259"></a>00259                    cfg->halfWidth,
-<a name="l00260"></a>00260                    n_found_lines,
-<a name="l00261"></a>00261                    cfg->sigma,
-<a name="l00262"></a>00262                    sum_pointer ),
-<a name="l00263"></a>00263       <span class="stringliteral">"FindLines failed!"</span>);
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265   sinfo_free_table(&tbl_line_list);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   <span class="comment">/*</span>
-<a name="l00268"></a>00268 <span class="comment">   #-------------------------------------------------------------------------</span>
-<a name="l00269"></a>00269 <span class="comment">   #---------------------------WAVECALIB-------------------------------------</span>
-<a name="l00270"></a>00270 <span class="comment">   #-------------------------------------------------------------------------</span>
-<a name="l00271"></a>00271 <span class="comment">    */</span>
-<a name="l00272"></a>00272   sinfo_msg(<span class="stringliteral">"Do wave calib"</span>);
-<a name="l00273"></a>00273   sum = sinfo_new_intarray_get_value(sum_pointer,0);
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275   <span class="comment">/* #allocate memory for the fit parameters */</span>
-<a name="l00276"></a>00276   cknull(par = sinfo_new_fit_params( sum ),
-<a name="l00277"></a>00277      <span class="stringliteral">"sinfo_new_fit_params failed!"</span>);
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279   <span class="comment">/*</span>
-<a name="l00280"></a>00280 <span class="comment">      fit each line, make a polynomial fit and fit the resulting fit</span>
-<a name="l00281"></a>00281 <span class="comment">       coefficients across the columns of the slitlet</span>
-<a name="l00282"></a>00282 <span class="comment">  */</span>
-<a name="l00283"></a>00283   cknull(map = sinfo_new_wave_cal(im,
-<a name="l00284"></a>00284                              par,
-<a name="l00285"></a>00285                       acoefs,
-<a name="l00286"></a>00286                       cfg->nslitlets,
-<a name="l00287"></a>00287                       row_clean,
-<a name="l00288"></a>00288                       wavelength_clean,
-<a name="l00289"></a>00289                       n_found_lines,
-<a name="l00290"></a>00290                       cfg->guessDispersion1,
-<a name="l00291"></a>00291                       cfg->halfWidth,
-<a name="l00292"></a>00292                       cfg->minAmplitude,
-<a name="l00293"></a>00293                       cfg->maxResidual,
-<a name="l00294"></a>00294                       cfg->fwhm,
-<a name="l00295"></a>00295                       cfg->nrDispCoefficients,
-<a name="l00296"></a>00296                       cfg->nrCoefCoefficients,
-<a name="l00297"></a>00297                       cfg->sigmaFactor,
-<a name="l00298"></a>00298                       cfg->pixeldist,
-<a name="l00299"></a>00299                       cfg->pixel_tolerance),
-<a name="l00300"></a>00300      <span class="stringliteral">"sinfo_waveCal failed!"</span>);
-<a name="l00301"></a>00301   <span class="comment">/* here mem leak */</span>
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303   sinfo_msg(<span class="stringliteral">"Check line positions"</span>);
-<a name="l00304"></a>00304   shift = sinfo_new_check_line_positions (im, acoefs,
-<a name="l00305"></a>00305                                           cfg->nrDispCoefficients,
-<a name="l00306"></a>00306                                           cfg->guessDispersion1,par);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308   <span class="keywordflow">if</span> (FLAG == shift) {
-<a name="l00309"></a>00309     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"checkForLinePositions failed!"</span>);
-<a name="l00310"></a>00310     <span class="keywordflow">goto</span> cleanup;
-<a name="l00311"></a>00311   }
-<a name="l00312"></a>00312   sinfo_free_image(&map);
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315  <span class="comment">/* free memory */</span>
-<a name="l00316"></a>00316   sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );
-<a name="l00317"></a>00317   sinfo_new_destroy_2Dintarray (&row_clean, lx);
-<a name="l00318"></a>00318   sinfo_new_destroy_intarray(&n_found_lines );
-<a name="l00319"></a>00319   sinfo_new_destroy_intarray(&sum_pointer );
-<a name="l00320"></a>00320   sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );
-<a name="l00321"></a>00321   <span class="comment">/*</span>
-<a name="l00322"></a>00322 <span class="comment">  sinfo_new_destroy_array (& wave );</span>
-<a name="l00323"></a>00323 <span class="comment">  sinfo_new_destroy_array (& intens );</span>
-<a name="l00324"></a>00324 <span class="comment">  */</span>
-<a name="l00325"></a>00325   <span class="comment">/*</span>
-<a name="l00326"></a>00326 <span class="comment">  #----------------------------------------------------------------------------</span>
-<a name="l00327"></a>00327 <span class="comment">  #-------------------------SLITFITS-------------------------------------------</span>
-<a name="l00328"></a>00328 <span class="comment">  #----------------------------------------------------------------------------</span>
-<a name="l00329"></a>00329 <span class="comment">  #--fit the slitlet sinfo_edge positions if desired--</span>
-<a name="l00330"></a>00330 <span class="comment">  */</span>
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332   sinfo_msg(<span class="stringliteral">"Find slit pos"</span>);
-<a name="l00333"></a>00333   <span class="comment">/*allocate memory for the slitlet position array */</span>
-<a name="l00334"></a>00334   slit_pos = sinfo_new_2Dfloatarray(32,2);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   fit = <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz</a>( im, par, slit_pos, cfg->boxLength,
-<a name="l00337"></a>00337                       cfg->yBox, cfg->diffTol );
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340   <span class="keywordflow">if</span> (fit < 0) {
-<a name="l00341"></a>00341     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"sinfo_fitSlitsBoltz failed"</span> );
-<a name="l00342"></a>00342     <span class="keywordflow">goto</span> cleanup;
-<a name="l00343"></a>00343   }
-<a name="l00344"></a>00344   sinfo_new_destroy_fit_params(&par);
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346   check_nomsg(tbl_spos=cpl_table_new(32));
-<a name="l00347"></a>00347   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE));
-<a name="l00348"></a>00348   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE));
-<a name="l00349"></a>00349   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>));
-<a name="l00350"></a>00350   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>));
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352   <span class="keywordflow">for</span> (i =0; i< 32; i++) {
-<a name="l00353"></a>00353       check_nomsg(cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,
-<a name="l00354"></a>00354                                 sinfo_new_array2D_get_value(slit_pos,i,0)));
-<a name="l00355"></a>00355       check_nomsg(cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,
-<a name="l00356"></a>00356                                 sinfo_new_array2D_get_value(slit_pos,i,1)));
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358   }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360   <span class="keywordflow">if</span>(pdensity > 2) {
-<a name="l00361"></a>00361     strcpy(tbl_name,<span class="stringliteral">"out_slitlets_pos_predist.fits"</span>);
-<a name="l00362"></a>00362     ck0(sinfo_pro_save_tbl(tbl_spos,set_fibre_ns,sof,tbl_name,
-<a name="l00363"></a>00363                PRO_SLITLETS_POS_PREDIST,NULL,plugin_id,config),
-<a name="l00364"></a>00364     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00365"></a>00365   }
-<a name="l00366"></a>00366   sinfo_free_table(&tbl_spos);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368   <span class="comment">/*</span>
-<a name="l00369"></a>00369 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00370"></a>00370 <span class="comment">  # do the north - south - test</span>
-<a name="l00371"></a>00371 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00372"></a>00372 <span class="comment">  */</span>
-<a name="l00373"></a>00373   sinfo_msg(<span class="stringliteral">"Do north south test"</span>);
-<a name="l00374"></a>00374   <span class="comment">/*</span>
-<a name="l00375"></a>00375 <span class="comment">  sinfo_msg("cfg->nslits =%d\n", cfg->nslits);</span>
-<a name="l00376"></a>00376 <span class="comment">  sinfo_msg("cfg->nshalfWidth =%d\n", cfg->nshalfWidth);</span>
-<a name="l00377"></a>00377 <span class="comment">  sinfo_msg("cfg->nsfwhm=%f\n",cfg->nsfwhm );</span>
-<a name="l00378"></a>00378 <span class="comment">  sinfo_msg("cfg->minDiff=%f\n", cfg->minDiff);</span>
-<a name="l00379"></a>00379 <span class="comment">  sinfo_msg("cfg->estimated_dist=%f\n", cfg->estimated_dist);</span>
-<a name="l00380"></a>00380 <span class="comment">  sinfo_msg("cfg->devtol=%f\n", cfg->devtol);</span>
-<a name="l00381"></a>00381 <span class="comment">  sinfo_msg("cfg->loPos=%d\n", cfg->loPos);</span>
-<a name="l00382"></a>00382 <span class="comment">  sinfo_msg("cfg->hiPos=%d\n",cfg->hiPos);</span>
-<a name="l00383"></a>00383 <span class="comment">  */</span>
-<a name="l00384"></a>00384   cknull(distances = sinfo_north_south_test(imonind,
-<a name="l00385"></a>00385                       cfg->nslits,
-<a name="l00386"></a>00386                       cfg->nshalfWidth,
-<a name="l00387"></a>00387                       cfg->nsfwhm ,
-<a name="l00388"></a>00388                       cfg->minDiff,
-<a name="l00389"></a>00389                       cfg->estimated_dist,
-<a name="l00390"></a>00390                       cfg->devtol,
-<a name="l00391"></a>00391                       cfg->loPos,
-<a name="l00392"></a>00392                       cfg->hiPos),
-<a name="l00393"></a>00393      <span class="stringliteral">"north_south_test failed"</span>);
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395   sinfo_free_image(&imonind);
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397   <span class="comment">/*</span>
-<a name="l00398"></a>00398 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00399"></a>00399 <span class="comment">  # get firstcol</span>
-<a name="l00400"></a>00400 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00401"></a>00401 <span class="comment">  */</span>
-<a name="l00402"></a>00402   sinfo_msg(<span class="stringliteral">"get first col"</span>);
-<a name="l00403"></a>00403   first = sinfo_new_floatarray(61);
-<a name="l00404"></a>00404   total_dist=0;
-<a name="l00405"></a>00405   n=0;
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407   <span class="keywordflow">for</span> (i=0; i< 31; i++) {
-<a name="l00408"></a>00408     total_dist=total_dist+sinfo_new_array_get_value(distances,i);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410     <span class="keywordflow">for</span> (j=0; j< 2; j++) {
-<a name="l00411"></a>00411       <span class="keywordflow">if</span> (j == 0) {
-<a name="l00412"></a>00412         <span class="keywordflow">if</span> (i != 30) {
-<a name="l00413"></a>00413       newval = sinfo_new_array2D_get_value(slit_pos,i+1,j) - total_dist;
-<a name="l00414"></a>00414       sinfo_new_array_set_value(first, newval, n);
-<a name="l00415"></a>00415       n = n+1;
-<a name="l00416"></a>00416         }
-<a name="l00417"></a>00417       }
-<a name="l00418"></a>00418       <span class="keywordflow">if</span> (j == 1) {
-<a name="l00419"></a>00419         newval = sinfo_new_array2D_get_value(slit_pos,i,j) - total_dist;
-<a name="l00420"></a>00420         sinfo_new_array_set_value(first, newval, n);
-<a name="l00421"></a>00421         n = n+1;
-<a name="l00422"></a>00422       }
-<a name="l00423"></a>00423     }
-<a name="l00424"></a>00424   }
-<a name="l00425"></a>00425   value = sinfo_new_f_median(first,61);
-<a name="l00426"></a>00426   sinfo_msg(<span class="stringliteral">"Firstcol =%f"</span>, value);
-<a name="l00427"></a>00427   sinfo_new_destroy_array(&first);
-<a name="l00428"></a>00428   sinfo_new_destroy_array(&distances);
-<a name="l00429"></a>00429   sinfo_new_destroy_2Dfloatarray ( &slit_pos, 32 );
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431   <span class="comment">/*</span>
-<a name="l00432"></a>00432 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00433"></a>00433 <span class="comment">  # Determine distortions</span>
-<a name="l00434"></a>00434 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00435"></a>00435 <span class="comment">  */</span>
-<a name="l00436"></a>00436   sinfo_msg(<span class="stringliteral">"Determine distortions"</span>);
-<a name="l00437"></a>00437   degx=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00438"></a>00438   degy=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00439"></a>00439   coef=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00442"></a>00442                 <span class="stringliteral">"sinfoni.distortion.arcs_thresh_factor"</span>));
-<a name="l00443"></a>00443   check_nomsg(arcs_thres_factor=cpl_parameter_get_double(p));
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00446"></a>00446                 <span class="stringliteral">"sinfoni.distortion.arcs_min_arclen_factor"</span>));
-<a name="l00447"></a>00447   check_nomsg(arcs_min_arclen_factor=cpl_parameter_get_double(p));
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00450"></a>00450                 <span class="stringliteral">"sinfoni.distortion.arcs_window_size"</span>));
-<a name="l00451"></a>00451   check_nomsg(arcs_window_size=cpl_parameter_get_int(p));
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00454"></a>00454                 <span class="stringliteral">"sinfoni.distortion.smooth_rad"</span>));
-<a name="l00455"></a>00455   check_nomsg(smooth_rad=cpl_parameter_get_int(p));
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458   cknull(distor_poly=sinfo_distortion_estimate_new(impoly,
-<a name="l00459"></a>00459                            0,
-<a name="l00460"></a>00460                            0,
-<a name="l00461"></a>00461                                                  cpl_image_get_size_x(impoly),
-<a name="l00462"></a>00462                                                  cpl_image_get_size_y(impoly),
-<a name="l00463"></a>00463                                                    FALSE,
-<a name="l00464"></a>00464                                                    SINFO_ARC_SATURATION,
-<a name="l00465"></a>00465                                                    SINFO_ARC_MAX_WIDTH,
-<a name="l00466"></a>00466                                                    arcs_thres_factor,
-<a name="l00467"></a>00467                                                    arcs_min_arclen_factor,
-<a name="l00468"></a>00468                                                    arcs_window_size,
-<a name="l00469"></a>00469                                                    smooth_rad,
-<a name="l00470"></a>00470                                                    3,
-<a name="l00471"></a>00471                                                    (<span class="keywordtype">double</span>)value,
-<a name="l00472"></a>00472                                                    &arcs),
-<a name="l00473"></a>00473      <span class="stringliteral">"cannot estimage distortion"</span>) ;
-<a name="l00474"></a>00474   <span class="comment">/*AMo: additional mem leaks */</span>
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476   sinfo_free_apertures(&arcs);
-<a name="l00477"></a>00477   coef_pow[0]=0;
-<a name="l00478"></a>00478   coef_pow[1]=0;
-<a name="l00479"></a>00479   check_nomsg(pcf[0][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00480"></a>00480   sinfo_msg(<span class="stringliteral">"Polynomial fit results: coeff[%d][%d]=%g"</span>,0,0,pcf[0][0]);
-<a name="l00481"></a>00481   <span class="comment">/*</span>
-<a name="l00482"></a>00482 <span class="comment">  pcf[0][0]+=value;</span>
-<a name="l00483"></a>00483 <span class="comment">  */</span>
-<a name="l00484"></a>00484   sinfo_msg(<span class="stringliteral">"Polynomial fit results: coeff[%d][%d]=%g"</span>,0,0,pcf[0][0]);
-<a name="l00485"></a>00485   check_nomsg(cpl_polynomial_set_coeff(distor_poly,coef_pow,pcf[0][0]));
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487   <span class="comment">/* up to here ok */</span>
-<a name="l00488"></a>00488   <span class="comment">/* To check mem leaks */</span>
-<a name="l00489"></a>00489   sinfo_free_image(&impoly);
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491   <span class="comment">//sinfo_msg("Polynomial fit results: deg=%d",</span>
-<a name="l00492"></a>00492   <span class="comment">//      cpl_polynomial_get_degree(distor_poly));</span>
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495   coef_pow[0]=0;
-<a name="l00496"></a>00496   coef_pow[1]=0;
-<a name="l00497"></a>00497   check_nomsg(pcf[0][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00498"></a>00498   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,0,pcf[0][0]);</span>
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500   coef_pow[0]=1;
-<a name="l00501"></a>00501   coef_pow[1]=0;
-<a name="l00502"></a>00502   check_nomsg(pcf[1][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00503"></a>00503   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,0,pcf[1][0]);</span>
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505   coef_pow[0]=0;
-<a name="l00506"></a>00506   coef_pow[1]=1;
-<a name="l00507"></a>00507   check_nomsg(pcf[0][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00508"></a>00508   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,1,pcf[0][1]);</span>
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510   coef_pow[0]=1;
-<a name="l00511"></a>00511   coef_pow[1]=1;
-<a name="l00512"></a>00512   check_nomsg(pcf[1][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00513"></a>00513   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,1,pcf[1][1]);</span>
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515   coef_pow[0]=2;
-<a name="l00516"></a>00516   coef_pow[1]=0;
-<a name="l00517"></a>00517   check_nomsg(pcf[2][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00518"></a>00518   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",2,0,pcf[2][0]);</span>
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520   coef_pow[0]=0;
-<a name="l00521"></a>00521   coef_pow[1]=2;
-<a name="l00522"></a>00522   check_nomsg(pcf[0][2]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00523"></a>00523   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,2,pcf[0][2]);</span>
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525   coef_pow[0]=2;
-<a name="l00526"></a>00526   coef_pow[1]=1;
-<a name="l00527"></a>00527   check_nomsg(pcf[2][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00528"></a>00528   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",2,1,pcf[2][1]);</span>
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530   coef_pow[0]=1;
-<a name="l00531"></a>00531   coef_pow[1]=2;
-<a name="l00532"></a>00532   check_nomsg(pcf[1][2]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00533"></a>00533   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,2,pcf[1][2]);</span>
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535   coef_pow[0]=3;
-<a name="l00536"></a>00536   coef_pow[1]=0;
-<a name="l00537"></a>00537   check_nomsg(pcf[3][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00538"></a>00538   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",3,0,pcf[3][0]);</span>
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540   coef_pow[0]=0;
-<a name="l00541"></a>00541   coef_pow[1]=3;
-<a name="l00542"></a>00542   check_nomsg(pcf[0][3]=cpl_polynomial_get_coeff(distor_poly,coef_pow));
-<a name="l00543"></a>00543   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,3,pcf[0][3]);</span>
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545   sinfo_msg(<span class="stringliteral">"Save results"</span>);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547   check_nomsg(poly_tbl=cpl_table_new(10));
-<a name="l00548"></a>00548   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"degx"</span>, CPL_TYPE_INT));
-<a name="l00549"></a>00549   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"degy"</span>, CPL_TYPE_INT));
-<a name="l00550"></a>00550   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"coeff"</span>, CPL_TYPE_DOUBLE));
-<a name="l00551"></a>00551   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,0,0));
-<a name="l00552"></a>00552   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,1,1));
-<a name="l00553"></a>00553   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,2,0));
-<a name="l00554"></a>00554   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,3,1));
-<a name="l00555"></a>00555   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,4,2));
-<a name="l00556"></a>00556   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,5,0));
-<a name="l00557"></a>00557   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,6,2));
-<a name="l00558"></a>00558   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,7,1));
-<a name="l00559"></a>00559   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,8,3));
-<a name="l00560"></a>00560   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,9,0));
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,0,0));
-<a name="l00563"></a>00563   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,1,0));
-<a name="l00564"></a>00564   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,2,1));
-<a name="l00565"></a>00565   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,3,1));
-<a name="l00566"></a>00566   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,4,0));
-<a name="l00567"></a>00567   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,5,2));
-<a name="l00568"></a>00568   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,6,1));
-<a name="l00569"></a>00569   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,7,2));
-<a name="l00570"></a>00570   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,8,0));
-<a name="l00571"></a>00571   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,9,3));
-<a name="l00572"></a>00572 
-<a name="l00573"></a>00573   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,0,pcf[0][0]));
-<a name="l00574"></a>00574   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,1,pcf[1][0]));
-<a name="l00575"></a>00575   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,2,pcf[0][1]));
-<a name="l00576"></a>00576   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,3,pcf[1][1]));
-<a name="l00577"></a>00577   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,4,pcf[2][0]));
-<a name="l00578"></a>00578   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,5,pcf[0][2]));
-<a name="l00579"></a>00579   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,6,pcf[2][1]));
-<a name="l00580"></a>00580   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,7,pcf[1][2]));
-<a name="l00581"></a>00581   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,8,pcf[3][0]));
-<a name="l00582"></a>00582   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,9,pcf[0][3]));
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584   <span class="comment">//sinfo_msg("Polynomial distortion coefficients \n");</span>
-<a name="l00585"></a>00585   <span class="comment">//sinfo_msg("c= %g   %g  %g  %g  %g  %g  %g  %g %g %g\n",</span>
-<a name="l00586"></a>00586   <span class="comment">//       pcf[0][0],pcf[1][0],pcf[0][1],pcf[1][1],</span>
-<a name="l00587"></a>00587   <span class="comment">//           pcf[2][0],pcf[0][2],pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</span>
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589   <span class="comment">/* QC LOG */</span>
-<a name="l00590"></a>00590   check_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00591"></a>00591   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,0);
-<a name="l00592"></a>00592   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][0],
-<a name="l00593"></a>00593              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,0);
-<a name="l00596"></a>00596   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][0],
-<a name="l00597"></a>00597              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,1);
-<a name="l00600"></a>00600   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][1],
-<a name="l00601"></a>00601              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,1);
-<a name="l00604"></a>00604   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][1],
-<a name="l00605"></a>00605              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00606"></a>00606 
-<a name="l00607"></a>00607   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,2,0);
-<a name="l00608"></a>00608   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[2][0],
-<a name="l00609"></a>00609              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,2);
-<a name="l00612"></a>00612   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][2],
-<a name="l00613"></a>00613              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,2,1);
-<a name="l00616"></a>00616   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[2][1],
-<a name="l00617"></a>00617              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,2);
-<a name="l00620"></a>00620   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][2],
-<a name="l00621"></a>00621              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,3,0);
-<a name="l00624"></a>00624   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[3][0],
-<a name="l00625"></a>00625              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,3);
-<a name="l00628"></a>00628   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][3],
-<a name="l00629"></a>00629              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,<span class="stringliteral">"QC OFFSET"</span>);
-<a name="l00632"></a>00632   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,value,
-<a name="l00633"></a>00633              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635   xshift=new_compute_shift(x_c,y_c,pcf[0][0],pcf[1][0],pcf[0][1],
-<a name="l00636"></a>00636                                    pcf[1][1],pcf[2][0],pcf[0][2],
-<a name="l00637"></a>00637                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT CC"</span>,xshift,
-<a name="l00640"></a>00640                                    <span class="stringliteral">"X shift in x_c,y_c"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643   xshift=new_compute_shift(x_l,y_l,pcf[0][0],pcf[1][0],pcf[0][1],
-<a name="l00644"></a>00644                                    pcf[1][1],pcf[2][0],pcf[0][2],
-<a name="l00645"></a>00645                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT LL"</span>,xshift,
-<a name="l00648"></a>00648                                    <span class="stringliteral">"X shift in x_l,y_l"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00649"></a>00649 
-<a name="l00650"></a>00650   xshift=new_compute_shift(x_l,y_u,pcf[0][0],pcf[1][0],pcf[0][1],
-<a name="l00651"></a>00651                                    pcf[1][1],pcf[2][0],pcf[0][2],
-<a name="l00652"></a>00652                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT UL"</span>,xshift,
-<a name="l00655"></a>00655                                    <span class="stringliteral">"X shift in x_l,y_u"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657   xshift=new_compute_shift(x_u,y_u,pcf[0][0],pcf[1][0],pcf[0][1],
-<a name="l00658"></a>00658                                    pcf[1][1],pcf[2][0],pcf[0][2],
-<a name="l00659"></a>00659                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);
-<a name="l00660"></a>00660 
-<a name="l00661"></a>00661   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT UR"</span>,xshift,
-<a name="l00662"></a>00662                                    <span class="stringliteral">"X shift in x_u,y_u"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00663"></a>00663 
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665   xshift=new_compute_shift(x_u,y_l,pcf[0][0],pcf[1][0],pcf[0][1],
-<a name="l00666"></a>00666                                    pcf[1][1],pcf[2][0],pcf[0][2],
-<a name="l00667"></a>00667                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT LR"</span>,xshift,
-<a name="l00670"></a>00670                                    <span class="stringliteral">"X shift in x_u,y_l"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673   ck0(sinfo_pro_save_tbl(poly_tbl,set_fibre_ns,sof,cfg->outName,
-<a name="l00674"></a>00674              PRO_DISTORTION,qclog_tbl,plugin_id,config),
-<a name="l00675"></a>00675       <span class="stringliteral">"cannot dump tbl %s"</span>, cfg->outName);
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677   sinfo_free_table(&poly_tbl);
-<a name="l00678"></a>00678   sinfo_free_table(&qclog_tbl);
-<a name="l00679"></a>00679   sinfo_free_polynomial(&distor_poly);
-<a name="l00680"></a>00680   sinfo_free_int(&degx);
-<a name="l00681"></a>00681   sinfo_free_int(&degy);
-<a name="l00682"></a>00682   sinfo_free_double(&coef);
-<a name="l00683"></a>00683   sinfo_free_image(&im);
-<a name="l00684"></a>00684   sinfo_free_frameset(&stk);
-<a name="l00685"></a>00685   sinfo_finddist_free (&cfg);
-<a name="l00686"></a>00686 
-<a name="l00687"></a>00687   <span class="keywordflow">return</span> 0;
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689  cleanup:
-<a name="l00690"></a>00690   sinfo_free_table(&poly_tbl);
-<a name="l00691"></a>00691   sinfo_free_table(&qclog_tbl);
-<a name="l00692"></a>00692   sinfo_free_polynomial(&distor_poly);
-<a name="l00693"></a>00693   sinfo_free_int(&degx);
-<a name="l00694"></a>00694   sinfo_free_int(&degy);
-<a name="l00695"></a>00695   sinfo_free_double(&coef);
-<a name="l00696"></a>00696   sinfo_free_apertures(&arcs);
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700   <span class="comment">/*if(wave != NULL) sinfo_new_destroy_array (& wave );*/</span>
-<a name="l00701"></a>00701   <span class="comment">/*if(intens != NULL) sinfo_new_destroy_array (& intens );*/</span>
-<a name="l00702"></a>00702   <span class="keywordflow">if</span>(first != NULL) sinfo_new_destroy_array(&first);
-<a name="l00703"></a>00703   sinfo_free_table(&tbl_spos);
-<a name="l00704"></a>00704   <span class="keywordflow">if</span>(slit_pos != NULL) sinfo_new_destroy_2Dfloatarray (&slit_pos,32);
-<a name="l00705"></a>00705   <span class="keywordflow">if</span>(distances != NULL) sinfo_new_destroy_array(&distances);
-<a name="l00706"></a>00706   <span class="keywordflow">if</span>(par!=NULL) sinfo_new_destroy_fit_params(&par);
-<a name="l00707"></a>00707   <span class="keywordflow">if</span>(n_found_lines != NULL) sinfo_new_destroy_intarray(&n_found_lines );
-<a name="l00708"></a>00708   <span class="keywordflow">if</span>(row_clean != NULL) sinfo_new_destroy_2Dintarray(&row_clean, lx);
-<a name="l00709"></a>00709   <span class="keywordflow">if</span>(wavelength_clean != NULL) {
-<a name="l00710"></a>00710       sinfo_new_destroy_2Dfloatarray(&wavelength_clean,lx);
-<a name="l00711"></a>00711   }
-<a name="l00712"></a>00712   <span class="keywordflow">if</span>(sum_pointer != NULL) sinfo_new_destroy_intarray(&sum_pointer);
-<a name="l00713"></a>00713   <span class="keywordflow">if</span>(acoefs != NULL) {
-<a name="l00714"></a>00714       sinfo_new_destroy_2Dfloatarray(&acoefs, cfg->nrDispCoefficients );
-<a name="l00715"></a>00715   }
-<a name="l00716"></a>00716   sinfo_free_table(&tbl_line_list);
-<a name="l00717"></a>00717   sinfo_free_image(&mask);
-<a name="l00718"></a>00718   sinfo_free_image(&impoly);
-<a name="l00719"></a>00719   sinfo_free_image(&imonind);
-<a name="l00720"></a>00720   sinfo_free_image(&map);
-<a name="l00721"></a>00721   sinfo_free_image(&im);
-<a name="l00722"></a>00722   sinfo_finddist_free (&cfg);
-<a name="l00723"></a>00723   sinfo_free_frameset(&stk);
-<a name="l00724"></a>00724   <span class="keywordflow">return</span> -1;
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726 }
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00730"></a>00730 new_compute_shift(<span class="keywordtype">double</span> x,
-<a name="l00731"></a>00731               <span class="keywordtype">double</span> y,
-<a name="l00732"></a>00732               <span class="keywordtype">double</span> c00,
-<a name="l00733"></a>00733               <span class="keywordtype">double</span> c10,
-<a name="l00734"></a>00734               <span class="keywordtype">double</span> c01,
-<a name="l00735"></a>00735               <span class="keywordtype">double</span> c11,
-<a name="l00736"></a>00736               <span class="keywordtype">double</span> c20,
-<a name="l00737"></a>00737               <span class="keywordtype">double</span> c02,
-<a name="l00738"></a>00738               <span class="keywordtype">double</span> c21,
-<a name="l00739"></a>00739               <span class="keywordtype">double</span> c12,
-<a name="l00740"></a>00740               <span class="keywordtype">double</span> c30,
-<a name="l00741"></a>00741               <span class="keywordtype">double</span> c03)
-<a name="l00742"></a>00742 {
-<a name="l00743"></a>00743 
-<a name="l00744"></a>00744   <span class="keywordtype">double</span> x_shift=0;
-<a name="l00745"></a>00745   <span class="keywordtype">double</span> shift=0;
-<a name="l00746"></a>00746   <span class="comment">//sinfo_msg("c= %g   %g  %g  %g  %g  %g  %g  %g %g %g\n",</span>
-<a name="l00747"></a>00747   <span class="comment">//       c00,c10,c01,c11,</span>
-<a name="l00748"></a>00748   <span class="comment">//       c20,c02,c21,c12,c30,c03);</span>
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750   shift=c00+c10*x+c01*y+
-<a name="l00751"></a>00751         c11*x*y+c20*x*x+c02*y*y+
-<a name="l00752"></a>00752         c21*x*x*y+c12*x*y*y+c30*x*x*x+c03*y*y*y;
-<a name="l00753"></a>00753   x_shift=x-shift;
-<a name="l00754"></a>00754   <span class="keywordflow">return</span> x_shift;
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_find_distortions.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_find_distortions.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Aug 12, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_new_find_distortions.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_finddist_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_absolute.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_distortion.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define SINFO_ARC_SATURATION                 100000</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_ARC_MAX_WIDTH                  64</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">   Function     :       sinfo_find_distortions()</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">   In           :</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">   Out          :</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> new_compute_shift(<span class="keywordtype">double</span> x,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>           <span class="keywordtype">double</span> y,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>           <span class="keywordtype">double</span> c00,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>           <span class="keywordtype">double</span> c10,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>           <span class="keywordtype">double</span> c01,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>           <span class="keywordtype">double</span> c11,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>           <span class="keywordtype">double</span> c20,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>           <span class="keywordtype">double</span> c02,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>           <span class="keywordtype">double</span> c21,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>           <span class="keywordtype">double</span> c12,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>           <span class="keywordtype">double</span> c30,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>           <span class="keywordtype">double</span> c03);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> sinfo_new_find_distortions(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                            cpl_parameterlist* config,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                            cpl_frameset* sof,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                cpl_frameset* set_fibre_ns)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   finddist_config * cfg=NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   cpl_image * imonind=NULL ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_image * impoly=NULL ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_image *  map=NULL ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   cpl_image *  mask=NULL ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="keywordtype">int</span>*            degx=NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   <span class="keywordtype">int</span>*            degy=NULL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordtype">int</span>* n_found_lines=NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordtype">int</span>* sum_pointer=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">int</span>** row_clean=NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordtype">int</span> x_l=SIZEX/4*1;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   <span class="keywordtype">int</span> x_u=SIZEX/4*3;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">int</span> y_l=SIZEY/4*1;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">int</span> y_u=SIZEY/4*3;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span> x_c=SIZEX/4*2;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span> y_c=SIZEY/4*2;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> pdx=4;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> pdy=4;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> check = 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">int</span> sum=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> fit=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   cpl_size coef_pow[2];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">int</span> arcs_window_size=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">float</span> value=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">float</span> newval=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">float</span> total_dist=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">float</span> shift=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordtype">float</span>* distances=NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">float</span>** wavelength_clean=NULL;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">float</span>** slit_pos=NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordtype">float</span>** acoefs=NULL;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">float</span>* wave=NULL;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">float</span>* intens=NULL;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">float</span>* first =NULL;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">double</span>*         coef=NULL;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">double</span> xshift=0.;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">double</span> arcs_thres_factor=0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordtype">double</span> arcs_min_arclen_factor=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordtype">double</span> pcf[pdx][pdy];</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">char</span> tbl_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordtype">char</span> key_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   cpl_table* poly_tbl=NULL;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   cpl_table* tbl_spos=NULL;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   cpl_table* tbl_line_list=NULL;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   FitParams** par=NULL;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   cpl_frameset* stk=NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   cpl_polynomial* distor_poly=NULL;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   cpl_apertures       *   arcs=NULL ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordtype">int</span> smooth_rad=0;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">    parse the file names and parameters to the finddist_config</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">    data structure cfg</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   check_nomsg(stk=cpl_frameset_new());</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   cknull(cfg = sinfo_parse_cpl_input_finddist(config,sof,&stk),</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>      <span class="stringliteral">"could not parse CPL input!"</span>);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <span class="keywordflow">if</span>(sinfo_is_fits_file (cfg->inFrame) != 1) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="comment">/* load the emission line frame--- */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   check(im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="stringliteral">"could not load arc image"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="comment">/* load the fake on - fake off frame--- */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   check(imonind = cpl_image_load(cfg->nsFrame,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="stringliteral">"could not load on-off fake image"</span>);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   check(impoly  = cpl_image_load(cfg->nsFrame,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="stringliteral">"could not load on-off fake image"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="comment">/* load the fake on - fake off frame--- */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   check(mask = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="stringliteral">"could not load mask image"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   check(cpl_image_multiply (im,mask),</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="stringliteral">"Failing to correct arc ima by bp mask"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   check(cpl_image_multiply (imonind,mask),</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="stringliteral">"Failing to correct on-off fake ima by bp mask"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   check(cpl_image_multiply(impoly,mask),</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="stringliteral">"Failing to correct on-off fake ima by bp mask"</span>);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   sinfo_free_image(&mask);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   check_nomsg(lx = cpl_image_get_size_x(im));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   check_nomsg(ly = cpl_image_get_size_y(im));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="comment">/* TO BE CHENGED THE FOLLOWING INPUT */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="comment">/* open the line list and read the number of lines */</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   check(tbl_line_list = cpl_table_load(cfg->lineList,1,0),</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="stringliteral">"problems loading table %s"</span>,cfg->lineList);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   check_nomsg(n_lines = cpl_table_get_nrow(tbl_line_list));</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   check_nomsg(wave=cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   check_nomsg(intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">       #---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">       #---------------------------FINDLINES---------------------------------</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">       #---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   sinfo_msg(<span class="stringliteral">"Find Lines"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">       do the wavelength calibration, that means:</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">       find the dispersion relation and parameterize its coefficients</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   n_found_lines    = sinfo_new_intarray(lx);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   row_clean        = sinfo_new_2Dintarray(lx, n_lines);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   sum_pointer      = sinfo_new_intarray(1);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="comment">/* find the emission lines in each image column */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   sinfo_new_intarray_set_value(sum_pointer, 0, 0);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   ck0(check = sinfo_new_find_lines(im,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                    wave,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                    intens,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                    n_lines,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                    row_clean,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                    wavelength_clean,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                    cfg->guessBeginWavelength,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                    cfg->guessDispersion1,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                    cfg->guessDispersion2,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                    cfg->mindiff,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                    cfg->halfWidth,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                    n_found_lines,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                    cfg->sigma,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                    sum_pointer ),</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       <span class="stringliteral">"FindLines failed!"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   sinfo_free_table(&tbl_line_list);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">   #-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">   #---------------------------WAVECALIB-------------------------------------</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">   #-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   sinfo_msg(<span class="stringliteral">"Do wave calib"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   sum = sinfo_new_intarray_get_value(sum_pointer,0);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="comment">/* #allocate memory for the fit parameters */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   cknull(par = sinfo_new_fit_params( sum ),</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>      <span class="stringliteral">"sinfo_new_fit_params failed!"</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">      fit each line, make a polynomial fit and fit the resulting fit</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">       coefficients across the columns of the slitlet</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   cknull(map = sinfo_new_wave_cal(im,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                              par,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                       acoefs,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                       cfg->nslitlets,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                       row_clean,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                       wavelength_clean,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                       n_found_lines,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                       cfg->guessDispersion1,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                       cfg->halfWidth,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                       cfg->minAmplitude,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                       cfg->maxResidual,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                       cfg->fwhm,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                       cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                       cfg->nrCoefCoefficients,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                       cfg->sigmaFactor,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                       cfg->pixeldist,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                       cfg->pixel_tolerance),</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>      <span class="stringliteral">"sinfo_waveCal failed!"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   <span class="comment">/* here mem leak */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   sinfo_msg(<span class="stringliteral">"Check line positions"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   shift = sinfo_new_check_line_positions (im, acoefs,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                           cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                           cfg->guessDispersion1,par);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">if</span> (FLAG == shift) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"checkForLinePositions failed!"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   sinfo_free_image(&map);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>  <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   sinfo_new_destroy_2Dintarray (&row_clean, lx);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   sinfo_new_destroy_intarray(&n_found_lines );</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   sinfo_new_destroy_intarray(&sum_pointer );</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">  sinfo_new_destroy_array (& wave );</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">  sinfo_new_destroy_array (& intens );</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">  #----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">  #-------------------------SLITFITS-------------------------------------------</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">  #----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">  #--fit the slitlet sinfo_edge positions if desired--</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   sinfo_msg(<span class="stringliteral">"Find slit pos"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="comment">/*allocate memory for the slitlet position array */</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   slit_pos = sinfo_new_2Dfloatarray(32,2);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   fit = <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz</a>( im, par, slit_pos, cfg->boxLength,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                       cfg->yBox, cfg->diffTol );</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   <span class="keywordflow">if</span> (fit < 0) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"sinfo_fitSlitsBoltz failed"</span> );</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   sinfo_new_destroy_fit_params(&par);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   check_nomsg(tbl_spos=cpl_table_new(32));</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>));</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>));</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordflow">for</span> (i =0; i< 32; i++) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       check_nomsg(cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                                 sinfo_new_array2D_get_value(slit_pos,i,0)));</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       check_nomsg(cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                                 sinfo_new_array2D_get_value(slit_pos,i,1)));</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   <span class="keywordflow">if</span>(pdensity > 2) {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     strcpy(tbl_name,<span class="stringliteral">"out_slitlets_pos_predist.fits"</span>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     ck0(sinfo_pro_save_tbl(tbl_spos,set_fibre_ns,sof,tbl_name,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                PRO_SLITLETS_POS_PREDIST,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   sinfo_free_table(&tbl_spos);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">  # do the north - south - test</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   sinfo_msg(<span class="stringliteral">"Do north south test"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">  sinfo_msg("cfg->nslits =%d\n", cfg->nslits);</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">  sinfo_msg("cfg->nshalfWidth =%d\n", cfg->nshalfWidth);</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment">  sinfo_msg("cfg->nsfwhm=%f\n",cfg->nsfwhm );</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">  sinfo_msg("cfg->minDiff=%f\n", cfg->minDiff);</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">  sinfo_msg("cfg->estimated_dist=%f\n", cfg->estimated_dist);</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">  sinfo_msg("cfg->devtol=%f\n", cfg->devtol);</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">  sinfo_msg("cfg->loPos=%d\n", cfg->loPos);</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">  sinfo_msg("cfg->hiPos=%d\n",cfg->hiPos);</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   cknull(distances = sinfo_north_south_test(imonind,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                       cfg->nslits,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                       cfg->nshalfWidth,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                       cfg->nsfwhm ,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                       cfg->minDiff,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                       cfg->estimated_dist,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                       cfg->devtol,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                       cfg->loPos,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                       cfg->hiPos),</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>      <span class="stringliteral">"north_south_test failed"</span>);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   sinfo_free_image(&imonind);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">  # get firstcol</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   sinfo_msg(<span class="stringliteral">"get first col"</span>);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   first = sinfo_new_floatarray(61);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   total_dist=0;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   n=0;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   <span class="keywordflow">for</span> (i=0; i< 31; i++) {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     total_dist=total_dist+sinfo_new_array_get_value(distances,i);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="keywordflow">for</span> (j=0; j< 2; j++) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       <span class="keywordflow">if</span> (j == 0) {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <span class="keywordflow">if</span> (i != 30) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       newval = sinfo_new_array2D_get_value(slit_pos,i+1,j) - total_dist;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       sinfo_new_array_set_value(first, newval, n);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       n = n+1;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       <span class="keywordflow">if</span> (j == 1) {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         newval = sinfo_new_array2D_get_value(slit_pos,i,j) - total_dist;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         sinfo_new_array_set_value(first, newval, n);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         n = n+1;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>       }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   value = sinfo_new_f_median(first,61);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   sinfo_msg(<span class="stringliteral">"Firstcol =%f"</span>, value);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   sinfo_new_destroy_array(&first);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   sinfo_new_destroy_2Dfloatarray ( &slit_pos, 32 );</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">  # Determine distortions</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   sinfo_msg(<span class="stringliteral">"Determine distortions"</span>);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   degx=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   degy=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   coef=cpl_calloc(8,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                 <span class="stringliteral">"sinfoni.distortion.arcs_thresh_factor"</span>));</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   check_nomsg(arcs_thres_factor=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                 <span class="stringliteral">"sinfoni.distortion.arcs_min_arclen_factor"</span>));</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   check_nomsg(arcs_min_arclen_factor=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                 <span class="stringliteral">"sinfoni.distortion.arcs_window_size"</span>));</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   check_nomsg(arcs_window_size=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                 <span class="stringliteral">"sinfoni.distortion.smooth_rad"</span>));</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   check_nomsg(smooth_rad=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   cknull(distor_poly=sinfo_distortion_estimate_new(impoly,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                            0,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                            0,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                                                  cpl_image_get_size_x(impoly),</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                                  cpl_image_get_size_y(impoly),</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                                                    FALSE,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                                    SINFO_ARC_SATURATION,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                                                    SINFO_ARC_MAX_WIDTH,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                                    arcs_thres_factor,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                                    arcs_min_arclen_factor,</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                                                    arcs_window_size,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                                                    smooth_rad,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                                                    3,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                                                    (<span class="keywordtype">double</span>)value,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                                    &arcs),</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>      <span class="stringliteral">"cannot estimage distortion"</span>) ;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   <span class="comment">/*AMo: additional mem leaks */</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   sinfo_free_apertures(&arcs);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   coef_pow[0]=0;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   coef_pow[1]=0;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   check_nomsg(pcf[0][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   sinfo_msg(<span class="stringliteral">"Polynomial fit results: coeff[%d][%d]=%g"</span>,0,0,pcf[0][0]);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">  pcf[0][0]+=value;</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   sinfo_msg(<span class="stringliteral">"Polynomial fit results: coeff[%d][%d]=%g"</span>,0,0,pcf[0][0]);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   check_nomsg(cpl_polynomial_set_coeff(distor_poly,coef_pow,pcf[0][0]));</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <span class="comment">/* up to here ok */</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   <span class="comment">/* To check mem leaks */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   sinfo_free_image(&impoly);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   <span class="comment">//sinfo_msg("Polynomial fit results: deg=%d",</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   <span class="comment">//      cpl_polynomial_get_degree(distor_poly));</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   coef_pow[0]=0;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   coef_pow[1]=0;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   check_nomsg(pcf[0][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,0,pcf[0][0]);</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   coef_pow[0]=1;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   coef_pow[1]=0;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   check_nomsg(pcf[1][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,0,pcf[1][0]);</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   coef_pow[0]=0;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   coef_pow[1]=1;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   check_nomsg(pcf[0][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,1,pcf[0][1]);</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   coef_pow[0]=1;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   coef_pow[1]=1;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   check_nomsg(pcf[1][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,1,pcf[1][1]);</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>   coef_pow[0]=2;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   coef_pow[1]=0;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   check_nomsg(pcf[2][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",2,0,pcf[2][0]);</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   coef_pow[0]=0;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   coef_pow[1]=2;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   check_nomsg(pcf[0][2]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,2,pcf[0][2]);</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   coef_pow[0]=2;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   coef_pow[1]=1;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   check_nomsg(pcf[2][1]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",2,1,pcf[2][1]);</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   coef_pow[0]=1;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   coef_pow[1]=2;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   check_nomsg(pcf[1][2]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",1,2,pcf[1][2]);</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   coef_pow[0]=3;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   coef_pow[1]=0;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   check_nomsg(pcf[3][0]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",3,0,pcf[3][0]);</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   coef_pow[0]=0;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   coef_pow[1]=3;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   check_nomsg(pcf[0][3]=cpl_polynomial_get_coeff(distor_poly,coef_pow));</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   <span class="comment">//sinfo_msg("Polynomial fit results: coeff[%d][%d]=%g",0,3,pcf[0][3]);</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   sinfo_msg(<span class="stringliteral">"Save results"</span>);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   check_nomsg(poly_tbl=cpl_table_new(10));</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"degx"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"degy"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   check_nomsg(cpl_table_new_column(poly_tbl,<span class="stringliteral">"coeff"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,0,0));</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,1,1));</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,2,0));</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,3,1));</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,4,2));</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,5,0));</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,6,2));</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,7,1));</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,8,3));</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degx"</span>,9,0));</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,0,0));</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,1,0));</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,2,1));</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,3,1));</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,4,0));</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,5,2));</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,6,1));</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,7,2));</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,8,0));</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   check_nomsg(cpl_table_set_int(poly_tbl,<span class="stringliteral">"degy"</span>,9,3));</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,0,pcf[0][0]));</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,1,pcf[1][0]));</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,2,pcf[0][1]));</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,3,pcf[1][1]));</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,4,pcf[2][0]));</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,5,pcf[0][2]));</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,6,pcf[2][1]));</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,7,pcf[1][2]));</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,8,pcf[3][0]));</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   check_nomsg(cpl_table_set_double(poly_tbl,<span class="stringliteral">"coeff"</span>,9,pcf[0][3]));</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="comment">//sinfo_msg("Polynomial distortion coefficients \n");</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="comment">//sinfo_msg("c= %g   %g  %g  %g  %g  %g  %g  %g %g %g\n",</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="comment">//       pcf[0][0],pcf[1][0],pcf[0][1],pcf[1][1],</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="comment">//           pcf[2][0],pcf[0][2],pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="comment">/* QC LOG */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   check_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,0);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][0],</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,0);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][0],</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,1);</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][1],</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,1);</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][1],</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,2,0);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[2][0],</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,2);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][2],</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,2,1);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[2][1],</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,1,2);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[1][2],</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,3,0);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[3][0],</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%d"</span>,<span class="stringliteral">"QC COEFF"</span>,0,3);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,pcf[0][3],</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>,<span class="stringliteral">"QC OFFSET"</span>);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,value,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>              <span class="stringliteral">"Polynomial distortion coefficient"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   xshift=new_compute_shift(x_c,y_c,pcf[0][0],pcf[1][0],pcf[0][1],</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                                    pcf[1][1],pcf[2][0],pcf[0][2],</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT CC"</span>,xshift,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                                    <span class="stringliteral">"X shift in x_c,y_c"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   xshift=new_compute_shift(x_l,y_l,pcf[0][0],pcf[1][0],pcf[0][1],</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                                    pcf[1][1],pcf[2][0],pcf[0][2],</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT LL"</span>,xshift,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                                    <span class="stringliteral">"X shift in x_l,y_l"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   xshift=new_compute_shift(x_l,y_u,pcf[0][0],pcf[1][0],pcf[0][1],</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>                                    pcf[1][1],pcf[2][0],pcf[0][2],</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT UL"</span>,xshift,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                                    <span class="stringliteral">"X shift in x_l,y_u"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>   xshift=new_compute_shift(x_u,y_u,pcf[0][0],pcf[1][0],pcf[0][1],</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                                    pcf[1][1],pcf[2][0],pcf[0][2],</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT UR"</span>,xshift,</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                                    <span class="stringliteral">"X shift in x_u,y_u"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   xshift=new_compute_shift(x_u,y_l,pcf[0][0],pcf[1][0],pcf[0][1],</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                                    pcf[1][1],pcf[2][0],pcf[0][2],</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                                    pcf[2][1],pcf[1][2],pcf[3][0],pcf[0][3]);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC XSHIFT LR"</span>,xshift,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                                    <span class="stringliteral">"X shift in x_u,y_l"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   ck0(sinfo_pro_save_tbl(poly_tbl,set_fibre_ns,sof,cfg->outName,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>              PRO_DISTORTION,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>       <span class="stringliteral">"cannot dump tbl %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>   sinfo_free_table(&poly_tbl);</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   sinfo_free_polynomial(&distor_poly);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   sinfo_free_int(&degx);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   sinfo_free_int(&degy);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   sinfo_free_double(&coef);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   sinfo_free_image(&im);</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   sinfo_finddist_free (&cfg);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>  cleanup:</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   sinfo_free_table(&poly_tbl);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   sinfo_free_polynomial(&distor_poly);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   sinfo_free_int(&degx);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   sinfo_free_int(&degy);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   sinfo_free_double(&coef);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   sinfo_free_apertures(&arcs);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   <span class="comment">/*if(wave != NULL) sinfo_new_destroy_array (& wave );*/</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   <span class="comment">/*if(intens != NULL) sinfo_new_destroy_array (& intens );*/</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   <span class="keywordflow">if</span>(first != NULL) sinfo_new_destroy_array(&first);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   sinfo_free_table(&tbl_spos);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   <span class="keywordflow">if</span>(slit_pos != NULL) sinfo_new_destroy_2Dfloatarray (&slit_pos,32);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="keywordflow">if</span>(distances != NULL) sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordflow">if</span>(par!=NULL) sinfo_new_destroy_fit_params(&par);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="keywordflow">if</span>(n_found_lines != NULL) sinfo_new_destroy_intarray(&n_found_lines );</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordflow">if</span>(row_clean != NULL) sinfo_new_destroy_2Dintarray(&row_clean, lx);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordflow">if</span>(wavelength_clean != NULL) {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>       sinfo_new_destroy_2Dfloatarray(&wavelength_clean,lx);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keywordflow">if</span>(sum_pointer != NULL) sinfo_new_destroy_intarray(&sum_pointer);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">if</span>(acoefs != NULL) {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>       sinfo_new_destroy_2Dfloatarray(&acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   sinfo_free_table(&tbl_line_list);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   sinfo_free_image(&mask);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   sinfo_free_image(&impoly);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   sinfo_free_image(&imonind);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   sinfo_free_image(&map);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   sinfo_free_image(&im);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   sinfo_finddist_free (&cfg);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> }</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> new_compute_shift(<span class="keywordtype">double</span> x,</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>               <span class="keywordtype">double</span> y,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>               <span class="keywordtype">double</span> c00,</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>               <span class="keywordtype">double</span> c10,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>               <span class="keywordtype">double</span> c01,</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>               <span class="keywordtype">double</span> c11,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>               <span class="keywordtype">double</span> c20,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>               <span class="keywordtype">double</span> c02,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>               <span class="keywordtype">double</span> c21,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>               <span class="keywordtype">double</span> c12,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>               <span class="keywordtype">double</span> c30,</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>               <span class="keywordtype">double</span> c03)</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> {</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   <span class="keywordtype">double</span> x_shift=0;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <span class="keywordtype">double</span> shift=0;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   <span class="comment">//sinfo_msg("c= %g   %g  %g  %g  %g  %g  %g  %g %g %g\n",</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <span class="comment">//       c00,c10,c01,c11,</span></div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   <span class="comment">//       c20,c02,c21,c12,c30,c03);</span></div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   shift=c00+c10*x+c01*y+</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         c11*x*y+c20*x*x+c02*y*y+</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         c21*x*x*y+c12*x*y*y+c30*x*x*x+c03*y*y*y;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   x_shift=x-shift;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   <span class="keywordflow">return</span> x_shift;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__find__distortions_8h_source.html b/html/sinfo__new__find__distortions_8h_source.html
index cefeb4b..5d33c21 100644
--- a/html/sinfo__new__find__distortions_8h_source.html
+++ b/html/sinfo__new__find__distortions_8h_source.html
@@ -2,80 +2,111 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_find_distortions.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_find_distortions.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_FIND_DISTORTIONS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_FIND_DISTORTIONS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_find_distortions.h,v 1.9 2007/09/14 14:40:04 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  12/08/04  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_find_distortions.h</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">   Function     :       sinfo_find_distortions()</span>
-<a name="l00051"></a>00051 <span class="comment">   In           :       </span>
-<a name="l00052"></a>00052 <span class="comment">   Out          :        </span>
-<a name="l00053"></a>00053 <span class="comment">   Job          :</span>
-<a name="l00054"></a>00054 <span class="comment"></span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="keywordtype">int</span> 
-<a name="l00057"></a>00057 sinfo_new_find_distortions (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00058"></a>00058                             cpl_parameterlist* config, 
-<a name="l00059"></a>00059                             cpl_frameset* sof,
-<a name="l00060"></a>00060                 cpl_frameset* set_fibre_ns) ;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="preprocessor">#endif </span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_find_distortions.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_FIND_DISTORTIONS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_FIND_DISTORTIONS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_find_distortions.h,v 1.9 2007/09/14 14:40:04 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  12/08/04  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_find_distortions.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   Function     :       sinfo_find_distortions()</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   In           :       </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   Out          :        </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> sinfo_new_find_distortions (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                             cpl_parameterlist* config, </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                             cpl_frameset* sof,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                 cpl_frameset* set_fibre_ns) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__lamp__flats_8c_source.html b/html/sinfo__new__lamp__flats_8c_source.html
index 38be0af..bae7527 100644
--- a/html/sinfo__new__lamp__flats_8c_source.html
+++ b/html/sinfo__new__lamp__flats_8c_source.html
@@ -2,1016 +2,1047 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_lamp_flats.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_lamp_flats.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"> </span>
-<a name="l00021"></a>00021 <span class="comment">     File name    :       sinfo_new_lamp_flats.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 29, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  : </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> * this step handles stacks of lamp flat fields, </span>
-<a name="l00027"></a>00027 <span class="comment"> *  o it takes a clean mean,</span>
-<a name="l00028"></a>00028 <span class="comment"> *  o subtracts the off- from the on-frames, </span>
-<a name="l00029"></a>00029 <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span>
-<a name="l00030"></a>00030 <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span>
-<a name="l00031"></a>00031 <span class="comment"> *  o treats them the same way. </span>
-<a name="l00032"></a>00032 <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment"></span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#endif</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span>
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                                Includes</span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_new_lamp_flats.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_flat_ini_by_cpl.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00055"></a>00055 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                                Defines</span>
-<a name="l00057"></a>00057 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00060"></a>00060 new_qc_get_cnt(cpl_frameset* on_set, cpl_frameset* of_set, flat_config* cfg);
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00062"></a>00062 new_lamp_flats_det_ncounts(cpl_frameset* raw, flat_config* config);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keyword">struct </span>{
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066   <span class="keywordtype">double</span> avg_on; 
-<a name="l00067"></a>00067   <span class="keywordtype">double</span> std_on;
-<a name="l00068"></a>00068   <span class="keywordtype">double</span> avg_of; 
-<a name="l00069"></a>00069   <span class="keywordtype">double</span> std_of;
-<a name="l00070"></a>00070   <span class="keywordtype">double</span> avg_di; 
-<a name="l00071"></a>00071   <span class="keywordtype">double</span> std_di;
-<a name="l00072"></a>00072   <span class="keywordtype">double</span> nsat_on;
-<a name="l00073"></a>00073   <span class="keywordtype">double</span> noise_on;
-<a name="l00074"></a>00074   <span class="keywordtype">double</span> noise_of;
-<a name="l00075"></a>00075   <span class="keywordtype">double</span> flux_on;
-<a name="l00076"></a>00076   <span class="keywordtype">double</span>    nsat;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 } qc_lampflat;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00081"></a>00081 <span class="comment">                             Function Definitions</span>
-<a name="l00082"></a>00082 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00091"></a>00091 <span class="comment">   @name  sinfo_new_lamp_flats()</span>
-<a name="l00092"></a>00092 <span class="comment">   @param  plugin_id recipe id</span>
-<a name="l00093"></a>00093 <span class="comment">   @param  config input parameterlist</span>
-<a name="l00094"></a>00094 <span class="comment">   @param  sof    input set of frames</span>
-<a name="l00095"></a>00095 <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00096"></a>00096 <span class="comment">   @doc </span>
-<a name="l00097"></a>00097 <span class="comment"></span>
-<a name="l00098"></a>00098 <span class="comment"> * this step handles stacks of lamp flat fields, </span>
-<a name="l00099"></a>00099 <span class="comment"> *  o it takes a clean mean,</span>
-<a name="l00100"></a>00100 <span class="comment"> *  o subtracts the off- from the on-frames, </span>
-<a name="l00101"></a>00101 <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span>
-<a name="l00102"></a>00102 <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span>
-<a name="l00103"></a>00103 <span class="comment"> *  o treats them the same way. </span>
-<a name="l00104"></a>00104 <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span>
-<a name="l00105"></a>00105 <span class="comment"></span>
-<a name="l00106"></a>00106 <span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keywordtype">int</span> 
-<a name="l00113"></a>00113 sinfo_new_lamp_flats (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00114"></a>00114                       cpl_parameterlist* config, 
-<a name="l00115"></a>00115                       cpl_frameset* sof,
-<a name="l00116"></a>00116                       cpl_frameset* ref_set)
-<a name="l00117"></a>00117 {
-<a name="l00118"></a>00118   flat_config * cfg =NULL;
-<a name="l00119"></a>00119   cpl_imagelist* list_object=NULL;
-<a name="l00120"></a>00120   cpl_imagelist* list_dither_object=NULL ;
-<a name="l00121"></a>00121   cpl_imagelist* list_sky=NULL ;
-<a name="l00122"></a>00122   cpl_imagelist* list_dither_sky=NULL;
-<a name="l00123"></a>00123   cpl_image ** im=NULL ;
-<a name="l00124"></a>00124   cpl_image * norm_dith =NULL;
-<a name="l00125"></a>00125   cpl_image * im_obj =NULL;
-<a name="l00126"></a>00126   cpl_image * int_im =NULL;
-<a name="l00127"></a>00127   cpl_image * int_im_dith =NULL;
-<a name="l00128"></a>00128   cpl_image * im_sky =NULL;
-<a name="l00129"></a>00129   cpl_image * im_dither =NULL;
-<a name="l00130"></a>00130   cpl_image * im_obj_sub =NULL;
-<a name="l00131"></a>00131   cpl_image * im_dither_sub =NULL;
-<a name="l00132"></a>00132   cpl_image * im_dither_sky =NULL;
-<a name="l00133"></a>00133   cpl_image ** imMed=NULL ;
-<a name="l00134"></a>00134   cpl_image * colImage =NULL;
-<a name="l00135"></a>00135   cpl_image * mask_im =NULL;
-<a name="l00136"></a>00136   cpl_image * norm =NULL;
-<a name="l00137"></a>00137   cpl_image * compImage =NULL;
-<a name="l00138"></a>00138   cpl_image * maskImage =NULL;
-<a name="l00139"></a>00139   cpl_image * threshIm =NULL;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   <span class="keywordtype">char</span> name[MAX_NAME_SIZE];
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   <span class="keywordtype">int</span> typ;
-<a name="l00144"></a>00144   Stats * stats =NULL;
-<a name="l00145"></a>00145   <span class="keywordtype">int</span> i = 0;
-<a name="l00146"></a>00146   <span class="keywordtype">int</span>* n=NULL;
-<a name="l00147"></a>00147   <span class="keywordtype">int</span> nob =0;
-<a name="l00148"></a>00148   <span class="keywordtype">int</span> nsky = 0; 
-<a name="l00149"></a>00149   <span class="keywordtype">int</span> nobjdith = 0;
-<a name="l00150"></a>00150   <span class="keywordtype">int</span> nskydith = 0; 
-<a name="l00151"></a>00151   <span class="keywordtype">int</span> n_badpixels =0;
-<a name="l00152"></a>00152   <span class="keywordtype">int</span> pos =0;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   <span class="keywordtype">float</span>** slit_edges=NULL;
-<a name="l00155"></a>00155   <span class="keywordtype">float</span> local_clean_mean =0.;
-<a name="l00156"></a>00156   <span class="keywordtype">float</span> clean_stdev =0.;
-<a name="l00157"></a>00157   <span class="keywordtype">float</span> mean_factor =0.;
-<a name="l00158"></a>00158   <span class="keywordtype">float</span> val_x=0;
-<a name="l00159"></a>00159   <span class="keywordtype">float</span> val_y=0;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161   <span class="keywordtype">char</span> outNameDither[MAX_NAME_SIZE];
-<a name="l00162"></a>00162   <span class="keywordtype">char</span> name_list[MAX_NAME_SIZE];
-<a name="l00163"></a>00163   <span class="keywordtype">char</span> tbl_slitpos_name[MAX_NAME_SIZE];
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   cpl_table* tbl_slitpos=NULL;
-<a name="l00166"></a>00166   <span class="keywordtype">int</span>* status=NULL;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168   <span class="keywordtype">int</span> n_im_med=0;
-<a name="l00169"></a>00169   cpl_frameset* raw=NULL;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171   cpl_table* qclog_tbl=NULL;
-<a name="l00172"></a>00172   <span class="keywordtype">int</span> naxis1=0;
-<a name="l00173"></a>00173   <span class="keywordtype">int</span> naxis2=0;
-<a name="l00174"></a>00174   <span class="keywordtype">double</span> fpn_stdev1=0;
-<a name="l00175"></a>00175   <span class="keywordtype">double</span> fpn_stdev2=0;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="keywordtype">int</span> no=0;
-<a name="l00178"></a>00178   <span class="keywordtype">float</span> lo_cut=0;
-<a name="l00179"></a>00179   <span class="keywordtype">float</span> hi_cut=0;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   <span class="comment">/*</span>
-<a name="l00182"></a>00182 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00183"></a>00183 <span class="comment">       1) parse the file names and parameters to the tilt_config data </span>
-<a name="l00184"></a>00184 <span class="comment">          structure cfg </span>
-<a name="l00185"></a>00185 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00186"></a>00186 <span class="comment">  */</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188   cknull_nomsg(raw=cpl_frameset_new());
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190   cknull(cfg = sinfo_parse_cpl_input_flat(config,sof,&raw),
-<a name="l00191"></a>00191      <span class="stringliteral">"could not parse cpl input!"</span>);
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   <span class="keywordflow">if</span> (cfg->interpolInd == 1) {
-<a name="l00194"></a>00194     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {
-<a name="l00195"></a>00195       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->mask);
-<a name="l00196"></a>00196       <span class="keywordflow">goto</span> cleanup;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposList) != 1) {
-<a name="l00199"></a>00199       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->slitposList);
-<a name="l00200"></a>00200       <span class="keywordflow">goto</span> cleanup;
-<a name="l00201"></a>00201     }
-<a name="l00202"></a>00202   }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204   <span class="comment">/*</span>
-<a name="l00205"></a>00205 <span class="comment">    #---------------------------------------------------------</span>
-<a name="l00206"></a>00206 <span class="comment">    # Take a clean mean of several images</span>
-<a name="l00207"></a>00207 <span class="comment">    # input is 1 or more similar images</span>
-<a name="l00208"></a>00208 <span class="comment">    #---------------------------------------------------------</span>
-<a name="l00209"></a>00209 <span class="comment">  */</span>
-<a name="l00210"></a>00210   sinfo_msg(<span class="stringliteral">"Takes clean mean of several images"</span>);
-<a name="l00211"></a>00211   <span class="comment">/* #allocate memory for lists of object, sky and dithered frames--*/</span>
-<a name="l00212"></a>00212   cknull(list_object = cpl_imagelist_new (),<span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00215"></a>00215     cknull(list_dither_object=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00216"></a>00216   }
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00219"></a>00219     cknull(list_sky=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00220"></a>00220   }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->nditheroff > 0) {
-<a name="l00223"></a>00223     cknull(list_dither_sky=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00224"></a>00224   }
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226   <span class="keywordflow">if</span> (cfg->contains_dither == 0 && cfg->nditheroff > 0){
-<a name="l00227"></a>00227     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"please use non-dithered off-frames, remove the 2!"</span>);
-<a name="l00228"></a>00228     <span class="keywordflow">goto</span> cleanup;
-<a name="l00229"></a>00229   }
-<a name="l00230"></a>00230  
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   <span class="comment">/* problem with im as image holder: cleanup then does not work */</span>
-<a name="l00233"></a>00233   im = (cpl_image**) cpl_calloc (cfg -> nframes, <span class="keyword">sizeof</span>(cpl_image*)); 
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {
-<a name="l00236"></a>00236     strcpy(name,cfg->framelist[i]);
-<a name="l00237"></a>00237     <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {
-<a name="l00238"></a>00238       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"PP Input file %s %d is not FITS"</span>,name,i);
-<a name="l00239"></a>00239       <span class="keywordflow">goto</span> cleanup;
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241     im[i]=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243   }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {
-<a name="l00246"></a>00246     typ = cfg->frametype[i];
-<a name="l00247"></a>00247     pos = cfg->frameposition[i];
-<a name="l00248"></a>00248     cknull(im[i],<span class="stringliteral">"could not load image %d"</span>,i);
-<a name="l00249"></a>00249     <span class="keywordflow">if</span> (pos == 2) {
-<a name="l00250"></a>00250       <span class="keywordflow">if</span> (typ == 1) {
-<a name="l00251"></a>00251         cpl_imagelist_set( list_object, cpl_image_duplicate(im[i]), nob );  
-<a name="l00252"></a>00252         nob = nob + 1;
-<a name="l00253"></a>00253       } <span class="keywordflow">else</span> {
-<a name="l00254"></a>00254         cpl_imagelist_set( list_sky, cpl_image_duplicate(im[i]), nsky );
-<a name="l00255"></a>00255         nsky = nsky + 1 ;
-<a name="l00256"></a>00256       }
-<a name="l00257"></a>00257     } <span class="keywordflow">else</span> {
-<a name="l00258"></a>00258       <span class="keywordflow">if</span> (typ == 1) {
-<a name="l00259"></a>00259         cpl_imagelist_set(list_dither_object, 
-<a name="l00260"></a>00260                           cpl_image_duplicate(im[i]), nobjdith );  
-<a name="l00261"></a>00261         nobjdith = nobjdith + 1;
-<a name="l00262"></a>00262       } <span class="keywordflow">else</span> {
-<a name="l00263"></a>00263         cpl_imagelist_set( list_dither_sky, 
-<a name="l00264"></a>00264                           cpl_image_duplicate(im[i]), nskydith );
-<a name="l00265"></a>00265         nskydith = nskydith + 1 ;
-<a name="l00266"></a>00266       }
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268   }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   <span class="keywordflow">if</span> (nob != cfg->nobj || cfg->noff != nsky || 
-<a name="l00272"></a>00272       nobjdith != cfg->nditherobj || nskydith != cfg->nditheroff) {
-<a name="l00273"></a>00273       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of "</span>
-<a name="l00274"></a>00274                       <span class="stringliteral">"the different types of frames"</span>);
-<a name="l00275"></a>00275       <span class="keywordflow">goto</span> cleanup;
-<a name="l00276"></a>00276   }
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278   <span class="comment">/* # create and fill cubes with the different image lists- */</span>
-<a name="l00279"></a>00279   sinfo_msg(<span class="stringliteral">"Creates and fills cubes with the different image lists"</span>);
-<a name="l00280"></a>00280   cknull(list_object,<span class="stringliteral">"could not create data cube!"</span>);
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00283"></a>00283     cknull(list_dither_object,<span class="stringliteral">"could not create data cube!"</span>);
-<a name="l00284"></a>00284   }
-<a name="l00285"></a>00285   <span class="keywordflow">if</span> (cfg->contains_sky == 1 && nsky > 0) {
-<a name="l00286"></a>00286     cknull(list_sky,<span class="stringliteral">"could not create data cube!"</span>);
-<a name="l00287"></a>00287   }
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {
-<a name="l00290"></a>00290     cknull(list_dither_sky,<span class="stringliteral">"could not create data cube!"</span>);
-<a name="l00291"></a>00291   }
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293  
-<a name="l00294"></a>00294   <span class="comment">/*-take the average of the different cubes -*/</span>
-<a name="l00295"></a>00295   sinfo_msg(<span class="stringliteral">"Takes the average of the different cubes"</span>);
-<a name="l00296"></a>00296   <span class="keywordflow">if</span> (cfg->loReject*cfg->nobj < 1. && cfg->hiReject *cfg->nobj < 1.) {
-<a name="l00297"></a>00297     cknull(im_obj = sinfo_new_average_cube_to_image(list_object ),
-<a name="l00298"></a>00298           <span class="stringliteral">"sinfo_averageCubeToImage failed"</span> );
-<a name="l00299"></a>00299   } <span class="keywordflow">else</span> {
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     no=cpl_imagelist_get_size(list_object);
-<a name="l00302"></a>00302     lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00303"></a>00303     hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00304"></a>00304     cknull(im_obj=cpl_imagelist_collapse_minmax_create(list_object,
-<a name="l00305"></a>00305                                                       lo_cut,
-<a name="l00306"></a>00306                                                       hi_cut),
-<a name="l00307"></a>00307                  <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00308"></a>00308   }
-<a name="l00309"></a>00309    sinfo_free_imagelist(&list_object);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00312"></a>00312     <span class="keywordflow">if</span> (cfg->loReject * nsky < 1. && cfg->hiReject * nsky < 1.) {
-<a name="l00313"></a>00313       cknull(im_sky = sinfo_new_average_cube_to_image(list_sky ),
-<a name="l00314"></a>00314       <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );
-<a name="l00315"></a>00315     } <span class="keywordflow">else</span> {
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317     no=cpl_imagelist_get_size(list_sky);
-<a name="l00318"></a>00318     lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00319"></a>00319     hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00320"></a>00320     cknull(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),
-<a name="l00321"></a>00321            <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00322"></a>00322     }
-<a name="l00323"></a>00323     sinfo_free_imagelist(&list_sky);
-<a name="l00324"></a>00324   }
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00327"></a>00327     <span class="keywordflow">if</span> (cfg->loReject*nobjdith < 1. && cfg->hiReject * nobjdith < 1.) {
-<a name="l00328"></a>00328       cknull(im_dither = sinfo_new_average_cube_to_image(list_dither_object ),
-<a name="l00329"></a>00329              <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );
-<a name="l00330"></a>00330    } <span class="keywordflow">else</span> {
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333      no=cpl_imagelist_get_size(list_dither_object);
-<a name="l00334"></a>00334      lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00335"></a>00335      hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00336"></a>00336      cknull(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,
-<a name="l00337"></a>00337                                                            lo_cut,hi_cut),
-<a name="l00338"></a>00338                                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00339"></a>00339    }
-<a name="l00340"></a>00340    sinfo_free_imagelist(&list_dither_object);
-<a name="l00341"></a>00341   }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0 ) {
-<a name="l00344"></a>00344     <span class="keywordflow">if</span> (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {
-<a name="l00345"></a>00345       cknull(im_dither_sky = sinfo_new_average_cube_to_image(list_dither_sky ),
-<a name="l00346"></a>00346             <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );
-<a name="l00347"></a>00347     } <span class="keywordflow">else</span> {
-<a name="l00348"></a>00348       no=cpl_imagelist_get_size(list_dither_sky);
-<a name="l00349"></a>00349       lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00350"></a>00350       hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00351"></a>00351       cknull(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,
-<a name="l00352"></a>00352                                                                 lo_cut,hi_cut),
-<a name="l00353"></a>00353                                           <span class="stringliteral">"new_average_with_rejection failed"</span> );
-<a name="l00354"></a>00354     }
-<a name="l00355"></a>00355     sinfo_free_imagelist(&list_dither_sky);
-<a name="l00356"></a>00356   }   
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358   <span class="comment">/*</span>
-<a name="l00359"></a>00359 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00360"></a>00360 <span class="comment">  # Subtract the resulting off-frame (sky) from the on-frame </span>
-<a name="l00361"></a>00361 <span class="comment">  #-------------------------------------------------------</span>
-<a name="l00362"></a>00362 <span class="comment">  #finally, subtract off from on frames and store the result in the </span>
-<a name="l00363"></a>00363 <span class="comment">  # object cube----------------</span>
-<a name="l00364"></a>00364 <span class="comment">  */</span>
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366   sinfo_msg(<span class="stringliteral">"Subtracts the resulting off-frame (sky) from the on-frame"</span>);
-<a name="l00367"></a>00367   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00368"></a>00368      cknull(im_obj_sub = cpl_image_subtract_create(im_obj, im_sky),
-<a name="l00369"></a>00369             <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00370"></a>00370      sinfo_free_image(&im_obj);
-<a name="l00371"></a>00371      <span class="keywordflow">if</span> (((cfg->contains_dither == 1) && (nskydith > 0)) || 
-<a name="l00372"></a>00372          (cfg->contains_dither == 0)) {
-<a name="l00373"></a>00373        sinfo_free_image(&im_sky);
-<a name="l00374"></a>00374      }
-<a name="l00375"></a>00375      im_obj = im_obj_sub;
-<a name="l00376"></a>00376   }
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {
-<a name="l00379"></a>00379      cknull(im_dither_sub=cpl_image_subtract_create(im_dither, im_dither_sky),
-<a name="l00380"></a>00380             <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00381"></a>00381      sinfo_free_image(&im_dither);
-<a name="l00382"></a>00382      sinfo_free_image(&im_dither_sky);
-<a name="l00383"></a>00383      im_dither = im_dither_sub;
-<a name="l00384"></a>00384    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->contains_dither == 1 && 
-<a name="l00385"></a>00385                           nskydith == 0 && 
-<a name="l00386"></a>00386               cfg->contains_sky == 1) {
-<a name="l00387"></a>00387      cknull(im_dither_sub = cpl_image_subtract_create(im_dither, im_sky),
-<a name="l00388"></a>00388         <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00389"></a>00389      sinfo_free_image(&im_dither);
-<a name="l00390"></a>00390      sinfo_free_image(&im_sky);
-<a name="l00391"></a>00391      im_dither = im_dither_sub;
-<a name="l00392"></a>00392    }
-<a name="l00393"></a>00393    <span class="comment">/*</span>
-<a name="l00394"></a>00394 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00395"></a>00395 <span class="comment">   # Generating a static bad pixel mask:</span>
-<a name="l00396"></a>00396 <span class="comment">   # remove the intensity tilt from every column</span>
-<a name="l00397"></a>00397 <span class="comment">   # and compute the standard deviation on a rectangular zone</span>
-<a name="l00398"></a>00398 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00399"></a>00399 <span class="comment">   */</span>
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401    sinfo_msg(<span class="stringliteral">"Generating a static bad pixel mask"</span>);
-<a name="l00402"></a>00402    n_im_med = cfg->iterations+1;
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404    imMed=(cpl_image**) cpl_calloc(n_im_med, <span class="keyword">sizeof</span>(cpl_image*));
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406    <span class="keywordflow">if</span> (cfg->badInd == 1) {
-<a name="l00407"></a>00407      sinfo_msg(<span class="stringliteral">"removes the intensity tilt from every column and"</span>);
-<a name="l00408"></a>00408      sinfo_msg(<span class="stringliteral">"computes the standard deviation on a rectangular zone"</span>);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410      <span class="comment">/* this call originates 36 bytes leaks */</span>
-<a name="l00411"></a>00411      cknull(colImage  = sinfo_new_col_tilt( im_obj, cfg->sigmaFactor ),
-<a name="l00412"></a>00412         <span class="stringliteral">"sinfo_colTilt failed"</span> );
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414      cknull(stats = sinfo_new_image_stats_on_rectangle(colImage, 
-<a name="l00415"></a>00415                                    cfg->badLoReject, 
-<a name="l00416"></a>00416                                    cfg->badHiReject, 
-<a name="l00417"></a>00417                                    cfg->llx, 
-<a name="l00418"></a>00418                                    cfg->lly, 
-<a name="l00419"></a>00419                                    cfg->urx, 
-<a name="l00420"></a>00420                                cfg->ury),
-<a name="l00421"></a>00421                                    <span class="stringliteral">"sinfo_get_image_stats_on_vig failed\n"</span>);
-<a name="l00422"></a>00422      
-<a name="l00423"></a>00423      local_clean_mean = stats->cleanmean;
-<a name="l00424"></a>00424      clean_stdev = stats->cleanstdev;
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427      <span class="comment">/* indicate pixels with great deviations from the clean mean as bad */</span>
-<a name="l00428"></a>00428      <span class="keywordflow">if</span> (cfg->threshInd == 1) {
-<a name="l00429"></a>00429          cknull(threshIm = sinfo_new_thresh_image(colImage, 
-<a name="l00430"></a>00430             local_clean_mean-mean_factor*clean_stdev,
-<a name="l00431"></a>00431             local_clean_mean+mean_factor*clean_stdev),
-<a name="l00432"></a>00432         <span class="stringliteral">" sinfo_threshImage failed\n"</span> );
-<a name="l00433"></a>00433      }
-<a name="l00434"></a>00434      <span class="keywordflow">if</span> (cfg->threshInd == 0) {
-<a name="l00435"></a>00435         threshIm = colImage;
-<a name="l00436"></a>00436      }
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438      <span class="comment">/*</span>
-<a name="l00439"></a>00439 <span class="comment">     filter iteratively the images by a sinfo_median filter of the nearest </span>
-<a name="l00440"></a>00440 <span class="comment">     neighbors under the condition of a deviation greater than a factor </span>
-<a name="l00441"></a>00441 <span class="comment">     times the standard deviation</span>
-<a name="l00442"></a>00442 <span class="comment">     */</span>
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444      cknull(imMed[0]= sinfo_new_median_image(threshIm,-cfg->factor*clean_stdev),
-<a name="l00445"></a>00445                                             <span class="stringliteral">" sinfo_medianImage failed"</span> );
-<a name="l00446"></a>00446      
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448        <span class="comment">/* AMO check again if here the loop start and ending point are proper */</span>
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450      <span class="keywordflow">for</span> (i=1; i< cfg->iterations+1; i++) {
-<a name="l00451"></a>00451        cknull(imMed[i]=sinfo_new_median_image(imMed[i-1], 
-<a name="l00452"></a>00452                           -cfg->factor*clean_stdev),
-<a name="l00453"></a>00453                                           <span class="stringliteral">"sinfo_medianImage failed"</span> );
-<a name="l00454"></a>00454      }
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456      <span class="comment">/* compare the filtered image with the input image */</span>
-<a name="l00457"></a>00457      cknull(compImage=sinfo_new_compare_images(threshIm, 
-<a name="l00458"></a>00458                                                imMed[cfg->iterations], 
-<a name="l00459"></a>00459                                                im_obj),
-<a name="l00460"></a>00460         <span class="stringliteral">"sinfo_compareImages failed"</span> );
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462      <span class="comment">/*---generate the bad pixel mask */</span>
-<a name="l00463"></a>00463      n = (<span class="keywordtype">int</span>*)cpl_calloc(1,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00464"></a>00464      cknull(maskImage = sinfo_new_promote_image_to_mask( compImage, n ),
-<a name="l00465"></a>00465             <span class="stringliteral">"error in sinfo_promoteImageToMask"</span> );
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468      n_badpixels = n[0];
-<a name="l00469"></a>00469      sinfo_msg(<span class="stringliteral">"No of bad pixels: %d"</span>, n_badpixels);
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471      cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00472"></a>00472      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_badpixels,
-<a name="l00473"></a>00473                                    <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475      ck0(sinfo_pro_save_ima(maskImage,ref_set,sof,cfg->maskname,
-<a name="l00476"></a>00476                   PRO_BP_MAP,qclog_tbl,plugin_id,config),
-<a name="l00477"></a>00477                <span class="stringliteral">"cannot save ima %s"</span>, cfg->maskname);
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480      <span class="comment">/* free memory */</span>
-<a name="l00481"></a>00481      sinfo_free_table(&qclog_tbl);
-<a name="l00482"></a>00482  
-<a name="l00483"></a>00483      sinfo_new_del_Stats(stats);
-<a name="l00484"></a>00484      sinfo_free_int(&n);
-<a name="l00485"></a>00485      sinfo_free_image(&threshIm); <span class="comment">/* */</span>
-<a name="l00486"></a>00486      <span class="keywordflow">if</span> (cfg->threshInd == 1) {
-<a name="l00487"></a>00487        sinfo_free_image(&colImage);
-<a name="l00488"></a>00488      }
-<a name="l00489"></a>00489      sinfo_free_image(&compImage);
-<a name="l00490"></a>00490      sinfo_free_image(&maskImage);
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492      <span class="keywordflow">for</span> (i=0; i< cfg->iterations+1; i++) {
-<a name="l00493"></a>00493        sinfo_free_image(&imMed[i]);
-<a name="l00494"></a>00494      }
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496    }
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498    cpl_free(imMed);
-<a name="l00499"></a>00499    imMed=NULL;
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501    <span class="comment">/*</span>
-<a name="l00502"></a>00502 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00503"></a>00503 <span class="comment">   # Master flat field: static bad pixel correction and normalizing</span>
-<a name="l00504"></a>00504 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00505"></a>00505 <span class="comment">   */</span>
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507    sinfo_msg(<span class="stringliteral">"Creates a Master flat field"</span>);
-<a name="l00508"></a>00508    <span class="keywordflow">if</span> (cfg->interpolInd == 1) {
-<a name="l00509"></a>00509      cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l00510"></a>00510         <span class="stringliteral">"could not load static bad pixel mask"</span> );
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512       <span class="comment">/* open the ASCII list of the slitlet positions */</span>
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514       <span class="comment">/* slit_edges = sinfo_new_2Dfloat_array(32, 2) ; */</span>
-<a name="l00515"></a>00515       slit_edges = (<span class="keywordtype">float</span> **) cpl_calloc( 32, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>*) ) ;
-<a name="l00516"></a>00516       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )
-<a name="l00517"></a>00517         {
-<a name="l00518"></a>00518             slit_edges[i] = (<span class="keywordtype">float</span> *) cpl_calloc( 2, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00519"></a>00519         }
-<a name="l00520"></a>00520       <span class="comment">/*READ TFITS TABLE*/</span>
-<a name="l00521"></a>00521       <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->slitposList) !=1 ) {
-<a name="l00522"></a>00522           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>, cfg->slitposList);
-<a name="l00523"></a>00523           <span class="keywordflow">goto</span> cleanup;
-<a name="l00524"></a>00524       }
-<a name="l00525"></a>00525       strcpy(tbl_slitpos_name,cfg->slitposList);
-<a name="l00526"></a>00526       check(tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0),
-<a name="l00527"></a>00527          <span class="stringliteral">"error loading tbl %s"</span>,tbl_slitpos_name);
-<a name="l00528"></a>00528 
-<a name="l00529"></a>00529       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){
-<a name="l00530"></a>00530             val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,status);
-<a name="l00531"></a>00531             val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,status);
-<a name="l00532"></a>00532             slit_edges[i][0]=val_x;
-<a name="l00533"></a>00533         slit_edges[i][1]=val_y;
-<a name="l00534"></a>00534       }
-<a name="l00535"></a>00535       sinfo_free_table(&tbl_slitpos);
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537       cknull(int_im = sinfo_interpol_source_image (im_obj, mask_im, 
-<a name="l00538"></a>00538                                                  cfg->maxRad, slit_edges),
-<a name="l00539"></a>00539                          <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );
-<a name="l00540"></a>00540       
-<a name="l00541"></a>00541       sinfo_free_image(&im_obj);
-<a name="l00542"></a>00542       cknull(norm = sinfo_new_normalize_to_central_pixel(int_im),
-<a name="l00543"></a>00543              <span class="stringliteral">"could not normalize flatfield"</span> );
-<a name="l00544"></a>00544       sinfo_free_image(&int_im);
-<a name="l00545"></a>00545       im_obj = norm; 
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00548"></a>00548         cknull(int_im_dith = sinfo_interpol_source_image(im_dither, 
-<a name="l00549"></a>00549                                mask_im,
-<a name="l00550"></a>00550                                cfg->maxRad,
-<a name="l00551"></a>00551                                slit_edges),
-<a name="l00552"></a>00552            <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );
-<a name="l00553"></a>00553       
-<a name="l00554"></a>00554         cpl_image_delete(im_dither);
-<a name="l00555"></a>00555         cknull(norm_dith = sinfo_new_normalize_to_central_pixel(int_im_dith),
-<a name="l00556"></a>00556            <span class="stringliteral">"could not normalize flatfield"</span> );
-<a name="l00557"></a>00557         sinfo_free_image(&int_im_dith);
-<a name="l00558"></a>00558         im_dither = norm_dith;
-<a name="l00559"></a>00559       }
-<a name="l00560"></a>00560       <span class="comment">/* sinfo_new_destroy_2Dfloatarray(slit_edges, 32); */</span>    
-<a name="l00561"></a>00561       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )
-<a name="l00562"></a>00562         {
-<a name="l00563"></a>00563             cpl_free( slit_edges[i] );
-<a name="l00564"></a>00564         }
-<a name="l00565"></a>00565       cpl_free( slit_edges ) ;
-<a name="l00566"></a>00566       sinfo_free_image(&mask_im);
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568    }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570    <span class="keywordflow">if</span> (cfg->interpolInd != 1) {
-<a name="l00571"></a>00571      cknull(norm = sinfo_new_normalize_to_central_pixel(im_obj),
-<a name="l00572"></a>00572             <span class="stringliteral">"could not normalize flatfield"</span> );
-<a name="l00573"></a>00573       sinfo_free_image(&im_obj);
-<a name="l00574"></a>00574       im_obj = norm; 
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00577"></a>00577         cknull(norm_dith = sinfo_new_normalize_to_central_pixel(im_dither),
-<a name="l00578"></a>00578            <span class="stringliteral">"could not normalize flatfield"</span> );
-<a name="l00579"></a>00579         sinfo_free_image(&im_dither);
-<a name="l00580"></a>00580         im_dither = norm_dith;
-<a name="l00581"></a>00581       }
-<a name="l00582"></a>00582    }
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584    naxis1=cpl_image_get_size_x(im_obj);
-<a name="l00585"></a>00585    naxis2=cpl_image_get_size_y(im_obj);
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588    <span class="keywordflow">if</span>(cfg->qc_fpn_xmin1 < 1) {
-<a name="l00589"></a>00589      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin < 1"</span>);
-<a name="l00590"></a>00590      <span class="keywordflow">goto</span> cleanup;
-<a name="l00591"></a>00591    }
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593    <span class="keywordflow">if</span>(cfg->qc_fpn_xmax1 > naxis1) {
-<a name="l00594"></a>00594      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax < %d"</span>,naxis1);
-<a name="l00595"></a>00595      <span class="keywordflow">goto</span> cleanup;
-<a name="l00596"></a>00596    }
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598    <span class="keywordflow">if</span>(cfg->qc_fpn_ymin1 < 1) {
-<a name="l00599"></a>00599      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin < 1"</span>);
-<a name="l00600"></a>00600      <span class="keywordflow">goto</span> cleanup;
-<a name="l00601"></a>00601    }
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603    <span class="keywordflow">if</span>(cfg->qc_fpn_ymax1 > naxis2) {
-<a name="l00604"></a>00604      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax < %d"</span>,naxis2);
-<a name="l00605"></a>00605      <span class="keywordflow">goto</span> cleanup;
-<a name="l00606"></a>00606    }
-<a name="l00607"></a>00607    fpn_stdev1 = cpl_image_get_stdev_window(im_obj,
-<a name="l00608"></a>00608                        cfg->qc_fpn_xmin1,
-<a name="l00609"></a>00609                        cfg->qc_fpn_ymin1,
-<a name="l00610"></a>00610                        cfg->qc_fpn_xmax1,
-<a name="l00611"></a>00611                        cfg->qc_fpn_ymax1);
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614    <span class="keywordflow">if</span>(cfg->qc_fpn_xmin2 < 1) {
-<a name="l00615"></a>00615      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin < %d"</span>,1);
-<a name="l00616"></a>00616      <span class="keywordflow">goto</span> cleanup;
-<a name="l00617"></a>00617    }
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619 
-<a name="l00620"></a>00620    <span class="keywordflow">if</span>(cfg->qc_fpn_xmax2 > naxis1) {
-<a name="l00621"></a>00621      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax < %d"</span>,naxis1);
-<a name="l00622"></a>00622      <span class="keywordflow">goto</span> cleanup;
-<a name="l00623"></a>00623    }
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625    <span class="keywordflow">if</span>(cfg->qc_fpn_ymin2 < 1) {
-<a name="l00626"></a>00626      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin < 1"</span>);
-<a name="l00627"></a>00627      <span class="keywordflow">goto</span> cleanup;
-<a name="l00628"></a>00628    }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630    <span class="keywordflow">if</span>(cfg->qc_fpn_ymax2 > naxis2) {
-<a name="l00631"></a>00631      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax < %d"</span>,naxis2);
-<a name="l00632"></a>00632      <span class="keywordflow">goto</span> cleanup;
-<a name="l00633"></a>00633    }
-<a name="l00634"></a>00634    fpn_stdev2 = cpl_image_get_stdev_window(im_obj,
-<a name="l00635"></a>00635                        cfg->qc_fpn_xmin2,
-<a name="l00636"></a>00636                        cfg->qc_fpn_ymin2,
-<a name="l00637"></a>00637                        cfg->qc_fpn_xmax2,
-<a name="l00638"></a>00638                        cfg->qc_fpn_ymax2);
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642    ck0(new_lamp_flats_det_ncounts(raw,cfg),<span class="stringliteral">"error computing number of counts"</span>);
-<a name="l00643"></a>00643    cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00644"></a>00644    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSAVG"</span>,
-<a name="l00645"></a>00645                                     qc_lampflat.avg_di,<span class="stringliteral">"Average counts"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00646"></a>00646    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSSTD"</span>,
-<a name="l00647"></a>00647                                     qc_lampflat.std_di,<span class="stringliteral">"Stdev counts"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00648"></a>00648    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT OFFFLUX"</span>,
-<a name="l00649"></a>00649                                     qc_lampflat.avg_of,
-<a name="l00650"></a>00650                                     <span class="stringliteral">"Average flux off frames"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
-<a name="l00653"></a>00653                                      <span class="stringliteral">"QC LFLAT FPN1"</span>,
-<a name="l00654"></a>00654                                      fpn_stdev1,
-<a name="l00655"></a>00655                                      <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,
-<a name="l00656"></a>00656                                      <span class="stringliteral">"%f"</span>));
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
-<a name="l00659"></a>00659                                      <span class="stringliteral">"QC LFLAT FPN2"</span>,
-<a name="l00660"></a>00660                                      fpn_stdev2,
-<a name="l00661"></a>00661                                      <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,
-<a name="l00662"></a>00662                                      <span class="stringliteral">"%f"</span>));
-<a name="l00663"></a>00663 
-<a name="l00664"></a>00664       ck0(sinfo_pro_save_ima(im_obj,ref_set,sof,cfg->outName,
-<a name="l00665"></a>00665                  PRO_MASTER_FLAT_LAMP,qclog_tbl,plugin_id,config),
-<a name="l00666"></a>00666       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668     sinfo_free_table(&qclog_tbl);
-<a name="l00669"></a>00669     sinfo_free_image(&im_obj);
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671  
-<a name="l00672"></a>00672     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674       <span class="keywordflow">if</span> (strstr(cfg->outName, <span class="stringliteral">".fits"</span> ) != NULL ) {
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676     snprintf(name_list, MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>, 
-<a name="l00677"></a>00677          sinfo_new_get_rootname(cfg->outName),
-<a name="l00678"></a>00678                 <span class="stringliteral">"_dither"</span>);
-<a name="l00679"></a>00679         strcpy(outNameDither,name_list);
-<a name="l00680"></a>00680         strcat(outNameDither,strstr(cfg->outName,<span class="stringliteral">".fits"</span>));
-<a name="l00681"></a>00681        
-<a name="l00682"></a>00682       } <span class="keywordflow">else</span> {
-<a name="l00683"></a>00683         strcpy(outNameDither,cfg->outName);
-<a name="l00684"></a>00684         strcat(outNameDither,<span class="stringliteral">"_dither"</span>);
-<a name="l00685"></a>00685       }
-<a name="l00686"></a>00686 
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688       naxis1=cpl_image_get_size_x(im_dither);
-<a name="l00689"></a>00689       naxis2=cpl_image_get_size_y(im_dither);
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691 
-<a name="l00692"></a>00692       <span class="keywordflow">if</span>(cfg->qc_fpn_xmin1 < 1) {
-<a name="l00693"></a>00693      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin1 < 1"</span>);
-<a name="l00694"></a>00694          <span class="keywordflow">goto</span> cleanup;
-<a name="l00695"></a>00695       }
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697       <span class="keywordflow">if</span>(cfg->qc_fpn_xmax1 > naxis1) {
-<a name="l00698"></a>00698      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax1 < %d"</span>,naxis1);
-<a name="l00699"></a>00699          <span class="keywordflow">goto</span> cleanup;
-<a name="l00700"></a>00700       }
-<a name="l00701"></a>00701 
-<a name="l00702"></a>00702       <span class="keywordflow">if</span>(cfg->qc_fpn_ymin1 < 1) {
-<a name="l00703"></a>00703      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin1 < 1"</span>);
-<a name="l00704"></a>00704          <span class="keywordflow">goto</span> cleanup;
-<a name="l00705"></a>00705       }
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707       <span class="keywordflow">if</span>(cfg->qc_fpn_ymax1 > naxis2) {
-<a name="l00708"></a>00708      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax1 < %d"</span>,naxis2);
-<a name="l00709"></a>00709          <span class="keywordflow">goto</span> cleanup;
-<a name="l00710"></a>00710       }
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712  
-<a name="l00713"></a>00713       fpn_stdev1 = cpl_image_get_stdev_window(im_dither,
-<a name="l00714"></a>00714                           cfg->qc_fpn_xmin1,
-<a name="l00715"></a>00715                           cfg->qc_fpn_ymin1,
-<a name="l00716"></a>00716                           cfg->qc_fpn_xmax1,
-<a name="l00717"></a>00717                           cfg->qc_fpn_ymax1);
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719       <span class="keywordflow">if</span>(cfg->qc_fpn_xmin2 < 1) {
-<a name="l00720"></a>00720      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin2 < 1"</span>);
-<a name="l00721"></a>00721          <span class="keywordflow">goto</span> cleanup;
-<a name="l00722"></a>00722       }
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724       <span class="keywordflow">if</span>(cfg->qc_fpn_xmax2 > naxis1) {
-<a name="l00725"></a>00725      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax2 < %d"</span>,naxis1);
-<a name="l00726"></a>00726          <span class="keywordflow">goto</span> cleanup;
-<a name="l00727"></a>00727       }
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729       <span class="keywordflow">if</span>(cfg->qc_fpn_ymin2 < 1) {
-<a name="l00730"></a>00730      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin2 < 1"</span>);
-<a name="l00731"></a>00731          <span class="keywordflow">goto</span> cleanup;
-<a name="l00732"></a>00732       }
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734       <span class="keywordflow">if</span>(cfg->qc_fpn_ymax2 > naxis2) {
-<a name="l00735"></a>00735      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax2 < %d"</span>,naxis2);
-<a name="l00736"></a>00736          <span class="keywordflow">goto</span> cleanup;
-<a name="l00737"></a>00737       }
-<a name="l00738"></a>00738  
-<a name="l00739"></a>00739       fpn_stdev2 = cpl_image_get_stdev_window(im_dither,
-<a name="l00740"></a>00740                           cfg->qc_fpn_xmin2,
-<a name="l00741"></a>00741                           cfg->qc_fpn_ymin2,
-<a name="l00742"></a>00742                           cfg->qc_fpn_xmax2,
-<a name="l00743"></a>00743                           cfg->qc_fpn_ymax2);
-<a name="l00744"></a>00744 
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746       ck0(new_lamp_flats_det_ncounts(raw,cfg),<span class="stringliteral">"error computing ncounts"</span>);
-<a name="l00747"></a>00747       cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00748"></a>00748       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSAVG"</span>,
-<a name="l00749"></a>00749                        qc_lampflat.avg_di,<span class="stringliteral">"Average counts"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSSTD"</span>,
-<a name="l00752"></a>00752                        qc_lampflat.std_di,<span class="stringliteral">"Stdev counts"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT OFFFLUX"</span>,
-<a name="l00755"></a>00755                        qc_lampflat.avg_of,<span class="stringliteral">"Average flux off frames"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC LFLAT FPN1"</span>,fpn_stdev1,
-<a name="l00758"></a>00758                        <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC LFLAT FPN2"</span>,fpn_stdev2,
-<a name="l00761"></a>00761                        <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00762"></a>00762  
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764     ck0(sinfo_pro_save_ima(im_dither,ref_set,sof,outNameDither,
-<a name="l00765"></a>00765                    PRO_MASTER_FLAT_LAMP,qclog_tbl,plugin_id,config),
-<a name="l00766"></a>00766         <span class="stringliteral">"cannot save ima %s"</span>, outNameDither);
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768       sinfo_free_table(&qclog_tbl);
-<a name="l00769"></a>00769       sinfo_free_image(&im_dither);
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771     }
-<a name="l00772"></a>00772 
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774     <span class="comment">/* could be done earlier? */</span>
-<a name="l00775"></a>00775     sinfo_free_image_array(&im,cfg->nframes);
-<a name="l00776"></a>00776     sinfo_free_frameset(&raw);
-<a name="l00777"></a>00777     sinfo_flat_free(&cfg);
-<a name="l00778"></a>00778     <span class="keywordflow">return</span> 0;
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780 cleanup:
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782 
-<a name="l00783"></a>00783     <span class="comment">/* free memory */</span>
-<a name="l00784"></a>00784     <span class="keywordflow">if</span>(slit_edges != NULL) {
-<a name="l00785"></a>00785       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )
-<a name="l00786"></a>00786         {
-<a name="l00787"></a>00787       <span class="keywordflow">if</span>(slit_edges[i] != NULL) {
-<a name="l00788"></a>00788             cpl_free( slit_edges[i] );
-<a name="l00789"></a>00789       }
-<a name="l00790"></a>00790           slit_edges[i]=NULL;
-<a name="l00791"></a>00791         }
-<a name="l00792"></a>00792       cpl_free( slit_edges ) ;
-<a name="l00793"></a>00793     }
-<a name="l00794"></a>00794     sinfo_free_image(&mask_im);
-<a name="l00795"></a>00795     sinfo_free_table(&qclog_tbl);
-<a name="l00796"></a>00796     <span class="keywordflow">if</span>(stats) {
-<a name="l00797"></a>00797       sinfo_new_del_Stats(stats);
-<a name="l00798"></a>00798     }
-<a name="l00799"></a>00799     sinfo_free_int(&n);
-<a name="l00800"></a>00800     sinfo_free_image(&threshIm);
-<a name="l00801"></a>00801     sinfo_free_image(&maskImage);
-<a name="l00802"></a>00802     <span class="keywordflow">if</span>(imMed != NULL) sinfo_free_image_array(&imMed,cfg->iterations);
-<a name="l00803"></a>00803     <span class="keywordflow">if</span>(stats!= NULL) {
-<a name="l00804"></a>00804         sinfo_new_del_Stats(stats);
-<a name="l00805"></a>00805         stats=NULL;
-<a name="l00806"></a>00806     }
-<a name="l00807"></a>00807     sinfo_free_image(&compImage);
-<a name="l00808"></a>00808     sinfo_free_image(&colImage);
-<a name="l00809"></a>00809     sinfo_free_imagelist(&list_dither_object);
-<a name="l00810"></a>00810     sinfo_free_imagelist(&list_dither_sky);
-<a name="l00811"></a>00811     <span class="keywordflow">if</span>(list_sky != NULL) {
-<a name="l00812"></a>00812        sinfo_free_imagelist(&list_sky);
-<a name="l00813"></a>00813     }
-<a name="l00814"></a>00814     sinfo_free_imagelist(&list_object);
-<a name="l00815"></a>00815     sinfo_free_image(&im_dither);
-<a name="l00816"></a>00816     sinfo_free_image(&im_dither_sky);
-<a name="l00817"></a>00817     sinfo_free_image(&im_obj);
-<a name="l00818"></a>00818     sinfo_free_image(&im_sky);
-<a name="l00819"></a>00819     <span class="keywordflow">if</span>(im != NULL) sinfo_free_image_array(&im,cfg->nframes);
-<a name="l00820"></a>00820     sinfo_free_frameset(&raw);
-<a name="l00821"></a>00821     <span class="keywordflow">if</span>(cfg != NULL) {
-<a name="l00822"></a>00822       sinfo_flat_free(&cfg);
-<a name="l00823"></a>00823     }
-<a name="l00824"></a>00824     <span class="keywordflow">return</span> -1;
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826 }
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00829"></a>00829 new_lamp_flats_det_ncounts(cpl_frameset* raw, flat_config* cfg)
-<a name="l00830"></a>00830 {
-<a name="l00831"></a>00831  <span class="keywordtype">int</span> i=0;
-<a name="l00832"></a>00832  <span class="keywordtype">int</span> j=0;
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834  <span class="keywordtype">int</span> nraw=0;
-<a name="l00835"></a>00835  <span class="keywordtype">int</span> non=0;
-<a name="l00836"></a>00836  <span class="keywordtype">int</span> noff=0;
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838  <span class="keywordtype">double</span> mjd_on=0;
-<a name="l00839"></a>00839  <span class="keywordtype">double</span> mjd_of=0;
-<a name="l00840"></a>00840  <span class="keywordtype">double</span> mjd_of_frm=0;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842  <span class="keywordtype">char</span> filename[MAX_NAME_SIZE];
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844  cpl_frame* frm=NULL;
-<a name="l00845"></a>00845  cpl_frame* frm_dup=NULL;
-<a name="l00846"></a>00846  cpl_frame* on_frm=NULL;
-<a name="l00847"></a>00847  cpl_frame* of_frm=NULL;
-<a name="l00848"></a>00848  cpl_frame* tmp_of_frm=NULL;
-<a name="l00849"></a>00849 
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851  cpl_frameset* on_set=NULL;
-<a name="l00852"></a>00852  cpl_frameset* of_set=NULL;
-<a name="l00853"></a>00853  cpl_frameset* wrk_set=NULL;
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855  on_set=cpl_frameset_new();
-<a name="l00856"></a>00856  of_set=cpl_frameset_new();
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858  nraw = cpl_frameset_get_size(raw);
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860  <span class="keywordflow">for</span> (i=0; i< nraw; i++) {
-<a name="l00861"></a>00861    frm = cpl_frameset_get_frame(raw,i);
-<a name="l00862"></a>00862    frm_dup = cpl_frame_duplicate(frm);
-<a name="l00863"></a>00863    <span class="keywordflow">if</span>(sinfo_frame_is_on(frm) == 1) {
-<a name="l00864"></a>00864      cpl_frameset_insert(on_set,frm_dup);
-<a name="l00865"></a>00865      non++;
-<a name="l00866"></a>00866    } <span class="keywordflow">else</span> {
-<a name="l00867"></a>00867      cpl_frameset_insert(of_set,frm_dup);
-<a name="l00868"></a>00868      noff++;
-<a name="l00869"></a>00869    }
-<a name="l00870"></a>00870  }
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872 
-<a name="l00873"></a>00873  <span class="keywordflow">if</span> (non == noff) {
-<a name="l00874"></a>00874    new_qc_get_cnt(on_set,of_set,cfg);
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (non == 0) {
-<a name="l00877"></a>00877    sinfo_msg(<span class="stringliteral">"non == 0"</span>);
-<a name="l00878"></a>00878    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);
-<a name="l00879"></a>00879  
-<a name="l00880"></a>00880  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( noff == 0 ) {
-<a name="l00881"></a>00881    sinfo_msg(<span class="stringliteral">"noff == 0"</span>);
-<a name="l00882"></a>00882    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884  } <span class="keywordflow">else</span> {
-<a name="l00885"></a>00885 
-<a name="l00886"></a>00886    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"non != noff, => QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);
-<a name="l00887"></a>00887 
-<a name="l00888"></a>00888     <span class="keywordflow">for</span> (i=0;i<non;i++) {
-<a name="l00889"></a>00889        wrk_set=cpl_frameset_new();
-<a name="l00890"></a>00890        on_frm=cpl_frameset_get_frame(on_set,i);
-<a name="l00891"></a>00891        mjd_on=sinfo_get_mjd_obs(on_frm);
-<a name="l00892"></a>00892        of_frm=cpl_frameset_get_frame(of_set,0);
-<a name="l00893"></a>00893        mjd_of=sinfo_get_mjd_obs(of_frm);
-<a name="l00894"></a>00894        strcpy(filename,cpl_frame_get_filename(of_frm));
-<a name="l00895"></a>00895        <span class="keywordflow">for</span> (j=1;j<noff;j++) {
-<a name="l00896"></a>00896           tmp_of_frm = cpl_frameset_get_frame(of_set,j);
-<a name="l00897"></a>00897           mjd_of_frm = sinfo_get_mjd_obs(tmp_of_frm);
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899           <span class="keywordflow">if</span>(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <
-<a name="l00900"></a>00900              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {
-<a name="l00901"></a>00901             mjd_of=mjd_of_frm;
-<a name="l00902"></a>00902              of_frm=cpl_frame_duplicate(tmp_of_frm);
-<a name="l00903"></a>00903        }
-<a name="l00904"></a>00904        }
-<a name="l00905"></a>00905        strcpy(filename,cpl_frame_get_filename(of_frm));
-<a name="l00906"></a>00906        frm_dup=cpl_frame_duplicate(of_frm);
-<a name="l00907"></a>00907        cpl_frameset_insert(wrk_set,frm_dup);
-<a name="l00908"></a>00908        strcpy(filename,cpl_frame_get_filename(of_frm));
-<a name="l00909"></a>00909     }
-<a name="l00910"></a>00910     <span class="comment">/* Commented out as algorithm non robust if non != noff */</span>
-<a name="l00911"></a>00911     new_qc_get_cnt(on_set,wrk_set,cfg); 
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913  }
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915  cpl_frameset_delete(wrk_set);
-<a name="l00916"></a>00916  cpl_frameset_delete(on_set);
-<a name="l00917"></a>00917  cpl_frameset_delete(of_set);
-<a name="l00918"></a>00918  <span class="keywordflow">return</span> 0;
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 }
-<a name="l00922"></a>00922 
-<a name="l00923"></a>00923 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00924"></a>00924 new_qc_get_cnt(cpl_frameset* on_set, cpl_frameset* of_set, flat_config* cfg)
-<a name="l00925"></a>00925 {
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927   <span class="keywordtype">int</span> i=0;
-<a name="l00928"></a>00928   <span class="keywordtype">int</span> nsat=0;
-<a name="l00929"></a>00929   <span class="keywordtype">int</span> non=0;
-<a name="l00930"></a>00930   <span class="keywordtype">int</span> nof=0;
-<a name="l00931"></a>00931   <span class="keywordtype">int</span> nfr=0;
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933   <span class="keywordtype">char</span> name[MAX_NAME_SIZE];
-<a name="l00934"></a>00934   cpl_vector* vec_on=NULL;
-<a name="l00935"></a>00935   cpl_vector* vec_of=NULL;
-<a name="l00936"></a>00936   cpl_vector* vec_di=NULL;
-<a name="l00937"></a>00937   cpl_vector* vec_nsat=NULL;
-<a name="l00938"></a>00938   cpl_frame* on_frm=NULL;
-<a name="l00939"></a>00939   cpl_frame* of_frm=NULL;
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941   cpl_image* dif_ima=NULL;
-<a name="l00942"></a>00942   cpl_image* on_ima=NULL;
-<a name="l00943"></a>00943   cpl_image* of_ima=NULL;
-<a name="l00944"></a>00944   cpl_image* tmp_ima=NULL;
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946   <span class="keywordtype">double</span> med=0;
-<a name="l00947"></a>00947     non = cpl_frameset_get_size(on_set);
-<a name="l00948"></a>00948     nof = cpl_frameset_get_size(of_set);
-<a name="l00949"></a>00949     nfr = (non <= nof) ? non : nof;
-<a name="l00950"></a>00950     vec_on = cpl_vector_new(nfr);
-<a name="l00951"></a>00951     vec_of = cpl_vector_new(nfr);
-<a name="l00952"></a>00952     vec_di = cpl_vector_new(nfr);
-<a name="l00953"></a>00953     vec_nsat = cpl_vector_new(nfr);
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     <span class="keywordflow">for</span> (i=0; i< nfr; i++) {
-<a name="l00957"></a>00957       on_frm = cpl_frameset_get_frame(on_set,i);
-<a name="l00958"></a>00958       strcpy(name,cpl_frame_get_filename(on_frm));
-<a name="l00959"></a>00959       on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00960"></a>00960       med= cpl_image_get_median(on_ima);
-<a name="l00961"></a>00961       cpl_vector_set(vec_on,i,med);
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963       tmp_ima = cpl_image_duplicate(on_ima);
-<a name="l00964"></a>00964       cpl_image_threshold(tmp_ima,SINFO_DBL_MIN,
-<a name="l00965"></a>00965                           cfg->qc_thresh_max,0,1);
-<a name="l00966"></a>00966       nsat=cpl_image_get_flux(tmp_ima);
-<a name="l00967"></a>00967       cpl_vector_set(vec_nsat,i,nsat);
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969    <span class="comment">/* Are you sure to have same frames off as on ? */</span>
-<a name="l00970"></a>00970       of_frm = cpl_frameset_get_frame(of_set,i);
-<a name="l00971"></a>00971       strcpy(name,cpl_frame_get_filename(of_frm));
-<a name="l00972"></a>00972       of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00973"></a>00973       med= cpl_image_get_median(of_ima);
-<a name="l00974"></a>00974       cpl_vector_set(vec_of,i,med);
-<a name="l00975"></a>00975       dif_ima = cpl_image_subtract_create(on_ima,of_ima);
-<a name="l00976"></a>00976       med= cpl_image_get_median(dif_ima);
-<a name="l00977"></a>00977       cpl_vector_set(vec_di,i,med);
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979     cpl_image_delete(on_ima);
-<a name="l00980"></a>00980     cpl_image_delete(of_ima);
-<a name="l00981"></a>00981     cpl_image_delete(dif_ima);
-<a name="l00982"></a>00982     cpl_image_delete(tmp_ima);
-<a name="l00983"></a>00983     }
-<a name="l00984"></a>00984     qc_lampflat.avg_on=cpl_vector_get_mean(vec_on);
-<a name="l00985"></a>00985     qc_lampflat.avg_of=cpl_vector_get_mean(vec_of);
-<a name="l00986"></a>00986     qc_lampflat.avg_di=cpl_vector_get_mean(vec_di);
-<a name="l00987"></a>00987     <span class="keywordflow">if</span>(nfr > 1 ) {
-<a name="l00988"></a>00988        qc_lampflat.std_on=cpl_vector_get_stdev(vec_on);
-<a name="l00989"></a>00989        qc_lampflat.std_of=cpl_vector_get_stdev(vec_of);
-<a name="l00990"></a>00990        qc_lampflat.std_di=cpl_vector_get_stdev(vec_di);
-<a name="l00991"></a>00991     }
-<a name="l00992"></a>00992     qc_lampflat.nsat=cpl_vector_get_mean(vec_nsat);
-<a name="l00993"></a>00993     cpl_vector_delete(vec_on);
-<a name="l00994"></a>00994     cpl_vector_delete(vec_of);
-<a name="l00995"></a>00995     cpl_vector_delete(vec_di);
-<a name="l00996"></a>00996     cpl_vector_delete(vec_nsat);
-<a name="l00997"></a>00997     <span class="comment">/*</span>
-<a name="l00998"></a>00998 <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_on=%g std_on=%g ",</span>
-<a name="l00999"></a>00999 <span class="comment">                      qc_lampflat.avg_on,qc_lampflat.std_on);</span>
-<a name="l01000"></a>01000 <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_of=%g std_of=%g ",</span>
-<a name="l01001"></a>01001 <span class="comment">                      qc_lampflat.avg_of,qc_lampflat.std_of);</span>
-<a name="l01002"></a>01002 <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_di=%g std_di=%g ",</span>
-<a name="l01003"></a>01003 <span class="comment">                      qc_lampflat.avg_di,qc_lampflat.std_di);</span>
-<a name="l01004"></a>01004 <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","nsat=%g ",qc_lampflat.nsat);</span>
-<a name="l01005"></a>01005 <span class="comment">    */</span>
-<a name="l01006"></a>01006     <span class="keywordflow">return</span> 0;
-<a name="l01007"></a>01007 }
-<a name="l01008"></a>01008 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_lamp_flats.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">     File name    :       sinfo_new_lamp_flats.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 29, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  : </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * this step handles stacks of lamp flat fields, </span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *  o it takes a clean mean,</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *  o subtracts the off- from the on-frames, </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *  o treats them the same way. </span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_new_lamp_flats.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_flat_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> new_qc_get_cnt(cpl_frameset* on_set, cpl_frameset* of_set, flat_config* cfg);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> new_lamp_flats_det_ncounts(cpl_frameset* raw, flat_config* config);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   <span class="keywordtype">double</span> avg_on; </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="keywordtype">double</span> std_on;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="keywordtype">double</span> avg_of; </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">double</span> std_of;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">double</span> avg_di; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">double</span> std_di;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <span class="keywordtype">double</span> nsat_on;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   <span class="keywordtype">double</span> noise_on;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   <span class="keywordtype">double</span> noise_of;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="keywordtype">double</span> flux_on;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordtype">double</span>    nsat;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> } qc_lampflat;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">   @name  sinfo_new_lamp_flats()</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">   @param  plugin_id recipe id</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">   @param  config input parameterlist</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">   @param  sof    input set of frames</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">   @doc </span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment"> * this step handles stacks of lamp flat fields, </span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment"> *  o it takes a clean mean,</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment"> *  o subtracts the off- from the on-frames, </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment"> *  o treats them the same way. </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment"></span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> sinfo_new_lamp_flats (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                       cpl_parameterlist* config, </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                       cpl_frameset* sof,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                       cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   flat_config * cfg =NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   cpl_imagelist* list_object=NULL;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_imagelist* list_dither_object=NULL ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   cpl_imagelist* list_sky=NULL ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   cpl_imagelist* list_dither_sky=NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   cpl_image ** im=NULL ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   cpl_image * norm_dith =NULL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_image * im_obj =NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_image * int_im =NULL;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_image * int_im_dith =NULL;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_image * im_sky =NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   cpl_image * im_dither =NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   cpl_image * im_obj_sub =NULL;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   cpl_image * im_dither_sub =NULL;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   cpl_image * im_dither_sky =NULL;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cpl_image ** imMed=NULL ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_image * colImage =NULL;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   cpl_image * mask_im =NULL;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   cpl_image * norm =NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   cpl_image * compImage =NULL;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   cpl_image * maskImage =NULL;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   cpl_image * threshIm =NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">char</span> name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">int</span> typ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   Stats * stats =NULL;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordtype">int</span>* n=NULL;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">int</span> nob =0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordtype">int</span> nsky = 0; </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">int</span> nobjdith = 0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">int</span> nskydith = 0; </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordtype">int</span> n_badpixels =0;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordtype">int</span> pos =0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordtype">float</span>** slit_edges=NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordtype">float</span> local_clean_mean =0.;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">float</span> clean_stdev =0.;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordtype">float</span> mean_factor =0.;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordtype">float</span> val_x=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordtype">float</span> val_y=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordtype">char</span> outNameDither[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">char</span> name_list[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordtype">char</span> tbl_slitpos_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   cpl_table* tbl_slitpos=NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordtype">int</span> n_im_med=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">int</span> naxis1=0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordtype">int</span> naxis2=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordtype">double</span> fpn_stdev1=0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordtype">double</span> fpn_stdev2=0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keywordtype">float</span> lo_cut=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordtype">float</span> hi_cut=0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">       1) parse the file names and parameters to the tilt_config data </span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">          structure cfg </span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   cknull_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   cknull(cfg = sinfo_parse_cpl_input_flat(config,sof,&raw),</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>      <span class="stringliteral">"could not parse cpl input!"</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">if</span> (cfg->interpolInd == 1) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->mask);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposList) != 1) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->slitposList);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">    #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">    # Take a clean mean of several images</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">    # input is 1 or more similar images</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">    #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   sinfo_msg(<span class="stringliteral">"Takes clean mean of several images"</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="comment">/* #allocate memory for lists of object, sky and dithered frames--*/</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   cknull(list_object = cpl_imagelist_new (),<span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     cknull(list_dither_object=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cknull(list_sky=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->nditheroff > 0) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     cknull(list_dither_sky=cpl_imagelist_new(),<span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 0 && cfg->nditheroff > 0){</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"please use non-dithered off-frames, remove the 2!"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>  </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="comment">/* problem with im as image holder: cleanup then does not work */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   im = (cpl_image**) cpl_calloc (cfg -> nframes, <span class="keyword">sizeof</span>(cpl_image*)); </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     strcpy(name,cfg->framelist[i]);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"PP Input file %s %d is not FITS"</span>,name,i);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     im[i]=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     typ = cfg->frametype[i];</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     pos = cfg->frameposition[i];</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     cknull(im[i],<span class="stringliteral">"could not load image %d"</span>,i);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">if</span> (pos == 2) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       <span class="keywordflow">if</span> (typ == 1) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         cpl_imagelist_set( list_object, cpl_image_duplicate(im[i]), nob );  </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         nob = nob + 1;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         cpl_imagelist_set( list_sky, cpl_image_duplicate(im[i]), nsky );</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         nsky = nsky + 1 ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <span class="keywordflow">if</span> (typ == 1) {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         cpl_imagelist_set(list_dither_object, </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                           cpl_image_duplicate(im[i]), nobjdith );  </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         nobjdith = nobjdith + 1;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         cpl_imagelist_set( list_dither_sky, </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                           cpl_image_duplicate(im[i]), nskydith );</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         nskydith = nskydith + 1 ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">if</span> (nob != cfg->nobj || cfg->noff != nsky || </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       nobjdith != cfg->nditherobj || nskydith != cfg->nditheroff) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of "</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                       <span class="stringliteral">"the different types of frames"</span>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="comment">/* # create and fill cubes with the different image lists- */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   sinfo_msg(<span class="stringliteral">"Creates and fills cubes with the different image lists"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   cknull(list_object,<span class="stringliteral">"could not create data cube!"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     cknull(list_dither_object,<span class="stringliteral">"could not create data cube!"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="keywordflow">if</span> (cfg->contains_sky == 1 && nsky > 0) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cknull(list_sky,<span class="stringliteral">"could not create data cube!"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     cknull(list_dither_sky,<span class="stringliteral">"could not create data cube!"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>  </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="comment">/*-take the average of the different cubes -*/</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   sinfo_msg(<span class="stringliteral">"Takes the average of the different cubes"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordflow">if</span> (cfg->loReject*cfg->nobj < 1. && cfg->hiReject *cfg->nobj < 1.) {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     cknull(im_obj = sinfo_new_average_cube_to_image(list_object ),</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>           <span class="stringliteral">"sinfo_averageCubeToImage failed"</span> );</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     no=cpl_imagelist_get_size(list_object);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     cknull(im_obj=cpl_imagelist_collapse_minmax_create(list_object,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                                       lo_cut,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                                       hi_cut),</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                  <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">if</span> (cfg->loReject * nsky < 1. && cfg->hiReject * nsky < 1.) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       cknull(im_sky = sinfo_new_average_cube_to_image(list_sky ),</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     no=cpl_imagelist_get_size(list_sky);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     cknull(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>            <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     sinfo_free_imagelist(&list_sky);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">if</span> (cfg->loReject*nobjdith < 1. && cfg->hiReject * nobjdith < 1.) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       cknull(im_dither = sinfo_new_average_cube_to_image(list_dither_object ),</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>              <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>      no=cpl_imagelist_get_size(list_dither_object);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>      lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>      hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>      cknull(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                                                            lo_cut,hi_cut),</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>    }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    sinfo_free_imagelist(&list_dither_object);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0 ) {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">if</span> (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       cknull(im_dither_sky = sinfo_new_average_cube_to_image(list_dither_sky ),</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>             <span class="stringliteral">"sinfo_new_average_cube_to_image failed"</span> );</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       no=cpl_imagelist_get_size(list_dither_sky);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       cknull(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                                                                 lo_cut,hi_cut),</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                                           <span class="stringliteral">"new_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     }</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     sinfo_free_imagelist(&list_dither_sky);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   }   </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">  # Subtract the resulting off-frame (sky) from the on-frame </span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">  #-------------------------------------------------------</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">  #finally, subtract off from on frames and store the result in the </span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">  # object cube----------------</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   sinfo_msg(<span class="stringliteral">"Subtracts the resulting off-frame (sky) from the on-frame"</span>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>      cknull(im_obj_sub = cpl_image_subtract_create(im_obj, im_sky),</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>             <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>      sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>      <span class="keywordflow">if</span> (((cfg->contains_dither == 1) && (nskydith > 0)) || </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>          (cfg->contains_dither == 0)) {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>        sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>      }</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>      im_obj = im_obj_sub;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>      cknull(im_dither_sub=cpl_image_subtract_create(im_dither, im_dither_sky),</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>             <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>      sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>      sinfo_free_image(&im_dither_sky);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>      im_dither = im_dither_sub;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->contains_dither == 1 && </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                           nskydith == 0 && </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>               cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>      cknull(im_dither_sub = cpl_image_subtract_create(im_dither, im_sky),</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>         <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>      sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>      sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>      im_dither = im_dither_sub;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>    }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">   # Generating a static bad pixel mask:</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">   # remove the intensity tilt from every column</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="comment">   # and compute the standard deviation on a rectangular zone</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>    sinfo_msg(<span class="stringliteral">"Generating a static bad pixel mask"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>    n_im_med = cfg->iterations+1;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>    imMed=(cpl_image**) cpl_calloc(n_im_med, <span class="keyword">sizeof</span>(cpl_image*));</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>    <span class="keywordflow">if</span> (cfg->badInd == 1) {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>      sinfo_msg(<span class="stringliteral">"removes the intensity tilt from every column and"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>      sinfo_msg(<span class="stringliteral">"computes the standard deviation on a rectangular zone"</span>);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>      <span class="comment">/* this call originates 36 bytes leaks */</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>      cknull(colImage  = sinfo_new_col_tilt( im_obj, cfg->sigmaFactor ),</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         <span class="stringliteral">"sinfo_colTilt failed"</span> );</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>      cknull(stats = sinfo_new_image_stats_on_rectangle(colImage, </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                    cfg->badLoReject, </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                    cfg->badHiReject, </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                    cfg->llx, </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                    cfg->lly, </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                    cfg->urx, </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                cfg->ury),</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                    <span class="stringliteral">"sinfo_get_image_stats_on_vig failed\n"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>      </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>      local_clean_mean = stats->cleanmean;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>      clean_stdev = stats->cleanstdev;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>      <span class="comment">/* indicate pixels with great deviations from the clean mean as bad */</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>      <span class="keywordflow">if</span> (cfg->threshInd == 1) {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>          cknull(threshIm = sinfo_new_thresh_image(colImage, </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>             local_clean_mean-mean_factor*clean_stdev,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             local_clean_mean+mean_factor*clean_stdev),</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <span class="stringliteral">" sinfo_threshImage failed\n"</span> );</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>      }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>      <span class="keywordflow">if</span> (cfg->threshInd == 0) {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         threshIm = colImage;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>      }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="comment">     filter iteratively the images by a sinfo_median filter of the nearest </span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">     neighbors under the condition of a deviation greater than a factor </span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">     times the standard deviation</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>      cknull(imMed[0]= sinfo_new_median_image(threshIm,-cfg->factor*clean_stdev),</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>                                             <span class="stringliteral">" sinfo_medianImage failed"</span> );</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>      </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>        <span class="comment">/* AMO check again if here the loop start and ending point are proper */</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>      <span class="keywordflow">for</span> (i=1; i< cfg->iterations+1; i++) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>        cknull(imMed[i]=sinfo_new_median_image(imMed[i-1], </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                           -cfg->factor*clean_stdev),</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                                           <span class="stringliteral">"sinfo_medianImage failed"</span> );</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>      }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>      <span class="comment">/* compare the filtered image with the input image */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>      cknull(compImage=sinfo_new_compare_images(threshIm, </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                                                imMed[cfg->iterations], </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                                                im_obj),</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         <span class="stringliteral">"sinfo_compareImages failed"</span> );</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>      <span class="comment">/*---generate the bad pixel mask */</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>      n = (<span class="keywordtype">int</span>*)cpl_calloc(1,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>      cknull(maskImage = sinfo_new_promote_image_to_mask( compImage, n ),</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>             <span class="stringliteral">"error in sinfo_promoteImageToMask"</span> );</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>      n_badpixels = n[0];</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>      sinfo_msg(<span class="stringliteral">"No of bad pixels: %d"</span>, n_badpixels);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>      cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC BP-MAP NBADPIX"</span>,n_badpixels,</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                                    <span class="stringliteral">"No of bad pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>      ck0(sinfo_pro_save_ima(maskImage,ref_set,sof,cfg->maskname,</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                   PRO_BP_MAP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                <span class="stringliteral">"cannot save ima %s"</span>, cfg->maskname);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>      <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>      sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>  </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>      sinfo_new_del_Stats(stats);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>      sinfo_free_int(&n);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>      sinfo_free_image(&threshIm); <span class="comment">/* */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>      <span class="keywordflow">if</span> (cfg->threshInd == 1) {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>        sinfo_free_image(&colImage);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>      }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>      sinfo_free_image(&compImage);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>      sinfo_free_image(&maskImage);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>      <span class="keywordflow">for</span> (i=0; i< cfg->iterations+1; i++) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>        sinfo_free_image(&imMed[i]);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>      }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>    }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>    cpl_free(imMed);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>    imMed=NULL;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">   # Master flat field: static bad pixel correction and normalizing</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>    sinfo_msg(<span class="stringliteral">"Creates a Master flat field"</span>);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>    <span class="keywordflow">if</span> (cfg->interpolInd == 1) {</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>      cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>         <span class="stringliteral">"could not load static bad pixel mask"</span> );</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>       <span class="comment">/* open the ASCII list of the slitlet positions */</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="comment">/* slit_edges = sinfo_new_2Dfloat_array(32, 2) ; */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       slit_edges = (<span class="keywordtype">float</span> **) cpl_calloc( 32, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>*) ) ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             slit_edges[i] = (<span class="keywordtype">float</span> *) cpl_calloc( 2, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>         }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>       <span class="comment">/*READ TFITS TABLE*/</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>       <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->slitposList) !=1 ) {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>, cfg->slitposList);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>       }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>       strcpy(tbl_slitpos_name,cfg->slitposList);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>       check(tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0),</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>          <span class="stringliteral">"error loading tbl %s"</span>,tbl_slitpos_name);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,status);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>             val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,status);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>             slit_edges[i][0]=val_x;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>         slit_edges[i][1]=val_y;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       sinfo_free_table(&tbl_slitpos);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>       cknull(int_im = sinfo_interpol_source_image (im_obj, mask_im, </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>                                                  cfg->maxRad, slit_edges),</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                          <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>       </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>       sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>       cknull(norm = sinfo_new_normalize_to_central_pixel(int_im),</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>              <span class="stringliteral">"could not normalize flatfield"</span> );</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>       sinfo_free_image(&int_im);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       im_obj = norm; </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         cknull(int_im_dith = sinfo_interpol_source_image(im_dither, </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                                mask_im,</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>                                cfg->maxRad,</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>                                slit_edges),</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>            <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>       </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         cpl_image_delete(im_dither);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>         cknull(norm_dith = sinfo_new_normalize_to_central_pixel(int_im_dith),</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>            <span class="stringliteral">"could not normalize flatfield"</span> );</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         sinfo_free_image(&int_im_dith);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         im_dither = norm_dith;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>       }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>       <span class="comment">/* sinfo_new_destroy_2Dfloatarray(slit_edges, 32); */</span>    </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         {</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>             cpl_free( slit_edges[i] );</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       cpl_free( slit_edges ) ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>    }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>    <span class="keywordflow">if</span> (cfg->interpolInd != 1) {</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>      cknull(norm = sinfo_new_normalize_to_central_pixel(im_obj),</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>             <span class="stringliteral">"could not normalize flatfield"</span> );</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>       sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>       im_obj = norm; </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         cknull(norm_dith = sinfo_new_normalize_to_central_pixel(im_dither),</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>            <span class="stringliteral">"could not normalize flatfield"</span> );</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>         im_dither = norm_dith;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       }</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>    }</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>    naxis1=cpl_image_get_size_x(im_obj);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>    naxis2=cpl_image_get_size_y(im_obj);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_xmin1 < 1) {</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin < 1"</span>);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>    }</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_xmax1 > naxis1) {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax < %d"</span>,naxis1);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>    }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_ymin1 < 1) {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin < 1"</span>);</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>    }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_ymax1 > naxis2) {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax < %d"</span>,naxis2);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>    }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>    fpn_stdev1 = cpl_image_get_stdev_window(im_obj,</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>                        cfg->qc_fpn_xmin1,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                        cfg->qc_fpn_ymin1,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                        cfg->qc_fpn_xmax1,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                        cfg->qc_fpn_ymax1);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_xmin2 < 1) {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin < %d"</span>,1);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>    }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_xmax2 > naxis1) {</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax < %d"</span>,naxis1);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>    }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_ymin2 < 1) {</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin < 1"</span>);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>    }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>    <span class="keywordflow">if</span>(cfg->qc_fpn_ymax2 > naxis2) {</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax < %d"</span>,naxis2);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>    }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>    fpn_stdev2 = cpl_image_get_stdev_window(im_obj,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                        cfg->qc_fpn_xmin2,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                        cfg->qc_fpn_ymin2,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                        cfg->qc_fpn_xmax2,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                        cfg->qc_fpn_ymax2);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>    ck0(new_lamp_flats_det_ncounts(raw,cfg),<span class="stringliteral">"error computing number of counts"</span>);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>    cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSAVG"</span>,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                                     qc_lampflat.avg_di,<span class="stringliteral">"Average counts"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSSTD"</span>,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                     qc_lampflat.std_di,<span class="stringliteral">"Stdev counts"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT OFFFLUX"</span>,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                                     qc_lampflat.avg_of,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                                     <span class="stringliteral">"Average flux off frames"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                                      <span class="stringliteral">"QC LFLAT FPN1"</span>,</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                                      fpn_stdev1,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                                      <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                                      <span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                                      <span class="stringliteral">"QC LFLAT FPN2"</span>,</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                                      fpn_stdev2,</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                                      <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                                      <span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       ck0(sinfo_pro_save_ima(im_obj,ref_set,sof,cfg->outName,</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                  PRO_MASTER_FLAT_LAMP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>  </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>       <span class="keywordflow">if</span> (strstr(cfg->outName, <span class="stringliteral">".fits"</span> ) != NULL ) {</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     snprintf(name_list, MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>, </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>          sinfo_new_get_rootname(cfg->outName),</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                 <span class="stringliteral">"_dither"</span>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         strcpy(outNameDither,name_list);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         strcat(outNameDither,strstr(cfg->outName,<span class="stringliteral">".fits"</span>));</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>        </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>         strcpy(outNameDither,cfg->outName);</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         strcat(outNameDither,<span class="stringliteral">"_dither"</span>);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       naxis1=cpl_image_get_size_x(im_dither);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>       naxis2=cpl_image_get_size_y(im_dither);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_xmin1 < 1) {</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin1 < 1"</span>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>       }</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_xmax1 > naxis1) {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax1 < %d"</span>,naxis1);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>       }</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_ymin1 < 1) {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin1 < 1"</span>);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>       }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_ymax1 > naxis2) {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax1 < %d"</span>,naxis2);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>       }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>  </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>       fpn_stdev1 = cpl_image_get_stdev_window(im_dither,</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>                           cfg->qc_fpn_xmin1,</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                           cfg->qc_fpn_ymin1,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                           cfg->qc_fpn_xmax1,</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>                           cfg->qc_fpn_ymax1);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_xmin2 < 1) {</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmin2 < 1"</span>);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>       }</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_xmax2 > naxis1) {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_xmax2 < %d"</span>,naxis1);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>       }</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_ymin2 < 1) {</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymin2 < 1"</span>);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>       }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>       <span class="keywordflow">if</span>(cfg->qc_fpn_ymax2 > naxis2) {</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"qc_ron_ymax2 < %d"</span>,naxis2);</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>       }</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>  </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>       fpn_stdev2 = cpl_image_get_stdev_window(im_dither,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>                           cfg->qc_fpn_xmin2,</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>                           cfg->qc_fpn_ymin2,</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                           cfg->qc_fpn_xmax2,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                           cfg->qc_fpn_ymax2);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>       ck0(new_lamp_flats_det_ncounts(raw,cfg),<span class="stringliteral">"error computing ncounts"</span>);</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSAVG"</span>,</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>                        qc_lampflat.avg_di,<span class="stringliteral">"Average counts"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT NCNTSSTD"</span>,</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>                        qc_lampflat.std_di,<span class="stringliteral">"Stdev counts"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SPECFLAT OFFFLUX"</span>,</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                        qc_lampflat.avg_of,<span class="stringliteral">"Average flux off frames"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC LFLAT FPN1"</span>,fpn_stdev1,</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                        <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC LFLAT FPN2"</span>,fpn_stdev2,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                        <span class="stringliteral">"Fixed Pattern Noise of combined frames"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>  </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     ck0(sinfo_pro_save_ima(im_dither,ref_set,sof,outNameDither,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                    PRO_MASTER_FLAT_LAMP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         <span class="stringliteral">"cannot save ima %s"</span>, outNameDither);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>       sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>       sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     }</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="comment">/* could be done earlier? */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     sinfo_free_image_array(&im,cfg->nframes);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     sinfo_flat_free(&cfg);</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> cleanup:</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">if</span>(slit_edges != NULL) {</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>       <span class="keywordflow">for</span> ( i = 0 ; i < 32 ; i++ )</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         {</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>       <span class="keywordflow">if</span>(slit_edges[i] != NULL) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             cpl_free( slit_edges[i] );</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>       }</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>           slit_edges[i]=NULL;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         }</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>       cpl_free( slit_edges ) ;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <span class="keywordflow">if</span>(stats) {</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>       sinfo_new_del_Stats(stats);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     sinfo_free_int(&n);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     sinfo_free_image(&threshIm);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     sinfo_free_image(&maskImage);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordflow">if</span>(imMed != NULL) sinfo_free_image_array(&imMed,cfg->iterations);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keywordflow">if</span>(stats!= NULL) {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         sinfo_new_del_Stats(stats);</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         stats=NULL;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     sinfo_free_image(&compImage);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     sinfo_free_image(&colImage);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     sinfo_free_imagelist(&list_dither_object);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     sinfo_free_imagelist(&list_dither_sky);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <span class="keywordflow">if</span>(list_sky != NULL) {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>        sinfo_free_imagelist(&list_sky);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     }</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     sinfo_free_image(&im_dither_sky);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordflow">if</span>(im != NULL) sinfo_free_image_array(&im,cfg->nframes);</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     <span class="keywordflow">if</span>(cfg != NULL) {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>       sinfo_flat_free(&cfg);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     }</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> new_lamp_flats_det_ncounts(cpl_frameset* raw, flat_config* cfg)</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>  <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>  <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>  <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>  <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>  <span class="keywordtype">int</span> noff=0;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>  <span class="keywordtype">double</span> mjd_on=0;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>  <span class="keywordtype">double</span> mjd_of=0;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>  <span class="keywordtype">double</span> mjd_of_frm=0;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>  <span class="keywordtype">char</span> filename[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>  cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>  cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>  cpl_frame* on_frm=NULL;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>  cpl_frame* of_frm=NULL;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>  cpl_frame* tmp_of_frm=NULL;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>  cpl_frameset* on_set=NULL;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>  cpl_frameset* of_set=NULL;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>  cpl_frameset* wrk_set=NULL;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>  on_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>  of_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>  nraw = cpl_frameset_get_size(raw);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>  <span class="keywordflow">for</span> (i=0; i< nraw; i++) {</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>    frm = cpl_frameset_get_frame(raw,i);</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>    frm_dup = cpl_frame_duplicate(frm);</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>    <span class="keywordflow">if</span>(sinfo_frame_is_on(frm) == 1) {</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>      cpl_frameset_insert(on_set,frm_dup);</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>      non++;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>      cpl_frameset_insert(of_set,frm_dup);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>      noff++;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>    }</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>  }</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>  <span class="keywordflow">if</span> (non == noff) {</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>    new_qc_get_cnt(on_set,of_set,cfg);</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (non == 0) {</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>    sinfo_msg(<span class="stringliteral">"non == 0"</span>);</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>  </div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( noff == 0 ) {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>    sinfo_msg(<span class="stringliteral">"noff == 0"</span>);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>    <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"non != noff, => QC SPECFLAT NCNTAVG/NCTNTSTD/OFFFLUX=0 "</span>);</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <span class="keywordflow">for</span> (i=0;i<non;i++) {</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>        wrk_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>        on_frm=cpl_frameset_get_frame(on_set,i);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>        mjd_on=sinfo_get_mjd_obs(on_frm);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>        of_frm=cpl_frameset_get_frame(of_set,0);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>        mjd_of=sinfo_get_mjd_obs(of_frm);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>        strcpy(filename,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>        <span class="keywordflow">for</span> (j=1;j<noff;j++) {</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>           tmp_of_frm = cpl_frameset_get_frame(of_set,j);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>           mjd_of_frm = sinfo_get_mjd_obs(tmp_of_frm);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>           <span class="keywordflow">if</span>(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>             mjd_of=mjd_of_frm;</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>              of_frm=cpl_frame_duplicate(tmp_of_frm);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>        }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>        }</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>        strcpy(filename,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>        frm_dup=cpl_frame_duplicate(of_frm);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>        cpl_frameset_insert(wrk_set,frm_dup);</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>        strcpy(filename,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="comment">/* Commented out as algorithm non robust if non != noff */</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     new_qc_get_cnt(on_set,wrk_set,cfg); </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>  }</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>  cpl_frameset_delete(wrk_set);</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>  cpl_frameset_delete(on_set);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>  cpl_frameset_delete(of_set);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> }</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> new_qc_get_cnt(cpl_frameset* on_set, cpl_frameset* of_set, flat_config* cfg)</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> {</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   <span class="keywordtype">int</span> nsat=0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   <span class="keywordtype">int</span> nof=0;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   <span class="keywordtype">int</span> nfr=0;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>   <span class="keywordtype">char</span> name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   cpl_vector* vec_on=NULL;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   cpl_vector* vec_of=NULL;</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   cpl_vector* vec_di=NULL;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   cpl_vector* vec_nsat=NULL;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   cpl_frame* on_frm=NULL;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   cpl_frame* of_frm=NULL;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   cpl_image* dif_ima=NULL;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   cpl_image* on_ima=NULL;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   cpl_image* of_ima=NULL;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   cpl_image* tmp_ima=NULL;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     non = cpl_frameset_get_size(on_set);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     nof = cpl_frameset_get_size(of_set);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     nfr = (non <= nof) ? non : nof;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     vec_on = cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     vec_of = cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     vec_di = cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     vec_nsat = cpl_vector_new(nfr);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="keywordflow">for</span> (i=0; i< nfr; i++) {</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>       on_frm = cpl_frameset_get_frame(on_set,i);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>       strcpy(name,cpl_frame_get_filename(on_frm));</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>       on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>       med= cpl_image_get_median(on_ima);</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>       cpl_vector_set(vec_on,i,med);</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>       tmp_ima = cpl_image_duplicate(on_ima);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>       cpl_image_threshold(tmp_ima,SINFO_DBL_MIN,</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>                           cfg->qc_thresh_max,0,1);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       nsat=cpl_image_get_flux(tmp_ima);</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>       cpl_vector_set(vec_nsat,i,nsat);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>    <span class="comment">/* Are you sure to have same frames off as on ? */</span></div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>       of_frm = cpl_frameset_get_frame(of_set,i);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>       strcpy(name,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>       of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>       med= cpl_image_get_median(of_ima);</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>       cpl_vector_set(vec_of,i,med);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>       dif_ima = cpl_image_subtract_create(on_ima,of_ima);</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>       med= cpl_image_get_median(dif_ima);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>       cpl_vector_set(vec_di,i,med);</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     cpl_image_delete(on_ima);</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     cpl_image_delete(of_ima);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     cpl_image_delete(dif_ima);</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     cpl_image_delete(tmp_ima);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     }</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     qc_lampflat.avg_on=cpl_vector_get_mean(vec_on);</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     qc_lampflat.avg_of=cpl_vector_get_mean(vec_of);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     qc_lampflat.avg_di=cpl_vector_get_mean(vec_di);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordflow">if</span>(nfr > 1 ) {</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>        qc_lampflat.std_on=cpl_vector_get_stdev(vec_on);</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>        qc_lampflat.std_of=cpl_vector_get_stdev(vec_of);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>        qc_lampflat.std_di=cpl_vector_get_stdev(vec_di);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     qc_lampflat.nsat=cpl_vector_get_mean(vec_nsat);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     cpl_vector_delete(vec_on);</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     cpl_vector_delete(vec_of);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     cpl_vector_delete(vec_di);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     cpl_vector_delete(vec_nsat);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_on=%g std_on=%g ",</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> <span class="comment">                      qc_lampflat.avg_on,qc_lampflat.std_on);</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_of=%g std_of=%g ",</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="comment">                      qc_lampflat.avg_of,qc_lampflat.std_of);</span></div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","avg_di=%g std_di=%g ",</span></div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">                      qc_lampflat.avg_di,qc_lampflat.std_di);</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">    sinfo_msg( "sinfo_qc_get_cnt","nsat=%g ",qc_lampflat.nsat);</span></div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> }</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__lamp__flats_8h_source.html b/html/sinfo__new__lamp__flats_8h_source.html
index 7badb5e..2507a7f 100644
--- a/html/sinfo__new__lamp__flats_8h_source.html
+++ b/html/sinfo__new__lamp__flats_8h_source.html
@@ -2,92 +2,123 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_lamp_flats.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_lamp_flats.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_LAMP_FLATS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_LAMP_FLATS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_lamp_flats.h,v 1.9 2007/09/21 14:13:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_lamp_flats.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * this step handles stacks of lamp flat fields, </span>
-<a name="l00034"></a>00034 <span class="comment"> *  o it takes a clean mean,</span>
-<a name="l00035"></a>00035 <span class="comment"> *  o subtracts the off- from the on-frames, </span>
-<a name="l00036"></a>00036 <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span>
-<a name="l00037"></a>00037 <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span>
-<a name="l00038"></a>00038 <span class="comment"> *  o treats them the same way. </span>
-<a name="l00039"></a>00039 <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span>
-<a name="l00040"></a>00040 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment"> */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*</span>
-<a name="l00044"></a>00044 <span class="comment"> * header files</span>
-<a name="l00045"></a>00045 <span class="comment"> */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span> 
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00051"></a>00051 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">   Function     :       sinfo_new_lamp_flats()</span>
-<a name="l00055"></a>00055 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00056"></a>00056 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00057"></a>00057 <span class="comment">   Job          :</span>
-<a name="l00058"></a>00058 <span class="comment">       </span>
-<a name="l00059"></a>00059 <span class="comment"> * this step handles stacks of lamp flat fields, </span>
-<a name="l00060"></a>00060 <span class="comment"> *  o it takes a clean mean,</span>
-<a name="l00061"></a>00061 <span class="comment"> *  o subtracts the off- from the on-frames, </span>
-<a name="l00062"></a>00062 <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span>
-<a name="l00063"></a>00063 <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span>
-<a name="l00064"></a>00064 <span class="comment"> *  o treats them the same way. </span>
-<a name="l00065"></a>00065 <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span>
-<a name="l00066"></a>00066 <span class="comment"></span>
-<a name="l00067"></a>00067 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="keywordtype">int</span> 
-<a name="l00069"></a>00069 sinfo_new_lamp_flats (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00070"></a>00070                       cpl_parameterlist* config, 
-<a name="l00071"></a>00071                       cpl_frameset* sof,
-<a name="l00072"></a>00072                       cpl_frameset* ref_set) ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="preprocessor">#endif </span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span>
-<a name="l00077"></a>00077 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_lamp_flats.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_LAMP_FLATS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_LAMP_FLATS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_lamp_flats.h,v 1.9 2007/09/21 14:13:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_lamp_flats.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * this step handles stacks of lamp flat fields, </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *  o it takes a clean mean,</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *  o subtracts the off- from the on-frames, </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> *  o treats them the same way. </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   Function     :       sinfo_new_lamp_flats()</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">       </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> * this step handles stacks of lamp flat fields, </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> *  o it takes a clean mean,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> *  o subtracts the off- from the on-frames, </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> *  o corrects for static bad pixels and normalizes for a master flat field. </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> *  o It distinguishes the spectrally dithered frames and </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> *  o treats them the same way. </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> *  o It can also generate a static bad pixel mask if wished.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> sinfo_new_lamp_flats (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                       cpl_parameterlist* config, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                       cpl_frameset* sof,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                       cpl_frameset* ref_set) ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__nst_8c_source.html b/html/sinfo__new__nst_8c_source.html
index be1fd76..c0c02d5 100644
--- a/html/sinfo__new__nst_8c_source.html
+++ b/html/sinfo__new__nst_8c_source.html
@@ -2,397 +2,428 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_nst.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_nst.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"> </span>
-<a name="l00021"></a>00021 <span class="comment">     File name    :       spiffi_north_south_test.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  : </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> * nsh.h</span>
-<a name="l00027"></a>00027 <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span>
-<a name="l00028"></a>00028 <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span>
-<a name="l00029"></a>00029 <span class="comment"> * position.</span>
-<a name="l00030"></a>00030 <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span>
-<a name="l00031"></a>00031 <span class="comment"> * sub-pixel positions for each row.</span>
-<a name="l00032"></a>00032 <span class="comment"> *</span>
-<a name="l00033"></a>00033 <span class="comment"> * Then the distances are determined in each row and averaged</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Result: are distances of each slitlet from each other => 31 values stored </span>
-<a name="l00036"></a>00036 <span class="comment"> *  in an ASCII file this Python script needs a frame of a pinhole source with </span>
-<a name="l00037"></a>00037 <span class="comment"> *  a continuous spectrum, that is shifted exactly perpendicular to the </span>
-<a name="l00038"></a>00038 <span class="comment"> *  slitlets. It fits the spectra in spatial direction by a Gaussian fit </span>
-<a name="l00039"></a>00039 <span class="comment"> *  function and therefore determines the sub-pixel position of the source.</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> *  Then the distances of the slitlets from each other are determined and </span>
-<a name="l00042"></a>00042 <span class="comment"> *   saved in an ASCII list. </span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"></span>
-<a name="l00045"></a>00045 <span class="comment"></span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment">                                Includes</span>
-<a name="l00053"></a>00053 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_new_nst.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "sinfo_ns_ini_by_cpl.h"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">                                Defines</span>
-<a name="l00067"></a>00067 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 
-<a name="l00076"></a>00076 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00077"></a>00077 <span class="comment">                             Function Definitions</span>
-<a name="l00078"></a>00078 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00081"></a>00081 <span class="comment">   Function     :       north_south_test()</span>
-<a name="l00082"></a>00082 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00083"></a>00083 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00084"></a>00084 <span class="comment">   Job          : Result of a north-south test exposure are 32 continuum </span>
-<a name="l00085"></a>00085 <span class="comment">                  spectra of a pinhole    that means one spectrum in each </span>
-<a name="l00086"></a>00086 <span class="comment">                  slitlet at the same spatial position.</span>
-<a name="l00087"></a>00087 <span class="comment"></span>
-<a name="l00088"></a>00088 <span class="comment">                  Each spectrum is fitted in sp[atial direction by a Gaussian</span>
-<a name="l00089"></a>00089 <span class="comment">                  to get the sub-pixel positions for each row.</span>
-<a name="l00090"></a>00090 <span class="comment"></span>
-<a name="l00091"></a>00091 <span class="comment">                  Then the distances are determined in each row and averaged</span>
-<a name="l00092"></a>00092 <span class="comment"></span>
-<a name="l00093"></a>00093 <span class="comment">                  Result: are distances of each slitlet from each other =></span>
-<a name="l00094"></a>00094 <span class="comment">                          31 values stored in an ASCII file</span>
-<a name="l00095"></a>00095 <span class="comment"></span>
-<a name="l00096"></a>00096 <span class="comment"></span>
-<a name="l00097"></a>00097 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00098"></a>00098 <span class="keywordtype">int</span> 
-<a name="l00099"></a>00099 sinfo_new_nst(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00100"></a>00100               cpl_parameterlist* config, 
-<a name="l00101"></a>00101               cpl_frameset* sof,
-<a name="l00102"></a>00102               cpl_frameset* ref_set)
-<a name="l00103"></a>00103 {
-<a name="l00104"></a>00104   ns_config * cfg=NULL ;
-<a name="l00105"></a>00105   cpl_imagelist * list_object=NULL ;
-<a name="l00106"></a>00106   cpl_imagelist * list_off=NULL;
-<a name="l00107"></a>00107   cpl_image * im_on=NULL;
-<a name="l00108"></a>00108   cpl_image * im_on_sub=NULL ;
-<a name="l00109"></a>00109   cpl_image * im_on_ind=NULL ;
-<a name="l00110"></a>00110   cpl_image * im_on_gauss=NULL ;
-<a name="l00111"></a>00111   cpl_image * im_mask=NULL ;
-<a name="l00112"></a>00112   cpl_image * im_off=NULL ;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   <span class="keywordtype">char</span>* name=NULL;
-<a name="l00115"></a>00115   <span class="keywordtype">char</span> tbl_name[MAX_NAME_SIZE];
-<a name="l00116"></a>00116   <span class="keywordtype">int</span> typ=0;
-<a name="l00117"></a>00117   <span class="keywordtype">int</span> i = 0;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="keywordtype">int</span> nob =0;
-<a name="l00120"></a>00120   <span class="keywordtype">int</span> nof =0;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122   <span class="keywordtype">float</span>* distances=NULL;
-<a name="l00123"></a>00123   cpl_table* tbl_dist=NULL;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   cpl_vector* qc_dist=NULL;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="keywordtype">double</span>  qc_dist_mean=0;
-<a name="l00128"></a>00128   <span class="keywordtype">double</span>  qc_dist_stdev=0;
-<a name="l00129"></a>00129   cpl_frameset* raw=NULL;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   cpl_table* qclog_tbl=NULL;
-<a name="l00132"></a>00132   <span class="keywordtype">char</span> key_value[MAX_NAME_SIZE];
-<a name="l00133"></a>00133   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];
-<a name="l00134"></a>00134   <span class="keywordtype">int</span>  no=0;
-<a name="l00135"></a>00135   <span class="keywordtype">double</span> lo_cut=0.;
-<a name="l00136"></a>00136   <span class="keywordtype">double</span> hi_cut=0.;
-<a name="l00137"></a>00137   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139   <span class="comment">/* </span>
-<a name="l00140"></a>00140 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00141"></a>00141 <span class="comment">       1) parse the file names and parameters to the ns_config data </span>
-<a name="l00142"></a>00142 <span class="comment">          structure cfg</span>
-<a name="l00143"></a>00143 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00144"></a>00144 <span class="comment">  */</span>
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   <span class="comment">/* </span>
-<a name="l00147"></a>00147 <span class="comment">      parse the file names and parameters to the ns_config data structure cfg </span>
-<a name="l00148"></a>00148 <span class="comment">  */</span>
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   sinfo_msg(<span class="stringliteral">"Parse cpl input"</span>);
-<a name="l00151"></a>00151   check_nomsg(raw=cpl_frameset_new());
-<a name="l00152"></a>00152   cknull(cfg = sinfo_parse_cpl_input_ns(config,sof,&raw),
-<a name="l00153"></a>00153      <span class="stringliteral">"could not parse cpl input!"</span>) ;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   <span class="keywordflow">if</span> (cfg->maskInd == 1) {
-<a name="l00156"></a>00156     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {
-<a name="l00157"></a>00157       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->mask); 
-<a name="l00158"></a>00158       <span class="keywordflow">goto</span> cleanup;
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160   }
-<a name="l00161"></a>00161   <span class="comment">/*</span>
-<a name="l00162"></a>00162 <span class="comment">     --------------------------------------------------------------------</span>
-<a name="l00163"></a>00163 <span class="comment">     stack the frames in data cubes and take the clean mean of all frames</span>
-<a name="l00164"></a>00164 <span class="comment">     --------------------------------------------------------------------</span>
-<a name="l00165"></a>00165 <span class="comment">  */</span>
-<a name="l00166"></a>00166   <span class="comment">/* allocate memory for lists of object and off-frames */</span>
-<a name="l00167"></a>00167   sinfo_msg(<span class="stringliteral">"stack the frames in data cubes"</span>);
-<a name="l00168"></a>00168   check(list_object = cpl_imagelist_new(),
-<a name="l00169"></a>00169           <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171   <span class="keywordflow">if</span> (cfg->noff > 0 ) {
-<a name="l00172"></a>00172     check(list_off = cpl_imagelist_new(),
-<a name="l00173"></a>00173       <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00174"></a>00174   }
-<a name="l00175"></a>00175  
-<a name="l00176"></a>00176   <span class="comment">/*</span>
-<a name="l00177"></a>00177 <span class="comment">      #build different image lists for the different cases----</span>
-<a name="l00178"></a>00178 <span class="comment">  */</span>
-<a name="l00179"></a>00179   sinfo_msg(<span class="stringliteral">"build different image lists for the different cases"</span>);
-<a name="l00180"></a>00180   nob = 0;
-<a name="l00181"></a>00181   nof = 0;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++){
-<a name="l00184"></a>00184     name = cfg->framelist[i];
-<a name="l00185"></a>00185     <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {
-<a name="l00186"></a>00186       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00187"></a>00187       <span class="keywordflow">goto</span> cleanup;
-<a name="l00188"></a>00188     } <span class="keywordflow">else</span> {
-<a name="l00189"></a>00189       typ = sinfo_new_intarray_get_value( cfg->frametype, i );
-<a name="l00190"></a>00190       <span class="keywordflow">if</span> (typ == 1) {
-<a name="l00191"></a>00191     cpl_imagelist_set(list_object,
-<a name="l00192"></a>00192                           cpl_image_load(name,CPL_TYPE_FLOAT,0,0),nob);
-<a name="l00193"></a>00193     nob = nob + 1;
-<a name="l00194"></a>00194       } <span class="keywordflow">else</span> {
-<a name="l00195"></a>00195     cpl_imagelist_set(list_off,
-<a name="l00196"></a>00196                           cpl_image_load(name,CPL_TYPE_FLOAT,0,0),nof);
-<a name="l00197"></a>00197     nof = nof + 1;
-<a name="l00198"></a>00198       }
-<a name="l00199"></a>00199     }
-<a name="l00200"></a>00200   }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202   <span class="keywordflow">if</span> (cfg->noff != nof || cfg->nobj != nob ){       
-<a name="l00203"></a>00203       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something wrong with the number of the "</span>
-<a name="l00204"></a>00204                       <span class="stringliteral">"different types of frames"</span>);
-<a name="l00205"></a>00205       <span class="keywordflow">goto</span> cleanup;
-<a name="l00206"></a>00206   }
-<a name="l00207"></a>00207   
-<a name="l00208"></a>00208   <span class="comment">/*</span>
-<a name="l00209"></a>00209 <span class="comment">  #---take the average of the different cubes -------------</span>
-<a name="l00210"></a>00210 <span class="comment">  */</span>
-<a name="l00211"></a>00211   sinfo_msg(<span class="stringliteral">"take the average of the different cubes"</span>);
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213   check_nomsg(no=cpl_imagelist_get_size(list_object));
-<a name="l00214"></a>00214   lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00215"></a>00215   hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00216"></a>00216   check(im_on=cpl_imagelist_collapse_minmax_create(list_object,lo_cut,hi_cut),
-<a name="l00217"></a>00217               <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219   <span class="keywordflow">if</span> (cfg->noff != 0) {
-<a name="l00220"></a>00220     <span class="comment">/*</span>
-<a name="l00221"></a>00221 <span class="comment">      im_off = sinfo_average_with_rejection( cube_off, </span>
-<a name="l00222"></a>00222 <span class="comment">                                       cfg->loReject, cfg->hiReject );</span>
-<a name="l00223"></a>00223 <span class="comment">    */</span>
-<a name="l00224"></a>00224     check_nomsg(no=cpl_imagelist_get_size(list_off));
-<a name="l00225"></a>00225     lo_cut=(floor)(cfg->loReject*no+0.5);
-<a name="l00226"></a>00226     hi_cut=(floor)(cfg->hiReject*no+0.5);
-<a name="l00227"></a>00227     check(im_off=cpl_imagelist_collapse_minmax_create(list_off,lo_cut,hi_cut),
-<a name="l00228"></a>00228       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00229"></a>00229       sinfo_free_imagelist(&list_off);
-<a name="l00230"></a>00230   }
-<a name="l00231"></a>00231   sinfo_free_imagelist(&list_object);
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   <span class="comment">/*</span>
-<a name="l00234"></a>00234 <span class="comment">  #finally, subtract off from on frames and store the result in the object cube</span>
-<a name="l00235"></a>00235 <span class="comment">  */</span>
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237   <span class="keywordflow">if</span> (cfg->noff != 0) {
-<a name="l00238"></a>00238     sinfo_msg(<span class="stringliteral">"subtract off from on frames"</span>);
-<a name="l00239"></a>00239     check(im_on_sub = cpl_image_subtract_create(im_on, im_off),
-<a name="l00240"></a>00240       <span class="stringliteral">"sinfo_sub_image failed"</span> );
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242     sinfo_free_image(&im_on);
-<a name="l00243"></a>00243     sinfo_free_image(&im_off);
-<a name="l00244"></a>00244   } <span class="keywordflow">else</span> {
-<a name="l00245"></a>00245     check_nomsg(im_on_sub = cpl_image_duplicate(im_on));
-<a name="l00246"></a>00246     sinfo_free_image(&im_on);
-<a name="l00247"></a>00247   }
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   <span class="comment">/*</span>
-<a name="l00250"></a>00250 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00251"></a>00251 <span class="comment">  # convolution with Gaussian if recommended</span>
-<a name="l00252"></a>00252 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00253"></a>00253 <span class="comment">  */</span>
-<a name="l00254"></a>00254   <span class="keywordflow">if</span> (cfg->gaussInd == 1) {
-<a name="l00255"></a>00255     sinfo_msg(<span class="stringliteral">"convolution with Gaussian"</span>);
-<a name="l00256"></a>00256     cknull(im_on_gauss = sinfo_new_convolve_ns_image_by_gauss(im_on_sub, 
-<a name="l00257"></a>00257                                                               cfg->hw),
-<a name="l00258"></a>00258                      <span class="stringliteral">"could not carry out sinfo_convolveNSImageByGauss"</span> );
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     sinfo_free_image(&im_on_sub);
-<a name="l00261"></a>00261     check_nomsg(im_on_sub = cpl_image_duplicate(im_on_gauss));
-<a name="l00262"></a>00262     sinfo_free_image(&im_on_gauss);
-<a name="l00263"></a>00263   }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265   <span class="comment">/*</span>
-<a name="l00266"></a>00266 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00267"></a>00267 <span class="comment">  # static bad pixel indication</span>
-<a name="l00268"></a>00268 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00269"></a>00269 <span class="comment">  */</span>
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    <span class="keywordflow">if</span> (cfg->maskInd == 1) {
-<a name="l00272"></a>00272      sinfo_msg(<span class="stringliteral">"static bad pixel indication"</span>);
-<a name="l00273"></a>00273      check(im_mask = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l00274"></a>00274        <span class="stringliteral">"could not load static bad pixel mask"</span> );
-<a name="l00275"></a>00275      cknull(im_on_ind = sinfo_new_mult_image_by_mask(im_on_sub, im_mask),
-<a name="l00276"></a>00276         <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );
-<a name="l00277"></a>00277      sinfo_free_image(&im_mask);
-<a name="l00278"></a>00278      sinfo_free_image(&im_on_sub);
-<a name="l00279"></a>00279   
-<a name="l00280"></a>00280    } <span class="keywordflow">else</span> {
-<a name="l00281"></a>00281       check_nomsg(im_on_ind = cpl_image_duplicate(im_on_sub));
-<a name="l00282"></a>00282       sinfo_free_image(&im_on_sub);
-<a name="l00283"></a>00283    }
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285    <span class="keywordflow">if</span>(pdensity > 1 && strcmp(plugin_id,<span class="stringliteral">"sinfo_rec_distortion"</span>)!=0) {
-<a name="l00286"></a>00286      ck0(sinfo_pro_save_ima(im_on_ind,ref_set,sof,cfg->fitsname,
-<a name="l00287"></a>00287                 PRO_MASTER_SLIT,NULL,plugin_id,config),
-<a name="l00288"></a>00288      <span class="stringliteral">"cannot save ima %s"</span>, cfg->fitsname);
-<a name="l00289"></a>00289    }
-<a name="l00290"></a>00290  
-<a name="l00291"></a>00291    <span class="comment">/*</span>
-<a name="l00292"></a>00292 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00293"></a>00293 <span class="comment">   # do the north - south - test</span>
-<a name="l00294"></a>00294 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00295"></a>00295 <span class="comment">   */</span>
-<a name="l00296"></a>00296    sinfo_msg(<span class="stringliteral">"Do the north - south - test"</span>);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298    cknull(distances = sinfo_north_south_test(im_on_ind, 
-<a name="l00299"></a>00299                        cfg->nslits,
-<a name="l00300"></a>00300                        cfg->halfWidth,
-<a name="l00301"></a>00301                        cfg->fwhm ,
-<a name="l00302"></a>00302                        cfg->minDiff,
-<a name="l00303"></a>00303                        cfg->estimated_dist,
-<a name="l00304"></a>00304                                            cfg->devtol, 
-<a name="l00305"></a>00305                                            IMA_PIX_START, 
-<a name="l00306"></a>00306                                            IMA_PIX_END ),
-<a name="l00307"></a>00307       <span class="stringliteral">"North South Test distance determination failed"</span>);
-<a name="l00308"></a>00308    sinfo_free_image(&im_on_ind);
-<a name="l00309"></a>00309     <span class="comment">/*</span>
-<a name="l00310"></a>00310 <span class="comment">   sinfo_new_parameter_to_ascii(distances, cfg->nslits - 1, cfg->outName);</span>
-<a name="l00311"></a>00311 <span class="comment">   */</span>
-<a name="l00312"></a>00312    check_nomsg(tbl_dist = cpl_table_new(cfg->nslits - 1));
-<a name="l00313"></a>00313    check_nomsg(cpl_table_new_column(tbl_dist,<span class="stringliteral">"slitlet_distance"</span>,
-<a name="l00314"></a>00314                     CPL_TYPE_FLOAT));
-<a name="l00315"></a>00315    check_nomsg(cpl_table_copy_data_float(tbl_dist,<span class="stringliteral">"slitlet_distance"</span>,
-<a name="l00316"></a>00316                      distances));
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318    strcpy(tbl_name,cfg->outName);
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320    check_nomsg(qclog_tbl = cpl_table_new(cfg->nslits + 1));
-<a name="l00321"></a>00321    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_name"</span>, CPL_TYPE_STRING));
-<a name="l00322"></a>00322    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_type"</span>, CPL_TYPE_STRING));
-<a name="l00323"></a>00323    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_value"</span>, CPL_TYPE_STRING));
-<a name="l00324"></a>00324    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_help"</span>, CPL_TYPE_STRING));
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326    check_nomsg(qc_dist=cpl_vector_new(cfg->nslits - 1));
-<a name="l00327"></a>00327  
-<a name="l00328"></a>00328    <span class="keywordflow">for</span>(i=0;i<cfg->nslits - 1;i++) {
-<a name="l00329"></a>00329          snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i"</span>,<span class="stringliteral">"QC SL DIST"</span>,i);
-<a name="l00330"></a>00330          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,i,key_name);
-<a name="l00331"></a>00331          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,i,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);
-<a name="l00332"></a>00332          snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,distances[i]);
-<a name="l00333"></a>00333          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,i,key_value);
-<a name="l00334"></a>00334          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,i,<span class="stringliteral">"Slitlet distance"</span>);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336          cpl_vector_set(qc_dist,i,distances[i]);
-<a name="l00337"></a>00337    }
-<a name="l00338"></a>00338    check_nomsg(qc_dist_mean=cpl_vector_get_mean(qc_dist));
-<a name="l00339"></a>00339    check_nomsg(qc_dist_stdev=cpl_vector_get_stdev(qc_dist));
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,cfg->nslits-1,<span class="stringliteral">"QC SL DISTAVG"</span>);
-<a name="l00342"></a>00342    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,cfg->nslits-1,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);
-<a name="l00343"></a>00343    snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,cpl_vector_get_mean(qc_dist));
-<a name="l00344"></a>00344    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,cfg->nslits-1,key_value);
-<a name="l00345"></a>00345    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,cfg->nslits-1,
-<a name="l00346"></a>00346                                   <span class="stringliteral">"Average Slitlet distance"</span>);
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,cfg->nslits,<span class="stringliteral">"QC SL DISTRMS"</span>);
-<a name="l00349"></a>00349    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,cfg->nslits,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);
-<a name="l00350"></a>00350    snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,qc_dist_stdev);
-<a name="l00351"></a>00351    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,cfg->nslits,key_value);
-<a name="l00352"></a>00352    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,cfg->nslits,
-<a name="l00353"></a>00353                         <span class="stringliteral">"RMS Slitlet distance"</span>);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355    ck0(sinfo_pro_save_tbl(tbl_dist,ref_set,sof,tbl_name,
-<a name="l00356"></a>00356            PRO_SLITLETS_DISTANCE,qclog_tbl,plugin_id,config),
-<a name="l00357"></a>00357        <span class="stringliteral">"cannot dump tbl %s"</span>, tbl_name);
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359    sinfo_free_my_vector(&qc_dist);
-<a name="l00360"></a>00360    sinfo_free_table(&tbl_dist);
-<a name="l00361"></a>00361    sinfo_free_table(&qclog_tbl);
-<a name="l00362"></a>00362    sinfo_free_float(&distances);
-<a name="l00363"></a>00363    sinfo_ns_free (&cfg);
-<a name="l00364"></a>00364    sinfo_free_frameset(&raw);
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366   <span class="keywordflow">return</span> 0;
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368   cleanup:
-<a name="l00369"></a>00369   sinfo_free_my_vector(&qc_dist);
-<a name="l00370"></a>00370   sinfo_free_table(&tbl_dist);
-<a name="l00371"></a>00371   sinfo_free_table(&qclog_tbl);
-<a name="l00372"></a>00372   sinfo_free_float(&distances);
-<a name="l00373"></a>00373   sinfo_free_table(&tbl_dist);
-<a name="l00374"></a>00374   sinfo_free_table(&qclog_tbl);
-<a name="l00375"></a>00375   sinfo_free_imagelist(&list_object);
-<a name="l00376"></a>00376   sinfo_free_imagelist(&list_off);
-<a name="l00377"></a>00377   sinfo_free_image(&im_on);
-<a name="l00378"></a>00378   sinfo_free_image(&im_mask);
-<a name="l00379"></a>00379   sinfo_free_image(&im_on_gauss);
-<a name="l00380"></a>00380   sinfo_free_image(&im_on_sub);
-<a name="l00381"></a>00381   sinfo_free_image(&im_off);
-<a name="l00382"></a>00382   sinfo_free_image(&im_on_ind);
-<a name="l00383"></a>00383   sinfo_ns_free (&cfg);
-<a name="l00384"></a>00384   sinfo_free_frameset(&raw);
-<a name="l00385"></a>00385   <span class="keywordflow">return</span> -1;
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388 }
-<a name="l00389"></a>00389 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_nst.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">     File name    :       spiffi_north_south_test.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  : </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * nsh.h</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * position.</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * sub-pixel positions for each row.</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * Then the distances are determined in each row and averaged</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Result: are distances of each slitlet from each other => 31 values stored </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> *  in an ASCII file this Python script needs a frame of a pinhole source with </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *  a continuous spectrum, that is shifted exactly perpendicular to the </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> *  slitlets. It fits the spectra in spatial direction by a Gaussian fit </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> *  function and therefore determines the sub-pixel position of the source.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> *  Then the distances of the slitlets from each other are determined and </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *   saved in an ASCII list. </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_new_nst.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "sinfo_ns_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">   Function     :       north_south_test()</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   Job          : Result of a north-south test exposure are 32 continuum </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                  spectra of a pinhole    that means one spectrum in each </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                  slitlet at the same spatial position.</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">                  Each spectrum is fitted in sp[atial direction by a Gaussian</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">                  to get the sub-pixel positions for each row.</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment"></span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">                  Then the distances are determined in each row and averaged</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">                  Result: are distances of each slitlet from each other =></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                          31 values stored in an ASCII file</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment"></span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> sinfo_new_nst(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>               cpl_parameterlist* config, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>               cpl_frameset* sof,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>               cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   ns_config * cfg=NULL ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_imagelist * list_object=NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_imagelist * list_off=NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_image * im_on=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_image * im_on_sub=NULL ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_image * im_on_ind=NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   cpl_image * im_on_gauss=NULL ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   cpl_image * im_mask=NULL ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   cpl_image * im_off=NULL ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordtype">char</span> tbl_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   <span class="keywordtype">int</span> typ=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordtype">int</span> nob =0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   <span class="keywordtype">int</span> nof =0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">float</span>* distances=NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   cpl_table* tbl_dist=NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_vector* qc_dist=NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">double</span>  qc_dist_mean=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">double</span>  qc_dist_stdev=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">char</span> key_value[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">int</span>  no=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">double</span> lo_cut=0.;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">double</span> hi_cut=0.;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">       1) parse the file names and parameters to the ns_config data </span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">          structure cfg</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">      parse the file names and parameters to the ns_config data structure cfg </span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   sinfo_msg(<span class="stringliteral">"Parse cpl input"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   cknull(cfg = sinfo_parse_cpl_input_ns(config,sof,&raw),</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>      <span class="stringliteral">"could not parse cpl input!"</span>) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">if</span> (cfg->maskInd == 1) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->mask); </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">     --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">     stack the frames in data cubes and take the clean mean of all frames</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">     --------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">/* allocate memory for lists of object and off-frames */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   sinfo_msg(<span class="stringliteral">"stack the frames in data cubes"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   check(list_object = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordflow">if</span> (cfg->noff > 0 ) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     check(list_off = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>  </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">      #build different image lists for the different cases----</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   sinfo_msg(<span class="stringliteral">"build different image lists for the different cases"</span>);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   nob = 0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   nof = 0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++){</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     name = cfg->framelist[i];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       typ = sinfo_new_intarray_get_value( cfg->frametype, i );</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       <span class="keywordflow">if</span> (typ == 1) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_imagelist_set(list_object,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                           cpl_image_load(name,CPL_TYPE_FLOAT,0,0),nob);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     nob = nob + 1;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_imagelist_set(list_off,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                           cpl_image_load(name,CPL_TYPE_FLOAT,0,0),nof);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     nof = nof + 1;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordflow">if</span> (cfg->noff != nof || cfg->nobj != nob ){       </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something wrong with the number of the "</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                       <span class="stringliteral">"different types of frames"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">  #---take the average of the different cubes -------------</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   sinfo_msg(<span class="stringliteral">"take the average of the different cubes"</span>);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   check_nomsg(no=cpl_imagelist_get_size(list_object));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   check(im_on=cpl_imagelist_collapse_minmax_create(list_object,lo_cut,hi_cut),</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>               <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">if</span> (cfg->noff != 0) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">      im_off = sinfo_average_with_rejection( cube_off, </span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">                                       cfg->loReject, cfg->hiReject );</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     check_nomsg(no=cpl_imagelist_get_size(list_off));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     lo_cut=(floor)(cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     hi_cut=(floor)(cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     check(im_off=cpl_imagelist_collapse_minmax_create(list_off,lo_cut,hi_cut),</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       sinfo_free_imagelist(&list_off);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">  #finally, subtract off from on frames and store the result in the object cube</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordflow">if</span> (cfg->noff != 0) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     sinfo_msg(<span class="stringliteral">"subtract off from on frames"</span>);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     check(im_on_sub = cpl_image_subtract_create(im_on, im_off),</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       <span class="stringliteral">"sinfo_sub_image failed"</span> );</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     sinfo_free_image(&im_on);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     sinfo_free_image(&im_off);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     check_nomsg(im_on_sub = cpl_image_duplicate(im_on));</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     sinfo_free_image(&im_on);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">  # convolution with Gaussian if recommended</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">if</span> (cfg->gaussInd == 1) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     sinfo_msg(<span class="stringliteral">"convolution with Gaussian"</span>);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cknull(im_on_gauss = sinfo_new_convolve_ns_image_by_gauss(im_on_sub, </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                                                               cfg->hw),</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                      <span class="stringliteral">"could not carry out sinfo_convolveNSImageByGauss"</span> );</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     sinfo_free_image(&im_on_sub);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     check_nomsg(im_on_sub = cpl_image_duplicate(im_on_gauss));</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     sinfo_free_image(&im_on_gauss);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">  # static bad pixel indication</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    <span class="keywordflow">if</span> (cfg->maskInd == 1) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>      sinfo_msg(<span class="stringliteral">"static bad pixel indication"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>      check(im_mask = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>        <span class="stringliteral">"could not load static bad pixel mask"</span> );</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>      cknull(im_on_ind = sinfo_new_mult_image_by_mask(im_on_sub, im_mask),</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>         <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>      sinfo_free_image(&im_mask);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>      sinfo_free_image(&im_on_sub);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       check_nomsg(im_on_ind = cpl_image_duplicate(im_on_sub));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       sinfo_free_image(&im_on_sub);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>    <span class="keywordflow">if</span>(pdensity > 1 && strcmp(plugin_id,<span class="stringliteral">"sinfo_rec_distortion"</span>)!=0) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>      ck0(sinfo_pro_save_ima(im_on_ind,ref_set,sof,cfg->fitsname,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                 PRO_MASTER_SLIT,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>      <span class="stringliteral">"cannot save ima %s"</span>, cfg->fitsname);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>  </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">   # do the north - south - test</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    sinfo_msg(<span class="stringliteral">"Do the north - south - test"</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>    cknull(distances = sinfo_north_south_test(im_on_ind, </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                        cfg->nslits,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                        cfg->halfWidth,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                        cfg->fwhm ,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                        cfg->minDiff,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                        cfg->estimated_dist,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                            cfg->devtol, </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                            IMA_PIX_START, </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                            IMA_PIX_END ),</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       <span class="stringliteral">"North South Test distance determination failed"</span>);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    sinfo_free_image(&im_on_ind);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">   sinfo_new_parameter_to_ascii(distances, cfg->nslits - 1, cfg->outName);</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    check_nomsg(tbl_dist = cpl_table_new(cfg->nslits - 1));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>    check_nomsg(cpl_table_new_column(tbl_dist,<span class="stringliteral">"slitlet_distance"</span>,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                     CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>    check_nomsg(cpl_table_copy_data_float(tbl_dist,<span class="stringliteral">"slitlet_distance"</span>,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                      distances));</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>    strcpy(tbl_name,cfg->outName);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>    check_nomsg(qclog_tbl = cpl_table_new(cfg->nslits + 1));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_name"</span>, CPL_TYPE_STRING));</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_type"</span>, CPL_TYPE_STRING));</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_value"</span>, CPL_TYPE_STRING));</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>    check_nomsg(cpl_table_new_column(qclog_tbl,<span class="stringliteral">"key_help"</span>, CPL_TYPE_STRING));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>    check_nomsg(qc_dist=cpl_vector_new(cfg->nslits - 1));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>  </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>    <span class="keywordflow">for</span>(i=0;i<cfg->nslits - 1;i++) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>          snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%i"</span>,<span class="stringliteral">"QC SL DIST"</span>,i);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,i,key_name);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,i,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>          snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,distances[i]);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,i,key_value);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>          cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,i,<span class="stringliteral">"Slitlet distance"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>          cpl_vector_set(qc_dist,i,distances[i]);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>    }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>    check_nomsg(qc_dist_mean=cpl_vector_get_mean(qc_dist));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>    check_nomsg(qc_dist_stdev=cpl_vector_get_stdev(qc_dist));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,cfg->nslits-1,<span class="stringliteral">"QC SL DISTAVG"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,cfg->nslits-1,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>    snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,cpl_vector_get_mean(qc_dist));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,cfg->nslits-1,key_value);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,cfg->nslits-1,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                                   <span class="stringliteral">"Average Slitlet distance"</span>);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_name"</span>,cfg->nslits,<span class="stringliteral">"QC SL DISTRMS"</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_type"</span>,cfg->nslits,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    snprintf(key_value,MAX_NAME_SIZE-1,<span class="stringliteral">"%g"</span>,qc_dist_stdev);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_value"</span>,cfg->nslits,key_value);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>    cpl_table_set_string(qclog_tbl,<span class="stringliteral">"key_help"</span>,cfg->nslits,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                         <span class="stringliteral">"RMS Slitlet distance"</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>    ck0(sinfo_pro_save_tbl(tbl_dist,ref_set,sof,tbl_name,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>            PRO_SLITLETS_DISTANCE,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>        <span class="stringliteral">"cannot dump tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>    sinfo_free_my_vector(&qc_dist);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>    sinfo_free_table(&tbl_dist);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>    sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>    sinfo_free_float(&distances);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>    sinfo_ns_free (&cfg);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>    sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   cleanup:</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   sinfo_free_my_vector(&qc_dist);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   sinfo_free_table(&tbl_dist);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   sinfo_free_float(&distances);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   sinfo_free_table(&tbl_dist);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   sinfo_free_imagelist(&list_off);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   sinfo_free_image(&im_on);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   sinfo_free_image(&im_mask);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   sinfo_free_image(&im_on_gauss);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   sinfo_free_image(&im_on_sub);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   sinfo_free_image(&im_off);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   sinfo_free_image(&im_on_ind);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   sinfo_ns_free (&cfg);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__nst_8h_source.html b/html/sinfo__new__nst_8h_source.html
index 8a28afd..e52eaa5 100644
--- a/html/sinfo__new__nst_8h_source.html
+++ b/html/sinfo__new__nst_8h_source.html
@@ -2,102 +2,133 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_nst.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_nst.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_NST_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_NST_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_nst.h,v 1.7 2007/09/21 14:49:00 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * new_nsh.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span>
-<a name="l00034"></a>00034 <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span>
-<a name="l00035"></a>00035 <span class="comment"> * position.</span>
-<a name="l00036"></a>00036 <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span>
-<a name="l00037"></a>00037 <span class="comment"> * sub-pixel positions for each row.</span>
-<a name="l00038"></a>00038 <span class="comment"> *</span>
-<a name="l00039"></a>00039 <span class="comment"> * Then the distances are determined in each row and averaged</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Result: are distances of each slitlet from each other => 31 values stored </span>
-<a name="l00042"></a>00042 <span class="comment"> *  in an ASCII file this Python script needs a frame of a pinhole source with </span>
-<a name="l00043"></a>00043 <span class="comment"> *  a continuous spectrum, that is shifted exactly perpendicular to the </span>
-<a name="l00044"></a>00044 <span class="comment"> *  slitlets. It fits the spectra in spatial direction by a Gaussian fit </span>
-<a name="l00045"></a>00045 <span class="comment"> *  function and therefore determines the sub-pixel position of the source.</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> *  Then the distances of the slitlets from each other are determined and </span>
-<a name="l00048"></a>00048 <span class="comment"> *   saved in an ASCII list. </span>
-<a name="l00049"></a>00049 <span class="comment"> *</span>
-<a name="l00050"></a>00050 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment"> */</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*</span>
-<a name="l00054"></a>00054 <span class="comment"> * header files</span>
-<a name="l00055"></a>00055 <span class="comment"> */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00058"></a>00058 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00060"></a>00060 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">   Function     :       sinfo_nst()</span>
-<a name="l00064"></a>00064 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00065"></a>00065 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00066"></a>00066 <span class="comment">   Job          :</span>
-<a name="l00067"></a>00067 <span class="comment">       </span>
-<a name="l00068"></a>00068 <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span>
-<a name="l00069"></a>00069 <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span>
-<a name="l00070"></a>00070 <span class="comment"> * position.</span>
-<a name="l00071"></a>00071 <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span>
-<a name="l00072"></a>00072 <span class="comment"> * sub-pixel positions for each row.</span>
-<a name="l00073"></a>00073 <span class="comment"> *</span>
-<a name="l00074"></a>00074 <span class="comment"> * Then the distances are determined in each row and averaged </span>
-<a name="l00075"></a>00075 <span class="comment"></span>
-<a name="l00076"></a>00076 <span class="comment"></span>
-<a name="l00077"></a>00077 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 <span class="keywordtype">int</span> 
-<a name="l00079"></a>00079 sinfo_new_nst (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00080"></a>00080                cpl_parameterlist* config,
-<a name="l00081"></a>00081                cpl_frameset* <span class="keyword">set</span>,
-<a name="l00082"></a>00082                cpl_frameset* ref_set) ;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="preprocessor">#endif </span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>
-<a name="l00087"></a>00087 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_nst.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_NST_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_NST_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_nst.h,v 1.7 2007/09/21 14:49:00 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * new_nsh.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * position.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> * sub-pixel positions for each row.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * Then the distances are determined in each row and averaged</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Result: are distances of each slitlet from each other => 31 values stored </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *  in an ASCII file this Python script needs a frame of a pinhole source with </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *  a continuous spectrum, that is shifted exactly perpendicular to the </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *  slitlets. It fits the spectra in spatial direction by a Gaussian fit </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *  function and therefore determines the sub-pixel position of the source.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> *  Then the distances of the slitlets from each other are determined and </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> *   saved in an ASCII list. </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   Function     :       sinfo_nst()</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">       </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> * Result of a north-south test exposure are 32 continuum spectra of a </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> * pinhole that means one spectrum in each slitlet at the same spatial </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> * position.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"> * Each spectrum is fitted in sp[atial direction by a Gaussian to get the </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> * sub-pixel positions for each row.</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> * Then the distances are determined in each row and averaged </span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_new_nst (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                cpl_parameterlist* config,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                cpl_frameset* <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                cpl_frameset* ref_set) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__objnod_8c_source.html b/html/sinfo__new__objnod_8c_source.html
index fd8358c..bd99d8d 100644
--- a/html/sinfo__new__objnod_8c_source.html
+++ b/html/sinfo__new__objnod_8c_source.html
@@ -2,883 +2,914 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_objnod.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_objnod.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_new_objnod.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    December 3, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    Creates data cubes or merges data cubes </span>
-<a name="l00025"></a>00025 <span class="comment">                        out of jittered object-sky</span>
-<a name="l00026"></a>00026 <span class="comment">                        nodding observations </span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_new_objnod.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span> 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                                Defines</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                             Function Definitions</span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00065"></a>00065 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">   Function     : sinfo_new_objnod()</span>
-<a name="l00067"></a>00067 <span class="comment">   In           : ini_file: file name of according .ini file</span>
-<a name="l00068"></a>00068 <span class="comment">   Out          : integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00069"></a>00069 <span class="comment">   Job          : this routine carries through the data cube creation of an </span>
-<a name="l00070"></a>00070 <span class="comment">                  object science observation using object-sky nodding</span>
-<a name="l00071"></a>00071 <span class="comment">                  and jittering. This script expects jittered frames that</span>
-<a name="l00072"></a>00072 <span class="comment">          were already sky-subtracted</span>
-<a name="l00073"></a>00073 <span class="comment">                  averaged, flatfielded, spectral tilt corrected and </span>
-<a name="l00074"></a>00074 <span class="comment">        interleaved if necessary</span>
-<a name="l00075"></a>00075 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 <span class="keywordtype">int</span> sinfo_new_objnod (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config, 
-<a name="l00077"></a>00077             cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)
-<a name="l00078"></a>00078 {
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     object_config * cfg=NULL ;
-<a name="l00081"></a>00081     cpl_image * im=NULL ;
-<a name="l00082"></a>00082     cpl_image * wavemapim=NULL ;
-<a name="l00083"></a>00083     cpl_image * resampledImage=NULL ;
-<a name="l00084"></a>00084     cpl_image * calim=NULL ;
-<a name="l00085"></a>00085     cpl_image * halospec=NULL ;
-<a name="l00086"></a>00086     cpl_image * sky_im=NULL;
-<a name="l00087"></a>00087     cpl_image* res_flat=NULL;
-<a name="l00088"></a>00088     cpl_image* res_sky=NULL;
-<a name="l00089"></a>00089     cpl_image* flat_im=NULL;
-<a name="l00090"></a>00090     cpl_image* jitter_image=NULL;
-<a name="l00091"></a>00091     cpl_image* eima_avg=NULL;
-<a name="l00092"></a>00092     cpl_image* eima_med=NULL;
-<a name="l00093"></a>00093     cpl_imagelist  * cube=NULL ;
-<a name="l00094"></a>00094     cpl_imagelist  * outcube=NULL ;
-<a name="l00095"></a>00095     cpl_imagelist  * outcube2=NULL ;
-<a name="l00096"></a>00096     cpl_imagelist  ** cubeobject=NULL ;
-<a name="l00097"></a>00097     cpl_imagelist  ** cube_tmp=NULL ;
-<a name="l00098"></a>00098     cpl_imagelist  * jittercube=NULL ;
-<a name="l00099"></a>00099     cpl_imagelist  * maskcube=NULL ;
-<a name="l00100"></a>00100     cpl_imagelist* cflat=NULL;
-<a name="l00101"></a>00101     cpl_imagelist* cflat2=NULL;
-<a name="l00102"></a>00102     cpl_imagelist* csky=NULL;
-<a name="l00103"></a>00103     cpl_imagelist* csky2=NULL;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="keywordtype">int</span> i=0;
-<a name="l00107"></a>00107     <span class="keywordtype">int</span> n=0;
-<a name="l00108"></a>00108     <span class="keywordtype">int</span> partind = 0 ;
-<a name="l00109"></a>00109     <span class="keywordtype">int</span> centralpix=0 ;
-<a name="l00110"></a>00110     <span class="keywordtype">int</span> z_siz=0;
-<a name="l00111"></a>00111     <span class="keywordtype">int</span> z_min=0;
-<a name="l00112"></a>00112     <span class="keywordtype">int</span> z_max=0;
-<a name="l00113"></a>00113     <span class="keywordtype">int</span> z=0;
-<a name="l00114"></a>00114     <span class="keywordtype">int</span> z_stp=100;
-<a name="l00115"></a>00115     <span class="keywordtype">int</span> scales_sky=0;
-<a name="l00116"></a>00116     <span class="keywordtype">int</span> ks_clip=0;
-<a name="l00117"></a>00117     <span class="keywordtype">double</span> kappa=2.0;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="keywordtype">float</span> ref_offx=0;
-<a name="l00120"></a>00120     <span class="keywordtype">float</span> ref_offy=0;
-<a name="l00121"></a>00121     <span class="keywordtype">float</span> mi=0 ;
-<a name="l00122"></a>00122     <span class="keywordtype">float</span> ma=0 ;
-<a name="l00123"></a>00123     <span class="keywordtype">float</span> fcol=0 ;
-<a name="l00124"></a>00124     <span class="keywordtype">float</span> center_x=0;
-<a name="l00125"></a>00125     <span class="keywordtype">float</span> newcenter_x=0 ;
-<a name="l00126"></a>00126     <span class="keywordtype">float</span> center_y=0;
-<a name="l00127"></a>00127     <span class="keywordtype">float</span> newcenter_y=0;
-<a name="l00128"></a>00128     <span class="keywordtype">float</span> cd1_1=0;
-<a name="l00129"></a>00129     <span class="keywordtype">float</span> cd1_2=0;
-<a name="l00130"></a>00130     <span class="keywordtype">float</span> cd2_1=0;
-<a name="l00131"></a>00131     <span class="keywordtype">float</span> cd2_2=0;
-<a name="l00132"></a>00132     <span class="keywordtype">float</span> pixelscale=0;
-<a name="l00133"></a>00133     <span class="keywordtype">float</span> angle=0;
-<a name="l00134"></a>00134     <span class="keywordtype">float</span> radangle=0;
-<a name="l00135"></a>00135     <span class="keywordtype">double</span> exptime=0;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="keywordtype">float</span> *  correct_dist=NULL ;
-<a name="l00138"></a>00138     <span class="keywordtype">float</span> * distances=NULL ;
-<a name="l00139"></a>00139     <span class="keywordtype">double</span> * times=NULL ;
-<a name="l00140"></a>00140     <span class="keywordtype">float</span> * offsetx=NULL;
-<a name="l00141"></a>00141     <span class="keywordtype">float</span> * offsety=NULL;
-<a name="l00142"></a>00142     <span class="keywordtype">float</span> ** slit_edges=NULL ;
-<a name="l00143"></a>00143     <span class="keywordtype">float</span> offx_min=1.e10;
-<a name="l00144"></a>00144     <span class="keywordtype">float</span> offy_min=1.e10;
-<a name="l00145"></a>00145     <span class="keywordtype">float</span> offx_max=-1.e10;
-<a name="l00146"></a>00146     <span class="keywordtype">float</span> offy_max=-1.e10;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keywordtype">double</span> dis=0;
-<a name="l00149"></a>00149     <span class="keywordtype">double</span> centralLambda=0;
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="keywordtype">char</span> name_jitter[MAX_NAME_SIZE] ;
-<a name="l00152"></a>00152     <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];
-<a name="l00153"></a>00153     <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];
-<a name="l00154"></a>00154     <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keywordtype">char</span> * name=NULL ;
-<a name="l00158"></a>00158     <span class="keywordtype">char</span> * partname=NULL;
-<a name="l00159"></a>00159     <span class="keywordtype">char</span> * partname2=NULL;
-<a name="l00160"></a>00160     <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];
-<a name="l00161"></a>00161     <span class="keywordtype">int</span> vllx=0;
-<a name="l00162"></a>00162     <span class="keywordtype">int</span> vlly=0;
-<a name="l00163"></a>00163     <span class="keywordtype">int</span> vurx=0;
-<a name="l00164"></a>00164     <span class="keywordtype">int</span> vury=0;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="keywordtype">int</span> onp=0;
-<a name="l00167"></a>00167     <span class="keywordtype">int</span> j=0;
-<a name="l00168"></a>00168     cpl_image* j_img=NULL;
-<a name="l00169"></a>00169     cpl_image* m_img=NULL;
-<a name="l00170"></a>00170     cpl_table* qclog_tbl=NULL;
-<a name="l00171"></a>00171     cpl_image* ill_cor=NULL;
-<a name="l00172"></a>00172     cpl_frame* frame=NULL;
-<a name="l00173"></a>00173     cpl_frameset* stk=NULL;
-<a name="l00174"></a>00174     cpl_parameter* p=NULL;
-<a name="l00175"></a>00175     cpl_propertylist* plist=NULL;
-<a name="l00176"></a>00176     <span class="keywordtype">int</span> mosaic_max_size=0;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00179"></a>00179                      <span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>));
-<a name="l00180"></a>00180     check_nomsg(mosaic_max_size=cpl_parameter_get_int(p));
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182      <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {
-<a name="l00183"></a>00183     strcpy(pro_mjit,PRO_MASK_COADD_STD);
-<a name="l00184"></a>00184     strcpy(pro_obs,PRO_OBS_STD);
-<a name="l00185"></a>00185     strcpy(pro_med,PRO_MED_COADD_STD);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {
-<a name="l00188"></a>00188     strcpy(pro_mjit,PRO_MASK_COADD_PSF);
-<a name="l00189"></a>00189     strcpy(pro_obs,PRO_OBS_PSF);
-<a name="l00190"></a>00190     strcpy(pro_med,PRO_MED_COADD_PSF);
-<a name="l00191"></a>00191     } <span class="keywordflow">else</span> {
-<a name="l00192"></a>00192     strcpy(pro_mjit,PRO_MASK_COADD_OBJ);
-<a name="l00193"></a>00193     strcpy(pro_obs,PRO_OBS_OBJ);
-<a name="l00194"></a>00194     strcpy(pro_med,PRO_MED_COADD_OBJ);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span>
-<a name="l00199"></a>00199     check_nomsg(stk = cpl_frameset_new());
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),
-<a name="l00202"></a>00202        <span class="stringliteral">"Error setting parameter configuration"</span>);
-<a name="l00203"></a>00203  
-<a name="l00204"></a>00204     ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> ( cfg->jitterind == 1 )
-<a name="l00207"></a>00207     {
-<a name="l00208"></a>00208         cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (cfg->nframes, sizeof (<span class="keywordtype">double</span>)), 
-<a name="l00209"></a>00209            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00210"></a>00210  
-<a name="l00211"></a>00211         cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00212"></a>00212            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214         cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00215"></a>00215            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00216"></a>00216     }
-<a name="l00217"></a>00217   
-<a name="l00218"></a>00218     <span class="keywordflow">if</span> (cfg->jitterind == 0)
-<a name="l00219"></a>00219     {
-<a name="l00220"></a>00220         <span class="keywordflow">if</span> ( NULL != (partname = strtok(cfg->outName, <span class="stringliteral">"."</span>))) 
-<a name="l00221"></a>00221         {
-<a name="l00222"></a>00222             partname2 = strtok (NULL, <span class="stringliteral">"."</span>) ;
-<a name="l00223"></a>00223             partind = 1 ;
-<a name="l00224"></a>00224         }
-<a name="l00225"></a>00225     }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     ck0(sinfo_auto_size_cube5(cfg,&ref_offx,&ref_offy,
-<a name="l00228"></a>00228                                 &offx_min,&offy_min,
-<a name="l00229"></a>00229                                 &offx_max,&offy_max),
-<a name="l00230"></a>00230                              <span class="stringliteral">"Error resizing cube"</span>);
-<a name="l00231"></a>00231   
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.fcol"</span>));
-<a name="l00235"></a>00235     check_nomsg(fcol=cpl_parameter_get_double(p));
-<a name="l00236"></a>00236    
-<a name="l00237"></a>00237     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_ILL_COR)) {
-<a name="l00238"></a>00238      sinfo_msg(<span class="stringliteral">"Illumination correction cube is provided"</span>);
-<a name="l00239"></a>00239      frame = cpl_frameset_find(sof,PRO_ILL_COR);
-<a name="l00240"></a>00240      ill_cor=cpl_image_load(cpl_frame_get_filename(frame),CPL_TYPE_FLOAT,0,0);
-<a name="l00241"></a>00241     } <span class="keywordflow">else</span> {
-<a name="l00242"></a>00242      sinfo_msg(<span class="stringliteral">"Illumination correction cube not provided"</span>);
-<a name="l00243"></a>00243      cpl_error_reset();
-<a name="l00244"></a>00244     }
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246      <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )
-<a name="l00247"></a>00247      {
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249         sinfo_msg(<span class="stringliteral">"Read FITS information"</span>);
-<a name="l00250"></a>00250         name = cfg->framelist[n] ;    
-<a name="l00251"></a>00251         <span class="keywordflow">if</span> (n == 0)
-<a name="l00252"></a>00252     {
-<a name="l00253"></a>00253         strcpy (name_jitter, name) ;
-<a name="l00254"></a>00254     }   
-<a name="l00255"></a>00255         <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {
-<a name="l00256"></a>00256           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00257"></a>00257           <span class="keywordflow">goto</span> cleanup;
-<a name="l00258"></a>00258     }
-<a name="l00259"></a>00259     
-<a name="l00260"></a>00260     <span class="comment">/* get some header values and compute the CD-sinfo_matrix */</span>
-<a name="l00261"></a>00261         plist=cpl_propertylist_load(name,0);
-<a name="l00262"></a>00262     pixelscale = sinfo_pfits_get_pixscale(plist) /2;
-<a name="l00263"></a>00263     angle = sinfo_pfits_get_posangle(plist) ;
-<a name="l00264"></a>00264         <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span>
-<a name="l00265"></a>00265         <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00266"></a>00266       cpl_error_reset();
-<a name="l00267"></a>00267         }
-<a name="l00268"></a>00268     sinfo_free_propertylist(&plist);
-<a name="l00269"></a>00269     radangle = angle * PI_NUMB / 180. ;
-<a name="l00270"></a>00270     cd1_1 = cos(radangle) ;
-<a name="l00271"></a>00271     cd1_2 = sin(radangle) ;
-<a name="l00272"></a>00272     cd2_1 = -sin(radangle) ;
-<a name="l00273"></a>00273     cd2_2 = cos(radangle) ;
-<a name="l00274"></a>00274     
-<a name="l00275"></a>00275     sinfo_msg(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;
-<a name="l00276"></a>00276     cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),
-<a name="l00277"></a>00277            <span class="stringliteral">" could not load frame %s!"</span>,name) ;
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     <span class="keywordflow">if</span> (cfg->jitterind == 1)
-<a name="l00280"></a>00280     {
-<a name="l00281"></a>00281       exptime = sinfo_pfits_get_ditndit(name) ;
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283       <span class="keywordflow">if</span> (exptime == FLAG)
-<a name="l00284"></a>00284         {
-<a name="l00285"></a>00285           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not read fits header keyword exptime!"</span>);
-<a name="l00286"></a>00286           <span class="keywordflow">goto</span> cleanup;
-<a name="l00287"></a>00287         }
-<a name="l00288"></a>00288       times[n] = exptime ;
-<a name="l00289"></a>00289           ck0(sinfo_new_assign_offset(n,name,offsetx,offsety,
-<a name="l00290"></a>00290                                       ref_offx,ref_offy),
-<a name="l00291"></a>00291                                       <span class="stringliteral">"Error assigning offsets"</span>);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295         <span class="comment">/*</span>
-<a name="l00296"></a>00296 <span class="comment">         *--------------------------------------------------------------    </span>
-<a name="l00297"></a>00297 <span class="comment">         *---------------------RESAMPLING-------------------------------</span>
-<a name="l00298"></a>00298 <span class="comment">     *--------------------------------------------------------------</span>
-<a name="l00299"></a>00299 <span class="comment">         */</span>
-<a name="l00300"></a>00300         sinfo_msg(<span class="stringliteral">"Resampling object"</span>);
-<a name="l00301"></a>00301     cknull(wavemapim = cpl_image_load(cfg->wavemap,CPL_TYPE_FLOAT,0,0),
-<a name="l00302"></a>00302            <span class="stringliteral">"could not load wavemap"</span>);
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304         cknull(resampledImage = sinfo_new_defined_resampling( im, 
-<a name="l00305"></a>00305                                   wavemapim, 
-<a name="l00306"></a>00306                                   cfg->ncoeffs,
-<a name="l00307"></a>00307                                   &cfg->nrows,
-<a name="l00308"></a>00308                                   &dis,
-<a name="l00309"></a>00309                                   &mi,
-<a name="l00310"></a>00310                                   &ma,
-<a name="l00311"></a>00311                                   &centralLambda,
-<a name="l00312"></a>00312                                   &centralpix),
-<a name="l00313"></a>00313            <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315  
-<a name="l00316"></a>00316     <span class="keywordflow">if</span>(n ==0) {
-<a name="l00317"></a>00317           <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>) != 0) {
-<a name="l00318"></a>00318         sinfo_msg(<span class="stringliteral">"Resampling master flat"</span>);
-<a name="l00319"></a>00319         cknull(flat_im=cpl_image_load(cfg->mflat_dist,CPL_TYPE_FLOAT,0,0),
-<a name="l00320"></a>00320                    <span class="stringliteral">"Distorted master flat field not found\n"</span>
-<a name="l00321"></a>00321                    <span class="stringliteral">"You may have set --stack-flat_ind=FALSE\n"</span>
-<a name="l00322"></a>00322                    <span class="stringliteral">"Flat field resampling skipped"</span>);
-<a name="l00323"></a>00323             cknull(res_flat = sinfo_new_defined_resampling(flat_im, 
-<a name="l00324"></a>00324                                wavemapim,
-<a name="l00325"></a>00325                                cfg->ncoeffs,
-<a name="l00326"></a>00326                                &cfg->nrows,
-<a name="l00327"></a>00327                                &dis,
-<a name="l00328"></a>00328                                &mi,
-<a name="l00329"></a>00329                                &ma,
-<a name="l00330"></a>00330                                &centralLambda,
-<a name="l00331"></a>00331                                &centralpix),
-<a name="l00332"></a>00332            <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334             sinfo_free_image(&flat_im) ;
-<a name="l00335"></a>00335       }
-<a name="l00336"></a>00336      
-<a name="l00337"></a>00337       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00338"></a>00338         sinfo_msg(<span class="stringliteral">"Resampling sky"</span>);
-<a name="l00339"></a>00339         check_nomsg(sky_im=cpl_image_load(cfg->sky_dist,
-<a name="l00340"></a>00340                                               CPL_TYPE_FLOAT,0,0));
-<a name="l00341"></a>00341         cknull(res_sky = sinfo_new_defined_resampling(sky_im,
-<a name="l00342"></a>00342                               wavemapim,
-<a name="l00343"></a>00343                               cfg->ncoeffs,
-<a name="l00344"></a>00344                               &cfg->nrows,
-<a name="l00345"></a>00345                               &dis,
-<a name="l00346"></a>00346                               &mi,
-<a name="l00347"></a>00347                               &ma,
-<a name="l00348"></a>00348                               &centralLambda,
-<a name="l00349"></a>00349                               &centralpix),
-<a name="l00350"></a>00350            <span class="stringliteral">" sinfo_definedResampling() failed"</span> );
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352         sinfo_free_image(&sky_im) ;
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354        
-<a name="l00355"></a>00355       }
-<a name="l00356"></a>00356     }
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358         sinfo_msg (<span class="stringliteral">"dispersion %f\n"</span>, dis) ;
-<a name="l00359"></a>00359         sinfo_msg (<span class="stringliteral">"lambda min %f max %f cent %f\n"</span>, mi,ma,centralLambda ) ;
-<a name="l00360"></a>00360         sinfo_msg (<span class="stringliteral">"central pixel %d\n"</span>, centralpix) ; 
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362         sinfo_free_image(&im) ;
-<a name="l00363"></a>00363         sinfo_free_image(&wavemapim) ;
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365     <span class="comment">/*</span>
-<a name="l00366"></a>00366 <span class="comment">         *-------------------------------------------------------------------</span>
-<a name="l00367"></a>00367 <span class="comment">         *----------------Calibration----------------------------------------</span>
-<a name="l00368"></a>00368 <span class="comment">         *-------------------------------------------------------------------</span>
-<a name="l00369"></a>00369 <span class="comment">    */</span>
-<a name="l00370"></a>00370         <span class="comment">/*----Multiply with calibrated halogen lamp spectrum----*/</span> 
-<a name="l00371"></a>00371         <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)
-<a name="l00372"></a>00372         {     
-<a name="l00373"></a>00373       sinfo_msg(<span class="stringliteral">"Calibration"</span>);
-<a name="l00374"></a>00374       check_nomsg(halospec = cpl_image_load(cfg->halospectrum,
-<a name="l00375"></a>00375                                                 CPL_TYPE_FLOAT,0,0)) ;
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377       cknull(calim = sinfo_new_multiply_image_with_spectrum(resampledImage,
-<a name="l00378"></a>00378                                                                 halospec),
-<a name="l00379"></a>00379                         <span class="stringliteral">" sinfo_new_multiply_image_with_spectrum() failed"</span> ) ;
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381       sinfo_free_image(&halospec) ;
-<a name="l00382"></a>00382       sinfo_free_image(&resampledImage) ;
-<a name="l00383"></a>00383       resampledImage = cpl_image_duplicate(calim) ;
-<a name="l00384"></a>00384       sinfo_free_image(&calim);
-<a name="l00385"></a>00385         }
-<a name="l00386"></a>00386     
-<a name="l00387"></a>00387         <span class="comment">/*</span>
-<a name="l00388"></a>00388 <span class="comment">         *-------------------------------------------------------------------</span>
-<a name="l00389"></a>00389 <span class="comment">         *------------------CUBECREATION-------------------------------------</span>
-<a name="l00390"></a>00390 <span class="comment">         *-------------------------------------------------------------------</span>
-<a name="l00391"></a>00391 <span class="comment">     */</span>
-<a name="l00392"></a>00392     sinfo_msg(<span class="stringliteral">"Cube creation"</span>);
-<a name="l00393"></a>00393     <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span>
-<a name="l00394"></a>00394     <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {
-<a name="l00395"></a>00395       sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);
-<a name="l00396"></a>00396       cknull(slit_edges = sinfo_read_slitlets_edges(cfg->nslits,cfg->poslist),
-<a name="l00397"></a>00397          <span class="stringliteral">"error reading slitlets edges"</span>);
-<a name="l00398"></a>00398     } <span class="keywordflow">else</span> {
-<a name="l00399"></a>00399       sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);
-<a name="l00400"></a>00400       cknull(distances = sinfo_read_distances(cfg->nslits,cfg->distlist),
-<a name="l00401"></a>00401          <span class="stringliteral">"error reading distances"</span>);
-<a name="l00402"></a>00402     }
-<a name="l00403"></a>00403  
-<a name="l00404"></a>00404     cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(cfg->nslits, sizeof (<span class="keywordtype">float</span>)),
-<a name="l00405"></a>00405            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407     sinfo_msg(<span class="stringliteral">"Create cube object"</span>);
-<a name="l00408"></a>00408     <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410         cknull(cube = sinfo_new_make_cube_spi(resampledImage,
-<a name="l00411"></a>00411                                                   slit_edges,
-<a name="l00412"></a>00412                                                   correct_dist),
-<a name="l00413"></a>00413                                  <span class="stringliteral">" could not construct data cube!"</span>) ;
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415     }  <span class="keywordflow">else</span> {
-<a name="l00416"></a>00416        cknull(cube = sinfo_new_make_cube_dist(resampledImage,
-<a name="l00417"></a>00417                                                   fcol,
-<a name="l00418"></a>00418                                                   distances,
-<a name="l00419"></a>00419                                                   correct_dist),
-<a name="l00420"></a>00420                                          <span class="stringliteral">" could not construct a data cube!"</span>) ;
-<a name="l00421"></a>00421     }
-<a name="l00422"></a>00422     sinfo_free_image(&resampledImage);
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     <span class="keywordflow">if</span>(n==0) {
-<a name="l00425"></a>00425       <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {
-<a name="l00426"></a>00426         sinfo_msg(<span class="stringliteral">"Create cube master flat"</span>);
-<a name="l00427"></a>00427         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00428"></a>00428           cknull(cflat=sinfo_new_make_cube_spi(res_flat,
-<a name="l00429"></a>00429                                                    slit_edges,
-<a name="l00430"></a>00430                                                    correct_dist),
-<a name="l00431"></a>00431                                 <span class="stringliteral">" could not construct data cube!"</span>) ;
-<a name="l00432"></a>00432         }  <span class="keywordflow">else</span> {
-<a name="l00433"></a>00433           cknull(cflat = sinfo_new_make_cube_dist(res_flat,
-<a name="l00434"></a>00434                                                       fcol,
-<a name="l00435"></a>00435                                                       distances,
-<a name="l00436"></a>00436                                                       correct_dist),
-<a name="l00437"></a>00437                                         <span class="stringliteral">" could not construct a data cube!"</span>) ;
-<a name="l00438"></a>00438         }
-<a name="l00439"></a>00439         sinfo_free_image(&res_flat);
-<a name="l00440"></a>00440       }
-<a name="l00441"></a>00441       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443         sinfo_msg(<span class="stringliteral">"Create cube sky"</span>);
-<a name="l00444"></a>00444         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00445"></a>00445           cknull(csky = sinfo_new_make_cube_spi(res_sky,
-<a name="l00446"></a>00446                                                     slit_edges,
-<a name="l00447"></a>00447                                                     correct_dist),
-<a name="l00448"></a>00448                                            <span class="stringliteral">" could not construct data cube!"</span>) ;
-<a name="l00449"></a>00449         }  <span class="keywordflow">else</span> {
-<a name="l00450"></a>00450           cknull(csky = sinfo_new_make_cube_dist(res_sky,
-<a name="l00451"></a>00451                                                      fcol,
-<a name="l00452"></a>00452                                                      distances,
-<a name="l00453"></a>00453                                                      correct_dist),
-<a name="l00454"></a>00454                                          <span class="stringliteral">" could not construct a data cube!"</span>) ;
-<a name="l00455"></a>00455         }
-<a name="l00456"></a>00456         sinfo_free_image(&res_sky);
-<a name="l00457"></a>00457       }
-<a name="l00458"></a>00458     }
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 )
-<a name="l00462"></a>00462      {
-<a name="l00463"></a>00463        sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);
-<a name="l00464"></a>00464      }
-<a name="l00465"></a>00465     <span class="keywordflow">else</span>
-<a name="l00466"></a>00466       {
-<a name="l00467"></a>00467             sinfo_new_destroy_array(&distances);
-<a name="l00468"></a>00468       }
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470         <span class="comment">/*</span>
-<a name="l00471"></a>00471 <span class="comment">         *--------------------------------------------------------------------</span>
-<a name="l00472"></a>00472 <span class="comment">         *------------------------FINETUNING----------------------------------</span>
-<a name="l00473"></a>00473 <span class="comment">         *--------------------------------------------------------------------</span>
-<a name="l00474"></a>00474 <span class="comment">         * shift the rows of the reconstructed images of the data cube to the </span>
-<a name="l00475"></a>00475 <span class="comment">         * correct sub pixel position select the shift method: polynomial </span>
-<a name="l00476"></a>00476 <span class="comment">         * interpolation, FFT or cubic spline interpolation</span>
-<a name="l00477"></a>00477 <span class="comment">         *--------------------------------------------------------------------</span>
-<a name="l00478"></a>00478 <span class="comment">         */</span>
-<a name="l00479"></a>00479  
-<a name="l00480"></a>00480     <span class="keywordflow">if</span>(n==0) {
-<a name="l00481"></a>00481       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {
-<a name="l00482"></a>00482          cknull(csky2=sinfo_new_fine_tune(csky,
-<a name="l00483"></a>00483                                              correct_dist,
-<a name="l00484"></a>00484                                              cfg->method,
-<a name="l00485"></a>00485                                              cfg->order,
-<a name="l00486"></a>00486                           cfg->nslits),
-<a name="l00487"></a>00487             <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489          sinfo_free_imagelist(&csky);
-<a name="l00490"></a>00490          sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00491"></a>00491  
-<a name="l00492"></a>00492          cknull(csky = sinfo_new_bin_cube(csky2,1,2,0,63,0,63),
-<a name="l00493"></a>00493             <span class="stringliteral">"error rebinning sky cube"</span>);
-<a name="l00494"></a>00494          sinfo_free_imagelist(&csky2);
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496        
-<a name="l00497"></a>00497      
-<a name="l00498"></a>00498          ck0(sinfo_pro_save_ims(csky,sof,sof,<span class="stringliteral">"out_sky_cube.fits"</span>,
-<a name="l00499"></a>00499                     PRO_OBS_SKY,NULL,plugin_id,config),
-<a name="l00500"></a>00500          <span class="stringliteral">"cannot dump cube %s"</span>, <span class="stringliteral">"out_sky_cube.fits"</span>);
-<a name="l00501"></a>00501  
-<a name="l00502"></a>00502          cknull(eima_med=sinfo_new_median_cube(csky),
-<a name="l00503"></a>00503                 <span class="stringliteral">"Creating an average image"</span>);
-<a name="l00504"></a>00504          check_nomsg(center_x = cpl_image_get_size_x(eima_med)/ 2. + 0.5);
-<a name="l00505"></a>00505          check_nomsg(center_y = cpl_image_get_size_y(eima_med)/ 2. + 0.5);
-<a name="l00506"></a>00506 
-<a name="l00507"></a>00507             sinfo_new_set_wcs_cube(csky, <span class="stringliteral">"out_sky_cube.fits"</span>, centralLambda, 
-<a name="l00508"></a>00508                           dis, centralpix, center_x, center_y);
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510          sinfo_free_imagelist(&csky) ;
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512          ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_sky_med.fits"</span>,
-<a name="l00513"></a>00513                     PRO_SKY_MED,NULL,plugin_id,config),
-<a name="l00514"></a>00514          <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_sky_med.fits"</span>);
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516             sinfo_new_set_wcs_image(eima_med,<span class="stringliteral">"out_sky_med.fits"</span>, 
-<a name="l00517"></a>00517                                      center_x, center_y);
-<a name="l00518"></a>00518          sinfo_free_image(&eima_med);
-<a name="l00519"></a>00519       }
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522       <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524         cknull(cflat2=sinfo_new_fine_tune(cflat,correct_dist,
-<a name="l00525"></a>00525                                               cfg->method,cfg->order,
-<a name="l00526"></a>00526                                               cfg->nslits),
-<a name="l00527"></a>00527                                        <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00528"></a>00528 
-<a name="l00529"></a>00529         sinfo_free_imagelist(&cflat);
-<a name="l00530"></a>00530         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00531"></a>00531  
-<a name="l00532"></a>00532         cknull(cflat = sinfo_new_bin_cube(cflat2,1,2,0,63,0,63),
-<a name="l00533"></a>00533            <span class="stringliteral">"Error binning flat cube"</span>);
-<a name="l00534"></a>00534         sinfo_free_imagelist(&cflat2);
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536         ck0(sinfo_pro_save_ims(cflat,sof,sof,OBJNOD_OUT_MFLAT_CUBE_FILENAME,
-<a name="l00537"></a>00537                    PRO_MFLAT_CUBE,NULL,plugin_id,config),
-<a name="l00538"></a>00538         <span class="stringliteral">"cannot save cube %s"</span>, OBJNOD_OUT_MFLAT_CUBE_FILENAME);
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540         cknull(eima_avg=sinfo_new_average_cube_to_image(cflat),
-<a name="l00541"></a>00541                <span class="stringliteral">"Creating an average image"</span>);
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543         ck0(sinfo_pro_save_ima(eima_avg,sof,sof,<span class="stringliteral">"out_mflat_avg.fits"</span>,
-<a name="l00544"></a>00544                    <span class="stringliteral">"MFLAT_AVG"</span>,NULL,plugin_id,config),
-<a name="l00545"></a>00545         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_avg.fits"</span>);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547         sinfo_free_image(&eima_avg);
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549         cknull(eima_med=sinfo_new_median_cube(cflat),
-<a name="l00550"></a>00550            <span class="stringliteral">"Error computing median on cube flat"</span>);
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552         ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_mflat_med.fits"</span>,
-<a name="l00553"></a>00553                    <span class="stringliteral">"MFLAT_MED"</span>,NULL,plugin_id,config),
-<a name="l00554"></a>00554         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_med.fits"</span>);
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556         sinfo_free_imagelist(&cflat); 
-<a name="l00557"></a>00557         sinfo_free_image(&eima_med);
-<a name="l00558"></a>00558       }
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560        
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562         cknull(outcube2=sinfo_new_fine_tune(cube,
-<a name="l00563"></a>00563                                             correct_dist,
-<a name="l00564"></a>00564                                             cfg->method,
-<a name="l00565"></a>00565                                             cfg->order,
-<a name="l00566"></a>00566                                             cfg->nslits),
-<a name="l00567"></a>00567                                      <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00570"></a>00570         cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),
-<a name="l00571"></a>00571            <span class="stringliteral">"Error binning cube"</span>);
-<a name="l00572"></a>00572         sinfo_free_imagelist(&cube);
-<a name="l00573"></a>00573         cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00574"></a>00574         sinfo_get_pupil_shift(outcube,n,&qclog_tbl);
-<a name="l00575"></a>00575         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,
-<a name="l00576"></a>00576          <span class="stringliteral">"out_cube_obj"</span>,n,<span class="stringliteral">".fits"</span>);
-<a name="l00577"></a>00577         ck0(sinfo_pro_save_ims(outcube,sof,sof,file_name,
-<a name="l00578"></a>00578                    pro_obs,qclog_tbl,plugin_id,config),
-<a name="l00579"></a>00579         <span class="stringliteral">"cannot save cube %s"</span>, file_name);
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582         sinfo_free_table(&qclog_tbl);
-<a name="l00583"></a>00583     check_nomsg(center_x = cpl_image_get_size_x(
-<a name="l00584"></a>00584                                cpl_imagelist_get(outcube,0))/2.+0.5) ;
-<a name="l00585"></a>00585     check_nomsg(center_y = cpl_image_get_size_y(
-<a name="l00586"></a>00586                                cpl_imagelist_get(outcube,0))/2.+0.5 );
-<a name="l00587"></a>00587    
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589     sinfo_new_set_wcs_cube(outcube, file_name, centralLambda, dis, 
-<a name="l00590"></a>00590                      centralpix, center_x, center_y);
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592        <span class="comment">/* free memory */</span>
-<a name="l00593"></a>00593         <span class="comment">/* to prevent error message comment next line */</span>
-<a name="l00594"></a>00594         sinfo_free_imagelist(&outcube2);
-<a name="l00595"></a>00595         sinfo_free_imagelist(&outcube) ;
-<a name="l00596"></a>00596     sinfo_free_float(&correct_dist) ;
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599     } <span class="comment">/* end loop over n (nframes) */</span>
-<a name="l00600"></a>00600  
-<a name="l00601"></a>00601     <span class="comment">/* leak free */</span>
-<a name="l00602"></a>00602     <span class="keywordflow">if</span>(cfg->jitterind == 0) {
-<a name="l00603"></a>00603       <span class="keywordflow">goto</span> exit;
-<a name="l00604"></a>00604     }   
-<a name="l00605"></a>00605      
-<a name="l00606"></a>00606     <span class="comment">/* Here in case of autojitter we estimate the sky */</span>
-<a name="l00607"></a>00607     <span class="keywordflow">if</span>( (cfg->size_x*cfg->size_y*cfg->nframes) > (100*mosaic_max_size) ) {
-<a name="l00608"></a>00608       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Coadd cube size:%d,%d. N frames: %d"</span>,
-<a name="l00609"></a>00609                            cfg->size_x,cfg->size_y,cfg->nframes);
-<a name="l00610"></a>00610       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Max allowed should be such that "</span>
-<a name="l00611"></a>00611                         <span class="stringliteral">"sixeX*sixeY*Nframes < 100*%d"</span>,mosaic_max_size);
-<a name="l00612"></a>00612       <span class="keywordflow">goto</span> exit;
-<a name="l00613"></a>00613     } 
-<a name="l00614"></a>00614  
-<a name="l00615"></a>00615     <span class="keywordflow">if</span> ( cfg->jitterind == 1 )
-<a name="l00616"></a>00616     {  
-<a name="l00617"></a>00617         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vllx"</span>));
-<a name="l00618"></a>00618         check_nomsg(vllx = cpl_parameter_get_int(p));
-<a name="l00619"></a>00619         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vlly"</span>));
-<a name="l00620"></a>00620         check_nomsg(vlly = cpl_parameter_get_int(p));
-<a name="l00621"></a>00621         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vurx"</span>));
-<a name="l00622"></a>00622         check_nomsg(vurx = cpl_parameter_get_int(p));
-<a name="l00623"></a>00623         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vury"</span>));
-<a name="l00624"></a>00624         check_nomsg(vury = cpl_parameter_get_int(p));
-<a name="l00625"></a>00625  
-<a name="l00626"></a>00626         cknull(cube_tmp =(cpl_imagelist**) cpl_calloc(cfg->nframes, 
-<a name="l00627"></a>00627                                                       sizeof (cpl_imagelist*)),
-<a name="l00628"></a>00628                                      <span class="stringliteral">"Could not allocate memory for cube_tmp"</span>);
-<a name="l00629"></a>00629         cknull(cubeobject =(cpl_imagelist**) cpl_calloc(cfg->nframes, 
-<a name="l00630"></a>00630                                                         <span class="keyword">sizeof</span>(cpl_imagelist*)),
-<a name="l00631"></a>00631                                     <span class="stringliteral">"Could not allocate memory for cubeobject"</span>);
-<a name="l00632"></a>00632 
-<a name="l00633"></a>00633     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00634"></a>00634           snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,
-<a name="l00635"></a>00635                      n,<span class="stringliteral">".fits"</span>);
-<a name="l00636"></a>00636       check_nomsg(cube_tmp[n] = cpl_imagelist_load(file_name,
-<a name="l00637"></a>00637                                CPL_TYPE_FLOAT,0));
-<a name="l00638"></a>00638       check_nomsg(cubeobject[n] = sinfo_new_cube_getvig(cube_tmp[n],
-<a name="l00639"></a>00639                                 1+vllx,1+vlly,
-<a name="l00640"></a>00640                                 64-vurx,64-vury));
-<a name="l00641"></a>00641           check_nomsg(sinfo_free_imagelist(&cube_tmp[n]));
-<a name="l00642"></a>00642     }
-<a name="l00643"></a>00643         sinfo_free_array_imagelist(&cube_tmp);
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645     }
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647     <span class="comment">/*</span>
-<a name="l00648"></a>00648 <span class="comment">        ---------------------------------------------------------------------</span>
-<a name="l00649"></a>00649 <span class="comment">        ------------------------JITTERING------------------------------------</span>
-<a name="l00650"></a>00650 <span class="comment">        ---------------------------------------------------------------------</span>
-<a name="l00651"></a>00651 <span class="comment">    */</span>
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653     <span class="keywordflow">if</span> (cfg->jitterind == 1)
-<a name="l00654"></a>00654     {
-<a name="l00655"></a>00655     sinfo_msg(<span class="stringliteral">"Jittering..."</span>);
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657         sinfo_msg(<span class="stringliteral">"Coadded cube size. x: %d y: %d"</span>,
-<a name="l00658"></a>00658              cfg->size_x,cfg->size_y);
-<a name="l00659"></a>00659         check_nomsg(jittercube = cpl_imagelist_new()) ;
-<a name="l00660"></a>00660 
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662     <span class="comment">/* </span>
-<a name="l00663"></a>00663 <span class="comment">        ---------------------------------------------------------------------</span>
-<a name="l00664"></a>00664 <span class="comment">        -------------------THOMAS ALGORITHM----------------------------------</span>
-<a name="l00665"></a>00665 <span class="comment">        ---------------------------------------------------------------------</span>
-<a name="l00666"></a>00666 <span class="comment">    */</span>
-<a name="l00667"></a>00667        
-<a name="l00668"></a>00668         check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00669"></a>00669                                              <span class="stringliteral">"sinfoni.objnod.scales_sky"</span>));
-<a name="l00670"></a>00670         check_nomsg(scales_sky=cpl_parameter_get_bool(p));
-<a name="l00671"></a>00671         check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>));
-<a name="l00672"></a>00672         check_nomsg(ks_clip = cpl_parameter_get_bool(p));
-<a name="l00673"></a>00673         check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.kappa"</span>));
-<a name="l00674"></a>00674         check_nomsg(kappa = cpl_parameter_get_double(p));
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677     <span class="keywordflow">if</span>(scales_sky == 1) {
-<a name="l00678"></a>00678       sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);
-<a name="l00679"></a>00679       <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {
-<a name="l00680"></a>00680         sinfo_msg(<span class="stringliteral">"process cube %d\n"</span>,n);
-<a name="l00681"></a>00681         sinfo_new_sinfoni_correct_median_it(&(cubeobject[n]));
-<a name="l00682"></a>00682       }
-<a name="l00683"></a>00683     }
-<a name="l00684"></a>00684 
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686         <span class="comment">/* AMO CHECK */</span>
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688         cknull(maskcube=cpl_imagelist_new(),<span class="stringliteral">"could not allocate cube!"</span>);
-<a name="l00689"></a>00689         
-<a name="l00690"></a>00690     <span class="comment">/* Illumination correction */</span> 
-<a name="l00691"></a>00691         <span class="keywordflow">if</span>(ill_cor != NULL) {
-<a name="l00692"></a>00692       <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {
-<a name="l00693"></a>00693         sinfo_msg(<span class="stringliteral">"Illumination correction is applied"</span>);
-<a name="l00694"></a>00694         cpl_imagelist_divide_image(cubeobject[n],ill_cor);
-<a name="l00695"></a>00695       }
-<a name="l00696"></a>00696     }
-<a name="l00697"></a>00697         sinfo_free_image(&ill_cor);
-<a name="l00698"></a>00698     
-<a name="l00699"></a>00699     sinfo_msg(<span class="stringliteral">"Combine jittered cubes"</span>);
-<a name="l00700"></a>00700 
-<a name="l00701"></a>00701 
-<a name="l00702"></a>00702     <span class="keywordflow">if</span>(ks_clip == 1) {
-<a name="l00703"></a>00703       sinfo_msg(<span class="stringliteral">"Cube coaddition with kappa-sigma"</span>);
-<a name="l00704"></a>00704     }
-<a name="l00705"></a>00705         check_nomsg(onp=cpl_imagelist_get_size(cubeobject[0]));
-<a name="l00706"></a>00706     <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {
-<a name="l00707"></a>00707       z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);
-<a name="l00708"></a>00708       z_min=z;
-<a name="l00709"></a>00709       z_max=z_min+z_siz;
-<a name="l00710"></a>00710       sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,
-<a name="l00711"></a>00711                            z_min,z_max,onp);
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713       <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {
-<a name="l00714"></a>00714             check_nomsg(j_img=cpl_image_new(cfg->size_x,
-<a name="l00715"></a>00715                                             cfg->size_y,CPL_TYPE_FLOAT));
-<a name="l00716"></a>00716         check_nomsg(cpl_imagelist_set(jittercube,j_img,j));
-<a name="l00717"></a>00717             check_nomsg(m_img = cpl_image_new(cfg->size_x,
-<a name="l00718"></a>00718                                               cfg->size_y,CPL_TYPE_FLOAT));
-<a name="l00719"></a>00719             check_nomsg(cpl_imagelist_set(maskcube,m_img,j));
-<a name="l00720"></a>00720       }
-<a name="l00721"></a>00721       <span class="keywordflow">if</span>(ks_clip == 1) {
-<a name="l00722"></a>00722         sinfo_new_combine_jittered_cubes_thomas_range(cubeobject,
-<a name="l00723"></a>00723                             jittercube,
-<a name="l00724"></a>00724                             maskcube,
-<a name="l00725"></a>00725                             cfg->nframes,
-<a name="l00726"></a>00726                             offsetx,offsety,
-<a name="l00727"></a>00727                             times,
-<a name="l00728"></a>00728                             cfg->kernel_type,
-<a name="l00729"></a>00729                             z_min,
-<a name="l00730"></a>00730                             z_max,
-<a name="l00731"></a>00731                             kappa);
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733       } <span class="keywordflow">else</span> {
-<a name="l00734"></a>00734         sinfo_new_combine_jittered_cubes_range(cubeobject, 
-<a name="l00735"></a>00735                                              jittercube,
-<a name="l00736"></a>00736                                              maskcube,
-<a name="l00737"></a>00737                          cfg->nframes,
-<a name="l00738"></a>00738                                              offsetx,
-<a name="l00739"></a>00739                          offsety, 
-<a name="l00740"></a>00740                                              times,
-<a name="l00741"></a>00741                          cfg->kernel_type,
-<a name="l00742"></a>00742                                              z_min,
-<a name="l00743"></a>00743                                              z_max) ;
-<a name="l00744"></a>00744       }
-<a name="l00745"></a>00745     }
-<a name="l00746"></a>00746         sinfo_new_convert_0_to_ZERO_for_cubes(jittercube) ; 
-<a name="l00747"></a>00747 
-<a name="l00748"></a>00748       <span class="keywordflow">if</span> (jittercube == NULL)
-<a name="l00749"></a>00749     {
-<a name="l00750"></a>00750         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate new data cube!"</span>) ;
-<a name="l00751"></a>00751         <span class="keywordflow">goto</span> cleanup;
-<a name="l00752"></a>00752     }
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754         <span class="keywordflow">if</span> (maskcube == NULL)
-<a name="l00755"></a>00755     {
-<a name="l00756"></a>00756         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not merge the jittered data cubes\n"</span>) ;
-<a name="l00757"></a>00757             <span class="keywordflow">goto</span> cleanup;
-<a name="l00758"></a>00758     }
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760     <span class="keywordflow">for</span> ( i = 0 ; i <cfg->nframes  ; i++ ) {
-<a name="l00761"></a>00761       sinfo_free_imagelist(&cubeobject[i]);
-<a name="l00762"></a>00762     }
-<a name="l00763"></a>00763     sinfo_free_array_imagelist(&cubeobject);
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765         newcenter_x = cfg->size_x / 2. + 0.5 ;
-<a name="l00766"></a>00766     newcenter_y = cfg->size_y / 2. + 0.5 ;
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768         ck0(sinfo_pro_save_ims(jittercube,sof,sof,cfg->outName,
-<a name="l00769"></a>00769                    procatg,NULL,plugin_id,config),
-<a name="l00770"></a>00770         <span class="stringliteral">"cannot save cube %s"</span>, cfg->outName);
-<a name="l00771"></a>00771 
-<a name="l00772"></a>00772       sinfo_new_set_wcs_cube(jittercube, cfg->outName, centralLambda, 
-<a name="l00773"></a>00773                                dis, centralpix, center_x, center_y);
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775         cknull(jitter_image = sinfo_new_median_cube(jittercube),
-<a name="l00776"></a>00776                <span class="stringliteral">" could not do sinfo_medianCube()"</span>);
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779         ck0(sinfo_pro_save_ima(jitter_image,sof,sof,cfg->med_cube_name,
-<a name="l00780"></a>00780                    pro_med,NULL,plugin_id,config),
-<a name="l00781"></a>00781         <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00782"></a>00782 
-<a name="l00783"></a>00783       sinfo_new_set_wcs_image(jitter_image, cfg->med_cube_name,
-<a name="l00784"></a>00784                                 center_x,center_y);
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786         sinfo_free_image(&jitter_image);
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788         ck0(sinfo_pro_save_ims(maskcube,sof,sof,cfg->maskname,
-<a name="l00789"></a>00789                    pro_mjit,NULL,plugin_id,config),
-<a name="l00790"></a>00790         <span class="stringliteral">"cannot save cube %s"</span>, cfg->maskname);
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792      sinfo_new_set_wcs_cube(maskcube, cfg->maskname, centralLambda, 
-<a name="l00793"></a>00793                                dis, centralpix, center_x, center_y);
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795         sinfo_free_double(&times) ;
-<a name="l00796"></a>00796         sinfo_free_float(&offsetx) ;
-<a name="l00797"></a>00797         sinfo_free_float(&offsety) ;
-<a name="l00798"></a>00798         sinfo_free_imagelist(&maskcube) ;
-<a name="l00799"></a>00799         sinfo_free_imagelist(&jittercube) ;         
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     } <span class="comment">/* end of jittering */</span>
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803  exit:
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805  <span class="comment">/* free memory */</span>
-<a name="l00806"></a>00806     sinfo_objnod_free(&cfg);
-<a name="l00807"></a>00807     sinfo_free_frameset(&stk);
-<a name="l00808"></a>00808     <span class="keywordflow">return</span> 0;   
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810  cleanup:
-<a name="l00811"></a>00811     sinfo_free_propertylist(&plist);
-<a name="l00812"></a>00812     sinfo_free_image(&jitter_image);
-<a name="l00813"></a>00813     sinfo_free_imagelist(&jittercube) ;
-<a name="l00814"></a>00814     sinfo_free_imagelist(&maskcube) ;
-<a name="l00815"></a>00815 
-<a name="l00816"></a>00816     <span class="keywordflow">if</span>(cfg != NULL) {
-<a name="l00817"></a>00817       <span class="keywordflow">if</span>(cube_tmp != NULL) {
-<a name="l00818"></a>00818     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00819"></a>00819       sinfo_free_imagelist(&(cube_tmp[n]));
-<a name="l00820"></a>00820     }
-<a name="l00821"></a>00821         sinfo_free_array_imagelist(&cube_tmp);
-<a name="l00822"></a>00822       }
-<a name="l00823"></a>00823       <span class="keywordflow">if</span>(cubeobject != NULL) {
-<a name="l00824"></a>00824     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00825"></a>00825       sinfo_free_imagelist(&(cubeobject[n]));
-<a name="l00826"></a>00826     }
-<a name="l00827"></a>00827         sinfo_free_array_imagelist(&cubeobject);
-<a name="l00828"></a>00828       }
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830     }
-<a name="l00831"></a>00831 
-<a name="l00832"></a>00832     sinfo_free_imagelist(&outcube2) ;
-<a name="l00833"></a>00833     sinfo_free_imagelist(&outcube) ;
-<a name="l00834"></a>00834     sinfo_free_table(&qclog_tbl);
-<a name="l00835"></a>00835     sinfo_free_image(&eima_avg);
-<a name="l00836"></a>00836     sinfo_free_image(&eima_med);
-<a name="l00837"></a>00837     sinfo_free_imagelist(&cflat) ;
-<a name="l00838"></a>00838     sinfo_free_imagelist(&cflat2) ;
-<a name="l00839"></a>00839     sinfo_free_imagelist(&cube) ;
-<a name="l00840"></a>00840     sinfo_free_imagelist(&csky) ;
-<a name="l00841"></a>00841     sinfo_free_imagelist(&csky2) ;
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843     <span class="keywordflow">if</span>(cfg!=NULL) {
-<a name="l00844"></a>00844       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {
-<a name="l00845"></a>00845     <span class="keywordflow">if</span>(slit_edges != NULL) {
-<a name="l00846"></a>00846        sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);
-<a name="l00847"></a>00847     }
-<a name="l00848"></a>00848       } <span class="keywordflow">else</span> {
-<a name="l00849"></a>00849     <span class="keywordflow">if</span> (distances != NULL ) {
-<a name="l00850"></a>00850             sinfo_new_destroy_array(&distances);
-<a name="l00851"></a>00851     }
-<a name="l00852"></a>00852       }
-<a name="l00853"></a>00853     }
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855     sinfo_free_float(&correct_dist);
-<a name="l00856"></a>00856     sinfo_free_image(&res_flat);
-<a name="l00857"></a>00857     sinfo_free_image(&res_sky);
-<a name="l00858"></a>00858     sinfo_free_image(&calim);
-<a name="l00859"></a>00859     sinfo_free_image(&halospec) ;
-<a name="l00860"></a>00860     sinfo_free_image(&sky_im) ;
-<a name="l00861"></a>00861     sinfo_free_image(&resampledImage);
-<a name="l00862"></a>00862     sinfo_free_image(&flat_im) ;
-<a name="l00863"></a>00863     sinfo_free_image(&wavemapim);
-<a name="l00864"></a>00864     sinfo_free_image(&im);
-<a name="l00865"></a>00865     sinfo_free_image(&ill_cor);
-<a name="l00866"></a>00866     sinfo_free_float(&offsety);
-<a name="l00867"></a>00867     sinfo_free_float(&offsetx);
-<a name="l00868"></a>00868     sinfo_free_double(&times);
-<a name="l00869"></a>00869     sinfo_objnod_free(&cfg);
-<a name="l00870"></a>00870     sinfo_free_frameset(&stk);
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872     <span class="keywordflow">return</span> -1;   
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_objnod.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_new_objnod.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    December 3, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    Creates data cubes or merges data cubes </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        out of jittered object-sky</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        nodding observations </span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_new_objnod.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#define PI_NUMB        (3.1415926535897932384626433832795) </span><span class="comment">/* pi */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   Function     : sinfo_new_objnod()</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   In           : ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   Out          : integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">   Job          : this routine carries through the data cube creation of an </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">                  object science observation using object-sky nodding</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                  and jittering. This script expects jittered frames that</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">          were already sky-subtracted</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                  averaged, flatfielded, spectral tilt corrected and </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">        interleaved if necessary</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keywordtype">int</span> sinfo_new_objnod (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,cpl_parameterlist* config, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>             cpl_frameset* sof, <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     object_config * cfg=NULL ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     cpl_image * wavemapim=NULL ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_image * resampledImage=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_image * calim=NULL ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_image * halospec=NULL ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     cpl_image * sky_im=NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_image* res_flat=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_image* res_sky=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_image* flat_im=NULL;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     cpl_image* jitter_image=NULL;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     cpl_image* eima_avg=NULL;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     cpl_image* eima_med=NULL;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_imagelist  * cube=NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_imagelist  * outcube=NULL ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_imagelist  * outcube2=NULL ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_imagelist  ** cubeobject=NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_imagelist  ** cube_tmp=NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     cpl_imagelist  * jittercube=NULL ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_imagelist  * maskcube=NULL ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_imagelist* cflat=NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     cpl_imagelist* cflat2=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     cpl_imagelist* csky=NULL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     cpl_imagelist* csky2=NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordtype">int</span> partind = 0 ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordtype">int</span> centralpix=0 ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordtype">int</span> z_siz=0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordtype">int</span> z_min=0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordtype">int</span> z_max=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">int</span> z_stp=100;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">int</span> scales_sky=0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">int</span> ks_clip=0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">double</span> kappa=2.0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">float</span> ref_offx=0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordtype">float</span> ref_offy=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">float</span> mi=0 ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">float</span> ma=0 ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">float</span> fcol=0 ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordtype">float</span> center_x=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordtype">float</span> newcenter_x=0 ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordtype">float</span> center_y=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordtype">float</span> newcenter_y=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordtype">float</span> cd1_1=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordtype">float</span> cd1_2=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">float</span> cd2_1=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">float</span> cd2_2=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">float</span> pixelscale=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordtype">float</span> angle=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordtype">float</span> radangle=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordtype">double</span> exptime=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">float</span> *  correct_dist=NULL ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">float</span> * distances=NULL ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordtype">double</span> * times=NULL ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordtype">float</span> * offsetx=NULL;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">float</span> * offsety=NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordtype">float</span> ** slit_edges=NULL ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordtype">float</span> offx_min=1.e10;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">float</span> offy_min=1.e10;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">float</span> offx_max=-1.e10;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">float</span> offy_max=-1.e10;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordtype">double</span> dis=0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordtype">double</span> centralLambda=0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordtype">char</span> name_jitter[MAX_NAME_SIZE] ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordtype">char</span> pro_mjit[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">char</span> pro_obs[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">char</span> pro_med[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">char</span> * name=NULL ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">char</span> * partname=NULL;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordtype">char</span> * partname2=NULL;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordtype">int</span> vllx=0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">int</span> vlly=0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">int</span> vurx=0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordtype">int</span> vury=0;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     cpl_image* j_img=NULL;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_image* ill_cor=NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_frameset* stk=NULL;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordtype">int</span> mosaic_max_size=0;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                      <span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>));</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     check_nomsg(mosaic_max_size=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>      <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_STD) == 0) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     strcpy(pro_mjit,PRO_MASK_COADD_STD);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     strcpy(pro_obs,PRO_OBS_STD);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     strcpy(pro_med,PRO_MED_COADD_STD);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(procatg,PRO_COADD_PSF) == 0) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     strcpy(pro_mjit,PRO_MASK_COADD_PSF);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     strcpy(pro_obs,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     strcpy(pro_med,PRO_MED_COADD_PSF);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     strcpy(pro_mjit,PRO_MASK_COADD_OBJ);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     strcpy(pro_obs,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     strcpy(pro_med,PRO_MED_COADD_OBJ);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="comment">/*----parse input data and parameters to set cube_config cfg---*/</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     check_nomsg(stk = cpl_frameset_new());</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cknull(cfg = sinfo_parse_cpl_input_objnod(config,sof,&stk),</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>        <span class="stringliteral">"Error setting parameter configuration"</span>);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>  </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     ck0(sinfo_check_input_data(cfg),<span class="stringliteral">"error checking input"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">if</span> ( cfg->jitterind == 1 )</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (cfg->nframes, sizeof (<span class="keywordtype">double</span>)), </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>  </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (cfg->nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span> (cfg->jitterind == 0)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         <span class="keywordflow">if</span> ( NULL != (partname = strtok(cfg->outName, <span class="stringliteral">"."</span>))) </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>             partname2 = strtok (NULL, <span class="stringliteral">"."</span>) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>             partind = 1 ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     ck0(sinfo_auto_size_cube5(cfg,&ref_offx,&ref_offy,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                 &offx_min,&offy_min,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                                 &offx_max,&offy_max),</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                              <span class="stringliteral">"Error resizing cube"</span>);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.fcol"</span>));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     check_nomsg(fcol=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_ILL_COR)) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>      sinfo_msg(<span class="stringliteral">"Illumination correction cube is provided"</span>);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>      frame = cpl_frameset_find(sof,PRO_ILL_COR);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>      ill_cor=cpl_image_load(cpl_frame_get_filename(frame),CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>      sinfo_msg(<span class="stringliteral">"Illumination correction cube not provided"</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>      cpl_error_reset();</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>      <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ )</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>      {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         sinfo_msg(<span class="stringliteral">"Read FITS information"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         name = cfg->framelist[n] ;    </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         strcpy (name_jitter, name) ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     }   </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         <span class="keywordflow">if</span>( sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="comment">/* get some header values and compute the CD-sinfo_matrix */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     pixelscale = sinfo_pfits_get_pixscale(plist) /2;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     angle = sinfo_pfits_get_posangle(plist) ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       cpl_error_reset();</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     radangle = angle * PI_NUMB / 180. ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cd1_1 = cos(radangle) ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     cd1_2 = sin(radangle) ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cd2_1 = -sin(radangle) ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     cd2_2 = cos(radangle) ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     sinfo_msg(<span class="stringliteral">"frame no.: %d, name: %s\n"</span>, n, name) ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cknull(im = cpl_image_load(name,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>            <span class="stringliteral">" could not load frame %s!"</span>,name) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">if</span> (cfg->jitterind == 1)</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       exptime = sinfo_pfits_get_ditndit(name) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       <span class="keywordflow">if</span> (exptime == FLAG)</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not read fits header keyword exptime!"</span>);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       times[n] = exptime ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>           ck0(sinfo_new_assign_offset(n,name,offsetx,offsety,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                       ref_offx,ref_offy),</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                       <span class="stringliteral">"Error assigning offsets"</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">         *--------------------------------------------------------------    </span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">         *---------------------RESAMPLING-------------------------------</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">     *--------------------------------------------------------------</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         sinfo_msg(<span class="stringliteral">"Resampling object"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     cknull(wavemapim = cpl_image_load(cfg->wavemap,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>            <span class="stringliteral">"could not load wavemap"</span>);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         cknull(resampledImage = sinfo_new_defined_resampling( im, </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                   wavemapim, </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                   cfg->ncoeffs,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                   &cfg->nrows,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                   &dis,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                   &mi,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                   &ma,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                   &centralLambda,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                   &centralpix),</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>            <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>  </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">if</span>(n ==0) {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>           <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>) != 0) {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         sinfo_msg(<span class="stringliteral">"Resampling master flat"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         cknull(flat_im=cpl_image_load(cfg->mflat_dist,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                    <span class="stringliteral">"Distorted master flat field not found\n"</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                    <span class="stringliteral">"You may have set --stack-flat_ind=FALSE\n"</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                    <span class="stringliteral">"Flat field resampling skipped"</span>);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             cknull(res_flat = sinfo_new_defined_resampling(flat_im, </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                wavemapim,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                                cfg->ncoeffs,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                                &cfg->nrows,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                &dis,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                &mi,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                                &ma,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                                &centralLambda,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                                &centralpix),</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>            <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             sinfo_free_image(&flat_im) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>      </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         sinfo_msg(<span class="stringliteral">"Resampling sky"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         check_nomsg(sky_im=cpl_image_load(cfg->sky_dist,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                                               CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         cknull(res_sky = sinfo_new_defined_resampling(sky_im,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                               wavemapim,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                               cfg->ncoeffs,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                               &cfg->nrows,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                               &dis,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                               &mi,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                               &ma,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                               &centralLambda,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                               &centralpix),</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>            <span class="stringliteral">" sinfo_definedResampling() failed"</span> );</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         sinfo_free_image(&sky_im) ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>        </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     }</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         sinfo_msg (<span class="stringliteral">"dispersion %f\n"</span>, dis) ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         sinfo_msg (<span class="stringliteral">"lambda min %f max %f cent %f\n"</span>, mi,ma,centralLambda ) ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         sinfo_msg (<span class="stringliteral">"central pixel %d\n"</span>, centralpix) ; </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         sinfo_free_image(&im) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         sinfo_free_image(&wavemapim) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">         *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">         *----------------Calibration----------------------------------------</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">         *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         <span class="comment">/*----Multiply with calibrated halogen lamp spectrum----*/</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         {     </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       sinfo_msg(<span class="stringliteral">"Calibration"</span>);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       check_nomsg(halospec = cpl_image_load(cfg->halospectrum,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                                 CPL_TYPE_FLOAT,0,0)) ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>       cknull(calim = sinfo_new_multiply_image_with_spectrum(resampledImage,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                                                 halospec),</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                         <span class="stringliteral">" sinfo_new_multiply_image_with_spectrum() failed"</span> ) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       sinfo_free_image(&halospec) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       sinfo_free_image(&resampledImage) ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       resampledImage = cpl_image_duplicate(calim) ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>       sinfo_free_image(&calim);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">         *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">         *------------------CUBECREATION-------------------------------------</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment">         *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     sinfo_msg(<span class="stringliteral">"Cube creation"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>       sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       cknull(slit_edges = sinfo_read_slitlets_edges(cfg->nslits,cfg->poslist),</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>          <span class="stringliteral">"error reading slitlets edges"</span>);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       cknull(distances = sinfo_read_distances(cfg->nslits,cfg->distlist),</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>          <span class="stringliteral">"error reading distances"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     }</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>  </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(cfg->nslits, sizeof (<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     sinfo_msg(<span class="stringliteral">"Create cube object"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         cknull(cube = sinfo_new_make_cube_spi(resampledImage,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                                   slit_edges,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                                   correct_dist),</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                  <span class="stringliteral">" could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>        cknull(cube = sinfo_new_make_cube_dist(resampledImage,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                                   fcol,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                                   distances,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                                   correct_dist),</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                          <span class="stringliteral">" could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     }</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     sinfo_free_image(&resampledImage);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>       <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         sinfo_msg(<span class="stringliteral">"Create cube master flat"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>           cknull(cflat=sinfo_new_make_cube_spi(res_flat,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                                                    slit_edges,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                                    correct_dist),</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                                 <span class="stringliteral">" could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>           cknull(cflat = sinfo_new_make_cube_dist(res_flat,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                                                       fcol,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                                                       distances,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                                                       correct_dist),</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                         <span class="stringliteral">" could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         }</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>         sinfo_free_image(&res_flat);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         sinfo_msg(<span class="stringliteral">"Create cube sky"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>           cknull(csky = sinfo_new_make_cube_spi(res_sky,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                                                     slit_edges,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                                                     correct_dist),</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                                            <span class="stringliteral">" could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>         }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>           cknull(csky = sinfo_new_make_cube_dist(res_sky,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                                                      fcol,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                                                      distances,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                                                      correct_dist),</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                                          <span class="stringliteral">" could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         sinfo_free_image(&res_sky);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>         <span class="keywordflow">if</span> (cfg->northsouthInd ==0 )</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>      {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>        sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>      }</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="comment">         *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">         *------------------------FINETUNING----------------------------------</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="comment">         *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">         * shift the rows of the reconstructed images of the data cube to the </span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">         * correct sub pixel position select the shift method: polynomial </span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">         * interpolation, FFT or cubic spline interpolation</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">         *--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>  </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       <span class="keywordflow">if</span>(strcmp(cfg->sky_dist,<span class="stringliteral">"no_sky"</span>)!=0) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>          cknull(csky2=sinfo_new_fine_tune(csky,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                                              correct_dist,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                                              cfg->method,</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                                              cfg->order,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                           cfg->nslits),</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>          sinfo_free_imagelist(&csky);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>          sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>  </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>          cknull(csky = sinfo_new_bin_cube(csky2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>             <span class="stringliteral">"error rebinning sky cube"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>          sinfo_free_imagelist(&csky2);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>        </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>      </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>          ck0(sinfo_pro_save_ims(csky,sof,sof,<span class="stringliteral">"out_sky_cube.fits"</span>,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                     PRO_OBS_SKY,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>          <span class="stringliteral">"cannot dump cube %s"</span>, <span class="stringliteral">"out_sky_cube.fits"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>  </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>          cknull(eima_med=sinfo_new_median_cube(csky),</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                 <span class="stringliteral">"Creating an average image"</span>);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>          check_nomsg(center_x = cpl_image_get_size_x(eima_med)/ 2. + 0.5);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>          check_nomsg(center_y = cpl_image_get_size_y(eima_med)/ 2. + 0.5);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>             sinfo_new_set_wcs_cube(csky, <span class="stringliteral">"out_sky_cube.fits"</span>, centralLambda, </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                           dis, centralpix, center_x, center_y);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>          sinfo_free_imagelist(&csky) ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>          ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_sky_med.fits"</span>,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                     PRO_SKY_MED,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>          <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_sky_med.fits"</span>);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>             sinfo_new_set_wcs_image(eima_med,<span class="stringliteral">"out_sky_med.fits"</span>, </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                                      center_x, center_y);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>          sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>       <span class="keywordflow">if</span>(strcmp(cfg->mflat_dist,<span class="stringliteral">"not_found"</span>)!=0) {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         cknull(cflat2=sinfo_new_fine_tune(cflat,correct_dist,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                                               cfg->method,cfg->order,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                                               cfg->nslits),</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                                        <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>         sinfo_free_imagelist(&cflat);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>  </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         cknull(cflat = sinfo_new_bin_cube(cflat2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>            <span class="stringliteral">"Error binning flat cube"</span>);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>         sinfo_free_imagelist(&cflat2);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         ck0(sinfo_pro_save_ims(cflat,sof,sof,OBJNOD_OUT_MFLAT_CUBE_FILENAME,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                    PRO_MFLAT_CUBE,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>         <span class="stringliteral">"cannot save cube %s"</span>, OBJNOD_OUT_MFLAT_CUBE_FILENAME);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>         cknull(eima_avg=sinfo_new_average_cube_to_image(cflat),</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                <span class="stringliteral">"Creating an average image"</span>);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         ck0(sinfo_pro_save_ima(eima_avg,sof,sof,<span class="stringliteral">"out_mflat_avg.fits"</span>,</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>                    <span class="stringliteral">"MFLAT_AVG"</span>,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_avg.fits"</span>);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         sinfo_free_image(&eima_avg);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         cknull(eima_med=sinfo_new_median_cube(cflat),</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>            <span class="stringliteral">"Error computing median on cube flat"</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>         ck0(sinfo_pro_save_ima(eima_med,sof,sof,<span class="stringliteral">"out_mflat_med.fits"</span>,</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                    <span class="stringliteral">"MFLAT_MED"</span>,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         <span class="stringliteral">"cannot save ima %s"</span>, <span class="stringliteral">"out_mflat_med.fits"</span>);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         sinfo_free_imagelist(&cflat); </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>       }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>        </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         cknull(outcube2=sinfo_new_fine_tune(cube,</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                                             correct_dist,</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                                             cfg->method,</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                                             cfg->order,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                                             cfg->nslits),</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                                      <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>         sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>            <span class="stringliteral">"Error binning cube"</span>);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>         cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>         sinfo_get_pupil_shift(outcube,n,&qclog_tbl);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>         snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>          <span class="stringliteral">"out_cube_obj"</span>,n,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         ck0(sinfo_pro_save_ims(outcube,sof,sof,file_name,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>                    pro_obs,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         <span class="stringliteral">"cannot save cube %s"</span>, file_name);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     check_nomsg(center_x = cpl_image_get_size_x(</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                                cpl_imagelist_get(outcube,0))/2.+0.5) ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     check_nomsg(center_y = cpl_image_get_size_y(</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>                                cpl_imagelist_get(outcube,0))/2.+0.5 );</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>    </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     sinfo_new_set_wcs_cube(outcube, file_name, centralLambda, dis, </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                      centralpix, center_x, center_y);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>        <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         <span class="comment">/* to prevent error message comment next line */</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         sinfo_free_imagelist(&outcube2);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         sinfo_free_imagelist(&outcube) ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     sinfo_free_float(&correct_dist) ;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     } <span class="comment">/* end loop over n (nframes) */</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>  </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     <span class="comment">/* leak free */</span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     <span class="keywordflow">if</span>(cfg->jitterind == 0) {</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>       <span class="keywordflow">goto</span> exit;</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     }   </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>      </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     <span class="comment">/* Here in case of autojitter we estimate the sky */</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     <span class="keywordflow">if</span>( (cfg->size_x*cfg->size_y*cfg->nframes) > (100*mosaic_max_size) ) {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Coadd cube size:%d,%d. N frames: %d"</span>,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                            cfg->size_x,cfg->size_y,cfg->nframes);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Max allowed should be such that "</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                         <span class="stringliteral">"sixeX*sixeY*Nframes < 100*%d"</span>,mosaic_max_size);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>       <span class="keywordflow">goto</span> exit;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     } </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>  </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     <span class="keywordflow">if</span> ( cfg->jitterind == 1 )</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     {  </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vllx"</span>));</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         check_nomsg(vllx = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vlly"</span>));</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         check_nomsg(vlly = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vurx"</span>));</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>         check_nomsg(vurx = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         check_nomsg(p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.objnod.vury"</span>));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>         check_nomsg(vury = cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>  </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         cknull(cube_tmp =(cpl_imagelist**) cpl_calloc(cfg->nframes, </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                                                       sizeof (cpl_imagelist*)),</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                                      <span class="stringliteral">"Could not allocate memory for cube_tmp"</span>);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         cknull(cubeobject =(cpl_imagelist**) cpl_calloc(cfg->nframes, </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                                                         <span class="keyword">sizeof</span>(cpl_imagelist*)),</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                                     <span class="stringliteral">"Could not allocate memory for cubeobject"</span>);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>           snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_cube_obj"</span>,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                      n,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>       check_nomsg(cube_tmp[n] = cpl_imagelist_load(file_name,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                                CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       check_nomsg(cubeobject[n] = sinfo_new_cube_getvig(cube_tmp[n],</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                                 1+vllx,1+vlly,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                                 64-vurx,64-vury));</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>           check_nomsg(sinfo_free_imagelist(&cube_tmp[n]));</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     }</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         sinfo_free_array_imagelist(&cube_tmp);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> <span class="comment">        ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> <span class="comment">        ------------------------JITTERING------------------------------------</span></div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> <span class="comment">        ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     <span class="keywordflow">if</span> (cfg->jitterind == 1)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     sinfo_msg(<span class="stringliteral">"Jittering..."</span>);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>         sinfo_msg(<span class="stringliteral">"Coadded cube size. x: %d y: %d"</span>,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>              cfg->size_x,cfg->size_y);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         check_nomsg(jittercube = cpl_imagelist_new()) ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> <span class="comment">        ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="comment">        -------------------THOMAS ALGORITHM----------------------------------</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="comment">        ---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>        </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                                              <span class="stringliteral">"sinfoni.objnod.scales_sky"</span>));</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         check_nomsg(scales_sky=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>));</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         check_nomsg(ks_clip = cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.objnod.kappa"</span>));</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>         check_nomsg(kappa = cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="keywordflow">if</span>(scales_sky == 1) {</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>       sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>       <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>         sinfo_msg(<span class="stringliteral">"process cube %d\n"</span>,n);</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         sinfo_new_sinfoni_correct_median_it(&(cubeobject[n]));</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> </div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         <span class="comment">/* AMO CHECK */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>         cknull(maskcube=cpl_imagelist_new(),<span class="stringliteral">"could not allocate cube!"</span>);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>         </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="comment">/* Illumination correction */</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>         <span class="keywordflow">if</span>(ill_cor != NULL) {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>       <span class="keywordflow">for</span>(n=0;n<cfg->nframes;n++) {</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>         sinfo_msg(<span class="stringliteral">"Illumination correction is applied"</span>);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>         cpl_imagelist_divide_image(cubeobject[n],ill_cor);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>       }</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     }</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         sinfo_free_image(&ill_cor);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     sinfo_msg(<span class="stringliteral">"Combine jittered cubes"</span>);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <span class="keywordflow">if</span>(ks_clip == 1) {</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>       sinfo_msg(<span class="stringliteral">"Cube coaddition with kappa-sigma"</span>);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>         check_nomsg(onp=cpl_imagelist_get_size(cubeobject[0]));</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>       z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>       z_min=z;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>       z_max=z_min+z_siz;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>       sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>                            z_min,z_max,onp);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>       <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>             check_nomsg(j_img=cpl_image_new(cfg->size_x,</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                                             cfg->size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>         check_nomsg(cpl_imagelist_set(jittercube,j_img,j));</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             check_nomsg(m_img = cpl_image_new(cfg->size_x,</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                                               cfg->size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>             check_nomsg(cpl_imagelist_set(maskcube,m_img,j));</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>       }</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>       <span class="keywordflow">if</span>(ks_clip == 1) {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>         sinfo_new_combine_jittered_cubes_thomas_range(cubeobject,</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                             jittercube,</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                             maskcube,</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                             cfg->nframes,</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                             offsetx,offsety,</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>                             times,</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>                             cfg->kernel_type,</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>                             z_min,</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>                             z_max,</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>                             kappa);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         sinfo_new_combine_jittered_cubes_range(cubeobject, </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>                                              jittercube,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>                                              maskcube,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                          cfg->nframes,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                                              offsetx,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>                          offsety, </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>                                              times,</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>                          cfg->kernel_type,</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                                              z_min,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                                              z_max) ;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>       }</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     }</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>         sinfo_new_convert_0_to_ZERO_for_cubes(jittercube) ; </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>       <span class="keywordflow">if</span> (jittercube == NULL)</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     {</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate new data cube!"</span>) ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     }</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <span class="keywordflow">if</span> (maskcube == NULL)</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     {</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not merge the jittered data cubes\n"</span>) ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     }</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     <span class="keywordflow">for</span> ( i = 0 ; i <cfg->nframes  ; i++ ) {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>       sinfo_free_imagelist(&cubeobject[i]);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     }</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     sinfo_free_array_imagelist(&cubeobject);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         newcenter_x = cfg->size_x / 2. + 0.5 ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     newcenter_y = cfg->size_y / 2. + 0.5 ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>         ck0(sinfo_pro_save_ims(jittercube,sof,sof,cfg->outName,</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                    procatg,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         <span class="stringliteral">"cannot save cube %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>       sinfo_new_set_wcs_cube(jittercube, cfg->outName, centralLambda, </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                                dis, centralpix, center_x, center_y);</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>         cknull(jitter_image = sinfo_new_median_cube(jittercube),</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>                <span class="stringliteral">" could not do sinfo_medianCube()"</span>);</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         ck0(sinfo_pro_save_ima(jitter_image,sof,sof,cfg->med_cube_name,</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>                    pro_med,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>       sinfo_new_set_wcs_image(jitter_image, cfg->med_cube_name,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                                 center_x,center_y);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         sinfo_free_image(&jitter_image);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>         ck0(sinfo_pro_save_ims(maskcube,sof,sof,cfg->maskname,</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                    pro_mjit,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>         <span class="stringliteral">"cannot save cube %s"</span>, cfg->maskname);</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>      sinfo_new_set_wcs_cube(maskcube, cfg->maskname, centralLambda, </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                                dis, centralpix, center_x, center_y);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>         sinfo_free_double(&times) ;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>         sinfo_free_float(&offsetx) ;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>         sinfo_free_float(&offsety) ;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         sinfo_free_imagelist(&maskcube) ;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         sinfo_free_imagelist(&jittercube) ;         </div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     } <span class="comment">/* end of jittering */</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>  exit:</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>  <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordflow">return</span> 0;   </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>  cleanup:</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     sinfo_free_image(&jitter_image);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     sinfo_free_imagelist(&jittercube) ;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     sinfo_free_imagelist(&maskcube) ;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     <span class="keywordflow">if</span>(cfg != NULL) {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>       <span class="keywordflow">if</span>(cube_tmp != NULL) {</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>       sinfo_free_imagelist(&(cube_tmp[n]));</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     }</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>         sinfo_free_array_imagelist(&cube_tmp);</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>       }</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>       <span class="keywordflow">if</span>(cubeobject != NULL) {</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>       sinfo_free_imagelist(&(cubeobject[n]));</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>         sinfo_free_array_imagelist(&cubeobject);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>       }</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     }</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     sinfo_free_imagelist(&outcube2) ;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     sinfo_free_imagelist(&outcube) ;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     sinfo_free_image(&eima_avg);</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     sinfo_free_image(&eima_med);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     sinfo_free_imagelist(&cflat) ;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     sinfo_free_imagelist(&cflat2) ;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     sinfo_free_imagelist(&cube) ;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     sinfo_free_imagelist(&csky) ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     sinfo_free_imagelist(&csky2) ;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordflow">if</span>(cfg!=NULL) {</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>       <span class="keywordflow">if</span> (cfg->northsouthInd ==0 ) {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="keywordflow">if</span>(slit_edges != NULL) {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>        sinfo_new_destroy_2Dfloatarray(&slit_edges,cfg->nslits);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     }</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     <span class="keywordflow">if</span> (distances != NULL ) {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>             sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     }</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>       }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     sinfo_free_float(&correct_dist);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     sinfo_free_image(&res_flat);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     sinfo_free_image(&res_sky);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     sinfo_free_image(&calim);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     sinfo_free_image(&halospec) ;</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     sinfo_free_image(&sky_im) ;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     sinfo_free_image(&resampledImage);</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     sinfo_free_image(&flat_im) ;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     sinfo_free_image(&wavemapim);</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     sinfo_free_image(&im);</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     sinfo_free_image(&ill_cor);</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     sinfo_free_float(&offsety);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     sinfo_free_float(&offsetx);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     sinfo_free_double(&times);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <span class="keywordflow">return</span> -1;   </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__objnod_8h_source.html b/html/sinfo__new__objnod_8h_source.html
index a8fe468..29abe98 100644
--- a/html/sinfo__new__objnod_8h_source.html
+++ b/html/sinfo__new__objnod_8h_source.html
@@ -2,85 +2,116 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_objnod.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_objnod.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_OBJNOD_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_OBJNOD_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_objnod.h,v 1.8 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_objnod.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to create a data cube</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <math.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">   @name sinfo_new_objnod()</span>
-<a name="l00049"></a>00049 <span class="comment">   @param ini_file: file name of according .ini file</span>
-<a name="l00050"></a>00050 <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00051"></a>00051 <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span>
-<a name="l00052"></a>00052 <span class="comment">        flatfielded, bad pixel corrected and</span>
-<a name="l00053"></a>00053 <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span>
-<a name="l00054"></a>00054 <span class="comment">    calibration is carried through by using</span>
-<a name="l00055"></a>00055 <span class="comment">        a standard star or a black body measurement. </span>
-<a name="l00056"></a>00056 <span class="comment">    The spectral features of the flatfield halogen lamp are corrected.</span>
-<a name="l00057"></a>00057 <span class="comment">        Afterwards a data cube is created out of the resampled image.</span>
-<a name="l00058"></a>00058 <span class="comment">    It is the users choice to use either</span>
-<a name="l00059"></a>00059 <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span>
-<a name="l00060"></a>00060 <span class="comment">    of the slitlets gained from a north-south-test. </span>
-<a name="l00061"></a>00061 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> 
-<a name="l00063"></a>00063 sinfo_new_objnod (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00064"></a>00064                   cpl_parameterlist* config, 
-<a name="l00065"></a>00065                   cpl_frameset* sof, 
-<a name="l00066"></a>00066                   <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg) ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#endif </span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_objnod.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_OBJNOD_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_OBJNOD_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_objnod.h,v 1.8 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_objnod.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to create a data cube</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   @name sinfo_new_objnod()</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   @param ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   @return integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   @doc this routine does the resampling of an offset-corrected,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">        flatfielded, bad pixel corrected and</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">        eventually interleaved data frame. Additionally, an intensity </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">    calibration is carried through by using</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">        a standard star or a black body measurement. </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">    The spectral features of the flatfield halogen lamp are corrected.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">        Afterwards a data cube is created out of the resampled image.</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">    It is the users choice to use either</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">        the fitted sinfo_edge positions of the slitlets or the distances</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">    of the slitlets gained from a north-south-test. </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_new_objnod (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                   cpl_parameterlist* config, </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                   cpl_frameset* sof, </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                   <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__prepare__stacked__frames_8c_source.html b/html/sinfo__new__prepare__stacked__frames_8c_source.html
index 6858800..00ec5e8 100644
--- a/html/sinfo__new__prepare__stacked__frames_8c_source.html
+++ b/html/sinfo__new__prepare__stacked__frames_8c_source.html
@@ -2,1414 +2,1445 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_prepare_stacked_frames.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_prepare_stacked_frames.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">     File name    :       sinfo_new_prepare_stacked_frames.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span>
-<a name="l00027"></a>00027 <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad</span>
-<a name="l00028"></a>00028 <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally,</span>
-<a name="l00029"></a>00029 <span class="comment">  interleaves dithered exposures or convolves a single exposure with a</span>
-<a name="l00030"></a>00030 <span class="comment">  Gaussian, respectively.</span>
-<a name="l00031"></a>00031 <span class="comment"></span>
-<a name="l00032"></a>00032 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                Includes</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_new_prepare_stacked_frames.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_stack_ini_by_cpl.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_coltilt.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_merge.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_new_bezier.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_shift_images.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_product_config.h"</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "sinfo_wcal_functions.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_new_bezier.h"</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">                                Defines</span>
-<a name="l00067"></a>00067 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                             Function Definitions</span>
-<a name="l00079"></a>00079 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00082"></a>00082 <span class="comment">   Function     :       sinfo_new_prepare_stacked_frames()</span>
-<a name="l00083"></a>00083 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00084"></a>00084 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span>
-<a name="l00085"></a>00085 <span class="comment">   Job          :</span>
-<a name="l00086"></a>00086 <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span>
-<a name="l00087"></a>00087 <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad</span>
-<a name="l00088"></a>00088 <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally,</span>
-<a name="l00089"></a>00089 <span class="comment">  interleaves dithered exposures or convolves a single exposure with a</span>
-<a name="l00090"></a>00090 <span class="comment">  Gaussian, respectively.</span>
-<a name="l00091"></a>00091 <span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00094"></a>00094 new_get_names(<span class="keyword">const</span> <span class="keywordtype">char</span>* pcatg, <span class="keyword">const</span> <span class="keywordtype">int</span> ind, stack_config_n ** cfg);
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00097"></a>00097 new_get_names(<span class="keyword">const</span> <span class="keywordtype">char</span>* pcatg, <span class="keyword">const</span> <span class="keywordtype">int</span> ind, stack_config_n **  cfg){
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_OFF) == 0) {
-<a name="l00100"></a>00100      strcpy((*cfg)->outName,DISTORTION_STACK_OFF_OUT_FILENAME);
-<a name="l00101"></a>00101   }
-<a name="l00102"></a>00102   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_ON)  == 0) {
-<a name="l00103"></a>00103      strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack_on.fits"</span>);
-<a name="l00104"></a>00104   }
-<a name="l00105"></a>00105   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED)     == 0) {
-<a name="l00106"></a>00106      strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack.fits"</span>);
-<a name="l00107"></a>00107   }
-<a name="l00108"></a>00108   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_WAVE_LAMP_STACKED)    == 0) {
-<a name="l00109"></a>00109      strcpy((*cfg)->outName,<span class="stringliteral">"out_wcal_stack.fits"</span>);
-<a name="l00110"></a>00110   }
-<a name="l00111"></a>00111   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_DIST)== 0) {
-<a name="l00112"></a>00112      strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack_warp.fits"</span>);
-<a name="l00113"></a>00113   }
-<a name="l00114"></a>00114   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_WAVE_SLITPOS_STACKED) == 0) {
-<a name="l00115"></a>00115      strcpy((*cfg)->outName,<span class="stringliteral">"out_slit_pos_stack.fits"</span>);
-<a name="l00116"></a>00116   }
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_PSF_CALIBRATOR_STACKED)== 0) {
-<a name="l00119"></a>00119      snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00120"></a>00120   }
-<a name="l00121"></a>00121   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_SKY_PSF_CALIBRATOR_STACKED)== 0) {
-<a name="l00122"></a>00122      strcpy((*cfg)->outName,STACKED_OUT_FILENAME);
-<a name="l00123"></a>00123   }
-<a name="l00124"></a>00124   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {
-<a name="l00125"></a>00125      snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00126"></a>00126   }
-<a name="l00127"></a>00127   <span class="comment">/* only 1 frame</span>
-<a name="l00128"></a>00128 <span class="comment">  if (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {</span>
-<a name="l00129"></a>00129 <span class="comment">    strcpy((*cfg)->outName,STACKED_OUT_FILENAME);</span>
-<a name="l00130"></a>00130 <span class="comment">  }</span>
-<a name="l00131"></a>00131 <span class="comment">  */</span>
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_SKY_NODDING_STACKED) == 0) {
-<a name="l00134"></a>00134     strcpy((*cfg)->outName,STACKED_OUT_FILENAME); <span class="comment">/*STD*/</span>
-<a name="l00135"></a>00135   }
-<a name="l00136"></a>00136   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_OBJECT_NODDING_STACKED) == 0) {
-<a name="l00137"></a>00137     snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00138"></a>00138   }
-<a name="l00139"></a>00139   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_PUPIL_LAMP_STACKED) == 0) {
-<a name="l00140"></a>00140     snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00141"></a>00141   }
-<a name="l00142"></a>00142   <span class="keywordflow">if</span> (strcmp(pcatg,PRO_STACKED) == 0) {
-<a name="l00143"></a>00143     snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00144"></a>00144   }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   snprintf((*cfg)->sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_sky"</span>,ind,<span class="stringliteral">".fits"</span>);
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148   <span class="keywordflow">return</span> 0;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="keywordtype">int</span> sinfo_new_prepare_stacked_frames (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00154"></a>00154                                 cpl_parameterlist* config,
-<a name="l00155"></a>00155                                 cpl_frameset* sof,
-<a name="l00156"></a>00156                                 cpl_frameset* ref_set,
-<a name="l00157"></a>00157                                 <span class="keyword">const</span> <span class="keywordtype">char</span>* frm_pro_ctg,
-<a name="l00158"></a>00158                                 <span class="keyword">const</span> <span class="keywordtype">int</span> frm_ind,
-<a name="l00159"></a>00159                                 fake* fk)
-<a name="l00160"></a>00160 {
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163   stack_config_n * cfg =NULL;
-<a name="l00164"></a>00164   cpl_imagelist * list_object=NULL ;
-<a name="l00165"></a>00165   cpl_imagelist * list_dither_object=NULL;
-<a name="l00166"></a>00166   cpl_imagelist * list_dither_sky=NULL;
-<a name="l00167"></a>00167   cpl_imagelist * list_sky=NULL;
-<a name="l00168"></a>00168   cpl_imagelist * list_dark=NULL;
-<a name="l00169"></a>00169   new_Lookup* lookup=NULL;
-<a name="l00170"></a>00170   cpl_image * im3=NULL ;
-<a name="l00171"></a>00171   cpl_image * im4=NULL ;
-<a name="l00172"></a>00172   cpl_image * im5=NULL ;
-<a name="l00173"></a>00173   cpl_image * im6=NULL ;
-<a name="l00174"></a>00174   cpl_image * im7=NULL ;
-<a name="l00175"></a>00175   cpl_image * im8=NULL ;
-<a name="l00176"></a>00176   cpl_image * im9=NULL ;
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178   cpl_image * ref_im1=NULL ;
-<a name="l00179"></a>00179   cpl_image * ref_im2=NULL ;
-<a name="l00180"></a>00180   cpl_image ** im=NULL ;
-<a name="l00181"></a>00181   cpl_image * im_obj=NULL ;
-<a name="l00182"></a>00182   cpl_image* simg=NULL;
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184   cpl_image * im_dark=NULL ;
-<a name="l00185"></a>00185   cpl_image * im_sky=NULL ;
-<a name="l00186"></a>00186   cpl_image * im_dither=NULL ;
-<a name="l00187"></a>00187   cpl_image * im_dither_sky=NULL ;
-<a name="l00188"></a>00188   cpl_image * im_obj_sub=NULL ;
-<a name="l00189"></a>00189   cpl_image * im_obj_flat=NULL ;
-<a name="l00190"></a>00190   cpl_image * im_dither_sub=NULL ;
-<a name="l00191"></a>00191   cpl_image * im_dither_flat=NULL ;
-<a name="l00192"></a>00192   cpl_image * int_im_shifted=NULL ;
-<a name="l00193"></a>00193   cpl_image * int_im_dith_shifted=NULL ;
-<a name="l00194"></a>00194   cpl_image * im_conv=NULL ;
-<a name="l00195"></a>00195   <span class="keywordtype">int</span> sy=0;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197   cpl_image * mask_im=NULL ;
-<a name="l00198"></a>00198   cpl_image * flat_smooth=NULL ;
-<a name="l00199"></a>00199   cpl_image * flat1=NULL ;
-<a name="l00200"></a>00200   cpl_image * flat2=NULL ;
-<a name="l00201"></a>00201   cpl_image * int_im=NULL ;
-<a name="l00202"></a>00202   cpl_image * int_im_dith=NULL ;
-<a name="l00203"></a>00203   cpl_image * sky_img_flat=NULL;
-<a name="l00204"></a>00204   cpl_image * sky_dist=NULL;
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207   cpl_imagelist * iCube=NULL ;
-<a name="l00208"></a>00208   cpl_imagelist * jCube=NULL ;
-<a name="l00209"></a>00209   cpl_image * X=NULL ;
-<a name="l00210"></a>00210   cpl_image * hX=NULL ;
-<a name="l00211"></a>00211   cpl_image * Y=NULL ;
-<a name="l00212"></a>00212   cpl_image * Z=NULL ;
-<a name="l00213"></a>00213   cpl_table * qclog_tbl=NULL;
-<a name="l00214"></a>00214   cpl_image* sky_img=NULL;
-<a name="l00215"></a>00215   cpl_image* mdark=NULL;
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   <span class="keywordtype">char</span>* name=NULL;
-<a name="l00218"></a>00218   <span class="keywordtype">int</span> typ=0;
-<a name="l00219"></a>00219   <span class="keywordtype">int</span> pos=0;
-<a name="l00220"></a>00220   <span class="keywordtype">int</span> i = 0;
-<a name="l00221"></a>00221   <span class="keywordtype">int</span> n = 0;
-<a name="l00222"></a>00222   <span class="keywordtype">int</span> cnt = 0 ;
-<a name="l00223"></a>00223   <span class="keywordtype">float</span> val_x=0;
-<a name="l00224"></a>00224   <span class="keywordtype">float</span> val_y=0;
-<a name="l00225"></a>00225   <span class="keywordtype">int</span> status=0;
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227   <span class="keywordtype">float</span>** slit_edges=NULL;
-<a name="l00228"></a>00228   <span class="keywordtype">char</span>** in_nam=NULL;
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230   <span class="keywordtype">int</span> nob = 0;
-<a name="l00231"></a>00231   <span class="keywordtype">int</span> nsky = 0;
-<a name="l00232"></a>00232   <span class="keywordtype">int</span> nobjdith = 0;
-<a name="l00233"></a>00233   <span class="keywordtype">int</span> nskydith = 0;
-<a name="l00234"></a>00234   <span class="keywordtype">int</span> nda = 0;
-<a name="l00235"></a>00235   <span class="keywordtype">char</span> name_list[MAX_NAME_SIZE];
-<a name="l00236"></a>00236   <span class="keywordtype">char</span> fake_sky_name[MAX_NAME_SIZE];
-<a name="l00237"></a>00237   <span class="keywordtype">int</span> no=0;
-<a name="l00238"></a>00238   <span class="keywordtype">float</span> lo_cut=0;
-<a name="l00239"></a>00239   <span class="keywordtype">float</span> hi_cut=0;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241   cpl_imagelist* list_object_tmp=NULL;
-<a name="l00242"></a>00242   cpl_imagelist* list_dither_object_tmp=NULL;
-<a name="l00243"></a>00243   cpl_imagelist* list_sky_tmp=NULL;
-<a name="l00244"></a>00244   cpl_imagelist* list_dither_sky_tmp=NULL;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   cpl_image* flat1_dist=NULL;
-<a name="l00247"></a>00247   cpl_image* flat2_dist=NULL;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   cpl_frameset* raw=NULL;
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251   <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];
-<a name="l00252"></a>00252   cpl_table* tbl_index = NULL;
-<a name="l00253"></a>00253   cpl_table* tbl_slitpos=NULL;
-<a name="l00254"></a>00254   <span class="keywordtype">int</span> rhead=0;
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256   cpl_frame*     sky_frame = NULL;
-<a name="l00257"></a>00257   <span class="keywordtype">char</span>* sky_name  = NULL;
-<a name="l00258"></a>00258   <span class="keywordtype">char</span>* sky_tag   = NULL;
-<a name="l00259"></a>00259   qc_wcal* qc=sinfo_qc_wcal_new();
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   cpl_parameter* p=NULL;
-<a name="l00262"></a>00262   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00263"></a>00263   <span class="keywordtype">int</span> mflat_norm_smooth=FALSE;
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265   <span class="keywordtype">int</span> smooth_rad=16;
-<a name="l00266"></a>00266   <span class="keywordtype">int</span> sub_raw_sky=1;
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   <span class="comment">/*</span>
-<a name="l00269"></a>00269 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00270"></a>00270 <span class="comment">       1) parse the file names and parameters to the psf_config data</span>
-<a name="l00271"></a>00271 <span class="comment">          structure cfg</span>
-<a name="l00272"></a>00272 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00273"></a>00273 <span class="comment">  */</span>
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00277"></a>00277   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00282"></a>00282                        <span class="stringliteral">"sinfoni.stacked.mflat_norm_smooth"</span>));
-<a name="l00283"></a>00283   check_nomsg(mflat_norm_smooth=cpl_parameter_get_int(p));
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00288"></a>00288                        <span class="stringliteral">"sinfoni.stacked.mflat_smooth_rad"</span>));
-<a name="l00289"></a>00289   check_nomsg(smooth_rad=cpl_parameter_get_int(p));
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.sub_raw_sky"</span>));
-<a name="l00292"></a>00292   check_nomsg(sub_raw_sky=cpl_parameter_get_bool(p));
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   check_nomsg(raw=cpl_frameset_new());
-<a name="l00296"></a>00296   cknull(cfg = sinfo_parse_cpl_input_stack(config,sof,&raw, fk),
-<a name="l00297"></a>00297         <span class="stringliteral">"could not parse cpl input file!"</span>) ;
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   ck0(sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc),<span class="stringliteral">"computing det ncounts"</span>);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   <span class="keywordflow">if</span>(ref_set != NULL) {
-<a name="l00303"></a>00303     sinfo_free_frameset(&raw);
-<a name="l00304"></a>00304     raw=cpl_frameset_duplicate(ref_set);
-<a name="l00305"></a>00305   }
-<a name="l00306"></a>00306   <span class="comment">/* defines output file name for stack set i */</span>
-<a name="l00307"></a>00307   ck0_nomsg(new_get_names(frm_pro_ctg, frm_ind, &cfg));
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309   <span class="keywordflow">if</span> (cfg->flatInd == 1){
-<a name="l00310"></a>00310     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->flatfield1) != 1) {
-<a name="l00311"></a>00311        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input FF file %s is not FITS"</span>,cfg->flatfield1);
-<a name="l00312"></a>00312        <span class="keywordflow">goto</span> cleanup;
-<a name="l00313"></a>00313     }
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315   }
-<a name="l00316"></a>00316   <span class="keywordflow">if</span> (cfg->maskInd == 1) {
-<a name="l00317"></a>00317     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {
-<a name="l00318"></a>00318          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input mask file %s is not FITS"</span>,cfg->mask);
-<a name="l00319"></a>00319          <span class="keywordflow">goto</span> cleanup;
-<a name="l00320"></a>00320     }
-<a name="l00321"></a>00321     <span class="keywordflow">if</span>(cfg -> indind == 0) {
-<a name="l00322"></a>00322       <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->slitposList) != 1) {
-<a name="l00323"></a>00323     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input slitpos file %s is not FITS"</span>,cfg->slitposList);
-<a name="l00324"></a>00324     <span class="keywordflow">goto</span> cleanup;
-<a name="l00325"></a>00325       }
-<a name="l00326"></a>00326     }
-<a name="l00327"></a>00327   }
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329   <span class="comment">/*</span>
-<a name="l00330"></a>00330 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00331"></a>00331 <span class="comment">   # Take a clean mean of several images</span>
-<a name="l00332"></a>00332 <span class="comment">   # input is 1 or more similar images</span>
-<a name="l00333"></a>00333 <span class="comment">   #---------------------------------------------------------</span>
-<a name="l00334"></a>00334 <span class="comment">  */</span>
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   <span class="keywordflow">if</span> (cfg->sfInd == 1){
-<a name="l00337"></a>00337     <span class="keywordflow">if</span> (cfg->contains_dark == 0) {
-<a name="l00338"></a>00338       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no sinfo_dark frames given!"</span>);
-<a name="l00339"></a>00339     }
-<a name="l00340"></a>00340     <span class="keywordflow">if</span> (cfg->contains_ref == 0) {
-<a name="l00341"></a>00341       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no reference frames given!"</span>);
-<a name="l00342"></a>00342       <span class="keywordflow">goto</span> cleanup;
-<a name="l00343"></a>00343     }
-<a name="l00344"></a>00344   }
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346   <span class="comment">/* allocate memory for lists of object, sky and dithered frames */</span>
-<a name="l00347"></a>00347   check(list_object=cpl_imagelist_new(),
-<a name="l00348"></a>00348         <span class="stringliteral">"could not allocate memory for object frame"</span>);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00351"></a>00351     check(list_dither_object=cpl_imagelist_new(),
-<a name="l00352"></a>00352           <span class="stringliteral">"could not allocate memory for dither object frame"</span>);
-<a name="l00353"></a>00353   }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00356"></a>00356     check(list_sky = cpl_imagelist_new(),
-<a name="l00357"></a>00357        <span class="stringliteral">"could not allocate memory for off frame list"</span>);
-<a name="l00358"></a>00358   }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->nditheroff > 0) {
-<a name="l00361"></a>00361      check(list_dither_sky = cpl_imagelist_new(),
-<a name="l00362"></a>00362        <span class="stringliteral">"could not allocate memory for dither frame list"</span>);
-<a name="l00363"></a>00363   }
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365   <span class="keywordflow">if</span> (cfg->contains_dark == 1 && cfg->sfInd == 1) {
-<a name="l00366"></a>00366      check(list_dark = cpl_imagelist_new(),
-<a name="l00367"></a>00367        <span class="stringliteral">"could not allocate memory for sinfo_dark frame"</span>);
-<a name="l00368"></a>00368   }
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370   <span class="keywordflow">if</span> (cfg->contains_dither == 0 && cfg->nditheroff > 0) {
-<a name="l00371"></a>00371      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"please use non-dithered off-frames, remove the 2!"</span>);
-<a name="l00372"></a>00372      <span class="keywordflow">goto</span> cleanup;
-<a name="l00373"></a>00373   }
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375   <span class="comment">/* build different image lists for the different cases */</span>
-<a name="l00376"></a>00376   cknull_nomsg(im=(cpl_image**)cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(cpl_image*)));
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {
-<a name="l00379"></a>00379      name = cfg->framelist[i];
-<a name="l00380"></a>00380      <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {
-<a name="l00381"></a>00381        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00382"></a>00382        <span class="keywordflow">goto</span> cleanup;
-<a name="l00383"></a>00383      }
-<a name="l00384"></a>00384      check_nomsg(im[i] = cpl_image_load( name,CPL_TYPE_FLOAT,0,0));
-<a name="l00385"></a>00385   }
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387   <span class="comment">/* up to here leak free */</span>
-<a name="l00388"></a>00388   rhead=0;
-<a name="l00389"></a>00389   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {
-<a name="l00390"></a>00390     typ = sinfo_new_intarray_get_value( cfg->frametype, i );
-<a name="l00391"></a>00391     pos = sinfo_new_intarray_get_value( cfg->frameposition, i );
-<a name="l00392"></a>00392     cknull(im[i],<span class="stringliteral">"could not load image"</span>);
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394     <span class="keywordflow">if</span> (pos == 2) {
-<a name="l00395"></a>00395       <span class="keywordflow">if</span> (typ == 1) {
-<a name="l00396"></a>00396         check_nomsg(cpl_imagelist_set(list_object,
-<a name="l00397"></a>00397                                       cpl_image_duplicate(im[i]),nob));
-<a name="l00398"></a>00398         nob = nob + 1;
-<a name="l00399"></a>00399       }
-<a name="l00400"></a>00400       <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 0 ) {
-<a name="l00401"></a>00401         check_nomsg(cpl_imagelist_set(list_sky,
-<a name="l00402"></a>00402                     cpl_image_duplicate(im[i]),nsky));
-<a name="l00403"></a>00403         nsky = nsky + 1;
-<a name="l00404"></a>00404     <span class="keywordflow">if</span>(pdensity > 0) {
-<a name="l00405"></a>00405       <span class="keywordflow">if</span>(fk->is_fake_sky==1) {
-<a name="l00406"></a>00406         snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,
-<a name="l00407"></a>00407              frm_ind,<span class="stringliteral">".fits"</span>);
-<a name="l00408"></a>00408         check_nomsg(sky_img=cpl_image_load(fake_sky_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00409"></a>00409         ck0(sinfo_pro_save_ima(sky_img,raw,sof,fake_sky_name,
-<a name="l00410"></a>00410                    PRO_SKY_DUMMY,NULL,
-<a name="l00411"></a>00411                    plugin_id,config),
-<a name="l00412"></a>00412         <span class="stringliteral">"cannot save sky ima %s"</span>, fake_sky_name);
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414         sinfo_free_image(&sky_img);
-<a name="l00415"></a>00415       }
-<a name="l00416"></a>00416     }
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419         <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 1) ||
-<a name="l00420"></a>00420            (pdensity == 2 && frm_ind == 0)) {
-<a name="l00421"></a>00421       check_nomsg(sky_frame = cpl_frameset_get_frame(raw,i));
-<a name="l00422"></a>00422       check_nomsg(sky_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(sky_frame));
-<a name="l00423"></a>00423       check_nomsg(sky_tag   = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(sky_frame));
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425           <span class="keywordflow">if</span> ( (strstr(frm_pro_ctg,<span class="stringliteral">"OBJECT"</span>) != NULL) ||
-<a name="l00426"></a>00426                (strstr(frm_pro_ctg,<span class="stringliteral">"PSF"</span>) != NULL) ||
-<a name="l00427"></a>00427                (strstr(frm_pro_ctg,<span class="stringliteral">"STD"</span>) != NULL) ) {
-<a name="l00428"></a>00428         check_nomsg(sky_img = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00429"></a>00429         snprintf(sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky"</span>,
-<a name="l00430"></a>00430              frm_ind,<span class="stringliteral">".fits"</span>);
-<a name="l00431"></a>00431         ck0(sinfo_pro_save_ima(sky_img,raw,sof,sky_name,
-<a name="l00432"></a>00432                    PRO_SKY_STACKED_DUMMY,NULL,
-<a name="l00433"></a>00433                                    plugin_id,config),
-<a name="l00434"></a>00434         <span class="stringliteral">"cannot save sky ima %s"</span>, sky_name);
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436         sinfo_free_image(&sky_img);
-<a name="l00437"></a>00437         <span class="keywordflow">if</span> (cfg->flatInd == 1) {
-<a name="l00438"></a>00438           sinfo_msg(<span class="stringliteral">"Sky Flatfielding"</span>);
-<a name="l00439"></a>00439           check(flat1=cpl_image_load(cfg->flatfield1,CPL_TYPE_FLOAT,0,0 ),
-<a name="l00440"></a>00440             <span class="stringliteral">"could not load flatfield image"</span> );
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442               <span class="keywordflow">if</span>(mflat_norm_smooth != 0) {
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444                 <span class="keywordflow">if</span>(mflat_norm_smooth == 1) {
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446                    sy=cpl_image_get_size_y(flat1);
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448                    cknull(flat_smooth=sinfo_image_smooth_fft(flat1,sy/smooth_rad),
-<a name="l00449"></a>00449                <span class="stringliteral">"could not smooth flatfield"</span> );
-<a name="l00450"></a>00450                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mflat_norm_smooth == 2) {
-<a name="l00451"></a>00451                    cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,
-<a name="l00452"></a>00452                                                                     smooth_rad),
-<a name="l00453"></a>00453                           <span class="stringliteral">"could not smooth flatfield"</span> );
-<a name="l00454"></a>00454                  }
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456             check_nomsg(cpl_image_divide(flat1,flat_smooth));
-<a name="l00457"></a>00457             sinfo_free_image(&flat_smooth);
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459           }
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461           check_nomsg(simg = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0 ));
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463           cknull(sky_img_flat=sinfo_new_div_images_robust(simg,flat1),
-<a name="l00464"></a>00464              <span class="stringliteral">"could not carry out flatfield division"</span> );
-<a name="l00465"></a>00465           sinfo_free_image(&simg);
-<a name="l00466"></a>00466           sinfo_free_image(&flat1);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468           <span class="comment">/* if (frm_ind == 0) { */</span>
-<a name="l00469"></a>00469           <span class="keywordflow">if</span> (cfg->warpfixInd == 1){
-<a name="l00470"></a>00470         sinfo_msg(<span class="stringliteral">"Correct sky for distortions"</span>);
-<a name="l00471"></a>00471                 snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,
-<a name="l00472"></a>00472                          STACK_SKY_DIST_OUT_FILENAME,frm_ind,<span class="stringliteral">".fits"</span>);
-<a name="l00473"></a>00473         sky_dist = sinfo_new_image_warp_fits(sky_img_flat,
-<a name="l00474"></a>00474                              cfg->kernel,
-<a name="l00475"></a>00475                              cfg->polyFile);
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477         ck0(sinfo_pro_save_ima(sky_dist,raw,sof,
-<a name="l00478"></a>00478                        file_name,
-<a name="l00479"></a>00479                        PRO_STACK_SKY_DIST,NULL,plugin_id,
-<a name="l00480"></a>00480                        config),<span class="stringliteral">"cannot save ima %s"</span>,
-<a name="l00481"></a>00481             STACK_SKY_DIST_OUT_FILENAME);
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483         sinfo_free_image(&sky_dist);
-<a name="l00484"></a>00484           }
-<a name="l00485"></a>00485           <span class="comment">/* } */</span>
-<a name="l00486"></a>00486           sinfo_free_image(&sky_img_flat);
-<a name="l00487"></a>00487         } <span class="comment">/* end check on flatind */</span>
-<a name="l00488"></a>00488       } <span class="comment">/* end check on procatg */</span>
-<a name="l00489"></a>00489     }
-<a name="l00490"></a>00490       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 5 ) {
-<a name="l00491"></a>00491     <span class="keywordflow">if</span> (cfg->sfInd == 1) {
-<a name="l00492"></a>00492       check_nomsg(cpl_imagelist_set(list_dark,
-<a name="l00493"></a>00493                       cpl_image_duplicate(im[i]),nda));
-<a name="l00494"></a>00494       nda = nda + 1;
-<a name="l00495"></a>00495     } <span class="keywordflow">else</span> {
-<a name="l00496"></a>00496       sinfo_free_image(&(im[i]));
-<a name="l00497"></a>00497     }
-<a name="l00498"></a>00498       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 4 ) {
-<a name="l00499"></a>00499     <span class="keywordflow">if</span> ( cfg->sfInd == 1) {
-<a name="l00500"></a>00500       ref_im1 = im[i];
-<a name="l00501"></a>00501     } <span class="keywordflow">else</span> {
-<a name="l00502"></a>00502       sinfo_free_image(&(im[i]));
-<a name="l00503"></a>00503     }
-<a name="l00504"></a>00504       }
-<a name="l00505"></a>00505     } <span class="keywordflow">else</span> {
-<a name="l00506"></a>00506       <span class="keywordflow">if</span> (typ == 1) {
-<a name="l00507"></a>00507        check_nomsg(cpl_imagelist_set(list_dither_object,
-<a name="l00508"></a>00508                                      cpl_image_duplicate(im[i]),nobjdith));
-<a name="l00509"></a>00509        nobjdith = nobjdith + 1;
-<a name="l00510"></a>00510       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (typ == 0) {
-<a name="l00511"></a>00511     check_nomsg(cpl_imagelist_set(list_dither_object,
-<a name="l00512"></a>00512                                      cpl_image_duplicate(im[i]),nskydith));
-<a name="l00513"></a>00513     nskydith = nskydith + 1;
-<a name="l00514"></a>00514       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (typ == 4) {
-<a name="l00515"></a>00515     <span class="keywordflow">if</span> (cfg->sfInd == 1) {
-<a name="l00516"></a>00516       ref_im2 = cpl_image_duplicate(im[i]);
-<a name="l00517"></a>00517     } <span class="keywordflow">else</span> {
-<a name="l00518"></a>00518       sinfo_free_image(&(im[i]));
-<a name="l00519"></a>00519     }
-<a name="l00520"></a>00520       }
-<a name="l00521"></a>00521     }
-<a name="l00522"></a>00522   } <span class="comment">/* end for loop on i */</span>
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524   <span class="keywordflow">if</span> (nob != cfg->nobj ||
-<a name="l00525"></a>00525       cfg->noff != nsky ||
-<a name="l00526"></a>00526       nobjdith != cfg->nditherobj ||
-<a name="l00527"></a>00527       nskydith != cfg->nditheroff) {
-<a name="l00528"></a>00528     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of the"</span>);
-<a name="l00529"></a>00529     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"different types of frames"</span>);
-<a name="l00530"></a>00530     <span class="comment">/* free memory */</span>
-<a name="l00531"></a>00531     <span class="keywordflow">goto</span> cleanup;
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533   }
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535   <span class="keywordflow">if</span> (cfg->sfInd == 1 && nda != cfg->ndark) {
-<a name="l00536"></a>00536     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of sinfo_dark frames"</span>);
-<a name="l00537"></a>00537     <span class="keywordflow">goto</span> cleanup;
-<a name="l00538"></a>00538   }
-<a name="l00539"></a>00539   sinfo_msg(<span class="stringliteral">"Create and fill cubes with the different images"</span>);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541   <span class="comment">/* create and fill cubes with the different image lists */</span>
-<a name="l00542"></a>00542   cknull(list_object,<span class="stringliteral">"could not create object data cube!"</span>);
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544   <span class="comment">/* shift the images in the cubes-if indicated-in spectral direction</span>
-<a name="l00545"></a>00545 <span class="comment">     with respect to the reference image</span>
-<a name="l00546"></a>00546 <span class="comment">  */</span>
-<a name="l00547"></a>00547   <span class="keywordflow">if</span> (cfg->sfInd == 1) {
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549   <span class="comment">/*</span>
-<a name="l00550"></a>00550 <span class="comment">      first take the mean of the sinfo_dark frames and subtract the result</span>
-<a name="l00551"></a>00551 <span class="comment">      from all cubes</span>
-<a name="l00552"></a>00552 <span class="comment">  */</span>
-<a name="l00553"></a>00553   sinfo_msg(<span class="stringliteral">"Shift cube images in spectral direction with "</span>
-<a name="l00554"></a>00554             <span class="stringliteral">"respect to reference"</span>);
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556   <span class="keywordflow">if</span> (cfg->contains_dark == 1) {
-<a name="l00557"></a>00557     sinfo_msg(<span class="stringliteral">"cfg->contains_dark == 1"</span>);
-<a name="l00558"></a>00558     <span class="keywordflow">if</span> (cfg->loReject*cfg->ndark < 1. && cfg->hiReject * cfg->ndark < 1.) {
-<a name="l00559"></a>00559       <span class="comment">/*</span>
-<a name="l00560"></a>00560 <span class="comment">          im_dark = sinfo_new_average_cube_to_image( list_dark );</span>
-<a name="l00561"></a>00561 <span class="comment">      */</span>
-<a name="l00562"></a>00562       check(im_dark = cpl_imagelist_collapse_create( list_dark ),
-<a name="l00563"></a>00563      <span class="stringliteral">"sinfo_averageCubeToImage failed"</span> );
-<a name="l00564"></a>00564      }
-<a name="l00565"></a>00565      <span class="keywordflow">else</span> {
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567        check_nomsg(no=cpl_imagelist_get_size(list_dark));
-<a name="l00568"></a>00568        lo_cut=(floor)( cfg->loReject*no+0.5);
-<a name="l00569"></a>00569        hi_cut=(floor)( cfg->hiReject*no+0.5);
-<a name="l00570"></a>00570        check(im_dark=cpl_imagelist_collapse_minmax_create(list_dark,lo_cut,
-<a name="l00571"></a>00571                                                           hi_cut),
-<a name="l00572"></a>00572                                      <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574      }
-<a name="l00575"></a>00575      sinfo_free_imagelist(&list_dark);
-<a name="l00576"></a>00576      check_nomsg(list_object_tmp = cpl_imagelist_duplicate (list_object));
-<a name="l00577"></a>00577      check(cpl_imagelist_subtract_image (list_object_tmp, im_dark),
-<a name="l00578"></a>00578             <span class="stringliteral">"cpl_imagelist_subtract_image failed"</span> );
-<a name="l00579"></a>00579      <span class="comment">/*</span>
-<a name="l00580"></a>00580 <span class="comment">       cube_object_tmp = sinfo_subImageFromCube (cube_object, im_dark);</span>
-<a name="l00581"></a>00581 <span class="comment">     */</span>
-<a name="l00582"></a>00582   } <span class="keywordflow">else</span> {
-<a name="l00583"></a>00583      sinfo_msg(<span class="stringliteral">"cfg->contains_dark == 0"</span>);
-<a name="l00584"></a>00584      check_nomsg(list_object_tmp = cpl_imagelist_duplicate(list_object));
-<a name="l00585"></a>00585   }
-<a name="l00586"></a>00586   sinfo_free_imagelist(&list_object);
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588   cknull(list_object = sinfo_align_cube_to_reference (list_object_tmp,
-<a name="l00589"></a>00589                               ref_im1,
-<a name="l00590"></a>00590                               cfg->sfOrder,
-<a name="l00591"></a>00591                               cfg->sfType),
-<a name="l00592"></a>00592      <span class="stringliteral">"sinfo_align_cube_to_reference failed"</span> );
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594   sinfo_free_imagelist(&list_object_tmp);
-<a name="l00595"></a>00595   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00596"></a>00596     <span class="keywordflow">if</span> (cfg->contains_dark == 1) {
-<a name="l00597"></a>00597        check_nomsg(list_dither_object_tmp =
-<a name="l00598"></a>00598                    cpl_imagelist_duplicate(list_dither_object));
-<a name="l00599"></a>00599        check(cpl_imagelist_subtract_image(list_dither_object_tmp,im_dark),
-<a name="l00600"></a>00600              <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602        <span class="comment">/*</span>
-<a name="l00603"></a>00603 <span class="comment">        list_dither_object_tmp =</span>
-<a name="l00604"></a>00604 <span class="comment">              sinfo_new_sub_image_from_cube(list_dither_object,</span>
-<a name="l00605"></a>00605 <span class="comment">                                                    im_dark);</span>
-<a name="l00606"></a>00606 <span class="comment">    */</span>
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608     } <span class="keywordflow">else</span> {
-<a name="l00609"></a>00609        check_nomsg(list_dither_object_tmp=
-<a name="l00610"></a>00610                    cpl_imagelist_duplicate(list_dither_object));
-<a name="l00611"></a>00611     }
-<a name="l00612"></a>00612     sinfo_free_imagelist(&list_dither_object);
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614     cknull(list_dither_object=
-<a name="l00615"></a>00615             sinfo_align_cube_to_reference (list_dither_object_tmp,
-<a name="l00616"></a>00616                                  ref_im2,
-<a name="l00617"></a>00617                                  cfg->sfOrder,
-<a name="l00618"></a>00618                                  cfg->sfType),
-<a name="l00619"></a>00619        <span class="stringliteral">"sinfo_align_cube_to_reference failed"</span> );
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621     sinfo_free_imagelist(&list_dither_object_tmp);
-<a name="l00622"></a>00622   }
-<a name="l00623"></a>00623   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00624"></a>00624     <span class="keywordflow">if</span> (cfg->contains_dark == 1) {
-<a name="l00625"></a>00625        check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
-<a name="l00626"></a>00626        check(cpl_imagelist_subtract_image (list_sky_tmp, im_dark),
-<a name="l00627"></a>00627          <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00628"></a>00628        <span class="comment">/*</span>
-<a name="l00629"></a>00629 <span class="comment">      cube_sky_tmp = sinfo_subImageFromCube (cube_sky, im_dark);</span>
-<a name="l00630"></a>00630 <span class="comment">       */</span>
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632     } <span class="keywordflow">else</span> {
-<a name="l00633"></a>00633        check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
-<a name="l00634"></a>00634     }
-<a name="l00635"></a>00635     check_nomsg(list_sky_tmp=cpl_imagelist_duplicate(list_sky));
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637     check(list_sky = sinfo_align_cube_to_reference (list_sky_tmp,
-<a name="l00638"></a>00638                             ref_im1,
-<a name="l00639"></a>00639                             cfg->sfOrder,
-<a name="l00640"></a>00640                             cfg->sfType),
-<a name="l00641"></a>00641       <span class="stringliteral">"sinfo_alignCubeToReference failed"</span> );
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643     check_nomsg(cpl_imagelist_delete(list_sky_tmp));
-<a name="l00644"></a>00644   }
-<a name="l00645"></a>00645   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->contains_sky == 1) {
-<a name="l00646"></a>00646     <span class="keywordflow">if</span> (cfg->contains_dark == 1) {
-<a name="l00647"></a>00647       check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
-<a name="l00648"></a>00648       check(cpl_imagelist_subtract_image(list_dither_sky_tmp,im_dark),
-<a name="l00649"></a>00649         <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00650"></a>00650        <span class="comment">/*</span>
-<a name="l00651"></a>00651 <span class="comment">       cube_dither_sky_tmp = sinfo_subImageFromCube (cube_dither_sky, im_dark);</span>
-<a name="l00652"></a>00652 <span class="comment">       */</span>
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654     } <span class="keywordflow">else</span> {
-<a name="l00655"></a>00655       check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
-<a name="l00656"></a>00656     }
-<a name="l00657"></a>00657     sinfo_free_imagelist(&list_dither_sky);
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659     check(list_dither_sky=sinfo_align_cube_to_reference(list_dither_sky_tmp,
-<a name="l00660"></a>00660                                 ref_im2,
-<a name="l00661"></a>00661                                 cfg->sfOrder,
-<a name="l00662"></a>00662                                 cfg->sfType),
-<a name="l00663"></a>00663       <span class="stringliteral">"sinfo_alignCubeToReference failed"</span> );
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665     sinfo_free_imagelist(&list_dither_sky_tmp);
-<a name="l00666"></a>00666   }
-<a name="l00667"></a>00667   sinfo_free_image(&ref_im1);
-<a name="l00668"></a>00668   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00669"></a>00669     sinfo_free_image(&ref_im2);
-<a name="l00670"></a>00670   }
-<a name="l00671"></a>00671   <span class="keywordflow">if</span> (cfg->contains_dark == 1) {
-<a name="l00672"></a>00672     sinfo_free_image(&im_dark);
-<a name="l00673"></a>00673   }
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675   } <span class="comment">/* end if over sfInd */</span>
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677   <span class="comment">/* subtracts the master dark from different frames if present */</span>
-<a name="l00678"></a>00678   <span class="keywordflow">if</span>(cfg->mdark_ind==1){
-<a name="l00679"></a>00679     sinfo_msg(<span class="stringliteral">"Subtract master dark %s "</span>,cfg->mdark);
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681     check_nomsg(mdark=cpl_image_load(cfg->mdark,CPL_TYPE_FLOAT,0,0));
-<a name="l00682"></a>00682     <span class="keywordflow">if</span> (list_object !=NULL) {
-<a name="l00683"></a>00683       cpl_imagelist_subtract_image (list_object, mdark);
-<a name="l00684"></a>00684     }
-<a name="l00685"></a>00685     <span class="keywordflow">if</span> (list_sky !=NULL) {
-<a name="l00686"></a>00686       cpl_imagelist_subtract_image (list_sky, mdark);
-<a name="l00687"></a>00687     }
-<a name="l00688"></a>00688     sinfo_free_image(&mdark);
-<a name="l00689"></a>00689   }
-<a name="l00690"></a>00690   <span class="comment">/* take the average with rejection of the different cubes */</span>
-<a name="l00691"></a>00691   sinfo_msg(<span class="stringliteral">"Take the average of the different cubes"</span>);
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693   <span class="keywordflow">if</span> (cfg->loReject*cfg->nobj < 1. && cfg->hiReject * cfg->nobj < 1.) {
-<a name="l00694"></a>00694     check(im_obj = cpl_imagelist_collapse_create(list_object),
-<a name="l00695"></a>00695       <span class="stringliteral">"Average with rejection failed"</span> );
-<a name="l00696"></a>00696   } <span class="keywordflow">else</span> {
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698     check_nomsg(no=cpl_imagelist_get_size(list_object));
-<a name="l00699"></a>00699     lo_cut=(floor)( cfg->loReject*no+0.5);
-<a name="l00700"></a>00700     hi_cut=(floor)( cfg->hiReject*no+0.5);
-<a name="l00701"></a>00701     check(im_obj=cpl_imagelist_collapse_minmax_create(list_object,
-<a name="l00702"></a>00702                  lo_cut,hi_cut),<span class="stringliteral">"Average with rejection failed"</span> );
-<a name="l00703"></a>00703 
-<a name="l00704"></a>00704   }
-<a name="l00705"></a>00705   sinfo_free_imagelist(&list_object);
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707   <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00708"></a>00708     <span class="keywordflow">if</span> (cfg->loReject*nsky < 1. && cfg->hiReject*nsky < 1.) {
-<a name="l00709"></a>00709       <span class="comment">/* here might explode in dither mode */</span>
-<a name="l00710"></a>00710       cknull(im_sky = cpl_imagelist_collapse_create( list_sky ),
-<a name="l00711"></a>00711          <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00712"></a>00712     } <span class="keywordflow">else</span> {
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714       check_nomsg(no=cpl_imagelist_get_size(list_sky));
-<a name="l00715"></a>00715       lo_cut=(floor)( cfg->loReject*no+0.5);
-<a name="l00716"></a>00716       hi_cut=(floor)( cfg->hiReject*no+0.5);
-<a name="l00717"></a>00717       check(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),
-<a name="l00718"></a>00718          <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00719"></a>00719     }
-<a name="l00720"></a>00720     sinfo_free_imagelist(&list_sky);
-<a name="l00721"></a>00721   }
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723   <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00724"></a>00724     <span class="keywordflow">if</span> (cfg->loReject*nobjdith < 1. && cfg->hiReject*nobjdith < 1.) {
-<a name="l00725"></a>00725       check(im_dither = cpl_imagelist_collapse_create( list_dither_object ),
-<a name="l00726"></a>00726         <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00727"></a>00727     } <span class="keywordflow">else</span> {
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729       check_nomsg(no=cpl_imagelist_get_size(list_dither_object));
-<a name="l00730"></a>00730       lo_cut=(floor)( cfg->loReject*no+0.5);
-<a name="l00731"></a>00731       hi_cut=(floor)( cfg->hiReject*no+0.5);
-<a name="l00732"></a>00732       check(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,
-<a name="l00733"></a>00733                                lo_cut,hi_cut),
-<a name="l00734"></a>00734         <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736     }
-<a name="l00737"></a>00737     sinfo_free_imagelist(&list_dither_object);
-<a name="l00738"></a>00738   }
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740   <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {
-<a name="l00741"></a>00741     <span class="keywordflow">if</span> (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {
-<a name="l00742"></a>00742       check(im_dither_sky = cpl_imagelist_collapse_create( list_dither_sky ),
-<a name="l00743"></a>00743         <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00744"></a>00744     } <span class="keywordflow">else</span> {
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746       check_nomsg(no=cpl_imagelist_get_size(list_dither_sky));
-<a name="l00747"></a>00747       lo_cut=(floor)( cfg->loReject*no+0.5);
-<a name="l00748"></a>00748       hi_cut=(floor)( cfg->hiReject*no+0.5);
-<a name="l00749"></a>00749       check(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,
-<a name="l00750"></a>00750                                    lo_cut,hi_cut),
-<a name="l00751"></a>00751         <span class="stringliteral">"Average with rejection failed"</span>);
-<a name="l00752"></a>00752     }
-<a name="l00753"></a>00753     sinfo_free_imagelist(&list_dither_sky);
-<a name="l00754"></a>00754   }
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756   <span class="comment">/*</span>
-<a name="l00757"></a>00757 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00758"></a>00758 <span class="comment">  # Subtract the resulting off-frame (sky) from the on-frame</span>
-<a name="l00759"></a>00759 <span class="comment">  #-------------------------------------------------------</span>
-<a name="l00760"></a>00760 <span class="comment">  # finally, subtract off from on frames and store the result</span>
-<a name="l00761"></a>00761 <span class="comment">  # in the object cube</span>
-<a name="l00762"></a>00762 <span class="comment">  */</span>
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764   <span class="keywordflow">if</span>(sub_raw_sky == 1 ) {
-<a name="l00765"></a>00765     <span class="keywordflow">if</span> (cfg->contains_sky == 1) {
-<a name="l00766"></a>00766       sinfo_msg(<span class="stringliteral">"Subtract the off-frame (sky) from the on-frame"</span>);
-<a name="l00767"></a>00767       check_nomsg(im_obj_sub = cpl_image_duplicate(im_obj));
-<a name="l00768"></a>00768       check(cpl_image_subtract(im_obj_sub, im_sky),
-<a name="l00769"></a>00769         <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771       sinfo_free_image(&im_obj);
-<a name="l00772"></a>00772       <span class="keywordflow">if</span> (((cfg->contains_dither == 1) && (nskydith > 0)) ||
-<a name="l00773"></a>00773           cfg->contains_dither == 0) {
-<a name="l00774"></a>00774     sinfo_free_image(&im_sky);
-<a name="l00775"></a>00775     im_obj = cpl_image_duplicate(im_obj_sub);
-<a name="l00776"></a>00776       }
-<a name="l00777"></a>00777     }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779     <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {
-<a name="l00780"></a>00780       check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
-<a name="l00781"></a>00781       check(cpl_image_subtract(im_dither_sub, im_dither_sky),
-<a name="l00782"></a>00782         <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784       sinfo_free_image(&im_dither);
-<a name="l00785"></a>00785       sinfo_free_image(&im_dither_sky);
-<a name="l00786"></a>00786       im_dither = cpl_image_duplicate(im_dither_sub);
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->contains_dither == 1 &&
-<a name="l00789"></a>00789            nskydith == 0 &&
-<a name="l00790"></a>00790            cfg->contains_sky == 1) {
-<a name="l00791"></a>00791       check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
-<a name="l00792"></a>00792       check(cpl_image_subtract(im_dither_sub, im_sky),
-<a name="l00793"></a>00793         <span class="stringliteral">"could not sinfo_sub_image"</span>);
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795       sinfo_free_image(&im_dither);
-<a name="l00796"></a>00796       sinfo_free_image(&im_sky);
-<a name="l00797"></a>00797       im_dither = cpl_image_duplicate(im_dither_sub);
-<a name="l00798"></a>00798     }
-<a name="l00799"></a>00799   }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801   <span class="comment">/*</span>
-<a name="l00802"></a>00802 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00803"></a>00803 <span class="comment">  # Flatfielding</span>
-<a name="l00804"></a>00804 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00805"></a>00805 <span class="comment">  */</span>
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807   <span class="keywordflow">if</span> (cfg->flatInd == 1) {
-<a name="l00808"></a>00808     sinfo_msg(<span class="stringliteral">"Flatfielding"</span>);
-<a name="l00809"></a>00809     check(flat1 = cpl_image_load (cfg->flatfield1,CPL_TYPE_FLOAT,0,0),
-<a name="l00810"></a>00810       <span class="stringliteral">"could not load flatfield image"</span> );
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812     <span class="keywordflow">if</span>(mflat_norm_smooth) {
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814       <span class="comment">//We normalize the flat by a smoothed flat</span>
-<a name="l00815"></a>00815       cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,smooth_rad),
-<a name="l00816"></a>00816          <span class="stringliteral">"could not smooth flatfield"</span> );
-<a name="l00817"></a>00817       check_nomsg(cpl_image_divide(flat1,flat_smooth));
-<a name="l00818"></a>00818       sinfo_free_image(&flat_smooth);
-<a name="l00819"></a>00819     }
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     cknull(im_obj_flat = sinfo_new_div_images_robust( im_obj, flat1),
-<a name="l00822"></a>00822        <span class="stringliteral">"could not carry out flatfield division"</span> );
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824     <span class="comment">/* AMO ** */</span>
-<a name="l00825"></a>00825     <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l00826"></a>00826       <span class="keywordflow">if</span> (frm_ind == 0) {
-<a name="l00827"></a>00827     <span class="keywordflow">if</span> (cfg->warpfixInd == 1){
-<a name="l00828"></a>00828       sinfo_msg(<span class="stringliteral">"Correct FF for distortions"</span>);
-<a name="l00829"></a>00829       <span class="comment">/* AMO check */</span>
-<a name="l00830"></a>00830       cknull_nomsg(flat1_dist=sinfo_new_image_warp_fits(flat1,cfg->kernel,
-<a name="l00831"></a>00831                                 cfg->polyFile));
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833       ck0(sinfo_pro_save_ima(flat1_dist,raw,sof,
-<a name="l00834"></a>00834                  STACK_MFLAT_DIST_OUT_FILENAME,
-<a name="l00835"></a>00835                  PRO_STACK_MFLAT_DIST,NULL,plugin_id,config),
-<a name="l00836"></a>00836           <span class="stringliteral">"cannot save ima %s"</span>, STACK_MFLAT_DIST_OUT_FILENAME);
-<a name="l00837"></a>00837       sinfo_free_image(&flat1_dist);
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839       }
-<a name="l00840"></a>00840     }
-<a name="l00841"></a>00841     sinfo_free_image(&flat1);
-<a name="l00842"></a>00842     sinfo_free_image(&im_obj);
-<a name="l00843"></a>00843     im_obj = cpl_image_duplicate(im_obj_flat);
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845     <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l00846"></a>00846       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00847"></a>00847     check(flat2 = cpl_image_load (cfg->flatfield2,CPL_TYPE_FLOAT,0,0),
-<a name="l00848"></a>00848           <span class="stringliteral">"could not load flatfield image"</span> );
-<a name="l00849"></a>00849 
-<a name="l00850"></a>00850     <span class="keywordflow">if</span>(mflat_norm_smooth) {
-<a name="l00851"></a>00851 
-<a name="l00852"></a>00852       <span class="comment">//We normalize the flat by a smoothed flat</span>
-<a name="l00853"></a>00853       cknull(flat_smooth = sinfo_image_smooth_median_y(flat2,smooth_rad),
-<a name="l00854"></a>00854          <span class="stringliteral">"could not smooth flatfield"</span> );
-<a name="l00855"></a>00855       check_nomsg(cpl_image_divide(flat2,flat_smooth));
-<a name="l00856"></a>00856       sinfo_free_image(&flat_smooth);
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858     }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861     cknull(im_dither_flat = sinfo_new_div_images_robust( im_dither, flat2),
-<a name="l00862"></a>00862            <span class="stringliteral">"could not carry out flatfield division"</span> );
-<a name="l00863"></a>00863 
-<a name="l00864"></a>00864     <span class="keywordflow">if</span> (frm_ind == 0) {
-<a name="l00865"></a>00865       <span class="keywordflow">if</span> (cfg->warpfixInd == 1) {
-<a name="l00866"></a>00866         sinfo_msg(<span class="stringliteral">"Correct FF for distortions"</span>);
-<a name="l00867"></a>00867         flat2_dist = sinfo_new_image_warp_fits(flat2,
-<a name="l00868"></a>00868                            cfg->kernel, cfg->polyFile);
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870         ck0(sinfo_pro_save_ima(flat2_dist,raw,sof,
-<a name="l00871"></a>00871                    STACK_MFLAT_DITHER_DIST_OUT_FILENAME,
-<a name="l00872"></a>00872                    PRO_STACK_MFLAT_DITHER_DIST,
-<a name="l00873"></a>00873                    NULL,plugin_id,config),
-<a name="l00874"></a>00874         <span class="stringliteral">"cannot save ima %s"</span>, STACK_MFLAT_DITHER_DIST_OUT_FILENAME);
-<a name="l00875"></a>00875         sinfo_free_image(&flat2_dist);
-<a name="l00876"></a>00876       }
-<a name="l00877"></a>00877     }
-<a name="l00878"></a>00878     sinfo_free_image(&flat2);
-<a name="l00879"></a>00879     sinfo_free_image(&im_dither);
-<a name="l00880"></a>00880     im_dither = cpl_image_duplicate(im_dither_flat);
-<a name="l00881"></a>00881       }
-<a name="l00882"></a>00882     }
-<a name="l00883"></a>00883   }
-<a name="l00884"></a>00884 
-<a name="l00885"></a>00885   <span class="comment">/*</span>
-<a name="l00886"></a>00886 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00887"></a>00887 <span class="comment">  # static bad pixel correction</span>
-<a name="l00888"></a>00888 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00889"></a>00889 <span class="comment">   */</span>
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891   <span class="keywordflow">if</span> (cfg->maskInd == 1) {
-<a name="l00892"></a>00892     sinfo_msg(<span class="stringliteral">"Static bad pixel correction"</span>);
-<a name="l00893"></a>00893     check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l00894"></a>00894       <span class="stringliteral">"could not load static bad pixel mask"</span> );
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896     ck0(sinfo_new_change_mask(mask_im, im_obj),
-<a name="l00897"></a>00897     <span class="stringliteral">"sinfo_changeMask failed"</span> );
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899     <span class="keywordflow">if</span> (cfg->indind == 0) {
-<a name="l00900"></a>00900       <span class="comment">/* open the ASCII list of the slitlet positions */</span>
-<a name="l00901"></a>00901       <span class="comment">/*READ TFITS TABLE*/</span>
-<a name="l00902"></a>00902       strcpy(file_name,cfg->slitposList);
-<a name="l00903"></a>00903       check(tbl_slitpos = cpl_table_load(file_name,1,0),
-<a name="l00904"></a>00904         <span class="stringliteral">"error loading slitpos tbl %s "</span>,file_name);
-<a name="l00905"></a>00905       <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos1"</span>) != 1) {
-<a name="l00906"></a>00906         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos1' not found in %s table %s"</span>,
-<a name="l00907"></a>00907                       PRO_SLIT_POS,file_name);
-<a name="l00908"></a>00908     <span class="keywordflow">goto</span> cleanup;
-<a name="l00909"></a>00909       }
-<a name="l00910"></a>00910       <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos2"</span>) != 1) {
-<a name="l00911"></a>00911         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos2' not found in %s table %s"</span>,
-<a name="l00912"></a>00912                       PRO_SLIT_POS,file_name);
-<a name="l00913"></a>00913     <span class="keywordflow">goto</span> cleanup;
-<a name="l00914"></a>00914       }
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916       check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-<a name="l00917"></a>00917       cknull_nomsg(slit_edges = sinfo_new_2Dfloatarray(n, 2));
-<a name="l00918"></a>00918       <span class="keywordflow">for</span> (i =0 ; i< n; i++){
-<a name="l00919"></a>00919      check_nomsg(val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status));
-<a name="l00920"></a>00920     check_nomsg(val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status));
-<a name="l00921"></a>00921     check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_x,i,0));
-<a name="l00922"></a>00922     check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_y,i,1));
-<a name="l00923"></a>00923       }
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925       sinfo_free_table(&tbl_slitpos);
-<a name="l00926"></a>00926       cknull(int_im = sinfo_interpol_source_image (im_obj,
-<a name="l00927"></a>00927                          mask_im,
-<a name="l00928"></a>00928                          cfg->maxRad,
-<a name="l00929"></a>00929                          slit_edges),
-<a name="l00930"></a>00930      <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932       sinfo_free_image(&im_obj);
-<a name="l00933"></a>00933       im_obj = cpl_image_duplicate(int_im);
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935      <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00936"></a>00936        cknull(int_im_dith = sinfo_interpol_source_image (im_dither,
-<a name="l00937"></a>00937                                mask_im,
-<a name="l00938"></a>00938                                cfg->maxRad,
-<a name="l00939"></a>00939                                slit_edges),
-<a name="l00940"></a>00940           <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );
-<a name="l00941"></a>00941 
-<a name="l00942"></a>00942        sinfo_free_image(&im_dither);
-<a name="l00943"></a>00943        im_dither = cpl_image_duplicate(int_im_dith);
-<a name="l00944"></a>00944      }
-<a name="l00945"></a>00945      sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-<a name="l00946"></a>00946     } <span class="keywordflow">else</span> {
-<a name="l00947"></a>00947       cknull(int_im = sinfo_new_mult_image_by_mask(im_obj, mask_im),
-<a name="l00948"></a>00948          <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );
-<a name="l00949"></a>00949 
-<a name="l00950"></a>00950       sinfo_free_image(&im_obj);
-<a name="l00951"></a>00951       im_obj = cpl_image_duplicate(int_im);
-<a name="l00952"></a>00952       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l00953"></a>00953     cknull(int_im_dith=sinfo_new_mult_image_by_mask(im_dither, mask_im),
-<a name="l00954"></a>00954            <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     sinfo_free_image(&im_dither);
-<a name="l00957"></a>00957     im_dither = cpl_image_duplicate(int_im_dith);
-<a name="l00958"></a>00958       }
-<a name="l00959"></a>00959     }
-<a name="l00960"></a>00960     sinfo_free_image(&mask_im);
-<a name="l00961"></a>00961   }
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963   <span class="comment">/*</span>
-<a name="l00964"></a>00964 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00965"></a>00965 <span class="comment">  # static bad pixel correction BEZIER</span>
-<a name="l00966"></a>00966 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l00967"></a>00967 <span class="comment">  */</span>
-<a name="l00968"></a>00968 
-<a name="l00969"></a>00969   <span class="keywordflow">if</span> (cfg->maskInd == 2){
-<a name="l00970"></a>00970     sinfo_msg(<span class="stringliteral">"Static bad pixel correction BEZIER"</span>);
-<a name="l00971"></a>00971     check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l00972"></a>00972       <span class="stringliteral">"could not load static bad pixel mask"</span> );
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974     ck0(sinfo_new_change_mask(mask_im, im_obj),
-<a name="l00975"></a>00975     <span class="stringliteral">"sinfo_changeMask failed"</span> );
-<a name="l00976"></a>00976 
-<a name="l00977"></a>00977     <span class="comment">/* #open the FITS table of the slitlet positions-*/</span>
-<a name="l00978"></a>00978     strcpy(file_name,cfg->slitposList);
-<a name="l00979"></a>00979     check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981     check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-<a name="l00982"></a>00982     slit_edges = sinfo_new_2Dfloatarray(n, 2);
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984     <span class="keywordflow">for</span> (i =0 ; i< n; i++){
-<a name="l00985"></a>00985       val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status);
-<a name="l00986"></a>00986       val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status);
-<a name="l00987"></a>00987       sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
-<a name="l00988"></a>00988       sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
-<a name="l00989"></a>00989     }
-<a name="l00990"></a>00990     sinfo_free_table(&tbl_slitpos);
-<a name="l00991"></a>00991 
-<a name="l00992"></a>00992     strcpy(file_name,cfg->indexlist);
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994     check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
-<a name="l00995"></a>00995 
-<a name="l00996"></a>00996     check_nomsg(n = cpl_table_get_nrow(tbl_index));
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998     cknull_nomsg(in_nam = (<span class="keywordtype">char</span>**) cpl_calloc(n,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)));
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000     <span class="keywordflow">for</span> (i =0 ; i< n; i++){
-<a name="l01001"></a>01001       strcpy(in_nam[i],cpl_table_get_string(tbl_index,<span class="stringliteral">"name"</span>,i));
-<a name="l01002"></a>01002     }
-<a name="l01003"></a>01003     sinfo_free_table(&tbl_index);
-<a name="l01004"></a>01004 
-<a name="l01005"></a>01005     <span class="keywordflow">for</span> (i=0;i<cnt;i++) {
-<a name="l01006"></a>01006       <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"ICube.fits"</span>, name) != 0){
-<a name="l01007"></a>01007     check_nomsg(iCube=cpl_imagelist_load (<span class="stringliteral">"ICube.fits"</span>,CPL_TYPE_FLOAT,0));
-<a name="l01008"></a>01008       }
-<a name="l01009"></a>01009       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"JCube.fits"</span>, name) != 0) {
-<a name="l01010"></a>01010     check_nomsg(jCube = cpl_imagelist_load (<span class="stringliteral">"JCube.fits"</span>,CPL_TYPE_FLOAT,0));
-<a name="l01011"></a>01011       }
-<a name="l01012"></a>01012       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"X.fits"</span>,  name) != 0) {
-<a name="l01013"></a>01013     check_nomsg(X=cpl_image_load(<span class="stringliteral">"X.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01014"></a>01014       }
-<a name="l01015"></a>01015       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Y.fits"</span>,  name) != 0) {
-<a name="l01016"></a>01016     check_nomsg(Y=cpl_image_load(<span class="stringliteral">"Y.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01017"></a>01017       }
-<a name="l01018"></a>01018       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Z.fits"</span>,  name) != 0) {
-<a name="l01019"></a>01019     check_nomsg(Z=cpl_image_load(<span class="stringliteral">"Z.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01020"></a>01020       }
-<a name="l01021"></a>01021       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"cX.fits"</span>, name) != 0) {
-<a name="l01022"></a>01022     check_nomsg(hX=cpl_image_load(<span class="stringliteral">"cX.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01023"></a>01023       }
-<a name="l01024"></a>01024       <span class="keywordflow">else</span> {
-<a name="l01025"></a>01025     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong name in index list or needed file not there!"</span>);
-<a name="l01026"></a>01026     <span class="keywordflow">goto</span> cleanup;
-<a name="l01027"></a>01027       }
-<a name="l01028"></a>01028     }
-<a name="l01029"></a>01029     lookup = sinfo_new_lookup();
-<a name="l01030"></a>01030 
-<a name="l01031"></a>01031     lookup->id=iCube;
-<a name="l01032"></a>01032     lookup->jd=jCube;
-<a name="l01033"></a>01033     lookup->X=X;
-<a name="l01034"></a>01034     lookup->Y=Y;
-<a name="l01035"></a>01035     lookup->Z=Z;
-<a name="l01036"></a>01036     lookup->hX=hX;
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038 
-<a name="l01039"></a>01039     cknull(im_obj=sinfo_new_c_bezier_interpolate_image(im_obj,
-<a name="l01040"></a>01040                                                        mask_im,
-<a name="l01041"></a>01041                                                        lookup,
-<a name="l01042"></a>01042                                cfg->maxRad,
-<a name="l01043"></a>01043                                cfg->maxRad,
-<a name="l01044"></a>01044                                                        cfg->maxRad,
-<a name="l01045"></a>01045                                                        2,
-<a name="l01046"></a>01046                                                        slit_edges),
-<a name="l01047"></a>01047        <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span> );
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049 
-<a name="l01050"></a>01050     cknull(im_obj=sinfo_new_c_bezier_find_bad( im_obj,
-<a name="l01051"></a>01051                            mask_im,
-<a name="l01052"></a>01052                            cfg->maxRad,
-<a name="l01053"></a>01053                            cfg->maxRad,
-<a name="l01054"></a>01054                            cfg->maxRad,
-<a name="l01055"></a>01055                            0,
-<a name="l01056"></a>01056                            cpl_image_get_size_x(im_obj),
-<a name="l01057"></a>01057                            0,
-<a name="l01058"></a>01058                            cpl_image_get_size_y(im_obj),
-<a name="l01059"></a>01059                            cfg->sigmaFactor),
-<a name="l01060"></a>01060        <span class="stringliteral">"could not carry out sinfo_new_c_bezier_find_bad"</span> );
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l01064"></a>01064          cknull(im_dither=sinfo_new_c_bezier_interpolate_image(im_dither,
-<a name="l01065"></a>01065                                    mask_im,
-<a name="l01066"></a>01066                                    lookup,
-<a name="l01067"></a>01067                                    cfg->maxRad,
-<a name="l01068"></a>01068                                    cfg->maxRad,
-<a name="l01069"></a>01069                                    cfg->maxRad,
-<a name="l01070"></a>01070                                                                2,
-<a name="l01071"></a>01071                                                                slit_edges),
-<a name="l01072"></a>01072     <span class="stringliteral">"could not carry out new_c_bezier_Interpolate_Image on dithered frame"</span> );
-<a name="l01073"></a>01073 
-<a name="l01074"></a>01074      cknull(im_dither=sinfo_new_c_bezier_find_bad(im_dither,
-<a name="l01075"></a>01075                               mask_im,
-<a name="l01076"></a>01076                               cfg->maxRad,
-<a name="l01077"></a>01077                               cfg->maxRad,
-<a name="l01078"></a>01078                               cfg->maxRad,
-<a name="l01079"></a>01079                               0,
-<a name="l01080"></a>01080                               cpl_image_get_size_x(im_obj),
-<a name="l01081"></a>01081                               0,
-<a name="l01082"></a>01082                               cpl_image_get_size_y(im_obj),
-<a name="l01083"></a>01083                               cfg->sigmaFactor),
-<a name="l01084"></a>01084         <span class="stringliteral">"could not carry out new_c_bezier_find_bad on dithered frame"</span>);
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086     }
-<a name="l01087"></a>01087     sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-<a name="l01088"></a>01088     sinfo_free_image(&mask_im);
-<a name="l01089"></a>01089     sinfo_free_imagelist(&iCube);
-<a name="l01090"></a>01090     sinfo_free_imagelist(&jCube);
-<a name="l01091"></a>01091     sinfo_free_image(&lookup->X);
-<a name="l01092"></a>01092     sinfo_free_image(&lookup->X);
-<a name="l01093"></a>01093     sinfo_free_image(&lookup->Y);
-<a name="l01094"></a>01094     sinfo_free_image(&lookup->hX);
-<a name="l01095"></a>01095     sinfo_new_destroy_lookup(lookup);
-<a name="l01096"></a>01096   }
-<a name="l01097"></a>01097 
-<a name="l01098"></a>01098   <span class="keywordflow">if</span> (cfg->maskInd == 3) {
-<a name="l01099"></a>01099     cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-<a name="l01100"></a>01100        <span class="stringliteral">"could not load static bad pixel mask"</span> );
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102     <span class="comment">/* #open the ASCII list of the slitlet positions-- */</span>
-<a name="l01103"></a>01103     strcpy(file_name,cfg->slitposList);
-<a name="l01104"></a>01104     check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
-<a name="l01105"></a>01105     <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos1"</span>) != 1) {
-<a name="l01106"></a>01106       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos1' not found in %s table %s"</span>,
-<a name="l01107"></a>01107                       PRO_SLIT_POS,file_name);
-<a name="l01108"></a>01108       <span class="keywordflow">goto</span> cleanup;
-<a name="l01109"></a>01109     }
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111     <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos2"</span>) != 1) {
-<a name="l01112"></a>01112        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos2' not found in %s table %s"</span>,
-<a name="l01113"></a>01113                       PRO_SLIT_POS,file_name);
-<a name="l01114"></a>01114        <span class="keywordflow">goto</span> cleanup;
-<a name="l01115"></a>01115     }
-<a name="l01116"></a>01116 
-<a name="l01117"></a>01117     check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-<a name="l01118"></a>01118     slit_edges = sinfo_new_2Dfloatarray(n, 2);
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120     <span class="keywordflow">for</span> (i =0 ; i< n; i++) {
-<a name="l01121"></a>01121       val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status);
-<a name="l01122"></a>01122       val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status);
-<a name="l01123"></a>01123       sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
-<a name="l01124"></a>01124       sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
-<a name="l01125"></a>01125     }
-<a name="l01126"></a>01126     sinfo_free_table(&tbl_slitpos);
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128     strcpy(file_name,cfg->indexlist);
-<a name="l01129"></a>01129     check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
-<a name="l01130"></a>01130     check_nomsg(n = cpl_table_get_nrow(tbl_index));
-<a name="l01131"></a>01131     cknull_nomsg(in_nam = (<span class="keywordtype">char</span>**) cpl_calloc(n,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)));
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133     <span class="keywordflow">for</span> (i =0 ; i< n; i++){
-<a name="l01134"></a>01134        strcpy(in_nam[i],cpl_table_get_string(tbl_index,<span class="stringliteral">"name"</span>,i));
-<a name="l01135"></a>01135     }
-<a name="l01136"></a>01136     sinfo_free_table(&tbl_index);
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138     <span class="keywordflow">for</span> (i=0;i<cnt;i++){
-<a name="l01139"></a>01139       <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"ICube.fits"</span>, in_nam[i]) != 0){
-<a name="l01140"></a>01140        check_nomsg(iCube=cpl_imagelist_load(<span class="stringliteral">"ICube.fits"</span>,CPL_TYPE_FLOAT,0));
-<a name="l01141"></a>01141       }
-<a name="l01142"></a>01142       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"JCube.fits"</span>, in_nam[i]) != 0){
-<a name="l01143"></a>01143       check_nomsg(jCube=cpl_imagelist_load(<span class="stringliteral">"JCube.fits"</span>,CPL_TYPE_FLOAT,0));
-<a name="l01144"></a>01144       }
-<a name="l01145"></a>01145       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"X.fits"</span>, in_nam[i]) != 0){
-<a name="l01146"></a>01146     check_nomsg(X=cpl_image_load(<span class="stringliteral">"X.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01147"></a>01147       }
-<a name="l01148"></a>01148       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Y.fits"</span>, in_nam[i]) != 0){
-<a name="l01149"></a>01149     check_nomsg(Y=cpl_image_load(<span class="stringliteral">"Y.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01150"></a>01150       }
-<a name="l01151"></a>01151       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Z.fits"</span>, in_nam[i]) != 0){
-<a name="l01152"></a>01152     check_nomsg(Z=cpl_image_load(<span class="stringliteral">"Z.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01153"></a>01153       }
-<a name="l01154"></a>01154       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"cX.fits"</span>, in_nam[i]) != 0) {
-<a name="l01155"></a>01155     check_nomsg(hX=cpl_image_load(<span class="stringliteral">"cX.fits"</span>,CPL_TYPE_FLOAT,0,0));
-<a name="l01156"></a>01156       } <span class="keywordflow">else</span> {
-<a name="l01157"></a>01157      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong name in index list or needed file not there!"</span>);
-<a name="l01158"></a>01158      <span class="keywordflow">goto</span> cleanup;
-<a name="l01159"></a>01159       }
-<a name="l01160"></a>01160     }
-<a name="l01161"></a>01161     lookup = sinfo_new_lookup();
-<a name="l01162"></a>01162     lookup->id=iCube;
-<a name="l01163"></a>01163     lookup->jd=jCube;
-<a name="l01164"></a>01164     lookup->X=X;
-<a name="l01165"></a>01165     lookup->Y=Y;
-<a name="l01166"></a>01166     lookup->Z=Z;
-<a name="l01167"></a>01167     lookup->hX=hX;
-<a name="l01168"></a>01168 
-<a name="l01169"></a>01169     cknull(im_obj = sinfo_new_c_bezier_interpolate_image(im_obj,
-<a name="l01170"></a>01170                              mask_im,
-<a name="l01171"></a>01171                              lookup,
-<a name="l01172"></a>01172                              cfg->maxRad,
-<a name="l01173"></a>01173                              cfg->maxRad,
-<a name="l01174"></a>01174                              cfg->maxRad,
-<a name="l01175"></a>01175                              2,
-<a name="l01176"></a>01176                              slit_edges ),
-<a name="l01177"></a>01177        <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span> );
-<a name="l01178"></a>01178 
-<a name="l01179"></a>01179     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l01180"></a>01180         cknull(im_dither=sinfo_new_c_bezier_interpolate_image( im_dither,
-<a name="l01181"></a>01181                                    mask_im,
-<a name="l01182"></a>01182                                    lookup,
-<a name="l01183"></a>01183                                    cfg->maxRad,
-<a name="l01184"></a>01184                                    cfg->maxRad,
-<a name="l01185"></a>01185                                    cfg->maxRad,
-<a name="l01186"></a>01186                                    2,
-<a name="l01187"></a>01187                                    slit_edges ),
-<a name="l01188"></a>01188                   <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span>
-<a name="l01189"></a>01189                   <span class="stringliteral">" on dithered frame"</span> );
-<a name="l01190"></a>01190 
-<a name="l01191"></a>01191     }
-<a name="l01192"></a>01192     sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-<a name="l01193"></a>01193     sinfo_free_image(&mask_im);
-<a name="l01194"></a>01194     sinfo_free_imagelist(&iCube);
-<a name="l01195"></a>01195     sinfo_free_imagelist(&jCube);
-<a name="l01196"></a>01196     sinfo_free_image(&lookup->X);
-<a name="l01197"></a>01197     sinfo_free_image(&lookup->Y);
-<a name="l01198"></a>01198     sinfo_free_image(&lookup->Z);
-<a name="l01199"></a>01199     sinfo_free_image(&lookup->hX);
-<a name="l01200"></a>01200     sinfo_new_destroy_lookup(lookup);
-<a name="l01201"></a>01201   }
-<a name="l01202"></a>01202 
-<a name="l01203"></a>01203 
-<a name="l01204"></a>01204   <span class="comment">/*</span>
-<a name="l01205"></a>01205 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l01206"></a>01206 <span class="comment">  # correction of distortions</span>
-<a name="l01207"></a>01207 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l01208"></a>01208 <span class="comment">  */</span>
-<a name="l01209"></a>01209 
-<a name="l01210"></a>01210   <span class="comment">/* here memory leak */</span>
-<a name="l01211"></a>01211   <span class="comment">//sinfo_msg("cfg->warpfixInd=%d",cfg->warpfixInd);</span>
-<a name="l01212"></a>01212   <span class="keywordflow">if</span> (cfg->warpfixInd == 1){
-<a name="l01213"></a>01213     <span class="comment">/*#open ASCII file containing the slope parameter and read it*/</span>
-<a name="l01214"></a>01214     sinfo_msg(<span class="stringliteral">"Correct object for distortions"</span>);
-<a name="l01215"></a>01215     cknull(int_im_shifted=sinfo_new_image_warp_fits(im_obj,
-<a name="l01216"></a>01216                                                     cfg->kernel,
-<a name="l01217"></a>01217                                                     cfg->polyFile),
-<a name="l01218"></a>01218                                 <span class="stringliteral">"could not carry out sinfo_image_warp_fits"</span> );
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220     sinfo_free_image(&im_obj);
-<a name="l01221"></a>01221     im_obj = cpl_image_duplicate(int_im_shifted);
-<a name="l01222"></a>01222     <span class="keywordflow">if</span> (cfg->contains_dither == 1){
-<a name="l01223"></a>01223       cknull(int_im_dith_shifted=sinfo_new_image_warp_fits(im_dither,
-<a name="l01224"></a>01224                                                            cfg->kernel,
-<a name="l01225"></a>01225                                                            cfg->polyFile),
-<a name="l01226"></a>01226                                  <span class="stringliteral">"could not carry out sinfo_image_warp_fits"</span> );
-<a name="l01227"></a>01227       sinfo_free_image(&im_dither);
-<a name="l01228"></a>01228       im_dither = cpl_image_duplicate(int_im_dith_shifted);
-<a name="l01229"></a>01229     }
-<a name="l01230"></a>01230   }
-<a name="l01231"></a>01231 
-<a name="l01232"></a>01232   <span class="comment">/*</span>
-<a name="l01233"></a>01233 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l01234"></a>01234 <span class="comment">  # merge (interleave) both resulting frames</span>
-<a name="l01235"></a>01235 <span class="comment">  #---------------------------------------------------------</span>
-<a name="l01236"></a>01236 <span class="comment">  */</span>
-<a name="l01237"></a>01237   <span class="keywordflow">if</span> (cfg->interInd == 1 && cfg->contains_dither == 1){
-<a name="l01238"></a>01238     <span class="keywordflow">if</span>( pdensity>1) {
-<a name="l01239"></a>01239       sinfo_msg(<span class="stringliteral">"Merge (interleave) frames"</span>);
-<a name="l01240"></a>01240       cknull(im3 = cpl_image_new(cpl_image_get_size_x(im_obj),
-<a name="l01241"></a>01241                  cpl_image_get_size_y(im_obj),CPL_TYPE_FLOAT),
-<a name="l01242"></a>01242          <span class="stringliteral">"could not allocate an image"</span> );
-<a name="l01243"></a>01243       cknull(im4=sinfo_new_remove_general_offset( im_obj, im_dither,
-<a name="l01244"></a>01244                           im3, cfg->noRows ),
-<a name="l01245"></a>01245          <span class="stringliteral">"sinfo_removeGeneralOffset failed"</span> );
-<a name="l01246"></a>01246 
-<a name="l01247"></a>01247       cknull(im5 = sinfo_new_remove_regional_tilt ( im_obj, im4, im3 ),
-<a name="l01248"></a>01248          <span class="stringliteral">"sinfo_removeRegionalTilt failed"</span> );
-<a name="l01249"></a>01249 
-<a name="l01250"></a>01250       cknull(im6 = sinfo_new_remove_column_offset ( im_obj, im5, im3 ),
-<a name="l01251"></a>01251          <span class="stringliteral">"sinfo_removeColumnOffset failed"</span> );
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253       cknull(im7 = sinfo_new_remove_residual_tilt ( im6, im3 ),
-<a name="l01254"></a>01254          <span class="stringliteral">"sinfo_removeResidualTilt failed"</span> );
-<a name="l01255"></a>01255 
-<a name="l01256"></a>01256       cknull(im8 = sinfo_new_remove_residual_offset ( im7, im3 ),
-<a name="l01257"></a>01257          <span class="stringliteral">"sinfo_removeResidualOffset failed"</span>);
-<a name="l01258"></a>01258       cknull(im9 = sinfo_sinfo_merge_images(im_obj, im8, im3),
-<a name="l01259"></a>01259          <span class="stringliteral">"sinfo_mergeImages failed"</span> );
-<a name="l01260"></a>01260 
-<a name="l01261"></a>01261       ck0(sinfo_pro_save_ima(im9,raw,sof,cfg->outName,
-<a name="l01262"></a>01262                  frm_pro_ctg,NULL,plugin_id,config),
-<a name="l01263"></a>01263       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l01264"></a>01264 
-<a name="l01265"></a>01265       sinfo_free_image(&im3);
-<a name="l01266"></a>01266       sinfo_free_image(&im4);
-<a name="l01267"></a>01267       sinfo_free_image(&im5);
-<a name="l01268"></a>01268       sinfo_free_image(&im6);
-<a name="l01269"></a>01269       sinfo_free_image(&im7);
-<a name="l01270"></a>01270       sinfo_free_image(&im8);
-<a name="l01271"></a>01271       sinfo_free_image(&im9);
-<a name="l01272"></a>01272       sinfo_free_image(&im_obj);
-<a name="l01273"></a>01273       sinfo_free_image(&im_dither);
-<a name="l01274"></a>01274     }
-<a name="l01275"></a>01275     <span class="comment">/*</span>
-<a name="l01276"></a>01276 <span class="comment">    #---------------------------------------------------------</span>
-<a name="l01277"></a>01277 <span class="comment">    # convolve spectra with Gaussian</span>
-<a name="l01278"></a>01278 <span class="comment">    #---------------------------------------------------------</span>
-<a name="l01279"></a>01279 <span class="comment">    */</span>
-<a name="l01280"></a>01280   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->gaussInd == 1 && cfg->interInd == 0) {
-<a name="l01281"></a>01281     sinfo_msg(<span class="stringliteral">"Convolve spectra with Gaussian"</span>);
-<a name="l01282"></a>01282     <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l01283"></a>01283       cknull(im_conv = sinfo_new_convolve_image_by_gauss ( im_obj, cfg->hw ),
-<a name="l01284"></a>01284          <span class="stringliteral">"sinfo_convolveImageByGauss failed"</span> );
-<a name="l01285"></a>01285 
-<a name="l01286"></a>01286       ck0(sinfo_pro_save_ima(im_conv,raw,sof,cfg->outName,
-<a name="l01287"></a>01287                  frm_pro_ctg,NULL,plugin_id,config),
-<a name="l01288"></a>01288       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l01289"></a>01289 
-<a name="l01290"></a>01290       sinfo_free_image(&im_obj);
-<a name="l01291"></a>01291       sinfo_free_image(&im_conv);
-<a name="l01292"></a>01292       <span class="keywordflow">if</span> (cfg->contains_dither == 1){
-<a name="l01293"></a>01293     sinfo_free_image(&im_dither);
-<a name="l01294"></a>01294       }
-<a name="l01295"></a>01295     }
-<a name="l01296"></a>01296   } <span class="keywordflow">else</span> {
-<a name="l01297"></a>01297 
-<a name="l01298"></a>01298     sinfo_msg(<span class="stringliteral">"Add QC LOG"</span>);
-<a name="l01299"></a>01299     <span class="comment">/* add QC-LOG */</span>
-<a name="l01300"></a>01300     <span class="comment">/* sinfo_det_ncounts(raw, cfg->qc_thresh_max); */</span>
-<a name="l01301"></a>01301     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l01302"></a>01302 
-<a name="l01303"></a>01303     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMON MEANFLUX"</span>,
-<a name="l01304"></a>01304                      qc->avg_on,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01305"></a>01305 <span class="comment">/*    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",</span>
-<a name="l01306"></a>01306 <span class="comment">                     qc->avg_on,"Average of flux","%g"));*/</span>
-<a name="l01307"></a>01307     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMOFF MEANFLUX"</span>,
-<a name="l01308"></a>01308                      qc->avg_of,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01309"></a>01309     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MEANFLUX"</span>,
-<a name="l01310"></a>01310                      qc->avg_di,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01311"></a>01311     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMON MAXFLUX"</span>,
-<a name="l01312"></a>01312                      qc->max_on,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01313"></a>01313     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMOFF MAXFLUX"</span>,
-<a name="l01314"></a>01314                      qc->max_of,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01315"></a>01315     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MAXFLUX"</span>,
-<a name="l01316"></a>01316                      qc->max_di,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l01317"></a>01317     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FRMON NPIXSAT"</span>,
-<a name="l01318"></a>01318                   qc->nsat,
-<a name="l01319"></a>01319                   <span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l01320"></a>01320     update_bad_pixel_map(im_obj);
-<a name="l01321"></a>01321     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MEANSTD"</span>,
-<a name="l01322"></a>01322                      cpl_image_get_mean(im_obj),<span class="stringliteral">"mean of the image"</span>,<span class="stringliteral">"%13.6f"</span>));
-<a name="l01323"></a>01323 
-<a name="l01324"></a>01324     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
-<a name="l01325"></a>01325                                              <span class="stringliteral">"QC FRMDIF STDEV"</span>,
-<a name="l01326"></a>01326                                              cpl_image_get_stdev(im_obj),
-<a name="l01327"></a>01327                                              <span class="stringliteral">"standard deviation of the image"</span>,
-<a name="l01328"></a>01328                                              <span class="stringliteral">"%13.6f"</span>));
-<a name="l01329"></a>01329 
-<a name="l01330"></a>01330     ck0(sinfo_pro_save_ima(im_obj,raw,sof,cfg->outName,
-<a name="l01331"></a>01331                frm_pro_ctg,qclog_tbl,plugin_id,config),
-<a name="l01332"></a>01332     <span class="stringliteral">"cannot dump ima %s"</span>, cfg->outName);
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334     sinfo_free_image(&im_obj);
-<a name="l01335"></a>01335     sinfo_free_table(&qclog_tbl);
-<a name="l01336"></a>01336 
-<a name="l01337"></a>01337     <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->interInd == 0) {
-<a name="l01338"></a>01338       <span class="keywordflow">if</span> (strstr(cfg->outName, <span class="stringliteral">".fits"</span> ) != NULL ) {
-<a name="l01339"></a>01339     snprintf(name_list, MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,
-<a name="l01340"></a>01340          sinfo_new_get_rootname(cfg->outName), <span class="stringliteral">"_dith.fits"</span>);
-<a name="l01341"></a>01341     strcpy(cfg->outName,name_list);
-<a name="l01342"></a>01342       } <span class="keywordflow">else</span> {
-<a name="l01343"></a>01343     strcat(cfg->outName,<span class="stringliteral">"_dith"</span>);
-<a name="l01344"></a>01344       }
-<a name="l01345"></a>01345       cpl_free(name_list);
-<a name="l01346"></a>01346 
-<a name="l01347"></a>01347 
-<a name="l01348"></a>01348 
-<a name="l01349"></a>01349       ck0(sinfo_pro_save_ima(im_dither,raw,sof,cfg->outName,
-<a name="l01350"></a>01350                  frm_pro_ctg,NULL,plugin_id,config),
-<a name="l01351"></a>01351       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l01352"></a>01352 
-<a name="l01353"></a>01353       <span class="keywordflow">if</span> (cfg->contains_dither == 1) {
-<a name="l01354"></a>01354     sinfo_free_image(&im_dither);
-<a name="l01355"></a>01355       }
-<a name="l01356"></a>01356     }
-<a name="l01357"></a>01357 
-<a name="l01358"></a>01358   }
-<a name="l01359"></a>01359 
-<a name="l01360"></a>01360   <span class="comment">/* the following generates a valgrind error</span>
-<a name="l01361"></a>01361 <span class="comment">     but without it 8 bytes are leaked */</span>
-<a name="l01362"></a>01362   sinfo_free_image_array(&im,cfg->nframes);
-<a name="l01363"></a>01363 
-<a name="l01364"></a>01364   <span class="comment">/*AMO: check if those images can be deleted before */</span>
-<a name="l01365"></a>01365   sinfo_free_image(&int_im_shifted);
-<a name="l01366"></a>01366   sinfo_free_image(&int_im);
-<a name="l01367"></a>01367   sinfo_free_image(&im_obj_flat);
-<a name="l01368"></a>01368   sinfo_free_image(&im_obj_sub);
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370   sinfo_stack_free(&cfg);
-<a name="l01371"></a>01371   sinfo_free_frameset(&raw);
-<a name="l01372"></a>01372   sinfo_qc_wcal_delete(&qc);
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374   <span class="keywordflow">return</span> 0;
-<a name="l01375"></a>01375 
-<a name="l01376"></a>01376  cleanup:
-<a name="l01377"></a>01377   sinfo_free_table(&qclog_tbl);
-<a name="l01378"></a>01378   sinfo_free_table(&tbl_slitpos);
-<a name="l01379"></a>01379   sinfo_free_table(&tbl_index);
-<a name="l01380"></a>01380   <span class="keywordflow">if</span>(slit_edges!=NULL) sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-<a name="l01381"></a>01381   sinfo_free_image(&flat1_dist);
-<a name="l01382"></a>01382   sinfo_free_image(&flat1);
-<a name="l01383"></a>01383   sinfo_free_image(&flat_smooth);
-<a name="l01384"></a>01384   sinfo_free_image(&flat2_dist);
-<a name="l01385"></a>01385   sinfo_free_image(&int_im);
-<a name="l01386"></a>01386   sinfo_free_image(&int_im_dith);
-<a name="l01387"></a>01387   sinfo_free_image(&int_im_shifted);
-<a name="l01388"></a>01388   sinfo_free_image(&im_dither);
-<a name="l01389"></a>01389   sinfo_free_image(&flat2);
-<a name="l01390"></a>01390   sinfo_free_image(&im_obj_flat);
-<a name="l01391"></a>01391   sinfo_free_image(&im_obj_sub);
-<a name="l01392"></a>01392   sinfo_free_image(&im_obj);
-<a name="l01393"></a>01393   sinfo_free_image(&mask_im);
-<a name="l01394"></a>01394   sinfo_free_image(&im_sky);
-<a name="l01395"></a>01395   sinfo_free_imagelist(&list_object_tmp);
-<a name="l01396"></a>01396   sinfo_free_image(&sky_img_flat);
-<a name="l01397"></a>01397   sinfo_free_image(&sky_dist);
-<a name="l01398"></a>01398   sinfo_free_image(&sky_img);
-<a name="l01399"></a>01399   sinfo_free_imagelist(&list_object);
-<a name="l01400"></a>01400   sinfo_free_imagelist(&list_sky);
-<a name="l01401"></a>01401   <span class="keywordflow">if</span>(im != NULL) sinfo_free_image_array(&im,cfg->nframes);
-<a name="l01402"></a>01402   sinfo_stack_free(&cfg);
-<a name="l01403"></a>01403   sinfo_free_frameset(&raw);
-<a name="l01404"></a>01404   sinfo_qc_wcal_delete(&qc);
-<a name="l01405"></a>01405 
-<a name="l01406"></a>01406   <span class="keywordflow">return</span> -1 ;
-<a name="l01407"></a>01407 
-<a name="l01408"></a>01408 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_prepare_stacked_frames.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">     File name    :       sinfo_new_prepare_stacked_frames.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally,</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  interleaves dithered exposures or convolves a single exposure with a</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  Gaussian, respectively.</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_new_prepare_stacked_frames.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_stack_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_coltilt.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_merge.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_new_bezier.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_shift_images.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_product_config.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include "sinfo_wcal_functions.h"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_new_bezier.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">   Function     :       sinfo_new_prepare_stacked_frames()</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally,</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  interleaves dithered exposures or convolves a single exposure with a</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  Gaussian, respectively.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> new_get_names(<span class="keyword">const</span> <span class="keywordtype">char</span>* pcatg, <span class="keyword">const</span> <span class="keywordtype">int</span> ind, stack_config_n ** cfg);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> new_get_names(<span class="keyword">const</span> <span class="keywordtype">char</span>* pcatg, <span class="keyword">const</span> <span class="keywordtype">int</span> ind, stack_config_n **  cfg){</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_OFF) == 0) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         strcpy((*cfg)->outName,DISTORTION_STACK_OFF_OUT_FILENAME);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_ON)  == 0) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack_on.fits"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED)     == 0) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack.fits"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_WAVE_LAMP_STACKED)    == 0) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         strcpy((*cfg)->outName,<span class="stringliteral">"out_wcal_stack.fits"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_FIBRE_NS_STACKED_DIST)== 0) {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         strcpy((*cfg)->outName,<span class="stringliteral">"out_ns_stack_warp.fits"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_WAVE_SLITPOS_STACKED) == 0) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         strcpy((*cfg)->outName,<span class="stringliteral">"out_slit_pos_stack.fits"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_PSF_CALIBRATOR_STACKED)== 0) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_SKY_PSF_CALIBRATOR_STACKED)== 0) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         strcpy((*cfg)->outName,STACKED_OUT_FILENAME);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* only 1 frame</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">  if (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">    strcpy((*cfg)->outName,STACKED_OUT_FILENAME);</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_SKY_NODDING_STACKED) == 0) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         strcpy((*cfg)->outName,STACKED_OUT_FILENAME); <span class="comment">/*STD*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_OBJECT_NODDING_STACKED) == 0) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_PUPIL_LAMP_STACKED) == 0) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">if</span> (strcmp(pcatg,PRO_STACKED) == 0) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         snprintf((*cfg)->outName,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     snprintf((*cfg)->sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_sky"</span>,ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keywordtype">int</span> sinfo_new_prepare_stacked_frames (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                                       cpl_parameterlist* config,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                                       cpl_frameset* sof,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                       cpl_frameset* ref_set,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* frm_pro_ctg,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                       <span class="keyword">const</span> <span class="keywordtype">int</span> frm_ind,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                       fake* fk)</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     stack_config_n * cfg =NULL;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     cpl_imagelist * list_object=NULL ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     cpl_imagelist * list_dither_object=NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     cpl_imagelist * list_dither_sky=NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_imagelist * list_sky=NULL;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     cpl_imagelist * list_dark=NULL;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     new_Lookup* lookup=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_image * im3=NULL ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_image * im4=NULL ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_image * im5=NULL ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_image * im6=NULL ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_image * im7=NULL ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_image * im8=NULL ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     cpl_image * im9=NULL ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_image * ref_im1=NULL ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_image * ref_im2=NULL ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_image ** im=NULL ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_image * im_obj=NULL ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_image* simg=NULL;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_image * im_dark=NULL ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_image * im_sky=NULL ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     cpl_image * im_dither=NULL ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_image * im_dither_sky=NULL ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_image * im_obj_sub=NULL ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     cpl_image * im_obj_flat=NULL ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_image * im_dither_sub=NULL ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_image * im_dither_flat=NULL ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     cpl_image * int_im_shifted=NULL ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cpl_image * int_im_dith_shifted=NULL ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_image * im_conv=NULL ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_image * mask_im=NULL ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     cpl_image * flat_smooth=NULL ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cpl_image * flat1=NULL ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_image * flat2=NULL ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cpl_image * int_im=NULL ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_image * int_im_dith=NULL ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     cpl_image * sky_img_flat=NULL;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_image * sky_dist=NULL;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     cpl_imagelist * iCube=NULL ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cpl_imagelist * jCube=NULL ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_image * X=NULL ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     cpl_image * hX=NULL ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_image * Y=NULL ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_image * Z=NULL ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     cpl_table * qclog_tbl=NULL;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     cpl_image* sky_img=NULL;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     cpl_image* mdark=NULL;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordtype">int</span> typ=0;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordtype">int</span> pos=0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordtype">int</span> n = 0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordtype">int</span> cnt = 0 ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordtype">float</span> val_x=0;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordtype">float</span> val_y=0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordtype">float</span>** slit_edges=NULL;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordtype">char</span>** in_nam=NULL;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">int</span> nob = 0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordtype">int</span> nsky = 0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordtype">int</span> nobjdith = 0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">int</span> nskydith = 0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordtype">int</span> nda = 0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">char</span> name_list[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordtype">char</span> fake_sky_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordtype">float</span> lo_cut=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordtype">float</span> hi_cut=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     cpl_imagelist* list_object_tmp=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     cpl_imagelist* list_dither_object_tmp=NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     cpl_imagelist* list_sky_tmp=NULL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_imagelist* list_dither_sky_tmp=NULL;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_image* flat1_dist=NULL;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     cpl_image* flat2_dist=NULL;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordtype">char</span> file_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_table* tbl_index = NULL;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     cpl_table* tbl_slitpos=NULL;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">int</span> rhead=0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     cpl_frame*     sky_frame = NULL;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordtype">char</span>* sky_name  = NULL;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordtype">char</span>* sky_tag   = NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     qc_wcal* qc=sinfo_qc_wcal_new();</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordtype">int</span> mflat_norm_smooth=FALSE;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordtype">int</span> smooth_rad=16;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordtype">int</span> sub_raw_sky=1;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">       1) parse the file names and parameters to the psf_config data</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">          structure cfg</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                     <span class="stringliteral">"sinfoni.stacked.mflat_norm_smooth"</span>));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     check_nomsg(mflat_norm_smooth=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                     <span class="stringliteral">"sinfoni.stacked.mflat_smooth_rad"</span>));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     check_nomsg(smooth_rad=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.sub_raw_sky"</span>));</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     check_nomsg(sub_raw_sky=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     cknull(cfg = sinfo_parse_cpl_input_stack(config,sof,&raw, fk),</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>            <span class="stringliteral">"could not parse cpl input file!"</span>) ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     ck0(sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc),<span class="stringliteral">"computing det ncounts"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">if</span>(ref_set != NULL) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         raw=cpl_frameset_duplicate(ref_set);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* defines output file name for stack set i */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     ck0_nomsg(new_get_names(frm_pro_ctg, frm_ind, &cfg));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> (cfg->flatInd == 1){</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->flatfield1) != 1) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input FF file %s is not FITS"</span>,cfg->flatfield1);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">if</span> (cfg->maskInd == 1) {</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->mask) != 1) {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input mask file %s is not FITS"</span>,cfg->mask);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         <span class="keywordflow">if</span>(cfg -> indind == 0) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>             <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->slitposList) != 1) {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input slitpos file %s is not FITS"</span>,cfg->slitposList);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                 <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>             }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>         }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">   # Take a clean mean of several images</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">   # input is 1 or more similar images</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment">   #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">if</span> (cfg->sfInd == 1){</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="keywordflow">if</span> (cfg->contains_dark == 0) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no sinfo_dark frames given!"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">if</span> (cfg->contains_ref == 0) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no reference frames given!"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="comment">/* allocate memory for lists of object, sky and dithered frames */</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     check(list_object=cpl_imagelist_new(),</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>           <span class="stringliteral">"could not allocate memory for object frame"</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         check(list_dither_object=cpl_imagelist_new(),</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                         <span class="stringliteral">"could not allocate memory for dither object frame"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         check(list_sky = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                         <span class="stringliteral">"could not allocate memory for off frame list"</span>);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->nditheroff > 0) {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         check(list_dither_sky = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                         <span class="stringliteral">"could not allocate memory for dither frame list"</span>);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">if</span> (cfg->contains_dark == 1 && cfg->sfInd == 1) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         check(list_dark = cpl_imagelist_new(),</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                         <span class="stringliteral">"could not allocate memory for sinfo_dark frame"</span>);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 0 && cfg->nditheroff > 0) {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"please use non-dithered off-frames, remove the 2!"</span>);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* build different image lists for the different cases */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     cknull_nomsg(im=(cpl_image**)cpl_calloc(cfg -> nframes, <span class="keyword">sizeof</span>(cpl_image*)));</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         name = cfg->framelist[i];</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         check_nomsg(im[i] = cpl_image_load( name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="comment">/* up to here leak free */</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     rhead=0;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         typ = sinfo_new_intarray_get_value( cfg->frametype, i );</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         pos = sinfo_new_intarray_get_value( cfg->frameposition, i );</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         cknull(im[i],<span class="stringliteral">"could not load image"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         <span class="keywordflow">if</span> (pos == 2) {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>             <span class="keywordflow">if</span> (typ == 1) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                 check_nomsg(cpl_imagelist_set(list_object,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                 cpl_image_duplicate(im[i]),nob));</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                 nob = nob + 1;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>             }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 0 ) {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                 check_nomsg(cpl_imagelist_set(list_sky,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                 cpl_image_duplicate(im[i]),nsky));</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 nsky = nsky + 1;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                 <span class="keywordflow">if</span>(pdensity > 0) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                     <span class="keywordflow">if</span>(fk->is_fake_sky==1) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                         snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                                         frm_ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                         check_nomsg(sky_img=cpl_image_load(fake_sky_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>                         ck0(sinfo_pro_save_ima(sky_img,raw,sof,fake_sky_name,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                         PRO_SKY_DUMMY,NULL,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                         plugin_id,config),</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                             <span class="stringliteral">"cannot save sky ima %s"</span>, fake_sky_name);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                         sinfo_free_image(&sky_img);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                 }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                 <span class="keywordflow">if</span>((pdensity == 3) || (pdensity == 1) ||</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                 (pdensity == 2 && frm_ind == 0)) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                     check_nomsg(sky_frame = cpl_frameset_get_frame(raw,i));</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                     check_nomsg(sky_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(sky_frame));</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                     check_nomsg(sky_tag   = (<span class="keywordtype">char</span>*) cpl_frame_get_tag(sky_frame));</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                     <span class="keywordflow">if</span> ( (strstr(frm_pro_ctg,<span class="stringliteral">"OBJECT"</span>) != NULL) ||</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                     (strstr(frm_pro_ctg,<span class="stringliteral">"PSF"</span>) != NULL) ||</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                     (strstr(frm_pro_ctg,<span class="stringliteral">"STD"</span>) != NULL) ) {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                         check_nomsg(sky_img = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                         snprintf(sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%2.2d%s"</span>,<span class="stringliteral">"out_sky"</span>,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                  frm_ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                         ck0(sinfo_pro_save_ima(sky_img,raw,sof,sky_name,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                         PRO_SKY_STACKED_DUMMY,NULL,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                                         plugin_id,config),</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                             <span class="stringliteral">"cannot save sky ima %s"</span>, sky_name);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                         sinfo_free_image(&sky_img);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                         <span class="keywordflow">if</span> (cfg->flatInd == 1) {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                             sinfo_msg(<span class="stringliteral">"Sky Flatfielding"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                             check(flat1=cpl_image_load(cfg->flatfield1,CPL_TYPE_FLOAT,0,0 ),</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                                   <span class="stringliteral">"could not load flatfield image"</span> );</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                             <span class="keywordflow">if</span>(mflat_norm_smooth != 0) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                 <span class="keywordflow">if</span>(mflat_norm_smooth == 1) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                                     sy=cpl_image_get_size_y(flat1);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                                     cknull(flat_smooth=sinfo_image_smooth_fft(flat1,sy/smooth_rad),</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>                                            <span class="stringliteral">"could not smooth flatfield"</span> );</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(mflat_norm_smooth == 2) {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                                     cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                                                     smooth_rad),</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                                                     <span class="stringliteral">"could not smooth flatfield"</span> );</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                                 }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                                 check_nomsg(cpl_image_divide(flat1,flat_smooth));</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                                 sinfo_free_image(&flat_smooth);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                             }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                             check_nomsg(simg = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0 ));</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                             cknull(sky_img_flat=sinfo_new_div_images_robust(simg,flat1),</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                    <span class="stringliteral">"could not carry out flatfield division"</span> );</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                             sinfo_free_image(&simg);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                             sinfo_free_image(&flat1);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                             <span class="comment">/* if (frm_ind == 0) { */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                             <span class="keywordflow">if</span> (cfg->warpfixInd == 1){</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                                 sinfo_msg(<span class="stringliteral">"Correct sky for distortions"</span>);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                                 snprintf(file_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                          STACK_SKY_DIST_OUT_FILENAME,frm_ind,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                                 sky_dist = sinfo_new_image_warp_fits(sky_img_flat,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                                 cfg->kernel,</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                                                 cfg->polyFile);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                                 ck0(sinfo_pro_save_ima(sky_dist,raw,sof,</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>                                                 file_name,</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>                                                 PRO_STACK_SKY_DIST,NULL,plugin_id,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                                                 config),<span class="stringliteral">"cannot save ima %s"</span>,</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                                     STACK_SKY_DIST_OUT_FILENAME);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                                 sinfo_free_image(&sky_dist);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                             }</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                             <span class="comment">/* } */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                             sinfo_free_image(&sky_img_flat);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                         } <span class="comment">/* end check on flatind */</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                     } <span class="comment">/* end check on procatg */</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                 }</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 5 ) {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                 <span class="keywordflow">if</span> (cfg->sfInd == 1) {</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                     check_nomsg(cpl_imagelist_set(list_dark,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                                     cpl_image_duplicate(im[i]),nda));</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                     nda = nda + 1;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                     sinfo_free_image(&(im[i]));</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                 }</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( typ == 4 ) {</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                 <span class="keywordflow">if</span> ( cfg->sfInd == 1) {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                     ref_im1 = im[i];</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                     sinfo_free_image(&(im[i]));</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                 }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             }</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>             <span class="keywordflow">if</span> (typ == 1) {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                 check_nomsg(cpl_imagelist_set(list_dither_object,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                                 cpl_image_duplicate(im[i]),nobjdith));</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                 nobjdith = nobjdith + 1;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (typ == 0) {</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                 check_nomsg(cpl_imagelist_set(list_dither_object,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                                 cpl_image_duplicate(im[i]),nskydith));</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                 nskydith = nskydith + 1;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>             } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (typ == 4) {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                 <span class="keywordflow">if</span> (cfg->sfInd == 1) {</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                     ref_im2 = cpl_image_duplicate(im[i]);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                     sinfo_free_image(&(im[i]));</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                 }</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>             }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         }</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     } <span class="comment">/* end for loop on i */</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="keywordflow">if</span> (nob != cfg->nobj ||</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                     cfg->noff != nsky ||</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                     nobjdith != cfg->nditherobj ||</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                     nskydith != cfg->nditheroff) {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of the"</span>);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"different types of frames"</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     }</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     <span class="keywordflow">if</span> (cfg->sfInd == 1 && nda != cfg->ndark) {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"something is wrong with the number of sinfo_dark frames"</span>);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     }</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     sinfo_msg(<span class="stringliteral">"Create and fill cubes with the different images"</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="comment">/* create and fill cubes with the different image lists */</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     cknull(list_object,<span class="stringliteral">"could not create object data cube!"</span>);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     <span class="comment">/* shift the images in the cubes-if indicated-in spectral direction</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment">     with respect to the reference image</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     <span class="keywordflow">if</span> (cfg->sfInd == 1) {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="comment">      first take the mean of the sinfo_dark frames and subtract the result</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">      from all cubes</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         sinfo_msg(<span class="stringliteral">"Shift cube images in spectral direction with "</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                         <span class="stringliteral">"respect to reference"</span>);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         <span class="keywordflow">if</span> (cfg->contains_dark == 1) {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             sinfo_msg(<span class="stringliteral">"cfg->contains_dark == 1"</span>);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             <span class="keywordflow">if</span> (cfg->loReject*cfg->ndark < 1. && cfg->hiReject * cfg->ndark < 1.) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">          im_dark = sinfo_new_average_cube_to_image( list_dark );</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                 check(im_dark = cpl_imagelist_collapse_create( list_dark ),</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                                 <span class="stringliteral">"sinfo_averageCubeToImage failed"</span> );</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>             }</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>             <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                 check_nomsg(no=cpl_imagelist_get_size(list_dark));</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                 lo_cut=(floor)( cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                 hi_cut=(floor)( cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                 check(im_dark=cpl_imagelist_collapse_minmax_create(list_dark,lo_cut,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                                 hi_cut),</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>             }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>             sinfo_free_imagelist(&list_dark);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             check_nomsg(list_object_tmp = cpl_imagelist_duplicate (list_object));</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>             check(cpl_imagelist_subtract_image (list_object_tmp, im_dark),</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>                   <span class="stringliteral">"cpl_imagelist_subtract_image failed"</span> );</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="comment">       cube_object_tmp = sinfo_subImageFromCube (cube_object, im_dark);</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             sinfo_msg(<span class="stringliteral">"cfg->contains_dark == 0"</span>);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>             check_nomsg(list_object_tmp = cpl_imagelist_duplicate(list_object));</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         cknull(list_object = sinfo_align_cube_to_reference (list_object_tmp,</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>                         ref_im1,</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                         cfg->sfOrder,</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>                         cfg->sfType),</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>                <span class="stringliteral">"sinfo_align_cube_to_reference failed"</span> );</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         sinfo_free_imagelist(&list_object_tmp);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>             <span class="keywordflow">if</span> (cfg->contains_dark == 1) {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                 check_nomsg(list_dither_object_tmp =</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                                 cpl_imagelist_duplicate(list_dither_object));</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                 check(cpl_imagelist_subtract_image(list_dither_object_tmp,im_dark),</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment">        list_dither_object_tmp =</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="comment">              sinfo_new_sub_image_from_cube(list_dither_object,</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="comment">                                                    im_dark);</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                 check_nomsg(list_dither_object_tmp=</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                                 cpl_imagelist_duplicate(list_dither_object));</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>             }</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>             sinfo_free_imagelist(&list_dither_object);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>             cknull(list_dither_object=</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                             sinfo_align_cube_to_reference (list_dither_object_tmp,</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                                             ref_im2,</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>                                             cfg->sfOrder,</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>                                             cfg->sfType),</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                                             <span class="stringliteral">"sinfo_align_cube_to_reference failed"</span> );</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>             sinfo_free_imagelist(&list_dither_object_tmp);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>         }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>         <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>             <span class="keywordflow">if</span> (cfg->contains_dark == 1) {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                 check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                 check(cpl_imagelist_subtract_image (list_sky_tmp, im_dark),</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> <span class="comment">      cube_sky_tmp = sinfo_subImageFromCube (cube_sky, im_dark);</span></div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                 check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             }</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>             check_nomsg(list_sky_tmp=cpl_imagelist_duplicate(list_sky));</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>             check(list_sky = sinfo_align_cube_to_reference (list_sky_tmp,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                             ref_im1,</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                             cfg->sfOrder,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                             cfg->sfType),</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                   <span class="stringliteral">"sinfo_alignCubeToReference failed"</span> );</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>             check_nomsg(cpl_imagelist_delete(list_sky_tmp));</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         }</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>             <span class="keywordflow">if</span> (cfg->contains_dark == 1) {</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                 check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                 check(cpl_imagelist_subtract_image(list_dither_sky_tmp,im_dark),</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                       <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">       cube_dither_sky_tmp = sinfo_subImageFromCube (cube_dither_sky, im_dark);</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                 check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>             }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>             sinfo_free_imagelist(&list_dither_sky);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>             check(list_dither_sky=sinfo_align_cube_to_reference(list_dither_sky_tmp,</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                             ref_im2,</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                             cfg->sfOrder,</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                             cfg->sfType),</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                   <span class="stringliteral">"sinfo_alignCubeToReference failed"</span> );</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             sinfo_free_imagelist(&list_dither_sky_tmp);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>         }</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>         sinfo_free_image(&ref_im1);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>             sinfo_free_image(&ref_im2);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         <span class="keywordflow">if</span> (cfg->contains_dark == 1) {</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>             sinfo_free_image(&im_dark);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     } <span class="comment">/* end if over sfInd */</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     <span class="comment">/* subtracts the master dark from different frames if present */</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     <span class="keywordflow">if</span>(cfg->mdark_ind==1){</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>         sinfo_msg(<span class="stringliteral">"Subtract master dark %s "</span>,cfg->mdark);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>         check_nomsg(mdark=cpl_image_load(cfg->mdark,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>         <span class="keywordflow">if</span> (list_object !=NULL) {</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>             cpl_imagelist_subtract_image (list_object, mdark);</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>         }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>         <span class="keywordflow">if</span> (list_sky !=NULL) {</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>             cpl_imagelist_subtract_image (list_sky, mdark);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         }</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>         sinfo_free_image(&mdark);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     }</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="comment">/* take the average with rejection of the different cubes */</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     sinfo_msg(<span class="stringliteral">"Take the average of the different cubes"</span>);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="keywordflow">if</span> (cfg->loReject*cfg->nobj < 1. && cfg->hiReject * cfg->nobj < 1.) {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>         check(im_obj = cpl_imagelist_collapse_create(list_object),</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>                         <span class="stringliteral">"Average with rejection failed"</span> );</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         check_nomsg(no=cpl_imagelist_get_size(list_object));</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         lo_cut=(floor)( cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>         hi_cut=(floor)( cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         check(im_obj=cpl_imagelist_collapse_minmax_create(list_object,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                         lo_cut,hi_cut),<span class="stringliteral">"Average with rejection failed"</span> );</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>         <span class="keywordflow">if</span> (cfg->loReject*nsky < 1. && cfg->hiReject*nsky < 1.) {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             <span class="comment">/* here might explode in dither mode */</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>             cknull(im_sky = cpl_imagelist_collapse_create( list_sky ),</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>                             <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>             check_nomsg(no=cpl_imagelist_get_size(list_sky));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>             lo_cut=(floor)( cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>             hi_cut=(floor)( cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>             check(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                   <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         }</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>         sinfo_free_imagelist(&list_sky);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     }</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         <span class="keywordflow">if</span> (cfg->loReject*nobjdith < 1. && cfg->hiReject*nobjdith < 1.) {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>             check(im_dither = cpl_imagelist_collapse_create( list_dither_object ),</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                             <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>             check_nomsg(no=cpl_imagelist_get_size(list_dither_object));</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>             lo_cut=(floor)( cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>             hi_cut=(floor)( cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>             check(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>                             lo_cut,hi_cut),</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>                   <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>         }</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>         sinfo_free_imagelist(&list_dither_object);</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     }</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>         <span class="keywordflow">if</span> (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>             check(im_dither_sky = cpl_imagelist_collapse_create( list_dither_sky ),</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                             <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>             check_nomsg(no=cpl_imagelist_get_size(list_dither_sky));</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>             lo_cut=(floor)( cfg->loReject*no+0.5);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             hi_cut=(floor)( cfg->hiReject*no+0.5);</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>             check(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                             lo_cut,hi_cut),</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>                   <span class="stringliteral">"Average with rejection failed"</span>);</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         }</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>         sinfo_free_imagelist(&list_dither_sky);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     }</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">  # Subtract the resulting off-frame (sky) from the on-frame</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">  #-------------------------------------------------------</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">  # finally, subtract off from on frames and store the result</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="comment">  # in the object cube</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <span class="keywordflow">if</span>(sub_raw_sky == 1 ) {</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         <span class="keywordflow">if</span> (cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             sinfo_msg(<span class="stringliteral">"Subtract the off-frame (sky) from the on-frame"</span>);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>             check_nomsg(im_obj_sub = cpl_image_duplicate(im_obj));</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>             check(cpl_image_subtract(im_obj_sub, im_sky),</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                   <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>             sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>             <span class="keywordflow">if</span> (((cfg->contains_dither == 1) && (nskydith > 0)) ||</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                             cfg->contains_dither == 0) {</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>                 sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                 im_obj = cpl_image_duplicate(im_obj_sub);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>             }</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1 && nskydith > 0) {</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>             check(cpl_image_subtract(im_dither_sub, im_dither_sky),</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>                   <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>             sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>             sinfo_free_image(&im_dither_sky);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             im_dither = cpl_image_duplicate(im_dither_sub);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->contains_dither == 1 &&</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                         nskydith == 0 &&</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                         cfg->contains_sky == 1) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>             check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>             check(cpl_image_subtract(im_dither_sub, im_sky),</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                   <span class="stringliteral">"could not sinfo_sub_image"</span>);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>             sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>             sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             im_dither = cpl_image_duplicate(im_dither_sub);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="comment">  # Flatfielding</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordflow">if</span> (cfg->flatInd == 1) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         sinfo_msg(<span class="stringliteral">"Flatfielding"</span>);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         check(flat1 = cpl_image_load (cfg->flatfield1,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>               <span class="stringliteral">"could not load flatfield image"</span> );</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>         <span class="keywordflow">if</span>(mflat_norm_smooth) {</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             <span class="comment">//We normalize the flat by a smoothed flat</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,smooth_rad),</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>                             <span class="stringliteral">"could not smooth flatfield"</span> );</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>             check_nomsg(cpl_image_divide(flat1,flat_smooth));</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>             sinfo_free_image(&flat_smooth);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>         }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>         cknull(im_obj_flat = sinfo_new_div_images_robust( im_obj, flat1),</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>                <span class="stringliteral">"could not carry out flatfield division"</span> );</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>         <span class="comment">/* AMO ** */</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>         <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>             <span class="keywordflow">if</span> (frm_ind == 0) {</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>                 <span class="keywordflow">if</span> (cfg->warpfixInd == 1){</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                     sinfo_msg(<span class="stringliteral">"Correct FF for distortions"</span>);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>                     <span class="comment">/* AMO check */</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>                     cknull_nomsg(flat1_dist=sinfo_new_image_warp_fits(flat1,cfg->kernel,</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>                                     cfg->polyFile));</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>                     ck0(sinfo_pro_save_ima(flat1_dist,raw,sof,</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>                                     STACK_MFLAT_DIST_OUT_FILENAME,</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>                                     PRO_STACK_MFLAT_DIST,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>                         <span class="stringliteral">"cannot save ima %s"</span>, STACK_MFLAT_DIST_OUT_FILENAME);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>                     sinfo_free_image(&flat1_dist);</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>                 }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>             }</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>         }</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>         sinfo_free_image(&flat1);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>         sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>         im_obj = cpl_image_duplicate(im_obj_flat);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>         <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>             <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                 check(flat2 = cpl_image_load (cfg->flatfield2,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>                                 <span class="stringliteral">"could not load flatfield image"</span> );</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                 <span class="keywordflow">if</span>(mflat_norm_smooth) {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> </div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                     <span class="comment">//We normalize the flat by a smoothed flat</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>                     cknull(flat_smooth = sinfo_image_smooth_median_y(flat2,smooth_rad),</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                                     <span class="stringliteral">"could not smooth flatfield"</span> );</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>                     check_nomsg(cpl_image_divide(flat2,flat_smooth));</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>                     sinfo_free_image(&flat_smooth);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>                 }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                 cknull(im_dither_flat = sinfo_new_div_images_robust( im_dither, flat2),</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                        <span class="stringliteral">"could not carry out flatfield division"</span> );</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>                 <span class="keywordflow">if</span> (frm_ind == 0) {</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>                     <span class="keywordflow">if</span> (cfg->warpfixInd == 1) {</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>                         sinfo_msg(<span class="stringliteral">"Correct FF for distortions"</span>);</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                         flat2_dist = sinfo_new_image_warp_fits(flat2,</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>                                         cfg->kernel, cfg->polyFile);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                         ck0(sinfo_pro_save_ima(flat2_dist,raw,sof,</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>                                         STACK_MFLAT_DITHER_DIST_OUT_FILENAME,</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>                                         PRO_STACK_MFLAT_DITHER_DIST,</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>                                         NULL,plugin_id,config),</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>                             <span class="stringliteral">"cannot save ima %s"</span>, STACK_MFLAT_DITHER_DIST_OUT_FILENAME);</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>                         sinfo_free_image(&flat2_dist);</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>                     }</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>                 }</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>                 sinfo_free_image(&flat2);</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>                 sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>                 im_dither = cpl_image_duplicate(im_dither_flat);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>             }</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>         }</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     }</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">  # static bad pixel correction</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     <span class="keywordflow">if</span> (cfg->maskInd == 1) {</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>         sinfo_msg(<span class="stringliteral">"Static bad pixel correction"</span>);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>         check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>               <span class="stringliteral">"could not load static bad pixel mask"</span> );</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>         ck0(sinfo_new_change_mask(mask_im, im_obj),</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>             <span class="stringliteral">"sinfo_changeMask failed"</span> );</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>         <span class="keywordflow">if</span> (cfg->indind == 0) {</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>             <span class="comment">/* open the ASCII list of the slitlet positions */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>             <span class="comment">/*READ TFITS TABLE*/</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>             strcpy(file_name,cfg->slitposList);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>             check(tbl_slitpos = cpl_table_load(file_name,1,0),</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>                   <span class="stringliteral">"error loading slitpos tbl %s "</span>,file_name);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>             <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos1"</span>) != 1) {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos1' not found in %s table %s"</span>,</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                                 PRO_SLIT_POS,file_name);</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>                 <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>             }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>             <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos2"</span>) != 1) {</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos2' not found in %s table %s"</span>,</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>                                 PRO_SLIT_POS,file_name);</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>                 <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>             }</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>             check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>             cknull_nomsg(slit_edges = sinfo_new_2Dfloatarray(n, 2));</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>             <span class="keywordflow">for</span> (i =0 ; i< n; i++){</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>                 check_nomsg(val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status));</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>                 check_nomsg(val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status));</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>                 check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_x,i,0));</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>                 check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_y,i,1));</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             }</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>             sinfo_free_table(&tbl_slitpos);</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>             cknull(int_im = sinfo_interpol_source_image (im_obj,</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>                             mask_im,</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>                             slit_edges),</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>                    <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>             sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>             im_obj = cpl_image_duplicate(int_im);</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>             <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>                 cknull(int_im_dith = sinfo_interpol_source_image (im_dither,</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                                 mask_im,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                 cfg->maxRad,</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                                 slit_edges),</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                                 <span class="stringliteral">"could not carry out sinfo_interpolSourceImage"</span> );</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                 sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>                 im_dither = cpl_image_duplicate(int_im_dith);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>             }</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>             sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>             cknull(int_im = sinfo_new_mult_image_by_mask(im_obj, mask_im),</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>                             <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span> </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>             sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>             im_obj = cpl_image_duplicate(int_im);</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>             <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>                 cknull(int_im_dith=sinfo_new_mult_image_by_mask(im_dither, mask_im),</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>                                 <span class="stringliteral">"could not carry out sinfo_multImageByMask"</span> );</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                 sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                 im_dither = cpl_image_duplicate(int_im_dith);</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>             }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         }</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     }</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="comment">  # static bad pixel correction BEZIER</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     <span class="keywordflow">if</span> (cfg->maskInd == 2){</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>         sinfo_msg(<span class="stringliteral">"Static bad pixel correction BEZIER"</span>);</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>               <span class="stringliteral">"could not load static bad pixel mask"</span> );</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         ck0(sinfo_new_change_mask(mask_im, im_obj),</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>             <span class="stringliteral">"sinfo_changeMask failed"</span> );</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span> </div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <span class="comment">/* #open the FITS table of the slitlet positions-*/</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         strcpy(file_name,cfg->slitposList);</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>         check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         slit_edges = sinfo_new_2Dfloatarray(n, 2);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>         <span class="keywordflow">for</span> (i =0 ; i< n; i++){</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>             val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>             val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status);</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>             sinfo_new_array2D_set_value(slit_edges,val_x,i,0);</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>             sinfo_new_array2D_set_value(slit_edges,val_y,i,1);</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         }</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         sinfo_free_table(&tbl_slitpos);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> </div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         strcpy(file_name,cfg->indexlist);</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>         check_nomsg(tbl_index = cpl_table_load(file_name,1,0));</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>         check_nomsg(n = cpl_table_get_nrow(tbl_index));</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         cknull_nomsg(in_nam = (<span class="keywordtype">char</span>**) cpl_calloc(n,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)));</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>         <span class="keywordflow">for</span> (i =0 ; i< n; i++){</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>             strcpy(in_nam[i],cpl_table_get_string(tbl_index,<span class="stringliteral">"name"</span>,i));</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         }</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         sinfo_free_table(&tbl_index);</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>         <span class="keywordflow">for</span> (i=0;i<cnt;i++) {</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>             <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"ICube.fits"</span>, name) != 0){</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                 check_nomsg(iCube=cpl_imagelist_load (<span class="stringliteral">"ICube.fits"</span>,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>             }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"JCube.fits"</span>, name) != 0) {</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>                 check_nomsg(jCube = cpl_imagelist_load (<span class="stringliteral">"JCube.fits"</span>,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>             }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"X.fits"</span>,  name) != 0) {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>                 check_nomsg(X=cpl_image_load(<span class="stringliteral">"X.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             }</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Y.fits"</span>,  name) != 0) {</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                 check_nomsg(Y=cpl_image_load(<span class="stringliteral">"Y.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>             }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Z.fits"</span>,  name) != 0) {</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                 check_nomsg(Z=cpl_image_load(<span class="stringliteral">"Z.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>             }</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"cX.fits"</span>, name) != 0) {</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>                 check_nomsg(hX=cpl_image_load(<span class="stringliteral">"cX.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>             }</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>             <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong name in index list or needed file not there!"</span>);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>                 <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>             }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>         }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>         lookup = sinfo_new_lookup();</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>         lookup->id=iCube;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>         lookup->jd=jCube;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>         lookup->X=X;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>         lookup->Y=Y;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         lookup->Z=Z;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         lookup->hX=hX;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         cknull(im_obj=sinfo_new_c_bezier_interpolate_image(im_obj,</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>                         mask_im,</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>                         lookup,</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>                         2,</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>                         slit_edges),</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>                <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span> );</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>         cknull(im_obj=sinfo_new_c_bezier_find_bad( im_obj,</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>                         mask_im,</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                         0,</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>                         cpl_image_get_size_x(im_obj),</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>                         0,</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>                         cpl_image_get_size_y(im_obj),</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                         cfg->sigmaFactor),</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>                <span class="stringliteral">"could not carry out sinfo_new_c_bezier_find_bad"</span> );</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>             cknull(im_dither=sinfo_new_c_bezier_interpolate_image(im_dither,</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>                             mask_im,</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>                             lookup,</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>                             2,</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>                             slit_edges),</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>                             <span class="stringliteral">"could not carry out new_c_bezier_Interpolate_Image on dithered frame"</span> );</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>             cknull(im_dither=sinfo_new_c_bezier_find_bad(im_dither,</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>                             mask_im,</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>                             0,</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>                             cpl_image_get_size_x(im_obj),</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>                             0,</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>                             cpl_image_get_size_y(im_obj),</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>                             cfg->sigmaFactor),</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>                    <span class="stringliteral">"could not carry out new_c_bezier_find_bad on dithered frame"</span>);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>         sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>         sinfo_free_imagelist(&iCube);</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>         sinfo_free_imagelist(&jCube);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         sinfo_free_image(&lookup->X);</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>         sinfo_free_image(&lookup->X);</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>         sinfo_free_image(&lookup->Y);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>         sinfo_free_image(&lookup->hX);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         sinfo_new_destroy_lookup(lookup);</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     }</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     <span class="keywordflow">if</span> (cfg->maskInd == 3) {</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>                         <span class="stringliteral">"could not load static bad pixel mask"</span> );</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>         <span class="comment">/* #open the ASCII list of the slitlet positions-- */</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         strcpy(file_name,cfg->slitposList);</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos1"</span>) != 1) {</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos1' not found in %s table %s"</span>,</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                             PRO_SLIT_POS,file_name);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         }</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         <span class="keywordflow">if</span>(cpl_table_has_column(tbl_slitpos,<span class="stringliteral">"pos2"</span>) != 1) {</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Column 'pos2' not found in %s table %s"</span>,</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>                             PRO_SLIT_POS,file_name);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>         }</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         slit_edges = sinfo_new_2Dfloatarray(n, 2);</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>         <span class="keywordflow">for</span> (i =0 ; i< n; i++) {</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>             val_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,&status);</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>             val_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,&status);</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>             sinfo_new_array2D_set_value(slit_edges,val_x,i,0);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>             sinfo_new_array2D_set_value(slit_edges,val_y,i,1);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         }</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         sinfo_free_table(&tbl_slitpos);</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>         strcpy(file_name,cfg->indexlist);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         check_nomsg(tbl_index = cpl_table_load(file_name,1,0));</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         check_nomsg(n = cpl_table_get_nrow(tbl_index));</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         cknull_nomsg(in_nam = (<span class="keywordtype">char</span>**) cpl_calloc(n,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*)));</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>         <span class="keywordflow">for</span> (i =0 ; i< n; i++){</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>             strcpy(in_nam[i],cpl_table_get_string(tbl_index,<span class="stringliteral">"name"</span>,i));</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>         sinfo_free_table(&tbl_index);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>         <span class="keywordflow">for</span> (i=0;i<cnt;i++){</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>             <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"ICube.fits"</span>, in_nam[i]) != 0){</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>                 check_nomsg(iCube=cpl_imagelist_load(<span class="stringliteral">"ICube.fits"</span>,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>             }</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"JCube.fits"</span>, in_nam[i]) != 0){</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>                 check_nomsg(jCube=cpl_imagelist_load(<span class="stringliteral">"JCube.fits"</span>,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>             }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"X.fits"</span>, in_nam[i]) != 0){</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>                 check_nomsg(X=cpl_image_load(<span class="stringliteral">"X.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>             }</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Y.fits"</span>, in_nam[i]) != 0){</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>                 check_nomsg(Y=cpl_image_load(<span class="stringliteral">"Y.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>             }</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"Z.fits"</span>, in_nam[i]) != 0){</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>                 check_nomsg(Z=cpl_image_load(<span class="stringliteral">"Z.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             }</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(<span class="stringliteral">"cX.fits"</span>, in_nam[i]) != 0) {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                 check_nomsg(hX=cpl_image_load(<span class="stringliteral">"cX.fits"</span>,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong name in index list or needed file not there!"</span>);</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>                 <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>             }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>         }</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>         lookup = sinfo_new_lookup();</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>         lookup->id=iCube;</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>         lookup->jd=jCube;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>         lookup->X=X;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>         lookup->Y=Y;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>         lookup->Z=Z;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>         lookup->hX=hX;</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>         cknull(im_obj = sinfo_new_c_bezier_interpolate_image(im_obj,</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                         mask_im,</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                         lookup,</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                         cfg->maxRad,</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                         2,</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>                         slit_edges ),</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>                <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span> );</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> </div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>             cknull(im_dither=sinfo_new_c_bezier_interpolate_image( im_dither,</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>                             mask_im,</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>                             lookup,</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>                             cfg->maxRad,</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>                             2,</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>                             slit_edges ),</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>                             <span class="stringliteral">"could not carry out sinfo_new_c_bezier_interpolate_image"</span></div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>                             <span class="stringliteral">" on dithered frame"</span> );</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>         sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>         sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>         sinfo_free_imagelist(&iCube);</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>         sinfo_free_imagelist(&jCube);</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         sinfo_free_image(&lookup->X);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         sinfo_free_image(&lookup->Y);</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         sinfo_free_image(&lookup->Z);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>         sinfo_free_image(&lookup->hX);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>         sinfo_new_destroy_lookup(lookup);</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     }</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">  # correction of distortions</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>     <span class="comment">/* here memory leak */</span></div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     <span class="comment">//sinfo_msg("cfg->warpfixInd=%d",cfg->warpfixInd);</span></div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     <span class="keywordflow">if</span> (cfg->warpfixInd == 1){</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>         <span class="comment">/*#open ASCII file containing the slope parameter and read it*/</span></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>         sinfo_msg(<span class="stringliteral">"Correct object for distortions"</span>);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>         cknull(int_im_shifted=sinfo_new_image_warp_fits(im_obj,</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                         cfg->kernel,</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                         cfg->polyFile),</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                <span class="stringliteral">"could not carry out sinfo_image_warp_fits"</span> );</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>         sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>         im_obj = cpl_image_duplicate(int_im_shifted);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1){</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>             cknull(int_im_dith_shifted=sinfo_new_image_warp_fits(im_dither,</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                             cfg->kernel,</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                             cfg->polyFile),</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>                             <span class="stringliteral">"could not carry out sinfo_image_warp_fits"</span> );</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>             sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>             im_dither = cpl_image_duplicate(int_im_dith_shifted);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>         }</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">  # merge (interleave) both resulting frames</span></div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> <span class="comment">  #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="keywordflow">if</span> (cfg->interInd == 1 && cfg->contains_dither == 1){</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>         <span class="keywordflow">if</span>( pdensity>1) {</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>             sinfo_msg(<span class="stringliteral">"Merge (interleave) frames"</span>);</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>             cknull(im3 = cpl_image_new(cpl_image_get_size_x(im_obj),</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                             cpl_image_get_size_y(im_obj),CPL_TYPE_FLOAT),</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                    <span class="stringliteral">"could not allocate an image"</span> );</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>             cknull(im4=sinfo_new_remove_general_offset( im_obj, im_dither,</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                             im3, cfg->noRows ),</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                    <span class="stringliteral">"sinfo_removeGeneralOffset failed"</span> );</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>             cknull(im5 = sinfo_new_remove_regional_tilt ( im_obj, im4, im3 ),</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>                    <span class="stringliteral">"sinfo_removeRegionalTilt failed"</span> );</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>             cknull(im6 = sinfo_new_remove_column_offset ( im_obj, im5, im3 ),</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>                    <span class="stringliteral">"sinfo_removeColumnOffset failed"</span> );</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>             cknull(im7 = sinfo_new_remove_residual_tilt ( im6, im3 ),</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>                    <span class="stringliteral">"sinfo_removeResidualTilt failed"</span> );</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> </div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>             cknull(im8 = sinfo_new_remove_residual_offset ( im7, im3 ),</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>                    <span class="stringliteral">"sinfo_removeResidualOffset failed"</span>);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>             cknull(im9 = sinfo_sinfo_merge_images(im_obj, im8, im3),</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>                    <span class="stringliteral">"sinfo_mergeImages failed"</span> );</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>             ck0(sinfo_pro_save_ima(im9,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>                             frm_pro_ctg,NULL,plugin_id,config),</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>                 <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>             sinfo_free_image(&im3);</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>             sinfo_free_image(&im4);</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             sinfo_free_image(&im5);</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>             sinfo_free_image(&im6);</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>             sinfo_free_image(&im7);</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>             sinfo_free_image(&im8);</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>             sinfo_free_image(&im9);</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>             sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>             sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>         }</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> <span class="comment">    #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">    # convolve spectra with Gaussian</span></div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">    #---------------------------------------------------------</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->gaussInd == 1 && cfg->interInd == 0) {</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>         sinfo_msg(<span class="stringliteral">"Convolve spectra with Gaussian"</span>);</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>         <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>             cknull(im_conv = sinfo_new_convolve_image_by_gauss ( im_obj, cfg->hw ),</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>                             <span class="stringliteral">"sinfo_convolveImageByGauss failed"</span> );</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> </div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>             ck0(sinfo_pro_save_ima(im_conv,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>                             frm_pro_ctg,NULL,plugin_id,config),</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>                 <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>             sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>             sinfo_free_image(&im_conv);</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>             <span class="keywordflow">if</span> (cfg->contains_dither == 1){</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>                 sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>             }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>         }</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> </div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>         sinfo_msg(<span class="stringliteral">"Add QC LOG"</span>);</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>         <span class="comment">/* add QC-LOG */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>         <span class="comment">/* sinfo_det_ncounts(raw, cfg->qc_thresh_max); */</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMON MEANFLUX"</span>,</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>                         qc->avg_on,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>         <span class="comment">/*    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">                     qc->avg_on,"Average of flux","%g"));*/</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMOFF MEANFLUX"</span>,</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>                         qc->avg_of,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MEANFLUX"</span>,</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>                         qc->avg_di,<span class="stringliteral">"Average of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMON MAXFLUX"</span>,</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>                         qc->max_on,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMOFF MAXFLUX"</span>,</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>                         qc->max_of,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MAXFLUX"</span>,</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>                         qc->max_di,<span class="stringliteral">"Max of flux"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>         ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FRMON NPIXSAT"</span>,</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>                         qc->nsat,</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>                         <span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         update_bad_pixel_map(im_obj);</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FRMDIF MEANSTD"</span>,</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>                         cpl_image_get_mean(im_obj),<span class="stringliteral">"mean of the image"</span>,<span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>                         <span class="stringliteral">"QC FRMDIF STDEV"</span>,</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>                         cpl_image_get_stdev(im_obj),</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>                         <span class="stringliteral">"standard deviation of the image"</span>,</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>                         <span class="stringliteral">"%13.6f"</span>));</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>         ck0(sinfo_pro_save_ima(im_obj,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>                         frm_pro_ctg,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>             <span class="stringliteral">"cannot dump ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>         sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> </div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>         <span class="keywordflow">if</span> (cfg->contains_dither == 1 && cfg->interInd == 0) {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>             <span class="keywordflow">if</span> (strstr(cfg->outName, <span class="stringliteral">".fits"</span> ) != NULL ) {</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>                 snprintf(name_list, MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>                                 sinfo_new_get_rootname(cfg->outName), <span class="stringliteral">"_dith.fits"</span>);</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>                 strcpy(cfg->outName,name_list);</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>                 strcat(cfg->outName,<span class="stringliteral">"_dith"</span>);</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>             }</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>             cpl_free(name_list);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> </div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> </div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>             ck0(sinfo_pro_save_ima(im_dither,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>                             frm_pro_ctg,NULL,plugin_id,config),</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>                 <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> </div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>             <span class="keywordflow">if</span> (cfg->contains_dither == 1) {</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                 sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>             }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>         }</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> </div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>     }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> </div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>     <span class="comment">/* the following generates a valgrind error</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="comment">     but without it 8 bytes are leaked */</span></div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>     sinfo_free_image_array(&im,cfg->nframes);</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> </div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>     <span class="comment">/*AMO: check if those images can be deleted before */</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>     sinfo_free_image(&int_im_shifted);</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>     sinfo_free_image(&int_im);</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>     sinfo_free_image(&im_obj_flat);</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     sinfo_free_image(&im_obj_sub);</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>     sinfo_stack_free(&cfg);</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>     cleanup:</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>     sinfo_free_table(&tbl_slitpos);</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     sinfo_free_table(&tbl_index);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     <span class="keywordflow">if</span>(slit_edges!=NULL) sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>     sinfo_free_image(&flat1_dist);</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>     sinfo_free_image(&flat1);</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     sinfo_free_image(&flat_smooth);</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>     sinfo_free_image(&flat2_dist);</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>     sinfo_free_image(&int_im);</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     sinfo_free_image(&int_im_dith);</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>     sinfo_free_image(&int_im_shifted);</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     sinfo_free_image(&im_dither);</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     sinfo_free_image(&flat2);</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     sinfo_free_image(&im_obj_flat);</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>     sinfo_free_image(&im_obj_sub);</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>     sinfo_free_image(&im_obj);</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>     sinfo_free_image(&mask_im);</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     sinfo_free_image(&im_sky);</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>     sinfo_free_imagelist(&list_object_tmp);</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     sinfo_free_image(&sky_img_flat);</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>     sinfo_free_image(&sky_dist);</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>     sinfo_free_image(&sky_img);</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     sinfo_free_imagelist(&list_sky);</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     <span class="keywordflow">if</span>(im != NULL) sinfo_free_image_array(&im,cfg->nframes);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     sinfo_stack_free(&cfg);</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__prepare__stacked__frames_8h_source.html b/html/sinfo__new__prepare__stacked__frames_8h_source.html
index 71f8d58..9e76771 100644
--- a/html/sinfo__new__prepare__stacked__frames_8h_source.html
+++ b/html/sinfo__new__prepare__stacked__frames_8h_source.html
@@ -2,96 +2,127 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_prepare_stacked_frames.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_prepare_stacked_frames.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_PREPARE_STACKED_FRAMES_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_PREPARE_STACKED_FRAMES_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_prepare_stacked_frames.h,v 1.7 2007/09/21 14:48:10 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * preapare_stacked_frames.h</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment"> sinfo_prepare_stacked_frames</span>
-<a name="l00035"></a>00035 <span class="comment"></span>
-<a name="l00036"></a>00036 <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span>
-<a name="l00037"></a>00037 <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad </span>
-<a name="l00038"></a>00038 <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally, </span>
-<a name="l00039"></a>00039 <span class="comment">  interleaves dithered exposures or convolves a single exposure with a </span>
-<a name="l00040"></a>00040 <span class="comment">  Gaussian, respectively.</span>
-<a name="l00041"></a>00041 <span class="comment"></span>
-<a name="l00042"></a>00042 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment"> */</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*</span>
-<a name="l00046"></a>00046 <span class="comment"> * header files</span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00058"></a>00058 <span class="comment">   Function     :       sinfo_new_prepare_stacked_frames()</span>
-<a name="l00059"></a>00059 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00060"></a>00060 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00061"></a>00061 <span class="comment">   Job          :</span>
-<a name="l00062"></a>00062 <span class="comment"></span>
-<a name="l00063"></a>00063 <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span>
-<a name="l00064"></a>00064 <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad </span>
-<a name="l00065"></a>00065 <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally, </span>
-<a name="l00066"></a>00066 <span class="comment">  interleaves dithered exposures or convolves a single exposure with a </span>
-<a name="l00067"></a>00067 <span class="comment">  Gaussian, respectively.</span>
-<a name="l00068"></a>00068 <span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 <span class="keywordtype">int</span> 
-<a name="l00071"></a>00071 sinfo_new_prepare_stacked_frames (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00072"></a>00072                                   cpl_parameterlist* config, 
-<a name="l00073"></a>00073                                   cpl_frameset* sof, 
-<a name="l00074"></a>00074                                   cpl_frameset* ref_set, 
-<a name="l00075"></a>00075                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,
-<a name="l00076"></a>00076                                   <span class="keyword">const</span> <span class="keywordtype">int</span> frm_ind, 
-<a name="l00077"></a>00077                                   fake* fk) ;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="preprocessor">#endif </span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>
-<a name="l00081"></a>00081 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_prepare_stacked_frames.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_PREPARE_STACKED_FRAMES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_PREPARE_STACKED_FRAMES_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_prepare_stacked_frames.h,v 1.7 2007/09/21 14:48:10 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * preapare_stacked_frames.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> sinfo_prepare_stacked_frames</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally, </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">  interleaves dithered exposures or convolves a single exposure with a </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">  Gaussian, respectively.</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">   Function     :       sinfo_new_prepare_stacked_frames()</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  this handles stacks of input frames, that means it takes a clean mean,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  subtracts the off- from the on-frames, flatfields, corrects for static bad </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">  pixels, corrects for a linear tilt of the spectra if necessary, and finally, </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">  interleaves dithered exposures or convolves a single exposure with a </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">  Gaussian, respectively.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_new_prepare_stacked_frames (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                   cpl_parameterlist* config, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                   cpl_frameset* sof, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                   cpl_frameset* ref_set, </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                                   <span class="keyword">const</span> <span class="keywordtype">int</span> frm_ind, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                                   fake* fk) ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__psf_8c_source.html b/html/sinfo__new__psf_8c_source.html
index 1085d87..27f2eb1 100644
--- a/html/sinfo__new__psf_8c_source.html
+++ b/html/sinfo__new__psf_8c_source.html
@@ -2,2516 +2,2547 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_psf.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_psf.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">     File name    :       sinfo_new_psf.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> sinfo_new_psf.py does the image reconstruction of a set of</span>
-<a name="l00027"></a>00027 <span class="comment"> sky-subtracted, flatfielded,</span>
-<a name="l00028"></a>00028 <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright</span>
-<a name="l00029"></a>00029 <span class="comment"> star with continuum spectrum. The resulting image can be used to determine</span>
-<a name="l00030"></a>00030 <span class="comment"> the PSF</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#define _GNU_SOURCE</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <irplib_strehl.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_new_psf.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_psf_ini.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_psf_ini_by_cpl.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00059"></a>00059 <span class="comment">//Used only for sinfo_propertylist_has</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00061"></a>00061 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment">                                Defines</span>
-<a name="l00063"></a>00063 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064                                                    <span class="comment">//PSO</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define SINFO_MATH_PI   3.1415926535897932384626433832795028841971693993751058</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATH_PI_2 1.5707963267948966192313216916397514420985846996875529</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATH_PI_4 0.7853981633974483096156608458198757210492923498437765</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#define SINFO_STREHL_M1                       8.0  //7.9</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_M2                       1.1  //1.33</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_BOX_SIZE                 64</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_WINDOW                   6</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_SZ                          4</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RSTAR                           32//25</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_R1                          32//25</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_R2                          33//27</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_ERROR_COEFFICIENT    SINFO_MATH_PI * 0.007 / 0.0271</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#ifndef SINFO_STREHL_RAD_CENTRAL</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_RAD_CENTRAL 5</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span>
-<a name="l00084"></a>00084 <span class="comment">//constants for perfect PSF generation</span>
-<a name="l00085"></a>00085 <span class="comment">// Dimension of the support for generating the perfect PFS</span>
-<a name="l00086"></a>00086 <span class="preprocessor">#define SINFO_PSF_DIM   1024//256</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_BLOCKS   63//11</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 <span class="preprocessor">#define SINFO_PSF_BIN    16 // Pixels over "pixel_size"</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_NPOINT 10000// number of encircled energy sampling points</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_BOX_SZ 8</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00093"></a>00093 <span class="comment">                             Function Definitions</span>
-<a name="l00094"></a>00094 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00095"></a>00095 <span class="keyword">static</span> cpl_error_code
-<a name="l00096"></a>00096 sinfo_add_com_psf_qclog(<span class="keyword">const</span> <span class="keywordtype">char</span>* fname,cpl_table** qclog_tbl);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">static</span> cpl_error_code
-<a name="l00100"></a>00100 sinfo_get_star_features(<span class="keyword">const</span> cpl_image* im,
-<a name="l00101"></a>00101                         <span class="keyword">const</span> <span class="keywordtype">int</span> radius,
-<a name="l00102"></a>00102             <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,
-<a name="l00103"></a>00103             <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,
-<a name="l00104"></a>00104                         <span class="keywordtype">double</span>* xc,
-<a name="l00105"></a>00105                         <span class="keywordtype">double</span>* yc,
-<a name="l00106"></a>00106                         <span class="keywordtype">double</span>* pick,
-<a name="l00107"></a>00107                         <span class="keywordtype">double</span>* flux,
-<a name="l00108"></a>00108                         <span class="keywordtype">double</span>* bkg);
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00111"></a>00111 sinfo_find_min_of_four(<span class="keyword">const</span> <span class="keywordtype">double</span> n1,
-<a name="l00112"></a>00112                        <span class="keyword">const</span> <span class="keywordtype">double</span> n2,
-<a name="l00113"></a>00113                        <span class="keyword">const</span> <span class="keywordtype">double</span> n3,
-<a name="l00114"></a>00114                        <span class="keyword">const</span> <span class="keywordtype">double</span> n4);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="keyword">static</span> cpl_table*
-<a name="l00117"></a>00117 sinfo_get_strehl_from_2images(cpl_image* ima1,
-<a name="l00118"></a>00118                              cpl_image* ima2,
-<a name="l00119"></a>00119                              cpl_frame* frm1,
-<a name="l00120"></a>00120                   cpl_frame* frm2);
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00124"></a>00124 sinfo_get_strehl_input1(cpl_frame* frm1,
-<a name="l00125"></a>00125                 <span class="keywordtype">double</span>* dispersion,
-<a name="l00126"></a>00126                 <span class="keywordtype">double</span>* centralWave,
-<a name="l00127"></a>00127                 <span class="keywordtype">double</span>* ws,
-<a name="l00128"></a>00128                 <span class="keywordtype">double</span>* we,
-<a name="l00129"></a>00129                 <span class="keywordtype">double</span>* pscale,
-<a name="l00130"></a>00130                 <span class="keywordtype">double</span>* exptime,
-<a name="l00131"></a>00131             <span class="keywordtype">double</span>* strehl_star_rad,
-<a name="l00132"></a>00132                 <span class="keywordtype">double</span>* strehl_bg_rmin,
-<a name="l00133"></a>00133                 <span class="keywordtype">double</span>* strehl_bg_rmax);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00136"></a>00136 sinfo_get_strehl_input2(cpl_frame* frm1,cpl_frame* frm2,
-<a name="l00137"></a>00137                <span class="keywordtype">double</span>* dispersion,
-<a name="l00138"></a>00138                <span class="keywordtype">double</span>* centralWave,
-<a name="l00139"></a>00139                <span class="keywordtype">double</span>* ws,
-<a name="l00140"></a>00140                <span class="keywordtype">double</span>* we,
-<a name="l00141"></a>00141                <span class="keywordtype">double</span>* pscale1,
-<a name="l00142"></a>00142                <span class="keywordtype">double</span>* pscale2,
-<a name="l00143"></a>00143                <span class="keywordtype">double</span>* exptime1,
-<a name="l00144"></a>00144                <span class="keywordtype">double</span>* exptime2,
-<a name="l00145"></a>00145                <span class="keywordtype">double</span>* strehl_star_rad1,
-<a name="l00146"></a>00146                <span class="keywordtype">double</span>* strehl_star_rad2,
-<a name="l00147"></a>00147                <span class="keywordtype">double</span>* strehl_bg_rmin1,
-<a name="l00148"></a>00148                <span class="keywordtype">double</span>* strehl_bg_rmin2,
-<a name="l00149"></a>00149                <span class="keywordtype">double</span>* strehl_bg_rmax1,
-<a name="l00150"></a>00150                <span class="keywordtype">double</span>* strehl_bg_rmax2);
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00154"></a>00154 sinfo_check_borders(cpl_size* val,<span class="keyword">const</span> <span class="keywordtype">int</span> max,<span class="keyword">const</span> <span class="keywordtype">int</span> thresh);
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00157"></a>00157 sinfo_get_safe_box(<span class="keywordtype">int</span>* llx,
-<a name="l00158"></a>00158                    <span class="keywordtype">int</span>* lly,
-<a name="l00159"></a>00159                    <span class="keywordtype">int</span>* urx,
-<a name="l00160"></a>00160                    <span class="keywordtype">int</span>* ury,
-<a name="l00161"></a>00161                    <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,
-<a name="l00162"></a>00162                    <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,
-<a name="l00163"></a>00163                    <span class="keyword">const</span> <span class="keywordtype">int</span> box,
-<a name="l00164"></a>00164                    <span class="keyword">const</span> <span class="keywordtype">int</span> szx,
-<a name="l00165"></a>00165                    <span class="keyword">const</span> <span class="keywordtype">int</span> szy);
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00168"></a>00168 sinfo_get_strehl_from_slice(cpl_imagelist* cube,
-<a name="l00169"></a>00169                             <span class="keywordtype">double</span> disp,
-<a name="l00170"></a>00170                             <span class="keywordtype">double</span> cWave,
-<a name="l00171"></a>00171                             <span class="keywordtype">double</span> ws,
-<a name="l00172"></a>00172                             <span class="keywordtype">double</span> we,
-<a name="l00173"></a>00173                             <span class="keywordtype">double</span> pscale,
-<a name="l00174"></a>00174                             <span class="keywordtype">double</span> strehl_star_radius,
-<a name="l00175"></a>00175                             <span class="keywordtype">double</span> strehl_bg_r1,
-<a name="l00176"></a>00176                             <span class="keywordtype">double</span> strehl_bg_r2,
-<a name="l00177"></a>00177                             <span class="keywordtype">double</span>* strehl,
-<a name="l00178"></a>00178                             <span class="keywordtype">double</span>* strehl_err);
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="keyword">static</span> cpl_table*
-<a name="l00182"></a>00182 sinfo_get_encircled_energy(cpl_frameset* sof,
-<a name="l00183"></a>00183                            cpl_image* img,
-<a name="l00184"></a>00184                            <span class="keywordtype">double</span>* fwhm_x,
-<a name="l00185"></a>00185                <span class="keywordtype">double</span>* fwhm_y,
-<a name="l00186"></a>00186                            cpl_table** qclog);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00189"></a>00189 sinfo_get_strehl_from_ima(cpl_image* ima,
-<a name="l00190"></a>00190                           cpl_frame* frame);
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00193"></a>00193 sinfo_get_strehl_from_image(cpl_image* img,
-<a name="l00194"></a>00194                             <span class="keywordtype">double</span> ws,
-<a name="l00195"></a>00195                             <span class="keywordtype">double</span> we,
-<a name="l00196"></a>00196                             <span class="keywordtype">double</span> pscale,
-<a name="l00197"></a>00197                             <span class="keywordtype">double</span> strehl_star_radius,
-<a name="l00198"></a>00198                             <span class="keywordtype">double</span> strehl_bg_r1,
-<a name="l00199"></a>00199                             <span class="keywordtype">double</span> strehl_bg_r2,
-<a name="l00200"></a>00200                             <span class="keywordtype">double</span>* strehl,
-<a name="l00201"></a>00201                 <span class="keywordtype">double</span>* strehl_err);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="keyword">static</span> cpl_table*
-<a name="l00206"></a>00206 sinfo_get_strehl_from_cube(cpl_imagelist* cube,
-<a name="l00207"></a>00207                            <span class="keywordtype">char</span>* name,
-<a name="l00208"></a>00208                            cpl_frame* frame);
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00211"></a>00211 sinfo_get_frm12(cpl_frameset* sof,cpl_frame** frm1,cpl_frame** frm2);
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 
-<a name="l00222"></a>00222 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00223"></a>00223 <span class="comment">   Function     :       sinfo_new_psf()</span>
-<a name="l00224"></a>00224 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00225"></a>00225 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span>
-<a name="l00226"></a>00226 <span class="comment">   Job          :</span>
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment"> sinfo_new_psf.py does the image reconstruction of a set of sky-subtracted,</span>
-<a name="l00229"></a>00229 <span class="comment"> flatfielded,</span>
-<a name="l00230"></a>00230 <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright</span>
-<a name="l00231"></a>00231 <span class="comment"> star with continuum spectrum. The resulting image can be used to determine</span>
-<a name="l00232"></a>00232 <span class="comment"> the PSF</span>
-<a name="l00233"></a>00233 <span class="comment"></span>
-<a name="l00234"></a>00234 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="keywordtype">int</span>
-<a name="l00237"></a>00237 sinfo_new_psf (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00238"></a>00238                cpl_parameterlist* config,
-<a name="l00239"></a>00239                cpl_frameset* sof, cpl_frameset* ref_set)
-<a name="l00240"></a>00240 {
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   cpl_imagelist* cube1=NULL;
-<a name="l00243"></a>00243   cpl_imagelist* cube2=NULL;
-<a name="l00244"></a>00244   cpl_image * med_img1=NULL ;
-<a name="l00245"></a>00245   cpl_image * med_img2=NULL ;
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247   cpl_table* ao_performance=NULL;
-<a name="l00248"></a>00248   cpl_table* enc_energy=NULL;
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250   cpl_frame* frm1=NULL;
-<a name="l00251"></a>00251   cpl_frame* frm2=NULL;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253   cpl_table* qclog_tbl=NULL;
-<a name="l00254"></a>00254   cpl_frameset* stk=NULL;
-<a name="l00255"></a>00255   cpl_propertylist* plist =NULL;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   psf_config * cfg =NULL;
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259   <span class="keywordtype">int</span> nsample=0;
-<a name="l00260"></a>00260   <span class="keywordtype">int</span> i = 0;
-<a name="l00261"></a>00261   <span class="keywordtype">int</span> status=0;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265   <span class="keywordtype">int</span> strehl_sw=0;
-<a name="l00266"></a>00266   <span class="keywordtype">int</span> ilx1=0;
-<a name="l00267"></a>00267   <span class="keywordtype">int</span> ily1=0;
-<a name="l00268"></a>00268   <span class="keywordtype">int</span> ilx2=0;
-<a name="l00269"></a>00269   <span class="keywordtype">int</span> ily2=0;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   <span class="keywordtype">float</span> cx1=0;
-<a name="l00272"></a>00272   <span class="keywordtype">float</span> cy1=0;
-<a name="l00273"></a>00273   <span class="keywordtype">float</span> cx2=0;
-<a name="l00274"></a>00274   <span class="keywordtype">float</span> cy2=0;
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276   <span class="keywordtype">double</span> fwhm_x=0;
-<a name="l00277"></a>00277   <span class="keywordtype">double</span> fwhm_y=0;
-<a name="l00278"></a>00278   <span class="keywordtype">double</span> lam=0;
-<a name="l00279"></a>00279   <span class="keywordtype">double</span> strehl=0;
-<a name="l00280"></a>00280   <span class="keywordtype">double</span> strehl1=0;
-<a name="l00281"></a>00281   <span class="keywordtype">double</span> strehl2=0;
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283   <span class="keywordtype">char</span> fname1[MAX_NAME_SIZE];
-<a name="l00284"></a>00284   <span class="keywordtype">char</span> fname2[MAX_NAME_SIZE];
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288   <span class="keywordtype">char</span> obs_name1[MAX_NAME_SIZE];
-<a name="l00289"></a>00289   <span class="keywordtype">char</span> hlamp_st=<span class="charliteral">'F'</span>;
-<a name="l00290"></a>00290   <span class="keywordtype">char</span> shut2_st=<span class="charliteral">'F'</span>;
-<a name="l00291"></a>00291   cpl_table* tmp_tbl=NULL;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294   <span class="comment">/*</span>
-<a name="l00295"></a>00295 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00296"></a>00296 <span class="comment">       1) parse the file names and parameters to the psf_config data</span>
-<a name="l00297"></a>00297 <span class="comment">          structure cfg</span>
-<a name="l00298"></a>00298 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00299"></a>00299 <span class="comment">  */</span>
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301   sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);
-<a name="l00302"></a>00302   check_nomsg(stk=cpl_frameset_new());
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304   cknull(cfg = sinfo_parse_cpl_input_psf(sof,&stk),
-<a name="l00305"></a>00305       <span class="stringliteral">"error parsing cpl input"</span>);
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307   <span class="comment">/* TODO the following generate a small leak of 72 bytes */</span>
-<a name="l00308"></a>00308   strehl_sw=sinfo_get_strehl_type(sof);
-<a name="l00309"></a>00309   <span class="keywordflow">if</span>(strehl_sw==0) {
-<a name="l00310"></a>00310     sinfo_msg(<span class="stringliteral">"One target Strehl computation"</span>);
-<a name="l00311"></a>00311     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {
-<a name="l00312"></a>00312       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);
-<a name="l00313"></a>00313       <span class="keywordflow">goto</span> cleanup;
-<a name="l00314"></a>00314     } <span class="keywordflow">else</span> {
-<a name="l00315"></a>00315       strcpy(fname1,cfg->inFrame);
-<a name="l00316"></a>00316     }
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {
-<a name="l00319"></a>00319       frm1 = cpl_frameset_find(sof,PRO_COADD_PSF);
-<a name="l00320"></a>00320     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {
-<a name="l00321"></a>00321       frm1 = cpl_frameset_find(sof,PRO_OBS_PSF);
-<a name="l00322"></a>00322     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {
-<a name="l00323"></a>00323       frm1 = cpl_frameset_find(sof,PRO_COADD_STD);
-<a name="l00324"></a>00324     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {
-<a name="l00325"></a>00325       frm1 = cpl_frameset_find(sof,PRO_OBS_STD);
-<a name="l00326"></a>00326     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {
-<a name="l00327"></a>00327       frm1 = cpl_frameset_find(sof,PRO_COADD_OBJ);
-<a name="l00328"></a>00328     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {
-<a name="l00329"></a>00329       frm1 = cpl_frameset_find(sof,PRO_OBS_OBJ);
-<a name="l00330"></a>00330     } <span class="keywordflow">else</span> {
-<a name="l00331"></a>00331       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s  or %s or %s  or %s or %s  or %s not found!"</span>,
-<a name="l00332"></a>00332               PRO_COADD_PSF,PRO_OBS_PSF,
-<a name="l00333"></a>00333               PRO_COADD_STD,PRO_OBS_STD,
-<a name="l00334"></a>00334               PRO_COADD_OBJ,PRO_OBS_OBJ);
-<a name="l00335"></a>00335       <span class="keywordflow">goto</span> cleanup;
-<a name="l00336"></a>00336     }
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338     sinfo_get_obsname(frm1,obs_name1);
-<a name="l00339"></a>00339     check_nomsg(hlamp_st=sinfo_get_keyvalue_bool(frm1,KEY_NAME_LAMP_HALO));
-<a name="l00340"></a>00340     check_nomsg(shut2_st=sinfo_get_keyvalue_bool(frm1,KEY_NAME_SHUT2_ST));
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     check_nomsg(cube1 = cpl_imagelist_load(fname1,CPL_TYPE_FLOAT,0));
-<a name="l00344"></a>00344     cknull(med_img1=sinfo_new_median_cube(cube1),
-<a name="l00345"></a>00345       <span class="stringliteral">" could not do sinfo_medianCube()"</span>);
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347     check_nomsg(ilx1=cpl_image_get_size_x(med_img1));
-<a name="l00348"></a>00348     check_nomsg(ily1=cpl_image_get_size_y(med_img1));
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350     cx1 = ilx1 / 2. + 0.5;
-<a name="l00351"></a>00351     cy1 = ily1 / 2. + 0.5;
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353     cknull(ao_performance=sinfo_get_strehl_from_cube(cube1,fname1,frm1),
-<a name="l00354"></a>00354        <span class="stringliteral">"error computing strehl"</span>);
-<a name="l00355"></a>00355     strehl=sinfo_get_strehl_from_ima(med_img1,frm1);
-<a name="l00356"></a>00356     sinfo_free_imagelist(&cube1);
-<a name="l00357"></a>00357   } <span class="keywordflow">else</span> {
-<a name="l00358"></a>00358     sinfo_msg(<span class="stringliteral">"Two target Strehl computation"</span>);
-<a name="l00359"></a>00359     sinfo_get_frm12(sof,&frm1,&frm2);
-<a name="l00360"></a>00360     strcpy(fname1,cpl_frame_get_filename(frm1));
-<a name="l00361"></a>00361     strcpy(fname2,cpl_frame_get_filename(frm2));
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363     check_nomsg(cube1 = cpl_imagelist_load(fname1,CPL_TYPE_FLOAT,0));
-<a name="l00364"></a>00364     check_nomsg(cube2 = cpl_imagelist_load(fname2,CPL_TYPE_FLOAT,0));
-<a name="l00365"></a>00365     cknull(med_img1=sinfo_new_median_cube(cube1),<span class="stringliteral">"Computing median on cube"</span>);
-<a name="l00366"></a>00366     cknull(med_img2=sinfo_new_median_cube(cube2),<span class="stringliteral">"Computing median on cube"</span>);
-<a name="l00367"></a>00367     check_nomsg(cpl_image_save(med_img1,<span class="stringliteral">"med_img1.fits"</span>,CPL_BPP_IEEE_FLOAT,
-<a name="l00368"></a>00368                    NULL,CPL_IO_DEFAULT));
-<a name="l00369"></a>00369     check_nomsg(cpl_image_save(med_img2,<span class="stringliteral">"med_img2.fits"</span>,CPL_BPP_IEEE_FLOAT,
-<a name="l00370"></a>00370                    NULL,CPL_IO_DEFAULT));
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373     check_nomsg(ilx1=cpl_image_get_size_x(med_img1));
-<a name="l00374"></a>00374     check_nomsg(ily1=cpl_image_get_size_y(med_img1));
-<a name="l00375"></a>00375     check_nomsg(ilx2=cpl_image_get_size_x(med_img2));
-<a name="l00376"></a>00376     check_nomsg(ily2=cpl_image_get_size_y(med_img2));
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     cx1 = ilx1 / 2. + 0.5;
-<a name="l00379"></a>00379     cy1 = ily1 / 2. + 0.5;
-<a name="l00380"></a>00380     cx2 = ilx2 / 2. + 0.5;
-<a name="l00381"></a>00381     cy2 = ily2 / 2. + 0.5;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384     sinfo_free_imagelist(&cube1);
-<a name="l00385"></a>00385     sinfo_free_imagelist(&cube2);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387     cknull(tmp_tbl=sinfo_get_strehl_from_2images(med_img1,med_img2,frm1,frm2),
-<a name="l00388"></a>00388        <span class="stringliteral">"Computing strehl"</span>);
-<a name="l00389"></a>00389     check_nomsg(strehl=cpl_table_get_double(tmp_tbl,<span class="stringliteral">"strehl"</span>,0,&status));
-<a name="l00390"></a>00390     sinfo_free_table(&tmp_tbl);
-<a name="l00391"></a>00391     strehl1=sinfo_get_strehl_from_ima(med_img1,frm1);
-<a name="l00392"></a>00392     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Strehl on 1st image=%f"</span>,strehl);
-<a name="l00393"></a>00393     strehl2=sinfo_get_strehl_from_ima(med_img2,frm2);
-<a name="l00394"></a>00394     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Strehl on 2nd image=%f"</span>,strehl);
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00397"></a>00397     check_nomsg(sinfo_add_com_psf_qclog(fname1,&qclog_tbl));
-<a name="l00398"></a>00398     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(strehl1)) strehl1=-100.;
-<a name="l00399"></a>00399     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL025"</span>,strehl1,
-<a name="l00400"></a>00400             <span class="stringliteral">"STREHL 25 mas"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00401"></a>00401     ck0(sinfo_pro_save_ima(med_img1,ref_set,sof,PSF_MED_CUB_025_FILENAME,
-<a name="l00402"></a>00402                PRO_MED_COADD_PSF,qclog_tbl,plugin_id,config),
-<a name="l00403"></a>00403     <span class="stringliteral">"cannot save ima %s"</span>, PSF_MED_CUB_100_FILENAME);
-<a name="l00404"></a>00404     sinfo_free_table(&qclog_tbl);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00408"></a>00408     check_nomsg(sinfo_add_com_psf_qclog(fname2,&qclog_tbl));
-<a name="l00409"></a>00409     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(strehl2)) strehl2=-100.;
-<a name="l00410"></a>00410     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL100"</span>,strehl2,
-<a name="l00411"></a>00411             <span class="stringliteral">"STREHL 100 mas"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(strehl)) strehl=-100.;
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL"</span>,strehl,
-<a name="l00416"></a>00416             <span class="stringliteral">"STREHL from both pixel scale images"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00417"></a>00417     ck0(sinfo_pro_save_ima(med_img2,ref_set,sof,PSF_MED_CUB_100_FILENAME,
-<a name="l00418"></a>00418                PRO_MED_COADD_PSF,qclog_tbl,plugin_id,config),
-<a name="l00419"></a>00419     <span class="stringliteral">"cannot save ima %s"</span>, PSF_MED_CUB_100_FILENAME);
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421     sinfo_free_table(&qclog_tbl);
-<a name="l00422"></a>00422     sinfo_free_image(&med_img2);
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424   }
-<a name="l00425"></a>00425   <span class="comment">/* STREHL computation */</span>
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427   check_nomsg(nsample=cpl_table_get_nrow(ao_performance));
-<a name="l00428"></a>00428   cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00429"></a>00429   check_nomsg(sinfo_add_com_psf_qclog(fname1,&qclog_tbl));
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431   <span class="keywordflow">if</span>(strehl_sw==0) {
-<a name="l00432"></a>00432     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(strehl)) strehl=-100.;
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL"</span>,strehl,
-<a name="l00435"></a>00435             <span class="stringliteral">"STREHL from image"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437   }
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439   check_nomsg(strehl=cpl_table_get_column_median(ao_performance,<span class="stringliteral">"strehl"</span>));
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL MED"</span>,strehl,
-<a name="l00442"></a>00442             <span class="stringliteral">"STREHL MEDIAN"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444   check_nomsg(strehl=cpl_table_get_column_mean(ao_performance,<span class="stringliteral">"strehl"</span>));
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL AVG"</span>,strehl,
-<a name="l00447"></a>00447             <span class="stringliteral">"STREHL AVERAGE"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00448"></a>00448   <span class="comment">/*</span>
-<a name="l00449"></a>00449 <span class="comment">  strehl=sinfo_get_strehl_from_ima(med_img1,frm1);</span>
-<a name="l00450"></a>00450 <span class="comment"></span>
-<a name="l00451"></a>00451 <span class="comment">  ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC STREHL AVG",strehl,</span>
-<a name="l00452"></a>00452 <span class="comment">            "STREHL AVERAGE","%f"));</span>
-<a name="l00453"></a>00453 <span class="comment">  */</span>
-<a name="l00454"></a>00454   <span class="keywordflow">for</span>(i=1;i<nsample;i++) {
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456     check_nomsg(strehl=cpl_table_get_double(ao_performance,<span class="stringliteral">"strehl"</span>,
-<a name="l00457"></a>00457                                             i,&status));
-<a name="l00458"></a>00458     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(strehl)) strehl=-100.;
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC STREHL"</span>,i);
-<a name="l00461"></a>00461     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,strehl,<span class="stringliteral">"STREHL"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463     check_nomsg(lam=cpl_table_get_double(ao_performance,<span class="stringliteral">"wavelength"</span>,
-<a name="l00464"></a>00464                                          i,&status));
-<a name="l00465"></a>00465     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC LAMBDA"</span>,i);
-<a name="l00466"></a>00466     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,lam,
-<a name="l00467"></a>00467                                      <span class="stringliteral">"WAVELENGTH"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469   }
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471   check_nomsg(strehl=cpl_table_get_column_median(ao_performance,
-<a name="l00472"></a>00472                                                  <span class="stringliteral">"strehl_error"</span>));
-<a name="l00473"></a>00473   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL MEDERR"</span>,strehl,
-<a name="l00474"></a>00474                                    <span class="stringliteral">"STREHL ERROR MEDIAN"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00475"></a>00475   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"OBS NAME"</span>,obs_name1,
-<a name="l00476"></a>00476                                    <span class="stringliteral">"OB name"</span>,<span class="stringliteral">"%s"</span>));
-<a name="l00477"></a>00477   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_LAMP_HALO,hlamp_st,
-<a name="l00478"></a>00478                                   KEY_NAME_LAMP_HALO,<span class="stringliteral">"%d"</span>));
-<a name="l00479"></a>00479   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_SHUT2_ST,shut2_st,
-<a name="l00480"></a>00480                                   KEY_NAME_SHUT2_ST,<span class="stringliteral">"%d"</span>));
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482   ck0(sinfo_pro_save_tbl(ao_performance,ref_set,sof,
-<a name="l00483"></a>00483                   PSF_AO_PERFORMANCE_OUT_FILENAME,
-<a name="l00484"></a>00484              PRO_AO_PERFORMANCE,qclog_tbl,plugin_id,config),
-<a name="l00485"></a>00485     <span class="stringliteral">"cannot save tbl %s"</span>, PSF_AO_PERFORMANCE_OUT_FILENAME);
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487   sinfo_free_table(&qclog_tbl);
-<a name="l00488"></a>00488   sinfo_free_table(&ao_performance);
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490   <span class="comment">/* Encircled energy & FWHM computation */</span>
-<a name="l00491"></a>00491   cknull_nomsg(qclog_tbl=sinfo_qclog_init());
-<a name="l00492"></a>00492   cknull(enc_energy=sinfo_get_encircled_energy(sof,
-<a name="l00493"></a>00493                            med_img1,
-<a name="l00494"></a>00494                            &fwhm_x,
-<a name="l00495"></a>00495                            &fwhm_y,
-<a name="l00496"></a>00496                            &qclog_tbl),
-<a name="l00497"></a>00497            <span class="stringliteral">"Computing encircled energy"</span>);
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499   ck0(sinfo_pro_save_tbl(enc_energy,ref_set,sof,PSF_ENC_ENERGY_OUT_FILENAME,
-<a name="l00500"></a>00500              PRO_ENC_ENERGY,qclog_tbl,plugin_id,config),
-<a name="l00501"></a>00501       <span class="stringliteral">"cannot save tbl %s"</span>, PSF_ENC_ENERGY_OUT_FILENAME);
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503   sinfo_free_table(&qclog_tbl);
-<a name="l00504"></a>00504   sinfo_free_table(&enc_energy);
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506   <span class="comment">/* QC log */</span>
-<a name="l00507"></a>00507   cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00508"></a>00508   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMX"</span>,fwhm_x,
-<a name="l00509"></a>00509                                    <span class="stringliteral">"QC FWHM X"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00510"></a>00510   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMY"</span>,fwhm_y,
-<a name="l00511"></a>00511                                    <span class="stringliteral">"QC FWHM Y"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00512"></a>00512   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_LAMP_HALO,
-<a name="l00513"></a>00513                                  hlamp_st,KEY_NAME_LAMP_HALO,<span class="stringliteral">"%d"</span>));
-<a name="l00514"></a>00514   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_SHUT2_ST,shut2_st,
-<a name="l00515"></a>00515                                  KEY_NAME_SHUT2_ST,<span class="stringliteral">"%d"</span>));
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517   ck0(sinfo_pro_save_ima(med_img1,ref_set,sof,cfg->outName,PRO_PSF,
-<a name="l00518"></a>00518              qclog_tbl,plugin_id,config),
-<a name="l00519"></a>00519       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521   sinfo_free_table(&qclog_tbl);
-<a name="l00522"></a>00522   sinfo_new_set_wcs_image(med_img1,cfg->outName,cx1, cy1);
-<a name="l00523"></a>00523   sinfo_free_image(&med_img1);
-<a name="l00524"></a>00524   sinfo_free_frameset(&stk);
-<a name="l00525"></a>00525   sinfo_free_psf(&cfg);
-<a name="l00526"></a>00526   <span class="keywordflow">return</span> 0;
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528  cleanup:
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530   sinfo_free_table(&qclog_tbl);
-<a name="l00531"></a>00531   sinfo_free_imagelist(&cube2);
-<a name="l00532"></a>00532   sinfo_free_imagelist(&cube1);
-<a name="l00533"></a>00533   sinfo_free_table(&enc_energy);
-<a name="l00534"></a>00534   sinfo_free_image(&med_img1);
-<a name="l00535"></a>00535   sinfo_free_table(&ao_performance);
-<a name="l00536"></a>00536   sinfo_free_propertylist(&plist) ;
-<a name="l00537"></a>00537   sinfo_free_psf(&cfg);
-<a name="l00538"></a>00538   sinfo_free_frameset(&stk);
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540   <span class="keywordflow">return</span> -1 ;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542 }
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547 <span class="keyword">static</span> cpl_error_code
-<a name="l00548"></a>00548 sinfo_add_com_psf_qclog(<span class="keyword">const</span> <span class="keywordtype">char</span>* fname,cpl_table** qclog_tbl)
-<a name="l00549"></a>00549 {
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551   cpl_propertylist* plist=NULL;
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553   <span class="comment">/* QC log */</span>
-<a name="l00554"></a>00554   cknull(plist = cpl_propertylist_load(fname, 0),
-<a name="l00555"></a>00555      <span class="stringliteral">"getting header from reference ima frame %s"</span>,fname);
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LOOP_STATE)) {
-<a name="l00558"></a>00558     sinfo_qclog_add_string(*qclog_tbl,KEY_NAME_LOOP_STATE,
-<a name="l00559"></a>00559                       cpl_propertylist_get_string(plist,KEY_NAME_LOOP_STATE),
-<a name="l00560"></a>00560                       KEY_HELP_LOOP_STATE,<span class="stringliteral">"%s"</span>);
-<a name="l00561"></a>00561   }
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LOOP_LGS)) {
-<a name="l00566"></a>00566     sinfo_qclog_add_int(*qclog_tbl,KEY_NAME_LOOP_LGS,
-<a name="l00567"></a>00567                       cpl_propertylist_get_int(plist,KEY_NAME_LOOP_LGS),
-<a name="l00568"></a>00568                       KEY_HELP_LOOP_LGS,<span class="stringliteral">"%d"</span>);
-<a name="l00569"></a>00569   }
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_INS1_MODE)) {
-<a name="l00573"></a>00573     sinfo_qclog_add_string(*qclog_tbl,KEY_NAME_INS1_MODE,
-<a name="l00574"></a>00574                       cpl_propertylist_get_string(plist,KEY_NAME_INS1_MODE),
-<a name="l00575"></a>00575                       KEY_HELP_INS1_MODE,<span class="stringliteral">"%s"</span>);
-<a name="l00576"></a>00576   }
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579  cleanup:
-<a name="l00580"></a>00580   sinfo_free_propertylist(&plist);
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00583"></a>00583     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00584"></a>00584   } <span class="keywordflow">else</span> {
-<a name="l00585"></a>00585     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00586"></a>00586   }
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589 }
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00592"></a>00592 sinfo_get_strehl_from_image(cpl_image* img,
-<a name="l00593"></a>00593                             <span class="keywordtype">double</span> ws,
-<a name="l00594"></a>00594                             <span class="keywordtype">double</span> we,
-<a name="l00595"></a>00595                             <span class="keywordtype">double</span> pscale,
-<a name="l00596"></a>00596                             <span class="keywordtype">double</span> strehl_star_radius,
-<a name="l00597"></a>00597                             <span class="keywordtype">double</span> strehl_bg_r1,
-<a name="l00598"></a>00598                             <span class="keywordtype">double</span> strehl_bg_r2,
-<a name="l00599"></a>00599                             <span class="keywordtype">double</span>* strehl,
-<a name="l00600"></a>00600                             <span class="keywordtype">double</span>* strehl_err)
-<a name="l00601"></a>00601 {
-<a name="l00602"></a>00602   cpl_errorstate clean_state = cpl_errorstate_get();
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604   cpl_image* img_dup=NULL;
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606   <span class="keywordtype">double</span> dlam=0.;
-<a name="l00607"></a>00607   <span class="keywordtype">double</span> lam=0.;
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609   <span class="keywordtype">double</span> max_ima_cx=0.;
-<a name="l00610"></a>00610   <span class="keywordtype">double</span> max_ima_cy=0.;
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612   <span class="keywordtype">double</span> psf_peak=0.;
-<a name="l00613"></a>00613   <span class="keywordtype">double</span> psf_flux=0.;
-<a name="l00614"></a>00614   <span class="keywordtype">double</span> bkg_noise=0.;
-<a name="l00615"></a>00615   <span class="keywordtype">double</span> star_bkg=0.;
-<a name="l00616"></a>00616   <span class="keywordtype">double</span> star_peak=0.;
-<a name="l00617"></a>00617   <span class="keywordtype">double</span> star_flux=0.;
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619   cpl_size max_ima_x=0;
-<a name="l00620"></a>00620   cpl_size max_ima_y=0;
-<a name="l00621"></a>00621   <span class="keywordtype">int</span> wllx=0;
-<a name="l00622"></a>00622   <span class="keywordtype">int</span> wlly=0;
-<a name="l00623"></a>00623   <span class="keywordtype">int</span> wurx=0;
-<a name="l00624"></a>00624   <span class="keywordtype">int</span> wury=0;
-<a name="l00625"></a>00625   <span class="keywordtype">int</span> ima_szx=0;
-<a name="l00626"></a>00626   <span class="keywordtype">int</span> ima_szy=0;
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629   lam = (double)0.5*(ws+we);
-<a name="l00630"></a>00630   dlam=we-ws;
-<a name="l00631"></a>00631   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ws=%f we=%f dl=%f"</span>,ws,we,dlam);
-<a name="l00632"></a>00632   check_nomsg(img_dup=cpl_image_duplicate(img));
-<a name="l00633"></a>00633   sinfo_clean_nan(&img_dup);
-<a name="l00634"></a>00634   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));
-<a name="l00635"></a>00635   sinfo_free_image(&img_dup);
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637   check_nomsg(ima_szx=cpl_image_get_size_x(img));
-<a name="l00638"></a>00638   check_nomsg(ima_szy=cpl_image_get_size_y(img));
-<a name="l00639"></a>00639   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);
-<a name="l00640"></a>00640   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);
-<a name="l00641"></a>00641   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,
-<a name="l00642"></a>00642   ima_szx,ima_szy);
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644   <span class="comment">//cpl_image_get_maxpos_window(img,wllx,wlly,wurx,wury,&max_ima_x,&max_ima_y);</span>
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,
-<a name="l00647"></a>00647                                                          wurx,wury));
-<a name="l00648"></a>00648   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,
-<a name="l00649"></a>00649   wurx,wury));
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652   <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_strehl_compute_one(img,
-<a name="l00653"></a>00653                         SINFO_STREHL_M1,
-<a name="l00654"></a>00654                         SINFO_STREHL_M2,
-<a name="l00655"></a>00655                         lam,
-<a name="l00656"></a>00656                         dlam,
-<a name="l00657"></a>00657                         pscale,
-<a name="l00658"></a>00658                         max_ima_x,
-<a name="l00659"></a>00659                         max_ima_y,
-<a name="l00660"></a>00660                         strehl_star_radius,
-<a name="l00661"></a>00661                         strehl_bg_r1,
-<a name="l00662"></a>00662                         strehl_bg_r2,
-<a name="l00663"></a>00663                         SINFO_STREHL_BOX_SIZE,
-<a name="l00664"></a>00664                         strehl,
-<a name="l00665"></a>00665                         strehl_err,
-<a name="l00666"></a>00666                         &star_bkg,
-<a name="l00667"></a>00667                         &star_peak,
-<a name="l00668"></a>00668                         &star_flux,
-<a name="l00669"></a>00669                         &psf_peak,
-<a name="l00670"></a>00670                         &psf_flux,
-<a name="l00671"></a>00671                         &bkg_noise)) {
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674     *strehl=-1;
-<a name="l00675"></a>00675     *strehl_err=0;
-<a name="l00676"></a>00676     irplib_error_recover(clean_state,<span class="stringliteral">"Problem computing strehl"</span>);
-<a name="l00677"></a>00677 
-<a name="l00678"></a>00678   }
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680   <span class="keywordflow">return</span> 0;
-<a name="l00681"></a>00681 
-<a name="l00682"></a>00682  cleanup:
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684   <span class="keywordflow">return</span> -1;
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686 }
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691 
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00694"></a>00694 sinfo_get_strehl_from_slice(cpl_imagelist* cube,
-<a name="l00695"></a>00695                             <span class="keywordtype">double</span> disp,
-<a name="l00696"></a>00696                             <span class="keywordtype">double</span> cWave,
-<a name="l00697"></a>00697                             <span class="keywordtype">double</span> ws,
-<a name="l00698"></a>00698                             <span class="keywordtype">double</span> we,
-<a name="l00699"></a>00699                             <span class="keywordtype">double</span> pscale,
-<a name="l00700"></a>00700                             <span class="keywordtype">double</span> strehl_star_radius,
-<a name="l00701"></a>00701                             <span class="keywordtype">double</span> strehl_bg_r1,
-<a name="l00702"></a>00702                             <span class="keywordtype">double</span> strehl_bg_r2,
-<a name="l00703"></a>00703                             <span class="keywordtype">double</span>* strehl,
-<a name="l00704"></a>00704                             <span class="keywordtype">double</span>* strehl_err)
-<a name="l00705"></a>00705 {
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708   cpl_errorstate clean_state = cpl_errorstate_get();
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711   cpl_image* img_dup=NULL;
-<a name="l00712"></a>00712   cpl_image* img=NULL;
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714   <span class="keywordtype">double</span> dlam=0.;
-<a name="l00715"></a>00715   <span class="keywordtype">double</span> lam=0.;
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717   <span class="keywordtype">double</span> max_ima_cx=0.;
-<a name="l00718"></a>00718   <span class="keywordtype">double</span> max_ima_cy=0.;
-<a name="l00719"></a>00719   <span class="keywordtype">double</span> psf_peak=0.;
-<a name="l00720"></a>00720   <span class="keywordtype">double</span> psf_flux=0.;
-<a name="l00721"></a>00721   <span class="keywordtype">double</span> bkg_noise=0.;
-<a name="l00722"></a>00722   <span class="keywordtype">double</span> star_bkg=0.;
-<a name="l00723"></a>00723   <span class="keywordtype">double</span> star_peak=0.;
-<a name="l00724"></a>00724   <span class="keywordtype">double</span> star_flux=0.;
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726   cpl_size max_ima_x=0;
-<a name="l00727"></a>00727   cpl_size max_ima_y=0;
-<a name="l00728"></a>00728   <span class="keywordtype">int</span> wllx=0;
-<a name="l00729"></a>00729   <span class="keywordtype">int</span> wlly=0;
-<a name="l00730"></a>00730   <span class="keywordtype">int</span> wurx=0;
-<a name="l00731"></a>00731   <span class="keywordtype">int</span> wury=0;
-<a name="l00732"></a>00732   <span class="keywordtype">int</span> ima_szx=0;
-<a name="l00733"></a>00733   <span class="keywordtype">int</span> ima_szy=0;
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736   lam = (double)0.5*(ws+we);
-<a name="l00737"></a>00737   dlam=we-ws;
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740   img=sinfo_new_average_cube_to_image_between_waves(cube,disp,cWave,ws,we);
-<a name="l00741"></a>00741   check_nomsg(img_dup=cpl_image_duplicate(img));
-<a name="l00742"></a>00742   sinfo_clean_nan(&img_dup);
-<a name="l00743"></a>00743   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));
-<a name="l00744"></a>00744   check_nomsg(cpl_image_delete(img_dup));
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747   check_nomsg(ima_szx=cpl_image_get_size_x(img));
-<a name="l00748"></a>00748   check_nomsg(ima_szy=cpl_image_get_size_y(img));
-<a name="l00749"></a>00749   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);
-<a name="l00750"></a>00750   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752 
-<a name="l00753"></a>00753   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,
-<a name="l00754"></a>00754                                ima_szx,ima_szy);
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756   <span class="comment">/*</span>
-<a name="l00757"></a>00757 <span class="comment">  cpl_image_get_maxpos_window(img,wllx,wlly,wurx,wury,&max_ima_x,&max_ima_y);</span>
-<a name="l00758"></a>00758 <span class="comment">   */</span>
-<a name="l00759"></a>00759   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,
-<a name="l00760"></a>00760                                                          wurx,wury));
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,
-<a name="l00765"></a>00765                                                          wurx,wury));
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769   <span class="keywordflow">if</span>(CPL_ERROR_NONE != irplib_strehl_mark_bad_and_compute(img,
-<a name="l00770"></a>00770                                              SINFO_STREHL_M1,
-<a name="l00771"></a>00771                                              SINFO_STREHL_M2,
-<a name="l00772"></a>00772                                              lam,
-<a name="l00773"></a>00773                                              dlam,
-<a name="l00774"></a>00774                                              pscale,
-<a name="l00775"></a>00775                                              SINFO_STREHL_BOX_SIZE,
-<a name="l00776"></a>00776                                              max_ima_x,
-<a name="l00777"></a>00777                                              max_ima_y,
-<a name="l00778"></a>00778                                              strehl_star_radius,
-<a name="l00779"></a>00779                                              strehl_bg_r1,
-<a name="l00780"></a>00780                                              strehl_bg_r2,
-<a name="l00781"></a>00781                                              NOISE_HSIZE,
-<a name="l00782"></a>00782                                              NOISE_NSAMPLES,
-<a name="l00783"></a>00783                                              strehl,
-<a name="l00784"></a>00784                                              strehl_err,
-<a name="l00785"></a>00785                                              &star_bkg,
-<a name="l00786"></a>00786                                              &star_peak,
-<a name="l00787"></a>00787                                              &star_flux,
-<a name="l00788"></a>00788                                              &psf_peak,
-<a name="l00789"></a>00789                                              &psf_flux,
-<a name="l00790"></a>00790                                              &bkg_noise)) {
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793      *strehl=-1;
-<a name="l00794"></a>00794      *strehl_err=0;
-<a name="l00795"></a>00795       irplib_error_recover(clean_state,<span class="stringliteral">"Problem computing strehl"</span>);
-<a name="l00796"></a>00796 
-<a name="l00797"></a>00797   }
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799   <span class="comment">/*</span>
-<a name="l00800"></a>00800 <span class="comment">  cpl_msg_info(__func__,"stehl=%f err=%f star_bkg=%f star_peak=%f star_flux=%f",</span>
-<a name="l00801"></a>00801 <span class="comment">                          *strehl,*strehl_err,star_bkg,star_peak,star_flux);</span>
-<a name="l00802"></a>00802 <span class="comment">  cpl_msg_info(__func__,"psf_peak=%f psf_flux=%f bkg_noise=%f",</span>
-<a name="l00803"></a>00803 <span class="comment">                         psf_peak,psf_flux,bkg_noise);</span>
-<a name="l00804"></a>00804 <span class="comment">  */</span>
-<a name="l00805"></a>00805   sinfo_free_image(&img);
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808   <span class="keywordflow">return</span> 0;
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810  cleanup:
-<a name="l00811"></a>00811   <span class="keywordflow">return</span> -1;
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813 }
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815 
-<a name="l00816"></a>00816 
-<a name="l00817"></a>00817 cpl_table* sinfo_get_encircled_energy(cpl_frameset* sof,
-<a name="l00818"></a>00818                                       cpl_image* img,
-<a name="l00819"></a>00819                                       <span class="keywordtype">double</span>* fwhm_x,
-<a name="l00820"></a>00820                                       <span class="keywordtype">double</span>* fwhm_y,
-<a name="l00821"></a>00821                                       cpl_table** qclog_tbl)
-<a name="l00822"></a>00822 {
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824   cpl_errorstate clean_state = cpl_errorstate_get();
-<a name="l00825"></a>00825 
-<a name="l00826"></a>00826   cpl_image* img_dup=NULL;
-<a name="l00827"></a>00827   cpl_size max_ima_x=0;
-<a name="l00828"></a>00828   cpl_size max_ima_y=0;
-<a name="l00829"></a>00829   <span class="keywordtype">int</span> wllx=0;
-<a name="l00830"></a>00830   <span class="keywordtype">int</span> wlly=0;
-<a name="l00831"></a>00831   <span class="keywordtype">int</span> wurx=0;
-<a name="l00832"></a>00832   <span class="keywordtype">int</span> wury=0;
-<a name="l00833"></a>00833   <span class="keyword">const</span> <span class="keywordtype">double</span> d_mirror = 8.;
-<a name="l00834"></a>00834   <span class="keyword">const</span> <span class="keywordtype">double</span> factor = 180/PI_NUMB*3600.;
-<a name="l00835"></a>00835   <span class="keywordtype">double</span> max_ima_cx=0;
-<a name="l00836"></a>00836   <span class="keywordtype">double</span> max_ima_cy=0;
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838   <span class="keywordtype">double</span> norm=0.;
-<a name="l00839"></a>00839   <span class="keywordtype">double</span> xc=0.;
-<a name="l00840"></a>00840   <span class="keywordtype">double</span> yc=0.;
-<a name="l00841"></a>00841   <span class="keywordtype">double</span> sx=0.;
-<a name="l00842"></a>00842   <span class="keywordtype">double</span> sy=0.;
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844   <span class="keywordtype">double</span> flux=0;
-<a name="l00845"></a>00845   <span class="keywordtype">double</span> flux_max=0;
-<a name="l00846"></a>00846   <span class="keywordtype">double</span> pix_scale=0;
-<a name="l00847"></a>00847   <span class="keywordtype">double</span> lam=0.;
-<a name="l00848"></a>00848   <span class="keywordtype">double</span> pscale=0.;
-<a name="l00849"></a>00849   <span class="keywordtype">int</span> dr_difr=0;
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851   <span class="keywordtype">double</span> r=0.;
-<a name="l00852"></a>00852   <span class="keywordtype">double</span> bkg=0.;
-<a name="l00853"></a>00853   <span class="keywordtype">int</span> i=0;
-<a name="l00854"></a>00854   <span class="keywordtype">int</span> ni=0;
-<a name="l00855"></a>00855   <span class="keywordtype">int</span> ir_difr=0;
-<a name="l00856"></a>00856   <span class="keywordtype">int</span> dr=0;
-<a name="l00857"></a>00857   <span class="keywordtype">int</span> rmin=0;
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859   <span class="keywordtype">char</span> band[MAX_NAME_SIZE];
-<a name="l00860"></a>00860   <span class="keywordtype">char</span> spat_res[MAX_NAME_SIZE];
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862   cpl_table* enc_energy=NULL;
-<a name="l00863"></a>00863   cpl_frame* frame=NULL;
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865   <span class="keywordtype">int</span> ima_szx=0;
-<a name="l00866"></a>00866   <span class="keywordtype">int</span> ima_szy=0;
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {
-<a name="l00871"></a>00871     frame = cpl_frameset_find(sof,PRO_COADD_PSF);
-<a name="l00872"></a>00872   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {
-<a name="l00873"></a>00873     frame = cpl_frameset_find(sof,PRO_OBS_PSF);
-<a name="l00874"></a>00874   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {
-<a name="l00875"></a>00875     frame = cpl_frameset_find(sof,PRO_COADD_STD);
-<a name="l00876"></a>00876   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {
-<a name="l00877"></a>00877     frame = cpl_frameset_find(sof,PRO_OBS_STD);
-<a name="l00878"></a>00878   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {
-<a name="l00879"></a>00879     frame = cpl_frameset_find(sof,PRO_COADD_OBJ);
-<a name="l00880"></a>00880   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {
-<a name="l00881"></a>00881     frame = cpl_frameset_find(sof,PRO_OBS_OBJ);
-<a name="l00882"></a>00882   } <span class="keywordflow">else</span> {
-<a name="l00883"></a>00883     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s  or %s or  %s  or %s or %s  or %s not found!"</span>,
-<a name="l00884"></a>00884             PRO_COADD_PSF,PRO_OBS_PSF,
-<a name="l00885"></a>00885             PRO_COADD_STD, PRO_OBS_STD,
-<a name="l00886"></a>00886             PRO_COADD_OBJ, PRO_OBS_OBJ);
-<a name="l00887"></a>00887     <span class="keywordflow">return</span> NULL;
-<a name="l00888"></a>00888   }
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890   sinfo_get_spatial_res(frame,spat_res);
-<a name="l00891"></a>00891   sinfo_get_band(frame,band);
-<a name="l00892"></a>00892   pix_scale=atof(spat_res);
-<a name="l00893"></a>00893   lam=sinfo_get_wave_cent(band);
-<a name="l00894"></a>00894   <span class="comment">/* factor 2 due to change of detector to 2K */</span>
-<a name="l00895"></a>00895   pscale=0.5*pix_scale;
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899   dr_difr=factor*1.22*lam*1.e-6/d_mirror/pscale;
-<a name="l00900"></a>00900   ir_difr=floor(dr_difr+0.5);
-<a name="l00901"></a>00901   <span class="keywordflow">if</span> (pix_scale==0.025) {
-<a name="l00902"></a>00902     ni=10;
-<a name="l00903"></a>00903     rmin=ir_difr;
-<a name="l00904"></a>00904     dr=rmin;
-<a name="l00905"></a>00905   } <span class="keywordflow">else</span> {
-<a name="l00906"></a>00906     ni=15;
-<a name="l00907"></a>00907     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Reset diffraction limit"</span>);
-<a name="l00908"></a>00908     ir_difr=10;
-<a name="l00909"></a>00909     rmin=1;
-<a name="l00910"></a>00910     dr=2;
-<a name="l00911"></a>00911   }
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913   sinfo_msg(<span class="stringliteral">"Diffraction limit: %d"</span>,ir_difr);
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915   check_nomsg(img_dup=cpl_image_duplicate(img));
-<a name="l00916"></a>00916   sinfo_clean_nan(&img_dup);
-<a name="l00917"></a>00917   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));
-<a name="l00918"></a>00918   sinfo_free_image(&img_dup);
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922   check_nomsg(ima_szx=cpl_image_get_size_x(img));
-<a name="l00923"></a>00923   check_nomsg(ima_szy=cpl_image_get_size_y(img));
-<a name="l00924"></a>00924   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);
-<a name="l00925"></a>00925   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);
-<a name="l00926"></a>00926   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,
-<a name="l00927"></a>00927                                ima_szx,ima_szy);
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,
-<a name="l00930"></a>00930                                                          wurx,wury));
-<a name="l00931"></a>00931   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,
-<a name="l00932"></a>00932                                                          wurx,wury));
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935   cpl_image_save(img, <span class="stringliteral">"bad_image_psf_c.fits"</span>,CPL_BPP_IEEE_DOUBLE, NULL, CPL_IO_CREATE);
-<a name="l00936"></a>00936   sinfo_msg(<span class="stringliteral">"@@@@ sinfo_get_encircled_energy() max_ima_x[%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"] max_ima_y[%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"] psf_sz[%d]"</span>, max_ima_x,
-<a name="l00937"></a>00937           max_ima_y,
-<a name="l00938"></a>00938           SINFO_PSF_SZ);
-<a name="l00939"></a>00939   <span class="keywordflow">if</span>(CPL_ERROR_NONE != cpl_image_fit_gaussian(img,max_ima_x,max_ima_y,
-<a name="l00940"></a>00940                                               SINFO_PSF_SZ,
-<a name="l00941"></a>00941                                               &norm,&xc,&yc,&sx,&sy,
-<a name="l00942"></a>00942                                               fwhm_x,fwhm_y)) {
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945       irplib_error_recover(clean_state,<span class="stringliteral">"Gaussian fit failed"</span>);
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947   }
-<a name="l00948"></a>00948 
-<a name="l00949"></a>00949  check_nomsg(enc_energy = cpl_table_new(ni));
-<a name="l00950"></a>00950  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_pix"</span>, CPL_TYPE_INT));
-<a name="l00951"></a>00951  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_mas"</span>, CPL_TYPE_DOUBLE));
-<a name="l00952"></a>00952  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_dif"</span>, CPL_TYPE_DOUBLE));
-<a name="l00953"></a>00953  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"abs_energy"</span> , CPL_TYPE_DOUBLE));
-<a name="l00954"></a>00954  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"rel_energy"</span> , CPL_TYPE_DOUBLE));
-<a name="l00955"></a>00955  <span class="comment">/* encircled energy computation */</span>
-<a name="l00956"></a>00956  check_nomsg(bkg=irplib_strehl_ring_background(img,max_ima_x,max_ima_y,
-<a name="l00957"></a>00957                     SINFO_BKG_R1,SINFO_BKG_R2,IRPLIB_BG_METHOD_AVER_REJ)) ;
-<a name="l00958"></a>00958  r=rmin+(ni-1)*dr;
-<a name="l00959"></a>00959  check_nomsg(flux_max=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,r,bkg));
-<a name="l00960"></a>00960  r=rmin;
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962  <span class="keywordflow">for</span>(i=0; i<ni; i++)
-<a name="l00963"></a>00963    {
-<a name="l00964"></a>00964      check_nomsg(flux=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,r,bkg));
-<a name="l00965"></a>00965      check_nomsg(cpl_table_set_int(enc_energy,<span class="stringliteral">"r_pix"</span>,i,r));
-<a name="l00966"></a>00966      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"r_mas"</span>,i,r*pscale));
-<a name="l00967"></a>00967      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"r_dif"</span>,i,r/ir_difr));
-<a name="l00968"></a>00968      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"abs_energy"</span>,i,flux));
-<a name="l00969"></a>00969      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"rel_energy"</span>,i,flux/flux_max));
-<a name="l00970"></a>00970      r+=dr;
-<a name="l00971"></a>00971 
-<a name="l00972"></a>00972    }
-<a name="l00973"></a>00973 
-<a name="l00974"></a>00974  <span class="comment">//sinfo_msg("max ima=%d %d\n",max_ima_x,max_ima_y);</span>
-<a name="l00975"></a>00975  <span class="comment">//sinfo_msg("centroid ima=%f %f\n",max_ima_cx,max_ima_cy);</span>
-<a name="l00976"></a>00976  <span class="comment">//sinfo_msg("gauss info=%f %f %f %f %f %f %f\n",</span>
-<a name="l00977"></a>00977  <span class="comment">//                         norm,xc,yc,sx,sy,*fwhm_x,*fwhm_y);</span>
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979  check_nomsg(flux=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,
-<a name="l00980"></a>00980                                           ir_difr,bkg));
-<a name="l00981"></a>00981  ck0_nomsg(sinfo_qclog_add_double(*qclog_tbl,<span class="stringliteral">"QC ENC CORE"</span>,
-<a name="l00982"></a>00982                                   flux/flux_max,
-<a name="l00983"></a>00983                                   <span class="stringliteral">"Encircled energy within PSF core"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985  <span class="keywordflow">return</span> enc_energy;
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987  cleanup:
-<a name="l00988"></a>00988   sinfo_free_image(&img_dup);
-<a name="l00989"></a>00989 
-<a name="l00990"></a>00990   <span class="keywordflow">return</span> NULL;
-<a name="l00991"></a>00991 }
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994 <span class="keyword">static</span> cpl_table* sinfo_get_strehl_from_cube(cpl_imagelist* cube,
-<a name="l00995"></a>00995                                             <span class="keywordtype">char</span>* name,
-<a name="l00996"></a>00996                                             cpl_frame* frame)
-<a name="l00997"></a>00997 {
-<a name="l00998"></a>00998   cpl_table* strehl_tbl=NULL;
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000   <span class="keywordtype">double</span> dispersion=0.;
-<a name="l01001"></a>01001   <span class="keywordtype">double</span> centralWave=0.;
-<a name="l01002"></a>01002   <span class="keywordtype">double</span> wrange=0;
-<a name="l01003"></a>01003   <span class="keywordtype">double</span> wstart=0;
-<a name="l01004"></a>01004   <span class="keywordtype">double</span> wstep=0;
-<a name="l01005"></a>01005   <span class="keywordtype">double</span> wend=0;
-<a name="l01006"></a>01006   <span class="keywordtype">double</span> ws=0;
-<a name="l01007"></a>01007   <span class="keywordtype">double</span> we=0;
-<a name="l01008"></a>01008   <span class="keywordtype">double</span> pix_scale=0;
-<a name="l01009"></a>01009   <span class="keywordtype">double</span> lam=0;
-<a name="l01010"></a>01010   <span class="keywordtype">double</span> dlam=0;
-<a name="l01011"></a>01011   <span class="keywordtype">double</span> pscale = 0;
-<a name="l01012"></a>01012 
-<a name="l01013"></a>01013   <span class="keywordtype">double</span> strehl_star_radius=0;
-<a name="l01014"></a>01014   <span class="keywordtype">double</span> strehl_bg_r1=0;
-<a name="l01015"></a>01015   <span class="keywordtype">double</span> strehl_bg_r2=0;
-<a name="l01016"></a>01016   <span class="keywordtype">double</span> strehl=0;
-<a name="l01017"></a>01017   <span class="keywordtype">double</span> strehl_err=0;
-<a name="l01018"></a>01018   <span class="keywordtype">char</span> spat_res[MAX_NAME_SIZE];
-<a name="l01019"></a>01019   cpl_propertylist* plist=NULL;
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021   <span class="keywordtype">int</span> naxis3=0;
-<a name="l01022"></a>01022   <span class="keywordtype">int</span> nsample=0;
-<a name="l01023"></a>01023   <span class="keywordtype">int</span> i=0;
-<a name="l01024"></a>01024 
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026   sinfo_get_spatial_res(frame,spat_res);
-<a name="l01027"></a>01027   pix_scale=atof(spat_res);
-<a name="l01028"></a>01028   sinfo_msg(<span class="stringliteral">"Camera pixel scale=%f"</span>,pix_scale);
-<a name="l01029"></a>01029   <span class="comment">/* factor 2 due to change of detector to 2K */</span>
-<a name="l01030"></a>01030   pscale=0.5*pix_scale;
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032   strehl_star_radius=SINFO_BKG_R1*pscale;
-<a name="l01033"></a>01033   strehl_bg_r1=SINFO_BKG_R1*pscale;
-<a name="l01034"></a>01034   strehl_bg_r2=SINFO_BKG_R2*pscale;
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036   plist=cpl_propertylist_load(name,0);
-<a name="l01037"></a>01037   dispersion=sinfo_pfits_get_cdelt3(plist);
-<a name="l01038"></a>01038   centralWave=sinfo_pfits_get_crval3(plist);
-<a name="l01039"></a>01039   naxis3=sinfo_pfits_get_naxis3(plist);
-<a name="l01040"></a>01040   sinfo_free_propertylist(&plist);
-<a name="l01041"></a>01041   wrange=dispersion*naxis3;
-<a name="l01042"></a>01042 
-<a name="l01043"></a>01043   wstart = centralWave - (float) (cpl_imagelist_get_size(cube) / 2)*
-<a name="l01044"></a>01044                                  dispersion+dispersion;
-<a name="l01045"></a>01045   wend  =wstart + dispersion * cpl_imagelist_get_size(cube);
-<a name="l01046"></a>01046   wstep=0.025;
-<a name="l01047"></a>01047  <span class="comment">/*</span>
-<a name="l01048"></a>01048 <span class="comment">   note:</span>
-<a name="l01049"></a>01049 <span class="comment">    -wstep as we do not hit the borders where the</span>
-<a name="l01050"></a>01050 <span class="comment">    sinfo_gaussian fit has a problem</span>
-<a name="l01051"></a>01051 <span class="comment">  */</span>
-<a name="l01052"></a>01052   nsample=(int)((wend-wstart-wstep)/wstep);
-<a name="l01053"></a>01053   check_nomsg(strehl_tbl = cpl_table_new(nsample));
-<a name="l01054"></a>01054   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"wavelength"</span>,CPL_TYPE_DOUBLE));
-<a name="l01055"></a>01055   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl"</span>,CPL_TYPE_DOUBLE));
-<a name="l01056"></a>01056   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,CPL_TYPE_DOUBLE));
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058 
-<a name="l01059"></a>01059   <span class="keywordflow">for</span>(i=1;i<nsample;i++) {
-<a name="l01060"></a>01060 
-<a name="l01061"></a>01061     ws=wstart+wstep*i;
-<a name="l01062"></a>01062     we=ws+wstep;
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064     lam = (double)0.5*(ws+we);
-<a name="l01065"></a>01065     dlam=wstep;
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067     check(sinfo_get_strehl_from_slice(cube,
-<a name="l01068"></a>01068                                 dispersion,
-<a name="l01069"></a>01069                                 centralWave,
-<a name="l01070"></a>01070                                 ws,
-<a name="l01071"></a>01071                                 we,
-<a name="l01072"></a>01072                                 pscale,
-<a name="l01073"></a>01073                                 strehl_star_radius,
-<a name="l01074"></a>01074                                 strehl_bg_r1,
-<a name="l01075"></a>01075                                 strehl_bg_r2,
-<a name="l01076"></a>01076                                 &strehl,
-<a name="l01077"></a>01077                       &strehl_err),<span class="stringliteral">"Error computing strehl"</span>);
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079 
-<a name="l01080"></a>01080        <span class="keywordflow">if</span>((isnan(lam) ==0) &&
-<a name="l01081"></a>01081           (isnan(lam) ==0) &&
-<a name="l01082"></a>01082           (isnan(lam) ==0)) {
-<a name="l01083"></a>01083      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"wavelength"</span>,i,lam));
-<a name="l01084"></a>01084      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl"</span>,i,strehl));
-<a name="l01085"></a>01085      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,i,
-<a name="l01086"></a>01086                      strehl_err));
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088        }
-<a name="l01089"></a>01089   }
-<a name="l01090"></a>01090 
-<a name="l01091"></a>01091   <span class="keywordflow">return</span> strehl_tbl;
-<a name="l01092"></a>01092 
-<a name="l01093"></a>01093  cleanup:
-<a name="l01094"></a>01094   <span class="keywordflow">return</span> NULL;
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097 }
-<a name="l01098"></a>01098 
-<a name="l01099"></a>01099 
-<a name="l01100"></a>01100 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l01101"></a>01101 sinfo_get_strehl_from_ima(cpl_image* ima,
-<a name="l01102"></a>01102                                         cpl_frame* frame)
-<a name="l01103"></a>01103 {
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105   <span class="keywordtype">double</span> dispersion=0.;
-<a name="l01106"></a>01106   <span class="keywordtype">double</span> centralWave=0.;
-<a name="l01107"></a>01107   <span class="keywordtype">double</span> wstart=0;
-<a name="l01108"></a>01108   <span class="keywordtype">double</span> wend=0;
-<a name="l01109"></a>01109   <span class="keywordtype">double</span> pscale = 0;
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111   <span class="keywordtype">double</span> strehl_star_radius=0;
-<a name="l01112"></a>01112   <span class="keywordtype">double</span> strehl_bg_r1=0;
-<a name="l01113"></a>01113   <span class="keywordtype">double</span> strehl_bg_r2=0;
-<a name="l01114"></a>01114   <span class="keywordtype">double</span> strehl=0;
-<a name="l01115"></a>01115   <span class="keywordtype">double</span> strehl_err=0;
-<a name="l01116"></a>01116   <span class="keywordtype">double</span> exptime=0;
-<a name="l01117"></a>01117 
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120   ck0_nomsg(sinfo_get_strehl_input1(frame,&dispersion,&centralWave,
-<a name="l01121"></a>01121                                    &wstart,&wend,&pscale,&exptime,
-<a name="l01122"></a>01122                            &strehl_star_radius,&strehl_bg_r1,
-<a name="l01123"></a>01123                     &strehl_bg_r2));
-<a name="l01124"></a>01124 
-<a name="l01125"></a>01125 
-<a name="l01126"></a>01126   check(sinfo_get_strehl_from_image(ima,
-<a name="l01127"></a>01127                                 wstart,
-<a name="l01128"></a>01128                                 wend,
-<a name="l01129"></a>01129                                 pscale,
-<a name="l01130"></a>01130                                 strehl_star_radius,
-<a name="l01131"></a>01131                                 strehl_bg_r1,
-<a name="l01132"></a>01132                                 strehl_bg_r2,
-<a name="l01133"></a>01133                                 &strehl,
-<a name="l01134"></a>01134                 &strehl_err),<span class="stringliteral">"Computing Strehl"</span>);
-<a name="l01135"></a>01135 
-<a name="l01136"></a>01136 
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138 
-<a name="l01139"></a>01139 
-<a name="l01140"></a>01140  cleanup:
-<a name="l01141"></a>01141   <span class="keywordflow">return</span> strehl;
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144 }
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01147"></a>01147 sinfo_get_frm12(cpl_frameset* sof,cpl_frame** frm1,cpl_frame** frm2){
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149   cpl_frameset* obs=NULL;
-<a name="l01150"></a>01150   <span class="keywordtype">int</span> nobs=0;
-<a name="l01151"></a>01151   <span class="keywordtype">float</span> eps=0.0001;
-<a name="l01152"></a>01152   <span class="keywordtype">float</span>* pix_scale=NULL;
-<a name="l01153"></a>01153   <span class="keywordtype">int</span> i=0;
-<a name="l01154"></a>01154   cpl_frame* frame=NULL;
-<a name="l01155"></a>01155 
-<a name="l01156"></a>01156   obs = cpl_frameset_new();
-<a name="l01157"></a>01157   sinfo_contains_frames_kind(sof,obs,PRO_OBS_PSF);
-<a name="l01158"></a>01158   nobs=cpl_frameset_get_size(obs);
-<a name="l01159"></a>01159   <span class="keywordflow">if</span> (nobs < 1) {
-<a name="l01160"></a>01160      sinfo_contains_frames_kind(sof,obs,PRO_OBS_STD);
-<a name="l01161"></a>01161      nobs=cpl_frameset_get_size(obs);
-<a name="l01162"></a>01162   }
-<a name="l01163"></a>01163 
-<a name="l01164"></a>01164   nobs=cpl_frameset_get_size(obs);
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166 
-<a name="l01167"></a>01167   <span class="keywordflow">if</span> (nobs < 1) {
-<a name="l01168"></a>01168      sinfo_contains_frames_kind(sof,obs,PRO_OBS_OBJ);
-<a name="l01169"></a>01169      nobs=cpl_frameset_get_size(obs);
-<a name="l01170"></a>01170   }
-<a name="l01171"></a>01171 
-<a name="l01172"></a>01172   nobs=cpl_frameset_get_size(obs);
-<a name="l01173"></a>01173 
-<a name="l01174"></a>01174   <span class="keywordflow">if</span> (nobs < 1) {
-<a name="l01175"></a>01175     <span class="keywordflow">return</span> -1;
-<a name="l01176"></a>01176   } <span class="keywordflow">else</span> {
-<a name="l01177"></a>01177     pix_scale=cpl_calloc(nobs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01178"></a>01178     <span class="keywordflow">for</span>(i=0;i<nobs;i++) {
-<a name="l01179"></a>01179       frame=cpl_frameset_get_frame(obs,i);
-<a name="l01180"></a>01180       pix_scale[i]=sinfo_pfits_get_pixelscale(
-<a name="l01181"></a>01181                            (<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame));
-<a name="l01182"></a>01182       <span class="keywordflow">if</span>(fabs(pix_scale[i]-0.025)< eps) {
-<a name="l01183"></a>01183         *frm1=cpl_frame_duplicate(frame);
-<a name="l01184"></a>01184       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(pix_scale[i]-0.1) <eps) {
-<a name="l01185"></a>01185         *frm2=cpl_frame_duplicate(frame);
-<a name="l01186"></a>01186       } <span class="keywordflow">else</span> {
-<a name="l01187"></a>01187         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No proper frame found for strehl computation"</span>);
-<a name="l01188"></a>01188     <span class="keywordflow">return</span> -1;
-<a name="l01189"></a>01189       }
-<a name="l01190"></a>01190     }
-<a name="l01191"></a>01191   }
-<a name="l01192"></a>01192   cpl_free(pix_scale);
-<a name="l01193"></a>01193   cpl_frameset_delete(obs);
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195   <span class="keywordflow">return</span> 0;
-<a name="l01196"></a>01196 
-<a name="l01197"></a>01197 }
-<a name="l01198"></a>01198 
-<a name="l01199"></a>01199 
-<a name="l01200"></a>01200 
-<a name="l01201"></a>01201 
-<a name="l01202"></a>01202 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01203"></a>01203 sinfo_get_strehl_input1(cpl_frame* frm,
-<a name="l01204"></a>01204                <span class="keywordtype">double</span>* dispersion,
-<a name="l01205"></a>01205                <span class="keywordtype">double</span>* centralWave,
-<a name="l01206"></a>01206                <span class="keywordtype">double</span>* wstart,
-<a name="l01207"></a>01207                <span class="keywordtype">double</span>* wend,
-<a name="l01208"></a>01208                <span class="keywordtype">double</span>* pscale,
-<a name="l01209"></a>01209                <span class="keywordtype">double</span>* exptime,
-<a name="l01210"></a>01210                <span class="keywordtype">double</span>* strehl_star_rad,
-<a name="l01211"></a>01211                <span class="keywordtype">double</span>* strehl_bg_rmin,
-<a name="l01212"></a>01212                <span class="keywordtype">double</span>* strehl_bg_rmax)
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 {
-<a name="l01215"></a>01215 
-<a name="l01216"></a>01216   cpl_propertylist* plist=NULL;
-<a name="l01217"></a>01217   <span class="keywordtype">char</span> res[MAX_NAME_SIZE];
-<a name="l01218"></a>01218   <span class="keywordtype">double</span> pix_scale=0;
-<a name="l01219"></a>01219   <span class="keywordtype">double</span> wrange=0;
-<a name="l01220"></a>01220   <span class="keywordtype">char</span> fname[MAX_NAME_SIZE];
-<a name="l01221"></a>01221   <span class="keywordtype">int</span> naxis3=0;
-<a name="l01222"></a>01222 
-<a name="l01223"></a>01223   sinfo_get_spatial_res(frm,res);
-<a name="l01224"></a>01224   pix_scale=atof(res);
-<a name="l01225"></a>01225 
-<a name="l01226"></a>01226   <span class="comment">/* factor 2 due to change of detector to 2K</span>
-<a name="l01227"></a>01227 <span class="comment">  *pscale=0.5*pix_scale;</span>
-<a name="l01228"></a>01228 <span class="comment">  */</span>
-<a name="l01229"></a>01229 
-<a name="l01230"></a>01230 
-<a name="l01231"></a>01231   *pscale=pix_scale;
-<a name="l01232"></a>01232 
-<a name="l01233"></a>01233   *strehl_star_rad=SINFO_RSTAR*(*pscale);
-<a name="l01234"></a>01234   *strehl_bg_rmin=SINFO_BKG_R1*(*pscale);
-<a name="l01235"></a>01235   *strehl_bg_rmax=SINFO_BKG_R2*(*pscale);
-<a name="l01236"></a>01236 
-<a name="l01237"></a>01237   strcpy(fname,cpl_frame_get_filename(frm));
-<a name="l01238"></a>01238   check_nomsg(plist=cpl_propertylist_load(fname,0));
-<a name="l01239"></a>01239   check_nomsg(*dispersion=sinfo_pfits_get_cdelt3(plist));
-<a name="l01240"></a>01240   *centralWave=sinfo_pfits_get_crval3(plist);
-<a name="l01241"></a>01241   check_nomsg(naxis3=sinfo_pfits_get_naxis3(plist));
-<a name="l01242"></a>01242   *exptime=sinfo_pfits_get_exp_time(plist);
-<a name="l01243"></a>01243   sinfo_free_propertylist(&plist);
-<a name="l01244"></a>01244 
-<a name="l01245"></a>01245   wrange=(*dispersion)*naxis3;
-<a name="l01246"></a>01246 
-<a name="l01247"></a>01247   *wstart = *centralWave - (wrange / 2) +(*dispersion);
-<a name="l01248"></a>01248   *wend   = *wstart + wrange;
-<a name="l01249"></a>01249 
-<a name="l01250"></a>01250 
-<a name="l01251"></a>01251  cleanup:
-<a name="l01252"></a>01252   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01253"></a>01253     <span class="keywordflow">return</span> -1;
-<a name="l01254"></a>01254   } <span class="keywordflow">else</span> {
-<a name="l01255"></a>01255     <span class="keywordflow">return</span> 0;
-<a name="l01256"></a>01256   }
-<a name="l01257"></a>01257 
-<a name="l01258"></a>01258 }
-<a name="l01259"></a>01259 
-<a name="l01260"></a>01260 
-<a name="l01261"></a>01261 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01262"></a>01262 sinfo_get_strehl_input2(cpl_frame* frm1,
-<a name="l01263"></a>01263                        cpl_frame* frm2,
-<a name="l01264"></a>01264                <span class="keywordtype">double</span>* dispersion,
-<a name="l01265"></a>01265                <span class="keywordtype">double</span>* centralWave,
-<a name="l01266"></a>01266                <span class="keywordtype">double</span>* wstart,
-<a name="l01267"></a>01267                <span class="keywordtype">double</span>* wend,
-<a name="l01268"></a>01268                <span class="keywordtype">double</span>* pscale1,
-<a name="l01269"></a>01269                <span class="keywordtype">double</span>* pscale2,
-<a name="l01270"></a>01270                <span class="keywordtype">double</span>* exptime1,
-<a name="l01271"></a>01271                <span class="keywordtype">double</span>* exptime2,
-<a name="l01272"></a>01272                <span class="keywordtype">double</span>* strehl_star_rad1,
-<a name="l01273"></a>01273                <span class="keywordtype">double</span>* strehl_star_rad2,
-<a name="l01274"></a>01274                <span class="keywordtype">double</span>* strehl_bg_rmin1,
-<a name="l01275"></a>01275                <span class="keywordtype">double</span>* strehl_bg_rmin2,
-<a name="l01276"></a>01276                <span class="keywordtype">double</span>* strehl_bg_rmax1,
-<a name="l01277"></a>01277                <span class="keywordtype">double</span>* strehl_bg_rmax2)
-<a name="l01278"></a>01278 
-<a name="l01279"></a>01279 {
-<a name="l01280"></a>01280 
-<a name="l01281"></a>01281   cpl_propertylist* plist=NULL;
-<a name="l01282"></a>01282   <span class="keywordtype">char</span> res1[MAX_NAME_SIZE];
-<a name="l01283"></a>01283   <span class="keywordtype">char</span> res2[MAX_NAME_SIZE];
-<a name="l01284"></a>01284   <span class="keywordtype">double</span> pix_scale1=0;
-<a name="l01285"></a>01285   <span class="keywordtype">double</span> pix_scale2=0;
-<a name="l01286"></a>01286   <span class="keywordtype">double</span> wrange=0;
-<a name="l01287"></a>01287   <span class="keywordtype">char</span> fname1[MAX_NAME_SIZE];
-<a name="l01288"></a>01288   <span class="keywordtype">char</span> fname2[MAX_NAME_SIZE];
-<a name="l01289"></a>01289   <span class="keywordtype">int</span> naxis3=0;
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291   sinfo_get_spatial_res(frm1,res1);
-<a name="l01292"></a>01292   sinfo_get_spatial_res(frm2,res2);
-<a name="l01293"></a>01293   pix_scale1=atof(res1);
-<a name="l01294"></a>01294   pix_scale2=atof(res2);
-<a name="l01295"></a>01295   <span class="comment">/* factor 2 due to change of detector to 2K</span>
-<a name="l01296"></a>01296 <span class="comment">  *pscale1=0.5*pix_scale1;</span>
-<a name="l01297"></a>01297 <span class="comment">  *pscale2=0.5*pix_scale2;</span>
-<a name="l01298"></a>01298 <span class="comment">  */</span>
-<a name="l01299"></a>01299 
-<a name="l01300"></a>01300   *pscale1=pix_scale1;
-<a name="l01301"></a>01301   *pscale2=pix_scale2;
-<a name="l01302"></a>01302 
-<a name="l01303"></a>01303 
-<a name="l01304"></a>01304   *strehl_star_rad1=SINFO_RSTAR*(*pscale1);
-<a name="l01305"></a>01305   *strehl_bg_rmin1=SINFO_BKG_R1*(*pscale1);
-<a name="l01306"></a>01306   *strehl_bg_rmax1=SINFO_BKG_R2*(*pscale1);
-<a name="l01307"></a>01307 
-<a name="l01308"></a>01308   *strehl_star_rad2=SINFO_RSTAR*(*pscale2);
-<a name="l01309"></a>01309   *strehl_bg_rmin2=SINFO_BKG_R1*(*pscale2);
-<a name="l01310"></a>01310   *strehl_bg_rmax2=SINFO_BKG_R2*(*pscale2);
-<a name="l01311"></a>01311 
-<a name="l01312"></a>01312   strcpy(fname1,cpl_frame_get_filename(frm1));
-<a name="l01313"></a>01313   check_nomsg(plist=cpl_propertylist_load(fname1,0));
-<a name="l01314"></a>01314   check_nomsg(*dispersion=sinfo_pfits_get_cdelt3(plist));
-<a name="l01315"></a>01315   *centralWave=sinfo_pfits_get_crval3(plist);
-<a name="l01316"></a>01316   check_nomsg(naxis3=sinfo_pfits_get_naxis3(plist));
-<a name="l01317"></a>01317   *exptime1=sinfo_pfits_get_exp_time(plist);
-<a name="l01318"></a>01318   sinfo_free_propertylist(&plist);
-<a name="l01319"></a>01319   strcpy(fname2,cpl_frame_get_filename(frm2));
-<a name="l01320"></a>01320 
-<a name="l01321"></a>01321 
-<a name="l01322"></a>01322   check_nomsg(plist=cpl_propertylist_load(fname2,0));
-<a name="l01323"></a>01323   *exptime2=sinfo_pfits_get_exp_time(plist);
-<a name="l01324"></a>01324   sinfo_free_propertylist(&plist);
-<a name="l01325"></a>01325 
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327 
-<a name="l01328"></a>01328   wrange=(*dispersion)*naxis3;
-<a name="l01329"></a>01329 
-<a name="l01330"></a>01330   *wstart = *centralWave - (wrange / 2) +(*dispersion);
-<a name="l01331"></a>01331   *wend   = *wstart + wrange;
-<a name="l01332"></a>01332 
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334  cleanup:
-<a name="l01335"></a>01335   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01336"></a>01336     <span class="keywordflow">return</span> -1;
-<a name="l01337"></a>01337   } <span class="keywordflow">else</span> {
-<a name="l01338"></a>01338     <span class="keywordflow">return</span> 0;
-<a name="l01339"></a>01339   }
-<a name="l01340"></a>01340 
-<a name="l01341"></a>01341 }
-<a name="l01342"></a>01342 
-<a name="l01343"></a>01343 
-<a name="l01344"></a>01344 
-<a name="l01345"></a>01345 <span class="keyword">static</span> cpl_table*
-<a name="l01346"></a>01346 sinfo_get_strehl_from_2images(cpl_image* ima1,
-<a name="l01347"></a>01347                   cpl_image* ima2,
-<a name="l01348"></a>01348                   cpl_frame* frm1,
-<a name="l01349"></a>01349                   cpl_frame* frm2)
-<a name="l01350"></a>01350 {
-<a name="l01351"></a>01351 
-<a name="l01352"></a>01352   cpl_table* strehl_tbl=NULL;
-<a name="l01353"></a>01353 
-<a name="l01354"></a>01354 
-<a name="l01355"></a>01355   <span class="keywordtype">double</span> dispersion=0.;
-<a name="l01356"></a>01356   <span class="keywordtype">double</span> centralWave=0.;
-<a name="l01357"></a>01357   <span class="keywordtype">double</span> wstart=0;
-<a name="l01358"></a>01358   <span class="keywordtype">double</span> wstep=0;
-<a name="l01359"></a>01359   <span class="keywordtype">double</span> wend=0;
-<a name="l01360"></a>01360   <span class="keywordtype">double</span> lam=0;
-<a name="l01361"></a>01361   <span class="keywordtype">double</span> dlam=0;
-<a name="l01362"></a>01362   <span class="keywordtype">double</span> pscale1 = 0;
-<a name="l01363"></a>01363   <span class="keywordtype">double</span> pscale2 = 0;
-<a name="l01364"></a>01364 
-<a name="l01365"></a>01365   <span class="keywordtype">double</span> strehl_star_rad1=0;
-<a name="l01366"></a>01366   <span class="keywordtype">double</span> strehl_star_rad2=0;
-<a name="l01367"></a>01367   <span class="keywordtype">double</span> strehl_bg_rmin1=0;
-<a name="l01368"></a>01368   <span class="keywordtype">double</span> strehl_bg_rmin2=0;
-<a name="l01369"></a>01369   <span class="keywordtype">double</span> strehl_bg_rmax1=0;
-<a name="l01370"></a>01370   <span class="keywordtype">double</span> strehl_bg_rmax2=0;
-<a name="l01371"></a>01371   <span class="keywordtype">double</span> strehl=0;
-<a name="l01372"></a>01372   <span class="keywordtype">double</span> strehl_err=0;
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374   <span class="keywordtype">int</span> nsample=1;
-<a name="l01375"></a>01375   <span class="keywordtype">double</span> exptime1=0;
-<a name="l01376"></a>01376   <span class="keywordtype">double</span> exptime2=0;
-<a name="l01377"></a>01377   cpl_image* img_dup=NULL;
-<a name="l01378"></a>01378 
-<a name="l01379"></a>01379   cpl_size max_ima1_x=0;
-<a name="l01380"></a>01380   cpl_size max_ima1_y=0;
-<a name="l01381"></a>01381 
-<a name="l01382"></a>01382   cpl_size max_ima2_x=0;
-<a name="l01383"></a>01383 
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385   cpl_size max_ima2_y=0;
-<a name="l01386"></a>01386   <span class="keywordtype">double</span> star_bkg=0;
-<a name="l01387"></a>01387   <span class="keywordtype">double</span> star_peak=0;
-<a name="l01388"></a>01388   <span class="keywordtype">double</span> star_flux=0;
-<a name="l01389"></a>01389 
-<a name="l01390"></a>01390   <span class="keywordtype">double</span> psf_peak=0;
-<a name="l01391"></a>01391   <span class="keywordtype">double</span> psf_flux=0;
-<a name="l01392"></a>01392   <span class="keywordtype">double</span> bkg_noise=0;
-<a name="l01393"></a>01393 
-<a name="l01394"></a>01394   cpl_errorstate clean_state = cpl_errorstate_get();
-<a name="l01395"></a>01395 
-<a name="l01396"></a>01396   ck0_nomsg(sinfo_get_strehl_input2(frm1,frm2,&dispersion, &centralWave,
-<a name="l01397"></a>01397                                    &wstart,&wend,&pscale1,&pscale2,
-<a name="l01398"></a>01398                                    &exptime1,&exptime2,
-<a name="l01399"></a>01399                                    &strehl_star_rad1,&strehl_star_rad2,
-<a name="l01400"></a>01400                                    &strehl_bg_rmin1,&strehl_bg_rmin2,
-<a name="l01401"></a>01401                                    &strehl_bg_rmax1,&strehl_bg_rmax2));
-<a name="l01402"></a>01402 
-<a name="l01403"></a>01403 
-<a name="l01404"></a>01404 
-<a name="l01405"></a>01405 
-<a name="l01406"></a>01406 
-<a name="l01407"></a>01407   check_nomsg(img_dup=cpl_image_duplicate(ima1));
-<a name="l01408"></a>01408   sinfo_clean_nan(&img_dup);
-<a name="l01409"></a>01409   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima1_x,&max_ima1_y));
-<a name="l01410"></a>01410   sinfo_free_image(&img_dup);
-<a name="l01411"></a>01411 
-<a name="l01412"></a>01412 
-<a name="l01413"></a>01413   check_nomsg(img_dup=cpl_image_duplicate(ima2));
-<a name="l01414"></a>01414   sinfo_clean_nan(&img_dup);
-<a name="l01415"></a>01415   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima2_x,&max_ima2_y));
-<a name="l01416"></a>01416   sinfo_free_image(&img_dup);
-<a name="l01417"></a>01417 
-<a name="l01418"></a>01418   <span class="comment">/*</span>
-<a name="l01419"></a>01419 <span class="comment">     note:</span>
-<a name="l01420"></a>01420 <span class="comment">     -wstep as we do not hit the borders where the</span>
-<a name="l01421"></a>01421 <span class="comment">     sinfo_gaussian fit has a problem</span>
-<a name="l01422"></a>01422 <span class="comment">  */</span>
-<a name="l01423"></a>01423 
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425 
-<a name="l01426"></a>01426   check_nomsg(strehl_tbl = cpl_table_new(nsample));
-<a name="l01427"></a>01427   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"wavelength"</span>,CPL_TYPE_DOUBLE));
-<a name="l01428"></a>01428   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl"</span>,CPL_TYPE_DOUBLE));
-<a name="l01429"></a>01429   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,CPL_TYPE_DOUBLE));
-<a name="l01430"></a>01430   wstep  = wend-wstart;
-<a name="l01431"></a>01431 
-<a name="l01432"></a>01432 
-<a name="l01433"></a>01433 
-<a name="l01434"></a>01434   lam = (double)0.5*(wstart+wend);
-<a name="l01435"></a>01435   dlam=wstep;
-<a name="l01436"></a>01436   sinfo_msg(<span class="stringliteral">"lambda=%f dlambda=%f"</span>,lam,dlam);
-<a name="l01437"></a>01437   sinfo_msg(<span class="stringliteral">"wstart=%f wend=%f"</span>,wstart,wend);
-<a name="l01438"></a>01438   sinfo_msg(<span class="stringliteral">"wstep=%f"</span>,wstep);
-<a name="l01439"></a>01439 
-<a name="l01440"></a>01440 
-<a name="l01441"></a>01441   <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_strehl_compute_two(ima1,ima2,
-<a name="l01442"></a>01442                         SINFO_STREHL_M1,SINFO_STREHL_M2,
-<a name="l01443"></a>01443                         lam,
-<a name="l01444"></a>01444                         pscale1,pscale2,
-<a name="l01445"></a>01445                         exptime1,exptime2,
-<a name="l01446"></a>01446                         max_ima1_x,max_ima1_y,
-<a name="l01447"></a>01447                         max_ima2_x,max_ima2_y,
-<a name="l01448"></a>01448                         strehl_star_rad1,
-<a name="l01449"></a>01449                                             strehl_bg_rmin1,
-<a name="l01450"></a>01450                         strehl_bg_rmax1,
-<a name="l01451"></a>01451                         &strehl,&strehl_err,&star_bkg,
-<a name="l01452"></a>01452                         &star_peak,&star_flux,
-<a name="l01453"></a>01453                         &psf_peak,&psf_flux,&bkg_noise))
-<a name="l01454"></a>01454     {
-<a name="l01455"></a>01455 
-<a name="l01456"></a>01456       strehl=-1;
-<a name="l01457"></a>01457       strehl_err=0;
-<a name="l01458"></a>01458       irplib_error_recover(clean_state,
-<a name="l01459"></a>01459                <span class="stringliteral">"Problem computing strehl, set it to -1"</span>);
-<a name="l01460"></a>01460 
-<a name="l01461"></a>01461     }
-<a name="l01462"></a>01462 
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464   <span class="keywordflow">if</span>((isnan(lam) ==0) &&
-<a name="l01465"></a>01465      (isnan(lam) ==0) &&
-<a name="l01466"></a>01466      (isnan(lam) ==0)) {
-<a name="l01467"></a>01467     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"wavelength"</span>,0,lam));
-<a name="l01468"></a>01468     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl"</span>,0,strehl));
-<a name="l01469"></a>01469     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,
-<a name="l01470"></a>01470                      0,strehl_err));
-<a name="l01471"></a>01471 
-<a name="l01472"></a>01472   }
-<a name="l01473"></a>01473 
-<a name="l01474"></a>01474 
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476   <span class="keywordflow">return</span> strehl_tbl;
-<a name="l01477"></a>01477  cleanup:
-<a name="l01478"></a>01478 
-<a name="l01479"></a>01479 
-<a name="l01480"></a>01480   <span class="keywordflow">return</span> NULL;
-<a name="l01481"></a>01481 }
-<a name="l01482"></a>01482 
-<a name="l01483"></a>01483 
-<a name="l01484"></a>01484 
-<a name="l01485"></a>01485 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01520"></a>01520 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01521"></a>01521 <span class="preprocessor">#define irplib_assure_code cpl_ensure_code</span>
-<a name="l01522"></a>01522 <span class="preprocessor"></span><span class="keywordtype">int</span> sinfo_strehl_compute_two(
-<a name="l01523"></a>01523         <span class="keyword">const</span> cpl_image *   im1,
-<a name="l01524"></a>01524         <span class="keyword">const</span> cpl_image *   im2,
-<a name="l01525"></a>01525         <span class="keywordtype">double</span>              m1,
-<a name="l01526"></a>01526         <span class="keywordtype">double</span>              m2,
-<a name="l01527"></a>01527         <span class="keywordtype">double</span>              lam,
-<a name="l01528"></a>01528         <span class="keywordtype">double</span>              pscale1,
-<a name="l01529"></a>01529         <span class="keywordtype">double</span>              pscale2,
-<a name="l01530"></a>01530         <span class="keywordtype">double</span>              exptime1,
-<a name="l01531"></a>01531         <span class="keywordtype">double</span>              exptime2,
-<a name="l01532"></a>01532         <span class="keywordtype">int</span>                 xpos1,
-<a name="l01533"></a>01533         <span class="keywordtype">int</span>                 ypos1,
-<a name="l01534"></a>01534         <span class="keywordtype">int</span>                 xpos2,
-<a name="l01535"></a>01535         <span class="keywordtype">int</span>                 ypos2,
-<a name="l01536"></a>01536         <span class="keywordtype">double</span>              r1,
-<a name="l01537"></a>01537         <span class="keywordtype">double</span>              r2,
-<a name="l01538"></a>01538         <span class="keywordtype">double</span>              r3,
-<a name="l01539"></a>01539         <span class="keywordtype">double</span>          *   strehl,
-<a name="l01540"></a>01540         <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l01541"></a>01541         <span class="keywordtype">double</span>          *   star_bkg,
-<a name="l01542"></a>01542         <span class="keywordtype">double</span>          *   star_peak,
-<a name="l01543"></a>01543         <span class="keywordtype">double</span>          *   star_flux,
-<a name="l01544"></a>01544         <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l01545"></a>01545         <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l01546"></a>01546         <span class="keywordtype">double</span>          *   bg_noise)
-<a name="l01547"></a>01547 {
-<a name="l01548"></a>01548     <span class="keywordtype">double</span> psf_peak1=0;
-<a name="l01549"></a>01549     <span class="keywordtype">double</span> psf_peak2=0;
-<a name="l01550"></a>01550     <span class="keywordtype">double</span> psf_flux1=0;
-<a name="l01551"></a>01551     <span class="keywordtype">double</span> psf_flux2=0;
-<a name="l01552"></a>01552     <span class="keywordtype">double</span> star_bkg1=0;
-<a name="l01553"></a>01553     <span class="keywordtype">double</span> star_bkg2=0;
-<a name="l01554"></a>01554     <span class="keywordtype">double</span> star_flux1=0;
-<a name="l01555"></a>01555     <span class="keywordtype">double</span> star_flux2=0;
-<a name="l01556"></a>01556     <span class="keywordtype">double</span> star_peak1=0;
-<a name="l01557"></a>01557     <span class="keywordtype">double</span> star_peak2=0;
-<a name="l01558"></a>01558 
-<a name="l01559"></a>01559     <span class="keyword">const</span> <span class="keywordtype">double</span>   window_size = 5.0 ;
-<a name="l01560"></a>01560     <span class="keywordtype">double</span>         star_radius, max_radius ;
-<a name="l01561"></a>01561     <span class="keywordtype">double</span>       ring[4];
-<a name="l01562"></a>01562 
-<a name="l01563"></a>01563     <span class="keywordtype">double</span> prat=pscale2/pscale1;
-<a name="l01564"></a>01564     <span class="keywordtype">double</span> prat2=prat*prat;
-<a name="l01565"></a>01565     <span class="keywordtype">double</span> trat=exptime1/exptime2;
-<a name="l01566"></a>01566     <span class="keywordtype">double</span> frat=sinfo_scale_flux(pscale1,pscale2,exptime1,exptime2);
-<a name="l01567"></a>01567     <span class="keywordtype">double</span> xc=0;
-<a name="l01568"></a>01568     <span class="keywordtype">double</span> yc=0;
-<a name="l01569"></a>01569 
-<a name="l01570"></a>01570     <span class="keywordtype">int</span> sx=0;
-<a name="l01571"></a>01571     <span class="keywordtype">int</span> sy=0;
-<a name="l01572"></a>01572     <span class="keywordtype">int</span> d=16;
-<a name="l01573"></a>01573     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l01574"></a>01574 
-<a name="l01575"></a>01575 
-<a name="l01576"></a>01576     <span class="comment">/* Test inputs */</span>
-<a name="l01577"></a>01577     irplib_assure_code(im1 != NULL,         CPL_ERROR_NULL_INPUT);
-<a name="l01578"></a>01578     irplib_assure_code(im2 != NULL,         CPL_ERROR_NULL_INPUT);
-<a name="l01579"></a>01579     irplib_assure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);
-<a name="l01580"></a>01580     irplib_assure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01581"></a>01581     irplib_assure_code(star_bkg != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l01582"></a>01582     irplib_assure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l01583"></a>01583     irplib_assure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l01584"></a>01584     irplib_assure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l01585"></a>01585     irplib_assure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l01586"></a>01586 
-<a name="l01587"></a>01587     irplib_assure_code(pscale1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01588"></a>01588     irplib_assure_code(pscale2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01589"></a>01589 
-<a name="l01590"></a>01590     irplib_assure_code(xpos1-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01591"></a>01591     irplib_assure_code(ypos1-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01592"></a>01592     irplib_assure_code(xpos2-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01593"></a>01593     irplib_assure_code(ypos2-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01594"></a>01594 
-<a name="l01595"></a>01595     irplib_assure_code(xpos1+window_size <= cpl_image_get_size_x(im1),
-<a name="l01596"></a>01596                        CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01597"></a>01597     irplib_assure_code(ypos1+window_size <= cpl_image_get_size_y(im1),
-<a name="l01598"></a>01598                        CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01599"></a>01599 
-<a name="l01600"></a>01600     irplib_assure_code(xpos2+window_size <= cpl_image_get_size_x(im2),
-<a name="l01601"></a>01601                        CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01602"></a>01602     irplib_assure_code(ypos2+window_size <= cpl_image_get_size_y(im2),
-<a name="l01603"></a>01603                        CPL_ERROR_ACCESS_OUT_OF_RANGE);
-<a name="l01604"></a>01604 
-<a name="l01605"></a>01605     irplib_assure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01606"></a>01606     irplib_assure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01607"></a>01607     irplib_assure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01608"></a>01608 
-<a name="l01609"></a>01609     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span>
-<a name="l01610"></a>01610     <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span>
-<a name="l01611"></a>01611 
-<a name="l01612"></a>01612     <span class="comment">/* Generate first appropriate PSF to find max peak: same pscale as</span>
-<a name="l01613"></a>01613 <span class="comment">       the one of the image where we compute the flux */</span>
-<a name="l01614"></a>01614 
-<a name="l01615"></a>01615 
-<a name="l01616"></a>01616     sx=cpl_image_get_size_x(im1);
-<a name="l01617"></a>01617     sy=cpl_image_get_size_y(im1);
-<a name="l01618"></a>01618 
-<a name="l01619"></a>01619 
-<a name="l01620"></a>01620     psf_flux1 = 1.0; <span class="comment">// The psf flux, cpl_image_get_flux(psf), is always 1</span>
-<a name="l01621"></a>01621     psf_flux2 = 1.0; <span class="comment">// The psf flux, cpl_image_get_flux(psf), is always 1</span>
-<a name="l01622"></a>01622     *psf_flux=1.0;
-<a name="l01623"></a>01623     ring[0] = xpos2;
-<a name="l01624"></a>01624     ring[1] = ypos2;
-<a name="l01625"></a>01625     ring[2] = r2/pscale2;
-<a name="l01626"></a>01626     ring[3] = r3/pscale2;
-<a name="l01627"></a>01627 
-<a name="l01628"></a>01628     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_pos=%d %d %d %d"</span>,xpos1,ypos1,xpos2,ypos2);
-<a name="l01629"></a>01629     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_ring=%f %f %f %f"</span>,ring[0],ring[1],ring[2],ring[3]);
-<a name="l01630"></a>01630 
-<a name="l01631"></a>01631     <span class="comment">/* Compute star_radius in pixels */</span>
-<a name="l01632"></a>01632     star_radius = r1/pscale2;
-<a name="l01633"></a>01633 
-<a name="l01634"></a>01634      <span class="comment">/* Find the peak value on the central part of the candidate image */</span>
-<a name="l01635"></a>01635 
-<a name="l01636"></a>01636 
-<a name="l01637"></a>01637     <span class="comment">/* Find the peak value on the central part of the candidate image */</span>
-<a name="l01638"></a>01638     max_radius = window_size < star_radius ? window_size : star_radius;
-<a name="l01639"></a>01639 
-<a name="l01640"></a>01640     check_nomsg(sinfo_get_star_features(im1,d,xpos1,ypos1,&xc,&yc,
-<a name="l01641"></a>01641                                         &star_peak1,&star_flux1,&star_bkg1));
-<a name="l01642"></a>01642 
-<a name="l01643"></a>01643 
-<a name="l01644"></a>01644     *star_peak=star_peak1;
-<a name="l01645"></a>01645 
-<a name="l01646"></a>01646     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale1,xc,yc,1.,
-<a name="l01647"></a>01647                   &psf_peak1));
-<a name="l01648"></a>01648 
-<a name="l01649"></a>01649     check_nomsg(sinfo_get_star_features(im2,d,xpos2,ypos2,&xc,&yc,
-<a name="l01650"></a>01650                                         &star_peak2,&star_flux2,&star_bkg2));
-<a name="l01651"></a>01651 
-<a name="l01652"></a>01652     *star_flux=star_flux2;
-<a name="l01653"></a>01653     *star_bkg=star_bkg2;
-<a name="l01654"></a>01654 
-<a name="l01655"></a>01655     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale2,xc,yc,1.,
-<a name="l01656"></a>01656                   &psf_peak2));
-<a name="l01657"></a>01657 
-<a name="l01658"></a>01658 
-<a name="l01659"></a>01659 
-<a name="l01660"></a>01660 
-<a name="l01661"></a>01661     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"p1=%g p2=%g"</span>,*star_peak,star_peak2);
-<a name="l01662"></a>01662     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"corr peak: p1=%g p2=%g"</span>,*star_peak,star_peak2/frat);
-<a name="l01663"></a>01663     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"corr bkg: bkg1=%g bkg2=%g"</span>,star_bkg1/frat,*star_bkg);
-<a name="l01664"></a>01664     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"rel diff: %g"</span>,
-<a name="l01665"></a>01665               fabs(star_peak2/frat- *star_peak)/(star_peak2/frat));
-<a name="l01666"></a>01666 
-<a name="l01667"></a>01667 
-<a name="l01668"></a>01668 
-<a name="l01669"></a>01669     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Rescaled star_flux1=%g star_flux2=%g"</span>,
-<a name="l01670"></a>01670                  star_flux1*trat,*star_flux);
-<a name="l01671"></a>01671 
-<a name="l01672"></a>01672     <span class="comment">//Check that flux value as measured on im1 and on 1m2 are close one</span>
-<a name="l01673"></a>01673     <span class="comment">//to another. Note that flux1, measured on im1, need to be rescaled</span>
-<a name="l01674"></a>01674     <span class="comment">//by exposure time to match to flux2=star_flux</span>
-<a name="l01675"></a>01675     <span class="keywordflow">if</span> ( fabs((star_flux1*frat-*star_flux)/(*star_flux)) > 0.25) {
-<a name="l01676"></a>01676       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star flux rel diff: %g"</span>,
-<a name="l01677"></a>01677                         fabs((star_flux1*frat-*star_flux)/(*star_flux)));
-<a name="l01678"></a>01678     }
-<a name="l01679"></a>01679 
-<a name="l01680"></a>01680     <span class="comment">//Check that pick value as measured on im1 and on 1m2 are close one</span>
-<a name="l01681"></a>01681     <span class="comment">//to another. Note that peak2, measured on im2, need to be rescaled</span>
-<a name="l01682"></a>01682     <span class="comment">//by exposure time and pixel scale to match to peak1=star_peak</span>
-<a name="l01683"></a>01683     <span class="keywordflow">if</span> ( fabs(star_peak2-star_peak1*frat)/(star_peak2) > 0.25) {
-<a name="l01684"></a>01684       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star pick rel diff: %g"</span>,
-<a name="l01685"></a>01685                         fabs(star_peak2-star_peak1*frat)/(star_peak2));
-<a name="l01686"></a>01686     }
-<a name="l01687"></a>01687     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ak1 star peak=%g"</span>,*star_peak);
-<a name="l01688"></a>01688     irplib_assure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l01689"></a>01689     *star_peak=star_peak1;
-<a name="l01690"></a>01690 
-<a name="l01691"></a>01691     *star_bkg=star_bkg2;
-<a name="l01692"></a>01692     *star_flux=star_flux2;
-<a name="l01693"></a>01693 
-<a name="l01694"></a>01694     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ak2"</span>);
-<a name="l01695"></a>01695 
-<a name="l01696"></a>01696     <span class="comment">//psf1 = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale1, size*4);</span>
-<a name="l01697"></a>01697     <span class="comment">//psf_peak1 = cpl_image_get_max(psf1) ;</span>
-<a name="l01698"></a>01698 
-<a name="l01699"></a>01699 
-<a name="l01700"></a>01700 
-<a name="l01701"></a>01701     <span class="comment">/* Compute Strehl */</span>
-<a name="l01702"></a>01702     <span class="comment">//*strehl = (*star_peak *prat2/trat/ *star_flux) / (*psf_peak / *psf_flux);</span>
-<a name="l01703"></a>01703     *strehl = (*star_peak/(*star_flux*trat)) / (psf_peak1 );
-<a name="l01704"></a>01704     <span class="comment">//*strehl = (*star_peak/(*star_flux)) / (psf_peak1 / *psf_flux) ;</span>
-<a name="l01705"></a>01705     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"peak=%g flux1=%f flux2=%f flux=%f cflux=%g "</span>
-<a name="l01706"></a>01706                     <span class="stringliteral">"fct=%g psf_peak=%g"</span>,
-<a name="l01707"></a>01707           *star_peak,star_flux1,star_flux2,*star_flux,
-<a name="l01708"></a>01708               *star_flux/frat*prat2,prat2/frat,psf_peak1);
-<a name="l01709"></a>01709     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"=======strehl=%g"</span>,*strehl);
-<a name="l01710"></a>01710     <span class="comment">/*</span>
-<a name="l01711"></a>01711 <span class="comment">    if (*strehl > 1)</span>
-<a name="l01712"></a>01712 <span class="comment">        cpl_msg_warning(cpl_func, "Extreme Strehl-ratio=%g, star_peak=%g, "</span>
-<a name="l01713"></a>01713 <span class="comment">                        "star_flux=%g, psf_peak=%g, psf_flux=%g", *strehl,</span>
-<a name="l01714"></a>01714 <span class="comment">                        *star_peak, *star_flux, *psf_peak, *psf_flux);</span>
-<a name="l01715"></a>01715 <span class="comment"></span>
-<a name="l01716"></a>01716 <span class="comment"></span>
-<a name="l01717"></a>01717 <span class="comment">    // Compute Strehl error</span>
-<a name="l01718"></a>01718 <span class="comment">    if (cpl_flux_get_noise_ring(im2, ring, noise_box_sz, noise_nsamples,</span>
-<a name="l01719"></a>01719 <span class="comment">                                bg_noise, NULL) == CPL_ERROR_NONE) {</span>
-<a name="l01720"></a>01720 <span class="comment">        *strehl_err = SINFO_STREHL_ERROR_COEFFICIENT * (*bg_noise) * pscale2 *</span>
-<a name="l01721"></a>01721 <span class="comment">            star_radius * star_radius / *star_flux;</span>
-<a name="l01722"></a>01722 <span class="comment">        irplib_assure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);</span>
-<a name="l01723"></a>01723 <span class="comment">    } else {</span>
-<a name="l01724"></a>01724 <span class="comment">      sinfo_msg_warning("Problem computing noise");</span>
-<a name="l01725"></a>01725 <span class="comment">    }</span>
-<a name="l01726"></a>01726 <span class="comment">    */</span>
-<a name="l01727"></a>01727     *bg_noise=0;
-<a name="l01728"></a>01728 
-<a name="l01729"></a>01729     cleanup:
-<a name="l01730"></a>01730 
-<a name="l01731"></a>01731 
-<a name="l01732"></a>01732     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l01733"></a>01733         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l01734"></a>01734 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l01735"></a>01735         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l01736"></a>01736     }
-<a name="l01737"></a>01737 
-<a name="l01738"></a>01738   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01739"></a>01739     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01740"></a>01740   } <span class="keywordflow">else</span> {
-<a name="l01741"></a>01741     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01742"></a>01742   }
-<a name="l01743"></a>01743 
-<a name="l01744"></a>01744 }
-<a name="l01745"></a>01745 
-<a name="l01746"></a>01746 
-<a name="l01747"></a>01747 
-<a name="l01748"></a>01748 
-<a name="l01749"></a>01749 <span class="keyword">static</span> cpl_error_code
-<a name="l01750"></a>01750 sinfo_get_star_features(<span class="keyword">const</span> cpl_image* im,
-<a name="l01751"></a>01751                         <span class="keyword">const</span> <span class="keywordtype">int</span> radius,
-<a name="l01752"></a>01752             <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,
-<a name="l01753"></a>01753             <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,
-<a name="l01754"></a>01754                         <span class="keywordtype">double</span>* xc,
-<a name="l01755"></a>01755                         <span class="keywordtype">double</span>* yc,
-<a name="l01756"></a>01756                         <span class="keywordtype">double</span>* peak,
-<a name="l01757"></a>01757                         <span class="keywordtype">double</span>* flux,
-<a name="l01758"></a>01758                         <span class="keywordtype">double</span>* bkg)
-<a name="l01759"></a>01759 {
-<a name="l01760"></a>01760   <span class="keywordtype">int</span> sx=0;
-<a name="l01761"></a>01761   <span class="keywordtype">int</span> sy=0;
-<a name="l01762"></a>01762   <span class="keywordtype">int</span> ixm=0;
-<a name="l01763"></a>01763   <span class="keywordtype">int</span> iym=0;
-<a name="l01764"></a>01764   <span class="keywordtype">int</span> llx=0;
-<a name="l01765"></a>01765   <span class="keywordtype">int</span> lly=0;
-<a name="l01766"></a>01766   <span class="keywordtype">int</span> urx=0;
-<a name="l01767"></a>01767   <span class="keywordtype">int</span> ury=0;
-<a name="l01768"></a>01768   <span class="keywordtype">int</span> dim_new=0;
-<a name="l01769"></a>01769   <span class="keywordtype">double</span> kappa=2;
-<a name="l01770"></a>01770   <span class="keywordtype">double</span> xm=0;
-<a name="l01771"></a>01771   <span class="keywordtype">double</span> ym=0;
-<a name="l01772"></a>01772   <span class="keywordtype">double</span> bkg_stdev=0;
-<a name="l01773"></a>01773   <span class="keywordtype">int</span> bkg_sx=SINFO_BKG_BOX_SZ;
-<a name="l01774"></a>01774   <span class="keywordtype">int</span> bkg_sy=SINFO_BKG_BOX_SZ;
-<a name="l01775"></a>01775 
-<a name="l01776"></a>01776   cpl_bivector* iqe=NULL;
-<a name="l01777"></a>01777   <span class="keywordtype">double</span>* piqe=NULL;
-<a name="l01778"></a>01778   cpl_image* im_new=NULL;
-<a name="l01779"></a>01779 
-<a name="l01780"></a>01780   sx=cpl_image_get_size_x(im);
-<a name="l01781"></a>01781   sy=cpl_image_get_size_y(im);
-<a name="l01782"></a>01782 
-<a name="l01783"></a>01783   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_radius=%d"</span>,radius);
-<a name="l01784"></a>01784   <span class="comment">//We find the image centroid</span>
-<a name="l01785"></a>01785   <span class="keywordflow">if</span>(NULL != (iqe=cpl_image_iqe(im,sx/2-radius,sy/2-radius,
-<a name="l01786"></a>01786                 sx/2+radius,sy/2+radius))) {
-<a name="l01787"></a>01787 
-<a name="l01788"></a>01788 
-<a name="l01789"></a>01789     piqe=cpl_bivector_get_x_data(iqe);
-<a name="l01790"></a>01790     <span class="comment">//*star_peak=piqe[5];</span>
-<a name="l01791"></a>01791     xm=piqe[0];
-<a name="l01792"></a>01792     ym=piqe[1];
-<a name="l01793"></a>01793     <span class="comment">//Extract a square sub-image of minimal size not to hit the image borders</span>
-<a name="l01794"></a>01794     <span class="comment">//centered on the previous image centroid</span>
-<a name="l01795"></a>01795     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Max ima: %g %g"</span>,xm,ym);
-<a name="l01796"></a>01796     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Find min of: %g %g %g %g"</span>,xm,sx-xm,ym,sy-ym);
-<a name="l01797"></a>01797     ixm=floor(xm);
-<a name="l01798"></a>01798     iym=floor(ym);
-<a name="l01799"></a>01799     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ixm=%d iym=%d"</span>,ixm,iym);
-<a name="l01800"></a>01800     dim_new=floor(sinfo_find_min_of_four(xm,sx-xm,ym,sy-ym));
-<a name="l01801"></a>01801     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dim_new=%d"</span>,dim_new);
-<a name="l01802"></a>01802     llx=(ixm-dim_new > 1) ? ixm-dim_new : 1;
-<a name="l01803"></a>01803     lly=(iym-dim_new > 1) ? iym-dim_new : 1;
-<a name="l01804"></a>01804     urx=(ixm+dim_new < sx) ? ixm+dim_new : sx;
-<a name="l01805"></a>01805     ury=(iym+dim_new < sy) ? iym+dim_new : sy;
-<a name="l01806"></a>01806     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"llx=%d lly=%d urx=%d ury=%d"</span>,llx,lly,urx,ury);
-<a name="l01807"></a>01807     check_nomsg(im_new=cpl_image_extract(im,llx,lly,urx,ury));
-<a name="l01808"></a>01808 
-<a name="l01809"></a>01809     <span class="comment">//compute the background of this last image</span>
-<a name="l01810"></a>01810     check_nomsg(sinfo_get_bkg_4corners(im_new,bkg_sx,bkg_sy,bkg,&bkg_stdev));
-<a name="l01811"></a>01811 
-<a name="l01812"></a>01812 
-<a name="l01813"></a>01813 
-<a name="l01814"></a>01814     sinfo_free_bivector(&iqe);
-<a name="l01815"></a>01815 
-<a name="l01816"></a>01816     <span class="comment">//Determine the image pick on the new coordinate system</span>
-<a name="l01817"></a>01817     iqe=cpl_image_iqe(im_new,dim_new-radius,dim_new-radius,
-<a name="l01818"></a>01818               dim_new+radius,dim_new+radius);
-<a name="l01819"></a>01819     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,piqe[0],piqe[1]);
-<a name="l01820"></a>01820     *xc=piqe[0]-dim_new-1;
-<a name="l01821"></a>01821     *yc=piqe[1]-dim_new-1;
-<a name="l01822"></a>01822 
-<a name="l01823"></a>01823 
-<a name="l01824"></a>01824     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,*xc,*yc);
-<a name="l01825"></a>01825     <span class="comment">//*peak=piqe[5];</span>
-<a name="l01826"></a>01826     *peak=cpl_image_get_max_window(im_new,dim_new-radius,dim_new-radius,
-<a name="l01827"></a>01827                    dim_new+radius,dim_new+radius);
-<a name="l01828"></a>01828 
-<a name="l01829"></a>01829     sinfo_get_flux_above_bkg(im_new,kappa,bkg_stdev,flux);
-<a name="l01830"></a>01830     *peak -= (*bkg);
-<a name="l01831"></a>01831     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star peak=%g bkg=%g"</span>,*peak,*bkg);
-<a name="l01832"></a>01832 
-<a name="l01833"></a>01833 
-<a name="l01834"></a>01834     sinfo_free_bivector(&iqe);
-<a name="l01835"></a>01835 
-<a name="l01836"></a>01836 
-<a name="l01837"></a>01837   } <span class="keywordflow">else</span> {
-<a name="l01838"></a>01838     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"IQE fit failed"</span>);
-<a name="l01839"></a>01839     cpl_error_reset();
-<a name="l01840"></a>01840     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%d yc=%d radius=%d"</span>,xpos,ypos,radius);
-<a name="l01841"></a>01841     *xc=xpos-sx/2;
-<a name="l01842"></a>01842     *yc=ypos-sy/2;
-<a name="l01843"></a>01843     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,*xc,*yc);
-<a name="l01844"></a>01844     check_nomsg(sinfo_get_bkg_4corners(im,bkg_sx,bkg_sy,bkg,&bkg_stdev));
-<a name="l01845"></a>01845     check_nomsg(sinfo_get_safe_box(&llx, &lly, &urx, &ury, xpos,ypos,radius,
-<a name="l01846"></a>01846                    64,64));
-<a name="l01847"></a>01847     check_nomsg(*peak=cpl_image_get_max_window(im,llx,lly,urx,ury)-(*bkg));
-<a name="l01848"></a>01848     sinfo_get_flux_above_bkg(im,kappa,bkg_stdev,flux);
-<a name="l01849"></a>01849     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star peak=%g bkg=%g"</span>,*peak,*bkg);
-<a name="l01850"></a>01850 
-<a name="l01851"></a>01851 
-<a name="l01852"></a>01852   }
-<a name="l01853"></a>01853 
-<a name="l01854"></a>01854 
-<a name="l01855"></a>01855 
-<a name="l01856"></a>01856  cleanup:
-<a name="l01857"></a>01857   sinfo_free_image(&im_new);
-<a name="l01858"></a>01858   sinfo_free_bivector(&iqe);
-<a name="l01859"></a>01859 
-<a name="l01860"></a>01860 
-<a name="l01861"></a>01861 
-<a name="l01862"></a>01862 
-<a name="l01863"></a>01863   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01864"></a>01864     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01865"></a>01865   } <span class="keywordflow">else</span> {
-<a name="l01866"></a>01866     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l01867"></a>01867   }
-<a name="l01868"></a>01868 
-<a name="l01869"></a>01869 }
-<a name="l01870"></a>01870 
-<a name="l01871"></a>01871 
-<a name="l01872"></a>01872 
-<a name="l01873"></a>01873 
-<a name="l01874"></a>01874 
-<a name="l01875"></a>01875 
-<a name="l01876"></a>01876 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01903"></a>01903 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l01904"></a>01904 cpl_error_code
-<a name="l01905"></a>01905 sinfo_strehl_compute_one(<span class="keyword">const</span> cpl_image *   im,
-<a name="l01906"></a>01906                                      <span class="keywordtype">double</span>              m1,
-<a name="l01907"></a>01907                                      <span class="keywordtype">double</span>              m2,
-<a name="l01908"></a>01908                                      <span class="keywordtype">double</span>              lam,
-<a name="l01909"></a>01909                                      <span class="keywordtype">double</span>              dlam,
-<a name="l01910"></a>01910                                      <span class="keywordtype">double</span>              pscale,
-<a name="l01911"></a>01911                                      <span class="keywordtype">int</span>                 xpos,
-<a name="l01912"></a>01912                                      <span class="keywordtype">int</span>                 ypos,
-<a name="l01913"></a>01913                                      <span class="keywordtype">double</span>              r1,
-<a name="l01914"></a>01914                                      <span class="keywordtype">double</span>              r2,
-<a name="l01915"></a>01915                                      <span class="keywordtype">double</span>              r3,
-<a name="l01916"></a>01916                                      <span class="keywordtype">int</span>                 size,
-<a name="l01917"></a>01917                                      <span class="keywordtype">double</span>          *   strehl,
-<a name="l01918"></a>01918                                      <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l01919"></a>01919                                      <span class="keywordtype">double</span>          *   star_bkg,
-<a name="l01920"></a>01920                                      <span class="keywordtype">double</span>          *   star_peak,
-<a name="l01921"></a>01921                                      <span class="keywordtype">double</span>          *   star_flux,
-<a name="l01922"></a>01922                                      <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l01923"></a>01923                                      <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l01924"></a>01924                                      <span class="keywordtype">double</span>          *   bg_noise)
-<a name="l01925"></a>01925 {
-<a name="l01926"></a>01926     cpl_image  * psf;
-<a name="l01927"></a>01927     <span class="keywordtype">double</span>       star_radius;
-<a name="l01928"></a>01928 
-<a name="l01929"></a>01929     <span class="comment">/* FIXME: Arbitrary choice of image border */</span>
-<a name="l01930"></a>01930     <span class="keyword">const</span> <span class="keywordtype">double</span> window_size = (double)(SINFO_STREHL_RAD_CENTRAL);
-<a name="l01931"></a>01931 
-<a name="l01932"></a>01932     <span class="comment">/* Determined empirically by C. Lidman for Strehl error computation */</span>
-<a name="l01933"></a>01933     <span class="comment">//Commented as not used</span>
-<a name="l01934"></a>01934     <span class="comment">//const double strehl_error_coefficient = SINFO_MATH_PI * 0.007 / 0.0271;</span>
-<a name="l01935"></a>01935 
-<a name="l01936"></a>01936 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 0, 0)</span>
-<a name="l01937"></a>01937 <span class="preprocessor"></span>    <span class="keywordtype">double</span>       ring[4];
-<a name="l01938"></a>01938 <span class="preprocessor">#else</span>
-<a name="l01939"></a>01939 <span class="preprocessor"></span>    <span class="comment">/* FIXME: Remove this branch once CPL 3.X is no longer supported */</span>
-<a name="l01940"></a>01940     <span class="keywordtype">int</span>          ring[4];
-<a name="l01941"></a>01941 <span class="preprocessor">#endif</span>
-<a name="l01942"></a>01942 <span class="preprocessor"></span>    cpl_bivector* iqe1=NULL;
-<a name="l01943"></a>01943     <span class="keywordtype">double</span> xc=0;
-<a name="l01944"></a>01944     <span class="keywordtype">double</span> yc=0;
-<a name="l01945"></a>01945     <span class="keywordtype">int</span> d=16;
-<a name="l01946"></a>01946 
-<a name="l01947"></a>01947 
-<a name="l01948"></a>01948 
-<a name="l01949"></a>01949     <span class="comment">/* Check compile-time constant */</span>
-<a name="l01950"></a>01950     cpl_ensure_code(window_size > 0.0,  CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01951"></a>01951 
-<a name="l01952"></a>01952     <span class="comment">/* Test inputs */</span>
-<a name="l01953"></a>01953     cpl_ensure_code(im != NULL,         CPL_ERROR_NULL_INPUT);
-<a name="l01954"></a>01954     cpl_ensure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);
-<a name="l01955"></a>01955     cpl_ensure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);
-<a name="l01956"></a>01956     cpl_ensure_code(star_bkg != NULL,    CPL_ERROR_NULL_INPUT);
-<a name="l01957"></a>01957     cpl_ensure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l01958"></a>01958     cpl_ensure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);
-<a name="l01959"></a>01959     cpl_ensure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l01960"></a>01960     cpl_ensure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);
-<a name="l01961"></a>01961 
-<a name="l01962"></a>01962     cpl_ensure_code(pscale > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01963"></a>01963 
-<a name="l01964"></a>01964 
-<a name="l01965"></a>01965     cpl_ensure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01966"></a>01966     cpl_ensure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01967"></a>01967 
-<a name="l01968"></a>01968     cpl_ensure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01969"></a>01969 
-<a name="l01970"></a>01970 
-<a name="l01971"></a>01971     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span>
-<a name="l01972"></a>01972     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale,xc,yc,
-<a name="l01973"></a>01973                   1.,psf_peak));
-<a name="l01974"></a>01974   <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span>
-<a name="l01975"></a>01975 
-<a name="l01976"></a>01976     <span class="comment">/* Generate first appropriate PSF to find max peak */</span>
-<a name="l01977"></a>01977 
-<a name="l01978"></a>01978     psf = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale, size);
-<a name="l01979"></a>01979     cpl_ensure_code(psf != NULL,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l01980"></a>01980 
-<a name="l01981"></a>01981     <span class="comment">/* Compute flux in PSF and find max peak */</span>
-<a name="l01982"></a>01982     *psf_peak = cpl_image_get_max(psf);
-<a name="l01983"></a>01983 
-<a name="l01984"></a>01984     cpl_image_delete(psf);
-<a name="l01985"></a>01985 
-<a name="l01986"></a>01986 
-<a name="l01987"></a>01987 
-<a name="l01988"></a>01988 
-<a name="l01989"></a>01989     cpl_ensure( *psf_peak > 0.0, CPL_ERROR_ILLEGAL_OUTPUT,CPL_ERROR_ILLEGAL_OUTPUT); <span class="comment">/* The ideal PSF has a positive maximum */</span>
-<a name="l01990"></a>01990     *psf_flux = 1.0; <span class="comment">/* The psf flux, cpl_image_get_flux(psf), is always 1 */</span>
-<a name="l01991"></a>01991 
-<a name="l01992"></a>01992 
-<a name="l01993"></a>01993     <span class="comment">/* Compute star_radius in pixels */</span>
-<a name="l01994"></a>01994     star_radius = r1/pscale;
-<a name="l01995"></a>01995 
-<a name="l01996"></a>01996 
-<a name="l01997"></a>01997     check_nomsg(sinfo_get_star_features(im,d,xpos,ypos,&xc,&yc,
-<a name="l01998"></a>01998                     star_peak,star_flux,star_bkg));
-<a name="l01999"></a>01999 
-<a name="l02000"></a>02000 
-<a name="l02001"></a>02001     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale,xc,yc,1.,psf_peak));
-<a name="l02002"></a>02002 
-<a name="l02003"></a>02003 
-<a name="l02004"></a>02004 
-<a name="l02005"></a>02005     *star_peak -= *star_bkg;
-<a name="l02006"></a>02006 
-<a name="l02007"></a>02007 
-<a name="l02008"></a>02008     cpl_ensure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);
-<a name="l02009"></a>02009 
-<a name="l02010"></a>02010 
-<a name="l02011"></a>02011     <span class="comment">/* Compute Strehl */</span>
-<a name="l02012"></a>02012     <span class="comment">/* (StarPeak / StarFlux) / (PsfPeak / PsfFlux) */</span>
-<a name="l02013"></a>02013     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star flux=%g"</span>, *star_flux);
-<a name="l02014"></a>02014     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star peak=%g"</span>, *star_peak);
-<a name="l02015"></a>02015     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"PSF  flux=%g"</span>, *psf_flux);
-<a name="l02016"></a>02016     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"PSF  peak=%g"</span>, *psf_peak);
-<a name="l02017"></a>02017 
-<a name="l02018"></a>02018     *strehl = (*star_peak * *psf_flux ) / ( *star_flux * *psf_peak);
-<a name="l02019"></a>02019 
-<a name="l02020"></a>02020 
-<a name="l02021"></a>02021 
-<a name="l02022"></a>02022      <span class="keywordflow">if</span> (*strehl > 1)
-<a name="l02023"></a>02023         cpl_msg_warning(cpl_func, <span class="stringliteral">"Extreme Strehl-ratio=%g, star_peak=%g, "</span>
-<a name="l02024"></a>02024                         <span class="stringliteral">"star_flux=%g, psf_peak=%g, psf_flux=%g"</span>, *strehl,
-<a name="l02025"></a>02025                         *star_peak, *star_flux, *psf_peak, *psf_flux);
-<a name="l02026"></a>02026 
-<a name="l02027"></a>02027     <span class="comment">/* Compute Strehl error */</span>
-<a name="l02028"></a>02028     ring[0] = xpos;
-<a name="l02029"></a>02029     ring[1] = ypos;
-<a name="l02030"></a>02030     ring[2] = r2/pscale;
-<a name="l02031"></a>02031     ring[3] = r3/pscale;
-<a name="l02032"></a>02032     <span class="comment">/*</span>
-<a name="l02033"></a>02033 <span class="comment">    *strehl_err = strehl_error_coefficient * (*bg_noise) * pscale *</span>
-<a name="l02034"></a>02034 <span class="comment">        star_radius * star_radius / *star_flux;</span>
-<a name="l02035"></a>02035 <span class="comment"></span>
-<a name="l02036"></a>02036 <span class="comment">    // This check should not be able to fail, but just to be sure</span>
-<a name="l02037"></a>02037 <span class="comment">    cpl_ensure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);</span>
-<a name="l02038"></a>02038 <span class="comment">    */</span>
-<a name="l02039"></a>02039     *bg_noise=0;
-<a name="l02040"></a>02040 
-<a name="l02041"></a>02041 
-<a name="l02042"></a>02042  cleanup:
-<a name="l02043"></a>02043     sinfo_free_bivector(&iqe1);
-<a name="l02044"></a>02044     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l02045"></a>02045       <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l02046"></a>02046     } <span class="keywordflow">else</span> {
-<a name="l02047"></a>02047       <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l02048"></a>02048     }
-<a name="l02049"></a>02049 
-<a name="l02050"></a>02050 
-<a name="l02051"></a>02051 }
-<a name="l02052"></a>02052 
-<a name="l02053"></a>02053 
-<a name="l02054"></a>02054 
-<a name="l02055"></a>02055 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l02056"></a>02056 sinfo_check_borders(cpl_size* val,<span class="keyword">const</span> <span class="keywordtype">int</span> max,<span class="keyword">const</span> <span class="keywordtype">int</span> thresh)
-<a name="l02057"></a>02057 {
-<a name="l02058"></a>02058 
-<a name="l02059"></a>02059   *val = ((*val-thresh) > 0) ? *val : thresh;
-<a name="l02060"></a>02060   *val = ((*val+thresh) < max) ? *val : max-thresh-1;
-<a name="l02061"></a>02061   <span class="keywordflow">return</span>;
-<a name="l02062"></a>02062 }
-<a name="l02063"></a>02063 
-<a name="l02064"></a>02064 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l02065"></a>02065 sinfo_get_safe_box(<span class="keywordtype">int</span>* llx,
-<a name="l02066"></a>02066                    <span class="keywordtype">int</span>* lly,
-<a name="l02067"></a>02067                    <span class="keywordtype">int</span>* urx,
-<a name="l02068"></a>02068                    <span class="keywordtype">int</span>* ury,
-<a name="l02069"></a>02069                    <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,
-<a name="l02070"></a>02070                    <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,
-<a name="l02071"></a>02071                    <span class="keyword">const</span> <span class="keywordtype">int</span> box,
-<a name="l02072"></a>02072                    <span class="keyword">const</span> <span class="keywordtype">int</span> szx,
-<a name="l02073"></a>02073                    <span class="keyword">const</span> <span class="keywordtype">int</span> szy)
-<a name="l02074"></a>02074 
-<a name="l02075"></a>02075 {
-<a name="l02076"></a>02076   *llx= ((xpos-box)>0)   ? (xpos-box) : 1;
-<a name="l02077"></a>02077   *lly= ((ypos-box)>0)   ? (ypos-box) : 1;
-<a name="l02078"></a>02078   *urx= ((xpos+box)<szx) ? (xpos+box) : szx-1 ;
-<a name="l02079"></a>02079   *ury= ((ypos+box)<szy) ? (ypos+box) : szy-1 ;
-<a name="l02080"></a>02080 
-<a name="l02081"></a>02081   <span class="keywordflow">return</span>;
-<a name="l02082"></a>02082 }
-<a name="l02083"></a>02083 
-<a name="l02084"></a>02084 
-<a name="l02085"></a>02085 
-<a name="l02086"></a>02086 
-<a name="l02087"></a>02087 
-<a name="l02088"></a>02088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02098"></a>02098 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02099"></a>02099 cpl_error_code
-<a name="l02100"></a>02100 sinfo_get_bkg_4corners(<span class="keyword">const</span> cpl_image *img,
-<a name="l02101"></a>02101                <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sx,
-<a name="l02102"></a>02102                        <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sy,
-<a name="l02103"></a>02103                        <span class="keywordtype">double</span>* bkg,
-<a name="l02104"></a>02104                        <span class="keywordtype">double</span>* std)
-<a name="l02105"></a>02105 {
-<a name="l02106"></a>02106 
-<a name="l02107"></a>02107   <span class="keywordtype">int</span> sx=0;
-<a name="l02108"></a>02108   <span class="keywordtype">int</span> sy=0;
-<a name="l02109"></a>02109   cpl_image* img_bkg=NULL;
-<a name="l02110"></a>02110   *bkg=0;
-<a name="l02111"></a>02111 
-<a name="l02112"></a>02112   cknull(img,<span class="stringliteral">"NULL input image!"</span>);
-<a name="l02113"></a>02113   check_nomsg(sx=cpl_image_get_size_x(img));
-<a name="l02114"></a>02114   check_nomsg(sy=cpl_image_get_size_y(img));
-<a name="l02115"></a>02115 
-<a name="l02116"></a>02116   check_nomsg(img_bkg=cpl_image_new(2*bkg_sx,2*bkg_sy,CPL_TYPE_FLOAT));
-<a name="l02117"></a>02117   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,1,1,bkg_sx,bkg_sy),
-<a name="l02118"></a>02118                  1,1));
-<a name="l02119"></a>02119 
-<a name="l02120"></a>02120   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,sx-bkg_sx,1,
-<a name="l02121"></a>02121                                sx,bkg_sy),bkg_sx+1,1));
-<a name="l02122"></a>02122   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,1,sy-bkg_sy,
-<a name="l02123"></a>02123                                bkg_sx,sy),1,bkg_sy+1));
-<a name="l02124"></a>02124 
-<a name="l02125"></a>02125   check_nomsg(cpl_image_copy(img_bkg,
-<a name="l02126"></a>02126                  cpl_image_extract(img,sx-bkg_sx,sy-bkg_sy,sx,sy),
-<a name="l02127"></a>02127                  bkg_sx+1,bkg_sy+1));
-<a name="l02128"></a>02128 
-<a name="l02129"></a>02129   check_nomsg(*bkg=cpl_image_get_median(img_bkg));
-<a name="l02130"></a>02130   check_nomsg(*std=cpl_image_get_stdev(img_bkg));
-<a name="l02131"></a>02131   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sky bkg: %f"</span>,*bkg);
-<a name="l02132"></a>02132   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sky stdev: %f"</span>,*std);
-<a name="l02133"></a>02133 
-<a name="l02134"></a>02134 
-<a name="l02135"></a>02135 cleanup:
-<a name="l02136"></a>02136   sinfo_free_image(&img_bkg);
-<a name="l02137"></a>02137 
-<a name="l02138"></a>02138   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l02139"></a>02139     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l02140"></a>02140   } <span class="keywordflow">else</span> {
-<a name="l02141"></a>02141     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l02142"></a>02142   }
-<a name="l02143"></a>02143 
-<a name="l02144"></a>02144 
-<a name="l02145"></a>02145 }
-<a name="l02146"></a>02146 
-<a name="l02159"></a>02159 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l02160"></a>02160 cpl_error_code
-<a name="l02161"></a>02161 sinfo_compute_psf(<span class="keyword">const</span> <span class="keywordtype">double</span> dia,
-<a name="l02162"></a>02162           <span class="keyword">const</span> <span class="keywordtype">double</span> occ,
-<a name="l02163"></a>02163           <span class="keyword">const</span> <span class="keywordtype">double</span> lambda,
-<a name="l02164"></a>02164           <span class="keyword">const</span> <span class="keywordtype">double</span> psize,
-<a name="l02165"></a>02165           <span class="keyword">const</span> <span class="keywordtype">double</span> cx,
-<a name="l02166"></a>02166           <span class="keyword">const</span> <span class="keywordtype">double</span> cy,
-<a name="l02167"></a>02167           <span class="keyword">const</span> <span class="keywordtype">double</span> anamorph,
-<a name="l02168"></a>02168           <span class="keywordtype">double</span>* psf_peak)
-<a name="l02169"></a>02169 {
-<a name="l02170"></a>02170 
-<a name="l02171"></a>02171   <span class="keywordtype">int</span> bin=SINFO_PSF_BIN;
-<a name="l02172"></a>02172   <span class="keywordtype">int</span> npoints=SINFO_PSF_NPOINT;
-<a name="l02173"></a>02173 
-<a name="l02174"></a>02174   <span class="keywordtype">int</span> dim=SINFO_PSF_DIM;
-<a name="l02175"></a>02175   <span class="keywordtype">int</span> blocks=SINFO_PSF_BLOCKS;
-<a name="l02176"></a>02176   <span class="keywordtype">int</span> sx=dim;
-<a name="l02177"></a>02177   <span class="keywordtype">int</span> sy=dim;
-<a name="l02178"></a>02178 
-<a name="l02179"></a>02179 
-<a name="l02180"></a>02180   <span class="keywordtype">int</span> i=0;
-<a name="l02181"></a>02181   <span class="keywordtype">int</span> j=0;
-<a name="l02182"></a>02182   <span class="keywordtype">double</span> k=0;
-<a name="l02183"></a>02183 
-<a name="l02184"></a>02184   <span class="keywordtype">int</span> ii=0;
-<a name="l02185"></a>02185   <span class="keywordtype">int</span> jj=0;
-<a name="l02186"></a>02186   <span class="keywordtype">int</span> start=0;
-<a name="l02187"></a>02187 
-<a name="l02188"></a>02188   <span class="keywordtype">double</span> nyquist=lambda/dia/2.*206265/psize*bin;
-<a name="l02189"></a>02189   <span class="keywordtype">double</span> cor=0.;
-<a name="l02190"></a>02190   <span class="keywordtype">double</span> v0=0;
-<a name="l02191"></a>02191   <span class="keywordtype">double</span> ll[npoints];
-<a name="l02192"></a>02192   <span class="keywordtype">double</span> part[npoints];
-<a name="l02193"></a>02193   <span class="keywordtype">double</span> ee;
-<a name="l02194"></a>02194   <span class="keywordtype">double</span> dll=0;
-<a name="l02195"></a>02195   <span class="keywordtype">double</span> tot1=0;
-<a name="l02196"></a>02196   <span class="keywordtype">double</span> tot2=0;
-<a name="l02197"></a>02197 
-<a name="l02198"></a>02198 
-<a name="l02199"></a>02199   <span class="keywordtype">double</span> fct=0;
-<a name="l02200"></a>02200 
-<a name="l02201"></a>02201   <span class="keywordtype">double</span>* pxx=NULL;
-<a name="l02202"></a>02202   <span class="keywordtype">double</span>* pyy=NULL;
-<a name="l02203"></a>02203   <span class="keywordtype">double</span>* prr=NULL;
-<a name="l02204"></a>02204   <span class="keywordtype">double</span>* ppsf0=NULL;
-<a name="l02205"></a>02205 
-<a name="l02206"></a>02206   <span class="keywordtype">double</span>* pcor=NULL;
-<a name="l02207"></a>02207   <span class="keywordtype">double</span>* pairy=NULL;
-<a name="l02208"></a>02208   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l02209"></a>02209 
-<a name="l02210"></a>02210   cpl_image* img_xx=NULL;
-<a name="l02211"></a>02211   cpl_image* img_yy=NULL;
-<a name="l02212"></a>02212   cpl_image* img_rr=NULL;
-<a name="l02213"></a>02213   cpl_image* img_rrcor=NULL;
-<a name="l02214"></a>02214   cpl_image* img_airy=NULL;
-<a name="l02215"></a>02215   cpl_image* img_w=NULL;
-<a name="l02216"></a>02216   cpl_image* img_psf0=NULL;
-<a name="l02217"></a>02217 
-<a name="l02218"></a>02218 
-<a name="l02219"></a>02219 
-<a name="l02220"></a>02220   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"lambda=%g"</span>,lambda);
-<a name="l02221"></a>02221   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dia=%f"</span>,dia);
-<a name="l02222"></a>02222   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"psize=%f"</span>,psize);
-<a name="l02223"></a>02223   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"bin=%d"</span>,bin);
-<a name="l02224"></a>02224   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"nyquist=%f"</span>,nyquist);
-<a name="l02225"></a>02225 
-<a name="l02226"></a>02226   check_nomsg(img_xx=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE));
-<a name="l02227"></a>02227   img_yy=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
-<a name="l02228"></a>02228   img_rr=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
-<a name="l02229"></a>02229   img_rrcor=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
-<a name="l02230"></a>02230 
-<a name="l02231"></a>02231   pxx=cpl_image_get_data_double(img_xx);
-<a name="l02232"></a>02232   pyy=cpl_image_get_data_double(img_yy);
-<a name="l02233"></a>02233   prr=cpl_image_get_data_double(img_rr);
-<a name="l02234"></a>02234 
-<a name="l02235"></a>02235   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l02236"></a>02236     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l02237"></a>02237       <span class="comment">//xz plane increasing along y</span>
-<a name="l02238"></a>02238       pxx[j*sx+i]=(i-sx/2-cx*bin)/nyquist*SINFO_MATH_PI/2;
-<a name="l02239"></a>02239       <span class="comment">//yz plane increasing along x</span>
-<a name="l02240"></a>02240       pyy[j*sx+i]=(j-sy/2-cy*bin)/nyquist*SINFO_MATH_PI/2*anamorph;
-<a name="l02241"></a>02241 
-<a name="l02242"></a>02242       <span class="comment">//combinex xyz surface</span>
-<a name="l02243"></a>02243       prr[j*sx+i]=sqrt(pxx[j*sx+i]*pxx[j*sx+i]+pyy[j*sx+i]*pyy[j*sx+i]);
-<a name="l02244"></a>02244     }
-<a name="l02245"></a>02245   }
-<a name="l02246"></a>02246 
-<a name="l02247"></a>02247   <span class="comment">/*</span>
-<a name="l02248"></a>02248 <span class="comment">  check_nomsg(cpl_image_save(img_xx,"out_xx.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02249"></a>02249 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02250"></a>02250 <span class="comment"></span>
-<a name="l02251"></a>02251 <span class="comment">  check_nomsg(cpl_image_save(img_yy,"out_yy.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02252"></a>02252 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02253"></a>02253 <span class="comment"></span>
-<a name="l02254"></a>02254 <span class="comment">  check_nomsg(cpl_image_save(img_rr,"out_rr.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02255"></a>02255 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02256"></a>02256 <span class="comment"></span>
-<a name="l02257"></a>02257 <span class="comment">  */</span>
-<a name="l02258"></a>02258 
-<a name="l02259"></a>02259   img_rrcor=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
-<a name="l02260"></a>02260 
-<a name="l02261"></a>02261   cor=1./(1.-occ*occ);
-<a name="l02262"></a>02262   cor*=cor;
-<a name="l02263"></a>02263 
-<a name="l02264"></a>02264   img_rrcor=cpl_image_duplicate(img_rr);
-<a name="l02265"></a>02265   cpl_image_multiply_scalar(img_rrcor,cor);
-<a name="l02266"></a>02266   pcor=cpl_image_get_data_double(img_rrcor);
-<a name="l02267"></a>02267 
-<a name="l02268"></a>02268   <span class="comment">/*</span>
-<a name="l02269"></a>02269 <span class="comment">  check_nomsg(cpl_image_save(img_rrcor,"out_rrcor.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02270"></a>02270 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02271"></a>02271 <span class="comment">  */</span>
-<a name="l02272"></a>02272 
-<a name="l02273"></a>02273   img_airy=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);
-<a name="l02274"></a>02274   pairy=cpl_image_get_data_double(img_airy);
-<a name="l02275"></a>02275 
-<a name="l02276"></a>02276 
-<a name="l02277"></a>02277   <span class="keywordflow">if</span> (occ == 0.0) {
-<a name="l02278"></a>02278 
-<a name="l02279"></a>02279     <span class="keywordflow">for</span>(j=0;j<sx;j++) {
-<a name="l02280"></a>02280       <span class="keywordflow">for</span>(i=0;i<sy;i++) {
-<a name="l02281"></a>02281     fct=(2.*j1(prr[j*sx+i])/prr[j*sx+i]);
-<a name="l02282"></a>02282     pairy[j*sx+i]=fct*fct;
-<a name="l02283"></a>02283 
-<a name="l02284"></a>02284       }
-<a name="l02285"></a>02285     }
-<a name="l02286"></a>02286 
-<a name="l02287"></a>02287   } <span class="keywordflow">else</span> {
-<a name="l02288"></a>02288     <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l02289"></a>02289       <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l02290"></a>02290 
-<a name="l02291"></a>02291     fct=(2.*j1(prr[j*sx+i])/prr[j*sx+i]-occ*occ*2.*j1(pcor[j*sx+i])/pcor[j*sx+i]);
-<a name="l02292"></a>02292     pairy[j*sx+i]=cor*fct*fct;
-<a name="l02293"></a>02293 
-<a name="l02294"></a>02294       }
-<a name="l02295"></a>02295     }
-<a name="l02296"></a>02296   }
-<a name="l02297"></a>02297 
-<a name="l02298"></a>02298   <span class="comment">/*</span>
-<a name="l02299"></a>02299 <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02300"></a>02300 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02301"></a>02301 <span class="comment"></span>
-<a name="l02302"></a>02302 <span class="comment">  */</span>
-<a name="l02303"></a>02303 
-<a name="l02304"></a>02304   <span class="comment">//To remove an expected NAN value at the PSF centre we re-set PSF(centre)=1</span>
-<a name="l02305"></a>02305   img_w=cpl_image_duplicate(img_airy);
-<a name="l02306"></a>02306   pw=cpl_image_get_data_double(img_w);
-<a name="l02307"></a>02307   pairy=cpl_image_get_data_double(img_airy);
-<a name="l02308"></a>02308 
-<a name="l02309"></a>02309   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l02310"></a>02310     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l02311"></a>02311       <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pairy[i+j*sx]) && (pairy[i+j*sx] ==0)) {
-<a name="l02312"></a>02312     pairy[i+j*sx]=1.;
-<a name="l02313"></a>02313         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"====> %f"</span>,pairy[i+j*sx]);
-<a name="l02314"></a>02314       }
-<a name="l02315"></a>02315     }
-<a name="l02316"></a>02316   }
-<a name="l02317"></a>02317   pairy[sx/2+sy/2*sx]=1.;
-<a name="l02318"></a>02318 
-<a name="l02319"></a>02319   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"total-airy=%f"</span>,cpl_image_get_flux(img_airy));
-<a name="l02320"></a>02320 
-<a name="l02321"></a>02321   <span class="comment">/*</span>
-<a name="l02322"></a>02322 <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy1.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02323"></a>02323 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02324"></a>02324 <span class="comment"></span>
-<a name="l02325"></a>02325 <span class="comment">  */</span>
-<a name="l02326"></a>02326 
-<a name="l02327"></a>02327 
-<a name="l02328"></a>02328   <span class="comment">// Computation of EE</span>
-<a name="l02329"></a>02329 
-<a name="l02330"></a>02330 
-<a name="l02331"></a>02331   v0=prr[0+dim/4-1];
-<a name="l02332"></a>02332   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"v0=%12.10g"</span>,v0);
-<a name="l02333"></a>02333   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {
-<a name="l02334"></a>02334     ll[i]=(double)i/npoints*v0;
-<a name="l02335"></a>02335    }
-<a name="l02336"></a>02336   dll=ll[1]-ll[0];
-<a name="l02337"></a>02337   cor=1./(1.-occ*occ);
-<a name="l02338"></a>02338 
-<a name="l02339"></a>02339   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {
-<a name="l02340"></a>02340     part[i]=2.*j1(ll[i])/ll[i];
-<a name="l02341"></a>02341   }
-<a name="l02342"></a>02342   part[0]=1.0;
-<a name="l02343"></a>02343 
-<a name="l02344"></a>02344   tot1=0.;
-<a name="l02345"></a>02345   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {
-<a name="l02346"></a>02346     tot1+=j1(occ*ll[i])*part[i]*dll;
-<a name="l02347"></a>02347   }
-<a name="l02348"></a>02348   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot=%10.8f"</span>,tot1);
-<a name="l02349"></a>02349 
-<a name="l02350"></a>02350 
-<a name="l02351"></a>02351   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"cor=%10.8f"</span>,cor);
-<a name="l02352"></a>02352 
-<a name="l02353"></a>02353   ee=(1.-j0(v0)*j0(v0));
-<a name="l02354"></a>02354 
-<a name="l02355"></a>02355   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"(1-j0(v0)*j0(v0))=%10.8f"</span>,ee);
-<a name="l02356"></a>02356 
-<a name="l02357"></a>02357 
-<a name="l02358"></a>02358   ee-=(j1(v0))*(j1(v0));
-<a name="l02359"></a>02359   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"j1^2=%10.8f"</span>,(j1(v0))*(j1(v0)));
-<a name="l02360"></a>02360   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);
-<a name="l02361"></a>02361 
-<a name="l02362"></a>02362   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"factor=%10.8f"</span>,
-<a name="l02363"></a>02363           occ*occ*(1-j0(occ*v0)*j0(occ*v0)-j1(occ*v0)*j1(occ*v0)));
-<a name="l02364"></a>02364 
-<a name="l02365"></a>02365 
-<a name="l02366"></a>02366   ee+=occ*occ*(1-j0(occ*v0)*j0(occ*v0)-j1(occ*v0)*j1(occ*v0));
-<a name="l02367"></a>02367   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);
-<a name="l02368"></a>02368 
-<a name="l02369"></a>02369   ee-=2.*occ*tot1;
-<a name="l02370"></a>02370   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);
-<a name="l02371"></a>02371 
-<a name="l02372"></a>02372   ee*=cor;
-<a name="l02373"></a>02373   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);
-<a name="l02374"></a>02374 
-<a name="l02375"></a>02375 
-<a name="l02376"></a>02376   tot1=0;
-<a name="l02377"></a>02377   pairy=cpl_image_get_data_double(img_airy);
-<a name="l02378"></a>02378   prr=cpl_image_get_data_double(img_rr);
-<a name="l02379"></a>02379   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l02380"></a>02380     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l02381"></a>02381       <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pairy[i+j*sx]) && (prr[i+j*sx] <v0)) {
-<a name="l02382"></a>02382     tot1+=pairy[i+j*sx]*ee;
-<a name="l02383"></a>02383     <span class="comment">//sinfo_msg_debug("tot=%f",tot1);</span>
-<a name="l02384"></a>02384 
-<a name="l02385"></a>02385       }
-<a name="l02386"></a>02386     }
-<a name="l02387"></a>02387   }
-<a name="l02388"></a>02388 
-<a name="l02389"></a>02389   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot=%10.8f"</span>,tot1);
-<a name="l02390"></a>02390   cpl_image_divide_scalar(img_airy,tot1);
-<a name="l02391"></a>02391 
-<a name="l02392"></a>02392   <span class="comment">/*</span>
-<a name="l02393"></a>02393 <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy2.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02394"></a>02394 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02395"></a>02395 <span class="comment"></span>
-<a name="l02396"></a>02396 <span class="comment">  */</span>
-<a name="l02397"></a>02397 
-<a name="l02398"></a>02398 
-<a name="l02399"></a>02399   <span class="comment">// Computation of maximum</span>
-<a name="l02400"></a>02400 
-<a name="l02401"></a>02401   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dim=%d blocks=%d,bin=%d"</span>,dim,blocks,bin);
-<a name="l02402"></a>02402   start=(dim/2-1)-(blocks/2*bin-1)-bin/2;
-<a name="l02403"></a>02403   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"start=%d"</span>,start);
-<a name="l02404"></a>02404 
-<a name="l02405"></a>02405   img_psf0=cpl_image_new(blocks,blocks,CPL_TYPE_DOUBLE);
-<a name="l02406"></a>02406   ppsf0=cpl_image_get_data_double(img_psf0);
-<a name="l02407"></a>02407   tot1=0.;
-<a name="l02408"></a>02408   tot2=0.;
-<a name="l02409"></a>02409 
-<a name="l02410"></a>02410   <span class="keywordflow">for</span>(j=0;j<blocks;j++) {
-<a name="l02411"></a>02411     <span class="keywordflow">for</span>(i=0;i<blocks;i++) {
-<a name="l02412"></a>02412       tot1=0;
-<a name="l02413"></a>02413       <span class="keywordflow">for</span>(jj=start+j*bin;jj<start+(j+1)*bin-1;jj++){
-<a name="l02414"></a>02414     <span class="keywordflow">for</span>(ii=start+i*bin;ii<start+(i+1)*bin-1;ii++){
-<a name="l02415"></a>02415           <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pairy[ii+jj*sx])) {
-<a name="l02416"></a>02416         tot1+=pairy[ii+jj*sx];
-<a name="l02417"></a>02417       }
-<a name="l02418"></a>02418     }
-<a name="l02419"></a>02419       }
-<a name="l02420"></a>02420       ppsf0[i+j*blocks]=tot1;
-<a name="l02421"></a>02421       tot2+=tot1;
-<a name="l02422"></a>02422     }
-<a name="l02423"></a>02423   }
-<a name="l02424"></a>02424 
-<a name="l02425"></a>02425   cpl_image_divide_scalar(img_psf0,tot2);
-<a name="l02426"></a>02426   <span class="comment">/*</span>
-<a name="l02427"></a>02427 <span class="comment">  check_nomsg(cpl_image_save(img_psf0,"out_psf0.fits", CPL_BPP_IEEE_DOUBLE,</span>
-<a name="l02428"></a>02428 <span class="comment">                 NULL,CPL_IO_DEFAULT));</span>
-<a name="l02429"></a>02429 <span class="comment"></span>
-<a name="l02430"></a>02430 <span class="comment">  */</span>
-<a name="l02431"></a>02431   k=180.*3600./SINFO_MATH_PI;
-<a name="l02432"></a>02432   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"k=%f"</span>,k);
-<a name="l02433"></a>02433   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"radius of first zero: 1.22*lambda/d*k:=%f"</span>,
-<a name="l02434"></a>02434             1.22*lambda/dia*k);
-<a name="l02435"></a>02435   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot: %f"</span>,tot2);
-<a name="l02436"></a>02436   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"max: %f"</span>,cpl_image_get_max(img_psf0)*tot2);
-<a name="l02437"></a>02437   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"max/tot: %f"</span>,cpl_image_get_max(img_psf0));
-<a name="l02438"></a>02438   *psf_peak=cpl_image_get_max(img_psf0);
-<a name="l02439"></a>02439 
-<a name="l02440"></a>02440   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"d=%g ob=%g w=%g ps=%g cx=%g cy=%g a=%g peak=%10.8g"</span>,
-<a name="l02441"></a>02441             dia,occ,lambda,psize,cx,cy,anamorph,*psf_peak);
-<a name="l02442"></a>02442 
-<a name="l02443"></a>02443 
-<a name="l02444"></a>02444 
-<a name="l02445"></a>02445  cleanup:
-<a name="l02446"></a>02446   sinfo_free_image(&img_xx);
-<a name="l02447"></a>02447   sinfo_free_image(&img_yy);
-<a name="l02448"></a>02448   sinfo_free_image(&img_rr);
-<a name="l02449"></a>02449   sinfo_free_image(&img_rrcor);
-<a name="l02450"></a>02450   sinfo_free_image(&img_airy);
-<a name="l02451"></a>02451 
-<a name="l02452"></a>02452 
-<a name="l02453"></a>02453   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l02454"></a>02454     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l02455"></a>02455   } <span class="keywordflow">else</span> {
-<a name="l02456"></a>02456     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l02457"></a>02457   }
-<a name="l02458"></a>02458 
-<a name="l02459"></a>02459 }
-<a name="l02460"></a>02460 
-<a name="l02461"></a>02461 
-<a name="l02462"></a>02462 cpl_error_code
-<a name="l02463"></a>02463 sinfo_get_flux_above_bkg(<span class="keyword">const</span> cpl_image* img,
-<a name="l02464"></a>02464                          <span class="keyword">const</span> <span class="keywordtype">float</span> kappa,
-<a name="l02465"></a>02465                          <span class="keyword">const</span> <span class="keywordtype">float</span> std,
-<a name="l02466"></a>02466                          <span class="keywordtype">double</span>* f)
-<a name="l02467"></a>02467 {
-<a name="l02468"></a>02468 
-<a name="l02469"></a>02469   <span class="keyword">const</span> <span class="keywordtype">float</span>* pimg=NULL;
-<a name="l02470"></a>02470   <span class="keywordtype">int</span> sx=0;
-<a name="l02471"></a>02471   <span class="keywordtype">int</span> sy=0;
-<a name="l02472"></a>02472   <span class="keywordtype">int</span> i=0;
-<a name="l02473"></a>02473   <span class="keywordtype">int</span> j=0;
-<a name="l02474"></a>02474   <span class="keywordtype">int</span> k=0;
-<a name="l02475"></a>02475   <span class="keywordtype">float</span> tot=0;
-<a name="l02476"></a>02476 
-<a name="l02477"></a>02477   cpl_image* timg=NULL;
-<a name="l02478"></a>02478   <span class="keywordtype">double</span> sky_bkg=0;
-<a name="l02479"></a>02479   <span class="keywordtype">double</span> sky_std=0;
-<a name="l02480"></a>02480 
-<a name="l02481"></a>02481   timg=cpl_image_duplicate(img);
-<a name="l02482"></a>02482   cpl_image_subtract_scalar(timg,std);
-<a name="l02483"></a>02483   check_nomsg(sinfo_get_bkg_4corners(timg,SINFO_BKG_BOX_SZ,SINFO_BKG_BOX_SZ,
-<a name="l02484"></a>02484                      &sky_bkg,&sky_std));
-<a name="l02485"></a>02485 
-<a name="l02486"></a>02486   check_nomsg(pimg=cpl_image_get_data_float_const(timg));
-<a name="l02487"></a>02487 
-<a name="l02488"></a>02488   sx=cpl_image_get_size_x(img);
-<a name="l02489"></a>02489   sy=cpl_image_get_size_y(img);
-<a name="l02490"></a>02490 
-<a name="l02491"></a>02491   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l02492"></a>02492     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l02493"></a>02493       <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pimg[i+j*sx]) &&
-<a name="l02494"></a>02494           (pimg[i+j*sx]>(sky_bkg+kappa*sky_std))) {
-<a name="l02495"></a>02495     tot+=(double)pimg[i+j*sx];
-<a name="l02496"></a>02496     k++;
-<a name="l02497"></a>02497       }
-<a name="l02498"></a>02498     }
-<a name="l02499"></a>02499   }
-<a name="l02500"></a>02500 
-<a name="l02501"></a>02501   *f=(double)(tot-k*sky_bkg);
-<a name="l02502"></a>02502 
-<a name="l02503"></a>02503  cleanup:
-<a name="l02504"></a>02504   sinfo_free_image(&timg);
-<a name="l02505"></a>02505 
-<a name="l02506"></a>02506   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l02507"></a>02507     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l02508"></a>02508   } <span class="keywordflow">else</span> {
-<a name="l02509"></a>02509     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l02510"></a>02510   }
-<a name="l02511"></a>02511 
-<a name="l02512"></a>02512 }
-<a name="l02513"></a>02513 
-<a name="l02514"></a>02514 
-<a name="l02515"></a>02515 
-<a name="l02516"></a>02516 <span class="comment">/*</span>
-<a name="l02517"></a>02517 <span class="comment">cpl_error_code</span>
-<a name="l02518"></a>02518 <span class="comment">sinfo_get_centroid(const cpl_image* img,</span>
-<a name="l02519"></a>02519 <span class="comment">                   const int d,</span>
-<a name="l02520"></a>02520 <span class="comment">                   const double xc,</span>
-<a name="l02521"></a>02521 <span class="comment">                   const double yc,</span>
-<a name="l02522"></a>02522 <span class="comment">                   double* xcen,</span>
-<a name="l02523"></a>02523 <span class="comment">                   double* ycen,</span>
-<a name="l02524"></a>02524 <span class="comment">                   double* xfwhm,</span>
-<a name="l02525"></a>02525 <span class="comment">                   double* yfwhm,</span>
-<a name="l02526"></a>02526 <span class="comment">                   double* angle)</span>
-<a name="l02527"></a>02527 <span class="comment">{</span>
-<a name="l02528"></a>02528 <span class="comment"></span>
-<a name="l02529"></a>02529 <span class="comment">  cpl_bivector* q=NULL;</span>
-<a name="l02530"></a>02530 <span class="comment">  int sx=0;</span>
-<a name="l02531"></a>02531 <span class="comment">  int sy=0;</span>
-<a name="l02532"></a>02532 <span class="comment">  double* pq=NULL;</span>
-<a name="l02533"></a>02533 <span class="comment">  double peak=0;</span>
-<a name="l02534"></a>02534 <span class="comment">  double bkg=0;</span>
-<a name="l02535"></a>02535 <span class="comment"></span>
-<a name="l02536"></a>02536 <span class="comment">  check_nomsg(sx=cpl_image_get_size_x(img));</span>
-<a name="l02537"></a>02537 <span class="comment">  check_nomsg(sy=cpl_image_get_size_y(img));</span>
-<a name="l02538"></a>02538 <span class="comment"></span>
-<a name="l02539"></a>02539 <span class="comment">  check_nomsg(q=cpl_image_iqe(img,sx/2-d,sy/2-d,sx/2+d,sy/2+d));</span>
-<a name="l02540"></a>02540 <span class="comment">  pq=cpl_bivector_get_data(q);</span>
-<a name="l02541"></a>02541 <span class="comment"></span>
-<a name="l02542"></a>02542 <span class="comment">  *xcen=pq[0];</span>
-<a name="l02543"></a>02543 <span class="comment">  *ycen=pq[1];</span>
-<a name="l02544"></a>02544 <span class="comment">  *xfwhm=pq[2];</span>
-<a name="l02545"></a>02545 <span class="comment">  *yfwhm=pq[3];</span>
-<a name="l02546"></a>02546 <span class="comment">  *angle=pq[4];</span>
-<a name="l02547"></a>02547 <span class="comment">  peak=pq[5];</span>
-<a name="l02548"></a>02548 <span class="comment">  bkg=pq[6];</span>
-<a name="l02549"></a>02549 <span class="comment"></span>
-<a name="l02550"></a>02550 <span class="comment"></span>
-<a name="l02551"></a>02551 <span class="comment"> cleanup:</span>
-<a name="l02552"></a>02552 <span class="comment"></span>
-<a name="l02553"></a>02553 <span class="comment">  sinfo_free_bivector(&q);</span>
-<a name="l02554"></a>02554 <span class="comment"></span>
-<a name="l02555"></a>02555 <span class="comment">  if (cpl_error_get_code() != CPL_ERROR_NONE) {</span>
-<a name="l02556"></a>02556 <span class="comment">    return cpl_error_get_code();</span>
-<a name="l02557"></a>02557 <span class="comment">  } else {</span>
-<a name="l02558"></a>02558 <span class="comment">    return CPL_ERROR_NONE;</span>
-<a name="l02559"></a>02559 <span class="comment">  }</span>
-<a name="l02560"></a>02560 <span class="comment"></span>
-<a name="l02561"></a>02561 <span class="comment">}</span>
-<a name="l02562"></a>02562 <span class="comment">*/</span>
-<a name="l02563"></a>02563 
-<a name="l02564"></a>02564 
-<a name="l02565"></a>02565 
-<a name="l02566"></a>02566 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l02567"></a>02567 sinfo_find_min_of_four(<span class="keyword">const</span> <span class="keywordtype">double</span> n1,
-<a name="l02568"></a>02568                        <span class="keyword">const</span> <span class="keywordtype">double</span> n2,
-<a name="l02569"></a>02569                        <span class="keyword">const</span> <span class="keywordtype">double</span> n3,
-<a name="l02570"></a>02570                        <span class="keyword">const</span> <span class="keywordtype">double</span> n4)
-<a name="l02571"></a>02571 {
-<a name="l02572"></a>02572   <span class="keywordtype">double</span> min=0;
-<a name="l02573"></a>02573   min = (n1 < n2) ? n1 : n2;
-<a name="l02574"></a>02574   min = (min < n3) ? min : n3;
-<a name="l02575"></a>02575   min = (min < n4) ? min : n4;
-<a name="l02576"></a>02576   <span class="keywordflow">return</span> min;
-<a name="l02577"></a>02577 }
-<a name="l02578"></a>02578 
-<a name="l02579"></a>02579 <span class="keywordtype">double</span>
-<a name="l02580"></a>02580 sinfo_scale_flux(<span class="keyword">const</span> <span class="keywordtype">double</span> p1,
-<a name="l02581"></a>02581                  <span class="keyword">const</span> <span class="keywordtype">double</span> p2,
-<a name="l02582"></a>02582                  <span class="keyword">const</span> <span class="keywordtype">double</span> t1,
-<a name="l02583"></a>02583                  <span class="keyword">const</span> <span class="keywordtype">double</span> t2)
-<a name="l02584"></a>02584 {
-<a name="l02585"></a>02585 
-<a name="l02586"></a>02586   <span class="keywordflow">return</span> (p2/p1)*(p2/p1)*(t2/t1);
-<a name="l02587"></a>02587 
-<a name="l02588"></a>02588 }
-<a name="l02589"></a>02589 
-<a name="l02590"></a>02590 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_psf.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">     File name    :       sinfo_new_psf.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> sinfo_new_psf.py does the image reconstruction of a set of</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> sky-subtracted, flatfielded,</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> star with continuum spectrum. The resulting image can be used to determine</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> the PSF</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#define _GNU_SOURCE</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <irplib_strehl.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_new_psf.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_psf_ini.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_psf_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">//Used only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                                                    <span class="comment">//PSO</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define SINFO_MATH_PI   3.1415926535897932384626433832795028841971693993751058</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATH_PI_2 1.5707963267948966192313216916397514420985846996875529</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MATH_PI_4 0.7853981633974483096156608458198757210492923498437765</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#define SINFO_STREHL_M1                       8.0  //7.9</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_M2                       1.1  //1.33</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_BOX_SIZE                 64</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_WINDOW                   6</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_SZ                          4</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RSTAR                           32//25</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_R1                          32//25</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_R2                          33//27</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_ERROR_COEFFICIENT    SINFO_MATH_PI * 0.007 / 0.0271</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef SINFO_STREHL_RAD_CENTRAL</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STREHL_RAD_CENTRAL 5</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">//constants for perfect PSF generation</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">// Dimension of the support for generating the perfect PFS</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#define SINFO_PSF_DIM   1024//256</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_BLOCKS   63//11</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#define SINFO_PSF_BIN    16 // Pixels over "pixel_size"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_NPOINT 10000// number of encircled energy sampling points</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BKG_BOX_SZ 8</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> sinfo_add_com_psf_qclog(<span class="keyword">const</span> <span class="keywordtype">char</span>* fname,cpl_table** qclog_tbl);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_get_star_features(<span class="keyword">const</span> cpl_image* im,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                         <span class="keyword">const</span> <span class="keywordtype">int</span> radius,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                         <span class="keywordtype">double</span>* xc,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                         <span class="keywordtype">double</span>* yc,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                         <span class="keywordtype">double</span>* pick,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                         <span class="keywordtype">double</span>* flux,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                         <span class="keywordtype">double</span>* bkg);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> sinfo_find_min_of_four(<span class="keyword">const</span> <span class="keywordtype">double</span> n1,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n2,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n3,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n4);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> sinfo_get_strehl_from_2images(cpl_image* ima1,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                              cpl_image* ima2,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                              cpl_frame* frm1,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                   cpl_frame* frm2);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> sinfo_get_strehl_input1(cpl_frame* frm1,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                 <span class="keywordtype">double</span>* dispersion,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                 <span class="keywordtype">double</span>* centralWave,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                 <span class="keywordtype">double</span>* ws,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                 <span class="keywordtype">double</span>* we,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                 <span class="keywordtype">double</span>* pscale,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                 <span class="keywordtype">double</span>* exptime,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>             <span class="keywordtype">double</span>* strehl_star_rad,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                 <span class="keywordtype">double</span>* strehl_bg_rmin,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                 <span class="keywordtype">double</span>* strehl_bg_rmax);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> sinfo_get_strehl_input2(cpl_frame* frm1,cpl_frame* frm2,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                <span class="keywordtype">double</span>* dispersion,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                <span class="keywordtype">double</span>* centralWave,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                <span class="keywordtype">double</span>* ws,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                <span class="keywordtype">double</span>* we,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                <span class="keywordtype">double</span>* pscale1,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                <span class="keywordtype">double</span>* pscale2,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                <span class="keywordtype">double</span>* exptime1,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                <span class="keywordtype">double</span>* exptime2,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                <span class="keywordtype">double</span>* strehl_star_rad1,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                <span class="keywordtype">double</span>* strehl_star_rad2,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                <span class="keywordtype">double</span>* strehl_bg_rmin1,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                <span class="keywordtype">double</span>* strehl_bg_rmin2,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                <span class="keywordtype">double</span>* strehl_bg_rmax1,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                <span class="keywordtype">double</span>* strehl_bg_rmax2);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> sinfo_check_borders(cpl_size* val,<span class="keyword">const</span> <span class="keywordtype">int</span> max,<span class="keyword">const</span> <span class="keywordtype">int</span> thresh);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> sinfo_get_safe_box(<span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                    <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                    <span class="keywordtype">int</span>* urx,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                    <span class="keywordtype">int</span>* ury,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> box,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> szx,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> szy);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> sinfo_get_strehl_from_slice(cpl_imagelist* cube,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                             <span class="keywordtype">double</span> disp,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                             <span class="keywordtype">double</span> cWave,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                             <span class="keywordtype">double</span> ws,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                             <span class="keywordtype">double</span> we,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                             <span class="keywordtype">double</span> pscale,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                             <span class="keywordtype">double</span> strehl_star_radius,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                             <span class="keywordtype">double</span> strehl_bg_r1,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                             <span class="keywordtype">double</span> strehl_bg_r2,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                             <span class="keywordtype">double</span>* strehl,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                             <span class="keywordtype">double</span>* strehl_err);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> sinfo_get_encircled_energy(cpl_frameset* sof,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                            cpl_image* img,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                            <span class="keywordtype">double</span>* fwhm_x,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                <span class="keywordtype">double</span>* fwhm_y,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                            cpl_table** qclog);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> sinfo_get_strehl_from_ima(cpl_image* ima,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                           cpl_frame* frame);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> sinfo_get_strehl_from_image(cpl_image* img,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                             <span class="keywordtype">double</span> ws,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                             <span class="keywordtype">double</span> we,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                             <span class="keywordtype">double</span> pscale,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                             <span class="keywordtype">double</span> strehl_star_radius,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                             <span class="keywordtype">double</span> strehl_bg_r1,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                             <span class="keywordtype">double</span> strehl_bg_r2,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                             <span class="keywordtype">double</span>* strehl,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                 <span class="keywordtype">double</span>* strehl_err);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> sinfo_get_strehl_from_cube(cpl_imagelist* cube,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                            <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                            cpl_frame* frame);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> sinfo_get_frm12(cpl_frameset* sof,cpl_frame** frm1,cpl_frame** frm2);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">   Function     :       sinfo_new_psf()</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment"></span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment"> sinfo_new_psf.py does the image reconstruction of a set of sky-subtracted,</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment"> flatfielded,</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment"> star with continuum spectrum. The resulting image can be used to determine</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment"> the PSF</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment"></span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> sinfo_new_psf (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                cpl_parameterlist* config,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                cpl_frameset* sof, cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cpl_imagelist* cube1=NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   cpl_imagelist* cube2=NULL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   cpl_image * med_img1=NULL ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   cpl_image * med_img2=NULL ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_table* ao_performance=NULL;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   cpl_table* enc_energy=NULL;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   cpl_frame* frm1=NULL;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   cpl_frame* frm2=NULL;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   cpl_frameset* stk=NULL;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   cpl_propertylist* plist =NULL;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   psf_config * cfg =NULL;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">int</span> strehl_sw=0;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="keywordtype">int</span> ilx1=0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordtype">int</span> ily1=0;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordtype">int</span> ilx2=0;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordtype">int</span> ily2=0;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordtype">float</span> cx1=0;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordtype">float</span> cy1=0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordtype">float</span> cx2=0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordtype">float</span> cy2=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   <span class="keywordtype">double</span> fwhm_x=0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordtype">double</span> fwhm_y=0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordtype">double</span> lam=0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordtype">double</span> strehl=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordtype">double</span> strehl1=0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordtype">double</span> strehl2=0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordtype">char</span> fname1[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordtype">char</span> fname2[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordtype">char</span> obs_name1[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   <span class="keywordtype">char</span> hlamp_st=<span class="charliteral">'F'</span>;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="keywordtype">char</span> shut2_st=<span class="charliteral">'F'</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   cpl_table* tmp_tbl=NULL;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">       1) parse the file names and parameters to the psf_config data</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">          structure cfg</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   check_nomsg(stk=cpl_frameset_new());</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   cknull(cfg = sinfo_parse_cpl_input_psf(sof,&stk),</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       <span class="stringliteral">"error parsing cpl input"</span>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="comment">/* TODO the following generate a small leak of 72 bytes */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   strehl_sw=sinfo_get_strehl_type(sof);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">if</span>(strehl_sw==0) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     sinfo_msg(<span class="stringliteral">"One target Strehl computation"</span>);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       strcpy(fname1,cfg->inFrame);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       frm1 = cpl_frameset_find(sof,PRO_COADD_PSF);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       frm1 = cpl_frameset_find(sof,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       frm1 = cpl_frameset_find(sof,PRO_COADD_STD);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       frm1 = cpl_frameset_find(sof,PRO_OBS_STD);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       frm1 = cpl_frameset_find(sof,PRO_COADD_OBJ);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       frm1 = cpl_frameset_find(sof,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s  or %s or %s  or %s or %s  or %s not found!"</span>,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>               PRO_COADD_PSF,PRO_OBS_PSF,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>               PRO_COADD_STD,PRO_OBS_STD,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>               PRO_COADD_OBJ,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     sinfo_get_obsname(frm1,obs_name1);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     check_nomsg(hlamp_st=sinfo_get_keyvalue_bool(frm1,KEY_NAME_LAMP_HALO));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     check_nomsg(shut2_st=sinfo_get_keyvalue_bool(frm1,KEY_NAME_SHUT2_ST));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     check_nomsg(cube1 = cpl_imagelist_load(fname1,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     cknull(med_img1=sinfo_new_median_cube(cube1),</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       <span class="stringliteral">" could not do sinfo_medianCube()"</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     check_nomsg(ilx1=cpl_image_get_size_x(med_img1));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     check_nomsg(ily1=cpl_image_get_size_y(med_img1));</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     cx1 = ilx1 / 2. + 0.5;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     cy1 = ily1 / 2. + 0.5;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     cknull(ao_performance=sinfo_get_strehl_from_cube(cube1,fname1,frm1),</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>        <span class="stringliteral">"error computing strehl"</span>);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     strehl=sinfo_get_strehl_from_ima(med_img1,frm1);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     sinfo_free_imagelist(&cube1);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     sinfo_msg(<span class="stringliteral">"Two target Strehl computation"</span>);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     sinfo_get_frm12(sof,&frm1,&frm2);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     strcpy(fname1,cpl_frame_get_filename(frm1));</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     strcpy(fname2,cpl_frame_get_filename(frm2));</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     check_nomsg(cube1 = cpl_imagelist_load(fname1,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     check_nomsg(cube2 = cpl_imagelist_load(fname2,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     cknull(med_img1=sinfo_new_median_cube(cube1),<span class="stringliteral">"Computing median on cube"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     cknull(med_img2=sinfo_new_median_cube(cube2),<span class="stringliteral">"Computing median on cube"</span>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     check_nomsg(cpl_image_save(med_img1,<span class="stringliteral">"med_img1.fits"</span>,CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                    NULL,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     check_nomsg(cpl_image_save(med_img2,<span class="stringliteral">"med_img2.fits"</span>,CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                    NULL,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     check_nomsg(ilx1=cpl_image_get_size_x(med_img1));</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     check_nomsg(ily1=cpl_image_get_size_y(med_img1));</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     check_nomsg(ilx2=cpl_image_get_size_x(med_img2));</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     check_nomsg(ily2=cpl_image_get_size_y(med_img2));</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     cx1 = ilx1 / 2. + 0.5;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     cy1 = ily1 / 2. + 0.5;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     cx2 = ilx2 / 2. + 0.5;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     cy2 = ily2 / 2. + 0.5;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     sinfo_free_imagelist(&cube1);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     sinfo_free_imagelist(&cube2);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     cknull(tmp_tbl=sinfo_get_strehl_from_2images(med_img1,med_img2,frm1,frm2),</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>        <span class="stringliteral">"Computing strehl"</span>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     check_nomsg(strehl=cpl_table_get_double(tmp_tbl,<span class="stringliteral">"strehl"</span>,0,&status));</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     sinfo_free_table(&tmp_tbl);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     strehl1=sinfo_get_strehl_from_ima(med_img1,frm1);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Strehl on 1st image=%f"</span>,strehl);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     strehl2=sinfo_get_strehl_from_ima(med_img2,frm2);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Strehl on 2nd image=%f"</span>,strehl);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     check_nomsg(sinfo_add_com_psf_qclog(fname1,&qclog_tbl));</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     <span class="keywordflow">if</span>(irplib_isnan(strehl1)) strehl1=-100.;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL025"</span>,strehl1,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             <span class="stringliteral">"STREHL 25 mas"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     ck0(sinfo_pro_save_ima(med_img1,ref_set,sof,PSF_MED_CUB_025_FILENAME,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                PRO_MED_COADD_PSF,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="stringliteral">"cannot save ima %s"</span>, PSF_MED_CUB_100_FILENAME);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     check_nomsg(sinfo_add_com_psf_qclog(fname2,&qclog_tbl));</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordflow">if</span>(irplib_isnan(strehl2)) strehl2=-100.;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL100"</span>,strehl2,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>             <span class="stringliteral">"STREHL 100 mas"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordflow">if</span>(irplib_isnan(strehl)) strehl=-100.;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL"</span>,strehl,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>             <span class="stringliteral">"STREHL from both pixel scale images"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     ck0(sinfo_pro_save_ima(med_img2,ref_set,sof,PSF_MED_CUB_100_FILENAME,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                PRO_MED_COADD_PSF,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="stringliteral">"cannot save ima %s"</span>, PSF_MED_CUB_100_FILENAME);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     sinfo_free_image(&med_img2);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   <span class="comment">/* STREHL computation */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   check_nomsg(nsample=cpl_table_get_nrow(ao_performance));</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   check_nomsg(sinfo_add_com_psf_qclog(fname1,&qclog_tbl));</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordflow">if</span>(strehl_sw==0) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     <span class="keywordflow">if</span>(irplib_isnan(strehl)) strehl=-100.;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL"</span>,strehl,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>             <span class="stringliteral">"STREHL from image"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   check_nomsg(strehl=cpl_table_get_column_median(ao_performance,<span class="stringliteral">"strehl"</span>));</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL MED"</span>,strehl,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             <span class="stringliteral">"STREHL MEDIAN"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   check_nomsg(strehl=cpl_table_get_column_mean(ao_performance,<span class="stringliteral">"strehl"</span>));</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL AVG"</span>,strehl,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             <span class="stringliteral">"STREHL AVERAGE"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment">  strehl=sinfo_get_strehl_from_ima(med_img1,frm1);</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="comment"></span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">  ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC STREHL AVG",strehl,</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">            "STREHL AVERAGE","%f"));</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   <span class="keywordflow">for</span>(i=1;i<nsample;i++) {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     check_nomsg(strehl=cpl_table_get_double(ao_performance,<span class="stringliteral">"strehl"</span>,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                                             i,&status));</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordflow">if</span>(irplib_isnan(strehl)) strehl=-100.;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC STREHL"</span>,i);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,strehl,<span class="stringliteral">"STREHL"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     check_nomsg(lam=cpl_table_get_double(ao_performance,<span class="stringliteral">"wavelength"</span>,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                                          i,&status));</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"QC LAMBDA"</span>,i);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,lam,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                      <span class="stringliteral">"WAVELENGTH"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   check_nomsg(strehl=cpl_table_get_column_median(ao_performance,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                                  <span class="stringliteral">"strehl_error"</span>));</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC STREHL MEDERR"</span>,strehl,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                                    <span class="stringliteral">"STREHL ERROR MEDIAN"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   ck0_nomsg(sinfo_qclog_add_string(qclog_tbl,<span class="stringliteral">"OBS NAME"</span>,obs_name1,</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                                    <span class="stringliteral">"OB name"</span>,<span class="stringliteral">"%s"</span>));</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_LAMP_HALO,hlamp_st,</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>                                   KEY_NAME_LAMP_HALO,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_SHUT2_ST,shut2_st,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                                   KEY_NAME_SHUT2_ST,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   ck0(sinfo_pro_save_tbl(ao_performance,ref_set,sof,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                   PSF_AO_PERFORMANCE_OUT_FILENAME,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>              PRO_AO_PERFORMANCE,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="stringliteral">"cannot save tbl %s"</span>, PSF_AO_PERFORMANCE_OUT_FILENAME);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   sinfo_free_table(&ao_performance);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   <span class="comment">/* Encircled energy & FWHM computation */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   cknull_nomsg(qclog_tbl=sinfo_qclog_init());</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   cknull(enc_energy=sinfo_get_encircled_energy(sof,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                            med_img1,</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                            &fwhm_x,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                            &fwhm_y,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                            &qclog_tbl),</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>            <span class="stringliteral">"Computing encircled energy"</span>);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   ck0(sinfo_pro_save_tbl(enc_energy,ref_set,sof,PSF_ENC_ENERGY_OUT_FILENAME,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>              PRO_ENC_ENERGY,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       <span class="stringliteral">"cannot save tbl %s"</span>, PSF_ENC_ENERGY_OUT_FILENAME);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   sinfo_free_table(&enc_energy);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <span class="comment">/* QC log */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMX"</span>,fwhm_x,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                                    <span class="stringliteral">"QC FWHM X"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMY"</span>,fwhm_y,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                                    <span class="stringliteral">"QC FWHM Y"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_LAMP_HALO,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                                  hlamp_st,KEY_NAME_LAMP_HALO,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   ck0_nomsg(sinfo_qclog_add_bool(qclog_tbl,PAF_NAME_SHUT2_ST,shut2_st,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                                  KEY_NAME_SHUT2_ST,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>   ck0(sinfo_pro_save_ima(med_img1,ref_set,sof,cfg->outName,PRO_PSF,</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>              qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>       <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   sinfo_new_set_wcs_image(med_img1,cfg->outName,cx1, cy1);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   sinfo_free_image(&med_img1);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   sinfo_free_psf(&cfg);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>  cleanup:</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   sinfo_free_imagelist(&cube2);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   sinfo_free_imagelist(&cube1);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   sinfo_free_table(&enc_energy);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   sinfo_free_image(&med_img1);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   sinfo_free_table(&ao_performance);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   sinfo_free_psf(&cfg);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   sinfo_free_frameset(&stk);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> }</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> sinfo_add_com_psf_qclog(<span class="keyword">const</span> <span class="keywordtype">char</span>* fname,cpl_table** qclog_tbl)</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   <span class="comment">/* QC log */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   cknull(plist = cpl_propertylist_load(fname, 0),</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>      <span class="stringliteral">"getting header from reference ima frame %s"</span>,fname);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LOOP_STATE)) {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     sinfo_qclog_add_string(*qclog_tbl,KEY_NAME_LOOP_STATE,</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>                       cpl_propertylist_get_string(plist,KEY_NAME_LOOP_STATE),</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                       KEY_HELP_LOOP_STATE,<span class="stringliteral">"%s"</span>);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>   }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LOOP_LGS)) {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     sinfo_qclog_add_int(*qclog_tbl,KEY_NAME_LOOP_LGS,</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                       cpl_propertylist_get_int(plist,KEY_NAME_LOOP_LGS),</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>                       KEY_HELP_LOOP_LGS,<span class="stringliteral">"%d"</span>);</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   }</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_INS1_MODE)) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     sinfo_qclog_add_string(*qclog_tbl,KEY_NAME_INS1_MODE,</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                       cpl_propertylist_get_string(plist,KEY_NAME_INS1_MODE),</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                       KEY_HELP_INS1_MODE,<span class="stringliteral">"%s"</span>);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   }</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>  cleanup:</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> sinfo_get_strehl_from_image(cpl_image* img,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                             <span class="keywordtype">double</span> ws,</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>                             <span class="keywordtype">double</span> we,</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                             <span class="keywordtype">double</span> pscale,</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                             <span class="keywordtype">double</span> strehl_star_radius,</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                             <span class="keywordtype">double</span> strehl_bg_r1,</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                             <span class="keywordtype">double</span> strehl_bg_r2,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                             <span class="keywordtype">double</span>* strehl,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                             <span class="keywordtype">double</span>* strehl_err)</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   cpl_errorstate clean_state = cpl_errorstate_get();</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="keywordtype">double</span> dlam=0.;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="keywordtype">double</span> lam=0.;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   <span class="keywordtype">double</span> max_ima_cx=0.;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <span class="keywordtype">double</span> max_ima_cy=0.;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   <span class="keywordtype">double</span> psf_peak=0.;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   <span class="keywordtype">double</span> psf_flux=0.;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   <span class="keywordtype">double</span> bkg_noise=0.;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordtype">double</span> star_bkg=0.;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   <span class="keywordtype">double</span> star_peak=0.;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   <span class="keywordtype">double</span> star_flux=0.;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   cpl_size max_ima_x=0;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   cpl_size max_ima_y=0;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="keywordtype">int</span> wllx=0;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   <span class="keywordtype">int</span> wlly=0;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   <span class="keywordtype">int</span> wurx=0;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   <span class="keywordtype">int</span> wury=0;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   <span class="keywordtype">int</span> ima_szx=0;</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keywordtype">int</span> ima_szy=0;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   lam = (double)0.5*(ws+we);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   dlam=we-ws;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ws=%f we=%f dl=%f"</span>,ws,we,dlam);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   check_nomsg(img_dup=cpl_image_duplicate(img));</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>   sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   sinfo_free_image(&img_dup);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   check_nomsg(ima_szx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   check_nomsg(ima_szy=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   ima_szx,ima_szy);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   <span class="comment">//cpl_image_get_maxpos_window(img,wllx,wlly,wurx,wury,&max_ima_x,&max_ima_y);</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                                          wurx,wury));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   wurx,wury));</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_strehl_compute_one(img,</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>                         SINFO_STREHL_M1,</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>                         SINFO_STREHL_M2,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                         lam,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                         dlam,</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                         pscale,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                         max_ima_x,</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                         max_ima_y,</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>                         strehl_star_radius,</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>                         strehl_bg_r1,</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                         strehl_bg_r2,</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                         SINFO_STREHL_BOX_SIZE,</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                         strehl,</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                         strehl_err,</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                         &star_bkg,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                         &star_peak,</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                         &star_flux,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                         &psf_peak,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                         &psf_flux,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                         &bkg_noise)) {</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     *strehl=-1;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     *strehl_err=0;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     irplib_error_recover(clean_state,<span class="stringliteral">"Problem computing strehl"</span>);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   }</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>  cleanup:</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> sinfo_get_strehl_from_slice(cpl_imagelist* cube,</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>                             <span class="keywordtype">double</span> disp,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                             <span class="keywordtype">double</span> cWave,</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>                             <span class="keywordtype">double</span> ws,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                             <span class="keywordtype">double</span> we,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                             <span class="keywordtype">double</span> pscale,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                             <span class="keywordtype">double</span> strehl_star_radius,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                             <span class="keywordtype">double</span> strehl_bg_r1,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                             <span class="keywordtype">double</span> strehl_bg_r2,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>                             <span class="keywordtype">double</span>* strehl,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                             <span class="keywordtype">double</span>* strehl_err)</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> {</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   cpl_errorstate clean_state = cpl_errorstate_get();</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   <span class="keywordtype">double</span> dlam=0.;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   <span class="keywordtype">double</span> lam=0.;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   <span class="keywordtype">double</span> max_ima_cx=0.;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   <span class="keywordtype">double</span> max_ima_cy=0.;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="keywordtype">double</span> psf_peak=0.;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>   <span class="keywordtype">double</span> psf_flux=0.;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="keywordtype">double</span> bkg_noise=0.;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   <span class="keywordtype">double</span> star_bkg=0.;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   <span class="keywordtype">double</span> star_peak=0.;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <span class="keywordtype">double</span> star_flux=0.;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   cpl_size max_ima_x=0;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   cpl_size max_ima_y=0;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordtype">int</span> wllx=0;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   <span class="keywordtype">int</span> wlly=0;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   <span class="keywordtype">int</span> wurx=0;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   <span class="keywordtype">int</span> wury=0;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <span class="keywordtype">int</span> ima_szx=0;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   <span class="keywordtype">int</span> ima_szy=0;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   lam = (double)0.5*(ws+we);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   dlam=we-ws;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   img=sinfo_new_average_cube_to_image_between_waves(cube,disp,cWave,ws,we);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   check_nomsg(img_dup=cpl_image_duplicate(img));</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   check_nomsg(cpl_image_delete(img_dup));</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   check_nomsg(ima_szx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   check_nomsg(ima_szy=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                                ima_szx,ima_szy);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="comment">  cpl_image_get_maxpos_window(img,wllx,wlly,wurx,wury,&max_ima_x,&max_ima_y);</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                                                          wurx,wury));</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                                                          wurx,wury));</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   <span class="keywordflow">if</span>(CPL_ERROR_NONE != irplib_strehl_mark_bad_and_compute(img,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                                              SINFO_STREHL_M1,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                                              SINFO_STREHL_M2,</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                                              lam,</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                                              dlam,</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>                                              pscale,</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                                              SINFO_STREHL_BOX_SIZE,</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>                                              max_ima_x,</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>                                              max_ima_y,</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>                                              strehl_star_radius,</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>                                              strehl_bg_r1,</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>                                              strehl_bg_r2,</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                                              NOISE_HSIZE,</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>                                              NOISE_NSAMPLES,</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>                                              strehl,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                                              strehl_err,</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>                                              &star_bkg,</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>                                              &star_peak,</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>                                              &star_flux,</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>                                              &psf_peak,</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                                              &psf_flux,</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                                              &bkg_noise)) {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>      *strehl=-1;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>      *strehl_err=0;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>       irplib_error_recover(clean_state,<span class="stringliteral">"Problem computing strehl"</span>);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> </div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> <span class="comment">  cpl_msg_info(__func__,"stehl=%f err=%f star_bkg=%f star_peak=%f star_flux=%f",</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> <span class="comment">                          *strehl,*strehl_err,star_bkg,star_peak,star_flux);</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> <span class="comment">  cpl_msg_info(__func__,"psf_peak=%f psf_flux=%f bkg_noise=%f",</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> <span class="comment">                         psf_peak,psf_flux,bkg_noise);</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   sinfo_free_image(&img);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>  cleanup:</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> }</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> cpl_table* sinfo_get_encircled_energy(cpl_frameset* sof,</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>                                       cpl_image* img,</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>                                       <span class="keywordtype">double</span>* fwhm_x,</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>                                       <span class="keywordtype">double</span>* fwhm_y,</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>                                       cpl_table** qclog_tbl)</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   cpl_errorstate clean_state = cpl_errorstate_get();</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   cpl_size max_ima_x=0;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   cpl_size max_ima_y=0;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordtype">int</span> wllx=0;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   <span class="keywordtype">int</span> wlly=0;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="keywordtype">int</span> wurx=0;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>   <span class="keywordtype">int</span> wury=0;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> d_mirror = 8.;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> factor = 180/PI_NUMB*3600.;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   <span class="keywordtype">double</span> max_ima_cx=0;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   <span class="keywordtype">double</span> max_ima_cy=0;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   <span class="keywordtype">double</span> norm=0.;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   <span class="keywordtype">double</span> xc=0.;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>   <span class="keywordtype">double</span> yc=0.;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>   <span class="keywordtype">double</span> sx=0.;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>   <span class="keywordtype">double</span> sy=0.;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>   <span class="keywordtype">double</span> flux=0;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="keywordtype">double</span> flux_max=0;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   <span class="keywordtype">double</span> pix_scale=0;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>   <span class="keywordtype">double</span> lam=0.;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   <span class="keywordtype">double</span> pscale=0.;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   <span class="keywordtype">int</span> dr_difr=0;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   <span class="keywordtype">double</span> r=0.;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>   <span class="keywordtype">double</span> bkg=0.;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   <span class="keywordtype">int</span> ni=0;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   <span class="keywordtype">int</span> ir_difr=0;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>   <span class="keywordtype">int</span> dr=0;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>   <span class="keywordtype">int</span> rmin=0;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   <span class="keywordtype">char</span> band[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>   <span class="keywordtype">char</span> spat_res[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   cpl_table* enc_energy=NULL;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> </div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>   <span class="keywordtype">int</span> ima_szx=0;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   <span class="keywordtype">int</span> ima_szy=0;</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     frame = cpl_frameset_find(sof,PRO_COADD_PSF);</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     frame = cpl_frameset_find(sof,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     frame = cpl_frameset_find(sof,PRO_COADD_STD);</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     frame = cpl_frameset_find(sof,PRO_OBS_STD);</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     frame = cpl_frameset_find(sof,PRO_COADD_OBJ);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     frame = cpl_frameset_find(sof,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s  or %s or  %s  or %s or %s  or %s not found!"</span>,</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>             PRO_COADD_PSF,PRO_OBS_PSF,</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>             PRO_COADD_STD, PRO_OBS_STD,</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>             PRO_COADD_OBJ, PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   pix_scale=atof(spat_res);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   lam=sinfo_get_wave_cent(band);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   <span class="comment">/* factor 2 due to change of detector to 2K */</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   pscale=0.5*pix_scale;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   dr_difr=factor*1.22*lam*1.e-6/d_mirror/pscale;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   ir_difr=floor(dr_difr+0.5);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   <span class="keywordflow">if</span> (pix_scale==0.025) {</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     ni=10;</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     rmin=ir_difr;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     dr=rmin;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     ni=15;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Reset diffraction limit"</span>);</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>     ir_difr=10;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     rmin=1;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     dr=2;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>   }</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   sinfo_msg(<span class="stringliteral">"Diffraction limit: %d"</span>,ir_difr);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   check_nomsg(img_dup=cpl_image_duplicate(img));</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y));</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   sinfo_free_image(&img_dup);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>   check_nomsg(ima_szx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   check_nomsg(ima_szy=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   sinfo_check_borders(&max_ima_x,ima_szx,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   sinfo_check_borders(&max_ima_y,ima_szy,SINFO_STREHL_WINDOW);</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>   sinfo_get_safe_box(&wllx,&wlly,&wurx,&wury,max_ima_x,max_ima_y,SINFO_PSF_SZ,</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>                                ima_szx,ima_szy);</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>                                                          wurx,wury));</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(img,wllx,wlly,</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>                                                          wurx,wury));</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   cpl_image_save(img, <span class="stringliteral">"bad_image_psf_c.fits"</span>,CPL_BPP_IEEE_DOUBLE, NULL, CPL_IO_CREATE);</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   sinfo_msg(<span class="stringliteral">"@@@@ sinfo_get_encircled_energy() max_ima_x[%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"] max_ima_y[%"</span> CPL_SIZE_FORMAT <span class="stringliteral">"] psf_sz[%d]"</span>, max_ima_x,</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>           max_ima_y,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>           SINFO_PSF_SZ);</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   <span class="keywordflow">if</span>(CPL_ERROR_NONE != cpl_image_fit_gaussian(img,max_ima_x,max_ima_y,</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>                                               SINFO_PSF_SZ,</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>                                               &norm,&xc,&yc,&sx,&sy,</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>                                               fwhm_x,fwhm_y)) {</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>       irplib_error_recover(clean_state,<span class="stringliteral">"Gaussian fit failed"</span>);</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   }</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span> </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>  check_nomsg(enc_energy = cpl_table_new(ni));</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_pix"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_mas"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"r_dif"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"abs_energy"</span> , CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>  check_nomsg(cpl_table_new_column(enc_energy,<span class="stringliteral">"rel_energy"</span> , CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>  <span class="comment">/* encircled energy computation */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>  check_nomsg(bkg=irplib_strehl_ring_background(img,max_ima_x,max_ima_y,</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                     SINFO_BKG_R1,SINFO_BKG_R2,IRPLIB_BG_METHOD_AVER_REJ)) ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>  r=rmin+(ni-1)*dr;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>  check_nomsg(flux_max=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,r,bkg));</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>  r=rmin;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>  <span class="keywordflow">for</span>(i=0; i<ni; i++)</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>    {</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>      check_nomsg(flux=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,r,bkg));</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>      check_nomsg(cpl_table_set_int(enc_energy,<span class="stringliteral">"r_pix"</span>,i,r));</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"r_mas"</span>,i,r*pscale));</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"r_dif"</span>,i,r/ir_difr));</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"abs_energy"</span>,i,flux));</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>      check_nomsg(cpl_table_set_double(enc_energy,<span class="stringliteral">"rel_energy"</span>,i,flux/flux_max));</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>      r+=dr;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>    }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span> </div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>  <span class="comment">//sinfo_msg("max ima=%d %d\n",max_ima_x,max_ima_y);</span></div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>  <span class="comment">//sinfo_msg("centroid ima=%f %f\n",max_ima_cx,max_ima_cy);</span></div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>  <span class="comment">//sinfo_msg("gauss info=%f %f %f %f %f %f %f\n",</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>  <span class="comment">//                         norm,xc,yc,sx,sy,*fwhm_x,*fwhm_y);</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>  check_nomsg(flux=irplib_strehl_disk_flux(img,max_ima_x,max_ima_y,</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                                           ir_difr,bkg));</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>  ck0_nomsg(sinfo_qclog_add_double(*qclog_tbl,<span class="stringliteral">"QC ENC CORE"</span>,</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>                                   flux/flux_max,</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>                                   <span class="stringliteral">"Encircled energy within PSF core"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>  <span class="keywordflow">return</span> enc_energy;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>  cleanup:</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>   sinfo_free_image(&img_dup);</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span> <span class="keyword">static</span> cpl_table* sinfo_get_strehl_from_cube(cpl_imagelist* cube,</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>                                             <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>                                             cpl_frame* frame)</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>   cpl_table* strehl_tbl=NULL;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>   <span class="keywordtype">double</span> dispersion=0.;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>   <span class="keywordtype">double</span> centralWave=0.;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>   <span class="keywordtype">double</span> wrange=0;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>   <span class="keywordtype">double</span> wstart=0;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>   <span class="keywordtype">double</span> wstep=0;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>   <span class="keywordtype">double</span> wend=0;</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   <span class="keywordtype">double</span> pix_scale=0;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>   <span class="keywordtype">double</span> lam=0;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>   <span class="keywordtype">double</span> dlam=0;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>   <span class="keywordtype">double</span> pscale = 0;</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   <span class="keywordtype">double</span> strehl_star_radius=0;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   <span class="keywordtype">double</span> strehl_bg_r1=0;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>   <span class="keywordtype">double</span> strehl_bg_r2=0;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>   <span class="keywordtype">double</span> strehl=0;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>   <span class="keywordtype">double</span> strehl_err=0;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>   <span class="keywordtype">char</span> spat_res[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   <span class="keywordtype">int</span> naxis3=0;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>   <span class="keywordtype">int</span> nsample=0;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>   sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>   pix_scale=atof(spat_res);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>   sinfo_msg(<span class="stringliteral">"Camera pixel scale=%f"</span>,pix_scale);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>   <span class="comment">/* factor 2 due to change of detector to 2K */</span></div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>   pscale=0.5*pix_scale;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>   strehl_star_radius=SINFO_BKG_R1*pscale;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>   strehl_bg_r1=SINFO_BKG_R1*pscale;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>   strehl_bg_r2=SINFO_BKG_R2*pscale;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>   plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>   dispersion=sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   centralWave=sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   naxis3=sinfo_pfits_get_naxis3(plist);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   wrange=dispersion*naxis3;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>   wstart = centralWave - (float) (cpl_imagelist_get_size(cube) / 2)*</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>                                  dispersion+dispersion;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>   wend  =wstart + dispersion * cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   wstep=0.025;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="comment">/*</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> <span class="comment">   note:</span></div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="comment">    -wstep as we do not hit the borders where the</span></div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> <span class="comment">    sinfo_gaussian fit has a problem</span></div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   nsample=(int)((wend-wstart-wstep)/wstep);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>   check_nomsg(strehl_tbl = cpl_table_new(nsample));</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"wavelength"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   <span class="keywordflow">for</span>(i=1;i<nsample;i++) {</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     ws=wstart+wstep*i;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     we=ws+wstep;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     lam = (double)0.5*(ws+we);</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     dlam=wstep;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     check(sinfo_get_strehl_from_slice(cube,</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>                                 dispersion,</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>                                 centralWave,</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>                                 ws,</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>                                 we,</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>                                 pscale,</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>                                 strehl_star_radius,</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                                 strehl_bg_r1,</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>                                 strehl_bg_r2,</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>                                 &strehl,</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>                       &strehl_err),<span class="stringliteral">"Error computing strehl"</span>);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>        <span class="keywordflow">if</span>((isnan(lam) ==0) &&</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>           (isnan(lam) ==0) &&</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>           (isnan(lam) ==0)) {</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"wavelength"</span>,i,lam));</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl"</span>,i,strehl));</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>      check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,i,</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>                      strehl_err));</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>        }</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>   }</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   <span class="keywordflow">return</span> strehl_tbl;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  cleanup:</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> }</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> sinfo_get_strehl_from_ima(cpl_image* ima,</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                                         cpl_frame* frame)</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   <span class="keywordtype">double</span> dispersion=0.;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>   <span class="keywordtype">double</span> centralWave=0.;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   <span class="keywordtype">double</span> wstart=0;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   <span class="keywordtype">double</span> wend=0;</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>   <span class="keywordtype">double</span> pscale = 0;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>   <span class="keywordtype">double</span> strehl_star_radius=0;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   <span class="keywordtype">double</span> strehl_bg_r1=0;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>   <span class="keywordtype">double</span> strehl_bg_r2=0;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>   <span class="keywordtype">double</span> strehl=0;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>   <span class="keywordtype">double</span> strehl_err=0;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>   <span class="keywordtype">double</span> exptime=0;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>   ck0_nomsg(sinfo_get_strehl_input1(frame,&dispersion,&centralWave,</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>                                    &wstart,&wend,&pscale,&exptime,</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>                            &strehl_star_radius,&strehl_bg_r1,</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>                     &strehl_bg_r2));</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>   check(sinfo_get_strehl_from_image(ima,</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>                                 wstart,</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>                                 wend,</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>                                 pscale,</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>                                 strehl_star_radius,</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>                                 strehl_bg_r1,</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>                                 strehl_bg_r2,</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>                                 &strehl,</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>                 &strehl_err),<span class="stringliteral">"Computing Strehl"</span>);</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  cleanup:</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>   <span class="keywordflow">return</span> strehl;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> }</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> sinfo_get_frm12(cpl_frameset* sof,cpl_frame** frm1,cpl_frame** frm2){</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>   cpl_frameset* obs=NULL;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>   <span class="keywordtype">int</span> nobs=0;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>   <span class="keywordtype">float</span> eps=0.0001;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>   <span class="keywordtype">float</span>* pix_scale=NULL;</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>   obs = cpl_frameset_new();</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>   sinfo_contains_frames_kind(sof,obs,PRO_OBS_PSF);</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>   nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>   <span class="keywordflow">if</span> (nobs < 1) {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>      sinfo_contains_frames_kind(sof,obs,PRO_OBS_STD);</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>      nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>   }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>   nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>   <span class="keywordflow">if</span> (nobs < 1) {</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>      sinfo_contains_frames_kind(sof,obs,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>      nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>   }</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> </div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>   nobs=cpl_frameset_get_size(obs);</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>   <span class="keywordflow">if</span> (nobs < 1) {</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     pix_scale=cpl_calloc(nobs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="keywordflow">for</span>(i=0;i<nobs;i++) {</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>       frame=cpl_frameset_get_frame(obs,i);</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       pix_scale[i]=sinfo_pfits_get_pixelscale(</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>                            (<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>       <span class="keywordflow">if</span>(fabs(pix_scale[i]-0.025)< eps) {</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>         *frm1=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fabs(pix_scale[i]-0.1) <eps) {</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>         *frm2=cpl_frame_duplicate(frame);</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No proper frame found for strehl computation"</span>);</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>       }</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     }</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>   }</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>   cpl_free(pix_scale);</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   cpl_frameset_delete(obs);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> }</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span> </div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> </div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> sinfo_get_strehl_input1(cpl_frame* frm,</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>                <span class="keywordtype">double</span>* dispersion,</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>                <span class="keywordtype">double</span>* centralWave,</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>                <span class="keywordtype">double</span>* wstart,</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>                <span class="keywordtype">double</span>* wend,</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>                <span class="keywordtype">double</span>* pscale,</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>                <span class="keywordtype">double</span>* exptime,</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>                <span class="keywordtype">double</span>* strehl_star_rad,</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                <span class="keywordtype">double</span>* strehl_bg_rmin,</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>                <span class="keywordtype">double</span>* strehl_bg_rmax)</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>   <span class="keywordtype">char</span> res[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>   <span class="keywordtype">double</span> pix_scale=0;</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>   <span class="keywordtype">double</span> wrange=0;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>   <span class="keywordtype">char</span> fname[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>   <span class="keywordtype">int</span> naxis3=0;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>   sinfo_get_spatial_res(frm,res);</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>   pix_scale=atof(res);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>   <span class="comment">/* factor 2 due to change of detector to 2K</span></div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> <span class="comment">  *pscale=0.5*pix_scale;</span></div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> </div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>   *pscale=pix_scale;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>   *strehl_star_rad=SINFO_RSTAR*(*pscale);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   *strehl_bg_rmin=SINFO_BKG_R1*(*pscale);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>   *strehl_bg_rmax=SINFO_BKG_R2*(*pscale);</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> </div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>   strcpy(fname,cpl_frame_get_filename(frm));</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>   check_nomsg(plist=cpl_propertylist_load(fname,0));</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>   check_nomsg(*dispersion=sinfo_pfits_get_cdelt3(plist));</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>   *centralWave=sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>   check_nomsg(naxis3=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>   *exptime=sinfo_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>   wrange=(*dispersion)*naxis3;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>   *wstart = *centralWave - (wrange / 2) +(*dispersion);</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>   *wend   = *wstart + wrange;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> </div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  cleanup:</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   }</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> sinfo_get_strehl_input2(cpl_frame* frm1,</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>                        cpl_frame* frm2,</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>                <span class="keywordtype">double</span>* dispersion,</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>                <span class="keywordtype">double</span>* centralWave,</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>                <span class="keywordtype">double</span>* wstart,</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                <span class="keywordtype">double</span>* wend,</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>                <span class="keywordtype">double</span>* pscale1,</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>                <span class="keywordtype">double</span>* pscale2,</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>                <span class="keywordtype">double</span>* exptime1,</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>                <span class="keywordtype">double</span>* exptime2,</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>                <span class="keywordtype">double</span>* strehl_star_rad1,</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>                <span class="keywordtype">double</span>* strehl_star_rad2,</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>                <span class="keywordtype">double</span>* strehl_bg_rmin1,</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>                <span class="keywordtype">double</span>* strehl_bg_rmin2,</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>                <span class="keywordtype">double</span>* strehl_bg_rmax1,</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>                <span class="keywordtype">double</span>* strehl_bg_rmax2)</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>   <span class="keywordtype">char</span> res1[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>   <span class="keywordtype">char</span> res2[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>   <span class="keywordtype">double</span> pix_scale1=0;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   <span class="keywordtype">double</span> pix_scale2=0;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>   <span class="keywordtype">double</span> wrange=0;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>   <span class="keywordtype">char</span> fname1[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>   <span class="keywordtype">char</span> fname2[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>   <span class="keywordtype">int</span> naxis3=0;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>   sinfo_get_spatial_res(frm1,res1);</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>   sinfo_get_spatial_res(frm2,res2);</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   pix_scale1=atof(res1);</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>   pix_scale2=atof(res2);</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>   <span class="comment">/* factor 2 due to change of detector to 2K</span></div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">  *pscale1=0.5*pix_scale1;</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">  *pscale2=0.5*pix_scale2;</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> </div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>   *pscale1=pix_scale1;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>   *pscale2=pix_scale2;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>   *strehl_star_rad1=SINFO_RSTAR*(*pscale1);</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   *strehl_bg_rmin1=SINFO_BKG_R1*(*pscale1);</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>   *strehl_bg_rmax1=SINFO_BKG_R2*(*pscale1);</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   *strehl_star_rad2=SINFO_RSTAR*(*pscale2);</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>   *strehl_bg_rmin2=SINFO_BKG_R1*(*pscale2);</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>   *strehl_bg_rmax2=SINFO_BKG_R2*(*pscale2);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>   strcpy(fname1,cpl_frame_get_filename(frm1));</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>   check_nomsg(plist=cpl_propertylist_load(fname1,0));</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>   check_nomsg(*dispersion=sinfo_pfits_get_cdelt3(plist));</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>   *centralWave=sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>   check_nomsg(naxis3=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>   *exptime1=sinfo_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   strcpy(fname2,cpl_frame_get_filename(frm2));</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>   check_nomsg(plist=cpl_propertylist_load(fname2,0));</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   *exptime2=sinfo_pfits_get_exp_time(plist);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> </div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> </div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>   wrange=(*dispersion)*naxis3;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>   *wstart = *centralWave - (wrange / 2) +(*dispersion);</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>   *wend   = *wstart + wrange;</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  cleanup:</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>   }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> </div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> }</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> </div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> sinfo_get_strehl_from_2images(cpl_image* ima1,</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>                   cpl_image* ima2,</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>                   cpl_frame* frm1,</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>                   cpl_frame* frm2)</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> </div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>   cpl_table* strehl_tbl=NULL;</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> </div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>   <span class="keywordtype">double</span> dispersion=0.;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>   <span class="keywordtype">double</span> centralWave=0.;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>   <span class="keywordtype">double</span> wstart=0;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>   <span class="keywordtype">double</span> wstep=0;</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>   <span class="keywordtype">double</span> wend=0;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>   <span class="keywordtype">double</span> lam=0;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>   <span class="keywordtype">double</span> dlam=0;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>   <span class="keywordtype">double</span> pscale1 = 0;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>   <span class="keywordtype">double</span> pscale2 = 0;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> </div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>   <span class="keywordtype">double</span> strehl_star_rad1=0;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>   <span class="keywordtype">double</span> strehl_star_rad2=0;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>   <span class="keywordtype">double</span> strehl_bg_rmin1=0;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>   <span class="keywordtype">double</span> strehl_bg_rmin2=0;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>   <span class="keywordtype">double</span> strehl_bg_rmax1=0;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>   <span class="keywordtype">double</span> strehl_bg_rmax2=0;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>   <span class="keywordtype">double</span> strehl=0;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>   <span class="keywordtype">double</span> strehl_err=0;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>   <span class="keywordtype">int</span> nsample=1;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>   <span class="keywordtype">double</span> exptime1=0;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>   <span class="keywordtype">double</span> exptime2=0;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>   cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>   cpl_size max_ima1_x=0;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>   cpl_size max_ima1_y=0;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>   cpl_size max_ima2_x=0;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> </div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>   cpl_size max_ima2_y=0;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>   <span class="keywordtype">double</span> star_bkg=0;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>   <span class="keywordtype">double</span> star_peak=0;</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>   <span class="keywordtype">double</span> star_flux=0;</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> </div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>   <span class="keywordtype">double</span> psf_peak=0;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>   <span class="keywordtype">double</span> psf_flux=0;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>   <span class="keywordtype">double</span> bkg_noise=0;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> </div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>   cpl_errorstate clean_state = cpl_errorstate_get();</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> </div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>   ck0_nomsg(sinfo_get_strehl_input2(frm1,frm2,&dispersion, &centralWave,</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                                    &wstart,&wend,&pscale1,&pscale2,</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>                                    &exptime1,&exptime2,</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>                                    &strehl_star_rad1,&strehl_star_rad2,</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>                                    &strehl_bg_rmin1,&strehl_bg_rmin2,</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>                                    &strehl_bg_rmax1,&strehl_bg_rmax2));</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> </div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> </div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>   check_nomsg(img_dup=cpl_image_duplicate(ima1));</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>   sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima1_x,&max_ima1_y));</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>   sinfo_free_image(&img_dup);</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> </div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>   check_nomsg(img_dup=cpl_image_duplicate(ima2));</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>   sinfo_clean_nan(&img_dup);</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>   check_nomsg(cpl_image_get_maxpos(img_dup,&max_ima2_x,&max_ima2_y));</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   sinfo_free_image(&img_dup);</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> <span class="comment">     note:</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> <span class="comment">     -wstep as we do not hit the borders where the</span></div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="comment">     sinfo_gaussian fit has a problem</span></div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> </div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span> </div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>   check_nomsg(strehl_tbl = cpl_table_new(nsample));</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"wavelength"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>   check_nomsg(cpl_table_new_column(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>   wstep  = wend-wstart;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span> </div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span> </div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> </div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>   lam = (double)0.5*(wstart+wend);</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>   dlam=wstep;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>   sinfo_msg(<span class="stringliteral">"lambda=%f dlambda=%f"</span>,lam,dlam);</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>   sinfo_msg(<span class="stringliteral">"wstart=%f wend=%f"</span>,wstart,wend);</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>   sinfo_msg(<span class="stringliteral">"wstep=%f"</span>,wstep);</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> </div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>   <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_strehl_compute_two(ima1,ima2,</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>                         SINFO_STREHL_M1,SINFO_STREHL_M2,</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>                         lam,</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>                         pscale1,pscale2,</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>                         exptime1,exptime2,</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>                         max_ima1_x,max_ima1_y,</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>                         max_ima2_x,max_ima2_y,</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>                         strehl_star_rad1,</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>                                             strehl_bg_rmin1,</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>                         strehl_bg_rmax1,</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>                         &strehl,&strehl_err,&star_bkg,</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>                         &star_peak,&star_flux,</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>                         &psf_peak,&psf_flux,&bkg_noise))</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>     {</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span> </div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>       strehl=-1;</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>       strehl_err=0;</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>       irplib_error_recover(clean_state,</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>                <span class="stringliteral">"Problem computing strehl, set it to -1"</span>);</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> </div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>   <span class="keywordflow">if</span>((isnan(lam) ==0) &&</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>      (isnan(lam) ==0) &&</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>      (isnan(lam) ==0)) {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"wavelength"</span>,0,lam));</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl"</span>,0,strehl));</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     check_nomsg(cpl_table_set_double(strehl_tbl,<span class="stringliteral">"strehl_error"</span>,</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>                      0,strehl_err));</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span> </div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>   }</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>   <span class="keywordflow">return</span> strehl_tbl;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  cleanup:</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> </div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> </div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span> </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="preprocessor">#define irplib_assure_code cpl_ensure_code</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="preprocessor"></span><span class="keywordtype">int</span> sinfo_strehl_compute_two(</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>         <span class="keyword">const</span> cpl_image *   im1,</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>         <span class="keyword">const</span> cpl_image *   im2,</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>         <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>         <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         <span class="keywordtype">double</span>              pscale1,</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>         <span class="keywordtype">double</span>              pscale2,</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>         <span class="keywordtype">double</span>              exptime1,</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>         <span class="keywordtype">double</span>              exptime2,</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>         <span class="keywordtype">int</span>                 xpos1,</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>         <span class="keywordtype">int</span>                 ypos1,</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>         <span class="keywordtype">int</span>                 xpos2,</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>         <span class="keywordtype">int</span>                 ypos2,</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>         <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>         <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>         <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>         <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>         <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>         <span class="keywordtype">double</span>          *   star_bkg,</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>         <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>         <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>         <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>         <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>         <span class="keywordtype">double</span>          *   bg_noise)</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> {</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     <span class="keywordtype">double</span> psf_peak1=0;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>     <span class="keywordtype">double</span> psf_peak2=0;</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>     <span class="keywordtype">double</span> psf_flux1=0;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>     <span class="keywordtype">double</span> psf_flux2=0;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>     <span class="keywordtype">double</span> star_bkg1=0;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     <span class="keywordtype">double</span> star_bkg2=0;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     <span class="keywordtype">double</span> star_flux1=0;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>     <span class="keywordtype">double</span> star_flux2=0;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     <span class="keywordtype">double</span> star_peak1=0;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     <span class="keywordtype">double</span> star_peak2=0;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     <span class="keyword">const</span> <span class="keywordtype">double</span>   window_size = 5.0 ;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     <span class="keywordtype">double</span>         star_radius, max_radius ;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>     <span class="keywordtype">double</span>       ring[4];</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>     <span class="keywordtype">double</span> prat=pscale2/pscale1;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>     <span class="keywordtype">double</span> prat2=prat*prat;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>     <span class="keywordtype">double</span> trat=exptime1/exptime2;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>     <span class="keywordtype">double</span> frat=sinfo_scale_flux(pscale1,pscale2,exptime1,exptime2);</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     <span class="keywordtype">double</span> xc=0;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     <span class="keywordtype">double</span> yc=0;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> </div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>     <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>     <span class="keywordtype">int</span> d=16;</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> </div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span> </div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>     <span class="comment">/* Test inputs */</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>     irplib_assure_code(im1 != NULL,         CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>     irplib_assure_code(im2 != NULL,         CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>     irplib_assure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     irplib_assure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>     irplib_assure_code(star_bkg != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>     irplib_assure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>     irplib_assure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>     irplib_assure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>     irplib_assure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span> </div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>     irplib_assure_code(pscale1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>     irplib_assure_code(pscale2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>     irplib_assure_code(xpos1-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>     irplib_assure_code(ypos1-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>     irplib_assure_code(xpos2-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>     irplib_assure_code(ypos2-window_size > 0, CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> </div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>     irplib_assure_code(xpos1+window_size <= cpl_image_get_size_x(im1),</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>                        CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>     irplib_assure_code(ypos1+window_size <= cpl_image_get_size_y(im1),</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>                        CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> </div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>     irplib_assure_code(xpos2+window_size <= cpl_image_get_size_x(im2),</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>                        CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     irplib_assure_code(ypos2+window_size <= cpl_image_get_size_y(im2),</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>                        CPL_ERROR_ACCESS_OUT_OF_RANGE);</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     irplib_assure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     irplib_assure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     irplib_assure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> </div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span></div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>     <span class="comment">/* Generate first appropriate PSF to find max peak: same pscale as</span></div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span> <span class="comment">       the one of the image where we compute the flux */</span></div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span> </div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     sx=cpl_image_get_size_x(im1);</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     sy=cpl_image_get_size_y(im1);</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> </div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span> </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     psf_flux1 = 1.0; <span class="comment">// The psf flux, cpl_image_get_flux(psf), is always 1</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>     psf_flux2 = 1.0; <span class="comment">// The psf flux, cpl_image_get_flux(psf), is always 1</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     *psf_flux=1.0;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     ring[0] = xpos2;</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     ring[1] = ypos2;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     ring[2] = r2/pscale2;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>     ring[3] = r3/pscale2;</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> </div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_pos=%d %d %d %d"</span>,xpos1,ypos1,xpos2,ypos2);</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_ring=%f %f %f %f"</span>,ring[0],ring[1],ring[2],ring[3]);</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     <span class="comment">/* Compute star_radius in pixels */</span></div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     star_radius = r1/pscale2;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>      <span class="comment">/* Find the peak value on the central part of the candidate image */</span></div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> </div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>     <span class="comment">/* Find the peak value on the central part of the candidate image */</span></div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>     max_radius = window_size < star_radius ? window_size : star_radius;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> </div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>     check_nomsg(sinfo_get_star_features(im1,d,xpos1,ypos1,&xc,&yc,</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>                                         &star_peak1,&star_flux1,&star_bkg1));</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> </div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     *star_peak=star_peak1;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span> </div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale1,xc,yc,1.,</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>                   &psf_peak1));</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> </div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>     check_nomsg(sinfo_get_star_features(im2,d,xpos2,ypos2,&xc,&yc,</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>                                         &star_peak2,&star_flux2,&star_bkg2));</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> </div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     *star_flux=star_flux2;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     *star_bkg=star_bkg2;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> </div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale2,xc,yc,1.,</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>                   &psf_peak2));</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> </div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> </div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"p1=%g p2=%g"</span>,*star_peak,star_peak2);</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"corr peak: p1=%g p2=%g"</span>,*star_peak,star_peak2/frat);</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"corr bkg: bkg1=%g bkg2=%g"</span>,star_bkg1/frat,*star_bkg);</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"rel diff: %g"</span>,</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>               fabs(star_peak2/frat- *star_peak)/(star_peak2/frat));</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> </div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> </div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Rescaled star_flux1=%g star_flux2=%g"</span>,</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>                  star_flux1*trat,*star_flux);</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>     <span class="comment">//Check that flux value as measured on im1 and on 1m2 are close one</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>     <span class="comment">//to another. Note that flux1, measured on im1, need to be rescaled</span></div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     <span class="comment">//by exposure time to match to flux2=star_flux</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     <span class="keywordflow">if</span> ( fabs((star_flux1*frat-*star_flux)/(*star_flux)) > 0.25) {</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star flux rel diff: %g"</span>,</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>                         fabs((star_flux1*frat-*star_flux)/(*star_flux)));</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     }</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> </div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>     <span class="comment">//Check that pick value as measured on im1 and on 1m2 are close one</span></div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     <span class="comment">//to another. Note that peak2, measured on im2, need to be rescaled</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>     <span class="comment">//by exposure time and pixel scale to match to peak1=star_peak</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     <span class="keywordflow">if</span> ( fabs(star_peak2-star_peak1*frat)/(star_peak2) > 0.25) {</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>       <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star pick rel diff: %g"</span>,</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>                         fabs(star_peak2-star_peak1*frat)/(star_peak2));</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>     }</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ak1 star peak=%g"</span>,*star_peak);</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     irplib_assure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     *star_peak=star_peak1;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> </div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     *star_bkg=star_bkg2;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>     *star_flux=star_flux2;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span> </div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ak2"</span>);</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>     <span class="comment">//psf1 = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale1, size*4);</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>     <span class="comment">//psf_peak1 = cpl_image_get_max(psf1) ;</span></div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span> </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span> </div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     <span class="comment">/* Compute Strehl */</span></div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     <span class="comment">//*strehl = (*star_peak *prat2/trat/ *star_flux) / (*psf_peak / *psf_flux);</span></div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     *strehl = (*star_peak/(*star_flux*trat)) / (psf_peak1 );</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     <span class="comment">//*strehl = (*star_peak/(*star_flux)) / (psf_peak1 / *psf_flux) ;</span></div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"peak=%g flux1=%f flux2=%f flux=%f cflux=%g "</span></div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>                     <span class="stringliteral">"fct=%g psf_peak=%g"</span>,</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>           *star_peak,star_flux1,star_flux2,*star_flux,</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>               *star_flux/frat*prat2,prat2/frat,psf_peak1);</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"=======strehl=%g"</span>,*strehl);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="comment">    if (*strehl > 1)</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span> <span class="comment">        cpl_msg_warning(cpl_func, "Extreme Strehl-ratio=%g, star_peak=%g, "</span></div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> <span class="comment">                        "star_flux=%g, psf_peak=%g, psf_flux=%g", *strehl,</span></div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span> <span class="comment">                        *star_peak, *star_flux, *psf_peak, *psf_flux);</span></div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="comment"></span></div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="comment"></span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="comment">    // Compute Strehl error</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="comment">    if (cpl_flux_get_noise_ring(im2, ring, noise_box_sz, noise_nsamples,</span></div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="comment">                                bg_noise, NULL) == CPL_ERROR_NONE) {</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">        *strehl_err = SINFO_STREHL_ERROR_COEFFICIENT * (*bg_noise) * pscale2 *</span></div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> <span class="comment">            star_radius * star_radius / *star_flux;</span></div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="comment">        irplib_assure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);</span></div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> <span class="comment">    } else {</span></div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> <span class="comment">      sinfo_msg_warning("Problem computing noise");</span></div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     *bg_noise=0;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>     cleanup:</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span> </div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     }</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>   }</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span> }</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> </div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> </div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> sinfo_get_star_features(<span class="keyword">const</span> cpl_image* im,</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>                         <span class="keyword">const</span> <span class="keywordtype">int</span> radius,</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>                         <span class="keywordtype">double</span>* xc,</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>                         <span class="keywordtype">double</span>* yc,</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>                         <span class="keywordtype">double</span>* peak,</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>                         <span class="keywordtype">double</span>* flux,</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>                         <span class="keywordtype">double</span>* bkg)</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>   <span class="keywordtype">int</span> ixm=0;</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>   <span class="keywordtype">int</span> iym=0;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>   <span class="keywordtype">int</span> llx=0;</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>   <span class="keywordtype">int</span> lly=0;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>   <span class="keywordtype">int</span> urx=0;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>   <span class="keywordtype">int</span> ury=0;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>   <span class="keywordtype">int</span> dim_new=0;</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>   <span class="keywordtype">double</span> kappa=2;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>   <span class="keywordtype">double</span> xm=0;</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>   <span class="keywordtype">double</span> ym=0;</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>   <span class="keywordtype">double</span> bkg_stdev=0;</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>   <span class="keywordtype">int</span> bkg_sx=SINFO_BKG_BOX_SZ;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>   <span class="keywordtype">int</span> bkg_sy=SINFO_BKG_BOX_SZ;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>   cpl_bivector* iqe=NULL;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>   <span class="keywordtype">double</span>* piqe=NULL;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>   cpl_image* im_new=NULL;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>   sx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>   sy=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> </div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star_radius=%d"</span>,radius);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>   <span class="comment">//We find the image centroid</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>   <span class="keywordflow">if</span>(NULL != (iqe=cpl_image_iqe(im,sx/2-radius,sy/2-radius,</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>                 sx/2+radius,sy/2+radius))) {</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> </div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> </div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>     piqe=cpl_bivector_get_x_data(iqe);</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>     <span class="comment">//*star_peak=piqe[5];</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     xm=piqe[0];</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     ym=piqe[1];</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     <span class="comment">//Extract a square sub-image of minimal size not to hit the image borders</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>     <span class="comment">//centered on the previous image centroid</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Max ima: %g %g"</span>,xm,ym);</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Find min of: %g %g %g %g"</span>,xm,sx-xm,ym,sy-ym);</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>     ixm=floor(xm);</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>     iym=floor(ym);</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ixm=%d iym=%d"</span>,ixm,iym);</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>     dim_new=floor(sinfo_find_min_of_four(xm,sx-xm,ym,sy-ym));</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dim_new=%d"</span>,dim_new);</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>     llx=(ixm-dim_new > 1) ? ixm-dim_new : 1;</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>     lly=(iym-dim_new > 1) ? iym-dim_new : 1;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>     urx=(ixm+dim_new < sx) ? ixm+dim_new : sx;</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>     ury=(iym+dim_new < sy) ? iym+dim_new : sy;</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"llx=%d lly=%d urx=%d ury=%d"</span>,llx,lly,urx,ury);</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>     check_nomsg(im_new=cpl_image_extract(im,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> </div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>     <span class="comment">//compute the background of this last image</span></div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>     check_nomsg(sinfo_get_bkg_4corners(im_new,bkg_sx,bkg_sy,bkg,&bkg_stdev));</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> </div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span> </div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>     sinfo_free_bivector(&iqe);</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span> </div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>     <span class="comment">//Determine the image pick on the new coordinate system</span></div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     iqe=cpl_image_iqe(im_new,dim_new-radius,dim_new-radius,</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>               dim_new+radius,dim_new+radius);</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,piqe[0],piqe[1]);</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>     *xc=piqe[0]-dim_new-1;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>     *yc=piqe[1]-dim_new-1;</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span> </div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span> </div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,*xc,*yc);</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>     <span class="comment">//*peak=piqe[5];</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>     *peak=cpl_image_get_max_window(im_new,dim_new-radius,dim_new-radius,</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                    dim_new+radius,dim_new+radius);</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>     sinfo_get_flux_above_bkg(im_new,kappa,bkg_stdev,flux);</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     *peak -= (*bkg);</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star peak=%g bkg=%g"</span>,*peak,*bkg);</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> </div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> </div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>     sinfo_free_bivector(&iqe);</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> </div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"IQE fit failed"</span>);</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>     cpl_error_reset();</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%d yc=%d radius=%d"</span>,xpos,ypos,radius);</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>     *xc=xpos-sx/2;</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     *yc=ypos-sy/2;</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"xc=%g yc=%g"</span>,*xc,*yc);</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>     check_nomsg(sinfo_get_bkg_4corners(im,bkg_sx,bkg_sy,bkg,&bkg_stdev));</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>     check_nomsg(sinfo_get_safe_box(&llx, &lly, &urx, &ury, xpos,ypos,radius,</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>                    64,64));</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>     check_nomsg(*peak=cpl_image_get_max_window(im,llx,lly,urx,ury)-(*bkg));</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>     sinfo_get_flux_above_bkg(im,kappa,bkg_stdev,flux);</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"star peak=%g bkg=%g"</span>,*peak,*bkg);</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> </div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>   }</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> </div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> </div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> </div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>  cleanup:</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>   sinfo_free_image(&im_new);</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>   sinfo_free_bivector(&iqe);</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> </div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> </div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>   }</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span> </div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> }</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> </div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> </div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> </div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> </div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> </div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span> cpl_error_code</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span> sinfo_strehl_compute_one(<span class="keyword">const</span> cpl_image *   im,</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>                                      <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>                                      <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>                                      <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>                                      <span class="keywordtype">double</span>              dlam,</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>                                      <span class="keywordtype">double</span>              pscale,</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                                      <span class="keywordtype">int</span>                 xpos,</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                                      <span class="keywordtype">int</span>                 ypos,</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>                                      <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>                                      <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>                                      <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>                                      <span class="keywordtype">int</span>                 size,</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>                                      <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>                                      <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>                                      <span class="keywordtype">double</span>          *   star_bkg,</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>                                      <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>                                      <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>                                      <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>                                      <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>                                      <span class="keywordtype">double</span>          *   bg_noise)</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> {</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>     cpl_image  * psf;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>     <span class="keywordtype">double</span>       star_radius;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span> </div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     <span class="comment">/* FIXME: Arbitrary choice of image border */</span></div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> window_size = (double)(SINFO_STREHL_RAD_CENTRAL);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span> </div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     <span class="comment">/* Determined empirically by C. Lidman for Strehl error computation */</span></div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="comment">//Commented as not used</span></div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     <span class="comment">//const double strehl_error_coefficient = SINFO_MATH_PI * 0.007 / 0.0271;</span></div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 0, 0)</span></div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="preprocessor"></span>    <span class="keywordtype">double</span>       ring[4];</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> <span class="preprocessor"></span>    <span class="comment">/* FIXME: Remove this branch once CPL 3.X is no longer supported */</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     <span class="keywordtype">int</span>          ring[4];</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> <span class="preprocessor"></span>    cpl_bivector* iqe1=NULL;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>     <span class="keywordtype">double</span> xc=0;</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>     <span class="keywordtype">double</span> yc=0;</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>     <span class="keywordtype">int</span> d=16;</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> </div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> </div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> </div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>     <span class="comment">/* Check compile-time constant */</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>     cpl_ensure_code(window_size > 0.0,  CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> </div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>     <span class="comment">/* Test inputs */</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>     cpl_ensure_code(im != NULL,         CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>     cpl_ensure_code(strehl != NULL,     CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>     cpl_ensure_code(strehl_err != NULL, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     cpl_ensure_code(star_bkg != NULL,    CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>     cpl_ensure_code(star_peak != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>     cpl_ensure_code(star_flux != NULL,  CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>     cpl_ensure_code(psf_peak != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>     cpl_ensure_code(psf_flux != NULL,   CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> </div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>     cpl_ensure_code(pscale > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> </div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>     cpl_ensure_code(r1 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>     cpl_ensure_code(r2 > 0.0,      CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> </div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>     cpl_ensure_code(r3 > r2,       CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> </div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> </div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>     <span class="comment">/* Computing a Strehl ratio is a story between an ideal PSF */</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale,xc,yc,</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>                   1.,psf_peak));</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>   <span class="comment">/* and a candidate image supposed to approximate this ideal PSF. */</span></div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> </div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>     <span class="comment">/* Generate first appropriate PSF to find max peak */</span></div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>     psf = irplib_strehl_generate_psf(m1, m2, lam, dlam, pscale, size);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>     cpl_ensure_code(psf != NULL,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> </div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>     <span class="comment">/* Compute flux in PSF and find max peak */</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>     *psf_peak = cpl_image_get_max(psf);</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> </div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     cpl_image_delete(psf);</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> </div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span> </div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> </div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span> </div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>     cpl_ensure( *psf_peak > 0.0, CPL_ERROR_ILLEGAL_OUTPUT,CPL_ERROR_ILLEGAL_OUTPUT); <span class="comment">/* The ideal PSF has a positive maximum */</span></div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>     *psf_flux = 1.0; <span class="comment">/* The psf flux, cpl_image_get_flux(psf), is always 1 */</span></div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> </div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> </div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     <span class="comment">/* Compute star_radius in pixels */</span></div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     star_radius = r1/pscale;</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span> </div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span> </div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>     check_nomsg(sinfo_get_star_features(im,d,xpos,ypos,&xc,&yc,</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>                     star_peak,star_flux,star_bkg));</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> </div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>     check_nomsg(sinfo_compute_psf(m1,m2/m1,lam*1.e-6,pscale,xc,yc,1.,psf_peak));</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> </div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> </div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>     *star_peak -= *star_bkg;</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> </div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> </div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>     cpl_ensure_code(*star_peak > 0.0,      CPL_ERROR_ILLEGAL_OUTPUT);</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span> </div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span> </div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>     <span class="comment">/* Compute Strehl */</span></div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>     <span class="comment">/* (StarPeak / StarFlux) / (PsfPeak / PsfFlux) */</span></div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star flux=%g"</span>, *star_flux);</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Star peak=%g"</span>, *star_peak);</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"PSF  flux=%g"</span>, *psf_flux);</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"PSF  peak=%g"</span>, *psf_peak);</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span> </div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>     *strehl = (*star_peak * *psf_flux ) / ( *star_flux * *psf_peak);</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span> </div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span> </div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span> </div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>      <span class="keywordflow">if</span> (*strehl > 1)</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"Extreme Strehl-ratio=%g, star_peak=%g, "</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>                         <span class="stringliteral">"star_flux=%g, psf_peak=%g, psf_flux=%g"</span>, *strehl,</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>                         *star_peak, *star_flux, *psf_peak, *psf_flux);</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> </div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>     <span class="comment">/* Compute Strehl error */</span></div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>     ring[0] = xpos;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>     ring[1] = ypos;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>     ring[2] = r2/pscale;</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>     ring[3] = r3/pscale;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">    *strehl_err = strehl_error_coefficient * (*bg_noise) * pscale *</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="comment">        star_radius * star_radius / *star_flux;</span></div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="comment"></span></div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span> <span class="comment">    // This check should not be able to fail, but just to be sure</span></div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="comment">    cpl_ensure_code(*strehl_err >= 0.0,       CPL_ERROR_ILLEGAL_OUTPUT);</span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>     *bg_noise=0;</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> </div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>  cleanup:</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>     sinfo_free_bivector(&iqe1);</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>       <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>       <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>     }</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> </div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> </div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span> }</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span> </div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span> </div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> </div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> sinfo_check_borders(cpl_size* val,<span class="keyword">const</span> <span class="keywordtype">int</span> max,<span class="keyword">const</span> <span class="keywordtype">int</span> thresh)</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> {</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> </div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>   *val = ((*val-thresh) > 0) ? *val : thresh;</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>   *val = ((*val+thresh) < max) ? *val : max-thresh-1;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> }</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> </div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> sinfo_get_safe_box(<span class="keywordtype">int</span>* llx,</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>                    <span class="keywordtype">int</span>* lly,</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>                    <span class="keywordtype">int</span>* urx,</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>                    <span class="keywordtype">int</span>* ury,</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> xpos,</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> ypos,</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> box,</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> szx,</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>                    <span class="keyword">const</span> <span class="keywordtype">int</span> szy)</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span> </div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> {</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>   *llx= ((xpos-box)>0)   ? (xpos-box) : 1;</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>   *lly= ((ypos-box)>0)   ? (ypos-box) : 1;</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>   *urx= ((xpos+box)<szx) ? (xpos+box) : szx-1 ;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>   *ury= ((ypos+box)<szy) ? (ypos+box) : szy-1 ;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span> </div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> }</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span> </div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span> </div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> </div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span> </div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span> cpl_error_code</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span> sinfo_get_bkg_4corners(<span class="keyword">const</span> cpl_image *img,</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>                <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sx,</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sy,</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>                        <span class="keywordtype">double</span>* bkg,</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>                        <span class="keywordtype">double</span>* std)</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> {</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span> </div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>   cpl_image* img_bkg=NULL;</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>   *bkg=0;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> </div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>   cknull(img,<span class="stringliteral">"NULL input image!"</span>);</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>   check_nomsg(sx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>   check_nomsg(sy=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>   check_nomsg(img_bkg=cpl_image_new(2*bkg_sx,2*bkg_sy,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,1,1,bkg_sx,bkg_sy),</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>                  1,1));</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span> </div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,sx-bkg_sx,1,</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>                                sx,bkg_sy),bkg_sx+1,1));</div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>   check_nomsg(cpl_image_copy(img_bkg,cpl_image_extract(img,1,sy-bkg_sy,</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>                                bkg_sx,sy),1,bkg_sy+1));</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> </div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>   check_nomsg(cpl_image_copy(img_bkg,</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>                  cpl_image_extract(img,sx-bkg_sx,sy-bkg_sy,sx,sy),</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>                  bkg_sx+1,bkg_sy+1));</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> </div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>   check_nomsg(*bkg=cpl_image_get_median(img_bkg));</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>   check_nomsg(*std=cpl_image_get_stdev(img_bkg));</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sky bkg: %f"</span>,*bkg);</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sky stdev: %f"</span>,*std);</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> </div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> cleanup:</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>   sinfo_free_image(&img_bkg);</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span> </div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>   }</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> </div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span> </div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> }</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span> </div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span> cpl_error_code</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span> sinfo_compute_psf(<span class="keyword">const</span> <span class="keywordtype">double</span> dia,</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> occ,</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> lambda,</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> psize,</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> cx,</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> cy,</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> anamorph,</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>           <span class="keywordtype">double</span>* psf_peak)</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> {</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span> </div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>   <span class="keywordtype">int</span> bin=SINFO_PSF_BIN;</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>   <span class="keywordtype">int</span> npoints=SINFO_PSF_NPOINT;</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span> </div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>   <span class="keywordtype">int</span> dim=SINFO_PSF_DIM;</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>   <span class="keywordtype">int</span> blocks=SINFO_PSF_BLOCKS;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>   <span class="keywordtype">int</span> sx=dim;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>   <span class="keywordtype">int</span> sy=dim;</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> </div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span> </div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>   <span class="keywordtype">double</span> k=0;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span> </div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>   <span class="keywordtype">int</span> ii=0;</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>   <span class="keywordtype">int</span> jj=0;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>   <span class="keywordtype">int</span> start=0;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> </div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>   <span class="keywordtype">double</span> nyquist=lambda/dia/2.*206265/psize*bin;</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>   <span class="keywordtype">double</span> cor=0.;</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>   <span class="keywordtype">double</span> v0=0;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>   <span class="keywordtype">double</span> ll[npoints];</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>   <span class="keywordtype">double</span> part[npoints];</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>   <span class="keywordtype">double</span> ee;</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>   <span class="keywordtype">double</span> dll=0;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>   <span class="keywordtype">double</span> tot1=0;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>   <span class="keywordtype">double</span> tot2=0;</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> </div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span> </div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>   <span class="keywordtype">double</span> fct=0;</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> </div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>   <span class="keywordtype">double</span>* pxx=NULL;</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>   <span class="keywordtype">double</span>* pyy=NULL;</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>   <span class="keywordtype">double</span>* prr=NULL;</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>   <span class="keywordtype">double</span>* ppsf0=NULL;</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> </div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>   <span class="keywordtype">double</span>* pcor=NULL;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>   <span class="keywordtype">double</span>* pairy=NULL;</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> </div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>   cpl_image* img_xx=NULL;</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>   cpl_image* img_yy=NULL;</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>   cpl_image* img_rr=NULL;</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>   cpl_image* img_rrcor=NULL;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>   cpl_image* img_airy=NULL;</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>   cpl_image* img_w=NULL;</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>   cpl_image* img_psf0=NULL;</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span> </div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> </div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span> </div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"lambda=%g"</span>,lambda);</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dia=%f"</span>,dia);</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"psize=%f"</span>,psize);</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"bin=%d"</span>,bin);</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"nyquist=%f"</span>,nyquist);</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span> </div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>   check_nomsg(img_xx=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>   img_yy=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>   img_rr=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>   img_rrcor=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> </div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>   pxx=cpl_image_get_data_double(img_xx);</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>   pyy=cpl_image_get_data_double(img_yy);</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>   prr=cpl_image_get_data_double(img_rr);</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> </div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>       <span class="comment">//xz plane increasing along y</span></div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>       pxx[j*sx+i]=(i-sx/2-cx*bin)/nyquist*SINFO_MATH_PI/2;</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>       <span class="comment">//yz plane increasing along x</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>       pyy[j*sx+i]=(j-sy/2-cy*bin)/nyquist*SINFO_MATH_PI/2*anamorph;</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span> </div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>       <span class="comment">//combinex xyz surface</span></div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>       prr[j*sx+i]=sqrt(pxx[j*sx+i]*pxx[j*sx+i]+pyy[j*sx+i]*pyy[j*sx+i]);</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>     }</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>   }</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span> </div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> <span class="comment">  check_nomsg(cpl_image_save(img_xx,"out_xx.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span> <span class="comment"></span></div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> <span class="comment">  check_nomsg(cpl_image_save(img_yy,"out_yy.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span> <span class="comment"></span></div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span> <span class="comment">  check_nomsg(cpl_image_save(img_rr,"out_rr.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span> <span class="comment"></span></div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span> </div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>   img_rrcor=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>   cor=1./(1.-occ*occ);</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>   cor*=cor;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span> </div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>   img_rrcor=cpl_image_duplicate(img_rr);</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>   cpl_image_multiply_scalar(img_rrcor,cor);</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>   pcor=cpl_image_get_data_double(img_rrcor);</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> </div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span> <span class="comment">  check_nomsg(cpl_image_save(img_rrcor,"out_rrcor.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span> </div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>   img_airy=cpl_image_new(sx,sy,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>   pairy=cpl_image_get_data_double(img_airy);</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span> </div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> </div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>   <span class="keywordflow">if</span> (occ == 0.0) {</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span> </div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     <span class="keywordflow">for</span>(j=0;j<sx;j++) {</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>       <span class="keywordflow">for</span>(i=0;i<sy;i++) {</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>     fct=(2.*j1(prr[j*sx+i])/prr[j*sx+i]);</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>     pairy[j*sx+i]=fct*fct;</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> </div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>       }</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>     }</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> </div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>       <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> </div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>     fct=(2.*j1(prr[j*sx+i])/prr[j*sx+i]-occ*occ*2.*j1(pcor[j*sx+i])/pcor[j*sx+i]);</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>     pairy[j*sx+i]=cor*fct*fct;</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> </div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>       }</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>     }</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>   }</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span> </div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> <span class="comment"></span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span> </div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>   <span class="comment">//To remove an expected NAN value at the PSF centre we re-set PSF(centre)=1</span></div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>   img_w=cpl_image_duplicate(img_airy);</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>   pw=cpl_image_get_data_double(img_w);</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>   pairy=cpl_image_get_data_double(img_airy);</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span> </div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>       <span class="keywordflow">if</span>(!irplib_isnan(pairy[i+j*sx]) && (pairy[i+j*sx] ==0)) {</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>     pairy[i+j*sx]=1.;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"====> %f"</span>,pairy[i+j*sx]);</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>       }</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     }</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>   }</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>   pairy[sx/2+sy/2*sx]=1.;</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span> </div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"total-airy=%f"</span>,cpl_image_get_flux(img_airy));</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span> </div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy1.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span> <span class="comment"></span></div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span> </div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span> </div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>   <span class="comment">// Computation of EE</span></div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span> </div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> </div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>   v0=prr[0+dim/4-1];</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"v0=%12.10g"</span>,v0);</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>     ll[i]=(double)i/npoints*v0;</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>    }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>   dll=ll[1]-ll[0];</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>   cor=1./(1.-occ*occ);</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>     part[i]=2.*j1(ll[i])/ll[i];</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>   }</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>   part[0]=1.0;</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span> </div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>   tot1=0.;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>   <span class="keywordflow">for</span>(i=0;i<npoints;i++) {</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>     tot1+=j1(occ*ll[i])*part[i]*dll;</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>   }</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot=%10.8f"</span>,tot1);</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> </div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> </div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"cor=%10.8f"</span>,cor);</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> </div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>   ee=(1.-j0(v0)*j0(v0));</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span> </div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"(1-j0(v0)*j0(v0))=%10.8f"</span>,ee);</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span> </div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span> </div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>   ee-=(j1(v0))*(j1(v0));</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"j1^2=%10.8f"</span>,(j1(v0))*(j1(v0)));</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span> </div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"factor=%10.8f"</span>,</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>           occ*occ*(1-j0(occ*v0)*j0(occ*v0)-j1(occ*v0)*j1(occ*v0)));</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span> </div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> </div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>   ee+=occ*occ*(1-j0(occ*v0)*j0(occ*v0)-j1(occ*v0)*j1(occ*v0));</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span> </div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>   ee-=2.*occ*tot1;</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span> </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>   ee*=cor;</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"ee=%10.8f"</span>,ee);</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> </div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> </div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>   tot1=0;</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>   pairy=cpl_image_get_data_double(img_airy);</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>   prr=cpl_image_get_data_double(img_rr);</div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>       <span class="keywordflow">if</span>(!irplib_isnan(pairy[i+j*sx]) && (prr[i+j*sx] <v0)) {</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>     tot1+=pairy[i+j*sx]*ee;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>     <span class="comment">//sinfo_msg_debug("tot=%f",tot1);</span></div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span> </div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>       }</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>     }</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>   }</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot=%10.8f"</span>,tot1);</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>   cpl_image_divide_scalar(img_airy,tot1);</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> </div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span> <span class="comment">  check_nomsg(cpl_image_save(img_airy,"out_airy2.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span> <span class="comment"></span></div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> </div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>   <span class="comment">// Computation of maximum</span></div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> </div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"dim=%d blocks=%d,bin=%d"</span>,dim,blocks,bin);</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>   start=(dim/2-1)-(blocks/2*bin-1)-bin/2;</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"start=%d"</span>,start);</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span> </div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>   img_psf0=cpl_image_new(blocks,blocks,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>   ppsf0=cpl_image_get_data_double(img_psf0);</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>   tot1=0.;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>   tot2=0.;</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span> </div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>   <span class="keywordflow">for</span>(j=0;j<blocks;j++) {</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>     <span class="keywordflow">for</span>(i=0;i<blocks;i++) {</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>       tot1=0;</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>       <span class="keywordflow">for</span>(jj=start+j*bin;jj<start+(j+1)*bin-1;jj++){</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>     <span class="keywordflow">for</span>(ii=start+i*bin;ii<start+(i+1)*bin-1;ii++){</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>           <span class="keywordflow">if</span>(!irplib_isnan(pairy[ii+jj*sx])) {</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>         tot1+=pairy[ii+jj*sx];</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>       }</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>     }</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>       }</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>       ppsf0[i+j*blocks]=tot1;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>       tot2+=tot1;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>     }</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>   }</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span> </div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>   cpl_image_divide_scalar(img_psf0,tot2);</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> <span class="comment">  check_nomsg(cpl_image_save(img_psf0,"out_psf0.fits", CPL_BPP_IEEE_DOUBLE,</span></div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> <span class="comment">                 NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span> <span class="comment"></span></div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>   k=180.*3600./SINFO_MATH_PI;</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"k=%f"</span>,k);</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"radius of first zero: 1.22*lambda/d*k:=%f"</span>,</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>             1.22*lambda/dia*k);</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"tot: %f"</span>,tot2);</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"max: %f"</span>,cpl_image_get_max(img_psf0)*tot2);</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"max/tot: %f"</span>,cpl_image_get_max(img_psf0));</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>   *psf_peak=cpl_image_get_max(img_psf0);</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span> </div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"d=%g ob=%g w=%g ps=%g cx=%g cy=%g a=%g peak=%10.8g"</span>,</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>             dia,occ,lambda,psize,cx,cy,anamorph,*psf_peak);</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> </div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span> </div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span> </div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>  cleanup:</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>   sinfo_free_image(&img_xx);</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>   sinfo_free_image(&img_yy);</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>   sinfo_free_image(&img_rr);</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>   sinfo_free_image(&img_rrcor);</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>   sinfo_free_image(&img_airy);</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> </div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> </div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>   }</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> </div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> }</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span> </div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> cpl_error_code</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> sinfo_get_flux_above_bkg(<span class="keyword">const</span> cpl_image* img,</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>                          <span class="keyword">const</span> <span class="keywordtype">float</span> kappa,</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>                          <span class="keyword">const</span> <span class="keywordtype">float</span> std,</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>                          <span class="keywordtype">double</span>* f)</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span> {</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span> </div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>   <span class="keyword">const</span> <span class="keywordtype">float</span>* pimg=NULL;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>   <span class="keywordtype">float</span> tot=0;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>   cpl_image* timg=NULL;</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>   <span class="keywordtype">double</span> sky_bkg=0;</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>   <span class="keywordtype">double</span> sky_std=0;</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> </div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>   timg=cpl_image_duplicate(img);</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>   cpl_image_subtract_scalar(timg,std);</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>   check_nomsg(sinfo_get_bkg_4corners(timg,SINFO_BKG_BOX_SZ,SINFO_BKG_BOX_SZ,</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>                      &sky_bkg,&sky_std));</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span> </div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>   check_nomsg(pimg=cpl_image_get_data_float_const(timg));</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>   sx=cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>   sy=cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>       <span class="keywordflow">if</span>(!irplib_isnan(pimg[i+j*sx]) &&</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>           (pimg[i+j*sx]>(sky_bkg+kappa*sky_std))) {</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>     tot+=(double)pimg[i+j*sx];</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>     k++;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>       }</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>     }</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>   }</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> </div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>   *f=(double)(tot-k*sky_bkg);</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> </div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>  cleanup:</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>   sinfo_free_image(&timg);</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> </div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>   }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> </div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> }</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> </div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span> </div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> </div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> <span class="comment">cpl_error_code</span></div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> <span class="comment">sinfo_get_centroid(const cpl_image* img,</span></div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> <span class="comment">                   const int d,</span></div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> <span class="comment">                   const double xc,</span></div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> <span class="comment">                   const double yc,</span></div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> <span class="comment">                   double* xcen,</span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> <span class="comment">                   double* ycen,</span></div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> <span class="comment">                   double* xfwhm,</span></div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> <span class="comment">                   double* yfwhm,</span></div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> <span class="comment">                   double* angle)</span></div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span> <span class="comment">{</span></div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span> <span class="comment"></span></div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> <span class="comment">  cpl_bivector* q=NULL;</span></div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> <span class="comment">  int sx=0;</span></div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span> <span class="comment">  int sy=0;</span></div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> <span class="comment">  double* pq=NULL;</span></div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> <span class="comment">  double peak=0;</span></div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> <span class="comment">  double bkg=0;</span></div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> <span class="comment"></span></div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> <span class="comment">  check_nomsg(sx=cpl_image_get_size_x(img));</span></div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> <span class="comment">  check_nomsg(sy=cpl_image_get_size_y(img));</span></div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> <span class="comment"></span></div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span> <span class="comment">  check_nomsg(q=cpl_image_iqe(img,sx/2-d,sy/2-d,sx/2+d,sy/2+d));</span></div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span> <span class="comment">  pq=cpl_bivector_get_data(q);</span></div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> <span class="comment"></span></div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> <span class="comment">  *xcen=pq[0];</span></div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span> <span class="comment">  *ycen=pq[1];</span></div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span> <span class="comment">  *xfwhm=pq[2];</span></div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span> <span class="comment">  *yfwhm=pq[3];</span></div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> <span class="comment">  *angle=pq[4];</span></div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span> <span class="comment">  peak=pq[5];</span></div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> <span class="comment">  bkg=pq[6];</span></div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> <span class="comment"></span></div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> <span class="comment"></span></div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span> <span class="comment"> cleanup:</span></div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span> <span class="comment"></span></div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> <span class="comment">  sinfo_free_bivector(&q);</span></div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> <span class="comment"></span></div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> <span class="comment">  if (cpl_error_get_code() != CPL_ERROR_NONE) {</span></div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> <span class="comment">    return cpl_error_get_code();</span></div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> <span class="comment">  } else {</span></div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span> <span class="comment">    return CPL_ERROR_NONE;</span></div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> <span class="comment"></span></div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> <span class="comment">}</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> </div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> </div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> sinfo_find_min_of_four(<span class="keyword">const</span> <span class="keywordtype">double</span> n1,</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n2,</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n3,</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> n4)</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> {</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>   <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>   min = (n1 < n2) ? n1 : n2;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>   min = (min < n3) ? min : n3;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>   min = (min < n4) ? min : n4;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>   <span class="keywordflow">return</span> min;</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> }</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> </div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> sinfo_scale_flux(<span class="keyword">const</span> <span class="keywordtype">double</span> p1,</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> p2,</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> t1,</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> t2)</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> {</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span> </div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>   <span class="keywordflow">return</span> (p2/p1)*(p2/p1)*(t2/t1);</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> </div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span> }</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> </div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__psf_8h_source.html b/html/sinfo__new__psf_8h_source.html
index e29f354..02f0b28 100644
--- a/html/sinfo__new__psf_8h_source.html
+++ b/html/sinfo__new__psf_8h_source.html
@@ -2,170 +2,201 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_psf.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_psf.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_PSF_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_PSF_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_psf.h,v 1.12 2008/02/12 16:33:50 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_psf.h</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment"> sinfo_psf.py does the image reconstruction of a set of sky-subtracted, </span>
-<a name="l00035"></a>00035 <span class="comment"> flatfielded, </span>
-<a name="l00036"></a>00036 <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright </span>
-<a name="l00037"></a>00037 <span class="comment"> star with continuum spectrum. The resulting image can be used to determine </span>
-<a name="l00038"></a>00038 <span class="comment"> the PSF</span>
-<a name="l00039"></a>00039 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment"> */</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*</span>
-<a name="l00043"></a>00043 <span class="comment"> * header files</span>
-<a name="l00044"></a>00044 <span class="comment"> */</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span> 
-<a name="l00047"></a>00047 <span class="preprocessor">#include <irplib_strehl.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00052"></a>00052 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">   Function     :       sinfo_new_psf()</span>
-<a name="l00056"></a>00056 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00057"></a>00057 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00058"></a>00058 <span class="comment">   Job          :</span>
-<a name="l00059"></a>00059 <span class="comment"></span>
-<a name="l00060"></a>00060 <span class="comment"> sinfo_psf.py does the image reconstruction of a set of sky-subtracted, </span>
-<a name="l00061"></a>00061 <span class="comment"> flatfielded, bad pixel corrected and slope of the spectra aligned exposures </span>
-<a name="l00062"></a>00062 <span class="comment"> of a bright star with continuum spectrum. The resulting image can be used </span>
-<a name="l00063"></a>00063 <span class="comment"> to determine the PSF</span>
-<a name="l00064"></a>00064 <span class="comment"></span>
-<a name="l00065"></a>00065 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="keywordtype">int</span> 
-<a name="l00067"></a>00067 sinfo_new_psf(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00068"></a>00068               cpl_parameterlist* config,
-<a name="l00069"></a>00069               cpl_frameset* sof,
-<a name="l00070"></a>00070               cpl_frameset* ref_set) ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keywordtype">int</span> sinfo_strehl_compute_two(
-<a name="l00074"></a>00074               <span class="keyword">const</span> cpl_image *   im1,
-<a name="l00075"></a>00075               <span class="keyword">const</span> cpl_image *   im2,
-<a name="l00076"></a>00076               <span class="keywordtype">double</span>              m1,
-<a name="l00077"></a>00077               <span class="keywordtype">double</span>              m2,
-<a name="l00078"></a>00078               <span class="keywordtype">double</span>              lam,
-<a name="l00079"></a>00079               <span class="keywordtype">double</span>              pscale1,
-<a name="l00080"></a>00080               <span class="keywordtype">double</span>              pscale2,
-<a name="l00081"></a>00081               <span class="keywordtype">double</span>              exptime1,
-<a name="l00082"></a>00082               <span class="keywordtype">double</span>              exptime2,
-<a name="l00083"></a>00083               <span class="keywordtype">int</span>                 xpos1,
-<a name="l00084"></a>00084               <span class="keywordtype">int</span>                 ypos1,
-<a name="l00085"></a>00085               <span class="keywordtype">int</span>                 xpos2,
-<a name="l00086"></a>00086               <span class="keywordtype">int</span>                 ypos2,
-<a name="l00087"></a>00087               <span class="keywordtype">double</span>              r1,
-<a name="l00088"></a>00088               <span class="keywordtype">double</span>              r2,
-<a name="l00089"></a>00089               <span class="keywordtype">double</span>              r3,
-<a name="l00090"></a>00090               <span class="keywordtype">double</span>          *   strehl,
-<a name="l00091"></a>00091               <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l00092"></a>00092               <span class="keywordtype">double</span>          *   star_bg,
-<a name="l00093"></a>00093               <span class="keywordtype">double</span>          *   star_peak,
-<a name="l00094"></a>00094               <span class="keywordtype">double</span>          *   star_flux,
-<a name="l00095"></a>00095               <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l00096"></a>00096               <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l00097"></a>00097               <span class="keywordtype">double</span>          *   bg_noise);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 cpl_error_code 
-<a name="l00100"></a>00100 sinfo_strehl_compute_one(<span class="keyword">const</span> cpl_image *   im,
-<a name="l00101"></a>00101              <span class="keywordtype">double</span>              m1,
-<a name="l00102"></a>00102              <span class="keywordtype">double</span>              m2,
-<a name="l00103"></a>00103              <span class="keywordtype">double</span>              lam,
-<a name="l00104"></a>00104              <span class="keywordtype">double</span>              dlam,
-<a name="l00105"></a>00105              <span class="keywordtype">double</span>              pscale,
-<a name="l00106"></a>00106              <span class="keywordtype">int</span>                 xpos,
-<a name="l00107"></a>00107              <span class="keywordtype">int</span>                 ypos,
-<a name="l00108"></a>00108              <span class="keywordtype">double</span>              r1,
-<a name="l00109"></a>00109              <span class="keywordtype">double</span>              r2,
-<a name="l00110"></a>00110              <span class="keywordtype">double</span>              r3,
-<a name="l00111"></a>00111                          <span class="keywordtype">int</span>                 noise_box_sz,
-<a name="l00112"></a>00112              <span class="keywordtype">double</span>          *   strehl,
-<a name="l00113"></a>00113              <span class="keywordtype">double</span>          *   strehl_err,
-<a name="l00114"></a>00114              <span class="keywordtype">double</span>          *   star_bg,
-<a name="l00115"></a>00115              <span class="keywordtype">double</span>          *   star_peak,
-<a name="l00116"></a>00116              <span class="keywordtype">double</span>          *   star_flux,
-<a name="l00117"></a>00117              <span class="keywordtype">double</span>          *   psf_peak,
-<a name="l00118"></a>00118              <span class="keywordtype">double</span>          *   psf_flux,
-<a name="l00119"></a>00119              <span class="keywordtype">double</span>          *   bg_noise);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 cpl_error_code 
-<a name="l00125"></a>00125 sinfo_get_bkg_4corners(<span class="keyword">const</span> cpl_image *img,
-<a name="l00126"></a>00126                <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sx,
-<a name="l00127"></a>00127                        <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sy,
-<a name="l00128"></a>00128                        <span class="keywordtype">double</span>* bkg,
-<a name="l00129"></a>00129                        <span class="keywordtype">double</span>* std);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 cpl_error_code
-<a name="l00132"></a>00132 sinfo_compute_psf(<span class="keyword">const</span> <span class="keywordtype">double</span> dia, 
-<a name="l00133"></a>00133           <span class="keyword">const</span> <span class="keywordtype">double</span> occ,
-<a name="l00134"></a>00134           <span class="keyword">const</span> <span class="keywordtype">double</span> lambda,
-<a name="l00135"></a>00135           <span class="keyword">const</span> <span class="keywordtype">double</span> psize,
-<a name="l00136"></a>00136           <span class="keyword">const</span> <span class="keywordtype">double</span> cx,
-<a name="l00137"></a>00137           <span class="keyword">const</span> <span class="keywordtype">double</span> cy,
-<a name="l00138"></a>00138           <span class="keyword">const</span> <span class="keywordtype">double</span> anamorph,
-<a name="l00139"></a>00139           <span class="keywordtype">double</span>* psf_peak);
-<a name="l00140"></a>00140 cpl_error_code
-<a name="l00141"></a>00141 sinfo_get_flux_above_bkg(<span class="keyword">const</span> cpl_image* img, 
-<a name="l00142"></a>00142                          <span class="keyword">const</span> <span class="keywordtype">float</span> kappa, 
-<a name="l00143"></a>00143                          <span class="keyword">const</span> <span class="keywordtype">float</span> std, 
-<a name="l00144"></a>00144                          <span class="keywordtype">double</span>* f);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 <span class="keywordtype">double</span>
-<a name="l00148"></a>00148 sinfo_scale_flux(<span class="keyword">const</span> <span class="keywordtype">double</span> p1, 
-<a name="l00149"></a>00149                  <span class="keyword">const</span> <span class="keywordtype">double</span> p2, 
-<a name="l00150"></a>00150                  <span class="keyword">const</span> <span class="keywordtype">double</span> t1, 
-<a name="l00151"></a>00151                  <span class="keyword">const</span> <span class="keywordtype">double</span> t2);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="preprocessor">#endif </span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span>
-<a name="l00155"></a>00155 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_psf.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_PSF_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_PSF_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_psf.h,v 1.12 2008/02/12 16:33:50 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_psf.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> sinfo_psf.py does the image reconstruction of a set of sky-subtracted, </span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> flatfielded, </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> bad pixel corrected and slope of the spectra aligned exposures of a bright </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> star with continuum spectrum. The resulting image can be used to determine </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> the PSF</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <irplib_strehl.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   Function     :       sinfo_new_psf()</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> sinfo_psf.py does the image reconstruction of a set of sky-subtracted, </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> flatfielded, bad pixel corrected and slope of the spectra aligned exposures </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> of a bright star with continuum spectrum. The resulting image can be used </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> to determine the PSF</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_psf(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>               cpl_parameterlist* config,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>               cpl_frameset* sof,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>               cpl_frameset* ref_set) ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">int</span> sinfo_strehl_compute_two(</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>               <span class="keyword">const</span> cpl_image *   im1,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>               <span class="keyword">const</span> cpl_image *   im2,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>               <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>               <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>               <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>               <span class="keywordtype">double</span>              pscale1,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>               <span class="keywordtype">double</span>              pscale2,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>               <span class="keywordtype">double</span>              exptime1,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>               <span class="keywordtype">double</span>              exptime2,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>               <span class="keywordtype">int</span>                 xpos1,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>               <span class="keywordtype">int</span>                 ypos1,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>               <span class="keywordtype">int</span>                 xpos2,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>               <span class="keywordtype">int</span>                 ypos2,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>               <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>               <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>               <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>               <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>               <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>               <span class="keywordtype">double</span>          *   star_bg,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>               <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>               <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>               <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>               <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>               <span class="keywordtype">double</span>          *   bg_noise);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> cpl_error_code </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_strehl_compute_one(<span class="keyword">const</span> cpl_image *   im,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>              <span class="keywordtype">double</span>              m1,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>              <span class="keywordtype">double</span>              m2,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>              <span class="keywordtype">double</span>              lam,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>              <span class="keywordtype">double</span>              dlam,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>              <span class="keywordtype">double</span>              pscale,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>              <span class="keywordtype">int</span>                 xpos,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>              <span class="keywordtype">int</span>                 ypos,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>              <span class="keywordtype">double</span>              r1,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>              <span class="keywordtype">double</span>              r2,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>              <span class="keywordtype">double</span>              r3,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                          <span class="keywordtype">int</span>                 noise_box_sz,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>              <span class="keywordtype">double</span>          *   strehl,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>              <span class="keywordtype">double</span>          *   strehl_err,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>              <span class="keywordtype">double</span>          *   star_bg,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>              <span class="keywordtype">double</span>          *   star_peak,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>              <span class="keywordtype">double</span>          *   star_flux,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>              <span class="keywordtype">double</span>          *   psf_peak,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>              <span class="keywordtype">double</span>          *   psf_flux,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>              <span class="keywordtype">double</span>          *   bg_noise);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> cpl_error_code </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> sinfo_get_bkg_4corners(<span class="keyword">const</span> cpl_image *img,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sx,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> bkg_sy,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                        <span class="keywordtype">double</span>* bkg,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                        <span class="keywordtype">double</span>* std);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> cpl_error_code</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> sinfo_compute_psf(<span class="keyword">const</span> <span class="keywordtype">double</span> dia, </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> occ,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> lambda,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> psize,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> cx,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> cy,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>           <span class="keyword">const</span> <span class="keywordtype">double</span> anamorph,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           <span class="keywordtype">double</span>* psf_peak);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> cpl_error_code</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> sinfo_get_flux_above_bkg(<span class="keyword">const</span> cpl_image* img, </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                          <span class="keyword">const</span> <span class="keywordtype">float</span> kappa, </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                          <span class="keyword">const</span> <span class="keywordtype">float</span> std, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                          <span class="keywordtype">double</span>* f);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> sinfo_scale_flux(<span class="keyword">const</span> <span class="keywordtype">double</span> p1, </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> p2, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> t1, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> t2);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__resampling_8c_source.html b/html/sinfo__new__resampling_8c_source.html
index a4e230a..d10ac75 100644
--- a/html/sinfo__new__resampling_8c_source.html
+++ b/html/sinfo__new__resampling_8c_source.html
@@ -2,451 +2,482 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_resampling.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_resampling.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_new_resampling.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    Jan 04, 1996</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    resampling routines</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/*</span>
-<a name="l00030"></a>00030 <span class="comment">    $Id: sinfo_new_resampling.c,v 1.10 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Author: amodigli $</span>
-<a name="l00032"></a>00032 <span class="comment">    $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00033"></a>00033 <span class="comment">    $Revision: 1.10 $</span>
-<a name="l00034"></a>00034 <span class="comment"> */</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                  Includes</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <math.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_new_resampling.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_pixel_handling.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00046"></a>00046 <span class="comment">/* #include "my_pi.h" */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                              Private functions</span>
-<a name="l00050"></a>00050 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">void</span> new_reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn) ;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_new_sinc(<span class="keywordtype">double</span> x);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                              Function codes</span>
-<a name="l00057"></a>00057 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00066"></a>00066 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 <span class="keywordtype">double</span>   *
-<a name="l00093"></a>00093 sinfo_new_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type)
-<a name="l00094"></a>00094 {
-<a name="l00095"></a>00095     <span class="keywordtype">double</span>  *    tab ;
-<a name="l00096"></a>00096     <span class="keywordtype">int</span>         i ;
-<a name="l00097"></a>00097     <span class="keywordtype">double</span>      x ;
-<a name="l00098"></a>00098     <span class="keywordtype">double</span>        alpha ;
-<a name="l00099"></a>00099     <span class="keywordtype">double</span>        inv_norm ;
-<a name="l00100"></a>00100     <span class="keywordtype">int</span>         samples = KERNEL_SAMPLES ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="keywordflow">if</span> (kernel_type==NULL) {
-<a name="l00103"></a>00103         tab = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;
-<a name="l00104"></a>00104     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"default"</span>)) {
-<a name="l00105"></a>00105         tab = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;
-<a name="l00106"></a>00106     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinfo_new_sinc"</span>)) {
-<a name="l00107"></a>00107         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00108"></a>00108         tab[0] = 1.0 ;
-<a name="l00109"></a>00109         tab[samples-1] = 0.0 ;
-<a name="l00110"></a>00110         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {
-<a name="l00111"></a>00111             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;
-<a name="l00112"></a>00112             tab[i] = sinfo_new_sinc(x) ;
-<a name="l00113"></a>00113         }
-<a name="l00114"></a>00114     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc2"</span>)) {
-<a name="l00115"></a>00115         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00116"></a>00116         tab[0] = 1.0 ;
-<a name="l00117"></a>00117         tab[samples-1] = 0.0 ;
-<a name="l00118"></a>00118         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {
-<a name="l00119"></a>00119             x = 2.0 * (double)i/(<span class="keywordtype">double</span>)(samples-1) ;
-<a name="l00120"></a>00120             tab[i] = sinfo_new_sinc(x) ;
-<a name="l00121"></a>00121             tab[i] *= tab[i] ;
-<a name="l00122"></a>00122         }
-<a name="l00123"></a>00123     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"lanczos"</span>)) {
-<a name="l00124"></a>00124         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00125"></a>00125         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00126"></a>00126             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;
-<a name="l00127"></a>00127             <span class="keywordflow">if</span> (fabs(x)<2) {
-<a name="l00128"></a>00128                 tab[i] = sinfo_new_sinc(x) * sinfo_new_sinc(x/2) ;
-<a name="l00129"></a>00129             } <span class="keywordflow">else</span> {
-<a name="l00130"></a>00130                 tab[i] = 0.00 ;
-<a name="l00131"></a>00131             }
-<a name="l00132"></a>00132         }
-<a name="l00133"></a>00133     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hamming"</span>)) {
-<a name="l00134"></a>00134         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00135"></a>00135         alpha = 0.54 ;
-<a name="l00136"></a>00136         inv_norm  = 1.00 / (double)(samples - 1) ;
-<a name="l00137"></a>00137         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00138"></a>00138             x = (double)i ;
-<a name="l00139"></a>00139             <span class="keywordflow">if</span> (i<(samples-1)/2) {
-<a name="l00140"></a>00140                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;
-<a name="l00141"></a>00141             } <span class="keywordflow">else</span> {
-<a name="l00142"></a>00142                 tab[i] = 0.0 ;
-<a name="l00143"></a>00143             }
-<a name="l00144"></a>00144         }
-<a name="l00145"></a>00145     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hann"</span>)) {
-<a name="l00146"></a>00146         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00147"></a>00147         alpha = 0.50 ;
-<a name="l00148"></a>00148         inv_norm  = 1.00 / (double)(samples - 1) ;
-<a name="l00149"></a>00149         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00150"></a>00150             x = (double)i ;
-<a name="l00151"></a>00151             <span class="keywordflow">if</span> (i<(samples-1)/2) {
-<a name="l00152"></a>00152                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;
-<a name="l00153"></a>00153             } <span class="keywordflow">else</span> {
-<a name="l00154"></a>00154                 tab[i] = 0.0 ;
-<a name="l00155"></a>00155             }
-<a name="l00156"></a>00156         }
-<a name="l00157"></a>00157     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"tanh"</span>)) {
-<a name="l00158"></a>00158         tab = sinfo_new_generate_tanh_kernel(TANH_STEEPNESS) ;
-<a name="l00159"></a>00159     } <span class="keywordflow">else</span> {
-<a name="l00160"></a>00160         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized kernel type [%s]: aborting generation"</span>,
-<a name="l00161"></a>00161                 kernel_type) ;
-<a name="l00162"></a>00162         <span class="keywordflow">return</span> NULL ;
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keywordflow">return</span> tab ;
-<a name="l00166"></a>00166 }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00179"></a>00179 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="keywordtype">double</span>
-<a name="l00182"></a>00182 sinfo_new_sinc(<span class="keywordtype">double</span> x)
-<a name="l00183"></a>00183 {
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (fabs(x)<1e-4)
-<a name="l00185"></a>00185         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)1.00 ;
-<a name="l00186"></a>00186     <span class="keywordflow">else</span>
-<a name="l00187"></a>00187         <span class="keywordflow">return</span> ((sin(x * (<span class="keywordtype">double</span>)PI_NUMB)) / (x * (<span class="keywordtype">double</span>)PI_NUMB)) ;
-<a name="l00188"></a>00188 }
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00228"></a>00228 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 cpl_image *
-<a name="l00231"></a>00231 sinfo_new_warp_image_generic(
-<a name="l00232"></a>00232     cpl_image         *    image_in,
-<a name="l00233"></a>00233     <span class="keywordtype">char</span>          *    kernel_type,
-<a name="l00234"></a>00234     cpl_polynomial    *    poly_u,
-<a name="l00235"></a>00235     cpl_polynomial    *    poly_v
-<a name="l00236"></a>00236 )
-<a name="l00237"></a>00237 {
-<a name="l00238"></a>00238     cpl_image    *    image_out ;
-<a name="l00239"></a>00239     <span class="keywordtype">int</span>             i, j, k ;
-<a name="l00240"></a>00240     <span class="keywordtype">int</span>             lx_out, ly_out ;
-<a name="l00241"></a>00241     <span class="keywordtype">double</span>           cur ;
-<a name="l00242"></a>00242     <span class="keywordtype">double</span>           neighbors[16] ;
-<a name="l00243"></a>00243     <span class="keywordtype">double</span>           rsc[8],
-<a name="l00244"></a>00244                     sumrs ;
-<a name="l00245"></a>00245     <span class="keywordtype">double</span>           x, y ;
-<a name="l00246"></a>00246     <span class="keywordtype">int</span>             px, py ;
-<a name="l00247"></a>00247     <span class="keywordtype">int</span>             pos ;
-<a name="l00248"></a>00248     <span class="keywordtype">int</span>             tabx, taby ;
-<a name="l00249"></a>00249     <span class="keywordtype">double</span>      *    kernel ;
-<a name="l00250"></a>00250     <span class="keywordtype">int</span>                  leaps[16] ;
-<a name="l00251"></a>00251     <span class="keywordtype">int</span> ilx=0;
-<a name="l00252"></a>00252     <span class="keywordtype">int</span> ily=0;
-<a name="l00253"></a>00253     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00254"></a>00254     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00255"></a>00255     cpl_vector* vx=NULL;
-<a name="l00256"></a>00256     <span class="keywordflow">if</span> (image_in == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     <span class="comment">/* Generate default interpolation kernel */</span>
-<a name="l00260"></a>00260     kernel = sinfo_new_generate_interpolation_kernel(kernel_type) ;
-<a name="l00261"></a>00261     <span class="keywordflow">if</span> (kernel == NULL) {
-<a name="l00262"></a>00262         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot generate kernel: aborting resampling"</span>) ;
-<a name="l00263"></a>00263         <span class="keywordflow">return</span> NULL ;
-<a name="l00264"></a>00264     }
-<a name="l00265"></a>00265     ilx=cpl_image_get_size_x(image_in);
-<a name="l00266"></a>00266     ily=cpl_image_get_size_y(image_in);
-<a name="l00267"></a>00267     pidata=cpl_image_get_data_float(image_in);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269     <span class="comment">/* Compute new image size   */</span>
-<a name="l00270"></a>00270     lx_out = (int)ilx ;
-<a name="l00271"></a>00271     ly_out = (int)ily ;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     image_out = cpl_image_new(lx_out, ly_out,CPL_TYPE_FLOAT) ;
-<a name="l00274"></a>00274     podata=cpl_image_get_data_float(image_out);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="comment">/* Pre compute leaps for 16 closest neighbors positions */</span>
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     leaps[0] = -1 - ilx ;
-<a name="l00279"></a>00279     leaps[1] =    - ilx ;
-<a name="l00280"></a>00280     leaps[2] =  1 - ilx ;
-<a name="l00281"></a>00281     leaps[3] =  2 - ilx ;
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283     leaps[4] = -1 ;
-<a name="l00284"></a>00284     leaps[5] =  0 ;
-<a name="l00285"></a>00285     leaps[6] =  1 ;
-<a name="l00286"></a>00286     leaps[7] =  2 ;
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     leaps[8] = -1 + ilx ;
-<a name="l00289"></a>00289     leaps[9] =      ilx ;
-<a name="l00290"></a>00290     leaps[10]=  1 + ilx ;
-<a name="l00291"></a>00291     leaps[11]=  2 + ilx ;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     leaps[12]= -1 + 2*ilx ;
-<a name="l00294"></a>00294     leaps[13]=      2*ilx ;
-<a name="l00295"></a>00295     leaps[14]=  1 + 2*ilx ;
-<a name="l00296"></a>00296     leaps[15]=  2 + 2*ilx ;
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298     vx=cpl_vector_new(2); <span class="comment">/* vector of size 2 = polynomial dimension */</span>
-<a name="l00299"></a>00299     <span class="comment">/* Double loop on the output image  */</span>
-<a name="l00300"></a>00300     <span class="keywordflow">for</span> (j=0 ; j < ly_out ; j++) {
-<a name="l00301"></a>00301         <span class="keywordflow">for</span> (i=0 ; i< lx_out ; i++) {
-<a name="l00302"></a>00302             <span class="comment">/* Compute the original source for this pixel   */</span>
-<a name="l00303"></a>00303       cpl_vector_set(vx,0,(<span class="keywordtype">double</span>)i);
-<a name="l00304"></a>00304       cpl_vector_set(vx,1,(<span class="keywordtype">double</span>)j);
-<a name="l00305"></a>00305             x = cpl_polynomial_eval(poly_u, vx);
-<a name="l00306"></a>00306             y = cpl_polynomial_eval(poly_v, vx);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308             <span class="comment">/* Which is the closest integer positioned neighbor?    */</span>
-<a name="l00309"></a>00309             px = (int)x ;
-<a name="l00310"></a>00310             py = (int)y ;
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312             <span class="keywordflow">if</span> ((px < 1) ||
-<a name="l00313"></a>00313                 (px > (ilx-3)) ||
-<a name="l00314"></a>00314                 (py < 1) ||
-<a name="l00315"></a>00315                 (py > (ily-3)))
-<a name="l00316"></a>00316                 podata[i+j*lx_out] = (pixelvalue)0.0/0.0 ;
-<a name="l00317"></a>00317             <span class="keywordflow">else</span> {
-<a name="l00318"></a>00318                 <span class="comment">/* Now feed the positions for the closest 16 neighbors  */</span>
-<a name="l00319"></a>00319                 pos = px + py * ilx ;
-<a name="l00320"></a>00320                 <span class="keywordflow">for</span> (k=0 ; k<16 ; k++)
-<a name="l00321"></a>00321                     neighbors[k] = (<span class="keywordtype">double</span>)(pidata[(int)(pos+leaps[k])]) ;
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323                 <span class="comment">/* Which tabulated value index shall we use?    */</span>
-<a name="l00324"></a>00324                 tabx = (x - (double)px) * (double)(TABSPERPIX) ; 
-<a name="l00325"></a>00325                 taby = (y - (double)py) * (double)(TABSPERPIX) ; 
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327                 <span class="comment">/* Compute resampling coefficients  */</span>
-<a name="l00328"></a>00328                 <span class="comment">/* rsc[0..3] in x, rsc[4..7] in y   */</span>
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330                 rsc[0] = kernel[TABSPERPIX + tabx] ;
-<a name="l00331"></a>00331                 rsc[1] = kernel[tabx] ;
-<a name="l00332"></a>00332                 rsc[2] = kernel[TABSPERPIX - tabx] ;
-<a name="l00333"></a>00333                 rsc[3] = kernel[2 * TABSPERPIX - tabx] ;
-<a name="l00334"></a>00334                 rsc[4] = kernel[TABSPERPIX + taby] ;
-<a name="l00335"></a>00335                 rsc[5] = kernel[taby] ;
-<a name="l00336"></a>00336                 rsc[6] = kernel[TABSPERPIX - taby] ;
-<a name="l00337"></a>00337                 rsc[7] = kernel[2 * TABSPERPIX - taby] ;
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339                 sumrs = (rsc[0]+rsc[1]+rsc[2]+rsc[3]) *
-<a name="l00340"></a>00340                         (rsc[4]+rsc[5]+rsc[6]+rsc[7]) ;
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342                 <span class="comment">/* Compute interpolated pixel now   */</span>
-<a name="l00343"></a>00343                 cur =   rsc[4] * (  rsc[0]*neighbors[0] +
-<a name="l00344"></a>00344                                     rsc[1]*neighbors[1] +
-<a name="l00345"></a>00345                                     rsc[2]*neighbors[2] +
-<a name="l00346"></a>00346                                     rsc[3]*neighbors[3] ) +
-<a name="l00347"></a>00347                         rsc[5] * (  rsc[0]*neighbors[4] +
-<a name="l00348"></a>00348                                     rsc[1]*neighbors[5] +
-<a name="l00349"></a>00349                                     rsc[2]*neighbors[6] +
-<a name="l00350"></a>00350                                     rsc[3]*neighbors[7] ) +
-<a name="l00351"></a>00351                         rsc[6] * (  rsc[0]*neighbors[8] +
-<a name="l00352"></a>00352                                     rsc[1]*neighbors[9] +
-<a name="l00353"></a>00353                                     rsc[2]*neighbors[10] +
-<a name="l00354"></a>00354                                     rsc[3]*neighbors[11] ) +
-<a name="l00355"></a>00355                         rsc[7] * (  rsc[0]*neighbors[12] +
-<a name="l00356"></a>00356                                     rsc[1]*neighbors[13] +
-<a name="l00357"></a>00357                                     rsc[2]*neighbors[14] +
-<a name="l00358"></a>00358                                     rsc[3]*neighbors[15] ) ; 
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360                 <span class="comment">/* Affect the value to the output image */</span>
-<a name="l00361"></a>00361                 podata[i+j*lx_out] = (pixelvalue)(cur/sumrs) ;
-<a name="l00362"></a>00362                 <span class="comment">/* done ! */</span>
-<a name="l00363"></a>00363             }       
-<a name="l00364"></a>00364         }
-<a name="l00365"></a>00365     }
-<a name="l00366"></a>00366     cpl_vector_delete(vx);
-<a name="l00367"></a>00367     cpl_free(kernel) ;
-<a name="l00368"></a>00368     <span class="keywordflow">return</span> image_out ;
-<a name="l00369"></a>00369 }
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00393"></a>00393 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 <span class="preprocessor">#define hk_gen(x,s) (((tanh(s*(x+0.5))+1)/2)*((tanh(s*(-x+0.5))+1)/2))</span>
-<a name="l00396"></a>00396 <span class="preprocessor"></span>
-<a name="l00397"></a>00397 <span class="keywordtype">double</span> * sinfo_new_generate_tanh_kernel(<span class="keywordtype">double</span> steep)
-<a name="l00398"></a>00398 {
-<a name="l00399"></a>00399     <span class="keywordtype">double</span>  *   kernel ;
-<a name="l00400"></a>00400     <span class="keywordtype">double</span>  *   x ;
-<a name="l00401"></a>00401     <span class="keywordtype">double</span>      width ;
-<a name="l00402"></a>00402     <span class="keywordtype">double</span>      inv_np ;
-<a name="l00403"></a>00403     <span class="keywordtype">double</span>      ind ;
-<a name="l00404"></a>00404     <span class="keywordtype">int</span>         i ;
-<a name="l00405"></a>00405     <span class="keywordtype">int</span>         np ;
-<a name="l00406"></a>00406     <span class="keywordtype">int</span>         samples ;
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408     width   = (double)TABSPERPIX / 2.0 ; 
-<a name="l00409"></a>00409     samples = KERNEL_SAMPLES ;
-<a name="l00410"></a>00410     np      = 32768 ; <span class="comment">/* Hardcoded: should never be changed */</span>
-<a name="l00411"></a>00411     inv_np  = 1.00 / (double)np ;
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413     <span class="comment">/*</span>
-<a name="l00414"></a>00414 <span class="comment">     * Generate the kernel expression in Fourier space</span>
-<a name="l00415"></a>00415 <span class="comment">     * with a correct frequency ordering to allow standard FT</span>
-<a name="l00416"></a>00416 <span class="comment">     */</span>
-<a name="l00417"></a>00417     x = cpl_malloc((2*np+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00418"></a>00418     <span class="keywordflow">for</span> (i=0 ; i<np/2 ; i++) {
-<a name="l00419"></a>00419         ind      = (double)i * 2.0 * width * inv_np ;
-<a name="l00420"></a>00420         x[2*i]   = hk_gen(ind, steep) ;
-<a name="l00421"></a>00421         x[2*i+1] = 0.00 ;
-<a name="l00422"></a>00422     }
-<a name="l00423"></a>00423     <span class="keywordflow">for</span> (i=np/2 ; i<np ; i++) {
-<a name="l00424"></a>00424         ind      = (double)(i-np) * 2.0 * width * inv_np ;
-<a name="l00425"></a>00425         x[2*i]   = hk_gen(ind, steep) ;
-<a name="l00426"></a>00426         x[2*i+1] = 0.00 ;
-<a name="l00427"></a>00427     }
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429     <span class="comment">/* </span>
-<a name="l00430"></a>00430 <span class="comment">     * Reverse Fourier to come back to image space</span>
-<a name="l00431"></a>00431 <span class="comment">     */</span>
-<a name="l00432"></a>00432     new_reverse_tanh_kernel(x, np) ;
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434     <span class="comment">/*</span>
-<a name="l00435"></a>00435 <span class="comment">     * Allocate and fill in returned array</span>
-<a name="l00436"></a>00436 <span class="comment">     */</span>
-<a name="l00437"></a>00437     kernel = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00438"></a>00438     <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00439"></a>00439         kernel[i] = 2.0 * width * x[2*i] * inv_np ;
-<a name="l00440"></a>00440     }
-<a name="l00441"></a>00441     cpl_free(x) ;
-<a name="l00442"></a>00442     <span class="keywordflow">return</span> kernel ;
-<a name="l00443"></a>00443 }
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00458"></a>00458 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 <span class="preprocessor">#define KERNEL_SW(a,b) tempr=(a);(a)=(b);(b)=tempr</span>
-<a name="l00461"></a>00461 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> new_reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn)
-<a name="l00462"></a>00462 {
-<a name="l00463"></a>00463     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   n,
-<a name="l00464"></a>00464                     mmax,
-<a name="l00465"></a>00465                     m,
-<a name="l00466"></a>00466                     i, j,
-<a name="l00467"></a>00467                     istep ;
-<a name="l00468"></a>00468     <span class="keywordtype">double</span>  wtemp,
-<a name="l00469"></a>00469             wr,
-<a name="l00470"></a>00470             wpr,
-<a name="l00471"></a>00471             wpi,
-<a name="l00472"></a>00472             wi,
-<a name="l00473"></a>00473             theta;
-<a name="l00474"></a>00474     <span class="keywordtype">double</span>  tempr,
-<a name="l00475"></a>00475             tempi;
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477     n = (<span class="keywordtype">unsigned</span> long)nn << 1;
-<a name="l00478"></a>00478     j = 1;
-<a name="l00479"></a>00479     <span class="keywordflow">for</span> (i=1 ; i<n ; i+=2) {
-<a name="l00480"></a>00480         <span class="keywordflow">if</span> (j > i) {
-<a name="l00481"></a>00481             KERNEL_SW(data[j-1],data[i-1]);
-<a name="l00482"></a>00482             KERNEL_SW(data[j],data[i]);
-<a name="l00483"></a>00483         }
-<a name="l00484"></a>00484         m = n >> 1;
-<a name="l00485"></a>00485         <span class="keywordflow">while</span> (m>=2 && j>m) {
-<a name="l00486"></a>00486             j -= m;
-<a name="l00487"></a>00487             m >>= 1;
-<a name="l00488"></a>00488         }
-<a name="l00489"></a>00489         j += m;
-<a name="l00490"></a>00490     }
-<a name="l00491"></a>00491     mmax = 2;
-<a name="l00492"></a>00492     <span class="keywordflow">while</span> (n > mmax) {
-<a name="l00493"></a>00493         istep = mmax << 1;
-<a name="l00494"></a>00494         theta = 2 * PI_NUMB / mmax;
-<a name="l00495"></a>00495         wtemp = sin(0.5 * theta);
-<a name="l00496"></a>00496         wpr = -2.0 * wtemp * wtemp;
-<a name="l00497"></a>00497         wpi = sin(theta);
-<a name="l00498"></a>00498         wr  = 1.0;
-<a name="l00499"></a>00499         wi  = 0.0;
-<a name="l00500"></a>00500         <span class="keywordflow">for</span> (m=1 ; m<mmax ; m+=2) {
-<a name="l00501"></a>00501             <span class="keywordflow">for</span> (i=m ; i<=n ; i+=istep) {
-<a name="l00502"></a>00502                 j = i + mmax;
-<a name="l00503"></a>00503                 tempr = wr * data[j-1] - wi * data[j];
-<a name="l00504"></a>00504                 tempi = wr * data[j]   + wi * data[j-1];
-<a name="l00505"></a>00505                 data[j-1] = data[i-1] - tempr;
-<a name="l00506"></a>00506                 data[j]   = data[i]   - tempi;
-<a name="l00507"></a>00507                 data[i-1] += tempr;
-<a name="l00508"></a>00508                 data[i]   += tempi;
-<a name="l00509"></a>00509             }
-<a name="l00510"></a>00510             wr = (wtemp = wr) * wpr - wi * wpi + wr;
-<a name="l00511"></a>00511             wi = wi * wpr + wtemp * wpi + wi;
-<a name="l00512"></a>00512         }
-<a name="l00513"></a>00513         mmax = istep;
-<a name="l00514"></a>00514     }
-<a name="l00515"></a>00515 }
-<a name="l00516"></a>00516 <span class="preprocessor">#undef KERNEL_SW</span>
-<a name="l00517"></a>00517 <span class="preprocessor"></span>
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00533"></a>00533 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535 <span class="keywordtype">void</span> sinfo_new_show_interpolation_kernel(<span class="keywordtype">char</span> * kernel_name)
-<a name="l00536"></a>00536 {
-<a name="l00537"></a>00537     <span class="keywordtype">double</span>    *    ker ;
-<a name="l00538"></a>00538     <span class="keywordtype">int</span>            i ;
-<a name="l00539"></a>00539     <span class="keywordtype">double</span>        x ;
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542     ker = sinfo_new_generate_interpolation_kernel(kernel_name) ;
-<a name="l00543"></a>00543     <span class="keywordflow">if</span> (ker == NULL)
-<a name="l00544"></a>00544         return ;
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     (void)fprintf(stdout, <span class="stringliteral">"# Kernel is %s\n"</span>, kernel_name) ;
-<a name="l00547"></a>00547     x = 0.00 ;
-<a name="l00548"></a>00548     <span class="keywordflow">for</span> (i=0 ; i<KERNEL_SAMPLES ; i++) {
-<a name="l00549"></a>00549         (void)fprintf(stdout, <span class="stringliteral">"%g %g\n"</span>, x, ker[i]) ;
-<a name="l00550"></a>00550         x += 1.00 / (double)TABSPERPIX ;
-<a name="l00551"></a>00551     }
-<a name="l00552"></a>00552     cpl_free(ker) ;
-<a name="l00553"></a>00553     return ;
-<a name="l00554"></a>00554 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_resampling.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_new_resampling.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    Jan 04, 1996</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    resampling routines</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Id: sinfo_new_resampling.c,v 1.10 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">    $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">    $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_new_resampling.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_pixel_handling.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* #include "my_pi.h" */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                              Private functions</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">void</span> new_reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_new_sinc(<span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keywordtype">double</span>   *</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> sinfo_new_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">double</span>  *    tab ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">int</span>         i ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordtype">double</span>      x ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">double</span>        alpha ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordtype">double</span>        inv_norm ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">int</span>         samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordflow">if</span> (kernel_type==NULL) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         tab = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"default"</span>)) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         tab = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinfo_new_sinc"</span>)) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         tab[0] = 1.0 ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         tab[samples-1] = 0.0 ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>             tab[i] = sinfo_new_sinc(x) ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc2"</span>)) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         tab[0] = 1.0 ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         tab[samples-1] = 0.0 ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>             x = 2.0 * (double)i/(<span class="keywordtype">double</span>)(samples-1) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>             tab[i] = sinfo_new_sinc(x) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>             tab[i] *= tab[i] ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"lanczos"</span>)) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>             <span class="keywordflow">if</span> (fabs(x)<2) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                 tab[i] = sinfo_new_sinc(x) * sinfo_new_sinc(x/2) ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                 tab[i] = 0.00 ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>             }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hamming"</span>)) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         alpha = 0.54 ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         inv_norm  = 1.00 / (double)(samples - 1) ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>             x = (double)i ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>             <span class="keywordflow">if</span> (i<(samples-1)/2) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                 tab[i] = 0.0 ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>             }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hann"</span>)) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         alpha = 0.50 ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         inv_norm  = 1.00 / (double)(samples - 1) ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             x = (double)i ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>             <span class="keywordflow">if</span> (i<(samples-1)/2) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                 tab[i] = 0.0 ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>             }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"tanh"</span>)) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         tab = sinfo_new_generate_tanh_kernel(TANH_STEEPNESS) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized kernel type [%s]: aborting generation"</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                 kernel_type) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">return</span> tab ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> sinfo_new_sinc(<span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> (fabs(x)<1e-4)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)1.00 ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="keywordflow">return</span> ((sin(x * (<span class="keywordtype">double</span>)PI_NUMB)) / (x * (<span class="keywordtype">double</span>)PI_NUMB)) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> cpl_image *</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> sinfo_new_warp_image_generic(</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     cpl_image         *    image_in,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">char</span>          *    kernel_type,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_polynomial    *    poly_u,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cpl_polynomial    *    poly_v</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> )</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     cpl_image    *    image_out ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordtype">int</span>             i, j, k ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordtype">int</span>             lx_out, ly_out ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordtype">double</span>           cur ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordtype">double</span>           neighbors[16] ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordtype">double</span>           rsc[8],</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                     sumrs ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordtype">double</span>           x, y ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordtype">int</span>             px, py ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordtype">int</span>             pos ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordtype">int</span>             tabx, taby ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordtype">double</span>      *    kernel ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordtype">int</span>                  leaps[16] ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     cpl_vector* vx=NULL;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordflow">if</span> (image_in == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="comment">/* Generate default interpolation kernel */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     kernel = sinfo_new_generate_interpolation_kernel(kernel_type) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">if</span> (kernel == NULL) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot generate kernel: aborting resampling"</span>) ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     }</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     ilx=cpl_image_get_size_x(image_in);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     ily=cpl_image_get_size_y(image_in);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     pidata=cpl_image_get_data_float(image_in);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="comment">/* Compute new image size   */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     lx_out = (int)ilx ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     ly_out = (int)ily ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     image_out = cpl_image_new(lx_out, ly_out,CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     podata=cpl_image_get_data_float(image_out);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/* Pre compute leaps for 16 closest neighbors positions */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     leaps[0] = -1 - ilx ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     leaps[1] =    - ilx ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     leaps[2] =  1 - ilx ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     leaps[3] =  2 - ilx ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     leaps[4] = -1 ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     leaps[5] =  0 ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     leaps[6] =  1 ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     leaps[7] =  2 ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     leaps[8] = -1 + ilx ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     leaps[9] =      ilx ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     leaps[10]=  1 + ilx ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     leaps[11]=  2 + ilx ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     leaps[12]= -1 + 2*ilx ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     leaps[13]=      2*ilx ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     leaps[14]=  1 + 2*ilx ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     leaps[15]=  2 + 2*ilx ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     vx=cpl_vector_new(2); <span class="comment">/* vector of size 2 = polynomial dimension */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="comment">/* Double loop on the output image  */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordflow">for</span> (j=0 ; j < ly_out ; j++) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="keywordflow">for</span> (i=0 ; i< lx_out ; i++) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>             <span class="comment">/* Compute the original source for this pixel   */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>       cpl_vector_set(vx,0,(<span class="keywordtype">double</span>)i);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       cpl_vector_set(vx,1,(<span class="keywordtype">double</span>)j);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>             x = cpl_polynomial_eval(poly_u, vx);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>             y = cpl_polynomial_eval(poly_v, vx);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>             <span class="comment">/* Which is the closest integer positioned neighbor?    */</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             px = (int)x ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             py = (int)y ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>             <span class="keywordflow">if</span> ((px < 1) ||</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                 (px > (ilx-3)) ||</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                 (py < 1) ||</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                 (py > (ily-3)))</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                 podata[i+j*lx_out] = (pixelvalue)0.0/0.0 ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>             <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                 <span class="comment">/* Now feed the positions for the closest 16 neighbors  */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                 pos = px + py * ilx ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                 <span class="keywordflow">for</span> (k=0 ; k<16 ; k++)</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                     neighbors[k] = (<span class="keywordtype">double</span>)(pidata[(int)(pos+leaps[k])]) ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                 <span class="comment">/* Which tabulated value index shall we use?    */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                 tabx = (x - (double)px) * (double)(TABSPERPIX) ; </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                 taby = (y - (double)py) * (double)(TABSPERPIX) ; </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                 <span class="comment">/* Compute resampling coefficients  */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                 <span class="comment">/* rsc[0..3] in x, rsc[4..7] in y   */</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                 rsc[0] = kernel[TABSPERPIX + tabx] ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                 rsc[1] = kernel[tabx] ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                 rsc[2] = kernel[TABSPERPIX - tabx] ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                 rsc[3] = kernel[2 * TABSPERPIX - tabx] ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                 rsc[4] = kernel[TABSPERPIX + taby] ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                 rsc[5] = kernel[taby] ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                 rsc[6] = kernel[TABSPERPIX - taby] ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                 rsc[7] = kernel[2 * TABSPERPIX - taby] ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                 sumrs = (rsc[0]+rsc[1]+rsc[2]+rsc[3]) *</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                         (rsc[4]+rsc[5]+rsc[6]+rsc[7]) ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                 <span class="comment">/* Compute interpolated pixel now   */</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                 cur =   rsc[4] * (  rsc[0]*neighbors[0] +</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                                     rsc[1]*neighbors[1] +</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                                     rsc[2]*neighbors[2] +</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                                     rsc[3]*neighbors[3] ) +</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                         rsc[5] * (  rsc[0]*neighbors[4] +</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                                     rsc[1]*neighbors[5] +</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                                     rsc[2]*neighbors[6] +</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                                     rsc[3]*neighbors[7] ) +</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                         rsc[6] * (  rsc[0]*neighbors[8] +</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                                     rsc[1]*neighbors[9] +</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                                     rsc[2]*neighbors[10] +</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                                     rsc[3]*neighbors[11] ) +</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                         rsc[7] * (  rsc[0]*neighbors[12] +</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                                     rsc[1]*neighbors[13] +</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                                     rsc[2]*neighbors[14] +</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                                     rsc[3]*neighbors[15] ) ; </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                 <span class="comment">/* Affect the value to the output image */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                 podata[i+j*lx_out] = (pixelvalue)(cur/sumrs) ;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                 <span class="comment">/* done ! */</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>             }       </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     cpl_vector_delete(vx);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     cpl_free(kernel) ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordflow">return</span> image_out ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="preprocessor">#define hk_gen(x,s) (((tanh(s*(x+0.5))+1)/2)*((tanh(s*(-x+0.5))+1)/2))</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="keywordtype">double</span> * sinfo_new_generate_tanh_kernel(<span class="keywordtype">double</span> steep)</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordtype">double</span>  *   kernel ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordtype">double</span>  *   x ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordtype">double</span>      width ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordtype">double</span>      inv_np ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordtype">double</span>      ind ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="keywordtype">int</span>         i ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordtype">int</span>         np ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordtype">int</span>         samples ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     width   = (double)TABSPERPIX / 2.0 ; </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     np      = 32768 ; <span class="comment">/* Hardcoded: should never be changed */</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     inv_np  = 1.00 / (double)np ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">     * Generate the kernel expression in Fourier space</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="comment">     * with a correct frequency ordering to allow standard FT</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     x = cpl_malloc((2*np+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordflow">for</span> (i=0 ; i<np/2 ; i++) {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         ind      = (double)i * 2.0 * width * inv_np ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         x[2*i]   = hk_gen(ind, steep) ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         x[2*i+1] = 0.00 ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     <span class="keywordflow">for</span> (i=np/2 ; i<np ; i++) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         ind      = (double)(i-np) * 2.0 * width * inv_np ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>         x[2*i]   = hk_gen(ind, steep) ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         x[2*i+1] = 0.00 ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="comment">     * Reverse Fourier to come back to image space</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     new_reverse_tanh_kernel(x, np) ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment">     * Allocate and fill in returned array</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     kernel = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>         kernel[i] = 2.0 * width * x[2*i] * inv_np ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     cpl_free(x) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     <span class="keywordflow">return</span> kernel ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> }</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="preprocessor">#define KERNEL_SW(a,b) tempr=(a);(a)=(b);(b)=tempr</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> new_reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   n,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                     mmax,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                     m,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                     i, j,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                     istep ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     <span class="keywordtype">double</span>  wtemp,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             wr,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>             wpr,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>             wpi,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             wi,</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             theta;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordtype">double</span>  tempr,</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>             tempi;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     n = (<span class="keywordtype">unsigned</span> long)nn << 1;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     j = 1;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="keywordflow">for</span> (i=1 ; i<n ; i+=2) {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>         <span class="keywordflow">if</span> (j > i) {</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>             KERNEL_SW(data[j-1],data[i-1]);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>             KERNEL_SW(data[j],data[i]);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>         }</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         m = n >> 1;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>         <span class="keywordflow">while</span> (m>=2 && j>m) {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>             j -= m;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             m >>= 1;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>         }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         j += m;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     mmax = 2;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordflow">while</span> (n > mmax) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         istep = mmax << 1;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         theta = 2 * PI_NUMB / mmax;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         wtemp = sin(0.5 * theta);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>         wpr = -2.0 * wtemp * wtemp;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>         wpi = sin(theta);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         wr  = 1.0;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         wi  = 0.0;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         <span class="keywordflow">for</span> (m=1 ; m<mmax ; m+=2) {</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>             <span class="keywordflow">for</span> (i=m ; i<=n ; i+=istep) {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                 j = i + mmax;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>                 tempr = wr * data[j-1] - wi * data[j];</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>                 tempi = wr * data[j]   + wi * data[j-1];</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>                 data[j-1] = data[i-1] - tempr;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                 data[j]   = data[i]   - tempi;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                 data[i-1] += tempr;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                 data[i]   += tempi;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>             }</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             wr = (wtemp = wr) * wpr - wi * wpi + wr;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             wi = wi * wpr + wtemp * wpi + wi;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>         }</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         mmax = istep;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="preprocessor">#undef KERNEL_SW</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="keywordtype">void</span> sinfo_new_show_interpolation_kernel(<span class="keywordtype">char</span> * kernel_name)</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> {</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <span class="keywordtype">double</span>    *    ker ;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     <span class="keywordtype">int</span>            i ;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordtype">double</span>        x ;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     ker = sinfo_new_generate_interpolation_kernel(kernel_name) ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     <span class="keywordflow">if</span> (ker == NULL)</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         return ;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     (void)fprintf(stdout, <span class="stringliteral">"# Kernel is %s\n"</span>, kernel_name) ;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     x = 0.00 ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     <span class="keywordflow">for</span> (i=0 ; i<KERNEL_SAMPLES ; i++) {</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         (void)fprintf(stdout, <span class="stringliteral">"%g %g\n"</span>, x, ker[i]) ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>         x += 1.00 / (double)TABSPERPIX ;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     cpl_free(ker) ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     return ;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__resampling_8h_source.html b/html/sinfo__new__resampling_8h_source.html
index 3a1e5e2..9a3b6df 100644
--- a/html/sinfo__new__resampling_8h_source.html
+++ b/html/sinfo__new__resampling_8h_source.html
@@ -2,134 +2,165 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_resampling.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_resampling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_resampling.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    Jan 04, 1996</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    resampling routines</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/*</span>
-<a name="l00030"></a>00030 <span class="comment"></span>
-<a name="l00031"></a>00031 <span class="comment"> $Id: sinfo_new_resampling.h,v 1.9 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00032"></a>00032 <span class="comment"> $Author: amodigli $</span>
-<a name="l00033"></a>00033 <span class="comment"> $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00034"></a>00034 <span class="comment"> $Revision: 1.9 $</span>
-<a name="l00035"></a>00035 <span class="comment"></span>
-<a name="l00036"></a>00036 <span class="comment"> */</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#ifndef SINFO_NEW_RESAMPLING_H</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_RESAMPLING_H</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span>
-<a name="l00041"></a>00041 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                                  Includes</span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*</span>
-<a name="l00046"></a>00046 <span class="comment">#include "my_image_handling.h"</span>
-<a name="l00047"></a>00047 <span class="comment">#include "sinfo_matrix.h"</span>
-<a name="l00048"></a>00048 <span class="comment">*/</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_poly2d.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                                  Defines</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="preprocessor">#define TRANSFO_AFFINE          0</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_DEG2            1</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_HOMOGRAPHIC     2</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span>
-<a name="l00063"></a>00063 <span class="comment">/* Number of pixels set to 0 by the shift resampling */</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#define    SHIFT_REJECT_L            2</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_R            2</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_T            2</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_B            2</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 <span class="comment">/*</span>
-<a name="l00070"></a>00070 <span class="comment"> * Kernel definition in terms of sampling</span>
-<a name="l00071"></a>00071 <span class="comment"> */</span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/* Number of tabulations in kernel  */</span>
-<a name="l00075"></a>00075 <span class="preprocessor">#define TABSPERPIX      (1000)</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_WIDTH    (2.0)</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_SAMPLES  (1+(int)(TABSPERPIX * KERNEL_WIDTH))</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00079"></a>00079 <span class="preprocessor">#define TANH_STEEPNESS    (5.0)</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00083"></a>00083 <span class="comment">                         Function ANSI C prototypes</span>
-<a name="l00084"></a>00084 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00110"></a>00110 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keywordtype">double</span>   *
-<a name="l00114"></a>00114 sinfo_new_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type) ;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00153"></a>00153 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 cpl_image *
-<a name="l00157"></a>00157 sinfo_new_warp_image_generic(
-<a name="l00158"></a>00158     cpl_image       *    image_in,
-<a name="l00159"></a>00159     <span class="keywordtype">char</span>        *    kernel_type,
-<a name="l00160"></a>00160     cpl_polynomial  *    poly_u,
-<a name="l00161"></a>00161     cpl_polynomial  *    poly_v
-<a name="l00162"></a>00162 ) ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00186"></a>00186 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188 <span class="keywordtype">double</span> * sinfo_new_generate_tanh_kernel(<span class="keywordtype">double</span> steep) ;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00204"></a>00204 <span class="comment">/*--------------------------------------------------------------------------*/</span> 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 <span class="keywordtype">void</span> sinfo_new_show_interpolation_kernel(<span class="keywordtype">char</span> * kernel_name) ;
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_resampling.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_resampling.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    Jan 04, 1996</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    resampling routines</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Id: sinfo_new_resampling.h,v 1.9 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#ifndef SINFO_NEW_RESAMPLING_H</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_RESAMPLING_H</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">#include "my_image_handling.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">#include "sinfo_matrix.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_poly2d.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                  Defines</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define TRANSFO_AFFINE          0</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_DEG2            1</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_HOMOGRAPHIC     2</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/* Number of pixels set to 0 by the shift resampling */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#define    SHIFT_REJECT_L            2</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_R            2</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_T            2</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_B            2</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> * Kernel definition in terms of sampling</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/* Number of tabulations in kernel  */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#define TABSPERPIX      (1000)</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_WIDTH    (2.0)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_SAMPLES  (1+(int)(TABSPERPIX * KERNEL_WIDTH))</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#define TANH_STEEPNESS    (5.0)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">                         Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keywordtype">double</span>   *</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> sinfo_new_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> cpl_image *</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> sinfo_new_warp_image_generic(</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_image       *    image_in,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordtype">char</span>        *    kernel_type,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_polynomial  *    poly_u,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_polynomial  *    poly_v</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> ) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keywordtype">double</span> * sinfo_new_generate_tanh_kernel(<span class="keywordtype">double</span> steep) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">/*--------------------------------------------------------------------------*/</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="keywordtype">void</span> sinfo_new_show_interpolation_kernel(<span class="keywordtype">char</span> * kernel_name) ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__slit__pos_8c_source.html b/html/sinfo__new__slit__pos_8c_source.html
index fb31058..d45d32c 100644
--- a/html/sinfo__new__slit__pos_8c_source.html
+++ b/html/sinfo__new__slit__pos_8c_source.html
@@ -2,733 +2,764 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_slit_pos.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_slit_pos.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00002"></a>00002 <span class="comment"> </span>
-<a name="l00003"></a>00003 <span class="comment">   File name    :       sinfo_new_slit_pos.c</span>
-<a name="l00004"></a>00004 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00005"></a>00005 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00006"></a>00006 <span class="comment">   Description  : </span>
-<a name="l00007"></a>00007 <span class="comment"></span>
-<a name="l00008"></a>00008 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00009"></a>00009 <span class="comment">/*</span>
-<a name="l00010"></a>00010 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00011"></a>00011 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00012"></a>00012 <span class="comment"> *</span>
-<a name="l00013"></a>00013 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00014"></a>00014 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00015"></a>00015 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00016"></a>00016 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00017"></a>00017 <span class="comment"> *</span>
-<a name="l00018"></a>00018 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00019"></a>00019 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00021"></a>00021 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00022"></a>00022 <span class="comment"> *</span>
-<a name="l00023"></a>00023 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00024"></a>00024 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00025"></a>00025 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_new_slit_pos.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_wcal_functions.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                                Defines</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                             Function Definitions</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">   Function     :       sinfo_new_slit_pos()</span>
-<a name="l00062"></a>00062 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00063"></a>00063 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00064"></a>00064 <span class="comment">   Job          :</span>
-<a name="l00065"></a>00065 <span class="comment"></span>
-<a name="l00066"></a>00066 <span class="comment"></span>
-<a name="l00067"></a>00067 <span class="comment">  Normal method:</span>
-<a name="l00068"></a>00068 <span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00070"></a>00070 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00071"></a>00071 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00072"></a>00072 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00073"></a>00073 <span class="comment"></span>
-<a name="l00074"></a>00074 <span class="comment"></span>
-<a name="l00075"></a>00075 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00076"></a>00076 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00077"></a>00077 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00078"></a>00078 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00079"></a>00079 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00080"></a>00080 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00081"></a>00081 <span class="comment">    in an ASCII file.</span>
-<a name="l00082"></a>00082 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00083"></a>00083 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00084"></a>00084 <span class="comment">    original frame</span>
-<a name="l00085"></a>00085 <span class="comment"></span>
-<a name="l00086"></a>00086 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00087"></a>00087 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00088"></a>00088 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00089"></a>00089 <span class="comment"></span>
-<a name="l00090"></a>00090 <span class="comment">  Slit method:</span>
-<a name="l00091"></a>00091 <span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00093"></a>00093 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00094"></a>00094 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00095"></a>00095 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00096"></a>00096 <span class="comment"></span>
-<a name="l00097"></a>00097 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00098"></a>00098 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00099"></a>00099 <span class="comment"></span>
-<a name="l00100"></a>00100 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00101"></a>00101 <span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="keywordtype">int</span> sinfo_new_slit_pos (cpl_parameterlist* config, cpl_frameset* sof)
-<a name="l00107"></a>00107 {
-<a name="l00108"></a>00108     wave_config * cfg =NULL;
-<a name="l00109"></a>00109     <span class="keywordtype">int</span> check = 0;
-<a name="l00110"></a>00110     <span class="keywordtype">int</span> lx = 0;
-<a name="l00111"></a>00111     <span class="keywordtype">int</span> ly = 0;
-<a name="l00112"></a>00112     <span class="keywordtype">int</span> n_lines=0;
-<a name="l00113"></a>00113     <span class="keywordtype">int</span> i = 0;
-<a name="l00114"></a>00114     <span class="keywordtype">int</span> j = 0;
-<a name="l00115"></a>00115     <span class="keywordtype">int</span> n = 0;
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117     <span class="keywordtype">int</span> sum=0;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="keywordtype">int</span>* n_found_lines=NULL;
-<a name="l00120"></a>00120     <span class="keywordtype">int</span>* sum_pointer=NULL;
-<a name="l00121"></a>00121     <span class="keywordtype">int</span>** row_clean=NULL;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="keywordtype">float</span> a=0;
-<a name="l00124"></a>00124     <span class="keywordtype">float</span> shift=0;
-<a name="l00125"></a>00125     <span class="keywordtype">float</span>* wave=NULL;
-<a name="l00126"></a>00126     <span class="keywordtype">float</span>* intens=NULL;
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="keywordtype">float</span>** acoefs=NULL;
-<a name="l00129"></a>00129     <span class="keywordtype">float</span>** wavelength_clean=NULL;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     <span class="keywordtype">float</span>** sinfo_slit_pos=NULL;
-<a name="l00132"></a>00132  
-<a name="l00133"></a>00133     cpl_image *  map=NULL ;
-<a name="l00134"></a>00134     cpl_image * im=NULL ;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     FitParams** par=NULL;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     cpl_table* tbl_wcal=NULL;
-<a name="l00139"></a>00139     cpl_table* tbl_spos=NULL;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="keywordtype">char</span>* col_name=NULL;
-<a name="l00142"></a>00142     <span class="keywordtype">char</span>* tbl_name=NULL;
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="keywordtype">char</span>* tbl_line_list_name=NULL;
-<a name="l00145"></a>00145     cpl_table* tbl_line_list = NULL;
-<a name="l00146"></a>00146     <span class="keywordtype">int</span>* status=NULL;
-<a name="l00147"></a>00147  
-<a name="l00148"></a>00148     cpl_frameset* raw=NULL;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     cpl_table * tbl_fp =NULL;
-<a name="l00152"></a>00152     <span class="keywordtype">char</span>* col=NULL;
-<a name="l00153"></a>00153     cpl_table* qclog_tbl=NULL;
-<a name="l00154"></a>00154     <span class="keywordtype">char</span>* key_name=NULL;
-<a name="l00155"></a>00155     <span class="keywordtype">double</span> fwhm_med=0;
-<a name="l00156"></a>00156     <span class="keywordtype">double</span> fwhm_avg=0;
-<a name="l00157"></a>00157     <span class="keywordtype">double</span> coef_med=0;
-<a name="l00158"></a>00158     <span class="keywordtype">double</span> coef_avg=0;
-<a name="l00159"></a>00159     <span class="keywordtype">int</span> trow=0;
-<a name="l00160"></a>00160     qc_wcal* qc=sinfo_qc_wcal_new();
-<a name="l00161"></a>00161     <span class="comment">/*        -----------------------------------------------------------------</span>
-<a name="l00162"></a>00162 <span class="comment">       1) parse the file names and parameters to the ns_config data </span>
-<a name="l00163"></a>00163 <span class="comment">          structure cfg</span>
-<a name="l00164"></a>00164 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00165"></a>00165 <span class="comment">     */</span>
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);
-<a name="l00168"></a>00168     cfg = sinfo_parse_cpl_input_wave(config,sof,&raw) ;
-<a name="l00169"></a>00169     
-<a name="l00170"></a>00170     <span class="keywordflow">if</span>(cfg!=NULL) {
-<a name="l00171"></a>00171        cfg->nslitlets=32;
-<a name="l00172"></a>00172        cfg->calibIndicator=1;
-<a name="l00173"></a>00173        cfg->wavemapInd=0;
-<a name="l00174"></a>00174        cfg->slitposIndicator=1;
-<a name="l00175"></a>00175     }
-<a name="l00176"></a>00176     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00177"></a>00177       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00178"></a>00178       sinfo_qc_wcal_delete(&qc);
-<a name="l00179"></a>00179       <span class="keywordflow">return</span> -1;
-<a name="l00180"></a>00180     }
-<a name="l00181"></a>00181    
-<a name="l00182"></a>00182     <span class="keywordflow">if</span> (cfg == NULL)
-<a name="l00183"></a>00183     {
-<a name="l00184"></a>00184         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not parse cpl input!\n"</span>) ;
-<a name="l00185"></a>00185         sinfo_qc_wcal_delete(&qc);
-<a name="l00186"></a>00186         <span class="keywordflow">return</span> -1 ;
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {
-<a name="l00189"></a>00189       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);
-<a name="l00190"></a>00190       sinfo_qc_wcal_delete(&qc);
-<a name="l00191"></a>00191       <span class="keywordflow">return</span> -1;
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> (cfg->slitposIndicator == 1 && cfg->estimateIndicator == 1) {
-<a name="l00196"></a>00196       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposGuessName) != 1) {
-<a name="l00197"></a>00197         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"slitlet position guess list not given!"</span>);
-<a name="l00198"></a>00198         sinfo_qc_wcal_delete(&qc);
-<a name="l00199"></a>00199         <span class="keywordflow">return</span> -1;
-<a name="l00200"></a>00200       }
-<a name="l00201"></a>00201     }
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     <span class="keywordflow">if</span> (cfg->calibIndicator == 0 && cfg->wavemapInd == 1) {
-<a name="l00204"></a>00204       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->coeffsName) != 1) {
-<a name="l00205"></a>00205         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"coefficients list not given!"</span>);
-<a name="l00206"></a>00206         sinfo_qc_wcal_delete(&qc);
-<a name="l00207"></a>00207         <span class="keywordflow">return</span> -1;
-<a name="l00208"></a>00208       }
-<a name="l00209"></a>00209     }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {
-<a name="l00213"></a>00213       <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {
-<a name="l00214"></a>00214        
-<a name="l00215"></a>00215         <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->paramsList) != 1) {
-<a name="l00216"></a>00216       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parameter list not given!"</span>);
-<a name="l00217"></a>00217           sinfo_qc_wcal_delete(&qc);
-<a name="l00218"></a>00218       <span class="keywordflow">return</span> -1;
-<a name="l00219"></a>00219     }
-<a name="l00220"></a>00220     
-<a name="l00221"></a>00221       }
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="comment">/*---load the emission line frame---*/</span>
-<a name="l00225"></a>00225     im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0);
-<a name="l00226"></a>00226     <span class="keywordflow">if</span> (im == NULL) {
-<a name="l00227"></a>00227       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not load image\n"</span>);
-<a name="l00228"></a>00228       sinfo_qc_wcal_delete(&qc);
-<a name="l00229"></a>00229       <span class="keywordflow">return</span> -1;
-<a name="l00230"></a>00230     }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     lx = cpl_image_get_size_x(im);
-<a name="l00234"></a>00234     ly = cpl_image_get_size_y(im);
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 <span class="keywordflow">if</span> (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {
-<a name="l00239"></a>00239     <span class="comment">/*---open the line list and read the number of lines---*/</span>
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00242"></a>00242       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00243"></a>00243       sinfo_qc_wcal_delete(&qc);
-<a name="l00244"></a>00244       <span class="keywordflow">return</span> -1;
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     tbl_line_list_name=cfg->lineList;
-<a name="l00248"></a>00248     tbl_line_list = cpl_table_load(tbl_line_list_name,1,0);
-<a name="l00249"></a>00249     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00250"></a>00250       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00251"></a>00251       sinfo_qc_wcal_delete(&qc);
-<a name="l00252"></a>00252       <span class="keywordflow">return</span> -1;
-<a name="l00253"></a>00253     }
-<a name="l00254"></a>00254     n = cpl_table_get_nrow(tbl_line_list);
-<a name="l00255"></a>00255     n_lines = n;
-<a name="l00256"></a>00256     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00257"></a>00257       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00258"></a>00258       sinfo_qc_wcal_delete(&qc);
-<a name="l00259"></a>00259       <span class="keywordflow">return</span> -1;
-<a name="l00260"></a>00260     }
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262     <span class="comment">/* THIS ORIGINATES A MEMORY LEAK </span>
-<a name="l00263"></a>00263 <span class="comment">    wave   = sinfo_new_floatarray (n);</span>
-<a name="l00264"></a>00264 <span class="comment">    intens = sinfo_new_floatarray (n);</span>
-<a name="l00265"></a>00265 <span class="comment">    if (wave == NULL || intens == NULL) {</span>
-<a name="l00266"></a>00266 <span class="comment">      sinfo_msg_error("could not allocate memory for the line list values\n" );</span>
-<a name="l00267"></a>00267 <span class="comment">      sinfo_qc_wcal_delete(&qc);</span>
-<a name="l00268"></a>00268 <span class="comment">      return -1;</span>
-<a name="l00269"></a>00269 <span class="comment">    }</span>
-<a name="l00270"></a>00270 <span class="comment">    */</span>
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272     wave   = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>);
-<a name="l00273"></a>00273     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00274"></a>00274       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00275"></a>00275       sinfo_qc_wcal_delete(&qc);
-<a name="l00276"></a>00276       <span class="keywordflow">return</span> -1;
-<a name="l00277"></a>00277     }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>);
-<a name="l00280"></a>00280     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00281"></a>00281       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00282"></a>00282       sinfo_qc_wcal_delete(&qc);
-<a name="l00283"></a>00283       <span class="keywordflow">return</span> -1;
-<a name="l00284"></a>00284     }
-<a name="l00285"></a>00285     
-<a name="l00286"></a>00286 }
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="comment">/*</span>
-<a name="l00291"></a>00291 <span class="comment"> ----------------------------------------------------------------------</span>
-<a name="l00292"></a>00292 <span class="comment"> ---------------------------FINDLINES----------------------------------</span>
-<a name="l00293"></a>00293 <span class="comment"> ----------------------------------------------------------------------</span>
-<a name="l00294"></a>00294 <span class="comment"> */</span>
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 <span class="comment">/*if not yet done:</span>
-<a name="l00298"></a>00298 <span class="comment">  do the wavelength calibration, that means: </span>
-<a name="l00299"></a>00299 <span class="comment">  find the dispersion relation and parameterize its coefficients</span>
-<a name="l00300"></a>00300 <span class="comment"> */</span>
-<a name="l00301"></a>00301 <span class="comment">/*</span>
-<a name="l00302"></a>00302 <span class="comment"> sinfo_msg("guessBeginWave=%g",cfg->guessBeginWavelength);</span>
-<a name="l00303"></a>00303 <span class="comment"> sinfo_msg("guessDisp1=%g",cfg->guessDispersion1);</span>
-<a name="l00304"></a>00304 <span class="comment"> sinfo_msg("guessDisp2=%g",cfg->guessDispersion2);</span>
-<a name="l00305"></a>00305 <span class="comment">*/</span>
-<a name="l00306"></a>00306 <span class="keywordflow">if</span> (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {
-<a name="l00307"></a>00307    sinfo_msg(<span class="stringliteral">"Findlines"</span>);
-<a name="l00308"></a>00308    acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);
-<a name="l00309"></a>00309    <span class="comment">/*allocate memory*/</span>
-<a name="l00310"></a>00310    n_found_lines    = sinfo_new_intarray(lx); 
-<a name="l00311"></a>00311    row_clean        = sinfo_new_2Dintarray(lx, n_lines);
-<a name="l00312"></a>00312    wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);
-<a name="l00313"></a>00313    sum_pointer      = sinfo_new_intarray(1) ;
-<a name="l00314"></a>00314    <span class="comment">/*find the emission lines in each image column*/</span>
-<a name="l00315"></a>00315    sinfo_new_intarray_set_value(sum_pointer, 0, 0);
-<a name="l00316"></a>00316    check = sinfo_new_find_lines(im, wave, intens, n_lines, row_clean, 
-<a name="l00317"></a>00317                       wavelength_clean, cfg->guessBeginWavelength, 
-<a name="l00318"></a>00318              cfg->guessDispersion1, cfg->guessDispersion2,
-<a name="l00319"></a>00319                       cfg->mindiff, cfg->halfWidth, 
-<a name="l00320"></a>00320                       n_found_lines, cfg->sigma, sum_pointer );
-<a name="l00321"></a>00321    <span class="keywordflow">if</span> (-1 == check) {
-<a name="l00322"></a>00322            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_findLines failed!\n"</span>);
-<a name="l00323"></a>00323            sinfo_qc_wcal_delete(&qc);
-<a name="l00324"></a>00324            <span class="keywordflow">return</span> -1;
-<a name="l00325"></a>00325    }
-<a name="l00326"></a>00326       
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="comment">/*---------------------------------------------------------------------</span>
-<a name="l00329"></a>00329 <span class="comment"> *-----------------------WAVE_CALIB-------------------------------------</span>
-<a name="l00330"></a>00330 <span class="comment"> *---------------------------------------------------------------------</span>
-<a name="l00331"></a>00331 <span class="comment"> */</span>
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333      
-<a name="l00334"></a>00334    sinfo_msg(<span class="stringliteral">"Wave Calibration"</span>);
-<a name="l00335"></a>00335    sum = sinfo_new_intarray_get_value(sum_pointer,0);
-<a name="l00336"></a>00336    <span class="comment">/* allocate memory for the fit parameters */</span>
-<a name="l00337"></a>00337    par = sinfo_new_fit_params( sum );
-<a name="l00338"></a>00338    <span class="keywordflow">if</span> (par == NULL) {
-<a name="l00339"></a>00339         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_newFitParams failed!\n"</span>);
-<a name="l00340"></a>00340         sinfo_qc_wcal_delete(&qc);
-<a name="l00341"></a>00341         <span class="keywordflow">return</span> -1;
-<a name="l00342"></a>00342    }
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344   <span class="comment">/*</span>
-<a name="l00345"></a>00345 <span class="comment">   fit each line, make a polynomial fit and fit the resulting fit </span>
-<a name="l00346"></a>00346 <span class="comment">   coefficients across the columns of the slitlet</span>
-<a name="l00347"></a>00347 <span class="comment">   */</span>
-<a name="l00348"></a>00348    sinfo_slit_pos = sinfo_new_2Dfloatarray(32,2);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350    map = sinfo_new_spred_wave_cal(im, 
-<a name="l00351"></a>00351                  par, 
-<a name="l00352"></a>00352                  acoefs, 
-<a name="l00353"></a>00353                  cfg->nslitlets, 
-<a name="l00354"></a>00354                  row_clean, 
-<a name="l00355"></a>00355                  wavelength_clean, 
-<a name="l00356"></a>00356                  n_found_lines, 
-<a name="l00357"></a>00357                  cfg->guessDispersion1, 
-<a name="l00358"></a>00358                  cfg->halfWidth, 
-<a name="l00359"></a>00359                  cfg->minAmplitude, 
-<a name="l00360"></a>00360                  cfg->maxResidual, 
-<a name="l00361"></a>00361                  cfg->fwhm, 
-<a name="l00362"></a>00362                  cfg->nrDispCoefficients, 
-<a name="l00363"></a>00363                  cfg->nrCoefCoefficients, 
-<a name="l00364"></a>00364                  cfg->sigmaFactor, 
-<a name="l00365"></a>00365                  cfg->pixeldist, 
-<a name="l00366"></a>00366                  cfg->pixel_tolerance,
-<a name="l00367"></a>00367                  sinfo_slit_pos);
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369  
-<a name="l00370"></a>00370    <span class="keywordflow">if</span> (map == NULL ) { 
-<a name="l00371"></a>00371           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_wave_cal failed!\n"</span>);
-<a name="l00372"></a>00372           sinfo_qc_wcal_delete(&qc);
-<a name="l00373"></a>00373       <span class="keywordflow">return</span> -1;
-<a name="l00374"></a>00374    }
-<a name="l00375"></a>00375    sinfo_msg(<span class="stringliteral">"Check line positions"</span>);
-<a name="l00376"></a>00376   
-<a name="l00377"></a>00377    shift = sinfo_new_check_line_positions (im, acoefs, 
-<a name="l00378"></a>00378                                           cfg->nrDispCoefficients,
-<a name="l00379"></a>00379                                           cfg->guessDispersion1, par);
-<a name="l00380"></a>00380    <span class="keywordflow">if</span> (FLAG == shift){ 
-<a name="l00381"></a>00381       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"checkForLinePositions failed!\n"</span>);
-<a name="l00382"></a>00382    }
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);
-<a name="l00386"></a>00386     qclog_tbl = sinfo_qclog_init();
-<a name="l00387"></a>00387     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,
-<a name="l00388"></a>00388                   n_lines,<span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE NPIXSAT"</span>,
-<a name="l00391"></a>00391                   qc->nsat,<span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE MAXFLUX"</span>,
-<a name="l00394"></a>00394                 qc->max_di,<span class="stringliteral">"Max int off-lamp subracted frm"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396    <span class="keywordflow">if</span>(-1 == sinfo_pro_save_ima(map,raw,sof,cfg->outName,
-<a name="l00397"></a>00397          PRO_WAVE_MAP,qclog_tbl,cpl_func,config)) {
-<a name="l00398"></a>00398          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00399"></a>00399     }
-<a name="l00400"></a>00400    sinfo_free_table(&qclog_tbl);
-<a name="l00401"></a>00401  
-<a name="l00402"></a>00402  
-<a name="l00403"></a>00403    <span class="comment">/*</span>
-<a name="l00404"></a>00404 <span class="comment">    #store the resulting polynomial fit coefficients in an </span>
-<a name="l00405"></a>00405 <span class="comment">     ASCII file if wished</span>
-<a name="l00406"></a>00406 <span class="comment">    */</span>
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408    <span class="keywordflow">if</span> (cfg->writeCoeffsInd == 1) {
-<a name="l00409"></a>00409          col_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00410"></a>00410          tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00411"></a>00411          tbl_wcal = cpl_table_new(lx);
-<a name="l00412"></a>00412          <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00413"></a>00413              snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00414"></a>00414              cpl_table_new_column(tbl_wcal,col_name, CPL_TYPE_DOUBLE);
-<a name="l00415"></a>00415      }
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418          qclog_tbl = sinfo_qclog_init();
-<a name="l00419"></a>00419          key_name  = cpl_calloc(FILE_NAME_SZ,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00420"></a>00420          ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,
-<a name="l00421"></a>00421                n_lines,<span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425          <span class="keywordflow">for</span> (j=0; j< lx; j++) { 
-<a name="l00426"></a>00426         <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00427"></a>00427                 snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00428"></a>00428             a = sinfo_new_array2D_get_value(acoefs, i, j);
-<a name="l00429"></a>00429         <span class="comment">/* fprintf(acoefs_file, "%15.13g ", a) ; */</span>
-<a name="l00430"></a>00430                 cpl_table_set_double(tbl_wcal,col_name,j,a);
-<a name="l00431"></a>00431         }
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434      }
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00438"></a>00438             snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00439"></a>00439             coef_avg=cpl_table_get_column_mean(tbl_wcal,col_name);
-<a name="l00440"></a>00440             coef_med=cpl_table_get_column_median(tbl_wcal,col_name);
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442             trow=1+i;
-<a name="l00443"></a>00443             snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" AVG"</span>);
-<a name="l00444"></a>00444             ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_avg,
-<a name="l00445"></a>00445                          <span class="stringliteral">"Average wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447             trow=1+i+cfg->nrDispCoefficients;
-<a name="l00448"></a>00448             snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" MED"</span>);
-<a name="l00449"></a>00449             ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_med,
-<a name="l00450"></a>00450                          <span class="stringliteral">"Median wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452      }
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454      <span class="comment">/*</span>
-<a name="l00455"></a>00455 <span class="comment">         fclose(acoefs_file);</span>
-<a name="l00456"></a>00456 <span class="comment">     */</span>
-<a name="l00457"></a>00457          strcpy(tbl_name,cfg->coeffsName);
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459          <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_wcal,raw,sof,tbl_name,
-<a name="l00460"></a>00460              PRO_WAVE_COEF_SLIT,qclog_tbl,cpl_func,config)) {
-<a name="l00461"></a>00461          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00462"></a>00462          }
-<a name="l00463"></a>00463          sinfo_free_table(&tbl_wcal);
-<a name="l00464"></a>00464          sinfo_free_table(&qclog_tbl);
-<a name="l00465"></a>00465          cpl_free(key_name);
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467          cpl_free(col_name);
-<a name="l00468"></a>00468          cpl_free(tbl_name);
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470    }
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473    <span class="comment">/*</span>
-<a name="l00474"></a>00474 <span class="comment">    #store the resulting Gaussian fit parameters in an ASCII file if wished</span>
-<a name="l00475"></a>00475 <span class="comment">   */</span>
-<a name="l00476"></a>00476    <span class="keywordflow">if</span> (cfg->writeParInd == 1) {
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479       sinfo_new_dump_fit_params_to_ascii(par,WAVECAL_FIT_PARAMS_OUT_FILEASCII);
-<a name="l00480"></a>00480  
-<a name="l00481"></a>00481       <span class="keywordflow">if</span> ( NULL == par )
-<a name="l00482"></a>00482       {
-<a name="l00483"></a>00483          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no fit parameters available!"</span>) ;
-<a name="l00484"></a>00484          sinfo_qc_wcal_delete(&qc);
-<a name="l00485"></a>00485          <span class="keywordflow">return</span> -1;
-<a name="l00486"></a>00486       }
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488       <span class="keywordflow">if</span> ( NULL == cfg->paramsList )
-<a name="l00489"></a>00489       {
-<a name="l00490"></a>00490          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no filename available!"</span>) ;
-<a name="l00491"></a>00491          sinfo_qc_wcal_delete(&qc);
-<a name="l00492"></a>00492          <span class="keywordflow">return</span> -1;
-<a name="l00493"></a>00493       }
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495       tbl_fp = cpl_table_new(par[0] -> n_params);
-<a name="l00496"></a>00496       cpl_table_new_column(tbl_fp,<span class="stringliteral">"n_params"</span>, CPL_TYPE_INT);
-<a name="l00497"></a>00497       cpl_table_new_column(tbl_fp,<span class="stringliteral">"column"</span>, CPL_TYPE_INT);
-<a name="l00498"></a>00498       cpl_table_new_column(tbl_fp,<span class="stringliteral">"line"</span>, CPL_TYPE_INT);
-<a name="l00499"></a>00499       col = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501       <span class="keywordflow">for</span>(j=0;j<4;j++) {
-<a name="l00502"></a>00502          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);
-<a name="l00503"></a>00503          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);
-<a name="l00504"></a>00504          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);
-<a name="l00505"></a>00505          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);
-<a name="l00506"></a>00506       }
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510     qclog_tbl = sinfo_qclog_init();
-<a name="l00511"></a>00511     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,
-<a name="l00512"></a>00512                   <span class="stringliteral">"Number of Found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00513"></a>00513 
-<a name="l00514"></a>00514       <span class="keywordflow">for</span> ( i = 0 ; i < par[0] -> n_params ; i++ )
-<a name="l00515"></a>00515       {
-<a name="l00516"></a>00516          cpl_table_set_int(tbl_fp,<span class="stringliteral">"n_params"</span>,i,par[i]->n_params);
-<a name="l00517"></a>00517          cpl_table_set_int(tbl_fp,<span class="stringliteral">"column"</span>,i,par[i]->column);
-<a name="l00518"></a>00518          cpl_table_set_int(tbl_fp,<span class="stringliteral">"line"</span>,i,par[i]->line);
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521          <span class="keywordflow">for</span>(j=0;j<4;j++) {
-<a name="l00522"></a>00522         snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);
-<a name="l00523"></a>00523             cpl_table_set_double(tbl_fp,col,i,par[i]->fit_par[j]);
-<a name="l00524"></a>00524         snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);
-<a name="l00525"></a>00525             cpl_table_set_double(tbl_fp,col,i,par[i]->derv_par[j]);
-<a name="l00526"></a>00526      }
-<a name="l00527"></a>00527       }
-<a name="l00528"></a>00528 
-<a name="l00529"></a>00529       fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>);
-<a name="l00530"></a>00530       fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>);
-<a name="l00531"></a>00531       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,
-<a name="l00532"></a>00532                        <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,
-<a name="l00535"></a>00535                        <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538       <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_fp,raw,sof,cfg->paramsList,
-<a name="l00539"></a>00539          PRO_WAVE_PAR_LIST,qclog_tbl,cpl_func,config)) {
-<a name="l00540"></a>00540          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, cfg->paramsList);
-<a name="l00541"></a>00541       }
-<a name="l00542"></a>00542       sinfo_free_table(&qclog_tbl);
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544       sinfo_free_table(&tbl_fp) ;
-<a name="l00545"></a>00545       cpl_free(col);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547    }
-<a name="l00548"></a>00548    <span class="comment">/* free memory */</span>
-<a name="l00549"></a>00549    sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );
-<a name="l00550"></a>00550    sinfo_new_destroy_2Dintarray (&row_clean, lx);
-<a name="l00551"></a>00551    sinfo_new_destroy_intarray(&n_found_lines );
-<a name="l00552"></a>00552    sinfo_new_destroy_intarray(&sum_pointer );
-<a name="l00553"></a>00553    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555 <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00556"></a>00556 <span class="comment"> *-------------------WAVEMAP--------------------------------------------</span>
-<a name="l00557"></a>00557 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00558"></a>00558 <span class="comment"> */</span>
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560 <span class="comment">/*</span>
-<a name="l00561"></a>00561 <span class="comment">#---now do the cross sinfo_correlation and produce a wavelength map---</span>
-<a name="l00562"></a>00562 <span class="comment"> */</span>
-<a name="l00563"></a>00563 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 0) { 
-<a name="l00564"></a>00564   sinfo_msg(<span class="stringliteral">"Wavemap"</span>);
-<a name="l00565"></a>00565   acoefs = sinfo_new_2Dfloatarray ( cfg->nrDispCoefficients, lx);
-<a name="l00566"></a>00566    <span class="comment">/* #read the parameterized dispersion relation */</span>
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568    tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00569"></a>00569    col_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00570"></a>00570    strcpy(tbl_name,cfg->coeffsName);
-<a name="l00571"></a>00571    tbl_wcal = cpl_table_load(tbl_name,1,0);
-<a name="l00572"></a>00572     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00573"></a>00573       sinfo_msg(<span class="stringliteral">"cannot load table %s"</span>,tbl_name);
-<a name="l00574"></a>00574       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00575"></a>00575       sinfo_qc_wcal_delete(&qc);
-<a name="l00576"></a>00576       <span class="keywordflow">return</span> -1;
-<a name="l00577"></a>00577     }
-<a name="l00578"></a>00578    <span class="keywordflow">for</span> (i =0; i < lx; i++) {
-<a name="l00579"></a>00579       <span class="keywordflow">for</span> (j = 0; j< cfg->nrDispCoefficients; j++) {
-<a name="l00580"></a>00580             snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,j);
-<a name="l00581"></a>00581             acoefs[j][i]=cpl_table_get_double(tbl_wcal,col_name,i,status);
-<a name="l00582"></a>00582       }
-<a name="l00583"></a>00583    }
-<a name="l00584"></a>00584     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00585"></a>00585       sinfo_msg(<span class="stringliteral">"cannot read table %s"</span>,tbl_name);
-<a name="l00586"></a>00586       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00587"></a>00587       sinfo_qc_wcal_delete(&qc);
-<a name="l00588"></a>00588       <span class="keywordflow">return</span> -1;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590     cpl_free(col_name);
-<a name="l00591"></a>00591     cpl_free(tbl_name);
-<a name="l00592"></a>00592     sinfo_free_table(&tbl_wcal);
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594     map = sinfo_new_create_shifted_slit_wavemap2 ( im, 
-<a name="l00595"></a>00595                                           acoefs, 
-<a name="l00596"></a>00596                                           cfg->nrDispCoefficients,
-<a name="l00597"></a>00597                                           wave, 
-<a name="l00598"></a>00598                                           intens, 
-<a name="l00599"></a>00599                                           n_lines, 
-<a name="l00600"></a>00600                                           cfg->magFactor, 
-<a name="l00601"></a>00601                       cfg->guessDispersion1, 
-<a name="l00602"></a>00602                                           cfg->pixeldist );
-<a name="l00603"></a>00603    <span class="keywordflow">if</span> (map == NULL) {
-<a name="l00604"></a>00604            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_createShiftedSlitWavemap2 failed!\n"</span>);
-<a name="l00605"></a>00605            sinfo_qc_wcal_delete(&qc);
-<a name="l00606"></a>00606            <span class="keywordflow">return</span> -1;
-<a name="l00607"></a>00607    }
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609    par = sinfo_new_fit_params(15*n_lines);
-<a name="l00610"></a>00610    sinfo_msg(<span class="stringliteral">"Check shifts"</span>);
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612    shift = sinfo_new_check_correlated_line_positions ( im, acoefs, 
-<a name="l00613"></a>00613                                            cfg->nrDispCoefficients, 
-<a name="l00614"></a>00614                                            wave, 
-<a name="l00615"></a>00615                                            intens, 
-<a name="l00616"></a>00616                                            n_lines, 
-<a name="l00617"></a>00617                                            cfg->fwhm, 
-<a name="l00618"></a>00618                                            cfg->halfWidth, 
-<a name="l00619"></a>00619                                            cfg->minAmplitude, 
-<a name="l00620"></a>00620                                            cfg->guessDispersion1, 
-<a name="l00621"></a>00621                                            par );
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624    <span class="keywordflow">if</span> (FLAG == shift){
-<a name="l00625"></a>00625       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_checkCorrelatedLinePositions failed!\n"</span>);
-<a name="l00626"></a>00626    }
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);
-<a name="l00630"></a>00630     qclog_tbl = sinfo_qclog_init();
-<a name="l00631"></a>00631     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,
-<a name="l00632"></a>00632                   <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636     fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>);
-<a name="l00637"></a>00637     fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>);
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,
-<a name="l00640"></a>00640                      <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00641"></a>00641     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,
-<a name="l00642"></a>00642                      <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645     <span class="keywordflow">if</span>(-1 == sinfo_pro_save_ima(map,raw,sof,cfg->outName,
-<a name="l00646"></a>00646          PRO_WAVE_MAP,qclog_tbl,cpl_func,config)) {
-<a name="l00647"></a>00647          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00648"></a>00648     }
-<a name="l00649"></a>00649     sinfo_free_table(&qclog_tbl);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652    <span class="comment">/* # ---free memory--- */</span>
-<a name="l00653"></a>00653    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );
-<a name="l00654"></a>00654    <span class="comment">/* To fix a memory bug we comment the following. But check! */</span>
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 1) {
-<a name="l00657"></a>00657    <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"give either wavemapIndicator = yes and calibIndicator = no \</span>
-<a name="l00658"></a>00658 <span class="stringliteral">                or wavemapIndicator = no and calibIndicator = yes"</span>) ;
-<a name="l00659"></a>00659    sinfo_qc_wcal_delete(&qc);
-<a name="l00660"></a>00660    <span class="keywordflow">return</span> -1;
-<a name="l00661"></a>00661 }
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663 
-<a name="l00664"></a>00664 <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l00665"></a>00665 <span class="comment"> *-------------------SLITFITS----------------------------------------</span>
-<a name="l00666"></a>00666 <span class="comment"> *-------------------------------------------------------------------</span>
-<a name="l00667"></a>00667 <span class="comment"> #--fit the slitlet sinfo_edge positions if desired--</span>
-<a name="l00668"></a>00668 <span class="comment"> */</span>
-<a name="l00669"></a>00669 <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {
-<a name="l00670"></a>00670   sinfo_msg(<span class="stringliteral">"fit the slitlet sinfo_edge positions"</span>);
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673     <span class="comment">/* #store the resulting sitlet positions in an TFITS table */</span>
-<a name="l00674"></a>00674    tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00675"></a>00675    tbl_spos = cpl_table_new(32);
-<a name="l00676"></a>00676    cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE);
-<a name="l00677"></a>00677    cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE);
-<a name="l00678"></a>00678    cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>);
-<a name="l00679"></a>00679    cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>);
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681     <span class="keywordflow">for</span> (i =0; i< 32; i++) {
-<a name="l00682"></a>00682      <span class="comment">/*</span>
-<a name="l00683"></a>00683 <span class="comment">     fprintf( slitpos_file, "%15.9f %15.9f \n",</span>
-<a name="l00684"></a>00684 <span class="comment">      sinfo_new_array2D_get_value(sinfo_slit_pos,i,0),</span>
-<a name="l00685"></a>00685 <span class="comment">                        sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));</span>
-<a name="l00686"></a>00686 <span class="comment">     */</span>
-<a name="l00687"></a>00687       cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,
-<a name="l00688"></a>00688                            sinfo_new_array2D_get_value(sinfo_slit_pos,i,0));
-<a name="l00689"></a>00689       cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,
-<a name="l00690"></a>00690                            sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));
-<a name="l00691"></a>00691      
-<a name="l00692"></a>00692    }
-<a name="l00693"></a>00693     <span class="comment">/* strcpy(tbl_name,cfg->slitposName); */</span>
-<a name="l00694"></a>00694     strcpy(tbl_name,<span class="stringliteral">"out_guess_slit_pos.fits"</span>);
-<a name="l00695"></a>00695     <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_spos,raw,sof,tbl_name,
-<a name="l00696"></a>00696          PRO_SLIT_POS,NULL,cpl_func,config)) {
-<a name="l00697"></a>00697          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00698"></a>00698     }
-<a name="l00699"></a>00699     sinfo_free_table(&tbl_spos);
-<a name="l00700"></a>00700     cpl_free(tbl_name);
-<a name="l00701"></a>00701    <span class="comment">/*# free memory*/</span>
-<a name="l00702"></a>00702    sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );
-<a name="l00703"></a>00703    
-<a name="l00704"></a>00704    
-<a name="l00705"></a>00705 }
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707 <span class="comment">/* #-----free the rest memory--*/</span>
-<a name="l00708"></a>00708 <span class="keywordflow">if</span> ( (cfg->slitposIndicator == 1 && cfg->estimateIndicator != 1) || 
-<a name="l00709"></a>00709      (cfg->calibIndicator == 1)  || (cfg->wavemapInd == 1) ){
-<a name="l00710"></a>00710      sinfo_new_destroy_fit_params(&par);
-<a name="l00711"></a>00711 }
-<a name="l00712"></a>00712 sinfo_free_image( &im );
-<a name="l00713"></a>00713 sinfo_free_image( &map );
-<a name="l00714"></a>00714 sinfo_wavecal_free(&cfg);
-<a name="l00715"></a>00715 sinfo_qc_wcal_delete(&qc);
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717  <span class="keywordflow">return</span> 0;
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719  cleanup:
-<a name="l00720"></a>00720  <span class="keywordflow">return</span> -1;
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724 }
-<a name="l00725"></a>00725 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_slit_pos.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment">   File name    :       sinfo_new_slit_pos.c</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment">   Description  : </span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"></span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_new_slit_pos.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_wcal_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">   Function     :       sinfo_new_slit_pos()</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keywordtype">int</span> sinfo_new_slit_pos (cpl_parameterlist* config, cpl_frameset* sof)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     wave_config * cfg =NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordtype">int</span> check = 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="keywordtype">int</span> lx = 0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordtype">int</span> ly = 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">int</span> j = 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">int</span> n = 0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">int</span> sum=0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">int</span>* n_found_lines=NULL;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordtype">int</span>* sum_pointer=NULL;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">int</span>** row_clean=NULL;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">float</span> a=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordtype">float</span> shift=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordtype">float</span>* wave=NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordtype">float</span>* intens=NULL;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordtype">float</span>** acoefs=NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordtype">float</span>** wavelength_clean=NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">float</span>** sinfo_slit_pos=NULL;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>  </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_image *  map=NULL ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     FitParams** par=NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_table* tbl_wcal=NULL;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_table* tbl_spos=NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">char</span>* col_name=NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordtype">char</span>* tbl_name=NULL;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">char</span>* tbl_line_list_name=NULL;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_table* tbl_line_list = NULL;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>  </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_table * tbl_fp =NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordtype">char</span>* col=NULL;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">char</span>* key_name=NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">double</span> fwhm_med=0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordtype">double</span> fwhm_avg=0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">double</span> coef_med=0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">double</span> coef_avg=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordtype">int</span> trow=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     qc_wcal* qc=sinfo_qc_wcal_new();</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/*        -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">       1) parse the file names and parameters to the ns_config data </span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">          structure cfg</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     cfg = sinfo_parse_cpl_input_wave(config,sof,&raw) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">if</span>(cfg!=NULL) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>        cfg->nslitlets=32;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>        cfg->calibIndicator=1;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>        cfg->wavemapInd=0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>        cfg->slitposIndicator=1;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">if</span> (cfg == NULL)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not parse cpl input!\n"</span>) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->inFrame);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span> (cfg->slitposIndicator == 1 && cfg->estimateIndicator == 1) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposGuessName) != 1) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"slitlet position guess list not given!"</span>);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordflow">if</span> (cfg->calibIndicator == 0 && cfg->wavemapInd == 1) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->coeffsName) != 1) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"coefficients list not given!"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>        </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->paramsList) != 1) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parameter list not given!"</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>           sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/*---load the emission line frame---*/</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">if</span> (im == NULL) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not load image\n"</span>);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     lx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     ly = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="keywordflow">if</span> (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="comment">/*---open the line list and read the number of lines---*/</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     tbl_line_list_name=cfg->lineList;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     tbl_line_list = cpl_table_load(tbl_line_list_name,1,0);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     n = cpl_table_get_nrow(tbl_line_list);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     n_lines = n;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="comment">/* THIS ORIGINATES A MEMORY LEAK </span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">    wave   = sinfo_new_floatarray (n);</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">    intens = sinfo_new_floatarray (n);</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">    if (wave == NULL || intens == NULL) {</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">      sinfo_msg_error("could not allocate memory for the line list values\n" );</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">      sinfo_qc_wcal_delete(&qc);</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">      return -1;</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     wave   = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment"> ----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment"> ---------------------------FINDLINES----------------------------------</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment"> ----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">/*if not yet done:</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">  do the wavelength calibration, that means: </span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">  find the dispersion relation and parameterize its coefficients</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment"> sinfo_msg("guessBeginWave=%g",cfg->guessBeginWavelength);</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment"> sinfo_msg("guessDisp1=%g",cfg->guessDispersion1);</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment"> sinfo_msg("guessDisp2=%g",cfg->guessDispersion2);</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="keywordflow">if</span> (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    sinfo_msg(<span class="stringliteral">"Findlines"</span>);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    <span class="comment">/*allocate memory*/</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>    n_found_lines    = sinfo_new_intarray(lx); </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>    row_clean        = sinfo_new_2Dintarray(lx, n_lines);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>    sum_pointer      = sinfo_new_intarray(1) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>    <span class="comment">/*find the emission lines in each image column*/</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>    sinfo_new_intarray_set_value(sum_pointer, 0, 0);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>    check = sinfo_new_find_lines(im, wave, intens, n_lines, row_clean, </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                       wavelength_clean, cfg->guessBeginWavelength, </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>              cfg->guessDispersion1, cfg->guessDispersion2,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                       cfg->mindiff, cfg->halfWidth, </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                       n_found_lines, cfg->sigma, sum_pointer );</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    <span class="keywordflow">if</span> (-1 == check) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_findLines failed!\n"</span>);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>            sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>            <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>    }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">/*---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment"> *-----------------------WAVE_CALIB-------------------------------------</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment"> *---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>      </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    sinfo_msg(<span class="stringliteral">"Wave Calibration"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>    sum = sinfo_new_intarray_get_value(sum_pointer,0);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>    <span class="comment">/* allocate memory for the fit parameters */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>    par = sinfo_new_fit_params( sum );</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>    <span class="keywordflow">if</span> (par == NULL) {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_newFitParams failed!\n"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>    }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">   fit each line, make a polynomial fit and fit the resulting fit </span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">   coefficients across the columns of the slitlet</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    sinfo_slit_pos = sinfo_new_2Dfloatarray(32,2);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    map = sinfo_new_spred_wave_cal(im, </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                  par, </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                  acoefs, </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                  cfg->nslitlets, </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                  row_clean, </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                  wavelength_clean, </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                  n_found_lines, </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                  cfg->guessDispersion1, </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                  cfg->halfWidth, </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                  cfg->minAmplitude, </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                  cfg->maxResidual, </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                  cfg->fwhm, </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                  cfg->nrDispCoefficients, </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                  cfg->nrCoefCoefficients, </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                  cfg->sigmaFactor, </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                  cfg->pixeldist, </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                  cfg->pixel_tolerance,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                  sinfo_slit_pos);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>  </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>    <span class="keywordflow">if</span> (map == NULL ) { </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_wave_cal failed!\n"</span>);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>           sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>    }</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>    sinfo_msg(<span class="stringliteral">"Check line positions"</span>);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>    shift = sinfo_new_check_line_positions (im, acoefs, </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                           cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                                           cfg->guessDispersion1, par);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>    <span class="keywordflow">if</span> (FLAG == shift){ </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"checkForLinePositions failed!\n"</span>);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>    }</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     qclog_tbl = sinfo_qclog_init();</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                   n_lines,<span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE NPIXSAT"</span>,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                   qc->nsat,<span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE MAXFLUX"</span>,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                 qc->max_di,<span class="stringliteral">"Max int off-lamp subracted frm"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>    <span class="keywordflow">if</span>(-1 == sinfo_pro_save_ima(map,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>          PRO_WAVE_MAP,qclog_tbl,cpl_func,config)) {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>    sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>  </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>  </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment">    #store the resulting polynomial fit coefficients in an </span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">     ASCII file if wished</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>    <span class="keywordflow">if</span> (cfg->writeCoeffsInd == 1) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>          col_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>          tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>          tbl_wcal = cpl_table_new(lx);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>          <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>              snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>              cpl_table_new_column(tbl_wcal,col_name, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>      }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>          qclog_tbl = sinfo_qclog_init();</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>          key_name  = cpl_calloc(FILE_NAME_SZ,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>          ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                n_lines,<span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>          <span class="keywordflow">for</span> (j=0; j< lx; j++) { </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>         <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                 snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>             a = sinfo_new_array2D_get_value(acoefs, i, j);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         <span class="comment">/* fprintf(acoefs_file, "%15.13g ", a) ; */</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                 cpl_table_set_double(tbl_wcal,col_name,j,a);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>      }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>             snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>             coef_avg=cpl_table_get_column_mean(tbl_wcal,col_name);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             coef_med=cpl_table_get_column_median(tbl_wcal,col_name);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             trow=1+i;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" AVG"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_avg,</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>                          <span class="stringliteral">"Average wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             trow=1+i+cfg->nrDispCoefficients;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" MED"</span>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_med,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                          <span class="stringliteral">"Median wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>      }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment">         fclose(acoefs_file);</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>          strcpy(tbl_name,cfg->coeffsName);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>          <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_wcal,raw,sof,tbl_name,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>              PRO_WAVE_COEF_SLIT,qclog_tbl,cpl_func,config)) {</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>          }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>          sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>          sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>          cpl_free(key_name);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>          cpl_free(col_name);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>          cpl_free(tbl_name);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>    }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">    #store the resulting Gaussian fit parameters in an ASCII file if wished</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>    <span class="keywordflow">if</span> (cfg->writeParInd == 1) {</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>       sinfo_new_dump_fit_params_to_ascii(par,WAVECAL_FIT_PARAMS_OUT_FILEASCII);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>  </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no fit parameters available!"</span>) ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>          sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>          <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>       }</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       <span class="keywordflow">if</span> ( NULL == cfg->paramsList )</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>       {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no filename available!"</span>) ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>          sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>          <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       }</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       tbl_fp = cpl_table_new(par[0] -> n_params);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       cpl_table_new_column(tbl_fp,<span class="stringliteral">"n_params"</span>, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>       cpl_table_new_column(tbl_fp,<span class="stringliteral">"column"</span>, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>       cpl_table_new_column(tbl_fp,<span class="stringliteral">"line"</span>, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>       col = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       <span class="keywordflow">for</span>(j=0;j<4;j++) {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>       }</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     qclog_tbl = sinfo_qclog_init();</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                   <span class="stringliteral">"Number of Found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <span class="keywordflow">for</span> ( i = 0 ; i < par[0] -> n_params ; i++ )</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       {</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>          cpl_table_set_int(tbl_fp,<span class="stringliteral">"n_params"</span>,i,par[i]->n_params);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>          cpl_table_set_int(tbl_fp,<span class="stringliteral">"column"</span>,i,par[i]->column);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>          cpl_table_set_int(tbl_fp,<span class="stringliteral">"line"</span>,i,par[i]->line);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>          <span class="keywordflow">for</span>(j=0;j<4;j++) {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             cpl_table_set_double(tbl_fp,col,i,par[i]->fit_par[j]);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>             cpl_table_set_double(tbl_fp,col,i,par[i]->derv_par[j]);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>      }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>       }</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>       fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                        <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                        <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>       <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_fp,raw,sof,cfg->paramsList,</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>          PRO_WAVE_PAR_LIST,qclog_tbl,cpl_func,config)) {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, cfg->paramsList);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>       }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>       sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>       sinfo_free_table(&tbl_fp) ;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>       cpl_free(col);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>    }</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>    <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>    sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>    sinfo_new_destroy_2Dintarray (&row_clean, lx);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>    sinfo_new_destroy_intarray(&n_found_lines );</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>    sinfo_new_destroy_intarray(&sum_pointer );</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment"> *-------------------WAVEMAP--------------------------------------------</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">#---now do the cross sinfo_correlation and produce a wavelength map---</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 0) { </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   sinfo_msg(<span class="stringliteral">"Wavemap"</span>);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   acoefs = sinfo_new_2Dfloatarray ( cfg->nrDispCoefficients, lx);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>    <span class="comment">/* #read the parameterized dispersion relation */</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>    tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>    col_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>    strcpy(tbl_name,cfg->coeffsName);</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>    tbl_wcal = cpl_table_load(tbl_name,1,0);</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>       sinfo_msg(<span class="stringliteral">"cannot load table %s"</span>,tbl_name);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>    <span class="keywordflow">for</span> (i =0; i < lx; i++) {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>       <span class="keywordflow">for</span> (j = 0; j< cfg->nrDispCoefficients; j++) {</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,j);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>             acoefs[j][i]=cpl_table_get_double(tbl_wcal,col_name,i,status);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>       }</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>    }</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       sinfo_msg(<span class="stringliteral">"cannot read table %s"</span>,tbl_name);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>       sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     cpl_free(col_name);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     cpl_free(tbl_name);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     map = sinfo_new_create_shifted_slit_wavemap2 ( im, </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                                           acoefs, </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                                           cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                                           wave, </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                                           intens, </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                                           n_lines, </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                                           cfg->magFactor, </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                       cfg->guessDispersion1, </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>                                           cfg->pixeldist );</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>    <span class="keywordflow">if</span> (map == NULL) {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_createShiftedSlitWavemap2 failed!\n"</span>);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>            sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>            <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>    }</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>    par = sinfo_new_fit_params(15*n_lines);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>    sinfo_msg(<span class="stringliteral">"Check shifts"</span>);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>    shift = sinfo_new_check_correlated_line_positions ( im, acoefs, </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>                                            cfg->nrDispCoefficients, </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                                            wave, </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                                            intens, </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                                            n_lines, </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>                                            cfg->fwhm, </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>                                            cfg->halfWidth, </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                                            cfg->minAmplitude, </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>                                            cfg->guessDispersion1, </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>                                            par );</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>    <span class="keywordflow">if</span> (FLAG == shift){</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_checkCorrelatedLinePositions failed!\n"</span>);</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>    }</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     qclog_tbl = sinfo_qclog_init();</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                   <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                      <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                      <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="keywordflow">if</span>(-1 == sinfo_pro_save_ima(map,raw,sof,cfg->outName,</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>          PRO_WAVE_MAP,qclog_tbl,cpl_func,config)) {</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>    <span class="comment">/* # ---free memory--- */</span></div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>    <span class="comment">/* To fix a memory bug we comment the following. But check! */</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 1) {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>    <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"give either wavemapIndicator = yes and calibIndicator = no \</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> <span class="stringliteral">                or wavemapIndicator = no and calibIndicator = yes"</span>) ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>    sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> </div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="comment"> *-------------------SLITFITS----------------------------------------</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="comment"> *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment"> #--fit the slitlet sinfo_edge positions if desired--</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   sinfo_msg(<span class="stringliteral">"fit the slitlet sinfo_edge positions"</span>);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     <span class="comment">/* #store the resulting sitlet positions in an TFITS table */</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>    tbl_name = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>    tbl_spos = cpl_table_new(32);</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>    cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>    cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>    cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>    cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     <span class="keywordflow">for</span> (i =0; i< 32; i++) {</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">     fprintf( slitpos_file, "%15.9f %15.9f \n",</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="comment">      sinfo_new_array2D_get_value(sinfo_slit_pos,i,0),</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> <span class="comment">                        sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>       cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>                            sinfo_new_array2D_get_value(sinfo_slit_pos,i,0));</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>       cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>                            sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>      </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>    }</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="comment">/* strcpy(tbl_name,cfg->slitposName); */</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     strcpy(tbl_name,<span class="stringliteral">"out_guess_slit_pos.fits"</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">if</span>(-1 == sinfo_pro_save_tbl(tbl_spos,raw,sof,tbl_name,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>          PRO_SLIT_POS,NULL,cpl_func,config)) {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     sinfo_free_table(&tbl_spos);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     cpl_free(tbl_name);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>    <span class="comment">/*# free memory*/</span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>    sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>    </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>    </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> }</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="comment">/* #-----free the rest memory--*/</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> <span class="keywordflow">if</span> ( (cfg->slitposIndicator == 1 && cfg->estimateIndicator != 1) || </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>      (cfg->calibIndicator == 1)  || (cfg->wavemapInd == 1) ){</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>      sinfo_new_destroy_fit_params(&par);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> sinfo_free_image( &im );</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> sinfo_free_image( &map );</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> sinfo_wavecal_free(&cfg);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span> sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>  cleanup:</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>  <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> }</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__slit__pos_8h_source.html b/html/sinfo__new__slit__pos_8h_source.html
index b817500..db5e308 100644
--- a/html/sinfo__new__slit__pos_8h_source.html
+++ b/html/sinfo__new__slit__pos_8h_source.html
@@ -2,145 +2,176 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_slit_pos.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_slit_pos.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_SLIT_POS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_SLIT_POS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_slit_pos.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_slit_pos.h</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment">  Normal method:</span>
-<a name="l00035"></a>00035 <span class="comment"></span>
-<a name="l00036"></a>00036 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00037"></a>00037 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00038"></a>00038 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00039"></a>00039 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00040"></a>00040 <span class="comment"></span>
-<a name="l00041"></a>00041 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00042"></a>00042 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00043"></a>00043 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00044"></a>00044 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00045"></a>00045 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00046"></a>00046 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00047"></a>00047 <span class="comment">    in an ASCII file.</span>
-<a name="l00048"></a>00048 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00049"></a>00049 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00050"></a>00050 <span class="comment">    original frame</span>
-<a name="l00051"></a>00051 <span class="comment"></span>
-<a name="l00052"></a>00052 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00053"></a>00053 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00054"></a>00054 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00055"></a>00055 <span class="comment"></span>
-<a name="l00056"></a>00056 <span class="comment"></span>
-<a name="l00057"></a>00057 <span class="comment">  Slit method:</span>
-<a name="l00058"></a>00058 <span class="comment"></span>
-<a name="l00059"></a>00059 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00060"></a>00060 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00061"></a>00061 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00062"></a>00062 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00063"></a>00063 <span class="comment"></span>
-<a name="l00064"></a>00064 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00065"></a>00065 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00066"></a>00066 <span class="comment"></span>
-<a name="l00067"></a>00067 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00068"></a>00068 <span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00070"></a>00070 <span class="comment"> */</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*</span>
-<a name="l00073"></a>00073 <span class="comment"> * header files</span>
-<a name="l00074"></a>00074 <span class="comment"> */</span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00076"></a>00076 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00081"></a>00081 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00084"></a>00084 <span class="comment">   Function     :       sinfo_new_slit_pos()</span>
-<a name="l00085"></a>00085 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00086"></a>00086 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00087"></a>00087 <span class="comment">   Job          :</span>
-<a name="l00088"></a>00088 <span class="comment"></span>
-<a name="l00089"></a>00089 <span class="comment"></span>
-<a name="l00090"></a>00090 <span class="comment">  Normal method:</span>
-<a name="l00091"></a>00091 <span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00093"></a>00093 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00094"></a>00094 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00095"></a>00095 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00096"></a>00096 <span class="comment"></span>
-<a name="l00097"></a>00097 <span class="comment"></span>
-<a name="l00098"></a>00098 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00099"></a>00099 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00100"></a>00100 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00101"></a>00101 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00102"></a>00102 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00103"></a>00103 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00104"></a>00104 <span class="comment">    in an ASCII file.</span>
-<a name="l00105"></a>00105 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00106"></a>00106 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00107"></a>00107 <span class="comment">    original frame</span>
-<a name="l00108"></a>00108 <span class="comment"></span>
-<a name="l00109"></a>00109 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00110"></a>00110 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00111"></a>00111 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">  Slit method:</span>
-<a name="l00114"></a>00114 <span class="comment"></span>
-<a name="l00115"></a>00115 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00116"></a>00116 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00117"></a>00117 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00118"></a>00118 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00119"></a>00119 <span class="comment"></span>
-<a name="l00120"></a>00120 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00121"></a>00121 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00122"></a>00122 <span class="comment"></span>
-<a name="l00123"></a>00123 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00124"></a>00124 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 <span class="keywordtype">int</span> sinfo_new_slit_pos (cpl_parameterlist* config, cpl_frameset* sof) ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="preprocessor">#endif </span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>
-<a name="l00130"></a>00130 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_slit_pos.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_SLIT_POS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_SLIT_POS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_slit_pos.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_slit_pos.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   Function     :       sinfo_new_slit_pos()</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment"></span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment"></span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment"></span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment"></span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment"></span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keywordtype">int</span> sinfo_new_slit_pos (cpl_parameterlist* config, cpl_frameset* sof) ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__stdstar_8c_source.html b/html/sinfo__new__stdstar_8c_source.html
index 3c3afcd..1982a9f 100644
--- a/html/sinfo__new__stdstar_8c_source.html
+++ b/html/sinfo__new__stdstar_8c_source.html
@@ -2,667 +2,698 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_stdstar.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_stdstar.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_new_stdstar.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    J. Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    December 3, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    this routine doess the optimal extraction of a spectrum</span>
-<a name="l00025"></a>00025 <span class="comment">                        of an already reduced data cube of a standard star</span>
-<a name="l00026"></a>00026 <span class="comment">                        observation. Additionally, a conversion factor from</span>
-<a name="l00027"></a>00027 <span class="comment">                        mag to counts/sec can be determined if the magnitude</span>
-<a name="l00028"></a>00028 <span class="comment">                        of the standard star is known.</span>
-<a name="l00029"></a>00029 <span class="comment">                        This is done for a number of jittered data cubes and</span>
-<a name="l00030"></a>00030 <span class="comment">                        the results are averaged by rejecting the extreme</span>
-<a name="l00031"></a>00031 <span class="comment">                        values</span>
-<a name="l00032"></a>00032 <span class="comment"></span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                Includes</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <math.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">//Used only for sinfo_propertylist_has</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <irplib_stdstar.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_new_stdstar.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_standstar_ini_by_cpl.h"</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "sinfo_utl_efficiency.h"</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00061"></a>00061 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment">                                Defines</span>
-<a name="l00063"></a>00063 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00067"></a>00067 <span class="comment">                             Function Definitions</span>
-<a name="l00068"></a>00068 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 <span class="comment">/* temporally commented out as not yet used</span>
-<a name="l00070"></a>00070 <span class="comment">static int</span>
-<a name="l00071"></a>00071 <span class="comment">sinfo_compute_efficiency(cpl_frameset* sof,</span>
-<a name="l00072"></a>00072 <span class="comment">                              const char* name,</span>
-<a name="l00073"></a>00073 <span class="comment">                  standstar_config ** cfg,</span>
-<a name="l00074"></a>00074 <span class="comment">                  cpl_imagelist  * cube,</span>
-<a name="l00075"></a>00075 <span class="comment">             cpl_table** tbl_spectrum);</span>
-<a name="l00076"></a>00076 <span class="comment"></span>
-<a name="l00077"></a>00077 <span class="comment">*/</span>
-<a name="l00078"></a>00078 
-<a name="l00086"></a>00086 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00087"></a>00087 <span class="comment">   Function     :       sinfo_stdstar()</span>
-<a name="l00088"></a>00088 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00089"></a>00089 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span>
-<a name="l00090"></a>00090 <span class="comment">   Job          :     this routine carries through the data cube creation of an</span>
-<a name="l00091"></a>00091 <span class="comment">                        object science observation using object-sky nodding</span>
-<a name="l00092"></a>00092 <span class="comment">                        and jittering. This script expects jittered frames that</span>
-<a name="l00093"></a>00093 <span class="comment">                were already sky-subtracted</span>
-<a name="l00094"></a>00094 <span class="comment">                        averaged, flatfielded, spectral tilt corrected and</span>
-<a name="l00095"></a>00095 <span class="comment">            interleaved if necessary</span>
-<a name="l00096"></a>00096 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a>00097 <span class="keywordtype">int</span>
-<a name="l00098"></a>00098 sinfo_new_stdstar(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00099"></a>00099                   cpl_parameterlist* config,
-<a name="l00100"></a>00100                   cpl_frameset* sof,cpl_frameset* ref_set)
-<a name="l00101"></a>00101 {
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   cpl_errorstate clean_state = cpl_errorstate_get();
-<a name="l00104"></a>00104     standstar_config * cfg=NULL ;
-<a name="l00105"></a>00105     cpl_imagelist  * cube=NULL ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     cpl_imagelist  * list_object=NULL ;
-<a name="l00108"></a>00108     cpl_image ** spectrum=NULL ;
-<a name="l00109"></a>00109     cpl_image * img_spct=NULL ;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113     cpl_frameset* raw=NULL;
-<a name="l00114"></a>00114     cpl_frame* frame=NULL;
-<a name="l00115"></a>00115     cpl_image* std_med_ima=NULL;
-<a name="l00116"></a>00116     cpl_image* std_med_dup=NULL;
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118     cpl_table* qclog_tbl=NULL;
-<a name="l00119"></a>00119     cpl_table* tbl_spectrum=NULL;
-<a name="l00120"></a>00120     cpl_propertylist* plist=NULL;
-<a name="l00121"></a>00121     <span class="comment">//char band[FILE_NAME_SZ];</span>
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="keywordtype">char</span> * name=NULL ;
-<a name="l00124"></a>00124     <span class="keywordtype">int</span> fra=0;
-<a name="l00125"></a>00125     <span class="keywordtype">float</span> exptime=0 ;
-<a name="l00126"></a>00126     <span class="keywordtype">double</span> convfactor=0;
-<a name="l00127"></a>00127     <span class="keywordtype">double</span> cleanfactor=0;
-<a name="l00128"></a>00128     <span class="keywordtype">float</span>* factor=NULL;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130     <span class="keywordtype">char</span> std_med_filename[MAX_NAME_SIZE];
-<a name="l00131"></a>00131     <span class="keywordtype">char</span> std_cub_filename[MAX_NAME_SIZE];
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="keywordtype">double</span> max_ima_cx=0;
-<a name="l00134"></a>00134     <span class="keywordtype">double</span> max_ima_cy=0;
-<a name="l00135"></a>00135     cpl_size max_ima_x=0;
-<a name="l00136"></a>00136     cpl_size max_ima_y=0;
-<a name="l00137"></a>00137     <span class="keywordtype">double</span> norm=0;
-<a name="l00138"></a>00138     <span class="keywordtype">double</span> xcen=0;
-<a name="l00139"></a>00139     <span class="keywordtype">double</span> ycen=0;
-<a name="l00140"></a>00140     <span class="keywordtype">double</span> sig_x=0;
-<a name="l00141"></a>00141     <span class="keywordtype">double</span> sig_y=0;
-<a name="l00142"></a>00142     <span class="keywordtype">double</span> fwhm_x=0;
-<a name="l00143"></a>00143     <span class="keywordtype">double</span> fwhm_y=0;
-<a name="l00144"></a>00144     <span class="keywordtype">double</span> disp=0;
-<a name="l00145"></a>00145     <span class="keywordtype">double</span> dispersion=0;
-<a name="l00146"></a>00146     <span class="keywordtype">int</span> i=0;
-<a name="l00147"></a>00147     <span class="keywordtype">int</span> wllx=0;
-<a name="l00148"></a>00148     <span class="keywordtype">int</span> wlly=0;
-<a name="l00149"></a>00149     <span class="keywordtype">int</span> wurx=0;
-<a name="l00150"></a>00150     <span class="keywordtype">int</span> wury=0;
-<a name="l00151"></a>00151     <span class="keywordtype">int</span> psf_sz=40;
-<a name="l00152"></a>00152     <span class="keywordtype">int</span> qc_info=0;
-<a name="l00153"></a>00153     <span class="keywordtype">int</span> ima_szx=0;
-<a name="l00154"></a>00154     <span class="keywordtype">int</span> ima_szy=0;
-<a name="l00155"></a>00155     <span class="keywordtype">int</span> check1=0;
-<a name="l00156"></a>00156     <span class="keywordtype">int</span> check2=0;
-<a name="l00157"></a>00157     <span class="keywordtype">int</span> check3=0;
-<a name="l00158"></a>00158     <span class="keywordtype">int</span> check4=0;
-<a name="l00159"></a>00159     <span class="keywordtype">double</span> xshift=0;
-<a name="l00160"></a>00160     <span class="keywordtype">double</span> yshift=0;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="keywordtype">float</span> cenpix = 0;
-<a name="l00163"></a>00163     <span class="keywordtype">float</span> cenLambda = 0;
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     <span class="keywordtype">int</span> no=0;
-<a name="l00166"></a>00166     <span class="keywordtype">double</span> lo_cut=0.;
-<a name="l00167"></a>00167     <span class="keywordtype">double</span> hi_cut=0.;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="keyword">const</span> <span class="keywordtype">char</span>* stdstars=NULL;
-<a name="l00170"></a>00170     <span class="keyword">const</span> <span class="keywordtype">char</span>* sed=NULL;
-<a name="l00171"></a>00171     cpl_frame* frm_sci=NULL;
-<a name="l00172"></a>00172     cpl_frame* frm_atmext=NULL;
-<a name="l00173"></a>00173     cpl_frame* frm_std_cat=NULL;
-<a name="l00174"></a>00174     cpl_table* tot_eff=NULL;
-<a name="l00175"></a>00175     <span class="keywordtype">double</span> fpar[7];
-<a name="l00176"></a>00176     <span class="keywordtype">double</span> dpar[7];
-<a name="l00177"></a>00177     <span class="keywordtype">int</span> mpar[7];
-<a name="l00178"></a>00178     <span class="keywordtype">int</span> do_compute_eff=0;
-<a name="l00179"></a>00179     cpl_parameter* p=NULL;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="comment">//For new way to compute efficiency</span>
-<a name="l00183"></a>00183     <span class="comment">//char band[80];</span>
-<a name="l00184"></a>00184     <span class="comment">//const char  *   seds_file=NULL;</span>
-<a name="l00185"></a>00185     <span class="comment">//const char  *   filter=NULL;</span>
-<a name="l00186"></a>00186     <span class="comment">//cpl_table* tbl_eff=NULL;</span>
-<a name="l00187"></a>00187     <span class="comment">/*</span>
-<a name="l00188"></a>00188 <span class="comment">       parse the file names and parameters to the cube_config</span>
-<a name="l00189"></a>00189 <span class="comment">       data structure cfg</span>
-<a name="l00190"></a>00190 <span class="comment">     */</span>
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     <span class="comment">/* sinfo_msg("Parse cpl input"); */</span>
-<a name="l00193"></a>00193      check_nomsg(raw=cpl_frameset_new());
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     cknull(cfg=sinfo_parse_cpl_input_standstar(config,sof,&raw),
-<a name="l00196"></a>00196        <span class="stringliteral">"could not parse cpl input!"</span>) ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198  
-<a name="l00199"></a>00199     cknull_nomsg(p = cpl_parameterlist_find(config,
-<a name="l00200"></a>00200                      <span class="stringliteral">"sinfoni.std_star.compute_eff"</span>));
-<a name="l00201"></a>00201  
-<a name="l00202"></a>00202     check_nomsg(do_compute_eff = cpl_parameter_get_bool(p));
-<a name="l00203"></a>00203      cknull(list_object = cpl_imagelist_new (),
-<a name="l00204"></a>00204        <span class="stringliteral">"could not allocate memory"</span>);
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     sed = sinfo_extract_filename(sof, SINFO_CALIB_SED) ;
-<a name="l00208"></a>00208     stdstars = sinfo_extract_filename(sof, SINFO_CALIB_STDSTARS) ;
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     <span class="keywordflow">if</span> (cfg->convInd == 1) {
-<a name="l00212"></a>00212       factor = sinfo_new_floatarray(cfg->nframes);
-<a name="l00213"></a>00213     }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {
-<a name="l00216"></a>00216       frame = cpl_frameset_find(sof,PRO_COADD_STD);
-<a name="l00217"></a>00217       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00218"></a>00218     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {
-<a name="l00219"></a>00219       frame = cpl_frameset_find(sof,PRO_COADD_PSF);
-<a name="l00220"></a>00220       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00221"></a>00221     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {
-<a name="l00222"></a>00222       frame = cpl_frameset_find(sof,PRO_COADD_OBJ);
-<a name="l00223"></a>00223       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00224"></a>00224     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PUPIL)) {
-<a name="l00225"></a>00225       frame = cpl_frameset_find(sof,PRO_COADD_PUPIL);
-<a name="l00226"></a>00226       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00227"></a>00227     } <span class="keywordflow">else</span> {
-<a name="l00228"></a>00228       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s, %s, %s or %s not found! Exit!"</span>,
-<a name="l00229"></a>00229                        PRO_COADD_STD,PRO_COADD_PSF,
-<a name="l00230"></a>00230                        PRO_COADD_OBJ,PRO_COADD_PUPIL );
-<a name="l00231"></a>00231       <span class="keywordflow">goto</span> cleanup;
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     cknull(plist = cpl_propertylist_load(std_cub_filename, 0),
-<a name="l00236"></a>00236       <span class="stringliteral">"getting header from reference ima frame %s"</span>,std_cub_filename);
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     cenpix = sinfo_pfits_get_crpix3(plist);
-<a name="l00239"></a>00239     cenLambda = sinfo_pfits_get_crval3(plist);
-<a name="l00240"></a>00240     dispersion = sinfo_pfits_get_cdelt3(plist);
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CDELT3)) {
-<a name="l00244"></a>00244       disp=cpl_propertylist_get_double(plist, KEY_NAME_CDELT3);
-<a name="l00245"></a>00245     } <span class="keywordflow">else</span> {
-<a name="l00246"></a>00246       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Keyword %s not found."</span>,KEY_NAME_CDELT3);
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250     sinfo_free_propertylist(&plist) ;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="comment">/* we find automatiocally extraction parameters */</span>
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_STD)) {
-<a name="l00256"></a>00256       frame = cpl_frameset_find(sof,PRO_MED_COADD_STD);
-<a name="l00257"></a>00257       strcpy(std_med_filename,cpl_frame_get_filename(frame));
-<a name="l00258"></a>00258       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,
-<a name="l00259"></a>00259                                              CPL_TYPE_FLOAT,0,0));
-<a name="l00260"></a>00260     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {
-<a name="l00261"></a>00261       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_STD));
-<a name="l00262"></a>00262       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00263"></a>00263       check_nomsg(cube = cpl_imagelist_load(std_cub_filename,
-<a name="l00264"></a>00264                                              CPL_TYPE_FLOAT,0));
-<a name="l00265"></a>00265       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);
-<a name="l00266"></a>00266       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));
-<a name="l00267"></a>00267       sinfo_free_imagelist(&cube);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,
-<a name="l00270"></a>00270                  PRO_MED_OBS_PSF,NULL,plugin_id,config),
-<a name="l00271"></a>00271       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_PSF);
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_PSF)) {
-<a name="l00274"></a>00274       check_nomsg(frame = cpl_frameset_find(sof,PRO_MED_COADD_PSF));
-<a name="l00275"></a>00275       strcpy(std_med_filename,cpl_frame_get_filename(frame));
-<a name="l00276"></a>00276       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,
-<a name="l00277"></a>00277                                              CPL_TYPE_FLOAT,0,0));
-<a name="l00278"></a>00278     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {
-<a name="l00279"></a>00279       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_PSF));
-<a name="l00280"></a>00280       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00281"></a>00281       check_nomsg(cube=cpl_imagelist_load(std_cub_filename,CPL_TYPE_FLOAT,0));
-<a name="l00282"></a>00282       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);
-<a name="l00283"></a>00283       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));
-<a name="l00284"></a>00284       sinfo_free_imagelist(&cube);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,
-<a name="l00287"></a>00287                  PRO_MED_OBS_PSF,NULL,plugin_id,config),
-<a name="l00288"></a>00288       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_PSF);
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_OBJ)) {
-<a name="l00291"></a>00291       check_nomsg(frame = cpl_frameset_find(sof,PRO_MED_COADD_OBJ));
-<a name="l00292"></a>00292       strcpy(std_med_filename,cpl_frame_get_filename(frame));
-<a name="l00293"></a>00293       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,
-<a name="l00294"></a>00294                                              CPL_TYPE_FLOAT,0,0));
-<a name="l00295"></a>00295     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {
-<a name="l00296"></a>00296       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_OBJ));
-<a name="l00297"></a>00297       strcpy(std_cub_filename,cpl_frame_get_filename(frame));
-<a name="l00298"></a>00298       check_nomsg(cube = cpl_imagelist_load(std_cub_filename,
-<a name="l00299"></a>00299                                              CPL_TYPE_FLOAT,0));
-<a name="l00300"></a>00300       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);
-<a name="l00301"></a>00301       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));
-<a name="l00302"></a>00302       sinfo_free_imagelist(&cube);
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,
-<a name="l00305"></a>00305                  PRO_MED_OBS_OBJ,NULL,plugin_id,config),
-<a name="l00306"></a>00306       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_OBJ);
-<a name="l00307"></a>00307     } <span class="keywordflow">else</span> {
-<a name="l00308"></a>00308       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s %s %s %s %s %s not found! Exit!"</span>,
-<a name="l00309"></a>00309               PRO_MED_COADD_STD, PRO_OBS_STD,
-<a name="l00310"></a>00310                       PRO_MED_COADD_PSF, PRO_OBS_PSF,
-<a name="l00311"></a>00311                       PRO_MED_COADD_OBJ, PRO_OBS_OBJ);
-<a name="l00312"></a>00312       <span class="keywordflow">goto</span> cleanup;
-<a name="l00313"></a>00313     }
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316     check_nomsg(std_med_dup=cpl_image_duplicate(std_med_ima));
-<a name="l00317"></a>00317     sinfo_clean_nan(&std_med_dup);
-<a name="l00318"></a>00318     check_nomsg(cpl_image_get_maxpos(std_med_dup,&max_ima_x,&max_ima_y));
-<a name="l00319"></a>00319     sinfo_free_image(&std_med_dup);
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322     ima_szx=cpl_image_get_size_x(std_med_ima);
-<a name="l00323"></a>00323     ima_szy=cpl_image_get_size_y(std_med_ima);
-<a name="l00324"></a>00324     wllx= ((max_ima_x-psf_sz)>0)       ? (max_ima_x-psf_sz) : 1;
-<a name="l00325"></a>00325     wlly= ((max_ima_y-psf_sz)>0)       ? (max_ima_y-psf_sz) : 1;
-<a name="l00326"></a>00326     wurx= ((max_ima_x+psf_sz)<ima_szx) ? (max_ima_x+psf_sz) : ima_szx ;
-<a name="l00327"></a>00327     wury= ((max_ima_y+psf_sz)<ima_szy) ? (max_ima_y+psf_sz) : ima_szy ;
-<a name="l00328"></a>00328     <span class="comment">/*</span>
-<a name="l00329"></a>00329 <span class="comment">    sinfo_msg("wllx=%d wlly=%d wurx=%d wury=%d\n",wllx,wlly,wurx,wury);</span>
-<a name="l00330"></a>00330 <span class="comment">    cpl_image_get_maxpos_window(std_med_ima,wllx,wlly,wurx,wury,</span>
-<a name="l00331"></a>00331 <span class="comment">                                &max_ima_x,&max_ima_y);</span>
-<a name="l00332"></a>00332 <span class="comment">    */</span>
-<a name="l00333"></a>00333     check_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00334"></a>00334     check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(std_med_ima,wllx,
-<a name="l00335"></a>00335                                                            wlly,wurx,wury));
-<a name="l00336"></a>00336     check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(std_med_ima,wllx,
-<a name="l00337"></a>00337                                                              wlly,wurx,wury));
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340       xshift=max_ima_cx-ima_szx/2;
-<a name="l00341"></a>00341       yshift=max_ima_cy-ima_szy/2;
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SHIFTX"</span>,xshift,
-<a name="l00344"></a>00344                                        <span class="stringliteral">"X shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SHIFTY"</span>,yshift,
-<a name="l00347"></a>00347                                        <span class="stringliteral">"Y shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <span class="keywordflow">if</span>(
-<a name="l00350"></a>00350           ((max_ima_x-psf_sz) < 1) ||
-<a name="l00351"></a>00351           ((max_ima_y-psf_sz) < 1) ||
-<a name="l00352"></a>00352           ((max_ima_x+psf_sz) > ima_szx) ||
-<a name="l00353"></a>00353           ((max_ima_x+psf_sz) > ima_szy)
-<a name="l00354"></a>00354       )
-<a name="l00355"></a>00355       {
-<a name="l00356"></a>00356         psf_sz = (psf_sz < (max_ima_x-1))     ? psf_sz : (max_ima_x-1);
-<a name="l00357"></a>00357         psf_sz = (psf_sz < (max_ima_y-1))     ? psf_sz : (max_ima_y-1);
-<a name="l00358"></a>00358         psf_sz = (psf_sz < ima_szx-max_ima_x) ? psf_sz : (ima_szx-max_ima_x);
-<a name="l00359"></a>00359         psf_sz = (psf_sz < ima_szy-max_ima_y) ? psf_sz : (ima_szy-max_ima_y);
-<a name="l00360"></a>00360         <span class="comment">//added to prevent seg fault by cpl_image_fit_gaussian</span>
-<a name="l00361"></a>00361         psf_sz = (psf_sz > 4) ? psf_sz : 4;
-<a name="l00362"></a>00362       }
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM LLX"</span>,cfg->llx,
-<a name="l00366"></a>00366                                     <span class="stringliteral">"STD star FWHM LLX"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00367"></a>00367       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM LLY"</span>,cfg->lly,
-<a name="l00368"></a>00368                                     <span class="stringliteral">"STD star FWHM LLY"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00369"></a>00369       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM HBX"</span>,cfg->halfbox_x,
-<a name="l00370"></a>00370                                     <span class="stringliteral">"STD star FWHM HBX"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00371"></a>00371       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM HBX"</span>,cfg->halfbox_y,
-<a name="l00372"></a>00372                                     <span class="stringliteral">"STD star FWHM HBY"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     <span class="comment">/* call the 2D-Gaussian fit routine */</span>
-<a name="l00376"></a>00376     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )
-<a name="l00377"></a>00377     {
-<a name="l00378"></a>00378         mpar[i] = 1 ;
-<a name="l00379"></a>00379     }
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382      <span class="keywordflow">if</span>(-1 == sinfo_new_fit_2d_gaussian(std_med_ima,
-<a name="l00383"></a>00383                                   fpar,
-<a name="l00384"></a>00384                                   dpar,
-<a name="l00385"></a>00385                                   mpar,
-<a name="l00386"></a>00386                                   cfg->llx,
-<a name="l00387"></a>00387                                   cfg->lly,
-<a name="l00388"></a>00388                                   cfg->halfbox_x,
-<a name="l00389"></a>00389                                   cfg->halfbox_y,
-<a name="l00390"></a>00390                                   &check4 ) ) {
-<a name="l00391"></a>00391       irplib_error_recover(clean_state,<span class="stringliteral">"2d Gaussian fit failed"</span>);
-<a name="l00392"></a>00392       <span class="comment">/* return 0; */</span>
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394      } <span class="keywordflow">else</span> {
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MAJ"</span>,fpar[4],
-<a name="l00397"></a>00397                                        <span class="stringliteral">"STD star FWHM on major axis"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00398"></a>00398       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MIN"</span>,fpar[5],
-<a name="l00399"></a>00399                                        <span class="stringliteral">"STD star FWHM on minor axis"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00400"></a>00400       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC THETA"</span>,fpar[6],
-<a name="l00401"></a>00401                                        <span class="stringliteral">"STD star ellipsis angle theta"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404      }
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407     <span class="comment">/*</span>
-<a name="l00408"></a>00408 <span class="comment">    sinfo_msg("Gauss fit params: xc,yc,amp,bkg,fwhm_x,fwhm_y,angle\n");</span>
-<a name="l00409"></a>00409 <span class="comment">    for ( i = 0 ; i < 7 ; i++ )</span>
-<a name="l00410"></a>00410 <span class="comment">      {</span>
-<a name="l00411"></a>00411 <span class="comment">        sinfo_msg("fpar[%d]=%f dpar[%d]=%f\n",i,fpar[i],i,dpar[i]);</span>
-<a name="l00412"></a>00412 <span class="comment">      }</span>
-<a name="l00413"></a>00413 <span class="comment">    */</span>
-<a name="l00414"></a>00414     <span class="keywordflow">if</span>(CPL_ERROR_NONE == cpl_image_fit_gaussian(std_med_ima,
-<a name="l00415"></a>00415                                                 max_ima_x,
-<a name="l00416"></a>00416                                                 max_ima_y,
-<a name="l00417"></a>00417                                                 psf_sz,
-<a name="l00418"></a>00418                                                 &norm,
-<a name="l00419"></a>00419                                                 &xcen,
-<a name="l00420"></a>00420                                                 &ycen,
-<a name="l00421"></a>00421                                                 &sig_x,
-<a name="l00422"></a>00422                                                 &sig_y,
-<a name="l00423"></a>00423                                                 &fwhm_x,
-<a name="l00424"></a>00424                                                 &fwhm_y)) {
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMX"</span>,fwhm_x,
-<a name="l00428"></a>00428                                        <span class="stringliteral">"STD star FWHM on X"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00429"></a>00429       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMY"</span>,fwhm_y,
-<a name="l00430"></a>00430                                        <span class="stringliteral">"STD star FWHM on Y"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432       cfg -> halfbox_x =  (floor)(0.5*(fwhm_x+fwhm_y)*cfg->fwhm_factor+0.5);
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434       cfg -> halfbox_y =  (floor)(0.5*(fwhm_x+fwhm_y)*cfg->fwhm_factor+0.5);
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436     } <span class="keywordflow">else</span> {
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438       irplib_error_recover(clean_state,<span class="stringliteral">"Problem fitting Gaussian"</span>);
-<a name="l00439"></a>00439       cpl_error_reset();
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441     }
-<a name="l00442"></a>00442     sinfo_free_image(&std_med_ima);
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444       <span class="comment">/*</span>
-<a name="l00445"></a>00445 <span class="comment">      sinfo_msg("max ima=%d %d psf_sz=%d\n",max_ima_x,max_ima_y,psf_sz);</span>
-<a name="l00446"></a>00446 <span class="comment">      sinfo_msg("centroid ima=%f %f\n",max_ima_cx,max_ima_cy);</span>
-<a name="l00447"></a>00447 <span class="comment">      sinfo_msg("gauss=norm=%f xcen=%f ycen=%f sig_x=%f "</span>
-<a name="l00448"></a>00448 <span class="comment">                "sig_y=%f fwhm_x=%f fwhm_y=%f\n",</span>
-<a name="l00449"></a>00449 <span class="comment">                          norm,xcen,ycen,sig_x,sig_y,fwhm_x,fwhm_y);</span>
-<a name="l00450"></a>00450 <span class="comment">      */</span>
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452       cfg -> llx = (int)(xcen-cfg->halfbox_x);
-<a name="l00453"></a>00453       cfg -> llx = (cfg -> llx  > 0 ) ? cfg -> llx  : 1;
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455       <span class="keywordflow">if</span>((cfg->llx+2*cfg->halfbox_x) >= ima_szx) {
-<a name="l00456"></a>00456     cfg -> halfbox_x=(int) ((ima_szx-cfg->llx-1)/2);
-<a name="l00457"></a>00457         check1++;
-<a name="l00458"></a>00458       }
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460       cfg -> lly = (int)(ycen-cfg->halfbox_y);
-<a name="l00461"></a>00461       cfg -> lly = (cfg -> lly  > 0 ) ? cfg -> lly  : 1;
-<a name="l00462"></a>00462       <span class="keywordflow">if</span>((cfg->lly+2*cfg->halfbox_y) >= ima_szy) {
-<a name="l00463"></a>00463     cfg -> halfbox_y=(int) ((ima_szy-cfg->lly-1)/2);
-<a name="l00464"></a>00464         check1++;
-<a name="l00465"></a>00465       }
-<a name="l00466"></a>00466      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK1"</span>,check1,
-<a name="l00467"></a>00467                                     <span class="stringliteral">"Check on evaluation box"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470     <span class="comment">/*</span>
-<a name="l00471"></a>00471 <span class="comment">      sinfo_msg("llx= %d lly= %d\n",cfg->llx, cfg->lly);</span>
-<a name="l00472"></a>00472 <span class="comment">      sinfo_msg("halfbox_x=%d halfbox_y=%d\n",cfg->halfbox_x,cfg->halfbox_y);</span>
-<a name="l00473"></a>00473 <span class="comment">     */</span>
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475     <span class="comment">/*</span>
-<a name="l00476"></a>00476 <span class="comment">#----------------------------------------------------------------------</span>
-<a name="l00477"></a>00477 <span class="comment">#---------------------------EXTRACTION---------------------------------</span>
-<a name="l00478"></a>00478 <span class="comment">#----------------------------------------------------------------------</span>
-<a name="l00479"></a>00479 <span class="comment">    */</span>
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481       sinfo_msg(<span class="stringliteral">"Extraction"</span>);
-<a name="l00482"></a>00482       cknull(spectrum = (cpl_image**) cpl_calloc (cfg -> nframes,
-<a name="l00483"></a>00483                                                   <span class="keyword">sizeof</span>(cpl_image*)),
-<a name="l00484"></a>00484                             <span class="stringliteral">"Could not allocate memory for spectrum image"</span>);
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486       <span class="keywordflow">for</span> (fra=0; fra < cfg->nframes; fra++) {
-<a name="l00487"></a>00487          name = cfg->inFrameList[fra];
-<a name="l00488"></a>00488          <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {
-<a name="l00489"></a>00489             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);
-<a name="l00490"></a>00490             <span class="keywordflow">goto</span> cleanup;
-<a name="l00491"></a>00491      }
-<a name="l00492"></a>00492          cknull(cube = cpl_imagelist_load(name,CPL_TYPE_FLOAT,0),
-<a name="l00493"></a>00493         <span class="stringliteral">"could not load data cube"</span> );
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495          <span class="keywordflow">if</span> (exptime == FLAG) {
-<a name="l00496"></a>00496        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find exposure time in the fits header"</span>);
-<a name="l00497"></a>00497        <span class="keywordflow">return</span> -1;
-<a name="l00498"></a>00498      }
-<a name="l00499"></a>00499          exptime = sinfo_pfits_get_ditndit(name);
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501          sinfo_msg(<span class="stringliteral">"cfg->gain %f"</span>,cfg->gain);
-<a name="l00502"></a>00502          check_nomsg(tbl_spectrum=cpl_table_new(cpl_imagelist_get_size(cube)));
-<a name="l00503"></a>00503         <span class="keywordflow">if</span>(NULL==(spectrum[fra]=sinfo_new_optimal_extraction_from_cube( cube,
-<a name="l00504"></a>00504                                       cfg->llx,
-<a name="l00505"></a>00505                                       cfg->lly,
-<a name="l00506"></a>00506                                       cfg->halfbox_x,
-<a name="l00507"></a>00507                                       cfg->halfbox_y,
-<a name="l00508"></a>00508                                       cfg->fwhm_factor,
-<a name="l00509"></a>00509                                       BKG_VARIANCE,
-<a name="l00510"></a>00510                                       SKY_FLUX,
-<a name="l00511"></a>00511                                       cfg->gain,
-<a name="l00512"></a>00512                                       exptime,
-<a name="l00513"></a>00513                                       name,
-<a name="l00514"></a>00514                                       &tbl_spectrum,
-<a name="l00515"></a>00515                                       qc_info,
-<a name="l00516"></a>00516                                       &check2))){
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518       irplib_error_recover(clean_state,
-<a name="l00519"></a>00519                <span class="stringliteral">"could not do sinfo_optimalExtractionFromCube"</span>);
-<a name="l00520"></a>00520      } <span class="keywordflow">else</span> {
-<a name="l00521"></a>00521      check_nomsg(cpl_imagelist_set(list_object,
-<a name="l00522"></a>00522                      cpl_image_duplicate(spectrum[fra]), fra));
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524      }
-<a name="l00525"></a>00525 
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK2"</span>,
-<a name="l00529"></a>00529                                        check2,<span class="stringliteral">"Check on evaluation box"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532         ck0(sinfo_pro_save_tbl(tbl_spectrum,ref_set,sof,
-<a name="l00533"></a>00533                                       (<span class="keywordtype">char</span>*)STDSTAR_OUT_TABLE,
-<a name="l00534"></a>00534                       PRO_STD_STAR_SPECTRA,qclog_tbl,
-<a name="l00535"></a>00535                 plugin_id,config),
-<a name="l00536"></a>00536          <span class="stringliteral">"cannot dump ima %s"</span>, <span class="stringliteral">"out_std_star_spectrum.fits"</span>);
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539      sinfo_free_table(&qclog_tbl);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541      <span class="keywordflow">if</span> (do_compute_eff!=0 && frm_std_cat !=NULL && frm_atmext != NULL) {
-<a name="l00542"></a>00542         sinfo_msg(<span class="stringliteral">"compute efficiency"</span>);
-<a name="l00543"></a>00543         frm_sci     = cpl_frameset_find(sof,PRO_STD_STAR_SPECTRA);
-<a name="l00544"></a>00544         frm_std_cat = cpl_frameset_find(sof,FLUX_STD_CATALOG);
-<a name="l00545"></a>00545         frm_atmext  = cpl_frameset_find(sof,EXTCOEFF_TABLE);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547 
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549         check_nomsg(tot_eff=sinfo_efficiency_compute(frm_sci,frm_std_cat,
-<a name="l00550"></a>00550                                                      frm_atmext));
-<a name="l00551"></a>00551         ck0(sinfo_pro_save_tbl(tot_eff,ref_set,sof,(<span class="keywordtype">char</span>*)EFFICIENCY_FILENAME,
-<a name="l00552"></a>00552                                PRO_EFFICIENCY,qclog_tbl,plugin_id,config),
-<a name="l00553"></a>00553             <span class="stringliteral">"cannot dump ima %s"</span>, <span class="stringliteral">"out_.fits"</span>);
-<a name="l00554"></a>00554      }
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556 
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559      <span class="comment">/*</span>
-<a name="l00560"></a>00560 <span class="comment">         if(spectrum[fra] != NULL ) {</span>
-<a name="l00561"></a>00561 <span class="comment">         sinfo_free_image(&(spectrum)[fra]);</span>
-<a name="l00562"></a>00562 <span class="comment">         }</span>
-<a name="l00563"></a>00563 <span class="comment">     */</span>
-<a name="l00564"></a>00564      <span class="comment">/*----determine the intensity conversion factor if wished--------*/</span>
-<a name="l00565"></a>00565      <span class="keywordflow">if</span> (cfg->convInd == 1) {
-<a name="l00566"></a>00566        sinfo_msg(<span class="stringliteral">"Determines convertion factor"</span>);
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568            convfactor = sinfo_new_determine_conversion_factor( cube,
-<a name="l00569"></a>00569                                                 cfg->mag,
-<a name="l00570"></a>00570                                                 exptime,
-<a name="l00571"></a>00571                                                 cfg->llx,
-<a name="l00572"></a>00572                                                 cfg->lly,
-<a name="l00573"></a>00573                                                 cfg->halfbox_x,
-<a name="l00574"></a>00574                                                 cfg->halfbox_y,
-<a name="l00575"></a>00575                                                 &check3 );
-<a name="l00576"></a>00576 
-<a name="l00577"></a>00577 
-<a name="l00578"></a>00578             <span class="keywordflow">if</span> (convfactor < -100000.) {
-<a name="l00579"></a>00579             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not do sinfo_determineConversionFactor!"</span> );
-<a name="l00580"></a>00580            <span class="comment">/* goto cleanup; */</span>
-<a name="l00581"></a>00581         } <span class="keywordflow">else</span> {
-<a name="l00582"></a>00582              sinfo_new_array_set_value(factor, convfactor, fra);
-<a name="l00583"></a>00583         }
-<a name="l00584"></a>00584      }
-<a name="l00585"></a>00585      sinfo_free_imagelist(&cube);
-<a name="l00586"></a>00586       } <span class="comment">/* end loop over fra */</span>
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588       sinfo_free_table(&tbl_spectrum);
-<a name="l00589"></a>00589       sinfo_free_image_array(&spectrum,cfg->nframes);
-<a name="l00590"></a>00590       <span class="keywordflow">if</span> (cfg->convInd == 1) {
-<a name="l00591"></a>00591     sinfo_msg(<span class="stringliteral">"Determines clean factor"</span>);
-<a name="l00592"></a>00592         cleanfactor = sinfo_new_clean_mean(factor,
-<a name="l00593"></a>00593                                  cfg->nframes,
-<a name="l00594"></a>00594                                  cfg->lo_reject*100.,
-<a name="l00595"></a>00595                  cfg->hi_reject*100.);
-<a name="l00596"></a>00596       }
-<a name="l00597"></a>00597       <span class="keywordflow">if</span> (cleanfactor > 100000. || cleanfactor == FLAG) {
-<a name="l00598"></a>00598     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not do sinfo_clean_mean!"</span> );
-<a name="l00599"></a>00599         <span class="keywordflow">goto</span> cleanup;
-<a name="l00600"></a>00600       }
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603   <span class="comment">/*---read the fits header to change the gain and noise parameter-----*/</span>
-<a name="l00604"></a>00604       sinfo_msg(<span class="stringliteral">"Average with rejection"</span>);
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606       no=cpl_imagelist_get_size(list_object);
-<a name="l00607"></a>00607       lo_cut=(floor)(cfg->lo_reject*no+0.5);
-<a name="l00608"></a>00608       hi_cut=(floor)(cfg->hi_reject*no+0.5);
-<a name="l00609"></a>00609       <span class="keywordflow">if</span>(no > 0) {
-<a name="l00610"></a>00610          cknull(img_spct=cpl_imagelist_collapse_minmax_create(list_object,
-<a name="l00611"></a>00611                                                               lo_cut,hi_cut),
-<a name="l00612"></a>00612                           <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );
-<a name="l00613"></a>00613       }
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615       sinfo_free_imagelist(&list_object);
-<a name="l00616"></a>00616       <span class="keywordflow">if</span>(no > 0) {
-<a name="l00617"></a>00617     check_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC CONVFCT"</span>,cleanfactor,
-<a name="l00620"></a>00620                                          <span class="stringliteral">"Conversion factor"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622         ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK3"</span>,check3,
-<a name="l00623"></a>00623                                       <span class="stringliteral">"Check evaluation box"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626         ck0(sinfo_pro_save_ima(img_spct,ref_set,sof,cfg->outName,
-<a name="l00627"></a>00627                     PRO_STD_STAR_SPECTRUM,qclog_tbl,
-<a name="l00628"></a>00628                  plugin_id,config),
-<a name="l00629"></a>00629         <span class="stringliteral">"cannot dump ima %s"</span>, cfg->outName);
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631         sinfo_new_set_wcs_spectrum(img_spct,cfg->outName,cenLambda,disp,cenpix);
-<a name="l00632"></a>00632         sinfo_free_table(&qclog_tbl);
-<a name="l00633"></a>00633       }
-<a name="l00634"></a>00634       <span class="comment">/*#---free memory---*/</span>
-<a name="l00635"></a>00635       <span class="keywordflow">if</span>(factor != NULL) sinfo_new_destroy_array(&factor);
-<a name="l00636"></a>00636       sinfo_free_image(&img_spct);
-<a name="l00637"></a>00637       sinfo_stdstar_free(&cfg);
-<a name="l00638"></a>00638       sinfo_free_frameset(&raw);
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640       <span class="keywordflow">return</span> 0;
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642  cleanup:
-<a name="l00643"></a>00643       sinfo_free_table(&tbl_spectrum);
-<a name="l00644"></a>00644       sinfo_free_table(&qclog_tbl);
-<a name="l00645"></a>00645       sinfo_free_imagelist(&list_object);
-<a name="l00646"></a>00646       <span class="keywordflow">if</span>(spectrum != NULL) sinfo_free_image_array(&spectrum,cfg->nframes);
-<a name="l00647"></a>00647       sinfo_free_image(&std_med_ima);
-<a name="l00648"></a>00648       sinfo_free_image(&std_med_dup);
-<a name="l00649"></a>00649       sinfo_free_imagelist(&cube);
-<a name="l00650"></a>00650       sinfo_free_propertylist(&plist) ;
-<a name="l00651"></a>00651       <span class="keywordflow">if</span>(factor != NULL) sinfo_new_destroy_array(&factor);
-<a name="l00652"></a>00652       sinfo_free_image(&img_spct);
-<a name="l00653"></a>00653       sinfo_stdstar_free (&cfg);
-<a name="l00654"></a>00654       sinfo_free_frameset(&raw);
-<a name="l00655"></a>00655     <span class="keywordflow">return</span> -1;
-<a name="l00656"></a>00656 
-<a name="l00657"></a>00657 }
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_stdstar.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_new_stdstar.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    J. Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    December 3, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    this routine doess the optimal extraction of a spectrum</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        of an already reduced data cube of a standard star</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        observation. Additionally, a conversion factor from</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">                        mag to counts/sec can be determined if the magnitude</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                        of the standard star is known.</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                        This is done for a number of jittered data cubes and</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                        the results are averaged by rejecting the extreme</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                        values</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">//Used only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <irplib_stdstar.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_new_stdstar.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_standstar_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "sinfo_utl_efficiency.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/* temporally commented out as not yet used</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">sinfo_compute_efficiency(cpl_frameset* sof,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                              const char* name,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                  standstar_config ** cfg,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                  cpl_imagelist  * cube,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">             cpl_table** tbl_spectrum);</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">   Function     :       sinfo_stdstar()</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't)</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">   Job          :     this routine carries through the data cube creation of an</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">                        object science observation using object-sky nodding</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">                        and jittering. This script expects jittered frames that</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">                were already sky-subtracted</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                        averaged, flatfielded, spectral tilt corrected and</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">            interleaved if necessary</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> sinfo_new_stdstar(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                   cpl_parameterlist* config,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                   cpl_frameset* sof,cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_errorstate clean_state = cpl_errorstate_get();</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     standstar_config * cfg=NULL ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_imagelist  * cube=NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_imagelist  * list_object=NULL ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     cpl_image ** spectrum=NULL ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_image * img_spct=NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     cpl_image* std_med_ima=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cpl_image* std_med_dup=NULL;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     cpl_table* tbl_spectrum=NULL;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">//char band[FILE_NAME_SZ];</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">char</span> * name=NULL ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordtype">int</span> fra=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordtype">float</span> exptime=0 ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordtype">double</span> convfactor=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordtype">double</span> cleanfactor=0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordtype">float</span>* factor=NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">char</span> std_med_filename[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">char</span> std_cub_filename[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordtype">double</span> max_ima_cx=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordtype">double</span> max_ima_cy=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_size max_ima_x=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     cpl_size max_ima_y=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">double</span> norm=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">double</span> xcen=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordtype">double</span> ycen=0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordtype">double</span> sig_x=0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">double</span> sig_y=0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordtype">double</span> fwhm_x=0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordtype">double</span> fwhm_y=0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">double</span> disp=0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">double</span> dispersion=0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordtype">int</span> wllx=0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordtype">int</span> wlly=0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordtype">int</span> wurx=0;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordtype">int</span> wury=0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordtype">int</span> psf_sz=40;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordtype">int</span> qc_info=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">int</span> ima_szx=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">int</span> ima_szy=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">int</span> check1=0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordtype">int</span> check2=0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">int</span> check3=0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">int</span> check4=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordtype">double</span> xshift=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordtype">double</span> yshift=0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordtype">float</span> cenpix = 0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordtype">float</span> cenLambda = 0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordtype">double</span> lo_cut=0.;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">double</span> hi_cut=0.;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* stdstars=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* sed=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_frame* frm_sci=NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_frame* frm_atmext=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_frame* frm_std_cat=NULL;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_table* tot_eff=NULL;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordtype">double</span> fpar[7];</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordtype">double</span> dpar[7];</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordtype">int</span> mpar[7];</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordtype">int</span> do_compute_eff=0;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="comment">//For new way to compute efficiency</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">//char band[80];</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">//const char  *   seds_file=NULL;</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="comment">//const char  *   filter=NULL;</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">//cpl_table* tbl_eff=NULL;</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">       parse the file names and parameters to the cube_config</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">       data structure cfg</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="comment">/* sinfo_msg("Parse cpl input"); */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>      check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cknull(cfg=sinfo_parse_cpl_input_standstar(config,sof,&raw),</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>        <span class="stringliteral">"could not parse cpl input!"</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>  </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cknull_nomsg(p = cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                      <span class="stringliteral">"sinfoni.std_star.compute_eff"</span>));</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>  </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     check_nomsg(do_compute_eff = cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>      cknull(list_object = cpl_imagelist_new (),</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>        <span class="stringliteral">"could not allocate memory"</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     sed = sinfo_extract_filename(sof, SINFO_CALIB_SED) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     stdstars = sinfo_extract_filename(sof, SINFO_CALIB_STDSTARS) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordflow">if</span> (cfg->convInd == 1) {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       factor = sinfo_new_floatarray(cfg->nframes);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       frame = cpl_frameset_find(sof,PRO_COADD_STD);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       frame = cpl_frameset_find(sof,PRO_COADD_PSF);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       frame = cpl_frameset_find(sof,PRO_COADD_OBJ);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PUPIL)) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       frame = cpl_frameset_find(sof,PRO_COADD_PUPIL);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s, %s, %s or %s not found! Exit!"</span>,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                        PRO_COADD_STD,PRO_COADD_PSF,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                        PRO_COADD_OBJ,PRO_COADD_PUPIL );</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cknull(plist = cpl_propertylist_load(std_cub_filename, 0),</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       <span class="stringliteral">"getting header from reference ima frame %s"</span>,std_cub_filename);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     cenpix = sinfo_pfits_get_crpix3(plist);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cenLambda = sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     dispersion = sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_CDELT3)) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       disp=cpl_propertylist_get_double(plist, KEY_NAME_CDELT3);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Keyword %s not found."</span>,KEY_NAME_CDELT3);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="comment">/* we find automatiocally extraction parameters */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_STD)) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       frame = cpl_frameset_find(sof,PRO_MED_COADD_STD);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>       strcpy(std_med_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                                              CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_STD));</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       check_nomsg(cube = cpl_imagelist_load(std_cub_filename,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                                              CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                  PRO_MED_OBS_PSF,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_PSF);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_PSF)) {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       check_nomsg(frame = cpl_frameset_find(sof,PRO_MED_COADD_PSF));</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       strcpy(std_med_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                                              CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_PSF));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       check_nomsg(cube=cpl_imagelist_load(std_cub_filename,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                  PRO_MED_OBS_PSF,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_PSF);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MED_COADD_OBJ)) {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       check_nomsg(frame = cpl_frameset_find(sof,PRO_MED_COADD_OBJ));</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>       strcpy(std_med_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       check_nomsg(std_med_ima=cpl_image_load(std_med_filename,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                              CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       check_nomsg(frame = cpl_frameset_find(sof,PRO_OBS_OBJ));</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       strcpy(std_cub_filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       check_nomsg(cube = cpl_imagelist_load(std_cub_filename,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                                              CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       strcpy(std_med_filename,STDSTAR_OUT_MED_CUBE);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       check_nomsg(std_med_ima=cpl_imagelist_collapse_median_create(cube));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       ck0(sinfo_pro_save_ima(std_med_ima,ref_set,sof,STDSTAR_OUT_MED_CUBE,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                  PRO_MED_OBS_OBJ,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       <span class="stringliteral">"Error saving image %s tag %s"</span>,STDSTAR_OUT_MED_CUBE,PRO_MED_OBS_OBJ);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s %s %s %s %s %s not found! Exit!"</span>,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>               PRO_MED_COADD_STD, PRO_OBS_STD,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                       PRO_MED_COADD_PSF, PRO_OBS_PSF,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                       PRO_MED_COADD_OBJ, PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     check_nomsg(std_med_dup=cpl_image_duplicate(std_med_ima));</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     sinfo_clean_nan(&std_med_dup);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     check_nomsg(cpl_image_get_maxpos(std_med_dup,&max_ima_x,&max_ima_y));</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     sinfo_free_image(&std_med_dup);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     ima_szx=cpl_image_get_size_x(std_med_ima);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     ima_szy=cpl_image_get_size_y(std_med_ima);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     wllx= ((max_ima_x-psf_sz)>0)       ? (max_ima_x-psf_sz) : 1;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     wlly= ((max_ima_y-psf_sz)>0)       ? (max_ima_y-psf_sz) : 1;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     wurx= ((max_ima_x+psf_sz)<ima_szx) ? (max_ima_x+psf_sz) : ima_szx ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     wury= ((max_ima_y+psf_sz)<ima_szy) ? (max_ima_y+psf_sz) : ima_szy ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">    sinfo_msg("wllx=%d wlly=%d wurx=%d wury=%d\n",wllx,wlly,wurx,wury);</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">    cpl_image_get_maxpos_window(std_med_ima,wllx,wlly,wurx,wury,</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">                                &max_ima_x,&max_ima_y);</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     check_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     check_nomsg(max_ima_cx=cpl_image_get_centroid_x_window(std_med_ima,wllx,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                                                            wlly,wurx,wury));</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     check_nomsg(max_ima_cy=cpl_image_get_centroid_y_window(std_med_ima,wllx,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                                                              wlly,wurx,wury));</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       xshift=max_ima_cx-ima_szx/2;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       yshift=max_ima_cy-ima_szy/2;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SHIFTX"</span>,xshift,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                                        <span class="stringliteral">"X shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC SHIFTY"</span>,yshift,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                        <span class="stringliteral">"Y shift centroid - center image"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">if</span>(</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>           ((max_ima_x-psf_sz) < 1) ||</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>           ((max_ima_y-psf_sz) < 1) ||</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>           ((max_ima_x+psf_sz) > ima_szx) ||</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>           ((max_ima_x+psf_sz) > ima_szy)</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       )</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         psf_sz = (psf_sz < (max_ima_x-1))     ? psf_sz : (max_ima_x-1);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         psf_sz = (psf_sz < (max_ima_y-1))     ? psf_sz : (max_ima_y-1);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         psf_sz = (psf_sz < ima_szx-max_ima_x) ? psf_sz : (ima_szx-max_ima_x);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         psf_sz = (psf_sz < ima_szy-max_ima_y) ? psf_sz : (ima_szy-max_ima_y);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         <span class="comment">//added to prevent seg fault by cpl_image_fit_gaussian</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>         psf_sz = (psf_sz > 4) ? psf_sz : 4;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM LLX"</span>,cfg->llx,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                     <span class="stringliteral">"STD star FWHM LLX"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM LLY"</span>,cfg->lly,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                                     <span class="stringliteral">"STD star FWHM LLY"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM HBX"</span>,cfg->halfbox_x,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                                     <span class="stringliteral">"STD star FWHM HBX"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC FWHM HBX"</span>,cfg->halfbox_y,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                                     <span class="stringliteral">"STD star FWHM HBY"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* call the 2D-Gaussian fit routine */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         mpar[i] = 1 ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>      <span class="keywordflow">if</span>(-1 == sinfo_new_fit_2d_gaussian(std_med_ima,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                                   fpar,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                                   dpar,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                                   mpar,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                                   cfg->llx,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                                   cfg->lly,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>                                   cfg->halfbox_x,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                                   cfg->halfbox_y,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                                   &check4 ) ) {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>       irplib_error_recover(clean_state,<span class="stringliteral">"2d Gaussian fit failed"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>       <span class="comment">/* return 0; */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MAJ"</span>,fpar[4],</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                        <span class="stringliteral">"STD star FWHM on major axis"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MIN"</span>,fpar[5],</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                                        <span class="stringliteral">"STD star FWHM on minor axis"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC THETA"</span>,fpar[6],</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                                        <span class="stringliteral">"STD star ellipsis angle theta"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>      }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">    sinfo_msg("Gauss fit params: xc,yc,amp,bkg,fwhm_x,fwhm_y,angle\n");</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">    for ( i = 0 ; i < 7 ; i++ )</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">      {</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">        sinfo_msg("fpar[%d]=%f dpar[%d]=%f\n",i,fpar[i],i,dpar[i]);</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <span class="keywordflow">if</span>(CPL_ERROR_NONE == cpl_image_fit_gaussian(std_med_ima,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                                 max_ima_x,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                                 max_ima_y,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                                 psf_sz,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                                 &norm,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                                 &xcen,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                                 &ycen,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                                 &sig_x,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                                 &sig_y,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                                 &fwhm_x,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                                 &fwhm_y)) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMX"</span>,fwhm_x,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                        <span class="stringliteral">"STD star FWHM on X"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHMY"</span>,fwhm_y,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                        <span class="stringliteral">"STD star FWHM on Y"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       cfg -> halfbox_x =  (floor)(0.5*(fwhm_x+fwhm_y)*cfg->fwhm_factor+0.5);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       cfg -> halfbox_y =  (floor)(0.5*(fwhm_x+fwhm_y)*cfg->fwhm_factor+0.5);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>       irplib_error_recover(clean_state,<span class="stringliteral">"Problem fitting Gaussian"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       cpl_error_reset();</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     sinfo_free_image(&std_med_ima);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">      sinfo_msg("max ima=%d %d psf_sz=%d\n",max_ima_x,max_ima_y,psf_sz);</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">      sinfo_msg("centroid ima=%f %f\n",max_ima_cx,max_ima_cy);</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment">      sinfo_msg("gauss=norm=%f xcen=%f ycen=%f sig_x=%f "</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="comment">                "sig_y=%f fwhm_x=%f fwhm_y=%f\n",</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment">                          norm,xcen,ycen,sig_x,sig_y,fwhm_x,fwhm_y);</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       cfg -> llx = (int)(xcen-cfg->halfbox_x);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       cfg -> llx = (cfg -> llx  > 0 ) ? cfg -> llx  : 1;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       <span class="keywordflow">if</span>((cfg->llx+2*cfg->halfbox_x) >= ima_szx) {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     cfg -> halfbox_x=(int) ((ima_szx-cfg->llx-1)/2);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>         check1++;</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       cfg -> lly = (int)(ycen-cfg->halfbox_y);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       cfg -> lly = (cfg -> lly  > 0 ) ? cfg -> lly  : 1;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <span class="keywordflow">if</span>((cfg->lly+2*cfg->halfbox_y) >= ima_szy) {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     cfg -> halfbox_y=(int) ((ima_szy-cfg->lly-1)/2);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>         check1++;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       }</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK1"</span>,check1,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                     <span class="stringliteral">"Check on evaluation box"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="comment">      sinfo_msg("llx= %d lly= %d\n",cfg->llx, cfg->lly);</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">      sinfo_msg("halfbox_x=%d halfbox_y=%d\n",cfg->halfbox_x,cfg->halfbox_y);</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">#----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">#---------------------------EXTRACTION---------------------------------</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">#----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       sinfo_msg(<span class="stringliteral">"Extraction"</span>);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>       cknull(spectrum = (cpl_image**) cpl_calloc (cfg -> nframes,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                                                   <span class="keyword">sizeof</span>(cpl_image*)),</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                             <span class="stringliteral">"Could not allocate memory for spectrum image"</span>);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>       <span class="keywordflow">for</span> (fra=0; fra < cfg->nframes; fra++) {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>          name = cfg->inFrameList[fra];</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>          <span class="keywordflow">if</span>(sinfo_is_fits_file(name) != 1) {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,name);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>      }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>          cknull(cube = cpl_imagelist_load(name,CPL_TYPE_FLOAT,0),</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>         <span class="stringliteral">"could not load data cube"</span> );</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>          <span class="keywordflow">if</span> (exptime == FLAG) {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find exposure time in the fits header"</span>);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>      }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>          exptime = sinfo_pfits_get_ditndit(name);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>          sinfo_msg(<span class="stringliteral">"cfg->gain %f"</span>,cfg->gain);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>          check_nomsg(tbl_spectrum=cpl_table_new(cpl_imagelist_get_size(cube)));</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         <span class="keywordflow">if</span>(NULL==(spectrum[fra]=sinfo_new_optimal_extraction_from_cube( cube,</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>                                       cfg->llx,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>                                       cfg->lly,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>                                       cfg->halfbox_x,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>                                       cfg->halfbox_y,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                                       cfg->fwhm_factor,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                                       BKG_VARIANCE,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                                       SKY_FLUX,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                                       cfg->gain,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                                       exptime,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                                       name,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                                       &tbl_spectrum,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                                       qc_info,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                                       &check2))){</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>       irplib_error_recover(clean_state,</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                <span class="stringliteral">"could not do sinfo_optimalExtractionFromCube"</span>);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>      check_nomsg(cpl_imagelist_set(list_object,</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>                      cpl_image_duplicate(spectrum[fra]), fra));</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>      }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> </div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK2"</span>,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                                        check2,<span class="stringliteral">"Check on evaluation box"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         ck0(sinfo_pro_save_tbl(tbl_spectrum,ref_set,sof,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                                       (<span class="keywordtype">char</span>*)STDSTAR_OUT_TABLE,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                       PRO_STD_STAR_SPECTRA,qclog_tbl,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                 plugin_id,config),</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>          <span class="stringliteral">"cannot dump ima %s"</span>, <span class="stringliteral">"out_std_star_spectrum.fits"</span>);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>      sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>      <span class="keywordflow">if</span> (do_compute_eff!=0 && frm_std_cat !=NULL && frm_atmext != NULL) {</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         sinfo_msg(<span class="stringliteral">"compute efficiency"</span>);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         frm_sci     = cpl_frameset_find(sof,PRO_STD_STAR_SPECTRA);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         frm_std_cat = cpl_frameset_find(sof,FLUX_STD_CATALOG);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         frm_atmext  = cpl_frameset_find(sof,EXTCOEFF_TABLE);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         check_nomsg(tot_eff=sinfo_efficiency_compute(frm_sci,frm_std_cat,</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>                                                      frm_atmext));</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>         ck0(sinfo_pro_save_tbl(tot_eff,ref_set,sof,(<span class="keywordtype">char</span>*)EFFICIENCY_FILENAME,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                                PRO_EFFICIENCY,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>             <span class="stringliteral">"cannot dump ima %s"</span>, <span class="stringliteral">"out_.fits"</span>);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>      }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>      <span class="comment">/*</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">         if(spectrum[fra] != NULL ) {</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">         sinfo_free_image(&(spectrum)[fra]);</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="comment">         }</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>      <span class="comment">/*----determine the intensity conversion factor if wished--------*/</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>      <span class="keywordflow">if</span> (cfg->convInd == 1) {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>        sinfo_msg(<span class="stringliteral">"Determines convertion factor"</span>);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>            convfactor = sinfo_new_determine_conversion_factor( cube,</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>                                                 cfg->mag,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>                                                 exptime,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>                                                 cfg->llx,</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                                                 cfg->lly,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>                                                 cfg->halfbox_x,</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                                                 cfg->halfbox_y,</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>                                                 &check3 );</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>             <span class="keywordflow">if</span> (convfactor < -100000.) {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"could not do sinfo_determineConversionFactor!"</span> );</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>            <span class="comment">/* goto cleanup; */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>              sinfo_new_array_set_value(factor, convfactor, fra);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         }</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>      }</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>      sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       } <span class="comment">/* end loop over fra */</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>       sinfo_free_table(&tbl_spectrum);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       sinfo_free_image_array(&spectrum,cfg->nframes);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>       <span class="keywordflow">if</span> (cfg->convInd == 1) {</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     sinfo_msg(<span class="stringliteral">"Determines clean factor"</span>);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         cleanfactor = sinfo_new_clean_mean(factor,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                                  cfg->nframes,</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>                                  cfg->lo_reject*100.,</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                  cfg->hi_reject*100.);</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>       }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>       <span class="keywordflow">if</span> (cleanfactor > 100000. || cleanfactor == FLAG) {</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not do sinfo_clean_mean!"</span> );</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>       }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="comment">/*---read the fits header to change the gain and noise parameter-----*/</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>       sinfo_msg(<span class="stringliteral">"Average with rejection"</span>);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>       no=cpl_imagelist_get_size(list_object);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>       lo_cut=(floor)(cfg->lo_reject*no+0.5);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>       hi_cut=(floor)(cfg->hi_reject*no+0.5);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>       <span class="keywordflow">if</span>(no > 0) {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>          cknull(img_spct=cpl_imagelist_collapse_minmax_create(list_object,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                                                               lo_cut,hi_cut),</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>                           <span class="stringliteral">"sinfo_average_with_rejection failed"</span> );</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>       }</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>       sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       <span class="keywordflow">if</span>(no > 0) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     check_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC CONVFCT"</span>,cleanfactor,</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>                                          <span class="stringliteral">"Conversion factor"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>         ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC CHECK3"</span>,check3,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                                       <span class="stringliteral">"Check evaluation box"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         ck0(sinfo_pro_save_ima(img_spct,ref_set,sof,cfg->outName,</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                     PRO_STD_STAR_SPECTRUM,qclog_tbl,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                  plugin_id,config),</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         <span class="stringliteral">"cannot dump ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         sinfo_new_set_wcs_spectrum(img_spct,cfg->outName,cenLambda,disp,cenpix);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>       }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       <span class="comment">/*#---free memory---*/</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>       <span class="keywordflow">if</span>(factor != NULL) sinfo_new_destroy_array(&factor);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>       sinfo_free_image(&img_spct);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>       sinfo_stdstar_free(&cfg);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>       <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>  cleanup:</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>       sinfo_free_table(&tbl_spectrum);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>       sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>       sinfo_free_imagelist(&list_object);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>       <span class="keywordflow">if</span>(spectrum != NULL) sinfo_free_image_array(&spectrum,cfg->nframes);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>       sinfo_free_image(&std_med_ima);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>       sinfo_free_image(&std_med_dup);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       <span class="keywordflow">if</span>(factor != NULL) sinfo_new_destroy_array(&factor);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       sinfo_free_image(&img_spct);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       sinfo_stdstar_free (&cfg);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>       sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> }</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__stdstar_8h_source.html b/html/sinfo__new__stdstar_8h_source.html
index 3b13019..3b0b6fe 100644
--- a/html/sinfo__new__stdstar_8h_source.html
+++ b/html/sinfo__new__stdstar_8h_source.html
@@ -2,83 +2,114 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_stdstar.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_stdstar.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_STDSTAR_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_STDSTAR_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_stdstar.h,v 1.11 2007/09/21 14:13:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  06/05/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_stdstar.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines to create a data cube</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_standstar_cfg.h></span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">   Function     :       sinfo_new_stdstar()</span>
-<a name="l00048"></a>00048 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00049"></a>00049 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00050"></a>00050 <span class="comment">   Description  :    this routine does the optimal extraction of a spectrum </span>
-<a name="l00051"></a>00051 <span class="comment">                        of an already reduced data cube of a standard star </span>
-<a name="l00052"></a>00052 <span class="comment">                        observation. Additionally, a conversion factor from </span>
-<a name="l00053"></a>00053 <span class="comment">                        mag to counts/sec can be determined if the magnitude </span>
-<a name="l00054"></a>00054 <span class="comment">                        of the standard star is known. </span>
-<a name="l00055"></a>00055 <span class="comment">                        This is done for a number of jittered data cubes and </span>
-<a name="l00056"></a>00056 <span class="comment">                        the results are averaged by rejecting the extreme </span>
-<a name="l00057"></a>00057 <span class="comment">                        values</span>
-<a name="l00058"></a>00058 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 <span class="keywordtype">int</span> 
-<a name="l00060"></a>00060 sinfo_new_stdstar (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00061"></a>00061                    cpl_parameterlist* config,
-<a name="l00062"></a>00062                    cpl_frameset* sof,cpl_frameset* ref_set) ;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#endif </span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_stdstar.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_STDSTAR_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_STDSTAR_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_stdstar.h,v 1.11 2007/09/21 14:13:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  06/05/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_stdstar.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines to create a data cube</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_standstar_cfg.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">   Function     :       sinfo_new_stdstar()</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   Description  :    this routine does the optimal extraction of a spectrum </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                        of an already reduced data cube of a standard star </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                        observation. Additionally, a conversion factor from </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                        mag to counts/sec can be determined if the magnitude </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                        of the standard star is known. </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                        This is done for a number of jittered data cubes and </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                        the results are averaged by rejecting the extreme </span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                        values</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> sinfo_new_stdstar (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                    cpl_parameterlist* config,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                    cpl_frameset* sof,cpl_frameset* ref_set) ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__wave__cal__slit2_8c_source.html b/html/sinfo__new__wave__cal__slit2_8c_source.html
index 918393e..0e4bd95 100644
--- a/html/sinfo__new__wave__cal__slit2_8c_source.html
+++ b/html/sinfo__new__wave__cal__slit2_8c_source.html
@@ -2,862 +2,893 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_wave_cal_slit2.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_wave_cal_slit2.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"> </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :       sinfo_new_wave_cal_slit2.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    A. Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Sep 17, 2003</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  : </span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_new_wave_cal_slit2.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_wcal_functions.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_absolute.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_wavecal.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                                Defines</span>
-<a name="l00052"></a>00052 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                             Function Definitions</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="keyword">static</span> cpl_error_code
-<a name="l00058"></a>00058 sinfo_image_resample(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00059"></a>00059                      cpl_parameterlist* config,
-<a name="l00060"></a>00060                      cpl_frameset* sof,
-<a name="l00061"></a>00061                      cpl_frameset* ref_set);
-<a name="l00062"></a>00062 
-<a name="l00070"></a>00070 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00071"></a>00071 <span class="comment">   Function     :       sinfo_wave_cal_slit()</span>
-<a name="l00072"></a>00072 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00073"></a>00073 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00074"></a>00074 <span class="comment">   Job          :</span>
-<a name="l00075"></a>00075 <span class="comment"></span>
-<a name="l00076"></a>00076 <span class="comment"></span>
-<a name="l00077"></a>00077 <span class="comment">  Normal method:</span>
-<a name="l00078"></a>00078 <span class="comment"></span>
-<a name="l00079"></a>00079 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00080"></a>00080 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00081"></a>00081 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00082"></a>00082 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00083"></a>00083 <span class="comment"></span>
-<a name="l00084"></a>00084 <span class="comment"></span>
-<a name="l00085"></a>00085 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00086"></a>00086 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00087"></a>00087 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00088"></a>00088 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00089"></a>00089 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00090"></a>00090 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00091"></a>00091 <span class="comment">    in an ASCII file.</span>
-<a name="l00092"></a>00092 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00093"></a>00093 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00094"></a>00094 <span class="comment">    original frame</span>
-<a name="l00095"></a>00095 <span class="comment"></span>
-<a name="l00096"></a>00096 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00097"></a>00097 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00098"></a>00098 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00099"></a>00099 <span class="comment"></span>
-<a name="l00100"></a>00100 <span class="comment">  Slit method:</span>
-<a name="l00101"></a>00101 <span class="comment"></span>
-<a name="l00102"></a>00102 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00103"></a>00103 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00104"></a>00104 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00105"></a>00105 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00106"></a>00106 <span class="comment"></span>
-<a name="l00107"></a>00107 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00108"></a>00108 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00109"></a>00109 <span class="comment"></span>
-<a name="l00110"></a>00110 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00111"></a>00111 <span class="comment"></span>
-<a name="l00112"></a>00112 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="keywordtype">int</span> 
-<a name="l00116"></a>00116 sinfo_new_wave_cal_slit2(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00117"></a>00117                         cpl_parameterlist* config, 
-<a name="l00118"></a>00118                         cpl_frameset* sof,cpl_frameset* ref_set)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120   wave_config * cfg =NULL;
-<a name="l00121"></a>00121   <span class="keywordtype">char</span> col_name[MAX_NAME_SIZE];
-<a name="l00122"></a>00122   <span class="keywordtype">char</span> tbl_name[MAX_NAME_SIZE];
-<a name="l00123"></a>00123   <span class="keywordtype">char</span> tbl_fitpar_name[MAX_NAME_SIZE];
-<a name="l00124"></a>00124   <span class="keywordtype">char</span> tbl_line_list_name[MAX_NAME_SIZE];
-<a name="l00125"></a>00125   <span class="keywordtype">char</span> tbl_slitpos_guess_name[MAX_NAME_SIZE];
-<a name="l00126"></a>00126   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];
-<a name="l00127"></a>00127   <span class="keywordtype">char</span> col[MAX_NAME_SIZE];
-<a name="l00128"></a>00128   <span class="keywordtype">int</span> check = 0;
-<a name="l00129"></a>00129   <span class="keywordtype">int</span> lx = 0;
-<a name="l00130"></a>00130   <span class="keywordtype">int</span> ly = 0;
-<a name="l00131"></a>00131   <span class="keywordtype">int</span> n_lines=0;
-<a name="l00132"></a>00132   <span class="keywordtype">int</span> i = 0;
-<a name="l00133"></a>00133   <span class="keywordtype">int</span> j = 0;
-<a name="l00134"></a>00134   <span class="keywordtype">int</span> n = 0;
-<a name="l00135"></a>00135   <span class="keywordtype">int</span> readsum=0;
-<a name="l00136"></a>00136   <span class="keywordtype">int</span> sum=0;
-<a name="l00137"></a>00137   <span class="keywordtype">int</span> fit=0;
-<a name="l00138"></a>00138   <span class="keywordtype">int</span> sw=0;
-<a name="l00139"></a>00139  
-<a name="l00140"></a>00140   <span class="keywordtype">int</span>* status=NULL;
-<a name="l00141"></a>00141   <span class="keywordtype">int</span>* n_found_lines=NULL;
-<a name="l00142"></a>00142   <span class="keywordtype">int</span>* sum_pointer=NULL;
-<a name="l00143"></a>00143   <span class="keywordtype">int</span>** row_clean=NULL;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145   <span class="keywordtype">float</span> a=0;
-<a name="l00146"></a>00146   <span class="keywordtype">float</span> shift=0;
-<a name="l00147"></a>00147   <span class="keywordtype">float</span> val_x=0;
-<a name="l00148"></a>00148   <span class="keywordtype">float</span> val_y=0;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   <span class="keywordtype">float</span>* wave=NULL;
-<a name="l00151"></a>00151   <span class="keywordtype">float</span>* intens=NULL;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   <span class="keywordtype">float</span>** acoefs=NULL;
-<a name="l00154"></a>00154   <span class="keywordtype">float</span>** wavelength_clean=NULL;
-<a name="l00155"></a>00155   <span class="keywordtype">float</span>** sinfo_slit_pos=NULL;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157   <span class="keywordtype">double</span> fwhm_med=0;
-<a name="l00158"></a>00158   <span class="keywordtype">double</span> fwhm_avg=0;
-<a name="l00159"></a>00159   <span class="keywordtype">double</span> coef_med=0;
-<a name="l00160"></a>00160   <span class="keywordtype">double</span> coef_avg=0;
-<a name="l00161"></a>00161  
-<a name="l00162"></a>00162   cpl_image * im=NULL ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164   FitParams** par=NULL;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166   cpl_table* tbl_wcal=NULL;
-<a name="l00167"></a>00167   cpl_table* tbl_spos=NULL;
-<a name="l00168"></a>00168   cpl_table* tbl_fitpar = NULL;
-<a name="l00169"></a>00169   cpl_table* tbl_line_list = NULL;
-<a name="l00170"></a>00170   cpl_table* tbl_slitpos_guess=NULL;
-<a name="l00171"></a>00171   cpl_table * tbl_fp =NULL;
-<a name="l00172"></a>00172   cpl_table* qclog_tbl=NULL;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   cpl_image* map_img=NULL;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176   cpl_frameset* raw=NULL;
-<a name="l00177"></a>00177   cpl_parameter* p=NULL;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179   qc_wcal* qc=sinfo_qc_wcal_new();
-<a name="l00180"></a>00180   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182   <span class="comment">/*   -----------------------------------------------------------------</span>
-<a name="l00183"></a>00183 <span class="comment">       1) parse the file names and parameters to the ns_config data </span>
-<a name="l00184"></a>00184 <span class="comment">          structure cfg</span>
-<a name="l00185"></a>00185 <span class="comment">       -----------------------------------------------------------------</span>
-<a name="l00186"></a>00186 <span class="comment">  */</span>
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00189"></a>00189   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192   sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);
-<a name="l00193"></a>00193   check_nomsg(raw=cpl_frameset_new());
-<a name="l00194"></a>00194   cknull(cfg = sinfo_parse_cpl_input_wave(config,sof,&raw),
-<a name="l00195"></a>00195      <span class="stringliteral">"could not parse cpl input!"</span>) ;
-<a name="l00196"></a>00196  
-<a name="l00197"></a>00197   check_nomsg(p = cpl_parameterlist_find(config,
-<a name="l00198"></a>00198                                          <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));
-<a name="l00199"></a>00199   check_nomsg(sw=cpl_parameter_get_bool(p));
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   <span class="keywordflow">if</span>(sw==1) {
-<a name="l00202"></a>00202      cfg->nslitlets=32;
-<a name="l00203"></a>00203      cfg->calibIndicator=1;
-<a name="l00204"></a>00204      cfg->wavemapInd=0;
-<a name="l00205"></a>00205      cfg->slitposIndicator=1;
-<a name="l00206"></a>00206      sinfo_msg(<span class="stringliteral">"***********************************"</span>);
-<a name="l00207"></a>00207      sinfo_msg(<span class="stringliteral">"parameter setting for %s"</span>,PRO_WAVE_SLITPOS_STACKED);
-<a name="l00208"></a>00208      sinfo_msg(<span class="stringliteral">"***********************************"</span>);
-<a name="l00209"></a>00209   }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211   <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {
-<a name="l00212"></a>00212     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file cfg->inFrame %s is not FITS"</span>,cfg->inFrame);
-<a name="l00213"></a>00213     <span class="keywordflow">goto</span> cleanup;
-<a name="l00214"></a>00214   }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1 && cfg->estimateIndicator == 1) {
-<a name="l00218"></a>00218     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposGuessName) != 1) {
-<a name="l00219"></a>00219       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"slitlet position guess list not given!"</span>);
-<a name="l00220"></a>00220       <span class="keywordflow">goto</span> cleanup;
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222   }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224   <span class="keywordflow">if</span> (cfg->calibIndicator == 0 && cfg->wavemapInd == 1) {
-<a name="l00225"></a>00225     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->coeffsName) != 1) {
-<a name="l00226"></a>00226       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"coefficients list not given!"</span>);
-<a name="l00227"></a>00227       <span class="keywordflow">goto</span> cleanup;
-<a name="l00228"></a>00228     }
-<a name="l00229"></a>00229   }
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {
-<a name="l00232"></a>00232     <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {
-<a name="l00233"></a>00233       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->paramsList) != 1) {
-<a name="l00234"></a>00234     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parameter list not given!"</span>);
-<a name="l00235"></a>00235     <span class="keywordflow">goto</span> cleanup;
-<a name="l00236"></a>00236       }
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238   }
-<a name="l00239"></a>00239  
-<a name="l00240"></a>00240   <span class="comment">/*---load the emission line frame---*/</span>
-<a name="l00241"></a>00241   check(im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0)
-<a name="l00242"></a>00242         ,<span class="stringliteral">"could not load image"</span>);
-<a name="l00243"></a>00243   lx = cpl_image_get_size_x(im);
-<a name="l00244"></a>00244   ly = cpl_image_get_size_y(im);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   <span class="keywordflow">if</span> (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {
-<a name="l00247"></a>00247     <span class="comment">/*---open the line list and read the number of lines---*/</span>
-<a name="l00248"></a>00248     strcpy(tbl_line_list_name,cfg->lineList);
-<a name="l00249"></a>00249     check_nomsg(tbl_line_list = cpl_table_load(tbl_line_list_name,1,0));
-<a name="l00250"></a>00250     check_nomsg(n = cpl_table_get_nrow(tbl_line_list));
-<a name="l00251"></a>00251     n_lines = n;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     check_nomsg(wave   = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>));
-<a name="l00254"></a>00254     check_nomsg(intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>));
-<a name="l00255"></a>00255   }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   <span class="comment">/*</span>
-<a name="l00258"></a>00258 <span class="comment">  ----------------------------------------------------------------------</span>
-<a name="l00259"></a>00259 <span class="comment">  ---------------------------FINDLINES----------------------------------</span>
-<a name="l00260"></a>00260 <span class="comment">  ----------------------------------------------------------------------</span>
-<a name="l00261"></a>00261 <span class="comment">  */</span>
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263   <span class="comment">/*if not yet done:</span>
-<a name="l00264"></a>00264 <span class="comment">    do the wavelength calibration, that means: </span>
-<a name="l00265"></a>00265 <span class="comment">    find the dispersion relation and parameterize its coefficients</span>
-<a name="l00266"></a>00266 <span class="comment">  */</span>
-<a name="l00267"></a>00267   <span class="comment">/*</span>
-<a name="l00268"></a>00268 <span class="comment">  sinfo_msg("guessBeginWave=%g",cfg->guessBeginWavelength);</span>
-<a name="l00269"></a>00269 <span class="comment">  sinfo_msg("guessDisp1=%g",cfg->guessDispersion1);</span>
-<a name="l00270"></a>00270 <span class="comment">  sinfo_msg("guessDisp2=%g",cfg->guessDispersion2);</span>
-<a name="l00271"></a>00271 <span class="comment">  */</span>
-<a name="l00272"></a>00272   <span class="keywordflow">if</span> (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {
-<a name="l00273"></a>00273     sinfo_msg(<span class="stringliteral">"Findlines"</span>);
-<a name="l00274"></a>00274     acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="comment">/*allocate memory*/</span>
-<a name="l00277"></a>00277     n_found_lines    = sinfo_new_intarray(lx); 
-<a name="l00278"></a>00278     row_clean        = sinfo_new_2Dintarray(lx, n_lines);
-<a name="l00279"></a>00279     wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);
-<a name="l00280"></a>00280     sum_pointer      = sinfo_new_intarray(1) ;
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282     <span class="comment">/*find the emission lines in each image column*/</span>
-<a name="l00283"></a>00283     sinfo_new_intarray_set_value(sum_pointer, 0, 0);
-<a name="l00284"></a>00284  
-<a name="l00285"></a>00285     ck0(check = sinfo_new_find_lines(im, 
-<a name="l00286"></a>00286                                 wave, 
-<a name="l00287"></a>00287                                 intens, 
-<a name="l00288"></a>00288                                 n_lines, 
-<a name="l00289"></a>00289                                 row_clean, 
-<a name="l00290"></a>00290                                 wavelength_clean, 
-<a name="l00291"></a>00291                                 cfg->guessBeginWavelength, 
-<a name="l00292"></a>00292                         cfg->guessDispersion1, 
-<a name="l00293"></a>00293                                 cfg->guessDispersion2,
-<a name="l00294"></a>00294                                 cfg->mindiff, 
-<a name="l00295"></a>00295                                 cfg->halfWidth, 
-<a name="l00296"></a>00296                                 n_found_lines, 
-<a name="l00297"></a>00297                                 cfg->sigma, 
-<a name="l00298"></a>00298                                 sum_pointer),
-<a name="l00299"></a>00299     <span class="stringliteral">"sinfo_findLines failed!"</span>);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     <span class="comment">/*---------------------------------------------------------------------</span>
-<a name="l00302"></a>00302 <span class="comment">     *-----------------------WAVE_CALIB-------------------------------------</span>
-<a name="l00303"></a>00303 <span class="comment">     *---------------------------------------------------------------------</span>
-<a name="l00304"></a>00304 <span class="comment">    */</span>
-<a name="l00305"></a>00305     sinfo_msg(<span class="stringliteral">"Wave Calibration"</span>);
-<a name="l00306"></a>00306     sum = sinfo_new_intarray_get_value(sum_pointer,0);
-<a name="l00307"></a>00307     <span class="comment">/* allocate memory for the fit parameters */</span>
-<a name="l00308"></a>00308     cknull(par = sinfo_new_fit_params( sum ),
-<a name="l00309"></a>00309        <span class="stringliteral">"sinfo_newFitParams failed!"</span>);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311   <span class="comment">/*</span>
-<a name="l00312"></a>00312 <span class="comment">   fit each line, make a polynomial fit and fit the resulting fit </span>
-<a name="l00313"></a>00313 <span class="comment">   coefficients across the columns of the slitlet</span>
-<a name="l00314"></a>00314 <span class="comment">   */</span>
-<a name="l00315"></a>00315    cknull(map_img = sinfo_new_wave_cal(im, 
-<a name="l00316"></a>00316                   par, 
-<a name="l00317"></a>00317                   acoefs,
-<a name="l00318"></a>00318                   cfg->nslitlets, 
-<a name="l00319"></a>00319                   row_clean,
-<a name="l00320"></a>00320                   wavelength_clean,
-<a name="l00321"></a>00321                   n_found_lines,
-<a name="l00322"></a>00322                   cfg->guessDispersion1,
-<a name="l00323"></a>00323                   cfg->halfWidth,
-<a name="l00324"></a>00324                   cfg->minAmplitude,
-<a name="l00325"></a>00325                   cfg->maxResidual,
-<a name="l00326"></a>00326                   cfg->fwhm,
-<a name="l00327"></a>00327                   cfg->nrDispCoefficients, 
-<a name="l00328"></a>00328                   cfg->nrCoefCoefficients,
-<a name="l00329"></a>00329                   cfg->sigmaFactor,
-<a name="l00330"></a>00330                   cfg->pixeldist,
-<a name="l00331"></a>00331                   cfg->pixel_tolerance),
-<a name="l00332"></a>00332       <span class="stringliteral">"sinfo_wave_cal failed!"</span>);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334    sinfo_msg(<span class="stringliteral">"Check line positions"</span>);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336    shift=sinfo_new_check_line_positions(im,acoefs,cfg->nrDispCoefficients,
-<a name="l00337"></a>00337                     cfg->guessDispersion1,par);
-<a name="l00338"></a>00338    <span class="keywordflow">if</span> (FLAG == shift){ 
-<a name="l00339"></a>00339       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"checkForLinePositions failed!\n"</span>);
-<a name="l00340"></a>00340    }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343    sinfo_det_ncounts(raw, cfg->qc_thresh_max, qc);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345    cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00346"></a>00346    ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,n_lines,
-<a name="l00347"></a>00347                                  <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00348"></a>00348    ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE NPIXSAT"</span>,qc->nsat,
-<a name="l00349"></a>00349                                  <span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00350"></a>00350    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC WAVE MAXFLUX"</span>,qc->max_di,
-<a name="l00351"></a>00351                                  <span class="stringliteral">"Max int off-lamp subtracted frm"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00352"></a>00352    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC WAVE POSERR"</span>,shift,
-<a name="l00353"></a>00353                                  <span class="stringliteral">"Overall positioning error in mum"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355    ck0(sinfo_pro_save_ima(map_img,ref_set,sof,cfg->outName,
-<a name="l00356"></a>00356               PRO_WAVE_MAP,qclog_tbl,plugin_id,config),
-<a name="l00357"></a>00357        <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359    sinfo_free_table(&qclog_tbl);
-<a name="l00360"></a>00360    sinfo_free_image(&map_img);
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362    <span class="comment">/*</span>
-<a name="l00363"></a>00363 <span class="comment">    #store the resulting polynomial fit coefficients in an </span>
-<a name="l00364"></a>00364 <span class="comment">     ASCII file if wished</span>
-<a name="l00365"></a>00365 <span class="comment">   */</span>
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367    <span class="keywordflow">if</span> (cfg->writeCoeffsInd == 1) {
-<a name="l00368"></a>00368      check_nomsg(tbl_wcal = cpl_table_new(lx));
-<a name="l00369"></a>00369      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00370"></a>00370        snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00371"></a>00371        check_nomsg(cpl_table_new_column(tbl_wcal,col_name, CPL_TYPE_DOUBLE));
-<a name="l00372"></a>00372      }
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374      cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00375"></a>00375      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,n_lines,
-<a name="l00376"></a>00376                                    <span class="stringliteral">"Number found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378      <span class="keywordflow">for</span> (j=0; j< lx; j++) {
-<a name="l00379"></a>00379        <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00380"></a>00380      snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00381"></a>00381      a = sinfo_new_array2D_get_value(acoefs, i, j);
-<a name="l00382"></a>00382      <span class="comment">/* fprintf(acoefs_file, "%15.13g ", a) ; */</span>
-<a name="l00383"></a>00383      cpl_table_set_double(tbl_wcal,col_name,j,a);
-<a name="l00384"></a>00384        }
-<a name="l00385"></a>00385      }
-<a name="l00386"></a>00386      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {
-<a name="l00387"></a>00387        snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);
-<a name="l00388"></a>00388        check_nomsg(coef_avg=cpl_table_get_column_mean(tbl_wcal,col_name));
-<a name="l00389"></a>00389        check_nomsg(coef_med=cpl_table_get_column_median(tbl_wcal,col_name));
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391        snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" AVG"</span>);
-<a name="l00392"></a>00392        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_avg,
-<a name="l00393"></a>00393                                         <span class="stringliteral">"Average wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395        snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" MED"</span>);
-<a name="l00396"></a>00396        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_med,
-<a name="l00397"></a>00397                                         <span class="stringliteral">"Median wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399      }
-<a name="l00400"></a>00400      <span class="keywordflow">if</span>(pdensity >1) {
-<a name="l00401"></a>00401      strcpy(tbl_name,cfg->coeffsName);
-<a name="l00402"></a>00402      ck0(sinfo_pro_save_tbl(tbl_wcal,ref_set,sof,tbl_name,
-<a name="l00403"></a>00403                 PRO_WAVE_COEF_SLIT,qclog_tbl,plugin_id,config),
-<a name="l00404"></a>00404      <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00405"></a>00405      sinfo_free_table(&tbl_wcal);
-<a name="l00406"></a>00406      sinfo_free_table(&qclog_tbl);
-<a name="l00407"></a>00407      }
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409    }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411    <span class="comment">/*</span>
-<a name="l00412"></a>00412 <span class="comment">    #store the resulting Gaussian fit parameters in an ASCII file if wished</span>
-<a name="l00413"></a>00413 <span class="comment">   */</span>
-<a name="l00414"></a>00414    <span class="keywordflow">if</span> (cfg->writeParInd == 1) {
-<a name="l00415"></a>00415       sinfo_new_dump_fit_params_to_ascii(par,WAVECAL_FIT_PARAMS_OUT_FILEASCII);
-<a name="l00416"></a>00416  
-<a name="l00417"></a>00417       cknull(par,<span class="stringliteral">"no fit parameters available!"</span>) ;
-<a name="l00418"></a>00418       cknull(cfg->paramsList,<span class="stringliteral">"no filename available!"</span>) ;
-<a name="l00419"></a>00419       check_nomsg(tbl_fp = cpl_table_new(par[0] -> n_params));
-<a name="l00420"></a>00420       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"n_params"</span>, CPL_TYPE_INT));
-<a name="l00421"></a>00421       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"column"</span>, CPL_TYPE_INT));
-<a name="l00422"></a>00422       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"line"</span>, CPL_TYPE_INT));
-<a name="l00423"></a>00423  
-<a name="l00424"></a>00424       <span class="keywordflow">for</span>(j=0;j<4;j++) {
-<a name="l00425"></a>00425          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);
-<a name="l00426"></a>00426          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);
-<a name="l00427"></a>00427          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);
-<a name="l00428"></a>00428          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);
-<a name="l00429"></a>00429       }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431       cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00432"></a>00432       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,
-<a name="l00433"></a>00433                                     <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435      <span class="keywordflow">for</span> ( i = 0 ; i < par[0] -> n_params ; i++ ) {
-<a name="l00436"></a>00436       
-<a name="l00437"></a>00437          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"n_params"</span>,i,par[i]->n_params));
-<a name="l00438"></a>00438          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"column"</span>,i,par[i]->column));
-<a name="l00439"></a>00439          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"line"</span>,i,par[i]->line));
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441          <span class="keywordflow">for</span>(j=0;j<4;j++) {
-<a name="l00442"></a>00442        snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);
-<a name="l00443"></a>00443        <span class="keywordflow">if</span>(isnan(par[i]->fit_par[j])) {
-<a name="l00444"></a>00444          cpl_table_set_invalid(tbl_fp,col,i);
-<a name="l00445"></a>00445        } <span class="keywordflow">else</span> {
-<a name="l00446"></a>00446          cpl_table_set_double(tbl_fp,col,i,par[i]->fit_par[j]);
-<a name="l00447"></a>00447        }
-<a name="l00448"></a>00448        snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);
-<a name="l00449"></a>00449        <span class="keywordflow">if</span>(isnan(par[i]->derv_par[j])) {
-<a name="l00450"></a>00450          cpl_table_set_invalid(tbl_fp,col,i);
-<a name="l00451"></a>00451        } <span class="keywordflow">else</span> {
-<a name="l00452"></a>00452          cpl_table_set_double(tbl_fp,col,i,par[i]->derv_par[j]);
-<a name="l00453"></a>00453        }
-<a name="l00454"></a>00454      }
-<a name="l00455"></a>00455       }
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457       check_nomsg(fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>));
-<a name="l00458"></a>00458       check_nomsg(fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>));
-<a name="l00459"></a>00459       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,
-<a name="l00460"></a>00460                                        <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00461"></a>00461       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,
-<a name="l00462"></a>00462                                        <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464       <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l00465"></a>00465       ck0(sinfo_pro_save_tbl(tbl_fp,ref_set,sof,cfg->paramsList,
-<a name="l00466"></a>00466                  PRO_WAVE_PAR_LIST,qclog_tbl,plugin_id,config),
-<a name="l00467"></a>00467       <span class="stringliteral">"cannot save tbl %s"</span>, cfg->paramsList);
-<a name="l00468"></a>00468       }
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470       sinfo_free_table(&qclog_tbl);
-<a name="l00471"></a>00471       sinfo_free_table(&tbl_fp) ;
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473    }
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475    <span class="comment">/* free memory */</span>
-<a name="l00476"></a>00476    sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );
-<a name="l00477"></a>00477    sinfo_new_destroy_2Dintarray (&row_clean, lx);
-<a name="l00478"></a>00478    sinfo_new_destroy_intarray(&n_found_lines );
-<a name="l00479"></a>00479    sinfo_new_destroy_intarray(&sum_pointer );
-<a name="l00480"></a>00480    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );
-<a name="l00481"></a>00481    sinfo_free_table(&tbl_line_list);
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483    <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00484"></a>00484 <span class="comment">    *-------------------WAVEMAP--------------------------------------------</span>
-<a name="l00485"></a>00485 <span class="comment">    *----------------------------------------------------------------------</span>
-<a name="l00486"></a>00486 <span class="comment">    */</span>
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488    <span class="comment">/*</span>
-<a name="l00489"></a>00489 <span class="comment">    #---now do the cross sinfo_correlation and produce a wavelength map---</span>
-<a name="l00490"></a>00490 <span class="comment">   */</span>
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 0) { 
-<a name="l00493"></a>00493     sinfo_msg(<span class="stringliteral">"Wavemap"</span>);
-<a name="l00494"></a>00494     acoefs = sinfo_new_2Dfloatarray ( cfg->nrDispCoefficients, lx);
-<a name="l00495"></a>00495     <span class="comment">/* #read the parameterized dispersion relation */</span>
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497     strcpy(tbl_name,cfg->coeffsName);
-<a name="l00498"></a>00498     check_nomsg(tbl_wcal = cpl_table_load(tbl_name,1,0));
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     <span class="keywordflow">for</span> (i =0; i < lx; i++) {
-<a name="l00501"></a>00501       <span class="keywordflow">for</span> (j = 0; j< cfg->nrDispCoefficients; j++) {
-<a name="l00502"></a>00502     snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,j);
-<a name="l00503"></a>00503     acoefs[j][i]=cpl_table_get_double(tbl_wcal,col_name,i,status);
-<a name="l00504"></a>00504       }
-<a name="l00505"></a>00505     }
-<a name="l00506"></a>00506     sinfo_free_table(&tbl_wcal);
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508     cknull(map_img = sinfo_new_create_shifted_slit_wavemap2(im,
-<a name="l00509"></a>00509                            acoefs,
-<a name="l00510"></a>00510                            cfg->nrDispCoefficients,
-<a name="l00511"></a>00511                            wave,
-<a name="l00512"></a>00512                            intens,
-<a name="l00513"></a>00513                            n_lines,
-<a name="l00514"></a>00514                            cfg->magFactor,
-<a name="l00515"></a>00515                            cfg->guessDispersion1,
-<a name="l00516"></a>00516                            cfg->pixeldist ),
-<a name="l00517"></a>00517            <span class="stringliteral">"sinfo_createShiftedSlitWavemap2 failed!"</span>);
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519     par = sinfo_new_fit_params(15*n_lines);
-<a name="l00520"></a>00520     sinfo_msg(<span class="stringliteral">"Check shifts"</span>);
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522     shift = sinfo_new_check_correlated_line_positions ( im, acoefs, 
-<a name="l00523"></a>00523                          cfg->nrDispCoefficients, 
-<a name="l00524"></a>00524                          wave,
-<a name="l00525"></a>00525                          intens,
-<a name="l00526"></a>00526                          n_lines,
-<a name="l00527"></a>00527                          cfg->fwhm,
-<a name="l00528"></a>00528                          cfg->halfWidth,
-<a name="l00529"></a>00529                          cfg->minAmplitude,
-<a name="l00530"></a>00530                          cfg->guessDispersion1,
-<a name="l00531"></a>00531                          par );
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     <span class="keywordflow">if</span> (FLAG == shift){
-<a name="l00534"></a>00534       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_checkCorrelatedLinePositions failed!\n"</span>);
-<a name="l00535"></a>00535     }
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);
-<a name="l00538"></a>00538     cknull_nomsg(qclog_tbl = sinfo_qclog_init());
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,
-<a name="l00541"></a>00541                                   <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543     check_nomsg(fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>));
-<a name="l00544"></a>00544     check_nomsg(fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>));
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,
-<a name="l00547"></a>00547                                   <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00548"></a>00548     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,
-<a name="l00549"></a>00549                                   <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551     ck0(sinfo_pro_save_ima(map_img,ref_set,sof,cfg->outName,
-<a name="l00552"></a>00552                PRO_WAVE_MAP,qclog_tbl,plugin_id,config),
-<a name="l00553"></a>00553     <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555     sinfo_free_table(&qclog_tbl);
-<a name="l00556"></a>00556     sinfo_free_image(&map_img);
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558     <span class="comment">/* # ---free memory--- */</span>
-<a name="l00559"></a>00559     sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );
-<a name="l00560"></a>00560     <span class="comment">/* To fix a memory bug we comment the following. But check! */</span>
-<a name="l00561"></a>00561     <span class="comment">/* cpl_free ( wave ); */</span>
-<a name="l00562"></a>00562     <span class="comment">/* cpl_free ( intens ); */</span>
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 1) {
-<a name="l00565"></a>00565     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"give either wavemapIndicator = yes and calibIndicator"</span>);
-<a name="l00566"></a>00566     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"= no or wavemapIndicator = no and calibIndicator = yes"</span>) ;
-<a name="l00567"></a>00567     <span class="keywordflow">goto</span> cleanup;
-<a name="l00568"></a>00568   }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570   <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l00571"></a>00571 <span class="comment">   *-------------------SLITFITS----------------------------------------</span>
-<a name="l00572"></a>00572 <span class="comment">   *-------------------------------------------------------------------</span>
-<a name="l00573"></a>00573 <span class="comment">   #--fit the slitlet sinfo_edge positions if desired--</span>
-<a name="l00574"></a>00574 <span class="comment">  */</span>
-<a name="l00575"></a>00575   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {
-<a name="l00576"></a>00576   sinfo_msg(<span class="stringliteral">"fit the slitlet sinfo_edge positions"</span>);
-<a name="l00577"></a>00577   <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579     <span class="comment">/*</span>
-<a name="l00580"></a>00580 <span class="comment">      #read the first integer to determine the number of fit </span>
-<a name="l00581"></a>00581 <span class="comment">      parameters to allocate</span>
-<a name="l00582"></a>00582 <span class="comment">    */</span>
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584      <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->paramsList) !=1 ) {
-<a name="l00585"></a>00585        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot read FITS file %s "</span>,cfg->paramsList);
-<a name="l00586"></a>00586        <span class="keywordflow">goto</span> cleanup;
-<a name="l00587"></a>00587      }
-<a name="l00588"></a>00588      strcpy(tbl_fitpar_name,cfg->paramsList);
-<a name="l00589"></a>00589      check_nomsg(tbl_fitpar = cpl_table_load(tbl_fitpar_name,1,0));
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591      check_nomsg(readsum=cpl_table_get_int(tbl_fitpar,<span class="stringliteral">"n_params"</span>,1,status));
-<a name="l00592"></a>00592      sinfo_free_table(&tbl_fitpar);
-<a name="l00593"></a>00593  
-<a name="l00594"></a>00594      cknull(sinfo_new_fit_params( readsum ),<span class="stringliteral">"sinfo_new_fit_params failed!"</span>);
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596      ck0(sinfo_dumpTblToFitParams(par, cfg->paramsList),
-<a name="l00597"></a>00597      <span class="stringliteral">"reading tbl %s "</span>, cfg->paramsList);
-<a name="l00598"></a>00598   }
-<a name="l00599"></a>00599 
-<a name="l00600"></a>00600   <span class="comment">/* #allocate memory for the slitlet position array */</span>
-<a name="l00601"></a>00601   sinfo_slit_pos = sinfo_new_2Dfloatarray(32,2);
-<a name="l00602"></a>00602   <span class="comment">/* #now decide which fit model function you want to use by </span>
-<a name="l00603"></a>00603 <span class="comment">     reading a given character</span>
-<a name="l00604"></a>00604 <span class="comment">  */</span>
-<a name="l00605"></a>00605   <span class="comment">/*</span>
-<a name="l00606"></a>00606 <span class="comment">  sinfo_msg("cfg->fitBoltzIndicator=%d\n",cfg->fitBoltzIndicator);</span>
-<a name="l00607"></a>00607 <span class="comment">  sinfo_msg("cfg->estimateIndicator=%d\n",cfg->estimateIndicator);</span>
-<a name="l00608"></a>00608 <span class="comment">  sinfo_msg("cfg->fitEdgeIndicator=%d\n",cfg->fitEdgeIndicator);</span>
-<a name="l00609"></a>00609 <span class="comment">  */</span>
-<a name="l00610"></a>00610   <span class="keywordflow">if</span> (cfg->fitBoltzIndicator == 1) {
-<a name="l00611"></a>00611     <span class="keywordflow">if</span> (cfg->estimateIndicator == 1) {
-<a name="l00612"></a>00612       <span class="comment">/* #open the ASCII list of the slitlet positions--- */</span>
-<a name="l00613"></a>00613       <span class="comment">/*READ TFITS TABLE*/</span>
-<a name="l00614"></a>00614       strcpy(tbl_slitpos_guess_name,cfg->slitposGuessName);
-<a name="l00615"></a>00615       check_nomsg(tbl_slitpos_guess=cpl_table_load(tbl_slitpos_guess_name,1,0));
-<a name="l00616"></a>00616       check_nomsg(n = cpl_table_get_nrow(tbl_slitpos_guess));
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){
-<a name="l00619"></a>00619         val_x=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos1"</span>,i,status);
-<a name="l00620"></a>00620         val_y=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos2"</span>,i,status);
-<a name="l00621"></a>00621     sinfo_new_array2D_set_value(sinfo_slit_pos,val_x,i,0);
-<a name="l00622"></a>00622     sinfo_new_array2D_set_value(sinfo_slit_pos,val_y,i,1);
-<a name="l00623"></a>00623       }
-<a name="l00624"></a>00624       sinfo_free_table(&tbl_slitpos_guess);
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_boltz_with_estimate"</span>);
-<a name="l00627"></a>00627       fit = <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz_with_estimate</a>(im, 
-<a name="l00628"></a>00628                                             sinfo_slit_pos, 
-<a name="l00629"></a>00629                                   cfg->boxLength, 
-<a name="l00630"></a>00630                                             cfg->yBox, 
-<a name="l00631"></a>00631                                             cfg->diffTol, 
-<a name="l00632"></a>00632                                             cfg->loPos, 
-<a name="l00633"></a>00633                                             cfg->hiPos );
-<a name="l00634"></a>00634       <span class="keywordflow">if</span> (fit < 0){
-<a name="l00635"></a>00635     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_fit_slits_boltz_with_estimate failed"</span> );
-<a name="l00636"></a>00636     <span class="keywordflow">goto</span> cleanup;
-<a name="l00637"></a>00637       }
-<a name="l00638"></a>00638     } <span class="keywordflow">else</span> {
-<a name="l00639"></a>00639     sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_boltz"</span>);
-<a name="l00640"></a>00640     fit = <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square...">sinfo_new_fit_slits_boltz</a>(im, 
-<a name="l00641"></a>00641                                   par, 
-<a name="l00642"></a>00642                                   sinfo_slit_pos, 
-<a name="l00643"></a>00643                                   cfg->boxLength, 
-<a name="l00644"></a>00644                                   cfg->yBox, 
-<a name="l00645"></a>00645                                   cfg->diffTol );
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647     <span class="keywordflow">if</span> (fit < 0) {
-<a name="l00648"></a>00648       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"sinfo_new_fit_slits_boltz failed"</span> );
-<a name="l00649"></a>00649       <span class="keywordflow">goto</span> cleanup;
-<a name="l00650"></a>00650     }
-<a name="l00651"></a>00651     }
-<a name="l00652"></a>00652   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->fitEdgeIndicator == 1) {
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654     <span class="keywordflow">if</span> (cfg->estimateIndicator == 1){
-<a name="l00655"></a>00655       <span class="comment">/*READ TFITS TABLE*/</span>
-<a name="l00656"></a>00656       strcpy(tbl_slitpos_guess_name,cfg->slitposGuessName);
-<a name="l00657"></a>00657       check_nomsg(tbl_slitpos_guess=cpl_table_load(tbl_slitpos_guess_name,1,0));
-<a name="l00658"></a>00658       check_nomsg(n = cpl_table_get_nrow(tbl_slitpos_guess));
-<a name="l00659"></a>00659 
-<a name="l00660"></a>00660       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){
-<a name="l00661"></a>00661     val_x=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos1"</span>,i,status);
-<a name="l00662"></a>00662     val_y=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos2"</span>,i,status);
-<a name="l00663"></a>00663     sinfo_new_array2D_set_value(sinfo_slit_pos,val_x,i,0);
-<a name="l00664"></a>00664     sinfo_new_array2D_set_value(sinfo_slit_pos,val_y,i,1);
-<a name="l00665"></a>00665       }
-<a name="l00666"></a>00666       cpl_table_delete(tbl_slitpos_guess);
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_edge_with_estimate"</span>);
-<a name="l00669"></a>00669       fit = sinfo_new_fit_slits_edge_with_estimate(im, 
-<a name="l00670"></a>00670                                            sinfo_slit_pos,
-<a name="l00671"></a>00671                                            cfg->boxLength, 
-<a name="l00672"></a>00672                                            cfg->yBox, 
-<a name="l00673"></a>00673                                            cfg->diffTol, 
-<a name="l00674"></a>00674                                            cfg->loPos, 
-<a name="l00675"></a>00675                                  cfg->hiPos );
-<a name="l00676"></a>00676       <span class="keywordflow">if</span> (fit < 0) {
-<a name="l00677"></a>00677      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"sinfo_new_fit_slits_boltz failed"</span> );
-<a name="l00678"></a>00678          <span class="keywordflow">goto</span> cleanup;
-<a name="l00679"></a>00679       }
-<a name="l00680"></a>00680     } <span class="keywordflow">else</span> {
-<a name="l00681"></a>00681       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_edge"</span>);
-<a name="l00682"></a>00682       fit = sinfo_new_fit_slits_edge(im, 
-<a name="l00683"></a>00683                                par, 
-<a name="l00684"></a>00684                                sinfo_slit_pos, 
-<a name="l00685"></a>00685                                cfg->boxLength, 
-<a name="l00686"></a>00686                                cfg->yBox, 
-<a name="l00687"></a>00687                                cfg->diffTol );
-<a name="l00688"></a>00688       <span class="keywordflow">if</span> (fit < 0) {
-<a name="l00689"></a>00689     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_fit_slits_edge failed"</span> );
-<a name="l00690"></a>00690         <span class="keywordflow">goto</span> cleanup;
-<a name="l00691"></a>00691       }
-<a name="l00692"></a>00692     }
-<a name="l00693"></a>00693   } <span class="keywordflow">else</span> {
-<a name="l00694"></a>00694     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no indication of desired fit function given"</span> );
-<a name="l00695"></a>00695     <span class="keywordflow">goto</span> cleanup;
-<a name="l00696"></a>00696   }
-<a name="l00697"></a>00697   sinfo_free_image(&im);
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699   <span class="comment">/* #store the resulting sitlet positions in an TFITS table */</span>
-<a name="l00700"></a>00700   check_nomsg(tbl_spos = cpl_table_new(32));
-<a name="l00701"></a>00701   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE));
-<a name="l00702"></a>00702   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE));
-<a name="l00703"></a>00703   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>));
-<a name="l00704"></a>00704   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>));
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706   <span class="keywordflow">for</span> (i =0; i< 32; i++) {
-<a name="l00707"></a>00707     cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,
-<a name="l00708"></a>00708                          sinfo_new_array2D_get_value(sinfo_slit_pos,i,0));
-<a name="l00709"></a>00709     cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,
-<a name="l00710"></a>00710                          sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));
-<a name="l00711"></a>00711      
-<a name="l00712"></a>00712   }
-<a name="l00713"></a>00713   <span class="keywordflow">if</span>(sw == 1) {
-<a name="l00714"></a>00714     strcpy(tbl_name,<span class="stringliteral">"out_slitpos_guess.fits"</span>);
-<a name="l00715"></a>00715     ck0(sinfo_pro_save_tbl(tbl_spos,ref_set,sof,tbl_name,
-<a name="l00716"></a>00716                PRO_SLIT_POS_GUESS,NULL,plugin_id,config),
-<a name="l00717"></a>00717     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00718"></a>00718   } <span class="keywordflow">else</span> {
-<a name="l00719"></a>00719     strcpy(tbl_name,cfg->slitposName);
-<a name="l00720"></a>00720     ck0(sinfo_pro_save_tbl(tbl_spos,ref_set,sof,tbl_name,
-<a name="l00721"></a>00721                PRO_SLIT_POS,NULL,plugin_id,config),
-<a name="l00722"></a>00722     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);
-<a name="l00723"></a>00723   }
-<a name="l00724"></a>00724   sinfo_free_table(&tbl_spos);
-<a name="l00725"></a>00725   sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );
-<a name="l00726"></a>00726   }
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728   <span class="keywordflow">if</span> ( (cfg->slitposIndicator == 1 && cfg->estimateIndicator != 1) || 
-<a name="l00729"></a>00729        (cfg->calibIndicator == 1)  || (cfg->wavemapInd == 1) ){
-<a name="l00730"></a>00730     sinfo_new_destroy_fit_params(&par);
-<a name="l00731"></a>00731   }
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737   <span class="keywordflow">if</span>(pdensity > 1) {
-<a name="l00738"></a>00738      check_nomsg(sinfo_image_resample(plugin_id,config,sof,ref_set));
-<a name="l00739"></a>00739 
-<a name="l00740"></a>00740 
-<a name="l00796"></a>00796   }
-<a name="l00797"></a>00797   sinfo_free_frameset(&raw);
-<a name="l00798"></a>00798   sinfo_qc_wcal_delete(&qc);
-<a name="l00799"></a>00799   sinfo_wavecal_free(&cfg);
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801   <span class="keywordflow">return</span> 0;
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803   cleanup:
-<a name="l00804"></a>00804   sinfo_free_image(&map_img);
-<a name="l00805"></a>00805   <span class="comment">//sinfo_free_image(&wstk_img);</span>
-<a name="l00806"></a>00806   sinfo_free_table(&tbl_spos);
-<a name="l00807"></a>00807   sinfo_free_table(&tbl_fitpar);
-<a name="l00808"></a>00808   sinfo_free_image(&map_img);
-<a name="l00809"></a>00809   sinfo_free_table(&tbl_wcal);
-<a name="l00810"></a>00810   sinfo_free_table(&tbl_fp) ;
-<a name="l00811"></a>00811   sinfo_free_table(&tbl_line_list);
-<a name="l00812"></a>00812   sinfo_free_table(&tbl_wcal);
-<a name="l00813"></a>00813   sinfo_free_table(&qclog_tbl);
-<a name="l00814"></a>00814   sinfo_free_image(&map_img);
-<a name="l00815"></a>00815   sinfo_new_destroy_fit_params(&par);
-<a name="l00816"></a>00816   sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );
-<a name="l00817"></a>00817   sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );
-<a name="l00818"></a>00818   sinfo_new_destroy_2Dintarray (&row_clean, lx);
-<a name="l00819"></a>00819   sinfo_new_destroy_intarray(&n_found_lines );
-<a name="l00820"></a>00820   sinfo_new_destroy_intarray(&sum_pointer );
-<a name="l00821"></a>00821   <span class="keywordflow">if</span>(acoefs!=NULL) {
-<a name="l00822"></a>00822      sinfo_new_destroy_2Dfloatarray(&acoefs,cfg->nrDispCoefficients);
-<a name="l00823"></a>00823   }
-<a name="l00824"></a>00824   sinfo_free_table(&tbl_line_list);
-<a name="l00825"></a>00825   sinfo_free_image(&im);
-<a name="l00826"></a>00826   sinfo_wavecal_free(&cfg);
-<a name="l00827"></a>00827   sinfo_free_frameset(&raw);
-<a name="l00828"></a>00828   sinfo_qc_wcal_delete(&qc);
-<a name="l00829"></a>00829   <span class="keywordflow">return</span> -1 ;
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831 }
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835 
-<a name="l00836"></a>00836 
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844 <span class="keyword">static</span> cpl_error_code
-<a name="l00845"></a>00845 sinfo_image_resample(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00846"></a>00846                      cpl_parameterlist* config,
-<a name="l00847"></a>00847                      cpl_frameset* sof,
-<a name="l00848"></a>00848                      cpl_frameset* ref_set)
-<a name="l00849"></a>00849 {
-<a name="l00850"></a>00850   <span class="comment">//RESAMPLE ThAr frame for QC</span>
-<a name="l00851"></a>00851   <span class="keywordtype">double</span> dis=0;
-<a name="l00852"></a>00852   <span class="keywordtype">float</span> mi=0;
-<a name="l00853"></a>00853   <span class="keywordtype">float</span> ma=0;
-<a name="l00854"></a>00854   <span class="keywordtype">double</span> cwav=0;
-<a name="l00855"></a>00855   <span class="keywordtype">int</span> cpix=0;
-<a name="l00856"></a>00856   <span class="keyword">const</span> cpl_frame* frm=NULL;
-<a name="l00857"></a>00857   <span class="keywordtype">char</span> wstk_name[80];
-<a name="l00858"></a>00858   <span class="keywordtype">char</span> map_name[80];
-<a name="l00859"></a>00859   cpl_image* res_ima=NULL;
-<a name="l00860"></a>00860   <span class="keywordtype">int</span> ncoeffs=3;
-<a name="l00861"></a>00861   <span class="keywordtype">int</span> nrows=SINFO_RESAMP_NROWS;
-<a name="l00862"></a>00862   cpl_parameter* p=NULL;
-<a name="l00863"></a>00863   cpl_image* wstk_img=NULL;
-<a name="l00864"></a>00864   cpl_image* map_img=NULL;
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866   check_nomsg(p = cpl_parameterlist_find(config,
-<a name="l00867"></a>00867                                          <span class="stringliteral">"sinfoni.wavecal.n_coeffs"</span>));
-<a name="l00868"></a>00868 
-<a name="l00869"></a>00869   check_nomsg(ncoeffs=cpl_parameter_get_int(p));
-<a name="l00870"></a>00870 
-<a name="l00871"></a>00871   check_nomsg(frm=cpl_frameset_find_const(sof,PRO_WAVE_LAMP_STACKED));
-<a name="l00872"></a>00872   check_nomsg(strcpy(wstk_name,cpl_frame_get_filename(frm)));
-<a name="l00873"></a>00873   check_nomsg(wstk_img=cpl_image_load(wstk_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877   check_nomsg(frm=cpl_frameset_find_const(sof,PRO_WAVE_MAP));
-<a name="l00878"></a>00878   check_nomsg(strcpy(map_name,cpl_frame_get_filename(frm)));
-<a name="l00879"></a>00879   check_nomsg(map_img=cpl_image_load(map_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882 
-<a name="l00883"></a>00883   cknull(res_ima = sinfo_new_defined_resampling(wstk_img, 
-<a name="l00884"></a>00884                         map_img, 
-<a name="l00885"></a>00885                         ncoeffs,
-<a name="l00886"></a>00886                         &nrows,
-<a name="l00887"></a>00887                         &dis,
-<a name="l00888"></a>00888                         &mi,
-<a name="l00889"></a>00889                         &ma,
-<a name="l00890"></a>00890                         &cwav,
-<a name="l00891"></a>00891                         &cpix),
-<a name="l00892"></a>00892      <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896   ck0(sinfo_pro_save_ima(res_ima,ref_set,sof,WAVECAL_RESAMPLED_OUT_FILENAME,
-<a name="l00897"></a>00897              PRO_RESAMPLED_WAVE,NULL,plugin_id,config),
-<a name="l00898"></a>00898       <span class="stringliteral">"cannot save ima %s"</span>,WAVECAL_RESAMPLED_OUT_FILENAME);
-<a name="l00899"></a>00899 
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901   cleanup:
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903   sinfo_free_image(&map_img);
-<a name="l00904"></a>00904   sinfo_free_image(&res_ima);
-<a name="l00905"></a>00905   sinfo_free_image(&wstk_img);
-<a name="l00906"></a>00906   <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_wave_cal_slit2.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :       sinfo_new_wave_cal_slit2.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    A. Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Sep 17, 2003</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  : </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_new_wave_cal_slit2.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_wcal_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_absolute.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_wavecal.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                             Function Definitions</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> sinfo_image_resample(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                      cpl_parameterlist* config,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                      cpl_frameset* ref_set);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">   Function     :       sinfo_wave_cal_slit()</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"></span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment"></span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment"></span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment"></span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> sinfo_new_wave_cal_slit2(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                         cpl_parameterlist* config, </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                         cpl_frameset* sof,cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   wave_config * cfg =NULL;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordtype">char</span> col_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="keywordtype">char</span> tbl_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordtype">char</span> tbl_fitpar_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordtype">char</span> tbl_line_list_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordtype">char</span> tbl_slitpos_guess_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">char</span> key_name[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordtype">char</span> col[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   <span class="keywordtype">int</span> check = 0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordtype">int</span> lx = 0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="keywordtype">int</span> ly = 0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordtype">int</span> j = 0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <span class="keywordtype">int</span> n = 0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">int</span> readsum=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">int</span> sum=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordtype">int</span> fit=0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">int</span> sw=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">int</span>* n_found_lines=NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordtype">int</span>* sum_pointer=NULL;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">int</span>** row_clean=NULL;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">float</span> a=0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordtype">float</span> shift=0;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">float</span> val_x=0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordtype">float</span> val_y=0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">float</span>* wave=NULL;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordtype">float</span>* intens=NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="keywordtype">float</span>** acoefs=NULL;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   <span class="keywordtype">float</span>** wavelength_clean=NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordtype">float</span>** sinfo_slit_pos=NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   <span class="keywordtype">double</span> fwhm_med=0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordtype">double</span> fwhm_avg=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordtype">double</span> coef_med=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordtype">double</span> coef_avg=0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>  </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   cpl_image * im=NULL ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   FitParams** par=NULL;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   cpl_table* tbl_wcal=NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cpl_table* tbl_spos=NULL;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   cpl_table* tbl_fitpar = NULL;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   cpl_table* tbl_line_list = NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_table* tbl_slitpos_guess=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_table * tbl_fp =NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   cpl_table* qclog_tbl=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_image* map_img=NULL;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   cpl_frameset* raw=NULL;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   qc_wcal* qc=sinfo_qc_wcal_new();</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="comment">/*   -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">       1) parse the file names and parameters to the ns_config data </span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">          structure cfg</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">       -----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   sinfo_msg(<span class="stringliteral">"Parsing cpl input"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   check_nomsg(raw=cpl_frameset_new());</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   cknull(cfg = sinfo_parse_cpl_input_wave(config,sof,&raw),</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>      <span class="stringliteral">"could not parse cpl input!"</span>) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>  </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   check_nomsg(p = cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                          <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   check_nomsg(sw=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">if</span>(sw==1) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>      cfg->nslitlets=32;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>      cfg->calibIndicator=1;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>      cfg->wavemapInd=0;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>      cfg->slitposIndicator=1;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>      sinfo_msg(<span class="stringliteral">"***********************************"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>      sinfo_msg(<span class="stringliteral">"parameter setting for %s"</span>,PRO_WAVE_SLITPOS_STACKED);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>      sinfo_msg(<span class="stringliteral">"***********************************"</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->inFrame) != 1) {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file cfg->inFrame %s is not FITS"</span>,cfg->inFrame);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1 && cfg->estimateIndicator == 1) {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->slitposGuessName) != 1) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"slitlet position guess list not given!"</span>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">if</span> (cfg->calibIndicator == 0 && cfg->wavemapInd == 1) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->coeffsName) != 1) {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"coefficients list not given!"</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->paramsList) != 1) {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parameter list not given!"</span>);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>  </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="comment">/*---load the emission line frame---*/</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   check(im = cpl_image_load(cfg->inFrame,CPL_TYPE_FLOAT,0,0)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         ,<span class="stringliteral">"could not load image"</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   lx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   ly = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   <span class="keywordflow">if</span> (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="comment">/*---open the line list and read the number of lines---*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     strcpy(tbl_line_list_name,cfg->lineList);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     check_nomsg(tbl_line_list = cpl_table_load(tbl_line_list_name,1,0));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     check_nomsg(n = cpl_table_get_nrow(tbl_line_list));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     n_lines = n;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     check_nomsg(wave   = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"wave"</span>));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     check_nomsg(intens = cpl_table_get_data_float(tbl_line_list,<span class="stringliteral">"int"</span>));</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">  ----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">  ---------------------------FINDLINES----------------------------------</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">  ----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="comment">/*if not yet done:</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">    do the wavelength calibration, that means: </span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">    find the dispersion relation and parameterize its coefficients</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">  sinfo_msg("guessBeginWave=%g",cfg->guessBeginWavelength);</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">  sinfo_msg("guessDisp1=%g",cfg->guessDispersion1);</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">  sinfo_msg("guessDisp2=%g",cfg->guessDispersion2);</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordflow">if</span> (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     sinfo_msg(<span class="stringliteral">"Findlines"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     acoefs  = sinfo_new_2Dfloatarray(cfg->nrDispCoefficients, lx);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/*allocate memory*/</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     n_found_lines    = sinfo_new_intarray(lx); </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     row_clean        = sinfo_new_2Dintarray(lx, n_lines);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     wavelength_clean = sinfo_new_2Dfloatarray(lx, n_lines);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     sum_pointer      = sinfo_new_intarray(1) ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="comment">/*find the emission lines in each image column*/</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     sinfo_new_intarray_set_value(sum_pointer, 0, 0);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>  </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     ck0(check = sinfo_new_find_lines(im, </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                                 wave, </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                                 intens, </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                                 n_lines, </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                                 row_clean, </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                 wavelength_clean, </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                 cfg->guessBeginWavelength, </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                         cfg->guessDispersion1, </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                                 cfg->guessDispersion2,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                 cfg->mindiff, </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                 cfg->halfWidth, </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                 n_found_lines, </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                                 cfg->sigma, </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                                 sum_pointer),</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="stringliteral">"sinfo_findLines failed!"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">/*---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">     *-----------------------WAVE_CALIB-------------------------------------</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">     *---------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     sinfo_msg(<span class="stringliteral">"Wave Calibration"</span>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     sum = sinfo_new_intarray_get_value(sum_pointer,0);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="comment">/* allocate memory for the fit parameters */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     cknull(par = sinfo_new_fit_params( sum ),</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>        <span class="stringliteral">"sinfo_newFitParams failed!"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="comment">   fit each line, make a polynomial fit and fit the resulting fit </span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">   coefficients across the columns of the slitlet</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>    cknull(map_img = sinfo_new_wave_cal(im, </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                   par, </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                   acoefs,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                   cfg->nslitlets, </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                   row_clean,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                   wavelength_clean,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                   n_found_lines,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                   cfg->guessDispersion1,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                   cfg->halfWidth,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                   cfg->minAmplitude,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                   cfg->maxResidual,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                   cfg->fwhm,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                   cfg->nrDispCoefficients, </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                   cfg->nrCoefCoefficients,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                   cfg->sigmaFactor,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                   cfg->pixeldist,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                   cfg->pixel_tolerance),</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       <span class="stringliteral">"sinfo_wave_cal failed!"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    sinfo_msg(<span class="stringliteral">"Check line positions"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>    shift=sinfo_new_check_line_positions(im,acoefs,cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                     cfg->guessDispersion1,par);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>    <span class="keywordflow">if</span> (FLAG == shift){ </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"checkForLinePositions failed!\n"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>    sinfo_det_ncounts(raw, cfg->qc_thresh_max, qc);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>    cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>    ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,n_lines,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                  <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE NPIXSAT"</span>,qc->nsat,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                                  <span class="stringliteral">"Number of saturated pixels"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC WAVE MAXFLUX"</span>,qc->max_di,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                                  <span class="stringliteral">"Max int off-lamp subtracted frm"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC WAVE POSERR"</span>,shift,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                                  <span class="stringliteral">"Overall positioning error in mum"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>    ck0(sinfo_pro_save_ima(map_img,ref_set,sof,cfg->outName,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>               PRO_WAVE_MAP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>        <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>    sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>    sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">    #store the resulting polynomial fit coefficients in an </span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">     ASCII file if wished</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>    <span class="keywordflow">if</span> (cfg->writeCoeffsInd == 1) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>      check_nomsg(tbl_wcal = cpl_table_new(lx));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>        snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>        check_nomsg(cpl_table_new_column(tbl_wcal,col_name, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>      }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>      cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>      ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC WAVE ALL"</span>,n_lines,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                                    <span class="stringliteral">"Number found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>      <span class="keywordflow">for</span> (j=0; j< lx; j++) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>        <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>      snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>      a = sinfo_new_array2D_get_value(acoefs, i, j);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>      <span class="comment">/* fprintf(acoefs_file, "%15.13g ", a) ; */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>      cpl_table_set_double(tbl_wcal,col_name,j,a);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>        }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>      }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>      <span class="keywordflow">for</span> (i=0; i< cfg->nrDispCoefficients; i++) {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>        snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,i);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>        check_nomsg(coef_avg=cpl_table_get_column_mean(tbl_wcal,col_name));</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>        check_nomsg(coef_med=cpl_table_get_column_median(tbl_wcal,col_name));</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>        snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" AVG"</span>);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_avg,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                                         <span class="stringliteral">"Average wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>        snprintf(key_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"QC COEF"</span>,i,<span class="stringliteral">" MED"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,key_name,coef_med,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                         <span class="stringliteral">"Median wavecal Coef"</span>,<span class="stringliteral">"%g"</span>));</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>      }</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>      <span class="keywordflow">if</span>(pdensity >1) {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>      strcpy(tbl_name,cfg->coeffsName);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>      ck0(sinfo_pro_save_tbl(tbl_wcal,ref_set,sof,tbl_name,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 PRO_WAVE_COEF_SLIT,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>      <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>      sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>      sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>      }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>    }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">    #store the resulting Gaussian fit parameters in an ASCII file if wished</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>    <span class="keywordflow">if</span> (cfg->writeParInd == 1) {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       sinfo_new_dump_fit_params_to_ascii(par,WAVECAL_FIT_PARAMS_OUT_FILEASCII);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>  </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       cknull(par,<span class="stringliteral">"no fit parameters available!"</span>) ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       cknull(cfg->paramsList,<span class="stringliteral">"no filename available!"</span>) ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>       check_nomsg(tbl_fp = cpl_table_new(par[0] -> n_params));</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"n_params"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"column"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>       check_nomsg(cpl_table_new_column(tbl_fp,<span class="stringliteral">"line"</span>, CPL_TYPE_INT));</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>  </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>       <span class="keywordflow">for</span>(j=0;j<4;j++) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>          snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>          cpl_table_new_column(tbl_fp,col, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>       }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                                     <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>      <span class="keywordflow">for</span> ( i = 0 ; i < par[0] -> n_params ; i++ ) {</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>       </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"n_params"</span>,i,par[i]->n_params));</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"column"</span>,i,par[i]->column));</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>          check_nomsg(cpl_table_set_int(tbl_fp,<span class="stringliteral">"line"</span>,i,par[i]->line));</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>          <span class="keywordflow">for</span>(j=0;j<4;j++) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>        snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>        <span class="keywordflow">if</span>(isnan(par[i]->fit_par[j])) {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>          cpl_table_set_invalid(tbl_fp,col,i);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>          cpl_table_set_double(tbl_fp,col,i,par[i]->fit_par[j]);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>        }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>        snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>        <span class="keywordflow">if</span>(isnan(par[i]->derv_par[j])) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>          cpl_table_set_invalid(tbl_fp,col,i);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>          cpl_table_set_double(tbl_fp,col,i,par[i]->derv_par[j]);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>        }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>      }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>       check_nomsg(fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>));</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       check_nomsg(fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>));</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                                        <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                        <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       ck0(sinfo_pro_save_tbl(tbl_fp,ref_set,sof,cfg->paramsList,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                  PRO_WAVE_PAR_LIST,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       <span class="stringliteral">"cannot save tbl %s"</span>, cfg->paramsList);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       }</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       sinfo_free_table(&tbl_fp) ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>    }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>    <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>    sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>    sinfo_new_destroy_2Dintarray (&row_clean, lx);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>    sinfo_new_destroy_intarray(&n_found_lines );</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>    sinfo_new_destroy_intarray(&sum_pointer );</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>    sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>    sinfo_free_table(&tbl_line_list);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>    <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">    *-------------------WAVEMAP--------------------------------------------</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="comment">    *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">    #---now do the cross sinfo_correlation and produce a wavelength map---</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 0) { </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     sinfo_msg(<span class="stringliteral">"Wavemap"</span>);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     acoefs = sinfo_new_2Dfloatarray ( cfg->nrDispCoefficients, lx);</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="comment">/* #read the parameterized dispersion relation */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     strcpy(tbl_name,cfg->coeffsName);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     check_nomsg(tbl_wcal = cpl_table_load(tbl_name,1,0));</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="keywordflow">for</span> (i =0; i < lx; i++) {</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       <span class="keywordflow">for</span> (j = 0; j< cfg->nrDispCoefficients; j++) {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     snprintf(col_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"coeff"</span>,j);</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     acoefs[j][i]=cpl_table_get_double(tbl_wcal,col_name,i,status);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       }</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     cknull(map_img = sinfo_new_create_shifted_slit_wavemap2(im,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>                            acoefs,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>                            cfg->nrDispCoefficients,</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                            wave,</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                            intens,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                            n_lines,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                            cfg->magFactor,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                            cfg->guessDispersion1,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>                            cfg->pixeldist ),</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>            <span class="stringliteral">"sinfo_createShiftedSlitWavemap2 failed!"</span>);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     par = sinfo_new_fit_params(15*n_lines);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     sinfo_msg(<span class="stringliteral">"Check shifts"</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     shift = sinfo_new_check_correlated_line_positions ( im, acoefs, </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>                          cfg->nrDispCoefficients, </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                          wave,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                          intens,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                          n_lines,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                          cfg->fwhm,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                          cfg->halfWidth,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                          cfg->minAmplitude,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                          cfg->guessDispersion1,</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                          par );</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="keywordflow">if</span> (FLAG == shift){</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_checkCorrelatedLinePositions failed!\n"</span>);</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     }</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     cknull_nomsg(qclog_tbl = sinfo_qclog_init());</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,<span class="stringliteral">"QC NLINES"</span>,n_lines,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                                   <span class="stringliteral">"Number of found lines"</span>,<span class="stringliteral">"%d"</span>));</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     check_nomsg(fwhm_avg = cpl_table_get_column_mean(tbl_fp,<span class="stringliteral">"fpar1"</span>));</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>     check_nomsg(fwhm_med = cpl_table_get_column_median(tbl_fp,<span class="stringliteral">"fpar1"</span>));</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM MED"</span>,fwhm_med,</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>                                   <span class="stringliteral">"Median FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>     ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,<span class="stringliteral">"QC FWHM AVG"</span>,fwhm_avg,</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                                   <span class="stringliteral">"Average FWHM of found lines"</span>,<span class="stringliteral">"%f"</span>));</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     ck0(sinfo_pro_save_ima(map_img,ref_set,sof,cfg->outName,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                PRO_WAVE_MAP,qclog_tbl,plugin_id,config),</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="stringliteral">"cannot save ima %s"</span>, cfg->outName);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>     <span class="comment">/* # ---free memory--- */</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     sinfo_new_destroy_2Dfloatarray ( &acoefs, cfg->nrDispCoefficients );</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="comment">/* To fix a memory bug we comment the following. But check! */</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="comment">/* cpl_free ( wave ); */</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="comment">/* cpl_free ( intens ); */</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->wavemapInd == 1 && cfg->calibIndicator == 1) {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"give either wavemapIndicator = yes and calibIndicator"</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"= no or wavemapIndicator = no and calibIndicator = yes"</span>) ;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="comment">   *-------------------SLITFITS----------------------------------------</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="comment">   *-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="comment">   #--fit the slitlet sinfo_edge positions if desired--</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordflow">if</span> (cfg->slitposIndicator == 1) {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   sinfo_msg(<span class="stringliteral">"fit the slitlet sinfo_edge positions"</span>);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">if</span> (cfg->calibIndicator != 1 && cfg->estimateIndicator != 1) {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="comment">      #read the first integer to determine the number of fit </span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="comment">      parameters to allocate</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>      <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->paramsList) !=1 ) {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot read FITS file %s "</span>,cfg->paramsList);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>        <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>      }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>      strcpy(tbl_fitpar_name,cfg->paramsList);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>      check_nomsg(tbl_fitpar = cpl_table_load(tbl_fitpar_name,1,0));</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>      check_nomsg(readsum=cpl_table_get_int(tbl_fitpar,<span class="stringliteral">"n_params"</span>,1,status));</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>      sinfo_free_table(&tbl_fitpar);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>  </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>      cknull(sinfo_new_fit_params( readsum ),<span class="stringliteral">"sinfo_new_fit_params failed!"</span>);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>      ck0(sinfo_dumpTblToFitParams(par, cfg->paramsList),</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>      <span class="stringliteral">"reading tbl %s "</span>, cfg->paramsList);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="comment">/* #allocate memory for the slitlet position array */</span></div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   sinfo_slit_pos = sinfo_new_2Dfloatarray(32,2);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   <span class="comment">/* #now decide which fit model function you want to use by </span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment">     reading a given character</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="comment">  sinfo_msg("cfg->fitBoltzIndicator=%d\n",cfg->fitBoltzIndicator);</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> <span class="comment">  sinfo_msg("cfg->estimateIndicator=%d\n",cfg->estimateIndicator);</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">  sinfo_msg("cfg->fitEdgeIndicator=%d\n",cfg->fitEdgeIndicator);</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   <span class="keywordflow">if</span> (cfg->fitBoltzIndicator == 1) {</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     <span class="keywordflow">if</span> (cfg->estimateIndicator == 1) {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>       <span class="comment">/* #open the ASCII list of the slitlet positions--- */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>       <span class="comment">/*READ TFITS TABLE*/</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>       strcpy(tbl_slitpos_guess_name,cfg->slitposGuessName);</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>       check_nomsg(tbl_slitpos_guess=cpl_table_load(tbl_slitpos_guess_name,1,0));</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       check_nomsg(n = cpl_table_get_nrow(tbl_slitpos_guess));</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>         val_x=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos1"</span>,i,status);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         val_y=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos2"</span>,i,status);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     sinfo_new_array2D_set_value(sinfo_slit_pos,val_x,i,0);</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     sinfo_new_array2D_set_value(sinfo_slit_pos,val_y,i,1);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>       }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>       sinfo_free_table(&tbl_slitpos_guess);</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_boltz_with_estimate"</span>);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>       fit = <a class="code" href="group__sinfo__boltzmann.html#ga1851d695a240ae0d23d20657f02867bb" title="its the beginning and end position of the slitlets by using non-linear least square fitting of a Bolt...">sinfo_new_fit_slits_boltz_with_estimate</a>(im, </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                                             sinfo_slit_pos, </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                                   cfg->boxLength, </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                                             cfg->yBox, </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                                             cfg->diffTol, </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                                             cfg->loPos, </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                                             cfg->hiPos );</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>       <span class="keywordflow">if</span> (fit < 0){</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_fit_slits_boltz_with_estimate failed"</span> );</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>       }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_boltz"</span>);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     fit = <a class="code" href="group__sinfo__boltzmann.html#gab3549f7bb876fb4091ba3c0bd64d267d" title="fits the beginning and end position of the slitlets by using non-linear least square fitting of a Bol...">sinfo_new_fit_slits_boltz</a>(im, </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                                   par, </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                                   sinfo_slit_pos, </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                                   cfg->boxLength, </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                                   cfg->yBox, </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                                   cfg->diffTol );</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="keywordflow">if</span> (fit < 0) {</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"sinfo_new_fit_slits_boltz failed"</span> );</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cfg->fitEdgeIndicator == 1) {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     <span class="keywordflow">if</span> (cfg->estimateIndicator == 1){</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>       <span class="comment">/*READ TFITS TABLE*/</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       strcpy(tbl_slitpos_guess_name,cfg->slitposGuessName);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>       check_nomsg(tbl_slitpos_guess=cpl_table_load(tbl_slitpos_guess_name,1,0));</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>       check_nomsg(n = cpl_table_get_nrow(tbl_slitpos_guess));</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       <span class="keywordflow">for</span> (i =0 ; i< 32; i++){</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     val_x=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos1"</span>,i,status);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     val_y=cpl_table_get_double(tbl_slitpos_guess,<span class="stringliteral">"pos2"</span>,i,status);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     sinfo_new_array2D_set_value(sinfo_slit_pos,val_x,i,0);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     sinfo_new_array2D_set_value(sinfo_slit_pos,val_y,i,1);</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>       }</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       cpl_table_delete(tbl_slitpos_guess);</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_edge_with_estimate"</span>);</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>       fit = sinfo_new_fit_slits_edge_with_estimate(im, </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                                            sinfo_slit_pos,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                                            cfg->boxLength, </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                                            cfg->yBox, </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                                            cfg->diffTol, </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                                            cfg->loPos, </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                                  cfg->hiPos );</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>       <span class="keywordflow">if</span> (fit < 0) {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"sinfo_new_fit_slits_boltz failed"</span> );</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>       }</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>       sinfo_msg(<span class="stringliteral">"sinfo_new_fit_slits_edge"</span>);</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       fit = sinfo_new_fit_slits_edge(im, </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                                par, </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>                                sinfo_slit_pos, </div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>                                cfg->boxLength, </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>                                cfg->yBox, </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                                cfg->diffTol );</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       <span class="keywordflow">if</span> (fit < 0) {</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_new_fit_slits_edge failed"</span> );</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>       }</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     }</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no indication of desired fit function given"</span> );</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   }</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   sinfo_free_image(&im);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <span class="comment">/* #store the resulting sitlet positions in an TFITS table */</span></div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   check_nomsg(tbl_spos = cpl_table_new(32));</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos1"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   check_nomsg(cpl_table_new_column(tbl_spos,<span class="stringliteral">"pos2"</span>, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos1"</span>, <span class="stringliteral">"15.9f"</span>));</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   check_nomsg(cpl_table_set_column_format(tbl_spos,<span class="stringliteral">"pos2"</span>, <span class="stringliteral">"15.9f"</span>));</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordflow">for</span> (i =0; i< 32; i++) {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos1"</span>,i,</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>                          sinfo_new_array2D_get_value(sinfo_slit_pos,i,0));</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     cpl_table_set_double(tbl_spos,<span class="stringliteral">"pos2"</span>,i,</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                          sinfo_new_array2D_get_value(sinfo_slit_pos,i,1));</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>      </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">if</span>(sw == 1) {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     strcpy(tbl_name,<span class="stringliteral">"out_slitpos_guess.fits"</span>);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     ck0(sinfo_pro_save_tbl(tbl_spos,ref_set,sof,tbl_name,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                PRO_SLIT_POS_GUESS,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     strcpy(tbl_name,cfg->slitposName);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     ck0(sinfo_pro_save_tbl(tbl_spos,ref_set,sof,tbl_name,</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>                PRO_SLIT_POS,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="stringliteral">"cannot save tbl %s"</span>, tbl_name);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>   }</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   sinfo_free_table(&tbl_spos);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   }</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordflow">if</span> ( (cfg->slitposIndicator == 1 && cfg->estimateIndicator != 1) || </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>        (cfg->calibIndicator == 1)  || (cfg->wavemapInd == 1) ){</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     sinfo_new_destroy_fit_params(&par);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   <span class="keywordflow">if</span>(pdensity > 1) {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>      check_nomsg(sinfo_image_resample(plugin_id,config,sof,ref_set));</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> </div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> </div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   }</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   sinfo_wavecal_free(&cfg);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   cleanup:</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   <span class="comment">//sinfo_free_image(&wstk_img);</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   sinfo_free_table(&tbl_spos);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   sinfo_free_table(&tbl_fitpar);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   sinfo_free_table(&tbl_fp) ;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   sinfo_free_table(&tbl_line_list);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   sinfo_free_table(&tbl_wcal);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   sinfo_free_table(&qclog_tbl);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   sinfo_new_destroy_fit_params(&par);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   sinfo_new_destroy_2Dfloatarray ( &sinfo_slit_pos, 32 );</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   sinfo_new_destroy_2Dfloatarray ( &wavelength_clean, lx );</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   sinfo_new_destroy_2Dintarray (&row_clean, lx);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   sinfo_new_destroy_intarray(&n_found_lines );</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   sinfo_new_destroy_intarray(&sum_pointer );</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   <span class="keywordflow">if</span>(acoefs!=NULL) {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>      sinfo_new_destroy_2Dfloatarray(&acoefs,cfg->nrDispCoefficients);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   }</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   sinfo_free_table(&tbl_line_list);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   sinfo_free_image(&im);</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   sinfo_wavecal_free(&cfg);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   sinfo_free_frameset(&raw);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   sinfo_qc_wcal_delete(&qc);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> }</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> </div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> sinfo_image_resample(<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>                      cpl_parameterlist* config,</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                      cpl_frameset* sof,</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>                      cpl_frameset* ref_set)</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   <span class="comment">//RESAMPLE ThAr frame for QC</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   <span class="keywordtype">double</span> dis=0;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>   <span class="keywordtype">float</span> mi=0;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   <span class="keywordtype">float</span> ma=0;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   <span class="keywordtype">double</span> cwav=0;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   <span class="keywordtype">int</span> cpix=0;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>   <span class="keyword">const</span> cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>   <span class="keywordtype">char</span> wstk_name[80];</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>   <span class="keywordtype">char</span> map_name[80];</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   cpl_image* res_ima=NULL;</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>   <span class="keywordtype">int</span> ncoeffs=3;</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>   <span class="keywordtype">int</span> nrows=SINFO_RESAMP_NROWS;</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>   cpl_image* wstk_img=NULL;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   cpl_image* map_img=NULL;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   check_nomsg(p = cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                                          <span class="stringliteral">"sinfoni.wavecal.n_coeffs"</span>));</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   check_nomsg(ncoeffs=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>   check_nomsg(frm=cpl_frameset_find_const(sof,PRO_WAVE_LAMP_STACKED));</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   check_nomsg(strcpy(wstk_name,cpl_frame_get_filename(frm)));</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   check_nomsg(wstk_img=cpl_image_load(wstk_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   check_nomsg(frm=cpl_frameset_find_const(sof,PRO_WAVE_MAP));</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>   check_nomsg(strcpy(map_name,cpl_frame_get_filename(frm)));</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   check_nomsg(map_img=cpl_image_load(map_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   cknull(res_ima = sinfo_new_defined_resampling(wstk_img, </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>                         map_img, </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>                         ncoeffs,</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>                         &nrows,</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>                         &dis,</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>                         &mi,</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>                         &ma,</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>                         &cwav,</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>                         &cpix),</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>      <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   ck0(sinfo_pro_save_ima(res_ima,ref_set,sof,WAVECAL_RESAMPLED_OUT_FILENAME,</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>              PRO_RESAMPLED_WAVE,NULL,plugin_id,config),</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>       <span class="stringliteral">"cannot save ima %s"</span>,WAVECAL_RESAMPLED_OUT_FILENAME);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   cleanup:</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   sinfo_free_image(&map_img);</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   sinfo_free_image(&res_ima);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   sinfo_free_image(&wstk_img);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>   <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__new__wave__cal__slit2_8h_source.html b/html/sinfo__new__wave__cal__slit2_8h_source.html
index f3455cd..e3ab005 100644
--- a/html/sinfo__new__wave__cal__slit2_8h_source.html
+++ b/html/sinfo__new__wave__cal__slit2_8h_source.html
@@ -2,148 +2,179 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_new_wave_cal_slit2.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_new_wave_cal_slit2.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_NEW_WAVE_CAL_SLIT2_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_WAVE_CAL_SLIT2_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/****************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_new_wave_cal_slit2.h,v 1.7 2007/09/21 14:13:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* amodigli  17/09/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_new_wave_cal_slit2.h</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment">  Normal method:</span>
-<a name="l00035"></a>00035 <span class="comment"></span>
-<a name="l00036"></a>00036 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00037"></a>00037 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00038"></a>00038 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00039"></a>00039 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00040"></a>00040 <span class="comment"></span>
-<a name="l00041"></a>00041 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00042"></a>00042 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00043"></a>00043 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00044"></a>00044 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00045"></a>00045 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00046"></a>00046 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00047"></a>00047 <span class="comment">    in an ASCII file.</span>
-<a name="l00048"></a>00048 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00049"></a>00049 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00050"></a>00050 <span class="comment">    original frame</span>
-<a name="l00051"></a>00051 <span class="comment"></span>
-<a name="l00052"></a>00052 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00053"></a>00053 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00054"></a>00054 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00055"></a>00055 <span class="comment"></span>
-<a name="l00056"></a>00056 <span class="comment"></span>
-<a name="l00057"></a>00057 <span class="comment">  Slit method:</span>
-<a name="l00058"></a>00058 <span class="comment"></span>
-<a name="l00059"></a>00059 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00060"></a>00060 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00061"></a>00061 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00062"></a>00062 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00063"></a>00063 <span class="comment"></span>
-<a name="l00064"></a>00064 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00065"></a>00065 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00066"></a>00066 <span class="comment"></span>
-<a name="l00067"></a>00067 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00068"></a>00068 <span class="comment"></span>
-<a name="l00069"></a>00069 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00070"></a>00070 <span class="comment"> */</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*</span>
-<a name="l00073"></a>00073 <span class="comment"> * header files</span>
-<a name="l00074"></a>00074 <span class="comment"> */</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00077"></a>00077 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00081"></a>00081 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00084"></a>00084 <span class="comment">   Function     :       sinfo_new_wave_cal_slit2()</span>
-<a name="l00085"></a>00085 <span class="comment">   In           :       ini_file: file name of according .ini file</span>
-<a name="l00086"></a>00086 <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span>
-<a name="l00087"></a>00087 <span class="comment">   Job          :</span>
-<a name="l00088"></a>00088 <span class="comment"></span>
-<a name="l00089"></a>00089 <span class="comment"></span>
-<a name="l00090"></a>00090 <span class="comment">  Normal method:</span>
-<a name="l00091"></a>00091 <span class="comment"></span>
-<a name="l00092"></a>00092 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00093"></a>00093 <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span>
-<a name="l00094"></a>00094 <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span>
-<a name="l00095"></a>00095 <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span>
-<a name="l00096"></a>00096 <span class="comment"></span>
-<a name="l00097"></a>00097 <span class="comment"></span>
-<a name="l00098"></a>00098 <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span>
-<a name="l00099"></a>00099 <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span>
-<a name="l00100"></a>00100 <span class="comment">    resulting fit parameters can be stored in an ASCII file</span>
-<a name="l00101"></a>00101 <span class="comment">  o Fitting of a polynomial to the line positions for each column</span>
-<a name="l00102"></a>00102 <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span>
-<a name="l00103"></a>00103 <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span>
-<a name="l00104"></a>00104 <span class="comment">    in an ASCII file.</span>
-<a name="l00105"></a>00105 <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span>
-<a name="l00106"></a>00106 <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span>
-<a name="l00107"></a>00107 <span class="comment">    original frame</span>
-<a name="l00108"></a>00108 <span class="comment"></span>
-<a name="l00109"></a>00109 <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span>
-<a name="l00110"></a>00110 <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span>
-<a name="l00111"></a>00111 <span class="comment">    2) By using a Boltzmann or a linear slope function</span>
-<a name="l00112"></a>00112 <span class="comment"></span>
-<a name="l00113"></a>00113 <span class="comment">  Slit method:</span>
-<a name="l00114"></a>00114 <span class="comment"></span>
-<a name="l00115"></a>00115 <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span>
-<a name="l00116"></a>00116 <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span>
-<a name="l00117"></a>00117 <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span>
-<a name="l00118"></a>00118 <span class="comment">  calibration map input is an emission line frame and a line list</span>
-<a name="l00119"></a>00119 <span class="comment"></span>
-<a name="l00120"></a>00120 <span class="comment">  o Does the same as other method but smoothes the found polynomial </span>
-<a name="l00121"></a>00121 <span class="comment">    coefficients within each slitlet and not over the whole frame.</span>
-<a name="l00122"></a>00122 <span class="comment"></span>
-<a name="l00123"></a>00123 <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span>
-<a name="l00124"></a>00124 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 <span class="keywordtype">int</span> 
-<a name="l00126"></a>00126 sinfo_new_wave_cal_slit2 (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00127"></a>00127                           cpl_parameterlist* config, 
-<a name="l00128"></a>00128                           cpl_frameset* sof,cpl_frameset* ref_set) ;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="preprocessor">#endif </span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span>
-<a name="l00133"></a>00133 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_new_wave_cal_slit2.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_NEW_WAVE_CAL_SLIT2_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NEW_WAVE_CAL_SLIT2_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/****************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_new_wave_cal_slit2.h,v 1.7 2007/09/21 14:13:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* amodigli  17/09/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_new_wave_cal_slit2.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">   Function     :       sinfo_new_wave_cal_slit2()</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">   In           :       ini_file: file name of according .ini file</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">   Out          :       integer (0 if it worked, -1 if it doesn't) </span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">   Job          :</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"></span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  Normal method:</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"></span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">  produces an array of the bcoefs and of the fit parameters if wished and a </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">  wavelength calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"></span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">  o searching for lines by cross sinfo_correlation with a line list</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">  o Gaussian fitting of emission lines in each column->positions of the lines-></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">    resulting fit parameters can be stored in an ASCII file</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">  o Fitting of a polynomial to the line positions for each column</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">  o Smoothing: fitting of each polynomial coefficient by another polynomial</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">    across the whole frame -> resulting polynomial coefficients can be stored </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">    in an ASCII file.</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">  o Wavelength calibration map (micron value for each frame pixel) can be</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">    produced by using these coefficients and a cross sinfo_correlation to the</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">    original frame</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment"></span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">  o The slitlet sinfo_edge positions can be fitted:</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">    1) Automatically (not really stable) or by using guess sinfo_edge positions</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">    2) By using a Boltzmann or a linear slope function</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment"></span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">  Slit method:</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment"></span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">  does the wavelength calibration and the fitting of the slitlet sinfo_edge </span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">  positions (ASCII file 32 x 2 values) if wished produces a list of the fit </span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">  parameters and of the smoothed coefficients if wished and a wavelength </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">  calibration map input is an emission line frame and a line list</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment"></span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">  o Does the same as other method but smoothes the found polynomial </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">    coefficients within each slitlet and not over the whole frame.</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment"></span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">  o Produces always a wavelength calibration map and does not crosscorrelate.</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> sinfo_new_wave_cal_slit2 (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                           cpl_parameterlist* config, </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                           cpl_frameset* sof,cpl_frameset* ref_set) ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__north__south__test__config_8c_source.html b/html/sinfo__north__south__test__config_8c_source.html
index 711fa43..bb00238 100644
--- a/html/sinfo__north__south__test__config_8c_source.html
+++ b/html/sinfo__north__south__test__config_8c_source.html
@@ -2,163 +2,194 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_north_south_test_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_north_south_test_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_north_south_test_config.c,v 1.5 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   North_South_Test Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_north_south_test_config.h"</span>
-<a name="l00049"></a>00049 <span class="keywordtype">void</span>
-<a name="l00050"></a>00050  sinfo_north_south_test_config_add(cpl_parameterlist *list)
-<a name="l00051"></a>00051 {
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   cpl_parameter *p;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   <span class="keywordflow">if</span> (!list) {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span>;
-<a name="l00057"></a>00057   }
-<a name="l00058"></a>00058   <span class="comment">/* Clean Mean */</span>
-<a name="l00059"></a>00059   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.north_south_test.low_rejection"</span>,
-<a name="l00060"></a>00060                   CPL_TYPE_DOUBLE,
-<a name="l00061"></a>00061                               <span class="stringliteral">"lower rejection: "</span>
-<a name="l00062"></a>00062                               <span class="stringliteral">"percentage of rejected low intensity pixels "</span>
-<a name="l00063"></a>00063                               <span class="stringliteral">"before averaging"</span>,
-<a name="l00064"></a>00064                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00065"></a>00065                                0.1,0.0,1.0);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-lo_rej"</span>);
-<a name="l00068"></a>00068   cpl_parameterlist_append(list, p);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.north_south_test.high_rejection"</span>,
-<a name="l00071"></a>00071                   CPL_TYPE_DOUBLE,
-<a name="l00072"></a>00072                               <span class="stringliteral">"higher rejection: "</span>
-<a name="l00073"></a>00073                               <span class="stringliteral">"percentage of rejected high intensity pixels "</span>
-<a name="l00074"></a>00074                               <span class="stringliteral">"before averaging"</span>,
-<a name="l00075"></a>00075                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00076"></a>00076                               0.1,0.0,1.0);
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hi_rej"</span>);
-<a name="l00079"></a>00079   cpl_parameterlist_append(list, p);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.mask_ind"</span>,
-<a name="l00083"></a>00083                   CPL_TYPE_BOOL,
-<a name="l00084"></a>00084                               <span class="stringliteral">"Mask Index: "</span>
-<a name="l00085"></a>00085                              <span class="stringliteral">"indicator if a bad pixel mask is applied or not"</span>,
-<a name="l00086"></a>00086                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00087"></a>00087                               FALSE);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-mask_ind"</span>);
-<a name="l00090"></a>00090   cpl_parameterlist_append(list, p);
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094   <span class="comment">/* Gauss Convolution */</span>
-<a name="l00095"></a>00095   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.gauss_ind"</span>,
-<a name="l00096"></a>00096                   CPL_TYPE_BOOL,
-<a name="l00097"></a>00097                               <span class="stringliteral">"Gauss Index: "</span>,
-<a name="l00098"></a>00098                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00099"></a>00099                               FALSE);
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-gauss_ind"</span>);
-<a name="l00102"></a>00102   cpl_parameterlist_append(list, p);
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.kernel_half_width"</span>,
-<a name="l00105"></a>00105                   CPL_TYPE_INT,
-<a name="l00106"></a>00106                               <span class="stringliteral">"Kernel Half Width "</span>
-<a name="l00107"></a>00107                               <span class="stringliteral">"kernel half width of the Gaussian "</span>
-<a name="l00108"></a>00108                               <span class="stringliteral">"response function"</span>,
-<a name="l00109"></a>00109                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00110"></a>00110                                2);
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ns-khw"</span>);
-<a name="l00113"></a>00113   cpl_parameterlist_append(list, p);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   <span class="comment">/* North South Test */</span>
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.half_width"</span>,
-<a name="l00121"></a>00121                   CPL_TYPE_INT,
-<a name="l00122"></a>00122                               <span class="stringliteral">"Half Width"</span>,
-<a name="l00123"></a>00123                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00124"></a>00124                                4);
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hw"</span>);
-<a name="l00127"></a>00127   cpl_parameterlist_append(list, p);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>,
-<a name="l00130"></a>00130                   CPL_TYPE_DOUBLE,
-<a name="l00131"></a>00131                               <span class="stringliteral">"FWHM"</span>,
-<a name="l00132"></a>00132                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00133"></a>00133                                2.);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-fwhm"</span>);
-<a name="l00136"></a>00136   cpl_parameterlist_append(list, p);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>,
-<a name="l00140"></a>00140                   CPL_TYPE_DOUBLE,
-<a name="l00141"></a>00141                               <span class="stringliteral">"Minimum of Difference"</span>,
-<a name="l00142"></a>00142                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00143"></a>00143                               1.);
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-min_diff"</span>);
-<a name="l00146"></a>00146   cpl_parameterlist_append(list, p);
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.dev_tol"</span>,
-<a name="l00151"></a>00151                   CPL_TYPE_DOUBLE,
-<a name="l00152"></a>00152                               <span class="stringliteral">"Dev Tol"</span>,
-<a name="l00153"></a>00153                               <span class="stringliteral">"sinfoni.north_south_test"</span>,
-<a name="l00154"></a>00154                               20.);
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-dev_tol"</span>);
-<a name="l00158"></a>00158   cpl_parameterlist_append(list, p);
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_north_south_test_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_north_south_test_config.c,v 1.5 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   North_South_Test Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_north_south_test_config.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  sinfo_north_south_test_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="comment">/* Clean Mean */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.north_south_test.low_rejection"</span>,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                               <span class="stringliteral">"lower rejection: "</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                               <span class="stringliteral">"percentage of rejected low intensity pixels "</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                               <span class="stringliteral">"before averaging"</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                                0.1,0.0,1.0);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-lo_rej"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.north_south_test.high_rejection"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"higher rejection: "</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"percentage of rejected high intensity pixels "</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"before averaging"</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hi_rej"</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.mask_ind"</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"Mask Index: "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                              <span class="stringliteral">"indicator if a bad pixel mask is applied or not"</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               FALSE);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-mask_ind"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="comment">/* Gauss Convolution */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.gauss_ind"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               <span class="stringliteral">"Gauss Index: "</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                               FALSE);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-gauss_ind"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.kernel_half_width"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                               <span class="stringliteral">"Kernel Half Width "</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                               <span class="stringliteral">"kernel half width of the Gaussian "</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                               <span class="stringliteral">"response function"</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                2);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ns-khw"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="comment">/* North South Test */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.half_width"</span>,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               <span class="stringliteral">"Half Width"</span>,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                                4);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-hw"</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                               <span class="stringliteral">"FWHM"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                                2.);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-fwhm"</span>);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                               <span class="stringliteral">"Minimum of Difference"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               1.);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-min_diff"</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.north_south_test.dev_tol"</span>,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                               <span class="stringliteral">"Dev Tol"</span>,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                               <span class="stringliteral">"sinfoni.north_south_test"</span>,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                               20.);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"ns-dev_tol"</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__north__south__test__config_8h_source.html b/html/sinfo__north__south__test__config_8h_source.html
index 61d343a..fcfcd2d 100644
--- a/html/sinfo__north__south__test__config_8h_source.html
+++ b/html/sinfo__north__south__test__config_8h_source.html
@@ -2,49 +2,80 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_north_south_test_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_north_south_test_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_north_south_test_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   North_South_Test Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keywordtype">void</span>
-<a name="l00033"></a>00033 sinfo_north_south_test_config_add(cpl_parameterlist *list);
-<a name="l00034"></a>00034 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_north_south_test_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_north_south_test_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   North_South_Test Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> sinfo_north_south_test_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ns__cfg_8c_source.html b/html/sinfo__ns__cfg_8c_source.html
index 1679634..7443ba8 100644
--- a/html/sinfo__ns__cfg_8c_source.html
+++ b/html/sinfo__ns__cfg_8c_source.html
@@ -2,89 +2,120 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ns_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ns_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_ns_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author     :       Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    November 2001</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    configuration handling tools for the north-south test</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_ns_cfg.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                              Function codes</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">   Function :   sinfo_ns_cfg_create()</span>
-<a name="l00050"></a>00050 <span class="comment">   In       :   void</span>
-<a name="l00051"></a>00051 <span class="comment">   Out      :   pointer to allocated base ns_config structure</span>
-<a name="l00052"></a>00052 <span class="comment">   Job      :   allocate memory for a ns_config struct</span>
-<a name="l00053"></a>00053 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 ns_config * sinfo_ns_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(ns_config));
-<a name="l00059"></a>00059 }
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">   Function :   sinfo_ns_cfg_destroy()</span>
-<a name="l00064"></a>00064 <span class="comment">   In       :   ns_config to deallocate</span>
-<a name="l00065"></a>00065 <span class="comment">   Out      :   void</span>
-<a name="l00066"></a>00066 <span class="comment">   Job      :   deallocate all memory associated with a ns_config data structure</span>
-<a name="l00067"></a>00067 <span class="comment">   Notice   :   </span>
-<a name="l00068"></a>00068 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="keywordtype">void</span> sinfo_ns_cfg_destroy(ns_config * nc)
-<a name="l00071"></a>00071 {
-<a name="l00072"></a>00072     <span class="keywordflow">if</span> (nc==NULL) return ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     <span class="comment">/*cpl_free(nc->frametype);*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076     <span class="comment">/* Free main struct */</span>
-<a name="l00077"></a>00077     cpl_free(nc);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     return ;
-<a name="l00080"></a>00080 }
-<a name="l00081"></a>00081 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ns_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_ns_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author     :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    November 2001</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    configuration handling tools for the north-south test</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_ns_cfg.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   Function :   sinfo_ns_cfg_create()</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   Out      :   pointer to allocated base ns_config structure</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   Job      :   allocate memory for a ns_config struct</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> ns_config * sinfo_ns_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(ns_config));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   Function :   sinfo_ns_cfg_destroy()</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   In       :   ns_config to deallocate</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   Job      :   deallocate all memory associated with a ns_config data structure</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">void</span> sinfo_ns_cfg_destroy(ns_config * nc)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordflow">if</span> (nc==NULL) return ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="comment">/*cpl_free(nc->frametype);*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     cpl_free(nc);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     return ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ns__cfg_8h_source.html b/html/sinfo__ns__cfg_8h_source.html
index f23aa40..434cb12 100644
--- a/html/sinfo__ns__cfg_8h_source.html
+++ b/html/sinfo__ns__cfg_8h_source.html
@@ -2,119 +2,150 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ns_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ns_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_ns_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    November 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    ns_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_NS_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_CFG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                   Defines</span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                   New types</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="comment">/*</span>
-<a name="l00042"></a>00042 <span class="comment">  data cube creation blackboard container</span>
-<a name="l00043"></a>00043 <span class="comment"></span>
-<a name="l00044"></a>00044 <span class="comment">  This structure holds all information related to the cube creation</span>
-<a name="l00045"></a>00045 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00046"></a>00046 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00047"></a>00047 <span class="comment">  the blackboard.</span>
-<a name="l00048"></a>00048 <span class="comment">  */</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">typedef</span> <span class="keyword">struct </span>ns_config {
-<a name="l00051"></a>00051 <span class="comment">/*-------General---------*/</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> inList[FILE_NAME_SZ] ;  <span class="comment">/* name of the input file list </span>
-<a name="l00053"></a>00053 <span class="comment">                                        containing the on and off-frames */</span> 
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of the ASCII list </span>
-<a name="l00055"></a>00055 <span class="comment">                                        containing the determined distances */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00057"></a>00057         <span class="keywordtype">int</span>  *  frametype ; <span class="comment">/* list of frame types on or off */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>     nframes ;   <span class="comment">/* number of frames in frame list */</span>
-<a name="l00059"></a>00059         <span class="keywordtype">int</span>     nobj ;      <span class="comment">/* number of object frames in frame list */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">int</span>     noff ;      <span class="comment">/* number of off frames in frame list */</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*------ CleanMean ------*/</span>
-<a name="l00063"></a>00063         <span class="comment">/* percentage of rejected low intensity pixels */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> loReject ;
-<a name="l00065"></a>00065         <span class="comment">/* percentage of rejected high intensity pixels */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">float</span> hiReject ;
-<a name="l00067"></a>00067         <span class="comment">/* indicator if a bad pixel mask is applied or not */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">int</span> maskInd ;
-<a name="l00069"></a>00069         <span class="comment">/* file name of the bad pixel mask fits file */</span>
-<a name="l00070"></a>00070         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;
-<a name="l00071"></a>00071 <span class="comment">/*------ GaussConvolution ------*/</span>
-<a name="l00072"></a>00072         <span class="comment">/* indicator if Gaussian convolution is applied or not */</span>
-<a name="l00073"></a>00073         <span class="keywordtype">int</span> gaussInd ;
-<a name="l00074"></a>00074         <span class="comment">/* kernel half width of the Gaussian response function */</span>
-<a name="l00075"></a>00075         <span class="keywordtype">int</span> hw ;
-<a name="l00076"></a>00076 <span class="comment">/*------ NorthSouthTest ------*/</span>
-<a name="l00077"></a>00077         <span class="comment">/* name of the averaged output fits frame */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">char</span> fitsname[FILE_NAME_SZ] ;      
-<a name="l00079"></a>00079         <span class="comment">/* number of slitlets */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">int</span> nslits ;      
-<a name="l00081"></a>00081         <span class="comment">/* pixel half width of a box within which the spatial profile </span>
-<a name="l00082"></a>00082 <span class="comment">           is fitted by a Gaussian */</span>
-<a name="l00083"></a>00083         <span class="keywordtype">int</span> halfWidth ;
-<a name="l00084"></a>00084         <span class="comment">/* first guess of the fwhm of the Gaussian fit function */</span>
-<a name="l00085"></a>00085         <span class="keywordtype">float</span> fwhm ;
-<a name="l00086"></a>00086         <span class="comment">/* minimum amplitude above which the fit is carried out */</span>
-<a name="l00087"></a>00087         <span class="keywordtype">float</span> minDiff ;
-<a name="l00088"></a>00088         <span class="comment">/* estimated average distance of spectra */</span>
-<a name="l00089"></a>00089         <span class="keywordtype">float</span> estimated_dist ;
-<a name="l00090"></a>00090         <span class="comment">/* maximal pixel tolerance of the slitlet distances */</span>
-<a name="l00091"></a>00091         <span class="keywordtype">float</span> devtol ;
-<a name="l00092"></a>00092 } ns_config ;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00097"></a>00097 <span class="comment">                               Function prototypes</span>
-<a name="l00098"></a>00098 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00106"></a>00106 ns_config * 
-<a name="l00107"></a>00107 sinfo_ns_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00115"></a>00115 <span class="keywordtype">void</span> 
-<a name="l00116"></a>00116 sinfo_ns_cfg_destroy(ns_config * nc);
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ns_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_ns_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    November 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    ns_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_NS_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_CFG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  data cube creation blackboard container</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  This structure holds all information related to the cube creation</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>ns_config {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> inList[FILE_NAME_SZ] ;  <span class="comment">/* name of the input file list </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                        containing the on and off-frames */</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of the ASCII list </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                        containing the determined distances */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">int</span>  *  frametype ; <span class="comment">/* list of frame types on or off */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>     nframes ;   <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">int</span>     nobj ;      <span class="comment">/* number of object frames in frame list */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">int</span>     noff ;      <span class="comment">/* number of off frames in frame list */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*------ CleanMean ------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* percentage of rejected low intensity pixels */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* percentage of rejected high intensity pixels */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* indicator if a bad pixel mask is applied or not */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">int</span> maskInd ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="comment">/* file name of the bad pixel mask fits file */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*------ GaussConvolution ------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="comment">/* indicator if Gaussian convolution is applied or not */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">int</span> gaussInd ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="comment">/* kernel half width of the Gaussian response function */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">int</span> hw ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*------ NorthSouthTest ------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/* name of the averaged output fits frame */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">char</span> fitsname[FILE_NAME_SZ] ;      </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* number of slitlets */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">int</span> nslits ;      </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* pixel half width of a box within which the spatial profile </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">           is fitted by a Gaussian */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordtype">int</span> halfWidth ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="comment">/* first guess of the fwhm of the Gaussian fit function */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">float</span> fwhm ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="comment">/* minimum amplitude above which the fit is carried out */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">float</span> minDiff ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="comment">/* estimated average distance of spectra */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">float</span> estimated_dist ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="comment">/* maximal pixel tolerance of the slitlet distances */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordtype">float</span> devtol ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> } ns_config ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> ns_config * </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> sinfo_ns_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> sinfo_ns_cfg_destroy(ns_config * nc);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ns__ini_8h_source.html b/html/sinfo__ns__ini_8h_source.html
index 99eaae5..51934c8 100644
--- a/html/sinfo__ns__ini_8h_source.html
+++ b/html/sinfo__ns__ini_8h_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ns_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ns_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_ns_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Nov 29, 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for the north-south-test, that means</span>
-<a name="l00025"></a>00025 <span class="comment">                        the determination of the distances of the slitlets to </span>
-<a name="l00026"></a>00026 <span class="comment">                        each other.</span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_NS_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_INI_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_ns_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Defines</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span>
-<a name="l00040"></a>00040 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                             Function prototypes </span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="keywordtype">int</span> generateNS_ini_file(
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> * ini_name,
-<a name="l00059"></a>00059         <span class="keywordtype">char</span> * name_i,
-<a name="l00060"></a>00060         <span class="keywordtype">char</span> * name_o
-<a name="l00061"></a>00061 );
-<a name="l00062"></a>00062 
-<a name="l00074"></a>00074 ns_config * parse_ns_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ns_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_ns_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Nov 29, 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for the north-south-test, that means</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        the determination of the distances of the slitlets to </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        each other.</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_NS_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_INI_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_ns_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">int</span> generateNS_ini_file(</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> );</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> ns_config * parse_ns_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ns__ini__by__cpl_8c_source.html b/html/sinfo__ns__ini__by__cpl_8c_source.html
index 8dc16cd..6df9b1b 100644
--- a/html/sinfo__ns__ini__by__cpl_8c_source.html
+++ b/html/sinfo__ns__ini__by__cpl_8c_source.html
@@ -2,359 +2,390 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ns_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ns_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_ns_ini_by_cpl.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   May 19, 2003</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   cpl input handling for the north-south test</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include <string.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_ns_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                    Functions private to this module</span>
-<a name="l00047"></a>00047 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="keywordtype">void</span> sinfo_ns_free_alloc(ns_config * cfg);
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00050"></a>00050 parse_section_frames (ns_config *,cpl_parameterlist* cpl_cfg,cpl_frameset* sof,
-<a name="l00051"></a>00051                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00053"></a>00053 parse_section_cleanmean (ns_config *,cpl_parameterlist* cpl_cfg);
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00055"></a>00055 parse_section_gaussconvolution (ns_config *,cpl_parameterlist* cpl_cfg);
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00057"></a>00057 parse_section_northsouthtest(ns_config *,cpl_parameterlist* cpl_cfg);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00069"></a>00069 <span class="comment">/* removed generateNS_ini_file */</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 ns_config * 
-<a name="l00085"></a>00085 sinfo_parse_cpl_input_ns(cpl_parameterlist * cpl_cfg, cpl_frameset* sof, 
-<a name="l00086"></a>00086                    cpl_frameset** raw)
-<a name="l00087"></a>00087 {
-<a name="l00088"></a>00088         ns_config   *         cfg = sinfo_ns_cfg_create();
-<a name="l00089"></a>00089         <span class="keywordtype">int</span> status=0;
-<a name="l00090"></a>00090         <span class="comment">/*</span>
-<a name="l00091"></a>00091 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00092"></a>00092 <span class="comment">         * found in the ini file</span>
-<a name="l00093"></a>00093 <span class="comment">         */</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095         parse_section_cleanmean        (cfg,cpl_cfg);
-<a name="l00096"></a>00096         parse_section_gaussconvolution (cfg,cpl_cfg);
-<a name="l00097"></a>00097         parse_section_northsouthtest   (cfg,cpl_cfg);
-<a name="l00098"></a>00098         parse_section_frames           (cfg,cpl_cfg,sof,raw,&status);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00101"></a>00101                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00102"></a>00102                 sinfo_ns_cfg_destroy(cfg);
-<a name="l00103"></a>00103                 cfg = NULL ;
-<a name="l00104"></a>00104                 <span class="keywordflow">return</span> NULL ;
-<a name="l00105"></a>00105         }
-<a name="l00106"></a>00106         <span class="keywordflow">return</span> cfg ;
-<a name="l00107"></a>00107 }
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00113"></a>00113 parse_section_frames(ns_config * cfg,
-<a name="l00114"></a>00114              cpl_parameterlist * cpl_cfg,
-<a name="l00115"></a>00115              cpl_frameset * sof,
-<a name="l00116"></a>00116              cpl_frameset ** raw,
-<a name="l00117"></a>00117                      <span class="keywordtype">int</span>* status)
-<a name="l00118"></a>00118 {
-<a name="l00119"></a>00119    <span class="keywordtype">int</span>                     i;
-<a name="l00120"></a>00120    <span class="keywordtype">int</span>                     nobj ;
-<a name="l00121"></a>00121    <span class="keywordtype">int</span>                     noff ;
-<a name="l00122"></a>00122     <span class="keywordtype">int</span> nraw=0;
-<a name="l00123"></a>00123    <span class="keywordtype">char</span>* tag;
-<a name="l00124"></a>00124    cpl_frame* frame   = NULL;
-<a name="l00125"></a>00125    cpl_parameter *p;   
-<a name="l00126"></a>00126   <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00127"></a>00127    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00128"></a>00128    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00129"></a>00129    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00130"></a>00130    nstpar* nstp=sinfo_nstpar_new();
-<a name="l00131"></a>00131   
-<a name="l00132"></a>00132    sinfo_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00133"></a>00133   
-<a name="l00134"></a>00134    nraw    = cpl_frameset_get_size(*raw);
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="keywordflow">if</span>(nraw == 0) {
-<a name="l00137"></a>00137      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No input raw frames"</span>);
-<a name="l00138"></a>00138      sinfo_nstpar_delete(nstp);
-<a name="l00139"></a>00139      (*status)++;
-<a name="l00140"></a>00140      <span class="keywordflow">return</span>;
-<a name="l00141"></a>00141    }
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00144"></a>00144    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00145"></a>00145    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     
-<a name="l00149"></a>00149    <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00150"></a>00150    i=0 ;
-<a name="l00151"></a>00151    nobj = 0 ;
-<a name="l00152"></a>00152    noff = 0 ;
-<a name="l00153"></a>00153    
-<a name="l00154"></a>00154    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00155"></a>00155       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00156"></a>00156       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) 
-<a name="l00157"></a>00157     {
-<a name="l00158"></a>00158       <span class="comment">/* to go on the file must exist */</span>
-<a name="l00159"></a>00159        tag=(<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l00160"></a>00160       <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l00161"></a>00161         <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> 
-<a name="l00162"></a>00162             <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0)) 
-<a name="l00163"></a>00163           {
-<a name="l00164"></a>00164             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00165"></a>00165             cfg->frametype[i] = FRAME_OFF ;
-<a name="l00166"></a>00166             noff++;
-<a name="l00167"></a>00167           }
-<a name="l00168"></a>00168             <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_is_sky_flat(tag))
-<a name="l00169"></a>00169           {
-<a name="l00170"></a>00170             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00171"></a>00171             cfg->frametype[i] = FRAME_OFF ;
-<a name="l00172"></a>00172             noff++;
-<a name="l00173"></a>00173           }
-<a name="l00174"></a>00174             <span class="keywordflow">else</span> <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 1)) 
-<a name="l00175"></a>00175           {
-<a name="l00176"></a>00176             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00177"></a>00177             cfg->frametype[i] = FRAME_ON ;
-<a name="l00178"></a>00178             nobj++;
-<a name="l00179"></a>00179           }
-<a name="l00180"></a>00180             <span class="keywordflow">else</span>  
-<a name="l00181"></a>00181               {
-<a name="l00182"></a>00182           <span class="comment">/* without label the frame is assumed on */</span>
-<a name="l00183"></a>00183           cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00184"></a>00184           cfg->frametype[i] = FRAME_ON ;
-<a name="l00185"></a>00185           nobj++;
-<a name="l00186"></a>00186         }
-<a name="l00187"></a>00187       }
-<a name="l00188"></a>00188         <span class="keywordflow">else</span> 
-<a name="l00189"></a>00189       {
-<a name="l00190"></a>00190         <span class="comment">/* without label the frame is assumed on */</span>
-<a name="l00191"></a>00191           cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00192"></a>00192           cfg->frametype[i] = FRAME_ON ;
-<a name="l00193"></a>00193           nobj++;
-<a name="l00194"></a>00194       }
-<a name="l00195"></a>00195        <span class="comment">/* Store file name into framelist */</span>
-<a name="l00196"></a>00196     }
-<a name="l00197"></a>00197       <span class="keywordflow">else</span> {
-<a name="l00198"></a>00198       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"file %s does not exist"</span>,
-<a name="l00199"></a>00199           cpl_frame_get_filename(frame));
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201         
-<a name="l00202"></a>00202     }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205    <span class="keywordflow">if</span>((noff == 0) && (nobj == 0)) {
-<a name="l00206"></a>00206      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong input frames"</span>);
-<a name="l00207"></a>00207      sinfo_nstpar_delete(nstp);
-<a name="l00208"></a>00208      sinfo_ns_free_alloc(cfg);
-<a name="l00209"></a>00209      (*status)++;
-<a name="l00210"></a>00210      <span class="keywordflow">return</span>;
-<a name="l00211"></a>00211    }
-<a name="l00212"></a>00212    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00213"></a>00213    cfg->nframes         = nraw ;
-<a name="l00214"></a>00214    cfg->nobj            = nobj ;
-<a name="l00215"></a>00215    cfg->noff            = noff ;
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217    strcpy(cfg -> outName, NS_TEST_DISTANCES_OUT_FILENAME);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00221"></a>00221    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00222"></a>00222  
-<a name="l00223"></a>00223    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00224"></a>00224      {
-<a name="l00225"></a>00225    <span class="keywordflow">case</span> 0: 
-<a name="l00226"></a>00226       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00227"></a>00227       <span class="keywordflow">break</span>;
-<a name="l00228"></a>00228     <span class="keywordflow">case</span> 1: 
-<a name="l00229"></a>00229       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00230"></a>00230       <span class="keywordflow">break</span>;
-<a name="l00231"></a>00231     <span class="keywordflow">case</span> -1:
-<a name="l00232"></a>00232       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00233"></a>00233       <span class="keywordflow">break</span>;
-<a name="l00234"></a>00234     <span class="keywordflow">default</span>: 
-<a name="l00235"></a>00235       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00236"></a>00236       <span class="keywordflow">break</span>;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239      }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241    sinfo_get_band(frame,band);
-<a name="l00242"></a>00242    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,
-<a name="l00243"></a>00243                      spat_res,    lamp_status,    band);
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246    sinfo_get_ins_set(band,&ins_set);
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>);
-<a name="l00250"></a>00250    <span class="keywordflow">if</span>(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {
-<a name="l00251"></a>00251      cfg -> fwhm = cpl_parameter_get_double(p);
-<a name="l00252"></a>00252    } <span class="keywordflow">else</span> {
-<a name="l00253"></a>00253      cfg -> fwhm = nstp->fwhm[ins_set];
-<a name="l00254"></a>00254    }
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>);
-<a name="l00257"></a>00257    <span class="keywordflow">if</span>(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {
-<a name="l00258"></a>00258      cfg -> minDiff = cpl_parameter_get_double(p);
-<a name="l00259"></a>00259    } <span class="keywordflow">else</span> {
-<a name="l00260"></a>00260      cfg -> minDiff = nstp->min_dif[ins_set];
-<a name="l00261"></a>00261    }
-<a name="l00262"></a>00262     sinfo_nstpar_delete(nstp);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265    <span class="keywordflow">if</span>(cfg -> maskInd) {
-<a name="l00266"></a>00266       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {
-<a name="l00267"></a>00267          frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);
-<a name="l00268"></a>00268          strcpy(cfg -> mask,cpl_frame_get_filename(frame));
-<a name="l00269"></a>00269       } <span class="keywordflow">else</span> {
-<a name="l00270"></a>00270          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_BP_MAP_DI);
-<a name="l00271"></a>00271          sinfo_ns_free_alloc(cfg);
-<a name="l00272"></a>00272          (*status)++;
-<a name="l00273"></a>00273          <span class="keywordflow">return</span>;
-<a name="l00274"></a>00274       }
-<a name="l00275"></a>00275    }
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277  
-<a name="l00278"></a>00278      return ;
-<a name="l00279"></a>00279 }
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00282"></a>00282 parse_section_cleanmean(ns_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00283"></a>00283 {
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285    cpl_parameter *p;                  
-<a name="l00286"></a>00286    p = cpl_parameterlist_find(cpl_cfg, 
-<a name="l00287"></a>00287                              <span class="stringliteral">"sinfoni.north_south_test.low_rejection"</span>);
-<a name="l00288"></a>00288    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290    p = cpl_parameterlist_find(cpl_cfg, 
-<a name="l00291"></a>00291                               <span class="stringliteral">"sinfoni.north_south_test.high_rejection"</span>);
-<a name="l00292"></a>00292    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.mask_ind"</span>);
-<a name="l00295"></a>00295    cfg -> maskInd = cpl_parameter_get_bool(p);
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297    return ;
-<a name="l00298"></a>00298 }
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00301"></a>00301 parse_section_gaussconvolution(ns_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00302"></a>00302 {
-<a name="l00303"></a>00303    cpl_parameter *p;     
-<a name="l00304"></a>00304    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.gauss_ind"</span>);
-<a name="l00305"></a>00305    cfg -> gaussInd = cpl_parameter_get_bool(p);
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307    p = cpl_parameterlist_find(cpl_cfg, 
-<a name="l00308"></a>00308                               <span class="stringliteral">"sinfoni.north_south_test.kernel_half_width"</span>);
-<a name="l00309"></a>00309    cfg -> hw = cpl_parameter_get_int(p);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311 }
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00314"></a>00314 parse_section_northsouthtest(ns_config  * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00315"></a>00315 {
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317    cpl_parameter *p;     
-<a name="l00318"></a>00318    strcat(cfg -> fitsname, NS_TEST_OUT_FILENAME);
-<a name="l00319"></a>00319    cfg -> nslits = NSLITLETS;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.half_width"</span>);
-<a name="l00322"></a>00322    cfg -> halfWidth = cpl_parameter_get_int(p);
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>);
-<a name="l00325"></a>00325    cfg -> fwhm = cpl_parameter_get_double(p);
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>);
-<a name="l00328"></a>00328    cfg -> minDiff = cpl_parameter_get_double(p);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330    cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.dev_tol"</span>);
-<a name="l00333"></a>00333    cfg -> devtol = cpl_parameter_get_double(p);
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335    return ;
-<a name="l00336"></a>00336 }
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 <span class="keywordtype">void</span>
-<a name="l00339"></a>00339 sinfo_ns_free(ns_config ** cfg)
-<a name="l00340"></a>00340 {  
-<a name="l00341"></a>00341   <span class="keywordflow">if</span>(*cfg!=NULL) { 
-<a name="l00342"></a>00342     sinfo_ns_free_alloc(*cfg);
-<a name="l00343"></a>00343     sinfo_ns_cfg_destroy(*cfg);
-<a name="l00344"></a>00344     *cfg=NULL;
-<a name="l00345"></a>00345   } 
-<a name="l00346"></a>00346   <span class="keywordflow">return</span>;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 }
-<a name="l00349"></a>00349 <span class="keywordtype">void</span>
-<a name="l00350"></a>00350 sinfo_ns_free_alloc(ns_config * cfg)
-<a name="l00351"></a>00351 {
-<a name="l00352"></a>00352     <span class="keywordflow">if</span>(cfg->framelist != NULL) {
-<a name="l00353"></a>00353       cpl_free(cfg->framelist);
-<a name="l00354"></a>00354       cfg->framelist=NULL;
-<a name="l00355"></a>00355     }
-<a name="l00356"></a>00356     <span class="keywordflow">if</span>(cfg->frametype != NULL) {
-<a name="l00357"></a>00357       cpl_free(cfg->frametype);
-<a name="l00358"></a>00358       cfg->frametype=NULL;
-<a name="l00359"></a>00359     }
-<a name="l00360"></a>00360   
-<a name="l00361"></a>00361   <span class="keywordflow">return</span>;
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ns_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_ns_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   May 19, 2003</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   cpl input handling for the north-south test</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_ns_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">void</span> sinfo_ns_free_alloc(ns_config * cfg);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> parse_section_frames (ns_config *,cpl_parameterlist* cpl_cfg,cpl_frameset* sof,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                      cpl_frameset** raw, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> parse_section_cleanmean (ns_config *,cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> parse_section_gaussconvolution (ns_config *,cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> parse_section_northsouthtest(ns_config *,cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/* removed generateNS_ini_file */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> ns_config * </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_parse_cpl_input_ns(cpl_parameterlist * cpl_cfg, cpl_frameset* sof, </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                    cpl_frameset** raw)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         ns_config   *         cfg = sinfo_ns_cfg_create();</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         parse_section_cleanmean        (cfg,cpl_cfg);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         parse_section_gaussconvolution (cfg,cpl_cfg);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         parse_section_northsouthtest   (cfg,cpl_cfg);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         parse_section_frames           (cfg,cpl_cfg,sof,raw,&status);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                 sinfo_ns_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> parse_section_frames(ns_config * cfg,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>              cpl_parameterlist * cpl_cfg,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>              cpl_frameset * sof,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>              cpl_frameset ** raw,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>    <span class="keywordtype">int</span>                     nobj ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span>                     noff ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">char</span>* tag;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    cpl_parameter *p;   </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    nstpar* nstp=sinfo_nstpar_new();</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    sinfo_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    nraw    = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">if</span>(nraw == 0) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No input raw frames"</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>      sinfo_nstpar_delete(nstp);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>      (*status)++;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>    <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    i=0 ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    nobj = 0 ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    noff = 0 ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>    </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>        tag=(<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>             <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0)) </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>             cfg->frametype[i] = FRAME_OFF ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>             noff++;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_is_sky_flat(tag))</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             cfg->frametype[i] = FRAME_OFF ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>             noff++;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>           }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 1)) </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>           {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>             cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>             cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>             nobj++;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>           }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             <span class="keywordflow">else</span>  </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>               {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>           <span class="comment">/* without label the frame is assumed on */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>           cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>           cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>           nobj++;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         }</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="comment">/* without label the frame is assumed on */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>           cfg->framelist[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>           cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>           nobj++;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>        <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"file %s does not exist"</span>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>           cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    <span class="keywordflow">if</span>((noff == 0) && (nobj == 0)) {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong input frames"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>      sinfo_nstpar_delete(nstp);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>      sinfo_ns_free_alloc(cfg);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>      (*status)++;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    cfg->nobj            = nobj ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    cfg->noff            = noff ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    strcpy(cfg -> outName, NS_TEST_DISTANCES_OUT_FILENAME);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>  </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>      {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>      }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    <span class="keywordflow">if</span>(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>      cfg -> fwhm = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>      cfg -> fwhm = nstp->fwhm[ins_set];</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    <span class="keywordflow">if</span>(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>      cfg -> minDiff = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>      cfg -> minDiff = nstp->min_dif[ins_set];</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>    }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     sinfo_nstpar_delete(nstp);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    <span class="keywordflow">if</span>(cfg -> maskInd) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>          frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>          strcpy(cfg -> mask,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>          sinfo_ns_free_alloc(cfg);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>          (*status)++;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>  </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>      return ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> parse_section_cleanmean(ns_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>    cpl_parameter *p;                  </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    p = cpl_parameterlist_find(cpl_cfg, </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                              <span class="stringliteral">"sinfoni.north_south_test.low_rejection"</span>);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>    p = cpl_parameterlist_find(cpl_cfg, </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                               <span class="stringliteral">"sinfoni.north_south_test.high_rejection"</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.mask_ind"</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>    cfg -> maskInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>    return ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> }</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> parse_section_gaussconvolution(ns_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.gauss_ind"</span>);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    cfg -> gaussInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    p = cpl_parameterlist_find(cpl_cfg, </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                               <span class="stringliteral">"sinfoni.north_south_test.kernel_half_width"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    cfg -> hw = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> parse_section_northsouthtest(ns_config  * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>    cpl_parameter *p;     </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>    strcat(cfg -> fitsname, NS_TEST_OUT_FILENAME);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>    cfg -> nslits = NSLITLETS;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.half_width"</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    cfg -> halfWidth = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.fwhm"</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>    cfg -> fwhm = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.min_diff"</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>    cfg -> minDiff = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>    cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.north_south_test.dev_tol"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>    cfg -> devtol = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>    return ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> sinfo_ns_free(ns_config ** cfg)</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> {  </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   <span class="keywordflow">if</span>(*cfg!=NULL) { </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     sinfo_ns_free_alloc(*cfg);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     sinfo_ns_cfg_destroy(*cfg);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     *cfg=NULL;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   } </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> sinfo_ns_free_alloc(ns_config * cfg)</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="keywordflow">if</span>(cfg->framelist != NULL) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       cpl_free(cfg->framelist);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       cfg->framelist=NULL;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="keywordflow">if</span>(cfg->frametype != NULL) {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>       cpl_free(cfg->frametype);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       cfg->frametype=NULL;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ns__ini__by__cpl_8h_source.html b/html/sinfo__ns__ini__by__cpl_8h_source.html
index d1653a2..9f4b74a 100644
--- a/html/sinfo__ns__ini__by__cpl_8h_source.html
+++ b/html/sinfo__ns__ini__by__cpl_8h_source.html
@@ -2,66 +2,97 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ns_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ns_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_ns_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 19, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    parse cpl input for the north-south-test, that means</span>
-<a name="l00025"></a>00025 <span class="comment">                        the determination of the distances of the slitlets to </span>
-<a name="l00026"></a>00026 <span class="comment">                        each other.</span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_NS_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_INI_BY_CPL_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                Includes</span>
-<a name="l00032"></a>00032 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_ns_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Defines</span>
-<a name="l00038"></a>00038 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span>
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00042"></a>00042 <span class="comment">                             Function prototypes </span>
-<a name="l00043"></a>00043 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 ns_config * 
-<a name="l00059"></a>00059 sinfo_parse_cpl_input_ns(cpl_parameterlist * cpl_cfg, 
-<a name="l00060"></a>00060                          cpl_frameset* sof, 
-<a name="l00061"></a>00061              cpl_frameset** raw);
-<a name="l00068"></a>00068 <span class="keywordtype">void</span> sinfo_ns_free(ns_config ** cfg);
-<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ns_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_ns_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 19, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    parse cpl input for the north-south-test, that means</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        the determination of the distances of the slitlets to </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        each other.</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_NS_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_NS_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_ns_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> ns_config * </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> sinfo_parse_cpl_input_ns(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                          cpl_frameset* sof, </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>              cpl_frameset** raw);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">void</span> sinfo_ns_free(ns_config ** cfg);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__object__cfg_8c_source.html b/html/sinfo__object__cfg_8c_source.html
index d8ee3f1..bbd7d7b 100644
--- a/html/sinfo__object__cfg_8c_source.html
+++ b/html/sinfo__object__cfg_8c_source.html
@@ -2,90 +2,121 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_object_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_object_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :   sinfo_object_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author     :   Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :   April 2002</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :   configuration handling tools for the creation of an object</span>
-<a name="l00026"></a>00026 <span class="comment">                    data cube</span>
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_object_cfg.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                              Function codes</span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">   Function :   sinfo_object_cfg_create()</span>
-<a name="l00052"></a>00052 <span class="comment">   In       :   void</span>
-<a name="l00053"></a>00053 <span class="comment">   Out      :   pointer to allocated base object_config structure</span>
-<a name="l00054"></a>00054 <span class="comment">   Job      :   allocate memory for an object_config struct</span>
-<a name="l00055"></a>00055 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 object_config * sinfo_object_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00059"></a>00059 {
-<a name="l00060"></a>00060     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(object_config));
-<a name="l00061"></a>00061 }
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">   Function :   sinfo_object_cfg_destroy()</span>
-<a name="l00066"></a>00066 <span class="comment">   In       :   object_config to deallocate</span>
-<a name="l00067"></a>00067 <span class="comment">   Out      :   void</span>
-<a name="l00068"></a>00068 <span class="comment">   Job      :   deallocate all memory associated with an </span>
-<a name="l00069"></a>00069 <span class="comment">                object_config data structure</span>
-<a name="l00070"></a>00070 <span class="comment">   Notice   :   </span>
-<a name="l00071"></a>00071 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keywordtype">void</span> sinfo_object_cfg_destroy(object_config * cc)
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075     <span class="keywordflow">if</span> (cc==NULL) return ;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     <span class="comment">/* Free main struct */</span>
-<a name="l00078"></a>00078     cpl_free(cc);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     return ;
-<a name="l00081"></a>00081 }
-<a name="l00082"></a>00082 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_object_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :   sinfo_object_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author     :   Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :   April 2002</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :   configuration handling tools for the creation of an object</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                    data cube</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_object_cfg.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   Function :   sinfo_object_cfg_create()</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Out      :   pointer to allocated base object_config structure</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   Job      :   allocate memory for an object_config struct</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> object_config * sinfo_object_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(object_config));</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Function :   sinfo_object_cfg_destroy()</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   In       :   object_config to deallocate</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   Job      :   deallocate all memory associated with an </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                object_config data structure</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">void</span> sinfo_object_cfg_destroy(object_config * cc)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keywordflow">if</span> (cc==NULL) return ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     cpl_free(cc);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     return ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__object__cfg_8h_source.html b/html/sinfo__object__cfg_8h_source.html
index 9b53b0b..1462bb6 100644
--- a/html/sinfo__object__cfg_8h_source.html
+++ b/html/sinfo__object__cfg_8h_source.html
@@ -2,161 +2,192 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_object_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_object_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_object_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    April 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    object_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_OBJECT_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJECT_CFG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                   Includes</span>
-<a name="l00031"></a>00031 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                   Defines</span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                   New types</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="comment">/*</span>
-<a name="l00042"></a>00042 <span class="comment">  data cube creation blackboard container</span>
-<a name="l00043"></a>00043 <span class="comment"></span>
-<a name="l00044"></a>00044 <span class="comment">  This structure holds all information related to the object</span>
-<a name="l00045"></a>00045 <span class="comment">  data cube creation routine. It is used as a container for the</span>
-<a name="l00046"></a>00046 <span class="comment">  flux of ancillary data, computed values, and algorithm status.</span>
-<a name="l00047"></a>00047 <span class="comment">  Pixel flux is separated from the blackboard.</span>
-<a name="l00048"></a>00048 <span class="comment">  */</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">typedef</span> <span class="keyword">struct </span>object_config {
-<a name="l00051"></a>00051 <span class="comment">/*-------General---------*/</span>
-<a name="l00052"></a>00052    <span class="keywordtype">char</span> inFile[FILE_NAME_SZ]  ; <span class="comment">/* input file of reduced jittered</span>
-<a name="l00053"></a>00053 <span class="comment">                                        data cubes of a standard star */</span>
-<a name="l00054"></a>00054    <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* input averaged, bad pixel corrected, sky</span>
-<a name="l00055"></a>00055 <span class="comment">                               subtracted, flatfielded and interleaved</span>
-<a name="l00056"></a>00056 <span class="comment">                               jittered frame list */</span>
-<a name="l00057"></a>00057    <span class="keywordtype">char</span> wavemap[FILE_NAME_SZ] ; <span class="comment">/* input wavelength calibration map */</span>
-<a name="l00058"></a>00058    <span class="keywordtype">char</span> mflat[FILE_NAME_SZ] ;   <span class="comment">/* input master flat field  */</span>
-<a name="l00059"></a>00059    <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits</span>
-<a name="l00060"></a>00060 <span class="comment">                                        data cube(s) */</span>
-<a name="l00061"></a>00061    <span class="keywordtype">char</span> sky_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat corrected for distortion */</span>
-<a name="l00062"></a>00062    <span class="keywordtype">char</span> mflat_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat corrected for distortion */</span>
-<a name="l00063"></a>00063    <span class="keywordtype">char</span> mflat_dither_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat dithered</span>
-<a name="l00064"></a>00064 <span class="comment">                                                  corrected for distortion */</span>
-<a name="l00065"></a>00065    <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of jittered frames */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="comment">/*------ jittering ------*/</span>
-<a name="l00068"></a>00068    <span class="comment">/* jitter mode indicator: 0 for user jittering mode,</span>
-<a name="l00069"></a>00069 <span class="comment">           1 for auto jittering mode */</span>
-<a name="l00070"></a>00070    <span class="keywordtype">int</span> jitterind ;
-<a name="l00071"></a>00071    <span class="comment">/* x-pixel size of the final combined data cube */</span>
-<a name="l00072"></a>00072    <span class="keywordtype">int</span> size_x ;
-<a name="l00073"></a>00073    <span class="comment">/* y-pixel size of the final combined data cube */</span>
-<a name="l00074"></a>00074    <span class="keywordtype">int</span> size_y ;
-<a name="l00075"></a>00075    <span class="comment">/* the name of the interpolation kernel */</span>
-<a name="l00076"></a>00076    <span class="keywordtype">char</span> kernel_type[FILE_NAME_SZ] ;
-<a name="l00077"></a>00077    <span class="comment">/* the name of the final image sinfo_median of cube */</span>
-<a name="l00078"></a>00078    <span class="keywordtype">char</span> med_cube_name[FILE_NAME_SZ] ;
-<a name="l00079"></a>00079    <span class="comment">/* the name of the final mask cube */</span>
-<a name="l00080"></a>00080    <span class="keywordtype">char</span> maskname[FILE_NAME_SZ] ;
-<a name="l00081"></a>00081    <span class="comment">/* the name of the fits file with the polynom for the shift</span>
-<a name="l00082"></a>00082 <span class="comment">    * due atmospheric refraction */</span>
-<a name="l00083"></a>00083    <span class="keywordtype">char</span> polyshiftname[FILE_NAME_SZ] ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="comment">/*------ Resampling ------*/</span>
-<a name="l00086"></a>00086    <span class="comment">/* number of coefficients for the polynomial</span>
-<a name="l00087"></a>00087 <span class="comment">   interpolation (order + 1) */</span>
-<a name="l00088"></a>00088    <span class="keywordtype">int</span> ncoeffs ;
-<a name="l00089"></a>00089    <span class="comment">/* number of rows in the resulting resampled</span>
-<a name="l00090"></a>00090 <span class="comment">           image = number of spectral bins */</span>
-<a name="l00091"></a>00091    <span class="keywordtype">int</span> nrows ;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="comment">/*------ Calibration ------*/</span>
-<a name="l00094"></a>00094    <span class="comment">/* indicates if the halogen lamp feature from</span>
-<a name="l00095"></a>00095 <span class="comment">           flatfielding should be corrected for or not */</span>
-<a name="l00096"></a>00096    <span class="keywordtype">int</span> halocorrectInd ;
-<a name="l00097"></a>00097    <span class="comment">/* name of the fits file of the calibrated halogen lamp spectrum */</span>
-<a name="l00098"></a>00098    <span class="keywordtype">char</span> halospectrum[FILE_NAME_SZ] ;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="comment">/*------ CubeCreation ------*/</span>
-<a name="l00101"></a>00101    <span class="comment">/* indicates if the slitlet distances are determined</span>
-<a name="l00102"></a>00102 <span class="comment">           by a north-south test (1)</span>
-<a name="l00103"></a>00103 <span class="comment">           or slitlet edge fits (0) */</span>
-<a name="l00104"></a>00104    <span class="keywordtype">int</span> northsouthInd  ;
-<a name="l00105"></a>00105    <span class="comment">/* name of the ASCII list of the distances of the slitlets */</span>
-<a name="l00106"></a>00106    <span class="keywordtype">char</span> distlist[FILE_NAME_SZ] ;
-<a name="l00107"></a>00107    <span class="comment">/* name of the ASCII list of the fitted slitlet sinfo_edge positions */</span>
-<a name="l00108"></a>00108    <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;
-<a name="l00109"></a>00109    <span class="comment">/* number of slitlets (32) */</span>
-<a name="l00110"></a>00110    <span class="keywordtype">int</span> nslits ;
-<a name="l00111"></a>00111    <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of</span>
-<a name="l00112"></a>00112 <span class="comment">           the first slitlet needed if the slitlet distances were determined</span>
-<a name="l00113"></a>00113 <span class="comment">           by a north south test */</span>
-<a name="l00114"></a>00114    <span class="keywordtype">char</span> firstCol[FILE_NAME_SZ] ;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*------ FineTuning ------*/</span>
-<a name="l00117"></a>00117    <span class="comment">/* indicator for the shifting method to use */</span>
-<a name="l00118"></a>00118    <span class="keywordtype">char</span>  method[FILE_NAME_SZ] ;
-<a name="l00119"></a>00119    <span class="comment">/* order of polynomial if the polynomial interpolation shifting</span>
-<a name="l00120"></a>00120 <span class="comment">           method is used */</span>
-<a name="l00121"></a>00121    <span class="keywordtype">int</span> order ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="comment">/*------ SkyExtraction ------*/</span>
-<a name="l00124"></a>00124    <span class="comment">/* percentage of rejected low value pixels when averaging the</span>
-<a name="l00125"></a>00125 <span class="comment">           sky spectra */</span>
-<a name="l00126"></a>00126    <span class="keywordtype">float</span>  loReject ;
-<a name="l00127"></a>00127    <span class="comment">/* percentage of rejected high value pixels when averaging the</span>
-<a name="l00128"></a>00128 <span class="comment">           sky spectra */</span>
-<a name="l00129"></a>00129    <span class="keywordtype">float</span>  hiReject ;
-<a name="l00130"></a>00130    <span class="comment">/* pixel distance tolerance to the dividing diagonal line,</span>
-<a name="l00131"></a>00131 <span class="comment">           these pixels are not considered to be sure to get only</span>
-<a name="l00132"></a>00132 <span class="comment">           "clean" sky pixels */</span>
-<a name="l00133"></a>00133    <span class="keywordtype">int</span>    tolerance ;
-<a name="l00134"></a>00134 } object_config ;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00137"></a>00137 <span class="comment">                               Function prototypes</span>
-<a name="l00138"></a>00138 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00146"></a>00146 object_config *
-<a name="l00147"></a>00147 sinfo_object_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 
-<a name="l00156"></a>00156 <span class="keywordtype">void</span>
-<a name="l00157"></a>00157 sinfo_object_cfg_destroy(object_config * cc);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_object_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_object_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    April 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    object_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_OBJECT_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJECT_CFG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  data cube creation blackboard container</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  This structure holds all information related to the object</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  data cube creation routine. It is used as a container for the</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  flux of ancillary data, computed values, and algorithm status.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  Pixel flux is separated from the blackboard.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>object_config {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>    <span class="keywordtype">char</span> inFile[FILE_NAME_SZ]  ; <span class="comment">/* input file of reduced jittered</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                        data cubes of a standard star */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>    <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* input averaged, bad pixel corrected, sky</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                               subtracted, flatfielded and interleaved</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                               jittered frame list */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>    <span class="keywordtype">char</span> wavemap[FILE_NAME_SZ] ; <span class="comment">/* input wavelength calibration map */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>    <span class="keywordtype">char</span> mflat[FILE_NAME_SZ] ;   <span class="comment">/* input master flat field  */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>    <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">                                        data cube(s) */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>    <span class="keywordtype">char</span> sky_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat corrected for distortion */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>    <span class="keywordtype">char</span> mflat_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat corrected for distortion */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>    <span class="keywordtype">char</span> mflat_dither_dist[FILE_NAME_SZ] ; <span class="comment">/* master flat dithered</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                                                  corrected for distortion */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>    <span class="keywordtype">int</span>     nframes ; <span class="comment">/* number of jittered frames */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*------ jittering ------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>    <span class="comment">/* jitter mode indicator: 0 for user jittering mode,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">           1 for auto jittering mode */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>    <span class="keywordtype">int</span> jitterind ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>    <span class="comment">/* x-pixel size of the final combined data cube */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>    <span class="keywordtype">int</span> size_x ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>    <span class="comment">/* y-pixel size of the final combined data cube */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>    <span class="keywordtype">int</span> size_y ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>    <span class="comment">/* the name of the interpolation kernel */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>    <span class="keywordtype">char</span> kernel_type[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>    <span class="comment">/* the name of the final image sinfo_median of cube */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>    <span class="keywordtype">char</span> med_cube_name[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>    <span class="comment">/* the name of the final mask cube */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>    <span class="keywordtype">char</span> maskname[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>    <span class="comment">/* the name of the fits file with the polynom for the shift</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">    * due atmospheric refraction */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>    <span class="keywordtype">char</span> polyshiftname[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*------ Resampling ------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>    <span class="comment">/* number of coefficients for the polynomial</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">   interpolation (order + 1) */</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>    <span class="keywordtype">int</span> ncoeffs ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>    <span class="comment">/* number of rows in the resulting resampled</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">           image = number of spectral bins */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>    <span class="keywordtype">int</span> nrows ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*------ Calibration ------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>    <span class="comment">/* indicates if the halogen lamp feature from</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">           flatfielding should be corrected for or not */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>    <span class="keywordtype">int</span> halocorrectInd ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>    <span class="comment">/* name of the fits file of the calibrated halogen lamp spectrum */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    <span class="keywordtype">char</span> halospectrum[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*------ CubeCreation ------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    <span class="comment">/* indicates if the slitlet distances are determined</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">           by a north-south test (1)</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">           or slitlet edge fits (0) */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    <span class="keywordtype">int</span> northsouthInd  ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="comment">/* name of the ASCII list of the distances of the slitlets */</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>    <span class="keywordtype">char</span> distlist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>    <span class="comment">/* name of the ASCII list of the fitted slitlet sinfo_edge positions */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>    <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    <span class="comment">/* number of slitlets (32) */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    <span class="keywordtype">int</span> nslits ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>    <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">           the first slitlet needed if the slitlet distances were determined</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">           by a north south test */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    <span class="keywordtype">char</span> firstCol[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*------ FineTuning ------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>    <span class="comment">/* indicator for the shifting method to use */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="keywordtype">char</span>  method[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="comment">/* order of polynomial if the polynomial interpolation shifting</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">           method is used */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span> order ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/*------ SkyExtraction ------*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="comment">/* percentage of rejected low value pixels when averaging the</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">           sky spectra */</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">float</span>  loReject ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    <span class="comment">/* percentage of rejected high value pixels when averaging the</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">           sky spectra */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">float</span>  hiReject ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    <span class="comment">/* pixel distance tolerance to the dividing diagonal line,</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">           these pixels are not considered to be sure to get only</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">           "clean" sky pixels */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    <span class="keywordtype">int</span>    tolerance ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> } object_config ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> object_config *</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> sinfo_object_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> sinfo_object_cfg_destroy(object_config * cc);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__object__ini_8h_source.html b/html/sinfo__object__ini_8h_source.html
index 0fb5b6a..f931965 100644
--- a/html/sinfo__object__ini_8h_source.html
+++ b/html/sinfo__object__ini_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_object_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_object_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_object_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    April 03, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SPIFFIs creation of a data cube</span>
-<a name="l00025"></a>00025 <span class="comment">                        from a science object observation</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_OBJECT_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJECT_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_object_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                             Function prototypes </span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> generateObject_ini_file(
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> * ini_name,
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * name_i,
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> * name_o,
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> * name_c
-<a name="l00059"></a>00059 );
-<a name="l00060"></a>00060 
-<a name="l00072"></a>00072 object_config * 
-<a name="l00073"></a>00073 parse_object_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_object_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_object_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    April 03, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SPIFFIs creation of a data cube</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        from a science object observation</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_OBJECT_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJECT_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_object_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> generateObject_ini_file(</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> );</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> object_config * </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> parse_object_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objnod__config_8c_source.html b/html/sinfo__objnod__config_8c_source.html
index 5372694..578421c 100644
--- a/html/sinfo__objnod__config_8c_source.html
+++ b/html/sinfo__objnod__config_8c_source.html
@@ -2,413 +2,444 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objnod_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objnod_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_objnod_config.c,v 1.11 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.11 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Objnod Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_objnod_config.h"</span>
-<a name="l00048"></a>00048 <span class="keywordtype">void</span>
-<a name="l00049"></a>00049  sinfo_objnod_config_add(cpl_parameterlist *list)
-<a name="l00050"></a>00050 {
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   cpl_parameter *p;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="keywordflow">if</span> (!list) {
-<a name="l00055"></a>00055     <span class="keywordflow">return</span>;
-<a name="l00056"></a>00056   }
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   <span class="comment">/* Science */</span>
-<a name="l00062"></a>00062   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>,
-<a name="l00063"></a>00063                   CPL_TYPE_INT,
-<a name="l00064"></a>00064                               <span class="stringliteral">"Method to reduce autojitter template frames "</span>
-<a name="l00065"></a>00065                               <span class="stringliteral">"Raw frames are object only exposures. "</span>
-<a name="l00066"></a>00066                               <span class="stringliteral">"object-fake_sky pairs are generated. "</span>
-<a name="l00067"></a>00067                               <span class="stringliteral">"0: no sky for all objects "</span>,
-<a name="l00068"></a>00068                               <span class="stringliteral">"1: fake_sky is next object, "</span>
-<a name="l00069"></a>00069                               <span class="stringliteral">"2: fake_sky is sinfo_median of all objects "</span>
-<a name="l00070"></a>00070                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00071"></a>00071                                1,3,0,1,2);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-aj_method"</span>);
-<a name="l00074"></a>00074   cpl_parameterlist_append(list, p);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   <span class="comment">/* Science */</span>
-<a name="l00078"></a>00078   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.scales_sky"</span>,
-<a name="l00079"></a>00079                   CPL_TYPE_BOOL,
-<a name="l00080"></a>00080                               <span class="stringliteral">"Spatial median (sky) subtraction from cube: "</span>
-<a name="l00081"></a>00081                               <span class="stringliteral">"(If autojitter_method==1),"</span>
-<a name="l00082"></a>00082                               <span class="stringliteral">"indicates if the spatial median of each plane "</span>
-<a name="l00083"></a>00083                               <span class="stringliteral">"should be subtracted (TRUE) or not (FALSE) "</span>
-<a name="l00084"></a>00084                               <span class="stringliteral">"from each cube plane"</span>,
-<a name="l00085"></a>00085                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00086"></a>00086                               FALSE);
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-scales_sky"</span>);
-<a name="l00089"></a>00089   cpl_parameterlist_append(list, p);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093   <span class="comment">/* Science */</span>
-<a name="l00094"></a>00094   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>,
-<a name="l00095"></a>00095                   CPL_TYPE_BOOL,
-<a name="l00096"></a>00096                               <span class="stringliteral">"Kappa-sigma clipping of coadded cube: "</span>
-<a name="l00097"></a>00097                               <span class="stringliteral">"indicates if a kappa-sigma clipping "</span>
-<a name="l00098"></a>00098                               <span class="stringliteral">"should be performed (TRUE) or not (FALSE) "</span>
-<a name="l00099"></a>00099                               <span class="stringliteral">"on each plane of the coadded cube"</span>,
-<a name="l00100"></a>00100                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00101"></a>00101                               TRUE);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ks_clip"</span>);
-<a name="l00104"></a>00104   cpl_parameterlist_append(list, p);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.kappa"</span>,
-<a name="l00108"></a>00108                   CPL_TYPE_DOUBLE,
-<a name="l00109"></a>00109                               <span class="stringliteral">"kappa value for kappa-sigma clipping "</span>
-<a name="l00110"></a>00110                               <span class="stringliteral">"of coadded cube"</span>,
-<a name="l00111"></a>00111                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00112"></a>00112                               2.0);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kappa"</span>);
-<a name="l00115"></a>00115   cpl_parameterlist_append(list, p);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="comment">/*x-pixel size of the final combined data cube, must lie between 64 and 128 */</span>
-<a name="l00120"></a>00120   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.size_x"</span>,
-<a name="l00121"></a>00121                   CPL_TYPE_INT,
-<a name="l00122"></a>00122                               <span class="stringliteral">"Cube x size: "</span>
-<a name="l00123"></a>00123                               <span class="stringliteral">"x-pixel size of the final combined data cube,"</span>
-<a name="l00124"></a>00124                               <span class="stringliteral">"must lie between 64 and 128. "</span>
-<a name="l00125"></a>00125                               <span class="stringliteral">"If 0 it is computed automatically"</span>,
-<a name="l00126"></a>00126                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00127"></a>00127                               0);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-size_x"</span>);
-<a name="l00130"></a>00130   cpl_parameterlist_append(list, p);
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   <span class="comment">/*y-pixel size of the final combined data cube, must lie between 64 and 128 */</span>
-<a name="l00134"></a>00134   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.size_y"</span>,
-<a name="l00135"></a>00135                   CPL_TYPE_INT,
-<a name="l00136"></a>00136                               <span class="stringliteral">"Cube y size: "</span>
-<a name="l00137"></a>00137                               <span class="stringliteral">"y-pixel size of the final combined data cube,"</span>
-<a name="l00138"></a>00138                               <span class="stringliteral">"must lie between 64 and 128."</span>
-<a name="l00139"></a>00139                               <span class="stringliteral">"If 0 it is computed automatically"</span>,
-<a name="l00140"></a>00140                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00141"></a>00141                               0);
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-size_y"</span>);
-<a name="l00144"></a>00144   cpl_parameterlist_append(list, p);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   <span class="comment">/*Resampling */</span>
-<a name="l00147"></a>00147  <span class="comment">/* number of coefficients for the polynomial interpolation */</span>
-<a name="l00148"></a>00148   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>,
-<a name="l00149"></a>00149                   CPL_TYPE_INT,
-<a name="l00150"></a>00150                               <span class="stringliteral">"number of coefficients for the polynomial "</span>
-<a name="l00151"></a>00151                               <span class="stringliteral">"interpolation "</span>,
-<a name="l00152"></a>00152                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00153"></a>00153                                3);
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-no_coeffs"</span>);
-<a name="l00156"></a>00156   cpl_parameterlist_append(list, p);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   <span class="comment">/* Calibration */</span>
-<a name="l00160"></a>00160   <span class="comment">/* indicates if the halogen lamp features from flatfielding should be </span>
-<a name="l00161"></a>00161 <span class="comment">     corrected for or not */</span>
-<a name="l00162"></a>00162   <span class="comment">/*</span>
-<a name="l00163"></a>00163 <span class="comment">  p = cpl_parameter_new_value("sinfoni.objnod.halo_correct_index",</span>
-<a name="l00164"></a>00164 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00165"></a>00165 <span class="comment">                              "Halo Correct Index: "</span>
-<a name="l00166"></a>00166 <span class="comment">                              "indicates if the halogen lamp features from "</span>
-<a name="l00167"></a>00167 <span class="comment">                              "flatfielding should be corrected for (TRUE) "</span>
-<a name="l00168"></a>00168 <span class="comment">                              "or not (FALSE)",</span>
-<a name="l00169"></a>00169 <span class="comment">                              "sinfoni.objnod",</span>
-<a name="l00170"></a>00170 <span class="comment">                              FALSE);</span>
-<a name="l00171"></a>00171 <span class="comment"></span>
-<a name="l00172"></a>00172 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-halo_corr_ind");</span>
-<a name="l00173"></a>00173 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00174"></a>00174 <span class="comment">  */</span>
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176   <span class="comment">/* Cube Creation */</span>
-<a name="l00177"></a>00177   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span>
-<a name="l00178"></a>00178 <span class="comment">     (yes) or slitlet edge fits (no)</span>
-<a name="l00179"></a>00179 <span class="comment">  */</span>
-<a name="l00180"></a>00180   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>,
-<a name="l00181"></a>00181                   CPL_TYPE_BOOL,
-<a name="l00182"></a>00182                               <span class="stringliteral">"Nord South Index Switch: "</span>
-<a name="l00183"></a>00183                               <span class="stringliteral">"indicates if the slitlet distances are "</span>
-<a name="l00184"></a>00184                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span>
-<a name="l00185"></a>00185                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,
-<a name="l00186"></a>00186                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00187"></a>00187                               TRUE);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ns_ind"</span>);
-<a name="l00191"></a>00191   cpl_parameterlist_append(list, p);
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   <span class="comment">/* Fine tuning */</span>
-<a name="l00194"></a>00194   <span class="comment">/* Method */</span>
-<a name="l00195"></a>00195   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>,
-<a name="l00196"></a>00196                   CPL_TYPE_STRING,
-<a name="l00197"></a>00197                               <span class="stringliteral">"Fine Tuning Method: "</span>
-<a name="l00198"></a>00198                               <span class="stringliteral">"indicator for the shifting method to use "</span>
-<a name="l00199"></a>00199                               <span class="stringliteral">"(P: polynomial interpolation, "</span>
-<a name="l00200"></a>00200                  <span class="comment">/* " F: FFT, " */</span>
-<a name="l00201"></a>00201                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,
-<a name="l00202"></a>00202                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00203"></a>00203                               <span class="stringliteral">"P"</span>,
-<a name="l00204"></a>00204                                2,
-<a name="l00205"></a>00205                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"S"</span>);
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fine_tune_mtd"</span>);
-<a name="l00208"></a>00208   cpl_parameterlist_append(list, p);
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.order"</span>,
-<a name="l00211"></a>00211                   CPL_TYPE_INT,
-<a name="l00212"></a>00212                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> 
-<a name="l00213"></a>00213                               <span class="stringliteral">"order of the polynomial if the polynomial "</span>
-<a name="l00214"></a>00214                               <span class="stringliteral">"interpolation shifting method is used."</span>,
-<a name="l00215"></a>00215                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00216"></a>00216                               2);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-order"</span>);
-<a name="l00219"></a>00219   cpl_parameterlist_append(list, p);
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221   <span class="comment">/* Sky Extraction */</span>
-<a name="l00222"></a>00222   <span class="comment">/*Reconstruction */</span>
-<a name="l00223"></a>00223  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00224"></a>00224 <span class="comment">the average of columns */</span>
-<a name="l00225"></a>00225   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.low_rejection"</span>,
-<a name="l00226"></a>00226                   CPL_TYPE_DOUBLE,
-<a name="l00227"></a>00227                               <span class="stringliteral">"lower rejection: "</span>
-<a name="l00228"></a>00228                               <span class="stringliteral">"percentage of rejected low value pixels "</span>
-<a name="l00229"></a>00229                               <span class="stringliteral">"for averaging the sky spectra"</span>,
-<a name="l00230"></a>00230                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00231"></a>00231                               10.);
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-lo_rej"</span>);
-<a name="l00234"></a>00234   cpl_parameterlist_append(list, p);
-<a name="l00235"></a>00235  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00236"></a>00236 <span class="comment">the average of columns */</span>
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.high_rejection"</span>,
-<a name="l00239"></a>00239                   CPL_TYPE_DOUBLE,
-<a name="l00240"></a>00240                               <span class="stringliteral">"higher rejection: "</span>
-<a name="l00241"></a>00241                               <span class="stringliteral">"percentage of rejected high value pixels "</span>
-<a name="l00242"></a>00242                               <span class="stringliteral">"for averaging the sky spectra"</span>,
-<a name="l00243"></a>00243                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00244"></a>00244                               10.);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-hi_rej"</span>);
-<a name="l00247"></a>00247   cpl_parameterlist_append(list, p);
-<a name="l00248"></a>00248   <span class="comment">/* pixel tolerance, this distance tolerance to the diagonal dividing </span>
-<a name="l00249"></a>00249 <span class="comment">     line is not considered for the sky extraction to be sure to have a clean</span>
-<a name="l00250"></a>00250 <span class="comment">     sky due to positioning tolerance and crossing through pixels</span>
-<a name="l00251"></a>00251 <span class="comment">  */</span>
-<a name="l00252"></a>00252   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.tolerance"</span>,
-<a name="l00253"></a>00253                   CPL_TYPE_INT,
-<a name="l00254"></a>00254                               <span class="stringliteral">"Tolerance: "</span>
-<a name="l00255"></a>00255                               <span class="stringliteral">"pixel tolerance, this distance tolerance to "</span>
-<a name="l00256"></a>00256                               <span class="stringliteral">"the diagonal dividing line is not considered "</span>
-<a name="l00257"></a>00257                               <span class="stringliteral">"for the sky extraction to be sure to have a "</span>
-<a name="l00258"></a>00258                               <span class="stringliteral">"clean sky due to positioning tolerance and "</span>
-<a name="l00259"></a>00259                               <span class="stringliteral">"crossing through pixels"</span>,
-<a name="l00260"></a>00260                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00261"></a>00261                               2);
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-tol"</span>);
-<a name="l00264"></a>00264   cpl_parameterlist_append(list, p);
-<a name="l00265"></a>00265   <span class="comment">/* Jittering */</span>
-<a name="l00266"></a>00266   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span>
-<a name="l00267"></a>00267 <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span>
-<a name="l00268"></a>00268 <span class="comment">     that means in auto-jittering mode!</span>
-<a name="l00269"></a>00269 <span class="comment">  */</span>
-<a name="l00270"></a>00270   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.jitter_index"</span>,
-<a name="l00271"></a>00271                   CPL_TYPE_BOOL,
-<a name="l00272"></a>00272                               <span class="stringliteral">"Jitter Index: "</span>
-<a name="l00273"></a>00273                               <span class="stringliteral">"jitter mode indicator: "</span>
-<a name="l00274"></a>00274                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span>
-<a name="l00275"></a>00275                               <span class="stringliteral">"FALSE: user defined jitter"</span>
-<a name="l00276"></a>00276                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span>
-<a name="l00277"></a>00277                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span>
-<a name="l00278"></a>00278                               <span class="stringliteral">"that means in auto-jittering mode!"</span>,
-<a name="l00279"></a>00279                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00280"></a>00280                               TRUE);
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-jit_ind"</span>);
-<a name="l00283"></a>00283   cpl_parameterlist_append(list, p);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   <span class="comment">/* Kernel Type */</span>
-<a name="l00286"></a>00286   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span>
-<a name="l00287"></a>00287 <span class="comment">     correct places inside the big combined cube. That you want to generate </span>
-<a name="l00288"></a>00288 <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span>
-<a name="l00289"></a>00289 <span class="comment">     Supported kernels are:</span>
-<a name="l00290"></a>00290 <span class="comment"></span>
-<a name="l00291"></a>00291 <span class="comment">                                     NULL:      default kernel, currently tanh</span>
-<a name="l00292"></a>00292 <span class="comment">                                     default: dito</span>
-<a name="l00293"></a>00293 <span class="comment">                                     tanh:    Hyperbolic tangent</span>
-<a name="l00294"></a>00294 <span class="comment">                                     sinc2:   Square sinc</span>
-<a name="l00295"></a>00295 <span class="comment">                                     lanczos: Lanczos2 kernel</span>
-<a name="l00296"></a>00296 <span class="comment">                                     hamming: Hamming kernel</span>
-<a name="l00297"></a>00297 <span class="comment">                                     hann:    Hann kernel</span>
-<a name="l00298"></a>00298 <span class="comment">  */</span>
-<a name="l00299"></a>00299   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.kernel_type"</span>,
-<a name="l00300"></a>00300                   CPL_TYPE_STRING,
-<a name="l00301"></a>00301                               <span class="stringliteral">"Kernel Type:"</span>
-<a name="l00302"></a>00302                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span>
-<a name="l00303"></a>00303                               <span class="stringliteral">"the single cubes  to the correct places inside "</span>
-<a name="l00304"></a>00304                  <span class="stringliteral">"the big combined cube"</span>,
-<a name="l00305"></a>00305                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00306"></a>00306                               <span class="stringliteral">"tanh"</span>,
-<a name="l00307"></a>00307                                7,
-<a name="l00308"></a>00308                               <span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc2"</span>,
-<a name="l00309"></a>00309                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kernel_typ"</span>);
-<a name="l00312"></a>00312   cpl_parameterlist_append(list, p);
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 <span class="comment">/* amount of vignetting from output cube before coaddition */</span>
-<a name="l00316"></a>00316   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vllx"</span>,
-<a name="l00317"></a>00317                   CPL_TYPE_INT,
-<a name="l00318"></a>00318                               <span class="stringliteral">"Vignetting on llx: "</span>
-<a name="l00319"></a>00319                               <span class="stringliteral">"pixels vignetted from lower left corner "</span>
-<a name="l00320"></a>00320                               <span class="stringliteral">"X coordinate "</span>
-<a name="l00321"></a>00321                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,
-<a name="l00322"></a>00322                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00323"></a>00323                               0,0,63);
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vllx"</span>);
-<a name="l00326"></a>00326   cpl_parameterlist_append(list, p);
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vlly"</span>,
-<a name="l00330"></a>00330                   CPL_TYPE_INT,
-<a name="l00331"></a>00331                               <span class="stringliteral">"Vignetting on lly: "</span>
-<a name="l00332"></a>00332                               <span class="stringliteral">"pixels vignetted from lower left corner "</span>
-<a name="l00333"></a>00333                               <span class="stringliteral">"Y coordinate "</span>
-<a name="l00334"></a>00334                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,
-<a name="l00335"></a>00335                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00336"></a>00336                               0,0,63);
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vlly"</span>);
-<a name="l00339"></a>00339   cpl_parameterlist_append(list, p);
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vurx"</span>,
-<a name="l00343"></a>00343                   CPL_TYPE_INT,
-<a name="l00344"></a>00344                               <span class="stringliteral">"Vignetting on urx: "</span>
-<a name="l00345"></a>00345                               <span class="stringliteral">"pixels vignetted from upper right corner "</span>
-<a name="l00346"></a>00346                               <span class="stringliteral">"X coordinate "</span>
-<a name="l00347"></a>00347                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,
-<a name="l00348"></a>00348                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00349"></a>00349                               0,0,63);
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vurx"</span>);
-<a name="l00352"></a>00352   cpl_parameterlist_append(list, p);
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vury"</span>,
-<a name="l00356"></a>00356                   CPL_TYPE_INT,
-<a name="l00357"></a>00357                               <span class="stringliteral">"Vignetting on ury: "</span>
-<a name="l00358"></a>00358                               <span class="stringliteral">"pixels vignetted from upper right corner "</span>
-<a name="l00359"></a>00359                               <span class="stringliteral">"Y coordinate "</span>
-<a name="l00360"></a>00360                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,
-<a name="l00361"></a>00361                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00362"></a>00362                               0,0,63);
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vury"</span>);
-<a name="l00365"></a>00365   cpl_parameterlist_append(list, p);
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.fcol"</span>,
-<a name="l00369"></a>00369             CPL_TYPE_DOUBLE,
-<a name="l00370"></a>00370             <span class="stringliteral">"First column offset: "</span>,
-<a name="l00371"></a>00371                         <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00372"></a>00372                          0.);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fcol"</span>);
-<a name="l00375"></a>00375   cpl_parameterlist_append(list, p);
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377   <span class="comment">/* switch to activate the sky residuals correction */</span>
-<a name="l00378"></a>00378   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.sky_cor"</span>,
-<a name="l00379"></a>00379                   CPL_TYPE_BOOL,
-<a name="l00380"></a>00380                               <span class="stringliteral">"Sky residuals correction: "</span>,
-<a name="l00381"></a>00381                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00382"></a>00382                               TRUE);
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-sky_cor"</span>);
-<a name="l00385"></a>00385   cpl_parameterlist_append(list, p);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388   <span class="comment">/* switch to activate the flux correction correction */</span>
-<a name="l00389"></a>00389   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.flux_cor"</span>,
-<a name="l00390"></a>00390                   CPL_TYPE_BOOL,
-<a name="l00391"></a>00391                               <span class="stringliteral">"Apply flux correction after rebinning: "</span>,
-<a name="l00392"></a>00392                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00393"></a>00393                               TRUE);
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-flux_cor"</span>);
-<a name="l00396"></a>00396   cpl_parameterlist_append(list, p);
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399   <span class="comment">/* switch to activate the flux correction correction */</span>
-<a name="l00400"></a>00400   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>,
-<a name="l00401"></a>00401                   CPL_TYPE_INT,
-<a name="l00402"></a>00402                               <span class="stringliteral">"Maximum allowed size for cubes mosaic is "</span>
-<a name="l00403"></a>00403                               <span class="stringliteral">"100*mosaic_max_size "</span>,
-<a name="l00404"></a>00404                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00405"></a>00405                               14196);
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-mosaic_max_size"</span>);
-<a name="l00408"></a>00408   cpl_parameterlist_append(list, p);
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objnod_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_objnod_config.c,v 1.11 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.11 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Objnod Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_objnod_config.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>  sinfo_objnod_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="comment">/* Science */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="stringliteral">"Method to reduce autojitter template frames "</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               <span class="stringliteral">"Raw frames are object only exposures. "</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                               <span class="stringliteral">"object-fake_sky pairs are generated. "</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                               <span class="stringliteral">"0: no sky for all objects "</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="stringliteral">"1: fake_sky is next object, "</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="stringliteral">"2: fake_sky is sinfo_median of all objects "</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                1,3,0,1,2);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-aj_method"</span>);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   <span class="comment">/* Science */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.scales_sky"</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"Spatial median (sky) subtraction from cube: "</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="stringliteral">"(If autojitter_method==1),"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"indicates if the spatial median of each plane "</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"should be subtracted (TRUE) or not (FALSE) "</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"from each cube plane"</span>,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               FALSE);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-scales_sky"</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="comment">/* Science */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.ks_clip"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                               <span class="stringliteral">"Kappa-sigma clipping of coadded cube: "</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               <span class="stringliteral">"indicates if a kappa-sigma clipping "</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               <span class="stringliteral">"should be performed (TRUE) or not (FALSE) "</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                               <span class="stringliteral">"on each plane of the coadded cube"</span>,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                               TRUE);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ks_clip"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.kappa"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"kappa value for kappa-sigma clipping "</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                               <span class="stringliteral">"of coadded cube"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               2.0);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kappa"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/*x-pixel size of the final combined data cube, must lie between 64 and 128 */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.size_x"</span>,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               <span class="stringliteral">"Cube x size: "</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"x-pixel size of the final combined data cube,"</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                               <span class="stringliteral">"must lie between 64 and 128. "</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                               <span class="stringliteral">"If 0 it is computed automatically"</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                               0);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-size_x"</span>);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="comment">/*y-pixel size of the final combined data cube, must lie between 64 and 128 */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.size_y"</span>,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                               <span class="stringliteral">"Cube y size: "</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                               <span class="stringliteral">"y-pixel size of the final combined data cube,"</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"must lie between 64 and 128."</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="stringliteral">"If 0 it is computed automatically"</span>,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                               0);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-size_y"</span>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="comment">/*Resampling */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>  <span class="comment">/* number of coefficients for the polynomial interpolation */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                               <span class="stringliteral">"number of coefficients for the polynomial "</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                               <span class="stringliteral">"interpolation "</span>,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                3);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-no_coeffs"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="comment">/* Calibration */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="comment">/* indicates if the halogen lamp features from flatfielding should be </span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">     corrected for or not */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.objnod.halo_correct_index",</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">                              "Halo Correct Index: "</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">                              "indicates if the halogen lamp features from "</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">                              "flatfielding should be corrected for (TRUE) "</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">                              "or not (FALSE)",</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">                              "sinfoni.objnod",</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">                              FALSE);</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objnod-halo_corr_ind");</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="comment">/* Cube Creation */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">     (yes) or slitlet edge fits (no)</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               <span class="stringliteral">"Nord South Index Switch: "</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                               <span class="stringliteral">"indicates if the slitlet distances are "</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                               TRUE);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ns_ind"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="comment">/* Fine tuning */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="comment">/* Method */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               <span class="stringliteral">"Fine Tuning Method: "</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                               <span class="stringliteral">"indicator for the shifting method to use "</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                               <span class="stringliteral">"(P: polynomial interpolation, "</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                  <span class="comment">/* " F: FFT, " */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                               <span class="stringliteral">"P"</span>,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                2,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"S"</span>);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fine_tune_mtd"</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.order"</span>,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                               <span class="stringliteral">"order of the polynomial if the polynomial "</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               <span class="stringliteral">"interpolation shifting method is used."</span>,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                               2);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-order"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="comment">/* Sky Extraction */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="comment">/*Reconstruction */</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.low_rejection"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                               <span class="stringliteral">"lower rejection: "</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                               <span class="stringliteral">"percentage of rejected low value pixels "</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               <span class="stringliteral">"for averaging the sky spectra"</span>,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                               10.);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-lo_rej"</span>);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.high_rejection"</span>,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"higher rejection: "</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="stringliteral">"percentage of rejected high value pixels "</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                               <span class="stringliteral">"for averaging the sky spectra"</span>,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               10.);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-hi_rej"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="comment">/* pixel tolerance, this distance tolerance to the diagonal dividing </span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">     line is not considered for the sky extraction to be sure to have a clean</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment">     sky due to positioning tolerance and crossing through pixels</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.tolerance"</span>,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"Tolerance: "</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               <span class="stringliteral">"pixel tolerance, this distance tolerance to "</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                               <span class="stringliteral">"the diagonal dividing line is not considered "</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                               <span class="stringliteral">"for the sky extraction to be sure to have a "</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                               <span class="stringliteral">"clean sky due to positioning tolerance and "</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="stringliteral">"crossing through pixels"</span>,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               2);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-tol"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="comment">/* Jittering */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">     that means in auto-jittering mode!</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.jitter_index"</span>,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                               <span class="stringliteral">"Jitter Index: "</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                               <span class="stringliteral">"jitter mode indicator: "</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                               <span class="stringliteral">"FALSE: user defined jitter"</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                               <span class="stringliteral">"that means in auto-jittering mode!"</span>,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                               TRUE);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-jit_ind"</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="comment">/* Kernel Type */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">     correct places inside the big combined cube. That you want to generate </span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">     Supported kernels are:</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment"></span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">                                     NULL:      default kernel, currently tanh</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">                                     default: dito</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">                                     tanh:    Hyperbolic tangent</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">                                     sinc2:   Square sinc</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">                                     lanczos: Lanczos2 kernel</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">                                     hamming: Hamming kernel</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">                                     hann:    Hann kernel</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.kernel_type"</span>,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                               <span class="stringliteral">"Kernel Type:"</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                               <span class="stringliteral">"the single cubes  to the correct places inside "</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                  <span class="stringliteral">"the big combined cube"</span>,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                               <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                7,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                               <span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc2"</span>,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kernel_typ"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">/* amount of vignetting from output cube before coaddition */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vllx"</span>,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                               <span class="stringliteral">"Vignetting on llx: "</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                               <span class="stringliteral">"pixels vignetted from lower left corner "</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                               <span class="stringliteral">"X coordinate "</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                               0,0,63);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vllx"</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vlly"</span>,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                               <span class="stringliteral">"Vignetting on lly: "</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                               <span class="stringliteral">"pixels vignetted from lower left corner "</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                               <span class="stringliteral">"Y coordinate "</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                               0,0,63);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vlly"</span>);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vurx"</span>,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                               <span class="stringliteral">"Vignetting on urx: "</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                               <span class="stringliteral">"pixels vignetted from upper right corner "</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                               <span class="stringliteral">"X coordinate "</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                               0,0,63);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vurx"</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.objnod.vury"</span>,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                               <span class="stringliteral">"Vignetting on ury: "</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                               <span class="stringliteral">"pixels vignetted from upper right corner "</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                               <span class="stringliteral">"Y coordinate "</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                               <span class="stringliteral">"of contributing cubes before coaddition "</span>,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                               0,0,63);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-vury"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.fcol"</span>,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>             CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             <span class="stringliteral">"First column offset: "</span>,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                         <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                          0.);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   cpl_parameter_set_alias(p,  CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fcol"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="comment">/* switch to activate the sky residuals correction */</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.sky_cor"</span>,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                               <span class="stringliteral">"Sky residuals correction: "</span>,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                               TRUE);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-sky_cor"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="comment">/* switch to activate the flux correction correction */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.flux_cor"</span>,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                               <span class="stringliteral">"Apply flux correction after rebinning: "</span>,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                               TRUE);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-flux_cor"</span>);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="comment">/* switch to activate the flux correction correction */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.mosaic_max_size"</span>,</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                               <span class="stringliteral">"Maximum allowed size for cubes mosaic is "</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                               <span class="stringliteral">"100*mosaic_max_size "</span>,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                               14196);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-mosaic_max_size"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objnod__config_8h_source.html b/html/sinfo__objnod__config_8h_source.html
index c81ee15..5778dc5 100644
--- a/html/sinfo__objnod__config_8h_source.html
+++ b/html/sinfo__objnod__config_8h_source.html
@@ -2,47 +2,78 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objnod_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objnod_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_objnod_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Objnod Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keywordtype">void</span> sinfo_objnod_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objnod_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_objnod_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Objnod Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span> sinfo_objnod_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objnod__ini__by__cpl_8c_source.html b/html/sinfo__objnod__ini__by__cpl_8c_source.html
index 9ac5aff..6b3d41f 100644
--- a/html/sinfo__objnod__ini__by__cpl_8c_source.html
+++ b/html/sinfo__objnod__ini__by__cpl_8c_source.html
@@ -2,420 +2,451 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objnod_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objnod_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment"></span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_object_ini_by_cpl.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   May 22, 2004</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   object cube creation cpl input handling for SPIFFI</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include <string.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                    Functions private to this module</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00051"></a>00051 parse_section_frames(object_config *,cpl_frameset* sof,
-<a name="l00052"></a>00052                      cpl_frameset** stk,  <span class="keywordtype">int</span>* status);
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_jittering(object_config *,
-<a name="l00054"></a>00054                      cpl_parameterlist * cpl_cfg);
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_resampling(object_config *,
-<a name="l00056"></a>00056                      cpl_parameterlist * cpl_cfg);
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_calibration(object_config *);
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_cubecreation(object_config *,
-<a name="l00059"></a>00059                      cpl_parameterlist * cpl_cfg);
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_finetuning(object_config *,
-<a name="l00061"></a>00061                      cpl_parameterlist * cpl_cfg);
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_skyextraction(object_config *,
-<a name="l00063"></a>00063                      cpl_parameterlist * cpl_cfg);
-<a name="l00073"></a>00073 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 object_config *
-<a name="l00087"></a>00087 sinfo_parse_cpl_input_objnod(cpl_parameterlist * cpl_cfg,cpl_frameset* sof,
-<a name="l00088"></a>00088                cpl_frameset** stk)
-<a name="l00089"></a>00089 {
-<a name="l00090"></a>00090    object_config   * cfg = sinfo_object_cfg_create();
-<a name="l00091"></a>00091    <span class="keywordtype">int</span> status=0;
-<a name="l00092"></a>00092    <span class="comment">/*</span>
-<a name="l00093"></a>00093 <span class="comment">    * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00094"></a>00094 <span class="comment">    * found in the ini file</span>
-<a name="l00095"></a>00095 <span class="comment">    */</span>
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098    parse_section_resampling   (cfg, cpl_cfg);
-<a name="l00099"></a>00099    parse_section_calibration  (cfg);
-<a name="l00100"></a>00100    parse_section_cubecreation (cfg, cpl_cfg);
-<a name="l00101"></a>00101    parse_section_finetuning   (cfg, cpl_cfg);
-<a name="l00102"></a>00102    parse_section_skyextraction(cfg, cpl_cfg);
-<a name="l00103"></a>00103    parse_section_jittering    (cfg, cpl_cfg);
-<a name="l00104"></a>00104    parse_section_frames       (cfg, sof,stk,&status);
-<a name="l00105"></a>00105    <span class="keywordflow">if</span> (status > 0) {
-<a name="l00106"></a>00106                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00107"></a>00107                 sinfo_objnod_free(&cfg);
-<a name="l00108"></a>00108                 cfg = NULL ;
-<a name="l00109"></a>00109                 <span class="keywordflow">return</span> NULL ;
-<a name="l00110"></a>00110    }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112    <span class="keywordflow">return</span> cfg ;
-<a name="l00113"></a>00113 }
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00116"></a>00116 parse_section_frames(object_config * cfg,
-<a name="l00117"></a>00117              cpl_frameset* sof,
-<a name="l00118"></a>00118                      cpl_frameset** stk,
-<a name="l00119"></a>00119                      <span class="keywordtype">int</span>* status)
-<a name="l00120"></a>00120 {
-<a name="l00121"></a>00121    <span class="keywordtype">int</span>                     nraw_good =0;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125    <span class="keywordtype">int</span> nframes=0;
-<a name="l00126"></a>00126    <span class="keywordtype">int</span> nraw=0;
-<a name="l00127"></a>00127    cpl_frame* frame   = NULL;
-<a name="l00128"></a>00128    <span class="keywordtype">int</span> nstk=0;
-<a name="l00129"></a>00129    <span class="keywordtype">int</span> i=0;
-<a name="l00130"></a>00130     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00131"></a>00131    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00132"></a>00132    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00133"></a>00133    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135    nframes = cpl_frameset_get_size(sof);
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137    sinfo_contains_frames_type(sof,stk,PRO_NODDING_STACKED);
-<a name="l00138"></a>00138    nstk = cpl_frameset_get_size(*stk);
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140    <span class="keywordflow">if</span> (nstk == 0) {
-<a name="l00141"></a>00141       sinfo_contains_frames_type(sof,stk,PRO_PSF_CALIBRATOR_STACKED);
-<a name="l00142"></a>00142       nstk = cpl_frameset_get_size(*stk);
-<a name="l00143"></a>00143    }
-<a name="l00144"></a>00144    <span class="keywordflow">if</span> (nstk == 0) {
-<a name="l00145"></a>00145       sinfo_contains_frames_type(sof,stk,PRO_PUPIL_LAMP_STACKED);
-<a name="l00146"></a>00146       nstk = cpl_frameset_get_size(*stk);
-<a name="l00147"></a>00147    }
-<a name="l00148"></a>00148    <span class="keywordflow">if</span> (nstk == 0) {
-<a name="l00149"></a>00149         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find good frames"</span>) ;
-<a name="l00150"></a>00150         (*status)++;
-<a name="l00151"></a>00151         return ;
-<a name="l00152"></a>00152    }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156    <span class="comment">/* TEMPORALLY COMMENTED OUT */</span>
-<a name="l00157"></a>00157     nraw    = cpl_frameset_get_size(*stk);
-<a name="l00158"></a>00158     <span class="comment">/* Test if the rawframes have been found */</span>
-<a name="l00159"></a>00159      <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00160"></a>00160         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames in the input list"</span>) ;
-<a name="l00161"></a>00161         (*status)++;
-<a name="l00162"></a>00162         return ;
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165    nraw    = cpl_frameset_get_size(*stk);
-<a name="l00166"></a>00166    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00167"></a>00167      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"no raw frame in input, something wrong!"</span>);
-<a name="l00168"></a>00168      (*status)++;
-<a name="l00169"></a>00169      return ;
-<a name="l00170"></a>00170    }
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00173"></a>00173    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   <span class="comment">/* read input frames */</span>
-<a name="l00176"></a>00176    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00177"></a>00177       frame = cpl_frameset_get_frame(*stk,i);
-<a name="l00178"></a>00178       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame))==1)
-<a name="l00179"></a>00179     {
-<a name="l00180"></a>00180           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00181"></a>00181               nraw_good++;
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183       <span class="comment">/* Store file name into framelist */</span>
-<a name="l00184"></a>00184    }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187    <span class="keywordflow">if</span> (nraw_good < 1) {
-<a name="l00188"></a>00188      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input!"</span>);
-<a name="l00189"></a>00189         (*status)++;
-<a name="l00190"></a>00190      <span class="keywordflow">return</span>;
-<a name="l00191"></a>00191    }
-<a name="l00192"></a>00192    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00193"></a>00193    cfg->nframes         = nraw ;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195    strcpy(cfg -> outName,  OBJNOD_OUT_FILENAME);
-<a name="l00196"></a>00196    strcpy(cfg -> maskname, OBJNOD_OUT_BPMAP);
-<a name="l00197"></a>00197    strcpy(cfg -> med_cube_name, OBJNOD_OUT_MED_CUBE);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200    frame = cpl_frameset_get_frame(*stk,0);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00203"></a>00203   <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))
-<a name="l00204"></a>00204     {
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="keywordflow">case</span> 0:
-<a name="l00207"></a>00207       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00208"></a>00208       <span class="keywordflow">break</span>;
-<a name="l00209"></a>00209     <span class="keywordflow">case</span> 1:
-<a name="l00210"></a>00210       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00211"></a>00211       <span class="keywordflow">break</span>;
-<a name="l00212"></a>00212     <span class="keywordflow">case</span> -1:
-<a name="l00213"></a>00213       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00214"></a>00214       <span class="keywordflow">break</span>;
-<a name="l00215"></a>00215     <span class="keywordflow">default</span>:
-<a name="l00216"></a>00216       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00217"></a>00217       <span class="keywordflow">break</span>;
-<a name="l00218"></a>00218     }
-<a name="l00219"></a>00219    sinfo_get_band(frame,band);
-<a name="l00220"></a>00220    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s"</span>,
-<a name="l00221"></a>00221                      spat_res,    lamp_status,    band);
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224    sinfo_get_ins_set(band,&ins_set);
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_MAP)) {
-<a name="l00227"></a>00227      frame = cpl_frameset_find(sof,PRO_WAVE_MAP);
-<a name="l00228"></a>00228      strcpy(cfg -> wavemap, cpl_frame_get_filename(frame));
-<a name="l00229"></a>00229    } <span class="keywordflow">else</span> {
-<a name="l00230"></a>00230      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_WAVE_MAP);
-<a name="l00231"></a>00231      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00232"></a>00232      (*status)++;
-<a name="l00233"></a>00233      return ;
-<a name="l00234"></a>00234    }
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP)) {
-<a name="l00237"></a>00237      frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP);
-<a name="l00238"></a>00238      strcpy(cfg -> mflat, cpl_frame_get_filename(frame));
-<a name="l00239"></a>00239    } <span class="keywordflow">else</span> {
-<a name="l00240"></a>00240      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP);
-<a name="l00241"></a>00241      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00242"></a>00242      (*status)++;
-<a name="l00243"></a>00243      return ;
-<a name="l00244"></a>00244    }
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_SKY_DIST)) {
-<a name="l00247"></a>00247      frame = cpl_frameset_find(sof,PRO_STACK_SKY_DIST);
-<a name="l00248"></a>00248      strcpy(cfg -> sky_dist, cpl_frame_get_filename(frame));
-<a name="l00249"></a>00249    } <span class="keywordflow">else</span> {
-<a name="l00250"></a>00250      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_SKY_DIST);
-<a name="l00251"></a>00251      strcpy(cfg -> sky_dist,<span class="stringliteral">"no_sky"</span>);
-<a name="l00252"></a>00252    }
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_MFLAT_DIST)) {
-<a name="l00255"></a>00255      frame = cpl_frameset_find(sof,PRO_STACK_MFLAT_DIST);
-<a name="l00256"></a>00256      strcpy(cfg -> mflat_dist, cpl_frame_get_filename(frame));
-<a name="l00257"></a>00257    } <span class="keywordflow">else</span> {
-<a name="l00258"></a>00258      strcpy(cfg -> mflat_dist, <span class="stringliteral">"not_found"</span>);
-<a name="l00259"></a>00259      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_MFLAT_DIST);
-<a name="l00260"></a>00260    }
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_MFLAT_DITHER_DIST)) {
-<a name="l00264"></a>00264      frame = cpl_frameset_find(sof,PRO_STACK_MFLAT_DITHER_DIST);
-<a name="l00265"></a>00265      strcpy(cfg -> mflat_dither_dist, cpl_frame_get_filename(frame));
-<a name="l00266"></a>00266    } <span class="keywordflow">else</span> {
-<a name="l00267"></a>00267      strcpy(cfg -> mflat_dither_dist, <span class="stringliteral">"not_found"</span>);
-<a name="l00268"></a>00268      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_MFLAT_DITHER_DIST);
-<a name="l00269"></a>00269    }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272    <span class="keywordflow">if</span>(cfg -> northsouthInd) {
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE)) {
-<a name="l00275"></a>00275        frame = cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE);
-<a name="l00276"></a>00276        strcpy(cfg -> distlist, cpl_frame_get_filename(frame));
-<a name="l00277"></a>00277      } <span class="keywordflow">else</span> {
-<a name="l00278"></a>00278        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLITLETS_DISTANCE);
-<a name="l00279"></a>00279        (*status)++;
-<a name="l00280"></a>00280        return ;
-<a name="l00281"></a>00281      }
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283    } <span class="keywordflow">else</span> {
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {
-<a name="l00286"></a>00286        frame = cpl_frameset_find(sof,PRO_SLIT_POS);
-<a name="l00287"></a>00287        strcpy(cfg -> poslist, cpl_frame_get_filename(frame));
-<a name="l00288"></a>00288      } <span class="keywordflow">else</span> {
-<a name="l00289"></a>00289        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS);
-<a name="l00290"></a>00290        (*status)++;
-<a name="l00291"></a>00291        return ;
-<a name="l00292"></a>00292      }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294    }
-<a name="l00295"></a>00295    <span class="keywordflow">if</span>(cfg -> halocorrectInd) {
-<a name="l00296"></a>00296      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_HALO_SPECT)) {
-<a name="l00297"></a>00297        frame = cpl_frameset_find(sof,PRO_HALO_SPECT);
-<a name="l00298"></a>00298        strcpy(cfg -> halospectrum, cpl_frame_get_filename(frame));
-<a name="l00299"></a>00299      } <span class="keywordflow">else</span> {
-<a name="l00300"></a>00300        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_HALO_SPECT);
-<a name="l00301"></a>00301        (*status)++;
-<a name="l00302"></a>00302        return ;
-<a name="l00303"></a>00303      }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305    }
-<a name="l00306"></a>00306    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof, PRO_REF_ATM_REF_CORR))
-<a name="l00307"></a>00307    {
-<a name="l00308"></a>00308        frame = cpl_frameset_find(sof, PRO_REF_ATM_REF_CORR);
-<a name="l00309"></a>00309        strcpy(cfg->polyshiftname, cpl_frame_get_filename(frame));
-<a name="l00310"></a>00310    } <span class="keywordflow">else</span>
-<a name="l00311"></a>00311    {
-<a name="l00312"></a>00312        sinfo_msg(<span class="stringliteral">"Frame %s not found, shift due atmospheric refraction "</span>
-<a name="l00313"></a>00313                <span class="stringliteral">"would not be applied!"</span>, PRO_REF_ATM_REF_CORR);
-<a name="l00314"></a>00314        cfg->polyshiftname[0] = 0;
-<a name="l00315"></a>00315 <span class="comment">//       (*status)++;</span>
-<a name="l00316"></a>00316    }
-<a name="l00317"></a>00317    <span class="comment">/*</span>
-<a name="l00318"></a>00318 <span class="comment">   sinfo_msg("cfg -> wavemap  %s",cfg -> wavemap);</span>
-<a name="l00319"></a>00319 <span class="comment">   sinfo_msg("cfg -> poslist  %s",cfg -> poslist);</span>
-<a name="l00320"></a>00320 <span class="comment">   sinfo_msg("cfg -> firstCol %s",cfg -> firstCol);</span>
-<a name="l00321"></a>00321 <span class="comment">   */</span>
-<a name="l00322"></a>00322    <span class="keywordflow">return</span>;
-<a name="l00323"></a>00323 }
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00327"></a>00327 parse_section_jittering(object_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00328"></a>00328 {
-<a name="l00329"></a>00329    cpl_parameter* p;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.jitter_index"</span>);
-<a name="l00332"></a>00332    cfg -> jitterind = cpl_parameter_get_bool(p);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.size_x"</span>);
-<a name="l00335"></a>00335    cfg -> size_x = cpl_parameter_get_int(p);
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.size_y"</span>);
-<a name="l00338"></a>00338    cfg -> size_y = cpl_parameter_get_int(p);
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.kernel_type"</span>);
-<a name="l00341"></a>00341    strcpy(cfg -> kernel_type, cpl_parameter_get_string(p));
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 }
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00346"></a>00346 parse_section_resampling(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00347"></a>00347 {
-<a name="l00348"></a>00348    cpl_parameter* p;
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>);
-<a name="l00351"></a>00351    cfg -> ncoeffs = cpl_parameter_get_int(p);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353    cfg -> nrows = SINFO_RESAMP_NROWS;
-<a name="l00354"></a>00354    return ;
-<a name="l00355"></a>00355 }
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00358"></a>00358 parse_section_calibration(object_config * cfg)
-<a name="l00359"></a>00359 {
-<a name="l00360"></a>00360   cfg -> halocorrectInd=0;
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 }
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00366"></a>00366 parse_section_cubecreation(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00367"></a>00367 {
-<a name="l00368"></a>00368    cpl_parameter* p;
-<a name="l00369"></a>00369    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>);
-<a name="l00370"></a>00370    cfg -> northsouthInd = cpl_parameter_get_bool(p);
-<a name="l00371"></a>00371    cfg -> nslits = NSLITLETS;
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373    return ;
-<a name="l00374"></a>00374 }
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00377"></a>00377 parse_section_finetuning(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00378"></a>00378 {
-<a name="l00379"></a>00379    cpl_parameter* p;
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>);
-<a name="l00382"></a>00382    strcpy(cfg -> method, cpl_parameter_get_string(p));
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.order"</span>);
-<a name="l00385"></a>00385    cfg -> order = cpl_parameter_get_int(p);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 }
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00390"></a>00390 parse_section_skyextraction(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00391"></a>00391 {
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393    cpl_parameter* p;
-<a name="l00394"></a>00394    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.low_rejection"</span>);
-<a name="l00395"></a>00395    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.high_rejection"</span>);
-<a name="l00398"></a>00398    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.tolerance"</span>);
-<a name="l00401"></a>00401    cfg -> tolerance = cpl_parameter_get_int(p);
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403 }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405 <span class="comment">/*-----------------------------------------------------------------*/</span>
-<a name="l00406"></a>00406 <span class="keywordtype">void</span>
-<a name="l00407"></a>00407 sinfo_objnod_free(object_config ** cfg) {
-<a name="l00408"></a>00408   <span class="keywordtype">int</span> i=0;
-<a name="l00409"></a>00409   <span class="keywordflow">if</span>(*cfg != NULL) {
-<a name="l00410"></a>00410     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes;i++) {
-<a name="l00411"></a>00411       <span class="keywordflow">if</span>((*cfg)->framelist[i]!=NULL) {
-<a name="l00412"></a>00412     cpl_free((*cfg)->framelist[i]);
-<a name="l00413"></a>00413     (*cfg)->framelist[i]=NULL;
-<a name="l00414"></a>00414       }
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416     <span class="keywordflow">if</span>((*cfg)->framelist != NULL) {
-<a name="l00417"></a>00417       cpl_free((*cfg)->framelist);
-<a name="l00418"></a>00418       (*cfg)->framelist=NULL;
-<a name="l00419"></a>00419     }
-<a name="l00420"></a>00420     sinfo_object_cfg_destroy (*cfg);
-<a name="l00421"></a>00421     *cfg=NULL;
-<a name="l00422"></a>00422   }
-<a name="l00423"></a>00423   <span class="keywordflow">return</span>;
-<a name="l00424"></a>00424 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objnod_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_object_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   May 22, 2004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   object cube creation cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_objnod_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> parse_section_frames(object_config *,cpl_frameset* sof,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                      cpl_frameset** stk,  <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_jittering(object_config *,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                      cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_resampling(object_config *,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                      cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_calibration(object_config *);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_cubecreation(object_config *,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                      cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_finetuning(object_config *,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                      cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">void</span> parse_section_skyextraction(object_config *,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                      cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> object_config *</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_parse_cpl_input_objnod(cpl_parameterlist * cpl_cfg,cpl_frameset* sof,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                cpl_frameset** stk)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    object_config   * cfg = sinfo_object_cfg_create();</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>    <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">    * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">    * found in the ini file</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    parse_section_resampling   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    parse_section_calibration  (cfg);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    parse_section_cubecreation (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    parse_section_finetuning   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    parse_section_skyextraction(cfg, cpl_cfg);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    parse_section_jittering    (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    parse_section_frames       (cfg, sof,stk,&status);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                 sinfo_objnod_free(&cfg);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> parse_section_frames(object_config * cfg,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>              cpl_frameset* sof,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                      cpl_frameset** stk,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="keywordtype">int</span>                     nraw_good =0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">int</span> nstk=0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    nframes = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    sinfo_contains_frames_type(sof,stk,PRO_NODDING_STACKED);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    nstk = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="keywordflow">if</span> (nstk == 0) {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>       sinfo_contains_frames_type(sof,stk,PRO_PSF_CALIBRATOR_STACKED);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       nstk = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="keywordflow">if</span> (nstk == 0) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       sinfo_contains_frames_type(sof,stk,PRO_PUPIL_LAMP_STACKED);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       nstk = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    }</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>    <span class="keywordflow">if</span> (nstk == 0) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find good frames"</span>) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         (*status)++;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         return ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    <span class="comment">/* TEMPORALLY COMMENTED OUT */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     nraw    = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="comment">/* Test if the rawframes have been found */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>      <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames in the input list"</span>) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         (*status)++;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         return ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    nraw    = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"no raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>      (*status)++;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>      return ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>    }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       frame = cpl_frameset_get_frame(*stk,i);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame))==1)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>               nraw_good++;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>    }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>    <span class="keywordflow">if</span> (nraw_good < 1) {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input!"</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         (*status)++;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>    strcpy(cfg -> outName,  OBJNOD_OUT_FILENAME);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    strcpy(cfg -> maskname, OBJNOD_OUT_BPMAP);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    strcpy(cfg -> med_cube_name, OBJNOD_OUT_MED_CUBE);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    frame = cpl_frameset_get_frame(*stk,0);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s"</span>,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_WAVE_MAP)) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>      frame = cpl_frameset_find(sof,PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>      strcpy(cfg -> wavemap, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>      (*status)++;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>      return ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP)) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>      frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>      strcpy(cfg -> mflat, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>      (*status)++;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>      return ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_SKY_DIST)) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>      frame = cpl_frameset_find(sof,PRO_STACK_SKY_DIST);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>      strcpy(cfg -> sky_dist, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_SKY_DIST);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>      strcpy(cfg -> sky_dist,<span class="stringliteral">"no_sky"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_MFLAT_DIST)) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>      frame = cpl_frameset_find(sof,PRO_STACK_MFLAT_DIST);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>      strcpy(cfg -> mflat_dist, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>      strcpy(cfg -> mflat_dist, <span class="stringliteral">"not_found"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_MFLAT_DIST);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>    }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_STACK_MFLAT_DITHER_DIST)) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>      frame = cpl_frameset_find(sof,PRO_STACK_MFLAT_DITHER_DIST);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>      strcpy(cfg -> mflat_dither_dist, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>      strcpy(cfg -> mflat_dither_dist, <span class="stringliteral">"not_found"</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>      sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_STACK_MFLAT_DITHER_DIST);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>    }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    <span class="keywordflow">if</span>(cfg -> northsouthInd) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE)) {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>        frame = cpl_frameset_find(sof,PRO_SLITLETS_DISTANCE);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>        strcpy(cfg -> distlist, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLITLETS_DISTANCE);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>        (*status)++;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>        return ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>      }</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>        frame = cpl_frameset_find(sof,PRO_SLIT_POS);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>        strcpy(cfg -> poslist, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>        (*status)++;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>        return ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>      }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>    }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>    <span class="keywordflow">if</span>(cfg -> halocorrectInd) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>      <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_HALO_SPECT)) {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>        frame = cpl_frameset_find(sof,PRO_HALO_SPECT);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>        strcpy(cfg -> halospectrum, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>        sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_HALO_SPECT);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>        (*status)++;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>        return ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>      }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof, PRO_REF_ATM_REF_CORR))</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>        frame = cpl_frameset_find(sof, PRO_REF_ATM_REF_CORR);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>        strcpy(cfg->polyshiftname, cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>    } <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>    {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>        sinfo_msg(<span class="stringliteral">"Frame %s not found, shift due atmospheric refraction "</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                <span class="stringliteral">"would not be applied!"</span>, PRO_REF_ATM_REF_CORR);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>        cfg->polyshiftname[0] = 0;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">//       (*status)++;</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>    }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">   sinfo_msg("cfg -> wavemap  %s",cfg -> wavemap);</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">   sinfo_msg("cfg -> poslist  %s",cfg -> poslist);</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">   sinfo_msg("cfg -> firstCol %s",cfg -> firstCol);</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> parse_section_jittering(object_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.jitter_index"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>    cfg -> jitterind = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.size_x"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>    cfg -> size_x = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.size_y"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>    cfg -> size_y = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.kernel_type"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>    strcpy(cfg -> kernel_type, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> }</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> parse_section_resampling(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    cfg -> ncoeffs = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>    cfg -> nrows = SINFO_RESAMP_NROWS;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    return ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> parse_section_calibration(object_config * cfg)</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   cfg -> halocorrectInd=0;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> parse_section_cubecreation(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>    cfg -> northsouthInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>    cfg -> nslits = NSLITLETS;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>    return ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> }</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> parse_section_finetuning(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>    strcpy(cfg -> method, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.order"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>    cfg -> order = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> parse_section_skyextraction(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.low_rejection"</span>);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.high_rejection"</span>);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objnod.tolerance"</span>);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>    cfg -> tolerance = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/*-----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> sinfo_objnod_free(object_config ** cfg) {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   <span class="keywordflow">if</span>(*cfg != NULL) {</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="keywordflow">for</span>(i=0;i<(*cfg)->nframes;i++) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       <span class="keywordflow">if</span>((*cfg)->framelist[i]!=NULL) {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     cpl_free((*cfg)->framelist[i]);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     (*cfg)->framelist[i]=NULL;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>       }</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">if</span>((*cfg)->framelist != NULL) {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       cpl_free((*cfg)->framelist);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>       (*cfg)->framelist=NULL;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     sinfo_object_cfg_destroy (*cfg);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     *cfg=NULL;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objnod__ini__by__cpl_8h_source.html b/html/sinfo__objnod__ini__by__cpl_8h_source.html
index ad4078f..6480289 100644
--- a/html/sinfo__objnod__ini__by__cpl_8h_source.html
+++ b/html/sinfo__objnod__ini__by__cpl_8h_source.html
@@ -2,64 +2,95 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objnod_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objnod_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_object_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 04, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input handling for SPIFFIs creation of a data cube</span>
-<a name="l00025"></a>00025 <span class="comment">                        from a science object observation</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_OBJNOD_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJNOD_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_object_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                             Function prototypes </span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 object_config * 
-<a name="l00054"></a>00054 sinfo_parse_cpl_input_objnod(cpl_parameterlist * cpl_cfg, 
-<a name="l00055"></a>00055                              cpl_frameset* sof, 
-<a name="l00056"></a>00056                              cpl_frameset** stk) ;
-<a name="l00057"></a>00057 
-<a name="l00065"></a>00065 <span class="keywordtype">void</span> 
-<a name="l00066"></a>00066 sinfo_objnod_free(object_config ** cfg);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objnod_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_object_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 04, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input handling for SPIFFIs creation of a data cube</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        from a science object observation</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_OBJNOD_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJNOD_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_object_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> object_config * </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_parse_cpl_input_objnod(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                              cpl_frameset* sof, </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                              cpl_frameset** stk) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> sinfo_objnod_free(object_config ** cfg);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objspider__config_8c_source.html b/html/sinfo__objspider__config_8c_source.html
index b3763c1..0b2d1a7 100644
--- a/html/sinfo__objspider__config_8c_source.html
+++ b/html/sinfo__objspider__config_8c_source.html
@@ -2,313 +2,344 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objspider_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objspider_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_objspider_config.c,v 1.7 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Objspider Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_objspider_config.h"</span>
-<a name="l00050"></a>00050 <span class="keywordtype">void</span>
-<a name="l00051"></a>00051  sinfo_objspider_config_add(cpl_parameterlist *list)
-<a name="l00052"></a>00052 {
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   cpl_parameter *p;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056   <span class="keywordflow">if</span> (!list) {
-<a name="l00057"></a>00057     <span class="keywordflow">return</span>;
-<a name="l00058"></a>00058   }
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   <span class="comment">/* Input file name */</span>
-<a name="l00062"></a>00062   <span class="comment">/* Output file name */</span>
-<a name="l00063"></a>00063   <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00064"></a>00064   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.out_filename"</span>,
-<a name="l00065"></a>00065                   CPL_TYPE_STRING,
-<a name="l00066"></a>00066                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00067"></a>00067                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00068"></a>00068                               SKYSPIDER_OUT_FILENAME);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-skyspider_filename"</span>);
-<a name="l00072"></a>00072   cpl_parameterlist_append(list, p);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075   <span class="comment">/*Resampling */</span>
-<a name="l00076"></a>00076  <span class="comment">/* number of coefficients for the polynomial interpolation */</span>
-<a name="l00077"></a>00077   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.n_coeffs"</span>,
-<a name="l00078"></a>00078                   CPL_TYPE_INT,
-<a name="l00079"></a>00079                               <span class="stringliteral">"number of coefficients for the polynomial "</span>
-<a name="l00080"></a>00080                               <span class="stringliteral">"interpolation "</span>,
-<a name="l00081"></a>00081                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00082"></a>00082                                3);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-no-coeffs"</span>);
-<a name="l00085"></a>00085   cpl_parameterlist_append(list, p);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088   <span class="comment">/* Calibration */</span>
-<a name="l00089"></a>00089   <span class="comment">/* indicates if the halogen lamp features from flatfielding should be </span>
-<a name="l00090"></a>00090 <span class="comment">     corrected for or not */</span>
-<a name="l00091"></a>00091   <span class="comment">/*</span>
-<a name="l00092"></a>00092 <span class="comment">  p = cpl_parameter_new_value("sinfoni.objspider.halo_correct_index",</span>
-<a name="l00093"></a>00093 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00094"></a>00094 <span class="comment">                              "Halo Correct Index: "</span>
-<a name="l00095"></a>00095 <span class="comment">                               "indicates if the halogen lamp features from "</span>
-<a name="l00096"></a>00096 <span class="comment">                              "flatfielding should be corrected for (TRUE) "</span>
-<a name="l00097"></a>00097 <span class="comment">                              "or not (FALSE)",</span>
-<a name="l00098"></a>00098 <span class="comment">                              "sinfoni.objspider",</span>
-<a name="l00099"></a>00099 <span class="comment">                              FALSE);</span>
-<a name="l00100"></a>00100 <span class="comment"></span>
-<a name="l00101"></a>00101 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objspider-halo-corr-ind");</span>
-<a name="l00102"></a>00102 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00103"></a>00103 <span class="comment">  */</span>
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   <span class="comment">/* Cube Creation */</span>
-<a name="l00107"></a>00107   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span>
-<a name="l00108"></a>00108 <span class="comment">     (yes) or slitlet edge fits (no)</span>
-<a name="l00109"></a>00109 <span class="comment">  */</span>
-<a name="l00110"></a>00110   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.nord_south_index"</span>,
-<a name="l00111"></a>00111                   CPL_TYPE_BOOL,
-<a name="l00112"></a>00112                               <span class="stringliteral">"Nord South Index Switch: "</span>
-<a name="l00113"></a>00113                                <span class="stringliteral">"indicates if the slitlet distances are "</span>
-<a name="l00114"></a>00114                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span>
-<a name="l00115"></a>00115                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,
-<a name="l00116"></a>00116                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00117"></a>00117                               TRUE);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-ns-ind"</span>);
-<a name="l00121"></a>00121   cpl_parameterlist_append(list, p);
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.slitlets_position_list"</span>,
-<a name="l00124"></a>00124                   CPL_TYPE_STRING,
-<a name="l00125"></a>00125                               <span class="stringliteral">"Slitlets positions filename: "</span>
-<a name="l00126"></a>00126                                <span class="stringliteral">"list of the fitted slitlet edge positions "</span>
-<a name="l00127"></a>00127                               <span class="stringliteral">"or the distances of the slitlets"</span>,
-<a name="l00128"></a>00128                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00129"></a>00129                               <span class="stringliteral">"distances.fits"</span>);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-pos-list"</span>);
-<a name="l00133"></a>00133   cpl_parameterlist_append(list, p);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135   <span class="comment">/* number of slitlets (32) */</span>
-<a name="l00136"></a>00136   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.nslits"</span>,
-<a name="l00137"></a>00137                   CPL_TYPE_INT,
-<a name="l00138"></a>00138                               <span class="stringliteral">"Number of slitlets: "</span>,
-<a name="l00139"></a>00139                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00140"></a>00140                               32);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-pos-nslits"</span>);
-<a name="l00143"></a>00143   cpl_parameterlist_append(list, p);
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145   <span class="comment">/* Fine tuning */</span>
-<a name="l00146"></a>00146   <span class="comment">/* Method */</span>
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objspider.fine_tuning_method"</span>,
-<a name="l00149"></a>00149                   CPL_TYPE_STRING,
-<a name="l00150"></a>00150                               <span class="stringliteral">"Fine Tuning Method: "</span>
-<a name="l00151"></a>00151                                <span class="stringliteral">"indicator for the shifting method to use "</span>
-<a name="l00152"></a>00152                               <span class="stringliteral">"(P: polynomial interpolation, "</span>
-<a name="l00153"></a>00153                               <span class="stringliteral">" F: FFT, "</span>
-<a name="l00154"></a>00154                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,
-<a name="l00155"></a>00155                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00156"></a>00156                               <span class="stringliteral">"P"</span>,
-<a name="l00157"></a>00157                                3,<span class="stringliteral">"P"</span>,<span class="stringliteral">"F"</span>,<span class="stringliteral">"S"</span>);
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-fine-tune-mtd"</span>);
-<a name="l00160"></a>00160   cpl_parameterlist_append(list, p);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.order"</span>,
-<a name="l00163"></a>00163                   CPL_TYPE_INT,
-<a name="l00164"></a>00164                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> 
-<a name="l00165"></a>00165                               <span class="stringliteral">"order of the polynomial if the polynomial "</span>
-<a name="l00166"></a>00166                               <span class="stringliteral">"interpolation shifting method is used."</span>,
-<a name="l00167"></a>00167                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00168"></a>00168                               2);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-order"</span>);
-<a name="l00171"></a>00171   cpl_parameterlist_append(list, p);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   <span class="comment">/* Sky Extraction */</span>
-<a name="l00174"></a>00174   <span class="comment">/*Reconstruction */</span>
-<a name="l00175"></a>00175  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00176"></a>00176 <span class="comment">the average of columns */</span>
-<a name="l00177"></a>00177   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.lower_rejection"</span>,
-<a name="l00178"></a>00178                   CPL_TYPE_DOUBLE,
-<a name="l00179"></a>00179                               <span class="stringliteral">"lower rejection: "</span>
-<a name="l00180"></a>00180                               <span class="stringliteral">"percentage of rejected low value pixels "</span>
-<a name="l00181"></a>00181                               <span class="stringliteral">"for averaging the sky spectra"</span>,
-<a name="l00182"></a>00182                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00183"></a>00183                               10.);
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-lo-rejection"</span>);
-<a name="l00186"></a>00186   cpl_parameterlist_append(list, p);
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00189"></a>00189 <span class="comment">the average of columns */</span>
-<a name="l00190"></a>00190   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.higher_rejection"</span>,
-<a name="l00191"></a>00191                   CPL_TYPE_DOUBLE,
-<a name="l00192"></a>00192                               <span class="stringliteral">"higher rejection: "</span>
-<a name="l00193"></a>00193                               <span class="stringliteral">"percentage of rejected high value pixels "</span>
-<a name="l00194"></a>00194                               <span class="stringliteral">"for averaging the sky spectra"</span>,
-<a name="l00195"></a>00195                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00196"></a>00196                               10.);
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-hi-rejection"</span>);
-<a name="l00199"></a>00199   cpl_parameterlist_append(list, p);
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   <span class="comment">/* pixel tolerance, this distance tolerance to the diagonal dividing </span>
-<a name="l00202"></a>00202 <span class="comment">     line is not considered for the sky extraction to be sure to have a clean</span>
-<a name="l00203"></a>00203 <span class="comment">     sky due to positioning tolerance and crossing through pixels</span>
-<a name="l00204"></a>00204 <span class="comment">  */</span>
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.tolerance"</span>,
-<a name="l00207"></a>00207                   CPL_TYPE_INT,
-<a name="l00208"></a>00208                               <span class="stringliteral">"Tolerance: "</span>
-<a name="l00209"></a>00209                               <span class="stringliteral">"pixel tolerance, this distance tolerance to "</span>
-<a name="l00210"></a>00210                               <span class="stringliteral">"the diagonal dividing line is not considered "</span>
-<a name="l00211"></a>00211                               <span class="stringliteral">"for the sky extraction to be sure to have a "</span>
-<a name="l00212"></a>00212                               <span class="stringliteral">"clean sky due to positioning tolerance and "</span>
-<a name="l00213"></a>00213                               <span class="stringliteral">"crossing through pixels"</span>,
-<a name="l00214"></a>00214                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00215"></a>00215                               2);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-tol"</span>);
-<a name="l00218"></a>00218   cpl_parameterlist_append(list, p);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220   <span class="comment">/* Jittering */</span>
-<a name="l00221"></a>00221   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span>
-<a name="l00222"></a>00222 <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span>
-<a name="l00223"></a>00223 <span class="comment">     that means in auto-jittering mode!</span>
-<a name="l00224"></a>00224 <span class="comment">  */</span>
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.jitter_index"</span>,
-<a name="l00227"></a>00227                   CPL_TYPE_BOOL,
-<a name="l00228"></a>00228                               <span class="stringliteral">"Jitter Index: "</span>
-<a name="l00229"></a>00229                               <span class="stringliteral">"jitter mode indicator: "</span>
-<a name="l00230"></a>00230                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span>
-<a name="l00231"></a>00231                               <span class="stringliteral">"FALSE: user defined jitter"</span>
-<a name="l00232"></a>00232                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span>
-<a name="l00233"></a>00233                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span>
-<a name="l00234"></a>00234                               <span class="stringliteral">"that means in auto-jittering mode!"</span>,
-<a name="l00235"></a>00235                                <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00236"></a>00236                               FALSE);
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-jit-ind"</span>);
-<a name="l00239"></a>00239   cpl_parameterlist_append(list, p);
-<a name="l00240"></a>00240   <span class="comment">/*x-pixel size of the final combined data cube, must lie between 64 and 128 */</span>
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.size_x"</span>,
-<a name="l00243"></a>00243                   CPL_TYPE_INT,
-<a name="l00244"></a>00244                               <span class="stringliteral">"Cube x size: "</span>
-<a name="l00245"></a>00245                               <span class="stringliteral">"x-pixel size of the final combined data cube,"</span>
-<a name="l00246"></a>00246                               <span class="stringliteral">"must lie between 64 and 128. "</span>
-<a name="l00247"></a>00247                               <span class="stringliteral">"If 0 automatic setting."</span>,
-<a name="l00248"></a>00248                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00249"></a>00249                               0);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-size-x"</span>);
-<a name="l00252"></a>00252   cpl_parameterlist_append(list, p);
-<a name="l00253"></a>00253   <span class="comment">/*y-pixel size of the final combined data cube, must lie between 64 and 128 */</span>
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.size_y"</span>,
-<a name="l00256"></a>00256                   CPL_TYPE_INT,
-<a name="l00257"></a>00257                               <span class="stringliteral">"Cube y size: "</span>
-<a name="l00258"></a>00258                               <span class="stringliteral">"y-pixel size of the final combined data cube,"</span>
-<a name="l00259"></a>00259                               <span class="stringliteral">"must lie between 64 and 128. "</span>
-<a name="l00260"></a>00260                               <span class="stringliteral">"If 0 automatic setting."</span>,
-<a name="l00261"></a>00261                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00262"></a>00262                               0);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-size-y"</span>);
-<a name="l00265"></a>00265   cpl_parameterlist_append(list, p);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   <span class="comment">/* Kernel Type */</span>
-<a name="l00268"></a>00268   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span>
-<a name="l00269"></a>00269 <span class="comment">     correct places inside the big combined cube. That you want to generate </span>
-<a name="l00270"></a>00270 <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span>
-<a name="l00271"></a>00271 <span class="comment">     Supported kernels are:</span>
-<a name="l00272"></a>00272 <span class="comment"></span>
-<a name="l00273"></a>00273 <span class="comment">                                     NULL:      default kernel, currently tanh</span>
-<a name="l00274"></a>00274 <span class="comment">                                     default: dito</span>
-<a name="l00275"></a>00275 <span class="comment">                                     tanh:    Hyperbolic tangent</span>
-<a name="l00276"></a>00276 <span class="comment">                                     sinc2:   Square sinc</span>
-<a name="l00277"></a>00277 <span class="comment">                                     lanczos: Lanczos2 kernel</span>
-<a name="l00278"></a>00278 <span class="comment">                                     hamming: Hamming kernel</span>
-<a name="l00279"></a>00279 <span class="comment">                                     hann:    Hann kernel</span>
-<a name="l00280"></a>00280 <span class="comment">  */</span>
-<a name="l00281"></a>00281   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objspider.kernel_type"</span>,
-<a name="l00282"></a>00282                   CPL_TYPE_STRING,
-<a name="l00283"></a>00283                               <span class="stringliteral">"Kernel Type:"</span>
-<a name="l00284"></a>00284                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span>
-<a name="l00285"></a>00285                               <span class="stringliteral">"the single cubes  to the correct places inside "</span>
-<a name="l00286"></a>00286                  <span class="stringliteral">"the big combined cube"</span>,
-<a name="l00287"></a>00287                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00288"></a>00288                               <span class="stringliteral">"tanh"</span>,
-<a name="l00289"></a>00289                                6,<span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,
-<a name="l00290"></a>00290                                <span class="stringliteral">"sinc2"</span>,<span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-kernel-typ"</span>);
-<a name="l00293"></a>00293   cpl_parameterlist_append(list, p);
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   <span class="comment">/* name of the final mask data cube, pixel value 0 if no data available,</span>
-<a name="l00296"></a>00296 <span class="comment">     sum of exposure times in the overlapping regions</span>
-<a name="l00297"></a>00297 <span class="comment">  */</span>
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.mask_name"</span>,
-<a name="l00300"></a>00300                   CPL_TYPE_STRING,
-<a name="l00301"></a>00301                               <span class="stringliteral">"Mask Name: "</span>
-<a name="l00302"></a>00302                               <span class="stringliteral">"name of the final mask data cube, "</span>
-<a name="l00303"></a>00303                               <span class="stringliteral">"pixel value 0 if no data available,"</span>
-<a name="l00304"></a>00304                               <span class="stringliteral">"sum of exposure times in the overlapping "</span>
-<a name="l00305"></a>00305                               <span class="stringliteral">"regions "</span>,
-<a name="l00306"></a>00306                               <span class="stringliteral">"sinfoni.objspider"</span>,
-<a name="l00307"></a>00307                               SKYSPIDER_MASK_OUT_FILENAME);
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-mask"</span>);
-<a name="l00310"></a>00310   cpl_parameterlist_append(list, p);
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objspider_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_objspider_config.c,v 1.7 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Objspider Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_objspider_config.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>  sinfo_objspider_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="comment">/* Input file name */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.out_filename"</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               SKYSPIDER_OUT_FILENAME);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-skyspider_filename"</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="comment">/*Resampling */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>  <span class="comment">/* number of coefficients for the polynomial interpolation */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.n_coeffs"</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                               <span class="stringliteral">"number of coefficients for the polynomial "</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"interpolation "</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                3);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-no-coeffs"</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="comment">/* Calibration */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="comment">/* indicates if the halogen lamp features from flatfielding should be </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">     corrected for or not */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.objspider.halo_correct_index",</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                              "Halo Correct Index: "</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">                               "indicates if the halogen lamp features from "</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">                              "flatfielding should be corrected for (TRUE) "</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">                              "or not (FALSE)",</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">                              "sinfoni.objspider",</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">                              FALSE);</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment"></span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"objspider-halo-corr-ind");</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="comment">/* Cube Creation */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">     (yes) or slitlet edge fits (no)</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.nord_south_index"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"Nord South Index Switch: "</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                                <span class="stringliteral">"indicates if the slitlet distances are "</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                               TRUE);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-ns-ind"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.slitlets_position_list"</span>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                               <span class="stringliteral">"Slitlets positions filename: "</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                                <span class="stringliteral">"list of the fitted slitlet edge positions "</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                               <span class="stringliteral">"or the distances of the slitlets"</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                               <span class="stringliteral">"distances.fits"</span>);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-pos-list"</span>);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="comment">/* number of slitlets (32) */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.nslits"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"Number of slitlets: "</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                               32);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-pos-nslits"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="comment">/* Fine tuning */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="comment">/* Method */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objspider.fine_tuning_method"</span>,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                               <span class="stringliteral">"Fine Tuning Method: "</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                <span class="stringliteral">"indicator for the shifting method to use "</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                               <span class="stringliteral">"(P: polynomial interpolation, "</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                               <span class="stringliteral">" F: FFT, "</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                               <span class="stringliteral">"P"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                3,<span class="stringliteral">"P"</span>,<span class="stringliteral">"F"</span>,<span class="stringliteral">"S"</span>);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-fine-tune-mtd"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.order"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                               <span class="stringliteral">"order of the polynomial if the polynomial "</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                               <span class="stringliteral">"interpolation shifting method is used."</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                               2);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-order"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="comment">/* Sky Extraction */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="comment">/*Reconstruction */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>  <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.lower_rejection"</span>,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                               <span class="stringliteral">"lower rejection: "</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"percentage of rejected low value pixels "</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"for averaging the sky spectra"</span>,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                               10.);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-lo-rejection"</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.higher_rejection"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               <span class="stringliteral">"higher rejection: "</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                               <span class="stringliteral">"percentage of rejected high value pixels "</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                               <span class="stringliteral">"for averaging the sky spectra"</span>,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                               10.);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-hi-rejection"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="comment">/* pixel tolerance, this distance tolerance to the diagonal dividing </span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">     line is not considered for the sky extraction to be sure to have a clean</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">     sky due to positioning tolerance and crossing through pixels</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.tolerance"</span>,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"Tolerance: "</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"pixel tolerance, this distance tolerance to "</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"the diagonal dividing line is not considered "</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               <span class="stringliteral">"for the sky extraction to be sure to have a "</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               <span class="stringliteral">"clean sky due to positioning tolerance and "</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                               <span class="stringliteral">"crossing through pixels"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               2);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-tol"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="comment">/* Jittering */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">     that means in auto-jittering mode!</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.jitter_index"</span>,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                               <span class="stringliteral">"Jitter Index: "</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                               <span class="stringliteral">"jitter mode indicator: "</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                               <span class="stringliteral">"FALSE: user defined jitter"</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                               <span class="stringliteral">"that means in auto-jittering mode!"</span>,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                                <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                               FALSE);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-jit-ind"</span>);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="comment">/*x-pixel size of the final combined data cube, must lie between 64 and 128 */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.size_x"</span>,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               <span class="stringliteral">"Cube x size: "</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                               <span class="stringliteral">"x-pixel size of the final combined data cube,"</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                               <span class="stringliteral">"must lie between 64 and 128. "</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                               <span class="stringliteral">"If 0 automatic setting."</span>,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                               0);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-size-x"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="comment">/*y-pixel size of the final combined data cube, must lie between 64 and 128 */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.size_y"</span>,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                               <span class="stringliteral">"Cube y size: "</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                               <span class="stringliteral">"y-pixel size of the final combined data cube,"</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="stringliteral">"must lie between 64 and 128. "</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                               <span class="stringliteral">"If 0 automatic setting."</span>,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                               0);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-size-y"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="comment">/* Kernel Type */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">     correct places inside the big combined cube. That you want to generate </span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">     Supported kernels are:</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment"></span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">                                     NULL:      default kernel, currently tanh</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">                                     default: dito</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">                                     tanh:    Hyperbolic tangent</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">                                     sinc2:   Square sinc</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">                                     lanczos: Lanczos2 kernel</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">                                     hamming: Hamming kernel</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">                                     hann:    Hann kernel</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objspider.kernel_type"</span>,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                               <span class="stringliteral">"Kernel Type:"</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                               <span class="stringliteral">"the single cubes  to the correct places inside "</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                  <span class="stringliteral">"the big combined cube"</span>,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                               <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                                6,<span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                <span class="stringliteral">"sinc2"</span>,<span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-kernel-typ"</span>);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="comment">/* name of the final mask data cube, pixel value 0 if no data available,</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">     sum of exposure times in the overlapping regions</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objspider.mask_name"</span>,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                               <span class="stringliteral">"Mask Name: "</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                               <span class="stringliteral">"name of the final mask data cube, "</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                               <span class="stringliteral">"pixel value 0 if no data available,"</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                               <span class="stringliteral">"sum of exposure times in the overlapping "</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                               <span class="stringliteral">"regions "</span>,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                               <span class="stringliteral">"sinfoni.objspider"</span>,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                               SKYSPIDER_MASK_OUT_FILENAME);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objspider-mask"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objspider__config_8h_source.html b/html/sinfo__objspider__config_8h_source.html
index 02f8c6b..3ef8fe7 100644
--- a/html/sinfo__objspider__config_8h_source.html
+++ b/html/sinfo__objspider__config_8h_source.html
@@ -2,48 +2,79 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objspider_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objspider_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_objspider_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Objspider Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00032"></a>00032 <span class="keywordtype">void</span>
-<a name="l00033"></a>00033 sinfo_objspider_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objspider_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_objspider_config.h,v 1.1 2006/10/20 08:06:32 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:32 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Objspider Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> sinfo_objspider_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objspider__ini__by__cpl_8c_source.html b/html/sinfo__objspider__ini__by__cpl_8c_source.html
index a01166d..3b8944d 100644
--- a/html/sinfo__objspider__ini__by__cpl_8c_source.html
+++ b/html/sinfo__objspider__ini__by__cpl_8c_source.html
@@ -2,393 +2,424 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objspider_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objspider_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_objspider_ini_by_cpl.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   May 22, 2004</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   object cube creation cpl input handling for SPIFFI</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_objspider_ini_by_cpl.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_cpl_size.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                    Functions private to this module</span>
-<a name="l00045"></a>00045 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00048"></a>00048 parse_section_frames(object_config *,
-<a name="l00049"></a>00049                      cpl_frameset* sof, cpl_frameset**stk, <span class="keywordtype">int</span>* status);
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00051"></a>00051 parse_section_jittering(object_config *, cpl_parameterlist * cpl_cfg);
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00053"></a>00053 parse_section_resampling(object_config *, cpl_parameterlist * cpl_cfg);
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00055"></a>00055 parse_section_calibration(object_config *);
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00057"></a>00057 parse_section_cubecreation(object_config *, cpl_parameterlist * cpl_cfg);
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00059"></a>00059 parse_section_finetuning(object_config *, cpl_parameterlist * cpl_cfg);
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00061"></a>00061 parse_section_skyextraction(object_config *, cpl_parameterlist * cpl_cfg);
-<a name="l00071"></a>00071 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 object_config * 
-<a name="l00085"></a>00085 sinfo_parse_cpl_input_objspider(cpl_parameterlist * cpl_cfg,cpl_frameset* sof,
-<a name="l00086"></a>00086               cpl_frameset** stk)
-<a name="l00087"></a>00087 {
-<a name="l00088"></a>00088    object_config   *  cfg = sinfo_object_cfg_create();
-<a name="l00089"></a>00089    <span class="keywordtype">int</span> status=0;
-<a name="l00090"></a>00090    <span class="comment">/*</span>
-<a name="l00091"></a>00091 <span class="comment">    * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00092"></a>00092 <span class="comment">    * found in the ini file</span>
-<a name="l00093"></a>00093 <span class="comment">    */</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095    
-<a name="l00096"></a>00096    parse_section_resampling   (cfg, cpl_cfg);
-<a name="l00097"></a>00097    parse_section_calibration  (cfg);
-<a name="l00098"></a>00098    parse_section_cubecreation (cfg, cpl_cfg);
-<a name="l00099"></a>00099    parse_section_finetuning   (cfg, cpl_cfg); 
-<a name="l00100"></a>00100    parse_section_skyextraction(cfg, cpl_cfg); 
-<a name="l00101"></a>00101    parse_section_jittering    (cfg, cpl_cfg);
-<a name="l00102"></a>00102    parse_section_frames       (cfg, sof,stk,&status);
-<a name="l00103"></a>00103    <span class="keywordflow">if</span> (status > 0) {
-<a name="l00104"></a>00104                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00105"></a>00105                 sinfo_object_cfg_destroy(cfg);
-<a name="l00106"></a>00106                 cfg = NULL ;
-<a name="l00107"></a>00107                 <span class="keywordflow">return</span> NULL ;
-<a name="l00108"></a>00108    }
-<a name="l00109"></a>00109  
-<a name="l00110"></a>00110    <span class="keywordflow">return</span> cfg ;
-<a name="l00111"></a>00111 }
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keywordtype">void</span>      
-<a name="l00114"></a>00114 parse_section_frames(object_config * cfg, 
-<a name="l00115"></a>00115              cpl_frameset* sof,
-<a name="l00116"></a>00116                      cpl_frameset** stk,
-<a name="l00117"></a>00117                      <span class="keywordtype">int</span>* status)
-<a name="l00118"></a>00118 {
-<a name="l00119"></a>00119    <span class="keywordtype">int</span>                     nraw_good =0;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123    <span class="keywordtype">int</span> nframes=0;
-<a name="l00124"></a>00124    <span class="keywordtype">int</span> nraw=0;
-<a name="l00125"></a>00125    cpl_frame* frame   = NULL;
-<a name="l00126"></a>00126    <span class="keywordtype">int</span> nstk=0;
-<a name="l00127"></a>00127    cpl_size             *   labels=NULL ;
-<a name="l00128"></a>00128    cpl_size                 nlabels=0 ;
-<a name="l00129"></a>00129    cpl_frameset    *   cur_set=NULL ;
-<a name="l00130"></a>00130    cpl_frame       *   cur_frame=NULL ;
-<a name="l00131"></a>00131    <span class="keywordtype">char</span> * tag=NULL;
-<a name="l00132"></a>00132    <span class="keywordtype">int</span> i=0;
-<a name="l00133"></a>00133    <span class="keywordtype">int</span> wave_map=0;
-<a name="l00134"></a>00134    <span class="keywordtype">int</span> pos_slit=0;
-<a name="l00135"></a>00135    <span class="keywordtype">int</span> first_col=0;
-<a name="l00136"></a>00136    <span class="keywordtype">int</span> halo_sp=0;
-<a name="l00137"></a>00137    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00138"></a>00138    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00139"></a>00139    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00140"></a>00140    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142    nframes = cpl_frameset_get_size(sof);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144    <span class="comment">/* Get the raw and the calibration files */</span>
-<a name="l00145"></a>00145    <span class="comment">/* Labelise the input frames according to their tags */</span>
-<a name="l00146"></a>00146    labels = cpl_frameset_labelise(sof, sinfo_compare_tags,&nlabels );
-<a name="l00147"></a>00147    <span class="keywordflow">if</span> (labels == NULL) {
-<a name="l00148"></a>00148      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot labelise the input frames"</span>) ;
-<a name="l00149"></a>00149      (*status)++;
-<a name="l00150"></a>00150      return ;
-<a name="l00151"></a>00151    }
-<a name="l00152"></a>00152    <span class="keywordflow">if</span> (nlabels == 1) {
-<a name="l00153"></a>00153       <span class="comment">/* Only one label - all images are objects observations */</span>
-<a name="l00154"></a>00154       <span class="comment">/* Verify that it is really an observation */</span>
-<a name="l00155"></a>00155       cur_frame = cpl_frameset_get_frame(sof, 0) ;
-<a name="l00156"></a>00156       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(cur_frame) ;
-<a name="l00157"></a>00157       <span class="keywordflow">if</span> (sinfo_is_stack(tag)) {
-<a name="l00158"></a>00158     *stk = cpl_frameset_duplicate(sof) ;
-<a name="l00159"></a>00159     nstk++;
-<a name="l00160"></a>00160       }
-<a name="l00161"></a>00161    } <span class="keywordflow">else</span> {
-<a name="l00162"></a>00162      <span class="comment">/* For each label */</span>
-<a name="l00163"></a>00163      <span class="keywordflow">for</span> (i=0 ; i<nlabels ; i++) {
-<a name="l00164"></a>00164        cur_set = cpl_frameset_extract(sof, labels, i) ;
-<a name="l00165"></a>00165        cur_frame = cpl_frameset_get_frame(cur_set, 0) ;
-<a name="l00166"></a>00166        tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(cur_frame) ;
-<a name="l00167"></a>00167        <span class="keywordflow">if</span> (sinfo_is_stack(tag) == 1) {
-<a name="l00168"></a>00168      <span class="comment">/* Stacked frame */</span>
-<a name="l00169"></a>00169      *stk = cpl_frameset_duplicate(cur_set) ;
-<a name="l00170"></a>00170      nstk++;
-<a name="l00171"></a>00171        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_wavemap(tag)) {
-<a name="l00172"></a>00172      <span class="comment">/* pos slit calibration file */</span>
-<a name="l00173"></a>00173      strcpy(cfg -> wavemap,cpl_strdup(cpl_frame_get_filename(cur_frame)));
-<a name="l00174"></a>00174      wave_map=1;
-<a name="l00175"></a>00175        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_distlist(tag)) {
-<a name="l00176"></a>00176      <span class="comment">/* pos slit calibration file */</span>
-<a name="l00177"></a>00177      strcpy(cfg -> poslist,cpl_strdup(cpl_frame_get_filename(cur_frame)));
-<a name="l00178"></a>00178      pos_slit=1;
-<a name="l00179"></a>00179        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_firstcol(tag)) { 
-<a name="l00180"></a>00180      <span class="comment">/* first col calibration file */</span>
-<a name="l00181"></a>00181      strcpy(cfg -> firstCol,cpl_strdup(cpl_frame_get_filename(cur_frame)));
-<a name="l00182"></a>00182      first_col=1;
-<a name="l00183"></a>00183        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_halosp(tag)) { 
-<a name="l00184"></a>00184      <span class="comment">/* first col calibration file */</span>
-<a name="l00185"></a>00185      strcpy(cfg->halospectrum,cpl_strdup(cpl_frame_get_filename(cur_frame)));
-<a name="l00186"></a>00186      halo_sp=1;
-<a name="l00187"></a>00187        }
-<a name="l00188"></a>00188        cpl_frameset_delete(cur_set) ;
-<a name="l00189"></a>00189      }
-<a name="l00190"></a>00190    }
-<a name="l00191"></a>00191    cpl_free(labels) ;
-<a name="l00192"></a>00192    <span class="keywordflow">if</span> (nstk == 0) {
-<a name="l00193"></a>00193      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find good input frames"</span>) ;
-<a name="l00194"></a>00194      (*status)++;
-<a name="l00195"></a>00195      return ;
-<a name="l00196"></a>00196    }
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198    <span class="keywordflow">if</span> (wave_map == 0) {
-<a name="l00199"></a>00199      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find wave map"</span>);
-<a name="l00200"></a>00200      (*status)++;
-<a name="l00201"></a>00201      return ;
-<a name="l00202"></a>00202    }
-<a name="l00203"></a>00203    <span class="keywordflow">if</span> (pos_slit == 0) {
-<a name="l00204"></a>00204      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find pos slit"</span>) ;
-<a name="l00205"></a>00205      (*status)++;
-<a name="l00206"></a>00206      return ;
-<a name="l00207"></a>00207    }
-<a name="l00208"></a>00208    <span class="keywordflow">if</span> (first_col == 0) {
-<a name="l00209"></a>00209      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find first col"</span>) ;
-<a name="l00210"></a>00210      (*status)++;
-<a name="l00211"></a>00211      return ;
-<a name="l00212"></a>00212    }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215    <span class="comment">/* TEMPORALLY COMMENTED OUT */</span>
-<a name="l00216"></a>00216    nraw    = cpl_frameset_get_size(*stk);
-<a name="l00217"></a>00217    <span class="comment">/* Test if the rawframes have been found */</span>
-<a name="l00218"></a>00218    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00219"></a>00219      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames in the input list"</span>) ;
-<a name="l00220"></a>00220      (*status)++;
-<a name="l00221"></a>00221      return ;
-<a name="l00222"></a>00222    }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224    nraw    = cpl_frameset_get_size(*stk);
-<a name="l00225"></a>00225    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00226"></a>00226      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no raw frame in input, something wrong!"</span>);
-<a name="l00227"></a>00227      exit(-1);
-<a name="l00228"></a>00228    }
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00231"></a>00231    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   <span class="comment">/* read input frames */</span>
-<a name="l00234"></a>00234    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00235"></a>00235      frame = cpl_frameset_get_frame(*stk,i);
-<a name="l00236"></a>00236      <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) {
-<a name="l00237"></a>00237        cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00238"></a>00238        nraw_good++;
-<a name="l00239"></a>00239      }
-<a name="l00240"></a>00240      <span class="comment">/* Store file name into framelist */</span>
-<a name="l00241"></a>00241    }
-<a name="l00242"></a>00242    <span class="keywordflow">if</span> (nraw_good < 1) {
-<a name="l00243"></a>00243      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input!"</span>);
-<a name="l00244"></a>00244      (*status)++;
-<a name="l00245"></a>00245      <span class="keywordflow">return</span>;
-<a name="l00246"></a>00246    }
-<a name="l00247"></a>00247    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00248"></a>00248    cfg->nframes         = nraw ;
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250    strcpy(cfg -> outName, SKYSPIDER_OUT_FILENAME);
-<a name="l00251"></a>00251    strcpy(cfg -> maskname, SKYSPIDER_MASK_OUT_FILENAME);
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254    frame = cpl_frameset_get_frame(*stk,0);
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00257"></a>00257    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) {
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259    <span class="keywordflow">case</span> 0: 
-<a name="l00260"></a>00260      strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00261"></a>00261      <span class="keywordflow">break</span>;
-<a name="l00262"></a>00262    <span class="keywordflow">case</span> 1: 
-<a name="l00263"></a>00263      strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00264"></a>00264      <span class="keywordflow">break</span>;
-<a name="l00265"></a>00265    <span class="keywordflow">case</span> -1:
-<a name="l00266"></a>00266      strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00267"></a>00267      <span class="keywordflow">break</span>;
-<a name="l00268"></a>00268    <span class="keywordflow">default</span>: 
-<a name="l00269"></a>00269      strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00270"></a>00270      <span class="keywordflow">break</span>;
-<a name="l00271"></a>00271    }
-<a name="l00272"></a>00272    sinfo_get_band(frame,band);
-<a name="l00273"></a>00273    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s "</span>,
-<a name="l00274"></a>00274            spat_res,    lamp_status,    band);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277    sinfo_get_ins_set(band,&ins_set);
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281    <span class="keywordflow">return</span>;
-<a name="l00282"></a>00282 }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00286"></a>00286 parse_section_jittering(object_config * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00287"></a>00287 {
-<a name="l00288"></a>00288   cpl_parameter* p;
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.jitter_index"</span>);
-<a name="l00291"></a>00291   cfg -> jitterind = cpl_parameter_get_bool(p);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.size_x"</span>);
-<a name="l00294"></a>00294   cfg -> size_x = cpl_parameter_get_int(p);
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.size_y"</span>);
-<a name="l00297"></a>00297   cfg -> size_y = cpl_parameter_get_int(p);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.kernel_type"</span>);
-<a name="l00300"></a>00300   strcpy(cfg -> kernel_type, cpl_parameter_get_string(p));
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   <span class="comment">/*</span>
-<a name="l00303"></a>00303 <span class="comment">  p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.mask");</span>
-<a name="l00304"></a>00304 <span class="comment">  strcpy(cfg -> maskname, cpl_parameter_get_string(p));</span>
-<a name="l00305"></a>00305 <span class="comment">  */</span>
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 }
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00310"></a>00310 parse_section_resampling(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00311"></a>00311 {
-<a name="l00312"></a>00312   cpl_parameter* p;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.n_coeffs"</span>);
-<a name="l00315"></a>00315   cfg -> ncoeffs = cpl_parameter_get_int(p);
-<a name="l00316"></a>00316   cfg -> nrows=SINFO_RESAMP_NROWS;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319   return ;
-<a name="l00320"></a>00320 }
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00323"></a>00323 parse_section_calibration(object_config * cfg)
-<a name="l00324"></a>00324 {
-<a name="l00325"></a>00325   <span class="comment">/*</span>
-<a name="l00326"></a>00326 <span class="comment">  cpl_parameter* p;</span>
-<a name="l00327"></a>00327 <span class="comment">  p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.halo_correct_index");</span>
-<a name="l00328"></a>00328 <span class="comment">  cfg -> halocorrectInd = cpl_parameter_get_bool(p);</span>
-<a name="l00329"></a>00329 <span class="comment">  */</span>
-<a name="l00330"></a>00330   cfg -> halocorrectInd=0;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332   <span class="comment">/*</span>
-<a name="l00333"></a>00333 <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.halo_spectrum_filename");</span>
-<a name="l00334"></a>00334 <span class="comment">  strcpy(cfg -> halospectrum, cpl_parameter_get_string(p));</span>
-<a name="l00335"></a>00335 <span class="comment">  */</span>
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337 }
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00340"></a>00340 parse_section_cubecreation(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00341"></a>00341 {
-<a name="l00342"></a>00342   cpl_parameter* p;
-<a name="l00343"></a>00343   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.nord_south_index"</span>);
-<a name="l00344"></a>00344   cfg -> northsouthInd = cpl_parameter_get_bool(p);
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346   <span class="comment">/*</span>
-<a name="l00347"></a>00347 <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.slitlets_position_list");</span>
-<a name="l00348"></a>00348 <span class="comment">  strcpy(cfg -> poslist, cpl_parameter_get_string(p));</span>
-<a name="l00349"></a>00349 <span class="comment">  */</span>
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.nslits"</span>);
-<a name="l00352"></a>00352   cfg -> nslits = cpl_parameter_get_int(p);
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354   <span class="comment">/*</span>
-<a name="l00355"></a>00355 <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.first_column_filename");</span>
-<a name="l00356"></a>00356 <span class="comment">  strcpy(cfg -> firstCol, cpl_parameter_get_string(p));</span>
-<a name="l00357"></a>00357 <span class="comment">  */</span>
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359    return ;
-<a name="l00360"></a>00360 }
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00363"></a>00363 parse_section_finetuning(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00364"></a>00364 {
-<a name="l00365"></a>00365   cpl_parameter* p;
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.fine_tuning_method"</span>);
-<a name="l00368"></a>00368   strcpy(cfg -> method, cpl_parameter_get_string(p));
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.order"</span>);
-<a name="l00371"></a>00371   cfg -> order = cpl_parameter_get_int(p);
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373 }
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00376"></a>00376 parse_section_skyextraction(object_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00377"></a>00377 {
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379   cpl_parameter* p;
-<a name="l00380"></a>00380   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.lower_rejection"</span>);
-<a name="l00381"></a>00381   cfg -> loReject = (float) cpl_parameter_get_double(p);
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.higher_rejection"</span>);
-<a name="l00384"></a>00384   cfg -> hiReject = (float) cpl_parameter_get_double(p);
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.tolerance"</span>);
-<a name="l00387"></a>00387   cfg -> tolerance = cpl_parameter_get_int(p);
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 }
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 <span class="comment">/*-----------------------------------------------------------------*/</span>
-<a name="l00392"></a>00392 <span class="keywordtype">void</span>
-<a name="l00393"></a>00393 sinfo_objspider_free(object_config * cfg) {
-<a name="l00394"></a>00394   cpl_free(cfg->framelist);
-<a name="l00395"></a>00395   sinfo_object_cfg_destroy (cfg);
-<a name="l00396"></a>00396   <span class="keywordflow">return</span>;
-<a name="l00397"></a>00397 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objspider_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_objspider_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   May 22, 2004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   object cube creation cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_objspider_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_cpl_size.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> parse_section_frames(object_config *,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                      cpl_frameset* sof, cpl_frameset**stk, <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> parse_section_jittering(object_config *, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> parse_section_resampling(object_config *, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> parse_section_calibration(object_config *);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> parse_section_cubecreation(object_config *, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> parse_section_finetuning(object_config *, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> parse_section_skyextraction(object_config *, cpl_parameterlist * cpl_cfg);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> object_config * </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_parse_cpl_input_objspider(cpl_parameterlist * cpl_cfg,cpl_frameset* sof,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>               cpl_frameset** stk)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>    object_config   *  cfg = sinfo_object_cfg_create();</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>    <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">    * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">    * found in the ini file</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>    </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>    parse_section_resampling   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>    parse_section_calibration  (cfg);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    parse_section_cubecreation (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    parse_section_finetuning   (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    parse_section_skyextraction(cfg, cpl_cfg); </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    parse_section_jittering    (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    parse_section_frames       (cfg, sof,stk,&status);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                 sinfo_object_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>    }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>  </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keyword">static</span> <span class="keywordtype">void</span>      </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> parse_section_frames(object_config * cfg, </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>              cpl_frameset* sof,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                      cpl_frameset** stk,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    <span class="keywordtype">int</span>                     nraw_good =0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>    <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    <span class="keywordtype">int</span> nstk=0;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>    cpl_size             *   labels=NULL ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    cpl_size                 nlabels=0 ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    cpl_frameset    *   cur_set=NULL ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>    cpl_frame       *   cur_frame=NULL ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>    <span class="keywordtype">char</span> * tag=NULL;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    <span class="keywordtype">int</span> wave_map=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>    <span class="keywordtype">int</span> pos_slit=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    <span class="keywordtype">int</span> first_col=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>    <span class="keywordtype">int</span> halo_sp=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>    nframes = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="comment">/* Get the raw and the calibration files */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    <span class="comment">/* Labelise the input frames according to their tags */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>    labels = cpl_frameset_labelise(sof, sinfo_compare_tags,&nlabels );</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    <span class="keywordflow">if</span> (labels == NULL) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot labelise the input frames"</span>) ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>      (*status)++;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>      return ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>    <span class="keywordflow">if</span> (nlabels == 1) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       <span class="comment">/* Only one label - all images are objects observations */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <span class="comment">/* Verify that it is really an observation */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       cur_frame = cpl_frameset_get_frame(sof, 0) ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>       tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(cur_frame) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       <span class="keywordflow">if</span> (sinfo_is_stack(tag)) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     *stk = cpl_frameset_duplicate(sof) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     nstk++;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>      <span class="comment">/* For each label */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>      <span class="keywordflow">for</span> (i=0 ; i<nlabels ; i++) {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>        cur_set = cpl_frameset_extract(sof, labels, i) ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>        cur_frame = cpl_frameset_get_frame(cur_set, 0) ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>        tag = (<span class="keywordtype">char</span>*)cpl_frame_get_tag(cur_frame) ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>        <span class="keywordflow">if</span> (sinfo_is_stack(tag) == 1) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>      <span class="comment">/* Stacked frame */</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>      *stk = cpl_frameset_duplicate(cur_set) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>      nstk++;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_wavemap(tag)) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>      <span class="comment">/* pos slit calibration file */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>      strcpy(cfg -> wavemap,cpl_strdup(cpl_frame_get_filename(cur_frame)));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>      wave_map=1;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_distlist(tag)) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>      <span class="comment">/* pos slit calibration file */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>      strcpy(cfg -> poslist,cpl_strdup(cpl_frame_get_filename(cur_frame)));</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>      pos_slit=1;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_firstcol(tag)) { </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>      <span class="comment">/* first col calibration file */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>      strcpy(cfg -> firstCol,cpl_strdup(cpl_frame_get_filename(cur_frame)));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>      first_col=1;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sinfo_is_halosp(tag)) { </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>      <span class="comment">/* first col calibration file */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>      strcpy(cfg->halospectrum,cpl_strdup(cpl_frame_get_filename(cur_frame)));</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>      halo_sp=1;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>        }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>        cpl_frameset_delete(cur_set) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>      }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>    }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    cpl_free(labels) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>    <span class="keywordflow">if</span> (nstk == 0) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find good input frames"</span>) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>      (*status)++;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>      return ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>    }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    <span class="keywordflow">if</span> (wave_map == 0) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find wave map"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>      (*status)++;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>      return ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    <span class="keywordflow">if</span> (pos_slit == 0) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find pos slit"</span>) ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>      (*status)++;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>      return ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>    <span class="keywordflow">if</span> (first_col == 0) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot find first col"</span>) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>      (*status)++;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>      return ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    <span class="comment">/* TEMPORALLY COMMENTED OUT */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>    nraw    = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    <span class="comment">/* Test if the rawframes have been found */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames in the input list"</span>) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>      (*status)++;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>      return ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    nraw    = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no raw frame in input, something wrong!"</span>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>      exit(-1);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>    }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>      frame = cpl_frameset_get_frame(*stk,i);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>      <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>        cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>        nraw_good++;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>      }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>      <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    <span class="keywordflow">if</span> (nraw_good < 1) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good raw frame in input!"</span>);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>      (*status)++;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>      <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    strcpy(cfg -> outName, SKYSPIDER_OUT_FILENAME);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    strcpy(cfg -> maskname, SKYSPIDER_MASK_OUT_FILENAME);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    frame = cpl_frameset_get_frame(*stk,0);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>      strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>      strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>    <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>      strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>    <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>      strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s "</span>,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>            spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> parse_section_jittering(object_config * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.jitter_index"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   cfg -> jitterind = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.size_x"</span>);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   cfg -> size_x = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.size_y"</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   cfg -> size_y = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.kernel_type"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   strcpy(cfg -> kernel_type, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">  p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.mask");</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">  strcpy(cfg -> maskname, cpl_parameter_get_string(p));</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> parse_section_resampling(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.n_coeffs"</span>);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   cfg -> ncoeffs = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   cfg -> nrows=SINFO_RESAMP_NROWS;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   return ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> parse_section_calibration(object_config * cfg)</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">  cpl_parameter* p;</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">  p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.halo_correct_index");</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">  cfg -> halocorrectInd = cpl_parameter_get_bool(p);</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   cfg -> halocorrectInd=0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.halo_spectrum_filename");</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">  strcpy(cfg -> halospectrum, cpl_parameter_get_string(p));</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> parse_section_cubecreation(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> {</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.nord_south_index"</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   cfg -> northsouthInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.slitlets_position_list");</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">  strcpy(cfg -> poslist, cpl_parameter_get_string(p));</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.nslits"</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   cfg -> nslits = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">  p=cpl_parameterlist_find(cpl_cfg,"sinfoni.objspider.first_column_filename");</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">  strcpy(cfg -> firstCol, cpl_parameter_get_string(p));</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>    return ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> parse_section_finetuning(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.fine_tuning_method"</span>);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   strcpy(cfg -> method, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.order"</span>);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   cfg -> order = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> parse_section_skyextraction(object_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.lower_rejection"</span>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   cfg -> loReject = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.higher_rejection"</span>);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   cfg -> hiReject = (float) cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.objspider.tolerance"</span>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   cfg -> tolerance = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">/*-----------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> sinfo_objspider_free(object_config * cfg) {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   cpl_free(cfg->framelist);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   sinfo_object_cfg_destroy (cfg);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__objspider__ini__by__cpl_8h_source.html b/html/sinfo__objspider__ini__by__cpl_8h_source.html
index da13060..16c0961 100644
--- a/html/sinfo__objspider__ini__by__cpl_8h_source.html
+++ b/html/sinfo__objspider__ini__by__cpl_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_objspider_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_objspider_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_object_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 04, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input handling for SPIFFIs creation of a data cube</span>
-<a name="l00025"></a>00025 <span class="comment">                        from a science object observation</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_OBJSPIDER_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJSPIDER_INI_BY_CPL_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_object_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                             Function prototypes </span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00052"></a>00052 object_config * 
-<a name="l00053"></a>00053 sinfo_parse_cpl_input_objspider(cpl_parameterlist * cpl_cfg, 
-<a name="l00054"></a>00054                                 cpl_frameset* sof, 
-<a name="l00055"></a>00055                                 cpl_frameset** stk) ;
-<a name="l00056"></a>00056 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> 
-<a name="l00065"></a>00065 sinfo_objspider_free(object_config * cfg);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_objspider_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_object_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 04, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input handling for SPIFFIs creation of a data cube</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        from a science object observation</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_OBJSPIDER_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_OBJSPIDER_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_object_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> object_config * </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> sinfo_parse_cpl_input_objspider(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                                 cpl_frameset* sof, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                                 cpl_frameset** stk) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_objspider_free(object_config * cfg);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pfits_8c_source.html b/html/sinfo__pfits_8c_source.html
index b86afef..b8f68e8 100644
--- a/html/sinfo__pfits_8c_source.html
+++ b/html/sinfo__pfits_8c_source.html
@@ -2,742 +2,773 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pfits.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pfits.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_pfits.c,v 1.14 2012/05/04 08:11:07 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/05/04 08:11:07 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.14 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <ctype.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <string.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define ASCIILINESZ                         1024</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define PAF_MAGIC_SZ               13</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define PAF_MAGIC       "PAF.HDR.START"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                              Function codes</span>
-<a name="l00049"></a>00049 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="keywordtype">char</span> * sinfo_paf_query(
-<a name="l00051"></a>00051         <span class="keywordtype">char</span>    *   filename,
-<a name="l00052"></a>00052         <span class="keywordtype">char</span>    *   key) ;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_is_paf_file(<span class="keywordtype">char</span> * filename) ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">char</span> * sinfo_strcrop(<span class="keywordtype">char</span> * s);
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 
-<a name="l00067"></a>00067 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">char</span> * sinfo_strcrop(<span class="keywordtype">char</span> * s)
-<a name="l00082"></a>00082 {
-<a name="l00083"></a>00083     <span class="keyword">static</span> <span class="keywordtype">char</span> l[ASCIILINESZ+1];
-<a name="l00084"></a>00084     <span class="keywordtype">char</span> * last ;
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086     <span class="keywordflow">if</span> (s==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00087"></a>00087     memset(l, 0, ASCIILINESZ+1);
-<a name="l00088"></a>00088     strcpy(l, s);
-<a name="l00089"></a>00089     last = l + strlen(l);
-<a name="l00090"></a>00090     <span class="keywordflow">while</span> (last > l) {
-<a name="l00091"></a>00091         <span class="keywordflow">if</span> (!isspace((<span class="keywordtype">int</span>)*(last-1)))
-<a name="l00092"></a>00092             break ;
-<a name="l00093"></a>00093         last -- ;
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095     *last = (char)0;
-<a name="l00096"></a>00096     <span class="keywordflow">return</span> l ;
-<a name="l00097"></a>00097 }
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 <span class="keywordtype">char</span> * sinfo_paf_query(
-<a name="l00115"></a>00115         <span class="keywordtype">char</span>    *   filename, 
-<a name="l00116"></a>00116         <span class="keywordtype">char</span>    *   key)
-<a name="l00117"></a>00117 {
-<a name="l00118"></a>00118     <span class="keyword">static</span> <span class="keywordtype">char</span> value[ASCIILINESZ];
-<a name="l00119"></a>00119     FILE    *    paf ;
-<a name="l00120"></a>00120     <span class="keywordtype">char</span>        line[ASCIILINESZ+1];
-<a name="l00121"></a>00121     <span class="keywordtype">char</span>        val[ASCIILINESZ+1];
-<a name="l00122"></a>00122     <span class="keywordtype">char</span>        head[ASCIILINESZ+1];
-<a name="l00123"></a>00123     <span class="keywordtype">int</span>            found ;
-<a name="l00124"></a>00124     <span class="keywordtype">int</span>            len ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126     <span class="comment">/* Check inputs */</span>
-<a name="l00127"></a>00127     <span class="keywordflow">if</span> (filename==NULL || key==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="comment">/* Check PAF validity */</span>
-<a name="l00130"></a>00130     <span class="keywordflow">if</span> (sinfo_is_paf_file(filename)!=1) {
-<a name="l00131"></a>00131         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not a PAF file: [%s]"</span>, filename);
-<a name="l00132"></a>00132         <span class="keywordflow">return</span> NULL ;
-<a name="l00133"></a>00133     }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="comment">/* Open file and read it */</span>
-<a name="l00136"></a>00136     paf = fopen(filename, <span class="stringliteral">"r"</span>);
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (paf==NULL) {
-<a name="l00138"></a>00138         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"opening [%s]"</span>, filename);
-<a name="l00139"></a>00139         <span class="keywordflow">return</span> NULL ;
-<a name="l00140"></a>00140     }
-<a name="l00141"></a>00141     
-<a name="l00142"></a>00142     found = 0 ;
-<a name="l00143"></a>00143     <span class="keywordflow">while</span> (fgets(line, ASCIILINESZ, paf)!=NULL) {
-<a name="l00144"></a>00144         sscanf(line, <span class="stringliteral">"%[^ ]"</span>, head);
-<a name="l00145"></a>00145         <span class="keywordflow">if</span> (!strcmp(head, key)) {
-<a name="l00146"></a>00146             <span class="comment">/* Get value */</span>
-<a name="l00147"></a>00147             sscanf(line, <span class="stringliteral">"%*[^ ] %[^;]"</span>, value);
-<a name="l00148"></a>00148             found ++ ;
-<a name="l00149"></a>00149             break ;
-<a name="l00150"></a>00150         }
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152     <span class="keywordflow">if</span> (!found) {
-<a name="l00153"></a>00153       fclose(paf);
-<a name="l00154"></a>00154       <span class="keywordflow">return</span> NULL ;
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156     
-<a name="l00157"></a>00157     <span class="comment">/* Remove trailing blanks */</span>
-<a name="l00158"></a>00158     strcpy(val, sinfo_strcrop(value));
-<a name="l00159"></a>00159     <span class="comment">/* Get rid of possible quotes */</span>
-<a name="l00160"></a>00160     len = strlen(val);
-<a name="l00161"></a>00161     <span class="keywordflow">if</span> (val[0]==<span class="charliteral">'\"'</span> && val[len-1]==<span class="charliteral">'\"'</span>) {
-<a name="l00162"></a>00162         strncpy(value, val+1, len-2);
-<a name="l00163"></a>00163         value[len-2]=(char)0;
-<a name="l00164"></a>00164     } <span class="keywordflow">else</span> {
-<a name="l00165"></a>00165         strcpy(value, val);
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167     <span class="keywordflow">if</span>(paf!=NULL){
-<a name="l00168"></a>00168        fclose(paf);
-<a name="l00169"></a>00169     }
-<a name="l00170"></a>00170     <span class="keywordflow">return</span> value ;
-<a name="l00171"></a>00171 }
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_is_paf_file(<span class="keywordtype">char</span> * filename)
-<a name="l00184"></a>00184 {
-<a name="l00185"></a>00185     FILE    *    fp ;
-<a name="l00186"></a>00186     <span class="keywordtype">int</span>            is_paf ;
-<a name="l00187"></a>00187     <span class="keywordtype">char</span>        line[ASCIILINESZ] ;
-<a name="l00188"></a>00188     
-<a name="l00189"></a>00189     <span class="keywordflow">if</span> (filename==NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">/* Initialize is_paf */</span>
-<a name="l00192"></a>00192     is_paf = 0 ;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <span class="comment">/* Open file */</span>
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">"r"</span>))==NULL) {
-<a name="l00196"></a>00196         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open file [%s]"</span>, filename) ;
-<a name="l00197"></a>00197         <span class="keywordflow">return</span> -1 ;
-<a name="l00198"></a>00198     }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     <span class="comment">/* Parse file */</span>
-<a name="l00201"></a>00201     <span class="keywordflow">while</span> (fgets(line, ASCIILINESZ, fp) != NULL) {
-<a name="l00202"></a>00202         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) {
-<a name="l00203"></a>00203            <span class="keywordflow">if</span> (!strncmp(line, PAF_MAGIC, PAF_MAGIC_SZ)) is_paf = 1 ;
-<a name="l00204"></a>00204              (void)fclose(fp) ;
-<a name="l00205"></a>00205             <span class="keywordflow">return</span> is_paf ;
-<a name="l00206"></a>00206         }
-<a name="l00207"></a>00207     }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209     (void)fclose(fp) ;
-<a name="l00210"></a>00210     <span class="keywordflow">return</span> is_paf ;
-<a name="l00211"></a>00211 }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00219"></a>00219 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00220"></a>00220 <span class="keywordtype">char</span> * sinfo_pfits_get_mode(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00221"></a>00221 {
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223    <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET MODE NAME"</span>);
-<a name="l00224"></a>00224   
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00233"></a>00233 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00234"></a>00234 <span class="keywordtype">double</span> sinfo_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist)
-<a name="l00235"></a>00235 {
-<a name="l00236"></a>00236   
-<a name="l00237"></a>00237     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00246"></a>00246 <span class="comment">   Function     :       sinfo_pfits_get_ditndit()</span>
-<a name="l00247"></a>00247 <span class="comment">   In           :       fits file name</span>
-<a name="l00248"></a>00248 <span class="comment">   Out          :       total integration time in sec</span>
-<a name="l00249"></a>00249 <span class="comment">   Job          :       reads the product dit*ndit from the FITS-header </span>
-<a name="l00250"></a>00250 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00251"></a>00251 <span class="keywordtype">double</span> sinfo_pfits_get_ditndit(<span class="keyword">const</span> <span class="keywordtype">char</span>* name)
-<a name="l00252"></a>00252 {
-<a name="l00253"></a>00253   <span class="keywordtype">double</span> dit;
-<a name="l00254"></a>00254   <span class="keywordtype">int</span> ndit=0;
-<a name="l00255"></a>00255   cpl_propertylist* plist=NULL;
-<a name="l00256"></a>00256   plist=cpl_propertylist_load(name,0);
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   dit = cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);
-<a name="l00259"></a>00259   ndit = cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NDIT"</span>);
-<a name="l00260"></a>00260   sinfo_free_propertylist(&plist);
-<a name="l00261"></a>00261   <span class="keywordflow">return</span> dit*ndit ;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00272"></a>00272 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00273"></a>00273 <span class="keywordtype">double</span> sinfo_pfits_get_exptime(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)
-<a name="l00274"></a>00274 {
-<a name="l00275"></a>00275     <span class="keywordtype">double</span> exptime ;
-<a name="l00276"></a>00276     cpl_propertylist* plist=NULL;
-<a name="l00277"></a>00277     plist=cpl_propertylist_load(filename,0);
-<a name="l00278"></a>00278     exptime = cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);
-<a name="l00279"></a>00279     sinfo_free_propertylist(&plist);
-<a name="l00280"></a>00280     
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> exptime;
-<a name="l00282"></a>00282 }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00293"></a>00293 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00294"></a>00294 <span class="keywordtype">int</span> sinfo_pfits_get_rom(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00295"></a>00295 {
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     <span class="keywordflow">return</span>  cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NCORRS"</span>);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00307"></a>00307 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00308"></a>00308 <span class="keywordtype">int</span> sinfo_pfits_get_expno(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00309"></a>00309 {
-<a name="l00310"></a>00310     
-<a name="l00311"></a>00311    <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO TPL EXPNO"</span>);
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313 }
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00322"></a>00322 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00323"></a>00323 <span class="keywordtype">double</span> sinfo_pfits_get_airmass_start(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00324"></a>00324 {
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL AIRM START"</span>);
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00336"></a>00336 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00337"></a>00337 <span class="keywordtype">double</span> sinfo_pfits_get_airmass_end(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00338"></a>00338 {
-<a name="l00339"></a>00339     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL AIRM END"</span>);
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00349"></a>00349 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00350"></a>00350 <span class="keywordtype">double</span> sinfo_pfits_get_alpha(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00351"></a>00351 {
-<a name="l00352"></a>00352   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL TARG OFFSETALPHA"</span>);
-<a name="l00353"></a>00353 }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00361"></a>00361 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00362"></a>00362 <span class="keywordtype">double</span> sinfo_pfits_get_targ_alpha(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00363"></a>00363 {
-<a name="l00364"></a>00364   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS TARG ALPHA"</span>);
-<a name="l00365"></a>00365 }
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00374"></a>00374 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00375"></a>00375 <span class="keywordtype">double</span> sinfo_pfits_get_targ_delta(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00376"></a>00376 {
-<a name="l00377"></a>00377   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS TARG DELTA"</span>);
-<a name="l00378"></a>00378 }
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00386"></a>00386 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00387"></a>00387 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_arcfile(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00388"></a>00388 {
-<a name="l00389"></a>00389     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,KEY_NAME_ARCFILE);
-<a name="l00390"></a>00390 }
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00398"></a>00398 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00399"></a>00399 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_rec1raw1name(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00400"></a>00400 {
-<a name="l00401"></a>00401     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,
-<a name="l00402"></a>00402                                                   KEY_NAME_PRO_REC1_RAW1_NAME);
-<a name="l00403"></a>00403 }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00411"></a>00411 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00412"></a>00412 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ins_setup(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00413"></a>00413 {
-<a name="l00414"></a>00414   <span class="keywordflow">if</span>(cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS SETUP ID"</span>)) {
-<a name="l00415"></a>00415     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS SETUP ID"</span>);
-<a name="l00416"></a>00416   } <span class="keywordflow">else</span> {
-<a name="l00417"></a>00417     cpl_error_reset();
-<a name="l00418"></a>00418     <span class="keywordflow">return</span> <span class="stringliteral">"Dark"</span>;
-<a name="l00419"></a>00419   }
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421 }
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00431"></a>00431 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00432"></a>00432 <span class="keywordtype">double</span> sinfo_pfits_get_wlen(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00433"></a>00433 {
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS GRAT1 WLEN"</span>);
-<a name="l00436"></a>00436 }
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00444"></a>00444 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00445"></a>00445 <span class="keywordtype">int</span> sinfo_pfits_get_chop_ncycles(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00446"></a>00446 {
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET CHOP NCYCLES"</span>);
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 }
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00458"></a>00458 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00459"></a>00459 <span class="keywordtype">double</span> sinfo_pfits_get_pixscale(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00460"></a>00460 {
-<a name="l00461"></a>00461   <span class="keyword">const</span> <span class="keywordtype">char</span>* val=NULL;
-<a name="l00462"></a>00462   val=cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS OPTI1 NAME"</span>);
-<a name="l00463"></a>00463   <span class="keywordflow">return</span> atof(val);
-<a name="l00464"></a>00464 }
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00472"></a>00472 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00473"></a>00473 <span class="keywordtype">double</span> sinfo_pfits_get_posangle(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00474"></a>00474 {
-<a name="l00475"></a>00475     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO ADA POSANG"</span>);
-<a name="l00476"></a>00476 }
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00484"></a>00484 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00485"></a>00485 <span class="keywordtype">double</span> sinfo_pfits_get_DEC(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00486"></a>00486 {
-<a name="l00487"></a>00487     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"DEC"</span>);
-<a name="l00488"></a>00488 }
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00497"></a>00497 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00498"></a>00498 <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsetx(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00499"></a>00499 {
-<a name="l00500"></a>00500     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO SEQ CUMOFFSETX"</span>);
-<a name="l00501"></a>00501 }
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00509"></a>00509 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00510"></a>00510 <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsety(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00511"></a>00511 {
-<a name="l00512"></a>00512     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO SEQ CUMOFFSETY"</span>);
-<a name="l00513"></a>00513 }
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00521"></a>00521 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00522"></a>00522 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_date_obs(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00523"></a>00523 {
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"DATE-OBS"</span>);
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527 }
-<a name="l00528"></a>00528         
-<a name="l00529"></a>00529 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00535"></a>00535 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00536"></a>00536 <span class="keywordtype">double</span>  sinfo_pfits_get_delta(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00537"></a>00537 {
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL TARG OFFSETDELTA"</span>);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541 }
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00549"></a>00549 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00550"></a>00550 <span class="keywordtype">double</span>  sinfo_pfits_get_dec(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00551"></a>00551 {
-<a name="l00552"></a>00552     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"DEC"</span>);
-<a name="l00553"></a>00553 }
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00562"></a>00562 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00563"></a>00563 <span class="keywordtype">double</span> sinfo_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00564"></a>00564 {
-<a name="l00565"></a>00565     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);
-<a name="l00566"></a>00566 }
-<a name="l00567"></a>00567 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00573"></a>00573 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00574"></a>00574 <span class="keywordtype">float</span> sinfo_pfits_get_pixelscale(<span class="keyword">const</span> <span class="keywordtype">char</span> * name)
-<a name="l00575"></a>00575 {
-<a name="l00576"></a>00576   cpl_propertylist* plist=NULL;
-<a name="l00577"></a>00577   <span class="keywordtype">float</span> pixscale=0;
-<a name="l00578"></a>00578   <span class="keyword">const</span> <span class="keywordtype">char</span>* scale=NULL;
-<a name="l00579"></a>00579   plist=cpl_propertylist_load(name,0);
-<a name="l00580"></a>00580   scale= cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS OPTI1 NAME"</span>);
-<a name="l00581"></a>00581   pixscale=atof(scale);
-<a name="l00582"></a>00582   sinfo_free_propertylist(&plist);
-<a name="l00583"></a>00583   <span class="keywordflow">return</span> pixscale;
-<a name="l00584"></a>00584 }
-<a name="l00585"></a>00585 
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00594"></a>00594 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00595"></a>00595 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ncorrs_name(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00596"></a>00596 {
-<a name="l00597"></a>00597     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET NCORRS NAME"</span>);
-<a name="l00598"></a>00598 }
-<a name="l00599"></a>00599 
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00608"></a>00608 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00609"></a>00609 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_band(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00610"></a>00610 {
-<a name="l00611"></a>00611     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT1 NAME"</span>);
-<a name="l00612"></a>00612 }
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00620"></a>00620 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00621"></a>00621 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_catg(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00622"></a>00622 {
-<a name="l00623"></a>00623     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR CATG"</span>);
-<a name="l00624"></a>00624 }
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00632"></a>00632 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00633"></a>00633 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_tech(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00634"></a>00634 {
-<a name="l00635"></a>00635     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR TECH"</span>);
-<a name="l00636"></a>00636 }
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00644"></a>00644 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00645"></a>00645 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_type(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00646"></a>00646 {
-<a name="l00647"></a>00647     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR TYPE"</span>);
-<a name="l00648"></a>00648 }
-<a name="l00649"></a>00649 
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00657"></a>00657 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00658"></a>00658 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_im(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00659"></a>00659 {
-<a name="l00660"></a>00660   <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT1 NAME"</span>);
-<a name="l00661"></a>00661 }
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00669"></a>00669 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00670"></a>00670 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_spec(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00671"></a>00671 {
-<a name="l00672"></a>00672     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT2 NAME"</span>);
-<a name="l00673"></a>00673 }
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00681"></a>00681 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00682"></a>00682 <span class="keywordtype">double</span> sinfo_pfits_get_focus(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00683"></a>00683 {
-<a name="l00684"></a>00684     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL FOCU LEN"</span>);
-<a name="l00685"></a>00685 }
-<a name="l00686"></a>00686 
-<a name="l00687"></a>00687 
-<a name="l00688"></a>00688 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00694"></a>00694 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00695"></a>00695 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_frame_type(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00696"></a>00696 {
-<a name="l00697"></a>00697     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET FRAM TYPE"</span>);
-<a name="l00698"></a>00698 }
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00706"></a>00706 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00707"></a>00707 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_instrument(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00708"></a>00708 {
-<a name="l00709"></a>00709     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"INSTRUME"</span>);
-<a name="l00710"></a>00710 }
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00718"></a>00718 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00719"></a>00719 <span class="keywordtype">double</span> sinfo_pfits_get_mjdobs(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00720"></a>00720 {
-<a name="l00721"></a>00721     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"MJD-OBS"</span>);
-<a name="l00722"></a>00722 }
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00731"></a>00731 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00732"></a>00732 <span class="keywordtype">double</span> sinfo_pfits_get_monoc_pos(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00733"></a>00733 {
-<a name="l00734"></a>00734     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"INS MONOC1 POS"</span>);
-<a name="l00735"></a>00735 }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00743"></a>00743 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00744"></a>00744 <span class="keywordtype">int</span> sinfo_pfits_get_ndit(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00745"></a>00745 {
-<a name="l00746"></a>00746     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NDIT"</span>);
-<a name="l00747"></a>00747 }
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00755"></a>00755 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00756"></a>00756 <span class="keywordtype">int</span> sinfo_pfits_get_naxis1(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00757"></a>00757 {
-<a name="l00758"></a>00758     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS1"</span>);
-<a name="l00759"></a>00759 }
-<a name="l00760"></a>00760 
-<a name="l00761"></a>00761 
-<a name="l00762"></a>00762 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00768"></a>00768 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00769"></a>00769 <span class="keywordtype">int</span> sinfo_pfits_get_naxis2(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00770"></a>00770 {
-<a name="l00771"></a>00771     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS2"</span>);
-<a name="l00772"></a>00772 }
-<a name="l00773"></a>00773 
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00781"></a>00781 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00782"></a>00782 <span class="keywordtype">int</span> sinfo_pfits_get_naxis3(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00783"></a>00783 {
-<a name="l00784"></a>00784     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS3"</span>);
-<a name="l00785"></a>00785 }
-<a name="l00786"></a>00786 
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789 
-<a name="l00790"></a>00790 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00796"></a>00796 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00797"></a>00797 <span class="keywordtype">double</span> sinfo_pfits_get_crpix1(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00798"></a>00798 {
-<a name="l00799"></a>00799     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX1"</span>);
-<a name="l00800"></a>00800 }
-<a name="l00801"></a>00801 
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803 
-<a name="l00804"></a>00804 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00810"></a>00810 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00811"></a>00811 <span class="keywordtype">double</span> sinfo_pfits_get_crpix2(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00812"></a>00812 {
-<a name="l00813"></a>00813     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX2"</span>);
-<a name="l00814"></a>00814 }
-<a name="l00815"></a>00815 
-<a name="l00816"></a>00816 
-<a name="l00817"></a>00817 
-<a name="l00818"></a>00818 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00824"></a>00824 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00825"></a>00825 <span class="keywordtype">double</span> sinfo_pfits_get_crpix3(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00826"></a>00826 {
-<a name="l00827"></a>00827     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX3"</span>);
-<a name="l00828"></a>00828 }
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830 
-<a name="l00831"></a>00831 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00837"></a>00837 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00838"></a>00838 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt1(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00839"></a>00839 {
-<a name="l00840"></a>00840     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT1"</span>);
-<a name="l00841"></a>00841 }
-<a name="l00842"></a>00842 
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00851"></a>00851 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00852"></a>00852 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt2(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00853"></a>00853 {
-<a name="l00854"></a>00854     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT2"</span>);
-<a name="l00855"></a>00855 }
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00865"></a>00865 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00866"></a>00866 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt3(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00867"></a>00867 {
-<a name="l00868"></a>00868     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT3"</span>);
-<a name="l00869"></a>00869 }
-<a name="l00870"></a>00870 
-<a name="l00871"></a>00871 
-<a name="l00872"></a>00872 
-<a name="l00873"></a>00873 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00879"></a>00879 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00880"></a>00880 <span class="keywordtype">double</span> sinfo_pfits_get_crval1(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00881"></a>00881 {
-<a name="l00882"></a>00882     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL1"</span>);
-<a name="l00883"></a>00883 }
-<a name="l00884"></a>00884 
-<a name="l00885"></a>00885 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00891"></a>00891 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00892"></a>00892 <span class="keywordtype">double</span> sinfo_pfits_get_crval2(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00893"></a>00893 {
-<a name="l00894"></a>00894     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL2"</span>);
-<a name="l00895"></a>00895 }
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00903"></a>00903 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00904"></a>00904 <span class="keywordtype">double</span> sinfo_pfits_get_crval3(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00905"></a>00905 {
-<a name="l00906"></a>00906     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL3"</span>);
-<a name="l00907"></a>00907 }
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00915"></a>00915 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00916"></a>00916 <span class="keywordtype">int</span> sinfo_pfits_get_numbexp(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00917"></a>00917 {
-<a name="l00918"></a>00918     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO TPL NEXP"</span>);
-<a name="l00919"></a>00919 }
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00927"></a>00927 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00928"></a>00928 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_obs_id(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00929"></a>00929 {
-<a name="l00930"></a>00930     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO OBS ID"</span>);
-<a name="l00931"></a>00931 }
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00939"></a>00939 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00940"></a>00940 <span class="keywordtype">int</span> sinfo_pfits_get_nodpos(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00941"></a>00941 {
-<a name="l00942"></a>00942     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO SEQ NODPOS"</span>);
-<a name="l00943"></a>00943 }
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00953"></a>00953 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00954"></a>00954 <span class="keywordtype">double</span> sinfo_pfits_get_ra(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00955"></a>00955 {
-<a name="l00956"></a>00956     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"RA"</span>);
-<a name="l00957"></a>00957 }
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00965"></a>00965 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00966"></a>00966 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_starname(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00967"></a>00967 {
-<a name="l00968"></a>00968     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO OBS TARG NAME"</span>);
-<a name="l00969"></a>00969 }
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00977"></a>00977 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00978"></a>00978 <span class="keywordtype">double</span> sinfo_pfits_get_resol(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00979"></a>00979 {
-<a name="l00980"></a>00980     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS RESOL"</span>);
-<a name="l00981"></a>00981 }
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00989"></a>00989 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00990"></a>00990 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_templateid(<span class="keyword">const</span> cpl_propertylist * plist)
-<a name="l00991"></a>00991 {
-<a name="l00992"></a>00992     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO TPL ID"</span>); 
-<a name="l00993"></a>00993 }
-<a name="l01002"></a>01002 <span class="keyword">static</span> cpl_error_code
-<a name="l01003"></a>01003 sinfo_plist_set_extra_common_keys(cpl_propertylist* plist)
-<a name="l01004"></a>01004 {
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLASS"</span>, <span class="stringliteral">"ESO"</span>) ;
-<a name="l01007"></a>01007     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLASS"</span>,<span class="stringliteral">"hdu classification"</span>) ;
-<a name="l01008"></a>01008 
-<a name="l01009"></a>01009     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUDOC"</span>, <span class="stringliteral">"DICD"</span>) ;
-<a name="l01010"></a>01010     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUDOC"</span>,<span class="stringliteral">"hdu reference document"</span>) ;
-<a name="l01011"></a>01011 
-<a name="l01012"></a>01012     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUVERS"</span>, <span class="stringliteral">"DICD V6.0"</span>) ;
-<a name="l01013"></a>01013     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUVERS"</span>,<span class="stringliteral">"hdu reference document version"</span>) ;
-<a name="l01014"></a>01014 
-<a name="l01015"></a>01015     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01016"></a>01016 }
-<a name="l01017"></a>01017 
-<a name="l01030"></a>01030 cpl_error_code
-<a name="l01031"></a>01031 sinfo_plist_set_extra_keys(cpl_propertylist* plist,
-<a name="l01032"></a>01032              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas1,
-<a name="l01033"></a>01033              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas2,
-<a name="l01034"></a>01034              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas3,
-<a name="l01035"></a>01035              <span class="keyword">const</span> <span class="keywordtype">char</span>* scidata,
-<a name="l01036"></a>01036              <span class="keyword">const</span> <span class="keywordtype">char</span>* errdata,
-<a name="l01037"></a>01037              <span class="keyword">const</span> <span class="keywordtype">char</span>* qualdata,
-<a name="l01038"></a>01038                          <span class="keyword">const</span> <span class="keywordtype">int</span> type)
-<a name="l01039"></a>01039 {
-<a name="l01040"></a>01040 
-<a name="l01041"></a>01041   cpl_ensure_code(type<3,CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01042"></a>01042   cpl_ensure_code(type>=0,CPL_ERROR_ILLEGAL_INPUT);
-<a name="l01043"></a>01043 
-<a name="l01044"></a>01044   sinfo_plist_set_extra_common_keys(plist);
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046   cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS1"</span>,hduclas1) ;
-<a name="l01047"></a>01047   cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS1"</span>,<span class="stringliteral">"hdu format classification"</span>) ;
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049   cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS2"</span>,hduclas2) ;
-<a name="l01050"></a>01050   cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS2"</span>,<span class="stringliteral">"hdu type classification"</span>) ;
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052   <span class="keywordflow">if</span>(type!=0) {
-<a name="l01053"></a>01053     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS3"</span>,hduclas3) ;
-<a name="l01054"></a>01054     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS3"</span>,<span class="stringliteral">"hdu info classification"</span>) ;
-<a name="l01055"></a>01055     cpl_propertylist_append_string(plist,<span class="stringliteral">"SCIDATA"</span>,scidata) ;
-<a name="l01056"></a>01056     cpl_propertylist_set_comment(plist,<span class="stringliteral">"SCIDATA"</span>,<span class="stringliteral">"name of data extension"</span>) ;
-<a name="l01057"></a>01057   }
-<a name="l01058"></a>01058 
-<a name="l01059"></a>01059   <span class="keywordflow">if</span>(type!=1) {
-<a name="l01060"></a>01060 <span class="comment">/* CASA prefers to have these not set if the extension actually does not exist</span>
-<a name="l01061"></a>01061 <span class="comment">    cpl_propertylist_append_string(plist,"ERRDATA",errdata) ;</span>
-<a name="l01062"></a>01062 <span class="comment">    cpl_propertylist_set_comment(plist,"ERRDATA","name of errs extension") ;</span>
-<a name="l01063"></a>01063 <span class="comment">*/</span>
-<a name="l01064"></a>01064   }
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066   <span class="keywordflow">if</span>(type!=2) {
-<a name="l01067"></a>01067 <span class="comment">/* CASA prefers to have these not set if the extension actually does not exist</span>
-<a name="l01068"></a>01068 <span class="comment">    cpl_propertylist_append_string(plist,"QUALDATA",qualdata) ;</span>
-<a name="l01069"></a>01069 <span class="comment">    cpl_propertylist_set_comment(plist,"QUALDATA","name of qual extension") ;</span>
-<a name="l01070"></a>01070 <span class="comment">*/</span>
-<a name="l01071"></a>01071   }
-<a name="l01072"></a>01072 
-<a name="l01073"></a>01073   <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l01074"></a>01074 }
-<a name="l01075"></a>01075 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pfits.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_pfits.c,v 1.14 2012/05/04 08:11:07 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/05/04 08:11:07 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.14 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <ctype.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define ASCIILINESZ                         1024</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_MAGIC_SZ               13</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define PAF_MAGIC       "PAF.HDR.START"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">char</span> * sinfo_paf_query(</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span>    *   filename,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span>    *   key) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_is_paf_file(<span class="keywordtype">char</span> * filename) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">char</span> * sinfo_strcrop(<span class="keywordtype">char</span> * s);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">char</span> * sinfo_strcrop(<span class="keywordtype">char</span> * s)</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keyword">static</span> <span class="keywordtype">char</span> l[ASCIILINESZ+1];</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordtype">char</span> * last ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">if</span> (s==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     memset(l, 0, ASCIILINESZ+1);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     strcpy(l, s);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     last = l + strlen(l);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">while</span> (last > l) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordflow">if</span> (!isspace((<span class="keywordtype">int</span>)*(last-1)))</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>             break ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         last -- ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     *last = (char)0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordflow">return</span> l ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keywordtype">char</span> * sinfo_paf_query(</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         <span class="keywordtype">char</span>    *   filename, </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         <span class="keywordtype">char</span>    *   key)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keyword">static</span> <span class="keywordtype">char</span> value[ASCIILINESZ];</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     FILE    *    paf ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordtype">char</span>        line[ASCIILINESZ+1];</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">char</span>        val[ASCIILINESZ+1];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">char</span>        head[ASCIILINESZ+1];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">int</span>            found ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordtype">int</span>            len ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="comment">/* Check inputs */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">if</span> (filename==NULL || key==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="comment">/* Check PAF validity */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">if</span> (sinfo_is_paf_file(filename)!=1) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not a PAF file: [%s]"</span>, filename);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* Open file and read it */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     paf = fopen(filename, <span class="stringliteral">"r"</span>);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span> (paf==NULL) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"opening [%s]"</span>, filename);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     found = 0 ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">while</span> (fgets(line, ASCIILINESZ, paf)!=NULL) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         sscanf(line, <span class="stringliteral">"%[^ ]"</span>, head);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         <span class="keywordflow">if</span> (!strcmp(head, key)) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>             <span class="comment">/* Get value */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             sscanf(line, <span class="stringliteral">"%*[^ ] %[^;]"</span>, value);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>             found ++ ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>             break ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">if</span> (!found) {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>       fclose(paf);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="comment">/* Remove trailing blanks */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     strcpy(val, sinfo_strcrop(value));</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="comment">/* Get rid of possible quotes */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     len = strlen(val);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">if</span> (val[0]==<span class="charliteral">'\"'</span> && val[len-1]==<span class="charliteral">'\"'</span>) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         strncpy(value, val+1, len-2);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         value[len-2]=(char)0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         strcpy(value, val);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">if</span>(paf!=NULL){</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>        fclose(paf);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">return</span> value ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_is_paf_file(<span class="keywordtype">char</span> * filename)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     FILE    *    fp ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordtype">int</span>            is_paf ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordtype">char</span>        line[ASCIILINESZ] ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">if</span> (filename==NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="comment">/* Initialize is_paf */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     is_paf = 0 ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">/* Open file */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span> ((fp = fopen(filename, <span class="stringliteral">"r"</span>))==NULL) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open file [%s]"</span>, filename) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="comment">/* Parse file */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">while</span> (fgets(line, ASCIILINESZ, fp) != NULL) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>            <span class="keywordflow">if</span> (!strncmp(line, PAF_MAGIC, PAF_MAGIC_SZ)) is_paf = 1 ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>              (void)fclose(fp) ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>             <span class="keywordflow">return</span> is_paf ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     (void)fclose(fp) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">return</span> is_paf ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="keywordtype">char</span> * sinfo_pfits_get_mode(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>    <span class="keywordflow">return</span> (<span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET MODE NAME"</span>);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="keywordtype">double</span> sinfo_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">   Function     :       sinfo_pfits_get_ditndit()</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">   In           :       fits file name</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">   Out          :       total integration time in sec</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">   Job          :       reads the product dit*ndit from the FITS-header </span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keywordtype">double</span> sinfo_pfits_get_ditndit(<span class="keyword">const</span> <span class="keywordtype">char</span>* name)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   <span class="keywordtype">double</span> dit;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordtype">int</span> ndit=0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   dit = cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   ndit = cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NDIT"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keywordflow">return</span> dit*ndit ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keywordtype">double</span> sinfo_pfits_get_exptime(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="keywordtype">double</span> exptime ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     plist=cpl_propertylist_load(filename,0);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     exptime = cpl_propertylist_get_double(plist,<span class="stringliteral">"EXPTIME"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">return</span> exptime;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="keywordtype">int</span> sinfo_pfits_get_rom(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">return</span>  cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NCORRS"</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="keywordtype">int</span> sinfo_pfits_get_expno(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>    <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO TPL EXPNO"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="keywordtype">double</span> sinfo_pfits_get_airmass_start(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL AIRM START"</span>);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="keywordtype">double</span> sinfo_pfits_get_airmass_end(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL AIRM END"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="keywordtype">double</span> sinfo_pfits_get_alpha(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL TARG OFFSETALPHA"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="keywordtype">double</span> sinfo_pfits_get_targ_alpha(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS TARG ALPHA"</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> }</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="keywordtype">double</span> sinfo_pfits_get_targ_delta(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS TARG DELTA"</span>);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_arcfile(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,KEY_NAME_ARCFILE);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_rec1raw1name(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                                   KEY_NAME_PRO_REC1_RAW1_NAME);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ins_setup(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="keywordflow">if</span>(cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS SETUP ID"</span>)) {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS SETUP ID"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordflow">return</span> <span class="stringliteral">"Dark"</span>;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> }</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="keywordtype">double</span> sinfo_pfits_get_wlen(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS GRAT1 WLEN"</span>);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="keywordtype">int</span> sinfo_pfits_get_chop_ncycles(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET CHOP NCYCLES"</span>);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> }</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="keywordtype">double</span> sinfo_pfits_get_pixscale(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> {</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* val=NULL;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   val=cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS OPTI1 NAME"</span>);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <span class="keywordflow">return</span> atof(val);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> }</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="keywordtype">double</span> sinfo_pfits_get_posangle(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO ADA POSANG"</span>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> }</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="keywordtype">double</span> sinfo_pfits_get_DEC(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"DEC"</span>);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> }</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsetx(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO SEQ CUMOFFSETX"</span>);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> }</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsety(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO SEQ CUMOFFSETY"</span>);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> }</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_date_obs(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"DATE-OBS"</span>);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> }</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>         </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="keywordtype">double</span>  sinfo_pfits_get_delta(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> {</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL TARG OFFSETDELTA"</span>);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="keywordtype">double</span>  sinfo_pfits_get_dec(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"DEC"</span>);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> }</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="keywordtype">double</span> sinfo_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO DET DIT"</span>);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="keywordtype">float</span> sinfo_pfits_get_pixelscale(<span class="keyword">const</span> <span class="keywordtype">char</span> * name)</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordtype">float</span> pixscale=0;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* scale=NULL;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   scale= cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS OPTI1 NAME"</span>);</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   pixscale=atof(scale);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   <span class="keywordflow">return</span> pixscale;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> }</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ncorrs_name(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET NCORRS NAME"</span>);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_band(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> {</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT1 NAME"</span>);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> }</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_catg(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> {</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR CATG"</span>);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> }</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_tech(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> {</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR TECH"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> }</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_type(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> {</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DPR TYPE"</span>);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_im(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> {</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT1 NAME"</span>);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> }</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_spec(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> {</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO INS FILT2 NAME"</span>);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="keywordtype">double</span> sinfo_pfits_get_focus(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> {</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO TEL FOCU LEN"</span>);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> }</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_frame_type(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO DET FRAM TYPE"</span>);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_instrument(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"INSTRUME"</span>);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="keywordtype">double</span> sinfo_pfits_get_mjdobs(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"MJD-OBS"</span>);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> }</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="keywordtype">double</span> sinfo_pfits_get_monoc_pos(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> {</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"INS MONOC1 POS"</span>);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="keywordtype">int</span> sinfo_pfits_get_ndit(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO DET NDIT"</span>);</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis1(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> {</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS1"</span>);</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis2(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS2"</span>);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis3(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> {</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"NAXIS3"</span>);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> </div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix1(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX1"</span>);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> }</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span> </div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix2(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> {</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX2"</span>);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> }</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> </div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> </div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix3(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> {</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRPIX3"</span>);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> }</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt1(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> {</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT1"</span>);</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> }</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt2(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> {</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT2"</span>);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> }</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt3(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CDELT3"</span>);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> }</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span> </div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span> </div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval1(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> {</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL1"</span>);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> }</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> </div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval2(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL2"</span>);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> }</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval3(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> {</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"CRVAL3"</span>);</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> <span class="keywordtype">int</span> sinfo_pfits_get_numbexp(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> {</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO TPL NEXP"</span>);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_obs_id(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO OBS ID"</span>);</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> }</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> <span class="keywordtype">int</span> sinfo_pfits_get_nodpos(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     <span class="keywordflow">return</span> cpl_propertylist_get_int(plist,<span class="stringliteral">"ESO SEQ NODPOS"</span>);</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> }</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> <span class="keywordtype">double</span> sinfo_pfits_get_ra(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> {</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"RA"</span>);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span> }</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_starname(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">return</span> cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO OBS TARG NAME"</span>);</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> }</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> <span class="keywordtype">double</span> sinfo_pfits_get_resol(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> {</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <span class="keywordflow">return</span> cpl_propertylist_get_double(plist,<span class="stringliteral">"ESO INS RESOL"</span>);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> }</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_templateid(<span class="keyword">const</span> cpl_propertylist * plist)</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     <span class="keywordflow">return</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>*) cpl_propertylist_get_string(plist,<span class="stringliteral">"ESO TPL ID"</span>); </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> }</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> <span class="keyword">static</span> cpl_error_code</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> sinfo_plist_set_extra_common_keys(cpl_propertylist* plist)</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> {</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLASS"</span>, <span class="stringliteral">"ESO"</span>) ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLASS"</span>,<span class="stringliteral">"hdu classification"</span>) ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUDOC"</span>, <span class="stringliteral">"DICD"</span>) ;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUDOC"</span>,<span class="stringliteral">"hdu reference document"</span>) ;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUVERS"</span>, <span class="stringliteral">"DICD V6.0"</span>) ;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUVERS"</span>,<span class="stringliteral">"hdu reference document version"</span>) ;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> cpl_error_code</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> sinfo_plist_set_extra_keys(cpl_propertylist* plist,</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas1,</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas2,</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas3,</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* scidata,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* errdata,</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* qualdata,</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> type)</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> {</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   cpl_ensure_code(type<3,CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   cpl_ensure_code(type>=0,CPL_ERROR_ILLEGAL_INPUT);</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>   sinfo_plist_set_extra_common_keys(plist);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS1"</span>,hduclas1) ;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS1"</span>,<span class="stringliteral">"hdu format classification"</span>) ;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS2"</span>,hduclas2) ;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>   cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS2"</span>,<span class="stringliteral">"hdu type classification"</span>) ;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   <span class="keywordflow">if</span>(type!=0) {</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     cpl_propertylist_append_string(plist,<span class="stringliteral">"HDUCLAS3"</span>,hduclas3) ;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     cpl_propertylist_set_comment(plist,<span class="stringliteral">"HDUCLAS3"</span>,<span class="stringliteral">"hdu info classification"</span>) ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     cpl_propertylist_append_string(plist,<span class="stringliteral">"SCIDATA"</span>,scidata) ;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     cpl_propertylist_set_comment(plist,<span class="stringliteral">"SCIDATA"</span>,<span class="stringliteral">"name of data extension"</span>) ;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>   }</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   <span class="keywordflow">if</span>(type!=1) {</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment">/* CASA prefers to have these not set if the extension actually does not exist</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">    cpl_propertylist_append_string(plist,"ERRDATA",errdata) ;</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">    cpl_propertylist_set_comment(plist,"ERRDATA","name of errs extension") ;</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>   }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>   <span class="keywordflow">if</span>(type!=2) {</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">/* CASA prefers to have these not set if the extension actually does not exist</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">    cpl_propertylist_append_string(plist,"QUALDATA",qualdata) ;</span></div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">    cpl_propertylist_set_comment(plist,"QUALDATA","name of qual extension") ;</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>   }</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>   <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pfits_8h_source.html b/html/sinfo__pfits_8h_source.html
index f72203d..fcfe627 100644
--- a/html/sinfo__pfits_8h_source.html
+++ b/html/sinfo__pfits_8h_source.html
@@ -2,142 +2,173 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pfits.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pfits.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_pfits.h,v 1.6 2012/03/22 15:26:10 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the NACO Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/22 15:26:10 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_PFITS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PFITS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/*</span>
-<a name="l00037"></a>00037 <span class="comment">#include <sinfo_dfs.h></span>
-<a name="l00038"></a>00038 <span class="comment">*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                                   Functions prototypes</span>
-<a name="l00042"></a>00042 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 CPL_BEGIN_DECLS
-<a name="l00045"></a>00045 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_rec1raw1name(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00046"></a>00046 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_band(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00047"></a>00047 <span class="keywordtype">float</span> sinfo_pfits_get_pixelscale (<span class="keyword">const</span> <span class="keywordtype">char</span> * filename );
-<a name="l00048"></a>00048 <span class="keywordtype">double</span> sinfo_pfits_get_targ_alpha(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00049"></a>00049 <span class="keywordtype">double</span> sinfo_pfits_get_targ_delta(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/*</span>
-<a name="l00052"></a>00052 <span class="comment">char * sinfo_pfits_get_rec1raw1name(const char * filename) ;</span>
-<a name="l00053"></a>00053 <span class="comment">*/</span>
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> sinfo_pfits_get_expno(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00055"></a>00055 <span class="keywordtype">double</span>  sinfo_pfits_get_exptime(<span class="keyword">const</span> <span class="keywordtype">char</span> *) ;
-<a name="l00056"></a>00056 <span class="keywordtype">char</span> * sinfo_pfits_get_mode(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keywordtype">double</span> sinfo_pfits_get_pixscale(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00059"></a>00059 <span class="keywordtype">double</span> sinfo_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist);
-<a name="l00060"></a>00060 <span class="keywordtype">double</span> sinfo_pfits_get_DEC(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00061"></a>00061 <span class="keywordtype">double</span> sinfo_pfits_get_posangle(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> sinfo_pfits_get_rom(<span class="keyword">const</span> cpl_propertylist * propertylist);
-<a name="l00063"></a>00063 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ncorrs_name(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00064"></a>00064 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_date_obs(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00065"></a>00065 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ins_setup(<span class="keyword">const</span> cpl_propertylist * plist);
-<a name="l00066"></a>00066 <span class="keywordtype">double</span> sinfo_pfits_get_airmass_start(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00067"></a>00067 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_templateid(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00068"></a>00068 <span class="keywordtype">double</span> sinfo_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00069"></a>00069 <span class="keywordtype">int</span>    sinfo_pfits_get_ndit(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00070"></a>00070 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_catg(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00071"></a>00071 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_tech(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00072"></a>00072 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_type(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00073"></a>00073 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_arcfile(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00074"></a>00074 <span class="keywordtype">double</span> sinfo_pfits_get_ditndit(<span class="keyword">const</span> <span class="keywordtype">char</span>* name);
-<a name="l00075"></a>00075 <span class="comment">/* not used */</span>
-<a name="l00076"></a>00076 <span class="keywordtype">int</span> sinfo_pfits_get_nodpos(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00077"></a>00077 <span class="keywordtype">double</span> sinfo_pfits_get_ra(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00078"></a>00078 <span class="keywordtype">double</span> sinfo_pfits_get_resol(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00079"></a>00079 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_starname(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00080"></a>00080 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_obs_id(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00081"></a>00081 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_instrument(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00082"></a>00082 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_spec(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00083"></a>00083 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_im(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00084"></a>00084 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_frame_type(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00085"></a>00085 <span class="keywordtype">int</span> sinfo_pfits_get_numbexp(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00086"></a>00086 <span class="keywordtype">double</span> sinfo_pfits_get_mjdobs(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00087"></a>00087 <span class="keywordtype">double</span> sinfo_pfits_get_focus(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00088"></a>00088 <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsetx(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00089"></a>00089 <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsety(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00090"></a>00090 <span class="keywordtype">double</span> sinfo_pfits_get_alpha(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00091"></a>00091 <span class="keywordtype">double</span> sinfo_pfits_get_airmass_end(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00092"></a>00092 <span class="keywordtype">double</span> sinfo_pfits_get_dec(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00093"></a>00093 <span class="keywordtype">double</span> sinfo_pfits_get_wlen(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00094"></a>00094 <span class="keywordtype">double</span> sinfo_pfits_get_delta(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00095"></a>00095 <span class="keywordtype">int</span> sinfo_pfits_get_naxis1(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00096"></a>00096 <span class="keywordtype">int</span> sinfo_pfits_get_naxis2(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00097"></a>00097 <span class="keywordtype">int</span> sinfo_pfits_get_naxis3(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="keywordtype">double</span> sinfo_pfits_get_crval1(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00101"></a>00101 <span class="keywordtype">double</span> sinfo_pfits_get_crval2(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00102"></a>00102 <span class="keywordtype">double</span> sinfo_pfits_get_crval3(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="keywordtype">double</span> sinfo_pfits_get_crpix1(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00105"></a>00105 <span class="keywordtype">double</span> sinfo_pfits_get_crpix2(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00106"></a>00106 <span class="keywordtype">double</span> sinfo_pfits_get_crpix3(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt1(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00109"></a>00109 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt2(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00110"></a>00110 <span class="keywordtype">double</span> sinfo_pfits_get_cdelt3(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="comment">/* keys not existent */</span>
-<a name="l00114"></a>00114 <span class="keywordtype">int</span> sinfo_pfits_get_chop_ncycles(<span class="keyword">const</span> cpl_propertylist * plist) ;
-<a name="l00115"></a>00115 <span class="keywordtype">double</span> sinfo_pfits_get_monoc_pos(<span class="keyword">const</span> cpl_propertylist *) ;
-<a name="l00116"></a>00116 cpl_error_code
-<a name="l00117"></a>00117 sinfo_plist_set_extra_keys(cpl_propertylist* plist,
-<a name="l00118"></a>00118              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas1,
-<a name="l00119"></a>00119              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas2,
-<a name="l00120"></a>00120              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas3,
-<a name="l00121"></a>00121              <span class="keyword">const</span> <span class="keywordtype">char</span>* scidata,
-<a name="l00122"></a>00122              <span class="keyword">const</span> <span class="keywordtype">char</span>* errdata,
-<a name="l00123"></a>00123              <span class="keyword">const</span> <span class="keywordtype">char</span>* qualdata,
-<a name="l00124"></a>00124                          <span class="keyword">const</span> <span class="keywordtype">int</span> type);
-<a name="l00125"></a>00125 CPL_END_DECLS
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pfits.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_pfits.h,v 1.6 2012/03/22 15:26:10 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the NACO Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/22 15:26:10 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_PFITS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PFITS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">#include <sinfo_dfs.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                   Functions prototypes</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_rec1raw1name(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_band(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">float</span> sinfo_pfits_get_pixelscale (<span class="keyword">const</span> <span class="keywordtype">char</span> * filename );</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">double</span> sinfo_pfits_get_targ_alpha(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">double</span> sinfo_pfits_get_targ_delta(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">char * sinfo_pfits_get_rec1raw1name(const char * filename) ;</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> sinfo_pfits_get_expno(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">double</span>  sinfo_pfits_get_exptime(<span class="keyword">const</span> <span class="keywordtype">char</span> *) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">char</span> * sinfo_pfits_get_mode(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">double</span> sinfo_pfits_get_pixscale(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keywordtype">double</span> sinfo_pfits_get_exp_time(<span class="keyword">const</span> cpl_propertylist* plist);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">double</span> sinfo_pfits_get_DEC(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keywordtype">double</span> sinfo_pfits_get_posangle(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> sinfo_pfits_get_rom(<span class="keyword">const</span> cpl_propertylist * propertylist);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ncorrs_name(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_date_obs(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_ins_setup(<span class="keyword">const</span> cpl_propertylist * plist);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">double</span> sinfo_pfits_get_airmass_start(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_templateid(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">double</span> sinfo_pfits_get_dit(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">int</span>    sinfo_pfits_get_ndit(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_catg(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_tech(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_dpr_type(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_arcfile(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">double</span> sinfo_pfits_get_ditndit(<span class="keyword">const</span> <span class="keywordtype">char</span>* name);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/* not used */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keywordtype">int</span> sinfo_pfits_get_nodpos(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">double</span> sinfo_pfits_get_ra(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">double</span> sinfo_pfits_get_resol(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_starname(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_obs_id(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_instrument(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_spec(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_filter_im(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_pfits_get_frame_type(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keywordtype">int</span> sinfo_pfits_get_numbexp(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keywordtype">double</span> sinfo_pfits_get_mjdobs(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keywordtype">double</span> sinfo_pfits_get_focus(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsetx(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keywordtype">double</span> sinfo_pfits_get_cumoffsety(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">double</span> sinfo_pfits_get_alpha(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keywordtype">double</span> sinfo_pfits_get_airmass_end(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keywordtype">double</span> sinfo_pfits_get_dec(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">double</span> sinfo_pfits_get_wlen(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keywordtype">double</span> sinfo_pfits_get_delta(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis1(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis2(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keywordtype">int</span> sinfo_pfits_get_naxis3(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval1(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval2(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keywordtype">double</span> sinfo_pfits_get_crval3(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix1(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix2(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keywordtype">double</span> sinfo_pfits_get_crpix3(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt1(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt2(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keywordtype">double</span> sinfo_pfits_get_cdelt3(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/* keys not existent */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keywordtype">int</span> sinfo_pfits_get_chop_ncycles(<span class="keyword">const</span> cpl_propertylist * plist) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keywordtype">double</span> sinfo_pfits_get_monoc_pos(<span class="keyword">const</span> cpl_propertylist *) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> cpl_error_code</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> sinfo_plist_set_extra_keys(cpl_propertylist* plist,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas1,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas2,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* hduclas3,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* scidata,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* errdata,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* qualdata,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> type);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pixel__handling_8c_source.html b/html/sinfo__pixel__handling_8c_source.html
index c3197d3..40c5663 100644
--- a/html/sinfo__pixel__handling_8c_source.html
+++ b/html/sinfo__pixel__handling_8c_source.html
@@ -2,135 +2,166 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pixel_handling.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pixel_handling.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019  <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    pixel_handling.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    March 04, 1997</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    Functions processing arrays of pixels.</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"></span>
-<a name="l00029"></a>00029 <span class="comment"> $Id: sinfo_pixel_handling.c,v 1.6 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Author: amodigli $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00032"></a>00032 <span class="comment"> $Revision: 1.6 $</span>
-<a name="l00033"></a>00033 <span class="comment"></span>
-<a name="l00034"></a>00034 <span class="comment"> */</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                  Includes</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pixel_handling.h"</span>
-<a name="l00053"></a>00053 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                                Function codes</span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define PIX_STACK_SIZE 50</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span>
-<a name="l00070"></a>00070 <span class="keywordtype">void</span> 
-<a name="l00071"></a>00071 sinfo_pixel_qsort(pixelvalue *pix_arr, <span class="keywordtype">int</span> npix)
-<a name="l00072"></a>00072 {
-<a name="l00073"></a>00073     <span class="keywordtype">int</span>         i,
-<a name="l00074"></a>00074                 ir,
-<a name="l00075"></a>00075                 j,
-<a name="l00076"></a>00076                 k,
-<a name="l00077"></a>00077                 l;
-<a name="l00078"></a>00078     <span class="keywordtype">int</span>        i_stack[PIX_STACK_SIZE*<span class="keyword">sizeof</span>(pixelvalue)] ;
-<a name="l00079"></a>00079     <span class="keywordtype">int</span>         j_stack ;
-<a name="l00080"></a>00080     pixelvalue  a ;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     ir = npix ;
-<a name="l00083"></a>00083     l = 1 ;
-<a name="l00084"></a>00084     j_stack = 0 ;
-<a name="l00085"></a>00085     <span class="keywordflow">for</span> (;;) {
-<a name="l00086"></a>00086         <span class="keywordflow">if</span> (ir-l < 7) {
-<a name="l00087"></a>00087             <span class="keywordflow">for</span> (j=l+1 ; j<=ir ; j++) {
-<a name="l00088"></a>00088                 a = pix_arr[j-1];
-<a name="l00089"></a>00089                 <span class="keywordflow">for</span> (i=j-1 ; i>=1 ; i--) {
-<a name="l00090"></a>00090                     <span class="keywordflow">if</span> (pix_arr[i-1] <= a) <span class="keywordflow">break</span>;
-<a name="l00091"></a>00091                     pix_arr[i] = pix_arr[i-1];
-<a name="l00092"></a>00092                 }
-<a name="l00093"></a>00093                 pix_arr[i] = a;
-<a name="l00094"></a>00094             }
-<a name="l00095"></a>00095             <span class="keywordflow">if</span> (j_stack == 0) <span class="keywordflow">break</span>;
-<a name="l00096"></a>00096             ir = i_stack[j_stack-- -1];
-<a name="l00097"></a>00097             l  = i_stack[j_stack-- -1];
-<a name="l00098"></a>00098         } <span class="keywordflow">else</span> {
-<a name="l00099"></a>00099             k = (l+ir) >> 1;
-<a name="l00100"></a>00100             PIX_SWAP(pix_arr[k-1], pix_arr[l])
-<a name="l00101"></a>00101             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[ir-1]) {
-<a name="l00102"></a>00102                 PIX_SWAP(pix_arr[l], pix_arr[ir-1])
-<a name="l00103"></a>00103             }
-<a name="l00104"></a>00104             <span class="keywordflow">if</span> (pix_arr[l-1] > pix_arr[ir-1]) {
-<a name="l00105"></a>00105                 PIX_SWAP(pix_arr[l-1], pix_arr[ir-1])
-<a name="l00106"></a>00106             }
-<a name="l00107"></a>00107             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[l-1]) {
-<a name="l00108"></a>00108                 PIX_SWAP(pix_arr[l], pix_arr[l-1])
-<a name="l00109"></a>00109             }
-<a name="l00110"></a>00110             i = l+1;
-<a name="l00111"></a>00111             j = ir;
-<a name="l00112"></a>00112             a = pix_arr[l-1];
-<a name="l00113"></a>00113             <span class="keywordflow">for</span> (;;) {
-<a name="l00114"></a>00114                 <span class="keywordflow">do</span> i++; <span class="keywordflow">while</span> (pix_arr[i-1] < a);
-<a name="l00115"></a>00115                 <span class="keywordflow">do</span> j--; <span class="keywordflow">while</span> (pix_arr[j-1] > a);
-<a name="l00116"></a>00116                 <span class="keywordflow">if</span> (j < i) <span class="keywordflow">break</span>;
-<a name="l00117"></a>00117                 PIX_SWAP(pix_arr[i-1], pix_arr[j-1]);
-<a name="l00118"></a>00118             }
-<a name="l00119"></a>00119             pix_arr[l-1] = pix_arr[j-1];
-<a name="l00120"></a>00120             pix_arr[j-1] = a;
-<a name="l00121"></a>00121             j_stack += 2;
-<a name="l00122"></a>00122             <span class="keywordflow">if</span> (j_stack > PIX_STACK_SIZE) {
-<a name="l00123"></a>00123                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"stack too small : aborting"</span>);
-<a name="l00124"></a>00124                 exit(-2001) ;
-<a name="l00125"></a>00125             }
-<a name="l00126"></a>00126             <span class="keywordflow">if</span> (ir-i+1 >= j-l) {
-<a name="l00127"></a>00127                 i_stack[j_stack-1] = ir;
-<a name="l00128"></a>00128                 i_stack[j_stack-2] = i;
-<a name="l00129"></a>00129                 ir = j-1;
-<a name="l00130"></a>00130             } <span class="keywordflow">else</span> {
-<a name="l00131"></a>00131                 i_stack[j_stack-1] = j-1;
-<a name="l00132"></a>00132                 i_stack[j_stack-2] = l;
-<a name="l00133"></a>00133                 l = i;
-<a name="l00134"></a>00134             }
-<a name="l00135"></a>00135         }
-<a name="l00136"></a>00136     }
-<a name="l00137"></a>00137 }
-<a name="l00138"></a>00138 <span class="preprocessor">#undef PIX_STACK_SIZE</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#undef PIX_SWAP</span>
-<a name="l00140"></a>00140 <span class="preprocessor"></span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pixel_handling.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>  <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    pixel_handling.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    March 04, 1997</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    Functions processing arrays of pixels.</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Id: sinfo_pixel_handling.c,v 1.6 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pixel_handling.h"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                Function codes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#define PIX_SWAP(a,b) { pixelvalue temp=(a);(a)=(b);(b)=temp; }</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define PIX_STACK_SIZE 50</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_pixel_qsort(pixelvalue *pix_arr, <span class="keywordtype">int</span> npix)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordtype">int</span>         i,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                 ir,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                 j,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                 k,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                 l;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordtype">int</span>        i_stack[PIX_STACK_SIZE*<span class="keyword">sizeof</span>(pixelvalue)] ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordtype">int</span>         j_stack ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     pixelvalue  a ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     ir = npix ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     l = 1 ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     j_stack = 0 ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="keywordflow">for</span> (;;) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordflow">if</span> (ir-l < 7) {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>             <span class="keywordflow">for</span> (j=l+1 ; j<=ir ; j++) {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                 a = pix_arr[j-1];</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                 <span class="keywordflow">for</span> (i=j-1 ; i>=1 ; i--) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                     <span class="keywordflow">if</span> (pix_arr[i-1] <= a) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                     pix_arr[i] = pix_arr[i-1];</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                 }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                 pix_arr[i] = a;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>             }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>             <span class="keywordflow">if</span> (j_stack == 0) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>             ir = i_stack[j_stack-- -1];</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>             l  = i_stack[j_stack-- -1];</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>             k = (l+ir) >> 1;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>             PIX_SWAP(pix_arr[k-1], pix_arr[l])</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[ir-1]) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                 PIX_SWAP(pix_arr[l], pix_arr[ir-1])</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>             }</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>             <span class="keywordflow">if</span> (pix_arr[l-1] > pix_arr[ir-1]) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                 PIX_SWAP(pix_arr[l-1], pix_arr[ir-1])</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>             }</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[l-1]) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                 PIX_SWAP(pix_arr[l], pix_arr[l-1])</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>             }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>             i = l+1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>             j = ir;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>             a = pix_arr[l-1];</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>             <span class="keywordflow">for</span> (;;) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                 <span class="keywordflow">do</span> i++; <span class="keywordflow">while</span> (pix_arr[i-1] < a);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                 <span class="keywordflow">do</span> j--; <span class="keywordflow">while</span> (pix_arr[j-1] > a);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                 <span class="keywordflow">if</span> (j < i) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                 PIX_SWAP(pix_arr[i-1], pix_arr[j-1]);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>             }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>             pix_arr[l-1] = pix_arr[j-1];</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>             pix_arr[j-1] = a;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>             j_stack += 2;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>             <span class="keywordflow">if</span> (j_stack > PIX_STACK_SIZE) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"stack too small : aborting"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                 exit(-2001) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>             }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>             <span class="keywordflow">if</span> (ir-i+1 >= j-l) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                 i_stack[j_stack-1] = ir;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                 i_stack[j_stack-2] = i;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                 ir = j-1;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                 i_stack[j_stack-1] = j-1;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                 i_stack[j_stack-2] = l;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                 l = i;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>             }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor">#undef PIX_STACK_SIZE</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span><span class="preprocessor">#undef PIX_SWAP</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pixel__handling_8h_source.html b/html/sinfo__pixel__handling_8h_source.html
index 9456d6c..a80c595 100644
--- a/html/sinfo__pixel__handling_8h_source.html
+++ b/html/sinfo__pixel__handling_8h_source.html
@@ -2,60 +2,91 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pixel_handling.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pixel_handling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019  <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_pixel_handling.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    March 4th, 1997</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    Functions to handle list of pixels and their use</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment"> $Id: sinfo_pixel_handling.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment"> $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment"> $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Revision: 1.5 $</span>
-<a name="l00032"></a>00032 <span class="comment"> */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifndef SINFO_PIXEL_HANDLING_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PIXEL_HANDLING_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                   Includes</span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00040"></a>00040 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                                 Function ANSI prototypes</span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="keywordtype">void</span> 
-<a name="l00056"></a>00056 sinfo_pixel_qsort(pixelvalue *pix_arr, <span class="keywordtype">int</span> npix) ;
-<a name="l00057"></a>00057 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pixel_handling.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>  <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_pixel_handling.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    March 4th, 1997</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    Functions to handle list of pixels and their use</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> $Id: sinfo_pixel_handling.h,v 1.5 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifndef SINFO_PIXEL_HANDLING_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PIXEL_HANDLING_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                 Function ANSI prototypes</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> sinfo_pixel_qsort(pixelvalue *pix_arr, <span class="keywordtype">int</span> npix) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__poly2d_8c_source.html b/html/sinfo__poly2d_8c_source.html
index ca1ca1b..8926334 100644
--- a/html/sinfo__poly2d_8c_source.html
+++ b/html/sinfo__poly2d_8c_source.html
@@ -2,71 +2,102 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_poly2d.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_poly2d.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    poly2d.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    22 Jun 1999</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    2D polynomial handling</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="comment">/*</span>
-<a name="l00028"></a>00028 <span class="comment">    $Id: sinfo_poly2d.c,v 1.4 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00029"></a>00029 <span class="comment">    $Author: amodigli $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00032"></a>00032 <span class="comment">*/</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_poly2d.h"</span>
-<a name="l00062"></a>00062 <span class="keywordtype">double</span>
-<a name="l00063"></a>00063 sinfo_poly2d_compute(
-<a name="l00064"></a>00064     poly2d    *    p,
-<a name="l00065"></a>00065     <span class="keywordtype">double</span>        x,
-<a name="l00066"></a>00066     <span class="keywordtype">double</span>        y
-<a name="l00067"></a>00067 )
-<a name="l00068"></a>00068 {
-<a name="l00069"></a>00069     <span class="keywordtype">double</span>    z ;
-<a name="l00070"></a>00070     <span class="keywordtype">int</span>        i ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     z = 0.00 ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     <span class="keywordflow">for</span> (i=0 ; i<p->nc ; i++) {
-<a name="l00075"></a>00075         z += p->c[i] * sinfo_ipow(x, p->px[i]) * sinfo_ipow(y, p->py[i]) ;
-<a name="l00076"></a>00076     }
-<a name="l00077"></a>00077     <span class="keywordflow">return</span> z ;
-<a name="l00078"></a>00078 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_poly2d.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    poly2d.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    22 Jun 1999</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    2D polynomial handling</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">    $Id: sinfo_poly2d.c,v 1.4 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_poly2d.h"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_poly2d_compute(</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     poly2d    *    p,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordtype">double</span>        x,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     <span class="keywordtype">double</span>        y</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> )</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>     <span class="keywordtype">double</span>    z ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordtype">int</span>        i ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     z = 0.00 ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordflow">for</span> (i=0 ; i<p->nc ; i++) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         z += p->c[i] * sinfo_ipow(x, p->px[i]) * sinfo_ipow(y, p->py[i]) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordflow">return</span> z ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__poly2d_8h_source.html b/html/sinfo__poly2d_8h_source.html
index 245559c..a536e62 100644
--- a/html/sinfo__poly2d_8h_source.html
+++ b/html/sinfo__poly2d_8h_source.html
@@ -2,89 +2,120 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_poly2d.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_poly2d.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_poly2d.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author         :    N. Devillard</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    22 Jun 1999</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    2D polynomial handling</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/*</span>
-<a name="l00030"></a>00030 <span class="comment">    $Id: sinfo_poly2d.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Author: amodigli $</span>
-<a name="l00032"></a>00032 <span class="comment">    $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00033"></a>00033 <span class="comment">    $Revision: 1.4 $</span>
-<a name="l00034"></a>00034 <span class="comment">*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifndef SINFO_POLY2D_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_POLY2D_H</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                                   Includes</span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <string.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_ipow.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                                   New types</span>
-<a name="l00050"></a>00050 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00094"></a>00094 <span class="keyword">struct </span>_2D_POLY_ {
-<a name="l00095"></a>00095     <span class="keywordtype">int</span>            nc ;        <span class="comment">/* number of coefficients in px, py, c */</span>
-<a name="l00096"></a>00096     <span class="keywordtype">int</span>        *    px ;        <span class="comment">/* powers of x                         */</span>
-<a name="l00097"></a>00097     <span class="keywordtype">int</span>        *    py ;        <span class="comment">/* powers of y                         */</span>
-<a name="l00098"></a>00098     <span class="keywordtype">double</span>    *    c ;            <span class="comment">/* polynomial coefficients             */</span>
-<a name="l00099"></a>00099 } ;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">typedef</span> <span class="keyword">struct </span>_2D_POLY_ poly2d ;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00106"></a>00106 <span class="comment">                               Function codes    </span>
-<a name="l00107"></a>00107 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00108"></a>00108 
-<a name="l00122"></a>00122 <span class="keywordtype">double</span>
-<a name="l00123"></a>00123 sinfo_poly2d_compute(
-<a name="l00124"></a>00124     poly2d    *    p,
-<a name="l00125"></a>00125     <span class="keywordtype">double</span>        x,
-<a name="l00126"></a>00126     <span class="keywordtype">double</span>        y
-<a name="l00127"></a>00127 );
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_poly2d.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_poly2d.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author         :    N. Devillard</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    22 Jun 1999</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    2D polynomial handling</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Id: sinfo_poly2d.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">    $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">    $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifndef SINFO_POLY2D_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_POLY2D_H</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_ipow.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">struct </span>_2D_POLY_ {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">int</span>            nc ;        <span class="comment">/* number of coefficients in px, py, c */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">int</span>        *    px ;        <span class="comment">/* powers of x                         */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordtype">int</span>        *    py ;        <span class="comment">/* powers of y                         */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">double</span>    *    c ;            <span class="comment">/* polynomial coefficients             */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> } ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_2D_POLY_ poly2d ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">                               Function codes    </span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> sinfo_poly2d_compute(</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     poly2d    *    p,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordtype">double</span>        x,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordtype">double</span>        y</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> );</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__prepare__stacked__frames__config_8c_source.html b/html/sinfo__prepare__stacked__frames__config_8c_source.html
index cc526da..c7b3a8f 100644
--- a/html/sinfo__prepare__stacked__frames__config_8c_source.html
+++ b/html/sinfo__prepare__stacked__frames__config_8c_source.html
@@ -2,358 +2,389 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_prepare_stacked_frames_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_prepare_stacked_frames_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_prepare_stacked_frames_config.c,v 1.8 2008/02/27 15:10:05 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2008/02/27 15:10:05 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/**************************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  * Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization  *</span>
-<a name="l00029"></a>00029 <span class="comment">  **************************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_prepare_stacked_frames_config.h"</span>
-<a name="l00049"></a>00049 <span class="keywordtype">void</span>
-<a name="l00050"></a>00050  sinfo_prepare_stacked_frames_config_add(cpl_parameterlist *list)
-<a name="l00051"></a>00051 {
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   cpl_parameter *p;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   <span class="keywordflow">if</span> (!list) {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span>;
-<a name="l00057"></a>00057   }
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*</span>
-<a name="l00060"></a>00060 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">  Clean Mean </span>
-<a name="l00062"></a>00062 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment"> */</span>
-<a name="l00064"></a>00064 <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00065"></a>00065 <span class="comment">the average of columns */</span>
-<a name="l00066"></a>00066   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.low_rejection"</span>,
-<a name="l00067"></a>00067                   CPL_TYPE_DOUBLE,
-<a name="l00068"></a>00068                               <span class="stringliteral">"lower rejection"</span>,
-<a name="l00069"></a>00069                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00070"></a>00070                               0.1,0.0,1.0);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"stack-lo_rej"</span>);
-<a name="l00073"></a>00073   cpl_parameterlist_append(list, p);
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00076"></a>00076 <span class="comment">the average of columns */</span>
-<a name="l00077"></a>00077   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.high_rejection"</span>,
-<a name="l00078"></a>00078                   CPL_TYPE_DOUBLE,
-<a name="l00079"></a>00079                               <span class="stringliteral">"higher rejection"</span>,
-<a name="l00080"></a>00080                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00081"></a>00081                               0.1,0.0,1.0);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-hi_rej"</span>);
-<a name="l00084"></a>00084   cpl_parameterlist_append(list, p);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="comment">/*</span>
-<a name="l00088"></a>00088 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00089"></a>00089 <span class="comment">  Flat Field </span>
-<a name="l00090"></a>00090 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00091"></a>00091 <span class="comment"> */</span>
-<a name="l00092"></a>00092 <span class="comment">/* indicates if flatfielding is carried through or not */</span>
-<a name="l00093"></a>00093   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.flat_index"</span>,
-<a name="l00094"></a>00094                   CPL_TYPE_BOOL,
-<a name="l00095"></a>00095                               <span class="stringliteral">"Flat Index: "</span>,
-<a name="l00096"></a>00096                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00097"></a>00097                               TRUE);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-flat_ind"</span>);
-<a name="l00100"></a>00100   cpl_parameterlist_append(list, p);
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="comment">/* indicates if flatfield is normalized to itself </span>
-<a name="l00104"></a>00104 <span class="comment">   (to remove lamp response curve) */</span>
-<a name="l00105"></a>00105   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.mflat_norm_smooth"</span>,
-<a name="l00106"></a>00106                               CPL_TYPE_INT,
-<a name="l00107"></a>00107                               <span class="stringliteral">"Normalize master flat to its smoothed value "</span>
-<a name="l00108"></a>00108                               <span class="stringliteral">"(to remove lamp response curve). "</span>
-<a name="l00109"></a>00109                               <span class="stringliteral">"0 (no smooth). 1 (apply fft filter along y)."</span>
-<a name="l00110"></a>00110                               <span class="stringliteral">"2 (apply running median filter along y)."</span>,
-<a name="l00111"></a>00111                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00112"></a>00112                              0,3,0,1,2);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mflat_norm_smooth"</span>);
-<a name="l00115"></a>00115   cpl_parameterlist_append(list, p);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="comment">/* indicates if flatfield is normalized to itself </span>
-<a name="l00119"></a>00119 <span class="comment">   (to remove lamp response curve) */</span>
-<a name="l00120"></a>00120   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.mflat_smooth_rad"</span>,
-<a name="l00121"></a>00121                   CPL_TYPE_INT,
-<a name="l00122"></a>00122                               <span class="stringliteral">"Normalization smoothing radii "</span>,
-<a name="l00123"></a>00123                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00124"></a>00124                               16,3,2048);
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mflat_smooth_rad"</span>);
-<a name="l00127"></a>00127   cpl_parameterlist_append(list, p);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="comment">/*</span>
-<a name="l00131"></a>00131 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00132"></a>00132 <span class="comment">  Bad Pixel </span>
-<a name="l00133"></a>00133 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00134"></a>00134 <span class="comment"> */</span>
-<a name="l00135"></a>00135 <span class="comment">/* indicates if the bad pixels should be interpolated or not */</span>
-<a name="l00136"></a>00136   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.mask_index"</span>,
-<a name="l00137"></a>00137                   CPL_TYPE_INT,
-<a name="l00138"></a>00138                               <span class="stringliteral">"BP Mask Interpolation Switch: "</span>
-<a name="l00139"></a>00139                               <span class="stringliteral">"indicates if the bad pixel mask should be "</span>
-<a name="l00140"></a>00140                  <span class="stringliteral">"applied (1) or not (0) "</span>,
-<a name="l00141"></a>00141                  <span class="comment">/*</span>
-<a name="l00142"></a>00142 <span class="comment">                              "2: indicates that "</span>
-<a name="l00143"></a>00143 <span class="comment">                              "the bad pixels should be interpolated by "</span>
-<a name="l00144"></a>00144 <span class="comment">                              "using bezier splines",</span>
-<a name="l00145"></a>00145 <span class="comment">                 */</span>
-<a name="l00146"></a>00146                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00147"></a>00147                                1,
-<a name="l00148"></a>00148                  2,0,1); <span class="comment">/* there was also 2 allowed */</span>
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mask_ind"</span>);
-<a name="l00151"></a>00151   cpl_parameterlist_append(list, p);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="comment">/* indicates if the bad pixels should be indicated (TRUE) or </span>
-<a name="l00154"></a>00154 <span class="comment">   interpolated (FALSE)*/</span>
-<a name="l00155"></a>00155   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.ind_index"</span>,
-<a name="l00156"></a>00156                   CPL_TYPE_BOOL,
-<a name="l00157"></a>00157                               <span class="stringliteral">"indicates if the bad pixels should be "</span>
-<a name="l00158"></a>00158                               <span class="stringliteral">"indicated (yes) or interpolated (no)"</span>,
-<a name="l00159"></a>00159                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00160"></a>00160                               FALSE);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-ind_ind"</span>);
-<a name="l00163"></a>00163   cpl_parameterlist_append(list, p);
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 <span class="comment">/* maximal pixel distance from bad pixel to take valid pixels */</span>
-<a name="l00167"></a>00167   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.mask_rad"</span>,
-<a name="l00168"></a>00168                   CPL_TYPE_INT,
-<a name="l00169"></a>00169                               <span class="stringliteral">"Max distance bad-good pix: "</span>,
-<a name="l00170"></a>00170                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00171"></a>00171                               4);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mask_rad"</span>);
-<a name="l00174"></a>00174   cpl_parameterlist_append(list, p);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176   <span class="comment">/* Temporally removed options: index_list, sigma-factor, </span>
-<a name="l00177"></a>00177 <span class="comment">     used if mask_ind=2,3 */</span>
-<a name="l00178"></a>00178   <span class="comment">/* file list containing the index files for bezier interpolation */</span>
-<a name="l00179"></a>00179   <span class="comment">/*</span>
-<a name="l00180"></a>00180 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.index_list",</span>
-<a name="l00181"></a>00181 <span class="comment">                  CPL_TYPE_STRING,</span>
-<a name="l00182"></a>00182 <span class="comment">                              "Contain Index Files: ",</span>
-<a name="l00183"></a>00183 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00184"></a>00184 <span class="comment">                              "indexlist");</span>
-<a name="l00185"></a>00185 <span class="comment"></span>
-<a name="l00186"></a>00186 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-index_list");</span>
-<a name="l00187"></a>00187 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00188"></a>00188 <span class="comment">  */</span>
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190   <span class="comment">/* sigmaFactor for bad pixel search in method maskInd = 3 */</span>
-<a name="l00191"></a>00191   <span class="comment">/*</span>
-<a name="l00192"></a>00192 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.sigma_factor",</span>
-<a name="l00193"></a>00193 <span class="comment">                  CPL_TYPE_DOUBLE,</span>
-<a name="l00194"></a>00194 <span class="comment">                              "Sigma Factor for bp search: ",</span>
-<a name="l00195"></a>00195 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00196"></a>00196 <span class="comment">                              3.);</span>
-<a name="l00197"></a>00197 <span class="comment"></span>
-<a name="l00198"></a>00198 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-sigma_factor");</span>
-<a name="l00199"></a>00199 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00200"></a>00200 <span class="comment">  */</span>
-<a name="l00201"></a>00201  
-<a name="l00202"></a>00202 <span class="comment">/*</span>
-<a name="l00203"></a>00203 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00204"></a>00204 <span class="comment">  Interleaving: only to support dither mode. We comment </span>
-<a name="l00205"></a>00205 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00206"></a>00206 <span class="comment"> */</span>
-<a name="l00207"></a>00207   <span class="comment">/* indicates if interleaving should be carried through */</span>
-<a name="l00208"></a>00208   <span class="comment">/*</span>
-<a name="l00209"></a>00209 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.inter_index",</span>
-<a name="l00210"></a>00210 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00211"></a>00211 <span class="comment">                              "Interleaving Switch: ",</span>
-<a name="l00212"></a>00212 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00213"></a>00213 <span class="comment">                              FALSE);</span>
-<a name="l00214"></a>00214 <span class="comment"></span>
-<a name="l00215"></a>00215 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-inter_ind");</span>
-<a name="l00216"></a>00216 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00217"></a>00217 <span class="comment">  */</span>
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="comment">/* number of image rows from which the general offset between the frames is </span>
-<a name="l00220"></a>00220 <span class="comment">   determined */</span>
-<a name="l00221"></a>00221 <span class="comment">/*</span>
-<a name="l00222"></a>00222 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.no_rows",</span>
-<a name="l00223"></a>00223 <span class="comment">                  CPL_TYPE_INT,</span>
-<a name="l00224"></a>00224 <span class="comment">                              "Number Of Rows",</span>
-<a name="l00225"></a>00225 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00226"></a>00226 <span class="comment">                              400);</span>
-<a name="l00227"></a>00227 <span class="comment"></span>
-<a name="l00228"></a>00228 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-no_rows");</span>
-<a name="l00229"></a>00229 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00230"></a>00230 <span class="comment">*/</span>
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="comment">/*</span>
-<a name="l00233"></a>00233 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00234"></a>00234 <span class="comment">  Gauss Convolution</span>
-<a name="l00235"></a>00235 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00236"></a>00236 <span class="comment"> */</span>
-<a name="l00237"></a>00237   <span class="comment">/* indicates if a Gaussian convolution is applied or not */</span>
-<a name="l00238"></a>00238   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.gauss_index"</span>,
-<a name="l00239"></a>00239                   CPL_TYPE_BOOL,
-<a name="l00240"></a>00240                               <span class="stringliteral">"Gaussian Convolution Switch: "</span>,
-<a name="l00241"></a>00241                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00242"></a>00242                               FALSE);
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-gauss_ind"</span>);
-<a name="l00245"></a>00245   cpl_parameterlist_append(list, p);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 <span class="comment">/* kernel half width of the Gaussian response function */</span>
-<a name="l00248"></a>00248   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.kernel_half_width"</span>,
-<a name="l00249"></a>00249                   CPL_TYPE_INT,
-<a name="l00250"></a>00250                               <span class="stringliteral">"Kernel Half Width"</span>,
-<a name="l00251"></a>00251                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00252"></a>00252                                2);
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-khw"</span>);
-<a name="l00255"></a>00255   cpl_parameterlist_append(list, p);
-<a name="l00256"></a>00256 <span class="comment">/*</span>
-<a name="l00257"></a>00257 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00258"></a>00258 <span class="comment">  Shift Frames (To be used?)</span>
-<a name="l00259"></a>00259 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00260"></a>00260 <span class="comment"> */</span>
-<a name="l00261"></a>00261   <span class="comment">/* Suppressed in release 1.1.0 */</span>
-<a name="l00262"></a>00262   <span class="comment">/* indicates if a Gaussian convolution is applied or not */</span>
-<a name="l00263"></a>00263   <span class="comment">/*</span>
-<a name="l00264"></a>00264 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.shift_frame_index",</span>
-<a name="l00265"></a>00265 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00266"></a>00266 <span class="comment">                              "Shift Frame Switch: ",</span>
-<a name="l00267"></a>00267 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00268"></a>00268 <span class="comment">                              FALSE);</span>
-<a name="l00269"></a>00269 <span class="comment"></span>
-<a name="l00270"></a>00270 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_ind");</span>
-<a name="l00271"></a>00271 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00272"></a>00272 <span class="comment">  */</span>
-<a name="l00273"></a>00273   <span class="comment">/*type of interpolation to be used (0=polynomial , 1=cubic spline) */</span>
-<a name="l00274"></a>00274   <span class="comment">/*</span>
-<a name="l00275"></a>00275 <span class="comment">  p = cpl_parameter_new_enum("sinfoni.stacked.shift_frame_type",</span>
-<a name="l00276"></a>00276 <span class="comment">                  CPL_TYPE_INT,</span>
-<a name="l00277"></a>00277 <span class="comment">                              "Shift Frame Type: 0 polynomial, 1 cubic,",</span>
-<a name="l00278"></a>00278 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00279"></a>00279 <span class="comment">                   1,</span>
-<a name="l00280"></a>00280 <span class="comment">                               2,0,1);</span>
-<a name="l00281"></a>00281 <span class="comment"></span>
-<a name="l00282"></a>00282 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_typ");</span>
-<a name="l00283"></a>00283 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00284"></a>00284 <span class="comment">  */</span>
-<a name="l00285"></a>00285   <span class="comment">/* order of the interpolation for the spectral shift of frames */</span>
-<a name="l00286"></a>00286   <span class="comment">/*</span>
-<a name="l00287"></a>00287 <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.shift_frame_order",</span>
-<a name="l00288"></a>00288 <span class="comment">                  CPL_TYPE_INT,</span>
-<a name="l00289"></a>00289 <span class="comment">                              "Shift Frame Order",</span>
-<a name="l00290"></a>00290 <span class="comment">                              "sinfoni.stacked",</span>
-<a name="l00291"></a>00291 <span class="comment">                               2);</span>
-<a name="l00292"></a>00292 <span class="comment"></span>
-<a name="l00293"></a>00293 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_ord");</span>
-<a name="l00294"></a>00294 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00295"></a>00295 <span class="comment">  */</span>
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 <span class="comment">/*</span>
-<a name="l00298"></a>00298 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00299"></a>00299 <span class="comment">  WarpFix</span>
-<a name="l00300"></a>00300 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00301"></a>00301 <span class="comment"> */</span>
-<a name="l00302"></a>00302   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.warpfix_ind"</span>,
-<a name="l00303"></a>00303                   CPL_TYPE_BOOL,
-<a name="l00304"></a>00304                               <span class="stringliteral">"Warp Fix Index: "</span>,
-<a name="l00305"></a>00305                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00306"></a>00306                               TRUE);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-warpfix_ind"</span>);
-<a name="l00309"></a>00309   cpl_parameterlist_append(list, p);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311  
-<a name="l00312"></a>00312   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.warpfix_kernel"</span>,
-<a name="l00313"></a>00313                   CPL_TYPE_STRING,
-<a name="l00314"></a>00314                  <span class="stringliteral">"Warpfix kernel: "</span>,
-<a name="l00315"></a>00315                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00316"></a>00316                  <span class="stringliteral">"tanh"</span>,
-<a name="l00317"></a>00317                                6,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc"</span>,<span class="stringliteral">"sinc2"</span>,
-<a name="l00318"></a>00318                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-warpfix_kernel"</span>);
-<a name="l00321"></a>00321   cpl_parameterlist_append(list, p);
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.qc_thresh_min"</span>,
-<a name="l00325"></a>00325                   CPL_TYPE_INT,
-<a name="l00326"></a>00326                               <span class="stringliteral">"qc_thresh_min"</span>,
-<a name="l00327"></a>00327                               <span class="stringliteral">"sinfoni.stack"</span>,
-<a name="l00328"></a>00328                               0);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-qc_thresh_min"</span>);
-<a name="l00331"></a>00331   cpl_parameterlist_append(list, p);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.qc_thresh_max"</span>,
-<a name="l00335"></a>00335                   CPL_TYPE_INT,
-<a name="l00336"></a>00336                               <span class="stringliteral">"qc_thresh_max"</span>,
-<a name="l00337"></a>00337                               <span class="stringliteral">"sinfoni.stack"</span>,
-<a name="l00338"></a>00338                               49000);
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-qc_thresh_max"</span>);
-<a name="l00341"></a>00341   cpl_parameterlist_append(list, p);
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345   <span class="comment">/* indicates if sky raw frame should be subtracted (TRUE) or not (FALSE) */</span>
-<a name="l00346"></a>00346   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.sub_raw_sky"</span>,
-<a name="l00347"></a>00347                   CPL_TYPE_BOOL,
-<a name="l00348"></a>00348                               <span class="stringliteral">"indicates if the raw sky frame should be "</span>
-<a name="l00349"></a>00349                               <span class="stringliteral">"subtracted (TRUE) or (FALSE)"</span>,
-<a name="l00350"></a>00350                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00351"></a>00351                               TRUE);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-sub_raw_sky"</span>);
-<a name="l00354"></a>00354   cpl_parameterlist_append(list, p);
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_prepare_stacked_frames_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_prepare_stacked_frames_config.c,v 1.8 2008/02/27 15:10:05 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2008/02/27 15:10:05 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/**************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  * Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  **************************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_prepare_stacked_frames_config.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  sinfo_prepare_stacked_frames_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  Clean Mean </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.low_rejection"</span>,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="stringliteral">"lower rejection"</span>,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"stack-lo_rej"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.high_rejection"</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                               <span class="stringliteral">"higher rejection"</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               0.1,0.0,1.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-hi_rej"</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  Flat Field </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/* indicates if flatfielding is carried through or not */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.flat_index"</span>,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               <span class="stringliteral">"Flat Index: "</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               TRUE);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-flat_ind"</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">/* indicates if flatfield is normalized to itself </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">   (to remove lamp response curve) */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.mflat_norm_smooth"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                               <span class="stringliteral">"Normalize master flat to its smoothed value "</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                               <span class="stringliteral">"(to remove lamp response curve). "</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"0 (no smooth). 1 (apply fft filter along y)."</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                               <span class="stringliteral">"2 (apply running median filter along y)."</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                              0,3,0,1,2);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mflat_norm_smooth"</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/* indicates if flatfield is normalized to itself </span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">   (to remove lamp response curve) */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.stacked.mflat_smooth_rad"</span>,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               <span class="stringliteral">"Normalization smoothing radii "</span>,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                               16,3,2048);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mflat_smooth_rad"</span>);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">  Bad Pixel </span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/* indicates if the bad pixels should be interpolated or not */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.mask_index"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                               <span class="stringliteral">"BP Mask Interpolation Switch: "</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                               <span class="stringliteral">"indicates if the bad pixel mask should be "</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                  <span class="stringliteral">"applied (1) or not (0) "</span>,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                  <span class="comment">/*</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">                              "2: indicates that "</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">                              "the bad pixels should be interpolated by "</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">                              "using bezier splines",</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                1,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                  2,0,1); <span class="comment">/* there was also 2 allowed */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mask_ind"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/* indicates if the bad pixels should be indicated (TRUE) or </span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">   interpolated (FALSE)*/</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.ind_index"</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                               <span class="stringliteral">"indicates if the bad pixels should be "</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                               <span class="stringliteral">"indicated (yes) or interpolated (no)"</span>,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                               FALSE);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-ind_ind"</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">/* maximal pixel distance from bad pixel to take valid pixels */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.mask_rad"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                               <span class="stringliteral">"Max distance bad-good pix: "</span>,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                               4);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-mask_rad"</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="comment">/* Temporally removed options: index_list, sigma-factor, </span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">     used if mask_ind=2,3 */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="comment">/* file list containing the index files for bezier interpolation */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.index_list",</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">                  CPL_TYPE_STRING,</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">                              "Contain Index Files: ",</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">                              "indexlist");</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment"></span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-index_list");</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="comment">/* sigmaFactor for bad pixel search in method maskInd = 3 */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.sigma_factor",</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">                  CPL_TYPE_DOUBLE,</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">                              "Sigma Factor for bp search: ",</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">                              3.);</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment"></span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-sigma_factor");</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>  </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">  Interleaving: only to support dither mode. We comment </span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="comment">/* indicates if interleaving should be carried through */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.inter_index",</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">                              "Interleaving Switch: ",</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">                              FALSE);</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment"></span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-inter_ind");</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">/* number of image rows from which the general offset between the frames is </span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">   determined */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.no_rows",</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">                  CPL_TYPE_INT,</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">                              "Number Of Rows",</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">                              400);</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment"></span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-no_rows");</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">  Gauss Convolution</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="comment">/* indicates if a Gaussian convolution is applied or not */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.gauss_index"</span>,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"Gaussian Convolution Switch: "</span>,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                               FALSE);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-gauss_ind"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">/* kernel half width of the Gaussian response function */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.kernel_half_width"</span>,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                               <span class="stringliteral">"Kernel Half Width"</span>,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                                2);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-khw"</span>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">  Shift Frames (To be used?)</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="comment">/* Suppressed in release 1.1.0 */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="comment">/* indicates if a Gaussian convolution is applied or not */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.shift_frame_index",</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">                              "Shift Frame Switch: ",</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">                              FALSE);</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment"></span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_ind");</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="comment">/*type of interpolation to be used (0=polynomial , 1=cubic spline) */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">  p = cpl_parameter_new_enum("sinfoni.stacked.shift_frame_type",</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">                  CPL_TYPE_INT,</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">                              "Shift Frame Type: 0 polynomial, 1 cubic,",</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">                   1,</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">                               2,0,1);</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment"></span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_typ");</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="comment">/* order of the interpolation for the spectral shift of frames */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.stacked.shift_frame_order",</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">                  CPL_TYPE_INT,</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">                              "Shift Frame Order",</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">                              "sinfoni.stacked",</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">                               2);</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment"></span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"stack-shft_ord");</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">  WarpFix</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.warpfix_ind"</span>,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                               <span class="stringliteral">"Warp Fix Index: "</span>,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                               TRUE);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-warpfix_ind"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>  </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.stacked.warpfix_kernel"</span>,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                  <span class="stringliteral">"Warpfix kernel: "</span>,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                  <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                                6,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc"</span>,<span class="stringliteral">"sinc2"</span>,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-warpfix_kernel"</span>);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                               <span class="stringliteral">"qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                               <span class="stringliteral">"sinfoni.stack"</span>,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                               0);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                               <span class="stringliteral">"qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                               <span class="stringliteral">"sinfoni.stack"</span>,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                               49000);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="comment">/* indicates if sky raw frame should be subtracted (TRUE) or not (FALSE) */</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.sub_raw_sky"</span>,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                               <span class="stringliteral">"indicates if the raw sky frame should be "</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                               <span class="stringliteral">"subtracted (TRUE) or (FALSE)"</span>,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                               TRUE);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"stack-sub_raw_sky"</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__prepare__stacked__frames__config_8h_source.html b/html/sinfo__prepare__stacked__frames__config_8h_source.html
index 87b0024..74914a9 100644
--- a/html/sinfo__prepare__stacked__frames__config_8h_source.html
+++ b/html/sinfo__prepare__stacked__frames__config_8h_source.html
@@ -2,48 +2,79 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_prepare_stacked_frames_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_prepare_stacked_frames_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_prepare_stacked_frames_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization </span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keywordtype">void</span>
-<a name="l00033"></a>00033 sinfo_prepare_stacked_frames_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_prepare_stacked_frames_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_prepare_stacked_frames_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> sinfo_prepare_stacked_frames_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pro__save_8c_source.html b/html/sinfo__pro__save_8c_source.html
index bdbfa36..5789555 100644
--- a/html/sinfo__pro__save_8c_source.html
+++ b/html/sinfo__pro__save_8c_source.html
@@ -2,1048 +2,1079 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pro_save.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pro_save.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "sinfo_utilities.h"</span> 
-<a name="l00028"></a>00028 <span class="preprocessor">#include "sinfo_globals.h"</span> 
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00031"></a>00031 sinfo_pfits_put_qc(
-<a name="l00032"></a>00032            cpl_propertylist       *   plist,
-<a name="l00033"></a>00033            cpl_table          *   qclog);
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00036"></a>00036 sinfo_log_pro(<span class="keywordtype">char</span>* name_o,
-<a name="l00037"></a>00037               <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_catg, 
-<a name="l00038"></a>00038               <span class="keywordtype">int</span> frm_type, 
-<a name="l00039"></a>00039               cpl_frameset* ref_set,
-<a name="l00040"></a>00040               cpl_frameset** out_set, 
-<a name="l00041"></a>00041               cpl_propertylist** plist,
-<a name="l00042"></a>00042               cpl_parameterlist* parlist, 
-<a name="l00043"></a>00043               <span class="keyword">const</span> <span class="keywordtype">char</span>* recid);
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00047"></a>00047 sinfo_check_name(<span class="keyword">const</span> <span class="keywordtype">char</span>* in, <span class="keywordtype">char</span>** ou, <span class="keywordtype">int</span> type, <span class="keywordtype">char</span>** paf);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00050"></a>00050 sinfo_clean_header(cpl_propertylist** header);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00052"></a>00052 sinfo_clean_cube_header(cpl_propertylist** header);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keyword">static</span> FILE * 
-<a name="l00056"></a>00056 sinfo_paf_print_header(
-<a name="l00057"></a>00057                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   filename,
-<a name="l00058"></a>00058                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   paf_id,
-<a name="l00059"></a>00059                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   paf_desc,
-<a name="l00060"></a>00060                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   login_name,
-<a name="l00061"></a>00061                <span class="keywordtype">char</span>    *   datetime) ;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00071"></a>00071 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00097"></a>00097 <span class="keyword">static</span> FILE * 
-<a name="l00098"></a>00098 sinfo_paf_print_header(
-<a name="l00099"></a>00099                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   filename,
-<a name="l00100"></a>00100                <span class="keyword">const</span> <span class="keywordtype">char</span>    *      paf_id,
-<a name="l00101"></a>00101                <span class="keyword">const</span> <span class="keywordtype">char</span>    *    paf_desc,
-<a name="l00102"></a>00102                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   login_name,
-<a name="l00103"></a>00103                <span class="keywordtype">char</span>    *   datetime)
-<a name="l00104"></a>00104 {
-<a name="l00105"></a>00105   FILE * paf ;
-<a name="l00106"></a>00106     
-<a name="l00107"></a>00107   <span class="keywordflow">if</span> ((paf=fopen(filename, <span class="stringliteral">"w"</span>))==NULL) {
-<a name="l00108"></a>00108     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot create PAF file [%s]"</span>, filename);
-<a name="l00109"></a>00109     <span class="keywordflow">return</span> NULL ;
-<a name="l00110"></a>00110   }
-<a name="l00111"></a>00111   fprintf(paf, <span class="stringliteral">"PAF.HDR.START         ;# start of header\n"</span>);
-<a name="l00112"></a>00112   fprintf(paf, <span class="stringliteral">"PAF.TYPE              \"pipeline product\" ;\n"</span>);
-<a name="l00113"></a>00113   fprintf(paf, <span class="stringliteral">"PAF.ID                \"%s\"\n"</span>, paf_id);
-<a name="l00114"></a>00114   fprintf(paf, <span class="stringliteral">"PAF.NAME              \"%s\"\n"</span>, filename);
-<a name="l00115"></a>00115   fprintf(paf, <span class="stringliteral">"PAF.DESC              \"%s\"\n"</span>, paf_desc);
-<a name="l00116"></a>00116   fprintf(paf, <span class="stringliteral">"PAF.CRTE.NAME         \"%s\"\n"</span>, login_name) ;
-<a name="l00117"></a>00117   fprintf(paf, <span class="stringliteral">"PAF.CRTE.DAYTIM       \"%s\"\n"</span>, datetime) ;
-<a name="l00118"></a>00118   fprintf(paf, <span class="stringliteral">"PAF.LCHG.NAME         \"%s\"\n"</span>, login_name) ;
-<a name="l00119"></a>00119   fprintf(paf, <span class="stringliteral">"PAF.LCHG.DAYTIM       \"%s\"\n"</span>, datetime) ;
-<a name="l00120"></a>00120   fprintf(paf, <span class="stringliteral">"PAF.CHCK.CHECKSUM     \"\"\n"</span>);
-<a name="l00121"></a>00121   fprintf(paf, <span class="stringliteral">"PAF.HDR.END           ;# end of header\n"</span>);
-<a name="l00122"></a>00122   fprintf(paf, <span class="stringliteral">"\n"</span>);
-<a name="l00123"></a>00123   <span class="keywordflow">return</span> paf ;
-<a name="l00124"></a>00124 }
-<a name="l00134"></a>00134 <span class="keywordtype">int</span> 
-<a name="l00135"></a>00135 sinfo_update_fits_card_int(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">int</span> value)
-<a name="l00136"></a>00136 {
-<a name="l00137"></a>00137   cpl_propertylist *   plist =NULL;
-<a name="l00138"></a>00138   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {
-<a name="l00139"></a>00139     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);
-<a name="l00140"></a>00140     cpl_propertylist_delete(plist) ;
-<a name="l00141"></a>00141     <span class="keywordflow">return</span> -1 ;
-<a name="l00142"></a>00142   }
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_int(plist,card,value)){
-<a name="l00145"></a>00145     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);
-<a name="l00146"></a>00146     cpl_propertylist_delete(plist) ;
-<a name="l00147"></a>00147     <span class="keywordflow">return</span> -1 ;
-<a name="l00148"></a>00148   }
-<a name="l00149"></a>00149   cpl_propertylist_delete(plist) ;
-<a name="l00150"></a>00150   <span class="keywordflow">return</span> 0;
-<a name="l00151"></a>00151 }
-<a name="l00152"></a>00152 
-<a name="l00162"></a>00162 <span class="keywordtype">int</span> 
-<a name="l00163"></a>00163 sinfo_update_fits_card_float(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">float</span> value)
-<a name="l00164"></a>00164 {
-<a name="l00165"></a>00165   cpl_propertylist *   plist =NULL;
-<a name="l00166"></a>00166   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {
-<a name="l00167"></a>00167     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);
-<a name="l00168"></a>00168     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00169"></a>00169     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_where());
-<a name="l00170"></a>00170     cpl_propertylist_delete(plist) ;
-<a name="l00171"></a>00171     <span class="keywordflow">return</span> -1 ;
-<a name="l00172"></a>00172   }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_float(plist,card,value)){
-<a name="l00175"></a>00175     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);
-<a name="l00176"></a>00176     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00177"></a>00177     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_where());
-<a name="l00178"></a>00178     cpl_propertylist_delete(plist) ;
-<a name="l00179"></a>00179     <span class="keywordflow">return</span> -1 ;
-<a name="l00180"></a>00180   }
-<a name="l00181"></a>00181   cpl_propertylist_delete(plist) ;
-<a name="l00182"></a>00182   <span class="keywordflow">return</span> 0;
-<a name="l00183"></a>00183 }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 
-<a name="l00195"></a>00195 <span class="keywordtype">int</span> 
-<a name="l00196"></a>00196 sinfo_update_fits_card_double(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">double</span> value)
-<a name="l00197"></a>00197 {
-<a name="l00198"></a>00198   cpl_propertylist *   plist =NULL;
-<a name="l00199"></a>00199   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {
-<a name="l00200"></a>00200     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);
-<a name="l00201"></a>00201     cpl_propertylist_delete(plist) ;
-<a name="l00202"></a>00202     <span class="keywordflow">return</span> -1 ;
-<a name="l00203"></a>00203   }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_double(plist,card,value)){
-<a name="l00206"></a>00206     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"gsetting header of file %s"</span>,file);
-<a name="l00207"></a>00207     cpl_propertylist_delete(plist) ;
-<a name="l00208"></a>00208     <span class="keywordflow">return</span> -1 ;
-<a name="l00209"></a>00209   }
-<a name="l00210"></a>00210   cpl_propertylist_delete(plist) ;
-<a name="l00211"></a>00211   <span class="keywordflow">return</span> 0;
-<a name="l00212"></a>00212 }
-<a name="l00213"></a>00213 
-<a name="l00223"></a>00223 <span class="keywordtype">int</span> 
-<a name="l00224"></a>00224 sinfo_update_fits_card_long(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">long</span> value)
-<a name="l00225"></a>00225 {
-<a name="l00226"></a>00226   cpl_propertylist *   plist =NULL;
-<a name="l00227"></a>00227   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {
-<a name="l00228"></a>00228     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);
-<a name="l00229"></a>00229     cpl_propertylist_delete(plist) ;
-<a name="l00230"></a>00230     <span class="keywordflow">return</span> -1 ;
-<a name="l00231"></a>00231   }
-<a name="l00232"></a>00232   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_long(plist,card,value)){
-<a name="l00233"></a>00233     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);
-<a name="l00234"></a>00234     cpl_propertylist_delete(plist) ;
-<a name="l00235"></a>00235     <span class="keywordflow">return</span> -1 ;
-<a name="l00236"></a>00236   }
-<a name="l00237"></a>00237   cpl_propertylist_delete(plist) ;
-<a name="l00238"></a>00238   <span class="keywordflow">return</span> 0;
-<a name="l00239"></a>00239 }
-<a name="l00240"></a>00240 
-<a name="l00250"></a>00250 <span class="keywordtype">int</span> 
-<a name="l00251"></a>00251 sinfo_update_ims_fits_card_string(cpl_imagelist* iml,
-<a name="l00252"></a>00252                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* file, 
-<a name="l00253"></a>00253                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* card,
-<a name="l00254"></a>00254                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* value)
-<a name="l00255"></a>00255 {
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   cpl_propertylist *   plist =NULL;
-<a name="l00258"></a>00258   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {
-<a name="l00259"></a>00259     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);
-<a name="l00260"></a>00260     cpl_propertylist_delete(plist) ;
-<a name="l00261"></a>00261     <span class="keywordflow">return</span> -1 ;
-<a name="l00262"></a>00262   }
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_string(plist,card,value)){
-<a name="l00266"></a>00266     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);
-<a name="l00267"></a>00267     cpl_propertylist_delete(plist) ;
-<a name="l00268"></a>00268     <span class="keywordflow">return</span> -1 ;
-<a name="l00269"></a>00269   }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   <span class="keywordflow">if</span> (cpl_imagelist_save(iml,file,CPL_BPP_IEEE_FLOAT,
-<a name="l00272"></a>00272                          plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00273"></a>00273     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);
-<a name="l00274"></a>00274     cpl_propertylist_delete(plist) ;
-<a name="l00275"></a>00275   }
-<a name="l00276"></a>00276   cpl_propertylist_delete(plist) ;
-<a name="l00277"></a>00277   <span class="keywordflow">return</span> 0;
-<a name="l00278"></a>00278 }
-<a name="l00279"></a>00279 <span class="comment">/* Not used </span>
-<a name="l00280"></a>00280 <span class="comment">static int sinfo_save_paf(char* name_p, </span>
-<a name="l00281"></a>00281 <span class="comment">              const char* rec_id, </span>
-<a name="l00282"></a>00282 <span class="comment">              cpl_table* qclog,</span>
-<a name="l00283"></a>00283 <span class="comment">              cpl_propertylist*   plist,</span>
-<a name="l00284"></a>00284 <span class="comment">              const char*      pro_catg)</span>
-<a name="l00285"></a>00285 <span class="comment">{</span>
-<a name="l00286"></a>00286 <span class="comment"></span>
-<a name="l00287"></a>00287 <span class="comment"></span>
-<a name="l00288"></a>00288 <span class="comment"></span>
-<a name="l00289"></a>00289 <span class="comment">  FILE            *   paf ;</span>
-<a name="l00290"></a>00290 <span class="comment">  const char            *   sval ;</span>
-<a name="l00291"></a>00291 <span class="comment">  char            key_name[FILE_NAME_SZ] ;</span>
-<a name="l00292"></a>00292 <span class="comment">  char            key_paf[FILE_NAME_SZ] ;</span>
-<a name="l00293"></a>00293 <span class="comment">  char            key_dpaf[FILE_NAME_SZ] ;</span>
-<a name="l00294"></a>00294 <span class="comment">  char            key_type[FILE_NAME_SZ] ;</span>
-<a name="l00295"></a>00295 <span class="comment">  char            key_value[FILE_NAME_SZ] ;</span>
-<a name="l00296"></a>00296 <span class="comment">  double dval=0;</span>
-<a name="l00297"></a>00297 <span class="comment"></span>
-<a name="l00298"></a>00298 <span class="comment">  int i =0;</span>
-<a name="l00299"></a>00299 <span class="comment">  int n=0;</span>
-<a name="l00300"></a>00300 <span class="comment">  sinfo_msg( "Writing %s" , name_p) ;</span>
-<a name="l00301"></a>00301 <span class="comment">  // Create the default PAF header</span>
-<a name="l00302"></a>00302 <span class="comment">  if ((paf = sinfo_paf_print_header(name_p,rec_id,"QC file","login-name",</span>
-<a name="l00303"></a>00303 <span class="comment">                    sinfo_get_datetime_iso8601())) == NULL) {</span>
-<a name="l00304"></a>00304 <span class="comment">    sinfo_msg_error( "cannot open file [%s] for output", name_p) ;</span>
-<a name="l00305"></a>00305 <span class="comment">    return -1 ;</span>
-<a name="l00306"></a>00306 <span class="comment">  }</span>
-<a name="l00307"></a>00307 <span class="comment">  if (sinfo_check_rec_status(0) == -1) {</span>
-<a name="l00308"></a>00308 <span class="comment">    sinfo_msg_error( "Something was wrong") ;</span>
-<a name="l00309"></a>00309 <span class="comment">    return -1 ;</span>
-<a name="l00310"></a>00310 <span class="comment">  }</span>
-<a name="l00311"></a>00311 <span class="comment"></span>
-<a name="l00312"></a>00312 <span class="comment">  // Test entries</span>
-<a name="l00313"></a>00313 <span class="comment">  sinfo_blank2dot(PAF_NAME_PIPE_ID,key_dpaf);</span>
-<a name="l00314"></a>00314 <span class="comment">  fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,</span>
-<a name="l00315"></a>00315 <span class="comment">      VERSION,KEY_HELP_PIPE_ID);</span>
-<a name="l00316"></a>00316 <span class="comment"></span>
-<a name="l00317"></a>00317 <span class="comment">  strcpy(key_name,KEY_NAME_PIPEFILE);        </span>
-<a name="l00318"></a>00318 <span class="comment">  strcpy(key_paf,KEY_NAME_PIPEFILE);        </span>
-<a name="l00319"></a>00319 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span>
-<a name="l00320"></a>00320 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00321"></a>00321 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s\" \n",key_dpaf,</span>
-<a name="l00322"></a>00322 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PIPEFILE);</span>
-<a name="l00323"></a>00323 <span class="comment">  }</span>
-<a name="l00324"></a>00324 <span class="comment"></span>
-<a name="l00325"></a>00325 <span class="comment">  // Value: "TEMPORARY", "PREPROCESSED", "REDUCED" or "QCPARAM".</span>
-<a name="l00326"></a>00326 <span class="comment">  strcpy(key_name,KEY_NAME_PRO_TYPE);</span>
-<a name="l00327"></a>00327 <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_TYPE);    </span>
-<a name="l00328"></a>00328 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span>
-<a name="l00329"></a>00329 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00330"></a>00330 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,</span>
-<a name="l00331"></a>00331 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_TYPE);</span>
-<a name="l00332"></a>00332 <span class="comment">  }</span>
-<a name="l00333"></a>00333 <span class="comment"></span>
-<a name="l00334"></a>00334 <span class="comment">  strcpy(key_name,KEY_NAME_PRO_DATANCOM); </span>
-<a name="l00335"></a>00335 <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_DATANCOM); </span>
-<a name="l00336"></a>00336 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span>
-<a name="l00337"></a>00337 <span class="comment">  if (sinfo_propertylist_has(plist,key_name)) {</span>
-<a name="l00338"></a>00338 <span class="comment">    fprintf(paf,"%-21s %d ;# %s\" \n",key_dpaf,</span>
-<a name="l00339"></a>00339 <span class="comment">        cpl_propertylist_get_int(plist,key_name),KEY_HELP_PRO_DATANCOM);</span>
-<a name="l00340"></a>00340 <span class="comment">  }</span>
-<a name="l00341"></a>00341 <span class="comment">     </span>
-<a name="l00342"></a>00342 <span class="comment">  strcpy(key_name,KEY_NAME_NCORRS_NAME);</span>
-<a name="l00343"></a>00343 <span class="comment">  strcpy(key_paf,PAF_NAME_NCORRS_NAME);</span>
-<a name="l00344"></a>00344 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span>
-<a name="l00345"></a>00345 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00346"></a>00346 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span>
-<a name="l00347"></a>00347 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_NCORRS_NAME);</span>
-<a name="l00348"></a>00348 <span class="comment">  }</span>
-<a name="l00349"></a>00349 <span class="comment"></span>
-<a name="l00350"></a>00350 <span class="comment">  strcpy(key_name,KEY_NAME_DET_NDSAMPLES);</span>
-<a name="l00351"></a>00351 <span class="comment">  strcpy(key_paf,PAF_NAME_DET_NDSAMPLES);</span>
-<a name="l00352"></a>00352 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00353"></a>00353 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00354"></a>00354 <span class="comment">    fprintf(paf,"%-21s %d ;# %s \n",key_dpaf, </span>
-<a name="l00355"></a>00355 <span class="comment">        cpl_propertylist_get_int(plist,key_name),KEY_HELP_DET_NDSAMPLES);</span>
-<a name="l00356"></a>00356 <span class="comment">  }</span>
-<a name="l00357"></a>00357 <span class="comment"></span>
-<a name="l00358"></a>00358 <span class="comment">  strcpy(key_name,KEY_NAME_FILT_NAME);      </span>
-<a name="l00359"></a>00359 <span class="comment">  strcpy(key_paf,PAF_NAME_FILT_NAME);      </span>
-<a name="l00360"></a>00360 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00361"></a>00361 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00362"></a>00362 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span>
-<a name="l00363"></a>00363 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_NAME);</span>
-<a name="l00364"></a>00364 <span class="comment">  }</span>
-<a name="l00365"></a>00365 <span class="comment"></span>
-<a name="l00366"></a>00366 <span class="comment">  strcpy(key_name,KEY_NAME_FILT_ID);        </span>
-<a name="l00367"></a>00367 <span class="comment">  strcpy(key_paf,PAF_NAME_FILT_ID);        </span>
-<a name="l00368"></a>00368 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00369"></a>00369 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00370"></a>00370 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span>
-<a name="l00371"></a>00371 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_ID);</span>
-<a name="l00372"></a>00372 <span class="comment">  }</span>
-<a name="l00373"></a>00373 <span class="comment"></span>
-<a name="l00374"></a>00374 <span class="comment">  strcpy(key_name,KEY_NAME_PREOPTICS);        </span>
-<a name="l00375"></a>00375 <span class="comment">  strcpy(key_paf,PAF_NAME_PREOPTICS);        </span>
-<a name="l00376"></a>00376 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00377"></a>00377 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00378"></a>00378 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span>
-<a name="l00379"></a>00379 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PREOPTICS);</span>
-<a name="l00380"></a>00380 <span class="comment">  }</span>
-<a name="l00381"></a>00381 <span class="comment"></span>
-<a name="l00382"></a>00382 <span class="comment">  strcpy(key_name,KEY_NAME_GRAT_NAME);        </span>
-<a name="l00383"></a>00383 <span class="comment">  strcpy(key_paf,PAF_NAME_GRAT_NAME);        </span>
-<a name="l00384"></a>00384 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00385"></a>00385 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00386"></a>00386 <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n",key_dpaf, </span>
-<a name="l00387"></a>00387 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_GRAT_NAME);</span>
-<a name="l00388"></a>00388 <span class="comment">  }</span>
-<a name="l00389"></a>00389 <span class="comment">    </span>
-<a name="l00390"></a>00390 <span class="comment">  strcpy(key_name,KEY_NAME_GRAT_WLEN);        </span>
-<a name="l00391"></a>00391 <span class="comment">  strcpy(key_paf,PAF_NAME_GRAT_WLEN);        </span>
-<a name="l00392"></a>00392 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00393"></a>00393 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00394"></a>00394 <span class="comment">    fprintf(paf, "%-21s %f ;# %s \n", key_dpaf,</span>
-<a name="l00395"></a>00395 <span class="comment">        cpl_propertylist_get_double(plist,key_name),KEY_HELP_GRAT_WLEN);</span>
-<a name="l00396"></a>00396 <span class="comment">  }</span>
-<a name="l00397"></a>00397 <span class="comment"></span>
-<a name="l00398"></a>00398 <span class="comment">  strcpy(key_name,KEY_NAME_PRO_RECID);  </span>
-<a name="l00399"></a>00399 <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_RECID);  </span>
-<a name="l00400"></a>00400 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00401"></a>00401 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00402"></a>00402 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span>
-<a name="l00403"></a>00403 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_RECID);</span>
-<a name="l00404"></a>00404 <span class="comment">  }</span>
-<a name="l00405"></a>00405 <span class="comment"></span>
-<a name="l00406"></a>00406 <span class="comment"></span>
-<a name="l00407"></a>00407 <span class="comment">  // snprintf(cval, MAX_NAME_SIZE-1,"CPL-%s", get_cpl_version());</span>
-<a name="l00408"></a>00408 <span class="comment">  strcpy(key_name,KEY_NAME_PRO_DRSID); </span>
-<a name="l00409"></a>00409 <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_DRSID); </span>
-<a name="l00410"></a>00410 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00411"></a>00411 <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span>
-<a name="l00412"></a>00412 <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span>
-<a name="l00413"></a>00413 <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_DRSID);</span>
-<a name="l00414"></a>00414 <span class="comment">  }</span>
-<a name="l00415"></a>00415 <span class="comment"></span>
-<a name="l00416"></a>00416 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DATE_OBS)) {</span>
-<a name="l00417"></a>00417 <span class="comment">    sval = sinfo_pfits_get_date_obs(plist);</span>
-<a name="l00418"></a>00418 <span class="comment">    strcpy(key_paf,KEY_NAME_DATE_OBS); </span>
-<a name="l00419"></a>00419 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00420"></a>00420 <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s\n",key_dpaf, </span>
-<a name="l00421"></a>00421 <span class="comment">        sval,KEY_HELP_DATE_OBS) ;</span>
-<a name="l00422"></a>00422 <span class="comment">  }</span>
-<a name="l00423"></a>00423 <span class="comment"></span>
-<a name="l00424"></a>00424 <span class="comment">  </span>
-<a name="l00425"></a>00425 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_TEL_AIRM_START)) {</span>
-<a name="l00426"></a>00426 <span class="comment">    dval = sinfo_pfits_get_airmass_start(plist);</span>
-<a name="l00427"></a>00427 <span class="comment">    strcpy(key_paf,PAF_NAME_TEL_AIRM_START); </span>
-<a name="l00428"></a>00428 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00429"></a>00429 <span class="comment">    fprintf(paf, "%-21s \"%f\" ;# %s \n",key_dpaf, </span>
-<a name="l00430"></a>00430 <span class="comment">        dval,KEY_HELP_TEL_AIRM_START) ;</span>
-<a name="l00431"></a>00431 <span class="comment">  }</span>
-<a name="l00432"></a>00432 <span class="comment">   </span>
-<a name="l00433"></a>00433 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_ARCFILE)) {</span>
-<a name="l00434"></a>00434 <span class="comment">    sval = sinfo_pfits_get_arcfile(plist);</span>
-<a name="l00435"></a>00435 <span class="comment">    strcpy(key_paf,KEY_NAME_ARCFILE);</span>
-<a name="l00436"></a>00436 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);      </span>
-<a name="l00437"></a>00437 <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,sval,KEY_HELP_ARCFILE) ;</span>
-<a name="l00438"></a>00438 <span class="comment"></span>
-<a name="l00439"></a>00439 <span class="comment">  } else if (sinfo_propertylist_has(plist,KEY_NAME_PRO_REC1_RAW1_NAME)) {</span>
-<a name="l00440"></a>00440 <span class="comment">    sval = sinfo_pfits_get_rec1raw1name(plist);</span>
-<a name="l00441"></a>00441 <span class="comment">    strcpy(key_paf,KEY_NAME_ARCFILE);</span>
-<a name="l00442"></a>00442 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);       </span>
-<a name="l00443"></a>00443 <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,sval,KEY_HELP_ARCFILE) ;</span>
-<a name="l00444"></a>00444 <span class="comment">  } else {</span>
-<a name="l00445"></a>00445 <span class="comment">    sinfo_msg_error("%s is missing QC LOG will fail!",KEY_NAME_ARCFILE);</span>
-<a name="l00446"></a>00446 <span class="comment">  }</span>
-<a name="l00447"></a>00447 <span class="comment"></span>
-<a name="l00448"></a>00448 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_TPL_ID)) {</span>
-<a name="l00449"></a>00449 <span class="comment">    sval = sinfo_pfits_get_templateid(plist);</span>
-<a name="l00450"></a>00450 <span class="comment">    strcpy(key_paf,PAF_NAME_TPL_ID);</span>
-<a name="l00451"></a>00451 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);       </span>
-<a name="l00452"></a>00452 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00453"></a>00453 <span class="comment">        sval,KEY_HELP_TPL_ID) ;</span>
-<a name="l00454"></a>00454 <span class="comment"> </span>
-<a name="l00455"></a>00455 <span class="comment">  }</span>
-<a name="l00456"></a>00456 <span class="comment"></span>
-<a name="l00457"></a>00457 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DET_DIT)) { </span>
-<a name="l00458"></a>00458 <span class="comment">    strcpy(key_paf,PAF_NAME_DET_DIT); </span>
-<a name="l00459"></a>00459 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00460"></a>00460 <span class="comment">    fprintf(paf,"%-21s %f ; # %s\n", key_dpaf,</span>
-<a name="l00461"></a>00461 <span class="comment">        sinfo_pfits_get_dit(plist),KEY_HELP_DET_DIT) ;</span>
-<a name="l00462"></a>00462 <span class="comment">  }</span>
-<a name="l00463"></a>00463 <span class="comment"></span>
-<a name="l00464"></a>00464 <span class="comment"></span>
-<a name="l00465"></a>00465 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DET_NDIT)) {</span>
-<a name="l00466"></a>00466 <span class="comment">    strcpy(key_paf,PAF_NAME_DET_NDIT); </span>
-<a name="l00467"></a>00467 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span>
-<a name="l00468"></a>00468 <span class="comment">    fprintf(paf,"%-21s %d ; # %s\n", key_dpaf,</span>
-<a name="l00469"></a>00469 <span class="comment">        sinfo_pfits_get_ndit(plist),KEY_HELP_DET_NDIT) ;</span>
-<a name="l00470"></a>00470 <span class="comment">  }</span>
-<a name="l00471"></a>00471 <span class="comment"></span>
-<a name="l00472"></a>00472 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_NCORRS_NAME)) {</span>
-<a name="l00473"></a>00473 <span class="comment">    sval = sinfo_pfits_get_ncorrs_name(plist);</span>
-<a name="l00474"></a>00474 <span class="comment">    strcpy(key_paf,PAF_NAME_NCORRS_NAME); </span>
-<a name="l00475"></a>00475 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00476"></a>00476 <span class="comment"></span>
-<a name="l00477"></a>00477 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00478"></a>00478 <span class="comment">        sval, KEY_HELP_NCORRS_NAME) ;</span>
-<a name="l00479"></a>00479 <span class="comment">  }</span>
-<a name="l00480"></a>00480 <span class="comment">    </span>
-<a name="l00481"></a>00481 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_TYPE)) {</span>
-<a name="l00482"></a>00482 <span class="comment">    sval = sinfo_pfits_get_dpr_type(plist);</span>
-<a name="l00483"></a>00483 <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_TYPE); </span>
-<a name="l00484"></a>00484 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span>
-<a name="l00485"></a>00485 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00486"></a>00486 <span class="comment">        sval, KEY_HELP_DPR_TYPE) ;</span>
-<a name="l00487"></a>00487 <span class="comment">  }</span>
-<a name="l00488"></a>00488 <span class="comment"></span>
-<a name="l00489"></a>00489 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_TECH)) {</span>
-<a name="l00490"></a>00490 <span class="comment">    sval = sinfo_pfits_get_dpr_tech(plist);</span>
-<a name="l00491"></a>00491 <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_TECH); </span>
-<a name="l00492"></a>00492 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);   </span>
-<a name="l00493"></a>00493 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00494"></a>00494 <span class="comment">        sval, KEY_HELP_DPR_TECH) ;</span>
-<a name="l00495"></a>00495 <span class="comment">  }</span>
-<a name="l00496"></a>00496 <span class="comment">    </span>
-<a name="l00497"></a>00497 <span class="comment"></span>
-<a name="l00498"></a>00498 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_CATG)) {</span>
-<a name="l00499"></a>00499 <span class="comment">    sval = sinfo_pfits_get_dpr_catg(plist);</span>
-<a name="l00500"></a>00500 <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_CATG); </span>
-<a name="l00501"></a>00501 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span>
-<a name="l00502"></a>00502 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00503"></a>00503 <span class="comment">        sval, KEY_HELP_DPR_CATG) ;</span>
-<a name="l00504"></a>00504 <span class="comment">  }</span>
-<a name="l00505"></a>00505 <span class="comment">    </span>
-<a name="l00506"></a>00506 <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_CATG); </span>
-<a name="l00507"></a>00507 <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf); </span>
-<a name="l00508"></a>00508 <span class="comment">  fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00509"></a>00509 <span class="comment">      pro_catg, KEY_HELP_PRO_CATG) ;</span>
-<a name="l00510"></a>00510 <span class="comment"></span>
-<a name="l00511"></a>00511 <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_INS_SETUP)) {</span>
-<a name="l00512"></a>00512 <span class="comment">    sval = sinfo_pfits_get_ins_setup(plist);</span>
-<a name="l00513"></a>00513 <span class="comment">    strcpy(key_paf,PAF_NAME_INS_SETUP); </span>
-<a name="l00514"></a>00514 <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span>
-<a name="l00515"></a>00515 <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span>
-<a name="l00516"></a>00516 <span class="comment">        sval, KEY_HELP_INS_SETUP) ;</span>
-<a name="l00517"></a>00517 <span class="comment">  }</span>
-<a name="l00518"></a>00518 <span class="comment"></span>
-<a name="l00519"></a>00519 <span class="comment">  n=cpl_table_get_nrow(qclog);</span>
-<a name="l00520"></a>00520 <span class="comment">  for(i=0;i<n;i++) {</span>
-<a name="l00521"></a>00521 <span class="comment">    strcpy(key_paf,cpl_table_get_string(qclog,"key_name",i));</span>
-<a name="l00522"></a>00522 <span class="comment">    sinfo_blank2dot(key_paf,key_name);</span>
-<a name="l00523"></a>00523 <span class="comment">    strcpy(key_type,cpl_table_get_string(qclog,"key_type",i));</span>
-<a name="l00524"></a>00524 <span class="comment">    strcpy(key_value,cpl_table_get_string(qclog,"key_value",i));</span>
-<a name="l00525"></a>00525 <span class="comment">    if(strcmp(key_type,"CPL_TYPE_STRING") == 0) {</span>
-<a name="l00526"></a>00526 <span class="comment">      strcat(key_name,"               \"%s\"\n");</span>
-<a name="l00527"></a>00527 <span class="comment">      fprintf(paf, key_name, key_value) ;</span>
-<a name="l00528"></a>00528 <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_BOOL") == 0) {</span>
-<a name="l00529"></a>00529 <span class="comment">      strcat(key_name,"               ");</span>
-<a name="l00530"></a>00530 <span class="comment">      strcat(key_name,"%c\n");</span>
-<a name="l00531"></a>00531 <span class="comment">      fprintf(paf, key_name, atoi(key_value)) ;</span>
-<a name="l00532"></a>00532 <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_INT") == 0) {</span>
-<a name="l00533"></a>00533 <span class="comment">      strcat(key_name,"               ");</span>
-<a name="l00534"></a>00534 <span class="comment">      strcat(key_name,"%d\n");</span>
-<a name="l00535"></a>00535 <span class="comment">      fprintf(paf, key_name, atoi(key_value)) ;</span>
-<a name="l00536"></a>00536 <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_FLOAT") == 0) {</span>
-<a name="l00537"></a>00537 <span class="comment">      strcat(key_name,"               ");</span>
-<a name="l00538"></a>00538 <span class="comment">      strcat(key_name,"%g\n");</span>
-<a name="l00539"></a>00539 <span class="comment">      fprintf(paf, key_name, (float) atof(key_value)) ;</span>
-<a name="l00540"></a>00540 <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_DOUBLE") == 0) {</span>
-<a name="l00541"></a>00541 <span class="comment">      strcat(key_name,"               ");</span>
-<a name="l00542"></a>00542 <span class="comment">      strcat(key_name,"%g\n");</span>
-<a name="l00543"></a>00543 <span class="comment">      fprintf(paf, key_name, atof(key_value)) ;</span>
-<a name="l00544"></a>00544 <span class="comment">    }</span>
-<a name="l00545"></a>00545 <span class="comment"></span>
-<a name="l00546"></a>00546 <span class="comment">  }</span>
-<a name="l00547"></a>00547 <span class="comment">  fprintf(paf, "\n");</span>
-<a name="l00548"></a>00548 <span class="comment">  fclose(paf) ;</span>
-<a name="l00549"></a>00549 <span class="comment"></span>
-<a name="l00550"></a>00550 <span class="comment">  if (sinfo_check_rec_status(1) == -1) {</span>
-<a name="l00551"></a>00551 <span class="comment">    sinfo_msg_error( "Something was wrong reading FITS keys") ;</span>
-<a name="l00552"></a>00552 <span class="comment">    return -1 ;</span>
-<a name="l00553"></a>00553 <span class="comment">  }</span>
-<a name="l00554"></a>00554 <span class="comment">  return 0;</span>
-<a name="l00555"></a>00555 <span class="comment"></span>
-<a name="l00556"></a>00556 <span class="comment">}</span>
-<a name="l00557"></a>00557 <span class="comment"></span>
-<a name="l00558"></a>00558 <span class="comment">*/</span>
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00573"></a>00573 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576 <span class="keywordtype">int</span> sinfo_pro_save_ima(
-<a name="l00577"></a>00577                cpl_image       *   ima,
-<a name="l00578"></a>00578                cpl_frameset    *   ref,
-<a name="l00579"></a>00579                cpl_frameset    *   <span class="keyword">set</span>,
-<a name="l00580"></a>00580                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,
-<a name="l00581"></a>00581                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,
-<a name="l00582"></a>00582                cpl_table       *   qclog,
-<a name="l00583"></a>00583                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,
-<a name="l00584"></a>00584                cpl_parameterlist* parlist)
-<a name="l00585"></a>00585 
-<a name="l00586"></a>00586 {
-<a name="l00587"></a>00587   <span class="keywordtype">char</span>      *         name_o ;
-<a name="l00588"></a>00588   <span class="keywordtype">char</span>      *         name_p ;
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590   cpl_propertylist *   plist =NULL;
-<a name="l00591"></a>00591   cpl_frame       *   first_frame=NULL;
-<a name="l00592"></a>00592   <span class="keywordtype">char</span>            *   ref_file=NULL;
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594   <span class="comment">/* Get the reference file  */</span>
-<a name="l00595"></a>00595   first_frame = cpl_frameset_get_first(ref) ;
-<a name="l00596"></a>00596   ref_file = (<span class="keywordtype">char</span>*) cpl_strdup(cpl_frame_get_filename(first_frame)) ;
-<a name="l00597"></a>00597  
-<a name="l00598"></a>00598   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00599"></a>00599   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00600"></a>00600   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
-<a name="l00601"></a>00601   sinfo_msg( <span class="stringliteral">"Writing ima %s pro catg %s"</span> , name_o, pro_catg) ;
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603   <span class="comment">/* Get FITS header from reference file */</span>
-<a name="l00604"></a>00604   <span class="keywordflow">if</span> ((cpl_error_code)((plist=cpl_propertylist_load(ref_file, 0)) == NULL)) {
-<a name="l00605"></a>00605     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,ref_file);
-<a name="l00606"></a>00606     cpl_propertylist_delete(plist) ;
-<a name="l00607"></a>00607     cpl_free(ref_file);
-<a name="l00608"></a>00608     <span class="keywordflow">return</span> -1 ;
-<a name="l00609"></a>00609   }
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611   sinfo_clean_header(&plist);
-<a name="l00612"></a>00612   <span class="keywordflow">if</span> ( ( strstr(pro_catg,<span class="stringliteral">"MASTER_PSF"</span>) != NULL ) || 
-<a name="l00613"></a>00613        ( strstr(pro_catg,<span class="stringliteral">"STD_STAR_SPECTRUM"</span>) != NULL ) || 
-<a name="l00614"></a>00614        ( strstr(pro_catg,<span class="stringliteral">"STD_STAR_SPECTRA"</span>) != NULL ) ) {
-<a name="l00615"></a>00615     sinfo_clean_cube_header(&plist);
-<a name="l00616"></a>00616   }
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span>
-<a name="l00619"></a>00619   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, 
-<a name="l00620"></a>00620         ref,&<span class="keyword">set</span>,&plist,parlist,recid);
-<a name="l00621"></a>00621   <span class="keywordflow">if</span>(qclog != NULL) {
-<a name="l00622"></a>00622     sinfo_pfits_put_qc(plist, qclog) ;
-<a name="l00623"></a>00623   }
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625   <span class="comment">/* Save the file */</span>
-<a name="l00626"></a>00626   <span class="keywordflow">if</span> (cpl_image_save(ima, name_o, CPL_BPP_IEEE_FLOAT, 
-<a name="l00627"></a>00627              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00628"></a>00628     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name_o);
-<a name="l00629"></a>00629     cpl_propertylist_delete(plist) ;
-<a name="l00630"></a>00630     cpl_free(ref_file);
-<a name="l00631"></a>00631     cpl_free(name_o);
-<a name="l00632"></a>00632     cpl_free(name_p);
-<a name="l00633"></a>00633     <span class="keywordflow">return</span> -1 ;
-<a name="l00634"></a>00634   }
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span>
-<a name="l00637"></a>00637 <span class="comment">     if( qclog != NULL) {</span>
-<a name="l00638"></a>00638 <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);  </span>
-<a name="l00639"></a>00639 <span class="comment">     }</span>
-<a name="l00640"></a>00640 <span class="comment">  */</span>
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642   cpl_propertylist_delete(plist) ;
-<a name="l00643"></a>00643   cpl_msg_indent_less() ;
-<a name="l00644"></a>00644   cpl_free(name_o);
-<a name="l00645"></a>00645   cpl_free(name_p);
-<a name="l00646"></a>00646   cpl_free(ref_file);
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648   <span class="keywordflow">return</span> 0 ;
-<a name="l00649"></a>00649 }
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00665"></a>00665 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667 
-<a name="l00668"></a>00668 
-<a name="l00669"></a>00669 <span class="keywordtype">int</span> sinfo_pro_save_tbl(
-<a name="l00670"></a>00670                cpl_table       *   table,
-<a name="l00671"></a>00671                cpl_frameset    *   ref,
-<a name="l00672"></a>00672                cpl_frameset    *   <span class="keyword">set</span>,
-<a name="l00673"></a>00673                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,
-<a name="l00674"></a>00674                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,      
-<a name="l00675"></a>00675                cpl_table       *   qclog,
-<a name="l00676"></a>00676                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,
-<a name="l00677"></a>00677                cpl_parameterlist* parlist)
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679 {
-<a name="l00680"></a>00680   <span class="keywordtype">char</span> *    name_o =NULL;
-<a name="l00681"></a>00681   <span class="keywordtype">char</span> *    name_p =NULL;
-<a name="l00682"></a>00682   cpl_propertylist *   plist=NULL ;
-<a name="l00683"></a>00683   cpl_frame* first_frame=NULL;
-<a name="l00684"></a>00684   <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l00685"></a>00685   <span class="comment">/* Get the reference file  */</span>
-<a name="l00686"></a>00686   first_frame = cpl_frameset_get_first(ref) ;
-<a name="l00687"></a>00687   ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
-<a name="l00688"></a>00688  
-<a name="l00689"></a>00689   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00690"></a>00690   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00691"></a>00691   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_TABLE, &name_p);
-<a name="l00692"></a>00692   sinfo_msg( <span class="stringliteral">"Writing tbl %s pro catg %s"</span> , name_o, pro_catg) ;
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694   <span class="comment">/* Get FITS header from reference file */</span>
-<a name="l00695"></a>00695   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file,0)) == NULL)) 
-<a name="l00696"></a>00696     {
-<a name="l00697"></a>00697       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from tbl frame %s"</span>,ref_file);
-<a name="l00698"></a>00698       cpl_propertylist_delete(plist) ;
-<a name="l00699"></a>00699       cpl_free(ref_file);
-<a name="l00700"></a>00700       cpl_free(name_o);
-<a name="l00701"></a>00701       cpl_free(name_p);
-<a name="l00702"></a>00702       <span class="keywordflow">return</span> -1 ;
-<a name="l00703"></a>00703     }
-<a name="l00704"></a>00704   sinfo_clean_header(&plist);
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span>
-<a name="l00707"></a>00707   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_TABLE, 
-<a name="l00708"></a>00708         ref,&<span class="keyword">set</span>,&plist,parlist,recid);
-<a name="l00709"></a>00709   <span class="keywordflow">if</span>(qclog != NULL) {
-<a name="l00710"></a>00710     sinfo_pfits_put_qc(plist, qclog) ;
-<a name="l00711"></a>00711   }
-<a name="l00712"></a>00712   <span class="comment">/* Save the file */</span>
-<a name="l00713"></a>00713   <span class="keywordflow">if</span> (cpl_table_save(table, plist, NULL, name_o, CPL_IO_DEFAULT) 
-<a name="l00714"></a>00714       != CPL_ERROR_NONE) {
-<a name="l00715"></a>00715     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product: %s"</span>, name_o);
-<a name="l00716"></a>00716     cpl_propertylist_delete(plist) ;
-<a name="l00717"></a>00717     cpl_free(ref_file);
-<a name="l00718"></a>00718     cpl_free(name_o);
-<a name="l00719"></a>00719     cpl_free(name_p);
-<a name="l00720"></a>00720     <span class="keywordflow">return</span> -1 ;
-<a name="l00721"></a>00721   }
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723  
-<a name="l00724"></a>00724   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span>
-<a name="l00725"></a>00725 <span class="comment">     if (qclog != NULL) {</span>
-<a name="l00726"></a>00726 <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);</span>
-<a name="l00727"></a>00727 <span class="comment">     }</span>
-<a name="l00728"></a>00728 <span class="comment">  */</span>
-<a name="l00729"></a>00729   cpl_propertylist_delete(plist) ;
-<a name="l00730"></a>00730   cpl_msg_indent_less() ;
-<a name="l00731"></a>00731   cpl_free(name_o);
-<a name="l00732"></a>00732   cpl_free(name_p);
-<a name="l00733"></a>00733   cpl_free(ref_file);
-<a name="l00734"></a>00734   <span class="keywordflow">return</span> 0 ;
-<a name="l00735"></a>00735 }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737 
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00752"></a>00752 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754 
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756 <span class="keywordtype">int</span> sinfo_pro_save_ims(
-<a name="l00757"></a>00757                cpl_imagelist   *   ims,
-<a name="l00758"></a>00758                cpl_frameset    *   ref,
-<a name="l00759"></a>00759                cpl_frameset    *   <span class="keyword">set</span>,
-<a name="l00760"></a>00760                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,
-<a name="l00761"></a>00761                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,      
-<a name="l00762"></a>00762                cpl_table       *   qclog,
-<a name="l00763"></a>00763                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,
-<a name="l00764"></a>00764                cpl_parameterlist* parlist)
-<a name="l00765"></a>00765 
-<a name="l00766"></a>00766 {
-<a name="l00767"></a>00767   <span class="keywordtype">char</span> *               name_o=NULL;
-<a name="l00768"></a>00768   <span class="keywordtype">char</span> *               name_p=NULL;
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770   cpl_propertylist * plist=NULL ;
-<a name="l00771"></a>00771   cpl_frame* first_frame=NULL;
-<a name="l00772"></a>00772   <span class="keywordtype">char</span>* ref_file=NULL;
-<a name="l00773"></a>00773     
-<a name="l00774"></a>00774   <span class="comment">/* Get the reference file  */</span>
-<a name="l00775"></a>00775   first_frame = cpl_frameset_get_first(ref) ;
-<a name="l00776"></a>00776   ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00779"></a>00779   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00780"></a>00780   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);
-<a name="l00781"></a>00781   sinfo_msg( <span class="stringliteral">"Writing ims %s pro catg %s"</span> , name_o, pro_catg) ;
-<a name="l00782"></a>00782   <span class="comment">/* Get FITS header from reference file */</span>
-<a name="l00783"></a>00783   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL))
-<a name="l00784"></a>00784     {
-<a name="l00785"></a>00785       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from ims frame %s"</span>,ref_file);
-<a name="l00786"></a>00786       cpl_propertylist_delete(plist) ;
-<a name="l00787"></a>00787       cpl_free(ref_file);
-<a name="l00788"></a>00788       cpl_free(name_o);
-<a name="l00789"></a>00789       cpl_free(name_p);
-<a name="l00790"></a>00790       <span class="keywordflow">return</span> -1 ;
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792   sinfo_clean_header(&plist);
-<a name="l00793"></a>00793   <span class="keywordflow">if</span> ( ( strstr(pro_catg,<span class="stringliteral">"STD"</span>) != NULL ) || 
-<a name="l00794"></a>00794        ( strstr(pro_catg,<span class="stringliteral">"PSF"</span>) != NULL ) || 
-<a name="l00795"></a>00795        ( strstr(pro_catg,<span class="stringliteral">"OBJ"</span>) != NULL ) ) {
-<a name="l00796"></a>00796     sinfo_clean_cube_header(&plist);
-<a name="l00797"></a>00797   }
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span>
-<a name="l00800"></a>00800   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, 
-<a name="l00801"></a>00801         ref,&<span class="keyword">set</span>,&plist,parlist,recid);
-<a name="l00802"></a>00802    
-<a name="l00803"></a>00803   <span class="keywordflow">if</span>(qclog != NULL) {
-<a name="l00804"></a>00804     sinfo_pfits_put_qc(plist, qclog) ;
-<a name="l00805"></a>00805   }
-<a name="l00806"></a>00806    
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808   <span class="comment">/* Save the file */</span>
-<a name="l00809"></a>00809   <span class="keywordflow">if</span> (cpl_imagelist_save(ims, name_o, CPL_BPP_IEEE_FLOAT, 
-<a name="l00810"></a>00810              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00811"></a>00811     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name_o);
-<a name="l00812"></a>00812     cpl_propertylist_delete(plist) ;
-<a name="l00813"></a>00813     cpl_free(ref_file);
-<a name="l00814"></a>00814     cpl_free(name_o);
-<a name="l00815"></a>00815     cpl_free(name_p);
-<a name="l00816"></a>00816     <span class="keywordflow">return</span> -1 ;
-<a name="l00817"></a>00817   }
-<a name="l00818"></a>00818 
-<a name="l00819"></a>00819   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span>
-<a name="l00820"></a>00820 <span class="comment">     if (qclog != NULL) {</span>
-<a name="l00821"></a>00821 <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);</span>
-<a name="l00822"></a>00822 <span class="comment">     }</span>
-<a name="l00823"></a>00823 <span class="comment">  */</span>
-<a name="l00824"></a>00824   cpl_propertylist_delete(plist) ;
-<a name="l00825"></a>00825   cpl_msg_indent_less() ;
-<a name="l00826"></a>00826   cpl_free(name_o);
-<a name="l00827"></a>00827   cpl_free(name_p);
-<a name="l00828"></a>00828   cpl_free(ref_file);
-<a name="l00829"></a>00829   <span class="keywordflow">return</span> 0 ;
-<a name="l00830"></a>00830 }
-<a name="l00831"></a>00831 
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00835"></a>00835 sinfo_log_pro(<span class="keywordtype">char</span>* name_o, 
-<a name="l00836"></a>00836               <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_catg, 
-<a name="l00837"></a>00837               <span class="keywordtype">int</span> frm_type, 
-<a name="l00838"></a>00838               cpl_frameset* ref_set,
-<a name="l00839"></a>00839               cpl_frameset** out_set,
-<a name="l00840"></a>00840               cpl_propertylist** plist,
-<a name="l00841"></a>00841               cpl_parameterlist* parlist, 
-<a name="l00842"></a>00842               <span class="keyword">const</span> <span class="keywordtype">char</span>* recid)
-<a name="l00843"></a>00843 {
-<a name="l00844"></a>00844   cpl_frame* product_frame = NULL ;
-<a name="l00845"></a>00845   <span class="keywordtype">char</span> * pipe_id=NULL;
-<a name="l00846"></a>00846   cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848   pipe_id = cpl_calloc(FILE_NAME_SZ,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));
-<a name="l00849"></a>00849   snprintf(pipe_id,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,<span class="stringliteral">"sinfo/"</span>,PACKAGE_VERSION);
-<a name="l00850"></a>00850   product_frame = cpl_frame_new() ;
-<a name="l00851"></a>00851   cpl_frame_set_filename(product_frame, name_o) ;
-<a name="l00852"></a>00852   cpl_frame_set_tag(product_frame, pro_catg) ;
-<a name="l00853"></a>00853   cpl_frame_set_type(product_frame, frm_type);
-<a name="l00854"></a>00854   cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT);
-<a name="l00855"></a>00855   cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL);
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span>
-<a name="l00858"></a>00858 <span class="preprocessor"></span>  <span class="keywordflow">if</span>(cpl_dfs_setup_product_header(*plist,product_frame,ref_set,parlist,recid,
-<a name="l00859"></a>00859                   pipe_id,KEY_VALUE_HPRO_DID,NULL) != CPL_ERROR_NONE) {
-<a name="l00860"></a>00860     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>);
-<a name="l00861"></a>00861     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00862"></a>00862     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00863"></a>00863     cpl_error_reset();
-<a name="l00864"></a>00864   }
-<a name="l00865"></a>00865 <span class="preprocessor">#else</span>
-<a name="l00866"></a>00866 <span class="preprocessor"></span>  <span class="keywordflow">if</span>(cpl_dfs_setup_product_header(*plist,product_frame,ref_set,parlist,recid,
-<a name="l00867"></a>00867                   pipe_id,KEY_VALUE_HPRO_DID) != CPL_ERROR_NONE) {
-<a name="l00868"></a>00868     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>);
-<a name="l00869"></a>00869     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00870"></a>00870     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00871"></a>00871     cpl_error_reset();
-<a name="l00872"></a>00872   }
-<a name="l00873"></a>00873 <span class="preprocessor">#endif</span>
-<a name="l00874"></a>00874 <span class="preprocessor"></span>  cpl_frameset_insert(*out_set, product_frame);
-<a name="l00875"></a>00875   cpl_free(pipe_id);
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877 }
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00880"></a>00880 sinfo_check_name(<span class="keyword">const</span> <span class="keywordtype">char</span>* in, <span class="keywordtype">char</span>** ou, <span class="keywordtype">int</span> type, <span class="keywordtype">char</span>** paf) {
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882   <span class="keywordtype">char</span>* tmp=NULL;
-<a name="l00883"></a>00883   <span class="keywordtype">char</span>  name_b[512] ;
-<a name="l00884"></a>00884   <span class="keywordflow">if</span> (strstr(in, <span class="stringliteral">"."</span> ) != NULL ) {
-<a name="l00885"></a>00885     tmp = sinfo_new_get_rootname(in);
-<a name="l00886"></a>00886     strcpy(name_b,tmp);
-<a name="l00887"></a>00887   } <span class="keywordflow">else</span> {
-<a name="l00888"></a>00888     snprintf(name_b, MAX_NAME_SIZE-1,in) ;
-<a name="l00889"></a>00889   }
-<a name="l00890"></a>00890   strcpy(*ou,name_b);
-<a name="l00891"></a>00891   <span class="keywordflow">if</span> (type == CPL_FRAME_TYPE_TABLE) {
-<a name="l00892"></a>00892     strcat(*ou,<span class="stringliteral">".fits"</span>);
-<a name="l00893"></a>00893   } <span class="keywordflow">else</span> {
-<a name="l00894"></a>00894     strcat(*ou,<span class="stringliteral">".fits"</span>);
-<a name="l00895"></a>00895   }
-<a name="l00896"></a>00896   strcpy(*paf,name_b);
-<a name="l00897"></a>00897   strcat(*paf,<span class="stringliteral">".paf"</span>);
-<a name="l00898"></a>00898 
-<a name="l00899"></a>00899 }
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901 
-<a name="l00902"></a>00902 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00903"></a>00903 sinfo_clean_header(cpl_propertylist** header)
-<a name="l00904"></a>00904 {
-<a name="l00905"></a>00905   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^ESO PRO .*"</span>,0);
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907 }
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909 
-<a name="l00910"></a>00910 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00911"></a>00911 sinfo_clean_cube_header(cpl_propertylist** header)
-<a name="l00912"></a>00912 {
-<a name="l00913"></a>00913   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CRVAL*"</span>,0);
-<a name="l00914"></a>00914   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CRPIX*"</span>,0);
-<a name="l00915"></a>00915   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CTYPE*"</span>,0);
-<a name="l00916"></a>00916   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CUNIT*"</span>,0);
-<a name="l00917"></a>00917   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD1_1"</span>,0);
-<a name="l00918"></a>00918   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD1_2"</span>,0);
-<a name="l00919"></a>00919   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD2_1"</span>,0);
-<a name="l00920"></a>00920   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD2_2"</span>,0);
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922 }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925 
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00930"></a>00930 sinfo_pfits_put_qc(
-<a name="l00931"></a>00931            cpl_propertylist       *   plist,
-<a name="l00932"></a>00932            cpl_table          *   qclog)
-<a name="l00933"></a>00933 {
-<a name="l00934"></a>00934   <span class="keywordtype">char</span>            key_name[FILE_NAME_SZ];
-<a name="l00935"></a>00935   <span class="keywordtype">char</span>            key_value[FILE_NAME_SZ];
-<a name="l00936"></a>00936   <span class="keywordtype">char</span>            key_type[FILE_NAME_SZ];
-<a name="l00937"></a>00937   <span class="keywordtype">char</span>            key_help[FILE_NAME_SZ] ;
-<a name="l00938"></a>00938 
-<a name="l00939"></a>00939   <span class="keywordtype">int</span>             i =0;
-<a name="l00940"></a>00940   <span class="keywordtype">int</span> n =0;
-<a name="l00941"></a>00941   <span class="comment">/* Test entries */</span>
-<a name="l00942"></a>00942   <span class="keywordflow">if</span> (plist == NULL) {
-<a name="l00943"></a>00943     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"plist=NULL, something strange"</span>);
-<a name="l00944"></a>00944     <span class="keywordflow">return</span> -1 ;
-<a name="l00945"></a>00945   }
-<a name="l00946"></a>00946   <span class="comment">/* Parameter Name:    PIPEFILE */</span>
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948   n=cpl_table_get_nrow(qclog);
-<a name="l00949"></a>00949   <span class="keywordflow">for</span>(i=0;i<n;i++) {
-<a name="l00950"></a>00950     strcpy(key_name,<span class="stringliteral">"ESO "</span>);
-<a name="l00951"></a>00951     strcat(key_name,cpl_table_get_string(qclog,<span class="stringliteral">"key_name"</span>,i));
-<a name="l00952"></a>00952     strcpy(key_type,cpl_table_get_string(qclog,<span class="stringliteral">"key_type"</span>,i));
-<a name="l00953"></a>00953     strcpy(key_value,cpl_table_get_string(qclog,<span class="stringliteral">"key_value"</span>,i));
-<a name="l00954"></a>00954     strcpy(key_help,cpl_table_get_string(qclog,<span class="stringliteral">"key_help"</span>,i));
-<a name="l00955"></a>00955 
-<a name="l00956"></a>00956     <span class="comment">/* sinfo_msg("name=%s type=%s value=%s\n",key_name,key_type,key_value); */</span>
-<a name="l00957"></a>00957     <span class="keywordflow">if</span>(!sinfo_propertylist_has(plist,key_name)) {
-<a name="l00958"></a>00958       <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_STRING"</span>) == 0) {
-<a name="l00959"></a>00959     cpl_propertylist_append_string(plist, key_name,key_value) ;
-<a name="l00960"></a>00960     cpl_propertylist_set_comment(plist, key_name,key_help) ;
-<a name="l00961"></a>00961       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_BOOL"</span>) == 0) {
-<a name="l00962"></a>00962     cpl_propertylist_append_bool(plist, key_name,atoi(key_value)) ;
-<a name="l00963"></a>00963     cpl_propertylist_set_comment(plist, key_name,key_help) ;
-<a name="l00964"></a>00964       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_INT"</span>) == 0) {
-<a name="l00965"></a>00965     cpl_propertylist_append_int(plist,key_name,atoi(key_value)) ;
-<a name="l00966"></a>00966     cpl_propertylist_set_comment(plist, key_name,key_help) ;
-<a name="l00967"></a>00967       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_FLOAT"</span>) == 0) {
-<a name="l00968"></a>00968         cpl_propertylist_append_float(plist, key_name,(<span class="keywordtype">float</span>)atof(key_value)) ;
-<a name="l00969"></a>00969         cpl_propertylist_set_comment(plist, key_name,key_help) ;
-<a name="l00970"></a>00970       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>) == 0) {
-<a name="l00971"></a>00971         cpl_propertylist_append_double(plist, key_name,atof(key_value)) ;
-<a name="l00972"></a>00972         cpl_propertylist_set_comment(plist, key_name,key_help) ;
-<a name="l00973"></a>00973       }
-<a name="l00974"></a>00974     }
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976   }
-<a name="l00977"></a>00977 
-<a name="l00978"></a>00978   <span class="keywordflow">return</span> 0 ;
-<a name="l00979"></a>00979 }
-<a name="l00980"></a>00980 
-<a name="l00981"></a>00981 
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983 
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985 
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987 cpl_table *
-<a name="l00988"></a>00988 sinfo_qclog_init(<span class="keywordtype">void</span>)
-<a name="l00989"></a>00989 {
-<a name="l00990"></a>00990 
-<a name="l00991"></a>00991   cpl_table *table;
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993   table = cpl_table_new(0);
-<a name="l00994"></a>00994   cpl_table_new_column(table,<span class="stringliteral">"key_name"</span>, CPL_TYPE_STRING);
-<a name="l00995"></a>00995   cpl_table_new_column(table,<span class="stringliteral">"key_type"</span>, CPL_TYPE_STRING);
-<a name="l00996"></a>00996   cpl_table_new_column(table,<span class="stringliteral">"key_value"</span>, CPL_TYPE_STRING);
-<a name="l00997"></a>00997   cpl_table_new_column(table,<span class="stringliteral">"key_help"</span>, CPL_TYPE_STRING);
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999   <span class="keywordflow">return</span> table;
-<a name="l01000"></a>01000 }
-<a name="l01001"></a>01001 
-<a name="l01002"></a>01002 
-<a name="l01003"></a>01003 
-<a name="l01004"></a>01004 
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006 <span class="keywordtype">int</span>
-<a name="l01007"></a>01007 sinfo_qclog_add_int(cpl_table* table,
-<a name="l01008"></a>01008             <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  
-<a name="l01009"></a>01009             <span class="keyword">const</span> <span class="keywordtype">int</span>    value,
-<a name="l01010"></a>01010             <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,
-<a name="l01011"></a>01011             <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)
-<a name="l01012"></a>01012 {
-<a name="l01013"></a>01013   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);
-<a name="l01014"></a>01014   <span class="keywordtype">int</span> raw = sz;
-<a name="l01015"></a>01015   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l01016"></a>01016   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];
-<a name="l01017"></a>01017 
-<a name="l01018"></a>01018   snprintf(key_value,MAX_NAME_SIZE-1,format,value);
-<a name="l01019"></a>01019   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_INT"</span>); 
-<a name="l01020"></a>01020  
-<a name="l01021"></a>01021   cpl_table_set_size(table,sz+1);
-<a name="l01022"></a>01022 
-<a name="l01023"></a>01023   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);
-<a name="l01024"></a>01024   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);
-<a name="l01025"></a>01025   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);
-<a name="l01026"></a>01026   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028   <span class="keywordflow">return</span> 0;
-<a name="l01029"></a>01029 
-<a name="l01030"></a>01030 }
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034 <span class="keywordtype">int</span>
-<a name="l01035"></a>01035 sinfo_qclog_add_bool(cpl_table* table,
-<a name="l01036"></a>01036              <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  
-<a name="l01037"></a>01037              <span class="keyword">const</span> <span class="keywordtype">char</span>   value,
-<a name="l01038"></a>01038              <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,
-<a name="l01039"></a>01039              <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)
-<a name="l01040"></a>01040 {
-<a name="l01041"></a>01041   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);
-<a name="l01042"></a>01042   <span class="keywordtype">int</span> raw = sz;
-<a name="l01043"></a>01043   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l01044"></a>01044   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046   snprintf(key_value,MAX_NAME_SIZE-1,format,value);
-<a name="l01047"></a>01047   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_BOOL"</span>); 
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049   cpl_table_set_size(table,sz+1);
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);
-<a name="l01052"></a>01052   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);
-<a name="l01053"></a>01053   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);
-<a name="l01054"></a>01054   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056   <span class="keywordflow">return</span> 0;
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058 }
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060 
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 <span class="keywordtype">int</span>
-<a name="l01063"></a>01063 sinfo_qclog_add_float(cpl_table* table,
-<a name="l01064"></a>01064               <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  
-<a name="l01065"></a>01065               <span class="keyword">const</span> <span class="keywordtype">float</span>  value,
-<a name="l01066"></a>01066               <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,
-<a name="l01067"></a>01067               <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)
-<a name="l01068"></a>01068 {
-<a name="l01069"></a>01069   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);
-<a name="l01070"></a>01070   <span class="keywordtype">int</span> raw = sz;
-<a name="l01071"></a>01071   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l01072"></a>01072   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];
-<a name="l01073"></a>01073 
-<a name="l01074"></a>01074   snprintf(key_value,MAX_NAME_SIZE-1,format,value);
-<a name="l01075"></a>01075   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_FLOAT"</span>); 
-<a name="l01076"></a>01076  
-<a name="l01077"></a>01077   cpl_table_set_size(table,sz+1);
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);
-<a name="l01080"></a>01080   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);
-<a name="l01081"></a>01081   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);
-<a name="l01082"></a>01082   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084   <span class="keywordflow">return</span> 0;
-<a name="l01085"></a>01085 
-<a name="l01086"></a>01086 }
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090 <span class="keywordtype">int</span>
-<a name="l01091"></a>01091 sinfo_qclog_add_double(cpl_table* table,
-<a name="l01092"></a>01092                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  
-<a name="l01093"></a>01093                <span class="keyword">const</span> <span class="keywordtype">double</span> value,
-<a name="l01094"></a>01094                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,
-<a name="l01095"></a>01095                <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)
-<a name="l01096"></a>01096 {
-<a name="l01097"></a>01097   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);
-<a name="l01098"></a>01098   <span class="keywordtype">int</span> raw = sz;
-<a name="l01099"></a>01099   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l01100"></a>01100   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102   snprintf(key_value,MAX_NAME_SIZE-1,format,value);
-<a name="l01103"></a>01103   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>); 
-<a name="l01104"></a>01104  
-<a name="l01105"></a>01105   cpl_table_set_size(table,sz+1);
-<a name="l01106"></a>01106 
-<a name="l01107"></a>01107   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);
-<a name="l01108"></a>01108   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);
-<a name="l01109"></a>01109   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);
-<a name="l01110"></a>01110   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112   <span class="keywordflow">return</span> 0;
-<a name="l01113"></a>01113 
-<a name="l01114"></a>01114 }
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116 <span class="keywordtype">int</span>
-<a name="l01117"></a>01117 sinfo_qclog_add_string(cpl_table* table,
-<a name="l01118"></a>01118                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  
-<a name="l01119"></a>01119                <span class="keyword">const</span> <span class="keywordtype">char</span>*  value,
-<a name="l01120"></a>01120                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,
-<a name="l01121"></a>01121                <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)
-<a name="l01122"></a>01122 {
-<a name="l01123"></a>01123   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);
-<a name="l01124"></a>01124   <span class="keywordtype">int</span> raw = sz;
-<a name="l01125"></a>01125   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];
-<a name="l01126"></a>01126   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128   snprintf(key_value,MAX_NAME_SIZE-1,format,value);
-<a name="l01129"></a>01129   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_STRING"</span>); 
-<a name="l01130"></a>01130  
-<a name="l01131"></a>01131   cpl_table_set_size(table,sz+1);
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);
-<a name="l01134"></a>01134   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);
-<a name="l01135"></a>01135   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);
-<a name="l01136"></a>01136   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138   <span class="keywordflow">return</span> 0;
-<a name="l01139"></a>01139 
-<a name="l01140"></a>01140 }
-<a name="l01141"></a>01141 
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pro_save.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "sinfo_utilities.h"</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "sinfo_globals.h"</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> sinfo_pfits_put_qc(</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>            cpl_propertylist       *   plist,</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>            cpl_table          *   qclog);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> sinfo_log_pro(<span class="keywordtype">char</span>* name_o,</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_catg, </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>               <span class="keywordtype">int</span> frm_type, </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>               cpl_frameset* ref_set,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>               cpl_frameset** out_set, </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>               cpl_propertylist** plist,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>               cpl_parameterlist* parlist, </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>* recid);</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> sinfo_check_name(<span class="keyword">const</span> <span class="keywordtype">char</span>* in, <span class="keywordtype">char</span>** ou, <span class="keywordtype">int</span> type, <span class="keywordtype">char</span>** paf);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> sinfo_clean_header(cpl_propertylist** header);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_clean_cube_header(cpl_propertylist** header);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> FILE * </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> sinfo_paf_print_header(</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   filename,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   paf_id,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   paf_desc,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   login_name,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                <span class="keywordtype">char</span>    *   datetime) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keyword">static</span> FILE * </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> sinfo_paf_print_header(</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   filename,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *      paf_id,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *    paf_desc,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>    *   login_name,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                <span class="keywordtype">char</span>    *   datetime)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   FILE * paf ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordflow">if</span> ((paf=fopen(filename, <span class="stringliteral">"w"</span>))==NULL) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot create PAF file [%s]"</span>, filename);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   fprintf(paf, <span class="stringliteral">"PAF.HDR.START         ;# start of header\n"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   fprintf(paf, <span class="stringliteral">"PAF.TYPE              \"pipeline product\" ;\n"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   fprintf(paf, <span class="stringliteral">"PAF.ID                \"%s\"\n"</span>, paf_id);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   fprintf(paf, <span class="stringliteral">"PAF.NAME              \"%s\"\n"</span>, filename);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   fprintf(paf, <span class="stringliteral">"PAF.DESC              \"%s\"\n"</span>, paf_desc);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   fprintf(paf, <span class="stringliteral">"PAF.CRTE.NAME         \"%s\"\n"</span>, login_name) ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   fprintf(paf, <span class="stringliteral">"PAF.CRTE.DAYTIM       \"%s\"\n"</span>, datetime) ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   fprintf(paf, <span class="stringliteral">"PAF.LCHG.NAME         \"%s\"\n"</span>, login_name) ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   fprintf(paf, <span class="stringliteral">"PAF.LCHG.DAYTIM       \"%s\"\n"</span>, datetime) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   fprintf(paf, <span class="stringliteral">"PAF.CHCK.CHECKSUM     \"\"\n"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   fprintf(paf, <span class="stringliteral">"PAF.HDR.END           ;# end of header\n"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   fprintf(paf, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   <span class="keywordflow">return</span> paf ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> sinfo_update_fits_card_int(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">int</span> value)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_int(plist,card,value)){</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> sinfo_update_fits_card_float(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">float</span> value)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_where());</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_float(plist,card,value)){</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_where());</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> sinfo_update_fits_card_double(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_double(plist,card,value)){</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"gsetting header of file %s"</span>,file);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> sinfo_update_fits_card_long(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">long</span> value)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from file %s"</span>,file);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_long(plist,card,value)){</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"setting header of file %s"</span>,file);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> sinfo_update_ims_fits_card_string(cpl_imagelist* iml,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* file, </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* card,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                   <span class="keyword">const</span> <span class="keywordtype">char</span>* value)</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file, 0)) == NULL) {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordflow">if</span> (CPL_ERROR_NONE!=cpl_propertylist_set_string(plist,card,value)){</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="keywordflow">if</span> (cpl_imagelist_save(iml,file,CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                          plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,file);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">/* Not used </span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> <span class="comment">static int sinfo_save_paf(char* name_p, </span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">              const char* rec_id, </span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">              cpl_table* qclog,</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">              cpl_propertylist*   plist,</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">              const char*      pro_catg)</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">{</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment"></span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment"></span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment"></span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">  FILE            *   paf ;</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">  const char            *   sval ;</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">  char            key_name[FILE_NAME_SZ] ;</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">  char            key_paf[FILE_NAME_SZ] ;</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">  char            key_dpaf[FILE_NAME_SZ] ;</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">  char            key_type[FILE_NAME_SZ] ;</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">  char            key_value[FILE_NAME_SZ] ;</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">  double dval=0;</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment"></span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">  int i =0;</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">  int n=0;</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">  sinfo_msg( "Writing %s" , name_p) ;</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">  // Create the default PAF header</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">  if ((paf = sinfo_paf_print_header(name_p,rec_id,"QC file","login-name",</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">                    sinfo_get_datetime_iso8601())) == NULL) {</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">    sinfo_msg_error( "cannot open file [%s] for output", name_p) ;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">    return -1 ;</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="comment">  if (sinfo_check_rec_status(0) == -1) {</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="comment">    sinfo_msg_error( "Something was wrong") ;</span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="comment">    return -1 ;</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> <span class="comment"></span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="comment">  // Test entries</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">  sinfo_blank2dot(PAF_NAME_PIPE_ID,key_dpaf);</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">  fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">      VERSION,KEY_HELP_PIPE_ID);</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment"></span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">  strcpy(key_name,KEY_NAME_PIPEFILE);        </span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">  strcpy(key_paf,KEY_NAME_PIPEFILE);        </span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s\" \n",key_dpaf,</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PIPEFILE);</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment"></span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">  // Value: "TEMPORARY", "PREPROCESSED", "REDUCED" or "QCPARAM".</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">  strcpy(key_name,KEY_NAME_PRO_TYPE);</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_TYPE);    </span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s\" \n", key_dpaf,</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_TYPE);</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment"></span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">  strcpy(key_name,KEY_NAME_PRO_DATANCOM); </span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_DATANCOM); </span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">  if (sinfo_propertylist_has(plist,key_name)) {</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">    fprintf(paf,"%-21s %d ;# %s\" \n",key_dpaf,</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">        cpl_propertylist_get_int(plist,key_name),KEY_HELP_PRO_DATANCOM);</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">     </span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">  strcpy(key_name,KEY_NAME_NCORRS_NAME);</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">  strcpy(key_paf,PAF_NAME_NCORRS_NAME);</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_NCORRS_NAME);</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment"></span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">  strcpy(key_name,KEY_NAME_DET_NDSAMPLES);</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">  strcpy(key_paf,PAF_NAME_DET_NDSAMPLES);</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">    fprintf(paf,"%-21s %d ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">        cpl_propertylist_get_int(plist,key_name),KEY_HELP_DET_NDSAMPLES);</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment"></span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">  strcpy(key_name,KEY_NAME_FILT_NAME);      </span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">  strcpy(key_paf,PAF_NAME_FILT_NAME);      </span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_NAME);</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment"></span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">  strcpy(key_name,KEY_NAME_FILT_ID);        </span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">  strcpy(key_paf,PAF_NAME_FILT_ID);        </span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_FILT_ID);</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment"></span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">  strcpy(key_name,KEY_NAME_PREOPTICS);        </span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PREOPTICS);        </span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PREOPTICS);</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment"></span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">  strcpy(key_name,KEY_NAME_GRAT_NAME);        </span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">  strcpy(key_paf,PAF_NAME_GRAT_NAME);        </span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_GRAT_NAME);</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">    </span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment">  strcpy(key_name,KEY_NAME_GRAT_WLEN);        </span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">  strcpy(key_paf,PAF_NAME_GRAT_WLEN);        </span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="comment">    fprintf(paf, "%-21s %f ;# %s \n", key_dpaf,</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">        cpl_propertylist_get_double(plist,key_name),KEY_HELP_GRAT_WLEN);</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="comment"></span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">  strcpy(key_name,KEY_NAME_PRO_RECID);  </span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_RECID);  </span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n", key_dpaf,</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_RECID);</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment"></span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="comment"></span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="comment">  // snprintf(cval, MAX_NAME_SIZE-1,"CPL-%s", get_cpl_version());</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">  strcpy(key_name,KEY_NAME_PRO_DRSID); </span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_DRSID); </span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">  if (sinfo_propertylist_has(plist, key_name)) {</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">    fprintf(paf,"%-21s \"%s\" ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">        cpl_propertylist_get_string(plist,key_name),KEY_HELP_PRO_DRSID);</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="comment"></span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DATE_OBS)) {</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="comment">    sval = sinfo_pfits_get_date_obs(plist);</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="comment">    strcpy(key_paf,KEY_NAME_DATE_OBS); </span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s\n",key_dpaf, </span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="comment">        sval,KEY_HELP_DATE_OBS) ;</span></div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> <span class="comment"></span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="comment">  </span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_TEL_AIRM_START)) {</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="comment">    dval = sinfo_pfits_get_airmass_start(plist);</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="comment">    strcpy(key_paf,PAF_NAME_TEL_AIRM_START); </span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="comment">    fprintf(paf, "%-21s \"%f\" ;# %s \n",key_dpaf, </span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> <span class="comment">        dval,KEY_HELP_TEL_AIRM_START) ;</span></div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_ARCFILE)) {</span></div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="comment">    sval = sinfo_pfits_get_arcfile(plist);</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> <span class="comment">    strcpy(key_paf,KEY_NAME_ARCFILE);</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);      </span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,sval,KEY_HELP_ARCFILE) ;</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> <span class="comment"></span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> <span class="comment">  } else if (sinfo_propertylist_has(plist,KEY_NAME_PRO_REC1_RAW1_NAME)) {</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">    sval = sinfo_pfits_get_rec1raw1name(plist);</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">    strcpy(key_paf,KEY_NAME_ARCFILE);</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);       </span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ;# %s \n", key_dpaf,sval,KEY_HELP_ARCFILE) ;</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">  } else {</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">    sinfo_msg_error("%s is missing QC LOG will fail!",KEY_NAME_ARCFILE);</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment"></span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_TPL_ID)) {</span></div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> <span class="comment">    sval = sinfo_pfits_get_templateid(plist);</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="comment">    strcpy(key_paf,PAF_NAME_TPL_ID);</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);       </span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="comment">        sval,KEY_HELP_TPL_ID) ;</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="comment"> </span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> <span class="comment"></span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DET_DIT)) { </span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">    strcpy(key_paf,PAF_NAME_DET_DIT); </span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="comment">    fprintf(paf,"%-21s %f ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="comment">        sinfo_pfits_get_dit(plist),KEY_HELP_DET_DIT) ;</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="comment"></span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> <span class="comment"></span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DET_NDIT)) {</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> <span class="comment">    strcpy(key_paf,PAF_NAME_DET_NDIT); </span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="comment">    fprintf(paf,"%-21s %d ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment">        sinfo_pfits_get_ndit(plist),KEY_HELP_DET_NDIT) ;</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> <span class="comment"></span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_NCORRS_NAME)) {</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> <span class="comment">    sval = sinfo_pfits_get_ncorrs_name(plist);</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">    strcpy(key_paf,PAF_NAME_NCORRS_NAME); </span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment"></span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">        sval, KEY_HELP_NCORRS_NAME) ;</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">    </span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_TYPE)) {</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> <span class="comment">    sval = sinfo_pfits_get_dpr_type(plist);</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_TYPE); </span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);        </span></div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="comment">        sval, KEY_HELP_DPR_TYPE) ;</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment"></span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_TECH)) {</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> <span class="comment">    sval = sinfo_pfits_get_dpr_tech(plist);</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_TECH); </span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf);   </span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> <span class="comment">        sval, KEY_HELP_DPR_TECH) ;</span></div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> <span class="comment">    </span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> <span class="comment"></span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_DPR_CATG)) {</span></div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="comment">    sval = sinfo_pfits_get_dpr_catg(plist);</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">    strcpy(key_paf,PAF_NAME_DPR_CATG); </span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">        sval, KEY_HELP_DPR_CATG) ;</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="comment">    </span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="comment">  strcpy(key_paf,PAF_NAME_PRO_CATG); </span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">  sinfo_blank2dot(key_paf,key_dpaf); </span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">  fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">      pro_catg, KEY_HELP_PRO_CATG) ;</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment"></span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> <span class="comment">  if (sinfo_propertylist_has(plist,KEY_NAME_INS_SETUP)) {</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> <span class="comment">    sval = sinfo_pfits_get_ins_setup(plist);</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span> <span class="comment">    strcpy(key_paf,PAF_NAME_INS_SETUP); </span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment">    sinfo_blank2dot(key_paf,key_dpaf); </span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">    fprintf(paf, "%-21s \"%s\" ; # %s\n", key_dpaf,</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment">        sval, KEY_HELP_INS_SETUP) ;</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="comment"></span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">  n=cpl_table_get_nrow(qclog);</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="comment">  for(i=0;i<n;i++) {</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="comment">    strcpy(key_paf,cpl_table_get_string(qclog,"key_name",i));</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> <span class="comment">    sinfo_blank2dot(key_paf,key_name);</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> <span class="comment">    strcpy(key_type,cpl_table_get_string(qclog,"key_type",i));</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> <span class="comment">    strcpy(key_value,cpl_table_get_string(qclog,"key_value",i));</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="comment">    if(strcmp(key_type,"CPL_TYPE_STRING") == 0) {</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="comment">      strcat(key_name,"               \"%s\"\n");</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> <span class="comment">      fprintf(paf, key_name, key_value) ;</span></div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_BOOL") == 0) {</span></div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> <span class="comment">      strcat(key_name,"               ");</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> <span class="comment">      strcat(key_name,"%c\n");</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">      fprintf(paf, key_name, atoi(key_value)) ;</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_INT") == 0) {</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">      strcat(key_name,"               ");</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="comment">      strcat(key_name,"%d\n");</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">      fprintf(paf, key_name, atoi(key_value)) ;</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_FLOAT") == 0) {</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment">      strcat(key_name,"               ");</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="comment">      strcat(key_name,"%g\n");</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">      fprintf(paf, key_name, (float) atof(key_value)) ;</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> <span class="comment">    } else if(strcmp(key_type,"CPL_TYPE_DOUBLE") == 0) {</span></div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> <span class="comment">      strcat(key_name,"               ");</span></div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> <span class="comment">      strcat(key_name,"%g\n");</span></div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> <span class="comment">      fprintf(paf, key_name, atof(key_value)) ;</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment"></span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">  fprintf(paf, "\n");</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="comment">  fclose(paf) ;</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="comment"></span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="comment">  if (sinfo_check_rec_status(1) == -1) {</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">    sinfo_msg_error( "Something was wrong reading FITS keys") ;</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">    return -1 ;</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="comment">  return 0;</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment"></span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment">}</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="comment"></span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="keywordtype">int</span> sinfo_pro_save_ima(</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>                cpl_image       *   ima,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>                cpl_frameset    *   ref,</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>                cpl_frameset    *   <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>                cpl_table       *   qclog,</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>                cpl_parameterlist* parlist)</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> </div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordtype">char</span>      *         name_o ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   <span class="keywordtype">char</span>      *         name_p ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   cpl_propertylist *   plist =NULL;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   cpl_frame       *   first_frame=NULL;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   <span class="keywordtype">char</span>            *   ref_file=NULL;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="comment">/* Get the reference file  */</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   first_frame = cpl_frameset_get_first(ref) ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   ref_file = (<span class="keywordtype">char</span>*) cpl_strdup(cpl_frame_get_filename(first_frame)) ;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>  </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   sinfo_msg( <span class="stringliteral">"Writing ima %s pro catg %s"</span> , name_o, pro_catg) ;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   <span class="comment">/* Get FITS header from reference file */</span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist=cpl_propertylist_load(ref_file, 0)) == NULL)) {</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference ima frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     cpl_free(ref_file);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   sinfo_clean_header(&plist);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   <span class="keywordflow">if</span> ( ( strstr(pro_catg,<span class="stringliteral">"MASTER_PSF"</span>) != NULL ) || </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>        ( strstr(pro_catg,<span class="stringliteral">"STD_STAR_SPECTRUM"</span>) != NULL ) || </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>        ( strstr(pro_catg,<span class="stringliteral">"STD_STAR_SPECTRA"</span>) != NULL ) ) {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     sinfo_clean_cube_header(&plist);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>   }</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         ref,&<span class="keyword">set</span>,&plist,parlist,recid);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>   <span class="keywordflow">if</span>(qclog != NULL) {</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     sinfo_pfits_put_qc(plist, qclog) ;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="keywordflow">if</span> (cpl_image_save(ima, name_o, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name_o);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     cpl_free(ref_file);</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     cpl_free(name_o);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>     cpl_free(name_p);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   }</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> <span class="comment">     if( qclog != NULL) {</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);  </span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   cpl_msg_indent_less() ;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   cpl_free(name_o);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   cpl_free(name_p);</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   cpl_free(ref_file);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> }</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="keywordtype">int</span> sinfo_pro_save_tbl(</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                cpl_table       *   table,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                cpl_frameset    *   ref,</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                cpl_frameset    *   <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,      </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                cpl_table       *   qclog,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                cpl_parameterlist* parlist)</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> {</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   <span class="keywordtype">char</span> *    name_o =NULL;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   <span class="keywordtype">char</span> *    name_p =NULL;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   cpl_propertylist *   plist=NULL ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   cpl_frame* first_frame=NULL;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   <span class="comment">/* Get the reference file  */</span></div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   first_frame = cpl_frameset_get_first(ref) ;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>  </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_TABLE, &name_p);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   sinfo_msg( <span class="stringliteral">"Writing tbl %s pro catg %s"</span> , name_o, pro_catg) ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="comment">/* Get FITS header from reference file */</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file,0)) == NULL)) </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from tbl frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>       cpl_free(ref_file);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>       cpl_free(name_o);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>       cpl_free(name_p);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     }</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   sinfo_clean_header(&plist);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_TABLE, </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>         ref,&<span class="keyword">set</span>,&plist,parlist,recid);</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   <span class="keywordflow">if</span>(qclog != NULL) {</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     sinfo_pfits_put_qc(plist, qclog) ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   }</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="keywordflow">if</span> (cpl_table_save(table, plist, NULL, name_o, CPL_IO_DEFAULT) </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>       != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product: %s"</span>, name_o);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     cpl_free(ref_file);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     cpl_free(name_o);</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     cpl_free(name_p);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   }</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>  </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> <span class="comment">     if (qclog != NULL) {</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   cpl_msg_indent_less() ;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   cpl_free(name_o);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   cpl_free(name_p);</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   cpl_free(ref_file);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> <span class="keywordtype">int</span> sinfo_pro_save_ims(</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>                cpl_imagelist   *   ims,</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                cpl_frameset    *   ref,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>                cpl_frameset    *   <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   out_file,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   pro_catg,      </div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                cpl_table       *   qclog,</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>      *   recid,</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                cpl_parameterlist* parlist)</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="keywordtype">char</span> *               name_o=NULL;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   <span class="keywordtype">char</span> *               name_p=NULL;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>   cpl_propertylist * plist=NULL ;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   cpl_frame* first_frame=NULL;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   <span class="keywordtype">char</span>* ref_file=NULL;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     </div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>   <span class="comment">/* Get the reference file  */</span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   first_frame = cpl_frameset_get_first(ref) ;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>   ref_file = cpl_strdup(cpl_frame_get_filename(first_frame)) ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   name_o = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>   name_p = cpl_malloc(FILE_NAME_SZ * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   sinfo_check_name(out_file, &name_o, CPL_FRAME_TYPE_IMAGE, &name_p);</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   sinfo_msg( <span class="stringliteral">"Writing ims %s pro catg %s"</span> , name_o, pro_catg) ;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="comment">/* Get FITS header from reference file */</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL))</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     {</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from ims frame %s"</span>,ref_file);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>       cpl_free(ref_file);</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>       cpl_free(name_o);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>       cpl_free(name_p);</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     }</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   sinfo_clean_header(&plist);</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordflow">if</span> ( ( strstr(pro_catg,<span class="stringliteral">"STD"</span>) != NULL ) || </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>        ( strstr(pro_catg,<span class="stringliteral">"PSF"</span>) != NULL ) || </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>        ( strstr(pro_catg,<span class="stringliteral">"OBJ"</span>) != NULL ) ) {</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     sinfo_clean_cube_header(&plist);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   }</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="comment">/* Add DataFlow keywords and log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   sinfo_log_pro(name_o, pro_catg, CPL_FRAME_TYPE_IMAGE, </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         ref,&<span class="keyword">set</span>,&plist,parlist,recid);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>    </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="keywordflow">if</span>(qclog != NULL) {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     sinfo_pfits_put_qc(plist, qclog) ;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   }</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>    </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   <span class="keywordflow">if</span> (cpl_imagelist_save(ims, name_o, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name_o);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     cpl_free(ref_file);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     cpl_free(name_o);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     cpl_free(name_p);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   <span class="comment">/* THE PAF FILE FOR QC PARAMETERS </span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">     if (qclog != NULL) {</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">     sinfo_save_paf(name_p,recid,qclog,plist,pro_catg);</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   cpl_msg_indent_less() ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   cpl_free(name_o);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   cpl_free(name_p);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   cpl_free(ref_file);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> }</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> </div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> sinfo_log_pro(<span class="keywordtype">char</span>* name_o, </div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_catg, </div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>               <span class="keywordtype">int</span> frm_type, </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>               cpl_frameset* ref_set,</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>               cpl_frameset** out_set,</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>               cpl_propertylist** plist,</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>               cpl_parameterlist* parlist, </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>* recid)</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> {</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>   cpl_frame* product_frame = NULL ;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="keywordtype">char</span> * pipe_id=NULL;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   pipe_id = cpl_calloc(FILE_NAME_SZ,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>));</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   snprintf(pipe_id,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,<span class="stringliteral">"sinfo/"</span>,PACKAGE_VERSION);</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>   product_frame = cpl_frame_new() ;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   cpl_frame_set_filename(product_frame, name_o) ;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>   cpl_frame_set_tag(product_frame, pro_catg) ;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   cpl_frame_set_type(product_frame, frm_type);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL);</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span>(cpl_dfs_setup_product_header(*plist,product_frame,ref_set,parlist,recid,</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>                   pipe_id,KEY_VALUE_HPRO_DID,NULL) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="preprocessor"></span>  <span class="keywordflow">if</span>(cpl_dfs_setup_product_header(*plist,product_frame,ref_set,parlist,recid,</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>                   pipe_id,KEY_VALUE_HPRO_DID) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   }</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> <span class="preprocessor"></span>  cpl_frameset_insert(*out_set, product_frame);</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>   cpl_free(pipe_id);</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> }</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> sinfo_check_name(<span class="keyword">const</span> <span class="keywordtype">char</span>* in, <span class="keywordtype">char</span>** ou, <span class="keywordtype">int</span> type, <span class="keywordtype">char</span>** paf) {</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   <span class="keywordtype">char</span>* tmp=NULL;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   <span class="keywordtype">char</span>  name_b[512] ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   <span class="keywordflow">if</span> (strstr(in, <span class="stringliteral">"."</span> ) != NULL ) {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     tmp = sinfo_new_get_rootname(in);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     strcpy(name_b,tmp);</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     snprintf(name_b, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>, in) ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   strcpy(*ou,name_b);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   <span class="keywordflow">if</span> (type == CPL_FRAME_TYPE_TABLE) {</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     strcat(*ou,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     strcat(*ou,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   }</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   strcpy(*paf,name_b);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>   strcat(*paf,<span class="stringliteral">".paf"</span>);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> }</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> sinfo_clean_header(cpl_propertylist** header)</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> {</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^ESO PRO .*"</span>,0);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> }</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> sinfo_clean_cube_header(cpl_propertylist** header)</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> {</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CRVAL*"</span>,0);</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CRPIX*"</span>,0);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CTYPE*"</span>,0);</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CUNIT*"</span>,0);</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD1_1"</span>,0);</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD1_2"</span>,0);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD2_1"</span>,0);</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   cpl_propertylist_erase_regexp(*header, <span class="stringliteral">"^CD2_2"</span>,0);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span> </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> sinfo_pfits_put_qc(</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>            cpl_propertylist       *   plist,</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>            cpl_table          *   qclog)</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> {</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   <span class="keywordtype">char</span>            key_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   <span class="keywordtype">char</span>            key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   <span class="keywordtype">char</span>            key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   <span class="keywordtype">char</span>            key_help[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span> </div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   <span class="keywordtype">int</span>             i =0;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>   <span class="keywordtype">int</span> n =0;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   <span class="keywordflow">if</span> (plist == NULL) {</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"plist=NULL, something strange"</span>);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   <span class="comment">/* Parameter Name:    PIPEFILE */</span></div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   n=cpl_table_get_nrow(qclog);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   <span class="keywordflow">for</span>(i=0;i<n;i++) {</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     strcpy(key_name,<span class="stringliteral">"ESO "</span>);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     strcat(key_name,cpl_table_get_string(qclog,<span class="stringliteral">"key_name"</span>,i));</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     strcpy(key_type,cpl_table_get_string(qclog,<span class="stringliteral">"key_type"</span>,i));</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     strcpy(key_value,cpl_table_get_string(qclog,<span class="stringliteral">"key_value"</span>,i));</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     strcpy(key_help,cpl_table_get_string(qclog,<span class="stringliteral">"key_help"</span>,i));</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span> </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="comment">/* sinfo_msg("name=%s type=%s value=%s\n",key_name,key_type,key_value); */</span></div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     <span class="keywordflow">if</span>(!sinfo_propertylist_has(plist,key_name)) {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>       <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_STRING"</span>) == 0) {</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     cpl_propertylist_append_string(plist, key_name,key_value) ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     cpl_propertylist_set_comment(plist, key_name,key_help) ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_BOOL"</span>) == 0) {</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     cpl_propertylist_append_bool(plist, key_name,atoi(key_value)) ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     cpl_propertylist_set_comment(plist, key_name,key_help) ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_INT"</span>) == 0) {</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     cpl_propertylist_append_int(plist,key_name,atoi(key_value)) ;</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     cpl_propertylist_set_comment(plist, key_name,key_help) ;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_FLOAT"</span>) == 0) {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>         cpl_propertylist_append_float(plist, key_name,(<span class="keywordtype">float</span>)atof(key_value)) ;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         cpl_propertylist_set_comment(plist, key_name,key_help) ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strcmp(key_type,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>) == 0) {</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         cpl_propertylist_append_double(plist, key_name,atof(key_value)) ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         cpl_propertylist_set_comment(plist, key_name,key_help) ;</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>       }</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>   }</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> }</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span> </div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span> cpl_table *</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> sinfo_qclog_init(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span> {</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> </div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>   cpl_table *table;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>   table = cpl_table_new(0);</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>   cpl_table_new_column(table,<span class="stringliteral">"key_name"</span>, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>   cpl_table_new_column(table,<span class="stringliteral">"key_type"</span>, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>   cpl_table_new_column(table,<span class="stringliteral">"key_value"</span>, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>   cpl_table_new_column(table,<span class="stringliteral">"key_help"</span>, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>   <span class="keywordflow">return</span> table;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> sinfo_qclog_add_int(cpl_table* table,</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>             <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  </div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>             <span class="keyword">const</span> <span class="keywordtype">int</span>    value,</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>             <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>             <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   <span class="keywordtype">int</span> raw = sz;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>   snprintf(key_value,MAX_NAME_SIZE-1,format,value);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_INT"</span>); </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   cpl_table_set_size(table,sz+1);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> }</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> sinfo_qclog_add_bool(cpl_table* table,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>   value,</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> {</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   <span class="keywordtype">int</span> raw = sz;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   snprintf(key_value,MAX_NAME_SIZE-1,format,value);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_BOOL"</span>); </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   cpl_table_set_size(table,sz+1);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> sinfo_qclog_add_float(cpl_table* table,</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>               <span class="keyword">const</span> <span class="keywordtype">float</span>  value,</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> {</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>   <span class="keywordtype">int</span> raw = sz;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span> </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>   snprintf(key_value,MAX_NAME_SIZE-1,format,value);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_FLOAT"</span>); </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>   cpl_table_set_size(table,sz+1);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> sinfo_qclog_add_double(cpl_table* table,</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>                <span class="keyword">const</span> <span class="keywordtype">double</span> value,</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> {</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>   <span class="keywordtype">int</span> raw = sz;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>   snprintf(key_value,MAX_NAME_SIZE-1,format,value);</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_DOUBLE"</span>); </div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   cpl_table_set_size(table,sz+1);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> sinfo_qclog_add_string(cpl_table* table,</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_name,  </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  value,</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  key_help,</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>                <span class="keyword">const</span> <span class="keywordtype">char</span>*  format)</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>   <span class="keywordtype">int</span> sz = cpl_table_get_nrow(table);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>   <span class="keywordtype">int</span> raw = sz;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>   <span class="keywordtype">char</span> key_value[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>   <span class="keywordtype">char</span> key_type[FILE_NAME_SZ];</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>   snprintf(key_value,MAX_NAME_SIZE-1,format,value);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>   strcpy(key_type,<span class="stringliteral">"CPL_TYPE_STRING"</span>); </div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>   cpl_table_set_size(table,sz+1);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>   cpl_table_set_string(table,<span class="stringliteral">"key_name"</span> ,raw,key_name);</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>   cpl_table_set_string(table,<span class="stringliteral">"key_type"</span> ,raw,key_type);</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>   cpl_table_set_string(table,<span class="stringliteral">"key_value"</span>,raw,key_value);</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>   cpl_table_set_string(table,<span class="stringliteral">"key_help"</span> ,raw,key_help);</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> </div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> }</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pro__save_8h_source.html b/html/sinfo__pro__save_8h_source.html
index f536c83..31a685e 100644
--- a/html/sinfo__pro__save_8h_source.html
+++ b/html/sinfo__pro__save_8h_source.html
@@ -2,227 +2,258 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pro_save.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pro_save.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_PRO_SAVE_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRO_SAVE_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span>
-<a name="l00004"></a>00004 <span class="comment">/*</span>
-<a name="l00005"></a>00005 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00006"></a>00006 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00007"></a>00007 <span class="comment"> *</span>
-<a name="l00008"></a>00008 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00009"></a>00009 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00010"></a>00010 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00011"></a>00011 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00012"></a>00012 <span class="comment"> *</span>
-<a name="l00013"></a>00013 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00014"></a>00014 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00015"></a>00015 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00016"></a>00016 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00017"></a>00017 <span class="comment"> *</span>
-<a name="l00018"></a>00018 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00019"></a>00019 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00020"></a>00020 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00021"></a>00021 <span class="comment"> */</span>
-<a name="l00022"></a>00022 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#endif</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00036"></a>00036 <span class="keywordtype">int</span> 
-<a name="l00037"></a>00037 sinfo_update_fits_card_int(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">int</span> value);
-<a name="l00038"></a>00038 
-<a name="l00046"></a>00046 <span class="keywordtype">int</span> 
-<a name="l00047"></a>00047 sinfo_update_fits_card_float(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">float</span> value);
-<a name="l00048"></a>00048 
-<a name="l00056"></a>00056 <span class="keywordtype">int</span> 
-<a name="l00057"></a>00057 sinfo_update_fits_card_double(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">double</span> value);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00067"></a>00067 <span class="keywordtype">int</span> 
-<a name="l00068"></a>00068 sinfo_update_fits_card_long(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">long</span> value);
-<a name="l00069"></a>00069 
-<a name="l00077"></a>00077 <span class="keywordtype">int</span> sinfo_update_ims_fits_card_string(cpl_imagelist* iml, 
-<a name="l00078"></a>00078                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* file,
-<a name="l00079"></a>00079                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* card,
-<a name="l00080"></a>00080                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* value);
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00096"></a>00096 <span class="keywordtype">int</span>
-<a name="l00097"></a>00097 sinfo_pro_save_tbl(
-<a name="l00098"></a>00098     cpl_table* tbl,
-<a name="l00099"></a>00099         cpl_frameset* ref,
-<a name="l00100"></a>00100         cpl_frameset* sof,
-<a name="l00101"></a>00101         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00102"></a>00102         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00103"></a>00103         cpl_table* qclog,
-<a name="l00104"></a>00104         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00105"></a>00105         cpl_parameterlist* parlist);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00122"></a>00122 <span class="keywordtype">int</span>
-<a name="l00123"></a>00123 sinfo_pro_save_ima(
-<a name="l00124"></a>00124         cpl_image* ima,
-<a name="l00125"></a>00125         cpl_frameset* ref,
-<a name="l00126"></a>00126         cpl_frameset* sof,
-<a name="l00127"></a>00127         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00128"></a>00128         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00129"></a>00129         cpl_table* qclog,
-<a name="l00130"></a>00130         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00131"></a>00131         cpl_parameterlist* parlist);
-<a name="l00132"></a>00132 
-<a name="l00146"></a>00146 <span class="keywordtype">int</span>
-<a name="l00147"></a>00147 sinfo_pro_save_ims(
-<a name="l00148"></a>00148         cpl_imagelist* ims,
-<a name="l00149"></a>00149         cpl_frameset* ref,
-<a name="l00150"></a>00150         cpl_frameset* sof,
-<a name="l00151"></a>00151         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00152"></a>00152         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00153"></a>00153         cpl_table* qclog,
-<a name="l00154"></a>00154         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00155"></a>00155         cpl_parameterlist* parlist);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 
-<a name="l00176"></a>00176 <span class="keywordtype">int</span>
-<a name="l00177"></a>00177 sinfo_save_pro_tbl(
-<a name="l00178"></a>00178     cpl_table* tbl,
-<a name="l00179"></a>00179         cpl_frameset* ref,
-<a name="l00180"></a>00180         cpl_frameset* sof,
-<a name="l00181"></a>00181         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00182"></a>00182         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00183"></a>00183         cpl_propertylist* qclog,
-<a name="l00184"></a>00184         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00185"></a>00185         cpl_parameterlist* parlist);
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 
-<a name="l00202"></a>00202 <span class="keywordtype">int</span>
-<a name="l00203"></a>00203 sinfo_save_pro_ima(
-<a name="l00204"></a>00204         cpl_image* ima,
-<a name="l00205"></a>00205         cpl_frameset* ref,
-<a name="l00206"></a>00206         cpl_frameset* sof,
-<a name="l00207"></a>00207         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00208"></a>00208         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00209"></a>00209         cpl_propertylist* qclog,
-<a name="l00210"></a>00210         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00211"></a>00211         cpl_parameterlist* parlist);
-<a name="l00212"></a>00212 
-<a name="l00226"></a>00226 <span class="keywordtype">int</span>
-<a name="l00227"></a>00227 sinfo_save_pro_ims(
-<a name="l00228"></a>00228         cpl_imagelist* ims,
-<a name="l00229"></a>00229         cpl_frameset* ref,
-<a name="l00230"></a>00230         cpl_frameset* sof,
-<a name="l00231"></a>00231         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, 
-<a name="l00232"></a>00232         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, 
-<a name="l00233"></a>00233         cpl_propertylist* qclog,
-<a name="l00234"></a>00234         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,
-<a name="l00235"></a>00235         cpl_parameterlist* parlist);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 cpl_table* sinfo_qclog_init(<span class="keywordtype">void</span>);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 <span class="keywordtype">int</span>
-<a name="l00244"></a>00244 sinfo_qclog_add_int(cpl_table* table,
-<a name="l00245"></a>00245                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00246"></a>00246                  <span class="keyword">const</span> <span class="keywordtype">int</span>   value,
-<a name="l00247"></a>00247                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00248"></a>00248          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="keywordtype">int</span>
-<a name="l00252"></a>00252 sinfo_qclog_add_bool(cpl_table* table,
-<a name="l00253"></a>00253                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00254"></a>00254                  <span class="keyword">const</span> <span class="keywordtype">char</span>  value,
-<a name="l00255"></a>00255                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00256"></a>00256          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="keywordtype">int</span>
-<a name="l00260"></a>00260 sinfo_qclog_add_float(cpl_table* table,
-<a name="l00261"></a>00261                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00262"></a>00262                  <span class="keyword">const</span> <span class="keywordtype">float</span>   value,
-<a name="l00263"></a>00263                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00264"></a>00264          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267 <span class="keywordtype">int</span>
-<a name="l00268"></a>00268 sinfo_qclog_add_double(cpl_table* table,
-<a name="l00269"></a>00269                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00270"></a>00270                  <span class="keyword">const</span> <span class="keywordtype">double</span>   value,
-<a name="l00271"></a>00271                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00272"></a>00272          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 <span class="keywordtype">int</span>
-<a name="l00276"></a>00276 sinfo_qclog_add_string(cpl_table* table,
-<a name="l00277"></a>00277                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00278"></a>00278                  <span class="keyword">const</span> <span class="keywordtype">char</span>*   value,
-<a name="l00279"></a>00279                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00280"></a>00280          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 cpl_propertylist* sinfo_qc_init(<span class="keywordtype">void</span>);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="keywordtype">int</span>
-<a name="l00287"></a>00287 sinfo_qc_add_int(cpl_propertylist* table,
-<a name="l00288"></a>00288                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00289"></a>00289                  <span class="keyword">const</span> <span class="keywordtype">int</span>   value,
-<a name="l00290"></a>00290                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00291"></a>00291          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 <span class="keywordtype">int</span>
-<a name="l00295"></a>00295 sinfo_qc_add_bool(cpl_propertylist* table,
-<a name="l00296"></a>00296                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00297"></a>00297                  <span class="keyword">const</span> <span class="keywordtype">char</span>  value,
-<a name="l00298"></a>00298                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00299"></a>00299          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 <span class="keywordtype">int</span>
-<a name="l00303"></a>00303 sinfo_qc_add_float(cpl_propertylist* table,
-<a name="l00304"></a>00304                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00305"></a>00305                  <span class="keyword">const</span> <span class="keywordtype">float</span>   value,
-<a name="l00306"></a>00306                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00307"></a>00307          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 <span class="keywordtype">int</span>
-<a name="l00311"></a>00311 sinfo_qc_add_double(cpl_propertylist* table,
-<a name="l00312"></a>00312                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00313"></a>00313                  <span class="keyword">const</span> <span class="keywordtype">double</span>   value,
-<a name="l00314"></a>00314                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00315"></a>00315          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 <span class="keywordtype">int</span>
-<a name="l00319"></a>00319 sinfo_qc_add_string(cpl_propertylist* table,
-<a name="l00320"></a>00320                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00321"></a>00321                  <span class="keyword">const</span> <span class="keywordtype">char</span>*   value,
-<a name="l00322"></a>00322                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,
-<a name="l00323"></a>00323          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_PRO_SAVE */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pro_save.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_PRO_SAVE_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRO_SAVE_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> sinfo_update_fits_card_int(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">int</span> value);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> sinfo_update_fits_card_float(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">float</span> value);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> sinfo_update_fits_card_double(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">double</span> value);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> sinfo_update_fits_card_long(<span class="keyword">const</span> <span class="keywordtype">char</span>* file,<span class="keyword">const</span> <span class="keywordtype">char</span>* card,<span class="keywordtype">long</span> value);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">int</span> sinfo_update_ims_fits_card_string(cpl_imagelist* iml, </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* file,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* card,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* value);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_pro_save_tbl(</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     cpl_table* tbl,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         cpl_table* qclog,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> sinfo_pro_save_ima(</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         cpl_image* ima,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         cpl_table* qclog,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> sinfo_pro_save_ims(</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         cpl_imagelist* ims,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         cpl_table* qclog,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> sinfo_save_pro_tbl(</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_table* tbl,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         cpl_propertylist* qclog,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> sinfo_save_pro_ima(</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         cpl_image* ima,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         cpl_propertylist* qclog,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> sinfo_save_pro_ims(</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         cpl_imagelist* ims,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         cpl_frameset* ref,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         cpl_frameset* sof,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* name, </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* proid, </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         cpl_propertylist* qclog,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* recid,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         cpl_parameterlist* parlist);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> cpl_table* sinfo_qclog_init(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> sinfo_qclog_add_int(cpl_table* table,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span>   value,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> sinfo_qclog_add_bool(cpl_table* table,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>  value,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> sinfo_qclog_add_float(cpl_table* table,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                  <span class="keyword">const</span> <span class="keywordtype">float</span>   value,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> sinfo_qclog_add_double(cpl_table* table,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span>   value,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> sinfo_qclog_add_string(cpl_table* table,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>*   value,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> cpl_propertylist* sinfo_qc_init(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> sinfo_qc_add_int(cpl_propertylist* table,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span>   value,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> sinfo_qc_add_bool(cpl_propertylist* table,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>  value,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> sinfo_qc_add_float(cpl_propertylist* table,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                  <span class="keyword">const</span> <span class="keywordtype">float</span>   value,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> sinfo_qc_add_double(cpl_propertylist* table,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span>   value,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> sinfo_qc_add_string(cpl_propertylist* table,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>*   value,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* help,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* format);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_PRO_SAVE */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__pro__types_8h_source.html b/html/sinfo__pro__types_8h_source.html
index d891c67..5116e7f 100644
--- a/html/sinfo__pro__types_8h_source.html
+++ b/html/sinfo__pro__types_8h_source.html
@@ -2,206 +2,237 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_pro_types.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_pro_types.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_pro_types.h,v 1.10 2010/02/12 17:57:38 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later verrtd sion.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2010/02/12 17:57:38 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.10 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_PRO_TYPES_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRO_TYPES_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 CPL_BEGIN_DECLS
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#define PRO_LIN_DET_INFO                   "LIN_DET_INFO"</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define PRO_GAIN_INFO                      "GAIN_INFO"</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define PRO_AO_INFO                        "AO_INFO"</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define PRO_AO_PERFORMANCE                 "AO_PERFORMANCE"</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define PRO_ENC_ENERGY                     "ENC_ENERGY"</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_SKY                        "OBS_SKY"</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_MED                        "SKY_MED"</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_DUMMY                      "SKY_DUMMY"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STACKED_DUMMY              "SKY_STACKED_DUMMY"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define PRO_DEFAULT                        "DEFAULT"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define PRO_INT_COL_TILT_COR               "INT_COL_TILT_COR"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STACKED                    "STD_STACKED"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STD_STACKED                "SKY_STD_STACKED"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_OH_STACKED                 "SKY_OH_STACKED"</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_PSF_CALIBRATOR_STACKED     "SKY_PSF_CALIBRATOR_STACKED"</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_STACKED               "STD_STAR_STACKED"</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_DITHER_STACKED        "STD_STAR_DITHER_STACKED"</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STACKED                    "SKY_STACKED"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define PRO_NODDING_STACKED                "_NODDING_STACKED"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define PRO_ILLUMCORR                      "ILLUMCORR"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define SINFO_UTL_STDSTARS_RES             "STDSTARS_CATS"</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SEDS_RES                 "SEDS"</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CALIB_STDSTARS               "STDSTARS_CATS"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CALIB_SED                    "SEDS"</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#define PRO_STACKED                        "_STACKED"</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define PRO_STACK_SKY_DIST                 "SKY_STACKED_DIST"</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STACK_MFLAT_DIST               "MFLAT_STACKED_DIST"</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STACK_MFLAT_DITHER_DIST        "MFLAT_DITHER_STACKED_DIST"</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define PRO_MFLAT_CUBE                     "MFLAT_CUBE"</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MFLAT_AVG                      "MFLAT_AVG"</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MFLAT_MED                      "MFLAT_MED"</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="preprocessor">#define PRO_ILL_COR                        "ILLUMINATION_CORRECTION"</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP                         "BP_MAP"</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_HP                      "BP_MAP_HP"</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_NL                      "BP_MAP_NL"</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_NO                      "BP_MAP_NO"</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_DI                      "BP_MAP_DI"</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_SKY                     "BP_MAP_SKY"</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_BP_MAP                  "MASTER_BP_MAP"</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP                         "BP_MAP"</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_DARK                    "MASTER_DARK"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPE                          "SLOPE"</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define PRO_DISTORTION                     "DISTORTION"</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLITLETS_DISTANCE              "SLITLETS_DISTANCE"</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_SLIT                    "MASTER_SLIT"</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP               "MASTER_FLAT_LAMP"</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP1              "MASTER_FLAT_LAMP1"</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP2              "MASTER_FLAT_LAMP2"</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_POS                       "SLIT_POS"</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define PRO_REF_ATM_REF_CORR               "ATM_REF_CORR"</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLITLETS_POS_PREDIST           "SLITLETS_POS_PREDIST"</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_POS_GUESS                 "SLIT_POS_GUESS"</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_EW_STACKED               "FIBRE_EW_STACKED"</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_ON            "FIBRE_NS_STACKED_ON"</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_OFF           "FIBRE_NS_STACKED_OFF"</span>
-<a name="l00094"></a>00094 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED               "FIBRE_NS_STACKED"</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_DIST          "FIBRE_NS_STACKED_DIST"</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_LAMP_STACKED             "FIBRE_LAMP_STACKED"</span>
-<a name="l00097"></a>00097 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_LAMP_STACKED              "SLIT_LAMP_STACKED"</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FLUX_LAMP_STACKED              "FLUX_LAMP_STACKED"</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_LAMP_STACKED              "WAVE_LAMP_STACKED"</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_SLITPOS_STACKED           "WAVE_LAMP_SLITPOS_STACKED"</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_LAMP_DITHER_STACKED       "WAVE_LAMP_DITHER_STACKED"</span>
-<a name="l00102"></a>00102 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_NS_STACKED                "WAVE_NS_STACKED"</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_NS_DITHER_STACKED         "WAVE_NS_DITHER_STACKED"</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_PAR_LIST                  "WAVE_FIT_PARAMS"</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_COEF_SLIT                 "WAVE_COEF_SLIT"</span>
-<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_CALIBRATOR_STACKED         "PSF_CALIBRATOR_STACKED"</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FOCUS_STACKED                  "FOCUS_STACKED"</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJECT_NODDING_STACKED         "OBJECT_NODDING_STACKED"</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJECT_SKYSPIDER_STACKED       "OBJECT_SKYSPIDER_STACKED"</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span>
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="preprocessor">#define PRO_RESAMPLED_WAVE                 "RESAMPLED_WAVE"</span>
-<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_OBJ                  "RESAMPLED_OBJ"</span>
-<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_SKY                  "RESAMPLED_SKY"</span>
-<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_FLAT_LAMP            "RESAMPLED_FLAT_LAMP"</span>
-<a name="l00116"></a>00116 <span class="preprocessor"></span>
-<a name="l00117"></a>00117 <span class="preprocessor">#define PRO_OBS_CUBE_SKY                   "OBS_CUBE_SKY"</span>
-<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_CUBE_SKY                   "STD_CUBE_SKY"</span>
-<a name="l00119"></a>00119 <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_CUBE_SKY                   "PSF_CUBE_SKY"</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span><span class="preprocessor">#define PRO_PUPIL_CUBE_SKY                 "PUPIL_CUBE_SKY"</span>
-<a name="l00121"></a>00121 <span class="preprocessor"></span>
-<a name="l00122"></a>00122 <span class="preprocessor">#define PRO_PUPIL_CUBE                     "PUPIL_LAMP_CUBE"</span>
-<a name="l00123"></a>00123 <span class="preprocessor"></span>
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="preprocessor">#define PRO_OBS_MED_SKY                    "OBS_MED_SKY"</span>
-<a name="l00126"></a>00126 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_MED_SKY                    "STD_MED_SKY"</span>
-<a name="l00127"></a>00127 <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_MED_SKY                    "PSF_MED_SKY"</span>
-<a name="l00128"></a>00128 <span class="preprocessor"></span><span class="preprocessor">#define PRO_PUPIL_MED_SKY                  "PUPIL_MED_SKY"</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span>
-<a name="l00130"></a>00130 <span class="preprocessor">#define PRO_PUPIL_LAMP_STACKED             "PUPIL_LAMP_STACKED"</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_NODDING_STACKED            "SKY_NODDING_STACKED"</span>
-<a name="l00132"></a>00132 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_NODDING_STACKED            "STD_NODDING_STACKED"</span>
-<a name="l00133"></a>00133 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_LAMP_SPEC               "MASTER_LAMP_SPEC"</span>
-<a name="l00134"></a>00134 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_TWIFLAT                 "MASTER_TWIFLAT"</span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COEFF_LIST                     "COEFF_LIST"</span>
-<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#define PRO_INDEX_LIST                     "INDEX_LIST"</span>
-<a name="l00137"></a>00137 <span class="preprocessor"></span><span class="preprocessor">#define PRO_HALO_SPECT                     "HALO_SPECT"</span>
-<a name="l00138"></a>00138 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIRST_COL                      "FIRST_COL"</span>
-<a name="l00139"></a>00139 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_CUBE                      "MASK_CUBE"  </span><span class="comment">/* not used*/</span>
-<a name="l00140"></a>00140 <span class="preprocessor">#define PRO_PSF                            "MASTER_PSF"</span>
-<a name="l00141"></a>00141 <span class="preprocessor"></span>
-<a name="l00142"></a>00142 <span class="preprocessor">#define TMP_FOCUS                          "FOCUS_STACKED"</span>
-<a name="l00143"></a>00143 <span class="preprocessor"></span><span class="preprocessor">#define TMP_FOCUS_ON                       "FOCUS_ON_STACKED"</span>
-<a name="l00144"></a>00144 <span class="preprocessor"></span><span class="preprocessor">#define TMP_FOCUS_OFF                      "FOCUS_OFF_STACKED"</span>
-<a name="l00145"></a>00145 <span class="preprocessor"></span>
-<a name="l00146"></a>00146 <span class="preprocessor">#define PRO_FOCUS                          "MASTER_FOCUS"</span>
-<a name="l00147"></a>00147 <span class="preprocessor"></span><span class="preprocessor">#define PRO_FOCUS_GAUSS                    "FOCUS_GAUSS"</span>
-<a name="l00148"></a>00148 <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_MAP                       "WAVE_MAP"</span>
-<a name="l00149"></a>00149 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_SPECTRA               "STD_STAR_SPECTRA"</span>
-<a name="l00150"></a>00150 <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_SPECTRUM              "STD_STAR_SPECTRUM"</span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span>
-<a name="l00152"></a>00152 <span class="preprocessor">#define PRO_CUBE                           "CUBE"</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span><span class="preprocessor">#define PRO_IMA                            "IMA"</span>
-<a name="l00154"></a>00154 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SPECTRUM                       "SPECTRUM"</span>
-<a name="l00155"></a>00155 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_SKY                      "COADD_SKY"</span>
-<a name="l00156"></a>00156 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_PSF                      "COADD_PSF"</span>
-<a name="l00157"></a>00157 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_STD                      "COADD_STD"</span>
-<a name="l00158"></a>00158 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_OBJ                      "COADD_OBJ"</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_PUPIL                    "COADD_PUPIL"</span>
-<a name="l00160"></a>00160 <span class="preprocessor"></span>
-<a name="l00161"></a>00161 <span class="preprocessor">#define PRO_OBS_PSF                        "OBS_PSF"</span>
-<a name="l00162"></a>00162 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_STD                        "OBS_STD"</span>
-<a name="l00163"></a>00163 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_OBJ                        "OBS_OBJ"</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_PUPIL                      "OBS_PUPIL"</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SPECTRA_QC                     "SPECTRA_QC"</span>
-<a name="l00166"></a>00166 <span class="preprocessor"></span>
-<a name="l00167"></a>00167 <span class="preprocessor">#define PRO_MED_COADD_PSF                  "MED_COADD_PSF"</span>
-<a name="l00168"></a>00168 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_STD                  "MED_COADD_STD"</span>
-<a name="l00169"></a>00169 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_OBJ                  "MED_COADD_OBJ"</span>
-<a name="l00170"></a>00170 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_PUPIL                "MED_COADD_PUPIL"</span>
-<a name="l00171"></a>00171 <span class="preprocessor"></span>
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 <span class="preprocessor">#define PRO_MED_OBS_PSF                    "MED_OBS_PSF"</span>
-<a name="l00174"></a>00174 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_STD                    "MED_OBS_STD"</span>
-<a name="l00175"></a>00175 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_OBJ                    "MED_OBS_OBJ"</span>
-<a name="l00176"></a>00176 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_PUPIL                  "MED_OBS_PUPIL"</span>
-<a name="l00177"></a>00177 <span class="preprocessor"></span>
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="preprocessor">#define PRO_CUBE_COLL                      "CUBE_COLL"</span>
-<a name="l00180"></a>00180 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPEX                         "CUBE_COLL_SLOPEX"</span>
-<a name="l00181"></a>00181 <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPEY                         "CUBE_COLL_SLOPEY"</span>
-<a name="l00182"></a>00182 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_CUBE                      "MASK_CUBE"</span>
-<a name="l00183"></a>00183 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_PSF                 "MASK_COADD_PSF"</span>
-<a name="l00184"></a>00184 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_STD                 "MASK_COADD_STD"</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_OBJ                 "MASK_COADD_OBJ"</span>
-<a name="l00186"></a>00186 <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_PUPIL               "MASK_COADD_PUPIL"</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJ_CUBE                       "OBJ_CUBE"</span>
-<a name="l00188"></a>00188 <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_COEFF                       "BP_COEFF"</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#define PRO_EFFICIENCY                     "EFFICIENCY"</span>
-<a name="l00190"></a>00190 <span class="preprocessor"></span>CPL_END_DECLS
-<a name="l00191"></a>00191 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_pro_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_pro_types.h,v 1.10 2010/02/12 17:57:38 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later verrtd sion.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2010/02/12 17:57:38 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_PRO_TYPES_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRO_TYPES_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#define PRO_LIN_DET_INFO                   "LIN_DET_INFO"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_GAIN_INFO                      "GAIN_INFO"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_AO_INFO                        "AO_INFO"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_AO_PERFORMANCE                 "AO_PERFORMANCE"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_ENC_ENERGY                     "ENC_ENERGY"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_SKY                        "OBS_SKY"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_MED                        "SKY_MED"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_DUMMY                      "SKY_DUMMY"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STACKED_DUMMY              "SKY_STACKED_DUMMY"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_DEFAULT                        "DEFAULT"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_INT_COL_TILT_COR               "INT_COL_TILT_COR"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STACKED                    "STD_STACKED"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STD_STACKED                "SKY_STD_STACKED"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_OH_STACKED                 "SKY_OH_STACKED"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_PSF_CALIBRATOR_STACKED     "SKY_PSF_CALIBRATOR_STACKED"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_STACKED               "STD_STAR_STACKED"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_DITHER_STACKED        "STD_STAR_DITHER_STACKED"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_STACKED                    "SKY_STACKED"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_NODDING_STACKED                "_NODDING_STACKED"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_ILLUMCORR                      "ILLUMCORR"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define SINFO_UTL_STDSTARS_RES             "STDSTARS_CATS"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SEDS_RES                 "SEDS"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CALIB_STDSTARS               "STDSTARS_CATS"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CALIB_SED                    "SEDS"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define PRO_STACKED                        "_STACKED"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define PRO_STACK_SKY_DIST                 "SKY_STACKED_DIST"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STACK_MFLAT_DIST               "MFLAT_STACKED_DIST"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STACK_MFLAT_DITHER_DIST        "MFLAT_DITHER_STACKED_DIST"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define PRO_MFLAT_CUBE                     "MFLAT_CUBE"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MFLAT_AVG                      "MFLAT_AVG"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MFLAT_MED                      "MFLAT_MED"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#define PRO_ILL_COR                        "ILLUMINATION_CORRECTION"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP                         "BP_MAP"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_HP                      "BP_MAP_HP"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_NL                      "BP_MAP_NL"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_NO                      "BP_MAP_NO"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_DI                      "BP_MAP_DI"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP_SKY                     "BP_MAP_SKY"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_BP_MAP                  "MASTER_BP_MAP"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_MAP                         "BP_MAP"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_DARK                    "MASTER_DARK"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPE                          "SLOPE"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_DISTORTION                     "DISTORTION"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLITLETS_DISTANCE              "SLITLETS_DISTANCE"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_SLIT                    "MASTER_SLIT"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP               "MASTER_FLAT_LAMP"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP1              "MASTER_FLAT_LAMP1"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_FLAT_LAMP2              "MASTER_FLAT_LAMP2"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_POS                       "SLIT_POS"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_REF_ATM_REF_CORR               "ATM_REF_CORR"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLITLETS_POS_PREDIST           "SLITLETS_POS_PREDIST"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_POS_GUESS                 "SLIT_POS_GUESS"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_EW_STACKED               "FIBRE_EW_STACKED"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_ON            "FIBRE_NS_STACKED_ON"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_OFF           "FIBRE_NS_STACKED_OFF"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED               "FIBRE_NS_STACKED"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_NS_STACKED_DIST          "FIBRE_NS_STACKED_DIST"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIBRE_LAMP_STACKED             "FIBRE_LAMP_STACKED"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLIT_LAMP_STACKED              "SLIT_LAMP_STACKED"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FLUX_LAMP_STACKED              "FLUX_LAMP_STACKED"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_LAMP_STACKED              "WAVE_LAMP_STACKED"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_SLITPOS_STACKED           "WAVE_LAMP_SLITPOS_STACKED"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_LAMP_DITHER_STACKED       "WAVE_LAMP_DITHER_STACKED"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_NS_STACKED                "WAVE_NS_STACKED"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_NS_DITHER_STACKED         "WAVE_NS_DITHER_STACKED"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_PAR_LIST                  "WAVE_FIT_PARAMS"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_COEF_SLIT                 "WAVE_COEF_SLIT"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_CALIBRATOR_STACKED         "PSF_CALIBRATOR_STACKED"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FOCUS_STACKED                  "FOCUS_STACKED"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJECT_NODDING_STACKED         "OBJECT_NODDING_STACKED"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJECT_SKYSPIDER_STACKED       "OBJECT_SKYSPIDER_STACKED"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">#define PRO_RESAMPLED_WAVE                 "RESAMPLED_WAVE"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_OBJ                  "RESAMPLED_OBJ"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_SKY                  "RESAMPLED_SKY"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_RESAMPLED_FLAT_LAMP            "RESAMPLED_FLAT_LAMP"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">#define PRO_OBS_CUBE_SKY                   "OBS_CUBE_SKY"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_CUBE_SKY                   "STD_CUBE_SKY"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_CUBE_SKY                   "PSF_CUBE_SKY"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PUPIL_CUBE_SKY                 "PUPIL_CUBE_SKY"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">#define PRO_PUPIL_CUBE                     "PUPIL_LAMP_CUBE"</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="preprocessor">#define PRO_OBS_MED_SKY                    "OBS_MED_SKY"</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_MED_SKY                    "STD_MED_SKY"</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF_MED_SKY                    "PSF_MED_SKY"</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PUPIL_MED_SKY                  "PUPIL_MED_SKY"</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor">#define PRO_PUPIL_LAMP_STACKED             "PUPIL_LAMP_STACKED"</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SKY_NODDING_STACKED            "SKY_NODDING_STACKED"</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_NODDING_STACKED            "STD_NODDING_STACKED"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_LAMP_SPEC               "MASTER_LAMP_SPEC"</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASTER_TWIFLAT                 "MASTER_TWIFLAT"</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COEFF_LIST                     "COEFF_LIST"</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_INDEX_LIST                     "INDEX_LIST"</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_HALO_SPECT                     "HALO_SPECT"</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FIRST_COL                      "FIRST_COL"</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_CUBE                      "MASK_CUBE"  </span><span class="comment">/* not used*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_PSF                            "MASTER_PSF"</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">#define TMP_FOCUS                          "FOCUS_STACKED"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor"></span><span class="preprocessor">#define TMP_FOCUS_ON                       "FOCUS_ON_STACKED"</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor"></span><span class="preprocessor">#define TMP_FOCUS_OFF                      "FOCUS_OFF_STACKED"</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">#define PRO_FOCUS                          "MASTER_FOCUS"</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_FOCUS_GAUSS                    "FOCUS_GAUSS"</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_WAVE_MAP                       "WAVE_MAP"</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_SPECTRA               "STD_STAR_SPECTRA"</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_STD_STAR_SPECTRUM              "STD_STAR_SPECTRUM"</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">#define PRO_CUBE                           "CUBE"</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_IMA                            "IMA"</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SPECTRUM                       "SPECTRUM"</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_SKY                      "COADD_SKY"</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_PSF                      "COADD_PSF"</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_STD                      "COADD_STD"</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_OBJ                      "COADD_OBJ"</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_COADD_PUPIL                    "COADD_PUPIL"</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="preprocessor">#define PRO_OBS_PSF                        "OBS_PSF"</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_STD                        "OBS_STD"</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_OBJ                        "OBS_OBJ"</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBS_PUPIL                      "OBS_PUPIL"</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SPECTRA_QC                     "SPECTRA_QC"</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="preprocessor">#define PRO_MED_COADD_PSF                  "MED_COADD_PSF"</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_STD                  "MED_COADD_STD"</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_OBJ                  "MED_COADD_OBJ"</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_COADD_PUPIL                "MED_COADD_PUPIL"</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="preprocessor">#define PRO_MED_OBS_PSF                    "MED_OBS_PSF"</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_STD                    "MED_OBS_STD"</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_OBJ                    "MED_OBS_OBJ"</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MED_OBS_PUPIL                  "MED_OBS_PUPIL"</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="preprocessor">#define PRO_CUBE_COLL                      "CUBE_COLL"</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPEX                         "CUBE_COLL_SLOPEX"</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_SLOPEY                         "CUBE_COLL_SLOPEY"</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_CUBE                      "MASK_CUBE"</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_PSF                 "MASK_COADD_PSF"</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_STD                 "MASK_COADD_STD"</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_OBJ                 "MASK_COADD_OBJ"</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_MASK_COADD_PUPIL               "MASK_COADD_PUPIL"</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_OBJ_CUBE                       "OBJ_CUBE"</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_BP_COEFF                       "BP_COEFF"</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span><span class="preprocessor">#define PRO_EFFICIENCY                     "EFFICIENCY"</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="preprocessor"></span>CPL_END_DECLS</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__product__config_8c_source.html b/html/sinfo__product__config_8c_source.html
index 9b09d10..9f979f2 100644
--- a/html/sinfo__product__config_8c_source.html
+++ b/html/sinfo__product__config_8c_source.html
@@ -2,80 +2,111 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_product_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_product_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_product_config.c,v 1.7 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_product_config.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00056"></a>00056   <span class="comment">/* General data reduction parameters */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keywordtype">void</span>
-<a name="l00059"></a>00059  sinfo_product_config_add(cpl_parameterlist *list)
-<a name="l00060"></a>00060 {
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   cpl_parameter *p;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   <span class="keywordflow">if</span> (!list) {
-<a name="l00065"></a>00065     <span class="keywordflow">return</span>;
-<a name="l00066"></a>00066   }
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   <span class="comment">/* indicates if parameters will be overwritten */</span>
-<a name="l00069"></a>00069   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.product.density"</span>,
-<a name="l00070"></a>00070                  CPL_TYPE_INT,
-<a name="l00071"></a>00071                               <span class="stringliteral">"Density of pipeline products: "</span>
-<a name="l00072"></a>00072                               <span class="stringliteral">"0 (low), 1 (low+skycor), 2 (med-QC), "</span>
-<a name="l00073"></a>00073                               <span class="stringliteral">"3 (high-debug+skycor)"</span>,
-<a name="l00074"></a>00074                               <span class="stringliteral">"sinfoni.product"</span>,
-<a name="l00075"></a>00075                  2,4,0,1,2,3);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"product-density"</span>);
-<a name="l00078"></a>00078   cpl_parameterlist_append(list, p);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081   <span class="keywordflow">return</span>;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_product_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_product_config.c,v 1.7 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_product_config.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="comment">/* General data reduction parameters */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>  sinfo_product_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* indicates if parameters will be overwritten */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.product.density"</span>,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                  CPL_TYPE_INT,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="stringliteral">"Density of pipeline products: "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"0 (low), 1 (low+skycor), 2 (med-QC), "</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"3 (high-debug+skycor)"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"sinfoni.product"</span>,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                  2,4,0,1,2,3);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"product-density"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__product__config_8h_source.html b/html/sinfo__product__config_8h_source.html
index 8e55020..9f3b516 100644
--- a/html/sinfo__product__config_8h_source.html
+++ b/html/sinfo__product__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_product_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_product_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_product_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_PRODUCT_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRODUCT_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_product_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_product_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_product_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_PRODUCT_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PRODUCT_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_product_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__cfg_8c_source.html b/html/sinfo__psf__cfg_8c_source.html
index b42f232..94726f2 100644
--- a/html/sinfo__psf__cfg_8c_source.html
+++ b/html/sinfo__psf__cfg_8c_source.html
@@ -2,87 +2,118 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_psf_cfg.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author     :       Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    configuration handling tools for the </span>
-<a name="l00025"></a>00025 <span class="comment">                        psf image reconstruction of a star.</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_psf_cfg.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                              Function codes</span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">   Function :   sinfo_psf_cfg_create()</span>
-<a name="l00050"></a>00050 <span class="comment">   In       :   void</span>
-<a name="l00051"></a>00051 <span class="comment">   Out      :   pointer to allocated base psf_config structure</span>
-<a name="l00052"></a>00052 <span class="comment">   Job      :   allocate memory for a psf_config struct</span>
-<a name="l00053"></a>00053 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 psf_config * sinfo_psf_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(psf_config));
-<a name="l00059"></a>00059 }
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">   Function :   sinfo_psf_cfg_destroy()</span>
-<a name="l00064"></a>00064 <span class="comment">   In       :   psf_config to deallocate</span>
-<a name="l00065"></a>00065 <span class="comment">   Out      :   void</span>
-<a name="l00066"></a>00066 <span class="comment">   Job      :   deallocate all memory associated with a config data structure</span>
-<a name="l00067"></a>00067 <span class="comment">   Notice   :   </span>
-<a name="l00068"></a>00068 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="keywordtype">void</span> sinfo_psf_cfg_destroy(psf_config * cc)
-<a name="l00071"></a>00071 {
-<a name="l00072"></a>00072     <span class="keywordflow">if</span> (cc==NULL) return ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074     <span class="comment">/* Free main struct */</span>
-<a name="l00075"></a>00075     cpl_free(cc);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077     return ;
-<a name="l00078"></a>00078 }
-<a name="l00079"></a>00079 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_psf_cfg.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author     :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    configuration handling tools for the </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        psf image reconstruction of a star.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_psf_cfg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   Function :   sinfo_psf_cfg_create()</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   Out      :   pointer to allocated base psf_config structure</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   Job      :   allocate memory for a psf_config struct</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> psf_config * sinfo_psf_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(psf_config));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   Function :   sinfo_psf_cfg_destroy()</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   In       :   psf_config to deallocate</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   Job      :   deallocate all memory associated with a config data structure</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">void</span> sinfo_psf_cfg_destroy(psf_config * cc)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     <span class="keywordflow">if</span> (cc==NULL) return ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     cpl_free(cc);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     return ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__cfg_8h_source.html b/html/sinfo__psf__cfg_8h_source.html
index 1355bb3..5812d0d 100644
--- a/html/sinfo__psf__cfg_8h_source.html
+++ b/html/sinfo__psf__cfg_8h_source.html
@@ -2,107 +2,138 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_psf_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    February 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    psf_cfg.c definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_PSF_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  PSF star image reconstruction blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the sinfo_psf reconstruction</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>psf_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input averaged, bad pixel corrected, </span>
-<a name="l00052"></a>00052 <span class="comment">                                        off subtracted, flatfielded, spectral </span>
-<a name="l00053"></a>00053 <span class="comment">                                        tilt corrected list of frames */</span>
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00055"></a>00055 <span class="comment">                                        data cube */</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/*------ Reconstruction ------*/</span>
-<a name="l00058"></a>00058         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00059"></a>00059 <span class="comment">           the average of columns */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">float</span> lo_reject ;
-<a name="l00061"></a>00061         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00062"></a>00062 <span class="comment">           the average of columns */</span>
-<a name="l00063"></a>00063         <span class="keywordtype">float</span> hi_reject ;
-<a name="l00064"></a>00064         <span class="comment">/* indicates if the slitlet distances are determined by a </span>
-<a name="l00065"></a>00065 <span class="comment">           north-south test (1) or slitlet edge fits (0) */</span> 
-<a name="l00066"></a>00066         <span class="keywordtype">int</span> northsouthInd  ;
-<a name="l00067"></a>00067         <span class="comment">/* name of the ASCII list of the fitted slitlet edge positions or </span>
-<a name="l00068"></a>00068 <span class="comment">           the distances of the slitlets */</span>
-<a name="l00069"></a>00069         <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;
-<a name="l00070"></a>00070         <span class="comment">/* number of slitlets (32) */</span>
-<a name="l00071"></a>00071         <span class="keywordtype">int</span> nslits ;
-<a name="l00072"></a>00072         <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of </span>
-<a name="l00073"></a>00073 <span class="comment">           the first slitlet needed if the slitlet distances were determined </span>
-<a name="l00074"></a>00074 <span class="comment">           by a north south test */</span>
-<a name="l00075"></a>00075         <span class="keywordtype">char</span>  firstCol[FILE_NAME_SZ] ;
-<a name="l00076"></a>00076     <span class="comment">/* indicator for the shifting method to use */</span>
-<a name="l00077"></a>00077     <span class="keywordtype">char</span>  method[1] ;
-<a name="l00078"></a>00078         <span class="comment">/* order of polynomial if the polynomial interpolation shifting </span>
-<a name="l00079"></a>00079 <span class="comment">           method is used */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">int</span> order ;
-<a name="l00081"></a>00081 } psf_config ;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00084"></a>00084 <span class="comment">                               Function prototypes</span>
-<a name="l00085"></a>00085 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 psf_config * 
-<a name="l00094"></a>00094 sinfo_psf_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00095"></a>00095 
-<a name="l00102"></a>00102 <span class="keywordtype">void</span> 
-<a name="l00103"></a>00103 sinfo_psf_cfg_destroy(psf_config * cc);
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_psf_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    February 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    psf_cfg.c definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_PSF_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  PSF star image reconstruction blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the sinfo_psf reconstruction</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>psf_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input averaged, bad pixel corrected, </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                        off subtracted, flatfielded, spectral </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                        tilt corrected list of frames */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                        data cube */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*------ Reconstruction ------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">           the average of columns */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">float</span> lo_reject ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">           the average of columns */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="keywordtype">float</span> hi_reject ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="comment">/* indicates if the slitlet distances are determined by a </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">           north-south test (1) or slitlet edge fits (0) */</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">int</span> northsouthInd  ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* name of the ASCII list of the fitted slitlet edge positions or </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">           the distances of the slitlets */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">char</span> poslist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="comment">/* number of slitlets (32) */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="keywordtype">int</span> nslits ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="comment">/* sub pixel position of the column position of the left sinfo_edge of </span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">           the first slitlet needed if the slitlet distances were determined </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">           by a north south test */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">char</span>  firstCol[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="comment">/* indicator for the shifting method to use */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordtype">char</span>  method[1] ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="comment">/* order of polynomial if the polynomial interpolation shifting </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">           method is used */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">int</span> order ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> } psf_config ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> psf_config * </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> sinfo_psf_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_psf_cfg_destroy(psf_config * cc);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__config_8c_source.html b/html/sinfo__psf__config_8c_source.html
index 952c691..1cb1ca2 100644
--- a/html/sinfo__psf__config_8c_source.html
+++ b/html/sinfo__psf__config_8c_source.html
@@ -2,73 +2,104 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_psf_config.c,v 1.5 2012/03/03 09:50:08 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Psf Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_psf_config.h"</span>
-<a name="l00049"></a>00049 <span class="keywordtype">void</span>
-<a name="l00050"></a>00050  sinfo_psf_config_add(cpl_parameterlist *list)
-<a name="l00051"></a>00051 {
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   cpl_parameter *p;
-<a name="l00054"></a>00054   <span class="keywordflow">if</span> (!list) {
-<a name="l00055"></a>00055     <span class="keywordflow">return</span>;
-<a name="l00056"></a>00056   }
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058   <span class="comment">/* Input file name */</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.psf.switch"</span>,
-<a name="l00061"></a>00061                   CPL_TYPE_BOOL,
-<a name="l00062"></a>00062                               <span class="stringliteral">"Switch to activate PSF-related "</span>
-<a name="l00063"></a>00063                               <span class="stringliteral">"(Strehl/Encircled energy) computation"</span>,
-<a name="l00064"></a>00064                               <span class="stringliteral">"sinfoni.psf"</span>,
-<a name="l00065"></a>00065                               TRUE);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"psf-switch"</span>);
-<a name="l00068"></a>00068   cpl_parameterlist_append(list, p);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_psf_config.c,v 1.5 2012/03/03 09:50:08 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 09:50:08 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Psf Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_psf_config.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  sinfo_psf_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   }</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="comment">/* Input file name */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.psf.switch"</span>,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                               <span class="stringliteral">"Switch to activate PSF-related "</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                               <span class="stringliteral">"(Strehl/Encircled energy) computation"</span>,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                               <span class="stringliteral">"sinfoni.psf"</span>,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               TRUE);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"psf-switch"</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__config_8h_source.html b/html/sinfo__psf__config_8h_source.html
index 9af00b1..b89fd8a 100644
--- a/html/sinfo__psf__config_8h_source.html
+++ b/html/sinfo__psf__config_8h_source.html
@@ -2,47 +2,78 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_psf_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Psf Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="keywordtype">void</span>
-<a name="l00032"></a>00032 sinfo_psf_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_psf_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Psf Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> sinfo_psf_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__ini_8h_source.html b/html/sinfo__psf__ini_8h_source.html
index 44ba3ff..d897001 100644
--- a/html/sinfo__psf__ini_8h_source.html
+++ b/html/sinfo__psf__ini_8h_source.html
@@ -2,62 +2,93 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :  psf_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Feb 18, 2002</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SINFONI  PSF star </span>
-<a name="l00025"></a>00025 <span class="comment">                        image reconstruction</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_PSF_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_psf_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                             Function prototypes </span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> 
-<a name="l00055"></a>00055 generatePSF_ini_file(
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * ini_name,
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> * name_i,
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> * name_o
-<a name="l00059"></a>00059 );
-<a name="l00060"></a>00060 
-<a name="l00073"></a>00073 psf_config * 
-<a name="l00074"></a>00074 parse_psf_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :  psf_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Feb 18, 2002</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SINFONI  PSF star </span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        image reconstruction</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_PSF_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_psf_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> generatePSF_ini_file(</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> );</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> psf_config * </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> parse_psf_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__ini__by__cpl_8c_source.html b/html/sinfo__psf__ini__by__cpl_8c_source.html
index 26c55c9..8ec4d2a 100644
--- a/html/sinfo__psf__ini__by__cpl_8c_source.html
+++ b/html/sinfo__psf__ini__by__cpl_8c_source.html
@@ -2,204 +2,235 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_psf_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 20, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   cpl input for sinfo_psf step for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_psf_ini_by_cpl.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                    Functions private to this module</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keywordtype">void</span>      parse_section_frames(psf_config *, 
-<a name="l00046"></a>00046                    cpl_frameset* sof,cpl_frameset** stk,<span class="keywordtype">int</span>* status);
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_reconstruction(psf_config *);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00058"></a>00058 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 psf_config * sinfo_parse_cpl_input_psf(cpl_frameset* sof, 
-<a name="l00072"></a>00072                  cpl_frameset** stk)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074         psf_config  *       cfg =NULL;
-<a name="l00075"></a>00075         <span class="keywordtype">int</span> status=0;
-<a name="l00076"></a>00076         <span class="comment">/*</span>
-<a name="l00077"></a>00077 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00078"></a>00078 <span class="comment">         * found in the ini file</span>
-<a name="l00079"></a>00079 <span class="comment">         */</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081         cfg = sinfo_psf_cfg_create();
-<a name="l00082"></a>00082         parse_section_reconstruction   (cfg);
-<a name="l00083"></a>00083          parse_section_frames       (cfg, sof,stk,&status);
-<a name="l00084"></a>00084         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00085"></a>00085                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00086"></a>00086                 sinfo_psf_cfg_destroy(cfg);
-<a name="l00087"></a>00087                 cfg = NULL ;
-<a name="l00088"></a>00088                 <span class="keywordflow">return</span> NULL ;
-<a name="l00089"></a>00089         }
-<a name="l00090"></a>00090         <span class="keywordflow">return</span> cfg ;
-<a name="l00091"></a>00091 }
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00094"></a>00094 parse_section_frames(psf_config * cfg, 
-<a name="l00095"></a>00095              cpl_frameset* sof,
-<a name="l00096"></a>00096                      cpl_frameset** stk,
-<a name="l00097"></a>00097                      <span class="keywordtype">int</span>* status)
-<a name="l00098"></a>00098 {
-<a name="l00099"></a>00099    cpl_frame* frame   = NULL;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101    <span class="keywordtype">int</span>                 npsf=0;
-<a name="l00102"></a>00102    <span class="keywordtype">int</span> nraw=0;
-<a name="l00103"></a>00103    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00104"></a>00104    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00105"></a>00105    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00106"></a>00106    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108      sinfo_contains_frames_type(sof,stk,PRO_PSF_CALIBRATOR_STACKED);
-<a name="l00109"></a>00109      npsf = cpl_frameset_get_size(*stk);
-<a name="l00110"></a>00110      <span class="keywordflow">if</span> (npsf < 1) {
-<a name="l00111"></a>00111        sinfo_contains_frames_type(sof,stk,PRO_STD_NODDING_STACKED);
-<a name="l00112"></a>00112        npsf = cpl_frameset_get_size(*stk);
-<a name="l00113"></a>00113      }
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115      npsf = cpl_frameset_get_size(*stk);
-<a name="l00116"></a>00116      <span class="keywordflow">if</span> (npsf < 1) {
-<a name="l00117"></a>00117        sinfo_contains_frames_type(sof,stk,PRO_OBJECT_NODDING_STACKED);
-<a name="l00118"></a>00118        npsf = cpl_frameset_get_size(*stk);
-<a name="l00119"></a>00119      }
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122      npsf = cpl_frameset_get_size(*stk);
-<a name="l00123"></a>00123      <span class="keywordflow">if</span> (npsf < 1) {
-<a name="l00124"></a>00124        sinfo_contains_frames_type(sof,stk,PRO_PUPIL_LAMP_STACKED);
-<a name="l00125"></a>00125        npsf = cpl_frameset_get_size(*stk);
-<a name="l00126"></a>00126      }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128      npsf = cpl_frameset_get_size(*stk);
-<a name="l00129"></a>00129      <span class="keywordflow">if</span> (npsf < 1) {
-<a name="l00130"></a>00130          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames"</span>) ;
-<a name="l00131"></a>00131          (*status)++;
-<a name="l00132"></a>00132          <span class="keywordflow">return</span>;
-<a name="l00133"></a>00133      }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {
-<a name="l00136"></a>00136       frame = cpl_frameset_find(sof,PRO_COADD_PSF);
-<a name="l00137"></a>00137       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00138"></a>00138     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {
-<a name="l00139"></a>00139       frame = cpl_frameset_find(sof,PRO_OBS_PSF);
-<a name="l00140"></a>00140       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00141"></a>00141     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {
-<a name="l00142"></a>00142       frame = cpl_frameset_find(sof,PRO_COADD_STD);
-<a name="l00143"></a>00143       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00144"></a>00144     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {
-<a name="l00145"></a>00145       frame = cpl_frameset_find(sof,PRO_OBS_STD);
-<a name="l00146"></a>00146       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00147"></a>00147     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {
-<a name="l00148"></a>00148       frame = cpl_frameset_find(sof,PRO_COADD_OBJ);
-<a name="l00149"></a>00149       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00150"></a>00150     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {
-<a name="l00151"></a>00151       frame = cpl_frameset_find(sof,PRO_OBS_OBJ);
-<a name="l00152"></a>00152       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));
-<a name="l00153"></a>00153     } <span class="keywordflow">else</span> {
-<a name="l00154"></a>00154       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s or %s or %s or %s or %s or %s not found!"</span>, 
-<a name="l00155"></a>00155        PRO_COADD_PSF,PRO_OBS_PSF,
-<a name="l00156"></a>00156        PRO_COADD_STD,PRO_OBS_STD,
-<a name="l00157"></a>00157        PRO_COADD_OBJ,PRO_OBS_OBJ);
-<a name="l00158"></a>00158       (*status)++;
-<a name="l00159"></a>00159       <span class="keywordflow">return</span>;
-<a name="l00160"></a>00160     }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162    strcpy(cfg -> outName, PSF_OUT_FILENAME);
-<a name="l00163"></a>00163    nraw    = cpl_frameset_get_size(*stk);
-<a name="l00164"></a>00164    frame = cpl_frameset_get_frame(*stk,0);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00167"></a>00167    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))
-<a name="l00168"></a>00168      {
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170     <span class="keywordflow">case</span> 0: 
-<a name="l00171"></a>00171       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00172"></a>00172       <span class="keywordflow">break</span>;
-<a name="l00173"></a>00173     <span class="keywordflow">case</span> 1: 
-<a name="l00174"></a>00174       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00175"></a>00175       <span class="keywordflow">break</span>;
-<a name="l00176"></a>00176     <span class="keywordflow">case</span> -1:
-<a name="l00177"></a>00177       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00178"></a>00178       <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179     <span class="keywordflow">default</span>: 
-<a name="l00180"></a>00180       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00181"></a>00181       <span class="keywordflow">break</span>;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183      }
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185    sinfo_get_band(frame,band);
-<a name="l00186"></a>00186    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00187"></a>00187                      spat_res,    lamp_status,    band);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189    sinfo_get_ins_set(band,&ins_set);
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191    <span class="keywordflow">return</span>;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 }
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00196"></a>00196 parse_section_reconstruction(psf_config * cfg)
-<a name="l00197"></a>00197 {
-<a name="l00198"></a>00198    cfg -> nslits = NSLITLETS;
-<a name="l00199"></a>00199    <span class="keywordflow">return</span>;
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keywordtype">void</span>
-<a name="l00203"></a>00203 sinfo_free_psf(psf_config ** cfg) {
-<a name="l00204"></a>00204    sinfo_psf_cfg_destroy (*cfg);
-<a name="l00205"></a>00205    *cfg=NULL;
-<a name="l00206"></a>00206   <span class="keywordflow">return</span>;
-<a name="l00207"></a>00207 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_psf_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 20, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   cpl input for sinfo_psf step for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_psf_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keywordtype">void</span>      parse_section_frames(psf_config *, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                    cpl_frameset* sof,cpl_frameset** stk,<span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     parse_section_reconstruction(psf_config *);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> psf_config * sinfo_parse_cpl_input_psf(cpl_frameset* sof, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                  cpl_frameset** stk)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         psf_config  *       cfg =NULL;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         cfg = sinfo_psf_cfg_create();</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         parse_section_reconstruction   (cfg);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>          parse_section_frames       (cfg, sof,stk,&status);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                 sinfo_psf_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> parse_section_frames(psf_config * cfg, </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>              cpl_frameset* sof,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                      cpl_frameset** stk,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    <span class="keywordtype">int</span>                 npsf=0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>      sinfo_contains_frames_type(sof,stk,PRO_PSF_CALIBRATOR_STACKED);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>      npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>      <span class="keywordflow">if</span> (npsf < 1) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>        sinfo_contains_frames_type(sof,stk,PRO_STD_NODDING_STACKED);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>        npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>      }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>      npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>      <span class="keywordflow">if</span> (npsf < 1) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>        sinfo_contains_frames_type(sof,stk,PRO_OBJECT_NODDING_STACKED);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>        npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>      }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>      npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>      <span class="keywordflow">if</span> (npsf < 1) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>        sinfo_contains_frames_type(sof,stk,PRO_PUPIL_LAMP_STACKED);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>        npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>      }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>      npsf = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>      <span class="keywordflow">if</span> (npsf < 1) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find input stacked frames"</span>) ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>          (*status)++;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>      }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_PSF)) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       frame = cpl_frameset_find(sof,PRO_COADD_PSF);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_PSF)) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       frame = cpl_frameset_find(sof,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_STD)) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       frame = cpl_frameset_find(sof,PRO_COADD_STD);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_STD)) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       frame = cpl_frameset_find(sof,PRO_OBS_STD);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_COADD_OBJ)) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       frame = cpl_frameset_find(sof,PRO_COADD_OBJ);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_OBS_OBJ)) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       frame = cpl_frameset_find(sof,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       strcpy(cfg -> inFrame,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s or %s or %s or %s or %s or %s not found!"</span>, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>        PRO_COADD_PSF,PRO_OBS_PSF,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>        PRO_COADD_STD,PRO_OBS_STD,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>        PRO_COADD_OBJ,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       (*status)++;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>    strcpy(cfg -> outName, PSF_OUT_FILENAME);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    nraw    = cpl_frameset_get_size(*stk);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    frame = cpl_frameset_get_frame(*stk,0);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame))</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>      {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>      }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> parse_section_reconstruction(psf_config * cfg)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    cfg -> nslits = NSLITLETS;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> sinfo_free_psf(psf_config ** cfg) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>    sinfo_psf_cfg_destroy (*cfg);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    *cfg=NULL;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__psf__ini__by__cpl_8h_source.html b/html/sinfo__psf__ini__by__cpl_8h_source.html
index 19d7c09..8d3c87e 100644
--- a/html/sinfo__psf__ini__by__cpl_8h_source.html
+++ b/html/sinfo__psf__ini__by__cpl_8h_source.html
@@ -2,58 +2,89 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_psf_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_psf_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :  sinfo_psf_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :  Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :  May 20, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    ini file handling for SPIFFIs PSF star image reconstruction</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_PSF_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_psf_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                             Function prototypes </span>
-<a name="l00037"></a>00037 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 psf_config * 
-<a name="l00052"></a>00052 sinfo_parse_cpl_input_psf(cpl_frameset* sof, cpl_frameset** stk);
-<a name="l00053"></a>00053 
-<a name="l00061"></a>00061 <span class="keywordtype">void</span> 
-<a name="l00062"></a>00062 sinfo_free_psf(psf_config ** cfg);
-<a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_psf_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :  sinfo_psf_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :  Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :  May 20, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    ini file handling for SPIFFIs PSF star image reconstruction</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_PSF_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_PSF_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_psf_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> psf_config * </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> sinfo_parse_cpl_input_psf(cpl_frameset* sof, cpl_frameset** stk);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_free_psf(psf_config ** cfg);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__qr_8c_source.html b/html/sinfo__qr_8c_source.html
index 0358070..63207af 100644
--- a/html/sinfo__qr_8c_source.html
+++ b/html/sinfo__qr_8c_source.html
@@ -2,276 +2,307 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_qr.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_qr.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_qr.c,v 1.5 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00040"></a>00040 <span class="comment">//#include "sinfoni_recipes_defaults.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#define GSL_SET_COMPLEX_PACKED(zp,n,x,y) \</span>
-<a name="l00043"></a>00043 <span class="preprocessor"> do {*((zp)+2*(n))=(x); *((zp)+(2*(n)+1))=(y);} while(0)</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define GSL_DBL_EPSILON        2.2204460492503131e-16</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="keywordtype">int</span>
-<a name="l00048"></a>00048 sinfo_qr_companion (<span class="keywordtype">double</span> *h, <span class="keywordtype">size_t</span> nc, gsl_complex_packed_ptr zroot)
-<a name="l00049"></a>00049 {
-<a name="l00050"></a>00050   <span class="keywordtype">double</span> t = 0.0;
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   <span class="keywordtype">size_t</span> iterations, e, i, j, k, m;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   <span class="keywordtype">double</span> w, x, y, s, z;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056   <span class="keywordtype">double</span> p = 0, q = 0, r = 0; 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058   <span class="comment">/* FIXME: if p,q,r, are not set to zero then the compiler complains</span>
-<a name="l00059"></a>00059 <span class="comment">     that they ``might be used uninitialized in this</span>
-<a name="l00060"></a>00060 <span class="comment">     function''. Looking at the code this does seem possible, so this</span>
-<a name="l00061"></a>00061 <span class="comment">     should be checked. */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063   <span class="keywordtype">int</span> notlast;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065   <span class="keywordtype">size_t</span> n = nc;
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 next_root:
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069   <span class="keywordflow">if</span> (n == 0)
-<a name="l00070"></a>00070     <span class="keywordflow">return</span> 1 ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072   iterations = 0;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 next_iteration:
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076   <span class="keywordflow">for</span> (e = n; e >= 2; e--)
-<a name="l00077"></a>00077     {
-<a name="l00078"></a>00078       <span class="keywordtype">double</span> a1 = fabs (FMAT (h, e, e - 1, nc));
-<a name="l00079"></a>00079       <span class="keywordtype">double</span> a2 = fabs (FMAT (h, e - 1, e - 1, nc));
-<a name="l00080"></a>00080       <span class="keywordtype">double</span> a3 = fabs (FMAT (h, e, e, nc));
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082       <span class="keywordflow">if</span> (a1 <= GSL_DBL_EPSILON * (a2 + a3))
-<a name="l00083"></a>00083     <span class="keywordflow">break</span>;
-<a name="l00084"></a>00084     }
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086   x = FMAT (h, n, n, nc);
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088   <span class="keywordflow">if</span> (e == n)
-<a name="l00089"></a>00089     {
-<a name="l00090"></a>00090       GSL_SET_COMPLEX_PACKED (zroot, n-1, x + t, 0); <span class="comment">/* one real root */</span>
-<a name="l00091"></a>00091       n--;
-<a name="l00092"></a>00092       <span class="keywordflow">goto</span> next_root;
-<a name="l00093"></a>00093       <span class="comment">/*continue;*/</span>
-<a name="l00094"></a>00094     }
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096   y = FMAT (h, n - 1, n - 1, nc);
-<a name="l00097"></a>00097   w = FMAT (h, n - 1, n, nc) * FMAT (h, n, n - 1, nc);
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099   <span class="keywordflow">if</span> (e == n - 1)
-<a name="l00100"></a>00100     {
-<a name="l00101"></a>00101       p = (y - x) / 2;
-<a name="l00102"></a>00102       q = p * p + w;
-<a name="l00103"></a>00103       y = sqrt (fabs (q));
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105       x += t;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107       <span class="keywordflow">if</span> (q > 0)        <span class="comment">/* two real roots */</span>
-<a name="l00108"></a>00108     {
-<a name="l00109"></a>00109       <span class="keywordflow">if</span> (p < 0)
-<a name="l00110"></a>00110         y = -y;
-<a name="l00111"></a>00111       y += p;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113       GSL_SET_COMPLEX_PACKED (zroot, n-1, x - w / y, 0);
-<a name="l00114"></a>00114           GSL_SET_COMPLEX_PACKED (zroot, n-2, x + y, 0);
-<a name="l00115"></a>00115     }
-<a name="l00116"></a>00116       <span class="keywordflow">else</span>
-<a name="l00117"></a>00117     {
-<a name="l00118"></a>00118       GSL_SET_COMPLEX_PACKED (zroot, n-1, x + p, -y);
-<a name="l00119"></a>00119       GSL_SET_COMPLEX_PACKED (zroot, n-2, x + p, y);
-<a name="l00120"></a>00120     }
-<a name="l00121"></a>00121       n -= 2;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123       <span class="keywordflow">goto</span> next_root;
-<a name="l00124"></a>00124       <span class="comment">/*continue;*/</span>
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="comment">/* No more roots found yet, do another iteration */</span>
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   <span class="keywordflow">if</span> (iterations == 60)  <span class="comment">/* increased from 30 to 60 */</span>
-<a name="l00130"></a>00130     {
-<a name="l00131"></a>00131       <span class="comment">/* too many iterations - give up! */</span>
-<a name="l00132"></a>00132       cpl_msg_error(<span class="stringliteral">"qr:"</span>,<span class="stringliteral">"too many iterations-give up"</span>) ;
-<a name="l00133"></a>00133       <span class="keywordflow">return</span> -1 ;
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136   <span class="keywordflow">if</span> (iterations % 10 == 0 && iterations > 0)
-<a name="l00137"></a>00137     {
-<a name="l00138"></a>00138       <span class="comment">/* use an exceptional shift */</span>
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140       t += x;
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142       <span class="keywordflow">for</span> (i = 1; i <= n; i++)
-<a name="l00143"></a>00143     {
-<a name="l00144"></a>00144       FMAT (h, i, i, nc) -= x;
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147       s = fabs (FMAT (h, n, n - 1, nc)) + fabs (FMAT (h, n - 1, n - 2, nc));
-<a name="l00148"></a>00148       y = 0.75 * s;
-<a name="l00149"></a>00149       x = y;
-<a name="l00150"></a>00150       w = -0.4375 * s * s;
-<a name="l00151"></a>00151     }
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   iterations++;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   <span class="keywordflow">for</span> (m = n - 2; m >= e; m--)
-<a name="l00156"></a>00156     {
-<a name="l00157"></a>00157       <span class="keywordtype">double</span> a1, a2, a3;
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159       z = FMAT (h, m, m, nc);
-<a name="l00160"></a>00160       r = x - z;
-<a name="l00161"></a>00161       s = y - z;
-<a name="l00162"></a>00162       p = FMAT (h, m, m + 1, nc) + (r * s - w) / FMAT (h, m + 1, m, nc);
-<a name="l00163"></a>00163       q = FMAT (h, m + 1, m + 1, nc) - z - r - s;
-<a name="l00164"></a>00164       r = FMAT (h, m + 2, m + 1, nc);
-<a name="l00165"></a>00165       s = fabs (p) + fabs (q) + fabs (r);
-<a name="l00166"></a>00166       p /= s;
-<a name="l00167"></a>00167       q /= s;
-<a name="l00168"></a>00168       r /= s;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170       <span class="keywordflow">if</span> (m == e)
-<a name="l00171"></a>00171     <span class="keywordflow">break</span>;
-<a name="l00172"></a>00172       
-<a name="l00173"></a>00173       a1 = fabs (FMAT (h, m, m - 1, nc));
-<a name="l00174"></a>00174       a2 = fabs (FMAT (h, m - 1, m - 1, nc));
-<a name="l00175"></a>00175       a3 = fabs (FMAT (h, m + 1, m + 1, nc));
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177       <span class="keywordflow">if</span> (a1 * (fabs (q) + fabs (r)) <= GSL_DBL_EPSILON * fabs (p) * (a2 + a3))
-<a name="l00178"></a>00178         <span class="keywordflow">break</span>;
-<a name="l00179"></a>00179     }
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   <span class="keywordflow">for</span> (i = m + 2; i <= n; i++)
-<a name="l00182"></a>00182     {
-<a name="l00183"></a>00183       FMAT (h, i, i - 2, nc) = 0;
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186   <span class="keywordflow">for</span> (i = m + 3; i <= n; i++)
-<a name="l00187"></a>00187     {
-<a name="l00188"></a>00188       FMAT (h, i, i - 3, nc) = 0;
-<a name="l00189"></a>00189     }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191   <span class="comment">/* double QR step */</span>
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   <span class="keywordflow">for</span> (k = m; k <= n - 1; k++)
-<a name="l00194"></a>00194     {
-<a name="l00195"></a>00195       notlast = (k != n - 1);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197       <span class="keywordflow">if</span> (k != m)
-<a name="l00198"></a>00198     {
-<a name="l00199"></a>00199       p = FMAT (h, k, k - 1, nc);
-<a name="l00200"></a>00200       q = FMAT (h, k + 1, k - 1, nc);
-<a name="l00201"></a>00201       r = notlast ? FMAT (h, k + 2, k - 1, nc) : 0.0;
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203       x = fabs (p) + fabs (q) + fabs (r);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205       <span class="keywordflow">if</span> (x == 0)
-<a name="l00206"></a>00206         <span class="keywordflow">continue</span>;        <span class="comment">/* FIXME????? */</span>
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208       p /= x;
-<a name="l00209"></a>00209       q /= x;
-<a name="l00210"></a>00210       r /= x;
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213       s = sqrt (p * p + q * q + r * r);
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215       <span class="keywordflow">if</span> (p < 0)
-<a name="l00216"></a>00216     s = -s;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218       <span class="keywordflow">if</span> (k != m)
-<a name="l00219"></a>00219     {
-<a name="l00220"></a>00220       FMAT (h, k, k - 1, nc) = -s * x;
-<a name="l00221"></a>00221     }
-<a name="l00222"></a>00222       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (e != m)
-<a name="l00223"></a>00223     {
-<a name="l00224"></a>00224       FMAT (h, k, k - 1, nc) *= -1;
-<a name="l00225"></a>00225     }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227       p += s;
-<a name="l00228"></a>00228       x = p / s;
-<a name="l00229"></a>00229       y = q / s;
-<a name="l00230"></a>00230       z = r / s;
-<a name="l00231"></a>00231       q /= p;
-<a name="l00232"></a>00232       r /= p;
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234       <span class="comment">/* do row modifications */</span>
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236       <span class="keywordflow">for</span> (j = k; j <= n; j++)
-<a name="l00237"></a>00237     {
-<a name="l00238"></a>00238       p = FMAT (h, k, j, nc) + q * FMAT (h, k + 1, j, nc);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240       <span class="keywordflow">if</span> (notlast)
-<a name="l00241"></a>00241         {
-<a name="l00242"></a>00242           p += r * FMAT (h, k + 2, j, nc);
-<a name="l00243"></a>00243           FMAT (h, k + 2, j, nc) -= p * z;
-<a name="l00244"></a>00244         }
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246       FMAT (h, k + 1, j, nc) -= p * y;
-<a name="l00247"></a>00247       FMAT (h, k, j, nc) -= p * x;
-<a name="l00248"></a>00248     }
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250       j = (k + 3 < n) ? (k + 3) : n;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252       <span class="comment">/* do column modifications */</span>
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254       <span class="keywordflow">for</span> (i = e; i <= j; i++)
-<a name="l00255"></a>00255     {
-<a name="l00256"></a>00256       p = x * FMAT (h, i, k, nc) + y * FMAT (h, i, k + 1, nc);
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258       <span class="keywordflow">if</span> (notlast)
-<a name="l00259"></a>00259         {
-<a name="l00260"></a>00260           p += z * FMAT (h, i, k + 2, nc);
-<a name="l00261"></a>00261           FMAT (h, i, k + 2, nc) -= p * r;
-<a name="l00262"></a>00262         }
-<a name="l00263"></a>00263       FMAT (h, i, k + 1, nc) -= p * q;
-<a name="l00264"></a>00264       FMAT (h, i, k, nc) -= p;
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   <span class="keywordflow">goto</span> next_iteration;
-<a name="l00269"></a>00269 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_qr.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_qr.c,v 1.5 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">//#include "sinfoni_recipes_defaults.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define GSL_SET_COMPLEX_PACKED(zp,n,x,y) \</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"> do {*((zp)+2*(n))=(x); *((zp)+(2*(n)+1))=(y);} while(0)</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define GSL_DBL_EPSILON        2.2204460492503131e-16</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> sinfo_qr_companion (<span class="keywordtype">double</span> *h, <span class="keywordtype">size_t</span> nc, gsl_complex_packed_ptr zroot)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">double</span> t = 0.0;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordtype">size_t</span> iterations, e, i, j, k, m;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">double</span> w, x, y, s, z;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">double</span> p = 0, q = 0, r = 0; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   <span class="comment">/* FIXME: if p,q,r, are not set to zero then the compiler complains</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">     that they ``might be used uninitialized in this</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">     function''. Looking at the code this does seem possible, so this</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">     should be checked. */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordtype">int</span> notlast;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   <span class="keywordtype">size_t</span> n = nc;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> next_root:</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">return</span> 1 ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   iterations = 0;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> next_iteration:</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   <span class="keywordflow">for</span> (e = n; e >= 2; e--)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>       <span class="keywordtype">double</span> a1 = fabs (FMAT (h, e, e - 1, nc));</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>       <span class="keywordtype">double</span> a2 = fabs (FMAT (h, e - 1, e - 1, nc));</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       <span class="keywordtype">double</span> a3 = fabs (FMAT (h, e, e, nc));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>       <span class="keywordflow">if</span> (a1 <= GSL_DBL_EPSILON * (a2 + a3))</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   x = FMAT (h, n, n, nc);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   <span class="keywordflow">if</span> (e == n)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>       GSL_SET_COMPLEX_PACKED (zroot, n-1, x + t, 0); <span class="comment">/* one real root */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       n--;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       <span class="keywordflow">goto</span> next_root;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>       <span class="comment">/*continue;*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   y = FMAT (h, n - 1, n - 1, nc);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   w = FMAT (h, n - 1, n, nc) * FMAT (h, n, n - 1, nc);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">if</span> (e == n - 1)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>       p = (y - x) / 2;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       q = p * p + w;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       y = sqrt (fabs (q));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>       x += t;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>       <span class="keywordflow">if</span> (q > 0)        <span class="comment">/* two real roots */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       <span class="keywordflow">if</span> (p < 0)</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         y = -y;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>       y += p;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       GSL_SET_COMPLEX_PACKED (zroot, n-1, x - w / y, 0);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>           GSL_SET_COMPLEX_PACKED (zroot, n-2, x + y, 0);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     }</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>       GSL_SET_COMPLEX_PACKED (zroot, n-1, x + p, -y);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       GSL_SET_COMPLEX_PACKED (zroot, n-2, x + p, y);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>       n -= 2;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       <span class="keywordflow">goto</span> next_root;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       <span class="comment">/*continue;*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="comment">/* No more roots found yet, do another iteration */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">if</span> (iterations == 60)  <span class="comment">/* increased from 30 to 60 */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <span class="comment">/* too many iterations - give up! */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       cpl_msg_error(<span class="stringliteral">"qr:"</span>,<span class="stringliteral">"too many iterations-give up"</span>) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">if</span> (iterations % 10 == 0 && iterations > 0)</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>       <span class="comment">/* use an exceptional shift */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       t += x;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       <span class="keywordflow">for</span> (i = 1; i <= n; i++)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       FMAT (h, i, i, nc) -= x;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       s = fabs (FMAT (h, n, n - 1, nc)) + fabs (FMAT (h, n - 1, n - 2, nc));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       y = 0.75 * s;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       x = y;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       w = -0.4375 * s * s;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   iterations++;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">for</span> (m = n - 2; m >= e; m--)</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       <span class="keywordtype">double</span> a1, a2, a3;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>       z = FMAT (h, m, m, nc);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       r = x - z;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>       s = y - z;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       p = FMAT (h, m, m + 1, nc) + (r * s - w) / FMAT (h, m + 1, m, nc);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>       q = FMAT (h, m + 1, m + 1, nc) - z - r - s;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>       r = FMAT (h, m + 2, m + 1, nc);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>       s = fabs (p) + fabs (q) + fabs (r);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       p /= s;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       q /= s;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       r /= s;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="keywordflow">if</span> (m == e)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>       a1 = fabs (FMAT (h, m, m - 1, nc));</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       a2 = fabs (FMAT (h, m - 1, m - 1, nc));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       a3 = fabs (FMAT (h, m + 1, m + 1, nc));</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>       <span class="keywordflow">if</span> (a1 * (fabs (q) + fabs (r)) <= GSL_DBL_EPSILON * fabs (p) * (a2 + a3))</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordflow">for</span> (i = m + 2; i <= n; i++)</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       FMAT (h, i, i - 2, nc) = 0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">for</span> (i = m + 3; i <= n; i++)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       FMAT (h, i, i - 3, nc) = 0;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="comment">/* double QR step */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">for</span> (k = m; k <= n - 1; k++)</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       notlast = (k != n - 1);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       <span class="keywordflow">if</span> (k != m)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       p = FMAT (h, k, k - 1, nc);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       q = FMAT (h, k + 1, k - 1, nc);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       r = notlast ? FMAT (h, k + 2, k - 1, nc) : 0.0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>       x = fabs (p) + fabs (q) + fabs (r);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       <span class="keywordflow">if</span> (x == 0)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordflow">continue</span>;        <span class="comment">/* FIXME????? */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       p /= x;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       q /= x;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       r /= x;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       s = sqrt (p * p + q * q + r * r);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       <span class="keywordflow">if</span> (p < 0)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     s = -s;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       <span class="keywordflow">if</span> (k != m)</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       FMAT (h, k, k - 1, nc) = -s * x;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (e != m)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       FMAT (h, k, k - 1, nc) *= -1;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       p += s;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       x = p / s;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       y = q / s;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       z = r / s;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       q /= p;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       r /= p;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       <span class="comment">/* do row modifications */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       <span class="keywordflow">for</span> (j = k; j <= n; j++)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       p = FMAT (h, k, j, nc) + q * FMAT (h, k + 1, j, nc);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       <span class="keywordflow">if</span> (notlast)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>           p += r * FMAT (h, k + 2, j, nc);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           FMAT (h, k + 2, j, nc) -= p * z;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       FMAT (h, k + 1, j, nc) -= p * y;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       FMAT (h, k, j, nc) -= p * x;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       j = (k + 3 < n) ? (k + 3) : n;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <span class="comment">/* do column modifications */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">for</span> (i = e; i <= j; i++)</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       p = x * FMAT (h, i, k, nc) + y * FMAT (h, i, k + 1, nc);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>       <span class="keywordflow">if</span> (notlast)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>           p += z * FMAT (h, i, k + 2, nc);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>           FMAT (h, i, k + 2, nc) -= p * r;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       FMAT (h, i, k + 1, nc) -= p * q;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       FMAT (h, i, k, nc) -= p;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordflow">goto</span> next_iteration;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__raw__types_8h_source.html b/html/sinfo__raw__types_8h_source.html
index ca4d050..0d9922b 100644
--- a/html/sinfo__raw__types_8h_source.html
+++ b/html/sinfo__raw__types_8h_source.html
@@ -2,128 +2,159 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_raw_types.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_raw_types.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_raw_types.h,v 1.5 2008/07/04 13:06:02 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/07/04 13:06:02 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_RAW_TYPES_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RAW_TYPES_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Raw TYPES</span>
-<a name="l00033"></a>00033 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                   Raw Frames</span>
-<a name="l00037"></a>00037 <span class="comment"> --------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 CPL_BEGIN_DECLS
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#define RAW_LINEARITY_LAMP                 "LINEARITY_LAMP"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define RAW_DARK                           "DARK"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define RAW_PINHOLE_LAMP                   "PINHOLE_LAMP"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SLIT_LAMP                      "SLIT_LAMP"      </span><span class="comment">/* ?? */</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#define RAW_FIBRE_PSF                      "FIBRE_PSF"    </span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_DARK                     "FIBRE_DARK"    </span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_LAMP                     "FIBRE_LAMP"    </span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_NS                       "FIBRE_NS"      </span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_EW                       "FIBRE_EW"      </span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_LAMP                      "WAVE_LAMP"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_LAMP_DITHER               "WAVE_LAMP_DITHER"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_NS                        "WAVE_NS"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_NS_DITHER                 "WAVE_NS_DITHER"</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define RAW_FLAT_LAMP                      "FLAT_LAMP"</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_LAMP_DITHER               "FLAT_LAMP_DITHER"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_NS                        "FLAT_NS"</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_NS_DITHER                 "FLAT_NS_DITHER"</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_SKY                       "FLAT_SKY"</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLUX_LAMP                      "FLUX_LAMP"</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define RAW_PSF_CALIBRATOR                 "PSF_CALIBRATOR"</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define RAW_FOCUS                          "FOCUS"</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_DUMMY                      "SKY_DUMMY"</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define RAW_PUPIL_LAMP                     "PUPIL_LAMP"</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT                         "OBJECT"</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define RAW_IMAGE_PRE_OBJECT               "IMAGE_PRE_OBJECT"</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define RAW_IMAGE_PRE_SKY                  "IMAGE_PRE_SKY"</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_SKYSPIDER               "OBJECT_SKYSPIDER"</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_SKYSPIDER_DITHER        "OBJECT_SKYSPIDER_DITHER"</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#define RAW_OBJECT_NODDING                 "OBJECT_NODDING"</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_NODDING                    "SKY_NODDING"</span>
-<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_JITTER                  "OBJECT_JITTER"</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_JITTER                     "SKY_JITTER"</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_NODDING_DITHER          "OBJECT_NODDING_DITHER"</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_JITTER_DITHER           "OBJECT_JITTER_DITHER"</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_NODDING_DITHER             "SKY_NODDING_DITHER"</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_JITTER_DITHER              "SKY_JITTER_DITHER"</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="preprocessor">#define RAW_ACQUISITION_SKY                "ACQUISITION_SKY"</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define RAW_ACQUISITION_OBJECT             "ACQUISITION_OBJECT"</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="preprocessor">#define RAW_STD                            "STD"</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define RAW_STACKED_SLITPOS                "STACKED_SLITPOS"</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_STD                        "SKY_STD"</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_OH                         "SKY_OH"</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_PSF_CALIBRATOR             "SKY_PSF_CALIBRATOR"</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define RAW_STD_STAR                       "STD_STAR"</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#define RAW_STD_STAR_DITHER                "STD_STAR_DITHER"</span>
-<a name="l00093"></a>00093 <span class="preprocessor"></span>
-<a name="l00094"></a>00094 <span class="preprocessor">#define SINFO_UTL_STDSTARS_RAW             "STDSTAR_CAT"</span>
-<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SEDS_RAW                 "SED"</span>
-<a name="l00096"></a>00096 <span class="preprocessor"></span>
-<a name="l00097"></a>00097 <span class="comment">/* next are TBD */</span>
-<a name="l00098"></a>00098 <span class="preprocessor">#define RAW_OFF                            "RAW_OFF"</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OFF1                           "OFF1"</span>
-<a name="l00100"></a>00100 <span class="preprocessor"></span><span class="preprocessor">#define RAW_OFF2                           "OFF2"</span>
-<a name="l00101"></a>00101 <span class="preprocessor"></span>
-<a name="l00102"></a>00102 <span class="preprocessor">#define RAW_SKY                            "SKY"</span>
-<a name="l00103"></a>00103 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY1                           "SKY1"</span>
-<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY2                           "SKY2"</span>
-<a name="l00105"></a>00105 <span class="preprocessor"></span>
-<a name="l00106"></a>00106 <span class="preprocessor">#define RAW_ON                             "RAW_ON"</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#define RAW_ON1                            "ON1"</span>
-<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#define RAW_ON2                            "ON2"</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#define RAW_INT_ON                         "INT_ON"</span>
-<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#define RAW_INT_OFF                        "INT_OFF"</span>
-<a name="l00111"></a>00111 <span class="preprocessor"></span>CPL_END_DECLS
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_raw_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_raw_types.h,v 1.5 2008/07/04 13:06:02 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/07/04 13:06:02 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_RAW_TYPES_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RAW_TYPES_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Raw TYPES</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                   Raw Frames</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> --------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#define RAW_LINEARITY_LAMP                 "LINEARITY_LAMP"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_DARK                           "DARK"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define RAW_PINHOLE_LAMP                   "PINHOLE_LAMP"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SLIT_LAMP                      "SLIT_LAMP"      </span><span class="comment">/* ?? */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_PSF                      "FIBRE_PSF"    </span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_DARK                     "FIBRE_DARK"    </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_LAMP                     "FIBRE_LAMP"    </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_NS                       "FIBRE_NS"      </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FIBRE_EW                       "FIBRE_EW"      </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_LAMP                      "WAVE_LAMP"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_LAMP_DITHER               "WAVE_LAMP_DITHER"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_NS                        "WAVE_NS"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_WAVE_NS_DITHER                 "WAVE_NS_DITHER"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#define RAW_FLAT_LAMP                      "FLAT_LAMP"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_LAMP_DITHER               "FLAT_LAMP_DITHER"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_NS                        "FLAT_NS"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_NS_DITHER                 "FLAT_NS_DITHER"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLAT_SKY                       "FLAT_SKY"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FLUX_LAMP                      "FLUX_LAMP"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_PSF_CALIBRATOR                 "PSF_CALIBRATOR"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_FOCUS                          "FOCUS"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_DUMMY                      "SKY_DUMMY"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define RAW_PUPIL_LAMP                     "PUPIL_LAMP"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT                         "OBJECT"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_IMAGE_PRE_OBJECT               "IMAGE_PRE_OBJECT"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_IMAGE_PRE_SKY                  "IMAGE_PRE_SKY"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_SKYSPIDER               "OBJECT_SKYSPIDER"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_SKYSPIDER_DITHER        "OBJECT_SKYSPIDER_DITHER"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#define RAW_OBJECT_NODDING                 "OBJECT_NODDING"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_NODDING                    "SKY_NODDING"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_JITTER                  "OBJECT_JITTER"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_JITTER                     "SKY_JITTER"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_NODDING_DITHER          "OBJECT_NODDING_DITHER"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OBJECT_JITTER_DITHER           "OBJECT_JITTER_DITHER"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_NODDING_DITHER             "SKY_NODDING_DITHER"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_JITTER_DITHER              "SKY_JITTER_DITHER"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor">#define RAW_ACQUISITION_SKY                "ACQUISITION_SKY"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_ACQUISITION_OBJECT             "ACQUISITION_OBJECT"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#define RAW_STD                            "STD"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_STACKED_SLITPOS                "STACKED_SLITPOS"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_STD                        "SKY_STD"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_OH                         "SKY_OH"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY_PSF_CALIBRATOR             "SKY_PSF_CALIBRATOR"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_STD_STAR                       "STD_STAR"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_STD_STAR_DITHER                "STD_STAR_DITHER"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">#define SINFO_UTL_STDSTARS_RAW             "STDSTAR_CAT"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SEDS_RAW                 "SED"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/* next are TBD */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">#define RAW_OFF                            "RAW_OFF"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OFF1                           "OFF1"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_OFF2                           "OFF2"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">#define RAW_SKY                            "SKY"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY1                           "SKY1"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_SKY2                           "SKY2"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">#define RAW_ON                             "RAW_ON"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_ON1                            "ON1"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_ON2                            "ON2"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_INT_ON                         "INT_ON"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor"></span><span class="preprocessor">#define RAW_INT_OFF                        "INT_OFF"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor"></span>CPL_END_DECLS</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__detlin_8c_source.html b/html/sinfo__rec__detlin_8c_source.html
index f85ee12..92e650e 100644
--- a/html/sinfo__rec__detlin_8c_source.html
+++ b/html/sinfo__rec__detlin_8c_source.html
@@ -2,267 +2,298 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_detlin.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_detlin.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_detlin.c,v 1.21 2008/02/04 17:23:02 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/04 17:23:02 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.21 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00031"></a>00031 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034  <span class="comment">/****************************************************************</span>
-<a name="l00035"></a>00035 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00036"></a>00036 <span class="comment">  ****************************************************************/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00039"></a>00039 <span class="comment">                         INCLUDES</span>
-<a name="l00040"></a>00040 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                                Includes</span>
-<a name="l00047"></a>00047 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* std libraries */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <strings.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <string.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/* cpl */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="comment">/* irplib */</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/* sinfoni */</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_bp_lin_config.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_bp_config.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_bp_lin.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_bp_lin.h></span> 
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                            Functions prototypes</span>
-<a name="l00079"></a>00079 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_create(cpl_plugin *plugin);
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_exec(cpl_plugin *plugin);
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_destroy(cpl_plugin *plugin);
-<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin(cpl_parameterlist *, cpl_frameset *);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00088"></a>00088 <span class="comment">                            Static variables</span>
-<a name="l00089"></a>00089 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_detlin_description[] =
-<a name="l00092"></a>00092 <span class="stringliteral">"This recipe computes detector non linearities and a bad pixel map.\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"The input files are increasing intensity raw flats\n"</span>
-<a name="l00094"></a>00094 <span class="stringliteral">"their associated tags should be LINEARITY_LAMP.\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"The output are: \n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"A table (PRO.CATG=LIN_DET_INFO) with information \n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"on the detector non linearities\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"A table (PRO.CATG=GAIN_INFO) with information on the detector gain\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"A cube (PRO.CATG=BP_COEFF) with the polynomial fit parameters \n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"of the detector non linearities\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"A bad pixel map (PRO.CATG=BP_MAP_NL)\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"esorex --params sinfo_rec_detlin\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"esorex --help sinfo_rec_detlin\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"\n"</span>;
-<a name="l00106"></a>00106 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00107"></a>00107 <span class="comment">                                Functions code</span>
-<a name="l00108"></a>00108 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00109"></a>00109 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 
-<a name="l00121"></a><a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00121</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00122"></a>00122 {
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00125"></a>00125   cpl_plugin *plugin = &recipe->interface;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128   cpl_plugin_init(plugin,
-<a name="l00129"></a>00129           CPL_PLUGIN_API,
-<a name="l00130"></a>00130           SINFONI_BINARY_VERSION,
-<a name="l00131"></a>00131           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00132"></a>00132           <span class="stringliteral">"sinfo_rec_detlin"</span>,
-<a name="l00133"></a>00133           <span class="stringliteral">"Detector's linearity & non linear bad pixels determination."</span>,
-<a name="l00134"></a>00134           sinfo_rec_detlin_description,
-<a name="l00135"></a>00135           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00136"></a>00136           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00137"></a>00137           sinfo_get_license(),
-<a name="l00138"></a>00138           sinfo_rec_detlin_create,
-<a name="l00139"></a>00139           sinfo_rec_detlin_exec,
-<a name="l00140"></a>00140           sinfo_rec_detlin_destroy);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   cpl_pluginlist_append(list, plugin);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   <span class="keywordflow">return</span> 0;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00156"></a>00156 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00157"></a>00157 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_create(cpl_plugin *plugin)
-<a name="l00158"></a>00158 {
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160   <span class="comment">/*</span>
-<a name="l00161"></a>00161 <span class="comment">   * We have to provide the option we accept to the application.</span>
-<a name="l00162"></a>00162 <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span>
-<a name="l00163"></a>00163 <span class="comment">   * interface.</span>
-<a name="l00164"></a>00164 <span class="comment">   */</span>
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167     cpl_recipe      * recipe ;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00170"></a>00170     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00171"></a>00171         recipe = (cpl_recipe *)plugin ;
-<a name="l00172"></a>00172     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     cpl_error_reset();
-<a name="l00175"></a>00175     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00176"></a>00176     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00177"></a>00177     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     sinfo_general_config_add(recipe->parameters);
-<a name="l00180"></a>00180     sinfo_product_config_add(recipe->parameters);
-<a name="l00181"></a>00181     sinfo_bp_lin_config_add(recipe->parameters); 
-<a name="l00182"></a>00182   
-<a name="l00183"></a>00183     <span class="keywordflow">return</span> 0;
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00193"></a>00193 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_exec(cpl_plugin *plugin)
-<a name="l00196"></a>00196 {
-<a name="l00197"></a>00197      cpl_recipe  *   recipe ;
-<a name="l00198"></a>00198     
-<a name="l00199"></a>00199     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00200"></a>00200     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00203"></a>00203         recipe = (cpl_recipe *)plugin ;
-<a name="l00204"></a>00204     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00205"></a>00205   
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00207"></a>00207         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00208"></a>00208 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00209"></a>00209         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00210"></a>00210     } 
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   <span class="keywordflow">return</span> sinfo_rec_detlin(recipe->parameters, recipe->frames);
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 }
-<a name="l00215"></a>00215 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00221"></a>00221 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_destroy(cpl_plugin *plugin)
-<a name="l00224"></a>00224 {
-<a name="l00225"></a>00225      cpl_recipe  *   recipe ;
-<a name="l00226"></a>00226     
-<a name="l00227"></a>00227     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00228"></a>00228     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00229"></a>00229         recipe = (cpl_recipe *)plugin ;
-<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234   <span class="keywordflow">return</span> 0;
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 <span class="comment">/*</span>
-<a name="l00239"></a>00239 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00240"></a>00240 <span class="comment"> */</span>
-<a name="l00241"></a>00241 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00262"></a>00262 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00265"></a>00265 {
-<a name="l00266"></a>00266   cpl_parameter *p=NULL;          
-<a name="l00267"></a>00267   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00270"></a>00270         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00271"></a>00271   <span class="comment">/* Hidden parameters */</span>
-<a name="l00272"></a>00272   <span class="comment">/* name of the data cube storing the found polynomial coefficients */</span>
-<a name="l00273"></a>00273   sinfo_bp_config_add(config);  
-<a name="l00274"></a>00274   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00275"></a>00275   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Linear"</span>));   
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00280"></a>00280   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00281"></a>00281   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00282"></a>00282      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00283"></a>00283   }
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286   sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);
-<a name="l00287"></a>00287   sinfo_msg(<span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION  "</span>);
-<a name="l00288"></a>00288   sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);
-<a name="l00289"></a>00289   ck0(sinfo_new_bp_search_lin(cpl_func,config,<span class="keyword">set</span>),
-<a name="l00290"></a>00290     <span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION FAILED"</span>) ;
-<a name="l00291"></a>00291   sinfo_msg(<span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION SUCCESS"</span>) ;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293  cleanup:
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00296"></a>00296     <span class="keywordflow">return</span> -1;
-<a name="l00297"></a>00297   } <span class="keywordflow">else</span> {
-<a name="l00298"></a>00298     <span class="keywordflow">return</span> 0;
-<a name="l00299"></a>00299   }
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 }
-<a name="l00302"></a>00302 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_detlin.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_detlin.c,v 1.21 2008/02/04 17:23:02 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/04 17:23:02 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.21 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                         INCLUDES</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* std libraries */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_bp_lin_config.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_bp_config.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_bp_lin.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_bp_lin.h></span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_detlin_description[] =</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"This recipe computes detector non linearities and a bad pixel map.\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"The input files are increasing intensity raw flats\n"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"their associated tags should be LINEARITY_LAMP.\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"The output are: \n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"A table (PRO.CATG=LIN_DET_INFO) with information \n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"on the detector non linearities\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"A table (PRO.CATG=GAIN_INFO) with information on the detector gain\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"A cube (PRO.CATG=BP_COEFF) with the polynomial fit parameters \n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"of the detector non linearities\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"A bad pixel map (PRO.CATG=BP_MAP_NL)\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"esorex --params sinfo_rec_detlin\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"esorex --help sinfo_rec_detlin\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno"><a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  121</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           <span class="stringliteral">"sinfo_rec_detlin"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>           <span class="stringliteral">"Detector's linearity & non linear bad pixels determination."</span>,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>           sinfo_rec_detlin_description,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>           sinfo_rec_detlin_create,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           sinfo_rec_detlin_exec,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>           sinfo_rec_detlin_destroy);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> {</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">   * We have to provide the option we accept to the application.</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">   * interface.</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     sinfo_bp_lin_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>      cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     } </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordflow">return</span> sinfo_rec_detlin(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>      cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_detlin(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   cpl_parameter *p=NULL;          </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   <span class="comment">/* Hidden parameters */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="comment">/* name of the data cube storing the found polynomial coefficients */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   sinfo_bp_config_add(config);  </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Linear"</span>));   </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   sinfo_msg(<span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION  "</span>);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   ck0(sinfo_new_bp_search_lin(cpl_func,config,<span class="keyword">set</span>),</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION FAILED"</span>) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   sinfo_msg(<span class="stringliteral">"BP_MAP_NL BAD PIXEL MAP DETERMINATION SUCCESS"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>  cleanup:</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__distortion_8c_source.html b/html/sinfo__rec__distortion_8c_source.html
index cd4674b..0992f90 100644
--- a/html/sinfo__rec__distortion_8c_source.html
+++ b/html/sinfo__rec__distortion_8c_source.html
@@ -2,827 +2,858 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_distortion.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_distortion.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_distortion.c,v 1.42 2011/11/16 13:36:19 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/11/16 13:36:19 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.42 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Distortions Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">/* std */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <strings.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <string.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <math.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/* cpl */</span>       
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span>       
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/* irplib */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_lamp_flats_config.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_bp_config.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_bp_dist_config.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_north_south_test_config.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_distortion_config.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_new_lamp_flats.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_bp_norm.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_new_find_distortions.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_new_nst.h></span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00077"></a>00077 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00078"></a>00078 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00079"></a>00079 <span class="comment">//Only for sinfo_propertylist_has</span>
-<a name="l00080"></a>00080 <span class="preprocessor">#include <sinfo_dfs.h></span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00085"></a>00085 <span class="comment">                            Functions prototypes</span>
-<a name="l00086"></a>00086 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_create(cpl_plugin *plugin);
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_exec(cpl_plugin *plugin);
-<a name="l00090"></a>00090 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_destroy(cpl_plugin *plugin);
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keywordtype">int</span> new_pre_process(cpl_frameset* <span class="keyword">set</span>, 
-<a name="l00093"></a>00093         <span class="keyword">const</span> <span class="keywordtype">float</span> lo_rej, <span class="keyword">const</span> <span class="keywordtype">float</span> hi_rej, <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00096"></a>00096 <span class="comment">                            Static variables</span>
-<a name="l00097"></a>00097 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00098"></a>00098 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description1[] =
-<a name="l00099"></a>00099 <span class="stringliteral">"This recipe determines the optical distortions and the slitlets distances.\n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"Necessary input are:\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"Several (usually 75) raw frames classified as FIBRE_NS\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"Standard (an 'ON' and an 'OFF') flat frames having classified as FLAT_NS\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"Standard (an 'ON' and an 'OFF') arc lamp frames having classified as WAVE_NS\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"A corresponding (band) reference arc line list classified as REF_LINE_ARC\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"A reference table with data reduction parameters classified as DRS_SETUP_WAVE.\n"</span>;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description2[] =
-<a name="l00109"></a>00109 <span class="stringliteral">"Default output are (with their PRO.CATG)\n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"A master flat: MASTER_FLAT_LAMP\n"</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"A Bad pixel map: BP_MAP_DI\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"A fake-off fibre stacked frame: FIBRE_NS_STACKED_OFF\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"A fake-on fibre  stacked frame: FIBRE_NS_STACKED_ON\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"A fake on-off fibre  stacked frame: FIBRE_NS_STACKED\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"A table with optical distortion coefficients: DISTORTION\n"</span>;
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description3[] =
-<a name="l00119"></a>00119 <span class="stringliteral">"A distortion corrected frame: FIBRE_NS_STACKED_DIST\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"A temporary frame: MASTER_SLIT\n"</span>
-<a name="l00121"></a>00121 <span class="stringliteral">"A table with the slitlets distances: SLITLETS_DISTANCE\n"</span>
-<a name="l00122"></a>00122 <span class="stringliteral">"Information on relevant parameters can be found with:\n"</span>
-<a name="l00123"></a>00123 <span class="stringliteral">"esorex --params sinfo_rec_distortion\n"</span>
-<a name="l00124"></a>00124 <span class="stringliteral">"esorex --help sinfo_rec_distortion\n"</span>
-<a name="l00125"></a>00125 <span class="stringliteral">"\n"</span>;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description[1300];
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00130"></a>00130 <span class="comment">                                Functions code</span>
-<a name="l00131"></a>00131 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00147"></a>00147 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00148"></a>00148 <span class="keywordtype">int</span>
-<a name="l00149"></a><a class="code" href="group__sinfo__rec__distortion.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00149</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00153"></a>00153   cpl_plugin *plugin = &recipe->interface;
-<a name="l00154"></a>00154   strcpy(sinfo_rec_distortion_description,sinfo_rec_distortion_description1);
-<a name="l00155"></a>00155   strcat(sinfo_rec_distortion_description,sinfo_rec_distortion_description2);
-<a name="l00156"></a>00156   strcat(sinfo_rec_distortion_description,sinfo_rec_distortion_description3);
-<a name="l00157"></a>00157  
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   cpl_plugin_init(plugin,
-<a name="l00160"></a>00160           CPL_PLUGIN_API,
-<a name="l00161"></a>00161           SINFONI_BINARY_VERSION,
-<a name="l00162"></a>00162           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00163"></a>00163           <span class="stringliteral">"sinfo_rec_distortion"</span>,
-<a name="l00164"></a>00164           <span class="stringliteral">"Finds optical distortions and slitlets distances"</span>,
-<a name="l00165"></a>00165           sinfo_rec_distortion_description,
-<a name="l00166"></a>00166           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00167"></a>00167           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00168"></a>00168           sinfo_get_license(),
-<a name="l00169"></a>00169           sinfo_rec_distortion_create,
-<a name="l00170"></a>00170           sinfo_rec_distortion_exec,
-<a name="l00171"></a>00171           sinfo_rec_distortion_destroy);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   cpl_pluginlist_append(list, plugin);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   <span class="keywordflow">return</span> 0;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 }
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_create(cpl_plugin *plugin)
-<a name="l00190"></a>00190 {
-<a name="l00191"></a>00191     cpl_recipe      * recipe ;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00194"></a>00194     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00195"></a>00195         recipe = (cpl_recipe *)plugin ;
-<a name="l00196"></a>00196     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00197"></a>00197     cpl_error_reset();
-<a name="l00198"></a>00198     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00201"></a>00201     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204   <span class="comment">/*</span>
-<a name="l00205"></a>00205 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00206"></a>00206 <span class="comment">   */</span>
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   <span class="comment">/* Output file name */</span>
-<a name="l00210"></a>00210   sinfo_general_config_add(recipe->parameters);
-<a name="l00211"></a>00211   sinfo_product_config_add(recipe->parameters);
-<a name="l00212"></a>00212   sinfo_lamp_flats_config_add(recipe->parameters);
-<a name="l00213"></a>00213   sinfo_bp_config_add(recipe->parameters);  
-<a name="l00214"></a>00214   <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(recipe->parameters); 
-<a name="l00215"></a>00215   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00216"></a>00216   sinfo_distortion_config_add(recipe->parameters);
-<a name="l00217"></a>00217   sinfo_north_south_test_config_add(recipe->parameters);
-<a name="l00218"></a>00218   
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220   <span class="keywordflow">return</span> 0;
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 }
-<a name="l00223"></a>00223 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_exec(cpl_plugin *plugin)
-<a name="l00231"></a>00231 {
-<a name="l00232"></a>00232     cpl_recipe  *   recipe ;
-<a name="l00233"></a>00233     <span class="keywordtype">int</span> status=0;
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00238"></a>00238     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00239"></a>00239         recipe = (cpl_recipe *)plugin ;
-<a name="l00240"></a>00240     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00241"></a>00241     status=sinfo_rec_distortion(recipe->parameters, recipe->frames);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00244"></a>00244         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00245"></a>00245 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00246"></a>00246         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00247"></a>00247     } 
-<a name="l00248"></a>00248   <span class="keywordflow">return</span> status;
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 }
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00258"></a>00258 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00259"></a>00259 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_destroy(cpl_plugin *plugin)
-<a name="l00260"></a>00260 {
-<a name="l00261"></a>00261     cpl_recipe  *   recipe ;
-<a name="l00262"></a>00262     
-<a name="l00263"></a>00263     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00264"></a>00264     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00265"></a>00265         recipe = (cpl_recipe *)plugin ;
-<a name="l00266"></a>00266     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270   <span class="keywordflow">return</span> 0;
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00281"></a>00281 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00282"></a>00282 <span class="comment">/*</span>
-<a name="l00283"></a>00283 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00284"></a>00284 <span class="comment"> */</span>
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00287"></a>00287 sinfo_rec_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00288"></a>00288 {
-<a name="l00289"></a>00289  
-<a name="l00290"></a>00290   cpl_parameter *p=NULL;
-<a name="l00291"></a>00291   cpl_frame* frame=NULL;
-<a name="l00292"></a>00292   cpl_propertylist* plist=NULL;
-<a name="l00293"></a>00293   cpl_image* ima=NULL;
-<a name="l00294"></a>00294   cpl_frameset* raw_set=NULL;
-<a name="l00295"></a>00295   cpl_frameset* set_off=NULL;
-<a name="l00296"></a>00296   cpl_frameset* set_on=NULL;
-<a name="l00297"></a>00297   cpl_frameset* set_fibre_ns=NULL;
-<a name="l00298"></a>00298   cpl_frameset* set_flat_ns=NULL;
-<a name="l00299"></a>00299   cpl_frameset* set_wave_ns=NULL;
-<a name="l00300"></a>00300   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   fake* fk=sinfo_fake_new();
-<a name="l00303"></a>00303   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00304"></a>00304   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00307"></a>00307   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00311"></a>00311         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00312"></a>00312   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00313"></a>00313     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00314"></a>00314     <span class="keywordflow">return</span> -1;
-<a name="l00315"></a>00315   }
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00318"></a>00318   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00319"></a>00319   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00320"></a>00320      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00321"></a>00321   }
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323   cknull_nomsg(set_fibre_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_FIBRE_NS));
-<a name="l00324"></a>00324   cknull_nomsg(set_flat_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_FLAT_NS));
-<a name="l00325"></a>00325   cknull_nomsg(set_wave_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_WAVE_NS));
-<a name="l00326"></a>00326   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00327"></a>00327   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   
-<a name="l00328"></a>00328   check_nomsg(raw_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00329"></a>00329     
-<a name="l00330"></a>00330   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);
-<a name="l00331"></a>00331   sinfo_msg(<span class="stringliteral">"  DETERMINE MASTER_LAMP_NS "</span>);
-<a name="l00332"></a>00332   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334   sinfo_msg(<span class="stringliteral">"REDUCE LAMPFLAT"</span>) ;    
-<a name="l00335"></a>00335   ck0(sinfo_new_lamp_flats(cpl_func,config, <span class="keyword">set</span>,set_flat_ns ),
-<a name="l00336"></a>00336       <span class="stringliteral">"reducing lampflats"</span>) ;
-<a name="l00337"></a>00337   sinfo_msg(<span class="stringliteral">"SUCCES: DETERMINATION MASTER_LAMP_NS"</span>) ; 
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);
-<a name="l00340"></a>00340   sinfo_msg(<span class="stringliteral">"  DETERMINE BP_MAP_DI        "</span>);
-<a name="l00341"></a>00341   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);
-<a name="l00342"></a>00342   
-<a name="l00343"></a>00343   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00344"></a>00344   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   
-<a name="l00345"></a>00345        
-<a name="l00346"></a>00346   ck0(sinfo_new_bp_search_normal(cpl_func,config,<span class="keyword">set</span>,set_flat_ns,
-<a name="l00347"></a>00347                  PRO_BP_MAP_DI),
-<a name="l00348"></a>00348       <span class="stringliteral">"determining %s"</span>,PRO_BP_MAP_DI);
-<a name="l00349"></a>00349   sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_BP_MAP_DI);
-<a name="l00350"></a>00350   <span class="comment">/* </span>
-<a name="l00351"></a>00351 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00352"></a>00352 <span class="comment">        pre iteration: get a collassed frame </span>
-<a name="l00353"></a>00353 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00354"></a>00354 <span class="comment">   */</span>
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356    check_nomsg(set_off=cpl_frameset_duplicate(raw_set));
-<a name="l00357"></a>00357    ck0_nomsg(new_pre_process(set_off, 0.0, 0.2,<span class="stringliteral">"out_fibre_off.fits"</span>));
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359   
-<a name="l00360"></a>00360    <span class="comment">/* add the off artificial frame to the frameset */</span>
-<a name="l00361"></a>00361    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(set_off,RAW_FIBRE_NS)) {
-<a name="l00362"></a>00362        frame = cpl_frameset_find(set_off,RAW_FIBRE_NS);
-<a name="l00363"></a>00363        cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);
-<a name="l00364"></a>00364        cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame));
-<a name="l00365"></a>00365    } <span class="keywordflow">else</span> {
-<a name="l00366"></a>00366        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, RAW_FIBRE_NS);
-<a name="l00367"></a>00367        <span class="keywordflow">goto</span> cleanup;
-<a name="l00368"></a>00368    }
-<a name="l00369"></a>00369  
-<a name="l00370"></a>00370  
-<a name="l00371"></a>00371    <span class="comment">/* </span>
-<a name="l00372"></a>00372 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00373"></a>00373 <span class="comment">        1st iteration: get off frame </span>
-<a name="l00374"></a>00374 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00375"></a>00375 <span class="comment">    */</span>
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377    sinfo_msg(<span class="stringliteral">"STACK FIBRE,NS TO GET FAKE OFF\n"</span>) ; 
-<a name="l00378"></a>00378    strcpy(fk->pro_class,RAW_FIBRE_NS);
-<a name="l00379"></a>00379    fk->frm_switch=1;
-<a name="l00380"></a>00380    fk->mask_index=0;
-<a name="l00381"></a>00381    fk->ind_index=0;
-<a name="l00382"></a>00382    fk->flat_index=0;
-<a name="l00383"></a>00383    fk->wfix_index=0;
-<a name="l00384"></a>00384    fk->low_rej=0.0;
-<a name="l00385"></a>00385    fk->hig_rej=0.2;
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387  
-<a name="l00388"></a>00388    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,
-<a name="l00389"></a>00389                                         PRO_FIBRE_NS_STACKED_OFF,0,fk),
-<a name="l00390"></a>00390        <span class="stringliteral">"Error stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_OFF);
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392    strcpy(file_name,<span class="stringliteral">"out_fibre_off.fits"</span>);
-<a name="l00393"></a>00393    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00394"></a>00394    sinfo_free_frameset(&set_off);
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396    cknull(plist = cpl_propertylist_load(file_name, 0),
-<a name="l00397"></a>00397            <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399      <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l00400"></a>00400        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_OFF);
-<a name="l00401"></a>00401      } <span class="keywordflow">else</span> {
-<a name="l00402"></a>00402        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_OFF);
-<a name="l00403"></a>00403      }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405    sinfo_free_propertylist(&plist);
-<a name="l00406"></a>00406    sinfo_free_image(&ima);
-<a name="l00407"></a>00407    sinfo_msg(<span class="stringliteral">"SUCCESS: STACKED FIBRE,NS TO GET FAKE OFF\n"</span>) ;      
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409    <span class="comment">/* </span>
-<a name="l00410"></a>00410 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00411"></a>00411 <span class="comment">        2nd iteration: get on frame </span>
-<a name="l00412"></a>00412 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00413"></a>00413 <span class="comment">    */</span>
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415    check_nomsg(set_on=cpl_frameset_duplicate(raw_set));
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417    ck0_nomsg(new_pre_process(set_on, 0.0, 0.0,<span class="stringliteral">"out_fibre_on.fits"</span>));
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(set_on,RAW_FIBRE_NS)) {
-<a name="l00420"></a>00420      frame = cpl_frameset_find(set_on,RAW_FIBRE_NS);
-<a name="l00421"></a>00421      cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);
-<a name="l00422"></a>00422      cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame));
-<a name="l00423"></a>00423    } <span class="keywordflow">else</span> {
-<a name="l00424"></a>00424      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, RAW_FIBRE_NS);
-<a name="l00425"></a>00425      <span class="keywordflow">goto</span> cleanup;
-<a name="l00426"></a>00426    }
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429    sinfo_msg(<span class="stringliteral">"STACK FIBRE,NS TO GET FAKE ON\n"</span>) ; 
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431    strcpy(fk->pro_class,RAW_FIBRE_NS);
-<a name="l00432"></a>00432    fk->frm_switch=1;
-<a name="l00433"></a>00433    fk->mask_index=0;
-<a name="l00434"></a>00434    fk->ind_index=0;
-<a name="l00435"></a>00435    fk->flat_index=0;
-<a name="l00436"></a>00436    fk->wfix_index=0;
-<a name="l00437"></a>00437    fk->low_rej=0.0;
-<a name="l00438"></a>00438    fk->hig_rej=0.0;
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,
-<a name="l00442"></a>00442                                         PRO_FIBRE_NS_STACKED_ON,0,fk),
-<a name="l00443"></a>00443                         <span class="stringliteral">"error stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_ON);
-<a name="l00444"></a>00444         sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_FIBRE_NS_STACKED_ON) ; 
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446    <span class="comment">/* cpl_frameset_erase(set,RAW_FIBRE_NS); */</span>
-<a name="l00447"></a>00447    sinfo_free_frameset(&set_on);
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449    <span class="comment">/* here we have a problem with pipefile of following step product */</span>
-<a name="l00450"></a>00450    <span class="comment">/* </span>
-<a name="l00451"></a>00451 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00452"></a>00452 <span class="comment">                3rd iteration combines on and off fake frames</span>
-<a name="l00453"></a>00453 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00454"></a>00454 <span class="comment">   */</span>
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456    sinfo_msg(<span class="stringliteral">"COMBINES FAKE ON AND OFF\n"</span>) ; 
-<a name="l00457"></a>00457    strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED);
-<a name="l00458"></a>00458    fk->frm_switch=1;
-<a name="l00459"></a>00459    fk->mask_index=0;
-<a name="l00460"></a>00460    fk->ind_index=0;
-<a name="l00461"></a>00461    fk->flat_index=1;
-<a name="l00462"></a>00462    fk->wfix_index=0;
-<a name="l00463"></a>00463    fk->low_rej=0.0;
-<a name="l00464"></a>00464    fk->hig_rej=0.0;
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,
-<a name="l00467"></a>00467                                         PRO_FIBRE_NS_STACKED,0,fk),
-<a name="l00468"></a>00468                           <span class="stringliteral">"Stacking frame %s"</span>,PRO_FIBRE_NS_STACKED);
-<a name="l00469"></a>00469    sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_FIBRE_NS_STACKED) ; 
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471    <span class="comment">/* cpl_frameset_erase(set,RAW_FIBRE_NS); */</span>
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473    <span class="comment">/* </span>
-<a name="l00474"></a>00474 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00475"></a>00475 <span class="comment">                STACK WAVECAL</span>
-<a name="l00476"></a>00476 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00477"></a>00477 <span class="comment">   */</span>
-<a name="l00478"></a>00478  
-<a name="l00479"></a>00479    sinfo_msg(<span class="stringliteral">"STACK on WAVE frame\n"</span>) ;
-<a name="l00480"></a>00480    strcpy(fk->pro_class,RAW_WAVE_NS);
-<a name="l00481"></a>00481    fk->frm_switch=1;
-<a name="l00482"></a>00482    fk->mask_index=0;
-<a name="l00483"></a>00483    fk->ind_index=0;
-<a name="l00484"></a>00484    fk->flat_index=1;
-<a name="l00485"></a>00485    fk->wfix_index=0;
-<a name="l00486"></a>00486    fk->low_rej=0.1;
-<a name="l00487"></a>00487    fk->hig_rej=0.1;
-<a name="l00488"></a>00488    
-<a name="l00489"></a>00489    sinfo_msg(<span class="stringliteral">"STACK on WAVE frame\n"</span>) ; 
-<a name="l00490"></a>00490    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_wave_ns,
-<a name="l00491"></a>00491                                         PRO_WAVE_LAMP_STACKED,0,fk),
-<a name="l00492"></a>00492                           <span class="stringliteral">"spacking frame %s"</span>,PRO_WAVE_LAMP_STACKED);
-<a name="l00493"></a>00493    sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_WAVE_LAMP_STACKED) ; 
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495    <span class="keywordflow">if</span>(pdensity < 2) {
-<a name="l00496"></a>00496      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_OFF);
-<a name="l00497"></a>00497      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_ON);
-<a name="l00498"></a>00498      cpl_frameset_erase(<span class="keyword">set</span>,PRO_MASTER_FLAT_LAMP);
-<a name="l00499"></a>00499    }
-<a name="l00500"></a>00500    <span class="comment">/* </span>
-<a name="l00501"></a>00501 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00502"></a>00502 <span class="comment">                DISTORTIONS </span>
-<a name="l00503"></a>00503 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00504"></a>00504 <span class="comment">   */</span>
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506    sinfo_msg(<span class="stringliteral">"COMPUTE DISTORTIONS\n"</span>) ; 
-<a name="l00507"></a>00507    ck0(sinfo_new_find_distortions(cpl_func,config, <span class="keyword">set</span>,set_fibre_ns),
-<a name="l00508"></a>00508        <span class="stringliteral">"computing distortions"</span>);
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED)) {
-<a name="l00512"></a>00512      frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);
-<a name="l00513"></a>00513      strcpy(file_name,cpl_frame_get_filename(frame));
-<a name="l00514"></a>00514    } <span class="keywordflow">else</span> {
-<a name="l00515"></a>00515      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED);
-<a name="l00516"></a>00516      <span class="keywordflow">goto</span> cleanup;
-<a name="l00517"></a>00517    }
-<a name="l00518"></a>00518    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520    check(plist = cpl_propertylist_load(file_name, 0),
-<a name="l00521"></a>00521      <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);
-<a name="l00522"></a>00522 
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524      <span class="keywordflow">if</span> (cpl_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l00525"></a>00525        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);
-<a name="l00526"></a>00526      } <span class="keywordflow">else</span> {
-<a name="l00527"></a>00527        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON);
-<a name="l00528"></a>00528      }
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531    <span class="comment">/* Save the file */</span>
-<a name="l00532"></a>00532    <span class="comment">/*</span>
-<a name="l00533"></a>00533 <span class="comment">   if (cpl_image_save(ima, file_name, CPL_BPP_IEEE_FLOAT, </span>
-<a name="l00534"></a>00534 <span class="comment">                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</span>
-<a name="l00535"></a>00535 <span class="comment">       sinfo_msg_error("Cannot save the product %s",file_name);</span>
-<a name="l00536"></a>00536 <span class="comment">       goto cleanup;</span>
-<a name="l00537"></a>00537 <span class="comment"></span>
-<a name="l00538"></a>00538 <span class="comment">   }</span>
-<a name="l00539"></a>00539 <span class="comment">   */</span>
-<a name="l00540"></a>00540      
-<a name="l00541"></a>00541    sinfo_free_image(&ima);
-<a name="l00542"></a>00542    sinfo_free_propertylist(&plist);
-<a name="l00543"></a>00543    sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS\n"</span>) ; 
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545    <span class="comment">/* </span>
-<a name="l00546"></a>00546 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00547"></a>00547 <span class="comment">       4th iteration: distort fake frame</span>
-<a name="l00548"></a>00548 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00549"></a>00549 <span class="comment">   */</span>
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552    
-<a name="l00553"></a>00553    sinfo_msg(<span class="stringliteral">"DISTORT FAKE FRAME\n"</span>) ; 
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555    strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00556"></a>00556    fk->frm_switch=1;
-<a name="l00557"></a>00557    fk->mask_index=1;
-<a name="l00558"></a>00558    fk->ind_index=1;
-<a name="l00559"></a>00559    fk->flat_index=0;
-<a name="l00560"></a>00560    fk->wfix_index=1;
-<a name="l00561"></a>00561    fk->low_rej=0.0;
-<a name="l00562"></a>00562    fk->hig_rej=0.0;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,
-<a name="l00565"></a>00565                                         PRO_FIBRE_NS_STACKED_DIST,0,fk),
-<a name="l00566"></a>00566                         <span class="stringliteral">"Stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568    sinfo_msg(<span class="stringliteral">"SUCCESS: DISTORTED FAKE FRAME\n"</span>) ;
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570  
-<a name="l00571"></a>00571  
-<a name="l00572"></a>00572    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST)) {
-<a name="l00573"></a>00573      frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00574"></a>00574      strcpy(file_name,cpl_frame_get_filename(frame));
-<a name="l00575"></a>00575    } <span class="keywordflow">else</span> {
-<a name="l00576"></a>00576      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00577"></a>00577      <span class="keywordflow">goto</span> cleanup;
-<a name="l00578"></a>00578    }
-<a name="l00579"></a>00579    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00580"></a>00580    check(plist = cpl_propertylist_load(file_name, 0),
-<a name="l00581"></a>00581      <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584      <span class="keywordflow">if</span> (cpl_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l00585"></a>00585        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);
-<a name="l00586"></a>00586      } <span class="keywordflow">else</span> {
-<a name="l00587"></a>00587        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON);
-<a name="l00588"></a>00588      }
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590    <span class="comment">/* Save the file */</span>
-<a name="l00591"></a>00591    <span class="comment">/*</span>
-<a name="l00592"></a>00592 <span class="comment">      if (cpl_image_save(ima, file_name, CPL_BPP_IEEE_FLOAT, </span>
-<a name="l00593"></a>00593 <span class="comment">                         plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</span>
-<a name="l00594"></a>00594 <span class="comment">       sinfo_msg_error("Cannot save the product %s",file_name);</span>
-<a name="l00595"></a>00595 <span class="comment">       goto cleanup;</span>
-<a name="l00596"></a>00596 <span class="comment">      }</span>
-<a name="l00597"></a>00597 <span class="comment">   */</span>
-<a name="l00598"></a>00598    sinfo_free_propertylist(&plist);
-<a name="l00599"></a>00599    sinfo_free_image(&ima);
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601    <span class="comment">/* </span>
-<a name="l00602"></a>00602 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00603"></a>00603 <span class="comment">                               NST </span>
-<a name="l00604"></a>00604 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00605"></a>00605 <span class="comment">   */</span>
-<a name="l00606"></a>00606  
-<a name="l00607"></a>00607    <span class="keywordflow">if</span>(pdensity < 2) {
-<a name="l00608"></a>00608      cpl_frameset_erase(<span class="keyword">set</span>,PRO_BP_MAP_DI);
-<a name="l00609"></a>00609      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);
-<a name="l00610"></a>00610      cpl_frameset_erase(<span class="keyword">set</span>,PRO_WAVE_LAMP_STACKED);
-<a name="l00611"></a>00611    }
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613   
-<a name="l00614"></a>00614    sinfo_msg(<span class="stringliteral">"RUN NORD SOUTH TEST\n"</span>) ; 
-<a name="l00615"></a>00615    ck0(sinfo_new_nst(cpl_func,config, <span class="keyword">set</span>,set_fibre_ns),
-<a name="l00616"></a>00616        <span class="stringliteral">"Running north south test"</span>);
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618 
-<a name="l00619"></a>00619    <span class="keywordflow">if</span>(pdensity < 2) {
-<a name="l00620"></a>00620      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00621"></a>00621    }
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623    sinfo_msg(<span class="stringliteral">"SUCCESS: RUNNED NORD SUD TEST\n"</span>) ; 
-<a name="l00624"></a>00624    sinfo_msg(<span class="stringliteral">"SUCCESS: RECIPE\n"</span>) ; 
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626    sinfo_free_frameset(&raw_set);
-<a name="l00627"></a>00627    sinfo_fake_delete(&fk);
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630  cleanup:
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632    sinfo_free_frameset(&set_on);
-<a name="l00633"></a>00633    sinfo_free_frameset(&set_fibre_ns);
-<a name="l00634"></a>00634    sinfo_free_frameset(&set_wave_ns);
-<a name="l00635"></a>00635    sinfo_free_frameset(&set_flat_ns);
-<a name="l00636"></a>00636    sinfo_free_image(&ima);
-<a name="l00637"></a>00637    sinfo_free_propertylist(&plist) ;
-<a name="l00638"></a>00638    sinfo_free_frameset(&set_off);
-<a name="l00639"></a>00639    sinfo_free_frameset(&raw_set);
-<a name="l00640"></a>00640    sinfo_free_frameset(&raw_set);
-<a name="l00641"></a>00641    sinfo_fake_delete(&fk);
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00644"></a>00644     <span class="keywordflow">return</span> -1;
-<a name="l00645"></a>00645   } <span class="keywordflow">else</span> {
-<a name="l00646"></a>00646     <span class="keywordflow">return</span> 0;
-<a name="l00647"></a>00647   }
-<a name="l00648"></a>00648 
-<a name="l00649"></a>00649 
-<a name="l00650"></a>00650 }
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00655"></a>00655 new_pre_process(cpl_frameset* <span class="keyword">set</span>, 
-<a name="l00656"></a>00656 <span class="keyword">const</span> <span class="keywordtype">float</span> lo_rej, <span class="keyword">const</span> <span class="keywordtype">float</span> hi_rej, <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o)
-<a name="l00657"></a>00657 {
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659   <span class="keywordtype">int</span> nf=0;
-<a name="l00660"></a>00660   <span class="keywordtype">int</span> ng=10;
-<a name="l00661"></a>00661   <span class="keywordtype">int</span> ns=0;
-<a name="l00662"></a>00662   <span class="keywordtype">int</span> nr=0;
-<a name="l00663"></a>00663   <span class="keywordtype">int</span> nt=0;
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665   <span class="keywordtype">int</span> i=0;
-<a name="l00666"></a>00666   <span class="keywordtype">int</span> j=0;
-<a name="l00667"></a>00667   <span class="keywordtype">int</span> k=0;
-<a name="l00668"></a>00668   <span class="keywordtype">int</span> lo_cut=0;
-<a name="l00669"></a>00669   <span class="keywordtype">int</span> hi_cut=0;
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672   cpl_frame* frame=NULL;
-<a name="l00673"></a>00673   cpl_frame* pframe=NULL;
-<a name="l00674"></a>00674   cpl_frameset* sof=NULL;
-<a name="l00675"></a>00675   cpl_frameset* fibre_raw_set=NULL;
-<a name="l00676"></a>00676   <span class="keywordtype">char</span>* file_name=NULL;
-<a name="l00677"></a>00677 
-<a name="l00678"></a>00678   cpl_propertylist* plist=NULL;
-<a name="l00679"></a>00679   cpl_imagelist* imset_tmp=NULL;
-<a name="l00680"></a>00680   cpl_imagelist* imset_tot=NULL;
-<a name="l00681"></a>00681   cpl_image** avg_img_list=NULL;
-<a name="l00682"></a>00682 
-<a name="l00683"></a>00683   cpl_image* img=NULL;
-<a name="l00684"></a>00684   cpl_image* img_tmp=NULL;
-<a name="l00685"></a>00685   cpl_image* img_dup=NULL;
-<a name="l00686"></a>00686 
-<a name="l00687"></a>00687   cpl_image** img_list=NULL;
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690   sof = cpl_frameset_duplicate(<span class="keyword">set</span>);
-<a name="l00691"></a>00691   fibre_raw_set = cpl_frameset_new();
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693   sinfo_contains_frames_kind(sof,fibre_raw_set,RAW_FIBRE_NS);
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695   nf = cpl_frameset_get_size(fibre_raw_set);
-<a name="l00696"></a>00696   <span class="keywordflow">if</span>(nf < 1) {
-<a name="l00697"></a>00697     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No input frames in data set"</span>);
-<a name="l00698"></a>00698     sinfo_free_frameset(&sof);
-<a name="l00699"></a>00699     sinfo_free_frameset(&fibre_raw_set);
-<a name="l00700"></a>00700     <span class="keywordflow">return</span> -1;
-<a name="l00701"></a>00701   }
-<a name="l00702"></a>00702   frame = cpl_frameset_get_frame(fibre_raw_set,0);
-<a name="l00703"></a>00703   file_name=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file_name, 0)) == NULL) {
-<a name="l00707"></a>00707     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"getting header from  ima frame %s"</span>,file_name);
-<a name="l00708"></a>00708     <span class="keywordflow">return</span> -1 ;
-<a name="l00709"></a>00709   }
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712   <span class="keywordflow">if</span>( nf > ng) {
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714     sinfo_msg(<span class="stringliteral">"Total raw frames nf=%d > max frm per group ng=%d"</span>,nf,ng);
-<a name="l00715"></a>00715     ns = (nf+1)/ng;
-<a name="l00716"></a>00716     nr = nf-ns*ng;
-<a name="l00717"></a>00717     imset_tot=cpl_imagelist_new();
-<a name="l00718"></a>00718     avg_img_list=cpl_malloc((ns+1) * <span class="keyword">sizeof</span>(cpl_image *));
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     <span class="keywordflow">for</span> (i=0;i<ns;i++) {
-<a name="l00722"></a>00722       sinfo_msg(<span class="stringliteral">"iteration i=%d\n"</span>,i);
-<a name="l00723"></a>00723       imset_tmp=cpl_imagelist_new();
-<a name="l00724"></a>00724       img_list=cpl_malloc(ng * <span class="keyword">sizeof</span>(cpl_image *));
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726 
-<a name="l00727"></a>00727       <span class="keywordflow">for</span> (j=0;j<ng;j++) {
-<a name="l00728"></a>00728     k=i*ng+j;
-<a name="l00729"></a>00729         frame = cpl_frameset_get_frame(fibre_raw_set,k);
-<a name="l00730"></a>00730         file_name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame);
-<a name="l00731"></a>00731         img_tmp=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);
-<a name="l00732"></a>00732         img_dup=cpl_image_duplicate(img_tmp); 
-<a name="l00733"></a>00733         cpl_imagelist_set(imset_tmp,img_dup,j);
-<a name="l00734"></a>00734         cpl_image_delete(img_tmp);
-<a name="l00735"></a>00735       }
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737          
-<a name="l00738"></a>00738       nt=cpl_imagelist_get_size(imset_tmp);
-<a name="l00739"></a>00739       lo_cut=(floor)(lo_rej*nt+0.5);
-<a name="l00740"></a>00740       hi_cut=(floor)(hi_rej*nt+0.5);
-<a name="l00741"></a>00741       avg_img_list[i]=cpl_imagelist_collapse_minmax_create(imset_tmp,
-<a name="l00742"></a>00742                                                            lo_cut,hi_cut);
-<a name="l00743"></a>00743       cpl_imagelist_set(imset_tot,avg_img_list[i],i);
-<a name="l00744"></a>00744       cpl_imagelist_delete(imset_tmp);
-<a name="l00745"></a>00745       cpl_free(img_list);
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747     }
-<a name="l00748"></a>00748  
-<a name="l00749"></a>00749     <span class="keywordflow">if</span>(ns*ng<nf) {
-<a name="l00750"></a>00750       imset_tmp=cpl_imagelist_new();
-<a name="l00751"></a>00751       img_list=cpl_malloc((nf-ns*ng) * <span class="keyword">sizeof</span>(cpl_image *));
-<a name="l00752"></a>00752       <span class="keywordflow">for</span>(i=0;i<nr;i++) {
-<a name="l00753"></a>00753     k=i+ns*ng;
-<a name="l00754"></a>00754         frame = cpl_frameset_get_frame(fibre_raw_set,k);
-<a name="l00755"></a>00755         file_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757         img_list[i]=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);
-<a name="l00758"></a>00758         cpl_imagelist_set(imset_tmp,img_list[i],i);
-<a name="l00759"></a>00759       }
-<a name="l00760"></a>00760       nt=cpl_imagelist_get_size(imset_tmp);
-<a name="l00761"></a>00761       lo_cut=(floor)(lo_rej*nt+0.5);
-<a name="l00762"></a>00762       hi_cut=(floor)(hi_rej*nt+0.5);
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764       avg_img_list[ns]=cpl_imagelist_collapse_minmax_create(imset_tmp,
-<a name="l00765"></a>00765                                                             lo_cut,hi_cut);
-<a name="l00766"></a>00766       cpl_imagelist_set(imset_tot,avg_img_list[ns],ns);
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768       cpl_free(img);
-<a name="l00769"></a>00769       cpl_imagelist_delete(imset_tmp);
-<a name="l00770"></a>00770       cpl_free(img_list);
-<a name="l00771"></a>00771     }
-<a name="l00772"></a>00772  
-<a name="l00773"></a>00773   } <span class="keywordflow">else</span> {
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775     sinfo_msg(<span class="stringliteral">"Total raw frames nf=%d < max frm per group ng=%d"</span>,nf,ng);
-<a name="l00776"></a>00776     imset_tot=cpl_imagelist_new();
-<a name="l00777"></a>00777     img_list=cpl_malloc(nf * <span class="keyword">sizeof</span>(cpl_image *));
-<a name="l00778"></a>00778     <span class="keywordflow">for</span> (i=0;i<nf;i++) {
-<a name="l00779"></a>00779       frame = cpl_frameset_get_frame(fibre_raw_set,i);
-<a name="l00780"></a>00780       file_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);
-<a name="l00781"></a>00781       img_list[i]=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);
-<a name="l00782"></a>00782       cpl_imagelist_set(imset_tot,img_list[i],i);
-<a name="l00783"></a>00783     }
-<a name="l00784"></a>00784     cpl_free(img_list);
-<a name="l00785"></a>00785   }
-<a name="l00786"></a>00786   cpl_free(avg_img_list);
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788   cpl_frameset_delete(fibre_raw_set);
-<a name="l00789"></a>00789   nt=cpl_imagelist_get_size(imset_tot);
-<a name="l00790"></a>00790   lo_cut=(floor)(lo_rej*nt+0.5);
-<a name="l00791"></a>00791   hi_cut=(floor)(hi_rej*nt+0.5);
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793   <span class="keywordflow">if</span>( (img = cpl_imagelist_collapse_minmax_create(imset_tot,
-<a name="l00794"></a>00794                                                   lo_cut,hi_cut)) == NULL) {
-<a name="l00795"></a>00795     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error code"</span>);
-<a name="l00796"></a>00796     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00797"></a>00797     cpl_imagelist_delete(imset_tot);
-<a name="l00798"></a>00798     cpl_frameset_delete(sof);
-<a name="l00799"></a>00799     cpl_propertylist_delete(plist) ;
-<a name="l00800"></a>00800     <span class="keywordflow">return</span> -1;
-<a name="l00801"></a>00801   }
-<a name="l00802"></a>00802 
-<a name="l00803"></a>00803   <span class="keywordflow">if</span> (cpl_image_save(img,name_o, CPL_BPP_IEEE_FLOAT,
-<a name="l00804"></a>00804              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00805"></a>00805     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot save the product %s"</span>,name_o);
-<a name="l00806"></a>00806     cpl_imagelist_delete(imset_tot);
-<a name="l00807"></a>00807     cpl_frameset_delete(sof);
-<a name="l00808"></a>00808     cpl_propertylist_delete(plist) ;
-<a name="l00809"></a>00809     <span class="keywordflow">return</span> -1 ;
-<a name="l00810"></a>00810   }
-<a name="l00811"></a>00811   cpl_imagelist_delete(imset_tot);
-<a name="l00812"></a>00812   cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);
-<a name="l00813"></a>00813          
-<a name="l00814"></a>00814   <span class="comment">/* Create product frame */</span>
-<a name="l00815"></a>00815   pframe = cpl_frame_new();
-<a name="l00816"></a>00816   cpl_frame_set_filename(pframe, name_o) ;
-<a name="l00817"></a>00817   cpl_frame_set_tag(pframe, <span class="stringliteral">"FIBRE_NS"</span>) ;
-<a name="l00818"></a>00818   cpl_frame_set_type(pframe, CPL_FRAME_TYPE_IMAGE) ;
-<a name="l00819"></a>00819   cpl_frame_set_group(pframe, CPL_FRAME_GROUP_RAW) ;
-<a name="l00820"></a>00820   cpl_frame_set_level(pframe, CPL_FRAME_LEVEL_FINAL) ;
-<a name="l00821"></a>00821   <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00822"></a>00822     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00823"></a>00823     cpl_propertylist_delete(plist) ;
-<a name="l00824"></a>00824     cpl_frame_delete(pframe) ;
-<a name="l00825"></a>00825     cpl_image_delete(img) ;
-<a name="l00826"></a>00826     <span class="keywordflow">return</span> -1 ;
-<a name="l00827"></a>00827   }
-<a name="l00828"></a>00828     
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830   <span class="comment">/* Save the file */</span>
-<a name="l00831"></a>00831   <span class="keywordflow">if</span> (cpl_image_save(img, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00832"></a>00832              CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
-<a name="l00833"></a>00833     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Could not save product"</span>);
-<a name="l00834"></a>00834     cpl_propertylist_delete(plist) ;
-<a name="l00835"></a>00835     cpl_frame_delete(pframe) ;
-<a name="l00836"></a>00836     cpl_image_delete(img) ;
-<a name="l00837"></a>00837     <span class="keywordflow">return</span> -1 ;
-<a name="l00838"></a>00838   }
-<a name="l00839"></a>00839   cpl_propertylist_delete(plist) ;
-<a name="l00840"></a>00840   cpl_image_delete(img) ;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842   <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00843"></a>00843   cpl_frameset_insert(<span class="keyword">set</span>, pframe) ;
-<a name="l00844"></a>00844   cpl_frameset_delete(sof);
-<a name="l00845"></a>00845 
-<a name="l00846"></a>00846   <span class="keywordflow">return</span> 0;
-<a name="l00847"></a>00847 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_distortion.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_distortion.c,v 1.43 2013/09/17 08:13:17 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/09/17 08:13:17 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.43 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Distortions Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/* cpl */</span>       </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span>       </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_lamp_flats_config.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_bp_config.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_bp_dist_config.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_north_south_test_config.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_distortion_config.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_new_lamp_flats.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_bp_norm.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_new_find_distortions.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_new_nst.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">//Only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor">#include <sinfo_dfs.h></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_pre_process(cpl_frameset* <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keyword">const</span> <span class="keywordtype">float</span> lo_rej, <span class="keyword">const</span> <span class="keywordtype">float</span> hi_rej, <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description1[] =</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"This recipe determines the optical distortions and the slitlets distances.\n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"Necessary input are:\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"Several (usually 75) raw frames classified as FIBRE_NS\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"Standard (an 'ON' and an 'OFF') flat frames having classified as FLAT_NS\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"Standard (an 'ON' and an 'OFF') arc lamp frames having classified as WAVE_NS\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"A corresponding (band) reference arc line list classified as REF_LINE_ARC\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"A reference table with data reduction parameters classified as DRS_SETUP_WAVE.\n"</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description2[] =</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"Default output are (with their PRO.CATG)\n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"A master flat: MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"A Bad pixel map: BP_MAP_DI\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"A fake-off fibre stacked frame: FIBRE_NS_STACKED_OFF\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"A fake-on fibre  stacked frame: FIBRE_NS_STACKED_ON\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"A fake on-off fibre  stacked frame: FIBRE_NS_STACKED\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"A table with optical distortion coefficients: DISTORTION\n"</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description3[] =</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"A distortion corrected frame: FIBRE_NS_STACKED_DIST\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"A temporary frame: MASTER_SLIT\n"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="stringliteral">"A table with the slitlets distances: SLITLETS_DISTANCE\n"</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="stringliteral">"Information on relevant parameters can be found with:\n"</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="stringliteral">"esorex --params sinfo_rec_distortion\n"</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="stringliteral">"esorex --help sinfo_rec_distortion\n"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_distortion_description[1300];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="code" href="group__sinfo__rec__distortion.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  149</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   strcpy(sinfo_rec_distortion_description,sinfo_rec_distortion_description1);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   strcat(sinfo_rec_distortion_description,sinfo_rec_distortion_description2);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   strcat(sinfo_rec_distortion_description,sinfo_rec_distortion_description3);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>  </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           <span class="stringliteral">"sinfo_rec_distortion"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"Finds optical distortions and slitlets distances"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           sinfo_rec_distortion_description,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           sinfo_rec_distortion_create,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           sinfo_rec_distortion_exec,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           sinfo_rec_distortion_destroy);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sinfo_lamp_flats_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   sinfo_bp_config_add(recipe->parameters);  </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <a class="code" href="group__sinfo__bad__pix__search.html#ga4f320ea65a00f127ece79fd2c6416a15" title="Adds parameters for the spectrum extraction.">sinfo_bp_dist_config_add</a>(recipe->parameters); </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   sinfo_distortion_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   sinfo_north_south_test_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     status=sinfo_rec_distortion(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     } </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordflow">return</span> status;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_distortion_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> sinfo_rec_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>  </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   cpl_parameter *p=NULL;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   cpl_image* ima=NULL;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   cpl_frameset* raw_set=NULL;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   cpl_frameset* set_off=NULL;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   cpl_frameset* set_on=NULL;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   cpl_frameset* set_fibre_ns=NULL;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   cpl_frameset* set_flat_ns=NULL;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   cpl_frameset* set_wave_ns=NULL;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   fake* fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   cknull_nomsg(set_fibre_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_FIBRE_NS));</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   cknull_nomsg(set_flat_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_FLAT_NS));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   cknull_nomsg(set_wave_ns=sinfo_frameset_extract(<span class="keyword">set</span>,RAW_WAVE_NS));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   check_nomsg(raw_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   sinfo_msg(<span class="stringliteral">"  DETERMINE MASTER_LAMP_NS "</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   sinfo_msg(<span class="stringliteral">"REDUCE LAMPFLAT"</span>) ;    </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   ck0(sinfo_new_lamp_flats(cpl_func,config, <span class="keyword">set</span>,set_flat_ns ),</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       <span class="stringliteral">"reducing lampflats"</span>) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>   sinfo_msg(<span class="stringliteral">"SUCCES: DETERMINATION MASTER_LAMP_NS"</span>) ; </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   sinfo_msg(<span class="stringliteral">"  DETERMINE BP_MAP_DI        "</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>   sinfo_msg(<span class="stringliteral">"-----------------------------"</span>);</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>        </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   ck0(sinfo_new_bp_search_normal(cpl_func,config,<span class="keyword">set</span>,set_flat_ns,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                  PRO_BP_MAP_DI),</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       <span class="stringliteral">"determining %s"</span>,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">        pre iteration: get a collassed frame </span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    check_nomsg(set_off=cpl_frameset_duplicate(raw_set));</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>    ck0_nomsg(new_pre_process(set_off, 0.0, 0.2,<span class="stringliteral">"out_fibre_off.fits"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>    <span class="comment">/* add the off artificial frame to the frameset */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(set_off,RAW_FIBRE_NS)) {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>        frame = cpl_frameset_find(set_off,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>        cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>        cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame));</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>        <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>    }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>  </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>  </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">        1st iteration: get off frame </span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>    sinfo_msg(<span class="stringliteral">"STACK FIBRE,NS TO GET FAKE OFF\n"</span>) ; </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>    strcpy(fk->pro_class,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>    fk->frm_switch=1;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>    fk->mask_index=0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>    fk->ind_index=0;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>    fk->flat_index=0;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>    fk->wfix_index=0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>    fk->low_rej=0.0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>    fk->hig_rej=0.2;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>  </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>                                         PRO_FIBRE_NS_STACKED_OFF,0,fk),</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>        <span class="stringliteral">"Error stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_OFF);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>    strcpy(file_name,<span class="stringliteral">"out_fibre_off.fits"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>    sinfo_free_frameset(&set_off);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>    cknull(plist = cpl_propertylist_load(file_name, 0),</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>            <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>      <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_OFF);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_OFF);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>      }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>    sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>    sinfo_msg(<span class="stringliteral">"SUCCESS: STACKED FIBRE,NS TO GET FAKE OFF\n"</span>) ;      </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> <span class="comment">        2nd iteration: get on frame </span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>    check_nomsg(set_on=cpl_frameset_duplicate(raw_set));</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>    ck0_nomsg(new_pre_process(set_on, 0.0, 0.0,<span class="stringliteral">"out_fibre_on.fits"</span>));</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(set_on,RAW_FIBRE_NS)) {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>      frame = cpl_frameset_find(set_on,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>      cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>      cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame));</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>    }</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>    sinfo_msg(<span class="stringliteral">"STACK FIBRE,NS TO GET FAKE ON\n"</span>) ; </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>    strcpy(fk->pro_class,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>    fk->frm_switch=1;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>    fk->mask_index=0;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>    fk->ind_index=0;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>    fk->flat_index=0;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>    fk->wfix_index=0;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>    fk->low_rej=0.0;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>    fk->hig_rej=0.0;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                                         PRO_FIBRE_NS_STACKED_ON,0,fk),</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                         <span class="stringliteral">"error stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_ON);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_FIBRE_NS_STACKED_ON) ; </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>    <span class="comment">/* cpl_frameset_erase(set,RAW_FIBRE_NS); */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>    sinfo_free_frameset(&set_on);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>    <span class="comment">/* here we have a problem with pipefile of following step product */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">                3rd iteration combines on and off fake frames</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>    sinfo_msg(<span class="stringliteral">"COMBINES FAKE ON AND OFF\n"</span>) ; </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>    strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>    fk->frm_switch=1;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>    fk->mask_index=0;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>    fk->ind_index=0;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>    fk->flat_index=1;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>    fk->wfix_index=0;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>    fk->low_rej=0.0;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>    fk->hig_rej=0.0;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                         PRO_FIBRE_NS_STACKED,0,fk),</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                           <span class="stringliteral">"Stacking frame %s"</span>,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>    sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_FIBRE_NS_STACKED) ; </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>    <span class="comment">/* cpl_frameset_erase(set,RAW_FIBRE_NS); */</span></div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">                STACK WAVECAL</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>  </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>    sinfo_msg(<span class="stringliteral">"STACK on WAVE frame\n"</span>) ;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>    strcpy(fk->pro_class,RAW_WAVE_NS);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>    fk->frm_switch=1;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>    fk->mask_index=0;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>    fk->ind_index=0;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>    fk->flat_index=1;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>    fk->wfix_index=0;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>    fk->low_rej=0.1;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>    fk->hig_rej=0.1;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>    </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>    sinfo_msg(<span class="stringliteral">"STACK on WAVE frame\n"</span>) ; </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_wave_ns,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                                         PRO_WAVE_LAMP_STACKED,0,fk),</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                           <span class="stringliteral">"spacking frame %s"</span>,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>    sinfo_msg(<span class="stringliteral">"SUCCESS DETERMINATION %s"</span>,PRO_WAVE_LAMP_STACKED) ; </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>    <span class="keywordflow">if</span>(pdensity < 2) {</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_OFF);</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_ON);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>    }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment">                DISTORTIONS </span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>    sinfo_msg(<span class="stringliteral">"COMPUTE DISTORTIONS\n"</span>) ; </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>    ck0(sinfo_new_find_distortions(cpl_func,config, <span class="keyword">set</span>,set_fibre_ns),</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>        <span class="stringliteral">"computing distortions"</span>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED)) {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>      frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>      strcpy(file_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>    }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>    check(plist = cpl_propertylist_load(file_name, 0),</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>      <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>      <span class="keywordflow">if</span> (cpl_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>      }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>    <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">   if (cpl_image_save(ima, file_name, CPL_BPP_IEEE_FLOAT, </span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> <span class="comment">                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="comment">       sinfo_msg_error("Cannot save the product %s",file_name);</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> <span class="comment">       goto cleanup;</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="comment"></span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> <span class="comment">   }</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>      </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>    sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>    sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS\n"</span>) ; </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">       4th iteration: distort fake frame</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>    </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>    sinfo_msg(<span class="stringliteral">"DISTORT FAKE FRAME\n"</span>) ; </div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>    strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>    fk->frm_switch=1;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>    fk->mask_index=1;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>    fk->ind_index=1;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>    fk->flat_index=0;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>    fk->wfix_index=1;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>    fk->low_rej=0.0;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>    fk->hig_rej=0.0;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, set_fibre_ns,</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>                                         PRO_FIBRE_NS_STACKED_DIST,0,fk),</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>                         <span class="stringliteral">"Stacking frame %s"</span>,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>    sinfo_msg(<span class="stringliteral">"SUCCESS: DISTORTED FAKE FRAME\n"</span>) ;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>  </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>  </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST)) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>      frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>      strcpy(file_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>      <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>    }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>    check_nomsg(ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>    check(plist = cpl_propertylist_load(file_name, 0),</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>      <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>      <span class="keywordflow">if</span> (cpl_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>        cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>        cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>      }</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>    <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="comment">      if (cpl_image_save(ima, file_name, CPL_BPP_IEEE_FLOAT, </span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> <span class="comment">                         plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> <span class="comment">       sinfo_msg_error("Cannot save the product %s",file_name);</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">       goto cleanup;</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>    sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>    <span class="comment">/* </span></div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> <span class="comment">                               NST </span></div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>  </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>    <span class="keywordflow">if</span>(pdensity < 2) {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>    }</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>    sinfo_msg(<span class="stringliteral">"RUN NORD SOUTH TEST\n"</span>) ; </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>    ck0(sinfo_new_nst(cpl_func,config, <span class="keyword">set</span>,set_fibre_ns),</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>        <span class="stringliteral">"Running north south test"</span>);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> </div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>    <span class="keywordflow">if</span>(pdensity < 2) {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>      cpl_frameset_erase(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>    }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>    sinfo_msg(<span class="stringliteral">"SUCCESS: RUNNED NORD SUD TEST\n"</span>) ; </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>    sinfo_msg(<span class="stringliteral">"SUCCESS: RECIPE\n"</span>) ; </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>    sinfo_free_frameset(&raw_set);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>    sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>  cleanup:</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>    sinfo_free_frameset(&set_on);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>    sinfo_free_frameset(&set_fibre_ns);</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>    sinfo_free_frameset(&set_wave_ns);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>    sinfo_free_frameset(&set_flat_ns);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>    sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>    sinfo_free_frameset(&set_off);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>    sinfo_free_frameset(&raw_set);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>    sinfo_free_frameset(&raw_set);</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>    sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   }</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span> </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> new_pre_process(cpl_frameset* <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span> <span class="keyword">const</span> <span class="keywordtype">float</span> lo_rej, <span class="keyword">const</span> <span class="keywordtype">float</span> hi_rej, <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o)</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> {</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   <span class="keywordtype">int</span> nf=0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   <span class="keywordtype">int</span> ng=10;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>   <span class="keywordtype">int</span> ns=0;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   <span class="keywordtype">int</span> nr=0;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   <span class="keywordtype">int</span> nt=0;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="keywordtype">int</span> lo_cut=0;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   <span class="keywordtype">int</span> hi_cut=0;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   cpl_frame* pframe=NULL;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   cpl_frameset* sof=NULL;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   cpl_frameset* fibre_raw_set=NULL;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   <span class="keywordtype">char</span>* file_name=NULL;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   cpl_imagelist* imset_tmp=NULL;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   cpl_imagelist* imset_tot=NULL;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   cpl_image** avg_img_list=NULL;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   cpl_image* img_tmp=NULL;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   cpl_image* img_dup=NULL;</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   cpl_image** img_list=NULL;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   sof = cpl_frameset_duplicate(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   fibre_raw_set = cpl_frameset_new();</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   sinfo_contains_frames_kind(sof,fibre_raw_set,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   nf = cpl_frameset_get_size(fibre_raw_set);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   <span class="keywordflow">if</span>(nf < 1) {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"No input frames in data set"</span>);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     sinfo_free_frameset(&sof);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     sinfo_free_frameset(&fibre_raw_set);</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   }</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   frame = cpl_frameset_get_frame(fibre_raw_set,0);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   file_name=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordflow">if</span> ((plist = cpl_propertylist_load(file_name, 0)) == NULL) {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"getting header from  ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   }</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   <span class="keywordflow">if</span>( nf > ng) {</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     sinfo_msg(<span class="stringliteral">"Total raw frames nf=%d > max frm per group ng=%d"</span>,nf,ng);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     ns = (nf+1)/ng;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     nr = nf-ns*ng;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     imset_tot=cpl_imagelist_new();</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     avg_img_list=cpl_malloc((ns+1) * <span class="keyword">sizeof</span>(cpl_image *));</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="keywordflow">for</span> (i=0;i<ns;i++) {</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>       sinfo_msg(<span class="stringliteral">"iteration i=%d\n"</span>,i);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>       imset_tmp=cpl_imagelist_new();</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>       img_list=cpl_malloc(ng * <span class="keyword">sizeof</span>(cpl_image *));</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>       <span class="keywordflow">for</span> (j=0;j<ng;j++) {</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     k=i*ng+j;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         frame = cpl_frameset_get_frame(fibre_raw_set,k);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>         file_name=(<span class="keywordtype">char</span>*)cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         img_tmp=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         img_dup=cpl_image_duplicate(img_tmp); </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         cpl_imagelist_set(imset_tmp,img_dup,j);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         cpl_image_delete(img_tmp);</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>       }</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>          </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>       nt=cpl_imagelist_get_size(imset_tmp);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>       lo_cut=(floor)(lo_rej*nt+0.5);</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>       hi_cut=(floor)(hi_rej*nt+0.5);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>       avg_img_list[i]=cpl_imagelist_collapse_minmax_create(imset_tmp,</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                                                            lo_cut,hi_cut);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>       cpl_imagelist_set(imset_tot,avg_img_list[i],i);</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>       cpl_imagelist_delete(imset_tmp);</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>       cpl_free(img_list);</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>  </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordflow">if</span>(ns*ng<nf) {</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>       imset_tmp=cpl_imagelist_new();</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>       img_list=cpl_malloc((nf-ns*ng) * <span class="keyword">sizeof</span>(cpl_image *));</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>       <span class="keywordflow">for</span>(i=0;i<nr;i++) {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     k=i+ns*ng;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         frame = cpl_frameset_get_frame(fibre_raw_set,k);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>         file_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>         img_list[i]=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>         cpl_imagelist_set(imset_tmp,img_list[i],i);</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>       }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>       nt=cpl_imagelist_get_size(imset_tmp);</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>       lo_cut=(floor)(lo_rej*nt+0.5);</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>       hi_cut=(floor)(hi_rej*nt+0.5);</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>       avg_img_list[ns]=cpl_imagelist_collapse_minmax_create(imset_tmp,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                                                             lo_cut,hi_cut);</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>       cpl_imagelist_set(imset_tot,avg_img_list[ns],ns);</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>       cpl_free(img);</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>       cpl_imagelist_delete(imset_tmp);</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>       cpl_free(img_list);</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     }</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>  </div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     sinfo_msg(<span class="stringliteral">"Total raw frames nf=%d < max frm per group ng=%d"</span>,nf,ng);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     imset_tot=cpl_imagelist_new();</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     img_list=cpl_malloc(nf * <span class="keyword">sizeof</span>(cpl_image *));</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     <span class="keywordflow">for</span> (i=0;i<nf;i++) {</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>       frame = cpl_frameset_get_frame(fibre_raw_set,i);</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>       file_name  = (<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>       img_list[i]=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>       cpl_imagelist_set(imset_tot,img_list[i],i);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     cpl_free(img_list);</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>   }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   cpl_free(avg_img_list);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   cpl_frameset_delete(fibre_raw_set);</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   nt=cpl_imagelist_get_size(imset_tot);</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   lo_cut=(floor)(lo_rej*nt+0.5);</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   hi_cut=(floor)(hi_rej*nt+0.5);</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordflow">if</span>( (img = cpl_imagelist_collapse_minmax_create(imset_tot,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                                                   lo_cut,hi_cut)) == NULL) {</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error code"</span>);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     cpl_imagelist_delete(imset_tot);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     cpl_frameset_delete(sof);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span> </div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="keywordflow">if</span> (cpl_image_save(img,name_o, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>              plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot save the product %s"</span>,name_o);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     cpl_imagelist_delete(imset_tot);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     cpl_frameset_delete(sof);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   cpl_imagelist_delete(imset_tot);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   cpl_frameset_erase(<span class="keyword">set</span>,RAW_FIBRE_NS);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>          </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   pframe = cpl_frame_new();</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   cpl_frame_set_filename(pframe, name_o) ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   cpl_frame_set_tag(pframe, <span class="stringliteral">"FIBRE_NS"</span>) ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   cpl_frame_set_type(pframe, CPL_FRAME_TYPE_IMAGE) ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   cpl_frame_set_group(pframe, CPL_FRAME_GROUP_RAW) ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   cpl_frame_set_level(pframe, CPL_FRAME_LEVEL_FINAL) ;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     cpl_frame_delete(pframe) ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     cpl_image_delete(img) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   }</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="keywordflow">if</span> (cpl_image_save(img, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>              CPL_IO_DEFAULT) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     cpl_frame_delete(pframe) ;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     cpl_image_delete(img) ;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>   cpl_image_delete(img) ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>   <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   cpl_frameset_insert(<span class="keyword">set</span>, pframe) ;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>   cpl_frameset_delete(sof);</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__jitter_8c_source.html b/html/sinfo__rec__jitter_8c_source.html
index 82cfbb4..98a9509 100644
--- a/html/sinfo__rec__jitter_8c_source.html
+++ b/html/sinfo__rec__jitter_8c_source.html
@@ -2,365 +2,396 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_jitter.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_jitter.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_jitter.c,v 1.33 2009/10/20 14:32:56 kmirny Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2009/10/20 14:32:56 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.33 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/* std */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <strings.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <math.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* cpl */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* irplib */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/* sinfoni */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_psf_config.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_standard_star_config.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_new_stdstar.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_new_psf.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00077"></a>00077 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment">                            Functions prototypes</span>
-<a name="l00081"></a>00081 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_create(cpl_plugin *) ;
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_exec(cpl_plugin *) ;
-<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_destroy(cpl_plugin *) ;
-<a name="l00086"></a>00086 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00087"></a>00087 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00088"></a>00088 <span class="comment">                            Static variables</span>
-<a name="l00089"></a>00089 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description1[] =
-<a name="l00092"></a>00092 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"The input files are:\n"</span>
-<a name="l00094"></a>00094 <span class="stringliteral">"science object and sky frames with tags OBJECT_NODDING and SKY_NODDING or\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"Telluric standard star frames and sky frames with tags STD and SKY_STD or\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"PSF standard star and sky frames with tags \n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"and Master calibration frames:\n"</span>;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description2[] =
-<a name="l00102"></a>00102 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00107"></a>00107 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description3[] =
-<a name="l00111"></a>00111 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"A reference table with the position of the first "</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description4[] =
-<a name="l00124"></a>00124 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00125"></a>00125 <span class="stringliteral">"esorex --params sinfo_rec_jitter\n"</span>
-<a name="l00126"></a>00126 <span class="stringliteral">"esorex --help sinfo_rec_jitter\n"</span>
-<a name="l00127"></a>00127 <span class="stringliteral">"\n"</span>;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description[1400];
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00132"></a>00132 <span class="comment">                                Functions code</span>
-<a name="l00133"></a>00133 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00140"></a>00140 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="keywordtype">int</span>
-<a name="l00152"></a><a class="code" href="group__sinfo__rec__jitter.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00152</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00153"></a>00153 {
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00156"></a>00156   cpl_plugin *plugin = &recipe->interface;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   strcpy(sinfo_rec_jitter_description,sinfo_rec_jitter_description1);
-<a name="l00159"></a>00159   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description2);
-<a name="l00160"></a>00160   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description3);
-<a name="l00161"></a>00161   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description4);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163   cpl_plugin_init(plugin,
-<a name="l00164"></a>00164           CPL_PLUGIN_API,
-<a name="l00165"></a>00165           SINFONI_BINARY_VERSION,
-<a name="l00166"></a>00166           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00167"></a>00167           <span class="stringliteral">"sinfo_rec_jitter"</span>,
-<a name="l00168"></a>00168           <span class="stringliteral">"Object or STD star or PSF star data reduction"</span>,
-<a name="l00169"></a>00169            sinfo_rec_jitter_description,
-<a name="l00170"></a>00170           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00171"></a>00171           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,
-<a name="l00172"></a>00172           sinfo_get_license(),
-<a name="l00173"></a>00173           sinfo_rec_jitter_create,
-<a name="l00174"></a>00174           sinfo_rec_jitter_exec,
-<a name="l00175"></a>00175           sinfo_rec_jitter_destroy);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   cpl_pluginlist_append(list, plugin);
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179   <span class="keywordflow">return</span> 0;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 }
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_create(cpl_plugin *plugin)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194     cpl_recipe      * recipe ;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00198"></a>00198     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00199"></a>00199         recipe = (cpl_recipe *)plugin ;
-<a name="l00200"></a>00200     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00201"></a>00201   cpl_error_reset();
-<a name="l00202"></a>00202   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00205"></a>00205     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208   <span class="comment">/*</span>
-<a name="l00209"></a>00209 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00210"></a>00210 <span class="comment">   */</span>
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   sinfo_general_config_add(recipe->parameters);
-<a name="l00213"></a>00213   sinfo_product_config_add(recipe->parameters);
-<a name="l00214"></a>00214   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00215"></a>00215   sinfo_objnod_config_add(recipe->parameters);
-<a name="l00216"></a>00216   sinfo_skycor_config_add(recipe->parameters);
-<a name="l00217"></a>00217   sinfo_standard_star_config_add(recipe->parameters);
-<a name="l00218"></a>00218   sinfo_psf_config_add(recipe->parameters);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="keywordflow">return</span> 0;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 }
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00232"></a>00232 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00233"></a>00233 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_exec(cpl_plugin *plugin)
-<a name="l00234"></a>00234 {
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240   <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00241"></a>00241   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00242"></a>00242       recipe = (cpl_recipe *)plugin ;
-<a name="l00243"></a>00243   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l00246"></a>00246         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l00247"></a>00247 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l00248"></a>00248         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00249"></a>00249     }
-<a name="l00250"></a>00250   <span class="keywordflow">return</span> sinfo_rec_jitter(recipe->parameters, recipe->frames);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 }
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00260"></a>00260 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00261"></a>00261 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_destroy(cpl_plugin *plugin)
-<a name="l00262"></a>00262 {
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264    cpl_recipe  *   recipe ;
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00267"></a>00267     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00268"></a>00268         recipe = (cpl_recipe *)plugin ;
-<a name="l00269"></a>00269     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273   <span class="keywordflow">return</span> 0;
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 }
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00284"></a>00284 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="comment">/*</span>
-<a name="l00287"></a>00287 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00288"></a>00288 <span class="comment"> */</span>
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00291"></a>00291 {
-<a name="l00292"></a>00292   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;
-<a name="l00293"></a>00293   cpl_parameter* p=NULL;
-<a name="l00294"></a>00294   <span class="keywordtype">int</span> psf_sw=0;
-<a name="l00295"></a>00295   <span class="keywordtype">int</span> std_sw=0;
-<a name="l00296"></a>00296   cpl_frameset* ref_set=NULL;
-<a name="l00297"></a>00297   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00300"></a>00300         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00303"></a>00303     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00304"></a>00304     <span class="keywordflow">return</span> -1;
-<a name="l00305"></a>00305   }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00308"></a>00308   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00309"></a>00309   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00310"></a>00310      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00311"></a>00311   }
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00314"></a>00314   <span class="comment">/* ===============================================================</span>
-<a name="l00315"></a>00315 <span class="comment">     Defines several framesets each with a pair obj-sky,</span>
-<a name="l00316"></a>00316 <span class="comment">     stack each pair, put the results in set</span>
-<a name="l00317"></a>00317 <span class="comment">     =============================================================== */</span>
-<a name="l00318"></a>00318   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),
-<a name="l00319"></a>00319       <span class="stringliteral">"Cannot stack RAW frames"</span>) ;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321   <span class="comment">/* ===============================================================</span>
-<a name="l00322"></a>00322 <span class="comment">     SCI OBJNOD</span>
-<a name="l00323"></a>00323 <span class="comment">     =============================================================== */</span>
-<a name="l00324"></a>00324      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00325"></a>00325      sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);
-<a name="l00326"></a>00326      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00327"></a>00327      ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),
-<a name="l00328"></a>00328      <span class="stringliteral">"COADDING CUBES"</span>) ;
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00331"></a>00331      sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);
-<a name="l00332"></a>00332      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334   <span class="comment">/* ===============================================================</span>
-<a name="l00335"></a>00335 <span class="comment">     PSF</span>
-<a name="l00336"></a>00336 <span class="comment">     =============================================================== */</span>
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338   <span class="keywordflow">if</span>((strcmp(pro_ctg_cube,PRO_COADD_PSF) == 0) ||
-<a name="l00339"></a>00339      (strcmp(pro_ctg_cube,PRO_COADD_STD) == 0) ||
-<a name="l00340"></a>00340      (strcmp(pro_ctg_cube,PRO_COADD_PUPIL) == 0) ) {
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.psf.switch"</span>);
-<a name="l00344"></a>00344     psf_sw = cpl_parameter_get_bool(p);
-<a name="l00345"></a>00345     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,psf_sw);
-<a name="l00346"></a>00346     <span class="keywordflow">if</span>(psf_sw) {
-<a name="l00347"></a>00347       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00348"></a>00348       sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);
-<a name="l00349"></a>00349       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00350"></a>00350       <span class="keywordflow">if</span> ( -1 == sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>,<span class="keyword">set</span>) ) {
-<a name="l00351"></a>00351     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"REDUCING PSF STD STAR FRAMES"</span>) ;
-<a name="l00352"></a>00352         cpl_error_reset();
-<a name="l00353"></a>00353       } <span class="keywordflow">else</span> {
-<a name="l00354"></a>00354     sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ;
-<a name="l00355"></a>00355       }
-<a name="l00356"></a>00356     }
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.std_star.switch"</span>);
-<a name="l00359"></a>00359     std_sw = cpl_parameter_get_bool(p);
-<a name="l00360"></a>00360     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,std_sw);
-<a name="l00361"></a>00361     <span class="keywordflow">if</span>(std_sw) {
-<a name="l00362"></a>00362       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00363"></a>00363       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);
-<a name="l00364"></a>00364       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00365"></a>00365       <span class="keywordflow">if</span> ( -1 == sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>,<span class="keyword">set</span> ) ) {
-<a name="l00366"></a>00366     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;
-<a name="l00367"></a>00367         cpl_error_reset();
-<a name="l00368"></a>00368       } <span class="keywordflow">else</span> {
-<a name="l00369"></a>00369     sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ;
-<a name="l00370"></a>00370       }
-<a name="l00371"></a>00371     }
-<a name="l00372"></a>00372   }
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374  cleanup:
-<a name="l00375"></a>00375   sinfo_free_frameset(&ref_set);
-<a name="l00376"></a>00376   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00377"></a>00377     sinfo_check_rec_status(0);
-<a name="l00378"></a>00378     <span class="keywordflow">return</span> -1;
-<a name="l00379"></a>00379   } <span class="keywordflow">else</span> {
-<a name="l00380"></a>00380     <span class="keywordflow">return</span> 0;
-<a name="l00381"></a>00381   }
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384 }
-<a name="l00385"></a>00385 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_jitter.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_jitter.c,v 1.35 2013/10/14 14:40:00 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2013/10/14 14:40:00 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.35 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_psf_config.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_standard_star_config.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_new_stdstar.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_new_psf.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description1[] =</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"The input files are:\n"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"science object and sky frames with tags OBJECT_NODDING and SKY_NODDING or\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"Telluric standard star frames and sky frames with tags STD and SKY_STD or\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"PSF standard star and sky frames with tags \n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"and Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description2[] =</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description3[] =</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"A reference table with the position of the first "</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description4[] =</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="stringliteral">"esorex --params sinfo_rec_jitter\n"</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="stringliteral">"esorex --help sinfo_rec_jitter\n"</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_jitter_description[1400];</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="code" href="group__sinfo__rec__jitter.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  152</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   strcpy(sinfo_rec_jitter_description,sinfo_rec_jitter_description1);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description3);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   strcat(sinfo_rec_jitter_description,sinfo_rec_jitter_description4);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           <span class="stringliteral">"sinfo_rec_jitter"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           <span class="stringliteral">"Object or STD star or PSF star data reduction"</span>,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>            sinfo_rec_jitter_description,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>           sinfo_rec_jitter_create,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>           sinfo_rec_jitter_exec,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>           sinfo_rec_jitter_destroy);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   sinfo_objnod_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   sinfo_skycor_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   sinfo_standard_star_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   sinfo_psf_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="keywordflow">return</span> sinfo_rec_jitter(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>    cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordtype">int</span> psf_sw=0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordtype">int</span> std_sw=0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   cpl_frameset* ref_set=NULL;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">     Defines several framesets each with a pair obj-sky,</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">     stack each pair, put the results in set</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       <span class="stringliteral">"Cannot stack RAW frames"</span>) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">     SCI OBJNOD</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>      sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>      ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>      <span class="stringliteral">"COADDING CUBES"</span>) ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>      sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>      sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">     PSF</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   <span class="keywordflow">if</span>((strcmp(pro_ctg_cube,PRO_COADD_PSF) == 0) ||</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>      (strcmp(pro_ctg_cube,PRO_COADD_STD) == 0) ||</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>      (strcmp(pro_ctg_cube,PRO_COADD_PUPIL) == 0) ) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.psf.switch"</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     psf_sw = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,psf_sw);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordflow">if</span>(psf_sw) {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       <span class="keywordflow">if</span> ( -1 == sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>,<span class="keyword">set</span>) ) {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"REDUCING PSF STD STAR FRAMES"</span>) ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         cpl_error_reset();</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     }</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.std_star.switch"</span>);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     std_sw = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,std_sw);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <span class="keywordflow">if</span>(std_sw) {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       <span class="keywordflow">if</span> ( -1 == sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>,<span class="keyword">set</span> ) ) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         cpl_error_reset();</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>       }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     }</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>  cleanup:</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   sinfo_free_frameset(&ref_set);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     sinfo_check_rec_status(0);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__lingain_8c_source.html b/html/sinfo__rec__lingain_8c_source.html
index ce2573b..b4b7e68 100644
--- a/html/sinfo__rec__lingain_8c_source.html
+++ b/html/sinfo__rec__lingain_8c_source.html
@@ -2,182 +2,213 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_lingain.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_lingain.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_lingain.c,v 1.22 2012/03/03 10:38:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the DETMON Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Includes and Defines</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_irplib_cpl_wrp.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* Define here the DO.CATG keywords */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#define SINFO_LINGAIN_ON_RAW                    "LINEARITY_LAMP_ON"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LINGAIN_OFF_RAW           "LINEARITY_LAMP_OFF"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#define RECIPE_NAME "sinfo_rec_lingain"</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="comment">/* Copy here instrument specific keywords which need to be in the PAF file */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define INSTREGEXP   "ESO INS SETUP ID"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define PAFREGEXP    "^(" REGEXP "|" INSTREGEXP ")$"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define NIR TRUE</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BPMBIN 1</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_KAPPA 9</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">                 Functions prototypes</span>
-<a name="l00060"></a>00060 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00063"></a>00063 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 cpl_error_code
-<a name="l00070"></a>00070 sinfo_lingain_fill_parlist_default(cpl_parameterlist * parlist);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 CPL_RECIPE_DEFINE(sinfo_rec_lingain, SINFONI_BINARY_VERSION,
-<a name="l00073"></a>00073              <span class="comment">/* Replace DETMON_BINARY_VERSION with</span>
-<a name="l00074"></a>00074 <span class="comment">            corresponding pipeline macro */</span>
-<a name="l00075"></a>00075                      sinfo_lingain_fill_parlist_default(recipe->parameters),
-<a name="l00076"></a>00076              <span class="comment">/* Replace "sinfoni" with PACKAGE_TARNAME</span>
-<a name="l00077"></a>00077 <span class="comment">            when moved into SINFONI */</span>
-<a name="l00078"></a>00078                      <span class="stringliteral">"Lander de Bilbao"</span>, <span class="stringliteral">"lbilbao at eso.org"</span>, <span class="stringliteral">"2008"</span>,
-<a name="l00079"></a>00079                      <span class="stringliteral">"Linearity/Gain recipe for the IR domain"</span>,
-<a name="l00080"></a>00080                      LG_DESCR(RECIPE_NAME, <span class="stringliteral">"SINFONI"</span>,
-<a name="l00081"></a>00081                                                       SINFO_LINGAIN_ON_RAW,
-<a name="l00082"></a>00082                                                       SINFO_LINGAIN_OFF_RAW));
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*</span>
-<a name="l00086"></a>00086 <span class="comment">  @brief    Interpret the command line options and execute the data processing</span>
-<a name="l00087"></a>00087 <span class="comment">  @param    frameset    the frames list</span>
-<a name="l00088"></a>00088 <span class="comment">  @param    parlist     the parameters list</span>
-<a name="l00089"></a>00089 <span class="comment">  @return   0 if everything is ok</span>
-<a name="l00090"></a>00090 <span class="comment"> */</span>
-<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_lingain(cpl_frameset            * frameset,
-<a name="l00094"></a>00094              <span class="keyword">const</span> cpl_parameterlist * parlist)
-<a name="l00095"></a>00095 {
-<a name="l00096"></a>00096   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o=NULL;
-<a name="l00097"></a>00097   cpl_frame* frm=NULL;
-<a name="l00098"></a>00098   cpl_image* ima=NULL;
-<a name="l00099"></a>00099   cpl_error_code error = CPL_ERROR_NONE;
-<a name="l00100"></a>00100   cpl_propertylist* plist=NULL;
-<a name="l00101"></a>00101    cpl_propertylist * lintbl;
-<a name="l00102"></a>00102    cpl_propertylist * gaintbl;
-<a name="l00103"></a>00103    cpl_propertylist * coeffscube;
-<a name="l00104"></a>00104    cpl_propertylist * bpm;
-<a name="l00105"></a>00105    cpl_propertylist * corr;
-<a name="l00106"></a>00106    cpl_propertylist * diff_flat;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109    lintbl =  DETMON_FILL_PROLIST(<span class="stringliteral">"DET_LIN_INFO"</span>, <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00110"></a>00110    gaintbl = DETMON_FILL_PROLIST(<span class="stringliteral">"GAIN_INFO"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00111"></a>00111    coeffscube = DETMON_FILL_PROLIST(<span class="stringliteral">"COEFFS_CUBE"</span>,  <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00112"></a>00112    bpm = DETMON_FILL_PROLIST(<span class="stringliteral">"BP_MAP_NL"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00113"></a>00113    corr = DETMON_FILL_PROLIST(<span class="stringliteral">"AUTOCORR"</span>,     <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00114"></a>00114    diff_flat = DETMON_FILL_PROLIST(<span class="stringliteral">"DIFF_FLAT"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116    error = DETMON_LG(frameset,
-<a name="l00117"></a>00117                                                   parlist,
-<a name="l00118"></a>00118                                                   SINFO_LINGAIN_ON_RAW,
-<a name="l00119"></a>00119                                                   SINFO_LINGAIN_OFF_RAW,
-<a name="l00120"></a>00120                                                   RECIPE_NAME,
-<a name="l00121"></a>00121     <span class="comment">/* Replace this string ("sinfoni") with */</span>    PACKAGE_TARNAME,
-<a name="l00122"></a>00122     <span class="comment">/* PACKAGE_TARNAME when moved into SINFONI */</span> PAFREGEXP,
-<a name="l00123"></a>00123                                                   lintbl, gaintbl,
-<a name="l00124"></a>00124                                               coeffscube, bpm,
-<a name="l00125"></a>00125                           corr, diff_flat,
-<a name="l00126"></a>00126                                                   PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-<a name="l00127"></a>00127                                                   NULL, NULL, NIR);
-<a name="l00128"></a>00128     sinfo_free_propertylist(&lintbl);
-<a name="l00129"></a>00129     sinfo_free_propertylist(&gaintbl);
-<a name="l00130"></a>00130     sinfo_free_propertylist(&coeffscube);
-<a name="l00131"></a>00131     sinfo_free_propertylist(&bpm);
-<a name="l00132"></a>00132     sinfo_free_propertylist(&corr);
-<a name="l00133"></a>00133     sinfo_free_propertylist(&diff_flat);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     check_nomsg(frm=cpl_frameset_find(frameset,<span class="stringliteral">"BP_MAP_NL"</span>));
-<a name="l00136"></a>00136     check_nomsg(name_o=cpl_frame_get_filename(frm));
-<a name="l00137"></a>00137     check_nomsg(plist=cpl_propertylist_load(name_o,0));
-<a name="l00138"></a>00138     check_nomsg(ima=cpl_image_load(name_o,CPL_TYPE_FLOAT,0,0));
-<a name="l00139"></a>00139     check_nomsg(cpl_image_threshold(ima,0.1,0.9,1,0));
-<a name="l00140"></a>00140     check_nomsg(cpl_image_save(ima,name_o,CPL_BPP_IEEE_FLOAT,plist,CPL_IO_DEFAULT));
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   cleanup:
-<a name="l00143"></a>00143     sinfo_free_propertylist(&plist);
-<a name="l00144"></a>00144     sinfo_free_image(&ima);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="comment">/* Propagate the error, if any */</span>
-<a name="l00147"></a>00147     cpl_ensure_code(!error, error);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00150"></a>00150 }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 cpl_error_code
-<a name="l00153"></a>00153 sinfo_lingain_fill_parlist_default(cpl_parameterlist * parlist)
-<a name="l00154"></a>00154 {
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156    cpl_error_code error = CPL_ERROR_NONE;
-<a name="l00157"></a>00157    cpl_parameter * p;
-<a name="l00158"></a>00158    error = DETMON_LG_FILL_PARLIST_NIR_DEFAULT(parlist,RECIPE_NAME,
-<a name="l00159"></a>00159                                                  PACKAGE_TARNAME);
-<a name="l00160"></a>00160     cpl_ensure_code(!error, error);
-<a name="l00161"></a>00161     p = cpl_parameterlist_find(parlist, PACKAGE_TARNAME <span class="stringliteral">"."</span> RECIPE_NAME <span class="stringliteral">".bpmbin"</span>);
-<a name="l00162"></a>00162     cpl_ensure_code(p != NULL, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00163"></a>00163     error = cpl_parameter_set_default_bool(p, SINFO_BPMBIN);
-<a name="l00164"></a>00164     p = cpl_parameterlist_find(parlist, PACKAGE_TARNAME <span class="stringliteral">"."</span> RECIPE_NAME <span class="stringliteral">".kappa"</span>);
-<a name="l00165"></a>00165     cpl_ensure_code(p != NULL, CPL_ERROR_DATA_NOT_FOUND);
-<a name="l00166"></a>00166     error = cpl_parameter_set_default_double(p, SINFO_KAPPA);
-<a name="l00167"></a>00167     cpl_ensure_code(!error, error);
-<a name="l00168"></a>00168     <span class="keywordflow">return</span> error;
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 }
-<a name="l00171"></a>00171 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_lingain.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_lingain.c,v 1.22 2012/03/03 10:38:03 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the DETMON Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Includes and Defines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_irplib_cpl_wrp.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* Define here the DO.CATG keywords */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#define SINFO_LINGAIN_ON_RAW                    "LINEARITY_LAMP_ON"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LINGAIN_OFF_RAW           "LINEARITY_LAMP_OFF"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#define RECIPE_NAME "sinfo_rec_lingain"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* Copy here instrument specific keywords which need to be in the PAF file */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#define INSTREGEXP   "ESO INS SETUP ID"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#define PAFREGEXP    "^(" REGEXP "|" INSTREGEXP ")$"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define NIR TRUE</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_BPMBIN 1</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_KAPPA 9</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                 Functions prototypes</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> cpl_error_code</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> sinfo_lingain_fill_parlist_default(cpl_parameterlist * parlist);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> CPL_RECIPE_DEFINE(sinfo_rec_lingain, SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>              <span class="comment">/* Replace DETMON_BINARY_VERSION with</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">            corresponding pipeline macro */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                      sinfo_lingain_fill_parlist_default(recipe->parameters),</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>              <span class="comment">/* Replace "sinfoni" with PACKAGE_TARNAME</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">            when moved into SINFONI */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                      <span class="stringliteral">"Lander de Bilbao"</span>, <span class="stringliteral">"lbilbao at eso.org"</span>, <span class="stringliteral">"2008"</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                      <span class="stringliteral">"Linearity/Gain recipe for the IR domain"</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                      LG_DESCR(RECIPE_NAME, <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                                                       SINFO_LINGAIN_ON_RAW,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                                       SINFO_LINGAIN_OFF_RAW));</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">  @brief    Interpret the command line options and execute the data processing</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">  @param    frameset    the frames list</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">  @param    parlist     the parameters list</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">  @return   0 if everything is ok</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_lingain(cpl_frameset            * frameset,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>              <span class="keyword">const</span> cpl_parameterlist * parlist)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o=NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   cpl_image* ima=NULL;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    cpl_propertylist * lintbl;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    cpl_propertylist * gaintbl;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    cpl_propertylist * coeffscube;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    cpl_propertylist * bpm;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    cpl_propertylist * corr;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>    cpl_propertylist * diff_flat;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    lintbl =  DETMON_FILL_PROLIST(<span class="stringliteral">"DET_LIN_INFO"</span>, <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    gaintbl = DETMON_FILL_PROLIST(<span class="stringliteral">"GAIN_INFO"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>    coeffscube = DETMON_FILL_PROLIST(<span class="stringliteral">"COEFFS_CUBE"</span>,  <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    bpm = DETMON_FILL_PROLIST(<span class="stringliteral">"BP_MAP_NL"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>    corr = DETMON_FILL_PROLIST(<span class="stringliteral">"AUTOCORR"</span>,     <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    diff_flat = DETMON_FILL_PROLIST(<span class="stringliteral">"DIFF_FLAT"</span>,    <span class="stringliteral">"TYPE"</span>, <span class="stringliteral">"TECH"</span>, CPL_TRUE);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    error = DETMON_LG(frameset,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                                                   parlist,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                                   SINFO_LINGAIN_ON_RAW,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                                   SINFO_LINGAIN_OFF_RAW,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                                                   RECIPE_NAME,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">/* Replace this string ("sinfoni") with */</span>    PACKAGE_TARNAME,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="comment">/* PACKAGE_TARNAME when moved into SINFONI */</span> PAFREGEXP,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                                                   lintbl, gaintbl,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                                               coeffscube, bpm,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                           corr, diff_flat,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                                                   PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                                   NULL, NULL, NIR);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     sinfo_free_propertylist(&lintbl);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     sinfo_free_propertylist(&gaintbl);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     sinfo_free_propertylist(&coeffscube);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     sinfo_free_propertylist(&bpm);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     sinfo_free_propertylist(&corr);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     sinfo_free_propertylist(&diff_flat);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     check_nomsg(frm=cpl_frameset_find(frameset,<span class="stringliteral">"BP_MAP_NL"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     check_nomsg(name_o=cpl_frame_get_filename(frm));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     check_nomsg(plist=cpl_propertylist_load(name_o,0));</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     check_nomsg(ima=cpl_image_load(name_o,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     check_nomsg(cpl_image_threshold(ima,0.1,0.9,1,0));</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     check_nomsg(cpl_image_save(ima,name_o,CPL_BPP_IEEE_FLOAT,plist,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   cleanup:</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* Propagate the error, if any */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> cpl_error_code</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> sinfo_lingain_fill_parlist_default(cpl_parameterlist * parlist)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    cpl_error_code error = CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>    cpl_parameter * p;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    error = DETMON_LG_FILL_PARLIST_NIR_DEFAULT(parlist,RECIPE_NAME,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                                  PACKAGE_TARNAME);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     p = cpl_parameterlist_find(parlist, PACKAGE_TARNAME <span class="stringliteral">"."</span> RECIPE_NAME <span class="stringliteral">".bpmbin"</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_ensure_code(p != NULL, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     error = cpl_parameter_set_default_bool(p, SINFO_BPMBIN);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     p = cpl_parameterlist_find(parlist, PACKAGE_TARNAME <span class="stringliteral">"."</span> RECIPE_NAME <span class="stringliteral">".kappa"</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     cpl_ensure_code(p != NULL, CPL_ERROR_DATA_NOT_FOUND);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     error = cpl_parameter_set_default_double(p, SINFO_KAPPA);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span> error;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__mdark_8c_source.html b/html/sinfo__rec__mdark_8c_source.html
index a6f4a35..f3c144e 100644
--- a/html/sinfo__rec__mdark_8c_source.html
+++ b/html/sinfo__rec__mdark_8c_source.html
@@ -2,423 +2,454 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_mdark.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_mdark.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_mdark.c,v 1.22 2008/02/28 10:36:10 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/28 10:36:10 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Dark Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/* cpl */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span>    
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/* irplib */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/* sinfoni */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_bp_noise.h></span> <span class="comment">/* */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_new_dark.h></span>     <span class="comment">/*  */</span> 
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_bp_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_bp_noise_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_dark_config.h></span> 
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00067"></a>00067 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00068"></a>00068 <span class="comment">                            Functions prototypes</span>
-<a name="l00069"></a>00069 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_create(cpl_plugin *plugin);
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_exec(cpl_plugin *plugin);
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_destroy(cpl_plugin *plugin);
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> count_diff_ndit(cpl_frameset *<span class="keyword">set</span>, cpl_vector** dit_val);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                            Static variables</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_mdark_description[] =
-<a name="l00082"></a>00082 <span class="stringliteral">"This recipe perform raw sinfo_dark data reduction.\n"</span>
-<a name="l00083"></a>00083 <span class="stringliteral">"The input files are raw sinfo_dark images\n"</span>
-<a name="l00084"></a>00084 <span class="stringliteral">"Their associated tags should be DARK.\n"</span>
-<a name="l00085"></a>00085 <span class="stringliteral">"The output are a master sinfo_dark (PRO.CATG=MASTER_DARK) and\n"</span>
-<a name="l00086"></a>00086 <span class="stringliteral">"a hot pixels bad pixel map (PRO.CATG=BP_MAP_HP)\n"</span>
-<a name="l00087"></a>00087 <span class="stringliteral">"Information on relevant parameters may be found with\n"</span>
-<a name="l00088"></a>00088 <span class="stringliteral">"esorex --params sinfo_rec_mdark\n"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"esorex --help sinfo_rec_mdark\n"</span>
-<a name="l00090"></a>00090 <span class="stringliteral">"\n"</span>;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00094"></a>00094 <span class="comment">                                Functions code</span>
-<a name="l00095"></a>00095 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00112"></a>00112 <span class="keywordtype">int</span>
-<a name="l00113"></a><a class="code" href="group__sinfo__rec__mdark.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00113</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00114"></a>00114 {
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00117"></a>00117   cpl_plugin *plugin = &recipe->interface;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   cpl_plugin_init(plugin,
-<a name="l00121"></a>00121           CPL_PLUGIN_API,
-<a name="l00122"></a>00122           SINFONI_BINARY_VERSION,
-<a name="l00123"></a>00123           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00124"></a>00124           <span class="stringliteral">"sinfo_rec_mdark"</span>,
-<a name="l00125"></a>00125           <span class="stringliteral">"Master dark and hot pixels mask generation."</span>,
-<a name="l00126"></a>00126           sinfo_rec_mdark_description,
-<a name="l00127"></a>00127           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00128"></a>00128           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00129"></a>00129           sinfo_get_license(),
-<a name="l00130"></a>00130           sinfo_rec_mdark_create,
-<a name="l00131"></a>00131           sinfo_rec_mdark_exec,
-<a name="l00132"></a>00132           sinfo_rec_mdark_destroy);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134   cpl_pluginlist_append(list, plugin);
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136   <span class="keywordflow">return</span> 0;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00148"></a>00148 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_create(cpl_plugin *plugin)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151     cpl_recipe      * recipe ;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00154"></a>00154     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00155"></a>00155         recipe = (cpl_recipe *)plugin ;
-<a name="l00156"></a>00156     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00157"></a>00157     cpl_error_reset();
-<a name="l00158"></a>00158     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00161"></a>00161     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164   <span class="comment">/*</span>
-<a name="l00165"></a>00165 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00166"></a>00166 <span class="comment">   */</span>
-<a name="l00167"></a>00167   sinfo_general_config_add(recipe->parameters);
-<a name="l00168"></a>00168   <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(recipe->parameters);
-<a name="l00169"></a>00169   sinfo_dark_config_add(recipe->parameters);
-<a name="l00170"></a>00170   <span class="keywordflow">return</span> 0;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00179"></a>00179 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00180"></a>00180 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_exec(cpl_plugin *plugin)
-<a name="l00181"></a>00181 {
-<a name="l00182"></a>00182     cpl_recipe  *   recipe ;
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00188"></a>00188         recipe = (cpl_recipe *)plugin ;
-<a name="l00189"></a>00189     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00192"></a>00192         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00193"></a>00193 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00194"></a>00194         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00195"></a>00195     } 
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     <span class="keywordflow">return</span> sinfo_rec_mdark(recipe->parameters, recipe->frames);
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 }
-<a name="l00200"></a>00200 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00206"></a>00206 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_destroy(cpl_plugin *plugin)
-<a name="l00208"></a>00208 {
-<a name="l00209"></a>00209     cpl_recipe  *   recipe ;
-<a name="l00210"></a>00210     
-<a name="l00211"></a>00211     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00212"></a>00212     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00213"></a>00213         recipe = (cpl_recipe *)plugin ;
-<a name="l00214"></a>00214     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00217"></a>00217     <span class="keywordflow">return</span> 0 ;
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="comment">/*</span>
-<a name="l00231"></a>00231 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00232"></a>00232 <span class="comment"> */</span>
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00235"></a>00235 sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00236"></a>00236 {
-<a name="l00237"></a>00237  
-<a name="l00238"></a>00238   cpl_parameter* p=NULL;
-<a name="l00239"></a>00239   <span class="keywordtype">int</span> nset=0;
-<a name="l00240"></a>00240   cpl_frameset  * wrk_set=NULL;
-<a name="l00241"></a>00241   cpl_frameset  * cdb_set=NULL;
-<a name="l00242"></a>00242   cpl_frameset  * tot_set=NULL;
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244   cpl_frame* tmp_frm=NULL;
-<a name="l00245"></a>00245   cpl_frame* dup_frm=NULL;
-<a name="l00246"></a>00246   cpl_frame* cdb_frm=NULL;
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248   <span class="keywordtype">char</span> tmp_name[FILE_NAME_SZ];
-<a name="l00249"></a>00249   <span class="keywordtype">char</span> out_bpmap_name[FILE_NAME_SZ];
-<a name="l00250"></a>00250   <span class="keywordtype">char</span> out_dark_name[FILE_NAME_SZ];
-<a name="l00251"></a>00251   <span class="keywordtype">double</span> tmp_dit=0;
-<a name="l00252"></a>00252   <span class="keywordtype">double</span> ref_dit=0;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254   cpl_vector* dit_val=NULL;
-<a name="l00255"></a>00255   cpl_propertylist* plist=NULL;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   <span class="keywordtype">int</span> i=0;
-<a name="l00258"></a>00258   <span class="keywordtype">int</span> j=0;
-<a name="l00259"></a>00259   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262   <span class="keywordtype">int</span> nraw=0;
-<a name="l00263"></a>00263   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00264"></a>00264   <span class="keywordtype">int</span> nred=0;
-<a name="l00265"></a>00265   <span class="keywordtype">int</span> ntot=0;
-<a name="l00266"></a>00266   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00267"></a>00267         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00268"></a>00268   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00271"></a>00271   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00272"></a>00272   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00273"></a>00273      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00274"></a>00274   }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   check_nomsg(cdb_set=cpl_frameset_new());
-<a name="l00278"></a>00278   check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   sinfo_extract_mst_frames(<span class="keyword">set</span>,cdb_set);
-<a name="l00282"></a>00282   sinfo_bp_config_add(config);
-<a name="l00283"></a>00283   nset=count_diff_ndit(<span class="keyword">set</span>,&dit_val);
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   check_nomsg(nraw=cpl_frameset_get_size(<span class="keyword">set</span>));
-<a name="l00286"></a>00286   check_nomsg(ncdb=cpl_frameset_get_size(cdb_set));
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288   <span class="keywordflow">for</span>(i=0;i<nset;i++) {
-<a name="l00289"></a>00289     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00290"></a>00290     check_nomsg(ref_dit=cpl_vector_get(dit_val,i));
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293     <span class="keywordflow">for</span>(j=0;j<nraw;j++) {
-<a name="l00294"></a>00294       check_nomsg(tmp_frm=cpl_frameset_get_frame(<span class="keyword">set</span>,j));
-<a name="l00295"></a>00295       check_nomsg(strcpy(tmp_name,cpl_frame_get_filename(tmp_frm)));
-<a name="l00296"></a>00296       plist=cpl_propertylist_load(tmp_name,0);
-<a name="l00297"></a>00297       tmp_dit=sinfo_pfits_get_dit(plist);
-<a name="l00298"></a>00298       sinfo_free_propertylist(&plist);
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300       <span class="keywordflow">if</span>(tmp_dit==ref_dit) {
-<a name="l00301"></a>00301         check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(tmp_frm)));
-<a name="l00302"></a>00302       }
-<a name="l00303"></a>00303     }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305     <span class="keywordflow">for</span>(j=0;j<ncdb;j++) {
-<a name="l00306"></a>00306       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,j));
-<a name="l00307"></a>00307       check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(cdb_frm)));
-<a name="l00308"></a>00308     }
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310     <span class="comment">/* reduce data */</span>
-<a name="l00311"></a>00311     ck0(sinfo_dfs_set_groups(wrk_set),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00312"></a>00312 
-<a name="l00313"></a>00313     <span class="comment">/* Hidden parameters */</span>
-<a name="l00314"></a>00314     check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00315"></a>00315     check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Noise"</span>));
-<a name="l00316"></a>00316     ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00317"></a>00317  
-<a name="l00318"></a>00318     <span class="keywordflow">if</span> (nset>1) {
-<a name="l00319"></a>00319       sprintf(out_bpmap_name,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_bp_noise"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00320"></a>00320     } <span class="keywordflow">else</span> {
-<a name="l00321"></a>00321       strcpy(out_bpmap_name,<span class="stringliteral">"out_bp_noise.fits"</span>);
-<a name="l00322"></a>00322     }
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);
-<a name="l00325"></a>00325     sinfo_msg(<span class="stringliteral">"BP_MAP_HP BAD PIXEL MAP DETERMINATION          "</span>);
-<a name="l00326"></a>00326     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);
-<a name="l00327"></a>00327    
-<a name="l00328"></a>00328     ck0(sinfo_new_bp_search_noise(cpl_func,config,wrk_set,out_bpmap_name),
-<a name="l00329"></a>00329     <span class="stringliteral">"computing BP_MAP_HP"</span>) ;
-<a name="l00330"></a>00330     sinfo_msg(<span class="stringliteral">"BP_MAP_HP BAD PIXEL MAP DETERMINATION SUCCESS"</span>) ; 
-<a name="l00331"></a>00331     
-<a name="l00332"></a>00332     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);
-<a name="l00333"></a>00333     sinfo_msg(<span class="stringliteral">"MASTER DARK DETERMINATION                      "</span>);
-<a name="l00334"></a>00334     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336     <span class="keywordflow">if</span> (nset>1) {
-<a name="l00337"></a>00337       sprintf(out_dark_name,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_dark"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00338"></a>00338     } <span class="keywordflow">else</span> {
-<a name="l00339"></a>00339       strcpy(out_dark_name,<span class="stringliteral">"out_dark.fits"</span>);
-<a name="l00340"></a>00340     }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342     ck0(sinfo_new_dark(cpl_func,config, wrk_set, out_dark_name),
-<a name="l00343"></a>00343      <span class="stringliteral">"Computing master dark"</span>) ;
-<a name="l00344"></a>00344     sinfo_msg(<span class="stringliteral">"MASTER DARK DETERMINATION SUCCESS"</span>) ;
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     nred=cpl_frameset_get_size(wrk_set);
-<a name="l00347"></a>00347     <span class="keywordflow">for</span>(j=0;j<nred;j++) {
-<a name="l00348"></a>00348       check_nomsg(tmp_frm=cpl_frameset_get_frame(wrk_set,j));
-<a name="l00349"></a>00349       check_nomsg(cpl_frameset_insert(tot_set,cpl_frame_duplicate(tmp_frm)));
-<a name="l00350"></a>00350     }
-<a name="l00351"></a>00351     sinfo_free_frameset(&wrk_set);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353   }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   check_nomsg(ntot=cpl_frameset_get_size(tot_set));
-<a name="l00356"></a>00356   <span class="keywordflow">for</span>(j=0;j<ntot;j++) {
-<a name="l00357"></a>00357     check_nomsg(tmp_frm=cpl_frameset_get_frame(tot_set,j));
-<a name="l00358"></a>00358     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(tmp_frm)));
-<a name="l00359"></a>00359   }
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361   sinfo_free_frameset(&tot_set);
-<a name="l00362"></a>00362   sinfo_free_my_vector(&dit_val);
-<a name="l00363"></a>00363   sinfo_free_frameset(&cdb_set);
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370  cleanup:
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372   sinfo_free_propertylist(&plist);
-<a name="l00373"></a>00373   sinfo_free_frame(&dup_frm);
-<a name="l00374"></a>00374   sinfo_free_frameset(&wrk_set);
-<a name="l00375"></a>00375   sinfo_free_frameset(&tot_set);
-<a name="l00376"></a>00376   sinfo_free_my_vector(&dit_val);
-<a name="l00377"></a>00377   sinfo_free_frameset(&cdb_set);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00381"></a>00381     <span class="keywordflow">return</span> -1;
-<a name="l00382"></a>00382   } <span class="keywordflow">else</span> {
-<a name="l00383"></a>00383     <span class="keywordflow">return</span> 0;
-<a name="l00384"></a>00384   }
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388 }
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390 <span class="keyword">static</span> <span class="keywordtype">int</span> count_diff_ndit(cpl_frameset *<span class="keyword">set</span>, cpl_vector** dit_val)
-<a name="l00391"></a>00391 {
-<a name="l00392"></a>00392   cpl_frame* tmp_frm=NULL;
-<a name="l00393"></a>00393   cpl_frame* dup_frm=NULL;
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396   <span class="keywordtype">char</span>  tmp_name[FILE_NAME_SZ];
-<a name="l00397"></a>00397   <span class="keywordtype">int</span> nraw=0;
-<a name="l00398"></a>00398   <span class="keywordtype">int</span> i=0;
-<a name="l00399"></a>00399   <span class="keywordtype">int</span> ndit=1;
-<a name="l00400"></a>00400   <span class="keywordtype">double</span> ref_dit=0;
-<a name="l00401"></a>00401   cpl_vector* dit=NULL; 
-<a name="l00402"></a>00402   cpl_propertylist* plist=NULL;
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404   nraw=cpl_frameset_get_size(<span class="keyword">set</span>);
-<a name="l00405"></a>00405   dit=cpl_vector_new(nraw);
-<a name="l00406"></a>00406   <span class="keywordflow">for</span>(i=0;i<nraw;i++) {
-<a name="l00407"></a>00407      tmp_frm = cpl_frameset_get_frame(<span class="keyword">set</span>, i);
-<a name="l00408"></a>00408      strcpy(tmp_name,cpl_frame_get_filename(tmp_frm));
-<a name="l00409"></a>00409      plist= cpl_propertylist_load(tmp_name,0);
-<a name="l00410"></a>00410      cpl_vector_set(dit,i,sinfo_pfits_get_dit(plist));
-<a name="l00411"></a>00411      sinfo_free_propertylist(&plist);
-<a name="l00412"></a>00412   }
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415   cpl_vector_sort(dit,1);
-<a name="l00416"></a>00416   ref_dit=cpl_vector_get(dit,0);
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419   <span class="keywordflow">for</span>(i=1;i<nraw;i++) {
-<a name="l00420"></a>00420     <span class="keywordflow">if</span>(ref_dit != cpl_vector_get(dit,i)) {
-<a name="l00421"></a>00421       ref_dit=cpl_vector_get(dit,i);
-<a name="l00422"></a>00422       ndit++;
-<a name="l00423"></a>00423     }
-<a name="l00424"></a>00424   }
-<a name="l00425"></a>00425   *dit_val=cpl_vector_new(ndit);
-<a name="l00426"></a>00426   ref_dit=cpl_vector_get(dit,0);
-<a name="l00427"></a>00427   cpl_vector_set(*dit_val,0,cpl_vector_get(dit,0));
-<a name="l00428"></a>00428   ndit=1;
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430    <span class="keywordflow">for</span>(i=1;i<nraw;i++) {
-<a name="l00431"></a>00431     <span class="keywordflow">if</span>(ref_dit != cpl_vector_get(dit,i)) {
-<a name="l00432"></a>00432       cpl_vector_set(*dit_val,ndit,cpl_vector_get(dit,i));
-<a name="l00433"></a>00433       ref_dit=cpl_vector_get(dit,i);
-<a name="l00434"></a>00434       ndit++;
-<a name="l00435"></a>00435     }
-<a name="l00436"></a>00436   }
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438   cpl_vector_delete(dit);
-<a name="l00439"></a>00439   cpl_frame_delete(dup_frm);
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441   <span class="keywordflow">return</span> ndit;
-<a name="l00442"></a>00442 }
-<a name="l00443"></a>00443 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_mdark.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_mdark.c,v 1.22 2008/02/28 10:36:10 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/28 10:36:10 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Dark Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span>    </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_bp_noise.h></span> <span class="comment">/* */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_new_dark.h></span>     <span class="comment">/*  */</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_bp_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_bp_noise_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_dark_config.h></span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> count_diff_ndit(cpl_frameset *<span class="keyword">set</span>, cpl_vector** dit_val);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_mdark_description[] =</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="stringliteral">"This recipe perform raw sinfo_dark data reduction.\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="stringliteral">"The input files are raw sinfo_dark images\n"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="stringliteral">"Their associated tags should be DARK.\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="stringliteral">"The output are a master sinfo_dark (PRO.CATG=MASTER_DARK) and\n"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"a hot pixels bad pixel map (PRO.CATG=BP_MAP_HP)\n"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"Information on relevant parameters may be found with\n"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"esorex --params sinfo_rec_mdark\n"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"esorex --help sinfo_rec_mdark\n"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="group__sinfo__rec__mdark.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  113</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>           <span class="stringliteral">"sinfo_rec_mdark"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>           <span class="stringliteral">"Master dark and hot pixels mask generation."</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>           sinfo_rec_mdark_description,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>           sinfo_rec_mdark_create,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>           sinfo_rec_mdark_exec,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           sinfo_rec_mdark_destroy);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <a class="code" href="group__sinfo__bad__pix__search.html#gaa86bb476f2328523607038df849c2beb" title="Adds parameters for the spectrum extraction.">sinfo_bp_noise_config_add</a>(recipe->parameters);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   sinfo_dark_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     } </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">return</span> sinfo_rec_mdark(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> sinfo_rec_mdark(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">int</span> nset=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   cpl_frameset  * wrk_set=NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   cpl_frameset  * cdb_set=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cpl_frameset  * tot_set=NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   cpl_frame* tmp_frm=NULL;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   cpl_frame* dup_frm=NULL;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   cpl_frame* cdb_frm=NULL;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordtype">char</span> tmp_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="keywordtype">char</span> out_bpmap_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="keywordtype">char</span> out_dark_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordtype">double</span> tmp_dit=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordtype">double</span> ref_dit=0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   cpl_vector* dit_val=NULL;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordtype">int</span> nred=0;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="keywordtype">int</span> ntot=0;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   check_nomsg(cdb_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   sinfo_extract_mst_frames(<span class="keyword">set</span>,cdb_set);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   sinfo_bp_config_add(config);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   nset=count_diff_ndit(<span class="keyword">set</span>,&dit_val);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   check_nomsg(nraw=cpl_frameset_get_size(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   check_nomsg(ncdb=cpl_frameset_get_size(cdb_set));</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   <span class="keywordflow">for</span>(i=0;i<nset;i++) {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     check_nomsg(ref_dit=cpl_vector_get(dit_val,i));</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keywordflow">for</span>(j=0;j<nraw;j++) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>       check_nomsg(tmp_frm=cpl_frameset_get_frame(<span class="keyword">set</span>,j));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       check_nomsg(strcpy(tmp_name,cpl_frame_get_filename(tmp_frm)));</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       plist=cpl_propertylist_load(tmp_name,0);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       tmp_dit=sinfo_pfits_get_dit(plist);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       <span class="keywordflow">if</span>(tmp_dit==ref_dit) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(tmp_frm)));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordflow">for</span>(j=0;j<ncdb;j++) {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,j));</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       check_nomsg(cpl_frameset_insert(wrk_set,cpl_frame_duplicate(cdb_frm)));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <span class="comment">/* reduce data */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     ck0(sinfo_dfs_set_groups(wrk_set),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="comment">/* Hidden parameters */</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Noise"</span>));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>  </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">if</span> (nset>1) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       sprintf(out_bpmap_name,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_bp_noise"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       strcpy(out_bpmap_name,<span class="stringliteral">"out_bp_noise.fits"</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     sinfo_msg(<span class="stringliteral">"BP_MAP_HP BAD PIXEL MAP DETERMINATION          "</span>);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>    </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     ck0(sinfo_new_bp_search_noise(cpl_func,config,wrk_set,out_bpmap_name),</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="stringliteral">"computing BP_MAP_HP"</span>) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     sinfo_msg(<span class="stringliteral">"BP_MAP_HP BAD PIXEL MAP DETERMINATION SUCCESS"</span>) ; </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     sinfo_msg(<span class="stringliteral">"MASTER DARK DETERMINATION                      "</span>);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     sinfo_msg(<span class="stringliteral">"-----------------------------------------------"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">if</span> (nset>1) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       sprintf(out_dark_name,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_dark"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       strcpy(out_dark_name,<span class="stringliteral">"out_dark.fits"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     ck0(sinfo_new_dark(cpl_func,config, wrk_set, out_dark_name),</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>      <span class="stringliteral">"Computing master dark"</span>) ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     sinfo_msg(<span class="stringliteral">"MASTER DARK DETERMINATION SUCCESS"</span>) ;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     nred=cpl_frameset_get_size(wrk_set);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">for</span>(j=0;j<nred;j++) {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       check_nomsg(tmp_frm=cpl_frameset_get_frame(wrk_set,j));</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       check_nomsg(cpl_frameset_insert(tot_set,cpl_frame_duplicate(tmp_frm)));</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     }</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   check_nomsg(ntot=cpl_frameset_get_size(tot_set));</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">for</span>(j=0;j<ntot;j++) {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     check_nomsg(tmp_frm=cpl_frameset_get_frame(tot_set,j));</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(tmp_frm)));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   sinfo_free_my_vector(&dit_val);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>  cleanup:</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   sinfo_free_frame(&dup_frm);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   sinfo_free_my_vector(&dit_val);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> }</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="keyword">static</span> <span class="keywordtype">int</span> count_diff_ndit(cpl_frameset *<span class="keyword">set</span>, cpl_vector** dit_val)</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   cpl_frame* tmp_frm=NULL;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   cpl_frame* dup_frm=NULL;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordtype">char</span>  tmp_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordtype">int</span> ndit=1;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   <span class="keywordtype">double</span> ref_dit=0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   cpl_vector* dit=NULL; </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   nraw=cpl_frameset_get_size(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   dit=cpl_vector_new(nraw);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="keywordflow">for</span>(i=0;i<nraw;i++) {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>      tmp_frm = cpl_frameset_get_frame(<span class="keyword">set</span>, i);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>      strcpy(tmp_name,cpl_frame_get_filename(tmp_frm));</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>      plist= cpl_propertylist_load(tmp_name,0);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>      cpl_vector_set(dit,i,sinfo_pfits_get_dit(plist));</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>      sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   cpl_vector_sort(dit,1);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   ref_dit=cpl_vector_get(dit,0);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <span class="keywordflow">for</span>(i=1;i<nraw;i++) {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keywordflow">if</span>(ref_dit != cpl_vector_get(dit,i)) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>       ref_dit=cpl_vector_get(dit,i);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>       ndit++;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   *dit_val=cpl_vector_new(ndit);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   ref_dit=cpl_vector_get(dit,0);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   cpl_vector_set(*dit_val,0,cpl_vector_get(dit,0));</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   ndit=1;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>    <span class="keywordflow">for</span>(i=1;i<nraw;i++) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     <span class="keywordflow">if</span>(ref_dit != cpl_vector_get(dit,i)) {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       cpl_vector_set(*dit_val,ndit,cpl_vector_get(dit,i));</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>       ref_dit=cpl_vector_get(dit,i);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>       ndit++;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   cpl_vector_delete(dit);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   cpl_frame_delete(dup_frm);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <span class="keywordflow">return</span> ndit;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> }</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__mdark__detmon_8c_source.html b/html/sinfo__rec__mdark__detmon_8c_source.html
index dba407b..e6b0a79 100644
--- a/html/sinfo__rec__mdark__detmon_8c_source.html
+++ b/html/sinfo__rec__mdark__detmon_8c_source.html
@@ -2,102 +2,133 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_mdark_detmon.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_mdark_detmon.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_mdark_detmon.c,v 1.4 2012/01/12 11:53:24 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the DETMON Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/01/12 11:53:24 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                             Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include "irplib_detmon.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "irplib_plugin.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* Define here the DO.CATG keywords */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#define SINFONI_DARK_RAW                    "DARK"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define RECIPE_NAME "sinfo_rec_mdark_detmon"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                Functions prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 CPL_RECIPE_DEFINE(sinfo_rec_mdark_detmon, SINFONI_BINARY_VERSION,
-<a name="l00050"></a>00050                      irplib_detmon_fill_dark_params_default(recipe->parameters,
-<a name="l00051"></a>00051                                                        <span class="stringliteral">"sinfo_rec_mdark_detmon"</span>,
-<a name="l00052"></a>00052                                                        <span class="stringliteral">"sinfo"</span>),
-<a name="l00053"></a>00053                      <span class="stringliteral">"Lander de Bilbao"</span>, <span class="stringliteral">"lbilbao at eso.org"</span>, <span class="stringliteral">"2008"</span>, 
-<a name="l00054"></a>00054                      <span class="stringliteral">"Master dark and detector signal non uniformity map"</span>,
-<a name="l00055"></a>00055                      irplib_detmon_dark_get_description(RECIPE_NAME,
-<a name="l00056"></a>00056                                                            <span class="stringliteral">"SINFONI"</span>,
-<a name="l00057"></a>00057                                                            SINFONI_DARK_RAW));
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00060"></a>00060 <span class="comment">/*</span>
-<a name="l00061"></a>00061 <span class="comment">  @brief    Interpret the command line options and execute the data processing</span>
-<a name="l00062"></a>00062 <span class="comment">  @param    frameset    the frames list</span>
-<a name="l00063"></a>00063 <span class="comment">  @param    parlist     the parameters list</span>
-<a name="l00064"></a>00064 <span class="comment">  @return   0 if everything is ok</span>
-<a name="l00065"></a>00065 <span class="comment"> */</span>
-<a name="l00066"></a>00066 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_detmon(cpl_frameset            * frameset,
-<a name="l00069"></a>00069                <span class="keyword">const</span> cpl_parameterlist * parlist)
-<a name="l00070"></a>00070 {
-<a name="l00071"></a>00071     <span class="keyword">const</span> cpl_error_code error = irplib_detmon_dark(frameset,
-<a name="l00072"></a>00072                             parlist,
-<a name="l00073"></a>00073                             SINFONI_DARK_RAW,
-<a name="l00074"></a>00074                             RECIPE_NAME,
-<a name="l00075"></a>00075                             PACKAGE_TARNAME,
-<a name="l00076"></a>00076                             <span class="stringliteral">"MASTER_DARK"</span>,
-<a name="l00077"></a>00077                             <span class="stringliteral">"DSNU_MAP"</span>,
-<a name="l00078"></a>00078                             <span class="stringliteral">"DSNU_TABLE"</span>,
-<a name="l00079"></a>00079                                                        PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-<a name="l00080"></a>00080                                                        NULL);
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083     <span class="comment">/* Propagate the error, if any */</span>
-<a name="l00084"></a>00084     cpl_ensure_code(!error, error);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086     <span class="keywordflow">return</span> CPL_ERROR_NONE;
-<a name="l00087"></a>00087 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_mdark_detmon.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_mdark_detmon.c,v 1.4 2012/01/12 11:53:24 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the DETMON Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/01/12 11:53:24 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                             Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "irplib_detmon.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "irplib_plugin.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* Define here the DO.CATG keywords */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#define SINFONI_DARK_RAW                    "DARK"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define RECIPE_NAME "sinfo_rec_mdark_detmon"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                Functions prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> CPL_RECIPE_DEFINE(sinfo_rec_mdark_detmon, SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                      irplib_detmon_fill_dark_params_default(recipe->parameters,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                                                        <span class="stringliteral">"sinfo_rec_mdark_detmon"</span>,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                                                        <span class="stringliteral">"sinfo"</span>),</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                      <span class="stringliteral">"Lander de Bilbao"</span>, <span class="stringliteral">"lbilbao at eso.org"</span>, <span class="stringliteral">"2008"</span>, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                      <span class="stringliteral">"Master dark and detector signal non uniformity map"</span>,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                      irplib_detmon_dark_get_description(RECIPE_NAME,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                                                            <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                                                            SINFONI_DARK_RAW));</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  @brief    Interpret the command line options and execute the data processing</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  @param    frameset    the frames list</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  @param    parlist     the parameters list</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  @return   0 if everything is ok</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mdark_detmon(cpl_frameset            * frameset,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                <span class="keyword">const</span> cpl_parameterlist * parlist)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keyword">const</span> cpl_error_code error = irplib_detmon_dark(frameset,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                             parlist,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                             SINFONI_DARK_RAW,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                             RECIPE_NAME,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                             PACKAGE_TARNAME,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                             <span class="stringliteral">"MASTER_DARK"</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                             <span class="stringliteral">"DSNU_MAP"</span>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                             <span class="stringliteral">"DSNU_TABLE"</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                                                        PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                                        NULL);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="comment">/* Propagate the error, if any */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_ensure_code(!error, error);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__mflat_8c_source.html b/html/sinfo__rec__mflat_8c_source.html
index 548ab21..d84e2d3 100644
--- a/html/sinfo__rec__mflat_8c_source.html
+++ b/html/sinfo__rec__mflat_8c_source.html
@@ -2,295 +2,326 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_mflat.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_mflat.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_mflat.c,v 1.22 2008/02/05 08:13:05 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2008/02/05 08:13:05 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *          Rec_Lampflats Frames Data Reduction                          *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/* std */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <strings.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="comment">/* cpl */</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <cpl.h></span>    
-<a name="l00046"></a>00046 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00047"></a>00047 <span class="comment">/* sinfoni */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_bp_config.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_bp_norm_config.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_lamp_flats_config.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_bp_norm.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_new_lamp_flats.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_new_add_bp_map.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">                            Functions prototypes</span>
-<a name="l00067"></a>00067 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_create(cpl_plugin *);
-<a name="l00069"></a>00069 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_exec(cpl_plugin *);
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_destroy(cpl_plugin *);
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat(cpl_parameterlist *, cpl_frameset *);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00075"></a>00075 <span class="comment">                            Static variables</span>
-<a name="l00076"></a>00076 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_mflat_description[] =
-<a name="l00079"></a>00079 <span class="stringliteral">"This recipe reduce normal raw flat fields.\n"</span>
-<a name="l00080"></a>00080 <span class="stringliteral">"The input files are a set of flat fields with tag FLAT_LAMP\n"</span>
-<a name="l00081"></a>00081 <span class="stringliteral">"optionally one may have in input also several bad pixel maps to be coadded.\n"</span>
-<a name="l00082"></a>00082 <span class="stringliteral">"The main products are a master flat field (PRO.CATG=MASTER_FLAT_LAMP) image\n"</span>
-<a name="l00083"></a>00083 <span class="stringliteral">"a bad pixel map (PRO.CATG=BP_MAP_NO), "</span>
-<a name="l00084"></a>00084 <span class="stringliteral">"a master bad pixel map (PRO.CATG=MASTER_BP_MAP) resulting by the coaddition\n"</span>
-<a name="l00085"></a>00085 <span class="stringliteral">"of all bad pixel maps.\n"</span>
-<a name="l00086"></a>00086 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00087"></a>00087 <span class="stringliteral">"esorex --params sinfo_rec_mflat\n"</span>
-<a name="l00088"></a>00088 <span class="stringliteral">"esorex --help sinfo_rec_mflat\n"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"\n"</span>;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00094"></a>00094 <span class="comment">                                Functions code</span>
-<a name="l00095"></a>00095 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a><a class="code" href="group__sinfo__rec__mflat.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00113</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00114"></a>00114 {
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00117"></a>00117   cpl_plugin *plugin = &recipe->interface;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   cpl_plugin_init(plugin,
-<a name="l00121"></a>00121           CPL_PLUGIN_API,
-<a name="l00122"></a>00122           SINFONI_BINARY_VERSION,
-<a name="l00123"></a>00123           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00124"></a>00124           <span class="stringliteral">"sinfo_rec_mflat"</span>,
-<a name="l00125"></a>00125           <span class="stringliteral">"Master flat determination"</span>,
-<a name="l00126"></a>00126           sinfo_rec_mflat_description,
-<a name="l00127"></a>00127           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00128"></a>00128           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00129"></a>00129           sinfo_get_license(),
-<a name="l00130"></a>00130           sinfo_rec_mflat_create,
-<a name="l00131"></a>00131           sinfo_rec_mflat_exec,
-<a name="l00132"></a>00132           sinfo_rec_mflat_destroy);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134   cpl_pluginlist_append(list, plugin);
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136   <span class="keywordflow">return</span> 0;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_create(cpl_plugin *plugin)
-<a name="l00152"></a>00152 {
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     cpl_recipe      * recipe ;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00158"></a>00158         recipe = (cpl_recipe *)plugin ;
-<a name="l00159"></a>00159     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161    <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00162"></a>00162     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164   <span class="comment">/*</span>
-<a name="l00165"></a>00165 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00166"></a>00166 <span class="comment">   */</span>
-<a name="l00167"></a>00167   sinfo_general_config_add(recipe->parameters);
-<a name="l00168"></a>00168   sinfo_product_config_add(recipe->parameters);
-<a name="l00169"></a>00169   <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(recipe->parameters);
-<a name="l00170"></a>00170   sinfo_lamp_flats_config_add(recipe->parameters);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   <span class="keywordflow">return</span> 0;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00181"></a>00181 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_exec(cpl_plugin *plugin)
-<a name="l00183"></a>00183 {
-<a name="l00184"></a>00184     cpl_recipe  *   recipe ;
-<a name="l00185"></a>00185     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00186"></a>00186     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00188"></a>00188         recipe = (cpl_recipe *)plugin ;
-<a name="l00189"></a>00189     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00190"></a>00190     cpl_error_reset();
-<a name="l00191"></a>00191     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00194"></a>00194         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00195"></a>00195 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00196"></a>00196         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00197"></a>00197     } 
-<a name="l00198"></a>00198   <span class="keywordflow">return</span> sinfo_rec_mflat(recipe->parameters, recipe->frames);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00207"></a>00207 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00208"></a>00208 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_destroy(cpl_plugin *plugin)
-<a name="l00209"></a>00209 {
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213   <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00214"></a>00214   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00215"></a>00215       recipe = (cpl_recipe *)plugin ;
-<a name="l00216"></a>00216   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00219"></a>00219   <span class="keywordflow">return</span> 0;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00231"></a>00231 <span class="comment">/*</span>
-<a name="l00232"></a>00232 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00233"></a>00233 <span class="comment"> */</span>
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00237"></a>00237 sinfo_rec_mflat(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00238"></a>00238 {
-<a name="l00239"></a>00239  
-<a name="l00240"></a>00240   cpl_parameter* p;
-<a name="l00241"></a>00241   cpl_frameset* ref_set=NULL;
-<a name="l00242"></a>00242   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00243"></a>00243   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00246"></a>00246   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00249"></a>00249         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00250"></a>00250   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00253"></a>00253   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00254"></a>00254   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00255"></a>00255      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00256"></a>00256   }
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00261"></a>00261   sinfo_bp_config_add(config);  
-<a name="l00262"></a>00262   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00263"></a>00263   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   
-<a name="l00264"></a>00264   <span class="comment">/* </span>
-<a name="l00265"></a>00265 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00266"></a>00266 <span class="comment">                MASTER_FLAT</span>
-<a name="l00267"></a>00267 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00268"></a>00268 <span class="comment">  */</span>
-<a name="l00269"></a>00269  
-<a name="l00270"></a>00270   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);
-<a name="l00271"></a>00271   sinfo_msg(<span class="stringliteral">"MASTER FLAT DETERMINATION                  "</span>);
-<a name="l00272"></a>00272   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);
-<a name="l00273"></a>00273     
-<a name="l00274"></a>00274   ck0(sinfo_new_lamp_flats(cpl_func,config,<span class="keyword">set</span>,ref_set),
-<a name="l00275"></a>00275       <span class="stringliteral">"MASTER FLAT DETERMINATION FAILED"</span>);
-<a name="l00276"></a>00276   sinfo_msg(<span class="stringliteral">"MASTER FLAT DETERMINATION SUCCESS"</span>) ; 
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);
-<a name="l00279"></a>00279   sinfo_msg(<span class="stringliteral">"BP_MAP_NO BAD PIXEL MAP DETERMINATION      "</span>);
-<a name="l00280"></a>00280   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);
-<a name="l00281"></a>00281   <span class="comment">/* </span>
-<a name="l00282"></a>00282 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00283"></a>00283 <span class="comment">                BP_SEARCH</span>
-<a name="l00284"></a>00284 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00285"></a>00285 <span class="comment">  */</span>
-<a name="l00286"></a>00286    
-<a name="l00287"></a>00287   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));
-<a name="l00288"></a>00288   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   
-<a name="l00289"></a>00289   ck0(sinfo_new_bp_search_normal(cpl_func,config,<span class="keyword">set</span>,ref_set,PRO_BP_MAP_NO),
-<a name="l00290"></a>00290   <span class="stringliteral">"BP_MAP_NO BAD PIXEL MAP DETERMINATION FAILED"</span>) ;
-<a name="l00291"></a>00291     
-<a name="l00292"></a>00292   sinfo_msg(<span class="stringliteral">"------------------------------------------"</span>);
-<a name="l00293"></a>00293   sinfo_msg(<span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP DETERMINATION "</span>);
-<a name="l00294"></a>00294   sinfo_msg(<span class="stringliteral">"------------------------------------------"</span>);
-<a name="l00295"></a>00295   ck0(sinfo_new_add_bp_map(cpl_func,config, <span class="keyword">set</span>,ref_set),
-<a name="l00296"></a>00296      <span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP FAILED"</span>) ;
-<a name="l00297"></a>00297   sinfo_msg(<span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP DETERMINATION SUCCESS"</span>);
-<a name="l00298"></a>00298     
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300   <span class="keywordflow">if</span>(pdensity < 2) {
-<a name="l00301"></a>00301      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_BP_MAP_NO));
-<a name="l00302"></a>00302   }
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304  cleanup:
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306   sinfo_free_frameset(&ref_set);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00309"></a>00309     <span class="keywordflow">return</span> -1;
-<a name="l00310"></a>00310   } <span class="keywordflow">else</span> {
-<a name="l00311"></a>00311     <span class="keywordflow">return</span> 0;
-<a name="l00312"></a>00312   }
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 }
-<a name="l00315"></a>00315 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_mflat.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_mflat.c,v 1.22 2008/02/05 08:13:05 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2008/02/05 08:13:05 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *          Rec_Lampflats Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <cpl.h></span>    </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_bp_config.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_bp_norm_config.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_lamp_flats_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_bp_norm.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_new_lamp_flats.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_new_add_bp_map.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_create(cpl_plugin *);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_exec(cpl_plugin *);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_destroy(cpl_plugin *);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_mflat_description[] =</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="stringliteral">"This recipe reduce normal raw flat fields.\n"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="stringliteral">"The input files are a set of flat fields with tag FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="stringliteral">"optionally one may have in input also several bad pixel maps to be coadded.\n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="stringliteral">"The main products are a master flat field (PRO.CATG=MASTER_FLAT_LAMP) image\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="stringliteral">"a bad pixel map (PRO.CATG=BP_MAP_NO), "</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="stringliteral">"a master bad pixel map (PRO.CATG=MASTER_BP_MAP) resulting by the coaddition\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="stringliteral">"of all bad pixel maps.\n"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"esorex --params sinfo_rec_mflat\n"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"esorex --help sinfo_rec_mflat\n"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="group__sinfo__rec__mflat.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  113</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>           <span class="stringliteral">"sinfo_rec_mflat"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>           <span class="stringliteral">"Master flat determination"</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>           sinfo_rec_mflat_description,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>           sinfo_rec_mflat_create,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>           sinfo_rec_mflat_exec,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           sinfo_rec_mflat_destroy);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <a class="code" href="group__sinfo__bad__pix__search.html#ga6f49eed82217a86089ff7f23465ae3e0" title="Adds parameters for the spectrum extraction.">sinfo_bp_norm_config_add</a>(recipe->parameters);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   sinfo_lamp_flats_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     } </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordflow">return</span> sinfo_rec_mflat(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_mflat_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> sinfo_rec_mflat(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>  </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   cpl_frameset* ref_set=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   sinfo_bp_config_add(config);  </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">                MASTER_FLAT</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>  </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   sinfo_msg(<span class="stringliteral">"MASTER FLAT DETERMINATION                  "</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   ck0(sinfo_new_lamp_flats(cpl_func,config,<span class="keyword">set</span>,ref_set),</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       <span class="stringliteral">"MASTER FLAT DETERMINATION FAILED"</span>);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   sinfo_msg(<span class="stringliteral">"MASTER FLAT DETERMINATION SUCCESS"</span>) ; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   sinfo_msg(<span class="stringliteral">"BP_MAP_NO BAD PIXEL MAP DETERMINATION      "</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   sinfo_msg(<span class="stringliteral">"-------------------------------------------"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">                BP_SEARCH</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   check_nomsg(p = cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.bp.method"</span>));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   check_nomsg(cpl_parameter_set_string(p,<span class="stringliteral">"Normal"</span>));   </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   ck0(sinfo_new_bp_search_normal(cpl_func,config,<span class="keyword">set</span>,ref_set,PRO_BP_MAP_NO),</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="stringliteral">"BP_MAP_NO BAD PIXEL MAP DETERMINATION FAILED"</span>) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   sinfo_msg(<span class="stringliteral">"------------------------------------------"</span>);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   sinfo_msg(<span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP DETERMINATION "</span>);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   sinfo_msg(<span class="stringliteral">"------------------------------------------"</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   ck0(sinfo_new_add_bp_map(cpl_func,config, <span class="keyword">set</span>,ref_set),</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>      <span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP FAILED"</span>) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   sinfo_msg(<span class="stringliteral">"MASTER_BP_MAP BAD PIXEL MAP DETERMINATION SUCCESS"</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordflow">if</span>(pdensity < 2) {</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_BP_MAP_NO));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>  cleanup:</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   sinfo_free_frameset(&ref_set);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__objnod_8c_source.html b/html/sinfo__rec__objnod_8c_source.html
index 41cefa7..39b4a41 100644
--- a/html/sinfo__rec__objnod_8c_source.html
+++ b/html/sinfo__rec__objnod_8c_source.html
@@ -2,298 +2,329 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_objnod.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_objnod.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_objnod.c,v 1.24 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.24 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span>
-<a name="l00036"></a>00036 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <math.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/* cpl */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00050"></a>00050 <span class="preprocessor">#include <irplib_utils.h></span>  
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/* sinfoni */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00077"></a>00077 <span class="comment">                            Functions prototypes</span>
-<a name="l00078"></a>00078 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_create(cpl_plugin *) ;
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_exec(cpl_plugin *) ;
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_destroy(cpl_plugin *) ;
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod(cpl_parameterlist *, cpl_frameset *);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00085"></a>00085 <span class="comment">                            Static variables</span>
-<a name="l00086"></a>00086 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description1[] =
-<a name="l00089"></a>00089 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00090"></a>00090 <span class="stringliteral">"The input files are science object and sky frames with tags \n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"OBJECT_NODDING and SKY_NODDING\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"Master calibration frames:\n"</span>;
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description2[] =
-<a name="l00096"></a>00096 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description3[] =
-<a name="l00105"></a>00105 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"A reference table with the position of the first "</span>
-<a name="l00107"></a>00107 <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span>
-<a name="l00108"></a>00108 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00109"></a>00109 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description4[] =
-<a name="l00118"></a>00118 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"esorex --params sinfo_rec_objnod\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"esorex --help sinfo_rec_objnod\n"</span>
-<a name="l00121"></a>00121 <span class="stringliteral">"\n"</span>;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description[1300];
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">                                Functions code</span>
-<a name="l00127"></a>00127 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="keywordtype">int</span>
-<a name="l00147"></a><a class="code" href="group__sinfo__rec__objnod.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00147</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00148"></a>00148 {
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00151"></a>00151   cpl_plugin *plugin = &recipe->interface;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   strcpy(sinfo_rec_objnod_description,sinfo_rec_objnod_description1);
-<a name="l00154"></a>00154   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description2);
-<a name="l00155"></a>00155   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description3);
-<a name="l00156"></a>00156   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description4);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   cpl_plugin_init(plugin,
-<a name="l00159"></a>00159           CPL_PLUGIN_API,
-<a name="l00160"></a>00160           SINFONI_BINARY_VERSION,
-<a name="l00161"></a>00161           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00162"></a>00162           <span class="stringliteral">"sinfo_rec_objnod"</span>,
-<a name="l00163"></a>00163           <span class="stringliteral">"Object data reduction"</span>,
-<a name="l00164"></a>00164            sinfo_rec_objnod_description,
-<a name="l00165"></a>00165           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00166"></a>00166           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,
-<a name="l00167"></a>00167           sinfo_get_license(),
-<a name="l00168"></a>00168           sinfo_rec_objnod_create,
-<a name="l00169"></a>00169           sinfo_rec_objnod_exec,
-<a name="l00170"></a>00170           sinfo_rec_objnod_destroy);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   cpl_pluginlist_append(list, plugin);
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="keywordflow">return</span> 0;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00186"></a>00186 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00187"></a>00187 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_create(cpl_plugin *plugin)
-<a name="l00188"></a>00188 {
-<a name="l00189"></a>00189     cpl_recipe      * recipe ;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00192"></a>00192     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00193"></a>00193         recipe = (cpl_recipe *)plugin ;
-<a name="l00194"></a>00194     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00195"></a>00195     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00196"></a>00196     cpl_error_reset();
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198    <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00199"></a>00199     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201   <span class="comment">/*</span>
-<a name="l00202"></a>00202 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00203"></a>00203 <span class="comment">   */</span>
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   sinfo_product_config_add(recipe->parameters);
-<a name="l00206"></a>00206   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00207"></a>00207   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00208"></a>00208   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210   <span class="keywordflow">return</span> 0;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00220"></a>00220 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00221"></a>00221 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_exec(cpl_plugin *plugin)
-<a name="l00222"></a>00222 {
-<a name="l00223"></a>00223      cpl_recipe  *   recipe ;
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00228"></a>00228     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00229"></a>00229         recipe = (cpl_recipe *)plugin ;
-<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00233"></a>00233         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00234"></a>00234 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00235"></a>00235         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00236"></a>00236     } 
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   <span class="keywordflow">return</span> sinfo_rec_objnod(recipe->parameters, recipe->frames);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00247"></a>00247 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00248"></a>00248 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_destroy(cpl_plugin *plugin)
-<a name="l00249"></a>00249 {
-<a name="l00250"></a>00250   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00253"></a>00253     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00254"></a>00254         recipe = (cpl_recipe *)plugin ;
-<a name="l00255"></a>00255     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259   <span class="keywordflow">return</span> 0;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00270"></a>00270 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 <span class="comment">/*</span>
-<a name="l00273"></a>00273 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00274"></a>00274 <span class="comment"> */</span>
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00277"></a>00277 {
-<a name="l00278"></a>00278   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;
-<a name="l00279"></a>00279   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00280"></a>00280         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00283"></a>00283     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00284"></a>00284     <span class="keywordflow">return</span> -1;
-<a name="l00285"></a>00285   }
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287   <span class="comment">/* =============================================================== </span>
-<a name="l00288"></a>00288 <span class="comment">     Defines several framesets each with a pair obj-sky, </span>
-<a name="l00289"></a>00289 <span class="comment">     stack each pair, put the results in set </span>
-<a name="l00290"></a>00290 <span class="comment">     =============================================================== */</span>
-<a name="l00291"></a>00291    ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),
-<a name="l00292"></a>00292        <span class="stringliteral">"Cannot stack RAW frames"</span>) ;
-<a name="l00293"></a>00293  
-<a name="l00294"></a>00294   
-<a name="l00295"></a>00295   <span class="comment">/* =============================================================== </span>
-<a name="l00296"></a>00296 <span class="comment">     SCI OBJNOD </span>
-<a name="l00297"></a>00297 <span class="comment">     =============================================================== */</span>
-<a name="l00298"></a>00298       
-<a name="l00299"></a>00299    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00300"></a>00300    sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);
-<a name="l00301"></a>00301    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304    ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),
-<a name="l00305"></a>00305        <span class="stringliteral">"COADDING CUBES"</span>) ;
-<a name="l00306"></a>00306        
-<a name="l00307"></a>00307    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00308"></a>00308    sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);
-<a name="l00309"></a>00309    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311  cleanup:
-<a name="l00312"></a>00312   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00313"></a>00313     <span class="keywordflow">return</span> -1;
-<a name="l00314"></a>00314   } <span class="keywordflow">else</span> {
-<a name="l00315"></a>00315     <span class="keywordflow">return</span> 0;
-<a name="l00316"></a>00316   }
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_objnod.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_objnod.c,v 1.24 2007/10/26 09:40:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.24 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <irplib_utils.h></span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description1[] =</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"The input files are science object and sky frames with tags \n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"OBJECT_NODDING and SKY_NODDING\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description2[] =</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description3[] =</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"A reference table with the position of the first "</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description4[] =</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"esorex --params sinfo_rec_objnod\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"esorex --help sinfo_rec_objnod\n"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_objnod_description[1300];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="code" href="group__sinfo__rec__objnod.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  147</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   strcpy(sinfo_rec_objnod_description,sinfo_rec_objnod_description1);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description2);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description3);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   strcat(sinfo_rec_objnod_description,sinfo_rec_objnod_description4);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           <span class="stringliteral">"sinfo_rec_objnod"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           <span class="stringliteral">"Object data reduction"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>            sinfo_rec_objnod_description,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_rec_objnod_create,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           sinfo_rec_objnod_exec,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           sinfo_rec_objnod_destroy);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>      cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     } </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">return</span> sinfo_rec_objnod(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_objnod(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> <span class="comment">     Defines several framesets each with a pair obj-sky, </span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">     stack each pair, put the results in set </span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>    ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>        <span class="stringliteral">"Cannot stack RAW frames"</span>) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>  </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">     SCI OBJNOD </span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>    sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>    ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>        <span class="stringliteral">"COADDING CUBES"</span>) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>        </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>  cleanup:</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__psf_8c_source.html b/html/sinfo__rec__psf_8c_source.html
index 8352d32..2ccaf8a 100644
--- a/html/sinfo__rec__psf_8c_source.html
+++ b/html/sinfo__rec__psf_8c_source.html
@@ -2,306 +2,337 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_psf.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_psf.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_psf.c,v 1.22 2008/02/12 14:56:50 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/*</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00027"></a>00027 <span class="comment"> */</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029  <span class="comment">/****************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">  *          Psf Frames Data Reduction                          *</span>
-<a name="l00031"></a>00031 <span class="comment">  ****************************************************************/</span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#endif</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                Includes</span>
-<a name="l00038"></a>00038 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/* cpl */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00047"></a>00047  
-<a name="l00048"></a>00048 <span class="comment">/* irplib */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/* sinfoni */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_new_stdstar.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_new_psf.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                            Functions prototypes</span>
-<a name="l00074"></a>00074 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_create(cpl_plugin *) ;
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_exec(cpl_plugin *) ;
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_destroy(cpl_plugin *) ;
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf(cpl_parameterlist *, cpl_frameset *);
-<a name="l00079"></a>00079 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment">                            Static variables</span>
-<a name="l00081"></a>00081 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description1[] =
-<a name="l00084"></a>00084 <span class="stringliteral">"This recipe performs psf standard data reduction.\n"</span>
-<a name="l00085"></a>00085 <span class="stringliteral">"The input files are science object and sky frames with tags\n"</span>
-<a name="l00086"></a>00086 <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span>
-<a name="l00087"></a>00087 <span class="stringliteral">"Master calibration frames:\n"</span>;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description2[] =
-<a name="l00090"></a>00090 <span class="stringliteral">"Master calibration frames:\n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image (tag=WAVE_MAP)\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"A corresponding (band,preoptics) master flat field (tag=MASTER_FLAT_LAMP)\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map (tag=MASTER_BP_MAP)\n"</span>
-<a name="l00094"></a>00094 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame (tag=SLIT_POS)\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"A corresponding (band) distortion table (tag=DISTORTION)\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"A corresponding (band) slitlet distance table (tag=SLITLETS_DISTANCE)\n"</span>;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description3[] =
-<a name="l00100"></a>00100 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"the chosen operation\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"A reference table with the position of the first column (tag=FIRST_COLUMN)\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00107"></a>00107 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00108"></a>00108 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00109"></a>00109 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description4[] =
-<a name="l00112"></a>00112 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"esorex --params sinfo_rec_psf\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"esorex --help sinfo_rec_psf\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"\n"</span>;
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description[1300];
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00123"></a>00123 <span class="comment">                                Functions code</span>
-<a name="l00124"></a>00124 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00130"></a>00130 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00141"></a>00141 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="keywordtype">int</span>
-<a name="l00146"></a><a class="code" href="group__sinfo__rec__psf.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00146</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00147"></a>00147 {
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00150"></a>00150   cpl_plugin *plugin = &recipe->interface;
-<a name="l00151"></a>00151   strcpy(sinfo_rec_psf_description,sinfo_rec_psf_description1);
-<a name="l00152"></a>00152   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description2);
-<a name="l00153"></a>00153   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description3);
-<a name="l00154"></a>00154   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description4);
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156   cpl_plugin_init(plugin,
-<a name="l00157"></a>00157           CPL_PLUGIN_API,
-<a name="l00158"></a>00158           SINFONI_BINARY_VERSION,
-<a name="l00159"></a>00159           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00160"></a>00160           <span class="stringliteral">"sinfo_rec_psf"</span>,
-<a name="l00161"></a>00161           <span class="stringliteral">"PSF star data reduction"</span>,
-<a name="l00162"></a>00162           sinfo_rec_psf_description,
-<a name="l00163"></a>00163           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00164"></a>00164           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00165"></a>00165           sinfo_get_license(),
-<a name="l00166"></a>00166           sinfo_rec_psf_create,
-<a name="l00167"></a>00167           sinfo_rec_psf_exec,
-<a name="l00168"></a>00168           sinfo_rec_psf_destroy);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170   cpl_pluginlist_append(list, plugin);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   <span class="keywordflow">return</span> 0;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 }
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00184"></a>00184 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00185"></a>00185 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_create(cpl_plugin *plugin)
-<a name="l00186"></a>00186 {
-<a name="l00187"></a>00187     cpl_recipe      * recipe ;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00190"></a>00190     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00191"></a>00191         recipe = (cpl_recipe *)plugin ;
-<a name="l00192"></a>00192     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00193"></a>00193     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00196"></a>00196     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   <span class="comment">/*</span>
-<a name="l00199"></a>00199 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00200"></a>00200 <span class="comment">   */</span>
-<a name="l00201"></a>00201   sinfo_product_config_add(recipe->parameters);
-<a name="l00202"></a>00202   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00203"></a>00203   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00204"></a>00204   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00205"></a>00205  <span class="keywordflow">return</span> 0;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 }
-<a name="l00208"></a>00208 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00214"></a>00214 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00215"></a>00215 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_exec(cpl_plugin *plugin)
-<a name="l00216"></a>00216 {
-<a name="l00217"></a>00217     cpl_recipe  *   recipe ;
-<a name="l00218"></a>00218     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00219"></a>00219     
-<a name="l00220"></a>00220     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00221"></a>00221     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00222"></a>00222         recipe = (cpl_recipe *)plugin ;
-<a name="l00223"></a>00223     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00226"></a>00226         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00227"></a>00227 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00228"></a>00228         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00229"></a>00229     } 
-<a name="l00230"></a>00230   <span class="keywordflow">return</span> sinfo_rec_psf(recipe->parameters, recipe->frames);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00240"></a>00240 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00241"></a>00241 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_destroy(cpl_plugin *plugin)
-<a name="l00242"></a>00242 {
-<a name="l00243"></a>00243     cpl_recipe  *   recipe ;
-<a name="l00244"></a>00244     
-<a name="l00245"></a>00245     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00246"></a>00246     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00247"></a>00247         recipe = (cpl_recipe *)plugin ;
-<a name="l00248"></a>00248     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   <span class="keywordflow">return</span> 0;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 }
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00264"></a>00264 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266 <span class="comment">/*</span>
-<a name="l00267"></a>00267 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00268"></a>00268 <span class="comment"> */</span>
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00271"></a>00271 sinfo_rec_psf(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00272"></a>00272 {
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;
-<a name="l00276"></a>00276   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00277"></a>00277         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00280"></a>00280     sinfo_msg(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00281"></a>00281     <span class="keywordflow">return</span> -1;
-<a name="l00282"></a>00282   }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284   <span class="comment">/* =============================================================== </span>
-<a name="l00285"></a>00285 <span class="comment">     Defines several framesets each with a pair obj-sky, </span>
-<a name="l00286"></a>00286 <span class="comment">     stack each pair, put the results in set </span>
-<a name="l00287"></a>00287 <span class="comment">     =============================================================== */</span>
-<a name="l00288"></a>00288   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),
-<a name="l00289"></a>00289                            <span class="stringliteral">"Cannot stack RAW frames"</span>) ;
-<a name="l00290"></a>00290  
-<a name="l00291"></a>00291   <span class="comment">/* =============================================================== </span>
-<a name="l00292"></a>00292 <span class="comment">     SCI OBJNOD </span>
-<a name="l00293"></a>00293 <span class="comment">     =============================================================== */</span>
-<a name="l00294"></a>00294   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00295"></a>00295   sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);
-<a name="l00296"></a>00296   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298   ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),
-<a name="l00299"></a>00299       <span class="stringliteral">"COADDING CUBES"</span>);
-<a name="l00300"></a>00300   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00301"></a>00301   sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);
-<a name="l00302"></a>00302   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304   <span class="comment">/* =============================================================== </span>
-<a name="l00305"></a>00305 <span class="comment">     PSF</span>
-<a name="l00306"></a>00306 <span class="comment">     =============================================================== */</span>
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00309"></a>00309   sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);
-<a name="l00310"></a>00310   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00311"></a>00311   ck0(sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>),<span class="stringliteral">"REDUCING PSF STD STAR FRAMES"</span>);
-<a name="l00312"></a>00312   sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ; 
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315  cleanup:
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00319"></a>00319     <span class="keywordflow">return</span> -1;
-<a name="l00320"></a>00320   } <span class="keywordflow">else</span> {
-<a name="l00321"></a>00321     <span class="keywordflow">return</span> 0;
-<a name="l00322"></a>00322   }
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_psf.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_psf.c,v 1.22 2008/02/12 14:56:50 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  *          Psf Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_new_stdstar.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_new_psf.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description1[] =</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="stringliteral">"This recipe performs psf standard data reduction.\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="stringliteral">"The input files are science object and sky frames with tags\n"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description2[] =</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"Master calibration frames:\n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image (tag=WAVE_MAP)\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field (tag=MASTER_FLAT_LAMP)\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map (tag=MASTER_BP_MAP)\n"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame (tag=SLIT_POS)\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"A corresponding (band) distortion table (tag=DISTORTION)\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"A corresponding (band) slitlet distance table (tag=SLITLETS_DISTANCE)\n"</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description3[] =</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"the chosen operation\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"A reference table with the position of the first column (tag=FIRST_COLUMN)\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description4[] =</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"esorex --params sinfo_rec_psf\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"esorex --help sinfo_rec_psf\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_psf_description[1300];</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="code" href="group__sinfo__rec__psf.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  146</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   strcpy(sinfo_rec_psf_description,sinfo_rec_psf_description1);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description2);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description3);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   strcat(sinfo_rec_psf_description,sinfo_rec_psf_description4);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           <span class="stringliteral">"sinfo_rec_psf"</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           <span class="stringliteral">"PSF star data reduction"</span>,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           sinfo_rec_psf_description,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           sinfo_rec_psf_create,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           sinfo_rec_psf_exec,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_rec_psf_destroy);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     } </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordflow">return</span> sinfo_rec_psf(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_psf_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> sinfo_rec_psf(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     sinfo_msg(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">     Defines several framesets each with a pair obj-sky, </span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">     stack each pair, put the results in set </span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                            <span class="stringliteral">"Cannot stack RAW frames"</span>) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>  </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">     SCI OBJNOD </span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       <span class="stringliteral">"COADDING CUBES"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">     PSF</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   ck0(sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>),<span class="stringliteral">"REDUCING PSF STD STAR FRAMES"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ; </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>  cleanup:</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__pupil_8c_source.html b/html/sinfo__rec__pupil_8c_source.html
index ac78f70..70877d9 100644
--- a/html/sinfo__rec__pupil_8c_source.html
+++ b/html/sinfo__rec__pupil_8c_source.html
@@ -2,279 +2,310 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_pupil.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_pupil.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_pupil.c,v 1.17 2008/02/12 14:56:50 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020  
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.17 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Wave_Cal Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/* cpl */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>      
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* irplib */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/* sinfoni */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_new_objnod.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00069"></a>00069 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00070"></a>00070 <span class="comment">                            Functions prototypes</span>
-<a name="l00071"></a>00071 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_create(cpl_plugin *);
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_exec(cpl_plugin *);
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_destroy(cpl_plugin *);
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil(cpl_parameterlist *, cpl_frameset *);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                            Static variables</span>
-<a name="l00079"></a>00079 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description1[] =
-<a name="l00081"></a>00081 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00082"></a>00082 <span class="stringliteral">"The input files are science object and sky frames \n"</span>
-<a name="l00083"></a>00083 <span class="stringliteral">"with tags OBJECT_NODDING and SKY_NODDING\n"</span>
-<a name="l00084"></a>00084 <span class="stringliteral">"Master calibration frames:\n"</span>;
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description2[] =
-<a name="l00088"></a>00088 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00090"></a>00090 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description3[] =
-<a name="l00097"></a>00097 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"A reference table with the position of the 1st column with tag FIRST_COLUMN\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description4[] =
-<a name="l00109"></a>00109 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"esorex --params sinfo_rec_pupil\n"</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"esorex --help sinfo_rec_pupil\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"\n"</span>;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description[1300];
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00117"></a>00117 <span class="comment">                                Functions code</span>
-<a name="l00118"></a>00118 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00119"></a>00119 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00123"></a>00123 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="keywordtype">int</span>
-<a name="l00137"></a><a class="code" href="group__sinfo__rec__pupil.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00137</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00141"></a>00141   cpl_plugin *plugin = &recipe->interface;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   strcpy(sinfo_rec_pupil_description,sinfo_rec_pupil_description1);
-<a name="l00145"></a>00145   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description2);
-<a name="l00146"></a>00146   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description3);
-<a name="l00147"></a>00147   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description4);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   cpl_plugin_init(plugin,
-<a name="l00150"></a>00150           CPL_PLUGIN_API,
-<a name="l00151"></a>00151           SINFONI_BINARY_VERSION,
-<a name="l00152"></a>00152           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00153"></a>00153           <span class="stringliteral">"sinfo_rec_pupil"</span>,
-<a name="l00154"></a>00154           <span class="stringliteral">"Pupil data reduction"</span>,
-<a name="l00155"></a>00155           sinfo_rec_pupil_description,
-<a name="l00156"></a>00156           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00157"></a>00157           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00158"></a>00158           sinfo_get_license(),
-<a name="l00159"></a>00159           sinfo_rec_pupil_create,
-<a name="l00160"></a>00160           sinfo_rec_pupil_exec,
-<a name="l00161"></a>00161           sinfo_rec_pupil_destroy);
-<a name="l00162"></a>00162  
-<a name="l00163"></a>00163   cpl_pluginlist_append(list, plugin);
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   <span class="keywordflow">return</span> 0;
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167 }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00177"></a>00177 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00178"></a>00178  
-<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_create(cpl_plugin *plugin)
-<a name="l00180"></a>00180 {
-<a name="l00181"></a>00181    cpl_recipe      * recipe ;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00185"></a>00185         recipe = (cpl_recipe *)plugin ;
-<a name="l00186"></a>00186     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00187"></a>00187     cpl_error_reset();
-<a name="l00188"></a>00188     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00191"></a>00191     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194   <span class="comment">/*</span>
-<a name="l00195"></a>00195 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00196"></a>00196 <span class="comment">   */</span>  
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   sinfo_product_config_add(recipe->parameters);
-<a name="l00199"></a>00199   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00200"></a>00200   sinfo_objnod_config_add(recipe->parameters);
-<a name="l00201"></a>00201   <span class="keywordflow">return</span> 0;
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 }
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00211"></a>00211 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_exec(cpl_plugin *plugin)
-<a name="l00215"></a>00215 {
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00218"></a>00218    <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00219"></a>00219     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00220"></a>00220         recipe = (cpl_recipe *)plugin ;
-<a name="l00221"></a>00221     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223   <span class="keywordflow">return</span> sinfo_rec_pupil(recipe->parameters, recipe->frames);
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 }
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00233"></a>00233 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00234"></a>00234 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_destroy(cpl_plugin *plugin)
-<a name="l00235"></a>00235 {
-<a name="l00236"></a>00236   cpl_recipe  *   recipe ;
-<a name="l00237"></a>00237     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00238"></a>00238     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00239"></a>00239         recipe = (cpl_recipe *)plugin ;
-<a name="l00240"></a>00240     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244   <span class="keywordflow">return</span> 0;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246 }
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00255"></a>00255 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00256"></a>00256 <span class="comment">/*</span>
-<a name="l00257"></a>00257 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00258"></a>00258 <span class="comment"> */</span>
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00261"></a>00261 {
-<a name="l00262"></a>00262  
-<a name="l00263"></a>00263   fake* fk=NULL;
-<a name="l00264"></a>00264   fk=sinfo_fake_new();
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00267"></a>00267         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269    ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271    <span class="comment">/* hidden parameters */</span>
-<a name="l00272"></a>00272    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00273"></a>00273    sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_PUPIL_LAMP_STACKED);
-<a name="l00274"></a>00274    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00275"></a>00275   
-<a name="l00276"></a>00276    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, NULL,
-<a name="l00277"></a>00277                     PRO_PUPIL_LAMP_STACKED,0,fk ),
-<a name="l00278"></a>00278        <span class="stringliteral">"Failed %s FRAME DETERMINATION"</span>, PRO_PUPIL_LAMP_STACKED);
-<a name="l00279"></a>00279    sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_PUPIL_LAMP_STACKED);
-<a name="l00280"></a>00280   
-<a name="l00281"></a>00281    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00282"></a>00282    sinfo_msg(<span class="stringliteral">"PUPIL DATA REDUCTION"</span>);
-<a name="l00283"></a>00283    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00284"></a>00284   
-<a name="l00285"></a>00285    ck0(sinfo_new_objnod(cpl_func,config, <span class="keyword">set</span>,PRO_COADD_PUPIL),
-<a name="l00286"></a>00286        <span class="stringliteral">"Failed PUPIL DATA REDUCTION"</span>) ;
-<a name="l00287"></a>00287    sinfo_msg(<span class="stringliteral">"PUPIL DATA REDUCTION SUCCESS"</span>);
-<a name="l00288"></a>00288  
-<a name="l00289"></a>00289  cleanup:
-<a name="l00290"></a>00290   sinfo_fake_delete(&fk);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00293"></a>00293     <span class="keywordflow">return</span> -1;
-<a name="l00294"></a>00294   } <span class="keywordflow">else</span> {
-<a name="l00295"></a>00295     <span class="keywordflow">return</span> 0;
-<a name="l00296"></a>00296   }
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_pupil.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_pupil.c,v 1.17 2008/02/12 14:56:50 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>  </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.17 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Wave_Cal Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span>      </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_new_objnod.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_create(cpl_plugin *);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_exec(cpl_plugin *);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_destroy(cpl_plugin *);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description1[] =</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="stringliteral">"The input files are science object and sky frames \n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="stringliteral">"with tags OBJECT_NODDING and SKY_NODDING\n"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="stringliteral">"Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description2[] =</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description3[] =</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"A reference table with the position of the 1st column with tag FIRST_COLUMN\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description4[] =</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"esorex --params sinfo_rec_pupil\n"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"esorex --help sinfo_rec_pupil\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_pupil_description[1300];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"><a class="code" href="group__sinfo__rec__pupil.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  137</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   strcpy(sinfo_rec_pupil_description,sinfo_rec_pupil_description1);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description2);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description3);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   strcat(sinfo_rec_pupil_description,sinfo_rec_pupil_description4);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>           <span class="stringliteral">"sinfo_rec_pupil"</span>,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>           <span class="stringliteral">"Pupil data reduction"</span>,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>           sinfo_rec_pupil_description,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           sinfo_rec_pupil_create,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           sinfo_rec_pupil_exec,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           sinfo_rec_pupil_destroy);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>  </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>  </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">   */</span>  </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   sinfo_objnod_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   <span class="keywordflow">return</span> sinfo_rec_pupil(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_pupil(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>  </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   fake* fk=NULL;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>    ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    <span class="comment">/* hidden parameters */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>    sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_PUPIL_LAMP_STACKED);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>    ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, NULL,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                     PRO_PUPIL_LAMP_STACKED,0,fk ),</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>        <span class="stringliteral">"Failed %s FRAME DETERMINATION"</span>, PRO_PUPIL_LAMP_STACKED);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>    sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_PUPIL_LAMP_STACKED);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>    sinfo_msg(<span class="stringliteral">"PUPIL DATA REDUCTION"</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>    ck0(sinfo_new_objnod(cpl_func,config, <span class="keyword">set</span>,PRO_COADD_PUPIL),</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>        <span class="stringliteral">"Failed PUPIL DATA REDUCTION"</span>) ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>    sinfo_msg(<span class="stringliteral">"PUPIL DATA REDUCTION SUCCESS"</span>);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>  </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>  cleanup:</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__stdstar_8c_source.html b/html/sinfo__rec__stdstar_8c_source.html
index 7139c9a..c68adee 100644
--- a/html/sinfo__rec__stdstar_8c_source.html
+++ b/html/sinfo__rec__stdstar_8c_source.html
@@ -2,315 +2,346 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_stdstar.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_stdstar.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_stdstar.c,v 1.22 2008/02/12 14:56:50 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.22 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Standard_Star Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/* cpl */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>      
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* irplib */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/* sinfoni */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_standard_star_config.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_new_stdstar.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00076"></a>00076 <span class="comment">                            Functions prototypes</span>
-<a name="l00077"></a>00077 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_create(cpl_plugin *) ;
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_exec(cpl_plugin *) ;
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_destroy(cpl_plugin *) ;
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar(cpl_parameterlist *, cpl_frameset *);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00084"></a>00084 <span class="comment">                            Static variables</span>
-<a name="l00085"></a>00085 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description1[] =
-<a name="l00088"></a>00088 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"The input files are science object and sky frames \n"</span>
-<a name="l00090"></a>00090 <span class="stringliteral">"with tags STD_NODDING and SKY_STD_NODDING\n"</span>;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description2[] =
-<a name="l00094"></a>00094 <span class="stringliteral">"Master calibration frames:\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description3[] =
-<a name="l00104"></a>00104 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"A reference table with the position of the first  column \n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"with tag FIRST_COLUMN\n"</span> 
-<a name="l00107"></a>00107 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00108"></a>00108 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00109"></a>00109 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description4[] =
-<a name="l00113"></a>00113 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"The std star spectrum image (PRO.CATG=STD_SPECTRUM)\n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"The std start spectrum and efficiency spectrum table (PRO.CATG=STD_SPECTRA)\n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"esorex --params sinfo_rec_stdstar\n"</span>
-<a name="l00121"></a>00121 <span class="stringliteral">"esorex --help sinfo_rec_stdstar\n"</span>
-<a name="l00122"></a>00122 <span class="stringliteral">"\n"</span>;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description[1300];
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00128"></a>00128 <span class="comment">                                Functions code</span>
-<a name="l00129"></a>00129 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00130"></a>00130 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00145"></a>00145 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 <span class="keywordtype">int</span>
-<a name="l00149"></a><a class="code" href="group__sinfo__rec__stdstar.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00149</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00153"></a>00153   cpl_plugin *plugin = &recipe->interface;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   strcpy(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description1);
-<a name="l00156"></a>00156   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description2);
-<a name="l00157"></a>00157   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description3);
-<a name="l00158"></a>00158   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description4);
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161   cpl_plugin_init(plugin,
-<a name="l00162"></a>00162           CPL_PLUGIN_API,
-<a name="l00163"></a>00163           SINFONI_BINARY_VERSION,
-<a name="l00164"></a>00164           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00165"></a>00165           <span class="stringliteral">"sinfo_rec_stdstar"</span>,
-<a name="l00166"></a>00166           <span class="stringliteral">"Standard star data reduction"</span>,
-<a name="l00167"></a>00167           sinfo_rec_stdstar_description,
-<a name="l00168"></a>00168           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00169"></a>00169           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00170"></a>00170           sinfo_get_license(),
-<a name="l00171"></a>00171           sinfo_rec_stdstar_create,
-<a name="l00172"></a>00172           sinfo_rec_stdstar_exec,
-<a name="l00173"></a>00173           sinfo_rec_stdstar_destroy);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   cpl_pluginlist_append(list, plugin);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="keywordflow">return</span> 0;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 }
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_create(cpl_plugin *plugin)
-<a name="l00195"></a>00195 {
-<a name="l00196"></a>00196     cpl_recipe      * recipe ;
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00199"></a>00199     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00200"></a>00200         recipe = (cpl_recipe *)plugin ;
-<a name="l00201"></a>00201     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00202"></a>00202     cpl_error_reset();
-<a name="l00203"></a>00203     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00206"></a>00206     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   <span class="comment">/*</span>
-<a name="l00210"></a>00210 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00211"></a>00211 <span class="comment">   */</span>
-<a name="l00212"></a>00212   sinfo_product_config_add(recipe->parameters);
-<a name="l00213"></a>00213   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00214"></a>00214   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00215"></a>00215   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00216"></a>00216   sinfo_standard_star_config_add(recipe->parameters);
-<a name="l00217"></a>00217   
-<a name="l00218"></a>00218   <span class="keywordflow">return</span> 0;
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00228"></a>00228 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_exec(cpl_plugin *plugin)
-<a name="l00230"></a>00230 {
-<a name="l00231"></a>00231     cpl_recipe  *   recipe ;
-<a name="l00232"></a>00232     
-<a name="l00233"></a>00233     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00234"></a>00234     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00235"></a>00235         recipe = (cpl_recipe *)plugin ;
-<a name="l00236"></a>00236     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   <span class="keywordflow">return</span> sinfo_rec_stdstar(recipe->parameters, recipe->frames);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00248"></a>00248 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00249"></a>00249 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_destroy(cpl_plugin *plugin)
-<a name="l00250"></a>00250 {
-<a name="l00251"></a>00251     cpl_recipe  *   recipe ;
-<a name="l00252"></a>00252     
-<a name="l00253"></a>00253     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00254"></a>00254     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00255"></a>00255         recipe = (cpl_recipe *)plugin ;
-<a name="l00256"></a>00256     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00259"></a>00259   <span class="keywordflow">return</span> 0;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 }
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00271"></a>00271 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 <span class="comment">/*</span>
-<a name="l00275"></a>00275 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00276"></a>00276 <span class="comment"> */</span>
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00279"></a>00279 sinfo_rec_stdstar(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00280"></a>00280 {
-<a name="l00281"></a>00281  
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;
-<a name="l00284"></a>00284   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00285"></a>00285         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00288"></a>00288     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00289"></a>00289     <span class="keywordflow">return</span> -1;
-<a name="l00290"></a>00290   }
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   <span class="comment">/* =============================================================== </span>
-<a name="l00293"></a>00293 <span class="comment">     Defines several framesets each with a pair obj-sky, </span>
-<a name="l00294"></a>00294 <span class="comment">     stack each pair, put the results in set </span>
-<a name="l00295"></a>00295 <span class="comment">     =============================================================== */</span>
-<a name="l00296"></a>00296   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),
-<a name="l00297"></a>00297       <span class="stringliteral">"Cannot stack RAW frames"</span>);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   <span class="comment">/* =============================================================== </span>
-<a name="l00300"></a>00300 <span class="comment">     SCI SCIENCE </span>
-<a name="l00301"></a>00301 <span class="comment">     =============================================================== */</span>
-<a name="l00302"></a>00302   
-<a name="l00303"></a>00303   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00304"></a>00304   sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);
-<a name="l00305"></a>00305   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307   ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),
-<a name="l00308"></a>00308       <span class="stringliteral">"COADDING CUBES"</span>) ;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00311"></a>00311   sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);
-<a name="l00312"></a>00312   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314   <span class="comment">/* =============================================================== </span>
-<a name="l00315"></a>00315 <span class="comment">     STDSTAR </span>
-<a name="l00316"></a>00316 <span class="comment">     =============================================================== */</span>
-<a name="l00317"></a>00317   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00318"></a>00318   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);
-<a name="l00319"></a>00319   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321   ck0(sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span> ),<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;
-<a name="l00322"></a>00322   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ; 
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325  cleanup:
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00328"></a>00328     <span class="keywordflow">return</span> -1;
-<a name="l00329"></a>00329   } <span class="keywordflow">else</span> {
-<a name="l00330"></a>00330     <span class="keywordflow">return</span> 0;
-<a name="l00331"></a>00331   }
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334 }
-<a name="l00335"></a>00335 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_stdstar.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_stdstar.c,v 1.22 2008/02/12 14:56:50 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.22 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Standard_Star Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span>      </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_standard_star_config.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_new_stdstar.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description1[] =</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"The input files are science object and sky frames \n"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"with tags STD_NODDING and SKY_STD_NODDING\n"</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description2[] =</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"Master calibration frames:\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description3[] =</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"A reference table with the position of the first  column \n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"with tag FIRST_COLUMN\n"</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description4[] =</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"The std star spectrum image (PRO.CATG=STD_SPECTRUM)\n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"The std start spectrum and efficiency spectrum table (PRO.CATG=STD_SPECTRA)\n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"esorex --params sinfo_rec_stdstar\n"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="stringliteral">"esorex --help sinfo_rec_stdstar\n"</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_stdstar_description[1300];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="code" href="group__sinfo__rec__stdstar.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  149</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   strcpy(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description1);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description2);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description3);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   strcat(sinfo_rec_stdstar_description,sinfo_rec_stdstar_description4);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           <span class="stringliteral">"sinfo_rec_stdstar"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           <span class="stringliteral">"Standard star data reduction"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           sinfo_rec_stdstar_description,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           sinfo_rec_stdstar_create,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>           sinfo_rec_stdstar_exec,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>           sinfo_rec_stdstar_destroy);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   sinfo_standard_star_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">return</span> sinfo_rec_stdstar(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_stdstar_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> sinfo_rec_stdstar(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>  </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">     Defines several framesets each with a pair obj-sky, </span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">     stack each pair, put the results in set </span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   ck0(sinfo_cub_stk_frames(config,&<span class="keyword">set</span>,cpl_func,&pro_ctg_cube),</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="stringliteral">"Cannot stack RAW frames"</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">     SCI SCIENCE </span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   sinfo_msg(<span class="stringliteral">"COADDING CUBES"</span>);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   ck0(sinfo_new_cubes_coadd(cpl_func,config, <span class="keyword">set</span>, pro_ctg_cube),</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       <span class="stringliteral">"COADDING CUBES"</span>) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   sinfo_msg(<span class="stringliteral">"COADDED CUBES"</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">     STDSTAR </span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   ck0(sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span> ),<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ; </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>  cleanup:</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__utils_8c_source.html b/html/sinfo__rec__utils_8c_source.html
index 0c2578e..c63726d 100644
--- a/html/sinfo__rec__utils_8c_source.html
+++ b/html/sinfo__rec__utils_8c_source.html
@@ -2,1380 +2,1411 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_utils.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_utils.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_utils.c,v 1.14 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.14 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="comment">//Used only for sinfo_propertylist_has</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_new_cubes_build.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00048"></a>00048 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                            Functions prototypes</span>
-<a name="l00050"></a>00050 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_stk_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag);
-<a name="l00058"></a>00058 <span class="comment">/*</span>
-<a name="l00059"></a>00059 <span class="comment">static int</span>
-<a name="l00060"></a>00060 <span class="comment">sinfo_get_obj_sky_frm_pair(cpl_frameset** obj_set,</span>
-<a name="l00061"></a>00061 <span class="comment">                           const int i,</span>
-<a name="l00062"></a>00062 <span class="comment">                           cpl_frame** obj_frm,</span>
-<a name="l00063"></a>00063 <span class="comment">                           cpl_frame** sky_frm);</span>
-<a name="l00064"></a>00064 <span class="comment">*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00067"></a>00067 <span class="comment">                            Static variables</span>
-<a name="l00068"></a>00068 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00071"></a>00071 <span class="comment">                                Functions code</span>
-<a name="l00072"></a>00072 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keywordtype">int</span>
-<a name="l00075"></a>00075 sinfo_new_stack_frames(cpl_parameterlist* cfg,
-<a name="l00076"></a>00076                        cpl_frameset* <span class="keyword">set</span>,
-<a name="l00077"></a>00077                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,
-<a name="l00078"></a>00078                        <span class="keyword">const</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>,
-<a name="l00079"></a>00079                        fake* fk,
-<a name="l00080"></a>00080                        <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)
-<a name="l00081"></a>00081 {
-<a name="l00082"></a>00082   <span class="keywordtype">int</span> ind=0;
-<a name="l00083"></a>00083   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00084"></a>00084   sinfo_msg(<span class="stringliteral">"PREPARE STACKED SET %d"</span>,<span class="keywordtype">id</span>) ;
-<a name="l00085"></a>00085   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00086"></a>00086   ck0(ind=sinfo_new_prepare_stacked_frames(plugin_id,cfg, <span class="keyword">set</span>, NULL,procatg,
-<a name="l00087"></a>00087                        <span class="keywordtype">id</span>,fk),<span class="stringliteral">" no: %d"</span>, ind) ;
-<a name="l00088"></a>00088   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00089"></a>00089   sinfo_msg(<span class="stringliteral">"PREPARED STACKED SET %d"</span>,<span class="keywordtype">id</span>) ;
-<a name="l00090"></a>00090   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00091"></a>00091   <span class="keywordflow">return</span> 0;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093  cleanup:
-<a name="l00094"></a>00094   <span class="keywordflow">return</span> -1;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 }
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 cpl_frame*
-<a name="l00099"></a>00099 sinfo_new_get_dummy_sky(cpl_frameset* obj_set)
-<a name="l00100"></a>00100 {
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102   cpl_imagelist* obj_list=NULL;
-<a name="l00103"></a>00103   cpl_image* fake_sky=NULL;
-<a name="l00104"></a>00104   cpl_frame* frame=NULL;
-<a name="l00105"></a>00105   cpl_frame* sky_frame=NULL;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107   cpl_propertylist* plist=NULL;
-<a name="l00108"></a>00108   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110   check_nomsg(obj_list=cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0));
-<a name="l00111"></a>00111   check_nomsg(fake_sky = cpl_imagelist_collapse_median_create(obj_list));
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113   check_nomsg(frame = cpl_frameset_get_frame(obj_set,0));
-<a name="l00114"></a>00114   strcpy(filename,cpl_frame_get_filename(frame));
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116   check(plist = cpl_propertylist_load(filename, 0),
-<a name="l00117"></a>00117     <span class="stringliteral">"getting header from reference ima frame %s"</span>,filename);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l00120"></a>00120     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);
-<a name="l00121"></a>00121   } <span class="keywordflow">else</span> {
-<a name="l00122"></a>00122     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;
-<a name="l00123"></a>00123   }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   check(cpl_image_save(fake_sky, <span class="stringliteral">"out_fake_sky.fits"</span>, CPL_BPP_IEEE_FLOAT,
-<a name="l00126"></a>00126                plist,CPL_IO_DEFAULT),
-<a name="l00127"></a>00127     <span class="stringliteral">"Cannot save the product %s"</span>,<span class="stringliteral">"out_fake_sky.fits"</span>);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   sinfo_free_propertylist(&plist);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   check_nomsg(sky_frame = cpl_frame_new()) ;
-<a name="l00132"></a>00132   check_nomsg(cpl_frame_set_filename(sky_frame, <span class="stringliteral">"out_fake_sky.fits"</span>)) ;
-<a name="l00133"></a>00133   check_nomsg(cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY)) ;
-<a name="l00134"></a>00134   check_nomsg(cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE));
-<a name="l00135"></a>00135   <span class="comment">/*</span>
-<a name="l00136"></a>00136 <span class="comment">  check_nomsg(cpl_frame_set_group(sky_frame, CPL_FRAME_GROUP_PRODUCT));</span>
-<a name="l00137"></a>00137 <span class="comment">  */</span>
-<a name="l00138"></a>00138   check_nomsg(cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL));
-<a name="l00139"></a>00139   sinfo_free_image(&fake_sky);
-<a name="l00140"></a>00140   sinfo_free_imagelist(&obj_list);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142   <span class="keywordflow">return</span> sky_frame;
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144  cleanup:
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   sinfo_free_propertylist(&plist) ;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148   <span class="keywordflow">return</span> NULL;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 <span class="keywordtype">int</span>
-<a name="l00155"></a>00155 sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** <span class="keyword">set</span>,
-<a name="l00156"></a>00156 cpl_parameterlist* config,fake* fk, <span class="keywordtype">char</span>* pro_ctg, <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)
-<a name="l00157"></a>00157 {
-<a name="l00158"></a>00158   <span class="keywordtype">int</span> nobj=0;
-<a name="l00159"></a>00159   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00160"></a>00160   <span class="keywordtype">int</span> ntot=0;
-<a name="l00161"></a>00161   <span class="keywordtype">int</span> nstk=0;
-<a name="l00162"></a>00162   <span class="keywordtype">int</span> nwrk=0;
-<a name="l00163"></a>00163   <span class="keywordtype">int</span> i=0;
-<a name="l00164"></a>00164   <span class="keywordtype">int</span> k=0;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166   <span class="keywordtype">double</span> mjd_obj=0;
-<a name="l00167"></a>00167   <span class="keywordtype">double</span> mjd_sky_inf=0;
-<a name="l00168"></a>00168   <span class="keywordtype">double</span> mjd_sky_sup=0;
-<a name="l00169"></a>00169   <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ];
-<a name="l00170"></a>00170   <span class="keywordtype">char</span> out_name[FILE_NAME_SZ];
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   <span class="keywordtype">char</span> fake_sky_name[FILE_NAME_SZ];
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   cpl_frame* obj_frm=NULL;
-<a name="l00175"></a>00175   cpl_frame* sky_frm=NULL;
-<a name="l00176"></a>00176   cpl_frame* cdb_frm=NULL;
-<a name="l00177"></a>00177   cpl_frame* wrk_frm=NULL;
-<a name="l00178"></a>00178   cpl_frame* tot_frm=NULL;
-<a name="l00179"></a>00179   cpl_frame* dup_frm=NULL;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   cpl_frame* sky_frm_inf=NULL;
-<a name="l00182"></a>00182   cpl_frame* sky_frm_sup=NULL;
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184   cpl_propertylist* plist=NULL;
-<a name="l00185"></a>00185   cpl_frameset* wrk_set=NULL;
-<a name="l00186"></a>00186   cpl_frameset* cdb_set=NULL;
-<a name="l00187"></a>00187   cpl_frameset* tot_set=NULL;
-<a name="l00188"></a>00188   cpl_frameset* stk_set=NULL;
-<a name="l00189"></a>00189   cpl_image* sky_ima=NULL;
-<a name="l00190"></a>00190   <span class="keywordtype">double</span> obj_cumx=0;
-<a name="l00191"></a>00191   <span class="keywordtype">double</span> obj_cumy=0;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   <span class="keywordtype">double</span> sky_sup_cumx=0;
-<a name="l00194"></a>00194   <span class="keywordtype">double</span> sky_sup_cumy=0;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196   <span class="keywordtype">double</span> sky_inf_cumx=0;
-<a name="l00197"></a>00197   <span class="keywordtype">double</span> sky_inf_cumy=0;
-<a name="l00198"></a>00198   <span class="keywordtype">double</span> cum_thres=0.5;
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200   check_nomsg(cdb_set=cpl_frameset_new());
-<a name="l00201"></a>00201   ck0(sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set),<span class="stringliteral">"Error extracting CDB frames"</span>);
-<a name="l00202"></a>00202   nobj=cpl_frameset_get_size(obj_set);
-<a name="l00203"></a>00203   ncdb=cpl_frameset_get_size(cdb_set);
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00214"></a>00214     mjd_obj    = sinfo_get_mjd_obs(obj_frm);
-<a name="l00215"></a>00215     obj_cumx=sinfo_get_cumoffsetx(obj_frm);
-<a name="l00216"></a>00216     obj_cumy=sinfo_get_cumoffsety(obj_frm);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     <span class="keywordflow">if</span>(i>0) {
-<a name="l00219"></a>00219        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
-<a name="l00220"></a>00220        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
-<a name="l00221"></a>00221        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
-<a name="l00222"></a>00222        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
-<a name="l00223"></a>00223     }
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225     <span class="keywordflow">if</span>(i<nobj-1) {
-<a name="l00226"></a>00226       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
-<a name="l00227"></a>00227       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
-<a name="l00228"></a>00228       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
-<a name="l00229"></a>00229       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
-<a name="l00230"></a>00230     }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     <span class="keywordflow">if</span>(i==0) {
-<a name="l00235"></a>00235          sky_frm = sky_frm_sup;
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i==(nobj-1)) {
-<a name="l00238"></a>00238          sky_frm = sky_frm_inf;
-<a name="l00239"></a>00239     } <span class="keywordflow">else</span> {
-<a name="l00240"></a>00240        <span class="keywordflow">if</span>( fabs( mjd_sky_inf - mjd_obj ) <
-<a name="l00241"></a>00241            fabs( mjd_sky_sup - mjd_obj ) ) {
-<a name="l00242"></a>00242          <span class="keywordflow">if</span>((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
-<a name="l00243"></a>00243             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
-<a name="l00244"></a>00244        sky_frm = sky_frm_inf;
-<a name="l00245"></a>00245      } <span class="keywordflow">else</span> {
-<a name="l00246"></a>00246        sky_frm = sky_frm_sup;
-<a name="l00247"></a>00247      }
-<a name="l00248"></a>00248        } <span class="keywordflow">else</span> {
-<a name="l00249"></a>00249          <span class="keywordflow">if</span>((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
-<a name="l00250"></a>00250             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
-<a name="l00251"></a>00251        sky_frm = sky_frm_sup;
-<a name="l00252"></a>00252      } <span class="keywordflow">else</span> {
-<a name="l00253"></a>00253        sky_frm = sky_frm_inf;
-<a name="l00254"></a>00254      }
-<a name="l00255"></a>00255        }
-<a name="l00256"></a>00256     }
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258     strcpy(sky_name,cpl_frame_get_filename(sky_frm));
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260     sinfo_msg(<span class="stringliteral">"obj: %s"</span>,cpl_frame_get_filename(obj_frm));
-<a name="l00261"></a>00261     sinfo_msg(<span class="stringliteral">"sky: %s"</span>,sky_name);
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="keywordflow">if</span> (strstr(sky_name, <span class="stringliteral">"."</span> ) != NULL ) {
-<a name="l00264"></a>00264       <span class="comment">/*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s","fake_",</span>
-<a name="l00265"></a>00265 <span class="comment">        basename(sky_name)); */</span>
-<a name="l00266"></a>00266       snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00267"></a>00267     } <span class="keywordflow">else</span> {
-<a name="l00268"></a>00268        snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
-<a name="l00269"></a>00269     }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     cknull(plist = cpl_propertylist_load(sky_name, 0),
-<a name="l00274"></a>00274       <span class="stringliteral">"getting header from reference ima frame %s"</span>,sky_name);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l00277"></a>00277       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);
-<a name="l00278"></a>00278     } <span class="keywordflow">else</span> {
-<a name="l00279"></a>00279       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;
-<a name="l00280"></a>00280     }
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,
-<a name="l00283"></a>00283                    plist,CPL_IO_DEFAULT),
-<a name="l00284"></a>00284                 <span class="stringliteral">"Cannot save the product %s"</span>,fake_sky_name);
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     sinfo_free_propertylist(&plist);
-<a name="l00287"></a>00287     sinfo_free_image(&sky_ima);
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
-<a name="l00290"></a>00290     <span class="comment">/* The following makes program crash</span>
-<a name="l00291"></a>00291 <span class="comment">       check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;</span>
-<a name="l00292"></a>00292 <span class="comment">    */</span>
-<a name="l00293"></a>00293     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
-<a name="l00294"></a>00294     <span class="comment">/* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */</span>
-<a name="l00295"></a>00295     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l00301"></a>00301     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l00304"></a>00304     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00308"></a>00308       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l00309"></a>00309       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l00310"></a>00310       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00311"></a>00311     }
-<a name="l00312"></a>00312     snprintf(out_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00313"></a>00313     nwrk=cpl_frameset_get_size(wrk_set);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
-<a name="l00317"></a>00317         <span class="stringliteral">"Error stacking frames"</span>);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
-<a name="l00320"></a>00320     <span class="comment">/* This commented as was screwing up the catalogue.</span>
-<a name="l00321"></a>00321 <span class="comment">    check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;</span>
-<a name="l00322"></a>00322 <span class="comment">    */</span>
-<a name="l00323"></a>00323     check_nomsg(stk_set=cpl_frameset_new());
-<a name="l00324"></a>00324     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
-<a name="l00325"></a>00325     nstk=cpl_frameset_get_size(stk_set);
-<a name="l00326"></a>00326     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {
-<a name="l00327"></a>00327       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
-<a name="l00328"></a>00328       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00329"></a>00329       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
-<a name="l00330"></a>00330     }
-<a name="l00331"></a>00331     sinfo_free_frameset(&stk_set);
-<a name="l00332"></a>00332     sinfo_free_frameset(&wrk_set);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334   }
-<a name="l00335"></a>00335   ntot=cpl_frameset_get_size(tot_set);
-<a name="l00336"></a>00336   <span class="keywordflow">for</span>(k=0;k<ntot;k++) {
-<a name="l00337"></a>00337     check_nomsg(tot_frm=cpl_frameset_get_frame(tot_set,k));
-<a name="l00338"></a>00338     check_nomsg(dup_frm=cpl_frame_duplicate(tot_frm));
-<a name="l00339"></a>00339     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));
-<a name="l00340"></a>00340   }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342   sinfo_free_frameset(&cdb_set);
-<a name="l00343"></a>00343   sinfo_free_frameset(&tot_set);
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345   <span class="keywordflow">return</span> 0;
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347  cleanup:
-<a name="l00348"></a>00348   sinfo_free_propertylist(&plist) ;
-<a name="l00349"></a>00349   sinfo_free_frameset(&cdb_set);
-<a name="l00350"></a>00350   sinfo_free_frameset(&tot_set);
-<a name="l00351"></a>00351   <span class="keywordflow">return</span> -1;
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 <span class="keywordtype">int</span>
-<a name="l00356"></a>00356 sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,
-<a name="l00357"></a>00357                                           cpl_frameset** <span class="keyword">set</span>,
-<a name="l00358"></a>00358                                           cpl_parameterlist* config,
-<a name="l00359"></a>00359                                           fake* fk,
-<a name="l00360"></a>00360                                           <span class="keywordtype">char</span>* pro_ctg,
-<a name="l00361"></a>00361                                           <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)
-<a name="l00362"></a>00362 {
-<a name="l00363"></a>00363   <span class="keywordtype">int</span> nobj=0;
-<a name="l00364"></a>00364   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00365"></a>00365   <span class="keywordtype">int</span> nwrk=0;
-<a name="l00366"></a>00366   <span class="keywordtype">int</span> i=0;
-<a name="l00367"></a>00367   <span class="keywordtype">int</span> k=0;
-<a name="l00368"></a>00368   <span class="keywordtype">int</span> ind=0;
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370   <span class="keywordtype">double</span> mjd_obj=0;
-<a name="l00371"></a>00371   <span class="keywordtype">double</span> mjd_sky_inf=0;
-<a name="l00372"></a>00372   <span class="keywordtype">double</span> mjd_sky_sup=0;
-<a name="l00373"></a>00373   <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ];
-<a name="l00374"></a>00374   <span class="keywordtype">char</span> out_name[FILE_NAME_SZ];
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376   <span class="keywordtype">char</span> fake_sky_name[FILE_NAME_SZ];
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378   cpl_frame* obj_frm=NULL;
-<a name="l00379"></a>00379   cpl_frame* sky_frm=NULL;
-<a name="l00380"></a>00380   cpl_frame* cdb_frm=NULL;
-<a name="l00381"></a>00381   cpl_frame* dup_frm=NULL;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   cpl_frame* sky_frm_inf=NULL;
-<a name="l00384"></a>00384   cpl_frame* sky_frm_sup=NULL;
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386   cpl_propertylist* plist=NULL;
-<a name="l00387"></a>00387   cpl_frameset* wrk_set=NULL;
-<a name="l00388"></a>00388   cpl_frameset* cdb_set=NULL;
-<a name="l00389"></a>00389   cpl_frameset* tot_set=NULL;
-<a name="l00390"></a>00390   cpl_frameset* pro_set=NULL;
-<a name="l00391"></a>00391   cpl_image* sky_ima=NULL;
-<a name="l00392"></a>00392   <span class="keywordtype">double</span> obj_cumx=0;
-<a name="l00393"></a>00393   <span class="keywordtype">double</span> obj_cumy=0;
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395   <span class="keywordtype">double</span> sky_sup_cumx=0;
-<a name="l00396"></a>00396   <span class="keywordtype">double</span> sky_sup_cumy=0;
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398   <span class="keywordtype">double</span> sky_inf_cumx=0;
-<a name="l00399"></a>00399   <span class="keywordtype">double</span> sky_inf_cumy=0;
-<a name="l00400"></a>00400   <span class="keywordtype">double</span> cum_thres=0.5;
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402   check_nomsg(cdb_set=cpl_frameset_new());
-<a name="l00403"></a>00403   ck0(sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set),<span class="stringliteral">"Error extracting CDB frames"</span>);
-<a name="l00404"></a>00404   nobj=cpl_frameset_get_size(obj_set);
-<a name="l00405"></a>00405   ncdb=cpl_frameset_get_size(cdb_set);
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408   check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00413"></a>00413     mjd_obj    = sinfo_get_mjd_obs(obj_frm);
-<a name="l00414"></a>00414     obj_cumx=sinfo_get_cumoffsetx(obj_frm);
-<a name="l00415"></a>00415     obj_cumy=sinfo_get_cumoffsety(obj_frm);
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <span class="keywordflow">if</span>(i>0) {
-<a name="l00418"></a>00418        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));
-<a name="l00419"></a>00419        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);
-<a name="l00420"></a>00420        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);
-<a name="l00421"></a>00421        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);
-<a name="l00422"></a>00422     }
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     <span class="keywordflow">if</span>(i<nobj-1) {
-<a name="l00425"></a>00425       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));
-<a name="l00426"></a>00426       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);
-<a name="l00427"></a>00427       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);
-<a name="l00428"></a>00428       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);
-<a name="l00429"></a>00429     }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433     <span class="keywordflow">if</span>(i==0) {
-<a name="l00434"></a>00434          sky_frm = sky_frm_sup;
-<a name="l00435"></a>00435     }
-<a name="l00436"></a>00436     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i==(nobj-1)) {
-<a name="l00437"></a>00437          sky_frm = sky_frm_inf;
-<a name="l00438"></a>00438     } <span class="keywordflow">else</span> {
-<a name="l00439"></a>00439        <span class="keywordflow">if</span>( fabs( mjd_sky_inf - mjd_obj ) <
-<a name="l00440"></a>00440            fabs( mjd_sky_sup - mjd_obj ) ) {
-<a name="l00441"></a>00441          <span class="keywordflow">if</span>((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||
-<a name="l00442"></a>00442             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {
-<a name="l00443"></a>00443        sky_frm = sky_frm_inf;
-<a name="l00444"></a>00444      } <span class="keywordflow">else</span> {
-<a name="l00445"></a>00445        sky_frm = sky_frm_sup;
-<a name="l00446"></a>00446      }
-<a name="l00447"></a>00447        } <span class="keywordflow">else</span> {
-<a name="l00448"></a>00448          <span class="keywordflow">if</span>((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||
-<a name="l00449"></a>00449             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {
-<a name="l00450"></a>00450        sky_frm = sky_frm_sup;
-<a name="l00451"></a>00451      } <span class="keywordflow">else</span> {
-<a name="l00452"></a>00452        sky_frm = sky_frm_inf;
-<a name="l00453"></a>00453      }
-<a name="l00454"></a>00454        }
-<a name="l00455"></a>00455     }
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458     strcpy(sky_name,cpl_frame_get_filename(sky_frm));
-<a name="l00459"></a>00459     sinfo_msg(<span class="stringliteral">"obj: %s"</span>,cpl_frame_get_filename(obj_frm));
-<a name="l00460"></a>00460     sinfo_msg(<span class="stringliteral">"sky: %s"</span>,sky_name);
-<a name="l00461"></a>00461     <span class="keywordflow">if</span> (strstr(sky_name, <span class="stringliteral">"."</span> ) != NULL ) {
-<a name="l00462"></a>00462       <span class="comment">/*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s",</span>
-<a name="l00463"></a>00463 <span class="comment">                 "fake_",basename(sky_name)); */</span>
-<a name="l00464"></a>00464       snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00465"></a>00465     } <span class="keywordflow">else</span> {
-<a name="l00466"></a>00466        snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
-<a name="l00467"></a>00467     }
-<a name="l00468"></a>00468 
-<a name="l00469"></a>00469     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
-<a name="l00470"></a>00470 
-<a name="l00471"></a>00471     cknull(plist = cpl_propertylist_load(sky_name, 0),
-<a name="l00472"></a>00472       <span class="stringliteral">"getting header from reference ima frame %s"</span>,sky_name);
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l00475"></a>00475       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);
-<a name="l00476"></a>00476     } <span class="keywordflow">else</span> {
-<a name="l00477"></a>00477       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;
-<a name="l00478"></a>00478     }
-<a name="l00479"></a>00479     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,
-<a name="l00480"></a>00480                    plist,CPL_IO_DEFAULT),
-<a name="l00481"></a>00481                 <span class="stringliteral">"Cannot save the product %s"</span>,fake_sky_name);
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483     sinfo_free_propertylist(&plist);
-<a name="l00484"></a>00484     sinfo_free_image(&sky_ima);
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;
-<a name="l00487"></a>00487     <span class="comment">/* The following makes program crash</span>
-<a name="l00488"></a>00488 <span class="comment">       check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;</span>
-<a name="l00489"></a>00489 <span class="comment">    */</span>
-<a name="l00490"></a>00490     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));
-<a name="l00491"></a>00491     <span class="comment">/* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */</span>
-<a name="l00492"></a>00492     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l00498"></a>00498     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l00501"></a>00501     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00502"></a>00502 
-<a name="l00503"></a>00503     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00504"></a>00504       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l00505"></a>00505       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l00506"></a>00506       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00507"></a>00507     }
-<a name="l00508"></a>00508     snprintf(out_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00509"></a>00509     nwrk=cpl_frameset_get_size(wrk_set);
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),
-<a name="l00513"></a>00513         <span class="stringliteral">"Error stacking frames"</span>);
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;
-<a name="l00517"></a>00517     <span class="comment">/* This commented as was screwing up the catalogue.</span>
-<a name="l00518"></a>00518 <span class="comment">    check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;</span>
-<a name="l00519"></a>00519 <span class="comment">    */</span>
-<a name="l00520"></a>00520     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);
-<a name="l00521"></a>00521     sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);
-<a name="l00522"></a>00522     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524     <span class="comment">/* cube generation */</span>
-<a name="l00525"></a>00525     ck0(ind=sinfo_new_cubes_build(plugin_id,config,wrk_set,pro_ctg,i),
-<a name="l00526"></a>00526     <span class="stringliteral">"GENERATING CUBE no. %d\n"</span>, ind) ;
-<a name="l00527"></a>00527     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);
-<a name="l00528"></a>00528     sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);
-<a name="l00529"></a>00529     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532     check_nomsg(sinfo_extract_frames_group_type(wrk_set,&pro_set,
-<a name="l00533"></a>00533                                                 CPL_FRAME_GROUP_PRODUCT));
-<a name="l00534"></a>00534     check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
-<a name="l00535"></a>00535     sinfo_free_frameset(&pro_set);
-<a name="l00536"></a>00536     sinfo_free_frameset(&wrk_set);
-<a name="l00537"></a>00537 
-<a name="l00538"></a>00538   } <span class="comment">/* end loop over object frames */</span>
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540   check_nomsg(sinfo_extract_frames_group_type(tot_set,&pro_set,
-<a name="l00541"></a>00541                                               CPL_FRAME_GROUP_PRODUCT));
-<a name="l00542"></a>00542   check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));
-<a name="l00543"></a>00543   sinfo_free_frameset(&pro_set);
-<a name="l00544"></a>00544   sinfo_free_frameset(&tot_set);
-<a name="l00545"></a>00545   sinfo_free_frameset(&cdb_set);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547   <span class="keywordflow">return</span> 0;
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549  cleanup:
-<a name="l00550"></a>00550   sinfo_free_image(&sky_ima);
-<a name="l00551"></a>00551   sinfo_free_propertylist(&plist) ;
-<a name="l00552"></a>00552   sinfo_free_frameset(&wrk_set);
-<a name="l00553"></a>00553   sinfo_free_frameset(&pro_set);
-<a name="l00554"></a>00554   sinfo_free_frameset(&cdb_set);
-<a name="l00555"></a>00555   sinfo_free_frameset(&tot_set);
-<a name="l00556"></a>00556   <span class="keywordflow">return</span> -1;
-<a name="l00557"></a>00557 
-<a name="l00558"></a>00558 }
-<a name="l00559"></a>00559 
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561 <span class="keywordtype">int</span> sinfo_new_sci_stk_frames(cpl_parameterlist* config,
-<a name="l00562"></a>00562                                  cpl_frameset** <span class="keyword">set</span>,
-<a name="l00563"></a>00563                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,
-<a name="l00564"></a>00564                                  <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube)
-<a name="l00565"></a>00565 {
-<a name="l00566"></a>00566   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];
-<a name="l00567"></a>00567   <span class="keywordtype">char</span> pro_ctg_stack[FILE_NAME_SZ];
-<a name="l00568"></a>00568   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];
-<a name="l00569"></a>00569   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571 
-<a name="l00572"></a>00572   cpl_frameset * obj_set=NULL;
-<a name="l00573"></a>00573   cpl_frameset * sky_set=NULL;
-<a name="l00574"></a>00574   cpl_frameset * cdb_set=NULL;
-<a name="l00575"></a>00575   cpl_frameset * wrk_set=NULL;
-<a name="l00576"></a>00576   cpl_frameset * stk_set=NULL;
-<a name="l00577"></a>00577   cpl_frameset * tot_set=NULL;
-<a name="l00578"></a>00578   cpl_frame     * obj_frm=NULL;
-<a name="l00579"></a>00579   cpl_frame    * sky_frm=NULL;
-<a name="l00580"></a>00580   cpl_frame    * cdb_frm=NULL;
-<a name="l00581"></a>00581   cpl_frame    * wrk_frm=NULL;
-<a name="l00582"></a>00582   cpl_frame    * dup_frm=NULL;
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584   <span class="keywordtype">int</span> nsky=0;
-<a name="l00585"></a>00585   <span class="keywordtype">int</span> nobj=0;
-<a name="l00586"></a>00586   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00587"></a>00587   <span class="keywordtype">int</span> ntot=0;
-<a name="l00588"></a>00588   <span class="keywordtype">int</span> nstk=0;
-<a name="l00589"></a>00589 
-<a name="l00590"></a>00590   <span class="keywordtype">int</span> i=0;
-<a name="l00591"></a>00591   <span class="keywordtype">int</span> j=0;
-<a name="l00592"></a>00592   <span class="keywordtype">int</span> k=0;
-<a name="l00593"></a>00593   <span class="keywordtype">int</span> aj_meth=0;
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596   <span class="keywordtype">double</span> mjd_obj=0;
-<a name="l00597"></a>00597   <span class="keywordtype">double</span> mjd_sky=0;
-<a name="l00598"></a>00598   <span class="keywordtype">double</span> mjd_sky_frm=0;
-<a name="l00599"></a>00599   cpl_parameter* p=NULL;
-<a name="l00600"></a>00600   fake* fk=sinfo_fake_new();
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602   check_nomsg(obj_set=cpl_frameset_new());
-<a name="l00603"></a>00603   check_nomsg(sky_set=cpl_frameset_new());
-<a name="l00604"></a>00604   check_nomsg(cdb_set=cpl_frameset_new());
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606   sinfo_extract_obj_frames(*<span class="keyword">set</span>,obj_set);
-<a name="l00607"></a>00607   sinfo_extract_sky_frames(*<span class="keyword">set</span>,sky_set);
-<a name="l00608"></a>00608   sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set);
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
-<a name="l00612"></a>00612          <span class="stringliteral">"No object frames in input set."</span>);
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614   strcpy(tag,cpl_frame_get_tag(obj_frm));
-<a name="l00615"></a>00615   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){
-<a name="l00616"></a>00616     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
-<a name="l00617"></a>00617   } <span class="keywordflow">else</span> {
-<a name="l00618"></a>00618     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);
-<a name="l00619"></a>00619     <span class="keywordflow">goto</span> cleanup;
-<a name="l00620"></a>00620   }
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_stk_procatg(tag)){
-<a name="l00624"></a>00624     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
-<a name="l00625"></a>00625   } <span class="keywordflow">else</span> {
-<a name="l00626"></a>00626     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);
-<a name="l00627"></a>00627     <span class="keywordflow">goto</span> cleanup;
-<a name="l00628"></a>00628   }
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630   nobj=cpl_frameset_get_size(obj_set);
-<a name="l00631"></a>00631   nsky=cpl_frameset_get_size(sky_set);
-<a name="l00632"></a>00632   ncdb=cpl_frameset_get_size(cdb_set);
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {
-<a name="l00635"></a>00635     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);
-<a name="l00636"></a>00636     <span class="keywordflow">goto</span> cleanup;
-<a name="l00637"></a>00637   }
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky != 0) ) {
-<a name="l00641"></a>00641     <span class="comment">/* We have either OBJ and SKY: we need to create OBJ-SKY pairs */</span>
-<a name="l00642"></a>00642     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00643"></a>00643     sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);
-<a name="l00644"></a>00644     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00645"></a>00645     check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00646"></a>00646     check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00647"></a>00647                                          <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));
-<a name="l00648"></a>00648     check_nomsg(cpl_parameter_set_int(p,0));
-<a name="l00649"></a>00649     cpl_msg_warning(cpl_func , <span class="stringliteral">"******** 1 *********"</span>);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652     <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654        check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00657"></a>00657        mjd_obj=sinfo_get_mjd_obs(obj_frm);
-<a name="l00658"></a>00658        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
-<a name="l00659"></a>00659        mjd_sky=sinfo_get_mjd_obs(sky_frm);
-<a name="l00660"></a>00660        strcpy(filename,cpl_frame_get_filename(obj_frm));
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663        <span class="keywordflow">for</span> (j=1;j<nsky;j++) {
-<a name="l00664"></a>00664           check_nomsg(mjd_sky_frm=sinfo_get_mjd_obs(
-<a name="l00665"></a>00665                                   cpl_frameset_get_frame(sky_set,j)));
-<a name="l00666"></a>00666           <span class="keywordflow">if</span>(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
-<a name="l00667"></a>00667              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {
-<a name="l00668"></a>00668             mjd_sky=mjd_sky_frm;
-<a name="l00669"></a>00669              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
-<a name="l00670"></a>00670        }
-<a name="l00671"></a>00671        }
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673        strcpy(filename,cpl_frame_get_filename(sky_frm));
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675 
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677        <span class="comment">/* monitors whih obj-sky frames are inserted in each wrk_set */</span>
-<a name="l00678"></a>00678        check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l00679"></a>00679        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00680"></a>00680        check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l00681"></a>00681        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00682"></a>00682 
-<a name="l00683"></a>00683        <span class="comment">/* merged CDB frames to work set */</span>
-<a name="l00684"></a>00684           <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00685"></a>00685             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l00686"></a>00686             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l00687"></a>00687         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00688"></a>00688       }
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691        <span class="comment">/* defines a new name for the output stacked frame */</span>
-<a name="l00692"></a>00692        snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00693"></a>00693        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
-<a name="l00694"></a>00694      <span class="stringliteral">"Cannot stack frames"</span>);
-<a name="l00695"></a>00695 
-<a name="l00696"></a>00696        check_nomsg(stk_set=cpl_frameset_new());
-<a name="l00697"></a>00697        sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
-<a name="l00698"></a>00698        nstk=cpl_frameset_get_size(stk_set);
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700        <span class="keywordflow">for</span>(k=0;k<nstk;k++) {
-<a name="l00701"></a>00701          check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
-<a name="l00702"></a>00702          check_nomsg(dup_frm = cpl_frame_duplicate(wrk_frm));
-<a name="l00703"></a>00703      check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
-<a name="l00704"></a>00704        }
-<a name="l00705"></a>00705        sinfo_free_frameset(&stk_set);
-<a name="l00706"></a>00706        sinfo_free_frameset(&wrk_set);
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708      }
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710     ntot=cpl_frameset_get_size(tot_set);
-<a name="l00711"></a>00711     <span class="keywordflow">for</span>(k=0;k<ntot;k++) {
-<a name="l00712"></a>00712       check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
-<a name="l00713"></a>00713       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00714"></a>00714       check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716     sinfo_free_frameset(&tot_set);
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718   }
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720  <span class="keywordflow">if</span> ( (nobj == 0) && (nsky != 0) ) {
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722      <span class="comment">/* ===============================================================</span>
-<a name="l00723"></a>00723 <span class="comment">        SKY FRAMES STACKING</span>
-<a name="l00724"></a>00724 <span class="comment">        =============================================================== */</span>
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726     {
-<a name="l00727"></a>00727     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00728"></a>00728     sinfo_msg(<span class="stringliteral">"SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED"</span>) ;
-<a name="l00729"></a>00729     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00730"></a>00730         <span class="keywordflow">goto</span> cleanup;
-<a name="l00731"></a>00731     }
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733   }
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736 
-<a name="l00737"></a>00737   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky == 0) ) {
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739      <span class="comment">/* ===============================================================</span>
-<a name="l00740"></a>00740 <span class="comment">        OBJ FRAMES STACKING</span>
-<a name="l00741"></a>00741 <span class="comment">        =============================================================== */</span>
-<a name="l00742"></a>00742     check_nomsg(p = cpl_parameterlist_find(config,
-<a name="l00743"></a>00743                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));
-<a name="l00744"></a>00744     check_nomsg(aj_meth =  cpl_parameter_get_int(p));
-<a name="l00745"></a>00745     <span class="keywordflow">if</span>(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747       aj_meth = 0;
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749     }
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751     <span class="keywordflow">if</span>(aj_meth == 2) {
-<a name="l00752"></a>00752 
-<a name="l00753"></a>00753       sinfo_msg(<span class="stringliteral">"Dummy sky case"</span>);
-<a name="l00754"></a>00754       sinfo_msg(<span class="stringliteral">"Fake sky is coming from median of all objects"</span>);
-<a name="l00755"></a>00755       cknull(sky_frm = sinfo_new_get_dummy_sky(obj_set),
-<a name="l00756"></a>00756          <span class="stringliteral">"Problem to get dummy frame"</span>);
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00759"></a>00759       sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);
-<a name="l00760"></a>00760       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00761"></a>00761       check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763 
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00768"></a>00768     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00769"></a>00769         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l00770"></a>00770     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00771"></a>00771         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l00772"></a>00772     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00773"></a>00773     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00774"></a>00774       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l00775"></a>00775           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l00776"></a>00776       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00777"></a>00777     }
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00780"></a>00780         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
-<a name="l00781"></a>00781                                    i,fk,recipe_id),
-<a name="l00782"></a>00782                                    <span class="stringliteral">"Error Stacking frame %d"</span>,i);
-<a name="l00783"></a>00783 
-<a name="l00784"></a>00784     check_nomsg(stk_set=cpl_frameset_new());
-<a name="l00785"></a>00785     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
-<a name="l00786"></a>00786     nstk=cpl_frameset_get_size(stk_set);
-<a name="l00787"></a>00787     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {
-<a name="l00788"></a>00788       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
-<a name="l00789"></a>00789           check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00790"></a>00790       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
-<a name="l00791"></a>00791     }
-<a name="l00792"></a>00792         sinfo_free_frameset(&stk_set);
-<a name="l00793"></a>00793         sinfo_free_frameset(&wrk_set);
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795       }
-<a name="l00796"></a>00796       check_nomsg(ntot=cpl_frameset_get_size(tot_set));
-<a name="l00797"></a>00797       <span class="keywordflow">for</span>(k=0;k<ntot;k++) {
-<a name="l00798"></a>00798     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
-<a name="l00799"></a>00799         check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00800"></a>00800     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));
-<a name="l00801"></a>00801       }
-<a name="l00802"></a>00802       sinfo_free_frameset(&tot_set);
-<a name="l00803"></a>00803       sinfo_free_frame(&sky_frm);
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aj_meth == 1 ) {
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807       sinfo_msg(<span class="stringliteral">"Dummy obj-sky case"</span>);
-<a name="l00808"></a>00808       sinfo_msg(<span class="stringliteral">"Fake sky is coming from each next object"</span>);
-<a name="l00809"></a>00809 
-<a name="l00810"></a>00810     <span class="keywordflow">if</span>(nobj > 1) {
-<a name="l00811"></a>00811       fk->is_fake_sky=1;
-<a name="l00812"></a>00812       ck0(sinfo_new_get_dummy_obj_sky_stacked(obj_set,&(*<span class="keyword">set</span>),config,
-<a name="l00813"></a>00813                           fk,pro_ctg_stack,recipe_id),
-<a name="l00814"></a>00814       <span class="stringliteral">"Found error to get obj-sky-stacked frame"</span>);
-<a name="l00815"></a>00815     } <span class="keywordflow">else</span> {
-<a name="l00816"></a>00816       sinfo_msg(<span class="stringliteral">"Only one object frame, no sky"</span>);
-<a name="l00817"></a>00817           ck0(sinfo_new_stack_frames(config,*<span class="keyword">set</span>,pro_ctg_stack,0,fk,recipe_id),
-<a name="l00818"></a>00818               <span class="stringliteral">"Error stacking frame"</span>);
-<a name="l00819"></a>00819     }
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821     } <span class="keywordflow">else</span> {
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00824"></a>00824       sinfo_msg(<span class="stringliteral">"staks each OBJECT "</span>);
-<a name="l00825"></a>00825       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00826"></a>00826       tot_set=cpl_frameset_new();
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00831"></a>00831     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00832"></a>00832         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l00833"></a>00833     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00834"></a>00834     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00835"></a>00835       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l00836"></a>00836           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l00837"></a>00837       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00842"></a>00842         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
-<a name="l00843"></a>00843                                    i,fk,recipe_id),<span class="stringliteral">"Error stacking frame %d"</span>,i);
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845     check_nomsg(stk_set=cpl_frameset_new());
-<a name="l00846"></a>00846     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
-<a name="l00847"></a>00847     check_nomsg(nstk=cpl_frameset_get_size(stk_set));
-<a name="l00848"></a>00848     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {
-<a name="l00849"></a>00849       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));
-<a name="l00850"></a>00850       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00851"></a>00851       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));
-<a name="l00852"></a>00852     }
-<a name="l00853"></a>00853         sinfo_free_frameset(&stk_set);
-<a name="l00854"></a>00854         sinfo_free_frameset(&wrk_set);
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856       }
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858       check_nomsg(ntot=cpl_frameset_get_size(tot_set));
-<a name="l00859"></a>00859       <span class="keywordflow">for</span>(k=0;k<ntot;k++) {
-<a name="l00860"></a>00860     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));
-<a name="l00861"></a>00861     check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));
-<a name="l00862"></a>00862     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));
-<a name="l00863"></a>00863       }
-<a name="l00864"></a>00864       sinfo_free_frameset(&tot_set);
-<a name="l00865"></a>00865     }
-<a name="l00866"></a>00866   }
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868   sinfo_free_frameset(&obj_set);
-<a name="l00869"></a>00869   sinfo_free_frameset(&sky_set);
-<a name="l00870"></a>00870   sinfo_free_frameset(&cdb_set);
-<a name="l00871"></a>00871   sinfo_fake_delete(&fk);
-<a name="l00872"></a>00872 
-<a name="l00873"></a>00873   <span class="keywordflow">return</span> 0;
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877  cleanup:
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879     sinfo_free_frame(&sky_frm);
-<a name="l00880"></a>00880     sinfo_free_frameset(&wrk_set);
-<a name="l00881"></a>00881     sinfo_free_frameset(&tot_set);
-<a name="l00882"></a>00882     sinfo_free_frameset(&obj_set);
-<a name="l00883"></a>00883     sinfo_free_frameset(&sky_set);
-<a name="l00884"></a>00884     sinfo_free_frameset(&cdb_set);
-<a name="l00885"></a>00885     sinfo_fake_delete(&fk);
-<a name="l00886"></a>00886     <span class="keywordflow">return</span> -1;
-<a name="l00887"></a>00887 
-<a name="l00888"></a>00888 }
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894 
-<a name="l00895"></a>00895 
-<a name="l00896"></a>00896 <span class="keywordtype">int</span> sinfo_cub_stk_frames(cpl_parameterlist* config,
-<a name="l00897"></a>00897                                  cpl_frameset** <span class="keyword">set</span>,
-<a name="l00898"></a>00898                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,
-<a name="l00899"></a>00899                                  <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube)
-<a name="l00900"></a>00900 {
-<a name="l00901"></a>00901   cpl_frame     * obj_frm=NULL;
-<a name="l00902"></a>00902   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];
-<a name="l00903"></a>00903   <span class="keywordtype">char</span> pro_ctg_stack[FILE_NAME_SZ];
-<a name="l00904"></a>00904   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];
-<a name="l00905"></a>00905   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908   cpl_frameset * obj_set=NULL;
-<a name="l00909"></a>00909   cpl_frameset * sky_set=NULL;
-<a name="l00910"></a>00910   cpl_frameset * cdb_set=NULL;
-<a name="l00911"></a>00911   cpl_frameset * wrk_set=NULL;
-<a name="l00912"></a>00912   cpl_frameset * tot_set=NULL;
-<a name="l00913"></a>00913   cpl_frameset * pro_set=NULL;
-<a name="l00914"></a>00914   cpl_frame    * sky_frm=NULL;
-<a name="l00915"></a>00915   cpl_frame    * cdb_frm=NULL;
-<a name="l00916"></a>00916   cpl_frame    * dup_frm=NULL;
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918   <span class="keywordtype">int</span> nsky=0;
-<a name="l00919"></a>00919   <span class="keywordtype">int</span> nobj=0;
-<a name="l00920"></a>00920   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922   <span class="keywordtype">int</span> i=0;
-<a name="l00923"></a>00923   <span class="keywordtype">int</span> j=0;
-<a name="l00924"></a>00924   <span class="keywordtype">int</span> k=0;
-<a name="l00925"></a>00925   <span class="keywordtype">int</span> aj_meth=0;
-<a name="l00926"></a>00926   <span class="keywordtype">int</span> ind=0;
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928   <span class="keywordtype">double</span> mjd_obj=0;
-<a name="l00929"></a>00929   <span class="keywordtype">double</span> mjd_sky=0;
-<a name="l00930"></a>00930   <span class="keywordtype">double</span> mjd_sky_frm=0;
-<a name="l00931"></a>00931   cpl_parameter* p=NULL;
-<a name="l00932"></a>00932   fake* fk=sinfo_fake_new();
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934   obj_set=cpl_frameset_new();
-<a name="l00935"></a>00935   sky_set=cpl_frameset_new();
-<a name="l00936"></a>00936   cdb_set=cpl_frameset_new();
-<a name="l00937"></a>00937 
-<a name="l00938"></a>00938   sinfo_extract_obj_frames(*<span class="keyword">set</span>,obj_set);
-<a name="l00939"></a>00939   sinfo_extract_sky_frames(*<span class="keyword">set</span>,sky_set);
-<a name="l00940"></a>00940   sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set);
-<a name="l00941"></a>00941 
-<a name="l00942"></a>00942   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),
-<a name="l00943"></a>00943          <span class="stringliteral">"No object frames in input set."</span>);
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946   strcpy(tag,cpl_frame_get_tag(obj_frm));
-<a name="l00947"></a>00947   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){
-<a name="l00948"></a>00948     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
-<a name="l00949"></a>00949   } <span class="keywordflow">else</span> {
-<a name="l00950"></a>00950     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);
-<a name="l00951"></a>00951     <span class="keywordflow">goto</span> cleanup;
-<a name="l00952"></a>00952   }
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954 
-<a name="l00955"></a>00955   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_stk_procatg(tag)){
-<a name="l00956"></a>00956     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));
-<a name="l00957"></a>00957   } <span class="keywordflow">else</span> {
-<a name="l00958"></a>00958     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);
-<a name="l00959"></a>00959     <span class="keywordflow">goto</span> cleanup;
-<a name="l00960"></a>00960   }
-<a name="l00961"></a>00961 
-<a name="l00962"></a>00962   nobj=cpl_frameset_get_size(obj_set);
-<a name="l00963"></a>00963   nsky=cpl_frameset_get_size(sky_set);
-<a name="l00964"></a>00964   ncdb=cpl_frameset_get_size(cdb_set);
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {
-<a name="l00967"></a>00967     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);
-<a name="l00968"></a>00968     <span class="keywordflow">goto</span> cleanup;
-<a name="l00969"></a>00969   }
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971 
-<a name="l00972"></a>00972   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky != 0) ) {
-<a name="l00973"></a>00973     <span class="comment">/* We have either OBJ and SKY: we need to create OBJ-SKY pairs */</span>
-<a name="l00974"></a>00974     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00975"></a>00975     sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);
-<a name="l00976"></a>00976     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00977"></a>00977 
-<a name="l00978"></a>00978     check_nomsg(tot_set=cpl_frameset_new());
-<a name="l00979"></a>00979     check_nomsg(p = cpl_parameterlist_find(config,
-<a name="l00980"></a>00980                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));
-<a name="l00981"></a>00981     check_nomsg(cpl_parameter_set_int(p,0));
-<a name="l00982"></a>00982 
-<a name="l00983"></a>00983     <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985        cknull_nomsg(wrk_set=cpl_frameset_new());
-<a name="l00986"></a>00986        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l00987"></a>00987        mjd_obj=sinfo_get_mjd_obs(obj_frm);
-<a name="l00988"></a>00988        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));
-<a name="l00989"></a>00989        mjd_sky=sinfo_get_mjd_obs(sky_frm);
-<a name="l00990"></a>00990        strcpy(filename,cpl_frame_get_filename(obj_frm));
-<a name="l00991"></a>00991 
-<a name="l00992"></a>00992 
-<a name="l00993"></a>00993        <span class="keywordflow">for</span> (j=1;j<nsky;j++) {
-<a name="l00994"></a>00994           mjd_sky_frm = sinfo_get_mjd_obs(cpl_frameset_get_frame(sky_set,j));
-<a name="l00995"></a>00995           <span class="keywordflow">if</span>(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <
-<a name="l00996"></a>00996              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {
-<a name="l00997"></a>00997             mjd_sky=mjd_sky_frm;
-<a name="l00998"></a>00998              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));
-<a name="l00999"></a>00999        }
-<a name="l01000"></a>01000        }
-<a name="l01001"></a>01001        strcpy(filename,cpl_frame_get_filename(sky_frm));
-<a name="l01002"></a>01002 
-<a name="l01003"></a>01003 
-<a name="l01004"></a>01004 
-<a name="l01005"></a>01005        <span class="comment">/* monitors whih obj-sky frames are inserted in each wrk_set */</span>
-<a name="l01006"></a>01006        cknull_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l01007"></a>01007        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01008"></a>01008        cknull_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l01009"></a>01009        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011        <span class="comment">/* merged CDB frames to work set */</span>
-<a name="l01012"></a>01012           <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l01013"></a>01013             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l01014"></a>01014             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l01015"></a>01015         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01016"></a>01016       }
-<a name="l01017"></a>01017 
-<a name="l01018"></a>01018 
-<a name="l01019"></a>01019        <span class="comment">/* defines a new name for the output stacked frame */</span>
-<a name="l01020"></a>01020        snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l01021"></a>01021        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),
-<a name="l01022"></a>01022        <span class="stringliteral">"Cannot stack frames"</span>);
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024        <span class="comment">/* cube generation */</span>
-<a name="l01025"></a>01025        ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
-<a name="l01026"></a>01026                      *pro_ctg_cube,i),
-<a name="l01027"></a>01027        <span class="stringliteral">"GENERATING CUBE no. %d\n"</span>, ind) ;
-<a name="l01028"></a>01028 
-<a name="l01029"></a>01029        check_nomsg(sinfo_extract_frames_group_type(wrk_set,
-<a name="l01030"></a>01030                                                    &pro_set,
-<a name="l01031"></a>01031                                                    CPL_FRAME_GROUP_PRODUCT));
-<a name="l01032"></a>01032        check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
-<a name="l01033"></a>01033        sinfo_free_frameset(&pro_set);
-<a name="l01034"></a>01034        sinfo_free_frameset(&wrk_set);
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037     }
-<a name="l01038"></a>01038 
-<a name="l01039"></a>01039     check_nomsg(sinfo_extract_frames_group_type(tot_set,
-<a name="l01040"></a>01040                                                 &pro_set,
-<a name="l01041"></a>01041                                                 CPL_FRAME_GROUP_PRODUCT));
-<a name="l01042"></a>01042     check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));
-<a name="l01043"></a>01043     sinfo_free_frameset(&pro_set);
-<a name="l01044"></a>01044     sinfo_free_frameset(&tot_set);
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046   }
-<a name="l01047"></a>01047 
-<a name="l01048"></a>01048 
-<a name="l01049"></a>01049  <span class="keywordflow">if</span> ( (nobj == 0) && (nsky != 0) ) {
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051      <span class="comment">/* ===============================================================</span>
-<a name="l01052"></a>01052 <span class="comment">        SKY FRAMES STACKING</span>
-<a name="l01053"></a>01053 <span class="comment">        =============================================================== */</span>
-<a name="l01054"></a>01054 
-<a name="l01055"></a>01055     {
-<a name="l01056"></a>01056     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01057"></a>01057     sinfo_msg(<span class="stringliteral">"SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED"</span>) ;
-<a name="l01058"></a>01058     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01059"></a>01059         <span class="keywordflow">goto</span> cleanup;
-<a name="l01060"></a>01060     }
-<a name="l01061"></a>01061 
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063   }
-<a name="l01064"></a>01064 
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky == 0) ) {
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069      <span class="comment">/* ===============================================================</span>
-<a name="l01070"></a>01070 <span class="comment">        OBJ FRAMES STACKING</span>
-<a name="l01071"></a>01071 <span class="comment">        =============================================================== */</span>
-<a name="l01072"></a>01072       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l01073"></a>01073                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));
-<a name="l01074"></a>01074       check_nomsg(aj_meth =  cpl_parameter_get_int(p));
-<a name="l01075"></a>01075       <span class="keywordflow">if</span>(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {
-<a name="l01076"></a>01076 
-<a name="l01077"></a>01077     aj_meth = 0;
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079       }
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081     <span class="keywordflow">if</span>(aj_meth == 2) {
-<a name="l01082"></a>01082 
-<a name="l01083"></a>01083       sinfo_msg(<span class="stringliteral">"Dummy sky case"</span>);
-<a name="l01084"></a>01084       sinfo_msg(<span class="stringliteral">"Fake sky is coming from median of all objects"</span>);
-<a name="l01085"></a>01085       <span class="keywordflow">if</span>( (sky_frm = sinfo_new_get_dummy_sky(obj_set)) == NULL) {
-<a name="l01086"></a>01086 
-<a name="l01087"></a>01087      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);
-<a name="l01088"></a>01088 
-<a name="l01089"></a>01089     <span class="keywordflow">return</span> -1;
-<a name="l01090"></a>01090 
-<a name="l01091"></a>01091       }
-<a name="l01092"></a>01092       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01093"></a>01093       sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);
-<a name="l01094"></a>01094       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096       check_nomsg(tot_set=cpl_frameset_new());
-<a name="l01097"></a>01097 
-<a name="l01098"></a>01098 
-<a name="l01099"></a>01099       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l01100"></a>01100 
-<a name="l01101"></a>01101     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l01102"></a>01102     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l01103"></a>01103         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l01104"></a>01104     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01105"></a>01105         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));
-<a name="l01106"></a>01106     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01107"></a>01107     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l01108"></a>01108       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l01109"></a>01109           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l01110"></a>01110       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01111"></a>01111     }
-<a name="l01112"></a>01112 
-<a name="l01113"></a>01113     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l01114"></a>01114         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
-<a name="l01115"></a>01115                                    i,fk,recipe_id),<span class="stringliteral">"Error Stacking frame %d"</span>,i);
-<a name="l01116"></a>01116 
-<a name="l01117"></a>01117 
-<a name="l01118"></a>01118         <span class="comment">/* cube generation */</span>
-<a name="l01119"></a>01119         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
-<a name="l01120"></a>01120                       *pro_ctg_cube,i),
-<a name="l01121"></a>01121         <span class="stringliteral">"Error GENERATING CUBE no. %d\n"</span>, ind) ;
-<a name="l01122"></a>01122 
-<a name="l01123"></a>01123 
-<a name="l01124"></a>01124 
-<a name="l01125"></a>01125 
-<a name="l01126"></a>01126         check_nomsg(sinfo_extract_frames_group_type(wrk_set,
-<a name="l01127"></a>01127                                                     &pro_set,
-<a name="l01128"></a>01128                                                     CPL_FRAME_GROUP_PRODUCT));
-<a name="l01129"></a>01129         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
-<a name="l01130"></a>01130         sinfo_free_frameset(&pro_set);
-<a name="l01131"></a>01131         sinfo_free_frameset(&wrk_set);
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133 
-<a name="l01134"></a>01134       }
-<a name="l01135"></a>01135       check_nomsg(sinfo_extract_frames_group_type(tot_set,
-<a name="l01136"></a>01136                                                   &pro_set,
-<a name="l01137"></a>01137                                                   CPL_FRAME_GROUP_PRODUCT));
-<a name="l01138"></a>01138       check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));
-<a name="l01139"></a>01139       sinfo_free_frameset(&pro_set);
-<a name="l01140"></a>01140       sinfo_free_frameset(&tot_set);
-<a name="l01141"></a>01141       sinfo_free_frame(&sky_frm);
-<a name="l01142"></a>01142     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aj_meth == 1 ) {
-<a name="l01143"></a>01143 
-<a name="l01144"></a>01144 
-<a name="l01145"></a>01145         sinfo_msg(<span class="stringliteral">"Dummy obj-sky case"</span>);
-<a name="l01146"></a>01146         sinfo_msg(<span class="stringliteral">"Fake sky is coming from each next object"</span>);
-<a name="l01147"></a>01147 
-<a name="l01148"></a>01148     <span class="keywordflow">if</span>(nobj > 1) {
-<a name="l01149"></a>01149       fk->is_fake_sky=1;
-<a name="l01150"></a>01150       ck0(sinfo_get_dummy_obj_sky_stacked_and_cubes(obj_set,&(*<span class="keyword">set</span>),config,
-<a name="l01151"></a>01151                           fk,pro_ctg_stack,recipe_id),
-<a name="l01152"></a>01152          <span class="stringliteral">"Found error to get obj-sky-stacked frame"</span>);
-<a name="l01153"></a>01153 
-<a name="l01154"></a>01154     } <span class="keywordflow">else</span> {
-<a name="l01155"></a>01155       sinfo_msg(<span class="stringliteral">"Only one object frame, no sky"</span>);
-<a name="l01156"></a>01156       check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l01157"></a>01157             <span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>));
-<a name="l01158"></a>01158       check_nomsg(cpl_parameter_set_bool(p,FALSE));
-<a name="l01159"></a>01159 
-<a name="l01160"></a>01160           ck0(sinfo_new_stack_frames(config,*<span class="keyword">set</span>,pro_ctg_stack,0,fk,recipe_id),
-<a name="l01161"></a>01161               <span class="stringliteral">"Error stacking frame"</span>);
-<a name="l01162"></a>01162 
-<a name="l01163"></a>01163       <span class="comment">/* cube generation */</span>
-<a name="l01164"></a>01164       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01165"></a>01165       sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);
-<a name="l01166"></a>01166       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01167"></a>01167       ck0(sinfo_new_cubes_build(recipe_id,config,*<span class="keyword">set</span>,*pro_ctg_cube,i),
-<a name="l01168"></a>01168           <span class="stringliteral">"Error GENERATING CUBE %d"</span>, i) ;
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01171"></a>01171       sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);
-<a name="l01172"></a>01172       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01173"></a>01173 
-<a name="l01174"></a>01174     }
-<a name="l01175"></a>01175 
-<a name="l01176"></a>01176     } <span class="keywordflow">else</span> { <span class="comment">/* aj_meth == 0 */</span>
-<a name="l01177"></a>01177 
-<a name="l01178"></a>01178       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01179"></a>01179       sinfo_msg(<span class="stringliteral">"staks each OBJECT "</span>);
-<a name="l01180"></a>01180       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01181"></a>01181       check_nomsg(tot_set=cpl_frameset_new());
-<a name="l01182"></a>01182 
-<a name="l01183"></a>01183       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {
-<a name="l01184"></a>01184 
-<a name="l01185"></a>01185     check_nomsg(wrk_set=cpl_frameset_new());
-<a name="l01186"></a>01186     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));
-<a name="l01187"></a>01187         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));
-<a name="l01188"></a>01188     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01189"></a>01189     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l01190"></a>01190       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));
-<a name="l01191"></a>01191           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));
-<a name="l01192"></a>01192       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));
-<a name="l01193"></a>01193     }
-<a name="l01194"></a>01194 
-<a name="l01195"></a>01195 
-<a name="l01196"></a>01196     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l01197"></a>01197         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,
-<a name="l01198"></a>01198                                    i,fk,recipe_id),<span class="stringliteral">"Error stacking frame %d"</span>,i);
-<a name="l01199"></a>01199 
-<a name="l01200"></a>01200 
-<a name="l01201"></a>01201         <span class="comment">/* cube generation */</span>
-<a name="l01202"></a>01202       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01203"></a>01203       sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);
-<a name="l01204"></a>01204       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01205"></a>01205         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,
-<a name="l01206"></a>01206                       *pro_ctg_cube,i),
-<a name="l01207"></a>01207         <span class="stringliteral">"Error GENERATING CUBE no. %d\n"</span>, ind) ;
-<a name="l01208"></a>01208 
-<a name="l01209"></a>01209       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01210"></a>01210       sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);
-<a name="l01211"></a>01211       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l01212"></a>01212         check_nomsg(sinfo_extract_frames_group_type(wrk_set,
-<a name="l01213"></a>01213                                                     &pro_set,
-<a name="l01214"></a>01214                                                     CPL_FRAME_GROUP_PRODUCT));
-<a name="l01215"></a>01215         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));
-<a name="l01216"></a>01216         sinfo_free_frameset(&pro_set);
-<a name="l01217"></a>01217         sinfo_free_frameset(&wrk_set);
-<a name="l01218"></a>01218 
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220       }
-<a name="l01221"></a>01221 
-<a name="l01222"></a>01222 
-<a name="l01223"></a>01223      check_nomsg(sinfo_extract_frames_group_type(tot_set,
-<a name="l01224"></a>01224                                                  &pro_set,
-<a name="l01225"></a>01225                                                  CPL_FRAME_GROUP_PRODUCT));
-<a name="l01226"></a>01226      check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));
-<a name="l01227"></a>01227      sinfo_free_frameset(&pro_set);
-<a name="l01228"></a>01228      sinfo_free_frameset(&tot_set);
-<a name="l01229"></a>01229 
-<a name="l01230"></a>01230     }
-<a name="l01231"></a>01231   }
-<a name="l01232"></a>01232   sinfo_free_frameset(&obj_set);
-<a name="l01233"></a>01233   sinfo_free_frameset(&sky_set);
-<a name="l01234"></a>01234   sinfo_free_frameset(&cdb_set);
-<a name="l01235"></a>01235   sinfo_fake_delete(&fk);
-<a name="l01236"></a>01236 
-<a name="l01237"></a>01237   <span class="keywordflow">return</span> 0;
-<a name="l01238"></a>01238 
-<a name="l01239"></a>01239  cleanup:
-<a name="l01240"></a>01240 
-<a name="l01241"></a>01241     sinfo_free_frameset(&wrk_set);
-<a name="l01242"></a>01242     sinfo_free_frameset(&tot_set);
-<a name="l01243"></a>01243     sinfo_free_frameset(&obj_set);
-<a name="l01244"></a>01244     sinfo_free_frameset(&sky_set);
-<a name="l01245"></a>01245     sinfo_free_frameset(&cdb_set);
-<a name="l01246"></a>01246     sinfo_fake_delete(&fk);
-<a name="l01247"></a>01247     <span class="keywordflow">return</span> -1;
-<a name="l01248"></a>01248 
-<a name="l01249"></a>01249 
-<a name="l01250"></a>01250 }
-<a name="l01251"></a>01251 
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_stk_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag)
-<a name="l01255"></a>01255 {
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_stack=NULL;
-<a name="l01258"></a>01258 
-<a name="l01259"></a>01259   <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"OBJ"</span>) != NULL) {
-<a name="l01260"></a>01260     pro_ctg_stack=PRO_OBJECT_NODDING_STACKED;
-<a name="l01261"></a>01261   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PSF"</span>) != NULL) {
-<a name="l01262"></a>01262     pro_ctg_stack=PRO_PSF_CALIBRATOR_STACKED;
-<a name="l01263"></a>01263   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"STD"</span>) != NULL) {
-<a name="l01264"></a>01264     pro_ctg_stack=PRO_STD_NODDING_STACKED;
-<a name="l01265"></a>01265   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PUPIL"</span>) != NULL) {
-<a name="l01266"></a>01266     pro_ctg_stack=PRO_PUPIL_LAMP_STACKED;
-<a name="l01267"></a>01267   } <span class="keywordflow">else</span> {
-<a name="l01268"></a>01268     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"frame tag %s not supported"</span>,tag);
-<a name="l01269"></a>01269     <span class="keywordflow">return</span> NULL;
-<a name="l01270"></a>01270   }
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272   <span class="keywordflow">return</span> pro_ctg_stack;
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274 }
-<a name="l01275"></a>01275 <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_obj_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag)
-<a name="l01276"></a>01276 {
-<a name="l01277"></a>01277   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube=NULL;
-<a name="l01278"></a>01278 
-<a name="l01279"></a>01279   <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"OBJ"</span>) != NULL) {
-<a name="l01280"></a>01280     pro_ctg_cube=PRO_COADD_OBJ;
-<a name="l01281"></a>01281   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PSF"</span>) != NULL) {
-<a name="l01282"></a>01282     pro_ctg_cube=PRO_COADD_PSF;
-<a name="l01283"></a>01283   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"STD"</span>) != NULL) {
-<a name="l01284"></a>01284     pro_ctg_cube=PRO_COADD_STD;
-<a name="l01285"></a>01285   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PUPIL"</span>) != NULL) {
-<a name="l01286"></a>01286     pro_ctg_cube=PRO_COADD_PUPIL;
-<a name="l01287"></a>01287   } <span class="keywordflow">else</span> {
-<a name="l01288"></a>01288     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"frame tag %s not supported"</span>,tag);
-<a name="l01289"></a>01289     <span class="keywordflow">return</span> NULL;
-<a name="l01290"></a>01290   }
-<a name="l01291"></a>01291 
-<a name="l01292"></a>01292   <span class="keywordflow">return</span> pro_ctg_cube;
-<a name="l01293"></a>01293 
-<a name="l01294"></a>01294 }
-<a name="l01295"></a>01295 
-<a name="l01296"></a>01296 <span class="comment">/*</span>
-<a name="l01297"></a>01297 <span class="comment">static int</span>
-<a name="l01298"></a>01298 <span class="comment">sinfo_get_obj_sky_frm_pair(</span>
-<a name="l01299"></a>01299 <span class="comment">cpl_frameset** obj_set,</span>
-<a name="l01300"></a>01300 <span class="comment">const int i,</span>
-<a name="l01301"></a>01301 <span class="comment">cpl_frame** obj_frm,</span>
-<a name="l01302"></a>01302 <span class="comment">cpl_frame** sky_frm)</span>
-<a name="l01303"></a>01303 <span class="comment">{</span>
-<a name="l01304"></a>01304 <span class="comment">  double mjd_obj=0;</span>
-<a name="l01305"></a>01305 <span class="comment">  double mjd_sky_inf=0;</span>
-<a name="l01306"></a>01306 <span class="comment">  double mjd_sky_sup=0;</span>
-<a name="l01307"></a>01307 <span class="comment"></span>
-<a name="l01308"></a>01308 <span class="comment"></span>
-<a name="l01309"></a>01309 <span class="comment">  double obj_cumx=0;</span>
-<a name="l01310"></a>01310 <span class="comment">  double obj_cumy=0;</span>
-<a name="l01311"></a>01311 <span class="comment"></span>
-<a name="l01312"></a>01312 <span class="comment">  double sky_sup_cumx=0;</span>
-<a name="l01313"></a>01313 <span class="comment">  double sky_sup_cumy=0;</span>
-<a name="l01314"></a>01314 <span class="comment"></span>
-<a name="l01315"></a>01315 <span class="comment">  double sky_inf_cumx=0;</span>
-<a name="l01316"></a>01316 <span class="comment">  double sky_inf_cumy=0;</span>
-<a name="l01317"></a>01317 <span class="comment">  double cum_thres=0.5;</span>
-<a name="l01318"></a>01318 <span class="comment">  int nobj=0;</span>
-<a name="l01319"></a>01319 <span class="comment">  cpl_frame* sky_frm_inf=NULL;</span>
-<a name="l01320"></a>01320 <span class="comment">  cpl_frame* sky_frm_sup=NULL;</span>
-<a name="l01321"></a>01321 <span class="comment"></span>
-<a name="l01322"></a>01322 <span class="comment">  check_nomsg(*obj_frm=cpl_frameset_get_frame(*obj_set,i));</span>
-<a name="l01323"></a>01323 <span class="comment">  mjd_obj    = sinfo_get_mjd_obs(*obj_frm);</span>
-<a name="l01324"></a>01324 <span class="comment">  obj_cumx=sinfo_get_cumoffsetx(*obj_frm);</span>
-<a name="l01325"></a>01325 <span class="comment">  obj_cumy=sinfo_get_cumoffsety(*obj_frm);</span>
-<a name="l01326"></a>01326 <span class="comment"></span>
-<a name="l01327"></a>01327 <span class="comment">  if(i>0) {</span>
-<a name="l01328"></a>01328 <span class="comment">    check_nomsg(sky_frm_inf=cpl_frameset_get_frame(*obj_set,i-1));</span>
-<a name="l01329"></a>01329 <span class="comment">    mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);</span>
-<a name="l01330"></a>01330 <span class="comment">    sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);</span>
-<a name="l01331"></a>01331 <span class="comment">    sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);</span>
-<a name="l01332"></a>01332 <span class="comment">  }</span>
-<a name="l01333"></a>01333 <span class="comment"></span>
-<a name="l01334"></a>01334 <span class="comment">  if(i<nobj-1) {</span>
-<a name="l01335"></a>01335 <span class="comment">    check_nomsg(sky_frm_sup=cpl_frameset_get_frame(*obj_set,i+1));</span>
-<a name="l01336"></a>01336 <span class="comment">    mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);</span>
-<a name="l01337"></a>01337 <span class="comment">    sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);</span>
-<a name="l01338"></a>01338 <span class="comment">    sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);</span>
-<a name="l01339"></a>01339 <span class="comment">  }</span>
-<a name="l01340"></a>01340 <span class="comment"></span>
-<a name="l01341"></a>01341 <span class="comment">  if(i==0) {</span>
-<a name="l01342"></a>01342 <span class="comment">    *sky_frm = sky_frm_sup;</span>
-<a name="l01343"></a>01343 <span class="comment">  } else if(i==(nobj-1)) {</span>
-<a name="l01344"></a>01344 <span class="comment">    *sky_frm = sky_frm_inf;</span>
-<a name="l01345"></a>01345 <span class="comment">  } else {</span>
-<a name="l01346"></a>01346 <span class="comment">       if( fabs( mjd_sky_inf - mjd_obj ) <</span>
-<a name="l01347"></a>01347 <span class="comment">           fabs( mjd_sky_sup - mjd_obj ) ) {</span>
-<a name="l01348"></a>01348 <span class="comment">         if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||</span>
-<a name="l01349"></a>01349 <span class="comment">            (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {</span>
-<a name="l01350"></a>01350 <span class="comment">       *sky_frm = sky_frm_inf;</span>
-<a name="l01351"></a>01351 <span class="comment">     } else {</span>
-<a name="l01352"></a>01352 <span class="comment">       *sky_frm = sky_frm_sup;</span>
-<a name="l01353"></a>01353 <span class="comment">     }</span>
-<a name="l01354"></a>01354 <span class="comment">       } else {</span>
-<a name="l01355"></a>01355 <span class="comment">         if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||</span>
-<a name="l01356"></a>01356 <span class="comment">            (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {</span>
-<a name="l01357"></a>01357 <span class="comment">       *sky_frm = sky_frm_sup;</span>
-<a name="l01358"></a>01358 <span class="comment">     } else {</span>
-<a name="l01359"></a>01359 <span class="comment">       *sky_frm = sky_frm_inf;</span>
-<a name="l01360"></a>01360 <span class="comment">     }</span>
-<a name="l01361"></a>01361 <span class="comment">       }</span>
-<a name="l01362"></a>01362 <span class="comment">  }</span>
-<a name="l01363"></a>01363 <span class="comment">  return 0;</span>
-<a name="l01364"></a>01364 <span class="comment"></span>
-<a name="l01365"></a>01365 <span class="comment"> cleanup:</span>
-<a name="l01366"></a>01366 <span class="comment">  return -1;</span>
-<a name="l01367"></a>01367 <span class="comment"></span>
-<a name="l01368"></a>01368 <span class="comment">}</span>
-<a name="l01369"></a>01369 <span class="comment">*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_utils.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_utils.c,v 1.15 2013/09/17 08:10:58 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2013/09/17 08:10:58 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.15 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">//Used only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_new_cubes_build.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_stk_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">sinfo_get_obj_sky_frm_pair(cpl_frameset** obj_set,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                           const int i,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                           cpl_frame** obj_frm,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                           cpl_frame** sky_frm);</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_new_stack_frames(cpl_parameterlist* cfg,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                        cpl_frameset* <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                        fake* fk,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   <span class="keywordtype">int</span> ind=0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   sinfo_msg(<span class="stringliteral">"PREPARE STACKED SET %d"</span>,<span class="keywordtype">id</span>) ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   ck0(ind=sinfo_new_prepare_stacked_frames(plugin_id,cfg, <span class="keyword">set</span>, NULL,procatg,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                        <span class="keywordtype">id</span>,fk),<span class="stringliteral">" no: %d"</span>, ind) ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   sinfo_msg(<span class="stringliteral">"PREPARED STACKED SET %d"</span>,<span class="keywordtype">id</span>) ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>  cleanup:</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> cpl_frame*</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> sinfo_new_get_dummy_sky(cpl_frameset* obj_set)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   cpl_imagelist* obj_list=NULL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_image* fake_sky=NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_frame* sky_frame=NULL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   check_nomsg(obj_list=cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   check_nomsg(fake_sky = cpl_imagelist_collapse_median_create(obj_list));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   check_nomsg(frame = cpl_frameset_get_frame(obj_set,0));</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   strcpy(filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   check(plist = cpl_propertylist_load(filename, 0),</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="stringliteral">"getting header from reference ima frame %s"</span>,filename);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   check(cpl_image_save(fake_sky, <span class="stringliteral">"out_fake_sky.fits"</span>, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                plist,CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="stringliteral">"Cannot save the product %s"</span>,<span class="stringliteral">"out_fake_sky.fits"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   check_nomsg(sky_frame = cpl_frame_new()) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   check_nomsg(cpl_frame_set_filename(sky_frame, <span class="stringliteral">"out_fake_sky.fits"</span>)) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   check_nomsg(cpl_frame_set_tag(sky_frame, PRO_SKY_DUMMY)) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   check_nomsg(cpl_frame_set_type(sky_frame, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">  check_nomsg(cpl_frame_set_group(sky_frame, CPL_FRAME_GROUP_PRODUCT));</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   check_nomsg(cpl_frame_set_level(sky_frame, CPL_FRAME_LEVEL_FINAL));</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   sinfo_free_image(&fake_sky);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   sinfo_free_imagelist(&obj_list);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordflow">return</span> sky_frame;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>  cleanup:</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> cpl_parameterlist* config,fake* fk, <span class="keywordtype">char</span>* pro_ctg, <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordtype">int</span> nobj=0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordtype">int</span> ntot=0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordtype">int</span> nstk=0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">int</span> nwrk=0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="keywordtype">double</span> mjd_obj=0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordtype">double</span> mjd_sky_inf=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordtype">double</span> mjd_sky_sup=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordtype">char</span> out_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">char</span> fake_sky_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_frame* obj_frm=NULL;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   cpl_frame* sky_frm=NULL;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   cpl_frame* cdb_frm=NULL;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   cpl_frame* wrk_frm=NULL;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   cpl_frame* tot_frm=NULL;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   cpl_frame* dup_frm=NULL;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_frame* sky_frm_inf=NULL;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   cpl_frame* sky_frm_sup=NULL;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_frameset* wrk_set=NULL;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_frameset* cdb_set=NULL;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   cpl_frameset* tot_set=NULL;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   cpl_frameset* stk_set=NULL;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   cpl_image* sky_ima=NULL;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordtype">double</span> obj_cumx=0;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="keywordtype">double</span> obj_cumy=0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">double</span> sky_sup_cumx=0;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">double</span> sky_sup_cumy=0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordtype">double</span> sky_inf_cumx=0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>   <span class="keywordtype">double</span> sky_inf_cumy=0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordtype">double</span> cum_thres=0.5;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   check_nomsg(cdb_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   ck0(sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set),<span class="stringliteral">"Error extracting CDB frames"</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   nobj=cpl_frameset_get_size(obj_set);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   ncdb=cpl_frameset_get_size(cdb_set);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     mjd_obj    = sinfo_get_mjd_obs(obj_frm);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     obj_cumx=sinfo_get_cumoffsetx(obj_frm);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     obj_cumy=sinfo_get_cumoffsety(obj_frm);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span>(i>0) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">if</span>(i<nobj-1) {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">if</span>(i==0) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>          sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i==(nobj-1)) {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>          sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>        <span class="keywordflow">if</span>( fabs( mjd_sky_inf - mjd_obj ) <</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>            fabs( mjd_sky_sup - mjd_obj ) ) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>          <span class="keywordflow">if</span>((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>        sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>        sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>      }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>          <span class="keywordflow">if</span>((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>        sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>        sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>      }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>        }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     }</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     strcpy(sky_name,cpl_frame_get_filename(sky_frm));</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     sinfo_msg(<span class="stringliteral">"obj: %s"</span>,cpl_frame_get_filename(obj_frm));</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     sinfo_msg(<span class="stringliteral">"sky: %s"</span>,sky_name);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">if</span> (strstr(sky_name, <span class="stringliteral">"."</span> ) != NULL ) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <span class="comment">/*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s","fake_",</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">        basename(sky_name)); */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       snprintf(fake_sky_name, MAX_NAME_SIZE-1,<span class="stringliteral">"%s"</span>, sky_name) ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     cknull(plist = cpl_propertylist_load(sky_name, 0),</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       <span class="stringliteral">"getting header from reference ima frame %s"</span>,sky_name);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                    plist,CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                 <span class="stringliteral">"Cannot save the product %s"</span>,fake_sky_name);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="comment">/* The following makes program crash</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">       check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="comment">/* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     }</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     snprintf(out_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     nwrk=cpl_frameset_get_size(wrk_set);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="stringliteral">"Error stacking frames"</span>);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="comment">/* This commented as was screwing up the catalogue.</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">    check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     check_nomsg(stk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     nstk=cpl_frameset_get_size(stk_set);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     }</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     sinfo_free_frameset(&stk_set);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   ntot=cpl_frameset_get_size(tot_set);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="keywordflow">for</span>(k=0;k<ntot;k++) {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     check_nomsg(tot_frm=cpl_frameset_get_frame(tot_set,k));</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     check_nomsg(dup_frm=cpl_frame_duplicate(tot_frm));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>  cleanup:</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                                           cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                                           cpl_parameterlist* config,</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                                           fake* fk,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                                           <span class="keywordtype">char</span>* pro_ctg,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id)</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordtype">int</span> nobj=0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   <span class="keywordtype">int</span> nwrk=0;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="keywordtype">int</span> ind=0;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>   <span class="keywordtype">double</span> mjd_obj=0;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>   <span class="keywordtype">double</span> mjd_sky_inf=0;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>   <span class="keywordtype">double</span> mjd_sky_sup=0;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>   <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   <span class="keywordtype">char</span> out_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   <span class="keywordtype">char</span> fake_sky_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   cpl_frame* obj_frm=NULL;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   cpl_frame* sky_frm=NULL;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   cpl_frame* cdb_frm=NULL;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   cpl_frame* dup_frm=NULL;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   cpl_frame* sky_frm_inf=NULL;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   cpl_frame* sky_frm_sup=NULL;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   cpl_frameset* wrk_set=NULL;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   cpl_frameset* cdb_set=NULL;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   cpl_frameset* tot_set=NULL;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   cpl_frameset* pro_set=NULL;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   cpl_image* sky_ima=NULL;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordtype">double</span> obj_cumx=0;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="keywordtype">double</span> obj_cumy=0;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <span class="keywordtype">double</span> sky_sup_cumx=0;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordtype">double</span> sky_sup_cumy=0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordtype">double</span> sky_inf_cumx=0;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordtype">double</span> sky_inf_cumy=0;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   <span class="keywordtype">double</span> cum_thres=0.5;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   check_nomsg(cdb_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   ck0(sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set),<span class="stringliteral">"Error extracting CDB frames"</span>);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   nobj=cpl_frameset_get_size(obj_set);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   ncdb=cpl_frameset_get_size(cdb_set);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     mjd_obj    = sinfo_get_mjd_obs(obj_frm);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     obj_cumx=sinfo_get_cumoffsetx(obj_frm);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     obj_cumy=sinfo_get_cumoffsety(obj_frm);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordflow">if</span>(i>0) {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>        check_nomsg(sky_frm_inf=cpl_frameset_get_frame(obj_set,i-1));</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>        mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>        sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>        sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     <span class="keywordflow">if</span>(i<nobj-1) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>       check_nomsg(sky_frm_sup=cpl_frameset_get_frame(obj_set,i+1));</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>       sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>       sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     <span class="keywordflow">if</span>(i==0) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>          sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(i==(nobj-1)) {</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>          sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>        <span class="keywordflow">if</span>( fabs( mjd_sky_inf - mjd_obj ) <</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>            fabs( mjd_sky_sup - mjd_obj ) ) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>          <span class="keywordflow">if</span>((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>        sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>        sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>      }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>          <span class="keywordflow">if</span>((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>        sky_frm = sky_frm_sup;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>        sky_frm = sky_frm_inf;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>      }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>        }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     strcpy(sky_name,cpl_frame_get_filename(sky_frm));</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     sinfo_msg(<span class="stringliteral">"obj: %s"</span>,cpl_frame_get_filename(obj_frm));</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     sinfo_msg(<span class="stringliteral">"sky: %s"</span>,sky_name);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     <span class="keywordflow">if</span> (strstr(sky_name, <span class="stringliteral">"."</span> ) != NULL ) {</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <span class="comment">/*snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%s",</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> <span class="comment">                 "fake_",basename(sky_name)); */</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       snprintf(fake_sky_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_fake_sky"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       snprintf(fake_sky_name, MAX_NAME_SIZE-1, <span class="stringliteral">"%s"</span>, sky_name) ;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     }</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     cknull(plist = cpl_propertylist_load(sky_name, 0),</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>       <span class="stringliteral">"getting header from reference ima frame %s"</span>,sky_name);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>       cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"SKY"</span>);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"SKY"</span>) ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     check(cpl_image_save(sky_ima, fake_sky_name, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                    plist,CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                 <span class="stringliteral">"Cannot save the product %s"</span>,fake_sky_name);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     check_nomsg(cpl_frame_set_filename(sky_frm, fake_sky_name)) ;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="comment">/* The following makes program crash</span></div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> <span class="comment">       check_nomsg(cpl_frame_set_tag(sky_frm, PRO_SKY_DUMMY)) ;</span></div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     check_nomsg(cpl_frame_set_type(sky_frm, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="comment">/* check_nomsg(cpl_frame_set_group(sky_frm, CPL_FRAME_GROUP_PRODUCT)); */</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     check_nomsg(cpl_frame_set_level(sky_frm, CPL_FRAME_LEVEL_FINAL));</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>       check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     snprintf(out_name,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     nwrk=cpl_frameset_get_size(wrk_set);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg,i,fk,plugin_id),</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>         <span class="stringliteral">"Error stacking frames"</span>);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     check_nomsg(cpl_frame_set_filename(sky_frm, sky_name)) ;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     <span class="comment">/* This commented as was screwing up the catalogue.</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="comment">    check_nomsg(cpl_frame_set_tag(sky_frm, RAW_OBJECT_NODDING)) ;</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="comment">/* cube generation */</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     ck0(ind=sinfo_new_cubes_build(plugin_id,config,wrk_set,pro_ctg,i),</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="stringliteral">"GENERATING CUBE no. %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     sinfo_msg(<span class="stringliteral">"--------------------------------------"</span>);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     check_nomsg(sinfo_extract_frames_group_type(wrk_set,&pro_set,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                                                 CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     check_nomsg(sinfo_frameset_merge(tot_set,pro_set));</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   } <span class="comment">/* end loop over object frames */</span></div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   check_nomsg(sinfo_extract_frames_group_type(tot_set,&pro_set,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                                               CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>  cleanup:</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>   sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="keywordtype">int</span> sinfo_new_sci_stk_frames(cpl_parameterlist* config,</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>                                  cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube)</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> {</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordtype">char</span> pro_ctg_stack[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   cpl_frameset * obj_set=NULL;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   cpl_frameset * sky_set=NULL;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   cpl_frameset * cdb_set=NULL;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   cpl_frameset * wrk_set=NULL;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   cpl_frameset * stk_set=NULL;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   cpl_frameset * tot_set=NULL;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   cpl_frame     * obj_frm=NULL;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   cpl_frame    * sky_frm=NULL;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   cpl_frame    * cdb_frm=NULL;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   cpl_frame    * wrk_frm=NULL;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   cpl_frame    * dup_frm=NULL;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="keywordtype">int</span> nsky=0;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordtype">int</span> nobj=0;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordtype">int</span> ntot=0;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   <span class="keywordtype">int</span> nstk=0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> </div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   <span class="keywordtype">int</span> aj_meth=0;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordtype">double</span> mjd_obj=0;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   <span class="keywordtype">double</span> mjd_sky=0;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   <span class="keywordtype">double</span> mjd_sky_frm=0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   fake* fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   check_nomsg(obj_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   check_nomsg(sky_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   check_nomsg(cdb_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   sinfo_extract_obj_frames(*<span class="keyword">set</span>,obj_set);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   sinfo_extract_sky_frames(*<span class="keyword">set</span>,sky_set);</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set);</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>          <span class="stringliteral">"No object frames in input set."</span>);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   strcpy(tag,cpl_frame_get_tag(obj_frm));</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   }</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_stk_procatg(tag)){</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   }</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   nobj=cpl_frameset_get_size(obj_set);</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   nsky=cpl_frameset_get_size(sky_set);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   ncdb=cpl_frameset_get_size(cdb_set);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky != 0) ) {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="comment">/* We have either OBJ and SKY: we need to create OBJ-SKY pairs */</span></div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                          <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     check_nomsg(cpl_parameter_set_int(p,0));</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     cpl_msg_warning(cpl_func , <span class="stringliteral">"******** 1 *********"</span>);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>     <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>        check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>        mjd_obj=sinfo_get_mjd_obs(obj_frm);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>        mjd_sky=sinfo_get_mjd_obs(sky_frm);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>        strcpy(filename,cpl_frame_get_filename(obj_frm));</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>        <span class="keywordflow">for</span> (j=1;j<nsky;j++) {</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>           check_nomsg(mjd_sky_frm=sinfo_get_mjd_obs(</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                                   cpl_frameset_get_frame(sky_set,j)));</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>           <span class="keywordflow">if</span>(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>             mjd_sky=mjd_sky_frm;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>        }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>        }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>        strcpy(filename,cpl_frame_get_filename(sky_frm));</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>        <span class="comment">/* monitors whih obj-sky frames are inserted in each wrk_set */</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>        check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>        check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>        <span class="comment">/* merged CDB frames to work set */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>           <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>       }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>        <span class="comment">/* defines a new name for the output stacked frame */</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>        snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>      <span class="stringliteral">"Cannot stack frames"</span>);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>        check_nomsg(stk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>        sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>        nstk=cpl_frameset_get_size(stk_set);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>        <span class="keywordflow">for</span>(k=0;k<nstk;k++) {</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>          check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>          check_nomsg(dup_frm = cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>      check_nomsg(cpl_frameset_insert(tot_set,dup_frm));</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>        }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>        sinfo_free_frameset(&stk_set);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>        sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>      }</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     ntot=cpl_frameset_get_size(tot_set);</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordflow">for</span>(k=0;k<ntot;k++) {</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>       check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>       check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>   }</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>  <span class="keywordflow">if</span> ( (nobj == 0) && (nsky != 0) ) {</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>      <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> <span class="comment">        SKY FRAMES STACKING</span></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> <span class="comment">        =============================================================== */</span></div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     {</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     sinfo_msg(<span class="stringliteral">"SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED"</span>) ;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     }</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   }</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> </div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky == 0) ) {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>      <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="comment">        OBJ FRAMES STACKING</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> <span class="comment">        =============================================================== */</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     check_nomsg(p = cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     check_nomsg(aj_meth =  cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     <span class="keywordflow">if</span>(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>       aj_meth = 0;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     }</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordflow">if</span>(aj_meth == 2) {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>       sinfo_msg(<span class="stringliteral">"Dummy sky case"</span>);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>       sinfo_msg(<span class="stringliteral">"Fake sky is coming from median of all objects"</span>);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>       cknull(sky_frm = sinfo_new_get_dummy_sky(obj_set),</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>          <span class="stringliteral">"Problem to get dummy frame"</span>);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>       sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>       check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span> </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     }</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                                    i,fk,recipe_id),</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>                                    <span class="stringliteral">"Error Stacking frame %d"</span>,i);</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     check_nomsg(stk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     nstk=cpl_frameset_get_size(stk_set);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>           check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>     }</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         sinfo_free_frameset(&stk_set);</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>       }</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>       check_nomsg(ntot=cpl_frameset_get_size(tot_set));</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>       <span class="keywordflow">for</span>(k=0;k<ntot;k++) {</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>       }</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>       sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>       sinfo_free_frame(&sky_frm);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aj_meth == 1 ) {</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>       sinfo_msg(<span class="stringliteral">"Dummy obj-sky case"</span>);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>       sinfo_msg(<span class="stringliteral">"Fake sky is coming from each next object"</span>);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     <span class="keywordflow">if</span>(nobj > 1) {</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>       fk->is_fake_sky=1;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>       ck0(sinfo_new_get_dummy_obj_sky_stacked(obj_set,&(*<span class="keyword">set</span>),config,</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>                           fk,pro_ctg_stack,recipe_id),</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>       <span class="stringliteral">"Found error to get obj-sky-stacked frame"</span>);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>       sinfo_msg(<span class="stringliteral">"Only one object frame, no sky"</span>);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>           ck0(sinfo_new_stack_frames(config,*<span class="keyword">set</span>,pro_ctg_stack,0,fk,recipe_id),</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>               <span class="stringliteral">"Error stacking frame"</span>);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>       sinfo_msg(<span class="stringliteral">"staks each OBJECT "</span>);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>       tot_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                                    i,fk,recipe_id),<span class="stringliteral">"Error stacking frame %d"</span>,i);</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     check_nomsg(stk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     check_nomsg(nstk=cpl_frameset_get_size(stk_set));</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     <span class="keywordflow">for</span>(k=0;k<nstk;k++) {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>       check_nomsg(wrk_frm=cpl_frameset_get_frame(stk_set,k));</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>       check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>       check_nomsg(cpl_frameset_insert(tot_set,dup_frm));</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>         sinfo_free_frameset(&stk_set);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>       }</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>       check_nomsg(ntot=cpl_frameset_get_size(tot_set));</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>       <span class="keywordflow">for</span>(k=0;k<ntot;k++) {</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     check_nomsg(wrk_frm=cpl_frameset_get_frame(tot_set,k));</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     check_nomsg(dup_frm=cpl_frame_duplicate(wrk_frm));</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     check_nomsg(cpl_frameset_insert(*<span class="keyword">set</span>,dup_frm));</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>       }</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>       sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   }</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   sinfo_free_frameset(&obj_set);</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span> </div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>  cleanup:</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     sinfo_free_frame(&sky_frm);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     sinfo_free_frameset(&obj_set);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> }</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> </div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> <span class="keywordtype">int</span> sinfo_cub_stk_frames(cpl_parameterlist* config,</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>                                  cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube)</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> {</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   cpl_frame     * obj_frm=NULL;</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   <span class="keywordtype">char</span> pro_ctg_stack[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>   cpl_frameset * obj_set=NULL;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   cpl_frameset * sky_set=NULL;</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   cpl_frameset * cdb_set=NULL;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>   cpl_frameset * wrk_set=NULL;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   cpl_frameset * tot_set=NULL;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   cpl_frameset * pro_set=NULL;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   cpl_frame    * sky_frm=NULL;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   cpl_frame    * cdb_frm=NULL;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   cpl_frame    * dup_frm=NULL;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>   <span class="keywordtype">int</span> nsky=0;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>   <span class="keywordtype">int</span> nobj=0;</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>   <span class="keywordtype">int</span> aj_meth=0;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>   <span class="keywordtype">int</span> ind=0;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   <span class="keywordtype">double</span> mjd_obj=0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   <span class="keywordtype">double</span> mjd_sky=0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   <span class="keywordtype">double</span> mjd_sky_frm=0;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>   fake* fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   obj_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>   sky_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   cdb_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   sinfo_extract_obj_frames(*<span class="keyword">set</span>,obj_set);</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   sinfo_extract_sky_frames(*<span class="keyword">set</span>,sky_set);</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>   sinfo_extract_mst_frames(*<span class="keyword">set</span>,cdb_set);</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   cknull(obj_frm = cpl_frameset_get_frame(obj_set,0),</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>          <span class="stringliteral">"No object frames in input set."</span>);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   strcpy(tag,cpl_frame_get_tag(obj_frm));</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     *pro_ctg_cube=sinfo_new_set_obj_procatg(tag);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>   }</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_stk_procatg(tag)){</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     strcpy(pro_ctg_stack,sinfo_new_set_stk_procatg(tag));</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span> </div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   nobj=cpl_frameset_get_size(obj_set);</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>   nsky=cpl_frameset_get_size(sky_set);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   ncdb=cpl_frameset_get_size(cdb_set);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>   }</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky != 0) ) {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="comment">/* We have either OBJ and SKY: we need to create OBJ-SKY pairs */</span></div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span> </div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     check_nomsg(p = cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     check_nomsg(cpl_parameter_set_int(p,0));</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span> </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>        cknull_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>        check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>        mjd_obj=sinfo_get_mjd_obs(obj_frm);</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>        check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,0));</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>        mjd_sky=sinfo_get_mjd_obs(sky_frm);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>        strcpy(filename,cpl_frame_get_filename(obj_frm));</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> </div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span> </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>        <span class="keywordflow">for</span> (j=1;j<nsky;j++) {</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>           mjd_sky_frm = sinfo_get_mjd_obs(cpl_frameset_get_frame(sky_set,j));</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>           <span class="keywordflow">if</span>(1000.*(mjd_sky_frm-mjd_obj)*(mjd_sky_frm-mjd_obj) <</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>              1000.*(mjd_sky-    mjd_obj)*(mjd_sky-    mjd_obj) ) {</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>             mjd_sky=mjd_sky_frm;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>              check_nomsg(sky_frm=cpl_frameset_get_frame(sky_set,j));</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>        }</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>        }</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>        strcpy(filename,cpl_frame_get_filename(sky_frm));</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>        <span class="comment">/* monitors whih obj-sky frames are inserted in each wrk_set */</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>        cknull_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>        cknull_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>        check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>        <span class="comment">/* merged CDB frames to work set */</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>           <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>             check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>       }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>        <span class="comment">/* defines a new name for the output stacked frame */</span></div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>        snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>        ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,i,fk,recipe_id),</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>        <span class="stringliteral">"Cannot stack frames"</span>);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>        <span class="comment">/* cube generation */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>        ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>                      *pro_ctg_cube,i),</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>        <span class="stringliteral">"GENERATING CUBE no. %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>        check_nomsg(sinfo_extract_frames_group_type(wrk_set,</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>                                                    &pro_set,</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>                                                    CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>        check_nomsg(sinfo_frameset_merge(tot_set,pro_set));</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>        sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>        sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     }</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>     check_nomsg(sinfo_extract_frames_group_type(tot_set,</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>                                                 &pro_set,</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>                                                 CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>     sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   }</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keywordflow">if</span> ( (nobj == 0) && (nsky != 0) ) {</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>      <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="comment">        SKY FRAMES STACKING</span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">        =============================================================== */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     {</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     sinfo_msg(<span class="stringliteral">"SKY ONLY FRAMES DATA REDUCTION NOT SUPPORTED"</span>) ;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     }</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>   }</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>   <span class="keywordflow">if</span> ( (nobj != 0) && (nsky == 0) ) {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>      <span class="comment">/* ===============================================================</span></div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">        OBJ FRAMES STACKING</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> <span class="comment">        =============================================================== */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>                                            <span class="stringliteral">"sinfoni.objnod.autojitter_method"</span>));</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>       check_nomsg(aj_meth =  cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>       <span class="keywordflow">if</span>(strcmp(pro_ctg_stack,PRO_PUPIL_LAMP_STACKED) == 0) {</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> </div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     aj_meth = 0;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>       }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordflow">if</span>(aj_meth == 2) {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>       sinfo_msg(<span class="stringliteral">"Dummy sky case"</span>);</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>       sinfo_msg(<span class="stringliteral">"Fake sky is coming from median of all objects"</span>);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>       <span class="keywordflow">if</span>( (sky_frm = sinfo_new_get_dummy_sky(obj_set)) == NULL) {</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>       }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>       sinfo_msg(<span class="stringliteral">"Generates OBJ-SKY pairs"</span>);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>       check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         check_nomsg(dup_frm=cpl_frame_duplicate(sky_frm));</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>                                    i,fk,recipe_id),<span class="stringliteral">"Error Stacking frame %d"</span>,i);</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <span class="comment">/* cube generation */</span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>                       *pro_ctg_cube,i),</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>         <span class="stringliteral">"Error GENERATING CUBE no. %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> </div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> </div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>         check_nomsg(sinfo_extract_frames_group_type(wrk_set,</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>                                                     &pro_set,</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>                                                     CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>       }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>       check_nomsg(sinfo_extract_frames_group_type(tot_set,</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>                                                   &pro_set,</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>                                                   CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>       check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>       sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>       sinfo_free_frame(&sky_frm);</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(aj_meth == 1 ) {</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         sinfo_msg(<span class="stringliteral">"Dummy obj-sky case"</span>);</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>         sinfo_msg(<span class="stringliteral">"Fake sky is coming from each next object"</span>);</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     <span class="keywordflow">if</span>(nobj > 1) {</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       fk->is_fake_sky=1;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       ck0(sinfo_get_dummy_obj_sky_stacked_and_cubes(obj_set,&(*<span class="keyword">set</span>),config,</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>                           fk,pro_ctg_stack,recipe_id),</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>          <span class="stringliteral">"Found error to get obj-sky-stacked frame"</span>);</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>       sinfo_msg(<span class="stringliteral">"Only one object frame, no sky"</span>);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>       check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             <span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>));</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>       check_nomsg(cpl_parameter_set_bool(p,FALSE));</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>           ck0(sinfo_new_stack_frames(config,*<span class="keyword">set</span>,pro_ctg_stack,0,fk,recipe_id),</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>               <span class="stringliteral">"Error stacking frame"</span>);</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>       <span class="comment">/* cube generation */</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>       ck0(sinfo_new_cubes_build(recipe_id,config,*<span class="keyword">set</span>,*pro_ctg_cube,i),</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>           <span class="stringliteral">"Error GENERATING CUBE %d"</span>, i) ;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>       sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     }</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>     } <span class="keywordflow">else</span> { <span class="comment">/* aj_meth == 0 */</span></div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>       sinfo_msg(<span class="stringliteral">"staks each OBJECT "</span>);</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>       check_nomsg(tot_set=cpl_frameset_new());</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>       <span class="keywordflow">for</span> (i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span> </div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     check_nomsg(wrk_set=cpl_frameset_new());</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     check_nomsg(obj_frm=cpl_frameset_get_frame(obj_set,i));</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         check_nomsg(dup_frm=cpl_frame_duplicate(obj_frm));</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>       check_nomsg(cdb_frm=cpl_frameset_get_frame(cdb_set,k));</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>           check_nomsg(dup_frm=cpl_frame_duplicate(cdb_frm));</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>       check_nomsg(cpl_frameset_insert(wrk_set,dup_frm));</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     }</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> </div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     snprintf(outname,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         ck0(sinfo_new_stack_frames(config,wrk_set,pro_ctg_stack,</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>                                    i,fk,recipe_id),<span class="stringliteral">"Error stacking frame %d"</span>,i);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> </div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         <span class="comment">/* cube generation */</span></div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>       sinfo_msg(<span class="stringliteral">"BUILDING CUBE %d"</span>,i);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>         ck0(ind=sinfo_new_cubes_build(recipe_id,config,wrk_set,</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>                       *pro_ctg_cube,i),</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>         <span class="stringliteral">"Error GENERATING CUBE no. %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> </div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>       sinfo_msg(<span class="stringliteral">"BUILT CUBE %d"</span>,i);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>         check_nomsg(sinfo_extract_frames_group_type(wrk_set,</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>                                                     &pro_set,</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>                                                     CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>         check_nomsg(sinfo_frameset_merge(tot_set,pro_set));</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>         sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>         sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>       }</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>      check_nomsg(sinfo_extract_frames_group_type(tot_set,</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                                                  &pro_set,</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                                                  CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>      check_nomsg(sinfo_frameset_merge(*<span class="keyword">set</span>,pro_set));</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>      sinfo_free_frameset(&pro_set);</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>      sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>   }</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>   sinfo_free_frameset(&obj_set);</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>   sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> </div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  cleanup:</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> </div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     sinfo_free_frameset(&tot_set);</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     sinfo_free_frameset(&obj_set);</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>     sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     sinfo_free_frameset(&cdb_set);</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> }</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_stk_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag)</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> {</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_stack=NULL;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>   <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"OBJ"</span>) != NULL) {</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     pro_ctg_stack=PRO_OBJECT_NODDING_STACKED;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PSF"</span>) != NULL) {</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     pro_ctg_stack=PRO_PSF_CALIBRATOR_STACKED;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"STD"</span>) != NULL) {</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     pro_ctg_stack=PRO_STD_NODDING_STACKED;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PUPIL"</span>) != NULL) {</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     pro_ctg_stack=PRO_PUPIL_LAMP_STACKED;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"frame tag %s not supported"</span>,tag);</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>   }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>   <span class="keywordflow">return</span> pro_ctg_stack;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> }</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* sinfo_new_set_obj_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag)</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> {</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube=NULL;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"OBJ"</span>) != NULL) {</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     pro_ctg_cube=PRO_COADD_OBJ;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PSF"</span>) != NULL) {</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     pro_ctg_cube=PRO_COADD_PSF;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"STD"</span>) != NULL) {</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>     pro_ctg_cube=PRO_COADD_STD;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,<span class="stringliteral">"PUPIL"</span>) != NULL) {</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     pro_ctg_cube=PRO_COADD_PUPIL;</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"frame tag %s not supported"</span>,tag);</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   }</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>   <span class="keywordflow">return</span> pro_ctg_cube;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> </div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">sinfo_get_obj_sky_frm_pair(</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="comment">cpl_frameset** obj_set,</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">const int i,</span></div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> <span class="comment">cpl_frame** obj_frm,</span></div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> <span class="comment">cpl_frame** sky_frm)</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">{</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> <span class="comment">  double mjd_obj=0;</span></div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> <span class="comment">  double mjd_sky_inf=0;</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">  double mjd_sky_sup=0;</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment"></span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment"></span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="comment">  double obj_cumx=0;</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="comment">  double obj_cumy=0;</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> <span class="comment"></span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment">  double sky_sup_cumx=0;</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">  double sky_sup_cumy=0;</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> <span class="comment"></span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">  double sky_inf_cumx=0;</span></div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> <span class="comment">  double sky_inf_cumy=0;</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> <span class="comment">  double cum_thres=0.5;</span></div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> <span class="comment">  int nobj=0;</span></div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> <span class="comment">  cpl_frame* sky_frm_inf=NULL;</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> <span class="comment">  cpl_frame* sky_frm_sup=NULL;</span></div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> <span class="comment"></span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">  check_nomsg(*obj_frm=cpl_frameset_get_frame(*obj_set,i));</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">  mjd_obj    = sinfo_get_mjd_obs(*obj_frm);</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">  obj_cumx=sinfo_get_cumoffsetx(*obj_frm);</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">  obj_cumy=sinfo_get_cumoffsety(*obj_frm);</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment"></span></div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">  if(i>0) {</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> <span class="comment">    check_nomsg(sky_frm_inf=cpl_frameset_get_frame(*obj_set,i-1));</span></div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">    mjd_sky_inf = sinfo_get_mjd_obs(sky_frm_inf);</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">    sky_inf_cumx=sinfo_get_cumoffsetx(sky_frm_inf);</span></div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> <span class="comment">    sky_inf_cumy=sinfo_get_cumoffsety(sky_frm_inf);</span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="comment"></span></div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> <span class="comment">  if(i<nobj-1) {</span></div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span> <span class="comment">    check_nomsg(sky_frm_sup=cpl_frameset_get_frame(*obj_set,i+1));</span></div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> <span class="comment">    mjd_sky_sup = sinfo_get_mjd_obs(sky_frm_sup);</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> <span class="comment">    sky_sup_cumx=sinfo_get_cumoffsetx(sky_frm_sup);</span></div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> <span class="comment">    sky_sup_cumy=sinfo_get_cumoffsety(sky_frm_sup);</span></div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment"></span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">  if(i==0) {</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">    *sky_frm = sky_frm_sup;</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment">  } else if(i==(nobj-1)) {</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment">    *sky_frm = sky_frm_inf;</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="comment">  } else {</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="comment">       if( fabs( mjd_sky_inf - mjd_obj ) <</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment">           fabs( mjd_sky_sup - mjd_obj ) ) {</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment">         if((fabs(sky_inf_cumx-obj_cumx) > cum_thres) ||</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment">            (fabs(sky_inf_cumy-obj_cumy) > cum_thres)) {</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">       *sky_frm = sky_frm_inf;</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="comment">     } else {</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment">       *sky_frm = sky_frm_sup;</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment">       } else {</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment">         if((fabs(sky_sup_cumx-obj_cumx) > cum_thres) ||</span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">            (fabs(sky_sup_cumy-obj_cumy) > cum_thres)) {</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">       *sky_frm = sky_frm_sup;</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="comment">     } else {</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">       *sky_frm = sky_frm_inf;</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">     }</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="comment">       }</span></div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">  return 0;</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment"></span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment"> cleanup:</span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">  return -1;</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment"></span></div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">}</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__utils_8h_source.html b/html/sinfo__rec__utils_8h_source.html
index 04bbb1e..9e77008 100644
--- a/html/sinfo__rec__utils_8h_source.html
+++ b/html/sinfo__rec__utils_8h_source.html
@@ -2,123 +2,154 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_utils.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_utils.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_REC_UTILS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_REC_UTILS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span>
-<a name="l00004"></a>00004 <span class="comment">/* $Id: sinfo_rec_utils.h,v 1.2 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00007"></a>00007 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00008"></a>00008 <span class="comment"> *</span>
-<a name="l00009"></a>00009 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00010"></a>00010 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00011"></a>00011 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00012"></a>00012 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00013"></a>00013 <span class="comment"> *</span>
-<a name="l00014"></a>00014 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00015"></a>00015 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00016"></a>00016 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00017"></a>00017 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00018"></a>00018 <span class="comment"> *</span>
-<a name="l00019"></a>00019 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00020"></a>00020 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00021"></a>00021 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00022"></a>00022 <span class="comment"> */</span>
-<a name="l00023"></a>00023 <span class="comment">/*</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00027"></a>00027 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00028"></a>00028 <span class="comment"> */</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030  <span class="comment">/****************************************************************</span>
-<a name="l00031"></a>00031 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00032"></a>00032 <span class="comment">  ****************************************************************/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                Includes</span>
-<a name="l00040"></a>00040 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/* std */</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <strings.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <string.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <math.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* cpl */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/* sinfoni */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment">                            Functions prototypes</span>
-<a name="l00063"></a>00063 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keywordtype">int</span> 
-<a name="l00067"></a>00067 sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,
-<a name="l00068"></a>00068                                     cpl_frameset** <span class="keyword">set</span>, 
-<a name="l00069"></a>00069                                     cpl_parameterlist* config,
-<a name="l00070"></a>00070                                     fake* fk,
-<a name="l00071"></a>00071                                     <span class="keywordtype">char</span>* pro_ctg, 
-<a name="l00072"></a>00072                                     <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 cpl_frame* 
-<a name="l00075"></a>00075 sinfo_new_get_dummy_sky(cpl_frameset* obj_set);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keywordtype">int</span> 
-<a name="l00078"></a>00078 sinfo_new_sci_stk_frames(cpl_parameterlist* config,
-<a name="l00079"></a>00079                          cpl_frameset** <span class="keyword">set</span>,
-<a name="l00080"></a>00080                          <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,
-<a name="l00081"></a>00081              <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keywordtype">int</span> 
-<a name="l00084"></a>00084 sinfo_cub_stk_frames(cpl_parameterlist* config,
-<a name="l00085"></a>00085                      cpl_frameset** <span class="keyword">set</span>,
-<a name="l00086"></a>00086                      <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,
-<a name="l00087"></a>00087              <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="keywordtype">int</span>
-<a name="l00091"></a>00091 sinfo_new_stack_frames(cpl_parameterlist* cfg, 
-<a name="l00092"></a>00092                        cpl_frameset* <span class="keyword">set</span>, 
-<a name="l00093"></a>00093                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,
-<a name="l00094"></a>00094                        <span class="keyword">const</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>, 
-<a name="l00095"></a>00095                        fake* fk, 
-<a name="l00096"></a>00096                        <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="keyword">const</span> <span class="keywordtype">char</span>* 
-<a name="l00099"></a>00099 sinfo_new_set_obj_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag);
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keywordtype">int</span>
-<a name="l00102"></a>00102 sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,
-<a name="l00103"></a>00103                                           cpl_frameset** <span class="keyword">set</span>, 
-<a name="l00104"></a>00104                                           cpl_parameterlist* config,
-<a name="l00105"></a>00105                                           fake* fk, 
-<a name="l00106"></a>00106                                           <span class="keywordtype">char</span>* pro_ctg, 
-<a name="l00107"></a>00107                                           <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);
-<a name="l00108"></a>00108 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_REC_UTILS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_REC_UTILS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment">/* $Id: sinfo_rec_utils.h,v 1.2 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_get_dummy_obj_sky_stacked(cpl_frameset* obj_set,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                                     cpl_frameset** <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                     cpl_parameterlist* config,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                                     fake* fk,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                     <span class="keywordtype">char</span>* pro_ctg, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                                     <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> cpl_frame* </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> sinfo_new_get_dummy_sky(cpl_frameset* obj_set);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> sinfo_new_sci_stk_frames(cpl_parameterlist* config,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                          cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> sinfo_cub_stk_frames(cpl_parameterlist* config,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                      cpl_frameset** <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* recipe_id,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>** pro_ctg_cube);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> sinfo_new_stack_frames(cpl_parameterlist* cfg, </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                        cpl_frameset* <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* procatg,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>, </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                        fake* fk, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                        <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> sinfo_new_set_obj_procatg(<span class="keyword">const</span> <span class="keywordtype">char</span>* tag);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                           cpl_frameset** <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                           cpl_parameterlist* config,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                           fake* fk, </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                                           <span class="keywordtype">char</span>* pro_ctg, </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                                           <span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__rec__wavecal_8c_source.html b/html/sinfo__rec__wavecal_8c_source.html
index 2aaac95..0d50574 100644
--- a/html/sinfo__rec__wavecal_8c_source.html
+++ b/html/sinfo__rec__wavecal_8c_source.html
@@ -2,428 +2,459 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_rec_wavecal.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_rec_wavecal.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_rec_wavecal.c,v 1.31 2012/09/17 09:06:39 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/09/17 09:06:39 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.31 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Wave_Cal Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/* cpl */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* irplib */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/* sinfoni */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_wavecal_config.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_new_wave_cal_slit2.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00074"></a>00074 <span class="comment">                            Functions prototypes</span>
-<a name="l00075"></a>00075 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_create(cpl_plugin *);
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_exec(cpl_plugin *);
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_destroy(cpl_plugin *);
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal(cpl_parameterlist *, cpl_frameset *);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00082"></a>00082 <span class="comment">                            Static variables</span>
-<a name="l00083"></a>00083 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description1[] =
-<a name="l00086"></a>00086 <span class="stringliteral">"This recipe performs wavelength calibration.\n"</span>
-<a name="l00087"></a>00087 <span class="stringliteral">"The input files are on/off arc lamp frames with tag WAVE_LAMP\n"</span>
-<a name="l00088"></a>00088 <span class="stringliteral">"Master calibration frame input is:\n"</span>
-<a name="l00089"></a>00089 <span class="stringliteral">"A corresponding (band) reference line table with tag REF_LINE_ARC\n"</span>
-<a name="l00090"></a>00090 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"A corresponding (band,preoptic) master flat with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"A corresponding (band,preoptics) master bad "</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"pixel map with tag MASTER_BP_MAP\n"</span>;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description2[] =
-<a name="l00097"></a>00097 <span class="stringliteral">"If wcal-estimate_ind=TRUE, a corresponding (band,preoptics) slitlet position\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"guess table SLIT_POS_GUESS (for example a copy of the SLIT_POS product)\n"</span>
-<a name="l00099"></a>00099 <span class="stringliteral">"If wcal-calib_indicator=FALSE, a corresponding (band,preoptics) parabolic \n"</span>
-<a name="l00100"></a>00100 <span class="stringliteral">"fit coefficients table WAVE_COEF_SLIT\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"If sinfoni.wavecal.slitpos_boostrap_switch=FALSE \n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"(wcal-calib-slitpos_bootstrap=0),\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"a corresponding (band,preoptics) slitlets position table with tag SLIT_POS\n"</span>;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description3[] =
-<a name="l00108"></a>00108 <span class="stringliteral">"The main products are:\n"</span>
-<a name="l00109"></a>00109 <span class="stringliteral">"The master flat field corrected for distortions \n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"(PRO.CATG=MFLAT_STACKED_DIST)\n"</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"The arc lamp frames stacked (PRO.CATG=WAVE_LAMP_STACKED)\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"The wavelength map (PRO.CATG=WAVE_MAP)\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"The slitlet position table (PRO.CATG=SLIT_POS)\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"A parabolic fit coefficients table (PRO.CATG=WAVE_COEF_SLIT)\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"Parameters relative to arc lamp line fit: (PRO.CATG=WAVE_FIT_PARAMS)\n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"esorex --params sinfo_rec_wavecal\n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"esorex --help sinfo_rec_wavecal\n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"\n"</span>;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description[1500];
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00125"></a>00125 <span class="comment">                                Functions code</span>
-<a name="l00126"></a>00126 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00127"></a>00127 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00131"></a>00131 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 <span class="keywordtype">int</span>
-<a name="l00146"></a><a class="code" href="group__sinfo__rec__wavecal.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00146</a> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00147"></a>00147 {
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00150"></a>00150   cpl_plugin *plugin = &recipe->interface;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   strcpy(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description1);
-<a name="l00154"></a>00154   strcat(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description2);
-<a name="l00155"></a>00155   strcat(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description3);
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157   cpl_plugin_init(plugin,
-<a name="l00158"></a>00158           CPL_PLUGIN_API,
-<a name="l00159"></a>00159           SINFONI_BINARY_VERSION,
-<a name="l00160"></a>00160           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00161"></a>00161           <span class="stringliteral">"sinfo_rec_wavecal"</span>,
-<a name="l00162"></a>00162           <span class="stringliteral">"Wavelength calibration and slitpos determination"</span>,
-<a name="l00163"></a>00163           sinfo_rec_wavecal_description,
-<a name="l00164"></a>00164           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00165"></a>00165           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00166"></a>00166           sinfo_get_license(),
-<a name="l00167"></a>00167           sinfo_rec_wavecal_create,
-<a name="l00168"></a>00168           sinfo_rec_wavecal_exec,
-<a name="l00169"></a>00169           sinfo_rec_wavecal_destroy);
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171   cpl_pluginlist_append(list, plugin);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   <span class="keywordflow">return</span> 0;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 }
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00185"></a>00185 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_create(cpl_plugin *plugin)
-<a name="l00188"></a>00188 {
-<a name="l00189"></a>00189    cpl_recipe      * recipe ;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00192"></a>00192     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00193"></a>00193         recipe = (cpl_recipe *)plugin ;
-<a name="l00194"></a>00194     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00195"></a>00195     cpl_error_reset();
-<a name="l00196"></a>00196     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00199"></a>00199     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202   <span class="comment">/*</span>
-<a name="l00203"></a>00203 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00204"></a>00204 <span class="comment">   */</span>
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206   <span class="comment">/* Wavelength calibration  */</span>
-<a name="l00207"></a>00207   sinfo_general_config_add(recipe->parameters);
-<a name="l00208"></a>00208   sinfo_product_config_add(recipe->parameters);
-<a name="l00209"></a>00209   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00210"></a>00210   sinfo_wavecal_config_add(recipe->parameters);
-<a name="l00211"></a>00211   <span class="keywordflow">return</span> 0;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00221"></a>00221 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_exec(cpl_plugin *plugin)
-<a name="l00225"></a>00225 {
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229   <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00230"></a>00230   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00231"></a>00231       recipe = (cpl_recipe *)plugin ;
-<a name="l00232"></a>00232   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234   <span class="keywordflow">return</span> sinfo_rec_wavecal(recipe->parameters, recipe->frames);
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 }
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00244"></a>00244 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00245"></a>00245 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_destroy(cpl_plugin *plugin)
-<a name="l00246"></a>00246 {
-<a name="l00247"></a>00247   cpl_recipe  *   recipe ;
-<a name="l00248"></a>00248     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00249"></a>00249     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00250"></a>00250         recipe = (cpl_recipe *)plugin ;
-<a name="l00251"></a>00251     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255   <span class="keywordflow">return</span> 0;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257 }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00266"></a>00266 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00267"></a>00267 <span class="comment">/*</span>
-<a name="l00268"></a>00268 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00269"></a>00269 <span class="comment"> */</span>
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00272"></a>00272 {
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274   <span class="keywordtype">int</span> sw=0;
-<a name="l00275"></a>00275   fake* fk=NULL;
-<a name="l00276"></a>00276   cpl_parameter* p=NULL;
-<a name="l00277"></a>00277   cpl_frameset* wrk_set=NULL;
-<a name="l00278"></a>00278   cpl_frame* frame=NULL;
-<a name="l00279"></a>00279   <span class="keywordtype">int</span> ind_index=0;
-<a name="l00280"></a>00280   cpl_frameset* ref_set=NULL;
-<a name="l00281"></a>00281   <span class="keywordtype">int</span> pdensity=0;
-<a name="l00282"></a>00282   <span class="keywordtype">int</span> line_cor=0;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284   fk=sinfo_fake_new();
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00287"></a>00287         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00292"></a>00292   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));
-<a name="l00293"></a>00293   check_nomsg(line_cor=cpl_parameter_get_bool(p));
-<a name="l00294"></a>00294   <span class="keywordflow">if</span>(line_cor==1) {
-<a name="l00295"></a>00295      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));
-<a name="l00296"></a>00296   }
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));
-<a name="l00303"></a>00303   check_nomsg(pdensity=cpl_parameter_get_int(p));
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   <span class="comment">/* hidden parameters */</span>
-<a name="l00306"></a>00306   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00307"></a>00307                                        <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));
-<a name="l00308"></a>00308   check_nomsg(sw=cpl_parameter_get_bool(p));
-<a name="l00309"></a>00309   <span class="keywordflow">if</span>( sw == 1 ) {
-<a name="l00310"></a>00310     check_nomsg(wrk_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>));
-<a name="l00313"></a>00313     check_nomsg(ind_index=cpl_parameter_get_bool(p));
-<a name="l00314"></a>00314     check_nomsg(cpl_parameter_set_bool(p,TRUE));
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316     sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);
-<a name="l00317"></a>00317     sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_WAVE_LAMP_STACKED);
-<a name="l00318"></a>00318     sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);
-<a name="l00319"></a>00319     ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, wrk_set, NULL,
-<a name="l00320"></a>00320                      PRO_WAVE_LAMP_STACKED,0,fk),
-<a name="l00321"></a>00321        <span class="stringliteral">"FAILED STACKING FRAME %s"</span>,PRO_WAVE_LAMP_STACKED);
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323     sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_WAVE_LAMP_STACKED);
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     ck0(sinfo_new_wave_cal_slit2(cpl_func,config, wrk_set,ref_set),
-<a name="l00326"></a>00326     <span class="stringliteral">"FIRST PART OF WAVELENGTH CALIBRATION FAILED"</span>) ;
-<a name="l00327"></a>00327     sinfo_msg(<span class="stringliteral">"FIRST PART OF WAVELENGTH CALIBRATION"</span>) ;
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329     check_nomsg(frame = cpl_frameset_find(wrk_set,PRO_SLIT_POS_GUESS));
-<a name="l00330"></a>00330     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame)));
-<a name="l00331"></a>00331     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>));
-<a name="l00332"></a>00332     <span class="keywordflow">if</span>(ind_index == 1) {
-<a name="l00333"></a>00333        check_nomsg(cpl_parameter_set_bool(p,TRUE));
-<a name="l00334"></a>00334        check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00335"></a>00335                                            <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));
-<a name="l00336"></a>00336        check_nomsg(cpl_parameter_set_bool(p,TRUE));
-<a name="l00337"></a>00337        sinfo_msg(<span class="stringliteral">"Set ind_index to TRUE"</span>);
-<a name="l00338"></a>00338     } <span class="keywordflow">else</span> {
-<a name="l00339"></a>00339        check_nomsg(cpl_parameter_set_bool(p,FALSE));
-<a name="l00340"></a>00340        check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00341"></a>00341                                           <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));
-<a name="l00342"></a>00342        check_nomsg(cpl_parameter_set_bool(p,FALSE));
-<a name="l00343"></a>00343        sinfo_msg(<span class="stringliteral">"Set ind_index to FALSE"</span>);
-<a name="l00344"></a>00344     }
-<a name="l00345"></a>00345     sinfo_free_frameset(&wrk_set);
-<a name="l00346"></a>00346   }
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00350"></a>00350   sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_WAVE_LAMP_STACKED);
-<a name="l00351"></a>00351   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353   <span class="comment">/*</span>
-<a name="l00354"></a>00354 <span class="comment">   *  Modified code begins here...</span>
-<a name="l00355"></a>00355 <span class="comment">   */</span>
-<a name="l00356"></a>00356   {
-<a name="l00357"></a>00357       <span class="keywordtype">int</span> i, nsky, ndark, nwave, non=0;
-<a name="l00358"></a>00358       cpl_frame * fr;
-<a name="l00359"></a>00359       <span class="keyword">const</span> <span class="keywordtype">char</span> * tag, * fname;
-<a name="l00360"></a>00360       <span class="keywordtype">char</span> name[32];
-<a name="l00361"></a>00361       cpl_image * im;
-<a name="l00362"></a>00362       cpl_propertylist * plist;
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364       nsky = cpl_frameset_count_tags (<span class="keyword">set</span>, RAW_SKY_NODDING);
-<a name="l00365"></a>00365       nwave = cpl_frameset_count_tags (<span class="keyword">set</span>, RAW_WAVE_LAMP);
-<a name="l00366"></a>00366       ndark = cpl_frameset_count_tags (<span class="keyword">set</span>, PRO_MASTER_DARK);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368       <span class="keywordflow">if</span> ( (nwave == 0) & (nsky>0) ) {
-<a name="l00369"></a>00369         sinfo_msg (<span class="stringliteral">"No arc lamp frames found, using sky frames instead"</span>);
-<a name="l00370"></a>00370         <span class="keywordflow">if</span> (ndark == 0)
-<a name="l00371"></a>00371           sinfo_msg (<span class="stringliteral">"Including Master dark is recommended when running wavecal on sky frames"</span>);
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373         i = 0;
-<a name="l00374"></a>00374         <span class="keywordflow">while</span> (i < cpl_frameset_get_size(<span class="keyword">set</span>)) {
-<a name="l00375"></a>00375           fr = cpl_frameset_get_frame(<span class="keyword">set</span>,i);
-<a name="l00376"></a>00376           tag = cpl_frame_get_tag (fr);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378           <span class="keywordflow">if</span> (strcmp(tag, RAW_SKY_NODDING)==0)
-<a name="l00379"></a>00379           {
-<a name="l00380"></a>00380                 cpl_frame * frnew = 0;
-<a name="l00381"></a>00381                 fname = cpl_frame_get_filename(fr);
-<a name="l00382"></a>00382                 sprintf (&name[0], <span class="stringliteral">"fakelamp_%d.fits"</span>, non++);
-<a name="l00383"></a>00383                 im = cpl_image_load(fname, CPL_TYPE_FLOAT, 0, 0);
-<a name="l00384"></a>00384                 plist = cpl_propertylist_load(fname,0);
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386                 <span class="comment">/* Both if these needs to be changed to make sure the sky frame is</span>
-<a name="l00387"></a>00387 <span class="comment">                   interprated as ON-frame in sinfo_dfs.c</span>
-<a name="l00388"></a>00388 <span class="comment"></span>
-<a name="l00389"></a>00389 <span class="comment">                   The selection of KEY_NAME_LAMP_XE is arbitrary, but one of</span>
-<a name="l00390"></a>00390 <span class="comment">                   KEY_NAME_LAMP_* has to be set */</span>
-<a name="l00391"></a>00391                 cpl_propertylist_set_bool (plist, KEY_NAME_LAMP_XE, 1);
-<a name="l00392"></a>00392                 cpl_propertylist_set_string (plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"WAVE,LAMP"</span>);
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394                 cpl_image_save (im, name, CPL_BPP_IEEE_FLOAT, plist, CPL_IO_DEFAULT);
-<a name="l00395"></a>00395                 cpl_image_delete (im);
-<a name="l00396"></a>00396                 cpl_propertylist_delete(plist);
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398                 <span class="comment">/* Looks like it's not possible to modify the frame directly</span>
-<a name="l00399"></a>00399 <span class="comment">                   without duplicating it first. */</span>
-<a name="l00400"></a>00400                 frnew = cpl_frame_duplicate (fr);
-<a name="l00401"></a>00401                 cpl_frame_set_filename(frnew, name);
-<a name="l00402"></a>00402                 cpl_frame_set_tag (frnew, RAW_WAVE_LAMP);
-<a name="l00403"></a>00403                 cpl_frameset_erase_frame (<span class="keyword">set</span>, fr);
-<a name="l00404"></a>00404                 cpl_frameset_insert (<span class="keyword">set</span>, frnew);
-<a name="l00405"></a>00405           }
-<a name="l00406"></a>00406           <span class="keywordflow">else</span>
-<a name="l00407"></a>00407         i++;
-<a name="l00408"></a>00408         }
-<a name="l00409"></a>00409       }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411       <span class="comment">/*</span>
-<a name="l00412"></a>00412 <span class="comment">       * Modified code ends here</span>
-<a name="l00413"></a>00413 <span class="comment">       */</span>
-<a name="l00414"></a>00414   }
-<a name="l00415"></a>00415   ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, NULL,
-<a name="l00416"></a>00416                        PRO_WAVE_LAMP_STACKED,0,fk),
-<a name="l00417"></a>00417       <span class="stringliteral">"%s FRAME DETERMINATION FAILED"</span>,PRO_WAVE_LAMP_STACKED);
-<a name="l00418"></a>00418   sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_WAVE_LAMP_STACKED);
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00421"></a>00421   sinfo_msg(<span class="stringliteral">"WAVELENGTH CALIBRATION"</span>);
-<a name="l00422"></a>00422   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425   ck0(sinfo_new_wave_cal_slit2(cpl_func,config, <span class="keyword">set</span>,ref_set),
-<a name="l00426"></a>00426       <span class="stringliteral">"FAILED WAVELENGTH CALIBRATION"</span>);
-<a name="l00427"></a>00427   sinfo_msg(<span class="stringliteral">"SUCCESS WAVELENGTH CALIBRATION"</span>);
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429   sinfo_fake_delete(&fk);
-<a name="l00430"></a>00430    <span class="keywordflow">if</span>(pdensity < 2) {
-<a name="l00431"></a>00431      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_STACK_MFLAT_DIST));
-<a name="l00432"></a>00432      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_WAVE_LAMP_STACKED));
-<a name="l00433"></a>00433    }
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435  cleanup:
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437   sinfo_free_frameset(&ref_set);
-<a name="l00438"></a>00438   sinfo_free_frameset(&wrk_set);
-<a name="l00439"></a>00439   sinfo_fake_delete(&fk);
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00443"></a>00443     <span class="keywordflow">return</span> -1;
-<a name="l00444"></a>00444   } <span class="keywordflow">else</span> {
-<a name="l00445"></a>00445     <span class="keywordflow">return</span> 0;
-<a name="l00446"></a>00446   }
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_rec_wavecal.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_rec_wavecal.c,v 1.31 2012/09/17 09:06:39 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/09/17 09:06:39 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.31 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Wave_Cal Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_wavecal_config.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_new_wave_cal_slit2.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_create(cpl_plugin *);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_exec(cpl_plugin *);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_destroy(cpl_plugin *);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description1[] =</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"This recipe performs wavelength calibration.\n"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"The input files are on/off arc lamp frames with tag WAVE_LAMP\n"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"Master calibration frame input is:\n"</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="stringliteral">"A corresponding (band) reference line table with tag REF_LINE_ARC\n"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"A corresponding (band,preoptic) master flat with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad "</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"pixel map with tag MASTER_BP_MAP\n"</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description2[] =</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"If wcal-estimate_ind=TRUE, a corresponding (band,preoptics) slitlet position\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"guess table SLIT_POS_GUESS (for example a copy of the SLIT_POS product)\n"</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="stringliteral">"If wcal-calib_indicator=FALSE, a corresponding (band,preoptics) parabolic \n"</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"fit coefficients table WAVE_COEF_SLIT\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"If sinfoni.wavecal.slitpos_boostrap_switch=FALSE \n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"(wcal-calib-slitpos_bootstrap=0),\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"a corresponding (band,preoptics) slitlets position table with tag SLIT_POS\n"</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description3[] =</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="stringliteral">"The main products are:\n"</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"The master flat field corrected for distortions \n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"(PRO.CATG=MFLAT_STACKED_DIST)\n"</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"The arc lamp frames stacked (PRO.CATG=WAVE_LAMP_STACKED)\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"The wavelength map (PRO.CATG=WAVE_MAP)\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"The slitlet position table (PRO.CATG=SLIT_POS)\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"A parabolic fit coefficients table (PRO.CATG=WAVE_COEF_SLIT)\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"Parameters relative to arc lamp line fit: (PRO.CATG=WAVE_FIT_PARAMS)\n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"esorex --params sinfo_rec_wavecal\n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"esorex --help sinfo_rec_wavecal\n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_rec_wavecal_description[1500];</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="code" href="group__sinfo__rec__wavecal.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  146</a></span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   strcpy(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description1);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   strcat(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description2);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   strcat(sinfo_rec_wavecal_description,sinfo_rec_wavecal_description3);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           <span class="stringliteral">"sinfo_rec_wavecal"</span>,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           <span class="stringliteral">"Wavelength calibration and slitpos determination"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           sinfo_rec_wavecal_description,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           sinfo_rec_wavecal_create,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_rec_wavecal_exec,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           sinfo_rec_wavecal_destroy);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>    cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">/* Wavelength calibration  */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   sinfo_general_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   sinfo_wavecal_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">return</span> sinfo_rec_wavecal(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_rec_wavecal(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   <span class="keywordtype">int</span> sw=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   fake* fk=NULL;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   cpl_frameset* wrk_set=NULL;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="keywordtype">int</span> ind_index=0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   cpl_frameset* ref_set=NULL;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordtype">int</span> pdensity=0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordtype">int</span> line_cor=0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   check_nomsg(p=cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.general.lc_sw"</span>));</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   check_nomsg(line_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordflow">if</span>(line_cor==1) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>      check_nomsg(sinfo_ima_line_cor(config,<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.product.density"</span>));</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   check_nomsg(pdensity=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="comment">/* hidden parameters */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                        <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   check_nomsg(sw=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordflow">if</span>( sw == 1 ) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     check_nomsg(wrk_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     check_nomsg(ind_index=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     check_nomsg(cpl_parameter_set_bool(p,TRUE));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     sinfo_msg(<span class="stringliteral">"---------------------------------------"</span>);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, wrk_set, NULL,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                      PRO_WAVE_LAMP_STACKED,0,fk),</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>        <span class="stringliteral">"FAILED STACKING FRAME %s"</span>,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     ck0(sinfo_new_wave_cal_slit2(cpl_func,config, wrk_set,ref_set),</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="stringliteral">"FIRST PART OF WAVELENGTH CALIBRATION FAILED"</span>) ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     sinfo_msg(<span class="stringliteral">"FIRST PART OF WAVELENGTH CALIBRATION"</span>) ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     check_nomsg(frame = cpl_frameset_find(wrk_set,PRO_SLIT_POS_GUESS));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(frame)));</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     check_nomsg(p=cpl_parameterlist_find(config,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">if</span>(ind_index == 1) {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>        check_nomsg(cpl_parameter_set_bool(p,TRUE));</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>        check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                                            <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>        check_nomsg(cpl_parameter_set_bool(p,TRUE));</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>        sinfo_msg(<span class="stringliteral">"Set ind_index to TRUE"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>        check_nomsg(cpl_parameter_set_bool(p,FALSE));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>        check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                                           <span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>        check_nomsg(cpl_parameter_set_bool(p,FALSE));</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>        sinfo_msg(<span class="stringliteral">"Set ind_index to FALSE"</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION"</span>, PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">   *  Modified code begins here...</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>       <span class="keywordtype">int</span> i, nsky, ndark, nwave, non=0;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       cpl_frame * fr;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="keyword">const</span> <span class="keywordtype">char</span> * tag, * fname;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       <span class="keywordtype">char</span> name[32];</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       cpl_image * im;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       cpl_propertylist * plist;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       nsky = cpl_frameset_count_tags (<span class="keyword">set</span>, RAW_SKY_NODDING);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       nwave = cpl_frameset_count_tags (<span class="keyword">set</span>, RAW_WAVE_LAMP);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       ndark = cpl_frameset_count_tags (<span class="keyword">set</span>, PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       <span class="keywordflow">if</span> ( (nwave == 0) & (nsky>0) ) {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         sinfo_msg (<span class="stringliteral">"No arc lamp frames found, using sky frames instead"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         <span class="keywordflow">if</span> (ndark == 0)</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>           sinfo_msg (<span class="stringliteral">"Including Master dark is recommended when running wavecal on sky frames"</span>);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>         i = 0;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         <span class="keywordflow">while</span> (i < cpl_frameset_get_size(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>           fr = cpl_frameset_get_frame(<span class="keyword">set</span>,i);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>           tag = cpl_frame_get_tag (fr);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>           <span class="keywordflow">if</span> (strcmp(tag, RAW_SKY_NODDING)==0)</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>           {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                 cpl_frame * frnew = 0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>                 fname = cpl_frame_get_filename(fr);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                 sprintf (&name[0], <span class="stringliteral">"fakelamp_%d.fits"</span>, non++);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                 im = cpl_image_load(fname, CPL_TYPE_FLOAT, 0, 0);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                 plist = cpl_propertylist_load(fname,0);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                 <span class="comment">/* Both if these needs to be changed to make sure the sky frame is</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">                   interprated as ON-frame in sinfo_dfs.c</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment"></span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">                   The selection of KEY_NAME_LAMP_XE is arbitrary, but one of</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment">                   KEY_NAME_LAMP_* has to be set */</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                 cpl_propertylist_set_bool (plist, KEY_NAME_LAMP_XE, 1);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                 cpl_propertylist_set_string (plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"WAVE,LAMP"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                 cpl_image_save (im, name, CPL_BPP_IEEE_FLOAT, plist, CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                 cpl_image_delete (im);</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                 cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                 <span class="comment">/* Looks like it's not possible to modify the frame directly</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">                   without duplicating it first. */</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                 frnew = cpl_frame_duplicate (fr);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                 cpl_frame_set_filename(frnew, name);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                 cpl_frame_set_tag (frnew, RAW_WAVE_LAMP);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 cpl_frameset_erase_frame (<span class="keyword">set</span>, fr);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                 cpl_frameset_insert (<span class="keyword">set</span>, frnew);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>           }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         i++;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>       }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">       * Modified code ends here</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   }</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, NULL,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                        PRO_WAVE_LAMP_STACKED,0,fk),</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>       <span class="stringliteral">"%s FRAME DETERMINATION FAILED"</span>,PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   sinfo_msg(<span class="stringliteral">"%s FRAME DETERMINATION SUCCESS"</span>, PRO_WAVE_LAMP_STACKED);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   sinfo_msg(<span class="stringliteral">"WAVELENGTH CALIBRATION"</span>);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   sinfo_msg(<span class="stringliteral">"---------------------------------------------"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   ck0(sinfo_new_wave_cal_slit2(cpl_func,config, <span class="keyword">set</span>,ref_set),</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       <span class="stringliteral">"FAILED WAVELENGTH CALIBRATION"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   sinfo_msg(<span class="stringliteral">"SUCCESS WAVELENGTH CALIBRATION"</span>);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>    <span class="keywordflow">if</span>(pdensity < 2) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_STACK_MFLAT_DIST));</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>      check_nomsg(cpl_frameset_erase(<span class="keyword">set</span>,PRO_WAVE_LAMP_STACKED));</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>    }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>  cleanup:</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   sinfo_free_frameset(&ref_set);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   sinfo_free_frameset(&wrk_set);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__recipes_8c_source.html b/html/sinfo__recipes_8c_source.html
index 05295ce..7773c04 100644
--- a/html/sinfo__recipes_8c_source.html
+++ b/html/sinfo__recipes_8c_source.html
@@ -2,1256 +2,1287 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_recipes.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_recipes.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/***************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  05/06/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*</span>
-<a name="l00036"></a>00036 <span class="comment"> * System Headers</span>
-<a name="l00037"></a>00037 <span class="comment"> */</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment"> * Local Headers</span>
-<a name="l00041"></a>00041 <span class="comment"> */</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment"> *                                    Local variables</span>
-<a name="l00048"></a>00048 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">float</span>  sqrarg ;
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span>
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_chi2 ;                    <span class="comment">/* new reduced chi-squared */</span>
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span>
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">double</span> vec[MAXPAR] ;             <span class="comment">/* correction sinfo_vector */</span>
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[MAXPAR][MAXPAR] ; <span class="comment">/* original sinfo_matrix */</span>
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[MAXPAR][MAXPAR] ; <span class="comment">/* inverse of matrix1 */</span>
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span>
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[MAXPAR] ;          <span class="comment">/* parameter pointer */</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment"> *                                 Defines</span>
-<a name="l00063"></a>00063 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#define SQR(a) (sqrarg = (a) , sqrarg*sqrarg)</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span>
-<a name="l00067"></a>00067 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00068"></a>00068 <span class="comment"> *                    Functions private to this module</span>
-<a name="l00069"></a>00069 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>) ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">float</span>  * xdat,
-<a name="l00075"></a>00075                      <span class="keywordtype">int</span>    * xdim,
-<a name="l00076"></a>00076                      <span class="keywordtype">float</span>  * ydat,
-<a name="l00077"></a>00077                      <span class="keywordtype">float</span>  * wdat,
-<a name="l00078"></a>00078                      <span class="keywordtype">int</span>    * ndat,
-<a name="l00079"></a>00079                      <span class="keywordtype">float</span>  * fpar,
-<a name="l00080"></a>00080                      <span class="keywordtype">float</span>  * epar<span class="comment">/*,</span>
-<a name="l00081"></a>00081 <span class="comment">                     int    * npar */</span>) ;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">float</span>  * xdat,
-<a name="l00084"></a>00084                     <span class="keywordtype">int</span>    * xdim,
-<a name="l00085"></a>00085                     <span class="keywordtype">float</span>  * ydat,
-<a name="l00086"></a>00086                     <span class="keywordtype">float</span>  * wdat,
-<a name="l00087"></a>00087                     <span class="keywordtype">int</span>    * ndat,
-<a name="l00088"></a>00088                     <span class="keywordtype">float</span>  * fpar,
-<a name="l00089"></a>00089                     <span class="keywordtype">float</span>  * epar,
-<a name="l00090"></a>00090                     <span class="keywordtype">int</span>    * npar ) ;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keywordtype">float</span> 
-<a name="l00093"></a>00093 new_gaussian ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar*/</span> );
-<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00095"></a>00095 new_gaussian_deriv( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, 
-<a name="l00096"></a>00096                     <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00107"></a>00107 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00108"></a>00108 <span class="comment"> *                            Function codes</span>
-<a name="l00109"></a>00109 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keywordtype">float</span> sinfo_new_f_median(<span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> n)
-<a name="l00113"></a>00113 {
-<a name="l00114"></a>00114  pixelvalue p_array[100];
-<a name="l00115"></a>00115  <span class="keywordtype">int</span> i;
-<a name="l00116"></a>00116  
-<a name="l00117"></a>00117  <span class="keywordflow">for</span> (i=0;i<n;i++)
-<a name="l00118"></a>00118      p_array[i]= (pixelvalue) array[i];
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120  <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) sinfo_new_median(p_array, n);
-<a name="l00121"></a>00121 }
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00140"></a>00140 <span class="keywordtype">float</span> sinfo_new_clean_mean( <span class="keywordtype">float</span> * array, 
-<a name="l00141"></a>00141                   <span class="keywordtype">int</span>     n_elements,
-<a name="l00142"></a>00142                   <span class="keywordtype">float</span>   throwaway_low,
-<a name="l00143"></a>00143                   <span class="keywordtype">float</span>   throwaway_high )
-<a name="l00144"></a>00144 {
-<a name="l00145"></a>00145     <span class="keywordtype">int</span> i, n ;
-<a name="l00146"></a>00146     <span class="keywordtype">int</span> lo_n, hi_n ;
-<a name="l00147"></a>00147     <span class="keywordtype">float</span> sum ;
-<a name="l00148"></a>00148     
-<a name="l00149"></a>00149     <span class="keywordflow">if</span> ( array == NULL )
-<a name="l00150"></a>00150     {
-<a name="l00151"></a>00151         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no array given in sinfo_clean_mean!"</span>) ;
-<a name="l00152"></a>00152         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l00153"></a>00153     }
-<a name="l00154"></a>00154   
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> ( n_elements <= 0 )
-<a name="l00156"></a>00156     {
-<a name="l00157"></a>00157         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of elements given"</span>) ;
-<a name="l00158"></a>00158         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keywordflow">if</span> ( throwaway_low < 0. || throwaway_high < 0. ||
-<a name="l00162"></a>00162          throwaway_low + throwaway_high >= 100. )
-<a name="l00163"></a>00163     {
-<a name="l00164"></a>00164         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong throw away percentage given!"</span>) ;
-<a name="l00165"></a>00165         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168     lo_n = (int) (throwaway_low * (<span class="keywordtype">float</span>)n_elements / 100.) ;
-<a name="l00169"></a>00169     hi_n = (int) (throwaway_high * (<span class="keywordtype">float</span>)n_elements / 100.) ;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171     <span class="comment">/* sort the array */</span>
-<a name="l00172"></a>00172     sinfo_pixel_qsort( array, n_elements ) ;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     n = 0 ;
-<a name="l00175"></a>00175     sum = 0. ;
-<a name="l00176"></a>00176     <span class="keywordflow">for</span> ( i = lo_n ; i < n_elements - hi_n ; i++ )
-<a name="l00177"></a>00177     {
-<a name="l00178"></a>00178         <span class="keywordflow">if</span> ( !isnan(array[i]) )
-<a name="l00179"></a>00179         {
-<a name="l00180"></a>00180             sum += array[i] ;
-<a name="l00181"></a>00181             n++ ;
-<a name="l00182"></a>00182         }
-<a name="l00183"></a>00183     }
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> ( n == 0 )  
-<a name="l00185"></a>00185     {
-<a name="l00186"></a>00186         <span class="keywordflow">return</span> FLAG ;
-<a name="l00187"></a>00187     }
-<a name="l00188"></a>00188     <span class="keywordflow">else</span>
-<a name="l00189"></a>00189     {
-<a name="l00190"></a>00190         <span class="keywordflow">return</span> sum/(float)n ;
-<a name="l00191"></a>00191     }
-<a name="l00192"></a>00192 }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00207"></a>00207 pixelvalue sinfo_new_median(pixelvalue * array, <span class="keywordtype">int</span> n)
-<a name="l00208"></a>00208 {
-<a name="l00209"></a>00209     pixelvalue med ;
-<a name="l00210"></a>00210     
-<a name="l00211"></a>00211     <span class="keywordflow">if</span> ( array == NULL || n <= 0 )
-<a name="l00212"></a>00212     {
-<a name="l00213"></a>00213         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"nothing in the pixelvalue array, ZERO returned"</span>);
-<a name="l00214"></a>00214         <span class="keywordflow">return</span> ZERO ;
-<a name="l00215"></a>00215     }
-<a name="l00216"></a>00216     
-<a name="l00217"></a>00217     <span class="keywordflow">if</span> ( n == 1 )
-<a name="l00218"></a>00218     {
-<a name="l00219"></a>00219         <span class="keywordflow">return</span> array[0] ;
-<a name="l00220"></a>00220     }
-<a name="l00221"></a>00221  
-<a name="l00222"></a>00222     sinfo_pixel_qsort((<span class="keywordtype">float</span>*) array, n) ;
-<a name="l00223"></a>00223     <span class="keywordflow">if</span> ( n % 2 == 1 )
-<a name="l00224"></a>00224     {
-<a name="l00225"></a>00225         med = array[n/2] ;
-<a name="l00226"></a>00226     }
-<a name="l00227"></a>00227     <span class="keywordflow">else</span>
-<a name="l00228"></a>00228     {
-<a name="l00229"></a>00229         med = (array[n/2] + array[n/2 - 1])/2. ;
-<a name="l00230"></a>00230     }
-<a name="l00231"></a>00231     <span class="keywordflow">return</span> med ;
-<a name="l00232"></a>00232 }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 
-<a name="l00285"></a>00285 <span class="keywordtype">int</span> sinfo_new_lsqfit_c ( <span class="keywordtype">float</span> * xdat,
-<a name="l00286"></a>00286                <span class="keywordtype">int</span>   * xdim,
-<a name="l00287"></a>00287                <span class="keywordtype">float</span> * ydat,
-<a name="l00288"></a>00288                <span class="keywordtype">float</span> * wdat,
-<a name="l00289"></a>00289                <span class="keywordtype">int</span>   * ndat,
-<a name="l00290"></a>00290                <span class="keywordtype">float</span> * fpar,
-<a name="l00291"></a>00291                <span class="keywordtype">float</span> * epar,
-<a name="l00292"></a>00292                <span class="keywordtype">int</span>   * mpar,
-<a name="l00293"></a>00293                <span class="keywordtype">int</span>   * npar,
-<a name="l00294"></a>00294                <span class="keywordtype">float</span> * tol ,
-<a name="l00295"></a>00295                <span class="keywordtype">int</span>   * its ,
-<a name="l00296"></a>00296                <span class="keywordtype">float</span> * lab  )
-<a name="l00297"></a>00297 {
-<a name="l00298"></a>00298     <span class="keywordtype">int</span> i, n, r ;
-<a name="l00299"></a>00299     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span>
-<a name="l00300"></a>00300     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span>
-<a name="l00301"></a>00301     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span>
-<a name="l00302"></a>00302     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span>
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     itc   = 0 ;                    <span class="comment">/* fate of fit */</span>
-<a name="l00305"></a>00305     found = 0 ;                    <span class="comment">/* reset */</span>
-<a name="l00306"></a>00306     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span>
-<a name="l00307"></a>00307     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span>
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )
-<a name="l00310"></a>00310     {
-<a name="l00311"></a>00311         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span>
-<a name="l00312"></a>00312     }
-<a name="l00313"></a>00313     <span class="keywordflow">else</span>
-<a name="l00314"></a>00314     {
-<a name="l00315"></a>00315         tolerance = *tol ;                <span class="comment">/* tolerance */</span>
-<a name="l00316"></a>00316     }
-<a name="l00317"></a>00317     
-<a name="l00318"></a>00318     labda = fabs( *lab ) * LABFAC ;   <span class="comment">/* start value for mixing parameter */</span>
-<a name="l00319"></a>00319     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00320"></a>00320     {
-<a name="l00321"></a>00321         <span class="keywordflow">if</span> ( mpar[i] )
-<a name="l00322"></a>00322         {
-<a name="l00323"></a>00323             <span class="keywordflow">if</span> ( nfree > MAXPAR )         <span class="comment">/* too many free parameters */</span>
-<a name="l00324"></a>00324             {
-<a name="l00325"></a>00325                 <span class="keywordflow">return</span> -1 ;
-<a name="l00326"></a>00326             }
-<a name="l00327"></a>00327             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span>
-<a name="l00328"></a>00328         }
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330     
-<a name="l00331"></a>00331     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     
-<a name="l00332"></a>00332     {
-<a name="l00333"></a>00333         <span class="keywordflow">return</span> -2 ;
-<a name="l00334"></a>00334     }
-<a name="l00335"></a>00335     
-<a name="l00336"></a>00336     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l00337"></a>00337     {
-<a name="l00338"></a>00338         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l00339"></a>00339         {
-<a name="l00340"></a>00340             nuse ++ ;
-<a name="l00341"></a>00341         }
-<a name="l00342"></a>00342     }
-<a name="l00343"></a>00343     
-<a name="l00344"></a>00344     <span class="keywordflow">if</span> ( nfree >= nuse )
-<a name="l00345"></a>00345     {
-<a name="l00346"></a>00346         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span>
-<a name="l00347"></a>00347     }
-<a name="l00348"></a>00348     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span>
-<a name="l00349"></a>00349     {
-<a name="l00350"></a>00350         <span class="comment">/* initialize fpar array */</span>
-<a name="l00351"></a>00351         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  
-<a name="l00352"></a>00352         new_get_mat ( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l00353"></a>00353         r =  new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;
-<a name="l00354"></a>00354         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span>
-<a name="l00355"></a>00355         {
-<a name="l00356"></a>00356             <span class="keywordflow">return</span> r ;
-<a name="l00357"></a>00357         }
-<a name="l00358"></a>00358         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00359"></a>00359         {
-<a name="l00360"></a>00360             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span>
-<a name="l00361"></a>00361             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span>
-<a name="l00362"></a>00362         }
-<a name="l00363"></a>00363         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00364"></a>00364         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00365"></a>00365         {
-<a name="l00366"></a>00366             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )
-<a name="l00367"></a>00367             {
-<a name="l00368"></a>00368                 <span class="keywordflow">return</span> -7 ;
-<a name="l00369"></a>00369             }
-<a name="l00370"></a>00370             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / 
-<a name="l00371"></a>00371                                      sqrt( matrix1[i][i] ) ;
-<a name="l00372"></a>00372         }
-<a name="l00373"></a>00373     }
-<a name="l00374"></a>00374     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span>
-<a name="l00375"></a>00375     {
-<a name="l00376"></a>00376         <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l00377"></a>00377 <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span>
-<a name="l00378"></a>00378 <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span>
-<a name="l00379"></a>00379 <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span>
-<a name="l00380"></a>00380 <span class="comment">         * the matrix and calculate the correction vector. In the inner loop</span>
-<a name="l00381"></a>00381 <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span>
-<a name="l00382"></a>00382 <span class="comment">         * better solution than the previous one. If so, we leave the inner </span>
-<a name="l00383"></a>00383 <span class="comment">           loop else we increase labda (give more weight to the steepest </span>
-<a name="l00384"></a>00384 <span class="comment">           descent method) calculate the correction vector and check again. </span>
-<a name="l00385"></a>00385 <span class="comment">           After the inner loop we do a final check on the goodness of the </span>
-<a name="l00386"></a>00386 <span class="comment">           fit and if this satisfies</span>
-<a name="l00387"></a>00387 <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span>
-<a name="l00388"></a>00388 <span class="comment">         */</span>
-<a name="l00389"></a>00389         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span>
-<a name="l00390"></a>00390         {      
-<a name="l00391"></a>00391             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span>
-<a name="l00392"></a>00392             {
-<a name="l00393"></a>00393                 <span class="keywordflow">return</span> -4 ;               
-<a name="l00394"></a>00394             }
-<a name="l00395"></a>00395             new_get_mat( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar */</span>) ;
-<a name="l00396"></a>00396             
-<a name="l00397"></a>00397             <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l00398"></a>00398 <span class="comment">             * here we decrease labda since we may assume that each iteration</span>
-<a name="l00399"></a>00399 <span class="comment">             * brings us closer to the answer.</span>
-<a name="l00400"></a>00400 <span class="comment">             */</span>
-<a name="l00401"></a>00401             <span class="keywordflow">if</span> ( labda > LABMIN )
-<a name="l00402"></a>00402             {
-<a name="l00403"></a>00403                 labda = labda / LABFAC ;         <span class="comment">/* decrease labda */</span>
-<a name="l00404"></a>00404             }
-<a name="l00405"></a>00405             r = new_get_vec( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;
-<a name="l00406"></a>00406             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span>
-<a name="l00407"></a>00407             {
-<a name="l00408"></a>00408                 <span class="keywordflow">return</span> r ;
-<a name="l00409"></a>00409             }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411             <span class="keywordflow">while</span> ( chi1 >= sinfo_chi2 )        <span class="comment">/* interpolation loop */</span>
-<a name="l00412"></a>00412             {
-<a name="l00413"></a>00413                 <span class="comment">/*-----------------------------------------------------------</span>
-<a name="l00414"></a>00414 <span class="comment">                 * The next statement is based on experience, not on the </span>
-<a name="l00415"></a>00415 <span class="comment">                   mathematics of the problem. It is assumed that we have </span>
-<a name="l00416"></a>00416 <span class="comment">                   reached convergence when the pure steepest descent method </span>
-<a name="l00417"></a>00417 <span class="comment">                   does not produce a better solution.</span>
-<a name="l00418"></a>00418 <span class="comment">                 */</span>
-<a name="l00419"></a>00419                 <span class="keywordflow">if</span> ( labda > LABMAX )    <span class="comment">/* assume solution found */</span>
-<a name="l00420"></a>00420                 {
-<a name="l00421"></a>00421                     break ;
-<a name="l00422"></a>00422                 }
-<a name="l00423"></a>00423                 labda = labda * LABFAC ;     <span class="comment">/* increase mixing parameter */</span>
-<a name="l00424"></a>00424                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;
-<a name="l00425"></a>00425                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span>
-<a name="l00426"></a>00426                 {
-<a name="l00427"></a>00427                     <span class="keywordflow">return</span> r ;
-<a name="l00428"></a>00428                 }
-<a name="l00429"></a>00429             }
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431             <span class="keywordflow">if</span> ( labda <= LABMAX )        <span class="comment">/* save old parameters */</span>
-<a name="l00432"></a>00432             {
-<a name="l00433"></a>00433                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )
-<a name="l00434"></a>00434                 {
-<a name="l00435"></a>00435                     fpar[i] = epar[i] ;
-<a name="l00436"></a>00436                 }
-<a name="l00437"></a>00437             }
-<a name="l00438"></a>00438             <span class="keywordflow">if</span> ( (fabs( sinfo_chi2 - chi1 ) <= (tolerance * chi1)) || 
-<a name="l00439"></a>00439                  (labda > LABMAX) )
-<a name="l00440"></a>00440             {
-<a name="l00441"></a>00441                 <span class="comment">/*-------------------------------------------------------------</span>
-<a name="l00442"></a>00442 <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span>
-<a name="l00443"></a>00443 <span class="comment">                   the correct errors of the fitted parameters. This we do by </span>
-<a name="l00444"></a>00444 <span class="comment">                   using the pure Taylor method because we are very close to </span>
-<a name="l00445"></a>00445 <span class="comment">                   the real solution.</span>
-<a name="l00446"></a>00446 <span class="comment">                 */</span>
-<a name="l00447"></a>00447                 labda = 0.0 ;              <span class="comment">/* for Taylor solution */</span>
-<a name="l00448"></a>00448                 new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;
-<a name="l00449"></a>00449                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span>
-<a name="l00452"></a>00452                 {
-<a name="l00453"></a>00453                     <span class="keywordflow">return</span> r ;
-<a name="l00454"></a>00454                 }
-<a name="l00455"></a>00455                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )
-<a name="l00456"></a>00456                 {
-<a name="l00457"></a>00457                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span>
-<a name="l00458"></a>00458                 }
-<a name="l00459"></a>00459                 sinfo_chi2 = sqrt ( sinfo_chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l00462"></a>00462                 {
-<a name="l00463"></a>00463                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )
-<a name="l00464"></a>00464                     {
-<a name="l00465"></a>00465                         <span class="keywordflow">return</span> -7 ;
-<a name="l00466"></a>00466                     }
-<a name="l00467"></a>00467                     epar[parptr[i]] = sinfo_chi2 * sqrt( matrix2[i][i] ) / 
-<a name="l00468"></a>00468                                                    sqrt( matrix1[i][i] ) ;
-<a name="l00469"></a>00469                 }
-<a name="l00470"></a>00470                 found = 1 ;                  <span class="comment">/* we found a solution */</span>
-<a name="l00471"></a>00471             }
-<a name="l00472"></a>00472         }
-<a name="l00473"></a>00473     }
-<a name="l00474"></a>00474     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span>
-<a name="l00475"></a>00475 }
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 
-<a name="l00485"></a>00485 <span class="keywordtype">void</span> sinfo_new_convert_ZEROs_to_0_for_images(cpl_image * im)
-<a name="l00486"></a>00486 {
-<a name="l00487"></a>00487     <span class="keywordtype">int</span> i ;
-<a name="l00488"></a>00488     <span class="keywordtype">int</span> ilx=0;
-<a name="l00489"></a>00489     <span class="keywordtype">int</span> ily=0;
-<a name="l00490"></a>00490     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00493"></a>00493     {
-<a name="l00494"></a>00494         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!\n"</span>) ; 
-<a name="l00495"></a>00495         return ;
-<a name="l00496"></a>00496     }
-<a name="l00497"></a>00497     ilx=cpl_image_get_size_x(im);
-<a name="l00498"></a>00498     ily=cpl_image_get_size_y(im);
-<a name="l00499"></a>00499     pidata=cpl_image_get_data(im);
-<a name="l00500"></a>00500     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00501"></a>00501     {
-<a name="l00502"></a>00502         <span class="keywordflow">if</span>( isnan(pidata[i]) )
-<a name="l00503"></a>00503         {
-<a name="l00504"></a>00504             pidata[i] = 0. ;
-<a name="l00505"></a>00505         }
-<a name="l00506"></a>00506     }
-<a name="l00507"></a>00507     return ;
-<a name="l00508"></a>00508 }
-<a name="l00509"></a>00509 
-<a name="l00518"></a>00518 <span class="keywordtype">void</span> sinfo_new_convert_ZEROs_to_0_for_cubes(cpl_imagelist * cube)
-<a name="l00519"></a>00519 {
-<a name="l00520"></a>00520     <span class="keywordtype">int</span> i ;
-<a name="l00521"></a>00521     <span class="keywordtype">int</span> inp=0;
-<a name="l00522"></a>00522     cpl_image* i_img=NULL;  
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l00525"></a>00525     {
-<a name="l00526"></a>00526         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ; 
-<a name="l00527"></a>00527         return ;
-<a name="l00528"></a>00528     }
-<a name="l00529"></a>00529     inp=cpl_imagelist_get_size(cube);
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l00532"></a>00532     {
-<a name="l00533"></a>00533       i_img=cpl_imagelist_get(cube,i);
-<a name="l00534"></a>00534       sinfo_new_convert_ZEROs_to_0_for_images(i_img) ;
-<a name="l00535"></a>00535       cpl_imagelist_set(cube,i_img,i);
-<a name="l00536"></a>00536     }
-<a name="l00537"></a>00537     return ;
-<a name="l00538"></a>00538 }
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540 
-<a name="l00549"></a>00549 <span class="keywordtype">void</span> 
-<a name="l00550"></a>00550 sinfo_new_convert_ZEROs_to_0_for_cubes_range(cpl_imagelist * cube,
-<a name="l00551"></a>00551                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,<span class="keyword">const</span> <span class="keywordtype">int</span> z_max)
-<a name="l00552"></a>00552 {
-<a name="l00553"></a>00553     <span class="keywordtype">int</span> i ;
-<a name="l00554"></a>00554     cpl_image* i_img=NULL;  
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l00557"></a>00557     {
-<a name="l00558"></a>00558         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ; 
-<a name="l00559"></a>00559         return ;
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561     <span class="keywordflow">for</span> ( i = z_min ; i < z_max ; i++ )
-<a name="l00562"></a>00562     {
-<a name="l00563"></a>00563       i_img=cpl_imagelist_get(cube,i);
-<a name="l00564"></a>00564       sinfo_new_convert_ZEROs_to_0_for_images(i_img) ;
-<a name="l00565"></a>00565       cpl_imagelist_set(cube,i_img,i);
-<a name="l00566"></a>00566     }
-<a name="l00567"></a>00567     return ;
-<a name="l00568"></a>00568 }
-<a name="l00575"></a>00575 <span class="keywordtype">void</span> sinfo_new_convert_0_to_ZEROs_for_images(cpl_image * im)
-<a name="l00576"></a>00576 {
-<a name="l00577"></a>00577     <span class="keywordtype">int</span> i ;
-<a name="l00578"></a>00578     <span class="keywordtype">int</span> ilx=0;
-<a name="l00579"></a>00579     <span class="keywordtype">int</span> ily=0;
-<a name="l00580"></a>00580     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582     <span class="keywordflow">if</span> ( im == NULL )
-<a name="l00583"></a>00583     {
-<a name="l00584"></a>00584         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l00585"></a>00585         return ;
-<a name="l00586"></a>00586     }
-<a name="l00587"></a>00587     ilx=cpl_image_get_size_x(im);
-<a name="l00588"></a>00588     ily=cpl_image_get_size_y(im);
-<a name="l00589"></a>00589     pidata=cpl_image_get_data(im);
-<a name="l00590"></a>00590     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00591"></a>00591     {
-<a name="l00592"></a>00592         <span class="keywordflow">if</span>( pidata[i] == 0. )
-<a name="l00593"></a>00593         {
-<a name="l00594"></a>00594             pidata[i] = ZERO ;
-<a name="l00595"></a>00595         }
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597     return ;
-<a name="l00598"></a>00598 }
-<a name="l00599"></a>00599 
-<a name="l00606"></a>00606 <span class="keywordtype">void</span> sinfo_new_convert_0_to_ZERO_for_cubes(cpl_imagelist * cube)
-<a name="l00607"></a>00607 {
-<a name="l00608"></a>00608     <span class="keywordtype">int</span> i ;
-<a name="l00609"></a>00609     <span class="keywordtype">int</span> inp=0;
-<a name="l00610"></a>00610     cpl_image* i_img=NULL;
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l00613"></a>00613     {
-<a name="l00614"></a>00614         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;
-<a name="l00615"></a>00615         return ;
-<a name="l00616"></a>00616     }
-<a name="l00617"></a>00617     inp=cpl_imagelist_get_size(cube);
-<a name="l00618"></a>00618     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l00619"></a>00619     {
-<a name="l00620"></a>00620       i_img=cpl_imagelist_get(cube,i);
-<a name="l00621"></a>00621       sinfo_new_convert_0_to_ZEROs_for_images(i_img) ;
-<a name="l00622"></a>00622       cpl_imagelist_set(cube,i_img,i);
-<a name="l00623"></a>00623     }
-<a name="l00624"></a>00624     return ;
-<a name="l00625"></a>00625 }
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627 
-<a name="l00636"></a>00636 <span class="keywordtype">void</span> 
-<a name="l00637"></a>00637 sinfo_new_convert_0_to_ZERO_for_cubes_range(cpl_imagelist * cube,
-<a name="l00638"></a>00638                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,<span class="keyword">const</span> <span class="keywordtype">int</span> z_max)
-<a name="l00639"></a>00639 {
-<a name="l00640"></a>00640     <span class="keywordtype">int</span> i ;
-<a name="l00641"></a>00641     <span class="keywordtype">int</span> inp=0;
-<a name="l00642"></a>00642     cpl_image* i_img=NULL;
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644     <span class="keywordflow">if</span> ( cube == NULL )
-<a name="l00645"></a>00645     {
-<a name="l00646"></a>00646         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;
-<a name="l00647"></a>00647         return ;
-<a name="l00648"></a>00648     }
-<a name="l00649"></a>00649     inp=cpl_imagelist_get_size(cube);
-<a name="l00650"></a>00650     <span class="keywordflow">for</span> ( i = z_min ; i < z_max ; i++ )
-<a name="l00651"></a>00651     {
-<a name="l00652"></a>00652       i_img=cpl_imagelist_get(cube,i);
-<a name="l00653"></a>00653       sinfo_new_convert_0_to_ZEROs_for_images(i_img) ;
-<a name="l00654"></a>00654       cpl_imagelist_set(cube,i_img,i);
-<a name="l00655"></a>00655     }
-<a name="l00656"></a>00656     return ;
-<a name="l00657"></a>00657 }
-<a name="l00664"></a>00664 <span class="keywordtype">void</span> sinfo_new_invert(cpl_image * im)
-<a name="l00665"></a>00665 {
-<a name="l00666"></a>00666     <span class="keywordtype">int</span> i ;
-<a name="l00667"></a>00667     <span class="keywordtype">int</span> ilx=0;
-<a name="l00668"></a>00668     <span class="keywordtype">int</span> ily=0;
-<a name="l00669"></a>00669     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671     ilx=cpl_image_get_size_x(im);
-<a name="l00672"></a>00672     ily=cpl_image_get_size_y(im);
-<a name="l00673"></a>00673     pidata=cpl_image_get_data(im);
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00676"></a>00676     {
-<a name="l00677"></a>00677         pidata[i] = -pidata[i] ;
-<a name="l00678"></a>00678     }
-<a name="l00679"></a>00679     return ;
-<a name="l00680"></a>00680 }
-<a name="l00681"></a>00681 
-<a name="l00689"></a>00689 <span class="keywordtype">int</span> sinfo_new_nint ( <span class="keywordtype">double</span> x ) 
-<a name="l00690"></a>00690 {
-<a name="l00691"></a>00691     <span class="keywordtype">int</span> k ;
-<a name="l00692"></a>00692 
-<a name="l00693"></a>00693     k = x ;
-<a name="l00694"></a>00694     <span class="keywordflow">if</span> ( x >= 0. )
-<a name="l00695"></a>00695     {
-<a name="l00696"></a>00696         <span class="keywordflow">if</span> ( (x - (<span class="keywordtype">double</span>) k) <= 0.5 )
-<a name="l00697"></a>00697         {
-<a name="l00698"></a>00698             <span class="keywordflow">return</span> k ;
-<a name="l00699"></a>00699         }
-<a name="l00700"></a>00700         <span class="keywordflow">else</span>
-<a name="l00701"></a>00701         {
-<a name="l00702"></a>00702             <span class="keywordflow">return</span> k + 1 ;
-<a name="l00703"></a>00703         }
-<a name="l00704"></a>00704     }
-<a name="l00705"></a>00705     <span class="keywordflow">else</span>
-<a name="l00706"></a>00706     {
-<a name="l00707"></a>00707         <span class="keywordflow">if</span> ( (x - (<span class="keywordtype">double</span>) k) <= -0.5 )
-<a name="l00708"></a>00708         {
-<a name="l00709"></a>00709             <span class="keywordflow">return</span> k - 1;
-<a name="l00710"></a>00710         }
-<a name="l00711"></a>00711         <span class="keywordflow">else</span>
-<a name="l00712"></a>00712         {
-<a name="l00713"></a>00713             <span class="keywordflow">return</span> k ;
-<a name="l00714"></a>00714         }
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716 }
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718 
-<a name="l00732"></a>00732 <span class="preprocessor">#define STEP_MIN        (-half_search)</span>
-<a name="l00733"></a>00733 <span class="preprocessor"></span><span class="preprocessor">#define STEP_MAX        (half_search)</span>
-<a name="l00734"></a>00734 <span class="preprocessor"></span>
-<a name="l00735"></a>00735 <span class="keywordtype">double</span> * sinfo_new_xcorrel(
-<a name="l00736"></a>00736     <span class="keywordtype">float</span>      *    line_i,
-<a name="l00737"></a>00737     <span class="keywordtype">int</span>             width_i,
-<a name="l00738"></a>00738     <span class="keywordtype">float</span>      *    line_t,
-<a name="l00739"></a>00739     <span class="keywordtype">int</span>             width_t,
-<a name="l00740"></a>00740     <span class="keywordtype">int</span>             half_search,
-<a name="l00741"></a>00741     <span class="keywordtype">int</span>     *       delta,
-<a name="l00742"></a>00742     <span class="keywordtype">int</span>       *     maxpos,
-<a name="l00743"></a>00743     <span class="keywordtype">double</span>     *    xcorr_max 
-<a name="l00744"></a>00744     
-<a name="l00745"></a>00745 )
-<a name="l00746"></a>00746 {
-<a name="l00747"></a>00747     <span class="keywordtype">double</span>  * xcorr ;
-<a name="l00748"></a>00748     <span class="keywordtype">double</span>   mean_i, mean_t ;
-<a name="l00749"></a>00749     <span class="keywordtype">double</span>   rms_i, rms_t ;
-<a name="l00750"></a>00750     <span class="keywordtype">double</span>   sum, sqsum ;
-<a name="l00751"></a>00751     <span class="keywordtype">double</span>   norm ;
-<a name="l00752"></a>00752     <span class="keywordtype">int</span>      nsteps ;
-<a name="l00753"></a>00753     <span class="keywordtype">int</span>      i ;
-<a name="l00754"></a>00754     <span class="keywordtype">int</span>      step ;
-<a name="l00755"></a>00755     <span class="keywordtype">int</span>      nval ;
-<a name="l00756"></a>00756     <span class="comment">/*double   r;*/</span>
-<a name="l00757"></a>00757 
-<a name="l00758"></a>00758 
-<a name="l00759"></a>00759     <span class="comment">/* Compute normalization factors */</span>
-<a name="l00760"></a>00760     sum = sqsum = 0.00 ;
-<a name="l00761"></a>00761     <span class="keywordflow">for</span> (i=0 ; i<width_i ; i++) {
-<a name="l00762"></a>00762         sum += (double)line_i[i] ;
-<a name="l00763"></a>00763         sqsum += (double)line_i[i] * (<span class="keywordtype">double</span>)line_i[i];
-<a name="l00764"></a>00764     }
-<a name="l00765"></a>00765     mean_i = sum / (double)width_i ;
-<a name="l00766"></a>00766     sqsum /= (double)width_i ;
-<a name="l00767"></a>00767     rms_i = sqsum - mean_i*mean_i ;
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769     sum = sqsum = 0.00 ;
-<a name="l00770"></a>00770     <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {
-<a name="l00771"></a>00771         sum += (double)line_t[i] ;
-<a name="l00772"></a>00772         sqsum += (double)line_t[i] * (<span class="keywordtype">double</span>)line_t[i];
-<a name="l00773"></a>00773     }
-<a name="l00774"></a>00774     mean_t = sum / (double)width_t ;
-<a name="l00775"></a>00775     sqsum /= (double)width_t ;
-<a name="l00776"></a>00776     rms_t = sqsum - mean_t*mean_t ;
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778     norm = 1.00 / sqrt(rms_i * rms_t);
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780     nsteps = (STEP_MAX - STEP_MIN)  ;
-<a name="l00781"></a>00781     xcorr = cpl_malloc(nsteps * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00782"></a>00782     <span class="keywordflow">for</span> (step=STEP_MIN ; step<STEP_MAX ; step++) {
-<a name="l00783"></a>00783         xcorr[step-STEP_MIN] = 0.00 ;
-<a name="l00784"></a>00784         nval = 0 ;
-<a name="l00785"></a>00785         <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {
-<a name="l00786"></a>00786             <span class="keywordflow">if</span> ((i+step >= 0) &&
-<a name="l00787"></a>00787                 (i+step < width_i)) {
-<a name="l00788"></a>00788             xcorr[step-STEP_MIN] += ((double)line_t[i] - mean_t) *
-<a name="l00789"></a>00789                                     ((double)line_i[i+step] - mean_i) *
-<a name="l00790"></a>00790                                     norm ;
-<a name="l00791"></a>00791                 nval++ ;
-<a name="l00792"></a>00792             }
-<a name="l00793"></a>00793         }
-<a name="l00794"></a>00794         xcorr[step-STEP_MIN] /= (double)nval ;
-<a name="l00795"></a>00795     }
-<a name="l00796"></a>00796     *xcorr_max = xcorr[0] ;
-<a name="l00797"></a>00797     *maxpos    = 0 ;
-<a name="l00798"></a>00798     <span class="keywordflow">for</span> (i=0 ; i<nsteps ; i++) {
-<a name="l00799"></a>00799         <span class="keywordflow">if</span> (xcorr[i]>*xcorr_max) {
-<a name="l00800"></a>00800             *maxpos = i ;
-<a name="l00801"></a>00801             *xcorr_max = xcorr[i];
-<a name="l00802"></a>00802         }
-<a name="l00803"></a>00803     }
-<a name="l00804"></a>00804     (*delta) = + (STEP_MIN + *maxpos);
-<a name="l00805"></a>00805     <span class="keywordflow">return</span> xcorr ;
-<a name="l00806"></a>00806 }
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808 <span class="comment">/* FILE ELEMENT: sinfo_nev_ille.c                                           */</span>
-<a name="l00809"></a>00809 <span class="comment">/*                                                                    */</span>
-<a name="l00810"></a>00810 <span class="comment">/**********************************************************************/</span>
-<a name="l00811"></a>00811 <span class="comment">/*                                                                    */</span>
-<a name="l00812"></a>00812 <span class="comment">/*                      double sinfo_nev_ille()                             */</span>
-<a name="l00813"></a>00813 <span class="comment">/*                                                                    */</span>
-<a name="l00814"></a>00814 <span class="comment">/**********************************************************************/</span>
-<a name="l00815"></a>00815 <span class="comment">/*                                                                    */</span>
-<a name="l00816"></a>00816 <span class="comment">/*  DESCRIPTION:                                                      */</span>
-<a name="l00817"></a>00817 <span class="comment">/*  For a given table (x , f(x )), i = 0(1)n  and a given argument z  */</span>
-<a name="l00818"></a>00818 <span class="comment">/*  the function computes the interpolated value for the argument z   */</span>
-<a name="l00819"></a>00819 <span class="comment">/*  using Neville's interpolation/ extrapolation algorithm.           */</span>
-<a name="l00820"></a>00820 <span class="comment">/*                                                                    */</span>
-<a name="l00821"></a>00821 <span class="comment">/*  FUNCTIONS CALLED:                                                 */</span>
-<a name="l00822"></a>00822 <span class="comment">/*  System library: <stdio.h> printf(), fabs();                       */</span>
-<a name="l00823"></a>00823 <span class="comment">/*  Numlib library: None                                              */</span>
-<a name="l00824"></a>00824 <span class="comment">/*  Local functions: nevtable();                                      */</span>
-<a name="l00825"></a>00825 <span class="comment">/*  User supplied: None                                               */</span>
-<a name="l00826"></a>00826 <span class="comment">/*                                                                    */</span>
-<a name="l00827"></a>00827 <span class="comment">/*  PROGRAMMED BY: T.Haavie                                           */</span>
-<a name="l00828"></a>00828 <span class="comment">/*  DATE/VERSION: 88-07-06/1.0                                        */</span>
-<a name="l00829"></a>00829 <span class="comment">/*                                                                    */</span>
-<a name="l00830"></a>00830 <span class="comment">/**********************************************************************/</span>
-<a name="l00831"></a>00831 <span class="keywordtype">double</span> sinfo_nev_ille(<span class="keywordtype">double</span> x[], <span class="keywordtype">double</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> z, <span class="keywordtype">int</span>* flag)
-<a name="l00832"></a>00832                <span class="comment">/* PARAMETERS(input):                                  */</span>
-<a name="l00833"></a>00833 <span class="comment">/* double x[];     Abscissae values in the table.                      */</span>
-<a name="l00834"></a>00834 <span class="comment">/* double f[];     Function values in the table.                       */</span>
-<a name="l00835"></a>00835 <span class="comment">/* int n;         The number of elements in the table is n+1.         */</span>
-<a name="l00836"></a>00836 <span class="comment">/* double z;       Argument to be used in interpolation/extrapolation. */</span>
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838 
-<a name="l00839"></a>00839 <span class="comment">/*                PARAMETERS(input/output):                           */</span>
-<a name="l00840"></a>00840 <span class="comment">/* int *flag;    Flag parameter(output):                             */</span>
-<a name="l00841"></a>00841                <span class="comment">/* = 0, n < 0 and/or eps < 0, should be positive+.     */</span>
-<a name="l00842"></a>00842                <span class="comment">/* = 1, required rel.err. is not obtained.             */</span>
-<a name="l00843"></a>00843                <span class="comment">/* = 2, required rel. err. is obtained.                */</span>
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845 <span class="comment">/* the computed estimate for the interpolated/extrapolated  value re- */</span>
-<a name="l00846"></a>00846 <span class="comment">/* turned through function name sinfo_nev_ille.                             */</span>
-<a name="l00847"></a>00847 
-<a name="l00848"></a>00848 {
-<a name="l00849"></a>00849         <span class="keywordtype">double</span> p[11]; <span class="comment">/* Array used for storing the new row elements */</span>
-<a name="l00850"></a>00850                        <span class="comment">/* in the interpolation/extrapolation table.   */</span>
-<a name="l00851"></a>00851         <span class="keywordtype">double</span> q[11]; <span class="comment">/* Array used for storing the old row elements */</span>
-<a name="l00852"></a>00852                        <span class="comment">/* in the interpolation/extrapolation table    */</span>
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854         <span class="keywordtype">double</span> factor;
-<a name="l00855"></a>00855         <span class="keywordtype">int</span> m, k;
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857        
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859         <span class="keywordflow">if</span> (n < 0 )
-<a name="l00860"></a>00860         {
-<a name="l00861"></a>00861                 *flag = 0;
-<a name="l00862"></a>00862                 <span class="keywordflow">return</span>(0.);
-<a name="l00863"></a>00863         }
-<a name="l00864"></a>00864 
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866         q[0] = f[0];               <span class="comment">/* Set initial value in the table. */</span>
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868         <span class="keywordflow">for</span> (k = 1; k <= n; k++)   <span class="comment">/* k counts rows in the table.     */</span>
-<a name="l00869"></a>00869         {
-<a name="l00870"></a>00870                 p[0] = f[k];
-<a name="l00871"></a>00871                 <span class="keywordflow">for</span> (m = 1; m <= k; m++) <span class="comment">/* m counts element in row.  */</span>
-<a name="l00872"></a>00872                 {
-<a name="l00873"></a>00873                         factor = (z - x[k]) / (x[k] - x[k-m]);
-<a name="l00874"></a>00874                         p[m] = p[m-1] + factor * (p[m-1] - q[m-1]);
-<a name="l00875"></a>00875                 }
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877 
-<a name="l00878"></a>00878                 <span class="keywordflow">for</span> (m = 0; m <= k; m++) <span class="comment">/* Shift old row to new row.  */</span>
-<a name="l00879"></a>00879                         q[m] = p[m];
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881         } <span class="comment">/* End of k-loop. */</span>
-<a name="l00882"></a>00882 
-<a name="l00883"></a>00883         *flag = 1;              <span class="comment">/* Required rel.error is not obtained. */</span>
-<a name="l00884"></a>00884         <span class="keywordflow">return</span>(p[n]);
-<a name="l00885"></a>00885 
-<a name="l00886"></a>00886 } <span class="comment">/* End of sinfo_nev_ille(). */</span>
-<a name="l00887"></a>00887 
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890 <span class="keywordtype">float</span> sinfo_new_nev_ille(<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> z, <span class="keywordtype">int</span>* flag)
-<a name="l00891"></a>00891                <span class="comment">/* PARAMETERS(input):                                  */</span>
-<a name="l00892"></a>00892 <span class="comment">/* float x[];     Abscissae values in the table.                      */</span>
-<a name="l00893"></a>00893 <span class="comment">/* float f[];     Function values in the table.                       */</span>
-<a name="l00894"></a>00894 <span class="comment">/* int n;         The number of elements in the table is n+1.         */</span>
-<a name="l00895"></a>00895 <span class="comment">/* float z;       Argument to be used in interpolation/extrapolation. */</span>
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898 <span class="comment">/*                PARAMETERS(input/output):                           */</span>
-<a name="l00899"></a>00899 <span class="comment">/* int *flag;    Flag parameter(output):                             */</span>
-<a name="l00900"></a>00900                <span class="comment">/* = 0, n < 0 and/or eps < 0, should be positive+.     */</span>
-<a name="l00901"></a>00901                <span class="comment">/* = 1, required rel.err. is not obtained.             */</span>
-<a name="l00902"></a>00902                <span class="comment">/* = 2, required rel. err. is obtained.                */</span>
-<a name="l00903"></a>00903 
-<a name="l00904"></a>00904 <span class="comment">/* the computed estimate for the interpolated/extrapolated  value re- */</span>
-<a name="l00905"></a>00905 <span class="comment">/* turned through function name sinfo_nev_ille.                             */</span>
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907 {
-<a name="l00908"></a>00908         <span class="keywordtype">float</span> p[11]; <span class="comment">/* Array used for storing the new row elements */</span>
-<a name="l00909"></a>00909                        <span class="comment">/* in the interpolation/extrapolation table.   */</span>
-<a name="l00910"></a>00910         <span class="keywordtype">float</span> q[11]; <span class="comment">/* Array used for storing the old row elements */</span>
-<a name="l00911"></a>00911                        <span class="comment">/* in the interpolation/extrapolation table    */</span>
-<a name="l00912"></a>00912 
-<a name="l00913"></a>00913         <span class="keywordtype">float</span> factor;
-<a name="l00914"></a>00914         <span class="keywordtype">int</span> m, k;
-<a name="l00915"></a>00915 
-<a name="l00916"></a>00916        
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918         <span class="keywordflow">if</span> (n < 0 )
-<a name="l00919"></a>00919         {
-<a name="l00920"></a>00920                 *flag = 0;
-<a name="l00921"></a>00921                 <span class="keywordflow">return</span>(0.);
-<a name="l00922"></a>00922         }
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924 
-<a name="l00925"></a>00925         q[0] = f[0];               <span class="comment">/* Set initial value in the table. */</span>
-<a name="l00926"></a>00926 
-<a name="l00927"></a>00927         <span class="keywordflow">for</span> (k = 1; k <= n; k++)   <span class="comment">/* k counts rows in the table.     */</span>
-<a name="l00928"></a>00928         {
-<a name="l00929"></a>00929                 p[0] = f[k];
-<a name="l00930"></a>00930                 <span class="keywordflow">for</span> (m = 1; m <= k; m++) <span class="comment">/* m counts element in row.  */</span>
-<a name="l00931"></a>00931                 {
-<a name="l00932"></a>00932                         factor = (z - x[k]) / (x[k] - x[k-m]);
-<a name="l00933"></a>00933                         p[m] = p[m-1] + factor * (p[m-1] - q[m-1]);
-<a name="l00934"></a>00934                 }
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936 
-<a name="l00937"></a>00937                 <span class="keywordflow">for</span> (m = 0; m <= k; m++) <span class="comment">/* Shift old row to new row.  */</span>
-<a name="l00938"></a>00938                         q[m] = p[m];
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940         } <span class="comment">/* End of k-loop. */</span>
-<a name="l00941"></a>00941 
-<a name="l00942"></a>00942         *flag = 1;              <span class="comment">/* Required rel.error is not obtained. */</span>
-<a name="l00943"></a>00943         <span class="keywordflow">return</span>(p[n]);
-<a name="l00944"></a>00944 
-<a name="l00945"></a>00945 } <span class="comment">/* End of sinfo_nev_ille(). */</span>
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947 
-<a name="l00972"></a>00972 <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">float</span> * xdat,
-<a name="l00973"></a>00973                     <span class="keywordtype">int</span>   * xdim,
-<a name="l00974"></a>00974                     <span class="keywordtype">float</span> * ydat,
-<a name="l00975"></a>00975                     <span class="keywordtype">float</span> * wdat,
-<a name="l00976"></a>00976                     <span class="keywordtype">int</span>   * ndat,
-<a name="l00977"></a>00977                     <span class="keywordtype">float</span> * fpar,
-<a name="l00978"></a>00978                     <span class="keywordtype">float</span> * epar,
-<a name="l00979"></a>00979                     <span class="keywordtype">int</span>   * npar )
-<a name="l00980"></a>00980 {
-<a name="l00981"></a>00981     <span class="keywordtype">double</span> dj ;
-<a name="l00982"></a>00982     <span class="keywordtype">double</span> dy ;
-<a name="l00983"></a>00983     <span class="keywordtype">double</span> mii ;
-<a name="l00984"></a>00984     <span class="keywordtype">double</span> mji ;
-<a name="l00985"></a>00985     <span class="keywordtype">double</span> mjj ;
-<a name="l00986"></a>00986     <span class="keywordtype">double</span> wn ;
-<a name="l00987"></a>00987     <span class="keywordtype">int</span> i, j, n, r ;
-<a name="l00988"></a>00988 
-<a name="l00989"></a>00989     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span>
-<a name="l00990"></a>00990     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l00991"></a>00991     {
-<a name="l00992"></a>00992         mjj = matrix1[j][j] ;
-<a name="l00993"></a>00993         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span>
-<a name="l00994"></a>00994         {
-<a name="l00995"></a>00995             <span class="keywordflow">return</span> -5 ;
-<a name="l00996"></a>00996         }
-<a name="l00997"></a>00997         mjj = sqrt( mjj ) ;
-<a name="l00998"></a>00998         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l00999"></a>00999         {
-<a name="l01000"></a>01000             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;
-<a name="l01001"></a>01001             matrix2[i][j] = matrix2[j][i] = mji ;
-<a name="l01002"></a>01002         }
-<a name="l01003"></a>01003         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span>
-<a name="l01004"></a>01004     }    
-<a name="l01005"></a>01005     
-<a name="l01006"></a>01006     <span class="keywordflow">if</span> ( (r = new_inv_mat()) )       <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span>
-<a name="l01007"></a>01007     {
-<a name="l01008"></a>01008         <span class="keywordflow">return</span> r ;
-<a name="l01009"></a>01009     }
-<a name="l01010"></a>01010     
-<a name="l01011"></a>01011     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )
-<a name="l01012"></a>01012     {
-<a name="l01013"></a>01013         epar[i] = fpar[i] ;
-<a name="l01014"></a>01014     }
-<a name="l01015"></a>01015     
-<a name="l01016"></a>01016     <span class="comment">/* loop to calculate correction sinfo_vector */</span>
-<a name="l01017"></a>01017     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l01018"></a>01018     {
-<a name="l01019"></a>01019         dj = 0.0 ;
-<a name="l01020"></a>01020         mjj = matrix1[j][j] ;
-<a name="l01021"></a>01021         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span>
-<a name="l01022"></a>01022         {
-<a name="l01023"></a>01023             <span class="keywordflow">return</span> -7 ;
-<a name="l01024"></a>01024         }
-<a name="l01025"></a>01025         mjj = sqrt ( mjj ) ;
-<a name="l01026"></a>01026         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01027"></a>01027         {
-<a name="l01028"></a>01028             mii = matrix1[i][i] ;
-<a name="l01029"></a>01029             <span class="keywordflow">if</span> ( mii <= 0.0 )
-<a name="l01030"></a>01030             {
-<a name="l01031"></a>01031                 <span class="keywordflow">return</span> -7 ;
-<a name="l01032"></a>01032             }
-<a name="l01033"></a>01033             mii = sqrt( mii ) ;
-<a name="l01034"></a>01034             dj += vec[i] * matrix2[j][i] / mjj / mii ;
-<a name="l01035"></a>01035         }
-<a name="l01036"></a>01036         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span>
-<a name="l01037"></a>01037     }    
-<a name="l01038"></a>01038     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l01039"></a>01039  
-<a name="l01040"></a>01040     <span class="comment">/* loop through the data points */</span>
-<a name="l01041"></a>01041     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l01042"></a>01042     {
-<a name="l01043"></a>01043         wn = wdat[n] ;               <span class="comment">/* get weight */</span>
-<a name="l01044"></a>01044         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span>
-<a name="l01045"></a>01045         {
-<a name="l01046"></a>01046             dy = ydat[n] - new_gaussian( &xdat[(*xdim) * n], epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l01047"></a>01047             chi1 += wdat[n] * dy * dy ;
-<a name="l01048"></a>01048         }
-<a name="l01049"></a>01049     }
-<a name="l01050"></a>01050     <span class="keywordflow">return</span> 0 ;
-<a name="l01051"></a>01051 }   
-<a name="l01052"></a>01052     
-<a name="l01053"></a>01053 
-<a name="l01069"></a>01069 <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">float</span> * xdat,
-<a name="l01070"></a>01070                      <span class="keywordtype">int</span>   * xdim,
-<a name="l01071"></a>01071                      <span class="keywordtype">float</span> * ydat,
-<a name="l01072"></a>01072                      <span class="keywordtype">float</span> * wdat,
-<a name="l01073"></a>01073                      <span class="keywordtype">int</span>   * ndat,
-<a name="l01074"></a>01074                      <span class="keywordtype">float</span> * fpar,
-<a name="l01075"></a>01075                      <span class="keywordtype">float</span> * epar<span class="comment">/*,</span>
-<a name="l01076"></a>01076 <span class="comment">                     int   * npar */</span>)
-<a name="l01077"></a>01077 {
-<a name="l01078"></a>01078     <span class="keywordtype">double</span> wd ;
-<a name="l01079"></a>01079     <span class="keywordtype">double</span> wn ;
-<a name="l01080"></a>01080     <span class="keywordtype">double</span> yd ;
-<a name="l01081"></a>01081     <span class="keywordtype">int</span> i, j, n ;
-<a name="l01082"></a>01082 
-<a name="l01083"></a>01083     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l01084"></a>01084     {
-<a name="l01085"></a>01085         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span>
-<a name="l01086"></a>01086         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   
-<a name="l01087"></a>01087         <span class="comment">/* zero sinfo_matrix only on and below diagonal */</span>
-<a name="l01088"></a>01088         {
-<a name="l01089"></a>01089             matrix1[j][i] = 0.0 ;
-<a name="l01090"></a>01090         }
-<a name="l01091"></a>01091     }
-<a name="l01092"></a>01092     sinfo_chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span>
-<a name="l01093"></a>01093     
-<a name="l01094"></a>01094     <span class="comment">/* loop through data points */</span>
-<a name="l01095"></a>01095     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )
-<a name="l01096"></a>01096     {
-<a name="l01097"></a>01097         wn = wdat[n] ;
-<a name="l01098"></a>01098         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span>
-<a name="l01099"></a>01099         {
-<a name="l01100"></a>01100             yd = ydat[n] - new_gaussian( &xdat[(*xdim) * n], fpar<span class="comment">/*, npar*/</span> ) ;
-<a name="l01101"></a>01101             new_gaussian_deriv( &xdat[(*xdim) * n], fpar, epar<span class="comment">/*, npar*/</span> ) ;
-<a name="l01102"></a>01102             sinfo_chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span>
-<a name="l01103"></a>01103             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )
-<a name="l01104"></a>01104             {
-<a name="l01105"></a>01105                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span>
-<a name="l01106"></a>01106                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span>
-<a name="l01107"></a>01107                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span>
-<a name="l01108"></a>01108                 {
-<a name="l01109"></a>01109                     matrix1[j][i] += epar[parptr[i]] * wd ;
-<a name="l01110"></a>01110                 }
-<a name="l01111"></a>01111             }
-<a name="l01112"></a>01112         }
-<a name="l01113"></a>01113     }                   
-<a name="l01114"></a>01114 }  
-<a name="l01115"></a>01115    
-<a name="l01116"></a>01116 
-<a name="l01117"></a>01117 
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120  
-<a name="l01129"></a>01129 <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>)
-<a name="l01130"></a>01130 {
-<a name="l01131"></a>01131     <span class="keywordtype">double</span> even ;
-<a name="l01132"></a>01132     <span class="keywordtype">double</span> hv[MAXPAR] ;
-<a name="l01133"></a>01133     <span class="keywordtype">double</span> mjk ;
-<a name="l01134"></a>01134     <span class="keywordtype">double</span> rowmax ;
-<a name="l01135"></a>01135     <span class="keywordtype">int</span> evin ;
-<a name="l01136"></a>01136     <span class="keywordtype">int</span> i, j, k, row ;
-<a name="l01137"></a>01137     <span class="keywordtype">int</span> per[MAXPAR] ;
-<a name="l01138"></a>01138    
-<a name="l01139"></a>01139     <span class="comment">/* set permutation array */</span>
-<a name="l01140"></a>01140     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01141"></a>01141     {
-<a name="l01142"></a>01142         per[i] = i ;
-<a name="l01143"></a>01143     }
-<a name="l01144"></a>01144     
-<a name="l01145"></a>01145     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span>
-<a name="l01146"></a>01146     {
-<a name="l01147"></a>01147         <span class="comment">/* determine largest element of a row */</span>                               
-<a name="l01148"></a>01148         rowmax = fabs ( matrix2[j][j] ) ;
-<a name="l01149"></a>01149         row = j ;                         
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l01152"></a>01152         {
-<a name="l01153"></a>01153             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )
-<a name="l01154"></a>01154             {
-<a name="l01155"></a>01155                 rowmax = fabs( matrix2[i][j] ) ;
-<a name="l01156"></a>01156                 row = i ;
-<a name="l01157"></a>01157             }
-<a name="l01158"></a>01158         }
-<a name="l01159"></a>01159 
-<a name="l01160"></a>01160         <span class="comment">/* determinant is zero! */</span>
-<a name="l01161"></a>01161         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )
-<a name="l01162"></a>01162         {
-<a name="l01163"></a>01163             <span class="keywordflow">return</span> -6 ;
-<a name="l01164"></a>01164         }
-<a name="l01165"></a>01165         
-<a name="l01166"></a>01166         <span class="comment">/*if the largest element is not on the diagonal, then permutate rows */</span>
-<a name="l01167"></a>01167         <span class="keywordflow">if</span> ( row > j )
-<a name="l01168"></a>01168         {
-<a name="l01169"></a>01169             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l01170"></a>01170             {
-<a name="l01171"></a>01171                 even = matrix2[j][k] ;
-<a name="l01172"></a>01172                 matrix2[j][k] = matrix2[row][k] ;
-<a name="l01173"></a>01173                 matrix2[row][k] = even ;
-<a name="l01174"></a>01174             }
-<a name="l01175"></a>01175             <span class="comment">/* keep track of permutation */</span>
-<a name="l01176"></a>01176             evin = per[j] ;
-<a name="l01177"></a>01177             per[j] = per[row] ;
-<a name="l01178"></a>01178             per[row] = evin ;
-<a name="l01179"></a>01179         }
-<a name="l01180"></a>01180         
-<a name="l01181"></a>01181         <span class="comment">/* modify column */</span>
-<a name="l01182"></a>01182         even = 1.0 / matrix2[j][j] ;
-<a name="l01183"></a>01183         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01184"></a>01184         {
-<a name="l01185"></a>01185             matrix2[i][j] *= even ;
-<a name="l01186"></a>01186         }
-<a name="l01187"></a>01187         matrix2[j][j] = even ;
-<a name="l01188"></a>01188         
-<a name="l01189"></a>01189         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )
-<a name="l01190"></a>01190         {
-<a name="l01191"></a>01191             mjk = matrix2[j][k] ;
-<a name="l01192"></a>01192             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l01193"></a>01193             {
-<a name="l01194"></a>01194                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l01195"></a>01195             }
-<a name="l01196"></a>01196             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l01197"></a>01197             {
-<a name="l01198"></a>01198                 matrix2[i][k] -= matrix2[i][j] * mjk ;
-<a name="l01199"></a>01199             }
-<a name="l01200"></a>01200             matrix2[j][k] = -even * mjk ;
-<a name="l01201"></a>01201         }
-<a name="l01202"></a>01202     
-<a name="l01203"></a>01203         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )
-<a name="l01204"></a>01204         {
-<a name="l01205"></a>01205             mjk = matrix2[j][k] ;
-<a name="l01206"></a>01206             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )
-<a name="l01207"></a>01207             {
-<a name="l01208"></a>01208                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l01209"></a>01209             }
-<a name="l01210"></a>01210             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )
-<a name="l01211"></a>01211             {
-<a name="l01212"></a>01212                 matrix2[i][k]  -= matrix2[i][j] * mjk ;
-<a name="l01213"></a>01213             }
-<a name="l01214"></a>01214             matrix2[j][k] = -even * mjk ;
-<a name="l01215"></a>01215         }
-<a name="l01216"></a>01216     }
-<a name="l01217"></a>01217     
-<a name="l01218"></a>01218     <span class="comment">/* finally, repermute the columns */</span>
-<a name="l01219"></a>01219     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )
-<a name="l01220"></a>01220     {
-<a name="l01221"></a>01221         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l01222"></a>01222         {
-<a name="l01223"></a>01223             hv[per[k]] = matrix2[i][k] ;
-<a name="l01224"></a>01224         }
-<a name="l01225"></a>01225         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )
-<a name="l01226"></a>01226         {
-<a name="l01227"></a>01227             matrix2[i][k] = hv[k] ;
-<a name="l01228"></a>01228         }
-<a name="l01229"></a>01229     }
-<a name="l01230"></a>01230         
-<a name="l01231"></a>01231     <span class="comment">/* all is well */</span>
-<a name="l01232"></a>01232     <span class="keywordflow">return</span> 0 ;
-<a name="l01233"></a>01233 }       
-<a name="l01234"></a>01234 
-<a name="l01235"></a>01235 
-<a name="l01236"></a>01236 
-<a name="l01237"></a>01237 
-<a name="l01258"></a>01258 <span class="keywordtype">float</span> new_gaussian ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar*/</span> )
-<a name="l01259"></a>01259 {
-<a name="l01260"></a>01260     <span class="keywordtype">double</span>  xd ;  <span class="comment">/* FWHM's of gauss function */</span>
-<a name="l01261"></a>01261     <span class="keywordtype">double</span>   x ;  <span class="comment">/* position */</span>
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263     xd = fabs((<span class="keywordtype">double</span>) parlist[1]) ;
-<a name="l01264"></a>01264     x  = (double) xdat[0] - (<span class="keywordtype">double</span>) parlist[2] ;
-<a name="l01265"></a>01265     <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) (
-<a name="l01266"></a>01266            (double) parlist[0] * exp( -4.0 * log(2.0) * (x/xd) * (x/xd) )
-<a name="l01267"></a>01267            + (<span class="keywordtype">double</span>) parlist[3] ) ;
-<a name="l01268"></a>01268 }
-<a name="l01269"></a>01269       
-<a name="l01270"></a>01270        
-<a name="l01295"></a>01295 <span class="keywordtype">void</span> 
-<a name="l01296"></a>01296 new_gaussian_deriv(<span class="keywordtype">float</span> * xdat,<span class="keywordtype">float</span> * parlist,<span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )
-<a name="l01297"></a>01297 {
-<a name="l01298"></a>01298     <span class="keywordtype">double</span> xd ; <span class="comment">/* FWHM of sinfo_gaussian */</span>
-<a name="l01299"></a>01299     <span class="keywordtype">double</span> x, expon ; <span class="comment">/* position and exponent */</span>
-<a name="l01300"></a>01300 
-<a name="l01301"></a>01301     xd = fabs( (<span class="keywordtype">double</span>) parlist[1] ) ;
-<a name="l01302"></a>01302     
-<a name="l01303"></a>01303     <span class="comment">/* offset from peak position */</span>
-<a name="l01304"></a>01304     x = (double) xdat[0] - (<span class="keywordtype">double</span>) parlist[2] ;
-<a name="l01305"></a>01305 
-<a name="l01306"></a>01306     <span class="comment">/* determine the derivatives: */</span>
-<a name="l01307"></a>01307     expon = -4.0 * log(2.0) * (x/xd) * (x/xd) ;
-<a name="l01308"></a>01308     expon = exp( expon ) ;
-<a name="l01309"></a>01309 
-<a name="l01310"></a>01310     <span class="comment">/* partial derivative by the amplitude */</span>
-<a name="l01311"></a>01311     dervs[0] = (float) expon ;
-<a name="l01312"></a>01312 
-<a name="l01313"></a>01313     <span class="comment">/* calculate a * exp(-arg) */</span>
-<a name="l01314"></a>01314     expon = (double) parlist[0] * expon ;
-<a name="l01315"></a>01315 
-<a name="l01316"></a>01316     <span class="comment">/* partial derivative by FWHM */</span>
-<a name="l01317"></a>01317     dervs[1] = (float) ( expon * 8.0 * log(2.0) * x*x / (xd*xd*xd) ) ;
-<a name="l01318"></a>01318 
-<a name="l01319"></a>01319     <span class="comment">/* partial derivative by the x position (parlist[2]) */</span>
-<a name="l01320"></a>01320     dervs[2] = (float) (expon * 8.0 * log(2.0) * x/(xd*xd) ) ;
-<a name="l01321"></a>01321 
-<a name="l01322"></a>01322     <span class="comment">/* partial derivative by the zero level */</span>
-<a name="l01323"></a>01323     dervs[3] = 1.0 ;
-<a name="l01324"></a>01324 }
-<a name="l01325"></a>01325 
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327 <span class="comment">/*==================================================================*/</span>
-<a name="l01328"></a>01328 
-<a name="l01329"></a>01329 
-<a name="l01349"></a>01349 <span class="keywordtype">void</span> 
-<a name="l01350"></a>01350 sinfo_my_fit(<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> y[], <span class="keywordtype">int</span> ndata, <span class="keywordtype">float</span> sig[], <span class="keywordtype">int</span> mwt, <span class="keywordtype">float</span> *a, 
-<a name="l01351"></a>01351            <span class="keywordtype">float</span> *b, <span class="keywordtype">float</span> *siga, <span class="keywordtype">float</span> *sigb, <span class="keywordtype">float</span> *chi2, <span class="keywordtype">float</span> *q)
-<a name="l01352"></a>01352 {
-<a name="l01353"></a>01353     <span class="keywordtype">int</span> i ;
-<a name="l01354"></a>01354     <span class="keywordtype">float</span> wt, t, sxoss, sx=0., sy=0., st2=0., ss, sigdat ;
-<a name="l01355"></a>01355 
-<a name="l01356"></a>01356     *b = 0. ;             <span class="comment">/*accumulate sums ...*/</span>
-<a name="l01357"></a>01357     <span class="keywordflow">if</span> ( mwt )
-<a name="l01358"></a>01358     {
-<a name="l01359"></a>01359         ss = 0. ;
-<a name="l01360"></a>01360         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )  <span class="comment">/*... with weights*/</span>
-<a name="l01361"></a>01361         {
-<a name="l01362"></a>01362             wt = 1./SQR(sig[i]) ;
-<a name="l01363"></a>01363             ss += wt ;
-<a name="l01364"></a>01364             sx += x[i]*wt ;
-<a name="l01365"></a>01365             sy += y[i]*wt ;
-<a name="l01366"></a>01366         }
-<a name="l01367"></a>01367     }
-<a name="l01368"></a>01368     <span class="keywordflow">else</span>
-<a name="l01369"></a>01369     {
-<a name="l01370"></a>01370         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ ) <span class="comment">/*... or without weights*/</span>
-<a name="l01371"></a>01371         {
-<a name="l01372"></a>01372              sx += x[i] ;
-<a name="l01373"></a>01373              sy += y[i] ;
-<a name="l01374"></a>01374         }
-<a name="l01375"></a>01375         ss = ndata ;
-<a name="l01376"></a>01376     }
-<a name="l01377"></a>01377     sxoss = sx/ss ;
-<a name="l01378"></a>01378              
-<a name="l01379"></a>01379     <span class="keywordflow">if</span> ( mwt )
-<a name="l01380"></a>01380     {
-<a name="l01381"></a>01381         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i ++ )
-<a name="l01382"></a>01382         {
-<a name="l01383"></a>01383             t = (x[i] - sxoss)/sig[i] ;
-<a name="l01384"></a>01384             st2 += t*t ;
-<a name="l01385"></a>01385             *b += t*y[i]/sig[i] ;
-<a name="l01386"></a>01386         }
-<a name="l01387"></a>01387     }
-<a name="l01388"></a>01388     <span class="keywordflow">else</span>
-<a name="l01389"></a>01389     {
-<a name="l01390"></a>01390         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l01391"></a>01391         {
-<a name="l01392"></a>01392             t = x[i] - sxoss ;
-<a name="l01393"></a>01393             st2 += t*t ;
-<a name="l01394"></a>01394             *b += t*y[i] ;           
-<a name="l01395"></a>01395         }
-<a name="l01396"></a>01396     }
-<a name="l01397"></a>01397 
-<a name="l01398"></a>01398     *b /= st2 ;
-<a name="l01399"></a>01399     *a = (sy - sx*(*b))/ss ;
-<a name="l01400"></a>01400     *siga = sqrt ((1.0 + sx*sx/(ss*st2))/ss) ;
-<a name="l01401"></a>01401     *sigb = sqrt (1.0/st2) ;
-<a name="l01402"></a>01402     *chi2 = 0.0 ;  <span class="comment">/*calculate chi-square*/</span>
-<a name="l01403"></a>01403     <span class="keywordflow">if</span> ( mwt == 0 )
-<a name="l01404"></a>01404     {
-<a name="l01405"></a>01405         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l01406"></a>01406         {
-<a name="l01407"></a>01407             *chi2 += SQR (y[i] - (*a) - (*b)*x[i]) ;
-<a name="l01408"></a>01408         }
-<a name="l01409"></a>01409         *q = 1. ;
-<a name="l01410"></a>01410         
-<a name="l01411"></a>01411         <span class="comment">/*------------------------------------------------------------------</span>
-<a name="l01412"></a>01412 <span class="comment">         * for unweighted data evaluate typical sig using chi2, and adjust</span>
-<a name="l01413"></a>01413 <span class="comment">         * the standard deviation</span>
-<a name="l01414"></a>01414 <span class="comment">         */</span>
-<a name="l01415"></a>01415         sigdat = sqrt ((*chi2)/(ndata - 2)) ;
-<a name="l01416"></a>01416         *siga *= sigdat ;
-<a name="l01417"></a>01417         *sigb *= sigdat ;
-<a name="l01418"></a>01418     }
-<a name="l01419"></a>01419     <span class="keywordflow">else</span>
-<a name="l01420"></a>01420     {
-<a name="l01421"></a>01421         <span class="keywordflow">for</span> (i = 0 ; i < ndata ; i++)
-<a name="l01422"></a>01422         {
-<a name="l01423"></a>01423             *chi2 += SQR ((y[i] - (*a) - (*b) * x[i])/sig[i]) ;
-<a name="l01424"></a>01424         }    
-<a name="l01425"></a>01425         *q = 1. ; <span class="comment">/* delete rest of lines. q is not a good value */</span>
-<a name="l01426"></a>01426     }
-<a name="l01427"></a>01427 }
-<a name="l01428"></a>01428 
-<a name="l01443"></a>01443 <span class="keywordtype">int</span> sinfo_new_correlation ( <span class="keywordtype">float</span> * data1, <span class="keywordtype">float</span> * data2, <span class="keywordtype">int</span> ndata )
-<a name="l01444"></a>01444 {
-<a name="l01445"></a>01445     <span class="comment">/*float help[3*ndata] ; </span>
-<a name="l01446"></a>01446 <span class="comment">    float corsum[3*ndata] ;*/</span>
-<a name="l01447"></a>01447     <span class="keywordtype">float</span>* help=NULL ; 
-<a name="l01448"></a>01448     <span class="keywordtype">float</span>* corsum=NULL ;
-<a name="l01449"></a>01449     <span class="keywordtype">float</span> maxval ;
-<a name="l01450"></a>01450     <span class="keywordtype">int</span> i, j, k, position, shift ;
-<a name="l01451"></a>01451     <span class="keywordtype">int</span> <span class="comment">/*start,end,size,*/</span>ndata3,limit;
-<a name="l01452"></a>01452     
-<a name="l01453"></a>01453     
-<a name="l01454"></a>01454     <span class="comment">/*ndata3=3*ndata;*/</span>
-<a name="l01455"></a>01455     ndata3=ndata+300;
-<a name="l01456"></a>01456 
-<a name="l01457"></a>01457     <span class="keywordflow">if</span> ( NULL == data1 || NULL == data2 || ndata <= 1 )
-<a name="l01458"></a>01458     {
-<a name="l01459"></a>01459         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong input for sinfo_correlation\n"</span>) ;
-<a name="l01460"></a>01460         <span class="keywordflow">return</span> INT32_MAX ;
-<a name="l01461"></a>01461     }
-<a name="l01462"></a>01462 
-<a name="l01463"></a>01463     <span class="comment">/* initialize the help arrays with zeros */</span>
-<a name="l01464"></a>01464     help=cpl_calloc(ndata+300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01465"></a>01465     <span class="keywordflow">for</span> ( i = 0 ; i < ndata3 ; i++ )
-<a name="l01466"></a>01466     {
-<a name="l01467"></a>01467         help[i] = 0. ;
-<a name="l01468"></a>01468     }
-<a name="l01469"></a>01469 
-<a name="l01470"></a>01470     <span class="comment">/* shift the second data array by ndata in the help array */</span>
-<a name="l01471"></a>01471     <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l01472"></a>01472     {
-<a name="l01473"></a>01473         help[(300/2) + i] = data2[i] ;
-<a name="l01474"></a>01474     }
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476     <span class="comment">/* compute the cross sinfo_correlation sum array */</span>
-<a name="l01477"></a>01477     corsum=cpl_calloc(ndata+300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01478"></a>01478     <span class="keywordflow">for</span> ( j = 0 ; j < ndata3 ; j++ )
-<a name="l01479"></a>01479     {
-<a name="l01480"></a>01480         <span class="keywordflow">if</span> ( ndata3-j <= ndata) 
-<a name="l01481"></a>01481         limit = ndata3-j;
-<a name="l01482"></a>01482     <span class="keywordflow">else</span>
-<a name="l01483"></a>01483         limit = ndata;
-<a name="l01484"></a>01484         corsum[j] = 0. ;
-<a name="l01485"></a>01485         <span class="keywordflow">for</span> ( k = 0 ; k < limit ; k++ )
-<a name="l01486"></a>01486         {
-<a name="l01487"></a>01487             <span class="comment">/*if ( k + j >= ndata3 )</span>
-<a name="l01488"></a>01488 <span class="comment">            {</span>
-<a name="l01489"></a>01489 <span class="comment">                break ;</span>
-<a name="l01490"></a>01490 <span class="comment">            }*/</span>
-<a name="l01491"></a>01491             corsum[j] += data1[k] * help[k + j] ;
-<a name="l01492"></a>01492         }
-<a name="l01493"></a>01493     }
-<a name="l01494"></a>01494 
-<a name="l01495"></a>01495     <span class="comment">/* search for the maximal corsum value and determine its position */</span>
-<a name="l01496"></a>01496     maxval = -FLT_MAX ;
-<a name="l01497"></a>01497     position = -1 ;
-<a name="l01498"></a>01498     <span class="keywordflow">for</span> ( i = 0 ; i < ndata3 ; i++ )
-<a name="l01499"></a>01499     {
-<a name="l01500"></a>01500         <span class="keywordflow">if</span> ( maxval < corsum[i] )
-<a name="l01501"></a>01501         {
-<a name="l01502"></a>01502             maxval = corsum[i] ;
-<a name="l01503"></a>01503             position = i ;
-<a name="l01504"></a>01504         }
-<a name="l01505"></a>01505     }
-<a name="l01506"></a>01506     
-<a name="l01507"></a>01507     <span class="comment">/* determine shift of data2 relative to the data1 array */</span>
-<a name="l01508"></a>01508     shift = position - 300/2 ;
-<a name="l01509"></a>01509     cpl_free(help);
-<a name="l01510"></a>01510     cpl_free(corsum);
-<a name="l01511"></a>01511  
-<a name="l01512"></a>01512     <span class="keywordflow">return</span> shift ;
-<a name="l01513"></a>01513 }
-<a name="l01514"></a>01514 
-<a name="l01515"></a>01515 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_recipes.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/***************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  05/06/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> *                                    Local variables</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">float</span>  sqrarg ;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">double</span> chi1 ;                    <span class="comment">/* old reduced chi-squared */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_chi2 ;                    <span class="comment">/* new reduced chi-squared */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">double</span> labda ;                   <span class="comment">/* mixing parameter */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">double</span> vec[MAXPAR] ;             <span class="comment">/* correction sinfo_vector */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix1[MAXPAR][MAXPAR] ; <span class="comment">/* original sinfo_matrix */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">double</span> matrix2[MAXPAR][MAXPAR] ; <span class="comment">/* inverse of matrix1 */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    nfree ;                   <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span>    parptr[MAXPAR] ;          <span class="comment">/* parameter pointer */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> *                                 Defines</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define SQR(a) (sqrarg = (a) , sqrarg*sqrarg)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> *                    Functions private to this module</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">float</span>  * xdat,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                      <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                      <span class="keywordtype">float</span>  * ydat,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                      <span class="keywordtype">float</span>  * wdat,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                      <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                      <span class="keywordtype">float</span>  * fpar,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                      <span class="keywordtype">float</span>  * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">                     int    * npar */</span>) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">float</span>  * xdat,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                     <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                     <span class="keywordtype">float</span>  * ydat,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                     <span class="keywordtype">float</span>  * wdat,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                     <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                     <span class="keywordtype">float</span>  * fpar,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                     <span class="keywordtype">float</span>  * epar,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                     <span class="keywordtype">int</span>    * npar ) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keyword">static</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> new_gaussian ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar*/</span> );</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> new_gaussian_deriv( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     <span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> );</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keywordtype">float</span> sinfo_new_f_median(<span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>  pixelvalue p_array[100];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>  <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>  </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>  <span class="keywordflow">for</span> (i=0;i<n;i++)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>      p_array[i]= (pixelvalue) array[i];</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>  <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) sinfo_new_median(p_array, n);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="keywordtype">float</span> sinfo_new_clean_mean( <span class="keywordtype">float</span> * array, </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                   <span class="keywordtype">int</span>     n_elements,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                   <span class="keywordtype">float</span>   throwaway_low,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                   <span class="keywordtype">float</span>   throwaway_high )</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">int</span> i, n ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">int</span> lo_n, hi_n ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordtype">float</span> sum ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <span class="keywordflow">if</span> ( array == NULL )</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no array given in sinfo_clean_mean!"</span>) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">if</span> ( n_elements <= 0 )</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of elements given"</span>) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">if</span> ( throwaway_low < 0. || throwaway_high < 0. ||</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>          throwaway_low + throwaway_high >= 100. )</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong throw away percentage given!"</span>) ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     lo_n = (int) (throwaway_low * (<span class="keywordtype">float</span>)n_elements / 100.) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     hi_n = (int) (throwaway_high * (<span class="keywordtype">float</span>)n_elements / 100.) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="comment">/* sort the array */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     sinfo_pixel_qsort( array, n_elements ) ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     n = 0 ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     sum = 0. ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">for</span> ( i = lo_n ; i < n_elements - hi_n ; i++ )</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         <span class="keywordflow">if</span> ( !isnan(array[i]) )</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             sum += array[i] ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>             n++ ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>         }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> ( n == 0 )  </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="keywordflow">return</span> sum/(float)n ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> pixelvalue sinfo_new_median(pixelvalue * array, <span class="keywordtype">int</span> n)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     pixelvalue med ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordflow">if</span> ( array == NULL || n <= 0 )</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"nothing in the pixelvalue array, ZERO returned"</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         <span class="keywordflow">return</span> ZERO ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">if</span> ( n == 1 )</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>         <span class="keywordflow">return</span> array[0] ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>  </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     sinfo_pixel_qsort((<span class="keywordtype">float</span>*) array, n) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="keywordflow">if</span> ( n % 2 == 1 )</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         med = array[n/2] ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         med = (array[n/2] + array[n/2 - 1])/2. ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">return</span> med ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="keywordtype">int</span> sinfo_new_lsqfit_c ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                <span class="keywordtype">int</span>   * mpar,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                <span class="keywordtype">int</span>   * npar,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                <span class="keywordtype">float</span> * tol ,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                <span class="keywordtype">int</span>   * its ,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                <span class="keywordtype">float</span> * lab  )</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordtype">int</span> i, n, r ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordtype">int</span> itc ;                      <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">int</span> found ;                    <span class="comment">/* fit converged: 1, not yet converged: 0 */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordtype">int</span>  nuse ;                    <span class="comment">/* number of useable data points */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordtype">double</span> tolerance ;             <span class="comment">/* accuracy */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     itc   = 0 ;                    <span class="comment">/* fate of fit */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     found = 0 ;                    <span class="comment">/* reset */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     nfree = 0 ;                    <span class="comment">/* number of free parameters */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     nuse  = 0 ;                    <span class="comment">/* number of legal data points */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordflow">if</span> ( *tol < (FLT_EPSILON * 10.0 ) )</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         tolerance = FLT_EPSILON * 10.0 ;  <span class="comment">/* default tolerance */</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     }</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     {</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         tolerance = *tol ;                <span class="comment">/* tolerance */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     labda = fabs( *lab ) * LABFAC ;   <span class="comment">/* start value for mixing parameter */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         <span class="keywordflow">if</span> ( mpar[i] )</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>             <span class="keywordflow">if</span> ( nfree > MAXPAR )         <span class="comment">/* too many free parameters */</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>             {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>             }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>             parptr[nfree++] = i ;         <span class="comment">/* a free parameter */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">if</span> (nfree == 0)                       <span class="comment">/* no free parameters */</span>     </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>         <span class="keywordflow">return</span> -2 ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     }</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         <span class="keywordflow">if</span> ( wdat[n] > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>             nuse ++ ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>         }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     }</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">if</span> ( nfree >= nuse )</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         <span class="keywordflow">return</span> -3 ;                       <span class="comment">/* no degrees of freedom */</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     }</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordflow">if</span> ( labda == 0.0 )                   <span class="comment">/* linear fit */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <span class="comment">/* initialize fpar array */</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; fpar[parptr[i++]] = 0.0 ) ;  </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         new_get_mat ( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>         r =  new_get_vec ( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="keywordflow">if</span> ( r )                         <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>         {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>             <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>         {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>             fpar[i] = epar[i] ;           <span class="comment">/* save new parameters */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>             epar[i] = 0.0 ;               <span class="comment">/* and set errors to zero */</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         chi1 = sqrt( chi1 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>             <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0 ) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>             {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>             }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             epar[parptr[i]] = chi1 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                                      sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordflow">else</span>                                  <span class="comment">/* non-linear fit */</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>         <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment">         * the non-linear fit uses the steepest descent method in combination</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">         * with the Taylor method. The mixing of these methods is controlled</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">         * by labda. In the outer loop ( called the iteration loop ) we build</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">         * the matrix and calculate the correction vector. In the inner loop</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">         * (called the interpolation loop) we check whether we have obtained a</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">         * better solution than the previous one. If so, we leave the inner </span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">           loop else we increase labda (give more weight to the steepest </span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment">           descent method) calculate the correction vector and check again. </span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="comment">           After the inner loop we do a final check on the goodness of the </span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment">           fit and if this satisfies</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment">         * the tolerance we calculate the errors of the fitted parameters.</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>         <span class="keywordflow">while</span> ( !found )                  <span class="comment">/* iteration loop */</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         {      </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>             <span class="keywordflow">if</span> ( itc++ == (*its) )        <span class="comment">/* increase iteration counter */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>             {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                 <span class="keywordflow">return</span> -4 ;               </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>             }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>             new_get_mat( xdat, xdim, ydat, wdat, ndat, fpar, epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>             </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>             <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">             * here we decrease labda since we may assume that each iteration</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">             * brings us closer to the answer.</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>             <span class="keywordflow">if</span> ( labda > LABMIN )</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                 labda = labda / LABFAC ;         <span class="comment">/* decrease labda */</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>             }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>             r = new_get_vec( xdat, xdim, ydat, wdat, ndat, fpar, epar, npar ) ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>             <span class="keywordflow">if</span> ( r )                      <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>                 <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>             }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>             <span class="keywordflow">while</span> ( chi1 >= sinfo_chi2 )        <span class="comment">/* interpolation loop */</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>             {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                 <span class="comment">/*-----------------------------------------------------------</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">                 * The next statement is based on experience, not on the </span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="comment">                   mathematics of the problem. It is assumed that we have </span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> <span class="comment">                   reached convergence when the pure steepest descent method </span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="comment">                   does not produce a better solution.</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                 <span class="keywordflow">if</span> ( labda > LABMAX )    <span class="comment">/* assume solution found */</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                 {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                     break ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                 }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                 labda = labda * LABFAC ;     <span class="comment">/* increase mixing parameter */</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                 <span class="keywordflow">if</span> ( r )                  <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                 {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                 }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>             }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>             <span class="keywordflow">if</span> ( labda <= LABMAX )        <span class="comment">/* save old parameters */</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>             {</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < *npar ; i++ )</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>                 {</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                     fpar[i] = epar[i] ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                 }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>             }</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>             <span class="keywordflow">if</span> ( (fabs( sinfo_chi2 - chi1 ) <= (tolerance * chi1)) || </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                  (labda > LABMAX) )</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>             {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                 <span class="comment">/*-------------------------------------------------------------</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="comment">                 * we have a satisfying solution, so now we need to calculate </span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="comment">                   the correct errors of the fitted parameters. This we do by </span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> <span class="comment">                   using the pure Taylor method because we are very close to </span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">                   the real solution.</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                 labda = 0.0 ;              <span class="comment">/* for Taylor solution */</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                 new_get_mat(xdat,xdim,ydat,wdat,ndat,fpar,epar<span class="comment">/*, npar */</span>) ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>                 r = new_get_vec(xdat,xdim,ydat,wdat,ndat,fpar,epar,npar) ;</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                 <span class="keywordflow">if</span> ( r )                    <span class="comment">/* error */</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                 {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                     <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>                 }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i++ )</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                 {</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                     epar[i] = 0.0 ;          <span class="comment">/* set error to zero */</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                 }</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                 sinfo_chi2 = sqrt ( sinfo_chi2 / (<span class="keywordtype">double</span>) (nuse - nfree) ) ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                 <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                 {</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                     <span class="keywordflow">if</span> ( (matrix1[i][i] <= 0.0) || (matrix2[i][i] <= 0.0) )</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>                     {</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                         <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                     }</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                     epar[parptr[i]] = sinfo_chi2 * sqrt( matrix2[i][i] ) / </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                                                    sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                 }</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                 found = 1 ;                  <span class="comment">/* we found a solution */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>             }</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>         }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordflow">return</span> itc ;                             <span class="comment">/* return number of iterations */</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> <span class="keywordtype">void</span> sinfo_new_convert_ZEROs_to_0_for_images(cpl_image * im)</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!\n"</span>) ; </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>         return ;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         <span class="keywordflow">if</span>( isnan(pidata[i]) )</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             pidata[i] = 0. ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>         }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     }</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     return ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="keywordtype">void</span> sinfo_new_convert_ZEROs_to_0_for_cubes(cpl_imagelist * cube)</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> {</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     cpl_image* i_img=NULL;  </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     {</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ; </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         return ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>     {</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>       sinfo_new_convert_ZEROs_to_0_for_images(i_img) ;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       cpl_imagelist_set(cube,i_img,i);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>     }</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     return ;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> }</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> sinfo_new_convert_ZEROs_to_0_for_cubes_range(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,<span class="keyword">const</span> <span class="keywordtype">int</span> z_max)</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>     cpl_image* i_img=NULL;  </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ; </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         return ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     <span class="keywordflow">for</span> ( i = z_min ; i < z_max ; i++ )</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     {</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       sinfo_new_convert_ZEROs_to_0_for_images(i_img) ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>       cpl_imagelist_set(cube,i_img,i);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     return ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="keywordtype">void</span> sinfo_new_convert_0_to_ZEROs_for_images(cpl_image * im)</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> {</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordflow">if</span> ( im == NULL )</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     {</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         return ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     }</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     {</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>         <span class="keywordflow">if</span>( pidata[i] == 0. )</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>             pidata[i] = ZERO ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         }</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     return ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="keywordtype">void</span> sinfo_new_convert_0_to_ZERO_for_cubes(cpl_imagelist * cube)</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     {</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>         return ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     }</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       sinfo_new_convert_0_to_ZEROs_for_images(i_img) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       cpl_imagelist_set(cube,i_img,i);</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     }</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     return ;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> }</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> sinfo_new_convert_0_to_ZERO_for_cubes_range(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,<span class="keyword">const</span> <span class="keywordtype">int</span> z_max)</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> {</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     <span class="keywordflow">if</span> ( cube == NULL )</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>         return ;</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     }</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     <span class="keywordflow">for</span> ( i = z_min ; i < z_max ; i++ )</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     {</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       sinfo_new_convert_0_to_ZEROs_for_images(i_img) ;</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>       cpl_imagelist_set(cube,i_img,i);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     }</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     return ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="keywordtype">void</span> sinfo_new_invert(cpl_image * im)</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>     ilx=cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     ily=cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     pidata=cpl_image_get_data(im);</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     {</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>         pidata[i] = -pidata[i] ;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     }</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     return ;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> }</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="keywordtype">int</span> sinfo_new_nint ( <span class="keywordtype">double</span> x ) </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> {</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordtype">int</span> k ;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     k = x ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordflow">if</span> ( x >= 0. )</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     {</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>         <span class="keywordflow">if</span> ( (x - (<span class="keywordtype">double</span>) k) <= 0.5 )</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         {</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>             <span class="keywordflow">return</span> k ;</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>         }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>             <span class="keywordflow">return</span> k + 1 ;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>         }</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     }</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     {</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>         <span class="keywordflow">if</span> ( (x - (<span class="keywordtype">double</span>) k) <= -0.5 )</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>         {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>             <span class="keywordflow">return</span> k - 1;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>         }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>         {</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>             <span class="keywordflow">return</span> k ;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         }</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> }</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> <span class="preprocessor">#define STEP_MIN        (-half_search)</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> <span class="preprocessor"></span><span class="preprocessor">#define STEP_MAX        (half_search)</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> <span class="keywordtype">double</span> * sinfo_new_xcorrel(</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     <span class="keywordtype">float</span>      *    line_i,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     <span class="keywordtype">int</span>             width_i,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     <span class="keywordtype">float</span>      *    line_t,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     <span class="keywordtype">int</span>             width_t,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <span class="keywordtype">int</span>             half_search,</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>     <span class="keywordtype">int</span>     *       delta,</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     <span class="keywordtype">int</span>       *     maxpos,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="keywordtype">double</span>     *    xcorr_max </div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> )</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     <span class="keywordtype">double</span>  * xcorr ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="keywordtype">double</span>   mean_i, mean_t ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordtype">double</span>   rms_i, rms_t ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <span class="keywordtype">double</span>   sum, sqsum ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordtype">double</span>   norm ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordtype">int</span>      nsteps ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     <span class="keywordtype">int</span>      i ;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     <span class="keywordtype">int</span>      step ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keywordtype">int</span>      nval ;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="comment">/*double   r;*/</span></div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> </div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="comment">/* Compute normalization factors */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     sum = sqsum = 0.00 ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     <span class="keywordflow">for</span> (i=0 ; i<width_i ; i++) {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         sum += (double)line_i[i] ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         sqsum += (double)line_i[i] * (<span class="keywordtype">double</span>)line_i[i];</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     mean_i = sum / (double)width_i ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     sqsum /= (double)width_i ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     rms_i = sqsum - mean_i*mean_i ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     sum = sqsum = 0.00 ;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         sum += (double)line_t[i] ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         sqsum += (double)line_t[i] * (<span class="keywordtype">double</span>)line_t[i];</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     mean_t = sum / (double)width_t ;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     sqsum /= (double)width_t ;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     rms_t = sqsum - mean_t*mean_t ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     norm = 1.00 / sqrt(rms_i * rms_t);</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     nsteps = (STEP_MAX - STEP_MIN)  ;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     xcorr = cpl_malloc(nsteps * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>     <span class="keywordflow">for</span> (step=STEP_MIN ; step<STEP_MAX ; step++) {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>         xcorr[step-STEP_MIN] = 0.00 ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         nval = 0 ;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         <span class="keywordflow">for</span> (i=0 ; i<width_t ; i++) {</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             <span class="keywordflow">if</span> ((i+step >= 0) &&</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>                 (i+step < width_i)) {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             xcorr[step-STEP_MIN] += ((double)line_t[i] - mean_t) *</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                                     ((double)line_i[i+step] - mean_i) *</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                                     norm ;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                 nval++ ;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>             }</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>         }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>         xcorr[step-STEP_MIN] /= (double)nval ;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     }</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     *xcorr_max = xcorr[0] ;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     *maxpos    = 0 ;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     <span class="keywordflow">for</span> (i=0 ; i<nsteps ; i++) {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         <span class="keywordflow">if</span> (xcorr[i]>*xcorr_max) {</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>             *maxpos = i ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>             *xcorr_max = xcorr[i];</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         }</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     }</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     (*delta) = + (STEP_MIN + *maxpos);</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordflow">return</span> xcorr ;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> <span class="comment">/* FILE ELEMENT: sinfo_nev_ille.c                                           */</span></div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> <span class="comment">/**********************************************************************/</span></div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> <span class="comment">/*                      double sinfo_nev_ille()                             */</span></div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> <span class="comment">/**********************************************************************/</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> <span class="comment">/*  DESCRIPTION:                                                      */</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span> <span class="comment">/*  For a given table (x , f(x )), i = 0(1)n  and a given argument z  */</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> <span class="comment">/*  the function computes the interpolated value for the argument z   */</span></div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> <span class="comment">/*  using Neville's interpolation/ extrapolation algorithm.           */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> <span class="comment">/*  FUNCTIONS CALLED:                                                 */</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> <span class="comment">/*  System library: <stdio.h> printf(), fabs();                       */</span></div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> <span class="comment">/*  Numlib library: None                                              */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> <span class="comment">/*  Local functions: nevtable();                                      */</span></div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span> <span class="comment">/*  User supplied: None                                               */</span></div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> <span class="comment">/*  PROGRAMMED BY: T.Haavie                                           */</span></div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> <span class="comment">/*  DATE/VERSION: 88-07-06/1.0                                        */</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> <span class="comment">/*                                                                    */</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> <span class="comment">/**********************************************************************/</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span> <span class="keywordtype">double</span> sinfo_nev_ille(<span class="keywordtype">double</span> x[], <span class="keywordtype">double</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> z, <span class="keywordtype">int</span>* flag)</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>                <span class="comment">/* PARAMETERS(input):                                  */</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">/* double x[];     Abscissae values in the table.                      */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> <span class="comment">/* double f[];     Function values in the table.                       */</span></div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> <span class="comment">/* int n;         The number of elements in the table is n+1.         */</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="comment">/* double z;       Argument to be used in interpolation/extrapolation. */</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> </div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="comment">/*                PARAMETERS(input/output):                           */</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="comment">/* int *flag;    Flag parameter(output):                             */</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>                <span class="comment">/* = 0, n < 0 and/or eps < 0, should be positive+.     */</span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>                <span class="comment">/* = 1, required rel.err. is not obtained.             */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                <span class="comment">/* = 2, required rel. err. is obtained.                */</span></div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span> <span class="comment">/* the computed estimate for the interpolated/extrapolated  value re- */</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="comment">/* turned through function name sinfo_nev_ille.                             */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>         <span class="keywordtype">double</span> p[11]; <span class="comment">/* Array used for storing the new row elements */</span></div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>                        <span class="comment">/* in the interpolation/extrapolation table.   */</span></div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>         <span class="keywordtype">double</span> q[11]; <span class="comment">/* Array used for storing the old row elements */</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                        <span class="comment">/* in the interpolation/extrapolation table    */</span></div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         <span class="keywordtype">double</span> factor;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>         <span class="keywordtype">int</span> m, k;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>        </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         <span class="keywordflow">if</span> (n < 0 )</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         {</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>                 *flag = 0;</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>                 <span class="keywordflow">return</span>(0.);</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         }</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span> </div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>         q[0] = f[0];               <span class="comment">/* Set initial value in the table. */</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         <span class="keywordflow">for</span> (k = 1; k <= n; k++)   <span class="comment">/* k counts rows in the table.     */</span></div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>         {</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>                 p[0] = f[k];</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>                 <span class="keywordflow">for</span> (m = 1; m <= k; m++) <span class="comment">/* m counts element in row.  */</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>                 {</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>                         factor = (z - x[k]) / (x[k] - x[k-m]);</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>                         p[m] = p[m-1] + factor * (p[m-1] - q[m-1]);</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>                 }</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> </div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>                 <span class="keywordflow">for</span> (m = 0; m <= k; m++) <span class="comment">/* Shift old row to new row.  */</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>                         q[m] = p[m];</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>         } <span class="comment">/* End of k-loop. */</span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> </div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         *flag = 1;              <span class="comment">/* Required rel.error is not obtained. */</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         <span class="keywordflow">return</span>(p[n]);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> } <span class="comment">/* End of sinfo_nev_ille(). */</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> </div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> <span class="keywordtype">float</span> sinfo_new_nev_ille(<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> z, <span class="keywordtype">int</span>* flag)</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>                <span class="comment">/* PARAMETERS(input):                                  */</span></div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> <span class="comment">/* float x[];     Abscissae values in the table.                      */</span></div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> <span class="comment">/* float f[];     Function values in the table.                       */</span></div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> <span class="comment">/* int n;         The number of elements in the table is n+1.         */</span></div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> <span class="comment">/* float z;       Argument to be used in interpolation/extrapolation. */</span></div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span> <span class="comment">/*                PARAMETERS(input/output):                           */</span></div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span> <span class="comment">/* int *flag;    Flag parameter(output):                             */</span></div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                <span class="comment">/* = 0, n < 0 and/or eps < 0, should be positive+.     */</span></div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>                <span class="comment">/* = 1, required rel.err. is not obtained.             */</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>                <span class="comment">/* = 2, required rel. err. is obtained.                */</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> </div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">/* the computed estimate for the interpolated/extrapolated  value re- */</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> <span class="comment">/* turned through function name sinfo_nev_ille.                             */</span></div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> {</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>         <span class="keywordtype">float</span> p[11]; <span class="comment">/* Array used for storing the new row elements */</span></div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>                        <span class="comment">/* in the interpolation/extrapolation table.   */</span></div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>         <span class="keywordtype">float</span> q[11]; <span class="comment">/* Array used for storing the old row elements */</span></div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>                        <span class="comment">/* in the interpolation/extrapolation table    */</span></div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span> </div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         <span class="keywordtype">float</span> factor;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>         <span class="keywordtype">int</span> m, k;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> </div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>        </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>         <span class="keywordflow">if</span> (n < 0 )</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>                 *flag = 0;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>                 <span class="keywordflow">return</span>(0.);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         }</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         q[0] = f[0];               <span class="comment">/* Set initial value in the table. */</span></div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span> </div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>         <span class="keywordflow">for</span> (k = 1; k <= n; k++)   <span class="comment">/* k counts rows in the table.     */</span></div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>         {</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>                 p[0] = f[k];</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>                 <span class="keywordflow">for</span> (m = 1; m <= k; m++) <span class="comment">/* m counts element in row.  */</span></div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>                 {</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>                         factor = (z - x[k]) / (x[k] - x[k-m]);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>                         p[m] = p[m-1] + factor * (p[m-1] - q[m-1]);</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>                 }</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>                 <span class="keywordflow">for</span> (m = 0; m <= k; m++) <span class="comment">/* Shift old row to new row.  */</span></div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                         q[m] = p[m];</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>         } <span class="comment">/* End of k-loop. */</span></div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> </div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>         *flag = 1;              <span class="comment">/* Required rel.error is not obtained. */</span></div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         <span class="keywordflow">return</span>(p[n]);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> } <span class="comment">/* End of sinfo_nev_ille(). */</span></div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_get_vec ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>                     <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>                     <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>                     <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>                     <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>                     <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>                     <span class="keywordtype">float</span> * epar,</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>                     <span class="keywordtype">int</span>   * npar )</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span> {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     <span class="keywordtype">double</span> dj ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     <span class="keywordtype">double</span> dy ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     <span class="keywordtype">double</span> mii ;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     <span class="keywordtype">double</span> mji ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     <span class="keywordtype">double</span> mjj ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordtype">int</span> i, j, n, r ;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span> </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     <span class="comment">/* loop to modify and scale the sinfo_matrix */</span></div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>         <span class="keywordflow">if</span> ( mjj <= 0.0 )             <span class="comment">/* diagonal element wrong */</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>         {</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>             <span class="keywordflow">return</span> -5 ;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>         }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         mjj = sqrt( mjj ) ;</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>             mji = matrix1[j][i] / mjj / sqrt( matrix1[i][i] ) ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>             matrix2[i][j] = matrix2[j][i] = mji ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         }</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         matrix2[j][j] = 1.0 + labda ;  <span class="comment">/* scaled value on diagonal */</span></div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     }    </div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordflow">if</span> ( (r = new_inv_mat()) )       <span class="comment">/* sinfo_invert sinfo_matrix inlace */</span></div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     {</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         <span class="keywordflow">return</span> r ;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (*npar) ; i ++ )</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>         epar[i] = fpar[i] ;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     }</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     <span class="comment">/* loop to calculate correction sinfo_vector */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     {</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>         dj = 0.0 ;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         mjj = matrix1[j][j] ;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>         <span class="keywordflow">if</span> ( mjj <= 0.0)               <span class="comment">/* not allowed */</span></div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>         {</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>             <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>         }</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>         mjj = sqrt ( mjj ) ;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>             mii = matrix1[i][i] ;</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>             <span class="keywordflow">if</span> ( mii <= 0.0 )</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>             {</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>                 <span class="keywordflow">return</span> -7 ;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>             }</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>             mii = sqrt( mii ) ;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>             dj += vec[i] * matrix2[j][i] / mjj / mii ;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         }</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         epar[parptr[j]] += dj ;       <span class="comment">/* new parameters */</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     }    </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     chi1 = 0.0 ;                      <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  </div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <span class="comment">/* loop through the data points */</span></div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     {</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>         wn = wdat[n] ;               <span class="comment">/* get weight */</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         <span class="keywordflow">if</span> ( wn > 0.0 )              <span class="comment">/* legal weight */</span></div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>         {</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>             dy = ydat[n] - new_gaussian( &xdat[(*xdim) * n], epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>             chi1 += wdat[n] * dy * dy ;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         }</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     }</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> }   </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <span class="keyword">static</span> <span class="keywordtype">void</span> new_get_mat ( <span class="keywordtype">float</span> * xdat,</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>                      <span class="keywordtype">int</span>   * xdim,</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>                      <span class="keywordtype">float</span> * ydat,</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>                      <span class="keywordtype">float</span> * wdat,</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>                      <span class="keywordtype">int</span>   * ndat,</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                      <span class="keywordtype">float</span> * fpar,</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>                      <span class="keywordtype">float</span> * epar<span class="comment">/*,</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="comment">                     int   * npar */</span>)</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> {</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     <span class="keywordtype">double</span> wd ;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     <span class="keywordtype">double</span> wn ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     <span class="keywordtype">double</span> yd ;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordtype">int</span> i, j, n ;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>         vec[j] = 0.0 ; <span class="comment">/* zero sinfo_vector */</span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         <span class="keywordflow">for</span> ( i = 0 ; i<= j ; i++ )   </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>         <span class="comment">/* zero sinfo_matrix only on and below diagonal */</span></div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>         {</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>             matrix1[j][i] = 0.0 ;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>         }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     sinfo_chi2 = 0.0 ;  <span class="comment">/* reset reduced chi-squared */</span></div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="comment">/* loop through data points */</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="keywordflow">for</span> ( n = 0 ; n < (*ndat) ; n++ )</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     {</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>         wn = wdat[n] ;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         <span class="keywordflow">if</span> ( wn > 0.0 )  <span class="comment">/* legal weight ? */</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         {</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>             yd = ydat[n] - new_gaussian( &xdat[(*xdim) * n], fpar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>             new_gaussian_deriv( &xdat[(*xdim) * n], fpar, epar<span class="comment">/*, npar*/</span> ) ;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>             sinfo_chi2 += yd * yd * wn ; <span class="comment">/* add to chi-squared */</span></div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>             <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ )</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>             {</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>                 wd = epar[parptr[j]] * wn ;  <span class="comment">/* weighted derivative */</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>                 vec[j] += yd * wd ;       <span class="comment">/* fill sinfo_vector */</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                 <span class="keywordflow">for</span> ( i = 0 ; i <= j ; i++ ) <span class="comment">/* fill sinfo_matrix */</span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                 {</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                     matrix1[j][i] += epar[parptr[i]] * wd ;</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>                 }</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>             }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>         }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     }                   </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> }  </div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>    </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> </div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> <span class="keyword">static</span> <span class="keywordtype">int</span> new_inv_mat (<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> {</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <span class="keywordtype">double</span> even ;</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     <span class="keywordtype">double</span> hv[MAXPAR] ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     <span class="keywordtype">double</span> mjk ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     <span class="keywordtype">double</span> rowmax ;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     <span class="keywordtype">int</span> evin ;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     <span class="keywordtype">int</span> i, j, k, row ;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keywordtype">int</span> per[MAXPAR] ;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>    </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>     <span class="comment">/* set permutation array */</span></div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     {</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         per[i] = i ;</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>     }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>     </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>     <span class="keywordflow">for</span> ( j = 0 ; j < nfree ; j++ ) <span class="comment">/* in j-th column */</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>     {</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>         <span class="comment">/* determine largest element of a row */</span>                               </div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         rowmax = fabs ( matrix2[j][j] ) ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>         row = j ;                         </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>         <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>         {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>             <span class="keywordflow">if</span> ( fabs ( matrix2[i][j] ) > rowmax )</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>             {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>                 rowmax = fabs( matrix2[i][j] ) ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>                 row = i ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>             }</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>         }</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>         <span class="comment">/* determinant is zero! */</span></div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>         <span class="keywordflow">if</span> ( matrix2[row][j] == 0.0 )</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>         {</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>             <span class="keywordflow">return</span> -6 ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>         }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>         </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>         <span class="comment">/*if the largest element is not on the diagonal, then permutate rows */</span></div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>         <span class="keywordflow">if</span> ( row > j )</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>         {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>             <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>             {</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                 even = matrix2[j][k] ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                 matrix2[j][k] = matrix2[row][k] ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                 matrix2[row][k] = even ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>             }</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>             <span class="comment">/* keep track of permutation */</span></div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>             evin = per[j] ;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>             per[j] = per[row] ;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>             per[row] = evin ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>         }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>         <span class="comment">/* modify column */</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>         even = 1.0 / matrix2[j][j] ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>         <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>         {</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>             matrix2[i][j] *= even ;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>         }</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         matrix2[j][j] = even ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         </div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k++ )</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>         {</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>             {</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>             }</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>             {</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>                 matrix2[i][k] -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>             }</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         }</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>         <span class="keywordflow">for</span> ( k = j + 1 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>         {</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>             mjk = matrix2[j][k] ;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>             <span class="keywordflow">for</span> ( i = 0 ; i < j ; i++ )</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>             {</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>             }</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>             <span class="keywordflow">for</span> ( i = j + 1 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>             {</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>                 matrix2[i][k]  -= matrix2[i][j] * mjk ;</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>             }</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>             matrix2[j][k] = -even * mjk ;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>         }</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     }</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     </div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     <span class="comment">/* finally, repermute the columns */</span></div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nfree ; i++ )</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>         {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>             hv[per[k]] = matrix2[i][k] ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>         }</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>         <span class="keywordflow">for</span> ( k = 0 ; k < nfree ; k++ )</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>         {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>             matrix2[i][k] = hv[k] ;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>         }</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     }</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>         </div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     <span class="comment">/* all is well */</span></div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> }       </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> </div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordtype">float</span> new_gaussian ( <span class="keywordtype">float</span> * xdat, <span class="keywordtype">float</span> * parlist<span class="comment">/*, int * npar*/</span> )</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> {</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="keywordtype">double</span>  xd ;  <span class="comment">/* FWHM's of gauss function */</span></div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     <span class="keywordtype">double</span>   x ;  <span class="comment">/* position */</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     xd = fabs((<span class="keywordtype">double</span>) parlist[1]) ;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     x  = (double) xdat[0] - (<span class="keywordtype">double</span>) parlist[2] ;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     <span class="keywordflow">return</span> (<span class="keywordtype">float</span>) (</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>            (double) parlist[0] * exp( -4.0 * log(2.0) * (x/xd) * (x/xd) )</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>            + (<span class="keywordtype">double</span>) parlist[3] ) ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>       </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>        </div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> new_gaussian_deriv(<span class="keywordtype">float</span> * xdat,<span class="keywordtype">float</span> * parlist,<span class="keywordtype">float</span> * dervs<span class="comment">/*, int * npar*/</span> )</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> {</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     <span class="keywordtype">double</span> xd ; <span class="comment">/* FWHM of sinfo_gaussian */</span></div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="keywordtype">double</span> x, expon ; <span class="comment">/* position and exponent */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     xd = fabs( (<span class="keywordtype">double</span>) parlist[1] ) ;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     <span class="comment">/* offset from peak position */</span></div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>     x = (double) xdat[0] - (<span class="keywordtype">double</span>) parlist[2] ;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> </div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     <span class="comment">/* determine the derivatives: */</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     expon = -4.0 * log(2.0) * (x/xd) * (x/xd) ;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     expon = exp( expon ) ;</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     <span class="comment">/* partial derivative by the amplitude */</span></div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>     dervs[0] = (float) expon ;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>     <span class="comment">/* calculate a * exp(-arg) */</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     expon = (double) parlist[0] * expon ;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span> </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>     <span class="comment">/* partial derivative by FWHM */</span></div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>     dervs[1] = (float) ( expon * 8.0 * log(2.0) * x*x / (xd*xd*xd) ) ;</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>     <span class="comment">/* partial derivative by the x position (parlist[2]) */</span></div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>     dervs[2] = (float) (expon * 8.0 * log(2.0) * x/(xd*xd) ) ;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>     <span class="comment">/* partial derivative by the zero level */</span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>     dervs[3] = 1.0 ;</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> }</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> </div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">/*==================================================================*/</span></div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> sinfo_my_fit(<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> y[], <span class="keywordtype">int</span> ndata, <span class="keywordtype">float</span> sig[], <span class="keywordtype">int</span> mwt, <span class="keywordtype">float</span> *a, </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>            <span class="keywordtype">float</span> *b, <span class="keywordtype">float</span> *siga, <span class="keywordtype">float</span> *sigb, <span class="keywordtype">float</span> *chi2, <span class="keywordtype">float</span> *q)</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     <span class="keywordtype">float</span> wt, t, sxoss, sx=0., sy=0., st2=0., ss, sigdat ;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>     *b = 0. ;             <span class="comment">/*accumulate sums ...*/</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>     <span class="keywordflow">if</span> ( mwt )</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>     {</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>         ss = 0. ;</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )  <span class="comment">/*... with weights*/</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>         {</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>             wt = 1./SQR(sig[i]) ;</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>             ss += wt ;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>             sx += x[i]*wt ;</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             sy += y[i]*wt ;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>         }</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>     }</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     {</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ ) <span class="comment">/*... or without weights*/</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>         {</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>              sx += x[i] ;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>              sy += y[i] ;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>         }</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>         ss = ndata ;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>     }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>     sxoss = sx/ss ;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>              </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="keywordflow">if</span> ( mwt )</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     {</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i ++ )</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         {</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>             t = (x[i] - sxoss)/sig[i] ;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>             st2 += t*t ;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>             *b += t*y[i]/sig[i] ;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>         }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>     }</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     {</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>         {</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>             t = x[i] - sxoss ;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>             st2 += t*t ;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>             *b += t*y[i] ;           </div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>         }</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     }</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>     *b /= st2 ;</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     *a = (sy - sx*(*b))/ss ;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     *siga = sqrt ((1.0 + sx*sx/(ss*st2))/ss) ;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     *sigb = sqrt (1.0/st2) ;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>     *chi2 = 0.0 ;  <span class="comment">/*calculate chi-square*/</span></div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordflow">if</span> ( mwt == 0 )</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     {</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>         {</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>             *chi2 += SQR (y[i] - (*a) - (*b)*x[i]) ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>         }</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         *q = 1. ;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         </div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>         <span class="comment">/*------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> <span class="comment">         * for unweighted data evaluate typical sig using chi2, and adjust</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span> <span class="comment">         * the standard deviation</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         sigdat = sqrt ((*chi2)/(ndata - 2)) ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>         *siga *= sigdat ;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>         *sigb *= sigdat ;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     }</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     {</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>         <span class="keywordflow">for</span> (i = 0 ; i < ndata ; i++)</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>             *chi2 += SQR ((y[i] - (*a) - (*b) * x[i])/sig[i]) ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         }    </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>         *q = 1. ; <span class="comment">/* delete rest of lines. q is not a good value */</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     }</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> }</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="keywordtype">int</span> sinfo_new_correlation ( <span class="keywordtype">float</span> * data1, <span class="keywordtype">float</span> * data2, <span class="keywordtype">int</span> ndata )</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> {</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>     <span class="comment">/*float help[3*ndata] ; </span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">    float corsum[3*ndata] ;*/</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>     <span class="keywordtype">float</span>* help=NULL ; </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordtype">float</span>* corsum=NULL ;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     <span class="keywordtype">float</span> maxval ;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>     <span class="keywordtype">int</span> i, j, k, position, shift ;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     <span class="keywordtype">int</span> <span class="comment">/*start,end,size,*/</span>ndata3,limit;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>     </div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>     </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>     <span class="comment">/*ndata3=3*ndata;*/</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>     ndata3=ndata+300;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>     <span class="keywordflow">if</span> ( NULL == data1 || NULL == data2 || ndata <= 1 )</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>     {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong input for sinfo_correlation\n"</span>) ;</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         <span class="keywordflow">return</span> INT32_MAX ;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> </div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>     <span class="comment">/* initialize the help arrays with zeros */</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>     help=cpl_calloc(ndata+300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ndata3 ; i++ )</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>     {</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>         help[i] = 0. ;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>     }</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>     <span class="comment">/* shift the second data array by ndata in the help array */</span></div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>     {</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>         help[(300/2) + i] = data2[i] ;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     }</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     <span class="comment">/* compute the cross sinfo_correlation sum array */</span></div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     corsum=cpl_calloc(ndata+300,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordflow">for</span> ( j = 0 ; j < ndata3 ; j++ )</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     {</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>         <span class="keywordflow">if</span> ( ndata3-j <= ndata) </div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>         limit = ndata3-j;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>         limit = ndata;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>         corsum[j] = 0. ;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>         <span class="keywordflow">for</span> ( k = 0 ; k < limit ; k++ )</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>         {</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>             <span class="comment">/*if ( k + j >= ndata3 )</span></div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">                break ;</span></div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> <span class="comment">            }*/</span></div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>             corsum[j] += data1[k] * help[k + j] ;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>         }</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     }</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>     <span class="comment">/* search for the maximal corsum value and determine its position */</span></div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     position = -1 ;</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ndata3 ; i++ )</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>     {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         <span class="keywordflow">if</span> ( maxval < corsum[i] )</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>         {</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>             maxval = corsum[i] ;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>             position = i ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>         }</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     }</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>     </div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     <span class="comment">/* determine shift of data2 relative to the data1 array */</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     shift = position - 300/2 ;</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     cpl_free(help);</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     cpl_free(corsum);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  </div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     <span class="keywordflow">return</span> shift ;</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> }</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__recipes_8h_source.html b/html/sinfo__recipes_8h_source.html
index 4a2c011..a2b6788 100644
--- a/html/sinfo__recipes_8h_source.html
+++ b/html/sinfo__recipes_8h_source.html
@@ -2,162 +2,193 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_recipes.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_recipes.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_RECIPES_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RECIPES_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_recipes.h,v 1.7 2008/02/12 13:29:09 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  05/06/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * recipes.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * some numerical recipes</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <inttypes.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <float.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <math.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_pixel_handling.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment"> *                        defines</span>
-<a name="l00051"></a>00051 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 <span class="comment">/* definitions of initial values for sinfo_lsqfit_c in sinfo_linefit() </span>
-<a name="l00053"></a>00053 <span class="comment">   (wave_calibration) */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define XDIM         1         </span><span class="comment">/* dimension of the x values */</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define TOL          0.001     </span><span class="comment">/* fitting tolerance */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define LAB          0.1       </span><span class="comment">/* labda parameter */</span>
-<a name="l00057"></a>00057 <span class="preprocessor">#define ITS          200       </span><span class="comment">/* maximum number of iterations */</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define MAXPAR       4         </span><span class="comment">/* number of free parameters */</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#define LABFAC       10.0      </span><span class="comment">/* labda step factor */</span>
-<a name="l00060"></a>00060 <span class="preprocessor">#define LABMAX       1.0e+10   </span><span class="comment">/* maximum value for labda */</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define LABMIN       1.0e-10   </span><span class="comment">/* minimum value for labda */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00065"></a>00065 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="keywordtype">double</span> sinfo_nev_ille(<span class="keywordtype">double</span> x[], <span class="keywordtype">double</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> z, <span class="keywordtype">int</span>* flag);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keywordtype">float</span> 
-<a name="l00069"></a>00069 sinfo_new_f_median(<span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> n);
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keywordtype">float</span> 
-<a name="l00072"></a>00072 sinfo_new_clean_mean( <span class="keywordtype">float</span> * array,
-<a name="l00073"></a>00073                   <span class="keywordtype">int</span>     n_elements,
-<a name="l00074"></a>00074                   <span class="keywordtype">float</span>   throwaway_low,
-<a name="l00075"></a>00075                   <span class="keywordtype">float</span>   throwaway_high ) ;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 
-<a name="l00088"></a>00088 pixelvalue 
-<a name="l00089"></a>00089 sinfo_new_median(pixelvalue * array, <span class="keywordtype">int</span> n) ;
-<a name="l00134"></a>00134 <span class="keywordtype">int</span> sinfo_new_lsqfit_c ( <span class="keywordtype">float</span>  * xdat,
-<a name="l00135"></a>00135                <span class="keywordtype">int</span>    * xdim,
-<a name="l00136"></a>00136                <span class="keywordtype">float</span>  * ydat,
-<a name="l00137"></a>00137                <span class="keywordtype">float</span>  * wdat,
-<a name="l00138"></a>00138                <span class="keywordtype">int</span>    * ndat,
-<a name="l00139"></a>00139                <span class="keywordtype">float</span>  * fpar,
-<a name="l00140"></a>00140                <span class="keywordtype">float</span>  * epar,
-<a name="l00141"></a>00141                <span class="keywordtype">int</span>    * mpar,
-<a name="l00142"></a>00142                <span class="keywordtype">int</span>    * npar,
-<a name="l00143"></a>00143                <span class="keywordtype">float</span>  * tol ,
-<a name="l00144"></a>00144                <span class="keywordtype">int</span>    * its ,
-<a name="l00145"></a>00145                <span class="keywordtype">float</span>  * lab  ) ;
-<a name="l00146"></a>00146 
-<a name="l00163"></a>00163 <span class="keywordtype">void</span> 
-<a name="l00164"></a>00164 sinfo_my_fit (<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> y[], <span class="keywordtype">int</span> ndata, <span class="keywordtype">float</span> sig[], <span class="keywordtype">int</span> mwt, <span class="keywordtype">float</span> *a,
-<a name="l00165"></a>00165            <span class="keywordtype">float</span> *b, <span class="keywordtype">float</span> *siga, <span class="keywordtype">float</span> *sigb, <span class="keywordtype">float</span> *chi2, <span class="keywordtype">float</span> *q) ;
-<a name="l00166"></a>00166 
-<a name="l00174"></a>00174 <span class="keywordtype">int</span> 
-<a name="l00175"></a>00175 sinfo_new_nint ( <span class="keywordtype">double</span> x ) ;
-<a name="l00176"></a>00176 
-<a name="l00190"></a>00190 <span class="keywordtype">int</span> 
-<a name="l00191"></a>00191 sinfo_new_correlation ( <span class="keywordtype">float</span> * data1, <span class="keywordtype">float</span> * data2, <span class="keywordtype">int</span> ndata ) ;
-<a name="l00192"></a>00192 
-<a name="l00200"></a>00200 <span class="keywordtype">void</span> 
-<a name="l00201"></a>00201 sinfo_new_convert_ZEROs_to_0_for_images(cpl_image * im) ;
-<a name="l00202"></a>00202 
-<a name="l00210"></a>00210 <span class="keywordtype">void</span> 
-<a name="l00211"></a>00211 sinfo_new_convert_ZEROs_to_0_for_cubes_range(cpl_imagelist * cube,
-<a name="l00212"></a>00212                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00213"></a>00213                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);
-<a name="l00214"></a>00214 
-<a name="l00224"></a>00224 <span class="keywordtype">void</span> 
-<a name="l00225"></a>00225 sinfo_new_convert_0_to_ZERO_for_cubes_range(cpl_imagelist * cube,
-<a name="l00226"></a>00226                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,
-<a name="l00227"></a>00227                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);
-<a name="l00235"></a>00235 <span class="keywordtype">void</span> 
-<a name="l00236"></a>00236 sinfo_new_convert_ZEROs_to_0_for_cubes(cpl_imagelist * cube) ;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 
-<a name="l00246"></a>00246 <span class="keywordtype">void</span> 
-<a name="l00247"></a>00247 sinfo_new_convert_0_to_ZEROs_for_images(cpl_image * im) ;
-<a name="l00248"></a>00248 
-<a name="l00256"></a>00256 <span class="keywordtype">void</span> 
-<a name="l00257"></a>00257 sinfo_new_convert_0_to_ZERO_for_cubes(cpl_imagelist * cube) ;
-<a name="l00258"></a>00258 
-<a name="l00266"></a>00266 <span class="keywordtype">void</span> sinfo_new_invert(cpl_image * im) ;
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 
-<a name="l00283"></a>00283 <span class="keywordtype">double</span> * 
-<a name="l00284"></a>00284 sinfo_new_xcorrel(
-<a name="l00285"></a>00285     <span class="keywordtype">float</span>      *    line_i,
-<a name="l00286"></a>00286     <span class="keywordtype">int</span>             width_i,
-<a name="l00287"></a>00287     <span class="keywordtype">float</span>      *    line_t,
-<a name="l00288"></a>00288     <span class="keywordtype">int</span>             width_t,
-<a name="l00289"></a>00289     <span class="keywordtype">int</span>             half_search,
-<a name="l00290"></a>00290     <span class="keywordtype">int</span>     *       delta,
-<a name="l00291"></a>00291     <span class="keywordtype">int</span>        *    maxpos,
-<a name="l00292"></a>00292     <span class="keywordtype">double</span>     *    xcorr_max
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 ) ;
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="keywordtype">float</span> 
-<a name="l00297"></a>00297 sinfo_new_nev_ille(<span class="keywordtype">float</span> [], <span class="keywordtype">float</span> [], <span class="keywordtype">int</span>, <span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="preprocessor">#endif </span>
-<a name="l00302"></a>00302 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00303"></a>00303 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_recipes.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_RECIPES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RECIPES_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_recipes.h,v 1.7 2008/02/12 13:29:09 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  05/06/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * recipes.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * some numerical recipes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <inttypes.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <float.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_pixel_handling.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> *                        defines</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* definitions of initial values for sinfo_lsqfit_c in sinfo_linefit() </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   (wave_calibration) */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define XDIM         1         </span><span class="comment">/* dimension of the x values */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define TOL          0.001     </span><span class="comment">/* fitting tolerance */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define LAB          0.1       </span><span class="comment">/* labda parameter */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define ITS          200       </span><span class="comment">/* maximum number of iterations */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define MAXPAR       4         </span><span class="comment">/* number of free parameters */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define LABFAC       10.0      </span><span class="comment">/* labda step factor */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMAX       1.0e+10   </span><span class="comment">/* maximum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define LABMIN       1.0e-10   </span><span class="comment">/* minimum value for labda */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">double</span> sinfo_nev_ille(<span class="keywordtype">double</span> x[], <span class="keywordtype">double</span> f[], <span class="keywordtype">int</span> n, <span class="keywordtype">double</span> z, <span class="keywordtype">int</span>* flag);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> sinfo_new_f_median(<span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_new_clean_mean( <span class="keywordtype">float</span> * array,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                   <span class="keywordtype">int</span>     n_elements,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                   <span class="keywordtype">float</span>   throwaway_low,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                   <span class="keywordtype">float</span>   throwaway_high ) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> pixelvalue </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_new_median(pixelvalue * array, <span class="keywordtype">int</span> n) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="keywordtype">int</span> sinfo_new_lsqfit_c ( <span class="keywordtype">float</span>  * xdat,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                <span class="keywordtype">int</span>    * xdim,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                <span class="keywordtype">float</span>  * ydat,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                <span class="keywordtype">float</span>  * wdat,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                <span class="keywordtype">int</span>    * ndat,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                <span class="keywordtype">float</span>  * fpar,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                <span class="keywordtype">float</span>  * epar,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                <span class="keywordtype">int</span>    * mpar,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                <span class="keywordtype">int</span>    * npar,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                <span class="keywordtype">float</span>  * tol ,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                <span class="keywordtype">int</span>    * its ,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                <span class="keywordtype">float</span>  * lab  ) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> sinfo_my_fit (<span class="keywordtype">float</span> x[], <span class="keywordtype">float</span> y[], <span class="keywordtype">int</span> ndata, <span class="keywordtype">float</span> sig[], <span class="keywordtype">int</span> mwt, <span class="keywordtype">float</span> *a,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>            <span class="keywordtype">float</span> *b, <span class="keywordtype">float</span> *siga, <span class="keywordtype">float</span> *sigb, <span class="keywordtype">float</span> *chi2, <span class="keywordtype">float</span> *q) ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> sinfo_new_nint ( <span class="keywordtype">double</span> x ) ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> sinfo_new_correlation ( <span class="keywordtype">float</span> * data1, <span class="keywordtype">float</span> * data2, <span class="keywordtype">int</span> ndata ) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> sinfo_new_convert_ZEROs_to_0_for_images(cpl_image * im) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> sinfo_new_convert_ZEROs_to_0_for_cubes_range(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                                              <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> sinfo_new_convert_0_to_ZERO_for_cubes_range(cpl_imagelist * cube,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_min,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                                             <span class="keyword">const</span> <span class="keywordtype">int</span> z_max);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> sinfo_new_convert_ZEROs_to_0_for_cubes(cpl_imagelist * cube) ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> sinfo_new_convert_0_to_ZEROs_for_images(cpl_image * im) ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> sinfo_new_convert_0_to_ZERO_for_cubes(cpl_imagelist * cube) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="keywordtype">void</span> sinfo_new_invert(cpl_image * im) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="keywordtype">double</span> * </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> sinfo_new_xcorrel(</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordtype">float</span>      *    line_i,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="keywordtype">int</span>             width_i,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordtype">float</span>      *    line_t,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordtype">int</span>             width_t,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordtype">int</span>             half_search,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <span class="keywordtype">int</span>     *       delta,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="keywordtype">int</span>        *    maxpos,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordtype">double</span>     *    xcorr_max</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> ) ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> sinfo_new_nev_ille(<span class="keywordtype">float</span> [], <span class="keywordtype">float</span> [], <span class="keywordtype">int</span>, <span class="keywordtype">float</span>, <span class="keywordtype">int</span> *);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__ref__types_8h_source.html b/html/sinfo__ref__types_8h_source.html
index b646d2b..81d010d 100644
--- a/html/sinfo__ref__types_8h_source.html
+++ b/html/sinfo__ref__types_8h_source.html
@@ -2,61 +2,92 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_ref_types.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_ref_types.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_ref_types.h,v 1.5 2012/08/10 07:55:23 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/08/10 07:55:23 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_REF_TYPES_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_REF_TYPES_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>CPL_BEGIN_DECLS
-<a name="l00031"></a>00031 <span class="comment">/* reference frames */</span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="preprocessor">#define RAW_REF                            "REF"</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define REF_LINE_ARC                       "REF_LINE_ARC"</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define REF_LINE_OH                        "REF_LINE_OH"</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define REF_BP_MAP                         "REF_BP_MAP"</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define REF_SLIT_POS                       "REF_SLIT_POS"</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DRS_SETUP_WAVE                     "DRS_SETUP_WAVE"</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define EXTCOEFF_TABLE                     "EXTCOEFF_TABLE"</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define FLUX_STD_TABLE                     "FLUX_STD_TABLE"</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="comment">/* catalog of flux of standard stars*/</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#define FLUX_STD_CATALOG           "FLUX_STD_CATALOG"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span>
-<a name="l00044"></a>00044 CPL_END_DECLS
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_ref_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_ref_types.h,v 1.5 2012/08/10 07:55:23 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/08/10 07:55:23 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_REF_TYPES_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_REF_TYPES_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span>CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/* reference frames */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#define RAW_REF                            "REF"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#define REF_LINE_ARC                       "REF_LINE_ARC"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#define REF_LINE_OH                        "REF_LINE_OH"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#define REF_BP_MAP                         "REF_BP_MAP"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define REF_SLIT_POS                       "REF_SLIT_POS"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define DRS_SETUP_WAVE                     "DRS_SETUP_WAVE"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define EXTCOEFF_TABLE                     "EXTCOEFF_TABLE"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define FLUX_STD_TABLE                     "FLUX_STD_TABLE"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="comment">/* catalog of flux of standard stars*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#define FLUX_STD_CATALOG           "FLUX_STD_CATALOG"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__remove__crh__single_8c_source.html b/html/sinfo__remove__crh__single_8c_source.html
index 751b50d..8735401 100644
--- a/html/sinfo__remove__crh__single_8c_source.html
+++ b/html/sinfo__remove__crh__single_8c_source.html
@@ -2,482 +2,513 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_remove_crh_single.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_remove_crh_single.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                            *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the ESO X-shooter Pipeline                          *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2006 European Southern Observatory                         *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                            *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify     *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by     *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or        *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                      *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                            *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,          *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                             *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                            *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License        *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software              *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA     *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                            */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"></span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_remove_crh_single.c,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.5  2012/03/03 10:18:26  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * fixed some doxygen warnings</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.4  2010/12/29 12:29:05  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * fixed doxygen warning, and bug in kernel filter indexing</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.3  2009/09/03 15:04:48  kmirny</span>
-<a name="l00033"></a>00033 <span class="comment"> * replacing deprecated functions</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.2  2009/02/18 10:33:07  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * fixed compiler warning</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.1  2009/01/02 08:27:58  amodigli</span>
-<a name="l00039"></a>00039 <span class="comment"> * added to repository</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> *</span>
-<a name="l00042"></a>00042 <span class="comment"> */</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">  Includes</span>
-<a name="l00060"></a>00060 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="preprocessor">#include <math.h></span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00070"></a>00070 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00071"></a>00071 <span class="comment">  Functions prototypes</span>
-<a name="l00072"></a>00072 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 cpl_image * sinfo_remove_crh_single( cpl_image * sci_image,
-<a name="l00074"></a>00074                      <span class="keywordtype">double</span> crh_frac_max,
-<a name="l00075"></a>00075                      <span class="keywordtype">double</span> sigma_lim,
-<a name="l00076"></a>00076                      <span class="keywordtype">double</span> f_lim,
-<a name="l00077"></a>00077                      <span class="keywordtype">int</span> max_iter,
-<a name="l00078"></a>00078                      <span class="keywordtype">double</span> gain,
-<a name="l00079"></a>00079                      <span class="keywordtype">double</span> ron);
-<a name="l00080"></a>00080 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00081"></a>00081 <span class="comment">  Implementation</span>
-<a name="l00082"></a>00082 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/* This should be defined in a more clever way, a parameter for example */</span>
-<a name="l00085"></a>00085 <span class="preprocessor">#define MAX_ITERATIONS 6</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span>
-<a name="l00087"></a>00087 
-<a name="l00109"></a>00109 cpl_image * sinfo_remove_crh_single( cpl_image * sci_image,
-<a name="l00110"></a>00110                      <span class="keywordtype">double</span> crh_frac_max,
-<a name="l00111"></a>00111                      <span class="keywordtype">double</span> sigma_lim,
-<a name="l00112"></a>00112                      <span class="keywordtype">double</span> f_lim,
-<a name="l00113"></a>00113                      <span class="keywordtype">int</span> max_iter,
-<a name="l00114"></a>00114                      <span class="keywordtype">double</span> gain,
-<a name="l00115"></a>00115                      <span class="keywordtype">double</span> ron)
-<a name="l00116"></a>00116 {
-<a name="l00117"></a>00117   <span class="keywordtype">int</span> i,j,k,l,m;
-<a name="l00118"></a>00118   <span class="keywordtype">double</span>  frac = 0. ;
-<a name="l00119"></a>00119   <span class="comment">/* Only pointers */</span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="comment">/* Need to be free */</span>
-<a name="l00122"></a>00122   <span class="comment">//xsh_localization_list * loc_list = NULL ;</span>
-<a name="l00123"></a>00123   cpl_image* laplacian_image = NULL;
-<a name="l00124"></a>00124   cpl_image* laplacian_redu_image = NULL;
-<a name="l00125"></a>00125   cpl_image* two_sub_sample = NULL;
-<a name="l00126"></a>00126   cpl_image* sci_median5_image = NULL;
-<a name="l00127"></a>00127   cpl_image* noise_image = NULL;
-<a name="l00128"></a>00128   cpl_image* s_image = NULL;
-<a name="l00129"></a>00129   cpl_image* s_median_image = NULL;
-<a name="l00130"></a>00130   cpl_image* s2_image = NULL;
-<a name="l00131"></a>00131   cpl_image* sci_median3_image = NULL;
-<a name="l00132"></a>00132   cpl_image* sci_median3_7_image = NULL;
-<a name="l00133"></a>00133   cpl_image* f_image = NULL;
-<a name="l00134"></a>00134   cpl_image* r_image = NULL;
-<a name="l00135"></a>00135   <span class="keywordtype">int</span> two_sub_sample_nx = 0;
-<a name="l00136"></a>00136   <span class="keywordtype">int</span> two_sub_sample_ny = 0;
-<a name="l00137"></a>00137   <span class="comment">/* Only pointers */</span>
-<a name="l00138"></a>00138   <span class="keywordtype">float</span>* sci_data = NULL;
-<a name="l00139"></a>00139   <span class="keywordtype">float</span>* two_sub_sample_data = NULL;
-<a name="l00140"></a>00140   <span class="keywordtype">float</span>* laplacian_data = NULL;
-<a name="l00141"></a>00141   <span class="keywordtype">float</span>* laplacian_redu_data = NULL;
-<a name="l00142"></a>00142   <span class="keywordtype">float</span>* sci_median5_data = NULL;
-<a name="l00143"></a>00143   <span class="keywordtype">float</span>* sci_median3_data = NULL;
-<a name="l00144"></a>00144   <span class="keywordtype">float</span>* sci_median3_7_data = NULL;
-<a name="l00145"></a>00145   <span class="keywordtype">float</span>* noise_data = NULL;
-<a name="l00146"></a>00146   <span class="keywordtype">float</span>* s_data = NULL;
-<a name="l00147"></a>00147   <span class="keywordtype">float</span>* s_median_data = NULL;
-<a name="l00148"></a>00148   <span class="keywordtype">float</span>* s2_data = NULL;
-<a name="l00149"></a>00149   <span class="keywordtype">float</span>* f_data = NULL;
-<a name="l00150"></a>00150   <span class="keywordtype">float</span>* r_data = NULL;
-<a name="l00151"></a>00151   <span class="comment">/* Need to be free */</span>
-<a name="l00152"></a>00152   <span class="keywordtype">float</span>* cosmic_data = NULL;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   cpl_matrix* laplacian_kernel = NULL;
-<a name="l00155"></a>00155   cpl_matrix* median3_kernel = NULL;
-<a name="l00156"></a>00156   cpl_matrix* median5_kernel = NULL;
-<a name="l00157"></a>00157   cpl_matrix* median7_kernel = NULL;
-<a name="l00158"></a>00158   <span class="keywordtype">int</span> new_crh =1, nb_crh = 0;
-<a name="l00159"></a>00159   <span class="keywordtype">int</span> nbiter = 1 ;
-<a name="l00160"></a>00160   cpl_vector* median = NULL;
-<a name="l00161"></a>00161   <span class="comment">//const char * tag = NULL ;</span>
-<a name="l00162"></a>00162   <span class="keywordtype">int</span> nx=0;
-<a name="l00163"></a>00163   <span class="keywordtype">int</span> ny=0;
-<a name="l00164"></a>00164   cpl_image* res_image=NULL;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166   <span class="comment">/* Check parameters */</span>
-<a name="l00167"></a>00167   cknull( sci_image,<span class="stringliteral">"null input image"</span> ) ; ;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169   sinfo_msg( <span class="stringliteral">"Entering sinfo_remove_crh_single"</span>);
-<a name="l00170"></a>00170   sinfo_msg( <span class="stringliteral">"  Params: frac_max %.1f, sigma_lim %.2f f_lim %.2f, iter %d"</span>,
-<a name="l00171"></a>00171        crh_frac_max, sigma_lim, f_lim, max_iter);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   <span class="comment">/* Preparing different kernels */</span>
-<a name="l00174"></a>00174   nx=cpl_image_get_size_x(sci_image);
-<a name="l00175"></a>00175   ny=cpl_image_get_size_y(sci_image);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   <span class="comment">/* Laplacian */</span>
-<a name="l00178"></a>00178   check_nomsg( laplacian_kernel = cpl_matrix_new(3,3));
-<a name="l00179"></a>00179   cpl_matrix_set( laplacian_kernel,0,0,0.0);
-<a name="l00180"></a>00180   cpl_matrix_set( laplacian_kernel,0,1,-1.0);
-<a name="l00181"></a>00181   cpl_matrix_set( laplacian_kernel,0,2,0.0);
-<a name="l00182"></a>00182   cpl_matrix_set( laplacian_kernel,1,0,-1.0);
-<a name="l00183"></a>00183   cpl_matrix_set( laplacian_kernel,1,1,4.0);
-<a name="l00184"></a>00184   cpl_matrix_set( laplacian_kernel,1,2,-1.0);
-<a name="l00185"></a>00185   cpl_matrix_set( laplacian_kernel,2,0,0.0);
-<a name="l00186"></a>00186   cpl_matrix_set( laplacian_kernel,2,1,-1.0);
-<a name="l00187"></a>00187   cpl_matrix_set( laplacian_kernel,2,2,0.0);
-<a name="l00188"></a>00188   cpl_matrix_divide_scalar( laplacian_kernel, 4.0);
-<a name="l00189"></a>00189 <span class="comment">/*</span>
-<a name="l00190"></a>00190 <span class="comment">  cpl_matrix_set( laplacian_kernel,0,0,-1.0);</span>
-<a name="l00191"></a>00191 <span class="comment">  cpl_matrix_set( laplacian_kernel,0,1,-1.0);</span>
-<a name="l00192"></a>00192 <span class="comment">  cpl_matrix_set( laplacian_kernel,0,2,-1.0);</span>
-<a name="l00193"></a>00193 <span class="comment">  cpl_matrix_set( laplacian_kernel,1,0,-1.0);</span>
-<a name="l00194"></a>00194 <span class="comment">  cpl_matrix_set( laplacian_kernel,1,1,8.0);</span>
-<a name="l00195"></a>00195 <span class="comment">  cpl_matrix_set( laplacian_kernel,1,2,-1.0);</span>
-<a name="l00196"></a>00196 <span class="comment">  cpl_matrix_set( laplacian_kernel,2,0,-1.0);</span>
-<a name="l00197"></a>00197 <span class="comment">  cpl_matrix_set( laplacian_kernel,2,1,-1.0);</span>
-<a name="l00198"></a>00198 <span class="comment">  cpl_matrix_set( laplacian_kernel,2,2,-1.0);</span>
-<a name="l00199"></a>00199 <span class="comment">  cpl_matrix_divide_scalar( laplacian_kernel, 8.0);</span>
-<a name="l00200"></a>00200 <span class="comment">*/</span>
-<a name="l00201"></a>00201   <span class="comment">/* Median 3x3*/</span>
-<a name="l00202"></a>00202   check_nomsg( median3_kernel = cpl_matrix_new(3,3));
-<a name="l00203"></a>00203   <span class="keywordflow">for</span>(j=0; j< 3; j++){
-<a name="l00204"></a>00204     <span class="keywordflow">for</span>(i=0; i< 3; i++){
-<a name="l00205"></a>00205       cpl_matrix_set( median3_kernel, i,j,1.0);
-<a name="l00206"></a>00206     }
-<a name="l00207"></a>00207   }
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   <span class="comment">/* Median 5x5 */</span>
-<a name="l00210"></a>00210   check_nomsg( median5_kernel = cpl_matrix_new(5,5));
-<a name="l00211"></a>00211   <span class="keywordflow">for</span>(j=0; j< 5; j++){
-<a name="l00212"></a>00212     <span class="keywordflow">for</span>(i=0; i< 5; i++){
-<a name="l00213"></a>00213       cpl_matrix_set( median5_kernel, i,j,1.0);
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215   }
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   <span class="comment">/* Median 7x7 */</span>
-<a name="l00218"></a>00218   check_nomsg( median7_kernel = cpl_matrix_new(7,7));
-<a name="l00219"></a>00219   <span class="keywordflow">for</span>(j=0; j< 7; j++){
-<a name="l00220"></a>00220     <span class="keywordflow">for</span>(i=0; i< 7; i++){
-<a name="l00221"></a>00221       cpl_matrix_set( median7_kernel, i,j,1.0);
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223   }
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225   check_nomsg (res_image = cpl_image_duplicate( sci_image));
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227   <span class="comment">/* Allocate images and pointers */</span>
-<a name="l00228"></a>00228   check_nomsg (sci_data = cpl_image_get_data_float( res_image));
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230   two_sub_sample_nx = nx*2;
-<a name="l00231"></a>00231   two_sub_sample_ny = ny*2;
-<a name="l00232"></a>00232   check_nomsg( two_sub_sample = cpl_image_new( two_sub_sample_nx,
-<a name="l00233"></a>00233     two_sub_sample_ny, CPL_TYPE_FLOAT));
-<a name="l00234"></a>00234   check_nomsg(two_sub_sample_data = cpl_image_get_data_float( two_sub_sample));
-<a name="l00235"></a>00235   check_nomsg( laplacian_redu_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00236"></a>00236   check_nomsg(laplacian_redu_data = cpl_image_get_data_float(
-<a name="l00237"></a>00237     laplacian_redu_image));
-<a name="l00238"></a>00238   check_nomsg( noise_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00239"></a>00239   check_nomsg( noise_data = cpl_image_get_data_float( noise_image));
-<a name="l00240"></a>00240   check_nomsg( s_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00241"></a>00241   check_nomsg( s_data = cpl_image_get_data_float( s_image));
-<a name="l00242"></a>00242   check_nomsg( s2_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00243"></a>00243   check_nomsg( s2_data = cpl_image_get_data_float( s2_image));
-<a name="l00244"></a>00244   check_nomsg( f_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00245"></a>00245   check_nomsg( f_data = cpl_image_get_data_float( f_image));
-<a name="l00246"></a>00246   check_nomsg( r_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));
-<a name="l00247"></a>00247   check_nomsg( r_data = cpl_image_get_data_float( r_image));
-<a name="l00248"></a>00248   cosmic_data=cpl_calloc(nx*ny, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250   <span class="comment">/* LGG - Added limit on frac_max AND limit on nb iterations */</span>
-<a name="l00251"></a>00251   <span class="keywordflow">while</span>( new_crh > 0 && frac < crh_frac_max && nbiter <= max_iter ){
-<a name="l00252"></a>00252     sinfo_msg(<span class="stringliteral">"Iteration %d"</span>,nbiter );
-<a name="l00253"></a>00253     <span class="comment">/* Create a 2n x 2n images like this</span>
-<a name="l00254"></a>00254 <span class="comment">        | 1 | 2 |  =>  | 1 | 1 | 2 | 2 |</span>
-<a name="l00255"></a>00255 <span class="comment">        | 3 | 4 |      | 1 | 1 | 2 | 2 |</span>
-<a name="l00256"></a>00256 <span class="comment">                       | 3 | 3 | 4 | 4 |</span>
-<a name="l00257"></a>00257 <span class="comment">                       | 3 | 3 | 4 | 4 | */</span>
-<a name="l00258"></a>00258     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Create a 2n images"</span>);
-<a name="l00259"></a>00259     <span class="keywordflow">for</span>( j=0; j< ny; j++){
-<a name="l00260"></a>00260       <span class="keywordflow">for</span>( i=0; i< nx; i++){
-<a name="l00261"></a>00261         <span class="keywordtype">float</span> val = sci_data[i+j*nx];
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     <span class="keywordflow">if</span> ( val < 0. ) val = 0. ;
-<a name="l00264"></a>00264         two_sub_sample_data[i*2+j*2*two_sub_sample_nx] = val;
-<a name="l00265"></a>00265         two_sub_sample_data[i*2+1+j*2*two_sub_sample_nx] = val;
-<a name="l00266"></a>00266         two_sub_sample_data[i*2+(j*2+1)*two_sub_sample_nx] = val;
-<a name="l00267"></a>00267         two_sub_sample_data[i*2+1+(j*2+1)*two_sub_sample_nx] = val;
-<a name="l00268"></a>00268       }
-<a name="l00269"></a>00269     }
-<a name="l00270"></a>00270     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Doing laplacian convolution"</span>);
-<a name="l00271"></a>00271     <span class="comment">/* Doing the laplacian convolution</span>
-<a name="l00272"></a>00272 <span class="comment">        0  -1   0</span>
-<a name="l00273"></a>00273 <span class="comment">       -1   4  -1</span>
-<a name="l00274"></a>00274 <span class="comment">        0  -1   0 */</span>
-<a name="l00275"></a>00275     laplacian_image = sinfo_image_filter_linear( two_sub_sample,
-<a name="l00276"></a>00276       laplacian_kernel);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     <span class="comment">/* multiply by two to normalize correctly the laplacian [RD5]</span>
-<a name="l00279"></a>00279 <span class="comment">       and filter negative values */</span>
-<a name="l00280"></a>00280     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Normalize laplacian"</span>);
-<a name="l00281"></a>00281     check_nomsg (laplacian_data = cpl_image_get_data_float( laplacian_image));
-<a name="l00282"></a>00282     <span class="keywordflow">for</span> ( i=0; i< two_sub_sample_nx*two_sub_sample_ny; i++){
-<a name="l00283"></a>00283       <span class="keywordflow">if</span> (laplacian_data[i] > 0.0){
-<a name="l00284"></a>00284         laplacian_data[i] = 2.0 * laplacian_data[i];
-<a name="l00285"></a>00285       }
-<a name="l00286"></a>00286       <span class="keywordflow">else</span>{
-<a name="l00287"></a>00287         laplacian_data[i] = 0.0;
-<a name="l00288"></a>00288       }
-<a name="l00289"></a>00289     }
-<a name="l00290"></a>00290     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Save Lpositive"</span>);
-<a name="l00291"></a>00291     cpl_image_save(laplacian_image, <span class="stringliteral">"Lpositive.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,
-<a name="l00292"></a>00292       CPL_IO_DEFAULT);
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294     <span class="comment">/* resample to the original size</span>
-<a name="l00295"></a>00295 <span class="comment">       | 1 | 1 | 2 | 2 |    | 1 | 2 |</span>
-<a name="l00296"></a>00296 <span class="comment">       | 1 | 1 | 2 | 2 |    | 3 | 4 |</span>
-<a name="l00297"></a>00297 <span class="comment">       | 3 | 3 | 4 | 4 | =></span>
-<a name="l00298"></a>00298 <span class="comment">       | 3 | 3 | 4 | 4 |               */</span>
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Resample to the original size"</span>);
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     <span class="keywordflow">for</span>( j=0; j< ny; j++){
-<a name="l00303"></a>00303       <span class="keywordflow">for</span>( i=0; i< nx; i++){
-<a name="l00304"></a>00304         laplacian_redu_data[i+j*nx] =
-<a name="l00305"></a>00305           (laplacian_data[i*2+j*2*two_sub_sample_nx]+
-<a name="l00306"></a>00306            laplacian_data[i*2+1+j*2*two_sub_sample_nx]+
-<a name="l00307"></a>00307            laplacian_data[i*2+(j*2+1)*two_sub_sample_nx]+
-<a name="l00308"></a>00308            laplacian_data[i*2+1+(j*2+1)*two_sub_sample_nx])/4.0;
-<a name="l00309"></a>00309       }
-<a name="l00310"></a>00310     }
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     cpl_image_save(laplacian_redu_image, <span class="stringliteral">"Lplus.fits"</span>, CPL_BPP_IEEE_FLOAT,
-<a name="l00313"></a>00313       NULL, CPL_IO_DEFAULT);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply median filter"</span>);
-<a name="l00316"></a>00316     <span class="comment">/* Apply 5x5 median filter on data */</span>
-<a name="l00317"></a>00317     check_nomsg( sci_median5_image = sinfo_image_filter_median( sci_image,
-<a name="l00318"></a>00318       median5_kernel));
-<a name="l00319"></a>00319     check_nomsg (sci_median5_data = cpl_image_get_data_float( sci_median5_image));
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute noise"</span>);
-<a name="l00322"></a>00322     <span class="comment">/* computes the noise image */</span>
-<a name="l00323"></a>00323     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){
-<a name="l00324"></a>00324       noise_data[i] = sqrt(sci_median5_data[i]*gain+
-<a name="l00325"></a>00325         ron*ron)/ gain;
-<a name="l00326"></a>00326     }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute S"</span>);
-<a name="l00329"></a>00329     <span class="comment">/* compute S image */</span>
-<a name="l00330"></a>00330     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){
-<a name="l00331"></a>00331       s_data[i] = laplacian_redu_data[i] / (2.0*noise_data[i]);
-<a name="l00332"></a>00332     }
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute S median"</span>);
-<a name="l00335"></a>00335     <span class="comment">/* compute S median image */</span>
-<a name="l00336"></a>00336     check_nomsg( s_median_image = sinfo_image_filter_median( s_image,
-<a name="l00337"></a>00337       median5_kernel));
-<a name="l00338"></a>00338     check_nomsg( s_median_data = cpl_image_get_data_float( s_median_image));
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute s2"</span>);
-<a name="l00341"></a>00341     <span class="comment">/* compute s2 */</span>
-<a name="l00342"></a>00342     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){
-<a name="l00343"></a>00343       s2_data[i] = s_data[i] -s_median_data[i];
-<a name="l00344"></a>00344     }
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346        cpl_image_save( s2_image, <span class="stringliteral">"S2.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,
-<a name="l00347"></a>00347      CPL_IO_DEFAULT);
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 3x3 filter"</span>);
-<a name="l00350"></a>00350     <span class="comment">/* Apply 3x3 median filter on data */</span>
-<a name="l00351"></a>00351     check_nomsg( sci_median3_image = sinfo_image_filter_median( sci_image,
-<a name="l00352"></a>00352       median3_kernel));
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 7x7 filter"</span>);
-<a name="l00355"></a>00355     <span class="comment">/* Apply 7x7 median filter */</span>
-<a name="l00356"></a>00356     check_nomsg( sci_median3_7_image = sinfo_image_filter_median( sci_median3_image,
-<a name="l00357"></a>00357       median7_kernel));
-<a name="l00358"></a>00358     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 7x7 filter ok"</span>);
-<a name="l00359"></a>00359     check_nomsg ( sci_median3_data = cpl_image_get_data_float( sci_median3_image));
-<a name="l00360"></a>00360     check_nomsg ( sci_median3_7_data = cpl_image_get_data_float(
-<a name="l00361"></a>00361       sci_median3_7_image));
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute F"</span>);
-<a name="l00364"></a>00364     <span class="comment">/* compute F */</span>
-<a name="l00365"></a>00365     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){
-<a name="l00366"></a>00366       f_data[i] = sci_median3_data[i] -sci_median3_7_data[i];
-<a name="l00367"></a>00367       <span class="keywordflow">if</span> (f_data[i] < 0.01){
-<a name="l00368"></a>00368         f_data[i] = 0.01;
-<a name="l00369"></a>00369       }
-<a name="l00370"></a>00370     }
-<a name="l00371"></a>00371     cpl_image_save( f_image, <span class="stringliteral">"F.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,
-<a name="l00372"></a>00372       CPL_IO_DEFAULT);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute R"</span>);
-<a name="l00375"></a>00375     <span class="comment">/* compute R */</span>
-<a name="l00376"></a>00376     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){
-<a name="l00377"></a>00377       r_data[i] = laplacian_redu_data[i]/f_data[i];
-<a name="l00378"></a>00378     }
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380     cpl_image_save( r_image, <span class="stringliteral">"R.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,
-<a name="l00381"></a>00381       CPL_IO_DEFAULT);
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383     <span class="comment">/* Search for cosmics */</span>
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Search for cosmic"</span>);
-<a name="l00386"></a>00386     new_crh = 0;
-<a name="l00387"></a>00387     median = cpl_vector_new(24);
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389     <span class="keywordflow">for</span>( j=1; j< ny-1; j++){
-<a name="l00390"></a>00390       <span class="keywordtype">double</span> *data = NULL;
-<a name="l00391"></a>00391       cpl_vector* med_vect = NULL;
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393       <span class="keywordflow">for</span>( i=1; i< nx-1; i++){
-<a name="l00394"></a>00394         <span class="keywordflow">if</span> ( (s2_data[i+j*nx] >= sigma_lim) &&
-<a name="l00395"></a>00395           (r_data[i+j*nx] >= f_lim)){
-<a name="l00396"></a>00396           <span class="keywordtype">int</span> li,lj,ui,uj;
-<a name="l00397"></a>00397           cosmic_data[i+j*nx] = 1.0;
-<a name="l00398"></a>00398           new_crh++;
-<a name="l00399"></a>00399           li = i-2;
-<a name="l00400"></a>00400           lj = j-2;
-<a name="l00401"></a>00401           ui = i+2;
-<a name="l00402"></a>00402           uj = j+2;
-<a name="l00403"></a>00403           m = 0;
-<a name="l00404"></a>00404           <span class="keywordflow">if</span> (li < 0) li = 0;
-<a name="l00405"></a>00405           <span class="keywordflow">if</span> (ui >= nx) ui = nx-1;
-<a name="l00406"></a>00406           <span class="keywordflow">if</span> (lj < 0) lj = 0;
-<a name="l00407"></a>00407           <span class="keywordflow">if</span> (uj >= ny) uj = ny-1;
-<a name="l00408"></a>00408           <span class="keywordflow">for</span>( k=lj; k <= uj; k++){
-<a name="l00409"></a>00409             <span class="keywordflow">for</span>( l=li; l <= ui; l++){
-<a name="l00410"></a>00410               <span class="comment">//sinfo_msg("REGDEBUG k %d l %d m %d", k, l, m);</span>
-<a name="l00411"></a>00411               <span class="keywordflow">if</span> ( k < j){
-<a name="l00412"></a>00412                 cpl_vector_set(median, m, sci_data[l+k*nx]);
-<a name="l00413"></a>00413                 m++;
-<a name="l00414"></a>00414               }
-<a name="l00415"></a>00415               <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k == j) && ( l < i)){
-<a name="l00416"></a>00416                  cpl_vector_set(median, m, sci_data[l+k*nx]);
-<a name="l00417"></a>00417                 m++;
-<a name="l00418"></a>00418               }
-<a name="l00419"></a>00419               <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( l!=i && k!=j && (s2_data[l+k*nx] < sigma_lim)
-<a name="l00420"></a>00420                 && (r_data[l+k*nx] < f_lim)){
-<a name="l00421"></a>00421                 cpl_vector_set(median, m, sci_data[l+k*nx]);
-<a name="l00422"></a>00422                 m++;
-<a name="l00423"></a>00423               }
-<a name="l00424"></a>00424             }
-<a name="l00425"></a>00425           }
-<a name="l00426"></a>00426           check_nomsg( data = cpl_vector_get_data( median));
-<a name="l00427"></a>00427           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"REGDEBUG i %d j %d m %d"</span>, i, j ,m);
-<a name="l00428"></a>00428           check_nomsg( med_vect = cpl_vector_wrap( m, data));
-<a name="l00429"></a>00429           check_nomsg( sci_data[i+j*nx] = cpl_vector_get_median( med_vect));
-<a name="l00430"></a>00430           cpl_vector_unwrap( med_vect);
-<a name="l00431"></a>00431         }
-<a name="l00432"></a>00432       }
-<a name="l00433"></a>00433     }
-<a name="l00434"></a>00434     sinfoni_free_vector( &median ) ;
-<a name="l00435"></a>00435     nb_crh += new_crh;
-<a name="l00436"></a>00436     frac = (double)nb_crh/(<span class="keywordtype">double</span>)(nx*ny) ;
-<a name="l00437"></a>00437     sinfo_msg(<span class="stringliteral">"   new cosmics %d, total %d, frac %.4f [%d pixels]"</span>,new_crh,nb_crh,
-<a name="l00438"></a>00438         frac, nx*ny);
-<a name="l00439"></a>00439     nbiter++;
-<a name="l00440"></a>00440     sinfo_free_image( &laplacian_image);
-<a name="l00441"></a>00441     sinfo_free_image( &sci_median3_7_image ) ;
-<a name="l00442"></a>00442     sinfo_free_image( &sci_median3_image ) ;
-<a name="l00443"></a>00443     sinfo_free_image( &s_median_image ) ;
-<a name="l00444"></a>00444     sinfo_free_image( &sci_median5_image ) ;
-<a name="l00445"></a>00445   }
-<a name="l00446"></a>00446   {
-<a name="l00447"></a>00447     FILE *debug = NULL;
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     debug = fopen(<span class="stringliteral">"cosmic.log"</span>,<span class="stringliteral">"w"</span>);
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451     <span class="keywordflow">for</span>( j=0; j< ny; j++){
-<a name="l00452"></a>00452       <span class="keywordflow">for</span>( i=0; i< nx; i++){
-<a name="l00453"></a>00453         <span class="keywordflow">if</span> ( cosmic_data[i+j*nx] == 1.0){
-<a name="l00454"></a>00454           fprintf(debug,<span class="stringliteral">"%.1f %.1f\n"</span>,i+1.0,j+1.0);
-<a name="l00455"></a>00455         }
-<a name="l00456"></a>00456       }
-<a name="l00457"></a>00457     }
-<a name="l00458"></a>00458     fclose(debug);
-<a name="l00459"></a>00459   }
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461   <span class="comment">//check_nomsg( res_frame = cpl_frame_duplicate( sci_frame ) ) ;</span>
-<a name="l00462"></a>00462   <span class="comment">//sinfo_msg( "Saving Result Frame '%s'", res_name ) ;</span>
-<a name="l00463"></a>00463   <span class="comment">//check_nomsg( add_qc_crh( sci_pre, nb_crh, 1, instrument ) ) ;</span>
-<a name="l00464"></a>00464   <span class="comment">//check_nomsg( res_frame = xsh_pre_save( sci_pre, res_name, 1 ) ) ;</span>
-<a name="l00465"></a>00465   <span class="comment">//tag = cpl_frame_get_tag( in_sci_frame ) ;</span>
-<a name="l00466"></a>00466   <span class="comment">//check_nomsg( cpl_frame_set_tag( res_frame, tag ) ) ;</span>
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468   cleanup:
-<a name="l00469"></a>00469   <span class="comment">//xsh_pre_free( &sci_pre);</span>
-<a name="l00470"></a>00470   <span class="comment">//xsh_localization_list_free( &loc_list ) ;</span>
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472     <span class="comment">/* free kernel */</span>
-<a name="l00473"></a>00473     sinfoni_free_matrix( &laplacian_kernel);
-<a name="l00474"></a>00474     sinfoni_free_matrix( &median3_kernel);
-<a name="l00475"></a>00475     sinfoni_free_matrix( &median5_kernel);
-<a name="l00476"></a>00476     sinfoni_free_matrix( &median7_kernel);
-<a name="l00477"></a>00477     <span class="comment">/* free images */</span>
-<a name="l00478"></a>00478     sinfo_free_image( &laplacian_image);
-<a name="l00479"></a>00479     sinfo_free_image( &laplacian_redu_image);
-<a name="l00480"></a>00480     sinfo_free_image( &two_sub_sample);
-<a name="l00481"></a>00481     sinfo_free_image( &sci_median5_image);
-<a name="l00482"></a>00482     sinfo_free_image( &noise_image);
-<a name="l00483"></a>00483     sinfo_free_image( &s_image);
-<a name="l00484"></a>00484     sinfo_free_image( &s_median_image);
-<a name="l00485"></a>00485     sinfo_free_image( &s2_image);
-<a name="l00486"></a>00486     sinfo_free_image( &sci_median3_image);
-<a name="l00487"></a>00487     sinfo_free_image( &sci_median3_7_image);
-<a name="l00488"></a>00488     sinfo_free_image( &f_image);
-<a name="l00489"></a>00489     sinfo_free_image( &r_image);
-<a name="l00490"></a>00490     <span class="comment">/* free vector */</span>
-<a name="l00491"></a>00491     sinfoni_free_vector( &median);
-<a name="l00492"></a>00492     <span class="comment">/* free tab */</span>
-<a name="l00493"></a>00493     <span class="keywordflow">if</span>(cosmic_data!=NULL) cpl_free( cosmic_data);
-<a name="l00494"></a>00494     <span class="keywordflow">return</span> res_image;
-<a name="l00495"></a>00495 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_remove_crh_single.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                            *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the ESO X-shooter Pipeline                          *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2006 European Southern Observatory                         *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify     *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by     *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or        *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                      *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,          *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                             *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                            *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License        *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software              *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA     *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                            */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_remove_crh_single.c,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.5  2012/03/03 10:18:26  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * fixed some doxygen warnings</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.4  2010/12/29 12:29:05  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * fixed doxygen warning, and bug in kernel filter indexing</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.3  2009/09/03 15:04:48  kmirny</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * replacing deprecated functions</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.2  2009/02/18 10:33:07  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * fixed compiler warning</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.1  2009/01/02 08:27:58  amodigli</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * added to repository</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">  Includes</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">  Functions prototypes</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> cpl_image * sinfo_remove_crh_single( cpl_image * sci_image,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                      <span class="keywordtype">double</span> crh_frac_max,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                      <span class="keywordtype">double</span> sigma_lim,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                      <span class="keywordtype">double</span> f_lim,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                      <span class="keywordtype">int</span> max_iter,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                      <span class="keywordtype">double</span> gain,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                      <span class="keywordtype">double</span> ron);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">  Implementation</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/* This should be defined in a more clever way, a parameter for example */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">#define MAX_ITERATIONS 6</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> cpl_image * sinfo_remove_crh_single( cpl_image * sci_image,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                      <span class="keywordtype">double</span> crh_frac_max,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                      <span class="keywordtype">double</span> sigma_lim,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                      <span class="keywordtype">double</span> f_lim,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                      <span class="keywordtype">int</span> max_iter,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                      <span class="keywordtype">double</span> gain,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                      <span class="keywordtype">double</span> ron)</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   <span class="keywordtype">int</span> i,j,k,l,m;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>   <span class="keywordtype">double</span>  frac = 0. ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="comment">/* Only pointers */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="comment">/* Need to be free */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>   <span class="comment">//xsh_localization_list * loc_list = NULL ;</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   cpl_image* laplacian_image = NULL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   cpl_image* laplacian_redu_image = NULL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_image* two_sub_sample = NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   cpl_image* sci_median5_image = NULL;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_image* noise_image = NULL;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_image* s_image = NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   cpl_image* s_median_image = NULL;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   cpl_image* s2_image = NULL;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   cpl_image* sci_median3_image = NULL;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   cpl_image* sci_median3_7_image = NULL;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   cpl_image* f_image = NULL;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   cpl_image* r_image = NULL;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   <span class="keywordtype">int</span> two_sub_sample_nx = 0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   <span class="keywordtype">int</span> two_sub_sample_ny = 0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="comment">/* Only pointers */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="keywordtype">float</span>* sci_data = NULL;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   <span class="keywordtype">float</span>* two_sub_sample_data = NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="keywordtype">float</span>* laplacian_data = NULL;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordtype">float</span>* laplacian_redu_data = NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>   <span class="keywordtype">float</span>* sci_median5_data = NULL;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordtype">float</span>* sci_median3_data = NULL;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">float</span>* sci_median3_7_data = NULL;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">float</span>* noise_data = NULL;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordtype">float</span>* s_data = NULL;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordtype">float</span>* s_median_data = NULL;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="keywordtype">float</span>* s2_data = NULL;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">float</span>* f_data = NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">float</span>* r_data = NULL;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="comment">/* Need to be free */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordtype">float</span>* cosmic_data = NULL;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   cpl_matrix* laplacian_kernel = NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_matrix* median3_kernel = NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_matrix* median5_kernel = NULL;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   cpl_matrix* median7_kernel = NULL;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordtype">int</span> new_crh =1, nb_crh = 0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordtype">int</span> nbiter = 1 ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   cpl_vector* median = NULL;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="comment">//const char * tag = NULL ;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   cpl_image* res_image=NULL;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">/* Check parameters */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   cknull( sci_image,<span class="stringliteral">"null input image"</span> ) ; ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   sinfo_msg( <span class="stringliteral">"Entering sinfo_remove_crh_single"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   sinfo_msg( <span class="stringliteral">"  Params: frac_max %.1f, sigma_lim %.2f f_lim %.2f, iter %d"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>        crh_frac_max, sigma_lim, f_lim, max_iter);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   <span class="comment">/* Preparing different kernels */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   nx=cpl_image_get_size_x(sci_image);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   ny=cpl_image_get_size_y(sci_image);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="comment">/* Laplacian */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   check_nomsg( laplacian_kernel = cpl_matrix_new(3,3));</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   cpl_matrix_set( laplacian_kernel,0,0,0.0);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   cpl_matrix_set( laplacian_kernel,0,1,-1.0);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_matrix_set( laplacian_kernel,0,2,0.0);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   cpl_matrix_set( laplacian_kernel,1,0,-1.0);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   cpl_matrix_set( laplacian_kernel,1,1,4.0);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   cpl_matrix_set( laplacian_kernel,1,2,-1.0);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   cpl_matrix_set( laplacian_kernel,2,0,0.0);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_matrix_set( laplacian_kernel,2,1,-1.0);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   cpl_matrix_set( laplacian_kernel,2,2,0.0);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   cpl_matrix_divide_scalar( laplacian_kernel, 4.0);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,0,0,-1.0);</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,0,1,-1.0);</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,0,2,-1.0);</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,1,0,-1.0);</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,1,1,8.0);</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,1,2,-1.0);</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,2,0,-1.0);</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,2,1,-1.0);</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">  cpl_matrix_set( laplacian_kernel,2,2,-1.0);</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">  cpl_matrix_divide_scalar( laplacian_kernel, 8.0);</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   <span class="comment">/* Median 3x3*/</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   check_nomsg( median3_kernel = cpl_matrix_new(3,3));</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">for</span>(j=0; j< 3; j++){</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordflow">for</span>(i=0; i< 3; i++){</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>       cpl_matrix_set( median3_kernel, i,j,1.0);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   <span class="comment">/* Median 5x5 */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   check_nomsg( median5_kernel = cpl_matrix_new(5,5));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordflow">for</span>(j=0; j< 5; j++){</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">for</span>(i=0; i< 5; i++){</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       cpl_matrix_set( median5_kernel, i,j,1.0);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="comment">/* Median 7x7 */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   check_nomsg( median7_kernel = cpl_matrix_new(7,7));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="keywordflow">for</span>(j=0; j< 7; j++){</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">for</span>(i=0; i< 7; i++){</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       cpl_matrix_set( median7_kernel, i,j,1.0);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   check_nomsg (res_image = cpl_image_duplicate( sci_image));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="comment">/* Allocate images and pointers */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   check_nomsg (sci_data = cpl_image_get_data_float( res_image));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   two_sub_sample_nx = nx*2;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   two_sub_sample_ny = ny*2;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   check_nomsg( two_sub_sample = cpl_image_new( two_sub_sample_nx,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     two_sub_sample_ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   check_nomsg(two_sub_sample_data = cpl_image_get_data_float( two_sub_sample));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   check_nomsg( laplacian_redu_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   check_nomsg(laplacian_redu_data = cpl_image_get_data_float(</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     laplacian_redu_image));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   check_nomsg( noise_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   check_nomsg( noise_data = cpl_image_get_data_float( noise_image));</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   check_nomsg( s_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   check_nomsg( s_data = cpl_image_get_data_float( s_image));</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   check_nomsg( s2_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   check_nomsg( s2_data = cpl_image_get_data_float( s2_image));</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   check_nomsg( f_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   check_nomsg( f_data = cpl_image_get_data_float( f_image));</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   check_nomsg( r_image = cpl_image_new(nx,ny, CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   check_nomsg( r_data = cpl_image_get_data_float( r_image));</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   cosmic_data=cpl_calloc(nx*ny, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   <span class="comment">/* LGG - Added limit on frac_max AND limit on nb iterations */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">while</span>( new_crh > 0 && frac < crh_frac_max && nbiter <= max_iter ){</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     sinfo_msg(<span class="stringliteral">"Iteration %d"</span>,nbiter );</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="comment">/* Create a 2n x 2n images like this</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">        | 1 | 2 |  =>  | 1 | 1 | 2 | 2 |</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">        | 3 | 4 |      | 1 | 1 | 2 | 2 |</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">                       | 3 | 3 | 4 | 4 |</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">                       | 3 | 3 | 4 | 4 | */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Create a 2n images"</span>);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">for</span>( j=0; j< ny; j++){</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       <span class="keywordflow">for</span>( i=0; i< nx; i++){</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         <span class="keywordtype">float</span> val = sci_data[i+j*nx];</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">if</span> ( val < 0. ) val = 0. ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         two_sub_sample_data[i*2+j*2*two_sub_sample_nx] = val;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         two_sub_sample_data[i*2+1+j*2*two_sub_sample_nx] = val;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         two_sub_sample_data[i*2+(j*2+1)*two_sub_sample_nx] = val;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         two_sub_sample_data[i*2+1+(j*2+1)*two_sub_sample_nx] = val;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Doing laplacian convolution"</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="comment">/* Doing the laplacian convolution</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">        0  -1   0</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">       -1   4  -1</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">        0  -1   0 */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     laplacian_image = sinfo_image_filter_linear( two_sub_sample,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       laplacian_kernel);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="comment">/* multiply by two to normalize correctly the laplacian [RD5]</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> <span class="comment">       and filter negative values */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Normalize laplacian"</span>);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     check_nomsg (laplacian_data = cpl_image_get_data_float( laplacian_image));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordflow">for</span> ( i=0; i< two_sub_sample_nx*two_sub_sample_ny; i++){</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       <span class="keywordflow">if</span> (laplacian_data[i] > 0.0){</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         laplacian_data[i] = 2.0 * laplacian_data[i];</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       }</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       <span class="keywordflow">else</span>{</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         laplacian_data[i] = 0.0;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Save Lpositive"</span>);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     cpl_image_save(laplacian_image, <span class="stringliteral">"Lpositive.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>       CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="comment">/* resample to the original size</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">       | 1 | 1 | 2 | 2 |    | 1 | 2 |</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">       | 1 | 1 | 2 | 2 |    | 3 | 4 |</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">       | 3 | 3 | 4 | 4 | =></span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">       | 3 | 3 | 4 | 4 |               */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Resample to the original size"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">for</span>( j=0; j< ny; j++){</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>       <span class="keywordflow">for</span>( i=0; i< nx; i++){</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         laplacian_redu_data[i+j*nx] =</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>           (laplacian_data[i*2+j*2*two_sub_sample_nx]+</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>            laplacian_data[i*2+1+j*2*two_sub_sample_nx]+</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>            laplacian_data[i*2+(j*2+1)*two_sub_sample_nx]+</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>            laplacian_data[i*2+1+(j*2+1)*two_sub_sample_nx])/4.0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     cpl_image_save(laplacian_redu_image, <span class="stringliteral">"Lplus.fits"</span>, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       NULL, CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply median filter"</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="comment">/* Apply 5x5 median filter on data */</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     check_nomsg( sci_median5_image = sinfo_image_filter_median( sci_image,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       median5_kernel));</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     check_nomsg (sci_median5_data = cpl_image_get_data_float( sci_median5_image));</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute noise"</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">/* computes the noise image */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>       noise_data[i] = sqrt(sci_median5_data[i]*gain+</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         ron*ron)/ gain;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute S"</span>);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="comment">/* compute S image */</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       s_data[i] = laplacian_redu_data[i] / (2.0*noise_data[i]);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute S median"</span>);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="comment">/* compute S median image */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     check_nomsg( s_median_image = sinfo_image_filter_median( s_image,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       median5_kernel));</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     check_nomsg( s_median_data = cpl_image_get_data_float( s_median_image));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute s2"</span>);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="comment">/* compute s2 */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       s2_data[i] = s_data[i] -s_median_data[i];</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>        cpl_image_save( s2_image, <span class="stringliteral">"S2.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>      CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 3x3 filter"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="comment">/* Apply 3x3 median filter on data */</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     check_nomsg( sci_median3_image = sinfo_image_filter_median( sci_image,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>       median3_kernel));</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 7x7 filter"</span>);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="comment">/* Apply 7x7 median filter */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     check_nomsg( sci_median3_7_image = sinfo_image_filter_median( sci_median3_image,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>       median7_kernel));</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Apply 7x7 filter ok"</span>);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     check_nomsg ( sci_median3_data = cpl_image_get_data_float( sci_median3_image));</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     check_nomsg ( sci_median3_7_data = cpl_image_get_data_float(</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       sci_median3_7_image));</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute F"</span>);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="comment">/* compute F */</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       f_data[i] = sci_median3_data[i] -sci_median3_7_data[i];</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       <span class="keywordflow">if</span> (f_data[i] < 0.01){</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         f_data[i] = 0.01;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cpl_image_save( f_image, <span class="stringliteral">"F.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Compute R"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="comment">/* compute R */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">for</span>( i=0; i< nx*ny; i++){</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>       r_data[i] = laplacian_redu_data[i]/f_data[i];</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     cpl_image_save( r_image, <span class="stringliteral">"R.fits"</span>, CPL_BPP_IEEE_FLOAT, NULL,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="comment">/* Search for cosmics */</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Search for cosmic"</span>);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     new_crh = 0;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     median = cpl_vector_new(24);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     <span class="keywordflow">for</span>( j=1; j< ny-1; j++){</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       <span class="keywordtype">double</span> *data = NULL;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>       cpl_vector* med_vect = NULL;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>       <span class="keywordflow">for</span>( i=1; i< nx-1; i++){</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         <span class="keywordflow">if</span> ( (s2_data[i+j*nx] >= sigma_lim) &&</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>           (r_data[i+j*nx] >= f_lim)){</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>           <span class="keywordtype">int</span> li,lj,ui,uj;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>           cosmic_data[i+j*nx] = 1.0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>           new_crh++;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>           li = i-2;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>           lj = j-2;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>           ui = i+2;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>           uj = j+2;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>           m = 0;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>           <span class="keywordflow">if</span> (li < 0) li = 0;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>           <span class="keywordflow">if</span> (ui >= nx) ui = nx-1;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>           <span class="keywordflow">if</span> (lj < 0) lj = 0;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>           <span class="keywordflow">if</span> (uj >= ny) uj = ny-1;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>           <span class="keywordflow">for</span>( k=lj; k <= uj; k++){</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>             <span class="keywordflow">for</span>( l=li; l <= ui; l++){</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>               <span class="comment">//sinfo_msg("REGDEBUG k %d l %d m %d", k, l, m);</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>               <span class="keywordflow">if</span> ( k < j){</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                 cpl_vector_set(median, m, sci_data[l+k*nx]);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                 m++;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>               }</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>               <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( (k == j) && ( l < i)){</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                  cpl_vector_set(median, m, sci_data[l+k*nx]);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                 m++;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>               }</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>               <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( l!=i && k!=j && (s2_data[l+k*nx] < sigma_lim)</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                 && (r_data[l+k*nx] < f_lim)){</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                 cpl_vector_set(median, m, sci_data[l+k*nx]);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                 m++;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>               }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>             }</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>           }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>           check_nomsg( data = cpl_vector_get_data( median));</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>           <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"REGDEBUG i %d j %d m %d"</span>, i, j ,m);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>           check_nomsg( med_vect = cpl_vector_wrap( m, data));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>           check_nomsg( sci_data[i+j*nx] = cpl_vector_get_median( med_vect));</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>           cpl_vector_unwrap( med_vect);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>         }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>       }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     sinfoni_free_vector( &median ) ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     nb_crh += new_crh;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     frac = (double)nb_crh/(<span class="keywordtype">double</span>)(nx*ny) ;</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     sinfo_msg(<span class="stringliteral">"   new cosmics %d, total %d, frac %.4f [%d pixels]"</span>,new_crh,nb_crh,</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         frac, nx*ny);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     nbiter++;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     sinfo_free_image( &laplacian_image);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     sinfo_free_image( &sci_median3_7_image ) ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     sinfo_free_image( &sci_median3_image ) ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     sinfo_free_image( &s_median_image ) ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     sinfo_free_image( &sci_median5_image ) ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     FILE *debug = NULL;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     debug = fopen(<span class="stringliteral">"cosmic.log"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     <span class="keywordflow">for</span>( j=0; j< ny; j++){</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>       <span class="keywordflow">for</span>( i=0; i< nx; i++){</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>         <span class="keywordflow">if</span> ( cosmic_data[i+j*nx] == 1.0){</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>           fprintf(debug,<span class="stringliteral">"%.1f %.1f\n"</span>,i+1.0,j+1.0);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>         }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>       }</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     fclose(debug);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="comment">//check_nomsg( res_frame = cpl_frame_duplicate( sci_frame ) ) ;</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   <span class="comment">//sinfo_msg( "Saving Result Frame '%s'", res_name ) ;</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   <span class="comment">//check_nomsg( add_qc_crh( sci_pre, nb_crh, 1, instrument ) ) ;</span></div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   <span class="comment">//check_nomsg( res_frame = xsh_pre_save( sci_pre, res_name, 1 ) ) ;</span></div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   <span class="comment">//tag = cpl_frame_get_tag( in_sci_frame ) ;</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   <span class="comment">//check_nomsg( cpl_frame_set_tag( res_frame, tag ) ) ;</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   cleanup:</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   <span class="comment">//xsh_pre_free( &sci_pre);</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   <span class="comment">//xsh_localization_list_free( &loc_list ) ;</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     <span class="comment">/* free kernel */</span></div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     sinfoni_free_matrix( &laplacian_kernel);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     sinfoni_free_matrix( &median3_kernel);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     sinfoni_free_matrix( &median5_kernel);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     sinfoni_free_matrix( &median7_kernel);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="comment">/* free images */</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     sinfo_free_image( &laplacian_image);</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     sinfo_free_image( &laplacian_redu_image);</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     sinfo_free_image( &two_sub_sample);</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     sinfo_free_image( &sci_median5_image);</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     sinfo_free_image( &noise_image);</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     sinfo_free_image( &s_image);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     sinfo_free_image( &s_median_image);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     sinfo_free_image( &s2_image);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     sinfo_free_image( &sci_median3_image);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     sinfo_free_image( &sci_median3_7_image);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     sinfo_free_image( &f_image);</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     sinfo_free_image( &r_image);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="comment">/* free vector */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     sinfoni_free_vector( &median);</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="comment">/* free tab */</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="keywordflow">if</span>(cosmic_data!=NULL) cpl_free( cosmic_data);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordflow">return</span> res_image;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__remove__crh__single_8h_source.html b/html/sinfo__remove__crh__single_8h_source.html
index 6a5e209..2ea1f95 100644
--- a/html/sinfo__remove__crh__single_8h_source.html
+++ b/html/sinfo__remove__crh__single_8h_source.html
@@ -2,22 +2,53 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_remove_crh_single.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_remove_crh_single.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 cpl_image * sinfo_remove_crh_single( cpl_image * sci_image, 
-<a name="l00002"></a>00002                    <span class="keywordtype">double</span> frac_max,
-<a name="l00003"></a>00003                    <span class="keywordtype">double</span> sigma_lim,
-<a name="l00004"></a>00004                    <span class="keywordtype">double</span> f_lim,
-<a name="l00005"></a>00005                      <span class="keywordtype">int</span> max_iter,
-<a name="l00006"></a>00006                      <span class="keywordtype">double</span> gain,
-<a name="l00007"></a>00007                      <span class="keywordtype">double</span> ron);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_remove_crh_single.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> cpl_image * sinfo_remove_crh_single( cpl_image * sci_image, </div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>                    <span class="keywordtype">double</span> frac_max,</div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>                    <span class="keywordtype">double</span> sigma_lim,</div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>                    <span class="keywordtype">double</span> f_lim,</div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>                      <span class="keywordtype">int</span> max_iter,</div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>                      <span class="keywordtype">double</span> gain,</div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>                      <span class="keywordtype">double</span> ron);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__resampling_8c_source.html b/html/sinfo__resampling_8c_source.html
index db6391c..0b41c9c 100644
--- a/html/sinfo__resampling_8c_source.html
+++ b/html/sinfo__resampling_8c_source.html
@@ -2,288 +2,319 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_resampling.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_resampling.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    resampling.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    Jan 04, 1996</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    resampling routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="comment">/*</span>
-<a name="l00029"></a>00029 <span class="comment">    $Id: sinfo_resampling.c,v 1.6 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00030"></a>00030 <span class="comment">    $Author: amodigli $</span>
-<a name="l00031"></a>00031 <span class="comment">    $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00032"></a>00032 <span class="comment">    $Revision: 1.6 $</span>
-<a name="l00033"></a>00033 <span class="comment"> */</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                                  Includes</span>
-<a name="l00040"></a>00040 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <math.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00045"></a>00045 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                              Private functions</span>
-<a name="l00047"></a>00047 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keywordtype">void</span> reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn) ;
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">double</span> * sinfo_generate_tanh_kernel(<span class="keywordtype">double</span> steep);
-<a name="l00050"></a>00050 
-<a name="l00060"></a>00060 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                              Function codes</span>
-<a name="l00062"></a>00062 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00088"></a>00088 <span class="keywordtype">double</span>   *
-<a name="l00089"></a>00089 sinfo_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type)
-<a name="l00090"></a>00090 {
-<a name="l00091"></a>00091     <span class="keywordtype">double</span>  *    tab ;
-<a name="l00092"></a>00092     <span class="keywordtype">int</span>         i ;
-<a name="l00093"></a>00093     <span class="keywordtype">double</span>      x ;
-<a name="l00094"></a>00094     <span class="keywordtype">double</span>        alpha ;
-<a name="l00095"></a>00095     <span class="keywordtype">double</span>        inv_norm ;
-<a name="l00096"></a>00096     <span class="keywordtype">int</span>         samples = KERNEL_SAMPLES ;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     <span class="keywordflow">if</span> (kernel_type==NULL) {
-<a name="l00099"></a>00099         tab = sinfo_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;
-<a name="l00100"></a>00100     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"default"</span>)) {
-<a name="l00101"></a>00101         tab = sinfo_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;
-<a name="l00102"></a>00102     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc"</span>)) {
-<a name="l00103"></a>00103         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00104"></a>00104         tab[0] = 1.0 ;
-<a name="l00105"></a>00105         tab[samples-1] = 0.0 ;
-<a name="l00106"></a>00106         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {
-<a name="l00107"></a>00107             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;
-<a name="l00108"></a>00108             tab[i] = sinfo_sinc(x) ;
-<a name="l00109"></a>00109         }
-<a name="l00110"></a>00110     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc2"</span>)) {
-<a name="l00111"></a>00111         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00112"></a>00112         tab[0] = 1.0 ;
-<a name="l00113"></a>00113         tab[samples-1] = 0.0 ;
-<a name="l00114"></a>00114         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {
-<a name="l00115"></a>00115             x = 2.0 * (double)i/(<span class="keywordtype">double</span>)(samples-1) ;
-<a name="l00116"></a>00116             tab[i] = sinfo_sinc(x) ;
-<a name="l00117"></a>00117             tab[i] *= tab[i] ;
-<a name="l00118"></a>00118         }
-<a name="l00119"></a>00119     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"lanczos"</span>)) {
-<a name="l00120"></a>00120         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00121"></a>00121         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00122"></a>00122             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;
-<a name="l00123"></a>00123             <span class="keywordflow">if</span> (fabs(x)<2) {
-<a name="l00124"></a>00124                 tab[i] = sinfo_sinc(x) * sinfo_sinc(x/2) ;
-<a name="l00125"></a>00125             } <span class="keywordflow">else</span> {
-<a name="l00126"></a>00126                 tab[i] = 0.00 ;
-<a name="l00127"></a>00127             }
-<a name="l00128"></a>00128         }
-<a name="l00129"></a>00129     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hamming"</span>)) {
-<a name="l00130"></a>00130         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00131"></a>00131         alpha = 0.54 ;
-<a name="l00132"></a>00132         inv_norm  = 1.00 / (double)(samples - 1) ;
-<a name="l00133"></a>00133         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00134"></a>00134             x = (double)i ;
-<a name="l00135"></a>00135             <span class="keywordflow">if</span> (i<(samples-1)/2) {
-<a name="l00136"></a>00136                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;
-<a name="l00137"></a>00137             } <span class="keywordflow">else</span> {
-<a name="l00138"></a>00138                 tab[i] = 0.0 ;
-<a name="l00139"></a>00139             }
-<a name="l00140"></a>00140         }
-<a name="l00141"></a>00141     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hann"</span>)) {
-<a name="l00142"></a>00142         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00143"></a>00143         alpha = 0.50 ;
-<a name="l00144"></a>00144         inv_norm  = 1.00 / (double)(samples - 1) ;
-<a name="l00145"></a>00145         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00146"></a>00146             x = (double)i ;
-<a name="l00147"></a>00147             <span class="keywordflow">if</span> (i<(samples-1)/2) {
-<a name="l00148"></a>00148                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;
-<a name="l00149"></a>00149             } <span class="keywordflow">else</span> {
-<a name="l00150"></a>00150                 tab[i] = 0.0 ;
-<a name="l00151"></a>00151             }
-<a name="l00152"></a>00152         }
-<a name="l00153"></a>00153     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"tanh"</span>)) {
-<a name="l00154"></a>00154         tab = sinfo_generate_tanh_kernel(TANH_STEEPNESS) ;
-<a name="l00155"></a>00155     } <span class="keywordflow">else</span> {
-<a name="l00156"></a>00156         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized kernel type [%s]: aborting generation"</span>,
-<a name="l00157"></a>00157                 kernel_type) ;
-<a name="l00158"></a>00158         <span class="keywordflow">return</span> NULL ;
-<a name="l00159"></a>00159     }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="keywordflow">return</span> tab ;
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 
-<a name="l00175"></a>00175 <span class="keywordtype">double</span>
-<a name="l00176"></a>00176 sinfo_sinc(<span class="keywordtype">double</span> x)
-<a name="l00177"></a>00177 {
-<a name="l00178"></a>00178     <span class="keywordflow">if</span> (fabs(x)<1e-4)
-<a name="l00179"></a>00179         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)1.00 ;
-<a name="l00180"></a>00180     <span class="keywordflow">else</span>
-<a name="l00181"></a>00181         <span class="keywordflow">return</span> ((sin(x * (<span class="keywordtype">double</span>)PI_NUMB)) / (x * (<span class="keywordtype">double</span>)PI_NUMB)) ;
-<a name="l00182"></a>00182 }
-<a name="l00183"></a>00183 
-<a name="l00205"></a>00205 <span class="preprocessor">#define hk_gen(x,s) (((tanh(s*(x+0.5))+1)/2)*((tanh(s*(-x+0.5))+1)/2))</span>
-<a name="l00206"></a>00206 <span class="preprocessor"></span>
-<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">double</span> * 
-<a name="l00208"></a>00208 sinfo_generate_tanh_kernel(<span class="keywordtype">double</span> steep)
-<a name="l00209"></a>00209 {
-<a name="l00210"></a>00210     <span class="keywordtype">double</span>  *   kernel ;
-<a name="l00211"></a>00211     <span class="keywordtype">double</span>  *   x ;
-<a name="l00212"></a>00212     <span class="keywordtype">double</span>      width ;
-<a name="l00213"></a>00213     <span class="keywordtype">double</span>      inv_np ;
-<a name="l00214"></a>00214     <span class="keywordtype">double</span>      ind ;
-<a name="l00215"></a>00215     <span class="keywordtype">int</span>         i ;
-<a name="l00216"></a>00216     <span class="keywordtype">int</span>         np ;
-<a name="l00217"></a>00217     <span class="keywordtype">int</span>         samples ;
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     width   = (double)TABSPERPIX / 2.0 ; 
-<a name="l00220"></a>00220     samples = KERNEL_SAMPLES ;
-<a name="l00221"></a>00221     np      = 32768 ; <span class="comment">/* Hardcoded: should never be changed */</span>
-<a name="l00222"></a>00222     inv_np  = 1.00 / (double)np ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="comment">/*</span>
-<a name="l00225"></a>00225 <span class="comment">     * Generate the kernel expression in Fourier space</span>
-<a name="l00226"></a>00226 <span class="comment">     * with a correct frequency ordering to allow standard FT</span>
-<a name="l00227"></a>00227 <span class="comment">     */</span>
-<a name="l00228"></a>00228     x = cpl_malloc((2*np+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00229"></a>00229     <span class="keywordflow">for</span> (i=0 ; i<np/2 ; i++) {
-<a name="l00230"></a>00230         ind      = (double)i * 2.0 * width * inv_np ;
-<a name="l00231"></a>00231         x[2*i]   = hk_gen(ind, steep) ;
-<a name="l00232"></a>00232         x[2*i+1] = 0.00 ;
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234     <span class="keywordflow">for</span> (i=np/2 ; i<np ; i++) {
-<a name="l00235"></a>00235         ind      = (double)(i-np) * 2.0 * width * inv_np ;
-<a name="l00236"></a>00236         x[2*i]   = hk_gen(ind, steep) ;
-<a name="l00237"></a>00237         x[2*i+1] = 0.00 ;
-<a name="l00238"></a>00238     }
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240     <span class="comment">/* </span>
-<a name="l00241"></a>00241 <span class="comment">     * Reverse Fourier to come back to image space</span>
-<a name="l00242"></a>00242 <span class="comment">     */</span>
-<a name="l00243"></a>00243     reverse_tanh_kernel(x, np) ;
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245     <span class="comment">/*</span>
-<a name="l00246"></a>00246 <span class="comment">     * Allocate and fill in returned array</span>
-<a name="l00247"></a>00247 <span class="comment">     */</span>
-<a name="l00248"></a>00248     kernel = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00249"></a>00249     <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {
-<a name="l00250"></a>00250         kernel[i] = 2.0 * width * x[2*i] * inv_np ;
-<a name="l00251"></a>00251     }
-<a name="l00252"></a>00252     cpl_free(x) ;
-<a name="l00253"></a>00253     <span class="keywordflow">return</span> kernel ;
-<a name="l00254"></a>00254 }
-<a name="l00255"></a>00255 
-<a name="l00268"></a>00268 <span class="preprocessor">#define KERNEL_SW(a,b) tempr=(a);(a)=(b);(b)=tempr</span>
-<a name="l00269"></a>00269 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00270"></a>00270 reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn)
-<a name="l00271"></a>00271 {
-<a name="l00272"></a>00272     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   n,
-<a name="l00273"></a>00273                     mmax,
-<a name="l00274"></a>00274                     m,
-<a name="l00275"></a>00275                     i, j,
-<a name="l00276"></a>00276                     istep ;
-<a name="l00277"></a>00277     <span class="keywordtype">double</span>  wtemp,
-<a name="l00278"></a>00278             wr,
-<a name="l00279"></a>00279             wpr,
-<a name="l00280"></a>00280             wpi,
-<a name="l00281"></a>00281             wi,
-<a name="l00282"></a>00282             theta;
-<a name="l00283"></a>00283     <span class="keywordtype">double</span>  tempr,
-<a name="l00284"></a>00284             tempi;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     n = (<span class="keywordtype">unsigned</span> long)nn << 1;
-<a name="l00287"></a>00287     j = 1;
-<a name="l00288"></a>00288     <span class="keywordflow">for</span> (i=1 ; i<n ; i+=2) {
-<a name="l00289"></a>00289         <span class="keywordflow">if</span> (j > i) {
-<a name="l00290"></a>00290             KERNEL_SW(data[j-1],data[i-1]);
-<a name="l00291"></a>00291             KERNEL_SW(data[j],data[i]);
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293         m = n >> 1;
-<a name="l00294"></a>00294         <span class="keywordflow">while</span> (m>=2 && j>m) {
-<a name="l00295"></a>00295             j -= m;
-<a name="l00296"></a>00296             m >>= 1;
-<a name="l00297"></a>00297         }
-<a name="l00298"></a>00298         j += m;
-<a name="l00299"></a>00299     }
-<a name="l00300"></a>00300     mmax = 2;
-<a name="l00301"></a>00301     <span class="keywordflow">while</span> (n > mmax) {
-<a name="l00302"></a>00302         istep = mmax << 1;
-<a name="l00303"></a>00303         theta = 2 * PI_NUMB / mmax;
-<a name="l00304"></a>00304         wtemp = sin(0.5 * theta);
-<a name="l00305"></a>00305         wpr = -2.0 * wtemp * wtemp;
-<a name="l00306"></a>00306         wpi = sin(theta);
-<a name="l00307"></a>00307         wr  = 1.0;
-<a name="l00308"></a>00308         wi  = 0.0;
-<a name="l00309"></a>00309         <span class="keywordflow">for</span> (m=1 ; m<mmax ; m+=2) {
-<a name="l00310"></a>00310             <span class="keywordflow">for</span> (i=m ; i<=n ; i+=istep) {
-<a name="l00311"></a>00311                 j = i + mmax;
-<a name="l00312"></a>00312                 tempr = wr * data[j-1] - wi * data[j];
-<a name="l00313"></a>00313                 tempi = wr * data[j]   + wi * data[j-1];
-<a name="l00314"></a>00314                 data[j-1] = data[i-1] - tempr;
-<a name="l00315"></a>00315                 data[j]   = data[i]   - tempi;
-<a name="l00316"></a>00316                 data[i-1] += tempr;
-<a name="l00317"></a>00317                 data[i]   += tempi;
-<a name="l00318"></a>00318             }
-<a name="l00319"></a>00319             wr = (wtemp = wr) * wpr - wi * wpi + wr;
-<a name="l00320"></a>00320             wi = wi * wpr + wtemp * wpi + wi;
-<a name="l00321"></a>00321         }
-<a name="l00322"></a>00322         mmax = istep;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324 }
-<a name="l00325"></a>00325 <span class="preprocessor">#undef KERNEL_SW</span>
-<a name="l00326"></a>00326 <span class="preprocessor"></span>
-<a name="l00364"></a>00364 <span class="keywordtype">double</span> *
-<a name="l00365"></a>00365 sinfo_invert_linear_transform(<span class="keywordtype">double</span> *trans)
-<a name="l00366"></a>00366 {
-<a name="l00367"></a>00367     <span class="keywordtype">double</span>   *    i_trans ;
-<a name="l00368"></a>00368     <span class="keywordtype">double</span>       det ;
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370     <span class="keywordflow">if</span> (trans==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00371"></a>00371     det = (trans[0] * trans[4]) - (trans[1] * trans[3]) ;
-<a name="l00372"></a>00372     <span class="keywordflow">if</span> (fabs(det) < 1e-6) {
-<a name="l00373"></a>00373         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NULL determinant: cannot sinfo_invert transform"</span>) ;
-<a name="l00374"></a>00374         <span class="keywordflow">return</span> NULL ;
-<a name="l00375"></a>00375     }
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377     i_trans = cpl_calloc(6, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     i_trans[0] =  trans[4] / det ; 
-<a name="l00380"></a>00380     i_trans[1] = -trans[1] / det ;
-<a name="l00381"></a>00381     i_trans[2] = ((trans[1] * trans[5]) - (trans[2] * trans[4])) / det ;
-<a name="l00382"></a>00382     i_trans[3] = -trans[3] / det ;
-<a name="l00383"></a>00383     i_trans[4] =  trans[0] / det ;
-<a name="l00384"></a>00384     i_trans[5] = ((trans[2] * trans[3]) - (trans[0] * trans[5])) / det ;
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386     <span class="keywordflow">return</span> i_trans ;
-<a name="l00387"></a>00387 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_resampling.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    resampling.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    Jan 04, 1996</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    resampling routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">    $Id: sinfo_resampling.c,v 1.6 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">    $Author: amodigli $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">    $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">    $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                              Private functions</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keywordtype">void</span> reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn) ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">double</span> * sinfo_generate_tanh_kernel(<span class="keywordtype">double</span> steep);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keywordtype">double</span>   *</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">double</span>  *    tab ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">int</span>         i ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keywordtype">double</span>      x ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">double</span>        alpha ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">double</span>        inv_norm ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">int</span>         samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordflow">if</span> (kernel_type==NULL) {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         tab = sinfo_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"default"</span>)) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         tab = sinfo_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc"</span>)) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         tab[0] = 1.0 ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         tab[samples-1] = 0.0 ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>             tab[i] = sinfo_sinc(x) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"sinc2"</span>)) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         tab[0] = 1.0 ;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         tab[samples-1] = 0.0 ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         <span class="keywordflow">for</span> (i=1 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>             x = 2.0 * (double)i/(<span class="keywordtype">double</span>)(samples-1) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>             tab[i] = sinfo_sinc(x) ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>             tab[i] *= tab[i] ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"lanczos"</span>)) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>             x = (double)KERNEL_WIDTH * (<span class="keywordtype">double</span>)i/(double)(samples-1) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>             <span class="keywordflow">if</span> (fabs(x)<2) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                 tab[i] = sinfo_sinc(x) * sinfo_sinc(x/2) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                 tab[i] = 0.00 ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>             }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>         }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hamming"</span>)) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         alpha = 0.54 ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         inv_norm  = 1.00 / (double)(samples - 1) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>             x = (double)i ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             <span class="keywordflow">if</span> (i<(samples-1)/2) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                 tab[i] = 0.0 ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>             }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"hann"</span>)) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         tab = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>         alpha = 0.50 ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         inv_norm  = 1.00 / (double)(samples - 1) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>             x = (double)i ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>             <span class="keywordflow">if</span> (i<(samples-1)/2) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                 tab[i] = alpha + (1-alpha) * cos(2.0*PI_NUMB*x*inv_norm) ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                 tab[i] = 0.0 ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>             }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(kernel_type, <span class="stringliteral">"tanh"</span>)) {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>         tab = sinfo_generate_tanh_kernel(TANH_STEEPNESS) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrecognized kernel type [%s]: aborting generation"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                 kernel_type) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">return</span> tab ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> sinfo_sinc(<span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">if</span> (fabs(x)<1e-4)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>         <span class="keywordflow">return</span> (<span class="keywordtype">double</span>)1.00 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         <span class="keywordflow">return</span> ((sin(x * (<span class="keywordtype">double</span>)PI_NUMB)) / (x * (<span class="keywordtype">double</span>)PI_NUMB)) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="preprocessor">#define hk_gen(x,s) (((tanh(s*(x+0.5))+1)/2)*((tanh(s*(-x+0.5))+1)/2))</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keyword">static</span> <span class="keywordtype">double</span> * </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> sinfo_generate_tanh_kernel(<span class="keywordtype">double</span> steep)</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordtype">double</span>  *   kernel ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordtype">double</span>  *   x ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordtype">double</span>      width ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordtype">double</span>      inv_np ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordtype">double</span>      ind ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordtype">int</span>         i ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordtype">int</span>         np ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordtype">int</span>         samples ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     width   = (double)TABSPERPIX / 2.0 ; </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     np      = 32768 ; <span class="comment">/* Hardcoded: should never be changed */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     inv_np  = 1.00 / (double)np ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">     * Generate the kernel expression in Fourier space</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="comment">     * with a correct frequency ordering to allow standard FT</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     x = cpl_malloc((2*np+1)*<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">for</span> (i=0 ; i<np/2 ; i++) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         ind      = (double)i * 2.0 * width * inv_np ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         x[2*i]   = hk_gen(ind, steep) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         x[2*i+1] = 0.00 ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">for</span> (i=np/2 ; i<np ; i++) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         ind      = (double)(i-np) * 2.0 * width * inv_np ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         x[2*i]   = hk_gen(ind, steep) ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         x[2*i+1] = 0.00 ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     }</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">     * Reverse Fourier to come back to image space</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     reverse_tanh_kernel(x, np) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">     * Allocate and fill in returned array</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     kernel = cpl_malloc(samples * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">for</span> (i=0 ; i<samples ; i++) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         kernel[i] = 2.0 * width * x[2*i] * inv_np ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_free(x) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">return</span> kernel ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> }</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="preprocessor">#define KERNEL_SW(a,b) tempr=(a);(a)=(b);(b)=tempr</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> reverse_tanh_kernel(<span class="keywordtype">double</span> * data, <span class="keywordtype">int</span> nn)</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>   n,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                     mmax,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                     m,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                     i, j,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                     istep ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordtype">double</span>  wtemp,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>             wr,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>             wpr,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>             wpi,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>             wi,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>             theta;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordtype">double</span>  tempr,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             tempi;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     n = (<span class="keywordtype">unsigned</span> long)nn << 1;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     j = 1;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">for</span> (i=1 ; i<n ; i+=2) {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         <span class="keywordflow">if</span> (j > i) {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>             KERNEL_SW(data[j-1],data[i-1]);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             KERNEL_SW(data[j],data[i]);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         m = n >> 1;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         <span class="keywordflow">while</span> (m>=2 && j>m) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>             j -= m;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>             m >>= 1;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         j += m;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     mmax = 2;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordflow">while</span> (n > mmax) {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         istep = mmax << 1;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         theta = 2 * PI_NUMB / mmax;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         wtemp = sin(0.5 * theta);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         wpr = -2.0 * wtemp * wtemp;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         wpi = sin(theta);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         wr  = 1.0;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         wi  = 0.0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         <span class="keywordflow">for</span> (m=1 ; m<mmax ; m+=2) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             <span class="keywordflow">for</span> (i=m ; i<=n ; i+=istep) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                 j = i + mmax;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 tempr = wr * data[j-1] - wi * data[j];</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                 tempi = wr * data[j]   + wi * data[j-1];</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                 data[j-1] = data[i-1] - tempr;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                 data[j]   = data[i]   - tempi;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                 data[i-1] += tempr;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                 data[i]   += tempi;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>             }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>             wr = (wtemp = wr) * wpr - wi * wpi + wr;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>             wi = wi * wpr + wtemp * wpi + wi;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         mmax = istep;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> }</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="preprocessor">#undef KERNEL_SW</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="keywordtype">double</span> *</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> sinfo_invert_linear_transform(<span class="keywordtype">double</span> *trans)</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> {</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordtype">double</span>   *    i_trans ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     <span class="keywordtype">double</span>       det ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordflow">if</span> (trans==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     det = (trans[0] * trans[4]) - (trans[1] * trans[3]) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="keywordflow">if</span> (fabs(det) < 1e-6) {</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NULL determinant: cannot sinfo_invert transform"</span>) ;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     i_trans = cpl_calloc(6, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     i_trans[0] =  trans[4] / det ; </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     i_trans[1] = -trans[1] / det ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     i_trans[2] = ((trans[1] * trans[5]) - (trans[2] * trans[4])) / det ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     i_trans[3] = -trans[3] / det ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     i_trans[4] =  trans[0] / det ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     i_trans[5] = ((trans[2] * trans[3]) - (trans[0] * trans[5])) / det ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     <span class="keywordflow">return</span> i_trans ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__resampling_8h_source.html b/html/sinfo__resampling_8h_source.html
index 0c379ed..8ccc3cc 100644
--- a/html/sinfo__resampling_8h_source.html
+++ b/html/sinfo__resampling_8h_source.html
@@ -2,100 +2,131 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_resampling.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_resampling.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_resampling.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Nicolas Devillard</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    Jan 04, 1996</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    resampling routines</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="comment">/*</span>
-<a name="l00029"></a>00029 <span class="comment"></span>
-<a name="l00030"></a>00030 <span class="comment"> $Id: sinfo_resampling.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span>
-<a name="l00031"></a>00031 <span class="comment"> $Author: amodigli $</span>
-<a name="l00032"></a>00032 <span class="comment"> $Date: 2007/06/06 07:10:45 $</span>
-<a name="l00033"></a>00033 <span class="comment"> $Revision: 1.4 $</span>
-<a name="l00034"></a>00034 <span class="comment"></span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#ifndef SINFO_RESAMPLING_H</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RESAMPLING_H</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">                                  Includes</span>
-<a name="l00042"></a>00042 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                                  Defines</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define TRANSFO_AFFINE          0</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_DEG2            1</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_HOMOGRAPHIC     2</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00053"></a>00053 <span class="comment">/* Number of pixels set to 0 by the shift resampling */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define    SHIFT_REJECT_L            2</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_R            2</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_T            2</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_B            2</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="comment">/*</span>
-<a name="l00060"></a>00060 <span class="comment"> * Kernel definition in terms of sampling</span>
-<a name="l00061"></a>00061 <span class="comment"> */</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/* Number of tabulations in kernel  */</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define TABSPERPIX      (1000)</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_WIDTH    (2.0)</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_SAMPLES  (1+(int)(TABSPERPIX * KERNEL_WIDTH))</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#define TANH_STEEPNESS    (5.0)</span>
-<a name="l00070"></a>00070 <span class="preprocessor"></span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                         Function ANSI C prototypes</span>
-<a name="l00074"></a>00074 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 
-<a name="l00100"></a>00100 <span class="keywordtype">double</span>   *
-<a name="l00101"></a>00101 sinfo_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type) ;
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 
-<a name="l00115"></a>00115 <span class="keywordtype">double</span>
-<a name="l00116"></a>00116 sinfo_sinc(<span class="keywordtype">double</span> x) ;
-<a name="l00117"></a>00117 
-<a name="l00155"></a>00155 <span class="keywordtype">double</span> *
-<a name="l00156"></a>00156 sinfo_invert_linear_transform(<span class="keywordtype">double</span> *trans) ;
-<a name="l00157"></a>00157 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_resampling.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_resampling.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Nicolas Devillard</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    Jan 04, 1996</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    resampling routines</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> $Id: sinfo_resampling.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> $Author: amodigli $</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> $Date: 2007/06/06 07:10:45 $</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#ifndef SINFO_RESAMPLING_H</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RESAMPLING_H</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                  Includes</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                  Defines</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#define TRANSFO_AFFINE          0</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_DEG2            1</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define TRANSFO_HOMOGRAPHIC     2</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* Number of pixels set to 0 by the shift resampling */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define    SHIFT_REJECT_L            2</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_R            2</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_T            2</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define    SHIFT_REJECT_B            2</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * Kernel definition in terms of sampling</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/* Number of tabulations in kernel  */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define TABSPERPIX      (1000)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_WIDTH    (2.0)</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define KERNEL_SAMPLES  (1+(int)(TABSPERPIX * KERNEL_WIDTH))</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#define TANH_STEEPNESS    (5.0)</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                         Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">double</span>   *</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> sinfo_generate_interpolation_kernel(<span class="keyword">const</span> <span class="keywordtype">char</span> * kernel_type) ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> sinfo_sinc(<span class="keywordtype">double</span> x) ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keywordtype">double</span> *</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> sinfo_invert_linear_transform(<span class="keywordtype">double</span> *trans) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__shift__images_8c_source.html b/html/sinfo__shift__images_8c_source.html
index 2ddbd3a..33d3571 100644
--- a/html/sinfo__shift__images_8c_source.html
+++ b/html/sinfo__shift__images_8c_source.html
@@ -2,748 +2,779 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_shift_images.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_shift_images.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  05/03/03  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_shift_images.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        some procedures to shift images in spectral direction</span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*   #include "sinfo_shift_images.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*</span>
-<a name="l00037"></a>00037 <span class="comment">*   1) double sinfo_new_determine_shift_by_correlation ( cpl_image * refImage, </span>
-<a name="l00038"></a>00038 <span class="comment">*                                           cpl_image * shiftedImage )</span>
-<a name="l00039"></a>00039 <span class="comment">*   2) cpl_image * sinfo_new_shift_image_in_spec ( cpl_image * shiftedImage, </span>
-<a name="l00040"></a>00040 <span class="comment">                                                   double shift, </span>
-<a name="l00041"></a>00041 <span class="comment">                                                   double * sub_shift )</span>
-<a name="l00042"></a>00042 <span class="comment">*   3) cpl_image * </span>
-<a name="l00043"></a>00043 <span class="comment">       sinfo_new_fine_shift_image_in_spec_poly(cpl_image * shiftedImage, </span>
-<a name="l00044"></a>00044 <span class="comment">                                                           double sub_shift, </span>
-<a name="l00045"></a>00045 <span class="comment">                                                           int order )</span>
-<a name="l00046"></a>00046 <span class="comment">*   4) cpl_image * </span>
-<a name="l00047"></a>00047 <span class="comment">       sinfo_new_fine_shift_image_in_spec_cubicspline(cpl_image * shiftedImage, </span>
-<a name="l00048"></a>00048 <span class="comment">                                                      double sub_shift )</span>
-<a name="l00049"></a>00049 <span class="comment">*   5) cpl_imagelist * sinfo_align_cube_to_reference(cpl_imagelist * cube, </span>
-<a name="l00050"></a>00050 <span class="comment">*                                       cpl_image * refIm,</span>
-<a name="l00051"></a>00051 <span class="comment">*                                       int order,</span>
-<a name="l00052"></a>00052 <span class="comment">*                                       int shift_indicator )</span>
-<a name="l00053"></a>00053 <span class="comment">*</span>
-<a name="l00054"></a>00054 <span class="comment">*</span>
-<a name="l00055"></a>00055 <span class="comment">*   DESCRIPTION</span>
-<a name="l00056"></a>00056 <span class="comment">*</span>
-<a name="l00057"></a>00057 <span class="comment">*   1) determines the sub-pixel shift of to emission line</span>
-<a name="l00058"></a>00058 <span class="comment">*      frames by cross sinfo_correlation and fitting the sinfo_correlation</span>
-<a name="l00059"></a>00059 <span class="comment">*      function by a Gaussian</span>
-<a name="l00060"></a>00060 <span class="comment">*   2) shifts an image by a given amount to integer pixel accuracy</span>
-<a name="l00061"></a>00061 <span class="comment">*   3) shifts an image by a given amount to sub-pixel accuracy</span>
-<a name="l00062"></a>00062 <span class="comment">*   4) shifts an image by a given amount to sub-pixel accuracy</span>
-<a name="l00063"></a>00063 <span class="comment">*   5) shifts images stacked in a cube by a given amount to sub-pixel accuracy</span>
-<a name="l00064"></a>00064 <span class="comment">*</span>
-<a name="l00065"></a>00065 <span class="comment">*   FILES</span>
-<a name="l00066"></a>00066 <span class="comment">*</span>
-<a name="l00067"></a>00067 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00068"></a>00068 <span class="comment">*</span>
-<a name="l00069"></a>00069 <span class="comment">*   RETURN VALUES</span>
-<a name="l00070"></a>00070 <span class="comment">*</span>
-<a name="l00071"></a>00071 <span class="comment">*   CAUTIONS</span>
-<a name="l00072"></a>00072 <span class="comment">*</span>
-<a name="l00073"></a>00073 <span class="comment">*   EXAMPLES</span>
-<a name="l00074"></a>00074 <span class="comment">*</span>
-<a name="l00075"></a>00075 <span class="comment">*   SEE ALSO</span>
-<a name="l00076"></a>00076 <span class="comment">*</span>
-<a name="l00077"></a>00077 <span class="comment">*   BUGS</span>
-<a name="l00078"></a>00078 <span class="comment">*</span>
-<a name="l00079"></a>00079 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment">*/</span>
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="comment">/*</span>
-<a name="l00083"></a>00083 <span class="comment"> * System Headers</span>
-<a name="l00084"></a>00084 <span class="comment"> */</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00088"></a>00088 <span class="preprocessor">#endif</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00090"></a>00090 <span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00092"></a>00092 <span class="comment"> * Local Headers</span>
-<a name="l00093"></a>00093 <span class="comment"> */</span>
-<a name="l00094"></a>00094 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00095"></a>00095 <span class="preprocessor">#include "sinfo_shift_images.h"</span>
-<a name="l00096"></a>00096 <span class="preprocessor">#include "sinfo_new_resampling.h"</span>
-<a name="l00097"></a>00097 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 <span class="keyword">static</span> <span class="keywordtype">int</span> filecounter ;
-<a name="l00108"></a>00108 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00109"></a>00109 <span class="comment"> *                            Function codes</span>
-<a name="l00110"></a>00110 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 
-<a name="l00123"></a>00123 <span class="keywordtype">double</span> sinfo_new_determine_shift_by_correlation ( cpl_image * refImage, 
-<a name="l00124"></a>00124                                      cpl_image * shiftedImage )
-<a name="l00125"></a>00125 {
-<a name="l00126"></a>00126     <span class="keywordtype">int</span>          col, row ;
-<a name="l00127"></a>00127     <span class="keywordtype">int</span>           i, j, k, width;
-<a name="l00128"></a>00128     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> convsize ;
-<a name="l00129"></a>00129     <span class="keywordtype">float</span>       * lineref ;
-<a name="l00130"></a>00130     <span class="keywordtype">float</span>       * line ;
-<a name="l00131"></a>00131     <span class="keywordtype">float</span>       * offset2 ;
-<a name="l00132"></a>00132     <span class="keywordtype">double</span>      * result ;
-<a name="l00133"></a>00133     <span class="keywordtype">double</span>       mean_offset2 ;
-<a name="l00134"></a>00134     <span class="comment">/*int          magFactor ;*/</span>
-<a name="l00135"></a>00135     <span class="keywordtype">int</span>          maxlag ;
-<a name="l00136"></a>00136     <span class="keywordtype">float</span>      * refres ;
-<a name="l00137"></a>00137     <span class="keywordtype">float</span>      * myres ;
-<a name="l00138"></a>00138     <span class="keywordtype">int</span>          halfsearch ;
-<a name="l00139"></a>00139     <span class="keywordtype">int</span>          delta ;
-<a name="l00140"></a>00140     <span class="keywordtype">double</span>       xcorr_max ;
-<a name="l00141"></a>00141     <span class="comment">/*float        arg ;*/</span>
-<a name="l00142"></a>00142     <span class="keywordtype">float</span>      par[MAXPAR] ;
-<a name="l00143"></a>00143     <span class="keywordtype">float</span>      derv_par[MAXPAR] ;
-<a name="l00144"></a>00144     <span class="keywordtype">int</span>        iters, xdim, ndat ;
-<a name="l00145"></a>00145     <span class="keywordtype">int</span>        numpar, its ;
-<a name="l00146"></a>00146     <span class="keywordtype">int</span>        * mpar ;
-<a name="l00147"></a>00147     <span class="keywordtype">float</span>      tol, lab ;
-<a name="l00148"></a>00148     <span class="keywordtype">float</span>      * xdat, * wdat ;
-<a name="l00149"></a>00149     Vector     * peak;
-<a name="l00150"></a>00150     <span class="keywordtype">char</span>       filename[FILE_NAME_SZ] ;
-<a name="l00151"></a>00151     FILE       * fp ;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     <span class="keywordtype">int</span> rlx=0;
-<a name="l00154"></a>00154     <span class="keywordtype">int</span> rly=0;
-<a name="l00155"></a>00155     <span class="keywordtype">int</span> slx=0;
-<a name="l00156"></a>00156     <span class="keywordtype">int</span> sly=0;
-<a name="l00157"></a>00157     <span class="keywordtype">float</span>* prdata=NULL;
-<a name="l00158"></a>00158     <span class="keywordtype">float</span>* psdata=NULL;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="keywordflow">if</span> ( NULL == refImage || NULL == shiftedImage )
-<a name="l00161"></a>00161     {
-<a name="l00162"></a>00162         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image not given!"</span>) ;
-<a name="l00163"></a>00163         <span class="keywordflow">return</span> ZERO ;
-<a name="l00164"></a>00164     }
-<a name="l00165"></a>00165     rlx=cpl_image_get_size_x(refImage);
-<a name="l00166"></a>00166     rly=cpl_image_get_size_x(refImage);
-<a name="l00167"></a>00167     prdata=cpl_image_get_data_float(refImage);
-<a name="l00168"></a>00168     slx=cpl_image_get_size_x(shiftedImage);
-<a name="l00169"></a>00169     sly=cpl_image_get_size_x(shiftedImage);
-<a name="l00170"></a>00170     psdata=cpl_image_get_data_float(shiftedImage);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="keywordflow">if</span> ( rlx != slx || rly != sly )
-<a name="l00173"></a>00173     {
-<a name="l00174"></a>00174         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image size not compatible!"</span>) ;
-<a name="l00175"></a>00175         <span class="keywordflow">return</span> ZERO ;
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177     snprintf(filename, MAX_NAME_SIZE-1,<span class="stringliteral">"offset%d.list"</span>, filecounter) ;
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     fp = fopen(filename, <span class="stringliteral">"w"</span>) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     convsize = sly;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     lineref = (<span class="keywordtype">float</span>*) cpl_calloc(convsize, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;
-<a name="l00184"></a>00184     line = (<span class="keywordtype">float</span>*) cpl_calloc(convsize, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     offset2 = (<span class="keywordtype">float</span>*) cpl_calloc(slx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     <span class="keywordflow">for</span> ( col = 0 ; col < slx ; col++ )
-<a name="l00189"></a>00189     {
-<a name="l00190"></a>00190         <span class="comment">/* initialize arrays */</span>
-<a name="l00191"></a>00191         <span class="keywordflow">for</span> ( row = 0 ;  row < (int) convsize ; row++ )
-<a name="l00192"></a>00192         {
-<a name="l00193"></a>00193             lineref[row] = 0. ;
-<a name="l00194"></a>00194             line[row] = 0. ;
-<a name="l00195"></a>00195         }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197         <span class="comment">/* magnify spectral sinfo_vector by magFactor */</span>
-<a name="l00198"></a>00198         <span class="keywordflow">for</span> ( row = 0 ; row < (sly) ; row++ )
-<a name="l00199"></a>00199         {
-<a name="l00200"></a>00200       lineref[row] = prdata[col+row*slx] ;   <span class="comment">/* AM: why slx? */</span>
-<a name="l00201"></a>00201       line[row] = psdata[col+row*slx] ;
-<a name="l00202"></a>00202         }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204         myres = sinfo_function1d_filter_lowpass(line, convsize, 
-<a name="l00205"></a>00205                                                 LOW_PASS_GAUSSIAN, 3) ;
-<a name="l00206"></a>00206         refres = sinfo_function1d_filter_lowpass(lineref, convsize, 
-<a name="l00207"></a>00207                                                  LOW_PASS_GAUSSIAN, 4) ;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209         <span class="comment">/*  now do a cross correlaton of both convolved spectral vectors */</span>
-<a name="l00210"></a>00210         halfsearch = convsize / 2 ;
-<a name="l00211"></a>00211         result = sinfo_new_xcorrel( myres, convsize, refres, convsize, 
-<a name="l00212"></a>00212                                     halfsearch, &delta, &maxlag, &xcorr_max ) ;
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214         <span class="keywordflow">if</span> ( xcorr_max < 0. )
-<a name="l00215"></a>00215         {
-<a name="l00216"></a>00216             sinfo_function1d_del ( refres ) ;
-<a name="l00217"></a>00217             sinfo_function1d_del ( myres ) ;
-<a name="l00218"></a>00218             cpl_free (result) ; 
-<a name="l00219"></a>00219             continue ;
-<a name="l00220"></a>00220         }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222         <span class="comment">/* in this section, we fit the sinfo_correlation function with a </span>
-<a name="l00223"></a>00223 <span class="comment">           gauss, and find its peak, th</span>
-<a name="l00224"></a>00224 <span class="comment">           us getting subpixel-accuracy */</span>
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226         i = maxlag; j = i+1;
-<a name="l00227"></a>00227         <span class="keywordflow">while</span> (result[j] < result[i]) 
-<a name="l00228"></a>00228         {
-<a name="l00229"></a>00229             i++; j++;
-<a name="l00230"></a>00230         }
-<a name="l00231"></a>00231         i = maxlag; k = i-1;
-<a name="l00232"></a>00232         <span class="keywordflow">while</span> (result[k] < result[i]) 
-<a name="l00233"></a>00233         {
-<a name="l00234"></a>00234             i--; k--;
-<a name="l00235"></a>00235         }
-<a name="l00236"></a>00236         width = j-k+1;
-<a name="l00237"></a>00237         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l00238"></a>00238         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )
-<a name="l00239"></a>00239         {
-<a name="l00240"></a>00240             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector "</span>) ;
-<a name="l00241"></a>00241             fclose(fp);
-<a name="l00242"></a>00242             <span class="keywordflow">return</span> ZERO ;
-<a name="l00243"></a>00243         }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246         <span class="comment">/* allocate memory */</span>
-<a name="l00247"></a>00247         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00248"></a>00248         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00249"></a>00249         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span>
-<a name="l00252"></a>00252         <span class="comment">/* go through the chosen column */</span>
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )
-<a name="l00255"></a>00255         {
-<a name="l00256"></a>00256             peak -> data[i] = result[k+i] ;
-<a name="l00257"></a>00257             xdat[i] = i;
-<a name="l00258"></a>00258             wdat[i] = 1.0;
-<a name="l00259"></a>00259         }
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l00262"></a>00262         xdim     = XDIM;
-<a name="l00263"></a>00263         ndat     = peak -> n_elements ;
-<a name="l00264"></a>00264         numpar   = MAXPAR ;
-<a name="l00265"></a>00265         tol      = TOL ;
-<a name="l00266"></a>00266         lab      = LAB ;
-<a name="l00267"></a>00267         its      = ITS ;
-<a name="l00268"></a>00268         par[1] = width/2.0 ;
-<a name="l00269"></a>00269         par[2] = (float) (maxlag - k) ;
-<a name="l00270"></a>00270         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;
-<a name="l00271"></a>00271         par[0]  = result[maxlag] - (par[3]) ;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )
-<a name="l00274"></a>00274         {
-<a name="l00275"></a>00275             derv_par[i] = 0.0 ;
-<a name="l00276"></a>00276             mpar[i] = 1 ;
-<a name="l00277"></a>00277         }
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l00280"></a>00280         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, peak -> data, wdat, 
-<a name="l00281"></a>00281                                          &ndat, par, derv_par, mpar,
-<a name="l00282"></a>00282                                          &numpar, &tol, &its, &lab )) )
-<a name="l00283"></a>00283         {
-<a name="l00284"></a>00284             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit failed "</span>
-<a name="l00285"></a>00285                                <span class="stringliteral">"in col: %d, error no.: %d"</span>, col, iters) ;
-<a name="l00286"></a>00286             sinfo_new_destroy_vector ( peak ) ;
-<a name="l00287"></a>00287             cpl_free ( xdat ) ;
-<a name="l00288"></a>00288             cpl_free ( wdat ) ;
-<a name="l00289"></a>00289             cpl_free ( mpar ) ;
-<a name="l00290"></a>00290             sinfo_function1d_del ( refres ) ;
-<a name="l00291"></a>00291             sinfo_function1d_del ( myres ) ;
-<a name="l00292"></a>00292             cpl_free (result) ; 
-<a name="l00293"></a>00293             continue ;
-<a name="l00294"></a>00294         }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296         sinfo_new_destroy_vector ( peak ) ;
-<a name="l00297"></a>00297         cpl_free (xdat) ;
-<a name="l00298"></a>00298         cpl_free (wdat) ;
-<a name="l00299"></a>00299         cpl_free (mpar) ;
-<a name="l00300"></a>00300         sinfo_function1d_del ( refres ) ;
-<a name="l00301"></a>00301         sinfo_function1d_del ( myres ) ;
-<a name="l00302"></a>00302         cpl_free (result) ; 
-<a name="l00303"></a>00303  
-<a name="l00304"></a>00304         offset2[col] = (float)( k+par[2] - sly/2) ;
-<a name="l00305"></a>00305         fprintf(fp, <span class="stringliteral">"offset: %f in col: %d\n"</span>, offset2[col], col) ;
-<a name="l00306"></a>00306     }
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308     mean_offset2 = (double)sinfo_new_clean_mean (offset2, slx, 15., 15. ) ;
-<a name="l00309"></a>00309     fprintf(fp, <span class="stringliteral">"mean offset: %f\n"</span>, mean_offset2) ;
-<a name="l00310"></a>00310     fclose(fp) ;
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312     cpl_free ( lineref ) ;
-<a name="l00313"></a>00313     cpl_free ( line ) ;
-<a name="l00314"></a>00314     cpl_free ( offset2 ) ; 
-<a name="l00315"></a>00315     filecounter++ ;
-<a name="l00316"></a>00316     <span class="keywordflow">if</span> (filecounter > 100 ) filecounter = 0 ;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     <span class="keywordflow">return</span> mean_offset2 ;
-<a name="l00319"></a>00319 }
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321 
-<a name="l00332"></a>00332 cpl_image * 
-<a name="l00333"></a>00333 sinfo_new_shift_image_in_spec ( cpl_image * shiftedImage, 
-<a name="l00334"></a>00334                                 <span class="keywordtype">double</span> shift, 
-<a name="l00335"></a>00335                                 <span class="keywordtype">double</span> * sub_shift )
-<a name="l00336"></a>00336 {
-<a name="l00337"></a>00337     cpl_image * retIm ;
-<a name="l00338"></a>00338     <span class="keywordtype">int</span>        col, row ;
-<a name="l00339"></a>00339     <span class="keywordtype">int</span>        intshift ;
-<a name="l00340"></a>00340     <span class="keywordtype">int</span> ilx=0;
-<a name="l00341"></a>00341     <span class="keywordtype">int</span> ily=0;
-<a name="l00342"></a>00342     <span class="keywordtype">int</span> olx=0;
-<a name="l00343"></a>00343     <span class="keywordtype">int</span> oly=0;
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00346"></a>00346     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     <span class="keywordflow">if</span> ( shiftedImage == NULL )
-<a name="l00349"></a>00349     {
-<a name="l00350"></a>00350         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;
-<a name="l00351"></a>00351         <span class="keywordflow">return</span> NULL ;
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     ilx=cpl_image_get_size_x(shiftedImage);
-<a name="l00355"></a>00355     ily=cpl_image_get_size_y(shiftedImage);
-<a name="l00356"></a>00356     pidata=cpl_image_get_data_float(shiftedImage);
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358     intshift = sinfo_new_nint (shift) ;
-<a name="l00359"></a>00359     *sub_shift = shift - (double) intshift ;
-<a name="l00360"></a>00360     <span class="keywordflow">if</span> ( intshift == 0 )
-<a name="l00361"></a>00361     {
-<a name="l00362"></a>00362         retIm =cpl_image_duplicate ( shiftedImage ) ;
-<a name="l00363"></a>00363         <span class="keywordflow">return</span> retIm ;
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365     <span class="keywordflow">else</span>
-<a name="l00366"></a>00366     {
-<a name="l00367"></a>00367         <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT)) )
-<a name="l00368"></a>00368         {
-<a name="l00369"></a>00369             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l00370"></a>00370             <span class="keywordflow">return</span> NULL ;
-<a name="l00371"></a>00371         }
-<a name="l00372"></a>00372     }
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     olx=cpl_image_get_size_x(retIm);
-<a name="l00375"></a>00375     oly=cpl_image_get_size_y(retIm);
-<a name="l00376"></a>00376     podata=cpl_image_get_data_float(retIm);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00379"></a>00379     {
-<a name="l00380"></a>00380         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00381"></a>00381         {
-<a name="l00382"></a>00382             <span class="keywordflow">if</span> ( (row-intshift >= 0 ) && (row - intshift < oly) )
-<a name="l00383"></a>00383             {
-<a name="l00384"></a>00384                 podata[col+(row-intshift)*olx] = pidata[col+row*olx] ;
-<a name="l00385"></a>00385             }
-<a name="l00386"></a>00386         }
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388     <span class="keywordflow">return</span> retIm ;
-<a name="l00389"></a>00389 }
-<a name="l00390"></a>00390 
-<a name="l00400"></a>00400 cpl_image * 
-<a name="l00401"></a>00401 sinfo_new_fine_shift_image_in_spec_poly ( cpl_image * shiftedImage, 
-<a name="l00402"></a>00402                                           <span class="keywordtype">double</span> sub_shift, 
-<a name="l00403"></a>00403                                           <span class="keywordtype">int</span> order )
-<a name="l00404"></a>00404 {
-<a name="l00405"></a>00405     cpl_image * retIm ;
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l00408"></a>00408     <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l00409"></a>00409     <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411     <span class="keywordtype">float</span> sum, new_sum ;
-<a name="l00412"></a>00412     <span class="keywordtype">float</span> eval<span class="comment">/*, dy*/</span> ;
-<a name="l00413"></a>00413     <span class="keywordtype">float</span> * imageptr ;
-<a name="l00414"></a>00414     <span class="keywordtype">int</span> row, col ;
-<a name="l00415"></a>00415     <span class="keywordtype">int</span> firstpos ;
-<a name="l00416"></a>00416     <span class="keywordtype">int</span> n_points ;
-<a name="l00417"></a>00417     <span class="keywordtype">int</span> i ;
-<a name="l00418"></a>00418     <span class="keywordtype">int</span> flag;
-<a name="l00419"></a>00419     <span class="keywordtype">int</span> ilx=0;
-<a name="l00420"></a>00420     <span class="keywordtype">int</span> ily=0;
-<a name="l00421"></a>00421     <span class="keywordtype">int</span> olx=0;
-<a name="l00422"></a>00422     <span class="keywordtype">int</span> oly=0;
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00425"></a>00425     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427     <span class="keywordflow">if</span> ( shiftedImage == NULL )
-<a name="l00428"></a>00428     {
-<a name="l00429"></a>00429         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;
-<a name="l00430"></a>00430         <span class="keywordflow">return</span> NULL ;
-<a name="l00431"></a>00431     }
-<a name="l00432"></a>00432     ilx=cpl_image_get_size_x(shiftedImage);
-<a name="l00433"></a>00433     ily=cpl_image_get_size_y(shiftedImage);
-<a name="l00434"></a>00434     pidata=cpl_image_get_data_float(shiftedImage);
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436     <span class="keywordflow">if</span> ( order <= 0 )
-<a name="l00437"></a>00437     {
-<a name="l00438"></a>00438         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l00439"></a>00439         <span class="keywordflow">return</span> NULL ;
-<a name="l00440"></a>00440     }
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442     <span class="comment">/* allocate memory */</span>
-<a name="l00443"></a>00443     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT)) )
-<a name="l00444"></a>00444     {
-<a name="l00445"></a>00445         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l00446"></a>00446         <span class="keywordflow">return</span> NULL ;
-<a name="l00447"></a>00447     }
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     olx=cpl_image_get_size_x(retIm);
-<a name="l00450"></a>00450     oly=cpl_image_get_size_y(retIm);
-<a name="l00451"></a>00451     podata=cpl_image_get_data_float(retIm);
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453     n_points = order + 1 ;
-<a name="l00454"></a>00454     <span class="keywordflow">if</span> ( n_points % 2 == 0 )
-<a name="l00455"></a>00455     {
-<a name="l00456"></a>00456         firstpos = (int)(n_points/2) - 1 ;
-<a name="l00457"></a>00457     }
-<a name="l00458"></a>00458     <span class="keywordflow">else</span>
-<a name="l00459"></a>00459     {
-<a name="l00460"></a>00460         firstpos = (int)(n_points/2) ;
-<a name="l00461"></a>00461     }
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00464"></a>00464     corrected_spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00465"></a>00465     xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468     <span class="comment">/* fill the xa[] array for the polint function */</span>
-<a name="l00469"></a>00469     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )
-<a name="l00470"></a>00470     {
-<a name="l00471"></a>00471         xnum[i] = i ;
-<a name="l00472"></a>00472     }
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00475"></a>00475     {
-<a name="l00476"></a>00476         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00477"></a>00477         {
-<a name="l00478"></a>00478             corrected_spec[row] = 0. ;
-<a name="l00479"></a>00479         }
-<a name="l00480"></a>00480         sum = 0. ;
-<a name="l00481"></a>00481         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00482"></a>00482         {
-<a name="l00483"></a>00483             spec[row] = pidata[col + row*ilx] ;
-<a name="l00484"></a>00484             <span class="keywordflow">if</span> (isnan(spec[row]) )
-<a name="l00485"></a>00485             {
-<a name="l00486"></a>00486                 spec[row] = 0. ;
-<a name="l00487"></a>00487                   
-<a name="l00488"></a>00488                 <span class="keywordflow">for</span> ( i = row - firstpos ; i < row-firstpos+n_points ; i++ )
-<a name="l00489"></a>00489                 {
-<a name="l00490"></a>00490                     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00491"></a>00491                     <span class="keywordflow">if</span> ( i >= ily) continue  ;
-<a name="l00492"></a>00492                     corrected_spec[i] = ZERO ;
-<a name="l00493"></a>00493                 }
-<a name="l00494"></a>00494             }
-<a name="l00495"></a>00495             <span class="keywordflow">if</span> ( row != 0 && row != ily - 1 )
-<a name="l00496"></a>00496             {
-<a name="l00497"></a>00497                 sum += spec[row] ;
-<a name="l00498"></a>00498             }
-<a name="l00499"></a>00499         }
-<a name="l00500"></a>00500         
-<a name="l00501"></a>00501         new_sum = 0. ;
-<a name="l00502"></a>00502         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00503"></a>00503         {
-<a name="l00504"></a>00504             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l00505"></a>00505 <span class="comment">             * now determine the arrays of size n_points with which the</span>
-<a name="l00506"></a>00506 <span class="comment">             * polynom is determined and determine the position eval</span>
-<a name="l00507"></a>00507 <span class="comment">             * where the polynom is evaluated in polynomial interpolation.</span>
-<a name="l00508"></a>00508 <span class="comment">             * Take care of the points near the row edges!</span>
-<a name="l00509"></a>00509 <span class="comment">             */</span>
-<a name="l00510"></a>00510             <span class="keywordflow">if</span> (isnan(corrected_spec[row])) continue ;
-<a name="l00511"></a>00511             <span class="keywordflow">if</span> ( row - firstpos < 0 )
-<a name="l00512"></a>00512             {
-<a name="l00513"></a>00513                 imageptr = &spec[0] ;
-<a name="l00514"></a>00514                 eval     = sub_shift + row ;
-<a name="l00515"></a>00515             }
-<a name="l00516"></a>00516             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( row - firstpos + n_points >= ily )
-<a name="l00517"></a>00517             {
-<a name="l00518"></a>00518                 imageptr = &spec[ily - n_points] ;
-<a name="l00519"></a>00519                 eval     = sub_shift + row + n_points - ily ;
-<a name="l00520"></a>00520             }
-<a name="l00521"></a>00521             <span class="keywordflow">else</span>
-<a name="l00522"></a>00522             {
-<a name="l00523"></a>00523                 imageptr = &spec[row-firstpos] ;
-<a name="l00524"></a>00524                 eval     = sub_shift + firstpos ;
-<a name="l00525"></a>00525             }
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527         flag=0;
-<a name="l00528"></a>00528             corrected_spec[row]=sinfo_new_nev_ille( xnum, imageptr, 
-<a name="l00529"></a>00529                                                     order, eval, &flag) ;
-<a name="l00530"></a>00530             <span class="keywordflow">if</span> ( row != 0 && row != ily - 1 )
-<a name="l00531"></a>00531             {
-<a name="l00532"></a>00532                 new_sum += corrected_spec[row] ;
-<a name="l00533"></a>00533             }
-<a name="l00534"></a>00534         }
-<a name="l00535"></a>00535 
-<a name="l00536"></a>00536         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00537"></a>00537         {
-<a name="l00538"></a>00538             <span class="keywordflow">if</span> ( new_sum == 0. )
-<a name="l00539"></a>00539             {
-<a name="l00540"></a>00540                 new_sum = 1. ;
-<a name="l00541"></a>00541             }
-<a name="l00542"></a>00542             <span class="keywordflow">if</span> ( row == 0 )
-<a name="l00543"></a>00543             {
-<a name="l00544"></a>00544                 podata[col+row*olx] = ZERO ;
-<a name="l00545"></a>00545             }
-<a name="l00546"></a>00546             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( row == ily - 1 )
-<a name="l00547"></a>00547             {
-<a name="l00548"></a>00548                 podata[col+row*olx] = ZERO ;
-<a name="l00549"></a>00549             }
-<a name="l00550"></a>00550             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )
-<a name="l00551"></a>00551             {
-<a name="l00552"></a>00552                 podata[col+row*olx] = ZERO ;
-<a name="l00553"></a>00553             }
-<a name="l00554"></a>00554             <span class="keywordflow">else</span>
-<a name="l00555"></a>00555             {
-<a name="l00556"></a>00556                 corrected_spec[row] *= sum / new_sum ;
-<a name="l00557"></a>00557                 podata[col+row*olx] = corrected_spec[row] ;
-<a name="l00558"></a>00558             }
-<a name="l00559"></a>00559         }
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561     cpl_free(spec) ;
-<a name="l00562"></a>00562     cpl_free(corrected_spec) ;
-<a name="l00563"></a>00563     cpl_free(xnum) ;
-<a name="l00564"></a>00564     <span class="keywordflow">return</span> retIm ;
-<a name="l00565"></a>00565 }
-<a name="l00574"></a>00574 cpl_image * 
-<a name="l00575"></a>00575 sinfo_new_fine_shift_image_in_spec_cubic_spline ( cpl_image * shiftedImage, 
-<a name="l00576"></a>00576                                                   <span class="keywordtype">double</span> sub_shift )
-<a name="l00577"></a>00577 {
-<a name="l00578"></a>00578     cpl_image * retIm ;
-<a name="l00579"></a>00579     <span class="comment">/*float second_deriv[shiftedImage -> ly] ;*/</span>
-<a name="l00580"></a>00580     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l00581"></a>00581     <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l00582"></a>00582     <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l00583"></a>00583     <span class="keywordtype">float</span>* eval=NULL ;
-<a name="l00584"></a>00584     <span class="keywordtype">float</span> sum, new_sum ;
-<a name="l00585"></a>00585     <span class="keywordtype">int</span> row, col ;
-<a name="l00586"></a>00586     <span class="keywordtype">int</span> i ;
-<a name="l00587"></a>00587     <span class="keywordtype">int</span> ilx=0;
-<a name="l00588"></a>00588     <span class="keywordtype">int</span> ily=0;
-<a name="l00589"></a>00589     <span class="keywordtype">int</span> olx=0;
-<a name="l00590"></a>00590     <span class="keywordtype">int</span> oly=0;
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00593"></a>00593     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595     <span class="keywordflow">if</span> ( shiftedImage == NULL )
-<a name="l00596"></a>00596     {
-<a name="l00597"></a>00597         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;
-<a name="l00598"></a>00598         <span class="keywordflow">return</span> NULL ;
-<a name="l00599"></a>00599     }
-<a name="l00600"></a>00600     ilx=cpl_image_get_size_x(shiftedImage);
-<a name="l00601"></a>00601     ily=cpl_image_get_size_y(shiftedImage);
-<a name="l00602"></a>00602     pidata=cpl_image_get_data_float(shiftedImage);
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604     <span class="comment">/* allocate memory */</span>
-<a name="l00605"></a>00605     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT)) )
-<a name="l00606"></a>00606     {
-<a name="l00607"></a>00607         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l00608"></a>00608         <span class="keywordflow">return</span> NULL ;
-<a name="l00609"></a>00609     }
-<a name="l00610"></a>00610     olx=cpl_image_get_size_x(retIm);
-<a name="l00611"></a>00611     oly=cpl_image_get_size_y(retIm);
-<a name="l00612"></a>00612     podata=cpl_image_get_data_float(retIm);
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614     xnum=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00615"></a>00615     <span class="comment">/* fill the xa[] array for the spline function */</span>
-<a name="l00616"></a>00616     <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )
-<a name="l00617"></a>00617     {
-<a name="l00618"></a>00618         xnum[i] = i ;
-<a name="l00619"></a>00619     }
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00622"></a>00622     corrected_spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00623"></a>00623     eval=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00626"></a>00626     {
-<a name="l00627"></a>00627         sum = 0. ;
-<a name="l00628"></a>00628         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00629"></a>00629         {
-<a name="l00630"></a>00630             spec[row] = pidata[col + row*ilx] ;
-<a name="l00631"></a>00631             <span class="keywordflow">if</span> (isnan(spec[row]) )
-<a name="l00632"></a>00632             {
-<a name="l00633"></a>00633                 <span class="keywordflow">for</span> ( i = row-1 ; i <= row+1 ; i++ )
-<a name="l00634"></a>00634                 {
-<a name="l00635"></a>00635                     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00636"></a>00636                     <span class="keywordflow">if</span> ( i >= ily) continue ;
-<a name="l00637"></a>00637                     corrected_spec[i] = ZERO ;
-<a name="l00638"></a>00638                 }  
-<a name="l00639"></a>00639         spec[row] = 0. ;
-<a name="l00640"></a>00640             }
-<a name="l00641"></a>00641             sum += spec[row] ;
-<a name="l00642"></a>00642             eval[row] = (float)sub_shift+(<span class="keywordtype">float</span>)row ;
-<a name="l00643"></a>00643         }
-<a name="l00644"></a>00644         <span class="comment">/* now we do the spline interpolation*/</span>
-<a name="l00645"></a>00645         <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline( xnum, spec, ily, eval, 
-<a name="l00646"></a>00646                                               corrected_spec, ily ) )
-<a name="l00647"></a>00647         {
-<a name="l00648"></a>00648             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;
-<a name="l00649"></a>00649             <span class="keywordflow">return</span> NULL ;
-<a name="l00650"></a>00650         }
-<a name="l00651"></a>00651         
-<a name="l00652"></a>00652         new_sum = 0. ;
-<a name="l00653"></a>00653         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00654"></a>00654         {
-<a name="l00655"></a>00655             <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )
-<a name="l00656"></a>00656             {
-<a name="l00657"></a>00657                 continue ;
-<a name="l00658"></a>00658             }   
-<a name="l00659"></a>00659         new_sum += corrected_spec[row] ;
-<a name="l00660"></a>00660         }
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00663"></a>00663         {
-<a name="l00664"></a>00664             <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;
-<a name="l00665"></a>00665             {
-<a name="l00666"></a>00666                 <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )
-<a name="l00667"></a>00667                 {
-<a name="l00668"></a>00668                     podata[col+row*olx] = ZERO ;
-<a name="l00669"></a>00669                 }
-<a name="l00670"></a>00670                 <span class="keywordflow">else</span>
-<a name="l00671"></a>00671                 {
-<a name="l00672"></a>00672                     corrected_spec[row] *= sum / new_sum ;
-<a name="l00673"></a>00673                     podata[col+row*olx] = corrected_spec[row] ;
-<a name="l00674"></a>00674                 }
-<a name="l00675"></a>00675             }
-<a name="l00676"></a>00676         }
-<a name="l00677"></a>00677     }
-<a name="l00678"></a>00678     cpl_free(xnum);
-<a name="l00679"></a>00679     cpl_free(spec) ;
-<a name="l00680"></a>00680     cpl_free(corrected_spec) ;
-<a name="l00681"></a>00681     cpl_free(eval) ;
-<a name="l00682"></a>00682 
-<a name="l00683"></a>00683     <span class="keywordflow">return</span> retIm ;
-<a name="l00684"></a>00684 }
-<a name="l00685"></a>00685 
-<a name="l00697"></a>00697 cpl_imagelist * sinfo_align_cube_to_reference (cpl_imagelist * cube, 
-<a name="l00698"></a>00698                                  cpl_image * refIm,
-<a name="l00699"></a>00699                                  <span class="keywordtype">int</span> order,
-<a name="l00700"></a>00700                                  <span class="keywordtype">int</span> shift_indicator )
-<a name="l00701"></a>00701 {
-<a name="l00702"></a>00702     cpl_imagelist * retCube=NULL ;
-<a name="l00703"></a>00703     cpl_image * shiftedIm=NULL ;
-<a name="l00704"></a>00704     cpl_image * fineShiftedIm=NULL ;
-<a name="l00705"></a>00705     <span class="keywordtype">double</span> shift=0 ;
-<a name="l00706"></a>00706     <span class="keywordtype">double</span>  sub_shift=0 ;
-<a name="l00707"></a>00707     <span class="keywordtype">int</span> z=0;
-<a name="l00708"></a>00708     <span class="keywordtype">double</span> * ker=NULL ;
-<a name="l00709"></a>00709     cpl_image* img=NULL;
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711     <span class="keywordflow">if</span> (cube == NULL)
-<a name="l00712"></a>00712     { 
-<a name="l00713"></a>00713         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;
-<a name="l00714"></a>00714         <span class="keywordflow">return</span> NULL ;
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716     <span class="keywordflow">if</span> (refIm == NULL)
-<a name="l00717"></a>00717     { 
-<a name="l00718"></a>00718         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input ref. image given!"</span>) ;
-<a name="l00719"></a>00719         <span class="keywordflow">return</span> NULL ;
-<a name="l00720"></a>00720     }
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722     <span class="comment">/* allocation for a cube structure without the image planes  */</span>
-<a name="l00723"></a>00723     retCube = cpl_imagelist_new() ;
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725     <span class="keywordflow">if</span> ( shift_indicator != 0 && shift_indicator != 1 )
-<a name="l00726"></a>00726     {
-<a name="l00727"></a>00727         ker = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;
-<a name="l00728"></a>00728         <span class="keywordflow">if</span> (ker == NULL)
-<a name="l00729"></a>00729         {
-<a name="l00730"></a>00730             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure: aborting resampling"</span>) ;
-<a name="l00731"></a>00731             <span class="keywordflow">return</span> NULL ;
-<a name="l00732"></a>00732         }
-<a name="l00733"></a>00733     }
-<a name="l00734"></a>00734     
-<a name="l00735"></a>00735     <span class="keywordflow">for</span> ( z = 0 ; z < cpl_imagelist_get_size(cube) ; z++ )
-<a name="l00736"></a>00736     {
-<a name="l00737"></a>00737       <span class="comment">/* first determine the shift by correlation with the reference image */</span>
-<a name="l00738"></a>00738       img=cpl_imagelist_get(cube,z);
-<a name="l00739"></a>00739       <span class="keywordflow">if</span> (isnan( shift=sinfo_new_determine_shift_by_correlation(refIm,img)))
-<a name="l00740"></a>00740         { 
-<a name="l00741"></a>00741             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_determineShiftByCorrelation()!"</span>) ;
-<a name="l00742"></a>00742             <span class="keywordflow">return</span> NULL ;
-<a name="l00743"></a>00743         }
-<a name="l00744"></a>00744 
-<a name="l00745"></a>00745         <span class="keywordflow">if</span> ( NULL == (shiftedIm = sinfo_new_shift_image_in_spec(img,shift,
-<a name="l00746"></a>00746                                                                 &sub_shift)) ) 
-<a name="l00747"></a>00747         { 
-<a name="l00748"></a>00748             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_shiftImageInSpec()!"</span>) ;
-<a name="l00749"></a>00749             <span class="keywordflow">return</span> NULL ;
-<a name="l00750"></a>00750         }
-<a name="l00751"></a>00751         <span class="keywordflow">if</span> ( shift_indicator == 0 )
-<a name="l00752"></a>00752         {
-<a name="l00753"></a>00753             <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = 
-<a name="l00754"></a>00754                  sinfo_new_fine_shift_image_in_spec_poly (shiftedIm, 
-<a name="l00755"></a>00755                                                           sub_shift, order)))
-<a name="l00756"></a>00756             {
-<a name="l00757"></a>00757                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_fineShiftImageInSpecPoly()!"</span>) ;
-<a name="l00758"></a>00758                 <span class="keywordflow">return</span> NULL ;
-<a name="l00759"></a>00759             }
-<a name="l00760"></a>00760         }
-<a name="l00761"></a>00761         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( shift_indicator == 1)
-<a name="l00762"></a>00762         {
-<a name="l00763"></a>00763           <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = 
-<a name="l00764"></a>00764                sinfo_new_fine_shift_image_in_spec_cubic_spline (shiftedIm, 
-<a name="l00765"></a>00765                                                                   sub_shift)))
-<a name="l00766"></a>00766           {
-<a name="l00767"></a>00767             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in fineShiftImageInSpecCubicspline()!"</span>) ;
-<a name="l00768"></a>00768             <span class="keywordflow">return</span> NULL ;
-<a name="l00769"></a>00769           }
-<a name="l00770"></a>00770         }
-<a name="l00771"></a>00771         
-<a name="l00772"></a>00772     <span class="keywordflow">else</span>
-<a name="l00773"></a>00773     {
-<a name="l00774"></a>00774       <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = 
-<a name="l00775"></a>00775                sinfo_new_shift_image(shiftedIm,0.,sub_shift, ker ) ) )
-<a name="l00776"></a>00776           {
-<a name="l00777"></a>00777            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in fineShiftImageInSpecCubicspline()!"</span>) ;
-<a name="l00778"></a>00778            <span class="keywordflow">return</span> NULL ;
-<a name="l00779"></a>00779           }     
-<a name="l00780"></a>00780     }
-<a name="l00781"></a>00781     cpl_imagelist_set(retCube,fineShiftedIm,z);
-<a name="l00782"></a>00782         cpl_image_delete (shiftedIm) ;
-<a name="l00783"></a>00783         cpl_image_delete (fineShiftedIm) ;
-<a name="l00784"></a>00784     }
-<a name="l00785"></a>00785     <span class="keywordflow">if</span> ( shift_indicator != 0 && shift_indicator != 1 ) cpl_free(ker) ;
-<a name="l00786"></a>00786     <span class="keywordflow">return</span> retCube ;
-<a name="l00787"></a>00787 }
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_shift_images.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  05/03/03  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_shift_images.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        some procedures to shift images in spectral direction</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   #include "sinfo_shift_images.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*   1) double sinfo_new_determine_shift_by_correlation ( cpl_image * refImage, </span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*                                           cpl_image * shiftedImage )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   2) cpl_image * sinfo_new_shift_image_in_spec ( cpl_image * shiftedImage, </span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                                                   double shift, </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                                   double * sub_shift )</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*   3) cpl_image * </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">       sinfo_new_fine_shift_image_in_spec_poly(cpl_image * shiftedImage, </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                                           double sub_shift, </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                                                           int order )</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*   4) cpl_image * </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">       sinfo_new_fine_shift_image_in_spec_cubicspline(cpl_image * shiftedImage, </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                                      double sub_shift )</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*   5) cpl_imagelist * sinfo_align_cube_to_reference(cpl_imagelist * cube, </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*                                       cpl_image * refIm,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                                       int order,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                                       int shift_indicator )</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*   1) determines the sub-pixel shift of to emission line</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*      frames by cross sinfo_correlation and fitting the sinfo_correlation</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*      function by a Gaussian</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*   2) shifts an image by a given amount to integer pixel accuracy</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*   3) shifts an image by a given amount to sub-pixel accuracy</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*   4) shifts an image by a given amount to sub-pixel accuracy</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*   5) shifts images stacked in a cube by a given amount to sub-pixel accuracy</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#include "sinfo_shift_images.h"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">#include "sinfo_new_resampling.h"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keyword">static</span> <span class="keywordtype">int</span> filecounter ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keywordtype">double</span> sinfo_new_determine_shift_by_correlation ( cpl_image * refImage, </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                                      cpl_image * shiftedImage )</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordtype">int</span>          col, row ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordtype">int</span>           i, j, k, width;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> convsize ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordtype">float</span>       * lineref ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">float</span>       * line ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordtype">float</span>       * offset2 ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">double</span>      * result ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordtype">double</span>       mean_offset2 ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/*int          magFactor ;*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordtype">int</span>          maxlag ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">float</span>      * refres ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordtype">float</span>      * myres ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">int</span>          halfsearch ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordtype">int</span>          delta ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordtype">double</span>       xcorr_max ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/*float        arg ;*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordtype">float</span>      par[MAXPAR] ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordtype">float</span>      derv_par[MAXPAR] ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">int</span>        iters, xdim, ndat ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">int</span>        numpar, its ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">int</span>        * mpar ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordtype">float</span>      tol, lab ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordtype">float</span>      * xdat, * wdat ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     Vector     * peak;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordtype">char</span>       filename[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     FILE       * fp ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">int</span> rlx=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordtype">int</span> rly=0;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">int</span> slx=0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordtype">int</span> sly=0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">float</span>* prdata=NULL;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordtype">float</span>* psdata=NULL;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="keywordflow">if</span> ( NULL == refImage || NULL == shiftedImage )</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image not given!"</span>) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         <span class="keywordflow">return</span> ZERO ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     rlx=cpl_image_get_size_x(refImage);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     rly=cpl_image_get_size_x(refImage);</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     prdata=cpl_image_get_data_float(refImage);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     slx=cpl_image_get_size_x(shiftedImage);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     sly=cpl_image_get_size_x(shiftedImage);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     psdata=cpl_image_get_data_float(shiftedImage);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">if</span> ( rlx != slx || rly != sly )</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"image size not compatible!"</span>) ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         <span class="keywordflow">return</span> ZERO ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     snprintf(filename, MAX_NAME_SIZE-1,<span class="stringliteral">"offset%d.list"</span>, filecounter) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     fp = fopen(filename, <span class="stringliteral">"w"</span>) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     convsize = sly;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     lineref = (<span class="keywordtype">float</span>*) cpl_calloc(convsize, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     line = (<span class="keywordtype">float</span>*) cpl_calloc(convsize, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     offset2 = (<span class="keywordtype">float</span>*) cpl_calloc(slx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">for</span> ( col = 0 ; col < slx ; col++ )</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     {</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         <span class="comment">/* initialize arrays */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         <span class="keywordflow">for</span> ( row = 0 ;  row < (int) convsize ; row++ )</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>             lineref[row] = 0. ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>             line[row] = 0. ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>         <span class="comment">/* magnify spectral sinfo_vector by magFactor */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="keywordflow">for</span> ( row = 0 ; row < (sly) ; row++ )</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       lineref[row] = prdata[col+row*slx] ;   <span class="comment">/* AM: why slx? */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>       line[row] = psdata[col+row*slx] ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         myres = sinfo_function1d_filter_lowpass(line, convsize, </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                                                 LOW_PASS_GAUSSIAN, 3) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         refres = sinfo_function1d_filter_lowpass(lineref, convsize, </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                                                  LOW_PASS_GAUSSIAN, 4) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         <span class="comment">/*  now do a cross correlaton of both convolved spectral vectors */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         halfsearch = convsize / 2 ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         result = sinfo_new_xcorrel( myres, convsize, refres, convsize, </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                                     halfsearch, &delta, &maxlag, &xcorr_max ) ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         <span class="keywordflow">if</span> ( xcorr_max < 0. )</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             sinfo_function1d_del ( refres ) ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>             sinfo_function1d_del ( myres ) ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>             cpl_free (result) ; </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>             continue ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>         }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>         <span class="comment">/* in this section, we fit the sinfo_correlation function with a </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">           gauss, and find its peak, th</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">           us getting subpixel-accuracy */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         i = maxlag; j = i+1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         <span class="keywordflow">while</span> (result[j] < result[i]) </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>         {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>             i++; j++;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>         i = maxlag; k = i-1;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keywordflow">while</span> (result[k] < result[i]) </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>             i--; k--;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         width = j-k+1;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector "</span>) ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>             fclose(fp);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>             <span class="keywordflow">return</span> ZERO ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         <span class="comment">/* go through the chosen column */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>             peak -> data[i] = result[k+i] ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             xdat[i] = i;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>             wdat[i] = 1.0;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         xdim     = XDIM;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         ndat     = peak -> n_elements ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         tol      = TOL ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         lab      = LAB ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         its      = ITS ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         par[1] = width/2.0 ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         par[2] = (float) (maxlag - k) ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         par[0]  = result[maxlag] - (par[3]) ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>             derv_par[i] = 0.0 ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, peak -> data, wdat, </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                                          &ndat, par, derv_par, mpar,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                          &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit failed "</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                                <span class="stringliteral">"in col: %d, error no.: %d"</span>, col, iters) ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>             sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>             sinfo_function1d_del ( refres ) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             sinfo_function1d_del ( myres ) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>             cpl_free (result) ; </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>             continue ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         cpl_free (xdat) ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         cpl_free (wdat) ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         cpl_free (mpar) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         sinfo_function1d_del ( refres ) ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         sinfo_function1d_del ( myres ) ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         cpl_free (result) ; </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>  </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         offset2[col] = (float)( k+par[2] - sly/2) ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>         fprintf(fp, <span class="stringliteral">"offset: %f in col: %d\n"</span>, offset2[col], col) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     mean_offset2 = (double)sinfo_new_clean_mean (offset2, slx, 15., 15. ) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     fprintf(fp, <span class="stringliteral">"mean offset: %f\n"</span>, mean_offset2) ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     fclose(fp) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     cpl_free ( lineref ) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     cpl_free ( line ) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     cpl_free ( offset2 ) ; </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     filecounter++ ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     <span class="keywordflow">if</span> (filecounter > 100 ) filecounter = 0 ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">return</span> mean_offset2 ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> cpl_image * </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> sinfo_new_shift_image_in_spec ( cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                                 <span class="keywordtype">double</span> shift, </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                                 <span class="keywordtype">double</span> * sub_shift )</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     cpl_image * retIm ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="keywordtype">int</span>        col, row ;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     <span class="keywordtype">int</span>        intshift ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordflow">if</span> ( shiftedImage == NULL )</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     ilx=cpl_image_get_size_x(shiftedImage);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     ily=cpl_image_get_size_y(shiftedImage);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     pidata=cpl_image_get_data_float(shiftedImage);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     intshift = sinfo_new_nint (shift) ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     *sub_shift = shift - (double) intshift ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">if</span> ( intshift == 0 )</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         retIm =cpl_image_duplicate ( shiftedImage ) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     {</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         }</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     olx=cpl_image_get_size_x(retIm);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     oly=cpl_image_get_size_y(retIm);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     podata=cpl_image_get_data_float(retIm);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         {</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             <span class="keywordflow">if</span> ( (row-intshift >= 0 ) && (row - intshift < oly) )</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                 podata[col+(row-intshift)*olx] = pidata[col+row*olx] ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>             }</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> cpl_image * </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> sinfo_new_fine_shift_image_in_spec_poly ( cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                           <span class="keywordtype">double</span> sub_shift, </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                           <span class="keywordtype">int</span> order )</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     cpl_image * retIm ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="keywordtype">float</span> sum, new_sum ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordtype">float</span> eval<span class="comment">/*, dy*/</span> ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordtype">float</span> * imageptr ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <span class="keywordtype">int</span> row, col ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordtype">int</span> firstpos ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordtype">int</span> n_points ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordtype">int</span> flag;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="keywordflow">if</span> ( shiftedImage == NULL )</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     ilx=cpl_image_get_size_x(shiftedImage);</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     ily=cpl_image_get_size_y(shiftedImage);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     pidata=cpl_image_get_data_float(shiftedImage);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="keywordflow">if</span> ( order <= 0 )</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     {</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     }</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx, ily,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     olx=cpl_image_get_size_x(retIm);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     oly=cpl_image_get_size_y(retIm);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     podata=cpl_image_get_data_float(retIm);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     n_points = order + 1 ;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     <span class="keywordflow">if</span> ( n_points % 2 == 0 )</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>         firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>         firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     corrected_spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     <span class="comment">/* fill the xa[] array for the polint function */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ )</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     {</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>         xnum[i] = i ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>         {</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             corrected_spec[row] = 0. ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>         }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>         sum = 0. ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             spec[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             <span class="keywordflow">if</span> (isnan(spec[row]) )</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>             {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                 spec[row] = 0. ;</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                   </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                 <span class="keywordflow">for</span> ( i = row - firstpos ; i < row-firstpos+n_points ; i++ )</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                 {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                     <span class="keywordflow">if</span> ( i >= ily) continue  ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                 }</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>             }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>             <span class="keywordflow">if</span> ( row != 0 && row != ily - 1 )</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>             {</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                 sum += spec[row] ;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>             }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         }</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>         </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>         new_sum = 0. ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>         {</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> <span class="comment">             * now determine the arrays of size n_points with which the</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> <span class="comment">             * polynom is determined and determine the position eval</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">             * where the polynom is evaluated in polynomial interpolation.</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">             * Take care of the points near the row edges!</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             <span class="keywordflow">if</span> (isnan(corrected_spec[row])) continue ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             <span class="keywordflow">if</span> ( row - firstpos < 0 )</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>             {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                 imageptr = &spec[0] ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                 eval     = sub_shift + row ;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>             }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( row - firstpos + n_points >= ily )</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>             {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>                 imageptr = &spec[ily - n_points] ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>                 eval     = sub_shift + row + n_points - ily ;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>             }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>             {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>                 imageptr = &spec[row-firstpos] ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                 eval     = sub_shift + firstpos ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>             }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         flag=0;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             corrected_spec[row]=sinfo_new_nev_ille( xnum, imageptr, </div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                                                     order, eval, &flag) ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             <span class="keywordflow">if</span> ( row != 0 && row != ily - 1 )</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>             {</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                 new_sum += corrected_spec[row] ;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>             }</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>         }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         {</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>             <span class="keywordflow">if</span> ( new_sum == 0. )</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>             {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                 new_sum = 1. ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>             }</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>             <span class="keywordflow">if</span> ( row == 0 )</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>             {</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>                 podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>             }</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( row == ily - 1 )</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>             {</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>                 podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             }</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>                 podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>             }</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>             {</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                 corrected_spec[row] *= sum / new_sum ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                 podata[col+row*olx] = corrected_spec[row] ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>             }</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     cpl_free(corrected_spec) ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     cpl_free(xnum) ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> cpl_image * </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> sinfo_new_fine_shift_image_in_spec_cubic_spline ( cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>                                                   <span class="keywordtype">double</span> sub_shift )</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     cpl_image * retIm ;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="comment">/*float second_deriv[shiftedImage -> ly] ;*/</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     <span class="keywordtype">float</span>* eval=NULL ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     <span class="keywordtype">float</span> sum, new_sum ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="keywordtype">int</span> row, col ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordflow">if</span> ( shiftedImage == NULL )</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     {</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     }</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     ilx=cpl_image_get_size_x(shiftedImage);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     ily=cpl_image_get_size_y(shiftedImage);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     pidata=cpl_image_get_data_float(shiftedImage);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     olx=cpl_image_get_size_x(retIm);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     oly=cpl_image_get_size_y(retIm);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     podata=cpl_image_get_data_float(retIm);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     xnum=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     <span class="comment">/* fill the xa[] array for the spline function */</span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     {</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         xnum[i] = i ;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     corrected_spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     eval=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>     {</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         sum = 0. ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         {</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             spec[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>             <span class="keywordflow">if</span> (isnan(spec[row]) )</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                 <span class="keywordflow">for</span> ( i = row-1 ; i <= row+1 ; i++ )</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>                 {</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>                     <span class="keywordflow">if</span> ( i >= ily) continue ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>                 }  </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         spec[row] = 0. ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>             }</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>             sum += spec[row] ;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>             eval[row] = (float)sub_shift+(<span class="keywordtype">float</span>)row ;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         }</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         <span class="comment">/* now we do the spline interpolation*/</span></div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline( xnum, spec, ily, eval, </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                                               corrected_spec, ily ) )</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>         {</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         new_sum = 0. ;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>             <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>             {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                 continue ;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>             }   </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         new_sum += corrected_spec[row] ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         }</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         {</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>             <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             {</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                 <span class="keywordflow">if</span> ( isnan(corrected_spec[row]) )</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                 {</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                     podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                 }</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                 {</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                     corrected_spec[row] *= sum / new_sum ;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                     podata[col+row*olx] = corrected_spec[row] ;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                 }</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>             }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         }</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     }</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     cpl_free(xnum);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     cpl_free(corrected_spec) ;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     cpl_free(eval) ;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> </div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> }</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> cpl_imagelist * sinfo_align_cube_to_reference (cpl_imagelist * cube, </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                                  cpl_image * refIm,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                                  <span class="keywordtype">int</span> order,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                                  <span class="keywordtype">int</span> shift_indicator )</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span> {</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     cpl_imagelist * retCube=NULL ;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     cpl_image * shiftedIm=NULL ;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     cpl_image * fineShiftedIm=NULL ;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keywordtype">double</span> shift=0 ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keywordtype">double</span>  sub_shift=0 ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     <span class="keywordtype">double</span> * ker=NULL ;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     cpl_image* img=NULL;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordflow">if</span> (cube == NULL)</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     { </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input cube given!"</span>) ;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordflow">if</span> (refIm == NULL)</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     { </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no input ref. image given!"</span>) ;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     }</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="comment">/* allocation for a cube structure without the image planes  */</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     retCube = cpl_imagelist_new() ;</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     <span class="keywordflow">if</span> ( shift_indicator != 0 && shift_indicator != 1 )</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>     {</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         ker = sinfo_new_generate_interpolation_kernel(<span class="stringliteral">"tanh"</span>) ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>         <span class="keywordflow">if</span> (ker == NULL)</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         {</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"kernel generation failure: aborting resampling"</span>) ;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     }</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>     </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     <span class="keywordflow">for</span> ( z = 0 ; z < cpl_imagelist_get_size(cube) ; z++ )</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>     {</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>       <span class="comment">/* first determine the shift by correlation with the reference image */</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>       img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>       <span class="keywordflow">if</span> (isnan( shift=sinfo_new_determine_shift_by_correlation(refIm,img)))</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>         { </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_determineShiftByCorrelation()!"</span>) ;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         }</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         <span class="keywordflow">if</span> ( NULL == (shiftedIm = sinfo_new_shift_image_in_spec(img,shift,</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>                                                                 &sub_shift)) ) </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>         { </div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_shiftImageInSpec()!"</span>) ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         }</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">if</span> ( shift_indicator == 0 )</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                  sinfo_new_fine_shift_image_in_spec_poly (shiftedIm, </div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                                                           sub_shift, order)))</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>             {</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in sinfo_fineShiftImageInSpecPoly()!"</span>) ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>             }</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>         }</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( shift_indicator == 1)</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         {</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>           <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = </div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>                sinfo_new_fine_shift_image_in_spec_cubic_spline (shiftedIm, </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>                                                                   sub_shift)))</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>           {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in fineShiftImageInSpecCubicspline()!"</span>) ;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>           }</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>         }</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     {</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>       <span class="keywordflow">if</span> ( NULL == (fineShiftedIm = </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                sinfo_new_shift_image(shiftedIm,0.,sub_shift, ker ) ) )</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>           {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in fineShiftImageInSpecCubicspline()!"</span>) ;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>            <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>           }     </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     }</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     cpl_imagelist_set(retCube,fineShiftedIm,z);</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         cpl_image_delete (shiftedIm) ;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>         cpl_image_delete (fineShiftedIm) ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     <span class="keywordflow">if</span> ( shift_indicator != 0 && shift_indicator != 1 ) cpl_free(ker) ;</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>     <span class="keywordflow">return</span> retCube ;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> }</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__shift__images_8h_source.html b/html/sinfo__shift__images_8h_source.html
index 9196245..ad589e0 100644
--- a/html/sinfo__shift__images_8h_source.html
+++ b/html/sinfo__shift__images_8h_source.html
@@ -2,96 +2,127 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_shift_images.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_shift_images.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_SHIFT_IMAGES_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SHIFT_IMAGES_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/***************************************************************************</span>
-<a name="l00023"></a>00023 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00024"></a>00024 <span class="comment">*</span>
-<a name="l00025"></a>00025 <span class="comment">* "@(#) $Id: sinfo_shift_images.h,v 1.5 2008/02/12 14:21:57 amodigli Exp $"</span>
-<a name="l00026"></a>00026 <span class="comment">*</span>
-<a name="l00027"></a>00027 <span class="comment">* who       when      what</span>
-<a name="l00028"></a>00028 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">* schreib  05/03/03  created</span>
-<a name="l00030"></a>00030 <span class="comment">*/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/************************************************************************</span>
-<a name="l00033"></a>00033 <span class="comment"> * sinfo_shift_images.h</span>
-<a name="l00034"></a>00034 <span class="comment"> * shift two emission line images on each other</span>
-<a name="l00035"></a>00035 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment"> */</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*</span>
-<a name="l00039"></a>00039 <span class="comment"> * header files</span>
-<a name="l00040"></a>00040 <span class="comment"> */</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_image_ops.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00062"></a>00062 <span class="keywordtype">double</span> 
-<a name="l00063"></a>00063 sinfo_new_determine_shift_by_correlation (cpl_image * refImage,
-<a name="l00064"></a>00064                                      cpl_image * shiftedImage ) ;
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00078"></a>00078 cpl_image * 
-<a name="l00079"></a>00079 sinfo_new_shift_image_in_spec (cpl_image * shiftedImage, 
-<a name="l00080"></a>00080                                <span class="keywordtype">double</span> shift, 
-<a name="l00081"></a>00081                                <span class="keywordtype">double</span> * sub_shift ) ;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00093"></a>00093 cpl_image * 
-<a name="l00094"></a>00094 sinfo_new_fine_shift_image_in_spec_poly (cpl_image * shiftedImage, 
-<a name="l00095"></a>00095                                          <span class="keywordtype">double</span> sub_shift, 
-<a name="l00096"></a>00096                                          <span class="keywordtype">int</span> order ) ;
-<a name="l00097"></a>00097 
-<a name="l00107"></a>00107 cpl_image * 
-<a name="l00108"></a>00108 sinfo_new_fine_shift_image_in_spec_cubic_spline (cpl_image * shiftedImage, 
-<a name="l00109"></a>00109                                                  <span class="keywordtype">double</span> sub_shift ) ;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00125"></a>00125 cpl_imagelist  * 
-<a name="l00126"></a>00126 sinfo_align_cube_to_reference (cpl_imagelist * cube,
-<a name="l00127"></a>00127                                  cpl_image * refIm,
-<a name="l00128"></a>00128                                  <span class="keywordtype">int</span> order,
-<a name="l00129"></a>00129                                  <span class="keywordtype">int</span> shift_indicator ) ;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="preprocessor">#endif </span>
-<a name="l00135"></a>00135 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_shift_images.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_SHIFT_IMAGES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SHIFT_IMAGES_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/***************************************************************************</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* "@(#) $Id: sinfo_shift_images.h,v 1.5 2008/02/12 14:21:57 amodigli Exp $"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">* schreib  05/03/03  created</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * sinfo_shift_images.h</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * shift two emission line images on each other</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_image_ops.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_new_determine_shift_by_correlation (cpl_image * refImage,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                                      cpl_image * shiftedImage ) ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> cpl_image * </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_new_shift_image_in_spec (cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                <span class="keywordtype">double</span> shift, </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                                <span class="keywordtype">double</span> * sub_shift ) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> cpl_image * </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> sinfo_new_fine_shift_image_in_spec_poly (cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                          <span class="keywordtype">double</span> sub_shift, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                          <span class="keywordtype">int</span> order ) ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> cpl_image * </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> sinfo_new_fine_shift_image_in_spec_cubic_spline (cpl_image * shiftedImage, </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                                                  <span class="keywordtype">double</span> sub_shift ) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> cpl_imagelist  * </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> sinfo_align_cube_to_reference (cpl_imagelist * cube,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                  cpl_image * refIm,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                                  <span class="keywordtype">int</span> order,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                  <span class="keywordtype">int</span> shift_indicator ) ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__skycor_8c_source.html b/html/sinfo__skycor_8c_source.html
index b73f185..3013799 100644
--- a/html/sinfo__skycor_8c_source.html
+++ b/html/sinfo__skycor_8c_source.html
@@ -2,6540 +2,6571 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_skycor.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_skycor.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_skycor.c,v 1.50 2012/05/04 08:11:35 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/05/04 08:11:35 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.50 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <math.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_skycor.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_new_cube_ops.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_utl_cube2spectrum.h"</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                                Defines</span>
-<a name="l00054"></a>00054 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="preprocessor">#define BAND_H_WAVE_MIN 1.445 //not used</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define BAND_H_WAVE_MAX 1.820 //not used</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#define BAND_K_WAVE_MIN 1.945 //not used</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define BAND_K_WAVE_MAX 2.460 //not used</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#define BAND_J_WAVE_MIN 1.445 //not used</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define BAND_J_WAVE_MAX 1.82  //not used</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define SINFO_FIT_BKG_TEMP 280.</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#define SKY_THRES 0.95</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define SKY_LINE_MAX_CUT 4      </span><span class="comment">/* this should be 4 */</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#define SKY_LINE_MIN_CUT 4      </span><span class="comment">/* this should be 4 */</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#define XCOR_YSHIFT_KS_CLIP 5      </span><span class="comment">/* this should be 5 */</span>
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#define HPLANK 6.62606876e-34;   // J s</span>
-<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#define CLIGHT 2.99792458e+08;   // m / s</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#define KBOLTZ 1.3806503e-23;    // J / K</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#define AMOEBA_FTOL 1.e-5</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define NBOUND 14</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define NROT   25</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define N_ITER_FIT_LM 15</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define N_ITER_FIT_AMOEBA 10</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>
-<a name="l00083"></a>00083 <span class="keywordtype">double</span> sinfo_scale_fct=1;
-<a name="l00084"></a>00084 <span class="keyword">static</span> cpl_vector* sa_vx=NULL;
-<a name="l00085"></a>00085 <span class="keyword">static</span> cpl_vector* sa_vy=NULL;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">static</span> cpl_vector* sa_ox=NULL;
-<a name="l00088"></a>00088 <span class="keyword">static</span> cpl_vector* sa_oy=NULL;
-<a name="l00089"></a>00089 <span class="keyword">static</span> cpl_vector* sa_sy=NULL;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00092"></a>00092 <span class="comment">                            Functions prototypes</span>
-<a name="l00093"></a>00093 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00094"></a>00094 cpl_vector* sinfo_sky_background_estimate(cpl_vector *spectrum,
-<a name="l00095"></a>00095                                              <span class="keywordtype">int</span> msize,
-<a name="l00096"></a>00096                                              <span class="keywordtype">int</span> fsize);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00100"></a>00100 sinfo_scales_obj_sky_cubes(cpl_imagelist* obj_cub,
-<a name="l00101"></a>00101                             cpl_imagelist* sky_cub,
-<a name="l00102"></a>00102                             cpl_table* bkg,
-<a name="l00103"></a>00103                             cpl_table* rscale,
-<a name="l00104"></a>00104                             cpl_imagelist** obj_cor);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00107"></a>00107 sinfo_sub_thr_bkg_from_obj_cube(cpl_imagelist* obj_cub,
-<a name="l00108"></a>00108                 cpl_table* int_sky,
-<a name="l00109"></a>00109                 cpl_imagelist** obj_cor);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 <span class="keyword">static</span> cpl_vector*
-<a name="l00112"></a>00112 sinfo_filter_min(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="keyword">static</span> cpl_vector*
-<a name="l00115"></a>00115 sinfo_filter_max(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 <span class="keyword">static</span> cpl_vector*
-<a name="l00118"></a>00118 sinfo_filter_smo(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 <span class="keyword">static</span> cpl_imagelist*
-<a name="l00121"></a>00121 sinfo_cube_zshift_simple(cpl_imagelist* inp,
-<a name="l00122"></a>00122                         <span class="keyword">const</span> <span class="keywordtype">float</span> shift);
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00125"></a>00125 sinfo_optimise_sky_sub(<span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l00126"></a>00126                        <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw,
-<a name="l00127"></a>00127                        <span class="keyword">const</span> <span class="keywordtype">int</span> method,
-<a name="l00128"></a>00128                        <span class="keyword">const</span> <span class="keywordtype">int</span> do_rot,
-<a name="l00129"></a>00129                        cpl_table* lrange,
-<a name="l00130"></a>00130                        cpl_table* lambda,
-<a name="l00131"></a>00131                        cpl_table* lr41,
-<a name="l00132"></a>00132                        cpl_table* lr52,
-<a name="l00133"></a>00133                        cpl_table* lr63,
-<a name="l00134"></a>00134                        cpl_table* lr74,
-<a name="l00135"></a>00135                        cpl_table* lr02,
-<a name="l00136"></a>00136                        cpl_table* lr85,
-<a name="l00137"></a>00137                        cpl_table* lr20,
-<a name="l00138"></a>00138                        cpl_table* lr31,
-<a name="l00139"></a>00139                        cpl_table* lr42,
-<a name="l00140"></a>00140                        cpl_table* lr53,
-<a name="l00141"></a>00141                        cpl_table* lr64,
-<a name="l00142"></a>00142                        cpl_table* lr75,
-<a name="l00143"></a>00143                        cpl_table* lr86,
-<a name="l00144"></a>00144                        cpl_table* lr97,
-<a name="l00145"></a>00145                        cpl_table* lr00,
-<a name="l00146"></a>00146                        cpl_table** int_obj,
-<a name="l00147"></a>00147                        cpl_table** int_sky,
-<a name="l00148"></a>00148                        cpl_table** rscale);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00151"></a>00151 sinfo_shift_sky(cpl_frame** sky_frm,
-<a name="l00152"></a>00152                 cpl_table** int_sky,
-<a name="l00153"></a>00153                 <span class="keyword">const</span> <span class="keywordtype">double</span> zshift);
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00156"></a>00156 sinfo_xcorr(cpl_table* int_obj,
-<a name="l00157"></a>00157             cpl_table* int_sky,
-<a name="l00158"></a>00158             cpl_table* lambda,
-<a name="l00159"></a>00159             <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion,
-<a name="l00160"></a>00160             <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 <span class="keyword">static</span> cpl_table*
-<a name="l00163"></a>00163 sinfo_interpolate_sky(<span class="keyword">const</span> cpl_table* inp,<span class="keyword">const</span> cpl_table* lambdas);
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00166"></a>00166 sinfo_check_screw_values(cpl_table** int_obj,
-<a name="l00167"></a>00167                          cpl_table** int_sky,
-<a name="l00168"></a>00168                          cpl_table* grange,
-<a name="l00169"></a>00169                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol);
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00172"></a>00172 sinfo_choose_good_sky_pixels(cpl_frame* obj_frm,
-<a name="l00173"></a>00173                              cpl_image* r_img,
-<a name="l00174"></a>00174                              cpl_image* g_img,
-<a name="l00175"></a>00175                              <span class="keyword">const</span> <span class="keywordtype">double</span> min_frac,
-<a name="l00176"></a>00176                              cpl_image** mask);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00180"></a>00180 sinfo_sum_spectra(<span class="keyword">const</span> cpl_frame* obj,
-<a name="l00181"></a>00181                   <span class="keyword">const</span> cpl_frame* sky,
-<a name="l00182"></a>00182                   cpl_image* mask,
-<a name="l00183"></a>00183                   cpl_table* wrange,
-<a name="l00184"></a>00184                   <span class="keyword">const</span> <span class="keywordtype">int</span> llx,
-<a name="l00185"></a>00185                   <span class="keyword">const</span> <span class="keywordtype">int</span> lly,
-<a name="l00186"></a>00186                   <span class="keyword">const</span> <span class="keywordtype">int</span> urx,
-<a name="l00187"></a>00187                   <span class="keyword">const</span> <span class="keywordtype">int</span> ury,
-<a name="l00188"></a>00188                   cpl_table** int_obj,
-<a name="l00189"></a>00189                   cpl_table** int_sky);
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 <span class="keywordtype">int</span>
-<a name="l00192"></a>00192 sinfo_thermal_background2(cpl_table* int_sky,
-<a name="l00193"></a>00193                          cpl_table* lambda,
-<a name="l00194"></a>00194                          cpl_table* lrange,
-<a name="l00195"></a>00195               cpl_table** bkg);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00198"></a>00198 sinfo_thermal_background(cpl_table* int_sky,
-<a name="l00199"></a>00199                          cpl_table* lambda,
-<a name="l00200"></a>00200                          cpl_table* lrange,
-<a name="l00201"></a>00201                          <span class="keyword">const</span> <span class="keywordtype">double</span> temp,
-<a name="l00202"></a>00202                          <span class="keyword">const</span> <span class="keywordtype">int</span> niter,
-<a name="l00203"></a>00203                          <span class="keyword">const</span> <span class="keywordtype">int</span> filter_width,
-<a name="l00204"></a>00204                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l00205"></a>00205                          cpl_table** bkg,
-<a name="l00206"></a>00206                          <span class="keywordtype">int</span>* success_fit);
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00209"></a>00209 sinfo_object_flag_sky_pixels(cpl_frame* obj_frm,
-<a name="l00210"></a>00210                              cpl_table* lambda,
-<a name="l00211"></a>00211                              cpl_table* mrange,
-<a name="l00212"></a>00212                  cpl_imagelist* flag_data,
-<a name="l00213"></a>00213                              <span class="keyword">const</span> <span class="keywordtype">double</span> tol,
-<a name="l00214"></a>00214                              cpl_image** g_img,
-<a name="l00215"></a>00215                              cpl_image** r_img,
-<a name="l00216"></a>00216                              cpl_image** image);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00219"></a>00219 sinfo_object_flag_low_values(cpl_frame* obj_frm,
-<a name="l00220"></a>00220                              <span class="keyword">const</span> <span class="keywordtype">double</span> cnt,
-<a name="l00221"></a>00221                              <span class="keyword">const</span> <span class="keywordtype">double</span> sig,
-<a name="l00222"></a>00222                              cpl_imagelist** flag_data);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00225"></a>00225 sinfo_object_estimate_noise(cpl_frame* obj_frm, <span class="keyword">const</span> <span class="keywordtype">int</span> obj_noise_fit,
-<a name="l00226"></a>00226                             <span class="keywordtype">double</span>* centre, <span class="keywordtype">double</span>* noise);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00231"></a>00231 sinfo_set_ranges(cpl_frame* obj_frm,
-<a name="l00232"></a>00232                  cpl_frame* sky_frm,
-<a name="l00233"></a>00233                  cpl_parameterlist* cfg,
-<a name="l00234"></a>00234                  cpl_table** lambda,
-<a name="l00235"></a>00235                  cpl_table** lr41,
-<a name="l00236"></a>00236                  cpl_table** lr52,
-<a name="l00237"></a>00237                  cpl_table** lr63,
-<a name="l00238"></a>00238                  cpl_table** lr74,
-<a name="l00239"></a>00239                  cpl_table** lr02,
-<a name="l00240"></a>00240                  cpl_table** lr85,
-<a name="l00241"></a>00241                  cpl_table** lr20,
-<a name="l00242"></a>00242                  cpl_table** lr31,
-<a name="l00243"></a>00243                  cpl_table** lr42,
-<a name="l00244"></a>00244                  cpl_table** lr53,
-<a name="l00245"></a>00245                  cpl_table** lr64,
-<a name="l00246"></a>00246                  cpl_table** lr75,
-<a name="l00247"></a>00247                  cpl_table** lr86,
-<a name="l00248"></a>00248                  cpl_table** lr97,
-<a name="l00249"></a>00249                  cpl_table** lr00,
-<a name="l00250"></a>00250                  cpl_table** lrange,
-<a name="l00251"></a>00251                  cpl_table** grange,
-<a name="l00252"></a>00252                  cpl_table** lambdas,
-<a name="l00253"></a>00253                  cpl_table** mrange,
-<a name="l00254"></a>00254                  <span class="keywordtype">int</span>* sky_interp_sw,
-<a name="l00255"></a>00255                  <span class="keywordtype">double</span>* dispersion);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 <span class="keyword">static</span> cpl_table*
-<a name="l00259"></a>00259 sinfo_table_extract_rest(cpl_table* inp,
-<a name="l00260"></a>00260                          cpl_table* low,
-<a name="l00261"></a>00261                          cpl_table* med,
-<a name="l00262"></a>00262                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00265"></a>00265 sinfo_get_sub_regions(cpl_table* sky,
-<a name="l00266"></a>00266                       cpl_table* x1,
-<a name="l00267"></a>00267                       cpl_table* pos,
-<a name="l00268"></a>00268                       <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l00269"></a>00269                       <span class="keyword">const</span> <span class="keywordtype">int</span> npixw,
-<a name="l00270"></a>00270                       cpl_table** sub_regions);
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00274"></a>00274 sinfo_get_obj_sky_wav_sub(cpl_table* obj,
-<a name="l00275"></a>00275                           cpl_table* sky,
-<a name="l00276"></a>00276                           cpl_table* wav,
-<a name="l00277"></a>00277                           cpl_table* sel,
-<a name="l00278"></a>00278                           <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l00279"></a>00279                           cpl_table** sub_obj,
-<a name="l00280"></a>00280                           cpl_table** sub_sky,
-<a name="l00281"></a>00281                           cpl_table** sub_wav);
-<a name="l00282"></a>00282 
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284 <span class="keyword">static</span> cpl_table*
-<a name="l00285"></a>00285 sinfo_find_rot_waves(<span class="keyword">const</span> <span class="keywordtype">double</span> w_rot[],
-<a name="l00286"></a>00286                      <span class="keyword">const</span> <span class="keywordtype">int</span> npix_w,
-<a name="l00287"></a>00287                      <span class="keyword">const</span> <span class="keywordtype">double</span> w_step,
-<a name="l00288"></a>00288                      cpl_table* range);
-<a name="l00289"></a>00289 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00290"></a>00290 sinfo_compute_line_ratio(cpl_table* obj,
-<a name="l00291"></a>00291                          cpl_table* sky,
-<a name="l00292"></a>00292                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l00293"></a>00293                          <span class="keyword">const</span> <span class="keywordtype">int</span> meth,
-<a name="l00294"></a>00294                          <span class="keyword">const</span> cpl_table* sel_regions,
-<a name="l00295"></a>00295                          cpl_table* cont_regions,
-<a name="l00296"></a>00296                          <span class="keywordtype">double</span>* r);
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 <span class="keyword">static</span> cpl_table*
-<a name="l00299"></a>00299 sinfo_table_subtract_continuum(cpl_table* lin,cpl_table* cnt);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00302"></a>00302 sinfo_fit_bkg(<span class="keywordtype">double</span> p[]);
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00305"></a>00305 sinfo_fit_sky(<span class="keywordtype">double</span> p[]);
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00308"></a>00308 sinfo_get_line_ratio_amoeba(cpl_table* obj,
-<a name="l00309"></a>00309                             cpl_table* sky,
-<a name="l00310"></a>00310                             <span class="keywordtype">double</span>* r);
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312 <span class="keyword">static</span> cpl_table*
-<a name="l00313"></a>00313 sinfo_table_interpol(cpl_table* obj_lin,
-<a name="l00314"></a>00314                      cpl_table* obj_cnt,
-<a name="l00315"></a>00315                      cpl_table* sky_lin,
-<a name="l00316"></a>00316                      cpl_table* sky_cnt,
-<a name="l00317"></a>00317                      <span class="keyword">const</span> <span class="keywordtype">double</span> r);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 
-<a name="l00320"></a>00320 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00321"></a>00321 sinfo_get_line_ratio(cpl_table* obj_lin,
-<a name="l00322"></a>00322                      cpl_table* obj_cnt,
-<a name="l00323"></a>00323                      cpl_table* sky_lin,
-<a name="l00324"></a>00324                      cpl_table* sky_cnt,
-<a name="l00325"></a>00325                      <span class="keyword">const</span> <span class="keywordtype">int</span> method,
-<a name="l00326"></a>00326                      <span class="keywordtype">double</span>* r);
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 <span class="keyword">static</span> cpl_table*
-<a name="l00329"></a>00329 sinfo_table_shift_simple(cpl_table* inp,
-<a name="l00330"></a>00330                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00331"></a>00331                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift);
-<a name="l00332"></a>00332 <span class="comment">/*</span>
-<a name="l00333"></a>00333 <span class="comment">static int</span>
-<a name="l00334"></a>00334 <span class="comment">sinfo_table_set_column_invalid(cpl_table** int_sky,const char* col);</span>
-<a name="l00335"></a>00335 <span class="comment">*/</span>
-<a name="l00336"></a>00336 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00337"></a>00337 sinfo_table_set(cpl_table** out,
-<a name="l00338"></a>00338                 <span class="keyword">const</span> cpl_table* ref,
-<a name="l00339"></a>00339                 <span class="keyword">const</span> <span class="keywordtype">double</span> val,
-<a name="l00340"></a>00340                 <span class="keyword">const</span> <span class="keywordtype">double</span> tol);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00343"></a>00343 sinfo_table_threshold(cpl_table** t,
-<a name="l00344"></a>00344                       <span class="keyword">const</span> <span class="keywordtype">char</span>* column,
-<a name="l00345"></a>00345                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_cut,
-<a name="l00346"></a>00346                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_cut,
-<a name="l00347"></a>00347                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_ass,
-<a name="l00348"></a>00348                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_ass);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l00356"></a>00356                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00357"></a>00357                         <span class="keywordtype">double</span> *result);
-<a name="l00358"></a>00358 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_fitbkg_derivative(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l00359"></a>00359                                    <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l00360"></a>00360                        <span class="keywordtype">double</span> result[]);
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00364"></a>00364 sinfo_convolve_kernel(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad);
-<a name="l00365"></a>00365 <span class="keywordtype">int</span>
-<a name="l00366"></a>00366 sinfo_convolve_kernel2(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 <span class="keywordtype">int</span>
-<a name="l00369"></a>00369 sinfo_convolve_gauss(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm);
-<a name="l00370"></a>00370 <span class="keywordtype">int</span>
-<a name="l00371"></a>00371 sinfo_convolve_exp(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm);
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00374"></a>00374 sinfo_table_sky_obj_flag_nan(cpl_table** s,cpl_table** o, cpl_table** w);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00377"></a>00377 sinfo_table_set_nan_out_min_max(cpl_table** s,
-<a name="l00378"></a>00378                                 <span class="keyword">const</span> <span class="keywordtype">char</span>* c,
-<a name="l00379"></a>00379                                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,
-<a name="l00380"></a>00380                                 <span class="keyword">const</span> <span class="keywordtype">double</span> max);
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00386"></a>00386 sinfo_gaussian_amp(<span class="keywordtype">double</span> area,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off);
-<a name="l00387"></a>00387 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00388"></a>00388 sinfo_gaussian_area(<span class="keywordtype">double</span> amp,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off);
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390 <span class="keywordtype">int</span>
-<a name="l00391"></a>00391 sinfo_table_smooth_column(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* c, <span class="keyword">const</span> <span class="keywordtype">int</span> r);
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00394"></a>00394 sinfo_image_flag_nan(cpl_image** im);
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00397"></a>00397 sinfo_table_flag_nan(cpl_table** t,<span class="keyword">const</span> <span class="keywordtype">char</span>* label);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00402"></a>00402 sinfo_cnt_mask_thresh_and_obj_finite(<span class="keyword">const</span> cpl_image* mask,
-<a name="l00403"></a>00403                                      <span class="keyword">const</span> <span class="keywordtype">double</span> t,
-<a name="l00404"></a>00404                                      <span class="keyword">const</span> cpl_image* obj);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407 
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409 <span class="keyword">static</span> cpl_table*
-<a name="l00410"></a>00410 sinfo_interpolate(<span class="keyword">const</span> cpl_table* inp,
-<a name="l00411"></a>00411                   <span class="keyword">const</span> cpl_table* lambdas,
-<a name="l00412"></a>00412                   <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00413"></a>00413                   <span class="keyword">const</span> <span class="keywordtype">char</span>* method);
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415 <span class="keyword">static</span> cpl_table*
-<a name="l00416"></a>00416 sinfo_image2table(<span class="keyword">const</span> cpl_image* im);
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00419"></a>00419 sinfo_table_extract_finite(<span class="keyword">const</span> cpl_table* in1,
-<a name="l00420"></a>00420                            <span class="keyword">const</span> cpl_table* in2,
-<a name="l00421"></a>00421                                  cpl_table** ou1,
-<a name="l00422"></a>00422                                  cpl_table** ou2);
-<a name="l00423"></a>00423 
-<a name="l00424"></a>00424 <span class="keyword">static</span> cpl_table*
-<a name="l00425"></a>00425 sinfo_slice_z(<span class="keyword">const</span> cpl_imagelist* cin,<span class="keyword">const</span> <span class="keywordtype">int</span> i,<span class="keyword">const</span> <span class="keywordtype">int</span> j);
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429 <span class="keyword">static</span> cpl_imagelist*
-<a name="l00430"></a>00430 sinfo_imagelist_select_range(<span class="keyword">const</span> cpl_imagelist* inp,
-<a name="l00431"></a>00431                                   <span class="keyword">const</span> cpl_table* full,
-<a name="l00432"></a>00432                                   <span class="keyword">const</span> cpl_table* good,
-<a name="l00433"></a>00433                                   <span class="keyword">const</span> <span class="keywordtype">double</span> tol);
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437 <span class="keyword">static</span> cpl_table*
-<a name="l00438"></a>00438 sinfo_table_select_range(cpl_table* inp,
-<a name="l00439"></a>00439                               cpl_table* ref,
-<a name="l00440"></a>00440                               <span class="keyword">const</span> <span class="keywordtype">double</span> tol);
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00443"></a>00443 sinfo_table_fill_column_over_range(cpl_table** inp,
-<a name="l00444"></a>00444                                    <span class="keyword">const</span> cpl_table* ref,
-<a name="l00445"></a>00445                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00446"></a>00446                                    <span class="keyword">const</span> <span class="keywordtype">double</span> val,
-<a name="l00447"></a>00447                                    <span class="keyword">const</span> <span class="keywordtype">double</span> tol);
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00453"></a>00453 sinfo_table_column_dindgen(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* label);
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467 
-<a name="l00469"></a>00469 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00474"></a>00474 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00475"></a>00475 
-<a name="l00482"></a>00482 sinfo_skycor_qc*
-<a name="l00483"></a>00483 sinfo_skycor_qc_new(<span class="keywordtype">void</span>)
-<a name="l00484"></a>00484  {
-<a name="l00485"></a>00485    sinfo_skycor_qc * sqc;
-<a name="l00486"></a>00486    sqc= cpl_malloc(<span class="keyword">sizeof</span>(sinfo_skycor_qc));
-<a name="l00487"></a>00487 
-<a name="l00488"></a>00488    sqc->th_fit=0;
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490    <span class="keywordflow">return</span> sqc;
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492 }
-<a name="l00499"></a>00499 <span class="keywordtype">void</span>
-<a name="l00500"></a>00500 sinfo_skycor_qc_delete(sinfo_skycor_qc** sqc)
-<a name="l00501"></a>00501 {
-<a name="l00502"></a>00502   <span class="keywordflow">if</span>((*sqc) != NULL) {
-<a name="l00503"></a>00503     cpl_free(*sqc);
-<a name="l00504"></a>00504     *sqc=NULL;
-<a name="l00505"></a>00505   }
-<a name="l00506"></a>00506 }
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509 
-<a name="l00520"></a>00520 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00521"></a>00521 <span class="keywordtype">int</span>
-<a name="l00522"></a>00522 sinfo_skycor(cpl_parameterlist * config,
-<a name="l00523"></a>00523              cpl_frame* obj_frm,
-<a name="l00524"></a>00524              cpl_frame* sky_frm,
-<a name="l00525"></a>00525              sinfo_skycor_qc* sqc,
-<a name="l00526"></a>00526              cpl_imagelist** obj_cor,
-<a name="l00527"></a>00527              cpl_table** int_obj)
-<a name="l00528"></a>00528 {
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530   cpl_table* bkg=NULL;
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532   cpl_table* lambda=NULL;
-<a name="l00533"></a>00533   cpl_table* lr41=NULL;
-<a name="l00534"></a>00534   cpl_table* lr52=NULL;
-<a name="l00535"></a>00535   cpl_table* lr63=NULL;
-<a name="l00536"></a>00536   cpl_table* lr74=NULL;
-<a name="l00537"></a>00537   cpl_table* lr02=NULL;
-<a name="l00538"></a>00538   cpl_table* lr85=NULL;
-<a name="l00539"></a>00539   cpl_table* lr20=NULL;
-<a name="l00540"></a>00540   cpl_table* lr31=NULL;
-<a name="l00541"></a>00541   cpl_table* lr42=NULL;
-<a name="l00542"></a>00542   cpl_table* lr53=NULL;
-<a name="l00543"></a>00543   cpl_table* lr64=NULL;
-<a name="l00544"></a>00544   cpl_table* lr75=NULL;
-<a name="l00545"></a>00545   cpl_table* lr86=NULL;
-<a name="l00546"></a>00546   cpl_table* lr97=NULL;
-<a name="l00547"></a>00547   cpl_table* lr00=NULL;
-<a name="l00548"></a>00548   cpl_table* lrange=NULL;
-<a name="l00549"></a>00549   cpl_table* mrange=NULL;
-<a name="l00550"></a>00550   cpl_table* grange=NULL;
-<a name="l00551"></a>00551   cpl_table* lambdas=NULL;
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553   cpl_table* int_sky=NULL;
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555   cpl_image* mask=NULL;
-<a name="l00556"></a>00556   cpl_image* gpix=NULL;
-<a name="l00557"></a>00557   cpl_image* ratio=NULL;
-<a name="l00558"></a>00558   cpl_image* ima_sky=NULL;
-<a name="l00559"></a>00559   cpl_imagelist* fdata=NULL;
-<a name="l00560"></a>00560   cpl_table* rscale=NULL;
-<a name="l00561"></a>00561   cpl_parameter* p=NULL;
-<a name="l00562"></a>00562 
-<a name="l00563"></a>00563   <span class="keywordtype">int</span> th_fit=0;
-<a name="l00564"></a>00564   <span class="keywordtype">double</span> dispersion=0;
-<a name="l00565"></a>00565   <span class="keywordtype">double</span> noise=0;
-<a name="l00566"></a>00566   <span class="comment">//double temp=252.69284;</span>
-<a name="l00567"></a>00567   <span class="keywordtype">double</span> centre=0;
-<a name="l00568"></a>00568   <span class="keywordtype">int</span> sky_interp_sw=0;
-<a name="l00569"></a>00569   <span class="keywordtype">double</span> wshift=0;
-<a name="l00570"></a>00570   <span class="keywordtype">double</span> pshift=0;
-<a name="l00571"></a>00571   <span class="keywordtype">int</span> method=0;
-<a name="l00572"></a>00572   <span class="keywordtype">int</span> do_rot=0;
-<a name="l00573"></a>00573   <span class="keywordtype">int</span> obj_noise_fit=0;
-<a name="l00574"></a>00574   <span class="keywordtype">int</span> niter=3;
-<a name="l00575"></a>00575   <span class="keywordtype">double</span> min_frac=0.8;
-<a name="l00576"></a>00576   <span class="keywordtype">double</span> line_hw=7;
-<a name="l00577"></a>00577   <span class="keywordtype">double</span> fit_temp=280;
-<a name="l00578"></a>00578   <span class="keywordtype">int</span> filter_width=SINFO_SKY_BKG_FILTER_WIDTH;
-<a name="l00579"></a>00579   <span class="keywordtype">int</span> llx=0;
-<a name="l00580"></a>00580   <span class="keywordtype">int</span> lly=0;
-<a name="l00581"></a>00581   <span class="keywordtype">int</span> urx=64;
-<a name="l00582"></a>00582   <span class="keywordtype">int</span> ury=64;
-<a name="l00583"></a>00583   cpl_imagelist* obj_cub=NULL;
-<a name="l00584"></a>00584   cpl_imagelist* sky_cub=NULL;
-<a name="l00585"></a>00585   <span class="keywordtype">int</span> sub_thr_bkg=0;
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587 
-<a name="l00588"></a>00588   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00589"></a>00589                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.min_frac"</span>));
-<a name="l00590"></a>00590   check_nomsg(min_frac=cpl_parameter_get_double(p));
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00593"></a>00593                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.line_half_width"</span>));
-<a name="l00594"></a>00594   check_nomsg(line_hw=cpl_parameter_get_double(p));
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00599"></a>00599                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sky_bkg_filter_width"</span>));
-<a name="l00600"></a>00600   check_nomsg(filter_width=cpl_parameter_get_int(p));
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00603"></a>00603                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.scale_method"</span>));
-<a name="l00604"></a>00604   check_nomsg(method=cpl_parameter_get_int(p));
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606 
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00609"></a>00609                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>));
-<a name="l00610"></a>00610   check_nomsg(do_rot=cpl_parameter_get_bool(p));
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00614"></a>00614                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sub_thr_bkg_from_obj"</span>));
-<a name="l00615"></a>00615   check_nomsg(sub_thr_bkg=cpl_parameter_get_bool(p));
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00619"></a>00619                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.fit_obj_noise"</span>));
-<a name="l00620"></a>00620   check_nomsg(obj_noise_fit=cpl_parameter_get_bool(p));
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622 
-<a name="l00623"></a>00623   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00624"></a>00624                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.niter"</span>));
-<a name="l00625"></a>00625   check_nomsg(niter=cpl_parameter_get_int(p));
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627 
-<a name="l00628"></a>00628   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00629"></a>00629                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.pshift"</span>));
-<a name="l00630"></a>00630   check_nomsg(pshift=cpl_parameter_get_double(p));
-<a name="l00631"></a>00631 
-<a name="l00632"></a>00632 
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00635"></a>00635                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.llx"</span>));
-<a name="l00636"></a>00636   check_nomsg(llx=cpl_parameter_get_int(p));
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00640"></a>00640                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.lly"</span>));
-<a name="l00641"></a>00641   check_nomsg(lly=cpl_parameter_get_int(p));
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00645"></a>00645                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.urx"</span>));
-<a name="l00646"></a>00646   check_nomsg(urx=cpl_parameter_get_int(p));
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648 
-<a name="l00649"></a>00649   check_nomsg(p=cpl_parameterlist_find(config,
-<a name="l00650"></a>00650                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.ury"</span>));
-<a name="l00651"></a>00651   check_nomsg(ury=cpl_parameter_get_int(p));
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653   <span class="comment">// set wavelength ranges</span>
-<a name="l00654"></a>00654   sinfo_msg(<span class="stringliteral">"Set wavelength ranges"</span>);
-<a name="l00655"></a>00655   ck0(sinfo_set_ranges(obj_frm,sky_frm,config,&lambda,
-<a name="l00656"></a>00656                        &lr41,&lr52,&lr63,&lr74,&lr02,&lr85,&lr20,&lr31,&lr42,
-<a name="l00657"></a>00657                        &lr53,&lr64,&lr75,&lr86,&lr97,&lr00,
-<a name="l00658"></a>00658                        &lrange,&grange,&lambdas,&mrange,&sky_interp_sw,
-<a name="l00659"></a>00659                        &dispersion),<span class="stringliteral">"Setting wavelength ranges"</span>);
-<a name="l00660"></a>00660   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange.fits",</span>
-<a name="l00661"></a>00661   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663   <span class="comment">/*</span>
-<a name="l00664"></a>00664 <span class="comment">  sinfo_msg("lr20=%d",cpl_table_get_nrow(lr20));</span>
-<a name="l00665"></a>00665 <span class="comment">  sinfo_msg("lr31=%d",cpl_table_get_nrow(lr31));</span>
-<a name="l00666"></a>00666 <span class="comment">  sinfo_msg("lr42=%d",cpl_table_get_nrow(lr42));</span>
-<a name="l00667"></a>00667 <span class="comment">  sinfo_msg("lr53=%d",cpl_table_get_nrow(lr53));</span>
-<a name="l00668"></a>00668 <span class="comment">  sinfo_msg("lr64=%d",cpl_table_get_nrow(lr64));</span>
-<a name="l00669"></a>00669 <span class="comment">  sinfo_msg("lr75=%d",cpl_table_get_nrow(lr75));</span>
-<a name="l00670"></a>00670 <span class="comment">  sinfo_msg("lr86=%d",cpl_table_get_nrow(lr86));</span>
-<a name="l00671"></a>00671 <span class="comment">  sinfo_msg("lr97=%d",cpl_table_get_nrow(lr97));</span>
-<a name="l00672"></a>00672 <span class="comment">  sinfo_msg("lr00=%d",cpl_table_get_nrow(lr00));</span>
-<a name="l00673"></a>00673 <span class="comment"></span>
-<a name="l00674"></a>00674 <span class="comment">  sinfo_msg("min_lrange=%f",cpl_table_get_column_min(lrange,"INDEX"));</span>
-<a name="l00675"></a>00675 <span class="comment">  sinfo_msg("min_grange=%f",cpl_table_get_column_min(grange,"INDEX"));</span>
-<a name="l00676"></a>00676 <span class="comment">  sinfo_msg("min_srange=%f",cpl_table_get_column_min(lambdas,"WAVE"));</span>
-<a name="l00677"></a>00677 <span class="comment">  sinfo_msg("min_mrange=%f",cpl_table_get_column_min(mrange,"INDEX"));</span>
-<a name="l00678"></a>00678 <span class="comment"></span>
-<a name="l00679"></a>00679 <span class="comment">  sinfo_msg("max_lrange=%f",cpl_table_get_column_max(lrange,"INDEX"));</span>
-<a name="l00680"></a>00680 <span class="comment">  sinfo_msg("max_grange=%f",cpl_table_get_column_max(grange,"INDEX"));</span>
-<a name="l00681"></a>00681 <span class="comment">  sinfo_msg("max_srange=%f",cpl_table_get_column_max(lambdas,"WAVE"));</span>
-<a name="l00682"></a>00682 <span class="comment">  sinfo_msg("max_mrange=%f",cpl_table_get_column_max(mrange,"INDEX"));</span>
-<a name="l00683"></a>00683 <span class="comment">  */</span>
-<a name="l00684"></a>00684 
-<a name="l00685"></a>00685   sinfo_msg(<span class="stringliteral">"Estimate noise"</span>);
-<a name="l00686"></a>00686   ck0(sinfo_object_estimate_noise(obj_frm,obj_noise_fit,&centre,&noise),
-<a name="l00687"></a>00687                                   <span class="stringliteral">"Estimating noise"</span>);
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689   sinfo_msg(<span class="stringliteral">"Background=%f Noise=%f"</span>,centre,noise);
-<a name="l00690"></a>00690   sinfo_msg(<span class="stringliteral">"Flag object low_levels"</span>);
-<a name="l00691"></a>00691   ck0(sinfo_object_flag_low_values(obj_frm,centre,noise,&fdata),
-<a name="l00692"></a>00692       <span class="stringliteral">"Flagging low pix"</span>);
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694   <span class="comment">//cpl_imagelist_save(fdata,"out_fdata.fits",</span>
-<a name="l00695"></a>00695   <span class="comment">//                   CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00696"></a>00696 
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698   sinfo_msg(<span class="stringliteral">"Flag sky pixels"</span>);
-<a name="l00699"></a>00699   ck0(sinfo_object_flag_sky_pixels(obj_frm,lambda,mrange,fdata,dispersion,
-<a name="l00700"></a>00700                                    &gpix,&ratio,&ima_sky),
-<a name="l00701"></a>00701                                    <span class="stringliteral">"Flagging sky pixels"</span>);
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703   <span class="comment">//cpl_image_save(gpix,"out_gpix.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00704"></a>00704   <span class="comment">//                 NULL,CPL_IO_DEFAULT);</span>
-<a name="l00705"></a>00705   <span class="comment">//cpl_image_save(ratio,"out_ratio.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l00706"></a>00706   <span class="comment">//                 NULL,CPL_IO_DEFAULT);</span>
-<a name="l00707"></a>00707   <span class="comment">//cpl_image_save(ima_sky,"out_ima_sky.fits",</span>
-<a name="l00708"></a>00708   <span class="comment">//               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713   <span class="comment">// choose pixels which seems to be good sky pixels</span>
-<a name="l00714"></a>00714   <span class="comment">// (95% spectral pixels are flagged)</span>
-<a name="l00715"></a>00715   sinfo_msg(<span class="stringliteral">"Choose good sky (with > 95%% good spectral) pixels"</span>);
-<a name="l00716"></a>00716   ck0(sinfo_choose_good_sky_pixels(obj_frm,ratio,gpix,min_frac,&mask),
-<a name="l00717"></a>00717       <span class="stringliteral">"Choosing good sky pixels"</span>);
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719   <span class="comment">//cpl_image_save(mask,"out_mask.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721   <span class="comment">// threshold ratio for fraction 'minfract' of spatial pixels to be 'sky'</span>
-<a name="l00722"></a>00722   <span class="comment">//sinfo_msg("To do: flag_threshold_sky_pixels");</span>
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724 
-<a name="l00725"></a>00725   <span class="comment">// sum spectra of flagged pixels in object and sky frames</span>
-<a name="l00726"></a>00726   sinfo_msg(<span class="stringliteral">"Sum obj and sky spectra"</span>);
-<a name="l00727"></a>00727   ck0(sinfo_sum_spectra(obj_frm,sky_frm,mask,lambda,llx,lly,urx,ury,int_obj,
-<a name="l00728"></a>00728             &int_sky),<span class="stringliteral">"summing obj & sky spectra"</span>);
-<a name="l00729"></a>00729 
-<a name="l00730"></a>00730   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span>
-<a name="l00731"></a>00731   <span class="comment">// CPL_IO_DEFAULT));</span>
-<a name="l00732"></a>00732   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span>
-<a name="l00733"></a>00733   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735    <span class="comment">// Computes thermal background</span>
-<a name="l00736"></a>00736   sinfo_msg(<span class="stringliteral">"Computes thermal background"</span>);
-<a name="l00737"></a>00737   <span class="comment">/*</span>
-<a name="l00738"></a>00738 <span class="comment">  ck0(sinfo_thermal_background2(int_sky,lambda,lrange,&bkg),</span>
-<a name="l00739"></a>00739 <span class="comment">     "getting termal bkg");</span>
-<a name="l00740"></a>00740 <span class="comment">  */</span>
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742   ck0(sinfo_thermal_background(int_sky,lambda,lrange,fit_temp,niter,
-<a name="l00743"></a>00743                                filter_width,dispersion,&bkg,&th_fit),
-<a name="l00744"></a>00744       <span class="stringliteral">"getting termal bkg"</span>);
-<a name="l00745"></a>00745 
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_SKY_ORG"</span>,int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l00748"></a>00748   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_BKG_FIT"</span>,bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l00749"></a>00749   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_BKG_SMO"</span>,int_sky,
-<a name="l00750"></a>00750                                          <span class="stringliteral">"INT_BKG_SMO"</span>));
-<a name="l00751"></a>00751 
-<a name="l00752"></a>00752   sqc->th_fit=th_fit;
-<a name="l00753"></a>00753   <span class="comment">//check_nomsg(cpl_table_save(bkg,NULL,NULL,"out_thermal_background.fits",</span>
-<a name="l00754"></a>00754   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00755"></a>00755 
-<a name="l00756"></a>00756 
-<a name="l00757"></a>00757   <span class="comment">/*</span>
-<a name="l00758"></a>00758 <span class="comment">  ck0(sinfo_pro_save_tbl(bkg,set,set,"out_thermal_background.fits",</span>
-<a name="l00759"></a>00759 <span class="comment">             "THERMAL_BACKGROUND",NULL,cpl_func,config),</span>
-<a name="l00760"></a>00760 <span class="comment">      "Error saving %s","THERMAL_BACKGROUND");</span>
-<a name="l00761"></a>00761 <span class="comment">  */</span>
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763   sinfo_msg(<span class="stringliteral">"Subtracts thermal background from integrated OH spectrum"</span>);
-<a name="l00764"></a>00764   <span class="comment">//sinfo_msg("nrow=%d %d",cpl_table_get_nrow(int_sky),</span>
-<a name="l00765"></a>00765   <span class="comment">//                       cpl_table_get_nrow(bkg));</span>
-<a name="l00766"></a>00766   check_nomsg(cpl_table_duplicate_column(int_sky,<span class="stringliteral">"BKG"</span>,bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l00767"></a>00767   check_nomsg(cpl_table_duplicate_column(int_sky,<span class="stringliteral">"INT0"</span>,int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l00768"></a>00768   check_nomsg(cpl_table_subtract_columns(int_sky,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"BKG"</span>));
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770 
-<a name="l00771"></a>00771 
-<a name="l00772"></a>00772   <span class="comment">//check_nomsg(cpl_table_duplicate_column(int_obj,"INT",</span>
-<a name="l00773"></a>00773   <span class="comment">//                                         int_obj,"INT_OBJ_COR"));</span>
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775   <span class="keywordflow">if</span>(sub_thr_bkg == 1) {
-<a name="l00776"></a>00776     check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"THR_BKG"</span>,bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l00777"></a>00777     check_nomsg(cpl_table_subtract_columns(*int_obj,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"THR_BKG"</span>));
-<a name="l00778"></a>00778   }
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span>
-<a name="l00781"></a>00781   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00782"></a>00782   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span>
-<a name="l00783"></a>00783   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00784"></a>00784 
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786   <span class="comment">//check_nomsg(cpl_table_erase_column(int_sky,"BKG"));</span>
-<a name="l00787"></a>00787   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange_6.fits",</span>
-<a name="l00788"></a>00788   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00789"></a>00789 
-<a name="l00790"></a>00790    <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_sub.fits",</span>
-<a name="l00791"></a>00791    <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793 
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795   <span class="comment">// check for screw values at ends of spectrum</span>
-<a name="l00796"></a>00796   sinfo_msg(<span class="stringliteral">"Checks for screw values at ends of spectrum"</span>);
-<a name="l00797"></a>00797   sinfo_check_screw_values(int_obj,&int_sky,grange,dispersion);
-<a name="l00798"></a>00798   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange_7.fits",</span>
-<a name="l00799"></a>00799   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00800"></a>00800   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj_chk.fits",</span>
-<a name="l00801"></a>00801   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00802"></a>00802   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_chk.fits",</span>
-<a name="l00803"></a>00803   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805 
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807   <span class="keywordflow">if</span>(sky_interp_sw == 1) {
-<a name="l00808"></a>00808     sinfo_msg(<span class="stringliteral">"Interpolate sky if necessary"</span>);
-<a name="l00809"></a>00809     sinfo_interpolate_sky(int_sky,lambdas);
-<a name="l00810"></a>00810   }
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813   sinfo_msg(<span class="stringliteral">"Crosscorrelate obj & sky to check for lambda offset"</span>);
-<a name="l00814"></a>00814   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj_chk.fits",</span>
-<a name="l00815"></a>00815   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00816"></a>00816   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_chk.fits",</span>
-<a name="l00817"></a>00817   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00818"></a>00818   check_nomsg(wshift=sinfo_xcorr(*int_obj,int_sky,lambda,dispersion,line_hw));
-<a name="l00819"></a>00819 
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821   <span class="comment">//wshift=-1.7164495*dispersion;</span>
-<a name="l00822"></a>00822   sinfo_msg(<span class="stringliteral">"Dispersion=%f"</span>,dispersion);
-<a name="l00823"></a>00823   <span class="keywordflow">if</span>(pshift == 0) {
-<a name="l00824"></a>00824     pshift=wshift/dispersion;
-<a name="l00825"></a>00825   }
-<a name="l00826"></a>00826   sinfo_msg(<span class="stringliteral">"Shift sky of %f pixels toward object"</span>,pshift);
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828   check_nomsg(sinfo_shift_sky(&sky_frm,&int_sky,pshift));
-<a name="l00829"></a>00829   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_pip3_int_obj.fits",</span>
-<a name="l00830"></a>00830   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00831"></a>00831   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_pip3_int_sky.fits",</span>
-<a name="l00832"></a>00832   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835   <span class="comment">//DEBUG</span>
-<a name="l00836"></a>00836   sinfo_msg(<span class="stringliteral">"Optimise sky subtraction"</span>);
-<a name="l00837"></a>00837   check_nomsg(sinfo_optimise_sky_sub(dispersion,line_hw,method,do_rot,
-<a name="l00838"></a>00838                                      lrange,lambda,
-<a name="l00839"></a>00839                                      lr41,lr52,lr63,lr74,lr02,lr85,
-<a name="l00840"></a>00840                                      lr20,lr31,lr42,lr53,lr64,lr75,
-<a name="l00841"></a>00841                      lr86,lr97,lr00,int_obj,&int_sky,
-<a name="l00842"></a>00842                      &rscale));
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span>
-<a name="l00846"></a>00846   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00847"></a>00847   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span>
-<a name="l00848"></a>00848   <span class="comment">//CPL_IO_DEFAULT));</span>
-<a name="l00849"></a>00849 
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851   sinfo_msg(<span class="stringliteral">"Apply same scaling to whole cubes"</span>);
-<a name="l00852"></a>00852 
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),
-<a name="l00855"></a>00855                                           CPL_TYPE_DOUBLE,0));
-<a name="l00856"></a>00856   cknull_nomsg(sky_cub=cpl_imagelist_load(cpl_frame_get_filename(sky_frm),
-<a name="l00857"></a>00857                                           CPL_TYPE_DOUBLE,0));
-<a name="l00858"></a>00858 
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860 
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862   <span class="keywordflow">if</span>(sub_thr_bkg == 1) {
-<a name="l00863"></a>00863     ck0_nomsg(sinfo_sub_thr_bkg_from_obj_cube(obj_cub,int_sky,obj_cor));
-<a name="l00864"></a>00864   } <span class="keywordflow">else</span> {
-<a name="l00865"></a>00865     check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));
-<a name="l00866"></a>00866   }
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868   ck0_nomsg(sinfo_scales_obj_sky_cubes(*obj_cor,sky_cub,bkg,rscale,obj_cor));
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"INT_OBJ_ORG"</span>));
-<a name="l00871"></a>00871   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"INT_OBJ_COR"</span>));
-<a name="l00872"></a>00872   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"SKYC"</span>,<span class="stringliteral">"INT_SKY_COR"</span>));
-<a name="l00873"></a>00873 
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875  cleanup:
-<a name="l00876"></a>00876   sinfo_free_table(&rscale);
-<a name="l00877"></a>00877   sinfo_free_imagelist(&fdata);
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879   sinfo_free_table(&bkg);
-<a name="l00880"></a>00880   sinfo_free_table(&lambda);
-<a name="l00881"></a>00881   sinfo_free_table(&lrange);
-<a name="l00882"></a>00882   sinfo_free_table(&mrange);
-<a name="l00883"></a>00883   sinfo_free_table(&grange);
-<a name="l00884"></a>00884   sinfo_free_table(&lambdas);
-<a name="l00885"></a>00885   sinfo_free_image(&mask);
-<a name="l00886"></a>00886 
-<a name="l00887"></a>00887   sinfo_free_table(&lr41);
-<a name="l00888"></a>00888   sinfo_free_table(&lr52);
-<a name="l00889"></a>00889   sinfo_free_table(&lr63);
-<a name="l00890"></a>00890   sinfo_free_table(&lr74);
-<a name="l00891"></a>00891   sinfo_free_table(&lr02);
-<a name="l00892"></a>00892   sinfo_free_table(&lr85);
-<a name="l00893"></a>00893   sinfo_free_table(&lr20);
-<a name="l00894"></a>00894   sinfo_free_table(&lr31);
-<a name="l00895"></a>00895   sinfo_free_table(&lr42);
-<a name="l00896"></a>00896   sinfo_free_table(&lr53);
-<a name="l00897"></a>00897   sinfo_free_table(&lr64);
-<a name="l00898"></a>00898   sinfo_free_table(&lr75);
-<a name="l00899"></a>00899   sinfo_free_table(&lr86);
-<a name="l00900"></a>00900   sinfo_free_table(&lr97);
-<a name="l00901"></a>00901   sinfo_free_table(&lr00);
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903   sinfo_free_image(&gpix);
-<a name="l00904"></a>00904   sinfo_free_image(&ratio);
-<a name="l00905"></a>00905   sinfo_free_image(&ima_sky);
-<a name="l00906"></a>00906   <span class="comment">//sinfo_free_table(&int_obj);</span>
-<a name="l00907"></a>00907   sinfo_free_table(&int_sky);
-<a name="l00908"></a>00908 
-<a name="l00909"></a>00909   sinfo_free_imagelist(&obj_cub);
-<a name="l00910"></a>00910   sinfo_free_imagelist(&sky_cub);
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00913"></a>00913     <span class="keywordflow">return</span> -1;
-<a name="l00914"></a>00914   } <span class="keywordflow">else</span> {
-<a name="l00915"></a>00915     <span class="keywordflow">return</span> 0;
-<a name="l00916"></a>00916   }
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918 
-<a name="l00919"></a>00919 }
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00933"></a>00933 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00934"></a>00934 
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00937"></a>00937 sinfo_sub_thr_bkg_from_obj_cube(cpl_imagelist* obj_cub,
-<a name="l00938"></a>00938                 cpl_table* int_sky,
-<a name="l00939"></a>00939                 cpl_imagelist** obj_cor)
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 {
-<a name="l00942"></a>00942   <span class="keywordtype">double</span>* pthr_bkg=NULL;
-<a name="l00943"></a>00943   <span class="keywordtype">int</span> zsz=0;
-<a name="l00944"></a>00944   <span class="keywordtype">int</span> k=0;
-<a name="l00945"></a>00945   cpl_image* imgo=NULL;
-<a name="l00946"></a>00946 
-<a name="l00947"></a>00947   check_nomsg(pthr_bkg=cpl_table_get_data_double(int_sky,<span class="stringliteral">"BKG"</span>));
-<a name="l00948"></a>00948   check_nomsg(zsz=cpl_imagelist_get_size(obj_cub));
-<a name="l00949"></a>00949   check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));
-<a name="l00950"></a>00950 
-<a name="l00951"></a>00951   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {
-<a name="l00952"></a>00952     check_nomsg(imgo=cpl_imagelist_get(obj_cub,k));
-<a name="l00953"></a>00953     check_nomsg(cpl_image_subtract_scalar(imgo,pthr_bkg[k]));
-<a name="l00954"></a>00954     check_nomsg(cpl_imagelist_set(*obj_cor,imgo,k));
-<a name="l00955"></a>00955   }
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957  cleanup:
-<a name="l00958"></a>00958   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00959"></a>00959     <span class="keywordflow">return</span> -1;
-<a name="l00960"></a>00960   } <span class="keywordflow">else</span> {
-<a name="l00961"></a>00961     <span class="keywordflow">return</span> 0;
-<a name="l00962"></a>00962   }
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964 }
-<a name="l00965"></a>00965 
-<a name="l00966"></a>00966 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00997"></a>00997 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00998"></a>00998 
-<a name="l00999"></a>00999 
-<a name="l01000"></a>01000 <span class="keywordtype">int</span>
-<a name="l01001"></a>01001 sinfo_set_ranges(cpl_frame* obj_frm,
-<a name="l01002"></a>01002                  cpl_frame* sky_frm,
-<a name="l01003"></a>01003                  cpl_parameterlist* cfg,
-<a name="l01004"></a>01004                  cpl_table** lambda,
-<a name="l01005"></a>01005                  cpl_table** lr41,
-<a name="l01006"></a>01006                  cpl_table** lr52,
-<a name="l01007"></a>01007                  cpl_table** lr63,
-<a name="l01008"></a>01008                  cpl_table** lr74,
-<a name="l01009"></a>01009                  cpl_table** lr02,
-<a name="l01010"></a>01010                  cpl_table** lr85,
-<a name="l01011"></a>01011                  cpl_table** lr20,
-<a name="l01012"></a>01012                  cpl_table** lr31,
-<a name="l01013"></a>01013                  cpl_table** lr42,
-<a name="l01014"></a>01014                  cpl_table** lr53,
-<a name="l01015"></a>01015                  cpl_table** lr64,
-<a name="l01016"></a>01016                  cpl_table** lr75,
-<a name="l01017"></a>01017                  cpl_table** lr86,
-<a name="l01018"></a>01018                  cpl_table** lr97,
-<a name="l01019"></a>01019                  cpl_table** lr00,
-<a name="l01020"></a>01020                  cpl_table** lrange,
-<a name="l01021"></a>01021                  cpl_table** grange,
-<a name="l01022"></a>01022                  cpl_table** lambdas,
-<a name="l01023"></a>01023                  cpl_table** mrange,
-<a name="l01024"></a>01024                  <span class="keywordtype">int</span>* sky_interp_sw,
-<a name="l01025"></a>01025                  <span class="keywordtype">double</span>* dispersion)
-<a name="l01026"></a>01026 
-<a name="l01027"></a>01027 {
-<a name="l01028"></a>01028 
-<a name="l01029"></a>01029   cpl_propertylist* plist=NULL;
-<a name="l01030"></a>01030   <span class="keywordtype">double</span> crval_obj=0;
-<a name="l01031"></a>01031   <span class="keywordtype">double</span> cdelt_obj=0;
-<a name="l01032"></a>01032   <span class="keywordtype">double</span> crpix_obj=0;
-<a name="l01033"></a>01033   <span class="keywordtype">int</span> xsize_obj=0;
-<a name="l01034"></a>01034   <span class="keywordtype">int</span> ysize_obj=0;
-<a name="l01035"></a>01035   <span class="keywordtype">int</span> zsize_obj=0;
-<a name="l01036"></a>01036 
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038   <span class="keywordtype">double</span> crval_sky=0;
-<a name="l01039"></a>01039   <span class="keywordtype">double</span> cdelt_sky=0;
-<a name="l01040"></a>01040   <span class="keywordtype">double</span> crpix_sky=0;
-<a name="l01041"></a>01041   <span class="keywordtype">int</span> xsize_sky=0;
-<a name="l01042"></a>01042   <span class="keywordtype">int</span> ysize_sky=0;
-<a name="l01043"></a>01043   <span class="keywordtype">int</span> zsize_sky=0;
-<a name="l01044"></a>01044 
-<a name="l01045"></a>01045   <span class="keywordtype">int</span> nrow=0;
-<a name="l01046"></a>01046   <span class="comment">/* wavelength min-max J-H-K band */</span>
-<a name="l01047"></a>01047   <span class="keyword">const</span> <span class="keywordtype">double</span> w_j_min=1.100;
-<a name="l01048"></a>01048   <span class="keyword">const</span> <span class="keywordtype">double</span> w_j_max=1.400;
-<a name="l01049"></a>01049   <span class="keyword">const</span> <span class="keywordtype">double</span> w_h_min=1.445;
-<a name="l01050"></a>01050   <span class="keyword">const</span> <span class="keywordtype">double</span> w_h_max=1.820;
-<a name="l01051"></a>01051   <span class="keyword">const</span> <span class="keywordtype">double</span> w_k_min=1.945;
-<a name="l01052"></a>01052   <span class="keyword">const</span> <span class="keywordtype">double</span> w_k_max=2.460;
-<a name="l01053"></a>01053 
-<a name="l01054"></a>01054   <span class="keywordtype">double</span> ws=0;
-<a name="l01055"></a>01055   <span class="keywordtype">double</span> we=0;
-<a name="l01056"></a>01056   <span class="keywordtype">double</span> mean=0;
-<a name="l01057"></a>01057 
-<a name="l01058"></a>01058   cpl_parameter* p=NULL;
-<a name="l01059"></a>01059 
-<a name="l01060"></a>01060   <span class="comment">/* wavelength boundaries between line groups corresponding</span>
-<a name="l01061"></a>01061 <span class="comment">     to transitions 5-2 to 9-7 */</span>
-<a name="l01062"></a>01062   <span class="keywordtype">double</span> w_bound[NBOUND]={1.067,1.125,1.196,1.252,1.289,
-<a name="l01063"></a>01063                           1.400,1.472,1.5543,1.6356,1.7253,
-<a name="l01064"></a>01064                           1.840,1.9570,2.095,2.300};
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066   cpl_table* tmp_tbl=NULL;
-<a name="l01067"></a>01067   cpl_table* add1=NULL;
-<a name="l01068"></a>01068 
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070 
-<a name="l01071"></a>01071   <span class="comment">/* Get Object relevant information */</span>
-<a name="l01072"></a>01072   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));
-<a name="l01073"></a>01073   check_nomsg(crval_obj=sinfo_pfits_get_crval3(plist));
-<a name="l01074"></a>01074   check_nomsg(cdelt_obj=sinfo_pfits_get_cdelt3(plist));
-<a name="l01075"></a>01075   check_nomsg(crpix_obj=sinfo_pfits_get_crpix3(plist));
-<a name="l01076"></a>01076   check_nomsg(xsize_obj=sinfo_pfits_get_naxis1(plist));
-<a name="l01077"></a>01077   check_nomsg(ysize_obj=sinfo_pfits_get_naxis2(plist));
-<a name="l01078"></a>01078   check_nomsg(zsize_obj=sinfo_pfits_get_naxis3(plist));
-<a name="l01079"></a>01079 
-<a name="l01080"></a>01080   sinfo_free_propertylist(&plist);
-<a name="l01081"></a>01081   *dispersion=cdelt_obj;
-<a name="l01082"></a>01082 
-<a name="l01083"></a>01083   <span class="comment">/* defines object related wavelength ranges */</span>
-<a name="l01084"></a>01084   check_nomsg(*lambda=cpl_table_new(zsize_obj));
-<a name="l01085"></a>01085   cpl_table_new_column(*lambda,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);
-<a name="l01086"></a>01086   cpl_table_new_column(*lambda,<span class="stringliteral">"INDEX"</span>,CPL_TYPE_DOUBLE);
-<a name="l01087"></a>01087   check_nomsg(sinfo_table_column_dindgen(lambda,<span class="stringliteral">"INDEX"</span>));
-<a name="l01088"></a>01088   check_nomsg(sinfo_table_column_dindgen(lambda,<span class="stringliteral">"WAVE"</span>));
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090   check_nomsg(cpl_table_add_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,1.));
-<a name="l01091"></a>01091   check_nomsg(cpl_table_subtract_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,crpix_obj));
-<a name="l01092"></a>01092   check_nomsg(cpl_table_multiply_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,cdelt_obj));
-<a name="l01093"></a>01093   check_nomsg(cpl_table_add_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,crval_obj));
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096 
-<a name="l01097"></a>01097 
-<a name="l01098"></a>01098   cknull_nomsg(*lr41=sinfo_where_tab_min_max(*lambda,
-<a name="l01099"></a>01099                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01100"></a>01100                                              CPL_NOT_LESS_THAN,
-<a name="l01101"></a>01101                                              w_j_min,
-<a name="l01102"></a>01102                                              CPL_LESS_THAN,
-<a name="l01103"></a>01103                                              w_bound[0]));
-<a name="l01104"></a>01104 
-<a name="l01105"></a>01105   cknull_nomsg(*lr52=sinfo_where_tab_min_max(*lambda,
-<a name="l01106"></a>01106                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01107"></a>01107                                              CPL_NOT_LESS_THAN,
-<a name="l01108"></a>01108                                              w_bound[0],
-<a name="l01109"></a>01109                                              CPL_LESS_THAN,
-<a name="l01110"></a>01110                                              w_bound[1]));
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112   cknull_nomsg(*lr63=sinfo_where_tab_min_max(*lambda,
-<a name="l01113"></a>01113                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01114"></a>01114                                              CPL_NOT_LESS_THAN,
-<a name="l01115"></a>01115                                              w_bound[1],
-<a name="l01116"></a>01116                                              CPL_LESS_THAN,
-<a name="l01117"></a>01117                                              w_bound[2]));
-<a name="l01118"></a>01118 
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120   cknull_nomsg(*lr74=sinfo_where_tab_min_max(*lambda,
-<a name="l01121"></a>01121                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01122"></a>01122                                              CPL_NOT_LESS_THAN,
-<a name="l01123"></a>01123                                              w_bound[2],
-<a name="l01124"></a>01124                                              CPL_LESS_THAN,
-<a name="l01125"></a>01125                                              w_bound[3]));
-<a name="l01126"></a>01126 
-<a name="l01127"></a>01127  cknull_nomsg(*lr20=sinfo_where_tab_min_max(*lambda,
-<a name="l01128"></a>01128                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01129"></a>01129                                              CPL_NOT_LESS_THAN,
-<a name="l01130"></a>01130                                              w_bound[3],
-<a name="l01131"></a>01131                                              CPL_LESS_THAN,
-<a name="l01132"></a>01132                                              w_bound[4]));
-<a name="l01133"></a>01133 
-<a name="l01134"></a>01134  cknull_nomsg(*lr02=sinfo_where_tab_min_max(*lambda,
-<a name="l01135"></a>01135                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01136"></a>01136                                              CPL_NOT_LESS_THAN,
-<a name="l01137"></a>01137                                              w_bound[4],
-<a name="l01138"></a>01138                                              CPL_LESS_THAN,
-<a name="l01139"></a>01139                                              w_bound[5]));
-<a name="l01140"></a>01140 
-<a name="l01141"></a>01141 
-<a name="l01142"></a>01142  cknull_nomsg(*lr85=sinfo_where_tab_min_max(*lambda,
-<a name="l01143"></a>01143                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01144"></a>01144                                              CPL_NOT_LESS_THAN,
-<a name="l01145"></a>01145                                              w_bound[5],
-<a name="l01146"></a>01146                                              CPL_LESS_THAN,
-<a name="l01147"></a>01147                                              w_bound[6]));
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149   cknull_nomsg(*lr31=sinfo_where_tab_min_max(*lambda,
-<a name="l01150"></a>01150                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01151"></a>01151                                              CPL_NOT_LESS_THAN,
-<a name="l01152"></a>01152                                              w_bound[6],
-<a name="l01153"></a>01153                                              CPL_LESS_THAN,
-<a name="l01154"></a>01154                                              w_bound[7]));
-<a name="l01155"></a>01155 
-<a name="l01156"></a>01156   cknull_nomsg(*lr42=sinfo_where_tab_min_max(*lambda,
-<a name="l01157"></a>01157                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01158"></a>01158                                              CPL_NOT_LESS_THAN,
-<a name="l01159"></a>01159                                              w_bound[7],
-<a name="l01160"></a>01160                                              CPL_LESS_THAN,
-<a name="l01161"></a>01161                                              w_bound[8]));
-<a name="l01162"></a>01162 
-<a name="l01163"></a>01163   cknull_nomsg(*lr53=sinfo_where_tab_min_max(*lambda,
-<a name="l01164"></a>01164                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01165"></a>01165                                              CPL_NOT_LESS_THAN,
-<a name="l01166"></a>01166                                              w_bound[8],
-<a name="l01167"></a>01167                                              CPL_LESS_THAN,
-<a name="l01168"></a>01168                                              w_bound[9]));
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170   cknull_nomsg(*lr64=sinfo_where_tab_min_max(*lambda,
-<a name="l01171"></a>01171                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01172"></a>01172                                              CPL_NOT_LESS_THAN,
-<a name="l01173"></a>01173                                              w_bound[0],
-<a name="l01174"></a>01174                                              CPL_LESS_THAN,
-<a name="l01175"></a>01175                                              w_bound[10]));
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177   cknull_nomsg(*lr75=sinfo_where_tab_min_max(*lambda,
-<a name="l01178"></a>01178                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01179"></a>01179                                              CPL_NOT_LESS_THAN,
-<a name="l01180"></a>01180                                              w_bound[10],
-<a name="l01181"></a>01181                                              CPL_LESS_THAN,
-<a name="l01182"></a>01182                                              w_bound[11]));
-<a name="l01183"></a>01183 
-<a name="l01184"></a>01184   cknull_nomsg(*lr86=sinfo_where_tab_min_max(*lambda,
-<a name="l01185"></a>01185                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01186"></a>01186                                              CPL_NOT_LESS_THAN,
-<a name="l01187"></a>01187                                              w_bound[11],
-<a name="l01188"></a>01188                                              CPL_LESS_THAN,
-<a name="l01189"></a>01189                                              w_bound[12]));
-<a name="l01190"></a>01190 
-<a name="l01191"></a>01191   cknull_nomsg(*lr97=sinfo_where_tab_min_max(*lambda,
-<a name="l01192"></a>01192                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01193"></a>01193                                              CPL_NOT_LESS_THAN,
-<a name="l01194"></a>01194                                              w_bound[12],
-<a name="l01195"></a>01195                                              CPL_LESS_THAN,
-<a name="l01196"></a>01196                                              w_bound[13]));
-<a name="l01197"></a>01197 
-<a name="l01198"></a>01198   cknull_nomsg(*lr00=sinfo_where_tab_min_max(*lambda,
-<a name="l01199"></a>01199                                              <span class="stringliteral">"WAVE"</span>,
-<a name="l01200"></a>01200                                               CPL_NOT_LESS_THAN,
-<a name="l01201"></a>01201                                               w_bound[13],
-<a name="l01202"></a>01202                                               CPL_LESS_THAN,
-<a name="l01203"></a>01203                                               w_k_max));
-<a name="l01204"></a>01204 
-<a name="l01205"></a>01205   <span class="comment">/* lrange */</span>
-<a name="l01206"></a>01206   cknull_nomsg(*lrange=sinfo_where_tab_min_max(*lambda,
-<a name="l01207"></a>01207                                                <span class="stringliteral">"WAVE"</span>,
-<a name="l01208"></a>01208                                                CPL_NOT_LESS_THAN,
-<a name="l01209"></a>01209                                                w_j_min,
-<a name="l01210"></a>01210                                                CPL_NOT_GREATER_THAN,
-<a name="l01211"></a>01211                                                w_j_max));
-<a name="l01212"></a>01212 
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 
-<a name="l01215"></a>01215   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,
-<a name="l01216"></a>01216                                                <span class="stringliteral">"WAVE"</span>,
-<a name="l01217"></a>01217                                                CPL_NOT_LESS_THAN,
-<a name="l01218"></a>01218                                                w_h_min,
-<a name="l01219"></a>01219                                                CPL_NOT_GREATER_THAN,
-<a name="l01220"></a>01220                                                w_h_max));
-<a name="l01221"></a>01221 
-<a name="l01222"></a>01222   check_nomsg(nrow=cpl_table_get_nrow(*lrange));
-<a name="l01223"></a>01223   check_nomsg(cpl_table_insert(*lrange,add1,nrow));
-<a name="l01224"></a>01224   sinfo_free_table(&add1);
-<a name="l01225"></a>01225 
-<a name="l01226"></a>01226   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,
-<a name="l01227"></a>01227                                                <span class="stringliteral">"WAVE"</span>,
-<a name="l01228"></a>01228                                                CPL_NOT_LESS_THAN,
-<a name="l01229"></a>01229                                                w_k_min,
-<a name="l01230"></a>01230                                                CPL_NOT_GREATER_THAN,
-<a name="l01231"></a>01231                                                w_k_max));
-<a name="l01232"></a>01232 
-<a name="l01233"></a>01233 
-<a name="l01234"></a>01234   check_nomsg(nrow=cpl_table_get_nrow(*lrange));
-<a name="l01235"></a>01235   check_nomsg(cpl_table_insert(*lrange,add1,nrow));
-<a name="l01236"></a>01236   sinfo_free_table(&add1);
-<a name="l01237"></a>01237 
-<a name="l01238"></a>01238 
-<a name="l01239"></a>01239   <span class="comment">/* mrange */</span>
-<a name="l01240"></a>01240   cknull_nomsg(*grange=sinfo_where_tab_min_max(*lambda,
-<a name="l01241"></a>01241                                                <span class="stringliteral">"WAVE"</span>,
-<a name="l01242"></a>01242                                                CPL_NOT_LESS_THAN,
-<a name="l01243"></a>01243                                                1.10,
-<a name="l01244"></a>01244                                                CPL_NOT_GREATER_THAN,
-<a name="l01245"></a>01245                                                1.35));
-<a name="l01246"></a>01246 
-<a name="l01247"></a>01247 
-<a name="l01248"></a>01248 
-<a name="l01249"></a>01249 
-<a name="l01250"></a>01250   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,
-<a name="l01251"></a>01251                                                <span class="stringliteral">"WAVE"</span>,
-<a name="l01252"></a>01252                                                CPL_NOT_LESS_THAN,
-<a name="l01253"></a>01253                                                1.5,
-<a name="l01254"></a>01254                                                CPL_NOT_GREATER_THAN,
-<a name="l01255"></a>01255                                                1.7));
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257   check_nomsg(nrow=cpl_table_get_nrow(*grange));
-<a name="l01258"></a>01258   check_nomsg(cpl_table_insert(*grange,add1,nrow));
-<a name="l01259"></a>01259   sinfo_free_table(&add1);
-<a name="l01260"></a>01260 
-<a name="l01261"></a>01261 
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,
-<a name="l01264"></a>01264                                             <span class="stringliteral">"WAVE"</span>,
-<a name="l01265"></a>01265                                             CPL_NOT_LESS_THAN,
-<a name="l01266"></a>01266                                             2.0,
-<a name="l01267"></a>01267                                             CPL_NOT_GREATER_THAN,
-<a name="l01268"></a>01268                                             2.3));
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270   check_nomsg(nrow=cpl_table_get_nrow(*grange));
-<a name="l01271"></a>01271   check_nomsg(cpl_table_insert(*grange,add1,nrow));
-<a name="l01272"></a>01272   sinfo_free_table(&add1);
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274 
-<a name="l01275"></a>01275   <span class="comment">/* Get Sky relevant information */</span>
-<a name="l01276"></a>01276   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm),0));
-<a name="l01277"></a>01277   check_nomsg(crval_sky=sinfo_pfits_get_crval3(plist));
-<a name="l01278"></a>01278   check_nomsg(cdelt_sky=sinfo_pfits_get_cdelt3(plist));
-<a name="l01279"></a>01279   check_nomsg(crpix_sky=sinfo_pfits_get_crpix3(plist));
-<a name="l01280"></a>01280   check_nomsg(xsize_sky=sinfo_pfits_get_naxis1(plist));
-<a name="l01281"></a>01281   check_nomsg(ysize_sky=sinfo_pfits_get_naxis2(plist));
-<a name="l01282"></a>01282   check_nomsg(zsize_sky=sinfo_pfits_get_naxis3(plist));
-<a name="l01283"></a>01283   sinfo_free_propertylist(&plist);
-<a name="l01284"></a>01284 
-<a name="l01285"></a>01285   <span class="comment">/* defines sky related wavelength ranges */</span>
-<a name="l01286"></a>01286   check_nomsg(*lambdas=cpl_table_new(zsize_sky));
-<a name="l01287"></a>01287   cpl_table_new_column(*lambdas,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);
-<a name="l01288"></a>01288   check_nomsg(sinfo_table_column_dindgen(lambdas,<span class="stringliteral">"WAVE"</span>));
-<a name="l01289"></a>01289 
-<a name="l01290"></a>01290   check_nomsg(cpl_table_add_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,1.));
-<a name="l01291"></a>01291   check_nomsg(cpl_table_subtract_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,crpix_sky));
-<a name="l01292"></a>01292   check_nomsg(cpl_table_multiply_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,cdelt_sky));
-<a name="l01293"></a>01293   check_nomsg(cpl_table_add_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,crval_sky));
-<a name="l01294"></a>01294 
-<a name="l01295"></a>01295   check_nomsg(p=cpl_parameterlist_find(cfg,<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_ws"</span>));
-<a name="l01296"></a>01296   check_nomsg(ws=cpl_parameter_get_double(p));
-<a name="l01297"></a>01297   check_nomsg(p=cpl_parameterlist_find(cfg,<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_we"</span>));
-<a name="l01298"></a>01298   check_nomsg(we=cpl_parameter_get_double(p));
-<a name="l01299"></a>01299   <span class="keywordflow">if</span>((ws != SINFO_MASK_WAVE_MIN) || (we != SINFO_MASK_WAVE_MAX)) {
-<a name="l01300"></a>01300     cknull_nomsg(*mrange=sinfo_where_tab_min_max(*lambda,<span class="stringliteral">"WAVE"</span>,
-<a name="l01301"></a>01301                                                  CPL_NOT_LESS_THAN,ws,
-<a name="l01302"></a>01302                                                  CPL_NOT_GREATER_THAN,we));
-<a name="l01303"></a>01303    } <span class="keywordflow">else</span> {
-<a name="l01304"></a>01304      check_nomsg(*mrange=cpl_table_duplicate(*lrange));
-<a name="l01305"></a>01305   }
-<a name="l01306"></a>01306 
-<a name="l01307"></a>01307 
-<a name="l01308"></a>01308   check_nomsg(cpl_table_duplicate_column(*lambda,<span class="stringliteral">"WDIFF"</span>,*lambdas,<span class="stringliteral">"WAVE"</span>));
-<a name="l01309"></a>01309   check_nomsg(cpl_table_subtract_columns(*lambda,<span class="stringliteral">"WDIFF"</span>,<span class="stringliteral">"WAVE"</span>));
-<a name="l01310"></a>01310   check_nomsg(mean=cpl_table_get_column_mean(*lambda,<span class="stringliteral">"WDIFF"</span>));
-<a name="l01311"></a>01311   check_nomsg(nrow=cpl_table_get_nrow(*lambda));
-<a name="l01312"></a>01312   <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"diff %f"</span>,nrow*mean);
-<a name="l01313"></a>01313   <span class="keywordflow">if</span>((fabs(nrow*mean) > 0) || (zsize_obj != zsize_sky)) {
-<a name="l01314"></a>01314     sinfo_msg(<span class="stringliteral">"We have to interpolate sky frame - this is not good"</span>);
-<a name="l01315"></a>01315     *sky_interp_sw=1;
-<a name="l01316"></a>01316   }
-<a name="l01317"></a>01317 
-<a name="l01318"></a>01318 
-<a name="l01319"></a>01319   <span class="keywordflow">return</span> 0;
-<a name="l01320"></a>01320 
-<a name="l01321"></a>01321  cleanup:
-<a name="l01322"></a>01322   sinfo_free_table(&add1);
-<a name="l01323"></a>01323   sinfo_free_table(&tmp_tbl);
-<a name="l01324"></a>01324   sinfo_free_propertylist(&plist);
-<a name="l01325"></a>01325   <span class="keywordflow">return</span> -1;
-<a name="l01326"></a>01326 
-<a name="l01327"></a>01327 }
-<a name="l01328"></a>01328 
-<a name="l01329"></a>01329 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01340"></a>01340 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01341"></a>01341 
-<a name="l01342"></a>01342 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01343"></a>01343 sinfo_table_column_dindgen(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* label)
-<a name="l01344"></a>01344 {
-<a name="l01345"></a>01345 
-<a name="l01346"></a>01346   <span class="keywordtype">int</span> sz=0;
-<a name="l01347"></a>01347   <span class="keywordtype">int</span> i=0;
-<a name="l01348"></a>01348 
-<a name="l01349"></a>01349   cknull(*t,<span class="stringliteral">"Null input vector"</span>);
-<a name="l01350"></a>01350   check(sz=cpl_table_get_nrow(*t),<span class="stringliteral">"Getting size of a vector"</span>);
-<a name="l01351"></a>01351   <span class="keywordflow">for</span>(i=0;i<sz;i++) {
-<a name="l01352"></a>01352     cpl_table_set(*t,label,i,(<span class="keywordtype">double</span>)i);
-<a name="l01353"></a>01353   }
-<a name="l01354"></a>01354 
-<a name="l01355"></a>01355   <span class="keywordflow">return</span> 0;
-<a name="l01356"></a>01356  cleanup:
-<a name="l01357"></a>01357   <span class="keywordflow">return</span> -1;
-<a name="l01358"></a>01358 
-<a name="l01359"></a>01359 }
-<a name="l01360"></a>01360 
-<a name="l01361"></a>01361 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01372"></a>01372 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374 
-<a name="l01375"></a>01375 <span class="keywordtype">int</span>
-<a name="l01376"></a>01376 sinfo_sum_spectra(<span class="keyword">const</span> cpl_frame* obj_frm,
-<a name="l01377"></a>01377                   <span class="keyword">const</span> cpl_frame* sky_frm,
-<a name="l01378"></a>01378                   cpl_image* mask,
-<a name="l01379"></a>01379                   cpl_table* wrange,
-<a name="l01380"></a>01380                   <span class="keyword">const</span> <span class="keywordtype">int</span> llx,
-<a name="l01381"></a>01381                   <span class="keyword">const</span> <span class="keywordtype">int</span> lly,
-<a name="l01382"></a>01382                   <span class="keyword">const</span> <span class="keywordtype">int</span> urx,
-<a name="l01383"></a>01383                   <span class="keyword">const</span> <span class="keywordtype">int</span> ury,
-<a name="l01384"></a>01384                   cpl_table** int_obj,
-<a name="l01385"></a>01385                   cpl_table** int_sky)
-<a name="l01386"></a>01386 {
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388 
-<a name="l01389"></a>01389 
-<a name="l01390"></a>01390   cpl_image* obj_slice=NULL;
-<a name="l01391"></a>01391   cpl_image* sky_slice=NULL;
-<a name="l01392"></a>01392   cpl_image* gslice=NULL;
-<a name="l01393"></a>01393   cpl_image* pos_tmp=NULL;
-<a name="l01394"></a>01394   cpl_image* msk_tmp=NULL;
-<a name="l01395"></a>01395   cpl_imagelist* obj=NULL;
-<a name="l01396"></a>01396   cpl_imagelist* sky=NULL;
-<a name="l01397"></a>01397 
-<a name="l01398"></a>01398 
-<a name="l01399"></a>01399   cpl_table* loop=NULL;
-<a name="l01400"></a>01400   cpl_table* opos_tbl=NULL;
-<a name="l01401"></a>01401   cpl_table* spos_tbl=NULL;
-<a name="l01402"></a>01402   cpl_table* tmp_tbl=NULL;
-<a name="l01403"></a>01403   cpl_table* loop_tbl=NULL;
-<a name="l01404"></a>01404 
-<a name="l01405"></a>01405   <span class="keywordtype">double</span> med=0;
-<a name="l01406"></a>01406   <span class="keywordtype">double</span> sdv=0;
-<a name="l01407"></a>01407   <span class="keywordtype">double</span> avg=0;
-<a name="l01408"></a>01408 
-<a name="l01409"></a>01409   <span class="keywordtype">int</span> zsize=0;
-<a name="l01410"></a>01410   <span class="keywordtype">int</span> i=0;
-<a name="l01411"></a>01411   <span class="keywordtype">int</span> pos_i=0;
-<a name="l01412"></a>01412 
-<a name="l01413"></a>01413   <span class="comment">// sum spectra of flagged spaxels</span>
-<a name="l01414"></a>01414 
-<a name="l01415"></a>01415   cknull_nomsg(obj=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),
-<a name="l01416"></a>01416                                       CPL_TYPE_DOUBLE,0));
-<a name="l01417"></a>01417   cknull_nomsg(sky=cpl_imagelist_load(cpl_frame_get_filename(sky_frm),
-<a name="l01418"></a>01418                                       CPL_TYPE_DOUBLE,0));
-<a name="l01419"></a>01419 
-<a name="l01420"></a>01420   check_nomsg(zsize=cpl_imagelist_get_size(obj));
-<a name="l01421"></a>01421   check_nomsg(*int_obj = cpl_table_new(zsize));
-<a name="l01422"></a>01422   check_nomsg(*int_sky = cpl_table_new(zsize));
-<a name="l01423"></a>01423   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"WAVE"</span>,wrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l01424"></a>01424   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"WAVE"</span>,wrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l01425"></a>01425   check_nomsg(cpl_table_new_column(*int_obj,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l01426"></a>01426   check_nomsg(cpl_table_new_column(*int_sky,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l01427"></a>01427   check_nomsg(cpl_table_fill_column_window_double(*int_obj,<span class="stringliteral">"INT"</span>,0,zsize,0));
-<a name="l01428"></a>01428   check_nomsg(cpl_table_fill_column_window_double(*int_sky,<span class="stringliteral">"INT"</span>,0,zsize,0));
-<a name="l01429"></a>01429 
-<a name="l01430"></a>01430   <span class="comment">//loop = where(mask > 0.5);</span>
-<a name="l01431"></a>01431   <span class="comment">//TO BE REMOVED: loop_tbl is not used</span>
-<a name="l01432"></a>01432   cknull_nomsg(loop_tbl=sinfo_image2table(mask));
-<a name="l01433"></a>01433   check_nomsg(cpl_table_and_selected_double(loop_tbl,<span class="stringliteral">"VALUE"</span>,
-<a name="l01434"></a>01434                                             CPL_GREATER_THAN,0.5));
-<a name="l01435"></a>01435   check_nomsg(loop=cpl_table_extract_selected(loop_tbl));
-<a name="l01436"></a>01436   sinfo_free_table(&loop_tbl);
-<a name="l01437"></a>01437   sinfo_free_table(&loop);
-<a name="l01438"></a>01438 
-<a name="l01439"></a>01439   <span class="comment">//Determines object spectrum</span>
-<a name="l01440"></a>01440   <span class="keywordflow">for</span> (i=0;i<zsize;i++) {
-<a name="l01441"></a>01441     check_nomsg(obj_slice = cpl_imagelist_get(obj,i));
-<a name="l01442"></a>01442 
-<a name="l01443"></a>01443     <span class="comment">//pos = where(mask > 0.5 && finite(obj_slice),pos_i);</span>
-<a name="l01444"></a>01444     pos_i=sinfo_cnt_mask_thresh_and_obj_finite(mask,0.5,obj_slice);
-<a name="l01445"></a>01445     <span class="keywordflow">if</span> (pos_i >= 1) {
-<a name="l01446"></a>01446       <span class="keywordflow">if</span> ((pos_i) < 3 ) {
-<a name="l01447"></a>01447     <span class="comment">//int_obj[i] = mean(obj_slice[pos]);</span>
-<a name="l01448"></a>01448         <span class="comment">//TODO here obj_slice should be considered only on pos:</span>
-<a name="l01449"></a>01449         <span class="comment">//     one should do a selection/thresholding</span>
-<a name="l01450"></a>01450         check_nomsg(cpl_table_set_double(*int_obj,<span class="stringliteral">"INT"</span>,i,
-<a name="l01451"></a>01451                      cpl_image_get_mean_window(obj_slice,
-<a name="l01452"></a>01452                                    llx,lly,
-<a name="l01453"></a>01453                                    urx,ury)));
-<a name="l01454"></a>01454       } <span class="keywordflow">else</span> {
-<a name="l01455"></a>01455         <span class="comment">// select only poisitions where mask>0.5 and obj is finite</span>
-<a name="l01456"></a>01456     <span class="comment">// gslice = obj_slice[pos];</span>
-<a name="l01457"></a>01457         <span class="comment">//sinfo_msg("obj pos_i=%d",pos_i);</span>
-<a name="l01458"></a>01458 
-<a name="l01459"></a>01459         check_nomsg(gslice = cpl_image_duplicate(obj_slice));
-<a name="l01460"></a>01460         check_nomsg(sinfo_image_flag_nan(&gslice));
-<a name="l01461"></a>01461     <span class="comment">/*</span>
-<a name="l01462"></a>01462 <span class="comment">        sinfo_msg("obj: min=%f max=%f",</span>
-<a name="l01463"></a>01463 <span class="comment">                  cpl_image_get_min(obj_slice),</span>
-<a name="l01464"></a>01464 <span class="comment">          cpl_image_get_max(obj_slice));</span>
-<a name="l01465"></a>01465 <span class="comment">    */</span>
-<a name="l01466"></a>01466         <span class="comment">//check_nomsg(cpl_image_threshold(gslice,SINFO_DBL_MIN,3.0e6,1,0));</span>
-<a name="l01467"></a>01467         <span class="comment">//check_nomsg(cpl_image_multiply(gslice,mask));</span>
-<a name="l01468"></a>01468         <span class="keywordflow">if</span>(cpl_image_count_rejected(gslice) < 2048) { <span class="comment">//2048=64*64/2</span>
-<a name="l01469"></a>01469 
-<a name="l01470"></a>01470       check_nomsg(med = cpl_image_get_median_window(gslice,llx,lly,urx,ury));
-<a name="l01471"></a>01471       check_nomsg(sdv = cpl_image_get_stdev_window(gslice,llx,lly,urx,ury));
-<a name="l01472"></a>01472       <span class="comment">//sinfo_msg("med=%f sdv=%f",med,sdv);</span>
-<a name="l01473"></a>01473       <span class="comment">//avg = mean(gslice[where(gslice < med+3*sdv && gslice > med-3*sdv)]);</span>
-<a name="l01474"></a>01474       check_nomsg(cpl_image_threshold(gslice,med-3*sdv,med+3*sdv,0,0));
-<a name="l01475"></a>01475       check_nomsg(avg= cpl_image_get_mean_window(gslice,llx,lly,urx,ury));
-<a name="l01476"></a>01476       check_nomsg(cpl_table_set_double(*int_obj,<span class="stringliteral">"INT"</span>,i,avg));
-<a name="l01477"></a>01477     } <span class="keywordflow">else</span> {
-<a name="l01478"></a>01478       check_nomsg(cpl_table_set_invalid(*int_obj,<span class="stringliteral">"INT"</span>,i));
-<a name="l01479"></a>01479     }
-<a name="l01480"></a>01480 
-<a name="l01481"></a>01481         sinfo_free_image(&gslice);
-<a name="l01482"></a>01482         <span class="comment">//sinfo_msg("sky int=%f",avg);</span>
-<a name="l01483"></a>01483       }
-<a name="l01484"></a>01484     }
-<a name="l01485"></a>01485 
-<a name="l01486"></a>01486     <span class="comment">//Determines sky spectrum</span>
-<a name="l01487"></a>01487     check_nomsg(sky_slice = cpl_imagelist_get(sky,i));
-<a name="l01488"></a>01488     <span class="comment">//pos = where(mask > 0.5 and finite(sky_slice),pos_i);</span>
-<a name="l01489"></a>01489     pos_i=sinfo_cnt_mask_thresh_and_obj_finite(mask,0.5,sky_slice);
-<a name="l01490"></a>01490     <span class="keywordflow">if</span> (pos_i >= 1) {
-<a name="l01491"></a>01491       <span class="keywordflow">if</span> ((pos_i) < 3) {
-<a name="l01492"></a>01492     <span class="comment">//int_obj[i] = mean(obj_slice[pos]);</span>
-<a name="l01493"></a>01493         <span class="comment">//TODO here obj_slice should be considered only on pos:</span>
-<a name="l01494"></a>01494         <span class="comment">//     one should do a selection/thresholding</span>
-<a name="l01495"></a>01495         check_nomsg(cpl_table_set_double(*int_sky,<span class="stringliteral">"INT"</span>,i,
-<a name="l01496"></a>01496                      cpl_image_get_mean_window(sky_slice,
-<a name="l01497"></a>01497                                    llx,lly,
-<a name="l01498"></a>01498                                    urx,ury)));
-<a name="l01499"></a>01499       } <span class="keywordflow">else</span> {
-<a name="l01500"></a>01500         <span class="comment">//sinfo_msg("pos_i=%d",pos_i);</span>
-<a name="l01501"></a>01501         <span class="comment">// select only poisitions where mask>0.5 and obj is finite</span>
-<a name="l01502"></a>01502     <span class="comment">// gslice = obj_slice[pos];</span>
-<a name="l01503"></a>01503         check_nomsg(gslice = cpl_image_duplicate(sky_slice));
-<a name="l01504"></a>01504         check_nomsg(sinfo_image_flag_nan(&gslice));
-<a name="l01505"></a>01505         <span class="comment">//check_nomsg(cpl_image_threshold(gslice,SINFO_DBL_MIN,3.0e6,1,0));</span>
-<a name="l01506"></a>01506         <span class="comment">//check_nomsg(cpl_image_multiply(gslice,mask));</span>
-<a name="l01507"></a>01507         <span class="keywordflow">if</span>(cpl_image_count_rejected(gslice) < 2048) { <span class="comment">//2048=64*64/2</span>
-<a name="l01508"></a>01508 
-<a name="l01509"></a>01509     check_nomsg(med = cpl_image_get_median_window(gslice,llx,lly,urx,ury));
-<a name="l01510"></a>01510     check_nomsg(sdv = cpl_image_get_stdev_window(gslice,llx,lly,urx,ury));
-<a name="l01511"></a>01511         <span class="comment">//avg = mean(gslice[where(gslice < med+3*sdv && gslice > med-3*sdv)]);</span>
-<a name="l01512"></a>01512         check_nomsg(cpl_image_threshold(gslice,med-3*sdv,med+3*sdv,0,0));
-<a name="l01513"></a>01513     check_nomsg(avg= cpl_image_get_mean_window(gslice,llx,lly,urx,ury));
-<a name="l01514"></a>01514         check_nomsg(cpl_table_set_double(*int_sky,<span class="stringliteral">"INT"</span>,i,avg));
-<a name="l01515"></a>01515     } <span class="keywordflow">else</span> {
-<a name="l01516"></a>01516       check_nomsg(cpl_table_set_invalid(*int_sky,<span class="stringliteral">"INT"</span>,i));
-<a name="l01517"></a>01517     }
-<a name="l01518"></a>01518         sinfo_free_image(&gslice);
-<a name="l01519"></a>01519     <span class="comment">/*</span>
-<a name="l01520"></a>01520 <span class="comment">        if(i<100) {</span>
-<a name="l01521"></a>01521 <span class="comment">           sinfo_msg("sky: wave=%f int=%f",</span>
-<a name="l01522"></a>01522 <span class="comment">                      cpl_table_get_double(*int_sky,"WAVE",i,&status),avg);</span>
-<a name="l01523"></a>01523 <span class="comment"></span>
-<a name="l01524"></a>01524 <span class="comment">    }</span>
-<a name="l01525"></a>01525 <span class="comment">    */</span>
-<a name="l01526"></a>01526       }
-<a name="l01527"></a>01527     }
-<a name="l01528"></a>01528   }
-<a name="l01529"></a>01529 
-<a name="l01530"></a>01530   sinfo_free_imagelist(&obj);
-<a name="l01531"></a>01531   sinfo_free_imagelist(&sky);
-<a name="l01532"></a>01532 
-<a name="l01533"></a>01533 
-<a name="l01534"></a>01534   <span class="keywordflow">return</span> 0;
-<a name="l01535"></a>01535 
-<a name="l01536"></a>01536  cleanup:
-<a name="l01537"></a>01537   sinfo_free_image(&gslice);
-<a name="l01538"></a>01538   sinfo_free_image(&pos_tmp);
-<a name="l01539"></a>01539   sinfo_free_image(&msk_tmp);
-<a name="l01540"></a>01540   sinfo_free_table(&tmp_tbl);
-<a name="l01541"></a>01541   sinfo_free_table(&opos_tbl);
-<a name="l01542"></a>01542   sinfo_free_table(&spos_tbl);
-<a name="l01543"></a>01543   sinfo_free_table(&loop_tbl);
-<a name="l01544"></a>01544   sinfo_free_table(&loop);
-<a name="l01545"></a>01545   sinfo_free_imagelist(&obj);
-<a name="l01546"></a>01546   sinfo_free_imagelist(&sky);
-<a name="l01547"></a>01547 
-<a name="l01548"></a>01548   <span class="keywordflow">return</span> -1;
-<a name="l01549"></a>01549 }
-<a name="l01550"></a>01550 
-<a name="l01551"></a>01551 
-<a name="l01552"></a>01552 
-<a name="l01553"></a>01553 
-<a name="l01554"></a>01554 
-<a name="l01555"></a>01555 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01566"></a>01566 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01567"></a>01567 
-<a name="l01568"></a>01568 
-<a name="l01569"></a>01569 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01570"></a>01570 sinfo_cnt_mask_thresh_and_obj_finite(<span class="keyword">const</span> cpl_image* mask,
-<a name="l01571"></a>01571                                      <span class="keyword">const</span> <span class="keywordtype">double</span> t,
-<a name="l01572"></a>01572                                      <span class="keyword">const</span> cpl_image* obj)
-<a name="l01573"></a>01573 {
-<a name="l01574"></a>01574 
-<a name="l01575"></a>01575   <span class="keywordtype">int</span> cnt=0;
-<a name="l01576"></a>01576   <span class="keywordtype">int</span> sxm=0;
-<a name="l01577"></a>01577   <span class="keywordtype">int</span> sym=0;
-<a name="l01578"></a>01578   <span class="keywordtype">int</span> sxo=0;
-<a name="l01579"></a>01579   <span class="keywordtype">int</span> syo=0;
-<a name="l01580"></a>01580   <span class="keywordtype">int</span> i=0;
-<a name="l01581"></a>01581   <span class="keyword">const</span> <span class="keywordtype">double</span>* pm=NULL;
-<a name="l01582"></a>01582   <span class="keyword">const</span> <span class="keywordtype">double</span>* po=NULL;
-<a name="l01583"></a>01583 
-<a name="l01584"></a>01584   check_nomsg(sxm=cpl_image_get_size_x(mask));
-<a name="l01585"></a>01585   check_nomsg(sym=cpl_image_get_size_y(mask));
-<a name="l01586"></a>01586   check_nomsg(sxo=cpl_image_get_size_x(obj));
-<a name="l01587"></a>01587   check_nomsg(syo=cpl_image_get_size_y(obj));
-<a name="l01588"></a>01588   <span class="keywordflow">if</span>( sxm != sxo || sym != syo) {
-<a name="l01589"></a>01589     <span class="keywordflow">goto</span> cleanup;
-<a name="l01590"></a>01590   }
-<a name="l01591"></a>01591   check_nomsg(pm=cpl_image_get_data_double_const(mask));
-<a name="l01592"></a>01592   check_nomsg(po=cpl_image_get_data_double_const(obj));
-<a name="l01593"></a>01593 
-<a name="l01594"></a>01594   <span class="keywordflow">for</span>(i=0;i<sxm*sym;i++) {
-<a name="l01595"></a>01595 
-<a name="l01596"></a>01596     <span class="keywordflow">if</span>( (pm[i] > t) && (!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(po[i]))) { cnt++; }
-<a name="l01597"></a>01597 
-<a name="l01598"></a>01598   }
-<a name="l01599"></a>01599 
-<a name="l01600"></a>01600   <span class="keywordflow">return</span> cnt;
-<a name="l01601"></a>01601  cleanup:
-<a name="l01602"></a>01602   <span class="keywordflow">return</span> -1;
-<a name="l01603"></a>01603 
-<a name="l01604"></a>01604 }
-<a name="l01605"></a>01605 
-<a name="l01606"></a>01606 
-<a name="l01607"></a>01607 
-<a name="l01608"></a>01608 
-<a name="l01609"></a>01609 
-<a name="l01610"></a>01610 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01621"></a>01621 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01622"></a>01622 
-<a name="l01623"></a>01623 
-<a name="l01624"></a>01624 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01625"></a>01625 sinfo_image_flag_nan(cpl_image** im)
-<a name="l01626"></a>01626 {
-<a name="l01627"></a>01627 
-<a name="l01628"></a>01628   <span class="keywordtype">int</span> cnt=0;
-<a name="l01629"></a>01629   <span class="keywordtype">int</span> sx=0;
-<a name="l01630"></a>01630   <span class="keywordtype">int</span> sy=0;
-<a name="l01631"></a>01631   <span class="keywordtype">int</span> i=0;
-<a name="l01632"></a>01632   <span class="keywordtype">int</span> j=0;
-<a name="l01633"></a>01633 
-<a name="l01634"></a>01634   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l01635"></a>01635 
-<a name="l01636"></a>01636   check_nomsg(sx=cpl_image_get_size_x(*im));
-<a name="l01637"></a>01637   check_nomsg(sy=cpl_image_get_size_y(*im));
-<a name="l01638"></a>01638   check_nomsg(pi=cpl_image_get_data_double(*im));
-<a name="l01639"></a>01639 
-<a name="l01640"></a>01640   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l01641"></a>01641     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l01642"></a>01642      <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pi[j*sx+i])) {
-<a name="l01643"></a>01643     check_nomsg(cpl_image_reject(*im,i+1,j+1));
-<a name="l01644"></a>01644     cnt++;
-<a name="l01645"></a>01645       }
-<a name="l01646"></a>01646     }
-<a name="l01647"></a>01647   }
-<a name="l01648"></a>01648   <span class="comment">//sinfo_msg("No bad pixels: %d",cnt);</span>
-<a name="l01649"></a>01649   <span class="keywordflow">return</span> cnt;
-<a name="l01650"></a>01650  cleanup:
-<a name="l01651"></a>01651   <span class="keywordflow">return</span> -1;
-<a name="l01652"></a>01652 
-<a name="l01653"></a>01653 }
-<a name="l01654"></a>01654 
-<a name="l01655"></a>01655 
-<a name="l01656"></a>01656 
-<a name="l01657"></a>01657 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01669"></a>01669 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01670"></a>01670 
-<a name="l01671"></a>01671 <span class="keywordtype">int</span>
-<a name="l01672"></a>01672 sinfo_object_estimate_noise(cpl_frame* obj_frm,
-<a name="l01673"></a>01673                             <span class="keyword">const</span> <span class="keywordtype">int</span> obj_noise_fit,
-<a name="l01674"></a>01674                             <span class="keywordtype">double</span>* centre,
-<a name="l01675"></a>01675                             <span class="keywordtype">double</span>* noise)
-<a name="l01676"></a>01676 {
-<a name="l01677"></a>01677 
-<a name="l01678"></a>01678   <span class="keyword">const</span> <span class="keywordtype">int</span> nbins=HISTO_NBINS;
-<a name="l01679"></a>01679 
-<a name="l01680"></a>01680   <span class="keywordtype">int</span> xsz=0;
-<a name="l01681"></a>01681   <span class="keywordtype">int</span> ysz=0;
-<a name="l01682"></a>01682   <span class="keywordtype">int</span> zsz=0;
-<a name="l01683"></a>01683   <span class="keywordtype">int</span> n=0;
-<a name="l01684"></a>01684   <span class="keywordtype">int</span> i=0;
-<a name="l01685"></a>01685   <span class="keywordtype">int</span> k=0;
-<a name="l01686"></a>01686   <span class="keywordtype">int</span> r=0;
-<a name="l01687"></a>01687 
-<a name="l01688"></a>01688   <span class="keywordtype">int</span> max_h=0;
-<a name="l01689"></a>01689   <span class="keywordtype">int</span> min_x=0;
-<a name="l01690"></a>01690   <span class="keywordtype">int</span> max_x=0;
-<a name="l01691"></a>01691   <span class="keywordtype">int</span> status=0;
-<a name="l01692"></a>01692   <span class="keywordtype">int</span> max_pos=0;
-<a name="l01693"></a>01693   <span class="keywordtype">int</span> min_pos=0;
-<a name="l01694"></a>01694   <span class="keywordtype">int</span> min_xi_sz=0;
-<a name="l01695"></a>01695   <span class="keywordtype">int</span> ndist=0;
-<a name="l01696"></a>01696 
-<a name="l01697"></a>01697   <span class="keywordtype">double</span> avg_d=0;
-<a name="l01698"></a>01698   <span class="keywordtype">double</span> std_d=0;
-<a name="l01699"></a>01699   <span class="keywordtype">double</span> hmin=0;
-<a name="l01700"></a>01700   <span class="keywordtype">double</span> hmax=0;
-<a name="l01701"></a>01701   <span class="keywordtype">double</span> kappa=3;
-<a name="l01702"></a>01702 
-<a name="l01703"></a>01703   <span class="keywordtype">double</span>* pdata=NULL;
-<a name="l01704"></a>01704   <span class="keywordtype">double</span>* disth=NULL;
-<a name="l01705"></a>01705   <span class="keywordtype">double</span>* distx=NULL;
-<a name="l01706"></a>01706 
-<a name="l01707"></a>01707   <span class="keywordtype">double</span> peak=0;
-<a name="l01708"></a>01708   <span class="keywordtype">double</span> tempc=0;
-<a name="l01709"></a>01709   <span class="keywordtype">double</span> value=0;
-<a name="l01710"></a>01710   <span class="keywordtype">double</span> thres=0;
-<a name="l01711"></a>01711   <span class="keywordtype">double</span> val=0;
-<a name="l01712"></a>01712   <span class="keywordtype">double</span> x0=0;
-<a name="l01713"></a>01713   <span class="keywordtype">double</span> sigma=0;
-<a name="l01714"></a>01714   <span class="keywordtype">double</span> area=0;
-<a name="l01715"></a>01715   <span class="keywordtype">double</span> offset=0;
-<a name="l01716"></a>01716   <span class="comment">//double mse=0;</span>
-<a name="l01717"></a>01717   <span class="comment">//double chired=0;</span>
-<a name="l01718"></a>01718 
-<a name="l01719"></a>01719   cpl_propertylist* plist=NULL;
-<a name="l01720"></a>01720   cpl_imagelist* obj_cub=NULL;
-<a name="l01721"></a>01721   cpl_table* data_tbl=NULL;
-<a name="l01722"></a>01722   cpl_table* histo=NULL;
-<a name="l01723"></a>01723   cpl_image* img=NULL;
-<a name="l01724"></a>01724   cpl_table* dist=NULL;
-<a name="l01725"></a>01725   cpl_table* min_xi=NULL;
-<a name="l01726"></a>01726   cpl_table* tmp_tbl1=NULL;
-<a name="l01727"></a>01727   cpl_table* tmp_tbl2=NULL;
-<a name="l01728"></a>01728   cpl_vector* vx=NULL;
-<a name="l01729"></a>01729   cpl_vector* vy=NULL;
-<a name="l01730"></a>01730   cpl_vector* sx=NULL;
-<a name="l01731"></a>01731   cpl_vector* sy=NULL;
-<a name="l01732"></a>01732   <span class="keywordtype">int</span> counter=0;
-<a name="l01733"></a>01733 
-<a name="l01734"></a>01734   <span class="comment">// Get Object relevant information</span>
-<a name="l01735"></a>01735   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));
-<a name="l01736"></a>01736   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));
-<a name="l01737"></a>01737   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));
-<a name="l01738"></a>01738   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));
-<a name="l01739"></a>01739   sinfo_free_propertylist(&plist);
-<a name="l01740"></a>01740 
-<a name="l01741"></a>01741   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),
-<a name="l01742"></a>01742                                           CPL_TYPE_DOUBLE,0));
-<a name="l01743"></a>01743 
-<a name="l01744"></a>01744   n=xsz*ysz*zsz;
-<a name="l01745"></a>01745   check_nomsg(data_tbl=cpl_table_new(n));
-<a name="l01746"></a>01746   check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));
-<a name="l01747"></a>01747 
-<a name="l01748"></a>01748 
-<a name="l01749"></a>01749   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {
-<a name="l01750"></a>01750     check_nomsg(img=cpl_imagelist_get(obj_cub,k));
-<a name="l01751"></a>01751     check_nomsg(pdata=cpl_image_get_data(img));
-<a name="l01752"></a>01752     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {
-<a name="l01753"></a>01753       <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pdata[i])) {
-<a name="l01754"></a>01754     cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]);
-<a name="l01755"></a>01755         r++;
-<a name="l01756"></a>01756       }
-<a name="l01757"></a>01757     }
-<a name="l01758"></a>01758   }
-<a name="l01759"></a>01759   sinfo_free_imagelist(&obj_cub);
-<a name="l01760"></a>01760 
-<a name="l01761"></a>01761   check_nomsg(cpl_table_erase_invalid(data_tbl));
-<a name="l01762"></a>01762   check_nomsg(avg_d=cpl_table_get_column_mean(data_tbl,<span class="stringliteral">"DATA"</span>));
-<a name="l01763"></a>01763   check_nomsg(std_d=cpl_table_get_column_stdev(data_tbl,<span class="stringliteral">"DATA"</span>));
-<a name="l01764"></a>01764 
-<a name="l01765"></a>01765   <span class="comment">//cpl_table_save(data_tbl, NULL, NULL, "out_data.fits",CPL_IO_DEFAULT);</span>
-<a name="l01766"></a>01766   hmin=avg_d-kappa*std_d;
-<a name="l01767"></a>01767   hmax=avg_d+kappa*std_d;
-<a name="l01768"></a>01768   <span class="comment">//sinfo_msg("mean=%f stdv=%f",avg_d,std_d);</span>
-<a name="l01769"></a>01769   <span class="comment">//sinfo_msg("hmin=%f hmax=%f",hmin,hmax);</span>
-<a name="l01770"></a>01770   sinfo_msg(<span class="stringliteral">"Computes histogram"</span>);
-<a name="l01771"></a>01771   ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);
-<a name="l01772"></a>01772 
-<a name="l01773"></a>01773   value=(double)(hmax-hmin)/nbins/2.;
-<a name="l01774"></a>01774   <span class="comment">//sinfo_msg("value=%10.8f",value);</span>
-<a name="l01775"></a>01775 
-<a name="l01776"></a>01776 
-<a name="l01777"></a>01777   <span class="keywordflow">while</span>(min_xi_sz < HISTO_MIN_SIZE && counter < 10) {
-<a name="l01778"></a>01778     counter++;
-<a name="l01779"></a>01779     check_nomsg(max_h=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));
-<a name="l01780"></a>01780     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_pippo.fits", CPL_IO_DEFAULT);</span>
-<a name="l01781"></a>01781     check_nomsg(max_pos=sinfo_table_get_index_of_max(histo,<span class="stringliteral">"HY"</span>,CPL_TYPE_INT));
-<a name="l01782"></a>01782     <span class="comment">//sinfo_msg("max_pos=%d",max_pos);</span>
-<a name="l01783"></a>01783 
-<a name="l01784"></a>01784     <span class="comment">/*</span>
-<a name="l01785"></a>01785 <span class="comment">    check_nomsg(max_pos=sinfo_extract_table_rows(histo,"HY",</span>
-<a name="l01786"></a>01786 <span class="comment">                                                 CPL_EQUAL_TO,max_h));</span>
-<a name="l01787"></a>01787 <span class="comment">    sinfo_msg("size max_pos %d",cpl_table_get_nrow(max_pos));</span>
-<a name="l01788"></a>01788 <span class="comment">    sinfo_msg("value max_pos %d",cpl_table_get_int(max_pos,"HY",0,&status));</span>
-<a name="l01789"></a>01789 <span class="comment">    */</span>
-<a name="l01790"></a>01790     min_x=max_pos-1;
-<a name="l01791"></a>01791     max_x=max_pos+2;
-<a name="l01792"></a>01792     <span class="comment">//sinfo_msg("min_x=%d max_x=%d",min_x,max_x);</span>
-<a name="l01793"></a>01793 
-<a name="l01794"></a>01794     sinfo_free_table(&tmp_tbl1);
-<a name="l01795"></a>01795     <span class="comment">//sinfo_msg("x selection threshold: %f %d",</span>
-<a name="l01796"></a>01796     <span class="comment">//          cpl_table_get(histo,"HL",max_pos,&status),max_pos);</span>
-<a name="l01797"></a>01797     check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HL"</span>,
-<a name="l01798"></a>01798                                                   CPL_LESS_THAN,
-<a name="l01799"></a>01799                                  cpl_table_get(histo,<span class="stringliteral">"HL"</span>,max_pos,&status)));
-<a name="l01800"></a>01800     thres=cpl_table_get_column_max(tmp_tbl1,<span class="stringliteral">"HY"</span>)/HISTO_Y_CUT;
-<a name="l01801"></a>01801     <span class="comment">//sinfo_msg("threshold=%f",thres);</span>
-<a name="l01802"></a>01802 
-<a name="l01803"></a>01803 
-<a name="l01804"></a>01804     sinfo_free_table(&min_xi);
-<a name="l01805"></a>01805     check_nomsg(min_xi=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,
-<a name="l01806"></a>01806                                                 CPL_GREATER_THAN,thres));
-<a name="l01807"></a>01807 
-<a name="l01808"></a>01808     <span class="comment">//cpl_table_save(min_xi, NULL, NULL, "out_min_xi.fits", CPL_IO_DEFAULT);</span>
-<a name="l01809"></a>01809 
-<a name="l01810"></a>01810 
-<a name="l01811"></a>01811 
-<a name="l01812"></a>01812     min_xi_sz=cpl_table_get_nrow(min_xi);
-<a name="l01813"></a>01813     val=cpl_table_get(min_xi,<span class="stringliteral">"HL"</span>,0,&status);
-<a name="l01814"></a>01814 
-<a name="l01815"></a>01815     check_nomsg(min_pos=sinfo_table_get_index_of_val(histo,<span class="stringliteral">"HL"</span>,val,
-<a name="l01816"></a>01816                                                      CPL_TYPE_DOUBLE));
-<a name="l01817"></a>01817     <span class="comment">//sinfo_msg("min_pos=%d max_pos=%d max(h)=%d min_xi_sz=%d x[maxpos[0]]=%f",</span>
-<a name="l01818"></a>01818     <span class="comment">//           min_pos,   max_pos,   max_h,    min_xi_sz, val);</span>
-<a name="l01819"></a>01819 
-<a name="l01820"></a>01820 
-<a name="l01821"></a>01821 
-<a name="l01822"></a>01822     <span class="keywordflow">if</span> (min_xi_sz > 0) {
-<a name="l01823"></a>01823       min_x = min_pos-HISTO_X_LEFT_CUT*(max_pos-min_pos);
-<a name="l01824"></a>01824       max_x = max_pos+HISTO_X_RIGHT_CUT*(max_pos-min_pos);
-<a name="l01825"></a>01825     }
-<a name="l01826"></a>01826 
-<a name="l01827"></a>01827     <span class="comment">//sinfo_msg("min_x=%d max_x=%d",min_x,max_x);</span>
-<a name="l01828"></a>01828     check_nomsg(hmin=sinfo_table_column_interpolate(histo,<span class="stringliteral">"HL"</span>,min_x));
-<a name="l01829"></a>01829     check_nomsg(hmax=sinfo_table_column_interpolate(histo,<span class="stringliteral">"HL"</span>,max_x));
-<a name="l01830"></a>01830     <span class="comment">//sinfo_msg("hmin=%f hmax=%f min_xi_sz=%d",hmin,hmax,min_xi_sz);</span>
-<a name="l01831"></a>01831     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo.fits", CPL_IO_DEFAULT);</span>
-<a name="l01832"></a>01832     sinfo_free_table(&histo);
-<a name="l01833"></a>01833     ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);
-<a name="l01834"></a>01834     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo1.fits", CPL_IO_DEFAULT);</span>
-<a name="l01835"></a>01835     check_nomsg(cpl_table_add_scalar(histo,<span class="stringliteral">"HL"</span>,(hmax-hmin)/nbins/2));
-<a name="l01836"></a>01836     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo2.fits", CPL_IO_DEFAULT);</span>
-<a name="l01837"></a>01837 
-<a name="l01838"></a>01838 
-<a name="l01839"></a>01839 
-<a name="l01840"></a>01840   }
-<a name="l01841"></a>01841   sinfo_free_table(&data_tbl);
-<a name="l01842"></a>01842   sinfo_free_table(&min_xi);
-<a name="l01843"></a>01843 
-<a name="l01844"></a>01844   <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo.fits", CPL_IO_DEFAULT);</span>
-<a name="l01845"></a>01845 
-<a name="l01846"></a>01846   check_nomsg(peak=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));
-<a name="l01847"></a>01847   <span class="comment">//sinfo_msg("peak=%f",peak);</span>
-<a name="l01848"></a>01848   sinfo_free_table(&tmp_tbl1);
-<a name="l01849"></a>01849 
-<a name="l01850"></a>01850   check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,CPL_EQUAL_TO,peak));
-<a name="l01851"></a>01851 
-<a name="l01852"></a>01852   <span class="comment">//cpl_table_save(tmp_tbl1, NULL, NULL, "out_tmp_tbl1.fits", CPL_IO_DEFAULT);</span>
-<a name="l01853"></a>01853 
-<a name="l01854"></a>01854 
-<a name="l01855"></a>01855   check_nomsg(*centre=cpl_table_get_column_mean(tmp_tbl1,<span class="stringliteral">"HL"</span>));
-<a name="l01856"></a>01856   <span class="comment">//sinfo_msg("Background level=%f",*centre);</span>
-<a name="l01857"></a>01857 
-<a name="l01858"></a>01858   sinfo_free_table(&tmp_tbl1);
-<a name="l01859"></a>01859   check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,
-<a name="l01860"></a>01860                                                 CPL_GREATER_THAN,
-<a name="l01861"></a>01861                                                 peak/HISTO_Y_CUT));
-<a name="l01862"></a>01862   sinfo_free_table(&tmp_tbl2);
-<a name="l01863"></a>01863   check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,
-<a name="l01864"></a>01864                                                 CPL_LESS_THAN,peak));
-<a name="l01865"></a>01865   sinfo_free_table(&tmp_tbl1);
-<a name="l01866"></a>01866 
-<a name="l01867"></a>01867   check_nomsg(tempc=*centre-cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"HL"</span>));
-<a name="l01868"></a>01868   <span class="comment">//sinfo_msg("min HX %f",cpl_table_get_column_min(tmp_tbl2,"HL"));</span>
-<a name="l01869"></a>01869   sinfo_free_table(&tmp_tbl2);
-<a name="l01870"></a>01870   <span class="comment">//sinfo_msg("Tempc=%f",tempc);</span>
-<a name="l01871"></a>01871   check_nomsg(dist=sinfo_where_tab_min_max(histo,<span class="stringliteral">"HL"</span>,
-<a name="l01872"></a>01872                  CPL_GREATER_THAN,*centre-HISTO_DIST_TEMPC_MIN_FCT*tempc,
-<a name="l01873"></a>01873                  CPL_NOT_GREATER_THAN,*centre+HISTO_DIST_TEMPC_MAX_FCT*tempc));
-<a name="l01874"></a>01874 
-<a name="l01875"></a>01875   offset=cpl_table_get_column_min(histo,<span class="stringliteral">"HY"</span>);
-<a name="l01876"></a>01876   sinfo_free_table(&histo);
-<a name="l01877"></a>01877 
-<a name="l01878"></a>01878 
-<a name="l01879"></a>01879   check_nomsg(ndist=cpl_table_get_nrow(dist));
-<a name="l01880"></a>01880   check_nomsg(cpl_table_cast_column(dist,<span class="stringliteral">"HY"</span>,<span class="stringliteral">"HYdouble"</span>,CPL_TYPE_DOUBLE));
-<a name="l01881"></a>01881   check_nomsg(disth=cpl_table_get_data_double(dist,<span class="stringliteral">"HYdouble"</span>));
-<a name="l01882"></a>01882   check_nomsg(distx=cpl_table_get_data_double(dist,<span class="stringliteral">"HL"</span>));
-<a name="l01883"></a>01883   <span class="comment">//cpl_table_save(dist, NULL, NULL, "out_dist.fits", CPL_IO_DEFAULT);</span>
-<a name="l01884"></a>01884 
-<a name="l01885"></a>01885   <span class="comment">//TODO</span>
-<a name="l01886"></a>01886   <span class="comment">//gaussfit(distx,disty,dista,nterms=3);</span>
-<a name="l01887"></a>01887   <span class="comment">//*noise=dista[2];</span>
-<a name="l01888"></a>01888   *noise=tempc/2;
-<a name="l01889"></a>01889   <span class="comment">/* THIS DOES NOT WORK */</span>
-<a name="l01890"></a>01890   <span class="comment">//sinfo_msg("FWHM/2=%f",*noise);</span>
-<a name="l01891"></a>01891 
-<a name="l01892"></a>01892   <span class="keywordflow">if</span>(obj_noise_fit == 1) {
-<a name="l01893"></a>01893     check_nomsg(vy=cpl_vector_wrap(ndist,disth));
-<a name="l01894"></a>01894     check_nomsg(vx=cpl_vector_wrap(ndist,distx));
-<a name="l01895"></a>01895     check_nomsg(sx=cpl_vector_new(ndist));
-<a name="l01896"></a>01896     check_nomsg(cpl_vector_fill(sx,1.));
-<a name="l01897"></a>01897     check_nomsg(sy=cpl_vector_duplicate(sx));
-<a name="l01898"></a>01898     x0=*centre;
-<a name="l01899"></a>01899     sigma=tempc/2;
-<a name="l01900"></a>01900 
-<a name="l01901"></a>01901     check_nomsg(cpl_vector_fit_gaussian(vx,NULL,
-<a name="l01902"></a>01902                                         vy,NULL,
-<a name="l01903"></a>01903                                         CPL_FIT_ALL,
-<a name="l01904"></a>01904                                         &x0,&sigma,&area,&offset,
-<a name="l01905"></a>01905                                         NULL,NULL,NULL));
-<a name="l01906"></a>01906     <span class="comment">//sinfo_msg("Gauss fit parameters:"</span>
-<a name="l01907"></a>01907     <span class="comment">//          "x0=%f sigma=%f area=%f offset=%f mse=%f chired=%f",</span>
-<a name="l01908"></a>01908     <span class="comment">//           x0,sigma,area,offset,mse,chired);</span>
-<a name="l01909"></a>01909     <span class="comment">//sinfo_msg("Background level=%f",*centre);</span>
-<a name="l01910"></a>01910     <span class="comment">//sinfo_msg("Noise=%f",sigma);</span>
-<a name="l01911"></a>01911     *noise=sigma;
-<a name="l01912"></a>01912     sinfo_unwrap_vector(&vx);
-<a name="l01913"></a>01913     sinfo_unwrap_vector(&vy);
-<a name="l01914"></a>01914     sinfo_free_my_vector(&sx);
-<a name="l01915"></a>01915     sinfo_free_my_vector(&sy);
-<a name="l01916"></a>01916   }
-<a name="l01917"></a>01917   sinfo_free_table(&dist);
-<a name="l01918"></a>01918   <span class="comment">//*noise=18.7448;</span>
-<a name="l01919"></a>01919   <span class="comment">//*noise=20.585946;</span>
-<a name="l01920"></a>01920   <span class="keywordflow">return</span> 0;
-<a name="l01921"></a>01921 
-<a name="l01922"></a>01922  cleanup:
-<a name="l01923"></a>01923   sinfo_free_imagelist(&obj_cub);
-<a name="l01924"></a>01924   sinfo_free_propertylist(&plist);
-<a name="l01925"></a>01925   sinfo_free_table(&min_xi);
-<a name="l01926"></a>01926   sinfo_free_table(&tmp_tbl1);
-<a name="l01927"></a>01927   sinfo_free_table(&tmp_tbl2);
-<a name="l01928"></a>01928   sinfo_free_table(&histo);
-<a name="l01929"></a>01929   sinfo_free_table(&dist);
-<a name="l01930"></a>01930   sinfo_free_table(&data_tbl);
-<a name="l01931"></a>01931   sinfo_free_my_vector(&sx);
-<a name="l01932"></a>01932   sinfo_free_my_vector(&sy);
-<a name="l01933"></a>01933   sinfo_unwrap_vector(&vx);
-<a name="l01934"></a>01934   sinfo_unwrap_vector(&vy);
-<a name="l01935"></a>01935 
-<a name="l01936"></a>01936   <span class="keywordflow">return</span> -1;
-<a name="l01937"></a>01937 
-<a name="l01938"></a>01938 }
-<a name="l01939"></a>01939 
-<a name="l01940"></a>01940 
-<a name="l01953"></a>01953 cpl_table*
-<a name="l01954"></a>01954 sinfo_where_tab_min_max(cpl_table* t,
-<a name="l01955"></a>01955                         <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l01956"></a>01956                         cpl_table_select_operator op1,
-<a name="l01957"></a>01957                         <span class="keyword">const</span> <span class="keywordtype">double</span> v1,
-<a name="l01958"></a>01958                         cpl_table_select_operator op2,
-<a name="l01959"></a>01959                         <span class="keyword">const</span> <span class="keywordtype">double</span> v2)
-<a name="l01960"></a>01960 {
-<a name="l01961"></a>01961 
-<a name="l01962"></a>01962   cpl_table* res=NULL;
-<a name="l01963"></a>01963   cpl_table* tmp=NULL;
-<a name="l01964"></a>01964 
-<a name="l01965"></a>01965   check_nomsg(cpl_table_and_selected_double(t,col,op1,v1));
-<a name="l01966"></a>01966   check_nomsg(tmp=cpl_table_extract_selected(t));
-<a name="l01967"></a>01967   check_nomsg(cpl_table_and_selected_double(tmp,col,op2,v2));
-<a name="l01968"></a>01968   check_nomsg(res=cpl_table_extract_selected(tmp));
-<a name="l01969"></a>01969   check_nomsg(cpl_table_select_all(t));
-<a name="l01970"></a>01970   sinfo_free_table(&tmp);
-<a name="l01971"></a>01971 
-<a name="l01972"></a>01972   <span class="keywordflow">return</span> res;
-<a name="l01973"></a>01973 
-<a name="l01974"></a>01974  cleanup:
-<a name="l01975"></a>01975   sinfo_free_table(&tmp);
-<a name="l01976"></a>01976   sinfo_free_table(&res);
-<a name="l01977"></a>01977 
-<a name="l01978"></a>01978   <span class="keywordflow">return</span> NULL;
-<a name="l01979"></a>01979 
-<a name="l01980"></a>01980 }
-<a name="l01981"></a>01981 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02005"></a>02005 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02006"></a>02006 
-<a name="l02007"></a>02007 <span class="keywordtype">int</span>
-<a name="l02008"></a>02008 sinfo_histogram(<span class="keyword">const</span> cpl_table* data,
-<a name="l02009"></a>02009                 <span class="keyword">const</span> <span class="keywordtype">int</span> nbins,
-<a name="l02010"></a>02010                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,
-<a name="l02011"></a>02011                 <span class="keyword">const</span> <span class="keywordtype">double</span> max,
-<a name="l02012"></a>02012                 cpl_table** histo)
-<a name="l02013"></a>02013 {
-<a name="l02014"></a>02014   cpl_table* tmp_tbl1=NULL;
-<a name="l02015"></a>02015   cpl_table* tmp_tbl2=NULL;
-<a name="l02016"></a>02016   cpl_table* dat=NULL;
-<a name="l02017"></a>02017   <span class="keywordtype">int</span> ntot=0;
-<a name="l02018"></a>02018   <span class="keywordtype">int</span> i=0;
-<a name="l02019"></a>02019   <span class="keywordtype">int</span>* phy=NULL;
-<a name="l02020"></a>02020   <span class="keywordtype">double</span>* pdt=NULL;
-<a name="l02021"></a>02021   <span class="comment">/* double* phx=NULL; */</span>
-<a name="l02022"></a>02022 
-<a name="l02023"></a>02023   <span class="keywordtype">double</span> vtmp=0;
-<a name="l02024"></a>02024   <span class="keywordtype">double</span> vstp=0;
-<a name="l02025"></a>02025   <span class="keywordtype">double</span> vmax=0;
-<a name="l02026"></a>02026   <span class="keywordtype">double</span> vmin=0;
-<a name="l02027"></a>02027 
-<a name="l02028"></a>02028   <span class="keywordtype">int</span> h=0;
-<a name="l02029"></a>02029   check_nomsg(dat=cpl_table_duplicate(data));
-<a name="l02030"></a>02030   check_nomsg(cpl_table_cast_column(dat,<span class="stringliteral">"DATA"</span>,<span class="stringliteral">"DDATA"</span>,CPL_TYPE_DOUBLE));
-<a name="l02031"></a>02031   <span class="comment">/*</span>
-<a name="l02032"></a>02032 <span class="comment">  sinfo_msg("min=%f max=%f",</span>
-<a name="l02033"></a>02033 <span class="comment">            cpl_table_get_column_min(dat,"DDATA"),</span>
-<a name="l02034"></a>02034 <span class="comment">            cpl_table_get_column_max(dat,"DDATA"));</span>
-<a name="l02035"></a>02035 <span class="comment">  */</span>
-<a name="l02036"></a>02036   check_nomsg(cpl_table_and_selected_double(dat,<span class="stringliteral">"DDATA"</span>,
-<a name="l02037"></a>02037                                             CPL_NOT_GREATER_THAN,max));
-<a name="l02038"></a>02038   <span class="comment">/*</span>
-<a name="l02039"></a>02039 <span class="comment">  check_nomsg(cpl_table_and_selected_double(dat,"DDATA",CPL_LESS_THAN,max));</span>
-<a name="l02040"></a>02040 <span class="comment">  */</span>
-<a name="l02041"></a>02041   check_nomsg(tmp_tbl1=cpl_table_extract_selected(dat));
-<a name="l02042"></a>02042   <span class="comment">/*</span>
-<a name="l02043"></a>02043 <span class="comment">  sinfo_msg("min=%f max=%f",</span>
-<a name="l02044"></a>02044 <span class="comment">             cpl_table_get_column_min(tmp_tbl1,"DDATA"),</span>
-<a name="l02045"></a>02045 <span class="comment">             cpl_table_get_column_max(tmp_tbl1,"DDATA"));</span>
-<a name="l02046"></a>02046 <span class="comment">  */</span>
-<a name="l02047"></a>02047   <span class="comment">/*</span>
-<a name="l02048"></a>02048 <span class="comment">  check_nomsg(cpl_table_and_selected_double(tmp_tbl1,"DDATA",</span>
-<a name="l02049"></a>02049 <span class="comment">                                            CPL_NOT_LESS_THAN,min));</span>
-<a name="l02050"></a>02050 <span class="comment">  */</span>
-<a name="l02051"></a>02051   check_nomsg(cpl_table_and_selected_double(tmp_tbl1,<span class="stringliteral">"DDATA"</span>,
-<a name="l02052"></a>02052                                             CPL_GREATER_THAN,min));
-<a name="l02053"></a>02053   check_nomsg(tmp_tbl2=cpl_table_extract_selected(tmp_tbl1));
-<a name="l02054"></a>02054   <span class="comment">/*</span>
-<a name="l02055"></a>02055 <span class="comment">  sinfo_msg("min=%f max=%f",</span>
-<a name="l02056"></a>02056 <span class="comment">             cpl_table_get_column_min(tmp_tbl2,"DDATA"),</span>
-<a name="l02057"></a>02057 <span class="comment">             cpl_table_get_column_max(tmp_tbl2,"DDATA"));</span>
-<a name="l02058"></a>02058 <span class="comment">  */</span>
-<a name="l02059"></a>02059   sinfo_free_table(&tmp_tbl1);
-<a name="l02060"></a>02060   <span class="comment">/*</span>
-<a name="l02061"></a>02061 <span class="comment">  check_nomsg(tmp_tbl1=sinfo_extract_table_rows(dat,"DDATA",</span>
-<a name="l02062"></a>02062 <span class="comment">                                                CPL_NOT_GREATER_THAN,max));</span>
-<a name="l02063"></a>02063 <span class="comment">  check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,"DDATA",</span>
-<a name="l02064"></a>02064 <span class="comment">                                                CPL_NOT_LESS_THAN,min));</span>
-<a name="l02065"></a>02065 <span class="comment">  */</span>
-<a name="l02066"></a>02066 
-<a name="l02067"></a>02067   check_nomsg(ntot=cpl_table_get_nrow(tmp_tbl2));
-<a name="l02068"></a>02068   <span class="comment">/* not necessry to sort:</span>
-<a name="l02069"></a>02069 <span class="comment">    check_nomsg(sinfo_sort_table_1(tmp_tbl2,"DDATA",FALSE));*/</span>
-<a name="l02070"></a>02070   check_nomsg(vmin=cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"DDATA"</span>));
-<a name="l02071"></a>02071   check_nomsg(vmax=cpl_table_get_column_max(tmp_tbl2,<span class="stringliteral">"DDATA"</span>));
-<a name="l02072"></a>02072   vstp=(vmax-vmin)/(nbins-1);
-<a name="l02073"></a>02073   <span class="comment">/* sinfo_msg("vmin=%f vmax=%f step=%f",vmin,vmax,vstp); */</span>
-<a name="l02074"></a>02074   check_nomsg(*histo=cpl_table_new(nbins));
-<a name="l02075"></a>02075   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HX"</span>,CPL_TYPE_DOUBLE));
-<a name="l02076"></a>02076   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HL"</span>,CPL_TYPE_DOUBLE));
-<a name="l02077"></a>02077   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HY"</span>,CPL_TYPE_INT));
-<a name="l02078"></a>02078 
-<a name="l02079"></a>02079   <span class="comment">/*check_nomsg(cpl_table_fill_column_window(*histo,"HX",0,nbins,0)); */</span>
-<a name="l02080"></a>02080   check_nomsg(cpl_table_fill_column_window(*histo,<span class="stringliteral">"HL"</span>,0,nbins,0));
-<a name="l02081"></a>02081   check_nomsg(cpl_table_fill_column_window(*histo,<span class="stringliteral">"HY"</span>,0,nbins,0));
-<a name="l02082"></a>02082 
-<a name="l02083"></a>02083   check_nomsg(phy=cpl_table_get_data_int(*histo,<span class="stringliteral">"HY"</span>));
-<a name="l02084"></a>02084   <span class="comment">/*check_nomsg(phx=cpl_table_get_data_double(*histo,"HX")); */</span>
-<a name="l02085"></a>02085   check_nomsg(pdt=cpl_table_get_data_double(dat,<span class="stringliteral">"DATA"</span>));
-<a name="l02086"></a>02086 
-<a name="l02087"></a>02087   <span class="keywordflow">for</span>(i=0;i<nbins;i++) {
-<a name="l02088"></a>02088     cpl_table_set_double(*histo,<span class="stringliteral">"HX"</span>,i,(<span class="keywordtype">double</span>)i);
-<a name="l02089"></a>02089     vtmp=vmin+i*vstp;
-<a name="l02090"></a>02090     cpl_table_set_double(*histo,<span class="stringliteral">"HL"</span>,i,vtmp);
-<a name="l02091"></a>02091   }
-<a name="l02092"></a>02092   h=0;
-<a name="l02093"></a>02093 
-<a name="l02094"></a>02094   <span class="keywordflow">for</span>(i=0;i<ntot;i++) {
-<a name="l02095"></a>02095     h=floor((pdt[i]-vmin)/vstp);
-<a name="l02096"></a>02096     <span class="keywordflow">if</span>((h<nbins) && (h>-1)) {
-<a name="l02097"></a>02097       phy[h]++;
-<a name="l02098"></a>02098     }
-<a name="l02099"></a>02099   }
-<a name="l02100"></a>02100   <span class="comment">//cpl_table_save(*histo, NULL, NULL, "out_histo_p5.fits", CPL_IO_DEFAULT);</span>
-<a name="l02101"></a>02101 
-<a name="l02102"></a>02102   sinfo_free_table(&tmp_tbl2);
-<a name="l02103"></a>02103   sinfo_free_table(&dat);
-<a name="l02104"></a>02104 
-<a name="l02105"></a>02105 
-<a name="l02106"></a>02106   <span class="keywordflow">return</span> 0;
-<a name="l02107"></a>02107  cleanup:
-<a name="l02108"></a>02108   sinfo_free_table(&tmp_tbl1);
-<a name="l02109"></a>02109   sinfo_free_table(&tmp_tbl2);
-<a name="l02110"></a>02110   sinfo_free_table(&dat);
-<a name="l02111"></a>02111 
-<a name="l02112"></a>02112   <span class="keywordflow">return</span> -1;
-<a name="l02113"></a>02113 
-<a name="l02114"></a>02114 }
-<a name="l02115"></a>02115 
-<a name="l02116"></a>02116 
-<a name="l02117"></a>02117 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02127"></a>02127 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02128"></a>02128 
-<a name="l02129"></a>02129 <span class="keywordtype">int</span>
-<a name="l02130"></a>02130 sinfo_object_flag_low_values(cpl_frame* obj_frm,
-<a name="l02131"></a>02131                              <span class="keyword">const</span> <span class="keywordtype">double</span> cnt,
-<a name="l02132"></a>02132                              <span class="keyword">const</span> <span class="keywordtype">double</span> sig,
-<a name="l02133"></a>02133                              cpl_imagelist** flag_data)
-<a name="l02134"></a>02134 {
-<a name="l02135"></a>02135 
-<a name="l02136"></a>02136   <span class="keywordtype">int</span> xsz=0;
-<a name="l02137"></a>02137   <span class="keywordtype">int</span> ysz=0;
-<a name="l02138"></a>02138   <span class="keywordtype">int</span> zsz=0;
-<a name="l02139"></a>02139   <span class="keywordtype">int</span> n=0;
-<a name="l02140"></a>02140   <span class="keywordtype">int</span> i=0;
-<a name="l02141"></a>02141   <span class="keywordtype">int</span> k=0;
-<a name="l02142"></a>02142   <span class="keywordtype">int</span> r=0;
-<a name="l02143"></a>02143 
-<a name="l02144"></a>02144   cpl_propertylist* plist=NULL;
-<a name="l02145"></a>02145   cpl_table* data_tbl=NULL;
-<a name="l02146"></a>02146   cpl_table* flag_tbl=NULL;
-<a name="l02147"></a>02147   cpl_image* img=NULL;
-<a name="l02148"></a>02148   cpl_imagelist* obj_cub=NULL;
-<a name="l02149"></a>02149 
-<a name="l02150"></a>02150   <span class="keywordtype">double</span>* pdata=NULL;
-<a name="l02151"></a>02151   <span class="keywordtype">double</span>* pflag=NULL;
-<a name="l02152"></a>02152 
-<a name="l02153"></a>02153  <span class="comment">/* Get Object relevant information */</span>
-<a name="l02154"></a>02154   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));
-<a name="l02155"></a>02155   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));
-<a name="l02156"></a>02156   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));
-<a name="l02157"></a>02157   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));
-<a name="l02158"></a>02158   sinfo_free_propertylist(&plist);
-<a name="l02159"></a>02159 
-<a name="l02160"></a>02160   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),
-<a name="l02161"></a>02161                                           CPL_TYPE_DOUBLE,0));
-<a name="l02162"></a>02162 
-<a name="l02163"></a>02163   n=xsz*ysz*zsz;
-<a name="l02164"></a>02164   check_nomsg(data_tbl=cpl_table_new(n));
-<a name="l02165"></a>02165   check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));
-<a name="l02166"></a>02166 
-<a name="l02167"></a>02167   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {
-<a name="l02168"></a>02168     check_nomsg(img=cpl_imagelist_get(obj_cub,k));
-<a name="l02169"></a>02169     check_nomsg(pdata=cpl_image_get_data_double(img));
-<a name="l02170"></a>02170     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {
-<a name="l02171"></a>02171       <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pdata[i])) {
-<a name="l02172"></a>02172     check_nomsg(cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]));
-<a name="l02173"></a>02173         r++;
-<a name="l02174"></a>02174       }
-<a name="l02175"></a>02175     }
-<a name="l02176"></a>02176   }
-<a name="l02177"></a>02177 
-<a name="l02178"></a>02178   check_nomsg(cpl_table_erase_invalid(data_tbl));
-<a name="l02179"></a>02179   <span class="comment">//sinfo_msg("Background level: %f Noise: %f",cnt,sig);</span>
-<a name="l02180"></a>02180   check_nomsg(cpl_table_and_selected_double(data_tbl,<span class="stringliteral">"DATA"</span>,
-<a name="l02181"></a>02181                                            CPL_LESS_THAN,cnt+2*sig));
-<a name="l02182"></a>02182   check_nomsg(flag_tbl=cpl_table_extract_selected(data_tbl));
-<a name="l02183"></a>02183   sinfo_free_table(&data_tbl);
-<a name="l02184"></a>02184   <span class="comment">//check_nomsg(cpl_table_save(flag_tbl,NULL,NULL,</span>
-<a name="l02185"></a>02185   <span class="comment">//                             "out_flag.fits",CPL_IO_DEFAULT));</span>
-<a name="l02186"></a>02186   sinfo_free_table(&flag_tbl);
-<a name="l02187"></a>02187 
-<a name="l02188"></a>02188   check_nomsg(*flag_data=cpl_imagelist_new());
-<a name="l02189"></a>02189   <span class="keywordflow">for</span>(i=0;i<zsz;i++) {
-<a name="l02190"></a>02190     check_nomsg(img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));
-<a name="l02191"></a>02191     check_nomsg(cpl_image_add_scalar(img,0));
-<a name="l02192"></a>02192     check_nomsg(cpl_imagelist_set(*flag_data,cpl_image_duplicate(img),i));
-<a name="l02193"></a>02193     sinfo_free_image(&img);
-<a name="l02194"></a>02194   }
-<a name="l02195"></a>02195   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {
-<a name="l02196"></a>02196     check_nomsg(img=cpl_imagelist_get(*flag_data,k));
-<a name="l02197"></a>02197     pflag=cpl_image_get_data_double(cpl_imagelist_get(*flag_data,k));
-<a name="l02198"></a>02198     pdata=cpl_image_get_data_double(cpl_imagelist_get(obj_cub,k));
-<a name="l02199"></a>02199     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {
-<a name="l02200"></a>02200       <span class="keywordflow">if</span>((!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pdata[i])) && pdata[i] < (cnt+2*sig)) {
-<a name="l02201"></a>02201         pflag[i]=1;
-<a name="l02202"></a>02202       }
-<a name="l02203"></a>02203     }
-<a name="l02204"></a>02204   }
-<a name="l02205"></a>02205 
-<a name="l02206"></a>02206   sinfo_free_imagelist(&obj_cub);
-<a name="l02207"></a>02207 
-<a name="l02208"></a>02208 
-<a name="l02209"></a>02209 
-<a name="l02210"></a>02210 
-<a name="l02211"></a>02211   <span class="keywordflow">return</span> 0;
-<a name="l02212"></a>02212 
-<a name="l02213"></a>02213  cleanup:
-<a name="l02214"></a>02214   sinfo_free_propertylist(&plist);
-<a name="l02215"></a>02215   sinfo_free_imagelist(&obj_cub);
-<a name="l02216"></a>02216   sinfo_free_table(&data_tbl);
-<a name="l02217"></a>02217   sinfo_free_table(&flag_tbl);
-<a name="l02218"></a>02218 
-<a name="l02219"></a>02219   <span class="keywordflow">return</span> -1;
-<a name="l02220"></a>02220 }
-<a name="l02221"></a>02221 
-<a name="l02222"></a>02222 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02236"></a>02236 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02237"></a>02237 
-<a name="l02238"></a>02238 
-<a name="l02239"></a>02239 <span class="keywordtype">int</span>
-<a name="l02240"></a>02240 sinfo_object_flag_sky_pixels(cpl_frame* obj_frm,
-<a name="l02241"></a>02241                              cpl_table* lambda,
-<a name="l02242"></a>02242                              cpl_table* mrange,
-<a name="l02243"></a>02243                  cpl_imagelist* flag_data,
-<a name="l02244"></a>02244                              <span class="keyword">const</span> <span class="keywordtype">double</span> tol,
-<a name="l02245"></a>02245                              cpl_image** g_img,
-<a name="l02246"></a>02246                              cpl_image** r_img,
-<a name="l02247"></a>02247                              cpl_image** image)
-<a name="l02248"></a>02248 {
-<a name="l02249"></a>02249 
-<a name="l02250"></a>02250   <span class="keywordtype">int</span> xsz=0;
-<a name="l02251"></a>02251   <span class="keywordtype">int</span> ysz=0;
-<a name="l02252"></a>02252   <span class="keywordtype">int</span> zsz=0;
-<a name="l02253"></a>02253   <span class="keywordtype">int</span> i=0;
-<a name="l02254"></a>02254   <span class="keywordtype">int</span> j=0;
-<a name="l02255"></a>02255   <span class="keywordtype">int</span> gpix_i=0;
-<a name="l02256"></a>02256   <span class="keywordtype">double</span> tot=0;
-<a name="l02257"></a>02257   <span class="keywordtype">double</span> all_pix=0;
-<a name="l02258"></a>02258   <span class="keywordtype">double</span> flag_pix=0;
-<a name="l02259"></a>02259   <span class="keywordtype">double</span> ratio=0;
-<a name="l02260"></a>02260 
-<a name="l02261"></a>02261   <span class="keywordtype">double</span>* pr_img=NULL;
-<a name="l02262"></a>02262   <span class="keywordtype">double</span>* pg_img=NULL;
-<a name="l02263"></a>02263   <span class="keywordtype">double</span>* pimage=NULL;
-<a name="l02264"></a>02264   cpl_propertylist* plist=NULL;
-<a name="l02265"></a>02265   cpl_imagelist* osel=NULL;
-<a name="l02266"></a>02266   cpl_imagelist* fsel=NULL;
-<a name="l02267"></a>02267   cpl_table* gpix=NULL;
-<a name="l02268"></a>02268   cpl_table* gspec=NULL;
-<a name="l02269"></a>02269   cpl_table* fspec=NULL;
-<a name="l02270"></a>02270   cpl_table* ospec=NULL;
-<a name="l02271"></a>02271 
-<a name="l02272"></a>02272   cpl_imagelist* obj_cub=NULL;
-<a name="l02273"></a>02273 
-<a name="l02274"></a>02274   <span class="comment">/* Get Object relevant information */</span>
-<a name="l02275"></a>02275   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));
-<a name="l02276"></a>02276 
-<a name="l02277"></a>02277   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));
-<a name="l02278"></a>02278   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));
-<a name="l02279"></a>02279   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));
-<a name="l02280"></a>02280   sinfo_free_propertylist(&plist);
-<a name="l02281"></a>02281   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),
-<a name="l02282"></a>02282                                                       CPL_TYPE_DOUBLE,0));
-<a name="l02283"></a>02283 
-<a name="l02284"></a>02284   <span class="comment">/* Flag sky pixels in data cube */</span>
-<a name="l02285"></a>02285   <span class="comment">/* create images */</span>
-<a name="l02286"></a>02286   check_nomsg(*r_img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));
-<a name="l02287"></a>02287   check_nomsg(*g_img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));
-<a name="l02288"></a>02288   check_nomsg(*image=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));
-<a name="l02289"></a>02289 
-<a name="l02290"></a>02290   cknull_nomsg(pr_img=cpl_image_get_data_double(*r_img));
-<a name="l02291"></a>02291   cknull_nomsg(pg_img=cpl_image_get_data_double(*g_img));
-<a name="l02292"></a>02292   cknull_nomsg(pimage=cpl_image_get_data_double(*image));
-<a name="l02293"></a>02293 
-<a name="l02294"></a>02294   <span class="comment">/* TODO */</span>
-<a name="l02295"></a>02295   <span class="comment">// fill image points:</span>
-<a name="l02296"></a>02296   <span class="comment">// g_img: mask with at least half good pixels along spectral range</span>
-<a name="l02297"></a>02297   <span class="comment">// r_img: mask with ratio of good pixels along spectral range</span>
-<a name="l02298"></a>02298   <span class="comment">// image: image with mean of spectrum over good pixels</span>
-<a name="l02299"></a>02299 
-<a name="l02300"></a>02300   <span class="comment">//check_nomsg(cpl_table_save(lambda, NULL, NULL,</span>
-<a name="l02301"></a>02301   <span class="comment">//                             "out_lambda.fits", CPL_IO_DEFAULT));</span>
-<a name="l02302"></a>02302   <span class="comment">//check_nomsg(cpl_table_save(mrange, NULL, NULL,</span>
-<a name="l02303"></a>02303   <span class="comment">//                             "out_mrange.fits", CPL_IO_DEFAULT));</span>
-<a name="l02304"></a>02304 
-<a name="l02305"></a>02305   cknull_nomsg(osel=sinfo_imagelist_select_range(obj_cub,lambda,
-<a name="l02306"></a>02306                                                       mrange,tol));
-<a name="l02307"></a>02307 
-<a name="l02308"></a>02308   sinfo_free_imagelist(&obj_cub);
-<a name="l02309"></a>02309 
-<a name="l02310"></a>02310   cknull_nomsg(fsel=sinfo_imagelist_select_range(flag_data,lambda,
-<a name="l02311"></a>02311                                                       mrange,tol));
-<a name="l02312"></a>02312 
-<a name="l02313"></a>02313   <span class="comment">//check_nomsg(cpl_imagelist_save(osel,"out_osel.fits",</span>
-<a name="l02314"></a>02314   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l02315"></a>02315   <span class="comment">//check_nomsg(cpl_imagelist_save(fsel,"out_fsel.fits",</span>
-<a name="l02316"></a>02316   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l02317"></a>02317 
-<a name="l02318"></a>02318   <span class="keywordflow">for</span>(j=0;j<ysz;j++) {
-<a name="l02319"></a>02319     <span class="keywordflow">for</span>(i=0;i<xsz;i++) {
-<a name="l02320"></a>02320       <span class="comment">// consider only planes in the proper wavelegth ranges</span>
-<a name="l02321"></a>02321       cknull_nomsg(ospec=sinfo_slice_z(osel,i,j));
-<a name="l02322"></a>02322       cknull_nomsg(fspec=sinfo_slice_z(fsel,i,j));
-<a name="l02323"></a>02323       <span class="comment">// consider only finite pixels</span>
-<a name="l02324"></a>02324       check_nomsg(gpix_i=sinfo_table_extract_finite(ospec,fspec,&gpix,&gspec));
-<a name="l02325"></a>02325       <span class="comment">//sinfo_msg("gpix_i=%d",gpix_i);</span>
-<a name="l02326"></a>02326       <span class="keywordflow">if</span>(gpix_i > 0) {
-<a name="l02327"></a>02327         <span class="comment">// build two arrays of proper size</span>
-<a name="l02328"></a>02328         all_pix=(double)gpix_i;
-<a name="l02329"></a>02329     <span class="comment">/*</span>
-<a name="l02330"></a>02330 <span class="comment">        sinfo_msg("flagspec: min=%f max=%f",</span>
-<a name="l02331"></a>02331 <span class="comment">                  cpl_table_get_column_min(fspec,"VALUE"),</span>
-<a name="l02332"></a>02332 <span class="comment">                  cpl_table_get_column_max(fspec,"VALUE"));</span>
-<a name="l02333"></a>02333 <span class="comment">        sinfo_msg("good flagspec: min=%f max=%f",</span>
-<a name="l02334"></a>02334 <span class="comment">                  cpl_table_get_column_min(gspec,"VALUE"),</span>
-<a name="l02335"></a>02335 <span class="comment">                  cpl_table_get_column_max(gspec,"VALUE"));</span>
-<a name="l02336"></a>02336 <span class="comment">        sinfo_msg("nfspec=%d",cpl_table_get_nrow(fspec));</span>
-<a name="l02337"></a>02337 <span class="comment">        check_nomsg(cpl_table_save(fspec, NULL, NULL,</span>
-<a name="l02338"></a>02338 <span class="comment">                    "out_fspec.fits",CPL_IO_DEFAULT));</span>
-<a name="l02339"></a>02339 <span class="comment">        check_nomsg(cpl_table_save(gspec, NULL, NULL,</span>
-<a name="l02340"></a>02340 <span class="comment">                    "out_gspec.fits", CPL_IO_DEFAULT));</span>
-<a name="l02341"></a>02341 <span class="comment">    */</span>
-<a name="l02342"></a>02342         <span class="comment">//check_nomsg(flag_pix=cpl_table_and_selected_double(fspec,"VALUE",</span>
-<a name="l02343"></a>02343         <span class="comment">//                                              CPL_GREATER_THAN,0.5));</span>
-<a name="l02344"></a>02344         <span class="comment">//sinfo_msg("all_pix=%f flag_pix=%f",all_pix,flag_pix);</span>
-<a name="l02345"></a>02345 
-<a name="l02346"></a>02346         check_nomsg(flag_pix=cpl_table_and_selected_double(gspec,<span class="stringliteral">"VALUE"</span>,
-<a name="l02347"></a>02347                                                         CPL_GREATER_THAN,0.5));
-<a name="l02348"></a>02348         <span class="comment">//sinfo_msg("all_pix=%f flag_pix=%f",all_pix,flag_pix);</span>
-<a name="l02349"></a>02349         <span class="comment">// flag_pix = float(n_elements(where(fspec[gpix] > 0.5)));</span>
-<a name="l02350"></a>02350         <span class="comment">// compute the ratio between the two arrays</span>
-<a name="l02351"></a>02351         ratio=flag_pix/all_pix;
-<a name="l02352"></a>02352         <span class="comment">// considers only pixels with have at least half good pixels</span>
-<a name="l02353"></a>02353         <span class="keywordflow">if</span>(all_pix > cpl_table_get_nrow(mrange)/2) {
-<a name="l02354"></a>02354           pg_img[i+j*xsz]=1;
-<a name="l02355"></a>02355           pr_img[i+j*xsz]=ratio;
-<a name="l02356"></a>02356         }
-<a name="l02357"></a>02357         <span class="comment">//mean(ospec(gpix))</span>
-<a name="l02358"></a>02358         check_nomsg(pimage[i+j*xsz]=cpl_table_get_column_mean(gpix,<span class="stringliteral">"VALUE"</span>));
-<a name="l02359"></a>02359         <span class="comment">//sinfo_msg("ix=%d iy=%d r=%f",i,j,ratio);</span>
-<a name="l02360"></a>02360       }
-<a name="l02361"></a>02361       sinfo_free_table(&ospec);
-<a name="l02362"></a>02362       sinfo_free_table(&fspec);
-<a name="l02363"></a>02363       sinfo_free_table(&gpix);
-<a name="l02364"></a>02364       sinfo_free_table(&gspec);
-<a name="l02365"></a>02365 
-<a name="l02366"></a>02366     } <span class="comment">/* end for over i */</span>
-<a name="l02367"></a>02367   } <span class="comment">/* end for over j */</span>
-<a name="l02368"></a>02368   sinfo_free_imagelist(&osel);
-<a name="l02369"></a>02369   sinfo_free_imagelist(&fsel);
-<a name="l02370"></a>02370 
-<a name="l02371"></a>02371   <span class="comment">/*</span>
-<a name="l02372"></a>02372 <span class="comment">  cpl_image_save(*r_img,"out_r_img.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l02373"></a>02373 <span class="comment">                 NULL,CPL_IO_DEFAULT);</span>
-<a name="l02374"></a>02374 <span class="comment">  cpl_image_save(*g_img,"out_g_img.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l02375"></a>02375 <span class="comment">                 NULL,CPL_IO_DEFAULT);</span>
-<a name="l02376"></a>02376 <span class="comment">  cpl_image_save(*image,"out_image.fits",CPL_BPP_IEEE_FLOAT,</span>
-<a name="l02377"></a>02377 <span class="comment">                 NULL,CPL_IO_DEFAULT);</span>
-<a name="l02378"></a>02378 <span class="comment">  */</span>
-<a name="l02379"></a>02379   <span class="comment">// get total(g_arr)</span>
-<a name="l02380"></a>02380   check_nomsg(tot=cpl_image_get_flux(*g_img));
-<a name="l02381"></a>02381   <span class="keywordflow">if</span>(tot < 1) {
-<a name="l02382"></a>02382     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good spaxel"</span>);
-<a name="l02383"></a>02383     <span class="keywordflow">goto</span> cleanup;
-<a name="l02384"></a>02384   }
-<a name="l02385"></a>02385 
-<a name="l02386"></a>02386   <span class="keywordflow">return</span> 0;
-<a name="l02387"></a>02387 
-<a name="l02388"></a>02388 
-<a name="l02389"></a>02389  cleanup:
-<a name="l02390"></a>02390   sinfo_free_propertylist(&plist);
-<a name="l02391"></a>02391   sinfo_free_imagelist(&obj_cub);
-<a name="l02392"></a>02392   sinfo_free_imagelist(&osel);
-<a name="l02393"></a>02393   sinfo_free_imagelist(&fsel);
-<a name="l02394"></a>02394    sinfo_free_table(&ospec);
-<a name="l02395"></a>02395   sinfo_free_table(&fspec);
-<a name="l02396"></a>02396   sinfo_free_table(&gpix);
-<a name="l02397"></a>02397   sinfo_free_table(&gspec);
-<a name="l02398"></a>02398 
-<a name="l02399"></a>02399   <span class="keywordflow">return</span> -1;
-<a name="l02400"></a>02400 
-<a name="l02401"></a>02401 
-<a name="l02402"></a>02402 }
-<a name="l02403"></a>02403 
-<a name="l02412"></a>02412 <span class="keywordtype">int</span>
-<a name="l02413"></a>02413 sinfo_choose_good_sky_pixels(cpl_frame* obj_frm,
-<a name="l02414"></a>02414                              cpl_image* r_img,
-<a name="l02415"></a>02415                              cpl_image* g_img,
-<a name="l02416"></a>02416                              <span class="keyword">const</span> <span class="keywordtype">double</span> min_frac,
-<a name="l02417"></a>02417                              cpl_image** mask)
-<a name="l02418"></a>02418 {
-<a name="l02419"></a>02419 
-<a name="l02420"></a>02420   <span class="keywordtype">int</span> xsz=0;
-<a name="l02421"></a>02421   <span class="keywordtype">int</span> ysz=0;
-<a name="l02422"></a>02422   <span class="keywordtype">int</span> zsz=0;
-<a name="l02423"></a>02423   <span class="keywordtype">int</span> r2i=0;
-<a name="l02424"></a>02424   <span class="keywordtype">int</span> status=0;
-<a name="l02425"></a>02425   <span class="keywordtype">double</span> tot=0;
-<a name="l02426"></a>02426   <span class="keywordtype">double</span> thres=SKY_THRES;
-<a name="l02427"></a>02427   <span class="keywordtype">double</span> cum_x_max=0;
-<a name="l02428"></a>02428 
-<a name="l02429"></a>02429   cpl_image* r2img=NULL;
-<a name="l02430"></a>02430   cpl_propertylist* plist=NULL;
-<a name="l02431"></a>02431   cpl_table* cum=NULL;
-<a name="l02432"></a>02432   cpl_table* hcum=NULL;
-<a name="l02433"></a>02433   cpl_table* thres_tbl=NULL;
-<a name="l02434"></a>02434 
-<a name="l02435"></a>02435   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));
-<a name="l02436"></a>02436   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));
-<a name="l02437"></a>02437   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));
-<a name="l02438"></a>02438   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));
-<a name="l02439"></a>02439   sinfo_free_propertylist(&plist);
-<a name="l02440"></a>02440 
-<a name="l02441"></a>02441   <span class="comment">// choose pixels which seem to be sky (ie 95% of spectral pixels are flagged)</span>
-<a name="l02442"></a>02442   check_nomsg(*mask=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));
-<a name="l02443"></a>02443   <span class="comment">//r2 = where(r_img >= thres,r2i);</span>
-<a name="l02444"></a>02444   <span class="comment">// count good pixels: set to 0 what < thres and to 1 what > thres</span>
-<a name="l02445"></a>02445   check_nomsg(r2img=cpl_image_duplicate(r_img));
-<a name="l02446"></a>02446   check_nomsg(cpl_image_threshold(r2img,thres,thres,0,1));
-<a name="l02447"></a>02447   check_nomsg(r2i=cpl_image_get_flux(r2img));
-<a name="l02448"></a>02448 
-<a name="l02449"></a>02449   <span class="keywordflow">if</span>(r2i>0) {
-<a name="l02450"></a>02450     sinfo_free_image(&(*mask));
-<a name="l02451"></a>02451     check_nomsg(*mask=cpl_image_duplicate(r2img));
-<a name="l02452"></a>02452   }
-<a name="l02453"></a>02453   sinfo_free_image(&r2img);
-<a name="l02454"></a>02454   check_nomsg(r2img=cpl_image_duplicate(r_img));
-<a name="l02455"></a>02455   check_nomsg(cpl_image_threshold(r2img,thres,SINFO_DBL_MAX,0,SINFO_DBL_MAX));
-<a name="l02456"></a>02456   sinfo_free_image(&r2img);
-<a name="l02457"></a>02457 
-<a name="l02458"></a>02458   check_nomsg(tot=cpl_image_get_flux(g_img));
-<a name="l02459"></a>02459 
-<a name="l02460"></a>02460 
-<a name="l02461"></a>02461    sinfo_msg(<span class="stringliteral">"%2.2d spaxels (%4.1f %% of good pixels) are designated as sky"</span>,
-<a name="l02462"></a>02462              r2i,100.*r2i/tot);
-<a name="l02463"></a>02463 
-<a name="l02464"></a>02464    <span class="comment">//threshold ratio for fraction 'minfrac' of spatial pixels to be 'sky'</span>
-<a name="l02465"></a>02465    <span class="keywordflow">if</span> (1.*r2i/tot < min_frac) {
-<a name="l02466"></a>02466      sinfo_msg(<span class="stringliteral">"this is too small - will increase it to %4.1f %%"</span>,
-<a name="l02467"></a>02467            100.*min_frac);
-<a name="l02468"></a>02468      check_nomsg(cum=cpl_table_new(xsz*ysz));
-<a name="l02469"></a>02469      check_nomsg(cpl_table_new_column(cum,<span class="stringliteral">"X"</span>,CPL_TYPE_DOUBLE));
-<a name="l02470"></a>02470      sinfo_table_column_dindgen(&cum,<span class="stringliteral">"X"</span>);
-<a name="l02471"></a>02471      check_nomsg(cpl_table_add_scalar(cum,<span class="stringliteral">"X"</span>,1.));
-<a name="l02472"></a>02472 
-<a name="l02473"></a>02473      <span class="comment">//hcum = r_img(sort(r_img));</span>
-<a name="l02474"></a>02474      hcum = sinfo_image2table(r_img);
-<a name="l02475"></a>02475      check_nomsg(sinfo_sort_table_1(hcum,<span class="stringliteral">"VALUE"</span>,FALSE));
-<a name="l02476"></a>02476 
-<a name="l02477"></a>02477      <span class="comment">//thresh = hcum[where(xcum/max(xcum) >= 1.-min_frac)];</span>
-<a name="l02478"></a>02478      check_nomsg(cpl_table_duplicate_column(cum,<span class="stringliteral">"H"</span>,hcum,<span class="stringliteral">"VALUE"</span>));
-<a name="l02479"></a>02479      check_nomsg(cum_x_max=cpl_table_get_column_max(cum,<span class="stringliteral">"X"</span>));
-<a name="l02480"></a>02480      check_nomsg(cpl_table_duplicate_column(cum,<span class="stringliteral">"R"</span>,cum,<span class="stringliteral">"X"</span>));
-<a name="l02481"></a>02481      check_nomsg(cpl_table_divide_scalar(cum,<span class="stringliteral">"R"</span>,cum_x_max));
-<a name="l02482"></a>02482      check_nomsg(cpl_table_and_selected_double(cum,<span class="stringliteral">"R"</span>,
-<a name="l02483"></a>02483                                               CPL_NOT_LESS_THAN,
-<a name="l02484"></a>02484                                               (1.-min_frac)));
-<a name="l02485"></a>02485      check_nomsg(thres_tbl=cpl_table_extract_selected(cum));
-<a name="l02486"></a>02486 
-<a name="l02487"></a>02487      check_nomsg(thres = cpl_table_get(thres_tbl,<span class="stringliteral">"R"</span>,0,&status));
-<a name="l02488"></a>02488      <span class="comment">//*mask[where(r_img >= thresh)] = 1;</span>
-<a name="l02489"></a>02489      sinfo_free_image(&(*mask));
-<a name="l02490"></a>02490 
-<a name="l02491"></a>02491 
-<a name="l02492"></a>02492      check_nomsg(*mask=cpl_image_duplicate(r_img));
-<a name="l02493"></a>02493      check_nomsg(cpl_image_threshold(*mask,thres,thres,0,1));
-<a name="l02494"></a>02494   }
-<a name="l02495"></a>02495   sinfo_free_table(&cum);
-<a name="l02496"></a>02496   sinfo_free_table(&hcum);
-<a name="l02497"></a>02497   sinfo_free_table(&thres_tbl);
-<a name="l02498"></a>02498 
-<a name="l02499"></a>02499   <span class="keywordflow">return</span> 0;
-<a name="l02500"></a>02500  cleanup:
-<a name="l02501"></a>02501 
-<a name="l02502"></a>02502   sinfo_free_propertylist(&plist);
-<a name="l02503"></a>02503   sinfo_free_image(&r2img);
-<a name="l02504"></a>02504   sinfo_free_table(&cum);
-<a name="l02505"></a>02505   sinfo_free_table(&hcum);
-<a name="l02506"></a>02506   sinfo_free_table(&thres_tbl);
-<a name="l02507"></a>02507 
-<a name="l02508"></a>02508   <span class="keywordflow">return</span> -1;
-<a name="l02509"></a>02509 
-<a name="l02510"></a>02510 }
-<a name="l02511"></a>02511 
-<a name="l02512"></a>02512 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02521"></a>02521 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02522"></a>02522 
-<a name="l02523"></a>02523 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l02524"></a>02524 sinfo_fit_bkg(<span class="keywordtype">double</span> p[])
-<a name="l02525"></a>02525 
-<a name="l02526"></a>02526 {
-<a name="l02527"></a>02527  <span class="keywordtype">double</span>* px=NULL;
-<a name="l02528"></a>02528   <span class="keywordtype">double</span>* py=NULL;
-<a name="l02529"></a>02529   <span class="keywordtype">double</span>* pv=NULL;
-<a name="l02530"></a>02530   cpl_vector* vtmp=NULL;
-<a name="l02531"></a>02531   <span class="keywordtype">double</span> max=0;
-<a name="l02532"></a>02532   <span class="keywordtype">int</span> i=0;
-<a name="l02533"></a>02533   <span class="keywordtype">int</span> np=0;
-<a name="l02534"></a>02534 
-<a name="l02535"></a>02535   <span class="keywordtype">double</span> chi2=0;
-<a name="l02536"></a>02536 
-<a name="l02537"></a>02537   check_nomsg(px= cpl_vector_get_data(sa_vx));
-<a name="l02538"></a>02538   check_nomsg(py= cpl_vector_get_data(sa_vy));
-<a name="l02539"></a>02539   check_nomsg(np= cpl_vector_get_size(sa_vx));
-<a name="l02540"></a>02540   check_nomsg(vtmp=cpl_vector_duplicate(sa_vy));
-<a name="l02541"></a>02541   check_nomsg(pv=cpl_vector_get_data(vtmp));
-<a name="l02542"></a>02542 
-<a name="l02543"></a>02543   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l02544"></a>02544     pv[i]=sinfo_fac(px[i],p[2]);
-<a name="l02545"></a>02545     <span class="comment">//sinfo_msg("x=%g p=%g",px[i],pv[i]);</span>
-<a name="l02546"></a>02546   }
-<a name="l02547"></a>02547   check_nomsg(max=cpl_vector_get_max(vtmp));
-<a name="l02548"></a>02548   <span class="keywordflow">if</span>(max> 0) {
-<a name="l02549"></a>02549     check_nomsg(cpl_vector_divide_scalar(vtmp,max));
-<a name="l02550"></a>02550     check_nomsg(cpl_vector_multiply_scalar(vtmp,p[1]));
-<a name="l02551"></a>02551     check_nomsg(cpl_vector_add_scalar(vtmp,p[0]));
-<a name="l02552"></a>02552   }
-<a name="l02553"></a>02553 
-<a name="l02554"></a>02554 
-<a name="l02555"></a>02555   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l02556"></a>02556     chi2+=(py[i]-pv[i])*(py[i]-pv[i]);
-<a name="l02557"></a>02557   }
-<a name="l02558"></a>02558   sinfo_free_my_vector(&vtmp);
-<a name="l02559"></a>02559   <span class="keywordflow">return</span> chi2;
-<a name="l02560"></a>02560  cleanup:
-<a name="l02561"></a>02561   sinfo_free_my_vector(&vtmp);
-<a name="l02562"></a>02562   <span class="keywordflow">return</span> -1;
-<a name="l02563"></a>02563 
-<a name="l02564"></a>02564 }
-<a name="l02565"></a>02565 
-<a name="l02566"></a>02566 
-<a name="l02567"></a>02567 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02579"></a>02579 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02580"></a>02580 
-<a name="l02581"></a>02581 <span class="keywordtype">int</span>
-<a name="l02582"></a>02582 sinfo_thermal_background2(cpl_table* int_sky,
-<a name="l02583"></a>02583                          cpl_table* lambda,
-<a name="l02584"></a>02584                          cpl_table* lrange,
-<a name="l02585"></a>02585                          cpl_table** bkg)
-<a name="l02586"></a>02586 {
-<a name="l02587"></a>02587 
-<a name="l02588"></a>02588   <span class="keywordtype">int</span> n2=0;
-<a name="l02589"></a>02589   <span class="keywordtype">int</span> i=0;
-<a name="l02590"></a>02590   <span class="keywordtype">int</span> j=0;
-<a name="l02591"></a>02591   <span class="keywordtype">int</span> nrow=0;
-<a name="l02592"></a>02592 
-<a name="l02593"></a>02593   cpl_table* tmp1=NULL;
-<a name="l02594"></a>02594   cpl_table* tmp2=NULL;
-<a name="l02595"></a>02595 
-<a name="l02596"></a>02596   <span class="keywordtype">double</span> max=0;
-<a name="l02597"></a>02597   <span class="keywordtype">double</span> wmin=0;
-<a name="l02598"></a>02598   <span class="keywordtype">double</span> wmax=0;
-<a name="l02599"></a>02599   <span class="keywordtype">double</span> p0[3];
-<a name="l02600"></a>02600   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;
-<a name="l02601"></a>02601   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;
-<a name="l02602"></a>02602   <span class="keywordtype">double</span> y[MP];
-<a name="l02603"></a>02603   <span class="keywordtype">double</span>** ap=NULL;
-<a name="l02604"></a>02604   <span class="keywordtype">int</span> nfunc=0;
-<a name="l02605"></a>02605   <span class="keywordtype">int</span> status=0;
-<a name="l02606"></a>02606   <span class="keywordtype">int</span> row=0;
-<a name="l02607"></a>02607   <span class="keywordtype">double</span> bkg_min=0;
-<a name="l02608"></a>02608   <span class="keywordtype">double</span> bkg_max=0;
-<a name="l02609"></a>02609   <span class="keywordtype">double</span> p0_min=0;
-<a name="l02610"></a>02610   <span class="keywordtype">double</span> p0_max=0;
-<a name="l02611"></a>02611   <span class="keywordtype">double</span> p1_min=0;
-<a name="l02612"></a>02612   <span class="keywordtype">double</span> p1_max=0;
-<a name="l02613"></a>02613   <span class="keywordtype">double</span> p2_min=0;
-<a name="l02614"></a>02614   <span class="keywordtype">double</span> p2_max=0;
-<a name="l02615"></a>02615   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l02616"></a>02616   <span class="keywordtype">double</span>* pf=NULL;
-<a name="l02617"></a>02617 
-<a name="l02618"></a>02618   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));
-<a name="l02619"></a>02619 
-<a name="l02620"></a>02620   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l02621"></a>02621     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l02622"></a>02622   }
-<a name="l02623"></a>02623 
-<a name="l02624"></a>02624   cknull(int_sky,<span class="stringliteral">"Null input table sky"</span>);
-<a name="l02625"></a>02625   cknull(lambda,<span class="stringliteral">"Null input table lambda"</span>);
-<a name="l02626"></a>02626   cknull(lrange,<span class="stringliteral">"Null input table lrange"</span>);
-<a name="l02627"></a>02627 
-<a name="l02628"></a>02628 
-<a name="l02629"></a>02629   <span class="comment">//TO BE FIXED: Why lrange to gat wave min and max: int_sky is sufficient</span>
-<a name="l02630"></a>02630   check_nomsg(wmin=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l02631"></a>02631   check_nomsg(wmax=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l02632"></a>02632   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,
-<a name="l02633"></a>02633               CPL_NOT_LESS_THAN,wmin));
-<a name="l02634"></a>02634   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,
-<a name="l02635"></a>02635               CPL_NOT_GREATER_THAN,wmax));
-<a name="l02636"></a>02636   check_nomsg(tmp1=cpl_table_extract_selected(int_sky));
-<a name="l02637"></a>02637 
-<a name="l02638"></a>02638   check_nomsg(row=sinfo_table_get_index_of_val(tmp1,<span class="stringliteral">"WAVE"</span>,
-<a name="l02639"></a>02639                                                wmax,CPL_TYPE_DOUBLE));
-<a name="l02640"></a>02640   check_nomsg(max=cpl_table_get_double(tmp1,<span class="stringliteral">"INT"</span>,row,&status));
-<a name="l02641"></a>02641   check_nomsg(sinfo_table_flag_nan(&tmp1,<span class="stringliteral">"INT"</span>));
-<a name="l02642"></a>02642   check_nomsg(cpl_table_erase_invalid(tmp1));
-<a name="l02643"></a>02643   check_nomsg(cpl_table_and_selected_double(tmp1,<span class="stringliteral">"INT"</span>,CPL_NOT_EQUAL_TO,0));
-<a name="l02644"></a>02644   check_nomsg(tmp2=cpl_table_extract_selected(tmp1));
-<a name="l02645"></a>02645 
-<a name="l02646"></a>02646   sinfo_free_table(&tmp1);
-<a name="l02647"></a>02647   check_nomsg(n2=cpl_table_get_nrow(tmp2));
-<a name="l02648"></a>02648   check_nomsg(sa_vx=cpl_vector_wrap(n2,
-<a name="l02649"></a>02649               cpl_table_get_data_double(tmp2,<span class="stringliteral">"WAVE"</span>)));
-<a name="l02650"></a>02650   check_nomsg(sa_vy=cpl_vector_wrap(n2,
-<a name="l02651"></a>02651               cpl_table_get_data_double(tmp2,<span class="stringliteral">"INT"</span>)));
-<a name="l02652"></a>02652 
-<a name="l02653"></a>02653 
-<a name="l02654"></a>02654   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l02655"></a>02655     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l02656"></a>02656       ap[i][j]=0;
-<a name="l02657"></a>02657     }
-<a name="l02658"></a>02658   }
-<a name="l02659"></a>02659 
-<a name="l02660"></a>02660   check_nomsg(bkg_min=cpl_table_get_column_min(tmp2,<span class="stringliteral">"INT"</span>));
-<a name="l02661"></a>02661   check_nomsg(bkg_max=cpl_table_get_double(tmp2,<span class="stringliteral">"INT"</span>,row,&status));
-<a name="l02662"></a>02662 
-<a name="l02663"></a>02663 
-<a name="l02664"></a>02664   <span class="comment">//Init amoeba fit parameters</span>
-<a name="l02665"></a>02665   p0_min=bkg_min*0.9;
-<a name="l02666"></a>02666   p0_max=bkg_min*1.1;
-<a name="l02667"></a>02667   p1_min=bkg_max*0.9;
-<a name="l02668"></a>02668   p1_max=bkg_max*1.1;
-<a name="l02669"></a>02669   p1_min=200;
-<a name="l02670"></a>02670   p2_max=300;
-<a name="l02671"></a>02671 
-<a name="l02672"></a>02672   ap[0][0]=p0_min; ap[0][1]=p1_min; ap[0][2]=p2_min;
-<a name="l02673"></a>02673   ap[1][0]=p0_max; ap[1][1]=p1_min; ap[1][2]=p2_min;
-<a name="l02674"></a>02674   ap[2][0]=p0_min; ap[2][1]=p1_max; ap[2][2]=p2_min;
-<a name="l02675"></a>02675   ap[3][0]=p0_min; ap[3][1]=p1_min; ap[3][2]=p2_max;
-<a name="l02676"></a>02676 
-<a name="l02677"></a>02677   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);
-<a name="l02678"></a>02678   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l02679"></a>02679     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l02680"></a>02680       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l02681"></a>02681     }
-<a name="l02682"></a>02682   }
-<a name="l02683"></a>02683 
-<a name="l02684"></a>02684 
-<a name="l02685"></a>02685 
-<a name="l02686"></a>02686 
-<a name="l02687"></a>02687   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l02688"></a>02688     p0[0]=ap[i][0];
-<a name="l02689"></a>02689     p0[1]=ap[i][1];
-<a name="l02690"></a>02690     p0[2]=ap[i][2];
-<a name="l02691"></a>02691     y[i]=sinfo_fit_bkg(p0);
-<a name="l02692"></a>02692   }
-<a name="l02693"></a>02693 
-<a name="l02694"></a>02694   sinfo_msg(<span class="stringliteral">"p0=%g %g %g"</span>,p0[0],p0[1],p0[2]);
-<a name="l02695"></a>02695   <span class="keywordflow">for</span>(i=0;i<N_ITER_FIT_AMOEBA;i++) {
-<a name="l02696"></a>02696     check_nomsg(sinfo_fit_amoeba(ap,y,NP,AMOEBA_FTOL,sinfo_fit_bkg,&nfunc));
-<a name="l02697"></a>02697     sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);
-<a name="l02698"></a>02698     sinfo_msg(<span class="stringliteral">"iter=%d ap=%g %g %g"</span>,i,ap[0][0],ap[0][1],ap[0][2]);
-<a name="l02699"></a>02699   }
-<a name="l02700"></a>02700   sinfo_unwrap_vector(&sa_vx);
-<a name="l02701"></a>02701   sinfo_unwrap_vector(&sa_vy);
-<a name="l02702"></a>02702   sinfo_free_table(&tmp2);
-<a name="l02703"></a>02703 
-<a name="l02704"></a>02704 
-<a name="l02705"></a>02705   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);
-<a name="l02706"></a>02706   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l02707"></a>02707     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l02708"></a>02708       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l02709"></a>02709     }
-<a name="l02710"></a>02710     sinfo_msg(<span class="stringliteral">"y[%d]=%g"</span>,i,y[i]);
-<a name="l02711"></a>02711   }
-<a name="l02712"></a>02712 
-<a name="l02713"></a>02713 
-<a name="l02714"></a>02714 
-<a name="l02715"></a>02715   check_nomsg(nrow=cpl_table_get_nrow(lambda));
-<a name="l02716"></a>02716   check_nomsg(*bkg=cpl_table_new(nrow));
-<a name="l02717"></a>02717   check_nomsg(cpl_table_duplicate_column(*bkg,<span class="stringliteral">"WAVE"</span>,lambda,<span class="stringliteral">"WAVE"</span>));
-<a name="l02718"></a>02718   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));
-<a name="l02719"></a>02719   cpl_table_fill_column_window(*bkg,<span class="stringliteral">"INT2"</span>,0,nrow,0.);
-<a name="l02720"></a>02720   check_nomsg(pw=cpl_table_get_data_double(*bkg,<span class="stringliteral">"WAVE"</span>));
-<a name="l02721"></a>02721   check_nomsg(pf=cpl_table_get_data_double(*bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l02722"></a>02722 
-<a name="l02723"></a>02723   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l02724"></a>02724     pf[i]=sinfo_fac(pw[i],ap[0][2]);
-<a name="l02725"></a>02725   }
-<a name="l02726"></a>02726   check_nomsg(max=cpl_table_get_column_max(*bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l02727"></a>02727 
-<a name="l02728"></a>02728   <span class="keywordflow">if</span>(max != 0) {
-<a name="l02729"></a>02729      check_nomsg(cpl_table_divide_scalar(*bkg,<span class="stringliteral">"INT2"</span>,max));
-<a name="l02730"></a>02730   }
-<a name="l02731"></a>02731   check_nomsg(cpl_table_multiply_scalar(*bkg,<span class="stringliteral">"INT2"</span>,ap[0][1]));
-<a name="l02732"></a>02732   check_nomsg(cpl_table_add_scalar(*bkg,<span class="stringliteral">"INT2"</span>,ap[0][0]));
-<a name="l02733"></a>02733   <span class="comment">//check_nomsg(cpl_table_save(*bkg,NULL,NULL,</span>
-<a name="l02734"></a>02734   <span class="comment">//"out_amoeba5.fits",CPL_IO_DEFAULT ));</span>
-<a name="l02735"></a>02735   sinfo_new_destroy_2Ddoublearray(&ap,MP);
-<a name="l02736"></a>02736 
-<a name="l02737"></a>02737 
-<a name="l02738"></a>02738   <span class="keywordflow">return</span> 0;
-<a name="l02739"></a>02739 
-<a name="l02740"></a>02740  cleanup:
-<a name="l02741"></a>02741   sinfo_new_destroy_2Ddoublearray(&ap,MP);
-<a name="l02742"></a>02742   sinfo_free_table(&tmp1);
-<a name="l02743"></a>02743   sinfo_free_table(&tmp2);
-<a name="l02744"></a>02744   sinfo_unwrap_vector(&sa_vx);
-<a name="l02745"></a>02745   sinfo_unwrap_vector(&sa_vy);
-<a name="l02746"></a>02746   <span class="keywordflow">return</span> -1;
-<a name="l02747"></a>02747 
-<a name="l02748"></a>02748 }
-<a name="l02749"></a>02749 
-<a name="l02750"></a>02750 
-<a name="l02751"></a>02751 
-<a name="l02752"></a>02752 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l02764"></a>02764 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02765"></a>02765 
-<a name="l02766"></a>02766 <span class="keywordtype">int</span>
-<a name="l02767"></a>02767 sinfo_thermal_background(cpl_table* int_sky,
-<a name="l02768"></a>02768                          cpl_table* lambda,
-<a name="l02769"></a>02769                          cpl_table* lrange,
-<a name="l02770"></a>02770                          <span class="keyword">const</span> <span class="keywordtype">double</span> temp,
-<a name="l02771"></a>02771                          <span class="keyword">const</span> <span class="keywordtype">int</span> niter,
-<a name="l02772"></a>02772                          <span class="keyword">const</span> <span class="keywordtype">int</span> filter_width,
-<a name="l02773"></a>02773                          <span class="keyword">const</span> <span class="keywordtype">double</span> tol,
-<a name="l02774"></a>02774                          cpl_table** bkg,
-<a name="l02775"></a>02775                          <span class="keywordtype">int</span>* success_fit)
-<a name="l02776"></a>02776 {
-<a name="l02777"></a>02777 
-<a name="l02778"></a>02778   <span class="keywordtype">int</span> npix=0;
-<a name="l02779"></a>02779   <span class="keywordtype">int</span> i=0;
-<a name="l02780"></a>02780   <span class="keywordtype">int</span> row=0;
-<a name="l02781"></a>02781   <span class="keyword">const</span> <span class="keywordtype">int</span> ndim=3;<span class="comment">/* There are 3 parameters */</span>
-<a name="l02782"></a>02782     <span class="keywordtype">int</span> ia[ndim];
-<a name="l02783"></a>02783 
-<a name="l02784"></a>02784   <span class="keywordtype">int</span> NPOINTS=0;
-<a name="l02785"></a>02785 
-<a name="l02786"></a>02786 
-<a name="l02787"></a>02787   <span class="keywordtype">double</span> temp1=0;
-<a name="l02788"></a>02788   <span class="keywordtype">double</span> temp2=0;
-<a name="l02789"></a>02789 
-<a name="l02790"></a>02790   <span class="comment">//double r0=80.306773;</span>
-<a name="l02791"></a>02791   <span class="comment">//double r1=450.50027;</span>
-<a name="l02792"></a>02792   <span class="comment">//double r2=252.17949;</span>
-<a name="l02793"></a>02793   <span class="keywordtype">double</span> max_tmp2=0;
-<a name="l02794"></a>02794   <span class="keywordtype">double</span>* ptmp1=NULL;
-<a name="l02795"></a>02795   <span class="keywordtype">double</span> thermal=0;
-<a name="l02796"></a>02796   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l02797"></a>02797   <span class="keywordtype">double</span> p0[3];
-<a name="l02798"></a>02798   <span class="keywordtype">double</span> wmin=0;
-<a name="l02799"></a>02799   <span class="keywordtype">double</span> wmax=0;
-<a name="l02800"></a>02800   <span class="keywordtype">double</span> ga0=0;
-<a name="l02801"></a>02801   <span class="keywordtype">double</span> ga1=0;
-<a name="l02802"></a>02802   <span class="comment">//double ga1=0;</span>
-<a name="l02803"></a>02803   <span class="keywordtype">double</span> ga2=0;
-<a name="l02804"></a>02804   <span class="keywordtype">double</span> mse=0;
-<a name="l02805"></a>02805   <span class="keywordtype">double</span> chired=0;
-<a name="l02806"></a>02806 
-<a name="l02807"></a>02807 
-<a name="l02808"></a>02808   cpl_vector *a = cpl_vector_new(ndim);
-<a name="l02809"></a>02809   cpl_table* xlr=NULL;
-<a name="l02810"></a>02810   cpl_table* ylr=NULL;
-<a name="l02811"></a>02811   cpl_table* wlr=NULL;
-<a name="l02812"></a>02812   cpl_table* tmp=NULL;
-<a name="l02813"></a>02813   cpl_table* temp2_tbl=NULL;
-<a name="l02814"></a>02814 
-<a name="l02815"></a>02815   cpl_vector* y=NULL;
-<a name="l02816"></a>02816   cpl_vector* fy=NULL;
-<a name="l02817"></a>02817 
-<a name="l02818"></a>02818   cpl_vector* sy=NULL;
-<a name="l02819"></a>02819 
-<a name="l02820"></a>02820   cpl_matrix* x_matrix=NULL;
-<a name="l02821"></a>02821   <span class="keywordtype">double</span> bkg_min=0;
-<a name="l02822"></a>02822   <span class="keywordtype">double</span> bkg_max=0;
-<a name="l02823"></a>02823   <span class="keywordtype">int</span> status=0;
-<a name="l02824"></a>02824   <span class="keywordtype">double</span> avg=0;
-<a name="l02825"></a>02825   <span class="keywordtype">double</span> sdv=0;
-<a name="l02826"></a>02826   <span class="keywordtype">double</span> med=0;
-<a name="l02827"></a>02827   <span class="keywordtype">double</span>* pif=NULL;
-<a name="l02828"></a>02828   <span class="keywordtype">double</span>* pwf=NULL;
-<a name="l02829"></a>02829   <span class="keywordtype">double</span>* pws=NULL;
-<a name="l02830"></a>02830   <span class="keywordtype">int</span> k=0;
-<a name="l02831"></a>02831   <span class="keywordtype">int</span> nrow=0;
-<a name="l02832"></a>02832 
-<a name="l02833"></a>02833   <span class="comment">//check_nomsg(cpl_table_save(int_sky,NULL,NULL,</span>
-<a name="l02834"></a>02834   <span class="comment">//"out_pippo.fits", CPL_IO_DEFAULT));</span>
-<a name="l02835"></a>02835   check_nomsg(wmin=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l02836"></a>02836   check_nomsg(wmax=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l02837"></a>02837 
-<a name="l02838"></a>02838   bkg_min=sinfo_fac(wmin,temp);
-<a name="l02839"></a>02839   bkg_max=sinfo_fac(wmax,temp);
-<a name="l02840"></a>02840   <span class="comment">//sinfo_msg("bkg: min=%g max=%g",bkg_min,bkg_max);</span>
-<a name="l02841"></a>02841   <span class="comment">//sinfo_scale_fct=sinfo_scale_fct*bkg_max;</span>
-<a name="l02842"></a>02842   <span class="comment">//sinfo_scale_fct=sinfo_scale_fct;</span>
-<a name="l02843"></a>02843 
-<a name="l02844"></a>02844   check_nomsg(cpl_table_and_selected_double(lambda,<span class="stringliteral">"WAVE"</span>,
-<a name="l02845"></a>02845                                             CPL_NOT_LESS_THAN,wmin));
-<a name="l02846"></a>02846   check_nomsg(tmp=cpl_table_extract_selected(lambda));
-<a name="l02847"></a>02847 
-<a name="l02848"></a>02848   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,
-<a name="l02849"></a>02849                                             CPL_NOT_GREATER_THAN,wmax));
-<a name="l02850"></a>02850   check_nomsg(xlr=cpl_table_extract_selected(tmp));
-<a name="l02851"></a>02851   sinfo_free_table(&tmp);
-<a name="l02852"></a>02852 
-<a name="l02853"></a>02853 
-<a name="l02854"></a>02854   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,
-<a name="l02855"></a>02855                                             CPL_NOT_LESS_THAN,wmin));
-<a name="l02856"></a>02856   check_nomsg(tmp=cpl_table_extract_selected(int_sky));
-<a name="l02857"></a>02857   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,
-<a name="l02858"></a>02858                                             CPL_NOT_GREATER_THAN,wmax));
-<a name="l02859"></a>02859 
-<a name="l02860"></a>02860 
-<a name="l02861"></a>02861   <span class="comment">//To be sure one has not strange cases</span>
-<a name="l02862"></a>02862   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"INT"</span>,CPL_GREATER_THAN,-2));
-<a name="l02863"></a>02863   check_nomsg(ylr=cpl_table_extract_selected(tmp));
-<a name="l02864"></a>02864   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l02865"></a>02865   sinfo_free_table(&tmp);
-<a name="l02866"></a>02866   check_nomsg(tmp=cpl_table_duplicate(ylr));
-<a name="l02867"></a>02867   sinfo_free_table(&ylr);
-<a name="l02868"></a>02868 
-<a name="l02869"></a>02869   check_nomsg(avg=cpl_table_get_column_mean(tmp,<span class="stringliteral">"INT"</span>));
-<a name="l02870"></a>02870   check_nomsg(sdv=cpl_table_get_column_stdev(tmp,<span class="stringliteral">"INT"</span>));
-<a name="l02871"></a>02871   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"INT"</span>,
-<a name="l02872"></a>02872                         CPL_LESS_THAN,avg+10*sdv));
-<a name="l02873"></a>02873 
-<a name="l02874"></a>02874   check_nomsg(ylr=cpl_table_extract_selected(tmp));
-<a name="l02875"></a>02875   sinfo_free_table(&tmp);
-<a name="l02876"></a>02876 
-<a name="l02877"></a>02877 
-<a name="l02878"></a>02878   <span class="comment">/*</span>
-<a name="l02879"></a>02879 <span class="comment">  check_nomsg(xlr=sinfo_table_select_range(lambda,lrange,0.003));</span>
-<a name="l02880"></a>02880 <span class="comment">  check_nomsg(ylr=sinfo_table_select_range(int_sky,lrange,0.003));</span>
-<a name="l02881"></a>02881 <span class="comment">  */</span>
-<a name="l02882"></a>02882   check_nomsg(cpl_table_and_selected_double(ylr,<span class="stringliteral">"INT"</span>,CPL_NOT_EQUAL_TO,0));
-<a name="l02883"></a>02883 
-<a name="l02884"></a>02884   check_nomsg(wlr=cpl_table_extract_selected(ylr));
-<a name="l02885"></a>02885 
-<a name="l02886"></a>02886 
-<a name="l02887"></a>02887   check_nomsg(p0[0]=cpl_table_get_column_min(wlr,<span class="stringliteral">"INT"</span>));
-<a name="l02888"></a>02888   check_nomsg(row=sinfo_table_get_index_of_val(ylr,<span class="stringliteral">"WAVE"</span>,
-<a name="l02889"></a>02889                                                wmax,CPL_TYPE_DOUBLE));
-<a name="l02890"></a>02890   check_nomsg(p0[1]=cpl_table_get_double(ylr,<span class="stringliteral">"INT"</span>,row,&status));
-<a name="l02891"></a>02891   p0[2]=temp;
-<a name="l02892"></a>02892 
-<a name="l02893"></a>02893 
-<a name="l02894"></a>02894   ga0=p0[0];
-<a name="l02895"></a>02895   ga1=p0[1]/bkg_max;
-<a name="l02896"></a>02896   <span class="comment">//ga1=p0[1];</span>
-<a name="l02897"></a>02897   ga2=p0[2];
-<a name="l02898"></a>02898 
-<a name="l02899"></a>02899   <span class="comment">//sinfo_msg("p= %g %g %g",p0[0],p0[1],p0[2]);</span>
-<a name="l02900"></a>02900   check_nomsg(sinfo_table_flag_nan(&wlr,<span class="stringliteral">"INT"</span>));
-<a name="l02901"></a>02901   check_nomsg(cpl_table_erase_invalid(wlr));
-<a name="l02902"></a>02902   <span class="comment">//check_nomsg(cpl_table_save(xlr,NULL,NULL,"out_xlr.fits",CPL_IO_DEFAULT));</span>
-<a name="l02903"></a>02903   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr.fits",CPL_IO_DEFAULT));</span>
-<a name="l02904"></a>02904   <span class="comment">//check_nomsg(cpl_table_save(wlr,NULL,NULL,"out_wlr.fits",CPL_IO_DEFAULT));</span>
-<a name="l02905"></a>02905 
-<a name="l02906"></a>02906 
-<a name="l02907"></a>02907   check_nomsg(NPOINTS=cpl_table_get_nrow(ylr));
-<a name="l02908"></a>02908 
-<a name="l02909"></a>02909   check_nomsg(x_matrix = cpl_matrix_wrap(NPOINTS,1,
-<a name="l02910"></a>02910                                        cpl_table_get_data_double(ylr,<span class="stringliteral">"WAVE"</span>)));
-<a name="l02911"></a>02911   check_nomsg(y=cpl_vector_wrap(NPOINTS,cpl_table_get_data_double(ylr,<span class="stringliteral">"INT"</span>)));
-<a name="l02912"></a>02912   <span class="comment">//check_nomsg(fy=cpl_vector_filter_median_create(y,1));</span>
-<a name="l02913"></a>02913   <span class="comment">//check_nomsg(fy=cpl_vector_filter_lowpass_create(y,CPL_LOWPASS_LINEAR,3));</span>
-<a name="l02914"></a>02914   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr1.fits",CPL_IO_DEFAULT));</span>
-<a name="l02915"></a>02915   check_nomsg(fy=sinfo_sky_background_estimate(y,filter_width,filter_width));
-<a name="l02916"></a>02916   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr2.fits",CPL_IO_DEFAULT));</span>
-<a name="l02917"></a>02917   pif=cpl_vector_get_data(fy);
-<a name="l02918"></a>02918   pwf=cpl_table_get_data_double(ylr,<span class="stringliteral">"WAVE"</span>);
-<a name="l02919"></a>02919 
-<a name="l02920"></a>02920 
-<a name="l02921"></a>02921   check_nomsg(cpl_table_new_column(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,CPL_TYPE_DOUBLE));
-<a name="l02922"></a>02922   check_nomsg(cpl_table_new_column(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,CPL_TYPE_DOUBLE));
-<a name="l02923"></a>02923   pws=cpl_table_get_data_double(int_sky,<span class="stringliteral">"WAVE"</span>);
-<a name="l02924"></a>02924 
-<a name="l02925"></a>02925   k=0;
-<a name="l02926"></a>02926   i=0;
-<a name="l02927"></a>02927   check_nomsg(nrow=cpl_table_get_nrow(int_sky));
-<a name="l02928"></a>02928   <span class="keywordflow">if</span>((pws[0]-pwf[0])>0) {
-<a name="l02929"></a>02929     <span class="keywordflow">for</span>(i=0;i<NPOINTS;i++) {
-<a name="l02930"></a>02930       <span class="keywordflow">if</span>(fabs(pws[k]-pwf[i]) < tol) {
-<a name="l02931"></a>02931     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,k,pif[i]));
-<a name="l02932"></a>02932     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,k,pws[i]));
-<a name="l02933"></a>02933     k++;
-<a name="l02934"></a>02934       }
-<a name="l02935"></a>02935     }
-<a name="l02936"></a>02936   } <span class="keywordflow">else</span> {
-<a name="l02937"></a>02937     <span class="keywordflow">for</span>(k=0;k<nrow;k++) {
-<a name="l02938"></a>02938       <span class="keywordflow">if</span>((i<NPOINTS) && (fabs(pws[k]-pwf[i]) < tol)) {
-<a name="l02939"></a>02939     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,k,pif[i]));
-<a name="l02940"></a>02940     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,k,pws[i]));
-<a name="l02941"></a>02941     i++;
-<a name="l02942"></a>02942       }
-<a name="l02943"></a>02943     }
-<a name="l02944"></a>02944 
-<a name="l02945"></a>02945   }
-<a name="l02946"></a>02946 
-<a name="l02947"></a>02947   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr3.fits",CPL_IO_DEFAULT));</span>
-<a name="l02948"></a>02948 
-<a name="l02949"></a>02949 
-<a name="l02950"></a>02950   check_nomsg(cpl_vector_set(a, 0, ga0));
-<a name="l02951"></a>02951   check_nomsg(cpl_vector_set(a, 1, ga1));
-<a name="l02952"></a>02952   check_nomsg(cpl_vector_set(a, 2, ga2));
-<a name="l02953"></a>02953 
-<a name="l02954"></a>02954   check_nomsg(sy=cpl_vector_duplicate(y));
-<a name="l02955"></a>02955   check_nomsg(cpl_vector_power(sy,2));
-<a name="l02956"></a>02956   check_nomsg(cpl_vector_power(sy,0.5));
-<a name="l02957"></a>02957   <span class="comment">//check_nomsg(cpl_vector_fill(sy,0.001));</span>
-<a name="l02958"></a>02958 
-<a name="l02959"></a>02959   ia[0] = 1;
-<a name="l02960"></a>02960   ia[1] = 1;
-<a name="l02961"></a>02961   ia[2] = 1;
-<a name="l02962"></a>02962 
-<a name="l02963"></a>02963 
-<a name="l02964"></a>02964   <span class="keywordflow">for</span>(i=0;i<niter;i++) {
-<a name="l02965"></a>02965 
-<a name="l02966"></a>02966     <span class="comment">/*</span>
-<a name="l02967"></a>02967 <span class="comment">    sinfo_msg("before fit: a=%g %g %g",</span>
-<a name="l02968"></a>02968 <span class="comment">              cpl_vector_get(a,0),</span>
-<a name="l02969"></a>02969 <span class="comment">              cpl_vector_get(a,1),</span>
-<a name="l02970"></a>02970 <span class="comment">              cpl_vector_get(a,2));</span>
-<a name="l02971"></a>02971 <span class="comment">    */</span>
-<a name="l02972"></a>02972     <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_fit_lm(x_matrix,NULL,fy,sy,a,ia,sinfo_fitbkg,
-<a name="l02973"></a>02973                       sinfo_fitbkg_derivative,
-<a name="l02974"></a>02974                       &mse,&chired,NULL)) {
-<a name="l02975"></a>02975       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Thermal background fit failed"</span>);
-<a name="l02976"></a>02976       cpl_error_reset();
-<a name="l02977"></a>02977       *success_fit=1;
-<a name="l02978"></a>02978 
-<a name="l02979"></a>02979       <span class="keywordflow">goto</span> recover;
-<a name="l02980"></a>02980     }
-<a name="l02981"></a>02981 
-<a name="l02982"></a>02982     <span class="comment">//bkg_max=sinfo_fac(wmax,cpl_vector_get(a,2));</span>
-<a name="l02983"></a>02983     <span class="comment">//sinfo_scale_fct=sinfo_scale_fct*bkg_max;</span>
-<a name="l02984"></a>02984     <span class="comment">/*</span>
-<a name="l02985"></a>02985 <span class="comment">    sinfo_msg("after fit: a=%g %g %g chired=%g",</span>
-<a name="l02986"></a>02986 <span class="comment">              cpl_vector_get(a,0),</span>
-<a name="l02987"></a>02987 <span class="comment">          cpl_vector_get(a,1),</span>
-<a name="l02988"></a>02988 <span class="comment">              cpl_vector_get(a,2),</span>
-<a name="l02989"></a>02989 <span class="comment">              chired);</span>
-<a name="l02990"></a>02990 <span class="comment"></span>
-<a name="l02991"></a>02991 <span class="comment">    */</span>
-<a name="l02992"></a>02992 
-<a name="l02993"></a>02993   }
-<a name="l02994"></a>02994 
-<a name="l02995"></a>02995     sinfo_msg(<span class="stringliteral">"Last fit: a=%g %g %g chired=%g"</span>,
-<a name="l02996"></a>02996               cpl_vector_get(a,0),
-<a name="l02997"></a>02997           cpl_vector_get(a,1),
-<a name="l02998"></a>02998               cpl_vector_get(a,2),
-<a name="l02999"></a>02999               chired);
-<a name="l03000"></a>03000 
-<a name="l03001"></a>03001   sinfo_free_my_vector(&fy);
-<a name="l03002"></a>03002   sinfo_unwrap_vector(&y);
-<a name="l03003"></a>03003   sinfo_free_my_vector(&sy);
-<a name="l03004"></a>03004   sinfo_unwrap_matrix(&x_matrix);
-<a name="l03005"></a>03005   sinfo_free_table(&xlr);
-<a name="l03006"></a>03006   sinfo_free_table(&ylr);
-<a name="l03007"></a>03007   sinfo_free_table(&wlr);
-<a name="l03008"></a>03008 
-<a name="l03009"></a>03009   ga0=cpl_vector_get(a,0);
-<a name="l03010"></a>03010   ga1=cpl_vector_get(a,1);
-<a name="l03011"></a>03011   ga2=cpl_vector_get(a,2);
-<a name="l03012"></a>03012   <span class="comment">//ga2=252.69284;</span>
-<a name="l03013"></a>03013   check_nomsg(npix=cpl_table_get_nrow(lrange));
-<a name="l03014"></a>03014   check_nomsg(pw=cpl_table_get_data_double(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l03015"></a>03015   check_nomsg(temp2_tbl=cpl_table_new(npix));
-<a name="l03016"></a>03016   check_nomsg(cpl_table_new_column(temp2_tbl,<span class="stringliteral">"TEMP2"</span>,CPL_TYPE_DOUBLE));
-<a name="l03017"></a>03017 
-<a name="l03018"></a>03018   <span class="keywordflow">for</span>(i=0;i<npix;i++) {
-<a name="l03019"></a>03019     temp2=sinfo_fac(pw[i],ga2);
-<a name="l03020"></a>03020     check_nomsg(cpl_table_set_double(temp2_tbl,<span class="stringliteral">"TEMP2"</span>,i,temp2));
-<a name="l03021"></a>03021   }
-<a name="l03022"></a>03022   check_nomsg(max_tmp2=cpl_table_get_column_max(temp2_tbl,<span class="stringliteral">"TEMP2"</span>));
-<a name="l03023"></a>03023   sinfo_free_table(&temp2_tbl);
-<a name="l03024"></a>03024 
-<a name="l03025"></a>03025 
-<a name="l03026"></a>03026 
-<a name="l03027"></a>03027   check_nomsg(npix=cpl_table_get_nrow(lambda));
-<a name="l03028"></a>03028   check_nomsg(pw=cpl_table_get_data_double(lambda,<span class="stringliteral">"WAVE"</span>));
-<a name="l03029"></a>03029   check_nomsg(*bkg=cpl_table_new(npix));
-<a name="l03030"></a>03030   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));
-<a name="l03031"></a>03031   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"TEMP1"</span>,CPL_TYPE_DOUBLE));
-<a name="l03032"></a>03032   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l03033"></a>03033   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));
-<a name="l03034"></a>03034 
-<a name="l03035"></a>03035   <span class="keywordflow">for</span>(i=0;i<npix;i++) {
-<a name="l03036"></a>03036     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"WAVE"</span>,i,pw[i]));
-<a name="l03037"></a>03037     temp1=sinfo_fac(pw[i],ga2);
-<a name="l03038"></a>03038     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"TEMP1"</span>,i,temp1));
-<a name="l03039"></a>03039   }
-<a name="l03040"></a>03040 
-<a name="l03041"></a>03041   check_nomsg(ptmp1=cpl_table_get_data_double(*bkg,<span class="stringliteral">"TEMP1"</span>));
-<a name="l03042"></a>03042   <span class="comment">//bkg_max=sinfo_fac(wmax,ga2);</span>
-<a name="l03043"></a>03043 
-<a name="l03044"></a>03044   <span class="keywordflow">for</span>(i=0;i<npix;i++) {
-<a name="l03045"></a>03045     thermal=ga0+ptmp1[i]/max_tmp2*ga1;
-<a name="l03046"></a>03046     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT"</span>,i,thermal));
-<a name="l03047"></a>03047     thermal=ga0+ga1*sinfo_fac(pw[i],ga2);
-<a name="l03048"></a>03048     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT2"</span>,i,thermal));
-<a name="l03049"></a>03049   }
-<a name="l03050"></a>03050   sinfo_free_my_vector(&a);
-<a name="l03051"></a>03051 
-<a name="l03052"></a>03052   <span class="keywordflow">return</span> 0;
-<a name="l03053"></a>03053 
-<a name="l03054"></a>03054  recover:
-<a name="l03055"></a>03055   <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Recover fit of thermal background"</span>);
-<a name="l03056"></a>03056   check_nomsg(npix=cpl_table_get_nrow(lambda));
-<a name="l03057"></a>03057   check_nomsg(*bkg=cpl_table_new(npix));
-<a name="l03058"></a>03058   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"TEMP1"</span>,CPL_TYPE_DOUBLE));
-<a name="l03059"></a>03059   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l03060"></a>03060   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));
-<a name="l03061"></a>03061 
-<a name="l03062"></a>03062   med=cpl_table_get_column_median(ylr,<span class="stringliteral">"INT"</span>);
-<a name="l03063"></a>03063   <span class="keywordflow">for</span>(i=0;i<npix;i++) {
-<a name="l03064"></a>03064     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT"</span>,i,med));
-<a name="l03065"></a>03065     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT2"</span>,i,med));
-<a name="l03066"></a>03066   }
-<a name="l03067"></a>03067 
-<a name="l03068"></a>03068   sinfo_free_my_vector(&a);
-<a name="l03069"></a>03069   sinfo_unwrap_vector(&y);
-<a name="l03070"></a>03070   sinfo_free_my_vector(&sy);
-<a name="l03071"></a>03071   sinfo_unwrap_matrix(&x_matrix);
-<a name="l03072"></a>03072   sinfo_free_table(&xlr);
-<a name="l03073"></a>03073   sinfo_free_table(&ylr);
-<a name="l03074"></a>03074   sinfo_free_table(&wlr);
-<a name="l03075"></a>03075   sinfo_free_table(&tmp);
-<a name="l03076"></a>03076 
-<a name="l03077"></a>03077   <span class="keywordflow">return</span> 0;
-<a name="l03078"></a>03078 
-<a name="l03079"></a>03079 
-<a name="l03080"></a>03080  cleanup:
-<a name="l03081"></a>03081   sinfo_free_my_vector(&a);
-<a name="l03082"></a>03082   sinfo_unwrap_vector(&y);
-<a name="l03083"></a>03083   sinfo_free_my_vector(&sy);
-<a name="l03084"></a>03084   sinfo_unwrap_matrix(&x_matrix);
-<a name="l03085"></a>03085 
-<a name="l03086"></a>03086   sinfo_free_table(&xlr);
-<a name="l03087"></a>03087   sinfo_free_table(&ylr);
-<a name="l03088"></a>03088   sinfo_free_table(&wlr);
-<a name="l03089"></a>03089   sinfo_free_table(&tmp);
-<a name="l03090"></a>03090   sinfo_free_table(&temp2_tbl);
-<a name="l03091"></a>03091 
-<a name="l03092"></a>03092   <span class="keywordflow">return</span> -1;
-<a name="l03093"></a>03093 
-<a name="l03094"></a>03094 }
-<a name="l03095"></a>03095 
-<a name="l03107"></a>03107 <span class="keyword">static</span> cpl_vector*
-<a name="l03108"></a>03108 sinfo_filter_min(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)
-<a name="l03109"></a>03109 {
-<a name="l03110"></a>03110 
-<a name="l03111"></a>03111   cpl_vector* vo=NULL;
-<a name="l03112"></a>03112   <span class="keywordtype">double</span> min=0;
-<a name="l03113"></a>03113   <span class="keywordtype">int</span> start=size/2;
-<a name="l03114"></a>03114   <span class="keywordtype">int</span> end=0;
-<a name="l03115"></a>03115   <span class="keywordtype">int</span> length=0;
-<a name="l03116"></a>03116   <span class="keywordtype">int</span> i=0;
-<a name="l03117"></a>03117   <span class="keywordtype">int</span> j=0;
-<a name="l03118"></a>03118   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;
-<a name="l03119"></a>03119   <span class="keywordtype">double</span>* po=NULL;
-<a name="l03120"></a>03120   cknull(vi,<span class="stringliteral">"null input vector"</span>);
-<a name="l03121"></a>03121   pi=cpl_vector_get_data_const(vi);
-<a name="l03122"></a>03122   length=cpl_vector_get_size(vi);
-<a name="l03123"></a>03123   end=length-size/2;
-<a name="l03124"></a>03124   vo=cpl_vector_new(length);
-<a name="l03125"></a>03125   po=cpl_vector_get_data(vo);
-<a name="l03126"></a>03126 
-<a name="l03127"></a>03127   <span class="keywordflow">for</span>(i=start; i < end; i++) {
-<a name="l03128"></a>03128     min=pi[i-start];
-<a name="l03129"></a>03129     <span class="keywordflow">for</span>(j=i-start+1;j<i+start+1;j++) {
-<a name="l03130"></a>03130       <span class="keywordflow">if</span>(min> pi[j]) {
-<a name="l03131"></a>03131     min=pi[j];
-<a name="l03132"></a>03132       }
-<a name="l03133"></a>03133     }
-<a name="l03134"></a>03134     po[i]=min;
-<a name="l03135"></a>03135 
-<a name="l03136"></a>03136   }
-<a name="l03137"></a>03137 
-<a name="l03138"></a>03138   <span class="comment">// To prevent border effects:</span>
-<a name="l03139"></a>03139   <span class="keywordflow">for</span> (i = 0; i < start; i++) {
-<a name="l03140"></a>03140     po[i] = po[start];
-<a name="l03141"></a>03141   }
-<a name="l03142"></a>03142 
-<a name="l03143"></a>03143   <span class="keywordflow">for</span> (i = end; i < length; i++) {
-<a name="l03144"></a>03144     po[i] = po[end-1];
-<a name="l03145"></a>03145   }
-<a name="l03146"></a>03146   <span class="keywordflow">return</span> vo;
-<a name="l03147"></a>03147 
-<a name="l03148"></a>03148  cleanup:
-<a name="l03149"></a>03149   <span class="keywordflow">return</span> NULL;
-<a name="l03150"></a>03150 
-<a name="l03151"></a>03151 
-<a name="l03152"></a>03152 }
-<a name="l03153"></a>03153 
-<a name="l03154"></a>03154 
-<a name="l03166"></a>03166 <span class="keyword">static</span> cpl_vector*
-<a name="l03167"></a>03167 sinfo_filter_max(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)
-<a name="l03168"></a>03168 {
-<a name="l03169"></a>03169 
-<a name="l03170"></a>03170   cpl_vector* vo=NULL;
-<a name="l03171"></a>03171   <span class="keywordtype">double</span> max=0;
-<a name="l03172"></a>03172   <span class="keywordtype">int</span> start=size/2;
-<a name="l03173"></a>03173   <span class="keywordtype">int</span> end=0;
-<a name="l03174"></a>03174   <span class="keywordtype">int</span> length=0;
-<a name="l03175"></a>03175   <span class="keywordtype">int</span> i=0;
-<a name="l03176"></a>03176   <span class="keywordtype">int</span> j=0;
-<a name="l03177"></a>03177   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;
-<a name="l03178"></a>03178   <span class="keywordtype">double</span>* po=NULL;
-<a name="l03179"></a>03179 
-<a name="l03180"></a>03180   cknull(vi,<span class="stringliteral">"null input vector"</span>);
-<a name="l03181"></a>03181   pi=cpl_vector_get_data_const(vi);
-<a name="l03182"></a>03182   length=cpl_vector_get_size(vi);
-<a name="l03183"></a>03183   end=length-size/2;
-<a name="l03184"></a>03184   vo=cpl_vector_new(length);
-<a name="l03185"></a>03185   po=cpl_vector_get_data(vo);
-<a name="l03186"></a>03186 
-<a name="l03187"></a>03187   <span class="keywordflow">for</span>(i=start; i < end; i++) {
-<a name="l03188"></a>03188     max=pi[i-start];
-<a name="l03189"></a>03189     <span class="keywordflow">for</span>(j=i-start+1;j<i+start+1;j++) {
-<a name="l03190"></a>03190       <span class="keywordflow">if</span>(max< pi[j]) {
-<a name="l03191"></a>03191     max=pi[j];
-<a name="l03192"></a>03192       }
-<a name="l03193"></a>03193     }
-<a name="l03194"></a>03194     po[i]=max;
-<a name="l03195"></a>03195 
-<a name="l03196"></a>03196   }
-<a name="l03197"></a>03197 
-<a name="l03198"></a>03198   <span class="comment">// To prevent border effects:</span>
-<a name="l03199"></a>03199   <span class="keywordflow">for</span> (i = 0; i < start; i++) {
-<a name="l03200"></a>03200     po[i] = po[start];
-<a name="l03201"></a>03201   }
-<a name="l03202"></a>03202 
-<a name="l03203"></a>03203   <span class="keywordflow">for</span> (i = end; i < length; i++) {
-<a name="l03204"></a>03204     po[i] = po[end-1];
-<a name="l03205"></a>03205   }
-<a name="l03206"></a>03206   <span class="keywordflow">return</span> vo;
-<a name="l03207"></a>03207 
-<a name="l03208"></a>03208  cleanup:
-<a name="l03209"></a>03209   <span class="keywordflow">return</span> NULL;
-<a name="l03210"></a>03210 
-<a name="l03211"></a>03211 
-<a name="l03212"></a>03212 }
-<a name="l03213"></a>03213 
-<a name="l03214"></a>03214 
-<a name="l03215"></a>03215 
-<a name="l03227"></a>03227 <span class="keyword">static</span> cpl_vector*
-<a name="l03228"></a>03228 sinfo_filter_smo(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)
-<a name="l03229"></a>03229 {
-<a name="l03230"></a>03230 
-<a name="l03231"></a>03231 
-<a name="l03232"></a>03232   <span class="keywordtype">double</span> sum=0;
-<a name="l03233"></a>03233   <span class="keywordtype">int</span> start=size/2;
-<a name="l03234"></a>03234   <span class="keywordtype">int</span> end=0;
-<a name="l03235"></a>03235   <span class="keywordtype">int</span> length=0;
-<a name="l03236"></a>03236   <span class="keywordtype">int</span> i=0;
-<a name="l03237"></a>03237   <span class="keywordtype">int</span> j=0;
-<a name="l03238"></a>03238   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;
-<a name="l03239"></a>03239   <span class="keywordtype">double</span>* po=NULL;
-<a name="l03240"></a>03240   cpl_vector* vo=NULL;
-<a name="l03241"></a>03241 
-<a name="l03242"></a>03242   cknull(vi,<span class="stringliteral">"null input vector"</span>);
-<a name="l03243"></a>03243   length=cpl_vector_get_size(vi);
-<a name="l03244"></a>03244   end=length-size/2;
-<a name="l03245"></a>03245   vo=cpl_vector_new(length);
-<a name="l03246"></a>03246   pi=cpl_vector_get_data_const(vi);
-<a name="l03247"></a>03247   po=cpl_vector_get_data(vo);
-<a name="l03248"></a>03248 
-<a name="l03249"></a>03249   <span class="keywordflow">for</span>(i=start; i < end; i++) {
-<a name="l03250"></a>03250     sum=0;
-<a name="l03251"></a>03251     <span class="keywordflow">for</span>(j=i - start;j<i+start+1;j++) {
-<a name="l03252"></a>03252       sum += pi[j];
-<a name="l03253"></a>03253     }
-<a name="l03254"></a>03254     po[i]=sum/size;
-<a name="l03255"></a>03255 
-<a name="l03256"></a>03256   }
-<a name="l03257"></a>03257 
-<a name="l03258"></a>03258   <span class="comment">// To prevent border effects:</span>
-<a name="l03259"></a>03259   <span class="keywordflow">for</span> (i = 0; i < start; i++) {
-<a name="l03260"></a>03260     po[i] = po[start];
-<a name="l03261"></a>03261   }
-<a name="l03262"></a>03262 
-<a name="l03263"></a>03263   <span class="keywordflow">for</span> (i = end; i < length; i++) {
-<a name="l03264"></a>03264     po[i] = po[end-1];
-<a name="l03265"></a>03265   }
-<a name="l03266"></a>03266   <span class="keywordflow">return</span> vo;
-<a name="l03267"></a>03267 
-<a name="l03268"></a>03268  cleanup:
-<a name="l03269"></a>03269   <span class="keywordflow">return</span> NULL;
-<a name="l03270"></a>03270 
-<a name="l03271"></a>03271 }
-<a name="l03272"></a>03272 
-<a name="l03329"></a>03329 cpl_vector* sinfo_sky_background_estimate(cpl_vector *spectrum,
-<a name="l03330"></a>03330                                              <span class="keywordtype">int</span> msize,
-<a name="l03331"></a>03331                                              <span class="keywordtype">int</span> fsize)
-<a name="l03332"></a>03332 {
-<a name="l03333"></a>03333 
-<a name="l03334"></a>03334     cpl_vector  * minf=NULL;
-<a name="l03335"></a>03335     cpl_vector  * maxf=NULL;
-<a name="l03336"></a>03336     cpl_vector  * smof=NULL;
-<a name="l03337"></a>03337     cpl_vector  * back=NULL;
-<a name="l03338"></a>03338     <span class="keywordtype">double</span>* pb=NULL;
-<a name="l03339"></a>03339     <span class="keywordtype">double</span>* ps=NULL;
-<a name="l03340"></a>03340 
-<a name="l03341"></a>03341     <span class="keywordtype">int</span>     i=0;
-<a name="l03342"></a>03342     <span class="keywordtype">int</span> length=0;
-<a name="l03343"></a>03343 
-<a name="l03344"></a>03344 
-<a name="l03345"></a>03345     cknull(spectrum,<span class="stringliteral">"null input data"</span>);
-<a name="l03346"></a>03346 
-<a name="l03347"></a>03347     <span class="keywordflow">if</span> (msize % 2 == 0)
-<a name="l03348"></a>03348         msize++;
-<a name="l03349"></a>03349 
-<a name="l03350"></a>03350     <span class="keywordflow">if</span> (fsize % 2 == 0)
-<a name="l03351"></a>03351         fsize++;
-<a name="l03352"></a>03352     check_nomsg(length=cpl_vector_get_size(spectrum));
-<a name="l03353"></a>03353 
-<a name="l03354"></a>03354     <span class="keywordflow">if</span> (msize < 3 || fsize < msize || length < 2*fsize)
-<a name="l03355"></a>03355         <span class="keywordflow">return</span> NULL;
-<a name="l03356"></a>03356 
-<a name="l03357"></a>03357 
-<a name="l03358"></a>03358     cknull_nomsg(minf = sinfo_filter_min(spectrum, msize));
-<a name="l03359"></a>03359     cknull_nomsg(smof = sinfo_filter_smo(minf, fsize));
-<a name="l03360"></a>03360     cpl_vector_delete(minf);
-<a name="l03361"></a>03361     cknull_nomsg(maxf = sinfo_filter_max(smof,2*msize+1));
-<a name="l03362"></a>03362     cpl_vector_delete(smof);
-<a name="l03363"></a>03363     cknull_nomsg(smof = sinfo_filter_smo(maxf, 2*fsize+1));
-<a name="l03364"></a>03364     cpl_vector_delete(maxf);
-<a name="l03365"></a>03365     cknull_nomsg(minf = sinfo_filter_min(smof, 2*msize+1));
-<a name="l03366"></a>03366     cpl_vector_delete(smof);
-<a name="l03367"></a>03367     cknull_nomsg(smof = sinfo_filter_smo(minf, 2*fsize+1));
-<a name="l03368"></a>03368     cpl_vector_delete(minf);
-<a name="l03369"></a>03369     cknull_nomsg(back=cpl_vector_new(length));
-<a name="l03370"></a>03370     cknull_nomsg(pb=cpl_vector_get_data(back));
-<a name="l03371"></a>03371     cknull_nomsg(ps=cpl_vector_get_data(smof));
-<a name="l03372"></a>03372 
-<a name="l03373"></a>03373     <span class="keywordflow">for</span> (i = 0; i < length; i++) {
-<a name="l03374"></a>03374         pb[i] = ps[i];
-<a name="l03375"></a>03375      }
-<a name="l03376"></a>03376     cpl_vector_delete(smof);
-<a name="l03377"></a>03377 
-<a name="l03378"></a>03378     <span class="keywordflow">return</span> back;
-<a name="l03379"></a>03379  cleanup:
-<a name="l03380"></a>03380 
-<a name="l03381"></a>03381     <span class="keywordflow">return</span> NULL;
-<a name="l03382"></a>03382 
-<a name="l03383"></a>03383 }
-<a name="l03384"></a>03384 
-<a name="l03385"></a>03385 
-<a name="l03386"></a>03386 
-<a name="l03396"></a>03396 <span class="keyword">static</span> cpl_table*
-<a name="l03397"></a>03397 sinfo_slice_z(<span class="keyword">const</span> cpl_imagelist* cin,<span class="keyword">const</span> <span class="keywordtype">int</span> i,<span class="keyword">const</span> <span class="keywordtype">int</span> j)
-<a name="l03398"></a>03398 {
-<a name="l03399"></a>03399   <span class="keywordtype">int</span> sx=0;
-<a name="l03400"></a>03400   <span class="keywordtype">int</span> sy=0;
-<a name="l03401"></a>03401   <span class="keywordtype">int</span> sz=0;
-<a name="l03402"></a>03402   <span class="keywordtype">int</span> k=0;
-<a name="l03403"></a>03403   cpl_table* tout=NULL;
-<a name="l03404"></a>03404   <span class="keyword">const</span> cpl_image* img=NULL;
-<a name="l03405"></a>03405   <span class="keyword">const</span> <span class="keywordtype">double</span>* pim=NULL;
-<a name="l03406"></a>03406 
-<a name="l03407"></a>03407   cknull(cin,<span class="stringliteral">"null input imagelist"</span>);
-<a name="l03408"></a>03408   check_nomsg(sz=cpl_imagelist_get_size(cin));
-<a name="l03409"></a>03409   check_nomsg(img=cpl_imagelist_get_const(cin,0));
-<a name="l03410"></a>03410   check_nomsg(sx=cpl_image_get_size_x(img));
-<a name="l03411"></a>03411   check_nomsg(sy=cpl_image_get_size_y(img));
-<a name="l03412"></a>03412   check_nomsg(tout=cpl_table_new(sz));
-<a name="l03413"></a>03413   check_nomsg(cpl_table_new_column(tout,<span class="stringliteral">"VALUE"</span>,CPL_TYPE_DOUBLE));
-<a name="l03414"></a>03414   <span class="keywordflow">for</span>(k=0;k<sz;k++) {
-<a name="l03415"></a>03415     check_nomsg(img=cpl_imagelist_get_const(cin,k));
-<a name="l03416"></a>03416     check_nomsg(pim=cpl_image_get_data_double_const(img));
-<a name="l03417"></a>03417     check_nomsg(cpl_table_set(tout,<span class="stringliteral">"VALUE"</span>,k,pim[j*sx+i]));
-<a name="l03418"></a>03418   }
-<a name="l03419"></a>03419 
-<a name="l03420"></a>03420   <span class="keywordflow">return</span> tout;
-<a name="l03421"></a>03421  cleanup:
-<a name="l03422"></a>03422   sinfo_free_table(&tout);
-<a name="l03423"></a>03423 
-<a name="l03424"></a>03424   <span class="keywordflow">return</span> NULL;
-<a name="l03425"></a>03425 
-<a name="l03426"></a>03426 }
-<a name="l03427"></a>03427 
-<a name="l03438"></a>03438 <span class="keywordtype">double</span>
-<a name="l03439"></a>03439 sinfo_xcorr(cpl_table* int_obj,
-<a name="l03440"></a>03440             cpl_table* int_sky,
-<a name="l03441"></a>03441             cpl_table* lambda,
-<a name="l03442"></a>03442             <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion,
-<a name="l03443"></a>03443             <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw)
-<a name="l03444"></a>03444 {
-<a name="l03445"></a>03445 
-<a name="l03446"></a>03446   cpl_table* z=NULL;
-<a name="l03447"></a>03447   cpl_table* tmp_sky=NULL;
-<a name="l03448"></a>03448 
-<a name="l03449"></a>03449   cpl_table* z_diff=NULL;
-<a name="l03450"></a>03450   cpl_table* z_pos=NULL;
-<a name="l03451"></a>03451 
-<a name="l03452"></a>03452   <span class="keywordtype">int</span> z_ext=0;
-<a name="l03453"></a>03453   <span class="keywordtype">double</span> z_mean=0;
-<a name="l03454"></a>03454   <span class="keywordtype">double</span> z_sdv=0;
-<a name="l03455"></a>03455   <span class="keywordtype">int</span> nrow=0;
-<a name="l03456"></a>03456   <span class="keywordtype">int</span> i=0;
-<a name="l03457"></a>03457 
-<a name="l03458"></a>03458   <span class="keywordtype">double</span> g_lam=0;
-<a name="l03459"></a>03459   <span class="keywordtype">double</span> g_err=0;
-<a name="l03460"></a>03460 
-<a name="l03461"></a>03461   <span class="keywordtype">double</span> sky_max=0;
-<a name="l03462"></a>03462 
-<a name="l03463"></a>03463   <span class="keywordtype">double</span>* pint=NULL;
-<a name="l03464"></a>03464   <span class="keywordtype">int</span>* ppos=NULL;
-<a name="l03465"></a>03465   <span class="keywordtype">int</span> status=0;
-<a name="l03466"></a>03466   <span class="keywordtype">int</span> zsize=0;
-<a name="l03467"></a>03467   <span class="keywordtype">int</span> iq=0;
-<a name="l03468"></a>03468 
-<a name="l03469"></a>03469   <span class="keywordtype">double</span> g_diff=0;
-<a name="l03470"></a>03470   <span class="keywordtype">int</span> jz=0;
-<a name="l03471"></a>03471   <span class="keywordtype">int</span> z1=0;
-<a name="l03472"></a>03472   <span class="keywordtype">int</span> nfit=0;
-<a name="l03473"></a>03473   <span class="keywordtype">int</span> npos=0;
-<a name="l03474"></a>03474   cpl_table* z_good=NULL;
-<a name="l03475"></a>03475   cpl_table* w_tbl=NULL;
-<a name="l03476"></a>03476   cpl_table* o_tbl=NULL;
-<a name="l03477"></a>03477   cpl_table* s_tbl=NULL;
-<a name="l03478"></a>03478   cpl_vector* vw=NULL;
-<a name="l03479"></a>03479   cpl_vector* vs=NULL;
-<a name="l03480"></a>03480   cpl_vector* vo=NULL;
-<a name="l03481"></a>03481   cpl_vector* sx=NULL;
-<a name="l03482"></a>03482   cpl_vector* sy=NULL;
-<a name="l03483"></a>03483 
-<a name="l03484"></a>03484 
-<a name="l03485"></a>03485   <span class="keywordtype">double</span> o1=0;
-<a name="l03486"></a>03486   <span class="keywordtype">double</span> o2=0;
-<a name="l03487"></a>03487   <span class="keywordtype">double</span> oc=0;
-<a name="l03488"></a>03488   <span class="keywordtype">double</span> om=0;
-<a name="l03489"></a>03489 
-<a name="l03490"></a>03490 
-<a name="l03491"></a>03491 
-<a name="l03492"></a>03492   <span class="keywordtype">double</span> zfit=0;
-<a name="l03493"></a>03493 
-<a name="l03494"></a>03494 
-<a name="l03495"></a>03495   <span class="keywordtype">double</span> mse=0;
-<a name="l03496"></a>03496 
-<a name="l03497"></a>03497   <span class="keywordtype">double</span> ws=0;
-<a name="l03498"></a>03498   <span class="keywordtype">double</span> wc_s=0;
-<a name="l03499"></a>03499   <span class="keywordtype">double</span> sig_s=0;
-<a name="l03500"></a>03500   <span class="keywordtype">double</span> bkg_s=0;
-<a name="l03501"></a>03501   <span class="keywordtype">double</span> amp_s=0;
-<a name="l03502"></a>03502   <span class="keywordtype">double</span> area_s=0;
-<a name="l03503"></a>03503 
-<a name="l03504"></a>03504   <span class="keywordtype">double</span> wo=0;
-<a name="l03505"></a>03505   <span class="keywordtype">double</span> wc_o=0;
-<a name="l03506"></a>03506   <span class="keywordtype">double</span> sig_o=0;
-<a name="l03507"></a>03507   <span class="keywordtype">double</span> bkg_o=0;
-<a name="l03508"></a>03508   <span class="keywordtype">double</span> amp_o=0;
-<a name="l03509"></a>03509   <span class="keywordtype">double</span> area_o=0;
-<a name="l03510"></a>03510 
-<a name="l03511"></a>03511   cpl_polynomial* cfit=NULL;
-<a name="l03512"></a>03512   cpl_size pows[2];
-<a name="l03513"></a>03513   cpl_vector* vx=NULL;
-<a name="l03514"></a>03514   cpl_vector* vy=NULL;
-<a name="l03515"></a>03515 
-<a name="l03516"></a>03516 
-<a name="l03517"></a>03517   cpl_error_code error_code=CPL_ERROR_NONE;
-<a name="l03518"></a>03518 
-<a name="l03519"></a>03519   <span class="comment">// crosscorrelate obj & sky to check for lambda offset</span>
-<a name="l03520"></a>03520 
-<a name="l03521"></a>03521   <span class="comment">//if (mean(z[where(finite(z))]) < 0) z = z * (-1);</span>
-<a name="l03522"></a>03522   <span class="comment">//if sky mean is < 0 flip sky intensity</span>
-<a name="l03523"></a>03523   zsize=cpl_table_get_nrow(int_obj);
-<a name="l03524"></a>03524   check_nomsg(z = cpl_table_duplicate(int_sky));
-<a name="l03525"></a>03525   ck0_nomsg(sinfo_table_flag_nan(&z,<span class="stringliteral">"INT"</span>));
-<a name="l03526"></a>03526   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z1.fits",CPL_IO_DEFAULT));</span>
-<a name="l03527"></a>03527   check_nomsg(z_mean=cpl_table_get_column_mean(z,<span class="stringliteral">"INT"</span>));
-<a name="l03528"></a>03528   <span class="keywordflow">if</span>(z_mean < 0) {
-<a name="l03529"></a>03529     check_nomsg(cpl_table_multiply_scalar(z,<span class="stringliteral">"INT"</span>,-1));
-<a name="l03530"></a>03530   }
-<a name="l03531"></a>03531   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z2.fits",CPL_IO_DEFAULT));</span>
-<a name="l03532"></a>03532 
-<a name="l03533"></a>03533   <span class="comment">//z[where(int_sky < max(int_sky[where(finite(int_sky))])/4)] = 0;</span>
-<a name="l03534"></a>03534   <span class="comment">// take in consideration only strong sky lines (set else to 0)</span>
-<a name="l03535"></a>03535   check_nomsg(tmp_sky=cpl_table_duplicate(int_sky));
-<a name="l03536"></a>03536   ck0_nomsg(sinfo_table_flag_nan(&tmp_sky,<span class="stringliteral">"INT"</span>));
-<a name="l03537"></a>03537   check_nomsg(sky_max=cpl_table_get_column_max(tmp_sky,<span class="stringliteral">"INT"</span>));
-<a name="l03538"></a>03538   sinfo_free_table(&tmp_sky);
-<a name="l03539"></a>03539 
-<a name="l03540"></a>03540   <span class="comment">//flag too low values</span>
-<a name="l03541"></a>03541   check_nomsg(nrow=cpl_table_get_nrow(z));
-<a name="l03542"></a>03542   check_nomsg(pint=cpl_table_get_data_double(z,<span class="stringliteral">"INT"</span>));
-<a name="l03543"></a>03543   check_nomsg(sky_max=cpl_table_get_column_max(z,<span class="stringliteral">"INT"</span>));
-<a name="l03544"></a>03544   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l03545"></a>03545     <span class="keywordflow">if</span>(pint[i]<sky_max/SKY_LINE_MIN_CUT) {
-<a name="l03546"></a>03546       pint[i]=0;
-<a name="l03547"></a>03547     }
-<a name="l03548"></a>03548   }
-<a name="l03549"></a>03549 
-<a name="l03550"></a>03550 
-<a name="l03551"></a>03551   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z4.fits",CPL_IO_DEFAULT));</span>
-<a name="l03552"></a>03552   <span class="comment">//computes gradient</span>
-<a name="l03553"></a>03553   <span class="comment">//z_diff = z[0:n_elements(z)-2] - z[1:n_elements(z)-1];</span>
-<a name="l03554"></a>03554   check_nomsg(z_diff=cpl_table_duplicate(z));
-<a name="l03555"></a>03555   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"INT1"</span>,z,<span class="stringliteral">"INT"</span>));
-<a name="l03556"></a>03556   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"INT2"</span>,z,<span class="stringliteral">"INT"</span>));
-<a name="l03557"></a>03557   check_nomsg(cpl_table_shift_column(z_diff,<span class="stringliteral">"INT1"</span>,-1));
-<a name="l03558"></a>03558   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"DIFF"</span>,z_diff,<span class="stringliteral">"INT2"</span>));
-<a name="l03559"></a>03559   check_nomsg(cpl_table_subtract_columns(z_diff,<span class="stringliteral">"DIFF"</span>,<span class="stringliteral">"INT1"</span>));
-<a name="l03560"></a>03560 
-<a name="l03561"></a>03561   check_nomsg(cpl_table_erase_window(z_diff,nrow-2,2));
-<a name="l03562"></a>03562   <span class="comment">//check_nomsg(cpl_table_save(z_diff,NULL,NULL,</span>
-<a name="l03563"></a>03563   <span class="comment">//                             "out_z_diff.fits",CPL_IO_DEFAULT));</span>
-<a name="l03564"></a>03564 
-<a name="l03565"></a>03565   <span class="comment">//identify points positions at which there is a line pick</span>
-<a name="l03566"></a>03566   check_nomsg(cpl_table_new_column(z_diff,<span class="stringliteral">"POS"</span>,CPL_TYPE_INT));
-<a name="l03567"></a>03567   check_nomsg(cpl_table_fill_column_window_int(z_diff,<span class="stringliteral">"POS"</span>,0,nrow,0));
-<a name="l03568"></a>03568 
-<a name="l03569"></a>03569   check_nomsg(pint=cpl_table_get_data_double(z_diff,<span class="stringliteral">"DIFF"</span>));
-<a name="l03570"></a>03570   check_nomsg(ppos=cpl_table_get_data_int(z_diff,<span class="stringliteral">"POS"</span>));
-<a name="l03571"></a>03571   check_nomsg(nrow=cpl_table_get_nrow(z_diff));
-<a name="l03572"></a>03572   <span class="keywordflow">for</span>(i=1;i<nrow;i++) {
-<a name="l03573"></a>03573     <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pint[i]) && (pint[i]>0 && pint[i-1]<0)) {
-<a name="l03574"></a>03574       ppos[i]=i;
-<a name="l03575"></a>03575     }
-<a name="l03576"></a>03576   }
-<a name="l03577"></a>03577 
-<a name="l03578"></a>03578   <span class="comment">//check_nomsg(cpl_table_save(z_diff,NULL,NULL,"out_z_diff.fits",</span>
-<a name="l03579"></a>03579   <span class="comment">//                             CPL_IO_DEFAULT));</span>
-<a name="l03580"></a>03580   check_nomsg(cpl_table_select_all(z_diff));
-<a name="l03581"></a>03581   check_nomsg(cpl_table_and_selected_int(z_diff,<span class="stringliteral">"POS"</span>,CPL_GREATER_THAN,0));
-<a name="l03582"></a>03582   check_nomsg(z_pos=cpl_table_extract_selected(z_diff));
-<a name="l03583"></a>03583   sinfo_free_table(&z_diff);
-<a name="l03584"></a>03584   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span>
-<a name="l03585"></a>03585   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span>
-<a name="l03586"></a>03586   <span class="comment">//Do a gaussian fit in a range of size 2*zext centered at</span>
-<a name="l03587"></a>03587   <span class="comment">//each line maximum position (fit the line) to get in corresponding arrays:</span>
-<a name="l03588"></a>03588   <span class="comment">// 1) line lambda position of object and sky</span>
-<a name="l03589"></a>03589   <span class="comment">// 2) line object -sky intensity</span>
-<a name="l03590"></a>03590   <span class="comment">// 3) line object-sky intensity error</span>
-<a name="l03591"></a>03591 
-<a name="l03592"></a>03592 
-<a name="l03593"></a>03593   g_lam = 0.;
-<a name="l03594"></a>03594   g_diff = 0.;
-<a name="l03595"></a>03595   g_err = 0.;
-<a name="l03596"></a>03596   check_nomsg(npos=cpl_table_get_nrow(z_pos));
-<a name="l03597"></a>03597   z_ext = line_hw ;
-<a name="l03598"></a>03598   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"STATUS_S"</span>,CPL_TYPE_INT));
-<a name="l03599"></a>03599   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"STATUS_O"</span>,CPL_TYPE_INT));
-<a name="l03600"></a>03600   check_nomsg(cpl_table_fill_column_window_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,0,npos,0));
-<a name="l03601"></a>03601   check_nomsg(cpl_table_fill_column_window_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,0,npos,0));
-<a name="l03602"></a>03602   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"SIGS"</span>,CPL_TYPE_DOUBLE));
-<a name="l03603"></a>03603   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVES"</span>,CPL_TYPE_DOUBLE));
-<a name="l03604"></a>03604   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"BKGS"</span>,CPL_TYPE_DOUBLE));
-<a name="l03605"></a>03605   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AREAS"</span>,CPL_TYPE_DOUBLE));
-<a name="l03606"></a>03606   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AMPS"</span>,CPL_TYPE_DOUBLE));
-<a name="l03607"></a>03607 
-<a name="l03608"></a>03608 
-<a name="l03609"></a>03609   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"SIGO"</span>,CPL_TYPE_DOUBLE));
-<a name="l03610"></a>03610   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVEO"</span>,CPL_TYPE_DOUBLE));
-<a name="l03611"></a>03611   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"BKGO"</span>,CPL_TYPE_DOUBLE));
-<a name="l03612"></a>03612   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AREAO"</span>,CPL_TYPE_DOUBLE));
-<a name="l03613"></a>03613   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AMPO"</span>,CPL_TYPE_DOUBLE));
-<a name="l03614"></a>03614 
-<a name="l03615"></a>03615   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVEC"</span>,CPL_TYPE_DOUBLE));
-<a name="l03616"></a>03616   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WDIF"</span>,CPL_TYPE_DOUBLE));
-<a name="l03617"></a>03617   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"ERR"</span>,CPL_TYPE_DOUBLE));
-<a name="l03618"></a>03618 
-<a name="l03619"></a>03619   nfit=2*z_ext+1;
-<a name="l03620"></a>03620   <span class="comment">//sinfo_msg("npos=%d z_ext=%d",npos,z_ext);</span>
-<a name="l03621"></a>03621   <span class="comment">//sinfo_table_column_dump(z_pos,"POS",CPL_TYPE_INT);</span>
-<a name="l03622"></a>03622   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span>
-<a name="l03623"></a>03623   <span class="comment">//                             "out_z_pos_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l03624"></a>03624   <span class="comment">//check_nomsg(cpl_table_save(int_obj,NULL,NULL,</span>
-<a name="l03625"></a>03625   <span class="comment">//                             "out_int_obj_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l03626"></a>03626   <span class="comment">//check_nomsg(cpl_table_save(int_sky,NULL,NULL,</span>
-<a name="l03627"></a>03627   <span class="comment">//                             "out_int_sky_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l03628"></a>03628 
-<a name="l03629"></a>03629   <span class="keywordflow">for</span> (jz=0;jz<npos;jz++) {
-<a name="l03630"></a>03630     check_nomsg(z1 = cpl_table_get_int(z_pos,<span class="stringliteral">"POS"</span>,jz,&status));
-<a name="l03631"></a>03631     <span class="comment">//sinfo_msg("z1=%d",z1);</span>
-<a name="l03632"></a>03632     <span class="comment">// AMO added if check to prevent array explosion</span>
-<a name="l03633"></a>03633     <span class="keywordflow">if</span>((z1-z_ext) > 0 && (z1+z_ext) < zsize) {
-<a name="l03634"></a>03634       check_nomsg(cpl_table_select_all(int_sky));
-<a name="l03635"></a>03635       check_nomsg(cpl_table_select_all(int_obj));
-<a name="l03636"></a>03636       check_nomsg(cpl_table_select_all(lambda));
-<a name="l03637"></a>03637       check_nomsg(cpl_table_and_selected_window(int_sky,z1-z_ext,nfit));
-<a name="l03638"></a>03638       check_nomsg(s_tbl=cpl_table_extract_selected(int_sky));
-<a name="l03639"></a>03639       check_nomsg(cpl_table_and_selected_window(lambda,z1-z_ext,nfit));
-<a name="l03640"></a>03640       check_nomsg(w_tbl=cpl_table_extract_selected(lambda));
-<a name="l03641"></a>03641       check_nomsg(cpl_table_and_selected_window(int_obj,z1-z_ext,nfit));
-<a name="l03642"></a>03642       check_nomsg(o_tbl=cpl_table_extract_selected(int_obj));
-<a name="l03643"></a>03643 
-<a name="l03644"></a>03644 
-<a name="l03645"></a>03645       check_nomsg(vw=cpl_vector_wrap(nfit,
-<a name="l03646"></a>03646                      cpl_table_get_data_double(w_tbl,<span class="stringliteral">"WAVE"</span>)));
-<a name="l03647"></a>03647       check_nomsg(vs=cpl_vector_wrap(nfit,
-<a name="l03648"></a>03648                      cpl_table_get_data_double(s_tbl,<span class="stringliteral">"INT"</span>)));
-<a name="l03649"></a>03649       check_nomsg(vo=cpl_vector_wrap(nfit,
-<a name="l03650"></a>03650                      cpl_table_get_data_double(o_tbl,<span class="stringliteral">"INT"</span>)));
-<a name="l03651"></a>03651 
-<a name="l03652"></a>03652 
-<a name="l03653"></a>03653       check_nomsg(sx=cpl_vector_new(nfit));
-<a name="l03654"></a>03654       check_nomsg(cpl_vector_fill(sx,10.));
-<a name="l03655"></a>03655       check_nomsg(sy=cpl_vector_duplicate(sx));
-<a name="l03656"></a>03656 
-<a name="l03657"></a>03657 
-<a name="l03658"></a>03658       <span class="comment">// Check if the object line is in emission or absorbtion</span>
-<a name="l03659"></a>03659       o1=cpl_vector_get(vo,0);
-<a name="l03660"></a>03660       o2=cpl_vector_get(vo,nfit-1);
-<a name="l03661"></a>03661       oc=(o1+o2)*0.5;
-<a name="l03662"></a>03662       om=cpl_vector_get_median_const(vo);
-<a name="l03663"></a>03663       <span class="keywordflow">if</span>(om<oc) {
-<a name="l03664"></a>03664     cpl_vector_multiply_scalar(vo,-1.);
-<a name="l03665"></a>03665       }
-<a name="l03666"></a>03666       check_nomsg(ws=cpl_table_get_double(lambda,<span class="stringliteral">"WAVE"</span>,z1,&status));
-<a name="l03667"></a>03667       check_nomsg(amp_s=cpl_table_get_double(z_pos,<span class="stringliteral">"INT"</span>,jz,&status));
-<a name="l03668"></a>03668       wc_s=ws;
-<a name="l03669"></a>03669       sig_s=z_ext*dispersion;
-<a name="l03670"></a>03670       bkg_s=0;
-<a name="l03671"></a>03671       area_s=sinfo_gaussian_area(amp_s,sig_s,ws,wc_s,bkg_s);
-<a name="l03672"></a>03672       <span class="keywordflow">if</span>(wc_s < 2.35) {
-<a name="l03673"></a>03673         <span class="comment">//sinfo_msg("wc_s=%f",wc_s);</span>
-<a name="l03674"></a>03674         <span class="comment">//cpl_vector_dump(vw,stdout);</span>
-<a name="l03675"></a>03675         <span class="comment">//cpl_vector_dump(vs,stdout);</span>
-<a name="l03676"></a>03676 
-<a name="l03677"></a>03677         error_code=cpl_vector_fit_gaussian(vw,NULL,
-<a name="l03678"></a>03678                         vs,NULL,
-<a name="l03679"></a>03679                        CPL_FIT_ALL,
-<a name="l03680"></a>03680                        &wc_s,&sig_s,
-<a name="l03681"></a>03681                        &area_s,&bkg_s,
-<a name="l03682"></a>03682                        NULL,NULL,NULL);
-<a name="l03683"></a>03683         <span class="keywordflow">if</span>(error_code == CPL_ERROR_NONE) {
-<a name="l03684"></a>03684       amp_s=sinfo_gaussian_amp(area_s,sig_s,ws,wc_s,bkg_s);
-<a name="l03685"></a>03685           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));
-<a name="l03686"></a>03686           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));
-<a name="l03687"></a>03687           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));
-<a name="l03688"></a>03688           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));
-<a name="l03689"></a>03689           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));
-<a name="l03690"></a>03690       <span class="comment">/*</span>
-<a name="l03691"></a>03691 <span class="comment">          sinfo_msg("Gauss fit parameters:");</span>
-<a name="l03692"></a>03692 <span class="comment">          sinfo_msg("wc_s=%f sig_s=%f area_s=%f bkg_s=%f",</span>
-<a name="l03693"></a>03693 <span class="comment">                     wc_s,sig_s,area_s,bkg_s);</span>
-<a name="l03694"></a>03694 <span class="comment">          sinfo_msg("mse=%f chired=%f amp_s=%f",</span>
-<a name="l03695"></a>03695 <span class="comment">                     mse,chired,amp_s);</span>
-<a name="l03696"></a>03696 <span class="comment">      */</span>
-<a name="l03697"></a>03697 
-<a name="l03698"></a>03698     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error_code == CPL_ERROR_CONTINUE) {
-<a name="l03699"></a>03699       cpl_error_reset();
-<a name="l03700"></a>03700       amp_s=sinfo_gaussian_amp(area_s,sig_s,ws,wc_s,bkg_s);
-<a name="l03701"></a>03701           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));
-<a name="l03702"></a>03702           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));
-<a name="l03703"></a>03703           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));
-<a name="l03704"></a>03704           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));
-<a name="l03705"></a>03705           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));
-<a name="l03706"></a>03706           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-1));
-<a name="l03707"></a>03707     } <span class="keywordflow">else</span> {
-<a name="l03708"></a>03708       cpl_error_reset();
-<a name="l03709"></a>03709           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));
-<a name="l03710"></a>03710           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));
-<a name="l03711"></a>03711           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));
-<a name="l03712"></a>03712           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));
-<a name="l03713"></a>03713           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));
-<a name="l03714"></a>03714           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-2));
-<a name="l03715"></a>03715     }
-<a name="l03716"></a>03716         check_nomsg(wo=cpl_table_get_double(lambda,<span class="stringliteral">"WAVE"</span>,z1,&status));
-<a name="l03717"></a>03717         check_nomsg(amp_o=cpl_table_get_double(z_pos,<span class="stringliteral">"INT"</span>,jz,&status));
-<a name="l03718"></a>03718         wc_o=wo;
-<a name="l03719"></a>03719         sig_o=z_ext*dispersion;
-<a name="l03720"></a>03720         bkg_o=0;
-<a name="l03721"></a>03721         area_o=sinfo_gaussian_area(amp_o,sig_o,wo,wc_o,bkg_o);
-<a name="l03722"></a>03722         error_code = cpl_vector_fit_gaussian(vw,NULL,
-<a name="l03723"></a>03723                       vo,sy,
-<a name="l03724"></a>03724                      CPL_FIT_ALL,
-<a name="l03725"></a>03725                      &wc_o,&sig_o,
-<a name="l03726"></a>03726                      &area_o,&bkg_o,
-<a name="l03727"></a>03727                      NULL,NULL,NULL);
-<a name="l03728"></a>03728 
-<a name="l03729"></a>03729         <span class="keywordflow">if</span>(error_code == CPL_ERROR_NONE) {
-<a name="l03730"></a>03730 
-<a name="l03731"></a>03731           amp_o=sinfo_gaussian_amp(area_o,sig_o,wo,wc_o,bkg_o);
-<a name="l03732"></a>03732           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));
-<a name="l03733"></a>03733           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));
-<a name="l03734"></a>03734           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));
-<a name="l03735"></a>03735           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));
-<a name="l03736"></a>03736           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));
-<a name="l03737"></a>03737       <span class="comment">/*</span>
-<a name="l03738"></a>03738 <span class="comment">          sinfo_msg("Gauss fit parameters:");</span>
-<a name="l03739"></a>03739 <span class="comment">          sinfo_msg("wc_o=%f sig_o=%f area_o=%f bkg_o=%f",</span>
-<a name="l03740"></a>03740 <span class="comment">                     wc_o,sig_o,area_o,bkg_o);</span>
-<a name="l03741"></a>03741 <span class="comment">          sinfo_msg("mse=%f chired=%f amp_o=%f",</span>
-<a name="l03742"></a>03742 <span class="comment">                     mse,chired,amp_o);</span>
-<a name="l03743"></a>03743 <span class="comment">      */</span>
-<a name="l03744"></a>03744     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error_code == CPL_ERROR_CONTINUE) {
-<a name="l03745"></a>03745 
-<a name="l03746"></a>03746       cpl_error_reset();
-<a name="l03747"></a>03747           amp_o=sinfo_gaussian_amp(area_o,sig_o,wo,wc_o,bkg_o);
-<a name="l03748"></a>03748           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));
-<a name="l03749"></a>03749           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));
-<a name="l03750"></a>03750           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));
-<a name="l03751"></a>03751           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));
-<a name="l03752"></a>03752           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));
-<a name="l03753"></a>03753           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-1));
-<a name="l03754"></a>03754 
-<a name="l03755"></a>03755     } <span class="keywordflow">else</span> {
-<a name="l03756"></a>03756       cpl_error_reset();
-<a name="l03757"></a>03757           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));
-<a name="l03758"></a>03758           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));
-<a name="l03759"></a>03759           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));
-<a name="l03760"></a>03760           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));
-<a name="l03761"></a>03761           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));
-<a name="l03762"></a>03762           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-2));
-<a name="l03763"></a>03763           <span class="comment">/*</span>
-<a name="l03764"></a>03764 <span class="comment">          if (lambda[z1] < 2.35 &&</span>
-<a name="l03765"></a>03765 <span class="comment">             total(finite([l1,s1,o1])) == n_elements([l1,s1,o1])) {</span>
-<a name="l03766"></a>03766 <span class="comment">            gs1 = float(gaussfit(l1,s1,as1,nterms=3));</span>
-<a name="l03767"></a>03767 <span class="comment">            go1 = float(gaussfit(l1,o1,ao1,nterms=3));</span>
-<a name="l03768"></a>03768 <span class="comment">            g_lam = [g_lam,(as1[1]+ao1[1])/2.];</span>
-<a name="l03769"></a>03769 <span class="comment">            g_diff = [g_diff,as1[1]-ao1[1]];</span>
-<a name="l03770"></a>03770 <span class="comment">            g_err = [g_err,sqrt(as1[2]^2+ao1[2]^2)];</span>
-<a name="l03771"></a>03771 <span class="comment">          }</span>
-<a name="l03772"></a>03772 <span class="comment">          */</span>
-<a name="l03773"></a>03773         }
-<a name="l03774"></a>03774         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"ERR"</span>,
-<a name="l03775"></a>03775                                        jz,sqrt(sig_s*sig_s+sig_o*sig_o)));
-<a name="l03776"></a>03776         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WDIF"</span>,jz,wc_s-wc_o));
-<a name="l03777"></a>03777         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEC"</span>,jz,(wc_o+wc_s)/2));
-<a name="l03778"></a>03778 
-<a name="l03779"></a>03779       } <span class="keywordflow">else</span> {
-<a name="l03780"></a>03780           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-3));
-<a name="l03781"></a>03781           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-3));
-<a name="l03782"></a>03782       }
-<a name="l03783"></a>03783       sinfo_unwrap_vector(&vw);
-<a name="l03784"></a>03784       sinfo_unwrap_vector(&vs);
-<a name="l03785"></a>03785       sinfo_unwrap_vector(&vo);
-<a name="l03786"></a>03786       sinfo_free_my_vector(&sx);
-<a name="l03787"></a>03787       sinfo_free_my_vector(&sy);
-<a name="l03788"></a>03788       sinfo_free_table(&w_tbl);
-<a name="l03789"></a>03789       sinfo_free_table(&s_tbl);
-<a name="l03790"></a>03790       sinfo_free_table(&o_tbl);
-<a name="l03791"></a>03791     }
-<a name="l03792"></a>03792   }
-<a name="l03793"></a>03793 
-<a name="l03794"></a>03794 
-<a name="l03795"></a>03795   check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"YDIF"</span>,z_pos,<span class="stringliteral">"WDIF"</span>));
-<a name="l03796"></a>03796   check_nomsg(cpl_table_divide_scalar(z_pos,<span class="stringliteral">"YDIF"</span>,dispersion));
-<a name="l03797"></a>03797   <span class="comment">//sinfo_table_column_dump(z_pos,"WAVEC",CPL_TYPE_DOUBLE);</span>
-<a name="l03798"></a>03798   <span class="comment">//sinfo_table_column_dump(z_pos,"STATUS",CPL_TYPE_INT);</span>
-<a name="l03799"></a>03799   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span>
-<a name="l03800"></a>03800 
-<a name="l03801"></a>03801   check_nomsg(cpl_table_and_selected_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,CPL_GREATER_THAN,-2));
-<a name="l03802"></a>03802   check_nomsg(cpl_table_and_selected_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,CPL_GREATER_THAN,-2));
-<a name="l03803"></a>03803 
-<a name="l03804"></a>03804   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span>
-<a name="l03805"></a>03805   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span>
-<a name="l03806"></a>03806 
-<a name="l03807"></a>03807   <span class="comment">//goto cleanup;</span>
-<a name="l03808"></a>03808 
-<a name="l03809"></a>03809   check_nomsg(z_good=cpl_table_extract_selected(z_pos));
-<a name="l03810"></a>03810   check_nomsg(npos=cpl_table_get_nrow(z_good));
-<a name="l03811"></a>03811   sinfo_free_table(&z_pos);
-<a name="l03812"></a>03812   <span class="keywordflow">if</span>(npos == 0) {
-<a name="l03813"></a>03813     <span class="keywordflow">return</span> 0;
-<a name="l03814"></a>03814   }
-<a name="l03815"></a>03815   check_nomsg(z_pos=cpl_table_duplicate(z_good));
-<a name="l03816"></a>03816   check_nomsg(z_mean = cpl_table_get_column_median(z_pos,<span class="stringliteral">"WDIF"</span>));
-<a name="l03817"></a>03817   check_nomsg(z_sdv  = cpl_table_get_column_stdev(z_pos,<span class="stringliteral">"WDIF"</span>));
-<a name="l03818"></a>03818 
-<a name="l03819"></a>03819   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span>
-<a name="l03820"></a>03820   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span>
-<a name="l03821"></a>03821 
-<a name="l03822"></a>03822   check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"CHECK"</span>,
-<a name="l03823"></a>03823                                          z_pos,<span class="stringliteral">"WDIF"</span>));
-<a name="l03824"></a>03824 
-<a name="l03825"></a>03825 
-<a name="l03826"></a>03826   cpl_table_erase_column(z_pos,<span class="stringliteral">"AMPO"</span>);
-<a name="l03827"></a>03827   cpl_table_erase_column(z_pos,<span class="stringliteral">"SIGO"</span>);
-<a name="l03828"></a>03828   cpl_table_erase_column(z_pos,<span class="stringliteral">"AREAO"</span>);
-<a name="l03829"></a>03829   cpl_table_erase_column(z_pos,<span class="stringliteral">"BKGO"</span>);
-<a name="l03830"></a>03830   cpl_table_erase_column(z_pos,<span class="stringliteral">"WAVEO"</span>);
-<a name="l03831"></a>03831   cpl_table_erase_column(z_pos,<span class="stringliteral">"AMPS"</span>);
-<a name="l03832"></a>03832   cpl_table_erase_column(z_pos,<span class="stringliteral">"SIGS"</span>);
-<a name="l03833"></a>03833   cpl_table_erase_column(z_pos,<span class="stringliteral">"AREAS"</span>);
-<a name="l03834"></a>03834   cpl_table_erase_column(z_pos,<span class="stringliteral">"BKGS"</span>);
-<a name="l03835"></a>03835   cpl_table_erase_column(z_pos,<span class="stringliteral">"WAVES"</span>);
-<a name="l03836"></a>03836   cpl_table_erase_column(z_pos,<span class="stringliteral">"STATUS_S"</span>);
-<a name="l03837"></a>03837   cpl_table_erase_column(z_pos,<span class="stringliteral">"STATUS_O"</span>);
-<a name="l03838"></a>03838 
-<a name="l03839"></a>03839   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT"</span>);
-<a name="l03840"></a>03840   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT1"</span>);
-<a name="l03841"></a>03841   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT2"</span>);
-<a name="l03842"></a>03842   cpl_table_erase_column(z_pos,<span class="stringliteral">"ERR"</span>);
-<a name="l03843"></a>03843   cpl_table_erase_column(z_pos,<span class="stringliteral">"POS"</span>);
-<a name="l03844"></a>03844   cpl_table_erase_column(z_pos,<span class="stringliteral">"DIFF"</span>);
-<a name="l03845"></a>03845 
-<a name="l03846"></a>03846   <span class="comment">//check_nomsg(cpl_table_save(z_good,NULL,NULL,</span>
-<a name="l03847"></a>03847   <span class="comment">//                             "out_z_good.fits",CPL_IO_DEFAULT));</span>
-<a name="l03848"></a>03848   <span class="comment">//Do a kappa-sigma clip of the differences of line positions</span>
-<a name="l03849"></a>03849   <span class="comment">//as determined in the object and in the sky spectrum</span>
-<a name="l03850"></a>03850 
-<a name="l03851"></a>03851   sinfo_msg(<span class="stringliteral">"ks-clip1"</span>);
-<a name="l03852"></a>03852   sinfo_msg(<span class="stringliteral">"iter mean (um) sdv (um) mean (pix) sdv (pix)"</span>);
-<a name="l03853"></a>03853   <span class="comment">//sinfo_table_column_dump(z_pos,"WAVEC",CPL_TYPE_DOUBLE);</span>
-<a name="l03854"></a>03854   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span>
-<a name="l03855"></a>03855 
-<a name="l03856"></a>03856   <span class="keywordflow">for</span> (iq = 0;iq<XCOR_YSHIFT_KS_CLIP;iq++) {
-<a name="l03857"></a>03857     <span class="comment">//sinfo_msg("nval=%d",cpl_table_get_nrow(z_pos));</span>
-<a name="l03858"></a>03858     sinfo_msg(<span class="stringliteral">"  %d  %3.2g   %3.2g  %5.4g     %5.4g"</span>,
-<a name="l03859"></a>03859                iq,z_mean,z_sdv,z_mean/dispersion,z_sdv/dispersion);
-<a name="l03860"></a>03860     <span class="comment">//z_good = where(abs(g_diff-z_mean) <= 2*z_sdv);</span>
-<a name="l03861"></a>03861 
-<a name="l03862"></a>03862     check_nomsg(cpl_table_subtract_scalar(z_pos,<span class="stringliteral">"CHECK"</span>,z_mean));
-<a name="l03863"></a>03863     check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"CHECKW"</span>,z_pos,<span class="stringliteral">"CHECK"</span>));
-<a name="l03864"></a>03864     check_nomsg(cpl_table_multiply_columns(z_pos,<span class="stringliteral">"CHECKW"</span>,<span class="stringliteral">"CHECK"</span>));
-<a name="l03865"></a>03865     check_nomsg(cpl_table_power_column(z_pos,<span class="stringliteral">"CHECKW"</span>,0.5));
-<a name="l03866"></a>03866     check_nomsg(cpl_table_add_scalar(z_pos,<span class="stringliteral">"CHECK"</span>,z_mean));
-<a name="l03867"></a>03867     check_nomsg(cpl_table_and_selected_double(z_pos,<span class="stringliteral">"CHECKW"</span>,
-<a name="l03868"></a>03868                                               CPL_NOT_GREATER_THAN,2*z_sdv));
-<a name="l03869"></a>03869     sinfo_free_table(&z_good);
-<a name="l03870"></a>03870     check_nomsg(z_good=cpl_table_extract_selected(z_pos));
-<a name="l03871"></a>03871     <span class="comment">//sinfo_msg("ngood=%d",cpl_table_get_nrow(z_good));</span>
-<a name="l03872"></a>03872     check_nomsg(cpl_table_select_all(z_pos));
-<a name="l03873"></a>03873     <span class="comment">//z_mean = median(g_diff[z_good]);</span>
-<a name="l03874"></a>03874     <span class="comment">//z_sdv = stddev(g_diff[z_good]);</span>
-<a name="l03875"></a>03875     check_nomsg(z_mean = cpl_table_get_column_median(z_good,<span class="stringliteral">"WDIF"</span>));
-<a name="l03876"></a>03876     <span class="keywordflow">if</span>(nfit>1) {
-<a name="l03877"></a>03877     check_nomsg(z_sdv  = cpl_table_get_column_stdev(z_good,<span class="stringliteral">"WDIF"</span>));
-<a name="l03878"></a>03878     } <span class="keywordflow">else</span> {
-<a name="l03879"></a>03879       z_sdv=0;
-<a name="l03880"></a>03880     }
-<a name="l03881"></a>03881     sinfo_free_table(&z_good);
-<a name="l03882"></a>03882     check_nomsg(cpl_table_erase_column(z_pos,<span class="stringliteral">"CHECKW"</span>));
-<a name="l03883"></a>03883 
-<a name="l03884"></a>03884   }
-<a name="l03885"></a>03885   <span class="comment">/* do a poly fit of wdif versus wave*/</span>
-<a name="l03886"></a>03886   <span class="comment">/*</span>
-<a name="l03887"></a>03887 <span class="comment">  for (iq = 0; iq<3; iq++) {</span>
-<a name="l03888"></a>03888 <span class="comment">    // sinfo_msg("%d %f %f",iq,mean(zfit),zsdv);</span>
-<a name="l03889"></a>03889 <span class="comment">    par1 = poly_fit(g_lam[z_good],g_diff[z_good],poly_n);</span>
-<a name="l03890"></a>03890 <span class="comment">    z_fit = g_diff*0.;</span>
-<a name="l03891"></a>03891 <span class="comment">    for (ii=0;ii<poly_n) z_fit = z_fit + par1[ii]*g_lam^ii;</span>
-<a name="l03892"></a>03892 <span class="comment">    z_res = g_diff-z_fit;</span>
-<a name="l03893"></a>03893 <span class="comment">    z_sdv = stddev(z_res[zgood]);</span>
-<a name="l03894"></a>03894 <span class="comment">    z_good = where(abs(z_res) le 3*z_sdv);</span>
-<a name="l03895"></a>03895 <span class="comment">  }</span>
-<a name="l03896"></a>03896 <span class="comment">  */</span>
-<a name="l03897"></a>03897   cpl_table_select_all(z_pos);
-<a name="l03898"></a>03898   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"ZFIT"</span>,CPL_TYPE_DOUBLE));
-<a name="l03899"></a>03899   check_nomsg(nfit=cpl_table_get_nrow(z_pos));
-<a name="l03900"></a>03900   check_nomsg(cpl_table_fill_column_window(z_pos,<span class="stringliteral">"ZFIT"</span>,0,nfit,0));
-<a name="l03901"></a>03901   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span>
-<a name="l03902"></a>03902   <span class="comment">//                             "out_z_pos2.fits",CPL_IO_DEFAULT));</span>
-<a name="l03903"></a>03903   check_nomsg(z_good=cpl_table_duplicate(z_pos));
-<a name="l03904"></a>03904 
-<a name="l03905"></a>03905   <span class="comment">//Do a fit of a uniform function to the residuals line position differences</span>
-<a name="l03906"></a>03906   sinfo_msg(<span class="stringliteral">"ks-clip2"</span>);
-<a name="l03907"></a>03907   sinfo_msg(<span class="stringliteral">"iter mean (um) sdv (um) mean (pix) sdv (pix)"</span>);
-<a name="l03908"></a>03908   check_nomsg(cpl_table_select_all(z_good));
-<a name="l03909"></a>03909   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span>
-<a name="l03910"></a>03910   <span class="keywordflow">for</span>(iq=0;iq<XCOR_YSHIFT_KS_CLIP;iq++) {
-<a name="l03911"></a>03911     <span class="comment">//cpl_table_dump(z_pos,0,cpl_table_get_nrow(z_pos),stdout);</span>
-<a name="l03912"></a>03912     check_nomsg(nfit=cpl_table_get_nrow(z_good));
-<a name="l03913"></a>03913     <span class="comment">//sinfo_msg("nfit=%d",nfit);</span>
-<a name="l03914"></a>03914     <span class="keywordflow">if</span>(nfit>0) {
-<a name="l03915"></a>03915     check_nomsg(vx=cpl_vector_wrap(nfit,
-<a name="l03916"></a>03916                    cpl_table_get_data_double(z_good,<span class="stringliteral">"WAVE"</span>)));
-<a name="l03917"></a>03917     check_nomsg(vy=cpl_vector_wrap(nfit,
-<a name="l03918"></a>03918                    cpl_table_get_data_double(z_good,<span class="stringliteral">"WDIF"</span>)));
-<a name="l03919"></a>03919     check_nomsg(cfit=sinfo_polynomial_fit_1d_create(vx,vy,0,&mse));
-<a name="l03920"></a>03920     pows[0]=0;
-<a name="l03921"></a>03921     pows[1]=0;
-<a name="l03922"></a>03922     check_nomsg(zfit=cpl_polynomial_get_coeff(cfit,pows));
-<a name="l03923"></a>03923     sinfo_free_polynomial(&cfit);
-<a name="l03924"></a>03924     <span class="comment">//sinfo_msg("coeff 0=%g um %g pix",zfit,zfit/dispersion);</span>
-<a name="l03925"></a>03925 
-<a name="l03926"></a>03926     <span class="comment">//computes residuals=difference-fit and their standard deviation</span>
-<a name="l03927"></a>03927     <span class="comment">//and then do a kappa-sigma clip of outliers (out of 3 sigma)</span>
-<a name="l03928"></a>03928     check_nomsg(cpl_table_fill_column_window(z_good,<span class="stringliteral">"ZFIT"</span>,0,nfit,zfit));
-<a name="l03929"></a>03929     check_nomsg(cpl_table_duplicate_column(z_good,<span class="stringliteral">"WRES"</span>,z_good,<span class="stringliteral">"WDIF"</span>));
-<a name="l03930"></a>03930     check_nomsg(cpl_table_subtract_columns(z_good,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"ZFIT"</span>));
-<a name="l03931"></a>03931     <span class="keywordflow">if</span>(nfit>1) {
-<a name="l03932"></a>03932       <span class="comment">//sinfo_msg("nfit=%d",nfit);</span>
-<a name="l03933"></a>03933       <span class="comment">//cpl_table_dump(z_good,0,nfit,stdout);</span>
-<a name="l03934"></a>03934       check_nomsg(z_sdv=cpl_table_get_column_stdev(z_good,<span class="stringliteral">"WRES"</span>));
-<a name="l03935"></a>03935       <span class="comment">//sinfo_msg("z_sdv=%f",z_sdv);</span>
-<a name="l03936"></a>03936     } <span class="keywordflow">else</span> {
-<a name="l03937"></a>03937       z_sdv=0;
-<a name="l03938"></a>03938     }
-<a name="l03939"></a>03939     check_nomsg(z_mean=cpl_table_get_column_mean(z_good,<span class="stringliteral">"WDIF"</span>));
-<a name="l03940"></a>03940 
-<a name="l03941"></a>03941     sinfo_msg(<span class="stringliteral">"  %d  %3.2g   %3.2g  %5.4g     %5.4g"</span>,
-<a name="l03942"></a>03942               iq,z_mean,z_sdv,z_mean/dispersion,z_sdv/dispersion);
-<a name="l03943"></a>03943 
-<a name="l03944"></a>03944     check_nomsg(nfit=cpl_table_get_nrow(z_pos));
-<a name="l03945"></a>03945     check_nomsg(cpl_table_fill_column_window(z_pos,<span class="stringliteral">"ZFIT"</span>,0,nfit,zfit));
-<a name="l03946"></a>03946     check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"WRES"</span>,z_pos,<span class="stringliteral">"WDIF"</span>));
-<a name="l03947"></a>03947     check_nomsg(cpl_table_subtract_columns(z_pos,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"ZFIT"</span>));
-<a name="l03948"></a>03948 
-<a name="l03949"></a>03949     check_nomsg(cpl_table_multiply_columns(z_pos,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"WRES"</span>));
-<a name="l03950"></a>03950     check_nomsg(cpl_table_power_column(z_pos,<span class="stringliteral">"WRES"</span>,0.5));
-<a name="l03951"></a>03951     <span class="comment">//cpl_table_dump(z_pos,0,cpl_table_get_nrow(z_pos),stdout);</span>
-<a name="l03952"></a>03952     <span class="comment">/*</span>
-<a name="l03953"></a>03953 <span class="comment">    sinfo_msg("min=%g max=%g ndat=%d",</span>
-<a name="l03954"></a>03954 <span class="comment">              cpl_table_get_column_min(z_pos,"WRES"),</span>
-<a name="l03955"></a>03955 <span class="comment">              cpl_table_get_column_max(z_pos,"WRES"),</span>
-<a name="l03956"></a>03956 <span class="comment">              cpl_table_get_nrow(z_pos));</span>
-<a name="l03957"></a>03957 <span class="comment">    */</span>
-<a name="l03958"></a>03958     check_nomsg(cpl_table_and_selected_double(z_pos,<span class="stringliteral">"WRES"</span>,
-<a name="l03959"></a>03959                                               CPL_NOT_GREATER_THAN,3*z_sdv));
-<a name="l03960"></a>03960 
-<a name="l03961"></a>03961     check_nomsg(sinfo_free_table(&z_good));
-<a name="l03962"></a>03962     check_nomsg(z_good=cpl_table_extract_selected(z_pos));
-<a name="l03963"></a>03963 
-<a name="l03964"></a>03964 
-<a name="l03965"></a>03965     check_nomsg(cpl_table_select_all(z_pos));
-<a name="l03966"></a>03966     check_nomsg(cpl_table_select_all(z_good));
-<a name="l03967"></a>03967     check_nomsg(cpl_table_erase_column(z_good,<span class="stringliteral">"WRES"</span>));
-<a name="l03968"></a>03968     check_nomsg(cpl_table_erase_column(z_pos,<span class="stringliteral">"WRES"</span>));
-<a name="l03969"></a>03969 
-<a name="l03970"></a>03970     sinfo_unwrap_vector(&vx);
-<a name="l03971"></a>03971     sinfo_unwrap_vector(&vy);
-<a name="l03972"></a>03972 
-<a name="l03973"></a>03973     }
-<a name="l03974"></a>03974 
-<a name="l03975"></a>03975   }
-<a name="l03976"></a>03976   <span class="comment">//sinfo_msg(">>mean=%g",cpl_table_get_column_mean(z_good,"WDIF"));</span>
-<a name="l03977"></a>03977 
-<a name="l03978"></a>03978   <span class="comment">//check_nomsg(cpl_table_save(z_good,NULL,NULL,</span>
-<a name="l03979"></a>03979   <span class="comment">//                             "out_z_pos3.fits",CPL_IO_DEFAULT));</span>
-<a name="l03980"></a>03980   sinfo_unwrap_vector(&vx);
-<a name="l03981"></a>03981   sinfo_unwrap_vector(&vy);
-<a name="l03982"></a>03982   sinfo_free_polynomial(&cfit);
-<a name="l03983"></a>03983   sinfo_free_table(&z);
-<a name="l03984"></a>03984   sinfo_free_table(&z_pos);
-<a name="l03985"></a>03985   sinfo_free_table(&z_good);
-<a name="l03986"></a>03986 
-<a name="l03987"></a>03987 
-<a name="l03988"></a>03988   <span class="keywordflow">return</span> zfit;
-<a name="l03989"></a>03989  cleanup:
-<a name="l03990"></a>03990 
-<a name="l03991"></a>03991   sinfo_free_table(&z_good);
-<a name="l03992"></a>03992   sinfo_free_table(&z);
-<a name="l03993"></a>03993   sinfo_free_table(&z_diff);
-<a name="l03994"></a>03994   sinfo_free_table(&tmp_sky);
-<a name="l03995"></a>03995   sinfo_free_table(&z_pos);
-<a name="l03996"></a>03996   sinfo_unwrap_vector(&vw);
-<a name="l03997"></a>03997   sinfo_unwrap_vector(&vs);
-<a name="l03998"></a>03998   sinfo_unwrap_vector(&vo);
-<a name="l03999"></a>03999   sinfo_free_my_vector(&sx);
-<a name="l04000"></a>04000   sinfo_free_my_vector(&sy);
-<a name="l04001"></a>04001   sinfo_unwrap_vector(&vx);
-<a name="l04002"></a>04002   sinfo_unwrap_vector(&vy);
-<a name="l04003"></a>04003   sinfo_free_table(&w_tbl);
-<a name="l04004"></a>04004   sinfo_free_table(&s_tbl);
-<a name="l04005"></a>04005   sinfo_free_table(&o_tbl);
-<a name="l04006"></a>04006   sinfo_free_polynomial(&cfit);
-<a name="l04007"></a>04007 
-<a name="l04008"></a>04008   <span class="keywordflow">return</span> 0;
-<a name="l04009"></a>04009 
-<a name="l04010"></a>04010 
-<a name="l04011"></a>04011 }
-<a name="l04012"></a>04012 
-<a name="l04013"></a>04013 
-<a name="l04014"></a>04014 
-<a name="l04015"></a>04015 
-<a name="l04028"></a>04028 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l04029"></a>04029 sinfo_table_set_nan_out_min_max(cpl_table** t,
-<a name="l04030"></a>04030                                 <span class="keyword">const</span> <span class="keywordtype">char</span>* c,
-<a name="l04031"></a>04031                                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,
-<a name="l04032"></a>04032                                 <span class="keyword">const</span> <span class="keywordtype">double</span> max)
-<a name="l04033"></a>04033 
-<a name="l04034"></a>04034 {
-<a name="l04035"></a>04035 
-<a name="l04036"></a>04036   <span class="keywordtype">int</span> sz=0;
-<a name="l04037"></a>04037   <span class="keywordtype">int</span> i=0;
-<a name="l04038"></a>04038   <span class="keywordtype">double</span>* pt=NULL;
-<a name="l04039"></a>04039 
-<a name="l04040"></a>04040   check_nomsg(sz=cpl_table_get_nrow(*t));
-<a name="l04041"></a>04041   check_nomsg(pt=cpl_table_get_data_double(*t,c));
-<a name="l04042"></a>04042   <span class="keywordflow">for</span>(i=0;i<sz;i++) {
-<a name="l04043"></a>04043     <span class="keywordflow">if</span>(pt[i] < min || pt[i] > max) {
-<a name="l04044"></a>04044       check_nomsg(cpl_table_set_invalid(*t ,c,i));
-<a name="l04045"></a>04045     }
-<a name="l04046"></a>04046   }
-<a name="l04047"></a>04047 
-<a name="l04048"></a>04048   <span class="keywordflow">return</span> 0;
-<a name="l04049"></a>04049 
-<a name="l04050"></a>04050  cleanup:
-<a name="l04051"></a>04051 
-<a name="l04052"></a>04052   <span class="keywordflow">return</span> -1;
-<a name="l04053"></a>04053 
-<a name="l04054"></a>04054 
-<a name="l04055"></a>04055 }
-<a name="l04056"></a>04056 
-<a name="l04066"></a>04066 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l04067"></a>04067 sinfo_table_flag_nan(cpl_table** t,<span class="keyword">const</span> <span class="keywordtype">char</span>* label)
-<a name="l04068"></a>04068 {
-<a name="l04069"></a>04069 
-<a name="l04070"></a>04070   <span class="keywordtype">int</span> sz=0;
-<a name="l04071"></a>04071   <span class="keywordtype">int</span> i=0;
-<a name="l04072"></a>04072   <span class="keywordtype">double</span>* pt=NULL;
-<a name="l04073"></a>04073 
-<a name="l04074"></a>04074   check_nomsg(sz=cpl_table_get_nrow(*t));
-<a name="l04075"></a>04075   check_nomsg(pt=cpl_table_get_data_double(*t,label));
-<a name="l04076"></a>04076   <span class="keywordflow">for</span>(i=0;i<sz;i++) {
-<a name="l04077"></a>04077     <span class="keywordflow">if</span>(<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pt[i])) {
-<a name="l04078"></a>04078       check_nomsg(cpl_table_set_invalid(*t ,label,i));
-<a name="l04079"></a>04079     }
-<a name="l04080"></a>04080   }
-<a name="l04081"></a>04081 
-<a name="l04082"></a>04082   <span class="keywordflow">return</span> 0;
-<a name="l04083"></a>04083 
-<a name="l04084"></a>04084  cleanup:
-<a name="l04085"></a>04085 
-<a name="l04086"></a>04086   <span class="keywordflow">return</span> -1;
-<a name="l04087"></a>04087 }
-<a name="l04088"></a>04088 
-<a name="l04098"></a>04098 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l04099"></a>04099 sinfo_table_sky_obj_flag_nan(cpl_table** s,cpl_table** o, cpl_table** w)
-<a name="l04100"></a>04100 {
-<a name="l04101"></a>04101 
-<a name="l04102"></a>04102   <span class="keywordtype">int</span> no=0;
-<a name="l04103"></a>04103   <span class="keywordtype">int</span> ns=0;
-<a name="l04104"></a>04104   <span class="keywordtype">int</span> nw=0;
-<a name="l04105"></a>04105   <span class="keywordtype">int</span> ni=0;
-<a name="l04106"></a>04106 
-<a name="l04107"></a>04107   <span class="keywordtype">int</span> i=0;
-<a name="l04108"></a>04108   <span class="keywordtype">double</span>* po=NULL;
-<a name="l04109"></a>04109   <span class="keywordtype">double</span>* ps=NULL;
-<a name="l04110"></a>04110   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l04111"></a>04111 
-<a name="l04112"></a>04112   check_nomsg(no=cpl_table_get_nrow(*o));
-<a name="l04113"></a>04113   check_nomsg(ns=cpl_table_get_nrow(*s));
-<a name="l04114"></a>04114   check_nomsg(nw=cpl_table_get_nrow(*w));
-<a name="l04115"></a>04115   <span class="keywordflow">if</span>(no != ns || ns != nw || no != nw) {
-<a name="l04116"></a>04116     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"different input tables sizes"</span>);
-<a name="l04117"></a>04117     <span class="keywordflow">goto</span> cleanup;
-<a name="l04118"></a>04118   }
-<a name="l04119"></a>04119   check_nomsg(po=cpl_table_get_data_double(*o,<span class="stringliteral">"INT"</span>));
-<a name="l04120"></a>04120   check_nomsg(ps=cpl_table_get_data_double(*s,<span class="stringliteral">"INT"</span>));
-<a name="l04121"></a>04121   check_nomsg(pw=cpl_table_get_data_double(*w,<span class="stringliteral">"WAVE"</span>));
-<a name="l04122"></a>04122 
-<a name="l04123"></a>04123   <span class="keywordflow">for</span>(i=0;i<no;i++) {
-<a name="l04124"></a>04124     <span class="keywordflow">if</span>( (0==cpl_table_is_valid(*o,<span class="stringliteral">"INT"</span>,i)) ||
-<a name="l04125"></a>04125         <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(po[i]) || <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(ps[i]) || <a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pw[i]) ) {
-<a name="l04126"></a>04126       check_nomsg(cpl_table_set_invalid(*o ,<span class="stringliteral">"INT"</span>,i));
-<a name="l04127"></a>04127       check_nomsg(cpl_table_set_invalid(*s ,<span class="stringliteral">"INT"</span>,i));
-<a name="l04128"></a>04128       check_nomsg(cpl_table_set_invalid(*w ,<span class="stringliteral">"WAVE"</span>,i));
-<a name="l04129"></a>04129       <span class="comment">//sinfo_msg_debug("Flagged raw %d",i);</span>
-<a name="l04130"></a>04130       ni++;
-<a name="l04131"></a>04131     }
-<a name="l04132"></a>04132   }
-<a name="l04133"></a>04133 
-<a name="l04134"></a>04134   <span class="keywordflow">return</span> no-ni;
-<a name="l04135"></a>04135 
-<a name="l04136"></a>04136  cleanup:
-<a name="l04137"></a>04137 
-<a name="l04138"></a>04138   <span class="keywordflow">return</span> -1;
-<a name="l04139"></a>04139 }
-<a name="l04140"></a>04140 
-<a name="l04141"></a>04141 <span class="comment">/*</span>
-<a name="l04142"></a>04142 <span class="comment">static void</span>
-<a name="l04143"></a>04143 <span class="comment">sinfo_shift_sky(const int x,const int y)</span>
-<a name="l04144"></a>04144 <span class="comment">{</span>
-<a name="l04145"></a>04145 <span class="comment"></span>
-<a name="l04146"></a>04146 <span class="comment">  //To remove compilation warnings</span>
-<a name="l04147"></a>04147 <span class="comment">  ck0_nomsg(x);</span>
-<a name="l04148"></a>04148 <span class="comment">  ck0_nomsg(y);</span>
-<a name="l04149"></a>04149 <span class="comment"></span>
-<a name="l04150"></a>04150 <span class="comment">  // shift sky spectrum of a given amount</span>
-<a name="l04151"></a>04151 <span class="comment">  if (max(abs(z_fit))/cdelts < 0.01) {</span>
-<a name="l04152"></a>04152 <span class="comment">    sinfo_msg("shift <0.01 pixels will not be applied");</span>
-<a name="l04153"></a>04153 <span class="comment">  } else {</span>
-<a name="l04154"></a>04154 <span class="comment">    sinfo_msg("shifting sky cube by mean of %f pix wrt object",</span>
-<a name="l04155"></a>04155 <span class="comment">             cpl_table_column_mean(z_fit,"VALUE")/cdelto);</span>
-<a name="l04156"></a>04156 <span class="comment">    sinfo_msg("this will take a couple of minutes...");</span>
-<a name="l04157"></a>04157 <span class="comment">    z_good = where(finite(int_sky));</span>
-<a name="l04158"></a>04158 <span class="comment">    new_sky = spline(lambda[z_good]-z_mean,int_sky[z_good],lambda);</span>
-<a name="l04159"></a>04159 <span class="comment">    int_sky = new_sky;</span>
-<a name="l04160"></a>04160 <span class="comment">    sky_out = dblarr(xsize,ysize,zsize) + !values.f_nan;</span>
-<a name="l04161"></a>04161 <span class="comment">    for (ix=0; ix<xsize;ix++) {</span>
-<a name="l04162"></a>04162 <span class="comment">      for (iy=0;iy<ysize;iy++) {</span>
-<a name="l04163"></a>04163 <span class="comment">    old_sky = reform(sky[ix,iy,*]);</span>
-<a name="l04164"></a>04164 <span class="comment">    z_good = where(finite(old_sky),z_good_i);</span>
-<a name="l04165"></a>04165 <span class="comment">    if (z_good_i > 0) {</span>
-<a name="l04166"></a>04166 <span class="comment">          new_sky= spline(lambda[z_good]-z_fit[z_good],old_sky[z_good],lambda);</span>
-<a name="l04167"></a>04167 <span class="comment">          new_fin= where(finite(new_sky,/infinity) ||</span>
-<a name="l04168"></a>04168 <span class="comment">                          finite(old_sky,/nan),newfin_i);</span>
-<a name="l04169"></a>04169 <span class="comment">      if (new_fin_i > 0) new_sky[new_fin] = !values.f_nan;</span>
-<a name="l04170"></a>04170 <span class="comment">      sky_out[ix,iy,*] = new_sky;</span>
-<a name="l04171"></a>04171 <span class="comment">    }</span>
-<a name="l04172"></a>04172 <span class="comment">      }</span>
-<a name="l04173"></a>04173 <span class="comment">    }</span>
-<a name="l04174"></a>04174 <span class="comment">    sky = sky_out;</span>
-<a name="l04175"></a>04175 <span class="comment">  }</span>
-<a name="l04176"></a>04176 <span class="comment"> cleanup:</span>
-<a name="l04177"></a>04177 <span class="comment">  return;</span>
-<a name="l04178"></a>04178 <span class="comment"></span>
-<a name="l04179"></a>04179 <span class="comment">}</span>
-<a name="l04180"></a>04180 <span class="comment">  */</span>
-<a name="l04207"></a>04207 <span class="keywordtype">void</span>
-<a name="l04208"></a>04208 sinfo_optimise_sky_sub(<span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l04209"></a>04209                        <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw,
-<a name="l04210"></a>04210                        <span class="keyword">const</span> <span class="keywordtype">int</span> method,
-<a name="l04211"></a>04211                        <span class="keyword">const</span> <span class="keywordtype">int</span> do_rot,
-<a name="l04212"></a>04212                        cpl_table* lrange,
-<a name="l04213"></a>04213                        cpl_table* lambda,
-<a name="l04214"></a>04214                        cpl_table* lr41,
-<a name="l04215"></a>04215                        cpl_table* lr52,
-<a name="l04216"></a>04216                        cpl_table* lr63,
-<a name="l04217"></a>04217                        cpl_table* lr74,
-<a name="l04218"></a>04218                        cpl_table* lr02,
-<a name="l04219"></a>04219                        cpl_table* lr85,
-<a name="l04220"></a>04220                        cpl_table* lr20,
-<a name="l04221"></a>04221                        cpl_table* lr31,
-<a name="l04222"></a>04222                        cpl_table* lr42,
-<a name="l04223"></a>04223                        cpl_table* lr53,
-<a name="l04224"></a>04224                        cpl_table* lr64,
-<a name="l04225"></a>04225                        cpl_table* lr75,
-<a name="l04226"></a>04226                        cpl_table* lr86,
-<a name="l04227"></a>04227                        cpl_table* lr97,
-<a name="l04228"></a>04228                        cpl_table* lr00,
-<a name="l04229"></a>04229                        cpl_table** int_obj,
-<a name="l04230"></a>04230                        cpl_table** int_sky,
-<a name="l04231"></a>04231                        cpl_table** rscale)
-<a name="l04232"></a>04232 
-<a name="l04233"></a>04233 {
-<a name="l04234"></a>04234 
-<a name="l04235"></a>04235   <span class="keywordtype">int</span> npixw=2*line_hw; <span class="comment">//full width in pixels of unresolved emission line</span>
-<a name="l04236"></a>04236   cpl_array* do_hk=NULL;
-<a name="l04237"></a>04237   cpl_array* rfit=NULL;
-<a name="l04238"></a>04238   <span class="keywordtype">int</span> i=0;
-<a name="l04239"></a>04239   cpl_table* sky_lr=NULL;
-<a name="l04240"></a>04240   cpl_table* obj_lr=NULL;
-<a name="l04241"></a>04241   cpl_table* wav_lr=NULL;
-<a name="l04242"></a>04242   <span class="keywordtype">double</span> sky_med=0;
-<a name="l04243"></a>04243   <span class="keywordtype">double</span> sky_sdv=0;
-<a name="l04244"></a>04244   <span class="keywordtype">int</span> lr41_i=0;
-<a name="l04245"></a>04245   <span class="keywordtype">int</span> lr52_i=0;
-<a name="l04246"></a>04246   <span class="keywordtype">int</span> lr63_i=0;
-<a name="l04247"></a>04247   <span class="keywordtype">int</span> lr74_i=0;
-<a name="l04248"></a>04248   <span class="keywordtype">int</span> lr02_i=0;
-<a name="l04249"></a>04249   <span class="keywordtype">int</span> lr85_i=0;
-<a name="l04250"></a>04250   <span class="keywordtype">int</span> lr20_i=0;
-<a name="l04251"></a>04251   <span class="keywordtype">int</span> lr31_i=0;
-<a name="l04252"></a>04252   <span class="keywordtype">int</span> lr42_i=0;
-<a name="l04253"></a>04253   <span class="keywordtype">int</span> lr53_i=0;
-<a name="l04254"></a>04254   <span class="keywordtype">int</span> lr64_i=0;
-<a name="l04255"></a>04255   <span class="keywordtype">int</span> lr75_i=0;
-<a name="l04256"></a>04256   <span class="keywordtype">int</span> lr86_i=0;
-<a name="l04257"></a>04257   <span class="keywordtype">int</span> lr97_i=0;
-<a name="l04258"></a>04258   <span class="keywordtype">int</span> lr00_i=0;
-<a name="l04259"></a>04259 
-<a name="l04260"></a>04260   <span class="keywordtype">int</span> xxx1_i=0;
-<a name="l04261"></a>04261   <span class="keywordtype">int</span> status=0;
-<a name="l04262"></a>04262   <span class="keywordtype">int</span> finite_pix_i=0;
-<a name="l04263"></a>04263   <span class="keywordtype">double</span> sky_thresh=0.;
-<a name="l04264"></a>04264 
-<a name="l04265"></a>04265   cpl_table* rat_sky=NULL;
-<a name="l04266"></a>04266 
-<a name="l04267"></a>04267   cpl_table* xxx1=NULL;
-<a name="l04268"></a>04268   cpl_table* xxx2=NULL;
-<a name="l04269"></a>04269   cpl_table* xxx1_sub=NULL;
-<a name="l04270"></a>04270   cpl_table* line_regions=NULL;
-<a name="l04271"></a>04271   cpl_table* cont_regions=NULL;
-<a name="l04272"></a>04272   <span class="keywordtype">int</span> line_i=0;
-<a name="l04273"></a>04273   <span class="keywordtype">int</span> cont_i=0;
-<a name="l04274"></a>04274   <span class="keywordtype">double</span> fmed=0;
-<a name="l04275"></a>04275   <span class="keywordtype">double</span> fsdv=0;
-<a name="l04276"></a>04276   cpl_table* fline_res=NULL;
-<a name="l04277"></a>04277   <span class="keywordtype">int</span> fclip_i=0;
-<a name="l04278"></a>04278   <span class="keywordtype">int</span> fline_i=0;
-<a name="l04279"></a>04279   cpl_table* rscale0=NULL;
-<a name="l04280"></a>04280   <span class="keywordtype">double</span> r=0;
-<a name="l04281"></a>04281   cpl_table* obj_cont=NULL;
-<a name="l04282"></a>04282   cpl_table* sky_cont=NULL;
-<a name="l04283"></a>04283   cpl_table* obj_line=NULL;
-<a name="l04284"></a>04284   cpl_table* sky_line=NULL;
-<a name="l04285"></a>04285 
-<a name="l04286"></a>04286 
-<a name="l04287"></a>04287   <span class="comment">//Rotational parameters</span>
-<a name="l04288"></a>04288   <span class="keywordtype">int</span> low_pos_i=0;
-<a name="l04289"></a>04289   <span class="keywordtype">int</span> med_pos_i=0;
-<a name="l04290"></a>04290   <span class="keywordtype">int</span> hi_pos_i=0;
-<a name="l04291"></a>04291 
-<a name="l04292"></a>04292   cpl_table* finite_pix=NULL;
-<a name="l04293"></a>04293   cpl_table* tmp_tbl=NULL;
-<a name="l04294"></a>04294 
-<a name="l04295"></a>04295   cpl_table* low_scale=NULL;
-<a name="l04296"></a>04296   cpl_table* med_scale=NULL;
-<a name="l04297"></a>04297   cpl_table* hi_regions=NULL;
-<a name="l04298"></a>04298 
-<a name="l04299"></a>04299   cpl_table* low_regions=NULL;
-<a name="l04300"></a>04300   cpl_table* med_regions=NULL;
-<a name="l04301"></a>04301 
-<a name="l04302"></a>04302 
-<a name="l04303"></a>04303   cpl_table* low_pos=NULL;
-<a name="l04304"></a>04304   cpl_table* med_pos=NULL;
-<a name="l04305"></a>04305   cpl_table* hi_pos=NULL;
-<a name="l04306"></a>04306   cpl_table* llr_xxx1=NULL;
-<a name="l04307"></a>04307 
-<a name="l04308"></a>04308   <span class="keywordtype">double</span> rhi=0;
-<a name="l04309"></a>04309   <span class="keywordtype">double</span> rmed=0;
-<a name="l04310"></a>04310   <span class="keywordtype">double</span> rlow=0;
-<a name="l04311"></a>04311 
-<a name="l04312"></a>04312   <span class="keywordtype">double</span> min_lrange=0;
-<a name="l04313"></a>04313   <span class="keywordtype">double</span> max_lrange=0;
-<a name="l04314"></a>04314 
-<a name="l04315"></a>04315   <span class="keywordtype">int</span> nrow=0;
-<a name="l04316"></a>04316 
-<a name="l04317"></a>04317 
-<a name="l04318"></a>04318   <span class="keywordtype">double</span> w_rot_low[NROT]={1.00852,1.03757,1.09264,1.15388,1.22293,
-<a name="l04319"></a>04319                           1.30216,1.45190,1.52410,1.60308,1.69037,
-<a name="l04320"></a>04320                           1.78803,2.02758,2.18023,1.02895,1.08343,
-<a name="l04321"></a>04321                           1.14399,1.21226,1.29057,1.43444,1.50555,
-<a name="l04322"></a>04322                           1.58333,1.66924,1.76532,2.00082,2.15073};
-<a name="l04323"></a>04323 
-<a name="l04324"></a>04324 
-<a name="l04325"></a>04325   <span class="keywordtype">double</span> w_rot_med[NROT]={1.00282,1.02139,1.04212,1.07539,1.09753,
-<a name="l04326"></a>04326                           1.13542,1.15917,1.20309,1.22870,1.28070,
-<a name="l04327"></a>04327                           1.30853,1.41861,1.46048,1.48877,1.53324,
-<a name="l04328"></a>04328                           1.56550,1.61286,1.65024,1.70088,1.74500,
-<a name="l04329"></a>04329                           1.79940,1.97719,2.04127,2.12496,2.19956};
-<a name="l04330"></a>04330 
-<a name="l04331"></a>04331 
-<a name="l04332"></a>04332 
-<a name="l04333"></a>04333   check_nomsg(do_hk = cpl_array_new(NBOUND+1,CPL_TYPE_INT));
-<a name="l04334"></a>04334   check_nomsg(rfit  = cpl_array_new(NBOUND+1,CPL_TYPE_DOUBLE));
-<a name="l04335"></a>04335 
-<a name="l04336"></a>04336   lr41_i=cpl_table_get_nrow(lr41);
-<a name="l04337"></a>04337   lr52_i=cpl_table_get_nrow(lr52);
-<a name="l04338"></a>04338   lr63_i=cpl_table_get_nrow(lr63);
-<a name="l04339"></a>04339   lr74_i=cpl_table_get_nrow(lr74);
-<a name="l04340"></a>04340   lr02_i=cpl_table_get_nrow(lr02);
-<a name="l04341"></a>04341   lr85_i=cpl_table_get_nrow(lr85);
-<a name="l04342"></a>04342   lr20_i=cpl_table_get_nrow(lr20);
-<a name="l04343"></a>04343   lr31_i=cpl_table_get_nrow(lr31);
-<a name="l04344"></a>04344   lr42_i=cpl_table_get_nrow(lr42);
-<a name="l04345"></a>04345   lr53_i=cpl_table_get_nrow(lr53);
-<a name="l04346"></a>04346   lr64_i=cpl_table_get_nrow(lr64);
-<a name="l04347"></a>04347   lr75_i=cpl_table_get_nrow(lr75);
-<a name="l04348"></a>04348   lr86_i=cpl_table_get_nrow(lr86);
-<a name="l04349"></a>04349   lr97_i=cpl_table_get_nrow(lr97);
-<a name="l04350"></a>04350   check_nomsg(lr00_i=cpl_table_get_nrow(lr00));
-<a name="l04351"></a>04351 
-<a name="l04352"></a>04352   cpl_array_set_int(do_hk,0,lr41_i);
-<a name="l04353"></a>04353   cpl_array_set_int(do_hk,1,lr52_i);
-<a name="l04354"></a>04354   cpl_array_set_int(do_hk,2,lr63_i);
-<a name="l04355"></a>04355   cpl_array_set_int(do_hk,3,lr74_i);
-<a name="l04356"></a>04356   cpl_array_set_int(do_hk,4,lr02_i);
-<a name="l04357"></a>04357   cpl_array_set_int(do_hk,5,lr85_i);
-<a name="l04358"></a>04358   cpl_array_set_int(do_hk,6,lr20_i);
-<a name="l04359"></a>04359   cpl_array_set_int(do_hk,7,lr31_i);
-<a name="l04360"></a>04360   cpl_array_set_int(do_hk,8,lr42_i);
-<a name="l04361"></a>04361   cpl_array_set_int(do_hk,9,lr53_i);
-<a name="l04362"></a>04362   cpl_array_set_int(do_hk,10,lr64_i);
-<a name="l04363"></a>04363   cpl_array_set_int(do_hk,11,lr75_i);
-<a name="l04364"></a>04364   cpl_array_set_int(do_hk,12,lr86_i);
-<a name="l04365"></a>04365   cpl_array_set_int(do_hk,13,lr97_i);
-<a name="l04366"></a>04366   check_nomsg(cpl_array_set_int(do_hk,14,lr00_i));
-<a name="l04367"></a>04367 
-<a name="l04368"></a>04368   check_nomsg(rscale0=cpl_table_duplicate(*int_sky));
-<a name="l04369"></a>04369   check_nomsg(cpl_table_new_column(rscale0,<span class="stringliteral">"RATIO"</span>,CPL_TYPE_DOUBLE));
-<a name="l04370"></a>04370   check_nomsg(nrow=cpl_table_get_nrow(rscale0));
-<a name="l04371"></a>04371   check_nomsg(cpl_table_fill_column_window(rscale0,<span class="stringliteral">"RATIO"</span>,0,nrow,0));
-<a name="l04372"></a>04372 
-<a name="l04373"></a>04373   <span class="comment">// For each range extract proper: obj, sky, wave spectra</span>
-<a name="l04374"></a>04374   <span class="keywordflow">for</span> (i=0;i<NBOUND+1;i++) {
-<a name="l04375"></a>04375     <span class="keywordflow">if</span> (cpl_array_get_int(do_hk,i,&status) > 0) {
-<a name="l04376"></a>04376 
-<a name="l04377"></a>04377 
-<a name="l04378"></a>04378       <span class="keywordflow">switch</span>(i) {
-<a name="l04379"></a>04379 
-<a name="l04380"></a>04380 
-<a name="l04381"></a>04381       <span class="keywordflow">case</span> 0:
-<a name="l04382"></a>04382         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr41,wtol,
-<a name="l04383"></a>04383                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04384"></a>04384     <span class="keywordflow">break</span>;
-<a name="l04385"></a>04385 
-<a name="l04386"></a>04386       <span class="keywordflow">case</span> 1:
-<a name="l04387"></a>04387         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr52,wtol,
-<a name="l04388"></a>04388                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04389"></a>04389     <span class="keywordflow">break</span>;
-<a name="l04390"></a>04390 
-<a name="l04391"></a>04391       <span class="keywordflow">case</span> 2:
-<a name="l04392"></a>04392         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr63,wtol,
-<a name="l04393"></a>04393                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04394"></a>04394     <span class="keywordflow">break</span>;
-<a name="l04395"></a>04395 
-<a name="l04396"></a>04396       <span class="keywordflow">case</span> 3:
-<a name="l04397"></a>04397         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr74,wtol,
-<a name="l04398"></a>04398                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04399"></a>04399     <span class="keywordflow">break</span>;
-<a name="l04400"></a>04400 
-<a name="l04401"></a>04401       <span class="keywordflow">case</span> 4:
-<a name="l04402"></a>04402         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr02,wtol,
-<a name="l04403"></a>04403                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04404"></a>04404     <span class="keywordflow">break</span>;
-<a name="l04405"></a>04405 
-<a name="l04406"></a>04406       <span class="keywordflow">case</span> 5:
-<a name="l04407"></a>04407         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr85,wtol,
-<a name="l04408"></a>04408                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04409"></a>04409     <span class="keywordflow">break</span>;
-<a name="l04410"></a>04410       <span class="keywordflow">case</span> 6:
-<a name="l04411"></a>04411         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr20,wtol,
-<a name="l04412"></a>04412                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04413"></a>04413     <span class="keywordflow">break</span>;
-<a name="l04414"></a>04414       <span class="keywordflow">case</span> 7:
-<a name="l04415"></a>04415         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr31,wtol,
-<a name="l04416"></a>04416                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04417"></a>04417     <span class="keywordflow">break</span>;
-<a name="l04418"></a>04418       <span class="keywordflow">case</span> 8:
-<a name="l04419"></a>04419         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr42,wtol,
-<a name="l04420"></a>04420                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04421"></a>04421     <span class="keywordflow">break</span>;
-<a name="l04422"></a>04422       <span class="keywordflow">case</span> 9:
-<a name="l04423"></a>04423         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr53,wtol,
-<a name="l04424"></a>04424                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04425"></a>04425     <span class="keywordflow">break</span>;
-<a name="l04426"></a>04426       <span class="keywordflow">case</span> 10:
-<a name="l04427"></a>04427         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr64,wtol,
-<a name="l04428"></a>04428                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04429"></a>04429     <span class="keywordflow">break</span>;
-<a name="l04430"></a>04430       <span class="keywordflow">case</span> 11:
-<a name="l04431"></a>04431         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr75,wtol,
-<a name="l04432"></a>04432                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04433"></a>04433     <span class="keywordflow">break</span>;
-<a name="l04434"></a>04434       <span class="keywordflow">case</span> 12:
-<a name="l04435"></a>04435         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr86,wtol,
-<a name="l04436"></a>04436                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04437"></a>04437     <span class="keywordflow">break</span>;
-<a name="l04438"></a>04438       <span class="keywordflow">case</span> 13:
-<a name="l04439"></a>04439         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr97,wtol,
-<a name="l04440"></a>04440                         &obj_lr,&sky_lr,&wav_lr));
-<a name="l04441"></a>04441     <span class="keywordflow">break</span>;
-<a name="l04442"></a>04442       <span class="keywordflow">case</span> 14:
-<a name="l04443"></a>04443          ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr00,
-<a name="l04444"></a>04444                          wtol,&obj_lr,&sky_lr,&wav_lr));
-<a name="l04445"></a>04445      <span class="keywordflow">break</span>;
-<a name="l04446"></a>04446       <span class="keywordflow">default</span>:
-<a name="l04447"></a>04447         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);
-<a name="l04448"></a>04448     <span class="keywordflow">goto</span> cleanup;
-<a name="l04449"></a>04449       }
-<a name="l04450"></a>04450       <span class="keywordflow">if</span>(sky_lr == NULL || obj_lr == NULL || wav_lr == NULL) {
-<a name="l04451"></a>04451     finite_pix_i=0;
-<a name="l04452"></a>04452         sinfo_msg(<span class="stringliteral">"no good pix left"</span>);
-<a name="l04453"></a>04453       } <span class="keywordflow">else</span> {
-<a name="l04454"></a>04454     <span class="comment">//AMO: the following 2 seems to be critical for robustness</span>
-<a name="l04455"></a>04455     <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,"out_skylr0.fits",</span>
-<a name="l04456"></a>04456     <span class="comment">//             CPL_IO_DEFAULT));</span>
-<a name="l04457"></a>04457     <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,"out_objlr0.fits",</span>
-<a name="l04458"></a>04458     <span class="comment">//             CPL_IO_DEFAULT));</span>
-<a name="l04459"></a>04459     <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,"out_wavlr0.fits",</span>
-<a name="l04460"></a>04460     <span class="comment">//             CPL_IO_DEFAULT));</span>
-<a name="l04461"></a>04461 
-<a name="l04462"></a>04462 
-<a name="l04463"></a>04463 
-<a name="l04464"></a>04464     check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(&sky_lr,
-<a name="l04465"></a>04465                                                               &obj_lr,
-<a name="l04466"></a>04466                                                               &wav_lr));
-<a name="l04467"></a>04467 
-<a name="l04468"></a>04468 
-<a name="l04469"></a>04469       }
-<a name="l04470"></a>04470 
-<a name="l04471"></a>04471 
-<a name="l04472"></a>04472       <span class="keywordflow">if</span> (finite_pix_i > npixw) {
-<a name="l04473"></a>04473         <span class="comment">// identify sky lines</span>
-<a name="l04474"></a>04474         <span class="comment">//sinfo_msg("finite_pix_i=%d",finite_pix_i);</span>
-<a name="l04475"></a>04475         check_nomsg(cpl_table_erase_invalid(obj_lr));
-<a name="l04476"></a>04476     check_nomsg(cpl_table_erase_invalid(sky_lr));
-<a name="l04477"></a>04477     check_nomsg(cpl_table_erase_invalid(wav_lr));
-<a name="l04478"></a>04478 
-<a name="l04479"></a>04479 
-<a name="l04480"></a>04480     check_nomsg(sky_med=cpl_table_get_column_median(sky_lr,<span class="stringliteral">"INT"</span>));
-<a name="l04481"></a>04481     check_nomsg(sky_sdv=cpl_table_get_column_stdev(sky_lr,<span class="stringliteral">"INT"</span>));
-<a name="l04482"></a>04482         check_nomsg(cpl_table_select_all(sky_lr));
-<a name="l04483"></a>04483         sky_thresh=sky_med+sky_sdv;
-<a name="l04484"></a>04484         <span class="comment">//sinfo_msg("sky_thresh=%f",sky_thresh);</span>
-<a name="l04485"></a>04485         check_nomsg(xxx1_i=cpl_table_and_selected_double(sky_lr,<span class="stringliteral">"INT"</span>,
-<a name="l04486"></a>04486                            CPL_GREATER_THAN,sky_thresh));
-<a name="l04487"></a>04487     check_nomsg(xxx1 = cpl_table_extract_selected(sky_lr));
-<a name="l04488"></a>04488         check_nomsg(cpl_table_select_all(sky_lr));
-<a name="l04489"></a>04489 
-<a name="l04490"></a>04490     <span class="keywordflow">if</span> (xxx1_i > 0) {
-<a name="l04491"></a>04491       <span class="comment">//separate line and continuum regions</span>
-<a name="l04492"></a>04492           <span class="comment">//by convolving with a hat region of large as a line</span>
-<a name="l04493"></a>04493           <span class="comment">//sinfo_msg("xxx1_i=%d",xxx1_i);</span>
-<a name="l04494"></a>04494       check_nomsg(xxx2 = cpl_table_duplicate(sky_lr));
-<a name="l04495"></a>04495           <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,</span>
-<a name="l04496"></a>04496           <span class="comment">//                           "out_skylr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04497"></a>04497           <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span>
-<a name="l04498"></a>04498           <span class="comment">//                             "out_objlr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04499"></a>04499           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04500"></a>04500           <span class="comment">//                             "out_xxx2_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04501"></a>04501           ck0_nomsg(sinfo_table_threshold(&xxx2,<span class="stringliteral">"INT"</span>,sky_thresh,
-<a name="l04502"></a>04502                                           sky_thresh,0.,10.));
-<a name="l04503"></a>04503           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04504"></a>04504           <span class="comment">//                             "out_xxx2_1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04505"></a>04505 
-<a name="l04506"></a>04506 
-<a name="l04507"></a>04507           <span class="comment">/* TODO</span>
-<a name="l04508"></a>04508 <span class="comment">      xxx2[xxx1] = 10.;</span>
-<a name="l04509"></a>04509 <span class="comment">      */</span>
-<a name="l04510"></a>04510           <span class="comment">//sinfo_msg("npixw/2=%d",npixw);</span>
-<a name="l04511"></a>04511       check_nomsg(sinfo_convolve_kernel(&xxx2,npixw/2));
-<a name="l04512"></a>04512           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04513"></a>04513           <span class="comment">//                             "out_xxx2_2.fits",CPL_IO_DEFAULT));</span>
-<a name="l04514"></a>04514 
-<a name="l04515"></a>04515           <span class="comment">// get line_regions</span>
-<a name="l04516"></a>04516           check_nomsg(line_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,
-<a name="l04517"></a>04517                                                          CPL_GREATER_THAN,0));
-<a name="l04518"></a>04518 
-<a name="l04519"></a>04519           check_nomsg(line_regions=cpl_table_extract_selected(xxx2));
-<a name="l04520"></a>04520 
-<a name="l04521"></a>04521           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span>
-<a name="l04522"></a>04522           <span class="comment">//"out_line_regions.fits",CPL_IO_DEFAULT));</span>
-<a name="l04523"></a>04523 
-<a name="l04524"></a>04524       check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));
-<a name="l04525"></a>04525       check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"CNV"</span>));
-<a name="l04526"></a>04526 
-<a name="l04527"></a>04527           check_nomsg(cpl_table_select_all(xxx2));
-<a name="l04528"></a>04528 
-<a name="l04529"></a>04529           <span class="comment">// get cont_regions</span>
-<a name="l04530"></a>04530           check_nomsg(cont_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,
-<a name="l04531"></a>04531                                                            CPL_EQUAL_TO,0));
-<a name="l04532"></a>04532           check_nomsg(cont_regions=cpl_table_extract_selected(xxx2));
-<a name="l04533"></a>04533 
-<a name="l04534"></a>04534           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span>
-<a name="l04535"></a>04535           <span class="comment">//"out_cont_regions.fits",CPL_IO_DEFAULT));</span>
-<a name="l04536"></a>04536 
-<a name="l04537"></a>04537       check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"INT"</span>));
-<a name="l04538"></a>04538       check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"CNV"</span>));
-<a name="l04539"></a>04539           check_nomsg(cpl_table_select_all(xxx2));
-<a name="l04540"></a>04540       sinfo_free_table(&xxx2);
-<a name="l04541"></a>04541 
-<a name="l04542"></a>04542 
-<a name="l04543"></a>04543       <span class="keywordflow">if</span> (line_i >= 3 && cont_i >= 3) {
-<a name="l04544"></a>04544             <span class="comment">//If we have enough line points and continuum points</span>
-<a name="l04545"></a>04545              <span class="comment">//sinfo_msg("line_i=%d cont_i=%d",line_i,cont_i);</span>
-<a name="l04546"></a>04546         <span class="keywordflow">if</span> (i == 0) sinfo_msg(<span class="stringliteral">"optimising 4-1 transitions"</span>);
-<a name="l04547"></a>04547             <span class="keywordflow">if</span> (i == 1) sinfo_msg(<span class="stringliteral">"optimising 5-2 transitions"</span>);
-<a name="l04548"></a>04548             <span class="keywordflow">if</span> (i == 2) sinfo_msg(<span class="stringliteral">"optimising 6-3 transitions"</span>);
-<a name="l04549"></a>04549             <span class="keywordflow">if</span> (i == 3) sinfo_msg(<span class="stringliteral">"optimising 7-4 transitions"</span>);
-<a name="l04550"></a>04550             <span class="keywordflow">if</span> (i == 4) sinfo_msg(<span class="stringliteral">"optimising 0-2 transitions"</span>);
-<a name="l04551"></a>04551             <span class="keywordflow">if</span> (i == 5) sinfo_msg(<span class="stringliteral">"optimising 8-5 transitions"</span>);
-<a name="l04552"></a>04552             <span class="keywordflow">if</span> (i == 6) sinfo_msg(<span class="stringliteral">"optimising 2-0 transitions"</span>);
-<a name="l04553"></a>04553             <span class="keywordflow">if</span> (i == 7) sinfo_msg(<span class="stringliteral">"optimising 3-1 transitions"</span>);
-<a name="l04554"></a>04554             <span class="keywordflow">if</span> (i == 8) sinfo_msg(<span class="stringliteral">"optimising 4-2 transitions"</span>);
-<a name="l04555"></a>04555             <span class="keywordflow">if</span> (i == 9) sinfo_msg(<span class="stringliteral">"optimising 5-3 transitions"</span>);
-<a name="l04556"></a>04556             <span class="keywordflow">if</span> (i == 10) sinfo_msg(<span class="stringliteral">"optimising 6-4 transitions"</span>);
-<a name="l04557"></a>04557             <span class="keywordflow">if</span> (i == 11) sinfo_msg(<span class="stringliteral">"optimising 7-5 transitions"</span>);
-<a name="l04558"></a>04558             <span class="keywordflow">if</span> (i == 12) sinfo_msg(<span class="stringliteral">"optimising 8-6 transitions"</span>);
-<a name="l04559"></a>04559             <span class="keywordflow">if</span> (i == 13) sinfo_msg(<span class="stringliteral">"optimising 9-7 transitions"</span>);
-<a name="l04560"></a>04560             <span class="keywordflow">if</span> (i == 14) sinfo_msg(<span class="stringliteral">"optimising final bit"</span>);
-<a name="l04561"></a>04561         <span class="comment">// Fit the object profile='fline_res' of the sky line residuals</span>
-<a name="l04562"></a>04562             <span class="comment">// left after proper scaled sky spectrum lines (and continua)</span>
-<a name="l04563"></a>04563             <span class="comment">// subtraction. Then determines median and stdev to flag outliers</span>
-<a name="l04564"></a>04564 
-<a name="l04565"></a>04565         <span class="comment">//Free memory for each loop</span>
-<a name="l04566"></a>04566             sinfo_free_table(&obj_cont);
-<a name="l04567"></a>04567             sinfo_free_table(&sky_cont);
-<a name="l04568"></a>04568             sinfo_free_table(&sky_line);
-<a name="l04569"></a>04569             sinfo_free_table(&obj_line);
-<a name="l04570"></a>04570         <span class="comment">//Identify obj lines and continuum, same for sky</span>
-<a name="l04571"></a>04571             cknull_nomsg(obj_line=sinfo_table_select_range(obj_lr,line_regions,
-<a name="l04572"></a>04572                                   wtol));
-<a name="l04573"></a>04573 
-<a name="l04574"></a>04574 
-<a name="l04575"></a>04575             cknull_nomsg(sky_line=sinfo_table_select_range(sky_lr,line_regions,
-<a name="l04576"></a>04576                                   wtol));
-<a name="l04577"></a>04577             cknull_nomsg(obj_cont=sinfo_table_select_range(obj_lr,cont_regions,
-<a name="l04578"></a>04578                                   wtol));
-<a name="l04579"></a>04579              cknull_nomsg(sky_cont=sinfo_table_select_range(sky_lr,cont_regions,
-<a name="l04580"></a>04580                                   wtol));
-<a name="l04581"></a>04581 
-<a name="l04582"></a>04582         <span class="comment">//Here was commented</span>
-<a name="l04583"></a>04583             <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span>
-<a name="l04584"></a>04584             <span class="comment">//            "out_line.fits",CPL_IO_DEFAULT));</span>
-<a name="l04585"></a>04585             <span class="comment">//check_nomsg(cpl_table_save(cont_regions,NULL,NULL,</span>
-<a name="l04586"></a>04586             <span class="comment">//            "out_cont.fits",CPL_IO_DEFAULT));</span>
-<a name="l04587"></a>04587             <span class="comment">//check_nomsg(cpl_table_save(obj_cont,NULL,NULL,</span>
-<a name="l04588"></a>04588             <span class="comment">//            "out_obj_cont.fits",CPL_IO_DEFAULT));</span>
-<a name="l04589"></a>04589             <span class="comment">//check_nomsg(cpl_table_save(obj_line,NULL,NULL,</span>
-<a name="l04590"></a>04590             <span class="comment">//            "out_obj_line.fits",CPL_IO_DEFAULT));</span>
-<a name="l04591"></a>04591             <span class="comment">//check_nomsg(cpl_table_save(sky_line,NULL,NULL,</span>
-<a name="l04592"></a>04592             <span class="comment">//            "out_sky_line.fits",CPL_IO_DEFAULT));</span>
-<a name="l04593"></a>04593             <span class="comment">//check_nomsg(cpl_table_save(sky_cont,NULL,NULL,</span>
-<a name="l04594"></a>04594             <span class="comment">//            "out_sky_cont.fits",CPL_IO_DEFAULT));</span>
-<a name="l04595"></a>04595 
-<a name="l04596"></a>04596 
-<a name="l04597"></a>04597             sinfo_free_table(&fline_res);
-<a name="l04598"></a>04598             <span class="comment">//FIXME: in some cases obj_cont is empty</span>
-<a name="l04599"></a>04599             <span class="comment">//sinfo_msg("first line ratio determination");</span>
-<a name="l04600"></a>04600             ck0_nomsg(sinfo_get_line_ratio(obj_line,obj_cont,
-<a name="l04601"></a>04601                        sky_line,sky_cont,method,&r));
-<a name="l04602"></a>04602         sinfo_msg(<span class="stringliteral">"1st Line ratio %g"</span>,r);
-<a name="l04603"></a>04603 
-<a name="l04604"></a>04604 
-<a name="l04605"></a>04605             <span class="keywordflow">if</span>(cpl_table_get_nrow(obj_cont) > 0) {
-<a name="l04606"></a>04606                check_nomsg(fline_res=sinfo_table_interpol(obj_line,obj_cont,
-<a name="l04607"></a>04607                                                           sky_line,sky_cont,
-<a name="l04608"></a>04608                                                           r));
-<a name="l04609"></a>04609         } <span class="keywordflow">else</span> {
-<a name="l04610"></a>04610               check_nomsg(fline_res=cpl_table_duplicate(obj_line));
-<a name="l04611"></a>04611         }
-<a name="l04612"></a>04612 
-<a name="l04613"></a>04613             <span class="comment">// check if there are outliers</span>
-<a name="l04614"></a>04614             cpl_table_select_all(fline_res);
-<a name="l04615"></a>04615             check_nomsg(fmed = cpl_table_get_column_median(fline_res,<span class="stringliteral">"INT"</span>));
-<a name="l04616"></a>04616             check_nomsg(fsdv = cpl_table_get_column_stdev(fline_res,<span class="stringliteral">"INT"</span>));
-<a name="l04617"></a>04617 
-<a name="l04618"></a>04618             check_nomsg(cpl_table_duplicate_column(fline_res,<span class="stringliteral">"AINT"</span>,
-<a name="l04619"></a>04619                                                    fline_res,<span class="stringliteral">"INT"</span>));
-<a name="l04620"></a>04620             check_nomsg(cpl_table_multiply_columns(fline_res,<span class="stringliteral">"AINT"</span>,<span class="stringliteral">"INT"</span>));
-<a name="l04621"></a>04621             check_nomsg(cpl_table_power_column(fline_res,<span class="stringliteral">"AINT"</span>,0.5));
-<a name="l04622"></a>04622             check_nomsg(fclip_i=cpl_table_and_selected_double(fline_res,<span class="stringliteral">"AINT"</span>,
-<a name="l04623"></a>04623                                                   CPL_GREATER_THAN,
-<a name="l04624"></a>04624                                                   fmed+3*fsdv));
-<a name="l04625"></a>04625 
-<a name="l04626"></a>04626             check_nomsg(cpl_table_select_all(fline_res));
-<a name="l04627"></a>04627 
-<a name="l04628"></a>04628 
-<a name="l04629"></a>04629         <span class="keywordflow">if</span> (fclip_i > 0) {
-<a name="l04630"></a>04630               <span class="comment">// do a k-sigma clip to select a better line region</span>
-<a name="l04631"></a>04631               <span class="comment">//sinfo_msg("fclip_i=%d",fclip_i);</span>
-<a name="l04632"></a>04632               <span class="comment">//Find again line_regions</span>
-<a name="l04633"></a>04633               check_nomsg(line_i=cpl_table_and_selected_double(fline_res,
-<a name="l04634"></a>04634                                    <span class="stringliteral">"AINT"</span>,
-<a name="l04635"></a>04635                                    CPL_NOT_GREATER_THAN,
-<a name="l04636"></a>04636                                    fmed+3*fsdv));
-<a name="l04637"></a>04637           <span class="comment">// get new (better) line_regions</span>
-<a name="l04638"></a>04638           sinfo_free_table(&line_regions);
-<a name="l04639"></a>04639               <span class="comment">//sinfo_msg("line_i=%d",line_i);</span>
-<a name="l04640"></a>04640               check_nomsg(line_regions=cpl_table_extract_selected(fline_res));
-<a name="l04641"></a>04641               check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));
-<a name="l04642"></a>04642               check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"AINT"</span>));
-<a name="l04643"></a>04643 
-<a name="l04644"></a>04644           sinfo_free_table(&obj_line);
-<a name="l04645"></a>04645           sinfo_free_table(&sky_line);
-<a name="l04646"></a>04646 
-<a name="l04647"></a>04647           <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span>
-<a name="l04648"></a>04648               <span class="comment">//                           "out_obj_lr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04649"></a>04649           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span>
-<a name="l04650"></a>04650               <span class="comment">//                           "out_line_regions.fits",</span>
-<a name="l04651"></a>04651               <span class="comment">//                           CPL_IO_DEFAULT));</span>
-<a name="l04652"></a>04652 
-<a name="l04653"></a>04653 
-<a name="l04654"></a>04654 
-<a name="l04655"></a>04655 
-<a name="l04656"></a>04656           <span class="comment">// The following 2 may return an error so we do not check and</span>
-<a name="l04657"></a>04657           <span class="comment">// later we reset the error</span>
-<a name="l04658"></a>04658               obj_line=sinfo_table_select_range(obj_lr,line_regions,wtol);
-<a name="l04659"></a>04659               sky_line=sinfo_table_select_range(sky_lr,line_regions,wtol);
-<a name="l04660"></a>04660               fline_i=cpl_table_get_nrow(line_regions);
-<a name="l04661"></a>04661 
-<a name="l04662"></a>04662               <span class="comment">//sinfo_msg("fline_i=%d",fline_i);</span>
-<a name="l04663"></a>04663               <span class="keywordflow">if</span>(fline_i>=3) {
-<a name="l04664"></a>04664                 <span class="comment">// repeat the determination of the line ratio</span>
-<a name="l04665"></a>04665                 <span class="comment">//sinfo_msg("second line ratio determination");</span>
-<a name="l04666"></a>04666                 ck0_nomsg(sinfo_get_line_ratio(obj_line,obj_cont,
-<a name="l04667"></a>04667                                                 sky_line,sky_cont,method,&r));
-<a name="l04668"></a>04668 
-<a name="l04669"></a>04669         sinfo_msg(<span class="stringliteral">"2nd Line ratio %g"</span>,r);
-<a name="l04670"></a>04670 
-<a name="l04671"></a>04671           } <span class="keywordflow">else</span> {
-<a name="l04672"></a>04672                 cpl_error_reset();
-<a name="l04673"></a>04673           }
-<a name="l04674"></a>04674 
-<a name="l04675"></a>04675           sinfo_free_table(&sky_line);
-<a name="l04676"></a>04676           sinfo_free_table(&obj_line);
-<a name="l04677"></a>04677         }
-<a name="l04678"></a>04678 
-<a name="l04679"></a>04679             cpl_msg_info(cpl_func,<span class="stringliteral">"use %"</span> CPL_SIZE_FORMAT 
-<a name="l04680"></a>04680                          <span class="stringliteral">" pixels for line and %"</span> CPL_SIZE_FORMAT 
-<a name="l04681"></a>04681                          <span class="stringliteral">" for continuum estimation"</span>,
-<a name="l04682"></a>04682             cpl_table_get_nrow(line_regions),cpl_table_get_nrow(cont_regions));
-<a name="l04683"></a>04683 
-<a name="l04684"></a>04684         sinfo_msg(<span class="stringliteral">"OH spectrum scaling = %f "</span>,r);
-<a name="l04685"></a>04685             check_nomsg(cpl_array_set_double(rfit,i,r));
-<a name="l04686"></a>04686             ck0_nomsg(sinfo_table_set(&rscale0,wav_lr,r,wtol));
-<a name="l04687"></a>04687 
-<a name="l04688"></a>04688       } <span class="comment">/* end if line_i */</span>
-<a name="l04689"></a>04689         } <span class="comment">/* end if xxx1_i */</span>
-<a name="l04690"></a>04690      } <span class="comment">/* end finite_pix_i */</span>
-<a name="l04691"></a>04691 
-<a name="l04692"></a>04692     }
-<a name="l04693"></a>04693 
-<a name="l04694"></a>04694     sinfo_free_table(&xxx1);
-<a name="l04695"></a>04695     sinfo_free_table(&xxx2);
-<a name="l04696"></a>04696     sinfo_free_table(&sky_lr);
-<a name="l04697"></a>04697     sinfo_free_table(&obj_lr);
-<a name="l04698"></a>04698     sinfo_free_table(&wav_lr);
-<a name="l04699"></a>04699 
-<a name="l04700"></a>04700     sinfo_free_table(&line_regions);
-<a name="l04701"></a>04701     sinfo_free_table(&cont_regions);
-<a name="l04702"></a>04702 
-<a name="l04703"></a>04703   } <span class="comment">/* end for loop on i */</span>
-<a name="l04704"></a>04704 
-<a name="l04705"></a>04705   sinfo_free_array(&do_hk);
-<a name="l04706"></a>04706   sinfo_free_array(&rfit);
-<a name="l04707"></a>04707 
-<a name="l04708"></a>04708   <span class="comment">//sinfo_msg("n scale=%d",cpl_table_get_nrow(rscale0));</span>
-<a name="l04709"></a>04709   <span class="comment">//check_nomsg(cpl_table_save(rscale0,NULL,NULL,</span>
-<a name="l04710"></a>04710   <span class="comment">//                                   "out_rscale0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04711"></a>04711 
-<a name="l04712"></a>04712   check_nomsg(cpl_table_select_all(rscale0));
-<a name="l04713"></a>04713  <span class="comment">/* TODO: here one has to implementa an interpol function</span>
-<a name="l04714"></a>04714 <span class="comment">  check_nomsg(range0_i=cpl_table_and_selected_double(rscale0,"RATIO",</span>
-<a name="l04715"></a>04715 <span class="comment">                                                     CPL_NOT_EQUAL_TO,0));</span>
-<a name="l04716"></a>04716 <span class="comment"> */</span>
-<a name="l04717"></a>04717   check_nomsg(*rscale = cpl_table_extract_selected(rscale0));
-<a name="l04718"></a>04718   sinfo_free_table(&rscale0);
-<a name="l04719"></a>04719 
-<a name="l04720"></a>04720 
-<a name="l04721"></a>04721   check_nomsg(rat_sky=cpl_table_duplicate(*int_sky));
-<a name="l04722"></a>04722   check_nomsg(cpl_table_duplicate_column(rat_sky,<span class="stringliteral">"RATIO"</span>,*rscale,<span class="stringliteral">"RATIO"</span>));
-<a name="l04723"></a>04723   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"COR_FCT_VIB"</span>,
-<a name="l04724"></a>04724                      *rscale,<span class="stringliteral">"RATIO"</span>));
-<a name="l04725"></a>04725   <span class="comment">//check_nomsg(cpl_table_save(rat_sky,NULL,NULL,</span>
-<a name="l04726"></a>04726   <span class="comment">//                           "rat_sky0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04727"></a>04727   check_nomsg(cpl_table_multiply_columns(rat_sky,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"RATIO"</span>));
-<a name="l04728"></a>04728 
-<a name="l04729"></a>04729 
-<a name="l04730"></a>04730   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span>
-<a name="l04731"></a>04731   <span class="comment">//                             "out_obj0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04732"></a>04732   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span>
-<a name="l04733"></a>04733   <span class="comment">//                             "out_sky0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04734"></a>04734 
-<a name="l04735"></a>04735   <span class="comment">/*</span>
-<a name="l04736"></a>04736 <span class="comment">  check_nomsg(cpl_table_duplicate_column(*int_obj,"INTC",*int_obj,"INT"));</span>
-<a name="l04737"></a>04737 <span class="comment">  check_nomsg(cpl_table_duplicate_column(*int_obj,"SKYC",*int_sky,"INTC"));</span>
-<a name="l04738"></a>04738 <span class="comment">  check_nomsg(cpl_table_subtract_columns(*int_obj,"INTC","SKYC"));</span>
-<a name="l04739"></a>04739 <span class="comment">  */</span>
-<a name="l04740"></a>04740 
-<a name="l04741"></a>04741   <span class="comment">// do simple rotational correction</span>
-<a name="l04742"></a>04742   <span class="keywordflow">if</span> (do_rot == 1) {
-<a name="l04743"></a>04743 
-<a name="l04744"></a>04744     <span class="comment">//finite_pix = where(finite(int_sky) && finite(int_obj),finite_pix_i);</span>
-<a name="l04745"></a>04745     check_nomsg(min_lrange=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l04746"></a>04746     check_nomsg(max_lrange=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));
-<a name="l04747"></a>04747     <span class="comment">//sinfo_msg("min_lrange=%g max_lrange=%g",min_lrange,max_lrange);</span>
-<a name="l04748"></a>04748     <span class="comment">//check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(&rat_sky,</span>
-<a name="l04749"></a>04749     <span class="comment">//                                                      int_obj,</span>
-<a name="l04750"></a>04750     <span class="comment">//                                                      &lambda));</span>
-<a name="l04751"></a>04751     check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(int_sky,
-<a name="l04752"></a>04752                                                           int_obj,
-<a name="l04753"></a>04753                                                           &lambda));
-<a name="l04754"></a>04754 
-<a name="l04755"></a>04755 
-<a name="l04756"></a>04756     check_nomsg(finite_pix=cpl_table_duplicate(lambda));
-<a name="l04757"></a>04757     <span class="comment">//TODO: lambda invalid values need to be reset to valid (?)</span>
-<a name="l04758"></a>04758 
-<a name="l04759"></a>04759     check_nomsg(cpl_table_erase_invalid(finite_pix));
-<a name="l04760"></a>04760 
-<a name="l04761"></a>04761 
-<a name="l04762"></a>04762     <span class="keywordflow">if</span> (finite_pix_i > npixw) {
-<a name="l04763"></a>04763 
-<a name="l04764"></a>04764       <span class="comment">//finite_pix = finite_pix[where(finite_pix > min(lrange) &&</span>
-<a name="l04765"></a>04765       <span class="comment">//                              finite_pix < max(lrange))];</span>
-<a name="l04766"></a>04766 
-<a name="l04767"></a>04767       check_nomsg(cpl_table_and_selected_double(finite_pix,<span class="stringliteral">"WAVE"</span>,
-<a name="l04768"></a>04768                                                 CPL_GREATER_THAN,
-<a name="l04769"></a>04769                                                 min_lrange));
-<a name="l04770"></a>04770 
-<a name="l04771"></a>04771       check_nomsg(cpl_table_and_selected_double(finite_pix,<span class="stringliteral">"WAVE"</span>,
-<a name="l04772"></a>04772                                                 CPL_LESS_THAN,
-<a name="l04773"></a>04773                                                 max_lrange));
-<a name="l04774"></a>04774 
-<a name="l04775"></a>04775 
-<a name="l04776"></a>04776 
-<a name="l04777"></a>04777       check_nomsg(tmp_tbl=cpl_table_extract_selected(finite_pix));
-<a name="l04778"></a>04778       sinfo_free_table(&finite_pix);
-<a name="l04779"></a>04779       check_nomsg(finite_pix=cpl_table_duplicate(tmp_tbl));
-<a name="l04780"></a>04780       sinfo_free_table(&tmp_tbl);
-<a name="l04781"></a>04781       sinfo_free_table(&sky_lr);
-<a name="l04782"></a>04782       sinfo_free_table(&obj_lr);
-<a name="l04783"></a>04783       sinfo_free_table(&wav_lr);
-<a name="l04784"></a>04784 
-<a name="l04785"></a>04785 
-<a name="l04786"></a>04786       cknull(sky_lr=sinfo_table_select_range(rat_sky,finite_pix,wtol),
-<a name="l04787"></a>04787          <span class="stringliteral">"extracting sky sub range"</span>);
-<a name="l04788"></a>04788       cknull(obj_lr=sinfo_table_select_range(*int_obj,finite_pix,wtol),
-<a name="l04789"></a>04789          <span class="stringliteral">"extracting obj sub range"</span>);
-<a name="l04790"></a>04790       cknull(wav_lr=sinfo_table_select_range(lambda,finite_pix,wtol),
-<a name="l04791"></a>04791          <span class="stringliteral">"extracting sky sub range"</span>);
-<a name="l04792"></a>04792 
-<a name="l04793"></a>04793 
-<a name="l04794"></a>04794       <span class="comment">//check_nomsg(cpl_table_save(rat_sky,NULL,NULL,</span>
-<a name="l04795"></a>04795       <span class="comment">//                             "out_rat_sky.fits",CPL_IO_DEFAULT));</span>
-<a name="l04796"></a>04796       <span class="comment">//check_nomsg(cpl_table_save(finite_pix,NULL,NULL,</span>
-<a name="l04797"></a>04797       <span class="comment">//                             "out_finite_pix.fits",CPL_IO_DEFAULT));</span>
-<a name="l04798"></a>04798       <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,</span>
-<a name="l04799"></a>04799       <span class="comment">//                             "out_sky_lr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04800"></a>04800       <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span>
-<a name="l04801"></a>04801       <span class="comment">//                             "out_obj_lr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04802"></a>04802       <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,</span>
-<a name="l04803"></a>04803       <span class="comment">//                             "out_wav_lr.fits",CPL_IO_DEFAULT));</span>
-<a name="l04804"></a>04804 
-<a name="l04805"></a>04805       <span class="comment">//The following may fail (sky_lr may be empty) so we do not check</span>
-<a name="l04806"></a>04806       <span class="keywordflow">if</span>(1 == cpl_table_has_valid(sky_lr,<span class="stringliteral">"INT"</span>)) {
-<a name="l04807"></a>04807     check_nomsg(sky_med=cpl_table_get_column_median(sky_lr,<span class="stringliteral">"INT"</span>));
-<a name="l04808"></a>04808     check_nomsg(sky_sdv=cpl_table_get_column_stdev(sky_lr,<span class="stringliteral">"INT"</span>));
-<a name="l04809"></a>04809     sky_thresh=sky_med+sky_sdv;
-<a name="l04810"></a>04810         <span class="comment">//xxx1 = where(sky_lr > median(sky_lr)+stddev(sky_lr),xxx1_i);</span>
-<a name="l04811"></a>04811         check_nomsg(xxx1_i=cpl_table_and_selected_double(sky_lr,<span class="stringliteral">"INT"</span>,
-<a name="l04812"></a>04812                            CPL_GREATER_THAN,sky_thresh));
-<a name="l04813"></a>04813         check_nomsg(xxx1=cpl_table_extract_selected(sky_lr));
-<a name="l04814"></a>04814         check_nomsg(cpl_table_select_all(sky_lr));
-<a name="l04815"></a>04815       } <span class="keywordflow">else</span> {
-<a name="l04816"></a>04816         xxx1_i=0;
-<a name="l04817"></a>04817       }
-<a name="l04818"></a>04818       <span class="keywordflow">if</span> (xxx1_i > 0) {
-<a name="l04819"></a>04819         sinfo_msg(<span class="stringliteral">"xxx1_i=%d"</span>,xxx1_i);
-<a name="l04820"></a>04820 
-<a name="l04821"></a>04821         sinfo_msg(<span class="stringliteral">"wav_lr wmin=%g wmax=%g"</span>,
-<a name="l04822"></a>04822           cpl_table_get_column_min(wav_lr,<span class="stringliteral">"WAVE"</span>),
-<a name="l04823"></a>04823           cpl_table_get_column_max(wav_lr,<span class="stringliteral">"WAVE"</span>));
-<a name="l04824"></a>04824 
-<a name="l04825"></a>04825         cknull_nomsg(llr_xxx1=sinfo_table_select_range(wav_lr,xxx1,wtol));
-<a name="l04826"></a>04826         <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,</span>
-<a name="l04827"></a>04827         <span class="comment">//                             "out_llr_xxx1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04828"></a>04828 
-<a name="l04829"></a>04829         cknull(low_pos=sinfo_find_rot_waves(w_rot_low,npixw,wtol,llr_xxx1),
-<a name="l04830"></a>04830            <span class="stringliteral">"Determining low positions"</span>);
-<a name="l04831"></a>04831 
-<a name="l04832"></a>04832 
-<a name="l04833"></a>04833         check_nomsg(low_pos_i=cpl_table_get_nrow(low_pos));
-<a name="l04834"></a>04834         <span class="comment">//check_nomsg(cpl_table_dump(low_pos,0,low_pos_i,stdout));</span>
-<a name="l04835"></a>04835         cknull(med_pos=sinfo_find_rot_waves(w_rot_med,npixw,wtol,llr_xxx1),
-<a name="l04836"></a>04836                <span class="stringliteral">"Determining med positions"</span>);
-<a name="l04837"></a>04837         check_nomsg(med_pos_i=cpl_table_get_nrow(med_pos));
-<a name="l04838"></a>04838 
-<a name="l04839"></a>04839 
-<a name="l04840"></a>04840         <span class="comment">//check_nomsg(cpl_table_dump(med_pos,0,med_pos_i,stdout));</span>
-<a name="l04841"></a>04841 
-<a name="l04842"></a>04842         <span class="comment">//TODO:</span>
-<a name="l04843"></a>04843         <span class="comment">//hipos = [0]</span>
-<a name="l04844"></a>04844         <span class="comment">//for i=0,n_elements(xxx1)-1 do begin</span>
-<a name="l04845"></a>04845         <span class="comment">//    x1 = where(lowpos eq i,x1_i)</span>
-<a name="l04846"></a>04846         <span class="comment">//    x2 = where(medpos eq i,x2_i)</span>
-<a name="l04847"></a>04847         <span class="comment">//    if (x1_i eq 0 and x2_i eq 0) then hipos = [hipos,i]</span>
-<a name="l04848"></a>04848         <span class="comment">//endfor</span>
-<a name="l04849"></a>04849         <span class="comment">//hipos = hipos[1:n_elements(hipos)-1]</span>
-<a name="l04850"></a>04850         <span class="comment">//TODO: hi_pos=sinfo_find_rot_waves(w_rot_hi,npixw,wtol,wav_lr);</span>
-<a name="l04851"></a>04851 
-<a name="l04852"></a>04852 
-<a name="l04853"></a>04853         cknull(hi_pos=sinfo_table_extract_rest(xxx1,low_pos,med_pos,wtol),
-<a name="l04854"></a>04854            <span class="stringliteral">"determining hi position"</span>);
-<a name="l04855"></a>04855         check_nomsg(hi_pos_i=cpl_table_get_nrow(hi_pos));
-<a name="l04856"></a>04856         <span class="comment">//check_nomsg(cpl_table_dump(hi_pos,0,hi_pos_i,stdout));</span>
-<a name="l04857"></a>04857 
-<a name="l04858"></a>04858 
-<a name="l04859"></a>04859         <span class="comment">//xxx2[xxx1] = 10.;</span>
-<a name="l04860"></a>04860         check_nomsg(xxx2 = cpl_table_duplicate(sky_lr));
-<a name="l04861"></a>04861         check_nomsg(nrow=cpl_table_get_nrow(sky_lr));
-<a name="l04862"></a>04862         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04863"></a>04863         <span class="comment">//                             "out_xxx1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04864"></a>04864         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04865"></a>04865         <span class="comment">//                             "out_xxx2_0.fits",CPL_IO_DEFAULT));</span>
-<a name="l04866"></a>04866 
-<a name="l04867"></a>04867         <span class="comment">// AMO: Why the following?</span>
-<a name="l04868"></a>04868         <span class="comment">//check_nomsg(cpl_table_fill_column_window(xxx2,"INT",0,nrow,0));</span>
-<a name="l04869"></a>04869 
-<a name="l04870"></a>04870         <span class="comment">//xxx2 = convol(xxx2,replicate(1,npixw),/edge_truncate,/center);</span>
-<a name="l04871"></a>04871         <span class="comment">//cont_regions = where(xxx2 == 0,cont_i);</span>
-<a name="l04872"></a>04872         ck0_nomsg(sinfo_table_threshold(&xxx2,<span class="stringliteral">"INT"</span>,sky_thresh,
-<a name="l04873"></a>04873                     sky_thresh,0.,10.));
-<a name="l04874"></a>04874         sinfo_msg(<span class="stringliteral">"sky_thresh=%g %g %f"</span>,sky_thresh,sky_med,sky_sdv);
-<a name="l04875"></a>04875         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04876"></a>04876         <span class="comment">//                             "out_xxx2_1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04877"></a>04877         check_nomsg(sinfo_convolve_kernel(&xxx2,npixw/2));
-<a name="l04878"></a>04878 
-<a name="l04879"></a>04879         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span>
-<a name="l04880"></a>04880         <span class="comment">//                             "out_xxx2_2.fits",CPL_IO_DEFAULT));</span>
-<a name="l04881"></a>04881         check_nomsg(cont_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,
-<a name="l04882"></a>04882                              CPL_EQUAL_TO,0));
-<a name="l04883"></a>04883         check_nomsg(cont_regions=cpl_table_extract_selected(xxx2));
-<a name="l04884"></a>04884 
-<a name="l04885"></a>04885         sinfo_free_table(&xxx2);
-<a name="l04886"></a>04886         check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"INT"</span>));
-<a name="l04887"></a>04887         check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"CNV"</span>));
-<a name="l04888"></a>04888 
-<a name="l04889"></a>04889         check(low_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,low_pos,wtol,
-<a name="l04890"></a>04890                          npixw,&low_regions),<span class="stringliteral">"failed determining low regions"</span>);
-<a name="l04891"></a>04891 
-<a name="l04892"></a>04892         check(med_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,med_pos,wtol,
-<a name="l04893"></a>04893                          npixw,&med_regions),<span class="stringliteral">"failed determining med regions"</span>);
-<a name="l04894"></a>04894 
-<a name="l04895"></a>04895 
-<a name="l04896"></a>04896         check(hi_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,hi_pos,wtol,
-<a name="l04897"></a>04897                         npixw,&hi_regions),<span class="stringliteral">"failed determining hi regions"</span>);
-<a name="l04898"></a>04898     <span class="comment">/*</span>
-<a name="l04899"></a>04899 <span class="comment">        sinfo_msg("xxx1: wmin=%g wmax=%g",</span>
-<a name="l04900"></a>04900 <span class="comment">                   cpl_table_get_column_min(xxx1,"WAVE"),</span>
-<a name="l04901"></a>04901 <span class="comment">                   cpl_table_get_column_max(xxx1,"WAVE"));</span>
-<a name="l04902"></a>04902 <span class="comment"></span>
-<a name="l04903"></a>04903 <span class="comment">        sinfo_msg("low_pos: wmin=%g wmax=%g",</span>
-<a name="l04904"></a>04904 <span class="comment">                   cpl_table_get_column_min(low_pos,"WAVE"),</span>
-<a name="l04905"></a>04905 <span class="comment">                   cpl_table_get_column_max(low_pos,"WAVE"));</span>
-<a name="l04906"></a>04906 <span class="comment">    */</span>
-<a name="l04907"></a>04907         sinfo_msg(<span class="stringliteral">"hi_pos_i : %d med_pos_i : %d low_pos_i : %d cont_i: %d"</span>,
-<a name="l04908"></a>04908                    hi_pos_i,     med_pos_i,     low_pos_i,     cont_i);
-<a name="l04909"></a>04909 
-<a name="l04910"></a>04910 
-<a name="l04911"></a>04911         <span class="keywordflow">if</span> (hi_pos_i >= 3 && med_pos_i >= 3 && low_pos_i >= 3 && cont_i >= 3) {
-<a name="l04912"></a>04912 
-<a name="l04913"></a>04913           <span class="comment">//compute line ratio for hi_regions</span>
-<a name="l04914"></a>04914           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,
-<a name="l04915"></a>04915                                              hi_regions,cont_regions,&rhi));
-<a name="l04916"></a>04916           sinfo_msg(<span class="stringliteral">"high rotational OH scaling %g"</span>,rhi);
-<a name="l04917"></a>04917 
-<a name="l04918"></a>04918           <span class="comment">//compute line ratio for med_regions</span>
-<a name="l04919"></a>04919           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,
-<a name="l04920"></a>04920                                              med_regions,cont_regions,&rmed));
-<a name="l04921"></a>04921 
-<a name="l04922"></a>04922           sinfo_msg(<span class="stringliteral">"P1(3.5) & R1(1.5) rotational OH scaling %g "</span>,rmed);
-<a name="l04923"></a>04923 
-<a name="l04924"></a>04924           <span class="comment">//compute line ratio for med_regions</span>
-<a name="l04925"></a>04925           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,
-<a name="l04926"></a>04926                                              low_regions,cont_regions,&rlow));
-<a name="l04927"></a>04927           sinfo_msg(<span class="stringliteral">"P1(2.5) & Q1(1.5) rotational OH scaling %g"</span>,rlow);
-<a name="l04928"></a>04928 
-<a name="l04929"></a>04929           cknull(low_scale=sinfo_find_rot_waves(w_rot_low,npixw,wtol,lambda),
-<a name="l04930"></a>04930          <span class="stringliteral">"Determining low scale"</span>);
-<a name="l04931"></a>04931 
-<a name="l04932"></a>04932 
-<a name="l04933"></a>04933 
-<a name="l04934"></a>04934           cknull(med_scale=sinfo_find_rot_waves(w_rot_low,npixw,wtol,lambda),
-<a name="l04935"></a>04935          <span class="stringliteral">"Determining low scale"</span>);
-<a name="l04936"></a>04936           check_nomsg(cpl_table_multiply_scalar(*rscale,<span class="stringliteral">"RATIO"</span>,rhi));
-<a name="l04937"></a>04937           ck0_nomsg(sinfo_table_fill_column_over_range(rscale,med_scale,
-<a name="l04938"></a>04938                                                   <span class="stringliteral">"RATIO"</span>,rmed/rhi,wtol));
-<a name="l04939"></a>04939           ck0_nomsg(sinfo_table_fill_column_over_range(rscale,low_scale,
-<a name="l04940"></a>04940                                  <span class="stringliteral">"RATIO"</span>,rlow/rhi,wtol));
-<a name="l04941"></a>04941 
-<a name="l04942"></a>04942     }
-<a name="l04943"></a>04943       } <span class="comment">//xxx1_i > 0</span>
-<a name="l04944"></a>04944     }<span class="comment">//finitepix > npixw</span>
-<a name="l04945"></a>04945   }<span class="comment">//do_rot==1</span>
-<a name="l04946"></a>04946   <span class="comment">//end of new rotational bit</span>
-<a name="l04947"></a>04947   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span>
-<a name="l04948"></a>04948   <span class="comment">//                             "out_obj.fits",CPL_IO_DEFAULT));</span>
-<a name="l04949"></a>04949   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span>
-<a name="l04950"></a>04950   <span class="comment">//                             "out_sky.fits",CPL_IO_DEFAULT));</span>
-<a name="l04951"></a>04951 
-<a name="l04952"></a>04952 
-<a name="l04953"></a>04953   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"INTC"</span>,*int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l04954"></a>04954   <span class="comment">//sinfo_msg("n sky=%d",cpl_table_get_nrow(*int_sky));</span>
-<a name="l04955"></a>04955   <span class="comment">//sinfo_msg("n scale=%d",cpl_table_get_nrow(*rscale));</span>
-<a name="l04956"></a>04956 
-<a name="l04957"></a>04957   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"COR_FCT_ALL"</span>,
-<a name="l04958"></a>04958                                          *rscale,<span class="stringliteral">"RATIO"</span>));
-<a name="l04959"></a>04959   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"RATIO"</span>,*rscale,<span class="stringliteral">"RATIO"</span>));
-<a name="l04960"></a>04960   check_nomsg(cpl_table_multiply_columns(*int_sky,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"RATIO"</span>));
-<a name="l04961"></a>04961 
-<a name="l04962"></a>04962   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INTC"</span>,*int_obj,<span class="stringliteral">"INT"</span>));
-<a name="l04963"></a>04963   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span>
-<a name="l04964"></a>04964   <span class="comment">//                             "out_obj1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04965"></a>04965   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span>
-<a name="l04966"></a>04966   <span class="comment">//                             "out_sky1.fits",CPL_IO_DEFAULT));</span>
-<a name="l04967"></a>04967 
-<a name="l04968"></a>04968   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"SKYC"</span>,*int_sky,<span class="stringliteral">"INTC"</span>));
-<a name="l04969"></a>04969   check_nomsg(cpl_table_subtract_columns(*int_obj,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"SKYC"</span>));
-<a name="l04970"></a>04970 
-<a name="l04971"></a>04971 
-<a name="l04972"></a>04972   check_nomsg(cpl_table_erase_column(*int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l04973"></a>04973   check_nomsg(cpl_table_name_column(*int_sky,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"INT"</span>));
-<a name="l04974"></a>04974 
-<a name="l04975"></a>04975 
-<a name="l04976"></a>04976 
-<a name="l04977"></a>04977  cleanup:
-<a name="l04978"></a>04978   sinfo_free_table(&llr_xxx1);
-<a name="l04979"></a>04979   sinfo_free_table(&hi_pos);
-<a name="l04980"></a>04980   sinfo_free_table(&low_pos);
-<a name="l04981"></a>04981   sinfo_free_table(&med_pos);
-<a name="l04982"></a>04982   sinfo_free_table(&low_regions);
-<a name="l04983"></a>04983   sinfo_free_table(&med_regions);
-<a name="l04984"></a>04984   sinfo_free_table(&hi_regions);
-<a name="l04985"></a>04985   sinfo_free_table(&low_scale);
-<a name="l04986"></a>04986   sinfo_free_table(&med_scale);
-<a name="l04987"></a>04987 
-<a name="l04988"></a>04988 
-<a name="l04989"></a>04989   sinfo_free_table(&finite_pix);
-<a name="l04990"></a>04990   sinfo_free_table(&xxx1_sub);
-<a name="l04991"></a>04991   sinfo_free_table(&tmp_tbl);
-<a name="l04992"></a>04992   sinfo_free_table(&rat_sky);
-<a name="l04993"></a>04993   sinfo_free_table(&fline_res);
-<a name="l04994"></a>04994   sinfo_free_table(&sky_cont);
-<a name="l04995"></a>04995   sinfo_free_table(&obj_cont);
-<a name="l04996"></a>04996   sinfo_free_table(&obj_line);
-<a name="l04997"></a>04997   sinfo_free_table(&sky_line);
-<a name="l04998"></a>04998   sinfo_free_table(&rscale0);
-<a name="l04999"></a>04999   sinfo_free_table(&xxx1);
-<a name="l05000"></a>05000   sinfo_free_table(&xxx2);
-<a name="l05001"></a>05001   sinfo_free_table(&line_regions);
-<a name="l05002"></a>05002   sinfo_free_table(&cont_regions);
-<a name="l05003"></a>05003   sinfo_free_table(&sky_lr);
-<a name="l05004"></a>05004   sinfo_free_table(&obj_lr);
-<a name="l05005"></a>05005   sinfo_free_table(&wav_lr);
-<a name="l05006"></a>05006   sinfo_free_array(&rfit);
-<a name="l05007"></a>05007   sinfo_free_array(&do_hk);
-<a name="l05008"></a>05008   <span class="keywordflow">return</span>;
-<a name="l05009"></a>05009 
-<a name="l05010"></a>05010 }
-<a name="l05019"></a>05019 <span class="keywordtype">int</span>
-<a name="l05020"></a>05020 sinfo_table_get_index_of_max(cpl_table* t,<span class="keyword">const</span> <span class="keywordtype">char</span>* name,cpl_type type)
-<a name="l05021"></a>05021 {
-<a name="l05022"></a>05022 
-<a name="l05023"></a>05023   <span class="keywordtype">int</span> i=0;
-<a name="l05024"></a>05024   <span class="keywordtype">int</span> result=0;
-<a name="l05025"></a>05025   <span class="keywordtype">int</span> nrow=0;
-<a name="l05026"></a>05026   <span class="keywordtype">int</span>* pi=NULL;
-<a name="l05027"></a>05027   <span class="keywordtype">float</span>* pf=NULL;
-<a name="l05028"></a>05028   <span class="keywordtype">double</span>* pd=NULL;
-<a name="l05029"></a>05029   <span class="keywordtype">double</span> max=0;
-<a name="l05030"></a>05030 
-<a name="l05031"></a>05031 
-<a name="l05032"></a>05032   <span class="keywordflow">if</span>(t == NULL) {
-<a name="l05033"></a>05033    cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l05034"></a>05034    <span class="keywordflow">return</span> result;
-<a name="l05035"></a>05035   }
-<a name="l05036"></a>05036   max=cpl_table_get_column_max(t,name);
-<a name="l05037"></a>05037   nrow=cpl_table_get_nrow(t);
-<a name="l05038"></a>05038   <span class="keywordflow">switch</span>(type) {
-<a name="l05039"></a>05039 
-<a name="l05040"></a>05040   <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l05041"></a>05041     pi=cpl_table_get_data_int(t,name);
-<a name="l05042"></a>05042     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05043"></a>05043       <span class="keywordflow">if</span>(pi[i]==(<span class="keywordtype">int</span>)max) result=i;
-<a name="l05044"></a>05044     }
-<a name="l05045"></a>05045     <span class="keywordflow">break</span>;
-<a name="l05046"></a>05046   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l05047"></a>05047     pf=cpl_table_get_data_float(t,name);
-<a name="l05048"></a>05048     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05049"></a>05049       <span class="keywordflow">if</span>(pf[i]==(<span class="keywordtype">float</span>)max) result=i;
-<a name="l05050"></a>05050     }
-<a name="l05051"></a>05051     <span class="keywordflow">break</span>;
-<a name="l05052"></a>05052   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:
-<a name="l05053"></a>05053     pd=cpl_table_get_data_double(t,name);
-<a name="l05054"></a>05054     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05055"></a>05055       <span class="keywordflow">if</span>(pd[i]==max) result=i;
-<a name="l05056"></a>05056     }
-<a name="l05057"></a>05057     <span class="keywordflow">break</span>;
-<a name="l05058"></a>05058   <span class="keywordflow">default</span>:
-<a name="l05059"></a>05059     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);
-<a name="l05060"></a>05060    cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);
-<a name="l05061"></a>05061    <span class="keywordflow">return</span> result;
-<a name="l05062"></a>05062 
-<a name="l05063"></a>05063   }
-<a name="l05064"></a>05064   <span class="keywordflow">return</span> result;
-<a name="l05065"></a>05065 }
-<a name="l05066"></a>05066 
-<a name="l05067"></a>05067 
-<a name="l05068"></a>05068 
-<a name="l05078"></a>05078 <span class="keywordtype">int</span>
-<a name="l05079"></a>05079 sinfo_table_get_index_of_val(cpl_table* t,
-<a name="l05080"></a>05080                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l05081"></a>05081                              <span class="keywordtype">double</span> val,
-<a name="l05082"></a>05082                              cpl_type type)
-<a name="l05083"></a>05083 {
-<a name="l05084"></a>05084 
-<a name="l05085"></a>05085   <span class="keywordtype">int</span> i=0;
-<a name="l05086"></a>05086   <span class="keywordtype">int</span> result=0;
-<a name="l05087"></a>05087   <span class="keywordtype">int</span> nrow=0;
-<a name="l05088"></a>05088   <span class="keywordtype">int</span>* pi=NULL;
-<a name="l05089"></a>05089   <span class="keywordtype">float</span>* pf=NULL;
-<a name="l05090"></a>05090   <span class="keywordtype">double</span>* pd=NULL;
-<a name="l05091"></a>05091 
-<a name="l05092"></a>05092   <span class="keywordflow">if</span>(t == NULL) {
-<a name="l05093"></a>05093    cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);
-<a name="l05094"></a>05094    <span class="keywordflow">return</span> result;
-<a name="l05095"></a>05095   }
-<a name="l05096"></a>05096 
-<a name="l05097"></a>05097   nrow=cpl_table_get_nrow(t);
-<a name="l05098"></a>05098   <span class="keywordflow">switch</span>(type) {
-<a name="l05099"></a>05099 
-<a name="l05100"></a>05100   <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l05101"></a>05101     pi=cpl_table_get_data_int(t,name);
-<a name="l05102"></a>05102     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05103"></a>05103       <span class="keywordflow">if</span>(pi[i]==(<span class="keywordtype">int</span>)val) result=i;
-<a name="l05104"></a>05104     }
-<a name="l05105"></a>05105     <span class="keywordflow">break</span>;
-<a name="l05106"></a>05106   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l05107"></a>05107     pf=cpl_table_get_data_float(t,name);
-<a name="l05108"></a>05108     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05109"></a>05109       <span class="keywordflow">if</span>(pf[i]==(<span class="keywordtype">float</span>)val) result=i;
-<a name="l05110"></a>05110     }
-<a name="l05111"></a>05111     <span class="keywordflow">break</span>;
-<a name="l05112"></a>05112   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:
-<a name="l05113"></a>05113     pd=cpl_table_get_data_double(t,name);
-<a name="l05114"></a>05114     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l05115"></a>05115       <span class="keywordflow">if</span>(pd[i]==val) result=i;
-<a name="l05116"></a>05116     }
-<a name="l05117"></a>05117     <span class="keywordflow">break</span>;
-<a name="l05118"></a>05118   <span class="keywordflow">default</span>:
-<a name="l05119"></a>05119     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);
-<a name="l05120"></a>05120    cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);
-<a name="l05121"></a>05121    <span class="keywordflow">return</span> result;
-<a name="l05122"></a>05122 
-<a name="l05123"></a>05123   }
-<a name="l05124"></a>05124   <span class="keywordflow">return</span> result;
-<a name="l05125"></a>05125 }
-<a name="l05126"></a>05126 
-<a name="l05139"></a>05139 <span class="keywordtype">double</span>
-<a name="l05140"></a>05140 sinfo_table_column_interpolate(<span class="keyword">const</span> cpl_table* t,
-<a name="l05141"></a>05141                                <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l05142"></a>05142                                <span class="keyword">const</span> <span class="keywordtype">double</span> x)
-<a name="l05143"></a>05143 {
-<a name="l05144"></a>05144 
-<a name="l05145"></a>05145   <span class="keywordtype">double</span> val1=0;
-<a name="l05146"></a>05146   <span class="keywordtype">double</span> val2=0;
-<a name="l05147"></a>05147   <span class="keywordtype">int</span> x1=0;
-<a name="l05148"></a>05148   <span class="keywordtype">int</span> x2=0;
-<a name="l05149"></a>05149   <span class="keywordtype">double</span> m=0;
-<a name="l05150"></a>05150   <span class="keywordtype">double</span> y=0;
-<a name="l05151"></a>05151   <span class="keywordtype">int</span> status=0;
-<a name="l05152"></a>05152   <span class="keywordtype">int</span> nrow=0;
-<a name="l05153"></a>05153   nrow=cpl_table_get_nrow(t);
-<a name="l05154"></a>05154   <span class="keywordflow">if</span> ((1<x) && (x<nrow-1)) {
-<a name="l05155"></a>05155     x1=x-1;
-<a name="l05156"></a>05156     x2=x+1;
-<a name="l05157"></a>05157   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x<2) {
-<a name="l05158"></a>05158     x1=0;
-<a name="l05159"></a>05159     x2=1;
-<a name="l05160"></a>05160   } <span class="keywordflow">else</span> {
-<a name="l05161"></a>05161     x1=nrow-2;
-<a name="l05162"></a>05162     x2=nrow-1;
-<a name="l05163"></a>05163   }
-<a name="l05164"></a>05164   check_nomsg(val1=cpl_table_get(t,name,x1,&status));
-<a name="l05165"></a>05165   check_nomsg(val2=cpl_table_get(t,name,x2,&status));
-<a name="l05166"></a>05166 
-<a name="l05167"></a>05167   m=(val2-val1)/(x2-x1);
-<a name="l05168"></a>05168   y=val1+m*(x-x1);
-<a name="l05169"></a>05169 
-<a name="l05170"></a>05170   <span class="keywordflow">return</span> y;
-<a name="l05171"></a>05171 
-<a name="l05172"></a>05172  cleanup:
-<a name="l05173"></a>05173 
-<a name="l05174"></a>05174   <span class="keywordflow">return</span> -1;
-<a name="l05175"></a>05175 
-<a name="l05176"></a>05176 
-<a name="l05177"></a>05177 }
-<a name="l05178"></a>05178 
-<a name="l05187"></a>05187 <span class="keyword">static</span> cpl_imagelist*
-<a name="l05188"></a>05188 sinfo_imagelist_select_range(<span class="keyword">const</span> cpl_imagelist* inp,
-<a name="l05189"></a>05189                                   <span class="keyword">const</span> cpl_table* full,
-<a name="l05190"></a>05190                                   <span class="keyword">const</span> cpl_table* good,
-<a name="l05191"></a>05191                                   <span class="keyword">const</span> <span class="keywordtype">double</span> tol)
-<a name="l05192"></a>05192 {
-<a name="l05193"></a>05193   cpl_imagelist* out=NULL;
-<a name="l05194"></a>05194   <span class="keywordtype">int</span> osz=0;
-<a name="l05195"></a>05195   <span class="keywordtype">int</span> isz=0;
-<a name="l05196"></a>05196   <span class="keywordtype">int</span> ksz=0;
-<a name="l05197"></a>05197   <span class="keywordtype">int</span> k=0;
-<a name="l05198"></a>05198   <span class="keywordtype">int</span> i=0;
-<a name="l05199"></a>05199   <span class="keywordtype">int</span> status=0;
-<a name="l05200"></a>05200 
-<a name="l05201"></a>05201   <span class="keywordtype">double</span> wave_chk=0;
-<a name="l05202"></a>05202   <span class="keywordtype">double</span> wave_sel=0;
-<a name="l05203"></a>05203 
-<a name="l05204"></a>05204   <span class="keyword">const</span> cpl_image* img=NULL;
-<a name="l05205"></a>05205 
-<a name="l05206"></a>05206 
-<a name="l05207"></a>05207   <span class="comment">/* Get Object relevant information */</span>
-<a name="l05208"></a>05208   <span class="comment">/* here one should scan the inp image constructing a wave range from it</span>
-<a name="l05209"></a>05209 <span class="comment">     and not from another table */</span>
-<a name="l05210"></a>05210   check_nomsg(osz=cpl_table_get_nrow(good));
-<a name="l05211"></a>05211   check_nomsg(ksz=cpl_imagelist_get_size(inp));
-<a name="l05212"></a>05212   check_nomsg(isz=cpl_table_get_nrow(good));
-<a name="l05213"></a>05213   check_nomsg(out=cpl_imagelist_new());
-<a name="l05214"></a>05214 
-<a name="l05215"></a>05215 
-<a name="l05216"></a>05216   <span class="keywordflow">for</span>(k=0;k<ksz;k++) {
-<a name="l05217"></a>05217     check_nomsg(img=cpl_imagelist_get_const(inp,k));
-<a name="l05218"></a>05218     check_nomsg(wave_chk=cpl_table_get(full,<span class="stringliteral">"WAVE"</span>,k,&status));
-<a name="l05219"></a>05219     <span class="keywordflow">if</span>(i<isz) {
-<a name="l05220"></a>05220       check_nomsg(wave_sel=cpl_table_get(good,<span class="stringliteral">"WAVE"</span>,i,&status));
-<a name="l05221"></a>05221     }
-<a name="l05222"></a>05222     <span class="comment">// insert cubes with wavelengths with appropriate values only</span>
-<a name="l05223"></a>05223     <span class="keywordflow">if</span>(fabs(wave_chk - wave_sel) < tol) {
-<a name="l05224"></a>05224       check_nomsg(cpl_imagelist_set(out,cpl_image_duplicate(img),i));
-<a name="l05225"></a>05225       i++;
-<a name="l05226"></a>05226     }
-<a name="l05227"></a>05227   }
-<a name="l05228"></a>05228   <span class="keywordflow">if</span>(i==0) {
-<a name="l05229"></a>05229     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No lines selected"</span>);
-<a name="l05230"></a>05230     <span class="keywordflow">goto</span> cleanup;
-<a name="l05231"></a>05231   }
-<a name="l05232"></a>05232   <span class="keywordflow">return</span> out;
-<a name="l05233"></a>05233 
-<a name="l05234"></a>05234  cleanup:
-<a name="l05235"></a>05235 
-<a name="l05236"></a>05236   <span class="keywordflow">return</span> NULL;
-<a name="l05237"></a>05237 
-<a name="l05238"></a>05238 }
-<a name="l05239"></a>05239 
-<a name="l05249"></a>05249 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05250"></a>05250 sinfo_table_extract_finite(<span class="keyword">const</span> cpl_table* in1,
-<a name="l05251"></a>05251                            <span class="keyword">const</span> cpl_table* in2,
-<a name="l05252"></a>05252                                  cpl_table** ou1,
-<a name="l05253"></a>05253                                  cpl_table** ou2)
-<a name="l05254"></a>05254 {
-<a name="l05255"></a>05255 
-<a name="l05256"></a>05256   <span class="keywordtype">int</span> size1=0;
-<a name="l05257"></a>05257   <span class="keywordtype">int</span> size2=0;
-<a name="l05258"></a>05258   <span class="keywordtype">int</span> i=0;
-<a name="l05259"></a>05259   <span class="keywordtype">int</span> ninv1=0;
-<a name="l05260"></a>05260   <span class="keywordtype">int</span> ninv2=0;
-<a name="l05261"></a>05261   <span class="keywordtype">double</span>* pout1=NULL;
-<a name="l05262"></a>05262   <span class="keywordtype">double</span>* pout2=NULL;
-<a name="l05263"></a>05263 
-<a name="l05264"></a>05264   cknull(in1,<span class="stringliteral">"null input image"</span>);
-<a name="l05265"></a>05265   cknull(in2,<span class="stringliteral">"null input image"</span>);
-<a name="l05266"></a>05266   cknull_nomsg(*ou1=cpl_table_duplicate(in1));
-<a name="l05267"></a>05267   cknull_nomsg(*ou2=cpl_table_duplicate(in2));
-<a name="l05268"></a>05268 
-<a name="l05269"></a>05269   check_nomsg(size1=cpl_table_get_nrow(*ou1));
-<a name="l05270"></a>05270   check_nomsg(size2=cpl_table_get_nrow(*ou2));
-<a name="l05271"></a>05271 
-<a name="l05272"></a>05272   check_nomsg(pout1=cpl_table_get_data_double(*ou1,<span class="stringliteral">"VALUE"</span>));
-<a name="l05273"></a>05273   check_nomsg(pout2=cpl_table_get_data_double(*ou2,<span class="stringliteral">"VALUE"</span>));
-<a name="l05274"></a>05274   <span class="keywordflow">for</span>(i=0;i<size1;i++) {
-<a name="l05275"></a>05275     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pout1[i])) {
-<a name="l05276"></a>05276       check_nomsg(cpl_table_set_invalid(*ou1,<span class="stringliteral">"VALUE"</span>,i));
-<a name="l05277"></a>05277       check_nomsg(cpl_table_set_invalid(*ou2,<span class="stringliteral">"VALUE"</span>,i));
-<a name="l05278"></a>05278     }
-<a name="l05279"></a>05279   }
-<a name="l05280"></a>05280   ninv1=cpl_table_count_invalid(*ou1,<span class="stringliteral">"VALUE"</span>);
-<a name="l05281"></a>05281   ninv2=cpl_table_count_invalid(*ou2,<span class="stringliteral">"VALUE"</span>);
-<a name="l05282"></a>05282   <span class="keywordflow">if</span>(ninv1==size1) {
-<a name="l05283"></a>05283     <span class="keywordflow">goto</span> cleanup;
-<a name="l05284"></a>05284   }
-<a name="l05285"></a>05285   <span class="keywordflow">if</span>(ninv2==size2) {
-<a name="l05286"></a>05286     <span class="keywordflow">goto</span> cleanup;
-<a name="l05287"></a>05287   }
-<a name="l05288"></a>05288   check_nomsg(cpl_table_erase_invalid(*ou1));
-<a name="l05289"></a>05289   check_nomsg(cpl_table_erase_invalid(*ou2));
-<a name="l05290"></a>05290   <span class="keywordflow">return</span> (size1-ninv1);
-<a name="l05291"></a>05291 
-<a name="l05292"></a>05292  cleanup:
-<a name="l05293"></a>05293   <span class="keywordflow">return</span> 0;
-<a name="l05294"></a>05294 
-<a name="l05295"></a>05295 }
-<a name="l05296"></a>05296 
-<a name="l05303"></a>05303 <span class="keyword">static</span> cpl_table*
-<a name="l05304"></a>05304 sinfo_image2table(<span class="keyword">const</span> cpl_image* im)
-<a name="l05305"></a>05305 {
-<a name="l05306"></a>05306   cpl_table* out=NULL;
-<a name="l05307"></a>05307   <span class="keywordtype">int</span> sx=0;
-<a name="l05308"></a>05308   <span class="keywordtype">int</span> sy=0;
-<a name="l05309"></a>05309   <span class="keyword">const</span> <span class="keywordtype">double</span>* pim=NULL;
-<a name="l05310"></a>05310   <span class="keywordtype">double</span>* pval=NULL;
-<a name="l05311"></a>05311   <span class="keywordtype">int</span> i=0;
-<a name="l05312"></a>05312   <span class="keywordtype">int</span> j=0;
-<a name="l05313"></a>05313   <span class="keywordtype">int</span> k=0;
-<a name="l05314"></a>05314 
-<a name="l05315"></a>05315   cknull(im,<span class="stringliteral">"input image is NULL"</span>);
-<a name="l05316"></a>05316 
-<a name="l05317"></a>05317   check_nomsg(sx=cpl_image_get_size_x(im));
-<a name="l05318"></a>05318   check_nomsg(sy=cpl_image_get_size_y(im));
-<a name="l05319"></a>05319   check_nomsg(pim=cpl_image_get_data_double_const(im));
-<a name="l05320"></a>05320   check_nomsg(out=cpl_table_new(sx*sy));
-<a name="l05321"></a>05321   check_nomsg(cpl_table_new_column(out,<span class="stringliteral">"VALUE"</span>,CPL_TYPE_DOUBLE));
-<a name="l05322"></a>05322   check_nomsg(pval=cpl_table_get_data_double(out,<span class="stringliteral">"VALUE"</span>));
-<a name="l05323"></a>05323 
-<a name="l05324"></a>05324   <span class="keywordflow">for</span>(j=0;j<sy;j++) {
-<a name="l05325"></a>05325     <span class="keywordflow">for</span>(i=0;i<sx;i++) {
-<a name="l05326"></a>05326       <span class="comment">/*</span>
-<a name="l05327"></a>05327 <span class="comment">      pval[k++]=pim[j*sx+i];</span>
-<a name="l05328"></a>05328 <span class="comment">      sinfo_msg("set tab %f",pim[j*sx+i]);</span>
-<a name="l05329"></a>05329 <span class="comment">      */</span>
-<a name="l05330"></a>05330       cpl_table_set_double(out,<span class="stringliteral">"VALUE"</span>,k++,pim[j*sx+i]);
-<a name="l05331"></a>05331     }
-<a name="l05332"></a>05332   }
-<a name="l05333"></a>05333 
-<a name="l05334"></a>05334   <span class="keywordflow">return</span> out;
-<a name="l05335"></a>05335  cleanup:
-<a name="l05336"></a>05336   sinfo_free_table(&out);
-<a name="l05337"></a>05337   <span class="keywordflow">return</span> NULL;
-<a name="l05338"></a>05338 
-<a name="l05339"></a>05339 }
-<a name="l05348"></a>05348 <span class="keywordtype">int</span>
-<a name="l05349"></a>05349 sinfo_check_screw_values(cpl_table** int_obj,
-<a name="l05350"></a>05350                          cpl_table** int_sky,
-<a name="l05351"></a>05351                          cpl_table* grange,
-<a name="l05352"></a>05352                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol)
-<a name="l05353"></a>05353 {
-<a name="l05354"></a>05354   <span class="comment">// check for screwy values at ends of spectrum</span>
-<a name="l05355"></a>05355   cpl_table* xsky=NULL;
-<a name="l05356"></a>05356   cpl_table* xobj=NULL;
-<a name="l05357"></a>05357 
-<a name="l05358"></a>05358   <span class="keywordtype">double</span> sky_min=0;
-<a name="l05359"></a>05359   <span class="keywordtype">double</span> sky_max=0;
-<a name="l05360"></a>05360   <span class="keywordtype">double</span> gsky_min=0;
-<a name="l05361"></a>05361   <span class="keywordtype">double</span> gsky_max=0;
-<a name="l05362"></a>05362   <span class="keywordtype">double</span> obj_min=0;
-<a name="l05363"></a>05363   <span class="keywordtype">double</span> obj_max=0;
-<a name="l05364"></a>05364   <span class="keywordtype">double</span> gobj_min=0;
-<a name="l05365"></a>05365   <span class="keywordtype">double</span> gobj_max=0;
-<a name="l05366"></a>05366 
-<a name="l05367"></a>05367   cknull(*int_sky,<span class="stringliteral">"Null input sky spectrum"</span>);
-<a name="l05368"></a>05368   cknull(*int_obj,<span class="stringliteral">"Null input obj spectrum"</span>);
-<a name="l05369"></a>05369   cknull(grange,<span class="stringliteral">"Null input wavelength range"</span>);
-<a name="l05370"></a>05370   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span>
-<a name="l05371"></a>05371   <span class="comment">//                             "out_grange0.fits",CPL_IO_DEFAULT));</span>
-<a name="l05372"></a>05372   cknull_nomsg(xsky=sinfo_table_select_range(*int_sky,grange,wtol));
-<a name="l05373"></a>05373   <span class="comment">//check_nomsg(cpl_table_save(xsky,NULL,NULL,</span>
-<a name="l05374"></a>05374   <span class="comment">//                             "out_grange1.fits",CPL_IO_DEFAULT));</span>
-<a name="l05375"></a>05375   check_nomsg(sky_min=cpl_table_get_column_min(xsky,<span class="stringliteral">"INT"</span>));
-<a name="l05376"></a>05376   check_nomsg(sky_max=cpl_table_get_column_max(xsky,<span class="stringliteral">"INT"</span>));
-<a name="l05377"></a>05377   <span class="comment">//sinfo_msg("gskymax=%f gskymin=%f",sky_max,sky_min);</span>
-<a name="l05378"></a>05378 
-<a name="l05379"></a>05379   gsky_max = (sky_max>0) ? sky_max : 0;
-<a name="l05380"></a>05380   gsky_min = (sky_min<0) ? sky_min : 0;
-<a name="l05381"></a>05381   <span class="comment">//gsky_pos = where(int_sky > 1.*gsky_max || int_sky < 1.*gsky_min,gskypos_i);</span>
-<a name="l05382"></a>05382   check_nomsg(cpl_table_select_all(*int_sky));
-<a name="l05383"></a>05383   ck0_nomsg(sinfo_table_set_nan_out_min_max(int_sky,<span class="stringliteral">"INT"</span>,gsky_min,gsky_max));
-<a name="l05384"></a>05384   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span>
-<a name="l05385"></a>05385   <span class="comment">//                             "out_gsky_pos.fits",CPL_IO_DEFAULT));</span>
-<a name="l05386"></a>05386 
-<a name="l05387"></a>05387   sinfo_free_table(&xsky);
-<a name="l05388"></a>05388   <span class="comment">//sinfo_msg("gsky_min=%f gsky_max=%f",gsky_min,gsky_max);</span>
-<a name="l05389"></a>05389 
-<a name="l05390"></a>05390   cknull_nomsg(xobj=sinfo_table_select_range(*int_obj,grange,wtol));
-<a name="l05391"></a>05391   check_nomsg(obj_min=cpl_table_get_column_min(xobj,<span class="stringliteral">"INT"</span>));
-<a name="l05392"></a>05392   check_nomsg(obj_max=cpl_table_get_column_max(xobj,<span class="stringliteral">"INT"</span>));
-<a name="l05393"></a>05393   <span class="comment">//check_nomsg(cpl_table_save(xobj,NULL,NULL,"out_xobj.fits",CPL_IO_DEFAULT));</span>
-<a name="l05394"></a>05394   gobj_max = (obj_max>0) ? obj_max : 0;
-<a name="l05395"></a>05395   gobj_min = (obj_min<0) ? obj_min : 0;
-<a name="l05396"></a>05396   <span class="comment">//gobj_pos=where(int_obj > 1.*gobj_max || int_obj < 1.*gobj_min,gobj_pos_i);</span>
-<a name="l05397"></a>05397   check_nomsg(cpl_table_select_all(*int_obj));
-<a name="l05398"></a>05398   ck0_nomsg(sinfo_table_set_nan_out_min_max(int_obj,<span class="stringliteral">"INT"</span>,gobj_min,gobj_max));
-<a name="l05399"></a>05399   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span>
-<a name="l05400"></a>05400   <span class="comment">//              "out_gobj_pos.fits",CPL_IO_DEFAULT));</span>
-<a name="l05401"></a>05401   <span class="comment">//sinfo_msg("gobj_min=%f gobj_max=%f",gobj_min,gobj_max);</span>
-<a name="l05402"></a>05402   sinfo_free_table(&xobj);
-<a name="l05403"></a>05403 
-<a name="l05404"></a>05404   <span class="keywordflow">return</span> 0;
-<a name="l05405"></a>05405  cleanup:
-<a name="l05406"></a>05406   sinfo_free_table(&xsky);
-<a name="l05407"></a>05407   sinfo_free_table(&xobj);
-<a name="l05408"></a>05408 
-<a name="l05409"></a>05409   <span class="keywordflow">return</span> -1;
-<a name="l05410"></a>05410 
-<a name="l05411"></a>05411 
-<a name="l05412"></a>05412 }
-<a name="l05413"></a>05413 
-<a name="l05414"></a>05414 
-<a name="l05415"></a>05415 
-<a name="l05425"></a>05425 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05426"></a>05426 sinfo_table_fill_column_over_range(cpl_table** inp,
-<a name="l05427"></a>05427                                    <span class="keyword">const</span> cpl_table* ref,
-<a name="l05428"></a>05428                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l05429"></a>05429                                    <span class="keyword">const</span> <span class="keywordtype">double</span> val,
-<a name="l05430"></a>05430                                    <span class="keyword">const</span> <span class="keywordtype">double</span> tol)
-<a name="l05431"></a>05431 {
-<a name="l05432"></a>05432 
-<a name="l05433"></a>05433   <span class="keywordtype">int</span> i=0;
-<a name="l05434"></a>05434   <span class="keywordtype">int</span> k=0;
-<a name="l05435"></a>05435   <span class="keywordtype">int</span> nref=0;
-<a name="l05436"></a>05436   <span class="keywordtype">int</span> ninp=0;
-<a name="l05437"></a>05437 
-<a name="l05438"></a>05438   <span class="keywordtype">double</span>* pwin=NULL;
-<a name="l05439"></a>05439   <span class="keywordtype">double</span>* pcin=NULL;
-<a name="l05440"></a>05440   <span class="keyword">const</span> <span class="keywordtype">double</span>* pwrf=NULL;
-<a name="l05441"></a>05441 
-<a name="l05442"></a>05442   cknull(inp,<span class="stringliteral">"null input table"</span>);
-<a name="l05443"></a>05443   cknull(ref,<span class="stringliteral">"null reference table"</span>);
-<a name="l05444"></a>05444 
-<a name="l05445"></a>05445   check_nomsg(ninp=cpl_table_get_nrow(*inp));
-<a name="l05446"></a>05446   check_nomsg(nref=cpl_table_get_nrow(ref));
-<a name="l05447"></a>05447   check_nomsg(pwin=cpl_table_get_data_double(*inp,<span class="stringliteral">"WAVE"</span>));
-<a name="l05448"></a>05448   check_nomsg(pcin=cpl_table_get_data_double(*inp,col));
-<a name="l05449"></a>05449   check_nomsg(pwrf=cpl_table_get_data_double_const(ref,<span class="stringliteral">"WAVE"</span>));
-<a name="l05450"></a>05450 
-<a name="l05451"></a>05451   k=0;
-<a name="l05452"></a>05452   i=0;
-<a name="l05453"></a>05453   <span class="comment">/*</span>
-<a name="l05454"></a>05454 <span class="comment">  sinfo_msg("ninp=%d nref=%d",ninp,nref);</span>
-<a name="l05455"></a>05455 <span class="comment">  sinfo_msg("winp(0)=%f wref(0)=%f tol=%f diff=%f",</span>
-<a name="l05456"></a>05456 <span class="comment">            pwin[0],pwrf[0],tol,fabs(pwin[0]-pwrf[0]));</span>
-<a name="l05457"></a>05457 <span class="comment">  */</span>
-<a name="l05458"></a>05458   <span class="keywordflow">if</span>(pwin[0]<=pwrf[0]) {
-<a name="l05459"></a>05459     <span class="comment">//sinfo_msg("case 1");</span>
-<a name="l05460"></a>05460     <span class="keywordflow">for</span>(i=0;i<ninp;i++) {
-<a name="l05461"></a>05461       <span class="keywordflow">if</span>(k<nref) {
-<a name="l05462"></a>05462     <span class="comment">/*</span>
-<a name="l05463"></a>05463 <span class="comment">        sinfo_msg("case1: %f %f %f %f %d %d",</span>
-<a name="l05464"></a>05464 <span class="comment">                  fabs(pwin[i] - pwrf[k]),tol,pwin[i],pwrf[k],i,k);</span>
-<a name="l05465"></a>05465 <span class="comment">    */</span>
-<a name="l05466"></a>05466     <span class="keywordflow">if</span>(fabs(pwin[i] - pwrf[k])< tol) {
-<a name="l05467"></a>05467       pcin[i]=val;
-<a name="l05468"></a>05468       k++;
-<a name="l05469"></a>05469     }
-<a name="l05470"></a>05470       }
-<a name="l05471"></a>05471     }
-<a name="l05472"></a>05472   } <span class="keywordflow">else</span> {
-<a name="l05473"></a>05473 
-<a name="l05474"></a>05474     <span class="comment">//pwin[0]>pwrf[0]</span>
-<a name="l05475"></a>05475     <span class="comment">//sinfo_msg("case 2");</span>
-<a name="l05476"></a>05476     <span class="keywordflow">for</span>(k=0;k<nref;k++) {
-<a name="l05477"></a>05477       <span class="keywordflow">if</span>(i<ninp) {
-<a name="l05478"></a>05478     <span class="comment">/*</span>
-<a name="l05479"></a>05479 <span class="comment">        sinfo_msg("case2: %f %f %f %f %d %d",</span>
-<a name="l05480"></a>05480 <span class="comment">                  fabs(pwin[i] - pwrf[k]),tol,pwin[i],pwrf[k],i,k);</span>
-<a name="l05481"></a>05481 <span class="comment">    */</span>
-<a name="l05482"></a>05482     <span class="keywordflow">if</span>(fabs(pwin[i] - pwrf[k])< tol) {
-<a name="l05483"></a>05483       pcin[i]=val;
-<a name="l05484"></a>05484       i++;
-<a name="l05485"></a>05485     }
-<a name="l05486"></a>05486       }
-<a name="l05487"></a>05487     }
-<a name="l05488"></a>05488   }
-<a name="l05489"></a>05489 
-<a name="l05490"></a>05490   <span class="keywordflow">return</span> 0;
-<a name="l05491"></a>05491 
-<a name="l05492"></a>05492  cleanup:
-<a name="l05493"></a>05493   <span class="keywordflow">return</span> -1;
-<a name="l05494"></a>05494 
-<a name="l05495"></a>05495 }
-<a name="l05496"></a>05496 
-<a name="l05497"></a>05497 
-<a name="l05506"></a>05506 <span class="keyword">static</span> cpl_table*
-<a name="l05507"></a>05507 sinfo_table_select_range(cpl_table* inp, cpl_table* ref,<span class="keyword">const</span> <span class="keywordtype">double</span> tol)
-<a name="l05508"></a>05508 {
-<a name="l05509"></a>05509 
-<a name="l05510"></a>05510   cpl_table* out=NULL;
-<a name="l05511"></a>05511   <span class="keywordtype">int</span> ninp=0;
-<a name="l05512"></a>05512   <span class="keywordtype">int</span> nref=0;
-<a name="l05513"></a>05513   <span class="keywordtype">int</span> nout=0;
-<a name="l05514"></a>05514 
-<a name="l05515"></a>05515   <span class="keywordtype">int</span> i=0;
-<a name="l05516"></a>05516   <span class="keywordtype">int</span> k=0;
-<a name="l05517"></a>05517   <span class="keywordtype">double</span>* pou;
-<a name="l05518"></a>05518   <span class="keywordtype">double</span>* prf;
-<a name="l05519"></a>05519   <span class="keywordtype">double</span> wmin=0;
-<a name="l05520"></a>05520   <span class="keywordtype">double</span> wmax=0;
-<a name="l05521"></a>05521   cpl_table* tmp=NULL;
-<a name="l05522"></a>05522   cknull(inp,<span class="stringliteral">"null input table"</span>);
-<a name="l05523"></a>05523   cknull(ref,<span class="stringliteral">"null reference table"</span>);
-<a name="l05524"></a>05524 
-<a name="l05525"></a>05525   check_nomsg(ninp=cpl_table_get_nrow(inp));
-<a name="l05526"></a>05526   check_nomsg(nref=cpl_table_get_nrow(ref));
-<a name="l05527"></a>05527   <span class="keywordflow">if</span>(ninp != nref) {
-<a name="l05528"></a>05528     <span class="comment">//sinfo_msg_warning("ninp != nref");</span>
-<a name="l05529"></a>05529     check_nomsg(wmin=cpl_table_get_column_min(ref,<span class="stringliteral">"WAVE"</span>));
-<a name="l05530"></a>05530     check_nomsg(wmax=cpl_table_get_column_max(ref,<span class="stringliteral">"WAVE"</span>));
-<a name="l05531"></a>05531     <span class="comment">//sinfo_msg_debug("wmin=%f wmax=%f",wmin,wmax);</span>
-<a name="l05532"></a>05532     cpl_table_select_all(inp);
-<a name="l05533"></a>05533     check_nomsg(ninp=cpl_table_and_selected_double(inp,<span class="stringliteral">"WAVE"</span>,
-<a name="l05534"></a>05534                                                    CPL_NOT_LESS_THAN,wmin));
-<a name="l05535"></a>05535     check_nomsg(tmp=cpl_table_extract_selected(inp));
-<a name="l05536"></a>05536     check_nomsg(ninp=cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,
-<a name="l05537"></a>05537                                                    CPL_NOT_GREATER_THAN,wmax));
-<a name="l05538"></a>05538     check_nomsg(out=cpl_table_extract_selected(tmp));
-<a name="l05539"></a>05539     sinfo_free_table(&tmp);
-<a name="l05540"></a>05540   } <span class="keywordflow">else</span> {
-<a name="l05541"></a>05541     check_nomsg(out=cpl_table_duplicate(inp));
-<a name="l05542"></a>05542   }
-<a name="l05543"></a>05543 
-<a name="l05544"></a>05544   check_nomsg(nout=cpl_table_get_nrow(out));
-<a name="l05545"></a>05545   <span class="keywordflow">if</span>(nout == 0) {
-<a name="l05546"></a>05546     <span class="comment">//sinfo_msg("nout=%d",nout);</span>
-<a name="l05547"></a>05547     <span class="keywordflow">goto</span> cleanup;
-<a name="l05548"></a>05548   }
-<a name="l05549"></a>05549   tmp=cpl_table_duplicate(out);
-<a name="l05550"></a>05550   sinfo_free_table(&out);
-<a name="l05551"></a>05551   check_nomsg(pou=cpl_table_get_data_double(tmp,<span class="stringliteral">"WAVE"</span>));
-<a name="l05552"></a>05552   check_nomsg(prf=cpl_table_get_data_double(ref,<span class="stringliteral">"WAVE"</span>));
-<a name="l05553"></a>05553 
-<a name="l05554"></a>05554   check_nomsg(cpl_table_new_column(tmp,<span class="stringliteral">"FLAG"</span>,CPL_TYPE_INT));
-<a name="l05555"></a>05555   check_nomsg(cpl_table_fill_column_window(tmp,<span class="stringliteral">"FLAG"</span>,0,nout,-1));
-<a name="l05556"></a>05556 
-<a name="l05557"></a>05557   k=0;
-<a name="l05558"></a>05558   i=0;
-<a name="l05559"></a>05559 
-<a name="l05560"></a>05560   <span class="comment">//sinfo_msg_debug("nout=%d nref=%d",nout,nref);</span>
-<a name="l05561"></a>05561   <span class="comment">//sinfo_msg_debug("wout(0)=%f wref(0)=%f tol=%f diff=%f",</span>
-<a name="l05562"></a>05562   <span class="comment">//          pou[0],prf[0],tol,fabs(pou[0]-prf[0]));</span>
-<a name="l05563"></a>05563 
-<a name="l05564"></a>05564   <span class="keywordflow">if</span>(pou[0]<=prf[0]) {
-<a name="l05565"></a>05565     <span class="comment">//sinfo_msg_debug("case 1");</span>
-<a name="l05566"></a>05566     <span class="keywordflow">for</span>(i=0;i<nout;i++) {
-<a name="l05567"></a>05567       <span class="keywordflow">if</span>(k<nref) {
-<a name="l05568"></a>05568     <span class="keywordflow">if</span>(fabs(pou[i] - prf[k])< tol) {
-<a name="l05569"></a>05569       check_nomsg(cpl_table_set_int(tmp,<span class="stringliteral">"FLAG"</span>,i,1));
-<a name="l05570"></a>05570       k++;
-<a name="l05571"></a>05571     }
-<a name="l05572"></a>05572       }
-<a name="l05573"></a>05573     }
-<a name="l05574"></a>05574   } <span class="keywordflow">else</span> {
-<a name="l05575"></a>05575 
-<a name="l05576"></a>05576     <span class="comment">//pou[0]>prf[0]</span>
-<a name="l05577"></a>05577     <span class="comment">//sinfo_msg_debug("case 2");</span>
-<a name="l05578"></a>05578     <span class="keywordflow">for</span>(k=0;k<nref;k++) {
-<a name="l05579"></a>05579       <span class="keywordflow">if</span>(i<nout) {
-<a name="l05580"></a>05580     <span class="comment">/*</span>
-<a name="l05581"></a>05581 <span class="comment">        sinfo_msg("check: %f %f %f %f",</span>
-<a name="l05582"></a>05582 <span class="comment">                  fabs(pou[i] - prf[k]),tol,pou[i],prf[k]);</span>
-<a name="l05583"></a>05583 <span class="comment">    */</span>
-<a name="l05584"></a>05584     <span class="keywordflow">if</span>(fabs(pou[i] - prf[k])< tol) {
-<a name="l05585"></a>05585       check_nomsg(cpl_table_set_int(tmp,<span class="stringliteral">"FLAG"</span>,i,1));
-<a name="l05586"></a>05586       i++;
-<a name="l05587"></a>05587     }
-<a name="l05588"></a>05588       }
-<a name="l05589"></a>05589     }
-<a name="l05590"></a>05590   }
-<a name="l05591"></a>05591   <span class="comment">//check_nomsg(cpl_table_save(tmp,NULL,NULL,"out_pre0.fits",CPL_IO_DEFAULT));</span>
-<a name="l05592"></a>05592   check_nomsg(nout=cpl_table_and_selected_int(tmp,<span class="stringliteral">"FLAG"</span>,CPL_GREATER_THAN,0));
-<a name="l05593"></a>05593   check_nomsg(out=cpl_table_extract_selected(tmp));
-<a name="l05594"></a>05594   sinfo_free_table(&tmp);
-<a name="l05595"></a>05595   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FLAG"</span>));
-<a name="l05596"></a>05596   <span class="keywordflow">if</span>(nout==0) {
-<a name="l05597"></a>05597     <span class="keywordflow">goto</span> cleanup;
-<a name="l05598"></a>05598   }
-<a name="l05599"></a>05599   <span class="comment">//check_nomsg(cpl_table_save(out,NULL,NULL,"out_post0.fits",CPL_IO_DEFAULT));</span>
-<a name="l05600"></a>05600   <span class="comment">/* sinfo_msg("nout=%d",nout); */</span>
-<a name="l05601"></a>05601   <span class="keywordflow">return</span> out;
-<a name="l05602"></a>05602 
-<a name="l05603"></a>05603  cleanup:
-<a name="l05604"></a>05604   sinfo_free_table(&tmp);
-<a name="l05605"></a>05605   sinfo_free_table(&out);
-<a name="l05606"></a>05606   <span class="keywordflow">return</span> NULL;
-<a name="l05607"></a>05607 
-<a name="l05608"></a>05608 }
-<a name="l05609"></a>05609 
-<a name="l05619"></a>05619 cpl_table*
-<a name="l05620"></a>05620 sinfo_interpolate_sky(<span class="keyword">const</span> cpl_table* inp,<span class="keyword">const</span> cpl_table* lambdas)
-<a name="l05621"></a>05621 {
-<a name="l05622"></a>05622   <span class="comment">//interpolate sky if necessary</span>
-<a name="l05623"></a>05623   cpl_table* <span class="keyword">new</span>=NULL;
-<a name="l05624"></a>05624   <span class="keyword">new</span> = sinfo_interpolate(inp,lambdas,<span class="stringliteral">"WAVE"</span>,<span class="stringliteral">"lsquadratic"</span>);;
-<a name="l05625"></a>05625 
-<a name="l05626"></a>05626   <span class="keywordflow">return</span> <span class="keyword">new</span>;
-<a name="l05627"></a>05627 }
-<a name="l05628"></a>05628 
-<a name="l05629"></a>05629 
-<a name="l05639"></a>05639 <span class="keyword">static</span> cpl_table*
-<a name="l05640"></a>05640 sinfo_interpolate(<span class="keyword">const</span> cpl_table* inp,
-<a name="l05641"></a>05641                   <span class="keyword">const</span> cpl_table* lambdas,
-<a name="l05642"></a>05642                   <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l05643"></a>05643                   <span class="keyword">const</span> <span class="keywordtype">char</span>* method)
-<a name="l05644"></a>05644 {
-<a name="l05645"></a>05645   <span class="comment">//TODO</span>
-<a name="l05646"></a>05646   cpl_table* out=NULL;
-<a name="l05647"></a>05647 
-<a name="l05648"></a>05648   <span class="comment">//To remove compilation warnings</span>
-<a name="l05649"></a>05649   cknull_nomsg(lambdas);
-<a name="l05650"></a>05650   cknull_nomsg(name);
-<a name="l05651"></a>05651   cknull_nomsg(method);
-<a name="l05652"></a>05652 
-<a name="l05653"></a>05653   out=cpl_table_duplicate(inp);
-<a name="l05654"></a>05654   <span class="keywordflow">return</span> out;
-<a name="l05655"></a>05655 
-<a name="l05656"></a>05656  cleanup:
-<a name="l05657"></a>05657 
-<a name="l05658"></a>05658   <span class="keywordflow">return</span> NULL;
-<a name="l05659"></a>05659 
-<a name="l05660"></a>05660 }
-<a name="l05661"></a>05661 
-<a name="l05662"></a>05662 
-<a name="l05663"></a>05663 
-<a name="l05676"></a>05676 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l05677"></a>05677 sinfo_gaussian_amp(<span class="keywordtype">double</span> area,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off)
-<a name="l05678"></a>05678 {
-<a name="l05679"></a>05679   <span class="keywordflow">return</span> area/sqrt(2*PI_NUMB*sigma*sigma)*
-<a name="l05680"></a>05680          exp(-(x-x0)*(x-x0)/(2*sigma*sigma))+off;
-<a name="l05681"></a>05681 }
-<a name="l05682"></a>05682 
-<a name="l05683"></a>05683 
-<a name="l05696"></a>05696 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l05697"></a>05697 sinfo_gaussian_area(<span class="keywordtype">double</span> amp,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off)
-<a name="l05698"></a>05698 {
-<a name="l05699"></a>05699   <span class="keywordflow">return</span> sqrt(2*PI_NUMB*sigma*sigma)*exp((x-x0)*(x-x0)/(2*sigma*sigma))*
-<a name="l05700"></a>05700          (amp-off);
-<a name="l05701"></a>05701 }
-<a name="l05702"></a>05702 
-<a name="l05703"></a>05703 
-<a name="l05710"></a>05710 <span class="keywordtype">int</span>
-<a name="l05711"></a>05711 sinfo_table_smooth_column(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* c, <span class="keyword">const</span> <span class="keywordtype">int</span> r)
-<a name="l05712"></a>05712 {
-<a name="l05713"></a>05713   <span class="keywordtype">int</span> nrow=0;
-<a name="l05714"></a>05714   <span class="keywordtype">int</span> i=0;
-<a name="l05715"></a>05715   <span class="keywordtype">int</span> j=0;
-<a name="l05716"></a>05716   <span class="keywordtype">double</span>* pval=NULL;
-<a name="l05717"></a>05717   <span class="keywordtype">double</span> sum;
-<a name="l05718"></a>05718   check_nomsg(nrow=cpl_table_get_nrow(*t));
-<a name="l05719"></a>05719   check_nomsg(pval=cpl_table_get_data_double(*t,c));
-<a name="l05720"></a>05720   <span class="keywordflow">for</span>(i=r;i<nrow;i++) {
-<a name="l05721"></a>05721     sum=0;
-<a name="l05722"></a>05722     <span class="keywordflow">for</span>(j=-r;j<=r;j++) {
-<a name="l05723"></a>05723       sum+=pval[i+j];
-<a name="l05724"></a>05724     }
-<a name="l05725"></a>05725     pval[i]=sum/(2*r+1);
-<a name="l05726"></a>05726   }
-<a name="l05727"></a>05727   <span class="keywordflow">return</span> 0;
-<a name="l05728"></a>05728  cleanup:
-<a name="l05729"></a>05729   <span class="keywordflow">return</span> -1;
-<a name="l05730"></a>05730 }
-<a name="l05731"></a>05731 
-<a name="l05740"></a>05740 <span class="keywordtype">void</span>
-<a name="l05741"></a>05741 sinfo_shift_sky(cpl_frame** sky_frm,
-<a name="l05742"></a>05742                 cpl_table** int_sky,
-<a name="l05743"></a>05743                 <span class="keyword">const</span> <span class="keywordtype">double</span> zshift)
-<a name="l05744"></a>05744 {
-<a name="l05745"></a>05745 
-<a name="l05746"></a>05746   <span class="keywordtype">int</span> xsz=0;
-<a name="l05747"></a>05747   <span class="keywordtype">int</span> ysz=0;
-<a name="l05748"></a>05748   <span class="keywordtype">int</span> zsz=0;
-<a name="l05749"></a>05749   cpl_propertylist* plist=NULL;
-<a name="l05750"></a>05750   cpl_imagelist* sky_cub=NULL;
-<a name="l05751"></a>05751   cpl_imagelist* sky_shift=NULL;
-<a name="l05752"></a>05752   cpl_table* int_sky_dup=NULL;
-<a name="l05753"></a>05753 
-<a name="l05754"></a>05754   <span class="keywordtype">double</span> min=0;
-<a name="l05755"></a>05755   <span class="keywordtype">double</span> max=0;
-<a name="l05756"></a>05756 
-<a name="l05757"></a>05757  <span class="comment">/* Get Object relevant information */</span>
-<a name="l05758"></a>05758   cknull_nomsg(plist=cpl_propertylist_load(
-<a name="l05759"></a>05759                      cpl_frame_get_filename(*sky_frm),0));
-<a name="l05760"></a>05760 
-<a name="l05761"></a>05761   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));
-<a name="l05762"></a>05762   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));
-<a name="l05763"></a>05763   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));
-<a name="l05764"></a>05764   sinfo_free_propertylist(&plist);
-<a name="l05765"></a>05765 
-<a name="l05766"></a>05766   cknull_nomsg(sky_cub=cpl_imagelist_load(cpl_frame_get_filename(*sky_frm),
-<a name="l05767"></a>05767                                             CPL_TYPE_FLOAT,0));
-<a name="l05768"></a>05768 
-<a name="l05769"></a>05769   check_nomsg(min=cpl_table_get_column_min(*int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l05770"></a>05770   check_nomsg(max=cpl_table_get_column_max(*int_sky,<span class="stringliteral">"INT"</span>));
-<a name="l05771"></a>05771   int_sky_dup=cpl_table_duplicate(*int_sky);
-<a name="l05772"></a>05772   sinfo_free_table(&(*int_sky));
-<a name="l05773"></a>05773   <span class="comment">/*</span>
-<a name="l05774"></a>05774 <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_int(int_sky_dup,</span>
-<a name="l05775"></a>05775 <span class="comment">                                                     "INT", zshift,&zrest));</span>
-<a name="l05776"></a>05776 <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span>
-<a name="l05777"></a>05777 <span class="comment">                             "out_sky_shift1.fits", CPL_IO_DEFAULT));</span>
-<a name="l05778"></a>05778 <span class="comment">  sinfo_free_table(&(*int_sky));</span>
-<a name="l05779"></a>05779 <span class="comment"></span>
-<a name="l05780"></a>05780 <span class="comment">  sinfo_msg("min=%f max=%f",min,max);</span>
-<a name="l05781"></a>05781 <span class="comment">  check_nomsg(cpl_table_save(int_sky_dup, NULL, NULL,</span>
-<a name="l05782"></a>05782 <span class="comment">                             "out_sky_pre2.fits", CPL_IO_DEFAULT));</span>
-<a name="l05783"></a>05783 <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_poly(int_sky_dup,</span>
-<a name="l05784"></a>05784 <span class="comment">                                                      "INT", zshift,2));</span>
-<a name="l05785"></a>05785 <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span>
-<a name="l05786"></a>05786 <span class="comment">                             "out_sky_shift2.fits", CPL_IO_DEFAULT));</span>
-<a name="l05787"></a>05787 <span class="comment">  */</span>
-<a name="l05788"></a>05788   <span class="comment">//check_nomsg(cpl_table_save(int_sky_dup, NULL, NULL,</span>
-<a name="l05789"></a>05789   <span class="comment">//                             "out_sky_pre2.fits", CPL_IO_DEFAULT));</span>
-<a name="l05790"></a>05790   check_nomsg(*int_sky=sinfo_table_shift_simple(int_sky_dup,<span class="stringliteral">"INT"</span>,zshift));
-<a name="l05791"></a>05791   <span class="comment">/*</span>
-<a name="l05792"></a>05792 <span class="comment">  sinfo_free_table(&(*int_sky));</span>
-<a name="l05793"></a>05793 <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_spline3(int_sky_dup,</span>
-<a name="l05794"></a>05794 <span class="comment">                                                         "INT", zshift));</span>
-<a name="l05795"></a>05795 <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span>
-<a name="l05796"></a>05796 <span class="comment">                             "out_sky_shift3.fits", CPL_IO_DEFAULT));</span>
-<a name="l05797"></a>05797 <span class="comment">  */</span>
-<a name="l05798"></a>05798   sinfo_free_table(&int_sky_dup);
-<a name="l05799"></a>05799   <span class="comment">/*</span>
-<a name="l05800"></a>05800 <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span>
-<a name="l05801"></a>05801 <span class="comment">  check_nomsg(n=cpl_table_and_selected_double(*int_sky,"INT",</span>
-<a name="l05802"></a>05802 <span class="comment">                                              CPL_LESS_THAN,min));</span>
-<a name="l05803"></a>05803 <span class="comment">  ck0_nomsg(sinfo_table_set_column_invalid(int_sky,"INT"));</span>
-<a name="l05804"></a>05804 <span class="comment">  sinfo_msg("n=%d",n);</span>
-<a name="l05805"></a>05805 <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span>
-<a name="l05806"></a>05806 <span class="comment">  check_nomsg(n=cpl_table_and_selected_double(*int_sky,"INT",</span>
-<a name="l05807"></a>05807 <span class="comment">                CPL_GREATER_THAN,max));</span>
-<a name="l05808"></a>05808 <span class="comment">  sinfo_msg("n=%d",n);</span>
-<a name="l05809"></a>05809 <span class="comment">  ck0_nomsg(sinfo_table_set_column_invalid(int_sky,"INT"));</span>
-<a name="l05810"></a>05810 <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span>
-<a name="l05811"></a>05811 <span class="comment">  */</span>
-<a name="l05812"></a>05812   <span class="comment">//check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span>
-<a name="l05813"></a>05813   <span class="comment">//                           "out_sky_shift3.fits", CPL_IO_DEFAULT));</span>
-<a name="l05814"></a>05814 
-<a name="l05815"></a>05815 
-<a name="l05816"></a>05816 
-<a name="l05817"></a>05817   check_nomsg(sky_shift=sinfo_cube_zshift_simple(sky_cub,(<span class="keywordtype">float</span>)zshift));
-<a name="l05818"></a>05818 
-<a name="l05819"></a>05819   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift(sky_cub,zshift,&zrest));</span>
-<a name="l05820"></a>05820   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky1.fits",</span>
-<a name="l05821"></a>05821   <span class="comment">//                 CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l05822"></a>05822 
-<a name="l05823"></a>05823   sinfo_free_imagelist(&sky_shift);
-<a name="l05824"></a>05824   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span>
-<a name="l05825"></a>05825   <span class="comment">//sinfo_msg("zrest=%f",zrest);</span>
-<a name="l05826"></a>05826 
-<a name="l05827"></a>05827   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift_poly(sky_cub,zshift,2));</span>
-<a name="l05828"></a>05828   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky2.fits",</span>
-<a name="l05829"></a>05829   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l05830"></a>05830   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span>
-<a name="l05831"></a>05831 
-<a name="l05832"></a>05832   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift_spline3(sky_cub,zshift));</span>
-<a name="l05833"></a>05833   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky3.fits",</span>
-<a name="l05834"></a>05834   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span>
-<a name="l05835"></a>05835   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span>
-<a name="l05836"></a>05836   sinfo_free_imagelist(&sky_cub);
-<a name="l05837"></a>05837 
-<a name="l05838"></a>05838   <span class="keywordflow">return</span>;
-<a name="l05839"></a>05839 
-<a name="l05840"></a>05840  cleanup:
-<a name="l05841"></a>05841   sinfo_free_table(&int_sky_dup);
-<a name="l05842"></a>05842   sinfo_free_propertylist(&plist);
-<a name="l05843"></a>05843   sinfo_free_imagelist(&sky_shift);
-<a name="l05844"></a>05844   sinfo_free_imagelist(&sky_cub);
-<a name="l05845"></a>05845   <span class="keywordflow">return</span>;
-<a name="l05846"></a>05846 }
-<a name="l05847"></a>05847 
-<a name="l05848"></a>05848 
-<a name="l05855"></a>05855 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l05856"></a>05856 sinfo_convolve_kernel(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad)
-<a name="l05857"></a>05857 {
-<a name="l05858"></a>05858   <span class="keywordtype">int</span> i=0;
-<a name="l05859"></a>05859   <span class="keywordtype">int</span> j=0;
-<a name="l05860"></a>05860   <span class="keywordtype">int</span> np=0;
-<a name="l05861"></a>05861   <span class="keywordtype">double</span> val=0;
-<a name="l05862"></a>05862   <span class="keywordtype">double</span>* pidata=NULL;
-<a name="l05863"></a>05863   <span class="keywordtype">double</span>* pcdata=NULL;
-<a name="l05864"></a>05864   <span class="keywordtype">double</span> dw=0;
-<a name="l05865"></a>05865   <span class="comment">//double dr=0;</span>
-<a name="l05866"></a>05866   <span class="keywordtype">double</span> ws=0;
-<a name="l05867"></a>05867   <span class="keywordtype">double</span> we=0;
-<a name="l05868"></a>05868   cknull(*t,<span class="stringliteral">"null input table"</span>);
-<a name="l05869"></a>05869   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));
-<a name="l05870"></a>05870   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));
-<a name="l05871"></a>05871   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));
-<a name="l05872"></a>05872   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05873"></a>05873   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05874"></a>05874   check_nomsg(np=cpl_table_get_nrow(*t));
-<a name="l05875"></a>05875   dw=(we-ws)/(np-1);
-<a name="l05876"></a>05876   <span class="comment">//dr=(we-ws)/(rad-1);</span>
-<a name="l05877"></a>05877   <span class="comment">/* set to 0 edges */</span>
-<a name="l05878"></a>05878   <span class="keywordflow">for</span>(i=0;i<rad;i++) {
-<a name="l05879"></a>05879     pcdata[i]=0.;
-<a name="l05880"></a>05880   }
-<a name="l05881"></a>05881   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {
-<a name="l05882"></a>05882     pcdata[i]=0.;
-<a name="l05883"></a>05883   }
-<a name="l05884"></a>05884   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {
-<a name="l05885"></a>05885     val=0;
-<a name="l05886"></a>05886     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {
-<a name="l05887"></a>05887       val+=pidata[i+j];
-<a name="l05888"></a>05888     }
-<a name="l05889"></a>05889     <span class="comment">/*val*=dw; */</span>
-<a name="l05890"></a>05890     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));
-<a name="l05891"></a>05891   }
-<a name="l05892"></a>05892   <span class="keywordflow">return</span> 0;
-<a name="l05893"></a>05893 
-<a name="l05894"></a>05894  cleanup:
-<a name="l05895"></a>05895   <span class="keywordflow">return</span> -1;
-<a name="l05896"></a>05896 
-<a name="l05897"></a>05897 }
-<a name="l05898"></a>05898 
-<a name="l05899"></a>05899 
-<a name="l05900"></a>05900 
-<a name="l05908"></a>05908 <span class="keywordtype">int</span>
-<a name="l05909"></a>05909 sinfo_convolve_kernel2(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad)
-<a name="l05910"></a>05910 {
-<a name="l05911"></a>05911   <span class="keywordtype">int</span> i=0;
-<a name="l05912"></a>05912   <span class="keywordtype">int</span> j=0;
-<a name="l05913"></a>05913   <span class="keywordtype">int</span> np=0;
-<a name="l05914"></a>05914   <span class="keywordtype">double</span> val=0;
-<a name="l05915"></a>05915   <span class="keywordtype">double</span>* pidata=NULL;
-<a name="l05916"></a>05916   <span class="keywordtype">double</span>* pcdata=NULL;
-<a name="l05917"></a>05917   <span class="keywordtype">double</span> dw=0;
-<a name="l05918"></a>05918   <span class="keywordtype">double</span> dr=0;
-<a name="l05919"></a>05919   <span class="keywordtype">double</span> ws=0;
-<a name="l05920"></a>05920   <span class="keywordtype">double</span> we=0;
-<a name="l05921"></a>05921   cknull(*t,<span class="stringliteral">"null input table"</span>);
-<a name="l05922"></a>05922   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));
-<a name="l05923"></a>05923   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));
-<a name="l05924"></a>05924   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));
-<a name="l05925"></a>05925   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05926"></a>05926   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05927"></a>05927   check_nomsg(np=cpl_table_get_nrow(*t));
-<a name="l05928"></a>05928   dw=(we-ws)/(np-1);
-<a name="l05929"></a>05929   dr=(we-ws)/(rad-1);
-<a name="l05930"></a>05930   <span class="comment">/* set to 0 edges */</span>
-<a name="l05931"></a>05931   <span class="keywordflow">for</span>(i=0;i<rad;i++) {
-<a name="l05932"></a>05932     pcdata[i]=0.;
-<a name="l05933"></a>05933   }
-<a name="l05934"></a>05934   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {
-<a name="l05935"></a>05935     pcdata[i]=0.;
-<a name="l05936"></a>05936   }
-<a name="l05937"></a>05937   <span class="keywordflow">for</span>(i=0;i<np-rad;i++) {
-<a name="l05938"></a>05938     val=0;
-<a name="l05939"></a>05939     <span class="keywordflow">for</span>(j=0;j<rad;j++) {
-<a name="l05940"></a>05940       val+=pidata[i+j];
-<a name="l05941"></a>05941     }
-<a name="l05942"></a>05942     <span class="comment">/*val*=dw; */</span>
-<a name="l05943"></a>05943     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));
-<a name="l05944"></a>05944   }
-<a name="l05945"></a>05945   <span class="keywordflow">return</span> 0;
-<a name="l05946"></a>05946 
-<a name="l05947"></a>05947  cleanup:
-<a name="l05948"></a>05948   <span class="keywordflow">return</span> -1;
-<a name="l05949"></a>05949 
-<a name="l05950"></a>05950 }
-<a name="l05951"></a>05951 
-<a name="l05952"></a>05952 
-<a name="l05953"></a>05953 
-<a name="l05961"></a>05961 <span class="keywordtype">int</span>
-<a name="l05962"></a>05962 sinfo_convolve_exp(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm)
-<a name="l05963"></a>05963 {
-<a name="l05964"></a>05964   <span class="keywordtype">int</span> i=0;
-<a name="l05965"></a>05965   <span class="keywordtype">int</span> j=0;
-<a name="l05966"></a>05966   <span class="keywordtype">int</span> np=0;
-<a name="l05967"></a>05967   <span class="keywordtype">double</span> ln2=0.693147180560;
-<a name="l05968"></a>05968   <span class="keywordtype">double</span> k=ln2/fwhm;
-<a name="l05969"></a>05969   <span class="keywordtype">double</span> val=0;
-<a name="l05970"></a>05970   <span class="keywordtype">double</span>* pidata=NULL;
-<a name="l05971"></a>05971   <span class="keywordtype">double</span>* pcdata=NULL;
-<a name="l05972"></a>05972   <span class="keywordtype">double</span> dw=0;
-<a name="l05973"></a>05973   <span class="comment">//double dr=0;</span>
-<a name="l05974"></a>05974   <span class="keywordtype">double</span> ws=0;
-<a name="l05975"></a>05975   <span class="keywordtype">double</span> we=0;
-<a name="l05976"></a>05976   cknull(*t,<span class="stringliteral">"null input table"</span>);
-<a name="l05977"></a>05977   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));
-<a name="l05978"></a>05978   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));
-<a name="l05979"></a>05979   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));
-<a name="l05980"></a>05980   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05981"></a>05981   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l05982"></a>05982   check_nomsg(np=cpl_table_get_nrow(*t));
-<a name="l05983"></a>05983   dw=(we-ws)/(np-1);
-<a name="l05984"></a>05984   <span class="comment">//dr=(we-ws)/(rad-1);</span>
-<a name="l05985"></a>05985   <span class="comment">/* set to 0 edges */</span>
-<a name="l05986"></a>05986   <span class="keywordflow">for</span>(i=0;i<rad;i++) {
-<a name="l05987"></a>05987     pcdata[i]=0.;
-<a name="l05988"></a>05988   }
-<a name="l05989"></a>05989   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {
-<a name="l05990"></a>05990     pcdata[i]=0.;
-<a name="l05991"></a>05991   }
-<a name="l05992"></a>05992   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {
-<a name="l05993"></a>05993     val=0;
-<a name="l05994"></a>05994     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {
-<a name="l05995"></a>05995       val+=pidata[i+j]*k*pow(2.0,-2.0*fabs(i-rad)/fwhm);
-<a name="l05996"></a>05996     }
-<a name="l05997"></a>05997     <span class="comment">/*val*=dw; */</span>
-<a name="l05998"></a>05998     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));
-<a name="l05999"></a>05999   }
-<a name="l06000"></a>06000   <span class="keywordflow">return</span> 0;
-<a name="l06001"></a>06001 
-<a name="l06002"></a>06002  cleanup:
-<a name="l06003"></a>06003   <span class="keywordflow">return</span> -1;
-<a name="l06004"></a>06004 
-<a name="l06005"></a>06005 }
-<a name="l06006"></a>06006 
-<a name="l06007"></a>06007 
-<a name="l06016"></a>06016 <span class="keywordtype">int</span>
-<a name="l06017"></a>06017 sinfo_convolve_gauss(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm)
-<a name="l06018"></a>06018 {
-<a name="l06019"></a>06019   <span class="keywordtype">int</span> i=0;
-<a name="l06020"></a>06020   <span class="keywordtype">int</span> j=0;
-<a name="l06021"></a>06021   <span class="keywordtype">int</span> np=0;
-<a name="l06022"></a>06022   <span class="keywordtype">double</span> val=0;
-<a name="l06023"></a>06023   <span class="keywordtype">double</span> sigma=fwhm/2.3548;
-<a name="l06024"></a>06024   <span class="keywordtype">double</span> sigma2=sigma*sigma;
-<a name="l06025"></a>06025   <span class="keywordtype">double</span>* pidata=NULL;
-<a name="l06026"></a>06026   <span class="keywordtype">double</span>* pcdata=NULL;
-<a name="l06027"></a>06027   <span class="keywordtype">double</span> dw=0;
-<a name="l06028"></a>06028   <span class="keywordtype">double</span> dr=0;
-<a name="l06029"></a>06029   <span class="keywordtype">double</span> ws=0;
-<a name="l06030"></a>06030   <span class="keywordtype">double</span> we=0;
-<a name="l06031"></a>06031   <span class="keywordtype">double</span> tx=0;
-<a name="l06032"></a>06032 
-<a name="l06033"></a>06033   cknull(*t,<span class="stringliteral">"null input table"</span>);
-<a name="l06034"></a>06034   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));
-<a name="l06035"></a>06035   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));
-<a name="l06036"></a>06036   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));
-<a name="l06037"></a>06037   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l06038"></a>06038   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));
-<a name="l06039"></a>06039   check_nomsg(np=cpl_table_get_nrow(*t));
-<a name="l06040"></a>06040   dw=(we-ws)/(np-1);
-<a name="l06041"></a>06041   dr=(we-ws)/(rad-1);
-<a name="l06042"></a>06042   <span class="comment">/* set to 0 edges */</span>
-<a name="l06043"></a>06043   <span class="keywordflow">for</span>(i=0;i<rad;i++) {
-<a name="l06044"></a>06044     pcdata[i]=0.;
-<a name="l06045"></a>06045   }
-<a name="l06046"></a>06046   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {
-<a name="l06047"></a>06047     pcdata[i]=0.;
-<a name="l06048"></a>06048   }
-<a name="l06049"></a>06049   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {
-<a name="l06050"></a>06050     val=0;
-<a name="l06051"></a>06051     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {
-<a name="l06052"></a>06052       tx=i-rad;
-<a name="l06053"></a>06053       val+=pidata[i+j]*exp(-tx*tx/2.0/sigma2)/(sigma*sqrt(2.0*PI_NUMB));
-<a name="l06054"></a>06054     }
-<a name="l06055"></a>06055     <span class="comment">/*val*=dw; */</span>
-<a name="l06056"></a>06056     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));
-<a name="l06057"></a>06057   }
-<a name="l06058"></a>06058   <span class="keywordflow">return</span> 0;
-<a name="l06059"></a>06059 
-<a name="l06060"></a>06060  cleanup:
-<a name="l06061"></a>06061   <span class="keywordflow">return</span> -1;
-<a name="l06062"></a>06062 
-<a name="l06063"></a>06063 }
-<a name="l06064"></a>06064 
-<a name="l06065"></a>06065 
-<a name="l06066"></a>06066 
-<a name="l06078"></a>06078 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06079"></a>06079 sinfo_scales_obj_sky_cubes(cpl_imagelist* obj_cub,
-<a name="l06080"></a>06080                             cpl_imagelist* sky_cub,
-<a name="l06081"></a>06081                             cpl_table* bkg,
-<a name="l06082"></a>06082                             cpl_table* rscale,
-<a name="l06083"></a>06083                             cpl_imagelist** obj_cor)
-<a name="l06084"></a>06084 {
-<a name="l06085"></a>06085 
-<a name="l06086"></a>06086 
-<a name="l06087"></a>06087   <span class="keywordtype">int</span> i=0;
-<a name="l06088"></a>06088   <span class="keywordtype">int</span> j=0;
-<a name="l06089"></a>06089   <span class="keywordtype">int</span> k=0;
-<a name="l06090"></a>06090   <span class="keywordtype">int</span> xsz=0;
-<a name="l06091"></a>06091   <span class="keywordtype">int</span> ysz=0;
-<a name="l06092"></a>06092   <span class="keywordtype">int</span> zsz=0;
-<a name="l06093"></a>06093 
-<a name="l06094"></a>06094   <span class="keywordtype">double</span>* podata=NULL;
-<a name="l06095"></a>06095   <span class="keywordtype">double</span>* psdata=NULL;
-<a name="l06096"></a>06096   <span class="keywordtype">double</span>* pbdata=NULL;
-<a name="l06097"></a>06097   <span class="keywordtype">double</span>* pcdata=NULL;
-<a name="l06098"></a>06098   <span class="keywordtype">double</span>* pscale=NULL;
-<a name="l06099"></a>06099 
-<a name="l06100"></a>06100 
-<a name="l06101"></a>06101   cpl_image* imgo=NULL;
-<a name="l06102"></a>06102   cpl_image* imgs=NULL;
-<a name="l06103"></a>06103   cpl_image* imgc=NULL;
-<a name="l06104"></a>06104 
-<a name="l06105"></a>06105 
-<a name="l06106"></a>06106   check_nomsg(imgo=cpl_imagelist_get(obj_cub,0));
-<a name="l06107"></a>06107   check_nomsg(xsz=cpl_image_get_size_x(imgo));
-<a name="l06108"></a>06108   check_nomsg(ysz=cpl_image_get_size_y(imgo));
-<a name="l06109"></a>06109   check_nomsg(zsz=cpl_imagelist_get_size(obj_cub));
-<a name="l06110"></a>06110 
-<a name="l06111"></a>06111   check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));
-<a name="l06112"></a>06112 
-<a name="l06113"></a>06113   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {
-<a name="l06114"></a>06114     check_nomsg(imgo=cpl_imagelist_get(obj_cub,k));
-<a name="l06115"></a>06115     check_nomsg(imgc=cpl_imagelist_get(*obj_cor,k));
-<a name="l06116"></a>06116     check_nomsg(imgs=cpl_imagelist_get(sky_cub,k));
-<a name="l06117"></a>06117 
-<a name="l06118"></a>06118     check_nomsg(podata=cpl_image_get_data_double(imgo));
-<a name="l06119"></a>06119     check_nomsg(pcdata=cpl_image_get_data_double(imgc));
-<a name="l06120"></a>06120     check_nomsg(psdata=cpl_image_get_data_double(imgs));
-<a name="l06121"></a>06121     check_nomsg(pbdata=cpl_table_get_data_double(bkg,<span class="stringliteral">"INT2"</span>));
-<a name="l06122"></a>06122     check_nomsg(pscale=cpl_table_get_data_double(rscale,<span class="stringliteral">"RATIO"</span>));
-<a name="l06123"></a>06123 
-<a name="l06124"></a>06124     <span class="keywordflow">for</span> (j=0;j<ysz; j++) {
-<a name="l06125"></a>06125       <span class="keywordflow">for</span> (i=0;i<xsz; i++) {
-<a name="l06126"></a>06126         <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(podata[i+j*xsz]) &&
-<a name="l06127"></a>06127            !<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(psdata[i+j*xsz]) &&
-<a name="l06128"></a>06128            !<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pbdata[k]) &&
-<a name="l06129"></a>06129            !<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(pscale[k])) {
-<a name="l06130"></a>06130     pcdata[i+j*xsz] = podata[i+j*xsz]-
-<a name="l06131"></a>06131                           (psdata[i+j*xsz]-pbdata[k])*pscale[k];
-<a name="l06132"></a>06132     }
-<a name="l06133"></a>06133       }
-<a name="l06134"></a>06134     }
-<a name="l06135"></a>06135   }
-<a name="l06136"></a>06136 
-<a name="l06137"></a>06137 
-<a name="l06138"></a>06138   <span class="keywordflow">return</span> 0;
-<a name="l06139"></a>06139  cleanup:
-<a name="l06140"></a>06140 
-<a name="l06141"></a>06141   <span class="keywordflow">return</span> -1;
-<a name="l06142"></a>06142 }
-<a name="l06143"></a>06143 
-<a name="l06144"></a>06144 
-<a name="l06161"></a>06161 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06162"></a>06162 sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l06163"></a>06163              <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l06164"></a>06164              <span class="keywordtype">double</span> *result)
-<a name="l06165"></a>06165 {
-<a name="l06166"></a>06166 
-<a name="l06167"></a>06167 
-<a name="l06168"></a>06168   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);
-<a name="l06169"></a>06169   <span class="comment">/*</span>
-<a name="l06170"></a>06170 <span class="comment">  int n=sizeof(x)/sizeof(double);</span>
-<a name="l06171"></a>06171 <span class="comment">  double fmin = sinfo_fac(x[0],a[2]);</span>
-<a name="l06172"></a>06172 <span class="comment">  double fmax = sinfo_fac(x[n-1],a[2]);</span>
-<a name="l06173"></a>06173 <span class="comment">  sinfo_msg("n=%d",n);</span>
-<a name="l06174"></a>06174 <span class="comment">  if(fmax < 0) sinfo_msg("fmax=%f",fmax);</span>
-<a name="l06175"></a>06175 <span class="comment">  */</span>
-<a name="l06176"></a>06176   <span class="comment">//*result = a[0]+a[1]*fac/sinfo_scale_fct;</span>
-<a name="l06177"></a>06177   *result = a[0]+a[1]*fac;
-<a name="l06178"></a>06178 
-<a name="l06179"></a>06179   <span class="keywordflow">return</span> 0;
-<a name="l06180"></a>06180 }
-<a name="l06181"></a>06181 
-<a name="l06205"></a>06205 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06206"></a>06206 sinfo_fitbkg_derivative(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],
-<a name="l06207"></a>06207                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[],
-<a name="l06208"></a>06208                   <span class="keywordtype">double</span> d[])
-<a name="l06209"></a>06209 {
-<a name="l06210"></a>06210   <span class="keywordtype">double</span> c=14387.7;
-<a name="l06211"></a>06211   <span class="comment">/*</span>
-<a name="l06212"></a>06212 <span class="comment">  int n=sizeof(x)/sizeof(double);</span>
-<a name="l06213"></a>06213 <span class="comment">  double fmin = sinfo_fac(x[0],a[2]);</span>
-<a name="l06214"></a>06214 <span class="comment">  double fmax = sinfo_fac(x[n],a[2]);</span>
-<a name="l06215"></a>06215 <span class="comment">  */</span>
-<a name="l06216"></a>06216   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);
-<a name="l06217"></a>06217   <span class="keywordtype">double</span> f2=0;
-<a name="l06218"></a>06218   <span class="comment">//double f1=0;</span>
-<a name="l06219"></a>06219   <span class="keywordtype">double</span> da=0.001;
-<a name="l06220"></a>06220   <span class="comment">//f1=a[0]+a[1]*fac;</span>
-<a name="l06221"></a>06221   <span class="comment">//f2=f1+da*a[0];</span>
-<a name="l06222"></a>06222   <span class="comment">//f2=a[0]+(a[1]+da*a[1])*fac;</span>
-<a name="l06223"></a>06223   f2=a[0]+a[1]*sinfo_fac(x[0],a[2]+da*a[2]);
-<a name="l06224"></a>06224   d[0]=1.;
-<a name="l06225"></a>06225   d[1]=fac;
-<a name="l06226"></a>06226   d[2]=a[1]*fac*fac*x[0]*x[0]*x[0]*x[0]*c/(a[2]*a[2])*exp(c/(x[0]*a[2]));
-<a name="l06227"></a>06227   <span class="comment">//sinfo_msg("d0=%g d1=%g d2=%g",d[0]*a[0]/f,d[1]*a[1]/f,d[2]*a[2]/f);</span>
-<a name="l06228"></a>06228   <span class="comment">//sinfo_msg("comp d1=%g",d[2]);</span>
-<a name="l06229"></a>06229   <span class="comment">//sinfo_msg("real d1=%g",(f2-f1)/(da*a[2]));</span>
-<a name="l06230"></a>06230 
-<a name="l06231"></a>06231   <span class="keywordflow">return</span> 0;
-<a name="l06232"></a>06232 }
-<a name="l06233"></a>06233 
-<a name="l06234"></a>06234 
-<a name="l06235"></a>06235 
-<a name="l06249"></a>06249 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l06250"></a>06250 sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t)
-<a name="l06251"></a>06251 {
-<a name="l06252"></a>06252 
-<a name="l06253"></a>06253   <span class="keywordtype">double</span> c=14387.7;
-<a name="l06254"></a>06254 
-<a name="l06255"></a>06255   <span class="comment">//return pow(x,-5.)/(exp(c/(x*fabs(t)))-1.)/sinfo_scale_fct;</span>
-<a name="l06256"></a>06256   <span class="keywordflow">return</span> pow(x,-5.)/(exp(c/(x*fabs(t)))-1.);
-<a name="l06257"></a>06257 }
-<a name="l06258"></a>06258 
-<a name="l06268"></a>06268 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06269"></a>06269 sinfo_table_threshold(cpl_table** t,
-<a name="l06270"></a>06270                       <span class="keyword">const</span> <span class="keywordtype">char</span>* column,
-<a name="l06271"></a>06271                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_cut,
-<a name="l06272"></a>06272                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_cut,
-<a name="l06273"></a>06273                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_ass,
-<a name="l06274"></a>06274                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_ass)
-<a name="l06275"></a>06275 {
-<a name="l06276"></a>06276 
-<a name="l06277"></a>06277   <span class="keywordtype">int</span> nrow=0;
-<a name="l06278"></a>06278   <span class="keywordtype">int</span> i=0;
-<a name="l06279"></a>06279   <span class="keywordtype">double</span>* pdata=NULL;
-<a name="l06280"></a>06280   cknull(*t,<span class="stringliteral">"null input table!"</span>);
-<a name="l06281"></a>06281 
-<a name="l06282"></a>06282   check_nomsg(nrow=cpl_table_get_nrow(*t));
-<a name="l06283"></a>06283   check_nomsg(pdata=cpl_table_get_data_double(*t,column));
-<a name="l06284"></a>06284 
-<a name="l06285"></a>06285   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l06286"></a>06286 
-<a name="l06287"></a>06287     <span class="keywordflow">if</span>(pdata[i]<low_cut) {
-<a name="l06288"></a>06288       pdata[i]=low_ass;
-<a name="l06289"></a>06289     }
-<a name="l06290"></a>06290     <span class="keywordflow">if</span> (pdata[i] >= hig_cut) {
-<a name="l06291"></a>06291       pdata[i]=hig_ass;
-<a name="l06292"></a>06292     }
-<a name="l06293"></a>06293 
-<a name="l06294"></a>06294   }
-<a name="l06295"></a>06295 
-<a name="l06296"></a>06296   <span class="keywordflow">return</span> 0;
-<a name="l06297"></a>06297 
-<a name="l06298"></a>06298  cleanup:
-<a name="l06299"></a>06299 
-<a name="l06300"></a>06300   <span class="keywordflow">return</span> -1;
-<a name="l06301"></a>06301 }
-<a name="l06302"></a>06302 
-<a name="l06331"></a>06331 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06332"></a>06332 sinfo_table_set(cpl_table** inp,
-<a name="l06333"></a>06333                 <span class="keyword">const</span> cpl_table* ref,
-<a name="l06334"></a>06334                 <span class="keyword">const</span> <span class="keywordtype">double</span> val,
-<a name="l06335"></a>06335                 <span class="keyword">const</span> <span class="keywordtype">double</span> tol)
-<a name="l06336"></a>06336 {
-<a name="l06337"></a>06337 
-<a name="l06338"></a>06338   <span class="keywordtype">int</span> ninp=0;
-<a name="l06339"></a>06339   <span class="keywordtype">int</span> nref=0;
-<a name="l06340"></a>06340   <span class="keywordtype">double</span>* piw=NULL;
-<a name="l06341"></a>06341   <span class="keyword">const</span> <span class="keywordtype">double</span>* prw=NULL;
-<a name="l06342"></a>06342   <span class="keywordtype">double</span>* pir=NULL;
-<a name="l06343"></a>06343   <span class="keywordtype">int</span> i=0;
-<a name="l06344"></a>06344   <span class="keywordtype">int</span> k=0;
-<a name="l06345"></a>06345   cknull(*inp,<span class="stringliteral">"NULL input table"</span>);
-<a name="l06346"></a>06346   cknull(ref,<span class="stringliteral">"NULL reference table"</span>);
-<a name="l06347"></a>06347 
-<a name="l06348"></a>06348   check_nomsg(ninp=cpl_table_get_nrow(*inp));
-<a name="l06349"></a>06349   check_nomsg(nref=cpl_table_get_nrow(ref));
-<a name="l06350"></a>06350 
-<a name="l06351"></a>06351   check_nomsg(prw=cpl_table_get_data_double_const(ref,<span class="stringliteral">"WAVE"</span>));
-<a name="l06352"></a>06352   check_nomsg(piw=cpl_table_get_data_double(*inp,<span class="stringliteral">"WAVE"</span>));
-<a name="l06353"></a>06353   check_nomsg(pir=cpl_table_get_data_double(*inp,<span class="stringliteral">"RATIO"</span>));
-<a name="l06354"></a>06354 
-<a name="l06355"></a>06355 
-<a name="l06356"></a>06356   <span class="keywordflow">for</span>(i=0;i<ninp;i++) {
-<a name="l06357"></a>06357     <span class="comment">/*sinfo_msg("check =%g thresh=%g",fabs(piw[i]-prw[k]),tol); */</span>
-<a name="l06358"></a>06358     <span class="keywordflow">if</span>(fabs(piw[i]-prw[k]) < tol) {
-<a name="l06359"></a>06359       check_nomsg(cpl_table_set_double(*inp,<span class="stringliteral">"RATIO"</span>,i,val));
-<a name="l06360"></a>06360       k++;
-<a name="l06361"></a>06361     }
-<a name="l06362"></a>06362   }
-<a name="l06363"></a>06363   <span class="keywordflow">return</span> 0;
-<a name="l06364"></a>06364 
-<a name="l06365"></a>06365  cleanup:
-<a name="l06366"></a>06366 
-<a name="l06367"></a>06367   <span class="keywordflow">return</span> -1;
-<a name="l06368"></a>06368 
-<a name="l06369"></a>06369 }
-<a name="l06370"></a>06370 
-<a name="l06371"></a>06371 
-<a name="l06372"></a>06372 
-<a name="l06373"></a>06373 <span class="keyword">static</span> cpl_table*
-<a name="l06374"></a>06374 sinfo_table_shift_simple(cpl_table* inp,
-<a name="l06375"></a>06375                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l06376"></a>06376                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift)
-<a name="l06377"></a>06377 {
-<a name="l06378"></a>06378 
-<a name="l06379"></a>06379   <span class="keywordtype">int</span> nrow=0;
-<a name="l06380"></a>06380   cpl_table* out=NULL;
-<a name="l06381"></a>06381   <span class="keywordtype">int</span> is=(int)shift;
-<a name="l06382"></a>06382   <span class="keywordtype">double</span> ds=shift-is;
-<a name="l06383"></a>06383   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l06384"></a>06384   <span class="keywordtype">double</span>* po=NULL;
-<a name="l06385"></a>06385   <span class="keywordtype">double</span> m=0;
-<a name="l06386"></a>06386   <span class="keywordtype">int</span> i=0;
-<a name="l06387"></a>06387   cknull(inp,<span class="stringliteral">"null input table"</span>);
-<a name="l06388"></a>06388 
-<a name="l06389"></a>06389   check_nomsg(nrow=cpl_table_get_nrow(inp));
-<a name="l06390"></a>06390   check_nomsg(out=cpl_table_duplicate(inp));
-<a name="l06391"></a>06391   check_nomsg(cpl_table_fill_column_window(out,col,0,nrow,0));
-<a name="l06392"></a>06392   check_nomsg(pi=cpl_table_get_data_double(inp,col));
-<a name="l06393"></a>06393   check_nomsg(po=cpl_table_get_data_double(out,col));
-<a name="l06394"></a>06394 
-<a name="l06395"></a>06395 
-<a name="l06396"></a>06396   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l06397"></a>06397     <span class="keywordflow">if</span>((i+is)>0 && (i+is+1) < nrow) {
-<a name="l06398"></a>06398       m=pi[i+is+1]-pi[i+is];
-<a name="l06399"></a>06399       po[i]=pi[i+is]+m*ds;
-<a name="l06400"></a>06400     }
-<a name="l06401"></a>06401   }
-<a name="l06402"></a>06402   <span class="keywordflow">return</span> out;
-<a name="l06403"></a>06403   cleanup:
-<a name="l06404"></a>06404   sinfo_free_table(&out);
-<a name="l06405"></a>06405   <span class="keywordflow">return</span> NULL;
-<a name="l06406"></a>06406 
-<a name="l06407"></a>06407 }
-<a name="l06408"></a>06408 
-<a name="l06409"></a>06409 
-<a name="l06410"></a>06410 
-<a name="l06411"></a>06411 
-<a name="l06412"></a>06412 <span class="keyword">static</span> cpl_imagelist*
-<a name="l06413"></a>06413 sinfo_cube_zshift_simple(cpl_imagelist* inp,
-<a name="l06414"></a>06414                         <span class="keyword">const</span> <span class="keywordtype">float</span> shift)
-<a name="l06415"></a>06415 {
-<a name="l06416"></a>06416 
-<a name="l06417"></a>06417   <span class="keywordtype">int</span> nx=0;
-<a name="l06418"></a>06418   <span class="keywordtype">int</span> ny=0;
-<a name="l06419"></a>06419   <span class="keywordtype">int</span> nz=0;
-<a name="l06420"></a>06420 
-<a name="l06421"></a>06421   <span class="keywordtype">int</span> i=0;
-<a name="l06422"></a>06422   <span class="keywordtype">int</span> j=0;
-<a name="l06423"></a>06423   <span class="keywordtype">int</span> k=0;
-<a name="l06424"></a>06424   <span class="keywordtype">int</span> ks=(int)shift;
-<a name="l06425"></a>06425 
-<a name="l06426"></a>06426   <span class="keywordtype">float</span> ds=shift-ks;
-<a name="l06427"></a>06427   <span class="keywordtype">float</span>* pu=NULL;
-<a name="l06428"></a>06428   <span class="keywordtype">float</span>* pl=NULL;
-<a name="l06429"></a>06429   <span class="keywordtype">float</span>* po=NULL;
-<a name="l06430"></a>06430 
-<a name="l06431"></a>06431   <span class="keywordtype">float</span>  int2=0;
-<a name="l06432"></a>06432   <span class="keywordtype">float</span>  int1=0;
-<a name="l06433"></a>06433   <span class="keywordtype">float</span> m=0;
-<a name="l06434"></a>06434 
-<a name="l06435"></a>06435   cpl_imagelist* out=NULL;
-<a name="l06436"></a>06436   cpl_image* imgu=NULL;
-<a name="l06437"></a>06437   cpl_image* imgl=NULL;
-<a name="l06438"></a>06438   cpl_image* imgo=NULL;
-<a name="l06439"></a>06439 
-<a name="l06440"></a>06440 
-<a name="l06441"></a>06441   cknull(inp,<span class="stringliteral">"null input cube"</span>);
-<a name="l06442"></a>06442 
-<a name="l06443"></a>06443   check_nomsg(nz=cpl_imagelist_get_size(inp));
-<a name="l06444"></a>06444   check_nomsg(out=cpl_imagelist_duplicate(inp));
-<a name="l06445"></a>06445   check_nomsg(imgo=cpl_imagelist_get(out,0));
-<a name="l06446"></a>06446   check_nomsg(nx=cpl_image_get_size_x(imgo));
-<a name="l06447"></a>06447   check_nomsg(ny=cpl_image_get_size_y(imgo));
-<a name="l06448"></a>06448 
-<a name="l06449"></a>06449   <span class="keywordflow">for</span>(k=0;k<nz;k++) {
-<a name="l06450"></a>06450     <span class="keywordflow">if</span>((k+ks)>0 && (k+ks+1) < nz) {
-<a name="l06451"></a>06451 
-<a name="l06452"></a>06452       check_nomsg(imgu=cpl_imagelist_get(inp,k+ks+1));
-<a name="l06453"></a>06453       check_nomsg(imgl=cpl_imagelist_get(inp,k+ks));
-<a name="l06454"></a>06454       check_nomsg(imgo=cpl_imagelist_get(out,k));
-<a name="l06455"></a>06455 
-<a name="l06456"></a>06456       check_nomsg(pu=cpl_image_get_data_float(imgu));
-<a name="l06457"></a>06457       check_nomsg(pl=cpl_image_get_data_float(imgl));
-<a name="l06458"></a>06458       check_nomsg(po=cpl_image_get_data_float(imgo));
-<a name="l06459"></a>06459 
-<a name="l06460"></a>06460 
-<a name="l06461"></a>06461       <span class="keywordflow">for</span>(j=0;j<ny;j++) {
-<a name="l06462"></a>06462     <span class="keywordflow">for</span>(i=0;i<nx;i++) {
-<a name="l06463"></a>06463           int2=pu[nx*j+i];
-<a name="l06464"></a>06464           int1=pl[nx*j+i];
-<a name="l06465"></a>06465       m=int2-int1;
-<a name="l06466"></a>06466       po[nx*j+i]=int1+m*ds;
-<a name="l06467"></a>06467     }
-<a name="l06468"></a>06468       }
-<a name="l06469"></a>06469     }
-<a name="l06470"></a>06470 
-<a name="l06471"></a>06471 
-<a name="l06472"></a>06472   }
-<a name="l06473"></a>06473   <span class="keywordflow">return</span> out;
-<a name="l06474"></a>06474   cleanup:
-<a name="l06475"></a>06475   sinfo_free_imagelist(&out);
-<a name="l06476"></a>06476   <span class="keywordflow">return</span> NULL;
-<a name="l06477"></a>06477 
-<a name="l06478"></a>06478 }
-<a name="l06479"></a>06479 
-<a name="l06480"></a>06480 
-<a name="l06491"></a>06491 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06492"></a>06492 sinfo_get_line_ratio(cpl_table* obj_lin,
-<a name="l06493"></a>06493                       cpl_table* obj_cnt,
-<a name="l06494"></a>06494                       cpl_table* sky_lin,
-<a name="l06495"></a>06495                       cpl_table* sky_cnt,
-<a name="l06496"></a>06496                       <span class="keyword">const</span> <span class="keywordtype">int</span> method,
-<a name="l06497"></a>06497                       <span class="keywordtype">double</span>* r)
-<a name="l06498"></a>06498 {
-<a name="l06499"></a>06499 
-<a name="l06500"></a>06500   <span class="keywordtype">int</span> nobj;
-<a name="l06501"></a>06501   <span class="keywordtype">int</span> nsky;
-<a name="l06502"></a>06502   <span class="keywordtype">int</span> i=0;
-<a name="l06503"></a>06503 
-<a name="l06504"></a>06504   cpl_table* obj_dif=NULL;
-<a name="l06505"></a>06505   cpl_table* sky_dif=NULL;
-<a name="l06506"></a>06506 
-<a name="l06507"></a>06507   <span class="keywordtype">double</span>* poi=NULL;
-<a name="l06508"></a>06508   <span class="keywordtype">double</span>* psi=NULL;
-<a name="l06509"></a>06509   <span class="keywordtype">double</span>* pvd=NULL;
-<a name="l06510"></a>06510   <span class="keywordtype">double</span>* pvn=NULL;
-<a name="l06511"></a>06511   <span class="keywordtype">double</span>* pvr=NULL;
-<a name="l06512"></a>06512 
-<a name="l06513"></a>06513   cpl_vector* num=NULL;
-<a name="l06514"></a>06514   cpl_vector* den=NULL;
-<a name="l06515"></a>06515   cpl_vector* rat=NULL;
-<a name="l06516"></a>06516   cpl_vector* wav=NULL;
-<a name="l06517"></a>06517   <span class="keywordtype">double</span> mnum=0;
-<a name="l06518"></a>06518   <span class="keywordtype">double</span> mden=0;
-<a name="l06519"></a>06519   <span class="keywordtype">double</span> tnum=0;
-<a name="l06520"></a>06520   <span class="keywordtype">double</span> tden=0;
-<a name="l06521"></a>06521   cpl_size pows[2];
-<a name="l06522"></a>06522   cpl_polynomial* cfit=NULL;
-<a name="l06523"></a>06523   <span class="keywordtype">double</span> mse=0;
-<a name="l06524"></a>06524 
-<a name="l06525"></a>06525   cknull(obj_lin,<span class="stringliteral">"null obj line table"</span>);
-<a name="l06526"></a>06526   cknull(sky_lin,<span class="stringliteral">"null sky line table"</span>);
-<a name="l06527"></a>06527 
-<a name="l06528"></a>06528   cknull(obj_cnt,<span class="stringliteral">"null obj cont table"</span>);
-<a name="l06529"></a>06529   cknull(sky_cnt,<span class="stringliteral">"null sky cont table"</span>);
-<a name="l06530"></a>06530 
-<a name="l06531"></a>06531 
-<a name="l06532"></a>06532   cknull_nomsg(obj_dif=sinfo_table_subtract_continuum(obj_lin,obj_cnt));
-<a name="l06533"></a>06533   cknull_nomsg(sky_dif=sinfo_table_subtract_continuum(sky_lin,sky_cnt));
-<a name="l06534"></a>06534 
-<a name="l06535"></a>06535   check_nomsg(nobj=cpl_table_get_nrow(obj_dif));
-<a name="l06536"></a>06536   check_nomsg(nsky=cpl_table_get_nrow(sky_dif));
-<a name="l06537"></a>06537 
-<a name="l06538"></a>06538 
-<a name="l06539"></a>06539 
-<a name="l06540"></a>06540   <span class="keywordflow">if</span>(nobj != nsky) {
-<a name="l06541"></a>06541     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"obj and sky table must have the same no of rows!"</span>);
-<a name="l06542"></a>06542     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"nobj=%d nsky=%d"</span>,nobj,nsky);
-<a name="l06543"></a>06543     <span class="keywordflow">goto</span> cleanup;
-<a name="l06544"></a>06544   }
-<a name="l06545"></a>06545   <span class="comment">//sinfo_msg("Object sky residuals/Sky lines ratio determination method=%d",</span>
-<a name="l06546"></a>06546   <span class="comment">//          method);</span>
-<a name="l06547"></a>06547   <span class="keywordflow">if</span>(method == 0) {
-<a name="l06548"></a>06548     ck0_nomsg(sinfo_get_line_ratio_amoeba(obj_dif,sky_dif,r));
-<a name="l06549"></a>06549     sinfo_free_table(&obj_dif);
-<a name="l06550"></a>06550     sinfo_free_table(&sky_dif);
-<a name="l06551"></a>06551    <span class="keywordflow">return</span> 0;
-<a name="l06552"></a>06552   }
-<a name="l06553"></a>06553 
-<a name="l06554"></a>06554 
-<a name="l06555"></a>06555   check_nomsg(poi=cpl_table_get_data_double(obj_dif,<span class="stringliteral">"INT"</span>));
-<a name="l06556"></a>06556   check_nomsg(psi=cpl_table_get_data_double(sky_dif,<span class="stringliteral">"INT"</span>));
-<a name="l06557"></a>06557 
-<a name="l06558"></a>06558   check_nomsg(num=cpl_vector_new(nobj));
-<a name="l06559"></a>06559   check_nomsg(den=cpl_vector_new(nobj));
-<a name="l06560"></a>06560   check_nomsg(rat=cpl_vector_new(nobj));
-<a name="l06561"></a>06561   check_nomsg(cpl_vector_fill(num,0));
-<a name="l06562"></a>06562   check_nomsg(cpl_vector_fill(den,0));
-<a name="l06563"></a>06563   check_nomsg(cpl_vector_fill(rat,0));
-<a name="l06564"></a>06564   check_nomsg(pvd=cpl_vector_get_data(den));
-<a name="l06565"></a>06565   check_nomsg(pvn=cpl_vector_get_data(num));
-<a name="l06566"></a>06566   check_nomsg(pvr=cpl_vector_get_data(rat));
-<a name="l06567"></a>06567 
-<a name="l06568"></a>06568   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {
-<a name="l06569"></a>06569     <span class="keywordflow">if</span>(!<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(psi[i]) &&
-<a name="l06570"></a>06570        !<a class="code" href="group__irplib__utils.html#ga804bfc739b5d55f9797ab881b1034ae4" title="portable isnan">irplib_isnan</a>(poi[i]) &&
-<a name="l06571"></a>06571        !<a class="code" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f" title="portable isinf">irplib_isinf</a>(psi[i]) &&
-<a name="l06572"></a>06572        !<a class="code" href="group__irplib__utils.html#ga09a11edf52efa78ddafce0bb4fa3b71f" title="portable isinf">irplib_isinf</a>(poi[i]) ) {
-<a name="l06573"></a>06573       pvn[i]=psi[i]*poi[i];
-<a name="l06574"></a>06574       pvd[i]=psi[i]*psi[i];
-<a name="l06575"></a>06575       <span class="keywordflow">if</span>(psi[i] != 0) {
-<a name="l06576"></a>06576          pvr[i]=poi[i]/psi[i];
-<a name="l06577"></a>06577       }
-<a name="l06578"></a>06578     }
-<a name="l06579"></a>06579   }
-<a name="l06580"></a>06580   sinfo_free_table(&sky_dif);
-<a name="l06581"></a>06581 
-<a name="l06582"></a>06582   check_nomsg(mnum=cpl_vector_get_median_const(num));
-<a name="l06583"></a>06583   check_nomsg(mden=cpl_vector_get_median_const(den));
-<a name="l06584"></a>06584   check_nomsg(tnum=cpl_vector_get_mean(num)*nobj);
-<a name="l06585"></a>06585   check_nomsg(tden=cpl_vector_get_mean(den)*nobj);
-<a name="l06586"></a>06586 
-<a name="l06587"></a>06587   <span class="comment">//sinfo_msg("mden=%g tden=%g",mden,tden);</span>
-<a name="l06588"></a>06588   <span class="comment">//sinfo_msg("mnum=%g tnum=%g",mnum,tnum);</span>
-<a name="l06589"></a>06589   sinfo_free_my_vector(&num);
-<a name="l06590"></a>06590   sinfo_free_my_vector(&den);
-<a name="l06591"></a>06591   <span class="keywordflow">if</span>(method == 1) {
-<a name="l06592"></a>06592     *r=tnum/tden;
-<a name="l06593"></a>06593   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 2) {
-<a name="l06594"></a>06594     *r=mnum/mden;
-<a name="l06595"></a>06595   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 3) {
-<a name="l06596"></a>06596     *r=cpl_vector_get_median_const(rat);
-<a name="l06597"></a>06597   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 4) {
-<a name="l06598"></a>06598     *r=cpl_vector_get_mean(rat);
-<a name="l06599"></a>06599   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 5) {
-<a name="l06600"></a>06600 
-<a name="l06601"></a>06601     check_nomsg(wav=cpl_vector_wrap(nobj,
-<a name="l06602"></a>06602                     cpl_table_get_data_double(obj_dif,<span class="stringliteral">"WAVE"</span>)));
-<a name="l06603"></a>06603     check_nomsg(cfit=sinfo_polynomial_fit_1d_create(wav,rat,0,&mse));
-<a name="l06604"></a>06604     sinfo_unwrap_vector(&wav);
-<a name="l06605"></a>06605     pows[0]=0;
-<a name="l06606"></a>06606     pows[1]=0;
-<a name="l06607"></a>06607     check_nomsg(*r=cpl_polynomial_get_coeff(cfit,pows));
-<a name="l06608"></a>06608     sinfo_free_polynomial(&cfit);
-<a name="l06609"></a>06609 
-<a name="l06610"></a>06610   }
-<a name="l06611"></a>06611 
-<a name="l06612"></a>06612   sinfo_free_table(&obj_dif);
-<a name="l06613"></a>06613   sinfo_free_my_vector(&rat);
-<a name="l06614"></a>06614   <span class="keywordflow">return</span> 0;
-<a name="l06615"></a>06615  cleanup:
-<a name="l06616"></a>06616   sinfo_free_table(&obj_dif);
-<a name="l06617"></a>06617   sinfo_free_table(&sky_dif);
-<a name="l06618"></a>06618   sinfo_free_my_vector(&num);
-<a name="l06619"></a>06619   sinfo_free_my_vector(&den);
-<a name="l06620"></a>06620   sinfo_free_my_vector(&rat);
-<a name="l06621"></a>06621   sinfo_unwrap_vector(&wav);
-<a name="l06622"></a>06622 
-<a name="l06623"></a>06623   <span class="keywordflow">return</span> -1;
-<a name="l06624"></a>06624 }
-<a name="l06625"></a>06625 
-<a name="l06626"></a>06626 
-<a name="l06627"></a>06627 
-<a name="l06628"></a>06628 
-<a name="l06638"></a>06638 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06639"></a>06639 sinfo_get_line_ratio_amoeba(cpl_table* obj,
-<a name="l06640"></a>06640                             cpl_table* sky,
-<a name="l06641"></a>06641                             <span class="keywordtype">double</span>* r)
-<a name="l06642"></a>06642 {
-<a name="l06643"></a>06643 
-<a name="l06644"></a>06644 
-<a name="l06645"></a>06645   <span class="keywordtype">int</span> i=0;
-<a name="l06646"></a>06646   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=2;
-<a name="l06647"></a>06647   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=1;
-<a name="l06648"></a>06648   <span class="keywordtype">double</span> y[MP];
-<a name="l06649"></a>06649   <span class="keywordtype">double</span> p0[NP];
-<a name="l06650"></a>06650   <span class="keywordtype">double</span>** ap=NULL;
-<a name="l06651"></a>06651   <span class="keywordtype">int</span> nfunc=0;
-<a name="l06652"></a>06652   <span class="keywordtype">int</span> np=0;
-<a name="l06653"></a>06653   check_nomsg(np=cpl_table_get_nrow(obj));
-<a name="l06654"></a>06654   check_nomsg(sa_ox=cpl_vector_wrap(np,cpl_table_get_data_double(obj,<span class="stringliteral">"WAVE"</span>)));
-<a name="l06655"></a>06655   check_nomsg(sa_oy=cpl_vector_wrap(np,cpl_table_get_data_double(obj,<span class="stringliteral">"INT"</span>)));
-<a name="l06656"></a>06656   check_nomsg(sa_sy=cpl_vector_wrap(np,cpl_table_get_data_double(sky,<span class="stringliteral">"INT"</span>)));
-<a name="l06657"></a>06657   <span class="comment">// Amoeba part</span>
-<a name="l06658"></a>06658 
-<a name="l06659"></a>06659 
-<a name="l06660"></a>06660   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));
-<a name="l06661"></a>06661   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l06662"></a>06662     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l06663"></a>06663   }
-<a name="l06664"></a>06664 
-<a name="l06665"></a>06665   ap[0][0]=-1.;
-<a name="l06666"></a>06666   ap[1][0]=+1.;
-<a name="l06667"></a>06667 
-<a name="l06668"></a>06668   <span class="comment">//sinfo_msg("Before amoeba fit");</span>
-<a name="l06669"></a>06669   <span class="comment">//sinfo_msg("ap[0][0]=%g ap[0][1]=%g",ap[0][0],ap[1][0]);</span>
-<a name="l06670"></a>06670   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l06671"></a>06671     p0[0]=ap[i][0];
-<a name="l06672"></a>06672     y[i]=sinfo_fit_sky(p0);
-<a name="l06673"></a>06673   }
-<a name="l06674"></a>06674 
-<a name="l06675"></a>06675 
-<a name="l06676"></a>06676   check_nomsg(sinfo_fit_amoeba(ap,y,NP,AMOEBA_FTOL,sinfo_fit_sky,&nfunc));
-<a name="l06677"></a>06677 
-<a name="l06678"></a>06678   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);
-<a name="l06679"></a>06679   sinfo_msg(<span class="stringliteral">"ap[0][0]=%g ap[0][1]=%g"</span>,ap[0][0],ap[1][0]);
-<a name="l06680"></a>06680 
-<a name="l06681"></a>06681   *r=ap[0][0];
-<a name="l06682"></a>06682 
-<a name="l06683"></a>06683   sinfo_unwrap_vector(&sa_ox);
-<a name="l06684"></a>06684   sinfo_unwrap_vector(&sa_oy);
-<a name="l06685"></a>06685   sinfo_unwrap_vector(&sa_sy);
-<a name="l06686"></a>06686   sinfo_new_destroy_2Ddoublearray(&ap,MP);
-<a name="l06687"></a>06687 
-<a name="l06688"></a>06688 
-<a name="l06689"></a>06689   <span class="keywordflow">return</span> 0;
-<a name="l06690"></a>06690 
-<a name="l06691"></a>06691  cleanup:
-<a name="l06692"></a>06692   sinfo_unwrap_vector(&sa_ox);
-<a name="l06693"></a>06693   sinfo_unwrap_vector(&sa_oy);
-<a name="l06694"></a>06694   sinfo_unwrap_vector(&sa_sy);
-<a name="l06695"></a>06695   sinfo_new_destroy_2Ddoublearray(&ap,MP);
-<a name="l06696"></a>06696 
-<a name="l06697"></a>06697   <span class="keywordflow">return</span> -1;
-<a name="l06698"></a>06698 
-<a name="l06699"></a>06699 }
-<a name="l06700"></a>06700 
-<a name="l06701"></a>06701 
-<a name="l06702"></a>06702 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l06711"></a>06711 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l06712"></a>06712 
-<a name="l06713"></a>06713 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l06714"></a>06714 sinfo_fit_sky(<span class="keywordtype">double</span> p[])
-<a name="l06715"></a>06715 
-<a name="l06716"></a>06716 {
-<a name="l06717"></a>06717   <span class="keywordtype">double</span>* ps=NULL;
-<a name="l06718"></a>06718   <span class="keywordtype">double</span>* po=NULL;
-<a name="l06719"></a>06719   <span class="keywordtype">double</span>* pv=NULL;
-<a name="l06720"></a>06720   cpl_vector* vtmp=NULL;
-<a name="l06721"></a>06721   <span class="keywordtype">int</span> i=0;
-<a name="l06722"></a>06722   <span class="keywordtype">int</span> np=0;
-<a name="l06723"></a>06723   cpl_size pows[2];
-<a name="l06724"></a>06724   <span class="keywordtype">double</span> mse=0;
-<a name="l06725"></a>06725   <span class="keywordtype">double</span> cont=0;
-<a name="l06726"></a>06726   cpl_polynomial* pfit=NULL;
-<a name="l06727"></a>06727 
-<a name="l06728"></a>06728   <span class="keywordtype">double</span> rms=0;
-<a name="l06729"></a>06729 
-<a name="l06730"></a>06730 
-<a name="l06731"></a>06731   <span class="comment">//fit residual obj continuum and subtract it</span>
-<a name="l06732"></a>06732   check_nomsg(pfit=sinfo_polynomial_fit_1d_create(sa_ox,sa_oy,0,&mse));
-<a name="l06733"></a>06733   pows[0]=0;
-<a name="l06734"></a>06734   pows[1]=0;
-<a name="l06735"></a>06735   check_nomsg(cont=cpl_polynomial_get_coeff(pfit,pows));
-<a name="l06736"></a>06736   check_nomsg(sinfo_free_polynomial(&pfit));
-<a name="l06737"></a>06737   check_nomsg(cpl_vector_subtract_scalar(sa_oy,cont));
-<a name="l06738"></a>06738 
-<a name="l06739"></a>06739 
-<a name="l06740"></a>06740   <span class="comment">//fit residual sky continuum and subtract it</span>
-<a name="l06741"></a>06741   check_nomsg(pfit=sinfo_polynomial_fit_1d_create(sa_ox,sa_sy,0,&mse));
-<a name="l06742"></a>06742   pows[0]=0;
-<a name="l06743"></a>06743   pows[1]=0;
-<a name="l06744"></a>06744   check_nomsg(cont=cpl_polynomial_get_coeff(pfit,pows));
-<a name="l06745"></a>06745   check_nomsg(sinfo_free_polynomial(&pfit));
-<a name="l06746"></a>06746   check_nomsg(cpl_vector_subtract_scalar(sa_sy,cont));
-<a name="l06747"></a>06747 
-<a name="l06748"></a>06748   <span class="comment">//computes diff=(obj-conto)-(sky-contsky)*p[0]</span>
-<a name="l06749"></a>06749   check_nomsg(po= cpl_vector_get_data(sa_oy));
-<a name="l06750"></a>06750   check_nomsg(ps= cpl_vector_get_data(sa_sy));
-<a name="l06751"></a>06751 
-<a name="l06752"></a>06752   check_nomsg(np=cpl_vector_get_size(sa_oy));
-<a name="l06753"></a>06753   check_nomsg(vtmp=cpl_vector_new(np));
-<a name="l06754"></a>06754   check_nomsg(pv= cpl_vector_get_data(vtmp));
-<a name="l06755"></a>06755 
-<a name="l06756"></a>06756 
-<a name="l06757"></a>06757   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l06758"></a>06758     pv[i]=po[i]-ps[i]*p[0];
-<a name="l06759"></a>06759   }
-<a name="l06760"></a>06760   <span class="comment">//computes rms diff</span>
-<a name="l06761"></a>06761   check_nomsg(rms=cpl_vector_get_stdev(vtmp));
-<a name="l06762"></a>06762   sinfo_free_my_vector(&vtmp);
-<a name="l06763"></a>06763   <span class="keywordflow">return</span> rms;
-<a name="l06764"></a>06764  cleanup:
-<a name="l06765"></a>06765   sinfo_free_my_vector(&vtmp);
-<a name="l06766"></a>06766   <span class="keywordflow">return</span> -1;
-<a name="l06767"></a>06767 
-<a name="l06768"></a>06768 }
-<a name="l06769"></a>06769 
-<a name="l06770"></a>06770 
-<a name="l06771"></a>06771 
-<a name="l06783"></a>06783 <span class="keyword">static</span> cpl_table*
-<a name="l06784"></a>06784 sinfo_table_interpol(cpl_table* obj_lin,
-<a name="l06785"></a>06785                      cpl_table* obj_cnt,
-<a name="l06786"></a>06786                      cpl_table* sky_lin,
-<a name="l06787"></a>06787                      cpl_table* sky_cnt,
-<a name="l06788"></a>06788                      <span class="keyword">const</span> <span class="keywordtype">double</span> r)
-<a name="l06789"></a>06789 {
-<a name="l06790"></a>06790 
-<a name="l06791"></a>06791   cpl_table* out=NULL;
-<a name="l06792"></a>06792   cpl_table* obj_dif=NULL;
-<a name="l06793"></a>06793   cpl_table* sky_dif=NULL;
-<a name="l06794"></a>06794   cknull(obj_lin,<span class="stringliteral">"null line table"</span>);
-<a name="l06795"></a>06795   cknull(obj_cnt,<span class="stringliteral">"null cont table"</span>);
-<a name="l06796"></a>06796 
-<a name="l06797"></a>06797   cknull_nomsg(obj_dif=sinfo_table_subtract_continuum(obj_lin,obj_cnt));
-<a name="l06798"></a>06798   cknull_nomsg(sky_dif=sinfo_table_subtract_continuum(sky_lin,sky_cnt));
-<a name="l06799"></a>06799 
-<a name="l06800"></a>06800   check_nomsg(out=cpl_table_duplicate(obj_dif));
-<a name="l06801"></a>06801   check_nomsg(cpl_table_duplicate_column(out,<span class="stringliteral">"CSKY"</span>,sky_dif,<span class="stringliteral">"INT"</span>));
-<a name="l06802"></a>06802   check_nomsg(cpl_table_multiply_scalar(out,<span class="stringliteral">"CSKY"</span>,r));
-<a name="l06803"></a>06803   check_nomsg(cpl_table_subtract_columns(out,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"CSKY"</span>));
-<a name="l06804"></a>06804 
-<a name="l06805"></a>06805   sinfo_free_table(&obj_dif);
-<a name="l06806"></a>06806   sinfo_free_table(&sky_dif);
-<a name="l06807"></a>06807 
-<a name="l06808"></a>06808   <span class="keywordflow">return</span> out;
-<a name="l06809"></a>06809 
-<a name="l06810"></a>06810  cleanup:
-<a name="l06811"></a>06811   sinfo_free_table(&obj_dif);
-<a name="l06812"></a>06812   sinfo_free_table(&sky_dif);
-<a name="l06813"></a>06813   sinfo_free_table(&out);
-<a name="l06814"></a>06814   <span class="keywordflow">return</span> NULL;
-<a name="l06815"></a>06815 
-<a name="l06816"></a>06816 }
-<a name="l06817"></a>06817 
-<a name="l06818"></a>06818 
-<a name="l06819"></a>06819 
-<a name="l06820"></a>06820 
-<a name="l06821"></a>06821 
-<a name="l06822"></a>06822 
-<a name="l06831"></a>06831 <span class="keyword">static</span> cpl_table*
-<a name="l06832"></a>06832 sinfo_table_subtract_continuum(cpl_table* lin,
-<a name="l06833"></a>06833                                cpl_table* cnt)
-<a name="l06834"></a>06834 
-<a name="l06835"></a>06835 {
-<a name="l06836"></a>06836 
-<a name="l06837"></a>06837   cpl_table* out=NULL;
-<a name="l06838"></a>06838   <span class="keywordtype">int</span> nlin=0;
-<a name="l06839"></a>06839   <span class="keywordtype">int</span> ncnt=0;
-<a name="l06840"></a>06840   <span class="keywordtype">int</span> i=0;
-<a name="l06841"></a>06841   <span class="keywordtype">double</span>* poi=NULL;
-<a name="l06842"></a>06842   cpl_vector* vx=NULL;
-<a name="l06843"></a>06843   cpl_vector* vy=NULL;
-<a name="l06844"></a>06844   cpl_polynomial* cfit=NULL;
-<a name="l06845"></a>06845   cpl_size pows[2];
-<a name="l06846"></a>06846   <span class="keywordtype">double</span> mse=0;
-<a name="l06847"></a>06847   <span class="keywordtype">double</span> yfit=0;
-<a name="l06848"></a>06848 
-<a name="l06849"></a>06849   cknull(lin,<span class="stringliteral">"null line table"</span>);
-<a name="l06850"></a>06850   cknull(cnt,<span class="stringliteral">"null cont table"</span>);
-<a name="l06851"></a>06851   check_nomsg(out=cpl_table_duplicate(lin));
-<a name="l06852"></a>06852   check_nomsg(cpl_table_new_column(out,<span class="stringliteral">"CONT"</span>,CPL_TYPE_DOUBLE));
-<a name="l06853"></a>06853   check_nomsg(nlin=cpl_table_get_nrow(lin));
-<a name="l06854"></a>06854   check_nomsg(ncnt=cpl_table_get_nrow(cnt));
-<a name="l06855"></a>06855   <span class="comment">//sinfo_msg("nlin=%d",nlin);</span>
-<a name="l06856"></a>06856   check_nomsg(cpl_table_fill_column_window(out,<span class="stringliteral">"CONT"</span>,0,nlin,0));
-<a name="l06857"></a>06857 
-<a name="l06858"></a>06858   <span class="comment">//do a uniform fit</span>
-<a name="l06859"></a>06859   check_nomsg(vx=cpl_vector_wrap(ncnt,cpl_table_get_data_double(cnt,<span class="stringliteral">"WAVE"</span>)));
-<a name="l06860"></a>06860   check_nomsg(vy=cpl_vector_wrap(ncnt,cpl_table_get_data_double(cnt,<span class="stringliteral">"INT"</span>)));
-<a name="l06861"></a>06861   check_nomsg(cfit=sinfo_polynomial_fit_1d_create(vx,vy,0,&mse));
-<a name="l06862"></a>06862   sinfo_unwrap_vector(&vx);
-<a name="l06863"></a>06863   sinfo_unwrap_vector(&vy);
-<a name="l06864"></a>06864 
-<a name="l06865"></a>06865   pows[0]=0;
-<a name="l06866"></a>06866   pows[1]=0;
-<a name="l06867"></a>06867   check_nomsg(yfit=cpl_polynomial_get_coeff(cfit,pows));
-<a name="l06868"></a>06868   sinfo_free_polynomial(&cfit);
-<a name="l06869"></a>06869   <span class="comment">//sinfo_msg("coeff 0=%g",yfit);</span>
-<a name="l06870"></a>06870 
-<a name="l06871"></a>06871   check_nomsg(poi=cpl_table_get_data_double(out,<span class="stringliteral">"CONT"</span>));
-<a name="l06872"></a>06872   <span class="keywordflow">for</span>(i=0;i<nlin;i++) {
-<a name="l06873"></a>06873     poi[i]=yfit;
-<a name="l06874"></a>06874   }
-<a name="l06875"></a>06875 
-<a name="l06876"></a>06876   check_nomsg(cpl_table_subtract_columns(out,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"CONT"</span>));
-<a name="l06877"></a>06877   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"CONT"</span>));
-<a name="l06878"></a>06878 
-<a name="l06879"></a>06879 
-<a name="l06880"></a>06880 
-<a name="l06881"></a>06881   <span class="keywordflow">return</span> out;
-<a name="l06882"></a>06882 
-<a name="l06883"></a>06883  cleanup:
-<a name="l06884"></a>06884   sinfo_unwrap_vector(&vx);
-<a name="l06885"></a>06885   sinfo_unwrap_vector(&vy);
-<a name="l06886"></a>06886   sinfo_free_polynomial(&cfit);
-<a name="l06887"></a>06887   sinfo_free_table(&out);
-<a name="l06888"></a>06888   <span class="keywordflow">return</span> NULL;
-<a name="l06889"></a>06889 
-<a name="l06890"></a>06890 }
-<a name="l06891"></a>06891 
-<a name="l06892"></a>06892 
-<a name="l06893"></a>06893 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l06894"></a>06894 sinfo_compute_line_ratio(cpl_table* obj,
-<a name="l06895"></a>06895                          cpl_table* sky,
-<a name="l06896"></a>06896                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l06897"></a>06897                          <span class="keyword">const</span> <span class="keywordtype">int</span> meth,
-<a name="l06898"></a>06898                          <span class="keyword">const</span> cpl_table* sel_regions,
-<a name="l06899"></a>06899                          cpl_table* cont_regions,
-<a name="l06900"></a>06900                          <span class="keywordtype">double</span>* r)
-<a name="l06901"></a>06901 {
-<a name="l06902"></a>06902   cpl_table* line_regions=NULL;
-<a name="l06903"></a>06903   cpl_table* obj_cnt=NULL;
-<a name="l06904"></a>06904   cpl_table* sky_cnt=NULL;
-<a name="l06905"></a>06905   cpl_table* obj_lin=NULL;
-<a name="l06906"></a>06906   cpl_table* sky_lin=NULL;
-<a name="l06907"></a>06907   cpl_table* lres=NULL;
-<a name="l06908"></a>06908   <span class="keywordtype">double</span> fmed=0;
-<a name="l06909"></a>06909   <span class="keywordtype">double</span> fsdv=0;
-<a name="l06910"></a>06910   <span class="keywordtype">double</span> fthresh=0;
-<a name="l06911"></a>06911   <span class="keywordtype">int</span> fclip_i=0;
-<a name="l06912"></a>06912   <span class="keywordtype">int</span> line_i=0;
-<a name="l06913"></a>06913 
-<a name="l06914"></a>06914 
-<a name="l06915"></a>06915   <span class="comment">//line_regions = med_regions;</span>
-<a name="l06916"></a>06916   check_nomsg(line_regions = cpl_table_duplicate(sel_regions));
-<a name="l06917"></a>06917   <span class="comment">//r = amoeba(1.e-5,function_name='fitsky',p0=[1.],scale=[0.1]);</span>
-<a name="l06918"></a>06918   <span class="comment">//Identify obj lines and continuum, same for sky</span>
-<a name="l06919"></a>06919   check_nomsg(obj_lin=sinfo_table_select_range(obj,line_regions,wtol));
-<a name="l06920"></a>06920   check_nomsg(sky_lin=sinfo_table_select_range(sky,line_regions,wtol));
-<a name="l06921"></a>06921   check_nomsg(obj_cnt=sinfo_table_select_range(obj,cont_regions,wtol));
-<a name="l06922"></a>06922   check_nomsg(sky_cnt=sinfo_table_select_range(sky,cont_regions,wtol));
-<a name="l06923"></a>06923 
-<a name="l06924"></a>06924   ck0_nomsg(sinfo_get_line_ratio(obj_lin,obj_cnt,sky_lin,sky_cnt,meth,r));
-<a name="l06925"></a>06925 
-<a name="l06926"></a>06926 
-<a name="l06927"></a>06927   <span class="comment">//fline_res = (obj_lr[line_regions]-</span>
-<a name="l06928"></a>06928   <span class="comment">//             interpol(obj_lr[cont_regions],llr[cont_regions],</span>
-<a name="l06929"></a>06929   <span class="comment">//             llr[line_regions])) -</span>
-<a name="l06930"></a>06930   <span class="comment">//            (sky_lr[line_regions] -</span>
-<a name="l06931"></a>06931   <span class="comment">//             interpol(sky_lr[cont_regions],llr[cont_regions],</span>
-<a name="l06932"></a>06932   <span class="comment">//</span>
-<a name="l06933"></a>06933   <span class="comment">//            llr[line_regions]))*r[0];</span>
-<a name="l06934"></a>06934   check_nomsg(lres=sinfo_table_interpol(obj_lin,obj_cnt,sky_lin,sky_cnt,*r));
-<a name="l06935"></a>06935 
-<a name="l06936"></a>06936   check_nomsg(fmed = cpl_table_get_column_median(lres,<span class="stringliteral">"INT"</span>));
-<a name="l06937"></a>06937   check_nomsg(fsdv = cpl_table_get_column_stdev(lres,<span class="stringliteral">"INT"</span>));
-<a name="l06938"></a>06938   fthresh=fmed+3*fsdv;
-<a name="l06939"></a>06939   <span class="comment">//fclip = where(abs(fline_res) > fmed+3*fsdv,fclip_i);</span>
-<a name="l06940"></a>06940   check_nomsg(cpl_table_duplicate_column(lres,<span class="stringliteral">"AINT"</span>,lres,<span class="stringliteral">"INT"</span>));
-<a name="l06941"></a>06941   check_nomsg(cpl_table_multiply_columns(lres,<span class="stringliteral">"AINT"</span>,<span class="stringliteral">"INT"</span>));
-<a name="l06942"></a>06942   check_nomsg(cpl_table_power_column(lres,<span class="stringliteral">"AINT"</span>,0.5));
-<a name="l06943"></a>06943   check_nomsg(fclip_i=cpl_table_and_selected_double(lres,<span class="stringliteral">"AINT"</span>,
-<a name="l06944"></a>06944                                                     CPL_GREATER_THAN,
-<a name="l06945"></a>06945                                                     fthresh));
-<a name="l06946"></a>06946   check_nomsg(cpl_table_select_all(lres));
-<a name="l06947"></a>06947 
-<a name="l06948"></a>06948 
-<a name="l06949"></a>06949   <span class="keywordflow">if</span> (fclip_i > 0) {
-<a name="l06950"></a>06950     <span class="comment">//line_regions = line_regions[where(abs(fline_res) < fmed+3*fsdv)];</span>
-<a name="l06951"></a>06951     check_nomsg(line_i=cpl_table_and_selected_double(lres,<span class="stringliteral">"AINT"</span>,
-<a name="l06952"></a>06952                              CPL_LESS_THAN,
-<a name="l06953"></a>06953                              fthresh));
-<a name="l06954"></a>06954     sinfo_free_table(&line_regions);
-<a name="l06955"></a>06955     check_nomsg(line_regions=cpl_table_extract_selected(lres));
-<a name="l06956"></a>06956     sinfo_free_table(&lres);
-<a name="l06957"></a>06957 
-<a name="l06958"></a>06958     check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));
-<a name="l06959"></a>06959     check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"AINT"</span>));
-<a name="l06960"></a>06960 
-<a name="l06961"></a>06961 
-<a name="l06962"></a>06962     <span class="keywordflow">if</span> (line_i >= 3) {
-<a name="l06963"></a>06963 
-<a name="l06964"></a>06964     sinfo_free_table(&obj_lin);
-<a name="l06965"></a>06965     sinfo_free_table(&sky_lin);
-<a name="l06966"></a>06966     check_nomsg(obj_lin=sinfo_table_select_range(obj,line_regions,wtol));
-<a name="l06967"></a>06967     check_nomsg(sky_lin=sinfo_table_select_range(sky,line_regions,wtol));
-<a name="l06968"></a>06968 
-<a name="l06969"></a>06969     sinfo_free_table(&line_regions);
-<a name="l06970"></a>06970 
-<a name="l06971"></a>06971 
-<a name="l06972"></a>06972      <span class="comment">//r = amoeba(1.e-5,function_name='fitsky',p0=[1.],scale=[0.1]);</span>
-<a name="l06973"></a>06973       ck0_nomsg(sinfo_get_line_ratio(obj_lin,obj_cnt,sky_lin,sky_cnt,meth,r));
-<a name="l06974"></a>06974     }
-<a name="l06975"></a>06975   }
-<a name="l06976"></a>06976   *r=fabs(*r);
-<a name="l06977"></a>06977   <span class="comment">//Free memory</span>
-<a name="l06978"></a>06978   sinfo_free_table(&obj_cnt);
-<a name="l06979"></a>06979   sinfo_free_table(&sky_cnt);
-<a name="l06980"></a>06980   sinfo_free_table(&sky_lin);
-<a name="l06981"></a>06981   sinfo_free_table(&obj_lin);
-<a name="l06982"></a>06982   sinfo_free_table(&lres);
-<a name="l06983"></a>06983   sinfo_free_table(&line_regions);
-<a name="l06984"></a>06984 
-<a name="l06985"></a>06985 
-<a name="l06986"></a>06986   <span class="keywordflow">return</span> 0;
-<a name="l06987"></a>06987 
-<a name="l06988"></a>06988 
-<a name="l06989"></a>06989  cleanup:
-<a name="l06990"></a>06990 
-<a name="l06991"></a>06991 
-<a name="l06992"></a>06992   sinfo_free_table(&obj_cnt);
-<a name="l06993"></a>06993   sinfo_free_table(&sky_cnt);
-<a name="l06994"></a>06994   sinfo_free_table(&sky_lin);
-<a name="l06995"></a>06995   sinfo_free_table(&obj_lin);
-<a name="l06996"></a>06996 
-<a name="l06997"></a>06997   sinfo_free_table(&lres);
-<a name="l06998"></a>06998   sinfo_free_table(&line_regions);
-<a name="l06999"></a>06999 
-<a name="l07000"></a>07000   <span class="keywordflow">return</span> -1;
-<a name="l07001"></a>07001 
-<a name="l07002"></a>07002 }
-<a name="l07014"></a>07014 <span class="keyword">static</span> cpl_table*
-<a name="l07015"></a>07015 sinfo_find_rot_waves(
-<a name="l07016"></a>07016              <span class="keyword">const</span> <span class="keywordtype">double</span>  w_rot[],
-<a name="l07017"></a>07017                      <span class="keyword">const</span> <span class="keywordtype">int</span> npix_w,
-<a name="l07018"></a>07018                      <span class="keyword">const</span> <span class="keywordtype">double</span> w_step,
-<a name="l07019"></a>07019                      cpl_table* range
-<a name="l07020"></a>07020              )
-<a name="l07021"></a>07021 {
-<a name="l07022"></a>07022   <span class="keywordtype">int</span> i=0;
-<a name="l07023"></a>07023   <span class="keywordtype">int</span> x_i=0;
-<a name="l07024"></a>07024   <span class="keywordtype">int</span> r_start=0;
-<a name="l07025"></a>07025   <span class="keywordtype">double</span> w_min=0;
-<a name="l07026"></a>07026   <span class="keywordtype">double</span> w_max=0;
-<a name="l07027"></a>07027 
-<a name="l07028"></a>07028   cpl_table* w_sel=NULL;
-<a name="l07029"></a>07029   cpl_table* res=NULL;
-<a name="l07030"></a>07030 
-<a name="l07031"></a>07031   check_nomsg(res = cpl_table_new(0));
-<a name="l07032"></a>07032 
-<a name="l07033"></a>07033   check_nomsg(cpl_table_copy_structure(res,range));
-<a name="l07034"></a>07034 
-<a name="l07035"></a>07035   <span class="keywordflow">for</span> (i=0; i< NROT; i++) {
-<a name="l07036"></a>07036 
-<a name="l07037"></a>07037     <span class="comment">//x = where(lambda > l_rot_low[i]-npixw*cdelto &&</span>
-<a name="l07038"></a>07038     <span class="comment">//          lambda < l_rot_low[i]+npixw*cdelto,x_i);</span>
-<a name="l07039"></a>07039 
-<a name="l07040"></a>07040     w_min=w_rot[i]-npix_w*w_step;
-<a name="l07041"></a>07041     w_max=w_rot[i]+npix_w*w_step;
-<a name="l07042"></a>07042 
-<a name="l07043"></a>07043     check_nomsg(cpl_table_and_selected_double(range,<span class="stringliteral">"WAVE"</span>,
-<a name="l07044"></a>07044                                               CPL_GREATER_THAN,w_min));
-<a name="l07045"></a>07045     check_nomsg(cpl_table_and_selected_double(range,<span class="stringliteral">"WAVE"</span>,
-<a name="l07046"></a>07046                                               CPL_LESS_THAN,w_max));
-<a name="l07047"></a>07047     sinfo_free_table(&w_sel);
-<a name="l07048"></a>07048     check_nomsg(w_sel=cpl_table_extract_selected(range));
-<a name="l07049"></a>07049     check_nomsg(x_i=cpl_table_get_nrow(w_sel));
-<a name="l07050"></a>07050 
-<a name="l07051"></a>07051     <span class="keywordflow">if</span> (x_i > 0) {
-<a name="l07052"></a>07052       check_nomsg(r_start=cpl_table_get_nrow(res));
-<a name="l07053"></a>07053       <span class="comment">//sinfo_msg("i=%d x_i=%d w_min=%g w_max=%g",i,x_i,w_min,w_max);</span>
-<a name="l07054"></a>07054       check_nomsg(cpl_table_insert(res,w_sel,r_start));
-<a name="l07055"></a>07055     }
-<a name="l07056"></a>07056     check_nomsg(cpl_table_select_all(range));
-<a name="l07057"></a>07057   }
-<a name="l07058"></a>07058 
-<a name="l07059"></a>07059   <span class="comment">//res = range[1:cpl_table_get_nrow(res)-1];</span>
-<a name="l07060"></a>07060   sinfo_free_table(&w_sel);
-<a name="l07061"></a>07061 
-<a name="l07062"></a>07062 
-<a name="l07063"></a>07063   <span class="keywordflow">return</span> res;
-<a name="l07064"></a>07064 
-<a name="l07065"></a>07065  cleanup:
-<a name="l07066"></a>07066   sinfo_free_table(&w_sel);
-<a name="l07067"></a>07067   sinfo_free_table(&res);
-<a name="l07068"></a>07068   <span class="keywordflow">return</span> NULL;
-<a name="l07069"></a>07069 
-<a name="l07070"></a>07070 }
-<a name="l07071"></a>07071 
-<a name="l07084"></a>07084 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l07085"></a>07085 sinfo_get_obj_sky_wav_sub(cpl_table* obj,
-<a name="l07086"></a>07086                           cpl_table* sky,
-<a name="l07087"></a>07087                           cpl_table* wav,
-<a name="l07088"></a>07088                           cpl_table* sel,
-<a name="l07089"></a>07089                           <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l07090"></a>07090                           cpl_table** sub_obj,
-<a name="l07091"></a>07091                           cpl_table** sub_sky,
-<a name="l07092"></a>07092                           cpl_table** sub_wav)
-<a name="l07093"></a>07093 
-<a name="l07094"></a>07094 {
-<a name="l07095"></a>07095   cknull_nomsg(*sub_obj = sinfo_table_select_range(obj,sel,wtol));
-<a name="l07096"></a>07096   cknull_nomsg(*sub_sky = sinfo_table_select_range(sky,sel,wtol));
-<a name="l07097"></a>07097   cknull_nomsg(*sub_wav = sinfo_table_select_range(wav,sel,wtol));
-<a name="l07098"></a>07098   <span class="keywordflow">return</span> 0;
-<a name="l07099"></a>07099 
-<a name="l07100"></a>07100  cleanup:
-<a name="l07101"></a>07101   sinfo_free_table(&(*sub_obj));
-<a name="l07102"></a>07102   sinfo_free_table(&(*sub_sky));
-<a name="l07103"></a>07103   sinfo_free_table(&(*sub_wav));
-<a name="l07104"></a>07104 
-<a name="l07105"></a>07105   <span class="keywordflow">return</span> -1;
-<a name="l07106"></a>07106 
-<a name="l07107"></a>07107 }
-<a name="l07108"></a>07108 
-<a name="l07109"></a>07109 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l07110"></a>07110 sinfo_get_sub_regions(cpl_table* sky,
-<a name="l07111"></a>07111                       cpl_table* x1,
-<a name="l07112"></a>07112                       cpl_table* pos,
-<a name="l07113"></a>07113                       <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,
-<a name="l07114"></a>07114                       <span class="keyword">const</span> <span class="keywordtype">int</span> npixw,
-<a name="l07115"></a>07115                       cpl_table** res)
-<a name="l07116"></a>07116 {
-<a name="l07117"></a>07117 
-<a name="l07118"></a>07118   cpl_table* x1_sub=NULL;
-<a name="l07119"></a>07119   cpl_table* x2=NULL;
-<a name="l07120"></a>07120 
-<a name="l07121"></a>07121   <span class="keywordtype">int</span> nrow=0;
-<a name="l07122"></a>07122   <span class="keywordtype">int</span> np=0;
-<a name="l07123"></a>07123 
-<a name="l07124"></a>07124   cknull(sky,<span class="stringliteral">"Null input sky table"</span>);
-<a name="l07125"></a>07125   cknull(x1 ,<span class="stringliteral">"Null input x1 table"</span>);
-<a name="l07126"></a>07126   cknull(pos,<span class="stringliteral">"Null input pos table"</span>);
-<a name="l07127"></a>07127 
-<a name="l07128"></a>07128   check_nomsg(x2=cpl_table_duplicate(sky));
-<a name="l07129"></a>07129   check_nomsg(nrow=cpl_table_get_nrow(sky));
-<a name="l07130"></a>07130   check_nomsg(cpl_table_fill_column_window(x2,<span class="stringliteral">"INT"</span>,0,nrow,0));
-<a name="l07131"></a>07131 
-<a name="l07132"></a>07132   <span class="comment">//x2[x1[pos]] = 10.;</span>
-<a name="l07133"></a>07133   <span class="comment">//x2 = convol(x2,replicate(1,npixw),/edge_truncate,/center);</span>
-<a name="l07134"></a>07134   <span class="comment">//res = where(x2 > 0,hi_i);</span>
-<a name="l07135"></a>07135   <span class="comment">//cpl_table_save(x1, NULL, NULL, "out_x1.fits", CPL_IO_DEFAULT);</span>
-<a name="l07136"></a>07136 
-<a name="l07137"></a>07137   x1_sub=sinfo_table_select_range(x1,pos,wtol);
-<a name="l07138"></a>07138 
-<a name="l07139"></a>07139   <span class="keywordflow">if</span>(x1_sub != NULL) {
-<a name="l07140"></a>07140     ck0_nomsg(sinfo_table_fill_column_over_range(&x2,x1_sub,<span class="stringliteral">"INT"</span>,10.,wtol));
-<a name="l07141"></a>07141     sinfo_free_table(&x1_sub);
-<a name="l07142"></a>07142     check_nomsg(sinfo_convolve_kernel(&x2,npixw/2));
-<a name="l07143"></a>07143     check_nomsg(np=cpl_table_and_selected_double(x2,<span class="stringliteral">"CNV"</span>,CPL_GREATER_THAN,0));
-<a name="l07144"></a>07144     check_nomsg(*res=cpl_table_extract_selected(x2));
-<a name="l07145"></a>07145     sinfo_free_table(&x2);
-<a name="l07146"></a>07146     check_nomsg(cpl_table_erase_column(*res,<span class="stringliteral">"INT"</span>));
-<a name="l07147"></a>07147     check_nomsg(cpl_table_erase_column(*res,<span class="stringliteral">"CNV"</span>));
-<a name="l07148"></a>07148 
-<a name="l07149"></a>07149   } <span class="keywordflow">else</span> {
-<a name="l07150"></a>07150     cpl_error_reset();
-<a name="l07151"></a>07151     sinfo_free_table(&x1_sub);
-<a name="l07152"></a>07152     sinfo_free_table(&x2);
-<a name="l07153"></a>07153 
-<a name="l07154"></a>07154     <span class="keywordflow">return</span> np;
-<a name="l07155"></a>07155   }
-<a name="l07156"></a>07156 
-<a name="l07157"></a>07157   <span class="keywordflow">return</span> np;
-<a name="l07158"></a>07158  cleanup:
-<a name="l07159"></a>07159 
-<a name="l07160"></a>07160   sinfo_free_table(&x1_sub);
-<a name="l07161"></a>07161   sinfo_free_table(&x2);
-<a name="l07162"></a>07162   <span class="keywordflow">return</span> -1;
-<a name="l07163"></a>07163 
-<a name="l07164"></a>07164 }
-<a name="l07165"></a>07165 
-<a name="l07166"></a>07166 <span class="keyword">static</span> cpl_table*
-<a name="l07167"></a>07167 sinfo_table_extract_rest(cpl_table* inp,
-<a name="l07168"></a>07168                          cpl_table* low,
-<a name="l07169"></a>07169                          cpl_table* med,
-<a name="l07170"></a>07170                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol)
-<a name="l07171"></a>07171 {
-<a name="l07172"></a>07172 
-<a name="l07173"></a>07173   cpl_table* out=NULL;
-<a name="l07174"></a>07174   <span class="keywordtype">double</span>* pinp=NULL;
-<a name="l07175"></a>07175   <span class="keywordtype">double</span>* plow=NULL;
-<a name="l07176"></a>07176   <span class="keywordtype">double</span>* pmed=NULL;
-<a name="l07177"></a>07177   <span class="keywordtype">int</span> nlow=0;
-<a name="l07178"></a>07178   <span class="keywordtype">int</span> nmed=0;
-<a name="l07179"></a>07179 
-<a name="l07180"></a>07180   <span class="keywordtype">int</span> nrow=0;
-<a name="l07181"></a>07181   <span class="keywordtype">int</span> i=0;
-<a name="l07182"></a>07182   <span class="keywordtype">int</span> k=0;
-<a name="l07183"></a>07183   cpl_table* tmp=NULL;
-<a name="l07184"></a>07184 
-<a name="l07185"></a>07185   cknull(inp,<span class="stringliteral">"null input table"</span>);
-<a name="l07186"></a>07186 
-<a name="l07187"></a>07187 
-<a name="l07188"></a>07188   check_nomsg(tmp=cpl_table_duplicate(inp));
-<a name="l07189"></a>07189   check_nomsg(nrow=cpl_table_get_nrow(tmp));
-<a name="l07190"></a>07190   check_nomsg(cpl_table_new_column(tmp,<span class="stringliteral">"SEL"</span>,CPL_TYPE_INT));
-<a name="l07191"></a>07191   check_nomsg(cpl_table_fill_column_window_int(tmp,<span class="stringliteral">"SEL"</span>,0,nrow,0));
-<a name="l07192"></a>07192 
-<a name="l07193"></a>07193   check_nomsg(pinp=cpl_table_get_data_double(inp,<span class="stringliteral">"WAVE"</span>));
-<a name="l07194"></a>07194   check_nomsg(plow=cpl_table_get_data_double(low,<span class="stringliteral">"WAVE"</span>));
-<a name="l07195"></a>07195   check_nomsg(pmed=cpl_table_get_data_double(med,<span class="stringliteral">"WAVE"</span>));
-<a name="l07196"></a>07196   nlow=cpl_table_get_nrow(low);
-<a name="l07197"></a>07197 
-<a name="l07198"></a>07198 
-<a name="l07199"></a>07199   <span class="comment">//check_nomsg(cpl_table_save(low,NULL,NULL,"out_low.fits",CPL_IO_DEFAULT));</span>
-<a name="l07200"></a>07200   <span class="keywordflow">if</span>(nlow > 0) {
-<a name="l07201"></a>07201     k=0;
-<a name="l07202"></a>07202     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l07203"></a>07203       <span class="keywordflow">if</span>(fabs(pinp[i]-plow[k]) < wtol) {
-<a name="l07204"></a>07204     cpl_table_set_int(tmp,<span class="stringliteral">"SEL"</span>,k,-1);
-<a name="l07205"></a>07205     k++;
-<a name="l07206"></a>07206       }
-<a name="l07207"></a>07207     }
-<a name="l07208"></a>07208   }
-<a name="l07209"></a>07209   nmed=cpl_table_get_nrow(med);
-<a name="l07210"></a>07210 
-<a name="l07211"></a>07211   k=0;
-<a name="l07212"></a>07212   <span class="keywordflow">if</span>(nmed > 0) {
-<a name="l07213"></a>07213     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l07214"></a>07214       <span class="keywordflow">if</span>(fabs(pinp[i]-pmed[k]) < wtol) {
-<a name="l07215"></a>07215     cpl_table_set_int(tmp,<span class="stringliteral">"SEL"</span>,k,-1);
-<a name="l07216"></a>07216     k++;
-<a name="l07217"></a>07217       }
-<a name="l07218"></a>07218     }
-<a name="l07219"></a>07219   }
-<a name="l07220"></a>07220 
-<a name="l07221"></a>07221   check_nomsg(cpl_table_and_selected_int(tmp,<span class="stringliteral">"SEL"</span>,CPL_GREATER_THAN,-1));
-<a name="l07222"></a>07222   check_nomsg(out=cpl_table_extract_selected(tmp));
-<a name="l07223"></a>07223   sinfo_free_table(&tmp);
-<a name="l07224"></a>07224   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"SEL"</span>));
-<a name="l07225"></a>07225 
-<a name="l07226"></a>07226   <span class="keywordflow">return</span> out;
-<a name="l07227"></a>07227 
-<a name="l07228"></a>07228  cleanup:
-<a name="l07229"></a>07229   sinfo_free_table(&tmp);
-<a name="l07230"></a>07230   <span class="keywordflow">return</span> NULL;
-<a name="l07231"></a>07231 
-<a name="l07232"></a>07232 }
-<a name="l07233"></a>07233 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_skycor.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_skycor.c,v 1.50 2012/05/04 08:11:35 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/05/04 08:11:35 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.50 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_skycor.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_new_cube_ops.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_utl_cube2spectrum.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define BAND_H_WAVE_MIN 1.445 //not used</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define BAND_H_WAVE_MAX 1.820 //not used</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#define BAND_K_WAVE_MIN 1.945 //not used</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define BAND_K_WAVE_MAX 2.460 //not used</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#define BAND_J_WAVE_MIN 1.445 //not used</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define BAND_J_WAVE_MAX 1.82  //not used</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define SINFO_FIT_BKG_TEMP 280.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#define SKY_THRES 0.95</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define SKY_LINE_MAX_CUT 4      </span><span class="comment">/* this should be 4 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define SKY_LINE_MIN_CUT 4      </span><span class="comment">/* this should be 4 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#define XCOR_YSHIFT_KS_CLIP 5      </span><span class="comment">/* this should be 5 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#define HPLANK 6.62606876e-34;   // J s</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define CLIGHT 2.99792458e+08;   // m / s</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#define KBOLTZ 1.3806503e-23;    // J / K</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#define AMOEBA_FTOL 1.e-5</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define NBOUND 14</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define NROT   25</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define N_ITER_FIT_LM 15</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define N_ITER_FIT_AMOEBA 10</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keywordtype">double</span> sinfo_scale_fct=1;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> cpl_vector* sa_vx=NULL;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> cpl_vector* sa_vy=NULL;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> cpl_vector* sa_ox=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> cpl_vector* sa_oy=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> cpl_vector* sa_sy=NULL;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> cpl_vector* sinfo_sky_background_estimate(cpl_vector *spectrum,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                              <span class="keywordtype">int</span> msize,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                              <span class="keywordtype">int</span> fsize);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_scales_obj_sky_cubes(cpl_imagelist* obj_cub,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                             cpl_imagelist* sky_cub,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                             cpl_table* bkg,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                             cpl_table* rscale,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                             cpl_imagelist** obj_cor);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> sinfo_sub_thr_bkg_from_obj_cube(cpl_imagelist* obj_cub,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                 cpl_table* int_sky,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                 cpl_imagelist** obj_cor);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> sinfo_filter_min(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> sinfo_filter_max(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> sinfo_filter_smo(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="keyword">static</span> cpl_imagelist*</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> sinfo_cube_zshift_simple(cpl_imagelist* inp,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> shift);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> sinfo_optimise_sky_sub(<span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> method,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> do_rot,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                        cpl_table* lrange,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                        cpl_table* lambda,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                        cpl_table* lr41,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                        cpl_table* lr52,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                        cpl_table* lr63,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                        cpl_table* lr74,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                        cpl_table* lr02,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                        cpl_table* lr85,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                        cpl_table* lr20,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                        cpl_table* lr31,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                        cpl_table* lr42,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                        cpl_table* lr53,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                        cpl_table* lr64,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                        cpl_table* lr75,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                        cpl_table* lr86,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                        cpl_table* lr97,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                        cpl_table* lr00,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                        cpl_table** int_obj,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                        cpl_table** int_sky,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                        cpl_table** rscale);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> sinfo_shift_sky(cpl_frame** sky_frm,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                 cpl_table** int_sky,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> zshift);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> sinfo_xcorr(cpl_table* int_obj,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>             cpl_table* int_sky,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>             cpl_table* lambda,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> sinfo_interpolate_sky(<span class="keyword">const</span> cpl_table* inp,<span class="keyword">const</span> cpl_table* lambdas);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> sinfo_check_screw_values(cpl_table** int_obj,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                          cpl_table** int_sky,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                          cpl_table* grange,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> sinfo_choose_good_sky_pixels(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                              cpl_image* r_img,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                              cpl_image* g_img,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> min_frac,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                              cpl_image** mask);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> sinfo_sum_spectra(<span class="keyword">const</span> cpl_frame* obj,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                   <span class="keyword">const</span> cpl_frame* sky,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                   cpl_image* mask,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                   cpl_table* wrange,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                   cpl_table** int_obj,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                   cpl_table** int_sky);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> sinfo_thermal_background2(cpl_table* int_sky,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                          cpl_table* lambda,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                          cpl_table* lrange,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>               cpl_table** bkg);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> sinfo_thermal_background(cpl_table* int_sky,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                          cpl_table* lambda,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                          cpl_table* lrange,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> temp,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> niter,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> filter_width,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                          cpl_table** bkg,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                          <span class="keywordtype">int</span>* success_fit);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> sinfo_object_flag_sky_pixels(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                              cpl_table* lambda,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                              cpl_table* mrange,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                  cpl_imagelist* flag_data,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> tol,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                              cpl_image** g_img,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                              cpl_image** r_img,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                              cpl_image** image);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> sinfo_object_flag_low_values(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> cnt,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> sig,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                              cpl_imagelist** flag_data);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> sinfo_object_estimate_noise(cpl_frame* obj_frm, <span class="keyword">const</span> <span class="keywordtype">int</span> obj_noise_fit,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                             <span class="keywordtype">double</span>* centre, <span class="keywordtype">double</span>* noise);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> sinfo_set_ranges(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                  cpl_frame* sky_frm,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                  cpl_parameterlist* cfg,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                  cpl_table** lambda,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                  cpl_table** lr41,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                  cpl_table** lr52,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                  cpl_table** lr63,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                  cpl_table** lr74,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                  cpl_table** lr02,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                  cpl_table** lr85,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                  cpl_table** lr20,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                  cpl_table** lr31,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                  cpl_table** lr42,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                  cpl_table** lr53,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                  cpl_table** lr64,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                  cpl_table** lr75,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                  cpl_table** lr86,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                  cpl_table** lr97,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                  cpl_table** lr00,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                  cpl_table** lrange,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                  cpl_table** grange,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                  cpl_table** lambdas,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                  cpl_table** mrange,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                  <span class="keywordtype">int</span>* sky_interp_sw,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                  <span class="keywordtype">double</span>* dispersion);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> sinfo_table_extract_rest(cpl_table* inp,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                          cpl_table* low,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                          cpl_table* med,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> sinfo_get_sub_regions(cpl_table* sky,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                       cpl_table* x1,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                       cpl_table* pos,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> npixw,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                       cpl_table** sub_regions);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> sinfo_get_obj_sky_wav_sub(cpl_table* obj,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                           cpl_table* sky,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                           cpl_table* wav,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                           cpl_table* sel,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                           <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                           cpl_table** sub_obj,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                           cpl_table** sub_sky,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                           cpl_table** sub_wav);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> </div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> sinfo_find_rot_waves(<span class="keyword">const</span> <span class="keywordtype">double</span> w_rot[],</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                      <span class="keyword">const</span> <span class="keywordtype">int</span> npix_w,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> w_step,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                      cpl_table* range);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> sinfo_compute_line_ratio(cpl_table* obj,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                          cpl_table* sky,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> meth,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                          <span class="keyword">const</span> cpl_table* sel_regions,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                          cpl_table* cont_regions,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                          <span class="keywordtype">double</span>* r);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> sinfo_table_subtract_continuum(cpl_table* lin,cpl_table* cnt);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> sinfo_fit_bkg(<span class="keywordtype">double</span> p[]);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> sinfo_fit_sky(<span class="keywordtype">double</span> p[]);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> sinfo_get_line_ratio_amoeba(cpl_table* obj,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                             cpl_table* sky,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                             <span class="keywordtype">double</span>* r);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> sinfo_table_interpol(cpl_table* obj_lin,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                      cpl_table* obj_cnt,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                      cpl_table* sky_lin,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                      cpl_table* sky_cnt,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> r);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> sinfo_get_line_ratio(cpl_table* obj_lin,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                      cpl_table* obj_cnt,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                      cpl_table* sky_lin,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                      cpl_table* sky_cnt,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                      <span class="keyword">const</span> <span class="keywordtype">int</span> method,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                      <span class="keywordtype">double</span>* r);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> sinfo_table_shift_simple(cpl_table* inp,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> <span class="comment">static int</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">sinfo_table_set_column_invalid(cpl_table** int_sky,const char* col);</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> sinfo_table_set(cpl_table** out,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                 <span class="keyword">const</span> cpl_table* ref,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> tol);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> sinfo_table_threshold(cpl_table** t,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                       <span class="keyword">const</span> <span class="keywordtype">char</span>* column,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_cut,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_cut,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_ass,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_ass);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="keyword">static</span> <span class="keywordtype">double</span> sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                         <span class="keywordtype">double</span> *result);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_fitbkg_derivative(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                                    <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                        <span class="keywordtype">double</span> result[]);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> sinfo_convolve_kernel(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> sinfo_convolve_kernel2(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> sinfo_convolve_gauss(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> sinfo_convolve_exp(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> sinfo_table_sky_obj_flag_nan(cpl_table** s,cpl_table** o, cpl_table** w);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> sinfo_table_set_nan_out_min_max(cpl_table** s,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                 <span class="keyword">const</span> <span class="keywordtype">char</span>* c,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                                 <span class="keyword">const</span> <span class="keywordtype">double</span> max);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> sinfo_gaussian_amp(<span class="keywordtype">double</span> area,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> sinfo_gaussian_area(<span class="keywordtype">double</span> amp,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> sinfo_table_smooth_column(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* c, <span class="keyword">const</span> <span class="keywordtype">int</span> r);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> sinfo_image_flag_nan(cpl_image** im);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> sinfo_table_flag_nan(cpl_table** t,<span class="keyword">const</span> <span class="keywordtype">char</span>* label);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> sinfo_cnt_mask_thresh_and_obj_finite(<span class="keyword">const</span> cpl_image* mask,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> t,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                                      <span class="keyword">const</span> cpl_image* obj);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> sinfo_interpolate(<span class="keyword">const</span> cpl_table* inp,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                   <span class="keyword">const</span> cpl_table* lambdas,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                   <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                   <span class="keyword">const</span> <span class="keywordtype">char</span>* method);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> sinfo_image2table(<span class="keyword">const</span> cpl_image* im);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> sinfo_table_extract_finite(<span class="keyword">const</span> cpl_table* in1,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                            <span class="keyword">const</span> cpl_table* in2,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                                  cpl_table** ou1,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                  cpl_table** ou2);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> sinfo_slice_z(<span class="keyword">const</span> cpl_imagelist* cin,<span class="keyword">const</span> <span class="keywordtype">int</span> i,<span class="keyword">const</span> <span class="keywordtype">int</span> j);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="keyword">static</span> cpl_imagelist*</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> sinfo_imagelist_select_range(<span class="keyword">const</span> cpl_imagelist* inp,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                                   <span class="keyword">const</span> cpl_table* full,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                   <span class="keyword">const</span> cpl_table* good,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                                   <span class="keyword">const</span> <span class="keywordtype">double</span> tol);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> sinfo_table_select_range(cpl_table* inp,</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                               cpl_table* ref,</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> tol);</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> sinfo_table_fill_column_over_range(cpl_table** inp,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                                    <span class="keyword">const</span> cpl_table* ref,</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                                    <span class="keyword">const</span> <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                                    <span class="keyword">const</span> <span class="keywordtype">double</span> tol);</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> sinfo_table_column_dindgen(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* label);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span> </div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> sinfo_skycor_qc*</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> sinfo_skycor_qc_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>  {</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>    sinfo_skycor_qc * sqc;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>    sqc= cpl_malloc(<span class="keyword">sizeof</span>(sinfo_skycor_qc));</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>    sqc->th_fit=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>    <span class="keywordflow">return</span> sqc;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span> </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> sinfo_skycor_qc_delete(sinfo_skycor_qc** sqc)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> {</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   <span class="keywordflow">if</span>((*sqc) != NULL) {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     cpl_free(*sqc);</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     *sqc=NULL;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   }</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> }</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span> sinfo_skycor(cpl_parameterlist * config,</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>              cpl_frame* obj_frm,</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>              cpl_frame* sky_frm,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>              sinfo_skycor_qc* sqc,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>              cpl_imagelist** obj_cor,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>              cpl_table** int_obj)</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   cpl_table* bkg=NULL;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   cpl_table* lambda=NULL;</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   cpl_table* lr41=NULL;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   cpl_table* lr52=NULL;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   cpl_table* lr63=NULL;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   cpl_table* lr74=NULL;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   cpl_table* lr02=NULL;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   cpl_table* lr85=NULL;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   cpl_table* lr20=NULL;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   cpl_table* lr31=NULL;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   cpl_table* lr42=NULL;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   cpl_table* lr53=NULL;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   cpl_table* lr64=NULL;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   cpl_table* lr75=NULL;</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   cpl_table* lr86=NULL;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   cpl_table* lr97=NULL;</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   cpl_table* lr00=NULL;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   cpl_table* lrange=NULL;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   cpl_table* mrange=NULL;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   cpl_table* grange=NULL;</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>   cpl_table* lambdas=NULL;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   cpl_table* int_sky=NULL;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   cpl_image* mask=NULL;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   cpl_image* gpix=NULL;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   cpl_image* ratio=NULL;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   cpl_image* ima_sky=NULL;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   cpl_imagelist* fdata=NULL;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   cpl_table* rscale=NULL;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   <span class="keywordtype">int</span> th_fit=0;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   <span class="keywordtype">double</span> dispersion=0;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   <span class="keywordtype">double</span> noise=0;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   <span class="comment">//double temp=252.69284;</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordtype">double</span> centre=0;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   <span class="keywordtype">int</span> sky_interp_sw=0;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <span class="keywordtype">double</span> wshift=0;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="keywordtype">double</span> pshift=0;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   <span class="keywordtype">int</span> method=0;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   <span class="keywordtype">int</span> do_rot=0;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   <span class="keywordtype">int</span> obj_noise_fit=0;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   <span class="keywordtype">int</span> niter=3;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordtype">double</span> min_frac=0.8;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   <span class="keywordtype">double</span> line_hw=7;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordtype">double</span> fit_temp=280;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   <span class="keywordtype">int</span> filter_width=SINFO_SKY_BKG_FILTER_WIDTH;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   <span class="keywordtype">int</span> llx=0;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="keywordtype">int</span> lly=0;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   <span class="keywordtype">int</span> urx=64;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>   <span class="keywordtype">int</span> ury=64;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   cpl_imagelist* obj_cub=NULL;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   cpl_imagelist* sky_cub=NULL;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keywordtype">int</span> sub_thr_bkg=0;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> </div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.min_frac"</span>));</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   check_nomsg(min_frac=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.line_half_width"</span>));</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   check_nomsg(line_hw=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sky_bkg_filter_width"</span>));</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   check_nomsg(filter_width=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.scale_method"</span>));</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   check_nomsg(method=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>));</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   check_nomsg(do_rot=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sub_thr_bkg_from_obj"</span>));</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   check_nomsg(sub_thr_bkg=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.fit_obj_noise"</span>));</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   check_nomsg(obj_noise_fit=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.niter"</span>));</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   check_nomsg(niter=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span> </div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.pshift"</span>));</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   check_nomsg(pshift=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> </div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.llx"</span>));</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   check_nomsg(llx=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span> </div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.lly"</span>));</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   check_nomsg(lly=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.urx"</span>));</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   check_nomsg(urx=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   check_nomsg(p=cpl_parameterlist_find(config,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor.ury"</span>));</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   check_nomsg(ury=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   <span class="comment">// set wavelength ranges</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   sinfo_msg(<span class="stringliteral">"Set wavelength ranges"</span>);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>   ck0(sinfo_set_ranges(obj_frm,sky_frm,config,&lambda,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                        &lr41,&lr52,&lr63,&lr74,&lr02,&lr85,&lr20,&lr31,&lr42,</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                        &lr53,&lr64,&lr75,&lr86,&lr97,&lr00,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                        &lrange,&grange,&lambdas,&mrange,&sky_interp_sw,</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>                        &dispersion),<span class="stringliteral">"Setting wavelength ranges"</span>);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange.fits",</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> <span class="comment">  sinfo_msg("lr20=%d",cpl_table_get_nrow(lr20));</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> <span class="comment">  sinfo_msg("lr31=%d",cpl_table_get_nrow(lr31));</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> <span class="comment">  sinfo_msg("lr42=%d",cpl_table_get_nrow(lr42));</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> <span class="comment">  sinfo_msg("lr53=%d",cpl_table_get_nrow(lr53));</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> <span class="comment">  sinfo_msg("lr64=%d",cpl_table_get_nrow(lr64));</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> <span class="comment">  sinfo_msg("lr75=%d",cpl_table_get_nrow(lr75));</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> <span class="comment">  sinfo_msg("lr86=%d",cpl_table_get_nrow(lr86));</span></div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> <span class="comment">  sinfo_msg("lr97=%d",cpl_table_get_nrow(lr97));</span></div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="comment">  sinfo_msg("lr00=%d",cpl_table_get_nrow(lr00));</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> <span class="comment"></span></div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="comment">  sinfo_msg("min_lrange=%f",cpl_table_get_column_min(lrange,"INDEX"));</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> <span class="comment">  sinfo_msg("min_grange=%f",cpl_table_get_column_min(grange,"INDEX"));</span></div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> <span class="comment">  sinfo_msg("min_srange=%f",cpl_table_get_column_min(lambdas,"WAVE"));</span></div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> <span class="comment">  sinfo_msg("min_mrange=%f",cpl_table_get_column_min(mrange,"INDEX"));</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> <span class="comment"></span></div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> <span class="comment">  sinfo_msg("max_lrange=%f",cpl_table_get_column_max(lrange,"INDEX"));</span></div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> <span class="comment">  sinfo_msg("max_grange=%f",cpl_table_get_column_max(grange,"INDEX"));</span></div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> <span class="comment">  sinfo_msg("max_srange=%f",cpl_table_get_column_max(lambdas,"WAVE"));</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="comment">  sinfo_msg("max_mrange=%f",cpl_table_get_column_max(mrange,"INDEX"));</span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> </div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   sinfo_msg(<span class="stringliteral">"Estimate noise"</span>);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   ck0(sinfo_object_estimate_noise(obj_frm,obj_noise_fit,&centre,&noise),</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                                   <span class="stringliteral">"Estimating noise"</span>);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   sinfo_msg(<span class="stringliteral">"Background=%f Noise=%f"</span>,centre,noise);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   sinfo_msg(<span class="stringliteral">"Flag object low_levels"</span>);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   ck0(sinfo_object_flag_low_values(obj_frm,centre,noise,&fdata),</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>       <span class="stringliteral">"Flagging low pix"</span>);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="comment">//cpl_imagelist_save(fdata,"out_fdata.fits",</span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   <span class="comment">//                   CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span> </div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   sinfo_msg(<span class="stringliteral">"Flag sky pixels"</span>);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   ck0(sinfo_object_flag_sky_pixels(obj_frm,lambda,mrange,fdata,dispersion,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                                    &gpix,&ratio,&ima_sky),</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                                    <span class="stringliteral">"Flagging sky pixels"</span>);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   <span class="comment">//cpl_image_save(gpix,"out_gpix.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   <span class="comment">//                 NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   <span class="comment">//cpl_image_save(ratio,"out_ratio.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="comment">//                 NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="comment">//cpl_image_save(ima_sky,"out_ima_sky.fits",</span></div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="comment">//               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   <span class="comment">// choose pixels which seems to be good sky pixels</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   <span class="comment">// (95% spectral pixels are flagged)</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   sinfo_msg(<span class="stringliteral">"Choose good sky (with > 95%% good spectral) pixels"</span>);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   ck0(sinfo_choose_good_sky_pixels(obj_frm,ratio,gpix,min_frac,&mask),</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>       <span class="stringliteral">"Choosing good sky pixels"</span>);</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   <span class="comment">//cpl_image_save(mask,"out_mask.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>   <span class="comment">// threshold ratio for fraction 'minfract' of spatial pixels to be 'sky'</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>   <span class="comment">//sinfo_msg("To do: flag_threshold_sky_pixels");</span></div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   <span class="comment">// sum spectra of flagged pixels in object and sky frames</span></div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   sinfo_msg(<span class="stringliteral">"Sum obj and sky spectra"</span>);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   ck0(sinfo_sum_spectra(obj_frm,sky_frm,mask,lambda,llx,lly,urx,ury,int_obj,</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>             &int_sky),<span class="stringliteral">"summing obj & sky spectra"</span>);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   <span class="comment">// CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>    <span class="comment">// Computes thermal background</span></div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   sinfo_msg(<span class="stringliteral">"Computes thermal background"</span>);</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> <span class="comment">  ck0(sinfo_thermal_background2(int_sky,lambda,lrange,&bkg),</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="comment">     "getting termal bkg");</span></div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   ck0(sinfo_thermal_background(int_sky,lambda,lrange,fit_temp,niter,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                                filter_width,dispersion,&bkg,&th_fit),</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>       <span class="stringliteral">"getting termal bkg"</span>);</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_SKY_ORG"</span>,int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_BKG_FIT"</span>,bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INT_BKG_SMO"</span>,int_sky,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>                                          <span class="stringliteral">"INT_BKG_SMO"</span>));</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span> </div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   sqc->th_fit=th_fit;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   <span class="comment">//check_nomsg(cpl_table_save(bkg,NULL,NULL,"out_thermal_background.fits",</span></div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span> </div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> <span class="comment">  ck0(sinfo_pro_save_tbl(bkg,set,set,"out_thermal_background.fits",</span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">             "THERMAL_BACKGROUND",NULL,cpl_func,config),</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> <span class="comment">      "Error saving %s","THERMAL_BACKGROUND");</span></div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   sinfo_msg(<span class="stringliteral">"Subtracts thermal background from integrated OH spectrum"</span>);</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   <span class="comment">//sinfo_msg("nrow=%d %d",cpl_table_get_nrow(int_sky),</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   <span class="comment">//                       cpl_table_get_nrow(bkg));</span></div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   check_nomsg(cpl_table_duplicate_column(int_sky,<span class="stringliteral">"BKG"</span>,bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   check_nomsg(cpl_table_duplicate_column(int_sky,<span class="stringliteral">"INT0"</span>,int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   check_nomsg(cpl_table_subtract_columns(int_sky,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"BKG"</span>));</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> </div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   <span class="comment">//check_nomsg(cpl_table_duplicate_column(int_obj,"INT",</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   <span class="comment">//                                         int_obj,"INT_OBJ_COR"));</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   <span class="keywordflow">if</span>(sub_thr_bkg == 1) {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"THR_BKG"</span>,bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     check_nomsg(cpl_table_subtract_columns(*int_obj,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"THR_BKG"</span>));</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span></div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span></div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span> </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   <span class="comment">//check_nomsg(cpl_table_erase_column(int_sky,"BKG"));</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange_6.fits",</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> </div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>    <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_sub.fits",</span></div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>    <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span> </div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="comment">// check for screw values at ends of spectrum</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   sinfo_msg(<span class="stringliteral">"Checks for screw values at ends of spectrum"</span>);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   sinfo_check_screw_values(int_obj,&int_sky,grange,dispersion);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   <span class="comment">//check_nomsg(cpl_table_save(grange, NULL, NULL, "out_grange_7.fits",</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj_chk.fits",</span></div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_chk.fits",</span></div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   <span class="keywordflow">if</span>(sky_interp_sw == 1) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     sinfo_msg(<span class="stringliteral">"Interpolate sky if necessary"</span>);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     sinfo_interpolate_sky(int_sky,lambdas);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   sinfo_msg(<span class="stringliteral">"Crosscorrelate obj & sky to check for lambda offset"</span>);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj_chk.fits",</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky_chk.fits",</span></div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   check_nomsg(wshift=sinfo_xcorr(*int_obj,int_sky,lambda,dispersion,line_hw));</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span> </div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>   <span class="comment">//wshift=-1.7164495*dispersion;</span></div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   sinfo_msg(<span class="stringliteral">"Dispersion=%f"</span>,dispersion);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   <span class="keywordflow">if</span>(pshift == 0) {</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     pshift=wshift/dispersion;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   sinfo_msg(<span class="stringliteral">"Shift sky of %f pixels toward object"</span>,pshift);</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   check_nomsg(sinfo_shift_sky(&sky_frm,&int_sky,pshift));</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_pip3_int_obj.fits",</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_pip3_int_sky.fits",</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   <span class="comment">//DEBUG</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   sinfo_msg(<span class="stringliteral">"Optimise sky subtraction"</span>);</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>   check_nomsg(sinfo_optimise_sky_sub(dispersion,line_hw,method,do_rot,</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>                                      lrange,lambda,</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>                                      lr41,lr52,lr63,lr74,lr02,lr85,</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>                                      lr20,lr31,lr42,lr53,lr64,lr75,</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>                      lr86,lr97,lr00,int_obj,&int_sky,</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>                      &rscale));</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj, NULL, NULL, "out_int_obj.fits",</span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky, NULL, NULL, "out_int_sky.fits",</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>   <span class="comment">//CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>   sinfo_msg(<span class="stringliteral">"Apply same scaling to whole cubes"</span>);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span> </div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>                                           CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>   cknull_nomsg(sky_cub=cpl_imagelist_load(cpl_frame_get_filename(sky_frm),</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>                                           CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> </div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   <span class="keywordflow">if</span>(sub_thr_bkg == 1) {</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     ck0_nomsg(sinfo_sub_thr_bkg_from_obj_cube(obj_cub,int_sky,obj_cor));</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   }</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   ck0_nomsg(sinfo_scales_obj_sky_cubes(*obj_cor,sky_cub,bkg,rscale,obj_cor));</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"INT_OBJ_ORG"</span>));</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"INT_OBJ_COR"</span>));</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   check_nomsg(cpl_table_name_column(*int_obj,<span class="stringliteral">"SKYC"</span>,<span class="stringliteral">"INT_SKY_COR"</span>));</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span> </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>  cleanup:</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   sinfo_free_table(&rscale);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   sinfo_free_imagelist(&fdata);</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   sinfo_free_table(&bkg);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   sinfo_free_table(&lambda);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>   sinfo_free_table(&lrange);</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   sinfo_free_table(&mrange);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   sinfo_free_table(&grange);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   sinfo_free_table(&lambdas);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>   sinfo_free_image(&mask);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>   sinfo_free_table(&lr41);</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>   sinfo_free_table(&lr52);</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   sinfo_free_table(&lr63);</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>   sinfo_free_table(&lr74);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>   sinfo_free_table(&lr02);</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>   sinfo_free_table(&lr85);</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   sinfo_free_table(&lr20);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>   sinfo_free_table(&lr31);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>   sinfo_free_table(&lr42);</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>   sinfo_free_table(&lr53);</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>   sinfo_free_table(&lr64);</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>   sinfo_free_table(&lr75);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   sinfo_free_table(&lr86);</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   sinfo_free_table(&lr97);</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   sinfo_free_table(&lr00);</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   sinfo_free_image(&gpix);</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   sinfo_free_image(&ratio);</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   sinfo_free_image(&ima_sky);</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>   <span class="comment">//sinfo_free_table(&int_obj);</span></div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>   sinfo_free_table(&int_sky);</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>   sinfo_free_imagelist(&sky_cub);</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   }</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> </div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span> </div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span> sinfo_sub_thr_bkg_from_obj_cube(cpl_imagelist* obj_cub,</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                 cpl_table* int_sky,</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>                 cpl_imagelist** obj_cor)</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> {</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   <span class="keywordtype">double</span>* pthr_bkg=NULL;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   cpl_image* imgo=NULL;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span> </div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   check_nomsg(pthr_bkg=cpl_table_get_data_double(int_sky,<span class="stringliteral">"BKG"</span>));</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   check_nomsg(zsz=cpl_imagelist_get_size(obj_cub));</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span> </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     check_nomsg(imgo=cpl_imagelist_get(obj_cub,k));</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     check_nomsg(cpl_image_subtract_scalar(imgo,pthr_bkg[k]));</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     check_nomsg(cpl_imagelist_set(*obj_cor,imgo,k));</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   }</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>  cleanup:</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   }</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span> }</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span> </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span> </div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> sinfo_set_ranges(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>                  cpl_frame* sky_frm,</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>                  cpl_parameterlist* cfg,</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>                  cpl_table** lambda,</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>                  cpl_table** lr41,</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>                  cpl_table** lr52,</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                  cpl_table** lr63,</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>                  cpl_table** lr74,</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>                  cpl_table** lr02,</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>                  cpl_table** lr85,</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>                  cpl_table** lr20,</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>                  cpl_table** lr31,</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>                  cpl_table** lr42,</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>                  cpl_table** lr53,</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>                  cpl_table** lr64,</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>                  cpl_table** lr75,</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>                  cpl_table** lr86,</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>                  cpl_table** lr97,</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                  cpl_table** lr00,</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>                  cpl_table** lrange,</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>                  cpl_table** grange,</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>                  cpl_table** lambdas,</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>                  cpl_table** mrange,</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>                  <span class="keywordtype">int</span>* sky_interp_sw,</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>                  <span class="keywordtype">double</span>* dispersion)</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> {</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>   <span class="keywordtype">double</span> crval_obj=0;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>   <span class="keywordtype">double</span> cdelt_obj=0;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>   <span class="keywordtype">double</span> crpix_obj=0;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>   <span class="keywordtype">int</span> xsize_obj=0;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>   <span class="keywordtype">int</span> ysize_obj=0;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>   <span class="keywordtype">int</span> zsize_obj=0;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   <span class="keywordtype">double</span> crval_sky=0;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   <span class="keywordtype">double</span> cdelt_sky=0;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>   <span class="keywordtype">double</span> crpix_sky=0;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   <span class="keywordtype">int</span> xsize_sky=0;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   <span class="keywordtype">int</span> ysize_sky=0;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>   <span class="keywordtype">int</span> zsize_sky=0;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   <span class="comment">/* wavelength min-max J-H-K band */</span></div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_j_min=1.100;</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_j_max=1.400;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_h_min=1.445;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_h_max=1.820;</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_k_min=1.945;</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> w_k_max=2.460;</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>   <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span> </div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>   <span class="comment">/* wavelength boundaries between line groups corresponding</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">     to transitions 5-2 to 9-7 */</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>   <span class="keywordtype">double</span> w_bound[NBOUND]={1.067,1.125,1.196,1.252,1.289,</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>                           1.400,1.472,1.5543,1.6356,1.7253,</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>                           1.840,1.9570,2.095,2.300};</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>   cpl_table* tmp_tbl=NULL;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>   cpl_table* add1=NULL;</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> </div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>   <span class="comment">/* Get Object relevant information */</span></div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>   check_nomsg(crval_obj=sinfo_pfits_get_crval3(plist));</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>   check_nomsg(cdelt_obj=sinfo_pfits_get_cdelt3(plist));</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>   check_nomsg(crpix_obj=sinfo_pfits_get_crpix3(plist));</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>   check_nomsg(xsize_obj=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>   check_nomsg(ysize_obj=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>   check_nomsg(zsize_obj=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>   *dispersion=cdelt_obj;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>   <span class="comment">/* defines object related wavelength ranges */</span></div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>   check_nomsg(*lambda=cpl_table_new(zsize_obj));</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>   cpl_table_new_column(*lambda,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>   cpl_table_new_column(*lambda,<span class="stringliteral">"INDEX"</span>,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>   check_nomsg(sinfo_table_column_dindgen(lambda,<span class="stringliteral">"INDEX"</span>));</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>   check_nomsg(sinfo_table_column_dindgen(lambda,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>   check_nomsg(cpl_table_add_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,1.));</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   check_nomsg(cpl_table_subtract_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,crpix_obj));</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>   check_nomsg(cpl_table_multiply_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,cdelt_obj));</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>   check_nomsg(cpl_table_add_scalar(*lambda,<span class="stringliteral">"WAVE"</span>,crval_obj));</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>   cknull_nomsg(*lr41=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>                                              w_j_min,</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>                                              w_bound[0]));</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   cknull_nomsg(*lr52=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                                              w_bound[0],</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>                                              w_bound[1]));</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   cknull_nomsg(*lr63=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>                                              w_bound[1],</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>                                              w_bound[2]));</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>   cknull_nomsg(*lr74=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>                                              w_bound[2],</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>                                              w_bound[3]));</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  cknull_nomsg(*lr20=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>                                              w_bound[3],</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>                                              w_bound[4]));</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> </div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  cknull_nomsg(*lr02=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>                                              w_bound[4],</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>                                              w_bound[5]));</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  cknull_nomsg(*lr85=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>                                              w_bound[5],</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>                                              w_bound[6]));</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>   cknull_nomsg(*lr31=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>                                              w_bound[6],</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>                                              w_bound[7]));</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> </div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>   cknull_nomsg(*lr42=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>                                              w_bound[7],</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>                                              w_bound[8]));</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> </div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>   cknull_nomsg(*lr53=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                                              w_bound[8],</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>                                              w_bound[9]));</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>   cknull_nomsg(*lr64=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                                              w_bound[0],</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>                                              w_bound[10]));</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>   cknull_nomsg(*lr75=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>                                              w_bound[10],</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>                                              w_bound[11]));</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>   cknull_nomsg(*lr86=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>                                              w_bound[11],</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>                                              w_bound[12]));</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>   cknull_nomsg(*lr97=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>                                              CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>                                              w_bound[12],</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>                                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>                                              w_bound[13]));</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> </div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>   cknull_nomsg(*lr00=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>                                              <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>                                               CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>                                               w_bound[13],</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>                                               CPL_LESS_THAN,</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>                                               w_k_max));</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>   <span class="comment">/* lrange */</span></div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   cknull_nomsg(*lrange=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>                                                <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>                                                CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>                                                w_j_min,</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>                                                CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                                                w_j_max));</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                                                <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                                                CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                                                w_h_min,</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                                                CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>                                                w_h_max));</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>   check_nomsg(nrow=cpl_table_get_nrow(*lrange));</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>   check_nomsg(cpl_table_insert(*lrange,add1,nrow));</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>   sinfo_free_table(&add1);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>                                                <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>                                                CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>                                                w_k_min,</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                                                CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>                                                w_k_max));</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> </div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> </div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>   check_nomsg(nrow=cpl_table_get_nrow(*lrange));</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>   check_nomsg(cpl_table_insert(*lrange,add1,nrow));</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>   sinfo_free_table(&add1);</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> </div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> </div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>   <span class="comment">/* mrange */</span></div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>   cknull_nomsg(*grange=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                                                <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                                                CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>                                                1.10,</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                                                CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                                                1.35));</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span> </div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span> </div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>                                                <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>                                                CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>                                                1.5,</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>                                                CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>                                                1.7));</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>   check_nomsg(nrow=cpl_table_get_nrow(*grange));</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>   check_nomsg(cpl_table_insert(*grange,add1,nrow));</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>   sinfo_free_table(&add1);</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>   cknull_nomsg(add1=sinfo_where_tab_min_max(*lambda,</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>                                             <span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>                                             CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>                                             2.0,</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>                                             CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>                                             2.3));</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>   check_nomsg(nrow=cpl_table_get_nrow(*grange));</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>   check_nomsg(cpl_table_insert(*grange,add1,nrow));</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>   sinfo_free_table(&add1);</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> </div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>   <span class="comment">/* Get Sky relevant information */</span></div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm),0));</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>   check_nomsg(crval_sky=sinfo_pfits_get_crval3(plist));</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>   check_nomsg(cdelt_sky=sinfo_pfits_get_cdelt3(plist));</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>   check_nomsg(crpix_sky=sinfo_pfits_get_crpix3(plist));</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>   check_nomsg(xsize_sky=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>   check_nomsg(ysize_sky=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>   check_nomsg(zsize_sky=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>   <span class="comment">/* defines sky related wavelength ranges */</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>   check_nomsg(*lambdas=cpl_table_new(zsize_sky));</div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>   cpl_table_new_column(*lambdas,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>   check_nomsg(sinfo_table_column_dindgen(lambdas,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> </div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>   check_nomsg(cpl_table_add_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,1.));</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>   check_nomsg(cpl_table_subtract_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,crpix_sky));</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>   check_nomsg(cpl_table_multiply_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,cdelt_sky));</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   check_nomsg(cpl_table_add_scalar(*lambdas,<span class="stringliteral">"WAVE"</span>,crval_sky));</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> </div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>   check_nomsg(p=cpl_parameterlist_find(cfg,<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_ws"</span>));</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>   check_nomsg(ws=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>   check_nomsg(p=cpl_parameterlist_find(cfg,<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_we"</span>));</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>   check_nomsg(we=cpl_parameter_get_double(p));</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>   <span class="keywordflow">if</span>((ws != SINFO_MASK_WAVE_MIN) || (we != SINFO_MASK_WAVE_MAX)) {</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     cknull_nomsg(*mrange=sinfo_where_tab_min_max(*lambda,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>                                                  CPL_NOT_LESS_THAN,ws,</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>                                                  CPL_NOT_GREATER_THAN,we));</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>      check_nomsg(*mrange=cpl_table_duplicate(*lrange));</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>   }</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>   check_nomsg(cpl_table_duplicate_column(*lambda,<span class="stringliteral">"WDIFF"</span>,*lambdas,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>   check_nomsg(cpl_table_subtract_columns(*lambda,<span class="stringliteral">"WDIFF"</span>,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>   check_nomsg(mean=cpl_table_get_column_mean(*lambda,<span class="stringliteral">"WDIFF"</span>));</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>   check_nomsg(nrow=cpl_table_get_nrow(*lambda));</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>   <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"diff %f"</span>,nrow*mean);</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>   <span class="keywordflow">if</span>((fabs(nrow*mean) > 0) || (zsize_obj != zsize_sky)) {</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>     sinfo_msg(<span class="stringliteral">"We have to interpolate sky frame - this is not good"</span>);</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     *sky_interp_sw=1;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>   }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span> </div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span> </div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  cleanup:</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>   sinfo_free_table(&add1);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   sinfo_free_table(&tmp_tbl);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> </div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> }</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> </div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> sinfo_table_column_dindgen(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* label)</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> </div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>   <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>   cknull(*t,<span class="stringliteral">"Null input vector"</span>);</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>   check(sz=cpl_table_get_nrow(*t),<span class="stringliteral">"Getting size of a vector"</span>);</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>   <span class="keywordflow">for</span>(i=0;i<sz;i++) {</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>     cpl_table_set(*t,label,i,(<span class="keywordtype">double</span>)i);</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>   }</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  cleanup:</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> </div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> }</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> sinfo_sum_spectra(<span class="keyword">const</span> cpl_frame* obj_frm,</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>                   <span class="keyword">const</span> cpl_frame* sky_frm,</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>                   cpl_image* mask,</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>                   cpl_table* wrange,</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>                   cpl_table** int_obj,</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>                   cpl_table** int_sky)</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> {</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> </div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>   cpl_image* obj_slice=NULL;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>   cpl_image* sky_slice=NULL;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>   cpl_image* gslice=NULL;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>   cpl_image* pos_tmp=NULL;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>   cpl_image* msk_tmp=NULL;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>   cpl_imagelist* obj=NULL;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>   cpl_imagelist* sky=NULL;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>   cpl_table* loop=NULL;</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>   cpl_table* opos_tbl=NULL;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>   cpl_table* spos_tbl=NULL;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>   cpl_table* tmp_tbl=NULL;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>   cpl_table* loop_tbl=NULL;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span> </div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>   <span class="keywordtype">double</span> sdv=0;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>   <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>   <span class="keywordtype">int</span> zsize=0;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>   <span class="keywordtype">int</span> pos_i=0;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>   <span class="comment">// sum spectra of flagged spaxels</span></div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> </div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>   cknull_nomsg(obj=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>                                       CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>   cknull_nomsg(sky=cpl_imagelist_load(cpl_frame_get_filename(sky_frm),</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>                                       CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span> </div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>   check_nomsg(zsize=cpl_imagelist_get_size(obj));</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>   check_nomsg(*int_obj = cpl_table_new(zsize));</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>   check_nomsg(*int_sky = cpl_table_new(zsize));</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"WAVE"</span>,wrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"WAVE"</span>,wrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>   check_nomsg(cpl_table_new_column(*int_obj,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>   check_nomsg(cpl_table_new_column(*int_sky,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>   check_nomsg(cpl_table_fill_column_window_double(*int_obj,<span class="stringliteral">"INT"</span>,0,zsize,0));</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>   check_nomsg(cpl_table_fill_column_window_double(*int_sky,<span class="stringliteral">"INT"</span>,0,zsize,0));</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>   <span class="comment">//loop = where(mask > 0.5);</span></div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>   <span class="comment">//TO BE REMOVED: loop_tbl is not used</span></div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>   cknull_nomsg(loop_tbl=sinfo_image2table(mask));</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>   check_nomsg(cpl_table_and_selected_double(loop_tbl,<span class="stringliteral">"VALUE"</span>,</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>                                             CPL_GREATER_THAN,0.5));</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>   check_nomsg(loop=cpl_table_extract_selected(loop_tbl));</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>   sinfo_free_table(&loop_tbl);</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>   sinfo_free_table(&loop);</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> </div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>   <span class="comment">//Determines object spectrum</span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>   <span class="keywordflow">for</span> (i=0;i<zsize;i++) {</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>     check_nomsg(obj_slice = cpl_imagelist_get(obj,i));</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>     <span class="comment">//pos = where(mask > 0.5 && finite(obj_slice),pos_i);</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     pos_i=sinfo_cnt_mask_thresh_and_obj_finite(mask,0.5,obj_slice);</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>     <span class="keywordflow">if</span> (pos_i >= 1) {</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>       <span class="keywordflow">if</span> ((pos_i) < 3 ) {</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>     <span class="comment">//int_obj[i] = mean(obj_slice[pos]);</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>         <span class="comment">//TODO here obj_slice should be considered only on pos:</span></div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>         <span class="comment">//     one should do a selection/thresholding</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         check_nomsg(cpl_table_set_double(*int_obj,<span class="stringliteral">"INT"</span>,i,</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>                      cpl_image_get_mean_window(obj_slice,</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>                                    llx,lly,</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>                                    urx,ury)));</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         <span class="comment">// select only poisitions where mask>0.5 and obj is finite</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>     <span class="comment">// gslice = obj_slice[pos];</span></div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         <span class="comment">//sinfo_msg("obj pos_i=%d",pos_i);</span></div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span> </div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>         check_nomsg(gslice = cpl_image_duplicate(obj_slice));</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>         check_nomsg(sinfo_image_flag_nan(&gslice));</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> <span class="comment">        sinfo_msg("obj: min=%f max=%f",</span></div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="comment">                  cpl_image_get_min(obj_slice),</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">          cpl_image_get_max(obj_slice));</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>         <span class="comment">//check_nomsg(cpl_image_threshold(gslice,SINFO_DBL_MIN,3.0e6,1,0));</span></div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>         <span class="comment">//check_nomsg(cpl_image_multiply(gslice,mask));</span></div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>         <span class="keywordflow">if</span>(cpl_image_count_rejected(gslice) < 2048) { <span class="comment">//2048=64*64/2</span></div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>       check_nomsg(med = cpl_image_get_median_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>       check_nomsg(sdv = cpl_image_get_stdev_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>       <span class="comment">//sinfo_msg("med=%f sdv=%f",med,sdv);</span></div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>       <span class="comment">//avg = mean(gslice[where(gslice < med+3*sdv && gslice > med-3*sdv)]);</span></div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>       check_nomsg(cpl_image_threshold(gslice,med-3*sdv,med+3*sdv,0,0));</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>       check_nomsg(avg= cpl_image_get_mean_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>       check_nomsg(cpl_table_set_double(*int_obj,<span class="stringliteral">"INT"</span>,i,avg));</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>       check_nomsg(cpl_table_set_invalid(*int_obj,<span class="stringliteral">"INT"</span>,i));</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>         sinfo_free_image(&gslice);</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         <span class="comment">//sinfo_msg("sky int=%f",avg);</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>       }</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     }</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span> </div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     <span class="comment">//Determines sky spectrum</span></div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     check_nomsg(sky_slice = cpl_imagelist_get(sky,i));</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     <span class="comment">//pos = where(mask > 0.5 and finite(sky_slice),pos_i);</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     pos_i=sinfo_cnt_mask_thresh_and_obj_finite(mask,0.5,sky_slice);</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     <span class="keywordflow">if</span> (pos_i >= 1) {</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>       <span class="keywordflow">if</span> ((pos_i) < 3) {</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     <span class="comment">//int_obj[i] = mean(obj_slice[pos]);</span></div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>         <span class="comment">//TODO here obj_slice should be considered only on pos:</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>         <span class="comment">//     one should do a selection/thresholding</span></div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>         check_nomsg(cpl_table_set_double(*int_sky,<span class="stringliteral">"INT"</span>,i,</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>                      cpl_image_get_mean_window(sky_slice,</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>                                    llx,lly,</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>                                    urx,ury)));</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         <span class="comment">//sinfo_msg("pos_i=%d",pos_i);</span></div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>         <span class="comment">// select only poisitions where mask>0.5 and obj is finite</span></div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     <span class="comment">// gslice = obj_slice[pos];</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>         check_nomsg(gslice = cpl_image_duplicate(sky_slice));</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>         check_nomsg(sinfo_image_flag_nan(&gslice));</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>         <span class="comment">//check_nomsg(cpl_image_threshold(gslice,SINFO_DBL_MIN,3.0e6,1,0));</span></div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         <span class="comment">//check_nomsg(cpl_image_multiply(gslice,mask));</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>         <span class="keywordflow">if</span>(cpl_image_count_rejected(gslice) < 2048) { <span class="comment">//2048=64*64/2</span></div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     check_nomsg(med = cpl_image_get_median_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     check_nomsg(sdv = cpl_image_get_stdev_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>         <span class="comment">//avg = mean(gslice[where(gslice < med+3*sdv && gslice > med-3*sdv)]);</span></div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>         check_nomsg(cpl_image_threshold(gslice,med-3*sdv,med+3*sdv,0,0));</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     check_nomsg(avg= cpl_image_get_mean_window(gslice,llx,lly,urx,ury));</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>         check_nomsg(cpl_table_set_double(*int_sky,<span class="stringliteral">"INT"</span>,i,avg));</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>       check_nomsg(cpl_table_set_invalid(*int_sky,<span class="stringliteral">"INT"</span>,i));</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>     }</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>         sinfo_free_image(&gslice);</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="comment">        if(i<100) {</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment">           sinfo_msg("sky: wave=%f int=%f",</span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment">                      cpl_table_get_double(*int_sky,"WAVE",i,&status),avg);</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment"></span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>       }</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     }</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>   }</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> </div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>   sinfo_free_imagelist(&obj);</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>   sinfo_free_imagelist(&sky);</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span> </div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  cleanup:</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>   sinfo_free_image(&gslice);</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>   sinfo_free_image(&pos_tmp);</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>   sinfo_free_image(&msk_tmp);</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>   sinfo_free_table(&tmp_tbl);</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>   sinfo_free_table(&opos_tbl);</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>   sinfo_free_table(&spos_tbl);</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>   sinfo_free_table(&loop_tbl);</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>   sinfo_free_table(&loop);</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>   sinfo_free_imagelist(&obj);</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>   sinfo_free_imagelist(&sky);</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span> </div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> }</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> </div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> </div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> </div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span> sinfo_cnt_mask_thresh_and_obj_finite(<span class="keyword">const</span> cpl_image* mask,</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> t,</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>                                      <span class="keyword">const</span> cpl_image* obj)</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> {</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span> </div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>   <span class="keywordtype">int</span> cnt=0;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   <span class="keywordtype">int</span> sxm=0;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   <span class="keywordtype">int</span> sym=0;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>   <span class="keywordtype">int</span> sxo=0;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>   <span class="keywordtype">int</span> syo=0;</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pm=NULL;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   check_nomsg(sxm=cpl_image_get_size_x(mask));</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>   check_nomsg(sym=cpl_image_get_size_y(mask));</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>   check_nomsg(sxo=cpl_image_get_size_x(obj));</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>   check_nomsg(syo=cpl_image_get_size_y(obj));</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>   <span class="keywordflow">if</span>( sxm != sxo || sym != syo) {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   }</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>   check_nomsg(pm=cpl_image_get_data_double_const(mask));</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>   check_nomsg(po=cpl_image_get_data_double_const(obj));</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>   <span class="keywordflow">for</span>(i=0;i<sxm*sym;i++) {</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>     <span class="keywordflow">if</span>( (pm[i] > t) && (!irplib_isnan(po[i]))) { cnt++; }</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> </div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>   }</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span> </div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>   <span class="keywordflow">return</span> cnt;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  cleanup:</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> </div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> }</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> </div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span> </div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span> </div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span> </div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> </div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span> sinfo_image_flag_nan(cpl_image** im)</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> {</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> </div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>   <span class="keywordtype">int</span> cnt=0;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>   check_nomsg(sx=cpl_image_get_size_x(*im));</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>   check_nomsg(sy=cpl_image_get_size_y(*im));</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>   check_nomsg(pi=cpl_image_get_data_double(*im));</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> </div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>      <span class="keywordflow">if</span>(irplib_isnan(pi[j*sx+i])) {</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     check_nomsg(cpl_image_reject(*im,i+1,j+1));</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     cnt++;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>       }</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>     }</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>   }</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>   <span class="comment">//sinfo_msg("No bad pixels: %d",cnt);</span></div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>   <span class="keywordflow">return</span> cnt;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  cleanup:</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span> </div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> }</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span> </div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> </div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> </div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> sinfo_object_estimate_noise(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>                             <span class="keyword">const</span> <span class="keywordtype">int</span> obj_noise_fit,</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>                             <span class="keywordtype">double</span>* centre,</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>                             <span class="keywordtype">double</span>* noise)</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> {</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span> </div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> nbins=HISTO_NBINS;</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> </div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>   <span class="keywordtype">int</span> r=0;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span> </div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>   <span class="keywordtype">int</span> max_h=0;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>   <span class="keywordtype">int</span> min_x=0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>   <span class="keywordtype">int</span> max_x=0;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>   <span class="keywordtype">int</span> max_pos=0;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>   <span class="keywordtype">int</span> min_pos=0;</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>   <span class="keywordtype">int</span> min_xi_sz=0;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>   <span class="keywordtype">int</span> ndist=0;</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>   <span class="keywordtype">double</span> avg_d=0;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>   <span class="keywordtype">double</span> std_d=0;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>   <span class="keywordtype">double</span> hmin=0;</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>   <span class="keywordtype">double</span> hmax=0;</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>   <span class="keywordtype">double</span> kappa=3;</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> </div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>   <span class="keywordtype">double</span>* pdata=NULL;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>   <span class="keywordtype">double</span>* disth=NULL;</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>   <span class="keywordtype">double</span>* distx=NULL;</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>   <span class="keywordtype">double</span> peak=0;</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>   <span class="keywordtype">double</span> tempc=0;</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>   <span class="keywordtype">double</span> value=0;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>   <span class="keywordtype">double</span> thres=0;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>   <span class="keywordtype">double</span> val=0;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>   <span class="keywordtype">double</span> x0=0;</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>   <span class="keywordtype">double</span> sigma=0;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>   <span class="keywordtype">double</span> area=0;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>   <span class="keywordtype">double</span> offset=0;</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>   <span class="comment">//double mse=0;</span></div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>   <span class="comment">//double chired=0;</span></div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> </div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>   cpl_imagelist* obj_cub=NULL;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>   cpl_table* data_tbl=NULL;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>   cpl_table* histo=NULL;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>   cpl_table* dist=NULL;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>   cpl_table* min_xi=NULL;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>   cpl_table* tmp_tbl1=NULL;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>   cpl_table* tmp_tbl2=NULL;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>   cpl_vector* vx=NULL;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>   cpl_vector* vy=NULL;</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>   cpl_vector* sx=NULL;</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>   cpl_vector* sy=NULL;</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>   <span class="keywordtype">int</span> counter=0;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> </div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>   <span class="comment">// Get Object relevant information</span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> </div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>                                           CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span> </div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>   n=xsz*ysz*zsz;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>   check_nomsg(data_tbl=cpl_table_new(n));</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>   check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> </div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>     check_nomsg(img=cpl_imagelist_get(obj_cub,k));</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>     check_nomsg(pdata=cpl_image_get_data(img));</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>       <span class="keywordflow">if</span>(!irplib_isnan(pdata[i])) {</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>     cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]);</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>         r++;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>       }</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     }</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>   }</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> </div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>   check_nomsg(cpl_table_erase_invalid(data_tbl));</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>   check_nomsg(avg_d=cpl_table_get_column_mean(data_tbl,<span class="stringliteral">"DATA"</span>));</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>   check_nomsg(std_d=cpl_table_get_column_stdev(data_tbl,<span class="stringliteral">"DATA"</span>));</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> </div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>   <span class="comment">//cpl_table_save(data_tbl, NULL, NULL, "out_data.fits",CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>   hmin=avg_d-kappa*std_d;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>   hmax=avg_d+kappa*std_d;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>   <span class="comment">//sinfo_msg("mean=%f stdv=%f",avg_d,std_d);</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>   <span class="comment">//sinfo_msg("hmin=%f hmax=%f",hmin,hmax);</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>   sinfo_msg(<span class="stringliteral">"Computes histogram"</span>);</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>   ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> </div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>   value=(double)(hmax-hmin)/nbins/2.;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>   <span class="comment">//sinfo_msg("value=%10.8f",value);</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> </div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>   <span class="keywordflow">while</span>(min_xi_sz < HISTO_MIN_SIZE && counter < 10) {</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>     counter++;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>     check_nomsg(max_h=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_pippo.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>     check_nomsg(max_pos=sinfo_table_get_index_of_max(histo,<span class="stringliteral">"HY"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     <span class="comment">//sinfo_msg("max_pos=%d",max_pos);</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> </div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="comment">    check_nomsg(max_pos=sinfo_extract_table_rows(histo,"HY",</span></div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">                                                 CPL_EQUAL_TO,max_h));</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">    sinfo_msg("size max_pos %d",cpl_table_get_nrow(max_pos));</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">    sinfo_msg("value max_pos %d",cpl_table_get_int(max_pos,"HY",0,&status));</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>     min_x=max_pos-1;</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>     max_x=max_pos+2;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     <span class="comment">//sinfo_msg("min_x=%d max_x=%d",min_x,max_x);</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> </div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>     sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>     <span class="comment">//sinfo_msg("x selection threshold: %f %d",</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>     <span class="comment">//          cpl_table_get(histo,"HL",max_pos,&status),max_pos);</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>     check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HL"</span>,</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>                                                   CPL_LESS_THAN,</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>                                  cpl_table_get(histo,<span class="stringliteral">"HL"</span>,max_pos,&status)));</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>     thres=cpl_table_get_column_max(tmp_tbl1,<span class="stringliteral">"HY"</span>)/HISTO_Y_CUT;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>     <span class="comment">//sinfo_msg("threshold=%f",thres);</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> </div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> </div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>     sinfo_free_table(&min_xi);</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>     check_nomsg(min_xi=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,</div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>                                                 CPL_GREATER_THAN,thres));</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>     <span class="comment">//cpl_table_save(min_xi, NULL, NULL, "out_min_xi.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> </div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>     min_xi_sz=cpl_table_get_nrow(min_xi);</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>     val=cpl_table_get(min_xi,<span class="stringliteral">"HL"</span>,0,&status);</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> </div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>     check_nomsg(min_pos=sinfo_table_get_index_of_val(histo,<span class="stringliteral">"HL"</span>,val,</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>                                                      CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>     <span class="comment">//sinfo_msg("min_pos=%d max_pos=%d max(h)=%d min_xi_sz=%d x[maxpos[0]]=%f",</span></div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>     <span class="comment">//           min_pos,   max_pos,   max_h,    min_xi_sz, val);</span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span> </div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> </div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>     <span class="keywordflow">if</span> (min_xi_sz > 0) {</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>       min_x = min_pos-HISTO_X_LEFT_CUT*(max_pos-min_pos);</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>       max_x = max_pos+HISTO_X_RIGHT_CUT*(max_pos-min_pos);</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>     }</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> </div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>     <span class="comment">//sinfo_msg("min_x=%d max_x=%d",min_x,max_x);</span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>     check_nomsg(hmin=sinfo_table_column_interpolate(histo,<span class="stringliteral">"HL"</span>,min_x));</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>     check_nomsg(hmax=sinfo_table_column_interpolate(histo,<span class="stringliteral">"HL"</span>,max_x));</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     <span class="comment">//sinfo_msg("hmin=%f hmax=%f min_xi_sz=%d",hmin,hmax,min_xi_sz);</span></div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>     sinfo_free_table(&histo);</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>     ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),<span class="stringliteral">"building histogram"</span>);</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo1.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>     check_nomsg(cpl_table_add_scalar(histo,<span class="stringliteral">"HL"</span>,(hmax-hmin)/nbins/2));</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>     <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo2.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> </div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> </div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>   }</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>   sinfo_free_table(&data_tbl);</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>   sinfo_free_table(&min_xi);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> </div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   <span class="comment">//cpl_table_save(histo, NULL, NULL, "out_histo.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>   check_nomsg(peak=cpl_table_get_column_max(histo,<span class="stringliteral">"HY"</span>));</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>   <span class="comment">//sinfo_msg("peak=%f",peak);</span></div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> </div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>   check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,CPL_EQUAL_TO,peak));</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>   <span class="comment">//cpl_table_save(tmp_tbl1, NULL, NULL, "out_tmp_tbl1.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> </div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> </div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>   check_nomsg(*centre=cpl_table_get_column_mean(tmp_tbl1,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>   <span class="comment">//sinfo_msg("Background level=%f",*centre);</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> </div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>   check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,<span class="stringliteral">"HY"</span>,</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>                                                 CPL_GREATER_THAN,</div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>                                                 peak/HISTO_Y_CUT));</div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>   sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>   check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,<span class="stringliteral">"HY"</span>,</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>                                                 CPL_LESS_THAN,peak));</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span> </div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>   check_nomsg(tempc=*centre-cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>   <span class="comment">//sinfo_msg("min HX %f",cpl_table_get_column_min(tmp_tbl2,"HL"));</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>   sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>   <span class="comment">//sinfo_msg("Tempc=%f",tempc);</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>   check_nomsg(dist=sinfo_where_tab_min_max(histo,<span class="stringliteral">"HL"</span>,</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                  CPL_GREATER_THAN,*centre-HISTO_DIST_TEMPC_MIN_FCT*tempc,</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>                  CPL_NOT_GREATER_THAN,*centre+HISTO_DIST_TEMPC_MAX_FCT*tempc));</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> </div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>   offset=cpl_table_get_column_min(histo,<span class="stringliteral">"HY"</span>);</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>   sinfo_free_table(&histo);</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> </div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>   check_nomsg(ndist=cpl_table_get_nrow(dist));</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>   check_nomsg(cpl_table_cast_column(dist,<span class="stringliteral">"HY"</span>,<span class="stringliteral">"HYdouble"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>   check_nomsg(disth=cpl_table_get_data_double(dist,<span class="stringliteral">"HYdouble"</span>));</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>   check_nomsg(distx=cpl_table_get_data_double(dist,<span class="stringliteral">"HL"</span>));</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>   <span class="comment">//cpl_table_save(dist, NULL, NULL, "out_dist.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span> </div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>   <span class="comment">//TODO</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>   <span class="comment">//gaussfit(distx,disty,dista,nterms=3);</span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>   <span class="comment">//*noise=dista[2];</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>   *noise=tempc/2;</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>   <span class="comment">/* THIS DOES NOT WORK */</span></div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>   <span class="comment">//sinfo_msg("FWHM/2=%f",*noise);</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> </div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>   <span class="keywordflow">if</span>(obj_noise_fit == 1) {</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>     check_nomsg(vy=cpl_vector_wrap(ndist,disth));</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>     check_nomsg(vx=cpl_vector_wrap(ndist,distx));</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>     check_nomsg(sx=cpl_vector_new(ndist));</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>     check_nomsg(cpl_vector_fill(sx,1.));</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>     check_nomsg(sy=cpl_vector_duplicate(sx));</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>     x0=*centre;</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>     sigma=tempc/2;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span> </div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>     check_nomsg(cpl_vector_fit_gaussian(vx,NULL,</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>                                         vy,NULL,</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>                                         CPL_FIT_ALL,</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>                                         &x0,&sigma,&area,&offset,</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>                                         NULL,NULL,NULL));</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>     <span class="comment">//sinfo_msg("Gauss fit parameters:"</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>     <span class="comment">//          "x0=%f sigma=%f area=%f offset=%f mse=%f chired=%f",</span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>     <span class="comment">//           x0,sigma,area,offset,mse,chired);</span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>     <span class="comment">//sinfo_msg("Background level=%f",*centre);</span></div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>     <span class="comment">//sinfo_msg("Noise=%f",sigma);</span></div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>     *noise=sigma;</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>     sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>     sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>     sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>     sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>   }</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>   sinfo_free_table(&dist);</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>   <span class="comment">//*noise=18.7448;</span></div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>   <span class="comment">//*noise=20.585946;</span></div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span> </div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>  cleanup:</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>   sinfo_free_table(&min_xi);</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>   sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>   sinfo_free_table(&histo);</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>   sinfo_free_table(&dist);</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>   sinfo_free_table(&data_tbl);</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>   sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>   sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>   sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>   sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> </div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> }</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span> </div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> </div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> cpl_table*</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> sinfo_where_tab_min_max(cpl_table* t,</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>                         cpl_table_select_operator op1,</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> v1,</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>                         cpl_table_select_operator op2,</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> v2)</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> {</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> </div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>   cpl_table* res=NULL;</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>   cpl_table* tmp=NULL;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> </div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>   check_nomsg(cpl_table_and_selected_double(t,col,op1,v1));</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>   check_nomsg(tmp=cpl_table_extract_selected(t));</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>   check_nomsg(cpl_table_and_selected_double(tmp,col,op2,v2));</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>   check_nomsg(res=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>   check_nomsg(cpl_table_select_all(t));</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> </div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> </div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>  cleanup:</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>   sinfo_free_table(&res);</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> </div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> }</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> </div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span> sinfo_histogram(<span class="keyword">const</span> cpl_table* data,</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> nbins,</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> max,</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>                 cpl_table** histo)</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span> {</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>   cpl_table* tmp_tbl1=NULL;</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>   cpl_table* tmp_tbl2=NULL;</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>   cpl_table* dat=NULL;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>   <span class="keywordtype">int</span> ntot=0;</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>   <span class="keywordtype">int</span>* phy=NULL;</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>   <span class="keywordtype">double</span>* pdt=NULL;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>   <span class="comment">/* double* phx=NULL; */</span></div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> </div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>   <span class="keywordtype">double</span> vtmp=0;</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>   <span class="keywordtype">double</span> vstp=0;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>   <span class="keywordtype">double</span> vmax=0;</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>   <span class="keywordtype">double</span> vmin=0;</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span> </div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>   <span class="keywordtype">int</span> h=0;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>   check_nomsg(dat=cpl_table_duplicate(data));</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>   check_nomsg(cpl_table_cast_column(dat,<span class="stringliteral">"DATA"</span>,<span class="stringliteral">"DDATA"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span> <span class="comment">  sinfo_msg("min=%f max=%f",</span></div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span> <span class="comment">            cpl_table_get_column_min(dat,"DDATA"),</span></div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span> <span class="comment">            cpl_table_get_column_max(dat,"DDATA"));</span></div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>   check_nomsg(cpl_table_and_selected_double(dat,<span class="stringliteral">"DDATA"</span>,</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>                                             CPL_NOT_GREATER_THAN,max));</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span> <span class="comment">  check_nomsg(cpl_table_and_selected_double(dat,"DDATA",CPL_LESS_THAN,max));</span></div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>   check_nomsg(tmp_tbl1=cpl_table_extract_selected(dat));</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span> <span class="comment">  sinfo_msg("min=%f max=%f",</span></div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span> <span class="comment">             cpl_table_get_column_min(tmp_tbl1,"DDATA"),</span></div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span> <span class="comment">             cpl_table_get_column_max(tmp_tbl1,"DDATA"));</span></div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">  check_nomsg(cpl_table_and_selected_double(tmp_tbl1,"DDATA",</span></div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span> <span class="comment">                                            CPL_NOT_LESS_THAN,min));</span></div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>   check_nomsg(cpl_table_and_selected_double(tmp_tbl1,<span class="stringliteral">"DDATA"</span>,</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>                                             CPL_GREATER_THAN,min));</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>   check_nomsg(tmp_tbl2=cpl_table_extract_selected(tmp_tbl1));</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> <span class="comment">  sinfo_msg("min=%f max=%f",</span></div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span> <span class="comment">             cpl_table_get_column_min(tmp_tbl2,"DDATA"),</span></div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span> <span class="comment">             cpl_table_get_column_max(tmp_tbl2,"DDATA"));</span></div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span> <span class="comment">  check_nomsg(tmp_tbl1=sinfo_extract_table_rows(dat,"DDATA",</span></div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span> <span class="comment">                                                CPL_NOT_GREATER_THAN,max));</span></div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> <span class="comment">  check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,"DDATA",</span></div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> <span class="comment">                                                CPL_NOT_LESS_THAN,min));</span></div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> </div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>   check_nomsg(ntot=cpl_table_get_nrow(tmp_tbl2));</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>   <span class="comment">/* not necessry to sort:</span></div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> <span class="comment">    check_nomsg(sinfo_sort_table_1(tmp_tbl2,"DDATA",FALSE));*/</span></div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>   check_nomsg(vmin=cpl_table_get_column_min(tmp_tbl2,<span class="stringliteral">"DDATA"</span>));</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>   check_nomsg(vmax=cpl_table_get_column_max(tmp_tbl2,<span class="stringliteral">"DDATA"</span>));</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>   vstp=(vmax-vmin)/(nbins-1);</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>   <span class="comment">/* sinfo_msg("vmin=%f vmax=%f step=%f",vmin,vmax,vstp); */</span></div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>   check_nomsg(*histo=cpl_table_new(nbins));</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HX"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HL"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>   check_nomsg(cpl_table_new_column(*histo,<span class="stringliteral">"HY"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> </div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>   <span class="comment">/*check_nomsg(cpl_table_fill_column_window(*histo,"HX",0,nbins,0)); */</span></div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>   check_nomsg(cpl_table_fill_column_window(*histo,<span class="stringliteral">"HL"</span>,0,nbins,0));</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>   check_nomsg(cpl_table_fill_column_window(*histo,<span class="stringliteral">"HY"</span>,0,nbins,0));</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span> </div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>   check_nomsg(phy=cpl_table_get_data_int(*histo,<span class="stringliteral">"HY"</span>));</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>   <span class="comment">/*check_nomsg(phx=cpl_table_get_data_double(*histo,"HX")); */</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>   check_nomsg(pdt=cpl_table_get_data_double(dat,<span class="stringliteral">"DATA"</span>));</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span> </div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>   <span class="keywordflow">for</span>(i=0;i<nbins;i++) {</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>     cpl_table_set_double(*histo,<span class="stringliteral">"HX"</span>,i,(<span class="keywordtype">double</span>)i);</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     vtmp=vmin+i*vstp;</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>     cpl_table_set_double(*histo,<span class="stringliteral">"HL"</span>,i,vtmp);</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>   }</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>   h=0;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> </div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>   <span class="keywordflow">for</span>(i=0;i<ntot;i++) {</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     h=floor((pdt[i]-vmin)/vstp);</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>     <span class="keywordflow">if</span>((h<nbins) && (h>-1)) {</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>       phy[h]++;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     }</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>   }</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>   <span class="comment">//cpl_table_save(*histo, NULL, NULL, "out_histo_p5.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> </div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>   sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>   sinfo_free_table(&dat);</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span> </div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>  cleanup:</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>   sinfo_free_table(&tmp_tbl1);</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>   sinfo_free_table(&tmp_tbl2);</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>   sinfo_free_table(&dat);</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span> </div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> </div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> }</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> </div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span> </div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> sinfo_object_flag_low_values(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> cnt,</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> sig,</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>                              cpl_imagelist** flag_data)</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> {</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span> </div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>   <span class="keywordtype">int</span> r=0;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> </div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>   cpl_table* data_tbl=NULL;</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>   cpl_table* flag_tbl=NULL;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>   cpl_imagelist* obj_cub=NULL;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> </div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>   <span class="keywordtype">double</span>* pdata=NULL;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>   <span class="keywordtype">double</span>* pflag=NULL;</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span> </div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>  <span class="comment">/* Get Object relevant information */</span></div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> </div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>                                           CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> </div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>   n=xsz*ysz*zsz;</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>   check_nomsg(data_tbl=cpl_table_new(n));</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>   check_nomsg(cpl_table_new_column(data_tbl,<span class="stringliteral">"DATA"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     check_nomsg(img=cpl_imagelist_get(obj_cub,k));</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>     check_nomsg(pdata=cpl_image_get_data_double(img));</div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>       <span class="keywordflow">if</span>(!irplib_isnan(pdata[i])) {</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>     check_nomsg(cpl_table_set_double(data_tbl,<span class="stringliteral">"DATA"</span>,r,pdata[i]));</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>         r++;</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>       }</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>     }</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>   }</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span> </div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>   check_nomsg(cpl_table_erase_invalid(data_tbl));</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>   <span class="comment">//sinfo_msg("Background level: %f Noise: %f",cnt,sig);</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>   check_nomsg(cpl_table_and_selected_double(data_tbl,<span class="stringliteral">"DATA"</span>,</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>                                            CPL_LESS_THAN,cnt+2*sig));</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>   check_nomsg(flag_tbl=cpl_table_extract_selected(data_tbl));</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>   sinfo_free_table(&data_tbl);</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>   <span class="comment">//check_nomsg(cpl_table_save(flag_tbl,NULL,NULL,</span></div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>   <span class="comment">//                             "out_flag.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>   sinfo_free_table(&flag_tbl);</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span> </div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>   check_nomsg(*flag_data=cpl_imagelist_new());</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>   <span class="keywordflow">for</span>(i=0;i<zsz;i++) {</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     check_nomsg(img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>     check_nomsg(cpl_image_add_scalar(img,0));</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     check_nomsg(cpl_imagelist_set(*flag_data,cpl_image_duplicate(img),i));</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>     sinfo_free_image(&img);</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>   }</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>     check_nomsg(img=cpl_imagelist_get(*flag_data,k));</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     pflag=cpl_image_get_data_double(cpl_imagelist_get(*flag_data,k));</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>     pdata=cpl_image_get_data_double(cpl_imagelist_get(obj_cub,k));</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     <span class="keywordflow">for</span>(i=0;i<xsz*ysz;i++) {</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>       <span class="keywordflow">if</span>((!irplib_isnan(pdata[i])) && pdata[i] < (cnt+2*sig)) {</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>         pflag[i]=1;</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>       }</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>     }</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>   }</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span> </div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> </div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> </div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span> </div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span> </div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span> </div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>  cleanup:</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>   sinfo_free_table(&data_tbl);</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>   sinfo_free_table(&flag_tbl);</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span> </div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span> }</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span> </div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span> </div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span> </div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span> sinfo_object_flag_sky_pixels(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>                              cpl_table* lambda,</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>                              cpl_table* mrange,</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>                  cpl_imagelist* flag_data,</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> tol,</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>                              cpl_image** g_img,</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>                              cpl_image** r_img,</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>                              cpl_image** image)</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> {</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span> </div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>   <span class="keywordtype">int</span> gpix_i=0;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>   <span class="keywordtype">double</span> tot=0;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>   <span class="keywordtype">double</span> all_pix=0;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>   <span class="keywordtype">double</span> flag_pix=0;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>   <span class="keywordtype">double</span> ratio=0;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span> </div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>   <span class="keywordtype">double</span>* pr_img=NULL;</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>   <span class="keywordtype">double</span>* pg_img=NULL;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>   <span class="keywordtype">double</span>* pimage=NULL;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>   cpl_imagelist* osel=NULL;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>   cpl_imagelist* fsel=NULL;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>   cpl_table* gpix=NULL;</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>   cpl_table* gspec=NULL;</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>   cpl_table* fspec=NULL;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>   cpl_table* ospec=NULL;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span> </div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>   cpl_imagelist* obj_cub=NULL;</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>   <span class="comment">/* Get Object relevant information */</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span> </div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>   cknull_nomsg(obj_cub=cpl_imagelist_load(cpl_frame_get_filename(obj_frm),</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>                                                       CPL_TYPE_DOUBLE,0));</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span> </div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>   <span class="comment">/* Flag sky pixels in data cube */</span></div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>   <span class="comment">/* create images */</span></div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>   check_nomsg(*r_img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>   check_nomsg(*g_img=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>   check_nomsg(*image=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span> </div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>   cknull_nomsg(pr_img=cpl_image_get_data_double(*r_img));</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>   cknull_nomsg(pg_img=cpl_image_get_data_double(*g_img));</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>   cknull_nomsg(pimage=cpl_image_get_data_double(*image));</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span> </div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>   <span class="comment">/* TODO */</span></div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>   <span class="comment">// fill image points:</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>   <span class="comment">// g_img: mask with at least half good pixels along spectral range</span></div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>   <span class="comment">// r_img: mask with ratio of good pixels along spectral range</span></div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>   <span class="comment">// image: image with mean of spectrum over good pixels</span></div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span> </div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>   <span class="comment">//check_nomsg(cpl_table_save(lambda, NULL, NULL,</span></div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>   <span class="comment">//                             "out_lambda.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>   <span class="comment">//check_nomsg(cpl_table_save(mrange, NULL, NULL,</span></div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>   <span class="comment">//                             "out_mrange.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span> </div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>   cknull_nomsg(osel=sinfo_imagelist_select_range(obj_cub,lambda,</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>                                                       mrange,tol));</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span> </div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span> </div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>   cknull_nomsg(fsel=sinfo_imagelist_select_range(flag_data,lambda,</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>                                                       mrange,tol));</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span> </div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>   <span class="comment">//check_nomsg(cpl_imagelist_save(osel,"out_osel.fits",</span></div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>   <span class="comment">//check_nomsg(cpl_imagelist_save(fsel,"out_fsel.fits",</span></div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span> </div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>   <span class="keywordflow">for</span>(j=0;j<ysz;j++) {</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>     <span class="keywordflow">for</span>(i=0;i<xsz;i++) {</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>       <span class="comment">// consider only planes in the proper wavelegth ranges</span></div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>       cknull_nomsg(ospec=sinfo_slice_z(osel,i,j));</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>       cknull_nomsg(fspec=sinfo_slice_z(fsel,i,j));</div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>       <span class="comment">// consider only finite pixels</span></div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>       check_nomsg(gpix_i=sinfo_table_extract_finite(ospec,fspec,&gpix,&gspec));</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>       <span class="comment">//sinfo_msg("gpix_i=%d",gpix_i);</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>       <span class="keywordflow">if</span>(gpix_i > 0) {</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>         <span class="comment">// build two arrays of proper size</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>         all_pix=(double)gpix_i;</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> <span class="comment">        sinfo_msg("flagspec: min=%f max=%f",</span></div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> <span class="comment">                  cpl_table_get_column_min(fspec,"VALUE"),</span></div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> <span class="comment">                  cpl_table_get_column_max(fspec,"VALUE"));</span></div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span> <span class="comment">        sinfo_msg("good flagspec: min=%f max=%f",</span></div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span> <span class="comment">                  cpl_table_get_column_min(gspec,"VALUE"),</span></div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span> <span class="comment">                  cpl_table_get_column_max(gspec,"VALUE"));</span></div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> <span class="comment">        sinfo_msg("nfspec=%d",cpl_table_get_nrow(fspec));</span></div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span> <span class="comment">        check_nomsg(cpl_table_save(fspec, NULL, NULL,</span></div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="comment">                    "out_fspec.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="comment">        check_nomsg(cpl_table_save(gspec, NULL, NULL,</span></div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="comment">                    "out_gspec.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>         <span class="comment">//check_nomsg(flag_pix=cpl_table_and_selected_double(fspec,"VALUE",</span></div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>         <span class="comment">//                                              CPL_GREATER_THAN,0.5));</span></div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>         <span class="comment">//sinfo_msg("all_pix=%f flag_pix=%f",all_pix,flag_pix);</span></div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span> </div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>         check_nomsg(flag_pix=cpl_table_and_selected_double(gspec,<span class="stringliteral">"VALUE"</span>,</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>                                                         CPL_GREATER_THAN,0.5));</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>         <span class="comment">//sinfo_msg("all_pix=%f flag_pix=%f",all_pix,flag_pix);</span></div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>         <span class="comment">// flag_pix = float(n_elements(where(fspec[gpix] > 0.5)));</span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>         <span class="comment">// compute the ratio between the two arrays</span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>         ratio=flag_pix/all_pix;</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>         <span class="comment">// considers only pixels with have at least half good pixels</span></div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>         <span class="keywordflow">if</span>(all_pix > cpl_table_get_nrow(mrange)/2) {</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>           pg_img[i+j*xsz]=1;</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>           pr_img[i+j*xsz]=ratio;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>         }</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>         <span class="comment">//mean(ospec(gpix))</span></div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>         check_nomsg(pimage[i+j*xsz]=cpl_table_get_column_mean(gpix,<span class="stringliteral">"VALUE"</span>));</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>         <span class="comment">//sinfo_msg("ix=%d iy=%d r=%f",i,j,ratio);</span></div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>       }</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>       sinfo_free_table(&ospec);</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>       sinfo_free_table(&fspec);</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>       sinfo_free_table(&gpix);</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>       sinfo_free_table(&gspec);</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span> </div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>     } <span class="comment">/* end for over i */</span></div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>   } <span class="comment">/* end for over j */</span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>   sinfo_free_imagelist(&osel);</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>   sinfo_free_imagelist(&fsel);</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span> </div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span> <span class="comment">  cpl_image_save(*r_img,"out_r_img.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> <span class="comment">                 NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> <span class="comment">  cpl_image_save(*g_img,"out_g_img.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> <span class="comment">                 NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="comment">  cpl_image_save(*image,"out_image.fits",CPL_BPP_IEEE_FLOAT,</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> <span class="comment">                 NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>   <span class="comment">// get total(g_arr)</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>   check_nomsg(tot=cpl_image_get_flux(*g_img));</div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>   <span class="keywordflow">if</span>(tot < 1) {</div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no good spaxel"</span>);</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>   }</div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span> </div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span> </div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>  cleanup:</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>   sinfo_free_imagelist(&obj_cub);</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>   sinfo_free_imagelist(&osel);</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>   sinfo_free_imagelist(&fsel);</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>    sinfo_free_table(&ospec);</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>   sinfo_free_table(&fspec);</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>   sinfo_free_table(&gpix);</div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>   sinfo_free_table(&gspec);</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span> </div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span> </div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span> </div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span> }</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> </div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span> sinfo_choose_good_sky_pixels(cpl_frame* obj_frm,</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>                              cpl_image* r_img,</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>                              cpl_image* g_img,</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> min_frac,</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                              cpl_image** mask)</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span> {</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span> </div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>   <span class="keywordtype">int</span> r2i=0;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>   <span class="keywordtype">double</span> tot=0;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>   <span class="keywordtype">double</span> thres=SKY_THRES;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>   <span class="keywordtype">double</span> cum_x_max=0;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span> </div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>   cpl_image* r2img=NULL;</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>   cpl_table* cum=NULL;</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>   cpl_table* hcum=NULL;</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>   cpl_table* thres_tbl=NULL;</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> </div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>   cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0));</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span> </div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>   <span class="comment">// choose pixels which seem to be sky (ie 95% of spectral pixels are flagged)</span></div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>   check_nomsg(*mask=cpl_image_new(xsz,ysz,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>   <span class="comment">//r2 = where(r_img >= thres,r2i);</span></div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>   <span class="comment">// count good pixels: set to 0 what < thres and to 1 what > thres</span></div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>   check_nomsg(r2img=cpl_image_duplicate(r_img));</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>   check_nomsg(cpl_image_threshold(r2img,thres,thres,0,1));</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>   check_nomsg(r2i=cpl_image_get_flux(r2img));</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>   <span class="keywordflow">if</span>(r2i>0) {</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>     sinfo_free_image(&(*mask));</div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>     check_nomsg(*mask=cpl_image_duplicate(r2img));</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>   }</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>   sinfo_free_image(&r2img);</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>   check_nomsg(r2img=cpl_image_duplicate(r_img));</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>   check_nomsg(cpl_image_threshold(r2img,thres,SINFO_DBL_MAX,0,SINFO_DBL_MAX));</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>   sinfo_free_image(&r2img);</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> </div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>   check_nomsg(tot=cpl_image_get_flux(g_img));</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> </div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>    sinfo_msg(<span class="stringliteral">"%2.2d spaxels (%4.1f %% of good pixels) are designated as sky"</span>,</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>              r2i,100.*r2i/tot);</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span> </div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>    <span class="comment">//threshold ratio for fraction 'minfrac' of spatial pixels to be 'sky'</span></div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>    <span class="keywordflow">if</span> (1.*r2i/tot < min_frac) {</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>      sinfo_msg(<span class="stringliteral">"this is too small - will increase it to %4.1f %%"</span>,</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>            100.*min_frac);</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>      check_nomsg(cum=cpl_table_new(xsz*ysz));</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>      check_nomsg(cpl_table_new_column(cum,<span class="stringliteral">"X"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>      sinfo_table_column_dindgen(&cum,<span class="stringliteral">"X"</span>);</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>      check_nomsg(cpl_table_add_scalar(cum,<span class="stringliteral">"X"</span>,1.));</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span> </div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>      <span class="comment">//hcum = r_img(sort(r_img));</span></div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>      hcum = sinfo_image2table(r_img);</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>      check_nomsg(sinfo_sort_table_1(hcum,<span class="stringliteral">"VALUE"</span>,FALSE));</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>      <span class="comment">//thresh = hcum[where(xcum/max(xcum) >= 1.-min_frac)];</span></div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>      check_nomsg(cpl_table_duplicate_column(cum,<span class="stringliteral">"H"</span>,hcum,<span class="stringliteral">"VALUE"</span>));</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>      check_nomsg(cum_x_max=cpl_table_get_column_max(cum,<span class="stringliteral">"X"</span>));</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>      check_nomsg(cpl_table_duplicate_column(cum,<span class="stringliteral">"R"</span>,cum,<span class="stringliteral">"X"</span>));</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>      check_nomsg(cpl_table_divide_scalar(cum,<span class="stringliteral">"R"</span>,cum_x_max));</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>      check_nomsg(cpl_table_and_selected_double(cum,<span class="stringliteral">"R"</span>,</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>                                               CPL_NOT_LESS_THAN,</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>                                               (1.-min_frac)));</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>      check_nomsg(thres_tbl=cpl_table_extract_selected(cum));</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span> </div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>      check_nomsg(thres = cpl_table_get(thres_tbl,<span class="stringliteral">"R"</span>,0,&status));</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>      <span class="comment">//*mask[where(r_img >= thresh)] = 1;</span></div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>      sinfo_free_image(&(*mask));</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span> </div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span> </div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>      check_nomsg(*mask=cpl_image_duplicate(r_img));</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>      check_nomsg(cpl_image_threshold(*mask,thres,thres,0,1));</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>   }</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>   sinfo_free_table(&cum);</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>   sinfo_free_table(&hcum);</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>   sinfo_free_table(&thres_tbl);</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> </div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>  cleanup:</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> </div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>   sinfo_free_image(&r2img);</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>   sinfo_free_table(&cum);</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>   sinfo_free_table(&hcum);</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>   sinfo_free_table(&thres_tbl);</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span> </div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> </div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span> </div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> </div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> sinfo_fit_bkg(<span class="keywordtype">double</span> p[])</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> </div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> {</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>  <span class="keywordtype">double</span>* px=NULL;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>   <span class="keywordtype">double</span>* py=NULL;</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>   <span class="keywordtype">double</span>* pv=NULL;</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>   cpl_vector* vtmp=NULL;</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> </div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>   <span class="keywordtype">double</span> chi2=0;</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> </div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>   check_nomsg(px= cpl_vector_get_data(sa_vx));</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>   check_nomsg(py= cpl_vector_get_data(sa_vy));</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>   check_nomsg(np= cpl_vector_get_size(sa_vx));</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>   check_nomsg(vtmp=cpl_vector_duplicate(sa_vy));</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>   check_nomsg(pv=cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span> </div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>     pv[i]=sinfo_fac(px[i],p[2]);</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>     <span class="comment">//sinfo_msg("x=%g p=%g",px[i],pv[i]);</span></div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>   }</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>   check_nomsg(max=cpl_vector_get_max(vtmp));</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>   <span class="keywordflow">if</span>(max> 0) {</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>     check_nomsg(cpl_vector_divide_scalar(vtmp,max));</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>     check_nomsg(cpl_vector_multiply_scalar(vtmp,p[1]));</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>     check_nomsg(cpl_vector_add_scalar(vtmp,p[0]));</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>   }</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span> </div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> </div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>     chi2+=(py[i]-pv[i])*(py[i]-pv[i]);</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>   }</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>   sinfo_free_my_vector(&vtmp);</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>   <span class="keywordflow">return</span> chi2;</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>  cleanup:</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>   sinfo_free_my_vector(&vtmp);</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> </div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> }</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span> </div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span> </div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> </div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> sinfo_thermal_background2(cpl_table* int_sky,</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>                          cpl_table* lambda,</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>                          cpl_table* lrange,</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>                          cpl_table** bkg)</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> {</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> </div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>   <span class="keywordtype">int</span> n2=0;</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span> </div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>   cpl_table* tmp1=NULL;</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>   cpl_table* tmp2=NULL;</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>   <span class="keywordtype">double</span> wmin=0;</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>   <span class="keywordtype">double</span> wmax=0;</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>   <span class="keywordtype">double</span> p0[3];</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>   <span class="keywordtype">double</span> y[MP];</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>   <span class="keywordtype">double</span>** ap=NULL;</div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>   <span class="keywordtype">int</span> nfunc=0;</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>   <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>   <span class="keywordtype">double</span> bkg_min=0;</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>   <span class="keywordtype">double</span> bkg_max=0;</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>   <span class="keywordtype">double</span> p0_min=0;</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>   <span class="keywordtype">double</span> p0_max=0;</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>   <span class="keywordtype">double</span> p1_min=0;</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>   <span class="keywordtype">double</span> p1_max=0;</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>   <span class="keywordtype">double</span> p2_min=0;</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>   <span class="keywordtype">double</span> p2_max=0;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>   <span class="keywordtype">double</span>* pf=NULL;</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span> </div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span> </div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>   }</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> </div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>   cknull(int_sky,<span class="stringliteral">"Null input table sky"</span>);</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>   cknull(lambda,<span class="stringliteral">"Null input table lambda"</span>);</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>   cknull(lrange,<span class="stringliteral">"Null input table lrange"</span>);</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> </div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span> </div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>   <span class="comment">//TO BE FIXED: Why lrange to gat wave min and max: int_sky is sufficient</span></div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>   check_nomsg(wmin=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>   check_nomsg(wmax=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>               CPL_NOT_LESS_THAN,wmin));</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>               CPL_NOT_GREATER_THAN,wmax));</div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>   check_nomsg(tmp1=cpl_table_extract_selected(int_sky));</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> </div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>   check_nomsg(row=sinfo_table_get_index_of_val(tmp1,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>                                                wmax,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>   check_nomsg(max=cpl_table_get_double(tmp1,<span class="stringliteral">"INT"</span>,row,&status));</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>   check_nomsg(sinfo_table_flag_nan(&tmp1,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>   check_nomsg(cpl_table_erase_invalid(tmp1));</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>   check_nomsg(cpl_table_and_selected_double(tmp1,<span class="stringliteral">"INT"</span>,CPL_NOT_EQUAL_TO,0));</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>   check_nomsg(tmp2=cpl_table_extract_selected(tmp1));</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>   sinfo_free_table(&tmp1);</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>   check_nomsg(n2=cpl_table_get_nrow(tmp2));</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>   check_nomsg(sa_vx=cpl_vector_wrap(n2,</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>               cpl_table_get_data_double(tmp2,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>   check_nomsg(sa_vy=cpl_vector_wrap(n2,</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>               cpl_table_get_data_double(tmp2,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span> </div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> </div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>       ap[i][j]=0;</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>     }</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>   }</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> </div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>   check_nomsg(bkg_min=cpl_table_get_column_min(tmp2,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>   check_nomsg(bkg_max=cpl_table_get_double(tmp2,<span class="stringliteral">"INT"</span>,row,&status));</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span> </div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span> </div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>   <span class="comment">//Init amoeba fit parameters</span></div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>   p0_min=bkg_min*0.9;</div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>   p0_max=bkg_min*1.1;</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>   p1_min=bkg_max*0.9;</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>   p1_max=bkg_max*1.1;</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>   p1_min=200;</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>   p2_max=300;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> </div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>   ap[0][0]=p0_min; ap[0][1]=p1_min; ap[0][2]=p2_min;</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>   ap[1][0]=p0_max; ap[1][1]=p1_min; ap[1][2]=p2_min;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>   ap[2][0]=p0_min; ap[2][1]=p1_max; ap[2][2]=p2_min;</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>   ap[3][0]=p0_min; ap[3][1]=p1_min; ap[3][2]=p2_max;</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> </div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>     }</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>   }</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> </div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> </div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> </div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> </div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>     p0[0]=ap[i][0];</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>     p0[1]=ap[i][1];</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     p0[2]=ap[i][2];</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>     y[i]=sinfo_fit_bkg(p0);</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>   }</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span> </div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>   sinfo_msg(<span class="stringliteral">"p0=%g %g %g"</span>,p0[0],p0[1],p0[2]);</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>   <span class="keywordflow">for</span>(i=0;i<N_ITER_FIT_AMOEBA;i++) {</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>     check_nomsg(sinfo_fit_amoeba(ap,y,NP,AMOEBA_FTOL,sinfo_fit_bkg,&nfunc));</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     sinfo_msg(<span class="stringliteral">"iter=%d ap=%g %g %g"</span>,i,ap[0][0],ap[0][1],ap[0][2]);</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>   }</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>   sinfo_unwrap_vector(&sa_vx);</div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>   sinfo_unwrap_vector(&sa_vy);</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>   sinfo_free_table(&tmp2);</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span> </div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span> </div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>     }</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>     sinfo_msg(<span class="stringliteral">"y[%d]=%g"</span>,i,y[i]);</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>   }</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span> </div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span> </div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span> </div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>   check_nomsg(nrow=cpl_table_get_nrow(lambda));</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>   check_nomsg(*bkg=cpl_table_new(nrow));</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>   check_nomsg(cpl_table_duplicate_column(*bkg,<span class="stringliteral">"WAVE"</span>,lambda,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>   cpl_table_fill_column_window(*bkg,<span class="stringliteral">"INT2"</span>,0,nrow,0.);</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>   check_nomsg(pw=cpl_table_get_data_double(*bkg,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>   check_nomsg(pf=cpl_table_get_data_double(*bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span> </div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>     pf[i]=sinfo_fac(pw[i],ap[0][2]);</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>   }</div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>   check_nomsg(max=cpl_table_get_column_max(*bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span> </div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>   <span class="keywordflow">if</span>(max != 0) {</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>      check_nomsg(cpl_table_divide_scalar(*bkg,<span class="stringliteral">"INT2"</span>,max));</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>   }</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>   check_nomsg(cpl_table_multiply_scalar(*bkg,<span class="stringliteral">"INT2"</span>,ap[0][1]));</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>   check_nomsg(cpl_table_add_scalar(*bkg,<span class="stringliteral">"INT2"</span>,ap[0][0]));</div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>   <span class="comment">//check_nomsg(cpl_table_save(*bkg,NULL,NULL,</span></div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>   <span class="comment">//"out_amoeba5.fits",CPL_IO_DEFAULT ));</span></div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>   sinfo_new_destroy_2Ddoublearray(&ap,MP);</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span> </div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span> </div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span> </div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>  cleanup:</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>   sinfo_new_destroy_2Ddoublearray(&ap,MP);</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>   sinfo_free_table(&tmp1);</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>   sinfo_free_table(&tmp2);</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>   sinfo_unwrap_vector(&sa_vx);</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>   sinfo_unwrap_vector(&sa_vy);</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span> </div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span> }</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> </div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span> </div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> </div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span> </div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span> sinfo_thermal_background(cpl_table* int_sky,</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>                          cpl_table* lambda,</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>                          cpl_table* lrange,</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> temp,</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> niter,</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> filter_width,</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> tol,</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>                          cpl_table** bkg,</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>                          <span class="keywordtype">int</span>* success_fit)</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> {</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span> </div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>   <span class="keywordtype">int</span> npix=0;</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>   <span class="keywordtype">int</span> row=0;</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> ndim=3;<span class="comment">/* There are 3 parameters */</span></div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>     <span class="keywordtype">int</span> ia[ndim];</div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span> </div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>   <span class="keywordtype">int</span> NPOINTS=0;</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> </div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span> </div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>   <span class="keywordtype">double</span> temp1=0;</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>   <span class="keywordtype">double</span> temp2=0;</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span> </div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>   <span class="comment">//double r0=80.306773;</span></div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>   <span class="comment">//double r1=450.50027;</span></div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>   <span class="comment">//double r2=252.17949;</span></div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>   <span class="keywordtype">double</span> max_tmp2=0;</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>   <span class="keywordtype">double</span>* ptmp1=NULL;</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>   <span class="keywordtype">double</span> thermal=0;</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>   <span class="keywordtype">double</span> p0[3];</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>   <span class="keywordtype">double</span> wmin=0;</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>   <span class="keywordtype">double</span> wmax=0;</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>   <span class="keywordtype">double</span> ga0=0;</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>   <span class="keywordtype">double</span> ga1=0;</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>   <span class="comment">//double ga1=0;</span></div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>   <span class="keywordtype">double</span> ga2=0;</div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>   <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>   <span class="keywordtype">double</span> chired=0;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span> </div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span> </div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>   cpl_vector *a = cpl_vector_new(ndim);</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>   cpl_table* xlr=NULL;</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>   cpl_table* ylr=NULL;</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>   cpl_table* wlr=NULL;</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>   cpl_table* tmp=NULL;</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>   cpl_table* temp2_tbl=NULL;</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span> </div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>   cpl_vector* y=NULL;</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>   cpl_vector* fy=NULL;</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> </div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>   cpl_vector* sy=NULL;</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> </div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>   cpl_matrix* x_matrix=NULL;</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>   <span class="keywordtype">double</span> bkg_min=0;</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>   <span class="keywordtype">double</span> bkg_max=0;</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>   <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>   <span class="keywordtype">double</span> sdv=0;</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>   <span class="keywordtype">double</span>* pif=NULL;</div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>   <span class="keywordtype">double</span>* pwf=NULL;</div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>   <span class="keywordtype">double</span>* pws=NULL;</div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span> </div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>   <span class="comment">//"out_pippo.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>   check_nomsg(wmin=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>   check_nomsg(wmax=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span> </div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>   bkg_min=sinfo_fac(wmin,temp);</div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>   bkg_max=sinfo_fac(wmax,temp);</div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>   <span class="comment">//sinfo_msg("bkg: min=%g max=%g",bkg_min,bkg_max);</span></div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>   <span class="comment">//sinfo_scale_fct=sinfo_scale_fct*bkg_max;</span></div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>   <span class="comment">//sinfo_scale_fct=sinfo_scale_fct;</span></div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span> </div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>   check_nomsg(cpl_table_and_selected_double(lambda,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>                                             CPL_NOT_LESS_THAN,wmin));</div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>   check_nomsg(tmp=cpl_table_extract_selected(lambda));</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span> </div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>                                             CPL_NOT_GREATER_THAN,wmax));</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>   check_nomsg(xlr=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span> </div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span> </div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>   check_nomsg(cpl_table_and_selected_double(int_sky,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>                                             CPL_NOT_LESS_THAN,wmin));</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>   check_nomsg(tmp=cpl_table_extract_selected(int_sky));</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>                                             CPL_NOT_GREATER_THAN,wmax));</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span> </div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span> </div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>   <span class="comment">//To be sure one has not strange cases</span></div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"INT"</span>,CPL_GREATER_THAN,-2));</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>   check_nomsg(ylr=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>   check_nomsg(tmp=cpl_table_duplicate(ylr));</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>   sinfo_free_table(&ylr);</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span> </div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>   check_nomsg(avg=cpl_table_get_column_mean(tmp,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>   check_nomsg(sdv=cpl_table_get_column_stdev(tmp,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>   check_nomsg(cpl_table_and_selected_double(tmp,<span class="stringliteral">"INT"</span>,</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>                         CPL_LESS_THAN,avg+10*sdv));</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span> </div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>   check_nomsg(ylr=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span> </div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span> </div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span> <span class="comment">  check_nomsg(xlr=sinfo_table_select_range(lambda,lrange,0.003));</span></div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span> <span class="comment">  check_nomsg(ylr=sinfo_table_select_range(int_sky,lrange,0.003));</span></div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>   check_nomsg(cpl_table_and_selected_double(ylr,<span class="stringliteral">"INT"</span>,CPL_NOT_EQUAL_TO,0));</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span> </div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>   check_nomsg(wlr=cpl_table_extract_selected(ylr));</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span> </div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span> </div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>   check_nomsg(p0[0]=cpl_table_get_column_min(wlr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>   check_nomsg(row=sinfo_table_get_index_of_val(ylr,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>                                                wmax,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>   check_nomsg(p0[1]=cpl_table_get_double(ylr,<span class="stringliteral">"INT"</span>,row,&status));</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>   p0[2]=temp;</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span> </div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> </div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>   ga0=p0[0];</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>   ga1=p0[1]/bkg_max;</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>   <span class="comment">//ga1=p0[1];</span></div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>   ga2=p0[2];</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span> </div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>   <span class="comment">//sinfo_msg("p= %g %g %g",p0[0],p0[1],p0[2]);</span></div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>   check_nomsg(sinfo_table_flag_nan(&wlr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>   check_nomsg(cpl_table_erase_invalid(wlr));</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>   <span class="comment">//check_nomsg(cpl_table_save(xlr,NULL,NULL,"out_xlr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>   <span class="comment">//check_nomsg(cpl_table_save(wlr,NULL,NULL,"out_wlr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span> </div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span> </div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>   check_nomsg(NPOINTS=cpl_table_get_nrow(ylr));</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span> </div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>   check_nomsg(x_matrix = cpl_matrix_wrap(NPOINTS,1,</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>                                        cpl_table_get_data_double(ylr,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>   check_nomsg(y=cpl_vector_wrap(NPOINTS,cpl_table_get_data_double(ylr,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>   <span class="comment">//check_nomsg(fy=cpl_vector_filter_median_create(y,1));</span></div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>   <span class="comment">//check_nomsg(fy=cpl_vector_filter_lowpass_create(y,CPL_LOWPASS_LINEAR,3));</span></div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>   check_nomsg(fy=sinfo_sky_background_estimate(y,filter_width,filter_width));</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr2.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>   pif=cpl_vector_get_data(fy);</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>   pwf=cpl_table_get_data_double(ylr,<span class="stringliteral">"WAVE"</span>);</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> </div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span> </div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>   check_nomsg(cpl_table_new_column(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>   check_nomsg(cpl_table_new_column(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>   pws=cpl_table_get_data_double(int_sky,<span class="stringliteral">"WAVE"</span>);</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span> </div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>   k=0;</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>   i=0;</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>   check_nomsg(nrow=cpl_table_get_nrow(int_sky));</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>   <span class="keywordflow">if</span>((pws[0]-pwf[0])>0) {</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>     <span class="keywordflow">for</span>(i=0;i<NPOINTS;i++) {</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>       <span class="keywordflow">if</span>(fabs(pws[k]-pwf[i]) < tol) {</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,k,pif[i]));</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,k,pws[i]));</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>     k++;</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>       }</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>     }</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>     <span class="keywordflow">for</span>(k=0;k<nrow;k++) {</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>       <span class="keywordflow">if</span>((i<NPOINTS) && (fabs(pws[k]-pwf[i]) < tol)) {</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"INT_BKG_SMO"</span>,k,pif[i]));</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>     check_nomsg(cpl_table_set_double(int_sky,<span class="stringliteral">"WAVE_SMO"</span>,k,pws[i]));</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>     i++;</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>       }</div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>     }</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span> </div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>   }</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span> </div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>   <span class="comment">//check_nomsg(cpl_table_save(ylr,NULL,NULL,"out_ylr3.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span> </div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>   check_nomsg(cpl_vector_set(a, 0, ga0));</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>   check_nomsg(cpl_vector_set(a, 1, ga1));</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>   check_nomsg(cpl_vector_set(a, 2, ga2));</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span> </div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>   check_nomsg(sy=cpl_vector_duplicate(y));</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>   check_nomsg(cpl_vector_power(sy,2));</div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>   check_nomsg(cpl_vector_power(sy,0.5));</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>   <span class="comment">//check_nomsg(cpl_vector_fill(sy,0.001));</span></div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span> </div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>   ia[0] = 1;</div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>   ia[1] = 1;</div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>   ia[2] = 1;</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span> </div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span> </div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>   <span class="keywordflow">for</span>(i=0;i<niter;i++) {</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span> </div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> <span class="comment">    sinfo_msg("before fit: a=%g %g %g",</span></div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> <span class="comment">              cpl_vector_get(a,0),</span></div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span> <span class="comment">              cpl_vector_get(a,1),</span></div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> <span class="comment">              cpl_vector_get(a,2));</span></div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>     <span class="keywordflow">if</span>(CPL_ERROR_NONE != sinfo_fit_lm(x_matrix,NULL,fy,sy,a,ia,sinfo_fitbkg,</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>                       sinfo_fitbkg_derivative,</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>                       &mse,&chired,NULL)) {</div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Thermal background fit failed"</span>);</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>       cpl_error_reset();</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>       *success_fit=1;</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span> </div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>       <span class="keywordflow">goto</span> recover;</div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>     }</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span> </div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>     <span class="comment">//bkg_max=sinfo_fac(wmax,cpl_vector_get(a,2));</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>     <span class="comment">//sinfo_scale_fct=sinfo_scale_fct*bkg_max;</span></div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span> <span class="comment">    sinfo_msg("after fit: a=%g %g %g chired=%g",</span></div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span> <span class="comment">              cpl_vector_get(a,0),</span></div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span> <span class="comment">          cpl_vector_get(a,1),</span></div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> <span class="comment">              cpl_vector_get(a,2),</span></div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span> <span class="comment">              chired);</span></div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span> <span class="comment"></span></div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span> </div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>   }</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span> </div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>     sinfo_msg(<span class="stringliteral">"Last fit: a=%g %g %g chired=%g"</span>,</div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>               cpl_vector_get(a,0),</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>           cpl_vector_get(a,1),</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>               cpl_vector_get(a,2),</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>               chired);</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span> </div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>   sinfo_free_my_vector(&fy);</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>   sinfo_unwrap_vector(&y);</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>   sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>   sinfo_unwrap_matrix(&x_matrix);</div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>   sinfo_free_table(&xlr);</div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>   sinfo_free_table(&ylr);</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>   sinfo_free_table(&wlr);</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span> </div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>   ga0=cpl_vector_get(a,0);</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>   ga1=cpl_vector_get(a,1);</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>   ga2=cpl_vector_get(a,2);</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>   <span class="comment">//ga2=252.69284;</span></div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>   check_nomsg(npix=cpl_table_get_nrow(lrange));</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>   check_nomsg(pw=cpl_table_get_data_double(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>   check_nomsg(temp2_tbl=cpl_table_new(npix));</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>   check_nomsg(cpl_table_new_column(temp2_tbl,<span class="stringliteral">"TEMP2"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span> </div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>   <span class="keywordflow">for</span>(i=0;i<npix;i++) {</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>     temp2=sinfo_fac(pw[i],ga2);</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>     check_nomsg(cpl_table_set_double(temp2_tbl,<span class="stringliteral">"TEMP2"</span>,i,temp2));</div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>   }</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>   check_nomsg(max_tmp2=cpl_table_get_column_max(temp2_tbl,<span class="stringliteral">"TEMP2"</span>));</div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>   sinfo_free_table(&temp2_tbl);</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span> </div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span> </div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span> </div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>   check_nomsg(npix=cpl_table_get_nrow(lambda));</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>   check_nomsg(pw=cpl_table_get_data_double(lambda,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>   check_nomsg(*bkg=cpl_table_new(npix));</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"TEMP1"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> </div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>   <span class="keywordflow">for</span>(i=0;i<npix;i++) {</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"WAVE"</span>,i,pw[i]));</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>     temp1=sinfo_fac(pw[i],ga2);</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"TEMP1"</span>,i,temp1));</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>   }</div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span> </div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>   check_nomsg(ptmp1=cpl_table_get_data_double(*bkg,<span class="stringliteral">"TEMP1"</span>));</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>   <span class="comment">//bkg_max=sinfo_fac(wmax,ga2);</span></div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span> </div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>   <span class="keywordflow">for</span>(i=0;i<npix;i++) {</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>     thermal=ga0+ptmp1[i]/max_tmp2*ga1;</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT"</span>,i,thermal));</div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>     thermal=ga0+ga1*sinfo_fac(pw[i],ga2);</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT2"</span>,i,thermal));</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>   }</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>   sinfo_free_my_vector(&a);</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span> </div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>  recover:</div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>   <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Recover fit of thermal background"</span>);</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>   check_nomsg(npix=cpl_table_get_nrow(lambda));</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>   check_nomsg(*bkg=cpl_table_new(npix));</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"TEMP1"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>   check_nomsg(cpl_table_new_column(*bkg,<span class="stringliteral">"INT2"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span> </div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>   med=cpl_table_get_column_median(ylr,<span class="stringliteral">"INT"</span>);</div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>   <span class="keywordflow">for</span>(i=0;i<npix;i++) {</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT"</span>,i,med));</div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>     check_nomsg(cpl_table_set_double(*bkg,<span class="stringliteral">"INT2"</span>,i,med));</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>   }</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span> </div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>   sinfo_free_my_vector(&a);</div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>   sinfo_unwrap_vector(&y);</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>   sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>   sinfo_unwrap_matrix(&x_matrix);</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>   sinfo_free_table(&xlr);</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>   sinfo_free_table(&ylr);</div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>   sinfo_free_table(&wlr);</div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> </div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span> </div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span> </div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>  cleanup:</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>   sinfo_free_my_vector(&a);</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>   sinfo_unwrap_vector(&y);</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>   sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>   sinfo_unwrap_matrix(&x_matrix);</div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span> </div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>   sinfo_free_table(&xlr);</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>   sinfo_free_table(&ylr);</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>   sinfo_free_table(&wlr);</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>   sinfo_free_table(&temp2_tbl);</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span> </div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span> </div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span> }</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span> </div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span> sinfo_filter_min(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span> {</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span> </div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>   cpl_vector* vo=NULL;</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>   <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>   <span class="keywordtype">int</span> start=size/2;</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>   <span class="keywordtype">int</span> end=0;</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>   <span class="keywordtype">int</span> length=0;</div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>   cknull(vi,<span class="stringliteral">"null input vector"</span>);</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>   pi=cpl_vector_get_data_const(vi);</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>   length=cpl_vector_get_size(vi);</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>   end=length-size/2;</div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>   vo=cpl_vector_new(length);</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>   po=cpl_vector_get_data(vo);</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span> </div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>   <span class="keywordflow">for</span>(i=start; i < end; i++) {</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>     min=pi[i-start];</div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>     <span class="keywordflow">for</span>(j=i-start+1;j<i+start+1;j++) {</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>       <span class="keywordflow">if</span>(min> pi[j]) {</div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>     min=pi[j];</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>       }</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>     }</div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>     po[i]=min;</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span> </div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>   }</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span> </div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>   <span class="comment">// To prevent border effects:</span></div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>   <span class="keywordflow">for</span> (i = 0; i < start; i++) {</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>     po[i] = po[start];</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>   }</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span> </div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>   <span class="keywordflow">for</span> (i = end; i < length; i++) {</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>     po[i] = po[end-1];</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>   }</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>   <span class="keywordflow">return</span> vo;</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span> </div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>  cleanup:</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span> </div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span> </div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span> }</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span> </div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span> </div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span> sinfo_filter_max(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span> {</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span> </div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>   cpl_vector* vo=NULL;</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>   <span class="keywordtype">int</span> start=size/2;</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>   <span class="keywordtype">int</span> end=0;</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>   <span class="keywordtype">int</span> length=0;</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span> </div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>   cknull(vi,<span class="stringliteral">"null input vector"</span>);</div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>   pi=cpl_vector_get_data_const(vi);</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>   length=cpl_vector_get_size(vi);</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>   end=length-size/2;</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>   vo=cpl_vector_new(length);</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>   po=cpl_vector_get_data(vo);</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span> </div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>   <span class="keywordflow">for</span>(i=start; i < end; i++) {</div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>     max=pi[i-start];</div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>     <span class="keywordflow">for</span>(j=i-start+1;j<i+start+1;j++) {</div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>       <span class="keywordflow">if</span>(max< pi[j]) {</div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>     max=pi[j];</div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>       }</div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>     }</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>     po[i]=max;</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span> </div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>   }</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span> </div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>   <span class="comment">// To prevent border effects:</span></div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>   <span class="keywordflow">for</span> (i = 0; i < start; i++) {</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>     po[i] = po[start];</div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>   }</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span> </div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>   <span class="keywordflow">for</span> (i = end; i < length; i++) {</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>     po[i] = po[end-1];</div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>   }</div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>   <span class="keywordflow">return</span> vo;</div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span> </div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>  cleanup:</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span> </div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span> </div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> }</div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span> </div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span> </div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> </div>
+<div class="line"><a name="l03227"></a><span class="lineno"> 3227</span> <span class="keyword">static</span> cpl_vector*</div>
+<div class="line"><a name="l03228"></a><span class="lineno"> 3228</span> sinfo_filter_smo(<span class="keyword">const</span> cpl_vector* vi, <span class="keyword">const</span> <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l03229"></a><span class="lineno"> 3229</span> {</div>
+<div class="line"><a name="l03230"></a><span class="lineno"> 3230</span> </div>
+<div class="line"><a name="l03231"></a><span class="lineno"> 3231</span> </div>
+<div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>   <span class="keywordtype">double</span> sum=0;</div>
+<div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>   <span class="keywordtype">int</span> start=size/2;</div>
+<div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>   <span class="keywordtype">int</span> end=0;</div>
+<div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>   <span class="keywordtype">int</span> length=0;</div>
+<div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>   cpl_vector* vo=NULL;</div>
+<div class="line"><a name="l03241"></a><span class="lineno"> 3241</span> </div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>   cknull(vi,<span class="stringliteral">"null input vector"</span>);</div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>   length=cpl_vector_get_size(vi);</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>   end=length-size/2;</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>   vo=cpl_vector_new(length);</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>   pi=cpl_vector_get_data_const(vi);</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>   po=cpl_vector_get_data(vo);</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span> </div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>   <span class="keywordflow">for</span>(i=start; i < end; i++) {</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>     sum=0;</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>     <span class="keywordflow">for</span>(j=i - start;j<i+start+1;j++) {</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>       sum += pi[j];</div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>     }</div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>     po[i]=sum/size;</div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> </div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>   }</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span> </div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>   <span class="comment">// To prevent border effects:</span></div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>   <span class="keywordflow">for</span> (i = 0; i < start; i++) {</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>     po[i] = po[start];</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>   }</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span> </div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>   <span class="keywordflow">for</span> (i = end; i < length; i++) {</div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>     po[i] = po[end-1];</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>   }</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>   <span class="keywordflow">return</span> vo;</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span> </div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>  cleanup:</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> </div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span> }</div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span> </div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span> cpl_vector* sinfo_sky_background_estimate(cpl_vector *spectrum,</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>                                              <span class="keywordtype">int</span> msize,</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>                                              <span class="keywordtype">int</span> fsize)</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span> {</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span> </div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>     cpl_vector  * minf=NULL;</div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>     cpl_vector  * maxf=NULL;</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>     cpl_vector  * smof=NULL;</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>     cpl_vector  * back=NULL;</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>     <span class="keywordtype">double</span>* pb=NULL;</div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>     <span class="keywordtype">double</span>* ps=NULL;</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span> </div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>     <span class="keywordtype">int</span>     i=0;</div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>     <span class="keywordtype">int</span> length=0;</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span> </div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span> </div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>     cknull(spectrum,<span class="stringliteral">"null input data"</span>);</div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span> </div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>     <span class="keywordflow">if</span> (msize % 2 == 0)</div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>         msize++;</div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span> </div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>     <span class="keywordflow">if</span> (fsize % 2 == 0)</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>         fsize++;</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>     check_nomsg(length=cpl_vector_get_size(spectrum));</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span> </div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>     <span class="keywordflow">if</span> (msize < 3 || fsize < msize || length < 2*fsize)</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span> </div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>     cknull_nomsg(minf = sinfo_filter_min(spectrum, msize));</div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>     cknull_nomsg(smof = sinfo_filter_smo(minf, fsize));</div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>     cpl_vector_delete(minf);</div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>     cknull_nomsg(maxf = sinfo_filter_max(smof,2*msize+1));</div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>     cpl_vector_delete(smof);</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>     cknull_nomsg(smof = sinfo_filter_smo(maxf, 2*fsize+1));</div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>     cpl_vector_delete(maxf);</div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>     cknull_nomsg(minf = sinfo_filter_min(smof, 2*msize+1));</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>     cpl_vector_delete(smof);</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>     cknull_nomsg(smof = sinfo_filter_smo(minf, 2*fsize+1));</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>     cpl_vector_delete(minf);</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>     cknull_nomsg(back=cpl_vector_new(length));</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>     cknull_nomsg(pb=cpl_vector_get_data(back));</div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>     cknull_nomsg(ps=cpl_vector_get_data(smof));</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span> </div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>     <span class="keywordflow">for</span> (i = 0; i < length; i++) {</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>         pb[i] = ps[i];</div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>      }</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>     cpl_vector_delete(smof);</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span> </div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>     <span class="keywordflow">return</span> back;</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>  cleanup:</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span> </div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span> </div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span> }</div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span> </div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span> </div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span> </div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span> sinfo_slice_z(<span class="keyword">const</span> cpl_imagelist* cin,<span class="keyword">const</span> <span class="keywordtype">int</span> i,<span class="keyword">const</span> <span class="keywordtype">int</span> j)</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span> {</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>   <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>   cpl_table* tout=NULL;</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>   <span class="keyword">const</span> cpl_image* img=NULL;</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pim=NULL;</div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span> </div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>   cknull(cin,<span class="stringliteral">"null input imagelist"</span>);</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>   check_nomsg(sz=cpl_imagelist_get_size(cin));</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>   check_nomsg(img=cpl_imagelist_get_const(cin,0));</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>   check_nomsg(sx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>   check_nomsg(sy=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>   check_nomsg(tout=cpl_table_new(sz));</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>   check_nomsg(cpl_table_new_column(tout,<span class="stringliteral">"VALUE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>   <span class="keywordflow">for</span>(k=0;k<sz;k++) {</div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>     check_nomsg(img=cpl_imagelist_get_const(cin,k));</div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>     check_nomsg(pim=cpl_image_get_data_double_const(img));</div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>     check_nomsg(cpl_table_set(tout,<span class="stringliteral">"VALUE"</span>,k,pim[j*sx+i]));</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>   }</div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span> </div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>   <span class="keywordflow">return</span> tout;</div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>  cleanup:</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>   sinfo_free_table(&tout);</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span> </div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span> </div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span> }</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span> </div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span> sinfo_xcorr(cpl_table* int_obj,</div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>             cpl_table* int_sky,</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>             cpl_table* lambda,</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> dispersion,</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw)</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span> {</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>   cpl_table* z=NULL;</div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>   cpl_table* tmp_sky=NULL;</div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> </div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>   cpl_table* z_diff=NULL;</div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>   cpl_table* z_pos=NULL;</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> </div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>   <span class="keywordtype">int</span> z_ext=0;</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>   <span class="keywordtype">double</span> z_mean=0;</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>   <span class="keywordtype">double</span> z_sdv=0;</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span> </div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>   <span class="keywordtype">double</span> g_lam=0;</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>   <span class="keywordtype">double</span> g_err=0;</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span> </div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>   <span class="keywordtype">double</span> sky_max=0;</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span> </div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>   <span class="keywordtype">double</span>* pint=NULL;</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>   <span class="keywordtype">int</span>* ppos=NULL;</div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>   <span class="keywordtype">int</span> zsize=0;</div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>   <span class="keywordtype">int</span> iq=0;</div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span> </div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>   <span class="keywordtype">double</span> g_diff=0;</div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>   <span class="keywordtype">int</span> jz=0;</div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>   <span class="keywordtype">int</span> z1=0;</div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>   <span class="keywordtype">int</span> nfit=0;</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>   <span class="keywordtype">int</span> npos=0;</div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>   cpl_table* z_good=NULL;</div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>   cpl_table* w_tbl=NULL;</div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>   cpl_table* o_tbl=NULL;</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>   cpl_table* s_tbl=NULL;</div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>   cpl_vector* vw=NULL;</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>   cpl_vector* vs=NULL;</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>   cpl_vector* vo=NULL;</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>   cpl_vector* sx=NULL;</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>   cpl_vector* sy=NULL;</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span> </div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span> </div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>   <span class="keywordtype">double</span> o1=0;</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>   <span class="keywordtype">double</span> o2=0;</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>   <span class="keywordtype">double</span> oc=0;</div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>   <span class="keywordtype">double</span> om=0;</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> </div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span> </div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span> </div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>   <span class="keywordtype">double</span> zfit=0;</div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span> </div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span> </div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>   <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span> </div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>   <span class="keywordtype">double</span> wc_s=0;</div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>   <span class="keywordtype">double</span> sig_s=0;</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>   <span class="keywordtype">double</span> bkg_s=0;</div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>   <span class="keywordtype">double</span> amp_s=0;</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>   <span class="keywordtype">double</span> area_s=0;</div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span> </div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>   <span class="keywordtype">double</span> wo=0;</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>   <span class="keywordtype">double</span> wc_o=0;</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>   <span class="keywordtype">double</span> sig_o=0;</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>   <span class="keywordtype">double</span> bkg_o=0;</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>   <span class="keywordtype">double</span> amp_o=0;</div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>   <span class="keywordtype">double</span> area_o=0;</div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span> </div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>   cpl_polynomial* cfit=NULL;</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>   cpl_size pows[2];</div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>   cpl_vector* vx=NULL;</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>   cpl_vector* vy=NULL;</div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span> </div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span> </div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>   cpl_error_code error_code=CPL_ERROR_NONE;</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span> </div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>   <span class="comment">// crosscorrelate obj & sky to check for lambda offset</span></div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> </div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>   <span class="comment">//if (mean(z[where(finite(z))]) < 0) z = z * (-1);</span></div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>   <span class="comment">//if sky mean is < 0 flip sky intensity</span></div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>   zsize=cpl_table_get_nrow(int_obj);</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>   check_nomsg(z = cpl_table_duplicate(int_sky));</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>   ck0_nomsg(sinfo_table_flag_nan(&z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>   check_nomsg(z_mean=cpl_table_get_column_mean(z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>   <span class="keywordflow">if</span>(z_mean < 0) {</div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>     check_nomsg(cpl_table_multiply_scalar(z,<span class="stringliteral">"INT"</span>,-1));</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>   }</div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z2.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span> </div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>   <span class="comment">//z[where(int_sky < max(int_sky[where(finite(int_sky))])/4)] = 0;</span></div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>   <span class="comment">// take in consideration only strong sky lines (set else to 0)</span></div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>   check_nomsg(tmp_sky=cpl_table_duplicate(int_sky));</div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>   ck0_nomsg(sinfo_table_flag_nan(&tmp_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>   check_nomsg(sky_max=cpl_table_get_column_max(tmp_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>   sinfo_free_table(&tmp_sky);</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span> </div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>   <span class="comment">//flag too low values</span></div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>   check_nomsg(nrow=cpl_table_get_nrow(z));</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>   check_nomsg(pint=cpl_table_get_data_double(z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>   check_nomsg(sky_max=cpl_table_get_column_max(z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>     <span class="keywordflow">if</span>(pint[i]<sky_max/SKY_LINE_MIN_CUT) {</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>       pint[i]=0;</div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>     }</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>   }</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span> </div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span> </div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>   <span class="comment">//check_nomsg(cpl_table_save(z,NULL,NULL,"out_z4.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>   <span class="comment">//computes gradient</span></div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>   <span class="comment">//z_diff = z[0:n_elements(z)-2] - z[1:n_elements(z)-1];</span></div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>   check_nomsg(z_diff=cpl_table_duplicate(z));</div>
+<div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"INT1"</span>,z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"INT2"</span>,z,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>   check_nomsg(cpl_table_shift_column(z_diff,<span class="stringliteral">"INT1"</span>,-1));</div>
+<div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>   check_nomsg(cpl_table_duplicate_column(z_diff,<span class="stringliteral">"DIFF"</span>,z_diff,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>   check_nomsg(cpl_table_subtract_columns(z_diff,<span class="stringliteral">"DIFF"</span>,<span class="stringliteral">"INT1"</span>));</div>
+<div class="line"><a name="l03560"></a><span class="lineno"> 3560</span> </div>
+<div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>   check_nomsg(cpl_table_erase_window(z_diff,nrow-2,2));</div>
+<div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>   <span class="comment">//check_nomsg(cpl_table_save(z_diff,NULL,NULL,</span></div>
+<div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>   <span class="comment">//                             "out_z_diff.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03564"></a><span class="lineno"> 3564</span> </div>
+<div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>   <span class="comment">//identify points positions at which there is a line pick</span></div>
+<div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>   check_nomsg(cpl_table_new_column(z_diff,<span class="stringliteral">"POS"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>   check_nomsg(cpl_table_fill_column_window_int(z_diff,<span class="stringliteral">"POS"</span>,0,nrow,0));</div>
+<div class="line"><a name="l03568"></a><span class="lineno"> 3568</span> </div>
+<div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>   check_nomsg(pint=cpl_table_get_data_double(z_diff,<span class="stringliteral">"DIFF"</span>));</div>
+<div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>   check_nomsg(ppos=cpl_table_get_data_int(z_diff,<span class="stringliteral">"POS"</span>));</div>
+<div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>   check_nomsg(nrow=cpl_table_get_nrow(z_diff));</div>
+<div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>   <span class="keywordflow">for</span>(i=1;i<nrow;i++) {</div>
+<div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>     <span class="keywordflow">if</span>(!irplib_isnan(pint[i]) && (pint[i]>0 && pint[i-1]<0)) {</div>
+<div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>       ppos[i]=i;</div>
+<div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>     }</div>
+<div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>   }</div>
+<div class="line"><a name="l03577"></a><span class="lineno"> 3577</span> </div>
+<div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>   <span class="comment">//check_nomsg(cpl_table_save(z_diff,NULL,NULL,"out_z_diff.fits",</span></div>
+<div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>   <span class="comment">//                             CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>   check_nomsg(cpl_table_select_all(z_diff));</div>
+<div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>   check_nomsg(cpl_table_and_selected_int(z_diff,<span class="stringliteral">"POS"</span>,CPL_GREATER_THAN,0));</div>
+<div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>   check_nomsg(z_pos=cpl_table_extract_selected(z_diff));</div>
+<div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>   sinfo_free_table(&z_diff);</div>
+<div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span></div>
+<div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>   <span class="comment">//Do a gaussian fit in a range of size 2*zext centered at</span></div>
+<div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>   <span class="comment">//each line maximum position (fit the line) to get in corresponding arrays:</span></div>
+<div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>   <span class="comment">// 1) line lambda position of object and sky</span></div>
+<div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>   <span class="comment">// 2) line object -sky intensity</span></div>
+<div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>   <span class="comment">// 3) line object-sky intensity error</span></div>
+<div class="line"><a name="l03591"></a><span class="lineno"> 3591</span> </div>
+<div class="line"><a name="l03592"></a><span class="lineno"> 3592</span> </div>
+<div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>   g_lam = 0.;</div>
+<div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>   g_diff = 0.;</div>
+<div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>   g_err = 0.;</div>
+<div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>   check_nomsg(npos=cpl_table_get_nrow(z_pos));</div>
+<div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>   z_ext = line_hw ;</div>
+<div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"STATUS_S"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"STATUS_O"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>   check_nomsg(cpl_table_fill_column_window_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,0,npos,0));</div>
+<div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>   check_nomsg(cpl_table_fill_column_window_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,0,npos,0));</div>
+<div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"SIGS"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVES"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"BKGS"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AREAS"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AMPS"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span> </div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span> </div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"SIGO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVEO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"BKGO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AREAO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"AMPO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span> </div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WAVEC"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"WDIF"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"ERR"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span> </div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>   nfit=2*z_ext+1;</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>   <span class="comment">//sinfo_msg("npos=%d z_ext=%d",npos,z_ext);</span></div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"POS",CPL_TYPE_INT);</span></div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span></div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>   <span class="comment">//                             "out_z_pos_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>   <span class="comment">//check_nomsg(cpl_table_save(int_obj,NULL,NULL,</span></div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>   <span class="comment">//                             "out_int_obj_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>   <span class="comment">//                             "out_int_sky_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span> </div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>   <span class="keywordflow">for</span> (jz=0;jz<npos;jz++) {</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>     check_nomsg(z1 = cpl_table_get_int(z_pos,<span class="stringliteral">"POS"</span>,jz,&status));</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>     <span class="comment">//sinfo_msg("z1=%d",z1);</span></div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>     <span class="comment">// AMO added if check to prevent array explosion</span></div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>     <span class="keywordflow">if</span>((z1-z_ext) > 0 && (z1+z_ext) < zsize) {</div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>       check_nomsg(cpl_table_select_all(int_sky));</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>       check_nomsg(cpl_table_select_all(int_obj));</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>       check_nomsg(cpl_table_select_all(lambda));</div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>       check_nomsg(cpl_table_and_selected_window(int_sky,z1-z_ext,nfit));</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>       check_nomsg(s_tbl=cpl_table_extract_selected(int_sky));</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>       check_nomsg(cpl_table_and_selected_window(lambda,z1-z_ext,nfit));</div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>       check_nomsg(w_tbl=cpl_table_extract_selected(lambda));</div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>       check_nomsg(cpl_table_and_selected_window(int_obj,z1-z_ext,nfit));</div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>       check_nomsg(o_tbl=cpl_table_extract_selected(int_obj));</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span> </div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span> </div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>       check_nomsg(vw=cpl_vector_wrap(nfit,</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>                      cpl_table_get_data_double(w_tbl,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>       check_nomsg(vs=cpl_vector_wrap(nfit,</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>                      cpl_table_get_data_double(s_tbl,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>       check_nomsg(vo=cpl_vector_wrap(nfit,</div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>                      cpl_table_get_data_double(o_tbl,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span> </div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span> </div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>       check_nomsg(sx=cpl_vector_new(nfit));</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>       check_nomsg(cpl_vector_fill(sx,10.));</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>       check_nomsg(sy=cpl_vector_duplicate(sx));</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span> </div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span> </div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>       <span class="comment">// Check if the object line is in emission or absorbtion</span></div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>       o1=cpl_vector_get(vo,0);</div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>       o2=cpl_vector_get(vo,nfit-1);</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>       oc=(o1+o2)*0.5;</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>       om=cpl_vector_get_median_const(vo);</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>       <span class="keywordflow">if</span>(om<oc) {</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>     cpl_vector_multiply_scalar(vo,-1.);</div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>       }</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>       check_nomsg(ws=cpl_table_get_double(lambda,<span class="stringliteral">"WAVE"</span>,z1,&status));</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>       check_nomsg(amp_s=cpl_table_get_double(z_pos,<span class="stringliteral">"INT"</span>,jz,&status));</div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>       wc_s=ws;</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>       sig_s=z_ext*dispersion;</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>       bkg_s=0;</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>       area_s=sinfo_gaussian_area(amp_s,sig_s,ws,wc_s,bkg_s);</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>       <span class="keywordflow">if</span>(wc_s < 2.35) {</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>         <span class="comment">//sinfo_msg("wc_s=%f",wc_s);</span></div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>         <span class="comment">//cpl_vector_dump(vw,stdout);</span></div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>         <span class="comment">//cpl_vector_dump(vs,stdout);</span></div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span> </div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>         error_code=cpl_vector_fit_gaussian(vw,NULL,</div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>                         vs,NULL,</div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>                        CPL_FIT_ALL,</div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>                        &wc_s,&sig_s,</div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>                        &area_s,&bkg_s,</div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>                        NULL,NULL,NULL);</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>         <span class="keywordflow">if</span>(error_code == CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>       amp_s=sinfo_gaussian_amp(area_s,sig_s,ws,wc_s,bkg_s);</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));</div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));</div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span> <span class="comment">          sinfo_msg("Gauss fit parameters:");</span></div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span> <span class="comment">          sinfo_msg("wc_s=%f sig_s=%f area_s=%f bkg_s=%f",</span></div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span> <span class="comment">                     wc_s,sig_s,area_s,bkg_s);</span></div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span> <span class="comment">          sinfo_msg("mse=%f chired=%f amp_s=%f",</span></div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span> <span class="comment">                     mse,chired,amp_s);</span></div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span> </div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error_code == CPL_ERROR_CONTINUE) {</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>       cpl_error_reset();</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>       amp_s=sinfo_gaussian_amp(area_s,sig_s,ws,wc_s,bkg_s);</div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));</div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-1));</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>       cpl_error_reset();</div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVES"</span>,jz,wc_s));</div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGS"</span>,jz,sig_s));</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAS"</span>,jz,area_s));</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGS"</span>,jz,bkg_s));</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPS"</span>,jz,amp_s));</div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-2));</div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>     }</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>         check_nomsg(wo=cpl_table_get_double(lambda,<span class="stringliteral">"WAVE"</span>,z1,&status));</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>         check_nomsg(amp_o=cpl_table_get_double(z_pos,<span class="stringliteral">"INT"</span>,jz,&status));</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>         wc_o=wo;</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>         sig_o=z_ext*dispersion;</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span>         bkg_o=0;</div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>         area_o=sinfo_gaussian_area(amp_o,sig_o,wo,wc_o,bkg_o);</div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>         error_code = cpl_vector_fit_gaussian(vw,NULL,</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>                       vo,sy,</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>                      CPL_FIT_ALL,</div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>                      &wc_o,&sig_o,</div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>                      &area_o,&bkg_o,</div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>                      NULL,NULL,NULL);</div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span> </div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>         <span class="keywordflow">if</span>(error_code == CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span> </div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>           amp_o=sinfo_gaussian_amp(area_o,sig_o,wo,wc_o,bkg_o);</div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));</div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));</div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));</div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span> <span class="comment">          sinfo_msg("Gauss fit parameters:");</span></div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span> <span class="comment">          sinfo_msg("wc_o=%f sig_o=%f area_o=%f bkg_o=%f",</span></div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span> <span class="comment">                     wc_o,sig_o,area_o,bkg_o);</span></div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span> <span class="comment">          sinfo_msg("mse=%f chired=%f amp_o=%f",</span></div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span> <span class="comment">                     mse,chired,amp_o);</span></div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (error_code == CPL_ERROR_CONTINUE) {</div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span> </div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>       cpl_error_reset();</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>           amp_o=sinfo_gaussian_amp(area_o,sig_o,wo,wc_o,bkg_o);</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));</div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));</div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));</div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-1));</div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span> </div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>       cpl_error_reset();</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEO"</span>,jz,wc_o));</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"SIGO"</span>,jz,sig_o));</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AREAO"</span>,jz,area_o));</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"BKGO"</span>,jz,bkg_o));</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>           check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"AMPO"</span>,jz,amp_o));</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-2));</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>           <span class="comment">/*</span></div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span> <span class="comment">          if (lambda[z1] < 2.35 &&</span></div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span> <span class="comment">             total(finite([l1,s1,o1])) == n_elements([l1,s1,o1])) {</span></div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span> <span class="comment">            gs1 = float(gaussfit(l1,s1,as1,nterms=3));</span></div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span> <span class="comment">            go1 = float(gaussfit(l1,o1,ao1,nterms=3));</span></div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span> <span class="comment">            g_lam = [g_lam,(as1[1]+ao1[1])/2.];</span></div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span> <span class="comment">            g_diff = [g_diff,as1[1]-ao1[1]];</span></div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span> <span class="comment">            g_err = [g_err,sqrt(as1[2]^2+ao1[2]^2)];</span></div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span> <span class="comment">          }</span></div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> <span class="comment">          */</span></div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>         }</div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"ERR"</span>,</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>                                        jz,sqrt(sig_s*sig_s+sig_o*sig_o)));</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WDIF"</span>,jz,wc_s-wc_o));</div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>         check_nomsg(cpl_table_set_double(z_pos,<span class="stringliteral">"WAVEC"</span>,jz,(wc_o+wc_s)/2));</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span> </div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,jz,-3));</div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>           check_nomsg(cpl_table_set_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,jz,-3));</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>       }</div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>       sinfo_unwrap_vector(&vw);</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>       sinfo_unwrap_vector(&vs);</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>       sinfo_unwrap_vector(&vo);</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>       sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>       sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>       sinfo_free_table(&w_tbl);</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>       sinfo_free_table(&s_tbl);</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>       sinfo_free_table(&o_tbl);</div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>     }</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span>   }</div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span> </div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span> </div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span>   check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"YDIF"</span>,z_pos,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>   check_nomsg(cpl_table_divide_scalar(z_pos,<span class="stringliteral">"YDIF"</span>,dispersion));</div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"WAVEC",CPL_TYPE_DOUBLE);</span></div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"STATUS",CPL_TYPE_INT);</span></div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span></div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span> </div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>   check_nomsg(cpl_table_and_selected_int(z_pos,<span class="stringliteral">"STATUS_S"</span>,CPL_GREATER_THAN,-2));</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>   check_nomsg(cpl_table_and_selected_int(z_pos,<span class="stringliteral">"STATUS_O"</span>,CPL_GREATER_THAN,-2));</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span> </div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span></div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span> </div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>   <span class="comment">//goto cleanup;</span></div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span> </div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>   check_nomsg(z_good=cpl_table_extract_selected(z_pos));</div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>   check_nomsg(npos=cpl_table_get_nrow(z_good));</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>   sinfo_free_table(&z_pos);</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>   <span class="keywordflow">if</span>(npos == 0) {</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>   }</div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>   check_nomsg(z_pos=cpl_table_duplicate(z_good));</div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span>   check_nomsg(z_mean = cpl_table_get_column_median(z_pos,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>   check_nomsg(z_sdv  = cpl_table_get_column_stdev(z_pos,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span> </div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span></div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>   <span class="comment">//                             "out_z_pos.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span> </div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>   check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"CHECK"</span>,</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>                                          z_pos,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span> </div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span> </div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"AMPO"</span>);</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"SIGO"</span>);</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"AREAO"</span>);</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"BKGO"</span>);</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"WAVEO"</span>);</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"AMPS"</span>);</div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"SIGS"</span>);</div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"AREAS"</span>);</div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"BKGS"</span>);</div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"WAVES"</span>);</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"STATUS_S"</span>);</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"STATUS_O"</span>);</div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span> </div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT"</span>);</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT1"</span>);</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"INT2"</span>);</div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"ERR"</span>);</div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"POS"</span>);</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>   cpl_table_erase_column(z_pos,<span class="stringliteral">"DIFF"</span>);</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span> </div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>   <span class="comment">//check_nomsg(cpl_table_save(z_good,NULL,NULL,</span></div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>   <span class="comment">//                             "out_z_good.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span>   <span class="comment">//Do a kappa-sigma clip of the differences of line positions</span></div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>   <span class="comment">//as determined in the object and in the sky spectrum</span></div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span> </div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>   sinfo_msg(<span class="stringliteral">"ks-clip1"</span>);</div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>   sinfo_msg(<span class="stringliteral">"iter mean (um) sdv (um) mean (pix) sdv (pix)"</span>);</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"WAVEC",CPL_TYPE_DOUBLE);</span></div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span></div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span> </div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span>   <span class="keywordflow">for</span> (iq = 0;iq<XCOR_YSHIFT_KS_CLIP;iq++) {</div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>     <span class="comment">//sinfo_msg("nval=%d",cpl_table_get_nrow(z_pos));</span></div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>     sinfo_msg(<span class="stringliteral">"  %d  %3.2g   %3.2g  %5.4g     %5.4g"</span>,</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>                iq,z_mean,z_sdv,z_mean/dispersion,z_sdv/dispersion);</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>     <span class="comment">//z_good = where(abs(g_diff-z_mean) <= 2*z_sdv);</span></div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span> </div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>     check_nomsg(cpl_table_subtract_scalar(z_pos,<span class="stringliteral">"CHECK"</span>,z_mean));</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>     check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"CHECKW"</span>,z_pos,<span class="stringliteral">"CHECK"</span>));</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>     check_nomsg(cpl_table_multiply_columns(z_pos,<span class="stringliteral">"CHECKW"</span>,<span class="stringliteral">"CHECK"</span>));</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span>     check_nomsg(cpl_table_power_column(z_pos,<span class="stringliteral">"CHECKW"</span>,0.5));</div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>     check_nomsg(cpl_table_add_scalar(z_pos,<span class="stringliteral">"CHECK"</span>,z_mean));</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>     check_nomsg(cpl_table_and_selected_double(z_pos,<span class="stringliteral">"CHECKW"</span>,</div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>                                               CPL_NOT_GREATER_THAN,2*z_sdv));</div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>     sinfo_free_table(&z_good);</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>     check_nomsg(z_good=cpl_table_extract_selected(z_pos));</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>     <span class="comment">//sinfo_msg("ngood=%d",cpl_table_get_nrow(z_good));</span></div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>     check_nomsg(cpl_table_select_all(z_pos));</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span>     <span class="comment">//z_mean = median(g_diff[z_good]);</span></div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>     <span class="comment">//z_sdv = stddev(g_diff[z_good]);</span></div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>     check_nomsg(z_mean = cpl_table_get_column_median(z_good,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>     <span class="keywordflow">if</span>(nfit>1) {</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>     check_nomsg(z_sdv  = cpl_table_get_column_stdev(z_good,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>       z_sdv=0;</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>     }</div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>     sinfo_free_table(&z_good);</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>     check_nomsg(cpl_table_erase_column(z_pos,<span class="stringliteral">"CHECKW"</span>));</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span> </div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span>   }</div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>   <span class="comment">/* do a poly fit of wdif versus wave*/</span></div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span> <span class="comment">  for (iq = 0; iq<3; iq++) {</span></div>
+<div class="line"><a name="l03888"></a><span class="lineno"> 3888</span> <span class="comment">    // sinfo_msg("%d %f %f",iq,mean(zfit),zsdv);</span></div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span> <span class="comment">    par1 = poly_fit(g_lam[z_good],g_diff[z_good],poly_n);</span></div>
+<div class="line"><a name="l03890"></a><span class="lineno"> 3890</span> <span class="comment">    z_fit = g_diff*0.;</span></div>
+<div class="line"><a name="l03891"></a><span class="lineno"> 3891</span> <span class="comment">    for (ii=0;ii<poly_n) z_fit = z_fit + par1[ii]*g_lam^ii;</span></div>
+<div class="line"><a name="l03892"></a><span class="lineno"> 3892</span> <span class="comment">    z_res = g_diff-z_fit;</span></div>
+<div class="line"><a name="l03893"></a><span class="lineno"> 3893</span> <span class="comment">    z_sdv = stddev(z_res[zgood]);</span></div>
+<div class="line"><a name="l03894"></a><span class="lineno"> 3894</span> <span class="comment">    z_good = where(abs(z_res) le 3*z_sdv);</span></div>
+<div class="line"><a name="l03895"></a><span class="lineno"> 3895</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l03896"></a><span class="lineno"> 3896</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l03897"></a><span class="lineno"> 3897</span>   cpl_table_select_all(z_pos);</div>
+<div class="line"><a name="l03898"></a><span class="lineno"> 3898</span>   check_nomsg(cpl_table_new_column(z_pos,<span class="stringliteral">"ZFIT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l03899"></a><span class="lineno"> 3899</span>   check_nomsg(nfit=cpl_table_get_nrow(z_pos));</div>
+<div class="line"><a name="l03900"></a><span class="lineno"> 3900</span>   check_nomsg(cpl_table_fill_column_window(z_pos,<span class="stringliteral">"ZFIT"</span>,0,nfit,0));</div>
+<div class="line"><a name="l03901"></a><span class="lineno"> 3901</span>   <span class="comment">//check_nomsg(cpl_table_save(z_pos,NULL,NULL,</span></div>
+<div class="line"><a name="l03902"></a><span class="lineno"> 3902</span>   <span class="comment">//                             "out_z_pos2.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03903"></a><span class="lineno"> 3903</span>   check_nomsg(z_good=cpl_table_duplicate(z_pos));</div>
+<div class="line"><a name="l03904"></a><span class="lineno"> 3904</span> </div>
+<div class="line"><a name="l03905"></a><span class="lineno"> 3905</span>   <span class="comment">//Do a fit of a uniform function to the residuals line position differences</span></div>
+<div class="line"><a name="l03906"></a><span class="lineno"> 3906</span>   sinfo_msg(<span class="stringliteral">"ks-clip2"</span>);</div>
+<div class="line"><a name="l03907"></a><span class="lineno"> 3907</span>   sinfo_msg(<span class="stringliteral">"iter mean (um) sdv (um) mean (pix) sdv (pix)"</span>);</div>
+<div class="line"><a name="l03908"></a><span class="lineno"> 3908</span>   check_nomsg(cpl_table_select_all(z_good));</div>
+<div class="line"><a name="l03909"></a><span class="lineno"> 3909</span>   <span class="comment">//sinfo_table_column_dump(z_pos,"WDIF",CPL_TYPE_DOUBLE);</span></div>
+<div class="line"><a name="l03910"></a><span class="lineno"> 3910</span>   <span class="keywordflow">for</span>(iq=0;iq<XCOR_YSHIFT_KS_CLIP;iq++) {</div>
+<div class="line"><a name="l03911"></a><span class="lineno"> 3911</span>     <span class="comment">//cpl_table_dump(z_pos,0,cpl_table_get_nrow(z_pos),stdout);</span></div>
+<div class="line"><a name="l03912"></a><span class="lineno"> 3912</span>     check_nomsg(nfit=cpl_table_get_nrow(z_good));</div>
+<div class="line"><a name="l03913"></a><span class="lineno"> 3913</span>     <span class="comment">//sinfo_msg("nfit=%d",nfit);</span></div>
+<div class="line"><a name="l03914"></a><span class="lineno"> 3914</span>     <span class="keywordflow">if</span>(nfit>0) {</div>
+<div class="line"><a name="l03915"></a><span class="lineno"> 3915</span>     check_nomsg(vx=cpl_vector_wrap(nfit,</div>
+<div class="line"><a name="l03916"></a><span class="lineno"> 3916</span>                    cpl_table_get_data_double(z_good,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l03917"></a><span class="lineno"> 3917</span>     check_nomsg(vy=cpl_vector_wrap(nfit,</div>
+<div class="line"><a name="l03918"></a><span class="lineno"> 3918</span>                    cpl_table_get_data_double(z_good,<span class="stringliteral">"WDIF"</span>)));</div>
+<div class="line"><a name="l03919"></a><span class="lineno"> 3919</span>     check_nomsg(cfit=sinfo_polynomial_fit_1d_create(vx,vy,0,&mse));</div>
+<div class="line"><a name="l03920"></a><span class="lineno"> 3920</span>     pows[0]=0;</div>
+<div class="line"><a name="l03921"></a><span class="lineno"> 3921</span>     pows[1]=0;</div>
+<div class="line"><a name="l03922"></a><span class="lineno"> 3922</span>     check_nomsg(zfit=cpl_polynomial_get_coeff(cfit,pows));</div>
+<div class="line"><a name="l03923"></a><span class="lineno"> 3923</span>     sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l03924"></a><span class="lineno"> 3924</span>     <span class="comment">//sinfo_msg("coeff 0=%g um %g pix",zfit,zfit/dispersion);</span></div>
+<div class="line"><a name="l03925"></a><span class="lineno"> 3925</span> </div>
+<div class="line"><a name="l03926"></a><span class="lineno"> 3926</span>     <span class="comment">//computes residuals=difference-fit and their standard deviation</span></div>
+<div class="line"><a name="l03927"></a><span class="lineno"> 3927</span>     <span class="comment">//and then do a kappa-sigma clip of outliers (out of 3 sigma)</span></div>
+<div class="line"><a name="l03928"></a><span class="lineno"> 3928</span>     check_nomsg(cpl_table_fill_column_window(z_good,<span class="stringliteral">"ZFIT"</span>,0,nfit,zfit));</div>
+<div class="line"><a name="l03929"></a><span class="lineno"> 3929</span>     check_nomsg(cpl_table_duplicate_column(z_good,<span class="stringliteral">"WRES"</span>,z_good,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03930"></a><span class="lineno"> 3930</span>     check_nomsg(cpl_table_subtract_columns(z_good,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"ZFIT"</span>));</div>
+<div class="line"><a name="l03931"></a><span class="lineno"> 3931</span>     <span class="keywordflow">if</span>(nfit>1) {</div>
+<div class="line"><a name="l03932"></a><span class="lineno"> 3932</span>       <span class="comment">//sinfo_msg("nfit=%d",nfit);</span></div>
+<div class="line"><a name="l03933"></a><span class="lineno"> 3933</span>       <span class="comment">//cpl_table_dump(z_good,0,nfit,stdout);</span></div>
+<div class="line"><a name="l03934"></a><span class="lineno"> 3934</span>       check_nomsg(z_sdv=cpl_table_get_column_stdev(z_good,<span class="stringliteral">"WRES"</span>));</div>
+<div class="line"><a name="l03935"></a><span class="lineno"> 3935</span>       <span class="comment">//sinfo_msg("z_sdv=%f",z_sdv);</span></div>
+<div class="line"><a name="l03936"></a><span class="lineno"> 3936</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l03937"></a><span class="lineno"> 3937</span>       z_sdv=0;</div>
+<div class="line"><a name="l03938"></a><span class="lineno"> 3938</span>     }</div>
+<div class="line"><a name="l03939"></a><span class="lineno"> 3939</span>     check_nomsg(z_mean=cpl_table_get_column_mean(z_good,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03940"></a><span class="lineno"> 3940</span> </div>
+<div class="line"><a name="l03941"></a><span class="lineno"> 3941</span>     sinfo_msg(<span class="stringliteral">"  %d  %3.2g   %3.2g  %5.4g     %5.4g"</span>,</div>
+<div class="line"><a name="l03942"></a><span class="lineno"> 3942</span>               iq,z_mean,z_sdv,z_mean/dispersion,z_sdv/dispersion);</div>
+<div class="line"><a name="l03943"></a><span class="lineno"> 3943</span> </div>
+<div class="line"><a name="l03944"></a><span class="lineno"> 3944</span>     check_nomsg(nfit=cpl_table_get_nrow(z_pos));</div>
+<div class="line"><a name="l03945"></a><span class="lineno"> 3945</span>     check_nomsg(cpl_table_fill_column_window(z_pos,<span class="stringliteral">"ZFIT"</span>,0,nfit,zfit));</div>
+<div class="line"><a name="l03946"></a><span class="lineno"> 3946</span>     check_nomsg(cpl_table_duplicate_column(z_pos,<span class="stringliteral">"WRES"</span>,z_pos,<span class="stringliteral">"WDIF"</span>));</div>
+<div class="line"><a name="l03947"></a><span class="lineno"> 3947</span>     check_nomsg(cpl_table_subtract_columns(z_pos,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"ZFIT"</span>));</div>
+<div class="line"><a name="l03948"></a><span class="lineno"> 3948</span> </div>
+<div class="line"><a name="l03949"></a><span class="lineno"> 3949</span>     check_nomsg(cpl_table_multiply_columns(z_pos,<span class="stringliteral">"WRES"</span>,<span class="stringliteral">"WRES"</span>));</div>
+<div class="line"><a name="l03950"></a><span class="lineno"> 3950</span>     check_nomsg(cpl_table_power_column(z_pos,<span class="stringliteral">"WRES"</span>,0.5));</div>
+<div class="line"><a name="l03951"></a><span class="lineno"> 3951</span>     <span class="comment">//cpl_table_dump(z_pos,0,cpl_table_get_nrow(z_pos),stdout);</span></div>
+<div class="line"><a name="l03952"></a><span class="lineno"> 3952</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l03953"></a><span class="lineno"> 3953</span> <span class="comment">    sinfo_msg("min=%g max=%g ndat=%d",</span></div>
+<div class="line"><a name="l03954"></a><span class="lineno"> 3954</span> <span class="comment">              cpl_table_get_column_min(z_pos,"WRES"),</span></div>
+<div class="line"><a name="l03955"></a><span class="lineno"> 3955</span> <span class="comment">              cpl_table_get_column_max(z_pos,"WRES"),</span></div>
+<div class="line"><a name="l03956"></a><span class="lineno"> 3956</span> <span class="comment">              cpl_table_get_nrow(z_pos));</span></div>
+<div class="line"><a name="l03957"></a><span class="lineno"> 3957</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l03958"></a><span class="lineno"> 3958</span>     check_nomsg(cpl_table_and_selected_double(z_pos,<span class="stringliteral">"WRES"</span>,</div>
+<div class="line"><a name="l03959"></a><span class="lineno"> 3959</span>                                               CPL_NOT_GREATER_THAN,3*z_sdv));</div>
+<div class="line"><a name="l03960"></a><span class="lineno"> 3960</span> </div>
+<div class="line"><a name="l03961"></a><span class="lineno"> 3961</span>     check_nomsg(sinfo_free_table(&z_good));</div>
+<div class="line"><a name="l03962"></a><span class="lineno"> 3962</span>     check_nomsg(z_good=cpl_table_extract_selected(z_pos));</div>
+<div class="line"><a name="l03963"></a><span class="lineno"> 3963</span> </div>
+<div class="line"><a name="l03964"></a><span class="lineno"> 3964</span> </div>
+<div class="line"><a name="l03965"></a><span class="lineno"> 3965</span>     check_nomsg(cpl_table_select_all(z_pos));</div>
+<div class="line"><a name="l03966"></a><span class="lineno"> 3966</span>     check_nomsg(cpl_table_select_all(z_good));</div>
+<div class="line"><a name="l03967"></a><span class="lineno"> 3967</span>     check_nomsg(cpl_table_erase_column(z_good,<span class="stringliteral">"WRES"</span>));</div>
+<div class="line"><a name="l03968"></a><span class="lineno"> 3968</span>     check_nomsg(cpl_table_erase_column(z_pos,<span class="stringliteral">"WRES"</span>));</div>
+<div class="line"><a name="l03969"></a><span class="lineno"> 3969</span> </div>
+<div class="line"><a name="l03970"></a><span class="lineno"> 3970</span>     sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l03971"></a><span class="lineno"> 3971</span>     sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l03972"></a><span class="lineno"> 3972</span> </div>
+<div class="line"><a name="l03973"></a><span class="lineno"> 3973</span>     }</div>
+<div class="line"><a name="l03974"></a><span class="lineno"> 3974</span> </div>
+<div class="line"><a name="l03975"></a><span class="lineno"> 3975</span>   }</div>
+<div class="line"><a name="l03976"></a><span class="lineno"> 3976</span>   <span class="comment">//sinfo_msg(">>mean=%g",cpl_table_get_column_mean(z_good,"WDIF"));</span></div>
+<div class="line"><a name="l03977"></a><span class="lineno"> 3977</span> </div>
+<div class="line"><a name="l03978"></a><span class="lineno"> 3978</span>   <span class="comment">//check_nomsg(cpl_table_save(z_good,NULL,NULL,</span></div>
+<div class="line"><a name="l03979"></a><span class="lineno"> 3979</span>   <span class="comment">//                             "out_z_pos3.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l03980"></a><span class="lineno"> 3980</span>   sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l03981"></a><span class="lineno"> 3981</span>   sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l03982"></a><span class="lineno"> 3982</span>   sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l03983"></a><span class="lineno"> 3983</span>   sinfo_free_table(&z);</div>
+<div class="line"><a name="l03984"></a><span class="lineno"> 3984</span>   sinfo_free_table(&z_pos);</div>
+<div class="line"><a name="l03985"></a><span class="lineno"> 3985</span>   sinfo_free_table(&z_good);</div>
+<div class="line"><a name="l03986"></a><span class="lineno"> 3986</span> </div>
+<div class="line"><a name="l03987"></a><span class="lineno"> 3987</span> </div>
+<div class="line"><a name="l03988"></a><span class="lineno"> 3988</span>   <span class="keywordflow">return</span> zfit;</div>
+<div class="line"><a name="l03989"></a><span class="lineno"> 3989</span>  cleanup:</div>
+<div class="line"><a name="l03990"></a><span class="lineno"> 3990</span> </div>
+<div class="line"><a name="l03991"></a><span class="lineno"> 3991</span>   sinfo_free_table(&z_good);</div>
+<div class="line"><a name="l03992"></a><span class="lineno"> 3992</span>   sinfo_free_table(&z);</div>
+<div class="line"><a name="l03993"></a><span class="lineno"> 3993</span>   sinfo_free_table(&z_diff);</div>
+<div class="line"><a name="l03994"></a><span class="lineno"> 3994</span>   sinfo_free_table(&tmp_sky);</div>
+<div class="line"><a name="l03995"></a><span class="lineno"> 3995</span>   sinfo_free_table(&z_pos);</div>
+<div class="line"><a name="l03996"></a><span class="lineno"> 3996</span>   sinfo_unwrap_vector(&vw);</div>
+<div class="line"><a name="l03997"></a><span class="lineno"> 3997</span>   sinfo_unwrap_vector(&vs);</div>
+<div class="line"><a name="l03998"></a><span class="lineno"> 3998</span>   sinfo_unwrap_vector(&vo);</div>
+<div class="line"><a name="l03999"></a><span class="lineno"> 3999</span>   sinfo_free_my_vector(&sx);</div>
+<div class="line"><a name="l04000"></a><span class="lineno"> 4000</span>   sinfo_free_my_vector(&sy);</div>
+<div class="line"><a name="l04001"></a><span class="lineno"> 4001</span>   sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l04002"></a><span class="lineno"> 4002</span>   sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l04003"></a><span class="lineno"> 4003</span>   sinfo_free_table(&w_tbl);</div>
+<div class="line"><a name="l04004"></a><span class="lineno"> 4004</span>   sinfo_free_table(&s_tbl);</div>
+<div class="line"><a name="l04005"></a><span class="lineno"> 4005</span>   sinfo_free_table(&o_tbl);</div>
+<div class="line"><a name="l04006"></a><span class="lineno"> 4006</span>   sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l04007"></a><span class="lineno"> 4007</span> </div>
+<div class="line"><a name="l04008"></a><span class="lineno"> 4008</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04009"></a><span class="lineno"> 4009</span> </div>
+<div class="line"><a name="l04010"></a><span class="lineno"> 4010</span> </div>
+<div class="line"><a name="l04011"></a><span class="lineno"> 4011</span> }</div>
+<div class="line"><a name="l04012"></a><span class="lineno"> 4012</span> </div>
+<div class="line"><a name="l04013"></a><span class="lineno"> 4013</span> </div>
+<div class="line"><a name="l04014"></a><span class="lineno"> 4014</span> </div>
+<div class="line"><a name="l04015"></a><span class="lineno"> 4015</span> </div>
+<div class="line"><a name="l04028"></a><span class="lineno"> 4028</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l04029"></a><span class="lineno"> 4029</span> sinfo_table_set_nan_out_min_max(cpl_table** t,</div>
+<div class="line"><a name="l04030"></a><span class="lineno"> 4030</span>                                 <span class="keyword">const</span> <span class="keywordtype">char</span>* c,</div>
+<div class="line"><a name="l04031"></a><span class="lineno"> 4031</span>                                 <span class="keyword">const</span> <span class="keywordtype">double</span> min,</div>
+<div class="line"><a name="l04032"></a><span class="lineno"> 4032</span>                                 <span class="keyword">const</span> <span class="keywordtype">double</span> max)</div>
+<div class="line"><a name="l04033"></a><span class="lineno"> 4033</span> </div>
+<div class="line"><a name="l04034"></a><span class="lineno"> 4034</span> {</div>
+<div class="line"><a name="l04035"></a><span class="lineno"> 4035</span> </div>
+<div class="line"><a name="l04036"></a><span class="lineno"> 4036</span>   <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l04037"></a><span class="lineno"> 4037</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04038"></a><span class="lineno"> 4038</span>   <span class="keywordtype">double</span>* pt=NULL;</div>
+<div class="line"><a name="l04039"></a><span class="lineno"> 4039</span> </div>
+<div class="line"><a name="l04040"></a><span class="lineno"> 4040</span>   check_nomsg(sz=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l04041"></a><span class="lineno"> 4041</span>   check_nomsg(pt=cpl_table_get_data_double(*t,c));</div>
+<div class="line"><a name="l04042"></a><span class="lineno"> 4042</span>   <span class="keywordflow">for</span>(i=0;i<sz;i++) {</div>
+<div class="line"><a name="l04043"></a><span class="lineno"> 4043</span>     <span class="keywordflow">if</span>(pt[i] < min || pt[i] > max) {</div>
+<div class="line"><a name="l04044"></a><span class="lineno"> 4044</span>       check_nomsg(cpl_table_set_invalid(*t ,c,i));</div>
+<div class="line"><a name="l04045"></a><span class="lineno"> 4045</span>     }</div>
+<div class="line"><a name="l04046"></a><span class="lineno"> 4046</span>   }</div>
+<div class="line"><a name="l04047"></a><span class="lineno"> 4047</span> </div>
+<div class="line"><a name="l04048"></a><span class="lineno"> 4048</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04049"></a><span class="lineno"> 4049</span> </div>
+<div class="line"><a name="l04050"></a><span class="lineno"> 4050</span>  cleanup:</div>
+<div class="line"><a name="l04051"></a><span class="lineno"> 4051</span> </div>
+<div class="line"><a name="l04052"></a><span class="lineno"> 4052</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04053"></a><span class="lineno"> 4053</span> </div>
+<div class="line"><a name="l04054"></a><span class="lineno"> 4054</span> </div>
+<div class="line"><a name="l04055"></a><span class="lineno"> 4055</span> }</div>
+<div class="line"><a name="l04056"></a><span class="lineno"> 4056</span> </div>
+<div class="line"><a name="l04066"></a><span class="lineno"> 4066</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l04067"></a><span class="lineno"> 4067</span> sinfo_table_flag_nan(cpl_table** t,<span class="keyword">const</span> <span class="keywordtype">char</span>* label)</div>
+<div class="line"><a name="l04068"></a><span class="lineno"> 4068</span> {</div>
+<div class="line"><a name="l04069"></a><span class="lineno"> 4069</span> </div>
+<div class="line"><a name="l04070"></a><span class="lineno"> 4070</span>   <span class="keywordtype">int</span> sz=0;</div>
+<div class="line"><a name="l04071"></a><span class="lineno"> 4071</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04072"></a><span class="lineno"> 4072</span>   <span class="keywordtype">double</span>* pt=NULL;</div>
+<div class="line"><a name="l04073"></a><span class="lineno"> 4073</span> </div>
+<div class="line"><a name="l04074"></a><span class="lineno"> 4074</span>   check_nomsg(sz=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l04075"></a><span class="lineno"> 4075</span>   check_nomsg(pt=cpl_table_get_data_double(*t,label));</div>
+<div class="line"><a name="l04076"></a><span class="lineno"> 4076</span>   <span class="keywordflow">for</span>(i=0;i<sz;i++) {</div>
+<div class="line"><a name="l04077"></a><span class="lineno"> 4077</span>     <span class="keywordflow">if</span>(irplib_isnan(pt[i])) {</div>
+<div class="line"><a name="l04078"></a><span class="lineno"> 4078</span>       check_nomsg(cpl_table_set_invalid(*t ,label,i));</div>
+<div class="line"><a name="l04079"></a><span class="lineno"> 4079</span>     }</div>
+<div class="line"><a name="l04080"></a><span class="lineno"> 4080</span>   }</div>
+<div class="line"><a name="l04081"></a><span class="lineno"> 4081</span> </div>
+<div class="line"><a name="l04082"></a><span class="lineno"> 4082</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l04083"></a><span class="lineno"> 4083</span> </div>
+<div class="line"><a name="l04084"></a><span class="lineno"> 4084</span>  cleanup:</div>
+<div class="line"><a name="l04085"></a><span class="lineno"> 4085</span> </div>
+<div class="line"><a name="l04086"></a><span class="lineno"> 4086</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04087"></a><span class="lineno"> 4087</span> }</div>
+<div class="line"><a name="l04088"></a><span class="lineno"> 4088</span> </div>
+<div class="line"><a name="l04098"></a><span class="lineno"> 4098</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l04099"></a><span class="lineno"> 4099</span> sinfo_table_sky_obj_flag_nan(cpl_table** s,cpl_table** o, cpl_table** w)</div>
+<div class="line"><a name="l04100"></a><span class="lineno"> 4100</span> {</div>
+<div class="line"><a name="l04101"></a><span class="lineno"> 4101</span> </div>
+<div class="line"><a name="l04102"></a><span class="lineno"> 4102</span>   <span class="keywordtype">int</span> no=0;</div>
+<div class="line"><a name="l04103"></a><span class="lineno"> 4103</span>   <span class="keywordtype">int</span> ns=0;</div>
+<div class="line"><a name="l04104"></a><span class="lineno"> 4104</span>   <span class="keywordtype">int</span> nw=0;</div>
+<div class="line"><a name="l04105"></a><span class="lineno"> 4105</span>   <span class="keywordtype">int</span> ni=0;</div>
+<div class="line"><a name="l04106"></a><span class="lineno"> 4106</span> </div>
+<div class="line"><a name="l04107"></a><span class="lineno"> 4107</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04108"></a><span class="lineno"> 4108</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l04109"></a><span class="lineno"> 4109</span>   <span class="keywordtype">double</span>* ps=NULL;</div>
+<div class="line"><a name="l04110"></a><span class="lineno"> 4110</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l04111"></a><span class="lineno"> 4111</span> </div>
+<div class="line"><a name="l04112"></a><span class="lineno"> 4112</span>   check_nomsg(no=cpl_table_get_nrow(*o));</div>
+<div class="line"><a name="l04113"></a><span class="lineno"> 4113</span>   check_nomsg(ns=cpl_table_get_nrow(*s));</div>
+<div class="line"><a name="l04114"></a><span class="lineno"> 4114</span>   check_nomsg(nw=cpl_table_get_nrow(*w));</div>
+<div class="line"><a name="l04115"></a><span class="lineno"> 4115</span>   <span class="keywordflow">if</span>(no != ns || ns != nw || no != nw) {</div>
+<div class="line"><a name="l04116"></a><span class="lineno"> 4116</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"different input tables sizes"</span>);</div>
+<div class="line"><a name="l04117"></a><span class="lineno"> 4117</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l04118"></a><span class="lineno"> 4118</span>   }</div>
+<div class="line"><a name="l04119"></a><span class="lineno"> 4119</span>   check_nomsg(po=cpl_table_get_data_double(*o,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04120"></a><span class="lineno"> 4120</span>   check_nomsg(ps=cpl_table_get_data_double(*s,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04121"></a><span class="lineno"> 4121</span>   check_nomsg(pw=cpl_table_get_data_double(*w,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l04122"></a><span class="lineno"> 4122</span> </div>
+<div class="line"><a name="l04123"></a><span class="lineno"> 4123</span>   <span class="keywordflow">for</span>(i=0;i<no;i++) {</div>
+<div class="line"><a name="l04124"></a><span class="lineno"> 4124</span>     <span class="keywordflow">if</span>( (0==cpl_table_is_valid(*o,<span class="stringliteral">"INT"</span>,i)) ||</div>
+<div class="line"><a name="l04125"></a><span class="lineno"> 4125</span>         irplib_isnan(po[i]) || irplib_isnan(ps[i]) || irplib_isnan(pw[i]) ) {</div>
+<div class="line"><a name="l04126"></a><span class="lineno"> 4126</span>       check_nomsg(cpl_table_set_invalid(*o ,<span class="stringliteral">"INT"</span>,i));</div>
+<div class="line"><a name="l04127"></a><span class="lineno"> 4127</span>       check_nomsg(cpl_table_set_invalid(*s ,<span class="stringliteral">"INT"</span>,i));</div>
+<div class="line"><a name="l04128"></a><span class="lineno"> 4128</span>       check_nomsg(cpl_table_set_invalid(*w ,<span class="stringliteral">"WAVE"</span>,i));</div>
+<div class="line"><a name="l04129"></a><span class="lineno"> 4129</span>       <span class="comment">//sinfo_msg_debug("Flagged raw %d",i);</span></div>
+<div class="line"><a name="l04130"></a><span class="lineno"> 4130</span>       ni++;</div>
+<div class="line"><a name="l04131"></a><span class="lineno"> 4131</span>     }</div>
+<div class="line"><a name="l04132"></a><span class="lineno"> 4132</span>   }</div>
+<div class="line"><a name="l04133"></a><span class="lineno"> 4133</span> </div>
+<div class="line"><a name="l04134"></a><span class="lineno"> 4134</span>   <span class="keywordflow">return</span> no-ni;</div>
+<div class="line"><a name="l04135"></a><span class="lineno"> 4135</span> </div>
+<div class="line"><a name="l04136"></a><span class="lineno"> 4136</span>  cleanup:</div>
+<div class="line"><a name="l04137"></a><span class="lineno"> 4137</span> </div>
+<div class="line"><a name="l04138"></a><span class="lineno"> 4138</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l04139"></a><span class="lineno"> 4139</span> }</div>
+<div class="line"><a name="l04140"></a><span class="lineno"> 4140</span> </div>
+<div class="line"><a name="l04141"></a><span class="lineno"> 4141</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l04142"></a><span class="lineno"> 4142</span> <span class="comment">static void</span></div>
+<div class="line"><a name="l04143"></a><span class="lineno"> 4143</span> <span class="comment">sinfo_shift_sky(const int x,const int y)</span></div>
+<div class="line"><a name="l04144"></a><span class="lineno"> 4144</span> <span class="comment">{</span></div>
+<div class="line"><a name="l04145"></a><span class="lineno"> 4145</span> <span class="comment"></span></div>
+<div class="line"><a name="l04146"></a><span class="lineno"> 4146</span> <span class="comment">  //To remove compilation warnings</span></div>
+<div class="line"><a name="l04147"></a><span class="lineno"> 4147</span> <span class="comment">  ck0_nomsg(x);</span></div>
+<div class="line"><a name="l04148"></a><span class="lineno"> 4148</span> <span class="comment">  ck0_nomsg(y);</span></div>
+<div class="line"><a name="l04149"></a><span class="lineno"> 4149</span> <span class="comment"></span></div>
+<div class="line"><a name="l04150"></a><span class="lineno"> 4150</span> <span class="comment">  // shift sky spectrum of a given amount</span></div>
+<div class="line"><a name="l04151"></a><span class="lineno"> 4151</span> <span class="comment">  if (max(abs(z_fit))/cdelts < 0.01) {</span></div>
+<div class="line"><a name="l04152"></a><span class="lineno"> 4152</span> <span class="comment">    sinfo_msg("shift <0.01 pixels will not be applied");</span></div>
+<div class="line"><a name="l04153"></a><span class="lineno"> 4153</span> <span class="comment">  } else {</span></div>
+<div class="line"><a name="l04154"></a><span class="lineno"> 4154</span> <span class="comment">    sinfo_msg("shifting sky cube by mean of %f pix wrt object",</span></div>
+<div class="line"><a name="l04155"></a><span class="lineno"> 4155</span> <span class="comment">             cpl_table_column_mean(z_fit,"VALUE")/cdelto);</span></div>
+<div class="line"><a name="l04156"></a><span class="lineno"> 4156</span> <span class="comment">    sinfo_msg("this will take a couple of minutes...");</span></div>
+<div class="line"><a name="l04157"></a><span class="lineno"> 4157</span> <span class="comment">    z_good = where(finite(int_sky));</span></div>
+<div class="line"><a name="l04158"></a><span class="lineno"> 4158</span> <span class="comment">    new_sky = spline(lambda[z_good]-z_mean,int_sky[z_good],lambda);</span></div>
+<div class="line"><a name="l04159"></a><span class="lineno"> 4159</span> <span class="comment">    int_sky = new_sky;</span></div>
+<div class="line"><a name="l04160"></a><span class="lineno"> 4160</span> <span class="comment">    sky_out = dblarr(xsize,ysize,zsize) + !values.f_nan;</span></div>
+<div class="line"><a name="l04161"></a><span class="lineno"> 4161</span> <span class="comment">    for (ix=0; ix<xsize;ix++) {</span></div>
+<div class="line"><a name="l04162"></a><span class="lineno"> 4162</span> <span class="comment">      for (iy=0;iy<ysize;iy++) {</span></div>
+<div class="line"><a name="l04163"></a><span class="lineno"> 4163</span> <span class="comment">    old_sky = reform(sky[ix,iy,*]);</span></div>
+<div class="line"><a name="l04164"></a><span class="lineno"> 4164</span> <span class="comment">    z_good = where(finite(old_sky),z_good_i);</span></div>
+<div class="line"><a name="l04165"></a><span class="lineno"> 4165</span> <span class="comment">    if (z_good_i > 0) {</span></div>
+<div class="line"><a name="l04166"></a><span class="lineno"> 4166</span> <span class="comment">          new_sky= spline(lambda[z_good]-z_fit[z_good],old_sky[z_good],lambda);</span></div>
+<div class="line"><a name="l04167"></a><span class="lineno"> 4167</span> <span class="comment">          new_fin= where(finite(new_sky,/infinity) ||</span></div>
+<div class="line"><a name="l04168"></a><span class="lineno"> 4168</span> <span class="comment">                          finite(old_sky,/nan),newfin_i);</span></div>
+<div class="line"><a name="l04169"></a><span class="lineno"> 4169</span> <span class="comment">      if (new_fin_i > 0) new_sky[new_fin] = !values.f_nan;</span></div>
+<div class="line"><a name="l04170"></a><span class="lineno"> 4170</span> <span class="comment">      sky_out[ix,iy,*] = new_sky;</span></div>
+<div class="line"><a name="l04171"></a><span class="lineno"> 4171</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l04172"></a><span class="lineno"> 4172</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l04173"></a><span class="lineno"> 4173</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l04174"></a><span class="lineno"> 4174</span> <span class="comment">    sky = sky_out;</span></div>
+<div class="line"><a name="l04175"></a><span class="lineno"> 4175</span> <span class="comment">  }</span></div>
+<div class="line"><a name="l04176"></a><span class="lineno"> 4176</span> <span class="comment"> cleanup:</span></div>
+<div class="line"><a name="l04177"></a><span class="lineno"> 4177</span> <span class="comment">  return;</span></div>
+<div class="line"><a name="l04178"></a><span class="lineno"> 4178</span> <span class="comment"></span></div>
+<div class="line"><a name="l04179"></a><span class="lineno"> 4179</span> <span class="comment">}</span></div>
+<div class="line"><a name="l04180"></a><span class="lineno"> 4180</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l04207"></a><span class="lineno"> 4207</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l04208"></a><span class="lineno"> 4208</span> sinfo_optimise_sky_sub(<span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l04209"></a><span class="lineno"> 4209</span>                        <span class="keyword">const</span> <span class="keywordtype">double</span> line_hw,</div>
+<div class="line"><a name="l04210"></a><span class="lineno"> 4210</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> method,</div>
+<div class="line"><a name="l04211"></a><span class="lineno"> 4211</span>                        <span class="keyword">const</span> <span class="keywordtype">int</span> do_rot,</div>
+<div class="line"><a name="l04212"></a><span class="lineno"> 4212</span>                        cpl_table* lrange,</div>
+<div class="line"><a name="l04213"></a><span class="lineno"> 4213</span>                        cpl_table* lambda,</div>
+<div class="line"><a name="l04214"></a><span class="lineno"> 4214</span>                        cpl_table* lr41,</div>
+<div class="line"><a name="l04215"></a><span class="lineno"> 4215</span>                        cpl_table* lr52,</div>
+<div class="line"><a name="l04216"></a><span class="lineno"> 4216</span>                        cpl_table* lr63,</div>
+<div class="line"><a name="l04217"></a><span class="lineno"> 4217</span>                        cpl_table* lr74,</div>
+<div class="line"><a name="l04218"></a><span class="lineno"> 4218</span>                        cpl_table* lr02,</div>
+<div class="line"><a name="l04219"></a><span class="lineno"> 4219</span>                        cpl_table* lr85,</div>
+<div class="line"><a name="l04220"></a><span class="lineno"> 4220</span>                        cpl_table* lr20,</div>
+<div class="line"><a name="l04221"></a><span class="lineno"> 4221</span>                        cpl_table* lr31,</div>
+<div class="line"><a name="l04222"></a><span class="lineno"> 4222</span>                        cpl_table* lr42,</div>
+<div class="line"><a name="l04223"></a><span class="lineno"> 4223</span>                        cpl_table* lr53,</div>
+<div class="line"><a name="l04224"></a><span class="lineno"> 4224</span>                        cpl_table* lr64,</div>
+<div class="line"><a name="l04225"></a><span class="lineno"> 4225</span>                        cpl_table* lr75,</div>
+<div class="line"><a name="l04226"></a><span class="lineno"> 4226</span>                        cpl_table* lr86,</div>
+<div class="line"><a name="l04227"></a><span class="lineno"> 4227</span>                        cpl_table* lr97,</div>
+<div class="line"><a name="l04228"></a><span class="lineno"> 4228</span>                        cpl_table* lr00,</div>
+<div class="line"><a name="l04229"></a><span class="lineno"> 4229</span>                        cpl_table** int_obj,</div>
+<div class="line"><a name="l04230"></a><span class="lineno"> 4230</span>                        cpl_table** int_sky,</div>
+<div class="line"><a name="l04231"></a><span class="lineno"> 4231</span>                        cpl_table** rscale)</div>
+<div class="line"><a name="l04232"></a><span class="lineno"> 4232</span> </div>
+<div class="line"><a name="l04233"></a><span class="lineno"> 4233</span> {</div>
+<div class="line"><a name="l04234"></a><span class="lineno"> 4234</span> </div>
+<div class="line"><a name="l04235"></a><span class="lineno"> 4235</span>   <span class="keywordtype">int</span> npixw=2*line_hw; <span class="comment">//full width in pixels of unresolved emission line</span></div>
+<div class="line"><a name="l04236"></a><span class="lineno"> 4236</span>   cpl_array* do_hk=NULL;</div>
+<div class="line"><a name="l04237"></a><span class="lineno"> 4237</span>   cpl_array* rfit=NULL;</div>
+<div class="line"><a name="l04238"></a><span class="lineno"> 4238</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l04239"></a><span class="lineno"> 4239</span>   cpl_table* sky_lr=NULL;</div>
+<div class="line"><a name="l04240"></a><span class="lineno"> 4240</span>   cpl_table* obj_lr=NULL;</div>
+<div class="line"><a name="l04241"></a><span class="lineno"> 4241</span>   cpl_table* wav_lr=NULL;</div>
+<div class="line"><a name="l04242"></a><span class="lineno"> 4242</span>   <span class="keywordtype">double</span> sky_med=0;</div>
+<div class="line"><a name="l04243"></a><span class="lineno"> 4243</span>   <span class="keywordtype">double</span> sky_sdv=0;</div>
+<div class="line"><a name="l04244"></a><span class="lineno"> 4244</span>   <span class="keywordtype">int</span> lr41_i=0;</div>
+<div class="line"><a name="l04245"></a><span class="lineno"> 4245</span>   <span class="keywordtype">int</span> lr52_i=0;</div>
+<div class="line"><a name="l04246"></a><span class="lineno"> 4246</span>   <span class="keywordtype">int</span> lr63_i=0;</div>
+<div class="line"><a name="l04247"></a><span class="lineno"> 4247</span>   <span class="keywordtype">int</span> lr74_i=0;</div>
+<div class="line"><a name="l04248"></a><span class="lineno"> 4248</span>   <span class="keywordtype">int</span> lr02_i=0;</div>
+<div class="line"><a name="l04249"></a><span class="lineno"> 4249</span>   <span class="keywordtype">int</span> lr85_i=0;</div>
+<div class="line"><a name="l04250"></a><span class="lineno"> 4250</span>   <span class="keywordtype">int</span> lr20_i=0;</div>
+<div class="line"><a name="l04251"></a><span class="lineno"> 4251</span>   <span class="keywordtype">int</span> lr31_i=0;</div>
+<div class="line"><a name="l04252"></a><span class="lineno"> 4252</span>   <span class="keywordtype">int</span> lr42_i=0;</div>
+<div class="line"><a name="l04253"></a><span class="lineno"> 4253</span>   <span class="keywordtype">int</span> lr53_i=0;</div>
+<div class="line"><a name="l04254"></a><span class="lineno"> 4254</span>   <span class="keywordtype">int</span> lr64_i=0;</div>
+<div class="line"><a name="l04255"></a><span class="lineno"> 4255</span>   <span class="keywordtype">int</span> lr75_i=0;</div>
+<div class="line"><a name="l04256"></a><span class="lineno"> 4256</span>   <span class="keywordtype">int</span> lr86_i=0;</div>
+<div class="line"><a name="l04257"></a><span class="lineno"> 4257</span>   <span class="keywordtype">int</span> lr97_i=0;</div>
+<div class="line"><a name="l04258"></a><span class="lineno"> 4258</span>   <span class="keywordtype">int</span> lr00_i=0;</div>
+<div class="line"><a name="l04259"></a><span class="lineno"> 4259</span> </div>
+<div class="line"><a name="l04260"></a><span class="lineno"> 4260</span>   <span class="keywordtype">int</span> xxx1_i=0;</div>
+<div class="line"><a name="l04261"></a><span class="lineno"> 4261</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l04262"></a><span class="lineno"> 4262</span>   <span class="keywordtype">int</span> finite_pix_i=0;</div>
+<div class="line"><a name="l04263"></a><span class="lineno"> 4263</span>   <span class="keywordtype">double</span> sky_thresh=0.;</div>
+<div class="line"><a name="l04264"></a><span class="lineno"> 4264</span> </div>
+<div class="line"><a name="l04265"></a><span class="lineno"> 4265</span>   cpl_table* rat_sky=NULL;</div>
+<div class="line"><a name="l04266"></a><span class="lineno"> 4266</span> </div>
+<div class="line"><a name="l04267"></a><span class="lineno"> 4267</span>   cpl_table* xxx1=NULL;</div>
+<div class="line"><a name="l04268"></a><span class="lineno"> 4268</span>   cpl_table* xxx2=NULL;</div>
+<div class="line"><a name="l04269"></a><span class="lineno"> 4269</span>   cpl_table* xxx1_sub=NULL;</div>
+<div class="line"><a name="l04270"></a><span class="lineno"> 4270</span>   cpl_table* line_regions=NULL;</div>
+<div class="line"><a name="l04271"></a><span class="lineno"> 4271</span>   cpl_table* cont_regions=NULL;</div>
+<div class="line"><a name="l04272"></a><span class="lineno"> 4272</span>   <span class="keywordtype">int</span> line_i=0;</div>
+<div class="line"><a name="l04273"></a><span class="lineno"> 4273</span>   <span class="keywordtype">int</span> cont_i=0;</div>
+<div class="line"><a name="l04274"></a><span class="lineno"> 4274</span>   <span class="keywordtype">double</span> fmed=0;</div>
+<div class="line"><a name="l04275"></a><span class="lineno"> 4275</span>   <span class="keywordtype">double</span> fsdv=0;</div>
+<div class="line"><a name="l04276"></a><span class="lineno"> 4276</span>   cpl_table* fline_res=NULL;</div>
+<div class="line"><a name="l04277"></a><span class="lineno"> 4277</span>   <span class="keywordtype">int</span> fclip_i=0;</div>
+<div class="line"><a name="l04278"></a><span class="lineno"> 4278</span>   <span class="keywordtype">int</span> fline_i=0;</div>
+<div class="line"><a name="l04279"></a><span class="lineno"> 4279</span>   cpl_table* rscale0=NULL;</div>
+<div class="line"><a name="l04280"></a><span class="lineno"> 4280</span>   <span class="keywordtype">double</span> r=0;</div>
+<div class="line"><a name="l04281"></a><span class="lineno"> 4281</span>   cpl_table* obj_cont=NULL;</div>
+<div class="line"><a name="l04282"></a><span class="lineno"> 4282</span>   cpl_table* sky_cont=NULL;</div>
+<div class="line"><a name="l04283"></a><span class="lineno"> 4283</span>   cpl_table* obj_line=NULL;</div>
+<div class="line"><a name="l04284"></a><span class="lineno"> 4284</span>   cpl_table* sky_line=NULL;</div>
+<div class="line"><a name="l04285"></a><span class="lineno"> 4285</span> </div>
+<div class="line"><a name="l04286"></a><span class="lineno"> 4286</span> </div>
+<div class="line"><a name="l04287"></a><span class="lineno"> 4287</span>   <span class="comment">//Rotational parameters</span></div>
+<div class="line"><a name="l04288"></a><span class="lineno"> 4288</span>   <span class="keywordtype">int</span> low_pos_i=0;</div>
+<div class="line"><a name="l04289"></a><span class="lineno"> 4289</span>   <span class="keywordtype">int</span> med_pos_i=0;</div>
+<div class="line"><a name="l04290"></a><span class="lineno"> 4290</span>   <span class="keywordtype">int</span> hi_pos_i=0;</div>
+<div class="line"><a name="l04291"></a><span class="lineno"> 4291</span> </div>
+<div class="line"><a name="l04292"></a><span class="lineno"> 4292</span>   cpl_table* finite_pix=NULL;</div>
+<div class="line"><a name="l04293"></a><span class="lineno"> 4293</span>   cpl_table* tmp_tbl=NULL;</div>
+<div class="line"><a name="l04294"></a><span class="lineno"> 4294</span> </div>
+<div class="line"><a name="l04295"></a><span class="lineno"> 4295</span>   cpl_table* low_scale=NULL;</div>
+<div class="line"><a name="l04296"></a><span class="lineno"> 4296</span>   cpl_table* med_scale=NULL;</div>
+<div class="line"><a name="l04297"></a><span class="lineno"> 4297</span>   cpl_table* hi_regions=NULL;</div>
+<div class="line"><a name="l04298"></a><span class="lineno"> 4298</span> </div>
+<div class="line"><a name="l04299"></a><span class="lineno"> 4299</span>   cpl_table* low_regions=NULL;</div>
+<div class="line"><a name="l04300"></a><span class="lineno"> 4300</span>   cpl_table* med_regions=NULL;</div>
+<div class="line"><a name="l04301"></a><span class="lineno"> 4301</span> </div>
+<div class="line"><a name="l04302"></a><span class="lineno"> 4302</span> </div>
+<div class="line"><a name="l04303"></a><span class="lineno"> 4303</span>   cpl_table* low_pos=NULL;</div>
+<div class="line"><a name="l04304"></a><span class="lineno"> 4304</span>   cpl_table* med_pos=NULL;</div>
+<div class="line"><a name="l04305"></a><span class="lineno"> 4305</span>   cpl_table* hi_pos=NULL;</div>
+<div class="line"><a name="l04306"></a><span class="lineno"> 4306</span>   cpl_table* llr_xxx1=NULL;</div>
+<div class="line"><a name="l04307"></a><span class="lineno"> 4307</span> </div>
+<div class="line"><a name="l04308"></a><span class="lineno"> 4308</span>   <span class="keywordtype">double</span> rhi=0;</div>
+<div class="line"><a name="l04309"></a><span class="lineno"> 4309</span>   <span class="keywordtype">double</span> rmed=0;</div>
+<div class="line"><a name="l04310"></a><span class="lineno"> 4310</span>   <span class="keywordtype">double</span> rlow=0;</div>
+<div class="line"><a name="l04311"></a><span class="lineno"> 4311</span> </div>
+<div class="line"><a name="l04312"></a><span class="lineno"> 4312</span>   <span class="keywordtype">double</span> min_lrange=0;</div>
+<div class="line"><a name="l04313"></a><span class="lineno"> 4313</span>   <span class="keywordtype">double</span> max_lrange=0;</div>
+<div class="line"><a name="l04314"></a><span class="lineno"> 4314</span> </div>
+<div class="line"><a name="l04315"></a><span class="lineno"> 4315</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l04316"></a><span class="lineno"> 4316</span> </div>
+<div class="line"><a name="l04317"></a><span class="lineno"> 4317</span> </div>
+<div class="line"><a name="l04318"></a><span class="lineno"> 4318</span>   <span class="keywordtype">double</span> w_rot_low[NROT]={1.00852,1.03757,1.09264,1.15388,1.22293,</div>
+<div class="line"><a name="l04319"></a><span class="lineno"> 4319</span>                           1.30216,1.45190,1.52410,1.60308,1.69037,</div>
+<div class="line"><a name="l04320"></a><span class="lineno"> 4320</span>                           1.78803,2.02758,2.18023,1.02895,1.08343,</div>
+<div class="line"><a name="l04321"></a><span class="lineno"> 4321</span>                           1.14399,1.21226,1.29057,1.43444,1.50555,</div>
+<div class="line"><a name="l04322"></a><span class="lineno"> 4322</span>                           1.58333,1.66924,1.76532,2.00082,2.15073};</div>
+<div class="line"><a name="l04323"></a><span class="lineno"> 4323</span> </div>
+<div class="line"><a name="l04324"></a><span class="lineno"> 4324</span> </div>
+<div class="line"><a name="l04325"></a><span class="lineno"> 4325</span>   <span class="keywordtype">double</span> w_rot_med[NROT]={1.00282,1.02139,1.04212,1.07539,1.09753,</div>
+<div class="line"><a name="l04326"></a><span class="lineno"> 4326</span>                           1.13542,1.15917,1.20309,1.22870,1.28070,</div>
+<div class="line"><a name="l04327"></a><span class="lineno"> 4327</span>                           1.30853,1.41861,1.46048,1.48877,1.53324,</div>
+<div class="line"><a name="l04328"></a><span class="lineno"> 4328</span>                           1.56550,1.61286,1.65024,1.70088,1.74500,</div>
+<div class="line"><a name="l04329"></a><span class="lineno"> 4329</span>                           1.79940,1.97719,2.04127,2.12496,2.19956};</div>
+<div class="line"><a name="l04330"></a><span class="lineno"> 4330</span> </div>
+<div class="line"><a name="l04331"></a><span class="lineno"> 4331</span> </div>
+<div class="line"><a name="l04332"></a><span class="lineno"> 4332</span> </div>
+<div class="line"><a name="l04333"></a><span class="lineno"> 4333</span>   check_nomsg(do_hk = cpl_array_new(NBOUND+1,CPL_TYPE_INT));</div>
+<div class="line"><a name="l04334"></a><span class="lineno"> 4334</span>   check_nomsg(rfit  = cpl_array_new(NBOUND+1,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l04335"></a><span class="lineno"> 4335</span> </div>
+<div class="line"><a name="l04336"></a><span class="lineno"> 4336</span>   lr41_i=cpl_table_get_nrow(lr41);</div>
+<div class="line"><a name="l04337"></a><span class="lineno"> 4337</span>   lr52_i=cpl_table_get_nrow(lr52);</div>
+<div class="line"><a name="l04338"></a><span class="lineno"> 4338</span>   lr63_i=cpl_table_get_nrow(lr63);</div>
+<div class="line"><a name="l04339"></a><span class="lineno"> 4339</span>   lr74_i=cpl_table_get_nrow(lr74);</div>
+<div class="line"><a name="l04340"></a><span class="lineno"> 4340</span>   lr02_i=cpl_table_get_nrow(lr02);</div>
+<div class="line"><a name="l04341"></a><span class="lineno"> 4341</span>   lr85_i=cpl_table_get_nrow(lr85);</div>
+<div class="line"><a name="l04342"></a><span class="lineno"> 4342</span>   lr20_i=cpl_table_get_nrow(lr20);</div>
+<div class="line"><a name="l04343"></a><span class="lineno"> 4343</span>   lr31_i=cpl_table_get_nrow(lr31);</div>
+<div class="line"><a name="l04344"></a><span class="lineno"> 4344</span>   lr42_i=cpl_table_get_nrow(lr42);</div>
+<div class="line"><a name="l04345"></a><span class="lineno"> 4345</span>   lr53_i=cpl_table_get_nrow(lr53);</div>
+<div class="line"><a name="l04346"></a><span class="lineno"> 4346</span>   lr64_i=cpl_table_get_nrow(lr64);</div>
+<div class="line"><a name="l04347"></a><span class="lineno"> 4347</span>   lr75_i=cpl_table_get_nrow(lr75);</div>
+<div class="line"><a name="l04348"></a><span class="lineno"> 4348</span>   lr86_i=cpl_table_get_nrow(lr86);</div>
+<div class="line"><a name="l04349"></a><span class="lineno"> 4349</span>   lr97_i=cpl_table_get_nrow(lr97);</div>
+<div class="line"><a name="l04350"></a><span class="lineno"> 4350</span>   check_nomsg(lr00_i=cpl_table_get_nrow(lr00));</div>
+<div class="line"><a name="l04351"></a><span class="lineno"> 4351</span> </div>
+<div class="line"><a name="l04352"></a><span class="lineno"> 4352</span>   cpl_array_set_int(do_hk,0,lr41_i);</div>
+<div class="line"><a name="l04353"></a><span class="lineno"> 4353</span>   cpl_array_set_int(do_hk,1,lr52_i);</div>
+<div class="line"><a name="l04354"></a><span class="lineno"> 4354</span>   cpl_array_set_int(do_hk,2,lr63_i);</div>
+<div class="line"><a name="l04355"></a><span class="lineno"> 4355</span>   cpl_array_set_int(do_hk,3,lr74_i);</div>
+<div class="line"><a name="l04356"></a><span class="lineno"> 4356</span>   cpl_array_set_int(do_hk,4,lr02_i);</div>
+<div class="line"><a name="l04357"></a><span class="lineno"> 4357</span>   cpl_array_set_int(do_hk,5,lr85_i);</div>
+<div class="line"><a name="l04358"></a><span class="lineno"> 4358</span>   cpl_array_set_int(do_hk,6,lr20_i);</div>
+<div class="line"><a name="l04359"></a><span class="lineno"> 4359</span>   cpl_array_set_int(do_hk,7,lr31_i);</div>
+<div class="line"><a name="l04360"></a><span class="lineno"> 4360</span>   cpl_array_set_int(do_hk,8,lr42_i);</div>
+<div class="line"><a name="l04361"></a><span class="lineno"> 4361</span>   cpl_array_set_int(do_hk,9,lr53_i);</div>
+<div class="line"><a name="l04362"></a><span class="lineno"> 4362</span>   cpl_array_set_int(do_hk,10,lr64_i);</div>
+<div class="line"><a name="l04363"></a><span class="lineno"> 4363</span>   cpl_array_set_int(do_hk,11,lr75_i);</div>
+<div class="line"><a name="l04364"></a><span class="lineno"> 4364</span>   cpl_array_set_int(do_hk,12,lr86_i);</div>
+<div class="line"><a name="l04365"></a><span class="lineno"> 4365</span>   cpl_array_set_int(do_hk,13,lr97_i);</div>
+<div class="line"><a name="l04366"></a><span class="lineno"> 4366</span>   check_nomsg(cpl_array_set_int(do_hk,14,lr00_i));</div>
+<div class="line"><a name="l04367"></a><span class="lineno"> 4367</span> </div>
+<div class="line"><a name="l04368"></a><span class="lineno"> 4368</span>   check_nomsg(rscale0=cpl_table_duplicate(*int_sky));</div>
+<div class="line"><a name="l04369"></a><span class="lineno"> 4369</span>   check_nomsg(cpl_table_new_column(rscale0,<span class="stringliteral">"RATIO"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l04370"></a><span class="lineno"> 4370</span>   check_nomsg(nrow=cpl_table_get_nrow(rscale0));</div>
+<div class="line"><a name="l04371"></a><span class="lineno"> 4371</span>   check_nomsg(cpl_table_fill_column_window(rscale0,<span class="stringliteral">"RATIO"</span>,0,nrow,0));</div>
+<div class="line"><a name="l04372"></a><span class="lineno"> 4372</span> </div>
+<div class="line"><a name="l04373"></a><span class="lineno"> 4373</span>   <span class="comment">// For each range extract proper: obj, sky, wave spectra</span></div>
+<div class="line"><a name="l04374"></a><span class="lineno"> 4374</span>   <span class="keywordflow">for</span> (i=0;i<NBOUND+1;i++) {</div>
+<div class="line"><a name="l04375"></a><span class="lineno"> 4375</span>     <span class="keywordflow">if</span> (cpl_array_get_int(do_hk,i,&status) > 0) {</div>
+<div class="line"><a name="l04376"></a><span class="lineno"> 4376</span> </div>
+<div class="line"><a name="l04377"></a><span class="lineno"> 4377</span> </div>
+<div class="line"><a name="l04378"></a><span class="lineno"> 4378</span>       <span class="keywordflow">switch</span>(i) {</div>
+<div class="line"><a name="l04379"></a><span class="lineno"> 4379</span> </div>
+<div class="line"><a name="l04380"></a><span class="lineno"> 4380</span> </div>
+<div class="line"><a name="l04381"></a><span class="lineno"> 4381</span>       <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l04382"></a><span class="lineno"> 4382</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr41,wtol,</div>
+<div class="line"><a name="l04383"></a><span class="lineno"> 4383</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04384"></a><span class="lineno"> 4384</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04385"></a><span class="lineno"> 4385</span> </div>
+<div class="line"><a name="l04386"></a><span class="lineno"> 4386</span>       <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l04387"></a><span class="lineno"> 4387</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr52,wtol,</div>
+<div class="line"><a name="l04388"></a><span class="lineno"> 4388</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04389"></a><span class="lineno"> 4389</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04390"></a><span class="lineno"> 4390</span> </div>
+<div class="line"><a name="l04391"></a><span class="lineno"> 4391</span>       <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l04392"></a><span class="lineno"> 4392</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr63,wtol,</div>
+<div class="line"><a name="l04393"></a><span class="lineno"> 4393</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04394"></a><span class="lineno"> 4394</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04395"></a><span class="lineno"> 4395</span> </div>
+<div class="line"><a name="l04396"></a><span class="lineno"> 4396</span>       <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l04397"></a><span class="lineno"> 4397</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr74,wtol,</div>
+<div class="line"><a name="l04398"></a><span class="lineno"> 4398</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04399"></a><span class="lineno"> 4399</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04400"></a><span class="lineno"> 4400</span> </div>
+<div class="line"><a name="l04401"></a><span class="lineno"> 4401</span>       <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l04402"></a><span class="lineno"> 4402</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr02,wtol,</div>
+<div class="line"><a name="l04403"></a><span class="lineno"> 4403</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04404"></a><span class="lineno"> 4404</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04405"></a><span class="lineno"> 4405</span> </div>
+<div class="line"><a name="l04406"></a><span class="lineno"> 4406</span>       <span class="keywordflow">case</span> 5:</div>
+<div class="line"><a name="l04407"></a><span class="lineno"> 4407</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr85,wtol,</div>
+<div class="line"><a name="l04408"></a><span class="lineno"> 4408</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04409"></a><span class="lineno"> 4409</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04410"></a><span class="lineno"> 4410</span>       <span class="keywordflow">case</span> 6:</div>
+<div class="line"><a name="l04411"></a><span class="lineno"> 4411</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr20,wtol,</div>
+<div class="line"><a name="l04412"></a><span class="lineno"> 4412</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04413"></a><span class="lineno"> 4413</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04414"></a><span class="lineno"> 4414</span>       <span class="keywordflow">case</span> 7:</div>
+<div class="line"><a name="l04415"></a><span class="lineno"> 4415</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr31,wtol,</div>
+<div class="line"><a name="l04416"></a><span class="lineno"> 4416</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04417"></a><span class="lineno"> 4417</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04418"></a><span class="lineno"> 4418</span>       <span class="keywordflow">case</span> 8:</div>
+<div class="line"><a name="l04419"></a><span class="lineno"> 4419</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr42,wtol,</div>
+<div class="line"><a name="l04420"></a><span class="lineno"> 4420</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04421"></a><span class="lineno"> 4421</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04422"></a><span class="lineno"> 4422</span>       <span class="keywordflow">case</span> 9:</div>
+<div class="line"><a name="l04423"></a><span class="lineno"> 4423</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr53,wtol,</div>
+<div class="line"><a name="l04424"></a><span class="lineno"> 4424</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04425"></a><span class="lineno"> 4425</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04426"></a><span class="lineno"> 4426</span>       <span class="keywordflow">case</span> 10:</div>
+<div class="line"><a name="l04427"></a><span class="lineno"> 4427</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr64,wtol,</div>
+<div class="line"><a name="l04428"></a><span class="lineno"> 4428</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04429"></a><span class="lineno"> 4429</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04430"></a><span class="lineno"> 4430</span>       <span class="keywordflow">case</span> 11:</div>
+<div class="line"><a name="l04431"></a><span class="lineno"> 4431</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr75,wtol,</div>
+<div class="line"><a name="l04432"></a><span class="lineno"> 4432</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04433"></a><span class="lineno"> 4433</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04434"></a><span class="lineno"> 4434</span>       <span class="keywordflow">case</span> 12:</div>
+<div class="line"><a name="l04435"></a><span class="lineno"> 4435</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr86,wtol,</div>
+<div class="line"><a name="l04436"></a><span class="lineno"> 4436</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04437"></a><span class="lineno"> 4437</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04438"></a><span class="lineno"> 4438</span>       <span class="keywordflow">case</span> 13:</div>
+<div class="line"><a name="l04439"></a><span class="lineno"> 4439</span>         ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr97,wtol,</div>
+<div class="line"><a name="l04440"></a><span class="lineno"> 4440</span>                         &obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04441"></a><span class="lineno"> 4441</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04442"></a><span class="lineno"> 4442</span>       <span class="keywordflow">case</span> 14:</div>
+<div class="line"><a name="l04443"></a><span class="lineno"> 4443</span>          ck0_nomsg(sinfo_get_obj_sky_wav_sub(*int_obj,*int_sky,lambda,lr00,</div>
+<div class="line"><a name="l04444"></a><span class="lineno"> 4444</span>                          wtol,&obj_lr,&sky_lr,&wav_lr));</div>
+<div class="line"><a name="l04445"></a><span class="lineno"> 4445</span>      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l04446"></a><span class="lineno"> 4446</span>       <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l04447"></a><span class="lineno"> 4447</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"case not supported"</span>);</div>
+<div class="line"><a name="l04448"></a><span class="lineno"> 4448</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l04449"></a><span class="lineno"> 4449</span>       }</div>
+<div class="line"><a name="l04450"></a><span class="lineno"> 4450</span>       <span class="keywordflow">if</span>(sky_lr == NULL || obj_lr == NULL || wav_lr == NULL) {</div>
+<div class="line"><a name="l04451"></a><span class="lineno"> 4451</span>     finite_pix_i=0;</div>
+<div class="line"><a name="l04452"></a><span class="lineno"> 4452</span>         sinfo_msg(<span class="stringliteral">"no good pix left"</span>);</div>
+<div class="line"><a name="l04453"></a><span class="lineno"> 4453</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04454"></a><span class="lineno"> 4454</span>     <span class="comment">//AMO: the following 2 seems to be critical for robustness</span></div>
+<div class="line"><a name="l04455"></a><span class="lineno"> 4455</span>     <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,"out_skylr0.fits",</span></div>
+<div class="line"><a name="l04456"></a><span class="lineno"> 4456</span>     <span class="comment">//             CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04457"></a><span class="lineno"> 4457</span>     <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,"out_objlr0.fits",</span></div>
+<div class="line"><a name="l04458"></a><span class="lineno"> 4458</span>     <span class="comment">//             CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04459"></a><span class="lineno"> 4459</span>     <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,"out_wavlr0.fits",</span></div>
+<div class="line"><a name="l04460"></a><span class="lineno"> 4460</span>     <span class="comment">//             CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04461"></a><span class="lineno"> 4461</span> </div>
+<div class="line"><a name="l04462"></a><span class="lineno"> 4462</span> </div>
+<div class="line"><a name="l04463"></a><span class="lineno"> 4463</span> </div>
+<div class="line"><a name="l04464"></a><span class="lineno"> 4464</span>     check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(&sky_lr,</div>
+<div class="line"><a name="l04465"></a><span class="lineno"> 4465</span>                                                               &obj_lr,</div>
+<div class="line"><a name="l04466"></a><span class="lineno"> 4466</span>                                                               &wav_lr));</div>
+<div class="line"><a name="l04467"></a><span class="lineno"> 4467</span> </div>
+<div class="line"><a name="l04468"></a><span class="lineno"> 4468</span> </div>
+<div class="line"><a name="l04469"></a><span class="lineno"> 4469</span>       }</div>
+<div class="line"><a name="l04470"></a><span class="lineno"> 4470</span> </div>
+<div class="line"><a name="l04471"></a><span class="lineno"> 4471</span> </div>
+<div class="line"><a name="l04472"></a><span class="lineno"> 4472</span>       <span class="keywordflow">if</span> (finite_pix_i > npixw) {</div>
+<div class="line"><a name="l04473"></a><span class="lineno"> 4473</span>         <span class="comment">// identify sky lines</span></div>
+<div class="line"><a name="l04474"></a><span class="lineno"> 4474</span>         <span class="comment">//sinfo_msg("finite_pix_i=%d",finite_pix_i);</span></div>
+<div class="line"><a name="l04475"></a><span class="lineno"> 4475</span>         check_nomsg(cpl_table_erase_invalid(obj_lr));</div>
+<div class="line"><a name="l04476"></a><span class="lineno"> 4476</span>     check_nomsg(cpl_table_erase_invalid(sky_lr));</div>
+<div class="line"><a name="l04477"></a><span class="lineno"> 4477</span>     check_nomsg(cpl_table_erase_invalid(wav_lr));</div>
+<div class="line"><a name="l04478"></a><span class="lineno"> 4478</span> </div>
+<div class="line"><a name="l04479"></a><span class="lineno"> 4479</span> </div>
+<div class="line"><a name="l04480"></a><span class="lineno"> 4480</span>     check_nomsg(sky_med=cpl_table_get_column_median(sky_lr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04481"></a><span class="lineno"> 4481</span>     check_nomsg(sky_sdv=cpl_table_get_column_stdev(sky_lr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04482"></a><span class="lineno"> 4482</span>         check_nomsg(cpl_table_select_all(sky_lr));</div>
+<div class="line"><a name="l04483"></a><span class="lineno"> 4483</span>         sky_thresh=sky_med+sky_sdv;</div>
+<div class="line"><a name="l04484"></a><span class="lineno"> 4484</span>         <span class="comment">//sinfo_msg("sky_thresh=%f",sky_thresh);</span></div>
+<div class="line"><a name="l04485"></a><span class="lineno"> 4485</span>         check_nomsg(xxx1_i=cpl_table_and_selected_double(sky_lr,<span class="stringliteral">"INT"</span>,</div>
+<div class="line"><a name="l04486"></a><span class="lineno"> 4486</span>                            CPL_GREATER_THAN,sky_thresh));</div>
+<div class="line"><a name="l04487"></a><span class="lineno"> 4487</span>     check_nomsg(xxx1 = cpl_table_extract_selected(sky_lr));</div>
+<div class="line"><a name="l04488"></a><span class="lineno"> 4488</span>         check_nomsg(cpl_table_select_all(sky_lr));</div>
+<div class="line"><a name="l04489"></a><span class="lineno"> 4489</span> </div>
+<div class="line"><a name="l04490"></a><span class="lineno"> 4490</span>     <span class="keywordflow">if</span> (xxx1_i > 0) {</div>
+<div class="line"><a name="l04491"></a><span class="lineno"> 4491</span>       <span class="comment">//separate line and continuum regions</span></div>
+<div class="line"><a name="l04492"></a><span class="lineno"> 4492</span>           <span class="comment">//by convolving with a hat region of large as a line</span></div>
+<div class="line"><a name="l04493"></a><span class="lineno"> 4493</span>           <span class="comment">//sinfo_msg("xxx1_i=%d",xxx1_i);</span></div>
+<div class="line"><a name="l04494"></a><span class="lineno"> 4494</span>       check_nomsg(xxx2 = cpl_table_duplicate(sky_lr));</div>
+<div class="line"><a name="l04495"></a><span class="lineno"> 4495</span>           <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04496"></a><span class="lineno"> 4496</span>           <span class="comment">//                           "out_skylr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04497"></a><span class="lineno"> 4497</span>           <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04498"></a><span class="lineno"> 4498</span>           <span class="comment">//                             "out_objlr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04499"></a><span class="lineno"> 4499</span>           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04500"></a><span class="lineno"> 4500</span>           <span class="comment">//                             "out_xxx2_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04501"></a><span class="lineno"> 4501</span>           ck0_nomsg(sinfo_table_threshold(&xxx2,<span class="stringliteral">"INT"</span>,sky_thresh,</div>
+<div class="line"><a name="l04502"></a><span class="lineno"> 4502</span>                                           sky_thresh,0.,10.));</div>
+<div class="line"><a name="l04503"></a><span class="lineno"> 4503</span>           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04504"></a><span class="lineno"> 4504</span>           <span class="comment">//                             "out_xxx2_1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04505"></a><span class="lineno"> 4505</span> </div>
+<div class="line"><a name="l04506"></a><span class="lineno"> 4506</span> </div>
+<div class="line"><a name="l04507"></a><span class="lineno"> 4507</span>           <span class="comment">/* TODO</span></div>
+<div class="line"><a name="l04508"></a><span class="lineno"> 4508</span> <span class="comment">      xxx2[xxx1] = 10.;</span></div>
+<div class="line"><a name="l04509"></a><span class="lineno"> 4509</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l04510"></a><span class="lineno"> 4510</span>           <span class="comment">//sinfo_msg("npixw/2=%d",npixw);</span></div>
+<div class="line"><a name="l04511"></a><span class="lineno"> 4511</span>       check_nomsg(sinfo_convolve_kernel(&xxx2,npixw/2));</div>
+<div class="line"><a name="l04512"></a><span class="lineno"> 4512</span>           <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04513"></a><span class="lineno"> 4513</span>           <span class="comment">//                             "out_xxx2_2.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04514"></a><span class="lineno"> 4514</span> </div>
+<div class="line"><a name="l04515"></a><span class="lineno"> 4515</span>           <span class="comment">// get line_regions</span></div>
+<div class="line"><a name="l04516"></a><span class="lineno"> 4516</span>           check_nomsg(line_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,</div>
+<div class="line"><a name="l04517"></a><span class="lineno"> 4517</span>                                                          CPL_GREATER_THAN,0));</div>
+<div class="line"><a name="l04518"></a><span class="lineno"> 4518</span> </div>
+<div class="line"><a name="l04519"></a><span class="lineno"> 4519</span>           check_nomsg(line_regions=cpl_table_extract_selected(xxx2));</div>
+<div class="line"><a name="l04520"></a><span class="lineno"> 4520</span> </div>
+<div class="line"><a name="l04521"></a><span class="lineno"> 4521</span>           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span></div>
+<div class="line"><a name="l04522"></a><span class="lineno"> 4522</span>           <span class="comment">//"out_line_regions.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04523"></a><span class="lineno"> 4523</span> </div>
+<div class="line"><a name="l04524"></a><span class="lineno"> 4524</span>       check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04525"></a><span class="lineno"> 4525</span>       check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l04526"></a><span class="lineno"> 4526</span> </div>
+<div class="line"><a name="l04527"></a><span class="lineno"> 4527</span>           check_nomsg(cpl_table_select_all(xxx2));</div>
+<div class="line"><a name="l04528"></a><span class="lineno"> 4528</span> </div>
+<div class="line"><a name="l04529"></a><span class="lineno"> 4529</span>           <span class="comment">// get cont_regions</span></div>
+<div class="line"><a name="l04530"></a><span class="lineno"> 4530</span>           check_nomsg(cont_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,</div>
+<div class="line"><a name="l04531"></a><span class="lineno"> 4531</span>                                                            CPL_EQUAL_TO,0));</div>
+<div class="line"><a name="l04532"></a><span class="lineno"> 4532</span>           check_nomsg(cont_regions=cpl_table_extract_selected(xxx2));</div>
+<div class="line"><a name="l04533"></a><span class="lineno"> 4533</span> </div>
+<div class="line"><a name="l04534"></a><span class="lineno"> 4534</span>           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span></div>
+<div class="line"><a name="l04535"></a><span class="lineno"> 4535</span>           <span class="comment">//"out_cont_regions.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04536"></a><span class="lineno"> 4536</span> </div>
+<div class="line"><a name="l04537"></a><span class="lineno"> 4537</span>       check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04538"></a><span class="lineno"> 4538</span>       check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l04539"></a><span class="lineno"> 4539</span>           check_nomsg(cpl_table_select_all(xxx2));</div>
+<div class="line"><a name="l04540"></a><span class="lineno"> 4540</span>       sinfo_free_table(&xxx2);</div>
+<div class="line"><a name="l04541"></a><span class="lineno"> 4541</span> </div>
+<div class="line"><a name="l04542"></a><span class="lineno"> 4542</span> </div>
+<div class="line"><a name="l04543"></a><span class="lineno"> 4543</span>       <span class="keywordflow">if</span> (line_i >= 3 && cont_i >= 3) {</div>
+<div class="line"><a name="l04544"></a><span class="lineno"> 4544</span>             <span class="comment">//If we have enough line points and continuum points</span></div>
+<div class="line"><a name="l04545"></a><span class="lineno"> 4545</span>              <span class="comment">//sinfo_msg("line_i=%d cont_i=%d",line_i,cont_i);</span></div>
+<div class="line"><a name="l04546"></a><span class="lineno"> 4546</span>         <span class="keywordflow">if</span> (i == 0) sinfo_msg(<span class="stringliteral">"optimising 4-1 transitions"</span>);</div>
+<div class="line"><a name="l04547"></a><span class="lineno"> 4547</span>             <span class="keywordflow">if</span> (i == 1) sinfo_msg(<span class="stringliteral">"optimising 5-2 transitions"</span>);</div>
+<div class="line"><a name="l04548"></a><span class="lineno"> 4548</span>             <span class="keywordflow">if</span> (i == 2) sinfo_msg(<span class="stringliteral">"optimising 6-3 transitions"</span>);</div>
+<div class="line"><a name="l04549"></a><span class="lineno"> 4549</span>             <span class="keywordflow">if</span> (i == 3) sinfo_msg(<span class="stringliteral">"optimising 7-4 transitions"</span>);</div>
+<div class="line"><a name="l04550"></a><span class="lineno"> 4550</span>             <span class="keywordflow">if</span> (i == 4) sinfo_msg(<span class="stringliteral">"optimising 0-2 transitions"</span>);</div>
+<div class="line"><a name="l04551"></a><span class="lineno"> 4551</span>             <span class="keywordflow">if</span> (i == 5) sinfo_msg(<span class="stringliteral">"optimising 8-5 transitions"</span>);</div>
+<div class="line"><a name="l04552"></a><span class="lineno"> 4552</span>             <span class="keywordflow">if</span> (i == 6) sinfo_msg(<span class="stringliteral">"optimising 2-0 transitions"</span>);</div>
+<div class="line"><a name="l04553"></a><span class="lineno"> 4553</span>             <span class="keywordflow">if</span> (i == 7) sinfo_msg(<span class="stringliteral">"optimising 3-1 transitions"</span>);</div>
+<div class="line"><a name="l04554"></a><span class="lineno"> 4554</span>             <span class="keywordflow">if</span> (i == 8) sinfo_msg(<span class="stringliteral">"optimising 4-2 transitions"</span>);</div>
+<div class="line"><a name="l04555"></a><span class="lineno"> 4555</span>             <span class="keywordflow">if</span> (i == 9) sinfo_msg(<span class="stringliteral">"optimising 5-3 transitions"</span>);</div>
+<div class="line"><a name="l04556"></a><span class="lineno"> 4556</span>             <span class="keywordflow">if</span> (i == 10) sinfo_msg(<span class="stringliteral">"optimising 6-4 transitions"</span>);</div>
+<div class="line"><a name="l04557"></a><span class="lineno"> 4557</span>             <span class="keywordflow">if</span> (i == 11) sinfo_msg(<span class="stringliteral">"optimising 7-5 transitions"</span>);</div>
+<div class="line"><a name="l04558"></a><span class="lineno"> 4558</span>             <span class="keywordflow">if</span> (i == 12) sinfo_msg(<span class="stringliteral">"optimising 8-6 transitions"</span>);</div>
+<div class="line"><a name="l04559"></a><span class="lineno"> 4559</span>             <span class="keywordflow">if</span> (i == 13) sinfo_msg(<span class="stringliteral">"optimising 9-7 transitions"</span>);</div>
+<div class="line"><a name="l04560"></a><span class="lineno"> 4560</span>             <span class="keywordflow">if</span> (i == 14) sinfo_msg(<span class="stringliteral">"optimising final bit"</span>);</div>
+<div class="line"><a name="l04561"></a><span class="lineno"> 4561</span>         <span class="comment">// Fit the object profile='fline_res' of the sky line residuals</span></div>
+<div class="line"><a name="l04562"></a><span class="lineno"> 4562</span>             <span class="comment">// left after proper scaled sky spectrum lines (and continua)</span></div>
+<div class="line"><a name="l04563"></a><span class="lineno"> 4563</span>             <span class="comment">// subtraction. Then determines median and stdev to flag outliers</span></div>
+<div class="line"><a name="l04564"></a><span class="lineno"> 4564</span> </div>
+<div class="line"><a name="l04565"></a><span class="lineno"> 4565</span>         <span class="comment">//Free memory for each loop</span></div>
+<div class="line"><a name="l04566"></a><span class="lineno"> 4566</span>             sinfo_free_table(&obj_cont);</div>
+<div class="line"><a name="l04567"></a><span class="lineno"> 4567</span>             sinfo_free_table(&sky_cont);</div>
+<div class="line"><a name="l04568"></a><span class="lineno"> 4568</span>             sinfo_free_table(&sky_line);</div>
+<div class="line"><a name="l04569"></a><span class="lineno"> 4569</span>             sinfo_free_table(&obj_line);</div>
+<div class="line"><a name="l04570"></a><span class="lineno"> 4570</span>         <span class="comment">//Identify obj lines and continuum, same for sky</span></div>
+<div class="line"><a name="l04571"></a><span class="lineno"> 4571</span>             cknull_nomsg(obj_line=sinfo_table_select_range(obj_lr,line_regions,</div>
+<div class="line"><a name="l04572"></a><span class="lineno"> 4572</span>                                   wtol));</div>
+<div class="line"><a name="l04573"></a><span class="lineno"> 4573</span> </div>
+<div class="line"><a name="l04574"></a><span class="lineno"> 4574</span> </div>
+<div class="line"><a name="l04575"></a><span class="lineno"> 4575</span>             cknull_nomsg(sky_line=sinfo_table_select_range(sky_lr,line_regions,</div>
+<div class="line"><a name="l04576"></a><span class="lineno"> 4576</span>                                   wtol));</div>
+<div class="line"><a name="l04577"></a><span class="lineno"> 4577</span>             cknull_nomsg(obj_cont=sinfo_table_select_range(obj_lr,cont_regions,</div>
+<div class="line"><a name="l04578"></a><span class="lineno"> 4578</span>                                   wtol));</div>
+<div class="line"><a name="l04579"></a><span class="lineno"> 4579</span>              cknull_nomsg(sky_cont=sinfo_table_select_range(sky_lr,cont_regions,</div>
+<div class="line"><a name="l04580"></a><span class="lineno"> 4580</span>                                   wtol));</div>
+<div class="line"><a name="l04581"></a><span class="lineno"> 4581</span> </div>
+<div class="line"><a name="l04582"></a><span class="lineno"> 4582</span>         <span class="comment">//Here was commented</span></div>
+<div class="line"><a name="l04583"></a><span class="lineno"> 4583</span>             <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span></div>
+<div class="line"><a name="l04584"></a><span class="lineno"> 4584</span>             <span class="comment">//            "out_line.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04585"></a><span class="lineno"> 4585</span>             <span class="comment">//check_nomsg(cpl_table_save(cont_regions,NULL,NULL,</span></div>
+<div class="line"><a name="l04586"></a><span class="lineno"> 4586</span>             <span class="comment">//            "out_cont.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04587"></a><span class="lineno"> 4587</span>             <span class="comment">//check_nomsg(cpl_table_save(obj_cont,NULL,NULL,</span></div>
+<div class="line"><a name="l04588"></a><span class="lineno"> 4588</span>             <span class="comment">//            "out_obj_cont.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04589"></a><span class="lineno"> 4589</span>             <span class="comment">//check_nomsg(cpl_table_save(obj_line,NULL,NULL,</span></div>
+<div class="line"><a name="l04590"></a><span class="lineno"> 4590</span>             <span class="comment">//            "out_obj_line.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04591"></a><span class="lineno"> 4591</span>             <span class="comment">//check_nomsg(cpl_table_save(sky_line,NULL,NULL,</span></div>
+<div class="line"><a name="l04592"></a><span class="lineno"> 4592</span>             <span class="comment">//            "out_sky_line.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04593"></a><span class="lineno"> 4593</span>             <span class="comment">//check_nomsg(cpl_table_save(sky_cont,NULL,NULL,</span></div>
+<div class="line"><a name="l04594"></a><span class="lineno"> 4594</span>             <span class="comment">//            "out_sky_cont.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04595"></a><span class="lineno"> 4595</span> </div>
+<div class="line"><a name="l04596"></a><span class="lineno"> 4596</span> </div>
+<div class="line"><a name="l04597"></a><span class="lineno"> 4597</span>             sinfo_free_table(&fline_res);</div>
+<div class="line"><a name="l04598"></a><span class="lineno"> 4598</span>             <span class="comment">//FIXME: in some cases obj_cont is empty</span></div>
+<div class="line"><a name="l04599"></a><span class="lineno"> 4599</span>             <span class="comment">//sinfo_msg("first line ratio determination");</span></div>
+<div class="line"><a name="l04600"></a><span class="lineno"> 4600</span>             ck0_nomsg(sinfo_get_line_ratio(obj_line,obj_cont,</div>
+<div class="line"><a name="l04601"></a><span class="lineno"> 4601</span>                        sky_line,sky_cont,method,&r));</div>
+<div class="line"><a name="l04602"></a><span class="lineno"> 4602</span>         sinfo_msg(<span class="stringliteral">"1st Line ratio %g"</span>,r);</div>
+<div class="line"><a name="l04603"></a><span class="lineno"> 4603</span> </div>
+<div class="line"><a name="l04604"></a><span class="lineno"> 4604</span> </div>
+<div class="line"><a name="l04605"></a><span class="lineno"> 4605</span>             <span class="keywordflow">if</span>(cpl_table_get_nrow(obj_cont) > 0) {</div>
+<div class="line"><a name="l04606"></a><span class="lineno"> 4606</span>                check_nomsg(fline_res=sinfo_table_interpol(obj_line,obj_cont,</div>
+<div class="line"><a name="l04607"></a><span class="lineno"> 4607</span>                                                           sky_line,sky_cont,</div>
+<div class="line"><a name="l04608"></a><span class="lineno"> 4608</span>                                                           r));</div>
+<div class="line"><a name="l04609"></a><span class="lineno"> 4609</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04610"></a><span class="lineno"> 4610</span>               check_nomsg(fline_res=cpl_table_duplicate(obj_line));</div>
+<div class="line"><a name="l04611"></a><span class="lineno"> 4611</span>         }</div>
+<div class="line"><a name="l04612"></a><span class="lineno"> 4612</span> </div>
+<div class="line"><a name="l04613"></a><span class="lineno"> 4613</span>             <span class="comment">// check if there are outliers</span></div>
+<div class="line"><a name="l04614"></a><span class="lineno"> 4614</span>             cpl_table_select_all(fline_res);</div>
+<div class="line"><a name="l04615"></a><span class="lineno"> 4615</span>             check_nomsg(fmed = cpl_table_get_column_median(fline_res,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04616"></a><span class="lineno"> 4616</span>             check_nomsg(fsdv = cpl_table_get_column_stdev(fline_res,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04617"></a><span class="lineno"> 4617</span> </div>
+<div class="line"><a name="l04618"></a><span class="lineno"> 4618</span>             check_nomsg(cpl_table_duplicate_column(fline_res,<span class="stringliteral">"AINT"</span>,</div>
+<div class="line"><a name="l04619"></a><span class="lineno"> 4619</span>                                                    fline_res,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04620"></a><span class="lineno"> 4620</span>             check_nomsg(cpl_table_multiply_columns(fline_res,<span class="stringliteral">"AINT"</span>,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04621"></a><span class="lineno"> 4621</span>             check_nomsg(cpl_table_power_column(fline_res,<span class="stringliteral">"AINT"</span>,0.5));</div>
+<div class="line"><a name="l04622"></a><span class="lineno"> 4622</span>             check_nomsg(fclip_i=cpl_table_and_selected_double(fline_res,<span class="stringliteral">"AINT"</span>,</div>
+<div class="line"><a name="l04623"></a><span class="lineno"> 4623</span>                                                   CPL_GREATER_THAN,</div>
+<div class="line"><a name="l04624"></a><span class="lineno"> 4624</span>                                                   fmed+3*fsdv));</div>
+<div class="line"><a name="l04625"></a><span class="lineno"> 4625</span> </div>
+<div class="line"><a name="l04626"></a><span class="lineno"> 4626</span>             check_nomsg(cpl_table_select_all(fline_res));</div>
+<div class="line"><a name="l04627"></a><span class="lineno"> 4627</span> </div>
+<div class="line"><a name="l04628"></a><span class="lineno"> 4628</span> </div>
+<div class="line"><a name="l04629"></a><span class="lineno"> 4629</span>         <span class="keywordflow">if</span> (fclip_i > 0) {</div>
+<div class="line"><a name="l04630"></a><span class="lineno"> 4630</span>               <span class="comment">// do a k-sigma clip to select a better line region</span></div>
+<div class="line"><a name="l04631"></a><span class="lineno"> 4631</span>               <span class="comment">//sinfo_msg("fclip_i=%d",fclip_i);</span></div>
+<div class="line"><a name="l04632"></a><span class="lineno"> 4632</span>               <span class="comment">//Find again line_regions</span></div>
+<div class="line"><a name="l04633"></a><span class="lineno"> 4633</span>               check_nomsg(line_i=cpl_table_and_selected_double(fline_res,</div>
+<div class="line"><a name="l04634"></a><span class="lineno"> 4634</span>                                    <span class="stringliteral">"AINT"</span>,</div>
+<div class="line"><a name="l04635"></a><span class="lineno"> 4635</span>                                    CPL_NOT_GREATER_THAN,</div>
+<div class="line"><a name="l04636"></a><span class="lineno"> 4636</span>                                    fmed+3*fsdv));</div>
+<div class="line"><a name="l04637"></a><span class="lineno"> 4637</span>           <span class="comment">// get new (better) line_regions</span></div>
+<div class="line"><a name="l04638"></a><span class="lineno"> 4638</span>           sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l04639"></a><span class="lineno"> 4639</span>               <span class="comment">//sinfo_msg("line_i=%d",line_i);</span></div>
+<div class="line"><a name="l04640"></a><span class="lineno"> 4640</span>               check_nomsg(line_regions=cpl_table_extract_selected(fline_res));</div>
+<div class="line"><a name="l04641"></a><span class="lineno"> 4641</span>               check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04642"></a><span class="lineno"> 4642</span>               check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"AINT"</span>));</div>
+<div class="line"><a name="l04643"></a><span class="lineno"> 4643</span> </div>
+<div class="line"><a name="l04644"></a><span class="lineno"> 4644</span>           sinfo_free_table(&obj_line);</div>
+<div class="line"><a name="l04645"></a><span class="lineno"> 4645</span>           sinfo_free_table(&sky_line);</div>
+<div class="line"><a name="l04646"></a><span class="lineno"> 4646</span> </div>
+<div class="line"><a name="l04647"></a><span class="lineno"> 4647</span>           <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04648"></a><span class="lineno"> 4648</span>               <span class="comment">//                           "out_obj_lr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04649"></a><span class="lineno"> 4649</span>           <span class="comment">//check_nomsg(cpl_table_save(line_regions,NULL,NULL,</span></div>
+<div class="line"><a name="l04650"></a><span class="lineno"> 4650</span>               <span class="comment">//                           "out_line_regions.fits",</span></div>
+<div class="line"><a name="l04651"></a><span class="lineno"> 4651</span>               <span class="comment">//                           CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04652"></a><span class="lineno"> 4652</span> </div>
+<div class="line"><a name="l04653"></a><span class="lineno"> 4653</span> </div>
+<div class="line"><a name="l04654"></a><span class="lineno"> 4654</span> </div>
+<div class="line"><a name="l04655"></a><span class="lineno"> 4655</span> </div>
+<div class="line"><a name="l04656"></a><span class="lineno"> 4656</span>           <span class="comment">// The following 2 may return an error so we do not check and</span></div>
+<div class="line"><a name="l04657"></a><span class="lineno"> 4657</span>           <span class="comment">// later we reset the error</span></div>
+<div class="line"><a name="l04658"></a><span class="lineno"> 4658</span>               obj_line=sinfo_table_select_range(obj_lr,line_regions,wtol);</div>
+<div class="line"><a name="l04659"></a><span class="lineno"> 4659</span>               sky_line=sinfo_table_select_range(sky_lr,line_regions,wtol);</div>
+<div class="line"><a name="l04660"></a><span class="lineno"> 4660</span>               fline_i=cpl_table_get_nrow(line_regions);</div>
+<div class="line"><a name="l04661"></a><span class="lineno"> 4661</span> </div>
+<div class="line"><a name="l04662"></a><span class="lineno"> 4662</span>               <span class="comment">//sinfo_msg("fline_i=%d",fline_i);</span></div>
+<div class="line"><a name="l04663"></a><span class="lineno"> 4663</span>               <span class="keywordflow">if</span>(fline_i>=3) {</div>
+<div class="line"><a name="l04664"></a><span class="lineno"> 4664</span>                 <span class="comment">// repeat the determination of the line ratio</span></div>
+<div class="line"><a name="l04665"></a><span class="lineno"> 4665</span>                 <span class="comment">//sinfo_msg("second line ratio determination");</span></div>
+<div class="line"><a name="l04666"></a><span class="lineno"> 4666</span>                 ck0_nomsg(sinfo_get_line_ratio(obj_line,obj_cont,</div>
+<div class="line"><a name="l04667"></a><span class="lineno"> 4667</span>                                                 sky_line,sky_cont,method,&r));</div>
+<div class="line"><a name="l04668"></a><span class="lineno"> 4668</span> </div>
+<div class="line"><a name="l04669"></a><span class="lineno"> 4669</span>         sinfo_msg(<span class="stringliteral">"2nd Line ratio %g"</span>,r);</div>
+<div class="line"><a name="l04670"></a><span class="lineno"> 4670</span> </div>
+<div class="line"><a name="l04671"></a><span class="lineno"> 4671</span>           } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04672"></a><span class="lineno"> 4672</span>                 cpl_error_reset();</div>
+<div class="line"><a name="l04673"></a><span class="lineno"> 4673</span>           }</div>
+<div class="line"><a name="l04674"></a><span class="lineno"> 4674</span> </div>
+<div class="line"><a name="l04675"></a><span class="lineno"> 4675</span>           sinfo_free_table(&sky_line);</div>
+<div class="line"><a name="l04676"></a><span class="lineno"> 4676</span>           sinfo_free_table(&obj_line);</div>
+<div class="line"><a name="l04677"></a><span class="lineno"> 4677</span>         }</div>
+<div class="line"><a name="l04678"></a><span class="lineno"> 4678</span> </div>
+<div class="line"><a name="l04679"></a><span class="lineno"> 4679</span>             cpl_msg_info(cpl_func,<span class="stringliteral">"use %"</span> CPL_SIZE_FORMAT </div>
+<div class="line"><a name="l04680"></a><span class="lineno"> 4680</span>                          <span class="stringliteral">" pixels for line and %"</span> CPL_SIZE_FORMAT </div>
+<div class="line"><a name="l04681"></a><span class="lineno"> 4681</span>                          <span class="stringliteral">" for continuum estimation"</span>,</div>
+<div class="line"><a name="l04682"></a><span class="lineno"> 4682</span>             cpl_table_get_nrow(line_regions),cpl_table_get_nrow(cont_regions));</div>
+<div class="line"><a name="l04683"></a><span class="lineno"> 4683</span> </div>
+<div class="line"><a name="l04684"></a><span class="lineno"> 4684</span>         sinfo_msg(<span class="stringliteral">"OH spectrum scaling = %f "</span>,r);</div>
+<div class="line"><a name="l04685"></a><span class="lineno"> 4685</span>             check_nomsg(cpl_array_set_double(rfit,i,r));</div>
+<div class="line"><a name="l04686"></a><span class="lineno"> 4686</span>             ck0_nomsg(sinfo_table_set(&rscale0,wav_lr,r,wtol));</div>
+<div class="line"><a name="l04687"></a><span class="lineno"> 4687</span> </div>
+<div class="line"><a name="l04688"></a><span class="lineno"> 4688</span>       } <span class="comment">/* end if line_i */</span></div>
+<div class="line"><a name="l04689"></a><span class="lineno"> 4689</span>         } <span class="comment">/* end if xxx1_i */</span></div>
+<div class="line"><a name="l04690"></a><span class="lineno"> 4690</span>      } <span class="comment">/* end finite_pix_i */</span></div>
+<div class="line"><a name="l04691"></a><span class="lineno"> 4691</span> </div>
+<div class="line"><a name="l04692"></a><span class="lineno"> 4692</span>     }</div>
+<div class="line"><a name="l04693"></a><span class="lineno"> 4693</span> </div>
+<div class="line"><a name="l04694"></a><span class="lineno"> 4694</span>     sinfo_free_table(&xxx1);</div>
+<div class="line"><a name="l04695"></a><span class="lineno"> 4695</span>     sinfo_free_table(&xxx2);</div>
+<div class="line"><a name="l04696"></a><span class="lineno"> 4696</span>     sinfo_free_table(&sky_lr);</div>
+<div class="line"><a name="l04697"></a><span class="lineno"> 4697</span>     sinfo_free_table(&obj_lr);</div>
+<div class="line"><a name="l04698"></a><span class="lineno"> 4698</span>     sinfo_free_table(&wav_lr);</div>
+<div class="line"><a name="l04699"></a><span class="lineno"> 4699</span> </div>
+<div class="line"><a name="l04700"></a><span class="lineno"> 4700</span>     sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l04701"></a><span class="lineno"> 4701</span>     sinfo_free_table(&cont_regions);</div>
+<div class="line"><a name="l04702"></a><span class="lineno"> 4702</span> </div>
+<div class="line"><a name="l04703"></a><span class="lineno"> 4703</span>   } <span class="comment">/* end for loop on i */</span></div>
+<div class="line"><a name="l04704"></a><span class="lineno"> 4704</span> </div>
+<div class="line"><a name="l04705"></a><span class="lineno"> 4705</span>   sinfo_free_array(&do_hk);</div>
+<div class="line"><a name="l04706"></a><span class="lineno"> 4706</span>   sinfo_free_array(&rfit);</div>
+<div class="line"><a name="l04707"></a><span class="lineno"> 4707</span> </div>
+<div class="line"><a name="l04708"></a><span class="lineno"> 4708</span>   <span class="comment">//sinfo_msg("n scale=%d",cpl_table_get_nrow(rscale0));</span></div>
+<div class="line"><a name="l04709"></a><span class="lineno"> 4709</span>   <span class="comment">//check_nomsg(cpl_table_save(rscale0,NULL,NULL,</span></div>
+<div class="line"><a name="l04710"></a><span class="lineno"> 4710</span>   <span class="comment">//                                   "out_rscale0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04711"></a><span class="lineno"> 4711</span> </div>
+<div class="line"><a name="l04712"></a><span class="lineno"> 4712</span>   check_nomsg(cpl_table_select_all(rscale0));</div>
+<div class="line"><a name="l04713"></a><span class="lineno"> 4713</span>  <span class="comment">/* TODO: here one has to implementa an interpol function</span></div>
+<div class="line"><a name="l04714"></a><span class="lineno"> 4714</span> <span class="comment">  check_nomsg(range0_i=cpl_table_and_selected_double(rscale0,"RATIO",</span></div>
+<div class="line"><a name="l04715"></a><span class="lineno"> 4715</span> <span class="comment">                                                     CPL_NOT_EQUAL_TO,0));</span></div>
+<div class="line"><a name="l04716"></a><span class="lineno"> 4716</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l04717"></a><span class="lineno"> 4717</span>   check_nomsg(*rscale = cpl_table_extract_selected(rscale0));</div>
+<div class="line"><a name="l04718"></a><span class="lineno"> 4718</span>   sinfo_free_table(&rscale0);</div>
+<div class="line"><a name="l04719"></a><span class="lineno"> 4719</span> </div>
+<div class="line"><a name="l04720"></a><span class="lineno"> 4720</span> </div>
+<div class="line"><a name="l04721"></a><span class="lineno"> 4721</span>   check_nomsg(rat_sky=cpl_table_duplicate(*int_sky));</div>
+<div class="line"><a name="l04722"></a><span class="lineno"> 4722</span>   check_nomsg(cpl_table_duplicate_column(rat_sky,<span class="stringliteral">"RATIO"</span>,*rscale,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04723"></a><span class="lineno"> 4723</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"COR_FCT_VIB"</span>,</div>
+<div class="line"><a name="l04724"></a><span class="lineno"> 4724</span>                      *rscale,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04725"></a><span class="lineno"> 4725</span>   <span class="comment">//check_nomsg(cpl_table_save(rat_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l04726"></a><span class="lineno"> 4726</span>   <span class="comment">//                           "rat_sky0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04727"></a><span class="lineno"> 4727</span>   check_nomsg(cpl_table_multiply_columns(rat_sky,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04728"></a><span class="lineno"> 4728</span> </div>
+<div class="line"><a name="l04729"></a><span class="lineno"> 4729</span> </div>
+<div class="line"><a name="l04730"></a><span class="lineno"> 4730</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span></div>
+<div class="line"><a name="l04731"></a><span class="lineno"> 4731</span>   <span class="comment">//                             "out_obj0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04732"></a><span class="lineno"> 4732</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l04733"></a><span class="lineno"> 4733</span>   <span class="comment">//                             "out_sky0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04734"></a><span class="lineno"> 4734</span> </div>
+<div class="line"><a name="l04735"></a><span class="lineno"> 4735</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l04736"></a><span class="lineno"> 4736</span> <span class="comment">  check_nomsg(cpl_table_duplicate_column(*int_obj,"INTC",*int_obj,"INT"));</span></div>
+<div class="line"><a name="l04737"></a><span class="lineno"> 4737</span> <span class="comment">  check_nomsg(cpl_table_duplicate_column(*int_obj,"SKYC",*int_sky,"INTC"));</span></div>
+<div class="line"><a name="l04738"></a><span class="lineno"> 4738</span> <span class="comment">  check_nomsg(cpl_table_subtract_columns(*int_obj,"INTC","SKYC"));</span></div>
+<div class="line"><a name="l04739"></a><span class="lineno"> 4739</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l04740"></a><span class="lineno"> 4740</span> </div>
+<div class="line"><a name="l04741"></a><span class="lineno"> 4741</span>   <span class="comment">// do simple rotational correction</span></div>
+<div class="line"><a name="l04742"></a><span class="lineno"> 4742</span>   <span class="keywordflow">if</span> (do_rot == 1) {</div>
+<div class="line"><a name="l04743"></a><span class="lineno"> 4743</span> </div>
+<div class="line"><a name="l04744"></a><span class="lineno"> 4744</span>     <span class="comment">//finite_pix = where(finite(int_sky) && finite(int_obj),finite_pix_i);</span></div>
+<div class="line"><a name="l04745"></a><span class="lineno"> 4745</span>     check_nomsg(min_lrange=cpl_table_get_column_min(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l04746"></a><span class="lineno"> 4746</span>     check_nomsg(max_lrange=cpl_table_get_column_max(lrange,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l04747"></a><span class="lineno"> 4747</span>     <span class="comment">//sinfo_msg("min_lrange=%g max_lrange=%g",min_lrange,max_lrange);</span></div>
+<div class="line"><a name="l04748"></a><span class="lineno"> 4748</span>     <span class="comment">//check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(&rat_sky,</span></div>
+<div class="line"><a name="l04749"></a><span class="lineno"> 4749</span>     <span class="comment">//                                                      int_obj,</span></div>
+<div class="line"><a name="l04750"></a><span class="lineno"> 4750</span>     <span class="comment">//                                                      &lambda));</span></div>
+<div class="line"><a name="l04751"></a><span class="lineno"> 4751</span>     check_nomsg(finite_pix_i=sinfo_table_sky_obj_flag_nan(int_sky,</div>
+<div class="line"><a name="l04752"></a><span class="lineno"> 4752</span>                                                           int_obj,</div>
+<div class="line"><a name="l04753"></a><span class="lineno"> 4753</span>                                                           &lambda));</div>
+<div class="line"><a name="l04754"></a><span class="lineno"> 4754</span> </div>
+<div class="line"><a name="l04755"></a><span class="lineno"> 4755</span> </div>
+<div class="line"><a name="l04756"></a><span class="lineno"> 4756</span>     check_nomsg(finite_pix=cpl_table_duplicate(lambda));</div>
+<div class="line"><a name="l04757"></a><span class="lineno"> 4757</span>     <span class="comment">//TODO: lambda invalid values need to be reset to valid (?)</span></div>
+<div class="line"><a name="l04758"></a><span class="lineno"> 4758</span> </div>
+<div class="line"><a name="l04759"></a><span class="lineno"> 4759</span>     check_nomsg(cpl_table_erase_invalid(finite_pix));</div>
+<div class="line"><a name="l04760"></a><span class="lineno"> 4760</span> </div>
+<div class="line"><a name="l04761"></a><span class="lineno"> 4761</span> </div>
+<div class="line"><a name="l04762"></a><span class="lineno"> 4762</span>     <span class="keywordflow">if</span> (finite_pix_i > npixw) {</div>
+<div class="line"><a name="l04763"></a><span class="lineno"> 4763</span> </div>
+<div class="line"><a name="l04764"></a><span class="lineno"> 4764</span>       <span class="comment">//finite_pix = finite_pix[where(finite_pix > min(lrange) &&</span></div>
+<div class="line"><a name="l04765"></a><span class="lineno"> 4765</span>       <span class="comment">//                              finite_pix < max(lrange))];</span></div>
+<div class="line"><a name="l04766"></a><span class="lineno"> 4766</span> </div>
+<div class="line"><a name="l04767"></a><span class="lineno"> 4767</span>       check_nomsg(cpl_table_and_selected_double(finite_pix,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l04768"></a><span class="lineno"> 4768</span>                                                 CPL_GREATER_THAN,</div>
+<div class="line"><a name="l04769"></a><span class="lineno"> 4769</span>                                                 min_lrange));</div>
+<div class="line"><a name="l04770"></a><span class="lineno"> 4770</span> </div>
+<div class="line"><a name="l04771"></a><span class="lineno"> 4771</span>       check_nomsg(cpl_table_and_selected_double(finite_pix,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l04772"></a><span class="lineno"> 4772</span>                                                 CPL_LESS_THAN,</div>
+<div class="line"><a name="l04773"></a><span class="lineno"> 4773</span>                                                 max_lrange));</div>
+<div class="line"><a name="l04774"></a><span class="lineno"> 4774</span> </div>
+<div class="line"><a name="l04775"></a><span class="lineno"> 4775</span> </div>
+<div class="line"><a name="l04776"></a><span class="lineno"> 4776</span> </div>
+<div class="line"><a name="l04777"></a><span class="lineno"> 4777</span>       check_nomsg(tmp_tbl=cpl_table_extract_selected(finite_pix));</div>
+<div class="line"><a name="l04778"></a><span class="lineno"> 4778</span>       sinfo_free_table(&finite_pix);</div>
+<div class="line"><a name="l04779"></a><span class="lineno"> 4779</span>       check_nomsg(finite_pix=cpl_table_duplicate(tmp_tbl));</div>
+<div class="line"><a name="l04780"></a><span class="lineno"> 4780</span>       sinfo_free_table(&tmp_tbl);</div>
+<div class="line"><a name="l04781"></a><span class="lineno"> 4781</span>       sinfo_free_table(&sky_lr);</div>
+<div class="line"><a name="l04782"></a><span class="lineno"> 4782</span>       sinfo_free_table(&obj_lr);</div>
+<div class="line"><a name="l04783"></a><span class="lineno"> 4783</span>       sinfo_free_table(&wav_lr);</div>
+<div class="line"><a name="l04784"></a><span class="lineno"> 4784</span> </div>
+<div class="line"><a name="l04785"></a><span class="lineno"> 4785</span> </div>
+<div class="line"><a name="l04786"></a><span class="lineno"> 4786</span>       cknull(sky_lr=sinfo_table_select_range(rat_sky,finite_pix,wtol),</div>
+<div class="line"><a name="l04787"></a><span class="lineno"> 4787</span>          <span class="stringliteral">"extracting sky sub range"</span>);</div>
+<div class="line"><a name="l04788"></a><span class="lineno"> 4788</span>       cknull(obj_lr=sinfo_table_select_range(*int_obj,finite_pix,wtol),</div>
+<div class="line"><a name="l04789"></a><span class="lineno"> 4789</span>          <span class="stringliteral">"extracting obj sub range"</span>);</div>
+<div class="line"><a name="l04790"></a><span class="lineno"> 4790</span>       cknull(wav_lr=sinfo_table_select_range(lambda,finite_pix,wtol),</div>
+<div class="line"><a name="l04791"></a><span class="lineno"> 4791</span>          <span class="stringliteral">"extracting sky sub range"</span>);</div>
+<div class="line"><a name="l04792"></a><span class="lineno"> 4792</span> </div>
+<div class="line"><a name="l04793"></a><span class="lineno"> 4793</span> </div>
+<div class="line"><a name="l04794"></a><span class="lineno"> 4794</span>       <span class="comment">//check_nomsg(cpl_table_save(rat_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l04795"></a><span class="lineno"> 4795</span>       <span class="comment">//                             "out_rat_sky.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04796"></a><span class="lineno"> 4796</span>       <span class="comment">//check_nomsg(cpl_table_save(finite_pix,NULL,NULL,</span></div>
+<div class="line"><a name="l04797"></a><span class="lineno"> 4797</span>       <span class="comment">//                             "out_finite_pix.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04798"></a><span class="lineno"> 4798</span>       <span class="comment">//check_nomsg(cpl_table_save(sky_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04799"></a><span class="lineno"> 4799</span>       <span class="comment">//                             "out_sky_lr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04800"></a><span class="lineno"> 4800</span>       <span class="comment">//check_nomsg(cpl_table_save(obj_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04801"></a><span class="lineno"> 4801</span>       <span class="comment">//                             "out_obj_lr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04802"></a><span class="lineno"> 4802</span>       <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04803"></a><span class="lineno"> 4803</span>       <span class="comment">//                             "out_wav_lr.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04804"></a><span class="lineno"> 4804</span> </div>
+<div class="line"><a name="l04805"></a><span class="lineno"> 4805</span>       <span class="comment">//The following may fail (sky_lr may be empty) so we do not check</span></div>
+<div class="line"><a name="l04806"></a><span class="lineno"> 4806</span>       <span class="keywordflow">if</span>(1 == cpl_table_has_valid(sky_lr,<span class="stringliteral">"INT"</span>)) {</div>
+<div class="line"><a name="l04807"></a><span class="lineno"> 4807</span>     check_nomsg(sky_med=cpl_table_get_column_median(sky_lr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04808"></a><span class="lineno"> 4808</span>     check_nomsg(sky_sdv=cpl_table_get_column_stdev(sky_lr,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04809"></a><span class="lineno"> 4809</span>     sky_thresh=sky_med+sky_sdv;</div>
+<div class="line"><a name="l04810"></a><span class="lineno"> 4810</span>         <span class="comment">//xxx1 = where(sky_lr > median(sky_lr)+stddev(sky_lr),xxx1_i);</span></div>
+<div class="line"><a name="l04811"></a><span class="lineno"> 4811</span>         check_nomsg(xxx1_i=cpl_table_and_selected_double(sky_lr,<span class="stringliteral">"INT"</span>,</div>
+<div class="line"><a name="l04812"></a><span class="lineno"> 4812</span>                            CPL_GREATER_THAN,sky_thresh));</div>
+<div class="line"><a name="l04813"></a><span class="lineno"> 4813</span>         check_nomsg(xxx1=cpl_table_extract_selected(sky_lr));</div>
+<div class="line"><a name="l04814"></a><span class="lineno"> 4814</span>         check_nomsg(cpl_table_select_all(sky_lr));</div>
+<div class="line"><a name="l04815"></a><span class="lineno"> 4815</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l04816"></a><span class="lineno"> 4816</span>         xxx1_i=0;</div>
+<div class="line"><a name="l04817"></a><span class="lineno"> 4817</span>       }</div>
+<div class="line"><a name="l04818"></a><span class="lineno"> 4818</span>       <span class="keywordflow">if</span> (xxx1_i > 0) {</div>
+<div class="line"><a name="l04819"></a><span class="lineno"> 4819</span>         sinfo_msg(<span class="stringliteral">"xxx1_i=%d"</span>,xxx1_i);</div>
+<div class="line"><a name="l04820"></a><span class="lineno"> 4820</span> </div>
+<div class="line"><a name="l04821"></a><span class="lineno"> 4821</span>         sinfo_msg(<span class="stringliteral">"wav_lr wmin=%g wmax=%g"</span>,</div>
+<div class="line"><a name="l04822"></a><span class="lineno"> 4822</span>           cpl_table_get_column_min(wav_lr,<span class="stringliteral">"WAVE"</span>),</div>
+<div class="line"><a name="l04823"></a><span class="lineno"> 4823</span>           cpl_table_get_column_max(wav_lr,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l04824"></a><span class="lineno"> 4824</span> </div>
+<div class="line"><a name="l04825"></a><span class="lineno"> 4825</span>         cknull_nomsg(llr_xxx1=sinfo_table_select_range(wav_lr,xxx1,wtol));</div>
+<div class="line"><a name="l04826"></a><span class="lineno"> 4826</span>         <span class="comment">//check_nomsg(cpl_table_save(wav_lr,NULL,NULL,</span></div>
+<div class="line"><a name="l04827"></a><span class="lineno"> 4827</span>         <span class="comment">//                             "out_llr_xxx1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04828"></a><span class="lineno"> 4828</span> </div>
+<div class="line"><a name="l04829"></a><span class="lineno"> 4829</span>         cknull(low_pos=sinfo_find_rot_waves(w_rot_low,npixw,wtol,llr_xxx1),</div>
+<div class="line"><a name="l04830"></a><span class="lineno"> 4830</span>            <span class="stringliteral">"Determining low positions"</span>);</div>
+<div class="line"><a name="l04831"></a><span class="lineno"> 4831</span> </div>
+<div class="line"><a name="l04832"></a><span class="lineno"> 4832</span> </div>
+<div class="line"><a name="l04833"></a><span class="lineno"> 4833</span>         check_nomsg(low_pos_i=cpl_table_get_nrow(low_pos));</div>
+<div class="line"><a name="l04834"></a><span class="lineno"> 4834</span>         <span class="comment">//check_nomsg(cpl_table_dump(low_pos,0,low_pos_i,stdout));</span></div>
+<div class="line"><a name="l04835"></a><span class="lineno"> 4835</span>         cknull(med_pos=sinfo_find_rot_waves(w_rot_med,npixw,wtol,llr_xxx1),</div>
+<div class="line"><a name="l04836"></a><span class="lineno"> 4836</span>                <span class="stringliteral">"Determining med positions"</span>);</div>
+<div class="line"><a name="l04837"></a><span class="lineno"> 4837</span>         check_nomsg(med_pos_i=cpl_table_get_nrow(med_pos));</div>
+<div class="line"><a name="l04838"></a><span class="lineno"> 4838</span> </div>
+<div class="line"><a name="l04839"></a><span class="lineno"> 4839</span> </div>
+<div class="line"><a name="l04840"></a><span class="lineno"> 4840</span>         <span class="comment">//check_nomsg(cpl_table_dump(med_pos,0,med_pos_i,stdout));</span></div>
+<div class="line"><a name="l04841"></a><span class="lineno"> 4841</span> </div>
+<div class="line"><a name="l04842"></a><span class="lineno"> 4842</span>         <span class="comment">//TODO:</span></div>
+<div class="line"><a name="l04843"></a><span class="lineno"> 4843</span>         <span class="comment">//hipos = [0]</span></div>
+<div class="line"><a name="l04844"></a><span class="lineno"> 4844</span>         <span class="comment">//for i=0,n_elements(xxx1)-1 do begin</span></div>
+<div class="line"><a name="l04845"></a><span class="lineno"> 4845</span>         <span class="comment">//    x1 = where(lowpos eq i,x1_i)</span></div>
+<div class="line"><a name="l04846"></a><span class="lineno"> 4846</span>         <span class="comment">//    x2 = where(medpos eq i,x2_i)</span></div>
+<div class="line"><a name="l04847"></a><span class="lineno"> 4847</span>         <span class="comment">//    if (x1_i eq 0 and x2_i eq 0) then hipos = [hipos,i]</span></div>
+<div class="line"><a name="l04848"></a><span class="lineno"> 4848</span>         <span class="comment">//endfor</span></div>
+<div class="line"><a name="l04849"></a><span class="lineno"> 4849</span>         <span class="comment">//hipos = hipos[1:n_elements(hipos)-1]</span></div>
+<div class="line"><a name="l04850"></a><span class="lineno"> 4850</span>         <span class="comment">//TODO: hi_pos=sinfo_find_rot_waves(w_rot_hi,npixw,wtol,wav_lr);</span></div>
+<div class="line"><a name="l04851"></a><span class="lineno"> 4851</span> </div>
+<div class="line"><a name="l04852"></a><span class="lineno"> 4852</span> </div>
+<div class="line"><a name="l04853"></a><span class="lineno"> 4853</span>         cknull(hi_pos=sinfo_table_extract_rest(xxx1,low_pos,med_pos,wtol),</div>
+<div class="line"><a name="l04854"></a><span class="lineno"> 4854</span>            <span class="stringliteral">"determining hi position"</span>);</div>
+<div class="line"><a name="l04855"></a><span class="lineno"> 4855</span>         check_nomsg(hi_pos_i=cpl_table_get_nrow(hi_pos));</div>
+<div class="line"><a name="l04856"></a><span class="lineno"> 4856</span>         <span class="comment">//check_nomsg(cpl_table_dump(hi_pos,0,hi_pos_i,stdout));</span></div>
+<div class="line"><a name="l04857"></a><span class="lineno"> 4857</span> </div>
+<div class="line"><a name="l04858"></a><span class="lineno"> 4858</span> </div>
+<div class="line"><a name="l04859"></a><span class="lineno"> 4859</span>         <span class="comment">//xxx2[xxx1] = 10.;</span></div>
+<div class="line"><a name="l04860"></a><span class="lineno"> 4860</span>         check_nomsg(xxx2 = cpl_table_duplicate(sky_lr));</div>
+<div class="line"><a name="l04861"></a><span class="lineno"> 4861</span>         check_nomsg(nrow=cpl_table_get_nrow(sky_lr));</div>
+<div class="line"><a name="l04862"></a><span class="lineno"> 4862</span>         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04863"></a><span class="lineno"> 4863</span>         <span class="comment">//                             "out_xxx1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04864"></a><span class="lineno"> 4864</span>         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04865"></a><span class="lineno"> 4865</span>         <span class="comment">//                             "out_xxx2_0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04866"></a><span class="lineno"> 4866</span> </div>
+<div class="line"><a name="l04867"></a><span class="lineno"> 4867</span>         <span class="comment">// AMO: Why the following?</span></div>
+<div class="line"><a name="l04868"></a><span class="lineno"> 4868</span>         <span class="comment">//check_nomsg(cpl_table_fill_column_window(xxx2,"INT",0,nrow,0));</span></div>
+<div class="line"><a name="l04869"></a><span class="lineno"> 4869</span> </div>
+<div class="line"><a name="l04870"></a><span class="lineno"> 4870</span>         <span class="comment">//xxx2 = convol(xxx2,replicate(1,npixw),/edge_truncate,/center);</span></div>
+<div class="line"><a name="l04871"></a><span class="lineno"> 4871</span>         <span class="comment">//cont_regions = where(xxx2 == 0,cont_i);</span></div>
+<div class="line"><a name="l04872"></a><span class="lineno"> 4872</span>         ck0_nomsg(sinfo_table_threshold(&xxx2,<span class="stringliteral">"INT"</span>,sky_thresh,</div>
+<div class="line"><a name="l04873"></a><span class="lineno"> 4873</span>                     sky_thresh,0.,10.));</div>
+<div class="line"><a name="l04874"></a><span class="lineno"> 4874</span>         sinfo_msg(<span class="stringliteral">"sky_thresh=%g %g %f"</span>,sky_thresh,sky_med,sky_sdv);</div>
+<div class="line"><a name="l04875"></a><span class="lineno"> 4875</span>         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04876"></a><span class="lineno"> 4876</span>         <span class="comment">//                             "out_xxx2_1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04877"></a><span class="lineno"> 4877</span>         check_nomsg(sinfo_convolve_kernel(&xxx2,npixw/2));</div>
+<div class="line"><a name="l04878"></a><span class="lineno"> 4878</span> </div>
+<div class="line"><a name="l04879"></a><span class="lineno"> 4879</span>         <span class="comment">//check_nomsg(cpl_table_save(xxx2,NULL,NULL,</span></div>
+<div class="line"><a name="l04880"></a><span class="lineno"> 4880</span>         <span class="comment">//                             "out_xxx2_2.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04881"></a><span class="lineno"> 4881</span>         check_nomsg(cont_i=cpl_table_and_selected_double(xxx2,<span class="stringliteral">"CNV"</span>,</div>
+<div class="line"><a name="l04882"></a><span class="lineno"> 4882</span>                              CPL_EQUAL_TO,0));</div>
+<div class="line"><a name="l04883"></a><span class="lineno"> 4883</span>         check_nomsg(cont_regions=cpl_table_extract_selected(xxx2));</div>
+<div class="line"><a name="l04884"></a><span class="lineno"> 4884</span> </div>
+<div class="line"><a name="l04885"></a><span class="lineno"> 4885</span>         sinfo_free_table(&xxx2);</div>
+<div class="line"><a name="l04886"></a><span class="lineno"> 4886</span>         check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04887"></a><span class="lineno"> 4887</span>         check_nomsg(cpl_table_erase_column(cont_regions,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l04888"></a><span class="lineno"> 4888</span> </div>
+<div class="line"><a name="l04889"></a><span class="lineno"> 4889</span>         check(low_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,low_pos,wtol,</div>
+<div class="line"><a name="l04890"></a><span class="lineno"> 4890</span>                          npixw,&low_regions),<span class="stringliteral">"failed determining low regions"</span>);</div>
+<div class="line"><a name="l04891"></a><span class="lineno"> 4891</span> </div>
+<div class="line"><a name="l04892"></a><span class="lineno"> 4892</span>         check(med_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,med_pos,wtol,</div>
+<div class="line"><a name="l04893"></a><span class="lineno"> 4893</span>                          npixw,&med_regions),<span class="stringliteral">"failed determining med regions"</span>);</div>
+<div class="line"><a name="l04894"></a><span class="lineno"> 4894</span> </div>
+<div class="line"><a name="l04895"></a><span class="lineno"> 4895</span> </div>
+<div class="line"><a name="l04896"></a><span class="lineno"> 4896</span>         check(hi_pos_i=sinfo_get_sub_regions(sky_lr,xxx1,hi_pos,wtol,</div>
+<div class="line"><a name="l04897"></a><span class="lineno"> 4897</span>                         npixw,&hi_regions),<span class="stringliteral">"failed determining hi regions"</span>);</div>
+<div class="line"><a name="l04898"></a><span class="lineno"> 4898</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l04899"></a><span class="lineno"> 4899</span> <span class="comment">        sinfo_msg("xxx1: wmin=%g wmax=%g",</span></div>
+<div class="line"><a name="l04900"></a><span class="lineno"> 4900</span> <span class="comment">                   cpl_table_get_column_min(xxx1,"WAVE"),</span></div>
+<div class="line"><a name="l04901"></a><span class="lineno"> 4901</span> <span class="comment">                   cpl_table_get_column_max(xxx1,"WAVE"));</span></div>
+<div class="line"><a name="l04902"></a><span class="lineno"> 4902</span> <span class="comment"></span></div>
+<div class="line"><a name="l04903"></a><span class="lineno"> 4903</span> <span class="comment">        sinfo_msg("low_pos: wmin=%g wmax=%g",</span></div>
+<div class="line"><a name="l04904"></a><span class="lineno"> 4904</span> <span class="comment">                   cpl_table_get_column_min(low_pos,"WAVE"),</span></div>
+<div class="line"><a name="l04905"></a><span class="lineno"> 4905</span> <span class="comment">                   cpl_table_get_column_max(low_pos,"WAVE"));</span></div>
+<div class="line"><a name="l04906"></a><span class="lineno"> 4906</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l04907"></a><span class="lineno"> 4907</span>         sinfo_msg(<span class="stringliteral">"hi_pos_i : %d med_pos_i : %d low_pos_i : %d cont_i: %d"</span>,</div>
+<div class="line"><a name="l04908"></a><span class="lineno"> 4908</span>                    hi_pos_i,     med_pos_i,     low_pos_i,     cont_i);</div>
+<div class="line"><a name="l04909"></a><span class="lineno"> 4909</span> </div>
+<div class="line"><a name="l04910"></a><span class="lineno"> 4910</span> </div>
+<div class="line"><a name="l04911"></a><span class="lineno"> 4911</span>         <span class="keywordflow">if</span> (hi_pos_i >= 3 && med_pos_i >= 3 && low_pos_i >= 3 && cont_i >= 3) {</div>
+<div class="line"><a name="l04912"></a><span class="lineno"> 4912</span> </div>
+<div class="line"><a name="l04913"></a><span class="lineno"> 4913</span>           <span class="comment">//compute line ratio for hi_regions</span></div>
+<div class="line"><a name="l04914"></a><span class="lineno"> 4914</span>           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,</div>
+<div class="line"><a name="l04915"></a><span class="lineno"> 4915</span>                                              hi_regions,cont_regions,&rhi));</div>
+<div class="line"><a name="l04916"></a><span class="lineno"> 4916</span>           sinfo_msg(<span class="stringliteral">"high rotational OH scaling %g"</span>,rhi);</div>
+<div class="line"><a name="l04917"></a><span class="lineno"> 4917</span> </div>
+<div class="line"><a name="l04918"></a><span class="lineno"> 4918</span>           <span class="comment">//compute line ratio for med_regions</span></div>
+<div class="line"><a name="l04919"></a><span class="lineno"> 4919</span>           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,</div>
+<div class="line"><a name="l04920"></a><span class="lineno"> 4920</span>                                              med_regions,cont_regions,&rmed));</div>
+<div class="line"><a name="l04921"></a><span class="lineno"> 4921</span> </div>
+<div class="line"><a name="l04922"></a><span class="lineno"> 4922</span>           sinfo_msg(<span class="stringliteral">"P1(3.5) & R1(1.5) rotational OH scaling %g "</span>,rmed);</div>
+<div class="line"><a name="l04923"></a><span class="lineno"> 4923</span> </div>
+<div class="line"><a name="l04924"></a><span class="lineno"> 4924</span>           <span class="comment">//compute line ratio for med_regions</span></div>
+<div class="line"><a name="l04925"></a><span class="lineno"> 4925</span>           ck0_nomsg(sinfo_compute_line_ratio(obj_lr, sky_lr,wtol, method,</div>
+<div class="line"><a name="l04926"></a><span class="lineno"> 4926</span>                                              low_regions,cont_regions,&rlow));</div>
+<div class="line"><a name="l04927"></a><span class="lineno"> 4927</span>           sinfo_msg(<span class="stringliteral">"P1(2.5) & Q1(1.5) rotational OH scaling %g"</span>,rlow);</div>
+<div class="line"><a name="l04928"></a><span class="lineno"> 4928</span> </div>
+<div class="line"><a name="l04929"></a><span class="lineno"> 4929</span>           cknull(low_scale=sinfo_find_rot_waves(w_rot_low,npixw,wtol,lambda),</div>
+<div class="line"><a name="l04930"></a><span class="lineno"> 4930</span>          <span class="stringliteral">"Determining low scale"</span>);</div>
+<div class="line"><a name="l04931"></a><span class="lineno"> 4931</span> </div>
+<div class="line"><a name="l04932"></a><span class="lineno"> 4932</span> </div>
+<div class="line"><a name="l04933"></a><span class="lineno"> 4933</span> </div>
+<div class="line"><a name="l04934"></a><span class="lineno"> 4934</span>           cknull(med_scale=sinfo_find_rot_waves(w_rot_low,npixw,wtol,lambda),</div>
+<div class="line"><a name="l04935"></a><span class="lineno"> 4935</span>          <span class="stringliteral">"Determining low scale"</span>);</div>
+<div class="line"><a name="l04936"></a><span class="lineno"> 4936</span>           check_nomsg(cpl_table_multiply_scalar(*rscale,<span class="stringliteral">"RATIO"</span>,rhi));</div>
+<div class="line"><a name="l04937"></a><span class="lineno"> 4937</span>           ck0_nomsg(sinfo_table_fill_column_over_range(rscale,med_scale,</div>
+<div class="line"><a name="l04938"></a><span class="lineno"> 4938</span>                                                   <span class="stringliteral">"RATIO"</span>,rmed/rhi,wtol));</div>
+<div class="line"><a name="l04939"></a><span class="lineno"> 4939</span>           ck0_nomsg(sinfo_table_fill_column_over_range(rscale,low_scale,</div>
+<div class="line"><a name="l04940"></a><span class="lineno"> 4940</span>                                  <span class="stringliteral">"RATIO"</span>,rlow/rhi,wtol));</div>
+<div class="line"><a name="l04941"></a><span class="lineno"> 4941</span> </div>
+<div class="line"><a name="l04942"></a><span class="lineno"> 4942</span>     }</div>
+<div class="line"><a name="l04943"></a><span class="lineno"> 4943</span>       } <span class="comment">//xxx1_i > 0</span></div>
+<div class="line"><a name="l04944"></a><span class="lineno"> 4944</span>     }<span class="comment">//finitepix > npixw</span></div>
+<div class="line"><a name="l04945"></a><span class="lineno"> 4945</span>   }<span class="comment">//do_rot==1</span></div>
+<div class="line"><a name="l04946"></a><span class="lineno"> 4946</span>   <span class="comment">//end of new rotational bit</span></div>
+<div class="line"><a name="l04947"></a><span class="lineno"> 4947</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span></div>
+<div class="line"><a name="l04948"></a><span class="lineno"> 4948</span>   <span class="comment">//                             "out_obj.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04949"></a><span class="lineno"> 4949</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l04950"></a><span class="lineno"> 4950</span>   <span class="comment">//                             "out_sky.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04951"></a><span class="lineno"> 4951</span> </div>
+<div class="line"><a name="l04952"></a><span class="lineno"> 4952</span> </div>
+<div class="line"><a name="l04953"></a><span class="lineno"> 4953</span>   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"INTC"</span>,*int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04954"></a><span class="lineno"> 4954</span>   <span class="comment">//sinfo_msg("n sky=%d",cpl_table_get_nrow(*int_sky));</span></div>
+<div class="line"><a name="l04955"></a><span class="lineno"> 4955</span>   <span class="comment">//sinfo_msg("n scale=%d",cpl_table_get_nrow(*rscale));</span></div>
+<div class="line"><a name="l04956"></a><span class="lineno"> 4956</span> </div>
+<div class="line"><a name="l04957"></a><span class="lineno"> 4957</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"COR_FCT_ALL"</span>,</div>
+<div class="line"><a name="l04958"></a><span class="lineno"> 4958</span>                                          *rscale,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04959"></a><span class="lineno"> 4959</span>   check_nomsg(cpl_table_duplicate_column(*int_sky,<span class="stringliteral">"RATIO"</span>,*rscale,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04960"></a><span class="lineno"> 4960</span>   check_nomsg(cpl_table_multiply_columns(*int_sky,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l04961"></a><span class="lineno"> 4961</span> </div>
+<div class="line"><a name="l04962"></a><span class="lineno"> 4962</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"INTC"</span>,*int_obj,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04963"></a><span class="lineno"> 4963</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span></div>
+<div class="line"><a name="l04964"></a><span class="lineno"> 4964</span>   <span class="comment">//                             "out_obj1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04965"></a><span class="lineno"> 4965</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l04966"></a><span class="lineno"> 4966</span>   <span class="comment">//                             "out_sky1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l04967"></a><span class="lineno"> 4967</span> </div>
+<div class="line"><a name="l04968"></a><span class="lineno"> 4968</span>   check_nomsg(cpl_table_duplicate_column(*int_obj,<span class="stringliteral">"SKYC"</span>,*int_sky,<span class="stringliteral">"INTC"</span>));</div>
+<div class="line"><a name="l04969"></a><span class="lineno"> 4969</span>   check_nomsg(cpl_table_subtract_columns(*int_obj,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"SKYC"</span>));</div>
+<div class="line"><a name="l04970"></a><span class="lineno"> 4970</span> </div>
+<div class="line"><a name="l04971"></a><span class="lineno"> 4971</span> </div>
+<div class="line"><a name="l04972"></a><span class="lineno"> 4972</span>   check_nomsg(cpl_table_erase_column(*int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04973"></a><span class="lineno"> 4973</span>   check_nomsg(cpl_table_name_column(*int_sky,<span class="stringliteral">"INTC"</span>,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l04974"></a><span class="lineno"> 4974</span> </div>
+<div class="line"><a name="l04975"></a><span class="lineno"> 4975</span> </div>
+<div class="line"><a name="l04976"></a><span class="lineno"> 4976</span> </div>
+<div class="line"><a name="l04977"></a><span class="lineno"> 4977</span>  cleanup:</div>
+<div class="line"><a name="l04978"></a><span class="lineno"> 4978</span>   sinfo_free_table(&llr_xxx1);</div>
+<div class="line"><a name="l04979"></a><span class="lineno"> 4979</span>   sinfo_free_table(&hi_pos);</div>
+<div class="line"><a name="l04980"></a><span class="lineno"> 4980</span>   sinfo_free_table(&low_pos);</div>
+<div class="line"><a name="l04981"></a><span class="lineno"> 4981</span>   sinfo_free_table(&med_pos);</div>
+<div class="line"><a name="l04982"></a><span class="lineno"> 4982</span>   sinfo_free_table(&low_regions);</div>
+<div class="line"><a name="l04983"></a><span class="lineno"> 4983</span>   sinfo_free_table(&med_regions);</div>
+<div class="line"><a name="l04984"></a><span class="lineno"> 4984</span>   sinfo_free_table(&hi_regions);</div>
+<div class="line"><a name="l04985"></a><span class="lineno"> 4985</span>   sinfo_free_table(&low_scale);</div>
+<div class="line"><a name="l04986"></a><span class="lineno"> 4986</span>   sinfo_free_table(&med_scale);</div>
+<div class="line"><a name="l04987"></a><span class="lineno"> 4987</span> </div>
+<div class="line"><a name="l04988"></a><span class="lineno"> 4988</span> </div>
+<div class="line"><a name="l04989"></a><span class="lineno"> 4989</span>   sinfo_free_table(&finite_pix);</div>
+<div class="line"><a name="l04990"></a><span class="lineno"> 4990</span>   sinfo_free_table(&xxx1_sub);</div>
+<div class="line"><a name="l04991"></a><span class="lineno"> 4991</span>   sinfo_free_table(&tmp_tbl);</div>
+<div class="line"><a name="l04992"></a><span class="lineno"> 4992</span>   sinfo_free_table(&rat_sky);</div>
+<div class="line"><a name="l04993"></a><span class="lineno"> 4993</span>   sinfo_free_table(&fline_res);</div>
+<div class="line"><a name="l04994"></a><span class="lineno"> 4994</span>   sinfo_free_table(&sky_cont);</div>
+<div class="line"><a name="l04995"></a><span class="lineno"> 4995</span>   sinfo_free_table(&obj_cont);</div>
+<div class="line"><a name="l04996"></a><span class="lineno"> 4996</span>   sinfo_free_table(&obj_line);</div>
+<div class="line"><a name="l04997"></a><span class="lineno"> 4997</span>   sinfo_free_table(&sky_line);</div>
+<div class="line"><a name="l04998"></a><span class="lineno"> 4998</span>   sinfo_free_table(&rscale0);</div>
+<div class="line"><a name="l04999"></a><span class="lineno"> 4999</span>   sinfo_free_table(&xxx1);</div>
+<div class="line"><a name="l05000"></a><span class="lineno"> 5000</span>   sinfo_free_table(&xxx2);</div>
+<div class="line"><a name="l05001"></a><span class="lineno"> 5001</span>   sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l05002"></a><span class="lineno"> 5002</span>   sinfo_free_table(&cont_regions);</div>
+<div class="line"><a name="l05003"></a><span class="lineno"> 5003</span>   sinfo_free_table(&sky_lr);</div>
+<div class="line"><a name="l05004"></a><span class="lineno"> 5004</span>   sinfo_free_table(&obj_lr);</div>
+<div class="line"><a name="l05005"></a><span class="lineno"> 5005</span>   sinfo_free_table(&wav_lr);</div>
+<div class="line"><a name="l05006"></a><span class="lineno"> 5006</span>   sinfo_free_array(&rfit);</div>
+<div class="line"><a name="l05007"></a><span class="lineno"> 5007</span>   sinfo_free_array(&do_hk);</div>
+<div class="line"><a name="l05008"></a><span class="lineno"> 5008</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05009"></a><span class="lineno"> 5009</span> </div>
+<div class="line"><a name="l05010"></a><span class="lineno"> 5010</span> }</div>
+<div class="line"><a name="l05019"></a><span class="lineno"> 5019</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05020"></a><span class="lineno"> 5020</span> sinfo_table_get_index_of_max(cpl_table* t,<span class="keyword">const</span> <span class="keywordtype">char</span>* name,cpl_type type)</div>
+<div class="line"><a name="l05021"></a><span class="lineno"> 5021</span> {</div>
+<div class="line"><a name="l05022"></a><span class="lineno"> 5022</span> </div>
+<div class="line"><a name="l05023"></a><span class="lineno"> 5023</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05024"></a><span class="lineno"> 5024</span>   <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l05025"></a><span class="lineno"> 5025</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l05026"></a><span class="lineno"> 5026</span>   <span class="keywordtype">int</span>* pi=NULL;</div>
+<div class="line"><a name="l05027"></a><span class="lineno"> 5027</span>   <span class="keywordtype">float</span>* pf=NULL;</div>
+<div class="line"><a name="l05028"></a><span class="lineno"> 5028</span>   <span class="keywordtype">double</span>* pd=NULL;</div>
+<div class="line"><a name="l05029"></a><span class="lineno"> 5029</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l05030"></a><span class="lineno"> 5030</span> </div>
+<div class="line"><a name="l05031"></a><span class="lineno"> 5031</span> </div>
+<div class="line"><a name="l05032"></a><span class="lineno"> 5032</span>   <span class="keywordflow">if</span>(t == NULL) {</div>
+<div class="line"><a name="l05033"></a><span class="lineno"> 5033</span>    cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l05034"></a><span class="lineno"> 5034</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05035"></a><span class="lineno"> 5035</span>   }</div>
+<div class="line"><a name="l05036"></a><span class="lineno"> 5036</span>   max=cpl_table_get_column_max(t,name);</div>
+<div class="line"><a name="l05037"></a><span class="lineno"> 5037</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l05038"></a><span class="lineno"> 5038</span>   <span class="keywordflow">switch</span>(type) {</div>
+<div class="line"><a name="l05039"></a><span class="lineno"> 5039</span> </div>
+<div class="line"><a name="l05040"></a><span class="lineno"> 5040</span>   <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l05041"></a><span class="lineno"> 5041</span>     pi=cpl_table_get_data_int(t,name);</div>
+<div class="line"><a name="l05042"></a><span class="lineno"> 5042</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05043"></a><span class="lineno"> 5043</span>       <span class="keywordflow">if</span>(pi[i]==(<span class="keywordtype">int</span>)max) result=i;</div>
+<div class="line"><a name="l05044"></a><span class="lineno"> 5044</span>     }</div>
+<div class="line"><a name="l05045"></a><span class="lineno"> 5045</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05046"></a><span class="lineno"> 5046</span>   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l05047"></a><span class="lineno"> 5047</span>     pf=cpl_table_get_data_float(t,name);</div>
+<div class="line"><a name="l05048"></a><span class="lineno"> 5048</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05049"></a><span class="lineno"> 5049</span>       <span class="keywordflow">if</span>(pf[i]==(<span class="keywordtype">float</span>)max) result=i;</div>
+<div class="line"><a name="l05050"></a><span class="lineno"> 5050</span>     }</div>
+<div class="line"><a name="l05051"></a><span class="lineno"> 5051</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05052"></a><span class="lineno"> 5052</span>   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:</div>
+<div class="line"><a name="l05053"></a><span class="lineno"> 5053</span>     pd=cpl_table_get_data_double(t,name);</div>
+<div class="line"><a name="l05054"></a><span class="lineno"> 5054</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05055"></a><span class="lineno"> 5055</span>       <span class="keywordflow">if</span>(pd[i]==max) result=i;</div>
+<div class="line"><a name="l05056"></a><span class="lineno"> 5056</span>     }</div>
+<div class="line"><a name="l05057"></a><span class="lineno"> 5057</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05058"></a><span class="lineno"> 5058</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05059"></a><span class="lineno"> 5059</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);</div>
+<div class="line"><a name="l05060"></a><span class="lineno"> 5060</span>    cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);</div>
+<div class="line"><a name="l05061"></a><span class="lineno"> 5061</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05062"></a><span class="lineno"> 5062</span> </div>
+<div class="line"><a name="l05063"></a><span class="lineno"> 5063</span>   }</div>
+<div class="line"><a name="l05064"></a><span class="lineno"> 5064</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05065"></a><span class="lineno"> 5065</span> }</div>
+<div class="line"><a name="l05066"></a><span class="lineno"> 5066</span> </div>
+<div class="line"><a name="l05067"></a><span class="lineno"> 5067</span> </div>
+<div class="line"><a name="l05068"></a><span class="lineno"> 5068</span> </div>
+<div class="line"><a name="l05078"></a><span class="lineno"> 5078</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05079"></a><span class="lineno"> 5079</span> sinfo_table_get_index_of_val(cpl_table* t,</div>
+<div class="line"><a name="l05080"></a><span class="lineno"> 5080</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l05081"></a><span class="lineno"> 5081</span>                              <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l05082"></a><span class="lineno"> 5082</span>                              cpl_type type)</div>
+<div class="line"><a name="l05083"></a><span class="lineno"> 5083</span> {</div>
+<div class="line"><a name="l05084"></a><span class="lineno"> 5084</span> </div>
+<div class="line"><a name="l05085"></a><span class="lineno"> 5085</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05086"></a><span class="lineno"> 5086</span>   <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l05087"></a><span class="lineno"> 5087</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l05088"></a><span class="lineno"> 5088</span>   <span class="keywordtype">int</span>* pi=NULL;</div>
+<div class="line"><a name="l05089"></a><span class="lineno"> 5089</span>   <span class="keywordtype">float</span>* pf=NULL;</div>
+<div class="line"><a name="l05090"></a><span class="lineno"> 5090</span>   <span class="keywordtype">double</span>* pd=NULL;</div>
+<div class="line"><a name="l05091"></a><span class="lineno"> 5091</span> </div>
+<div class="line"><a name="l05092"></a><span class="lineno"> 5092</span>   <span class="keywordflow">if</span>(t == NULL) {</div>
+<div class="line"><a name="l05093"></a><span class="lineno"> 5093</span>    cpl_error_set(cpl_func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l05094"></a><span class="lineno"> 5094</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05095"></a><span class="lineno"> 5095</span>   }</div>
+<div class="line"><a name="l05096"></a><span class="lineno"> 5096</span> </div>
+<div class="line"><a name="l05097"></a><span class="lineno"> 5097</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l05098"></a><span class="lineno"> 5098</span>   <span class="keywordflow">switch</span>(type) {</div>
+<div class="line"><a name="l05099"></a><span class="lineno"> 5099</span> </div>
+<div class="line"><a name="l05100"></a><span class="lineno"> 5100</span>   <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l05101"></a><span class="lineno"> 5101</span>     pi=cpl_table_get_data_int(t,name);</div>
+<div class="line"><a name="l05102"></a><span class="lineno"> 5102</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05103"></a><span class="lineno"> 5103</span>       <span class="keywordflow">if</span>(pi[i]==(<span class="keywordtype">int</span>)val) result=i;</div>
+<div class="line"><a name="l05104"></a><span class="lineno"> 5104</span>     }</div>
+<div class="line"><a name="l05105"></a><span class="lineno"> 5105</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05106"></a><span class="lineno"> 5106</span>   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l05107"></a><span class="lineno"> 5107</span>     pf=cpl_table_get_data_float(t,name);</div>
+<div class="line"><a name="l05108"></a><span class="lineno"> 5108</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05109"></a><span class="lineno"> 5109</span>       <span class="keywordflow">if</span>(pf[i]==(<span class="keywordtype">float</span>)val) result=i;</div>
+<div class="line"><a name="l05110"></a><span class="lineno"> 5110</span>     }</div>
+<div class="line"><a name="l05111"></a><span class="lineno"> 5111</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05112"></a><span class="lineno"> 5112</span>   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:</div>
+<div class="line"><a name="l05113"></a><span class="lineno"> 5113</span>     pd=cpl_table_get_data_double(t,name);</div>
+<div class="line"><a name="l05114"></a><span class="lineno"> 5114</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l05115"></a><span class="lineno"> 5115</span>       <span class="keywordflow">if</span>(pd[i]==val) result=i;</div>
+<div class="line"><a name="l05116"></a><span class="lineno"> 5116</span>     }</div>
+<div class="line"><a name="l05117"></a><span class="lineno"> 5117</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l05118"></a><span class="lineno"> 5118</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l05119"></a><span class="lineno"> 5119</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);</div>
+<div class="line"><a name="l05120"></a><span class="lineno"> 5120</span>    cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);</div>
+<div class="line"><a name="l05121"></a><span class="lineno"> 5121</span>    <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05122"></a><span class="lineno"> 5122</span> </div>
+<div class="line"><a name="l05123"></a><span class="lineno"> 5123</span>   }</div>
+<div class="line"><a name="l05124"></a><span class="lineno"> 5124</span>   <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l05125"></a><span class="lineno"> 5125</span> }</div>
+<div class="line"><a name="l05126"></a><span class="lineno"> 5126</span> </div>
+<div class="line"><a name="l05139"></a><span class="lineno"> 5139</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l05140"></a><span class="lineno"> 5140</span> sinfo_table_column_interpolate(<span class="keyword">const</span> cpl_table* t,</div>
+<div class="line"><a name="l05141"></a><span class="lineno"> 5141</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l05142"></a><span class="lineno"> 5142</span>                                <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l05143"></a><span class="lineno"> 5143</span> {</div>
+<div class="line"><a name="l05144"></a><span class="lineno"> 5144</span> </div>
+<div class="line"><a name="l05145"></a><span class="lineno"> 5145</span>   <span class="keywordtype">double</span> val1=0;</div>
+<div class="line"><a name="l05146"></a><span class="lineno"> 5146</span>   <span class="keywordtype">double</span> val2=0;</div>
+<div class="line"><a name="l05147"></a><span class="lineno"> 5147</span>   <span class="keywordtype">int</span> x1=0;</div>
+<div class="line"><a name="l05148"></a><span class="lineno"> 5148</span>   <span class="keywordtype">int</span> x2=0;</div>
+<div class="line"><a name="l05149"></a><span class="lineno"> 5149</span>   <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l05150"></a><span class="lineno"> 5150</span>   <span class="keywordtype">double</span> y=0;</div>
+<div class="line"><a name="l05151"></a><span class="lineno"> 5151</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l05152"></a><span class="lineno"> 5152</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l05153"></a><span class="lineno"> 5153</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l05154"></a><span class="lineno"> 5154</span>   <span class="keywordflow">if</span> ((1<x) && (x<nrow-1)) {</div>
+<div class="line"><a name="l05155"></a><span class="lineno"> 5155</span>     x1=x-1;</div>
+<div class="line"><a name="l05156"></a><span class="lineno"> 5156</span>     x2=x+1;</div>
+<div class="line"><a name="l05157"></a><span class="lineno"> 5157</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (x<2) {</div>
+<div class="line"><a name="l05158"></a><span class="lineno"> 5158</span>     x1=0;</div>
+<div class="line"><a name="l05159"></a><span class="lineno"> 5159</span>     x2=1;</div>
+<div class="line"><a name="l05160"></a><span class="lineno"> 5160</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05161"></a><span class="lineno"> 5161</span>     x1=nrow-2;</div>
+<div class="line"><a name="l05162"></a><span class="lineno"> 5162</span>     x2=nrow-1;</div>
+<div class="line"><a name="l05163"></a><span class="lineno"> 5163</span>   }</div>
+<div class="line"><a name="l05164"></a><span class="lineno"> 5164</span>   check_nomsg(val1=cpl_table_get(t,name,x1,&status));</div>
+<div class="line"><a name="l05165"></a><span class="lineno"> 5165</span>   check_nomsg(val2=cpl_table_get(t,name,x2,&status));</div>
+<div class="line"><a name="l05166"></a><span class="lineno"> 5166</span> </div>
+<div class="line"><a name="l05167"></a><span class="lineno"> 5167</span>   m=(val2-val1)/(x2-x1);</div>
+<div class="line"><a name="l05168"></a><span class="lineno"> 5168</span>   y=val1+m*(x-x1);</div>
+<div class="line"><a name="l05169"></a><span class="lineno"> 5169</span> </div>
+<div class="line"><a name="l05170"></a><span class="lineno"> 5170</span>   <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l05171"></a><span class="lineno"> 5171</span> </div>
+<div class="line"><a name="l05172"></a><span class="lineno"> 5172</span>  cleanup:</div>
+<div class="line"><a name="l05173"></a><span class="lineno"> 5173</span> </div>
+<div class="line"><a name="l05174"></a><span class="lineno"> 5174</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05175"></a><span class="lineno"> 5175</span> </div>
+<div class="line"><a name="l05176"></a><span class="lineno"> 5176</span> </div>
+<div class="line"><a name="l05177"></a><span class="lineno"> 5177</span> }</div>
+<div class="line"><a name="l05178"></a><span class="lineno"> 5178</span> </div>
+<div class="line"><a name="l05187"></a><span class="lineno"> 5187</span> <span class="keyword">static</span> cpl_imagelist*</div>
+<div class="line"><a name="l05188"></a><span class="lineno"> 5188</span> sinfo_imagelist_select_range(<span class="keyword">const</span> cpl_imagelist* inp,</div>
+<div class="line"><a name="l05189"></a><span class="lineno"> 5189</span>                                   <span class="keyword">const</span> cpl_table* full,</div>
+<div class="line"><a name="l05190"></a><span class="lineno"> 5190</span>                                   <span class="keyword">const</span> cpl_table* good,</div>
+<div class="line"><a name="l05191"></a><span class="lineno"> 5191</span>                                   <span class="keyword">const</span> <span class="keywordtype">double</span> tol)</div>
+<div class="line"><a name="l05192"></a><span class="lineno"> 5192</span> {</div>
+<div class="line"><a name="l05193"></a><span class="lineno"> 5193</span>   cpl_imagelist* out=NULL;</div>
+<div class="line"><a name="l05194"></a><span class="lineno"> 5194</span>   <span class="keywordtype">int</span> osz=0;</div>
+<div class="line"><a name="l05195"></a><span class="lineno"> 5195</span>   <span class="keywordtype">int</span> isz=0;</div>
+<div class="line"><a name="l05196"></a><span class="lineno"> 5196</span>   <span class="keywordtype">int</span> ksz=0;</div>
+<div class="line"><a name="l05197"></a><span class="lineno"> 5197</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l05198"></a><span class="lineno"> 5198</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05199"></a><span class="lineno"> 5199</span>   <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l05200"></a><span class="lineno"> 5200</span> </div>
+<div class="line"><a name="l05201"></a><span class="lineno"> 5201</span>   <span class="keywordtype">double</span> wave_chk=0;</div>
+<div class="line"><a name="l05202"></a><span class="lineno"> 5202</span>   <span class="keywordtype">double</span> wave_sel=0;</div>
+<div class="line"><a name="l05203"></a><span class="lineno"> 5203</span> </div>
+<div class="line"><a name="l05204"></a><span class="lineno"> 5204</span>   <span class="keyword">const</span> cpl_image* img=NULL;</div>
+<div class="line"><a name="l05205"></a><span class="lineno"> 5205</span> </div>
+<div class="line"><a name="l05206"></a><span class="lineno"> 5206</span> </div>
+<div class="line"><a name="l05207"></a><span class="lineno"> 5207</span>   <span class="comment">/* Get Object relevant information */</span></div>
+<div class="line"><a name="l05208"></a><span class="lineno"> 5208</span>   <span class="comment">/* here one should scan the inp image constructing a wave range from it</span></div>
+<div class="line"><a name="l05209"></a><span class="lineno"> 5209</span> <span class="comment">     and not from another table */</span></div>
+<div class="line"><a name="l05210"></a><span class="lineno"> 5210</span>   check_nomsg(osz=cpl_table_get_nrow(good));</div>
+<div class="line"><a name="l05211"></a><span class="lineno"> 5211</span>   check_nomsg(ksz=cpl_imagelist_get_size(inp));</div>
+<div class="line"><a name="l05212"></a><span class="lineno"> 5212</span>   check_nomsg(isz=cpl_table_get_nrow(good));</div>
+<div class="line"><a name="l05213"></a><span class="lineno"> 5213</span>   check_nomsg(out=cpl_imagelist_new());</div>
+<div class="line"><a name="l05214"></a><span class="lineno"> 5214</span> </div>
+<div class="line"><a name="l05215"></a><span class="lineno"> 5215</span> </div>
+<div class="line"><a name="l05216"></a><span class="lineno"> 5216</span>   <span class="keywordflow">for</span>(k=0;k<ksz;k++) {</div>
+<div class="line"><a name="l05217"></a><span class="lineno"> 5217</span>     check_nomsg(img=cpl_imagelist_get_const(inp,k));</div>
+<div class="line"><a name="l05218"></a><span class="lineno"> 5218</span>     check_nomsg(wave_chk=cpl_table_get(full,<span class="stringliteral">"WAVE"</span>,k,&status));</div>
+<div class="line"><a name="l05219"></a><span class="lineno"> 5219</span>     <span class="keywordflow">if</span>(i<isz) {</div>
+<div class="line"><a name="l05220"></a><span class="lineno"> 5220</span>       check_nomsg(wave_sel=cpl_table_get(good,<span class="stringliteral">"WAVE"</span>,i,&status));</div>
+<div class="line"><a name="l05221"></a><span class="lineno"> 5221</span>     }</div>
+<div class="line"><a name="l05222"></a><span class="lineno"> 5222</span>     <span class="comment">// insert cubes with wavelengths with appropriate values only</span></div>
+<div class="line"><a name="l05223"></a><span class="lineno"> 5223</span>     <span class="keywordflow">if</span>(fabs(wave_chk - wave_sel) < tol) {</div>
+<div class="line"><a name="l05224"></a><span class="lineno"> 5224</span>       check_nomsg(cpl_imagelist_set(out,cpl_image_duplicate(img),i));</div>
+<div class="line"><a name="l05225"></a><span class="lineno"> 5225</span>       i++;</div>
+<div class="line"><a name="l05226"></a><span class="lineno"> 5226</span>     }</div>
+<div class="line"><a name="l05227"></a><span class="lineno"> 5227</span>   }</div>
+<div class="line"><a name="l05228"></a><span class="lineno"> 5228</span>   <span class="keywordflow">if</span>(i==0) {</div>
+<div class="line"><a name="l05229"></a><span class="lineno"> 5229</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No lines selected"</span>);</div>
+<div class="line"><a name="l05230"></a><span class="lineno"> 5230</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l05231"></a><span class="lineno"> 5231</span>   }</div>
+<div class="line"><a name="l05232"></a><span class="lineno"> 5232</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l05233"></a><span class="lineno"> 5233</span> </div>
+<div class="line"><a name="l05234"></a><span class="lineno"> 5234</span>  cleanup:</div>
+<div class="line"><a name="l05235"></a><span class="lineno"> 5235</span> </div>
+<div class="line"><a name="l05236"></a><span class="lineno"> 5236</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l05237"></a><span class="lineno"> 5237</span> </div>
+<div class="line"><a name="l05238"></a><span class="lineno"> 5238</span> }</div>
+<div class="line"><a name="l05239"></a><span class="lineno"> 5239</span> </div>
+<div class="line"><a name="l05249"></a><span class="lineno"> 5249</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05250"></a><span class="lineno"> 5250</span> sinfo_table_extract_finite(<span class="keyword">const</span> cpl_table* in1,</div>
+<div class="line"><a name="l05251"></a><span class="lineno"> 5251</span>                            <span class="keyword">const</span> cpl_table* in2,</div>
+<div class="line"><a name="l05252"></a><span class="lineno"> 5252</span>                                  cpl_table** ou1,</div>
+<div class="line"><a name="l05253"></a><span class="lineno"> 5253</span>                                  cpl_table** ou2)</div>
+<div class="line"><a name="l05254"></a><span class="lineno"> 5254</span> {</div>
+<div class="line"><a name="l05255"></a><span class="lineno"> 5255</span> </div>
+<div class="line"><a name="l05256"></a><span class="lineno"> 5256</span>   <span class="keywordtype">int</span> size1=0;</div>
+<div class="line"><a name="l05257"></a><span class="lineno"> 5257</span>   <span class="keywordtype">int</span> size2=0;</div>
+<div class="line"><a name="l05258"></a><span class="lineno"> 5258</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05259"></a><span class="lineno"> 5259</span>   <span class="keywordtype">int</span> ninv1=0;</div>
+<div class="line"><a name="l05260"></a><span class="lineno"> 5260</span>   <span class="keywordtype">int</span> ninv2=0;</div>
+<div class="line"><a name="l05261"></a><span class="lineno"> 5261</span>   <span class="keywordtype">double</span>* pout1=NULL;</div>
+<div class="line"><a name="l05262"></a><span class="lineno"> 5262</span>   <span class="keywordtype">double</span>* pout2=NULL;</div>
+<div class="line"><a name="l05263"></a><span class="lineno"> 5263</span> </div>
+<div class="line"><a name="l05264"></a><span class="lineno"> 5264</span>   cknull(in1,<span class="stringliteral">"null input image"</span>);</div>
+<div class="line"><a name="l05265"></a><span class="lineno"> 5265</span>   cknull(in2,<span class="stringliteral">"null input image"</span>);</div>
+<div class="line"><a name="l05266"></a><span class="lineno"> 5266</span>   cknull_nomsg(*ou1=cpl_table_duplicate(in1));</div>
+<div class="line"><a name="l05267"></a><span class="lineno"> 5267</span>   cknull_nomsg(*ou2=cpl_table_duplicate(in2));</div>
+<div class="line"><a name="l05268"></a><span class="lineno"> 5268</span> </div>
+<div class="line"><a name="l05269"></a><span class="lineno"> 5269</span>   check_nomsg(size1=cpl_table_get_nrow(*ou1));</div>
+<div class="line"><a name="l05270"></a><span class="lineno"> 5270</span>   check_nomsg(size2=cpl_table_get_nrow(*ou2));</div>
+<div class="line"><a name="l05271"></a><span class="lineno"> 5271</span> </div>
+<div class="line"><a name="l05272"></a><span class="lineno"> 5272</span>   check_nomsg(pout1=cpl_table_get_data_double(*ou1,<span class="stringliteral">"VALUE"</span>));</div>
+<div class="line"><a name="l05273"></a><span class="lineno"> 5273</span>   check_nomsg(pout2=cpl_table_get_data_double(*ou2,<span class="stringliteral">"VALUE"</span>));</div>
+<div class="line"><a name="l05274"></a><span class="lineno"> 5274</span>   <span class="keywordflow">for</span>(i=0;i<size1;i++) {</div>
+<div class="line"><a name="l05275"></a><span class="lineno"> 5275</span>     <span class="keywordflow">if</span> (irplib_isnan(pout1[i])) {</div>
+<div class="line"><a name="l05276"></a><span class="lineno"> 5276</span>       check_nomsg(cpl_table_set_invalid(*ou1,<span class="stringliteral">"VALUE"</span>,i));</div>
+<div class="line"><a name="l05277"></a><span class="lineno"> 5277</span>       check_nomsg(cpl_table_set_invalid(*ou2,<span class="stringliteral">"VALUE"</span>,i));</div>
+<div class="line"><a name="l05278"></a><span class="lineno"> 5278</span>     }</div>
+<div class="line"><a name="l05279"></a><span class="lineno"> 5279</span>   }</div>
+<div class="line"><a name="l05280"></a><span class="lineno"> 5280</span>   ninv1=cpl_table_count_invalid(*ou1,<span class="stringliteral">"VALUE"</span>);</div>
+<div class="line"><a name="l05281"></a><span class="lineno"> 5281</span>   ninv2=cpl_table_count_invalid(*ou2,<span class="stringliteral">"VALUE"</span>);</div>
+<div class="line"><a name="l05282"></a><span class="lineno"> 5282</span>   <span class="keywordflow">if</span>(ninv1==size1) {</div>
+<div class="line"><a name="l05283"></a><span class="lineno"> 5283</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l05284"></a><span class="lineno"> 5284</span>   }</div>
+<div class="line"><a name="l05285"></a><span class="lineno"> 5285</span>   <span class="keywordflow">if</span>(ninv2==size2) {</div>
+<div class="line"><a name="l05286"></a><span class="lineno"> 5286</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l05287"></a><span class="lineno"> 5287</span>   }</div>
+<div class="line"><a name="l05288"></a><span class="lineno"> 5288</span>   check_nomsg(cpl_table_erase_invalid(*ou1));</div>
+<div class="line"><a name="l05289"></a><span class="lineno"> 5289</span>   check_nomsg(cpl_table_erase_invalid(*ou2));</div>
+<div class="line"><a name="l05290"></a><span class="lineno"> 5290</span>   <span class="keywordflow">return</span> (size1-ninv1);</div>
+<div class="line"><a name="l05291"></a><span class="lineno"> 5291</span> </div>
+<div class="line"><a name="l05292"></a><span class="lineno"> 5292</span>  cleanup:</div>
+<div class="line"><a name="l05293"></a><span class="lineno"> 5293</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05294"></a><span class="lineno"> 5294</span> </div>
+<div class="line"><a name="l05295"></a><span class="lineno"> 5295</span> }</div>
+<div class="line"><a name="l05296"></a><span class="lineno"> 5296</span> </div>
+<div class="line"><a name="l05303"></a><span class="lineno"> 5303</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l05304"></a><span class="lineno"> 5304</span> sinfo_image2table(<span class="keyword">const</span> cpl_image* im)</div>
+<div class="line"><a name="l05305"></a><span class="lineno"> 5305</span> {</div>
+<div class="line"><a name="l05306"></a><span class="lineno"> 5306</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l05307"></a><span class="lineno"> 5307</span>   <span class="keywordtype">int</span> sx=0;</div>
+<div class="line"><a name="l05308"></a><span class="lineno"> 5308</span>   <span class="keywordtype">int</span> sy=0;</div>
+<div class="line"><a name="l05309"></a><span class="lineno"> 5309</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pim=NULL;</div>
+<div class="line"><a name="l05310"></a><span class="lineno"> 5310</span>   <span class="keywordtype">double</span>* pval=NULL;</div>
+<div class="line"><a name="l05311"></a><span class="lineno"> 5311</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05312"></a><span class="lineno"> 5312</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l05313"></a><span class="lineno"> 5313</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l05314"></a><span class="lineno"> 5314</span> </div>
+<div class="line"><a name="l05315"></a><span class="lineno"> 5315</span>   cknull(im,<span class="stringliteral">"input image is NULL"</span>);</div>
+<div class="line"><a name="l05316"></a><span class="lineno"> 5316</span> </div>
+<div class="line"><a name="l05317"></a><span class="lineno"> 5317</span>   check_nomsg(sx=cpl_image_get_size_x(im));</div>
+<div class="line"><a name="l05318"></a><span class="lineno"> 5318</span>   check_nomsg(sy=cpl_image_get_size_y(im));</div>
+<div class="line"><a name="l05319"></a><span class="lineno"> 5319</span>   check_nomsg(pim=cpl_image_get_data_double_const(im));</div>
+<div class="line"><a name="l05320"></a><span class="lineno"> 5320</span>   check_nomsg(out=cpl_table_new(sx*sy));</div>
+<div class="line"><a name="l05321"></a><span class="lineno"> 5321</span>   check_nomsg(cpl_table_new_column(out,<span class="stringliteral">"VALUE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l05322"></a><span class="lineno"> 5322</span>   check_nomsg(pval=cpl_table_get_data_double(out,<span class="stringliteral">"VALUE"</span>));</div>
+<div class="line"><a name="l05323"></a><span class="lineno"> 5323</span> </div>
+<div class="line"><a name="l05324"></a><span class="lineno"> 5324</span>   <span class="keywordflow">for</span>(j=0;j<sy;j++) {</div>
+<div class="line"><a name="l05325"></a><span class="lineno"> 5325</span>     <span class="keywordflow">for</span>(i=0;i<sx;i++) {</div>
+<div class="line"><a name="l05326"></a><span class="lineno"> 5326</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l05327"></a><span class="lineno"> 5327</span> <span class="comment">      pval[k++]=pim[j*sx+i];</span></div>
+<div class="line"><a name="l05328"></a><span class="lineno"> 5328</span> <span class="comment">      sinfo_msg("set tab %f",pim[j*sx+i]);</span></div>
+<div class="line"><a name="l05329"></a><span class="lineno"> 5329</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l05330"></a><span class="lineno"> 5330</span>       cpl_table_set_double(out,<span class="stringliteral">"VALUE"</span>,k++,pim[j*sx+i]);</div>
+<div class="line"><a name="l05331"></a><span class="lineno"> 5331</span>     }</div>
+<div class="line"><a name="l05332"></a><span class="lineno"> 5332</span>   }</div>
+<div class="line"><a name="l05333"></a><span class="lineno"> 5333</span> </div>
+<div class="line"><a name="l05334"></a><span class="lineno"> 5334</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l05335"></a><span class="lineno"> 5335</span>  cleanup:</div>
+<div class="line"><a name="l05336"></a><span class="lineno"> 5336</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l05337"></a><span class="lineno"> 5337</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l05338"></a><span class="lineno"> 5338</span> </div>
+<div class="line"><a name="l05339"></a><span class="lineno"> 5339</span> }</div>
+<div class="line"><a name="l05348"></a><span class="lineno"> 5348</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05349"></a><span class="lineno"> 5349</span> sinfo_check_screw_values(cpl_table** int_obj,</div>
+<div class="line"><a name="l05350"></a><span class="lineno"> 5350</span>                          cpl_table** int_sky,</div>
+<div class="line"><a name="l05351"></a><span class="lineno"> 5351</span>                          cpl_table* grange,</div>
+<div class="line"><a name="l05352"></a><span class="lineno"> 5352</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol)</div>
+<div class="line"><a name="l05353"></a><span class="lineno"> 5353</span> {</div>
+<div class="line"><a name="l05354"></a><span class="lineno"> 5354</span>   <span class="comment">// check for screwy values at ends of spectrum</span></div>
+<div class="line"><a name="l05355"></a><span class="lineno"> 5355</span>   cpl_table* xsky=NULL;</div>
+<div class="line"><a name="l05356"></a><span class="lineno"> 5356</span>   cpl_table* xobj=NULL;</div>
+<div class="line"><a name="l05357"></a><span class="lineno"> 5357</span> </div>
+<div class="line"><a name="l05358"></a><span class="lineno"> 5358</span>   <span class="keywordtype">double</span> sky_min=0;</div>
+<div class="line"><a name="l05359"></a><span class="lineno"> 5359</span>   <span class="keywordtype">double</span> sky_max=0;</div>
+<div class="line"><a name="l05360"></a><span class="lineno"> 5360</span>   <span class="keywordtype">double</span> gsky_min=0;</div>
+<div class="line"><a name="l05361"></a><span class="lineno"> 5361</span>   <span class="keywordtype">double</span> gsky_max=0;</div>
+<div class="line"><a name="l05362"></a><span class="lineno"> 5362</span>   <span class="keywordtype">double</span> obj_min=0;</div>
+<div class="line"><a name="l05363"></a><span class="lineno"> 5363</span>   <span class="keywordtype">double</span> obj_max=0;</div>
+<div class="line"><a name="l05364"></a><span class="lineno"> 5364</span>   <span class="keywordtype">double</span> gobj_min=0;</div>
+<div class="line"><a name="l05365"></a><span class="lineno"> 5365</span>   <span class="keywordtype">double</span> gobj_max=0;</div>
+<div class="line"><a name="l05366"></a><span class="lineno"> 5366</span> </div>
+<div class="line"><a name="l05367"></a><span class="lineno"> 5367</span>   cknull(*int_sky,<span class="stringliteral">"Null input sky spectrum"</span>);</div>
+<div class="line"><a name="l05368"></a><span class="lineno"> 5368</span>   cknull(*int_obj,<span class="stringliteral">"Null input obj spectrum"</span>);</div>
+<div class="line"><a name="l05369"></a><span class="lineno"> 5369</span>   cknull(grange,<span class="stringliteral">"Null input wavelength range"</span>);</div>
+<div class="line"><a name="l05370"></a><span class="lineno"> 5370</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l05371"></a><span class="lineno"> 5371</span>   <span class="comment">//                             "out_grange0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05372"></a><span class="lineno"> 5372</span>   cknull_nomsg(xsky=sinfo_table_select_range(*int_sky,grange,wtol));</div>
+<div class="line"><a name="l05373"></a><span class="lineno"> 5373</span>   <span class="comment">//check_nomsg(cpl_table_save(xsky,NULL,NULL,</span></div>
+<div class="line"><a name="l05374"></a><span class="lineno"> 5374</span>   <span class="comment">//                             "out_grange1.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05375"></a><span class="lineno"> 5375</span>   check_nomsg(sky_min=cpl_table_get_column_min(xsky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05376"></a><span class="lineno"> 5376</span>   check_nomsg(sky_max=cpl_table_get_column_max(xsky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05377"></a><span class="lineno"> 5377</span>   <span class="comment">//sinfo_msg("gskymax=%f gskymin=%f",sky_max,sky_min);</span></div>
+<div class="line"><a name="l05378"></a><span class="lineno"> 5378</span> </div>
+<div class="line"><a name="l05379"></a><span class="lineno"> 5379</span>   gsky_max = (sky_max>0) ? sky_max : 0;</div>
+<div class="line"><a name="l05380"></a><span class="lineno"> 5380</span>   gsky_min = (sky_min<0) ? sky_min : 0;</div>
+<div class="line"><a name="l05381"></a><span class="lineno"> 5381</span>   <span class="comment">//gsky_pos = where(int_sky > 1.*gsky_max || int_sky < 1.*gsky_min,gskypos_i);</span></div>
+<div class="line"><a name="l05382"></a><span class="lineno"> 5382</span>   check_nomsg(cpl_table_select_all(*int_sky));</div>
+<div class="line"><a name="l05383"></a><span class="lineno"> 5383</span>   ck0_nomsg(sinfo_table_set_nan_out_min_max(int_sky,<span class="stringliteral">"INT"</span>,gsky_min,gsky_max));</div>
+<div class="line"><a name="l05384"></a><span class="lineno"> 5384</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky,NULL,NULL,</span></div>
+<div class="line"><a name="l05385"></a><span class="lineno"> 5385</span>   <span class="comment">//                             "out_gsky_pos.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05386"></a><span class="lineno"> 5386</span> </div>
+<div class="line"><a name="l05387"></a><span class="lineno"> 5387</span>   sinfo_free_table(&xsky);</div>
+<div class="line"><a name="l05388"></a><span class="lineno"> 5388</span>   <span class="comment">//sinfo_msg("gsky_min=%f gsky_max=%f",gsky_min,gsky_max);</span></div>
+<div class="line"><a name="l05389"></a><span class="lineno"> 5389</span> </div>
+<div class="line"><a name="l05390"></a><span class="lineno"> 5390</span>   cknull_nomsg(xobj=sinfo_table_select_range(*int_obj,grange,wtol));</div>
+<div class="line"><a name="l05391"></a><span class="lineno"> 5391</span>   check_nomsg(obj_min=cpl_table_get_column_min(xobj,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05392"></a><span class="lineno"> 5392</span>   check_nomsg(obj_max=cpl_table_get_column_max(xobj,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05393"></a><span class="lineno"> 5393</span>   <span class="comment">//check_nomsg(cpl_table_save(xobj,NULL,NULL,"out_xobj.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05394"></a><span class="lineno"> 5394</span>   gobj_max = (obj_max>0) ? obj_max : 0;</div>
+<div class="line"><a name="l05395"></a><span class="lineno"> 5395</span>   gobj_min = (obj_min<0) ? obj_min : 0;</div>
+<div class="line"><a name="l05396"></a><span class="lineno"> 5396</span>   <span class="comment">//gobj_pos=where(int_obj > 1.*gobj_max || int_obj < 1.*gobj_min,gobj_pos_i);</span></div>
+<div class="line"><a name="l05397"></a><span class="lineno"> 5397</span>   check_nomsg(cpl_table_select_all(*int_obj));</div>
+<div class="line"><a name="l05398"></a><span class="lineno"> 5398</span>   ck0_nomsg(sinfo_table_set_nan_out_min_max(int_obj,<span class="stringliteral">"INT"</span>,gobj_min,gobj_max));</div>
+<div class="line"><a name="l05399"></a><span class="lineno"> 5399</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_obj,NULL,NULL,</span></div>
+<div class="line"><a name="l05400"></a><span class="lineno"> 5400</span>   <span class="comment">//              "out_gobj_pos.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05401"></a><span class="lineno"> 5401</span>   <span class="comment">//sinfo_msg("gobj_min=%f gobj_max=%f",gobj_min,gobj_max);</span></div>
+<div class="line"><a name="l05402"></a><span class="lineno"> 5402</span>   sinfo_free_table(&xobj);</div>
+<div class="line"><a name="l05403"></a><span class="lineno"> 5403</span> </div>
+<div class="line"><a name="l05404"></a><span class="lineno"> 5404</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05405"></a><span class="lineno"> 5405</span>  cleanup:</div>
+<div class="line"><a name="l05406"></a><span class="lineno"> 5406</span>   sinfo_free_table(&xsky);</div>
+<div class="line"><a name="l05407"></a><span class="lineno"> 5407</span>   sinfo_free_table(&xobj);</div>
+<div class="line"><a name="l05408"></a><span class="lineno"> 5408</span> </div>
+<div class="line"><a name="l05409"></a><span class="lineno"> 5409</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05410"></a><span class="lineno"> 5410</span> </div>
+<div class="line"><a name="l05411"></a><span class="lineno"> 5411</span> </div>
+<div class="line"><a name="l05412"></a><span class="lineno"> 5412</span> }</div>
+<div class="line"><a name="l05413"></a><span class="lineno"> 5413</span> </div>
+<div class="line"><a name="l05414"></a><span class="lineno"> 5414</span> </div>
+<div class="line"><a name="l05415"></a><span class="lineno"> 5415</span> </div>
+<div class="line"><a name="l05425"></a><span class="lineno"> 5425</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05426"></a><span class="lineno"> 5426</span> sinfo_table_fill_column_over_range(cpl_table** inp,</div>
+<div class="line"><a name="l05427"></a><span class="lineno"> 5427</span>                                    <span class="keyword">const</span> cpl_table* ref,</div>
+<div class="line"><a name="l05428"></a><span class="lineno"> 5428</span>                                    <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l05429"></a><span class="lineno"> 5429</span>                                    <span class="keyword">const</span> <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l05430"></a><span class="lineno"> 5430</span>                                    <span class="keyword">const</span> <span class="keywordtype">double</span> tol)</div>
+<div class="line"><a name="l05431"></a><span class="lineno"> 5431</span> {</div>
+<div class="line"><a name="l05432"></a><span class="lineno"> 5432</span> </div>
+<div class="line"><a name="l05433"></a><span class="lineno"> 5433</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05434"></a><span class="lineno"> 5434</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l05435"></a><span class="lineno"> 5435</span>   <span class="keywordtype">int</span> nref=0;</div>
+<div class="line"><a name="l05436"></a><span class="lineno"> 5436</span>   <span class="keywordtype">int</span> ninp=0;</div>
+<div class="line"><a name="l05437"></a><span class="lineno"> 5437</span> </div>
+<div class="line"><a name="l05438"></a><span class="lineno"> 5438</span>   <span class="keywordtype">double</span>* pwin=NULL;</div>
+<div class="line"><a name="l05439"></a><span class="lineno"> 5439</span>   <span class="keywordtype">double</span>* pcin=NULL;</div>
+<div class="line"><a name="l05440"></a><span class="lineno"> 5440</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pwrf=NULL;</div>
+<div class="line"><a name="l05441"></a><span class="lineno"> 5441</span> </div>
+<div class="line"><a name="l05442"></a><span class="lineno"> 5442</span>   cknull(inp,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l05443"></a><span class="lineno"> 5443</span>   cknull(ref,<span class="stringliteral">"null reference table"</span>);</div>
+<div class="line"><a name="l05444"></a><span class="lineno"> 5444</span> </div>
+<div class="line"><a name="l05445"></a><span class="lineno"> 5445</span>   check_nomsg(ninp=cpl_table_get_nrow(*inp));</div>
+<div class="line"><a name="l05446"></a><span class="lineno"> 5446</span>   check_nomsg(nref=cpl_table_get_nrow(ref));</div>
+<div class="line"><a name="l05447"></a><span class="lineno"> 5447</span>   check_nomsg(pwin=cpl_table_get_data_double(*inp,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05448"></a><span class="lineno"> 5448</span>   check_nomsg(pcin=cpl_table_get_data_double(*inp,col));</div>
+<div class="line"><a name="l05449"></a><span class="lineno"> 5449</span>   check_nomsg(pwrf=cpl_table_get_data_double_const(ref,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05450"></a><span class="lineno"> 5450</span> </div>
+<div class="line"><a name="l05451"></a><span class="lineno"> 5451</span>   k=0;</div>
+<div class="line"><a name="l05452"></a><span class="lineno"> 5452</span>   i=0;</div>
+<div class="line"><a name="l05453"></a><span class="lineno"> 5453</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l05454"></a><span class="lineno"> 5454</span> <span class="comment">  sinfo_msg("ninp=%d nref=%d",ninp,nref);</span></div>
+<div class="line"><a name="l05455"></a><span class="lineno"> 5455</span> <span class="comment">  sinfo_msg("winp(0)=%f wref(0)=%f tol=%f diff=%f",</span></div>
+<div class="line"><a name="l05456"></a><span class="lineno"> 5456</span> <span class="comment">            pwin[0],pwrf[0],tol,fabs(pwin[0]-pwrf[0]));</span></div>
+<div class="line"><a name="l05457"></a><span class="lineno"> 5457</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l05458"></a><span class="lineno"> 5458</span>   <span class="keywordflow">if</span>(pwin[0]<=pwrf[0]) {</div>
+<div class="line"><a name="l05459"></a><span class="lineno"> 5459</span>     <span class="comment">//sinfo_msg("case 1");</span></div>
+<div class="line"><a name="l05460"></a><span class="lineno"> 5460</span>     <span class="keywordflow">for</span>(i=0;i<ninp;i++) {</div>
+<div class="line"><a name="l05461"></a><span class="lineno"> 5461</span>       <span class="keywordflow">if</span>(k<nref) {</div>
+<div class="line"><a name="l05462"></a><span class="lineno"> 5462</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l05463"></a><span class="lineno"> 5463</span> <span class="comment">        sinfo_msg("case1: %f %f %f %f %d %d",</span></div>
+<div class="line"><a name="l05464"></a><span class="lineno"> 5464</span> <span class="comment">                  fabs(pwin[i] - pwrf[k]),tol,pwin[i],pwrf[k],i,k);</span></div>
+<div class="line"><a name="l05465"></a><span class="lineno"> 5465</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l05466"></a><span class="lineno"> 5466</span>     <span class="keywordflow">if</span>(fabs(pwin[i] - pwrf[k])< tol) {</div>
+<div class="line"><a name="l05467"></a><span class="lineno"> 5467</span>       pcin[i]=val;</div>
+<div class="line"><a name="l05468"></a><span class="lineno"> 5468</span>       k++;</div>
+<div class="line"><a name="l05469"></a><span class="lineno"> 5469</span>     }</div>
+<div class="line"><a name="l05470"></a><span class="lineno"> 5470</span>       }</div>
+<div class="line"><a name="l05471"></a><span class="lineno"> 5471</span>     }</div>
+<div class="line"><a name="l05472"></a><span class="lineno"> 5472</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05473"></a><span class="lineno"> 5473</span> </div>
+<div class="line"><a name="l05474"></a><span class="lineno"> 5474</span>     <span class="comment">//pwin[0]>pwrf[0]</span></div>
+<div class="line"><a name="l05475"></a><span class="lineno"> 5475</span>     <span class="comment">//sinfo_msg("case 2");</span></div>
+<div class="line"><a name="l05476"></a><span class="lineno"> 5476</span>     <span class="keywordflow">for</span>(k=0;k<nref;k++) {</div>
+<div class="line"><a name="l05477"></a><span class="lineno"> 5477</span>       <span class="keywordflow">if</span>(i<ninp) {</div>
+<div class="line"><a name="l05478"></a><span class="lineno"> 5478</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l05479"></a><span class="lineno"> 5479</span> <span class="comment">        sinfo_msg("case2: %f %f %f %f %d %d",</span></div>
+<div class="line"><a name="l05480"></a><span class="lineno"> 5480</span> <span class="comment">                  fabs(pwin[i] - pwrf[k]),tol,pwin[i],pwrf[k],i,k);</span></div>
+<div class="line"><a name="l05481"></a><span class="lineno"> 5481</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l05482"></a><span class="lineno"> 5482</span>     <span class="keywordflow">if</span>(fabs(pwin[i] - pwrf[k])< tol) {</div>
+<div class="line"><a name="l05483"></a><span class="lineno"> 5483</span>       pcin[i]=val;</div>
+<div class="line"><a name="l05484"></a><span class="lineno"> 5484</span>       i++;</div>
+<div class="line"><a name="l05485"></a><span class="lineno"> 5485</span>     }</div>
+<div class="line"><a name="l05486"></a><span class="lineno"> 5486</span>       }</div>
+<div class="line"><a name="l05487"></a><span class="lineno"> 5487</span>     }</div>
+<div class="line"><a name="l05488"></a><span class="lineno"> 5488</span>   }</div>
+<div class="line"><a name="l05489"></a><span class="lineno"> 5489</span> </div>
+<div class="line"><a name="l05490"></a><span class="lineno"> 5490</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05491"></a><span class="lineno"> 5491</span> </div>
+<div class="line"><a name="l05492"></a><span class="lineno"> 5492</span>  cleanup:</div>
+<div class="line"><a name="l05493"></a><span class="lineno"> 5493</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05494"></a><span class="lineno"> 5494</span> </div>
+<div class="line"><a name="l05495"></a><span class="lineno"> 5495</span> }</div>
+<div class="line"><a name="l05496"></a><span class="lineno"> 5496</span> </div>
+<div class="line"><a name="l05497"></a><span class="lineno"> 5497</span> </div>
+<div class="line"><a name="l05506"></a><span class="lineno"> 5506</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l05507"></a><span class="lineno"> 5507</span> sinfo_table_select_range(cpl_table* inp, cpl_table* ref,<span class="keyword">const</span> <span class="keywordtype">double</span> tol)</div>
+<div class="line"><a name="l05508"></a><span class="lineno"> 5508</span> {</div>
+<div class="line"><a name="l05509"></a><span class="lineno"> 5509</span> </div>
+<div class="line"><a name="l05510"></a><span class="lineno"> 5510</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l05511"></a><span class="lineno"> 5511</span>   <span class="keywordtype">int</span> ninp=0;</div>
+<div class="line"><a name="l05512"></a><span class="lineno"> 5512</span>   <span class="keywordtype">int</span> nref=0;</div>
+<div class="line"><a name="l05513"></a><span class="lineno"> 5513</span>   <span class="keywordtype">int</span> nout=0;</div>
+<div class="line"><a name="l05514"></a><span class="lineno"> 5514</span> </div>
+<div class="line"><a name="l05515"></a><span class="lineno"> 5515</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05516"></a><span class="lineno"> 5516</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l05517"></a><span class="lineno"> 5517</span>   <span class="keywordtype">double</span>* pou;</div>
+<div class="line"><a name="l05518"></a><span class="lineno"> 5518</span>   <span class="keywordtype">double</span>* prf;</div>
+<div class="line"><a name="l05519"></a><span class="lineno"> 5519</span>   <span class="keywordtype">double</span> wmin=0;</div>
+<div class="line"><a name="l05520"></a><span class="lineno"> 5520</span>   <span class="keywordtype">double</span> wmax=0;</div>
+<div class="line"><a name="l05521"></a><span class="lineno"> 5521</span>   cpl_table* tmp=NULL;</div>
+<div class="line"><a name="l05522"></a><span class="lineno"> 5522</span>   cknull(inp,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l05523"></a><span class="lineno"> 5523</span>   cknull(ref,<span class="stringliteral">"null reference table"</span>);</div>
+<div class="line"><a name="l05524"></a><span class="lineno"> 5524</span> </div>
+<div class="line"><a name="l05525"></a><span class="lineno"> 5525</span>   check_nomsg(ninp=cpl_table_get_nrow(inp));</div>
+<div class="line"><a name="l05526"></a><span class="lineno"> 5526</span>   check_nomsg(nref=cpl_table_get_nrow(ref));</div>
+<div class="line"><a name="l05527"></a><span class="lineno"> 5527</span>   <span class="keywordflow">if</span>(ninp != nref) {</div>
+<div class="line"><a name="l05528"></a><span class="lineno"> 5528</span>     <span class="comment">//sinfo_msg_warning("ninp != nref");</span></div>
+<div class="line"><a name="l05529"></a><span class="lineno"> 5529</span>     check_nomsg(wmin=cpl_table_get_column_min(ref,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05530"></a><span class="lineno"> 5530</span>     check_nomsg(wmax=cpl_table_get_column_max(ref,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05531"></a><span class="lineno"> 5531</span>     <span class="comment">//sinfo_msg_debug("wmin=%f wmax=%f",wmin,wmax);</span></div>
+<div class="line"><a name="l05532"></a><span class="lineno"> 5532</span>     cpl_table_select_all(inp);</div>
+<div class="line"><a name="l05533"></a><span class="lineno"> 5533</span>     check_nomsg(ninp=cpl_table_and_selected_double(inp,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l05534"></a><span class="lineno"> 5534</span>                                                    CPL_NOT_LESS_THAN,wmin));</div>
+<div class="line"><a name="l05535"></a><span class="lineno"> 5535</span>     check_nomsg(tmp=cpl_table_extract_selected(inp));</div>
+<div class="line"><a name="l05536"></a><span class="lineno"> 5536</span>     check_nomsg(ninp=cpl_table_and_selected_double(tmp,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l05537"></a><span class="lineno"> 5537</span>                                                    CPL_NOT_GREATER_THAN,wmax));</div>
+<div class="line"><a name="l05538"></a><span class="lineno"> 5538</span>     check_nomsg(out=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l05539"></a><span class="lineno"> 5539</span>     sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l05540"></a><span class="lineno"> 5540</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05541"></a><span class="lineno"> 5541</span>     check_nomsg(out=cpl_table_duplicate(inp));</div>
+<div class="line"><a name="l05542"></a><span class="lineno"> 5542</span>   }</div>
+<div class="line"><a name="l05543"></a><span class="lineno"> 5543</span> </div>
+<div class="line"><a name="l05544"></a><span class="lineno"> 5544</span>   check_nomsg(nout=cpl_table_get_nrow(out));</div>
+<div class="line"><a name="l05545"></a><span class="lineno"> 5545</span>   <span class="keywordflow">if</span>(nout == 0) {</div>
+<div class="line"><a name="l05546"></a><span class="lineno"> 5546</span>     <span class="comment">//sinfo_msg("nout=%d",nout);</span></div>
+<div class="line"><a name="l05547"></a><span class="lineno"> 5547</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l05548"></a><span class="lineno"> 5548</span>   }</div>
+<div class="line"><a name="l05549"></a><span class="lineno"> 5549</span>   tmp=cpl_table_duplicate(out);</div>
+<div class="line"><a name="l05550"></a><span class="lineno"> 5550</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l05551"></a><span class="lineno"> 5551</span>   check_nomsg(pou=cpl_table_get_data_double(tmp,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05552"></a><span class="lineno"> 5552</span>   check_nomsg(prf=cpl_table_get_data_double(ref,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05553"></a><span class="lineno"> 5553</span> </div>
+<div class="line"><a name="l05554"></a><span class="lineno"> 5554</span>   check_nomsg(cpl_table_new_column(tmp,<span class="stringliteral">"FLAG"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l05555"></a><span class="lineno"> 5555</span>   check_nomsg(cpl_table_fill_column_window(tmp,<span class="stringliteral">"FLAG"</span>,0,nout,-1));</div>
+<div class="line"><a name="l05556"></a><span class="lineno"> 5556</span> </div>
+<div class="line"><a name="l05557"></a><span class="lineno"> 5557</span>   k=0;</div>
+<div class="line"><a name="l05558"></a><span class="lineno"> 5558</span>   i=0;</div>
+<div class="line"><a name="l05559"></a><span class="lineno"> 5559</span> </div>
+<div class="line"><a name="l05560"></a><span class="lineno"> 5560</span>   <span class="comment">//sinfo_msg_debug("nout=%d nref=%d",nout,nref);</span></div>
+<div class="line"><a name="l05561"></a><span class="lineno"> 5561</span>   <span class="comment">//sinfo_msg_debug("wout(0)=%f wref(0)=%f tol=%f diff=%f",</span></div>
+<div class="line"><a name="l05562"></a><span class="lineno"> 5562</span>   <span class="comment">//          pou[0],prf[0],tol,fabs(pou[0]-prf[0]));</span></div>
+<div class="line"><a name="l05563"></a><span class="lineno"> 5563</span> </div>
+<div class="line"><a name="l05564"></a><span class="lineno"> 5564</span>   <span class="keywordflow">if</span>(pou[0]<=prf[0]) {</div>
+<div class="line"><a name="l05565"></a><span class="lineno"> 5565</span>     <span class="comment">//sinfo_msg_debug("case 1");</span></div>
+<div class="line"><a name="l05566"></a><span class="lineno"> 5566</span>     <span class="keywordflow">for</span>(i=0;i<nout;i++) {</div>
+<div class="line"><a name="l05567"></a><span class="lineno"> 5567</span>       <span class="keywordflow">if</span>(k<nref) {</div>
+<div class="line"><a name="l05568"></a><span class="lineno"> 5568</span>     <span class="keywordflow">if</span>(fabs(pou[i] - prf[k])< tol) {</div>
+<div class="line"><a name="l05569"></a><span class="lineno"> 5569</span>       check_nomsg(cpl_table_set_int(tmp,<span class="stringliteral">"FLAG"</span>,i,1));</div>
+<div class="line"><a name="l05570"></a><span class="lineno"> 5570</span>       k++;</div>
+<div class="line"><a name="l05571"></a><span class="lineno"> 5571</span>     }</div>
+<div class="line"><a name="l05572"></a><span class="lineno"> 5572</span>       }</div>
+<div class="line"><a name="l05573"></a><span class="lineno"> 5573</span>     }</div>
+<div class="line"><a name="l05574"></a><span class="lineno"> 5574</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l05575"></a><span class="lineno"> 5575</span> </div>
+<div class="line"><a name="l05576"></a><span class="lineno"> 5576</span>     <span class="comment">//pou[0]>prf[0]</span></div>
+<div class="line"><a name="l05577"></a><span class="lineno"> 5577</span>     <span class="comment">//sinfo_msg_debug("case 2");</span></div>
+<div class="line"><a name="l05578"></a><span class="lineno"> 5578</span>     <span class="keywordflow">for</span>(k=0;k<nref;k++) {</div>
+<div class="line"><a name="l05579"></a><span class="lineno"> 5579</span>       <span class="keywordflow">if</span>(i<nout) {</div>
+<div class="line"><a name="l05580"></a><span class="lineno"> 5580</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l05581"></a><span class="lineno"> 5581</span> <span class="comment">        sinfo_msg("check: %f %f %f %f",</span></div>
+<div class="line"><a name="l05582"></a><span class="lineno"> 5582</span> <span class="comment">                  fabs(pou[i] - prf[k]),tol,pou[i],prf[k]);</span></div>
+<div class="line"><a name="l05583"></a><span class="lineno"> 5583</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l05584"></a><span class="lineno"> 5584</span>     <span class="keywordflow">if</span>(fabs(pou[i] - prf[k])< tol) {</div>
+<div class="line"><a name="l05585"></a><span class="lineno"> 5585</span>       check_nomsg(cpl_table_set_int(tmp,<span class="stringliteral">"FLAG"</span>,i,1));</div>
+<div class="line"><a name="l05586"></a><span class="lineno"> 5586</span>       i++;</div>
+<div class="line"><a name="l05587"></a><span class="lineno"> 5587</span>     }</div>
+<div class="line"><a name="l05588"></a><span class="lineno"> 5588</span>       }</div>
+<div class="line"><a name="l05589"></a><span class="lineno"> 5589</span>     }</div>
+<div class="line"><a name="l05590"></a><span class="lineno"> 5590</span>   }</div>
+<div class="line"><a name="l05591"></a><span class="lineno"> 5591</span>   <span class="comment">//check_nomsg(cpl_table_save(tmp,NULL,NULL,"out_pre0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05592"></a><span class="lineno"> 5592</span>   check_nomsg(nout=cpl_table_and_selected_int(tmp,<span class="stringliteral">"FLAG"</span>,CPL_GREATER_THAN,0));</div>
+<div class="line"><a name="l05593"></a><span class="lineno"> 5593</span>   check_nomsg(out=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l05594"></a><span class="lineno"> 5594</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l05595"></a><span class="lineno"> 5595</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FLAG"</span>));</div>
+<div class="line"><a name="l05596"></a><span class="lineno"> 5596</span>   <span class="keywordflow">if</span>(nout==0) {</div>
+<div class="line"><a name="l05597"></a><span class="lineno"> 5597</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l05598"></a><span class="lineno"> 5598</span>   }</div>
+<div class="line"><a name="l05599"></a><span class="lineno"> 5599</span>   <span class="comment">//check_nomsg(cpl_table_save(out,NULL,NULL,"out_post0.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05600"></a><span class="lineno"> 5600</span>   <span class="comment">/* sinfo_msg("nout=%d",nout); */</span></div>
+<div class="line"><a name="l05601"></a><span class="lineno"> 5601</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l05602"></a><span class="lineno"> 5602</span> </div>
+<div class="line"><a name="l05603"></a><span class="lineno"> 5603</span>  cleanup:</div>
+<div class="line"><a name="l05604"></a><span class="lineno"> 5604</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l05605"></a><span class="lineno"> 5605</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l05606"></a><span class="lineno"> 5606</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l05607"></a><span class="lineno"> 5607</span> </div>
+<div class="line"><a name="l05608"></a><span class="lineno"> 5608</span> }</div>
+<div class="line"><a name="l05609"></a><span class="lineno"> 5609</span> </div>
+<div class="line"><a name="l05619"></a><span class="lineno"> 5619</span> cpl_table*</div>
+<div class="line"><a name="l05620"></a><span class="lineno"> 5620</span> sinfo_interpolate_sky(<span class="keyword">const</span> cpl_table* inp,<span class="keyword">const</span> cpl_table* lambdas)</div>
+<div class="line"><a name="l05621"></a><span class="lineno"> 5621</span> {</div>
+<div class="line"><a name="l05622"></a><span class="lineno"> 5622</span>   <span class="comment">//interpolate sky if necessary</span></div>
+<div class="line"><a name="l05623"></a><span class="lineno"> 5623</span>   cpl_table* <span class="keyword">new</span>=NULL;</div>
+<div class="line"><a name="l05624"></a><span class="lineno"> 5624</span>   <span class="keyword">new</span> = sinfo_interpolate(inp,lambdas,<span class="stringliteral">"WAVE"</span>,<span class="stringliteral">"lsquadratic"</span>);;</div>
+<div class="line"><a name="l05625"></a><span class="lineno"> 5625</span> </div>
+<div class="line"><a name="l05626"></a><span class="lineno"> 5626</span>   <span class="keywordflow">return</span> <span class="keyword">new</span>;</div>
+<div class="line"><a name="l05627"></a><span class="lineno"> 5627</span> }</div>
+<div class="line"><a name="l05628"></a><span class="lineno"> 5628</span> </div>
+<div class="line"><a name="l05629"></a><span class="lineno"> 5629</span> </div>
+<div class="line"><a name="l05639"></a><span class="lineno"> 5639</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l05640"></a><span class="lineno"> 5640</span> sinfo_interpolate(<span class="keyword">const</span> cpl_table* inp,</div>
+<div class="line"><a name="l05641"></a><span class="lineno"> 5641</span>                   <span class="keyword">const</span> cpl_table* lambdas,</div>
+<div class="line"><a name="l05642"></a><span class="lineno"> 5642</span>                   <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l05643"></a><span class="lineno"> 5643</span>                   <span class="keyword">const</span> <span class="keywordtype">char</span>* method)</div>
+<div class="line"><a name="l05644"></a><span class="lineno"> 5644</span> {</div>
+<div class="line"><a name="l05645"></a><span class="lineno"> 5645</span>   <span class="comment">//TODO</span></div>
+<div class="line"><a name="l05646"></a><span class="lineno"> 5646</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l05647"></a><span class="lineno"> 5647</span> </div>
+<div class="line"><a name="l05648"></a><span class="lineno"> 5648</span>   <span class="comment">//To remove compilation warnings</span></div>
+<div class="line"><a name="l05649"></a><span class="lineno"> 5649</span>   cknull_nomsg(lambdas);</div>
+<div class="line"><a name="l05650"></a><span class="lineno"> 5650</span>   cknull_nomsg(name);</div>
+<div class="line"><a name="l05651"></a><span class="lineno"> 5651</span>   cknull_nomsg(method);</div>
+<div class="line"><a name="l05652"></a><span class="lineno"> 5652</span> </div>
+<div class="line"><a name="l05653"></a><span class="lineno"> 5653</span>   out=cpl_table_duplicate(inp);</div>
+<div class="line"><a name="l05654"></a><span class="lineno"> 5654</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l05655"></a><span class="lineno"> 5655</span> </div>
+<div class="line"><a name="l05656"></a><span class="lineno"> 5656</span>  cleanup:</div>
+<div class="line"><a name="l05657"></a><span class="lineno"> 5657</span> </div>
+<div class="line"><a name="l05658"></a><span class="lineno"> 5658</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l05659"></a><span class="lineno"> 5659</span> </div>
+<div class="line"><a name="l05660"></a><span class="lineno"> 5660</span> }</div>
+<div class="line"><a name="l05661"></a><span class="lineno"> 5661</span> </div>
+<div class="line"><a name="l05662"></a><span class="lineno"> 5662</span> </div>
+<div class="line"><a name="l05663"></a><span class="lineno"> 5663</span> </div>
+<div class="line"><a name="l05676"></a><span class="lineno"> 5676</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l05677"></a><span class="lineno"> 5677</span> sinfo_gaussian_amp(<span class="keywordtype">double</span> area,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off)</div>
+<div class="line"><a name="l05678"></a><span class="lineno"> 5678</span> {</div>
+<div class="line"><a name="l05679"></a><span class="lineno"> 5679</span>   <span class="keywordflow">return</span> area/sqrt(2*PI_NUMB*sigma*sigma)*</div>
+<div class="line"><a name="l05680"></a><span class="lineno"> 5680</span>          exp(-(x-x0)*(x-x0)/(2*sigma*sigma))+off;</div>
+<div class="line"><a name="l05681"></a><span class="lineno"> 5681</span> }</div>
+<div class="line"><a name="l05682"></a><span class="lineno"> 5682</span> </div>
+<div class="line"><a name="l05683"></a><span class="lineno"> 5683</span> </div>
+<div class="line"><a name="l05696"></a><span class="lineno"> 5696</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l05697"></a><span class="lineno"> 5697</span> sinfo_gaussian_area(<span class="keywordtype">double</span> amp,<span class="keywordtype">double</span> sigma,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> x0,<span class="keywordtype">double</span> off)</div>
+<div class="line"><a name="l05698"></a><span class="lineno"> 5698</span> {</div>
+<div class="line"><a name="l05699"></a><span class="lineno"> 5699</span>   <span class="keywordflow">return</span> sqrt(2*PI_NUMB*sigma*sigma)*exp((x-x0)*(x-x0)/(2*sigma*sigma))*</div>
+<div class="line"><a name="l05700"></a><span class="lineno"> 5700</span>          (amp-off);</div>
+<div class="line"><a name="l05701"></a><span class="lineno"> 5701</span> }</div>
+<div class="line"><a name="l05702"></a><span class="lineno"> 5702</span> </div>
+<div class="line"><a name="l05703"></a><span class="lineno"> 5703</span> </div>
+<div class="line"><a name="l05710"></a><span class="lineno"> 5710</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05711"></a><span class="lineno"> 5711</span> sinfo_table_smooth_column(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">char</span>* c, <span class="keyword">const</span> <span class="keywordtype">int</span> r)</div>
+<div class="line"><a name="l05712"></a><span class="lineno"> 5712</span> {</div>
+<div class="line"><a name="l05713"></a><span class="lineno"> 5713</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l05714"></a><span class="lineno"> 5714</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05715"></a><span class="lineno"> 5715</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l05716"></a><span class="lineno"> 5716</span>   <span class="keywordtype">double</span>* pval=NULL;</div>
+<div class="line"><a name="l05717"></a><span class="lineno"> 5717</span>   <span class="keywordtype">double</span> sum;</div>
+<div class="line"><a name="l05718"></a><span class="lineno"> 5718</span>   check_nomsg(nrow=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l05719"></a><span class="lineno"> 5719</span>   check_nomsg(pval=cpl_table_get_data_double(*t,c));</div>
+<div class="line"><a name="l05720"></a><span class="lineno"> 5720</span>   <span class="keywordflow">for</span>(i=r;i<nrow;i++) {</div>
+<div class="line"><a name="l05721"></a><span class="lineno"> 5721</span>     sum=0;</div>
+<div class="line"><a name="l05722"></a><span class="lineno"> 5722</span>     <span class="keywordflow">for</span>(j=-r;j<=r;j++) {</div>
+<div class="line"><a name="l05723"></a><span class="lineno"> 5723</span>       sum+=pval[i+j];</div>
+<div class="line"><a name="l05724"></a><span class="lineno"> 5724</span>     }</div>
+<div class="line"><a name="l05725"></a><span class="lineno"> 5725</span>     pval[i]=sum/(2*r+1);</div>
+<div class="line"><a name="l05726"></a><span class="lineno"> 5726</span>   }</div>
+<div class="line"><a name="l05727"></a><span class="lineno"> 5727</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05728"></a><span class="lineno"> 5728</span>  cleanup:</div>
+<div class="line"><a name="l05729"></a><span class="lineno"> 5729</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05730"></a><span class="lineno"> 5730</span> }</div>
+<div class="line"><a name="l05731"></a><span class="lineno"> 5731</span> </div>
+<div class="line"><a name="l05740"></a><span class="lineno"> 5740</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l05741"></a><span class="lineno"> 5741</span> sinfo_shift_sky(cpl_frame** sky_frm,</div>
+<div class="line"><a name="l05742"></a><span class="lineno"> 5742</span>                 cpl_table** int_sky,</div>
+<div class="line"><a name="l05743"></a><span class="lineno"> 5743</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> zshift)</div>
+<div class="line"><a name="l05744"></a><span class="lineno"> 5744</span> {</div>
+<div class="line"><a name="l05745"></a><span class="lineno"> 5745</span> </div>
+<div class="line"><a name="l05746"></a><span class="lineno"> 5746</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l05747"></a><span class="lineno"> 5747</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l05748"></a><span class="lineno"> 5748</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l05749"></a><span class="lineno"> 5749</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l05750"></a><span class="lineno"> 5750</span>   cpl_imagelist* sky_cub=NULL;</div>
+<div class="line"><a name="l05751"></a><span class="lineno"> 5751</span>   cpl_imagelist* sky_shift=NULL;</div>
+<div class="line"><a name="l05752"></a><span class="lineno"> 5752</span>   cpl_table* int_sky_dup=NULL;</div>
+<div class="line"><a name="l05753"></a><span class="lineno"> 5753</span> </div>
+<div class="line"><a name="l05754"></a><span class="lineno"> 5754</span>   <span class="keywordtype">double</span> min=0;</div>
+<div class="line"><a name="l05755"></a><span class="lineno"> 5755</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l05756"></a><span class="lineno"> 5756</span> </div>
+<div class="line"><a name="l05757"></a><span class="lineno"> 5757</span>  <span class="comment">/* Get Object relevant information */</span></div>
+<div class="line"><a name="l05758"></a><span class="lineno"> 5758</span>   cknull_nomsg(plist=cpl_propertylist_load(</div>
+<div class="line"><a name="l05759"></a><span class="lineno"> 5759</span>                      cpl_frame_get_filename(*sky_frm),0));</div>
+<div class="line"><a name="l05760"></a><span class="lineno"> 5760</span> </div>
+<div class="line"><a name="l05761"></a><span class="lineno"> 5761</span>   check_nomsg(xsz=sinfo_pfits_get_naxis1(plist));</div>
+<div class="line"><a name="l05762"></a><span class="lineno"> 5762</span>   check_nomsg(ysz=sinfo_pfits_get_naxis2(plist));</div>
+<div class="line"><a name="l05763"></a><span class="lineno"> 5763</span>   check_nomsg(zsz=sinfo_pfits_get_naxis3(plist));</div>
+<div class="line"><a name="l05764"></a><span class="lineno"> 5764</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l05765"></a><span class="lineno"> 5765</span> </div>
+<div class="line"><a name="l05766"></a><span class="lineno"> 5766</span>   cknull_nomsg(sky_cub=cpl_imagelist_load(cpl_frame_get_filename(*sky_frm),</div>
+<div class="line"><a name="l05767"></a><span class="lineno"> 5767</span>                                             CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l05768"></a><span class="lineno"> 5768</span> </div>
+<div class="line"><a name="l05769"></a><span class="lineno"> 5769</span>   check_nomsg(min=cpl_table_get_column_min(*int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05770"></a><span class="lineno"> 5770</span>   check_nomsg(max=cpl_table_get_column_max(*int_sky,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05771"></a><span class="lineno"> 5771</span>   int_sky_dup=cpl_table_duplicate(*int_sky);</div>
+<div class="line"><a name="l05772"></a><span class="lineno"> 5772</span>   sinfo_free_table(&(*int_sky));</div>
+<div class="line"><a name="l05773"></a><span class="lineno"> 5773</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l05774"></a><span class="lineno"> 5774</span> <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_int(int_sky_dup,</span></div>
+<div class="line"><a name="l05775"></a><span class="lineno"> 5775</span> <span class="comment">                                                     "INT", zshift,&zrest));</span></div>
+<div class="line"><a name="l05776"></a><span class="lineno"> 5776</span> <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span></div>
+<div class="line"><a name="l05777"></a><span class="lineno"> 5777</span> <span class="comment">                             "out_sky_shift1.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05778"></a><span class="lineno"> 5778</span> <span class="comment">  sinfo_free_table(&(*int_sky));</span></div>
+<div class="line"><a name="l05779"></a><span class="lineno"> 5779</span> <span class="comment"></span></div>
+<div class="line"><a name="l05780"></a><span class="lineno"> 5780</span> <span class="comment">  sinfo_msg("min=%f max=%f",min,max);</span></div>
+<div class="line"><a name="l05781"></a><span class="lineno"> 5781</span> <span class="comment">  check_nomsg(cpl_table_save(int_sky_dup, NULL, NULL,</span></div>
+<div class="line"><a name="l05782"></a><span class="lineno"> 5782</span> <span class="comment">                             "out_sky_pre2.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05783"></a><span class="lineno"> 5783</span> <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_poly(int_sky_dup,</span></div>
+<div class="line"><a name="l05784"></a><span class="lineno"> 5784</span> <span class="comment">                                                      "INT", zshift,2));</span></div>
+<div class="line"><a name="l05785"></a><span class="lineno"> 5785</span> <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span></div>
+<div class="line"><a name="l05786"></a><span class="lineno"> 5786</span> <span class="comment">                             "out_sky_shift2.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05787"></a><span class="lineno"> 5787</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l05788"></a><span class="lineno"> 5788</span>   <span class="comment">//check_nomsg(cpl_table_save(int_sky_dup, NULL, NULL,</span></div>
+<div class="line"><a name="l05789"></a><span class="lineno"> 5789</span>   <span class="comment">//                             "out_sky_pre2.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05790"></a><span class="lineno"> 5790</span>   check_nomsg(*int_sky=sinfo_table_shift_simple(int_sky_dup,<span class="stringliteral">"INT"</span>,zshift));</div>
+<div class="line"><a name="l05791"></a><span class="lineno"> 5791</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l05792"></a><span class="lineno"> 5792</span> <span class="comment">  sinfo_free_table(&(*int_sky));</span></div>
+<div class="line"><a name="l05793"></a><span class="lineno"> 5793</span> <span class="comment">  cknull_nomsg(*int_sky=sinfo_table_shift_column_spline3(int_sky_dup,</span></div>
+<div class="line"><a name="l05794"></a><span class="lineno"> 5794</span> <span class="comment">                                                         "INT", zshift));</span></div>
+<div class="line"><a name="l05795"></a><span class="lineno"> 5795</span> <span class="comment">  check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span></div>
+<div class="line"><a name="l05796"></a><span class="lineno"> 5796</span> <span class="comment">                             "out_sky_shift3.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05797"></a><span class="lineno"> 5797</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l05798"></a><span class="lineno"> 5798</span>   sinfo_free_table(&int_sky_dup);</div>
+<div class="line"><a name="l05799"></a><span class="lineno"> 5799</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l05800"></a><span class="lineno"> 5800</span> <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span></div>
+<div class="line"><a name="l05801"></a><span class="lineno"> 5801</span> <span class="comment">  check_nomsg(n=cpl_table_and_selected_double(*int_sky,"INT",</span></div>
+<div class="line"><a name="l05802"></a><span class="lineno"> 5802</span> <span class="comment">                                              CPL_LESS_THAN,min));</span></div>
+<div class="line"><a name="l05803"></a><span class="lineno"> 5803</span> <span class="comment">  ck0_nomsg(sinfo_table_set_column_invalid(int_sky,"INT"));</span></div>
+<div class="line"><a name="l05804"></a><span class="lineno"> 5804</span> <span class="comment">  sinfo_msg("n=%d",n);</span></div>
+<div class="line"><a name="l05805"></a><span class="lineno"> 5805</span> <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span></div>
+<div class="line"><a name="l05806"></a><span class="lineno"> 5806</span> <span class="comment">  check_nomsg(n=cpl_table_and_selected_double(*int_sky,"INT",</span></div>
+<div class="line"><a name="l05807"></a><span class="lineno"> 5807</span> <span class="comment">                CPL_GREATER_THAN,max));</span></div>
+<div class="line"><a name="l05808"></a><span class="lineno"> 5808</span> <span class="comment">  sinfo_msg("n=%d",n);</span></div>
+<div class="line"><a name="l05809"></a><span class="lineno"> 5809</span> <span class="comment">  ck0_nomsg(sinfo_table_set_column_invalid(int_sky,"INT"));</span></div>
+<div class="line"><a name="l05810"></a><span class="lineno"> 5810</span> <span class="comment">  check_nomsg(cpl_table_select_all(*int_sky));</span></div>
+<div class="line"><a name="l05811"></a><span class="lineno"> 5811</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l05812"></a><span class="lineno"> 5812</span>   <span class="comment">//check_nomsg(cpl_table_save(*int_sky, NULL, NULL,</span></div>
+<div class="line"><a name="l05813"></a><span class="lineno"> 5813</span>   <span class="comment">//                           "out_sky_shift3.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05814"></a><span class="lineno"> 5814</span> </div>
+<div class="line"><a name="l05815"></a><span class="lineno"> 5815</span> </div>
+<div class="line"><a name="l05816"></a><span class="lineno"> 5816</span> </div>
+<div class="line"><a name="l05817"></a><span class="lineno"> 5817</span>   check_nomsg(sky_shift=sinfo_cube_zshift_simple(sky_cub,(<span class="keywordtype">float</span>)zshift));</div>
+<div class="line"><a name="l05818"></a><span class="lineno"> 5818</span> </div>
+<div class="line"><a name="l05819"></a><span class="lineno"> 5819</span>   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift(sky_cub,zshift,&zrest));</span></div>
+<div class="line"><a name="l05820"></a><span class="lineno"> 5820</span>   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky1.fits",</span></div>
+<div class="line"><a name="l05821"></a><span class="lineno"> 5821</span>   <span class="comment">//                 CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05822"></a><span class="lineno"> 5822</span> </div>
+<div class="line"><a name="l05823"></a><span class="lineno"> 5823</span>   sinfo_free_imagelist(&sky_shift);</div>
+<div class="line"><a name="l05824"></a><span class="lineno"> 5824</span>   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span></div>
+<div class="line"><a name="l05825"></a><span class="lineno"> 5825</span>   <span class="comment">//sinfo_msg("zrest=%f",zrest);</span></div>
+<div class="line"><a name="l05826"></a><span class="lineno"> 5826</span> </div>
+<div class="line"><a name="l05827"></a><span class="lineno"> 5827</span>   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift_poly(sky_cub,zshift,2));</span></div>
+<div class="line"><a name="l05828"></a><span class="lineno"> 5828</span>   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky2.fits",</span></div>
+<div class="line"><a name="l05829"></a><span class="lineno"> 5829</span>   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05830"></a><span class="lineno"> 5830</span>   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span></div>
+<div class="line"><a name="l05831"></a><span class="lineno"> 5831</span> </div>
+<div class="line"><a name="l05832"></a><span class="lineno"> 5832</span>   <span class="comment">//check_nomsg(sky_shift=sinfo_cube_zshift_spline3(sky_cub,zshift));</span></div>
+<div class="line"><a name="l05833"></a><span class="lineno"> 5833</span>   <span class="comment">//check_nomsg(cpl_imagelist_save(sky_shift,"out_sky3.fits",</span></div>
+<div class="line"><a name="l05834"></a><span class="lineno"> 5834</span>   <span class="comment">//                               CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l05835"></a><span class="lineno"> 5835</span>   <span class="comment">//sinfo_free_imagelist(&sky_shift);</span></div>
+<div class="line"><a name="l05836"></a><span class="lineno"> 5836</span>   sinfo_free_imagelist(&sky_cub);</div>
+<div class="line"><a name="l05837"></a><span class="lineno"> 5837</span> </div>
+<div class="line"><a name="l05838"></a><span class="lineno"> 5838</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05839"></a><span class="lineno"> 5839</span> </div>
+<div class="line"><a name="l05840"></a><span class="lineno"> 5840</span>  cleanup:</div>
+<div class="line"><a name="l05841"></a><span class="lineno"> 5841</span>   sinfo_free_table(&int_sky_dup);</div>
+<div class="line"><a name="l05842"></a><span class="lineno"> 5842</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l05843"></a><span class="lineno"> 5843</span>   sinfo_free_imagelist(&sky_shift);</div>
+<div class="line"><a name="l05844"></a><span class="lineno"> 5844</span>   sinfo_free_imagelist(&sky_cub);</div>
+<div class="line"><a name="l05845"></a><span class="lineno"> 5845</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l05846"></a><span class="lineno"> 5846</span> }</div>
+<div class="line"><a name="l05847"></a><span class="lineno"> 5847</span> </div>
+<div class="line"><a name="l05848"></a><span class="lineno"> 5848</span> </div>
+<div class="line"><a name="l05855"></a><span class="lineno"> 5855</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05856"></a><span class="lineno"> 5856</span> sinfo_convolve_kernel(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad)</div>
+<div class="line"><a name="l05857"></a><span class="lineno"> 5857</span> {</div>
+<div class="line"><a name="l05858"></a><span class="lineno"> 5858</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05859"></a><span class="lineno"> 5859</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l05860"></a><span class="lineno"> 5860</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l05861"></a><span class="lineno"> 5861</span>   <span class="keywordtype">double</span> val=0;</div>
+<div class="line"><a name="l05862"></a><span class="lineno"> 5862</span>   <span class="keywordtype">double</span>* pidata=NULL;</div>
+<div class="line"><a name="l05863"></a><span class="lineno"> 5863</span>   <span class="keywordtype">double</span>* pcdata=NULL;</div>
+<div class="line"><a name="l05864"></a><span class="lineno"> 5864</span>   <span class="keywordtype">double</span> dw=0;</div>
+<div class="line"><a name="l05865"></a><span class="lineno"> 5865</span>   <span class="comment">//double dr=0;</span></div>
+<div class="line"><a name="l05866"></a><span class="lineno"> 5866</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l05867"></a><span class="lineno"> 5867</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l05868"></a><span class="lineno"> 5868</span>   cknull(*t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l05869"></a><span class="lineno"> 5869</span>   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l05870"></a><span class="lineno"> 5870</span>   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05871"></a><span class="lineno"> 5871</span>   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l05872"></a><span class="lineno"> 5872</span>   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05873"></a><span class="lineno"> 5873</span>   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05874"></a><span class="lineno"> 5874</span>   check_nomsg(np=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l05875"></a><span class="lineno"> 5875</span>   dw=(we-ws)/(np-1);</div>
+<div class="line"><a name="l05876"></a><span class="lineno"> 5876</span>   <span class="comment">//dr=(we-ws)/(rad-1);</span></div>
+<div class="line"><a name="l05877"></a><span class="lineno"> 5877</span>   <span class="comment">/* set to 0 edges */</span></div>
+<div class="line"><a name="l05878"></a><span class="lineno"> 5878</span>   <span class="keywordflow">for</span>(i=0;i<rad;i++) {</div>
+<div class="line"><a name="l05879"></a><span class="lineno"> 5879</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05880"></a><span class="lineno"> 5880</span>   }</div>
+<div class="line"><a name="l05881"></a><span class="lineno"> 5881</span>   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {</div>
+<div class="line"><a name="l05882"></a><span class="lineno"> 5882</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05883"></a><span class="lineno"> 5883</span>   }</div>
+<div class="line"><a name="l05884"></a><span class="lineno"> 5884</span>   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {</div>
+<div class="line"><a name="l05885"></a><span class="lineno"> 5885</span>     val=0;</div>
+<div class="line"><a name="l05886"></a><span class="lineno"> 5886</span>     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {</div>
+<div class="line"><a name="l05887"></a><span class="lineno"> 5887</span>       val+=pidata[i+j];</div>
+<div class="line"><a name="l05888"></a><span class="lineno"> 5888</span>     }</div>
+<div class="line"><a name="l05889"></a><span class="lineno"> 5889</span>     <span class="comment">/*val*=dw; */</span></div>
+<div class="line"><a name="l05890"></a><span class="lineno"> 5890</span>     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));</div>
+<div class="line"><a name="l05891"></a><span class="lineno"> 5891</span>   }</div>
+<div class="line"><a name="l05892"></a><span class="lineno"> 5892</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05893"></a><span class="lineno"> 5893</span> </div>
+<div class="line"><a name="l05894"></a><span class="lineno"> 5894</span>  cleanup:</div>
+<div class="line"><a name="l05895"></a><span class="lineno"> 5895</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05896"></a><span class="lineno"> 5896</span> </div>
+<div class="line"><a name="l05897"></a><span class="lineno"> 5897</span> }</div>
+<div class="line"><a name="l05898"></a><span class="lineno"> 5898</span> </div>
+<div class="line"><a name="l05899"></a><span class="lineno"> 5899</span> </div>
+<div class="line"><a name="l05900"></a><span class="lineno"> 5900</span> </div>
+<div class="line"><a name="l05908"></a><span class="lineno"> 5908</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05909"></a><span class="lineno"> 5909</span> sinfo_convolve_kernel2(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad)</div>
+<div class="line"><a name="l05910"></a><span class="lineno"> 5910</span> {</div>
+<div class="line"><a name="l05911"></a><span class="lineno"> 5911</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05912"></a><span class="lineno"> 5912</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l05913"></a><span class="lineno"> 5913</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l05914"></a><span class="lineno"> 5914</span>   <span class="keywordtype">double</span> val=0;</div>
+<div class="line"><a name="l05915"></a><span class="lineno"> 5915</span>   <span class="keywordtype">double</span>* pidata=NULL;</div>
+<div class="line"><a name="l05916"></a><span class="lineno"> 5916</span>   <span class="keywordtype">double</span>* pcdata=NULL;</div>
+<div class="line"><a name="l05917"></a><span class="lineno"> 5917</span>   <span class="keywordtype">double</span> dw=0;</div>
+<div class="line"><a name="l05918"></a><span class="lineno"> 5918</span>   <span class="keywordtype">double</span> dr=0;</div>
+<div class="line"><a name="l05919"></a><span class="lineno"> 5919</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l05920"></a><span class="lineno"> 5920</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l05921"></a><span class="lineno"> 5921</span>   cknull(*t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l05922"></a><span class="lineno"> 5922</span>   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l05923"></a><span class="lineno"> 5923</span>   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05924"></a><span class="lineno"> 5924</span>   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l05925"></a><span class="lineno"> 5925</span>   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05926"></a><span class="lineno"> 5926</span>   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05927"></a><span class="lineno"> 5927</span>   check_nomsg(np=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l05928"></a><span class="lineno"> 5928</span>   dw=(we-ws)/(np-1);</div>
+<div class="line"><a name="l05929"></a><span class="lineno"> 5929</span>   dr=(we-ws)/(rad-1);</div>
+<div class="line"><a name="l05930"></a><span class="lineno"> 5930</span>   <span class="comment">/* set to 0 edges */</span></div>
+<div class="line"><a name="l05931"></a><span class="lineno"> 5931</span>   <span class="keywordflow">for</span>(i=0;i<rad;i++) {</div>
+<div class="line"><a name="l05932"></a><span class="lineno"> 5932</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05933"></a><span class="lineno"> 5933</span>   }</div>
+<div class="line"><a name="l05934"></a><span class="lineno"> 5934</span>   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {</div>
+<div class="line"><a name="l05935"></a><span class="lineno"> 5935</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05936"></a><span class="lineno"> 5936</span>   }</div>
+<div class="line"><a name="l05937"></a><span class="lineno"> 5937</span>   <span class="keywordflow">for</span>(i=0;i<np-rad;i++) {</div>
+<div class="line"><a name="l05938"></a><span class="lineno"> 5938</span>     val=0;</div>
+<div class="line"><a name="l05939"></a><span class="lineno"> 5939</span>     <span class="keywordflow">for</span>(j=0;j<rad;j++) {</div>
+<div class="line"><a name="l05940"></a><span class="lineno"> 5940</span>       val+=pidata[i+j];</div>
+<div class="line"><a name="l05941"></a><span class="lineno"> 5941</span>     }</div>
+<div class="line"><a name="l05942"></a><span class="lineno"> 5942</span>     <span class="comment">/*val*=dw; */</span></div>
+<div class="line"><a name="l05943"></a><span class="lineno"> 5943</span>     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));</div>
+<div class="line"><a name="l05944"></a><span class="lineno"> 5944</span>   }</div>
+<div class="line"><a name="l05945"></a><span class="lineno"> 5945</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l05946"></a><span class="lineno"> 5946</span> </div>
+<div class="line"><a name="l05947"></a><span class="lineno"> 5947</span>  cleanup:</div>
+<div class="line"><a name="l05948"></a><span class="lineno"> 5948</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l05949"></a><span class="lineno"> 5949</span> </div>
+<div class="line"><a name="l05950"></a><span class="lineno"> 5950</span> }</div>
+<div class="line"><a name="l05951"></a><span class="lineno"> 5951</span> </div>
+<div class="line"><a name="l05952"></a><span class="lineno"> 5952</span> </div>
+<div class="line"><a name="l05953"></a><span class="lineno"> 5953</span> </div>
+<div class="line"><a name="l05961"></a><span class="lineno"> 5961</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l05962"></a><span class="lineno"> 5962</span> sinfo_convolve_exp(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm)</div>
+<div class="line"><a name="l05963"></a><span class="lineno"> 5963</span> {</div>
+<div class="line"><a name="l05964"></a><span class="lineno"> 5964</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l05965"></a><span class="lineno"> 5965</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l05966"></a><span class="lineno"> 5966</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l05967"></a><span class="lineno"> 5967</span>   <span class="keywordtype">double</span> ln2=0.693147180560;</div>
+<div class="line"><a name="l05968"></a><span class="lineno"> 5968</span>   <span class="keywordtype">double</span> k=ln2/fwhm;</div>
+<div class="line"><a name="l05969"></a><span class="lineno"> 5969</span>   <span class="keywordtype">double</span> val=0;</div>
+<div class="line"><a name="l05970"></a><span class="lineno"> 5970</span>   <span class="keywordtype">double</span>* pidata=NULL;</div>
+<div class="line"><a name="l05971"></a><span class="lineno"> 5971</span>   <span class="keywordtype">double</span>* pcdata=NULL;</div>
+<div class="line"><a name="l05972"></a><span class="lineno"> 5972</span>   <span class="keywordtype">double</span> dw=0;</div>
+<div class="line"><a name="l05973"></a><span class="lineno"> 5973</span>   <span class="comment">//double dr=0;</span></div>
+<div class="line"><a name="l05974"></a><span class="lineno"> 5974</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l05975"></a><span class="lineno"> 5975</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l05976"></a><span class="lineno"> 5976</span>   cknull(*t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l05977"></a><span class="lineno"> 5977</span>   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l05978"></a><span class="lineno"> 5978</span>   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l05979"></a><span class="lineno"> 5979</span>   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l05980"></a><span class="lineno"> 5980</span>   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05981"></a><span class="lineno"> 5981</span>   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l05982"></a><span class="lineno"> 5982</span>   check_nomsg(np=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l05983"></a><span class="lineno"> 5983</span>   dw=(we-ws)/(np-1);</div>
+<div class="line"><a name="l05984"></a><span class="lineno"> 5984</span>   <span class="comment">//dr=(we-ws)/(rad-1);</span></div>
+<div class="line"><a name="l05985"></a><span class="lineno"> 5985</span>   <span class="comment">/* set to 0 edges */</span></div>
+<div class="line"><a name="l05986"></a><span class="lineno"> 5986</span>   <span class="keywordflow">for</span>(i=0;i<rad;i++) {</div>
+<div class="line"><a name="l05987"></a><span class="lineno"> 5987</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05988"></a><span class="lineno"> 5988</span>   }</div>
+<div class="line"><a name="l05989"></a><span class="lineno"> 5989</span>   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {</div>
+<div class="line"><a name="l05990"></a><span class="lineno"> 5990</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l05991"></a><span class="lineno"> 5991</span>   }</div>
+<div class="line"><a name="l05992"></a><span class="lineno"> 5992</span>   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {</div>
+<div class="line"><a name="l05993"></a><span class="lineno"> 5993</span>     val=0;</div>
+<div class="line"><a name="l05994"></a><span class="lineno"> 5994</span>     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {</div>
+<div class="line"><a name="l05995"></a><span class="lineno"> 5995</span>       val+=pidata[i+j]*k*pow(2.0,-2.0*fabs(i-rad)/fwhm);</div>
+<div class="line"><a name="l05996"></a><span class="lineno"> 5996</span>     }</div>
+<div class="line"><a name="l05997"></a><span class="lineno"> 5997</span>     <span class="comment">/*val*=dw; */</span></div>
+<div class="line"><a name="l05998"></a><span class="lineno"> 5998</span>     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));</div>
+<div class="line"><a name="l05999"></a><span class="lineno"> 5999</span>   }</div>
+<div class="line"><a name="l06000"></a><span class="lineno"> 6000</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06001"></a><span class="lineno"> 6001</span> </div>
+<div class="line"><a name="l06002"></a><span class="lineno"> 6002</span>  cleanup:</div>
+<div class="line"><a name="l06003"></a><span class="lineno"> 6003</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06004"></a><span class="lineno"> 6004</span> </div>
+<div class="line"><a name="l06005"></a><span class="lineno"> 6005</span> }</div>
+<div class="line"><a name="l06006"></a><span class="lineno"> 6006</span> </div>
+<div class="line"><a name="l06007"></a><span class="lineno"> 6007</span> </div>
+<div class="line"><a name="l06016"></a><span class="lineno"> 6016</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06017"></a><span class="lineno"> 6017</span> sinfo_convolve_gauss(cpl_table** t, <span class="keyword">const</span> <span class="keywordtype">int</span> rad, <span class="keyword">const</span> <span class="keywordtype">double</span> fwhm)</div>
+<div class="line"><a name="l06018"></a><span class="lineno"> 6018</span> {</div>
+<div class="line"><a name="l06019"></a><span class="lineno"> 6019</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06020"></a><span class="lineno"> 6020</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l06021"></a><span class="lineno"> 6021</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l06022"></a><span class="lineno"> 6022</span>   <span class="keywordtype">double</span> val=0;</div>
+<div class="line"><a name="l06023"></a><span class="lineno"> 6023</span>   <span class="keywordtype">double</span> sigma=fwhm/2.3548;</div>
+<div class="line"><a name="l06024"></a><span class="lineno"> 6024</span>   <span class="keywordtype">double</span> sigma2=sigma*sigma;</div>
+<div class="line"><a name="l06025"></a><span class="lineno"> 6025</span>   <span class="keywordtype">double</span>* pidata=NULL;</div>
+<div class="line"><a name="l06026"></a><span class="lineno"> 6026</span>   <span class="keywordtype">double</span>* pcdata=NULL;</div>
+<div class="line"><a name="l06027"></a><span class="lineno"> 6027</span>   <span class="keywordtype">double</span> dw=0;</div>
+<div class="line"><a name="l06028"></a><span class="lineno"> 6028</span>   <span class="keywordtype">double</span> dr=0;</div>
+<div class="line"><a name="l06029"></a><span class="lineno"> 6029</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l06030"></a><span class="lineno"> 6030</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l06031"></a><span class="lineno"> 6031</span>   <span class="keywordtype">double</span> tx=0;</div>
+<div class="line"><a name="l06032"></a><span class="lineno"> 6032</span> </div>
+<div class="line"><a name="l06033"></a><span class="lineno"> 6033</span>   cknull(*t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l06034"></a><span class="lineno"> 6034</span>   check_nomsg(cpl_table_new_column(*t,<span class="stringliteral">"CNV"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l06035"></a><span class="lineno"> 6035</span>   check_nomsg(pidata=cpl_table_get_data_double(*t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06036"></a><span class="lineno"> 6036</span>   check_nomsg(pcdata=cpl_table_get_data_double(*t,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l06037"></a><span class="lineno"> 6037</span>   check_nomsg(ws=cpl_table_get_column_min(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l06038"></a><span class="lineno"> 6038</span>   check_nomsg(we=cpl_table_get_column_max(*t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l06039"></a><span class="lineno"> 6039</span>   check_nomsg(np=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l06040"></a><span class="lineno"> 6040</span>   dw=(we-ws)/(np-1);</div>
+<div class="line"><a name="l06041"></a><span class="lineno"> 6041</span>   dr=(we-ws)/(rad-1);</div>
+<div class="line"><a name="l06042"></a><span class="lineno"> 6042</span>   <span class="comment">/* set to 0 edges */</span></div>
+<div class="line"><a name="l06043"></a><span class="lineno"> 6043</span>   <span class="keywordflow">for</span>(i=0;i<rad;i++) {</div>
+<div class="line"><a name="l06044"></a><span class="lineno"> 6044</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l06045"></a><span class="lineno"> 6045</span>   }</div>
+<div class="line"><a name="l06046"></a><span class="lineno"> 6046</span>   <span class="keywordflow">for</span>(i=np-rad;i<np;i++) {</div>
+<div class="line"><a name="l06047"></a><span class="lineno"> 6047</span>     pcdata[i]=0.;</div>
+<div class="line"><a name="l06048"></a><span class="lineno"> 6048</span>   }</div>
+<div class="line"><a name="l06049"></a><span class="lineno"> 6049</span>   <span class="keywordflow">for</span>(i=rad;i<np-rad;i++) {</div>
+<div class="line"><a name="l06050"></a><span class="lineno"> 6050</span>     val=0;</div>
+<div class="line"><a name="l06051"></a><span class="lineno"> 6051</span>     <span class="keywordflow">for</span>(j=-rad;j<rad;j++) {</div>
+<div class="line"><a name="l06052"></a><span class="lineno"> 6052</span>       tx=i-rad;</div>
+<div class="line"><a name="l06053"></a><span class="lineno"> 6053</span>       val+=pidata[i+j]*exp(-tx*tx/2.0/sigma2)/(sigma*sqrt(2.0*PI_NUMB));</div>
+<div class="line"><a name="l06054"></a><span class="lineno"> 6054</span>     }</div>
+<div class="line"><a name="l06055"></a><span class="lineno"> 6055</span>     <span class="comment">/*val*=dw; */</span></div>
+<div class="line"><a name="l06056"></a><span class="lineno"> 6056</span>     check_nomsg(cpl_table_set_double(*t,<span class="stringliteral">"CNV"</span>,i,val));</div>
+<div class="line"><a name="l06057"></a><span class="lineno"> 6057</span>   }</div>
+<div class="line"><a name="l06058"></a><span class="lineno"> 6058</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06059"></a><span class="lineno"> 6059</span> </div>
+<div class="line"><a name="l06060"></a><span class="lineno"> 6060</span>  cleanup:</div>
+<div class="line"><a name="l06061"></a><span class="lineno"> 6061</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06062"></a><span class="lineno"> 6062</span> </div>
+<div class="line"><a name="l06063"></a><span class="lineno"> 6063</span> }</div>
+<div class="line"><a name="l06064"></a><span class="lineno"> 6064</span> </div>
+<div class="line"><a name="l06065"></a><span class="lineno"> 6065</span> </div>
+<div class="line"><a name="l06066"></a><span class="lineno"> 6066</span> </div>
+<div class="line"><a name="l06078"></a><span class="lineno"> 6078</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06079"></a><span class="lineno"> 6079</span> sinfo_scales_obj_sky_cubes(cpl_imagelist* obj_cub,</div>
+<div class="line"><a name="l06080"></a><span class="lineno"> 6080</span>                             cpl_imagelist* sky_cub,</div>
+<div class="line"><a name="l06081"></a><span class="lineno"> 6081</span>                             cpl_table* bkg,</div>
+<div class="line"><a name="l06082"></a><span class="lineno"> 6082</span>                             cpl_table* rscale,</div>
+<div class="line"><a name="l06083"></a><span class="lineno"> 6083</span>                             cpl_imagelist** obj_cor)</div>
+<div class="line"><a name="l06084"></a><span class="lineno"> 6084</span> {</div>
+<div class="line"><a name="l06085"></a><span class="lineno"> 6085</span> </div>
+<div class="line"><a name="l06086"></a><span class="lineno"> 6086</span> </div>
+<div class="line"><a name="l06087"></a><span class="lineno"> 6087</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06088"></a><span class="lineno"> 6088</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l06089"></a><span class="lineno"> 6089</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l06090"></a><span class="lineno"> 6090</span>   <span class="keywordtype">int</span> xsz=0;</div>
+<div class="line"><a name="l06091"></a><span class="lineno"> 6091</span>   <span class="keywordtype">int</span> ysz=0;</div>
+<div class="line"><a name="l06092"></a><span class="lineno"> 6092</span>   <span class="keywordtype">int</span> zsz=0;</div>
+<div class="line"><a name="l06093"></a><span class="lineno"> 6093</span> </div>
+<div class="line"><a name="l06094"></a><span class="lineno"> 6094</span>   <span class="keywordtype">double</span>* podata=NULL;</div>
+<div class="line"><a name="l06095"></a><span class="lineno"> 6095</span>   <span class="keywordtype">double</span>* psdata=NULL;</div>
+<div class="line"><a name="l06096"></a><span class="lineno"> 6096</span>   <span class="keywordtype">double</span>* pbdata=NULL;</div>
+<div class="line"><a name="l06097"></a><span class="lineno"> 6097</span>   <span class="keywordtype">double</span>* pcdata=NULL;</div>
+<div class="line"><a name="l06098"></a><span class="lineno"> 6098</span>   <span class="keywordtype">double</span>* pscale=NULL;</div>
+<div class="line"><a name="l06099"></a><span class="lineno"> 6099</span> </div>
+<div class="line"><a name="l06100"></a><span class="lineno"> 6100</span> </div>
+<div class="line"><a name="l06101"></a><span class="lineno"> 6101</span>   cpl_image* imgo=NULL;</div>
+<div class="line"><a name="l06102"></a><span class="lineno"> 6102</span>   cpl_image* imgs=NULL;</div>
+<div class="line"><a name="l06103"></a><span class="lineno"> 6103</span>   cpl_image* imgc=NULL;</div>
+<div class="line"><a name="l06104"></a><span class="lineno"> 6104</span> </div>
+<div class="line"><a name="l06105"></a><span class="lineno"> 6105</span> </div>
+<div class="line"><a name="l06106"></a><span class="lineno"> 6106</span>   check_nomsg(imgo=cpl_imagelist_get(obj_cub,0));</div>
+<div class="line"><a name="l06107"></a><span class="lineno"> 6107</span>   check_nomsg(xsz=cpl_image_get_size_x(imgo));</div>
+<div class="line"><a name="l06108"></a><span class="lineno"> 6108</span>   check_nomsg(ysz=cpl_image_get_size_y(imgo));</div>
+<div class="line"><a name="l06109"></a><span class="lineno"> 6109</span>   check_nomsg(zsz=cpl_imagelist_get_size(obj_cub));</div>
+<div class="line"><a name="l06110"></a><span class="lineno"> 6110</span> </div>
+<div class="line"><a name="l06111"></a><span class="lineno"> 6111</span>   check_nomsg(*obj_cor=cpl_imagelist_duplicate(obj_cub));</div>
+<div class="line"><a name="l06112"></a><span class="lineno"> 6112</span> </div>
+<div class="line"><a name="l06113"></a><span class="lineno"> 6113</span>   <span class="keywordflow">for</span>(k=0;k<zsz;k++) {</div>
+<div class="line"><a name="l06114"></a><span class="lineno"> 6114</span>     check_nomsg(imgo=cpl_imagelist_get(obj_cub,k));</div>
+<div class="line"><a name="l06115"></a><span class="lineno"> 6115</span>     check_nomsg(imgc=cpl_imagelist_get(*obj_cor,k));</div>
+<div class="line"><a name="l06116"></a><span class="lineno"> 6116</span>     check_nomsg(imgs=cpl_imagelist_get(sky_cub,k));</div>
+<div class="line"><a name="l06117"></a><span class="lineno"> 6117</span> </div>
+<div class="line"><a name="l06118"></a><span class="lineno"> 6118</span>     check_nomsg(podata=cpl_image_get_data_double(imgo));</div>
+<div class="line"><a name="l06119"></a><span class="lineno"> 6119</span>     check_nomsg(pcdata=cpl_image_get_data_double(imgc));</div>
+<div class="line"><a name="l06120"></a><span class="lineno"> 6120</span>     check_nomsg(psdata=cpl_image_get_data_double(imgs));</div>
+<div class="line"><a name="l06121"></a><span class="lineno"> 6121</span>     check_nomsg(pbdata=cpl_table_get_data_double(bkg,<span class="stringliteral">"INT2"</span>));</div>
+<div class="line"><a name="l06122"></a><span class="lineno"> 6122</span>     check_nomsg(pscale=cpl_table_get_data_double(rscale,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l06123"></a><span class="lineno"> 6123</span> </div>
+<div class="line"><a name="l06124"></a><span class="lineno"> 6124</span>     <span class="keywordflow">for</span> (j=0;j<ysz; j++) {</div>
+<div class="line"><a name="l06125"></a><span class="lineno"> 6125</span>       <span class="keywordflow">for</span> (i=0;i<xsz; i++) {</div>
+<div class="line"><a name="l06126"></a><span class="lineno"> 6126</span>         <span class="keywordflow">if</span>(!irplib_isnan(podata[i+j*xsz]) &&</div>
+<div class="line"><a name="l06127"></a><span class="lineno"> 6127</span>            !irplib_isnan(psdata[i+j*xsz]) &&</div>
+<div class="line"><a name="l06128"></a><span class="lineno"> 6128</span>            !irplib_isnan(pbdata[k]) &&</div>
+<div class="line"><a name="l06129"></a><span class="lineno"> 6129</span>            !irplib_isnan(pscale[k])) {</div>
+<div class="line"><a name="l06130"></a><span class="lineno"> 6130</span>     pcdata[i+j*xsz] = podata[i+j*xsz]-</div>
+<div class="line"><a name="l06131"></a><span class="lineno"> 6131</span>                           (psdata[i+j*xsz]-pbdata[k])*pscale[k];</div>
+<div class="line"><a name="l06132"></a><span class="lineno"> 6132</span>     }</div>
+<div class="line"><a name="l06133"></a><span class="lineno"> 6133</span>       }</div>
+<div class="line"><a name="l06134"></a><span class="lineno"> 6134</span>     }</div>
+<div class="line"><a name="l06135"></a><span class="lineno"> 6135</span>   }</div>
+<div class="line"><a name="l06136"></a><span class="lineno"> 6136</span> </div>
+<div class="line"><a name="l06137"></a><span class="lineno"> 6137</span> </div>
+<div class="line"><a name="l06138"></a><span class="lineno"> 6138</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06139"></a><span class="lineno"> 6139</span>  cleanup:</div>
+<div class="line"><a name="l06140"></a><span class="lineno"> 6140</span> </div>
+<div class="line"><a name="l06141"></a><span class="lineno"> 6141</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06142"></a><span class="lineno"> 6142</span> }</div>
+<div class="line"><a name="l06143"></a><span class="lineno"> 6143</span> </div>
+<div class="line"><a name="l06144"></a><span class="lineno"> 6144</span> </div>
+<div class="line"><a name="l06161"></a><span class="lineno"> 6161</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06162"></a><span class="lineno"> 6162</span> sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l06163"></a><span class="lineno"> 6163</span>              <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l06164"></a><span class="lineno"> 6164</span>              <span class="keywordtype">double</span> *result)</div>
+<div class="line"><a name="l06165"></a><span class="lineno"> 6165</span> {</div>
+<div class="line"><a name="l06166"></a><span class="lineno"> 6166</span> </div>
+<div class="line"><a name="l06167"></a><span class="lineno"> 6167</span> </div>
+<div class="line"><a name="l06168"></a><span class="lineno"> 6168</span>   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);</div>
+<div class="line"><a name="l06169"></a><span class="lineno"> 6169</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l06170"></a><span class="lineno"> 6170</span> <span class="comment">  int n=sizeof(x)/sizeof(double);</span></div>
+<div class="line"><a name="l06171"></a><span class="lineno"> 6171</span> <span class="comment">  double fmin = sinfo_fac(x[0],a[2]);</span></div>
+<div class="line"><a name="l06172"></a><span class="lineno"> 6172</span> <span class="comment">  double fmax = sinfo_fac(x[n-1],a[2]);</span></div>
+<div class="line"><a name="l06173"></a><span class="lineno"> 6173</span> <span class="comment">  sinfo_msg("n=%d",n);</span></div>
+<div class="line"><a name="l06174"></a><span class="lineno"> 6174</span> <span class="comment">  if(fmax < 0) sinfo_msg("fmax=%f",fmax);</span></div>
+<div class="line"><a name="l06175"></a><span class="lineno"> 6175</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l06176"></a><span class="lineno"> 6176</span>   <span class="comment">//*result = a[0]+a[1]*fac/sinfo_scale_fct;</span></div>
+<div class="line"><a name="l06177"></a><span class="lineno"> 6177</span>   *result = a[0]+a[1]*fac;</div>
+<div class="line"><a name="l06178"></a><span class="lineno"> 6178</span> </div>
+<div class="line"><a name="l06179"></a><span class="lineno"> 6179</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06180"></a><span class="lineno"> 6180</span> }</div>
+<div class="line"><a name="l06181"></a><span class="lineno"> 6181</span> </div>
+<div class="line"><a name="l06205"></a><span class="lineno"> 6205</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06206"></a><span class="lineno"> 6206</span> sinfo_fitbkg_derivative(<span class="keyword">const</span> <span class="keywordtype">double</span> x[],</div>
+<div class="line"><a name="l06207"></a><span class="lineno"> 6207</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> a[],</div>
+<div class="line"><a name="l06208"></a><span class="lineno"> 6208</span>                   <span class="keywordtype">double</span> d[])</div>
+<div class="line"><a name="l06209"></a><span class="lineno"> 6209</span> {</div>
+<div class="line"><a name="l06210"></a><span class="lineno"> 6210</span>   <span class="keywordtype">double</span> c=14387.7;</div>
+<div class="line"><a name="l06211"></a><span class="lineno"> 6211</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l06212"></a><span class="lineno"> 6212</span> <span class="comment">  int n=sizeof(x)/sizeof(double);</span></div>
+<div class="line"><a name="l06213"></a><span class="lineno"> 6213</span> <span class="comment">  double fmin = sinfo_fac(x[0],a[2]);</span></div>
+<div class="line"><a name="l06214"></a><span class="lineno"> 6214</span> <span class="comment">  double fmax = sinfo_fac(x[n],a[2]);</span></div>
+<div class="line"><a name="l06215"></a><span class="lineno"> 6215</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l06216"></a><span class="lineno"> 6216</span>   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);</div>
+<div class="line"><a name="l06217"></a><span class="lineno"> 6217</span>   <span class="keywordtype">double</span> f2=0;</div>
+<div class="line"><a name="l06218"></a><span class="lineno"> 6218</span>   <span class="comment">//double f1=0;</span></div>
+<div class="line"><a name="l06219"></a><span class="lineno"> 6219</span>   <span class="keywordtype">double</span> da=0.001;</div>
+<div class="line"><a name="l06220"></a><span class="lineno"> 6220</span>   <span class="comment">//f1=a[0]+a[1]*fac;</span></div>
+<div class="line"><a name="l06221"></a><span class="lineno"> 6221</span>   <span class="comment">//f2=f1+da*a[0];</span></div>
+<div class="line"><a name="l06222"></a><span class="lineno"> 6222</span>   <span class="comment">//f2=a[0]+(a[1]+da*a[1])*fac;</span></div>
+<div class="line"><a name="l06223"></a><span class="lineno"> 6223</span>   f2=a[0]+a[1]*sinfo_fac(x[0],a[2]+da*a[2]);</div>
+<div class="line"><a name="l06224"></a><span class="lineno"> 6224</span>   d[0]=1.;</div>
+<div class="line"><a name="l06225"></a><span class="lineno"> 6225</span>   d[1]=fac;</div>
+<div class="line"><a name="l06226"></a><span class="lineno"> 6226</span>   d[2]=a[1]*fac*fac*x[0]*x[0]*x[0]*x[0]*c/(a[2]*a[2])*exp(c/(x[0]*a[2]));</div>
+<div class="line"><a name="l06227"></a><span class="lineno"> 6227</span>   <span class="comment">//sinfo_msg("d0=%g d1=%g d2=%g",d[0]*a[0]/f,d[1]*a[1]/f,d[2]*a[2]/f);</span></div>
+<div class="line"><a name="l06228"></a><span class="lineno"> 6228</span>   <span class="comment">//sinfo_msg("comp d1=%g",d[2]);</span></div>
+<div class="line"><a name="l06229"></a><span class="lineno"> 6229</span>   <span class="comment">//sinfo_msg("real d1=%g",(f2-f1)/(da*a[2]));</span></div>
+<div class="line"><a name="l06230"></a><span class="lineno"> 6230</span> </div>
+<div class="line"><a name="l06231"></a><span class="lineno"> 6231</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06232"></a><span class="lineno"> 6232</span> }</div>
+<div class="line"><a name="l06233"></a><span class="lineno"> 6233</span> </div>
+<div class="line"><a name="l06234"></a><span class="lineno"> 6234</span> </div>
+<div class="line"><a name="l06235"></a><span class="lineno"> 6235</span> </div>
+<div class="line"><a name="l06249"></a><span class="lineno"> 6249</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l06250"></a><span class="lineno"> 6250</span> sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t)</div>
+<div class="line"><a name="l06251"></a><span class="lineno"> 6251</span> {</div>
+<div class="line"><a name="l06252"></a><span class="lineno"> 6252</span> </div>
+<div class="line"><a name="l06253"></a><span class="lineno"> 6253</span>   <span class="keywordtype">double</span> c=14387.7;</div>
+<div class="line"><a name="l06254"></a><span class="lineno"> 6254</span> </div>
+<div class="line"><a name="l06255"></a><span class="lineno"> 6255</span>   <span class="comment">//return pow(x,-5.)/(exp(c/(x*fabs(t)))-1.)/sinfo_scale_fct;</span></div>
+<div class="line"><a name="l06256"></a><span class="lineno"> 6256</span>   <span class="keywordflow">return</span> pow(x,-5.)/(exp(c/(x*fabs(t)))-1.);</div>
+<div class="line"><a name="l06257"></a><span class="lineno"> 6257</span> }</div>
+<div class="line"><a name="l06258"></a><span class="lineno"> 6258</span> </div>
+<div class="line"><a name="l06268"></a><span class="lineno"> 6268</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06269"></a><span class="lineno"> 6269</span> sinfo_table_threshold(cpl_table** t,</div>
+<div class="line"><a name="l06270"></a><span class="lineno"> 6270</span>                       <span class="keyword">const</span> <span class="keywordtype">char</span>* column,</div>
+<div class="line"><a name="l06271"></a><span class="lineno"> 6271</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_cut,</div>
+<div class="line"><a name="l06272"></a><span class="lineno"> 6272</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_cut,</div>
+<div class="line"><a name="l06273"></a><span class="lineno"> 6273</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> low_ass,</div>
+<div class="line"><a name="l06274"></a><span class="lineno"> 6274</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> hig_ass)</div>
+<div class="line"><a name="l06275"></a><span class="lineno"> 6275</span> {</div>
+<div class="line"><a name="l06276"></a><span class="lineno"> 6276</span> </div>
+<div class="line"><a name="l06277"></a><span class="lineno"> 6277</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l06278"></a><span class="lineno"> 6278</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06279"></a><span class="lineno"> 6279</span>   <span class="keywordtype">double</span>* pdata=NULL;</div>
+<div class="line"><a name="l06280"></a><span class="lineno"> 6280</span>   cknull(*t,<span class="stringliteral">"null input table!"</span>);</div>
+<div class="line"><a name="l06281"></a><span class="lineno"> 6281</span> </div>
+<div class="line"><a name="l06282"></a><span class="lineno"> 6282</span>   check_nomsg(nrow=cpl_table_get_nrow(*t));</div>
+<div class="line"><a name="l06283"></a><span class="lineno"> 6283</span>   check_nomsg(pdata=cpl_table_get_data_double(*t,column));</div>
+<div class="line"><a name="l06284"></a><span class="lineno"> 6284</span> </div>
+<div class="line"><a name="l06285"></a><span class="lineno"> 6285</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l06286"></a><span class="lineno"> 6286</span> </div>
+<div class="line"><a name="l06287"></a><span class="lineno"> 6287</span>     <span class="keywordflow">if</span>(pdata[i]<low_cut) {</div>
+<div class="line"><a name="l06288"></a><span class="lineno"> 6288</span>       pdata[i]=low_ass;</div>
+<div class="line"><a name="l06289"></a><span class="lineno"> 6289</span>     }</div>
+<div class="line"><a name="l06290"></a><span class="lineno"> 6290</span>     <span class="keywordflow">if</span> (pdata[i] >= hig_cut) {</div>
+<div class="line"><a name="l06291"></a><span class="lineno"> 6291</span>       pdata[i]=hig_ass;</div>
+<div class="line"><a name="l06292"></a><span class="lineno"> 6292</span>     }</div>
+<div class="line"><a name="l06293"></a><span class="lineno"> 6293</span> </div>
+<div class="line"><a name="l06294"></a><span class="lineno"> 6294</span>   }</div>
+<div class="line"><a name="l06295"></a><span class="lineno"> 6295</span> </div>
+<div class="line"><a name="l06296"></a><span class="lineno"> 6296</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06297"></a><span class="lineno"> 6297</span> </div>
+<div class="line"><a name="l06298"></a><span class="lineno"> 6298</span>  cleanup:</div>
+<div class="line"><a name="l06299"></a><span class="lineno"> 6299</span> </div>
+<div class="line"><a name="l06300"></a><span class="lineno"> 6300</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06301"></a><span class="lineno"> 6301</span> }</div>
+<div class="line"><a name="l06302"></a><span class="lineno"> 6302</span> </div>
+<div class="line"><a name="l06331"></a><span class="lineno"> 6331</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06332"></a><span class="lineno"> 6332</span> sinfo_table_set(cpl_table** inp,</div>
+<div class="line"><a name="l06333"></a><span class="lineno"> 6333</span>                 <span class="keyword">const</span> cpl_table* ref,</div>
+<div class="line"><a name="l06334"></a><span class="lineno"> 6334</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l06335"></a><span class="lineno"> 6335</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> tol)</div>
+<div class="line"><a name="l06336"></a><span class="lineno"> 6336</span> {</div>
+<div class="line"><a name="l06337"></a><span class="lineno"> 6337</span> </div>
+<div class="line"><a name="l06338"></a><span class="lineno"> 6338</span>   <span class="keywordtype">int</span> ninp=0;</div>
+<div class="line"><a name="l06339"></a><span class="lineno"> 6339</span>   <span class="keywordtype">int</span> nref=0;</div>
+<div class="line"><a name="l06340"></a><span class="lineno"> 6340</span>   <span class="keywordtype">double</span>* piw=NULL;</div>
+<div class="line"><a name="l06341"></a><span class="lineno"> 6341</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* prw=NULL;</div>
+<div class="line"><a name="l06342"></a><span class="lineno"> 6342</span>   <span class="keywordtype">double</span>* pir=NULL;</div>
+<div class="line"><a name="l06343"></a><span class="lineno"> 6343</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06344"></a><span class="lineno"> 6344</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l06345"></a><span class="lineno"> 6345</span>   cknull(*inp,<span class="stringliteral">"NULL input table"</span>);</div>
+<div class="line"><a name="l06346"></a><span class="lineno"> 6346</span>   cknull(ref,<span class="stringliteral">"NULL reference table"</span>);</div>
+<div class="line"><a name="l06347"></a><span class="lineno"> 6347</span> </div>
+<div class="line"><a name="l06348"></a><span class="lineno"> 6348</span>   check_nomsg(ninp=cpl_table_get_nrow(*inp));</div>
+<div class="line"><a name="l06349"></a><span class="lineno"> 6349</span>   check_nomsg(nref=cpl_table_get_nrow(ref));</div>
+<div class="line"><a name="l06350"></a><span class="lineno"> 6350</span> </div>
+<div class="line"><a name="l06351"></a><span class="lineno"> 6351</span>   check_nomsg(prw=cpl_table_get_data_double_const(ref,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l06352"></a><span class="lineno"> 6352</span>   check_nomsg(piw=cpl_table_get_data_double(*inp,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l06353"></a><span class="lineno"> 6353</span>   check_nomsg(pir=cpl_table_get_data_double(*inp,<span class="stringliteral">"RATIO"</span>));</div>
+<div class="line"><a name="l06354"></a><span class="lineno"> 6354</span> </div>
+<div class="line"><a name="l06355"></a><span class="lineno"> 6355</span> </div>
+<div class="line"><a name="l06356"></a><span class="lineno"> 6356</span>   <span class="keywordflow">for</span>(i=0;i<ninp;i++) {</div>
+<div class="line"><a name="l06357"></a><span class="lineno"> 6357</span>     <span class="comment">/*sinfo_msg("check =%g thresh=%g",fabs(piw[i]-prw[k]),tol); */</span></div>
+<div class="line"><a name="l06358"></a><span class="lineno"> 6358</span>     <span class="keywordflow">if</span>(fabs(piw[i]-prw[k]) < tol) {</div>
+<div class="line"><a name="l06359"></a><span class="lineno"> 6359</span>       check_nomsg(cpl_table_set_double(*inp,<span class="stringliteral">"RATIO"</span>,i,val));</div>
+<div class="line"><a name="l06360"></a><span class="lineno"> 6360</span>       k++;</div>
+<div class="line"><a name="l06361"></a><span class="lineno"> 6361</span>     }</div>
+<div class="line"><a name="l06362"></a><span class="lineno"> 6362</span>   }</div>
+<div class="line"><a name="l06363"></a><span class="lineno"> 6363</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06364"></a><span class="lineno"> 6364</span> </div>
+<div class="line"><a name="l06365"></a><span class="lineno"> 6365</span>  cleanup:</div>
+<div class="line"><a name="l06366"></a><span class="lineno"> 6366</span> </div>
+<div class="line"><a name="l06367"></a><span class="lineno"> 6367</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06368"></a><span class="lineno"> 6368</span> </div>
+<div class="line"><a name="l06369"></a><span class="lineno"> 6369</span> }</div>
+<div class="line"><a name="l06370"></a><span class="lineno"> 6370</span> </div>
+<div class="line"><a name="l06371"></a><span class="lineno"> 6371</span> </div>
+<div class="line"><a name="l06372"></a><span class="lineno"> 6372</span> </div>
+<div class="line"><a name="l06373"></a><span class="lineno"> 6373</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l06374"></a><span class="lineno"> 6374</span> sinfo_table_shift_simple(cpl_table* inp,</div>
+<div class="line"><a name="l06375"></a><span class="lineno"> 6375</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l06376"></a><span class="lineno"> 6376</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift)</div>
+<div class="line"><a name="l06377"></a><span class="lineno"> 6377</span> {</div>
+<div class="line"><a name="l06378"></a><span class="lineno"> 6378</span> </div>
+<div class="line"><a name="l06379"></a><span class="lineno"> 6379</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l06380"></a><span class="lineno"> 6380</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l06381"></a><span class="lineno"> 6381</span>   <span class="keywordtype">int</span> is=(int)shift;</div>
+<div class="line"><a name="l06382"></a><span class="lineno"> 6382</span>   <span class="keywordtype">double</span> ds=shift-is;</div>
+<div class="line"><a name="l06383"></a><span class="lineno"> 6383</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l06384"></a><span class="lineno"> 6384</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l06385"></a><span class="lineno"> 6385</span>   <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l06386"></a><span class="lineno"> 6386</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06387"></a><span class="lineno"> 6387</span>   cknull(inp,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l06388"></a><span class="lineno"> 6388</span> </div>
+<div class="line"><a name="l06389"></a><span class="lineno"> 6389</span>   check_nomsg(nrow=cpl_table_get_nrow(inp));</div>
+<div class="line"><a name="l06390"></a><span class="lineno"> 6390</span>   check_nomsg(out=cpl_table_duplicate(inp));</div>
+<div class="line"><a name="l06391"></a><span class="lineno"> 6391</span>   check_nomsg(cpl_table_fill_column_window(out,col,0,nrow,0));</div>
+<div class="line"><a name="l06392"></a><span class="lineno"> 6392</span>   check_nomsg(pi=cpl_table_get_data_double(inp,col));</div>
+<div class="line"><a name="l06393"></a><span class="lineno"> 6393</span>   check_nomsg(po=cpl_table_get_data_double(out,col));</div>
+<div class="line"><a name="l06394"></a><span class="lineno"> 6394</span> </div>
+<div class="line"><a name="l06395"></a><span class="lineno"> 6395</span> </div>
+<div class="line"><a name="l06396"></a><span class="lineno"> 6396</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l06397"></a><span class="lineno"> 6397</span>     <span class="keywordflow">if</span>((i+is)>0 && (i+is+1) < nrow) {</div>
+<div class="line"><a name="l06398"></a><span class="lineno"> 6398</span>       m=pi[i+is+1]-pi[i+is];</div>
+<div class="line"><a name="l06399"></a><span class="lineno"> 6399</span>       po[i]=pi[i+is]+m*ds;</div>
+<div class="line"><a name="l06400"></a><span class="lineno"> 6400</span>     }</div>
+<div class="line"><a name="l06401"></a><span class="lineno"> 6401</span>   }</div>
+<div class="line"><a name="l06402"></a><span class="lineno"> 6402</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l06403"></a><span class="lineno"> 6403</span>   cleanup:</div>
+<div class="line"><a name="l06404"></a><span class="lineno"> 6404</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l06405"></a><span class="lineno"> 6405</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l06406"></a><span class="lineno"> 6406</span> </div>
+<div class="line"><a name="l06407"></a><span class="lineno"> 6407</span> }</div>
+<div class="line"><a name="l06408"></a><span class="lineno"> 6408</span> </div>
+<div class="line"><a name="l06409"></a><span class="lineno"> 6409</span> </div>
+<div class="line"><a name="l06410"></a><span class="lineno"> 6410</span> </div>
+<div class="line"><a name="l06411"></a><span class="lineno"> 6411</span> </div>
+<div class="line"><a name="l06412"></a><span class="lineno"> 6412</span> <span class="keyword">static</span> cpl_imagelist*</div>
+<div class="line"><a name="l06413"></a><span class="lineno"> 6413</span> sinfo_cube_zshift_simple(cpl_imagelist* inp,</div>
+<div class="line"><a name="l06414"></a><span class="lineno"> 6414</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> shift)</div>
+<div class="line"><a name="l06415"></a><span class="lineno"> 6415</span> {</div>
+<div class="line"><a name="l06416"></a><span class="lineno"> 6416</span> </div>
+<div class="line"><a name="l06417"></a><span class="lineno"> 6417</span>   <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l06418"></a><span class="lineno"> 6418</span>   <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l06419"></a><span class="lineno"> 6419</span>   <span class="keywordtype">int</span> nz=0;</div>
+<div class="line"><a name="l06420"></a><span class="lineno"> 6420</span> </div>
+<div class="line"><a name="l06421"></a><span class="lineno"> 6421</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06422"></a><span class="lineno"> 6422</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l06423"></a><span class="lineno"> 6423</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l06424"></a><span class="lineno"> 6424</span>   <span class="keywordtype">int</span> ks=(int)shift;</div>
+<div class="line"><a name="l06425"></a><span class="lineno"> 6425</span> </div>
+<div class="line"><a name="l06426"></a><span class="lineno"> 6426</span>   <span class="keywordtype">float</span> ds=shift-ks;</div>
+<div class="line"><a name="l06427"></a><span class="lineno"> 6427</span>   <span class="keywordtype">float</span>* pu=NULL;</div>
+<div class="line"><a name="l06428"></a><span class="lineno"> 6428</span>   <span class="keywordtype">float</span>* pl=NULL;</div>
+<div class="line"><a name="l06429"></a><span class="lineno"> 6429</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l06430"></a><span class="lineno"> 6430</span> </div>
+<div class="line"><a name="l06431"></a><span class="lineno"> 6431</span>   <span class="keywordtype">float</span>  int2=0;</div>
+<div class="line"><a name="l06432"></a><span class="lineno"> 6432</span>   <span class="keywordtype">float</span>  int1=0;</div>
+<div class="line"><a name="l06433"></a><span class="lineno"> 6433</span>   <span class="keywordtype">float</span> m=0;</div>
+<div class="line"><a name="l06434"></a><span class="lineno"> 6434</span> </div>
+<div class="line"><a name="l06435"></a><span class="lineno"> 6435</span>   cpl_imagelist* out=NULL;</div>
+<div class="line"><a name="l06436"></a><span class="lineno"> 6436</span>   cpl_image* imgu=NULL;</div>
+<div class="line"><a name="l06437"></a><span class="lineno"> 6437</span>   cpl_image* imgl=NULL;</div>
+<div class="line"><a name="l06438"></a><span class="lineno"> 6438</span>   cpl_image* imgo=NULL;</div>
+<div class="line"><a name="l06439"></a><span class="lineno"> 6439</span> </div>
+<div class="line"><a name="l06440"></a><span class="lineno"> 6440</span> </div>
+<div class="line"><a name="l06441"></a><span class="lineno"> 6441</span>   cknull(inp,<span class="stringliteral">"null input cube"</span>);</div>
+<div class="line"><a name="l06442"></a><span class="lineno"> 6442</span> </div>
+<div class="line"><a name="l06443"></a><span class="lineno"> 6443</span>   check_nomsg(nz=cpl_imagelist_get_size(inp));</div>
+<div class="line"><a name="l06444"></a><span class="lineno"> 6444</span>   check_nomsg(out=cpl_imagelist_duplicate(inp));</div>
+<div class="line"><a name="l06445"></a><span class="lineno"> 6445</span>   check_nomsg(imgo=cpl_imagelist_get(out,0));</div>
+<div class="line"><a name="l06446"></a><span class="lineno"> 6446</span>   check_nomsg(nx=cpl_image_get_size_x(imgo));</div>
+<div class="line"><a name="l06447"></a><span class="lineno"> 6447</span>   check_nomsg(ny=cpl_image_get_size_y(imgo));</div>
+<div class="line"><a name="l06448"></a><span class="lineno"> 6448</span> </div>
+<div class="line"><a name="l06449"></a><span class="lineno"> 6449</span>   <span class="keywordflow">for</span>(k=0;k<nz;k++) {</div>
+<div class="line"><a name="l06450"></a><span class="lineno"> 6450</span>     <span class="keywordflow">if</span>((k+ks)>0 && (k+ks+1) < nz) {</div>
+<div class="line"><a name="l06451"></a><span class="lineno"> 6451</span> </div>
+<div class="line"><a name="l06452"></a><span class="lineno"> 6452</span>       check_nomsg(imgu=cpl_imagelist_get(inp,k+ks+1));</div>
+<div class="line"><a name="l06453"></a><span class="lineno"> 6453</span>       check_nomsg(imgl=cpl_imagelist_get(inp,k+ks));</div>
+<div class="line"><a name="l06454"></a><span class="lineno"> 6454</span>       check_nomsg(imgo=cpl_imagelist_get(out,k));</div>
+<div class="line"><a name="l06455"></a><span class="lineno"> 6455</span> </div>
+<div class="line"><a name="l06456"></a><span class="lineno"> 6456</span>       check_nomsg(pu=cpl_image_get_data_float(imgu));</div>
+<div class="line"><a name="l06457"></a><span class="lineno"> 6457</span>       check_nomsg(pl=cpl_image_get_data_float(imgl));</div>
+<div class="line"><a name="l06458"></a><span class="lineno"> 6458</span>       check_nomsg(po=cpl_image_get_data_float(imgo));</div>
+<div class="line"><a name="l06459"></a><span class="lineno"> 6459</span> </div>
+<div class="line"><a name="l06460"></a><span class="lineno"> 6460</span> </div>
+<div class="line"><a name="l06461"></a><span class="lineno"> 6461</span>       <span class="keywordflow">for</span>(j=0;j<ny;j++) {</div>
+<div class="line"><a name="l06462"></a><span class="lineno"> 6462</span>     <span class="keywordflow">for</span>(i=0;i<nx;i++) {</div>
+<div class="line"><a name="l06463"></a><span class="lineno"> 6463</span>           int2=pu[nx*j+i];</div>
+<div class="line"><a name="l06464"></a><span class="lineno"> 6464</span>           int1=pl[nx*j+i];</div>
+<div class="line"><a name="l06465"></a><span class="lineno"> 6465</span>       m=int2-int1;</div>
+<div class="line"><a name="l06466"></a><span class="lineno"> 6466</span>       po[nx*j+i]=int1+m*ds;</div>
+<div class="line"><a name="l06467"></a><span class="lineno"> 6467</span>     }</div>
+<div class="line"><a name="l06468"></a><span class="lineno"> 6468</span>       }</div>
+<div class="line"><a name="l06469"></a><span class="lineno"> 6469</span>     }</div>
+<div class="line"><a name="l06470"></a><span class="lineno"> 6470</span> </div>
+<div class="line"><a name="l06471"></a><span class="lineno"> 6471</span> </div>
+<div class="line"><a name="l06472"></a><span class="lineno"> 6472</span>   }</div>
+<div class="line"><a name="l06473"></a><span class="lineno"> 6473</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l06474"></a><span class="lineno"> 6474</span>   cleanup:</div>
+<div class="line"><a name="l06475"></a><span class="lineno"> 6475</span>   sinfo_free_imagelist(&out);</div>
+<div class="line"><a name="l06476"></a><span class="lineno"> 6476</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l06477"></a><span class="lineno"> 6477</span> </div>
+<div class="line"><a name="l06478"></a><span class="lineno"> 6478</span> }</div>
+<div class="line"><a name="l06479"></a><span class="lineno"> 6479</span> </div>
+<div class="line"><a name="l06480"></a><span class="lineno"> 6480</span> </div>
+<div class="line"><a name="l06491"></a><span class="lineno"> 6491</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06492"></a><span class="lineno"> 6492</span> sinfo_get_line_ratio(cpl_table* obj_lin,</div>
+<div class="line"><a name="l06493"></a><span class="lineno"> 6493</span>                       cpl_table* obj_cnt,</div>
+<div class="line"><a name="l06494"></a><span class="lineno"> 6494</span>                       cpl_table* sky_lin,</div>
+<div class="line"><a name="l06495"></a><span class="lineno"> 6495</span>                       cpl_table* sky_cnt,</div>
+<div class="line"><a name="l06496"></a><span class="lineno"> 6496</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> method,</div>
+<div class="line"><a name="l06497"></a><span class="lineno"> 6497</span>                       <span class="keywordtype">double</span>* r)</div>
+<div class="line"><a name="l06498"></a><span class="lineno"> 6498</span> {</div>
+<div class="line"><a name="l06499"></a><span class="lineno"> 6499</span> </div>
+<div class="line"><a name="l06500"></a><span class="lineno"> 6500</span>   <span class="keywordtype">int</span> nobj;</div>
+<div class="line"><a name="l06501"></a><span class="lineno"> 6501</span>   <span class="keywordtype">int</span> nsky;</div>
+<div class="line"><a name="l06502"></a><span class="lineno"> 6502</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06503"></a><span class="lineno"> 6503</span> </div>
+<div class="line"><a name="l06504"></a><span class="lineno"> 6504</span>   cpl_table* obj_dif=NULL;</div>
+<div class="line"><a name="l06505"></a><span class="lineno"> 6505</span>   cpl_table* sky_dif=NULL;</div>
+<div class="line"><a name="l06506"></a><span class="lineno"> 6506</span> </div>
+<div class="line"><a name="l06507"></a><span class="lineno"> 6507</span>   <span class="keywordtype">double</span>* poi=NULL;</div>
+<div class="line"><a name="l06508"></a><span class="lineno"> 6508</span>   <span class="keywordtype">double</span>* psi=NULL;</div>
+<div class="line"><a name="l06509"></a><span class="lineno"> 6509</span>   <span class="keywordtype">double</span>* pvd=NULL;</div>
+<div class="line"><a name="l06510"></a><span class="lineno"> 6510</span>   <span class="keywordtype">double</span>* pvn=NULL;</div>
+<div class="line"><a name="l06511"></a><span class="lineno"> 6511</span>   <span class="keywordtype">double</span>* pvr=NULL;</div>
+<div class="line"><a name="l06512"></a><span class="lineno"> 6512</span> </div>
+<div class="line"><a name="l06513"></a><span class="lineno"> 6513</span>   cpl_vector* num=NULL;</div>
+<div class="line"><a name="l06514"></a><span class="lineno"> 6514</span>   cpl_vector* den=NULL;</div>
+<div class="line"><a name="l06515"></a><span class="lineno"> 6515</span>   cpl_vector* rat=NULL;</div>
+<div class="line"><a name="l06516"></a><span class="lineno"> 6516</span>   cpl_vector* wav=NULL;</div>
+<div class="line"><a name="l06517"></a><span class="lineno"> 6517</span>   <span class="keywordtype">double</span> mnum=0;</div>
+<div class="line"><a name="l06518"></a><span class="lineno"> 6518</span>   <span class="keywordtype">double</span> mden=0;</div>
+<div class="line"><a name="l06519"></a><span class="lineno"> 6519</span>   <span class="keywordtype">double</span> tnum=0;</div>
+<div class="line"><a name="l06520"></a><span class="lineno"> 6520</span>   <span class="keywordtype">double</span> tden=0;</div>
+<div class="line"><a name="l06521"></a><span class="lineno"> 6521</span>   cpl_size pows[2];</div>
+<div class="line"><a name="l06522"></a><span class="lineno"> 6522</span>   cpl_polynomial* cfit=NULL;</div>
+<div class="line"><a name="l06523"></a><span class="lineno"> 6523</span>   <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l06524"></a><span class="lineno"> 6524</span> </div>
+<div class="line"><a name="l06525"></a><span class="lineno"> 6525</span>   cknull(obj_lin,<span class="stringliteral">"null obj line table"</span>);</div>
+<div class="line"><a name="l06526"></a><span class="lineno"> 6526</span>   cknull(sky_lin,<span class="stringliteral">"null sky line table"</span>);</div>
+<div class="line"><a name="l06527"></a><span class="lineno"> 6527</span> </div>
+<div class="line"><a name="l06528"></a><span class="lineno"> 6528</span>   cknull(obj_cnt,<span class="stringliteral">"null obj cont table"</span>);</div>
+<div class="line"><a name="l06529"></a><span class="lineno"> 6529</span>   cknull(sky_cnt,<span class="stringliteral">"null sky cont table"</span>);</div>
+<div class="line"><a name="l06530"></a><span class="lineno"> 6530</span> </div>
+<div class="line"><a name="l06531"></a><span class="lineno"> 6531</span> </div>
+<div class="line"><a name="l06532"></a><span class="lineno"> 6532</span>   cknull_nomsg(obj_dif=sinfo_table_subtract_continuum(obj_lin,obj_cnt));</div>
+<div class="line"><a name="l06533"></a><span class="lineno"> 6533</span>   cknull_nomsg(sky_dif=sinfo_table_subtract_continuum(sky_lin,sky_cnt));</div>
+<div class="line"><a name="l06534"></a><span class="lineno"> 6534</span> </div>
+<div class="line"><a name="l06535"></a><span class="lineno"> 6535</span>   check_nomsg(nobj=cpl_table_get_nrow(obj_dif));</div>
+<div class="line"><a name="l06536"></a><span class="lineno"> 6536</span>   check_nomsg(nsky=cpl_table_get_nrow(sky_dif));</div>
+<div class="line"><a name="l06537"></a><span class="lineno"> 6537</span> </div>
+<div class="line"><a name="l06538"></a><span class="lineno"> 6538</span> </div>
+<div class="line"><a name="l06539"></a><span class="lineno"> 6539</span> </div>
+<div class="line"><a name="l06540"></a><span class="lineno"> 6540</span>   <span class="keywordflow">if</span>(nobj != nsky) {</div>
+<div class="line"><a name="l06541"></a><span class="lineno"> 6541</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"obj and sky table must have the same no of rows!"</span>);</div>
+<div class="line"><a name="l06542"></a><span class="lineno"> 6542</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"nobj=%d nsky=%d"</span>,nobj,nsky);</div>
+<div class="line"><a name="l06543"></a><span class="lineno"> 6543</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l06544"></a><span class="lineno"> 6544</span>   }</div>
+<div class="line"><a name="l06545"></a><span class="lineno"> 6545</span>   <span class="comment">//sinfo_msg("Object sky residuals/Sky lines ratio determination method=%d",</span></div>
+<div class="line"><a name="l06546"></a><span class="lineno"> 6546</span>   <span class="comment">//          method);</span></div>
+<div class="line"><a name="l06547"></a><span class="lineno"> 6547</span>   <span class="keywordflow">if</span>(method == 0) {</div>
+<div class="line"><a name="l06548"></a><span class="lineno"> 6548</span>     ck0_nomsg(sinfo_get_line_ratio_amoeba(obj_dif,sky_dif,r));</div>
+<div class="line"><a name="l06549"></a><span class="lineno"> 6549</span>     sinfo_free_table(&obj_dif);</div>
+<div class="line"><a name="l06550"></a><span class="lineno"> 6550</span>     sinfo_free_table(&sky_dif);</div>
+<div class="line"><a name="l06551"></a><span class="lineno"> 6551</span>    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06552"></a><span class="lineno"> 6552</span>   }</div>
+<div class="line"><a name="l06553"></a><span class="lineno"> 6553</span> </div>
+<div class="line"><a name="l06554"></a><span class="lineno"> 6554</span> </div>
+<div class="line"><a name="l06555"></a><span class="lineno"> 6555</span>   check_nomsg(poi=cpl_table_get_data_double(obj_dif,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06556"></a><span class="lineno"> 6556</span>   check_nomsg(psi=cpl_table_get_data_double(sky_dif,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06557"></a><span class="lineno"> 6557</span> </div>
+<div class="line"><a name="l06558"></a><span class="lineno"> 6558</span>   check_nomsg(num=cpl_vector_new(nobj));</div>
+<div class="line"><a name="l06559"></a><span class="lineno"> 6559</span>   check_nomsg(den=cpl_vector_new(nobj));</div>
+<div class="line"><a name="l06560"></a><span class="lineno"> 6560</span>   check_nomsg(rat=cpl_vector_new(nobj));</div>
+<div class="line"><a name="l06561"></a><span class="lineno"> 6561</span>   check_nomsg(cpl_vector_fill(num,0));</div>
+<div class="line"><a name="l06562"></a><span class="lineno"> 6562</span>   check_nomsg(cpl_vector_fill(den,0));</div>
+<div class="line"><a name="l06563"></a><span class="lineno"> 6563</span>   check_nomsg(cpl_vector_fill(rat,0));</div>
+<div class="line"><a name="l06564"></a><span class="lineno"> 6564</span>   check_nomsg(pvd=cpl_vector_get_data(den));</div>
+<div class="line"><a name="l06565"></a><span class="lineno"> 6565</span>   check_nomsg(pvn=cpl_vector_get_data(num));</div>
+<div class="line"><a name="l06566"></a><span class="lineno"> 6566</span>   check_nomsg(pvr=cpl_vector_get_data(rat));</div>
+<div class="line"><a name="l06567"></a><span class="lineno"> 6567</span> </div>
+<div class="line"><a name="l06568"></a><span class="lineno"> 6568</span>   <span class="keywordflow">for</span>(i=0;i<nobj;i++) {</div>
+<div class="line"><a name="l06569"></a><span class="lineno"> 6569</span>     <span class="keywordflow">if</span>(!irplib_isnan(psi[i]) &&</div>
+<div class="line"><a name="l06570"></a><span class="lineno"> 6570</span>        !irplib_isnan(poi[i]) &&</div>
+<div class="line"><a name="l06571"></a><span class="lineno"> 6571</span>        !irplib_isinf(psi[i]) &&</div>
+<div class="line"><a name="l06572"></a><span class="lineno"> 6572</span>        !irplib_isinf(poi[i]) ) {</div>
+<div class="line"><a name="l06573"></a><span class="lineno"> 6573</span>       pvn[i]=psi[i]*poi[i];</div>
+<div class="line"><a name="l06574"></a><span class="lineno"> 6574</span>       pvd[i]=psi[i]*psi[i];</div>
+<div class="line"><a name="l06575"></a><span class="lineno"> 6575</span>       <span class="keywordflow">if</span>(psi[i] != 0) {</div>
+<div class="line"><a name="l06576"></a><span class="lineno"> 6576</span>          pvr[i]=poi[i]/psi[i];</div>
+<div class="line"><a name="l06577"></a><span class="lineno"> 6577</span>       }</div>
+<div class="line"><a name="l06578"></a><span class="lineno"> 6578</span>     }</div>
+<div class="line"><a name="l06579"></a><span class="lineno"> 6579</span>   }</div>
+<div class="line"><a name="l06580"></a><span class="lineno"> 6580</span>   sinfo_free_table(&sky_dif);</div>
+<div class="line"><a name="l06581"></a><span class="lineno"> 6581</span> </div>
+<div class="line"><a name="l06582"></a><span class="lineno"> 6582</span>   check_nomsg(mnum=cpl_vector_get_median_const(num));</div>
+<div class="line"><a name="l06583"></a><span class="lineno"> 6583</span>   check_nomsg(mden=cpl_vector_get_median_const(den));</div>
+<div class="line"><a name="l06584"></a><span class="lineno"> 6584</span>   check_nomsg(tnum=cpl_vector_get_mean(num)*nobj);</div>
+<div class="line"><a name="l06585"></a><span class="lineno"> 6585</span>   check_nomsg(tden=cpl_vector_get_mean(den)*nobj);</div>
+<div class="line"><a name="l06586"></a><span class="lineno"> 6586</span> </div>
+<div class="line"><a name="l06587"></a><span class="lineno"> 6587</span>   <span class="comment">//sinfo_msg("mden=%g tden=%g",mden,tden);</span></div>
+<div class="line"><a name="l06588"></a><span class="lineno"> 6588</span>   <span class="comment">//sinfo_msg("mnum=%g tnum=%g",mnum,tnum);</span></div>
+<div class="line"><a name="l06589"></a><span class="lineno"> 6589</span>   sinfo_free_my_vector(&num);</div>
+<div class="line"><a name="l06590"></a><span class="lineno"> 6590</span>   sinfo_free_my_vector(&den);</div>
+<div class="line"><a name="l06591"></a><span class="lineno"> 6591</span>   <span class="keywordflow">if</span>(method == 1) {</div>
+<div class="line"><a name="l06592"></a><span class="lineno"> 6592</span>     *r=tnum/tden;</div>
+<div class="line"><a name="l06593"></a><span class="lineno"> 6593</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 2) {</div>
+<div class="line"><a name="l06594"></a><span class="lineno"> 6594</span>     *r=mnum/mden;</div>
+<div class="line"><a name="l06595"></a><span class="lineno"> 6595</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 3) {</div>
+<div class="line"><a name="l06596"></a><span class="lineno"> 6596</span>     *r=cpl_vector_get_median_const(rat);</div>
+<div class="line"><a name="l06597"></a><span class="lineno"> 6597</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 4) {</div>
+<div class="line"><a name="l06598"></a><span class="lineno"> 6598</span>     *r=cpl_vector_get_mean(rat);</div>
+<div class="line"><a name="l06599"></a><span class="lineno"> 6599</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == 5) {</div>
+<div class="line"><a name="l06600"></a><span class="lineno"> 6600</span> </div>
+<div class="line"><a name="l06601"></a><span class="lineno"> 6601</span>     check_nomsg(wav=cpl_vector_wrap(nobj,</div>
+<div class="line"><a name="l06602"></a><span class="lineno"> 6602</span>                     cpl_table_get_data_double(obj_dif,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l06603"></a><span class="lineno"> 6603</span>     check_nomsg(cfit=sinfo_polynomial_fit_1d_create(wav,rat,0,&mse));</div>
+<div class="line"><a name="l06604"></a><span class="lineno"> 6604</span>     sinfo_unwrap_vector(&wav);</div>
+<div class="line"><a name="l06605"></a><span class="lineno"> 6605</span>     pows[0]=0;</div>
+<div class="line"><a name="l06606"></a><span class="lineno"> 6606</span>     pows[1]=0;</div>
+<div class="line"><a name="l06607"></a><span class="lineno"> 6607</span>     check_nomsg(*r=cpl_polynomial_get_coeff(cfit,pows));</div>
+<div class="line"><a name="l06608"></a><span class="lineno"> 6608</span>     sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l06609"></a><span class="lineno"> 6609</span> </div>
+<div class="line"><a name="l06610"></a><span class="lineno"> 6610</span>   }</div>
+<div class="line"><a name="l06611"></a><span class="lineno"> 6611</span> </div>
+<div class="line"><a name="l06612"></a><span class="lineno"> 6612</span>   sinfo_free_table(&obj_dif);</div>
+<div class="line"><a name="l06613"></a><span class="lineno"> 6613</span>   sinfo_free_my_vector(&rat);</div>
+<div class="line"><a name="l06614"></a><span class="lineno"> 6614</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06615"></a><span class="lineno"> 6615</span>  cleanup:</div>
+<div class="line"><a name="l06616"></a><span class="lineno"> 6616</span>   sinfo_free_table(&obj_dif);</div>
+<div class="line"><a name="l06617"></a><span class="lineno"> 6617</span>   sinfo_free_table(&sky_dif);</div>
+<div class="line"><a name="l06618"></a><span class="lineno"> 6618</span>   sinfo_free_my_vector(&num);</div>
+<div class="line"><a name="l06619"></a><span class="lineno"> 6619</span>   sinfo_free_my_vector(&den);</div>
+<div class="line"><a name="l06620"></a><span class="lineno"> 6620</span>   sinfo_free_my_vector(&rat);</div>
+<div class="line"><a name="l06621"></a><span class="lineno"> 6621</span>   sinfo_unwrap_vector(&wav);</div>
+<div class="line"><a name="l06622"></a><span class="lineno"> 6622</span> </div>
+<div class="line"><a name="l06623"></a><span class="lineno"> 6623</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06624"></a><span class="lineno"> 6624</span> }</div>
+<div class="line"><a name="l06625"></a><span class="lineno"> 6625</span> </div>
+<div class="line"><a name="l06626"></a><span class="lineno"> 6626</span> </div>
+<div class="line"><a name="l06627"></a><span class="lineno"> 6627</span> </div>
+<div class="line"><a name="l06628"></a><span class="lineno"> 6628</span> </div>
+<div class="line"><a name="l06638"></a><span class="lineno"> 6638</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06639"></a><span class="lineno"> 6639</span> sinfo_get_line_ratio_amoeba(cpl_table* obj,</div>
+<div class="line"><a name="l06640"></a><span class="lineno"> 6640</span>                             cpl_table* sky,</div>
+<div class="line"><a name="l06641"></a><span class="lineno"> 6641</span>                             <span class="keywordtype">double</span>* r)</div>
+<div class="line"><a name="l06642"></a><span class="lineno"> 6642</span> {</div>
+<div class="line"><a name="l06643"></a><span class="lineno"> 6643</span> </div>
+<div class="line"><a name="l06644"></a><span class="lineno"> 6644</span> </div>
+<div class="line"><a name="l06645"></a><span class="lineno"> 6645</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06646"></a><span class="lineno"> 6646</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=2;</div>
+<div class="line"><a name="l06647"></a><span class="lineno"> 6647</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=1;</div>
+<div class="line"><a name="l06648"></a><span class="lineno"> 6648</span>   <span class="keywordtype">double</span> y[MP];</div>
+<div class="line"><a name="l06649"></a><span class="lineno"> 6649</span>   <span class="keywordtype">double</span> p0[NP];</div>
+<div class="line"><a name="l06650"></a><span class="lineno"> 6650</span>   <span class="keywordtype">double</span>** ap=NULL;</div>
+<div class="line"><a name="l06651"></a><span class="lineno"> 6651</span>   <span class="keywordtype">int</span> nfunc=0;</div>
+<div class="line"><a name="l06652"></a><span class="lineno"> 6652</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l06653"></a><span class="lineno"> 6653</span>   check_nomsg(np=cpl_table_get_nrow(obj));</div>
+<div class="line"><a name="l06654"></a><span class="lineno"> 6654</span>   check_nomsg(sa_ox=cpl_vector_wrap(np,cpl_table_get_data_double(obj,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l06655"></a><span class="lineno"> 6655</span>   check_nomsg(sa_oy=cpl_vector_wrap(np,cpl_table_get_data_double(obj,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l06656"></a><span class="lineno"> 6656</span>   check_nomsg(sa_sy=cpl_vector_wrap(np,cpl_table_get_data_double(sky,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l06657"></a><span class="lineno"> 6657</span>   <span class="comment">// Amoeba part</span></div>
+<div class="line"><a name="l06658"></a><span class="lineno"> 6658</span> </div>
+<div class="line"><a name="l06659"></a><span class="lineno"> 6659</span> </div>
+<div class="line"><a name="l06660"></a><span class="lineno"> 6660</span>   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l06661"></a><span class="lineno"> 6661</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l06662"></a><span class="lineno"> 6662</span>     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l06663"></a><span class="lineno"> 6663</span>   }</div>
+<div class="line"><a name="l06664"></a><span class="lineno"> 6664</span> </div>
+<div class="line"><a name="l06665"></a><span class="lineno"> 6665</span>   ap[0][0]=-1.;</div>
+<div class="line"><a name="l06666"></a><span class="lineno"> 6666</span>   ap[1][0]=+1.;</div>
+<div class="line"><a name="l06667"></a><span class="lineno"> 6667</span> </div>
+<div class="line"><a name="l06668"></a><span class="lineno"> 6668</span>   <span class="comment">//sinfo_msg("Before amoeba fit");</span></div>
+<div class="line"><a name="l06669"></a><span class="lineno"> 6669</span>   <span class="comment">//sinfo_msg("ap[0][0]=%g ap[0][1]=%g",ap[0][0],ap[1][0]);</span></div>
+<div class="line"><a name="l06670"></a><span class="lineno"> 6670</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l06671"></a><span class="lineno"> 6671</span>     p0[0]=ap[i][0];</div>
+<div class="line"><a name="l06672"></a><span class="lineno"> 6672</span>     y[i]=sinfo_fit_sky(p0);</div>
+<div class="line"><a name="l06673"></a><span class="lineno"> 6673</span>   }</div>
+<div class="line"><a name="l06674"></a><span class="lineno"> 6674</span> </div>
+<div class="line"><a name="l06675"></a><span class="lineno"> 6675</span> </div>
+<div class="line"><a name="l06676"></a><span class="lineno"> 6676</span>   check_nomsg(sinfo_fit_amoeba(ap,y,NP,AMOEBA_FTOL,sinfo_fit_sky,&nfunc));</div>
+<div class="line"><a name="l06677"></a><span class="lineno"> 6677</span> </div>
+<div class="line"><a name="l06678"></a><span class="lineno"> 6678</span>   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);</div>
+<div class="line"><a name="l06679"></a><span class="lineno"> 6679</span>   sinfo_msg(<span class="stringliteral">"ap[0][0]=%g ap[0][1]=%g"</span>,ap[0][0],ap[1][0]);</div>
+<div class="line"><a name="l06680"></a><span class="lineno"> 6680</span> </div>
+<div class="line"><a name="l06681"></a><span class="lineno"> 6681</span>   *r=ap[0][0];</div>
+<div class="line"><a name="l06682"></a><span class="lineno"> 6682</span> </div>
+<div class="line"><a name="l06683"></a><span class="lineno"> 6683</span>   sinfo_unwrap_vector(&sa_ox);</div>
+<div class="line"><a name="l06684"></a><span class="lineno"> 6684</span>   sinfo_unwrap_vector(&sa_oy);</div>
+<div class="line"><a name="l06685"></a><span class="lineno"> 6685</span>   sinfo_unwrap_vector(&sa_sy);</div>
+<div class="line"><a name="l06686"></a><span class="lineno"> 6686</span>   sinfo_new_destroy_2Ddoublearray(&ap,MP);</div>
+<div class="line"><a name="l06687"></a><span class="lineno"> 6687</span> </div>
+<div class="line"><a name="l06688"></a><span class="lineno"> 6688</span> </div>
+<div class="line"><a name="l06689"></a><span class="lineno"> 6689</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06690"></a><span class="lineno"> 6690</span> </div>
+<div class="line"><a name="l06691"></a><span class="lineno"> 6691</span>  cleanup:</div>
+<div class="line"><a name="l06692"></a><span class="lineno"> 6692</span>   sinfo_unwrap_vector(&sa_ox);</div>
+<div class="line"><a name="l06693"></a><span class="lineno"> 6693</span>   sinfo_unwrap_vector(&sa_oy);</div>
+<div class="line"><a name="l06694"></a><span class="lineno"> 6694</span>   sinfo_unwrap_vector(&sa_sy);</div>
+<div class="line"><a name="l06695"></a><span class="lineno"> 6695</span>   sinfo_new_destroy_2Ddoublearray(&ap,MP);</div>
+<div class="line"><a name="l06696"></a><span class="lineno"> 6696</span> </div>
+<div class="line"><a name="l06697"></a><span class="lineno"> 6697</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06698"></a><span class="lineno"> 6698</span> </div>
+<div class="line"><a name="l06699"></a><span class="lineno"> 6699</span> }</div>
+<div class="line"><a name="l06700"></a><span class="lineno"> 6700</span> </div>
+<div class="line"><a name="l06701"></a><span class="lineno"> 6701</span> </div>
+<div class="line"><a name="l06702"></a><span class="lineno"> 6702</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l06711"></a><span class="lineno"> 6711</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l06712"></a><span class="lineno"> 6712</span> </div>
+<div class="line"><a name="l06713"></a><span class="lineno"> 6713</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l06714"></a><span class="lineno"> 6714</span> sinfo_fit_sky(<span class="keywordtype">double</span> p[])</div>
+<div class="line"><a name="l06715"></a><span class="lineno"> 6715</span> </div>
+<div class="line"><a name="l06716"></a><span class="lineno"> 6716</span> {</div>
+<div class="line"><a name="l06717"></a><span class="lineno"> 6717</span>   <span class="keywordtype">double</span>* ps=NULL;</div>
+<div class="line"><a name="l06718"></a><span class="lineno"> 6718</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l06719"></a><span class="lineno"> 6719</span>   <span class="keywordtype">double</span>* pv=NULL;</div>
+<div class="line"><a name="l06720"></a><span class="lineno"> 6720</span>   cpl_vector* vtmp=NULL;</div>
+<div class="line"><a name="l06721"></a><span class="lineno"> 6721</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06722"></a><span class="lineno"> 6722</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l06723"></a><span class="lineno"> 6723</span>   cpl_size pows[2];</div>
+<div class="line"><a name="l06724"></a><span class="lineno"> 6724</span>   <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l06725"></a><span class="lineno"> 6725</span>   <span class="keywordtype">double</span> cont=0;</div>
+<div class="line"><a name="l06726"></a><span class="lineno"> 6726</span>   cpl_polynomial* pfit=NULL;</div>
+<div class="line"><a name="l06727"></a><span class="lineno"> 6727</span> </div>
+<div class="line"><a name="l06728"></a><span class="lineno"> 6728</span>   <span class="keywordtype">double</span> rms=0;</div>
+<div class="line"><a name="l06729"></a><span class="lineno"> 6729</span> </div>
+<div class="line"><a name="l06730"></a><span class="lineno"> 6730</span> </div>
+<div class="line"><a name="l06731"></a><span class="lineno"> 6731</span>   <span class="comment">//fit residual obj continuum and subtract it</span></div>
+<div class="line"><a name="l06732"></a><span class="lineno"> 6732</span>   check_nomsg(pfit=sinfo_polynomial_fit_1d_create(sa_ox,sa_oy,0,&mse));</div>
+<div class="line"><a name="l06733"></a><span class="lineno"> 6733</span>   pows[0]=0;</div>
+<div class="line"><a name="l06734"></a><span class="lineno"> 6734</span>   pows[1]=0;</div>
+<div class="line"><a name="l06735"></a><span class="lineno"> 6735</span>   check_nomsg(cont=cpl_polynomial_get_coeff(pfit,pows));</div>
+<div class="line"><a name="l06736"></a><span class="lineno"> 6736</span>   check_nomsg(sinfo_free_polynomial(&pfit));</div>
+<div class="line"><a name="l06737"></a><span class="lineno"> 6737</span>   check_nomsg(cpl_vector_subtract_scalar(sa_oy,cont));</div>
+<div class="line"><a name="l06738"></a><span class="lineno"> 6738</span> </div>
+<div class="line"><a name="l06739"></a><span class="lineno"> 6739</span> </div>
+<div class="line"><a name="l06740"></a><span class="lineno"> 6740</span>   <span class="comment">//fit residual sky continuum and subtract it</span></div>
+<div class="line"><a name="l06741"></a><span class="lineno"> 6741</span>   check_nomsg(pfit=sinfo_polynomial_fit_1d_create(sa_ox,sa_sy,0,&mse));</div>
+<div class="line"><a name="l06742"></a><span class="lineno"> 6742</span>   pows[0]=0;</div>
+<div class="line"><a name="l06743"></a><span class="lineno"> 6743</span>   pows[1]=0;</div>
+<div class="line"><a name="l06744"></a><span class="lineno"> 6744</span>   check_nomsg(cont=cpl_polynomial_get_coeff(pfit,pows));</div>
+<div class="line"><a name="l06745"></a><span class="lineno"> 6745</span>   check_nomsg(sinfo_free_polynomial(&pfit));</div>
+<div class="line"><a name="l06746"></a><span class="lineno"> 6746</span>   check_nomsg(cpl_vector_subtract_scalar(sa_sy,cont));</div>
+<div class="line"><a name="l06747"></a><span class="lineno"> 6747</span> </div>
+<div class="line"><a name="l06748"></a><span class="lineno"> 6748</span>   <span class="comment">//computes diff=(obj-conto)-(sky-contsky)*p[0]</span></div>
+<div class="line"><a name="l06749"></a><span class="lineno"> 6749</span>   check_nomsg(po= cpl_vector_get_data(sa_oy));</div>
+<div class="line"><a name="l06750"></a><span class="lineno"> 6750</span>   check_nomsg(ps= cpl_vector_get_data(sa_sy));</div>
+<div class="line"><a name="l06751"></a><span class="lineno"> 6751</span> </div>
+<div class="line"><a name="l06752"></a><span class="lineno"> 6752</span>   check_nomsg(np=cpl_vector_get_size(sa_oy));</div>
+<div class="line"><a name="l06753"></a><span class="lineno"> 6753</span>   check_nomsg(vtmp=cpl_vector_new(np));</div>
+<div class="line"><a name="l06754"></a><span class="lineno"> 6754</span>   check_nomsg(pv= cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l06755"></a><span class="lineno"> 6755</span> </div>
+<div class="line"><a name="l06756"></a><span class="lineno"> 6756</span> </div>
+<div class="line"><a name="l06757"></a><span class="lineno"> 6757</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l06758"></a><span class="lineno"> 6758</span>     pv[i]=po[i]-ps[i]*p[0];</div>
+<div class="line"><a name="l06759"></a><span class="lineno"> 6759</span>   }</div>
+<div class="line"><a name="l06760"></a><span class="lineno"> 6760</span>   <span class="comment">//computes rms diff</span></div>
+<div class="line"><a name="l06761"></a><span class="lineno"> 6761</span>   check_nomsg(rms=cpl_vector_get_stdev(vtmp));</div>
+<div class="line"><a name="l06762"></a><span class="lineno"> 6762</span>   sinfo_free_my_vector(&vtmp);</div>
+<div class="line"><a name="l06763"></a><span class="lineno"> 6763</span>   <span class="keywordflow">return</span> rms;</div>
+<div class="line"><a name="l06764"></a><span class="lineno"> 6764</span>  cleanup:</div>
+<div class="line"><a name="l06765"></a><span class="lineno"> 6765</span>   sinfo_free_my_vector(&vtmp);</div>
+<div class="line"><a name="l06766"></a><span class="lineno"> 6766</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l06767"></a><span class="lineno"> 6767</span> </div>
+<div class="line"><a name="l06768"></a><span class="lineno"> 6768</span> }</div>
+<div class="line"><a name="l06769"></a><span class="lineno"> 6769</span> </div>
+<div class="line"><a name="l06770"></a><span class="lineno"> 6770</span> </div>
+<div class="line"><a name="l06771"></a><span class="lineno"> 6771</span> </div>
+<div class="line"><a name="l06783"></a><span class="lineno"> 6783</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l06784"></a><span class="lineno"> 6784</span> sinfo_table_interpol(cpl_table* obj_lin,</div>
+<div class="line"><a name="l06785"></a><span class="lineno"> 6785</span>                      cpl_table* obj_cnt,</div>
+<div class="line"><a name="l06786"></a><span class="lineno"> 6786</span>                      cpl_table* sky_lin,</div>
+<div class="line"><a name="l06787"></a><span class="lineno"> 6787</span>                      cpl_table* sky_cnt,</div>
+<div class="line"><a name="l06788"></a><span class="lineno"> 6788</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> r)</div>
+<div class="line"><a name="l06789"></a><span class="lineno"> 6789</span> {</div>
+<div class="line"><a name="l06790"></a><span class="lineno"> 6790</span> </div>
+<div class="line"><a name="l06791"></a><span class="lineno"> 6791</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l06792"></a><span class="lineno"> 6792</span>   cpl_table* obj_dif=NULL;</div>
+<div class="line"><a name="l06793"></a><span class="lineno"> 6793</span>   cpl_table* sky_dif=NULL;</div>
+<div class="line"><a name="l06794"></a><span class="lineno"> 6794</span>   cknull(obj_lin,<span class="stringliteral">"null line table"</span>);</div>
+<div class="line"><a name="l06795"></a><span class="lineno"> 6795</span>   cknull(obj_cnt,<span class="stringliteral">"null cont table"</span>);</div>
+<div class="line"><a name="l06796"></a><span class="lineno"> 6796</span> </div>
+<div class="line"><a name="l06797"></a><span class="lineno"> 6797</span>   cknull_nomsg(obj_dif=sinfo_table_subtract_continuum(obj_lin,obj_cnt));</div>
+<div class="line"><a name="l06798"></a><span class="lineno"> 6798</span>   cknull_nomsg(sky_dif=sinfo_table_subtract_continuum(sky_lin,sky_cnt));</div>
+<div class="line"><a name="l06799"></a><span class="lineno"> 6799</span> </div>
+<div class="line"><a name="l06800"></a><span class="lineno"> 6800</span>   check_nomsg(out=cpl_table_duplicate(obj_dif));</div>
+<div class="line"><a name="l06801"></a><span class="lineno"> 6801</span>   check_nomsg(cpl_table_duplicate_column(out,<span class="stringliteral">"CSKY"</span>,sky_dif,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06802"></a><span class="lineno"> 6802</span>   check_nomsg(cpl_table_multiply_scalar(out,<span class="stringliteral">"CSKY"</span>,r));</div>
+<div class="line"><a name="l06803"></a><span class="lineno"> 6803</span>   check_nomsg(cpl_table_subtract_columns(out,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"CSKY"</span>));</div>
+<div class="line"><a name="l06804"></a><span class="lineno"> 6804</span> </div>
+<div class="line"><a name="l06805"></a><span class="lineno"> 6805</span>   sinfo_free_table(&obj_dif);</div>
+<div class="line"><a name="l06806"></a><span class="lineno"> 6806</span>   sinfo_free_table(&sky_dif);</div>
+<div class="line"><a name="l06807"></a><span class="lineno"> 6807</span> </div>
+<div class="line"><a name="l06808"></a><span class="lineno"> 6808</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l06809"></a><span class="lineno"> 6809</span> </div>
+<div class="line"><a name="l06810"></a><span class="lineno"> 6810</span>  cleanup:</div>
+<div class="line"><a name="l06811"></a><span class="lineno"> 6811</span>   sinfo_free_table(&obj_dif);</div>
+<div class="line"><a name="l06812"></a><span class="lineno"> 6812</span>   sinfo_free_table(&sky_dif);</div>
+<div class="line"><a name="l06813"></a><span class="lineno"> 6813</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l06814"></a><span class="lineno"> 6814</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l06815"></a><span class="lineno"> 6815</span> </div>
+<div class="line"><a name="l06816"></a><span class="lineno"> 6816</span> }</div>
+<div class="line"><a name="l06817"></a><span class="lineno"> 6817</span> </div>
+<div class="line"><a name="l06818"></a><span class="lineno"> 6818</span> </div>
+<div class="line"><a name="l06819"></a><span class="lineno"> 6819</span> </div>
+<div class="line"><a name="l06820"></a><span class="lineno"> 6820</span> </div>
+<div class="line"><a name="l06821"></a><span class="lineno"> 6821</span> </div>
+<div class="line"><a name="l06822"></a><span class="lineno"> 6822</span> </div>
+<div class="line"><a name="l06831"></a><span class="lineno"> 6831</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l06832"></a><span class="lineno"> 6832</span> sinfo_table_subtract_continuum(cpl_table* lin,</div>
+<div class="line"><a name="l06833"></a><span class="lineno"> 6833</span>                                cpl_table* cnt)</div>
+<div class="line"><a name="l06834"></a><span class="lineno"> 6834</span> </div>
+<div class="line"><a name="l06835"></a><span class="lineno"> 6835</span> {</div>
+<div class="line"><a name="l06836"></a><span class="lineno"> 6836</span> </div>
+<div class="line"><a name="l06837"></a><span class="lineno"> 6837</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l06838"></a><span class="lineno"> 6838</span>   <span class="keywordtype">int</span> nlin=0;</div>
+<div class="line"><a name="l06839"></a><span class="lineno"> 6839</span>   <span class="keywordtype">int</span> ncnt=0;</div>
+<div class="line"><a name="l06840"></a><span class="lineno"> 6840</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l06841"></a><span class="lineno"> 6841</span>   <span class="keywordtype">double</span>* poi=NULL;</div>
+<div class="line"><a name="l06842"></a><span class="lineno"> 6842</span>   cpl_vector* vx=NULL;</div>
+<div class="line"><a name="l06843"></a><span class="lineno"> 6843</span>   cpl_vector* vy=NULL;</div>
+<div class="line"><a name="l06844"></a><span class="lineno"> 6844</span>   cpl_polynomial* cfit=NULL;</div>
+<div class="line"><a name="l06845"></a><span class="lineno"> 6845</span>   cpl_size pows[2];</div>
+<div class="line"><a name="l06846"></a><span class="lineno"> 6846</span>   <span class="keywordtype">double</span> mse=0;</div>
+<div class="line"><a name="l06847"></a><span class="lineno"> 6847</span>   <span class="keywordtype">double</span> yfit=0;</div>
+<div class="line"><a name="l06848"></a><span class="lineno"> 6848</span> </div>
+<div class="line"><a name="l06849"></a><span class="lineno"> 6849</span>   cknull(lin,<span class="stringliteral">"null line table"</span>);</div>
+<div class="line"><a name="l06850"></a><span class="lineno"> 6850</span>   cknull(cnt,<span class="stringliteral">"null cont table"</span>);</div>
+<div class="line"><a name="l06851"></a><span class="lineno"> 6851</span>   check_nomsg(out=cpl_table_duplicate(lin));</div>
+<div class="line"><a name="l06852"></a><span class="lineno"> 6852</span>   check_nomsg(cpl_table_new_column(out,<span class="stringliteral">"CONT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l06853"></a><span class="lineno"> 6853</span>   check_nomsg(nlin=cpl_table_get_nrow(lin));</div>
+<div class="line"><a name="l06854"></a><span class="lineno"> 6854</span>   check_nomsg(ncnt=cpl_table_get_nrow(cnt));</div>
+<div class="line"><a name="l06855"></a><span class="lineno"> 6855</span>   <span class="comment">//sinfo_msg("nlin=%d",nlin);</span></div>
+<div class="line"><a name="l06856"></a><span class="lineno"> 6856</span>   check_nomsg(cpl_table_fill_column_window(out,<span class="stringliteral">"CONT"</span>,0,nlin,0));</div>
+<div class="line"><a name="l06857"></a><span class="lineno"> 6857</span> </div>
+<div class="line"><a name="l06858"></a><span class="lineno"> 6858</span>   <span class="comment">//do a uniform fit</span></div>
+<div class="line"><a name="l06859"></a><span class="lineno"> 6859</span>   check_nomsg(vx=cpl_vector_wrap(ncnt,cpl_table_get_data_double(cnt,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l06860"></a><span class="lineno"> 6860</span>   check_nomsg(vy=cpl_vector_wrap(ncnt,cpl_table_get_data_double(cnt,<span class="stringliteral">"INT"</span>)));</div>
+<div class="line"><a name="l06861"></a><span class="lineno"> 6861</span>   check_nomsg(cfit=sinfo_polynomial_fit_1d_create(vx,vy,0,&mse));</div>
+<div class="line"><a name="l06862"></a><span class="lineno"> 6862</span>   sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l06863"></a><span class="lineno"> 6863</span>   sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l06864"></a><span class="lineno"> 6864</span> </div>
+<div class="line"><a name="l06865"></a><span class="lineno"> 6865</span>   pows[0]=0;</div>
+<div class="line"><a name="l06866"></a><span class="lineno"> 6866</span>   pows[1]=0;</div>
+<div class="line"><a name="l06867"></a><span class="lineno"> 6867</span>   check_nomsg(yfit=cpl_polynomial_get_coeff(cfit,pows));</div>
+<div class="line"><a name="l06868"></a><span class="lineno"> 6868</span>   sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l06869"></a><span class="lineno"> 6869</span>   <span class="comment">//sinfo_msg("coeff 0=%g",yfit);</span></div>
+<div class="line"><a name="l06870"></a><span class="lineno"> 6870</span> </div>
+<div class="line"><a name="l06871"></a><span class="lineno"> 6871</span>   check_nomsg(poi=cpl_table_get_data_double(out,<span class="stringliteral">"CONT"</span>));</div>
+<div class="line"><a name="l06872"></a><span class="lineno"> 6872</span>   <span class="keywordflow">for</span>(i=0;i<nlin;i++) {</div>
+<div class="line"><a name="l06873"></a><span class="lineno"> 6873</span>     poi[i]=yfit;</div>
+<div class="line"><a name="l06874"></a><span class="lineno"> 6874</span>   }</div>
+<div class="line"><a name="l06875"></a><span class="lineno"> 6875</span> </div>
+<div class="line"><a name="l06876"></a><span class="lineno"> 6876</span>   check_nomsg(cpl_table_subtract_columns(out,<span class="stringliteral">"INT"</span>,<span class="stringliteral">"CONT"</span>));</div>
+<div class="line"><a name="l06877"></a><span class="lineno"> 6877</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"CONT"</span>));</div>
+<div class="line"><a name="l06878"></a><span class="lineno"> 6878</span> </div>
+<div class="line"><a name="l06879"></a><span class="lineno"> 6879</span> </div>
+<div class="line"><a name="l06880"></a><span class="lineno"> 6880</span> </div>
+<div class="line"><a name="l06881"></a><span class="lineno"> 6881</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l06882"></a><span class="lineno"> 6882</span> </div>
+<div class="line"><a name="l06883"></a><span class="lineno"> 6883</span>  cleanup:</div>
+<div class="line"><a name="l06884"></a><span class="lineno"> 6884</span>   sinfo_unwrap_vector(&vx);</div>
+<div class="line"><a name="l06885"></a><span class="lineno"> 6885</span>   sinfo_unwrap_vector(&vy);</div>
+<div class="line"><a name="l06886"></a><span class="lineno"> 6886</span>   sinfo_free_polynomial(&cfit);</div>
+<div class="line"><a name="l06887"></a><span class="lineno"> 6887</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l06888"></a><span class="lineno"> 6888</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l06889"></a><span class="lineno"> 6889</span> </div>
+<div class="line"><a name="l06890"></a><span class="lineno"> 6890</span> }</div>
+<div class="line"><a name="l06891"></a><span class="lineno"> 6891</span> </div>
+<div class="line"><a name="l06892"></a><span class="lineno"> 6892</span> </div>
+<div class="line"><a name="l06893"></a><span class="lineno"> 6893</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l06894"></a><span class="lineno"> 6894</span> sinfo_compute_line_ratio(cpl_table* obj,</div>
+<div class="line"><a name="l06895"></a><span class="lineno"> 6895</span>                          cpl_table* sky,</div>
+<div class="line"><a name="l06896"></a><span class="lineno"> 6896</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l06897"></a><span class="lineno"> 6897</span>                          <span class="keyword">const</span> <span class="keywordtype">int</span> meth,</div>
+<div class="line"><a name="l06898"></a><span class="lineno"> 6898</span>                          <span class="keyword">const</span> cpl_table* sel_regions,</div>
+<div class="line"><a name="l06899"></a><span class="lineno"> 6899</span>                          cpl_table* cont_regions,</div>
+<div class="line"><a name="l06900"></a><span class="lineno"> 6900</span>                          <span class="keywordtype">double</span>* r)</div>
+<div class="line"><a name="l06901"></a><span class="lineno"> 6901</span> {</div>
+<div class="line"><a name="l06902"></a><span class="lineno"> 6902</span>   cpl_table* line_regions=NULL;</div>
+<div class="line"><a name="l06903"></a><span class="lineno"> 6903</span>   cpl_table* obj_cnt=NULL;</div>
+<div class="line"><a name="l06904"></a><span class="lineno"> 6904</span>   cpl_table* sky_cnt=NULL;</div>
+<div class="line"><a name="l06905"></a><span class="lineno"> 6905</span>   cpl_table* obj_lin=NULL;</div>
+<div class="line"><a name="l06906"></a><span class="lineno"> 6906</span>   cpl_table* sky_lin=NULL;</div>
+<div class="line"><a name="l06907"></a><span class="lineno"> 6907</span>   cpl_table* lres=NULL;</div>
+<div class="line"><a name="l06908"></a><span class="lineno"> 6908</span>   <span class="keywordtype">double</span> fmed=0;</div>
+<div class="line"><a name="l06909"></a><span class="lineno"> 6909</span>   <span class="keywordtype">double</span> fsdv=0;</div>
+<div class="line"><a name="l06910"></a><span class="lineno"> 6910</span>   <span class="keywordtype">double</span> fthresh=0;</div>
+<div class="line"><a name="l06911"></a><span class="lineno"> 6911</span>   <span class="keywordtype">int</span> fclip_i=0;</div>
+<div class="line"><a name="l06912"></a><span class="lineno"> 6912</span>   <span class="keywordtype">int</span> line_i=0;</div>
+<div class="line"><a name="l06913"></a><span class="lineno"> 6913</span> </div>
+<div class="line"><a name="l06914"></a><span class="lineno"> 6914</span> </div>
+<div class="line"><a name="l06915"></a><span class="lineno"> 6915</span>   <span class="comment">//line_regions = med_regions;</span></div>
+<div class="line"><a name="l06916"></a><span class="lineno"> 6916</span>   check_nomsg(line_regions = cpl_table_duplicate(sel_regions));</div>
+<div class="line"><a name="l06917"></a><span class="lineno"> 6917</span>   <span class="comment">//r = amoeba(1.e-5,function_name='fitsky',p0=[1.],scale=[0.1]);</span></div>
+<div class="line"><a name="l06918"></a><span class="lineno"> 6918</span>   <span class="comment">//Identify obj lines and continuum, same for sky</span></div>
+<div class="line"><a name="l06919"></a><span class="lineno"> 6919</span>   check_nomsg(obj_lin=sinfo_table_select_range(obj,line_regions,wtol));</div>
+<div class="line"><a name="l06920"></a><span class="lineno"> 6920</span>   check_nomsg(sky_lin=sinfo_table_select_range(sky,line_regions,wtol));</div>
+<div class="line"><a name="l06921"></a><span class="lineno"> 6921</span>   check_nomsg(obj_cnt=sinfo_table_select_range(obj,cont_regions,wtol));</div>
+<div class="line"><a name="l06922"></a><span class="lineno"> 6922</span>   check_nomsg(sky_cnt=sinfo_table_select_range(sky,cont_regions,wtol));</div>
+<div class="line"><a name="l06923"></a><span class="lineno"> 6923</span> </div>
+<div class="line"><a name="l06924"></a><span class="lineno"> 6924</span>   ck0_nomsg(sinfo_get_line_ratio(obj_lin,obj_cnt,sky_lin,sky_cnt,meth,r));</div>
+<div class="line"><a name="l06925"></a><span class="lineno"> 6925</span> </div>
+<div class="line"><a name="l06926"></a><span class="lineno"> 6926</span> </div>
+<div class="line"><a name="l06927"></a><span class="lineno"> 6927</span>   <span class="comment">//fline_res = (obj_lr[line_regions]-</span></div>
+<div class="line"><a name="l06928"></a><span class="lineno"> 6928</span>   <span class="comment">//             interpol(obj_lr[cont_regions],llr[cont_regions],</span></div>
+<div class="line"><a name="l06929"></a><span class="lineno"> 6929</span>   <span class="comment">//             llr[line_regions])) -</span></div>
+<div class="line"><a name="l06930"></a><span class="lineno"> 6930</span>   <span class="comment">//            (sky_lr[line_regions] -</span></div>
+<div class="line"><a name="l06931"></a><span class="lineno"> 6931</span>   <span class="comment">//             interpol(sky_lr[cont_regions],llr[cont_regions],</span></div>
+<div class="line"><a name="l06932"></a><span class="lineno"> 6932</span>   <span class="comment">//</span></div>
+<div class="line"><a name="l06933"></a><span class="lineno"> 6933</span>   <span class="comment">//            llr[line_regions]))*r[0];</span></div>
+<div class="line"><a name="l06934"></a><span class="lineno"> 6934</span>   check_nomsg(lres=sinfo_table_interpol(obj_lin,obj_cnt,sky_lin,sky_cnt,*r));</div>
+<div class="line"><a name="l06935"></a><span class="lineno"> 6935</span> </div>
+<div class="line"><a name="l06936"></a><span class="lineno"> 6936</span>   check_nomsg(fmed = cpl_table_get_column_median(lres,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06937"></a><span class="lineno"> 6937</span>   check_nomsg(fsdv = cpl_table_get_column_stdev(lres,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06938"></a><span class="lineno"> 6938</span>   fthresh=fmed+3*fsdv;</div>
+<div class="line"><a name="l06939"></a><span class="lineno"> 6939</span>   <span class="comment">//fclip = where(abs(fline_res) > fmed+3*fsdv,fclip_i);</span></div>
+<div class="line"><a name="l06940"></a><span class="lineno"> 6940</span>   check_nomsg(cpl_table_duplicate_column(lres,<span class="stringliteral">"AINT"</span>,lres,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06941"></a><span class="lineno"> 6941</span>   check_nomsg(cpl_table_multiply_columns(lres,<span class="stringliteral">"AINT"</span>,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06942"></a><span class="lineno"> 6942</span>   check_nomsg(cpl_table_power_column(lres,<span class="stringliteral">"AINT"</span>,0.5));</div>
+<div class="line"><a name="l06943"></a><span class="lineno"> 6943</span>   check_nomsg(fclip_i=cpl_table_and_selected_double(lres,<span class="stringliteral">"AINT"</span>,</div>
+<div class="line"><a name="l06944"></a><span class="lineno"> 6944</span>                                                     CPL_GREATER_THAN,</div>
+<div class="line"><a name="l06945"></a><span class="lineno"> 6945</span>                                                     fthresh));</div>
+<div class="line"><a name="l06946"></a><span class="lineno"> 6946</span>   check_nomsg(cpl_table_select_all(lres));</div>
+<div class="line"><a name="l06947"></a><span class="lineno"> 6947</span> </div>
+<div class="line"><a name="l06948"></a><span class="lineno"> 6948</span> </div>
+<div class="line"><a name="l06949"></a><span class="lineno"> 6949</span>   <span class="keywordflow">if</span> (fclip_i > 0) {</div>
+<div class="line"><a name="l06950"></a><span class="lineno"> 6950</span>     <span class="comment">//line_regions = line_regions[where(abs(fline_res) < fmed+3*fsdv)];</span></div>
+<div class="line"><a name="l06951"></a><span class="lineno"> 6951</span>     check_nomsg(line_i=cpl_table_and_selected_double(lres,<span class="stringliteral">"AINT"</span>,</div>
+<div class="line"><a name="l06952"></a><span class="lineno"> 6952</span>                              CPL_LESS_THAN,</div>
+<div class="line"><a name="l06953"></a><span class="lineno"> 6953</span>                              fthresh));</div>
+<div class="line"><a name="l06954"></a><span class="lineno"> 6954</span>     sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l06955"></a><span class="lineno"> 6955</span>     check_nomsg(line_regions=cpl_table_extract_selected(lres));</div>
+<div class="line"><a name="l06956"></a><span class="lineno"> 6956</span>     sinfo_free_table(&lres);</div>
+<div class="line"><a name="l06957"></a><span class="lineno"> 6957</span> </div>
+<div class="line"><a name="l06958"></a><span class="lineno"> 6958</span>     check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l06959"></a><span class="lineno"> 6959</span>     check_nomsg(cpl_table_erase_column(line_regions,<span class="stringliteral">"AINT"</span>));</div>
+<div class="line"><a name="l06960"></a><span class="lineno"> 6960</span> </div>
+<div class="line"><a name="l06961"></a><span class="lineno"> 6961</span> </div>
+<div class="line"><a name="l06962"></a><span class="lineno"> 6962</span>     <span class="keywordflow">if</span> (line_i >= 3) {</div>
+<div class="line"><a name="l06963"></a><span class="lineno"> 6963</span> </div>
+<div class="line"><a name="l06964"></a><span class="lineno"> 6964</span>     sinfo_free_table(&obj_lin);</div>
+<div class="line"><a name="l06965"></a><span class="lineno"> 6965</span>     sinfo_free_table(&sky_lin);</div>
+<div class="line"><a name="l06966"></a><span class="lineno"> 6966</span>     check_nomsg(obj_lin=sinfo_table_select_range(obj,line_regions,wtol));</div>
+<div class="line"><a name="l06967"></a><span class="lineno"> 6967</span>     check_nomsg(sky_lin=sinfo_table_select_range(sky,line_regions,wtol));</div>
+<div class="line"><a name="l06968"></a><span class="lineno"> 6968</span> </div>
+<div class="line"><a name="l06969"></a><span class="lineno"> 6969</span>     sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l06970"></a><span class="lineno"> 6970</span> </div>
+<div class="line"><a name="l06971"></a><span class="lineno"> 6971</span> </div>
+<div class="line"><a name="l06972"></a><span class="lineno"> 6972</span>      <span class="comment">//r = amoeba(1.e-5,function_name='fitsky',p0=[1.],scale=[0.1]);</span></div>
+<div class="line"><a name="l06973"></a><span class="lineno"> 6973</span>       ck0_nomsg(sinfo_get_line_ratio(obj_lin,obj_cnt,sky_lin,sky_cnt,meth,r));</div>
+<div class="line"><a name="l06974"></a><span class="lineno"> 6974</span>     }</div>
+<div class="line"><a name="l06975"></a><span class="lineno"> 6975</span>   }</div>
+<div class="line"><a name="l06976"></a><span class="lineno"> 6976</span>   *r=fabs(*r);</div>
+<div class="line"><a name="l06977"></a><span class="lineno"> 6977</span>   <span class="comment">//Free memory</span></div>
+<div class="line"><a name="l06978"></a><span class="lineno"> 6978</span>   sinfo_free_table(&obj_cnt);</div>
+<div class="line"><a name="l06979"></a><span class="lineno"> 6979</span>   sinfo_free_table(&sky_cnt);</div>
+<div class="line"><a name="l06980"></a><span class="lineno"> 6980</span>   sinfo_free_table(&sky_lin);</div>
+<div class="line"><a name="l06981"></a><span class="lineno"> 6981</span>   sinfo_free_table(&obj_lin);</div>
+<div class="line"><a name="l06982"></a><span class="lineno"> 6982</span>   sinfo_free_table(&lres);</div>
+<div class="line"><a name="l06983"></a><span class="lineno"> 6983</span>   sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l06984"></a><span class="lineno"> 6984</span> </div>
+<div class="line"><a name="l06985"></a><span class="lineno"> 6985</span> </div>
+<div class="line"><a name="l06986"></a><span class="lineno"> 6986</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l06987"></a><span class="lineno"> 6987</span> </div>
+<div class="line"><a name="l06988"></a><span class="lineno"> 6988</span> </div>
+<div class="line"><a name="l06989"></a><span class="lineno"> 6989</span>  cleanup:</div>
+<div class="line"><a name="l06990"></a><span class="lineno"> 6990</span> </div>
+<div class="line"><a name="l06991"></a><span class="lineno"> 6991</span> </div>
+<div class="line"><a name="l06992"></a><span class="lineno"> 6992</span>   sinfo_free_table(&obj_cnt);</div>
+<div class="line"><a name="l06993"></a><span class="lineno"> 6993</span>   sinfo_free_table(&sky_cnt);</div>
+<div class="line"><a name="l06994"></a><span class="lineno"> 6994</span>   sinfo_free_table(&sky_lin);</div>
+<div class="line"><a name="l06995"></a><span class="lineno"> 6995</span>   sinfo_free_table(&obj_lin);</div>
+<div class="line"><a name="l06996"></a><span class="lineno"> 6996</span> </div>
+<div class="line"><a name="l06997"></a><span class="lineno"> 6997</span>   sinfo_free_table(&lres);</div>
+<div class="line"><a name="l06998"></a><span class="lineno"> 6998</span>   sinfo_free_table(&line_regions);</div>
+<div class="line"><a name="l06999"></a><span class="lineno"> 6999</span> </div>
+<div class="line"><a name="l07000"></a><span class="lineno"> 7000</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l07001"></a><span class="lineno"> 7001</span> </div>
+<div class="line"><a name="l07002"></a><span class="lineno"> 7002</span> }</div>
+<div class="line"><a name="l07014"></a><span class="lineno"> 7014</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l07015"></a><span class="lineno"> 7015</span> sinfo_find_rot_waves(</div>
+<div class="line"><a name="l07016"></a><span class="lineno"> 7016</span>              <span class="keyword">const</span> <span class="keywordtype">double</span>  w_rot[],</div>
+<div class="line"><a name="l07017"></a><span class="lineno"> 7017</span>                      <span class="keyword">const</span> <span class="keywordtype">int</span> npix_w,</div>
+<div class="line"><a name="l07018"></a><span class="lineno"> 7018</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> w_step,</div>
+<div class="line"><a name="l07019"></a><span class="lineno"> 7019</span>                      cpl_table* range</div>
+<div class="line"><a name="l07020"></a><span class="lineno"> 7020</span>              )</div>
+<div class="line"><a name="l07021"></a><span class="lineno"> 7021</span> {</div>
+<div class="line"><a name="l07022"></a><span class="lineno"> 7022</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l07023"></a><span class="lineno"> 7023</span>   <span class="keywordtype">int</span> x_i=0;</div>
+<div class="line"><a name="l07024"></a><span class="lineno"> 7024</span>   <span class="keywordtype">int</span> r_start=0;</div>
+<div class="line"><a name="l07025"></a><span class="lineno"> 7025</span>   <span class="keywordtype">double</span> w_min=0;</div>
+<div class="line"><a name="l07026"></a><span class="lineno"> 7026</span>   <span class="keywordtype">double</span> w_max=0;</div>
+<div class="line"><a name="l07027"></a><span class="lineno"> 7027</span> </div>
+<div class="line"><a name="l07028"></a><span class="lineno"> 7028</span>   cpl_table* w_sel=NULL;</div>
+<div class="line"><a name="l07029"></a><span class="lineno"> 7029</span>   cpl_table* res=NULL;</div>
+<div class="line"><a name="l07030"></a><span class="lineno"> 7030</span> </div>
+<div class="line"><a name="l07031"></a><span class="lineno"> 7031</span>   check_nomsg(res = cpl_table_new(0));</div>
+<div class="line"><a name="l07032"></a><span class="lineno"> 7032</span> </div>
+<div class="line"><a name="l07033"></a><span class="lineno"> 7033</span>   check_nomsg(cpl_table_copy_structure(res,range));</div>
+<div class="line"><a name="l07034"></a><span class="lineno"> 7034</span> </div>
+<div class="line"><a name="l07035"></a><span class="lineno"> 7035</span>   <span class="keywordflow">for</span> (i=0; i< NROT; i++) {</div>
+<div class="line"><a name="l07036"></a><span class="lineno"> 7036</span> </div>
+<div class="line"><a name="l07037"></a><span class="lineno"> 7037</span>     <span class="comment">//x = where(lambda > l_rot_low[i]-npixw*cdelto &&</span></div>
+<div class="line"><a name="l07038"></a><span class="lineno"> 7038</span>     <span class="comment">//          lambda < l_rot_low[i]+npixw*cdelto,x_i);</span></div>
+<div class="line"><a name="l07039"></a><span class="lineno"> 7039</span> </div>
+<div class="line"><a name="l07040"></a><span class="lineno"> 7040</span>     w_min=w_rot[i]-npix_w*w_step;</div>
+<div class="line"><a name="l07041"></a><span class="lineno"> 7041</span>     w_max=w_rot[i]+npix_w*w_step;</div>
+<div class="line"><a name="l07042"></a><span class="lineno"> 7042</span> </div>
+<div class="line"><a name="l07043"></a><span class="lineno"> 7043</span>     check_nomsg(cpl_table_and_selected_double(range,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l07044"></a><span class="lineno"> 7044</span>                                               CPL_GREATER_THAN,w_min));</div>
+<div class="line"><a name="l07045"></a><span class="lineno"> 7045</span>     check_nomsg(cpl_table_and_selected_double(range,<span class="stringliteral">"WAVE"</span>,</div>
+<div class="line"><a name="l07046"></a><span class="lineno"> 7046</span>                                               CPL_LESS_THAN,w_max));</div>
+<div class="line"><a name="l07047"></a><span class="lineno"> 7047</span>     sinfo_free_table(&w_sel);</div>
+<div class="line"><a name="l07048"></a><span class="lineno"> 7048</span>     check_nomsg(w_sel=cpl_table_extract_selected(range));</div>
+<div class="line"><a name="l07049"></a><span class="lineno"> 7049</span>     check_nomsg(x_i=cpl_table_get_nrow(w_sel));</div>
+<div class="line"><a name="l07050"></a><span class="lineno"> 7050</span> </div>
+<div class="line"><a name="l07051"></a><span class="lineno"> 7051</span>     <span class="keywordflow">if</span> (x_i > 0) {</div>
+<div class="line"><a name="l07052"></a><span class="lineno"> 7052</span>       check_nomsg(r_start=cpl_table_get_nrow(res));</div>
+<div class="line"><a name="l07053"></a><span class="lineno"> 7053</span>       <span class="comment">//sinfo_msg("i=%d x_i=%d w_min=%g w_max=%g",i,x_i,w_min,w_max);</span></div>
+<div class="line"><a name="l07054"></a><span class="lineno"> 7054</span>       check_nomsg(cpl_table_insert(res,w_sel,r_start));</div>
+<div class="line"><a name="l07055"></a><span class="lineno"> 7055</span>     }</div>
+<div class="line"><a name="l07056"></a><span class="lineno"> 7056</span>     check_nomsg(cpl_table_select_all(range));</div>
+<div class="line"><a name="l07057"></a><span class="lineno"> 7057</span>   }</div>
+<div class="line"><a name="l07058"></a><span class="lineno"> 7058</span> </div>
+<div class="line"><a name="l07059"></a><span class="lineno"> 7059</span>   <span class="comment">//res = range[1:cpl_table_get_nrow(res)-1];</span></div>
+<div class="line"><a name="l07060"></a><span class="lineno"> 7060</span>   sinfo_free_table(&w_sel);</div>
+<div class="line"><a name="l07061"></a><span class="lineno"> 7061</span> </div>
+<div class="line"><a name="l07062"></a><span class="lineno"> 7062</span> </div>
+<div class="line"><a name="l07063"></a><span class="lineno"> 7063</span>   <span class="keywordflow">return</span> res;</div>
+<div class="line"><a name="l07064"></a><span class="lineno"> 7064</span> </div>
+<div class="line"><a name="l07065"></a><span class="lineno"> 7065</span>  cleanup:</div>
+<div class="line"><a name="l07066"></a><span class="lineno"> 7066</span>   sinfo_free_table(&w_sel);</div>
+<div class="line"><a name="l07067"></a><span class="lineno"> 7067</span>   sinfo_free_table(&res);</div>
+<div class="line"><a name="l07068"></a><span class="lineno"> 7068</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l07069"></a><span class="lineno"> 7069</span> </div>
+<div class="line"><a name="l07070"></a><span class="lineno"> 7070</span> }</div>
+<div class="line"><a name="l07071"></a><span class="lineno"> 7071</span> </div>
+<div class="line"><a name="l07084"></a><span class="lineno"> 7084</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l07085"></a><span class="lineno"> 7085</span> sinfo_get_obj_sky_wav_sub(cpl_table* obj,</div>
+<div class="line"><a name="l07086"></a><span class="lineno"> 7086</span>                           cpl_table* sky,</div>
+<div class="line"><a name="l07087"></a><span class="lineno"> 7087</span>                           cpl_table* wav,</div>
+<div class="line"><a name="l07088"></a><span class="lineno"> 7088</span>                           cpl_table* sel,</div>
+<div class="line"><a name="l07089"></a><span class="lineno"> 7089</span>                           <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l07090"></a><span class="lineno"> 7090</span>                           cpl_table** sub_obj,</div>
+<div class="line"><a name="l07091"></a><span class="lineno"> 7091</span>                           cpl_table** sub_sky,</div>
+<div class="line"><a name="l07092"></a><span class="lineno"> 7092</span>                           cpl_table** sub_wav)</div>
+<div class="line"><a name="l07093"></a><span class="lineno"> 7093</span> </div>
+<div class="line"><a name="l07094"></a><span class="lineno"> 7094</span> {</div>
+<div class="line"><a name="l07095"></a><span class="lineno"> 7095</span>   cknull_nomsg(*sub_obj = sinfo_table_select_range(obj,sel,wtol));</div>
+<div class="line"><a name="l07096"></a><span class="lineno"> 7096</span>   cknull_nomsg(*sub_sky = sinfo_table_select_range(sky,sel,wtol));</div>
+<div class="line"><a name="l07097"></a><span class="lineno"> 7097</span>   cknull_nomsg(*sub_wav = sinfo_table_select_range(wav,sel,wtol));</div>
+<div class="line"><a name="l07098"></a><span class="lineno"> 7098</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l07099"></a><span class="lineno"> 7099</span> </div>
+<div class="line"><a name="l07100"></a><span class="lineno"> 7100</span>  cleanup:</div>
+<div class="line"><a name="l07101"></a><span class="lineno"> 7101</span>   sinfo_free_table(&(*sub_obj));</div>
+<div class="line"><a name="l07102"></a><span class="lineno"> 7102</span>   sinfo_free_table(&(*sub_sky));</div>
+<div class="line"><a name="l07103"></a><span class="lineno"> 7103</span>   sinfo_free_table(&(*sub_wav));</div>
+<div class="line"><a name="l07104"></a><span class="lineno"> 7104</span> </div>
+<div class="line"><a name="l07105"></a><span class="lineno"> 7105</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l07106"></a><span class="lineno"> 7106</span> </div>
+<div class="line"><a name="l07107"></a><span class="lineno"> 7107</span> }</div>
+<div class="line"><a name="l07108"></a><span class="lineno"> 7108</span> </div>
+<div class="line"><a name="l07109"></a><span class="lineno"> 7109</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l07110"></a><span class="lineno"> 7110</span> sinfo_get_sub_regions(cpl_table* sky,</div>
+<div class="line"><a name="l07111"></a><span class="lineno"> 7111</span>                       cpl_table* x1,</div>
+<div class="line"><a name="l07112"></a><span class="lineno"> 7112</span>                       cpl_table* pos,</div>
+<div class="line"><a name="l07113"></a><span class="lineno"> 7113</span>                       <span class="keyword">const</span> <span class="keywordtype">double</span> wtol,</div>
+<div class="line"><a name="l07114"></a><span class="lineno"> 7114</span>                       <span class="keyword">const</span> <span class="keywordtype">int</span> npixw,</div>
+<div class="line"><a name="l07115"></a><span class="lineno"> 7115</span>                       cpl_table** res)</div>
+<div class="line"><a name="l07116"></a><span class="lineno"> 7116</span> {</div>
+<div class="line"><a name="l07117"></a><span class="lineno"> 7117</span> </div>
+<div class="line"><a name="l07118"></a><span class="lineno"> 7118</span>   cpl_table* x1_sub=NULL;</div>
+<div class="line"><a name="l07119"></a><span class="lineno"> 7119</span>   cpl_table* x2=NULL;</div>
+<div class="line"><a name="l07120"></a><span class="lineno"> 7120</span> </div>
+<div class="line"><a name="l07121"></a><span class="lineno"> 7121</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l07122"></a><span class="lineno"> 7122</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l07123"></a><span class="lineno"> 7123</span> </div>
+<div class="line"><a name="l07124"></a><span class="lineno"> 7124</span>   cknull(sky,<span class="stringliteral">"Null input sky table"</span>);</div>
+<div class="line"><a name="l07125"></a><span class="lineno"> 7125</span>   cknull(x1 ,<span class="stringliteral">"Null input x1 table"</span>);</div>
+<div class="line"><a name="l07126"></a><span class="lineno"> 7126</span>   cknull(pos,<span class="stringliteral">"Null input pos table"</span>);</div>
+<div class="line"><a name="l07127"></a><span class="lineno"> 7127</span> </div>
+<div class="line"><a name="l07128"></a><span class="lineno"> 7128</span>   check_nomsg(x2=cpl_table_duplicate(sky));</div>
+<div class="line"><a name="l07129"></a><span class="lineno"> 7129</span>   check_nomsg(nrow=cpl_table_get_nrow(sky));</div>
+<div class="line"><a name="l07130"></a><span class="lineno"> 7130</span>   check_nomsg(cpl_table_fill_column_window(x2,<span class="stringliteral">"INT"</span>,0,nrow,0));</div>
+<div class="line"><a name="l07131"></a><span class="lineno"> 7131</span> </div>
+<div class="line"><a name="l07132"></a><span class="lineno"> 7132</span>   <span class="comment">//x2[x1[pos]] = 10.;</span></div>
+<div class="line"><a name="l07133"></a><span class="lineno"> 7133</span>   <span class="comment">//x2 = convol(x2,replicate(1,npixw),/edge_truncate,/center);</span></div>
+<div class="line"><a name="l07134"></a><span class="lineno"> 7134</span>   <span class="comment">//res = where(x2 > 0,hi_i);</span></div>
+<div class="line"><a name="l07135"></a><span class="lineno"> 7135</span>   <span class="comment">//cpl_table_save(x1, NULL, NULL, "out_x1.fits", CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l07136"></a><span class="lineno"> 7136</span> </div>
+<div class="line"><a name="l07137"></a><span class="lineno"> 7137</span>   x1_sub=sinfo_table_select_range(x1,pos,wtol);</div>
+<div class="line"><a name="l07138"></a><span class="lineno"> 7138</span> </div>
+<div class="line"><a name="l07139"></a><span class="lineno"> 7139</span>   <span class="keywordflow">if</span>(x1_sub != NULL) {</div>
+<div class="line"><a name="l07140"></a><span class="lineno"> 7140</span>     ck0_nomsg(sinfo_table_fill_column_over_range(&x2,x1_sub,<span class="stringliteral">"INT"</span>,10.,wtol));</div>
+<div class="line"><a name="l07141"></a><span class="lineno"> 7141</span>     sinfo_free_table(&x1_sub);</div>
+<div class="line"><a name="l07142"></a><span class="lineno"> 7142</span>     check_nomsg(sinfo_convolve_kernel(&x2,npixw/2));</div>
+<div class="line"><a name="l07143"></a><span class="lineno"> 7143</span>     check_nomsg(np=cpl_table_and_selected_double(x2,<span class="stringliteral">"CNV"</span>,CPL_GREATER_THAN,0));</div>
+<div class="line"><a name="l07144"></a><span class="lineno"> 7144</span>     check_nomsg(*res=cpl_table_extract_selected(x2));</div>
+<div class="line"><a name="l07145"></a><span class="lineno"> 7145</span>     sinfo_free_table(&x2);</div>
+<div class="line"><a name="l07146"></a><span class="lineno"> 7146</span>     check_nomsg(cpl_table_erase_column(*res,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l07147"></a><span class="lineno"> 7147</span>     check_nomsg(cpl_table_erase_column(*res,<span class="stringliteral">"CNV"</span>));</div>
+<div class="line"><a name="l07148"></a><span class="lineno"> 7148</span> </div>
+<div class="line"><a name="l07149"></a><span class="lineno"> 7149</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l07150"></a><span class="lineno"> 7150</span>     cpl_error_reset();</div>
+<div class="line"><a name="l07151"></a><span class="lineno"> 7151</span>     sinfo_free_table(&x1_sub);</div>
+<div class="line"><a name="l07152"></a><span class="lineno"> 7152</span>     sinfo_free_table(&x2);</div>
+<div class="line"><a name="l07153"></a><span class="lineno"> 7153</span> </div>
+<div class="line"><a name="l07154"></a><span class="lineno"> 7154</span>     <span class="keywordflow">return</span> np;</div>
+<div class="line"><a name="l07155"></a><span class="lineno"> 7155</span>   }</div>
+<div class="line"><a name="l07156"></a><span class="lineno"> 7156</span> </div>
+<div class="line"><a name="l07157"></a><span class="lineno"> 7157</span>   <span class="keywordflow">return</span> np;</div>
+<div class="line"><a name="l07158"></a><span class="lineno"> 7158</span>  cleanup:</div>
+<div class="line"><a name="l07159"></a><span class="lineno"> 7159</span> </div>
+<div class="line"><a name="l07160"></a><span class="lineno"> 7160</span>   sinfo_free_table(&x1_sub);</div>
+<div class="line"><a name="l07161"></a><span class="lineno"> 7161</span>   sinfo_free_table(&x2);</div>
+<div class="line"><a name="l07162"></a><span class="lineno"> 7162</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l07163"></a><span class="lineno"> 7163</span> </div>
+<div class="line"><a name="l07164"></a><span class="lineno"> 7164</span> }</div>
+<div class="line"><a name="l07165"></a><span class="lineno"> 7165</span> </div>
+<div class="line"><a name="l07166"></a><span class="lineno"> 7166</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l07167"></a><span class="lineno"> 7167</span> sinfo_table_extract_rest(cpl_table* inp,</div>
+<div class="line"><a name="l07168"></a><span class="lineno"> 7168</span>                          cpl_table* low,</div>
+<div class="line"><a name="l07169"></a><span class="lineno"> 7169</span>                          cpl_table* med,</div>
+<div class="line"><a name="l07170"></a><span class="lineno"> 7170</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> wtol)</div>
+<div class="line"><a name="l07171"></a><span class="lineno"> 7171</span> {</div>
+<div class="line"><a name="l07172"></a><span class="lineno"> 7172</span> </div>
+<div class="line"><a name="l07173"></a><span class="lineno"> 7173</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l07174"></a><span class="lineno"> 7174</span>   <span class="keywordtype">double</span>* pinp=NULL;</div>
+<div class="line"><a name="l07175"></a><span class="lineno"> 7175</span>   <span class="keywordtype">double</span>* plow=NULL;</div>
+<div class="line"><a name="l07176"></a><span class="lineno"> 7176</span>   <span class="keywordtype">double</span>* pmed=NULL;</div>
+<div class="line"><a name="l07177"></a><span class="lineno"> 7177</span>   <span class="keywordtype">int</span> nlow=0;</div>
+<div class="line"><a name="l07178"></a><span class="lineno"> 7178</span>   <span class="keywordtype">int</span> nmed=0;</div>
+<div class="line"><a name="l07179"></a><span class="lineno"> 7179</span> </div>
+<div class="line"><a name="l07180"></a><span class="lineno"> 7180</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l07181"></a><span class="lineno"> 7181</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l07182"></a><span class="lineno"> 7182</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l07183"></a><span class="lineno"> 7183</span>   cpl_table* tmp=NULL;</div>
+<div class="line"><a name="l07184"></a><span class="lineno"> 7184</span> </div>
+<div class="line"><a name="l07185"></a><span class="lineno"> 7185</span>   cknull(inp,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l07186"></a><span class="lineno"> 7186</span> </div>
+<div class="line"><a name="l07187"></a><span class="lineno"> 7187</span> </div>
+<div class="line"><a name="l07188"></a><span class="lineno"> 7188</span>   check_nomsg(tmp=cpl_table_duplicate(inp));</div>
+<div class="line"><a name="l07189"></a><span class="lineno"> 7189</span>   check_nomsg(nrow=cpl_table_get_nrow(tmp));</div>
+<div class="line"><a name="l07190"></a><span class="lineno"> 7190</span>   check_nomsg(cpl_table_new_column(tmp,<span class="stringliteral">"SEL"</span>,CPL_TYPE_INT));</div>
+<div class="line"><a name="l07191"></a><span class="lineno"> 7191</span>   check_nomsg(cpl_table_fill_column_window_int(tmp,<span class="stringliteral">"SEL"</span>,0,nrow,0));</div>
+<div class="line"><a name="l07192"></a><span class="lineno"> 7192</span> </div>
+<div class="line"><a name="l07193"></a><span class="lineno"> 7193</span>   check_nomsg(pinp=cpl_table_get_data_double(inp,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l07194"></a><span class="lineno"> 7194</span>   check_nomsg(plow=cpl_table_get_data_double(low,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l07195"></a><span class="lineno"> 7195</span>   check_nomsg(pmed=cpl_table_get_data_double(med,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l07196"></a><span class="lineno"> 7196</span>   nlow=cpl_table_get_nrow(low);</div>
+<div class="line"><a name="l07197"></a><span class="lineno"> 7197</span> </div>
+<div class="line"><a name="l07198"></a><span class="lineno"> 7198</span> </div>
+<div class="line"><a name="l07199"></a><span class="lineno"> 7199</span>   <span class="comment">//check_nomsg(cpl_table_save(low,NULL,NULL,"out_low.fits",CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l07200"></a><span class="lineno"> 7200</span>   <span class="keywordflow">if</span>(nlow > 0) {</div>
+<div class="line"><a name="l07201"></a><span class="lineno"> 7201</span>     k=0;</div>
+<div class="line"><a name="l07202"></a><span class="lineno"> 7202</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l07203"></a><span class="lineno"> 7203</span>       <span class="keywordflow">if</span>(fabs(pinp[i]-plow[k]) < wtol) {</div>
+<div class="line"><a name="l07204"></a><span class="lineno"> 7204</span>     cpl_table_set_int(tmp,<span class="stringliteral">"SEL"</span>,k,-1);</div>
+<div class="line"><a name="l07205"></a><span class="lineno"> 7205</span>     k++;</div>
+<div class="line"><a name="l07206"></a><span class="lineno"> 7206</span>       }</div>
+<div class="line"><a name="l07207"></a><span class="lineno"> 7207</span>     }</div>
+<div class="line"><a name="l07208"></a><span class="lineno"> 7208</span>   }</div>
+<div class="line"><a name="l07209"></a><span class="lineno"> 7209</span>   nmed=cpl_table_get_nrow(med);</div>
+<div class="line"><a name="l07210"></a><span class="lineno"> 7210</span> </div>
+<div class="line"><a name="l07211"></a><span class="lineno"> 7211</span>   k=0;</div>
+<div class="line"><a name="l07212"></a><span class="lineno"> 7212</span>   <span class="keywordflow">if</span>(nmed > 0) {</div>
+<div class="line"><a name="l07213"></a><span class="lineno"> 7213</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l07214"></a><span class="lineno"> 7214</span>       <span class="keywordflow">if</span>(fabs(pinp[i]-pmed[k]) < wtol) {</div>
+<div class="line"><a name="l07215"></a><span class="lineno"> 7215</span>     cpl_table_set_int(tmp,<span class="stringliteral">"SEL"</span>,k,-1);</div>
+<div class="line"><a name="l07216"></a><span class="lineno"> 7216</span>     k++;</div>
+<div class="line"><a name="l07217"></a><span class="lineno"> 7217</span>       }</div>
+<div class="line"><a name="l07218"></a><span class="lineno"> 7218</span>     }</div>
+<div class="line"><a name="l07219"></a><span class="lineno"> 7219</span>   }</div>
+<div class="line"><a name="l07220"></a><span class="lineno"> 7220</span> </div>
+<div class="line"><a name="l07221"></a><span class="lineno"> 7221</span>   check_nomsg(cpl_table_and_selected_int(tmp,<span class="stringliteral">"SEL"</span>,CPL_GREATER_THAN,-1));</div>
+<div class="line"><a name="l07222"></a><span class="lineno"> 7222</span>   check_nomsg(out=cpl_table_extract_selected(tmp));</div>
+<div class="line"><a name="l07223"></a><span class="lineno"> 7223</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l07224"></a><span class="lineno"> 7224</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"SEL"</span>));</div>
+<div class="line"><a name="l07225"></a><span class="lineno"> 7225</span> </div>
+<div class="line"><a name="l07226"></a><span class="lineno"> 7226</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l07227"></a><span class="lineno"> 7227</span> </div>
+<div class="line"><a name="l07228"></a><span class="lineno"> 7228</span>  cleanup:</div>
+<div class="line"><a name="l07229"></a><span class="lineno"> 7229</span>   sinfo_free_table(&tmp);</div>
+<div class="line"><a name="l07230"></a><span class="lineno"> 7230</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l07231"></a><span class="lineno"> 7231</span> </div>
+<div class="line"><a name="l07232"></a><span class="lineno"> 7232</span> }</div>
+<div class="line"><a name="l07233"></a><span class="lineno"> 7233</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__skycor_8h_source.html b/html/sinfo__skycor_8h_source.html
index 9e2bc7f..7c52b7d 100644
--- a/html/sinfo__skycor_8h_source.html
+++ b/html/sinfo__skycor_8h_source.html
@@ -2,122 +2,153 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_skycor.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_skycor.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_skycor.h,v 1.13 2007/03/05 07:21:54 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/03/05 07:21:54 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#ifndef SINFO_SKYCOR_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKYCOR_H</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#define SINFO_MASK_WAVE_MIN 1.4</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MASK_WAVE_MAX 2.5</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MIN_FRAC 0.8</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LINE_HALF_WIDTH 4.0</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKY_BKG_FILTER_WIDTH 12</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#define HISTO_NBINS 100</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define HISTO_MIN_SIZE 10</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define HISTO_Y_CUT 10          </span><span class="comment">/* 50 is a better value this </span>
-<a name="l00047"></a>00047 <span class="comment">                                   affects histo right marging*/</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define HISTO_X_LEFT_CUT  1.0   </span><span class="comment">/* 0.2 is better */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#define HISTO_X_RIGHT_CUT  0.5  </span><span class="comment">/* 1.0 is better */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define HISTO_DIST_TEMPC_MIN_FCT 5.   </span><span class="comment">/* 5.0 */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define HISTO_DIST_TEMPC_MAX_FCT 0.25 </span><span class="comment">/* 0.25 */</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="keyword">struct </span>sinfo_skycor_qc_ {
-<a name="l00054"></a>00054   <span class="keywordtype">int</span>   th_fit;
-<a name="l00055"></a>00055 };
-<a name="l00056"></a>00056 <span class="keyword">typedef</span> <span class="keyword">struct </span>sinfo_skycor_qc_ sinfo_skycor_qc; 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 sinfo_skycor_qc* sinfo_skycor_qc_new(<span class="keywordtype">void</span>);
-<a name="l00059"></a>00059 <span class="keywordtype">void</span> sinfo_skycor_qc_delete(sinfo_skycor_qc** s);
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> 
-<a name="l00063"></a>00063 sinfo_skycor(cpl_parameterlist * config, 
-<a name="l00064"></a>00064              cpl_frame* obj_frm, 
-<a name="l00065"></a>00065              cpl_frame* sky_frm,
-<a name="l00066"></a>00066              sinfo_skycor_qc* sqc,
-<a name="l00067"></a>00067              cpl_imagelist** obj_cor,
-<a name="l00068"></a>00068              cpl_table** int_obj);
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keywordtype">int</span>
-<a name="l00073"></a>00073 sinfo_histogram(<span class="keyword">const</span> cpl_table* data,
-<a name="l00074"></a>00074                 <span class="keyword">const</span> <span class="keywordtype">int</span> nbins, 
-<a name="l00075"></a>00075                 <span class="keyword">const</span> <span class="keywordtype">double</span> min, 
-<a name="l00076"></a>00076                 <span class="keyword">const</span> <span class="keywordtype">double</span> max,
-<a name="l00077"></a>00077                 cpl_table** histo);
-<a name="l00078"></a>00078 <span class="keywordtype">int</span>
-<a name="l00079"></a>00079 sinfo_table_get_index_of_val(cpl_table* t,
-<a name="l00080"></a>00080                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00081"></a>00081                              <span class="keywordtype">double</span> val,
-<a name="l00082"></a>00082                              cpl_type type);
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="keywordtype">int</span>
-<a name="l00085"></a>00085 sinfo_table_get_index_of_max(cpl_table* t,
-<a name="l00086"></a>00086                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00087"></a>00087                              cpl_type type);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="keywordtype">double</span>
-<a name="l00091"></a>00091 sinfo_table_column_interpolate(<span class="keyword">const</span> cpl_table* t,
-<a name="l00092"></a>00092                                <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00093"></a>00093                                <span class="keyword">const</span> <span class="keywordtype">double</span> x);
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 cpl_table* 
-<a name="l00100"></a>00100 sinfo_where_tab_min_max(cpl_table* t, 
-<a name="l00101"></a>00101                         <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00102"></a>00102                         cpl_table_select_operator op1,  
-<a name="l00103"></a>00103                         <span class="keyword">const</span> <span class="keywordtype">double</span> v1, 
-<a name="l00104"></a>00104                         cpl_table_select_operator op2, 
-<a name="l00105"></a>00105                         <span class="keyword">const</span> <span class="keywordtype">double</span> v2);
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_skycor.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_skycor.h,v 1.13 2007/03/05 07:21:54 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/03/05 07:21:54 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#ifndef SINFO_SKYCOR_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKYCOR_H</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#define SINFO_MASK_WAVE_MIN 1.4</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MASK_WAVE_MAX 2.5</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_MIN_FRAC 0.8</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_LINE_HALF_WIDTH 4.0</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKY_BKG_FILTER_WIDTH 12</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#define HISTO_NBINS 100</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_MIN_SIZE 10</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_Y_CUT 10          </span><span class="comment">/* 50 is a better value this </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                                   affects histo right marging*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_X_LEFT_CUT  1.0   </span><span class="comment">/* 0.2 is better */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_X_RIGHT_CUT  0.5  </span><span class="comment">/* 1.0 is better */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_DIST_TEMPC_MIN_FCT 5.   </span><span class="comment">/* 5.0 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define HISTO_DIST_TEMPC_MAX_FCT 0.25 </span><span class="comment">/* 0.25 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">struct </span>sinfo_skycor_qc_ {</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span>   th_fit;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> };</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>sinfo_skycor_qc_ sinfo_skycor_qc; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> sinfo_skycor_qc* sinfo_skycor_qc_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keywordtype">void</span> sinfo_skycor_qc_delete(sinfo_skycor_qc** s);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_skycor(cpl_parameterlist * config, </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>              cpl_frame* obj_frm, </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>              cpl_frame* sky_frm,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>              sinfo_skycor_qc* sqc,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>              cpl_imagelist** obj_cor,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>              cpl_table** int_obj);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_histogram(<span class="keyword">const</span> cpl_table* data,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                 <span class="keyword">const</span> <span class="keywordtype">int</span> nbins, </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> min, </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>                 <span class="keyword">const</span> <span class="keywordtype">double</span> max,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>                 cpl_table** histo);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_table_get_index_of_val(cpl_table* t,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                              <span class="keywordtype">double</span> val,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                              cpl_type type);</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> sinfo_table_get_index_of_max(cpl_table* t,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                              cpl_type type);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> sinfo_table_column_interpolate(<span class="keyword">const</span> cpl_table* t,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                                <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> cpl_table* </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_where_tab_min_max(cpl_table* t, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                         cpl_table_select_operator op1,  </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> v1, </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                         cpl_table_select_operator op2, </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                         <span class="keyword">const</span> <span class="keywordtype">double</span> v2);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__skycor__config_8c_source.html b/html/sinfo__skycor__config_8c_source.html
index 76a94c2..d14b085 100644
--- a/html/sinfo__skycor__config_8c_source.html
+++ b/html/sinfo__skycor__config_8c_source.html
@@ -2,224 +2,255 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_skycor_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_skycor_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_skycor_config.c,v 1.17 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.17 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_skycor_config.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_skycor.h"</span>
-<a name="l00034"></a>00034 
-<a name="l00054"></a>00054   <span class="comment">/* General data reduction parameters */</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span>
-<a name="l00057"></a>00057  sinfo_skycor_config_add(cpl_parameterlist *list)
-<a name="l00058"></a>00058 {
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060   cpl_parameter *p;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   <span class="keywordflow">if</span> (!list) {
-<a name="l00063"></a>00063     <span class="keywordflow">return</span>;
-<a name="l00064"></a>00064   }
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067    <span class="comment">/* Fill the parameters list */</span>
-<a name="l00068"></a>00068     <span class="comment">/* --stropt */</span>
-<a name="l00069"></a>00069   
-<a name="l00070"></a>00070     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_ws"</span>, 
-<a name="l00071"></a>00071                                 CPL_TYPE_DOUBLE, 
-<a name="l00072"></a>00072              <span class="stringliteral">"Starting wavelength for object-sky cross correlation"</span>, 
-<a name="l00073"></a>00073                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>,
-<a name="l00074"></a>00074                                 SINFO_MASK_WAVE_MIN) ;
-<a name="l00075"></a>00075     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-mask_ws"</span>) ;
-<a name="l00076"></a>00076     cpl_parameterlist_append(list, p) ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_we"</span>, 
-<a name="l00080"></a>00080                                 CPL_TYPE_DOUBLE, 
-<a name="l00081"></a>00081              <span class="stringliteral">"End wavelength for object-sky cross correlation"</span>, 
-<a name="l00082"></a>00082                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00083"></a>00083                                 SINFO_MASK_WAVE_MAX) ;
-<a name="l00084"></a>00084     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-mask_we"</span>) ;
-<a name="l00085"></a>00085     cpl_parameterlist_append(list, p) ;
-<a name="l00086"></a>00086   
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.min_frac"</span>, 
-<a name="l00089"></a>00089                                 CPL_TYPE_DOUBLE, 
-<a name="l00090"></a>00090    <span class="stringliteral">"Threshold value for fraction of spatial pixels to be sky"</span>, 
-<a name="l00091"></a>00091                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00092"></a>00092                                 SINFO_MIN_FRAC) ;
-<a name="l00093"></a>00093     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-min_frac"</span>) ;
-<a name="l00094"></a>00094     cpl_parameterlist_append(list, p) ;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     p = cpl_parameter_new_range(
-<a name="l00099"></a>00099                       <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sky_bkg_filter_width"</span>, 
-<a name="l00100"></a>00100                                 CPL_TYPE_INT, 
-<a name="l00101"></a>00101                                 <span class="stringliteral">"Width of sky-thermal background pre filter "</span>
-<a name="l00102"></a>00102                                 <span class="stringliteral">"(to remove emission lines before fitting a "</span>
-<a name="l00103"></a>00103                                 <span class="stringliteral">"Black Body)."</span>, 
-<a name="l00104"></a>00104                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00105"></a>00105                                 SINFO_SKY_BKG_FILTER_WIDTH,2,25) ;
-<a name="l00106"></a>00106     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, 
-<a name="l00107"></a>00107                               <span class="stringliteral">"skycor-sky_bkg_filter_width"</span>) ;
-<a name="l00108"></a>00108     cpl_parameterlist_append(list, p) ;
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.line_half_width"</span>, 
-<a name="l00111"></a>00111                                 CPL_TYPE_DOUBLE, 
-<a name="l00112"></a>00112                                 <span class="stringliteral">"Threshold value for full width in pixels "</span>
-<a name="l00113"></a>00113                                 <span class="stringliteral">"of unresolved emission line. Lines with FWHM "</span>
-<a name="l00114"></a>00114                                 <span class="stringliteral">"smaller than this value are not considered "</span> 
-<a name="l00115"></a>00115                                 <span class="stringliteral">"in the object-sky cross correlation and in "</span>
-<a name="l00116"></a>00116                                 <span class="stringliteral">"computation of the optimal sky lines scaling "</span>
-<a name="l00117"></a>00117                                 <span class="stringliteral">"factor"</span>, 
-<a name="l00118"></a>00118                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00119"></a>00119                                 SINFO_LINE_HALF_WIDTH) ;
-<a name="l00120"></a>00120     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-line_hw"</span>) ;
-<a name="l00121"></a>00121     cpl_parameterlist_append(list, p) ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.scale_method"</span>, 
-<a name="l00124"></a>00124                    CPL_TYPE_INT, 
-<a name="l00125"></a>00125                                <span class="stringliteral">"Optimal sky lines scaling factor computation "</span>
-<a name="l00126"></a>00126                    <span class="stringliteral">"method: amoeba fit (0), "</span>
-<a name="l00127"></a>00127                                <span class="stringliteral">"maximum likelihood (1) "</span>,
-<a name="l00128"></a>00128                                <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00129"></a>00129                                1,2,0,1) ;
-<a name="l00130"></a>00130     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, 
-<a name="l00131"></a>00131                             <span class="stringliteral">"skycor-scale_method"</span>) ;
-<a name="l00132"></a>00132     cpl_parameterlist_append(list, p) ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>, 
-<a name="l00136"></a>00136                                 CPL_TYPE_BOOL, 
-<a name="l00137"></a>00137                                 <span class="stringliteral">"Computes scaling factor correction due to "</span>
-<a name="l00138"></a>00138                                 <span class="stringliteral">"rotational levels transitions"</span>,
-<a name="l00139"></a>00139                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00140"></a>00140                                 FALSE) ;
-<a name="l00141"></a>00141     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-rot_cor"</span>) ;
-<a name="l00142"></a>00142     cpl_parameterlist_append(list, p) ;
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.fit_obj_noise"</span>, 
-<a name="l00147"></a>00147                                 CPL_TYPE_BOOL, 
-<a name="l00148"></a>00148                                 <span class="stringliteral">"Do Gaussian fit of object noise"</span>,
-<a name="l00149"></a>00149                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00150"></a>00150                                 FALSE) ;
-<a name="l00151"></a>00151     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-fit_obj_noise"</span>);
-<a name="l00152"></a>00152     cpl_parameterlist_append(list, p) ;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.niter"</span>, 
-<a name="l00156"></a>00156                                 CPL_TYPE_INT, 
-<a name="l00157"></a>00157                                 <span class="stringliteral">"Number of iterations of background "</span>
-<a name="l00158"></a>00158                                 <span class="stringliteral">"fit"</span>, 
-<a name="l00159"></a>00159                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00160"></a>00160                                 10) ;
-<a name="l00161"></a>00161     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-niter"</span>) ;
-<a name="l00162"></a>00162     cpl_parameterlist_append(list, p) ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.pshift"</span>, 
-<a name="l00165"></a>00165                                 CPL_TYPE_DOUBLE, 
-<a name="l00166"></a>00166                                 <span class="stringliteral">"Sky spectrum shift towar object"</span>, 
-<a name="l00167"></a>00167                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00168"></a>00168                                 0.) ;
-<a name="l00169"></a>00169     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-pshift"</span>) ;
-<a name="l00170"></a>00170     cpl_parameterlist_append(list, p) ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.llx"</span>, 
-<a name="l00173"></a>00173                                 CPL_TYPE_INT, 
-<a name="l00174"></a>00174                                 <span class="stringliteral">"Lower left X defining object "</span>
-<a name="l00175"></a>00175                                 <span class="stringliteral">"spectrum location"</span>, 
-<a name="l00176"></a>00176                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00177"></a>00177                                 1) ;
-<a name="l00178"></a>00178     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-llx"</span>) ;
-<a name="l00179"></a>00179     cpl_parameterlist_append(list, p) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.lly"</span>, 
-<a name="l00182"></a>00182                                 CPL_TYPE_INT, 
-<a name="l00183"></a>00183                                 <span class="stringliteral">"Lower left Y defining object "</span>
-<a name="l00184"></a>00184                                 <span class="stringliteral">"spectrum location"</span>, 
-<a name="l00185"></a>00185                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00186"></a>00186                                 1) ;
-<a name="l00187"></a>00187     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-lly"</span>) ;
-<a name="l00188"></a>00188     cpl_parameterlist_append(list, p) ;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.urx"</span>, 
-<a name="l00193"></a>00193                                 CPL_TYPE_INT, 
-<a name="l00194"></a>00194                                 <span class="stringliteral">"Upper right X defining object "</span>
-<a name="l00195"></a>00195                                 <span class="stringliteral">"spectrum location"</span>, 
-<a name="l00196"></a>00196                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00197"></a>00197                                 64) ;
-<a name="l00198"></a>00198     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-urx"</span>) ;
-<a name="l00199"></a>00199     cpl_parameterlist_append(list, p) ;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.ury"</span>, 
-<a name="l00203"></a>00203                                 CPL_TYPE_INT, 
-<a name="l00204"></a>00204                                 <span class="stringliteral">"Upper right Y defining object "</span>
-<a name="l00205"></a>00205                                 <span class="stringliteral">"spectrum location"</span>, 
-<a name="l00206"></a>00206                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00207"></a>00207                                 64) ;
-<a name="l00208"></a>00208     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-ury"</span>) ;
-<a name="l00209"></a>00209     cpl_parameterlist_append(list, p) ;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     p = cpl_parameter_new_value(
-<a name="l00214"></a>00214      
-<a name="l00215"></a>00215                               <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sub_thr_bkg_from_obj"</span>, 
-<a name="l00216"></a>00216                                 CPL_TYPE_BOOL, 
-<a name="l00217"></a>00217                                 <span class="stringliteral">"Subtract thermal background contribute from "</span>
-<a name="l00218"></a>00218                                 <span class="stringliteral">"object spectra. Set it to TRUE if "</span>
-<a name="l00219"></a>00219                                 <span class="stringliteral">"stack-sub_raw_sky is set to FALSE"</span>,
-<a name="l00220"></a>00220                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, 
-<a name="l00221"></a>00221                                 FALSE) ;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, 
-<a name="l00224"></a>00224                 <span class="stringliteral">"skycor-sub_thr_bkg_from_obj"</span>) ;
-<a name="l00225"></a>00225     cpl_parameterlist_append(list, p) ;
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_skycor_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_skycor_config.c,v 1.17 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.17 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_skycor_config.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_skycor.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="comment">/* General data reduction parameters */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>  sinfo_skycor_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   }</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>    <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_ws"</span>, </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>              <span class="stringliteral">"Starting wavelength for object-sky cross correlation"</span>, </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                                 SINFO_MASK_WAVE_MIN) ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-mask_ws"</span>) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.mask_we"</span>, </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>              <span class="stringliteral">"End wavelength for object-sky cross correlation"</span>, </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                 SINFO_MASK_WAVE_MAX) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-mask_we"</span>) ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.min_frac"</span>, </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    <span class="stringliteral">"Threshold value for fraction of spatial pixels to be sky"</span>, </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                                 SINFO_MIN_FRAC) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-min_frac"</span>) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     p = cpl_parameter_new_range(</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                       <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sky_bkg_filter_width"</span>, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                 <span class="stringliteral">"Width of sky-thermal background pre filter "</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                 <span class="stringliteral">"(to remove emission lines before fitting a "</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                 <span class="stringliteral">"Black Body)."</span>, </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                 SINFO_SKY_BKG_FILTER_WIDTH,2,25) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                               <span class="stringliteral">"skycor-sky_bkg_filter_width"</span>) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.line_half_width"</span>, </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                                 <span class="stringliteral">"Threshold value for full width in pixels "</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                                 <span class="stringliteral">"of unresolved emission line. Lines with FWHM "</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                                 <span class="stringliteral">"smaller than this value are not considered "</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                                 <span class="stringliteral">"in the object-sky cross correlation and in "</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                                 <span class="stringliteral">"computation of the optimal sky lines scaling "</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                                 <span class="stringliteral">"factor"</span>, </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                                 SINFO_LINE_HALF_WIDTH) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-line_hw"</span>) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.scale_method"</span>, </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                    CPL_TYPE_INT, </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                                <span class="stringliteral">"Optimal sky lines scaling factor computation "</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                    <span class="stringliteral">"method: amoeba fit (0), "</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                <span class="stringliteral">"maximum likelihood (1) "</span>,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                                <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                1,2,0,1) ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                             <span class="stringliteral">"skycor-scale_method"</span>) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.rot_cor"</span>, </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                                 CPL_TYPE_BOOL, </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                 <span class="stringliteral">"Computes scaling factor correction due to "</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                                 <span class="stringliteral">"rotational levels transitions"</span>,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                                 FALSE) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-rot_cor"</span>) ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.fit_obj_noise"</span>, </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                 CPL_TYPE_BOOL, </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                 <span class="stringliteral">"Do Gaussian fit of object noise"</span>,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                 FALSE) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-fit_obj_noise"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.niter"</span>, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                 <span class="stringliteral">"Number of iterations of background "</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                 <span class="stringliteral">"fit"</span>, </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                 10) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-niter"</span>) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.pshift"</span>, </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                 <span class="stringliteral">"Sky spectrum shift towar object"</span>, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                                 0.) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-pshift"</span>) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.llx"</span>, </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                 <span class="stringliteral">"Lower left X defining object "</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                                 <span class="stringliteral">"spectrum location"</span>, </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                                 1) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-llx"</span>) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.lly"</span>, </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                                 <span class="stringliteral">"Lower left Y defining object "</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                                 <span class="stringliteral">"spectrum location"</span>, </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                                 1) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-lly"</span>) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.urx"</span>, </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                 <span class="stringliteral">"Upper right X defining object "</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                 <span class="stringliteral">"spectrum location"</span>, </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                 64) ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-urx"</span>) ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skycor.ury"</span>, </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                 <span class="stringliteral">"Upper right Y defining object "</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                                 <span class="stringliteral">"spectrum location"</span>, </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                                 64) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"skycor-ury"</span>) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     p = cpl_parameter_new_value(</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>      </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                               <span class="stringliteral">"sinfoni.sinfo_utl_skycor.sub_thr_bkg_from_obj"</span>, </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                 CPL_TYPE_BOOL, </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                 <span class="stringliteral">"Subtract thermal background contribute from "</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                                 <span class="stringliteral">"object spectra. Set it to TRUE if "</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                                 <span class="stringliteral">"stack-sub_raw_sky is set to FALSE"</span>,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_skycor"</span>, </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                                 FALSE) ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                 <span class="stringliteral">"skycor-sub_thr_bkg_from_obj"</span>) ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     cpl_parameterlist_append(list, p) ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__skycor__config_8h_source.html b/html/sinfo__skycor__config_8h_source.html
index 1b90332..6fbbe1b 100644
--- a/html/sinfo__skycor__config_8h_source.html
+++ b/html/sinfo__skycor__config_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_skycor_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_skycor_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_skycor_config.h,v 1.1 2006/11/27 16:55:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/11/27 16:55:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (noise method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_SKYCOR_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKYCOR_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>   
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">void</span> sinfo_skycor_config_add(cpl_parameterlist *list);
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_skycor_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_skycor_config.h,v 1.1 2006/11/27 16:55:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/11/27 16:55:26 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (noise method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_SKYCOR_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SKYCOR_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span>   </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">void</span> sinfo_skycor_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__solve__poly__root_8c_source.html b/html/sinfo__solve__poly__root_8c_source.html
index cd193de..f8b8e86 100644
--- a/html/sinfo__solve__poly__root_8c_source.html
+++ b/html/sinfo__solve__poly__root_8c_source.html
@@ -2,136 +2,167 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_solve_poly_root.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_solve_poly_root.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="comment">/*#include "companion.c"*/</span>
-<a name="l00023"></a>00023 <span class="comment">/*#include "balance.c"*/</span>
-<a name="l00024"></a>00024 <span class="comment">/*#include "qr.c"*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00026"></a>00026 
-<a name="l00035"></a>00035 gsl_poly_complex_workspace *
-<a name="l00036"></a>00036 sinfo_gsl_poly_complex_workspace_alloc (<span class="keywordtype">size_t</span> n)
-<a name="l00037"></a>00037 {
-<a name="l00038"></a>00038   <span class="keywordtype">size_t</span> nc ;
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040   gsl_poly_complex_workspace * w ;
-<a name="l00041"></a>00041  
-<a name="l00042"></a>00042   <span class="keywordflow">if</span> (n == 0)
-<a name="l00043"></a>00043     {
-<a name="l00044"></a>00044       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"sinfo_matrix size n must be positive integer"</span>);
-<a name="l00045"></a>00045       <span class="keywordflow">return</span> NULL ;
-<a name="l00046"></a>00046     }
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048   w = (gsl_poly_complex_workspace *)
-<a name="l00049"></a>00049     cpl_malloc (<span class="keyword">sizeof</span>(gsl_poly_complex_workspace));
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051   <span class="keywordflow">if</span> (w == 0)
-<a name="l00052"></a>00052     {
-<a name="l00053"></a>00053       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"failed to allocate space for struct"</span>);
-<a name="l00054"></a>00054       <span class="keywordflow">return</span> NULL ;
-<a name="l00055"></a>00055     }
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057   nc = n - 1;
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059   w->nc = nc;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   w->sinfo_matrix = (<span class="keywordtype">double</span> *) cpl_malloc (nc * nc * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063   <span class="keywordflow">if</span> (w->sinfo_matrix == 0)
-<a name="l00064"></a>00064     {
-<a name="l00065"></a>00065       cpl_free (w) ;       <span class="comment">/* error in constructor, avoid memory leak */</span>
-<a name="l00066"></a>00066       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"failed to allocate for workspace sinfo_matrix"</span>) ;
-<a name="l00067"></a>00067       <span class="keywordflow">return</span>  NULL ;
-<a name="l00068"></a>00068     }
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070   <span class="keywordflow">return</span> w ;
-<a name="l00071"></a>00071 }
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keywordtype">void</span>
-<a name="l00074"></a>00074 sinfo_gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w)
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076   cpl_free(w->sinfo_matrix) ;
-<a name="l00077"></a>00077   cpl_free(w);
-<a name="l00078"></a>00078 }
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keywordtype">int</span>
-<a name="l00082"></a>00082 sinfo_gsl_poly_complex_solve (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> n,
-<a name="l00083"></a>00083             gsl_poly_complex_workspace * w,
-<a name="l00084"></a>00084             gsl_complex_packed_ptr z)
-<a name="l00085"></a>00085 {
-<a name="l00086"></a>00086   <span class="keywordtype">int</span> status;
-<a name="l00087"></a>00087   <span class="keywordtype">double</span> *m;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089   <span class="keywordflow">if</span> (n == 0)
-<a name="l00090"></a>00090     {
-<a name="l00091"></a>00091       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"number of terms must be a positive integer"</span>);
-<a name="l00092"></a>00092       <span class="keywordflow">return</span> -1 ;
-<a name="l00093"></a>00093     }
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095   <span class="keywordflow">if</span> (n == 1)
-<a name="l00096"></a>00096     {
-<a name="l00097"></a>00097       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot solve for only one term"</span>);
-<a name="l00098"></a>00098       <span class="keywordflow">return</span> -1 ;
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   <span class="keywordflow">if</span> (a[n - 1] == 0)
-<a name="l00102"></a>00102     {
-<a name="l00103"></a>00103       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"leading term of polynomial must be non-zero"</span>) ;
-<a name="l00104"></a>00104       <span class="keywordflow">return</span> -1 ;
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107   <span class="keywordflow">if</span> (w->nc != n - 1)
-<a name="l00108"></a>00108     {
-<a name="l00109"></a>00109       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"size of workspace does not match polynomial"</span>);
-<a name="l00110"></a>00110       <span class="keywordflow">return</span> -1 ;
-<a name="l00111"></a>00111     }
-<a name="l00112"></a>00112   
-<a name="l00113"></a>00113   m = w->sinfo_matrix;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115   sinfo_set_companion_matrix (a, n - 1, m);
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117   sinfo_balance_companion_matrix (m, n - 1);
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   status = sinfo_qr_companion (m, n - 1, z);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="keywordflow">if</span> (status == -1)
-<a name="l00122"></a>00122     {
-<a name="l00123"></a>00123       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"root solving qr method failed to converge"</span>);
-<a name="l00124"></a>00124       <span class="keywordflow">return</span> -1 ;
-<a name="l00125"></a>00125     }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   <span class="keywordflow">return</span> 1;
-<a name="l00128"></a>00128 }
-<a name="l00129"></a>00129 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_solve_poly_root.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="comment">/*#include "companion.c"*/</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">/*#include "balance.c"*/</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">/*#include "qr.c"*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> gsl_poly_complex_workspace *</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> sinfo_gsl_poly_complex_workspace_alloc (<span class="keywordtype">size_t</span> n)</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">size_t</span> nc ;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   gsl_poly_complex_workspace * w ;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>  </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     {</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"sinfo_matrix size n must be positive integer"</span>);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     }</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>   w = (gsl_poly_complex_workspace *)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     cpl_malloc (<span class="keyword">sizeof</span>(gsl_poly_complex_workspace));</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordflow">if</span> (w == 0)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"failed to allocate space for struct"</span>);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     }</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   nc = n - 1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   w->nc = nc;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   w->sinfo_matrix = (<span class="keywordtype">double</span> *) cpl_malloc (nc * nc * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   <span class="keywordflow">if</span> (w->sinfo_matrix == 0)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       cpl_free (w) ;       <span class="comment">/* error in constructor, avoid memory leak */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"failed to allocate for workspace sinfo_matrix"</span>) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       <span class="keywordflow">return</span>  NULL ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     }</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordflow">return</span> w ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> sinfo_gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cpl_free(w->sinfo_matrix) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_free(w);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> sinfo_gsl_poly_complex_solve (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> n,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>             gsl_poly_complex_workspace * w,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>             gsl_complex_packed_ptr z)</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   <span class="keywordtype">int</span> status;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   <span class="keywordtype">double</span> *m;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>   <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"number of terms must be a positive integer"</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordflow">if</span> (n == 1)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot solve for only one term"</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   <span class="keywordflow">if</span> (a[n - 1] == 0)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"leading term of polynomial must be non-zero"</span>) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="keywordflow">if</span> (w->nc != n - 1)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"size of workspace does not match polynomial"</span>);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   m = w->sinfo_matrix;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   sinfo_set_companion_matrix (a, n - 1, m);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   sinfo_balance_companion_matrix (m, n - 1);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   status = sinfo_qr_companion (m, n - 1, z);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span> (status == -1)</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"root solving qr method failed to converge"</span>);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__solve__poly__root_8h_source.html b/html/sinfo__solve__poly__root_8h_source.html
index 1ce87ec..2cd60be 100644
--- a/html/sinfo__solve__poly__root_8h_source.html
+++ b/html/sinfo__solve__poly__root_8h_source.html
@@ -2,92 +2,123 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_solve_poly_root.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_solve_poly_root.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_SOLVE_POLY_ROOT_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SOLVE_POLY_ROOT_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/*</span>
-<a name="l00023"></a>00023 <span class="comment">#include <stdio.h></span>
-<a name="l00024"></a>00024 <span class="comment">*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include <math.h></span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/* C-style sinfo_matrix elements */</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#define MAT(m,i,j,n) ((m)[(i)*(n) + (j)])</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="comment">/* Fortran-style sinfo_matrix elements */</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#define FMAT(m,i,j,n) ((m)[((i)-1)*(n) + ((j)-1)])</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#undef __BEGIN_DECLS</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#undef __END_DECLS</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#ifdef __cplusplus</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor"># define __BEGIN_DECLS extern "C" {</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor"># define __END_DECLS }</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor"># define __BEGIN_DECLS </span><span class="comment">/* empty */</span>
-<a name="l00045"></a>00045 <span class="preprocessor"># define __END_DECLS </span><span class="comment">/* empty */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span>
-<a name="l00048"></a>00048 <span class="keyword">typedef</span> <span class="keywordtype">double</span> *       gsl_complex_packed_ptr ;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keywordtype">void</span> sinfo_balance_companion_matrix (<span class="keywordtype">double</span> *m, <span class="keywordtype">size_t</span> nc);
-<a name="l00051"></a>00051 <span class="keywordtype">int</span> sinfo_qr_companion (<span class="keywordtype">double</span> *h, <span class="keywordtype">size_t</span> nc, gsl_complex_packed_ptr z);
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> sinfo_set_companion_matrix (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> n, <span class="keywordtype">double</span> *m);
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 __BEGIN_DECLS
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/* Solve for the complex roots of a general real polynomial */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">typedef</span> <span class="keyword">struct </span>
-<a name="l00059"></a>00059 { 
-<a name="l00060"></a>00060   <span class="keywordtype">size_t</span> nc ;
-<a name="l00061"></a>00061   <span class="keywordtype">double</span> * sinfo_matrix ; 
-<a name="l00062"></a>00062 } 
-<a name="l00063"></a>00063 gsl_poly_complex_workspace ;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 gsl_poly_complex_workspace * sinfo_gsl_poly_complex_workspace_alloc (<span class="keywordtype">size_t</span> n);
-<a name="l00066"></a>00066 <span class="keywordtype">void</span> sinfo_gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keywordtype">int</span>
-<a name="l00069"></a>00069 sinfo_gsl_poly_complex_solve (<span class="keyword">const</span> <span class="keywordtype">double</span> * a, <span class="keywordtype">size_t</span> n, 
-<a name="l00070"></a>00070                         gsl_poly_complex_workspace * w,
-<a name="l00071"></a>00071                         gsl_complex_packed_ptr z);
-<a name="l00072"></a>00072             
-<a name="l00073"></a>00073             
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 __END_DECLS
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="preprocessor">#endif </span><span class="comment">/* SINFO_SOLVE_POLY_ROOT_H */</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_solve_poly_root.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_SOLVE_POLY_ROOT_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SOLVE_POLY_ROOT_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">#include <stdio.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/* C-style sinfo_matrix elements */</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#define MAT(m,i,j,n) ((m)[(i)*(n) + (j)])</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/* Fortran-style sinfo_matrix elements */</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#define FMAT(m,i,j,n) ((m)[((i)-1)*(n) + ((j)-1)])</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#undef __BEGIN_DECLS</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#undef __END_DECLS</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor"># define __BEGIN_DECLS extern "C" {</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor"># define __END_DECLS }</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor"># define __BEGIN_DECLS </span><span class="comment">/* empty */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor"># define __END_DECLS </span><span class="comment">/* empty */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">typedef</span> <span class="keywordtype">double</span> *       gsl_complex_packed_ptr ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">void</span> sinfo_balance_companion_matrix (<span class="keywordtype">double</span> *m, <span class="keywordtype">size_t</span> nc);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keywordtype">int</span> sinfo_qr_companion (<span class="keywordtype">double</span> *h, <span class="keywordtype">size_t</span> nc, gsl_complex_packed_ptr z);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">void</span> sinfo_set_companion_matrix (<span class="keyword">const</span> <span class="keywordtype">double</span> *a, <span class="keywordtype">size_t</span> n, <span class="keywordtype">double</span> *m);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> __BEGIN_DECLS</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/* Solve for the complex roots of a general real polynomial */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">typedef</span> <span class="keyword">struct </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> { </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   <span class="keywordtype">size_t</span> nc ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   <span class="keywordtype">double</span> * sinfo_matrix ; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> } </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> gsl_poly_complex_workspace ;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> gsl_poly_complex_workspace * sinfo_gsl_poly_complex_workspace_alloc (<span class="keywordtype">size_t</span> n);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">void</span> sinfo_gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> sinfo_gsl_poly_complex_solve (<span class="keyword">const</span> <span class="keywordtype">double</span> * a, <span class="keywordtype">size_t</span> n, </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                         gsl_poly_complex_workspace * w,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                         gsl_complex_packed_ptr z);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>             </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>             </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> __END_DECLS</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor">#endif </span><span class="comment">/* SINFO_SOLVE_POLY_ROOT_H */</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__spectrum__ops_8c_source.html b/html/sinfo__spectrum__ops_8c_source.html
index b238732..26eaf49 100644
--- a/html/sinfo__spectrum__ops_8c_source.html
+++ b/html/sinfo__spectrum__ops_8c_source.html
@@ -2,2419 +2,2450 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_spectrum_ops.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_spectrum_ops.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/***************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  25/05/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*        sinfo_spectrum_ops.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*        some sinfo_vector procedures to operate on spectra</span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">*   #include "sinfo_spectrum_ops.h"</span>
-<a name="l00036"></a>00036 <span class="comment">*</span>
-<a name="l00037"></a>00037 <span class="comment">*   1) Vector * sinfo_new_vector( ulong32 n_elements )</span>
-<a name="l00038"></a>00038 <span class="comment">*   2) void * sinfo_new_destroy_vector( Vector *sinfo_vector )</span>
-<a name="l00039"></a>00039 <span class="comment">*   3) cpl_image * sinfo_new_vector_to_image( Vector * spectrum )</span>
-<a name="l00040"></a>00040 <span class="comment">*   4) Vector * sinfo_new_image_to_vector( cpl_image * spectrum )</span>
-<a name="l00041"></a>00041 <span class="comment">*   5) cpl_image * </span>
-<a name="l00042"></a>00042 <span class="comment">       sinfo_new_extract_spectrum_from_resampled_flat(cpl_image * resflat,</span>
-<a name="l00043"></a>00043 <span class="comment">*                                                   float      loreject,</span>
-<a name="l00044"></a>00044 <span class="comment">*                                                   float      hireject ) </span>
-<a name="l00045"></a>00045 <span class="comment">*   6) cpl_image * sinfo_new_multiply_image_with_spectrum(cpl_image * image, </span>
-<a name="l00046"></a>00046 <span class="comment">                                                          cpl_image * spectrum)</span>
-<a name="l00047"></a>00047 <span class="comment">*   7) cpl_image * sinfo_new_optimal_extraction_from_cube(cpl_imagelist * cube, </span>
-<a name="l00048"></a>00048 <span class="comment">*                                            int       halfbox_x, </span>
-<a name="l00049"></a>00049 <span class="comment">*                                            int       halfbox_y,</span>
-<a name="l00050"></a>00050 <span class="comment">*                                            float     fwhm_factor,</span>
-<a name="l00051"></a>00051 <span class="comment">*                                            float     backvariance,</span>
-<a name="l00052"></a>00052 <span class="comment">*                                            float     sky,</span>
-<a name="l00053"></a>00053 <span class="comment">*                                            float     gain,</span>
-<a name="l00054"></a>00054 <span class="comment">*                                            float     exptime)</span>
-<a name="l00055"></a>00055 <span class="comment">*   8) Vector * sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,</span>
-<a name="l00056"></a>00056 <span class="comment">*                                   float     loReject,</span>
-<a name="l00057"></a>00057 <span class="comment">*                                   float     hiReject,</span>
-<a name="l00058"></a>00058 <span class="comment">*                                   int     * position,</span>
-<a name="l00059"></a>00059 <span class="comment">*                                   int       tolerance,</span>
-<a name="l00060"></a>00060 <span class="comment">*                                   int       posindicator )</span>
-<a name="l00061"></a>00061 <span class="comment">*    9) Vector * sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00062"></a>00062 <span class="comment">*                                     int llx,</span>
-<a name="l00063"></a>00063 <span class="comment">*                                     int lly,</span>
-<a name="l00064"></a>00064 <span class="comment">*                                     int urx,</span>
-<a name="l00065"></a>00065 <span class="comment">*                                     int ury )</span>
-<a name="l00066"></a>00066 <span class="comment">*   10) Vector * sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00067"></a>00067 <span class="comment">*                                        int       centerx,</span>
-<a name="l00068"></a>00068 <span class="comment">*                                        int       centery,</span>
-<a name="l00069"></a>00069 <span class="comment">*                                        int       radius )</span>
-<a name="l00070"></a>00070 <span class="comment">*   11) Vector * </span>
-<a name="l00071"></a>00071 <span class="comment">        sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00072"></a>00072 <span class="comment">*                                            int llx,</span>
-<a name="l00073"></a>00073 <span class="comment">*                                            int lly,</span>
-<a name="l00074"></a>00074 <span class="comment">*                                            int urx,</span>
-<a name="l00075"></a>00075 <span class="comment">*                                            int ury )</span>
-<a name="l00076"></a>00076 <span class="comment">*   12) Vector * sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00077"></a>00077 <span class="comment">*                                         int       centerx,</span>
-<a name="l00078"></a>00078 <span class="comment">*                                         int       centery,</span>
-<a name="l00079"></a>00079 <span class="comment">*                                         int       radius )</span>
-<a name="l00080"></a>00080 <span class="comment">*   13) Vector * </span>
-<a name="l00081"></a>00081 <span class="comment">        sinfo_new_blackbody_spectrum(char * templateSpec, double temp )</span>
-<a name="l00082"></a>00082 <span class="comment">*   14) Vector * </span>
-<a name="l00083"></a>00083 <span class="comment">        sinfo_new_median_rectangle_of_cube_spectra(cpl_imagelist * cube,</span>
-<a name="l00084"></a>00084 <span class="comment">*                                               int llx,</span>
-<a name="l00085"></a>00085 <span class="comment">*                                               int lly,</span>
-<a name="l00086"></a>00086 <span class="comment">*                                               int urx,</span>
-<a name="l00087"></a>00087 <span class="comment">*                                               int ury )</span>
-<a name="l00088"></a>00088 <span class="comment">*   15) Vector * sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00089"></a>00089 <span class="comment">*                                           int       centerx,</span>
-<a name="l00090"></a>00090 <span class="comment">*                                           int       centery,</span>
-<a name="l00091"></a>00091 <span class="comment">*                                           int       radius )</span>
-<a name="l00092"></a>00092 <span class="comment">*   16) Vector * </span>
-<a name="l00093"></a>00093 <span class="comment">        sinfo_new_cleanmean_rectangle_of_cube_spectra(cpl_imagelist * cube,</span>
-<a name="l00094"></a>00094 <span class="comment">*                                                 int llx,</span>
-<a name="l00095"></a>00095 <span class="comment">*                                                 int lly,</span>
-<a name="l00096"></a>00096 <span class="comment">*                                                 int urx,</span>
-<a name="l00097"></a>00097 <span class="comment">*                                                 int ury,</span>
-<a name="l00098"></a>00098 <span class="comment">*                                                 float lo_reject,</span>
-<a name="l00099"></a>00099 <span class="comment">*                                                 float hi_reject )</span>
-<a name="l00100"></a>00100 <span class="comment">*   17) Vector * </span>
-<a name="l00101"></a>00101 <span class="comment">        sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,</span>
-<a name="l00102"></a>00102 <span class="comment">*                                              int       centerx,</span>
-<a name="l00103"></a>00103 <span class="comment">*                                              int       centery,</span>
-<a name="l00104"></a>00104 <span class="comment">*                                              int       radius,</span>
-<a name="l00105"></a>00105 <span class="comment">*                                              float     lo_reject,</span>
-<a name="l00106"></a>00106 <span class="comment">*                                              float     hi_reject )</span>
-<a name="l00107"></a>00107 <span class="comment">*   18) float * sinfo_new_shift_array ( float * input, </span>
-<a name="l00108"></a>00108 <span class="comment">                                        int n_elements, </span>
-<a name="l00109"></a>00109 <span class="comment">                                        float shift, </span>
-<a name="l00110"></a>00110 <span class="comment">                                        double * ker ) </span>
-<a name="l00111"></a>00111 <span class="comment">*</span>
-<a name="l00112"></a>00112 <span class="comment">*   DESCRIPTION</span>
-<a name="l00113"></a>00113 <span class="comment">*   1) allocates memory for a new sinfo_vector</span>
-<a name="l00114"></a>00114 <span class="comment">*   2) frees memory of a sinfo_vector</span>
-<a name="l00115"></a>00115 <span class="comment">*   3) converts a spectral sinfo_vector to a fits image</span>
-<a name="l00116"></a>00116 <span class="comment">*      remark: sinfo_vector object spectrum is destroyed</span>
-<a name="l00117"></a>00117 <span class="comment">*   4) converts a fits image to a spectral sinfo_vector</span>
-<a name="l00118"></a>00118 <span class="comment">*      remark: input image is destroyed</span>
-<a name="l00119"></a>00119 <span class="comment">*   5) builds one spectrum in a fits image out of a resampled</span>
-<a name="l00120"></a>00120 <span class="comment">*      flatfield frame by taking a clean mean along the spatial pixels</span>
-<a name="l00121"></a>00121 <span class="comment">*   6) multiplys a resampled image with a resampled spectrum</span>
-<a name="l00122"></a>00122 <span class="comment">*      (calibrated halogen lamp spectrum) in the same spectral range</span>
-<a name="l00123"></a>00123 <span class="comment">*      that means all image columns are multiplied with the same spectrum</span>
-<a name="l00124"></a>00124 <span class="comment">*   7) does the optimal extraction of a standard star spectrum</span>
-<a name="l00125"></a>00125 <span class="comment">*      according to the equation:</span>
-<a name="l00126"></a>00126 <span class="comment">*       S = sum { (P^2 / V) * (I - B) / P } / sum{ P^2 / V } </span>
-<a name="l00127"></a>00127 <span class="comment">*       S: spectral flux at a particular wavelength</span>
-<a name="l00128"></a>00128 <span class="comment">*       P: normalized PSF (determined by a 2D-Gaussian fit)</span>
-<a name="l00129"></a>00129 <span class="comment">*       I: pixel value</span>
-<a name="l00130"></a>00130 <span class="comment">*       B: background pixel value determined by the background parameter </span>
-<a name="l00131"></a>00131 <span class="comment">           of the 2D-Gaussian fit</span>
-<a name="l00132"></a>00132 <span class="comment">*       V: estimated variance of a pixel: </span>
-<a name="l00133"></a>00133 <span class="comment">           V = [R^2 + D + sky + I,c/exptime]/gain</span>
-<a name="l00134"></a>00134 <span class="comment">*          where R is the read noise, and D the sinfo_dark current variance.</span>
-<a name="l00135"></a>00135 <span class="comment">*          backvariance is R^2 + D in counts/sec. </span>
-<a name="l00136"></a>00136 <span class="comment">           I,c is the source intensity in counts</span>
-<a name="l00137"></a>00137 <span class="comment">*          Remember: sigma,e[e-] = gain[e/count] * sigma,c [counts] = </span>
-<a name="l00138"></a>00138 <span class="comment">                     sqrt(I,e) = sqrt(gain*I,c)</span>
-<a name="l00139"></a>00139 <span class="comment">*          => V,c = sigma,c^2 = sigma,e^2/gain^2 </span>
-<a name="l00140"></a>00140 <span class="comment">*          => sigma,c = sqrt(I,c/gain) => V,c = I,c/gain</span>
-<a name="l00141"></a>00141 <span class="comment">*   8) extracts a sky spectrum from a reduced sky spider observation, that</span>
-<a name="l00142"></a>00142 <span class="comment">*      means from a data cube. Therefore, the position of the sky within the</span>
-<a name="l00143"></a>00143 <span class="comment">*      field of view must be first read from the fits header.  </span>
-<a name="l00144"></a>00144 <span class="comment">       A pixel tolerance is subtracted.</span>
-<a name="l00145"></a>00145 <span class="comment">*      The found sky spectra are averaged by rejecting the extreme </span>
-<a name="l00146"></a>00146 <span class="comment">       high and low values.</span>
-<a name="l00147"></a>00147 <span class="comment">*   9) summing routine for a reduced data to get a better spectral S/N</span>
-<a name="l00148"></a>00148 <span class="comment">*      only for a rectangular aperture.</span>
-<a name="l00149"></a>00149 <span class="comment">*   10) summing routine for a reduced data to get a better spectral S/N</span>
-<a name="l00150"></a>00150 <span class="comment">*       only for a circular aperture.</span>
-<a name="l00151"></a>00151 <span class="comment">*   11) averaging routine for a reduced data to get a better spectral S/N</span>
-<a name="l00152"></a>00152 <span class="comment">*       only for a rectangular aperture.</span>
-<a name="l00153"></a>00153 <span class="comment">*   12) averaging routine for a reduced data to get a better spectral S/N</span>
-<a name="l00154"></a>00154 <span class="comment">*       only for a circular aperture.</span>
-<a name="l00155"></a>00155 <span class="comment">*   13) computes a blackbody spectral intensity distribution</span>
-<a name="l00156"></a>00156 <span class="comment">*       (W/(m^2 lambda ster)) </span>
-<a name="l00157"></a>00157 <span class="comment">*   14) sinfo_median routine for a reduced data to get a better spectral S/N</span>
-<a name="l00158"></a>00158 <span class="comment">*       only for a rectangular aperture.</span>
-<a name="l00159"></a>00159 <span class="comment">*   15) sinfo_median routine for a reduced data to get a better spectral S/N</span>
-<a name="l00160"></a>00160 <span class="comment">*       only for a circular aperture.</span>
-<a name="l00161"></a>00161 <span class="comment">*   16) clean averaging routine for a reduced data to get a better spectral S/N</span>
-<a name="l00162"></a>00162 <span class="comment">*       only for a rectangular aperture.</span>
-<a name="l00163"></a>00163 <span class="comment">*   17) clean averaging routine for a reduced data to get a better spectral S/N</span>
-<a name="l00164"></a>00164 <span class="comment">*       only for a circular aperture.</span>
-<a name="l00165"></a>00165 <span class="comment">*   18) shifts an array by a sub-pixel shift value using a tanh</span>
-<a name="l00166"></a>00166 <span class="comment">*       interpolation kernel</span>
-<a name="l00167"></a>00167 <span class="comment">*</span>
-<a name="l00168"></a>00168 <span class="comment">*   FILES</span>
-<a name="l00169"></a>00169 <span class="comment">*</span>
-<a name="l00170"></a>00170 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00171"></a>00171 <span class="comment">*</span>
-<a name="l00172"></a>00172 <span class="comment">*   RETURN VALUES</span>
-<a name="l00173"></a>00173 <span class="comment">*</span>
-<a name="l00174"></a>00174 <span class="comment">*   CAUTIONS</span>
-<a name="l00175"></a>00175 <span class="comment">*</span>
-<a name="l00176"></a>00176 <span class="comment">*   EXAMPLES</span>
-<a name="l00177"></a>00177 <span class="comment">*</span>
-<a name="l00178"></a>00178 <span class="comment">*   SEE ALSO</span>
-<a name="l00179"></a>00179 <span class="comment">*</span>
-<a name="l00180"></a>00180 <span class="comment">*   BUGS</span>
-<a name="l00181"></a>00181 <span class="comment">*</span>
-<a name="l00182"></a>00182 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00183"></a>00183 <span class="comment">*/</span>
-<a name="l00184"></a>00184 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00185"></a>00185 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00186"></a>00186 <span class="preprocessor">#endif</span>
-<a name="l00187"></a>00187 <span class="preprocessor"></span>
-<a name="l00188"></a>00188 <span class="preprocessor">#define POSIX_SOURCE 1</span>
-<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 <span class="comment">/*</span>
-<a name="l00192"></a>00192 <span class="comment"> * System Headers</span>
-<a name="l00193"></a>00193 <span class="comment"> */</span>
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="comment">/*</span>
-<a name="l00196"></a>00196 <span class="comment"> * Local Headers</span>
-<a name="l00197"></a>00197 <span class="comment"> */</span>
-<a name="l00198"></a>00198 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00199"></a>00199 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00200"></a>00200 <span class="preprocessor">#include "sinfo_resampling.h"</span>
-<a name="l00201"></a>00201 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00202"></a>00202 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00203"></a>00203 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00204"></a>00204 <span class="comment"> *                            Function codes</span>
-<a name="l00205"></a>00205 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00206"></a>00206 
-<a name="l00224"></a>00224 <span class="keywordtype">int</span> sinfo_stectrum_ima2table(
-<a name="l00225"></a>00225                  <span class="keyword">const</span> cpl_image* spc,
-<a name="l00226"></a>00226                  <span class="keyword">const</span> <span class="keywordtype">char</span>* filename,
-<a name="l00227"></a>00227                  cpl_table** tbl)
-<a name="l00228"></a>00228 {
-<a name="l00229"></a>00229   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00230"></a>00230   <span class="keywordtype">int</span> nx=0;
-<a name="l00231"></a>00231   <span class="keywordtype">int</span> ny=0;
-<a name="l00232"></a>00232   <span class="keywordtype">int</span> nraw=0;
-<a name="l00233"></a>00233   <span class="keywordtype">int</span> i=0;
-<a name="l00234"></a>00234   <span class="keywordtype">double</span> amp=0;
-<a name="l00235"></a>00235   <span class="keywordtype">double</span> wav=0;
-<a name="l00236"></a>00236  
-<a name="l00237"></a>00237   <span class="keywordtype">double</span> step=0;
-<a name="l00238"></a>00238   <span class="keywordtype">double</span> ws=0;
-<a name="l00239"></a>00239   <span class="keywordtype">double</span> we=0;
-<a name="l00240"></a>00240   <span class="keywordtype">double</span> wc=0;
-<a name="l00241"></a>00241   cpl_propertylist* plist=NULL;
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243   <span class="keywordflow">if</span>(spc == NULL){
-<a name="l00244"></a>00244     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image is null"</span>);
-<a name="l00245"></a>00245     <span class="keywordflow">return</span> -1;
-<a name="l00246"></a>00246   }
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248   pidata = cpl_image_get_data_const(spc);
-<a name="l00249"></a>00249   nx=cpl_image_get_size_x(spc);
-<a name="l00250"></a>00250   ny=cpl_image_get_size_y(spc);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   <span class="keywordflow">if</span>((nx == 0) || (ny == 0)) {
-<a name="l00253"></a>00253     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image has improper size: nx=%d ny=%d"</span>,nx,ny);
-<a name="l00254"></a>00254     <span class="keywordflow">return</span> -1;
-<a name="l00255"></a>00255   }
-<a name="l00256"></a>00256   <span class="keywordflow">if</span>((nx > 1) && (ny > 1)) {
-<a name="l00257"></a>00257     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image has improper size: nx=%d ny=%d"</span>,nx,ny);
-<a name="l00258"></a>00258     <span class="keywordflow">return</span> -1;
-<a name="l00259"></a>00259   }
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262   nraw=nx*ny;
-<a name="l00263"></a>00263   *tbl = cpl_table_new(nraw);
-<a name="l00264"></a>00264   cpl_table_new_column(*tbl,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);
-<a name="l00265"></a>00265   cpl_table_new_column(*tbl,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {
-<a name="l00269"></a>00269       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,filename);
-<a name="l00270"></a>00270       cpl_propertylist_delete(plist) ;
-<a name="l00271"></a>00271       <span class="keywordflow">return</span> -1 ;
-<a name="l00272"></a>00272   }
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275   <span class="keywordflow">if</span>(nx>1) {
-<a name="l00276"></a>00276     step=sinfo_pfits_get_cdelt1(plist);
-<a name="l00277"></a>00277     wc=sinfo_pfits_get_crval1(plist);
-<a name="l00278"></a>00278   } <span class="keywordflow">else</span> {
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280     step=sinfo_pfits_get_cdelt2(plist);
-<a name="l00281"></a>00281     wc=sinfo_pfits_get_crval2(plist);
-<a name="l00282"></a>00282   }
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284   ws=wc-nraw*step/2;
-<a name="l00285"></a>00285   we=wc+nraw*step/2;
-<a name="l00286"></a>00286   wav=ws;
-<a name="l00287"></a>00287   sinfo_msg(<span class="stringliteral">"ws=%f we=%f step=%f"</span>,ws,we,step);
-<a name="l00288"></a>00288   cpl_table_set_double(*tbl,<span class="stringliteral">"WAVE"</span>,0,wav);
-<a name="l00289"></a>00289   cpl_table_set_double(*tbl,<span class="stringliteral">"INT"</span>,0,pidata[i]);
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291   <span class="keywordflow">for</span>(i=1;i<nraw;i++) {
-<a name="l00292"></a>00292     wav+=step;
-<a name="l00293"></a>00293     amp=(double)pidata[i];
-<a name="l00294"></a>00294     cpl_table_set_double(*tbl,<span class="stringliteral">"WAVE"</span>,i,wav);
-<a name="l00295"></a>00295     cpl_table_set_double(*tbl,<span class="stringliteral">"INT"</span>,i,amp);
-<a name="l00296"></a>00296   }
-<a name="l00297"></a>00297   cpl_propertylist_delete(plist);
-<a name="l00298"></a>00298   <span class="keywordflow">return</span> 0;
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 }
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304 
-<a name="l00314"></a>00314 Vector * sinfo_new_vector( ulong32 n_elements )
-<a name="l00315"></a>00315 {
-<a name="l00316"></a>00316     Vector * local_new_vector ;
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318     <span class="keywordflow">if</span> ( n_elements <= 0 )
-<a name="l00319"></a>00319     {
-<a name="l00320"></a>00320         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of elements\n"</span>) ;
-<a name="l00321"></a>00321         <span class="keywordflow">return</span> NullVector ;
-<a name="l00322"></a>00322     }
-<a name="l00323"></a>00323     
-<a name="l00324"></a>00324     <span class="comment">/* allocate memory for a sinfo_vector with the given number of elements */</span>
-<a name="l00325"></a>00325     local_new_vector = (Vector *) cpl_malloc (<span class="keyword">sizeof</span> (Vector)) ; 
-<a name="l00326"></a>00326     local_new_vector -> n_elements = n_elements ;
-<a name="l00327"></a>00327     local_new_vector -> data = (pixelvalue *) cpl_calloc (n_elements, 
-<a name="l00328"></a>00328                                                   <span class="keyword">sizeof</span> (pixelvalue)) ;
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330     <span class="keywordflow">return</span> local_new_vector ;
-<a name="l00331"></a>00331 }
-<a name="l00332"></a>00332 
-<a name="l00340"></a>00340 <span class="keywordtype">void</span> sinfo_free_svector( Vector **svector )
-<a name="l00341"></a>00341 {
-<a name="l00342"></a>00342     <span class="keywordflow">if</span> ( *svector != NULL )   
-<a name="l00343"></a>00343     {
-<a name="l00344"></a>00344        
-<a name="l00345"></a>00345       <span class="keywordflow">if</span>((*svector) -> data != NULL) {
-<a name="l00346"></a>00346     cpl_free ( (*svector) -> data ) ;
-<a name="l00347"></a>00347     (*svector)->data = NULL;
-<a name="l00348"></a>00348       }
-<a name="l00349"></a>00349       cpl_free ( *svector ) ;
-<a name="l00350"></a>00350       *svector = NULL;
-<a name="l00351"></a>00351     }
-<a name="l00352"></a>00352     return ;
-<a name="l00353"></a>00353 }
-<a name="l00354"></a>00354 
-<a name="l00362"></a>00362 <span class="keywordtype">void</span> sinfo_new_destroy_vector( Vector *sinfo_vector )
-<a name="l00363"></a>00363 {
-<a name="l00364"></a>00364     <span class="keywordflow">if</span> ( sinfo_vector == NULL )   
-<a name="l00365"></a>00365     {
-<a name="l00366"></a>00366         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" NULL Vector given!\n"</span>) ;
-<a name="l00367"></a>00367         return ;
-<a name="l00368"></a>00368     }    
-<a name="l00369"></a>00369     
-<a name="l00370"></a>00370     cpl_free ( sinfo_vector -> data ) ;
-<a name="l00371"></a>00371     cpl_free ( sinfo_vector ) ;
-<a name="l00372"></a>00372 }
-<a name="l00373"></a>00373 
-<a name="l00382"></a>00382 cpl_image * sinfo_new_vector_to_image( Vector * spectrum )
-<a name="l00383"></a>00383 {
-<a name="l00384"></a>00384     cpl_image * returnIm ;
-<a name="l00385"></a>00385     <span class="keywordtype">int</span> i ;
-<a name="l00386"></a>00386    
-<a name="l00387"></a>00387     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00388"></a>00388 
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390     <span class="keywordflow">if</span> ( spectrum == NULL )
-<a name="l00391"></a>00391     {
-<a name="l00392"></a>00392         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!\n"</span>) ;
-<a name="l00393"></a>00393         <span class="keywordflow">return</span> NULL ;
-<a name="l00394"></a>00394     }
-<a name="l00395"></a>00395  
-<a name="l00396"></a>00396     <span class="comment">/* allocate memory */</span>
-<a name="l00397"></a>00397     <span class="keywordflow">if</span> ( NULL == (returnIm = cpl_image_new(1, spectrum->n_elements,
-<a name="l00398"></a>00398                                            CPL_TYPE_FLOAT)) )
-<a name="l00399"></a>00399     {
-<a name="l00400"></a>00400         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!\n"</span>) ;
-<a name="l00401"></a>00401         sinfo_new_destroy_vector(spectrum) ;
-<a name="l00402"></a>00402         <span class="keywordflow">return</span> NULL ;
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405     podata=cpl_image_get_data_float(returnIm);
-<a name="l00406"></a>00406     <span class="keywordflow">for</span> ( i = 0 ; i < spectrum->n_elements ; i++ )
-<a name="l00407"></a>00407     {
-<a name="l00408"></a>00408         podata[i] = spectrum -> data[i] ;
-<a name="l00409"></a>00409     }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411     sinfo_new_destroy_vector (spectrum) ;
-<a name="l00412"></a>00412     <span class="keywordflow">return</span> returnIm ;
-<a name="l00413"></a>00413 }
-<a name="l00414"></a>00414 
-<a name="l00423"></a>00423 Vector * sinfo_new_image_to_vector( cpl_image * spectrum )
-<a name="l00424"></a>00424 {
-<a name="l00425"></a>00425     Vector * returnVector ;
-<a name="l00426"></a>00426     <span class="keywordtype">int</span> i ;
-<a name="l00427"></a>00427     <span class="keywordtype">int</span> ilx=0;
-<a name="l00428"></a>00428     <span class="keywordtype">int</span> ily=0;
-<a name="l00429"></a>00429   
-<a name="l00430"></a>00430     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432     <span class="keywordflow">if</span> ( spectrum == NULL )
-<a name="l00433"></a>00433     {
-<a name="l00434"></a>00434         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!"</span>) ;
-<a name="l00435"></a>00435         <span class="keywordflow">return</span> NULL ;
-<a name="l00436"></a>00436     }
-<a name="l00437"></a>00437     ilx=cpl_image_get_size_x(spectrum);
-<a name="l00438"></a>00438     ily=cpl_image_get_size_y(spectrum);
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440     <span class="comment">/* allocate memory */</span>
-<a name="l00441"></a>00441     <span class="keywordflow">if</span> ( NULL == (returnVector = sinfo_new_vector(ilx*ily)) )
-<a name="l00442"></a>00442     {
-<a name="l00443"></a>00443         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory!"</span>) ;
-<a name="l00444"></a>00444         cpl_image_delete(spectrum) ;
-<a name="l00445"></a>00445         <span class="keywordflow">return</span> NULL ;
-<a name="l00446"></a>00446     }
-<a name="l00447"></a>00447 
-<a name="l00448"></a>00448     pidata=cpl_image_get_data_float(spectrum);
-<a name="l00449"></a>00449     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l00450"></a>00450     {
-<a name="l00451"></a>00451         returnVector -> data[i] = pidata[i] ;
-<a name="l00452"></a>00452     }
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454     cpl_image_delete (spectrum) ;
-<a name="l00455"></a>00455     <span class="keywordflow">return</span> returnVector ;
-<a name="l00456"></a>00456 }
-<a name="l00457"></a>00457 
-<a name="l00470"></a>00470 cpl_image * 
-<a name="l00471"></a>00471 sinfo_new_extract_spectrum_from_resampled_flat( cpl_image * resflat,
-<a name="l00472"></a>00472                                              <span class="keywordtype">float</span>      loreject,
-<a name="l00473"></a>00473                                              <span class="keywordtype">float</span>      hireject ) 
-<a name="l00474"></a>00474 {
-<a name="l00475"></a>00475     cpl_image * retIm ;
-<a name="l00476"></a>00476     <span class="keywordtype">int</span> col, row ;
-<a name="l00477"></a>00477     <span class="keywordtype">int</span> n ;
-<a name="l00478"></a>00478     <span class="keywordtype">float</span>* array=NULL ;
-<a name="l00479"></a>00479     <span class="keywordtype">float</span> cleanMean ;
-<a name="l00480"></a>00480     Vector * spectrum ;
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482     <span class="keywordtype">int</span> ilx=0;
-<a name="l00483"></a>00483     <span class="keywordtype">int</span> ily=0;
-<a name="l00484"></a>00484   
-<a name="l00485"></a>00485     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00486"></a>00486   
-<a name="l00487"></a>00487     <span class="keywordflow">if</span> ( resflat == NULL )
-<a name="l00488"></a>00488     {
-<a name="l00489"></a>00489         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no flatfield given!"</span>) ;
-<a name="l00490"></a>00490         <span class="keywordflow">return</span> NULL ;
-<a name="l00491"></a>00491     }
-<a name="l00492"></a>00492     ilx=cpl_image_get_size_x(resflat);
-<a name="l00493"></a>00493     ily=cpl_image_get_size_y(resflat);
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495     <span class="comment">/* allocate memory */</span>
-<a name="l00496"></a>00496     <span class="keywordflow">if</span> ( NullVector == (spectrum = sinfo_new_vector(ily) ) )
-<a name="l00497"></a>00497     {
-<a name="l00498"></a>00498         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00499"></a>00499         <span class="keywordflow">return</span> NULL ;
-<a name="l00500"></a>00500     }
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502     array=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504     pidata=cpl_image_get_data_float(resflat);
-<a name="l00505"></a>00505     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00506"></a>00506     {
-<a name="l00507"></a>00507         n = 0 ;
-<a name="l00508"></a>00508         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00509"></a>00509         {
-<a name="l00510"></a>00510             <span class="keywordflow">if</span> ( !isnan(pidata[col + row*ilx]) )
-<a name="l00511"></a>00511             {
-<a name="l00512"></a>00512                 array[n] = pidata[col+row*ilx] ;
-<a name="l00513"></a>00513                 n++ ;
-<a name="l00514"></a>00514             }
-<a name="l00515"></a>00515         }
-<a name="l00516"></a>00516         <span class="keywordflow">if</span> ( n == 0 )
-<a name="l00517"></a>00517         {
-<a name="l00518"></a>00518             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" only bad pixels in row: %d!"</span>, row) ;
-<a name="l00519"></a>00519             cleanMean = ZERO ;
-<a name="l00520"></a>00520         }
-<a name="l00521"></a>00521         <span class="keywordflow">else</span>
-<a name="l00522"></a>00522         {
-<a name="l00523"></a>00523             <span class="keywordflow">if</span> ( FLT_MAX == (cleanMean = sinfo_new_clean_mean(array, n, 
-<a name="l00524"></a>00524                                                               loreject, 
-<a name="l00525"></a>00525                                                               hireject)) )
-<a name="l00526"></a>00526             {
-<a name="l00527"></a>00527                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not do sinfo_clean_mean!"</span>) ;
-<a name="l00528"></a>00528                 sinfo_new_destroy_vector(spectrum) ;
-<a name="l00529"></a>00529                 <span class="keywordflow">return</span> NULL ;
-<a name="l00530"></a>00530             }
-<a name="l00531"></a>00531         }
-<a name="l00532"></a>00532         spectrum->data[row] = cleanMean ; 
-<a name="l00533"></a>00533     }
-<a name="l00534"></a>00534     <span class="keywordflow">if</span> ( NULL == ( retIm = sinfo_new_vector_to_image( spectrum ) ) )
-<a name="l00535"></a>00535     {
-<a name="l00536"></a>00536         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not do sinfo_vectorToImage!"</span>) ;
-<a name="l00537"></a>00537         sinfo_new_destroy_vector(spectrum) ;
-<a name="l00538"></a>00538         <span class="keywordflow">return</span> NULL ;
-<a name="l00539"></a>00539     }
-<a name="l00540"></a>00540     cpl_free(array) ;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542     <span class="keywordflow">return</span> retIm ;
-<a name="l00543"></a>00543 }
-<a name="l00544"></a>00544 
-<a name="l00558"></a>00558 cpl_image * 
-<a name="l00559"></a>00559 sinfo_new_multiply_image_with_spectrum( cpl_image * image, 
-<a name="l00560"></a>00560                                         cpl_image * spectrum )
-<a name="l00561"></a>00561 {
-<a name="l00562"></a>00562     <span class="keywordtype">int</span> col, row ;
-<a name="l00563"></a>00563     cpl_image * retImage ;
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566     <span class="keywordtype">int</span> ilx=0;
-<a name="l00567"></a>00567     <span class="keywordtype">int</span> ily=0;
-<a name="l00568"></a>00568     <span class="keywordtype">int</span> slx=0;
-<a name="l00569"></a>00569     <span class="keywordtype">int</span> sly=0;
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00572"></a>00572     <span class="keywordtype">float</span>* psdata=NULL;
-<a name="l00573"></a>00573     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l00577"></a>00577     {
-<a name="l00578"></a>00578         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no image given!"</span>) ;
-<a name="l00579"></a>00579         <span class="keywordflow">return</span> NULL ;
-<a name="l00580"></a>00580     }
-<a name="l00581"></a>00581     ilx=cpl_image_get_size_x(image);
-<a name="l00582"></a>00582     ily=cpl_image_get_size_y(image);
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584     <span class="keywordflow">if</span> ( spectrum == NULL )
-<a name="l00585"></a>00585     {
-<a name="l00586"></a>00586         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum image given!"</span>) ;
-<a name="l00587"></a>00587         <span class="keywordflow">return</span> NULL ;
-<a name="l00588"></a>00588     }
-<a name="l00589"></a>00589     slx=cpl_image_get_size_x(spectrum);
-<a name="l00590"></a>00590     sly=cpl_image_get_size_y(spectrum);
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592     <span class="keywordflow">if</span> ( sly != ily )
-<a name="l00593"></a>00593     {
-<a name="l00594"></a>00594         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" images are not compatible in pixel length!"</span>) ;
-<a name="l00595"></a>00595         <span class="keywordflow">return</span> NULL ;
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597 
-<a name="l00598"></a>00598     <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_duplicate(image)) )
-<a name="l00599"></a>00599     {
-<a name="l00600"></a>00600         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not copy original image!\n"</span>) ;
-<a name="l00601"></a>00601         <span class="keywordflow">return</span> NULL ;
-<a name="l00602"></a>00602     }
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604     pidata=cpl_image_get_data_float(image);
-<a name="l00605"></a>00605     psdata=cpl_image_get_data_float(spectrum);
-<a name="l00606"></a>00606     podata=cpl_image_get_data_float(retImage);
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00609"></a>00609     {
-<a name="l00610"></a>00610         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00611"></a>00611         {
-<a name="l00612"></a>00612             <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) &&
-<a name="l00613"></a>00613                  !isnan(psdata[col+row*ilx]))
-<a name="l00614"></a>00614             {
-<a name="l00615"></a>00615                 podata[col+row*ilx] = pidata[col+row*ilx] * psdata[row] ;
-<a name="l00616"></a>00616                                                    
-<a name="l00617"></a>00617             }
-<a name="l00618"></a>00618         }
-<a name="l00619"></a>00619     }
-<a name="l00620"></a>00620     <span class="keywordflow">return</span> retImage ;
-<a name="l00621"></a>00621 }
-<a name="l00622"></a>00622 
-<a name="l00661"></a>00661 cpl_image * sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube, 
-<a name="l00662"></a>00662                                       <span class="keywordtype">int</span>       llx,
-<a name="l00663"></a>00663                                       <span class="keywordtype">int</span>       lly,
-<a name="l00664"></a>00664                                       <span class="keywordtype">int</span>       halfbox_x, 
-<a name="l00665"></a>00665                                       <span class="keywordtype">int</span>       halfbox_y,
-<a name="l00666"></a>00666                                       <span class="keywordtype">float</span>     fwhm_factor,
-<a name="l00667"></a>00667                                       <span class="keywordtype">float</span>     backvariance,
-<a name="l00668"></a>00668                                       <span class="keywordtype">float</span>     sky,
-<a name="l00669"></a>00669                                       <span class="keywordtype">float</span>     gain,
-<a name="l00670"></a>00670                                       <span class="keywordtype">float</span>     exptime,
-<a name="l00671"></a>00671                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00672"></a>00672                                       cpl_table** spectrum,
-<a name="l00673"></a>00673                       <span class="keywordtype">int</span>       qc_info,
-<a name="l00674"></a>00674                                       <span class="keywordtype">int</span>*      check2)
-<a name="l00675"></a>00675 {
-<a name="l00676"></a>00676     <span class="keywordtype">int</span> col, row, z ;
-<a name="l00677"></a>00677     cpl_image * averagedIm ; 
-<a name="l00678"></a>00678     cpl_image * retIm ;
-<a name="l00679"></a>00679     <span class="keywordtype">double</span> fit_par[7] ;
-<a name="l00680"></a>00680     <span class="keywordtype">double</span> derv_par[7] ;
-<a name="l00681"></a>00681     <span class="keywordtype">int</span> mpar[7] ;
-<a name="l00682"></a>00682     <span class="keywordtype">double</span> gfit_par[7] ;
-<a name="l00683"></a>00683     <span class="keywordtype">double</span> gderv_par[7] ;
-<a name="l00684"></a>00684     <span class="keywordtype">int</span> gmpar[7] ;
-<a name="l00685"></a>00685     <span class="keywordtype">int</span> fitInd ;
-<a name="l00686"></a>00686     <span class="keywordtype">int</span> i ;
-<a name="l00687"></a>00687     <span class="keywordtype">double</span> sum ;
-<a name="l00688"></a>00688     <span class="keywordtype">double</span>** weight=NULL ;
-<a name="l00689"></a>00689     <span class="keywordtype">double</span>** sinfo_psf=NULL ;
-<a name="l00690"></a>00690 
-<a name="l00691"></a>00691     <span class="keywordtype">double</span> variance ;
-<a name="l00692"></a>00692     <span class="keywordtype">double</span> xdat[2] ;
-<a name="l00693"></a>00693     <span class="keywordtype">float</span> weighted_sum ;
-<a name="l00694"></a>00694     <span class="keywordtype">float</span> counts_tot ;
-<a name="l00695"></a>00695     <span class="keywordtype">float</span> counts_bkg ;
-<a name="l00696"></a>00696     <span class="keywordtype">float</span> bkg_tot ;
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698 
-<a name="l00699"></a>00699     <span class="keywordtype">int</span> first_col, last_col ;
-<a name="l00700"></a>00700     <span class="keywordtype">int</span> first_row, last_row ;
-<a name="l00701"></a>00701     <span class="keywordtype">float</span> norm ;
-<a name="l00702"></a>00702     <span class="keywordtype">float</span> sum_psf=0;
-<a name="l00703"></a>00703     <span class="keywordtype">float</span> sum_wgt=0;
-<a name="l00704"></a>00704     <span class="keywordtype">float</span> cenpix = 0;
-<a name="l00705"></a>00705     <span class="keywordtype">float</span> cenLambda = 0;
-<a name="l00706"></a>00706     <span class="keywordtype">float</span> dispersion = 0;
-<a name="l00707"></a>00707     <span class="keywordtype">float</span> lambda=0;
-<a name="l00708"></a>00708     <span class="keywordtype">float</span> lambda_start=0;
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710     <span class="keywordtype">int</span> ilx=0;
-<a name="l00711"></a>00711     <span class="keywordtype">int</span> ily=0;
-<a name="l00712"></a>00712     <span class="keywordtype">int</span> inp=0;
-<a name="l00713"></a>00713     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00714"></a>00714     <span class="keywordtype">float</span>* padata=NULL;
-<a name="l00715"></a>00715     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00716"></a>00716     <span class="keywordtype">float</span> tmp_val=0;
-<a name="l00717"></a>00717     cpl_propertylist* plist=NULL;
-<a name="l00718"></a>00718     cpl_image* i_img=NULL;
-<a name="l00719"></a>00719 
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     <span class="comment">/* TODO: the sky here is not really used. We remove compilation warning */</span>
-<a name="l00722"></a>00722     sky=0;
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l00725"></a>00725     {
-<a name="l00726"></a>00726         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;
-<a name="l00727"></a>00727         <span class="keywordflow">return</span> NULL ;
-<a name="l00728"></a>00728     }
-<a name="l00729"></a>00729 
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l00732"></a>00732     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l00733"></a>00733     inp=cpl_imagelist_get_size(cube);
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735     <span class="keywordflow">if</span> ( llx < 0 || llx + 2*halfbox_x >= ilx || 
-<a name="l00736"></a>00736          lly < 0 || lly + 2*halfbox_y >= ily )
-<a name="l00737"></a>00737     {
-<a name="l00738"></a>00738       sinfo_msg(<span class="stringliteral">"llx=%d, lly=%d,  llx + 2*halfbox_x=%d, "</span>
-<a name="l00739"></a>00739                 <span class="stringliteral">"lly + 2*halfbox_y=%d"</span>,
-<a name="l00740"></a>00740                 llx,lly,llx + 2*halfbox_x,lly + 2*halfbox_y);
-<a name="l00741"></a>00741       sinfo_msg(<span class="stringliteral">"tresh_min_x=%d, tresh_min_y=%d, "</span>
-<a name="l00742"></a>00742                 <span class="stringliteral">"tresh_max_x=%d, tresh_max_y=%d"</span>,0,0,ilx,ily);
-<a name="l00743"></a>00743         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lower left sinfo_edge points wrong position!"</span>) ;
-<a name="l00744"></a>00744         <span class="keywordflow">return</span> NULL ;
-<a name="l00745"></a>00745     }
-<a name="l00746"></a>00746     <span class="keywordflow">if</span> ( halfbox_x <= 0 || halfbox_y <= 0 || 
-<a name="l00747"></a>00747          2*halfbox_x > ilx || 2*halfbox_y > ily )
-<a name="l00748"></a>00748     {
-<a name="l00749"></a>00749         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong halfbox width given!"</span>) ;
-<a name="l00750"></a>00750         <span class="keywordflow">return</span> NULL ;
-<a name="l00751"></a>00751     }
-<a name="l00752"></a>00752     <span class="keywordflow">if</span> ( fwhm_factor <= 0. )
-<a name="l00753"></a>00753     {
-<a name="l00754"></a>00754         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fwhm_factor given!"</span>) ;
-<a name="l00755"></a>00755         <span class="keywordflow">return</span> NULL ;
-<a name="l00756"></a>00756     }
-<a name="l00757"></a>00757     <span class="keywordflow">if</span> ( backvariance < 0. )
-<a name="l00758"></a>00758     {
-<a name="l00759"></a>00759         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong backvariance given!"</span>) ;
-<a name="l00760"></a>00760         <span class="keywordflow">return</span> NULL ;
-<a name="l00761"></a>00761     }
-<a name="l00762"></a>00762     <span class="keywordflow">if</span> ( exptime <= 0. || exptime == FLAG )
-<a name="l00763"></a>00763     {
-<a name="l00764"></a>00764         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong exposure time given!"</span>) ;
-<a name="l00765"></a>00765         <span class="keywordflow">return</span> NULL ;
-<a name="l00766"></a>00766     }
-<a name="l00767"></a>00767 
-<a name="l00768"></a>00768     <span class="comment">/* allocate memory for spectrum */</span>
-<a name="l00769"></a>00769     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(1, inp,CPL_TYPE_FLOAT)) )
-<a name="l00770"></a>00770     {
-<a name="l00771"></a>00771         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" memory allocation failed!\n"</span>) ;
-<a name="l00772"></a>00772         <span class="keywordflow">return</span> NULL ;
-<a name="l00773"></a>00773     }
-<a name="l00774"></a>00774     <span class="comment">/* collapse the cube to be able to compute the weights </span>
-<a name="l00775"></a>00775 <span class="comment">       for optimal extraction */</span>
-<a name="l00776"></a>00776     <span class="keywordflow">if</span> ( NULL == (averagedIm = sinfo_new_average_cube_to_image(cube)) )
-<a name="l00777"></a>00777     {
-<a name="l00778"></a>00778         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_averageCubeToImage failed!"</span>) ;
-<a name="l00779"></a>00779         cpl_image_delete(retIm) ;
-<a name="l00780"></a>00780         <span class="keywordflow">return</span> NULL ;
-<a name="l00781"></a>00781     }
-<a name="l00782"></a>00782 
-<a name="l00783"></a>00783     <span class="comment">/* call the 2D-Gaussian fit routine */</span>
-<a name="l00784"></a>00784     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )
-<a name="l00785"></a>00785     {
-<a name="l00786"></a>00786         mpar[i] = 1 ;
-<a name="l00787"></a>00787     }
-<a name="l00788"></a>00788 
-<a name="l00789"></a>00789     <span class="keywordflow">if</span> ( -1 == (fitInd = sinfo_new_fit_2d_gaussian(averagedIm,
-<a name="l00790"></a>00790                                                    fit_par,
-<a name="l00791"></a>00791                                                    derv_par,
-<a name="l00792"></a>00792                                                    mpar,
-<a name="l00793"></a>00793                                                    llx,
-<a name="l00794"></a>00794                                                    lly,
-<a name="l00795"></a>00795                                                    halfbox_x,
-<a name="l00796"></a>00796                                                    halfbox_y,
-<a name="l00797"></a>00797                                                    check2 )) )
-<a name="l00798"></a>00798     {
-<a name="l00799"></a>00799         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"sinfo_fit2dGaussian failed!"</span>) ;
-<a name="l00800"></a>00800         cpl_image_delete(retIm) ;
-<a name="l00801"></a>00801         cpl_image_delete(averagedIm) ;
-<a name="l00802"></a>00802         <span class="keywordflow">return</span> NULL ;
-<a name="l00803"></a>00803     }
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805     <span class="comment">/* determine the PSF by using the found 2D-Gaussian */</span>
-<a name="l00806"></a>00806     sinfo_psf=sinfo_new_2Ddoublearray(ilx,ily) ;
-<a name="l00807"></a>00807     sum = 0 ;
-<a name="l00808"></a>00808     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00809"></a>00809     {
-<a name="l00810"></a>00810         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00811"></a>00811         {
-<a name="l00812"></a>00812             xdat[0] = (double) col ;
-<a name="l00813"></a>00813             xdat[1] = (double) row ;
-<a name="l00814"></a>00814             sinfo_psf[col][row] = sinfo_new_gaussian_ellipse(xdat,fit_par) - 
-<a name="l00815"></a>00815                                   fit_par[3] ;
-<a name="l00816"></a>00816             sum += sinfo_psf[col][row] ;
-<a name="l00817"></a>00817         }
-<a name="l00818"></a>00818     }
-<a name="l00819"></a>00819     <span class="comment">/* Scale the PSF and determine the pixel variances and the </span>
-<a name="l00820"></a>00820 <span class="comment">       normalization factor */</span>
-<a name="l00821"></a>00821     norm = 0. ;
-<a name="l00822"></a>00822     variance = 0. ;
-<a name="l00823"></a>00823     sum_psf=0;
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825     weight=sinfo_new_2Ddoublearray(ilx,ily) ;
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827     padata=cpl_image_get_data_float(averagedIm);
-<a name="l00828"></a>00828     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00829"></a>00829     {
-<a name="l00830"></a>00830         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00831"></a>00831         {
-<a name="l00832"></a>00832             sinfo_psf[col][row] /= sum ;
-<a name="l00833"></a>00833         sum_psf +=  sinfo_psf[col][row];
-<a name="l00834"></a>00834             <span class="keywordflow">if</span> ( !isnan(padata[col+row*ilx]) )
-<a name="l00835"></a>00835             {
-<a name="l00836"></a>00836           <span class="comment">/*</span>
-<a name="l00837"></a>00837 <span class="comment">                variance = (backvariance + sky + padata[col+row*ilx] / </span>
-<a name="l00838"></a>00838 <span class="comment">                            exptime) / gain ;</span>
-<a name="l00839"></a>00839 <span class="comment">          */</span>
-<a name="l00840"></a>00840                 variance = padata[col+row*ilx] / gain ;
-<a name="l00841"></a>00841 
-<a name="l00842"></a>00842             }
-<a name="l00843"></a>00843             <span class="keywordflow">else</span> 
-<a name="l00844"></a>00844             {
-<a name="l00845"></a>00845                 weight[col][row] = 0. ;
-<a name="l00846"></a>00846             }
-<a name="l00847"></a>00847             <span class="keywordflow">if</span> (variance == 0.)
-<a name="l00848"></a>00848             {
-<a name="l00849"></a>00849                 weight[col][row] = 0. ;
-<a name="l00850"></a>00850             }
-<a name="l00851"></a>00851             <span class="keywordflow">else</span>
-<a name="l00852"></a>00852             {
-<a name="l00853"></a>00853          
-<a name="l00854"></a>00854                 weight[col][row] = sinfo_psf[col][row]/variance ;
-<a name="l00855"></a>00855            
-<a name="l00856"></a>00856                 norm += weight[col][row] * weight[col][row] * variance ;
-<a name="l00857"></a>00857 
-<a name="l00858"></a>00858             }
-<a name="l00859"></a>00859         
-<a name="l00860"></a>00860         }
-<a name="l00861"></a>00861     }
-<a name="l00862"></a>00862 
-<a name="l00863"></a>00863     sum_wgt=0;
-<a name="l00864"></a>00864     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l00865"></a>00865     {
-<a name="l00866"></a>00866         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l00867"></a>00867         {
-<a name="l00868"></a>00868       weight[col][row] /= norm;
-<a name="l00869"></a>00869           sum_wgt += weight[col][row]*sinfo_psf[col][row];
-<a name="l00870"></a>00870     }
-<a name="l00871"></a>00871     }
-<a name="l00872"></a>00872     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sum_psf=%f sum_wgt=%f norm=%f"</span>,sum_psf,sum_wgt,norm);
-<a name="l00873"></a>00873     cpl_image_delete(averagedIm) ;
-<a name="l00874"></a>00874     <span class="keywordflow">if</span> ( norm == 0. )
-<a name="l00875"></a>00875     {
-<a name="l00876"></a>00876         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" normalization sum is zero\n"</span>) ;
-<a name="l00877"></a>00877         cpl_image_delete(retIm) ;
-<a name="l00878"></a>00878         <span class="keywordflow">return</span> NULL ;
-<a name="l00879"></a>00879     }
-<a name="l00880"></a>00880 
-<a name="l00881"></a>00881     <span class="comment">/* limit the extraction region to the Gaussian, center +- fwhmx/y * </span>
-<a name="l00882"></a>00882 <span class="comment">                 cos(theta)  */</span>
-<a name="l00883"></a>00883     <span class="comment">/*</span>
-<a name="l00884"></a>00884 <span class="comment">    sinfo_msg("fit_par: %f %f %f %f %f %f %f", </span>
-<a name="l00885"></a>00885 <span class="comment">              fit_par[0],fit_par[1],fit_par[2],fit_par[3],</span>
-<a name="l00886"></a>00886 <span class="comment">              fit_par[4],fit_par[5],fit_par[6]);</span>
-<a name="l00887"></a>00887 <span class="comment">    sinfo_msg("fwhm_factor=%f",fwhm_factor);</span>
-<a name="l00888"></a>00888 <span class="comment">    */</span>
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     <span class="keywordflow">if</span>(fabs(fit_par[6]) > PI_NUMB/4) {
-<a name="l00891"></a>00891       fit_par[6]=0;
-<a name="l00892"></a>00892     }
-<a name="l00893"></a>00893     first_col = (int) (fit_par[0] - 
-<a name="l00894"></a>00894                        fwhm_factor*fit_par[4]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;
-<a name="l00895"></a>00895     first_col = (first_col > 2 ) ? first_col : 2;
-<a name="l00896"></a>00896 
-<a name="l00897"></a>00897     last_col =  (int) (fit_par[0] + 
-<a name="l00898"></a>00898                        fwhm_factor*fit_par[4]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;
-<a name="l00899"></a>00899     last_col = (last_col < 63 ) ? last_col : 63;
-<a name="l00900"></a>00900 
-<a name="l00901"></a>00901     first_row = (int) (fit_par[1] - 
-<a name="l00902"></a>00902                        fwhm_factor*fit_par[5]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;
-<a name="l00903"></a>00903     first_row = (first_row > 2 ) ? first_row : 2;
-<a name="l00904"></a>00904     last_row =  (int) (fit_par[1] + 
-<a name="l00905"></a>00905                        fwhm_factor*fit_par[5]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;
-<a name="l00906"></a>00906     last_row = (last_row < 63 ) ? last_row : 63;
-<a name="l00907"></a>00907 
-<a name="l00908"></a>00908     
-<a name="l00909"></a>00909     <span class="keywordflow">if</span>(first_col > last_col) {
-<a name="l00910"></a>00910       tmp_val=last_col;
-<a name="l00911"></a>00911       last_col=first_col;
-<a name="l00912"></a>00912       first_col=tmp_val;
-<a name="l00913"></a>00913     }
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915     <span class="keywordflow">if</span>(first_row > last_row) {
-<a name="l00916"></a>00916       tmp_val=last_row;
-<a name="l00917"></a>00917       last_col=first_row;
-<a name="l00918"></a>00918       first_col=tmp_val;
-<a name="l00919"></a>00919     }
-<a name="l00920"></a>00920     <span class="keywordflow">if</span>(abs(first_col- last_col) < 1) {
-<a name="l00921"></a>00921       first_col -=1;
-<a name="l00922"></a>00922       last_col +=1;
-<a name="l00923"></a>00923     }
-<a name="l00924"></a>00924     <span class="keywordflow">if</span>(abs(first_row- last_row) < 1) {
-<a name="l00925"></a>00925       first_row -=1;
-<a name="l00926"></a>00926       last_row +=1;
-<a name="l00927"></a>00927     }
-<a name="l00928"></a>00928 
-<a name="l00929"></a>00929     <span class="keywordflow">if</span> ( first_col < 0 || first_row < 0 || last_col >= ilx || last_row >= ily )
-<a name="l00930"></a>00930     {
-<a name="l00931"></a>00931         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" star badly centered in FOV!"</span>) ;
-<a name="l00932"></a>00932         cpl_image_delete(retIm) ;
-<a name="l00933"></a>00933         <span class="keywordflow">return</span> NULL ;
-<a name="l00934"></a>00934     }
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936 
-<a name="l00937"></a>00937     cpl_table_new_column(*spectrum,<span class="stringliteral">"wavelength"</span>, CPL_TYPE_FLOAT);
-<a name="l00938"></a>00938     <span class="comment">/* cpl_table_new_column(*spectrum,"intensity" , CPL_TYPE_FLOAT); */</span>
-<a name="l00939"></a>00939     cpl_table_new_column(*spectrum,<span class="stringliteral">"counts_tot"</span> , CPL_TYPE_FLOAT);
-<a name="l00940"></a>00940     cpl_table_new_column(*spectrum,<span class="stringliteral">"counts_bkg"</span> , CPL_TYPE_FLOAT);
-<a name="l00941"></a>00941     cpl_table_new_column(*spectrum,<span class="stringliteral">"bkg_tot"</span> , CPL_TYPE_FLOAT);
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943     <span class="keywordflow">if</span>(qc_info==1) {
-<a name="l00944"></a>00944        cpl_table_new_column(*spectrum,<span class="stringliteral">"AMP"</span> , CPL_TYPE_FLOAT);
-<a name="l00945"></a>00945        cpl_table_new_column(*spectrum,<span class="stringliteral">"XC"</span> , CPL_TYPE_FLOAT);
-<a name="l00946"></a>00946        cpl_table_new_column(*spectrum,<span class="stringliteral">"YC"</span> , CPL_TYPE_FLOAT);
-<a name="l00947"></a>00947        cpl_table_new_column(*spectrum,<span class="stringliteral">"BKG"</span> , CPL_TYPE_FLOAT);
-<a name="l00948"></a>00948        cpl_table_new_column(*spectrum,<span class="stringliteral">"FWHMX"</span> , CPL_TYPE_FLOAT);
-<a name="l00949"></a>00949        cpl_table_new_column(*spectrum,<span class="stringliteral">"FWHMY"</span> , CPL_TYPE_FLOAT);
-<a name="l00950"></a>00950        cpl_table_new_column(*spectrum,<span class="stringliteral">"ANGLE"</span> , CPL_TYPE_FLOAT);
-<a name="l00951"></a>00951     }
-<a name="l00952"></a>00952     plist=cpl_propertylist_load(name,0);
-<a name="l00953"></a>00953     cenpix = sinfo_pfits_get_crpix3(plist);
-<a name="l00954"></a>00954     cenLambda = sinfo_pfits_get_crval3(plist);
-<a name="l00955"></a>00955     dispersion = sinfo_pfits_get_cdelt3(plist);
-<a name="l00956"></a>00956     cpl_propertylist_delete(plist);
-<a name="l00957"></a>00957     lambda_start=cenLambda-cenpix*dispersion;
-<a name="l00958"></a>00958 
-<a name="l00959"></a>00959     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frow %d lrow %d fcol %d lcol %d"</span>,
-<a name="l00960"></a>00960                      first_row, last_row, first_col, last_col);
-<a name="l00961"></a>00961     <span class="comment">/* go through the planes */</span>
-<a name="l00962"></a>00962     podata=cpl_image_get_data_float(retIm);
-<a name="l00963"></a>00963     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l00964"></a>00964     {
-<a name="l00965"></a>00965       i_img=cpl_imagelist_get(cube,z);
-<a name="l00966"></a>00966       pidata=cpl_image_get_data_float(i_img);
-<a name="l00967"></a>00967         weighted_sum = 0. ;
-<a name="l00968"></a>00968         counts_tot=0.;
-<a name="l00969"></a>00969         counts_bkg=0.;
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971         bkg_tot=0.;
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973         <span class="keywordflow">if</span>(qc_info==1) {
-<a name="l00974"></a>00974            sinfo_new_fit_2d_gaussian(i_img,gfit_par,
-<a name="l00975"></a>00975                                      gderv_par,gmpar,llx,lly,
-<a name="l00976"></a>00976                                      halfbox_x,halfbox_y,check2);
-<a name="l00977"></a>00977     }
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979         <span class="keywordflow">for</span> ( row = first_row ; row <= last_row ; row++ )
-<a name="l00980"></a>00980         {
-<a name="l00981"></a>00981             <span class="keywordflow">for</span> ( col = first_col ; col < last_col ; col++ )
-<a name="l00982"></a>00982             {
-<a name="l00983"></a>00983                 <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) )
-<a name="l00984"></a>00984                 {
-<a name="l00985"></a>00985           
-<a name="l00986"></a>00986                     weighted_sum += weight[col][row] * (pidata[col+row*ilx] - 
-<a name="l00987"></a>00987                                     fit_par[3]);
-<a name="l00988"></a>00988             
-<a name="l00989"></a>00989                     counts_bkg += (pidata[col+row*ilx] - fit_par[3]);
-<a name="l00990"></a>00990                     counts_tot += (pidata[col+row*ilx]);
-<a name="l00991"></a>00991                     bkg_tot += fit_par[3];
-<a name="l00992"></a>00992             
-<a name="l00993"></a>00993                 } 
-<a name="l00994"></a>00994             }
-<a name="l00995"></a>00995         }    
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997         <span class="keywordflow">if</span> (weighted_sum == 0.)
-<a name="l00998"></a>00998         {
-<a name="l00999"></a>00999             weighted_sum = ZERO ;
-<a name="l01000"></a>01000             counts_tot = ZERO;
-<a name="l01001"></a>01001             counts_bkg = ZERO;
-<a name="l01002"></a>01002             bkg_tot = ZERO;
-<a name="l01003"></a>01003 
-<a name="l01004"></a>01004         }
-<a name="l01005"></a>01005         <span class="keywordflow">else</span>
-<a name="l01006"></a>01006         {
-<a name="l01007"></a>01007       <span class="comment">/*</span>
-<a name="l01008"></a>01008 <span class="comment">            weighted_sum /= norm ;</span>
-<a name="l01009"></a>01009 <span class="comment">      */</span>
-<a name="l01010"></a>01010       
-<a name="l01011"></a>01011       
-<a name="l01012"></a>01012         }
-<a name="l01013"></a>01013 
-<a name="l01014"></a>01014         podata[z] = weighted_sum ;
-<a name="l01015"></a>01015         lambda=lambda_start+z*dispersion;
-<a name="l01016"></a>01016         cpl_table_set_float(*spectrum,<span class="stringliteral">"wavelength"</span> ,z,lambda);
-<a name="l01017"></a>01017         <span class="comment">/* cpl_table_set_float(*spectrum,"intensity" ,z,weighted_sum); */</span>
-<a name="l01018"></a>01018         cpl_table_set_float(*spectrum,<span class="stringliteral">"counts_tot"</span> ,z,counts_tot);
-<a name="l01019"></a>01019         cpl_table_set_float(*spectrum,<span class="stringliteral">"counts_bkg"</span> ,z,counts_bkg);
-<a name="l01020"></a>01020         cpl_table_set_float(*spectrum,<span class="stringliteral">"bkg_tot"</span> ,z,bkg_tot);
-<a name="l01021"></a>01021         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"w=%f I=%f b=%f a=%f"</span>,
-<a name="l01022"></a>01022                          lambda,counts_tot,counts_bkg,bkg_tot);
-<a name="l01023"></a>01023         <span class="keywordflow">if</span>(qc_info==1) {
-<a name="l01024"></a>01024            cpl_table_set_float(*spectrum,<span class="stringliteral">"AMP"</span> ,z,gfit_par[0]);
-<a name="l01025"></a>01025            cpl_table_set_float(*spectrum,<span class="stringliteral">"XC"</span> ,z,gfit_par[1]);
-<a name="l01026"></a>01026            cpl_table_set_float(*spectrum,<span class="stringliteral">"YC"</span> ,z,gfit_par[2]);
-<a name="l01027"></a>01027            cpl_table_set_float(*spectrum,<span class="stringliteral">"BKG"</span> ,z,gfit_par[3]);
-<a name="l01028"></a>01028            cpl_table_set_float(*spectrum,<span class="stringliteral">"FWHMX"</span> ,z,gfit_par[4]);
-<a name="l01029"></a>01029            cpl_table_set_float(*spectrum,<span class="stringliteral">"FWHMY"</span> ,z,gfit_par[5]);
-<a name="l01030"></a>01030            cpl_table_set_float(*spectrum,<span class="stringliteral">"ANGLE"</span> ,z,gfit_par[6]);
-<a name="l01031"></a>01031     }
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033     }
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035     sinfo_new_destroy_2Ddoublearray(&sinfo_psf,ilx) ;
-<a name="l01036"></a>01036     sinfo_new_destroy_2Ddoublearray(&weight,ilx) ;
-<a name="l01037"></a>01037 
-<a name="l01038"></a>01038     <span class="keywordflow">return</span> retIm ;
-<a name="l01039"></a>01039 }
-<a name="l01040"></a>01040 
-<a name="l01064"></a>01064 Vector * sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,
-<a name="l01065"></a>01065                              <span class="keywordtype">float</span>     loReject,
-<a name="l01066"></a>01066                              <span class="keywordtype">float</span>     hiReject,
-<a name="l01067"></a>01067                              <span class="keywordtype">int</span>     * position,
-<a name="l01068"></a>01068                              <span class="keywordtype">int</span>       tolerance,
-<a name="l01069"></a>01069                              <span class="keywordtype">int</span>       posindicator )
-<a name="l01070"></a>01070 {
-<a name="l01071"></a>01071     Vector * spectrum ;
-<a name="l01072"></a>01072     <span class="keywordtype">int</span> x, y, z ;
-<a name="l01073"></a>01073     <span class="keywordtype">int</span> n ;
-<a name="l01074"></a>01074     <span class="keywordtype">int</span> n_sky ;
-<a name="l01075"></a>01075     <span class="keywordtype">int</span> x_low , x_high ;
-<a name="l01076"></a>01076     <span class="keywordtype">int</span> y_low , y_high ;
-<a name="l01077"></a>01077     <span class="keywordtype">int</span> hi_x, lo_x ;
-<a name="l01078"></a>01078     <span class="keywordtype">float</span> * to_average ;
-<a name="l01079"></a>01079     <span class="keywordtype">float</span>   cleanMean ;
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081     <span class="keywordtype">int</span> ilx=0;
-<a name="l01082"></a>01082     <span class="keywordtype">int</span> ily=0;
-<a name="l01083"></a>01083     <span class="keywordtype">int</span> inp=0;
-<a name="l01084"></a>01084     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01085"></a>01085     cpl_image* i_img=NULL;
-<a name="l01086"></a>01086 
-<a name="l01087"></a>01087 
-<a name="l01088"></a>01088     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01089"></a>01089     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01090"></a>01090     inp=cpl_imagelist_get_size(cube);
-<a name="l01091"></a>01091 
-<a name="l01092"></a>01092     <span class="keywordflow">if</span> ( NULL == cube )
-<a name="l01093"></a>01093     {
-<a name="l01094"></a>01094         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;
-<a name="l01095"></a>01095         <span class="keywordflow">return</span> NullVector ;
-<a name="l01096"></a>01096     }
-<a name="l01097"></a>01097     <span class="keywordflow">if</span> ( loReject < 0. || hiReject < 0. || loReject + hiReject >= 90. )
-<a name="l01098"></a>01098     {
-<a name="l01099"></a>01099         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong or unrealistic loReject and hiReject values!"</span>) ;
-<a name="l01100"></a>01100         <span class="keywordflow">return</span> NullVector ;
-<a name="l01101"></a>01101     }
-<a name="l01102"></a>01102     <span class="keywordflow">if</span> ( position == NULL)
-<a name="l01103"></a>01103     {
-<a name="l01104"></a>01104         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array given!"</span>) ;
-<a name="l01105"></a>01105         <span class="keywordflow">return</span> NullVector ;
-<a name="l01106"></a>01106     }
-<a name="l01107"></a>01107     <span class="keywordflow">if</span> ( position[0] < 0 || position[1] < 0 || 
-<a name="l01108"></a>01108          position[0] > ilx  || position[1] > ily )
-<a name="l01109"></a>01109     {
-<a name="l01110"></a>01110         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position of sky spider!"</span>) ;
-<a name="l01111"></a>01111         <span class="keywordflow">return</span> NullVector ;
-<a name="l01112"></a>01112     }
-<a name="l01113"></a>01113     <span class="keywordflow">if</span> ( tolerance < 0 || tolerance >= ilx )
-<a name="l01114"></a>01114     {
-<a name="l01115"></a>01115         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong tolerance given!"</span>) ;
-<a name="l01116"></a>01116         <span class="keywordflow">return</span> NullVector ;
-<a name="l01117"></a>01117     }
-<a name="l01118"></a>01118     <span class="keywordflow">if</span> ( posindicator == 0 )
-<a name="l01119"></a>01119     {
-<a name="l01120"></a>01120         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no sinfo_edge indicator given!"</span>) ;
-<a name="l01121"></a>01121         <span class="keywordflow">return</span> NullVector ;
-<a name="l01122"></a>01122     }
-<a name="l01123"></a>01123 
-<a name="l01124"></a>01124     <span class="comment">/* determine the edge of the image where the sky spectra are placed */</span>
-<a name="l01125"></a>01125     <span class="keywordflow">switch</span>(posindicator)
-<a name="l01126"></a>01126     {
-<a name="l01127"></a>01127         <span class="comment">/* lower right sinfo_edge */</span>
-<a name="l01128"></a>01128         <span class="keywordflow">case</span> 1:
-<a name="l01129"></a>01129             x_low  = position[0] + tolerance ;
-<a name="l01130"></a>01130             x_high = ilx ;
-<a name="l01131"></a>01131             y_low  = 0 ;
-<a name="l01132"></a>01132             y_high = position[1] - tolerance ;
-<a name="l01133"></a>01133             break ;
-<a name="l01134"></a>01134         <span class="comment">/* upper right sinfo_edge */</span>
-<a name="l01135"></a>01135         <span class="keywordflow">case</span> 2:
-<a name="l01136"></a>01136             x_low  = position[0] + tolerance ;
-<a name="l01137"></a>01137             x_high = ilx ;
-<a name="l01138"></a>01138             y_low  = position[1] + tolerance ;
-<a name="l01139"></a>01139             y_high = ily ;
-<a name="l01140"></a>01140             break ;
-<a name="l01141"></a>01141         <span class="comment">/* upper left sinfo_edge */</span>
-<a name="l01142"></a>01142         <span class="keywordflow">case</span> 3:
-<a name="l01143"></a>01143             x_low  = 0 ;
-<a name="l01144"></a>01144             x_high = position[0] - tolerance ;
-<a name="l01145"></a>01145             y_low  = position [1] + tolerance ;
-<a name="l01146"></a>01146             y_high = ily ;
-<a name="l01147"></a>01147             break ;
-<a name="l01148"></a>01148         <span class="keywordflow">default</span>:
-<a name="l01149"></a>01149             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position indicator index!"</span>) ;
-<a name="l01150"></a>01150             <span class="keywordflow">return</span> NullVector ;
-<a name="l01151"></a>01151             break ;
-<a name="l01152"></a>01152     }
-<a name="l01153"></a>01153     <span class="keywordflow">if</span> ( x_low >= ilx || x_high < 1 || y_low >= ily || y_high < 1 )
-<a name="l01154"></a>01154     {
-<a name="l01155"></a>01155         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" tolerance too high!"</span>) ;
-<a name="l01156"></a>01156         <span class="keywordflow">return</span> NullVector ;
-<a name="l01157"></a>01157     }
-<a name="l01158"></a>01158     <span class="keywordflow">if</span> ( x_high - x_low != y_high - y_low )
-<a name="l01159"></a>01159     {
-<a name="l01160"></a>01160         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sky sinfo_edge is not a diagonal line!\n"</span>) ;
-<a name="l01161"></a>01161         <span class="keywordflow">return</span> NullVector ;
-<a name="l01162"></a>01162     }
-<a name="l01163"></a>01163 
-<a name="l01164"></a>01164     <span class="comment">/* determine the number of sky pixels in one image plane, take only </span>
-<a name="l01165"></a>01165 <span class="comment">       the full sky pixels which are not cut by the diagonal line */</span>
-<a name="l01166"></a>01166     n_sky = (x_high - x_low) * (x_high - x_low - 1) / 2 ;
-<a name="l01167"></a>01167     <span class="keywordflow">if</span> ( n_sky <= 0 )
-<a name="l01168"></a>01168     {
-<a name="l01169"></a>01169         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no sky spectrum in found in cube!"</span>) ;
-<a name="l01170"></a>01170         <span class="keywordflow">return</span> NullVector ;
-<a name="l01171"></a>01171     }
-<a name="l01172"></a>01172     <span class="keywordflow">if</span> ( n_sky == 1 )
-<a name="l01173"></a>01173     {
-<a name="l01174"></a>01174         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" only one sky spectrum is taken, no averaging!"</span>) ;
-<a name="l01175"></a>01175     }
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177     <span class="comment">/* allocate memory for the output spectrum */</span>
-<a name="l01178"></a>01178     <span class="keywordflow">if</span> ( NullVector == (spectrum = sinfo_new_vector(inp)) )
-<a name="l01179"></a>01179     {
-<a name="l01180"></a>01180         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l01181"></a>01181         <span class="keywordflow">return</span> NullVector ;
-<a name="l01182"></a>01182     }
-<a name="l01183"></a>01183 
-<a name="l01184"></a>01184     <span class="comment">/* go through the image planes */</span>
-<a name="l01185"></a>01185     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )
-<a name="l01186"></a>01186     {
-<a name="l01187"></a>01187       i_img=cpl_imagelist_get(cube,z);
-<a name="l01188"></a>01188       pidata=cpl_image_get_data_float(i_img);
-<a name="l01189"></a>01189         <span class="comment">/* allocate memory for the sky pixels in one image plane */</span>
-<a name="l01190"></a>01190         <span class="keywordflow">if</span> (NULL == (to_average = (<span class="keywordtype">float</span>*) cpl_calloc(n_sky, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>))))
-<a name="l01191"></a>01191         {
-<a name="l01192"></a>01192             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l01193"></a>01193             sinfo_new_destroy_vector(spectrum) ;
-<a name="l01194"></a>01194             <span class="keywordflow">return</span> NullVector ;
-<a name="l01195"></a>01195         }
-<a name="l01196"></a>01196         n = 0 ;
-<a name="l01197"></a>01197         <span class="keywordflow">switch</span>(posindicator)
-<a name="l01198"></a>01198         {
-<a name="l01199"></a>01199             <span class="comment">/* lower right sinfo_edge */</span>
-<a name="l01200"></a>01200             <span class="keywordflow">case</span> 1:
-<a name="l01201"></a>01201                 lo_x = x_low ;
-<a name="l01202"></a>01202                 <span class="keywordflow">for</span> ( y = y_low ; y < y_high - 1 ; y++ )
-<a name="l01203"></a>01203                 {
-<a name="l01204"></a>01204                     lo_x++ ;
-<a name="l01205"></a>01205                     <span class="keywordflow">for</span> ( x = lo_x ; x < x_high ; x++ )
-<a name="l01206"></a>01206                     {
-<a name="l01207"></a>01207                         to_average[n] = pidata[x+y*ilx] ;
-<a name="l01208"></a>01208                         n++ ;
-<a name="l01209"></a>01209                     }
-<a name="l01210"></a>01210                 }
-<a name="l01211"></a>01211                 break ;
-<a name="l01212"></a>01212             <span class="comment">/* lower left sinfo_edge */</span>
-<a name="l01213"></a>01213             <span class="keywordflow">case</span> 2:
-<a name="l01214"></a>01214                 hi_x = x_high ;
-<a name="l01215"></a>01215                 <span class="keywordflow">for</span> ( y = y_low ; y < y_high - 1 ; y++ )
-<a name="l01216"></a>01216                 {
-<a name="l01217"></a>01217                     hi_x-- ;
-<a name="l01218"></a>01218                     <span class="keywordflow">for</span> ( x = x_low ; x < hi_x ; x++ )
-<a name="l01219"></a>01219                     {
-<a name="l01220"></a>01220                         to_average[n] = pidata[x+y*ilx] ;
-<a name="l01221"></a>01221                         n++ ;
-<a name="l01222"></a>01222                     }
-<a name="l01223"></a>01223                 }
-<a name="l01224"></a>01224                 break ;
-<a name="l01225"></a>01225             <span class="comment">/* upper right sinfo_edge */</span>
-<a name="l01226"></a>01226             <span class="keywordflow">case</span> 3:
-<a name="l01227"></a>01227                 lo_x = x_high ;
-<a name="l01228"></a>01228                 <span class="keywordflow">for</span> ( y = y_low+1 ; y < y_high ; y++ )
-<a name="l01229"></a>01229                 {
-<a name="l01230"></a>01230                     lo_x-- ;
-<a name="l01231"></a>01231                     <span class="keywordflow">for</span> ( x = lo_x ; x < x_high ; x++ )
-<a name="l01232"></a>01232                     {
-<a name="l01233"></a>01233                         to_average[n] = pidata[x+y*ilx] ;
-<a name="l01234"></a>01234                         n++ ;
-<a name="l01235"></a>01235                     }
-<a name="l01236"></a>01236                 }
-<a name="l01237"></a>01237                 break ;
-<a name="l01238"></a>01238             <span class="comment">/* upper left sinfo_edge */</span>
-<a name="l01239"></a>01239             <span class="keywordflow">case</span> 4:
-<a name="l01240"></a>01240                 hi_x = x_low ;
-<a name="l01241"></a>01241                 <span class="keywordflow">for</span> ( y = y_low+1 ; y < y_high ; y++ )
-<a name="l01242"></a>01242                 {
-<a name="l01243"></a>01243                     hi_x++ ;
-<a name="l01244"></a>01244                     <span class="keywordflow">for</span> ( x = x_low ; x < hi_x ; x++ )
-<a name="l01245"></a>01245                     {
-<a name="l01246"></a>01246                         to_average[n] = pidata[x+y*ilx] ;
-<a name="l01247"></a>01247                         n++ ;
-<a name="l01248"></a>01248                     }
-<a name="l01249"></a>01249                 }
-<a name="l01250"></a>01250                 break ;
-<a name="l01251"></a>01251             <span class="keywordflow">default</span>:
-<a name="l01252"></a>01252                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position indicator index!\n"</span>) ;
-<a name="l01253"></a>01253                 <span class="keywordflow">return</span> NullVector ;
-<a name="l01254"></a>01254                 break ;
-<a name="l01255"></a>01255         }
-<a name="l01256"></a>01256         <span class="keywordflow">if</span> ( n != n_sky )
-<a name="l01257"></a>01257         {
-<a name="l01258"></a>01258             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"number of stored sky image pixels does "</span>
-<a name="l01259"></a>01259                               <span class="stringliteral">"not equal number of computed sky pixels!"</span>) ;
-<a name="l01260"></a>01260         }
-<a name="l01261"></a>01261 
-<a name="l01262"></a>01262         <span class="comment">/* now take a clean mean of the sky "image" */</span>
-<a name="l01263"></a>01263         cleanMean = sinfo_new_clean_mean (to_average, n, loReject, hiReject) ;
-<a name="l01264"></a>01264         <span class="keywordflow">if</span> (cleanMean == FLT_MAX)
-<a name="l01265"></a>01265         {
-<a name="l01266"></a>01266             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not take a clean mean!\n"</span>) ;
-<a name="l01267"></a>01267             sinfo_new_destroy_vector(spectrum) ;
-<a name="l01268"></a>01268             cpl_free(to_average) ;
-<a name="l01269"></a>01269             <span class="keywordflow">return</span> NullVector ;
-<a name="l01270"></a>01270         }
-<a name="l01271"></a>01271         spectrum->data[z] = cleanMean ;
-<a name="l01272"></a>01272         cpl_free (to_average) ;
-<a name="l01273"></a>01273     }
-<a name="l01274"></a>01274      
-<a name="l01275"></a>01275     <span class="keywordflow">return</span> spectrum ;
-<a name="l01276"></a>01276 }
-<a name="l01277"></a>01277 
-<a name="l01291"></a>01291 Vector * sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01292"></a>01292                                      <span class="keywordtype">int</span> llx,
-<a name="l01293"></a>01293                                      <span class="keywordtype">int</span> lly,
-<a name="l01294"></a>01294                                      <span class="keywordtype">int</span> urx,
-<a name="l01295"></a>01295                                      <span class="keywordtype">int</span> ury )
-<a name="l01296"></a>01296 {
-<a name="l01297"></a>01297     Vector          * sum ;
-<a name="l01298"></a>01298     pixelvalue      *local_rectangle ;
-<a name="l01299"></a>01299     <span class="keywordtype">int</span>             i, j, k, l, m ;
-<a name="l01300"></a>01300     <span class="keywordtype">int</span>             recsize ;
-<a name="l01301"></a>01301     <span class="keywordtype">int</span> ilx=0;
-<a name="l01302"></a>01302     <span class="keywordtype">int</span> ily=0;
-<a name="l01303"></a>01303     <span class="keywordtype">int</span> inp=0;
-<a name="l01304"></a>01304     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01305"></a>01305     cpl_image* i_img=NULL;
-<a name="l01306"></a>01306 
-<a name="l01307"></a>01307 
-<a name="l01308"></a>01308     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01309"></a>01309     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01310"></a>01310     inp=cpl_imagelist_get_size(cube);
-<a name="l01311"></a>01311 
-<a name="l01312"></a>01312     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01313"></a>01313     {
-<a name="l01314"></a>01314         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l01315"></a>01315         <span class="keywordflow">return</span> NullVector ;
-<a name="l01316"></a>01316     }
-<a name="l01317"></a>01317 
-<a name="l01318"></a>01318     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||
-<a name="l01319"></a>01319         (urx<0) || (urx>=ilx) ||
-<a name="l01320"></a>01320         (lly<0) || (lly>=ily) ||
-<a name="l01321"></a>01321         (ury<0) || (ury>=ily) ||
-<a name="l01322"></a>01322         (llx>=urx) || (lly>=ury))
-<a name="l01323"></a>01323     {
-<a name="l01324"></a>01324         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;
-<a name="l01325"></a>01325         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>, 
-<a name="l01326"></a>01326                          llx, lly, urx, ury) ;
-<a name="l01327"></a>01327         <span class="keywordflow">return</span> NullVector ;
-<a name="l01328"></a>01328     }
-<a name="l01329"></a>01329 
-<a name="l01330"></a>01330     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01333"></a>01333     <span class="keywordflow">if</span> (NULL == (sum = sinfo_new_vector (inp)) )
-<a name="l01334"></a>01334     {
-<a name="l01335"></a>01335         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;
-<a name="l01336"></a>01336         <span class="keywordflow">return</span> NullVector ;
-<a name="l01337"></a>01337     }
-<a name="l01338"></a>01338 
-<a name="l01339"></a>01339     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01340"></a>01340 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01341"></a>01341 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l01342"></a>01342 <span class="comment">     */</span>
-<a name="l01343"></a>01343     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01344"></a>01344     {
-<a name="l01345"></a>01345       i_img=cpl_imagelist_get(cube,i);
-<a name="l01346"></a>01346       pidata=cpl_image_get_data_float(i_img);
-<a name="l01347"></a>01347         m = 0 ;
-<a name="l01348"></a>01348         local_rectangle = (pixelvalue *) cpl_calloc (recsize, 
-<a name="l01349"></a>01349                                          <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01350"></a>01350 
-<a name="l01351"></a>01351         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l01352"></a>01352         {
-<a name="l01353"></a>01353             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l01354"></a>01354             {
-<a name="l01355"></a>01355                 local_rectangle[m] = pidata[k + j * ilx] ;
-<a name="l01356"></a>01356                 m ++ ;
-<a name="l01357"></a>01357             }
-<a name="l01358"></a>01358         }
-<a name="l01359"></a>01359         <span class="keywordflow">for</span> ( l = 0 ; l < recsize ; l++ )
-<a name="l01360"></a>01360         {
-<a name="l01361"></a>01361             <span class="keywordflow">if</span> ( isnan(local_rectangle[l]) )
-<a name="l01362"></a>01362             {
-<a name="l01363"></a>01363                 continue ;
-<a name="l01364"></a>01364             }
-<a name="l01365"></a>01365             sum -> data[i] += local_rectangle[l] ;
-<a name="l01366"></a>01366         }
-<a name="l01367"></a>01367         cpl_free ( local_rectangle ) ;
-<a name="l01368"></a>01368     }
-<a name="l01369"></a>01369     <span class="keywordflow">return</span> sum ;
-<a name="l01370"></a>01370 }
-<a name="l01371"></a>01371 
-<a name="l01383"></a>01383 Vector * sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01384"></a>01384                                   <span class="keywordtype">int</span>       centerx,
-<a name="l01385"></a>01385                                   <span class="keywordtype">int</span>       centery,
-<a name="l01386"></a>01386                                   <span class="keywordtype">int</span>       radius )
-<a name="l01387"></a>01387 {
-<a name="l01388"></a>01388     Vector          * sum ;
-<a name="l01389"></a>01389     pixelvalue      * circle ;
-<a name="l01390"></a>01390     <span class="keywordtype">int</span>             i, j, k, l, m, n ;
-<a name="l01391"></a>01391     <span class="keywordtype">int</span>             circsize ;
-<a name="l01392"></a>01392     <span class="keywordtype">int</span> ilx=0;
-<a name="l01393"></a>01393     <span class="keywordtype">int</span> ily=0;
-<a name="l01394"></a>01394     <span class="keywordtype">int</span> inp=0;
-<a name="l01395"></a>01395     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01396"></a>01396     cpl_image* i_img=NULL;
-<a name="l01397"></a>01397 
-<a name="l01398"></a>01398 
-<a name="l01399"></a>01399     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01400"></a>01400     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01401"></a>01401     inp=cpl_imagelist_get_size(cube);
-<a name="l01402"></a>01402 
-<a name="l01403"></a>01403     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01404"></a>01404     {
-<a name="l01405"></a>01405         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l01406"></a>01406         <span class="keywordflow">return</span> NullVector ;
-<a name="l01407"></a>01407     }
-<a name="l01408"></a>01408 
-<a name="l01409"></a>01409     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||
-<a name="l01410"></a>01410         (centery+radius>=ily) ||
-<a name="l01411"></a>01411         (centerx-radius<0) ||
-<a name="l01412"></a>01412         (centery-radius<0))
-<a name="l01413"></a>01413     {
-<a name="l01414"></a>01414         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;
-<a name="l01415"></a>01415         <span class="keywordflow">return</span> NullVector ;
-<a name="l01416"></a>01416     }
-<a name="l01417"></a>01417 
-<a name="l01418"></a>01418     n = 0 ;
-<a name="l01419"></a>01419     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01420"></a>01420     {
-<a name="l01421"></a>01421         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01422"></a>01422         {
-<a name="l01423"></a>01423             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01424"></a>01424                            radius*radius )
-<a name="l01425"></a>01425             {
-<a name="l01426"></a>01426                 n ++ ;
-<a name="l01427"></a>01427             }
-<a name="l01428"></a>01428         }
-<a name="l01429"></a>01429     }
-<a name="l01430"></a>01430     <span class="keywordflow">if</span> (n == 0)
-<a name="l01431"></a>01431     {
-<a name="l01432"></a>01432         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;
-<a name="l01433"></a>01433         <span class="keywordflow">return</span> NullVector ;
-<a name="l01434"></a>01434     }
-<a name="l01435"></a>01435     circsize = n ;
-<a name="l01436"></a>01436 
-<a name="l01437"></a>01437     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01438"></a>01438     <span class="keywordflow">if</span> (NULL == (sum = sinfo_new_vector (inp)) )
-<a name="l01439"></a>01439     {
-<a name="l01440"></a>01440         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"  cannot allocate a new sinfo_vector"</span>) ;
-<a name="l01441"></a>01441         <span class="keywordflow">return</span> NullVector ;
-<a name="l01442"></a>01442     }
-<a name="l01443"></a>01443 
-<a name="l01444"></a>01444     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01445"></a>01445 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01446"></a>01446 <span class="comment">     *  plane circle and store pixel values in a buffer.</span>
-<a name="l01447"></a>01447 <span class="comment">     */</span>
-<a name="l01448"></a>01448     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01449"></a>01449     {
-<a name="l01450"></a>01450       i_img=cpl_imagelist_get(cube,i);
-<a name="l01451"></a>01451       pidata=cpl_image_get_data_float(i_img);
-<a name="l01452"></a>01452         m = 0 ;
-<a name="l01453"></a>01453         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01454"></a>01454 
-<a name="l01455"></a>01455         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01456"></a>01456         {
-<a name="l01457"></a>01457             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01458"></a>01458             {
-<a name="l01459"></a>01459                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01460"></a>01460                      radius*radius )
-<a name="l01461"></a>01461                 {
-<a name="l01462"></a>01462                     circle[m] = pidata[k + j * ilx] ;
-<a name="l01463"></a>01463                     m ++ ;
-<a name="l01464"></a>01464                 }
-<a name="l01465"></a>01465             }
-<a name="l01466"></a>01466         }
-<a name="l01467"></a>01467 
-<a name="l01468"></a>01468         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )
-<a name="l01469"></a>01469         {
-<a name="l01470"></a>01470             <span class="keywordflow">if</span> ( isnan(circle[l]) )
-<a name="l01471"></a>01471             {
-<a name="l01472"></a>01472                 continue ;
-<a name="l01473"></a>01473             }
-<a name="l01474"></a>01474             sum -> data[i] += circle[l] ;
-<a name="l01475"></a>01475         }
-<a name="l01476"></a>01476         cpl_free (circle) ;
-<a name="l01477"></a>01477     }
-<a name="l01478"></a>01478     <span class="keywordflow">return</span> sum ;
-<a name="l01479"></a>01479 }
-<a name="l01480"></a>01480 
-<a name="l01494"></a>01494 Vector * sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01495"></a>01495                                      <span class="keywordtype">int</span> llx,
-<a name="l01496"></a>01496                                      <span class="keywordtype">int</span> lly,
-<a name="l01497"></a>01497                                      <span class="keywordtype">int</span> urx,
-<a name="l01498"></a>01498                                      <span class="keywordtype">int</span> ury )
-<a name="l01499"></a>01499 {
-<a name="l01500"></a>01500     Vector          * mean ;
-<a name="l01501"></a>01501     pixelvalue      *local_rectangle ;
-<a name="l01502"></a>01502     <span class="keywordtype">int</span>             i, j, k, l, m ;
-<a name="l01503"></a>01503     <span class="keywordtype">int</span>             recsize, nv ;
-<a name="l01504"></a>01504     <span class="keywordtype">int</span> ilx=0;
-<a name="l01505"></a>01505     <span class="keywordtype">int</span> ily=0;
-<a name="l01506"></a>01506     <span class="keywordtype">int</span> inp=0;
-<a name="l01507"></a>01507     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01508"></a>01508     cpl_image* i_img=NULL;
-<a name="l01509"></a>01509 
-<a name="l01510"></a>01510 
-<a name="l01511"></a>01511     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01512"></a>01512     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01513"></a>01513     inp=cpl_imagelist_get_size(cube);
-<a name="l01514"></a>01514 
-<a name="l01515"></a>01515     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01516"></a>01516     {
-<a name="l01517"></a>01517         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"  no cube to take the mean of his spectra\n"</span>) ;
-<a name="l01518"></a>01518         <span class="keywordflow">return</span> NullVector ;
-<a name="l01519"></a>01519     }
-<a name="l01520"></a>01520 
-<a name="l01521"></a>01521     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||
-<a name="l01522"></a>01522         (urx<0) || (urx>=ilx) ||
-<a name="l01523"></a>01523         (lly<0) || (lly>=ily) ||
-<a name="l01524"></a>01524         (ury<0) || (ury>=ily) ||
-<a name="l01525"></a>01525         (llx>=urx) || (lly>=ury))
-<a name="l01526"></a>01526     {
-<a name="l01527"></a>01527         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"  invalid rectangle coordinates:"</span>) ;
-<a name="l01528"></a>01528         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,
-<a name="l01529"></a>01529                  llx, lly, urx, ury) ;
-<a name="l01530"></a>01530         <span class="keywordflow">return</span> NullVector ;
-<a name="l01531"></a>01531     }
-<a name="l01532"></a>01532 
-<a name="l01533"></a>01533     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l01534"></a>01534 
-<a name="l01535"></a>01535     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01536"></a>01536     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )
-<a name="l01537"></a>01537     {
-<a name="l01538"></a>01538         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;
-<a name="l01539"></a>01539         <span class="keywordflow">return</span> NullVector ;
-<a name="l01540"></a>01540     }
-<a name="l01541"></a>01541 
-<a name="l01542"></a>01542     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01543"></a>01543 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01544"></a>01544 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l01545"></a>01545 <span class="comment">     */</span>
-<a name="l01546"></a>01546     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01547"></a>01547     {
-<a name="l01548"></a>01548       i_img=cpl_imagelist_get(cube,i);
-<a name="l01549"></a>01549       pidata=cpl_image_get_data_float(i_img);
-<a name="l01550"></a>01550         m = 0 ;
-<a name="l01551"></a>01551         local_rectangle = (pixelvalue *) cpl_calloc (recsize, 
-<a name="l01552"></a>01552                            <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01553"></a>01553 
-<a name="l01554"></a>01554         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l01555"></a>01555         {
-<a name="l01556"></a>01556             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l01557"></a>01557             {
-<a name="l01558"></a>01558                 local_rectangle[m] = pidata[k + j * ilx] ;
-<a name="l01559"></a>01559                 m ++ ;
-<a name="l01560"></a>01560             }
-<a name="l01561"></a>01561         }
-<a name="l01562"></a>01562         nv = 0 ;
-<a name="l01563"></a>01563         <span class="keywordflow">for</span> ( l = 0 ; l < recsize ; l++ )
-<a name="l01564"></a>01564         {
-<a name="l01565"></a>01565             <span class="keywordflow">if</span> ( isnan(local_rectangle[l]) )
-<a name="l01566"></a>01566             {
-<a name="l01567"></a>01567                 continue ;
-<a name="l01568"></a>01568             }
-<a name="l01569"></a>01569             mean -> data[i] += local_rectangle[l] ;
-<a name="l01570"></a>01570             nv ++;
-<a name="l01571"></a>01571         }
-<a name="l01572"></a>01572         <span class="keywordflow">if</span> ( nv == 0 )
-<a name="l01573"></a>01573         {
-<a name="l01574"></a>01574             mean -> data[i] = ZERO ;
-<a name="l01575"></a>01575         }
-<a name="l01576"></a>01576         <span class="keywordflow">else</span>
-<a name="l01577"></a>01577         {
-<a name="l01578"></a>01578             mean -> data[i] /= nv ;
-<a name="l01579"></a>01579         }
-<a name="l01580"></a>01580         cpl_free ( local_rectangle ) ;
-<a name="l01581"></a>01581     }
-<a name="l01582"></a>01582     <span class="keywordflow">return</span> mean ;
-<a name="l01583"></a>01583 }
-<a name="l01584"></a>01584 
-<a name="l01596"></a>01596 Vector * 
-<a name="l01597"></a>01597 sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01598"></a>01598                                   <span class="keywordtype">int</span>       centerx,
-<a name="l01599"></a>01599                                   <span class="keywordtype">int</span>       centery,
-<a name="l01600"></a>01600                                   <span class="keywordtype">int</span>       radius )
-<a name="l01601"></a>01601 {
-<a name="l01602"></a>01602     Vector          * mean ;
-<a name="l01603"></a>01603     pixelvalue      * circle ;
-<a name="l01604"></a>01604     <span class="keywordtype">int</span>             i, j, k, l, m, n ;
-<a name="l01605"></a>01605     <span class="keywordtype">int</span>             circsize, nv ;
-<a name="l01606"></a>01606     <span class="keywordtype">int</span> ilx=0;
-<a name="l01607"></a>01607     <span class="keywordtype">int</span> ily=0;
-<a name="l01608"></a>01608     <span class="keywordtype">int</span> inp=0;
-<a name="l01609"></a>01609     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01610"></a>01610     cpl_image* i_img=NULL;
-<a name="l01611"></a>01611 
-<a name="l01612"></a>01612 
-<a name="l01613"></a>01613     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01614"></a>01614     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01615"></a>01615     inp=cpl_imagelist_get_size(cube);
-<a name="l01616"></a>01616 
-<a name="l01617"></a>01617     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01618"></a>01618     {
-<a name="l01619"></a>01619         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube to take the mean of his spectra"</span>) ;
-<a name="l01620"></a>01620         <span class="keywordflow">return</span> NullVector ;
-<a name="l01621"></a>01621     }
-<a name="l01622"></a>01622 
-<a name="l01623"></a>01623     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||
-<a name="l01624"></a>01624         (centery+radius>=ily) ||
-<a name="l01625"></a>01625         (centerx-radius<0) ||
-<a name="l01626"></a>01626         (centery-radius<0))
-<a name="l01627"></a>01627     {
-<a name="l01628"></a>01628         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;
-<a name="l01629"></a>01629         <span class="keywordflow">return</span> NullVector ;
-<a name="l01630"></a>01630     }
-<a name="l01631"></a>01631 
-<a name="l01632"></a>01632     n = 0 ;
-<a name="l01633"></a>01633     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01634"></a>01634     {
-<a name="l01635"></a>01635         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01636"></a>01636         {
-<a name="l01637"></a>01637             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01638"></a>01638                  radius*radius )
-<a name="l01639"></a>01639             {
-<a name="l01640"></a>01640                 n ++ ;
-<a name="l01641"></a>01641             }
-<a name="l01642"></a>01642         }
-<a name="l01643"></a>01643     }
-<a name="l01644"></a>01644     <span class="keywordflow">if</span> (n == 0)
-<a name="l01645"></a>01645     {
-<a name="l01646"></a>01646         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!\n"</span>) ;
-<a name="l01647"></a>01647         <span class="keywordflow">return</span> NullVector ;
-<a name="l01648"></a>01648     }
-<a name="l01649"></a>01649     circsize = n ;
-<a name="l01650"></a>01650 
-<a name="l01651"></a>01651     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01652"></a>01652     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )
-<a name="l01653"></a>01653     {
-<a name="l01654"></a>01654         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;
-<a name="l01655"></a>01655         <span class="keywordflow">return</span> NullVector ;
-<a name="l01656"></a>01656     }
-<a name="l01657"></a>01657 
-<a name="l01658"></a>01658     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01659"></a>01659 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01660"></a>01660 <span class="comment">     *  plane circle and store pixel values in a buffer.</span>
-<a name="l01661"></a>01661 <span class="comment">     */</span>
-<a name="l01662"></a>01662     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01663"></a>01663     {
-<a name="l01664"></a>01664       i_img=cpl_imagelist_get(cube,i);
-<a name="l01665"></a>01665       pidata=cpl_image_get_data_float(i_img);
-<a name="l01666"></a>01666         m = 0 ;
-<a name="l01667"></a>01667         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01668"></a>01668 
-<a name="l01669"></a>01669         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01670"></a>01670         {
-<a name="l01671"></a>01671             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01672"></a>01672             {
-<a name="l01673"></a>01673                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01674"></a>01674                      radius*radius )
-<a name="l01675"></a>01675                 {
-<a name="l01676"></a>01676                     circle[m] = pidata[k + j * ilx] ;
-<a name="l01677"></a>01677                     m ++ ;
-<a name="l01678"></a>01678                 }
-<a name="l01679"></a>01679             }
-<a name="l01680"></a>01680         }
-<a name="l01681"></a>01681 
-<a name="l01682"></a>01682         nv = 0 ;
-<a name="l01683"></a>01683         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )
-<a name="l01684"></a>01684         {
-<a name="l01685"></a>01685             <span class="keywordflow">if</span> ( isnan(circle[l]) )
-<a name="l01686"></a>01686             {
-<a name="l01687"></a>01687                 continue ;
-<a name="l01688"></a>01688             }
-<a name="l01689"></a>01689             mean -> data[i] += circle[l] ;
-<a name="l01690"></a>01690             nv ++;
-<a name="l01691"></a>01691         }
-<a name="l01692"></a>01692         <span class="keywordflow">if</span> ( nv == 0 )
-<a name="l01693"></a>01693         {
-<a name="l01694"></a>01694             mean -> data[i] = ZERO ;
-<a name="l01695"></a>01695         }
-<a name="l01696"></a>01696         <span class="keywordflow">else</span>
-<a name="l01697"></a>01697         {
-<a name="l01698"></a>01698             mean -> data[i] /= nv ;
-<a name="l01699"></a>01699         }
-<a name="l01700"></a>01700 
-<a name="l01701"></a>01701         cpl_free (circle) ;
-<a name="l01702"></a>01702     }
-<a name="l01703"></a>01703     <span class="keywordflow">return</span> mean ;
-<a name="l01704"></a>01704 }
-<a name="l01705"></a>01705 
-<a name="l01715"></a>01715 Vector * sinfo_new_blackbody_spectrum( <span class="keywordtype">char</span> * templateSpec, <span class="keywordtype">double</span> temp )
-<a name="l01716"></a>01716 {
-<a name="l01717"></a>01717     Vector * retSpec ;
-<a name="l01718"></a>01718     <span class="keywordtype">int</span> n ;
-<a name="l01719"></a>01719     <span class="keywordtype">double</span> cenpix ;
-<a name="l01720"></a>01720     <span class="keywordtype">int</span> npix ;
-<a name="l01721"></a>01721     <span class="keywordtype">double</span> cenLambda ;
-<a name="l01722"></a>01722     <span class="keywordtype">double</span> firstLambda ;
-<a name="l01723"></a>01723     <span class="keywordtype">double</span> disp ;
-<a name="l01724"></a>01724     <span class="keywordtype">double</span> lambda ;
-<a name="l01725"></a>01725     <span class="keywordtype">double</span> intens ;
-<a name="l01726"></a>01726     <span class="keywordtype">double</span> denom ;
-<a name="l01727"></a>01727     <span class="keywordtype">double</span> norm ;
-<a name="l01728"></a>01728     cpl_propertylist* plist=NULL;
-<a name="l01729"></a>01729 
-<a name="l01730"></a>01730     <span class="keywordflow">if</span> ( NULL == templateSpec )
-<a name="l01731"></a>01731     {
-<a name="l01732"></a>01732         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" now input image given!\n"</span>) ;
-<a name="l01733"></a>01733         <span class="keywordflow">return</span> NULL ;
-<a name="l01734"></a>01734     }
-<a name="l01735"></a>01735     <span class="keywordflow">if</span> ( temp < 0. )
-<a name="l01736"></a>01736     {
-<a name="l01737"></a>01737         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong temperature given!\n"</span>) ;
-<a name="l01738"></a>01738         <span class="keywordflow">return</span> NULL ;
-<a name="l01739"></a>01739     }
-<a name="l01740"></a>01740     <span class="comment">/* get the fits header information needed */</span>
-<a name="l01741"></a>01741     <span class="keywordflow">if</span> ((cpl_error_code)((plist=cpl_propertylist_load(templateSpec,0))==NULL)){
-<a name="l01742"></a>01742       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,templateSpec);
-<a name="l01743"></a>01743       cpl_propertylist_delete(plist) ;
-<a name="l01744"></a>01744       <span class="keywordflow">return</span> NULL ;
-<a name="l01745"></a>01745     }
-<a name="l01746"></a>01746 
-<a name="l01747"></a>01747 
-<a name="l01748"></a>01748     cenpix = sinfo_pfits_get_crpix2(plist);
-<a name="l01749"></a>01749     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01750"></a>01750         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CRPIX2\n"</span>) ;
-<a name="l01751"></a>01751         sinfo_free_propertylist(&plist) ;
-<a name="l01752"></a>01752         <span class="keywordflow">return</span> NULL ;
-<a name="l01753"></a>01753     }
-<a name="l01754"></a>01754 
-<a name="l01755"></a>01755     cenLambda = sinfo_pfits_get_crval2(plist);
-<a name="l01756"></a>01756     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01757"></a>01757         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CRVAL2\n"</span>) ;
-<a name="l01758"></a>01758         sinfo_free_propertylist(&plist) ;
-<a name="l01759"></a>01759         <span class="keywordflow">return</span> NULL ;
-<a name="l01760"></a>01760     }
-<a name="l01761"></a>01761     disp = sinfo_pfits_get_cdelt2(plist);
-<a name="l01762"></a>01762     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01763"></a>01763         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CDELT2\n"</span>) ;
-<a name="l01764"></a>01764         sinfo_free_propertylist(&plist) ;
-<a name="l01765"></a>01765         <span class="keywordflow">return</span> NULL ;
-<a name="l01766"></a>01766     }
-<a name="l01767"></a>01767     npix = sinfo_pfits_get_naxis2(plist);
-<a name="l01768"></a>01768     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01769"></a>01769         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get NAXIS2\n"</span>) ;
-<a name="l01770"></a>01770         sinfo_free_propertylist(&plist) ;
-<a name="l01771"></a>01771         <span class="keywordflow">return</span> NULL ;
-<a name="l01772"></a>01772     }
-<a name="l01773"></a>01773     sinfo_free_propertylist(&plist) ;
-<a name="l01774"></a>01774 
-<a name="l01775"></a>01775 
-<a name="l01776"></a>01776     <span class="keywordflow">if</span> (NULL == (retSpec = sinfo_new_vector (npix)))
-<a name="l01777"></a>01777     {
-<a name="l01778"></a>01778         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;
-<a name="l01779"></a>01779         <span class="keywordflow">return</span> NULL ;
-<a name="l01780"></a>01780     }
-<a name="l01781"></a>01781     
-<a name="l01782"></a>01782     <span class="comment">/* shift from fits to image coordinates */</span>
-<a name="l01783"></a>01783     cenpix-- ;
-<a name="l01784"></a>01784   
-<a name="l01785"></a>01785     firstLambda = cenLambda - cenpix * disp ;
-<a name="l01786"></a>01786     <span class="keywordflow">for</span> ( n = 0 ; n < npix ; n++ )
-<a name="l01787"></a>01787     {
-<a name="l01788"></a>01788         lambda = firstLambda + disp * (double)n ;
-<a name="l01789"></a>01789         <span class="comment">/* convert from microns to m */</span>
-<a name="l01790"></a>01790 
-<a name="l01791"></a>01791         lambda /= 1.0e6 ;
-<a name="l01792"></a>01792         denom = 1./(exp(PLANCK*SPEED_OF_LIGHT/(lambda*BOLTZMANN*temp)) - 1.) ;
-<a name="l01793"></a>01793         intens = 2.*PI_NUMB*PLANCK*SPEED_OF_LIGHT*SPEED_OF_LIGHT / 
-<a name="l01794"></a>01794                  pow(lambda, 5) * denom ;
-<a name="l01795"></a>01795         retSpec->data[n] = intens ;   
-<a name="l01796"></a>01796     }
-<a name="l01797"></a>01797     norm = retSpec->data[npix/2] ;
-<a name="l01798"></a>01798     <span class="keywordflow">for</span> ( n = 0 ; n < npix ; n++ )
-<a name="l01799"></a>01799     {
-<a name="l01800"></a>01800         retSpec->data[n] /= norm ;
-<a name="l01801"></a>01801     }
-<a name="l01802"></a>01802     
-<a name="l01803"></a>01803     <span class="keywordflow">return</span> retSpec ;
-<a name="l01804"></a>01804 }
-<a name="l01805"></a>01805 
-<a name="l01806"></a>01806 
-<a name="l01820"></a>01820 Vector * sinfo_new_median_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01821"></a>01821                                              <span class="keywordtype">int</span> llx,
-<a name="l01822"></a>01822                                              <span class="keywordtype">int</span> lly,
-<a name="l01823"></a>01823                                              <span class="keywordtype">int</span> urx,
-<a name="l01824"></a>01824                                              <span class="keywordtype">int</span> ury )
-<a name="l01825"></a>01825 {
-<a name="l01826"></a>01826     Vector          * med ;
-<a name="l01827"></a>01827     pixelvalue      *local_rectangle ;
-<a name="l01828"></a>01828     <span class="keywordtype">int</span>             i, j, k, m ;
-<a name="l01829"></a>01829     <span class="keywordtype">int</span>             recsize ;
-<a name="l01830"></a>01830     <span class="keywordtype">int</span> ilx=0;
-<a name="l01831"></a>01831     <span class="keywordtype">int</span> ily=0;
-<a name="l01832"></a>01832     <span class="keywordtype">int</span> inp=0;
-<a name="l01833"></a>01833     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01834"></a>01834     cpl_image* i_img=NULL;
-<a name="l01835"></a>01835 
-<a name="l01836"></a>01836 
-<a name="l01837"></a>01837     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01838"></a>01838     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01839"></a>01839     inp=cpl_imagelist_get_size(cube);
-<a name="l01840"></a>01840 
-<a name="l01841"></a>01841     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01842"></a>01842     {
-<a name="l01843"></a>01843         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l01844"></a>01844         <span class="keywordflow">return</span> NullVector ;
-<a name="l01845"></a>01845     }
-<a name="l01846"></a>01846 
-<a name="l01847"></a>01847     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||
-<a name="l01848"></a>01848         (urx<0) || (urx>=ilx) ||
-<a name="l01849"></a>01849         (lly<0) || (lly>=ily) ||
-<a name="l01850"></a>01850         (ury<0) || (ury>=ily) ||
-<a name="l01851"></a>01851         (llx>=urx) || (lly>=ury))
-<a name="l01852"></a>01852     {
-<a name="l01853"></a>01853         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;
-<a name="l01854"></a>01854         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>, 
-<a name="l01855"></a>01855                         llx, lly, urx, ury) ;
-<a name="l01856"></a>01856         <span class="keywordflow">return</span> NullVector ;
-<a name="l01857"></a>01857     }
-<a name="l01858"></a>01858 
-<a name="l01859"></a>01859     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l01860"></a>01860 
-<a name="l01861"></a>01861     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01862"></a>01862     <span class="keywordflow">if</span> (NULL == (med = sinfo_new_vector (inp)) )
-<a name="l01863"></a>01863     {
-<a name="l01864"></a>01864         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;
-<a name="l01865"></a>01865         <span class="keywordflow">return</span> NullVector ;
-<a name="l01866"></a>01866     }
-<a name="l01867"></a>01867 
-<a name="l01868"></a>01868     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01869"></a>01869 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01870"></a>01870 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l01871"></a>01871 <span class="comment">     */</span>
-<a name="l01872"></a>01872     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01873"></a>01873     {
-<a name="l01874"></a>01874 
-<a name="l01875"></a>01875       i_img=cpl_imagelist_get(cube,i);
-<a name="l01876"></a>01876       pidata=cpl_image_get_data_float(i_img);
-<a name="l01877"></a>01877       m = 0 ;
-<a name="l01878"></a>01878       local_rectangle=(pixelvalue *)cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01879"></a>01879 
-<a name="l01880"></a>01880         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l01881"></a>01881         {
-<a name="l01882"></a>01882             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l01883"></a>01883             {
-<a name="l01884"></a>01884                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*ilx]) )
-<a name="l01885"></a>01885                 {
-<a name="l01886"></a>01886                     continue ;
-<a name="l01887"></a>01887                 }
-<a name="l01888"></a>01888                 <span class="keywordflow">else</span>
-<a name="l01889"></a>01889                 {
-<a name="l01890"></a>01890                     local_rectangle[m] = pidata[k + j * ilx] ;
-<a name="l01891"></a>01891                     m ++ ;
-<a name="l01892"></a>01892                 }
-<a name="l01893"></a>01893             }
-<a name="l01894"></a>01894         }
-<a name="l01895"></a>01895         <span class="keywordflow">if</span> ( m == 0 )
-<a name="l01896"></a>01896         {
-<a name="l01897"></a>01897             med->data[i] = 0. ;
-<a name="l01898"></a>01898         }
-<a name="l01899"></a>01899         <span class="keywordflow">else</span>
-<a name="l01900"></a>01900         {
-<a name="l01901"></a>01901             med->data[i] = sinfo_new_median(local_rectangle, m) ;
-<a name="l01902"></a>01902         }
-<a name="l01903"></a>01903         cpl_free ( local_rectangle ) ;
-<a name="l01904"></a>01904     }
-<a name="l01905"></a>01905     <span class="keywordflow">return</span> med ;
-<a name="l01906"></a>01906 }
-<a name="l01907"></a>01907 
-<a name="l01919"></a>01919 Vector * sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l01920"></a>01920                                   <span class="keywordtype">int</span>       centerx,
-<a name="l01921"></a>01921                                   <span class="keywordtype">int</span>       centery,
-<a name="l01922"></a>01922                                   <span class="keywordtype">int</span>       radius )
-<a name="l01923"></a>01923 {
-<a name="l01924"></a>01924     Vector          * med ;
-<a name="l01925"></a>01925     pixelvalue      * circle ;
-<a name="l01926"></a>01926     <span class="keywordtype">int</span>             i, j, k, l, m, n ;
-<a name="l01927"></a>01927     <span class="keywordtype">int</span>             circsize, nv ;
-<a name="l01928"></a>01928     <span class="keywordtype">int</span> ilx=0;
-<a name="l01929"></a>01929     <span class="keywordtype">int</span> ily=0;
-<a name="l01930"></a>01930     <span class="keywordtype">int</span> inp=0;
-<a name="l01931"></a>01931     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01932"></a>01932     cpl_image* i_img=NULL;
-<a name="l01933"></a>01933 
-<a name="l01934"></a>01934 
-<a name="l01935"></a>01935     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l01936"></a>01936     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l01937"></a>01937     inp=cpl_imagelist_get_size(cube);
-<a name="l01938"></a>01938 
-<a name="l01939"></a>01939     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l01940"></a>01940     {
-<a name="l01941"></a>01941         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l01942"></a>01942         <span class="keywordflow">return</span> NullVector ;
-<a name="l01943"></a>01943     }
-<a name="l01944"></a>01944 
-<a name="l01945"></a>01945     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||
-<a name="l01946"></a>01946         (centery+radius>=ily) ||
-<a name="l01947"></a>01947         (centerx-radius<0) ||
-<a name="l01948"></a>01948         (centery-radius<0))
-<a name="l01949"></a>01949     {
-<a name="l01950"></a>01950         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;
-<a name="l01951"></a>01951         <span class="keywordflow">return</span> NullVector ;
-<a name="l01952"></a>01952     }
-<a name="l01953"></a>01953 
-<a name="l01954"></a>01954     n = 0 ;
-<a name="l01955"></a>01955     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01956"></a>01956     {
-<a name="l01957"></a>01957         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01958"></a>01958         {
-<a name="l01959"></a>01959             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01960"></a>01960                   radius*radius )
-<a name="l01961"></a>01961             {
-<a name="l01962"></a>01962                 n ++ ;
-<a name="l01963"></a>01963             }
-<a name="l01964"></a>01964         }
-<a name="l01965"></a>01965     }
-<a name="l01966"></a>01966     <span class="keywordflow">if</span> (n == 0)
-<a name="l01967"></a>01967     {
-<a name="l01968"></a>01968         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;
-<a name="l01969"></a>01969         <span class="keywordflow">return</span> NullVector ;
-<a name="l01970"></a>01970     }
-<a name="l01971"></a>01971     circsize = n ;
-<a name="l01972"></a>01972 
-<a name="l01973"></a>01973     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l01974"></a>01974     <span class="keywordflow">if</span> (NULL == (med = sinfo_new_vector (inp)) )
-<a name="l01975"></a>01975     {
-<a name="l01976"></a>01976         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;
-<a name="l01977"></a>01977         <span class="keywordflow">return</span> NullVector ;
-<a name="l01978"></a>01978     }
-<a name="l01979"></a>01979 
-<a name="l01980"></a>01980     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l01981"></a>01981 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l01982"></a>01982 <span class="comment">     *  plane circle and store pixel values in a buffer.</span>
-<a name="l01983"></a>01983 <span class="comment">     */</span>
-<a name="l01984"></a>01984     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l01985"></a>01985     {
-<a name="l01986"></a>01986       i_img=cpl_imagelist_get(cube,i);
-<a name="l01987"></a>01987       pidata=cpl_image_get_data_float(i_img);
-<a name="l01988"></a>01988         m = 0 ;
-<a name="l01989"></a>01989         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l01990"></a>01990 
-<a name="l01991"></a>01991         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l01992"></a>01992         {
-<a name="l01993"></a>01993             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l01994"></a>01994             {
-<a name="l01995"></a>01995                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l01996"></a>01996                       radius*radius )
-<a name="l01997"></a>01997                 {
-<a name="l01998"></a>01998                     circle[m] = pidata[k + j * ilx] ;
-<a name="l01999"></a>01999                     m ++ ;
-<a name="l02000"></a>02000                 }
-<a name="l02001"></a>02001             }
-<a name="l02002"></a>02002         }
-<a name="l02003"></a>02003 
-<a name="l02004"></a>02004         nv = 0 ;
-<a name="l02005"></a>02005         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )
-<a name="l02006"></a>02006         {
-<a name="l02007"></a>02007             <span class="keywordflow">if</span> ( isnan(circle[l]) )
-<a name="l02008"></a>02008             {
-<a name="l02009"></a>02009                 continue ;
-<a name="l02010"></a>02010             }
-<a name="l02011"></a>02011             med -> data[i] += circle[l] ;
-<a name="l02012"></a>02012             nv ++;
-<a name="l02013"></a>02013         }
-<a name="l02014"></a>02014         <span class="keywordflow">if</span> ( nv == 0 )
-<a name="l02015"></a>02015         {
-<a name="l02016"></a>02016             med->data[i] = 0. ;
-<a name="l02017"></a>02017         }
-<a name="l02018"></a>02018         <span class="keywordflow">else</span>
-<a name="l02019"></a>02019         {
-<a name="l02020"></a>02020             med->data[i] = sinfo_new_median(circle, nv) ; 
-<a name="l02021"></a>02021         }
-<a name="l02022"></a>02022         cpl_free (circle) ;
-<a name="l02023"></a>02023     }
-<a name="l02024"></a>02024     <span class="keywordflow">return</span> med ;
-<a name="l02025"></a>02025 }
-<a name="l02026"></a>02026 
-<a name="l02040"></a>02040 Vector * 
-<a name="l02041"></a>02041 sinfo_new_cleanmean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l02042"></a>02042                                           <span class="keywordtype">int</span> llx,
-<a name="l02043"></a>02043                                           <span class="keywordtype">int</span> lly,
-<a name="l02044"></a>02044                                           <span class="keywordtype">int</span> urx,
-<a name="l02045"></a>02045                                           <span class="keywordtype">int</span> ury,
-<a name="l02046"></a>02046                                           <span class="keywordtype">float</span> lo_reject,
-<a name="l02047"></a>02047                                           <span class="keywordtype">float</span> hi_reject )
-<a name="l02048"></a>02048 {
-<a name="l02049"></a>02049     Vector          * clean ;
-<a name="l02050"></a>02050     pixelvalue      *local_rectangle ;
-<a name="l02051"></a>02051     <span class="keywordtype">int</span>             i, j, k, m ;
-<a name="l02052"></a>02052     <span class="keywordtype">int</span>             recsize ;
-<a name="l02053"></a>02053     <span class="keywordtype">int</span> ilx=0;
-<a name="l02054"></a>02054     <span class="keywordtype">int</span> ily=0;
-<a name="l02055"></a>02055     <span class="keywordtype">int</span> inp=0;
-<a name="l02056"></a>02056     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02057"></a>02057     cpl_image* i_img=NULL;
-<a name="l02058"></a>02058 
-<a name="l02059"></a>02059 
-<a name="l02060"></a>02060     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l02061"></a>02061     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l02062"></a>02062     inp=cpl_imagelist_get_size(cube);
-<a name="l02063"></a>02063 
-<a name="l02064"></a>02064     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l02065"></a>02065     {
-<a name="l02066"></a>02066         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l02067"></a>02067         <span class="keywordflow">return</span> NullVector ;
-<a name="l02068"></a>02068     }
-<a name="l02069"></a>02069 
-<a name="l02070"></a>02070     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||
-<a name="l02071"></a>02071         (urx<0) || (urx>=ilx) ||
-<a name="l02072"></a>02072         (lly<0) || (lly>=ily) ||
-<a name="l02073"></a>02073         (ury<0) || (ury>=ily) ||
-<a name="l02074"></a>02074         (llx>=urx) || (lly>=ury))
-<a name="l02075"></a>02075     {
-<a name="l02076"></a>02076         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;
-<a name="l02077"></a>02077         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,
-<a name="l02078"></a>02078                  llx, lly, urx, ury) ;
-<a name="l02079"></a>02079         <span class="keywordflow">return</span> NullVector ;
-<a name="l02080"></a>02080     }
-<a name="l02081"></a>02081 
-<a name="l02082"></a>02082     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l02083"></a>02083 
-<a name="l02084"></a>02084     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l02085"></a>02085     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (inp)) )
-<a name="l02086"></a>02086     {
-<a name="l02087"></a>02087         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;
-<a name="l02088"></a>02088         <span class="keywordflow">return</span> NullVector ;
-<a name="l02089"></a>02089     }
-<a name="l02090"></a>02090 
-<a name="l02091"></a>02091     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l02092"></a>02092 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l02093"></a>02093 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l02094"></a>02094 <span class="comment">     */</span>
-<a name="l02095"></a>02095     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l02096"></a>02096     {
-<a name="l02097"></a>02097       i_img=cpl_imagelist_get(cube,i);
-<a name="l02098"></a>02098       pidata=cpl_image_get_data_float(i_img);
-<a name="l02099"></a>02099       m = 0 ;
-<a name="l02100"></a>02100       local_rectangle=(pixelvalue *) cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l02101"></a>02101 
-<a name="l02102"></a>02102         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l02103"></a>02103         {
-<a name="l02104"></a>02104             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l02105"></a>02105             {
-<a name="l02106"></a>02106                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*ilx]) )
-<a name="l02107"></a>02107                 {
-<a name="l02108"></a>02108                     continue ;
-<a name="l02109"></a>02109                 }
-<a name="l02110"></a>02110                 <span class="keywordflow">else</span>
-<a name="l02111"></a>02111                 {
-<a name="l02112"></a>02112                     local_rectangle[m] = pidata[k + j * ilx] ;
-<a name="l02113"></a>02113                     m ++ ;
-<a name="l02114"></a>02114                 }
-<a name="l02115"></a>02115             }
-<a name="l02116"></a>02116         }
-<a name="l02117"></a>02117         <span class="keywordflow">if</span> ( m == 0 )
-<a name="l02118"></a>02118         {
-<a name="l02119"></a>02119             clean->data[i] = 0. ;
-<a name="l02120"></a>02120         }
-<a name="l02121"></a>02121         <span class="keywordflow">else</span>
-<a name="l02122"></a>02122         {
-<a name="l02123"></a>02123             clean->data[i] = sinfo_new_clean_mean(local_rectangle, m, 
-<a name="l02124"></a>02124                                                   lo_reject, hi_reject) ;
-<a name="l02125"></a>02125         }
-<a name="l02126"></a>02126         cpl_free ( local_rectangle ) ;
-<a name="l02127"></a>02127     }
-<a name="l02128"></a>02128     <span class="keywordflow">return</span> clean ;
-<a name="l02129"></a>02129 }
-<a name="l02130"></a>02130 
-<a name="l02142"></a>02142 Vector * 
-<a name="l02143"></a>02143 sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l02144"></a>02144                                   <span class="keywordtype">int</span>       centerx,
-<a name="l02145"></a>02145                                   <span class="keywordtype">int</span>       centery,
-<a name="l02146"></a>02146                                   <span class="keywordtype">int</span>       radius,
-<a name="l02147"></a>02147                                   <span class="keywordtype">float</span>     lo_reject,
-<a name="l02148"></a>02148                                   <span class="keywordtype">float</span>     hi_reject )
-<a name="l02149"></a>02149 {
-<a name="l02150"></a>02150     Vector          * clean ;
-<a name="l02151"></a>02151     pixelvalue      * circle ;
-<a name="l02152"></a>02152     <span class="keywordtype">int</span>             i, j, k, l, m, n ;
-<a name="l02153"></a>02153     <span class="keywordtype">int</span>             circsize, nv ;
-<a name="l02154"></a>02154     <span class="keywordtype">int</span> ilx=0;
-<a name="l02155"></a>02155     <span class="keywordtype">int</span> ily=0;
-<a name="l02156"></a>02156     <span class="keywordtype">int</span> inp=0;
-<a name="l02157"></a>02157     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02158"></a>02158     cpl_image* i_img=NULL;
-<a name="l02159"></a>02159 
-<a name="l02160"></a>02160     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));
-<a name="l02161"></a>02161     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));
-<a name="l02162"></a>02162     inp=cpl_imagelist_get_size(cube);
-<a name="l02163"></a>02163 
-<a name="l02164"></a>02164     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )
-<a name="l02165"></a>02165     {
-<a name="l02166"></a>02166         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;
-<a name="l02167"></a>02167         <span class="keywordflow">return</span> NullVector ;
-<a name="l02168"></a>02168     }
-<a name="l02169"></a>02169 
-<a name="l02170"></a>02170     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||
-<a name="l02171"></a>02171         (centery+radius>=ily) ||
-<a name="l02172"></a>02172         (centerx-radius<0) ||
-<a name="l02173"></a>02173         (centery-radius<0))
-<a name="l02174"></a>02174     {
-<a name="l02175"></a>02175         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;
-<a name="l02176"></a>02176         <span class="keywordflow">return</span> NullVector ;
-<a name="l02177"></a>02177     }
-<a name="l02178"></a>02178 
-<a name="l02179"></a>02179     n = 0 ;
-<a name="l02180"></a>02180     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l02181"></a>02181     {
-<a name="l02182"></a>02182         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l02183"></a>02183         {
-<a name="l02184"></a>02184             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l02185"></a>02185                   radius*radius )
-<a name="l02186"></a>02186             {
-<a name="l02187"></a>02187                 n ++ ;
-<a name="l02188"></a>02188             }
-<a name="l02189"></a>02189         }
-<a name="l02190"></a>02190     }
-<a name="l02191"></a>02191     <span class="keywordflow">if</span> (n == 0)
-<a name="l02192"></a>02192     {
-<a name="l02193"></a>02193         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!\n"</span>) ;
-<a name="l02194"></a>02194         <span class="keywordflow">return</span> NullVector ;
-<a name="l02195"></a>02195     }
-<a name="l02196"></a>02196     circsize = n ;
-<a name="l02197"></a>02197 
-<a name="l02198"></a>02198     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span>
-<a name="l02199"></a>02199     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (inp)) )
-<a name="l02200"></a>02200     {
-<a name="l02201"></a>02201         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;
-<a name="l02202"></a>02202         <span class="keywordflow">return</span> NullVector ;
-<a name="l02203"></a>02203     }
-<a name="l02204"></a>02204 
-<a name="l02205"></a>02205     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l02206"></a>02206 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l02207"></a>02207 <span class="comment">     *  plane circle and store pixel values in a buffer.</span>
-<a name="l02208"></a>02208 <span class="comment">     */</span>
-<a name="l02209"></a>02209     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )
-<a name="l02210"></a>02210     {
-<a name="l02211"></a>02211       i_img=cpl_imagelist_get(cube,i);
-<a name="l02212"></a>02212       pidata=cpl_image_get_data_float(i_img);
-<a name="l02213"></a>02213         m = 0 ;
-<a name="l02214"></a>02214         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l02215"></a>02215 
-<a name="l02216"></a>02216         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l02217"></a>02217         {
-<a name="l02218"></a>02218             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l02219"></a>02219             {
-<a name="l02220"></a>02220                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l02221"></a>02221                      radius*radius )
-<a name="l02222"></a>02222                 {
-<a name="l02223"></a>02223                     circle[m] = pidata[k + j * ilx] ;
-<a name="l02224"></a>02224                     m ++ ;
-<a name="l02225"></a>02225                 }
-<a name="l02226"></a>02226             }
-<a name="l02227"></a>02227         }
-<a name="l02228"></a>02228 
-<a name="l02229"></a>02229         nv = 0 ;
-<a name="l02230"></a>02230         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )
-<a name="l02231"></a>02231         {
-<a name="l02232"></a>02232             <span class="keywordflow">if</span> ( isnan(circle[l]) )
-<a name="l02233"></a>02233             {
-<a name="l02234"></a>02234                 continue ;
-<a name="l02235"></a>02235             }
-<a name="l02236"></a>02236             clean -> data[i] += circle[l] ;
-<a name="l02237"></a>02237             nv ++;
-<a name="l02238"></a>02238         }
-<a name="l02239"></a>02239         <span class="keywordflow">if</span> ( nv == 0 )
-<a name="l02240"></a>02240         {
-<a name="l02241"></a>02241             clean->data[i] = 0. ;
-<a name="l02242"></a>02242         }
-<a name="l02243"></a>02243         <span class="keywordflow">else</span>
-<a name="l02244"></a>02244         {
-<a name="l02245"></a>02245             clean->data[i] = sinfo_new_clean_mean(circle, nv, 
-<a name="l02246"></a>02246                                                   lo_reject, hi_reject) ; 
-<a name="l02247"></a>02247         }
-<a name="l02248"></a>02248         cpl_free (circle) ;
-<a name="l02249"></a>02249     }
-<a name="l02250"></a>02250     <span class="keywordflow">return</span> clean ;
-<a name="l02251"></a>02251 }
-<a name="l02252"></a>02252 
-<a name="l02264"></a>02264 <span class="keywordtype">float</span> * 
-<a name="l02265"></a>02265 sinfo_new_shift_array ( <span class="keywordtype">float</span> * input, <span class="keywordtype">int</span> n_elements, 
-<a name="l02266"></a>02266                         <span class="keywordtype">float</span> shift, <span class="keywordtype">double</span> * ker ) 
-<a name="l02267"></a>02267 {
-<a name="l02268"></a>02268     <span class="keywordtype">float</span>  *         shifted ;
-<a name="l02269"></a>02269     <span class="keywordtype">int</span>              samples = KERNEL_SAMPLES ;
-<a name="l02270"></a>02270     <span class="keywordtype">int</span>           i ;
-<a name="l02271"></a>02271     <span class="keywordtype">float</span>            fx ;
-<a name="l02272"></a>02272     <span class="keywordtype">float</span>            rx ;
-<a name="l02273"></a>02273     <span class="keywordtype">int</span>              px ;
-<a name="l02274"></a>02274     <span class="keywordtype">int</span>              tabx ;
-<a name="l02275"></a>02275     <span class="keywordtype">float</span>            value ;
-<a name="l02276"></a>02276     <span class="comment">/*size_t           pos ;*/</span>
-<a name="l02277"></a>02277     <span class="keyword">register</span> <span class="keywordtype">float</span> * pix ;
-<a name="l02278"></a>02278     <span class="keywordtype">int</span>              mid;
-<a name="l02279"></a>02279     <span class="keywordtype">float</span>            norm ;
-<a name="l02280"></a>02280 
-<a name="l02281"></a>02281     <span class="comment">/* error handling: test entries */</span>
-<a name="l02282"></a>02282     <span class="keywordflow">if</span> (input==NULL) 
-<a name="l02283"></a>02283     {
-<a name="l02284"></a>02284         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input array given!\n"</span>) ;
-<a name="l02285"></a>02285         <span class="keywordflow">return</span> NULL ;
-<a name="l02286"></a>02286     }
-<a name="l02287"></a>02287     <span class="keywordflow">if</span> (n_elements<=0) 
-<a name="l02288"></a>02288     {
-<a name="l02289"></a>02289         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of elements in input array given!\n"</span>) ;
-<a name="l02290"></a>02290         <span class="keywordflow">return</span> NULL ;
-<a name="l02291"></a>02291     }
-<a name="l02292"></a>02292 
-<a name="l02293"></a>02293     shifted    = (<span class="keywordtype">float</span>*) cpl_calloc(n_elements, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02294"></a>02294 
-<a name="l02295"></a>02295     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span>
-<a name="l02296"></a>02296     <span class="keywordflow">if</span> ((fabs(shift)<1e-2))
-<a name="l02297"></a>02297     {
-<a name="l02298"></a>02298         <span class="keywordflow">for</span> (i = 0 ; i <  n_elements ; i++ )
-<a name="l02299"></a>02299         {
-<a name="l02300"></a>02300             shifted[i] = input[i] ;
-<a name="l02301"></a>02301         }
-<a name="l02302"></a>02302         <span class="keywordflow">return</span> shifted ;
-<a name="l02303"></a>02303     }
-<a name="l02304"></a>02304     
-<a name="l02305"></a>02305     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;
-<a name="l02306"></a>02306 
-<a name="l02307"></a>02307     <span class="keywordflow">for</span> (i=1 ; i<  n_elements-2 ; i++) 
-<a name="l02308"></a>02308     {
-<a name="l02309"></a>02309         fx = (float)i+shift ;
-<a name="l02310"></a>02310         px = sinfo_new_nint(fx) ;
-<a name="l02311"></a>02311         rx = fx - (float)px ;
-<a name="l02312"></a>02312         pix = input ;
-<a name="l02313"></a>02313 
-<a name="l02314"></a>02314         <span class="keywordflow">if</span> ((px>=1) && (px<(n_elements-2))) 
-<a name="l02315"></a>02315         {
-<a name="l02316"></a>02316             tabx = (int)(fabs((<span class="keywordtype">float</span>)mid * rx)) ;
-<a name="l02317"></a>02317             <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span>
-<a name="l02318"></a>02318             <span class="keywordflow">if</span> (isnan(pix[i]))
-<a name="l02319"></a>02319             {
-<a name="l02320"></a>02320                 value = ZERO ;
-<a name="l02321"></a>02321             }
-<a name="l02322"></a>02322             <span class="keywordflow">else</span>
-<a name="l02323"></a>02323             {
-<a name="l02324"></a>02324                 <span class="keywordflow">if</span> (isnan(pix[i-1]))
-<a name="l02325"></a>02325                 {
-<a name="l02326"></a>02326                     pix[i-1] = 0. ;
-<a name="l02327"></a>02327                 }
-<a name="l02328"></a>02328                 <span class="keywordflow">if</span> (isnan(pix[i+1]))
-<a name="l02329"></a>02329                 {
-<a name="l02330"></a>02330                     pix[i+1] = 0. ;
-<a name="l02331"></a>02331                 }
-<a name="l02332"></a>02332                 <span class="keywordflow">if</span> (isnan(pix[i+2]))
-<a name="l02333"></a>02333                 {
-<a name="l02334"></a>02334                     pix[i+2] = 0. ;
-<a name="l02335"></a>02335                 }
-<a name="l02336"></a>02336 
-<a name="l02337"></a>02337                 <span class="comment">/*</span>
-<a name="l02338"></a>02338 <span class="comment">                 * Sum up over 4 closest pixel values,</span>
-<a name="l02339"></a>02339 <span class="comment">                 * weighted by interpolation kernel values</span>
-<a name="l02340"></a>02340 <span class="comment">                 */</span>
-<a name="l02341"></a>02341                 value =     pix[i-1] * ker[mid+tabx] +
-<a name="l02342"></a>02342                             pix[i] *   ker[tabx] +
-<a name="l02343"></a>02343                             pix[i+1] * ker[mid-tabx] +
-<a name="l02344"></a>02344                             pix[i+2] * ker[samples-tabx-1] ;
-<a name="l02345"></a>02345                 <span class="comment">/*</span>
-<a name="l02346"></a>02346 <span class="comment">                 * Also sum up interpolation kernel coefficients</span>
-<a name="l02347"></a>02347 <span class="comment">                 * for further normalization</span>
-<a name="l02348"></a>02348 <span class="comment">                 */</span>
-<a name="l02349"></a>02349                 norm =      ker[mid+tabx] +
-<a name="l02350"></a>02350                             ker[tabx] +
-<a name="l02351"></a>02351                             ker[mid-tabx] +
-<a name="l02352"></a>02352                             ker[samples-tabx-1] ;
-<a name="l02353"></a>02353                 <span class="keywordflow">if</span> (fabs(norm) > 1e-4) 
-<a name="l02354"></a>02354                 {
-<a name="l02355"></a>02355                     value /= norm ;
-<a name="l02356"></a>02356                 }
-<a name="l02357"></a>02357             }
-<a name="l02358"></a>02358         }   
-<a name="l02359"></a>02359         <span class="keywordflow">else</span> 
-<a name="l02360"></a>02360         {
-<a name="l02361"></a>02361             value = 0.0 ;
-<a name="l02362"></a>02362         }
-<a name="l02363"></a>02363         <span class="keywordflow">if</span> ( isnan(value) )
-<a name="l02364"></a>02364         {
-<a name="l02365"></a>02365             shifted[i] = ZERO ;
-<a name="l02366"></a>02366         }
-<a name="l02367"></a>02367         <span class="keywordflow">else</span>
-<a name="l02368"></a>02368         {
-<a name="l02369"></a>02369             shifted[i] = value ;
-<a name="l02370"></a>02370         }
-<a name="l02371"></a>02371     }  
-<a name="l02372"></a>02372     <span class="keywordflow">return</span> shifted ;
-<a name="l02373"></a>02373 }
-<a name="l02374"></a>02374 
-<a name="l02375"></a>02375 
-<a name="l02376"></a>02376 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l02377"></a>02377 
-<a name="l02389"></a>02389 cpl_image * 
-<a name="l02390"></a>02390 sinfo_new_div_image_by_spectrum( cpl_image * image, cpl_image * spectrum )
-<a name="l02391"></a>02391 {
-<a name="l02392"></a>02392     <span class="keywordtype">int</span> col, row ;
-<a name="l02393"></a>02393     cpl_image * retImage ;
-<a name="l02394"></a>02394     <span class="keywordtype">int</span> ilx=0;
-<a name="l02395"></a>02395     <span class="keywordtype">int</span> ily=0;
-<a name="l02396"></a>02396 
-<a name="l02397"></a>02397     <span class="keywordtype">int</span> slx=0;
-<a name="l02398"></a>02398     <span class="keywordtype">int</span> sly=0;
-<a name="l02399"></a>02399 
-<a name="l02400"></a>02400     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02401"></a>02401     <span class="keywordtype">float</span>* psdata=NULL;
-<a name="l02402"></a>02402     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02403"></a>02403 
-<a name="l02404"></a>02404     <span class="keywordflow">if</span> ( image == NULL )
-<a name="l02405"></a>02405     {
-<a name="l02406"></a>02406         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;
-<a name="l02407"></a>02407         <span class="keywordflow">return</span> NULL ;
-<a name="l02408"></a>02408     }
-<a name="l02409"></a>02409     ilx=cpl_image_get_size_x(image);
-<a name="l02410"></a>02410     ily=cpl_image_get_size_y(image);
-<a name="l02411"></a>02411 
-<a name="l02412"></a>02412 
-<a name="l02413"></a>02413     <span class="keywordflow">if</span> ( spectrum == NULL )
-<a name="l02414"></a>02414     {
-<a name="l02415"></a>02415         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no spectrum image given!"</span>) ;
-<a name="l02416"></a>02416         <span class="keywordflow">return</span> NULL ;
-<a name="l02417"></a>02417     }
-<a name="l02418"></a>02418     slx=cpl_image_get_size_x(spectrum);
-<a name="l02419"></a>02419     sly=cpl_image_get_size_y(spectrum);
-<a name="l02420"></a>02420 
-<a name="l02421"></a>02421     <span class="keywordflow">if</span> ( sly != ily )
-<a name="l02422"></a>02422     {
-<a name="l02423"></a>02423         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images are not compatible in pixel length!"</span>) ;
-<a name="l02424"></a>02424         <span class="keywordflow">return</span> NULL ;
-<a name="l02425"></a>02425     }
-<a name="l02426"></a>02426     <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_duplicate(image)) )
-<a name="l02427"></a>02427     {
-<a name="l02428"></a>02428         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not copy original image!"</span>) ;
-<a name="l02429"></a>02429         <span class="keywordflow">return</span> NULL ;
-<a name="l02430"></a>02430     }
-<a name="l02431"></a>02431     pidata=cpl_image_get_data_float(image);
-<a name="l02432"></a>02432     psdata=cpl_image_get_data_float(spectrum);
-<a name="l02433"></a>02433     podata=cpl_image_get_data_float(retImage);
-<a name="l02434"></a>02434 
-<a name="l02435"></a>02435     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02436"></a>02436     {
-<a name="l02437"></a>02437         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02438"></a>02438         {
-<a name="l02439"></a>02439             <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) &&
-<a name="l02440"></a>02440                  !isnan(psdata[col+row*ilx]))
-<a name="l02441"></a>02441             {
-<a name="l02442"></a>02442                 podata[col+row*ilx] = pidata[col+row*ilx] / psdata[row] ;
-<a name="l02443"></a>02443             }
-<a name="l02444"></a>02444          }
-<a name="l02445"></a>02445     }
-<a name="l02446"></a>02446     <span class="keywordflow">return</span> retImage ;
-<a name="l02447"></a>02447 }
-<a name="l02448"></a>02448 
-<a name="l02449"></a>02449 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l02450"></a>02450 <span class="comment">   Function     :       sinfo_new_clean_mean_circle_of_cube_spectra()</span>
-<a name="l02451"></a>02451 <span class="comment">   In           :       cube: 1 allocated cube, </span>
-<a name="l02452"></a>02452 <span class="comment">                        centerx, centery: center pixel of circular aperture </span>
-<a name="l02453"></a>02453 <span class="comment">                                          in image coordinates</span>
-<a name="l02454"></a>02454 <span class="comment">                        radius: integer radius of circular aperture</span>
-<a name="l02455"></a>02455 <span class="comment">   Out          :       result spectrum vector</span>
-<a name="l02456"></a>02456 <span class="comment">   Job          :       clean averaging routine for a reduced data to get </span>
-<a name="l02457"></a>02457 <span class="comment">                        a better spectral S/N only for a circular aperture.</span>
-<a name="l02458"></a>02458 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l02459"></a>02459 
-<a name="l02460"></a>02460 Vector * sinfo_new_clean_mean_circle_of_cube_spectra(cpl_imagelist * cube,
-<a name="l02461"></a>02461                                   <span class="keywordtype">int</span>       centerx,
-<a name="l02462"></a>02462                                   <span class="keywordtype">int</span>       centery,
-<a name="l02463"></a>02463                                   <span class="keywordtype">int</span>       radius,
-<a name="l02464"></a>02464                                   <span class="keywordtype">float</span>     lo_reject,
-<a name="l02465"></a>02465                                   <span class="keywordtype">float</span>     hi_reject )
-<a name="l02466"></a>02466 {
-<a name="l02467"></a>02467     Vector          * clean ;
-<a name="l02468"></a>02468     pixelvalue      * circle ;
-<a name="l02469"></a>02469     <span class="keywordtype">int</span>             i, j, k, l, m, n ;
-<a name="l02470"></a>02470     <span class="keywordtype">int</span>             circsize, nv ;
-<a name="l02471"></a>02471     <span class="keywordtype">int</span> lx=0;
-<a name="l02472"></a>02472     <span class="keywordtype">int</span> ly=0;
-<a name="l02473"></a>02473     <span class="keywordtype">int</span> lz=0;
-<a name="l02474"></a>02474     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02475"></a>02475     cpl_image* img=NULL;
-<a name="l02476"></a>02476 
-<a name="l02477"></a>02477     lz=cpl_imagelist_get_size(cube);
-<a name="l02478"></a>02478 
-<a name="l02479"></a>02479     <span class="keywordflow">if</span> ( cube == NULL || lz < 1 )
-<a name="l02480"></a>02480     {
-<a name="l02481"></a>02481         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra"</span>) ;
-<a name="l02482"></a>02482         <span class="keywordflow">return</span> NullVector ;
-<a name="l02483"></a>02483     }
-<a name="l02484"></a>02484     img=cpl_imagelist_get(cube,0);
-<a name="l02485"></a>02485     lx=cpl_image_get_size_x(img);
-<a name="l02486"></a>02486     ly=cpl_image_get_size_y(img);
-<a name="l02487"></a>02487 
-<a name="l02488"></a>02488     <span class="keywordflow">if</span> ((centerx+radius>=lx) ||
-<a name="l02489"></a>02489         (centery+radius>=ly) ||
-<a name="l02490"></a>02490         (centerx-radius<0) ||
-<a name="l02491"></a>02491         (centery-radius<0))
-<a name="l02492"></a>02492     {
-<a name="l02493"></a>02493         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;
-<a name="l02494"></a>02494         <span class="keywordflow">return</span> NullVector ;
-<a name="l02495"></a>02495     }
-<a name="l02496"></a>02496 
-<a name="l02497"></a>02497     n = 0 ;
-<a name="l02498"></a>02498     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l02499"></a>02499     {
-<a name="l02500"></a>02500         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l02501"></a>02501         {
-<a name="l02502"></a>02502             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l02503"></a>02503                  radius*radius )
-<a name="l02504"></a>02504             {
-<a name="l02505"></a>02505                 n ++ ;
-<a name="l02506"></a>02506             }
-<a name="l02507"></a>02507         }
-<a name="l02508"></a>02508     }
-<a name="l02509"></a>02509     <span class="keywordflow">if</span> (n == 0)
-<a name="l02510"></a>02510     {
-<a name="l02511"></a>02511         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;
-<a name="l02512"></a>02512         <span class="keywordflow">return</span> NullVector ;
-<a name="l02513"></a>02513     }
-<a name="l02514"></a>02514     circsize = n ;
-<a name="l02515"></a>02515 
-<a name="l02516"></a>02516     <span class="comment">/* allocate a new vector to store the average spectral values */</span>
-<a name="l02517"></a>02517     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (lz)) )
-<a name="l02518"></a>02518     {
-<a name="l02519"></a>02519         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new vector"</span>) ;
-<a name="l02520"></a>02520         <span class="keywordflow">return</span> NullVector ;
-<a name="l02521"></a>02521     }
-<a name="l02522"></a>02522 
-<a name="l02523"></a>02523     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l02524"></a>02524 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l02525"></a>02525 <span class="comment">     *  plane circle and store pixel values in a buffer.</span>
-<a name="l02526"></a>02526 <span class="comment">     */</span>
-<a name="l02527"></a>02527     <span class="keywordflow">for</span> ( i = 0 ; i < lz ; i++ )
-<a name="l02528"></a>02528     {
-<a name="l02529"></a>02529       img=cpl_imagelist_get(cube,i);
-<a name="l02530"></a>02530       pidata=cpl_image_get_data(img);
-<a name="l02531"></a>02531       m = 0 ;
-<a name="l02532"></a>02532       circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l02533"></a>02533 
-<a name="l02534"></a>02534       <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )
-<a name="l02535"></a>02535         {
-<a name="l02536"></a>02536             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )
-<a name="l02537"></a>02537             {
-<a name="l02538"></a>02538                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= 
-<a name="l02539"></a>02539                      radius*radius )
-<a name="l02540"></a>02540                 {
-<a name="l02541"></a>02541                      circle[m] = pidata[k + j * lx] ;
-<a name="l02542"></a>02542                     m ++ ;
-<a name="l02543"></a>02543                 }
-<a name="l02544"></a>02544             }
-<a name="l02545"></a>02545         }
-<a name="l02546"></a>02546 
-<a name="l02547"></a>02547         nv = 0 ;
-<a name="l02548"></a>02548         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )
-<a name="l02549"></a>02549         {
-<a name="l02550"></a>02550             <span class="keywordflow">if</span> ( isnan(circle[l]) )
-<a name="l02551"></a>02551             {
-<a name="l02552"></a>02552                 continue ;
-<a name="l02553"></a>02553             }
-<a name="l02554"></a>02554             clean -> data[i] += circle[l] ;
-<a name="l02555"></a>02555             nv ++;
-<a name="l02556"></a>02556         }
-<a name="l02557"></a>02557         <span class="keywordflow">if</span> ( nv == 0 )
-<a name="l02558"></a>02558         {
-<a name="l02559"></a>02559             clean->data[i] = 0. ;
-<a name="l02560"></a>02560         }
-<a name="l02561"></a>02561         <span class="keywordflow">else</span>
-<a name="l02562"></a>02562         {
-<a name="l02563"></a>02563             clean->data[i] = sinfo_new_clean_mean(circle, nv, 
-<a name="l02564"></a>02564                                                   lo_reject, hi_reject) ; 
-<a name="l02565"></a>02565         }
-<a name="l02566"></a>02566         cpl_free (circle) ;
-<a name="l02567"></a>02567     }
-<a name="l02568"></a>02568     <span class="keywordflow">return</span> clean ;
-<a name="l02569"></a>02569 }
-<a name="l02570"></a>02570 
-<a name="l02571"></a>02571 
-<a name="l02572"></a>02572 
-<a name="l02573"></a>02573 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l02574"></a>02574 <span class="comment">   Function     :       sinfo_new_clean_mean_rectangle_of_cube_spectra()</span>
-<a name="l02575"></a>02575 <span class="comment">   In           :       cube: 1 allocated cube, </span>
-<a name="l02576"></a>02576 <span class="comment">                        llx, lly, urx, ury: lower left and upper right</span>
-<a name="l02577"></a>02577 <span class="comment">                                            position of rectangle in x-y plane ,</span>
-<a name="l02578"></a>02578 <span class="comment">                                            image coordinates 0...</span>
-<a name="l02579"></a>02579 <span class="comment">   Out          :       result spectrum vector</span>
-<a name="l02580"></a>02580 <span class="comment">   Job          :       clean averaging routine for a reduced data to get a</span>
-<a name="l02581"></a>02581 <span class="comment">                        better spectral S/N only for a rectangular aperture.</span>
-<a name="l02582"></a>02582 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l02583"></a>02583 
-<a name="l02584"></a>02584 Vector * sinfo_new_clean_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l02585"></a>02585                                           <span class="keywordtype">int</span> llx,
-<a name="l02586"></a>02586                                           <span class="keywordtype">int</span> lly,
-<a name="l02587"></a>02587                                           <span class="keywordtype">int</span> urx,
-<a name="l02588"></a>02588                                           <span class="keywordtype">int</span> ury,
-<a name="l02589"></a>02589                                           <span class="keywordtype">float</span> lo_reject,
-<a name="l02590"></a>02590                                           <span class="keywordtype">float</span> hi_reject )
-<a name="l02591"></a>02591 {
-<a name="l02592"></a>02592     Vector          * clean ;
-<a name="l02593"></a>02593     pixelvalue      *rectangle ;
-<a name="l02594"></a>02594     <span class="keywordtype">int</span>             i, j, k, m ;
-<a name="l02595"></a>02595     <span class="keywordtype">int</span>             recsize ;
-<a name="l02596"></a>02596     <span class="keywordtype">int</span> lx=0;
-<a name="l02597"></a>02597     <span class="keywordtype">int</span> ly=0;
-<a name="l02598"></a>02598     <span class="keywordtype">int</span> lz=0;
-<a name="l02599"></a>02599     <span class="keywordtype">float</span>* pidata=0;
-<a name="l02600"></a>02600     cpl_image* img=NULL;
-<a name="l02601"></a>02601 
-<a name="l02602"></a>02602     lz=cpl_imagelist_get_size(cube);
-<a name="l02603"></a>02603 
-<a name="l02604"></a>02604     <span class="keywordflow">if</span> ( cube == NULL || lz < 1 )
-<a name="l02605"></a>02605     {
-<a name="l02606"></a>02606         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra"</span>) ;
-<a name="l02607"></a>02607         <span class="keywordflow">return</span> NullVector ;
-<a name="l02608"></a>02608     }
-<a name="l02609"></a>02609     img=cpl_imagelist_get(cube,0);
-<a name="l02610"></a>02610     lx=cpl_image_get_size_x(img);
-<a name="l02611"></a>02611     ly=cpl_image_get_size_y(img);
-<a name="l02612"></a>02612 
-<a name="l02613"></a>02613     <span class="keywordflow">if</span> ((llx<0) || (llx>=lx) ||
-<a name="l02614"></a>02614         (urx<0) || (urx>=lx) ||
-<a name="l02615"></a>02615         (lly<0) || (lly>=ly) ||
-<a name="l02616"></a>02616         (ury<0) || (ury>=ly) ||
-<a name="l02617"></a>02617         (llx>=urx) || (lly>=ury))
-<a name="l02618"></a>02618     {
-<a name="l02619"></a>02619         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;
-<a name="l02620"></a>02620         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,
-<a name="l02621"></a>02621                  llx, lly, urx, ury) ;
-<a name="l02622"></a>02622         <span class="keywordflow">return</span> NullVector ;
-<a name="l02623"></a>02623     }
-<a name="l02624"></a>02624 
-<a name="l02625"></a>02625     recsize = (urx - llx + 1) * (ury - lly + 1) ;
-<a name="l02626"></a>02626 
-<a name="l02627"></a>02627     <span class="comment">/* allocate a new vector to store the average spectral values */</span>
-<a name="l02628"></a>02628     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (lz)) )
-<a name="l02629"></a>02629     {
-<a name="l02630"></a>02630         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new vector"</span>) ;
-<a name="l02631"></a>02631         <span class="keywordflow">return</span> NullVector ;
-<a name="l02632"></a>02632     }
-<a name="l02633"></a>02633 
-<a name="l02634"></a>02634     <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l02635"></a>02635 <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span>
-<a name="l02636"></a>02636 <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span>
-<a name="l02637"></a>02637 <span class="comment">     */</span>
-<a name="l02638"></a>02638     <span class="keywordflow">for</span> ( i = 0 ; i < lz ; i++ )
-<a name="l02639"></a>02639     {
-<a name="l02640"></a>02640         m = 0 ;
-<a name="l02641"></a>02641         rectangle = (pixelvalue *) cpl_calloc (recsize, <span class="keyword">sizeof</span> (pixelvalue*));
-<a name="l02642"></a>02642         img=cpl_imagelist_get(cube,i);
-<a name="l02643"></a>02643         pidata=cpl_image_get_data(img);
-<a name="l02644"></a>02644         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )
-<a name="l02645"></a>02645         {
-<a name="l02646"></a>02646             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )
-<a name="l02647"></a>02647             {
-<a name="l02648"></a>02648                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*lx]) )
-<a name="l02649"></a>02649                 {
-<a name="l02650"></a>02650                     continue ;
-<a name="l02651"></a>02651                 }
-<a name="l02652"></a>02652                 <span class="keywordflow">else</span>
-<a name="l02653"></a>02653                 {
-<a name="l02654"></a>02654                     rectangle[m] = pidata[k + j * lx] ;
-<a name="l02655"></a>02655                     m ++ ;
-<a name="l02656"></a>02656                 }
-<a name="l02657"></a>02657             }
-<a name="l02658"></a>02658         }
-<a name="l02659"></a>02659         <span class="keywordflow">if</span> ( m == 0 )
-<a name="l02660"></a>02660         {
-<a name="l02661"></a>02661             clean->data[i] = 0. ;
-<a name="l02662"></a>02662         }
-<a name="l02663"></a>02663         <span class="keywordflow">else</span>
-<a name="l02664"></a>02664         {
-<a name="l02665"></a>02665             clean->data[i] = sinfo_new_clean_mean(rectangle, m, 
-<a name="l02666"></a>02666                                                   lo_reject, hi_reject) ;
-<a name="l02667"></a>02667         }
-<a name="l02668"></a>02668         cpl_free ( rectangle ) ;
-<a name="l02669"></a>02669     }
-<a name="l02670"></a>02670     <span class="keywordflow">return</span> clean ;
-<a name="l02671"></a>02671 }
-<a name="l02672"></a>02672 
-<a name="l02673"></a>02673 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_spectrum_ops.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/***************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  25/05/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*        sinfo_spectrum_ops.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*        some sinfo_vector procedures to operate on spectra</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   #include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*   1) Vector * sinfo_new_vector( ulong32 n_elements )</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   2) void * sinfo_new_destroy_vector( Vector *sinfo_vector )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*   3) cpl_image * sinfo_new_vector_to_image( Vector * spectrum )</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*   4) Vector * sinfo_new_image_to_vector( cpl_image * spectrum )</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*   5) cpl_image * </span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">       sinfo_new_extract_spectrum_from_resampled_flat(cpl_image * resflat,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                                                   float      loreject,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                                                   float      hireject ) </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*   6) cpl_image * sinfo_new_multiply_image_with_spectrum(cpl_image * image, </span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                                          cpl_image * spectrum)</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*   7) cpl_image * sinfo_new_optimal_extraction_from_cube(cpl_imagelist * cube, </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                                            int       halfbox_x, </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                                            int       halfbox_y,</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*                                            float     fwhm_factor,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                                            float     backvariance,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                                            float     sky,</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                                            float     gain,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                                            float     exptime)</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*   8) Vector * sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                                   float     loReject,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                                   float     hiReject,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*                                   int     * position,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                                   int       tolerance,</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*                                   int       posindicator )</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*    9) Vector * sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                                     int llx,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                                     int lly,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*                                     int urx,</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*                                     int ury )</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*   10) Vector * sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                                        int       centerx,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                                        int       centery,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                                        int       radius )</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*   11) Vector * </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">        sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                                            int llx,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*                                            int lly,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*                                            int urx,</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                                            int ury )</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*   12) Vector * sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                                         int       centerx,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*                                         int       centery,</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                                         int       radius )</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*   13) Vector * </span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">        sinfo_new_blackbody_spectrum(char * templateSpec, double temp )</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*   14) Vector * </span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">        sinfo_new_median_rectangle_of_cube_spectra(cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*                                               int llx,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*                                               int lly,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                                               int urx,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*                                               int ury )</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*   15) Vector * sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*                                           int       centerx,</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*                                           int       centery,</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*                                           int       radius )</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*   16) Vector * </span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">        sinfo_new_cleanmean_rectangle_of_cube_spectra(cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*                                                 int llx,</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*                                                 int lly,</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*                                                 int urx,</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*                                                 int ury,</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*                                                 float lo_reject,</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*                                                 float hi_reject )</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*   17) Vector * </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">        sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*                                              int       centerx,</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*                                              int       centery,</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*                                              int       radius,</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*                                              float     lo_reject,</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*                                              float     hi_reject )</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*   18) float * sinfo_new_shift_array ( float * input, </span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">                                        int n_elements, </span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">                                        float shift, </span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">                                        double * ker ) </span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*   1) allocates memory for a new sinfo_vector</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*   2) frees memory of a sinfo_vector</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*   3) converts a spectral sinfo_vector to a fits image</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*      remark: sinfo_vector object spectrum is destroyed</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*   4) converts a fits image to a spectral sinfo_vector</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*      remark: input image is destroyed</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*   5) builds one spectrum in a fits image out of a resampled</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*      flatfield frame by taking a clean mean along the spatial pixels</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*   6) multiplys a resampled image with a resampled spectrum</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*      (calibrated halogen lamp spectrum) in the same spectral range</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*      that means all image columns are multiplied with the same spectrum</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*   7) does the optimal extraction of a standard star spectrum</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*      according to the equation:</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*       S = sum { (P^2 / V) * (I - B) / P } / sum{ P^2 / V } </span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*       S: spectral flux at a particular wavelength</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*       P: normalized PSF (determined by a 2D-Gaussian fit)</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*       I: pixel value</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*       B: background pixel value determined by the background parameter </span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">           of the 2D-Gaussian fit</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*       V: estimated variance of a pixel: </span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">           V = [R^2 + D + sky + I,c/exptime]/gain</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*          where R is the read noise, and D the sinfo_dark current variance.</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*          backvariance is R^2 + D in counts/sec. </span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">           I,c is the source intensity in counts</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*          Remember: sigma,e[e-] = gain[e/count] * sigma,c [counts] = </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">                     sqrt(I,e) = sqrt(gain*I,c)</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*          => V,c = sigma,c^2 = sigma,e^2/gain^2 </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*          => sigma,c = sqrt(I,c/gain) => V,c = I,c/gain</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*   8) extracts a sky spectrum from a reduced sky spider observation, that</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*      means from a data cube. Therefore, the position of the sky within the</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*      field of view must be first read from the fits header.  </span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">       A pixel tolerance is subtracted.</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*      The found sky spectra are averaged by rejecting the extreme </span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">       high and low values.</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*   9) summing routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*      only for a rectangular aperture.</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">*   10) summing routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*       only for a circular aperture.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">*   11) averaging routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">*       only for a rectangular aperture.</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">*   12) averaging routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*       only for a circular aperture.</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">*   13) computes a blackbody spectral intensity distribution</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">*       (W/(m^2 lambda ster)) </span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">*   14) sinfo_median routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">*       only for a rectangular aperture.</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">*   15) sinfo_median routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">*       only for a circular aperture.</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">*   16) clean averaging routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">*       only for a rectangular aperture.</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">*   17) clean averaging routine for a reduced data to get a better spectral S/N</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*       only for a circular aperture.</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">*   18) shifts an array by a sub-pixel shift value using a tanh</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">*       interpolation kernel</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">*   RETURN VALUES</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">*   CAUTIONS</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">*   BUGS</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="preprocessor">#define POSIX_SOURCE 1</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="preprocessor">#include "sinfo_resampling.h"</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment"> *                            Function codes</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keywordtype">int</span> sinfo_stectrum_ima2table(</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                  <span class="keyword">const</span> cpl_image* spc,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* filename,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                  cpl_table** tbl)</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keyword">const</span> <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordtype">double</span> amp=0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordtype">double</span> wav=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>  </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordtype">double</span> step=0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordtype">double</span> wc=0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="keywordflow">if</span>(spc == NULL){</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image is null"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   pidata = cpl_image_get_data_const(spc);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   nx=cpl_image_get_size_x(spc);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   ny=cpl_image_get_size_y(spc);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="keywordflow">if</span>((nx == 0) || (ny == 0)) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image has improper size: nx=%d ny=%d"</span>,nx,ny);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">if</span>((nx > 1) && (ny > 1)) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input image has improper size: nx=%d ny=%d"</span>,nx,ny);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   nraw=nx*ny;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   *tbl = cpl_table_new(nraw);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_table_new_column(*tbl,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cpl_table_new_column(*tbl,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,filename);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   <span class="keywordflow">if</span>(nx>1) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     step=sinfo_pfits_get_cdelt1(plist);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     wc=sinfo_pfits_get_crval1(plist);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     step=sinfo_pfits_get_cdelt2(plist);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     wc=sinfo_pfits_get_crval2(plist);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   ws=wc-nraw*step/2;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   we=wc+nraw*step/2;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   wav=ws;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   sinfo_msg(<span class="stringliteral">"ws=%f we=%f step=%f"</span>,ws,we,step);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   cpl_table_set_double(*tbl,<span class="stringliteral">"WAVE"</span>,0,wav);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   cpl_table_set_double(*tbl,<span class="stringliteral">"INT"</span>,0,pidata[i]);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   <span class="keywordflow">for</span>(i=1;i<nraw;i++) {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     wav+=step;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     amp=(double)pidata[i];</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     cpl_table_set_double(*tbl,<span class="stringliteral">"WAVE"</span>,i,wav);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_table_set_double(*tbl,<span class="stringliteral">"INT"</span>,i,amp);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> Vector * sinfo_new_vector( ulong32 n_elements )</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     Vector * local_new_vector ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">if</span> ( n_elements <= 0 )</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of elements\n"</span>) ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">/* allocate memory for a sinfo_vector with the given number of elements */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     local_new_vector = (Vector *) cpl_malloc (<span class="keyword">sizeof</span> (Vector)) ; </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     local_new_vector -> n_elements = n_elements ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     local_new_vector -> data = (pixelvalue *) cpl_calloc (n_elements, </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                                   <span class="keyword">sizeof</span> (pixelvalue)) ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     <span class="keywordflow">return</span> local_new_vector ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="keywordtype">void</span> sinfo_free_svector( Vector **svector )</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> {</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     <span class="keywordflow">if</span> ( *svector != NULL )   </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>        </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       <span class="keywordflow">if</span>((*svector) -> data != NULL) {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     cpl_free ( (*svector) -> data ) ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     (*svector)->data = NULL;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       cpl_free ( *svector ) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       *svector = NULL;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     return ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="keywordtype">void</span> sinfo_new_destroy_vector( Vector *sinfo_vector )</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     <span class="keywordflow">if</span> ( sinfo_vector == NULL )   </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" NULL Vector given!\n"</span>) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         return ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }    </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     cpl_free ( sinfo_vector -> data ) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cpl_free ( sinfo_vector ) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> cpl_image * sinfo_new_vector_to_image( Vector * spectrum )</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     cpl_image * returnIm ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>    </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     <span class="keywordflow">if</span> ( spectrum == NULL )</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!\n"</span>) ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>  </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">if</span> ( NULL == (returnIm = cpl_image_new(1, spectrum->n_elements,</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                                            CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     {</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!\n"</span>) ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         sinfo_new_destroy_vector(spectrum) ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     podata=cpl_image_get_data_float(returnIm);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordflow">for</span> ( i = 0 ; i < spectrum->n_elements ; i++ )</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     {</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         podata[i] = spectrum -> data[i] ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     sinfo_new_destroy_vector (spectrum) ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordflow">return</span> returnIm ;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> Vector * sinfo_new_image_to_vector( cpl_image * spectrum )</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     Vector * returnVector ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     <span class="keywordflow">if</span> ( spectrum == NULL )</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum given!"</span>) ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     }</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     ilx=cpl_image_get_size_x(spectrum);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     ily=cpl_image_get_size_y(spectrum);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="keywordflow">if</span> ( NULL == (returnVector = sinfo_new_vector(ilx*ily)) )</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         cpl_image_delete(spectrum) ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     pidata=cpl_image_get_data_float(spectrum);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     {</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>         returnVector -> data[i] = pidata[i] ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     cpl_image_delete (spectrum) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     <span class="keywordflow">return</span> returnVector ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> }</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> cpl_image * </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> sinfo_new_extract_spectrum_from_resampled_flat( cpl_image * resflat,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                              <span class="keywordtype">float</span>      loreject,</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                                              <span class="keywordtype">float</span>      hireject ) </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     cpl_image * retIm ;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     <span class="keywordtype">int</span> n ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="keywordtype">float</span>* array=NULL ;</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     <span class="keywordtype">float</span> cleanMean ;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     Vector * spectrum ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     <span class="keywordflow">if</span> ( resflat == NULL )</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no flatfield given!"</span>) ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     ilx=cpl_image_get_size_x(resflat);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     ily=cpl_image_get_size_y(resflat);</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     <span class="keywordflow">if</span> ( NullVector == (spectrum = sinfo_new_vector(ily) ) )</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     {</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     }</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     array=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     pidata=cpl_image_get_data_float(resflat);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>         n = 0 ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>         {</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             <span class="keywordflow">if</span> ( !isnan(pidata[col + row*ilx]) )</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>             {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>                 array[n] = pidata[col+row*ilx] ;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                 n++ ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>             }</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>         <span class="keywordflow">if</span> ( n == 0 )</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>         {</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" only bad pixels in row: %d!"</span>, row) ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>             cleanMean = ZERO ;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>         }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             <span class="keywordflow">if</span> ( FLT_MAX == (cleanMean = sinfo_new_clean_mean(array, n, </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>                                                               loreject, </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>                                                               hireject)) )</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>             {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not do sinfo_clean_mean!"</span>) ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                 sinfo_new_destroy_vector(spectrum) ;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>             }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>         }</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>         spectrum->data[row] = cleanMean ; </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     }</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     <span class="keywordflow">if</span> ( NULL == ( retIm = sinfo_new_vector_to_image( spectrum ) ) )</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>     {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not do sinfo_vectorToImage!"</span>) ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         sinfo_new_destroy_vector(spectrum) ;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     }</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     cpl_free(array) ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> cpl_image * </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> sinfo_new_multiply_image_with_spectrum( cpl_image * image, </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>                                         cpl_image * spectrum )</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> {</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     cpl_image * retImage ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keywordtype">int</span> slx=0;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordtype">int</span> sly=0;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     <span class="keywordtype">float</span>* psdata=NULL;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no image given!"</span>) ;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     <span class="keywordflow">if</span> ( spectrum == NULL )</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no spectrum image given!"</span>) ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     }</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     slx=cpl_image_get_size_x(spectrum);</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     sly=cpl_image_get_size_y(spectrum);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordflow">if</span> ( sly != ily )</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" images are not compatible in pixel length!"</span>) ;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> </div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_duplicate(image)) )</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     {</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not copy original image!\n"</span>) ;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     }</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     psdata=cpl_image_get_data_float(spectrum);</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     {</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>         {</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>             <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) &&</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>                  !isnan(psdata[col+row*ilx]))</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>             {</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                 podata[col+row*ilx] = pidata[col+row*ilx] * psdata[row] ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                                                    </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>             }</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     }</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span> </div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> cpl_image * sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube, </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>                                       <span class="keywordtype">int</span>       llx,</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                                       <span class="keywordtype">int</span>       lly,</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                                       <span class="keywordtype">int</span>       halfbox_x, </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                                       <span class="keywordtype">int</span>       halfbox_y,</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                                       <span class="keywordtype">float</span>     fwhm_factor,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                                       <span class="keywordtype">float</span>     backvariance,</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                                       <span class="keywordtype">float</span>     sky,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                                       <span class="keywordtype">float</span>     gain,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>                                       <span class="keywordtype">float</span>     exptime,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>                                       cpl_table** spectrum,</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>                       <span class="keywordtype">int</span>       qc_info,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                                       <span class="keywordtype">int</span>*      check2)</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     <span class="keywordtype">int</span> col, row, z ;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     cpl_image * averagedIm ; </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     cpl_image * retIm ;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>     <span class="keywordtype">double</span> fit_par[7] ;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     <span class="keywordtype">double</span> derv_par[7] ;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     <span class="keywordtype">int</span> mpar[7] ;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>     <span class="keywordtype">double</span> gfit_par[7] ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     <span class="keywordtype">double</span> gderv_par[7] ;</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="keywordtype">int</span> gmpar[7] ;</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     <span class="keywordtype">int</span> fitInd ;</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     <span class="keywordtype">double</span> sum ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     <span class="keywordtype">double</span>** weight=NULL ;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>     <span class="keywordtype">double</span>** sinfo_psf=NULL ;</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     <span class="keywordtype">double</span> variance ;</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     <span class="keywordtype">double</span> xdat[2] ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     <span class="keywordtype">float</span> weighted_sum ;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordtype">float</span> counts_tot ;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordtype">float</span> counts_bkg ;</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     <span class="keywordtype">float</span> bkg_tot ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span> </div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <span class="keywordtype">int</span> first_col, last_col ;</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordtype">int</span> first_row, last_row ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     <span class="keywordtype">float</span> norm ;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     <span class="keywordtype">float</span> sum_psf=0;</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     <span class="keywordtype">float</span> sum_wgt=0;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     <span class="keywordtype">float</span> cenpix = 0;</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <span class="keywordtype">float</span> cenLambda = 0;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     <span class="keywordtype">float</span> dispersion = 0;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordtype">float</span> lambda=0;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     <span class="keywordtype">float</span> lambda_start=0;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>     <span class="keywordtype">float</span>* padata=NULL;</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordtype">float</span> tmp_val=0;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> </div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="comment">/* TODO: the sky here is not really used. We remove compilation warning */</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     sky=0;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>     {</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span> </div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>     <span class="keywordflow">if</span> ( llx < 0 || llx + 2*halfbox_x >= ilx || </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>          lly < 0 || lly + 2*halfbox_y >= ily )</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>     {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>       sinfo_msg(<span class="stringliteral">"llx=%d, lly=%d,  llx + 2*halfbox_x=%d, "</span></div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>                 <span class="stringliteral">"lly + 2*halfbox_y=%d"</span>,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>                 llx,lly,llx + 2*halfbox_x,lly + 2*halfbox_y);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>       sinfo_msg(<span class="stringliteral">"tresh_min_x=%d, tresh_min_y=%d, "</span></div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                 <span class="stringliteral">"tresh_max_x=%d, tresh_max_y=%d"</span>,0,0,ilx,ily);</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lower left sinfo_edge points wrong position!"</span>) ;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     }</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     <span class="keywordflow">if</span> ( halfbox_x <= 0 || halfbox_y <= 0 || </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>          2*halfbox_x > ilx || 2*halfbox_y > ily )</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     {</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong halfbox width given!"</span>) ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     }</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordflow">if</span> ( fwhm_factor <= 0. )</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     {</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong fwhm_factor given!"</span>) ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     }</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordflow">if</span> ( backvariance < 0. )</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     {</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong backvariance given!"</span>) ;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     }</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>     <span class="keywordflow">if</span> ( exptime <= 0. || exptime == FLAG )</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     {</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong exposure time given!"</span>) ;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     }</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span> </div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>     <span class="comment">/* allocate memory for spectrum */</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <span class="keywordflow">if</span> ( NULL == (retIm = cpl_image_new(1, inp,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" memory allocation failed!\n"</span>) ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="comment">/* collapse the cube to be able to compute the weights </span></div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="comment">       for optimal extraction */</span></div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>     <span class="keywordflow">if</span> ( NULL == (averagedIm = sinfo_new_average_cube_to_image(cube)) )</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>     {</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_averageCubeToImage failed!"</span>) ;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>         cpl_image_delete(retIm) ;</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>     }</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     <span class="comment">/* call the 2D-Gaussian fit routine */</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">for</span> ( i = 0 ; i < 7 ; i++ )</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     {</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         mpar[i] = 1 ;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     }</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> </div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="keywordflow">if</span> ( -1 == (fitInd = sinfo_new_fit_2d_gaussian(averagedIm,</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                                                    fit_par,</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                                                    derv_par,</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>                                                    mpar,</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                                                    llx,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                                                    lly,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                                                    halfbox_x,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                                                    halfbox_y,</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                                                    check2 )) )</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>     {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"sinfo_fit2dGaussian failed!"</span>) ;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         cpl_image_delete(retIm) ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>         cpl_image_delete(averagedIm) ;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     }</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="comment">/* determine the PSF by using the found 2D-Gaussian */</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     sinfo_psf=sinfo_new_2Ddoublearray(ilx,ily) ;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     sum = 0 ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     {</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         {</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>             xdat[0] = (double) col ;</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>             xdat[1] = (double) row ;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             sinfo_psf[col][row] = sinfo_new_gaussian_ellipse(xdat,fit_par) - </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>                                   fit_par[3] ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>             sum += sinfo_psf[col][row] ;</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         }</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     }</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="comment">/* Scale the PSF and determine the pixel variances and the </span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> <span class="comment">       normalization factor */</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     norm = 0. ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     variance = 0. ;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     sum_psf=0;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> </div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     weight=sinfo_new_2Ddoublearray(ilx,ily) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     padata=cpl_image_get_data_float(averagedIm);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     {</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         {</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>             sinfo_psf[col][row] /= sum ;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>         sum_psf +=  sinfo_psf[col][row];</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>             <span class="keywordflow">if</span> ( !isnan(padata[col+row*ilx]) )</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>             {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>           <span class="comment">/*</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="comment">                variance = (backvariance + sky + padata[col+row*ilx] / </span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> <span class="comment">                            exptime) / gain ;</span></div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> <span class="comment">          */</span></div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>                 variance = padata[col+row*ilx] / gain ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>             }</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>             <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>             {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>                 weight[col][row] = 0. ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>             }</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>             <span class="keywordflow">if</span> (variance == 0.)</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>             {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>                 weight[col][row] = 0. ;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>             }</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>             {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>          </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>                 weight[col][row] = sinfo_psf[col][row]/variance ;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>            </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>                 norm += weight[col][row] * weight[col][row] * variance ;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span> </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>             }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>         }</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     }</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     sum_wgt=0;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     {</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>         <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>         {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>       weight[col][row] /= norm;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>           sum_wgt += weight[col][row]*sinfo_psf[col][row];</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     }</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     }</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"sum_psf=%f sum_wgt=%f norm=%f"</span>,sum_psf,sum_wgt,norm);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     cpl_image_delete(averagedIm) ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     <span class="keywordflow">if</span> ( norm == 0. )</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     {</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" normalization sum is zero\n"</span>) ;</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>         cpl_image_delete(retIm) ;</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     }</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span> </div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     <span class="comment">/* limit the extraction region to the Gaussian, center +- fwhmx/y * </span></div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> <span class="comment">                 cos(theta)  */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> <span class="comment">    sinfo_msg("fit_par: %f %f %f %f %f %f %f", </span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="comment">              fit_par[0],fit_par[1],fit_par[2],fit_par[3],</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="comment">              fit_par[4],fit_par[5],fit_par[6]);</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">    sinfo_msg("fwhm_factor=%f",fwhm_factor);</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="keywordflow">if</span>(fabs(fit_par[6]) > PI_NUMB/4) {</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>       fit_par[6]=0;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     }</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     first_col = (int) (fit_par[0] - </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>                        fwhm_factor*fit_par[4]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     first_col = (first_col > 2 ) ? first_col : 2;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span> </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>     last_col =  (int) (fit_par[0] + </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                        fwhm_factor*fit_par[4]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     last_col = (last_col < 63 ) ? last_col : 63;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span> </div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     first_row = (int) (fit_par[1] - </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>                        fwhm_factor*fit_par[5]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     first_row = (first_row > 2 ) ? first_row : 2;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     last_row =  (int) (fit_par[1] + </div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>                        fwhm_factor*fit_par[5]*cos((<span class="keywordtype">double</span>)fit_par[6])) ;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     last_row = (last_row < 63 ) ? last_row : 63;</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span> </div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>     </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     <span class="keywordflow">if</span>(first_col > last_col) {</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>       tmp_val=last_col;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>       last_col=first_col;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>       first_col=tmp_val;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>     }</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordflow">if</span>(first_row > last_row) {</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>       tmp_val=last_row;</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>       last_col=first_row;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>       first_col=tmp_val;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>     }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     <span class="keywordflow">if</span>(abs(first_col- last_col) < 1) {</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>       first_col -=1;</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>       last_col +=1;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     }</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     <span class="keywordflow">if</span>(abs(first_row- last_row) < 1) {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>       first_row -=1;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>       last_row +=1;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     }</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span> </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordflow">if</span> ( first_col < 0 || first_row < 0 || last_col >= ilx || last_row >= ily )</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     {</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" star badly centered in FOV!"</span>) ;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>         cpl_image_delete(retIm) ;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     }</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span> </div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     cpl_table_new_column(*spectrum,<span class="stringliteral">"wavelength"</span>, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="comment">/* cpl_table_new_column(*spectrum,"intensity" , CPL_TYPE_FLOAT); */</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     cpl_table_new_column(*spectrum,<span class="stringliteral">"counts_tot"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     cpl_table_new_column(*spectrum,<span class="stringliteral">"counts_bkg"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     cpl_table_new_column(*spectrum,<span class="stringliteral">"bkg_tot"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <span class="keywordflow">if</span>(qc_info==1) {</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"AMP"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"XC"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"YC"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"BKG"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"FWHMX"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"FWHMY"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>        cpl_table_new_column(*spectrum,<span class="stringliteral">"ANGLE"</span> , CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     }</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     cenpix = sinfo_pfits_get_crpix3(plist);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     cenLambda = sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     dispersion = sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     lambda_start=cenLambda-cenpix*dispersion;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> </div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"frow %d lrow %d fcol %d lcol %d"</span>,</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>                      first_row, last_row, first_col, last_col);</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="comment">/* go through the planes */</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     podata=cpl_image_get_data_float(retIm);</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     {</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>       i_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>         weighted_sum = 0. ;</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>         counts_tot=0.;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         counts_bkg=0.;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         bkg_tot=0.;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>         <span class="keywordflow">if</span>(qc_info==1) {</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>            sinfo_new_fit_2d_gaussian(i_img,gfit_par,</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>                                      gderv_par,gmpar,llx,lly,</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>                                      halfbox_x,halfbox_y,check2);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     }</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         <span class="keywordflow">for</span> ( row = first_row ; row <= last_row ; row++ )</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>             <span class="keywordflow">for</span> ( col = first_col ; col < last_col ; col++ )</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>             {</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>                 <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) )</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>                 {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>           </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>                     weighted_sum += weight[col][row] * (pidata[col+row*ilx] - </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>                                     fit_par[3]);</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>             </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>                     counts_bkg += (pidata[col+row*ilx] - fit_par[3]);</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>                     counts_tot += (pidata[col+row*ilx]);</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>                     bkg_tot += fit_par[3];</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>             </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>                 } </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             }</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>         }    </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         <span class="keywordflow">if</span> (weighted_sum == 0.)</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         {</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>             weighted_sum = ZERO ;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>             counts_tot = ZERO;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>             counts_bkg = ZERO;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>             bkg_tot = ZERO;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>         }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>         {</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">            weighted_sum /= norm ;</span></div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>       </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>       </div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         }</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>         podata[z] = weighted_sum ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         lambda=lambda_start+z*dispersion;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>         cpl_table_set_float(*spectrum,<span class="stringliteral">"wavelength"</span> ,z,lambda);</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>         <span class="comment">/* cpl_table_set_float(*spectrum,"intensity" ,z,weighted_sum); */</span></div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>         cpl_table_set_float(*spectrum,<span class="stringliteral">"counts_tot"</span> ,z,counts_tot);</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>         cpl_table_set_float(*spectrum,<span class="stringliteral">"counts_bkg"</span> ,z,counts_bkg);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         cpl_table_set_float(*spectrum,<span class="stringliteral">"bkg_tot"</span> ,z,bkg_tot);</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>         <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"w=%f I=%f b=%f a=%f"</span>,</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>                          lambda,counts_tot,counts_bkg,bkg_tot);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         <span class="keywordflow">if</span>(qc_info==1) {</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"AMP"</span> ,z,gfit_par[0]);</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"XC"</span> ,z,gfit_par[1]);</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"YC"</span> ,z,gfit_par[2]);</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"BKG"</span> ,z,gfit_par[3]);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"FWHMX"</span> ,z,gfit_par[4]);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"FWHMY"</span> ,z,gfit_par[5]);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>            cpl_table_set_float(*spectrum,<span class="stringliteral">"ANGLE"</span> ,z,gfit_par[6]);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     }</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>     sinfo_new_destroy_2Ddoublearray(&sinfo_psf,ilx) ;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     sinfo_new_destroy_2Ddoublearray(&weight,ilx) ;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>     <span class="keywordflow">return</span> retIm ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span> }</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> Vector * sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>                              <span class="keywordtype">float</span>     loReject,</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>                              <span class="keywordtype">float</span>     hiReject,</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>                              <span class="keywordtype">int</span>     * position,</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>                              <span class="keywordtype">int</span>       tolerance,</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>                              <span class="keywordtype">int</span>       posindicator )</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> {</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     Vector * spectrum ;</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     <span class="keywordtype">int</span> x, y, z ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keywordtype">int</span> n ;</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="keywordtype">int</span> n_sky ;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     <span class="keywordtype">int</span> x_low , x_high ;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     <span class="keywordtype">int</span> y_low , y_high ;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     <span class="keywordtype">int</span> hi_x, lo_x ;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     <span class="keywordtype">float</span> * to_average ;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     <span class="keywordtype">float</span>   cleanMean ;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     <span class="keywordflow">if</span> ( NULL == cube )</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     {</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no cube given!\n"</span>) ;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     }</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     <span class="keywordflow">if</span> ( loReject < 0. || hiReject < 0. || loReject + hiReject >= 90. )</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     {</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong or unrealistic loReject and hiReject values!"</span>) ;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     }</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordflow">if</span> ( position == NULL)</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no position array given!"</span>) ;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     <span class="keywordflow">if</span> ( position[0] < 0 || position[1] < 0 || </div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>          position[0] > ilx  || position[1] > ily )</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position of sky spider!"</span>) ;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     <span class="keywordflow">if</span> ( tolerance < 0 || tolerance >= ilx )</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     {</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong tolerance given!"</span>) ;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     }</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     <span class="keywordflow">if</span> ( posindicator == 0 )</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     {</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no sinfo_edge indicator given!"</span>) ;</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     }</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     <span class="comment">/* determine the edge of the image where the sky spectra are placed */</span></div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     <span class="keywordflow">switch</span>(posindicator)</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     {</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>         <span class="comment">/* lower right sinfo_edge */</span></div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>             x_low  = position[0] + tolerance ;</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>             x_high = ilx ;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>             y_low  = 0 ;</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>             y_high = position[1] - tolerance ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>             break ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         <span class="comment">/* upper right sinfo_edge */</span></div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>             x_low  = position[0] + tolerance ;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>             x_high = ilx ;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>             y_low  = position[1] + tolerance ;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>             y_high = ily ;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>             break ;</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>         <span class="comment">/* upper left sinfo_edge */</span></div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>             x_low  = 0 ;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>             x_high = position[0] - tolerance ;</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>             y_low  = position [1] + tolerance ;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>             y_high = ily ;</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>             break ;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position indicator index!"</span>) ;</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>             <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>             break ;</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     }</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>     <span class="keywordflow">if</span> ( x_low >= ilx || x_high < 1 || y_low >= ily || y_high < 1 )</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     {</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" tolerance too high!"</span>) ;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>     }</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     <span class="keywordflow">if</span> ( x_high - x_low != y_high - y_low )</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     {</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sky sinfo_edge is not a diagonal line!\n"</span>) ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     <span class="comment">/* determine the number of sky pixels in one image plane, take only </span></div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="comment">       the full sky pixels which are not cut by the diagonal line */</span></div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     n_sky = (x_high - x_low) * (x_high - x_low - 1) / 2 ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     <span class="keywordflow">if</span> ( n_sky <= 0 )</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     {</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no sky spectrum in found in cube!"</span>) ;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     }</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>     <span class="keywordflow">if</span> ( n_sky == 1 )</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     {</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" only one sky spectrum is taken, no averaging!"</span>) ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     }</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     <span class="comment">/* allocate memory for the output spectrum */</span></div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="keywordflow">if</span> ( NullVector == (spectrum = sinfo_new_vector(inp)) )</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     {</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     }</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     <span class="comment">/* go through the image planes */</span></div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="keywordflow">for</span> ( z = 0 ; z < inp ; z++ )</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     {</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>       i_img=cpl_imagelist_get(cube,z);</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         <span class="comment">/* allocate memory for the sky pixels in one image plane */</span></div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>         <span class="keywordflow">if</span> (NULL == (to_average = (<span class="keywordtype">float</span>*) cpl_calloc(n_sky, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>))))</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         {</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>             sinfo_new_destroy_vector(spectrum) ;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>             <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>         }</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>         n = 0 ;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>         <span class="keywordflow">switch</span>(posindicator)</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>         {</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>             <span class="comment">/* lower right sinfo_edge */</span></div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>             <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>                 lo_x = x_low ;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>                 <span class="keywordflow">for</span> ( y = y_low ; y < y_high - 1 ; y++ )</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>                 {</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>                     lo_x++ ;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>                     <span class="keywordflow">for</span> ( x = lo_x ; x < x_high ; x++ )</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>                     {</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>                         to_average[n] = pidata[x+y*ilx] ;</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>                         n++ ;</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>                     }</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>                 }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>                 break ;</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>             <span class="comment">/* lower left sinfo_edge */</span></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>             <span class="keywordflow">case</span> 2:</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>                 hi_x = x_high ;</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>                 <span class="keywordflow">for</span> ( y = y_low ; y < y_high - 1 ; y++ )</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>                 {</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>                     hi_x-- ;</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>                     <span class="keywordflow">for</span> ( x = x_low ; x < hi_x ; x++ )</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                     {</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>                         to_average[n] = pidata[x+y*ilx] ;</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>                         n++ ;</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                     }</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                 }</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                 break ;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>             <span class="comment">/* upper right sinfo_edge */</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>             <span class="keywordflow">case</span> 3:</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>                 lo_x = x_high ;</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>                 <span class="keywordflow">for</span> ( y = y_low+1 ; y < y_high ; y++ )</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>                 {</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                     lo_x-- ;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>                     <span class="keywordflow">for</span> ( x = lo_x ; x < x_high ; x++ )</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>                     {</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>                         to_average[n] = pidata[x+y*ilx] ;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>                         n++ ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>                     }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>                 }</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                 break ;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>             <span class="comment">/* upper left sinfo_edge */</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>             <span class="keywordflow">case</span> 4:</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>                 hi_x = x_low ;</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>                 <span class="keywordflow">for</span> ( y = y_low+1 ; y < y_high ; y++ )</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>                 {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>                     hi_x++ ;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>                     <span class="keywordflow">for</span> ( x = x_low ; x < hi_x ; x++ )</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>                     {</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>                         to_average[n] = pidata[x+y*ilx] ;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>                         n++ ;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>                     }</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>                 }</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>                 break ;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>             <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong position indicator index!\n"</span>) ;</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>                 <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>                 break ;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>         }</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>         <span class="keywordflow">if</span> ( n != n_sky )</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>         {</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"number of stored sky image pixels does "</span></div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>                               <span class="stringliteral">"not equal number of computed sky pixels!"</span>) ;</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>         }</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         <span class="comment">/* now take a clean mean of the sky "image" */</span></div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>         cleanMean = sinfo_new_clean_mean (to_average, n, loReject, hiReject) ;</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>         <span class="keywordflow">if</span> (cleanMean == FLT_MAX)</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>         {</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not take a clean mean!\n"</span>) ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             sinfo_new_destroy_vector(spectrum) ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>             cpl_free(to_average) ;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>             <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>         }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>         spectrum->data[z] = cleanMean ;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>         cpl_free (to_average) ;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     }</div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>      </div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     <span class="keywordflow">return</span> spectrum ;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> }</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> Vector * sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>                                      <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>                                      <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>                                      <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>                                      <span class="keywordtype">int</span> ury )</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> {</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     Vector          * sum ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     pixelvalue      *local_rectangle ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="keywordtype">int</span>             i, j, k, l, m ;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     <span class="keywordtype">int</span>             recsize ;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> </div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>     {</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>     }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>         (urx<0) || (urx>=ilx) ||</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>         (lly<0) || (lly>=ily) ||</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>         (ury<0) || (ury>=ily) ||</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>     {</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>, </div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>                          llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>     }</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span> </div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>     <span class="keywordflow">if</span> (NULL == (sum = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     {</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     }</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> </div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>     {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>         m = 0 ;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>         local_rectangle = (pixelvalue *) cpl_calloc (recsize, </div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>                                          <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> </div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>         {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>             {</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>                 local_rectangle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                 m ++ ;</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>             }</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>         }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>         <span class="keywordflow">for</span> ( l = 0 ; l < recsize ; l++ )</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>         {</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>             <span class="keywordflow">if</span> ( isnan(local_rectangle[l]) )</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>             {</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>                 continue ;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>             }</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             sum -> data[i] += local_rectangle[l] ;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>         }</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>         cpl_free ( local_rectangle ) ;</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     }</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     <span class="keywordflow">return</span> sum ;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span> }</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> Vector * sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>                                   <span class="keywordtype">int</span>       radius )</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> {</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     Vector          * sum ;</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     pixelvalue      * circle ;</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     <span class="keywordtype">int</span>             i, j, k, l, m, n ;</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>     <span class="keywordtype">int</span>             circsize ;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> </div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> </div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     {</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     }</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> </div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>         (centery+radius>=ily) ||</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>         (centerx-radius<0) ||</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>         (centery-radius<0))</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     {</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>     }</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> </div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>     n = 0 ;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     {</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>         {</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>                            radius*radius )</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>             {</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>                 n ++ ;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>             }</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>         }</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>     }</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>     {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>     }</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>     circsize = n ;</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>     <span class="keywordflow">if</span> (NULL == (sum = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>     {</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"  cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>     }</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> </div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">     *  plane circle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     {</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>         m = 0 ;</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>         {</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>             {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>                      radius*radius )</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>                 {</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>                     circle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>                     m ++ ;</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>                 }</div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>             }</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>         }</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> </div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>         {</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>             <span class="keywordflow">if</span> ( isnan(circle[l]) )</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>             {</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>                 continue ;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>             }</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>             sum -> data[i] += circle[l] ;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>         }</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         cpl_free (circle) ;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     }</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordflow">return</span> sum ;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> Vector * sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>                                      <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>                                      <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>                                      <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>                                      <span class="keywordtype">int</span> ury )</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>     Vector          * mean ;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>     pixelvalue      *local_rectangle ;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     <span class="keywordtype">int</span>             i, j, k, l, m ;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     <span class="keywordtype">int</span>             recsize, nv ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> </div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span> </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>     {</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"  no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     }</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> </div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>         (urx<0) || (urx>=ilx) ||</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>         (lly<0) || (lly>=ily) ||</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>         (ury<0) || (ury>=ily) ||</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>     {</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"  invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>                  llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>     }</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> </div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> </div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>     {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>     }</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> </div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     {</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>         m = 0 ;</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>         local_rectangle = (pixelvalue *) cpl_calloc (recsize, </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>                            <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>         {</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>             {</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>                 local_rectangle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>                 m ++ ;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>             }</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>         }</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>         nv = 0 ;</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>         <span class="keywordflow">for</span> ( l = 0 ; l < recsize ; l++ )</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>         {</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>             <span class="keywordflow">if</span> ( isnan(local_rectangle[l]) )</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>             {</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>                 continue ;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>             }</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>             mean -> data[i] += local_rectangle[l] ;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>             nv ++;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>         }</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>         <span class="keywordflow">if</span> ( nv == 0 )</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>         {</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>             mean -> data[i] = ZERO ;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>         }</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>         {</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>             mean -> data[i] /= nv ;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>         }</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>         cpl_free ( local_rectangle ) ;</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>     }</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>     <span class="keywordflow">return</span> mean ;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> }</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span> </div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> Vector * </div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>                                   <span class="keywordtype">int</span>       radius )</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> {</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     Vector          * mean ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     pixelvalue      * circle ;</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="keywordtype">int</span>             i, j, k, l, m, n ;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="keywordtype">int</span>             circsize, nv ;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> </div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span> </div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     {</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube to take the mean of his spectra"</span>) ;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>     }</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>         (centery+radius>=ily) ||</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>         (centerx-radius<0) ||</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>         (centery-radius<0))</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     {</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     }</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     n = 0 ;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     {</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>         {</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>                  radius*radius )</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>             {</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>                 n ++ ;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>             }</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>         }</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     }</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>     {</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!\n"</span>) ;</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>     }</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>     circsize = n ;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> </div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     <span class="keywordflow">if</span> (NULL == (mean = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     {</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     }</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span> </div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span> <span class="comment">     *  plane circle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     {</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>         m = 0 ;</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>         {</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>             {</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>                      radius*radius )</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>                 {</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>                     circle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>                     m ++ ;</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>                 }</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>             }</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>         }</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span> </div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>         nv = 0 ;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>         {</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>             <span class="keywordflow">if</span> ( isnan(circle[l]) )</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>             {</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>                 continue ;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>             }</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>             mean -> data[i] += circle[l] ;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>             nv ++;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>         }</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>         <span class="keywordflow">if</span> ( nv == 0 )</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>         {</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>             mean -> data[i] = ZERO ;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>         }</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         {</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>             mean -> data[i] /= nv ;</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>         }</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span> </div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>         cpl_free (circle) ;</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     }</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     <span class="keywordflow">return</span> mean ;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> </div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> Vector * sinfo_new_blackbody_spectrum( <span class="keywordtype">char</span> * templateSpec, <span class="keywordtype">double</span> temp )</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> {</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>     Vector * retSpec ;</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     <span class="keywordtype">int</span> n ;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>     <span class="keywordtype">double</span> cenpix ;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>     <span class="keywordtype">int</span> npix ;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     <span class="keywordtype">double</span> cenLambda ;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     <span class="keywordtype">double</span> firstLambda ;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>     <span class="keywordtype">double</span> disp ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     <span class="keywordtype">double</span> lambda ;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>     <span class="keywordtype">double</span> intens ;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     <span class="keywordtype">double</span> denom ;</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     <span class="keywordtype">double</span> norm ;</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     <span class="keywordflow">if</span> ( NULL == templateSpec )</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>     {</div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" now input image given!\n"</span>) ;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>     }</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>     <span class="keywordflow">if</span> ( temp < 0. )</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     {</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong temperature given!\n"</span>) ;</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     }</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     <span class="comment">/* get the fits header information needed */</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>     <span class="keywordflow">if</span> ((cpl_error_code)((plist=cpl_propertylist_load(templateSpec,0))==NULL)){</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,templateSpec);</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>       cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>     }</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> </div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> </div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     cenpix = sinfo_pfits_get_crpix2(plist);</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CRPIX2\n"</span>) ;</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>     }</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> </div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     cenLambda = sinfo_pfits_get_crval2(plist);</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CRVAL2\n"</span>) ;</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>     }</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>     disp = sinfo_pfits_get_cdelt2(plist);</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get CDELT2\n"</span>) ;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     }</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     npix = sinfo_pfits_get_naxis2(plist);</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot get NAXIS2\n"</span>) ;</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>     }</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> </div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> </div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>     <span class="keywordflow">if</span> (NULL == (retSpec = sinfo_new_vector (npix)))</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>     {</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>     }</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>     </div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     <span class="comment">/* shift from fits to image coordinates */</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>     cenpix-- ;</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>   </div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>     firstLambda = cenLambda - cenpix * disp ;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>     <span class="keywordflow">for</span> ( n = 0 ; n < npix ; n++ )</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>     {</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>         lambda = firstLambda + disp * (double)n ;</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>         <span class="comment">/* convert from microns to m */</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> </div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>         lambda /= 1.0e6 ;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>         denom = 1./(exp(PLANCK*SPEED_OF_LIGHT/(lambda*BOLTZMANN*temp)) - 1.) ;</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>         intens = 2.*PI_NUMB*PLANCK*SPEED_OF_LIGHT*SPEED_OF_LIGHT / </div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>                  pow(lambda, 5) * denom ;</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>         retSpec->data[n] = intens ;   </div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>     }</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>     norm = retSpec->data[npix/2] ;</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>     <span class="keywordflow">for</span> ( n = 0 ; n < npix ; n++ )</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>     {</div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>         retSpec->data[n] /= norm ;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>     }</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>     </div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>     <span class="keywordflow">return</span> retSpec ;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> }</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> </div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span> Vector * sinfo_new_median_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>                                              <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>                                              <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>                                              <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>                                              <span class="keywordtype">int</span> ury )</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> {</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>     Vector          * med ;</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>     pixelvalue      *local_rectangle ;</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>     <span class="keywordtype">int</span>             i, j, k, m ;</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>     <span class="keywordtype">int</span>             recsize ;</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span> </div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span> </div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> </div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>     {</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>     }</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> </div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>         (urx<0) || (urx>=ilx) ||</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>         (lly<0) || (lly>=ily) ||</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>         (ury<0) || (ury>=ily) ||</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>     {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>, </div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>                         llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>     }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> </div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>     <span class="keywordflow">if</span> (NULL == (med = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>     {</div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     }</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> </div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>     {</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> </div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>       m = 0 ;</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>       local_rectangle=(pixelvalue *)cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> </div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>         {</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>             {</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*ilx]) )</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>                 {</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>                     continue ;</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>                 }</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>                 {</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>                     local_rectangle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>                     m ++ ;</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>                 }</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>             }</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>         }</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>         <span class="keywordflow">if</span> ( m == 0 )</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>         {</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>             med->data[i] = 0. ;</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>         }</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>         {</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>             med->data[i] = sinfo_new_median(local_rectangle, m) ;</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>         }</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>         cpl_free ( local_rectangle ) ;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>     }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>     <span class="keywordflow">return</span> med ;</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> }</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> </div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span> Vector * sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>                                   <span class="keywordtype">int</span>       radius )</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> {</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>     Vector          * med ;</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>     pixelvalue      * circle ;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>     <span class="keywordtype">int</span>             i, j, k, l, m, n ;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>     <span class="keywordtype">int</span>             circsize, nv ;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> </div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> </div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     {</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>     }</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> </div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>         (centery+radius>=ily) ||</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>         (centerx-radius<0) ||</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>         (centery-radius<0))</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>     {</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>     }</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> </div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>     n = 0 ;</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     {</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>         {</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>                   radius*radius )</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>             {</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>                 n ++ ;</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>             }</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>         }</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>     }</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>     {</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>     }</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>     circsize = n ;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> </div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>     <span class="keywordflow">if</span> (NULL == (med = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>     {</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>     }</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> </div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> <span class="comment">     *  plane circle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>     {</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>         m = 0 ;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span> </div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>         {</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>             {</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>                       radius*radius )</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>                 {</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>                     circle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>                     m ++ ;</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>                 }</div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>             }</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>         }</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>         nv = 0 ;</div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )</div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>         {</div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>             <span class="keywordflow">if</span> ( isnan(circle[l]) )</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>             {</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>                 continue ;</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>             }</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>             med -> data[i] += circle[l] ;</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>             nv ++;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>         }</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>         <span class="keywordflow">if</span> ( nv == 0 )</div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>         {</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>             med->data[i] = 0. ;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>         }</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>         {</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>             med->data[i] = sinfo_new_median(circle, nv) ; </div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>         }</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>         cpl_free (circle) ;</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>     }</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>     <span class="keywordflow">return</span> med ;</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> }</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span> </div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span> Vector * </div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span> sinfo_new_cleanmean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>                                           <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>                                           <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>                                           <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>                                           <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>                                           <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>                                           <span class="keywordtype">float</span> hi_reject )</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span> {</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>     Vector          * clean ;</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>     pixelvalue      *local_rectangle ;</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>     <span class="keywordtype">int</span>             i, j, k, m ;</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>     <span class="keywordtype">int</span>             recsize ;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span> </div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span> </div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span> </div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>     {</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>     }</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> </div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>     <span class="keywordflow">if</span> ((llx<0) || (llx>=ilx) ||</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>         (urx<0) || (urx>=ilx) ||</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>         (lly<0) || (lly>=ily) ||</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>         (ury<0) || (ury>=ily) ||</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>     {</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>                  llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>     }</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span> </div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span> </div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>     {</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector"</span>) ;</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     }</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span> </div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>     {</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>       m = 0 ;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>       local_rectangle=(pixelvalue *) cpl_calloc(recsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span> </div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>         {</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>             {</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*ilx]) )</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>                 {</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>                     continue ;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>                 }</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>                 {</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>                     local_rectangle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>                     m ++ ;</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>                 }</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>             }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>         }</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>         <span class="keywordflow">if</span> ( m == 0 )</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>         {</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>             clean->data[i] = 0. ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>         }</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>         {</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>             clean->data[i] = sinfo_new_clean_mean(local_rectangle, m, </div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>                                                   lo_reject, hi_reject) ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>         }</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>         cpl_free ( local_rectangle ) ;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>     }</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     <span class="keywordflow">return</span> clean ;</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span> }</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span> </div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span> Vector * </div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span> sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>                                   <span class="keywordtype">int</span>       radius,</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>                                   <span class="keywordtype">float</span>     lo_reject,</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>                                   <span class="keywordtype">float</span>     hi_reject )</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span> {</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>     Vector          * clean ;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>     pixelvalue      * circle ;</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>     <span class="keywordtype">int</span>             i, j, k, l, m, n ;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>     <span class="keywordtype">int</span>             circsize, nv ;</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span> </div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>     inp=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> </div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>     <span class="keywordflow">if</span> ( cube == NULL || inp < 1 )</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>     {</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra\n"</span>) ;</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     }</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span> </div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>     <span class="keywordflow">if</span> ((centerx+radius>=ilx) ||</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>         (centery+radius>=ily) ||</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>         (centerx-radius<0) ||</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>         (centery-radius<0))</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>     {</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>     }</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> </div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>     n = 0 ;</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>     {</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>         {</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>                   radius*radius )</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>             {</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>                 n ++ ;</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>             }</div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>         }</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     }</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     {</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!\n"</span>) ;</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     }</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>     circsize = n ;</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span> </div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>     <span class="comment">/* allocate a new sinfo_vector to store the average spectral values */</span></div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (inp)) )</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>     {</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new sinfo_vector \n"</span>) ;</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>     }</div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span> </div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span> <span class="comment">     *  plane circle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>     <span class="keywordflow">for</span> ( i = 0 ; i < inp ; i++ )</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>     {</div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>       i_img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>       pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>         m = 0 ;</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>         circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> </div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>         <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>         {</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>             {</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>                      radius*radius )</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>                 {</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>                     circle[m] = pidata[k + j * ilx] ;</div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>                     m ++ ;</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>                 }</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>             }</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>         }</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span> </div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>         nv = 0 ;</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>         {</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>             <span class="keywordflow">if</span> ( isnan(circle[l]) )</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>             {</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>                 continue ;</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>             }</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>             clean -> data[i] += circle[l] ;</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>             nv ++;</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>         }</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>         <span class="keywordflow">if</span> ( nv == 0 )</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>         {</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>             clean->data[i] = 0. ;</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>         }</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>         {</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>             clean->data[i] = sinfo_new_clean_mean(circle, nv, </div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>                                                   lo_reject, hi_reject) ; </div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>         }</div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>         cpl_free (circle) ;</div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>     }</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>     <span class="keywordflow">return</span> clean ;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span> }</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span> </div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span> sinfo_new_shift_array ( <span class="keywordtype">float</span> * input, <span class="keywordtype">int</span> n_elements, </div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>                         <span class="keywordtype">float</span> shift, <span class="keywordtype">double</span> * ker ) </div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span> {</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>     <span class="keywordtype">float</span>  *         shifted ;</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>     <span class="keywordtype">int</span>              samples = KERNEL_SAMPLES ;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>     <span class="keywordtype">int</span>           i ;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>     <span class="keywordtype">float</span>            fx ;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>     <span class="keywordtype">float</span>            rx ;</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>     <span class="keywordtype">int</span>              px ;</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     <span class="keywordtype">int</span>              tabx ;</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>     <span class="keywordtype">float</span>            value ;</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>     <span class="comment">/*size_t           pos ;*/</span></div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>     <span class="keyword">register</span> <span class="keywordtype">float</span> * pix ;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>     <span class="keywordtype">int</span>              mid;</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     <span class="keywordtype">float</span>            norm ;</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> </div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>     <span class="comment">/* error handling: test entries */</span></div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>     <span class="keywordflow">if</span> (input==NULL) </div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>     {</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input array given!\n"</span>) ;</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>     }</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>     <span class="keywordflow">if</span> (n_elements<=0) </div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     {</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of elements in input array given!\n"</span>) ;</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>     }</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span> </div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>     shifted    = (<span class="keywordtype">float</span>*) cpl_calloc(n_elements, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span> </div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>     <span class="comment">/* Shifting by a zero offset returns a copy of the input image */</span></div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>     <span class="keywordflow">if</span> ((fabs(shift)<1e-2))</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>     {</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>         <span class="keywordflow">for</span> (i = 0 ; i <  n_elements ; i++ )</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>         {</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>             shifted[i] = input[i] ;</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>         }</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>         <span class="keywordflow">return</span> shifted ;</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     }</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>     </div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>     mid = (int)samples/(<span class="keywordtype">int</span>)2 ;</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span> </div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>     <span class="keywordflow">for</span> (i=1 ; i<  n_elements-2 ; i++) </div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>     {</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>         fx = (float)i+shift ;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>         px = sinfo_new_nint(fx) ;</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>         rx = fx - (float)px ;</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>         pix = input ;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> </div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>         <span class="keywordflow">if</span> ((px>=1) && (px<(n_elements-2))) </div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>         {</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>             tabx = (int)(fabs((<span class="keywordtype">float</span>)mid * rx)) ;</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>             <span class="comment">/* exclude blank (ZERO) pixels from interpolation */</span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>             <span class="keywordflow">if</span> (isnan(pix[i]))</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>             {</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>                 value = ZERO ;</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>             }</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>             {</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>                 <span class="keywordflow">if</span> (isnan(pix[i-1]))</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>                 {</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>                     pix[i-1] = 0. ;</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>                 }</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>                 <span class="keywordflow">if</span> (isnan(pix[i+1]))</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>                 {</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>                     pix[i+1] = 0. ;</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>                 }</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>                 <span class="keywordflow">if</span> (isnan(pix[i+2]))</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>                 {</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>                     pix[i+2] = 0. ;</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>                 }</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span> </div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> <span class="comment">                 * Sum up over 4 closest pixel values,</span></div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span> <span class="comment">                 * weighted by interpolation kernel values</span></div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>                 value =     pix[i-1] * ker[mid+tabx] +</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>                             pix[i] *   ker[tabx] +</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>                             pix[i+1] * ker[mid-tabx] +</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>                             pix[i+2] * ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>                 <span class="comment">/*</span></div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span> <span class="comment">                 * Also sum up interpolation kernel coefficients</span></div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span> <span class="comment">                 * for further normalization</span></div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>                 norm =      ker[mid+tabx] +</div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>                             ker[tabx] +</div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>                             ker[mid-tabx] +</div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>                             ker[samples-tabx-1] ;</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>                 <span class="keywordflow">if</span> (fabs(norm) > 1e-4) </div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>                 {</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>                     value /= norm ;</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>                 }</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>             }</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>         }   </div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>         {</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>             value = 0.0 ;</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>         }</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>         <span class="keywordflow">if</span> ( isnan(value) )</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>         {</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>             shifted[i] = ZERO ;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>         }</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>         {</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>             shifted[i] = value ;</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>         }</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>     }  </div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>     <span class="keywordflow">return</span> shifted ;</div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span> }</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span> </div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span> </div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span> cpl_image * </div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span> sinfo_new_div_image_by_spectrum( cpl_image * image, cpl_image * spectrum )</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span> {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>     cpl_image * retImage ;</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span> </div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>     <span class="keywordtype">int</span> slx=0;</div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>     <span class="keywordtype">int</span> sly=0;</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span> </div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>     <span class="keywordtype">float</span>* psdata=NULL;</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span> </div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>     <span class="keywordflow">if</span> ( image == NULL )</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>     {</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given!"</span>) ;</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>     }</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span> </div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span> </div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>     <span class="keywordflow">if</span> ( spectrum == NULL )</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>     {</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no spectrum image given!"</span>) ;</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>     }</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>     slx=cpl_image_get_size_x(spectrum);</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>     sly=cpl_image_get_size_y(spectrum);</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span> </div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>     <span class="keywordflow">if</span> ( sly != ily )</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>     {</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"images are not compatible in pixel length!"</span>) ;</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>     }</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>     <span class="keywordflow">if</span> ( NULL == (retImage = cpl_image_duplicate(image)) )</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>     {</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not copy original image!"</span>) ;</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>     }</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>     psdata=cpl_image_get_data_float(spectrum);</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span> </div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>     {</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>         {</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>             <span class="keywordflow">if</span> ( !isnan(pidata[col+row*ilx]) &&</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>                  !isnan(psdata[col+row*ilx]))</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>             {</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>                 podata[col+row*ilx] = pidata[col+row*ilx] / psdata[row] ;</div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>             }</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>          }</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>     }</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span> }</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span> </div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> <span class="comment">   Function     :       sinfo_new_clean_mean_circle_of_cube_spectra()</span></div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span> <span class="comment">   In           :       cube: 1 allocated cube, </span></div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> <span class="comment">                        centerx, centery: center pixel of circular aperture </span></div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> <span class="comment">                                          in image coordinates</span></div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="comment">                        radius: integer radius of circular aperture</span></div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="comment">   Out          :       result spectrum vector</span></div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> <span class="comment">   Job          :       clean averaging routine for a reduced data to get </span></div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span> <span class="comment">                        a better spectral S/N only for a circular aperture.</span></div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span> </div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> Vector * sinfo_new_clean_mean_circle_of_cube_spectra(cpl_imagelist * cube,</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>                                   <span class="keywordtype">int</span>       radius,</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>                                   <span class="keywordtype">float</span>     lo_reject,</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>                                   <span class="keywordtype">float</span>     hi_reject )</div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> {</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>     Vector          * clean ;</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>     pixelvalue      * circle ;</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>     <span class="keywordtype">int</span>             i, j, k, l, m, n ;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>     <span class="keywordtype">int</span>             circsize, nv ;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>     <span class="keywordtype">int</span> lz=0;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>     cpl_image* img=NULL;</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span> </div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>     lz=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span> </div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>     <span class="keywordflow">if</span> ( cube == NULL || lz < 1 )</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>     {</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra"</span>) ;</div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>     }</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>     img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>     lx=cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>     ly=cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span> </div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>     <span class="keywordflow">if</span> ((centerx+radius>=lx) ||</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>         (centery+radius>=ly) ||</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>         (centerx-radius<0) ||</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>         (centery-radius<0))</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>     {</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid circular coordinates"</span>) ;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>     }</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span> </div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>     n = 0 ;</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>     <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>     {</div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>         <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>         {</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>             <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>                  radius*radius )</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>             {</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>                 n ++ ;</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>             }</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>         }</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>     }</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>     <span class="keywordflow">if</span> (n == 0)</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>     {</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no data points found!"</span>) ;</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>     }</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>     circsize = n ;</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span> </div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>     <span class="comment">/* allocate a new vector to store the average spectral values */</span></div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (lz)) )</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>     {</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new vector"</span>) ;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>     }</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span> </div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span> <span class="comment">     *  plane circle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lz ; i++ )</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>     {</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>       img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>       pidata=cpl_image_get_data(img);</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>       m = 0 ;</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>       circle = (pixelvalue *) cpl_calloc (circsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> </div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>       <span class="keywordflow">for</span> ( j = centery - radius ; j <= centery + radius ; j++ )</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>         {</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>             <span class="keywordflow">for</span> ( k = centerx - radius ; k <= centerx + radius ; k++ )</div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>             {</div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>                 <span class="keywordflow">if</span> ( (k-centerx)*(k-centerx)+(j-centery)*(j-centery) <= </div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>                      radius*radius )</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>                 {</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>                      circle[m] = pidata[k + j * lx] ;</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>                     m ++ ;</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>                 }</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>             }</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>         }</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span> </div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>         nv = 0 ;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>         <span class="keywordflow">for</span> ( l = 0 ; l < circsize ; l++ )</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>         {</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>             <span class="keywordflow">if</span> ( isnan(circle[l]) )</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>             {</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>                 continue ;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>             }</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>             clean -> data[i] += circle[l] ;</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>             nv ++;</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>         }</div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>         <span class="keywordflow">if</span> ( nv == 0 )</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>         {</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>             clean->data[i] = 0. ;</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>         }</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>         {</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>             clean->data[i] = sinfo_new_clean_mean(circle, nv, </div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>                                                   lo_reject, hi_reject) ; </div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>         }</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>         cpl_free (circle) ;</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>     }</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>     <span class="keywordflow">return</span> clean ;</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span> }</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span> </div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> </div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> </div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span> <span class="comment">   Function     :       sinfo_new_clean_mean_rectangle_of_cube_spectra()</span></div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span> <span class="comment">   In           :       cube: 1 allocated cube, </span></div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> <span class="comment">                        llx, lly, urx, ury: lower left and upper right</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> <span class="comment">                                            position of rectangle in x-y plane ,</span></div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> <span class="comment">                                            image coordinates 0...</span></div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> <span class="comment">   Out          :       result spectrum vector</span></div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span> <span class="comment">   Job          :       clean averaging routine for a reduced data to get a</span></div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> <span class="comment">                        better spectral S/N only for a rectangular aperture.</span></div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span> </div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span> Vector * sinfo_new_clean_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>                                           <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>                                           <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>                                           <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>                                           <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>                                           <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>                                           <span class="keywordtype">float</span> hi_reject )</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span> {</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>     Vector          * clean ;</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>     pixelvalue      *rectangle ;</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>     <span class="keywordtype">int</span>             i, j, k, m ;</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>     <span class="keywordtype">int</span>             recsize ;</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>     <span class="keywordtype">int</span> lz=0;</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>     <span class="keywordtype">float</span>* pidata=0;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>     cpl_image* img=NULL;</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> </div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>     lz=cpl_imagelist_get_size(cube);</div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> </div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>     <span class="keywordflow">if</span> ( cube == NULL || lz < 1 )</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>     {</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no cube to take the mean of his spectra"</span>) ;</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>     }</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>     img=cpl_imagelist_get(cube,0);</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>     lx=cpl_image_get_size_x(img);</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>     ly=cpl_image_get_size_y(img);</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span> </div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>     <span class="keywordflow">if</span> ((llx<0) || (llx>=lx) ||</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>         (urx<0) || (urx>=lx) ||</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>         (lly<0) || (lly>=ly) ||</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>         (ury<0) || (ury>=ly) ||</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>         (llx>=urx) || (lly>=ury))</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>     {</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" invalid rectangle coordinates:"</span>) ;</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lower left is [%d %d] upper right is [%d %d]"</span>,</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>                  llx, lly, urx, ury) ;</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>     }</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> </div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>     recsize = (urx - llx + 1) * (ury - lly + 1) ;</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> </div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>     <span class="comment">/* allocate a new vector to store the average spectral values */</span></div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>     <span class="keywordflow">if</span> (NULL == (clean = sinfo_new_vector (lz)) )</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>     {</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate a new vector"</span>) ;</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>         <span class="keywordflow">return</span> NullVector ;</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>     }</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span> </div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>     <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> <span class="comment">     *  loop through the cube planes, through the x axis and the y-axis of the</span></div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> <span class="comment">     *  plane rectangle and store pixel values in a buffer.</span></div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lz ; i++ )</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>     {</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>         m = 0 ;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>         rectangle = (pixelvalue *) cpl_calloc (recsize, <span class="keyword">sizeof</span> (pixelvalue*));</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>         img=cpl_imagelist_get(cube,i);</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>         pidata=cpl_image_get_data(img);</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>         <span class="keywordflow">for</span> ( j = lly ; j <= ury ; j++ )</div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>         {</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>             <span class="keywordflow">for</span> ( k = llx ; k <= urx ; k++ )</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>             {</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>                 <span class="keywordflow">if</span> ( isnan(pidata[k+j*lx]) )</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>                 {</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>                     continue ;</div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>                 }</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>                 {</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>                     rectangle[m] = pidata[k + j * lx] ;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>                     m ++ ;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>                 }</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>             }</div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>         }</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>         <span class="keywordflow">if</span> ( m == 0 )</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>         {</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>             clean->data[i] = 0. ;</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>         }</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>         {</div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>             clean->data[i] = sinfo_new_clean_mean(rectangle, m, </div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>                                                   lo_reject, hi_reject) ;</div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>         }</div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>         cpl_free ( rectangle ) ;</div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>     }</div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>     <span class="keywordflow">return</span> clean ;</div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> }</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span> </div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__spectrum__ops_8h_source.html b/html/sinfo__spectrum__ops_8h_source.html
index e3569b5..fabbef1 100644
--- a/html/sinfo__spectrum__ops_8h_source.html
+++ b/html/sinfo__spectrum__ops_8h_source.html
@@ -2,209 +2,240 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_spectrum_ops.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_spectrum_ops.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_SPECTRUM_OPS_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SPECTRUM_OPS_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="comment">/************************************************************************</span>
-<a name="l00023"></a>00023 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00024"></a>00024 <span class="comment">*</span>
-<a name="l00025"></a>00025 <span class="comment">* "@(#) $Id: sinfo_spectrum_ops.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00026"></a>00026 <span class="comment">*</span>
-<a name="l00027"></a>00027 <span class="comment">* who       when      what</span>
-<a name="l00028"></a>00028 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">* schreib  25/05/00  created</span>
-<a name="l00030"></a>00030 <span class="comment">*/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/************************************************************************</span>
-<a name="l00033"></a>00033 <span class="comment"> * sinfo_spectrum_ops.h</span>
-<a name="l00034"></a>00034 <span class="comment"> * spectral sinfo_vector routines</span>
-<a name="l00035"></a>00035 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment"> */</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#define  SPEED_OF_LIGHT 2.99792458e8</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define  PLANCK            6.62606876e-34</span>
-<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define  BOLTZMANN      1.3806503e-23</span>
-<a name="l00041"></a>00041 <span class="preprocessor"></span>
-<a name="l00042"></a>00042 <span class="comment">/*</span>
-<a name="l00043"></a>00043 <span class="comment"> * header files</span>
-<a name="l00044"></a>00044 <span class="comment"> */</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_focus.h"</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00051"></a>00051 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00053"></a>00053 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> 
-<a name="l00063"></a>00063 sinfo_stectrum_ima2table(
-<a name="l00064"></a>00064                  <span class="keyword">const</span> cpl_image* spc,
-<a name="l00065"></a>00065                  <span class="keyword">const</span> <span class="keywordtype">char</span>* filename,
-<a name="l00066"></a>00066                  cpl_table** tbl);
-<a name="l00067"></a>00067 
-<a name="l00081"></a>00081 Vector * 
-<a name="l00082"></a>00082 sinfo_new_cleanmean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00083"></a>00083                                           <span class="keywordtype">int</span> llx,
-<a name="l00084"></a>00084                                           <span class="keywordtype">int</span> lly,
-<a name="l00085"></a>00085                                           <span class="keywordtype">int</span> urx,
-<a name="l00086"></a>00086                                           <span class="keywordtype">int</span> ury,
-<a name="l00087"></a>00087                                           <span class="keywordtype">float</span> lo_reject,
-<a name="l00088"></a>00088                             <span class="keywordtype">float</span> hi_reject );
-<a name="l00100"></a>00100 Vector * 
-<a name="l00101"></a>00101 sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00102"></a>00102                                   <span class="keywordtype">int</span>       centerx,
-<a name="l00103"></a>00103                                   <span class="keywordtype">int</span>       centery,
-<a name="l00104"></a>00104                                   <span class="keywordtype">int</span>       radius,
-<a name="l00105"></a>00105                                   <span class="keywordtype">float</span>     lo_reject,
-<a name="l00106"></a>00106                              <span class="keywordtype">float</span>     hi_reject );
-<a name="l00117"></a>00117 cpl_image * 
-<a name="l00118"></a>00118 sinfo_new_div_image_by_spectrum( cpl_image * image, cpl_image * spectrum ) ;
-<a name="l00119"></a>00119 
-<a name="l00127"></a>00127 <span class="keywordtype">void</span> 
-<a name="l00128"></a>00128 sinfo_free_svector( Vector **svector );
-<a name="l00129"></a>00129 
-<a name="l00137"></a>00137 Vector * 
-<a name="l00138"></a>00138 sinfo_new_vector( ulong32 n_elements ) ;
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 
-<a name="l00148"></a>00148 <span class="keywordtype">void</span> 
-<a name="l00149"></a>00149 sinfo_new_destroy_vector( Vector *sinfo_vector ) ;
-<a name="l00150"></a>00150 
-<a name="l00160"></a>00160 cpl_image * 
-<a name="l00161"></a>00161 sinfo_new_vector_to_image( Vector * spectrum ) ;
-<a name="l00162"></a>00162 
-<a name="l00172"></a>00172 Vector * 
-<a name="l00173"></a>00173 sinfo_new_image_to_vector( cpl_image * spectrum ) ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 
-<a name="l00187"></a>00187 cpl_image * 
-<a name="l00188"></a>00188 sinfo_new_extract_spectrum_from_resampled_flat( cpl_image * resflat,
-<a name="l00189"></a>00189                                              <span class="keywordtype">float</span>      loreject,
-<a name="l00190"></a>00190                                              <span class="keywordtype">float</span>      hireject ) ;
-<a name="l00191"></a>00191 
-<a name="l00202"></a>00202 cpl_image * 
-<a name="l00203"></a>00203 sinfo_new_multiply_image_with_spectrum(cpl_image * image,
-<a name="l00204"></a>00204                                        cpl_image * spectrum ) ;
-<a name="l00205"></a>00205 
-<a name="l00246"></a>00246 cpl_image * 
-<a name="l00247"></a>00247 sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube,
-<a name="l00248"></a>00248                                       <span class="keywordtype">int</span> llx,
-<a name="l00249"></a>00249                                       <span class="keywordtype">int</span> lly,
-<a name="l00250"></a>00250                                       <span class="keywordtype">int</span> halfbox_x,
-<a name="l00251"></a>00251                                       <span class="keywordtype">int</span> halfbox_y,
-<a name="l00252"></a>00252                                       <span class="keywordtype">float</span> fwhm_factor,
-<a name="l00253"></a>00253                                       <span class="keywordtype">float</span> backvariance,
-<a name="l00254"></a>00254                                       <span class="keywordtype">float</span> sky,
-<a name="l00255"></a>00255                                       <span class="keywordtype">float</span> gain,
-<a name="l00256"></a>00256                                       <span class="keywordtype">float</span> exptime,
-<a name="l00257"></a>00257                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00258"></a>00258                                       cpl_table** spectrum,
-<a name="l00259"></a>00259                                       <span class="keywordtype">int</span> qc_info,
-<a name="l00260"></a>00260                                       <span class="keywordtype">int</span>* check2) ;
-<a name="l00261"></a>00261 
-<a name="l00285"></a>00285 Vector * 
-<a name="l00286"></a>00286 sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,
-<a name="l00287"></a>00287                              <span class="keywordtype">float</span>     loReject,
-<a name="l00288"></a>00288                              <span class="keywordtype">float</span>     hiReject,
-<a name="l00289"></a>00289                              <span class="keywordtype">int</span>     * position,
-<a name="l00290"></a>00290                              <span class="keywordtype">int</span>       tolerance,
-<a name="l00291"></a>00291                              <span class="keywordtype">int</span>       posindicator ) ;
-<a name="l00292"></a>00292 
-<a name="l00307"></a>00307 Vector * 
-<a name="l00308"></a>00308 sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00309"></a>00309                                      <span class="keywordtype">int</span> llx,
-<a name="l00310"></a>00310                                      <span class="keywordtype">int</span> lly,
-<a name="l00311"></a>00311                                      <span class="keywordtype">int</span> urx,
-<a name="l00312"></a>00312                                      <span class="keywordtype">int</span> ury ) ;
-<a name="l00313"></a>00313 
-<a name="l00325"></a>00325 Vector * 
-<a name="l00326"></a>00326 sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00327"></a>00327                                   <span class="keywordtype">int</span>       centerx,
-<a name="l00328"></a>00328                                   <span class="keywordtype">int</span>       centery,
-<a name="l00329"></a>00329                                   <span class="keywordtype">int</span>       radius ) ;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 
-<a name="l00345"></a>00345 Vector * 
-<a name="l00346"></a>00346 sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00347"></a>00347                                      <span class="keywordtype">int</span> llx,
-<a name="l00348"></a>00348                                      <span class="keywordtype">int</span> lly,
-<a name="l00349"></a>00349                                      <span class="keywordtype">int</span> urx,
-<a name="l00350"></a>00350                                      <span class="keywordtype">int</span> ury ) ;
-<a name="l00351"></a>00351 
-<a name="l00363"></a>00363 Vector * 
-<a name="l00364"></a>00364 sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00365"></a>00365                                   <span class="keywordtype">int</span>       centerx,
-<a name="l00366"></a>00366                                   <span class="keywordtype">int</span>       centery,
-<a name="l00367"></a>00367                                   <span class="keywordtype">int</span>       radius ) ;
-<a name="l00368"></a>00368 
-<a name="l00379"></a>00379 Vector * 
-<a name="l00380"></a>00380 sinfo_new_blackbody_spectrum( <span class="keywordtype">char</span> * templateSpec, <span class="keywordtype">double</span> temp ) ;
-<a name="l00381"></a>00381 
-<a name="l00395"></a>00395 Vector * 
-<a name="l00396"></a>00396 sinfo_new_median_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00397"></a>00397                                              <span class="keywordtype">int</span> llx,
-<a name="l00398"></a>00398                                              <span class="keywordtype">int</span> lly,
-<a name="l00399"></a>00399                                              <span class="keywordtype">int</span> urx,
-<a name="l00400"></a>00400                                              <span class="keywordtype">int</span> ury ) ;
-<a name="l00401"></a>00401 
-<a name="l00413"></a>00413 Vector * 
-<a name="l00414"></a>00414 sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00415"></a>00415                                   <span class="keywordtype">int</span>       centerx,
-<a name="l00416"></a>00416                                   <span class="keywordtype">int</span>       centery,
-<a name="l00417"></a>00417                                   <span class="keywordtype">int</span>       radius ) ;
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419 
-<a name="l00433"></a>00433 Vector * 
-<a name="l00434"></a>00434 sinfo_new_clean_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00435"></a>00435                                              <span class="keywordtype">int</span> llx,
-<a name="l00436"></a>00436                                              <span class="keywordtype">int</span> lly,
-<a name="l00437"></a>00437                                              <span class="keywordtype">int</span> urx,
-<a name="l00438"></a>00438                                              <span class="keywordtype">int</span> ury,
-<a name="l00439"></a>00439                                              <span class="keywordtype">float</span> lo_reject,
-<a name="l00440"></a>00440                                              <span class="keywordtype">float</span> hi_reject ) ;
-<a name="l00441"></a>00441 
-<a name="l00453"></a>00453 Vector * 
-<a name="l00454"></a>00454 sinfo_new_clean_mean_circle_of_cube_spectra( cpl_imagelist * cube,
-<a name="l00455"></a>00455                                   <span class="keywordtype">int</span>       centerx,
-<a name="l00456"></a>00456                                   <span class="keywordtype">int</span>       centery,
-<a name="l00457"></a>00457                                   <span class="keywordtype">int</span>       radius,
-<a name="l00458"></a>00458                                   <span class="keywordtype">float</span>     lo_reject,
-<a name="l00459"></a>00459                                   <span class="keywordtype">float</span>     hi_reject ) ;
-<a name="l00460"></a>00460 
-<a name="l00472"></a>00472 <span class="keywordtype">float</span> * 
-<a name="l00473"></a>00473 sinfo_new_shift_array(<span class="keywordtype">float</span> * input,<span class="keywordtype">int</span> n_elements,<span class="keywordtype">float</span> shift,<span class="keywordtype">double</span> * ker ) ;
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_spectrum_ops.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_SPECTRUM_OPS_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SPECTRUM_OPS_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* "@(#) $Id: sinfo_spectrum_ops.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">* schreib  25/05/00  created</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * sinfo_spectrum_ops.h</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * spectral sinfo_vector routines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#define  SPEED_OF_LIGHT 2.99792458e8</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="preprocessor">#define  PLANCK            6.62606876e-34</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define  BOLTZMANN      1.3806503e-23</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_focus.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_stectrum_ima2table(</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                  <span class="keyword">const</span> cpl_image* spc,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span>* filename,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                  cpl_table** tbl);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> Vector * </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> sinfo_new_cleanmean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                                           <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                                           <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                                           <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                                           <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                                           <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                             <span class="keywordtype">float</span> hi_reject );</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> Vector * </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> sinfo_new_cleanmean_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                                   <span class="keywordtype">int</span>       radius,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                   <span class="keywordtype">float</span>     lo_reject,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                              <span class="keywordtype">float</span>     hi_reject );</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> cpl_image * </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> sinfo_new_div_image_by_spectrum( cpl_image * image, cpl_image * spectrum ) ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> sinfo_free_svector( Vector **svector );</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> Vector * </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> sinfo_new_vector( ulong32 n_elements ) ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> sinfo_new_destroy_vector( Vector *sinfo_vector ) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> cpl_image * </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> sinfo_new_vector_to_image( Vector * spectrum ) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> Vector * </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> sinfo_new_image_to_vector( cpl_image * spectrum ) ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> cpl_image * </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> sinfo_new_extract_spectrum_from_resampled_flat( cpl_image * resflat,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                                              <span class="keywordtype">float</span>      loreject,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                                              <span class="keywordtype">float</span>      hireject ) ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> cpl_image * </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> sinfo_new_multiply_image_with_spectrum(cpl_image * image,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                        cpl_image * spectrum ) ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> cpl_image * </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                                       <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                       <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                       <span class="keywordtype">int</span> halfbox_x,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                                       <span class="keywordtype">int</span> halfbox_y,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                                       <span class="keywordtype">float</span> fwhm_factor,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                       <span class="keywordtype">float</span> backvariance,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                       <span class="keywordtype">float</span> sky,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                                       <span class="keywordtype">float</span> gain,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                                       <span class="keywordtype">float</span> exptime,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                                       <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                                       cpl_table** spectrum,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                                       <span class="keywordtype">int</span> qc_info,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                                       <span class="keywordtype">int</span>* check2) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> Vector * </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> sinfo_new_extract_sky_from_cube( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                              <span class="keywordtype">float</span>     loReject,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                              <span class="keywordtype">float</span>     hiReject,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                              <span class="keywordtype">int</span>     * position,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                              <span class="keywordtype">int</span>       tolerance,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                              <span class="keywordtype">int</span>       posindicator ) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> Vector * </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> sinfo_new_sum_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                      <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                                      <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                      <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                                      <span class="keywordtype">int</span> ury ) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> Vector * </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> sinfo_new_sum_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                                   <span class="keywordtype">int</span>       radius ) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> Vector * </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> sinfo_new_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                      <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                                      <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                                      <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                                      <span class="keywordtype">int</span> ury ) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> Vector * </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> sinfo_new_mean_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                                   <span class="keywordtype">int</span>       radius ) ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> Vector * </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> sinfo_new_blackbody_spectrum( <span class="keywordtype">char</span> * templateSpec, <span class="keywordtype">double</span> temp ) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> Vector * </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> sinfo_new_median_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                              <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>                                              <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                                              <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                                              <span class="keywordtype">int</span> ury ) ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> Vector * </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> sinfo_new_median_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                   <span class="keywordtype">int</span>       radius ) ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> Vector * </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> sinfo_new_clean_mean_rectangle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                                              <span class="keywordtype">int</span> llx,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>                                              <span class="keywordtype">int</span> lly,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                              <span class="keywordtype">int</span> urx,</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>                                              <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>                                              <span class="keywordtype">float</span> lo_reject,</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                                              <span class="keywordtype">float</span> hi_reject ) ;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> Vector * </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> sinfo_new_clean_mean_circle_of_cube_spectra( cpl_imagelist * cube,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                                   <span class="keywordtype">int</span>       centerx,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                                   <span class="keywordtype">int</span>       centery,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                                   <span class="keywordtype">int</span>       radius,</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                                   <span class="keywordtype">float</span>     lo_reject,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                                   <span class="keywordtype">float</span>     hi_reject ) ;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> <span class="keywordtype">float</span> * </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> sinfo_new_shift_array(<span class="keywordtype">float</span> * input,<span class="keywordtype">int</span> n_elements,<span class="keywordtype">float</span> shift,<span class="keywordtype">double</span> * ker ) ;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__spiffi__types_8h_source.html b/html/sinfo__spiffi__types_8h_source.html
index c8e624a..1be0f6a 100644
--- a/html/sinfo__spiffi__types_8h_source.html
+++ b/html/sinfo__spiffi__types_8h_source.html
@@ -2,167 +2,198 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_spiffi_types.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_spiffi_types.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_SPIFFI_TYPES_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SPIFFI_TYPES_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_spiffi_types.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  25/05/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_spiffi_types.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * all shared local new data types and defines for spiffi data reduction</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sys/types.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <limits.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <string.h></span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_local_types.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">                                   Defines</span>
-<a name="l00051"></a>00051 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="preprocessor">#define NullVector   (Vector *) NULL</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define SLOPE        1000.  </span><span class="comment">/*slope limit of the linear fit*/</span>
-<a name="l00055"></a>00055 <span class="preprocessor">#define SATURATION   50000. </span><span class="comment">/*saturation level of the detector pixel values*/</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define ESTIMATE     200    </span><span class="comment">/*estimation of number of parameters stored in an</span>
-<a name="l00057"></a>00057 <span class="comment">                              ascii file*/</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define THRESH       100000. </span><span class="comment">/* Threshold for operation 1/pixelvalue of </span>
-<a name="l00059"></a>00059 <span class="comment">                                an image division*/</span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="preprocessor">#define PIXEL_WIDTH  0.0185 </span><span class="comment">/* mm */</span>
-<a name="l00064"></a>00064 <span class="preprocessor">#define FOCAL_LENGTH 178.   </span><span class="comment">/* mm */</span>
-<a name="l00065"></a>00065  
-<a name="l00066"></a>00066 <span class="preprocessor">#define N_SLITLETS   32     </span><span class="comment">/* number of slitlets */</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#define SLITLENGTH   64     </span><span class="comment">/* nominal pixel length of one slitlet */</span>
-<a name="l00068"></a>00068 <span class="preprocessor">#define SLIT_LEN_ERR  5     </span><span class="comment">/* error on SLITLENGTH */</span>
-<a name="l00069"></a>00069 <span class="preprocessor">#define SLIT_POS_ERR  5     </span><span class="comment">/* error on SLITLENGTH */</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="preprocessor">#define LOW_REJECT   0.1    </span><span class="comment">/* fraction of rejected extreme low values of fit </span>
-<a name="l00072"></a>00072 <span class="comment">                               coefficients in sinfo_coefsCrossFit() */</span>
-<a name="l00073"></a>00073 <span class="preprocessor">#define HIGH_REJECT  0.9    </span><span class="comment">/* fraction of rejected extreme high values of fit</span>
-<a name="l00074"></a>00074 <span class="comment">                               coefficients in sinfo_coefsCrossFit() */</span>
-<a name="l00075"></a>00075 <span class="preprocessor">#define PIXEL        25     </span><span class="comment">/* number of pixels for offsets in </span>
-<a name="l00076"></a>00076 <span class="comment">                               sinfo_coeffsCrossSlitFit() */</span>
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#define CENTRALLAMBDA_K 2.2 </span><span class="comment">/* defined central wavelengths and pixel </span>
-<a name="l00079"></a>00079 <span class="comment">                               dispersions for each grating for </span>
-<a name="l00080"></a>00080 <span class="comment">                               sinfo_definedResampling() */</span>
-<a name="l00081"></a>00081 <span class="preprocessor">#define CENTRALLAMBDA_H    1.65</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define CENTRALLAMBDA_J    1.25</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define CENTRALLAMBDA_HK   1.95</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_K       0.00049</span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_K_DITH  0.000245</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_H       0.00039</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_H_DITH  0.000195</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_J       0.00029</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_J_DITH  0.000145</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_HK      0.001</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_HK_DITH 0.0005</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span>
-<a name="l00093"></a>00093 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00094"></a>00094 <span class="comment">                                   New types</span>
-<a name="l00095"></a>00095 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00098"></a>00098 <span class="comment">/* The following structure stores a sinfo_vector                           */</span>
-<a name="l00099"></a>00099 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">typedef</span> <span class="keyword">struct </span>_VECTOR_
-<a name="l00102"></a>00102 {
-<a name="l00103"></a>00103     <span class="keywordtype">int</span>           n_elements ;       <span class="comment">/* number of sinfo_vector elements */</span>
-<a name="l00104"></a>00104     pixelvalue    *       data ;         <span class="comment">/* array of sinfo_vector values */</span>
-<a name="l00105"></a>00105 } Vector ;   
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00108"></a>00108 <span class="comment">/* The following structure stores the (gauss) fitting parameters of the     */</span>
-<a name="l00109"></a>00109 <span class="comment">/* emission lines of the calibration lamps                                  */</span>
-<a name="l00110"></a>00110 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">typedef</span> <span class="keyword">struct </span>_FIT_PARAMS_
-<a name="l00113"></a>00113 {
-<a name="l00114"></a>00114     <span class="keywordtype">int</span>      n_params ;        <span class="comment">/* total number of fits to allocate </span>
-<a name="l00115"></a>00115 <span class="comment">                                  FitParams array */</span>
-<a name="l00116"></a>00116     <span class="keywordtype">int</span>      column ;          <span class="comment">/* index of the column in image coordinates */</span>
-<a name="l00117"></a>00117     <span class="keywordtype">int</span>      line   ;          <span class="comment">/* index of fitted emission line </span>
-<a name="l00118"></a>00118 <span class="comment">                                  of the column */</span>            
-<a name="l00119"></a>00119     <span class="keywordtype">float</span>    wavelength ;      <span class="comment">/* associated wavelength of the calibration </span>
-<a name="l00120"></a>00120 <span class="comment">                                  lamp emission line taken from the </span>
-<a name="l00121"></a>00121 <span class="comment">                                  line center list file */</span>
-<a name="l00122"></a>00122     <span class="keywordtype">float</span>  * fit_par ;         <span class="comment">/* fit_par[0]: amplitude,</span>
-<a name="l00123"></a>00123 <span class="comment">                                  fit_par[1]: FWHM,</span>
-<a name="l00124"></a>00124 <span class="comment">                                  fit_par[2]: position of </span>
-<a name="l00125"></a>00125 <span class="comment">                                              center of gauss,</span>
-<a name="l00126"></a>00126 <span class="comment">                                  fit_par[3]: zero level offset */</span>
-<a name="l00127"></a>00127     <span class="keywordtype">float</span>  * derv_par ;        <span class="comment">/* corresponding derivatives of fit_par[] */</span>
-<a name="l00128"></a>00128 } FitParams ;   
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="keyword">typedef</span> <span class="keyword">struct </span>_STATS_
-<a name="l00131"></a>00131 {
-<a name="l00132"></a>00132     <span class="keywordtype">float</span> cleanmean ;          <span class="comment">/* mean of pixel values without considering </span>
-<a name="l00133"></a>00133 <span class="comment">                                  the extreme values */</span>
-<a name="l00134"></a>00134     <span class="keywordtype">float</span> cleanstdev ;         <span class="comment">/* standard deviation of pixel values without </span>
-<a name="l00135"></a>00135 <span class="comment">                                  considering the extreme values */</span>
-<a name="l00136"></a>00136     <span class="keywordtype">int</span>   npix ;               <span class="comment">/* number of clean pixel values */</span>
-<a name="l00137"></a>00137 } Stats ;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 <span class="keyword">typedef</span> <span class="keyword">struct </span>_BCOEFFS_
-<a name="l00140"></a>00140 {
-<a name="l00141"></a>00141     <span class="keywordtype">int</span> slitlet ;              <span class="comment">/* current slitlet */</span>
-<a name="l00142"></a>00142     <span class="keywordtype">int</span> n_slitlets ;           <span class="comment">/* number of slitlets */</span>
-<a name="l00143"></a>00143     <span class="keywordtype">int</span> n_acoeffs ;            <span class="comment">/* number of a fit coefficients */</span>
-<a name="l00144"></a>00144     <span class="keywordtype">int</span> n_bcoeffs ;            <span class="comment">/* number of b fit coefficients */</span>
-<a name="l00145"></a>00145     <span class="keywordtype">float</span> ** b ;               <span class="comment">/* sinfo_matrix of fit coefficients: </span>
-<a name="l00146"></a>00146 <span class="comment">                                  b[index acoefs][index bcoefs] */</span>
-<a name="l00147"></a>00147 } Bcoeffs ;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="preprocessor">#endif </span>
-<a name="l00151"></a>00151 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_spiffi_types.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_SPIFFI_TYPES_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SPIFFI_TYPES_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_spiffi_types.h,v 1.3 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  25/05/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_spiffi_types.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * all shared local new data types and defines for spiffi data reduction</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <limits.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_local_types.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#define NullVector   (Vector *) NULL</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define SLOPE        1000.  </span><span class="comment">/*slope limit of the linear fit*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define SATURATION   50000. </span><span class="comment">/*saturation level of the detector pixel values*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define ESTIMATE     200    </span><span class="comment">/*estimation of number of parameters stored in an</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                              ascii file*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define THRESH       100000. </span><span class="comment">/* Threshold for operation 1/pixelvalue of </span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                                an image division*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#define PIXEL_WIDTH  0.0185 </span><span class="comment">/* mm */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define FOCAL_LENGTH 178.   </span><span class="comment">/* mm */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#define N_SLITLETS   32     </span><span class="comment">/* number of slitlets */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define SLITLENGTH   64     </span><span class="comment">/* nominal pixel length of one slitlet */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span><span class="preprocessor">#define SLIT_LEN_ERR  5     </span><span class="comment">/* error on SLITLENGTH */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define SLIT_POS_ERR  5     </span><span class="comment">/* error on SLITLENGTH */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#define LOW_REJECT   0.1    </span><span class="comment">/* fraction of rejected extreme low values of fit </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                               coefficients in sinfo_coefsCrossFit() */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="preprocessor">#define HIGH_REJECT  0.9    </span><span class="comment">/* fraction of rejected extreme high values of fit</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                               coefficients in sinfo_coefsCrossFit() */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor"></span><span class="preprocessor">#define PIXEL        25     </span><span class="comment">/* number of pixels for offsets in </span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">                               sinfo_coeffsCrossSlitFit() */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#define CENTRALLAMBDA_K 2.2 </span><span class="comment">/* defined central wavelengths and pixel </span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                               dispersions for each grating for </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                               sinfo_definedResampling() */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define CENTRALLAMBDA_H    1.65</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define CENTRALLAMBDA_J    1.25</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define CENTRALLAMBDA_HK   1.95</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_K       0.00049</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_K_DITH  0.000245</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_H       0.00039</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_H_DITH  0.000195</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_J       0.00029</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_J_DITH  0.000145</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_HK      0.001</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define DISPERSION_HK_DITH 0.0005</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">/* The following structure stores a sinfo_vector                           */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_VECTOR_</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">int</span>           n_elements ;       <span class="comment">/* number of sinfo_vector elements */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     pixelvalue    *       data ;         <span class="comment">/* array of sinfo_vector values */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> } Vector ;   </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/* The following structure stores the (gauss) fitting parameters of the     */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/* emission lines of the calibration lamps                                  */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_FIT_PARAMS_</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">int</span>      n_params ;        <span class="comment">/* total number of fits to allocate </span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">                                  FitParams array */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">int</span>      column ;          <span class="comment">/* index of the column in image coordinates */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">int</span>      line   ;          <span class="comment">/* index of fitted emission line </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">                                  of the column */</span>            </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">float</span>    wavelength ;      <span class="comment">/* associated wavelength of the calibration </span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">                                  lamp emission line taken from the </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">                                  line center list file */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">float</span>  * fit_par ;         <span class="comment">/* fit_par[0]: amplitude,</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">                                  fit_par[1]: FWHM,</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">                                  fit_par[2]: position of </span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">                                              center of gauss,</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">                                  fit_par[3]: zero level offset */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordtype">float</span>  * derv_par ;        <span class="comment">/* corresponding derivatives of fit_par[] */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> } FitParams ;   </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_STATS_</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">float</span> cleanmean ;          <span class="comment">/* mean of pixel values without considering </span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">                                  the extreme values */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordtype">float</span> cleanstdev ;         <span class="comment">/* standard deviation of pixel values without </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">                                  considering the extreme values */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordtype">int</span>   npix ;               <span class="comment">/* number of clean pixel values */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> } Stats ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_BCOEFFS_</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordtype">int</span> slitlet ;              <span class="comment">/* current slitlet */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordtype">int</span> n_slitlets ;           <span class="comment">/* number of slitlets */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordtype">int</span> n_acoeffs ;            <span class="comment">/* number of a fit coefficients */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">int</span> n_bcoeffs ;            <span class="comment">/* number of b fit coefficients */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordtype">float</span> ** b ;               <span class="comment">/* sinfo_matrix of fit coefficients: </span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">                                  b[index acoefs][index bcoefs] */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> } Bcoeffs ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stack__cfg_8c_source.html b/html/sinfo__stack__cfg_8c_source.html
index 0ec1515..7f7b0ba 100644
--- a/html/sinfo__stack__cfg_8c_source.html
+++ b/html/sinfo__stack__cfg_8c_source.html
@@ -2,74 +2,105 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stack_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stack_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    stack_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author         : Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    prepare stacked frames configuration handling tools</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_stack_cfg.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                              Function codes</span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00056"></a>00056 stack_config_n * sinfo_stack_cfg_create_n(<span class="keywordtype">void</span>)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(stack_config_n));
-<a name="l00059"></a>00059 }
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00069"></a>00069 <span class="keywordtype">void</span> sinfo_stack_cfg_destroy_n(stack_config_n * sc)
-<a name="l00070"></a>00070 {
-<a name="l00071"></a>00071     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073     <span class="comment">/* Free list of frame types */</span>
-<a name="l00074"></a>00074     <span class="comment">/*cpl_free(sc->frametype);*/</span>
-<a name="l00075"></a>00075     <span class="comment">/* Free positions */</span>
-<a name="l00076"></a>00076     <span class="comment">/*cpl_free(sc->frameposition);*/</span>
-<a name="l00077"></a>00077     <span class="comment">/* Free main struct */</span>
-<a name="l00078"></a>00078     cpl_free(sc);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     return ;
-<a name="l00081"></a>00081 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stack_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    stack_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author         : Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    prepare stacked frames configuration handling tools</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_stack_cfg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> stack_config_n * sinfo_stack_cfg_create_n(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(stack_config_n));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">void</span> sinfo_stack_cfg_destroy_n(stack_config_n * sc)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="comment">/* Free list of frame types */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="comment">/*cpl_free(sc->frametype);*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="comment">/* Free positions */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="comment">/*cpl_free(sc->frameposition);*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     return ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stack__cfg_8h_source.html b/html/sinfo__stack__cfg_8h_source.html
index b809afc..3bbef5f 100644
--- a/html/sinfo__stack__cfg_8h_source.html
+++ b/html/sinfo__stack__cfg_8h_source.html
@@ -2,178 +2,209 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stack_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stack_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    stack_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    stack_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_STACK_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  prepare stacked images blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the stacked images handling</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>stack_config_n {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span>
-<a name="l00052"></a>00052 <span class="comment">                                       the list of all input frames */</span>
-<a name="l00053"></a>00053         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00054"></a>00054 <span class="comment">                                        wavelength map */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span>
-<a name="l00056"></a>00056 <span class="comment">                                         sky frame */</span>
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>  * frametype ; <span class="comment">/* list of frame types on or off */</span>
-<a name="l00059"></a>00059         <span class="keywordtype">int</span>  * frameposition ; <span class="comment">/* list of grating positions */</span>  
-<a name="l00060"></a>00060         <span class="keywordtype">int</span>    contains_sky ; <span class="comment">/* indicates if off or sky frames were exposed */</span>
-<a name="l00061"></a>00061         <span class="keywordtype">int</span>    contains_ref ; <span class="comment">/* indicates if ref frames were exposed */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">int</span>    contains_dither ; <span class="comment">/* indicates if spectral dithering </span>
-<a name="l00063"></a>00063 <span class="comment">                                    was applied */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">int</span>    contains_dark ; <span class="comment">/* indicates if spectral </span>
-<a name="l00065"></a>00065 <span class="comment">                                  dithering was applied */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">int</span>    nframes ; <span class="comment">/* number of frames in frame list */</span>
-<a name="l00067"></a>00067         <span class="keywordtype">int</span>    nobj ;  <span class="comment">/* number of object frames in frame list */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">int</span>    noff ;  <span class="comment">/* number of off frames in frame list */</span>
-<a name="l00069"></a>00069         <span class="keywordtype">int</span>    ndark ;  <span class="comment">/* number of sinfo_dark frames in frame list */</span>
-<a name="l00070"></a>00070         <span class="keywordtype">int</span>    nditherobj ;  <span class="comment">/* number of dithered object </span>
-<a name="l00071"></a>00071 <span class="comment">                                frames in frame list */</span>
-<a name="l00072"></a>00072         <span class="keywordtype">int</span>    nditheroff ;  <span class="comment">/* number of dithered off frames in frame list */</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/*------ CleanMean ------*/</span>
-<a name="l00075"></a>00075         <span class="comment">/* percentage of rejected low intensity pixels */</span>
-<a name="l00076"></a>00076         <span class="keywordtype">float</span> loReject ;      
-<a name="l00077"></a>00077         <span class="comment">/* percentage of rejected high intensity pixels */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">float</span> hiReject ;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="comment">/*------ Flatfielding ------*/</span>
-<a name="l00081"></a>00081         <span class="comment">/* indicator if a flatfielding is carried through or not */</span>
-<a name="l00082"></a>00082         <span class="keywordtype">int</span> flatInd ;
-<a name="l00083"></a>00083         <span class="keywordtype">char</span> flatfield1[FILE_NAME_SZ] ; <span class="comment">/* name of the flatfield fits file </span>
-<a name="l00084"></a>00084 <span class="comment">                                           for grating position 1 */</span>
-<a name="l00085"></a>00085         <span class="keywordtype">char</span> flatfield2[FILE_NAME_SZ] ; <span class="comment">/* name of the flatfield fits file </span>
-<a name="l00086"></a>00086 <span class="comment">                                           for grating position 2 */</span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="comment">/*------ BadPixel ------*/</span>
-<a name="l00089"></a>00089         <span class="comment">/* indicates if the bad pixel mask should be applied or not */</span>
-<a name="l00090"></a>00090         <span class="keywordtype">int</span> maskInd ;
-<a name="l00091"></a>00091         <span class="comment">/* indicates if the pixels should be interpolated or indicated */</span>
-<a name="l00092"></a>00092         <span class="keywordtype">int</span> indind ;
-<a name="l00093"></a>00093         <span class="comment">/* file name of the bad pixel mask fits file */</span>
-<a name="l00094"></a>00094         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;
-<a name="l00095"></a>00095         <span class="comment">/* maximal pixel distance from the bad pixel to which valid </span>
-<a name="l00096"></a>00096 <span class="comment">           pixels are searched for*/</span> 
-<a name="l00097"></a>00097         <span class="keywordtype">int</span> maxRad ;
-<a name="l00098"></a>00098         <span class="comment">/* file name of the slitlet sinfo_edge position list */</span>
-<a name="l00099"></a>00099         <span class="keywordtype">char</span> slitposList[FILE_NAME_SZ] ;
-<a name="l00100"></a>00100         <span class="comment">/* index file list*/</span>
-<a name="l00101"></a>00101         <span class="keywordtype">char</span> indexlist[FILE_NAME_SZ] ;
-<a name="l00102"></a>00102         <span class="comment">/* sigma factor for the additional bad pixel search </span>
-<a name="l00103"></a>00103 <span class="comment">           in method maskInd = 2 */</span>
-<a name="l00104"></a>00104         <span class="keywordtype">float</span> sigmaFactor ;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="comment">/*------ ColTilt ------*/</span>
-<a name="l00107"></a>00107         <span class="comment">/* indicator if the tilt correction should be carried through */</span>
-<a name="l00108"></a>00108         <span class="comment">/*int coltiltInd ;*/</span>
-<a name="l00109"></a>00109         <span class="comment">/* file name of the ASCII file containing the slope value */</span>
-<a name="l00110"></a>00110         <span class="comment">/*char slopeFile[FILE_NAME_SZ] ;*/</span>
-<a name="l00111"></a>00111         <span class="comment">/* order of polynomial used for polynomial interpolation </span>
-<a name="l00112"></a>00112 <span class="comment">           for the row shifting */</span>
-<a name="l00113"></a>00113         <span class="comment">/*int order ;*/</span>
-<a name="l00114"></a>00114 <span class="comment">/*------ WarpFix ------*/</span>
-<a name="l00115"></a>00115         <span class="comment">/* indicator if the warping should be carried through */</span>
-<a name="l00116"></a>00116         <span class="keywordtype">int</span> warpfixInd ;
-<a name="l00117"></a>00117         <span class="comment">/* file name of the ASCII file containing the polynomial values */</span>
-<a name="l00118"></a>00118         <span class="keywordtype">char</span> polyFile[FILE_NAME_SZ] ;
-<a name="l00119"></a>00119         <span class="comment">/* file name of MASTER DARK */</span>
-<a name="l00120"></a>00120         <span class="keywordtype">char</span> mdark[FILE_NAME_SZ] ;
-<a name="l00121"></a>00121   <span class="comment">/* swich to indicate if a mdark file has been found */</span>
-<a name="l00122"></a>00122         <span class="keywordtype">int</span> mdark_ind;  
-<a name="l00123"></a>00123       <span class="comment">/* kernel to be used for the interpolation */</span>
-<a name="l00124"></a>00124         <span class="keywordtype">char</span> kernel[FILE_NAME_SZ] ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*------ Interleaving ------*/</span>
-<a name="l00127"></a>00127         <span class="comment">/* indicator if the interleaving or Convolution with a </span>
-<a name="l00128"></a>00128 <span class="comment">           Gaussian or nothing should take place */</span>
-<a name="l00129"></a>00129         <span class="keywordtype">int</span> interInd ;
-<a name="l00130"></a>00130     <span class="comment">/* number of rows from which the general offset between </span>
-<a name="l00131"></a>00131 <span class="comment">           the frames is determined */</span>
-<a name="l00132"></a>00132     <span class="keywordtype">int</span> noRows ;
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="comment">/*------ GaussConvolution ------*/</span>
-<a name="l00135"></a>00135     <span class="comment">/* indicator if Gaussian convolution is applied or not */</span>
-<a name="l00136"></a>00136         <span class="keywordtype">int</span> gaussInd ;
-<a name="l00137"></a>00137     <span class="comment">/* kernel half width of the Gaussian response function */</span>
-<a name="l00138"></a>00138     <span class="keywordtype">int</span> hw ;
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="comment">/*------ ShifFrames ------*/</span>
-<a name="l00141"></a>00141     <span class="comment">/* indicator if shiftting frames is applied or not */</span>
-<a name="l00142"></a>00142         <span class="keywordtype">int</span> sfInd;
-<a name="l00143"></a>00143     <span class="comment">/* interpolation type*/</span>
-<a name="l00144"></a>00144     <span class="keywordtype">int</span> sfType;
-<a name="l00145"></a>00145     <span class="comment">/* interpolation order*/</span>
-<a name="l00146"></a>00146     <span class="keywordtype">int</span> sfOrder;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148   <span class="comment">/* qc log */</span>
-<a name="l00149"></a>00149   <span class="keywordtype">int</span> qc_thresh_min;
-<a name="l00150"></a>00150   <span class="keywordtype">int</span> qc_thresh_max;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 } stack_config_n ;
-<a name="l00153"></a>00153 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00154"></a>00154 <span class="comment">                               Function prototypes</span>
-<a name="l00155"></a>00155 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00163"></a>00163 stack_config_n * 
-<a name="l00164"></a>00164 sinfo_stack_cfg_create_n(<span class="keywordtype">void</span>);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 
-<a name="l00173"></a>00173 <span class="keywordtype">void</span> 
-<a name="l00174"></a>00174 sinfo_stack_cfg_destroy_n(stack_config_n * sc);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stack_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    stack_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    stack_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_STACK_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  prepare stacked images blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the stacked images handling</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>stack_config_n {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ; <span class="comment">/* file name of the file containing </span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">                                       the list of all input frames */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                        wavelength map */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">char</span> sky_name[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                                         sky frame */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>  * frametype ; <span class="comment">/* list of frame types on or off */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">int</span>  * frameposition ; <span class="comment">/* list of grating positions */</span>  </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">int</span>    contains_sky ; <span class="comment">/* indicates if off or sky frames were exposed */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">int</span>    contains_ref ; <span class="comment">/* indicates if ref frames were exposed */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">int</span>    contains_dither ; <span class="comment">/* indicates if spectral dithering </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                                    was applied */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">int</span>    contains_dark ; <span class="comment">/* indicates if spectral </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                                  dithering was applied */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">int</span>    nframes ; <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">int</span>    nobj ;  <span class="comment">/* number of object frames in frame list */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">int</span>    noff ;  <span class="comment">/* number of off frames in frame list */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">int</span>    ndark ;  <span class="comment">/* number of sinfo_dark frames in frame list */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">int</span>    nditherobj ;  <span class="comment">/* number of dithered object </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                                frames in frame list */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">int</span>    nditheroff ;  <span class="comment">/* number of dithered off frames in frame list */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*------ CleanMean ------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="comment">/* percentage of rejected low intensity pixels */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">float</span> loReject ;      </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/* percentage of rejected high intensity pixels */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*------ Flatfielding ------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* indicator if a flatfielding is carried through or not */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="keywordtype">int</span> flatInd ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="keywordtype">char</span> flatfield1[FILE_NAME_SZ] ; <span class="comment">/* name of the flatfield fits file </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">                                           for grating position 1 */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">char</span> flatfield2[FILE_NAME_SZ] ; <span class="comment">/* name of the flatfield fits file </span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                                           for grating position 2 */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*------ BadPixel ------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <span class="comment">/* indicates if the bad pixel mask should be applied or not */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">int</span> maskInd ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="comment">/* indicates if the pixels should be interpolated or indicated */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         <span class="keywordtype">int</span> indind ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="comment">/* file name of the bad pixel mask fits file */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="comment">/* maximal pixel distance from the bad pixel to which valid </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">           pixels are searched for*/</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">int</span> maxRad ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="comment">/* file name of the slitlet sinfo_edge position list */</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordtype">char</span> slitposList[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="comment">/* index file list*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="keywordtype">char</span> indexlist[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="comment">/* sigma factor for the additional bad pixel search </span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">           in method maskInd = 2 */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keywordtype">float</span> sigmaFactor ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">/*------ ColTilt ------*/</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         <span class="comment">/* indicator if the tilt correction should be carried through */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         <span class="comment">/*int coltiltInd ;*/</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         <span class="comment">/* file name of the ASCII file containing the slope value */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         <span class="comment">/*char slopeFile[FILE_NAME_SZ] ;*/</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         <span class="comment">/* order of polynomial used for polynomial interpolation </span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">           for the row shifting */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         <span class="comment">/*int order ;*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*------ WarpFix ------*/</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         <span class="comment">/* indicator if the warping should be carried through */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         <span class="keywordtype">int</span> warpfixInd ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         <span class="comment">/* file name of the ASCII file containing the polynomial values */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         <span class="keywordtype">char</span> polyFile[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         <span class="comment">/* file name of MASTER DARK */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         <span class="keywordtype">char</span> mdark[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="comment">/* swich to indicate if a mdark file has been found */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <span class="keywordtype">int</span> mdark_ind;  </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>       <span class="comment">/* kernel to be used for the interpolation */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         <span class="keywordtype">char</span> kernel[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*------ Interleaving ------*/</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         <span class="comment">/* indicator if the interleaving or Convolution with a </span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">           Gaussian or nothing should take place */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         <span class="keywordtype">int</span> interInd ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="comment">/* number of rows from which the general offset between </span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">           the frames is determined */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">int</span> noRows ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*------ GaussConvolution ------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* indicator if Gaussian convolution is applied or not */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keywordtype">int</span> gaussInd ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="comment">/* kernel half width of the Gaussian response function */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordtype">int</span> hw ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*------ ShifFrames ------*/</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="comment">/* indicator if shiftting frames is applied or not */</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         <span class="keywordtype">int</span> sfInd;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="comment">/* interpolation type*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordtype">int</span> sfType;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="comment">/* interpolation order*/</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="keywordtype">int</span> sfOrder;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   <span class="comment">/* qc log */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   <span class="keywordtype">int</span> qc_thresh_min;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordtype">int</span> qc_thresh_max;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> } stack_config_n ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> stack_config_n * </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> sinfo_stack_cfg_create_n(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> sinfo_stack_cfg_destroy_n(stack_config_n * sc);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stack__ini_8h_source.html b/html/sinfo__stack__ini_8h_source.html
index ef35213..89090ed 100644
--- a/html/sinfo__stack__ini_8h_source.html
+++ b/html/sinfo__stack__ini_8h_source.html
@@ -2,86 +2,117 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stack_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stack_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_stack_ini.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :    Sept 25, 2001</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :    preparing stack of frames ini file handling for SPIFFI</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_STACK_INI_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_INI_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Includes</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_stack_cfg.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042  
-<a name="l00043"></a>00043 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                                Defines</span>
-<a name="l00045"></a>00045 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="preprocessor">#define FRAME_ON     1  </span><span class="comment">/* object frames */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#define FRAME_OFF    0  </span><span class="comment">/* off frames, that means sky frames or calibration </span>
-<a name="l00049"></a>00049 <span class="comment">                           frames with lamp switched off */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define FRAME_POS1   2  </span><span class="comment">/* frames exposed with grating position 1 */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#define FRAME_POS2   3  </span><span class="comment">/* frames exposed with dithered grating position 2 */</span>
-<a name="l00052"></a>00052  
-<a name="l00053"></a>00053 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                             Function prototypes </span>
-<a name="l00055"></a>00055 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 <span class="keywordtype">int</span> generateStack_ini_file(
-<a name="l00075"></a>00075         <span class="keywordtype">char</span> * ini_name,
-<a name="l00076"></a>00076         <span class="keywordtype">char</span> * name_i,
-<a name="l00077"></a>00077         <span class="keywordtype">char</span> * name_o
-<a name="l00078"></a>00078 );
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 stack_config * parse_stack_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stack_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_stack_ini.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :    Sept 25, 2001</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :    preparing stack of frames ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_STACK_INI_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_INI_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_stack_cfg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#define FRAME_ON     1  </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF    0  </span><span class="comment">/* off frames, that means sky frames or calibration </span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                           frames with lamp switched off */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS1   2  </span><span class="comment">/* frames exposed with grating position 1 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS2   3  </span><span class="comment">/* frames exposed with dithered grating position 2 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> generateStack_ini_file(</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> );</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> stack_config * parse_stack_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stack__ini__by__cpl_8c_source.html b/html/sinfo__stack__ini__by__cpl_8c_source.html
index 443da42..5e11966 100644
--- a/html/sinfo__stack__ini__by__cpl_8c_source.html
+++ b/html/sinfo__stack__ini__by__cpl_8c_source.html
@@ -2,643 +2,674 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stack_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stack_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   stack_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 23, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   prepare stacked frames cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_stack_ini_by_cpl.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_ref_types.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                    Functions private to this module</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_stack_free_alloc(stack_config_n * cfg);  
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00053"></a>00053 parse_section_frames(stack_config_n *, 
-<a name="l00054"></a>00054                      cpl_frameset* sof, 
-<a name="l00055"></a>00055                      cpl_frameset** raw,
-<a name="l00056"></a>00056                      <span class="keywordtype">int</span>* status,
-<a name="l00057"></a>00057                      fake* fk);
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00060"></a>00060 parse_section_cleanmean(stack_config_n *, cpl_parameterlist* cpl_cfg);
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00062"></a>00062 parse_section_flatfield(stack_config_n *, cpl_parameterlist* cpl_cfg);
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00064"></a>00064 parse_section_badpixel(stack_config_n *, cpl_parameterlist* cpl_cfg);
-<a name="l00065"></a>00065 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00066"></a>00066 parse_section_interleaving(stack_config_n *);
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00068"></a>00068 parse_section_gaussconvolution(stack_config_n *, cpl_parameterlist* cpl_cfg);
-<a name="l00069"></a>00069 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00070"></a>00070 parse_section_shiftframes(stack_config_n *);
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00072"></a>00072 parse_section_warpfix(stack_config_n *,  cpl_parameterlist* cpl_cfg);
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00074"></a>00074 parse_section_qclog(stack_config_n *,  cpl_parameterlist* cpl_cfg);
-<a name="l00082"></a>00082 <span class="comment">/* generateStack_ini_file */</span>
-<a name="l00083"></a>00083 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00094"></a>00094 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 stack_config_n * sinfo_parse_cpl_input_stack(cpl_parameterlist* cpl_cfg, 
-<a name="l00097"></a>00097                                        cpl_frameset* sof, 
-<a name="l00098"></a>00098                                        cpl_frameset** raw,
-<a name="l00099"></a>00099                                        fake* fk)
-<a name="l00100"></a>00100 {
-<a name="l00101"></a>00101     stack_config_n   *       cfg =sinfo_stack_cfg_create_n();
-<a name="l00102"></a>00102     <span class="keywordtype">int</span> status=0;
-<a name="l00103"></a>00103    
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="comment">/*</span>
-<a name="l00107"></a>00107 <span class="comment">     * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00108"></a>00108 <span class="comment">     * found in the ini file</span>
-<a name="l00109"></a>00109 <span class="comment">     */</span>
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     parse_section_cleanmean        (cfg, cpl_cfg);
-<a name="l00112"></a>00112     parse_section_flatfield        (cfg, cpl_cfg);
-<a name="l00113"></a>00113     parse_section_badpixel         (cfg, cpl_cfg); 
-<a name="l00114"></a>00114     parse_section_interleaving     (cfg); 
-<a name="l00115"></a>00115     parse_section_gaussconvolution (cfg, cpl_cfg); 
-<a name="l00116"></a>00116     parse_section_shiftframes      (cfg); 
-<a name="l00117"></a>00117     parse_section_warpfix          (cfg, cpl_cfg);
-<a name="l00118"></a>00118     parse_section_qclog            (cfg, cpl_cfg);
-<a name="l00119"></a>00119     parse_section_frames           (cfg, sof, raw, &status, fk);
-<a name="l00120"></a>00120           <span class="keywordflow">if</span> (status > 0) {
-<a name="l00121"></a>00121                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00122"></a>00122                 sinfo_stack_cfg_destroy_n(cfg);
-<a name="l00123"></a>00123                 cfg = NULL ;
-<a name="l00124"></a>00124                 <span class="keywordflow">return</span> NULL ;
-<a name="l00125"></a>00125         }
-<a name="l00126"></a>00126     <span class="keywordflow">return</span> cfg ;
-<a name="l00127"></a>00127 }
-<a name="l00137"></a>00137 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00138"></a>00138 parse_section_frames(stack_config_n * cfg, 
-<a name="l00139"></a>00139                      cpl_frameset* sof, cpl_frameset** raw_set,<span class="keywordtype">int</span>* status, 
-<a name="l00140"></a>00140                      fake* fk)
-<a name="l00141"></a>00141 {
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143    <span class="keywordtype">int</span>                     i;
-<a name="l00144"></a>00144    <span class="keyword">const</span> <span class="keywordtype">char</span>            *       name;
-<a name="l00145"></a>00145    <span class="keywordtype">char</span>                        file[FILE_NAME_SZ];
-<a name="l00146"></a>00146    <span class="keywordtype">int</span>                     nobj, noff, ndark ;
-<a name="l00147"></a>00147    <span class="keywordtype">int</span>                     nditherobj, nditheroff ;
-<a name="l00148"></a>00148    <span class="keywordtype">int</span>                     found_sky ;
-<a name="l00149"></a>00149    <span class="keywordtype">int</span>                     found_ref ;
-<a name="l00150"></a>00150    <span class="keywordtype">int</span>                     found_dither ;
-<a name="l00151"></a>00151    <span class="keywordtype">int</span>                     found_dark   ;
-<a name="l00152"></a>00152     <span class="keywordtype">int</span> nraw=0;
-<a name="l00153"></a>00153     <span class="keywordtype">int</span> nsof=0;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155    cpl_frame* frame   = NULL;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00158"></a>00158    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00159"></a>00159    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00160"></a>00160    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00161"></a>00161    <span class="keywordtype">char</span>* tag=NULL;
-<a name="l00162"></a>00162    <span class="keywordtype">char</span>* do_class=NULL;
-<a name="l00163"></a>00163   
-<a name="l00164"></a>00164    nsof    = cpl_frameset_get_size(sof);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167    do_class=fk->pro_class;
-<a name="l00168"></a>00168    <span class="comment">/* sinfo_msg("do_class=%s",do_class); */</span> 
-<a name="l00169"></a>00169    <span class="keywordflow">if</span>(strcmp(do_class,<span class="stringliteral">"DEFAULT"</span>) == 0) {
-<a name="l00170"></a>00170       sinfo_extract_raw_stack_frames(sof,raw_set);
-<a name="l00171"></a>00171    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,PRO_FIBRE_NS_STACKED_DIST) == 0) {
-<a name="l00172"></a>00172       sinfo_is_fibres_on_off(sof,*raw_set);
-<a name="l00173"></a>00173    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,PRO_FIBRE_NS_STACKED) == 0) {
-<a name="l00174"></a>00174       sinfo_contains_frames_kind(sof,*raw_set,(<span class="keywordtype">char</span>*)PRO_FIBRE_NS_STACKED);
-<a name="l00175"></a>00175    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,RAW_STACKED_SLITPOS) == 0) {
-<a name="l00176"></a>00176       sinfo_extract_raw_stack_frames(sof,raw_set);
-<a name="l00177"></a>00177    } <span class="keywordflow">else</span> {
-<a name="l00178"></a>00178       sinfo_extract_raw_frames_type(sof,raw_set,do_class);
-<a name="l00179"></a>00179    }
-<a name="l00180"></a>00180    nraw    = cpl_frameset_get_size(*raw_set);
-<a name="l00181"></a>00181    <span class="keywordflow">if</span> (nraw < 1) {
-<a name="l00182"></a>00182       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few raw frames present in frameset!"</span>);
-<a name="l00183"></a>00183       (*status)++;
-<a name="l00184"></a>00184       <span class="keywordflow">return</span>;
-<a name="l00185"></a>00185    }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187  
-<a name="l00188"></a>00188    <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00189"></a>00189    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00190"></a>00190    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00191"></a>00191    cfg->frameposition = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193    <span class="keywordflow">for</span> (i=0;i<nraw;i++) {
-<a name="l00194"></a>00194      cfg->framelist[i]=NULL;
-<a name="l00195"></a>00195      cfg->frametype[i]=-1;
-<a name="l00196"></a>00196      cfg->frameposition[i]=-1;
-<a name="l00197"></a>00197    }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199    found_sky     = 0 ;
-<a name="l00200"></a>00200    found_ref     = 0 ;
-<a name="l00201"></a>00201    found_dither  = 0 ;
-<a name="l00202"></a>00202    found_dark    = 0 ;
-<a name="l00203"></a>00203    nobj          = 0 ;
-<a name="l00204"></a>00204    noff          = 0 ;
-<a name="l00205"></a>00205    ndark         = 0 ;
-<a name="l00206"></a>00206    nditherobj    = 0 ;
-<a name="l00207"></a>00207    nditheroff    = 0 ;
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211    <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00212"></a>00212    <span class="comment">/*   for (i=0 ; i<nraw ; i++) { */</span>
-<a name="l00213"></a>00213    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {
-<a name="l00214"></a>00214       frame = cpl_frameset_get_frame(*raw_set,i);
-<a name="l00215"></a>00215       name=cpl_frame_get_filename(frame);
-<a name="l00216"></a>00216        <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)name)==1) {
-<a name="l00217"></a>00217     <span class="comment">/* to go on the file must exist */</span>
-<a name="l00218"></a>00218     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {
-<a name="l00219"></a>00219       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> 
-<a name="l00220"></a>00220       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);
-<a name="l00221"></a>00221           <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0) || 
-<a name="l00222"></a>00222              (sinfo_frame_is_sky(frame)  == 1)) 
-<a name="l00223"></a>00223       {
-<a name="l00224"></a>00224              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00225"></a>00225              cfg->frametype[i] = FRAME_OFF ;
-<a name="l00226"></a>00226              found_sky = 1;
-<a name="l00227"></a>00227              <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame)) 
-<a name="l00228"></a>00228            {
-<a name="l00229"></a>00229                 cfg->frameposition[i] = FRAME_POS2 ;
-<a name="l00230"></a>00230                 nditheroff++ ;
-<a name="l00231"></a>00231            }
-<a name="l00232"></a>00232              <span class="keywordflow">else</span> 
-<a name="l00233"></a>00233            {
-<a name="l00234"></a>00234                 cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00235"></a>00235                 noff++ ;
-<a name="l00236"></a>00236            }
-<a name="l00237"></a>00237       }
-<a name="l00238"></a>00238           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,RAW_REF)  != NULL) 
-<a name="l00239"></a>00239       {
-<a name="l00240"></a>00240           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00241"></a>00241           cfg->frametype[i] = FRAME_REF ;
-<a name="l00242"></a>00242               found_ref=1;
-<a name="l00243"></a>00243           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))
-<a name="l00244"></a>00244         {
-<a name="l00245"></a>00245           cfg->frameposition[i] = FRAME_POS2 ;
-<a name="l00246"></a>00246         }
-<a name="l00247"></a>00247               <span class="keywordflow">else</span> 
-<a name="l00248"></a>00248         {
-<a name="l00249"></a>00249           cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00250"></a>00250         }
-<a name="l00251"></a>00251       }
-<a name="l00252"></a>00252           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_is_dark(tag)) 
-<a name="l00253"></a>00253         {
-<a name="l00254"></a>00254           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00255"></a>00255           cfg->frametype[i] = FRAME_DRK ;
-<a name="l00256"></a>00256           cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00257"></a>00257               found_dark=1;
-<a name="l00258"></a>00258               ndark++;
-<a name="l00259"></a>00259           sinfo_msg(<span class="stringliteral">"Frame is sinfo_dark on\n"</span>);
-<a name="l00260"></a>00260         }
-<a name="l00261"></a>00261           <span class="keywordflow">else</span> 
-<a name="l00262"></a>00262         {
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00265"></a>00265           cfg->frametype[i] = FRAME_ON ;
-<a name="l00266"></a>00266               found_ref=1;
-<a name="l00267"></a>00267           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))
-<a name="l00268"></a>00268         {
-<a name="l00269"></a>00269           cfg->frameposition[i] = FRAME_POS2 ;
-<a name="l00270"></a>00270                   found_dither=1;
-<a name="l00271"></a>00271                   nditherobj++;
-<a name="l00272"></a>00272         }
-<a name="l00273"></a>00273               <span class="keywordflow">else</span> 
-<a name="l00274"></a>00274         {
-<a name="l00275"></a>00275           cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00276"></a>00276                   nobj++;
-<a name="l00277"></a>00277         }
-<a name="l00278"></a>00278         }
-<a name="l00279"></a>00279     }
-<a name="l00280"></a>00280         <span class="keywordflow">else</span> 
-<a name="l00281"></a>00281       {
-<a name="l00282"></a>00282             <span class="comment">/* No type means an object */</span>
-<a name="l00283"></a>00283         cfg->frametype[i] = FRAME_ON ;
-<a name="l00284"></a>00284             <span class="comment">/* No type means position 1 */</span>
-<a name="l00285"></a>00285         cfg->frameposition[i] = FRAME_POS1 ;
-<a name="l00286"></a>00286             
-<a name="l00287"></a>00287         nobj ++ ;
-<a name="l00288"></a>00288       }
-<a name="l00289"></a>00289       }
-<a name="l00290"></a>00290       
-<a name="l00291"></a>00291       <span class="comment">/* Store file name into framelist */</span>
-<a name="l00292"></a>00292     }
-<a name="l00293"></a>00293    
-<a name="l00294"></a>00294    sinfo_msg(<span class="stringliteral">"Noff= %d Nobj= %d Nditheroff= %d Nditherobj= %d"</span>,
-<a name="l00295"></a>00295            noff,nobj,nditheroff,nditherobj);
-<a name="l00296"></a>00296    
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00300"></a>00300    cfg->nframes         = nraw ;
-<a name="l00301"></a>00301    cfg->nobj            = nobj ;
-<a name="l00302"></a>00302    cfg->noff            = noff ;
-<a name="l00303"></a>00303    cfg->ndark           = ndark ;
-<a name="l00304"></a>00304    cfg->nditherobj      = nditherobj ;
-<a name="l00305"></a>00305    cfg->nditheroff      = nditheroff ;
-<a name="l00306"></a>00306    cfg->contains_sky    = found_sky ;
-<a name="l00307"></a>00307    cfg->contains_ref    = found_ref ;
-<a name="l00308"></a>00308    cfg->contains_dither = found_dither ;
-<a name="l00309"></a>00309    cfg->contains_dark   = found_dark ;
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312    frame = cpl_frameset_get_frame(*raw_set,0);
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314    ck0_nomsg(sinfo_get_spatial_res(frame,spat_res));
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318    <span class="keywordflow">if</span>(sinfo_frame_is_on(frame) == 1) {
-<a name="l00319"></a>00319      strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00320"></a>00320    } <span class="keywordflow">else</span> {
-<a name="l00321"></a>00321      strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00322"></a>00322    }
-<a name="l00323"></a>00323    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00324"></a>00324      {
-<a name="l00325"></a>00325    <span class="keywordflow">case</span> 0: 
-<a name="l00326"></a>00326       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00327"></a>00327       <span class="keywordflow">break</span>;
-<a name="l00328"></a>00328     <span class="keywordflow">case</span> 1: 
-<a name="l00329"></a>00329       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00330"></a>00330       <span class="keywordflow">break</span>;
-<a name="l00331"></a>00331     <span class="keywordflow">case</span> -1:
-<a name="l00332"></a>00332       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00333"></a>00333       <span class="keywordflow">break</span>;
-<a name="l00334"></a>00334     <span class="keywordflow">default</span>: 
-<a name="l00335"></a>00335       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00336"></a>00336       <span class="keywordflow">break</span>;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339      }
-<a name="l00340"></a>00340    sinfo_get_band(frame,band);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s"</span>,
-<a name="l00344"></a>00344                      spat_res,              lamp_status,    band);
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346    sinfo_get_ins_set(band,&ins_set);
-<a name="l00347"></a>00347    frame = cpl_frameset_get_frame(*raw_set,0);
-<a name="l00348"></a>00348    tag=(<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame);
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351    <span class="comment">/* Update flatInd setting if we had changed the mflat switch */</span>
-<a name="l00352"></a>00352     <span class="comment">/* take care of NS test special case */</span>
-<a name="l00353"></a>00353     <span class="keywordflow">if</span>(fk->frm_switch==1) {
-<a name="l00354"></a>00354      <span class="comment">/* </span>
-<a name="l00355"></a>00355 <span class="comment">        In this case we force certain values indipendently from the </span>
-<a name="l00356"></a>00356 <span class="comment">        setting occurring during CPL parameters parsing </span>
-<a name="l00357"></a>00357 <span class="comment">      */</span>
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359     cfg->maskInd = fk->mask_index;
-<a name="l00360"></a>00360     cfg->indind = fk->ind_index;
-<a name="l00361"></a>00361     cfg->flatInd = fk->flat_index;
-<a name="l00362"></a>00362         cfg -> loReject = fk->low_rej;
-<a name="l00363"></a>00363         cfg -> hiReject = fk->hig_rej;
-<a name="l00364"></a>00364         cfg -> warpfixInd =  fk->wfix_index;
-<a name="l00365"></a>00365     <span class="comment">/*</span>
-<a name="l00366"></a>00366 <span class="comment">        sinfo_msg("Fake frame: reset parameter values: ");</span>
-<a name="l00367"></a>00367 <span class="comment">        sinfo_msg("maskInd:  %d", cfg->maskInd);</span>
-<a name="l00368"></a>00368 <span class="comment">        sinfo_msg("indind:   %d", cfg->indind);</span>
-<a name="l00369"></a>00369 <span class="comment">        sinfo_msg("flatInd:  %d", cfg->flatInd);</span>
-<a name="l00370"></a>00370 <span class="comment">        sinfo_msg("loReject: %f", cfg->loReject);</span>
-<a name="l00371"></a>00371 <span class="comment">        sinfo_msg("hiReject: %f", cfg->hiReject);</span>
-<a name="l00372"></a>00372 <span class="comment">    */</span>
-<a name="l00373"></a>00373    }
-<a name="l00374"></a>00374   
-<a name="l00375"></a>00375   
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378  
-<a name="l00379"></a>00379    <span class="keywordflow">if</span>(cfg -> flatInd) { 
-<a name="l00380"></a>00380       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP)) {
-<a name="l00381"></a>00381          frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP);
-<a name="l00382"></a>00382          strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00383"></a>00383          strcpy(cfg -> flatfield1, file);
-<a name="l00384"></a>00384       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP1)) {
-<a name="l00385"></a>00385          frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP1);
-<a name="l00386"></a>00386          strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00387"></a>00387          strcpy(cfg -> flatfield1, file);
-<a name="l00388"></a>00388       } <span class="keywordflow">else</span> {
-<a name="l00389"></a>00389          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP);
-<a name="l00390"></a>00390          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP1);
-<a name="l00391"></a>00391          sinfo_stack_free_alloc(cfg);  
-<a name="l00392"></a>00392          (*status)++;
-<a name="l00393"></a>00393          <span class="keywordflow">return</span>;
-<a name="l00394"></a>00394       }
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396       <span class="keywordflow">if</span>(found_dither) {
-<a name="l00397"></a>00397          <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP2)) {
-<a name="l00398"></a>00398             frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP2);
-<a name="l00399"></a>00399             strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00400"></a>00400             strcpy(cfg -> flatfield2, file);
-<a name="l00401"></a>00401          } <span class="keywordflow">else</span> {
-<a name="l00402"></a>00402             sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP2);
-<a name="l00403"></a>00403          }
-<a name="l00404"></a>00404       }
-<a name="l00405"></a>00405    }
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407    <span class="comment">/* bad pixel section */</span>
-<a name="l00408"></a>00408    <span class="keywordflow">if</span>(cfg->maskInd != 0) {
-<a name="l00409"></a>00409      <span class="keywordflow">if</span>(strstr(do_class,<span class="stringliteral">"FIBRE_NS"</span>) != NULL) {
-<a name="l00410"></a>00410         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {
-<a name="l00411"></a>00411            frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);
-<a name="l00412"></a>00412            strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00413"></a>00413            strcpy(cfg -> mask, file);
-<a name="l00414"></a>00414         } <span class="keywordflow">else</span> {
-<a name="l00415"></a>00415            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_BP_MAP_DI);
-<a name="l00416"></a>00416            sinfo_stack_free_alloc(cfg);  
-<a name="l00417"></a>00417            (*status)++;
-<a name="l00418"></a>00418            <span class="keywordflow">return</span>;
-<a name="l00419"></a>00419         }
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421      } <span class="keywordflow">else</span> {
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_BP_MAP)) {
-<a name="l00424"></a>00424            frame = cpl_frameset_find(sof,PRO_MASTER_BP_MAP);
-<a name="l00425"></a>00425            strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00426"></a>00426            strcpy(cfg -> mask, file);
-<a name="l00427"></a>00427         } <span class="keywordflow">else</span> {
-<a name="l00428"></a>00428            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_BP_MAP);
-<a name="l00429"></a>00429            sinfo_stack_free_alloc(cfg);  
-<a name="l00430"></a>00430            (*status)++;
-<a name="l00431"></a>00431            <span class="keywordflow">return</span>;
-<a name="l00432"></a>00432         }
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434      }
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436      <span class="keywordflow">if</span> (strcmp(do_class,RAW_STACKED_SLITPOS) == 0) {
-<a name="l00437"></a>00437        cfg -> indind = 1;
-<a name="l00438"></a>00438      }
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440       <span class="keywordflow">if</span>(cfg -> indind == 0) { 
-<a name="l00441"></a>00441           <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {
-<a name="l00442"></a>00442             frame = cpl_frameset_find(sof,PRO_SLIT_POS);
-<a name="l00443"></a>00443             strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00444"></a>00444             strcpy(cfg -> slitposList, file);
-<a name="l00445"></a>00445             sinfo_msg(<span class="stringliteral">"Using %s to interpolate bad pixels"</span>,
-<a name="l00446"></a>00446                              PRO_SLIT_POS);
-<a name="l00447"></a>00447             cpl_error_reset();
-<a name="l00448"></a>00448           } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS_GUESS)) {
-<a name="l00449"></a>00449             frame = cpl_frameset_find(sof,PRO_SLIT_POS_GUESS);
-<a name="l00450"></a>00450             strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00451"></a>00451             strcpy(cfg -> slitposList, file);
-<a name="l00452"></a>00452             sinfo_msg(<span class="stringliteral">"Using %s to interpolated bad pixels"</span>,
-<a name="l00453"></a>00453                              PRO_SLIT_POS_GUESS);
-<a name="l00454"></a>00454             cpl_error_reset();
-<a name="l00455"></a>00455           } <span class="keywordflow">else</span> {
-<a name="l00456"></a>00456             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s nor %s found!"</span>, 
-<a name="l00457"></a>00457                               PRO_SLIT_POS,PRO_SLIT_POS_GUESS);
-<a name="l00458"></a>00458             sinfo_stack_free_alloc(cfg);  
-<a name="l00459"></a>00459             (*status)++;
-<a name="l00460"></a>00460             <span class="keywordflow">return</span>;
-<a name="l00461"></a>00461           }
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463      
-<a name="l00464"></a>00464       }
-<a name="l00465"></a>00465       <span class="keywordflow">if</span>(cfg -> maskInd == 2) {
-<a name="l00466"></a>00466          <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_INDEX_LIST)) {
-<a name="l00467"></a>00467             frame = cpl_frameset_find(sof,PRO_INDEX_LIST);
-<a name="l00468"></a>00468             strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00469"></a>00469             strcpy(cfg ->indexlist, file);
-<a name="l00470"></a>00470          } <span class="keywordflow">else</span> {
-<a name="l00471"></a>00471             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_INDEX_LIST);
-<a name="l00472"></a>00472             sinfo_stack_free_alloc(cfg);  
-<a name="l00473"></a>00473             (*status)++;
-<a name="l00474"></a>00474             <span class="keywordflow">return</span>;
-<a name="l00475"></a>00475          }
-<a name="l00476"></a>00476 
-<a name="l00477"></a>00477       }
-<a name="l00478"></a>00478    }
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480    cfg -> warpfixInd =  fk->wfix_index;
-<a name="l00481"></a>00481    <span class="keywordflow">if</span>(cfg->warpfixInd != 0) {
-<a name="l00482"></a>00482         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_DISTORTION)) {
-<a name="l00483"></a>00483             frame = cpl_frameset_find(sof,PRO_DISTORTION);
-<a name="l00484"></a>00484             strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00485"></a>00485             strcpy(cfg -> polyFile, file);
-<a name="l00486"></a>00486          } <span class="keywordflow">else</span> {
-<a name="l00487"></a>00487             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_DISTORTION);
-<a name="l00488"></a>00488             sinfo_stack_free_alloc(cfg);  
-<a name="l00489"></a>00489             (*status)++;
-<a name="l00490"></a>00490             <span class="keywordflow">return</span>;
-<a name="l00491"></a>00491          }
-<a name="l00492"></a>00492    }
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_DARK)) {
-<a name="l00495"></a>00495      frame = cpl_frameset_find(sof,PRO_MASTER_DARK);
-<a name="l00496"></a>00496      strcpy(file,cpl_frame_get_filename(frame));
-<a name="l00497"></a>00497      strcpy(cfg -> mdark, file);
-<a name="l00498"></a>00498      cfg->mdark_ind=1;
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500    } <span class="keywordflow">else</span> {
-<a name="l00501"></a>00501      sinfo_msg(<span class="stringliteral">"Frame %s not found"</span>, PRO_MASTER_DARK);
-<a name="l00502"></a>00502      cfg->mdark_ind=0;
-<a name="l00503"></a>00503    }
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505   cleanup:
-<a name="l00506"></a>00506    return ;
-<a name="l00507"></a>00507 }
-<a name="l00508"></a>00508 
-<a name="l00516"></a>00516 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00517"></a>00517 parse_section_cleanmean(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00518"></a>00518 {
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520    cpl_parameter* p;
-<a name="l00521"></a>00521    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.low_rejection"</span>);
-<a name="l00522"></a>00522    cfg -> loReject = cpl_parameter_get_double(p);
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.high_rejection"</span>);
-<a name="l00525"></a>00525    cfg -> hiReject = cpl_parameter_get_double(p);
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527         return ;
-<a name="l00528"></a>00528 }
-<a name="l00535"></a>00535 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00536"></a>00536 parse_section_flatfield(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00537"></a>00537 {
-<a name="l00538"></a>00538 
-<a name="l00539"></a>00539    cpl_parameter* p;
-<a name="l00540"></a>00540    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.flat_index"</span>);
-<a name="l00541"></a>00541    cfg -> flatInd = cpl_parameter_get_bool(p);
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543 }
-<a name="l00550"></a>00550 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00551"></a>00551 parse_section_badpixel(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00552"></a>00552 {
-<a name="l00553"></a>00553   cpl_parameter* p;
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>);
-<a name="l00557"></a>00557    cfg -> indind = cpl_parameter_get_bool(p);
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.mask_index"</span>);
-<a name="l00560"></a>00560    cfg -> maskInd = cpl_parameter_get_int(p);
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.mask_rad"</span>);
-<a name="l00563"></a>00563    cfg -> maxRad = cpl_parameter_get_int(p);
-<a name="l00564"></a>00564    <span class="comment">/*</span>
-<a name="l00565"></a>00565 <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.sigma_factor");</span>
-<a name="l00566"></a>00566 <span class="comment">   */</span>
-<a name="l00567"></a>00567    cfg -> sigmaFactor = 3.;
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569 }
-<a name="l00575"></a>00575 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00576"></a>00576 parse_section_interleaving(stack_config_n * cfg)
-<a name="l00577"></a>00577 {
-<a name="l00578"></a>00578    cfg -> interInd = 0;
-<a name="l00579"></a>00579    cfg -> noRows = 400;
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581 }
-<a name="l00588"></a>00588 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00589"></a>00589 parse_section_gaussconvolution(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00590"></a>00590 {
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592    cpl_parameter* p;
-<a name="l00593"></a>00593    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.gauss_index"</span>);
-<a name="l00594"></a>00594    cfg -> gaussInd = cpl_parameter_get_bool(p);
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.kernel_half_width"</span>);
-<a name="l00597"></a>00597    cfg -> hw = cpl_parameter_get_int(p);
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599 }
-<a name="l00605"></a>00605 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00606"></a>00606 parse_section_shiftframes(stack_config_n * cfg)
-<a name="l00607"></a>00607 {
-<a name="l00608"></a>00608   <span class="comment">/*</span>
-<a name="l00609"></a>00609 <span class="comment">   cpl_parameter* p;</span>
-<a name="l00610"></a>00610 <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_index");</span>
-<a name="l00611"></a>00611 <span class="comment">   cfg -> sfInd  = cpl_parameter_get_bool(p);</span>
-<a name="l00612"></a>00612 <span class="comment"></span>
-<a name="l00613"></a>00613 <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_type");</span>
-<a name="l00614"></a>00614 <span class="comment">   cfg -> sfType = cpl_parameter_get_int(p);</span>
-<a name="l00615"></a>00615 <span class="comment"></span>
-<a name="l00616"></a>00616 <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_order");</span>
-<a name="l00617"></a>00617 <span class="comment">   cfg -> sfOrder = cpl_parameter_get_int(p);</span>
-<a name="l00618"></a>00618 <span class="comment">  */</span>
-<a name="l00619"></a>00619 
-<a name="l00620"></a>00620    cfg -> sfInd  = 0;
-<a name="l00621"></a>00621    cfg -> sfType = 1;
-<a name="l00622"></a>00622    cfg -> sfOrder = 2;
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624 }
-<a name="l00631"></a>00631 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00632"></a>00632 parse_section_warpfix(stack_config_n * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00633"></a>00633 {
-<a name="l00634"></a>00634        
-<a name="l00635"></a>00635    cpl_parameter* p;
-<a name="l00636"></a>00636 
-<a name="l00637"></a>00637    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.warpfix_ind"</span>);
-<a name="l00638"></a>00638    cfg -> warpfixInd =  cpl_parameter_get_bool(p);
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640 
-<a name="l00641"></a>00641    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.warpfix_kernel"</span>);
-<a name="l00642"></a>00642    strcpy(cfg -> kernel, cpl_parameter_get_string(p));
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644    return ;
-<a name="l00645"></a>00645 }
-<a name="l00646"></a>00646 
-<a name="l00653"></a>00653 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00654"></a>00654 parse_section_qclog(stack_config_n * cfg,cpl_parameterlist * cpl_cfg)
-<a name="l00655"></a>00655 {
-<a name="l00656"></a>00656        
-<a name="l00657"></a>00657    cpl_parameter* p;
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.qc_thresh_min"</span>);
-<a name="l00660"></a>00660    cfg -> qc_thresh_min =  cpl_parameter_get_int(p);
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.qc_thresh_max"</span>);
-<a name="l00663"></a>00663    cfg -> qc_thresh_max =  cpl_parameter_get_int(p);
-<a name="l00664"></a>00664 
-<a name="l00665"></a>00665    return ;
-<a name="l00666"></a>00666 }
-<a name="l00672"></a>00672 <span class="keywordtype">void</span>
-<a name="l00673"></a>00673 sinfo_stack_free(stack_config_n ** cfg)
-<a name="l00674"></a>00674 {  
-<a name="l00675"></a>00675   <span class="keywordflow">if</span>(*cfg != NULL) {
-<a name="l00676"></a>00676     sinfo_stack_free_alloc(*cfg);
-<a name="l00677"></a>00677     sinfo_stack_cfg_destroy_n(*cfg);
-<a name="l00678"></a>00678     *cfg = NULL;
-<a name="l00679"></a>00679   }
-<a name="l00680"></a>00680   <span class="keywordflow">return</span>;
-<a name="l00681"></a>00681 
-<a name="l00682"></a>00682 }
-<a name="l00683"></a>00683 
-<a name="l00689"></a>00689 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00690"></a>00690 sinfo_stack_free_alloc(stack_config_n * cfg)
-<a name="l00691"></a>00691 {  
-<a name="l00692"></a>00692   <span class="keywordtype">int</span> i=0;
-<a name="l00693"></a>00693   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {
-<a name="l00694"></a>00694     <span class="keywordflow">if</span>(cfg->framelist[i]  != NULL) {
-<a name="l00695"></a>00695         cpl_free(cfg->framelist[i]);
-<a name="l00696"></a>00696              cfg->framelist[i]=NULL;
-<a name="l00697"></a>00697     }
-<a name="l00698"></a>00698   }
-<a name="l00699"></a>00699   <span class="keywordflow">if</span>(cfg->frametype != NULL) {
-<a name="l00700"></a>00700     cpl_free(cfg->frametype); 
-<a name="l00701"></a>00701     cfg->frametype=NULL;
-<a name="l00702"></a>00702   }
-<a name="l00703"></a>00703   <span class="keywordflow">if</span>(cfg->framelist != NULL)   {
-<a name="l00704"></a>00704     cpl_free(cfg->framelist); 
-<a name="l00705"></a>00705     cfg->framelist=NULL;
-<a name="l00706"></a>00706   }
-<a name="l00707"></a>00707   <span class="keywordflow">if</span>(cfg->frameposition != NULL) {
-<a name="l00708"></a>00708     cpl_free(cfg->frameposition); 
-<a name="l00709"></a>00709     cfg->frameposition=NULL;
-<a name="l00710"></a>00710   }
-<a name="l00711"></a>00711 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stack_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   stack_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 23, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   prepare stacked frames cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_stack_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_ref_types.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span> sinfo_stack_free_alloc(stack_config_n * cfg);  </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> parse_section_frames(stack_config_n *, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                      cpl_frameset* sof, </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                      cpl_frameset** raw,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                      <span class="keywordtype">int</span>* status,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                      fake* fk);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> parse_section_cleanmean(stack_config_n *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> parse_section_flatfield(stack_config_n *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> parse_section_badpixel(stack_config_n *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> parse_section_interleaving(stack_config_n *);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> parse_section_gaussconvolution(stack_config_n *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> parse_section_shiftframes(stack_config_n *);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> parse_section_warpfix(stack_config_n *,  cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> parse_section_qclog(stack_config_n *,  cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/* generateStack_ini_file */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> stack_config_n * sinfo_parse_cpl_input_stack(cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                                        cpl_frameset* sof, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                                        cpl_frameset** raw,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                                        fake* fk)</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     stack_config_n   *       cfg =sinfo_stack_cfg_create_n();</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">     * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">     * found in the ini file</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     parse_section_cleanmean        (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     parse_section_flatfield        (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     parse_section_badpixel         (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     parse_section_interleaving     (cfg); </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     parse_section_gaussconvolution (cfg, cpl_cfg); </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     parse_section_shiftframes      (cfg); </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     parse_section_warpfix          (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     parse_section_qclog            (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     parse_section_frames           (cfg, sof, raw, &status, fk);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>           <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                 sinfo_stack_cfg_destroy_n(cfg);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> parse_section_frames(stack_config_n * cfg, </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                      cpl_frameset* sof, cpl_frameset** raw_set,<span class="keywordtype">int</span>* status, </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                      fake* fk)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>            *       name;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>    <span class="keywordtype">char</span>                        file[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>    <span class="keywordtype">int</span>                     nobj, noff, ndark ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>    <span class="keywordtype">int</span>                     nditherobj, nditheroff ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>    <span class="keywordtype">int</span>                     found_sky ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>    <span class="keywordtype">int</span>                     found_ref ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>    <span class="keywordtype">int</span>                     found_dither ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>    <span class="keywordtype">int</span>                     found_dark   ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">int</span> nsof=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>    cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>    <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>    <span class="keywordtype">char</span>* do_class=NULL;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    nsof    = cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>    do_class=fk->pro_class;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>    <span class="comment">/* sinfo_msg("do_class=%s",do_class); */</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    <span class="keywordflow">if</span>(strcmp(do_class,<span class="stringliteral">"DEFAULT"</span>) == 0) {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       sinfo_extract_raw_stack_frames(sof,raw_set);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,PRO_FIBRE_NS_STACKED_DIST) == 0) {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>       sinfo_is_fibres_on_off(sof,*raw_set);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,PRO_FIBRE_NS_STACKED) == 0) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       sinfo_contains_frames_kind(sof,*raw_set,(<span class="keywordtype">char</span>*)PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(do_class,RAW_STACKED_SLITPOS) == 0) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>       sinfo_extract_raw_stack_frames(sof,raw_set);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>       sinfo_extract_raw_frames_type(sof,raw_set,do_class);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>    }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>    nraw    = cpl_frameset_get_size(*raw_set);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    <span class="keywordflow">if</span> (nraw < 1) {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few raw frames present in frameset!"</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       (*status)++;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>    }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>  </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>    <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>    cfg->framelist     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>    cfg->frametype     = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>    cfg->frameposition = cpl_malloc(nraw * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    <span class="keywordflow">for</span> (i=0;i<nraw;i++) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>      cfg->framelist[i]=NULL;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>      cfg->frametype[i]=-1;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>      cfg->frameposition[i]=-1;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>    }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    found_sky     = 0 ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>    found_ref     = 0 ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>    found_dither  = 0 ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    found_dark    = 0 ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>    nobj          = 0 ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>    noff          = 0 ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    ndark         = 0 ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>    nditherobj    = 0 ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    nditheroff    = 0 ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>    <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    <span class="comment">/*   for (i=0 ; i<nraw ; i++) { */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>    <span class="keywordflow">for</span> (i=0 ; i<nraw ; i++) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       frame = cpl_frameset_get_frame(*raw_set,i);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       name=cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>        <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*)name)==1) {</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="comment">/* to go on the file must exist */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span>(cpl_frame_get_tag(frame) != NULL) {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       <span class="comment">/* If the frame has a tag we process it. Else it is an object */</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>           <span class="keywordflow">if</span>((sinfo_frame_is_on(frame)  == 0) || </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>              (sinfo_frame_is_sky(frame)  == 1)) </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>              cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>              cfg->frametype[i] = FRAME_OFF ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>              found_sky = 1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>              <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame)) </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>            {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                 cfg->frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                 nditheroff++ ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>            }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>              <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>            {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                 cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                 noff++ ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>            }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(strstr(tag,RAW_REF)  != NULL) </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>           cfg->frametype[i] = FRAME_REF ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>               found_ref=1;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>           cfg->frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         }</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>               <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>           cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       }</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>           <span class="keywordflow">else</span> <span class="keywordflow">if</span>(sinfo_is_dark(tag)) </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>           cfg->frametype[i] = FRAME_DRK ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>           cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>               found_dark=1;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>               ndark++;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>           sinfo_msg(<span class="stringliteral">"Frame is sinfo_dark on\n"</span>);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>           <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>           cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>           cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>               found_ref=1;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>           <span class="keywordflow">if</span> (sinfo_frame_is_dither(frame))</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>           cfg->frameposition[i] = FRAME_POS2 ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                   found_dither=1;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                   nditherobj++;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>               <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>           cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                   nobj++;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>         }</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>             <span class="comment">/* No type means an object */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         cfg->frametype[i] = FRAME_ON ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             <span class="comment">/* No type means position 1 */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         cfg->frameposition[i] = FRAME_POS1 ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>             </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         nobj ++ ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>    </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>    sinfo_msg(<span class="stringliteral">"Noff= %d Nobj= %d Nditheroff= %d Nditherobj= %d"</span>,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>            noff,nobj,nditheroff,nditherobj);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>    cfg->nframes         = nraw ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>    cfg->nobj            = nobj ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>    cfg->noff            = noff ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>    cfg->ndark           = ndark ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>    cfg->nditherobj      = nditherobj ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    cfg->nditheroff      = nditheroff ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    cfg->contains_sky    = found_sky ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    cfg->contains_ref    = found_ref ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    cfg->contains_dither = found_dither ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    cfg->contains_dark   = found_dark ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    frame = cpl_frameset_get_frame(*raw_set,0);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>    ck0_nomsg(sinfo_get_spatial_res(frame,spat_res));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>    <span class="keywordflow">if</span>(sinfo_frame_is_on(frame) == 1) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>      strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>      strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>    <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>      {</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>    <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>      }</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s"</span>,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                      spat_res,              lamp_status,    band);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>    frame = cpl_frameset_get_frame(*raw_set,0);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    tag=(<span class="keywordtype">char</span>*)cpl_frame_get_tag(frame);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    <span class="comment">/* Update flatInd setting if we had changed the mflat switch */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="comment">/* take care of NS test special case */</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     <span class="keywordflow">if</span>(fk->frm_switch==1) {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>      <span class="comment">/* </span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">        In this case we force certain values indipendently from the </span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">        setting occurring during CPL parameters parsing </span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     cfg->maskInd = fk->mask_index;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     cfg->indind = fk->ind_index;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     cfg->flatInd = fk->flat_index;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         cfg -> loReject = fk->low_rej;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         cfg -> hiReject = fk->hig_rej;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         cfg -> warpfixInd =  fk->wfix_index;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">        sinfo_msg("Fake frame: reset parameter values: ");</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">        sinfo_msg("maskInd:  %d", cfg->maskInd);</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">        sinfo_msg("indind:   %d", cfg->indind);</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">        sinfo_msg("flatInd:  %d", cfg->flatInd);</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">        sinfo_msg("loReject: %f", cfg->loReject);</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">        sinfo_msg("hiReject: %f", cfg->hiReject);</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>    }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>   </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>  </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>    <span class="keywordflow">if</span>(cfg -> flatInd) { </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP)) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>          frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>          strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>          strcpy(cfg -> flatfield1, file);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP1)) {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>          frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP1);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>          strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>          strcpy(cfg -> flatfield1, file);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP1);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>          sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>          (*status)++;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>          <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>       }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       <span class="keywordflow">if</span>(found_dither) {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>          <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP2)) {</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>             frame = cpl_frameset_find(sof,PRO_MASTER_FLAT_LAMP2);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>             strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>             strcpy(cfg -> flatfield2, file);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             sinfo_msg(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_FLAT_LAMP2);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>          }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>       }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>    }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>    <span class="comment">/* bad pixel section */</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>    <span class="keywordflow">if</span>(cfg->maskInd != 0) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>      <span class="keywordflow">if</span>(strstr(do_class,<span class="stringliteral">"FIBRE_NS"</span>) != NULL) {</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>            frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>            strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>            strcpy(cfg -> mask, file);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_BP_MAP_DI);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>            sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>            (*status)++;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_BP_MAP)) {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>            frame = cpl_frameset_find(sof,PRO_MASTER_BP_MAP);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>            strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>            strcpy(cfg -> mask, file);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_MASTER_BP_MAP);</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>            sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>            (*status)++;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>            <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>      }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>      <span class="keywordflow">if</span> (strcmp(do_class,RAW_STACKED_SLITPOS) == 0) {</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>        cfg -> indind = 1;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>      }</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       <span class="keywordflow">if</span>(cfg -> indind == 0) { </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>           <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS)) {</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>             frame = cpl_frameset_find(sof,PRO_SLIT_POS);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>             strcpy(cfg -> slitposList, file);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>             sinfo_msg(<span class="stringliteral">"Using %s to interpolate bad pixels"</span>,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                              PRO_SLIT_POS);</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             cpl_error_reset();</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>           } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_SLIT_POS_GUESS)) {</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             frame = cpl_frameset_find(sof,PRO_SLIT_POS_GUESS);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>             strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>             strcpy(cfg -> slitposList, file);</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             sinfo_msg(<span class="stringliteral">"Using %s to interpolated bad pixels"</span>,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                              PRO_SLIT_POS_GUESS);</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             cpl_error_reset();</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>           } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s nor %s found!"</span>, </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                               PRO_SLIT_POS,PRO_SLIT_POS_GUESS);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             (*status)++;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>           }</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>      </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       }</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       <span class="keywordflow">if</span>(cfg -> maskInd == 2) {</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>          <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_INDEX_LIST)) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>             frame = cpl_frameset_find(sof,PRO_INDEX_LIST);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>             strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>             strcpy(cfg ->indexlist, file);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_INDEX_LIST);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>             sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>             (*status)++;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>          }</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>    }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>    cfg -> warpfixInd =  fk->wfix_index;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>    <span class="keywordflow">if</span>(cfg->warpfixInd != 0) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_DISTORTION)) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             frame = cpl_frameset_find(sof,PRO_DISTORTION);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>             strcpy(cfg -> polyFile, file);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_DISTORTION);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>             sinfo_stack_free_alloc(cfg);  </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>             (*status)++;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>          }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>    }</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>    <span class="keywordflow">if</span>(NULL != cpl_frameset_find(sof,PRO_MASTER_DARK)) {</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>      frame = cpl_frameset_find(sof,PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>      strcpy(file,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>      strcpy(cfg -> mdark, file);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>      cfg->mdark_ind=1;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>      sinfo_msg(<span class="stringliteral">"Frame %s not found"</span>, PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>      cfg->mdark_ind=0;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>    }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   cleanup:</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>    return ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> }</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> parse_section_cleanmean(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> {</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.low_rejection"</span>);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>    cfg -> loReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.high_rejection"</span>);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>    cfg -> hiReject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>         return ;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span> }</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> parse_section_flatfield(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> {</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.flat_index"</span>);</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>    cfg -> flatInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span> </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> }</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> parse_section_badpixel(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   cpl_parameter* p;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.ind_index"</span>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>    cfg -> indind = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.mask_index"</span>);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>    cfg -> maskInd = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.mask_rad"</span>);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>    cfg -> maxRad = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>    <span class="comment">/*</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.sigma_factor");</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>    cfg -> sigmaFactor = 3.;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> }</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> parse_section_interleaving(stack_config_n * cfg)</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> {</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>    cfg -> interInd = 0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>    cfg -> noRows = 400;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> parse_section_gaussconvolution(stack_config_n * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> {</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.gauss_index"</span>);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>    cfg -> gaussInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>    p = cpl_parameterlist_find(cpl_cfg,<span class="stringliteral">"sinfoni.stacked.kernel_half_width"</span>);</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>    cfg -> hw = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> </div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> }</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> parse_section_shiftframes(stack_config_n * cfg)</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">   cpl_parameter* p;</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_index");</span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">   cfg -> sfInd  = cpl_parameter_get_bool(p);</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment"></span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span> <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_type");</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> <span class="comment">   cfg -> sfType = cpl_parameter_get_int(p);</span></div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> <span class="comment"></span></div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> <span class="comment">   p = cpl_parameterlist_find(cpl_cfg,"sinfoni.stacked.shift_frame_order");</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> <span class="comment">   cfg -> sfOrder = cpl_parameter_get_int(p);</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> </div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>    cfg -> sfInd  = 0;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>    cfg -> sfType = 1;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>    cfg -> sfOrder = 2;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> }</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> parse_section_warpfix(stack_config_n * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>        </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.warpfix_ind"</span>);</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>    cfg -> warpfixInd =  cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span> </div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span> </div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.warpfix_kernel"</span>);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>    strcpy(cfg -> kernel, cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>    return ;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> parse_section_qclog(stack_config_n * cfg,cpl_parameterlist * cpl_cfg)</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>        </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>    cfg -> qc_thresh_min =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.stacked.qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>    cfg -> qc_thresh_max =  cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span> </div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>    return ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> }</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> sinfo_stack_free(stack_config_n ** cfg)</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> {  </div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   <span class="keywordflow">if</span>(*cfg != NULL) {</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>     sinfo_stack_free_alloc(*cfg);</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     sinfo_stack_cfg_destroy_n(*cfg);</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>     *cfg = NULL;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   }</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> }</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span> sinfo_stack_free_alloc(stack_config_n * cfg)</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> {  </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   <span class="keywordflow">for</span> (i=0; i< cfg->nframes; i++) {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>     <span class="keywordflow">if</span>(cfg->framelist[i]  != NULL) {</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>         cpl_free(cfg->framelist[i]);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>              cfg->framelist[i]=NULL;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     }</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <span class="keywordflow">if</span>(cfg->frametype != NULL) {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     cpl_free(cfg->frametype); </div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     cfg->frametype=NULL;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>   }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   <span class="keywordflow">if</span>(cfg->framelist != NULL)   {</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     cpl_free(cfg->framelist); </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     cfg->framelist=NULL;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   }</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   <span class="keywordflow">if</span>(cfg->frameposition != NULL) {</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>     cpl_free(cfg->frameposition); </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     cfg->frameposition=NULL;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   }</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stack__ini__by__cpl_8h_source.html b/html/sinfo__stack__ini__by__cpl_8h_source.html
index 87c3f19..c7a1322 100644
--- a/html/sinfo__stack__ini__by__cpl_8h_source.html
+++ b/html/sinfo__stack__ini__by__cpl_8h_source.html
@@ -2,72 +2,103 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stack_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stack_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   stack_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 23, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   preparing stack of frames cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_STACK_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_stack_cfg.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Defines</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define FRAME_OFF    0  </span><span class="comment">/* off frames, that means sky frames </span>
-<a name="l00039"></a>00039 <span class="comment">                           or calibration frames with lamp switched off */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#define FRAME_ON     1  </span><span class="comment">/* object frames */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#define FRAME_POS1   2  </span><span class="comment">/* frames exposed with grating position 1 */</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#define FRAME_POS2   3  </span><span class="comment">/* frames exposed with dithered grating position 2 */</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#define FRAME_REF    4  </span><span class="comment">/* reference frames */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#define FRAME_DRK    5  </span><span class="comment">/* sinfo_dark frame*/</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                             Function prototypes </span>
-<a name="l00047"></a>00047 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="comment">/* generateStack_ini_file */</span>
-<a name="l00061"></a>00061 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 stack_config_n * 
-<a name="l00063"></a>00063 sinfo_parse_cpl_input_stack(cpl_parameterlist * cpl_cfg, 
-<a name="l00064"></a>00064                             cpl_frameset* sof, 
-<a name="l00065"></a>00065                             cpl_frameset** raw, 
-<a name="l00066"></a>00066                             fake* fk) ;
-<a name="l00067"></a>00067 <span class="keywordtype">void</span> sinfo_stack_free(stack_config_n ** cfg);
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stack_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   stack_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 23, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   preparing stack of frames cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_STACK_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STACK_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_stack_cfg.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#define FRAME_OFF    0  </span><span class="comment">/* off frames, that means sky frames </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                           or calibration frames with lamp switched off */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_ON     1  </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS1   2  </span><span class="comment">/* frames exposed with grating position 1 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_POS2   3  </span><span class="comment">/* frames exposed with dithered grating position 2 */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_REF    4  </span><span class="comment">/* reference frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_DRK    5  </span><span class="comment">/* sinfo_dark frame*/</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* generateStack_ini_file */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> stack_config_n * </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> sinfo_parse_cpl_input_stack(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                             cpl_frameset* sof, </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                             cpl_frameset** raw, </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                             fake* fk) ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">void</span> sinfo_stack_free(stack_config_n ** cfg);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stacked__hidden__config_8c_source.html b/html/sinfo__stacked__hidden__config_8c_source.html
index 165862f..251a003 100644
--- a/html/sinfo__stacked__hidden__config_8c_source.html
+++ b/html/sinfo__stacked__hidden__config_8c_source.html
@@ -2,85 +2,116 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stacked_hidden_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stacked_hidden_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_stacked_hidden_config.c,v 1.5 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/**************************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *  Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization *</span>
-<a name="l00029"></a>00029 <span class="comment">  **************************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_stacked_hidden_config.h"</span>
-<a name="l00049"></a>00049 <span class="keywordtype">void</span>
-<a name="l00050"></a>00050  sinfo_stacked_hidden_config_add(cpl_parameterlist *list)
-<a name="l00051"></a>00051 {
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053   cpl_parameter *p;
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   <span class="keywordflow">if</span> (!list) {
-<a name="l00056"></a>00056     <span class="keywordflow">return</span>;
-<a name="l00057"></a>00057   }
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*</span>
-<a name="l00061"></a>00061 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment">  In/Out  </span>
-<a name="l00063"></a>00063 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment"> */</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068   <span class="comment">/* Output file name */</span>
-<a name="l00069"></a>00069   <span class="comment">/* output name of resulting fits wavelength map */</span>
-<a name="l00070"></a>00070   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.output_filename"</span>,
-<a name="l00071"></a>00071                   CPL_TYPE_STRING,
-<a name="l00072"></a>00072                               <span class="stringliteral">"Output File Name: "</span>,
-<a name="l00073"></a>00073                               <span class="stringliteral">"sinfoni.stacked"</span>,
-<a name="l00074"></a>00074                               <span class="stringliteral">"out_stack.fits"</span>);
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-stack_filename"</span>);
-<a name="l00078"></a>00078   cpl_parameterlist_append(list, p);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stacked_hidden_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_stacked_hidden_config.c,v 1.5 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/**************************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *  Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  **************************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_stacked_hidden_config.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>  sinfo_stacked_hidden_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  In/Out  </span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/* Output file name */</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="comment">/* output name of resulting fits wavelength map */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.stacked.output_filename"</span>,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="stringliteral">"Output File Name: "</span>,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                               <span class="stringliteral">"sinfoni.stacked"</span>,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>                               <span class="stringliteral">"out_stack.fits"</span>);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"out-stack_filename"</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__stacked__hidden__config_8h_source.html b/html/sinfo__stacked__hidden__config_8h_source.html
index fab6878..5bce286 100644
--- a/html/sinfo__stacked__hidden__config_8h_source.html
+++ b/html/sinfo__stacked__hidden__config_8h_source.html
@@ -2,48 +2,79 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_stacked_hidden_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_stacked_hidden_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_stacked_hidden_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization </span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="keywordtype">void</span>
-<a name="l00033"></a>00033 sinfo_stacked_hidden_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_stacked_hidden_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_stacked_hidden_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Prepare_Stacked_Frames Frames Data Reduction Parameter Initialization </span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> sinfo_stacked_hidden_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standard__star__config_8c_source.html b/html/sinfo__standard__star__config_8c_source.html
index 71d8391..c51289a 100644
--- a/html/sinfo__standard__star__config_8c_source.html
+++ b/html/sinfo__standard__star__config_8c_source.html
@@ -2,155 +2,186 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standard_star_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standard_star_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_standard_star_config.c,v 1.7 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Standard_Star Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_standard_star_config.h"</span>
-<a name="l00050"></a>00050 <span class="keywordtype">void</span>
-<a name="l00051"></a>00051  sinfo_standard_star_config_add(cpl_parameterlist *list)
-<a name="l00052"></a>00052 {
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054   cpl_parameter *p;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056   <span class="keywordflow">if</span> (!list) {
-<a name="l00057"></a>00057     <span class="keywordflow">return</span>;
-<a name="l00058"></a>00058   }
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*</span>
-<a name="l00062"></a>00062 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">  In/Out  </span>
-<a name="l00064"></a>00064 <span class="comment">  --------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment"> */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067   <span class="comment">/* switch to generate the extracted spectrum */</span>
-<a name="l00068"></a>00068   <span class="comment">/*</span>
-<a name="l00069"></a>00069 <span class="comment">  p = cpl_parameter_new_value("sinfoni.std_star.qc_info",</span>
-<a name="l00070"></a>00070 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00071"></a>00071 <span class="comment">                              "Switch to activate extra QC information "</span>
-<a name="l00072"></a>00072 <span class="comment">                              "together with the spectrum",</span>
-<a name="l00073"></a>00073 <span class="comment">                              "sinfoni.std_star",</span>
-<a name="l00074"></a>00074 <span class="comment">                              FALSE);</span>
-<a name="l00075"></a>00075 <span class="comment"></span>
-<a name="l00076"></a>00076 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"std_star-qc_info");</span>
-<a name="l00077"></a>00077 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00078"></a>00078 <span class="comment">  */</span>
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.switch"</span>,
-<a name="l00081"></a>00081                   CPL_TYPE_BOOL,
-<a name="l00082"></a>00082                               <span class="stringliteral">"Switch to activate spectrum extraction"</span>,
-<a name="l00083"></a>00083                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00084"></a>00084                               TRUE);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-switch"</span>);
-<a name="l00087"></a>00087   cpl_parameterlist_append(list, p);
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span>
-<a name="l00090"></a>00090 <span class="comment">the average of columns */</span>
-<a name="l00091"></a>00091   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.low_rejection"</span>,
-<a name="l00092"></a>00092                   CPL_TYPE_DOUBLE,
-<a name="l00093"></a>00093                               <span class="stringliteral">"lower rejection"</span>,
-<a name="l00094"></a>00094                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00095"></a>00095                               0.1);
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-lo_rej"</span>);
-<a name="l00098"></a>00098   cpl_parameterlist_append(list, p);
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span>
-<a name="l00101"></a>00101 <span class="comment">the average of columns */</span>
-<a name="l00102"></a>00102   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.high_rejection"</span>,
-<a name="l00103"></a>00103                   CPL_TYPE_DOUBLE,
-<a name="l00104"></a>00104                               <span class="stringliteral">"high rejection"</span>,
-<a name="l00105"></a>00105                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00106"></a>00106                               0.1);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-hi_rej"</span>);
-<a name="l00109"></a>00109   cpl_parameterlist_append(list, p);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/* factor applied to the found fwhms of a 2D-Gaussian fit, defines the radius </span>
-<a name="l00113"></a>00113 <span class="comment">   of the aperture inside which the spectral extraction is carried out.</span>
-<a name="l00114"></a>00114 <span class="comment"> */</span>
-<a name="l00115"></a>00115   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.fwhm_factor"</span>,
-<a name="l00116"></a>00116                   CPL_TYPE_DOUBLE,
-<a name="l00117"></a>00117                               <span class="stringliteral">"Factor to find 2D-Gauss FWHM. "</span>
-<a name="l00118"></a>00118                               <span class="stringliteral">"The extraction box is: "</span>
-<a name="l00119"></a>00119                               <span class="stringliteral">"halfbox_x=halfbox_y="</span>
-<a name="l00120"></a>00120                               <span class="stringliteral">"fwhm_factor*(fwhm_x+fwhm_y)*0.5"</span>,
-<a name="l00121"></a>00121                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00122"></a>00122                               5.0);
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-fwhm_fct"</span>);
-<a name="l00125"></a>00125   cpl_parameterlist_append(list, p);
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="comment">/* indicator if the intensity conversion factor should be determined or not</span>
-<a name="l00129"></a>00129 <span class="comment"> */</span>
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.conversion_index"</span>,
-<a name="l00133"></a>00133                   CPL_TYPE_BOOL,
-<a name="l00134"></a>00134                               <span class="stringliteral">"Intensity Conversion Index: "</span>,
-<a name="l00135"></a>00135                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00136"></a>00136                               TRUE);
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-conv_ind"</span>);
-<a name="l00139"></a>00139   cpl_parameterlist_append(list, p);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.compute_eff"</span>,
-<a name="l00142"></a>00142                   CPL_TYPE_BOOL,
-<a name="l00143"></a>00143                               <span class="stringliteral">"Compute efficiency: TRUE/FALSE"</span>,
-<a name="l00144"></a>00144                               <span class="stringliteral">"sinfoni.std_star"</span>,
-<a name="l00145"></a>00145                               TRUE);
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-compute_eff"</span>);
-<a name="l00148"></a>00148   cpl_parameterlist_append(list, p);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standard_star_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_standard_star_config.c,v 1.7 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Standard_Star Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_standard_star_config.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>  sinfo_standard_star_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  In/Out  </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  --------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   <span class="comment">/* switch to generate the extracted spectrum */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.std_star.qc_info",</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                              "Switch to activate extra QC information "</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">                              "together with the spectrum",</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                              "sinfoni.std_star",</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                              FALSE);</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"std_star-qc_info");</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.switch"</span>,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"Switch to activate spectrum extraction"</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               TRUE);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-switch"</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when taking </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.low_rejection"</span>,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="stringliteral">"lower rejection"</span>,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               0.1);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-lo_rej"</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>  <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when taking </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">the average of columns */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.high_rejection"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                               <span class="stringliteral">"high rejection"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                               0.1);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-hi_rej"</span>);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/* factor applied to the found fwhms of a 2D-Gaussian fit, defines the radius </span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">   of the aperture inside which the spectral extraction is carried out.</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.fwhm_factor"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                               <span class="stringliteral">"Factor to find 2D-Gauss FWHM. "</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                               <span class="stringliteral">"The extraction box is: "</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                               <span class="stringliteral">"halfbox_x=halfbox_y="</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                               <span class="stringliteral">"fwhm_factor*(fwhm_x+fwhm_y)*0.5"</span>,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               5.0);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-fwhm_fct"</span>);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/* indicator if the intensity conversion factor should be determined or not</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.conversion_index"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                               <span class="stringliteral">"Intensity Conversion Index: "</span>,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                               TRUE);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-conv_ind"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.std_star.compute_eff"</span>,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               <span class="stringliteral">"Compute efficiency: TRUE/FALSE"</span>,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                               <span class="stringliteral">"sinfoni.std_star"</span>,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                               TRUE);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"std_star-compute_eff"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standard__star__config_8h_source.html b/html/sinfo__standard__star__config_8h_source.html
index 14bb82c..bd1e957 100644
--- a/html/sinfo__standard__star__config_8h_source.html
+++ b/html/sinfo__standard__star__config_8h_source.html
@@ -2,48 +2,79 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standard_star_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standard_star_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_standard_star_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Standard_Star Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="keywordtype">void</span>
-<a name="l00032"></a>00032 sinfo_standard_star_config_add(cpl_parameterlist *list);
-<a name="l00033"></a>00033 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standard_star_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_standard_star_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Standard_Star Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "cpl.h"</span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> sinfo_standard_star_config_add(cpl_parameterlist *list);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standstar__cfg_8c_source.html b/html/sinfo__standstar__cfg_8c_source.html
index 799b64a..d9393db 100644
--- a/html/sinfo__standstar__cfg_8c_source.html
+++ b/html/sinfo__standstar__cfg_8c_source.html
@@ -2,91 +2,122 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standstar_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standstar_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_standstar_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author     :       Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    March 2002</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    configuration handling tools for the </span>
-<a name="l00026"></a>00026 <span class="comment">                        standard star data reduction</span>
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_standstar_cfg.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00047"></a>00047 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                              Function codes</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00052"></a>00052 <span class="comment">   @name   sinfo_standstar_cfg_create()</span>
-<a name="l00053"></a>00053 <span class="comment">   @param  void</span>
-<a name="l00054"></a>00054 <span class="comment">   @return pointer to allocated base standstar_config structure</span>
-<a name="l00055"></a>00055 <span class="comment">   @brief  allocate memory for a standstar_config struct</span>
-<a name="l00056"></a>00056 <span class="comment">   @note   only the main (base) structure is allocated</span>
-<a name="l00057"></a>00057 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 standstar_config * sinfo_standstar_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00060"></a>00060 {
-<a name="l00061"></a>00061     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(standstar_config));
-<a name="l00062"></a>00062 }
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00066"></a>00066 <span class="comment">   @name    sinfo_standstar_cfg_destroy()</span>
-<a name="l00067"></a>00067 <span class="comment">   @param   cc   standstar_config to deallocate</span>
-<a name="l00068"></a>00068 <span class="comment">   @return  void</span>
-<a name="l00069"></a>00069 <span class="comment">   @brief   deallocate all memory associated with a \</span>
-<a name="l00070"></a>00070 <span class="comment">            standstar_config data structure</span>
-<a name="l00071"></a>00071 <span class="comment">     </span>
-<a name="l00072"></a>00072 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keywordtype">void</span> sinfo_standstar_cfg_destroy(standstar_config * cc)
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076     <span class="keywordflow">if</span> (cc==NULL) return ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <span class="comment">/* Free main struct */</span>
-<a name="l00079"></a>00079     cpl_free(cc);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     return ;
-<a name="l00082"></a>00082 }
-<a name="l00083"></a>00083 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standstar_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_standstar_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author     :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    March 2002</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    configuration handling tools for the </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        standard star data reduction</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_standstar_cfg.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   @name   sinfo_standstar_cfg_create()</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   @param  void</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   @return pointer to allocated base standstar_config structure</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   @brief  allocate memory for a standstar_config struct</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">   @note   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> standstar_config * sinfo_standstar_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(standstar_config));</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   @name    sinfo_standstar_cfg_destroy()</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   @param   cc   standstar_config to deallocate</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   @return  void</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">   @brief   deallocate all memory associated with a \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">            standstar_config data structure</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">     </span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">void</span> sinfo_standstar_cfg_destroy(standstar_config * cc)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">if</span> (cc==NULL) return ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     cpl_free(cc);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     return ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standstar__cfg_8h_source.html b/html/sinfo__standstar__cfg_8h_source.html
index bed8326..f1eca63 100644
--- a/html/sinfo__standstar__cfg_8h_source.html
+++ b/html/sinfo__standstar__cfg_8h_source.html
@@ -2,150 +2,181 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standstar_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standstar_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_standstar_cfg.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author    :    Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    March 2002</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    standstar_ini definitions + handling prototypes</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_STANDSTAR_CFG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_CFG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00043"></a>00043 <span class="comment">                                   Defines</span>
-<a name="l00044"></a>00044 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                                   New types</span>
-<a name="l00049"></a>00049 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*</span>
-<a name="l00053"></a>00053 <span class="comment">  standard star data reduction blackboard container</span>
-<a name="l00054"></a>00054 <span class="comment"></span>
-<a name="l00055"></a>00055 <span class="comment">  This structure holds all information related to the standard </span>
-<a name="l00056"></a>00056 <span class="comment">  star data reduction</span>
-<a name="l00057"></a>00057 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00058"></a>00058 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00059"></a>00059 <span class="comment">  the blackboard.</span>
-<a name="l00060"></a>00060 <span class="comment">  */</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keyword">typedef</span> <span class="keyword">struct </span>standstar_config {
-<a name="l00063"></a>00063 <span class="comment">/*-------General---------*/</span>
-<a name="l00064"></a>00064         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ]  ;<span class="comment">/* input file of reduced jittered </span>
-<a name="l00065"></a>00065 <span class="comment">                                       data cubes of a standard star */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input list of cubes */</span>
-<a name="l00067"></a>00067         <span class="keywordtype">int</span>     nframes ;         <span class="comment">/* number of input frames */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span>
-<a name="l00069"></a>00069 <span class="comment">                                        extracted spectrum stored </span>
-<a name="l00070"></a>00070 <span class="comment">                                        as fits image */</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*------ spectral extraction and determination of conversion factor ------*/</span>
-<a name="l00073"></a>00073         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when </span>
-<a name="l00074"></a>00074 <span class="comment">           taking the average of jittered spectra */</span>
-<a name="l00075"></a>00075         <span class="keywordtype">float</span> lo_reject ;
-<a name="l00076"></a>00076         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when </span>
-<a name="l00077"></a>00077 <span class="comment">           taking the average of jittered spectra */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">float</span> hi_reject ;
-<a name="l00079"></a>00079         <span class="comment">/* lower left sinfo_edge coordinates of fitting box for </span>
-<a name="l00080"></a>00080 <span class="comment">           2d Gaussian fit */</span>
-<a name="l00081"></a>00081         <span class="keywordtype">int</span> llx ;
-<a name="l00082"></a>00082         <span class="keywordtype">int</span> lly ;
-<a name="l00083"></a>00083         <span class="comment">/* size of a box inside which the 2D-Gaussian fit is carried through */</span>
-<a name="l00084"></a>00084         <span class="keywordtype">int</span> halfbox_x ;
-<a name="l00085"></a>00085         <span class="keywordtype">int</span> halfbox_y ;
-<a name="l00086"></a>00086     
-<a name="l00087"></a>00087         <span class="comment">/* factor applied to the found fwhms of a 2D-Gaussian</span>
-<a name="l00088"></a>00088 <span class="comment">           fit, defines the radius of the aperture from which the</span>
-<a name="l00089"></a>00089 <span class="comment">           spectral extraction is carried out (default: 0.7). */</span>
-<a name="l00090"></a>00090         <span class="keywordtype">float</span> fwhm_factor ;
-<a name="l00091"></a>00091         <span class="comment">/* (readnoise^2 + sinfo_dark current) needed to determine the </span>
-<a name="l00092"></a>00092 <span class="comment">           noise variance of the background. Must be given in counts/sec. */</span>
-<a name="l00093"></a>00093         <span class="keywordtype">float</span> backvariance ;
-<a name="l00094"></a>00094         <span class="comment">/* estimated sky counts/sec */</span>
-<a name="l00095"></a>00095         <span class="keywordtype">float</span> sky ;
-<a name="l00096"></a>00096         <span class="comment">/* gain: counts per electron */</span>
-<a name="l00097"></a>00097         <span class="keywordtype">float</span> gain ;
-<a name="l00098"></a>00098         <span class="comment">/* indicator if an intensity conversion factor should be </span>
-<a name="l00099"></a>00099 <span class="comment">           determined or not */</span>
-<a name="l00100"></a>00100         <span class="keywordtype">int</span> convInd ;      
-<a name="l00101"></a>00101         <span class="comment">/* name of the ASCII file that stores the intensity conversion factor */</span>
-<a name="l00102"></a>00102         <span class="keywordtype">char</span> convName[FILE_NAME_SZ] ;      
-<a name="l00103"></a>00103         <span class="comment">/* magnitude of the standard star */</span>
-<a name="l00104"></a>00104         <span class="keywordtype">float</span> mag ;      
-<a name="l00105"></a>00105 } standstar_config ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00110"></a>00110 <span class="comment">                               Function prototypes</span>
-<a name="l00111"></a>00111 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00115"></a>00115 <span class="comment">   Function :   sinfo_standstar_cfg_create()</span>
-<a name="l00116"></a>00116 <span class="comment">   In       :   void</span>
-<a name="l00117"></a>00117 <span class="comment">   Out      :   pointer to allocated base standstar_config structure</span>
-<a name="l00118"></a>00118 <span class="comment">   Job      :   allocate memory for a standstar_config struct</span>
-<a name="l00119"></a>00119 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00120"></a>00120 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 standstar_config * sinfo_standstar_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">   Function :   sinfo_standstar_cfg_destroy()</span>
-<a name="l00127"></a>00127 <span class="comment">   In       :   standstar_config to deallocate</span>
-<a name="l00128"></a>00128 <span class="comment">   Out      :   void</span>
-<a name="l00129"></a>00129 <span class="comment">   Job      :   deallocate all memory associated with a </span>
-<a name="l00130"></a>00130 <span class="comment">                standstar_config data structure</span>
-<a name="l00131"></a>00131 <span class="comment">   Notice   :   </span>
-<a name="l00132"></a>00132 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00133"></a>00133 <span class="keywordtype">void</span> sinfo_standstar_cfg_destroy(standstar_config * cc);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standstar_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_standstar_cfg.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author    :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    March 2002</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    standstar_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_STANDSTAR_CFG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_CFG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">  standard star data reduction blackboard container</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">  This structure holds all information related to the standard </span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">  star data reduction</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>standstar_config {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ]  ;<span class="comment">/* input file of reduced jittered </span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                                       data cubes of a standard star */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">char</span> ** inFrameList ; <span class="comment">/* input list of cubes */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="keywordtype">int</span>     nframes ;         <span class="comment">/* number of input frames */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ; <span class="comment">/* output name of resulting </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                                        extracted spectrum stored </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">                                        as fits image */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*------ spectral extraction and determination of conversion factor ------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="comment">/* the fraction [0...1] of rejected low intensity pixels when </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">           taking the average of jittered spectra */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">float</span> lo_reject ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="comment">/* the fraction [0...1] of rejected high intensity pixels when </span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">           taking the average of jittered spectra */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">float</span> hi_reject ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* lower left sinfo_edge coordinates of fitting box for </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">           2d Gaussian fit */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="keywordtype">int</span> llx ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="keywordtype">int</span> lly ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="comment">/* size of a box inside which the 2D-Gaussian fit is carried through */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="keywordtype">int</span> halfbox_x ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">int</span> halfbox_y ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="comment">/* factor applied to the found fwhms of a 2D-Gaussian</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">           fit, defines the radius of the aperture from which the</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">           spectral extraction is carried out (default: 0.7). */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">float</span> fwhm_factor ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="comment">/* (readnoise^2 + sinfo_dark current) needed to determine the </span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">           noise variance of the background. Must be given in counts/sec. */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordtype">float</span> backvariance ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="comment">/* estimated sky counts/sec */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordtype">float</span> sky ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="comment">/* gain: counts per electron */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>         <span class="keywordtype">float</span> gain ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="comment">/* indicator if an intensity conversion factor should be </span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">           determined or not */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="keywordtype">int</span> convInd ;      </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="comment">/* name of the ASCII file that stores the intensity conversion factor */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordtype">char</span> convName[FILE_NAME_SZ] ;      </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         <span class="comment">/* magnitude of the standard star */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         <span class="keywordtype">float</span> mag ;      </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> } standstar_config ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">   Function :   sinfo_standstar_cfg_create()</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">   Out      :   pointer to allocated base standstar_config structure</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">   Job      :   allocate memory for a standstar_config struct</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> standstar_config * sinfo_standstar_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">   Function :   sinfo_standstar_cfg_destroy()</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">   In       :   standstar_config to deallocate</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">   Job      :   deallocate all memory associated with a </span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">                standstar_config data structure</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="keywordtype">void</span> sinfo_standstar_cfg_destroy(standstar_config * cc);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standstar__ini_8h_source.html b/html/sinfo__standstar__ini_8h_source.html
index 453b56d..0b446df 100644
--- a/html/sinfo__standstar__ini_8h_source.html
+++ b/html/sinfo__standstar__ini_8h_source.html
@@ -2,77 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standstar_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standstar_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_standstar_ini.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :    Mar 25, 2002</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :    ini file handling for SINFONI data reduction </span>
-<a name="l00026"></a>00026 <span class="comment">                        of a standard star</span>
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifndef SINFO_STANDSTAR_INI_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_INI_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "standstar_cfg.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042  
-<a name="l00043"></a>00043  
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                             Function prototypes </span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 <span class="keywordtype">int</span> generateStandstar_ini_file(
-<a name="l00068"></a>00068         <span class="keywordtype">char</span> * ini_name,
-<a name="l00069"></a>00069         <span class="keywordtype">char</span> * name_i,
-<a name="l00070"></a>00070         <span class="keywordtype">char</span> * name_o
-<a name="l00071"></a>00071 );
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 standstar_config * parse_standstar_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standstar_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_standstar_ini.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :    Mar 25, 2002</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :    ini file handling for SINFONI data reduction </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                        of a standard star</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifndef SINFO_STANDSTAR_INI_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_INI_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "standstar_cfg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>  </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">int</span> generateStandstar_ini_file(</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> );</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> standstar_config * parse_standstar_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standstar__ini__by__cpl_8c_source.html b/html/sinfo__standstar__ini__by__cpl_8c_source.html
index ee09106..7c3b792 100644
--- a/html/sinfo__standstar__ini__by__cpl_8c_source.html
+++ b/html/sinfo__standstar__ini__by__cpl_8c_source.html
@@ -2,247 +2,278 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standstar_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standstar_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_standstar_ini_by_cpl.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   May 23, 2004</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   standard star reduction cpl input handling for SPIFFI</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Includes</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_standstar_ini_by_cpl.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_file_handling.h"</span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                    Functions private to this module</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00051"></a>00051 parse_section_frames(standstar_config *,
-<a name="l00052"></a>00052                     cpl_frameset* sof, 
-<a name="l00053"></a>00053                     cpl_frameset** raw, 
-<a name="l00054"></a>00054                     <span class="keywordtype">int</span>* status);
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00056"></a>00056 parse_section_extraction(standstar_config *, cpl_parameterlist* cpl_cfg);
-<a name="l00066"></a>00066 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 standstar_config * 
-<a name="l00080"></a>00080 sinfo_parse_cpl_input_standstar(cpl_parameterlist* cpl_cfg, 
-<a name="l00081"></a>00081                                 cpl_frameset* sof, 
-<a name="l00082"></a>00082                                 cpl_frameset** raw)
-<a name="l00083"></a>00083 {
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085         standstar_config   *  cfg = sinfo_standstar_cfg_create();
-<a name="l00086"></a>00086         <span class="keywordtype">int</span> status=0;
-<a name="l00087"></a>00087         <span class="comment">/*</span>
-<a name="l00088"></a>00088 <span class="comment">         * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00089"></a>00089 <span class="comment">         * found in the ini file</span>
-<a name="l00090"></a>00090 <span class="comment">         */</span>
-<a name="l00091"></a>00091         parse_section_extraction   (cfg, cpl_cfg);
-<a name="l00092"></a>00092         parse_section_frames       (cfg, sof, raw,&status);
-<a name="l00093"></a>00093         <span class="keywordflow">if</span> (status > 0) {
-<a name="l00094"></a>00094                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);
-<a name="l00095"></a>00095                 sinfo_standstar_cfg_destroy(cfg);
-<a name="l00096"></a>00096                 cfg = NULL ;
-<a name="l00097"></a>00097                 <span class="keywordflow">return</span> NULL ;
-<a name="l00098"></a>00098         }
-<a name="l00099"></a>00099         <span class="keywordflow">return</span> cfg ;
-<a name="l00100"></a>00100 }
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00103"></a>00103 parse_section_frames(standstar_config * cfg,
-<a name="l00104"></a>00104              cpl_frameset* sof,
-<a name="l00105"></a>00105              cpl_frameset** raw,
-<a name="l00106"></a>00106                      <span class="keywordtype">int</span>* status)
-<a name="l00107"></a>00107 {
-<a name="l00108"></a>00108     <span class="keywordtype">int</span>                     i;
-<a name="l00109"></a>00109     <span class="keywordtype">int</span>                     nval ;
-<a name="l00110"></a>00110     cpl_frame*      frame=NULL;
-<a name="l00111"></a>00111    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00112"></a>00112    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00113"></a>00113    <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00114"></a>00114    <span class="keywordtype">int</span> ins_set=0;
-<a name="l00115"></a>00115    cpl_frameset* tmp=NULL;
-<a name="l00116"></a>00116     <span class="comment">/* AMO BEWARE only STD frames should be here checked for */</span>
-<a name="l00117"></a>00117     sinfo_extract_frames_group_type(sof,&tmp,CPL_FRAME_GROUP_PRODUCT);
-<a name="l00118"></a>00118     sinfo_extract_raw_frames_type(tmp,raw,PRO_COADD_STD);
-<a name="l00119"></a>00119     cpl_frameset_delete(tmp);
-<a name="l00120"></a>00120     nval = cpl_frameset_get_size(*raw);
-<a name="l00121"></a>00121     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00122"></a>00122        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_STD);
-<a name="l00123"></a>00123     }
-<a name="l00124"></a>00124     nval = cpl_frameset_get_size(*raw);
-<a name="l00125"></a>00125     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00126"></a>00126        sinfo_extract_raw_frames_type(sof,raw,PRO_COADD_PSF);
-<a name="l00127"></a>00127     }
-<a name="l00128"></a>00128     nval = cpl_frameset_get_size(*raw);
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00130"></a>00130        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_PSF);
-<a name="l00131"></a>00131     }
-<a name="l00132"></a>00132     nval = cpl_frameset_get_size(*raw);
-<a name="l00133"></a>00133     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00134"></a>00134        sinfo_extract_raw_frames_type(sof,raw,PRO_COADD_OBJ);
-<a name="l00135"></a>00135     }
-<a name="l00136"></a>00136     nval = cpl_frameset_get_size(*raw);
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00138"></a>00138        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_OBJ);
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140     nval = cpl_frameset_get_size(*raw);
-<a name="l00141"></a>00141     <span class="keywordflow">if</span> (nval < 1) {
-<a name="l00142"></a>00142       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames "</span>
-<a name="l00143"></a>00143                           <span class="stringliteral">"(%s or %s or %s or %s or %s or %s ) "</span>
-<a name="l00144"></a>00144               <span class="stringliteral">"present in frameset!Aborting..."</span>,nval,
-<a name="l00145"></a>00145               PRO_COADD_STD,PRO_OBS_STD,
-<a name="l00146"></a>00146               PRO_COADD_PSF,PRO_OBS_PSF,
-<a name="l00147"></a>00147               PRO_COADD_OBJ,PRO_OBS_OBJ);
-<a name="l00148"></a>00148           (*status)++;
-<a name="l00149"></a>00149           <span class="keywordflow">return</span>;
-<a name="l00150"></a>00150     } 
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="comment">/* Allocate structures to go into the blackboard */</span>
-<a name="l00153"></a>00153     cfg->inFrameList     = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00154"></a>00154     <span class="comment">/* Browse through the charmatrix to get names and file types */</span>
-<a name="l00155"></a>00155   <span class="comment">/* read input frames */</span>
-<a name="l00156"></a>00156    <span class="keywordflow">for</span> (i=0 ; i<nval ; i++) {
-<a name="l00157"></a>00157       frame = cpl_frameset_get_frame(*raw,i);
-<a name="l00158"></a>00158       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) 
-<a name="l00159"></a>00159     {
-<a name="l00160"></a>00160          <span class="comment">/* Store file name into framelist */</span>
-<a name="l00161"></a>00161           cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));
-<a name="l00162"></a>00162     }
-<a name="l00163"></a>00163    }
-<a name="l00164"></a>00164  
-<a name="l00165"></a>00165    <span class="comment">/* Copy relevant information into the blackboard */</span>
-<a name="l00166"></a>00166    cfg->nframes         = nval ;
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168    strcpy(cfg -> outName, STDSTAR_OUT_FILENAME);
-<a name="l00169"></a>00169    
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174    frame = cpl_frameset_get_frame(*raw,0);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176    sinfo_get_spatial_res(frame,spat_res);
-<a name="l00177"></a>00177   <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) 
-<a name="l00178"></a>00178     {
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <span class="keywordflow">case</span> 0: 
-<a name="l00181"></a>00181       strcpy(lamp_status,<span class="stringliteral">"on"</span>);
-<a name="l00182"></a>00182       <span class="keywordflow">break</span>;
-<a name="l00183"></a>00183     <span class="keywordflow">case</span> 1: 
-<a name="l00184"></a>00184       strcpy(lamp_status,<span class="stringliteral">"off"</span>);
-<a name="l00185"></a>00185       <span class="keywordflow">break</span>;
-<a name="l00186"></a>00186     <span class="keywordflow">case</span> -1:
-<a name="l00187"></a>00187       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00188"></a>00188       <span class="keywordflow">break</span>;
-<a name="l00189"></a>00189     <span class="keywordflow">default</span>: 
-<a name="l00190"></a>00190       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);
-<a name="l00191"></a>00191       <span class="keywordflow">break</span>;
-<a name="l00192"></a>00192     }
-<a name="l00193"></a>00193    sinfo_get_band(frame,band);
-<a name="l00194"></a>00194    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s"</span>,
-<a name="l00195"></a>00195                      spat_res,    lamp_status,    band);
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198    sinfo_get_ins_set(band,&ins_set);
-<a name="l00199"></a>00199    return ;
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="keyword">static</span> <span class="keywordtype">void</span>     
-<a name="l00203"></a>00203 parse_section_extraction(standstar_config * cfg,cpl_parameterlist* cpl_cfg)
-<a name="l00204"></a>00204 {
-<a name="l00205"></a>00205    cpl_parameter* p;
-<a name="l00206"></a>00206    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.low_rejection"</span>);
-<a name="l00207"></a>00207    cfg -> lo_reject = cpl_parameter_get_double(p);
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.high_rejection"</span>);
-<a name="l00210"></a>00210    cfg -> hi_reject =  cpl_parameter_get_double(p);
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212    cfg -> llx = 8;
-<a name="l00213"></a>00213    cfg -> lly = 8;
-<a name="l00214"></a>00214    cfg -> halfbox_x = 16;
-<a name="l00215"></a>00215    cfg -> halfbox_y = 16;
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.fwhm_factor"</span>);
-<a name="l00218"></a>00218    cfg -> fwhm_factor =  cpl_parameter_get_double(p);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220    cfg -> backvariance =  BKG_VARIANCE;
-<a name="l00221"></a>00221    cfg -> sky = SKY_FLUX;
-<a name="l00222"></a>00222    cfg -> gain = GAIN ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.conversion_index"</span>);
-<a name="l00225"></a>00225    cfg -> convInd = cpl_parameter_get_bool(p);
-<a name="l00226"></a>00226  
-<a name="l00227"></a>00227    strcpy(cfg -> convName, STDSTAR_CONV_OUT_FILENAME);
-<a name="l00228"></a>00228  
-<a name="l00229"></a>00229    cfg -> mag = 0;
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231  
-<a name="l00232"></a>00232    return ;
-<a name="l00233"></a>00233 }
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 <span class="keywordtype">void</span>
-<a name="l00236"></a>00236 sinfo_stdstar_free(standstar_config  ** cfg)
-<a name="l00237"></a>00237 {
-<a name="l00238"></a>00238   <span class="keywordtype">int</span> i=0;
-<a name="l00239"></a>00239   <span class="keywordflow">if</span>((*cfg) != NULL) {
-<a name="l00240"></a>00240     <span class="keywordflow">for</span> (i=0 ; i<(*cfg)->nframes ; i++) {
-<a name="l00241"></a>00241       <span class="keywordflow">if</span>((*cfg)->inFrameList[i] != NULL) {
-<a name="l00242"></a>00242     cpl_free((*cfg)->inFrameList[i]);
-<a name="l00243"></a>00243     (*cfg)->inFrameList[i]= NULL;
-<a name="l00244"></a>00244       }
-<a name="l00245"></a>00245     }
-<a name="l00246"></a>00246     cpl_free((*cfg)->inFrameList);
-<a name="l00247"></a>00247     (*cfg)->inFrameList=NULL;
-<a name="l00248"></a>00248     sinfo_standstar_cfg_destroy (*cfg);
-<a name="l00249"></a>00249     (*cfg) = NULL;
-<a name="l00250"></a>00250   }
-<a name="l00251"></a>00251 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standstar_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_standstar_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   May 23, 2004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   standard star reduction cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_standstar_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_file_handling.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> parse_section_frames(standstar_config *,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                     cpl_frameset* sof, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                     cpl_frameset** raw, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                     <span class="keywordtype">int</span>* status);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> parse_section_extraction(standstar_config *, cpl_parameterlist* cpl_cfg);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> standstar_config * </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_parse_cpl_input_standstar(cpl_parameterlist* cpl_cfg, </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                                 cpl_frameset* sof, </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                                 cpl_frameset** raw)</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         standstar_config   *  cfg = sinfo_standstar_cfg_create();</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">         * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">         * found in the ini file</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         parse_section_extraction   (cfg, cpl_cfg);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>         parse_section_frames       (cfg, sof, raw,&status);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordflow">if</span> (status > 0) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"parsing cpl input"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                 sinfo_standstar_cfg_destroy(cfg);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                 cfg = NULL ;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> parse_section_frames(standstar_config * cfg,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>              cpl_frameset* sof,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>              cpl_frameset** raw,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                      <span class="keywordtype">int</span>* status)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordtype">int</span>                     i;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordtype">int</span>                     nval ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     cpl_frame*      frame=NULL;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>    <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>    <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>    <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>    cpl_frameset* tmp=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="comment">/* AMO BEWARE only STD frames should be here checked for */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     sinfo_extract_frames_group_type(sof,&tmp,CPL_FRAME_GROUP_PRODUCT);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     sinfo_extract_raw_frames_type(tmp,raw,PRO_COADD_STD);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     cpl_frameset_delete(tmp);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_STD);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>        sinfo_extract_raw_frames_type(sof,raw,PRO_COADD_PSF);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>        sinfo_extract_raw_frames_type(sof,raw,PRO_COADD_OBJ);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>        sinfo_extract_raw_frames_type(sof,raw,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     nval = cpl_frameset_get_size(*raw);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordflow">if</span> (nval < 1) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Too few (%d) raw frames "</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                           <span class="stringliteral">"(%s or %s or %s or %s or %s or %s ) "</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>               <span class="stringliteral">"present in frameset!Aborting..."</span>,nval,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>               PRO_COADD_STD,PRO_OBS_STD,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>               PRO_COADD_PSF,PRO_OBS_PSF,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>               PRO_COADD_OBJ,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>           (*status)++;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>           <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     } </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="comment">/* Allocate structures to go into the blackboard */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cfg->inFrameList     = cpl_malloc(nval * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Browse through the charmatrix to get names and file types */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="comment">/* read input frames */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>    <span class="keywordflow">for</span> (i=0 ; i<nval ; i++) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       frame = cpl_frameset_get_frame(*raw,i);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <span class="keywordflow">if</span>(sinfo_file_exists((<span class="keywordtype">char</span>*) cpl_frame_get_filename(frame))==1) </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>          <span class="comment">/* Store file name into framelist */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    <span class="comment">/* Copy relevant information into the blackboard */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    cfg->nframes         = nval ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>    strcpy(cfg -> outName, STDSTAR_OUT_FILENAME);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>    </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>    frame = cpl_frameset_get_frame(*raw,0);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>    sinfo_get_spatial_res(frame,spat_res);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">switch</span>(sinfo_frame_is_on(frame)) </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     {</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">case</span> 0: </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       strcpy(lamp_status,<span class="stringliteral">"on"</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">case</span> 1: </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       strcpy(lamp_status,<span class="stringliteral">"off"</span>);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">default</span>: </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       strcpy(lamp_status,<span class="stringliteral">"undefined"</span>);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>    sinfo_get_band(frame,band);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>    sinfo_msg(<span class="stringliteral">"Spatial resolution: %s lamp_status: %s band: %s"</span>,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                      spat_res,    lamp_status,    band);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>    sinfo_get_ins_set(band,&ins_set);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    return ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keyword">static</span> <span class="keywordtype">void</span>     </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> parse_section_extraction(standstar_config * cfg,cpl_parameterlist* cpl_cfg)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>    cpl_parameter* p;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.low_rejection"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    cfg -> lo_reject = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.high_rejection"</span>);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>    cfg -> hi_reject =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>    cfg -> llx = 8;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>    cfg -> lly = 8;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>    cfg -> halfbox_x = 16;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    cfg -> halfbox_y = 16;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.fwhm_factor"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>    cfg -> fwhm_factor =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>    cfg -> backvariance =  BKG_VARIANCE;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>    cfg -> sky = SKY_FLUX;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>    cfg -> gain = GAIN ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>    p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.std_star.conversion_index"</span>);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>    cfg -> convInd = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>  </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>    strcpy(cfg -> convName, STDSTAR_CONV_OUT_FILENAME);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>  </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>    cfg -> mag = 0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>  </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>    return ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> sinfo_stdstar_free(standstar_config  ** cfg)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> {</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordflow">if</span>((*cfg) != NULL) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">for</span> (i=0 ; i<(*cfg)->nframes ; i++) {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       <span class="keywordflow">if</span>((*cfg)->inFrameList[i] != NULL) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     cpl_free((*cfg)->inFrameList[i]);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     (*cfg)->inFrameList[i]= NULL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_free((*cfg)->inFrameList);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     (*cfg)->inFrameList=NULL;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     sinfo_standstar_cfg_destroy (*cfg);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     (*cfg) = NULL;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__standstar__ini__by__cpl_8h_source.html b/html/sinfo__standstar__ini__by__cpl_8h_source.html
index 1e50efa..b89d7f6 100644
--- a/html/sinfo__standstar__ini__by__cpl_8h_source.html
+++ b/html/sinfo__standstar__ini__by__cpl_8h_source.html
@@ -2,77 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_standstar_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_standstar_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name    :   sinfo_standstar_ini_by_cpl.h</span>
-<a name="l00023"></a>00023 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on   :   May 23, 2004</span>
-<a name="l00025"></a>00025 <span class="comment">   Description  :   cpl input handling for SINFONI data reduction </span>
-<a name="l00026"></a>00026 <span class="comment">                    of a standard star</span>
-<a name="l00027"></a>00027 <span class="comment"></span>
-<a name="l00028"></a>00028 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifndef SINFO_STANDSTAR_INI_BY_CPL_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_INI_BY_CPL_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_standstar_cfg.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043  
-<a name="l00044"></a>00044  
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                             Function prototypes </span>
-<a name="l00047"></a>00047 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* generateStandstar_ini_file */</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keywordtype">void</span>
-<a name="l00066"></a>00066 sinfo_stdstar_free(standstar_config  ** cfg);
-<a name="l00067"></a>00067 standstar_config * 
-<a name="l00068"></a>00068 sinfo_parse_cpl_input_standstar(cpl_parameterlist * cpl_cfg, 
-<a name="l00069"></a>00069                                 cpl_frameset* sof, 
-<a name="l00070"></a>00070                                 cpl_frameset** raw) ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_standstar_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name    :   sinfo_standstar_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on   :   May 23, 2004</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description  :   cpl input handling for SINFONI data reduction </span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">                    of a standard star</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifndef SINFO_STANDSTAR_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_STANDSTAR_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_standstar_cfg.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>  </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>  </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* generateStandstar_ini_file */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> sinfo_stdstar_free(standstar_config  ** cfg);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> standstar_config * </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> sinfo_parse_cpl_input_standstar(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                                 cpl_frameset* sof, </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                                 cpl_frameset** raw) ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__star__index_8c_source.html b/html/sinfo__star__index_8c_source.html
index 2d7f69d..d504688 100644
--- a/html/sinfo__star__index_8c_source.html
+++ b/html/sinfo__star__index_8c_source.html
@@ -2,337 +2,368 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_star_index.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_star_index.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_star_index.c,v 1.9 2012/03/03 10:18:26 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the X-Shooter Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <string.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <math.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">//#include "sinfo_pro_save.h"</span>
-<a name="l00039"></a>00039 <span class="comment">//#include "sinfo_pfits.h"</span>
-<a name="l00040"></a>00040 <span class="comment">//#include "sinfo_utilities_scired.h"</span>
-<a name="l00041"></a>00041 <span class="comment">//#include "sinfo_hidden.h"</span>
-<a name="l00042"></a>00042 <span class="comment">//#include "sinfo_functions.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00046"></a>00046 <span class="comment">//#include "sinfo_globals.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_star_index.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">struct </span>_star_index_
-<a name="l00050"></a>00050 {
-<a name="l00051"></a>00051     cpl_table* index_table;
-<a name="l00052"></a>00052     <span class="keywordtype">char</span>* fits_file_name;
-<a name="l00053"></a>00053     <span class="keywordtype">int</span> index_size;
-<a name="l00054"></a>00054     cpl_table** cache;
-<a name="l00055"></a>00055     <span class="keywordtype">int</span> cache_size;
-<a name="l00056"></a>00056     <span class="keywordtype">int</span>* cache_index;
-<a name="l00057"></a>00057 };
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="comment">//typedef struct _star_index_ star_index;</span>
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_EXTID   = <span class="stringliteral">"ext_id"</span>;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_NAME    = <span class="stringliteral">"name"</span>;
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_RA  = <span class="stringliteral">"ra"</span>;
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_DEC     = <span class="stringliteral">"dec"</span>;
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="keyword">static</span> star_index* star_index_construct(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file);
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">void</span> star_index_destruct(star_index* pindex);
-<a name="l00067"></a>00067 <span class="comment">// private functions</span>
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keyword">static</span> star_index* star_index_construct(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)
-<a name="l00070"></a>00070 {
-<a name="l00071"></a>00071     star_index* pret = cpl_malloc(<span class="keyword">sizeof</span>(star_index));
-<a name="l00072"></a>00072     pret->index_size = 0;
-<a name="l00073"></a>00073     pret->index_table = 0;
-<a name="l00074"></a>00074     pret->cache_size = 0;
-<a name="l00075"></a>00075     pret->cache = 0;
-<a name="l00076"></a>00076     pret->cache_index = 0;
-<a name="l00077"></a>00077     <span class="keywordflow">if</span> (fits_file)
-<a name="l00078"></a>00078     {
-<a name="l00079"></a>00079         <span class="keywordtype">size_t</span> bt = strlen(fits_file) * <span class="keyword">sizeof</span>(*fits_file)+1;
-<a name="l00080"></a>00080         pret->fits_file_name = cpl_malloc(bt);
-<a name="l00081"></a>00081         strcpy(pret->fits_file_name, fits_file);
-<a name="l00082"></a>00082     }
-<a name="l00083"></a>00083     <span class="keywordflow">else</span>
-<a name="l00084"></a>00084     {
-<a name="l00085"></a>00085         pret->fits_file_name = 0;
-<a name="l00086"></a>00086     }
-<a name="l00087"></a>00087     <span class="keywordflow">return</span> pret;
-<a name="l00088"></a>00088 }
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 <span class="keyword">static</span> <span class="keywordtype">void</span> star_index_destruct(star_index* pindex)
-<a name="l00091"></a>00091 {
-<a name="l00092"></a>00092     <span class="keywordflow">if</span>(pindex)
-<a name="l00093"></a>00093     {
-<a name="l00094"></a>00094         <span class="keywordflow">if</span> (pindex->cache)
-<a name="l00095"></a>00095         {
-<a name="l00096"></a>00096             <span class="keywordtype">int</span> i = 0;
-<a name="l00097"></a>00097             <span class="keywordflow">for</span> ( i = 0; i < pindex->cache_size; i++)
-<a name="l00098"></a>00098             {
-<a name="l00099"></a>00099                 cpl_table_delete(pindex->cache[i]);
-<a name="l00100"></a>00100             }
-<a name="l00101"></a>00101             cpl_free(pindex->cache);
-<a name="l00102"></a>00102             pindex->cache = 0;
-<a name="l00103"></a>00103             pindex->cache_size = 0;
-<a name="l00104"></a>00104         }
-<a name="l00105"></a>00105         cpl_table_delete(pindex->index_table);
-<a name="l00106"></a>00106         <span class="keywordflow">if</span>(pindex->fits_file_name)
-<a name="l00107"></a>00107         {
-<a name="l00108"></a>00108             cpl_free(pindex->fits_file_name);
-<a name="l00109"></a>00109         }
-<a name="l00110"></a>00110         cpl_free(pindex->cache_index);
-<a name="l00111"></a>00111         cpl_free(pindex);
-<a name="l00112"></a>00112     }
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00118"></a>00118 star_index* star_index_create(<span class="keywordtype">void</span>)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120     star_index* pret = star_index_construct(0);
-<a name="l00121"></a>00121     <span class="comment">// initialize table</span>
-<a name="l00122"></a>00122     check_nomsg(pret->index_table = cpl_table_new(pret->index_size));
-<a name="l00123"></a>00123     <span class="comment">// create columns ext_id, name, ra, dec</span>
-<a name="l00124"></a>00124     cpl_table_new_column(pret->index_table, COL_NAME_EXTID, CPL_TYPE_INT);
-<a name="l00125"></a>00125     cpl_table_new_column(pret->index_table, COL_NAME_NAME, CPL_TYPE_STRING);
-<a name="l00126"></a>00126     cpl_table_new_column(pret->index_table, COL_NAME_RA, CPL_TYPE_DOUBLE);
-<a name="l00127"></a>00127     cpl_table_new_column(pret->index_table, COL_NAME_DEC, CPL_TYPE_DOUBLE);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="keywordflow">return</span> pret;
-<a name="l00130"></a>00130     cleanup:
-<a name="l00131"></a>00131     star_index_destruct(pret);
-<a name="l00132"></a>00132     <span class="keywordflow">return</span> 0;
-<a name="l00133"></a>00133 }
-<a name="l00134"></a>00134 star_index* star_index_load(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)
-<a name="l00135"></a>00135 {
-<a name="l00136"></a>00136     star_index* pret = star_index_construct(fits_file);
-<a name="l00137"></a>00137     <span class="comment">// load index table from the file</span>
-<a name="l00138"></a>00138     cpl_table* pindex = 0;
-<a name="l00139"></a>00139     check_nomsg(pindex = cpl_table_load(fits_file,1,0));
-<a name="l00140"></a>00140     <span class="comment">// TODO check_nomsg the structure of the table</span>
-<a name="l00141"></a>00141     pret->index_table = pindex;
-<a name="l00142"></a>00142     check_nomsg(pret->index_size = cpl_table_get_nrow(pindex));
-<a name="l00143"></a>00143     <span class="keywordflow">return</span> pret;
-<a name="l00144"></a>00144     cleanup:
-<a name="l00145"></a>00145     star_index_destruct(pret);
-<a name="l00146"></a>00146     cpl_error_reset();
-<a name="l00147"></a>00147     <span class="keywordflow">return</span> 0;
-<a name="l00148"></a>00148 }
-<a name="l00149"></a>00149 <span class="keywordtype">void</span> star_index_delete(star_index* pindex)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151     star_index_destruct(pindex);
-<a name="l00152"></a>00152 }
-<a name="l00153"></a>00153 <span class="keywordtype">int</span> star_index_add(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name, cpl_table* ptable)
-<a name="l00154"></a>00154 {
-<a name="l00155"></a>00155     <span class="keywordtype">int</span> retval = 0;
-<a name="l00156"></a>00156     <span class="keywordflow">if</span> (pindex)
-<a name="l00157"></a>00157     {
-<a name="l00158"></a>00158         <span class="comment">// expand the index table</span>
-<a name="l00159"></a>00159         check_nomsg(cpl_table_insert_window(pindex->index_table, pindex->index_size++, 1));
-<a name="l00160"></a>00160         <span class="keywordflow">if</span> (!pindex->cache)
-<a name="l00161"></a>00161         {
-<a name="l00162"></a>00162             pindex->cache_size = 1;
-<a name="l00163"></a>00163             pindex->cache = cpl_malloc(<span class="keyword">sizeof</span>(cpl_table*) * pindex->cache_size);
-<a name="l00164"></a>00164             pindex->cache_index = cpl_malloc(<span class="keyword">sizeof</span>(pindex->cache_index[0]) * pindex->cache_size);
-<a name="l00165"></a>00165         }
-<a name="l00166"></a>00166         <span class="keywordflow">else</span>
-<a name="l00167"></a>00167         {
-<a name="l00168"></a>00168             <span class="comment">// add new entry</span>
-<a name="l00169"></a>00169             pindex->cache_size++;
-<a name="l00170"></a>00170             pindex->cache = cpl_realloc(pindex->cache, <span class="keyword">sizeof</span>(cpl_table*) * pindex->cache_size);
-<a name="l00171"></a>00171         }
-<a name="l00172"></a>00172         check_nomsg(pindex->cache[pindex->cache_size - 1] = cpl_table_duplicate(ptable));
-<a name="l00173"></a>00173         <span class="comment">// fill the index table with values</span>
-<a name="l00174"></a>00174         check_nomsg(cpl_table_set_string(pindex->index_table, COL_NAME_NAME, pindex->index_size - 1 ,star_name));
-<a name="l00175"></a>00175         check_nomsg(cpl_table_set(pindex->index_table, COL_NAME_RA, pindex->index_size - 1 ,RA));
-<a name="l00176"></a>00176         check_nomsg(cpl_table_set(pindex->index_table, COL_NAME_DEC, pindex->index_size - 1,DEC));
-<a name="l00177"></a>00177         check_nomsg(cpl_table_set_int(pindex->index_table, COL_NAME_EXTID, pindex->index_size - 1 ,pindex->index_size + 1));
-<a name="l00178"></a>00178         retval = pindex->index_size;
-<a name="l00179"></a>00179     }
-<a name="l00180"></a>00180     <span class="keywordflow">return</span> retval;
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     cleanup:
-<a name="l00183"></a>00183     <span class="comment">//printf ("error: %s\n", cpl_error_get_message());</span>
-<a name="l00184"></a>00184     <span class="keywordflow">return</span> 0;
-<a name="l00185"></a>00185 }
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187 <span class="keywordtype">int</span> start_index_get_size(star_index* pindex)
-<a name="l00188"></a>00188 {
-<a name="l00189"></a>00189     <span class="keywordflow">return</span> pindex ? pindex->index_size : 0;
-<a name="l00190"></a>00190 }
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="keywordtype">int</span> star_index_remove_by_name(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* starname)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194     <span class="keywordtype">int</span> i = 0;
-<a name="l00195"></a>00195     <span class="keywordtype">int</span> index_pos = -1;
-<a name="l00196"></a>00196     <span class="keywordflow">for</span> (i = 0; i < pindex->index_size; i++)
-<a name="l00197"></a>00197     {
-<a name="l00198"></a>00198         <span class="keyword">const</span> <span class="keywordtype">char</span>* curr_star_name = 0;
-<a name="l00199"></a>00199         check_nomsg(curr_star_name = cpl_table_get_string(pindex->index_table, COL_NAME_NAME, i));
-<a name="l00200"></a>00200         <span class="keywordflow">if</span> (strcmp(curr_star_name, starname) == 0)
-<a name="l00201"></a>00201         {
-<a name="l00202"></a>00202             index_pos = i;
-<a name="l00203"></a>00203             <span class="keywordflow">break</span>;
-<a name="l00204"></a>00204         }
-<a name="l00205"></a>00205     }
-<a name="l00206"></a>00206     <span class="keywordflow">if</span> (index_pos >= 0)
-<a name="l00207"></a>00207     {
-<a name="l00208"></a>00208         <span class="comment">// star is found</span>
-<a name="l00209"></a>00209         <span class="comment">// clear only the index table, real data would be cleaned during save operation</span>
-<a name="l00210"></a>00210         cpl_table_set_int(pindex->index_table, COL_NAME_EXTID, index_pos, -1);
-<a name="l00211"></a>00211         <span class="keywordflow">if</span> (index_pos - pindex->index_size + pindex->cache_size  >= 0)
-<a name="l00212"></a>00212         {
-<a name="l00213"></a>00213             <span class="comment">// clear cache</span>
-<a name="l00214"></a>00214             <span class="keywordtype">int</span> cache_index = index_pos - pindex->index_size + pindex->cache_size;
-<a name="l00215"></a>00215             cpl_table_delete(pindex->cache[cache_index]);
-<a name="l00216"></a>00216             pindex->cache[cache_index] = 0;
-<a name="l00217"></a>00217         }
-<a name="l00218"></a>00218     }
-<a name="l00219"></a>00219     cleanup:
-<a name="l00220"></a>00220     <span class="keywordflow">return</span> index_pos;
-<a name="l00221"></a>00221 }
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="keywordtype">int</span> star_index_save(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)
-<a name="l00224"></a>00224 {
-<a name="l00225"></a>00225     <span class="keywordtype">int</span> i  = 0;
-<a name="l00226"></a>00226     <span class="keywordtype">int</span> inull = 0;
-<a name="l00227"></a>00227     cpl_table* pnew_index = 0;
-<a name="l00228"></a>00228     <span class="keywordtype">int</span> nrows = 0;
-<a name="l00229"></a>00229     <span class="comment">// firstly save the index table - deleted entries should be removed firstly</span>
-<a name="l00230"></a>00230     check_nomsg(cpl_table_unselect_all(pindex->index_table));
-<a name="l00231"></a>00231     check_nomsg(cpl_table_or_selected_int(pindex->index_table, COL_NAME_EXTID, CPL_EQUAL_TO, -1));
-<a name="l00232"></a>00232     <span class="comment">// inverse selection</span>
-<a name="l00233"></a>00233     check_nomsg(cpl_table_not_selected(pindex->index_table));
-<a name="l00234"></a>00234     check_nomsg(pnew_index = cpl_table_extract_selected(pindex->index_table));
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     nrows = cpl_table_get_nrow(pnew_index);
-<a name="l00237"></a>00237 <span class="comment">//  printf("rows to save[%d]\n", nrows);</span>
-<a name="l00238"></a>00238     <span class="keywordflow">for</span> (i = 0; i < nrows; i++)
-<a name="l00239"></a>00239     {
-<a name="l00240"></a>00240         cpl_table_set_int(pnew_index, COL_NAME_EXTID, i, i+2); <span class="comment">// ext in fits starts from 1, and another 1 is used by index_table</span>
-<a name="l00241"></a>00241     }
-<a name="l00242"></a>00242 <span class="comment">//  printf("writing index [%s]\n", fits_file);</span>
-<a name="l00243"></a>00243     check_nomsg(cpl_table_save(pnew_index, NULL, NULL, fits_file, CPL_IO_CREATE));
-<a name="l00244"></a>00244     cpl_table_delete(pnew_index);
-<a name="l00245"></a>00245     pnew_index = 0;
-<a name="l00246"></a>00246     <span class="comment">// save the data</span>
-<a name="l00247"></a>00247     <span class="keywordflow">for</span> (i = 0;i < pindex->index_size; i++)
-<a name="l00248"></a>00248     {
-<a name="l00249"></a>00249 <span class="comment">//      printf("saving ext [%d]\n", i);</span>
-<a name="l00250"></a>00250         <span class="comment">// 2. save cache</span>
-<a name="l00251"></a>00251         <span class="keywordtype">int</span> saved_ext = cpl_table_get_int(pindex->index_table, COL_NAME_EXTID, i, &inull);
-<a name="l00252"></a>00252 <span class="comment">//      printf("saving 1\n");</span>
-<a name="l00253"></a>00253         <span class="keywordflow">if</span> (saved_ext > 0) <span class="comment">// check_nomsg that was not removed</span>
-<a name="l00254"></a>00254         {
-<a name="l00255"></a>00255             cpl_table* ptable = 0;
-<a name="l00256"></a>00256 <span class="comment">//          printf("saving 2\n");</span>
-<a name="l00257"></a>00257             <span class="keywordflow">if</span> (i < pindex->index_size - pindex->cache_size)
-<a name="l00258"></a>00258             {
-<a name="l00259"></a>00259 <span class="comment">//              printf("saving 3\n");</span>
-<a name="l00260"></a>00260                 check_nomsg(ptable = cpl_table_load(pindex->fits_file_name, saved_ext, 0));
-<a name="l00261"></a>00261             }
-<a name="l00262"></a>00262             <span class="keywordflow">else</span>
-<a name="l00263"></a>00263             {
-<a name="l00264"></a>00264 <span class="comment">//              printf("saving 4\n");</span>
-<a name="l00265"></a>00265                 ptable = cpl_table_duplicate(pindex->cache[i - pindex->index_size + pindex->cache_size ]);
-<a name="l00266"></a>00266             }
-<a name="l00267"></a>00267 <span class="comment">//          printf("saving 5\n");</span>
-<a name="l00268"></a>00268             check_nomsg(cpl_table_save(ptable, NULL, NULL, fits_file, CPL_IO_EXTEND));
-<a name="l00269"></a>00269 <span class="comment">//          printf("saving 6\n");</span>
-<a name="l00270"></a>00270             cpl_table_delete(ptable);
-<a name="l00271"></a>00271 <span class="comment">//          printf("saving 7\n");</span>
-<a name="l00272"></a>00272         }
-<a name="l00273"></a>00273 <span class="comment">//      printf("saving 8\n");</span>
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275 <span class="comment">//  printf("saving exit\n");</span>
-<a name="l00276"></a>00276     <span class="keywordflow">return</span> nrows;
-<a name="l00277"></a>00277     cleanup:
-<a name="l00278"></a>00278 <span class="comment">//  printf("error during save\n");</span>
-<a name="l00279"></a>00279     <span class="keywordflow">return</span> 0;
-<a name="l00280"></a>00280 }
-<a name="l00281"></a>00281 cpl_table* star_index_get(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keywordtype">double</span> RA_EPS, <span class="keywordtype">double</span> DEC_EPS, <span class="keyword">const</span> <span class="keywordtype">char</span>** pstar_name)
-<a name="l00282"></a>00282 {
-<a name="l00283"></a>00283     <span class="keywordtype">int</span> i = 0;
-<a name="l00284"></a>00284     cpl_table* pret = 0;
-<a name="l00285"></a>00285     <span class="keywordtype">int</span> inull = 0;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keywordflow">for</span> (i = 0; i < pindex->index_size; i++)
-<a name="l00288"></a>00288     {
-<a name="l00289"></a>00289         <span class="keywordtype">double</span> curr_ra = 0;
-<a name="l00290"></a>00290         <span class="keywordtype">double</span> curr_dec = 0;
-<a name="l00291"></a>00291         <span class="keywordtype">int</span> ext_id = 0;
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293         check_nomsg(ext_id = cpl_table_get_int(pindex->index_table, COL_NAME_EXTID, i ,&inull));
-<a name="l00294"></a>00294         check_nomsg(curr_ra = cpl_table_get(pindex->index_table, COL_NAME_RA, i,&inull));
-<a name="l00295"></a>00295         check_nomsg(curr_dec = cpl_table_get(pindex->index_table, COL_NAME_DEC, i,&inull));
-<a name="l00296"></a>00296         <span class="keywordflow">if</span> ((ext_id > 0) && (fabs(curr_ra - RA) < RA_EPS) && (fabs(curr_dec - DEC) < DEC_EPS))
-<a name="l00297"></a>00297         {
-<a name="l00298"></a>00298             <span class="comment">// found</span>
-<a name="l00299"></a>00299             <span class="comment">// retrieve the data</span>
-<a name="l00300"></a>00300             <span class="keywordflow">if</span> (i - pindex->index_size + pindex->cache_size  >= 0)
-<a name="l00301"></a>00301             {
-<a name="l00302"></a>00302                 <span class="comment">// data is in cache</span>
-<a name="l00303"></a>00303                 pret = cpl_table_duplicate(pindex->cache[i - pindex->index_size + pindex->cache_size ]);
-<a name="l00304"></a>00304             }
-<a name="l00305"></a>00305             <span class="keywordflow">else</span>
-<a name="l00306"></a>00306             {
-<a name="l00307"></a>00307                 <span class="comment">// data is on disk</span>
-<a name="l00308"></a>00308                 pret = cpl_table_load(pindex->fits_file_name, ext_id, 0);
-<a name="l00309"></a>00309             }
-<a name="l00310"></a>00310             <span class="keywordflow">if</span> (pret && pstar_name)
-<a name="l00311"></a>00311             {
-<a name="l00312"></a>00312                 check_nomsg(*pstar_name = cpl_table_get_string(pindex->index_table, COL_NAME_NAME, i));
-<a name="l00313"></a>00313             }
-<a name="l00314"></a>00314             <span class="keywordflow">break</span>;
-<a name="l00315"></a>00315         }
-<a name="l00316"></a>00316     }
-<a name="l00317"></a>00317     cleanup:
-<a name="l00318"></a>00318     <span class="keywordflow">return</span> pret;
-<a name="l00319"></a>00319 }
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321 <span class="keywordtype">void</span> star_index_dump(star_index* pindex, FILE* pfile)
-<a name="l00322"></a>00322 {
-<a name="l00323"></a>00323     cpl_table_dump(pindex->index_table, 0,  cpl_table_get_nrow(pindex->index_table), pfile);
-<a name="l00324"></a>00324 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_star_index.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_star_index.c,v 1.9 2012/03/03 10:18:26 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the X-Shooter Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:18:26 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">//#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">//#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">//#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">//#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">//#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">//#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_star_index.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">struct </span>_star_index_</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     cpl_table* index_table;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordtype">char</span>* fits_file_name;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     <span class="keywordtype">int</span> index_size;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>     cpl_table** cache;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>     <span class="keywordtype">int</span> cache_size;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>     <span class="keywordtype">int</span>* cache_index;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> };</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">//typedef struct _star_index_ star_index;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_EXTID   = <span class="stringliteral">"ext_id"</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_NAME    = <span class="stringliteral">"name"</span>;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_RA  = <span class="stringliteral">"ra"</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* COL_NAME_DEC     = <span class="stringliteral">"dec"</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keyword">static</span> star_index* star_index_construct(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">void</span> star_index_destruct(star_index* pindex);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">// private functions</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> star_index* star_index_construct(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     star_index* pret = cpl_malloc(<span class="keyword">sizeof</span>(star_index));</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     pret->index_size = 0;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     pret->index_table = 0;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     pret->cache_size = 0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     pret->cache = 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     pret->cache_index = 0;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keywordflow">if</span> (fits_file)</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="keywordtype">size_t</span> bt = strlen(fits_file) * <span class="keyword">sizeof</span>(*fits_file)+1;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         pret->fits_file_name = cpl_malloc(bt);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         strcpy(pret->fits_file_name, fits_file);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         pret->fits_file_name = 0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordflow">return</span> pret;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">void</span> star_index_destruct(star_index* pindex)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordflow">if</span>(pindex)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keywordflow">if</span> (pindex->cache)</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>             <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>             <span class="keywordflow">for</span> ( i = 0; i < pindex->cache_size; i++)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>             {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                 cpl_table_delete(pindex->cache[i]);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>             }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>             cpl_free(pindex->cache);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>             pindex->cache = 0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>             pindex->cache_size = 0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>         }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         cpl_table_delete(pindex->index_table);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         <span class="keywordflow">if</span>(pindex->fits_file_name)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>         {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>             cpl_free(pindex->fits_file_name);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         }</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         cpl_free(pindex->cache_index);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         cpl_free(pindex);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> star_index* star_index_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     star_index* pret = star_index_construct(0);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">// initialize table</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     check_nomsg(pret->index_table = cpl_table_new(pret->index_size));</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">// create columns ext_id, name, ra, dec</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     cpl_table_new_column(pret->index_table, COL_NAME_EXTID, CPL_TYPE_INT);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     cpl_table_new_column(pret->index_table, COL_NAME_NAME, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     cpl_table_new_column(pret->index_table, COL_NAME_RA, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     cpl_table_new_column(pret->index_table, COL_NAME_DEC, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">return</span> pret;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     cleanup:</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     star_index_destruct(pret);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> star_index* star_index_load(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     star_index* pret = star_index_construct(fits_file);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="comment">// load index table from the file</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     cpl_table* pindex = 0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     check_nomsg(pindex = cpl_table_load(fits_file,1,0));</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">// TODO check_nomsg the structure of the table</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     pret->index_table = pindex;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     check_nomsg(pret->index_size = cpl_table_get_nrow(pindex));</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">return</span> pret;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cleanup:</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     star_index_destruct(pret);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keywordtype">void</span> star_index_delete(star_index* pindex)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     star_index_destruct(pindex);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keywordtype">int</span> star_index_add(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name, cpl_table* ptable)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordtype">int</span> retval = 0;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">if</span> (pindex)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="comment">// expand the index table</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         check_nomsg(cpl_table_insert_window(pindex->index_table, pindex->index_size++, 1));</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <span class="keywordflow">if</span> (!pindex->cache)</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>             pindex->cache_size = 1;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>             pindex->cache = cpl_malloc(<span class="keyword">sizeof</span>(cpl_table*) * pindex->cache_size);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>             pindex->cache_index = cpl_malloc(<span class="keyword">sizeof</span>(pindex->cache_index[0]) * pindex->cache_size);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>             <span class="comment">// add new entry</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>             pindex->cache_size++;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>             pindex->cache = cpl_realloc(pindex->cache, <span class="keyword">sizeof</span>(cpl_table*) * pindex->cache_size);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         check_nomsg(pindex->cache[pindex->cache_size - 1] = cpl_table_duplicate(ptable));</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="comment">// fill the index table with values</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         check_nomsg(cpl_table_set_string(pindex->index_table, COL_NAME_NAME, pindex->index_size - 1 ,star_name));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         check_nomsg(cpl_table_set(pindex->index_table, COL_NAME_RA, pindex->index_size - 1 ,RA));</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>         check_nomsg(cpl_table_set(pindex->index_table, COL_NAME_DEC, pindex->index_size - 1,DEC));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         check_nomsg(cpl_table_set_int(pindex->index_table, COL_NAME_EXTID, pindex->index_size - 1 ,pindex->index_size + 1));</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         retval = pindex->index_size;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cleanup:</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">//printf ("error: %s\n", cpl_error_get_message());</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keywordtype">int</span> start_index_get_size(star_index* pindex)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">return</span> pindex ? pindex->index_size : 0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keywordtype">int</span> star_index_remove_by_name(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* starname)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordtype">int</span> index_pos = -1;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordflow">for</span> (i = 0; i < pindex->index_size; i++)</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>* curr_star_name = 0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         check_nomsg(curr_star_name = cpl_table_get_string(pindex->index_table, COL_NAME_NAME, i));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordflow">if</span> (strcmp(curr_star_name, starname) == 0)</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>         {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>             index_pos = i;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordflow">if</span> (index_pos >= 0)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         <span class="comment">// star is found</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         <span class="comment">// clear only the index table, real data would be cleaned during save operation</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         cpl_table_set_int(pindex->index_table, COL_NAME_EXTID, index_pos, -1);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <span class="keywordflow">if</span> (index_pos - pindex->index_size + pindex->cache_size  >= 0)</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>         {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>             <span class="comment">// clear cache</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>             <span class="keywordtype">int</span> cache_index = index_pos - pindex->index_size + pindex->cache_size;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>             cpl_table_delete(pindex->cache[cache_index]);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             pindex->cache[cache_index] = 0;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cleanup:</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">return</span> index_pos;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="keywordtype">int</span> star_index_save(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file)</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordtype">int</span> i  = 0;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordtype">int</span> inull = 0;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     cpl_table* pnew_index = 0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordtype">int</span> nrows = 0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="comment">// firstly save the index table - deleted entries should be removed firstly</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     check_nomsg(cpl_table_unselect_all(pindex->index_table));</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     check_nomsg(cpl_table_or_selected_int(pindex->index_table, COL_NAME_EXTID, CPL_EQUAL_TO, -1));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="comment">// inverse selection</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     check_nomsg(cpl_table_not_selected(pindex->index_table));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     check_nomsg(pnew_index = cpl_table_extract_selected(pindex->index_table));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     nrows = cpl_table_get_nrow(pnew_index);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">//  printf("rows to save[%d]\n", nrows);</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">for</span> (i = 0; i < nrows; i++)</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         cpl_table_set_int(pnew_index, COL_NAME_EXTID, i, i+2); <span class="comment">// ext in fits starts from 1, and another 1 is used by index_table</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">//  printf("writing index [%s]\n", fits_file);</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     check_nomsg(cpl_table_save(pnew_index, NULL, NULL, fits_file, CPL_IO_CREATE));</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_table_delete(pnew_index);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     pnew_index = 0;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="comment">// save the data</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordflow">for</span> (i = 0;i < pindex->index_size; i++)</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">//      printf("saving ext [%d]\n", i);</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         <span class="comment">// 2. save cache</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         <span class="keywordtype">int</span> saved_ext = cpl_table_get_int(pindex->index_table, COL_NAME_EXTID, i, &inull);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">//      printf("saving 1\n");</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         <span class="keywordflow">if</span> (saved_ext > 0) <span class="comment">// check_nomsg that was not removed</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         {</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>             cpl_table* ptable = 0;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">//          printf("saving 2\n");</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             <span class="keywordflow">if</span> (i < pindex->index_size - pindex->cache_size)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>             {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">//              printf("saving 3\n");</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                 check_nomsg(ptable = cpl_table_load(pindex->fits_file_name, saved_ext, 0));</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>             }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>             {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="comment">//              printf("saving 4\n");</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                 ptable = cpl_table_duplicate(pindex->cache[i - pindex->index_size + pindex->cache_size ]);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>             }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">//          printf("saving 5\n");</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>             check_nomsg(cpl_table_save(ptable, NULL, NULL, fits_file, CPL_IO_EXTEND));</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">//          printf("saving 6\n");</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>             cpl_table_delete(ptable);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">//          printf("saving 7\n");</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">//      printf("saving 8\n");</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">//  printf("saving exit\n");</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">return</span> nrows;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cleanup:</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">//  printf("error during save\n");</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> cpl_table* star_index_get(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keywordtype">double</span> RA_EPS, <span class="keywordtype">double</span> DEC_EPS, <span class="keyword">const</span> <span class="keywordtype">char</span>** pstar_name)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     cpl_table* pret = 0;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordtype">int</span> inull = 0;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordflow">for</span> (i = 0; i < pindex->index_size; i++)</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         <span class="keywordtype">double</span> curr_ra = 0;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         <span class="keywordtype">double</span> curr_dec = 0;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         <span class="keywordtype">int</span> ext_id = 0;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         check_nomsg(ext_id = cpl_table_get_int(pindex->index_table, COL_NAME_EXTID, i ,&inull));</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         check_nomsg(curr_ra = cpl_table_get(pindex->index_table, COL_NAME_RA, i,&inull));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         check_nomsg(curr_dec = cpl_table_get(pindex->index_table, COL_NAME_DEC, i,&inull));</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         <span class="keywordflow">if</span> ((ext_id > 0) && (fabs(curr_ra - RA) < RA_EPS) && (fabs(curr_dec - DEC) < DEC_EPS))</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>         {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>             <span class="comment">// found</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>             <span class="comment">// retrieve the data</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>             <span class="keywordflow">if</span> (i - pindex->index_size + pindex->cache_size  >= 0)</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>             {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                 <span class="comment">// data is in cache</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                 pret = cpl_table_duplicate(pindex->cache[i - pindex->index_size + pindex->cache_size ]);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>             }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>             {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                 <span class="comment">// data is on disk</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                 pret = cpl_table_load(pindex->fits_file_name, ext_id, 0);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             <span class="keywordflow">if</span> (pret && pstar_name)</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 check_nomsg(*pstar_name = cpl_table_get_string(pindex->index_table, COL_NAME_NAME, i));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>         }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     cleanup:</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">return</span> pret;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="keywordtype">void</span> star_index_dump(star_index* pindex, FILE* pfile)</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     cpl_table_dump(pindex->index_table, 0,  cpl_table_get_nrow(pindex->index_table), pfile);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__star__index_8h_source.html b/html/sinfo__star__index_8h_source.html
index 580642a..f1adb9e 100644
--- a/html/sinfo__star__index_8h_source.html
+++ b/html/sinfo__star__index_8h_source.html
@@ -2,77 +2,108 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_star_index.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_star_index.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*</span>
-<a name="l00020"></a>00020 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Date: 2009/09/02 11:34:23 $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Revision: 1.4 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Log: sinfo_star_index.h,v $</span>
-<a name="l00024"></a>00024 <span class="comment"> * Revision 1.4  2009/09/02 11:34:23  kmirny</span>
-<a name="l00025"></a>00025 <span class="comment"> * fixing compiler warning</span>
-<a name="l00026"></a>00026 <span class="comment"> *</span>
-<a name="l00027"></a>00027 <span class="comment"> * Revision 1.3  2009/07/13 14:40:39  kmirny</span>
-<a name="l00028"></a>00028 <span class="comment"> * fixing unit test failure in star catalog</span>
-<a name="l00029"></a>00029 <span class="comment"> *</span>
-<a name="l00030"></a>00030 <span class="comment"> * Revision 1.2  2009/06/19 14:37:58  kmirny</span>
-<a name="l00031"></a>00031 <span class="comment"> * star index implementation</span>
-<a name="l00032"></a>00032 <span class="comment"> *</span>
-<a name="l00033"></a>00033 <span class="comment"> * Revision 1.1  2009/06/16 15:18:26  kmirny</span>
-<a name="l00034"></a>00034 <span class="comment"> * star catalog implementation for calculating efficiency</span>
-<a name="l00035"></a>00035 <span class="comment"> *</span>
-<a name="l00036"></a>00036 <span class="comment">*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _SINFONI_SINFO_STAR_INDEX_H_</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _SINFONI_SINFO_STAR_INDEX_H_</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keyword">typedef</span> <span class="keyword">struct </span>_star_index_ star_index;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* Loading the index from the fits file</span>
-<a name="l00044"></a>00044 <span class="comment"> * */</span>
-<a name="l00045"></a>00045 star_index* star_index_load(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file);
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*Save the index to the fits file</span>
-<a name="l00048"></a>00048 <span class="comment"> * */</span>
-<a name="l00049"></a>00049 star_index* star_index_create(<span class="keywordtype">void</span>);
-<a name="l00050"></a>00050 <span class="comment">/* Add a new start to the index. To save the changed index to the file star_index_save() should be called</span>
-<a name="l00051"></a>00051 <span class="comment"> * */</span>
-<a name="l00052"></a>00052 <span class="keywordtype">int</span> star_index_add(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name, cpl_table* ptable);
-<a name="l00053"></a>00053 <span class="keywordtype">int</span> star_index_remove_by_name(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* starname);
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> start_index_get_size(star_index* pindex);
-<a name="l00055"></a>00055 <span class="keywordtype">int</span> star_index_save(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file_name);
-<a name="l00056"></a>00056 cpl_table* star_index_get(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keywordtype">double</span> RA_EPS, <span class="keywordtype">double</span> DEC_EPS, <span class="keyword">const</span> <span class="keywordtype">char</span>** pstar_name);
-<a name="l00057"></a>00057 <span class="keywordtype">void</span> star_index_delete(star_index* pindex);
-<a name="l00058"></a>00058 <span class="keywordtype">void</span> star_index_dump(star_index* pindex, FILE* pfile);
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_star_index.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Date: 2009/09/02 11:34:23 $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Log: sinfo_star_index.h,v $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * Revision 1.4  2009/09/02 11:34:23  kmirny</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * fixing compiler warning</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * Revision 1.3  2009/07/13 14:40:39  kmirny</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * fixing unit test failure in star catalog</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * Revision 1.2  2009/06/19 14:37:58  kmirny</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * star index implementation</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * Revision 1.1  2009/06/16 15:18:26  kmirny</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * star catalog implementation for calculating efficiency</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#ifndef _SINFONI_SINFO_STAR_INDEX_H_</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define _SINFONI_SINFO_STAR_INDEX_H_</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>_star_index_ star_index;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* Loading the index from the fits file</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> star_index* star_index_load(<span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*Save the index to the fits file</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> * */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> star_index* star_index_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* Add a new start to the index. To save the changed index to the file star_index_save() should be called</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> * */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">int</span> star_index_add(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name, cpl_table* ptable);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keywordtype">int</span> star_index_remove_by_name(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* starname);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> start_index_get_size(star_index* pindex);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">int</span> star_index_save(star_index* pindex, <span class="keyword">const</span> <span class="keywordtype">char</span>* fits_file_name);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> cpl_table* star_index_get(star_index* pindex, <span class="keywordtype">double</span> RA, <span class="keywordtype">double</span> DEC, <span class="keywordtype">double</span> RA_EPS, <span class="keywordtype">double</span> DEC_EPS, <span class="keyword">const</span> <span class="keywordtype">char</span>** pstar_name);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">void</span> star_index_delete(star_index* pindex);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">void</span> star_index_dump(star_index* pindex, FILE* pfile);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__step__distortion_8c_source.html b/html/sinfo__step__distortion_8c_source.html
index 7f6d269..64b61e1 100644
--- a/html/sinfo__step__distortion_8c_source.html
+++ b/html/sinfo__step__distortion_8c_source.html
@@ -2,317 +2,348 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_step_distortion.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_step_distortion.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_step_distortion.c,v 1.20 2008/02/12 14:56:50 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.20 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Distortion Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <strings.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>      
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_north_south_test_config.h></span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_distortion_config.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_new_find_distortions.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_new_nst.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00061"></a>00061 <span class="comment">//Only for sinfo_propertylist_has</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_dfs.h></span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keywordtype">int</span> sinfo_step_distortion_create(cpl_plugin *plugin);
-<a name="l00065"></a>00065 <span class="keywordtype">int</span> sinfo_step_distortion_exec(cpl_plugin *plugin);
-<a name="l00066"></a>00066 <span class="keywordtype">int</span> sinfo_step_distortion_destroy(cpl_plugin *plugin);
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keywordtype">void</span> sinfo_find_distortion_config_add(cpl_parameterlist *); 
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079  <span class="comment">/*</span>
-<a name="l00080"></a>00080 <span class="comment">  *</span>
-<a name="l00081"></a>00081 <span class="comment">  * Create the recipe instance, i.e. setup the parameter list for this</span>
-<a name="l00082"></a>00082 <span class="comment">  * recipe and make it available to the application using the interface.</span>
-<a name="l00083"></a>00083 <span class="comment">  *</span>
-<a name="l00084"></a>00084 <span class="comment">  */</span>
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keywordtype">int</span>
-<a name="l00088"></a>00088 sinfo_step_distortion_create(cpl_plugin *plugin)
-<a name="l00089"></a>00089 {
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091   <span class="comment">/*</span>
-<a name="l00092"></a>00092 <span class="comment">   * We have to provide the option we accept to the application.</span>
-<a name="l00093"></a>00093 <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span>
-<a name="l00094"></a>00094 <span class="comment">   * interface.</span>
-<a name="l00095"></a>00095 <span class="comment">   */</span>
-<a name="l00096"></a>00096   cpl_recipe *recipe = (cpl_recipe *)plugin;
-<a name="l00097"></a>00097   recipe->parameters = cpl_parameterlist_new();
-<a name="l00098"></a>00098   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00099"></a>00099     <span class="keywordflow">return</span> 1;
-<a name="l00100"></a>00100   }
-<a name="l00101"></a>00101   cpl_error_reset();
-<a name="l00102"></a>00102   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   <span class="comment">/*</span>
-<a name="l00105"></a>00105 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00106"></a>00106 <span class="comment">   */</span>
-<a name="l00107"></a>00107   sinfo_product_config_add(recipe->parameters);
-<a name="l00108"></a>00108   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00109"></a>00109   sinfo_distortion_config_add(recipe->parameters);
-<a name="l00110"></a>00110   sinfo_north_south_test_config_add(recipe->parameters);
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112   <span class="keywordflow">return</span> 0;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="keywordtype">int</span>
-<a name="l00117"></a>00117 sinfo_step_distortion_exec(cpl_plugin *plugin)
-<a name="l00118"></a>00118 {
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00121"></a>00121   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00122"></a>00122     <span class="keywordflow">return</span> 1;
-<a name="l00123"></a>00123   }
-<a name="l00124"></a>00124   <span class="keywordflow">if</span>(recipe->frames == NULL) {
-<a name="l00125"></a>00125     <span class="keywordflow">return</span> 1;
-<a name="l00126"></a>00126   }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   <span class="keywordflow">return</span> sinfo_step_distortion(recipe->parameters, recipe->frames);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 }
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="keywordtype">int</span>
-<a name="l00134"></a>00134 sinfo_step_distortion_destroy(cpl_plugin *plugin)
-<a name="l00135"></a>00135 {
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00138"></a>00138   <span class="comment">/*</span>
-<a name="l00139"></a>00139 <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span>
-<a name="l00140"></a>00140 <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span>
-<a name="l00141"></a>00141 <span class="comment">   * called us, so that we must not touch it.</span>
-<a name="l00142"></a>00142 <span class="comment">   */</span>
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   <span class="keywordflow">return</span> 0;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 }
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 <span class="keywordtype">int</span>
-<a name="l00151"></a>00151 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00152"></a>00152 {
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00155"></a>00155   cpl_plugin *plugin = &recipe->interface;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   cpl_plugin_init(plugin,
-<a name="l00159"></a>00159           CPL_PLUGIN_API,
-<a name="l00160"></a>00160           SINFONI_BINARY_VERSION,
-<a name="l00161"></a>00161           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00162"></a>00162           <span class="stringliteral">"sinfo_step_distortion"</span>,
-<a name="l00163"></a>00163           <span class="stringliteral">"Find Distortions in frames"</span>,
-<a name="l00164"></a>00164           <span class="stringliteral">"TBD"</span>,
-<a name="l00165"></a>00165           <span class="stringliteral">"A. Modigliani"</span>,
-<a name="l00166"></a>00166           <span class="stringliteral">"amodigli at eso.org"</span>,
-<a name="l00167"></a>00167           <span class="stringliteral">"No license"</span>,
-<a name="l00168"></a>00168           sinfo_step_distortion_create,
-<a name="l00169"></a>00169           sinfo_step_distortion_exec,
-<a name="l00170"></a>00170           sinfo_step_distortion_destroy);
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172   cpl_pluginlist_append(list, plugin);
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="keywordflow">return</span> 0;
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176 }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 <span class="comment">/*</span>
-<a name="l00180"></a>00180 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00181"></a>00181 <span class="comment"> */</span>
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00184"></a>00184 sinfo_step_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00185"></a>00185 {
-<a name="l00186"></a>00186  
-<a name="l00187"></a>00187  
-<a name="l00188"></a>00188   cpl_frame* frame=NULL;
-<a name="l00189"></a>00189   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];
-<a name="l00190"></a>00190   cpl_propertylist* plist=NULL;
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192   cpl_image* ima=NULL;
-<a name="l00193"></a>00193   fake* fk=NULL;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     <span class="comment">/* </span>
-<a name="l00198"></a>00198 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00199"></a>00199 <span class="comment">                DISTORTIONS </span>
-<a name="l00200"></a>00200 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00201"></a>00201 <span class="comment">     */</span>
-<a name="l00202"></a>00202    
-<a name="l00203"></a>00203          
-<a name="l00204"></a>00204   sinfo_msg(<span class="stringliteral">"COMPUTE DISTORTIONS"</span>) ; 
-<a name="l00205"></a>00205   ck0(sinfo_new_find_distortions(cpl_func,config,<span class="keyword">set</span>),
-<a name="l00206"></a>00206       <span class="stringliteral">"COMPUTE DISTORTION FAILED"</span>);
-<a name="l00207"></a>00207    
-<a name="l00208"></a>00208   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED)) {
-<a name="l00209"></a>00209     frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);
-<a name="l00210"></a>00210     strcpy(file_name,cpl_frame_get_filename(frame));
-<a name="l00211"></a>00211   } <span class="keywordflow">else</span> {
-<a name="l00212"></a>00212     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED);
-<a name="l00213"></a>00213     <span class="keywordflow">goto</span> cleanup;
-<a name="l00214"></a>00214   }
-<a name="l00215"></a>00215   ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   cknull(plist = cpl_propertylist_load(file_name, 0),
-<a name="l00218"></a>00218                 <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l00222"></a>00222     cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);
-<a name="l00223"></a>00223   } <span class="keywordflow">else</span> {
-<a name="l00224"></a>00224     cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON) ;
-<a name="l00225"></a>00225   }
-<a name="l00226"></a>00226      
-<a name="l00227"></a>00227   sinfo_free_image(&ima);
-<a name="l00228"></a>00228   sinfo_free_propertylist(&plist);
-<a name="l00229"></a>00229   sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS"</span>) ; 
-<a name="l00230"></a>00230   
-<a name="l00231"></a>00231     <span class="comment">/* </span>
-<a name="l00232"></a>00232 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00233"></a>00233 <span class="comment">       4th iteration: distort fake frame</span>
-<a name="l00234"></a>00234 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00235"></a>00235 <span class="comment">     */</span>
-<a name="l00236"></a>00236   
-<a name="l00237"></a>00237   sinfo_msg(<span class="stringliteral">"DISTORT FAKE FRAME"</span>);
-<a name="l00238"></a>00238   fk=sinfo_fake_new();
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240   strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED);
-<a name="l00241"></a>00241   fk->frm_switch=1;
-<a name="l00242"></a>00242   fk->mask_index=1;
-<a name="l00243"></a>00243   fk->ind_index=1;
-<a name="l00244"></a>00244   fk->flat_index=0;
-<a name="l00245"></a>00245   fk->wfix_index=1;
-<a name="l00246"></a>00246   fk->low_rej=0.0;
-<a name="l00247"></a>00247   fk->hig_rej=0.0;
-<a name="l00248"></a>00248   ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, 
-<a name="l00249"></a>00249                                        PRO_FIBRE_NS_STACKED_DIST, 0,fk),
-<a name="l00250"></a>00250                                        <span class="stringliteral">"FAILED STACKING FRAME"</span>) ;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   sinfo_msg(<span class="stringliteral">"SUCCESS: DISTORTED FAKE FRAME\n"</span>) ; 
-<a name="l00253"></a>00253   sinfo_fake_delete(&fk);
-<a name="l00254"></a>00254     
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST)) {
-<a name="l00257"></a>00257     frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00258"></a>00258     strcpy(file_name,cpl_frame_get_filename(frame));
-<a name="l00259"></a>00259   } <span class="keywordflow">else</span> {
-<a name="l00260"></a>00260     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED_DIST);
-<a name="l00261"></a>00261     <span class="keywordflow">goto</span> cleanup;
-<a name="l00262"></a>00262   }
-<a name="l00263"></a>00263   ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);
-<a name="l00264"></a>00264     
-<a name="l00265"></a>00265   cknull(plist = cpl_propertylist_load(file_name, 0),
-<a name="l00266"></a>00266                   <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
-<a name="l00270"></a>00270     cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);
-<a name="l00271"></a>00271   } <span class="keywordflow">else</span> {
-<a name="l00272"></a>00272     cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON) ;
-<a name="l00273"></a>00273   }
-<a name="l00274"></a>00274   sinfo_free_propertylist(&plist);
-<a name="l00275"></a>00275   sinfo_free_image(&ima);
-<a name="l00276"></a>00276   sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS\n"</span>) ; 
-<a name="l00277"></a>00277  
-<a name="l00278"></a>00278   
-<a name="l00279"></a>00279    
-<a name="l00280"></a>00280   
-<a name="l00281"></a>00281     <span class="comment">/* </span>
-<a name="l00282"></a>00282 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00283"></a>00283 <span class="comment">                               NST </span>
-<a name="l00284"></a>00284 <span class="comment">       ---------------------------------------------------------</span>
-<a name="l00285"></a>00285 <span class="comment">    */</span>
-<a name="l00286"></a>00286      
-<a name="l00287"></a>00287   sinfo_msg(<span class="stringliteral">"RUN NORD SUD TEST"</span>) ; 
-<a name="l00288"></a>00288   ck0(sinfo_new_nst(cpl_func,config, <span class="keyword">set</span> ),<span class="stringliteral">"NORTH SOUTH TEST FAILED"</span>) ;
-<a name="l00289"></a>00289   sinfo_msg(<span class="stringliteral">"SUCCESS: RUNNED NORD SUD TEST"</span>) ; 
-<a name="l00290"></a>00290   sinfo_msg(<span class="stringliteral">"SUCCESS: RECIPE\n"</span>) ;
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-<a name="l00293"></a>00293  cleanup:
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   sinfo_fake_delete(&fk);
-<a name="l00296"></a>00296   sinfo_free_propertylist(&plist) ;
-<a name="l00297"></a>00297   sinfo_free_image(&ima);
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00300"></a>00300     <span class="keywordflow">return</span> -1;
-<a name="l00301"></a>00301   } <span class="keywordflow">else</span> {
-<a name="l00302"></a>00302     <span class="keywordflow">return</span> 0;
-<a name="l00303"></a>00303   }
-<a name="l00304"></a>00304 }
-<a name="l00305"></a>00305 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_step_distortion.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_step_distortion.c,v 1.20 2008/02/12 14:56:50 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/12 14:56:50 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.20 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Distortion Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span>      </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_north_south_test_config.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_distortion_config.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_new_find_distortions.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_new_nst.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">//Only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_dfs.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">int</span> sinfo_step_distortion_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">int</span> sinfo_step_distortion_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">int</span> sinfo_step_distortion_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">void</span> sinfo_find_distortion_config_add(cpl_parameterlist *); </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>  <span class="comment">/*</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">  *</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">  * Create the recipe instance, i.e. setup the parameter list for this</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">  * recipe and make it available to the application using the interface.</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">  *</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> sinfo_step_distortion_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">   * We have to provide the option we accept to the application.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">   * interface.</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   cpl_recipe *recipe = (cpl_recipe *)plugin;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   recipe->parameters = cpl_parameterlist_new();</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>   }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   sinfo_distortion_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   sinfo_north_south_test_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> sinfo_step_distortion_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordflow">if</span>(recipe->frames == NULL) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">return</span> sinfo_step_distortion(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> sinfo_step_distortion_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">   * called us, so that we must not touch it.</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           <span class="stringliteral">"sinfo_step_distortion"</span>,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           <span class="stringliteral">"Find Distortions in frames"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"TBD"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           <span class="stringliteral">"A. Modigliani"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           <span class="stringliteral">"amodigli at eso.org"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           <span class="stringliteral">"No license"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_step_distortion_create,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           sinfo_step_distortion_exec,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           sinfo_step_distortion_destroy);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> sinfo_step_distortion(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>  </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>  </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordtype">char</span> file_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   cpl_image* ima=NULL;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   fake* fk=NULL;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">                DISTORTIONS </span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>    </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>          </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   sinfo_msg(<span class="stringliteral">"COMPUTE DISTORTIONS"</span>) ; </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   ck0(sinfo_new_find_distortions(cpl_func,config,<span class="keyword">set</span>),</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>       <span class="stringliteral">"COMPUTE DISTORTION FAILED"</span>);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>    </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED)) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     strcpy(file_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cknull(plist = cpl_propertylist_load(file_name, 0),</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                 <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON) ;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   }</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>      </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS"</span>) ; </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="comment">       4th iteration: distort fake frame</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   sinfo_msg(<span class="stringliteral">"DISTORT FAKE FRAME"</span>);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   fk=sinfo_fake_new();</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   strcpy(fk->pro_class,PRO_FIBRE_NS_STACKED);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   fk->frm_switch=1;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   fk->mask_index=1;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   fk->ind_index=1;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   fk->flat_index=0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   fk->wfix_index=1;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   fk->low_rej=0.0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   fk->hig_rej=0.0;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   ck0(sinfo_new_prepare_stacked_frames(cpl_func,config, <span class="keyword">set</span>, </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                        PRO_FIBRE_NS_STACKED_DIST, 0,fk),</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                        <span class="stringliteral">"FAILED STACKING FRAME"</span>) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   sinfo_msg(<span class="stringliteral">"SUCCESS: DISTORTED FAKE FRAME\n"</span>) ; </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">if</span>(NULL != cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST)) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     frame = cpl_frameset_find(<span class="keyword">set</span>,PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     strcpy(file_name,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame %s not found!"</span>, PRO_FIBRE_NS_STACKED_DIST);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   ima=cpl_image_load(file_name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cknull(plist = cpl_propertylist_load(file_name, 0),</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                   <span class="stringliteral">"getting header from reference ima frame %s"</span>,file_name);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cpl_propertylist_set_bool(plist, KEY_NAME_LAMP_HALO, LAMP_ON);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     cpl_propertylist_append_bool(plist, KEY_NAME_LAMP_HALO,LAMP_ON) ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   sinfo_msg(<span class="stringliteral">"SUCCESS: COMPUTED DISTORTIONS\n"</span>) ; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>  </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>    </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="comment">/* </span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="comment">                               NST </span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="comment">       ---------------------------------------------------------</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>      </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   sinfo_msg(<span class="stringliteral">"RUN NORD SUD TEST"</span>) ; </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   ck0(sinfo_new_nst(cpl_func,config, <span class="keyword">set</span> ),<span class="stringliteral">"NORTH SOUTH TEST FAILED"</span>) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   sinfo_msg(<span class="stringliteral">"SUCCESS: RUNNED NORD SUD TEST"</span>) ; </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   sinfo_msg(<span class="stringliteral">"SUCCESS: RECIPE\n"</span>) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>  cleanup:</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__step__jitter_8c_source.html b/html/sinfo__step__jitter_8c_source.html
index b8af20c..f596c74 100644
--- a/html/sinfo__step__jitter_8c_source.html
+++ b/html/sinfo__step__jitter_8c_source.html
@@ -2,365 +2,396 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_step_jitter.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_step_jitter.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_step_jitter.c,v 1.13 2007/10/08 13:26:50 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/10/08 13:26:50 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/* std */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <strings.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <math.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* cpl */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* irplib */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/* sinfoni */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_standard_star_config.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_psf_config.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_new_objnod.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_new_stdstar.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_new_psf.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00075"></a>00075 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00076"></a>00076 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                            Functions prototypes</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_create(cpl_plugin *) ;
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_exec(cpl_plugin *) ;
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_destroy(cpl_plugin *) ;
-<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00086"></a>00086 <span class="comment">                            Static variables</span>
-<a name="l00087"></a>00087 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description1[] =
-<a name="l00090"></a>00090 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"The input files are:\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"science object and sky frames with tags OBJECT_NODDING and SKY_NODDING or\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"Telluric standard star frames and sky frames with tags STD and SKY_STD or\n"</span>
-<a name="l00094"></a>00094 <span class="stringliteral">"PSF standard star and sky frames with tags \n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"and Master calibration frames:\n"</span>;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description2[] =
-<a name="l00100"></a>00100 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00101"></a>00101 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00102"></a>00102 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description3[] =
-<a name="l00109"></a>00109 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00110"></a>00110 <span class="stringliteral">"A reference table with the position of the first "</span>
-<a name="l00111"></a>00111 <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description4[] =
-<a name="l00122"></a>00122 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00123"></a>00123 <span class="stringliteral">"esorex --params sinfo_step_jitter\n"</span>
-<a name="l00124"></a>00124 <span class="stringliteral">"esorex --help sinfo_step_jitter\n"</span>
-<a name="l00125"></a>00125 <span class="stringliteral">"\n"</span>;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description[1400];
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00130"></a>00130 <span class="comment">                                Functions code</span>
-<a name="l00131"></a>00131 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00137"></a>00137 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="keywordtype">int</span>
-<a name="l00152"></a>00152 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00153"></a>00153 {
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00156"></a>00156   cpl_plugin *plugin = &recipe->interface;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   strcpy(sinfo_step_jitter_description,sinfo_step_jitter_description1);
-<a name="l00159"></a>00159   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description2);
-<a name="l00160"></a>00160   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description3);
-<a name="l00161"></a>00161   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description4);
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163   cpl_plugin_init(plugin,
-<a name="l00164"></a>00164           CPL_PLUGIN_API,
-<a name="l00165"></a>00165           SINFONI_BINARY_VERSION,
-<a name="l00166"></a>00166           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00167"></a>00167           <span class="stringliteral">"sinfo_step_jitter"</span>,
-<a name="l00168"></a>00168           <span class="stringliteral">"Object or STD star or PSF star data reduction"</span>,
-<a name="l00169"></a>00169            sinfo_step_jitter_description,
-<a name="l00170"></a>00170           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00171"></a>00171           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,
-<a name="l00172"></a>00172           sinfo_get_license(),
-<a name="l00173"></a>00173           sinfo_step_jitter_create,
-<a name="l00174"></a>00174           sinfo_step_jitter_exec,
-<a name="l00175"></a>00175           sinfo_step_jitter_destroy);
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177   cpl_pluginlist_append(list, plugin);
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179   <span class="keywordflow">return</span> 0;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 }
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_create(cpl_plugin *plugin)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194     cpl_recipe      * recipe ;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00197"></a>00197     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00198"></a>00198         recipe = (cpl_recipe *)plugin ;
-<a name="l00199"></a>00199     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00200"></a>00200 
-<a name="l00201"></a>00201     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00202"></a>00202     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00203"></a>00203   cpl_error_reset();
-<a name="l00204"></a>00204   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207   <span class="comment">/*</span>
-<a name="l00208"></a>00208 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00209"></a>00209 <span class="comment">   */</span>
-<a name="l00210"></a>00210   sinfo_product_config_add(recipe->parameters);
-<a name="l00211"></a>00211   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00212"></a>00212   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00213"></a>00213   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00214"></a>00214   sinfo_standard_star_config_add(recipe->parameters);
-<a name="l00215"></a>00215   sinfo_psf_config_add(recipe->parameters);
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217   <span class="keywordflow">return</span> 0;
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 }
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00227"></a>00227 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00228"></a>00228 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_exec(cpl_plugin *plugin)
-<a name="l00229"></a>00229 {
-<a name="l00230"></a>00230  
-<a name="l00231"></a>00231   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00234"></a>00234   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00235"></a>00235       recipe = (cpl_recipe *)plugin ;
-<a name="l00236"></a>00236   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238   <span class="keywordflow">return</span> sinfo_step_jitter(recipe->parameters, recipe->frames);
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240 }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00248"></a>00248 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00249"></a>00249 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_destroy(cpl_plugin *plugin)
-<a name="l00250"></a>00250 {
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252    cpl_recipe  *   recipe ;
-<a name="l00253"></a>00253     
-<a name="l00254"></a>00254     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00255"></a>00255     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00256"></a>00256         recipe = (cpl_recipe *)plugin ;
-<a name="l00257"></a>00257     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   <span class="keywordflow">return</span> 0;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263 }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00272"></a>00272 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00273"></a>00273 
-<a name="l00274"></a>00274 <span class="comment">/*</span>
-<a name="l00275"></a>00275 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00276"></a>00276 <span class="comment"> */</span>
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00279"></a>00279 {
-<a name="l00280"></a>00280   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube=NULL;
-<a name="l00281"></a>00281   <span class="keywordtype">int</span> ind=0;
-<a name="l00282"></a>00282   cpl_parameter* p=NULL;
-<a name="l00283"></a>00283   <span class="keywordtype">int</span> psf_sw=0;
-<a name="l00284"></a>00284   <span class="keywordtype">int</span> std_sw=0;
-<a name="l00285"></a>00285   cpl_frameset* obj_set=NULL;
-<a name="l00286"></a>00286   cpl_frame* obj_frm=NULL;
-<a name="l00287"></a>00287   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];
-<a name="l00288"></a>00288   cpl_frameset* ref_set=NULL;
-<a name="l00289"></a>00289   sinfo_msg(<span class="stringliteral">"ok1"</span>);
-<a name="l00290"></a>00290   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00291"></a>00291     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00292"></a>00292     <span class="keywordflow">return</span> -1;
-<a name="l00293"></a>00293   }
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   sinfo_msg(<span class="stringliteral">"ok2"</span>);
-<a name="l00296"></a>00296   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));
-<a name="l00297"></a>00297   obj_set=cpl_frameset_new();
-<a name="l00298"></a>00298   sinfo_extract_obj_products(<span class="keyword">set</span>,obj_set);
-<a name="l00299"></a>00299   <span class="keywordflow">if</span>(NULL == (obj_frm = cpl_frameset_get_frame(obj_set,0))) {
-<a name="l00300"></a>00300     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No object frames in input set."</span>);
-<a name="l00301"></a>00301     cpl_frameset_delete(obj_set);
-<a name="l00302"></a>00302     <span class="keywordflow">return</span> -1;
-<a name="l00303"></a>00303   }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   sinfo_msg(<span class="stringliteral">"ok3"</span>);
-<a name="l00306"></a>00306   strcpy(tag,cpl_frame_get_tag(obj_frm));
-<a name="l00307"></a>00307   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){
-<a name="l00308"></a>00308     pro_ctg_cube=sinfo_new_set_obj_procatg(tag);
-<a name="l00309"></a>00309   } <span class="keywordflow">else</span> {
-<a name="l00310"></a>00310     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);
-<a name="l00311"></a>00311     cpl_frameset_delete(obj_set);
-<a name="l00312"></a>00312     <span class="keywordflow">return</span> -1;
-<a name="l00313"></a>00313   }
-<a name="l00314"></a>00314   cpl_frameset_delete(obj_set);
-<a name="l00315"></a>00315   sinfo_msg(<span class="stringliteral">"ok4"</span>);
-<a name="l00316"></a>00316   <span class="comment">/* =============================================================== </span>
-<a name="l00317"></a>00317 <span class="comment">     SCI OBJNOD </span>
-<a name="l00318"></a>00318 <span class="comment">     =============================================================== */</span>
-<a name="l00319"></a>00319   <span class="comment">/*</span>
-<a name="l00320"></a>00320 <span class="comment">    sinfo_msg("------------------------------") ; </span>
-<a name="l00321"></a>00321 <span class="comment">    sinfo_msg("COADDING CUBES");</span>
-<a name="l00322"></a>00322 <span class="comment">    sinfo_msg("------------------------------") ; </span>
-<a name="l00323"></a>00323 <span class="comment"></span>
-<a name="l00324"></a>00324 <span class="comment">    ck0(sinfo_new_cubes_coadd(cpl_func,config, set, pro_ctg_cube),</span>
-<a name="l00325"></a>00325 <span class="comment">    "COADDING CUBES") ;</span>
-<a name="l00326"></a>00326 <span class="comment">       </span>
-<a name="l00327"></a>00327 <span class="comment">    sinfo_msg("------------------------------") ; </span>
-<a name="l00328"></a>00328 <span class="comment">    sinfo_msg("COADDED CUBES");</span>
-<a name="l00329"></a>00329 <span class="comment">    sinfo_msg("------------------------------") ; </span>
-<a name="l00330"></a>00330 <span class="comment">  */</span>
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333   <span class="comment">/* =============================================================== </span>
-<a name="l00334"></a>00334 <span class="comment">     PSF</span>
-<a name="l00335"></a>00335 <span class="comment">     =============================================================== */</span>
-<a name="l00336"></a>00336   <span class="comment">/* </span>
-<a name="l00337"></a>00337 <span class="comment">  if((strcmp(pro_ctg_cube,PRO_COADD_OBJ) == 0) ||</span>
-<a name="l00338"></a>00338 <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_PSF) == 0) ||</span>
-<a name="l00339"></a>00339 <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_STD) == 0) ||</span>
-<a name="l00340"></a>00340 <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_PUPIL) == 0) ) {</span>
-<a name="l00341"></a>00341 <span class="comment">  */</span>
-<a name="l00342"></a>00342       
-<a name="l00343"></a>00343   sinfo_msg(<span class="stringliteral">"ok5"</span>);
-<a name="l00344"></a>00344     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.psf.switch"</span>);
-<a name="l00345"></a>00345     psf_sw = cpl_parameter_get_bool(p);
-<a name="l00346"></a>00346     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,psf_sw);
-<a name="l00347"></a>00347     <span class="keywordflow">if</span>(psf_sw) {
-<a name="l00348"></a>00348       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00349"></a>00349       sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);
-<a name="l00350"></a>00350       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00351"></a>00351       <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>,ref_set) ) )
-<a name="l00352"></a>00352     {
-<a name="l00353"></a>00353       sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;
-<a name="l00354"></a>00354       <span class="keywordflow">return</span> -1 ;
-<a name="l00355"></a>00355     }
-<a name="l00356"></a>00356       sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ;
-<a name="l00357"></a>00357     }
-<a name="l00358"></a>00358       
-<a name="l00359"></a>00359   sinfo_msg(<span class="stringliteral">"ok6"</span>);
-<a name="l00360"></a>00360     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.std_star.switch"</span>);
-<a name="l00361"></a>00361     std_sw = cpl_parameter_get_bool(p);
-<a name="l00362"></a>00362     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,std_sw);
-<a name="l00363"></a>00363     <span class="keywordflow">if</span>(std_sw) {
-<a name="l00364"></a>00364       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00365"></a>00365       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);
-<a name="l00366"></a>00366       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369       <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>,ref_set) ) )
-<a name="l00370"></a>00370     {
-<a name="l00371"></a>00371       sinfo_msg(<span class="stringliteral">"REDUCING STD STAR DATA No: %d"</span>,ind) ;
-<a name="l00372"></a>00372       <span class="keywordflow">return</span> -1 ;
-<a name="l00373"></a>00373     }
-<a name="l00374"></a>00374       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ;
-<a name="l00375"></a>00375     }
-<a name="l00376"></a>00376   sinfo_msg(<span class="stringliteral">"ok7"</span>);
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     <span class="comment">// }  </span>
-<a name="l00379"></a>00379       
-<a name="l00380"></a>00380  cleanup:
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382   <span class="keywordflow">return</span> 0 ;
-<a name="l00383"></a>00383 }
-<a name="l00384"></a>00384 
-<a name="l00385"></a>00385 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_step_jitter.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_step_jitter.c,v 1.13 2007/10/08 13:26:50 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/10/08 13:26:50 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_standard_star_config.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_psf_config.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_new_objnod.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_new_stdstar.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_new_psf.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description1[] =</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"The input files are:\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"science object and sky frames with tags OBJECT_NODDING and SKY_NODDING or\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"Telluric standard star frames and sky frames with tags STD and SKY_STD or\n"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"PSF standard star and sky frames with tags \n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"PSF_CALIBRATOR and SKY_PSF_CALIBRATOR\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"and Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description2[] =</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description3[] =</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="stringliteral">"A reference table with the position of the first "</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"column with tag FIRST_COLUMN\n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description4[] =</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="stringliteral">"esorex --params sinfo_step_jitter\n"</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="stringliteral">"esorex --help sinfo_step_jitter\n"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_jitter_description[1400];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> {</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   strcpy(sinfo_step_jitter_description,sinfo_step_jitter_description1);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description2);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description3);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   strcat(sinfo_step_jitter_description,sinfo_step_jitter_description4);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           <span class="stringliteral">"sinfo_step_jitter"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           <span class="stringliteral">"Object or STD star or PSF star data reduction"</span>,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>            sinfo_step_jitter_description,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           <span class="stringliteral">"Andrea.Mdigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>           sinfo_step_jitter_create,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>           sinfo_step_jitter_exec,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>           sinfo_step_jitter_destroy);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   sinfo_product_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   sinfo_standard_star_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   sinfo_psf_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>  </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>       recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordflow">return</span> sinfo_step_jitter(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>    cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_jitter(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* pro_ctg_cube=NULL;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordtype">int</span> ind=0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordtype">int</span> psf_sw=0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordtype">int</span> std_sw=0;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   cpl_frameset* obj_set=NULL;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   cpl_frame* obj_frm=NULL;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="keywordtype">char</span> tag[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   cpl_frameset* ref_set=NULL;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   sinfo_msg(<span class="stringliteral">"ok1"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   sinfo_msg(<span class="stringliteral">"ok2"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   check_nomsg(ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   obj_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   sinfo_extract_obj_products(<span class="keyword">set</span>,obj_set);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordflow">if</span>(NULL == (obj_frm = cpl_frameset_get_frame(obj_set,0))) {</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No object frames in input set."</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   sinfo_msg(<span class="stringliteral">"ok3"</span>);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   strcpy(tag,cpl_frame_get_tag(obj_frm));</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="keywordflow">if</span>(NULL!=sinfo_new_set_obj_procatg(tag)){</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     pro_ctg_cube=sinfo_new_set_obj_procatg(tag);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Frame tag %s not supported."</span>,tag);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   sinfo_msg(<span class="stringliteral">"ok4"</span>);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">     SCI OBJNOD </span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">    sinfo_msg("------------------------------") ; </span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">    sinfo_msg("COADDING CUBES");</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">    sinfo_msg("------------------------------") ; </span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment"></span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">    ck0(sinfo_new_cubes_coadd(cpl_func,config, set, pro_ctg_cube),</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">    "COADDING CUBES") ;</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">       </span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">    sinfo_msg("------------------------------") ; </span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">    sinfo_msg("COADDED CUBES");</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">    sinfo_msg("------------------------------") ; </span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">     PSF</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">  if((strcmp(pro_ctg_cube,PRO_COADD_OBJ) == 0) ||</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_PSF) == 0) ||</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_STD) == 0) ||</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> <span class="comment">     (strcmp(pro_ctg_cube,PRO_COADD_PUPIL) == 0) ) {</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>   sinfo_msg(<span class="stringliteral">"ok5"</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.psf.switch"</span>);</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     psf_sw = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,psf_sw);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">if</span>(psf_sw) {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       sinfo_msg(<span class="stringliteral">"REDUCE PSF STD STAR FRAMES"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>,ref_set) ) )</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>       sinfo_msg(<span class="stringliteral">"SUCCESS REDUCE PSF STD STAR FRAMES"</span>) ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>   sinfo_msg(<span class="stringliteral">"ok6"</span>);</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     p = cpl_parameterlist_find(config, <span class="stringliteral">"sinfoni.std_star.switch"</span>);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     std_sw = cpl_parameter_get_bool(p);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     sinfo_msg(<span class="stringliteral">"switch=%d"</span>,std_sw);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     <span class="keywordflow">if</span>(std_sw) {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>       <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>,ref_set) ) )</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>       sinfo_msg(<span class="stringliteral">"REDUCING STD STAR DATA No: %d"</span>,ind) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   sinfo_msg(<span class="stringliteral">"ok7"</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     <span class="comment">// }  </span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>  cleanup:</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__step__objnod_8c_source.html b/html/sinfo__step__objnod_8c_source.html
index 5143904..63ddf18 100644
--- a/html/sinfo__step__objnod_8c_source.html
+++ b/html/sinfo__step__objnod_8c_source.html
@@ -2,182 +2,213 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_step_objnod.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_step_objnod.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_step_objnod.c,v 1.9 2007/06/06 07:09:56 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/06/06 07:09:56 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <strings.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <string.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>      
-<a name="l00038"></a>00038 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_new_objnod.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_objnod(cpl_parameterlist *, cpl_frameset *);
-<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00054"></a>00054 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keywordtype">int</span>
-<a name="l00059"></a>00059 sinfo_step_objnod_create(cpl_plugin *plugin)
-<a name="l00060"></a>00060 {
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062   <span class="comment">/*</span>
-<a name="l00063"></a>00063 <span class="comment">   * We have to provide the option we accept to the application.</span>
-<a name="l00064"></a>00064 <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span>
-<a name="l00065"></a>00065 <span class="comment">   * interface.</span>
-<a name="l00066"></a>00066 <span class="comment">   */</span>
-<a name="l00067"></a>00067   cpl_recipe *recipe = (cpl_recipe *)plugin;
-<a name="l00068"></a>00068   recipe->parameters = cpl_parameterlist_new();
-<a name="l00069"></a>00069   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00070"></a>00070     <span class="keywordflow">return</span> 1;
-<a name="l00071"></a>00071   }
-<a name="l00072"></a>00072   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00073"></a>00073   cpl_error_reset();
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075   <span class="comment">/*</span>
-<a name="l00076"></a>00076 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00077"></a>00077 <span class="comment">   */</span>
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   <span class="comment">/* General parameters */</span>
-<a name="l00080"></a>00080   sinfo_general_config_add(recipe->parameters); 
-<a name="l00081"></a>00081   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00082"></a>00082   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084   <span class="keywordflow">return</span> 0;
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 }
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="keywordtype">int</span>
-<a name="l00089"></a>00089 sinfo_step_objnod_exec(cpl_plugin *plugin)
-<a name="l00090"></a>00090 {
-<a name="l00091"></a>00091  
-<a name="l00092"></a>00092   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00093"></a>00093   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00094"></a>00094     <span class="keywordflow">return</span> 1;
-<a name="l00095"></a>00095   }
-<a name="l00096"></a>00096   <span class="keywordflow">if</span>(recipe->frames == NULL) {
-<a name="l00097"></a>00097     <span class="keywordflow">return</span> 1;
-<a name="l00098"></a>00098   }
-<a name="l00099"></a>00099   <span class="keywordflow">return</span> sinfo_step_objnod(recipe->parameters, recipe->frames);
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 }
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="keywordtype">int</span>
-<a name="l00104"></a>00104 sinfo_step_objnod_destroy(cpl_plugin *plugin)
-<a name="l00105"></a>00105 {
-<a name="l00106"></a>00106   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00107"></a>00107   <span class="comment">/*</span>
-<a name="l00108"></a>00108 <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span>
-<a name="l00109"></a>00109 <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span>
-<a name="l00110"></a>00110 <span class="comment">   * called us, so that we must not touch it.</span>
-<a name="l00111"></a>00111 <span class="comment">   */</span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115   <span class="keywordflow">return</span> 0;
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 }
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="keywordtype">int</span>
-<a name="l00120"></a>00120 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00121"></a>00121 {
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00124"></a>00124   cpl_plugin *plugin = &recipe->interface;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   cpl_plugin_init(plugin,
-<a name="l00128"></a>00128           CPL_PLUGIN_API,
-<a name="l00129"></a>00129           SINFONI_BINARY_VERSION,
-<a name="l00130"></a>00130           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00131"></a>00131           <span class="stringliteral">"sinfo_step_objnod"</span>,
-<a name="l00132"></a>00132           <span class="stringliteral">"Object data reduction"</span>,
-<a name="l00133"></a>00133           <span class="stringliteral">"TBD"</span>,
-<a name="l00134"></a>00134           <span class="stringliteral">"A. Modigliani"</span>,
-<a name="l00135"></a>00135           <span class="stringliteral">"amodigli at eso.org"</span>,
-<a name="l00136"></a>00136           <span class="stringliteral">"No license"</span>,
-<a name="l00137"></a>00137           sinfo_step_objnod_create,
-<a name="l00138"></a>00138           sinfo_step_objnod_exec,
-<a name="l00139"></a>00139           sinfo_step_objnod_destroy);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   cpl_pluginlist_append(list, plugin);
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143   <span class="keywordflow">return</span> 0;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="comment">/*</span>
-<a name="l00150"></a>00150 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00151"></a>00151 <span class="comment"> */</span>
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00154"></a>00154 sinfo_step_objnod(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00155"></a>00155 { 
-<a name="l00156"></a>00156   <span class="keywordtype">int</span>  ind =0;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00159"></a>00159   sinfo_msg(<span class="stringliteral">"NODDING SCIENCE FRAMES"</span>);
-<a name="l00160"></a>00160   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00161"></a>00161   <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_objnod(cpl_func,config,<span class="keyword">set</span>,PRO_COADD_OBJ))) {
-<a name="l00162"></a>00162     sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;
-<a name="l00163"></a>00163     <span class="keywordflow">return</span> -1 ;
-<a name="l00164"></a>00164   } <span class="keywordflow">else</span> {
-<a name="l00165"></a>00165     sinfo_msg(<span class="stringliteral">"success"</span>);
-<a name="l00166"></a>00166   }
-<a name="l00167"></a>00167   <span class="keywordflow">return</span> 0 ;
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_step_objnod.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_step_objnod.c,v 1.9 2007/06/06 07:09:56 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/06/06 07:09:56 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>      </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_new_objnod.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_objnod(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> sinfo_step_objnod_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> {</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   * We have to provide the option we accept to the application.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   * interface.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   cpl_recipe *recipe = (cpl_recipe *)plugin;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   recipe->parameters = cpl_parameterlist_new();</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   <span class="comment">/* General parameters */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   sinfo_general_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_step_objnod_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordflow">if</span>(recipe->frames == NULL) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   }</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordflow">return</span> sinfo_step_objnod(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> sinfo_step_objnod_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">   * called us, so that we must not touch it.</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>           <span class="stringliteral">"sinfo_step_objnod"</span>,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           <span class="stringliteral">"Object data reduction"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>           <span class="stringliteral">"TBD"</span>,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>           <span class="stringliteral">"A. Modigliani"</span>,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>           <span class="stringliteral">"amodigli at eso.org"</span>,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>           <span class="stringliteral">"No license"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           sinfo_step_objnod_create,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>           sinfo_step_objnod_exec,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           sinfo_step_objnod_destroy);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> sinfo_step_objnod(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> { </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   <span class="keywordtype">int</span>  ind =0;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   sinfo_msg(<span class="stringliteral">"NODDING SCIENCE FRAMES"</span>);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_objnod(cpl_func,config,<span class="keyword">set</span>,PRO_COADD_OBJ))) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     sinfo_msg(<span class="stringliteral">"success"</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__step__psf_8c_source.html b/html/sinfo__step__psf_8c_source.html
index eddd790..cd5286a 100644
--- a/html/sinfo__step__psf_8c_source.html
+++ b/html/sinfo__step__psf_8c_source.html
@@ -2,196 +2,227 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_step_psf.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_step_psf.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_step_psf.c,v 1.7 2007/06/06 07:09:56 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2007/06/06 07:09:56 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *          _Step_Psf Frames Data Reduction                          *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#include <strings.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <string.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span> 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_psf_config.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_new_psf.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                            Functions prototypes</span>
-<a name="l00048"></a>00048 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf(cpl_parameterlist *, cpl_frameset *);
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_create(cpl_plugin* plugin );
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_exec(cpl_plugin* plugin);
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_destroy(cpl_plugin* plugin);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                            Static variables</span>
-<a name="l00057"></a>00057 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_psf_description[] =<span class="stringliteral">"to debug\n"</span>;
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                                Functions code</span>
-<a name="l00062"></a>00062 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00068"></a>00068 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keywordtype">int</span>
-<a name="l00083"></a>00083 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00084"></a>00084 {
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00087"></a>00087   cpl_plugin *plugin = &recipe->interface;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   cpl_plugin_init(plugin,
-<a name="l00091"></a>00091           CPL_PLUGIN_API,
-<a name="l00092"></a>00092           SINFONI_BINARY_VERSION,
-<a name="l00093"></a>00093           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00094"></a>00094           <span class="stringliteral">"sinfo_step_psf"</span>,
-<a name="l00095"></a>00095           <span class="stringliteral">"PSF determination"</span>,
-<a name="l00096"></a>00096           sinfo_step_psf_description,
-<a name="l00097"></a>00097           <span class="stringliteral">"A. Modigliani"</span>,
-<a name="l00098"></a>00098           <span class="stringliteral">"amodigli at eso.org"</span>,
-<a name="l00099"></a>00099           <span class="stringliteral">"No license"</span>,
-<a name="l00100"></a>00100           sinfo_step_psf_create,
-<a name="l00101"></a>00101           sinfo_step_psf_exec,
-<a name="l00102"></a>00102           sinfo_step_psf_destroy);
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104   cpl_pluginlist_append(list, plugin);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   <span class="keywordflow">return</span> 0;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 }
-<a name="l00109"></a>00109 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00117"></a>00117 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 <span class="keywordtype">int</span>
-<a name="l00119"></a>00119 sinfo_step_psf_create(cpl_plugin *plugin)
-<a name="l00120"></a>00120 {
-<a name="l00121"></a>00121     cpl_recipe      * recipe ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00125"></a>00125         recipe = (cpl_recipe *)plugin ;
-<a name="l00126"></a>00126     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00129"></a>00129     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131   <span class="comment">/*</span>
-<a name="l00132"></a>00132 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00133"></a>00133 <span class="comment">   */</span>
-<a name="l00134"></a>00134   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(); 
-<a name="l00135"></a>00135   sinfo_psf_config_add(recipe->parameters);
-<a name="l00136"></a>00136   
-<a name="l00137"></a>00137   <span class="keywordflow">return</span> 0;
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00148"></a>00148 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="keywordtype">int</span>
-<a name="l00150"></a>00150 sinfo_step_psf_exec(cpl_plugin *plugin)
-<a name="l00151"></a>00151 {
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     cpl_recipe  *   recipe ;
-<a name="l00154"></a>00154     
-<a name="l00155"></a>00155     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00156"></a>00156     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00157"></a>00157         recipe = (cpl_recipe *)plugin ;
-<a name="l00158"></a>00158     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160   <span class="keywordflow">return</span> sinfo_step_psf(recipe->parameters, recipe->frames);
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="keywordtype">int</span>
-<a name="l00172"></a>00172 sinfo_step_psf_destroy(cpl_plugin *plugin)
-<a name="l00173"></a>00173 {
-<a name="l00174"></a>00174     cpl_recipe  *   recipe ;
-<a name="l00175"></a>00175     
-<a name="l00176"></a>00176     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00177"></a>00177     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00178"></a>00178         recipe = (cpl_recipe *)plugin ;
-<a name="l00179"></a>00179     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183   <span class="keywordflow">return</span> 0;
-<a name="l00184"></a>00184 
-<a name="l00185"></a>00185 }
-<a name="l00186"></a>00186 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00193"></a>00193 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="comment">/*</span>
-<a name="l00196"></a>00196 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00197"></a>00197 <span class="comment"> */</span>
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00200"></a>00200 sinfo_step_psf(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00201"></a>00201 {
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203   <span class="keywordtype">int</span>  ind =0;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     {
-<a name="l00206"></a>00206     sinfo_msg(<span class="stringliteral">"running"</span>) ; 
-<a name="l00207"></a>00207         <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>) ) )
-<a name="l00208"></a>00208         {
-<a name="l00209"></a>00209         sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;
-<a name="l00210"></a>00210         <span class="keywordflow">return</span> -1 ;
-<a name="l00211"></a>00211     }
-<a name="l00212"></a>00212     sinfo_msg (<span class="stringliteral">"success\n"</span>) ; 
-<a name="l00213"></a>00213     }    
-<a name="l00214"></a>00214     <span class="keywordflow">return</span> 0 ;
-<a name="l00215"></a>00215 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_step_psf.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_step_psf.c,v 1.7 2007/06/06 07:09:56 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2007/06/06 07:09:56 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *          _Step_Psf Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_psf_config.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_new_psf.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_create(cpl_plugin* plugin );</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_exec(cpl_plugin* plugin);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_psf_destroy(cpl_plugin* plugin);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_psf_description[] =<span class="stringliteral">"to debug\n"</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>           <span class="stringliteral">"sinfo_step_psf"</span>,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>           <span class="stringliteral">"PSF determination"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>           sinfo_step_psf_description,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>           <span class="stringliteral">"A. Modigliani"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>           <span class="stringliteral">"amodigli at eso.org"</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>           <span class="stringliteral">"No license"</span>,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>           sinfo_step_psf_create,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>           sinfo_step_psf_exec,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>           sinfo_step_psf_destroy);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> sinfo_step_psf_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>(); </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   sinfo_psf_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>   </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> sinfo_step_psf_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">return</span> sinfo_step_psf(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> sinfo_step_psf_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> sinfo_step_psf(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordtype">int</span>  ind =0;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     sinfo_msg(<span class="stringliteral">"running"</span>) ; </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="keywordflow">if</span> ( -1 == (ind = sinfo_new_psf(cpl_func,config,<span class="keyword">set</span>) ) )</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         sinfo_msg(<span class="stringliteral">"no: %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     sinfo_msg (<span class="stringliteral">"success\n"</span>) ; </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     }    </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__step__stdstar_8c_source.html b/html/sinfo__step__stdstar_8c_source.html
index 28e97ae..9a05057 100644
--- a/html/sinfo__step__stdstar_8c_source.html
+++ b/html/sinfo__step__stdstar_8c_source.html
@@ -2,281 +2,312 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_step_stdstar.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_step_stdstar.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_step_stdstar.c,v 1.8 2008/06/11 13:41:24 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/06/11 13:41:24 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028  <span class="comment">/****************************************************************</span>
-<a name="l00029"></a>00029 <span class="comment">  *          Standard_Star Frames Data Reduction                          *</span>
-<a name="l00030"></a>00030 <span class="comment">  ****************************************************************/</span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#endif</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/* std */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <strings.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <string.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/* cpl */</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <cpl.h></span>      
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* irplib */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/* sinfoni */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_standard_star_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_new_stdstar.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00074"></a>00074 <span class="comment">                            Functions prototypes</span>
-<a name="l00075"></a>00075 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_create(cpl_plugin *) ;
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_exec(cpl_plugin *) ;
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_destroy(cpl_plugin *) ;
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar(cpl_parameterlist *, cpl_frameset *);
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00082"></a>00082 <span class="comment">                            Static variables</span>
-<a name="l00083"></a>00083 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description1[] =
-<a name="l00086"></a>00086 <span class="stringliteral">"This recipe performs science data reduction.\n"</span>
-<a name="l00087"></a>00087 <span class="stringliteral">"The input files are science object and sky frames with tags\n"</span>
-<a name="l00088"></a>00088 <span class="stringliteral">"STD_NODDING and SKY_STD_NODDING\n"</span>;
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description2[] =
-<a name="l00092"></a>00092 <span class="stringliteral">"Master calibration frames:\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span>
-<a name="l00094"></a>00094 <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span>
-<a name="l00095"></a>00095 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span>
-<a name="l00096"></a>00096 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span>
-<a name="l00097"></a>00097 <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span>
-<a name="l00098"></a>00098 <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description3[] =
-<a name="l00102"></a>00102 <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span>
-<a name="l00103"></a>00103 <span class="stringliteral">"A reference table with the position of the first  column\n"</span>
-<a name="l00104"></a>00104 <span class="stringliteral">" with tag FIRST_COLUMN\n"</span>
-<a name="l00105"></a>00105 <span class="stringliteral">"Relevant outputs are:\n"</span>
-<a name="l00106"></a>00106 <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00107"></a>00107 <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description4[] =
-<a name="l00111"></a>00111 <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span>
-<a name="l00112"></a>00112 <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00113"></a>00113 <span class="stringliteral">"The bad pixel map associated to the cube \n"</span>
-<a name="l00114"></a>00114 <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"The std star spectrum image (PRO.CATG=STD_SPECTRUM)\n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"The std start spectrum and efficiency spectrum table (PRO.CATG=STD_SPECTRA)\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"esorex --params sinfo_step_stdstar\n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"esorex --help sinfo_step_stdstar\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"\n"</span>;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description[1300];
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">                                Functions code</span>
-<a name="l00127"></a>00127 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00132"></a>00132 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="keywordtype">int</span>
-<a name="l00147"></a>00147 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00148"></a>00148 {
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00151"></a>00151   cpl_plugin *plugin = &recipe->interface;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   strcpy(sinfo_step_stdstar_description,sinfo_step_stdstar_description1);
-<a name="l00154"></a>00154   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description2);
-<a name="l00155"></a>00155   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description3);
-<a name="l00156"></a>00156   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description4);
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   cpl_plugin_init(plugin,
-<a name="l00160"></a>00160           CPL_PLUGIN_API,
-<a name="l00161"></a>00161           SINFONI_BINARY_VERSION,
-<a name="l00162"></a>00162           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00163"></a>00163           <span class="stringliteral">"sinfo_step_stdstar"</span>,
-<a name="l00164"></a>00164           <span class="stringliteral">"Standard star data reduction"</span>,
-<a name="l00165"></a>00165           sinfo_step_stdstar_description,
-<a name="l00166"></a>00166           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00167"></a>00167           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00168"></a>00168           sinfo_get_license(),
-<a name="l00169"></a>00169           sinfo_step_stdstar_create,
-<a name="l00170"></a>00170           sinfo_step_stdstar_exec,
-<a name="l00171"></a>00171           sinfo_step_stdstar_destroy);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   cpl_pluginlist_append(list, plugin);
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175   <span class="keywordflow">return</span> 0;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 }
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_create(cpl_plugin *plugin)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194     cpl_recipe      * recipe ;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     <span class="comment">/* Check that the plugin is part of a valid recipe */</span>
-<a name="l00197"></a>00197     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00198"></a>00198         recipe = (cpl_recipe *)plugin ;
-<a name="l00199"></a>00199     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00200"></a>00200     cpl_error_reset();
-<a name="l00201"></a>00201     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00204"></a>00204     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207   <span class="comment">/*</span>
-<a name="l00208"></a>00208 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00209"></a>00209 <span class="comment">   */</span>
-<a name="l00210"></a>00210   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00211"></a>00211   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00212"></a>00212   sinfo_skycor_config_add(recipe->parameters); 
-<a name="l00213"></a>00213   sinfo_standard_star_config_add(recipe->parameters);
-<a name="l00214"></a>00214   
-<a name="l00215"></a>00215   <span class="keywordflow">return</span> 0;
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 }
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00225"></a>00225 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00226"></a>00226 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_exec(cpl_plugin *plugin)
-<a name="l00227"></a>00227 {
-<a name="l00228"></a>00228     cpl_recipe  *   recipe ;
-<a name="l00229"></a>00229     
-<a name="l00230"></a>00230     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00231"></a>00231     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00232"></a>00232         recipe = (cpl_recipe *)plugin ;
-<a name="l00233"></a>00233     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235   <span class="keywordflow">return</span> sinfo_step_stdstar(recipe->parameters, recipe->frames);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237 }
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00245"></a>00245 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00246"></a>00246 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_destroy(cpl_plugin *plugin)
-<a name="l00247"></a>00247 {
-<a name="l00248"></a>00248     cpl_recipe  *   recipe ;
-<a name="l00249"></a>00249     
-<a name="l00250"></a>00250     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00251"></a>00251     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00252"></a>00252         recipe = (cpl_recipe *)plugin ;
-<a name="l00253"></a>00253     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00256"></a>00256   <span class="keywordflow">return</span> 0;
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 }
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00268"></a>00268 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="comment">/*</span>
-<a name="l00272"></a>00272 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00273"></a>00273 <span class="comment"> */</span>
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00276"></a>00276 sinfo_step_stdstar(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00277"></a>00277 {
-<a name="l00278"></a>00278  
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00281"></a>00281     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00282"></a>00282     <span class="keywordflow">return</span> -1;
-<a name="l00283"></a>00283   }
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   <span class="comment">/* =============================================================== </span>
-<a name="l00286"></a>00286 <span class="comment">     STDSTAR </span>
-<a name="l00287"></a>00287 <span class="comment">     =============================================================== */</span>
-<a name="l00288"></a>00288   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00289"></a>00289   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);
-<a name="l00290"></a>00290   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   ck0(sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>, <span class="keyword">set</span> ),<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;
-<a name="l00293"></a>00293   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ; 
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   <span class="keywordflow">return</span> 0 ;
-<a name="l00296"></a>00296  cleanup:
-<a name="l00297"></a>00297   <span class="keywordflow">return</span> -1;
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299 }
-<a name="l00300"></a>00300 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_step_stdstar.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_step_stdstar.c,v 1.8 2008/06/11 13:41:24 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/06/11 13:41:24 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  *          Standard_Star Frames Data Reduction                          *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <cpl.h></span>      </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_standard_star_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_new_cubes_coadd.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_new_stdstar.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description1[] =</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"This recipe performs science data reduction.\n"</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="stringliteral">"The input files are science object and sky frames with tags\n"</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="stringliteral">"STD_NODDING and SKY_STD_NODDING\n"</span>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description2[] =</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"Master calibration frames:\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image with tag WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field with tag MASTER_FLAT_LAMP\n"</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map with tag MASTER_BP_MAP\n"</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame with tag SLIT_POS\n"</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="stringliteral">"A corresponding (band) distortion table with tag DISTORTION\n"</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="stringliteral">"A corresponding (band) slitlet distance table with tag SLITLETS_DISTANCE\n"</span>;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description3[] =</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="stringliteral">"The output is an image resulting from the IMA1 op IMA2 where op indicates\n"</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="stringliteral">"A reference table with the position of the first  column\n"</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="stringliteral">" with tag FIRST_COLUMN\n"</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="stringliteral">"Relevant outputs are:\n"</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="stringliteral">"combined cubes (PRO.CATG=x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="stringliteral">"reconstructed cube (PRO.CATG=COADD_x_OBS x=STD,OBJ,PSF)\n"</span>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description4[] =</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="stringliteral">"An average along Z of the reconstructed cube \n"</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="stringliteral">"(PRO.CATG=MED_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="stringliteral">"The bad pixel map associated to the cube \n"</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"(PRO.CATG=BP_MAP_COADD_x_OBS x=STD,OBJ,PSF)\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"The std star spectrum image (PRO.CATG=STD_SPECTRUM)\n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"The std start spectrum and efficiency spectrum table (PRO.CATG=STD_SPECTRA)\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"esorex --params sinfo_step_stdstar\n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"esorex --help sinfo_step_stdstar\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_step_stdstar_description[1300];</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   strcpy(sinfo_step_stdstar_description,sinfo_step_stdstar_description1);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description2);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description3);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>   strcat(sinfo_step_stdstar_description,sinfo_step_stdstar_description4);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>           <span class="stringliteral">"sinfo_step_stdstar"</span>,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"Standard star data reduction"</span>,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>           sinfo_step_stdstar_description,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>           sinfo_step_stdstar_create,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>           sinfo_step_stdstar_exec,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>           sinfo_step_stdstar_destroy);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Check that the plugin is part of a valid recipe */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sinfo_skycor_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   sinfo_standard_star_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordflow">return</span> sinfo_step_stdstar(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_step_stdstar_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> sinfo_step_stdstar(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>  </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   <span class="comment">/* =============================================================== </span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">     STDSTAR </span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="comment">     =============================================================== */</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   ck0(sinfo_new_stdstar(cpl_func,config, <span class="keyword">set</span>, <span class="keyword">set</span> ),<span class="stringliteral">"REDUCING STD STAR DATA"</span>) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   sinfo_msg(<span class="stringliteral">"STD STAR DATA REDUCTION SUCCESS"</span>) ; </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>  cleanup:</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__svd_8c_source.html b/html/sinfo__svd_8c_source.html
index 855ec2f..b70833c 100644
--- a/html/sinfo__svd_8c_source.html
+++ b/html/sinfo__svd_8c_source.html
@@ -2,440 +2,471 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_svd.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_svd.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/**************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">*</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  16/04/03  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_svd.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00041"></a>00041 <span class="keywordtype">void</span> sinfo_fpol(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *p, <span class="keywordtype">int</span> np)
-<a name="l00042"></a>00042 {
-<a name="l00043"></a>00043     <span class="keywordtype">int</span> j ;
-<a name="l00044"></a>00044     
-<a name="l00045"></a>00045     p[1] = 1.0 ;
-<a name="l00046"></a>00046     <span class="keywordflow">for</span> ( j = 2 ; j <= np ; j++ )
-<a name="l00047"></a>00047     {
-<a name="l00048"></a>00048         p[j] = p[j-1]*x ;
-<a name="l00049"></a>00049     }
-<a name="l00050"></a>00050 }
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="keywordtype">void</span> 
-<a name="l00053"></a>00053 sinfo_svb_kas(<span class="keywordtype">float</span> **u, <span class="keywordtype">float</span> w[], <span class="keywordtype">float</span> **v, <span class="keywordtype">int</span> m, 
-<a name="l00054"></a>00054               <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> b[],<span class="keywordtype">float</span> x[])
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058         <span class="keywordtype">int</span> jj,j,i;
-<a name="l00059"></a>00059         <span class="keywordtype">float</span> s,*tmp;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061         tmp=sinfo_vector(1,n);
-<a name="l00062"></a>00062         <span class="keywordflow">for</span> (j=1;j<=n;j++) {
-<a name="l00063"></a>00063                 s=0.0;
-<a name="l00064"></a>00064                 <span class="keywordflow">if</span> (w[j]) {
-<a name="l00065"></a>00065                         <span class="keywordflow">for</span> (i=1;i<=m;i++) s += u[i][j]*b[i];
-<a name="l00066"></a>00066                         s /= w[j];
-<a name="l00067"></a>00067                 }
-<a name="l00068"></a>00068                 tmp[j]=s;
-<a name="l00069"></a>00069         }
-<a name="l00070"></a>00070         <span class="keywordflow">for</span> (j=1;j<=n;j++) {
-<a name="l00071"></a>00071                 s=0.0;
-<a name="l00072"></a>00072                 <span class="keywordflow">for</span> (jj=1;jj<=n;jj++) s += v[j][jj]*tmp[jj];
-<a name="l00073"></a>00073                 x[j]=s;
-<a name="l00074"></a>00074         }
-<a name="l00075"></a>00075         sinfo_free_vector(tmp,1<span class="comment">/*,n*/</span>);
-<a name="l00076"></a>00076 }
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keywordtype">void</span> sinfo_svd_variance(<span class="keywordtype">float</span> **v , <span class="keywordtype">int</span> ma , <span class="keywordtype">float</span> w[] , <span class="keywordtype">float</span> **cvm)
-<a name="l00079"></a>00079 {
-<a name="l00080"></a>00080         <span class="keywordtype">int</span> k,j,i;
-<a name="l00081"></a>00081         <span class="keywordtype">float</span> sum,*wti;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083         wti=sinfo_vector(1,ma);
-<a name="l00084"></a>00084         <span class="keywordflow">for</span> (i=1;i<=ma;i++) {
-<a name="l00085"></a>00085                 wti[i]=0.0;
-<a name="l00086"></a>00086                 <span class="keywordflow">if</span> (w[i]) wti[i]=1.0/(w[i]*w[i]);
-<a name="l00087"></a>00087         }
-<a name="l00088"></a>00088         <span class="keywordflow">for</span> (i=1;i<=ma;i++) {
-<a name="l00089"></a>00089             <span class="keywordflow">for</span> (j=1;j<=i;j++) {
-<a name="l00090"></a>00090                <span class="keywordflow">for</span> (sum=0.0,k=1;k<=ma;k++) sum += (v[i][k]*v[j][k]*wti[k]);
-<a name="l00091"></a>00091                cvm[j][i]=cvm[i][j]=sum;
-<a name="l00092"></a>00092             }
-<a name="l00093"></a>00093         }
-<a name="l00094"></a>00094         sinfo_free_vector(wti,1<span class="comment">/*,ma*/</span>);
-<a name="l00095"></a>00095 }
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="preprocessor">#define TOL 1.0e-5</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span>
-<a name="l00099"></a>00099 <span class="keywordtype">void</span> sinfo_svd_fitting ( <span class="keywordtype">float</span> *x,
-<a name="l00100"></a>00100                    <span class="keywordtype">float</span> *y,
-<a name="l00101"></a>00101                    <span class="keywordtype">float</span> *sig,
-<a name="l00102"></a>00102                    <span class="keywordtype">int</span>   ndata,
-<a name="l00103"></a>00103                    <span class="keywordtype">float</span> *a,
-<a name="l00104"></a>00104                    <span class="keywordtype">int</span>   ma,
-<a name="l00105"></a>00105                    <span class="keywordtype">float</span> **u,
-<a name="l00106"></a>00106                    <span class="keywordtype">float</span> **v,
-<a name="l00107"></a>00107                    <span class="keywordtype">float</span> *w,
-<a name="l00108"></a>00108                    <span class="keywordtype">float</span> **cvm,
-<a name="l00109"></a>00109                    <span class="keywordtype">float</span> *chisq,
-<a name="l00110"></a>00110                    <span class="keywordtype">void</span> (*funcs)(<span class="keywordtype">float</span>,<span class="keywordtype">float</span> *,<span class="keywordtype">int</span>) )
-<a name="l00111"></a>00111 {
-<a name="l00112"></a>00112         <span class="keywordtype">int</span> j,i;
-<a name="l00113"></a>00113         <span class="keywordtype">float</span> <span class="comment">/*sini,*/</span>wmax,tmp,thresh,sum,*b,*afunc;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116         b=sinfo_vector(1,ndata);
-<a name="l00117"></a>00117         afunc=sinfo_vector(1,ma);
-<a name="l00118"></a>00118         <span class="keywordflow">for</span> (i=1;i<=ndata;i++) {
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120                 (*funcs)(x[i],afunc,ma);
-<a name="l00121"></a>00121                 tmp=1.0/sig[i];
-<a name="l00122"></a>00122                 <span class="keywordflow">for</span> (j=1;j<=ma;j++) {
-<a name="l00123"></a>00123                         u[i][j]=afunc[j]*tmp;
-<a name="l00124"></a>00124                 }
-<a name="l00125"></a>00125                 b[i]=y[i]*tmp;
-<a name="l00126"></a>00126         }
-<a name="l00127"></a>00127         sinfo_svd_compare(u,ndata,ma,w,v);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129         wmax=0.0;
-<a name="l00130"></a>00130         <span class="keywordflow">for</span> (j=1;j<=ma;j++)
-<a name="l00131"></a>00131                 <span class="keywordflow">if</span> (w[j] > wmax) wmax=w[j];
-<a name="l00132"></a>00132         thresh=TOL*wmax;
-<a name="l00133"></a>00133         <span class="keywordflow">for</span> (j=1;j<=ma;j++) {
-<a name="l00134"></a>00134           <span class="keywordflow">if</span> (w[j] < thresh) {
-<a name="l00135"></a>00135             w[j]=0.0;
-<a name="l00136"></a>00136             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"SVD_FITTING detected singular value in fit !"</span>);
-<a name="l00137"></a>00137           }
-<a name="l00138"></a>00138         }
-<a name="l00139"></a>00139         sinfo_svb_kas(u,w,v,ndata,ma,b,a);
-<a name="l00140"></a>00140         *chisq=0.0;
-<a name="l00141"></a>00141         <span class="keywordflow">for</span> (i=1;i<=ndata;i++) {
-<a name="l00142"></a>00142                 (*funcs)(x[i],afunc,ma);
-<a name="l00143"></a>00143                 <span class="keywordflow">for</span> (sum=0.0,j=1;j<=ma;j++) sum += a[j]*afunc[j];
-<a name="l00144"></a>00144                 *chisq += (tmp=(y[i]-sum)/sig[i],tmp*tmp);
-<a name="l00145"></a>00145         }
-<a name="l00146"></a>00146         sinfo_free_vector(afunc,1<span class="comment">/*,ma*/</span>);
-<a name="l00147"></a>00147         sinfo_free_vector(b,1<span class="comment">/*,ndata*/</span>);
-<a name="l00148"></a>00148         sinfo_svd_variance(v,ma,w,cvm);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 }
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152 <span class="preprocessor">#undef TOL</span>
-<a name="l00153"></a>00153 <span class="preprocessor"></span>
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 <span class="keyword">static</span> <span class="keywordtype">float</span> at,bt,ct;
-<a name="l00157"></a>00157 <span class="preprocessor">#define SINFO_PYTHAG(a,b) ((at=fabs(a)) > (bt=fabs(b)) ? \</span>
-<a name="l00158"></a>00158 <span class="preprocessor">(ct=bt/at,at*sqrt(1.0+ct*ct)) : (bt ? (ct=at/bt,bt*sqrt(1.0+ct*ct)): 0.0))</span>
-<a name="l00159"></a>00159 <span class="preprocessor"></span>
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="keyword">static</span> <span class="keywordtype">float</span> maxarg1,maxarg2;
-<a name="l00162"></a>00162 <span class="preprocessor">#define SINFO_MAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\</span>
-<a name="l00163"></a>00163 <span class="preprocessor">        (maxarg1) : (maxarg2))</span>
-<a name="l00164"></a>00164 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))</span>
-<a name="l00165"></a>00165 <span class="preprocessor"></span>
-<a name="l00166"></a>00166 <span class="keywordtype">void</span> sinfo_svd_compare(<span class="keywordtype">float</span> **a,<span class="keywordtype">int</span> m,<span class="keywordtype">int</span> n,<span class="keywordtype">float</span> w[],<span class="keywordtype">float</span> **v)
-<a name="l00167"></a>00167 {
-<a name="l00168"></a>00168         <span class="keywordtype">int</span> flag,i,its,j,jj,k,l=0,nm=0;
-<a name="l00169"></a>00169         <span class="keywordtype">float</span> c,f,h,s,x,y,z;
-<a name="l00170"></a>00170         <span class="keywordtype">float</span> anorm=0.0,g=0.0,scale=0.0;
-<a name="l00171"></a>00171         <span class="keywordtype">float</span> *rv1;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173         <span class="keywordflow">if</span> (m < n) {
-<a name="l00174"></a>00174            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"SVDCMP: You must augment A with extra zero rows"</span>);
-<a name="l00175"></a>00175         }
-<a name="l00176"></a>00176         rv1=sinfo_vector(1,n);
-<a name="l00177"></a>00177         <span class="keywordflow">for</span> (i=1;i<=n;i++) {
-<a name="l00178"></a>00178                 l=i+1;
-<a name="l00179"></a>00179                 rv1[i]=scale*g;
-<a name="l00180"></a>00180                 g=s=scale=0.0;
-<a name="l00181"></a>00181                 <span class="keywordflow">if</span> (i <= m) {
-<a name="l00182"></a>00182                         <span class="keywordflow">for</span> (k=i;k<=m;k++) scale += fabs(a[k][i]);
-<a name="l00183"></a>00183                         <span class="keywordflow">if</span> (scale) {
-<a name="l00184"></a>00184                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) {
-<a name="l00185"></a>00185                                         a[k][i] /= scale;
-<a name="l00186"></a>00186                                         s += a[k][i]*a[k][i];
-<a name="l00187"></a>00187                                 }
-<a name="l00188"></a>00188                                 f=a[i][i];
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190                                 g = -SINFO_SIGN(sqrt(s),f);
-<a name="l00191"></a>00191                                 h=f*g-s;
-<a name="l00192"></a>00192                                 a[i][i]=f-g;
-<a name="l00193"></a>00193                                 <span class="keywordflow">if</span> (i != n) {
-<a name="l00194"></a>00194                                         <span class="keywordflow">for</span> (j=l;j<=n;j++) {
-<a name="l00195"></a>00195                                                 <span class="keywordflow">for</span> (s=0.0,k=i;k<=m;k++) {
-<a name="l00196"></a>00196                                                   s += a[k][i]*a[k][j];
-<a name="l00197"></a>00197                                                 }
-<a name="l00198"></a>00198                                                 f=s/h;
-<a name="l00199"></a>00199                                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) {
-<a name="l00200"></a>00200                                                   a[k][j] += f*a[k][i];
-<a name="l00201"></a>00201                                                 }
-<a name="l00202"></a>00202                                         }
-<a name="l00203"></a>00203                                 }
-<a name="l00204"></a>00204                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) a[k][i] *= scale;
-<a name="l00205"></a>00205                         }
-<a name="l00206"></a>00206                 }
-<a name="l00207"></a>00207                 w[i]=scale*g;
-<a name="l00208"></a>00208                 g=s=scale=0.0;
-<a name="l00209"></a>00209                 <span class="keywordflow">if</span> (i <= m && i != n) {
-<a name="l00210"></a>00210                         <span class="keywordflow">for</span> (k=l;k<=n;k++) scale += fabs(a[i][k]);
-<a name="l00211"></a>00211                         <span class="keywordflow">if</span> (scale) {
-<a name="l00212"></a>00212                           <span class="keywordflow">for</span> (k=l;k<=n;k++) {
-<a name="l00213"></a>00213                                  a[i][k] /= scale;
-<a name="l00214"></a>00214                                  s += a[i][k]*a[i][k];
-<a name="l00215"></a>00215                           }
-<a name="l00216"></a>00216                           f=a[i][l];
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218                           g = -SINFO_SIGN(sqrt(s),f);
-<a name="l00219"></a>00219                           h=f*g-s;
-<a name="l00220"></a>00220                           a[i][l]=f-g;
-<a name="l00221"></a>00221                           <span class="keywordflow">for</span> (k=l;k<=n;k++) rv1[k]=a[i][k]/h;
-<a name="l00222"></a>00222                           <span class="keywordflow">if</span> (i != m) {
-<a name="l00223"></a>00223                             <span class="keywordflow">for</span> (j=l;j<=m;j++) {
-<a name="l00224"></a>00224                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=n;k++) s += a[j][k]*a[i][k];
-<a name="l00225"></a>00225                               <span class="keywordflow">for</span> (k=l;k<=n;k++) a[j][k] += s*rv1[k];
-<a name="l00226"></a>00226                             }
-<a name="l00227"></a>00227                           }
-<a name="l00228"></a>00228                           <span class="keywordflow">for</span> (k=l;k<=n;k++) a[i][k] *= scale;
-<a name="l00229"></a>00229                         }
-<a name="l00230"></a>00230                 }
-<a name="l00231"></a>00231                 anorm=SINFO_MAX(anorm,(fabs(w[i])+fabs(rv1[i])));
-<a name="l00232"></a>00232         }
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234         <span class="keywordflow">for</span> (i=n;i>=1;i--) {
-<a name="l00235"></a>00235                 <span class="keywordflow">if</span> (i < n) {
-<a name="l00236"></a>00236                         <span class="keywordflow">if</span> (g) {
-<a name="l00237"></a>00237                           <span class="keywordflow">for</span> (j=l;j<=n;j++)
-<a name="l00238"></a>00238                               v[j][i]=(a[i][j]/a[i][l])/g;
-<a name="l00239"></a>00239                           <span class="keywordflow">for</span> (j=l;j<=n;j++) {
-<a name="l00240"></a>00240                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=n;k++) s += a[i][k]*v[k][j];
-<a name="l00241"></a>00241                               <span class="keywordflow">for</span> (k=l;k<=n;k++) v[k][j] += s*v[k][i];
-<a name="l00242"></a>00242                           }
-<a name="l00243"></a>00243                         }
-<a name="l00244"></a>00244                         <span class="keywordflow">for</span> (j=l;j<=n;j++) v[i][j]=v[j][i]=0.0;
-<a name="l00245"></a>00245                 }
-<a name="l00246"></a>00246                 v[i][i]=1.0;
-<a name="l00247"></a>00247                 g=rv1[i];
-<a name="l00248"></a>00248                 l=i;
-<a name="l00249"></a>00249         }
-<a name="l00250"></a>00250         <span class="keywordflow">for</span> (i=n;i>=1;i--) {
-<a name="l00251"></a>00251                 l=i+1;
-<a name="l00252"></a>00252                 g=w[i];
-<a name="l00253"></a>00253                 <span class="keywordflow">if</span> (i < n)
-<a name="l00254"></a>00254                         <span class="keywordflow">for</span> (j=l;j<=n;j++) a[i][j]=0.0;
-<a name="l00255"></a>00255                 <span class="keywordflow">if</span> (g) {
-<a name="l00256"></a>00256                         g=1.0/g;
-<a name="l00257"></a>00257                         <span class="keywordflow">if</span> (i != n) {
-<a name="l00258"></a>00258                             <span class="keywordflow">for</span> (j=l;j<=n;j++) {
-<a name="l00259"></a>00259                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=m;k++) s += a[k][i]*a[k][j];
-<a name="l00260"></a>00260                               f=(s/a[i][i])*g;
-<a name="l00261"></a>00261                               <span class="keywordflow">for</span> (k=i;k<=m;k++) a[k][j] += f*a[k][i];
-<a name="l00262"></a>00262                             }
-<a name="l00263"></a>00263                         }
-<a name="l00264"></a>00264                         <span class="keywordflow">for</span> (j=i;j<=m;j++) a[j][i] *= g;
-<a name="l00265"></a>00265                 } <span class="keywordflow">else</span> {
-<a name="l00266"></a>00266                         <span class="keywordflow">for</span> (j=i;j<=m;j++) a[j][i]=0.0;
-<a name="l00267"></a>00267                 }
-<a name="l00268"></a>00268                 ++a[i][i];
-<a name="l00269"></a>00269         }
-<a name="l00270"></a>00270         <span class="keywordflow">for</span> (k=n;k>=1;k--) {
-<a name="l00271"></a>00271                 <span class="keywordflow">for</span> (its=1;its<=30;its++) {
-<a name="l00272"></a>00272                         flag=1;
-<a name="l00273"></a>00273                         <span class="keywordflow">for</span> (l=k;l>=1;l--) {
-<a name="l00274"></a>00274                                 nm=l-1;
-<a name="l00275"></a>00275                                 <span class="keywordflow">if</span> (fabs(rv1[l])+anorm == anorm) {
-<a name="l00276"></a>00276                                         flag=0;
-<a name="l00277"></a>00277                                         <span class="keywordflow">break</span>;
-<a name="l00278"></a>00278                                 }
-<a name="l00279"></a>00279                                 <span class="keywordflow">if</span> (fabs(w[nm])+anorm == anorm) <span class="keywordflow">break</span>;
-<a name="l00280"></a>00280                         }
-<a name="l00281"></a>00281                         <span class="keywordflow">if</span> (flag) {
-<a name="l00282"></a>00282                                 c=0.0;
-<a name="l00283"></a>00283                                 s=1.0;
-<a name="l00284"></a>00284                                 <span class="keywordflow">for</span> (i=l;i<=k;i++) {
-<a name="l00285"></a>00285                                         f=s*rv1[i];
-<a name="l00286"></a>00286                                         <span class="keywordflow">if</span> (fabs(f)+anorm != anorm) {
-<a name="l00287"></a>00287                                                 g=w[i];
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289                                                 h=SINFO_PYTHAG(f,g);
-<a name="l00290"></a>00290                                                 w[i]=h;
-<a name="l00291"></a>00291                                                 h=1.0/h;
-<a name="l00292"></a>00292                                                 c=g*h;
-<a name="l00293"></a>00293                                                 s=(-f*h);
-<a name="l00294"></a>00294                                                 <span class="keywordflow">for</span> (j=1;j<=m;j++) {
-<a name="l00295"></a>00295                                                         y=a[j][nm];
-<a name="l00296"></a>00296                                                         z=a[j][i];
-<a name="l00297"></a>00297                                                         a[j][nm]=y*c+z*s;
-<a name="l00298"></a>00298                                                         a[j][i]=z*c-y*s;
-<a name="l00299"></a>00299                                                 }
-<a name="l00300"></a>00300                                         }
-<a name="l00301"></a>00301                                 }
-<a name="l00302"></a>00302                         }
-<a name="l00303"></a>00303                         z=w[k];
-<a name="l00304"></a>00304                         <span class="keywordflow">if</span> (l == k) {
-<a name="l00305"></a>00305                                 <span class="keywordflow">if</span> (z < 0.0) {
-<a name="l00306"></a>00306                                         w[k] = -z;
-<a name="l00307"></a>00307                                         <span class="keywordflow">for</span> (j=1;j<=n;j++) v[j][k]=(-v[j][k]);
-<a name="l00308"></a>00308                                 }
-<a name="l00309"></a>00309                                 <span class="keywordflow">break</span>;
-<a name="l00310"></a>00310                         }
-<a name="l00311"></a>00311                         <span class="keywordflow">if</span> (its == 30) {
-<a name="l00312"></a>00312                          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No convergence in 30 "</span>
-<a name="l00313"></a>00313                                          <span class="stringliteral">"SVDCMP iterations"</span>);
-<a name="l00314"></a>00314                         }
-<a name="l00315"></a>00315                         x=w[l];
-<a name="l00316"></a>00316                         nm=k-1;
-<a name="l00317"></a>00317                         y=w[nm];
-<a name="l00318"></a>00318                         g=rv1[nm];
-<a name="l00319"></a>00319                         h=rv1[k];
-<a name="l00320"></a>00320                         f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y);
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322                         g=SINFO_PYTHAG(f,1.0);
-<a name="l00323"></a>00323                         f=((x-z)*(x+z)+h*((y/(f+SINFO_SIGN(g,f)))-h))/x;
-<a name="l00324"></a>00324                         c=s=1.0;
-<a name="l00325"></a>00325                         <span class="keywordflow">for</span> (j=l;j<=nm;j++) {
-<a name="l00326"></a>00326                                 i=j+1;
-<a name="l00327"></a>00327                                 g=rv1[i];
-<a name="l00328"></a>00328                                 y=w[i];
-<a name="l00329"></a>00329                                 h=s*g;
-<a name="l00330"></a>00330                                 g=c*g;
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332                                 z=SINFO_PYTHAG(f,h);
-<a name="l00333"></a>00333                                 rv1[j]=z;
-<a name="l00334"></a>00334                                 c=f/z;
-<a name="l00335"></a>00335                                 s=h/z;
-<a name="l00336"></a>00336                                 f=x*c+g*s;
-<a name="l00337"></a>00337                                 g=g*c-x*s;
-<a name="l00338"></a>00338                                 h=y*s;
-<a name="l00339"></a>00339                                 y=y*c;
-<a name="l00340"></a>00340                                 <span class="keywordflow">for</span> (jj=1;jj<=n;jj++) {
-<a name="l00341"></a>00341                                         x=v[jj][j];
-<a name="l00342"></a>00342                                         z=v[jj][i];
-<a name="l00343"></a>00343                                         v[jj][j]=x*c+z*s;
-<a name="l00344"></a>00344                                         v[jj][i]=z*c-x*s;
-<a name="l00345"></a>00345                                 }
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347                                 z=SINFO_PYTHAG(f,h);
-<a name="l00348"></a>00348                                 w[j]=z;
-<a name="l00349"></a>00349                                 <span class="keywordflow">if</span> (z) {
-<a name="l00350"></a>00350                                         z=1.0/z;
-<a name="l00351"></a>00351                                         c=f*z;
-<a name="l00352"></a>00352                                         s=h*z;
-<a name="l00353"></a>00353                                 }
-<a name="l00354"></a>00354                                 f=(c*g)+(s*y);
-<a name="l00355"></a>00355                                 x=(c*y)-(s*g);
-<a name="l00356"></a>00356                                 <span class="keywordflow">for</span> (jj=1;jj<=m;jj++) {
-<a name="l00357"></a>00357                                         y=a[jj][j];
-<a name="l00358"></a>00358                                         z=a[jj][i];
-<a name="l00359"></a>00359                                         a[jj][j]=y*c+z*s;
-<a name="l00360"></a>00360                                         a[jj][i]=z*c-y*s;
-<a name="l00361"></a>00361                                 }
-<a name="l00362"></a>00362                         }
-<a name="l00363"></a>00363                         rv1[l]=0.0;
-<a name="l00364"></a>00364                         rv1[k]=f;
-<a name="l00365"></a>00365                         w[k]=x;
-<a name="l00366"></a>00366                 }
-<a name="l00367"></a>00367         }
-<a name="l00368"></a>00368         sinfo_free_vector(rv1,1<span class="comment">/*,n*/</span>);
-<a name="l00369"></a>00369 }
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371 <span class="preprocessor">#undef SINFO_SIGN</span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#undef SINFO_MAX</span>
-<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#undef SINFO_PYTHAG</span>
-<a name="l00374"></a>00374 <span class="preprocessor"></span>
-<a name="l00375"></a>00375 <span class="preprocessor">#define NR_END 1</span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#define FREE_ARG char*</span>
-<a name="l00377"></a>00377 <span class="preprocessor"></span>
-<a name="l00378"></a>00378 <span class="keywordtype">void</span> sinfo_nerror(<span class="keyword">const</span> <span class="keywordtype">char</span> error_text[])
-<a name="l00379"></a>00379 {
-<a name="l00380"></a>00380         fprintf(stderr,<span class="stringliteral">"Runtime ERROR ...\n"</span>);
-<a name="l00381"></a>00381         fprintf(stderr,<span class="stringliteral">"%s\n"</span>,error_text);
-<a name="l00382"></a>00382         fprintf(stderr,<span class="stringliteral">"exiting system \n"</span>);
-<a name="l00383"></a>00383     <span class="keywordflow">return</span>;
-<a name="l00384"></a>00384 }
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386 <span class="keywordtype">float</span> *sinfo_vector(<span class="keywordtype">long</span> nl, <span class="keywordtype">long</span> nh)
-<a name="l00387"></a>00387 {
-<a name="l00388"></a>00388         <span class="keywordtype">float</span> *v;
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390         v=(<span class="keywordtype">float</span> *)cpl_malloc((<span class="keywordtype">size_t</span>) ((nh-nl+1+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)));
-<a name="l00391"></a>00391         <span class="keywordflow">if</span> (!v) {
-<a name="l00392"></a>00392            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocation failure in sinfo_vector()"</span>);
-<a name="l00393"></a>00393         }
-<a name="l00394"></a>00394         <span class="keywordflow">return</span> v-nl+NR_END;
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 }
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 <span class="keywordtype">void</span> sinfo_free_vector(<span class="keywordtype">float</span> *v, <span class="keywordtype">long</span> nl<span class="comment">/* , long nh*/</span>)
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400 {
-<a name="l00401"></a>00401         cpl_free((FREE_ARG) (v+nl-NR_END));
-<a name="l00402"></a>00402 }
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404 <span class="keywordtype">float</span> **sinfo_matrix(<span class="keywordtype">long</span> nrl, <span class="keywordtype">long</span> nrh, <span class="keywordtype">long</span> ncl, <span class="keywordtype">long</span> nch)
-<a name="l00405"></a>00405 {
-<a name="l00406"></a>00406         <span class="keywordtype">long</span> i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
-<a name="l00407"></a>00407         <span class="keywordtype">float</span> **m;
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409         m=(<span class="keywordtype">float</span> **) cpl_malloc((<span class="keywordtype">size_t</span>)((nrow+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)));
-<a name="l00410"></a>00410         <span class="keywordflow">if</span> (!m) {
-<a name="l00411"></a>00411           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"aloccation failure 1 in sinfo_matrix()"</span>);
-<a name="l00412"></a>00412         }
-<a name="l00413"></a>00413         m += NR_END;
-<a name="l00414"></a>00414         m -= nrl;
-<a name="l00415"></a>00415 
-<a name="l00416"></a>00416         m[nrl]=(<span class="keywordtype">float</span> *)cpl_malloc((<span class="keywordtype">size_t</span>)((nrow*ncol+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)));
-<a name="l00417"></a>00417         <span class="keywordflow">if</span> (!m[nrl]) {
-<a name="l00418"></a>00418            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocation failure 2 in sinfo_matrix()"</span>);
-<a name="l00419"></a>00419         }
-<a name="l00420"></a>00420         m[nrl] += NR_END;
-<a name="l00421"></a>00421         m[nrl] -= ncl;
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423         <span class="keywordflow">for</span>(i=nrl+1;i<=nrh;i++) m[i] = m[i-1]+ncol;
-<a name="l00424"></a>00424         <span class="keywordflow">return</span> m;
-<a name="l00425"></a>00425 }
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427 <span class="keywordtype">void</span> sinfo_free_matrix(<span class="keywordtype">float</span> **m,<span class="keywordtype">long</span> nrl<span class="comment">/*, long nrh*/</span>, <span class="keywordtype">long</span> ncl<span class="comment">/*, long nch*/</span>)
-<a name="l00428"></a>00428 {
-<a name="l00429"></a>00429         cpl_free((FREE_ARG)(m[nrl]+ncl-NR_END));
-<a name="l00430"></a>00430         cpl_free((FREE_ARG)(m+nrl-NR_END));
-<a name="l00431"></a>00431 }
-<a name="l00432"></a>00432 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_svd.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/**************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  16/04/03  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_svd.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keywordtype">void</span> sinfo_fpol(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *p, <span class="keywordtype">int</span> np)</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> {</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     <span class="keywordtype">int</span> j ;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     p[1] = 1.0 ;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     <span class="keywordflow">for</span> ( j = 2 ; j <= np ; j++ )</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>         p[j] = p[j-1]*x ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     }</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> }</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> sinfo_svb_kas(<span class="keywordtype">float</span> **u, <span class="keywordtype">float</span> w[], <span class="keywordtype">float</span> **v, <span class="keywordtype">int</span> m, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>               <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> b[],<span class="keywordtype">float</span> x[])</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span> jj,j,i;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">float</span> s,*tmp;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         tmp=sinfo_vector(1,n);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordflow">for</span> (j=1;j<=n;j++) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                 s=0.0;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                 <span class="keywordflow">if</span> (w[j]) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                         <span class="keywordflow">for</span> (i=1;i<=m;i++) s += u[i][j]*b[i];</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                         s /= w[j];</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                 }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                 tmp[j]=s;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordflow">for</span> (j=1;j<=n;j++) {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                 s=0.0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                 <span class="keywordflow">for</span> (jj=1;jj<=n;jj++) s += v[j][jj]*tmp[jj];</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>                 x[j]=s;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         sinfo_free_vector(tmp,1<span class="comment">/*,n*/</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">void</span> sinfo_svd_variance(<span class="keywordtype">float</span> **v , <span class="keywordtype">int</span> ma , <span class="keywordtype">float</span> w[] , <span class="keywordtype">float</span> **cvm)</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">int</span> k,j,i;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="keywordtype">float</span> sum,*wti;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         wti=sinfo_vector(1,ma);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>         <span class="keywordflow">for</span> (i=1;i<=ma;i++) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                 wti[i]=0.0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                 <span class="keywordflow">if</span> (w[i]) wti[i]=1.0/(w[i]*w[i]);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="keywordflow">for</span> (i=1;i<=ma;i++) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>             <span class="keywordflow">for</span> (j=1;j<=i;j++) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                <span class="keywordflow">for</span> (sum=0.0,k=1;k<=ma;k++) sum += (v[i][k]*v[j][k]*wti[k]);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                cvm[j][i]=cvm[i][j]=sum;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>             }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         sinfo_free_vector(wti,1<span class="comment">/*,ma*/</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> }</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#define TOL 1.0e-5</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keywordtype">void</span> sinfo_svd_fitting ( <span class="keywordtype">float</span> *x,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                    <span class="keywordtype">float</span> *y,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                    <span class="keywordtype">float</span> *sig,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                    <span class="keywordtype">int</span>   ndata,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                    <span class="keywordtype">float</span> *a,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                    <span class="keywordtype">int</span>   ma,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                    <span class="keywordtype">float</span> **u,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                    <span class="keywordtype">float</span> **v,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                    <span class="keywordtype">float</span> *w,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                    <span class="keywordtype">float</span> **cvm,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                    <span class="keywordtype">float</span> *chisq,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                    <span class="keywordtype">void</span> (*funcs)(<span class="keywordtype">float</span>,<span class="keywordtype">float</span> *,<span class="keywordtype">int</span>) )</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> {</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         <span class="keywordtype">int</span> j,i;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         <span class="keywordtype">float</span> <span class="comment">/*sini,*/</span>wmax,tmp,thresh,sum,*b,*afunc;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         b=sinfo_vector(1,ndata);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         afunc=sinfo_vector(1,ma);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>         <span class="keywordflow">for</span> (i=1;i<=ndata;i++) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                 (*funcs)(x[i],afunc,ma);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                 tmp=1.0/sig[i];</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                 <span class="keywordflow">for</span> (j=1;j<=ma;j++) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                         u[i][j]=afunc[j]*tmp;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                 }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                 b[i]=y[i]*tmp;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>         sinfo_svd_compare(u,ndata,ma,w,v);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         wmax=0.0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <span class="keywordflow">for</span> (j=1;j<=ma;j++)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                 <span class="keywordflow">if</span> (w[j] > wmax) wmax=w[j];</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         thresh=TOL*wmax;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordflow">for</span> (j=1;j<=ma;j++) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>           <span class="keywordflow">if</span> (w[j] < thresh) {</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             w[j]=0.0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"SVD_FITTING detected singular value in fit !"</span>);</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           }</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         sinfo_svb_kas(u,w,v,ndata,ma,b,a);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         *chisq=0.0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         <span class="keywordflow">for</span> (i=1;i<=ndata;i++) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                 (*funcs)(x[i],afunc,ma);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                 <span class="keywordflow">for</span> (sum=0.0,j=1;j<=ma;j++) sum += a[j]*afunc[j];</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                 *chisq += (tmp=(y[i]-sum)/sig[i],tmp*tmp);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>         }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         sinfo_free_vector(afunc,1<span class="comment">/*,ma*/</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         sinfo_free_vector(b,1<span class="comment">/*,ndata*/</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>         sinfo_svd_variance(v,ma,w,cvm);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> }</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="preprocessor">#undef TOL</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="keyword">static</span> <span class="keywordtype">float</span> at,bt,ct;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="preprocessor">#define SINFO_PYTHAG(a,b) ((at=fabs(a)) > (bt=fabs(b)) ? \</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="preprocessor">(ct=bt/at,at*sqrt(1.0+ct*ct)) : (bt ? (ct=at/bt,bt*sqrt(1.0+ct*ct)): 0.0))</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="keyword">static</span> <span class="keywordtype">float</span> maxarg1,maxarg2;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="preprocessor">#define SINFO_MAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="preprocessor">        (maxarg1) : (maxarg2))</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="keywordtype">void</span> sinfo_svd_compare(<span class="keywordtype">float</span> **a,<span class="keywordtype">int</span> m,<span class="keywordtype">int</span> n,<span class="keywordtype">float</span> w[],<span class="keywordtype">float</span> **v)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         <span class="keywordtype">int</span> flag,i,its,j,jj,k,l=0,nm=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         <span class="keywordtype">float</span> c,f,h,s,x,y,z;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         <span class="keywordtype">float</span> anorm=0.0,g=0.0,scale=0.0;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         <span class="keywordtype">float</span> *rv1;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>         <span class="keywordflow">if</span> (m < n) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"SVDCMP: You must augment A with extra zero rows"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>         }</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>         rv1=sinfo_vector(1,n);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         <span class="keywordflow">for</span> (i=1;i<=n;i++) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                 l=i+1;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                 rv1[i]=scale*g;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                 g=s=scale=0.0;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                 <span class="keywordflow">if</span> (i <= m) {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                         <span class="keywordflow">for</span> (k=i;k<=m;k++) scale += fabs(a[k][i]);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                         <span class="keywordflow">if</span> (scale) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                                         a[k][i] /= scale;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                                         s += a[k][i]*a[k][i];</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                                 }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>                                 f=a[i][i];</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                                 g = -SINFO_SIGN(sqrt(s),f);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                                 h=f*g-s;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                 a[i][i]=f-g;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                                 <span class="keywordflow">if</span> (i != n) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                         <span class="keywordflow">for</span> (j=l;j<=n;j++) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                                 <span class="keywordflow">for</span> (s=0.0,k=i;k<=m;k++) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                                   s += a[k][i]*a[k][j];</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                                 }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                                 f=s/h;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                                   a[k][j] += f*a[k][i];</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                                 }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                                         }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                 }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                 <span class="keywordflow">for</span> (k=i;k<=m;k++) a[k][i] *= scale;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                         }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                 }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                 w[i]=scale*g;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                 g=s=scale=0.0;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                 <span class="keywordflow">if</span> (i <= m && i != n) {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                         <span class="keywordflow">for</span> (k=l;k<=n;k++) scale += fabs(a[i][k]);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                         <span class="keywordflow">if</span> (scale) {</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                           <span class="keywordflow">for</span> (k=l;k<=n;k++) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                                  a[i][k] /= scale;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                                  s += a[i][k]*a[i][k];</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                           }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                           f=a[i][l];</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                           g = -SINFO_SIGN(sqrt(s),f);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                           h=f*g-s;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                           a[i][l]=f-g;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                           <span class="keywordflow">for</span> (k=l;k<=n;k++) rv1[k]=a[i][k]/h;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                           <span class="keywordflow">if</span> (i != m) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                             <span class="keywordflow">for</span> (j=l;j<=m;j++) {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=n;k++) s += a[j][k]*a[i][k];</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="keywordflow">for</span> (k=l;k<=n;k++) a[j][k] += s*rv1[k];</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                             }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                           }</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                           <span class="keywordflow">for</span> (k=l;k<=n;k++) a[i][k] *= scale;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                         }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                 }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                 anorm=SINFO_MAX(anorm,(fabs(w[i])+fabs(rv1[i])));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">for</span> (i=n;i>=1;i--) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>                 <span class="keywordflow">if</span> (i < n) {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                         <span class="keywordflow">if</span> (g) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                           <span class="keywordflow">for</span> (j=l;j<=n;j++)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                               v[j][i]=(a[i][j]/a[i][l])/g;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                           <span class="keywordflow">for</span> (j=l;j<=n;j++) {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=n;k++) s += a[i][k]*v[k][j];</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               <span class="keywordflow">for</span> (k=l;k<=n;k++) v[k][j] += s*v[k][i];</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                           }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                         }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                         <span class="keywordflow">for</span> (j=l;j<=n;j++) v[i][j]=v[j][i]=0.0;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                 }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>                 v[i][i]=1.0;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>                 g=rv1[i];</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>                 l=i;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         <span class="keywordflow">for</span> (i=n;i>=1;i--) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                 l=i+1;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>                 g=w[i];</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                 <span class="keywordflow">if</span> (i < n)</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                         <span class="keywordflow">for</span> (j=l;j<=n;j++) a[i][j]=0.0;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                 <span class="keywordflow">if</span> (g) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                         g=1.0/g;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                         <span class="keywordflow">if</span> (i != n) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                             <span class="keywordflow">for</span> (j=l;j<=n;j++) {</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="keywordflow">for</span> (s=0.0,k=l;k<=m;k++) s += a[k][i]*a[k][j];</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                               f=(s/a[i][i])*g;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               <span class="keywordflow">for</span> (k=i;k<=m;k++) a[k][j] += f*a[k][i];</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                             }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                         }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                         <span class="keywordflow">for</span> (j=i;j<=m;j++) a[j][i] *= g;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                 } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                         <span class="keywordflow">for</span> (j=i;j<=m;j++) a[j][i]=0.0;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                 }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                 ++a[i][i];</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         <span class="keywordflow">for</span> (k=n;k>=1;k--) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                 <span class="keywordflow">for</span> (its=1;its<=30;its++) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                         flag=1;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                         <span class="keywordflow">for</span> (l=k;l>=1;l--) {</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                                 nm=l-1;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                                 <span class="keywordflow">if</span> (fabs(rv1[l])+anorm == anorm) {</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>                                         flag=0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>                                         <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                                 }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                                 <span class="keywordflow">if</span> (fabs(w[nm])+anorm == anorm) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                         }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>                         <span class="keywordflow">if</span> (flag) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                 c=0.0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                                 s=1.0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                                 <span class="keywordflow">for</span> (i=l;i<=k;i++) {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                                         f=s*rv1[i];</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                                         <span class="keywordflow">if</span> (fabs(f)+anorm != anorm) {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                                                 g=w[i];</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                                                 h=SINFO_PYTHAG(f,g);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                                 w[i]=h;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                                 h=1.0/h;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                                                 c=g*h;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                                                 s=(-f*h);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                                 <span class="keywordflow">for</span> (j=1;j<=m;j++) {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                                         y=a[j][nm];</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                                         z=a[j][i];</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                                                         a[j][nm]=y*c+z*s;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                                                         a[j][i]=z*c-y*s;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                                                 }</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                                         }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                                 }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                         }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                         z=w[k];</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                         <span class="keywordflow">if</span> (l == k) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                 <span class="keywordflow">if</span> (z < 0.0) {</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                         w[k] = -z;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                         <span class="keywordflow">for</span> (j=1;j<=n;j++) v[j][k]=(-v[j][k]);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                                 }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                 <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                         }</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                         <span class="keywordflow">if</span> (its == 30) {</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No convergence in 30 "</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                                          <span class="stringliteral">"SVDCMP iterations"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                         }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                         x=w[l];</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                         nm=k-1;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                         y=w[nm];</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                         g=rv1[nm];</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                         h=rv1[k];</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                         f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                         g=SINFO_PYTHAG(f,1.0);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                         f=((x-z)*(x+z)+h*((y/(f+SINFO_SIGN(g,f)))-h))/x;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                         c=s=1.0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                         <span class="keywordflow">for</span> (j=l;j<=nm;j++) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                                 i=j+1;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                 g=rv1[i];</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                                 y=w[i];</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                                 h=s*g;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                                 g=c*g;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                                 z=SINFO_PYTHAG(f,h);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                                 rv1[j]=z;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                                 c=f/z;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                                 s=h/z;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>                                 f=x*c+g*s;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                                 g=g*c-x*s;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                                 h=y*s;</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                                 y=y*c;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                                 <span class="keywordflow">for</span> (jj=1;jj<=n;jj++) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                                         x=v[jj][j];</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                                         z=v[jj][i];</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                                         v[jj][j]=x*c+z*s;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                                         v[jj][i]=z*c-x*s;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                                 }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>                                 z=SINFO_PYTHAG(f,h);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>                                 w[j]=z;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                                 <span class="keywordflow">if</span> (z) {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>                                         z=1.0/z;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>                                         c=f*z;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>                                         s=h*z;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>                                 }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>                                 f=(c*g)+(s*y);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                                 x=(c*y)-(s*g);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                                 <span class="keywordflow">for</span> (jj=1;jj<=m;jj++) {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                                         y=a[jj][j];</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                                         z=a[jj][i];</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                                         a[jj][j]=y*c+z*s;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                                         a[jj][i]=z*c-y*s;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>                                 }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                         }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                         rv1[l]=0.0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                         rv1[k]=f;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                         w[k]=x;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                 }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         }</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         sinfo_free_vector(rv1,1<span class="comment">/*,n*/</span>);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor">#undef SINFO_SIGN</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor"></span><span class="preprocessor">#undef SINFO_MAX</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="preprocessor"></span><span class="preprocessor">#undef SINFO_PYTHAG</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">#define NR_END 1</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor"></span><span class="preprocessor">#define FREE_ARG char*</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="keywordtype">void</span> sinfo_nerror(<span class="keyword">const</span> <span class="keywordtype">char</span> error_text[])</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         fprintf(stderr,<span class="stringliteral">"Runtime ERROR ...\n"</span>);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         fprintf(stderr,<span class="stringliteral">"%s\n"</span>,error_text);</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         fprintf(stderr,<span class="stringliteral">"exiting system \n"</span>);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="keywordtype">float</span> *sinfo_vector(<span class="keywordtype">long</span> nl, <span class="keywordtype">long</span> nh)</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>         <span class="keywordtype">float</span> *v;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         v=(<span class="keywordtype">float</span> *)cpl_malloc((<span class="keywordtype">size_t</span>) ((nh-nl+1+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)));</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         <span class="keywordflow">if</span> (!v) {</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocation failure in sinfo_vector()"</span>);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         <span class="keywordflow">return</span> v-nl+NR_END;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> }</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="keywordtype">void</span> sinfo_free_vector(<span class="keywordtype">float</span> *v, <span class="keywordtype">long</span> nl<span class="comment">/* , long nh*/</span>)</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         cpl_free((FREE_ARG) (v+nl-NR_END));</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> }</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> <span class="keywordtype">float</span> **sinfo_matrix(<span class="keywordtype">long</span> nrl, <span class="keywordtype">long</span> nrh, <span class="keywordtype">long</span> ncl, <span class="keywordtype">long</span> nch)</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>         <span class="keywordtype">long</span> i, nrow=nrh-nrl+1,ncol=nch-ncl+1;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         <span class="keywordtype">float</span> **m;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         m=(<span class="keywordtype">float</span> **) cpl_malloc((<span class="keywordtype">size_t</span>)((nrow+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)));</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         <span class="keywordflow">if</span> (!m) {</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"aloccation failure 1 in sinfo_matrix()"</span>);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>         }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         m += NR_END;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         m -= nrl;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         m[nrl]=(<span class="keywordtype">float</span> *)cpl_malloc((<span class="keywordtype">size_t</span>)((nrow*ncol+NR_END)*<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)));</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordflow">if</span> (!m[nrl]) {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>            <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"allocation failure 2 in sinfo_matrix()"</span>);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         }</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>         m[nrl] += NR_END;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>         m[nrl] -= ncl;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>         <span class="keywordflow">for</span>(i=nrl+1;i<=nrh;i++) m[i] = m[i-1]+ncol;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         <span class="keywordflow">return</span> m;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="keywordtype">void</span> sinfo_free_matrix(<span class="keywordtype">float</span> **m,<span class="keywordtype">long</span> nrl<span class="comment">/*, long nrh*/</span>, <span class="keywordtype">long</span> ncl<span class="comment">/*, long nch*/</span>)</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>         cpl_free((FREE_ARG)(m[nrl]+ncl-NR_END));</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         cpl_free((FREE_ARG)(m+nrl-NR_END));</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> }</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__svd_8h_source.html b/html/sinfo__svd_8h_source.html
index 975d0bf..22b005a 100644
--- a/html/sinfo__svd_8h_source.html
+++ b/html/sinfo__svd_8h_source.html
@@ -2,99 +2,130 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_svd.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_svd.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_SVD_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SVD_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_svd.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  16/04/03  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_svd.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * singular value decomposition fit routines</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <math.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00043"></a>00043 
-<a name="l00044"></a>00044 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment"> *                        Function ANSI C prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="keywordtype">void</span> sinfo_fpol(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *p, <span class="keywordtype">int</span> np) ;
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keywordtype">void</span> 
-<a name="l00051"></a>00051 sinfo_svb_kas(<span class="keywordtype">float</span> **u, <span class="keywordtype">float</span> w[], <span class="keywordtype">float</span> **v, <span class="keywordtype">int</span> m, 
-<a name="l00052"></a>00052               <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> b[],<span class="keywordtype">float</span> x[]) ;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keywordtype">void</span> sinfo_svd_variance(<span class="keywordtype">float</span> **v , <span class="keywordtype">int</span> ma , <span class="keywordtype">float</span> w[] , <span class="keywordtype">float</span> **cvm) ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keywordtype">void</span> sinfo_svd_fitting ( <span class="keywordtype">float</span> *x,
-<a name="l00057"></a>00057                    <span class="keywordtype">float</span> *y,
-<a name="l00058"></a>00058                    <span class="keywordtype">float</span> *sig,
-<a name="l00059"></a>00059                    <span class="keywordtype">int</span>   ndata,
-<a name="l00060"></a>00060                    <span class="keywordtype">float</span> *a,
-<a name="l00061"></a>00061                    <span class="keywordtype">int</span>   ma,
-<a name="l00062"></a>00062                    <span class="keywordtype">float</span> **u,
-<a name="l00063"></a>00063                    <span class="keywordtype">float</span> **v,
-<a name="l00064"></a>00064                    <span class="keywordtype">float</span> *w,
-<a name="l00065"></a>00065                    <span class="keywordtype">float</span> **cvm,
-<a name="l00066"></a>00066                    <span class="keywordtype">float</span> *chisq,
-<a name="l00067"></a>00067                    <span class="keywordtype">void</span> (*funcs)(<span class="keywordtype">float</span>,<span class="keywordtype">float</span> *,<span class="keywordtype">int</span>) ) ;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="keywordtype">void</span> sinfo_svd_compare(<span class="keywordtype">float</span> **a,<span class="keywordtype">int</span> m,<span class="keywordtype">int</span> n,<span class="keywordtype">float</span> w[],<span class="keywordtype">float</span> **v) ;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keywordtype">void</span> sinfo_nerror(<span class="keyword">const</span> <span class="keywordtype">char</span> error_text[]) ;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="keywordtype">float</span> *sinfo_vector(<span class="keywordtype">long</span> nl, <span class="keywordtype">long</span> nh) ;
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keywordtype">void</span> sinfo_free_vector(<span class="keywordtype">float</span> *v, <span class="keywordtype">long</span> nl <span class="comment">/*, long nh*/</span>) ;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keywordtype">float</span> **sinfo_matrix(<span class="keywordtype">long</span> nrl, <span class="keywordtype">long</span> nrh, <span class="keywordtype">long</span> ncl, <span class="keywordtype">long</span> nch) ;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keywordtype">void</span> 
-<a name="l00080"></a>00080 sinfo_free_matrix(<span class="keywordtype">float</span> **m,<span class="keywordtype">long</span> nrl<span class="comment">/*, long nrh*/</span>, <span class="keywordtype">long</span> ncl<span class="comment">/*, long nch*/</span>) ;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="preprocessor">#endif </span>
-<a name="l00085"></a>00085 <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_svd.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_SVD_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_SVD_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_svd.h,v 1.4 2007/06/06 07:10:45 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  16/04/03  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_svd.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * singular value decomposition fit routines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keywordtype">void</span> sinfo_fpol(<span class="keywordtype">float</span> x, <span class="keywordtype">float</span> *p, <span class="keywordtype">int</span> np) ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_svb_kas(<span class="keywordtype">float</span> **u, <span class="keywordtype">float</span> w[], <span class="keywordtype">float</span> **v, <span class="keywordtype">int</span> m, </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>               <span class="keywordtype">int</span> n, <span class="keywordtype">float</span> b[],<span class="keywordtype">float</span> x[]) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">void</span> sinfo_svd_variance(<span class="keywordtype">float</span> **v , <span class="keywordtype">int</span> ma , <span class="keywordtype">float</span> w[] , <span class="keywordtype">float</span> **cvm) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">void</span> sinfo_svd_fitting ( <span class="keywordtype">float</span> *x,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                    <span class="keywordtype">float</span> *y,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                    <span class="keywordtype">float</span> *sig,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                    <span class="keywordtype">int</span>   ndata,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                    <span class="keywordtype">float</span> *a,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                    <span class="keywordtype">int</span>   ma,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                    <span class="keywordtype">float</span> **u,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                    <span class="keywordtype">float</span> **v,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                    <span class="keywordtype">float</span> *w,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                    <span class="keywordtype">float</span> **cvm,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                    <span class="keywordtype">float</span> *chisq,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                    <span class="keywordtype">void</span> (*funcs)(<span class="keywordtype">float</span>,<span class="keywordtype">float</span> *,<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">void</span> sinfo_svd_compare(<span class="keywordtype">float</span> **a,<span class="keywordtype">int</span> m,<span class="keywordtype">int</span> n,<span class="keywordtype">float</span> w[],<span class="keywordtype">float</span> **v) ;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keywordtype">void</span> sinfo_nerror(<span class="keyword">const</span> <span class="keywordtype">char</span> error_text[]) ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">float</span> *sinfo_vector(<span class="keywordtype">long</span> nl, <span class="keywordtype">long</span> nh) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> sinfo_free_vector(<span class="keywordtype">float</span> *v, <span class="keywordtype">long</span> nl <span class="comment">/*, long nh*/</span>) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">float</span> **sinfo_matrix(<span class="keywordtype">long</span> nrl, <span class="keywordtype">long</span> nrh, <span class="keywordtype">long</span> ncl, <span class="keywordtype">long</span> nch) ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_free_matrix(<span class="keywordtype">float</span> **m,<span class="keywordtype">long</span> nrl<span class="comment">/*, long nrh*/</span>, <span class="keywordtype">long</span> ncl<span class="comment">/*, long nch*/</span>) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#endif </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor"></span><span class="comment">/*--------------------------------------------------------------------------*/</span><span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tilt__cfg_8c_source.html b/html/sinfo__tilt__cfg_8c_source.html
index c68df62..b0a3081 100644
--- a/html/sinfo__tilt__cfg_8c_source.html
+++ b/html/sinfo__tilt__cfg_8c_source.html
@@ -2,90 +2,121 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tilt_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tilt_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    tilt_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Autor    :       Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    handles the data structure tilt_config</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_tilt_cfg.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                              Function codes</span>
-<a name="l00046"></a>00046 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">   Function :   sinfo_tilt_cfg_create()</span>
-<a name="l00050"></a>00050 <span class="comment">   In       :   void</span>
-<a name="l00051"></a>00051 <span class="comment">   Out      :   pointer to allocated base tilt_config structure</span>
-<a name="l00052"></a>00052 <span class="comment">   Job      :   allocate memory for a tilt_config struct</span>
-<a name="l00053"></a>00053 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00054"></a>00054 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 tilt_config * sinfo_tilt_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00057"></a>00057 {
-<a name="l00058"></a>00058     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(tilt_config));
-<a name="l00059"></a>00059 }
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">   Function :   sinfo_tilt_cfg_destroy()</span>
-<a name="l00064"></a>00064 <span class="comment">   In       :   tilt_config to deallocate</span>
-<a name="l00065"></a>00065 <span class="comment">   Out      :   void</span>
-<a name="l00066"></a>00066 <span class="comment">   Job      :   deallocate all memory associated with a </span>
-<a name="l00067"></a>00067 <span class="comment">                tilt_config data structure</span>
-<a name="l00068"></a>00068 <span class="comment">   Notice   :   </span>
-<a name="l00069"></a>00069 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keywordtype">void</span> sinfo_tilt_cfg_destroy(tilt_config * sc)
-<a name="l00072"></a>00072 {
-<a name="l00073"></a>00073     <span class="keywordflow">if</span> (sc==NULL) return ;
-<a name="l00074"></a>00074    <span class="comment">/* cpl_free(sc->frametype);*/</span>
-<a name="l00075"></a>00075     
-<a name="l00076"></a>00076     <span class="comment">/* Free main struct */</span>
-<a name="l00077"></a>00077     cpl_free(sc);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     return ;
-<a name="l00080"></a>00080 }
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tilt_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    tilt_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Autor    :       Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    handles the data structure tilt_config</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_tilt_cfg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">   Function :   sinfo_tilt_cfg_create()</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   Out      :   pointer to allocated base tilt_config structure</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   Job      :   allocate memory for a tilt_config struct</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> tilt_config * sinfo_tilt_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> {</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(tilt_config));</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> }</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">   Function :   sinfo_tilt_cfg_destroy()</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">   In       :   tilt_config to deallocate</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   Job      :   deallocate all memory associated with a </span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                tilt_config data structure</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keywordtype">void</span> sinfo_tilt_cfg_destroy(tilt_config * sc)</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>     <span class="keywordflow">if</span> (sc==NULL) return ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>    <span class="comment">/* cpl_free(sc->frametype);*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     cpl_free(sc);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     return ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tilt__cfg_8h_source.html b/html/sinfo__tilt__cfg_8h_source.html
index 69aaf4f..32234b4 100644
--- a/html/sinfo__tilt__cfg_8h_source.html
+++ b/html/sinfo__tilt__cfg_8h_source.html
@@ -2,104 +2,135 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tilt_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tilt_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name     :    sinfo_tilt_cfg.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on    :    October 2001</span>
-<a name="l00023"></a>00023 <span class="comment">   Description    :    tilt_ini definitions + handling prototypes</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_TILT_CFG_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TILT_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                   Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Defines</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00037"></a>00037 <span class="comment">                                   New types</span>
-<a name="l00038"></a>00038 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00039"></a>00039 <span class="comment">/*</span>
-<a name="l00040"></a>00040 <span class="comment">  determination of spectral tilt blackboard container</span>
-<a name="l00041"></a>00041 <span class="comment"></span>
-<a name="l00042"></a>00042 <span class="comment">  This structure holds all information related to the determination </span>
-<a name="l00043"></a>00043 <span class="comment">  of the spectral tilt routine. It is used as a container for the flux </span>
-<a name="l00044"></a>00044 <span class="comment">  of ancillary data, computed values, and algorithm status. Pixel flux </span>
-<a name="l00045"></a>00045 <span class="comment">  is separated from the blackboard.</span>
-<a name="l00046"></a>00046 <span class="comment">  */</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="keyword">typedef</span> <span class="keyword">struct </span>tilt_config {
-<a name="l00049"></a>00049 <span class="comment">/*-------General---------*/</span>
-<a name="l00050"></a>00050         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;    <span class="comment">/* file name of the file containing </span>
-<a name="l00051"></a>00051 <span class="comment">                                          the list of all input frames */</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ;   <span class="comment">/* output name of resulting fits </span>
-<a name="l00053"></a>00053 <span class="comment">                                          wavelength map */</span>
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span>
-<a name="l00055"></a>00055         <span class="keywordtype">int</span>  *  frametype ; <span class="comment">/* list of frame types on or off */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">int</span>     nframes ;   <span class="comment">/* number of frames in frame list */</span>
-<a name="l00057"></a>00057         <span class="keywordtype">int</span>     nobj ;      <span class="comment">/* number of object frames in frame list */</span>
-<a name="l00058"></a>00058         <span class="keywordtype">int</span>     noff ;      <span class="comment">/* number of off frames in frame list */</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/*------ CleanMean ------*/</span>
-<a name="l00061"></a>00061         <span class="comment">/* percentage of rejected low intensity pixels */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">float</span> loReject ;
-<a name="l00063"></a>00063         <span class="comment">/* percentage of rejected high intensity pixels */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> hiReject ;
-<a name="l00065"></a>00065         <span class="comment">/* file name of the bad pixel mask fits file */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="comment">/*------ Slope ------*/</span>
-<a name="l00069"></a>00069         <span class="comment">/* width of a box along the slitlets within which the spectrum </span>
-<a name="l00070"></a>00070 <span class="comment">           is fitted by a Gaussian */</span>
-<a name="l00071"></a>00071         <span class="keywordtype">int</span> box_length ;
-<a name="l00072"></a>00072         <span class="comment">/* initial guess of the FWHM */</span>
-<a name="l00073"></a>00073         <span class="keywordtype">float</span> fwhm ;
-<a name="l00074"></a>00074         <span class="comment">/* amplitude below which the fit is not carried through */</span>
-<a name="l00075"></a>00075         <span class="keywordtype">float</span> minDiff ;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 } tilt_config ;
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00080"></a>00080 <span class="comment">                               Function prototypes</span>
-<a name="l00081"></a>00081 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00089"></a>00089 tilt_config * 
-<a name="l00090"></a>00090 sinfo_tilt_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 
-<a name="l00100"></a>00100 <span class="keywordtype">void</span> 
-<a name="l00101"></a>00101 sinfo_tilt_cfg_destroy(tilt_config * sc);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tilt_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name     :    sinfo_tilt_cfg.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on    :    October 2001</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description    :    tilt_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_TILT_CFG_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TILT_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">  determination of spectral tilt blackboard container</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  This structure holds all information related to the determination </span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  of the spectral tilt routine. It is used as a container for the flux </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  of ancillary data, computed values, and algorithm status. Pixel flux </span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  is separated from the blackboard.</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>tilt_config {</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>         <span class="keywordtype">char</span> inFile[FILE_NAME_SZ] ;    <span class="comment">/* file name of the file containing </span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                                          the list of all input frames */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ;   <span class="comment">/* output name of resulting fits </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                          wavelength map */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> ** framelist ; <span class="comment">/* list of frames */</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>         <span class="keywordtype">int</span>  *  frametype ; <span class="comment">/* list of frame types on or off */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">int</span>     nframes ;   <span class="comment">/* number of frames in frame list */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">int</span>     nobj ;      <span class="comment">/* number of object frames in frame list */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">int</span>     noff ;      <span class="comment">/* number of off frames in frame list */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*------ CleanMean ------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* percentage of rejected low intensity pixels */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">float</span> loReject ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* percentage of rejected high intensity pixels */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> hiReject ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* file name of the bad pixel mask fits file */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">char</span> mask[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*------ Slope ------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="comment">/* width of a box along the slitlets within which the spectrum </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">           is fitted by a Gaussian */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="keywordtype">int</span> box_length ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="comment">/* initial guess of the FWHM */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="keywordtype">float</span> fwhm ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="comment">/* amplitude below which the fit is not carried through */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="keywordtype">float</span> minDiff ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> } tilt_config ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> tilt_config * </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> sinfo_tilt_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> sinfo_tilt_cfg_destroy(tilt_config * sc);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tilt__ini_8h_source.html b/html/sinfo__tilt__ini_8h_source.html
index 4ce8255..5d35b29 100644
--- a/html/sinfo__tilt__ini_8h_source.html
+++ b/html/sinfo__tilt__ini_8h_source.html
@@ -2,67 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tilt_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tilt_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_tilt_ini.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :    Oct 25, 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :    prepare handling of .ini file for the determination</span>
-<a name="l00025"></a>00025 <span class="comment">                        of the spectral tilt</span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_TILT_INI_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TILT_INI_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00030"></a>00030 <span class="comment">                                Includes</span>
-<a name="l00031"></a>00031 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_tilt_cfg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                Defines</span>
-<a name="l00036"></a>00036 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span>
-<a name="l00039"></a>00039 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                             Function prototypes </span>
-<a name="l00041"></a>00041 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="keywordtype">int</span> 
-<a name="l00058"></a>00058 generateTilt_ini_file(
-<a name="l00059"></a>00059         <span class="keywordtype">char</span> * ini_name,
-<a name="l00060"></a>00060         <span class="keywordtype">char</span> * name_i,
-<a name="l00061"></a>00061         <span class="keywordtype">char</span> * name_o
-<a name="l00062"></a>00062 );
-<a name="l00063"></a>00063 
-<a name="l00075"></a>00075 tilt_config * 
-<a name="l00076"></a>00076 parse_tilt_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tilt_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_tilt_ini.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :    Oct 25, 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :    prepare handling of .ini file for the determination</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">                        of the spectral tilt</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_TILT_INI_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TILT_INI_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_tilt_cfg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#define FRAME_ON   1     </span><span class="comment">/* object frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define FRAME_OFF  0     </span><span class="comment">/* off frames */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> generateTilt_ini_file(</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="keywordtype">char</span> * name_o</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> );</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> tilt_config * </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> parse_tilt_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__time_8c_source.html b/html/sinfo__time_8c_source.html
index e42f9dd..6d5ddac 100644
--- a/html/sinfo__time_8c_source.html
+++ b/html/sinfo__time_8c_source.html
@@ -2,200 +2,231 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_time.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_time.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_time.c,v 1.5 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the ESO QFITS Library</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00031"></a>00031 <span class="comment">                                   Includes</span>
-<a name="l00032"></a>00032 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00033"></a>00033 
-<a name="l00034"></a>00034 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <time.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <pwd.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <unistd.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sys/time.h></span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_time.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                                   Macros</span>
-<a name="l00047"></a>00047 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/* Get century from a date in long format */</span>
-<a name="l00050"></a>00050 <span class="preprocessor">#define GET_CENTURY(d)      (int) ( (d) / 1000000L)</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="comment">/* Get century year from a date in long format */</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#define GET_CCYEAR(d)       (int) ( (d) / 10000L)</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="comment">/* Get year from a date in long format */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#define GET_YEAR(d)         (int) (((d) % 1000000L) / 10000L)</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="comment">/* Get month from a date in long format */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#define GET_MONTH(d)        (int) (((d) % 10000L) / 100)</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="comment">/* Get day from a date in long format */</span>
-<a name="l00058"></a>00058 <span class="preprocessor">#define GET_DAY(d)          (int) ( (d) % 100)</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 <span class="comment">/* Get hours from a date in long format */</span>
-<a name="l00061"></a>00061 <span class="preprocessor">#define GET_HOUR(t)         (int) ( (t) / 1000000L)</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="comment">/* Get minutes from a date in long format */</span>
-<a name="l00063"></a>00063 <span class="preprocessor">#define GET_MINUTE(t)       (int) (((t) % 1000000L) / 10000L)</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="comment">/* Get seconds from a date in long format */</span>
-<a name="l00065"></a>00065 <span class="preprocessor">#define GET_SECOND(t)       (int) (((t) % 10000L) / 100)</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="comment">/* Get centi-seconds from a date in long format */</span>
-<a name="l00067"></a>00067 <span class="preprocessor">#define GET_CENTI(t)        (int) ( (t) % 100)</span>
-<a name="l00068"></a>00068 <span class="preprocessor"></span>
-<a name="l00069"></a>00069 <span class="comment">/* Make date in long format from its components */</span>
-<a name="l00070"></a>00070 <span class="preprocessor">#define MAKE_DATE(c,y,m,d)  (long) (c) * 1000000L +                          \</span>
-<a name="l00071"></a>00071 <span class="preprocessor">                            (long) (y) * 10000L +                            \</span>
-<a name="l00072"></a>00072 <span class="preprocessor">                            (long) (m) * 100 + (d)</span>
-<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="comment">/* Make time in long format from its components */</span>
-<a name="l00074"></a>00074 <span class="preprocessor">#define MAKE_TIME(h,m,s,c)  (long) (h) * 1000000L +                          \</span>
-<a name="l00075"></a>00075 <span class="preprocessor">                            (long) (m) * 10000L +                            \</span>
-<a name="l00076"></a>00076 <span class="preprocessor">                            (long) (s) * 100 + (c)</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span>
-<a name="l00078"></a>00078 <span class="comment">/*  Interval values, specified in centiseconds */</span>
-<a name="l00079"></a>00079 <span class="preprocessor">#define INTERVAL_CENTI      1</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_SEC        100</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_MIN        6000</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_HOUR       360000L</span>
-<a name="l00083"></a>00083 <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_DAY        8640000L</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>
-<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00086"></a>00086 <span class="comment">                            Private to this module</span>
-<a name="l00087"></a>00087 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_date(time_t time_secs) ;
-<a name="l00090"></a>00090 <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_time(time_t time_secs) ;
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_time_now(<span class="keywordtype">void</span>) ;
-<a name="l00092"></a>00092 <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_date_now (<span class="keywordtype">void</span>) ;
-<a name="l00093"></a>00093 
-<a name="l00095"></a>00095 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00105"></a>00105 <span class="comment">                              Function codes</span>
-<a name="l00106"></a>00106 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00117"></a>00117 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00118"></a>00118 <span class="keywordtype">char</span> * sinfo_get_datetime_iso8601(<span class="keywordtype">void</span>)
-<a name="l00119"></a>00119 {
-<a name="l00120"></a>00120     <span class="keyword">static</span> <span class="keywordtype">char</span> date_iso8601[MAX_NAME_SIZE] ;
-<a name="l00121"></a>00121     <span class="keywordtype">long</span>        curdate ;
-<a name="l00122"></a>00122     <span class="keywordtype">long</span>        curtime ;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     curdate  = sinfo_date_now() ;
-<a name="l00125"></a>00125     curtime  = sinfo_time_now() ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     snprintf(date_iso8601, MAX_NAME_SIZE-1,
-<a name="l00128"></a>00128             <span class="stringliteral">"%04d-%02d-%02dT%02d:%02d:%02d"</span>,
-<a name="l00129"></a>00129             GET_CCYEAR(curdate),
-<a name="l00130"></a>00130             GET_MONTH(curdate),
-<a name="l00131"></a>00131             GET_DAY(curdate),
-<a name="l00132"></a>00132             GET_HOUR(curtime),
-<a name="l00133"></a>00133             GET_MINUTE(curtime),
-<a name="l00134"></a>00134             GET_SECOND(curtime));
-<a name="l00135"></a>00135     <span class="keywordflow">return</span> date_iso8601 ;
-<a name="l00136"></a>00136 }
-<a name="l00137"></a>00137 
-<a name="l00140"></a>00140 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00153"></a>00153 <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_date_now (<span class="keywordtype">void</span>)
-<a name="l00154"></a>00154 {
-<a name="l00155"></a>00155     <span class="keywordflow">return</span> (timer_to_date (time (NULL)));
-<a name="l00156"></a>00156 }
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00168"></a>00168 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_time_now(<span class="keywordtype">void</span>)
-<a name="l00170"></a>00170 {
-<a name="l00171"></a>00171     <span class="keyword">struct </span>timeval time_struct;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     gettimeofday (&time_struct, 0);
-<a name="l00174"></a>00174     <span class="keywordflow">return</span> (timer_to_time (time_struct.tv_sec)
-<a name="l00175"></a>00175                          + time_struct.tv_usec / 10000);
-<a name="l00176"></a>00176 }
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00190"></a>00190 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00191"></a>00191 <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_date(time_t time_secs)
-<a name="l00192"></a>00192 {
-<a name="l00193"></a>00193     <span class="keyword">struct </span>tm *time_struct;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> (time_secs == 0) {
-<a name="l00196"></a>00196         <span class="keywordflow">return</span> 0;
-<a name="l00197"></a>00197     } <span class="keywordflow">else</span> {
-<a name="l00198"></a>00198         <span class="comment">/*  Convert into a long value CCYYMMDD */</span>
-<a name="l00199"></a>00199         time_struct = localtime (&time_secs);
-<a name="l00200"></a>00200         <span class="keywordflow">if</span> (time_struct) {
-<a name="l00201"></a>00201             time_struct-> tm_year += 1900;
-<a name="l00202"></a>00202             <span class="keywordflow">return</span> (MAKE_DATE (    time_struct-> tm_year / 100,
-<a name="l00203"></a>00203                                 time_struct-> tm_year % 100,
-<a name="l00204"></a>00204                                 time_struct-> tm_mon + 1,
-<a name="l00205"></a>00205                                 time_struct-> tm_mday));
-<a name="l00206"></a>00206         } <span class="keywordflow">else</span> {
-<a name="l00207"></a>00207             <span class="keywordflow">return</span> (19700101);
-<a name="l00208"></a>00208         }
-<a name="l00209"></a>00209     }
-<a name="l00210"></a>00210 }
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00224"></a>00224 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00225"></a>00225 <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_time(time_t time_secs)
-<a name="l00226"></a>00226 {
-<a name="l00227"></a>00227     <span class="keyword">struct </span>tm *time_struct;
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229     <span class="keywordflow">if</span> (time_secs == 0) {
-<a name="l00230"></a>00230         <span class="keywordflow">return</span> 0;
-<a name="l00231"></a>00231     } <span class="keywordflow">else</span> {
-<a name="l00232"></a>00232         <span class="comment">/*  Convert into a long value HHMMSS00 */</span>
-<a name="l00233"></a>00233         time_struct = localtime (&time_secs);
-<a name="l00234"></a>00234         <span class="keywordflow">if</span> (time_struct) {
-<a name="l00235"></a>00235             <span class="keywordflow">return</span> (MAKE_TIME (time_struct-> tm_hour,
-<a name="l00236"></a>00236                                time_struct-> tm_min,
-<a name="l00237"></a>00237                                time_struct-> tm_sec,
-<a name="l00238"></a>00238                                0));
-<a name="l00239"></a>00239         } <span class="keywordflow">else</span> {
-<a name="l00240"></a>00240             <span class="keywordflow">return</span> 0;
-<a name="l00241"></a>00241         }
-<a name="l00242"></a>00242     }
-<a name="l00243"></a>00243 }
-<a name="l00244"></a>00244 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_time.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_time.c,v 1.5 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the ESO QFITS Library</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <time.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <pwd.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <unistd.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sys/time.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_time.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                   Macros</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/* Get century from a date in long format */</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#define GET_CENTURY(d)      (int) ( (d) / 1000000L)</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="comment">/* Get century year from a date in long format */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#define GET_CCYEAR(d)       (int) ( (d) / 10000L)</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="comment">/* Get year from a date in long format */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#define GET_YEAR(d)         (int) (((d) % 1000000L) / 10000L)</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="comment">/* Get month from a date in long format */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#define GET_MONTH(d)        (int) (((d) % 10000L) / 100)</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="comment">/* Get day from a date in long format */</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#define GET_DAY(d)          (int) ( (d) % 100)</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/* Get hours from a date in long format */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#define GET_HOUR(t)         (int) ( (t) / 1000000L)</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="comment">/* Get minutes from a date in long format */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#define GET_MINUTE(t)       (int) (((t) % 1000000L) / 10000L)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="comment">/* Get seconds from a date in long format */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define GET_SECOND(t)       (int) (((t) % 10000L) / 100)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="comment">/* Get centi-seconds from a date in long format */</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#define GET_CENTI(t)        (int) ( (t) % 100)</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/* Make date in long format from its components */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#define MAKE_DATE(c,y,m,d)  (long) (c) * 1000000L +                          \</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">                            (long) (y) * 10000L +                            \</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">                            (long) (m) * 100 + (d)</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor"></span><span class="comment">/* Make time in long format from its components */</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#define MAKE_TIME(h,m,s,c)  (long) (h) * 1000000L +                          \</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">                            (long) (m) * 10000L +                            \</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">                            (long) (s) * 100 + (c)</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*  Interval values, specified in centiseconds */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#define INTERVAL_CENTI      1</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_SEC        100</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_MIN        6000</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_HOUR       360000L</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor"></span><span class="preprocessor">#define INTERVAL_DAY        8640000L</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                            Private to this module</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_date(time_t time_secs) ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_time(time_t time_secs) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_time_now(<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_date_now (<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keywordtype">char</span> * sinfo_get_datetime_iso8601(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keyword">static</span> <span class="keywordtype">char</span> date_iso8601[MAX_NAME_SIZE] ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">long</span>        curdate ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">long</span>        curtime ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     curdate  = sinfo_date_now() ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     curtime  = sinfo_time_now() ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     snprintf(date_iso8601, MAX_NAME_SIZE-1,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>             <span class="stringliteral">"%04d-%02d-%02dT%02d:%02d:%02d"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>             GET_CCYEAR(curdate),</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>             GET_MONTH(curdate),</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>             GET_DAY(curdate),</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>             GET_HOUR(curtime),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>             GET_MINUTE(curtime),</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>             GET_SECOND(curtime));</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">return</span> date_iso8601 ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_date_now (<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> {</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">return</span> (timer_to_date (time (NULL)));</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> }</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="keyword">static</span> <span class="keywordtype">long</span> sinfo_time_now(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="keyword">struct </span>timeval time_struct;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     gettimeofday (&time_struct, 0);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     <span class="keywordflow">return</span> (timer_to_time (time_struct.tv_sec)</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                          + time_struct.tv_usec / 10000);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_date(time_t time_secs)</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keyword">struct </span>tm *time_struct;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span> (time_secs == 0) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="comment">/*  Convert into a long value CCYYMMDD */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         time_struct = localtime (&time_secs);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordflow">if</span> (time_struct) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>             time_struct-> tm_year += 1900;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>             <span class="keywordflow">return</span> (MAKE_DATE (    time_struct-> tm_year / 100,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                 time_struct-> tm_year % 100,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                 time_struct-> tm_mon + 1,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                                 time_struct-> tm_mday));</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             <span class="keywordflow">return</span> (19700101);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="keyword">static</span> <span class="keywordtype">long</span> timer_to_time(time_t time_secs)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keyword">struct </span>tm *time_struct;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordflow">if</span> (time_secs == 0) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="comment">/*  Convert into a long value HHMMSS00 */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         time_struct = localtime (&time_secs);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         <span class="keywordflow">if</span> (time_struct) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>             <span class="keywordflow">return</span> (MAKE_TIME (time_struct-> tm_hour,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>                                time_struct-> tm_min,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                                time_struct-> tm_sec,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                                0));</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>             <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     }</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__time_8h_source.html b/html/sinfo__time_8h_source.html
index 919f649..f20e9b6 100644
--- a/html/sinfo__time_8h_source.html
+++ b/html/sinfo__time_8h_source.html
@@ -2,52 +2,83 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_time.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_time.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_time.h,v 1.1 2006/11/11 14:13:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the ESO QFITS Library</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/11/11 14:13:03 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_TIME_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                        Function ANSI C prototypes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="keywordtype">char</span> * sinfo_get_datetime_iso8601(<span class="keywordtype">void</span>) ;
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_time.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_time.h,v 1.1 2006/11/11 14:13:03 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the ESO QFITS Library</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2001-2004 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/11/11 14:13:03 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_TIME_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                        Function ANSI C prototypes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="keywordtype">char</span> * sinfo_get_datetime_iso8601(<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tpl__dfs_8c_source.html b/html/sinfo__tpl__dfs_8c_source.html
index d183c67..1a08e04 100644
--- a/html/sinfo__tpl__dfs_8c_source.html
+++ b/html/sinfo__tpl__dfs_8c_source.html
@@ -2,241 +2,272 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tpl_dfs.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tpl_dfs.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_tpl_dfs.c,v 1.13 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <math.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_ref_types.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00051"></a>00051 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00073"></a>00073 sinfo_dfs_files_dont_exist(cpl_frameset *frameset)
-<a name="l00074"></a>00074 {
-<a name="l00075"></a>00075     <span class="keyword">const</span> <span class="keywordtype">char</span> *func = <span class="stringliteral">"dfs_files_dont_exist"</span>;
-<a name="l00076"></a>00076     cpl_frame  *frame;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     <span class="keywordflow">if</span> (frameset == NULL) {
-<a name="l00080"></a>00080         cpl_error_set(func, CPL_ERROR_NULL_INPUT);
-<a name="l00081"></a>00081         <span class="keywordflow">return</span> 1;
-<a name="l00082"></a>00082     }
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084     <span class="keywordflow">if</span> (cpl_frameset_is_empty(frameset)) {
-<a name="l00085"></a>00085         <span class="keywordflow">return</span> 0;
-<a name="l00086"></a>00086     }
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088     frame = cpl_frameset_get_first(frameset);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090     <span class="keywordflow">while</span> (frame) {
-<a name="l00091"></a>00091         <span class="keywordflow">if</span> (access(cpl_frame_get_filename(frame), F_OK)) {
-<a name="l00092"></a>00092             cpl_msg_error(func, <span class="stringliteral">"File %s (%s) was not found"</span>,
-<a name="l00093"></a>00093                           cpl_frame_get_filename(frame),
-<a name="l00094"></a>00094                           cpl_frame_get_tag(frame));
-<a name="l00095"></a>00095             cpl_error_set(func, CPL_ERROR_FILE_NOT_FOUND);
-<a name="l00096"></a>00096         }
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098         frame = cpl_frameset_get_next(frameset);
-<a name="l00099"></a>00099     }
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     <span class="keywordflow">if</span> (cpl_error_get_code())
-<a name="l00102"></a>00102         <span class="keywordflow">return</span> 1;
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104     <span class="keywordflow">return</span> 0;
-<a name="l00105"></a>00105 }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 <span class="keywordtype">int</span> sinfo_dfs_set_groups(cpl_frameset * <span class="keyword">set</span>)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116     cpl_frame   *   cur_frame=NULL ;
-<a name="l00117"></a>00117     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   tag=NULL ;
-<a name="l00118"></a>00118     <span class="keywordtype">int</span>             nframes=0 ;
-<a name="l00119"></a>00119     <span class="keywordtype">int</span>             i=0 ;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     sinfo_skip_if (cpl_error_get_code());
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="comment">/* Check entries */</span>
-<a name="l00124"></a>00124     <span class="keywordflow">if</span> (<span class="keyword">set</span> == NULL) <span class="keywordflow">return</span> -1 ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126     <span class="comment">/* Initialize */</span>
-<a name="l00127"></a>00127     nframes = cpl_frameset_get_size(<span class="keyword">set</span>) ;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="comment">/* Loop on frames */</span>
-<a name="l00130"></a>00130     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {
-<a name="l00131"></a>00131         cur_frame = cpl_frameset_get_frame(<span class="keyword">set</span>, i) ;
-<a name="l00132"></a>00132         tag = cpl_frame_get_tag(cur_frame) ;
-<a name="l00133"></a>00133         <span class="keywordflow">if</span> (cpl_error_get_code()) <span class="keywordflow">break</span>;
-<a name="l00134"></a>00134         <span class="keywordflow">if</span> (tag == NULL) <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Frame %d has no tag"</span>, i);
-<a name="l00135"></a>00135         <span class="comment">/* RAW frames */</span>
-<a name="l00136"></a>00136         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP) ||
-<a name="l00137"></a>00137              !strcmp(tag, RAW_ON) ||
-<a name="l00138"></a>00138              !strcmp(tag, RAW_OFF) ||
-<a name="l00139"></a>00139              !strcmp(tag, RAW_DARK) ||
-<a name="l00140"></a>00140                  !strcmp(tag, RAW_FIBRE_NS) ||
-<a name="l00141"></a>00141                  !strcmp(tag, RAW_FIBRE_PSF) ||
-<a name="l00142"></a>00142                  !strcmp(tag, RAW_FIBRE_DARK) ||
-<a name="l00143"></a>00143                  !strcmp(tag, RAW_FLAT_NS) ||
-<a name="l00144"></a>00144                  !strcmp(tag, RAW_WAVE_NS) ||
-<a name="l00145"></a>00145                  !strcmp(tag, RAW_FLAT_LAMP) ||
-<a name="l00146"></a>00146                  !strcmp(tag, RAW_WAVE_LAMP) ||
-<a name="l00147"></a>00147                  !strcmp(tag, RAW_PSF_CALIBRATOR) ||
-<a name="l00148"></a>00148              !strcmp(tag, RAW_SKY_PSF_CALIBRATOR) ||
-<a name="l00149"></a>00149              !strcmp(tag, RAW_STD) ||
-<a name="l00150"></a>00150              !strcmp(tag, RAW_SKY) ||
-<a name="l00151"></a>00151                  !strcmp(tag, RAW_SKY_STD) ||
-<a name="l00152"></a>00152              !strcmp(tag, RAW_OBJECT_NODDING) ||
-<a name="l00153"></a>00153              !strcmp(tag, RAW_SKY_NODDING) ||
-<a name="l00154"></a>00154                  !strcmp(tag, RAW_OBJECT_JITTER) ||
-<a name="l00155"></a>00155                  !strcmp(tag, RAW_SKY_JITTER) ||
-<a name="l00156"></a>00156                  !strcmp(tag, RAW_PUPIL_LAMP) ||
-<a name="l00157"></a>00157                  !strcmp(tag, RAW_IMAGE_PRE_OBJECT) ||
-<a name="l00158"></a>00158                  !strcmp(tag, RAW_IMAGE_PRE_SKY) ||
-<a name="l00159"></a>00159                  !strcmp(tag, RAW_OBJECT_SKYSPIDER))
-<a name="l00160"></a>00160             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_RAW) ;
-<a name="l00161"></a>00161         <span class="comment">/* CALIB frames */</span>
-<a name="l00162"></a>00162         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_HP)  ||
-<a name="l00163"></a>00163          !strcmp(tag,SINFO_UTL_STDSTARS_RAW) ||
-<a name="l00164"></a>00164          !strcmp(tag,SINFO_CALIB_STDSTARS) ||
-<a name="l00165"></a>00165          !strcmp(tag,SINFO_CALIB_SED) ||
-<a name="l00166"></a>00166          !strcmp(tag,PRO_BP_MAP_NL) ||
-<a name="l00167"></a>00167          !strcmp(tag,PRO_BP_MAP_NO) ||
-<a name="l00168"></a>00168          !strcmp(tag,PRO_BP_MAP_DI) ||
-<a name="l00169"></a>00169          !strcmp(tag,PRO_BP_MAP_NL) ||
-<a name="l00170"></a>00170          !strcmp(tag,PRO_BP_MAP_NO) ||
-<a name="l00171"></a>00171          !strcmp(tag,PRO_BP_MAP) ||
-<a name="l00172"></a>00172          !strcmp(tag,PRO_ILL_COR) ||
-<a name="l00173"></a>00173          !strcmp(tag,PRO_MASTER_BP_MAP) ||
-<a name="l00174"></a>00174          !strcmp(tag,PRO_MASTER_DARK) ||
-<a name="l00175"></a>00175                  !strcmp(tag,PRO_DISTORTION) ||
-<a name="l00176"></a>00176          !strcmp(tag,PRO_SLITLETS_DISTANCE) ||
-<a name="l00177"></a>00177          !strcmp(tag,PRO_MASTER_FLAT_LAMP) ||
-<a name="l00178"></a>00178          !strcmp(tag,PRO_SLIT_POS) ||
-<a name="l00179"></a>00179          !strcmp(tag,PRO_SLIT_POS_GUESS) ||
-<a name="l00180"></a>00180          !strcmp(tag,PRO_FIRST_COL) ||
-<a name="l00181"></a>00181          !strcmp(tag,PRO_WAVE_MAP ) ||
-<a name="l00182"></a>00182          !strcmp(tag,REF_LINE_ARC ) ||
-<a name="l00183"></a>00183          !strcmp(tag,DRS_SETUP_WAVE ) ||
-<a name="l00184"></a>00184          !strcmp(tag,EXTCOEFF_TABLE ) ||
-<a name="l00185"></a>00185          !strcmp(tag,FLUX_STD_TABLE ) ||
-<a name="l00186"></a>00186          !strcmp(tag,FLUX_STD_CATALOG ) ||
-<a name="l00187"></a>00187          !strcmp(tag,PRO_IMA ) ||
-<a name="l00188"></a>00188          !strcmp(tag,PRO_CUBE ) ||
-<a name="l00189"></a>00189          !strcmp(tag,REF_BP_MAP ) ||
-<a name="l00190"></a>00190          !strcmp(tag,PRO_SKY_DUMMY ) ||
-<a name="l00191"></a>00191          !strcmp(tag,PRO_REF_ATM_REF_CORR) ||
-<a name="l00192"></a>00192          !strcmp(tag,PRO_SPECTRUM))
-<a name="l00193"></a>00193             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_CALIB) ;
-<a name="l00194"></a>00194         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBS_OBJ)  ||
-<a name="l00195"></a>00195          !strcmp(tag,PRO_MED_OBS_OBJ) ||
-<a name="l00196"></a>00196          !strcmp(tag,PRO_OBS_STD) ||
-<a name="l00197"></a>00197          !strcmp(tag,PRO_MED_OBS_STD) ||
-<a name="l00198"></a>00198          !strcmp(tag,PRO_OBS_PSF) ||
-<a name="l00199"></a>00199          !strcmp(tag,PRO_MED_OBS_PSF) ||
-<a name="l00200"></a>00200          !strcmp(tag,PRO_COADD_OBJ) ||
-<a name="l00201"></a>00201          !strcmp(tag,PRO_COADD_STD) ||
-<a name="l00202"></a>00202          !strcmp(tag,PRO_COADD_PSF) ||
-<a name="l00203"></a>00203          !strcmp(tag,PRO_COADD_PUPIL) ||
-<a name="l00204"></a>00204          !strcmp(tag,PRO_MED_COADD_OBJ) ||
-<a name="l00205"></a>00205          !strcmp(tag,PRO_MED_COADD_STD) ||
-<a name="l00206"></a>00206          !strcmp(tag,PRO_MED_COADD_PSF) ||
-<a name="l00207"></a>00207          !strcmp(tag,PRO_MED_COADD_PUPIL) ||
-<a name="l00208"></a>00208          !strcmp(tag,PRO_MASK_COADD_OBJ) ||
-<a name="l00209"></a>00209          !strcmp(tag,PRO_MASK_COADD_STD) ||
-<a name="l00210"></a>00210          !strcmp(tag,PRO_MASK_COADD_PSF) ||
-<a name="l00211"></a>00211          !strcmp(tag,PRO_MASK_COADD_PUPIL) ||
-<a name="l00212"></a>00212          !strcmp(tag,PRO_PSF_CALIBRATOR_STACKED) ||
-<a name="l00213"></a>00213          !strcmp(tag,PRO_SKY_PSF_CALIBRATOR_STACKED) ||
-<a name="l00214"></a>00214          !strcmp(tag,PRO_AO_PERFORMANCE) ||
-<a name="l00215"></a>00215          !strcmp(tag,PRO_ENC_ENERGY) ||
-<a name="l00216"></a>00216          !strcmp(tag,PRO_PSF) ||
-<a name="l00217"></a>00217          !strcmp(tag,PRO_STD_STAR_SPECTRA) ||
-<a name="l00218"></a>00218          !strcmp(tag,PRO_STD_STAR_SPECTRUM) ||
-<a name="l00219"></a>00219          !strcmp(tag,PRO_MFLAT_CUBE) ||
-<a name="l00220"></a>00220          !strcmp(tag,PRO_MFLAT_AVG) ||
-<a name="l00221"></a>00221          !strcmp(tag,PRO_MFLAT_MED) ||
-<a name="l00222"></a>00222          !strcmp(tag,PRO_STACK_MFLAT_DIST) ||
-<a name="l00223"></a>00223          !strcmp(tag,PRO_WAVE_LAMP_STACKED ) ||
-<a name="l00224"></a>00224          !strcmp(tag,PRO_FIBRE_NS_STACKED_OFF) ||
-<a name="l00225"></a>00225          !strcmp(tag,PRO_FIBRE_NS_STACKED_ON) ||
-<a name="l00226"></a>00226          !strcmp(tag,PRO_FIBRE_NS_STACKED) ||
-<a name="l00227"></a>00227          !strcmp(tag,PRO_SLITLETS_POS_PREDIST) ||
-<a name="l00228"></a>00228          !strcmp(tag,PRO_OBS_SKY) ||
-<a name="l00229"></a>00229          !strcmp(tag,PRO_SKY_MED) ||
-<a name="l00230"></a>00230          !strcmp(tag,PRO_FIBRE_NS_STACKED_DIST))
-<a name="l00231"></a>00231             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_PRODUCT) ;
-<a name="l00232"></a>00232         <span class="keywordflow">else</span> <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Frame %d has unknown tag: %s"</span>, i, tag);
-<a name="l00233"></a>00233     }
-<a name="l00234"></a>00234     ck0_nomsg(sinfo_dfs_files_dont_exist(<span class="keyword">set</span>));
-<a name="l00235"></a>00235     sinfo_skip_if (i != nframes);
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     sinfo_end_skip;
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="keywordflow">if</span> (cpl_error_get_code())
-<a name="l00240"></a>00240         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Could not identify RAW and CALIB frames (in "</span>
-<a name="l00241"></a>00241                       <span class="stringliteral">"frame set of size %d)"</span>, nframes);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00245"></a>00245 }
-<a name="l00246"></a>00246 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tpl_dfs.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_tpl_dfs.c,v 1.13 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_ref_types.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> sinfo_dfs_files_dont_exist(cpl_frameset *frameset)</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *func = <span class="stringliteral">"dfs_files_dont_exist"</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     cpl_frame  *frame;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">if</span> (frameset == NULL) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         cpl_error_set(func, CPL_ERROR_NULL_INPUT);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     }</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordflow">if</span> (cpl_frameset_is_empty(frameset)) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     }</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     frame = cpl_frameset_get_first(frameset);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordflow">while</span> (frame) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="keywordflow">if</span> (access(cpl_frame_get_filename(frame), F_OK)) {</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>             cpl_msg_error(func, <span class="stringliteral">"File %s (%s) was not found"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                           cpl_frame_get_filename(frame),</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                           cpl_frame_get_tag(frame));</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>             cpl_error_set(func, CPL_ERROR_FILE_NOT_FOUND);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         frame = cpl_frameset_get_next(frameset);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">if</span> (cpl_error_get_code())</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keywordtype">int</span> sinfo_dfs_set_groups(cpl_frameset * <span class="keyword">set</span>)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cpl_frame   *   cur_frame=NULL ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   tag=NULL ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordtype">int</span>             nframes=0 ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">int</span>             i=0 ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     sinfo_skip_if (cpl_error_get_code());</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span> (<span class="keyword">set</span> == NULL) <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="comment">/* Initialize */</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     nframes = cpl_frameset_get_size(<span class="keyword">set</span>) ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="comment">/* Loop on frames */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         cur_frame = cpl_frameset_get_frame(<span class="keyword">set</span>, i) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         tag = cpl_frame_get_tag(cur_frame) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordflow">if</span> (cpl_error_get_code()) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         <span class="keywordflow">if</span> (tag == NULL) <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Frame %d has no tag"</span>, i);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="comment">/* RAW frames */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, RAW_LINEARITY_LAMP) ||</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>              !strcmp(tag, RAW_ON) ||</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>              !strcmp(tag, RAW_OFF) ||</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>              !strcmp(tag, RAW_DARK) ||</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                  !strcmp(tag, RAW_FIBRE_NS) ||</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                  !strcmp(tag, RAW_FIBRE_PSF) ||</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                  !strcmp(tag, RAW_FIBRE_DARK) ||</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                  !strcmp(tag, RAW_FLAT_NS) ||</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                  !strcmp(tag, RAW_WAVE_NS) ||</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                  !strcmp(tag, RAW_FLAT_LAMP) ||</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                  !strcmp(tag, RAW_WAVE_LAMP) ||</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                  !strcmp(tag, RAW_PSF_CALIBRATOR) ||</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>              !strcmp(tag, RAW_SKY_PSF_CALIBRATOR) ||</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>              !strcmp(tag, RAW_STD) ||</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>              !strcmp(tag, RAW_SKY) ||</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                  !strcmp(tag, RAW_SKY_STD) ||</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>              !strcmp(tag, RAW_OBJECT_NODDING) ||</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>              !strcmp(tag, RAW_SKY_NODDING) ||</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                  !strcmp(tag, RAW_OBJECT_JITTER) ||</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                  !strcmp(tag, RAW_SKY_JITTER) ||</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                  !strcmp(tag, RAW_PUPIL_LAMP) ||</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                  !strcmp(tag, RAW_IMAGE_PRE_OBJECT) ||</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                  !strcmp(tag, RAW_IMAGE_PRE_SKY) ||</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                  !strcmp(tag, RAW_OBJECT_SKYSPIDER))</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_RAW) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         <span class="comment">/* CALIB frames */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, PRO_BP_MAP_HP)  ||</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>          !strcmp(tag,SINFO_UTL_STDSTARS_RAW) ||</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>          !strcmp(tag,SINFO_CALIB_STDSTARS) ||</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>          !strcmp(tag,SINFO_CALIB_SED) ||</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>          !strcmp(tag,PRO_BP_MAP_NL) ||</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>          !strcmp(tag,PRO_BP_MAP_NO) ||</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>          !strcmp(tag,PRO_BP_MAP_DI) ||</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>          !strcmp(tag,PRO_BP_MAP_NL) ||</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>          !strcmp(tag,PRO_BP_MAP_NO) ||</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>          !strcmp(tag,PRO_BP_MAP) ||</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>          !strcmp(tag,PRO_ILL_COR) ||</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>          !strcmp(tag,PRO_MASTER_BP_MAP) ||</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>          !strcmp(tag,PRO_MASTER_DARK) ||</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                  !strcmp(tag,PRO_DISTORTION) ||</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>          !strcmp(tag,PRO_SLITLETS_DISTANCE) ||</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>          !strcmp(tag,PRO_MASTER_FLAT_LAMP) ||</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>          !strcmp(tag,PRO_SLIT_POS) ||</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>          !strcmp(tag,PRO_SLIT_POS_GUESS) ||</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>          !strcmp(tag,PRO_FIRST_COL) ||</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>          !strcmp(tag,PRO_WAVE_MAP ) ||</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>          !strcmp(tag,REF_LINE_ARC ) ||</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>          !strcmp(tag,DRS_SETUP_WAVE ) ||</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>          !strcmp(tag,EXTCOEFF_TABLE ) ||</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>          !strcmp(tag,FLUX_STD_TABLE ) ||</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>          !strcmp(tag,FLUX_STD_CATALOG ) ||</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>          !strcmp(tag,PRO_IMA ) ||</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>          !strcmp(tag,PRO_CUBE ) ||</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>          !strcmp(tag,REF_BP_MAP ) ||</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>          !strcmp(tag,PRO_SKY_DUMMY ) ||</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>          !strcmp(tag,PRO_REF_ATM_REF_CORR) ||</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>          !strcmp(tag,PRO_SPECTRUM))</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_CALIB) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(tag, PRO_OBS_OBJ)  ||</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>          !strcmp(tag,PRO_MED_OBS_OBJ) ||</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>          !strcmp(tag,PRO_OBS_STD) ||</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>          !strcmp(tag,PRO_MED_OBS_STD) ||</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>          !strcmp(tag,PRO_OBS_PSF) ||</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>          !strcmp(tag,PRO_MED_OBS_PSF) ||</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>          !strcmp(tag,PRO_COADD_OBJ) ||</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>          !strcmp(tag,PRO_COADD_STD) ||</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>          !strcmp(tag,PRO_COADD_PSF) ||</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>          !strcmp(tag,PRO_COADD_PUPIL) ||</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>          !strcmp(tag,PRO_MED_COADD_OBJ) ||</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>          !strcmp(tag,PRO_MED_COADD_STD) ||</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>          !strcmp(tag,PRO_MED_COADD_PSF) ||</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>          !strcmp(tag,PRO_MED_COADD_PUPIL) ||</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>          !strcmp(tag,PRO_MASK_COADD_OBJ) ||</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>          !strcmp(tag,PRO_MASK_COADD_STD) ||</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>          !strcmp(tag,PRO_MASK_COADD_PSF) ||</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>          !strcmp(tag,PRO_MASK_COADD_PUPIL) ||</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>          !strcmp(tag,PRO_PSF_CALIBRATOR_STACKED) ||</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>          !strcmp(tag,PRO_SKY_PSF_CALIBRATOR_STACKED) ||</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>          !strcmp(tag,PRO_AO_PERFORMANCE) ||</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>          !strcmp(tag,PRO_ENC_ENERGY) ||</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>          !strcmp(tag,PRO_PSF) ||</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>          !strcmp(tag,PRO_STD_STAR_SPECTRA) ||</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>          !strcmp(tag,PRO_STD_STAR_SPECTRUM) ||</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>          !strcmp(tag,PRO_MFLAT_CUBE) ||</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>          !strcmp(tag,PRO_MFLAT_AVG) ||</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>          !strcmp(tag,PRO_MFLAT_MED) ||</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>          !strcmp(tag,PRO_STACK_MFLAT_DIST) ||</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>          !strcmp(tag,PRO_WAVE_LAMP_STACKED ) ||</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>          !strcmp(tag,PRO_FIBRE_NS_STACKED_OFF) ||</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>          !strcmp(tag,PRO_FIBRE_NS_STACKED_ON) ||</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>          !strcmp(tag,PRO_FIBRE_NS_STACKED) ||</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>          !strcmp(tag,PRO_SLITLETS_POS_PREDIST) ||</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>          !strcmp(tag,PRO_OBS_SKY) ||</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>          !strcmp(tag,PRO_SKY_MED) ||</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>          !strcmp(tag,PRO_FIBRE_NS_STACKED_DIST))</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>             cpl_frame_set_group(cur_frame, CPL_FRAME_GROUP_PRODUCT) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>         <span class="keywordflow">else</span> <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>( <span class="stringliteral">"Frame %d has unknown tag: %s"</span>, i, tag);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     ck0_nomsg(sinfo_dfs_files_dont_exist(<span class="keyword">set</span>));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     sinfo_skip_if (i != nframes);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     sinfo_end_skip;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span> (cpl_error_get_code())</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Could not identify RAW and CALIB frames (in "</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                       <span class="stringliteral">"frame set of size %d)"</span>, nframes);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> }</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tpl__dfs_8h_source.html b/html/sinfo__tpl__dfs_8h_source.html
index ef774f2..e56e45c 100644
--- a/html/sinfo__tpl__dfs_8h_source.html
+++ b/html/sinfo__tpl__dfs_8h_source.html
@@ -2,89 +2,120 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tpl_dfs.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tpl_dfs.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_tpl_dfs.h,v 1.3 2008/07/09 09:53:23 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/07/09 09:53:23 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_TPL_DFS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TPL_DFS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                   Define</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/* Define here the PRO.CATG keywords */</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#define SI_UTL_IMA_ARITH_PROIMA               "PRO_IMA"</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RAW                           "RAW"</span>
-<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CAL                           "CAL"</span>
-<a name="l00039"></a>00039 <span class="preprocessor"></span>
-<a name="l00040"></a>00040 <span class="comment">/* Define here the DO.CATG keywords */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#define SI_UTL_IMA_ARITH_IMA1                 "IMA1"</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_IMA_ARITH_IMA2                 "IMA2"</span>
-<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2IMA_CUBE                  "CUBE"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2SPECTRUM_CUBE             "CUBE"</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_CUBE                "CUBE"</span>
-<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_SPECTRUM            "SPECTRUM"</span>
-<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2IMA_PROIMA                "PRO_IMA"</span>
-<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2SPECTRUM_PROIMA           "PRO_IMA"</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_PROCUBE             "PRO_CUBE_COADD"</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_COMBINE_PROCUBE           "PRO_CUBE"</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_COMBINE_PROMASK           "PRO_BP_MAP_CUBE_COADD"</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_ARITH_PROSPECTRUM     "PRO_SPECTRUM"</span>
-<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_ARITH_SPECTRUM        "SPECTRUM"</span>
-<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_PROSPECTRUM     "PRO_SPECTRUM"</span>
-<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM        "SPECTRUM"</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_PROSPECTRUM     "PRO_SPECTRUM"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM        "SPECTRUM"</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_CUBE1                "CUBE1"</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_CUBE2                "CUBE2"</span>
-<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA1              "PRO_IMA1"</span>
-<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA2              "PRO_IMA2"</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA3              "PRO_IMA3"</span>
-<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA4              "PRO_IMA4"</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define SI_SKYMAP_CUBE                        "PRO_CUBE"</span>
-<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#define SI_SKYMAP_PROIMA                      "PRO_IMA"</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00069"></a>00069 <span class="comment">                                Functions prototypes</span>
-<a name="l00070"></a>00070 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keywordtype">int</span> sinfo_dfs_set_groups(cpl_frameset *) ;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tpl_dfs.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_tpl_dfs.h,v 1.3 2008/07/09 09:53:23 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/07/09 09:53:23 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_TPL_DFS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TPL_DFS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                   Define</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/* Define here the PRO.CATG keywords */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#define SI_UTL_IMA_ARITH_PROIMA               "PRO_IMA"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_RAW                           "RAW"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_CAL                           "CAL"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* Define here the DO.CATG keywords */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#define SI_UTL_IMA_ARITH_IMA1                 "IMA1"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_IMA_ARITH_IMA2                 "IMA2"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2IMA_CUBE                  "CUBE"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2SPECTRUM_CUBE             "CUBE"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_CUBE                "CUBE"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_SPECTRUM            "SPECTRUM"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2IMA_PROIMA                "PRO_IMA"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE2SPECTRUM_PROIMA           "PRO_IMA"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_ARITH_PROCUBE             "PRO_CUBE_COADD"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_COMBINE_PROCUBE           "PRO_CUBE"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_CUBE_COMBINE_PROMASK           "PRO_BP_MAP_CUBE_COADD"</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_ARITH_PROSPECTRUM     "PRO_SPECTRUM"</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_ARITH_SPECTRUM        "SPECTRUM"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_PROSPECTRUM     "PRO_SPECTRUM"</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM        "SPECTRUM"</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_PROSPECTRUM     "PRO_SPECTRUM"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM        "SPECTRUM"</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_CUBE1                "CUBE1"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_CUBE2                "CUBE2"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA1              "PRO_IMA1"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA2              "PRO_IMA2"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA3              "PRO_IMA3"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_UTL_GENLOOKUP_PROIMA4              "PRO_IMA4"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_SKYMAP_CUBE                        "PRO_CUBE"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor"></span><span class="preprocessor">#define SI_SKYMAP_PROIMA                      "PRO_IMA"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                                Functions prototypes</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">int</span> sinfo_dfs_set_groups(cpl_frameset *) ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tpl__utils_8c_source.html b/html/sinfo__tpl__utils_8c_source.html
index fe00921..a34ab22 100644
--- a/html/sinfo__tpl__utils_8c_source.html
+++ b/html/sinfo__tpl__utils_8c_source.html
@@ -2,159 +2,191 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tpl_utils.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tpl_utils.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_tpl_utils.c,v 1.3 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00039"></a>00039 
-<a name="l00041"></a>00041 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_get_license(<span class="keywordtype">void</span>)
-<a name="l00058"></a>00058 {
-<a name="l00059"></a>00059     <span class="keyword">const</span> <span class="keywordtype">char</span> *   sinfoni_license =
-<a name="l00060"></a>00060         <span class="stringliteral">"This file is part of the SINFONI Instrument Pipeline\n"</span>
-<a name="l00061"></a>00061         <span class="stringliteral">"Copyright (C) 2002,2003 European Southern Observatory\n"</span>
-<a name="l00062"></a>00062         <span class="stringliteral">"\n"</span>
-<a name="l00063"></a>00063         <span class="stringliteral">"This program is free software; you can redistribute it and/or modify\n"</span>
-<a name="l00064"></a>00064         <span class="stringliteral">"it under the terms of the GNU General Public License as published by\n"</span>
-<a name="l00065"></a>00065         <span class="stringliteral">"the Free Software Foundation; either version 2 of the License, or\n"</span>
-<a name="l00066"></a>00066         <span class="stringliteral">"(at your option) any later version.\n"</span>
-<a name="l00067"></a>00067         <span class="stringliteral">"\n"</span>
-<a name="l00068"></a>00068         <span class="stringliteral">"This program is distributed in the hope that it will be useful,\n"</span>
-<a name="l00069"></a>00069         <span class="stringliteral">"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"</span>
-<a name="l00070"></a>00070         <span class="stringliteral">"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"</span>
-<a name="l00071"></a>00071         <span class="stringliteral">"GNU General Public License for more details.\n"</span>
-<a name="l00072"></a>00072         <span class="stringliteral">"\n"</span>
-<a name="l00073"></a>00073         <span class="stringliteral">"You should have received a copy of the GNU General Public License\n"</span>
-<a name="l00074"></a>00074         <span class="stringliteral">"along with this program; if not, write to the Free Software\n"</span>
-<a name="l00075"></a>00075         <span class="stringliteral">"Foundation, Inc., 59 Temple Place, Suite 330, Boston, \n"</span>
-<a name="l00076"></a>00076         <span class="stringliteral">"MA  02111-1307  USA"</span> ;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <span class="keywordflow">return</span> sinfoni_license ;
-<a name="l00079"></a>00079 }
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 cpl_frameset * sinfo_extract_frameset(
-<a name="l00093"></a>00093         <span class="keyword">const</span> cpl_frameset  *   in,
-<a name="l00094"></a>00094         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   tag)
-<a name="l00095"></a>00095 {
-<a name="l00096"></a>00096     cpl_frameset    *   out ;
-<a name="l00097"></a>00097     <span class="keyword">const</span> cpl_frame *   cur_frame ;
-<a name="l00098"></a>00098     cpl_frame       *   loc_frame ;
-<a name="l00099"></a>00099     <span class="keywordtype">int</span>                 nbframes, nbext ;
-<a name="l00100"></a>00100     <span class="keywordtype">int</span>                 i ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="comment">/* Test entries */</span>
-<a name="l00103"></a>00103     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00104"></a>00104     <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     <span class="comment">/* Initialise */</span>
-<a name="l00107"></a>00107     nbframes = cpl_frameset_get_size(in) ;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     <span class="comment">/* Count the frames with the tag */</span>
-<a name="l00110"></a>00110     <span class="keywordflow">if</span> ((nbext = cpl_frameset_count_tags(in, tag)) == 0) <span class="keywordflow">return</span> NULL ;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="comment">/* Create the output frameset */</span>
-<a name="l00113"></a>00113     out = cpl_frameset_new() ;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     <span class="comment">/* Loop on the requested frames and store them in out */</span>
-<a name="l00116"></a>00116     nbext = 0 ;
-<a name="l00117"></a>00117     <span class="keywordflow">for</span> (i=0 ; i<nbframes ; i++) {
-<a name="l00118"></a>00118         cur_frame = cpl_frameset_get_frame_const(in, i) ;
-<a name="l00119"></a>00119         <span class="keywordflow">if</span> (!strcmp(cpl_frame_get_tag(cur_frame), tag)) {
-<a name="l00120"></a>00120             loc_frame = cpl_frame_duplicate(cur_frame) ;
-<a name="l00121"></a>00121             cpl_frameset_insert(out, loc_frame) ;
-<a name="l00122"></a>00122             nbext ++ ;
-<a name="l00123"></a>00123         }
-<a name="l00124"></a>00124     }
-<a name="l00125"></a>00125     <span class="keywordflow">return</span> out ;
-<a name="l00126"></a>00126 }
-<a name="l00127"></a>00127 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_extract_filename(
-<a name="l00136"></a>00136         <span class="keyword">const</span> cpl_frameset  *   in,
-<a name="l00137"></a>00137         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   tag)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139     <span class="keyword">const</span> cpl_frame *   cur_frame ;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141     <span class="comment">/* Get the frame  */</span>
-<a name="l00142"></a>00142     <span class="keywordflow">if</span> ((cur_frame = cpl_frameset_find_const(in, tag)) == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00143"></a>00143     <span class="keywordflow">return</span> cpl_frame_get_filename(cur_frame) ;
-<a name="l00144"></a>00144 }
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00152"></a>00152 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00153"></a>00153 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_std_band_name(sinfo_band band)
-<a name="l00154"></a>00154 {
-<a name="l00155"></a>00155     <span class="keywordflow">switch</span> (band) {
-<a name="l00156"></a>00156         <span class="keywordflow">case</span> SINFO_BAND_J:        <span class="keywordflow">return</span> <span class="stringliteral">"J"</span> ;
-<a name="l00157"></a>00157         <span class="keywordflow">case</span> SINFO_BAND_JS:       <span class="keywordflow">return</span> <span class="stringliteral">"Js"</span> ;
-<a name="l00158"></a>00158         <span class="keywordflow">case</span> SINFO_BAND_JBLOCK:   <span class="keywordflow">return</span> <span class="stringliteral">"J+Block"</span> ;
-<a name="l00159"></a>00159         <span class="keywordflow">case</span> SINFO_BAND_H:        <span class="keywordflow">return</span> <span class="stringliteral">"H"</span> ;
-<a name="l00160"></a>00160         <span class="keywordflow">case</span> SINFO_BAND_K:        <span class="keywordflow">return</span> <span class="stringliteral">"K"</span> ;
-<a name="l00161"></a>00161         <span class="keywordflow">case</span> SINFO_BAND_KS:       <span class="keywordflow">return</span> <span class="stringliteral">"Ks"</span> ;
-<a name="l00162"></a>00162         <span class="keywordflow">case</span> SINFO_BAND_L:        <span class="keywordflow">return</span> <span class="stringliteral">"L"</span> ;
-<a name="l00163"></a>00163         <span class="keywordflow">case</span> SINFO_BAND_M:        <span class="keywordflow">return</span> <span class="stringliteral">"M"</span> ;
-<a name="l00164"></a>00164         <span class="keywordflow">case</span> SINFO_BAND_LP:       <span class="keywordflow">return</span> <span class="stringliteral">"Lp"</span> ;
-<a name="l00165"></a>00165         <span class="keywordflow">case</span> SINFO_BAND_MP:       <span class="keywordflow">return</span> <span class="stringliteral">"Mp"</span> ;
-<a name="l00166"></a>00166         <span class="keywordflow">case</span> SINFO_BAND_Z:        <span class="keywordflow">return</span> <span class="stringliteral">"Z"</span> ;
-<a name="l00167"></a>00167         <span class="keywordflow">case</span> SINFO_BAND_SZ:       <span class="keywordflow">return</span> <span class="stringliteral">"SZ"</span> ;
-<a name="l00168"></a>00168         <span class="keywordflow">case</span> SINFO_BAND_SH:       <span class="keywordflow">return</span> <span class="stringliteral">"SH"</span> ;
-<a name="l00169"></a>00169         <span class="keywordflow">case</span> SINFO_BAND_SK:       <span class="keywordflow">return</span> <span class="stringliteral">"SK"</span> ;
-<a name="l00170"></a>00170         <span class="keywordflow">case</span> SINFO_BAND_SL:       <span class="keywordflow">return</span> <span class="stringliteral">"SL"</span> ;
-<a name="l00171"></a>00171         <span class="keywordflow">default</span>:            <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span> ;
-<a name="l00172"></a>00172     } 
-<a name="l00173"></a>00173 }
-<a name="l00174"></a>00174 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tpl_utils.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_tpl_utils.c,v 1.4 2013/07/15 08:13:35 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/07/15 08:13:35 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.4 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_get_license(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *   sinfoni_license =</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="stringliteral">"This file is part of the SINFONI Instrument Pipeline\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="stringliteral">"Copyright (C) 2002,2003 European Southern Observatory\n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="stringliteral">"This program is free software; you can redistribute it and/or modify\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="stringliteral">"it under the terms of the GNU General Public License as published by\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="stringliteral">"the Free Software Foundation; either version 2 of the License, or\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="stringliteral">"(at your option) any later version.\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="stringliteral">"This program is distributed in the hope that it will be useful,\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="stringliteral">"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="stringliteral">"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="stringliteral">"GNU General Public License for more details.\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         <span class="stringliteral">"\n"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="stringliteral">"You should have received a copy of the GNU General Public License\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="stringliteral">"along with this program; if not, write to the Free Software\n"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="stringliteral">"Foundation, Inc., 59 Temple Place, Suite 330, Boston, \n"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="stringliteral">"MA  02111-1307  USA"</span> ;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keywordflow">return</span> sinfoni_license ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> cpl_frameset * sinfo_extract_frameset(</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="keyword">const</span> cpl_frameset  *   in,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   tag)</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_frameset    *   out ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keyword">const</span> cpl_frame *   cur_frame ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_frame       *   loc_frame ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">int</span>                 nbframes, nbext ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     <span class="keywordflow">if</span> (in == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     <span class="keywordflow">if</span> (tag == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     nbframes = cpl_frameset_get_size(in) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/* Count the frames with the tag */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">if</span> ((nbext = cpl_frameset_count_tags(in, tag)) == 0) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/* Create the output frameset */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     out = cpl_frameset_new() ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="comment">/* Loop on the requested frames and store them in out */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     nbext = 0 ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">for</span> (i=0 ; i<nbframes ; i++) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         cur_frame = cpl_frameset_get_frame_const(in, i) ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         <span class="keywordflow">if</span> (!strcmp(cpl_frame_get_tag(cur_frame), tag)) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>             loc_frame = cpl_frame_duplicate(cur_frame) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>             cpl_frameset_insert(out, loc_frame) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>             nbext ++ ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="keywordflow">return</span> out ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_extract_filename(</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <span class="keyword">const</span> cpl_frameset  *   in,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>          *   tag)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keyword">const</span> cpl_frame *   cur_frame ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="comment">/* Get the frame  */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">if</span> ((cur_frame = cpl_frameset_find_const(in, tag)) == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keywordflow">return</span> cpl_frame_get_filename(cur_frame) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_std_band_name(sinfo_band band)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">switch</span> (band) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         <span class="keywordflow">case</span> SINFO_BAND_J:        <span class="keywordflow">return</span> <span class="stringliteral">"J"</span> ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         <span class="keywordflow">case</span> SINFO_BAND_JS:       <span class="keywordflow">return</span> <span class="stringliteral">"Js"</span> ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         <span class="keywordflow">case</span> SINFO_BAND_JBLOCK:   <span class="keywordflow">return</span> <span class="stringliteral">"J+Block"</span> ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>         <span class="keywordflow">case</span> SINFO_BAND_H:        <span class="keywordflow">return</span> <span class="stringliteral">"H"</span> ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>         <span class="keywordflow">case</span> SINFO_BAND_K:        <span class="keywordflow">return</span> <span class="stringliteral">"K"</span> ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>         <span class="keywordflow">case</span> SINFO_BAND_KS:       <span class="keywordflow">return</span> <span class="stringliteral">"Ks"</span> ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>         <span class="keywordflow">case</span> SINFO_BAND_L:        <span class="keywordflow">return</span> <span class="stringliteral">"L"</span> ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>         <span class="keywordflow">case</span> SINFO_BAND_M:        <span class="keywordflow">return</span> <span class="stringliteral">"M"</span> ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         <span class="keywordflow">case</span> SINFO_BAND_LP:       <span class="keywordflow">return</span> <span class="stringliteral">"Lp"</span> ;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>         <span class="keywordflow">case</span> SINFO_BAND_MP:       <span class="keywordflow">return</span> <span class="stringliteral">"Mp"</span> ;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         <span class="keywordflow">case</span> SINFO_BAND_Z:        <span class="keywordflow">return</span> <span class="stringliteral">"Z"</span> ;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         <span class="keywordflow">case</span> SINFO_BAND_SZ:       <span class="keywordflow">return</span> <span class="stringliteral">"SZ"</span> ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>         <span class="keywordflow">case</span> SINFO_BAND_SH:       <span class="keywordflow">return</span> <span class="stringliteral">"SH"</span> ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         <span class="keywordflow">case</span> SINFO_BAND_SK:       <span class="keywordflow">return</span> <span class="stringliteral">"SK"</span> ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>         <span class="keywordflow">case</span> SINFO_BAND_SL:       <span class="keywordflow">return</span> <span class="stringliteral">"SL"</span> ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>         <span class="keywordflow">default</span>:            <span class="keywordflow">return</span> <span class="stringliteral">"Unknown"</span> ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     } </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> }</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__tpl__utils_8h_source.html b/html/sinfo__tpl__utils_8h_source.html
index 0a81bef..700ef99 100644
--- a/html/sinfo__tpl__utils_8h_source.html
+++ b/html/sinfo__tpl__utils_8h_source.html
@@ -2,80 +2,111 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_tpl_utils.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_tpl_utils.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_tpl_utils.h,v 1.2 2007/08/20 10:03:49 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/08/20 10:03:49 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifndef SINFO_TPL_UTILS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TPL_UTILS_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span>
-<a name="l00031"></a>00031 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00032"></a>00032 <span class="comment">                                                                Includes</span>
-<a name="l00033"></a>00033 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keyword">typedef</span> <span class="keyword">enum</span> _SINFO_BAND_ {
-<a name="l00038"></a>00038     SINFO_BAND_J,
-<a name="l00039"></a>00039     SINFO_BAND_JS,
-<a name="l00040"></a>00040     SINFO_BAND_JBLOCK,
-<a name="l00041"></a>00041     SINFO_BAND_H,
-<a name="l00042"></a>00042     SINFO_BAND_K,
-<a name="l00043"></a>00043     SINFO_BAND_KS,
-<a name="l00044"></a>00044     SINFO_BAND_L,
-<a name="l00045"></a>00045     SINFO_BAND_M,
-<a name="l00046"></a>00046     SINFO_BAND_LP,
-<a name="l00047"></a>00047     SINFO_BAND_MP,
-<a name="l00048"></a>00048     SINFO_BAND_Z,
-<a name="l00049"></a>00049     SINFO_BAND_SZ,
-<a name="l00050"></a>00050     SINFO_BAND_SH,
-<a name="l00051"></a>00051     SINFO_BAND_SK,
-<a name="l00052"></a>00052     SINFO_BAND_SL,
-<a name="l00053"></a>00053     SINFO_BAND_UNKNOWN
-<a name="l00054"></a>00054 } sinfo_band ;
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00057"></a>00057 <span class="comment">                                                                Prototypes</span>
-<a name="l00058"></a>00058 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_get_license(<span class="keywordtype">void</span>) ;
-<a name="l00061"></a>00061 cpl_frameset * sinfo_extract_frameset(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *) ;
-<a name="l00062"></a>00062 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_extract_filename(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *) ;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_std_band_name(sinfo_band) ;
-<a name="l00065"></a>00065 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_tpl_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_tpl_utils.h,v 1.2 2007/08/20 10:03:49 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2007/08/20 10:03:49 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifndef SINFO_TPL_UTILS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TPL_UTILS_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                                                                Includes</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">typedef</span> <span class="keyword">enum</span> _SINFO_BAND_ {</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>     SINFO_BAND_J,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>     SINFO_BAND_JS,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>     SINFO_BAND_JBLOCK,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>     SINFO_BAND_H,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>     SINFO_BAND_K,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>     SINFO_BAND_KS,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>     SINFO_BAND_L,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>     SINFO_BAND_M,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>     SINFO_BAND_LP,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>     SINFO_BAND_MP,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>     SINFO_BAND_Z,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>     SINFO_BAND_SZ,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>     SINFO_BAND_SH,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>     SINFO_BAND_SK,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     SINFO_BAND_SL,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>     SINFO_BAND_UNKNOWN</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> } sinfo_band ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                                                                Prototypes</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_get_license(<span class="keywordtype">void</span>) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> cpl_frameset * sinfo_extract_frameset(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_extract_filename(<span class="keyword">const</span> cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span> *) ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfo_std_band_name(sinfo_band) ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utilities_8c_source.html b/html/sinfo__utilities_8c_source.html
index 1c0873d..a7b42cc 100644
--- a/html/sinfo__utilities_8c_source.html
+++ b/html/sinfo__utilities_8c_source.html
@@ -2,1074 +2,1105 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utilities.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utilities.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00035"></a>00035 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 cpl_image*
-<a name="l00048"></a>00048 sinfo_vector_to_image(<span class="keyword">const</span> cpl_vector* vector,cpl_type type)
-<a name="l00049"></a>00049 {
-<a name="l00050"></a>00050   <span class="keywordtype">int</span> i=0;
-<a name="l00051"></a>00051   cpl_image* image=NULL;
-<a name="l00052"></a>00052   <span class="keywordtype">int</span> size=0;
-<a name="l00053"></a>00053   <span class="keyword">const</span> <span class="keywordtype">double</span>* pv=NULL;
-<a name="l00054"></a>00054   <span class="keywordtype">int</span>* pi=NULL;
-<a name="l00055"></a>00055   <span class="keywordtype">float</span>* pf=NULL;
-<a name="l00056"></a>00056   <span class="keywordtype">double</span>* pd=NULL;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059       size=cpl_vector_get_size(vector);
-<a name="l00060"></a>00060       image=cpl_image_new(size,1,type);
-<a name="l00061"></a>00061       pv=cpl_vector_get_data_const(vector);
-<a name="l00062"></a>00062       <span class="keywordflow">if</span>(type == CPL_TYPE_INT) {
-<a name="l00063"></a>00063         pi=cpl_image_get_data_int(image);
-<a name="l00064"></a>00064         <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00065"></a>00065       pi[i]=pv[i];
-<a name="l00066"></a>00066     }
-<a name="l00067"></a>00067       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_FLOAT) {
-<a name="l00068"></a>00068         pf=cpl_image_get_data_float(image);
-<a name="l00069"></a>00069         <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00070"></a>00070       pf[i]=pv[i];
-<a name="l00071"></a>00071     }
-<a name="l00072"></a>00072       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_DOUBLE) {
-<a name="l00073"></a>00073         pd=cpl_image_get_data_double(image);
-<a name="l00074"></a>00074         <span class="keywordflow">for</span>(i=0;i<size;i++) {
-<a name="l00075"></a>00075       pd[i]=pv[i];
-<a name="l00076"></a>00076     }
-<a name="l00077"></a>00077       } <span class="keywordflow">else</span> {
-<a name="l00078"></a>00078         assure( 0, CPL_ERROR_INVALID_TYPE,
-<a name="l00079"></a>00079             <span class="stringliteral">"No CPL type to represent BITPIX = %d"</span>, type);
-<a name="l00080"></a>00080       }
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082  cleanup:
-<a name="l00083"></a>00083     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE){
-<a name="l00084"></a>00084       sinfo_free_image(&image);
-<a name="l00085"></a>00085     }
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     <span class="keywordflow">return</span> image;
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 }
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092 cpl_error_code
-<a name="l00093"></a>00093 sinfo_ima_line_cor(cpl_parameterlist * parlist, cpl_frameset* in)
-<a name="l00094"></a>00094 {
-<a name="l00095"></a>00095   <span class="keywordtype">int</span> n=0;
-<a name="l00096"></a>00096   <span class="keywordtype">int</span> i=0;
-<a name="l00097"></a>00097   <span class="keywordtype">int</span> kappa=18;
-<a name="l00098"></a>00098   <span class="keywordtype">int</span> filt_rad=3;
-<a name="l00099"></a>00099   <span class="keywordtype">int</span> width=4;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   cpl_frame* frm=NULL;
-<a name="l00102"></a>00102   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00103"></a>00103   <span class="keyword">const</span> <span class="keywordtype">char</span>* bname=NULL;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105   cpl_image * ima=NULL ;
-<a name="l00106"></a>00106   cpl_image * ima_out=NULL ;
-<a name="l00107"></a>00107   cpl_parameter* p=NULL;
-<a name="l00108"></a>00108   cpl_propertylist* plist=NULL;
-<a name="l00109"></a>00109   <span class="keywordtype">char</span>* tag=NULL;
-<a name="l00110"></a>00110   <span class="keywordtype">char</span> name_deb[80];
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113   check_nomsg(p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.general.lc_kappa"</span>));
-<a name="l00114"></a>00114   check_nomsg(kappa=cpl_parameter_get_int(p));
-<a name="l00115"></a>00115   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00116"></a>00116                        <span class="stringliteral">"sinfoni.general.lc_filt_rad"</span>));
-<a name="l00117"></a>00117   check_nomsg(filt_rad = cpl_parameter_get_int(p)) ;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   n=cpl_frameset_get_size(in);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121   <span class="keywordflow">for</span>(i=0;i<n;i++) {
-<a name="l00122"></a>00122     check_nomsg(frm=cpl_frameset_get_frame(in,i));
-<a name="l00123"></a>00123     tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frm);
-<a name="l00124"></a>00124     <span class="keywordflow">if</span>(sinfo_frame_is_raw(tag) == 1) {
-<a name="l00125"></a>00125       check_nomsg(name=cpl_frame_get_filename(frm));
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127       bname=sinfo_new_get_basename(name);
-<a name="l00128"></a>00128       check_nomsg(ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00129"></a>00129       check_nomsg(sinfo_image_line_corr(width,filt_rad,kappa,ima,&ima_out));
-<a name="l00130"></a>00130       check_nomsg(plist=cpl_propertylist_load(name,0));
-<a name="l00131"></a>00131       <span class="comment">//sprintf(name_deb,"dark_org_%d.fits",i);</span>
-<a name="l00132"></a>00132       sprintf(name_deb,<span class="stringliteral">"org_%2.2d_%s"</span>,i,bname);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134       check(cpl_image_save(ima,
-<a name="l00135"></a>00135                name_deb,
-<a name="l00136"></a>00136                CPL_BPP_IEEE_FLOAT,
-<a name="l00137"></a>00137                plist,
-<a name="l00138"></a>00138                CPL_IO_DEFAULT),
-<a name="l00139"></a>00139         <span class="stringliteral">"Could not save product"</span>);
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142       check(cpl_image_save(ima_out,
-<a name="l00143"></a>00143                bname,
-<a name="l00144"></a>00144                CPL_BPP_IEEE_FLOAT,
-<a name="l00145"></a>00145                plist,
-<a name="l00146"></a>00146                CPL_IO_DEFAULT),
-<a name="l00147"></a>00147         <span class="stringliteral">"Could not save product"</span>);
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149       cpl_frame_set_filename(frm,bname);
-<a name="l00150"></a>00150       sinfo_free_image(&ima);
-<a name="l00151"></a>00151       sinfo_free_propertylist(&plist);
-<a name="l00152"></a>00152     }
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154   }
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156  cleanup:
-<a name="l00157"></a>00157   sinfo_free_image(&ima);
-<a name="l00158"></a>00158   sinfo_free_propertylist(&plist);
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160   <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="keywordtype">int</span>
-<a name="l00165"></a>00165 sinfo_table_column_dump(cpl_table* t, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, cpl_type type)
-<a name="l00166"></a>00166 {
-<a name="l00167"></a>00167   <span class="keywordtype">int</span> nrow=0;
-<a name="l00168"></a>00168   <span class="keywordtype">int</span> i=0;
-<a name="l00169"></a>00169   <span class="keywordtype">int</span>* pi=NULL;
-<a name="l00170"></a>00170   <span class="keywordtype">float</span>* pf=NULL;
-<a name="l00171"></a>00171   <span class="keywordtype">double</span>* pd=NULL;
-<a name="l00172"></a>00172   <span class="keywordtype">char</span>** ps=NULL;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   nrow=cpl_table_get_nrow(t);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176   <span class="keywordflow">switch</span>(type) {
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178   <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l00179"></a>00179     pi=cpl_table_get_data_int(t,name);
-<a name="l00180"></a>00180     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00181"></a>00181       sinfo_msg(<span class="stringliteral">"val=%d"</span>,pi[i]);
-<a name="l00182"></a>00182     }
-<a name="l00183"></a>00183     <span class="keywordflow">break</span>;
-<a name="l00184"></a>00184   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:
-<a name="l00185"></a>00185     pf=cpl_table_get_data_float(t,name);
-<a name="l00186"></a>00186     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00187"></a>00187       sinfo_msg(<span class="stringliteral">"val=%g"</span>,pf[i]);
-<a name="l00188"></a>00188     }
-<a name="l00189"></a>00189     <span class="keywordflow">break</span>;
-<a name="l00190"></a>00190   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:
-<a name="l00191"></a>00191     pd=cpl_table_get_data_double(t,name);
-<a name="l00192"></a>00192     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00193"></a>00193       sinfo_msg(<span class="stringliteral">"val=%g"</span>,pd[i]);
-<a name="l00194"></a>00194     }
-<a name="l00195"></a>00195     <span class="keywordflow">break</span>;
-<a name="l00196"></a>00196   <span class="keywordflow">case</span> CPL_TYPE_STRING:
-<a name="l00197"></a>00197     ps=cpl_table_get_data_string(t,name);
-<a name="l00198"></a>00198     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00199"></a>00199       sinfo_msg(<span class="stringliteral">"val=%s"</span>,ps[i]);
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201     <span class="keywordflow">break</span>;
-<a name="l00202"></a>00202   <span class="keywordflow">default</span>:
-<a name="l00203"></a>00203     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);
-<a name="l00204"></a>00204     cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);
-<a name="l00205"></a>00205     <span class="keywordflow">return</span> 0;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207   }
-<a name="l00208"></a>00208   <span class="keywordflow">return</span> 0;
-<a name="l00209"></a>00209 }
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212 
-<a name="l00222"></a>00222 cpl_table*
-<a name="l00223"></a>00223 sinfo_table_shift_column_spline3(cpl_table* t,
-<a name="l00224"></a>00224                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00225"></a>00225                                  <span class="keyword">const</span> <span class="keywordtype">double</span> shift)
-<a name="l00226"></a>00226 {
-<a name="l00227"></a>00227   cpl_table* out=NULL;
-<a name="l00228"></a>00228   <span class="keywordtype">int</span> nrow=0;
-<a name="l00229"></a>00229   <span class="keywordtype">int</span> i=0;
-<a name="l00230"></a>00230   <span class="keywordtype">int</span> z=0;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   <span class="keywordtype">float</span> sum=0;
-<a name="l00233"></a>00233   <span class="keywordtype">float</span> new_sum=0;
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235   <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00236"></a>00236   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00237"></a>00237   <span class="keywordtype">float</span>* eval=NULL;
-<a name="l00238"></a>00238   <span class="keywordtype">float</span>* xnum=NULL;
-<a name="l00239"></a>00239   <span class="keywordtype">float</span>* spec=NULL;
-<a name="l00240"></a>00240   <span class="keywordtype">float</span>* corrected_spec=NULL;
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00243"></a>00243   out=cpl_table_duplicate(t);
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245   nrow=cpl_table_get_nrow(t);
-<a name="l00246"></a>00246   check_nomsg(cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));
-<a name="l00247"></a>00247   check_nomsg(cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));
-<a name="l00248"></a>00248   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);
-<a name="l00249"></a>00249   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253   xnum=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00254"></a>00254   <span class="comment">/* fill the xa[] array for the spline function */</span>
-<a name="l00255"></a>00255   <span class="keywordflow">for</span> ( i = 0 ; i < nrow ; i++ ) {
-<a name="l00256"></a>00256     xnum[i] = i ;
-<a name="l00257"></a>00257   }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00260"></a>00260   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00261"></a>00261   eval=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263   sum = 0. ;
-<a name="l00264"></a>00264   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00265"></a>00265     spec[z] = pi[z] ;
-<a name="l00266"></a>00266     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l00267"></a>00267       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {
-<a name="l00268"></a>00268     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00269"></a>00269     <span class="keywordflow">if</span> ( i >= nrow) continue ;
-<a name="l00270"></a>00270     corrected_spec[i] = ZERO ;
-<a name="l00271"></a>00271       }
-<a name="l00272"></a>00272       spec[z] = 0. ;
-<a name="l00273"></a>00273     }
-<a name="l00274"></a>00274     sum += spec[z] ;
-<a name="l00275"></a>00275     eval[z] = (float)shift+(<span class="keywordtype">float</span>)z ;
-<a name="l00276"></a>00276   }
-<a name="l00277"></a>00277   <span class="comment">/* now we do the spline interpolation*/</span>
-<a name="l00278"></a>00278   <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,spec, nrow,
-<a name="l00279"></a>00279                                              eval,corrected_spec, nrow))
-<a name="l00280"></a>00280     {
-<a name="l00281"></a>00281       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;
-<a name="l00282"></a>00282       <span class="keywordflow">goto</span> cleanup;
-<a name="l00283"></a>00283     }
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285   new_sum = 0. ;
-<a name="l00286"></a>00286   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00287"></a>00287     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00288"></a>00288       continue ;
-<a name="l00289"></a>00289     }
-<a name="l00290"></a>00290     new_sum += corrected_spec[z] ;
-<a name="l00291"></a>00291   }
-<a name="l00292"></a>00292   <span class="comment">/* fill output imagelist */</span>
-<a name="l00293"></a>00293   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00294"></a>00294     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;
-<a name="l00295"></a>00295     {
-<a name="l00296"></a>00296       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00297"></a>00297     po[z] = ZERO ;
-<a name="l00298"></a>00298       } <span class="keywordflow">else</span> {
-<a name="l00299"></a>00299     corrected_spec[z] *= sum / new_sum ;
-<a name="l00300"></a>00300     po[z] = corrected_spec[z] ;
-<a name="l00301"></a>00301       }
-<a name="l00302"></a>00302     }
-<a name="l00303"></a>00303   }
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   sinfo_free_float(&xnum);
-<a name="l00306"></a>00306   sinfo_free_float(&spec) ;
-<a name="l00307"></a>00307   sinfo_free_float(&corrected_spec) ;
-<a name="l00308"></a>00308   sinfo_free_float(&eval) ;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));
-<a name="l00311"></a>00311   check_nomsg(cpl_table_erase_column(out,col));
-<a name="l00312"></a>00312   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));
-<a name="l00313"></a>00313   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315   <span class="keywordflow">return</span> out;
-<a name="l00316"></a>00316  cleanup:
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318   sinfo_free_float(&xnum);
-<a name="l00319"></a>00319   sinfo_free_float(&spec) ;
-<a name="l00320"></a>00320   sinfo_free_float(&corrected_spec) ;
-<a name="l00321"></a>00321   sinfo_free_float(&eval) ;
-<a name="l00322"></a>00322   sinfo_free_table(&out);
-<a name="l00323"></a>00323   <span class="keywordflow">return</span> NULL;
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 
-<a name="l00338"></a>00338 cpl_table*
-<a name="l00339"></a>00339 sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t,
-<a name="l00340"></a>00340                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00341"></a>00341                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,
-<a name="l00342"></a>00342                                    <span class="keywordtype">double</span>* r)
-<a name="l00343"></a>00343 {
-<a name="l00344"></a>00344   cpl_table* out=NULL;
-<a name="l00345"></a>00345   <span class="keywordtype">int</span> is=(int)s;
-<a name="l00346"></a>00346   <span class="keywordtype">int</span> nrow=0;
-<a name="l00347"></a>00347   <span class="keywordtype">int</span> i=0;
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;
-<a name="l00350"></a>00350   <span class="keywordtype">double</span>* po=NULL;
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00353"></a>00353   out=cpl_table_duplicate(t);
-<a name="l00354"></a>00354   *r=s-is;
-<a name="l00355"></a>00355   nrow=cpl_table_get_nrow(t);
-<a name="l00356"></a>00356   pi=cpl_table_get_data_double_const(t,col);
-<a name="l00357"></a>00357   po=cpl_table_get_data_double(out,col);
-<a name="l00358"></a>00358   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00359"></a>00359     <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {
-<a name="l00360"></a>00360       po[i-is]=pi[i];
-<a name="l00361"></a>00361     }
-<a name="l00362"></a>00362   }
-<a name="l00363"></a>00363   <span class="keywordflow">return</span> out;
-<a name="l00364"></a>00364  cleanup:
-<a name="l00365"></a>00365   sinfo_free_table(&out);
-<a name="l00366"></a>00366   <span class="keywordflow">return</span> NULL;
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368 }
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370 
-<a name="l00381"></a>00381 cpl_table*
-<a name="l00382"></a>00382 sinfo_table_shift_column_poly(cpl_table* t,
-<a name="l00383"></a>00383                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00384"></a>00384                               <span class="keyword">const</span> <span class="keywordtype">double</span> shift,
-<a name="l00385"></a>00385                               <span class="keyword">const</span> <span class="keywordtype">int</span> order)
-<a name="l00386"></a>00386 {
-<a name="l00387"></a>00387   cpl_table* out=NULL;
-<a name="l00388"></a>00388   <span class="keywordtype">int</span> nrow=0;
-<a name="l00389"></a>00389   <span class="keywordtype">int</span> i=0;
-<a name="l00390"></a>00390   <span class="keywordtype">int</span> flag=0;
-<a name="l00391"></a>00391   <span class="keywordtype">int</span> n_points=0;
-<a name="l00392"></a>00392   <span class="keywordtype">int</span> firstpos=0;
-<a name="l00393"></a>00393   <span class="keywordtype">int</span> z=0;
-<a name="l00394"></a>00394   <span class="keywordtype">float</span> eval=0;
-<a name="l00395"></a>00395   <span class="keywordtype">float</span> sum=0;
-<a name="l00396"></a>00396   <span class="keywordtype">float</span> new_sum=0;
-<a name="l00397"></a>00397   <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00398"></a>00398   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00399"></a>00399   <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l00400"></a>00400   <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l00401"></a>00401   <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l00402"></a>00402   <span class="keywordtype">float</span>* tableptr=NULL;
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00405"></a>00405   <span class="keywordflow">if</span> ( order <= 0 ) {
-<a name="l00406"></a>00406     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l00407"></a>00407     <span class="keywordflow">goto</span> cleanup;
-<a name="l00408"></a>00408   }
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410   out=cpl_table_duplicate(t);
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412   nrow=cpl_table_get_nrow(t);
-<a name="l00413"></a>00413   cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);
-<a name="l00414"></a>00414   cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);
-<a name="l00415"></a>00415   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);
-<a name="l00416"></a>00416   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);
-<a name="l00417"></a>00417 
-<a name="l00418"></a>00418   n_points = order + 1 ;
-<a name="l00419"></a>00419   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {
-<a name="l00420"></a>00420     firstpos = (int)(n_points/2) - 1 ;
-<a name="l00421"></a>00421   } <span class="keywordflow">else</span> {
-<a name="l00422"></a>00422     firstpos = (int)(n_points/2) ;
-<a name="l00423"></a>00423   }
-<a name="l00424"></a>00424   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00425"></a>00425   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00426"></a>00426   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00427"></a>00427   <span class="comment">/* fill the xa[] array for the polint function */</span>
-<a name="l00428"></a>00428   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {
-<a name="l00429"></a>00429     xnum[i] = i ;
-<a name="l00430"></a>00430   }
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00434"></a>00434     corrected_spec[i] = 0. ;
-<a name="l00435"></a>00435   }
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437   sum = 0. ;
-<a name="l00438"></a>00438   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00439"></a>00439     spec[z] = pi[z] ;
-<a name="l00440"></a>00440     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l00441"></a>00441       spec[z] = 0. ;
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {
-<a name="l00444"></a>00444     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00445"></a>00445     <span class="keywordflow">if</span> ( i >= nrow) continue  ;
-<a name="l00446"></a>00446     corrected_spec[i] = ZERO ;
-<a name="l00447"></a>00447       }
-<a name="l00448"></a>00448     }
-<a name="l00449"></a>00449     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {
-<a name="l00450"></a>00450       sum += spec[z] ;
-<a name="l00451"></a>00451     }
-<a name="l00452"></a>00452   }
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454   new_sum = 0. ;
-<a name="l00455"></a>00455   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00456"></a>00456     <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l00457"></a>00457 <span class="comment">     * now determine the arrays of size n_points with which the</span>
-<a name="l00458"></a>00458 <span class="comment">     * polynom is determined and determine the position eval</span>
-<a name="l00459"></a>00459 <span class="comment">     * where the polynom is evaluated in polynomial interpolation.</span>
-<a name="l00460"></a>00460 <span class="comment">     * Take care of the points near the row edges!</span>
-<a name="l00461"></a>00461 <span class="comment">     */</span>
-<a name="l00462"></a>00462     <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;
-<a name="l00463"></a>00463     <span class="keywordflow">if</span> ( z - firstpos < 0 ) {
-<a name="l00464"></a>00464       tableptr = &spec[0] ;
-<a name="l00465"></a>00465       eval     = shift + z ;
-<a name="l00466"></a>00466     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= nrow ) {
-<a name="l00467"></a>00467       tableptr = &spec[nrow - n_points] ;
-<a name="l00468"></a>00468       eval     = shift + z + n_points - nrow ;
-<a name="l00469"></a>00469     } <span class="keywordflow">else</span> {
-<a name="l00470"></a>00470       tableptr = &spec[z-firstpos] ;
-<a name="l00471"></a>00471       eval     = shift + firstpos ;
-<a name="l00472"></a>00472     }
-<a name="l00473"></a>00473 
-<a name="l00474"></a>00474     flag=0;
-<a name="l00475"></a>00475     corrected_spec[z]=sinfo_new_nev_ille(xnum,tableptr,order,eval,&flag);
-<a name="l00476"></a>00476     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {
-<a name="l00477"></a>00477       new_sum += corrected_spec[z] ;
-<a name="l00478"></a>00478     }
-<a name="l00479"></a>00479   }
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481   <span class="comment">/* fill the output spectrum */</span>
-<a name="l00482"></a>00482   <span class="keywordflow">for</span> (z = 0 ; z < nrow ; z++ ) {
-<a name="l00483"></a>00483     <span class="keywordflow">if</span> ( new_sum == 0. ) {
-<a name="l00484"></a>00484       new_sum = 1. ;
-<a name="l00485"></a>00485     }
-<a name="l00486"></a>00486     <span class="keywordflow">if</span> ( z == 0 ) {
-<a name="l00487"></a>00487       po[z] = ZERO ;
-<a name="l00488"></a>00488     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == nrow - 1 ) {
-<a name="l00489"></a>00489       po[z] = ZERO ;
-<a name="l00490"></a>00490     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00491"></a>00491       po[z] = ZERO ;
-<a name="l00492"></a>00492     } <span class="keywordflow">else</span> {
-<a name="l00493"></a>00493       corrected_spec[z] *= sum / new_sum ;
-<a name="l00494"></a>00494       po[z] = corrected_spec[z] ;
-<a name="l00495"></a>00495     }
-<a name="l00496"></a>00496   }
-<a name="l00497"></a>00497   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));
-<a name="l00498"></a>00498   check_nomsg(cpl_table_erase_column(out,col));
-<a name="l00499"></a>00499   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));
-<a name="l00500"></a>00500   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));
-<a name="l00501"></a>00501 
-<a name="l00502"></a>00502   sinfo_free_float(&spec) ;
-<a name="l00503"></a>00503   sinfo_free_float(&corrected_spec) ;
-<a name="l00504"></a>00504   sinfo_free_float(&xnum) ;
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506   <span class="keywordflow">return</span> out;
-<a name="l00507"></a>00507  cleanup:
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510   sinfo_free_float(&spec) ;
-<a name="l00511"></a>00511   sinfo_free_float(&corrected_spec) ;
-<a name="l00512"></a>00512   sinfo_free_float(&xnum) ;
-<a name="l00513"></a>00513   sinfo_free_table(&out);
-<a name="l00514"></a>00514   <span class="keywordflow">return</span> NULL;
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517 }
-<a name="l00518"></a>00518 
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522     <span class="keywordtype">void</span> sinfo_new_array_set_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> i )
-<a name="l00523"></a>00523     {
-<a name="l00524"></a>00524         array[i] = value ;
-<a name="l00525"></a>00525     }
-<a name="l00526"></a>00526     <span class="keywordtype">float</span> sinfo_new_array_get_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> i )
-<a name="l00527"></a>00527     {
-<a name="l00528"></a>00528         <span class="keywordflow">return</span> array[i] ;
-<a name="l00529"></a>00529     }
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533     <span class="keywordtype">void</span> sinfo_new_destroy_array(<span class="keywordtype">float</span> ** array)
-<a name="l00534"></a>00534     {
-<a name="l00535"></a>00535       <span class="keywordflow">if</span>(*array != NULL) {
-<a name="l00536"></a>00536         cpl_free( *array ) ;
-<a name="l00537"></a>00537         *array = NULL;
-<a name="l00538"></a>00538       }
-<a name="l00539"></a>00539     }
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541     <span class="keywordtype">void</span> sinfo_new_destroy_stringarray(<span class="keywordtype">char</span> ** array, <span class="keywordtype">int</span> size_x)
-<a name="l00542"></a>00542     {
-<a name="l00543"></a>00543         <span class="keywordtype">int</span> i ;
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )
-<a name="l00546"></a>00546         {
-<a name="l00547"></a>00547             cpl_free( array[i] ) ;
-<a name="l00548"></a>00548         }
-<a name="l00549"></a>00549         cpl_free( array ) ;
-<a name="l00550"></a>00550     }
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552     <span class="keywordtype">void</span> sinfo_new_destroy_2Dintarray(<span class="keywordtype">int</span> *** array, <span class="keywordtype">int</span> size_x)
-<a name="l00553"></a>00553     {
-<a name="l00554"></a>00554         <span class="keywordtype">int</span> i ;
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556         <span class="keywordflow">if</span>((*array) != NULL) {
-<a name="l00557"></a>00557       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {
-<a name="l00558"></a>00558         <span class="keywordflow">if</span>((*array)[i] != NULL) {
-<a name="l00559"></a>00559           cpl_free( (*array)[i] );
-<a name="l00560"></a>00560           (*array)[i]=NULL;
-<a name="l00561"></a>00561         }
-<a name="l00562"></a>00562       }
-<a name="l00563"></a>00563       cpl_free( *array ) ;
-<a name="l00564"></a>00564       *array=NULL;
-<a name="l00565"></a>00565     }
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567     }
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570     <span class="keywordtype">void</span> sinfo_new_intarray_set_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> i )
-<a name="l00571"></a>00571     {
-<a name="l00572"></a>00572         array[i] = value ;
-<a name="l00573"></a>00573     }
-<a name="l00574"></a>00574     <span class="keywordtype">float</span> sinfo_new_array2D_get_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y )
-<a name="l00575"></a>00575     {
-<a name="l00576"></a>00576         <span class="keywordflow">return</span> array[x][y] ;
-<a name="l00577"></a>00577     }
-<a name="l00578"></a>00578     <span class="keywordtype">int</span> ** sinfo_new_2Dintarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)
-<a name="l00579"></a>00579     {
-<a name="l00580"></a>00580         <span class="keywordtype">int</span> ** retVal ;
-<a name="l00581"></a>00581         <span class="keywordtype">int</span> i ;
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583         retVal = (<span class="keywordtype">int</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>*) ) ;
-<a name="l00584"></a>00584         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )
-<a name="l00585"></a>00585         {
-<a name="l00586"></a>00586             retVal[i] = (<span class="keywordtype">int</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>)) ;
-<a name="l00587"></a>00587         }
-<a name="l00588"></a>00588         <span class="keywordflow">return</span> retVal ;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591     <span class="keywordtype">float</span> * sinfo_new_floatarray( <span class="keywordtype">int</span> size)
-<a name="l00592"></a>00592     {
-<a name="l00593"></a>00593         <span class="keywordflow">return</span> (<span class="keywordtype">float</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l00594"></a>00594     }
-<a name="l00595"></a>00595 
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597     <span class="keywordtype">void</span> sinfo_new_destroy_2Dfloatarray(<span class="keywordtype">float</span> *** array, <span class="keywordtype">int</span> size_x)
-<a name="l00598"></a>00598     {
-<a name="l00599"></a>00599         <span class="keywordtype">int</span> i ;
-<a name="l00600"></a>00600         <span class="keywordflow">if</span>((*array) != NULL) {
-<a name="l00601"></a>00601       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {
-<a name="l00602"></a>00602         <span class="keywordflow">if</span>((*array)[i] != NULL) {
-<a name="l00603"></a>00603           cpl_free( (*array)[i] );
-<a name="l00604"></a>00604           (*array)[i]=NULL;
-<a name="l00605"></a>00605         }
-<a name="l00606"></a>00606       }
-<a name="l00607"></a>00607       cpl_free( *array ) ;
-<a name="l00608"></a>00608       *array=NULL;
-<a name="l00609"></a>00609     }
-<a name="l00610"></a>00610     }
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612     <span class="keywordtype">void</span> sinfo_new_destroy_2Ddoublearray(<span class="keywordtype">double</span> *** array, <span class="keywordtype">int</span> size_x)
-<a name="l00613"></a>00613     {
-<a name="l00614"></a>00614         <span class="keywordtype">int</span> i ;
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616         <span class="keywordflow">if</span>((*array) != NULL) {
-<a name="l00617"></a>00617       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {
-<a name="l00618"></a>00618         <span class="keywordflow">if</span>((*array)[i] != NULL) {
-<a name="l00619"></a>00619           cpl_free( (*array)[i] );
-<a name="l00620"></a>00620           (*array)[i]=NULL;
-<a name="l00621"></a>00621         }
-<a name="l00622"></a>00622       }
-<a name="l00623"></a>00623       cpl_free( *array ) ;
-<a name="l00624"></a>00624       *array=NULL;
-<a name="l00625"></a>00625     }
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627     }
-<a name="l00628"></a>00628 
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630     <span class="keywordtype">void</span> sinfo_new_array2D_set_value(<span class="keywordtype">float</span> ** array,<span class="keywordtype">float</span> value,<span class="keywordtype">int</span> x,<span class="keywordtype">int</span> y)
-<a name="l00631"></a>00631     {
-<a name="l00632"></a>00632         array[x][y] = value ;
-<a name="l00633"></a>00633     }
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635     <span class="keywordtype">double</span> sinfo_new_doublearray_get_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">int</span> i )
-<a name="l00636"></a>00636     {
-<a name="l00637"></a>00637         <span class="keywordflow">return</span> array[i] ;
-<a name="l00638"></a>00638     }
-<a name="l00639"></a>00639     <span class="keywordtype">void</span> sinfo_new_doublearray_set_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">double</span> value, <span class="keywordtype">int</span> i )
-<a name="l00640"></a>00640     {
-<a name="l00641"></a>00641         array[i] = value ;
-<a name="l00642"></a>00642     }
-<a name="l00643"></a>00643 
-<a name="l00644"></a>00644    <span class="keywordtype">void</span> sinfo_new_destroy_doublearray(<span class="keywordtype">double</span> * array)
-<a name="l00645"></a>00645     {
-<a name="l00646"></a>00646         cpl_free( array ) ;
-<a name="l00647"></a>00647     }
-<a name="l00648"></a>00648     <span class="keywordtype">double</span> * sinfo_new_doublearray( <span class="keywordtype">int</span> size)
-<a name="l00649"></a>00649     {
-<a name="l00650"></a>00650         <span class="keywordflow">return</span> (<span class="keywordtype">double</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>) ) ;
-<a name="l00651"></a>00651     }
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653     <span class="keywordtype">double</span> ** sinfo_new_2Ddoublearray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)
-<a name="l00654"></a>00654     {
-<a name="l00655"></a>00655         <span class="keywordtype">double</span> ** retVal ;
-<a name="l00656"></a>00656         <span class="keywordtype">int</span> i ;
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658         retVal = (<span class="keywordtype">double</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>*) ) ;
-<a name="l00659"></a>00659         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )
-<a name="l00660"></a>00660         {
-<a name="l00661"></a>00661             retVal[i] = (<span class="keywordtype">double</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>)) ;
-<a name="l00662"></a>00662         }
-<a name="l00663"></a>00663         <span class="keywordflow">return</span> retVal ;
-<a name="l00664"></a>00664     }
-<a name="l00665"></a>00665 
-<a name="l00666"></a>00666     <span class="keywordtype">float</span> ** sinfo_new_2Dfloatarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)
-<a name="l00667"></a>00667     {
-<a name="l00668"></a>00668         <span class="keywordtype">float</span> ** retVal ;
-<a name="l00669"></a>00669         <span class="keywordtype">int</span> i ;
-<a name="l00670"></a>00670 
-<a name="l00671"></a>00671         retVal = (<span class="keywordtype">float</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>*) ) ;
-<a name="l00672"></a>00672         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )
-<a name="l00673"></a>00673         {
-<a name="l00674"></a>00674             retVal[i] = (<span class="keywordtype">float</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00675"></a>00675         }
-<a name="l00676"></a>00676         <span class="keywordflow">return</span> retVal ;
-<a name="l00677"></a>00677     }
-<a name="l00678"></a>00678 
-<a name="l00679"></a>00679 
-<a name="l00680"></a>00680     <span class="keywordtype">int</span> * sinfo_new_intarray( <span class="keywordtype">int</span> size)
-<a name="l00681"></a>00681     {
-<a name="l00682"></a>00682         <span class="keywordflow">return</span> (<span class="keywordtype">int</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l00683"></a>00683     }
-<a name="l00684"></a>00684     <span class="keywordtype">void</span> sinfo_new_destroy_intarray(<span class="keywordtype">int</span> ** array)
-<a name="l00685"></a>00685     {
-<a name="l00686"></a>00686         cpl_free( *array ) ;
-<a name="l00687"></a>00687         *array=NULL;
-<a name="l00688"></a>00688     }
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690     <span class="keywordtype">int</span> sinfo_new_intarray_get_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> i )
-<a name="l00691"></a>00691     {
-<a name="l00692"></a>00692         <span class="keywordflow">return</span> array[i] ;
-<a name="l00693"></a>00693     }
-<a name="l00694"></a>00694 
-<a name="l00695"></a>00695     <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanstdev(Stats * stats)
-<a name="l00696"></a>00696     {
-<a name="l00697"></a>00697         <span class="keywordflow">return</span> stats -> cleanstdev ;
-<a name="l00698"></a>00698     }
-<a name="l00699"></a>00699     <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanmean(Stats * stats)
-<a name="l00700"></a>00700     {
-<a name="l00701"></a>00701         <span class="keywordflow">return</span> stats -> cleanmean ;
-<a name="l00702"></a>00702     }
-<a name="l00703"></a>00703 
-<a name="l00704"></a>00704 <span class="keywordtype">char</span> * sinfo_new_get_basename(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)
-<a name="l00705"></a>00705 {
-<a name="l00706"></a>00706   <span class="keywordtype">char</span> *p ;
-<a name="l00707"></a>00707   p = strrchr (filename, <span class="charliteral">'/'</span>);
-<a name="l00708"></a>00708   <span class="keywordflow">return</span> p ? p + 1 : (<span class="keywordtype">char</span> *) filename;
-<a name="l00709"></a>00709 }
-<a name="l00710"></a>00710 
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713 <span class="keywordtype">char</span> * sinfo_new_get_rootname(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)
-<a name="l00714"></a>00714 {
-<a name="l00715"></a>00715     <span class="keyword">static</span> <span class="keywordtype">char</span> path[MAX_NAME_SIZE+1];
-<a name="l00716"></a>00716     <span class="keywordtype">char</span> * lastdot ;
-<a name="l00717"></a>00717 
-<a name="l00718"></a>00718     <span class="keywordflow">if</span> (strlen(filename)>MAX_NAME_SIZE) <span class="keywordflow">return</span> NULL ;
-<a name="l00719"></a>00719     memset(path, MAX_NAME_SIZE, 0);
-<a name="l00720"></a>00720     strcpy(path, filename);
-<a name="l00721"></a>00721     lastdot = strrchr(path, <span class="charliteral">'.'</span>);
-<a name="l00722"></a>00722     <span class="keywordflow">if</span> (lastdot == NULL) <span class="keywordflow">return</span> path ;
-<a name="l00723"></a>00723     <span class="keywordflow">if</span> ((!strcmp(lastdot, <span class="stringliteral">".fits"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".FITS"</span>)) ||
-<a name="l00724"></a>00724         (!strcmp(lastdot, <span class="stringliteral">".paf"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".PAF"</span>)) ||
-<a name="l00725"></a>00725         (!strcmp(lastdot, <span class="stringliteral">".dat"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".DAT"</span>)) ||
-<a name="l00726"></a>00726         (!strcmp(lastdot, <span class="stringliteral">".fits"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".TFITS"</span>)) ||
-<a name="l00727"></a>00727         (!strcmp(lastdot, <span class="stringliteral">".ascii"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".ASCII"</span>)))
-<a name="l00728"></a>00728     {
-<a name="l00729"></a>00729         lastdot[0] = (char)0;
-<a name="l00730"></a>00730     }
-<a name="l00731"></a>00731     <span class="keywordflow">return</span> path ;
-<a name="l00732"></a>00732 }
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00744"></a>00744 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00745"></a>00745 cpl_imagelist * sinfo_new_frameset_to_iset(cpl_frameset * fset)
-<a name="l00746"></a>00746 {
-<a name="l00747"></a>00747     cpl_imagelist   *   iset=NULL ;
-<a name="l00748"></a>00748     <span class="keywordtype">char</span>        **  filenames ;
-<a name="l00749"></a>00749     <span class="keywordtype">int</span>             nfiles=0 ;
-<a name="l00750"></a>00750 
-<a name="l00751"></a>00751     <span class="comment">/* Test entries */</span>
-<a name="l00752"></a>00752     <span class="keywordflow">if</span> (fset == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00753"></a>00753 
-<a name="l00754"></a>00754     <span class="comment">/* Get the filenames */</span>
-<a name="l00755"></a>00755     <span class="keywordflow">if</span> ((filenames = sinfo_new_frameset_to_filenames(fset, &nfiles)) == NULL) {
-<a name="l00756"></a>00756         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot get the files names"</span>) ;
-<a name="l00757"></a>00757         <span class="keywordflow">return</span> NULL ;
-<a name="l00758"></a>00758     }
-<a name="l00759"></a>00759     <span class="comment">/* Load image set */</span>
-<a name="l00760"></a>00760     <span class="keywordflow">if</span> ((iset = sinfo_new_imagelist_load_frameset(fset,
-<a name="l00761"></a>00761                                          CPL_TYPE_FLOAT, 0, 0)) == NULL) {
-<a name="l00762"></a>00762         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load *** the image set"</span>) ;
-<a name="l00763"></a>00763         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00764"></a>00764 
-<a name="l00765"></a>00765         cpl_free(filenames) ;
-<a name="l00766"></a>00766         <span class="keywordflow">return</span> NULL ;
-<a name="l00767"></a>00767     }
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769     <span class="comment">/* Free and Return  */</span>
-<a name="l00770"></a>00770     cpl_free(filenames) ;
-<a name="l00771"></a>00771     <span class="keywordflow">return</span> iset ;
-<a name="l00772"></a>00772 }
-<a name="l00773"></a>00773 <span class="preprocessor">#include "cpl_imagelist_io.h"</span>
-<a name="l00774"></a>00774 
-<a name="l00775"></a>00775 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00786"></a>00786 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00787"></a>00787 cpl_imagelist *
-<a name="l00788"></a>00788 sinfo_new_imagelist_load_frameset(<span class="keyword">const</span> cpl_frameset * frameset,
-<a name="l00789"></a>00789                                   cpl_type type,
-<a name="l00790"></a>00790                                   <span class="keywordtype">int</span> pnum,
-<a name="l00791"></a>00791                                   <span class="keywordtype">int</span> extnum)
-<a name="l00792"></a>00792 {
-<a name="l00793"></a>00793     cpl_image  * image     = NULL;
-<a name="l00794"></a>00794     cpl_imagelist  * imagelist = NULL;
-<a name="l00795"></a>00795     <span class="keyword">const</span> cpl_frame  * frame     = cpl_frameset_get_first_const(frameset);
-<a name="l00796"></a>00796     <span class="keyword">const</span> <span class="keywordtype">int</span> nz = cpl_frameset_get_size(frameset);
-<a name="l00797"></a>00797     <span class="keywordtype">int</span>       i;
-<a name="l00798"></a>00798 
-<a name="l00799"></a>00799     <span class="comment">/* Require imagelist to contain at least one image */</span>
-<a name="l00800"></a>00800     cpl_ensure(nz > 0, CPL_ERROR_DATA_NOT_FOUND, NULL);
-<a name="l00801"></a>00801 
-<a name="l00802"></a>00802     <span class="keywordflow">for</span> (i = 0; frame != NULL;
-<a name="l00803"></a>00803          i++, frame = cpl_frameset_get_next_const(frameset)) {
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805         <span class="keyword">const</span> <span class="keywordtype">char</span> * name = cpl_frame_get_filename(frame);
-<a name="l00806"></a>00806         <span class="keywordflow">if</span> (name == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span>
-<a name="l00807"></a>00807 
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809         image = cpl_image_load(name, type, pnum, extnum);
-<a name="l00810"></a>00810 
-<a name="l00811"></a>00811         <span class="keywordflow">if</span> (image == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span>
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813         <span class="keywordflow">if</span> (i == 0) {
-<a name="l00814"></a>00814             <span class="keyword">const</span> <span class="keywordtype">int</span> nx = cpl_image_get_size_x(image);
-<a name="l00815"></a>00815             <span class="keyword">const</span> <span class="keywordtype">int</span> ny = cpl_image_get_size_y(image);
-<a name="l00816"></a>00816 
-<a name="l00817"></a>00817             <span class="keywordflow">if</span> (nx < 1 || ny < 1) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span>
-<a name="l00818"></a>00818             imagelist = cpl_imagelist_new();
-<a name="l00819"></a>00819         <span class="keywordflow">if</span> (imagelist == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span>
-<a name="l00820"></a>00820         }
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822         <span class="keywordflow">if</span> (cpl_imagelist_set(imagelist, image, i)) <span class="keywordflow">break</span>;
-<a name="l00823"></a>00823         image = NULL; <span class="comment">/* Image is now part of the imagelist */</span>
-<a name="l00824"></a>00824 
-<a name="l00825"></a>00825     }
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827     <span class="keywordflow">if</span> (i != nz) {
-<a name="l00828"></a>00828         <span class="comment">/* Error handling */</span>
-<a name="l00829"></a>00829         cpl_image_delete(image);
-<a name="l00830"></a>00830         cpl_imagelist_delete(imagelist);
-<a name="l00831"></a>00831         imagelist = NULL;
-<a name="l00832"></a>00832     }
-<a name="l00833"></a>00833     <span class="keywordflow">return</span> imagelist;
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835 }
-<a name="l00836"></a>00836 
-<a name="l00847"></a>00847 <span class="keywordtype">char</span> ** sinfo_new_frameset_to_filenames(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *nfiles)
-<a name="l00848"></a>00848 {
-<a name="l00849"></a>00849     <span class="keywordtype">char</span> **filenames=NULL;
-<a name="l00850"></a>00850 
-<a name="l00851"></a>00851     <span class="keywordtype">int</span> nbframes=0;
-<a name="l00852"></a>00852     <span class="keywordtype">int</span> i=0;
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854     cpl_frame *curr_frame;
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     <span class="keywordflow">if</span> (<span class="keyword">set</span> == NULL) {
-<a name="l00857"></a>00857         <span class="keywordflow">return</span> NULL;
-<a name="l00858"></a>00858     }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860     nbframes = cpl_frameset_get_size(<span class="keyword">set</span>);
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862     <span class="keywordflow">if</span> (nbframes < 1) {
-<a name="l00863"></a>00863         <span class="keywordflow">return</span> NULL;
-<a name="l00864"></a>00864     }
-<a name="l00865"></a>00865     <span class="comment">/*</span>
-<a name="l00866"></a>00866 <span class="comment">     * Create the list of filenames and fill it</span>
-<a name="l00867"></a>00867 <span class="comment">     */</span>
-<a name="l00868"></a>00868     filenames = cpl_malloc(nbframes * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *));
-<a name="l00869"></a>00869 
-<a name="l00870"></a>00870     curr_frame = cpl_frameset_get_first(<span class="keyword">set</span>);
-<a name="l00871"></a>00871     <span class="keywordflow">for</span> (i = 0; i < nbframes; i++) {
-<a name="l00872"></a>00872        filenames[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(curr_frame);
-<a name="l00873"></a>00873         curr_frame = cpl_frameset_get_next(<span class="keyword">set</span>);
-<a name="l00874"></a>00874     }
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877     <span class="comment">/*</span>
-<a name="l00878"></a>00878 <span class="comment">     * Set the number of files found</span>
-<a name="l00879"></a>00879 <span class="comment">     */</span>
-<a name="l00880"></a>00880     *nfiles = nbframes;
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882     <span class="keywordflow">return</span> filenames;
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884 }
-<a name="l00885"></a>00885 
-<a name="l00886"></a>00886 
-<a name="l00887"></a>00887 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00903"></a>00903 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00904"></a>00904 <span class="keywordtype">double</span> sinfo_spline_hermite(<span class="keywordtype">double</span> xp,
-<a name="l00905"></a>00905                             <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00906"></a>00906                             <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00907"></a>00907                               <span class="keywordtype">int</span> n,
-<a name="l00908"></a>00908                               <span class="keywordtype">int</span> *istart )
-<a name="l00909"></a>00909 {
-<a name="l00910"></a>00910     <span class="keywordtype">double</span> yp1, yp2, yp = 0;
-<a name="l00911"></a>00911     <span class="keywordtype">double</span> xpi, xpi1, l1, l2, lp1, lp2;
-<a name="l00912"></a>00912     <span class="keywordtype">int</span> i;
-<a name="l00913"></a>00913 
-<a name="l00914"></a>00914     <span class="keywordflow">if</span> ( x[0] <= x[n-1] && (xp < x[0] || xp > x[n-1]) )    <span class="keywordflow">return</span> 0.0;
-<a name="l00915"></a>00915     <span class="keywordflow">if</span> ( x[0] >  x[n-1] && (xp > x[0] || xp < x[n-1]) )    <span class="keywordflow">return</span> 0.0;
-<a name="l00916"></a>00916 
-<a name="l00917"></a>00917     <span class="keywordflow">if</span> ( x[0] <= x[n-1] )
-<a name="l00918"></a>00918     {
-<a name="l00919"></a>00919         <span class="keywordflow">for</span> ( i = (*istart)+1; i <= n && xp >= x[i-1]; i++ )
-<a name="l00920"></a>00920         ;
-<a name="l00921"></a>00921     }
-<a name="l00922"></a>00922     <span class="keywordflow">else</span>
-<a name="l00923"></a>00923     {
-<a name="l00924"></a>00924         <span class="keywordflow">for</span> ( i = (*istart)+1; i <= n && xp <= x[i-1]; i++ )
-<a name="l00925"></a>00925         ;
-<a name="l00926"></a>00926     }
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     *istart = i;
-<a name="l00929"></a>00929     i--;
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931     lp1 = 1.0 / (x[i-1] - x[i]);
-<a name="l00932"></a>00932     lp2 = -lp1;
-<a name="l00933"></a>00933 
-<a name="l00934"></a>00934     <span class="keywordflow">if</span> ( i == 1 )
-<a name="l00935"></a>00935     {
-<a name="l00936"></a>00936         yp1 = (y[1] - y[0]) / (x[1] - x[0]);
-<a name="l00937"></a>00937     }
-<a name="l00938"></a>00938     <span class="keywordflow">else</span>
-<a name="l00939"></a>00939     {
-<a name="l00940"></a>00940         yp1 = (y[i] - y[i-2]) / (x[i] - x[i-2]);
-<a name="l00941"></a>00941     }
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943     <span class="keywordflow">if</span> ( i >= n - 1 )
-<a name="l00944"></a>00944     {
-<a name="l00945"></a>00945         yp2 = (y[n-1] - y[n-2]) / (x[n-1] - x[n-2]);
-<a name="l00946"></a>00946     }
-<a name="l00947"></a>00947     <span class="keywordflow">else</span>
-<a name="l00948"></a>00948     {
-<a name="l00949"></a>00949         yp2 = (y[i+1] - y[i-1]) / (x[i+1] - x[i-1]);
-<a name="l00950"></a>00950     }
-<a name="l00951"></a>00951 
-<a name="l00952"></a>00952     xpi1 = xp - x[i];
-<a name="l00953"></a>00953     xpi  = xp - x[i-1];
-<a name="l00954"></a>00954     l1   = xpi1*lp1;
-<a name="l00955"></a>00955     l2   = xpi*lp2;
-<a name="l00956"></a>00956 
-<a name="l00957"></a>00957     yp = y[i-1]*(1 - 2.0*lp1*xpi)*l1*l1 +
-<a name="l00958"></a>00958          y[i]*(1 - 2.0*lp2*xpi1)*l2*l2 +
-<a name="l00959"></a>00959          yp1*xpi*l1*l1 + yp2*xpi1*l2*l2;
-<a name="l00960"></a>00960 
-<a name="l00961"></a>00961     <span class="keywordflow">return</span> yp;
-<a name="l00962"></a>00962 }
-<a name="l00963"></a>00963 
-<a name="l00969"></a>00969 cpl_error_code update_bad_pixel_map(cpl_image* im)
-<a name="l00970"></a>00970 {
-<a name="l00971"></a>00971     <span class="keywordtype">int</span> szx = cpl_image_get_size_x(im);
-<a name="l00972"></a>00972     <span class="keywordtype">int</span> szy = cpl_image_get_size_y(im);
-<a name="l00973"></a>00973     <span class="keywordtype">int</span> x = 0;
-<a name="l00974"></a>00974     cpl_mask* bpm = cpl_image_get_bpm(im);
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976     <span class="keywordflow">for</span> (x = 1; x <=szx; x++)
-<a name="l00977"></a>00977     {
-<a name="l00978"></a>00978         <span class="keywordtype">int</span> y = 0;
-<a name="l00979"></a>00979         <span class="keywordflow">for</span>(y = 1; y <= szy; y++)
-<a name="l00980"></a>00980         {
-<a name="l00981"></a>00981             <span class="keywordtype">int</span> isnull = 0;
-<a name="l00982"></a>00982             <span class="keywordtype">double</span> value = cpl_image_get(im, x, y, &isnull);
-<a name="l00983"></a>00983             <span class="keywordflow">if</span> (isnan(value))
-<a name="l00984"></a>00984             {
-<a name="l00985"></a>00985                 cpl_mask_set(bpm, x, y, CPL_BINARY_1);
-<a name="l00986"></a>00986             }
-<a name="l00987"></a>00987         }
-<a name="l00988"></a>00988     }
-<a name="l00989"></a>00989     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00990"></a>00990 }
-<a name="l00991"></a>00991 cpl_polynomial * sinfo_polynomial_fit_2d_create(cpl_bivector     *  xy_pos,
-<a name="l00992"></a>00992                                               cpl_vector       *  values,
-<a name="l00993"></a>00993                                               cpl_size                 degree,
-<a name="l00994"></a>00994                                               <span class="keywordtype">double</span>           *  mse)
-<a name="l00995"></a>00995 {
-<a name="l00996"></a>00996     <span class="keyword">typedef</span> <span class="keywordtype">double</span>* (*get_data)(cpl_bivector*);
-<a name="l00997"></a>00997     get_data data_extractor[2] = { &cpl_bivector_get_x_data, &cpl_bivector_get_y_data};
-<a name="l00998"></a>00998     <span class="comment">//samppos matrix must</span>
-<a name="l00999"></a>00999     <span class="comment">// have two rows with copies of the two vectors in the x_pos bivector.</span>
-<a name="l01000"></a>01000 
-<a name="l01001"></a>01001     <span class="keywordtype">double</span> rechisq = 0;
-<a name="l01002"></a>01002     <span class="keywordtype">int</span> i, j;
-<a name="l01003"></a>01003     cpl_vector     * fitresidual = 0;
-<a name="l01004"></a>01004     cpl_matrix     * samppos2d = 0;
-<a name="l01005"></a>01005     cpl_polynomial * fit2d = cpl_polynomial_new(2);
-<a name="l01006"></a>01006     <span class="keywordtype">int</span> xy_size = cpl_bivector_get_size(xy_pos);
-<a name="l01007"></a>01007 
-<a name="l01008"></a>01008     samppos2d = cpl_matrix_new(2, xy_size);
-<a name="l01009"></a>01009     <span class="keywordflow">for</span> (i = 0; i < 2; i++)
-<a name="l01010"></a>01010     {
-<a name="l01011"></a>01011         <span class="keywordflow">for</span> (j = 0; j < xy_size; j++)
-<a name="l01012"></a>01012         {
-<a name="l01013"></a>01013             <span class="keywordtype">double</span> value = data_extractor[i](xy_pos)[j];
-<a name="l01014"></a>01014             cpl_matrix_set(samppos2d, i, j, value);
-<a name="l01015"></a>01015         }
-<a name="l01016"></a>01016     }
-<a name="l01017"></a>01017 
-<a name="l01018"></a>01018    cpl_polynomial_fit(fit2d, samppos2d, NULL, values, NULL, CPL_FALSE,
-<a name="l01019"></a>01019                              NULL, &degree);
-<a name="l01020"></a>01020 
-<a name="l01021"></a>01021     fitresidual = cpl_vector_new(xy_size);
-<a name="l01022"></a>01022     cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL, fit2d,
-<a name="l01023"></a>01023                                             samppos2d, &rechisq);
-<a name="l01024"></a>01024     <span class="keywordflow">if</span> (mse)
-<a name="l01025"></a>01025     {
-<a name="l01026"></a>01026         *mse = cpl_vector_product(fitresidual, fitresidual)
-<a name="l01027"></a>01027             / cpl_vector_get_size(fitresidual);
-<a name="l01028"></a>01028     }
-<a name="l01029"></a>01029     cpl_matrix_delete(samppos2d);
-<a name="l01030"></a>01030     cpl_vector_delete(fitresidual);
-<a name="l01031"></a>01031     <span class="keywordflow">return</span> fit2d;
-<a name="l01032"></a>01032 }
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034 cpl_polynomial * sinfo_polynomial_fit_1d_create(
-<a name="l01035"></a>01035         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l01036"></a>01036         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l01037"></a>01037         <span class="keywordtype">int</span>                     degree,
-<a name="l01038"></a>01038         <span class="keywordtype">double</span>              *   mse
-<a name="l01039"></a>01039         )
-<a name="l01040"></a>01040 {
-<a name="l01041"></a>01041     cpl_polynomial * fit1d = cpl_polynomial_new(1);
-<a name="l01042"></a>01042 <span class="comment">//    cpl_vector* x_copy = cpl_vector_duplicate(x_pos);</span>
-<a name="l01043"></a>01043 <span class="comment">//    cpl_vector* values_copy = cpl_vector_duplicate(values);</span>
-<a name="l01044"></a>01044     <span class="keywordtype">int</span> x_size = cpl_vector_get_size(x_pos);
-<a name="l01045"></a>01045     <span class="keywordtype">double</span> rechisq = 0;
-<a name="l01046"></a>01046     cpl_size loc_deg=(cpl_size)degree;
-<a name="l01047"></a>01047     cpl_matrix     * samppos = cpl_matrix_wrap(1, x_size,
-<a name="l01048"></a>01048                                                (<span class="keywordtype">double</span>*)cpl_vector_get_data_const(x_pos));
-<a name="l01049"></a>01049     cpl_vector     * fitresidual = cpl_vector_new(x_size);
-<a name="l01050"></a>01050 
-<a name="l01051"></a>01051     cpl_polynomial_fit(fit1d, samppos, NULL, values, NULL,
-<a name="l01052"></a>01052                        CPL_FALSE, NULL, &loc_deg);
-<a name="l01053"></a>01053     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01054"></a>01054     cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL, fit1d,
-<a name="l01055"></a>01055                                             samppos, &rechisq);
-<a name="l01056"></a>01056     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);
-<a name="l01057"></a>01057     <span class="keywordflow">if</span> (mse)
-<a name="l01058"></a>01058     {
-<a name="l01059"></a>01059         *mse = cpl_vector_product(fitresidual, fitresidual)
-<a name="l01060"></a>01060             / cpl_vector_get_size(fitresidual);
-<a name="l01061"></a>01061     }
-<a name="l01062"></a>01062     cpl_matrix_unwrap(samppos);
-<a name="l01063"></a>01063     cpl_vector_delete(fitresidual);
-<a name="l01064"></a>01064     <span class="keywordflow">return</span> fit1d;
-<a name="l01065"></a>01065 }
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067 <span class="comment">//cpl_image * sinfo_image_filter_</span>
-<a name="l01068"></a>01068 <span class="keyword">static</span> cpl_image * sinfo_image_filter_wrapper(<span class="keyword">const</span> cpl_image *b, <span class="keyword">const</span> cpl_matrix *k, cpl_filter_mode mode)
-<a name="l01069"></a>01069 {
-<a name="l01070"></a>01070     <span class="keyword">const</span> <span class="keywordtype">double</span> EPSILON = 1E-5;
-<a name="l01071"></a>01071     <span class="keywordtype">int</span> nx   = cpl_image_get_size_x(b);
-<a name="l01072"></a>01072     <span class="keywordtype">int</span> ny   = cpl_image_get_size_y(b);
-<a name="l01073"></a>01073     <span class="keywordtype">int</span> nrow = cpl_matrix_get_nrow(k);
-<a name="l01074"></a>01074     <span class="keywordtype">int</span> ncol = cpl_matrix_get_ncol(k);
-<a name="l01075"></a>01075     <span class="keywordtype">int</span> i, j;
-<a name="l01076"></a>01076     cpl_type type = cpl_image_get_type(b);
-<a name="l01077"></a>01077     cpl_image * a = cpl_image_new(nx, ny, type);
-<a name="l01078"></a>01078     <span class="comment">// where m is a cpl_mask with a CPL_BINARY_1 whereever k has a 1.0.</span>
-<a name="l01079"></a>01079     cpl_mask* m = cpl_mask_new(ncol, nrow);
-<a name="l01080"></a>01080     cpl_msg_warning(cpl_func, <span class="stringliteral">"nx[%d], ny[%d], ncol[%d], nrow[%d]"</span>, nx, ny, ncol, nrow);
-<a name="l01081"></a>01081     <span class="keywordflow">for</span> (i = 0; i < ncol ; i++)
-<a name="l01082"></a>01082     {
-<a name="l01083"></a>01083         <span class="keywordflow">for</span> (j = 0; j < nrow ; j++)
-<a name="l01084"></a>01084         {
-<a name="l01085"></a>01085             <span class="keywordtype">double</span> value = cpl_matrix_get(k, j, i);
-<a name="l01086"></a>01086             <span class="keywordflow">if</span> (fabs(value - 1.0) < EPSILON)
-<a name="l01087"></a>01087             {
-<a name="l01088"></a>01088                 cpl_mask_set(m, i + 1, j + 1, CPL_BINARY_1);
-<a name="l01089"></a>01089             }
-<a name="l01090"></a>01090         }
-<a name="l01091"></a>01091     }
-<a name="l01092"></a>01092 
-<a name="l01093"></a>01093     cpl_image_filter_mask(a, b, m, mode, CPL_BORDER_FILTER);
-<a name="l01094"></a>01094     cpl_mask_delete(m);
-<a name="l01095"></a>01095     <span class="keywordflow">return</span> a;
-<a name="l01096"></a>01096  }
-<a name="l01097"></a>01097 
-<a name="l01098"></a>01098 
-<a name="l01099"></a>01099 <span class="keyword">static</span> cpl_image*
-<a name="l01100"></a>01100 sinfo_image_filter_mode(<span class="keyword">const</span> cpl_image* b,
-<a name="l01101"></a>01101                       <span class="keyword">const</span> cpl_matrix * ker,
-<a name="l01102"></a>01102                       cpl_filter_mode filter)
-<a name="l01103"></a>01103 {
-<a name="l01104"></a>01104   <span class="keywordtype">int</span> nx   = cpl_image_get_size_x(b);
-<a name="l01105"></a>01105   <span class="keywordtype">int</span> ny   = cpl_image_get_size_y(b);
-<a name="l01106"></a>01106   <span class="keywordtype">int</span> type = cpl_image_get_type(b);
-<a name="l01107"></a>01107   cpl_image * a = cpl_image_new(nx, ny, type);
-<a name="l01108"></a>01108 
-<a name="l01109"></a>01109   <span class="keywordflow">switch</span>(filter) {
-<a name="l01110"></a>01110   <span class="keywordflow">case</span> CPL_FILTER_MEDIAN:
-<a name="l01111"></a>01111     check_nomsg(cpl_image_filter(a, b, ker, CPL_FILTER_MEDIAN, CPL_BORDER_FILTER));
-<a name="l01112"></a>01112     <span class="keywordflow">break</span>;
-<a name="l01113"></a>01113   <span class="keywordflow">case</span> CPL_FILTER_LINEAR:
-<a name="l01114"></a>01114     check_nomsg(cpl_image_filter(a, b, ker, CPL_FILTER_LINEAR, CPL_BORDER_FILTER));
-<a name="l01115"></a>01115     <span class="keywordflow">break</span>;
-<a name="l01116"></a>01116   <span class="keywordflow">case</span> CPL_FILTER_STDEV:
-<a name="l01117"></a>01117     cpl_image_filter(a, b, ker, CPL_FILTER_STDEV, CPL_BORDER_FILTER);
-<a name="l01118"></a>01118     <span class="keywordflow">break</span>;
-<a name="l01119"></a>01119   <span class="keywordflow">case</span> CPL_FILTER_MORPHO:
-<a name="l01120"></a>01120     cpl_image_filter(a, b, ker, CPL_FILTER_MORPHO, CPL_BORDER_FILTER);
-<a name="l01121"></a>01121     <span class="keywordflow">break</span>;
-<a name="l01122"></a>01122   <span class="keywordflow">default</span>:
-<a name="l01123"></a>01123     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filter type not supported"</span>);
-<a name="l01124"></a>01124     <span class="keywordflow">return</span> NULL;
-<a name="l01125"></a>01125   }
-<a name="l01126"></a>01126  cleanup:
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128   <span class="keywordflow">return</span> a;
-<a name="l01129"></a>01129 
-<a name="l01130"></a>01130 }
-<a name="l01131"></a>01131 
-<a name="l01132"></a>01132 cpl_image * 
-<a name="l01133"></a>01133 sinfo_image_filter_linear(<span class="keyword">const</span> cpl_image *img, <span class="keyword">const</span> cpl_matrix * mx)
-<a name="l01134"></a>01134 {
-<a name="l01135"></a>01135     <span class="keywordflow">return</span> sinfo_image_filter_mode(img, mx, CPL_FILTER_LINEAR);
-<a name="l01136"></a>01136 
-<a name="l01137"></a>01137 }
-<a name="l01138"></a>01138 
-<a name="l01139"></a>01139 cpl_image * sinfo_image_filter_linear2(<span class="keyword">const</span> cpl_image *img, <span class="keyword">const</span> cpl_matrix * mx)
-<a name="l01140"></a>01140 {
-<a name="l01141"></a>01141     <span class="keywordflow">return</span> sinfo_image_filter_wrapper(img, mx, CPL_FILTER_LINEAR);
-<a name="l01142"></a>01142 
-<a name="l01143"></a>01143 }
-<a name="l01144"></a>01144 
-<a name="l01145"></a>01145 
-<a name="l01146"></a>01146 cpl_image * sinfo_image_filter_median(<span class="keyword">const</span> cpl_image * img, <span class="keyword">const</span> cpl_matrix * mx)
-<a name="l01147"></a>01147 {
-<a name="l01148"></a>01148     <span class="keywordflow">return</span> sinfo_image_filter_wrapper(img, mx, CPL_FILTER_MEDIAN);
-<a name="l01149"></a>01149 }
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utilities.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> cpl_image*</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> sinfo_vector_to_image(<span class="keyword">const</span> cpl_vector* vector,cpl_type type)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   cpl_image* image=NULL;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   <span class="keywordtype">int</span> size=0;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pv=NULL;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>   <span class="keywordtype">int</span>* pi=NULL;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   <span class="keywordtype">float</span>* pf=NULL;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   <span class="keywordtype">double</span>* pd=NULL;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>       size=cpl_vector_get_size(vector);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>       image=cpl_image_new(size,1,type);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>       pv=cpl_vector_get_data_const(vector);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>       <span class="keywordflow">if</span>(type == CPL_TYPE_INT) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         pi=cpl_image_get_data_int(image);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>       pi[i]=pv[i];</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>     }</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_FLOAT) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         pf=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>       pf[i]=pv[i];</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>     }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_DOUBLE) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         pd=cpl_image_get_data_double(image);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         <span class="keywordflow">for</span>(i=0;i<size;i++) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>       pd[i]=pv[i];</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         assure( 0, CPL_ERROR_INVALID_TYPE,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>             <span class="stringliteral">"No CPL type to represent BITPIX = %d"</span>, type);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>       }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>  cleanup:</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE){</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>       sinfo_free_image(&image);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordflow">return</span> image;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> }</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> cpl_error_code</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> sinfo_ima_line_cor(cpl_parameterlist * parlist, cpl_frameset* in)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>   <span class="keywordtype">int</span> kappa=18;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   <span class="keywordtype">int</span> filt_rad=3;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   <span class="keywordtype">int</span> width=4;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* bname=NULL;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_image * ima=NULL ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_image * ima_out=NULL ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="keywordtype">char</span>* tag=NULL;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordtype">char</span> name_deb[80];</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>   check_nomsg(p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.general.lc_kappa"</span>));</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   check_nomsg(kappa=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                        <span class="stringliteral">"sinfoni.general.lc_filt_rad"</span>));</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>   check_nomsg(filt_rad = cpl_parameter_get_int(p)) ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   n=cpl_frameset_get_size(in);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   <span class="keywordflow">for</span>(i=0;i<n;i++) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     check_nomsg(frm=cpl_frameset_get_frame(in,i));</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     tag= (<span class="keywordtype">char</span>*) cpl_frame_get_tag(frm);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">if</span>(sinfo_frame_is_raw(tag) == 1) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>       check_nomsg(name=cpl_frame_get_filename(frm));</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>       bname=sinfo_new_get_basename(name);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>       check_nomsg(ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>       check_nomsg(sinfo_image_line_corr(width,filt_rad,kappa,ima,&ima_out));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       check_nomsg(plist=cpl_propertylist_load(name,0));</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <span class="comment">//sprintf(name_deb,"dark_org_%d.fits",i);</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>       sprintf(name_deb,<span class="stringliteral">"org_%2.2d_%s"</span>,i,bname);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>       check(cpl_image_save(ima,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                name_deb,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                plist,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>       check(cpl_image_save(ima_out,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                bname,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                plist,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>         <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>       cpl_frame_set_filename(frm,bname);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>       sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     }</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>  cleanup:</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>   <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> sinfo_table_column_dump(cpl_table* t, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, cpl_type type)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>   <span class="keywordtype">int</span>* pi=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   <span class="keywordtype">float</span>* pf=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   <span class="keywordtype">double</span>* pd=NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>   <span class="keywordtype">char</span>** ps=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   <span class="keywordflow">switch</span>(type) {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     pi=cpl_table_get_data_int(t,name);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>       sinfo_msg(<span class="stringliteral">"val=%d"</span>,pi[i]);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   <span class="keywordflow">case</span> CPL_TYPE_FLOAT:</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     pf=cpl_table_get_data_float(t,name);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>       sinfo_msg(<span class="stringliteral">"val=%g"</span>,pf[i]);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     pd=cpl_table_get_data_double(t,name);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>       sinfo_msg(<span class="stringliteral">"val=%g"</span>,pd[i]);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="keywordflow">case</span> CPL_TYPE_STRING:</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     ps=cpl_table_get_data_string(t,name);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       sinfo_msg(<span class="stringliteral">"val=%s"</span>,ps[i]);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Wrong column type"</span>);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_error_set(cpl_func, CPL_ERROR_TYPE_MISMATCH);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> cpl_table*</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> sinfo_table_shift_column_spline3(cpl_table* t,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                                  <span class="keyword">const</span> <span class="keywordtype">double</span> shift)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">float</span> new_sum=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordtype">float</span>* eval=NULL;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordtype">float</span>* xnum=NULL;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">float</span>* spec=NULL;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordtype">float</span>* corrected_spec=NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>   check_nomsg(cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   check_nomsg(cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>   xnum=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   <span class="comment">/* fill the xa[] array for the spline function */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="keywordflow">for</span> ( i = 0 ; i < nrow ; i++ ) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   eval=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   sum = 0. ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     spec[z] = pi[z] ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     <span class="keywordflow">if</span> ( i >= nrow) continue ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>       }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       spec[z] = 0. ;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     sum += spec[z] ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     eval[z] = (float)shift+(<span class="keywordtype">float</span>)z ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   <span class="comment">/* now we do the spline interpolation*/</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,spec, nrow,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>                                              eval,corrected_spec, nrow))</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>   new_sum = 0. ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       continue ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>   }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="comment">/* fill output imagelist */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     po[z] = ZERO ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     po[z] = corrected_spec[z] ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>       }</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     }</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   }</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   sinfo_free_float(&xnum);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   sinfo_free_float(&eval) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   check_nomsg(cpl_table_erase_column(out,col));</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>  cleanup:</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   sinfo_free_float(&xnum);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   sinfo_free_float(&eval) ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> cpl_table*</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                                    <span class="keywordtype">double</span>* r)</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   <span class="keywordtype">int</span> is=(int)s;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   <span class="keyword">const</span> <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   *r=s-is;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   pi=cpl_table_get_data_double_const(t,col);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   po=cpl_table_get_data_double(out,col);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       po[i-is]=pi[i];</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   }</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>  cleanup:</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> cpl_table*</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> sinfo_table_shift_column_poly(cpl_table* t,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> shift,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                               <span class="keyword">const</span> <span class="keywordtype">int</span> order)</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   <span class="keywordtype">int</span> flag=0;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordtype">int</span> n_points=0;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keywordtype">int</span> firstpos=0;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordtype">float</span> eval=0;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="keywordtype">float</span> new_sum=0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   <span class="keywordtype">float</span>* tableptr=NULL;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   <span class="keywordflow">if</span> ( order <= 0 ) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   n_points = order + 1 ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="comment">/* fill the xa[] array for the polint function */</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     corrected_spec[i] = 0. ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   sum = 0. ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     spec[z] = pi[z] ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>       spec[z] = 0. ;</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <span class="keywordflow">if</span> ( i >= nrow) continue  ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>       }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       sum += spec[z] ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     }</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   new_sum = 0. ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">     * now determine the arrays of size n_points with which the</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span> <span class="comment">     * polynom is determined and determine the position eval</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> <span class="comment">     * where the polynom is evaluated in polynomial interpolation.</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> <span class="comment">     * Take care of the points near the row edges!</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     <span class="keywordflow">if</span> ( z - firstpos < 0 ) {</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>       tableptr = &spec[0] ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       eval     = shift + z ;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= nrow ) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>       tableptr = &spec[nrow - n_points] ;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       eval     = shift + z + n_points - nrow ;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       tableptr = &spec[z-firstpos] ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       eval     = shift + firstpos ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     flag=0;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>     corrected_spec[z]=sinfo_new_nev_ille(xnum,tableptr,order,eval,&flag);</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>       new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   }</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <span class="comment">/* fill the output spectrum */</span></div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>   <span class="keywordflow">for</span> (z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <span class="keywordflow">if</span> ( new_sum == 0. ) {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>       new_sum = 1. ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     }</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     <span class="keywordflow">if</span> ( z == 0 ) {</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == nrow - 1 ) {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>       po[z] = corrected_spec[z] ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   check_nomsg(cpl_table_erase_column(out,col));</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> </div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   sinfo_free_float(&xnum) ;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>  cleanup:</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   sinfo_free_float(&xnum) ;</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> </div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordtype">void</span> sinfo_new_array_set_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         array[i] = value ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keywordtype">float</span> sinfo_new_array_get_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     {</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>         <span class="keywordflow">return</span> array[i] ;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     }</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="keywordtype">void</span> sinfo_new_destroy_array(<span class="keywordtype">float</span> ** array)</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     {</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       <span class="keywordflow">if</span>(*array != NULL) {</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         cpl_free( *array ) ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>         *array = NULL;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>       }</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     }</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>     <span class="keywordtype">void</span> sinfo_new_destroy_stringarray(<span class="keywordtype">char</span> ** array, <span class="keywordtype">int</span> size_x)</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>         {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>             cpl_free( array[i] ) ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         }</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>         cpl_free( array ) ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="keywordtype">void</span> sinfo_new_destroy_2Dintarray(<span class="keywordtype">int</span> *** array, <span class="keywordtype">int</span> size_x)</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     {</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>         <span class="keywordflow">if</span>((*array) != NULL) {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         <span class="keywordflow">if</span>((*array)[i] != NULL) {</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>           cpl_free( (*array)[i] );</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>           (*array)[i]=NULL;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         }</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>       }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>       cpl_free( *array ) ;</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>       *array=NULL;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     }</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>     }</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="keywordtype">void</span> sinfo_new_intarray_set_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     {</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>         array[i] = value ;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     }</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordtype">float</span> sinfo_new_array2D_get_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y )</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         <span class="keywordflow">return</span> array[x][y] ;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     <span class="keywordtype">int</span> ** sinfo_new_2Dintarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     {</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>         <span class="keywordtype">int</span> ** retVal ;</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>         retVal = (<span class="keywordtype">int</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>*) ) ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>             retVal[i] = (<span class="keywordtype">int</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         }</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         <span class="keywordflow">return</span> retVal ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="keywordtype">float</span> * sinfo_new_floatarray( <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>         <span class="keywordflow">return</span> (<span class="keywordtype">float</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     }</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> </div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="keywordtype">void</span> sinfo_new_destroy_2Dfloatarray(<span class="keywordtype">float</span> *** array, <span class="keywordtype">int</span> size_x)</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>         <span class="keywordflow">if</span>((*array) != NULL) {</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="keywordflow">if</span>((*array)[i] != NULL) {</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>           cpl_free( (*array)[i] );</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>           (*array)[i]=NULL;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>         }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>       }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>       cpl_free( *array ) ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>       *array=NULL;</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>     }</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>     <span class="keywordtype">void</span> sinfo_new_destroy_2Ddoublearray(<span class="keywordtype">double</span> *** array, <span class="keywordtype">int</span> size_x)</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     {</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>         <span class="keywordflow">if</span>((*array) != NULL) {</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>       <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ ) {</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>         <span class="keywordflow">if</span>((*array)[i] != NULL) {</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>           cpl_free( (*array)[i] );</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>           (*array)[i]=NULL;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>         }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>       }</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>       cpl_free( *array ) ;</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>       *array=NULL;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     }</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>     }</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>     <span class="keywordtype">void</span> sinfo_new_array2D_set_value(<span class="keywordtype">float</span> ** array,<span class="keywordtype">float</span> value,<span class="keywordtype">int</span> x,<span class="keywordtype">int</span> y)</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>     {</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>         array[x][y] = value ;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordtype">double</span> sinfo_new_doublearray_get_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     {</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         <span class="keywordflow">return</span> array[i] ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="keywordtype">void</span> sinfo_new_doublearray_set_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">double</span> value, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     {</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>         array[i] = value ;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     }</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span> </div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>    <span class="keywordtype">void</span> sinfo_new_destroy_doublearray(<span class="keywordtype">double</span> * array)</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     {</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>         cpl_free( array ) ;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     }</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     <span class="keywordtype">double</span> * sinfo_new_doublearray( <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     {</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>         <span class="keywordflow">return</span> (<span class="keywordtype">double</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>) ) ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     }</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     <span class="keywordtype">double</span> ** sinfo_new_2Ddoublearray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     {</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         <span class="keywordtype">double</span> ** retVal ;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>         retVal = (<span class="keywordtype">double</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>*) ) ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>         {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>             retVal[i] = (<span class="keywordtype">double</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         }</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">return</span> retVal ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span> </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     <span class="keywordtype">float</span> ** sinfo_new_2Dfloatarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y)</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     {</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         <span class="keywordtype">float</span> ** retVal ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>         retVal = (<span class="keywordtype">float</span> **) cpl_calloc( size_x, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>*) ) ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         <span class="keywordflow">for</span> ( i = 0 ; i < size_x ; i++ )</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>         {</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>             retVal[i] = (<span class="keywordtype">float</span> *) cpl_calloc( size_y, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>         }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>         <span class="keywordflow">return</span> retVal ;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>     }</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span> </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>     <span class="keywordtype">int</span> * sinfo_new_intarray( <span class="keywordtype">int</span> size)</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>     {</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>         <span class="keywordflow">return</span> (<span class="keywordtype">int</span> *) cpl_calloc( size, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>     }</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="keywordtype">void</span> sinfo_new_destroy_intarray(<span class="keywordtype">int</span> ** array)</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>     {</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>         cpl_free( *array ) ;</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>         *array=NULL;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>     }</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     <span class="keywordtype">int</span> sinfo_new_intarray_get_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> i )</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>         <span class="keywordflow">return</span> array[i] ;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     }</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span> </div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanstdev(Stats * stats)</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     {</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>         <span class="keywordflow">return</span> stats -> cleanstdev ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>     }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>     <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanmean(Stats * stats)</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     {</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>         <span class="keywordflow">return</span> stats -> cleanmean ;</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> </div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> <span class="keywordtype">char</span> * sinfo_new_get_basename(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> {</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   <span class="keywordtype">char</span> *p ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   p = strrchr (filename, <span class="charliteral">'/'</span>);</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordflow">return</span> p ? p + 1 : (<span class="keywordtype">char</span> *) filename;</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> }</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> </div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> <span class="keywordtype">char</span> * sinfo_new_get_rootname(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename)</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span> {</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     <span class="keyword">static</span> <span class="keywordtype">char</span> path[MAX_NAME_SIZE+1];</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     <span class="keywordtype">char</span> * lastdot ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> </div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>     <span class="keywordflow">if</span> (strlen(filename)>MAX_NAME_SIZE) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>     memset(path, MAX_NAME_SIZE, 0);</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>     strcpy(path, filename);</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     lastdot = strrchr(path, <span class="charliteral">'.'</span>);</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>     <span class="keywordflow">if</span> (lastdot == NULL) <span class="keywordflow">return</span> path ;</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>     <span class="keywordflow">if</span> ((!strcmp(lastdot, <span class="stringliteral">".fits"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".FITS"</span>)) ||</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>         (!strcmp(lastdot, <span class="stringliteral">".paf"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".PAF"</span>)) ||</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>         (!strcmp(lastdot, <span class="stringliteral">".dat"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".DAT"</span>)) ||</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>         (!strcmp(lastdot, <span class="stringliteral">".fits"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".TFITS"</span>)) ||</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>         (!strcmp(lastdot, <span class="stringliteral">".ascii"</span>)) || (!strcmp(lastdot, <span class="stringliteral">".ASCII"</span>)))</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>     {</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         lastdot[0] = (char)0;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     }</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     <span class="keywordflow">return</span> path ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> cpl_imagelist * sinfo_new_frameset_to_iset(cpl_frameset * fset)</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> {</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     cpl_imagelist   *   iset=NULL ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="keywordtype">char</span>        **  filenames ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordtype">int</span>             nfiles=0 ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span> </div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="comment">/* Test entries */</span></div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordflow">if</span> (fset == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span> </div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     <span class="comment">/* Get the filenames */</span></div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keywordflow">if</span> ((filenames = sinfo_new_frameset_to_filenames(fset, &nfiles)) == NULL) {</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot get the files names"</span>) ;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>     }</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>     <span class="comment">/* Load image set */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     <span class="keywordflow">if</span> ((iset = sinfo_new_imagelist_load_frameset(fset,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                                          CPL_TYPE_FLOAT, 0, 0)) == NULL) {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot load *** the image set"</span>) ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span> </div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         cpl_free(filenames) ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     }</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <span class="comment">/* Free and Return  */</span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     cpl_free(filenames) ;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     <span class="keywordflow">return</span> iset ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span> }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span> <span class="preprocessor">#include "cpl_imagelist_io.h"</span></div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span> </div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> cpl_imagelist *</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span> sinfo_new_imagelist_load_frameset(<span class="keyword">const</span> cpl_frameset * frameset,</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>                                   cpl_type type,</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>                                   <span class="keywordtype">int</span> pnum,</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                                   <span class="keywordtype">int</span> extnum)</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     cpl_image  * image     = NULL;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>     cpl_imagelist  * imagelist = NULL;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keyword">const</span> cpl_frame  * frame     = cpl_frameset_get_first_const(frameset);</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> nz = cpl_frameset_get_size(frameset);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>     <span class="keywordtype">int</span>       i;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> </div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     <span class="comment">/* Require imagelist to contain at least one image */</span></div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     cpl_ensure(nz > 0, CPL_ERROR_DATA_NOT_FOUND, NULL);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordflow">for</span> (i = 0; frame != NULL;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>          i++, frame = cpl_frameset_get_next_const(frameset)) {</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>         <span class="keyword">const</span> <span class="keywordtype">char</span> * name = cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>         <span class="keywordflow">if</span> (name == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span> </div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         image = cpl_image_load(name, type, pnum, extnum);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         <span class="keywordflow">if</span> (image == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span></div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         <span class="keywordflow">if</span> (i == 0) {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> nx = cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>             <span class="keyword">const</span> <span class="keywordtype">int</span> ny = cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>             <span class="keywordflow">if</span> (nx < 1 || ny < 1) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span></div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>             imagelist = cpl_imagelist_new();</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>         <span class="keywordflow">if</span> (imagelist == NULL) <span class="keywordflow">break</span>; <span class="comment">/* Error check */</span></div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         }</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>         <span class="keywordflow">if</span> (cpl_imagelist_set(imagelist, image, i)) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>         image = NULL; <span class="comment">/* Image is now part of the imagelist */</span></div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span> </div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     }</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     <span class="keywordflow">if</span> (i != nz) {</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>         <span class="comment">/* Error handling */</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>         cpl_image_delete(image);</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>         cpl_imagelist_delete(imagelist);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         imagelist = NULL;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     }</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     <span class="keywordflow">return</span> imagelist;</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span> }</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> </div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span> <span class="keywordtype">char</span> ** sinfo_new_frameset_to_filenames(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *nfiles)</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> {</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     <span class="keywordtype">char</span> **filenames=NULL;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span> </div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     <span class="keywordtype">int</span> nbframes=0;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     cpl_frame *curr_frame;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="keywordflow">if</span> (<span class="keyword">set</span> == NULL) {</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     nbframes = cpl_frameset_get_size(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     <span class="keywordflow">if</span> (nbframes < 1) {</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> <span class="comment">     * Create the list of filenames and fill it</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     filenames = cpl_malloc(nbframes * <span class="keyword">sizeof</span>(<span class="keywordtype">char</span> *));</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span> </div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     curr_frame = cpl_frameset_get_first(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     <span class="keywordflow">for</span> (i = 0; i < nbframes; i++) {</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>        filenames[i]=(<span class="keywordtype">char</span>*) cpl_frame_get_filename(curr_frame);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         curr_frame = cpl_frameset_get_next(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     }</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> <span class="comment">     * Set the number of files found</span></div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     *nfiles = nbframes;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     <span class="keywordflow">return</span> filenames;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span> }</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> </div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> </div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="keywordtype">double</span> sinfo_spline_hermite(<span class="keywordtype">double</span> xp,</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>                             <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>                             <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                               <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>                               <span class="keywordtype">int</span> *istart )</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> {</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordtype">double</span> yp1, yp2, yp = 0;</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>     <span class="keywordtype">double</span> xpi, xpi1, l1, l2, lp1, lp2;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>     <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     <span class="keywordflow">if</span> ( x[0] <= x[n-1] && (xp < x[0] || xp > x[n-1]) )    <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>     <span class="keywordflow">if</span> ( x[0] >  x[n-1] && (xp > x[0] || xp < x[n-1]) )    <span class="keywordflow">return</span> 0.0;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>     <span class="keywordflow">if</span> ( x[0] <= x[n-1] )</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>     {</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>         <span class="keywordflow">for</span> ( i = (*istart)+1; i <= n && xp >= x[i-1]; i++ )</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         ;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     }</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     {</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>         <span class="keywordflow">for</span> ( i = (*istart)+1; i <= n && xp <= x[i-1]; i++ )</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>         ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     }</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     *istart = i;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     i--;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     lp1 = 1.0 / (x[i-1] - x[i]);</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>     lp2 = -lp1;</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span> </div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     <span class="keywordflow">if</span> ( i == 1 )</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     {</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>         yp1 = (y[1] - y[0]) / (x[1] - x[0]);</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     }</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     {</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>         yp1 = (y[i] - y[i-2]) / (x[i] - x[i-2]);</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>     <span class="keywordflow">if</span> ( i >= n - 1 )</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>     {</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>         yp2 = (y[n-1] - y[n-2]) / (x[n-1] - x[n-2]);</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     {</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         yp2 = (y[i+1] - y[i-1]) / (x[i+1] - x[i-1]);</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     }</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span> </div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     xpi1 = xp - x[i];</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>     xpi  = xp - x[i-1];</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>     l1   = xpi1*lp1;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     l2   = xpi*lp2;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span> </div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     yp = y[i-1]*(1 - 2.0*lp1*xpi)*l1*l1 +</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>          y[i]*(1 - 2.0*lp2*xpi1)*l2*l2 +</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>          yp1*xpi*l1*l1 + yp2*xpi1*l2*l2;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordflow">return</span> yp;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> }</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span> cpl_error_code update_bad_pixel_map(cpl_image* im)</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> {</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     <span class="keywordtype">int</span> szx = cpl_image_get_size_x(im);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     <span class="keywordtype">int</span> szy = cpl_image_get_size_y(im);</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     <span class="keywordtype">int</span> x = 0;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     cpl_mask* bpm = cpl_image_get_bpm(im);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     <span class="keywordflow">for</span> (x = 1; x <=szx; x++)</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     {</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         <span class="keywordtype">int</span> y = 0;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         <span class="keywordflow">for</span>(y = 1; y <= szy; y++)</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>         {</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>             <span class="keywordtype">int</span> isnull = 0;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>             <span class="keywordtype">double</span> value = cpl_image_get(im, x, y, &isnull);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>             <span class="keywordflow">if</span> (isnan(value))</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>             {</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>                 cpl_mask_set(bpm, x, y, CPL_BINARY_1);</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>             }</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>         }</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     }</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span> }</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span> cpl_polynomial * sinfo_polynomial_fit_2d_create(cpl_bivector     *  xy_pos,</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>                                               cpl_vector       *  values,</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>                                               cpl_size                 degree,</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>                                               <span class="keywordtype">double</span>           *  mse)</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> {</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     <span class="keyword">typedef</span> <span class="keywordtype">double</span>* (*get_data)(cpl_bivector*);</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>     get_data data_extractor[2] = { &cpl_bivector_get_x_data, &cpl_bivector_get_y_data};</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     <span class="comment">//samppos matrix must</span></div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     <span class="comment">// have two rows with copies of the two vectors in the x_pos bivector.</span></div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     <span class="keywordtype">double</span> rechisq = 0;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>     <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     cpl_vector     * fitresidual = 0;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     cpl_matrix     * samppos2d = 0;</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     cpl_polynomial * fit2d = cpl_polynomial_new(2);</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>     <span class="keywordtype">int</span> xy_size = cpl_bivector_get_size(xy_pos);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>     samppos2d = cpl_matrix_new(2, xy_size);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     <span class="keywordflow">for</span> (i = 0; i < 2; i++)</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     {</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>         <span class="keywordflow">for</span> (j = 0; j < xy_size; j++)</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>             <span class="keywordtype">double</span> value = data_extractor[i](xy_pos)[j];</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>             cpl_matrix_set(samppos2d, i, j, value);</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     }</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>    cpl_polynomial_fit(fit2d, samppos2d, NULL, values, NULL, CPL_FALSE,</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>                              NULL, &degree);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>     fitresidual = cpl_vector_new(xy_size);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL, fit2d,</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>                                             samppos2d, &rechisq);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     <span class="keywordflow">if</span> (mse)</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     {</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>         *mse = cpl_vector_product(fitresidual, fitresidual)</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>             / cpl_vector_get_size(fitresidual);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>     }</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     cpl_matrix_delete(samppos2d);</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     cpl_vector_delete(fitresidual);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     <span class="keywordflow">return</span> fit2d;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> }</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> cpl_polynomial * sinfo_polynomial_fit_1d_create(</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         <span class="keywordtype">double</span>              *   mse</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         )</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> {</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     cpl_polynomial * fit1d = cpl_polynomial_new(1);</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> <span class="comment">//    cpl_vector* x_copy = cpl_vector_duplicate(x_pos);</span></div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> <span class="comment">//    cpl_vector* values_copy = cpl_vector_duplicate(values);</span></div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>     <span class="keywordtype">int</span> x_size = cpl_vector_get_size(x_pos);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     <span class="keywordtype">double</span> rechisq = 0;</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     cpl_size loc_deg=(cpl_size)degree;</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     cpl_matrix     * samppos = cpl_matrix_wrap(1, x_size,</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>                                                (<span class="keywordtype">double</span>*)cpl_vector_get_data_const(x_pos));</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>     cpl_vector     * fitresidual = cpl_vector_new(x_size);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     cpl_polynomial_fit(fit1d, samppos, NULL, values, NULL,</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                        CPL_FALSE, NULL, &loc_deg);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     cpl_vector_fill_polynomial_fit_residual(fitresidual, values, NULL, fit1d,</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>                                             samppos, &rechisq);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     cpl_ensure(!cpl_error_get_code(), cpl_error_get_code(), NULL);</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     <span class="keywordflow">if</span> (mse)</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     {</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>         *mse = cpl_vector_product(fitresidual, fitresidual)</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>             / cpl_vector_get_size(fitresidual);</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     }</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     cpl_matrix_unwrap(samppos);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>     cpl_vector_delete(fitresidual);</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     <span class="keywordflow">return</span> fit1d;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> }</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">//cpl_image * sinfo_image_filter_</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keyword">static</span> cpl_image * sinfo_image_filter_wrapper(<span class="keyword">const</span> cpl_image *b, <span class="keyword">const</span> cpl_matrix *k, cpl_filter_mode mode)</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> EPSILON = 1E-5;</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     <span class="keywordtype">int</span> nx   = cpl_image_get_size_x(b);</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     <span class="keywordtype">int</span> ny   = cpl_image_get_size_y(b);</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     <span class="keywordtype">int</span> nrow = cpl_matrix_get_nrow(k);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>     <span class="keywordtype">int</span> ncol = cpl_matrix_get_ncol(k);</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     <span class="keywordtype">int</span> i, j;</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>     cpl_type type = cpl_image_get_type(b);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>     cpl_image * a = cpl_image_new(nx, ny, type);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     <span class="comment">// where m is a cpl_mask with a CPL_BINARY_1 whereever k has a 1.0.</span></div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     cpl_mask* m = cpl_mask_new(ncol, nrow);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     cpl_msg_warning(cpl_func, <span class="stringliteral">"nx[%d], ny[%d], ncol[%d], nrow[%d]"</span>, nx, ny, ncol, nrow);</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordflow">for</span> (i = 0; i < ncol ; i++)</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>     {</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>         <span class="keywordflow">for</span> (j = 0; j < nrow ; j++)</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         {</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>             <span class="keywordtype">double</span> value = cpl_matrix_get(k, j, i);</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>             <span class="keywordflow">if</span> (fabs(value - 1.0) < EPSILON)</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>             {</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>                 cpl_mask_set(m, i + 1, j + 1, CPL_BINARY_1);</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>             }</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>         }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     }</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     cpl_image_filter_mask(a, b, m, mode, CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     cpl_mask_delete(m);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="keywordflow">return</span> a;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  }</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> </div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="keyword">static</span> cpl_image*</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> sinfo_image_filter_mode(<span class="keyword">const</span> cpl_image* b,</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>                       <span class="keyword">const</span> cpl_matrix * ker,</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>                       cpl_filter_mode filter)</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>   <span class="keywordtype">int</span> nx   = cpl_image_get_size_x(b);</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>   <span class="keywordtype">int</span> ny   = cpl_image_get_size_y(b);</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>   <span class="keywordtype">int</span> type = cpl_image_get_type(b);</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>   cpl_image * a = cpl_image_new(nx, ny, type);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> </div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>   <span class="keywordflow">switch</span>(filter) {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>   <span class="keywordflow">case</span> CPL_FILTER_MEDIAN:</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     check_nomsg(cpl_image_filter(a, b, ker, CPL_FILTER_MEDIAN, CPL_BORDER_FILTER));</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>   <span class="keywordflow">case</span> CPL_FILTER_LINEAR:</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     check_nomsg(cpl_image_filter(a, b, ker, CPL_FILTER_LINEAR, CPL_BORDER_FILTER));</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>   <span class="keywordflow">case</span> CPL_FILTER_STDEV:</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     cpl_image_filter(a, b, ker, CPL_FILTER_STDEV, CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>   <span class="keywordflow">case</span> CPL_FILTER_MORPHO:</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     cpl_image_filter(a, b, ker, CPL_FILTER_MORPHO, CPL_BORDER_FILTER);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>   <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Filter type not supported"</span>);</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>   }</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  cleanup:</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>   <span class="keywordflow">return</span> a;</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> </div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> </div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> cpl_image * </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> sinfo_image_filter_linear(<span class="keyword">const</span> cpl_image *img, <span class="keyword">const</span> cpl_matrix * mx)</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     <span class="keywordflow">return</span> sinfo_image_filter_mode(img, mx, CPL_FILTER_LINEAR);</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> }</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> cpl_image * sinfo_image_filter_linear2(<span class="keyword">const</span> cpl_image *img, <span class="keyword">const</span> cpl_matrix * mx)</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> {</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     <span class="keywordflow">return</span> sinfo_image_filter_wrapper(img, mx, CPL_FILTER_LINEAR);</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span> }</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span> </div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> cpl_image * sinfo_image_filter_median(<span class="keyword">const</span> cpl_image * img, <span class="keyword">const</span> cpl_matrix * mx)</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     <span class="keywordflow">return</span> sinfo_image_filter_wrapper(img, mx, CPL_FILTER_MEDIAN);</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utilities_8h_source.html b/html/sinfo__utilities_8h_source.html
index 3bd233f..1f0f7a4 100644
--- a/html/sinfo__utilities_8h_source.html
+++ b/html/sinfo__utilities_8h_source.html
@@ -2,229 +2,260 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utilities.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utilities.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utilities.h,v 1.13 2011/12/09 07:47:42 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2011/12/09 07:47:42 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_UTILITIES_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILITIES_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="comment">/*</span>
-<a name="l00036"></a>00036 <span class="comment">  This recipe implements error handling cleanly using a pair of macros called</span>
-<a name="l00037"></a>00037 <span class="comment">  sinfo_skip_if() and sinfo_end_skip.</span>
-<a name="l00038"></a>00038 <span class="comment"></span>
-<a name="l00039"></a>00039 <span class="comment">  sinfo_skip_if() takes one argument, which is a logical expression.</span>
-<a name="l00040"></a>00040 <span class="comment">  If the logical expression is false sinfo_skip_if() takes no action and</span>
-<a name="l00041"></a>00041 <span class="comment">  program execution continues.</span>
-<a name="l00042"></a>00042 <span class="comment">  If the logical expression is true this indicates an error. In this case</span>
-<a name="l00043"></a>00043 <span class="comment">  sinfo_skip_if() will set the location of the error to the point where it</span>
-<a name="l00044"></a>00044 <span class="comment">  was invoked in the recipe code (unless the error location is already in the</span>
-<a name="l00045"></a>00045 <span class="comment">  recipe code). If no error code had been set, then sinfo_skip_if() will set</span>
-<a name="l00046"></a>00046 <span class="comment">  one. Finally, sinfo_skip_if() causes program execution to skip to the</span>
-<a name="l00047"></a>00047 <span class="comment">  macro 'sinfo_end_skip'.</span>
-<a name="l00048"></a>00048 <span class="comment">  The macro sinfo_end_skip is located towards the end of the function, after</span>
-<a name="l00049"></a>00049 <span class="comment">  which all resource deallocation and the function return is located.</span>
-<a name="l00050"></a>00050 <span class="comment"></span>
-<a name="l00051"></a>00051 <span class="comment">  The use of sinfo_skip_if() assumes the following coding practice:</span>
-<a name="l00052"></a>00052 <span class="comment">  1) Pointers used for dynamically allocated memory that they "own" shall</span>
-<a name="l00053"></a>00053 <span class="comment">     always</span>
-<a name="l00054"></a>00054 <span class="comment">     point to either NULL or to allocated memory (including CPL-objects).</span>
-<a name="l00055"></a>00055 <span class="comment">  2) Such pointers may not be reused to point to memory whose deallocation</span>
-<a name="l00056"></a>00056 <span class="comment">     requires calls to different functions.</span>
-<a name="l00057"></a>00057 <span class="comment">  3) Pointers of type FILE should be set NULL when not pointing to an open</span>
-<a name="l00058"></a>00058 <span class="comment">     stream and their closing calls (fclose(), freopen(), etc.) following the</span>
-<a name="l00059"></a>00059 <span class="comment">     'sinfo_end_skip' should be guarded against such NULL pointers.</span>
-<a name="l00060"></a>00060 <span class="comment"></span>
-<a name="l00061"></a>00061 <span class="comment">  Error checking with sinfo_skip_if() is encouraged due to the following</span>
-<a name="l00062"></a>00062 <span class="comment">  advantages:</span>
-<a name="l00063"></a>00063 <span class="comment">  1) It ensures that a CPL-error code is set.</span>
-<a name="l00064"></a>00064 <span class="comment">  2) It ensures that the location of the error in the _recipe_ code is noted.</span>
-<a name="l00065"></a>00065 <span class="comment">  3) The error checking may be confined to a single concise line.</span>
-<a name="l00066"></a>00066 <span class="comment">  4) It is not necessary to replicate memory deallocation for every error</span>
-<a name="l00067"></a>00067 <span class="comment">     condition.</span>
-<a name="l00068"></a>00068 <span class="comment">  5) If more extensive error reporting/handling is required it is not precluded</span>
-<a name="l00069"></a>00069 <span class="comment">     by the use of sinfo_skip_if().</span>
-<a name="l00070"></a>00070 <span class="comment">  6) It allows for a single point of function return.</span>
-<a name="l00071"></a>00071 <span class="comment">  7) It allows for optional, uniformly formatted debugging/tracing information</span>
-<a name="l00072"></a>00072 <span class="comment">     at each macro invocation.</span>
-<a name="l00073"></a>00073 <span class="comment"></span>
-<a name="l00074"></a>00074 <span class="comment">  The implementation of sinfo_skip_if() uses a goto/label construction.</span>
-<a name="l00075"></a>00075 <span class="comment">  According to Kerningham & Ritchie, The C Programming Language, 2nd edition,</span>
-<a name="l00076"></a>00076 <span class="comment">  Section 3.8:</span>
-<a name="l00077"></a>00077 <span class="comment">  "This organization is handy if the error-handling code is non-trivial,</span>
-<a name="l00078"></a>00078 <span class="comment">  and if errors can occur in several places."</span>
-<a name="l00079"></a>00079 <span class="comment"></span>
-<a name="l00080"></a>00080 <span class="comment">  The use of goto for any other purpose should be avoided.</span>
-<a name="l00081"></a>00081 <span class="comment"></span>
-<a name="l00082"></a>00082 <span class="comment">*/</span>
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="preprocessor">#define sinfo_skip_if(CONDITION) \</span>
-<a name="l00085"></a>00085 <span class="preprocessor">  do if (CONDITION) { \</span>
-<a name="l00086"></a>00086 <span class="preprocessor">    if (cpl_error_get_code()) { \</span>
-<a name="l00087"></a>00087 <span class="preprocessor">        cpl_msg_debug("", "Skip in %s line %d due to '%s' with error '%s' " \</span>
-<a name="l00088"></a>00088 <span class="preprocessor">                      "at %s", __FILE__, __LINE__, #CONDITION, \</span>
-<a name="l00089"></a>00089 <span class="preprocessor">                      cpl_error_get_message(), cpl_error_get_where());  \</span>
-<a name="l00090"></a>00090 <span class="preprocessor">        if (strstr(cpl_error_get_where(), "visir") == NULL) \</span>
-<a name="l00091"></a>00091 <span class="preprocessor">            cpl_error_set_where(""); \</span>
-<a name="l00092"></a>00092 <span class="preprocessor">    } else { \</span>
-<a name="l00093"></a>00093 <span class="preprocessor">        cpl_msg_debug("", "Skip in %s line %d due to '%s'", \</span>
-<a name="l00094"></a>00094 <span class="preprocessor">                        __FILE__, __LINE__, #CONDITION);  \</span>
-<a name="l00095"></a>00095 <span class="preprocessor">        cpl_error_set("", CPL_ERROR_UNSPECIFIED); \</span>
-<a name="l00096"></a>00096 <span class="preprocessor">    } \</span>
-<a name="l00097"></a>00097 <span class="preprocessor">    goto cleanup; \</span>
-<a name="l00098"></a>00098 <span class="preprocessor">  } else { \</span>
-<a name="l00099"></a>00099 <span class="preprocessor">    if (cpl_error_get_code()) \</span>
-<a name="l00100"></a>00100 <span class="preprocessor">        cpl_msg_debug("", "No skip in %s line %d due to '%s' with error '%s' " \</span>
-<a name="l00101"></a>00101 <span class="preprocessor">                      "at %s", __FILE__, __LINE__, #CONDITION, \</span>
-<a name="l00102"></a>00102 <span class="preprocessor">                      cpl_error_get_message(), cpl_error_get_where()); \</span>
-<a name="l00103"></a>00103 <span class="preprocessor">    else \</span>
-<a name="l00104"></a>00104 <span class="preprocessor">        cpl_msg_debug("", "No skip in %s line %d due to '%s'", \</span>
-<a name="l00105"></a>00105 <span class="preprocessor">                      __FILE__, __LINE__, #CONDITION);  \</span>
-<a name="l00106"></a>00106 <span class="preprocessor">  } while (0)</span>
-<a name="l00107"></a>00107 <span class="preprocessor"></span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 <span class="preprocessor">#define sinfo_end_skip \</span>
-<a name="l00110"></a>00110 <span class="preprocessor">    do { \</span>
-<a name="l00111"></a>00111 <span class="preprocessor">        cleanup: \</span>
-<a name="l00112"></a>00112 <span class="preprocessor">        if (cpl_error_get_code()) \</span>
-<a name="l00113"></a>00113 <span class="preprocessor">            cpl_msg_debug("", "Cleanup in %s line %d with error '%s' at %s", \</span>
-<a name="l00114"></a>00114 <span class="preprocessor">                           __FILE__, __LINE__, \</span>
-<a name="l00115"></a>00115 <span class="preprocessor">                          cpl_error_get_message(), cpl_error_get_where()); \</span>
-<a name="l00116"></a>00116 <span class="preprocessor">        else \</span>
-<a name="l00117"></a>00117 <span class="preprocessor">            cpl_msg_debug("", "Cleanup in %s line %d", \</span>
-<a name="l00118"></a>00118 <span class="preprocessor">                          __FILE__, __LINE__);  \</span>
-<a name="l00119"></a>00119 <span class="preprocessor">    } while (0)</span>
-<a name="l00120"></a>00120 <span class="preprocessor"></span>
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00123"></a>00123 <span class="preprocessor">#include <sinfo_image_ops.h></span>
-<a name="l00124"></a>00124 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00125"></a>00125 CPL_BEGIN_DECLS
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 cpl_image*
-<a name="l00129"></a>00129 sinfo_vector_to_image(<span class="keyword">const</span> cpl_vector* vector,cpl_type type);
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131 <span class="keywordtype">int</span>
-<a name="l00132"></a>00132 sinfo_table_column_dump(cpl_table* t, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, cpl_type type);
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 cpl_table*
-<a name="l00135"></a>00135 sinfo_table_shift_column_spline3(cpl_table* t,
-<a name="l00136"></a>00136                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00137"></a>00137                                  <span class="keyword">const</span> <span class="keywordtype">double</span> s);
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 cpl_table*
-<a name="l00140"></a>00140 sinfo_table_shift_column_poly(cpl_table* t,
-<a name="l00141"></a>00141                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00142"></a>00142                               <span class="keyword">const</span> <span class="keywordtype">double</span> s,
-<a name="l00143"></a>00143                               <span class="keyword">const</span> <span class="keywordtype">int</span> order);
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 cpl_table*
-<a name="l00146"></a>00146 sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t,
-<a name="l00147"></a>00147                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col,
-<a name="l00148"></a>00148                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,
-<a name="l00149"></a>00149                                    <span class="keywordtype">double</span>* r);
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 cpl_error_code
-<a name="l00152"></a>00152 sinfo_ima_line_cor(cpl_parameterlist * parlist, cpl_frameset* in);
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="keywordtype">void</span> sinfo_new_array_set_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> i );
-<a name="l00156"></a>00156 <span class="keywordtype">float</span> sinfo_new_array_get_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> i );
-<a name="l00157"></a>00157 <span class="keywordtype">void</span> sinfo_new_destroy_array(<span class="keywordtype">float</span> ** array);
-<a name="l00158"></a>00158 <span class="keywordtype">void</span> sinfo_new_destroy_stringarray(<span class="keywordtype">char</span> ** array, <span class="keywordtype">int</span> size_x);
-<a name="l00159"></a>00159 <span class="keywordtype">void</span> sinfo_new_intarray_set_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> i );
-<a name="l00160"></a>00160 <span class="keywordtype">void</span> sinfo_new_array2D_set_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y );
-<a name="l00161"></a>00161 <span class="keywordtype">void</span> sinfo_new_destroy_2Dintarray(<span class="keywordtype">int</span> *** array, <span class="keywordtype">int</span> size_x);
-<a name="l00162"></a>00162 <span class="keywordtype">void</span> sinfo_new_destroy_2Dfloatarray(<span class="keywordtype">float</span> *** array, <span class="keywordtype">int</span> size_x);
-<a name="l00163"></a>00163 <span class="keywordtype">void</span> sinfo_new_destroy_2Ddoublearray(<span class="keywordtype">double</span> *** array, <span class="keywordtype">int</span> size_x);
-<a name="l00164"></a>00164 <span class="keywordtype">void</span> sinfo_new_destroy_intarray(<span class="keywordtype">int</span> ** array);
-<a name="l00165"></a>00165 <span class="keywordtype">void</span> sinfo_new_destroy_doublearray(<span class="keywordtype">double</span> * array);
-<a name="l00166"></a>00166 <span class="keywordtype">void</span> sinfo_new_doublearray_set_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">double</span> value, <span class="keywordtype">int</span> i );
-<a name="l00167"></a>00167 <span class="keywordtype">int</span> sinfo_new_intarray_get_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> i );
-<a name="l00168"></a>00168 <span class="keywordtype">int</span> * sinfo_new_intarray( <span class="keywordtype">int</span> size);
-<a name="l00169"></a>00169 <span class="keywordtype">int</span> ** sinfo_new_2Dintarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);
-<a name="l00170"></a>00170 <span class="keywordtype">double</span> ** sinfo_new_2Ddoublearray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);
-<a name="l00171"></a>00171 <span class="keywordtype">char</span> * sinfo_new_get_rootname(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename);
-<a name="l00172"></a>00172 <span class="keywordtype">char</span> * sinfo_new_get_basename(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);
-<a name="l00173"></a>00173 <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanstdev(Stats * stats);
-<a name="l00174"></a>00174 <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanmean(Stats * stats);
-<a name="l00175"></a>00175 <span class="keywordtype">float</span> sinfo_new_array2D_get_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y );
-<a name="l00176"></a>00176 <span class="keywordtype">float</span> * sinfo_new_floatarray( <span class="keywordtype">int</span> size);
-<a name="l00177"></a>00177 <span class="keywordtype">float</span> ** sinfo_new_2Dfloatarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);
-<a name="l00178"></a>00178 <span class="keywordtype">double</span>   sinfo_new_doublearray_get_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">int</span> i );
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 <span class="keywordtype">double</span> * sinfo_new_doublearray( <span class="keywordtype">int</span> size);
-<a name="l00181"></a>00181 <span class="comment">/*</span>
-<a name="l00182"></a>00182 <span class="comment">FitParams ** sinfo_new_fit_params( int n_params ) ;</span>
-<a name="l00183"></a>00183 <span class="comment">*/</span>
-<a name="l00184"></a>00184 cpl_imagelist * sinfo_new_frameset_to_iset(cpl_frameset *) ;
-<a name="l00185"></a>00185 cpl_imagelist *
-<a name="l00186"></a>00186 sinfo_new_imagelist_load_frameset(<span class="keyword">const</span> cpl_frameset * frameset,cpl_type type,
-<a name="l00187"></a>00187                                             <span class="keywordtype">int</span> pnum,<span class="keywordtype">int</span> extnum);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 <span class="keywordtype">char</span> ** sinfo_new_frameset_to_filenames(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *nfiles);
-<a name="l00190"></a>00190 <span class="keywordtype">char</span> ** new_frameset_to_tags(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *ntags);
-<a name="l00191"></a>00191 <span class="keywordtype">double</span> sinfo_spline_hermite(<span class="keywordtype">double</span> xp,
-<a name="l00192"></a>00192                             <span class="keyword">const</span> <span class="keywordtype">double</span> *x,
-<a name="l00193"></a>00193                             <span class="keyword">const</span> <span class="keywordtype">double</span> *y,
-<a name="l00194"></a>00194                                   <span class="keywordtype">int</span> n,
-<a name="l00195"></a>00195                                   <span class="keywordtype">int</span> *istart );
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 cpl_error_code update_bad_pixel_map(cpl_image* im);
-<a name="l00198"></a>00198 <span class="comment">/* replacement of deprecated functions */</span>
-<a name="l00199"></a>00199 cpl_polynomial * sinfo_polynomial_fit_2d_create(cpl_bivector     *  xy_pos,
-<a name="l00200"></a>00200                                               cpl_vector       *  values,
-<a name="l00201"></a>00201                                               cpl_size                 degree,
-<a name="l00202"></a>00202                                               <span class="keywordtype">double</span>           *  mse);
-<a name="l00203"></a>00203 cpl_polynomial * sinfo_polynomial_fit_1d_create(
-<a name="l00204"></a>00204         <span class="keyword">const</span> cpl_vector    *   x_pos,
-<a name="l00205"></a>00205         <span class="keyword">const</span> cpl_vector    *   values,
-<a name="l00206"></a>00206         <span class="keywordtype">int</span>                     degree,
-<a name="l00207"></a>00207         <span class="keywordtype">double</span>              *   mse
-<a name="l00208"></a>00208         );
-<a name="l00209"></a>00209 cpl_image * sinfo_image_filter_median(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);
-<a name="l00210"></a>00210 cpl_image * sinfo_image_filter_linear(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);
-<a name="l00211"></a>00211 cpl_image * sinfo_image_filter_linear2(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);
-<a name="l00212"></a>00212 CPL_END_DECLS
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utilities.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utilities.h,v 1.13 2011/12/09 07:47:42 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2011/12/09 07:47:42 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_UTILITIES_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILITIES_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span><span class="preprocessor">#include <sinfo_cpl_size.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">  This recipe implements error handling cleanly using a pair of macros called</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">  sinfo_skip_if() and sinfo_end_skip.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">  sinfo_skip_if() takes one argument, which is a logical expression.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">  If the logical expression is false sinfo_skip_if() takes no action and</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  program execution continues.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">  If the logical expression is true this indicates an error. In this case</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  sinfo_skip_if() will set the location of the error to the point where it</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  was invoked in the recipe code (unless the error location is already in the</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  recipe code). If no error code had been set, then sinfo_skip_if() will set</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  one. Finally, sinfo_skip_if() causes program execution to skip to the</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  macro 'sinfo_end_skip'.</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">  The macro sinfo_end_skip is located towards the end of the function, after</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">  which all resource deallocation and the function return is located.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">  The use of sinfo_skip_if() assumes the following coding practice:</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">  1) Pointers used for dynamically allocated memory that they "own" shall</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">     always</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">     point to either NULL or to allocated memory (including CPL-objects).</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">  2) Such pointers may not be reused to point to memory whose deallocation</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">     requires calls to different functions.</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">  3) Pointers of type FILE should be set NULL when not pointing to an open</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">     stream and their closing calls (fclose(), freopen(), etc.) following the</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">     'sinfo_end_skip' should be guarded against such NULL pointers.</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">  Error checking with sinfo_skip_if() is encouraged due to the following</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">  advantages:</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">  1) It ensures that a CPL-error code is set.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">  2) It ensures that the location of the error in the _recipe_ code is noted.</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">  3) The error checking may be confined to a single concise line.</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">  4) It is not necessary to replicate memory deallocation for every error</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">     condition.</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">  5) If more extensive error reporting/handling is required it is not precluded</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">     by the use of sinfo_skip_if().</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">  6) It allows for a single point of function return.</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">  7) It allows for optional, uniformly formatted debugging/tracing information</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">     at each macro invocation.</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">  The implementation of sinfo_skip_if() uses a goto/label construction.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">  According to Kerningham & Ritchie, The C Programming Language, 2nd edition,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">  Section 3.8:</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">  "This organization is handy if the error-handling code is non-trivial,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">  and if errors can occur in several places."</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"></span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">  The use of goto for any other purpose should be avoided.</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment"></span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#define sinfo_skip_if(CONDITION) \</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">  do if (CONDITION) { \</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">    if (cpl_error_get_code()) { \</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor">        cpl_msg_debug("", "Skip in %s line %d due to '%s' with error '%s' " \</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">                      "at %s", __FILE__, __LINE__, #CONDITION, \</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">                      cpl_error_get_message(), cpl_error_get_where());  \</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor">        if (strstr(cpl_error_get_where(), "visir") == NULL) \</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">            cpl_error_set_where(""); \</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor">    } else { \</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="preprocessor">        cpl_msg_debug("", "Skip in %s line %d due to '%s'", \</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="preprocessor">                        __FILE__, __LINE__, #CONDITION);  \</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="preprocessor">        cpl_error_set("", CPL_ERROR_UNSPECIFIED); \</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="preprocessor">    } \</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">    goto cleanup; \</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor">  } else { \</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor">    if (cpl_error_get_code()) \</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor">        cpl_msg_debug("", "No skip in %s line %d due to '%s' with error '%s' " \</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor">                      "at %s", __FILE__, __LINE__, #CONDITION, \</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="preprocessor">                      cpl_error_get_message(), cpl_error_get_where()); \</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="preprocessor">    else \</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="preprocessor">        cpl_msg_debug("", "No skip in %s line %d due to '%s'", \</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="preprocessor">                      __FILE__, __LINE__, #CONDITION);  \</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="preprocessor">  } while (0)</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor">#define sinfo_end_skip \</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="preprocessor">    do { \</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="preprocessor">        cleanup: \</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="preprocessor">        if (cpl_error_get_code()) \</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="preprocessor">            cpl_msg_debug("", "Cleanup in %s line %d with error '%s' at %s", \</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="preprocessor">                           __FILE__, __LINE__, \</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="preprocessor">                          cpl_error_get_message(), cpl_error_get_where()); \</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="preprocessor">        else \</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="preprocessor">            cpl_msg_debug("", "Cleanup in %s line %d", \</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="preprocessor">                          __FILE__, __LINE__);  \</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="preprocessor">    } while (0)</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="preprocessor">#include <sinfo_image_ops.h></span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> CPL_BEGIN_DECLS</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> cpl_image*</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> sinfo_vector_to_image(<span class="keyword">const</span> cpl_vector* vector,cpl_type type);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> sinfo_table_column_dump(cpl_table* t, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, cpl_type type);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> cpl_table*</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> sinfo_table_shift_column_spline3(cpl_table* t,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                  <span class="keyword">const</span> <span class="keywordtype">double</span> s);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> cpl_table*</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> sinfo_table_shift_column_poly(cpl_table* t,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> s,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                               <span class="keyword">const</span> <span class="keywordtype">int</span> order);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> cpl_table*</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                    <span class="keywordtype">double</span>* r);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> cpl_error_code</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> sinfo_ima_line_cor(cpl_parameterlist * parlist, cpl_frameset* in);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="keywordtype">void</span> sinfo_new_array_set_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="keywordtype">float</span> sinfo_new_array_get_value( <span class="keywordtype">float</span> * array, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="keywordtype">void</span> sinfo_new_destroy_array(<span class="keywordtype">float</span> ** array);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="keywordtype">void</span> sinfo_new_destroy_stringarray(<span class="keywordtype">char</span> ** array, <span class="keywordtype">int</span> size_x);</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="keywordtype">void</span> sinfo_new_intarray_set_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> value, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="keywordtype">void</span> sinfo_new_array2D_set_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">float</span> value, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y );</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="keywordtype">void</span> sinfo_new_destroy_2Dintarray(<span class="keywordtype">int</span> *** array, <span class="keywordtype">int</span> size_x);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keywordtype">void</span> sinfo_new_destroy_2Dfloatarray(<span class="keywordtype">float</span> *** array, <span class="keywordtype">int</span> size_x);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="keywordtype">void</span> sinfo_new_destroy_2Ddoublearray(<span class="keywordtype">double</span> *** array, <span class="keywordtype">int</span> size_x);</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="keywordtype">void</span> sinfo_new_destroy_intarray(<span class="keywordtype">int</span> ** array);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="keywordtype">void</span> sinfo_new_destroy_doublearray(<span class="keywordtype">double</span> * array);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="keywordtype">void</span> sinfo_new_doublearray_set_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">double</span> value, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="keywordtype">int</span> sinfo_new_intarray_get_value( <span class="keywordtype">int</span> * array, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keywordtype">int</span> * sinfo_new_intarray( <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="keywordtype">int</span> ** sinfo_new_2Dintarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="keywordtype">double</span> ** sinfo_new_2Ddoublearray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keywordtype">char</span> * sinfo_new_get_rootname(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="keywordtype">char</span> * sinfo_new_get_basename(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanstdev(Stats * stats);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="keywordtype">float</span> sinfo_new_Stats_get_cleanmean(Stats * stats);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="keywordtype">float</span> sinfo_new_array2D_get_value( <span class="keywordtype">float</span> ** array, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y );</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keywordtype">float</span> * sinfo_new_floatarray( <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="keywordtype">float</span> ** sinfo_new_2Dfloatarray( <span class="keywordtype">int</span> size_x, <span class="keywordtype">int</span> size_y);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="keywordtype">double</span>   sinfo_new_doublearray_get_value( <span class="keywordtype">double</span> * array, <span class="keywordtype">int</span> i );</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="keywordtype">double</span> * sinfo_new_doublearray( <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">FitParams ** sinfo_new_fit_params( int n_params ) ;</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> cpl_imagelist * sinfo_new_frameset_to_iset(cpl_frameset *) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> cpl_imagelist *</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> sinfo_new_imagelist_load_frameset(<span class="keyword">const</span> cpl_frameset * frameset,cpl_type type,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                                             <span class="keywordtype">int</span> pnum,<span class="keywordtype">int</span> extnum);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="keywordtype">char</span> ** sinfo_new_frameset_to_filenames(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *nfiles);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keywordtype">char</span> ** new_frameset_to_tags(cpl_frameset *<span class="keyword">set</span>, <span class="keywordtype">int</span> *ntags);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="keywordtype">double</span> sinfo_spline_hermite(<span class="keywordtype">double</span> xp,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                             <span class="keyword">const</span> <span class="keywordtype">double</span> *x,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                             <span class="keyword">const</span> <span class="keywordtype">double</span> *y,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                   <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                   <span class="keywordtype">int</span> *istart );</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> cpl_error_code update_bad_pixel_map(cpl_image* im);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">/* replacement of deprecated functions */</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> cpl_polynomial * sinfo_polynomial_fit_2d_create(cpl_bivector     *  xy_pos,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>                                               cpl_vector       *  values,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                               cpl_size                 degree,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                                               <span class="keywordtype">double</span>           *  mse);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> cpl_polynomial * sinfo_polynomial_fit_1d_create(</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="keyword">const</span> cpl_vector    *   x_pos,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         <span class="keyword">const</span> cpl_vector    *   values,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordtype">int</span>                     degree,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>         <span class="keywordtype">double</span>              *   mse</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         );</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> cpl_image * sinfo_image_filter_median(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> cpl_image * sinfo_image_filter_linear(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> cpl_image * sinfo_image_filter_linear2(<span class="keyword">const</span> cpl_image *, <span class="keyword">const</span> cpl_matrix *);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utilities__scired_8c_source.html b/html/sinfo__utilities__scired_8c_source.html
index 44ece1f..58403be 100644
--- a/html/sinfo__utilities__scired_8c_source.html
+++ b/html/sinfo__utilities__scired_8c_source.html
@@ -2,1868 +2,1899 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utilities_scired.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utilities_scired.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00021"></a>00021 <span class="preprocessor">#endif</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#include <irplib_stdstar.h></span>
-<a name="l00023"></a>00023 
-<a name="l00024"></a>00024 <span class="comment">//Used only for sinfo_propertylist_has</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "sinfo_dfs.h"</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027 <span class="comment">//Used only for sinfo_band</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_spiffi_types.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00038"></a>00038 sinfo_sess2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> sess);
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00041"></a>00041 sinfo_set_spect_coord1(cpl_propertylist** plist,
-<a name="l00042"></a>00042                <span class="keyword">const</span> <span class="keywordtype">int</span> crpix1,
-<a name="l00043"></a>00043                <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,
-<a name="l00044"></a>00044                <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1);
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00047"></a>00047 sinfo_set_spect_coord2(cpl_propertylist** plist,
-<a name="l00048"></a>00048                <span class="keyword">const</span> <span class="keywordtype">int</span> crpix2,
-<a name="l00049"></a>00049                <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,
-<a name="l00050"></a>00050                <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2);
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00054"></a>00054 sinfo_set_coord1(cpl_propertylist** plist,
-<a name="l00055"></a>00055                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix1,
-<a name="l00056"></a>00056                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,
-<a name="l00057"></a>00057                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1);
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00059"></a>00059 sinfo_set_coord2(cpl_propertylist** plist,
-<a name="l00060"></a>00060                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix2,
-<a name="l00061"></a>00061                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,
-<a name="l00062"></a>00062                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2);
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00064"></a>00064 sinfo_set_coord3(cpl_propertylist** plist,
-<a name="l00065"></a>00065                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix3,
-<a name="l00066"></a>00066                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval3,
-<a name="l00067"></a>00067                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt3);
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00071"></a>00071 sinfo_set_cd_matrix2(cpl_propertylist** plist,
-<a name="l00072"></a>00072             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_1,
-<a name="l00073"></a>00073             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_2,
-<a name="l00074"></a>00074             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_1,
-<a name="l00075"></a>00075             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_2);
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00079"></a>00079 sinfo_set_cd_matrix3(cpl_propertylist** plist,
-<a name="l00080"></a>00080                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_3,
-<a name="l00081"></a>00081                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_3,
-<a name="l00082"></a>00082                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_1,
-<a name="l00083"></a>00083                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_2,
-<a name="l00084"></a>00084                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_3);
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00088"></a>00088 sinfo_new_change_plist_cube (cpl_propertylist * plist,
-<a name="l00089"></a>00089                              <span class="keywordtype">float</span> cenLambda,
-<a name="l00090"></a>00090                              <span class="keywordtype">float</span> dispersion,
-<a name="l00091"></a>00091                              <span class="keywordtype">int</span>   center_z,
-<a name="l00092"></a>00092                              <span class="keywordtype">float</span> center_x,
-<a name="l00093"></a>00093                  <span class="keywordtype">float</span> center_y );
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00097"></a>00097 sinfo_new_change_plist_image (cpl_propertylist * plist,
-<a name="l00098"></a>00098                               <span class="keywordtype">float</span> center_x,
-<a name="l00099"></a>00099                   <span class="keywordtype">float</span> center_y );
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00103"></a>00103 sinfo_new_change_plist_spectrum (cpl_propertylist * plist,
-<a name="l00104"></a>00104                  <span class="keywordtype">double</span> cenLambda,
-<a name="l00105"></a>00105                  <span class="keywordtype">double</span> dispersion,
-<a name="l00106"></a>00106                  <span class="keywordtype">int</span>   cenpix);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">static</span> cpl_image *
-<a name="l00109"></a>00109 sinfo_new_image_getvig(
-<a name="l00110"></a>00110         cpl_image    *   image_in,
-<a name="l00111"></a>00111         <span class="keywordtype">int</span>             loleft_x,
-<a name="l00112"></a>00112         <span class="keywordtype">int</span>             loleft_y,
-<a name="l00113"></a>00113         <span class="keywordtype">int</span>             upright_x,
-<a name="l00114"></a>00114         <span class="keywordtype">int</span>             upright_y);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 
-<a name="l00117"></a>00117 
-<a name="l00130"></a>00130 <span class="keywordtype">int</span>
-<a name="l00131"></a>00131 sinfo_check_input_data(object_config* cfg)
-<a name="l00132"></a>00132 {
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="keywordflow">if</span> (cfg == NULL)
-<a name="l00136"></a>00136     {
-<a name="l00137"></a>00137         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not parse cpl input!\n"</span>) ;
-<a name="l00138"></a>00138         <span class="keywordflow">return</span> -1 ;
-<a name="l00139"></a>00139     }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->wavemap) != 1) {
-<a name="l00143"></a>00143       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file wavemap %s is not FITS"</span>,cfg->wavemap);
-<a name="l00144"></a>00144       <span class="keywordflow">return</span> -1;
-<a name="l00145"></a>00145     }
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)
-<a name="l00149"></a>00149     {
-<a name="l00150"></a>00150        <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->halospectrum) != 1) {
-<a name="l00151"></a>00151           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->halospectrum);
-<a name="l00152"></a>00152           <span class="keywordflow">return</span> -1;
-<a name="l00153"></a>00153        }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     }
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {
-<a name="l00158"></a>00158       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->poslist) != 1)
-<a name="l00159"></a>00159     {
-<a name="l00160"></a>00160       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"File %s with tag %s is not FITS!"</span>,
-<a name="l00161"></a>00161                           cfg->poslist,PRO_SLIT_POS);
-<a name="l00162"></a>00162       <span class="keywordflow">return</span> -1 ;
-<a name="l00163"></a>00163     }
-<a name="l00164"></a>00164     } <span class="keywordflow">else</span> {
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->distlist) != 1)
-<a name="l00167"></a>00167     {
-<a name="l00168"></a>00168       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"File %s with tag %s is not FITS!"</span>,
-<a name="l00169"></a>00169                            cfg->distlist,PRO_SLITLETS_DISTANCE);
-<a name="l00170"></a>00170       <span class="keywordflow">return</span> -1;
-<a name="l00171"></a>00171     }
-<a name="l00172"></a>00172     }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="keywordflow">return</span> 0;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 }
-<a name="l00186"></a>00186 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00187"></a>00187 sinfo_hms2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> hms)
-<a name="l00188"></a>00188 {
-<a name="l00189"></a>00189   <span class="keywordtype">int</span> hrs=0;
-<a name="l00190"></a>00190   <span class="keywordtype">int</span> min=0;
-<a name="l00191"></a>00191   <span class="keywordtype">double</span> sec=0;
-<a name="l00192"></a>00192   <span class="keywordtype">double</span> deg=0;
-<a name="l00193"></a>00193   <span class="keywordtype">double</span> rest=hms;
-<a name="l00194"></a>00194   <span class="keywordtype">int</span> sign=1;
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196   <span class="comment">//sinfo_msg("hms=%f",hms);</span>
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198   <span class="keywordflow">if</span>(hms<0) {
-<a name="l00199"></a>00199     sign=-1;
-<a name="l00200"></a>00200     rest=-hms;
-<a name="l00201"></a>00201   }
-<a name="l00202"></a>00202   <span class="comment">//sinfo_msg("rest=%f",rest);</span>
-<a name="l00203"></a>00203   <span class="comment">//sinfo_msg("sign=%d",sign);</span>
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205   hrs=(int)(rest/10000.);
-<a name="l00206"></a>00206   <span class="comment">//sinfo_msg("hrs=%d",hrs);</span>
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208   rest=rest-(double)(hrs*10000.);
-<a name="l00209"></a>00209   min=(int)(rest/100.);
-<a name="l00210"></a>00210   <span class="comment">//sinfo_msg("min=%d",min);</span>
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   sec=rest-(double)(min*100.);
-<a name="l00213"></a>00213   <span class="comment">//sinfo_msg("sec=%f",sec);</span>
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215   deg=hrs*15+(double)(min/4.)+(double)(sec/240.);
-<a name="l00216"></a>00216   <span class="comment">//sinfo_msg("deg=%f",deg);</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218   deg=sign*deg;
-<a name="l00219"></a>00219   <span class="comment">//sinfo_msg("deg=%f",deg);</span>
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221   <span class="keywordflow">return</span> deg;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 }
-<a name="l00224"></a>00224 
-<a name="l00232"></a>00232 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00233"></a>00233 sinfo_sess2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> sess)
-<a name="l00234"></a>00234 {
-<a name="l00235"></a>00235   <span class="keywordtype">int</span> grad=0;
-<a name="l00236"></a>00236   <span class="keywordtype">int</span> min=0;
-<a name="l00237"></a>00237   <span class="keywordtype">double</span> sec=0;
-<a name="l00238"></a>00238   <span class="keywordtype">double</span> deg=0;
-<a name="l00239"></a>00239   <span class="keywordtype">double</span> rest=sess;
-<a name="l00240"></a>00240   <span class="keywordtype">int</span> sign=1;
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   <span class="comment">//sinfo_msg("sess=%f",sess);</span>
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244   <span class="keywordflow">if</span>(sess<0) {
-<a name="l00245"></a>00245     sign=-1;
-<a name="l00246"></a>00246     rest=-sess;
-<a name="l00247"></a>00247   }
-<a name="l00248"></a>00248   <span class="comment">//sinfo_msg("rest=%f",rest);</span>
-<a name="l00249"></a>00249   <span class="comment">//sinfo_msg("sign=%d",sign);</span>
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251   grad=(int)(rest/10000.);
-<a name="l00252"></a>00252   <span class="comment">//sinfo_msg("grad=%d",grad);</span>
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254   rest=rest-(double)(grad*10000.);
-<a name="l00255"></a>00255   min=(int)(rest/100.);
-<a name="l00256"></a>00256   <span class="comment">//sinfo_msg("min=%d",min);</span>
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258   sec=rest-(double)(min*100.);
-<a name="l00259"></a>00259   <span class="comment">//sinfo_msg("sec=%f",sec);</span>
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261   deg=grad+(double)(min/60.)+(double)(sec/3600.);
-<a name="l00262"></a>00262   <span class="comment">//sinfo_msg("deg=%f",deg);</span>
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264   deg=sign*deg;
-<a name="l00265"></a>00265   <span class="comment">//sinfo_msg("deg=%f",deg);</span>
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   <span class="keywordflow">return</span> deg;
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 
-<a name="l00284"></a>00284 <span class="keywordtype">int</span>
-<a name="l00285"></a>00285 sinfo_auto_size_cube(<span class="keywordtype">float</span>* offsetx,
-<a name="l00286"></a>00286                       <span class="keywordtype">float</span>* offsety,
-<a name="l00287"></a>00287               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes,
-<a name="l00288"></a>00288                     <span class="keywordtype">float</span>* ref_offx,
-<a name="l00289"></a>00289                     <span class="keywordtype">float</span>* ref_offy,
-<a name="l00290"></a>00290                     <span class="keywordtype">int</span>* size_x,
-<a name="l00291"></a>00291                     <span class="keywordtype">int</span>* size_y)
-<a name="l00292"></a>00292 {
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294   <span class="keywordtype">int</span> n=0;
-<a name="l00295"></a>00295   <span class="keywordtype">float</span> offx=0;
-<a name="l00296"></a>00296   <span class="keywordtype">float</span> offy=0;
-<a name="l00297"></a>00297   <span class="keywordtype">float</span> min_offx=0;
-<a name="l00298"></a>00298   <span class="keywordtype">float</span> max_offx=0;
-<a name="l00299"></a>00299   <span class="keywordtype">float</span> min_offy=0;
-<a name="l00300"></a>00300   <span class="keywordtype">float</span> max_offy=0;
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302   sinfo_msg (<span class="stringliteral">"Computation of output cube size"</span>) ;
-<a name="l00303"></a>00303   <span class="keywordflow">for</span> ( n = 0 ; n < nframes ; n++ ) {
-<a name="l00304"></a>00304     offx = offsetx[n];  <span class="comment">/* was - */</span>
-<a name="l00305"></a>00305     offy = offsety[n];  <span class="comment">/* was - */</span>
-<a name="l00306"></a>00306     <span class="comment">/* sinfo_msg("frame %d offx=%f offy=%f",n,offx,offy); */</span>
-<a name="l00307"></a>00307     <span class="keywordflow">if</span>(n==0) {
-<a name="l00308"></a>00308       min_offx=offx;
-<a name="l00309"></a>00309       min_offy=offy;
-<a name="l00310"></a>00310       max_offx=offx;
-<a name="l00311"></a>00311       max_offy=offy;
-<a name="l00312"></a>00312     } <span class="keywordflow">else</span> {
-<a name="l00313"></a>00313       <span class="keywordflow">if</span>(offx > max_offx) max_offx=offx;
-<a name="l00314"></a>00314       <span class="keywordflow">if</span>(offy > max_offy) max_offy=offy;
-<a name="l00315"></a>00315       <span class="keywordflow">if</span>(offx < min_offx) min_offx=offx;
-<a name="l00316"></a>00316       <span class="keywordflow">if</span>(offy < min_offy) min_offy=offy;
-<a name="l00317"></a>00317     }
-<a name="l00318"></a>00318   }
-<a name="l00319"></a>00319   <span class="comment">/*</span>
-<a name="l00320"></a>00320 <span class="comment">  sinfo_msg("max_offx=%f max_offy=%f",max_offx,max_offy);</span>
-<a name="l00321"></a>00321 <span class="comment">  sinfo_msg("min_offx=%f min_offy=%f",min_offx,min_offy);</span>
-<a name="l00322"></a>00322 <span class="comment">  */</span>
-<a name="l00323"></a>00323   *ref_offx=(min_offx+max_offx)/2;
-<a name="l00324"></a>00324   *ref_offy=(min_offy+max_offy)/2;
-<a name="l00325"></a>00325   *size_x+=2*floor(max_offx-min_offx+0.5);
-<a name="l00326"></a>00326   *size_y+=2*floor(max_offy-min_offy+0.5);
-<a name="l00327"></a>00327   sinfo_msg(<span class="stringliteral">"Output cube size: %d x %d"</span>,*size_x,*size_y);
-<a name="l00328"></a>00328   sinfo_msg(<span class="stringliteral">"Ref offset. x: %f y: %f"</span>,*ref_offx,*ref_offy);
-<a name="l00329"></a>00329   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Max offset. x: %f y: %f"</span>,max_offx,max_offy);
-<a name="l00330"></a>00330   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Min offset. x: %f y: %f"</span>,min_offx,min_offy);
-<a name="l00331"></a>00331   <span class="keywordflow">return</span> 0;
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 }
-<a name="l00334"></a>00334 
-<a name="l00342"></a>00342 <span class="keywordtype">int</span>
-<a name="l00343"></a>00343 sinfo_auto_size_cube5(object_config * cfg,
-<a name="l00344"></a>00344                     <span class="keywordtype">float</span>* ref_offx, <span class="keywordtype">float</span>* ref_offy,
-<a name="l00345"></a>00345                     <span class="keywordtype">float</span>* min_offx, <span class="keywordtype">float</span>* min_offy,
-<a name="l00346"></a>00346                     <span class="keywordtype">float</span>* max_offx, <span class="keywordtype">float</span>* max_offy)
-<a name="l00347"></a>00347 {
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349   <span class="keywordtype">char</span>* name =NULL;
-<a name="l00350"></a>00350   <span class="keywordtype">int</span> n=0;
-<a name="l00351"></a>00351   <span class="keywordtype">float</span> offx=0;
-<a name="l00352"></a>00352   <span class="keywordtype">float</span> offy=0;
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354   cpl_propertylist * plist=NULL;
-<a name="l00355"></a>00355   sinfo_msg (<span class="stringliteral">"Automatic computation of output cube size"</span>) ;
-<a name="l00356"></a>00356   <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {
-<a name="l00357"></a>00357     name = cfg->framelist[n] ;
-<a name="l00358"></a>00358     plist=cpl_propertylist_load(name,0);
-<a name="l00359"></a>00359     offx = sinfo_pfits_get_cumoffsetx(plist);  <span class="comment">/* was - */</span>
-<a name="l00360"></a>00360     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00361"></a>00361       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>);
-<a name="l00362"></a>00362       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" set it to  0"</span>);
-<a name="l00363"></a>00363       offx = 0;
-<a name="l00364"></a>00364       cpl_error_reset();
-<a name="l00365"></a>00365       <span class="comment">/* return -1 ; */</span>
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368     offy = sinfo_pfits_get_cumoffsety(plist); <span class="comment">/* was - */</span>
-<a name="l00369"></a>00369     sinfo_free_propertylist(&plist);
-<a name="l00370"></a>00370     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00371"></a>00371       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;
-<a name="l00372"></a>00372       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" set it to 0"</span>);
-<a name="l00373"></a>00373       offy = 0;
-<a name="l00374"></a>00374       cpl_error_reset();
-<a name="l00375"></a>00375       <span class="comment">/* return -1 ; */</span>
-<a name="l00376"></a>00376     }
-<a name="l00377"></a>00377     <span class="comment">//sinfo_msg("n=%d offx=%f offy=%f",n,offx,offy);</span>
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="keywordflow">if</span>(n==0) {
-<a name="l00380"></a>00380       *min_offx=offx;
-<a name="l00381"></a>00381       *min_offy=offy;
-<a name="l00382"></a>00382       *max_offx=offx;
-<a name="l00383"></a>00383       *max_offy=offy;
-<a name="l00384"></a>00384     } <span class="keywordflow">else</span> {
-<a name="l00385"></a>00385       <span class="keywordflow">if</span>(offx > *max_offx) *max_offx=offx;
-<a name="l00386"></a>00386       <span class="keywordflow">if</span>(offy > *max_offy) *max_offy=offy;
-<a name="l00387"></a>00387       <span class="keywordflow">if</span>(offx < *min_offx) *min_offx=offx;
-<a name="l00388"></a>00388       <span class="keywordflow">if</span>(offy < *min_offy) *min_offy=offy;
-<a name="l00389"></a>00389     }
-<a name="l00390"></a>00390   }
-<a name="l00391"></a>00391   *ref_offx=(*min_offx+*max_offx)/2;
-<a name="l00392"></a>00392   *ref_offy=(*min_offy+*max_offy)/2;
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394   <span class="keywordflow">if</span>(cfg->size_x == 0) cfg->size_x=2*floor(*max_offx-*min_offx+0.5)+64 ;
-<a name="l00395"></a>00395 <span class="comment">/* The formula above doesn't give always the right result (DSF07663)</span>
-<a name="l00396"></a>00396 <span class="comment"> * for example, if diff in offset is 35.5, the formula gives 72 but 71 would be</span>
-<a name="l00397"></a>00397 <span class="comment"> * enough, the following candidate is working fine:</span>
-<a name="l00398"></a>00398 <span class="comment"> *   if(cfg->size_x == 0)</span>
-<a name="l00399"></a>00399 <span class="comment">      cfg->size_x=floor(2.0*(*max_offx-*min_offx + 0.5 - 0.00001))+64 ;</span>
-<a name="l00400"></a>00400 <span class="comment">      Currently the ticket is suspended, because the formula above</span>
-<a name="l00401"></a>00401 <span class="comment">      would change the scientific results for the previous data.</span>
-<a name="l00402"></a>00402 <span class="comment">      The same is actual for Y axis.</span>
-<a name="l00403"></a>00403 <span class="comment">*/</span>
-<a name="l00404"></a>00404   <span class="keywordflow">if</span>(cfg->size_y == 0) cfg->size_y=2*floor(*max_offy-*min_offy+0.5)+64 ;
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406   sinfo_msg(<span class="stringliteral">"Output cube size: %d x %d"</span>,cfg->size_x,cfg->size_y);
-<a name="l00407"></a>00407   sinfo_msg(<span class="stringliteral">"Ref offset. x: %f y: %f"</span>,*ref_offx,*ref_offy);
-<a name="l00408"></a>00408   sinfo_msg(<span class="stringliteral">"Max offset. x: %f y: %f"</span>,*max_offx,*max_offy);
-<a name="l00409"></a>00409   sinfo_msg(<span class="stringliteral">"Min offset. x: %f y: %f"</span>,*min_offx,*min_offy);
-<a name="l00410"></a>00410   <span class="keywordflow">return</span> 0;
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413 }
-<a name="l00414"></a>00414 
-<a name="l00424"></a>00424 <span class="keywordtype">float</span>*
-<a name="l00425"></a>00425 sinfo_read_distances(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* distlist)
-<a name="l00426"></a>00426 {
-<a name="l00427"></a>00427   <span class="keywordtype">int</span> i=0;
-<a name="l00428"></a>00428   <span class="keywordtype">int</span>* status=NULL;
-<a name="l00429"></a>00429   <span class="keywordtype">float</span> * distances = NULL;
-<a name="l00430"></a>00430   <span class="keywordtype">float</span> tmp_float=0;
-<a name="l00431"></a>00431   <span class="keywordtype">char</span> tbl_distances_name[FILE_NAME_SZ];
-<a name="l00432"></a>00432   cpl_table* tbl_distances = NULL;
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434   sinfo_msg(<span class="stringliteral">"Read distances"</span>);
-<a name="l00435"></a>00435   distances = (<span class="keywordtype">float</span>*) cpl_calloc (nslits - 1, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>));
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437   <span class="keywordflow">if</span> ( NULL == distances )
-<a name="l00438"></a>00438     {
-<a name="l00439"></a>00439       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could allocate memory!"</span>) ;
-<a name="l00440"></a>00440       <span class="keywordflow">return</span> NULL ;
-<a name="l00441"></a>00441     }
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443             <span class="comment">/*READ TFITS TABLE*/</span>
-<a name="l00444"></a>00444   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00445"></a>00445     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Before loading input table"</span>);
-<a name="l00446"></a>00446     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00447"></a>00447     <span class="keywordflow">return</span> NULL;
-<a name="l00448"></a>00448   }
-<a name="l00449"></a>00449   strcpy(tbl_distances_name,distlist);
-<a name="l00450"></a>00450   tbl_distances = cpl_table_load(tbl_distances_name,1,0);
-<a name="l00451"></a>00451   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00452"></a>00452     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"loading input table %s"</span>,tbl_distances_name);
-<a name="l00453"></a>00453     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00454"></a>00454     <span class="keywordflow">return</span> NULL;
-<a name="l00455"></a>00455   }
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457   <span class="keywordflow">for</span> (i =0 ; i< nslits-1; i++){
-<a name="l00458"></a>00458     tmp_float=cpl_table_get_float(tbl_distances,<span class="stringliteral">"slitlet_distance"</span>,i,status);
-<a name="l00459"></a>00459     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00460"></a>00460       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"reading col %s from table %s"</span>,<span class="stringliteral">"slitlet_distance"</span>,
-<a name="l00461"></a>00461                        tbl_distances_name);
-<a name="l00462"></a>00462       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00463"></a>00463       <span class="keywordflow">return</span> NULL;
-<a name="l00464"></a>00464     }
-<a name="l00465"></a>00465     sinfo_new_array_set_value(distances,tmp_float,i);
-<a name="l00466"></a>00466   }
-<a name="l00467"></a>00467   cpl_table_delete(tbl_distances);
-<a name="l00468"></a>00468   <span class="keywordflow">return</span> distances;
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470 }
-<a name="l00471"></a>00471 
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473 
-<a name="l00481"></a>00481 <span class="keywordtype">float</span>**
-<a name="l00482"></a>00482 sinfo_read_slitlets_edges(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* poslist)
-<a name="l00483"></a>00483 {
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486   <span class="keywordtype">char</span> tbl_slitpos_name[FILE_NAME_SZ];
-<a name="l00487"></a>00487   cpl_table* tbl_slitpos=NULL;
-<a name="l00488"></a>00488   <span class="keywordtype">int</span> n=0;
-<a name="l00489"></a>00489   <span class="keywordtype">int</span> i=0;
-<a name="l00490"></a>00490   <span class="keywordtype">int</span>* status=NULL;
-<a name="l00491"></a>00491   <span class="keywordtype">float</span> edge_x=0;
-<a name="l00492"></a>00492   <span class="keywordtype">float</span> edge_y=0;
-<a name="l00493"></a>00493   <span class="keywordtype">float</span> ** slit_edges = NULL;
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495   slit_edges = sinfo_new_2Dfloatarray(nslits, 2) ;
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497   strcpy(tbl_slitpos_name,poslist);
-<a name="l00498"></a>00498   tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0);
-<a name="l00499"></a>00499   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00500"></a>00500     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error loading tbl %s"</span>,tbl_slitpos_name);
-<a name="l00501"></a>00501     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00502"></a>00502     <span class="keywordflow">return</span> NULL;
-<a name="l00503"></a>00503   }
-<a name="l00504"></a>00504   n = cpl_table_get_nrow(tbl_slitpos);
-<a name="l00505"></a>00505   <span class="keywordflow">if</span> (n != nslits) {
-<a name="l00506"></a>00506     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No of slitlets in table is n = %d != %d !"</span>,n,nslits);
-<a name="l00507"></a>00507     <span class="keywordflow">return</span> NULL;
-<a name="l00508"></a>00508   }
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510   <span class="keywordflow">for</span> (i =0 ; i< nslits; i++){
-<a name="l00511"></a>00511     edge_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,status);
-<a name="l00512"></a>00512     edge_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,status);
-<a name="l00513"></a>00513     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00514"></a>00514       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error reading tbl %s row %d"</span>,tbl_slitpos_name,i);
-<a name="l00515"></a>00515       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00516"></a>00516       <span class="keywordflow">return</span> NULL;
-<a name="l00517"></a>00517     }
-<a name="l00518"></a>00518     sinfo_new_array2D_set_value(slit_edges,edge_x,i,0);
-<a name="l00519"></a>00519     sinfo_new_array2D_set_value(slit_edges,edge_y,i,1);
-<a name="l00520"></a>00520   }
-<a name="l00521"></a>00521   cpl_table_delete(tbl_slitpos);
-<a name="l00522"></a>00522   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00523"></a>00523     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error reading tbl %s"</span>,tbl_slitpos_name);
-<a name="l00524"></a>00524     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00525"></a>00525     <span class="keywordflow">return</span> NULL;
-<a name="l00526"></a>00526   }
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528   <span class="keywordflow">return</span> slit_edges;
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530 }
-<a name="l00531"></a>00531 
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00556"></a>00556 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00557"></a>00557 cpl_imagelist * sinfo_new_cube_getvig(
-<a name="l00558"></a>00558         cpl_imagelist *        cube_in,
-<a name="l00559"></a>00559         <span class="keywordtype">int</span>             loleft_x,
-<a name="l00560"></a>00560         <span class="keywordtype">int</span>             loleft_y,
-<a name="l00561"></a>00561         <span class="keywordtype">int</span>             upright_x,
-<a name="l00562"></a>00562         <span class="keywordtype">int</span>             upright_y)
-<a name="l00563"></a>00563 {
-<a name="l00564"></a>00564     cpl_imagelist     *        cube_out ;
-<a name="l00565"></a>00565     <span class="keywordtype">int</span>                 i ;
-<a name="l00566"></a>00566     <span class="keywordtype">int</span>                 outlx,
-<a name="l00567"></a>00567                                         outly ;
-<a name="l00568"></a>00568 
-<a name="l00569"></a>00569     <span class="keywordtype">int</span> ilx=0;
-<a name="l00570"></a>00570     <span class="keywordtype">int</span> ily=0;
-<a name="l00571"></a>00571     <span class="keywordtype">int</span> inp=0;
-<a name="l00572"></a>00572     cpl_image* i_img=NULL;
-<a name="l00573"></a>00573     cpl_image* o_img=NULL;
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575     <span class="keywordflow">if</span> (cube_in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00576"></a>00576 
-<a name="l00577"></a>00577     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube_in,0));
-<a name="l00578"></a>00578     ily=cpl_image_get_size_y(cpl_imagelist_get(cube_in,0));
-<a name="l00579"></a>00579     inp=cpl_imagelist_get_size(cube_in);
-<a name="l00580"></a>00580 
-<a name="l00581"></a>00581         <span class="keywordflow">if</span> ((loleft_x>upright_x) ||
-<a name="l00582"></a>00582             (loleft_y>upright_y)) {
-<a name="l00583"></a>00583             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"ill-defined slit for extraction: aborting"</span>);
-<a name="l00584"></a>00584             <span class="keywordflow">return</span> NULL ;
-<a name="l00585"></a>00585         }
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587     <span class="comment">/* Extraction coordinates include rectangular zone  */</span>
-<a name="l00588"></a>00588     outlx = upright_x - loleft_x + 1 ;
-<a name="l00589"></a>00589     outly = upright_y - loleft_y + 1 ;
-<a name="l00590"></a>00590     <span class="comment">/*</span>
-<a name="l00591"></a>00591 <span class="comment">    cube_out = sinfo_new_cube(outlx, outly, cube_in->np) ;</span>
-<a name="l00592"></a>00592 <span class="comment">    */</span>
-<a name="l00593"></a>00593     cube_out = cpl_imagelist_new() ;
-<a name="l00594"></a>00594     <span class="comment">/* Loop on all input planes */</span>
-<a name="l00595"></a>00595     <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(cube_in) ; i++) {
-<a name="l00596"></a>00596 
-<a name="l00597"></a>00597       i_img=cpl_imagelist_get(cube_in,i);
-<a name="l00598"></a>00598         <span class="comment">/* Extract a slit from this plane   */</span>
-<a name="l00599"></a>00599                 o_img = sinfo_new_image_getvig(i_img,
-<a name="l00600"></a>00600                         loleft_x, loleft_y,
-<a name="l00601"></a>00601                         upright_x, upright_y) ;
-<a name="l00602"></a>00602         cpl_imagelist_set(cube_out,o_img,i);
-<a name="l00603"></a>00603     }
-<a name="l00604"></a>00604     <span class="keywordflow">return</span> cube_out ;
-<a name="l00605"></a>00605 }
-<a name="l00606"></a>00606 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00623"></a>00623 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625 <span class="keyword">static</span> cpl_image *
-<a name="l00626"></a>00626 sinfo_new_image_getvig(
-<a name="l00627"></a>00627         cpl_image    *    image_in,
-<a name="l00628"></a>00628         <span class="keywordtype">int</span>             loleft_x,
-<a name="l00629"></a>00629         <span class="keywordtype">int</span>             loleft_y,
-<a name="l00630"></a>00630         <span class="keywordtype">int</span>             upright_x,
-<a name="l00631"></a>00631         <span class="keywordtype">int</span>             upright_y)
-<a name="l00632"></a>00632 {
-<a name="l00633"></a>00633     cpl_image    *        slit_img ;
-<a name="l00634"></a>00634     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00635"></a>00635     <span class="keyword">register</span>
-<a name="l00636"></a>00636     pixelvalue  *       inpt,
-<a name="l00637"></a>00637                                 *       outpt ;
-<a name="l00638"></a>00638     <span class="keywordtype">int</span>         outlx, outly ;
-<a name="l00639"></a>00639     <span class="keywordtype">int</span> ilx=0;
-<a name="l00640"></a>00640     <span class="keywordtype">int</span> ily=0;
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00643"></a>00643     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00644"></a>00644 
-<a name="l00645"></a>00645     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647     ilx=cpl_image_get_size_x(image_in);
-<a name="l00648"></a>00648     ily=cpl_image_get_size_y(image_in);
-<a name="l00649"></a>00649     pidata=cpl_image_get_data_float(image_in);
-<a name="l00650"></a>00650 
-<a name="l00651"></a>00651     <span class="keywordflow">if</span> ((loleft_x<1) || (loleft_x>ilx) ||
-<a name="l00652"></a>00652         (loleft_y<1) || (loleft_y>ily) ||
-<a name="l00653"></a>00653         (upright_x<1) || (upright_x>ilx) ||
-<a name="l00654"></a>00654         (upright_y<1) || (upright_y>ily) ||
-<a name="l00655"></a>00655         (loleft_x>upright_x) || (loleft_y>upright_y)) {
-<a name="l00656"></a>00656         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"extraction zone is [%d %d] [%d %d]\n"</span>
-<a name="l00657"></a>00657                         <span class="stringliteral">"cannot extract such zone: aborting slit extraction"</span>,
-<a name="l00658"></a>00658                 loleft_x, loleft_y, upright_x, upright_y) ;
-<a name="l00659"></a>00659         <span class="keywordflow">return</span> NULL ;
-<a name="l00660"></a>00660     }
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662     outlx = upright_x - loleft_x + 1 ;
-<a name="l00663"></a>00663     outly = upright_y - loleft_y + 1 ;
-<a name="l00664"></a>00664     slit_img = cpl_image_new(outlx, outly,CPL_TYPE_FLOAT) ;
-<a name="l00665"></a>00665     podata=cpl_image_get_data_float(slit_img);
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667     <span class="keywordflow">for</span> (j=0 ; j<outly ; j++) {
-<a name="l00668"></a>00668         inpt = pidata+loleft_x-1 + (j+loleft_y-1)*ilx ;
-<a name="l00669"></a>00669         outpt = podata + j*outlx ;
-<a name="l00670"></a>00670         <span class="keywordflow">for</span> (i=0 ; i<outlx ; i++) {
-<a name="l00671"></a>00671             *outpt++ = *inpt++ ;
-<a name="l00672"></a>00672         }
-<a name="l00673"></a>00673     }
-<a name="l00674"></a>00674     <span class="keywordflow">return</span> slit_img ;
-<a name="l00675"></a>00675 }
-<a name="l00676"></a>00676 
-<a name="l00688"></a>00688 <span class="keywordtype">int</span>
-<a name="l00689"></a>00689 sinfo_new_set_wcs_cube(cpl_imagelist* cub, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda,
-<a name="l00690"></a>00690          <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix, <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy)
-<a name="l00691"></a>00691 {
-<a name="l00692"></a>00692   cpl_propertylist* plist=NULL;
-<a name="l00693"></a>00693 
-<a name="l00694"></a>00694   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l00695"></a>00695     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);
-<a name="l00696"></a>00696     cpl_propertylist_delete(plist) ;
-<a name="l00697"></a>00697     <span class="keywordflow">return</span> -1 ;
-<a name="l00698"></a>00698   }
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700   sinfo_new_change_plist_cube(plist, clambda, dis, cpix, cx, cy) ;
-<a name="l00701"></a>00701   sinfo_plist_set_extra_keys(plist,<span class="stringliteral">"IMAGE"</span>,<span class="stringliteral">"DATA"</span>,<span class="stringliteral">"RMSE"</span>,
-<a name="l00702"></a>00702                  <span class="stringliteral">"DATA"</span>,<span class="stringliteral">"ERRS"</span>,<span class="stringliteral">"QUAL"</span>,0);
-<a name="l00703"></a>00703   <span class="keywordflow">if</span> (cpl_imagelist_save(cub, name, CPL_BPP_IEEE_FLOAT,
-<a name="l00704"></a>00704                          plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00705"></a>00705     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);
-<a name="l00706"></a>00706     cpl_propertylist_delete(plist) ;
-<a name="l00707"></a>00707     <span class="keywordflow">return</span> -1 ;
-<a name="l00708"></a>00708   }
-<a name="l00709"></a>00709   cpl_propertylist_delete(plist) ;
-<a name="l00710"></a>00710   <span class="keywordflow">return</span> 0;
-<a name="l00711"></a>00711 
-<a name="l00712"></a>00712 }
-<a name="l00721"></a>00721 <span class="keywordtype">int</span>
-<a name="l00722"></a>00722 sinfo_new_set_wcs_image(cpl_image* img,
-<a name="l00723"></a>00723                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00724"></a>00724                         <span class="keywordtype">double</span> cx,
-<a name="l00725"></a>00725                         <span class="keywordtype">double</span> cy)
-<a name="l00726"></a>00726 {
-<a name="l00727"></a>00727   cpl_propertylist* plist=NULL;
-<a name="l00728"></a>00728 
-<a name="l00729"></a>00729   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l00730"></a>00730     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);
-<a name="l00731"></a>00731     cpl_propertylist_delete(plist) ;
-<a name="l00732"></a>00732     <span class="keywordflow">return</span> -1 ;
-<a name="l00733"></a>00733   }
-<a name="l00734"></a>00734   sinfo_new_change_plist_image(plist, cx, cy) ;
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736   <span class="keywordflow">if</span> (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,
-<a name="l00737"></a>00737                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00738"></a>00738     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);
-<a name="l00739"></a>00739     cpl_propertylist_delete(plist) ;
-<a name="l00740"></a>00740     <span class="keywordflow">return</span> -1 ;
-<a name="l00741"></a>00741   }
-<a name="l00742"></a>00742   cpl_propertylist_delete(plist) ;
-<a name="l00743"></a>00743   <span class="keywordflow">return</span> 0;
-<a name="l00744"></a>00744 
-<a name="l00745"></a>00745 }
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747 
-<a name="l00757"></a>00757 <span class="keywordtype">int</span>
-<a name="l00758"></a>00758 sinfo_new_set_wcs_spectrum(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda,
-<a name="l00759"></a>00759              <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix)
-<a name="l00760"></a>00760 {
-<a name="l00761"></a>00761   cpl_propertylist* plist=NULL;
-<a name="l00762"></a>00762 
-<a name="l00763"></a>00763   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l00764"></a>00764     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);
-<a name="l00765"></a>00765     cpl_propertylist_delete(plist) ;
-<a name="l00766"></a>00766     <span class="keywordflow">return</span> -1 ;
-<a name="l00767"></a>00767   }
-<a name="l00768"></a>00768   sinfo_new_change_plist_spectrum(plist, clambda, dis,cpix) ;
-<a name="l00769"></a>00769 
-<a name="l00770"></a>00770   <span class="keywordflow">if</span> (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,
-<a name="l00771"></a>00771                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00772"></a>00772     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);
-<a name="l00773"></a>00773     cpl_propertylist_delete(plist) ;
-<a name="l00774"></a>00774     <span class="keywordflow">return</span> -1 ;
-<a name="l00775"></a>00775   }
-<a name="l00776"></a>00776   cpl_propertylist_delete(plist) ;
-<a name="l00777"></a>00777   <span class="keywordflow">return</span> 0;
-<a name="l00778"></a>00778 
-<a name="l00779"></a>00779 }
-<a name="l00791"></a>00791 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00792"></a>00792 sinfo_new_change_plist_cube (cpl_propertylist * plist,
-<a name="l00793"></a>00793             <span class="keywordtype">float</span> cenLambda,
-<a name="l00794"></a>00794             <span class="keywordtype">float</span> dispersion,
-<a name="l00795"></a>00795             <span class="keywordtype">int</span>   center_z,
-<a name="l00796"></a>00796             <span class="keywordtype">float</span> center_x,
-<a name="l00797"></a>00797             <span class="keywordtype">float</span> center_y )
-<a name="l00798"></a>00798 {
-<a name="l00799"></a>00799 
-<a name="l00800"></a>00800     <span class="keywordtype">float</span> pixelscale ;
-<a name="l00801"></a>00801     <span class="keywordtype">double</span> ra ;
-<a name="l00802"></a>00802     <span class="keywordtype">double</span> dec ;
-<a name="l00803"></a>00803     <span class="keywordtype">double</span> angle ;
-<a name="l00804"></a>00804     <span class="keywordtype">float</span> radangle ;
-<a name="l00805"></a>00805     <span class="keywordtype">double</span> cd1_1, cd1_2, cd2_1, cd2_2 ;
-<a name="l00806"></a>00806     <span class="keywordtype">int</span> sign_swap = -1;
-<a name="l00807"></a>00807     <span class="keywordtype">char</span> firsttext[2*FILE_NAME_SZ] ;
-<a name="l00808"></a>00808 
-<a name="l00809"></a>00809     <span class="keywordtype">double</span> cdelt1=0;
-<a name="l00810"></a>00810     <span class="keywordtype">double</span> cdelt2=0;
-<a name="l00811"></a>00811     <span class="keywordtype">double</span> cdelt3=dispersion;
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813     <span class="keywordtype">double</span> crpix1=center_x;
-<a name="l00814"></a>00814     <span class="keywordtype">double</span> crpix2=center_y;
-<a name="l00815"></a>00815     <span class="keywordtype">int</span> crpix3=center_z;
-<a name="l00816"></a>00816 
-<a name="l00817"></a>00817     <span class="keywordtype">double</span> crval1=0;
-<a name="l00818"></a>00818     <span class="keywordtype">double</span> crval2=0;
-<a name="l00819"></a>00819     <span class="keywordtype">double</span> crval3=cenLambda;
-<a name="l00820"></a>00820 
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822     strcpy(firsttext, <span class="stringliteral">"sinfo_rec_objnod -f \0"</span>) ;
-<a name="l00823"></a>00823 
-<a name="l00824"></a>00824     pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;
-<a name="l00825"></a>00825     ra = sinfo_pfits_get_ra(plist) ;
-<a name="l00826"></a>00826     dec = sinfo_pfits_get_DEC(plist) ;
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828     <span class="comment">//get better coordinate values</span>
-<a name="l00829"></a>00829     ra=sinfo_pfits_get_targ_alpha(plist);
-<a name="l00830"></a>00830     dec=sinfo_pfits_get_targ_delta(plist);
-<a name="l00831"></a>00831     <span class="comment">//sinfo_msg("ra=%f",ra);</span>
-<a name="l00832"></a>00832     <span class="comment">//sinfo_msg("dec=%f",dec);</span>
-<a name="l00833"></a>00833     ra=sinfo_hms2deg(ra);
-<a name="l00834"></a>00834     dec=sinfo_sess2deg(dec);
-<a name="l00835"></a>00835     <span class="comment">//sinfo_msg("ra=%f",ra);</span>
-<a name="l00836"></a>00836     <span class="comment">//sinfo_msg("dec=%f",dec);</span>
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838     crval1=ra;
-<a name="l00839"></a>00839     crval2=dec;
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841     angle = sinfo_pfits_get_posangle(plist) ;
-<a name="l00842"></a>00842     <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span>
-<a name="l00843"></a>00843     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00844"></a>00844        cpl_error_reset();
-<a name="l00845"></a>00845     }
-<a name="l00846"></a>00846     cdelt1=sign_swap*pixelscale / 3600.;
-<a name="l00847"></a>00847     cdelt2=         +pixelscale / 3600.;
-<a name="l00848"></a>00848 
-<a name="l00849"></a>00849 
-<a name="l00850"></a>00850     radangle = angle * PI_NUMB / 180. ;
-<a name="l00851"></a>00851     cd1_1 = +cdelt1*cos(radangle);
-<a name="l00852"></a>00852     cd1_2 = -cdelt2*sin(radangle);
-<a name="l00853"></a>00853     cd2_1 = +cdelt1*sin(radangle);
-<a name="l00854"></a>00854     cd2_2 = +cdelt2*cos(radangle);
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856 
-<a name="l00857"></a>00857     sinfo_set_coord1(&plist,crpix1,crval1,cdelt1);
-<a name="l00858"></a>00858     sinfo_set_coord2(&plist,crpix2,crval2,cdelt2);
-<a name="l00859"></a>00859     sinfo_set_coord3(&plist,crpix3,crval3,cdelt3);
-<a name="l00860"></a>00860     sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2);
-<a name="l00861"></a>00861     sinfo_set_cd_matrix3(&plist,0,0,0,0,dispersion);
-<a name="l00862"></a>00862 
-<a name="l00863"></a>00863 
-<a name="l00864"></a>00864     }
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867 
-<a name="l00868"></a>00868 
-<a name="l00877"></a>00877 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00878"></a>00878 sinfo_set_coord1(cpl_propertylist** plist,
-<a name="l00879"></a>00879                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix1,
-<a name="l00880"></a>00880                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,
-<a name="l00881"></a>00881                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1)
-<a name="l00882"></a>00882 {
-<a name="l00883"></a>00883    cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE1"</span>,0);
-<a name="l00884"></a>00884     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"RA---TAN"</span>);
-<a name="l00885"></a>00885     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"Projected Rectascension"</span>);
-<a name="l00886"></a>00886     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX1"</span>,0);
-<a name="l00887"></a>00887     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"CRPIX1"</span>, crpix1) ;
-<a name="l00888"></a>00888     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX1"</span>,<span class="stringliteral">"Reference pixel in RA"</span> ) ;
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL1"</span>,0);
-<a name="l00891"></a>00891     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRPIX1"</span>, <span class="stringliteral">"CRVAL1"</span>, crval1 ) ;
-<a name="l00892"></a>00892     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL1"</span>,<span class="stringliteral">"Reference RA"</span> ) ;
-<a name="l00893"></a>00893 
-<a name="l00894"></a>00894     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT1"</span>,0);
-<a name="l00895"></a>00895     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL1"</span>,<span class="stringliteral">"CDELT1"</span>,cdelt1 ) ;
-<a name="l00896"></a>00896     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CDELT1"</span>,<span class="stringliteral">"pixel scale"</span> ) ;
-<a name="l00897"></a>00897 
-<a name="l00898"></a>00898     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT1"</span>,0);
-<a name="l00899"></a>00899     cpl_propertylist_insert_after_string(*plist, <span class="stringliteral">"CDELT1"</span>,  <span class="stringliteral">"CUNIT1"</span>, <span class="stringliteral">"deg"</span> ) ;
-<a name="l00900"></a>00900     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT1"</span>,<span class="stringliteral">"RA-UNIT"</span> ) ;
-<a name="l00901"></a>00901 
-<a name="l00902"></a>00902     <span class="keywordflow">return</span>;
-<a name="l00903"></a>00903 }
-<a name="l00904"></a>00904 
-<a name="l00905"></a>00905 
-<a name="l00914"></a>00914 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00915"></a>00915 sinfo_set_coord2(cpl_propertylist** plist,
-<a name="l00916"></a>00916                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix2,
-<a name="l00917"></a>00917                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,
-<a name="l00918"></a>00918                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2)
-<a name="l00919"></a>00919 {
-<a name="l00920"></a>00920     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE2"</span>,0);
-<a name="l00921"></a>00921     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CUNIT1"</span>,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"DEC--TAN"</span>);
-<a name="l00922"></a>00922     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE2"</span>, <span class="stringliteral">"Projected Declination"</span>) ;
-<a name="l00923"></a>00923 
-<a name="l00924"></a>00924     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX2"</span>,0);
-<a name="l00925"></a>00925     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"CRPIX2"</span>,crpix2 ) ;
-<a name="l00926"></a>00926     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX2"</span>, <span class="stringliteral">"Reference pixel in DEC"</span>) ;
-<a name="l00927"></a>00927 
-<a name="l00928"></a>00928     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CRVAL2"</span>,0);
-<a name="l00929"></a>00929     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"CRVAL2"</span>,crval2) ;
-<a name="l00930"></a>00930     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CRVAL2"</span>,<span class="stringliteral">"Reference DEC"</span>) ;
-<a name="l00931"></a>00931 
-<a name="l00932"></a>00932     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CDELT2"</span>,0);
-<a name="l00933"></a>00933     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL2"</span>,<span class="stringliteral">"CDELT2"</span>,cdelt2 ) ;
-<a name="l00934"></a>00934     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT2"</span>,<span class="stringliteral">"pixel scale"</span>) ;
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CUNIT2"</span>,0);
-<a name="l00937"></a>00937     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT2"</span>,<span class="stringliteral">"CUNIT2"</span>, <span class="stringliteral">"deg"</span> ) ;
-<a name="l00938"></a>00938     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"DEC-UNIT"</span>) ;
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941 }
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943 
-<a name="l00944"></a>00944 
-<a name="l00953"></a>00953 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00954"></a>00954 sinfo_set_coord3(cpl_propertylist** plist,
-<a name="l00955"></a>00955                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix3,
-<a name="l00956"></a>00956                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval3,
-<a name="l00957"></a>00957                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt3)
-<a name="l00958"></a>00958 {
-<a name="l00959"></a>00959     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE3"</span>,0);
-<a name="l00960"></a>00960     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>, <span class="stringliteral">"CTYPE3"</span>, <span class="stringliteral">"WAVE"</span> ) ;
-<a name="l00961"></a>00961     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CTYPE3"</span>,<span class="stringliteral">"wavelength axis in microns"</span>) ;
-<a name="l00962"></a>00962 
-<a name="l00963"></a>00963     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX3"</span>,0);
-<a name="l00964"></a>00964     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE3"</span>,<span class="stringliteral">"CRPIX3"</span>, (<span class="keywordtype">double</span>)crpix3 ) ;
-<a name="l00965"></a>00965     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX3"</span>, <span class="stringliteral">"Reference pixel in z"</span>) ;
-<a name="l00966"></a>00966 
-<a name="l00967"></a>00967     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL3"</span>,0);
-<a name="l00968"></a>00968     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX3"</span>, <span class="stringliteral">"CRVAL3"</span>, crval3) ;
-<a name="l00969"></a>00969     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL3"</span>, <span class="stringliteral">"central wavelength"</span>) ;
-<a name="l00970"></a>00970 
-<a name="l00971"></a>00971     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT3"</span>,0);
-<a name="l00972"></a>00972 
-<a name="l00973"></a>00973     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL3"</span>,<span class="stringliteral">"CDELT3"</span>,cdelt3) ;
-<a name="l00974"></a>00974     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CDELT3"</span>, <span class="stringliteral">"microns per pixel"</span>) ;
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT3"</span>,0);
-<a name="l00977"></a>00977     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT3"</span>, <span class="stringliteral">"CUNIT3"</span>, <span class="stringliteral">"um"</span> ) ;
-<a name="l00978"></a>00978     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT3"</span>,  <span class="stringliteral">"spectral unit"</span> ) ;
-<a name="l00979"></a>00979 
-<a name="l00980"></a>00980     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^SPECSYS"</span>,0);
-<a name="l00981"></a>00981     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CUNIT3"</span>, <span class="stringliteral">"SPECSYS"</span>, <span class="stringliteral">"TOPOCENT"</span> ) ;
-<a name="l00982"></a>00982     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"SPECSYS"</span>,  <span class="stringliteral">"Coordinate reference frame"</span> ) ;
-<a name="l00983"></a>00983 }
-<a name="l00984"></a>00984 
-<a name="l00985"></a>00985 
-<a name="l00996"></a>00996 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00997"></a>00997 sinfo_set_cd_matrix2(cpl_propertylist** plist,
-<a name="l00998"></a>00998             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_1,
-<a name="l00999"></a>00999             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_2,
-<a name="l01000"></a>01000             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_1,
-<a name="l01001"></a>01001             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_2)
-<a name="l01002"></a>01002 {
-<a name="l01003"></a>01003 
-<a name="l01004"></a>01004     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_1"</span>,0));
-<a name="l01005"></a>01005     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"EXPTIME"</span>,
-<a name="l01006"></a>01006                              <span class="stringliteral">"CD1_1"</span>, cd1_1 )) ;
-<a name="l01007"></a>01007     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_1"</span>,
-<a name="l01008"></a>01008                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01009"></a>01009 
-<a name="l01010"></a>01010     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_2"</span>,0));
-<a name="l01011"></a>01011     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD1_1"</span>,
-<a name="l01012"></a>01012                              <span class="stringliteral">"CD1_2"</span>, cd1_2 )) ;
-<a name="l01013"></a>01013     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_2"</span>,
-<a name="l01014"></a>01014                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01015"></a>01015 
-<a name="l01016"></a>01016     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_1"</span>,0));
-<a name="l01017"></a>01017     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD1_2"</span>,
-<a name="l01018"></a>01018                              <span class="stringliteral">"CD2_1"</span>, cd2_1 )) ;
-<a name="l01019"></a>01019     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_1"</span>,
-<a name="l01020"></a>01020                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01021"></a>01021 
-<a name="l01022"></a>01022     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_2"</span>,0));
-<a name="l01023"></a>01023     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD2_1"</span>,
-<a name="l01024"></a>01024                              <span class="stringliteral">"CD2_2"</span>, cd2_2 )) ;
-<a name="l01025"></a>01025     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_2"</span>,
-<a name="l01026"></a>01026                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01027"></a>01027 
-<a name="l01028"></a>01028  cleanup:
-<a name="l01029"></a>01029     <span class="keywordflow">return</span>;
-<a name="l01030"></a>01030 
-<a name="l01031"></a>01031 
-<a name="l01032"></a>01032 }
-<a name="l01033"></a>01033 
-<a name="l01034"></a>01034 
-<a name="l01047"></a>01047 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01048"></a>01048 sinfo_set_cd_matrix3(cpl_propertylist** plist,
-<a name="l01049"></a>01049                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_3,
-<a name="l01050"></a>01050                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_3,
-<a name="l01051"></a>01051                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_1,
-<a name="l01052"></a>01052                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_2,
-<a name="l01053"></a>01053                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_3)
-<a name="l01054"></a>01054 {
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056 
-<a name="l01057"></a>01057     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_3"</span>,0));
-<a name="l01058"></a>01058     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"EXPTIME"</span>,
-<a name="l01059"></a>01059                              <span class="stringliteral">"CD1_3"</span>, cd1_3 )) ;
-<a name="l01060"></a>01060     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_3"</span>,
-<a name="l01061"></a>01061                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01062"></a>01062 
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_3"</span>,0));
-<a name="l01065"></a>01065     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CD1_3"</span>,
-<a name="l01066"></a>01066                              <span class="stringliteral">"CD2_3"</span>, cd2_3 )) ;
-<a name="l01067"></a>01067     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_3"</span>,
-<a name="l01068"></a>01068                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01069"></a>01069 
-<a name="l01070"></a>01070 
-<a name="l01071"></a>01071 
-<a name="l01072"></a>01072     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_1"</span>,0));
-<a name="l01073"></a>01073     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CD2_3"</span>,
-<a name="l01074"></a>01074                              <span class="stringliteral">"CD3_1"</span>, cd3_1 )) ;
-<a name="l01075"></a>01075     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_1"</span>,
-<a name="l01076"></a>01076                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01077"></a>01077 
-<a name="l01078"></a>01078     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_2"</span>,0));
-<a name="l01079"></a>01079     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD3_1"</span>,
-<a name="l01080"></a>01080                              <span class="stringliteral">"CD3_2"</span>, cd3_2 )) ;
-<a name="l01081"></a>01081     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_2"</span>,
-<a name="l01082"></a>01082                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_3"</span>,0));
-<a name="l01085"></a>01085     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD3_2"</span>,
-<a name="l01086"></a>01086                              <span class="stringliteral">"CD3_3"</span>, cd3_3 )) ;
-<a name="l01087"></a>01087     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_3"</span>,
-<a name="l01088"></a>01088                          <span class="stringliteral">"CD rotation matrix"</span> )) ;
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090  cleanup:
-<a name="l01091"></a>01091     <span class="keywordflow">return</span>;
-<a name="l01092"></a>01092 
-<a name="l01093"></a>01093 
-<a name="l01094"></a>01094 }
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096 
-<a name="l01105"></a>01105 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01106"></a>01106 sinfo_set_spect_coord1(cpl_propertylist** plist,
-<a name="l01107"></a>01107                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix1,
-<a name="l01108"></a>01108                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,
-<a name="l01109"></a>01109                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1)
-<a name="l01110"></a>01110 {
-<a name="l01111"></a>01111 
-<a name="l01112"></a>01112     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE1"</span>,0);
-<a name="l01113"></a>01113     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>,  <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"PIXEL"</span>);
-<a name="l01114"></a>01114     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"Pixel coordinate system."</span>);
-<a name="l01115"></a>01115 
-<a name="l01116"></a>01116     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX1"</span>,0);
-<a name="l01117"></a>01117     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CTYPE1"</span>,  <span class="stringliteral">"CRPIX1"</span>, (<span class="keywordtype">double</span>)crpix1 ) ;
-<a name="l01118"></a>01118     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX1"</span>, <span class="stringliteral">"Reference pixel in x"</span>) ;
-<a name="l01119"></a>01119 
-<a name="l01120"></a>01120     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL1"</span>,0);
-<a name="l01121"></a>01121     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX1"</span>,  <span class="stringliteral">"CRVAL1"</span>, crval1 ) ;
-<a name="l01122"></a>01122     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL1"</span>, <span class="stringliteral">"value of ref pixel."</span>) ;
-<a name="l01123"></a>01123 
-<a name="l01124"></a>01124     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT1"</span>,0);
-<a name="l01125"></a>01125     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL1"</span>,  <span class="stringliteral">"CDELT1"</span>, cdelt1 ) ;
-<a name="l01126"></a>01126     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT1"</span>, <span class="stringliteral">"pixel scale"</span>) ;
-<a name="l01127"></a>01127 
-<a name="l01128"></a>01128 
-<a name="l01129"></a>01129     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT1"</span>,0);
-<a name="l01130"></a>01130     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT1"</span>,  <span class="stringliteral">"CUNIT1"</span>, <span class="stringliteral">"Pixel"</span> );
-<a name="l01131"></a>01131     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT1"</span>,  <span class="stringliteral">"spectral unit"</span> );
-<a name="l01132"></a>01132 
-<a name="l01133"></a>01133 }
-<a name="l01134"></a>01134 
-<a name="l01135"></a>01135 
-<a name="l01136"></a>01136 
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138 
-<a name="l01147"></a>01147 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01148"></a>01148 sinfo_set_spect_coord2(cpl_propertylist** plist,
-<a name="l01149"></a>01149                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix2,
-<a name="l01150"></a>01150                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,
-<a name="l01151"></a>01151                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2)
-<a name="l01152"></a>01152 {
-<a name="l01153"></a>01153 
-<a name="l01154"></a>01154     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE2"</span>,0);
-<a name="l01155"></a>01155     cpl_propertylist_insert_after_string(*plist, <span class="stringliteral">"EXPTIME"</span>,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"WAVE"</span> );
-<a name="l01156"></a>01156     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"wavelength axis in microns"</span>);
-<a name="l01157"></a>01157 
-<a name="l01158"></a>01158     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX2"</span>,0);
-<a name="l01159"></a>01159     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CTYPE2"</span>,  <span class="stringliteral">"CRPIX2"</span>,(<span class="keywordtype">double</span>)crpix2 ) ;
-<a name="l01160"></a>01160     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX2"</span>, <span class="stringliteral">"Reference pixel in x"</span>) ;
-<a name="l01161"></a>01161 
-<a name="l01162"></a>01162     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL2"</span>,0);
-<a name="l01163"></a>01163     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"CRVAL2"</span>,crval2 ) ;
-<a name="l01164"></a>01164     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CRVAL2"</span>, <span class="stringliteral">"central wavelength"</span>) ;
-<a name="l01165"></a>01165 
-<a name="l01166"></a>01166     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT2"</span>,0);
-<a name="l01167"></a>01167     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRVAL2"</span>, <span class="stringliteral">"CDELT2"</span>,cdelt2);
-<a name="l01168"></a>01168     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT2"</span>, <span class="stringliteral">"microns per pixel"</span>);
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT2"</span>,0);
-<a name="l01171"></a>01171     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT2"</span>,  <span class="stringliteral">"CUNIT2"</span>, <span class="stringliteral">"um"</span>);
-<a name="l01172"></a>01172     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT2"</span>,  <span class="stringliteral">"spectral unit"</span> );
-<a name="l01173"></a>01173 
-<a name="l01174"></a>01174 
-<a name="l01175"></a>01175 }
-<a name="l01185"></a>01185 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01186"></a>01186 sinfo_new_change_plist_spectrum (cpl_propertylist * plist,
-<a name="l01187"></a>01187                 <span class="keywordtype">double</span> cenLambda,
-<a name="l01188"></a>01188                 <span class="keywordtype">double</span> dispersion,
-<a name="l01189"></a>01189                 <span class="keywordtype">int</span>   cenpix)
-<a name="l01190"></a>01190 {
-<a name="l01191"></a>01191 
-<a name="l01192"></a>01192   <span class="keywordtype">int</span> crpix1=1;
-<a name="l01193"></a>01193   <span class="keywordtype">double</span> crval1=1;
-<a name="l01194"></a>01194   <span class="keywordtype">double</span> cdelt1=1;
-<a name="l01195"></a>01195 
-<a name="l01196"></a>01196   <span class="keywordtype">int</span> crpix2=cenpix;
-<a name="l01197"></a>01197   <span class="keywordtype">double</span> crval2=cenLambda;
-<a name="l01198"></a>01198   <span class="keywordtype">double</span> cdelt2=dispersion;
-<a name="l01199"></a>01199 
-<a name="l01200"></a>01200 
-<a name="l01201"></a>01201 
-<a name="l01202"></a>01202   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE3"</span>,0);
-<a name="l01203"></a>01203   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX3"</span>,0);
-<a name="l01204"></a>01204   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL3"</span>,0);
-<a name="l01205"></a>01205   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT3"</span>,0);
-<a name="l01206"></a>01206   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT3"</span>,0);
-<a name="l01207"></a>01207 
-<a name="l01208"></a>01208   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE2"</span>,0);
-<a name="l01209"></a>01209   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX2"</span>,0);
-<a name="l01210"></a>01210   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL2"</span>,0);
-<a name="l01211"></a>01211   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT2"</span>,0);
-<a name="l01212"></a>01212   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT2"</span>,0);
-<a name="l01213"></a>01213 
-<a name="l01214"></a>01214 
-<a name="l01215"></a>01215   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD1_1"</span>,0);
-<a name="l01216"></a>01216   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD1_2"</span>,0);
-<a name="l01217"></a>01217   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD2_1"</span>,0);
-<a name="l01218"></a>01218   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD2_2"</span>,0);
-<a name="l01219"></a>01219 
-<a name="l01220"></a>01220 
-<a name="l01221"></a>01221 
-<a name="l01222"></a>01222 
-<a name="l01223"></a>01223   sinfo_set_spect_coord1(&plist,crpix1,crval1,cdelt1);
-<a name="l01224"></a>01224   sinfo_set_spect_coord2(&plist,crpix2,crval2,cdelt2);
-<a name="l01225"></a>01225 
-<a name="l01226"></a>01226 
-<a name="l01227"></a>01227 
-<a name="l01228"></a>01228 }
-<a name="l01238"></a>01238 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l01239"></a>01239 sinfo_new_change_plist_image (cpl_propertylist * plist,
-<a name="l01240"></a>01240             <span class="keywordtype">float</span> center_x,
-<a name="l01241"></a>01241             <span class="keywordtype">float</span> center_y )
-<a name="l01242"></a>01242 {
-<a name="l01243"></a>01243 
-<a name="l01244"></a>01244     <span class="keywordtype">float</span> pixelscale ;
-<a name="l01245"></a>01245     <span class="keywordtype">double</span> ra ;
-<a name="l01246"></a>01246     <span class="keywordtype">double</span> dec ;
-<a name="l01247"></a>01247     <span class="keywordtype">double</span> angle ;
-<a name="l01248"></a>01248     <span class="keywordtype">float</span> radangle ;
-<a name="l01249"></a>01249     <span class="keywordtype">float</span> cd1_1, cd1_2, cd2_1, cd2_2 ;
-<a name="l01250"></a>01250     <span class="keywordtype">char</span> firsttext[2*FILE_NAME_SZ] ;
-<a name="l01251"></a>01251     <span class="keywordtype">int</span> sign_swap = -1;
-<a name="l01252"></a>01252 
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     <span class="keywordtype">double</span> cdelt1=0;
-<a name="l01255"></a>01255     <span class="keywordtype">double</span> cdelt2=0;
-<a name="l01256"></a>01256 
-<a name="l01257"></a>01257     <span class="keywordtype">double</span> crpix1=center_x;
-<a name="l01258"></a>01258     <span class="keywordtype">double</span> crpix2=center_y;
-<a name="l01259"></a>01259 
-<a name="l01260"></a>01260     <span class="keywordtype">double</span> crval1=0;
-<a name="l01261"></a>01261     <span class="keywordtype">double</span> crval2=0;
-<a name="l01262"></a>01262 
-<a name="l01263"></a>01263 
-<a name="l01264"></a>01264 
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266     strcpy(firsttext, <span class="stringliteral">"sinfo_rec_objnod -f \0"</span>) ;
-<a name="l01267"></a>01267 
-<a name="l01268"></a>01268     pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;
-<a name="l01269"></a>01269     ra = sinfo_pfits_get_ra(plist) ;
-<a name="l01270"></a>01270     dec = sinfo_pfits_get_DEC(plist) ;
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272 
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274     <span class="comment">//get better coordinate values</span>
-<a name="l01275"></a>01275     ra=sinfo_pfits_get_targ_alpha(plist);
-<a name="l01276"></a>01276     dec=sinfo_pfits_get_targ_delta(plist);
-<a name="l01277"></a>01277     ra=sinfo_hms2deg(ra);
-<a name="l01278"></a>01278     dec=sinfo_sess2deg(dec);
-<a name="l01279"></a>01279 
-<a name="l01280"></a>01280 
-<a name="l01281"></a>01281 
-<a name="l01282"></a>01282     crval1=ra;
-<a name="l01283"></a>01283     crval2=dec;
-<a name="l01284"></a>01284 
-<a name="l01285"></a>01285     angle = sinfo_pfits_get_posangle(plist) ;
-<a name="l01286"></a>01286     <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span>
-<a name="l01287"></a>01287     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01288"></a>01288        cpl_error_reset();
-<a name="l01289"></a>01289     }
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291     radangle = angle * PI_NUMB / 180. ;
-<a name="l01292"></a>01292 
-<a name="l01293"></a>01293     cdelt1=sign_swap * pixelscale / 3600. ;
-<a name="l01294"></a>01294     cdelt2=            pixelscale / 3600. ;
-<a name="l01295"></a>01295 
-<a name="l01296"></a>01296 
-<a name="l01297"></a>01297     cd1_1 = +cdelt1*cos(radangle) ;
-<a name="l01298"></a>01298     cd1_2 = -cdelt2*sin(radangle) ;
-<a name="l01299"></a>01299     cd2_1 = +cdelt1*sin(radangle) ;
-<a name="l01300"></a>01300     cd2_2 = +cdelt2*cos(radangle) ;
-<a name="l01301"></a>01301 
-<a name="l01302"></a>01302 
-<a name="l01303"></a>01303 
-<a name="l01304"></a>01304 
-<a name="l01305"></a>01305 
-<a name="l01306"></a>01306     check_nomsg(sinfo_set_coord1(&plist,crpix1,crval1,cdelt1));
-<a name="l01307"></a>01307     check_nomsg(sinfo_set_coord2(&plist,crpix2,crval2,cdelt2));
-<a name="l01308"></a>01308     check_nomsg(sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2));
-<a name="l01309"></a>01309 
-<a name="l01310"></a>01310 
-<a name="l01311"></a>01311  cleanup:
-<a name="l01312"></a>01312     <span class="keywordflow">return</span>;
-<a name="l01313"></a>01313 }
-<a name="l01314"></a>01314 
-<a name="l01322"></a>01322 cpl_imagelist**
-<a name="l01323"></a>01323 sinfo_new_sinfoni_correct_median(cpl_imagelist** cubes, <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes)
-<a name="l01324"></a>01324 {
-<a name="l01325"></a>01325   <span class="keywordtype">int</span> i=0;
-<a name="l01326"></a>01326   cpl_imagelist** cubes_cor=NULL;
-<a name="l01327"></a>01327   <span class="keywordtype">double</span> local_median=0;
-<a name="l01328"></a>01328   <span class="keywordtype">int</span> z=0;
-<a name="l01329"></a>01329   cpl_image* i_img=NULL;
-<a name="l01330"></a>01330   cpl_image* o_img=NULL;
-<a name="l01331"></a>01331 
-<a name="l01332"></a>01332 
-<a name="l01333"></a>01333   <span class="keywordflow">if</span> ( cubes == NULL ) {
-<a name="l01334"></a>01334     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l01335"></a>01335     <span class="keywordflow">return</span> NULL ;
-<a name="l01336"></a>01336   }
-<a name="l01337"></a>01337   <span class="keywordflow">if</span> ( n_cubes <= 0 ) {
-<a name="l01338"></a>01338     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l01339"></a>01339     <span class="keywordflow">return</span> NULL ;
-<a name="l01340"></a>01340   }
-<a name="l01341"></a>01341 
-<a name="l01342"></a>01342   cubes_cor = (cpl_imagelist**) cpl_calloc (n_cubes, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;
-<a name="l01343"></a>01343 
-<a name="l01344"></a>01344   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {
-<a name="l01345"></a>01345     cubes_cor[i] = cpl_imagelist_new();
-<a name="l01346"></a>01346     <span class="keywordflow">for</span>(z=0;z< cpl_imagelist_get_size(cubes[i]); z++) {
-<a name="l01347"></a>01347       i_img=cpl_imagelist_get(cubes[i],z);
-<a name="l01348"></a>01348       local_median=cpl_image_get_median(i_img);;
-<a name="l01349"></a>01349       o_img=cpl_image_duplicate(i_img);
-<a name="l01350"></a>01350       <span class="keywordflow">if</span>(!isnan(local_median)) {
-<a name="l01351"></a>01351         cpl_image_subtract_scalar(o_img,local_median);
-<a name="l01352"></a>01352        }
-<a name="l01353"></a>01353       cpl_imagelist_set(cubes_cor[i],o_img,z);
-<a name="l01354"></a>01354     }
-<a name="l01355"></a>01355   }
-<a name="l01356"></a>01356 
-<a name="l01357"></a>01357   <span class="keywordflow">return</span> cubes_cor;
-<a name="l01358"></a>01358 }
-<a name="l01359"></a>01359 
-<a name="l01366"></a>01366 <span class="keywordtype">int</span> sinfo_new_sinfoni_correct_median_it(cpl_imagelist** inp)
-<a name="l01367"></a>01367 {
-<a name="l01368"></a>01368 
-<a name="l01369"></a>01369   <span class="keywordtype">double</span> local_median=0;
-<a name="l01370"></a>01370   <span class="keywordtype">int</span> z=0;
-<a name="l01371"></a>01371   cpl_image* img=NULL;
-<a name="l01372"></a>01372 
-<a name="l01373"></a>01373   <span class="keywordflow">for</span>(z=0;z< cpl_imagelist_get_size((*inp)); z++) {
-<a name="l01374"></a>01374     img=cpl_imagelist_get((*inp),z);
-<a name="l01375"></a>01375     local_median=sinfo_new_my_median_image(img);
-<a name="l01376"></a>01376     <span class="keywordflow">if</span>(!isnan(local_median)) {
-<a name="l01377"></a>01377       cpl_image_subtract_scalar(img,local_median);
-<a name="l01378"></a>01378     }  <span class="keywordflow">else</span> {
-<a name="l01379"></a>01379       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"local_median is NAN"</span>);
-<a name="l01380"></a>01380     }
-<a name="l01381"></a>01381     cpl_imagelist_set((*inp),img,z);
-<a name="l01382"></a>01382   }
-<a name="l01383"></a>01383 
-<a name="l01384"></a>01384   <span class="keywordflow">return</span> 0;
-<a name="l01385"></a>01385 }
-<a name="l01386"></a>01386 
-<a name="l01396"></a>01396 cpl_imagelist** sinfo_new_sinfoni_correct_sky(cpl_imagelist** cubes,
-<a name="l01397"></a>01397                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,
-<a name="l01398"></a>01398                   cpl_imagelist* sky_cube)
-<a name="l01399"></a>01399 
-<a name="l01400"></a>01400 {
-<a name="l01401"></a>01401   cpl_imagelist** cubes_sky=NULL;
-<a name="l01402"></a>01402   <span class="keywordtype">int</span> x=0;
-<a name="l01403"></a>01403   <span class="keywordtype">int</span> y=0;
-<a name="l01404"></a>01404   <span class="keywordtype">int</span> z=0;
-<a name="l01405"></a>01405   <span class="keywordtype">int</span> i=0;
-<a name="l01406"></a>01406   <span class="keywordtype">float</span> k=0.5;
-<a name="l01407"></a>01407   <span class="keywordtype">int</span> ovr=0;
-<a name="l01408"></a>01408   <span class="keywordtype">int</span> ks=0;
-<a name="l01409"></a>01409   <span class="keywordtype">int</span> nclip=0;
-<a name="l01410"></a>01410   <span class="keywordtype">double</span> med=0;
-<a name="l01411"></a>01411   <span class="keywordtype">double</span> avg=0;
-<a name="l01412"></a>01412   <span class="keywordtype">double</span> sig=0;
-<a name="l01413"></a>01413   <span class="keywordtype">int</span> msk_sum=0;
-<a name="l01414"></a>01414   <span class="keywordtype">double</span> val_msk_sum=0;
-<a name="l01415"></a>01415   cpl_vector* val=NULL;
-<a name="l01416"></a>01416   cpl_vector* msk=NULL;
-<a name="l01417"></a>01417   <span class="keywordtype">int</span> ilx=0;
-<a name="l01418"></a>01418   <span class="keywordtype">int</span> ily=0;
-<a name="l01419"></a>01419   <span class="keywordtype">int</span> inp=0;
-<a name="l01420"></a>01420 
-<a name="l01421"></a>01421 
-<a name="l01422"></a>01422   <span class="keywordtype">int</span> sky_lx=0;
-<a name="l01423"></a>01423   <span class="keywordtype">int</span> sky_ly=0;
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425   <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01426"></a>01426   <span class="keywordtype">float</span>* p_sky_data=NULL;
-<a name="l01427"></a>01427   cpl_image* i_img=NULL;
-<a name="l01428"></a>01428   cpl_image* sky_img=NULL;
-<a name="l01429"></a>01429 
-<a name="l01430"></a>01430 
-<a name="l01431"></a>01431   <span class="keywordflow">if</span> ( cubes == NULL ) {
-<a name="l01432"></a>01432     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l01433"></a>01433     <span class="keywordflow">return</span> NULL ;
-<a name="l01434"></a>01434   }
-<a name="l01435"></a>01435   ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));
-<a name="l01436"></a>01436   ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));
-<a name="l01437"></a>01437   inp=cpl_imagelist_get_size(cubes[0]);
-<a name="l01438"></a>01438 
-<a name="l01439"></a>01439 
-<a name="l01440"></a>01440   sky_lx=cpl_image_get_size_x(cpl_imagelist_get(sky_cube,0));
-<a name="l01441"></a>01441   sky_ly=cpl_image_get_size_y(cpl_imagelist_get(sky_cube,0));
-<a name="l01442"></a>01442   <span class="keywordflow">if</span> ( nc <= 0 ) {
-<a name="l01443"></a>01443     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l01444"></a>01444     <span class="keywordflow">return</span> NULL ;
-<a name="l01445"></a>01445   }
-<a name="l01446"></a>01446 
-<a name="l01447"></a>01447   cubes_sky = (cpl_imagelist**) cpl_calloc (nc, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;
-<a name="l01448"></a>01448   <span class="keywordflow">for</span>(z=0;z< inp; z++) {
-<a name="l01449"></a>01449     sky_img=cpl_imagelist_get(sky_cube,z);
-<a name="l01450"></a>01450     p_sky_data=cpl_image_get_data_float(sky_img);
-<a name="l01451"></a>01451     <span class="keywordflow">for</span>(y=0;y< ily; y++) {
-<a name="l01452"></a>01452       <span class="keywordflow">for</span>(x=0;x< ilx; x++) {
-<a name="l01453"></a>01453         <span class="comment">/* here we start to do a k-s clipping */</span>
-<a name="l01454"></a>01454     msk=cpl_vector_new(nc);
-<a name="l01455"></a>01455     <span class="keywordflow">for</span> (i=0;i<nc;i++) {
-<a name="l01456"></a>01456       cpl_vector_set(msk,i,1);
-<a name="l01457"></a>01457     }
-<a name="l01458"></a>01458         nclip=0;
-<a name="l01459"></a>01459         <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {
-<a name="l01460"></a>01460       sig=0;
-<a name="l01461"></a>01461       med=0;
-<a name="l01462"></a>01462       ovr=0;
-<a name="l01463"></a>01463       val=cpl_vector_new(nc-nclip);
-<a name="l01464"></a>01464 
-<a name="l01465"></a>01465       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01466"></a>01466             i_img=cpl_imagelist_get(cubes[i],z);
-<a name="l01467"></a>01467             pidata=cpl_image_get_data_float(i_img);
-<a name="l01468"></a>01468         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&
-<a name="l01469"></a>01469                  (cpl_vector_get(msk,i) != 0) ) {
-<a name="l01470"></a>01470           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)pidata[x+y*ilx]);
-<a name="l01471"></a>01471           ovr++;
-<a name="l01472"></a>01472         }
-<a name="l01473"></a>01473       }
-<a name="l01474"></a>01474 
-<a name="l01475"></a>01475       <span class="keywordflow">if</span>(ovr>0) {
-<a name="l01476"></a>01476         avg=cpl_vector_get_mean(val);
-<a name="l01477"></a>01477         med=cpl_vector_get_median_const(val);
-<a name="l01478"></a>01478         <span class="keywordflow">if</span>(ovr>1) {
-<a name="l01479"></a>01479           sig=cpl_vector_get_stdev(val);
-<a name="l01480"></a>01480         } <span class="keywordflow">else</span> {
-<a name="l01481"></a>01481               sig=0;
-<a name="l01482"></a>01482         }
-<a name="l01483"></a>01483       } <span class="keywordflow">else</span> {
-<a name="l01484"></a>01484         avg=cpl_vector_get(val,0);
-<a name="l01485"></a>01485         med=avg;
-<a name="l01486"></a>01486         sig=0;
-<a name="l01487"></a>01487       }
-<a name="l01488"></a>01488 
-<a name="l01489"></a>01489       cpl_vector_delete(val);
-<a name="l01490"></a>01490       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01491"></a>01491             i_img=cpl_imagelist_get(cubes[i],z);
-<a name="l01492"></a>01492             pidata=cpl_image_get_data_float(i_img);
-<a name="l01493"></a>01493       <span class="comment">/* Do k-s clipping at each pixel */</span>
-<a name="l01494"></a>01494         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&
-<a name="l01495"></a>01495                 (cpl_vector_get(msk,i) != 0)) {
-<a name="l01496"></a>01496           <span class="keywordflow">if</span>(abs((pidata[x+y*ilx]-med))> k*sig) {
-<a name="l01497"></a>01497         cpl_vector_set(msk,i,0);
-<a name="l01498"></a>01498                 nclip++;
-<a name="l01499"></a>01499           }
-<a name="l01500"></a>01500         }
-<a name="l01501"></a>01501       }
-<a name="l01502"></a>01502     }<span class="comment">/* end of k-s clipping */</span>
-<a name="l01503"></a>01503     msk_sum=0;
-<a name="l01504"></a>01504     val_msk_sum=0;
-<a name="l01505"></a>01505     <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01506"></a>01506       <span class="comment">/* computes sky at each point */</span>
-<a name="l01507"></a>01507       <span class="keywordflow">if</span> (!isnan(pidata[x+y*ilx])) {
-<a name="l01508"></a>01508         msk_sum+=cpl_vector_get(msk,i);
-<a name="l01509"></a>01509                 val_msk_sum+=pidata[x+y*ilx]*
-<a name="l01510"></a>01510           cpl_vector_get(msk,i);
-<a name="l01511"></a>01511       }
-<a name="l01512"></a>01512     }
-<a name="l01513"></a>01513     p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;
-<a name="l01514"></a>01514     cpl_vector_delete(msk);
-<a name="l01515"></a>01515       } <span class="comment">/* end loop over x */</span>
-<a name="l01516"></a>01516     } <span class="comment">/* end loop over y */</span>
-<a name="l01517"></a>01517   } <span class="comment">/* end loop over z */</span>
-<a name="l01518"></a>01518   <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01519"></a>01519     cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);
-<a name="l01520"></a>01520     <span class="comment">/* subtract the variable clean sky */</span>
-<a name="l01521"></a>01521     cpl_imagelist_subtract(cubes_sky[i],sky_cube);
-<a name="l01522"></a>01522 
-<a name="l01523"></a>01523   }
-<a name="l01524"></a>01524 
-<a name="l01525"></a>01525 
-<a name="l01526"></a>01526   <span class="keywordflow">return</span> cubes_sky;
-<a name="l01527"></a>01527 }
-<a name="l01528"></a>01528 
-<a name="l01543"></a>01543 cpl_imagelist** sinfo_new_sinfoni_correct_sky2(cpl_imagelist** cubes,
-<a name="l01544"></a>01544                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,
-<a name="l01545"></a>01545                   cpl_imagelist* sky_cube,
-<a name="l01546"></a>01546                               cpl_imagelist* med_cube,
-<a name="l01547"></a>01547                               cpl_imagelist* msk_cube,
-<a name="l01548"></a>01548                               cpl_imagelist* avg_cube,
-<a name="l01549"></a>01549                               cpl_imagelist* sig_cube,
-<a name="l01550"></a>01550                               cpl_imagelist* ovr_cube)
-<a name="l01551"></a>01551 {
-<a name="l01552"></a>01552   cpl_imagelist** cubes_sky=NULL;
-<a name="l01553"></a>01553   <span class="keywordtype">int</span> x=0;
-<a name="l01554"></a>01554   <span class="keywordtype">int</span> y=0;
-<a name="l01555"></a>01555   <span class="keywordtype">int</span> z=0;
-<a name="l01556"></a>01556   <span class="keywordtype">int</span> i=0;
-<a name="l01557"></a>01557   <span class="keywordtype">float</span> k=0.5;
-<a name="l01558"></a>01558   <span class="keywordtype">int</span> ovr=0;
-<a name="l01559"></a>01559   <span class="keywordtype">int</span> ks=0;
-<a name="l01560"></a>01560   <span class="keywordtype">int</span> nclip=0;
-<a name="l01561"></a>01561   <span class="keywordtype">double</span> med=0;
-<a name="l01562"></a>01562   <span class="keywordtype">double</span> avg=0;
-<a name="l01563"></a>01563   <span class="keywordtype">double</span> sig=0;
-<a name="l01564"></a>01564   <span class="keywordtype">int</span> msk_sum=0;
-<a name="l01565"></a>01565   <span class="keywordtype">double</span> val_msk_sum=0;
-<a name="l01566"></a>01566   cpl_vector* val=NULL;
-<a name="l01567"></a>01567   cpl_vector* msk=NULL;
-<a name="l01568"></a>01568 
-<a name="l01569"></a>01569   <span class="keywordtype">int</span> ilx=0;
-<a name="l01570"></a>01570   <span class="keywordtype">int</span> ily=0;
-<a name="l01571"></a>01571   <span class="keywordtype">int</span> inp=0;
-<a name="l01572"></a>01572 
-<a name="l01573"></a>01573   <span class="keywordtype">int</span> ovr_lx=0;
-<a name="l01574"></a>01574   <span class="keywordtype">int</span> msk_lx=0;
-<a name="l01575"></a>01575   <span class="keywordtype">int</span> avg_lx=0;
-<a name="l01576"></a>01576   <span class="keywordtype">int</span> sig_lx=0;
-<a name="l01577"></a>01577   <span class="keywordtype">int</span> sky_lx=0;
-<a name="l01578"></a>01578   <span class="keywordtype">int</span> med_lx=0;
-<a name="l01579"></a>01579 
-<a name="l01580"></a>01580 
-<a name="l01581"></a>01581   <span class="keywordtype">float</span>* p_ovr_data=NULL;
-<a name="l01582"></a>01582   <span class="keywordtype">float</span>* p_msk_data=NULL;
-<a name="l01583"></a>01583   <span class="keywordtype">float</span>* p_avg_data=NULL;
-<a name="l01584"></a>01584   <span class="keywordtype">float</span>* p_sig_data=NULL;
-<a name="l01585"></a>01585   <span class="keywordtype">float</span>* p_sky_data=NULL;
-<a name="l01586"></a>01586   <span class="keywordtype">float</span>* p_med_data=NULL;
-<a name="l01587"></a>01587 
-<a name="l01588"></a>01588   <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01589"></a>01589 
-<a name="l01590"></a>01590   <span class="keywordflow">if</span> ( cubes == NULL ) {
-<a name="l01591"></a>01591     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;
-<a name="l01592"></a>01592     <span class="keywordflow">return</span> NULL ;
-<a name="l01593"></a>01593   }
-<a name="l01594"></a>01594 
-<a name="l01595"></a>01595   ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));
-<a name="l01596"></a>01596   ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));
-<a name="l01597"></a>01597   inp=cpl_imagelist_get_size(cubes[0]);
-<a name="l01598"></a>01598 
-<a name="l01599"></a>01599   <span class="keywordflow">if</span> ( nc <= 0 ) {
-<a name="l01600"></a>01600     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;
-<a name="l01601"></a>01601     <span class="keywordflow">return</span> NULL ;
-<a name="l01602"></a>01602   }
-<a name="l01603"></a>01603 
-<a name="l01604"></a>01604   cubes_sky = (cpl_imagelist**) cpl_calloc (nc, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;
-<a name="l01605"></a>01605 
-<a name="l01606"></a>01606   ovr_lx=ilx;
-<a name="l01607"></a>01607   msk_lx=ilx;
-<a name="l01608"></a>01608   avg_lx=ilx;
-<a name="l01609"></a>01609   sig_lx=ilx;
-<a name="l01610"></a>01610   sky_lx=ilx;
-<a name="l01611"></a>01611   med_lx=ilx;
-<a name="l01612"></a>01612 
-<a name="l01613"></a>01613   <span class="keywordflow">for</span>(z=0;z< inp; z++) {
-<a name="l01614"></a>01614     p_ovr_data=cpl_image_get_data_float(cpl_imagelist_get(ovr_cube,z));
-<a name="l01615"></a>01615     p_msk_data=cpl_image_get_data_float(cpl_imagelist_get(msk_cube,z));
-<a name="l01616"></a>01616     p_avg_data=cpl_image_get_data_float(cpl_imagelist_get(avg_cube,z));
-<a name="l01617"></a>01617     p_sig_data=cpl_image_get_data_float(cpl_imagelist_get(sig_cube,z));
-<a name="l01618"></a>01618     p_sky_data=cpl_image_get_data_float(cpl_imagelist_get(sky_cube,z));
-<a name="l01619"></a>01619     p_med_data=cpl_image_get_data_float(cpl_imagelist_get(med_cube,z));
-<a name="l01620"></a>01620 
-<a name="l01621"></a>01621 
-<a name="l01622"></a>01622     <span class="keywordflow">for</span>(y=0;y< ily; y++) {
-<a name="l01623"></a>01623       <span class="keywordflow">for</span>(x=0;x< ilx; x++) {
-<a name="l01624"></a>01624         <span class="comment">/* here we start to do a k-s clipping */</span>
-<a name="l01625"></a>01625     msk=cpl_vector_new(nc);
-<a name="l01626"></a>01626     <span class="keywordflow">for</span> (i=0;i<nc;i++) {
-<a name="l01627"></a>01627       cpl_vector_set(msk,i,1);
-<a name="l01628"></a>01628     }
-<a name="l01629"></a>01629     p_ovr_data[x+y*ovr_lx]=nc;
-<a name="l01630"></a>01630     p_msk_data[x+y*msk_lx]=nc;
-<a name="l01631"></a>01631         nclip=0;
-<a name="l01632"></a>01632         <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {
-<a name="l01633"></a>01633       sig=0;
-<a name="l01634"></a>01634       med=0;
-<a name="l01635"></a>01635       ovr=0;
-<a name="l01636"></a>01636       val=cpl_vector_new(nc-nclip);
-<a name="l01637"></a>01637 
-<a name="l01638"></a>01638       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01639"></a>01639             pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
-<a name="l01640"></a>01640         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&
-<a name="l01641"></a>01641                  (cpl_vector_get(msk,i) != 0) ) {
-<a name="l01642"></a>01642           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)pidata[x+y*ilx]);
-<a name="l01643"></a>01643           ovr++;
-<a name="l01644"></a>01644         }
-<a name="l01645"></a>01645       }
-<a name="l01646"></a>01646 
-<a name="l01647"></a>01647       <span class="keywordflow">if</span>(ovr>1) {
-<a name="l01648"></a>01648         avg=cpl_vector_get_mean(val);
-<a name="l01649"></a>01649         med=cpl_vector_get_median_const(val);
-<a name="l01650"></a>01650         sig=cpl_vector_get_stdev(val);
-<a name="l01651"></a>01651       } <span class="keywordflow">else</span> {
-<a name="l01652"></a>01652         avg=cpl_vector_get(val,0);
-<a name="l01653"></a>01653         med=avg;
-<a name="l01654"></a>01654         sig=0;
-<a name="l01655"></a>01655       }
-<a name="l01656"></a>01656 
-<a name="l01657"></a>01657       p_med_data[x+y*med_lx]=med;
-<a name="l01658"></a>01658       p_avg_data[x+y*avg_lx]=avg;
-<a name="l01659"></a>01659       p_sig_data[x+y*sig_lx]=sig;
-<a name="l01660"></a>01660       cpl_vector_delete(val);
-<a name="l01661"></a>01661       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01662"></a>01662            pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
-<a name="l01663"></a>01663       <span class="comment">/* Do k-s clipping at each pixel */</span>
-<a name="l01664"></a>01664         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&
-<a name="l01665"></a>01665                 (cpl_vector_get(msk,i) != 0)) {
-<a name="l01666"></a>01666           <span class="keywordflow">if</span>(abs((pidata[x+y*ilx]-med))> k*sig) {
-<a name="l01667"></a>01667         <span class="comment">/* pidata[x+y*ilx]=0; */</span>
-<a name="l01668"></a>01668         p_msk_data[x+y*msk_lx]-=1;
-<a name="l01669"></a>01669         cpl_vector_set(msk,i,0);
-<a name="l01670"></a>01670                 nclip++;
-<a name="l01671"></a>01671           }
-<a name="l01672"></a>01672         }
-<a name="l01673"></a>01673       }
-<a name="l01674"></a>01674     }<span class="comment">/* end of k-s clipping */</span>
-<a name="l01675"></a>01675     msk_sum=0;
-<a name="l01676"></a>01676     val_msk_sum=0;
-<a name="l01677"></a>01677     <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01678"></a>01678            pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));
-<a name="l01679"></a>01679       <span class="comment">/* computes sky at each point */</span>
-<a name="l01680"></a>01680       <span class="keywordflow">if</span> (!isnan(pidata[x+y*ilx])) {
-<a name="l01681"></a>01681         <span class="comment">/*</span>
-<a name="l01682"></a>01682 <span class="comment">        msk_sum+=p_msk_data[x+y*msk_lx];</span>
-<a name="l01683"></a>01683 <span class="comment">                val_msk_sum+=pidata[x+y*cubes[i]->lx]*</span>
-<a name="l01684"></a>01684 <span class="comment">          p_msk_data[x+y*msk_lx];</span>
-<a name="l01685"></a>01685 <span class="comment">        */</span>
-<a name="l01686"></a>01686         msk_sum+=cpl_vector_get(msk,i);
-<a name="l01687"></a>01687                 val_msk_sum+=pidata[x+y*ilx]*
-<a name="l01688"></a>01688           cpl_vector_get(msk,i);
-<a name="l01689"></a>01689       }
-<a name="l01690"></a>01690     }
-<a name="l01691"></a>01691     p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;
-<a name="l01692"></a>01692     cpl_vector_delete(msk);
-<a name="l01693"></a>01693       } <span class="comment">/* end loop over x */</span>
-<a name="l01694"></a>01694     } <span class="comment">/* end loop over y */</span>
-<a name="l01695"></a>01695   } <span class="comment">/* end loop over z */</span>
-<a name="l01696"></a>01696   <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {
-<a name="l01697"></a>01697     cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);
-<a name="l01698"></a>01698     <span class="comment">/* subtract the variable clean sky */</span>
-<a name="l01699"></a>01699     cpl_imagelist_subtract(cubes_sky[i],sky_cube);
-<a name="l01700"></a>01700   }
-<a name="l01701"></a>01701 
-<a name="l01702"></a>01702 
-<a name="l01703"></a>01703   <span class="keywordflow">return</span> cubes_sky;
-<a name="l01704"></a>01704 }
-<a name="l01705"></a>01705 
-<a name="l01706"></a>01706 
-<a name="l01719"></a>01719 <span class="keywordtype">int</span>
-<a name="l01720"></a>01720 sinfo_new_assign_offset(<span class="keyword">const</span> <span class="keywordtype">int</span> n,
-<a name="l01721"></a>01721                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l01722"></a>01722                         <span class="keywordtype">float</span>* offsetx,
-<a name="l01723"></a>01723                         <span class="keywordtype">float</span>* offsety,
-<a name="l01724"></a>01724                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,
-<a name="l01725"></a>01725                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy)
-<a name="l01726"></a>01726 {
-<a name="l01727"></a>01727 
-<a name="l01728"></a>01728   <span class="keywordtype">float</span> offx=0;
-<a name="l01729"></a>01729   <span class="keywordtype">float</span> offy=0;
-<a name="l01730"></a>01730   <span class="keywordtype">double</span> mjd_obs=0;
-<a name="l01731"></a>01731   <span class="comment">/*</span>
-<a name="l01732"></a>01732 <span class="comment">  double pixelscale=0;</span>
-<a name="l01733"></a>01733 <span class="comment">  double angle=0;</span>
-<a name="l01734"></a>01734 <span class="comment">  double radangle=0;</span>
-<a name="l01735"></a>01735 <span class="comment">  double cd1_1=0;</span>
-<a name="l01736"></a>01736 <span class="comment">  double cd1_2=0;</span>
-<a name="l01737"></a>01737 <span class="comment">  double cd2_1=0;</span>
-<a name="l01738"></a>01738 <span class="comment">  double cd2_2=0;</span>
-<a name="l01739"></a>01739 <span class="comment">  double ra=0;</span>
-<a name="l01740"></a>01740 <span class="comment">  double dec=0;</span>
-<a name="l01741"></a>01741 <span class="comment">  */</span>
-<a name="l01742"></a>01742 
-<a name="l01743"></a>01743   cpl_propertylist * plist=NULL;
-<a name="l01744"></a>01744   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);
-<a name="l01745"></a>01745 
-<a name="l01746"></a>01746   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l01747"></a>01747     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);
-<a name="l01748"></a>01748     cpl_propertylist_delete(plist) ;
-<a name="l01749"></a>01749     <span class="keywordflow">return</span> -1 ;
-<a name="l01750"></a>01750   }
-<a name="l01751"></a>01751 
-<a name="l01752"></a>01752   offx = sinfo_pfits_get_cumoffsetx(plist) - ref_offx ;  <span class="comment">/* was - */</span>
-<a name="l01753"></a>01753   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01754"></a>01754     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;
-<a name="l01755"></a>01755     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" Set relative offset to 0 - %f!"</span>,ref_offx) ;
-<a name="l01756"></a>01756     offx =  - ref_offx;
-<a name="l01757"></a>01757     cpl_error_reset();
-<a name="l01758"></a>01758     <span class="comment">/* return -1 ; */</span>
-<a name="l01759"></a>01759   }
-<a name="l01760"></a>01760 
-<a name="l01761"></a>01761   offy = sinfo_pfits_get_cumoffsety(plist) - ref_offy ; <span class="comment">/* was - */</span>
-<a name="l01762"></a>01762   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01763"></a>01763     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;
-<a name="l01764"></a>01764     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" Set relative offset to 0 - %f!"</span>,ref_offx) ;
-<a name="l01765"></a>01765     offy =  - ref_offy;
-<a name="l01766"></a>01766     cpl_error_reset();
-<a name="l01767"></a>01767     <span class="comment">/* return -1 ; */</span>
-<a name="l01768"></a>01768   }
-<a name="l01769"></a>01769   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);
-<a name="l01770"></a>01770 
-<a name="l01771"></a>01771   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
-<a name="l01772"></a>01772     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
-<a name="l01773"></a>01773   } <span class="keywordflow">else</span> {
-<a name="l01774"></a>01774     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);
-<a name="l01775"></a>01775     cpl_propertylist_delete(plist) ;
-<a name="l01776"></a>01776     <span class="keywordflow">return</span> -1;
-<a name="l01777"></a>01777   }
-<a name="l01778"></a>01778 
-<a name="l01779"></a>01779   cpl_propertylist_delete(plist) ;
-<a name="l01780"></a>01780 
-<a name="l01781"></a>01781   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {
-<a name="l01782"></a>01782     <span class="comment">/* April 1st 2006 */</span>
-<a name="l01783"></a>01783     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span>
-<a name="l01784"></a>01784     sinfo_new_array_set_value(offsetx,2*offx,n);
-<a name="l01785"></a>01785     sinfo_new_array_set_value(offsety,2*offy,n);
-<a name="l01786"></a>01786   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
-<a name="l01787"></a>01787     <span class="comment">/* after detector's upgrade */</span>
-<a name="l01788"></a>01788     <span class="comment">/*</span>
-<a name="l01789"></a>01789 <span class="comment">    sinfo_new_array_set_value(offsetx,-offx*2,n);</span>
-<a name="l01790"></a>01790 <span class="comment">    sinfo_new_array_set_value(offsety,+offy*2,n);</span>
-<a name="l01791"></a>01791 <span class="comment">    */</span>
-<a name="l01792"></a>01792     sinfo_new_array_set_value(offsetx,-2*offx,n);
-<a name="l01793"></a>01793     sinfo_new_array_set_value(offsety,2*offy,n);
-<a name="l01794"></a>01794   } <span class="keywordflow">else</span> {
-<a name="l01795"></a>01795     <span class="comment">/* before detector's upgrade */</span>
-<a name="l01796"></a>01796     <span class="comment">/*</span>
-<a name="l01797"></a>01797 <span class="comment">    sinfo_new_array_set_value(offsetx,+offx*2,n);</span>
-<a name="l01798"></a>01798 <span class="comment">    sinfo_new_array_set_value(offsety,-offy*2,n);</span>
-<a name="l01799"></a>01799 <span class="comment">    */</span>
-<a name="l01800"></a>01800     sinfo_new_array_set_value(offsetx,2*offx,n);
-<a name="l01801"></a>01801     sinfo_new_array_set_value(offsety,-2*offy,n);
-<a name="l01802"></a>01802   }
-<a name="l01803"></a>01803 
-<a name="l01804"></a>01804   <span class="keywordflow">return</span> 0;
-<a name="l01805"></a>01805 
-<a name="l01806"></a>01806 
-<a name="l01807"></a>01807 }
-<a name="l01808"></a>01808 
-<a name="l01809"></a>01809 
-<a name="l01810"></a>01810 
-<a name="l01811"></a>01811 
-<a name="l01812"></a>01812 
-<a name="l01825"></a>01825 <span class="keywordtype">int</span>
-<a name="l01826"></a>01826 sinfo_new_assign_offset2(<span class="keyword">const</span> <span class="keywordtype">int</span> n,
-<a name="l01827"></a>01827                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l01828"></a>01828                         <span class="keywordtype">float</span>* offsetx,
-<a name="l01829"></a>01829                         <span class="keywordtype">float</span>* offsety,
-<a name="l01830"></a>01830                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,
-<a name="l01831"></a>01831                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy)
-<a name="l01832"></a>01832 {
-<a name="l01833"></a>01833 
-<a name="l01834"></a>01834   <span class="keywordtype">float</span> offx=0;
-<a name="l01835"></a>01835   <span class="keywordtype">float</span> offy=0;
-<a name="l01836"></a>01836   <span class="keywordtype">double</span> mjd_obs=0;
-<a name="l01837"></a>01837 
-<a name="l01838"></a>01838   cpl_propertylist * plist=NULL;
-<a name="l01839"></a>01839   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets as set by user"</span>);
-<a name="l01840"></a>01840   offx = offsetx[n] - ref_offx ;  <span class="comment">/* was - */</span>
-<a name="l01841"></a>01841   offy = offsety[n] - ref_offy ;  <span class="comment">/* was - */</span>
-<a name="l01842"></a>01842   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);
-<a name="l01843"></a>01843 
-<a name="l01844"></a>01844   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);
-<a name="l01845"></a>01845 
-<a name="l01846"></a>01846   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l01847"></a>01847     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);
-<a name="l01848"></a>01848     cpl_propertylist_delete(plist) ;
-<a name="l01849"></a>01849     <span class="keywordflow">return</span> -1 ;
-<a name="l01850"></a>01850   }
-<a name="l01851"></a>01851 
-<a name="l01852"></a>01852   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
-<a name="l01853"></a>01853     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
-<a name="l01854"></a>01854   } <span class="keywordflow">else</span> {
-<a name="l01855"></a>01855     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);
-<a name="l01856"></a>01856     cpl_propertylist_delete(plist) ;
-<a name="l01857"></a>01857     <span class="keywordflow">return</span> -1;
-<a name="l01858"></a>01858   }
-<a name="l01859"></a>01859   cpl_propertylist_delete(plist) ;
-<a name="l01860"></a>01860 
-<a name="l01861"></a>01861   <span class="comment">//sinfo_new_array_set_value(offsetx,-2*offx,n);</span>
-<a name="l01862"></a>01862   <span class="comment">//sinfo_new_array_set_value(offsety,2*offy,n);</span>
-<a name="l01863"></a>01863 
-<a name="l01864"></a>01864   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {
-<a name="l01865"></a>01865     <span class="comment">/* April 1st 2006 */</span>
-<a name="l01866"></a>01866     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span>
-<a name="l01867"></a>01867     sinfo_new_array_set_value(offsetx,2*offx,n);
-<a name="l01868"></a>01868     sinfo_new_array_set_value(offsety,2*offy,n);
-<a name="l01869"></a>01869   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
-<a name="l01870"></a>01870     <span class="comment">/* after detector's upgrade */</span>
-<a name="l01871"></a>01871     <span class="comment">/*</span>
-<a name="l01872"></a>01872 <span class="comment">    sinfo_new_array_set_value(offsetx,-offx*2,n);</span>
-<a name="l01873"></a>01873 <span class="comment">    sinfo_new_array_set_value(offsety,+offy*2,n);</span>
-<a name="l01874"></a>01874 <span class="comment">    */</span>
-<a name="l01875"></a>01875     sinfo_new_array_set_value(offsetx,-2*offx,n);
-<a name="l01876"></a>01876     sinfo_new_array_set_value(offsety,2*offy,n);
-<a name="l01877"></a>01877   } <span class="keywordflow">else</span> {
-<a name="l01878"></a>01878     <span class="comment">/* before detector's upgrade */</span>
-<a name="l01879"></a>01879     <span class="comment">/*</span>
-<a name="l01880"></a>01880 <span class="comment">    sinfo_new_array_set_value(offsetx,+offx*2,n);</span>
-<a name="l01881"></a>01881 <span class="comment">    sinfo_new_array_set_value(offsety,-offy*2,n);</span>
-<a name="l01882"></a>01882 <span class="comment">    */</span>
-<a name="l01883"></a>01883     sinfo_new_array_set_value(offsetx,2*offx,n);
-<a name="l01884"></a>01884     sinfo_new_array_set_value(offsety,-2*offy,n);
-<a name="l01885"></a>01885   }
-<a name="l01886"></a>01886 
-<a name="l01887"></a>01887 
-<a name="l01888"></a>01888   <span class="keywordflow">return</span> 0;
-<a name="l01889"></a>01889 
-<a name="l01890"></a>01890 
-<a name="l01891"></a>01891 }
-<a name="l01892"></a>01892 
-<a name="l01893"></a>01893 
-<a name="l01906"></a>01906 <span class="keywordtype">int</span>
-<a name="l01907"></a>01907 sinfo_new_object_assign_offset(<span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l01908"></a>01908                                <span class="keyword">const</span> <span class="keywordtype">int</span> n,
-<a name="l01909"></a>01909                                <span class="keywordtype">double</span>* ref_offx,
-<a name="l01910"></a>01910                                <span class="keywordtype">double</span>* ref_offy,
-<a name="l01911"></a>01911                                <span class="keywordtype">float</span>** offsetx,
-<a name="l01912"></a>01912                                <span class="keywordtype">float</span>** offsety)
-<a name="l01913"></a>01913 {
-<a name="l01914"></a>01914 
-<a name="l01915"></a>01915   <span class="keywordtype">float</span> offx=0;
-<a name="l01916"></a>01916   <span class="keywordtype">float</span> offy=0;
-<a name="l01917"></a>01917   <span class="keywordtype">double</span> mjd_obs=0;
-<a name="l01918"></a>01918   cpl_propertylist * plist=NULL;
-<a name="l01919"></a>01919   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);
-<a name="l01920"></a>01920 
-<a name="l01921"></a>01921   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {
-<a name="l01922"></a>01922     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);
-<a name="l01923"></a>01923     cpl_propertylist_delete(plist) ;
-<a name="l01924"></a>01924     <span class="keywordflow">return</span> -1 ;
-<a name="l01925"></a>01925   }
-<a name="l01926"></a>01926   <span class="keywordflow">if</span> ( n == 0 ) {
-<a name="l01927"></a>01927 
-<a name="l01928"></a>01928     *ref_offx = sinfo_pfits_get_cumoffsetx(plist) ;
-<a name="l01929"></a>01929     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01930"></a>01930       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;
-<a name="l01931"></a>01931       <span class="comment">/* return -1 ; */</span>
-<a name="l01932"></a>01932       cpl_error_reset();
-<a name="l01933"></a>01933     }
-<a name="l01934"></a>01934 
-<a name="l01935"></a>01935     *ref_offy = sinfo_pfits_get_cumoffsety(plist) ;
-<a name="l01936"></a>01936     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01937"></a>01937       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;
-<a name="l01938"></a>01938       cpl_error_reset();
-<a name="l01939"></a>01939        <span class="comment">/* return -1 ; */</span>
-<a name="l01940"></a>01940     }
-<a name="l01941"></a>01941     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Reference offx=%f offy=%f"</span>,*ref_offx,*ref_offy);
-<a name="l01942"></a>01942 
-<a name="l01943"></a>01943     offx = 0. ;
-<a name="l01944"></a>01944     offy = 0. ;
-<a name="l01945"></a>01945 
-<a name="l01946"></a>01946   } <span class="keywordflow">else</span> {
-<a name="l01947"></a>01947 
-<a name="l01948"></a>01948     offx = sinfo_pfits_get_cumoffsetx(plist) - *ref_offx ;  <span class="comment">/* was - */</span>
-<a name="l01949"></a>01949     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01950"></a>01950       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;
-<a name="l01951"></a>01951       cpl_error_reset();
-<a name="l01952"></a>01952       <span class="comment">/* return -1 ; */</span>
-<a name="l01953"></a>01953     }
-<a name="l01954"></a>01954 
-<a name="l01955"></a>01955     offy = sinfo_pfits_get_cumoffsety(plist) - *ref_offy ; <span class="comment">/* was - */</span>
-<a name="l01956"></a>01956     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l01957"></a>01957       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;
-<a name="l01958"></a>01958       <span class="comment">/* return -1 ; */</span>
-<a name="l01959"></a>01959       cpl_error_reset();
-<a name="l01960"></a>01960     }
-<a name="l01961"></a>01961     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);
-<a name="l01962"></a>01962   }
-<a name="l01963"></a>01963 
-<a name="l01964"></a>01964 
-<a name="l01965"></a>01965     <span class="comment">/* rotate the coordinates</span>
-<a name="l01966"></a>01966 <span class="comment">       offx_rot = cd1_1 * offx + cd2_1 * offy ;</span>
-<a name="l01967"></a>01967 <span class="comment">       offy_rot = cd1_2 * offx + cd2_2 * offy ;</span>
-<a name="l01968"></a>01968 <span class="comment">        convert the coordinates to pixel units</span>
-<a name="l01969"></a>01969 <span class="comment">       offx_rot_pix = offx_rot / pixelscale ;</span>
-<a name="l01970"></a>01970 <span class="comment">       offy_rot_pix = offy_rot / pixelscale ;</span>
-<a name="l01971"></a>01971 <span class="comment">       offsetx[i] = offx_rot_pix ;</span>
-<a name="l01972"></a>01972 <span class="comment">       offsety[i] = offy_rot_pix ;</span>
-<a name="l01973"></a>01973 <span class="comment">    */</span>
-<a name="l01974"></a>01974 
-<a name="l01975"></a>01975 
-<a name="l01976"></a>01976   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
-<a name="l01977"></a>01977     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
-<a name="l01978"></a>01978   } <span class="keywordflow">else</span> {
-<a name="l01979"></a>01979     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);
-<a name="l01980"></a>01980     cpl_propertylist_delete(plist) ;
-<a name="l01981"></a>01981     <span class="keywordflow">return</span> -1;
-<a name="l01982"></a>01982   }
-<a name="l01983"></a>01983 
-<a name="l01984"></a>01984   cpl_propertylist_delete(plist) ;
-<a name="l01985"></a>01985 
-<a name="l01986"></a>01986   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {
-<a name="l01987"></a>01987     <span class="comment">/* April 1st 2006 */</span>
-<a name="l01988"></a>01988     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span>
-<a name="l01989"></a>01989     sinfo_new_array_set_value(*offsetx,2*offx,n);
-<a name="l01990"></a>01990     sinfo_new_array_set_value(*offsety,2*offy,n);
-<a name="l01991"></a>01991   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){
-<a name="l01992"></a>01992     <span class="comment">/* after detector's upgrade */</span>
-<a name="l01993"></a>01993     sinfo_new_array_set_value(*offsetx,-offx*2,n);
-<a name="l01994"></a>01994     sinfo_new_array_set_value(*offsety,+offy*2,n);
-<a name="l01995"></a>01995   } <span class="keywordflow">else</span> {
-<a name="l01996"></a>01996     <span class="comment">/* before detector's upgrade */</span>
-<a name="l01997"></a>01997     sinfo_new_array_set_value(*offsetx,+offx*2,n);
-<a name="l01998"></a>01998     sinfo_new_array_set_value(*offsety,-offy*2,n);
-<a name="l01999"></a>01999   }
-<a name="l02000"></a>02000 
-<a name="l02001"></a>02001   <span class="keywordflow">return</span> 0;
-<a name="l02002"></a>02002 }
-<a name="l02003"></a>02003 
-<a name="l02015"></a>02015 cpl_imagelist*
-<a name="l02016"></a>02016 sinfo_new_fine_tune(cpl_imagelist* cube,
-<a name="l02017"></a>02017               <span class="keywordtype">float</span>* correct_dist,
-<a name="l02018"></a>02018               <span class="keyword">const</span> <span class="keywordtype">char</span>* method,
-<a name="l02019"></a>02019               <span class="keyword">const</span> <span class="keywordtype">int</span> order,
-<a name="l02020"></a>02020               <span class="keyword">const</span> <span class="keywordtype">int</span> nslits) {
-<a name="l02021"></a>02021   <span class="keywordtype">int</span> i =0;
-<a name="l02022"></a>02022   cpl_imagelist* outcube2=NULL;
-<a name="l02023"></a>02023   <span class="keywordtype">float</span>* neg_dist=NULL;
-<a name="l02024"></a>02024   sinfo_msg(<span class="stringliteral">"Finetuning, method=%s"</span>,method);
-<a name="l02025"></a>02025 
-<a name="l02026"></a>02026   <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"P"</span>)==0)
-<a name="l02027"></a>02027     {
-<a name="l02028"></a>02028       outcube2 = sinfo_new_fine_tune_cube( cube, correct_dist, order ) ;
-<a name="l02029"></a>02029       <span class="keywordflow">if</span> (outcube2 == NULL)
-<a name="l02030"></a>02030     {
-<a name="l02031"></a>02031       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;
-<a name="l02032"></a>02032       <span class="keywordflow">return</span> NULL ;
-<a name="l02033"></a>02033     }
-<a name="l02034"></a>02034     }
-<a name="l02035"></a>02035   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"F"</span>)==0)
-<a name="l02036"></a>02036     {
-<a name="l02037"></a>02037       neg_dist=cpl_calloc(nslits,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l02038"></a>02038       <span class="keywordflow">for</span> ( i = 0 ; i < nslits ; i++ )
-<a name="l02039"></a>02039     {
-<a name="l02040"></a>02040       neg_dist[i] = -correct_dist[i] ;
-<a name="l02041"></a>02041     }
-<a name="l02042"></a>02042       outcube2 = sinfo_new_fine_tune_cube_by_FFT( cube, neg_dist ) ;
-<a name="l02043"></a>02043      cpl_free(neg_dist);
-<a name="l02044"></a>02044       <span class="keywordflow">if</span> ( outcube2 == NULL )
-<a name="l02045"></a>02045     {
-<a name="l02046"></a>02046       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;
-<a name="l02047"></a>02047       <span class="keywordflow">return</span> NULL ;
-<a name="l02048"></a>02048     }
-<a name="l02049"></a>02049     }
-<a name="l02050"></a>02050   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"S"</span>)==0)
-<a name="l02051"></a>02051     {
-<a name="l02052"></a>02052       outcube2 = sinfo_new_fine_tune_cube_by_spline( cube, correct_dist ) ;
-<a name="l02053"></a>02053       <span class="keywordflow">if</span> ( outcube2 == NULL )
-<a name="l02054"></a>02054     {
-<a name="l02055"></a>02055       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;
-<a name="l02056"></a>02056       <span class="keywordflow">return</span> NULL ;
-<a name="l02057"></a>02057     }
-<a name="l02058"></a>02058     }
-<a name="l02059"></a>02059   <span class="keywordflow">else</span>
-<a name="l02060"></a>02060     {
-<a name="l02061"></a>02061       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong method indicator given!"</span>) ;
-<a name="l02062"></a>02062       <span class="keywordflow">return</span> NULL ;
-<a name="l02063"></a>02063     }
-<a name="l02064"></a>02064 
-<a name="l02065"></a>02065 
-<a name="l02066"></a>02066 
-<a name="l02067"></a>02067 <span class="keywordflow">return</span> outcube2;
-<a name="l02068"></a>02068 
-<a name="l02069"></a>02069 }
-<a name="l02070"></a>02070 
-<a name="l02071"></a>02071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l02077"></a>02077 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l02078"></a>02078 sinfo_band sinfo_get_associated_filter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f)
-<a name="l02079"></a>02079 {
-<a name="l02080"></a>02080     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02081"></a>02081     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Js"</span>))           <span class="keywordflow">return</span> SINFO_BAND_JS ;
-<a name="l02082"></a>02082     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Z"</span>))            <span class="keywordflow">return</span> SINFO_BAND_Z ;
-<a name="l02083"></a>02083     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SZ"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SZ ;
-<a name="l02084"></a>02084     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SH"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SH ;
-<a name="l02085"></a>02085     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"H"</span>))            <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02086"></a>02086     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Ks"</span>))           <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02087"></a>02087     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"K"</span>))            <span class="keywordflow">return</span> SINFO_BAND_K ;
-<a name="l02088"></a>02088     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SK"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SK ;
-<a name="l02089"></a>02089     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"L"</span>))            <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02090"></a>02090     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SL"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SL ;
-<a name="l02091"></a>02091     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M"</span>))            <span class="keywordflow">return</span> SINFO_BAND_M ;
-<a name="l02092"></a>02092     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M_NB"</span>))         <span class="keywordflow">return</span> SINFO_BAND_M ;
-<a name="l02093"></a>02093     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.06"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02094"></a>02094     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.08"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02095"></a>02095     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02096"></a>02096     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02097"></a>02097     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.26"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02098"></a>02098     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02099"></a>02099     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.64"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02100"></a>02100     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.71"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02101"></a>02101     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02102"></a>02102     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.09"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02103"></a>02103     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.13"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02104"></a>02104     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.17"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02105"></a>02105     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02106"></a>02106     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.25"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02107"></a>02107     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.29"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02108"></a>02108     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.34"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02109"></a>02109     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02110"></a>02110     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02111"></a>02111     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.80"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02112"></a>02112     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_4.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02113"></a>02113     <span class="keywordflow">return</span> SINFO_BAND_UNKNOWN ;
-<a name="l02114"></a>02114 }
-<a name="l02115"></a>02115 
-<a name="l02116"></a>02116 
-<a name="l02117"></a>02117 
-<a name="l02118"></a>02118 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l02124"></a>02124 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l02125"></a>02125 sinfo_band sinfo_get_bbfilter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f)
-<a name="l02126"></a>02126 {
-<a name="l02127"></a>02127     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02128"></a>02128     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J+Block"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02129"></a>02129     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Js"</span>))           <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02130"></a>02130     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Z"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02131"></a>02131     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SZ"</span>))           <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02132"></a>02132     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SH"</span>))           <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02133"></a>02133     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"H"</span>))            <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02134"></a>02134     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Ks"</span>))           <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02135"></a>02135     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"K"</span>))            <span class="keywordflow">return</span> SINFO_BAND_K ;
-<a name="l02136"></a>02136     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SK"</span>))           <span class="keywordflow">return</span> SINFO_BAND_K ;
-<a name="l02137"></a>02137     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"L"</span>))            <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02138"></a>02138     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SL"</span>))           <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02139"></a>02139     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M"</span>))            <span class="keywordflow">return</span> SINFO_BAND_M ;
-<a name="l02140"></a>02140     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M_NB"</span>))         <span class="keywordflow">return</span> SINFO_BAND_M ;
-<a name="l02141"></a>02141     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.06"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02142"></a>02142     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.08"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02143"></a>02143     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02144"></a>02144     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02145"></a>02145     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.26"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02146"></a>02146     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;
-<a name="l02147"></a>02147     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.64"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02148"></a>02148     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.71"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;
-<a name="l02149"></a>02149     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02150"></a>02150     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.09"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02151"></a>02151     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.13"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02152"></a>02152     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.17"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02153"></a>02153     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02154"></a>02154     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.25"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02155"></a>02155     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.29"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02156"></a>02156     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.34"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;
-<a name="l02157"></a>02157     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02158"></a>02158     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02159"></a>02159     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.80"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02160"></a>02160     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_4.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;
-<a name="l02161"></a>02161     <span class="keywordflow">return</span> SINFO_BAND_UNKNOWN ;
-<a name="l02162"></a>02162 }
-<a name="l02163"></a>02163 
-<a name="l02164"></a>02164 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utilities_scired.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span><span class="preprocessor">#include <irplib_stdstar.h></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">//Used only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "sinfo_dfs.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">//Used only for sinfo_band</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_spiffi_types.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> sinfo_sess2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> sess);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> sinfo_set_spect_coord1(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                <span class="keyword">const</span> <span class="keywordtype">int</span> crpix1,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>                <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> sinfo_set_spect_coord2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                <span class="keyword">const</span> <span class="keywordtype">int</span> crpix2,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> sinfo_set_coord1(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix1,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> sinfo_set_coord2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix2,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_set_coord3(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix3,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval3,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt3);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> sinfo_set_cd_matrix2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_1,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_2,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_1,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_2);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> sinfo_set_cd_matrix3(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_3,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_3,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_1,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_2,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_3);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> sinfo_new_change_plist_cube (cpl_propertylist * plist,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                              <span class="keywordtype">float</span> cenLambda,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                              <span class="keywordtype">float</span> dispersion,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                              <span class="keywordtype">int</span>   center_z,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                              <span class="keywordtype">float</span> center_x,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                  <span class="keywordtype">float</span> center_y );</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_new_change_plist_image (cpl_propertylist * plist,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                               <span class="keywordtype">float</span> center_x,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                   <span class="keywordtype">float</span> center_y );</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> sinfo_new_change_plist_spectrum (cpl_propertylist * plist,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                  <span class="keywordtype">double</span> cenLambda,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                  <span class="keywordtype">double</span> dispersion,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                  <span class="keywordtype">int</span>   cenpix);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> sinfo_new_image_getvig(</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         cpl_image    *   image_in,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>         <span class="keywordtype">int</span>             loleft_x,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>         <span class="keywordtype">int</span>             loleft_y,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>         <span class="keywordtype">int</span>             upright_x,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         <span class="keywordtype">int</span>             upright_y);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> sinfo_check_input_data(object_config* cfg)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">if</span> (cfg == NULL)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not parse cpl input!\n"</span>) ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->wavemap) != 1) {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file wavemap %s is not FITS"</span>,cfg->wavemap);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     }</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">if</span> (cfg->halocorrectInd == 1)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>        <span class="keywordflow">if</span>(sinfo_is_fits_file(cfg->halospectrum) != 1) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Input file %s is not FITS"</span>,cfg->halospectrum);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>           <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>        }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     }</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span> (cfg->northsouthInd == 0) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->poslist) != 1)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"File %s with tag %s is not FITS!"</span>,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                           cfg->poslist,PRO_SLIT_POS);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>       <span class="keywordflow">if</span> (sinfo_is_fits_file(cfg->distlist) != 1)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"File %s with tag %s is not FITS!"</span>,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                            cfg->distlist,PRO_SLITLETS_DISTANCE);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> }</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> sinfo_hms2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> hms)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>   <span class="keywordtype">int</span> hrs=0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   <span class="keywordtype">int</span> min=0;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   <span class="keywordtype">double</span> sec=0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   <span class="keywordtype">double</span> deg=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordtype">double</span> rest=hms;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>   <span class="keywordtype">int</span> sign=1;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>   <span class="comment">//sinfo_msg("hms=%f",hms);</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>   <span class="keywordflow">if</span>(hms<0) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     sign=-1;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     rest=-hms;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>   <span class="comment">//sinfo_msg("rest=%f",rest);</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="comment">//sinfo_msg("sign=%d",sign);</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   hrs=(int)(rest/10000.);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   <span class="comment">//sinfo_msg("hrs=%d",hrs);</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   rest=rest-(double)(hrs*10000.);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   min=(int)(rest/100.);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   <span class="comment">//sinfo_msg("min=%d",min);</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   sec=rest-(double)(min*100.);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   <span class="comment">//sinfo_msg("sec=%f",sec);</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   deg=hrs*15+(double)(min/4.)+(double)(sec/240.);</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="comment">//sinfo_msg("deg=%f",deg);</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>   deg=sign*deg;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   <span class="comment">//sinfo_msg("deg=%f",deg);</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>   <span class="keywordflow">return</span> deg;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> sinfo_sess2deg(<span class="keyword">const</span> <span class="keywordtype">double</span> sess)</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   <span class="keywordtype">int</span> grad=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="keywordtype">int</span> min=0;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   <span class="keywordtype">double</span> sec=0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   <span class="keywordtype">double</span> deg=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>   <span class="keywordtype">double</span> rest=sess;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="keywordtype">int</span> sign=1;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="comment">//sinfo_msg("sess=%f",sess);</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   <span class="keywordflow">if</span>(sess<0) {</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     sign=-1;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     rest=-sess;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="comment">//sinfo_msg("rest=%f",rest);</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   <span class="comment">//sinfo_msg("sign=%d",sign);</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   grad=(int)(rest/10000.);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="comment">//sinfo_msg("grad=%d",grad);</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>   rest=rest-(double)(grad*10000.);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   min=(int)(rest/100.);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   <span class="comment">//sinfo_msg("min=%d",min);</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   sec=rest-(double)(min*100.);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   <span class="comment">//sinfo_msg("sec=%f",sec);</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   deg=grad+(double)(min/60.)+(double)(sec/3600.);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="comment">//sinfo_msg("deg=%f",deg);</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   deg=sign*deg;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   <span class="comment">//sinfo_msg("deg=%f",deg);</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="keywordflow">return</span> deg;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> sinfo_auto_size_cube(<span class="keywordtype">float</span>* offsetx,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                       <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                     <span class="keywordtype">float</span>* ref_offx,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                     <span class="keywordtype">float</span>* ref_offy,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                     <span class="keywordtype">int</span>* size_x,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                     <span class="keywordtype">int</span>* size_y)</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   <span class="keywordtype">float</span> offx=0;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>   <span class="keywordtype">float</span> offy=0;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>   <span class="keywordtype">float</span> min_offx=0;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>   <span class="keywordtype">float</span> max_offx=0;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordtype">float</span> min_offy=0;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="keywordtype">float</span> max_offy=0;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   sinfo_msg (<span class="stringliteral">"Computation of output cube size"</span>) ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordflow">for</span> ( n = 0 ; n < nframes ; n++ ) {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     offx = offsetx[n];  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     offy = offsety[n];  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* sinfo_msg("frame %d offx=%f offy=%f",n,offx,offy); */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       min_offx=offx;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>       min_offy=offy;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       max_offx=offx;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>       max_offy=offy;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       <span class="keywordflow">if</span>(offx > max_offx) max_offx=offx;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       <span class="keywordflow">if</span>(offy > max_offy) max_offy=offy;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       <span class="keywordflow">if</span>(offx < min_offx) min_offx=offx;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       <span class="keywordflow">if</span>(offy < min_offy) min_offy=offy;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     }</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">  sinfo_msg("max_offx=%f max_offy=%f",max_offx,max_offy);</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">  sinfo_msg("min_offx=%f min_offy=%f",min_offx,min_offy);</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   *ref_offx=(min_offx+max_offx)/2;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   *ref_offy=(min_offy+max_offy)/2;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   *size_x+=2*floor(max_offx-min_offx+0.5);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   *size_y+=2*floor(max_offy-min_offy+0.5);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>   sinfo_msg(<span class="stringliteral">"Output cube size: %d x %d"</span>,*size_x,*size_y);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   sinfo_msg(<span class="stringliteral">"Ref offset. x: %f y: %f"</span>,*ref_offx,*ref_offy);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Max offset. x: %f y: %f"</span>,max_offx,max_offy);</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Min offset. x: %f y: %f"</span>,min_offx,min_offy);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> sinfo_auto_size_cube5(object_config * cfg,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                     <span class="keywordtype">float</span>* ref_offx, <span class="keywordtype">float</span>* ref_offy,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                     <span class="keywordtype">float</span>* min_offx, <span class="keywordtype">float</span>* min_offy,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                     <span class="keywordtype">float</span>* max_offx, <span class="keywordtype">float</span>* max_offy)</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> {</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   <span class="keywordtype">char</span>* name =NULL;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordtype">float</span> offx=0;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   <span class="keywordtype">float</span> offy=0;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   cpl_propertylist * plist=NULL;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   sinfo_msg (<span class="stringliteral">"Automatic computation of output cube size"</span>) ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   <span class="keywordflow">for</span> ( n = 0 ; n < cfg->nframes ; n++ ) {</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     name = cfg->framelist[n] ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     offx = sinfo_pfits_get_cumoffsetx(plist);  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" set it to  0"</span>);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       offx = 0;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>       cpl_error_reset();</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     offy = sinfo_pfits_get_cumoffsety(plist); <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" set it to 0"</span>);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       offy = 0;</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>       cpl_error_reset();</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>       <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="comment">//sinfo_msg("n=%d offx=%f offy=%f",n,offx,offy);</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordflow">if</span>(n==0) {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>       *min_offx=offx;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>       *min_offy=offy;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>       *max_offx=offx;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>       *max_offy=offy;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       <span class="keywordflow">if</span>(offx > *max_offx) *max_offx=offx;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       <span class="keywordflow">if</span>(offy > *max_offy) *max_offy=offy;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       <span class="keywordflow">if</span>(offx < *min_offx) *min_offx=offx;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <span class="keywordflow">if</span>(offy < *min_offy) *min_offy=offy;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     }</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   }</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   *ref_offx=(*min_offx+*max_offx)/2;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   *ref_offy=(*min_offy+*max_offy)/2;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">if</span>(cfg->size_x == 0) cfg->size_x=2*floor(*max_offx-*min_offx+0.5)+64 ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">/* The formula above doesn't give always the right result (DSF07663)</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment"> * for example, if diff in offset is 35.5, the formula gives 72 but 71 would be</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> <span class="comment"> * enough, the following candidate is working fine:</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment"> *   if(cfg->size_x == 0)</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="comment">      cfg->size_x=floor(2.0*(*max_offx-*min_offx + 0.5 - 0.00001))+64 ;</span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="comment">      Currently the ticket is suspended, because the formula above</span></div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="comment">      would change the scientific results for the previous data.</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="comment">      The same is actual for Y axis.</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   <span class="keywordflow">if</span>(cfg->size_y == 0) cfg->size_y=2*floor(*max_offy-*min_offy+0.5)+64 ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   sinfo_msg(<span class="stringliteral">"Output cube size: %d x %d"</span>,cfg->size_x,cfg->size_y);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   sinfo_msg(<span class="stringliteral">"Ref offset. x: %f y: %f"</span>,*ref_offx,*ref_offy);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   sinfo_msg(<span class="stringliteral">"Max offset. x: %f y: %f"</span>,*max_offx,*max_offy);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   sinfo_msg(<span class="stringliteral">"Min offset. x: %f y: %f"</span>,*min_offx,*min_offy);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> }</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> <span class="keywordtype">float</span>*</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> sinfo_read_distances(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* distlist)</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   <span class="keywordtype">float</span> * distances = NULL;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keywordtype">float</span> tmp_float=0;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keywordtype">char</span> tbl_distances_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   cpl_table* tbl_distances = NULL;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   sinfo_msg(<span class="stringliteral">"Read distances"</span>);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   distances = (<span class="keywordtype">float</span>*) cpl_calloc (nslits - 1, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   <span class="keywordflow">if</span> ( NULL == distances )</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     {</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>             <span class="comment">/*READ TFITS TABLE*/</span></div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Before loading input table"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   strcpy(tbl_distances_name,distlist);</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   tbl_distances = cpl_table_load(tbl_distances_name,1,0);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"loading input table %s"</span>,tbl_distances_name);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>   }</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>   <span class="keywordflow">for</span> (i =0 ; i< nslits-1; i++){</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     tmp_float=cpl_table_get_float(tbl_distances,<span class="stringliteral">"slitlet_distance"</span>,i,status);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"reading col %s from table %s"</span>,<span class="stringliteral">"slitlet_distance"</span>,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                        tbl_distances_name);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     }</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     sinfo_new_array_set_value(distances,tmp_float,i);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   }</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>   cpl_table_delete(tbl_distances);</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   <span class="keywordflow">return</span> distances;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span> }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span> </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> <span class="keywordtype">float</span>**</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> sinfo_read_slitlets_edges(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* poslist)</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> {</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   <span class="keywordtype">char</span> tbl_slitpos_name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   cpl_table* tbl_slitpos=NULL;</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   <span class="keywordtype">int</span>* status=NULL;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   <span class="keywordtype">float</span> edge_x=0;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   <span class="keywordtype">float</span> edge_y=0;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   <span class="keywordtype">float</span> ** slit_edges = NULL;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   slit_edges = sinfo_new_2Dfloatarray(nslits, 2) ;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   strcpy(tbl_slitpos_name,poslist);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error loading tbl %s"</span>,tbl_slitpos_name);</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   }</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   n = cpl_table_get_nrow(tbl_slitpos);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   <span class="keywordflow">if</span> (n != nslits) {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No of slitlets in table is n = %d != %d !"</span>,n,nslits);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   <span class="keywordflow">for</span> (i =0 ; i< nslits; i++){</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     edge_x=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos1"</span>,i,status);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     edge_y=cpl_table_get_double(tbl_slitpos,<span class="stringliteral">"pos2"</span>,i,status);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error reading tbl %s row %d"</span>,tbl_slitpos_name,i);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>     }</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     sinfo_new_array2D_set_value(slit_edges,edge_x,i,0);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     sinfo_new_array2D_set_value(slit_edges,edge_y,i,1);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   }</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   cpl_table_delete(tbl_slitpos);</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error reading tbl %s"</span>,tbl_slitpos_name);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="keywordflow">return</span> slit_edges;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> }</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> cpl_imagelist * sinfo_new_cube_getvig(</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         cpl_imagelist *        cube_in,</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         <span class="keywordtype">int</span>             loleft_x,</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>         <span class="keywordtype">int</span>             loleft_y,</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>         <span class="keywordtype">int</span>             upright_x,</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>         <span class="keywordtype">int</span>             upright_y)</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>     cpl_imagelist     *        cube_out ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>     <span class="keywordtype">int</span>                 i ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     <span class="keywordtype">int</span>                 outlx,</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                                         outly ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> </div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>     <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     <span class="keywordflow">if</span> (cube_in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>     ilx=cpl_image_get_size_x(cpl_imagelist_get(cube_in,0));</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     ily=cpl_image_get_size_y(cpl_imagelist_get(cube_in,0));</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     inp=cpl_imagelist_get_size(cube_in);</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>         <span class="keywordflow">if</span> ((loleft_x>upright_x) ||</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>             (loleft_y>upright_y)) {</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"ill-defined slit for extraction: aborting"</span>);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>         }</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     <span class="comment">/* Extraction coordinates include rectangular zone  */</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>     outlx = upright_x - loleft_x + 1 ;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     outly = upright_y - loleft_y + 1 ;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> <span class="comment">    cube_out = sinfo_new_cube(outlx, outly, cube_in->np) ;</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     cube_out = cpl_imagelist_new() ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="comment">/* Loop on all input planes */</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordflow">for</span> (i=0 ; i<cpl_imagelist_get_size(cube_in) ; i++) {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>       i_img=cpl_imagelist_get(cube_in,i);</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>         <span class="comment">/* Extract a slit from this plane   */</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                 o_img = sinfo_new_image_getvig(i_img,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                         loleft_x, loleft_y,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                         upright_x, upright_y) ;</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         cpl_imagelist_set(cube_out,o_img,i);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     }</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="keywordflow">return</span> cube_out ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> <span class="keyword">static</span> cpl_image *</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> sinfo_new_image_getvig(</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         cpl_image    *    image_in,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         <span class="keywordtype">int</span>             loleft_x,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         <span class="keywordtype">int</span>             loleft_y,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>         <span class="keywordtype">int</span>             upright_x,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>         <span class="keywordtype">int</span>             upright_y)</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span> {</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>     cpl_image    *        slit_img ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keyword">register</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     pixelvalue  *       inpt,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>                                 *       outpt ;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     <span class="keywordtype">int</span>         outlx, outly ;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span> </div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span> </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     <span class="keywordflow">if</span> (image_in==NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>     ilx=cpl_image_get_size_x(image_in);</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     ily=cpl_image_get_size_y(image_in);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     pidata=cpl_image_get_data_float(image_in);</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> </div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>     <span class="keywordflow">if</span> ((loleft_x<1) || (loleft_x>ilx) ||</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         (loleft_y<1) || (loleft_y>ily) ||</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>         (upright_x<1) || (upright_x>ilx) ||</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>         (upright_y<1) || (upright_y>ily) ||</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>         (loleft_x>upright_x) || (loleft_y>upright_y)) {</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"extraction zone is [%d %d] [%d %d]\n"</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                         <span class="stringliteral">"cannot extract such zone: aborting slit extraction"</span>,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                 loleft_x, loleft_y, upright_x, upright_y) ;</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     }</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>     outlx = upright_x - loleft_x + 1 ;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     outly = upright_y - loleft_y + 1 ;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     slit_img = cpl_image_new(outlx, outly,CPL_TYPE_FLOAT) ;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>     podata=cpl_image_get_data_float(slit_img);</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     <span class="keywordflow">for</span> (j=0 ; j<outly ; j++) {</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>         inpt = pidata+loleft_x-1 + (j+loleft_y-1)*ilx ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>         outpt = podata + j*outlx ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>         <span class="keywordflow">for</span> (i=0 ; i<outlx ; i++) {</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>             *outpt++ = *inpt++ ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         }</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordflow">return</span> slit_img ;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> sinfo_new_set_wcs_cube(cpl_imagelist* cub, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda,</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>          <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix, <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy)</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span> {</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span> </div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   sinfo_new_change_plist_cube(plist, clambda, dis, cpix, cx, cy) ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   sinfo_plist_set_extra_keys(plist,<span class="stringliteral">"IMAGE"</span>,<span class="stringliteral">"DATA"</span>,<span class="stringliteral">"RMSE"</span>,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                  <span class="stringliteral">"DATA"</span>,<span class="stringliteral">"ERRS"</span>,<span class="stringliteral">"QUAL"</span>,0);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   <span class="keywordflow">if</span> (cpl_imagelist_save(cub, name, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>                          plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   }</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> }</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> sinfo_new_set_wcs_image(cpl_image* img,</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                         <span class="keywordtype">double</span> cx,</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                         <span class="keywordtype">double</span> cy)</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span> {</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   }</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   sinfo_new_change_plist_image(plist, cx, cy) ;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   <span class="keywordflow">if</span> (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   }</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> </div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span> }</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span> </div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> sinfo_new_set_wcs_spectrum(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>              <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix)</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span> {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span> </div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from frame %s"</span>,name);</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   }</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   sinfo_new_change_plist_spectrum(plist, clambda, dis,cpix) ;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> </div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>   <span class="keywordflow">if</span> (cpl_image_save(img, name, CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                      plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot save the product %s"</span>,name);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   }</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> </div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> }</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> sinfo_new_change_plist_cube (cpl_propertylist * plist,</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>             <span class="keywordtype">float</span> cenLambda,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>             <span class="keywordtype">float</span> dispersion,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>             <span class="keywordtype">int</span>   center_z,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>             <span class="keywordtype">float</span> center_x,</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>             <span class="keywordtype">float</span> center_y )</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span> {</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span> </div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>     <span class="keywordtype">float</span> pixelscale ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="keywordtype">double</span> ra ;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     <span class="keywordtype">double</span> dec ;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     <span class="keywordtype">double</span> angle ;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     <span class="keywordtype">float</span> radangle ;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keywordtype">double</span> cd1_1, cd1_2, cd2_1, cd2_2 ;</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordtype">int</span> sign_swap = -1;</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <span class="keywordtype">char</span> firsttext[2*FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span> </div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     <span class="keywordtype">double</span> cdelt1=0;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     <span class="keywordtype">double</span> cdelt2=0;</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     <span class="keywordtype">double</span> cdelt3=dispersion;</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     <span class="keywordtype">double</span> crpix1=center_x;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     <span class="keywordtype">double</span> crpix2=center_y;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordtype">int</span> crpix3=center_z;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span> </div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="keywordtype">double</span> crval1=0;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     <span class="keywordtype">double</span> crval2=0;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     <span class="keywordtype">double</span> crval3=cenLambda;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span> </div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     strcpy(firsttext, <span class="stringliteral">"sinfo_rec_objnod -f \0"</span>) ;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span> </div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     ra = sinfo_pfits_get_ra(plist) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     dec = sinfo_pfits_get_DEC(plist) ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="comment">//get better coordinate values</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     ra=sinfo_pfits_get_targ_alpha(plist);</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     dec=sinfo_pfits_get_targ_delta(plist);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>     <span class="comment">//sinfo_msg("ra=%f",ra);</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>     <span class="comment">//sinfo_msg("dec=%f",dec);</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     ra=sinfo_hms2deg(ra);</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     dec=sinfo_sess2deg(dec);</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     <span class="comment">//sinfo_msg("ra=%f",ra);</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>     <span class="comment">//sinfo_msg("dec=%f",dec);</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     crval1=ra;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     crval2=dec;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     angle = sinfo_pfits_get_posangle(plist) ;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span></div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>        cpl_error_reset();</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     }</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     cdelt1=sign_swap*pixelscale / 3600.;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     cdelt2=         +pixelscale / 3600.;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span> </div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span> </div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     radangle = angle * PI_NUMB / 180. ;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     cd1_1 = +cdelt1*cos(radangle);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     cd1_2 = -cdelt2*sin(radangle);</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>     cd2_1 = +cdelt1*sin(radangle);</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     cd2_2 = +cdelt2*cos(radangle);</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span> </div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     sinfo_set_coord1(&plist,crpix1,crval1,cdelt1);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     sinfo_set_coord2(&plist,crpix2,crval2,cdelt2);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>     sinfo_set_coord3(&plist,crpix3,crval3,cdelt3);</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     sinfo_set_cd_matrix3(&plist,0,0,0,0,dispersion);</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> </div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span> </div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> sinfo_set_coord1(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix1,</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1)</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span> {</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>    cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE1"</span>,0);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"RA---TAN"</span>);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"Projected Rectascension"</span>);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX1"</span>,0);</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"CRPIX1"</span>, crpix1) ;</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX1"</span>,<span class="stringliteral">"Reference pixel in RA"</span> ) ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL1"</span>,0);</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRPIX1"</span>, <span class="stringliteral">"CRVAL1"</span>, crval1 ) ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL1"</span>,<span class="stringliteral">"Reference RA"</span> ) ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span> </div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT1"</span>,0);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL1"</span>,<span class="stringliteral">"CDELT1"</span>,cdelt1 ) ;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CDELT1"</span>,<span class="stringliteral">"pixel scale"</span> ) ;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span> </div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT1"</span>,0);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>     cpl_propertylist_insert_after_string(*plist, <span class="stringliteral">"CDELT1"</span>,  <span class="stringliteral">"CUNIT1"</span>, <span class="stringliteral">"deg"</span> ) ;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT1"</span>,<span class="stringliteral">"RA-UNIT"</span> ) ;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span> </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> }</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> </div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span> </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span> sinfo_set_coord2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crpix2,</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2)</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> {</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE2"</span>,0);</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CUNIT1"</span>,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"DEC--TAN"</span>);</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE2"</span>, <span class="stringliteral">"Projected Declination"</span>) ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> </div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX2"</span>,0);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"CRPIX2"</span>,crpix2 ) ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX2"</span>, <span class="stringliteral">"Reference pixel in DEC"</span>) ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> </div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CRVAL2"</span>,0);</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"CRVAL2"</span>,crval2) ;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CRVAL2"</span>,<span class="stringliteral">"Reference DEC"</span>) ;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span> </div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CDELT2"</span>,0);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL2"</span>,<span class="stringliteral">"CDELT2"</span>,cdelt2 ) ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT2"</span>,<span class="stringliteral">"pixel scale"</span>) ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     cpl_propertylist_erase_regexp(*plist,<span class="stringliteral">"^CUNIT2"</span>,0);</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT2"</span>,<span class="stringliteral">"CUNIT2"</span>, <span class="stringliteral">"deg"</span> ) ;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"DEC-UNIT"</span>) ;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span> }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span> </div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span> sinfo_set_coord3(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix3,</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval3,</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt3)</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span> {</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE3"</span>,0);</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>, <span class="stringliteral">"CTYPE3"</span>, <span class="stringliteral">"WAVE"</span> ) ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CTYPE3"</span>,<span class="stringliteral">"wavelength axis in microns"</span>) ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span> </div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX3"</span>,0);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CTYPE3"</span>,<span class="stringliteral">"CRPIX3"</span>, (<span class="keywordtype">double</span>)crpix3 ) ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX3"</span>, <span class="stringliteral">"Reference pixel in z"</span>) ;</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span> </div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL3"</span>,0);</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX3"</span>, <span class="stringliteral">"CRVAL3"</span>, crval3) ;</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL3"</span>, <span class="stringliteral">"central wavelength"</span>) ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span> </div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT3"</span>,0);</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span> </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL3"</span>,<span class="stringliteral">"CDELT3"</span>,cdelt3) ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CDELT3"</span>, <span class="stringliteral">"microns per pixel"</span>) ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT3"</span>,0);</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT3"</span>, <span class="stringliteral">"CUNIT3"</span>, <span class="stringliteral">"um"</span> ) ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT3"</span>,  <span class="stringliteral">"spectral unit"</span> ) ;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^SPECSYS"</span>,0);</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CUNIT3"</span>, <span class="stringliteral">"SPECSYS"</span>, <span class="stringliteral">"TOPOCENT"</span> ) ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"SPECSYS"</span>,  <span class="stringliteral">"Coordinate reference frame"</span> ) ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span> }</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span> </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span> </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> sinfo_set_cd_matrix2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_1,</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_2,</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_1,</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>             <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_2)</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> {</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_1"</span>,0));</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>                              <span class="stringliteral">"CD1_1"</span>, cd1_1 )) ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_1"</span>,</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_2"</span>,0));</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD1_1"</span>,</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>                              <span class="stringliteral">"CD1_2"</span>, cd1_2 )) ;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_2"</span>,</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_1"</span>,0));</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD1_2"</span>,</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>                              <span class="stringliteral">"CD2_1"</span>, cd2_1 )) ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_1"</span>,</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_2"</span>,0));</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD2_1"</span>,</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>                              <span class="stringliteral">"CD2_2"</span>, cd2_2 )) ;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_2"</span>,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  cleanup:</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> }</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> </div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> sinfo_set_cd_matrix3(cpl_propertylist** plist,</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd1_3,</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd2_3,</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_1,</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_2,</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>                      <span class="keyword">const</span> <span class="keywordtype">double</span> cd3_3)</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> {</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD1_3"</span>,0));</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"EXPTIME"</span>,</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>                              <span class="stringliteral">"CD1_3"</span>, cd1_3 )) ;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD1_3"</span>,</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD2_3"</span>,0));</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CD1_3"</span>,</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>                              <span class="stringliteral">"CD2_3"</span>, cd2_3 )) ;</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD2_3"</span>,</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_1"</span>,0));</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CD2_3"</span>,</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>                              <span class="stringliteral">"CD3_1"</span>, cd3_1 )) ;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_1"</span>,</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_2"</span>,0));</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD3_1"</span>,</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>                              <span class="stringliteral">"CD3_2"</span>, cd3_2 )) ;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_2"</span>,</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>     check_nomsg(cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CD3_3"</span>,0));</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     check_nomsg(cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CD3_2"</span>,</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>                              <span class="stringliteral">"CD3_3"</span>, cd3_3 )) ;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     check_nomsg(cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CD3_3"</span>,</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>                          <span class="stringliteral">"CD rotation matrix"</span> )) ;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  cleanup:</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> </div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> }</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> </div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> sinfo_set_spect_coord1(cpl_propertylist** plist,</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix1,</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval1,</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt1)</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> {</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE1"</span>,0);</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"EXPTIME"</span>,  <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"PIXEL"</span>);</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CTYPE1"</span>, <span class="stringliteral">"Pixel coordinate system."</span>);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX1"</span>,0);</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CTYPE1"</span>,  <span class="stringliteral">"CRPIX1"</span>, (<span class="keywordtype">double</span>)crpix1 ) ;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX1"</span>, <span class="stringliteral">"Reference pixel in x"</span>) ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL1"</span>,0);</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRPIX1"</span>,  <span class="stringliteral">"CRVAL1"</span>, crval1 ) ;</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRVAL1"</span>, <span class="stringliteral">"value of ref pixel."</span>) ;</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> </div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT1"</span>,0);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     cpl_propertylist_insert_after_double(*plist,<span class="stringliteral">"CRVAL1"</span>,  <span class="stringliteral">"CDELT1"</span>, cdelt1 ) ;</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT1"</span>, <span class="stringliteral">"pixel scale"</span>) ;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT1"</span>,0);</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT1"</span>,  <span class="stringliteral">"CUNIT1"</span>, <span class="stringliteral">"Pixel"</span> );</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT1"</span>,  <span class="stringliteral">"spectral unit"</span> );</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> </div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> }</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span> </div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> sinfo_set_spect_coord2(cpl_propertylist** plist,</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>                  <span class="keyword">const</span> <span class="keywordtype">int</span> crpix2,</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> crval2,</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>                  <span class="keyword">const</span> <span class="keywordtype">double</span> cdelt2)</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> {</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CTYPE2"</span>,0);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     cpl_propertylist_insert_after_string(*plist, <span class="stringliteral">"EXPTIME"</span>,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"WAVE"</span> );</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"wavelength axis in microns"</span>);</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRPIX2"</span>,0);</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CTYPE2"</span>,  <span class="stringliteral">"CRPIX2"</span>,(<span class="keywordtype">double</span>)crpix2 ) ;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CRPIX2"</span>, <span class="stringliteral">"Reference pixel in x"</span>) ;</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> </div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CRVAL2"</span>,0);</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"CRVAL2"</span>,crval2 ) ;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CRVAL2"</span>, <span class="stringliteral">"central wavelength"</span>) ;</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> </div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CDELT2"</span>,0);</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>     cpl_propertylist_insert_after_double(*plist, <span class="stringliteral">"CRVAL2"</span>, <span class="stringliteral">"CDELT2"</span>,cdelt2);</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     cpl_propertylist_set_comment(*plist,<span class="stringliteral">"CDELT2"</span>, <span class="stringliteral">"microns per pixel"</span>);</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     cpl_propertylist_erase_regexp(*plist, <span class="stringliteral">"^CUNIT2"</span>,0);</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     cpl_propertylist_insert_after_string(*plist,<span class="stringliteral">"CDELT2"</span>,  <span class="stringliteral">"CUNIT2"</span>, <span class="stringliteral">"um"</span>);</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>     cpl_propertylist_set_comment(*plist, <span class="stringliteral">"CUNIT2"</span>,  <span class="stringliteral">"spectral unit"</span> );</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span> </div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span> sinfo_new_change_plist_spectrum (cpl_propertylist * plist,</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>                 <span class="keywordtype">double</span> cenLambda,</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>                 <span class="keywordtype">double</span> dispersion,</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>                 <span class="keywordtype">int</span>   cenpix)</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> {</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> </div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>   <span class="keywordtype">int</span> crpix1=1;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>   <span class="keywordtype">double</span> crval1=1;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>   <span class="keywordtype">double</span> cdelt1=1;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span> </div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>   <span class="keywordtype">int</span> crpix2=cenpix;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>   <span class="keywordtype">double</span> crval2=cenLambda;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>   <span class="keywordtype">double</span> cdelt2=dispersion;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> </div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> </div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE3"</span>,0);</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX3"</span>,0);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL3"</span>,0);</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT3"</span>,0);</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT3"</span>,0);</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> </div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE2"</span>,0);</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX2"</span>,0);</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL2"</span>,0);</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT2"</span>,0);</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT2"</span>,0);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD1_1"</span>,0);</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD1_2"</span>,0);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD2_1"</span>,0);</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CD2_2"</span>,0);</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> </div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> </div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>   sinfo_set_spect_coord1(&plist,crpix1,crval1,cdelt1);</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>   sinfo_set_spect_coord2(&plist,crpix2,crval2,cdelt2);</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> </div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span> </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> }</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> sinfo_new_change_plist_image (cpl_propertylist * plist,</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>             <span class="keywordtype">float</span> center_x,</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>             <span class="keywordtype">float</span> center_y )</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> </div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>     <span class="keywordtype">float</span> pixelscale ;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     <span class="keywordtype">double</span> ra ;</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     <span class="keywordtype">double</span> dec ;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     <span class="keywordtype">double</span> angle ;</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     <span class="keywordtype">float</span> radangle ;</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     <span class="keywordtype">float</span> cd1_1, cd1_2, cd2_1, cd2_2 ;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     <span class="keywordtype">char</span> firsttext[2*FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     <span class="keywordtype">int</span> sign_swap = -1;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="keywordtype">double</span> cdelt1=0;</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keywordtype">double</span> cdelt2=0;</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     <span class="keywordtype">double</span> crpix1=center_x;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     <span class="keywordtype">double</span> crpix2=center_y;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> </div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="keywordtype">double</span> crval1=0;</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     <span class="keywordtype">double</span> crval2=0;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span> </div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>     strcpy(firsttext, <span class="stringliteral">"sinfo_rec_objnod -f \0"</span>) ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     pixelscale = sinfo_pfits_get_pixscale(plist)/2. ;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     ra = sinfo_pfits_get_ra(plist) ;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     dec = sinfo_pfits_get_DEC(plist) ;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     <span class="comment">//get better coordinate values</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     ra=sinfo_pfits_get_targ_alpha(plist);</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     dec=sinfo_pfits_get_targ_delta(plist);</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     ra=sinfo_hms2deg(ra);</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     dec=sinfo_sess2deg(dec);</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> </div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     crval1=ra;</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     crval2=dec;</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>     angle = sinfo_pfits_get_posangle(plist) ;</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>     <span class="comment">/* in PUPIL data there is not posangle info: we reset the error */</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>        cpl_error_reset();</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>     }</div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     radangle = angle * PI_NUMB / 180. ;</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     cdelt1=sign_swap * pixelscale / 3600. ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     cdelt2=            pixelscale / 3600. ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     cd1_1 = +cdelt1*cos(radangle) ;</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     cd1_2 = -cdelt2*sin(radangle) ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     cd2_1 = +cdelt1*sin(radangle) ;</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     cd2_2 = +cdelt2*cos(radangle) ;</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> </div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span> </div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span> </div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span> </div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     check_nomsg(sinfo_set_coord1(&plist,crpix1,crval1,cdelt1));</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>     check_nomsg(sinfo_set_coord2(&plist,crpix2,crval2,cdelt2));</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     check_nomsg(sinfo_set_cd_matrix2(&plist,cd1_1,cd1_2,cd2_1,cd2_2));</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> </div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  cleanup:</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> }</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> cpl_imagelist**</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> sinfo_new_sinfoni_correct_median(cpl_imagelist** cubes, <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes)</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> {</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   cpl_imagelist** cubes_cor=NULL;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>   <span class="keywordtype">double</span> local_median=0;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>   cpl_image* o_img=NULL;</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> </div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>   <span class="keywordflow">if</span> ( cubes == NULL ) {</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>   }</div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>   <span class="keywordflow">if</span> ( n_cubes <= 0 ) {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>   }</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>   cubes_cor = (cpl_imagelist**) cpl_calloc (n_cubes, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> </div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_cubes ; i++ ) {</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>     cubes_cor[i] = cpl_imagelist_new();</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>     <span class="keywordflow">for</span>(z=0;z< cpl_imagelist_get_size(cubes[i]); z++) {</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>       i_img=cpl_imagelist_get(cubes[i],z);</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>       local_median=cpl_image_get_median(i_img);;</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>       o_img=cpl_image_duplicate(i_img);</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>       <span class="keywordflow">if</span>(!isnan(local_median)) {</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>         cpl_image_subtract_scalar(o_img,local_median);</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>        }</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>       cpl_imagelist_set(cubes_cor[i],o_img,z);</div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>     }</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>   }</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> </div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>   <span class="keywordflow">return</span> cubes_cor;</div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> }</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> </div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordtype">int</span> sinfo_new_sinfoni_correct_median_it(cpl_imagelist** inp)</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> {</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span> </div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>   <span class="keywordtype">double</span> local_median=0;</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>   cpl_image* img=NULL;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> </div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>   <span class="keywordflow">for</span>(z=0;z< cpl_imagelist_get_size((*inp)); z++) {</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     img=cpl_imagelist_get((*inp),z);</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>     local_median=sinfo_new_my_median_image(img);</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>     <span class="keywordflow">if</span>(!isnan(local_median)) {</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>       cpl_image_subtract_scalar(img,local_median);</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>     }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"local_median is NAN"</span>);</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     }</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>     cpl_imagelist_set((*inp),img,z);</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>   }</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> </div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> }</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> </div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> cpl_imagelist** sinfo_new_sinfoni_correct_sky(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>                   cpl_imagelist* sky_cube)</div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> </div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> {</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>   cpl_imagelist** cubes_sky=NULL;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>   <span class="keywordtype">float</span> k=0.5;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>   <span class="keywordtype">int</span> ovr=0;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>   <span class="keywordtype">int</span> ks=0;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>   <span class="keywordtype">int</span> nclip=0;</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>   <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>   <span class="keywordtype">double</span> sig=0;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>   <span class="keywordtype">int</span> msk_sum=0;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>   <span class="keywordtype">double</span> val_msk_sum=0;</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>   cpl_vector* val=NULL;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   cpl_vector* msk=NULL;</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>   <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> </div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>   <span class="keywordtype">int</span> sky_lx=0;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>   <span class="keywordtype">int</span> sky_ly=0;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>   <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>   <span class="keywordtype">float</span>* p_sky_data=NULL;</div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>   cpl_image* i_img=NULL;</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>   cpl_image* sky_img=NULL;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>   <span class="keywordflow">if</span> ( cubes == NULL ) {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>   }</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>   ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>   ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>   inp=cpl_imagelist_get_size(cubes[0]);</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> </div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>   sky_lx=cpl_image_get_size_x(cpl_imagelist_get(sky_cube,0));</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>   sky_ly=cpl_image_get_size_y(cpl_imagelist_get(sky_cube,0));</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>   <span class="keywordflow">if</span> ( nc <= 0 ) {</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>   }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> </div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>   cubes_sky = (cpl_imagelist**) cpl_calloc (nc, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;</div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>   <span class="keywordflow">for</span>(z=0;z< inp; z++) {</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     sky_img=cpl_imagelist_get(sky_cube,z);</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>     p_sky_data=cpl_image_get_data_float(sky_img);</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     <span class="keywordflow">for</span>(y=0;y< ily; y++) {</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>       <span class="keywordflow">for</span>(x=0;x< ilx; x++) {</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>         <span class="comment">/* here we start to do a k-s clipping */</span></div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>     msk=cpl_vector_new(nc);</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>     <span class="keywordflow">for</span> (i=0;i<nc;i++) {</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>       cpl_vector_set(msk,i,1);</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>     }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         nclip=0;</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>         <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>       sig=0;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>       med=0;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>       ovr=0;</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>       val=cpl_vector_new(nc-nclip);</div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> </div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>             i_img=cpl_imagelist_get(cubes[i],z);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>             pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>                  (cpl_vector_get(msk,i) != 0) ) {</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)pidata[x+y*ilx]);</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>           ovr++;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>         }</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>       }</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span> </div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>       <span class="keywordflow">if</span>(ovr>0) {</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         avg=cpl_vector_get_mean(val);</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         med=cpl_vector_get_median_const(val);</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>         <span class="keywordflow">if</span>(ovr>1) {</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>           sig=cpl_vector_get_stdev(val);</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>               sig=0;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         }</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>         avg=cpl_vector_get(val,0);</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>         med=avg;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>         sig=0;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>       }</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> </div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>       cpl_vector_delete(val);</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>             i_img=cpl_imagelist_get(cubes[i],z);</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>             pidata=cpl_image_get_data_float(i_img);</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>       <span class="comment">/* Do k-s clipping at each pixel */</span></div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>                 (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>           <span class="keywordflow">if</span>(abs((pidata[x+y*ilx]-med))> k*sig) {</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>         cpl_vector_set(msk,i,0);</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>                 nclip++;</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>           }</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         }</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>       }</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     }<span class="comment">/* end of k-s clipping */</span></div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     msk_sum=0;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     val_msk_sum=0;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>       <span class="comment">/* computes sky at each point */</span></div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>       <span class="keywordflow">if</span> (!isnan(pidata[x+y*ilx])) {</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>         msk_sum+=cpl_vector_get(msk,i);</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>                 val_msk_sum+=pidata[x+y*ilx]*</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>           cpl_vector_get(msk,i);</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>       }</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>     }</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     cpl_vector_delete(msk);</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>       } <span class="comment">/* end loop over x */</span></div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>     } <span class="comment">/* end loop over y */</span></div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>   } <span class="comment">/* end loop over z */</span></div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>   <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);</div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     <span class="comment">/* subtract the variable clean sky */</span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>     cpl_imagelist_subtract(cubes_sky[i],sky_cube);</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> </div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>   }</div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> </div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>   <span class="keywordflow">return</span> cubes_sky;</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span> }</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> cpl_imagelist** sinfo_new_sinfoni_correct_sky2(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>                   cpl_imagelist* sky_cube,</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>                               cpl_imagelist* med_cube,</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>                               cpl_imagelist* msk_cube,</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>                               cpl_imagelist* avg_cube,</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>                               cpl_imagelist* sig_cube,</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>                               cpl_imagelist* ovr_cube)</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> {</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>   cpl_imagelist** cubes_sky=NULL;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>   <span class="keywordtype">int</span> x=0;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>   <span class="keywordtype">int</span> y=0;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>   <span class="keywordtype">float</span> k=0.5;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>   <span class="keywordtype">int</span> ovr=0;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>   <span class="keywordtype">int</span> ks=0;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>   <span class="keywordtype">int</span> nclip=0;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>   <span class="keywordtype">double</span> med=0;</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>   <span class="keywordtype">double</span> avg=0;</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>   <span class="keywordtype">double</span> sig=0;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>   <span class="keywordtype">int</span> msk_sum=0;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>   <span class="keywordtype">double</span> val_msk_sum=0;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>   cpl_vector* val=NULL;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>   cpl_vector* msk=NULL;</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span> </div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>   <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>   <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>   <span class="keywordtype">int</span> inp=0;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> </div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>   <span class="keywordtype">int</span> ovr_lx=0;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>   <span class="keywordtype">int</span> msk_lx=0;</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>   <span class="keywordtype">int</span> avg_lx=0;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>   <span class="keywordtype">int</span> sig_lx=0;</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   <span class="keywordtype">int</span> sky_lx=0;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>   <span class="keywordtype">int</span> med_lx=0;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> </div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span> </div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>   <span class="keywordtype">float</span>* p_ovr_data=NULL;</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   <span class="keywordtype">float</span>* p_msk_data=NULL;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>   <span class="keywordtype">float</span>* p_avg_data=NULL;</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   <span class="keywordtype">float</span>* p_sig_data=NULL;</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>   <span class="keywordtype">float</span>* p_sky_data=NULL;</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>   <span class="keywordtype">float</span>* p_med_data=NULL;</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span> </div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>   <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   <span class="keywordflow">if</span> ( cubes == NULL ) {</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no cube list given!"</span>) ;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>   }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> </div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>   ilx=cpl_image_get_size_x(cpl_imagelist_get(cubes[0],0));</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>   ily=cpl_image_get_size_y(cpl_imagelist_get(cubes[0],0));</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>   inp=cpl_imagelist_get_size(cubes[0]);</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span> </div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>   <span class="keywordflow">if</span> ( nc <= 0 ) {</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of data cubes in list!"</span>) ;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>   }</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> </div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>   cubes_sky = (cpl_imagelist**) cpl_calloc (nc, <span class="keyword">sizeof</span> (cpl_imagelist*)) ;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span> </div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>   ovr_lx=ilx;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>   msk_lx=ilx;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>   avg_lx=ilx;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>   sig_lx=ilx;</div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>   sky_lx=ilx;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>   med_lx=ilx;</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span> </div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>   <span class="keywordflow">for</span>(z=0;z< inp; z++) {</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>     p_ovr_data=cpl_image_get_data_float(cpl_imagelist_get(ovr_cube,z));</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>     p_msk_data=cpl_image_get_data_float(cpl_imagelist_get(msk_cube,z));</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     p_avg_data=cpl_image_get_data_float(cpl_imagelist_get(avg_cube,z));</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     p_sig_data=cpl_image_get_data_float(cpl_imagelist_get(sig_cube,z));</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     p_sky_data=cpl_image_get_data_float(cpl_imagelist_get(sky_cube,z));</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>     p_med_data=cpl_image_get_data_float(cpl_imagelist_get(med_cube,z));</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span> </div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     <span class="keywordflow">for</span>(y=0;y< ily; y++) {</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>       <span class="keywordflow">for</span>(x=0;x< ilx; x++) {</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>         <span class="comment">/* here we start to do a k-s clipping */</span></div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     msk=cpl_vector_new(nc);</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>     <span class="keywordflow">for</span> (i=0;i<nc;i++) {</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>       cpl_vector_set(msk,i,1);</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     }</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     p_ovr_data[x+y*ovr_lx]=nc;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     p_msk_data[x+y*msk_lx]=nc;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>         nclip=0;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>         <span class="keywordflow">for</span> (ks=0;ks<nc;ks++) {</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>       sig=0;</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>       med=0;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>       ovr=0;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>       val=cpl_vector_new(nc-nclip);</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>             pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>                  (cpl_vector_get(msk,i) != 0) ) {</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>           cpl_vector_set(val,ovr,(<span class="keywordtype">double</span>)pidata[x+y*ilx]);</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>           ovr++;</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>         }</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>       }</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>       <span class="keywordflow">if</span>(ovr>1) {</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>         avg=cpl_vector_get_mean(val);</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>         med=cpl_vector_get_median_const(val);</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>         sig=cpl_vector_get_stdev(val);</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>         avg=cpl_vector_get(val,0);</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>         med=avg;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>         sig=0;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>       }</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>       p_med_data[x+y*med_lx]=med;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>       p_avg_data[x+y*avg_lx]=avg;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>       p_sig_data[x+y*sig_lx]=sig;</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>       cpl_vector_delete(val);</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>       <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>            pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>       <span class="comment">/* Do k-s clipping at each pixel */</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>         <span class="keywordflow">if</span> ((!isnan(pidata[x+y*ilx])) &&</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>                 (cpl_vector_get(msk,i) != 0)) {</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>           <span class="keywordflow">if</span>(abs((pidata[x+y*ilx]-med))> k*sig) {</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>         <span class="comment">/* pidata[x+y*ilx]=0; */</span></div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>         p_msk_data[x+y*msk_lx]-=1;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>         cpl_vector_set(msk,i,0);</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>                 nclip++;</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>           }</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>         }</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>       }</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     }<span class="comment">/* end of k-s clipping */</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     msk_sum=0;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     val_msk_sum=0;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>            pidata=cpl_image_get_data_float(cpl_imagelist_get(cubes[i],z));</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>       <span class="comment">/* computes sky at each point */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>       <span class="keywordflow">if</span> (!isnan(pidata[x+y*ilx])) {</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> <span class="comment">        msk_sum+=p_msk_data[x+y*msk_lx];</span></div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> <span class="comment">                val_msk_sum+=pidata[x+y*cubes[i]->lx]*</span></div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> <span class="comment">          p_msk_data[x+y*msk_lx];</span></div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>         msk_sum+=cpl_vector_get(msk,i);</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>                 val_msk_sum+=pidata[x+y*ilx]*</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>           cpl_vector_get(msk,i);</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>       }</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     }</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     p_sky_data[x+y*sky_lx]=val_msk_sum/msk_sum;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>     cpl_vector_delete(msk);</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>       } <span class="comment">/* end loop over x */</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     } <span class="comment">/* end loop over y */</span></div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>   } <span class="comment">/* end loop over z */</span></div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>   <span class="keywordflow">for</span> ( i = 0 ; i < nc ; i++ ) {</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>     cubes_sky[i]=cpl_imagelist_duplicate(cubes[i]);</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     <span class="comment">/* subtract the variable clean sky */</span></div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     cpl_imagelist_subtract(cubes_sky[i],sky_cube);</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>   }</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span> </div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span> </div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>   <span class="keywordflow">return</span> cubes_sky;</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> }</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> </div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> sinfo_new_assign_offset(<span class="keyword">const</span> <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>                         <span class="keywordtype">float</span>* offsetx,</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>                         <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy)</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> {</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> </div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>   <span class="keywordtype">float</span> offx=0;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>   <span class="keywordtype">float</span> offy=0;</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>   <span class="keywordtype">double</span> mjd_obs=0;</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span> <span class="comment">  double pixelscale=0;</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> <span class="comment">  double angle=0;</span></div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> <span class="comment">  double radangle=0;</span></div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span> <span class="comment">  double cd1_1=0;</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span> <span class="comment">  double cd1_2=0;</span></div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> <span class="comment">  double cd2_1=0;</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">  double cd2_2=0;</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> <span class="comment">  double ra=0;</span></div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="comment">  double dec=0;</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> </div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>   cpl_propertylist * plist=NULL;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> </div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>   }</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> </div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>   offx = sinfo_pfits_get_cumoffsetx(plist) - ref_offx ;  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" Set relative offset to 0 - %f!"</span>,ref_offx) ;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>     offx =  - ref_offx;</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     cpl_error_reset();</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>   }</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> </div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>   offy = sinfo_pfits_get_cumoffsety(plist) - ref_offy ; <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>   <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" Set relative offset to 0 - %f!"</span>,ref_offx) ;</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     offy =  - ref_offy;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     cpl_error_reset();</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>   }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>   }</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> </div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> </div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>     <span class="comment">/* April 1st 2006 */</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>     sinfo_new_array_set_value(offsetx,2*offx,n);</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>     sinfo_new_array_set_value(offsety,2*offy,n);</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>     <span class="comment">/* after detector's upgrade */</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">    sinfo_new_array_set_value(offsetx,-offx*2,n);</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">    sinfo_new_array_set_value(offsety,+offy*2,n);</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>     sinfo_new_array_set_value(offsetx,-2*offx,n);</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>     sinfo_new_array_set_value(offsety,2*offy,n);</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>     <span class="comment">/* before detector's upgrade */</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment">    sinfo_new_array_set_value(offsetx,+offx*2,n);</span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment">    sinfo_new_array_set_value(offsety,-offy*2,n);</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>     sinfo_new_array_set_value(offsetx,2*offx,n);</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>     sinfo_new_array_set_value(offsety,-2*offy,n);</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>   }</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> </div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> </div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> }</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> </div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> </div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span> </div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span> </div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span> </div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span> sinfo_new_assign_offset2(<span class="keyword">const</span> <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>                         <span class="keywordtype">float</span>* offsetx,</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>                         <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy)</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span> {</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span> </div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>   <span class="keywordtype">float</span> offx=0;</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>   <span class="keywordtype">float</span> offy=0;</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>   <span class="keywordtype">double</span> mjd_obs=0;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> </div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>   cpl_propertylist * plist=NULL;</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets as set by user"</span>);</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>   offx = offsetx[n] - ref_offx ;  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>   offy = offsety[n] - ref_offy ;  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span> </div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);</div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> </div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>   }</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>   }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>   <span class="comment">//sinfo_new_array_set_value(offsetx,-2*offx,n);</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>   <span class="comment">//sinfo_new_array_set_value(offsety,2*offy,n);</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     <span class="comment">/* April 1st 2006 */</span></div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span></div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>     sinfo_new_array_set_value(offsetx,2*offx,n);</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>     sinfo_new_array_set_value(offsety,2*offy,n);</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>     <span class="comment">/* after detector's upgrade */</span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="comment">    sinfo_new_array_set_value(offsetx,-offx*2,n);</span></div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span> <span class="comment">    sinfo_new_array_set_value(offsety,+offy*2,n);</span></div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>     sinfo_new_array_set_value(offsetx,-2*offx,n);</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>     sinfo_new_array_set_value(offsety,2*offy,n);</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>     <span class="comment">/* before detector's upgrade */</span></div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="comment">    sinfo_new_array_set_value(offsetx,+offx*2,n);</span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span> <span class="comment">    sinfo_new_array_set_value(offsety,-offy*2,n);</span></div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>     sinfo_new_array_set_value(offsetx,2*offx,n);</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>     sinfo_new_array_set_value(offsety,-2*offy,n);</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>   }</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span> </div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> </div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span> </div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> }</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span> </div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span> sinfo_new_object_assign_offset(<span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>                                <span class="keyword">const</span> <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>                                <span class="keywordtype">double</span>* ref_offx,</div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>                                <span class="keywordtype">double</span>* ref_offy,</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                                <span class="keywordtype">float</span>** offsetx,</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                                <span class="keywordtype">float</span>** offsety)</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span> {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span> </div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>   <span class="keywordtype">float</span> offx=0;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>   <span class="keywordtype">float</span> offy=0;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>   <span class="keywordtype">double</span> mjd_obs=0;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>   cpl_propertylist * plist=NULL;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Assign offsets"</span>);</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span> </div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(name, 0)) == NULL)) {</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"getting header from reference frame %s"</span>,name);</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>     <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>   }</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>   <span class="keywordflow">if</span> ( n == 0 ) {</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span> </div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>     *ref_offx = sinfo_pfits_get_cumoffsetx(plist) ;</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>       <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>       cpl_error_reset();</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     }</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> </div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>     *ref_offy = sinfo_pfits_get_cumoffsety(plist) ;</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>       cpl_error_reset();</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>        <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     }</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Reference offx=%f offy=%f"</span>,*ref_offx,*ref_offy);</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span> </div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>     offx = 0. ;</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>     offy = 0. ;</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> </div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span> </div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     offx = sinfo_pfits_get_cumoffsetx(plist) - *ref_offx ;  <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword cummoffsetx!"</span>) ;</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>       cpl_error_reset();</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>       <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>     }</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span> </div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>     offy = sinfo_pfits_get_cumoffsety(plist) - *ref_offy ; <span class="comment">/* was - */</span></div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not read fits header keyword! cumoffsety"</span>) ;</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>       <span class="comment">/* return -1 ; */</span></div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>       cpl_error_reset();</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>     }</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"offx=%f offy=%f"</span>,offx,offy);</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>   }</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> </div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>     <span class="comment">/* rotate the coordinates</span></div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment">       offx_rot = cd1_1 * offx + cd2_1 * offy ;</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment">       offy_rot = cd1_2 * offx + cd2_2 * offy ;</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment">        convert the coordinates to pixel units</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="comment">       offx_rot_pix = offx_rot / pixelscale ;</span></div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> <span class="comment">       offy_rot_pix = offy_rot / pixelscale ;</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span> <span class="comment">       offsetx[i] = offx_rot_pix ;</span></div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> <span class="comment">       offsety[i] = offy_rot_pix ;</span></div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> </div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> </div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_MJD_OBS)) {</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>     mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"keyword %s does not exist"</span>,KEY_NAME_MJD_OBS);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>   }</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> </div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span> </div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>   <span class="keywordflow">if</span> (mjd_obs > 53825. ) {</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>     <span class="comment">/* April 1st 2006 */</span></div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>     <span class="comment">//sinfo_msg("New cumoffset setting convention");</span></div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>     sinfo_new_array_set_value(*offsetx,2*offx,n);</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>     sinfo_new_array_set_value(*offsety,2*offy,n);</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((mjd_obs > 53421.58210082 ) && (mjd_obs <= 53825.)){</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>     <span class="comment">/* after detector's upgrade */</span></div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>     sinfo_new_array_set_value(*offsetx,-offx*2,n);</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     sinfo_new_array_set_value(*offsety,+offy*2,n);</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>     <span class="comment">/* before detector's upgrade */</span></div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>     sinfo_new_array_set_value(*offsetx,+offx*2,n);</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>     sinfo_new_array_set_value(*offsety,-offy*2,n);</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>   }</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span> </div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> }</div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> </div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span> cpl_imagelist*</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span> sinfo_new_fine_tune(cpl_imagelist* cube,</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>               <span class="keywordtype">float</span>* correct_dist,</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>               <span class="keyword">const</span> <span class="keywordtype">char</span>* method,</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> order,</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> nslits) {</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>   <span class="keywordtype">int</span> i =0;</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>   cpl_imagelist* outcube2=NULL;</div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>   <span class="keywordtype">float</span>* neg_dist=NULL;</div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>   sinfo_msg(<span class="stringliteral">"Finetuning, method=%s"</span>,method);</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span> </div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>   <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"P"</span>)==0)</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>     {</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>       outcube2 = sinfo_new_fine_tune_cube( cube, correct_dist, order ) ;</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>       <span class="keywordflow">if</span> (outcube2 == NULL)</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>     {</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>     }</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>     }</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"F"</span>)==0)</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>     {</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>       neg_dist=cpl_calloc(nslits,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>       <span class="keywordflow">for</span> ( i = 0 ; i < nslits ; i++ )</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>     {</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>       neg_dist[i] = -correct_dist[i] ;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>     }</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>       outcube2 = sinfo_new_fine_tune_cube_by_FFT( cube, neg_dist ) ;</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>      cpl_free(neg_dist);</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>       <span class="keywordflow">if</span> ( outcube2 == NULL )</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>     {</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>     }</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>     }</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"S"</span>)==0)</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>     {</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>       outcube2 = sinfo_new_fine_tune_cube_by_spline( cube, correct_dist ) ;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>       <span class="keywordflow">if</span> ( outcube2 == NULL )</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>     {</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not fine tune the data cube\n"</span>) ;</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     }</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     }</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     {</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong method indicator given!"</span>) ;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>       <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     }</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span> </div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span> </div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span> </div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span> <span class="keywordflow">return</span> outcube2;</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span> </div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> }</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span> </div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> sinfo_band sinfo_get_associated_filter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f)</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span> {</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Js"</span>))           <span class="keywordflow">return</span> SINFO_BAND_JS ;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Z"</span>))            <span class="keywordflow">return</span> SINFO_BAND_Z ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SZ"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SZ ;</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SH"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SH ;</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"H"</span>))            <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Ks"</span>))           <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"K"</span>))            <span class="keywordflow">return</span> SINFO_BAND_K ;</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SK"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SK ;</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"L"</span>))            <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SL"</span>))           <span class="keywordflow">return</span> SINFO_BAND_SL ;</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M"</span>))            <span class="keywordflow">return</span> SINFO_BAND_M ;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M_NB"</span>))         <span class="keywordflow">return</span> SINFO_BAND_M ;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.06"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.08"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.26"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.64"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.71"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.09"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.13"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.17"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.25"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.29"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.34"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.80"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_4.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>     <span class="keywordflow">return</span> SINFO_BAND_UNKNOWN ;</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span> }</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span> </div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span> </div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> </div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span> sinfo_band sinfo_get_bbfilter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f)</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span> {</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"J+Block"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Js"</span>))           <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Z"</span>))            <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SZ"</span>))           <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SH"</span>))           <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"H"</span>))            <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"Ks"</span>))           <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"K"</span>))            <span class="keywordflow">return</span> SINFO_BAND_K ;</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SK"</span>))           <span class="keywordflow">return</span> SINFO_BAND_K ;</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"L"</span>))            <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"SL"</span>))           <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M"</span>))            <span class="keywordflow">return</span> SINFO_BAND_M ;</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"M_NB"</span>))         <span class="keywordflow">return</span> SINFO_BAND_M ;</div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.06"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.08"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.26"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_J ;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.64"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_1.71"</span>))      <span class="keywordflow">return</span> SINFO_BAND_H ;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.09"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.13"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.17"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.19"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.25"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.29"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_2.34"</span>))      <span class="keywordflow">return</span> SINFO_BAND_KS ;</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.21"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.28"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_3.80"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>     <span class="keywordflow">if</span> (!strcmp(f, <span class="stringliteral">"NB_4.07"</span>))      <span class="keywordflow">return</span> SINFO_BAND_L ;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>     <span class="keywordflow">return</span> SINFO_BAND_UNKNOWN ;</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span> }</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span> </div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utilities__scired_8h_source.html b/html/sinfo__utilities__scired_8h_source.html
index 114df27..fa1d6ed 100644
--- a/html/sinfo__utilities__scired_8h_source.html
+++ b/html/sinfo__utilities__scired_8h_source.html
@@ -2,161 +2,192 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utilities_scired.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utilities_scired.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_UTILITIES_SCIRED_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILITIES_SCIRED_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00022"></a>00022 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00023"></a>00023 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00024"></a>00024 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#include "sinfo_cube_construct.h"</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00028"></a>00028 <span class="preprocessor">#include "sinfo_object_cfg.h"</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="keywordtype">float</span>*
-<a name="l00031"></a>00031 sinfo_read_distances(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* distlist);
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="keywordtype">float</span>** 
-<a name="l00034"></a>00034 sinfo_read_slitlets_edges(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* poslist);
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="keywordtype">int</span> 
-<a name="l00038"></a>00038 sinfo_check_input_data(object_config* cfg);  
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="keywordtype">int</span>
-<a name="l00041"></a>00041 sinfo_auto_size_cube(<span class="keywordtype">float</span>* offsetx, 
-<a name="l00042"></a>00042                       <span class="keywordtype">float</span>* offsety,
-<a name="l00043"></a>00043               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes, 
-<a name="l00044"></a>00044                     <span class="keywordtype">float</span>* ref_offx, 
-<a name="l00045"></a>00045                     <span class="keywordtype">float</span>* ref_offy,
-<a name="l00046"></a>00046                     <span class="keywordtype">int</span>* size_x,
-<a name="l00047"></a>00047              <span class="keywordtype">int</span>* size_y);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keywordtype">int</span>
-<a name="l00050"></a>00050 sinfo_auto_size_cube4(<span class="keywordtype">float</span>* offsetx, 
-<a name="l00051"></a>00051                       <span class="keywordtype">float</span>* offsety,
-<a name="l00052"></a>00052               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes, 
-<a name="l00053"></a>00053                     <span class="keywordtype">float</span>* ref_offx, 
-<a name="l00054"></a>00054                     <span class="keywordtype">float</span>* ref_offy,
-<a name="l00055"></a>00055                     <span class="keywordtype">int</span>* size_x,
-<a name="l00056"></a>00056               <span class="keywordtype">int</span>* size_y);
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keywordtype">int</span>
-<a name="l00061"></a>00061 sinfo_auto_size_cube5(object_config * cfg, 
-<a name="l00062"></a>00062                     <span class="keywordtype">float</span>* ref_offx, <span class="keywordtype">float</span>* ref_offy,
-<a name="l00063"></a>00063                     <span class="keywordtype">float</span>* min_offx, <span class="keywordtype">float</span>* min_offy,
-<a name="l00064"></a>00064               <span class="keywordtype">float</span>* max_offx, <span class="keywordtype">float</span>* max_offy);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 cpl_imagelist * 
-<a name="l00067"></a>00067 sinfo_new_cube_getvig(
-<a name="l00068"></a>00068         cpl_imagelist *       cube_in,
-<a name="l00069"></a>00069         <span class="keywordtype">int</span>             loleft_x,
-<a name="l00070"></a>00070         <span class="keywordtype">int</span>             loleft_y,
-<a name="l00071"></a>00071         <span class="keywordtype">int</span>             upright_x,
-<a name="l00072"></a>00072         <span class="keywordtype">int</span>             upright_y);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keywordtype">int</span>
-<a name="l00076"></a>00076 sinfo_new_set_wcs_cube(cpl_imagelist* cub, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda, 
-<a name="l00077"></a>00077          <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix, <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="keywordtype">int</span>
-<a name="l00080"></a>00080 sinfo_new_set_wcs_image(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  
-<a name="l00081"></a>00081                         <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keywordtype">int</span>
-<a name="l00084"></a>00084 sinfo_new_set_wcs_spectrum(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,   
-<a name="l00085"></a>00085                            <span class="keywordtype">double</span> clambda, <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix);
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 cpl_imagelist* 
-<a name="l00090"></a>00090 sinfo_new_fine_tune(cpl_imagelist* cube,<span class="keywordtype">float</span>* correct_dist, 
-<a name="l00091"></a>00091                     <span class="keyword">const</span> <span class="keywordtype">char</span>* method, <span class="keyword">const</span> <span class="keywordtype">int</span> order, <span class="keyword">const</span> <span class="keywordtype">int</span> nslits) ;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="keywordtype">int</span>
-<a name="l00094"></a>00094 sinfo_new_object_assign_offset(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keywordtype">double</span>* ref_offx, 
-<a name="l00095"></a>00095                                <span class="keywordtype">double</span>* ref_offy, <span class="keywordtype">float</span>** offsetx, 
-<a name="l00096"></a>00096                                <span class="keywordtype">float</span>** offsety);
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098 <span class="keywordtype">int</span>
-<a name="l00099"></a>00099 sinfo_new_assign_offset2(<span class="keyword">const</span> <span class="keywordtype">int</span> n,
-<a name="l00100"></a>00100                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,
-<a name="l00101"></a>00101                         <span class="keywordtype">float</span>* offsetx,
-<a name="l00102"></a>00102                         <span class="keywordtype">float</span>* offsety,
-<a name="l00103"></a>00103                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,
-<a name="l00104"></a>00104              <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="keywordtype">int</span>
-<a name="l00107"></a>00107 sinfo_new_assign_offset(<span class="keyword">const</span> <span class="keywordtype">int</span> n,<span class="keyword">const</span> <span class="keywordtype">char</span>* name,<span class="keywordtype">float</span>* offsetx,
-<a name="l00108"></a>00108                         <span class="keywordtype">float</span>* offsety,<span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,
-<a name="l00109"></a>00109                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy);
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 cpl_imagelist** 
-<a name="l00113"></a>00113 sinfo_new_sinfoni_correct_median(cpl_imagelist** cubeobject, <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 cpl_imagelist** 
-<a name="l00116"></a>00116 sinfo_new_sinfoni_correct_sky2(cpl_imagelist** cubes,
-<a name="l00117"></a>00117                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,
-<a name="l00118"></a>00118                   cpl_imagelist* sky_cube,
-<a name="l00119"></a>00119                               cpl_imagelist* med_cube,
-<a name="l00120"></a>00120                               cpl_imagelist* msk_cube,
-<a name="l00121"></a>00121                               cpl_imagelist* avg_cube,
-<a name="l00122"></a>00122                               cpl_imagelist* sig_cube,
-<a name="l00123"></a>00123                               cpl_imagelist* ovr_cube);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 cpl_imagelist** 
-<a name="l00126"></a>00126 sinfo_new_sinfoni_correct_sky(cpl_imagelist** cubes,
-<a name="l00127"></a>00127                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,
-<a name="l00128"></a>00128                   cpl_imagelist* sky_cube);
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="keywordtype">int</span> 
-<a name="l00131"></a>00131 sinfo_new_sinfoni_correct_median_it(cpl_imagelist** inp);
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="keywordtype">int</span> sinfo_calib_flux_std(
-<a name="l00135"></a>00135         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   seds_file,
-<a name="l00136"></a>00136         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   stdstars,
-<a name="l00137"></a>00137         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filter,
-<a name="l00138"></a>00138         cpl_frame   *   frame,
-<a name="l00139"></a>00139         cpl_table   *   tab,
-<a name="l00140"></a>00140         <span class="keywordtype">double</span>          mag);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 sinfo_band sinfo_get_associated_filter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f);
-<a name="l00144"></a>00144 sinfo_band sinfo_get_bbfilter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f);
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utilities_scired.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_UTILITIES_SCIRED_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILITIES_SCIRED_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#include "sinfo_cube_construct.h"</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#include "sinfo_object_cfg.h"</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="keywordtype">float</span>*</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> sinfo_read_distances(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* distlist);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="keywordtype">float</span>** </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> sinfo_read_slitlets_edges(<span class="keyword">const</span> <span class="keywordtype">int</span> nslits, <span class="keyword">const</span> <span class="keywordtype">char</span>* poslist);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> sinfo_check_input_data(object_config* cfg);  </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> sinfo_auto_size_cube(<span class="keywordtype">float</span>* offsetx, </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>                       <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes, </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>                     <span class="keywordtype">float</span>* ref_offx, </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>                     <span class="keywordtype">float</span>* ref_offy,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                     <span class="keywordtype">int</span>* size_x,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>              <span class="keywordtype">int</span>* size_y);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> sinfo_auto_size_cube4(<span class="keywordtype">float</span>* offsetx, </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                       <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>               <span class="keyword">const</span> <span class="keywordtype">int</span> nframes, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                     <span class="keywordtype">float</span>* ref_offx, </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>                     <span class="keywordtype">float</span>* ref_offy,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>                     <span class="keywordtype">int</span>* size_x,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>               <span class="keywordtype">int</span>* size_y);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> sinfo_auto_size_cube5(object_config * cfg, </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                     <span class="keywordtype">float</span>* ref_offx, <span class="keywordtype">float</span>* ref_offy,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                     <span class="keywordtype">float</span>* min_offx, <span class="keywordtype">float</span>* min_offy,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>               <span class="keywordtype">float</span>* max_offx, <span class="keywordtype">float</span>* max_offy);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> cpl_imagelist * </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_new_cube_getvig(</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         cpl_imagelist *       cube_in,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="keywordtype">int</span>             loleft_x,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">int</span>             loleft_y,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="keywordtype">int</span>             upright_x,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">int</span>             upright_y);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_new_set_wcs_cube(cpl_imagelist* cub, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">double</span> clambda, </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>          <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix, <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> sinfo_new_set_wcs_image(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,  </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                         <span class="keywordtype">double</span> cx, <span class="keywordtype">double</span> cy);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> sinfo_new_set_wcs_spectrum(cpl_image* img, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,   </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                            <span class="keywordtype">double</span> clambda, <span class="keywordtype">double</span> dis, <span class="keywordtype">double</span> cpix);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> cpl_imagelist* </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> sinfo_new_fine_tune(cpl_imagelist* cube,<span class="keywordtype">float</span>* correct_dist, </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                     <span class="keyword">const</span> <span class="keywordtype">char</span>* method, <span class="keyword">const</span> <span class="keywordtype">int</span> order, <span class="keyword">const</span> <span class="keywordtype">int</span> nslits) ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> sinfo_new_object_assign_offset(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">int</span> n, <span class="keywordtype">double</span>* ref_offx, </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                                <span class="keywordtype">double</span>* ref_offy, <span class="keywordtype">float</span>** offsetx, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                                <span class="keywordtype">float</span>** offsety);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> sinfo_new_assign_offset2(<span class="keyword">const</span> <span class="keywordtype">int</span> n,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                         <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                         <span class="keywordtype">float</span>* offsetx,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                         <span class="keywordtype">float</span>* offsety,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>              <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> sinfo_new_assign_offset(<span class="keyword">const</span> <span class="keywordtype">int</span> n,<span class="keyword">const</span> <span class="keywordtype">char</span>* name,<span class="keywordtype">float</span>* offsetx,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                         <span class="keywordtype">float</span>* offsety,<span class="keyword">const</span> <span class="keywordtype">float</span> ref_offx,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                         <span class="keyword">const</span> <span class="keywordtype">float</span> ref_offy);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> cpl_imagelist** </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> sinfo_new_sinfoni_correct_median(cpl_imagelist** cubeobject, <span class="keyword">const</span> <span class="keywordtype">int</span> n_cubes);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> cpl_imagelist** </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> sinfo_new_sinfoni_correct_sky2(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                   cpl_imagelist* sky_cube,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                               cpl_imagelist* med_cube,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                               cpl_imagelist* msk_cube,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                               cpl_imagelist* avg_cube,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               cpl_imagelist* sig_cube,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               cpl_imagelist* ovr_cube);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> cpl_imagelist** </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> sinfo_new_sinfoni_correct_sky(cpl_imagelist** cubes,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                   <span class="keyword">const</span> <span class="keywordtype">int</span> nc,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                   cpl_imagelist* sky_cube);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> sinfo_new_sinfoni_correct_median_it(cpl_imagelist** inp);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="keywordtype">int</span> sinfo_calib_flux_std(</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   seds_file,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   stdstars,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filter,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         cpl_frame   *   frame,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         cpl_table   *   tab,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         <span class="keywordtype">double</span>          mag);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> sinfo_band sinfo_get_associated_filter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> sinfo_band sinfo_get_bbfilter(<span class="keyword">const</span> <span class="keywordtype">char</span> * f);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utils_8c_source.html b/html/sinfo__utils_8c_source.html
index fa1540a..c3d9cdb 100644
--- a/html/sinfo__utils_8c_source.html
+++ b/html/sinfo__utils_8c_source.html
@@ -2,127 +2,158 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utils.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utils.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*                                                                           *</span>
-<a name="l00002"></a>00002 <span class="comment"> *   This file is part of the ESO SINFONI Pipeline                           *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span>
-<a name="l00004"></a>00004 <span class="comment"> *                                                                           *</span>
-<a name="l00005"></a>00005 <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   (at your option) any later version.                                     *</span>
-<a name="l00009"></a>00009 <span class="comment"> *                                                                           *</span>
-<a name="l00010"></a>00010 <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   GNU General Public License for more details.                            *</span>
-<a name="l00014"></a>00014 <span class="comment"> *                                                                           *</span>
-<a name="l00015"></a>00015 <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   along with this program; if not, write to the Free Software             *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span>
-<a name="l00018"></a>00018 <span class="comment"> *                                                                           */</span>
-<a name="l00019"></a>00019 <span class="comment">/*</span>
-<a name="l00020"></a>00020 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Log: sinfo_utils.c,v $</span>
-<a name="l00025"></a>00025 <span class="comment"> * Revision 1.7  2012/03/03 10:17:31  amodigli</span>
-<a name="l00026"></a>00026 <span class="comment"> * fixed some doxygen warnings</span>
-<a name="l00027"></a>00027 <span class="comment"> *</span>
-<a name="l00028"></a>00028 <span class="comment"> * Revision 1.6  2010/09/30 14:00:03  kmirny</span>
-<a name="l00029"></a>00029 <span class="comment"> * moving function from wavecal to utils</span>
-<a name="l00030"></a>00030 <span class="comment"> *</span>
-<a name="l00031"></a>00031 <span class="comment"> * Revision 1.5  2007/05/25 06:28:35  amodigli</span>
-<a name="l00032"></a>00032 <span class="comment"> * fixed plugintest warnings</span>
-<a name="l00033"></a>00033 <span class="comment"> *</span>
-<a name="l00034"></a>00034 <span class="comment"> * Revision 1.4  2006/11/07 07:13:25  amodigli</span>
-<a name="l00035"></a>00035 <span class="comment"> * added doxygen</span>
-<a name="l00036"></a>00036 <span class="comment"> *</span>
-<a name="l00037"></a>00037 <span class="comment"> * Revision 1.3  2006/11/04 15:28:36  amodigli</span>
-<a name="l00038"></a>00038 <span class="comment"> * doxygen</span>
-<a name="l00039"></a>00039 <span class="comment"> *</span>
-<a name="l00040"></a>00040 <span class="comment"> * Revision 1.2  2006/10/17 07:02:24  amodigli</span>
-<a name="l00041"></a>00041 <span class="comment"> * shorten line length</span>
-<a name="l00042"></a>00042 <span class="comment"> *</span>
-<a name="l00043"></a>00043 <span class="comment"> * Revision 1.1  2006/08/09 12:26:36  amodigli</span>
-<a name="l00044"></a>00044 <span class="comment"> * added sinfo_utils.h sinfo_utils.c</span>
-<a name="l00045"></a>00045 <span class="comment"> *</span>
-<a name="l00046"></a>00046 <span class="comment"></span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00054"></a>00054 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                            Includes</span>
-<a name="l00065"></a>00065 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_utils.h></span>
-<a name="l00074"></a>00074 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00075"></a>00075 <span class="comment">                            Functions prototypes</span>
-<a name="l00076"></a>00076 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                            Implementation</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="keywordtype">long</span>
-<a name="l00092"></a>00092 sinfo_round_double(<span class="keywordtype">double</span> x)
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094     <span class="keywordflow">return</span> (x >=0) ? (long)(x+0.5) : (long)(x-0.5);
-<a name="l00095"></a>00095 }
-<a name="l00101"></a>00101 <span class="keywordtype">int</span>
-<a name="l00102"></a>00102 sinfo_parameter_get_default_flag ( <span class="keyword">const</span> cpl_parameter* p )
-<a name="l00103"></a>00103 {
-<a name="l00104"></a>00104    <span class="keywordtype">int</span> flag_gasgano=0;
-<a name="l00105"></a>00105    <span class="keywordtype">int</span> flag_norm=0;
-<a name="l00106"></a>00106    <span class="keywordtype">int</span> flag=0;
-<a name="l00107"></a>00107    cpl_type type =0;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109    flag_norm = ( cpl_parameter_get_default_flag ( p ) == 0 ) ? 1 : 0;
-<a name="l00110"></a>00110    type=cpl_parameter_get_type ( p );
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112    <span class="keywordflow">switch</span> ( type )
-<a name="l00113"></a>00113    {
-<a name="l00114"></a>00114       <span class="keywordflow">case</span> CPL_TYPE_BOOL:
-<a name="l00115"></a>00115          flag_gasgano = ( cpl_parameter_get_default_bool ( p ) ==
-<a name="l00116"></a>00116                           cpl_parameter_get_bool ( p ) ) ? 1:0;
-<a name="l00117"></a>00117          <span class="keywordflow">break</span>;
-<a name="l00118"></a>00118       <span class="keywordflow">case</span> CPL_TYPE_INT:
-<a name="l00119"></a>00119          flag_gasgano = ( cpl_parameter_get_default_int ( p ) ==
-<a name="l00120"></a>00120                           cpl_parameter_get_int ( p ) ) ? 1:0;
-<a name="l00121"></a>00121          <span class="keywordflow">break</span>;
-<a name="l00122"></a>00122       <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:
-<a name="l00123"></a>00123          flag_gasgano = ( cpl_parameter_get_default_double ( p ) ==
-<a name="l00124"></a>00124                           cpl_parameter_get_double ( p ) ) ? 1:0;
-<a name="l00125"></a>00125          <span class="keywordflow">break</span>;
-<a name="l00126"></a>00126       <span class="keywordflow">case</span> CPL_TYPE_STRING:
-<a name="l00127"></a>00127          flag_gasgano = ( cpl_parameter_get_default_string ( p ) ==
-<a name="l00128"></a>00128                           cpl_parameter_get_string ( p ) ) ? 1:0;
-<a name="l00129"></a>00129          <span class="keywordflow">break</span>;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131       <span class="keywordflow">default</span>:
-<a name="l00132"></a>00132          cpl_msg_error (cpl_func, <span class="stringliteral">"type not supported"</span> );
-<a name="l00133"></a>00133    }
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135    flag = ( flag_gasgano && flag_norm ) ? 0 : 1;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137    <span class="keywordflow">return</span> flag;
-<a name="l00138"></a>00138 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utils.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*                                                                           *</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *   This file is part of the ESO SINFONI Pipeline                           *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   (at your option) any later version.                                     *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   GNU General Public License for more details.                            *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   along with this program; if not, write to the Free Software             *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *                                                                           */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Log: sinfo_utils.c,v $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * Revision 1.7  2012/03/03 10:17:31  amodigli</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * fixed some doxygen warnings</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * Revision 1.6  2010/09/30 14:00:03  kmirny</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * moving function from wavecal to utils</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * Revision 1.5  2007/05/25 06:28:35  amodigli</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * fixed plugintest warnings</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * Revision 1.4  2006/11/07 07:13:25  amodigli</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * added doxygen</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> * Revision 1.3  2006/11/04 15:28:36  amodigli</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * doxygen</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * Revision 1.2  2006/10/17 07:02:24  amodigli</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * shorten line length</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> * Revision 1.1  2006/08/09 12:26:36  amodigli</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * added sinfo_utils.h sinfo_utils.c</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                            Includes</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_utils.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                            Implementation</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keywordtype">long</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_round_double(<span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordflow">return</span> (x >=0) ? (long)(x+0.5) : (long)(x-0.5);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> sinfo_parameter_get_default_flag ( <span class="keyword">const</span> cpl_parameter* p )</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    <span class="keywordtype">int</span> flag_gasgano=0;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>    <span class="keywordtype">int</span> flag_norm=0;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>    <span class="keywordtype">int</span> flag=0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>    cpl_type type =0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    flag_norm = ( cpl_parameter_get_default_flag ( p ) == 0 ) ? 1 : 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    type=cpl_parameter_get_type ( p );</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    <span class="keywordflow">switch</span> ( type )</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>    {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>       <span class="keywordflow">case</span> CPL_TYPE_BOOL:</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>          flag_gasgano = ( cpl_parameter_get_default_bool ( p ) ==</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                           cpl_parameter_get_bool ( p ) ) ? 1:0;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>       <span class="keywordflow">case</span> CPL_TYPE_INT:</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>          flag_gasgano = ( cpl_parameter_get_default_int ( p ) ==</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                           cpl_parameter_get_int ( p ) ) ? 1:0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>       <span class="keywordflow">case</span> CPL_TYPE_DOUBLE:</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>          flag_gasgano = ( cpl_parameter_get_default_double ( p ) ==</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                           cpl_parameter_get_double ( p ) ) ? 1:0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>       <span class="keywordflow">case</span> CPL_TYPE_STRING:</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>          flag_gasgano = ( cpl_parameter_get_default_string ( p ) ==</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                           cpl_parameter_get_string ( p ) ) ? 1:0;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>          <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>       <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>          cpl_msg_error (cpl_func, <span class="stringliteral">"type not supported"</span> );</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>    }</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>    flag = ( flag_gasgano && flag_norm ) ? 0 : 1;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>    <span class="keywordflow">return</span> flag;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utils_8h_source.html b/html/sinfo__utils_8h_source.html
index c97dd00..a445e70 100644
--- a/html/sinfo__utils_8h_source.html
+++ b/html/sinfo__utils_8h_source.html
@@ -2,114 +2,145 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utils.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utils.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFO Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2010/09/30 14:00:03 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> *</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_UTILS_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="comment">/*</span>
-<a name="l00039"></a>00039 <span class="comment"> * The purpose of this target is to</span>
-<a name="l00040"></a>00040 <span class="comment"> * decrease the amount of messages</span>
-<a name="l00041"></a>00041 <span class="comment"> * printed at the debug level.</span>
-<a name="l00042"></a>00042 <span class="comment"> *</span>
-<a name="l00043"></a>00043 <span class="comment"> * If set to non-zero, even more messages</span>
-<a name="l00044"></a>00044 <span class="comment"> * are printed at the debug level</span>
-<a name="l00045"></a>00045 <span class="comment"> * (sometimes 50 - 100 MB)</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#ifndef WANT_BIG_LOGFILE</span>
-<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#define WANT_BIG_LOGFILE 0</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00051"></a>00051 <span class="preprocessor"></span>
-<a name="l00052"></a>00052 <span class="comment">/*</span>
-<a name="l00053"></a>00053 <span class="comment"> * Set to 1 to show timing</span>
-<a name="l00054"></a>00054 <span class="comment"> * information on msg-level = info</span>
-<a name="l00055"></a>00055 <span class="comment"> */</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#ifndef WANT_TIME_MEASURE</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define WANT_TIME_MEASURE 0</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00059"></a>00059 <span class="preprocessor"></span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="preprocessor">#if WANT_TIME_MEASURE</span>
-<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_START(what) sinfo_msg("Timing (%s, l%d) %s start", \</span>
-<a name="l00063"></a>00063 <span class="preprocessor">                                       __FILE__, __LINE__, what)</span>
-<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_END         sinfo_msg("Timing (%s, l%d) end", \</span>
-<a name="l00065"></a>00065 <span class="preprocessor">                                       __FILE__, __LINE__)</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#else</span>
-<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_START(what) sinfo_msg_debug("Timing (%s, l%d) %s start", \</span>
-<a name="l00068"></a>00068 <span class="preprocessor">                                             __FILE__, __LINE__, what)</span>
-<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_END         sinfo_msg_debug("Timing (%s, l%d) end", \</span>
-<a name="l00070"></a>00070 <span class="preprocessor">                                             __FILE__, __LINE__)</span>
-<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00072"></a>00072 <span class="preprocessor"></span>
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="preprocessor">#ifndef stringify</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#ifndef make_str</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#define stringify(X) #X</span>
-<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#define make_str(X) stringify(X)</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>
-<a name="l00083"></a>00083 <span class="preprocessor">#define TWOSQRT2LN2 2.35482004503095</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span>
-<a name="l00085"></a>00085 <span class="preprocessor">#ifndef M_PI</span>
-<a name="l00086"></a>00086 <span class="preprocessor"></span><span class="preprocessor">#define M_PI 3.1415926535897932384626433832795</span>
-<a name="l00087"></a>00087 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00088"></a>00088 <span class="preprocessor"></span>
-<a name="l00089"></a>00089 <span class="preprocessor">#define COS_DEG(x) cos(((x)/180)*M_PI)</span>
-<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#define SIN_DEG(x) sin(((x)/180)*M_PI)</span>
-<a name="l00091"></a>00091 <span class="preprocessor"></span><span class="preprocessor">#define ACOS_DEG(x) (acos(x)*180/M_PI)</span>
-<a name="l00092"></a>00092 <span class="preprocessor"></span>
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 <span class="keywordtype">long</span> sinfo_round_double(<span class="keywordtype">double</span> x);
-<a name="l00096"></a>00096 <span class="keywordtype">int</span>
-<a name="l00097"></a>00097 sinfo_parameter_get_default_flag ( <span class="keyword">const</span> cpl_parameter* p );
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utils.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFO Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2010/09/30 14:00:03 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_UTILS_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * The purpose of this target is to</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> * decrease the amount of messages</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * printed at the debug level.</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> * If set to non-zero, even more messages</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * are printed at the debug level</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * (sometimes 50 - 100 MB)</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#ifndef WANT_BIG_LOGFILE</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor"></span><span class="preprocessor">#define WANT_BIG_LOGFILE 0</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment"> * Set to 1 to show timing</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> * information on msg-level = info</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#ifndef WANT_TIME_MEASURE</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#define WANT_TIME_MEASURE 0</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#if WANT_TIME_MEASURE</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_START(what) sinfo_msg("Timing (%s, l%d) %s start", \</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">                                       __FILE__, __LINE__, what)</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_END         sinfo_msg("Timing (%s, l%d) end", \</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">                                       __FILE__, __LINE__)</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span><span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_START(what) sinfo_msg_debug("Timing (%s, l%d) %s start", \</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">                                             __FILE__, __LINE__, what)</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_TIME_END         sinfo_msg_debug("Timing (%s, l%d) end", \</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">                                             __FILE__, __LINE__)</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor">#ifndef stringify</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef make_str</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span><span class="preprocessor">#define stringify(X) #X</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor"></span><span class="preprocessor">#define make_str(X) stringify(X)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#define TWOSQRT2LN2 2.35482004503095</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">#ifndef M_PI</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor"></span><span class="preprocessor">#define M_PI 3.1415926535897932384626433832795</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor">#define COS_DEG(x) cos(((x)/180)*M_PI)</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="preprocessor"></span><span class="preprocessor">#define SIN_DEG(x) sin(((x)/180)*M_PI)</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor"></span><span class="preprocessor">#define ACOS_DEG(x) (acos(x)*180/M_PI)</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="keywordtype">long</span> sinfo_round_double(<span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_parameter_get_default_flag ( <span class="keyword">const</span> cpl_parameter* p );</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utils__wrappers_8c_source.html b/html/sinfo__utils__wrappers_8c_source.html
index 80d95a1..b52e799 100644
--- a/html/sinfo__utils__wrappers_8c_source.html
+++ b/html/sinfo__utils__wrappers_8c_source.html
@@ -2,334 +2,365 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utils_wrappers.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utils_wrappers.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
-<a name="l00002"></a>00002 <span class="comment">/*                                                                           *</span>
-<a name="l00003"></a>00003 <span class="comment"> *   This file is part of the ESO SINFO Pipeline                             *</span>
-<a name="l00004"></a>00004 <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span>
-<a name="l00005"></a>00005 <span class="comment"> *                                                                           *</span>
-<a name="l00006"></a>00006 <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span>
-<a name="l00007"></a>00007 <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span>
-<a name="l00008"></a>00008 <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span>
-<a name="l00009"></a>00009 <span class="comment"> *   (at your option) any later version.                                     *</span>
-<a name="l00010"></a>00010 <span class="comment"> *                                                                           *</span>
-<a name="l00011"></a>00011 <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span>
-<a name="l00012"></a>00012 <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span>
-<a name="l00013"></a>00013 <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span>
-<a name="l00014"></a>00014 <span class="comment"> *   GNU General Public License for more details.                            *</span>
-<a name="l00015"></a>00015 <span class="comment"> *                                                                           *</span>
-<a name="l00016"></a>00016 <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span>
-<a name="l00017"></a>00017 <span class="comment"> *   along with this program; if not, write to the Free Software             *</span>
-<a name="l00018"></a>00018 <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span>
-<a name="l00019"></a>00019 <span class="comment"> *                                                                           */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 
-<a name="l00022"></a>00022 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00024"></a>00024 <span class="preprocessor">#endif</span>
-<a name="l00025"></a>00025 <span class="preprocessor"></span>
-<a name="l00027"></a>00027 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_dump.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_utils.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 cpl_error_code
-<a name="l00060"></a>00060 sinfo_sort_table_1(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column, cpl_boolean reverse)
-<a name="l00061"></a>00061 {
-<a name="l00062"></a>00062     cpl_propertylist *plist = NULL;
-<a name="l00063"></a>00063     
-<a name="l00064"></a>00064     assure(t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);
-<a name="l00065"></a>00065     assure(cpl_table_has_column(t, column), CPL_ERROR_ILLEGAL_INPUT, 
-<a name="l00066"></a>00066        <span class="stringliteral">"No column '%s'"</span>, column);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068     check(( plist = cpl_propertylist_new(),
-<a name="l00069"></a>00069         cpl_propertylist_append_bool(plist, column, reverse)),
-<a name="l00070"></a>00070        <span class="stringliteral">"Could not create property list for sorting"</span>);
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072     check( cpl_table_sort(t, plist), <span class="stringliteral">"Could not sort table"</span>);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074   cleanup:
-<a name="l00075"></a>00075     sinfo_free_propertylist(&plist);
-<a name="l00076"></a>00076     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00077"></a>00077 }
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00095"></a>00095 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 cpl_error_code
-<a name="l00097"></a>00097 sinfo_sort_table_2(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1, <span class="keyword">const</span> <span class="keywordtype">char</span> *column2, 
-<a name="l00098"></a>00098           cpl_boolean reverse1, cpl_boolean reverse2)
-<a name="l00099"></a>00099 {
-<a name="l00100"></a>00100     cpl_propertylist *plist = NULL;
-<a name="l00101"></a>00101     
-<a name="l00102"></a>00102     assure(t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);
-<a name="l00103"></a>00103     assure(cpl_table_has_column(t, column1), CPL_ERROR_ILLEGAL_INPUT, 
-<a name="l00104"></a>00104        <span class="stringliteral">"No column '%s'"</span>, column1);
-<a name="l00105"></a>00105     assure(cpl_table_has_column(t, column2), CPL_ERROR_ILLEGAL_INPUT,
-<a name="l00106"></a>00106        <span class="stringliteral">"No column '%s'"</span>, column2);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     check(( plist = cpl_propertylist_new(),
-<a name="l00109"></a>00109         cpl_propertylist_append_bool(plist, column1, reverse1),
-<a name="l00110"></a>00110         cpl_propertylist_append_bool(plist, column2, reverse2)),
-<a name="l00111"></a>00111        <span class="stringliteral">"Could not create property list for sorting"</span>);
-<a name="l00112"></a>00112     check( cpl_table_sort(t, plist), <span class="stringliteral">"Could not sort table"</span>);
-<a name="l00113"></a>00113     
-<a name="l00114"></a>00114   cleanup:
-<a name="l00115"></a>00115     sinfo_free_propertylist(&plist);
-<a name="l00116"></a>00116     <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00117"></a>00117 }
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00137"></a>00137 cpl_table *
-<a name="l00138"></a>00138 sinfo_extract_table_rows(<span class="keyword">const</span> cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column,
-<a name="l00139"></a>00139             cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value)
-<a name="l00140"></a>00140 {
-<a name="l00141"></a>00141     cpl_table *result = NULL;
-<a name="l00142"></a>00142     assure( t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);
-<a name="l00143"></a>00143     assure( cpl_table_has_column(t, column), CPL_ERROR_INCOMPATIBLE_INPUT,
-<a name="l00144"></a>00144         <span class="stringliteral">"No such column: %s"</span>, column);
-<a name="l00145"></a>00145     
-<a name="l00146"></a>00146     <span class="comment">/* 1. Extract (duplicate) the entire table</span>
-<a name="l00147"></a>00147 <span class="comment">       2. remove rows *not* satisfying the criterion */</span>
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149     check(result = cpl_table_duplicate(t),<span class="stringliteral">"selecting"</span>);
-<a name="l00150"></a>00150     check(sinfo_select_table_rows(result, column, <span class="keyword">operator</span>, value),<span class="stringliteral">"select"</span>);
-<a name="l00151"></a>00151     check(cpl_table_not_selected(result),<span class="stringliteral">"Inverses selection"</span>);
-<a name="l00152"></a>00152     check(cpl_table_erase_selected(result),<span class="stringliteral">"erase selection"</span>);<span class="comment">//problems</span>
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="comment">/*</span>
-<a name="l00155"></a>00155 <span class="comment">    check(( result = cpl_table_duplicate(t),</span>
-<a name="l00156"></a>00156 <span class="comment">        sinfo_select_table_rows(result, column, operator, value),</span>
-<a name="l00157"></a>00157 <span class="comment">        cpl_table_not_selected(result),  // Inverses selection </span>
-<a name="l00158"></a>00158 <span class="comment">        cpl_table_erase_selected(result)),</span>
-<a name="l00159"></a>00159 <span class="comment">       "Error extracting rows");</span>
-<a name="l00160"></a>00160 <span class="comment">    */</span>
-<a name="l00161"></a>00161     
-<a name="l00162"></a>00162   cleanup:
-<a name="l00163"></a>00163     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)
-<a name="l00164"></a>00164     {
-<a name="l00165"></a>00165         sinfo_free_table(&result);
-<a name="l00166"></a>00166     }
-<a name="l00167"></a>00167     <span class="keywordflow">return</span> result;
-<a name="l00168"></a>00168 }
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 <span class="keywordtype">int</span>
-<a name="l00191"></a>00191 sinfo_select_table_rows(cpl_table *t,  <span class="keyword">const</span> <span class="keywordtype">char</span> *column, 
-<a name="l00192"></a>00192                cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value)
-<a name="l00193"></a>00193 {
-<a name="l00194"></a>00194     <span class="keywordtype">int</span> result = 0;
-<a name="l00195"></a>00195     cpl_type type;
-<a name="l00196"></a>00196     assure( t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);
-<a name="l00197"></a>00197     assure( cpl_table_has_column(t, column), CPL_ERROR_INCOMPATIBLE_INPUT, 
-<a name="l00198"></a>00198         <span class="stringliteral">"No such column: %s"</span>, column);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     type = cpl_table_get_column_type(t, column);
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     assure( type == CPL_TYPE_DOUBLE ||
-<a name="l00203"></a>00203         type == CPL_TYPE_INT, CPL_ERROR_INVALID_TYPE,
-<a name="l00204"></a>00204         <span class="stringliteral">"Column '%s' must be double or int. %s found"</span>, column, 
-<a name="l00205"></a>00205         sinfo_tostring_cpl_type(type));
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     check( cpl_table_select_all(t), <span class="stringliteral">"Error selecting rows"</span>);
-<a name="l00208"></a>00208     
-<a name="l00209"></a>00209     <span class="keywordflow">if</span>      (type == CPL_TYPE_DOUBLE)
-<a name="l00210"></a>00210     {
-<a name="l00211"></a>00211         result = cpl_table_and_selected_double(t, column, <span class="keyword">operator</span>, value);
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_INT)
-<a name="l00214"></a>00214     {
-<a name="l00215"></a>00215         result = cpl_table_and_selected_int   (t, column, <span class="keyword">operator</span>, 
-<a name="l00216"></a>00216                              sinfo_round_double(value));
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218     <span class="keywordflow">else</span> { <span class="comment">/*impossible*/</span> passure(CPL_FALSE, <span class="stringliteral">""</span>); }
-<a name="l00219"></a>00219     
-<a name="l00220"></a>00220   cleanup:
-<a name="l00221"></a>00221     <span class="keywordflow">return</span> result;
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 }
-<a name="l00224"></a>00224 
-<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="keywordtype">void</span> sinfo_free_parameter(cpl_parameter **p) 
-<a name="l00231"></a>00231 {<span class="keywordflow">if</span>(p){cpl_parameter_delete(*p);            *p = NULL;}}
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00239"></a>00239 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00240"></a>00240 <span class="keywordtype">void</span> sinfo_free_apertures(cpl_apertures **a) 
-<a name="l00241"></a>00241 {<span class="keywordflow">if</span>(a){cpl_apertures_delete(*a);            *a = NULL;}}
-<a name="l00242"></a>00242 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00249"></a>00249 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00250"></a>00250 <span class="keywordtype">void</span> sinfo_free_image(cpl_image **i)  {<span class="keywordflow">if</span>(i){cpl_image_delete(*i); *i = NULL;}}
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00258"></a>00258 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00259"></a>00259 <span class="keywordtype">void</span> sinfoni_free_vector(cpl_vector **v)  {<span class="keywordflow">if</span>(v){cpl_vector_delete(*v); *v = NULL;}}
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00267"></a>00267 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00268"></a>00268 <span class="keywordtype">void</span> sinfo_free_array(cpl_array **i)  {<span class="keywordflow">if</span>(i){cpl_array_delete(*i); *i = NULL;}}
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00275"></a>00275 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00276"></a>00276 <span class="keywordtype">void</span> sinfo_free_mask(cpl_mask **m)  {<span class="keywordflow">if</span>(m){cpl_mask_delete(*m); *m = NULL;}}
-<a name="l00277"></a>00277 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00282"></a>00282 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00283"></a>00283 <span class="keywordtype">void</span> sinfo_free_imagelist(cpl_imagelist **i) 
-<a name="l00284"></a>00284 {<span class="keywordflow">if</span>(i){cpl_imagelist_delete(*i);        *i = NULL;}}
-<a name="l00285"></a>00285 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00290"></a>00290 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00291"></a>00291 <span class="keywordtype">void</span> sinfo_free_table(cpl_table **t) {<span class="keywordflow">if</span>(t){cpl_table_delete(*t); *t = NULL;}}
-<a name="l00292"></a>00292 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00297"></a>00297 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00298"></a>00298 <span class="keywordtype">void</span> sinfo_free_propertylist(cpl_propertylist **p)   
-<a name="l00299"></a>00299 {<span class="keywordflow">if</span>(p){cpl_propertylist_delete(*p);     *p = NULL;}}
-<a name="l00300"></a>00300 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00305"></a>00305 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00306"></a>00306 <span class="keywordtype">void</span> sinfo_free_polynomial(cpl_polynomial **p)       
-<a name="l00307"></a>00307 {<span class="keywordflow">if</span>(p){cpl_polynomial_delete(*p);       *p = NULL;}}
-<a name="l00308"></a>00308 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00313"></a>00313 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00314"></a>00314 <span class="comment">/* similar also present in svd.c */</span>
-<a name="l00315"></a>00315 <span class="keywordtype">void</span> sinfoni_free_matrix(cpl_matrix **m) 
-<a name="l00316"></a>00316 {<span class="keywordflow">if</span>(m){cpl_matrix_delete(*m); *m = NULL;}}
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00323"></a>00323 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00324"></a>00324 <span class="keywordtype">void</span> sinfo_free_parameterlist(cpl_parameterlist **p) 
-<a name="l00325"></a>00325 {<span class="keywordflow">if</span>(p){cpl_parameterlist_delete(*p);    *p = NULL;}}
-<a name="l00326"></a>00326 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00331"></a>00331 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00332"></a>00332 <span class="keywordtype">void</span> sinfo_free_frameset(cpl_frameset **f) 
-<a name="l00333"></a>00333 {<span class="keywordflow">if</span>(f){cpl_frameset_delete(*f);    *f = NULL;}}
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00341"></a>00341 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00342"></a>00342 <span class="keywordtype">void</span> sinfo_free_frame(cpl_frame **f) 
-<a name="l00343"></a>00343 {<span class="keywordflow">if</span>(f){cpl_frame_delete(*f);    *f = NULL;}}
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00351"></a>00351 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00352"></a>00352 <span class="keywordtype">void</span> sinfo_free_int(<span class="keywordtype">int</span> **i) {<span class="keywordflow">if</span>(i){cpl_free(*i);    *i = NULL;}}
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00360"></a>00360 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00361"></a>00361 <span class="keywordtype">void</span> sinfo_free_float(<span class="keywordtype">float</span> **f) {<span class="keywordflow">if</span>(f){cpl_free(*f);    *f = NULL;}}
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00370"></a>00370 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00371"></a>00371 <span class="keywordtype">void</span> sinfo_free_double(<span class="keywordtype">double</span> **d) {<span class="keywordflow">if</span>(d){cpl_free(*d);    *d = NULL;}}
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00379"></a>00379 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00380"></a>00380 <span class="keywordtype">void</span> sinfo_free_array_imagelist(cpl_imagelist ***a) 
-<a name="l00381"></a>00381 {<span class="keywordflow">if</span>(*a){cpl_free(*a); *a = NULL;}}
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00388"></a>00388 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00389"></a>00389 <span class="keywordtype">void</span> sinfo_free_array_image(cpl_image ***a) {<span class="keywordflow">if</span>(*a){cpl_free(*a); *a = NULL;}}
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00398"></a>00398 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00399"></a>00399 <span class="keywordtype">void</span> sinfo_free_image_array(cpl_image ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) 
-<a name="l00400"></a>00400 {
-<a name="l00401"></a>00401   <span class="keywordtype">int</span> i=0;
-<a name="l00402"></a>00402   <span class="keywordflow">if</span>((*a) != NULL) {
-<a name="l00403"></a>00403     <span class="keywordflow">for</span> (i=0; i < n; i++) {
-<a name="l00404"></a>00404       <span class="keywordflow">if</span>((*a)[i] != NULL) {
-<a name="l00405"></a>00405     sinfo_free_image(&(*a)[i]);
-<a name="l00406"></a>00406     (*a)[i]=NULL;
-<a name="l00407"></a>00407       }
-<a name="l00408"></a>00408     }
-<a name="l00409"></a>00409     sinfo_free_array_image(&(*a));
-<a name="l00410"></a>00410     *a=NULL;
-<a name="l00411"></a>00411   }
-<a name="l00412"></a>00412 }
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00420"></a>00420 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00421"></a>00421 <span class="keywordtype">void</span> sinfo_free_float_array(<span class="keywordtype">float</span> ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) 
-<a name="l00422"></a>00422 {
-<a name="l00423"></a>00423   <span class="keywordtype">int</span> i=0;
-<a name="l00424"></a>00424   <span class="keywordflow">if</span>((*a) != NULL) {
-<a name="l00425"></a>00425     <span class="keywordflow">for</span> (i=0; i < n; i++) {
-<a name="l00426"></a>00426       <span class="keywordflow">if</span>((*a)[i] != NULL) {
-<a name="l00427"></a>00427     sinfo_free_float(&(*a)[i]);
-<a name="l00428"></a>00428     (*a)[i]=NULL;
-<a name="l00429"></a>00429       }
-<a name="l00430"></a>00430     }
-<a name="l00431"></a>00431     cpl_free(*a);
-<a name="l00432"></a>00432     *a=NULL;
-<a name="l00433"></a>00433   }
-<a name="l00434"></a>00434 }
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00441"></a>00441 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00442"></a>00442 
-<a name="l00443"></a>00443 <span class="keywordtype">void</span> 
-<a name="l00444"></a>00444 sinfo_free_my_vector(cpl_vector **v) {<span class="keywordflow">if</span>(v){cpl_vector_delete(*v);*v = NULL;}}
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00452"></a>00452 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00453"></a>00453 
-<a name="l00454"></a>00454 <span class="keywordtype">void</span> 
-<a name="l00455"></a>00455 sinfo_free_bivector(cpl_bivector **bv) {
-<a name="l00456"></a>00456   <span class="keywordflow">if</span>(bv){
-<a name="l00457"></a>00457      cpl_bivector_delete(*bv);
-<a name="l00458"></a>00458      *bv = NULL;
-<a name="l00459"></a>00459   }
-<a name="l00460"></a>00460 }
-<a name="l00461"></a>00461 
-<a name="l00462"></a>00462 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00467"></a>00467 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00468"></a>00468 <span class="keywordtype">void</span> sinfo_free_stats(cpl_stats **s) {<span class="keywordflow">if</span>(s){cpl_stats_delete(*s); *s = NULL;}}
-<a name="l00469"></a>00469 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00474"></a>00474 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00475"></a>00475 <span class="keywordtype">void</span> 
-<a name="l00476"></a>00476 sinfo_unwrap_vector(cpl_vector **v) {<span class="keywordflow">if</span>(v){cpl_vector_unwrap(*v); *v = NULL;}}
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00483"></a>00483 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00484"></a>00484 <span class="keywordtype">void</span> sinfo_unwrap_matrix(cpl_matrix **m) 
-<a name="l00485"></a>00485 {<span class="keywordflow">if</span>(m){cpl_matrix_unwrap(*m); *m = NULL;}}
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00492"></a>00492 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00493"></a>00493 <span class="keywordtype">void</span> sinfo_unwrap_bivector_vectors(cpl_bivector **b) 
-<a name="l00494"></a>00494 {<span class="keywordflow">if</span>(b){cpl_bivector_unwrap_vectors(*b); *b = NULL;}}
-<a name="l00495"></a>00495 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utils_wrappers.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> </div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment">/*                                                                           *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> *   This file is part of the ESO SINFO Pipeline                             *</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *   Copyright (C) 2004,2005 European Southern Observatory                   *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *   This library is free software; you can redistribute it and/or modify    *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> *   it under the terms of the GNU General Public License as published by    *</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> *   the Free Software Foundation; either version 2 of the License, or       *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *   (at your option) any later version.                                     *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *   This program is distributed in the hope that it will be useful,         *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *   GNU General Public License for more details.                            *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *                                                                           *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *   You should have received a copy of the GNU General Public License       *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> *   along with this program; if not, write to the Free Software             *</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> *   Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA    *</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> *                                                                           */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_dump.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> cpl_error_code</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> sinfo_sort_table_1(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column, cpl_boolean reverse)</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>     cpl_propertylist *plist = NULL;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>     </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>     assure(t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>     assure(cpl_table_has_column(t, column), CPL_ERROR_ILLEGAL_INPUT, </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>        <span class="stringliteral">"No column '%s'"</span>, column);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>     check(( plist = cpl_propertylist_new(),</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         cpl_propertylist_append_bool(plist, column, reverse)),</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>        <span class="stringliteral">"Could not create property list for sorting"</span>);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>     check( cpl_table_sort(t, plist), <span class="stringliteral">"Could not sort table"</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   cleanup:</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> }</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> cpl_error_code</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> sinfo_sort_table_2(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1, <span class="keyword">const</span> <span class="keywordtype">char</span> *column2, </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>           cpl_boolean reverse1, cpl_boolean reverse2)</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_propertylist *plist = NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     assure(t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     assure(cpl_table_has_column(t, column1), CPL_ERROR_ILLEGAL_INPUT, </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>        <span class="stringliteral">"No column '%s'"</span>, column1);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     assure(cpl_table_has_column(t, column2), CPL_ERROR_ILLEGAL_INPUT,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>        <span class="stringliteral">"No column '%s'"</span>, column2);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     check(( plist = cpl_propertylist_new(),</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         cpl_propertylist_append_bool(plist, column1, reverse1),</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>         cpl_propertylist_append_bool(plist, column2, reverse2)),</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>        <span class="stringliteral">"Could not create property list for sorting"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     check( cpl_table_sort(t, plist), <span class="stringliteral">"Could not sort table"</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   cleanup:</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> cpl_table *</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> sinfo_extract_table_rows(<span class="keyword">const</span> cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>             cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     cpl_table *result = NULL;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     assure( t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     assure( cpl_table_has_column(t, column), CPL_ERROR_INCOMPATIBLE_INPUT,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>         <span class="stringliteral">"No such column: %s"</span>, column);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* 1. Extract (duplicate) the entire table</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">       2. remove rows *not* satisfying the criterion */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     check(result = cpl_table_duplicate(t),<span class="stringliteral">"selecting"</span>);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     check(sinfo_select_table_rows(result, column, <span class="keyword">operator</span>, value),<span class="stringliteral">"select"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     check(cpl_table_not_selected(result),<span class="stringliteral">"Inverses selection"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     check(cpl_table_erase_selected(result),<span class="stringliteral">"erase selection"</span>);<span class="comment">//problems</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">    check(( result = cpl_table_duplicate(t),</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">        sinfo_select_table_rows(result, column, operator, value),</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">        cpl_table_not_selected(result),  // Inverses selection </span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">        cpl_table_erase_selected(result)),</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">       "Error extracting rows");</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   cleanup:</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         sinfo_free_table(&result);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> sinfo_select_table_rows(cpl_table *t,  <span class="keyword">const</span> <span class="keywordtype">char</span> *column, </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordtype">int</span> result = 0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_type type;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     assure( t != NULL, CPL_ERROR_NULL_INPUT, <span class="stringliteral">"Null table"</span>);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     assure( cpl_table_has_column(t, column), CPL_ERROR_INCOMPATIBLE_INPUT, </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         <span class="stringliteral">"No such column: %s"</span>, column);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     type = cpl_table_get_column_type(t, column);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     assure( type == CPL_TYPE_DOUBLE ||</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         type == CPL_TYPE_INT, CPL_ERROR_INVALID_TYPE,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>         <span class="stringliteral">"Column '%s' must be double or int. %s found"</span>, column, </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         sinfo_tostring_cpl_type(type));</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     check( cpl_table_select_all(t), <span class="stringliteral">"Error selecting rows"</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">if</span>      (type == CPL_TYPE_DOUBLE)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         result = cpl_table_and_selected_double(t, column, <span class="keyword">operator</span>, value);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == CPL_TYPE_INT)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         result = cpl_table_and_selected_int   (t, column, <span class="keyword">operator</span>, </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                              sinfo_round_double(value));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">else</span> { <span class="comment">/*impossible*/</span> passure(CPL_FALSE, <span class="stringliteral">""</span>); }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   cleanup:</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keywordtype">void</span> sinfo_free_parameter(cpl_parameter **p) </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> {<span class="keywordflow">if</span>(p){cpl_parameter_delete(*p);            *p = NULL;}}</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="keywordtype">void</span> sinfo_free_apertures(cpl_apertures **a) </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> {<span class="keywordflow">if</span>(a){cpl_apertures_delete(*a);            *a = NULL;}}</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> <span class="keywordtype">void</span> sinfo_free_image(cpl_image **i)  {<span class="keywordflow">if</span>(i){cpl_image_delete(*i); *i = NULL;}}</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="keywordtype">void</span> sinfoni_free_vector(cpl_vector **v)  {<span class="keywordflow">if</span>(v){cpl_vector_delete(*v); *v = NULL;}}</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="keywordtype">void</span> sinfo_free_array(cpl_array **i)  {<span class="keywordflow">if</span>(i){cpl_array_delete(*i); *i = NULL;}}</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="keywordtype">void</span> sinfo_free_mask(cpl_mask **m)  {<span class="keywordflow">if</span>(m){cpl_mask_delete(*m); *m = NULL;}}</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> <span class="keywordtype">void</span> sinfo_free_imagelist(cpl_imagelist **i) </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> {<span class="keywordflow">if</span>(i){cpl_imagelist_delete(*i);        *i = NULL;}}</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="keywordtype">void</span> sinfo_free_table(cpl_table **t) {<span class="keywordflow">if</span>(t){cpl_table_delete(*t); *t = NULL;}}</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="keywordtype">void</span> sinfo_free_propertylist(cpl_propertylist **p)   </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> {<span class="keywordflow">if</span>(p){cpl_propertylist_delete(*p);     *p = NULL;}}</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="keywordtype">void</span> sinfo_free_polynomial(cpl_polynomial **p)       </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> {<span class="keywordflow">if</span>(p){cpl_polynomial_delete(*p);       *p = NULL;}}</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">/* similar also present in svd.c */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="keywordtype">void</span> sinfoni_free_matrix(cpl_matrix **m) </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> {<span class="keywordflow">if</span>(m){cpl_matrix_delete(*m); *m = NULL;}}</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="keywordtype">void</span> sinfo_free_parameterlist(cpl_parameterlist **p) </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> {<span class="keywordflow">if</span>(p){cpl_parameterlist_delete(*p);    *p = NULL;}}</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> <span class="keywordtype">void</span> sinfo_free_frameset(cpl_frameset **f) </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> {<span class="keywordflow">if</span>(f){cpl_frameset_delete(*f);    *f = NULL;}}</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="keywordtype">void</span> sinfo_free_frame(cpl_frame **f) </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> {<span class="keywordflow">if</span>(f){cpl_frame_delete(*f);    *f = NULL;}}</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="keywordtype">void</span> sinfo_free_int(<span class="keywordtype">int</span> **i) {<span class="keywordflow">if</span>(i){cpl_free(*i);    *i = NULL;}}</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="keywordtype">void</span> sinfo_free_float(<span class="keywordtype">float</span> **f) {<span class="keywordflow">if</span>(f){cpl_free(*f);    *f = NULL;}}</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="keywordtype">void</span> sinfo_free_double(<span class="keywordtype">double</span> **d) {<span class="keywordflow">if</span>(d){cpl_free(*d);    *d = NULL;}}</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="keywordtype">void</span> sinfo_free_array_imagelist(cpl_imagelist ***a) </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> {<span class="keywordflow">if</span>(*a){cpl_free(*a); *a = NULL;}}</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="keywordtype">void</span> sinfo_free_array_image(cpl_image ***a) {<span class="keywordflow">if</span>(*a){cpl_free(*a); *a = NULL;}}</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="keywordtype">void</span> sinfo_free_image_array(cpl_image ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   <span class="keywordflow">if</span>((*a) != NULL) {</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordflow">for</span> (i=0; i < n; i++) {</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>       <span class="keywordflow">if</span>((*a)[i] != NULL) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     sinfo_free_image(&(*a)[i]);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     (*a)[i]=NULL;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     }</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     sinfo_free_array_image(&(*a));</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     *a=NULL;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> <span class="keywordtype">void</span> sinfo_free_float_array(<span class="keywordtype">float</span> ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> {</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   <span class="keywordflow">if</span>((*a) != NULL) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     <span class="keywordflow">for</span> (i=0; i < n; i++) {</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>       <span class="keywordflow">if</span>((*a)[i] != NULL) {</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     sinfo_free_float(&(*a)[i]);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     (*a)[i]=NULL;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>       }</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     }</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     cpl_free(*a);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     *a=NULL;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> sinfo_free_my_vector(cpl_vector **v) {<span class="keywordflow">if</span>(v){cpl_vector_delete(*v);*v = NULL;}}</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> sinfo_free_bivector(cpl_bivector **bv) {</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   <span class="keywordflow">if</span>(bv){</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>      cpl_bivector_delete(*bv);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>      *bv = NULL;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   }</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> }</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span> </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span> <span class="keywordtype">void</span> sinfo_free_stats(cpl_stats **s) {<span class="keywordflow">if</span>(s){cpl_stats_delete(*s); *s = NULL;}}</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> sinfo_unwrap_vector(cpl_vector **v) {<span class="keywordflow">if</span>(v){cpl_vector_unwrap(*v); *v = NULL;}}</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> <span class="keywordtype">void</span> sinfo_unwrap_matrix(cpl_matrix **m) </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> {<span class="keywordflow">if</span>(m){cpl_matrix_unwrap(*m); *m = NULL;}}</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> <span class="keywordtype">void</span> sinfo_unwrap_bivector_vectors(cpl_bivector **b) </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> {<span class="keywordflow">if</span>(b){cpl_bivector_unwrap_vectors(*b); *b = NULL;}}</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utils__wrappers_8h_source.html b/html/sinfo__utils__wrappers_8h_source.html
index 258a037..2bae2f1 100644
--- a/html/sinfo__utils__wrappers_8h_source.html
+++ b/html/sinfo__utils__wrappers_8h_source.html
@@ -2,99 +2,130 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utils_wrappers.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utils_wrappers.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="preprocessor">#ifndef SINFO_UTILS_WRAPPERS_H</span>
-<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILS_WRAPPERS_H</span>
-<a name="l00022"></a>00022 <span class="preprocessor"></span>
-<a name="l00023"></a>00023 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00025"></a>00025 <span class="preprocessor">#endif</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00027"></a>00027 <span class="comment">                    Includes</span>
-<a name="l00028"></a>00028 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Defines</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   Prototypes</span>
-<a name="l00039"></a>00039 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="keywordtype">void</span> sinfo_free_float_array(<span class="keywordtype">float</span> ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) ;
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 cpl_table *
-<a name="l00043"></a>00043 sinfo_extract_table_rows(<span class="keyword">const</span> cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column,
-<a name="l00044"></a>00044              cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value);
-<a name="l00045"></a>00045 <span class="keywordtype">int</span>
-<a name="l00046"></a>00046 sinfo_select_table_rows(cpl_table *t,  <span class="keyword">const</span> <span class="keywordtype">char</span> *column, 
-<a name="l00047"></a>00047             cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value);
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 cpl_error_code sinfo_sort_table_1(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1,
-<a name="l00050"></a>00050                  cpl_boolean reverse1);
-<a name="l00051"></a>00051 cpl_error_code sinfo_sort_table_2(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1, 
-<a name="l00052"></a>00052                  <span class="keyword">const</span> <span class="keywordtype">char</span> *column2, cpl_boolean reverse1, 
-<a name="l00053"></a>00053                  cpl_boolean reverse2);
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="keywordtype">void</span> sinfoni_free_vector(cpl_vector **v);
-<a name="l00056"></a>00056 <span class="keywordtype">void</span> sinfo_free_array(cpl_array **i);
-<a name="l00057"></a>00057 <span class="keywordtype">void</span> sinfo_free_apertures(cpl_apertures **a);
-<a name="l00058"></a>00058 <span class="keywordtype">void</span> sinfo_free_parameter(cpl_parameter **p);
-<a name="l00059"></a>00059 <span class="keywordtype">void</span> sinfo_free_image(cpl_image **i);
-<a name="l00060"></a>00060 <span class="keywordtype">void</span> sinfo_free_mask(cpl_mask **m);
-<a name="l00061"></a>00061 <span class="keywordtype">void</span> sinfo_free_imagelist(cpl_imagelist **i);
-<a name="l00062"></a>00062 <span class="keywordtype">void</span> sinfo_free_table(cpl_table **t);
-<a name="l00063"></a>00063 <span class="keywordtype">void</span> sinfo_free_propertylist(cpl_propertylist **p);
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> sinfo_free_polynomial(cpl_polynomial **p);
-<a name="l00065"></a>00065 <span class="keywordtype">void</span> sinfo_free_stats(cpl_stats **s);
-<a name="l00066"></a>00066 <span class="keywordtype">void</span> sinfo_unwrap_matrix(cpl_matrix **m);
-<a name="l00067"></a>00067 <span class="keywordtype">void</span> sinfo_unwrap_vector(cpl_vector **v);
-<a name="l00068"></a>00068 <span class="keywordtype">void</span> sinfo_unwrap_bivector_vectors(cpl_bivector **b);
-<a name="l00069"></a>00069 <span class="keywordtype">void</span> sinfo_free_parameterlist(cpl_parameterlist **p);
-<a name="l00070"></a>00070 <span class="keywordtype">void</span> sinfo_free_frameset(cpl_frameset **f);
-<a name="l00071"></a>00071 <span class="keywordtype">void</span> sinfo_free_frame(cpl_frame **f);
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> sinfo_free_int(<span class="keywordtype">int</span> **i);
-<a name="l00073"></a>00073 <span class="keywordtype">void</span> sinfo_free_float(<span class="keywordtype">float</span> **i);
-<a name="l00074"></a>00074 <span class="keywordtype">void</span> sinfo_free_double(<span class="keywordtype">double</span> **i);
-<a name="l00075"></a>00075 <span class="keywordtype">void</span> sinfo_free_array_imagelist(cpl_imagelist ***a);
-<a name="l00076"></a>00076 <span class="keywordtype">void</span> sinfo_free_array_image(cpl_image ***a);
-<a name="l00077"></a>00077 <span class="keywordtype">void</span> sinfo_free_image_array(cpl_image ***a,<span class="keyword">const</span> <span class="keywordtype">int</span> n);
-<a name="l00078"></a>00078 <span class="comment">/* similar are also defined with same name in svd.h */</span>
-<a name="l00079"></a>00079 <span class="keywordtype">void</span> sinfoni_free_matrix(cpl_matrix **m);
-<a name="l00080"></a>00080 <span class="keywordtype">void</span> sinfo_free_my_vector(cpl_vector **v);
-<a name="l00081"></a>00081 <span class="keywordtype">void</span> sinfo_free_bivector(cpl_bivector **bv);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utils_wrappers.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="preprocessor">#ifndef SINFO_UTILS_WRAPPERS_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTILS_WRAPPERS_H</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">                    Includes</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Defines</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   Prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">void</span> sinfo_free_float_array(<span class="keywordtype">float</span> ***a, <span class="keyword">const</span> <span class="keywordtype">int</span> n) ;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> cpl_table *</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> sinfo_extract_table_rows(<span class="keyword">const</span> cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>              cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> sinfo_select_table_rows(cpl_table *t,  <span class="keyword">const</span> <span class="keywordtype">char</span> *column, </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>             cpl_table_select_operator <span class="keyword">operator</span>, <span class="keywordtype">double</span> value);</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> cpl_error_code sinfo_sort_table_1(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                  cpl_boolean reverse1);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> cpl_error_code sinfo_sort_table_2(cpl_table *t, <span class="keyword">const</span> <span class="keywordtype">char</span> *column1, </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span> *column2, cpl_boolean reverse1, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                  cpl_boolean reverse2);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keywordtype">void</span> sinfoni_free_vector(cpl_vector **v);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keywordtype">void</span> sinfo_free_array(cpl_array **i);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keywordtype">void</span> sinfo_free_apertures(cpl_apertures **a);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keywordtype">void</span> sinfo_free_parameter(cpl_parameter **p);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keywordtype">void</span> sinfo_free_image(cpl_image **i);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keywordtype">void</span> sinfo_free_mask(cpl_mask **m);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keywordtype">void</span> sinfo_free_imagelist(cpl_imagelist **i);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">void</span> sinfo_free_table(cpl_table **t);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">void</span> sinfo_free_propertylist(cpl_propertylist **p);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> sinfo_free_polynomial(cpl_polynomial **p);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span> sinfo_free_stats(cpl_stats **s);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keywordtype">void</span> sinfo_unwrap_matrix(cpl_matrix **m);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keywordtype">void</span> sinfo_unwrap_vector(cpl_vector **v);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keywordtype">void</span> sinfo_unwrap_bivector_vectors(cpl_bivector **b);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keywordtype">void</span> sinfo_free_parameterlist(cpl_parameterlist **p);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">void</span> sinfo_free_frameset(cpl_frameset **f);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keywordtype">void</span> sinfo_free_frame(cpl_frame **f);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">void</span> sinfo_free_int(<span class="keywordtype">int</span> **i);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">void</span> sinfo_free_float(<span class="keywordtype">float</span> **i);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">void</span> sinfo_free_double(<span class="keywordtype">double</span> **i);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> sinfo_free_array_imagelist(cpl_imagelist ***a);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keywordtype">void</span> sinfo_free_array_image(cpl_image ***a);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keywordtype">void</span> sinfo_free_image_array(cpl_image ***a,<span class="keyword">const</span> <span class="keywordtype">int</span> n);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/* similar are also defined with same name in svd.h */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keywordtype">void</span> sinfoni_free_matrix(cpl_matrix **m);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keywordtype">void</span> sinfo_free_my_vector(cpl_vector **v);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keywordtype">void</span> sinfo_free_bivector(cpl_bivector **bv);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__bp__mask__add_8c_source.html b/html/sinfo__utl__bp__mask__add_8c_source.html
index 7ec6729..025a730 100644
--- a/html/sinfo__utl__bp__mask__add_8c_source.html
+++ b/html/sinfo__utl__bp__mask__add_8c_source.html
@@ -2,251 +2,282 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_bp_mask_add.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_bp_mask_add.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_bp_mask_add.c,v 1.18 2008/08/21 09:46:47 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2008/08/21 09:46:47 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.18 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Bad pixel search  (normal method)                  *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00032"></a>00032 <span class="comment">                         INCLUDES</span>
-<a name="l00033"></a>00033 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
-<a name="l00037"></a>00037 <span class="preprocessor"></span>
-<a name="l00038"></a>00038 <span class="comment">/* std libraries */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <strings.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <string.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/* cpl */</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <cpl.h></span>     
-<a name="l00045"></a>00045 <span class="comment">/* irplib */</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 <span class="comment">/* sinfoni */</span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_general_config.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_bp_norm_config.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_bp_lin_config.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_bp_noise_config.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_new_add_bp_map.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00061"></a>00061 <span class="comment">                         DEFINES</span>
-<a name="l00062"></a>00062 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00063"></a>00063 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00064"></a>00064 <span class="comment">                         FUNCTIONS PROTOTYPES</span>
-<a name="l00065"></a>00065 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfoni_get_licence(<span class="keywordtype">void</span>);
-<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_create(cpl_plugin *plugin);
-<a name="l00069"></a>00069 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_exec(cpl_plugin *plugin);
-<a name="l00070"></a>00070 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_destroy(cpl_plugin *plugin);
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add(cpl_parameterlist *, cpl_frameset *);
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00074"></a>00074 <span class="comment">                         STATIC VARIABLES</span>
-<a name="l00075"></a>00075 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_bp_mask_add_description[] =
-<a name="l00078"></a>00078 <span class="stringliteral">"This recipe performs bad pixel map coaddition.\n"</span>
-<a name="l00079"></a>00079 <span class="stringliteral">"The input files are several (at least 2)  bad pixel masks in the sof file\n"</span>
-<a name="l00080"></a>00080 <span class="stringliteral">"Their tab should contain the string BP_MAP.\n"</span>
-<a name="l00081"></a>00081 <span class="stringliteral">"The output is an image resulting from the logical operator OR \n"</span>
-<a name="l00082"></a>00082 <span class="stringliteral">"applied to all the masks.\n"</span>
-<a name="l00083"></a>00083 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00084"></a>00084 <span class="stringliteral">"esorex --params sinfo_utl_bp_mask_add\n"</span>
-<a name="l00085"></a>00085 <span class="stringliteral">"esorex --help sinfo_utl_bp_mask_add\n"</span>
-<a name="l00086"></a>00086 <span class="stringliteral">"\n"</span>;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="comment">/* --------------------------------------------------------------- </span>
-<a name="l00090"></a>00090 <span class="comment">                         FUNCTIONS CODE</span>
-<a name="l00091"></a>00091 <span class="comment">   --------------------------------------------------------------- */</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a>00097 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00099"></a>00099 <span class="comment">/* --------------------------------------------------------------- */</span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="keywordtype">int</span>
-<a name="l00102"></a>00102 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00103"></a>00103 {
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00106"></a>00106   cpl_plugin *plugin = &recipe->interface;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109   cpl_plugin_init(plugin,
-<a name="l00110"></a>00110           CPL_PLUGIN_API,
-<a name="l00111"></a>00111           SINFONI_BINARY_VERSION,
-<a name="l00112"></a>00112           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00113"></a>00113           <span class="stringliteral">"sinfo_utl_bp_mask_add"</span>,
-<a name="l00114"></a>00114           <span class="stringliteral">"Add bad pixels masks"</span>,
-<a name="l00115"></a>00115           sinfo_utl_bp_mask_add_description,
-<a name="l00116"></a>00116           <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00117"></a>00117           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00118"></a>00118           sinfo_get_license(),
-<a name="l00119"></a>00119           sinfo_utl_bp_mask_add_create,
-<a name="l00120"></a>00120           sinfo_utl_bp_mask_add_exec,
-<a name="l00121"></a>00121           sinfo_utl_bp_mask_add_destroy);
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123   cpl_pluginlist_append(list, plugin);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125   <span class="keywordflow">return</span> 0;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 }
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129 <span class="comment">/* --------------------------------------------------------------- */</span>
-<a name="l00136"></a>00136 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00137"></a>00137 sinfo_utl_bp_mask_add_create(cpl_plugin *plugin)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140   <span class="comment">/*</span>
-<a name="l00141"></a>00141 <span class="comment">   * We have to provide the option we accept to the application.</span>
-<a name="l00142"></a>00142 <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span>
-<a name="l00143"></a>00143 <span class="comment">   * interface.</span>
-<a name="l00144"></a>00144 <span class="comment">   */</span>
-<a name="l00145"></a>00145   cpl_recipe *recipe = (cpl_recipe *)plugin;
-<a name="l00146"></a>00146   recipe->parameters = cpl_parameterlist_new();
-<a name="l00147"></a>00147   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00148"></a>00148     <span class="keywordflow">return</span> 1;
-<a name="l00149"></a>00149   }
-<a name="l00150"></a>00150   cpl_error_reset();
-<a name="l00151"></a>00151   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153   <span class="comment">/*</span>
-<a name="l00154"></a>00154 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00155"></a>00155 <span class="comment">   */</span>
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158   <span class="keywordflow">return</span> 0;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160 }
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162 <span class="comment">/* --------------------------------------------------------------- */</span>
-<a name="l00168"></a>00168 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00169"></a>00169 sinfo_utl_bp_mask_add_exec(cpl_plugin *plugin)
-<a name="l00170"></a>00170 {
-<a name="l00171"></a>00171  
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00174"></a>00174   cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00175"></a>00175   <span class="keywordtype">int</span> code=0;
-<a name="l00176"></a>00176   
-<a name="l00177"></a>00177   <span class="keywordflow">if</span>(recipe->parameters == NULL ) {
-<a name="l00178"></a>00178     <span class="keywordflow">return</span> 1;
-<a name="l00179"></a>00179   }
-<a name="l00180"></a>00180   <span class="keywordflow">if</span>(recipe->frames == NULL) {
-<a name="l00181"></a>00181     <span class="keywordflow">return</span> 1;
-<a name="l00182"></a>00182   }
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184   check_nomsg(code=sinfo_utl_bp_mask_add(recipe->parameters, recipe->frames));
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186   <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00187"></a>00187     <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00188"></a>00188 <span class="comment">       At this point the recipe cannot recover from the error */</span>           
-<a name="l00189"></a>00189     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00190"></a>00190   } 
-<a name="l00191"></a>00191   cleanup:
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193   <span class="keywordflow">return</span> code;
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 <span class="comment">/* --------------------------------------------------------------- */</span>
-<a name="l00204"></a>00204 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00205"></a>00205 sinfo_utl_bp_mask_add_destroy(cpl_plugin *plugin)
-<a name="l00206"></a>00206 {
-<a name="l00207"></a>00207   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00208"></a>00208   <span class="comment">/*</span>
-<a name="l00209"></a>00209 <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span>
-<a name="l00210"></a>00210 <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span>
-<a name="l00211"></a>00211 <span class="comment">   * called us, so that we must not touch it.</span>
-<a name="l00212"></a>00212 <span class="comment">   */</span>
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00215"></a>00215   <span class="keywordflow">return</span> 0;
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 }
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 <span class="comment">/*</span>
-<a name="l00220"></a>00220 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00221"></a>00221 <span class="comment"> */</span>
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="comment">/* --------------------------------------------------------------- */</span>
-<a name="l00238"></a>00238 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00239"></a>00239 sinfo_utl_bp_mask_add(cpl_parameterlist *config, cpl_frameset *sof)
-<a name="l00240"></a>00240 {
-<a name="l00241"></a>00241   cpl_frameset* ref_set=NULL;
-<a name="l00242"></a>00242   <span class="keywordtype">int</span> n=0;
-<a name="l00243"></a>00243   
-<a name="l00244"></a>00244   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00245"></a>00245         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247    <span class="keywordflow">if</span>(sinfo_dfs_set_groups(sof)) {
-<a name="l00248"></a>00248        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00249"></a>00249    }
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     n=cpl_frameset_get_size(sof);
-<a name="l00252"></a>00252     <span class="keywordflow">if</span>(n<1) {
-<a name="l00253"></a>00253       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00254"></a>00254       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00255"></a>00255     }
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257    check_nomsg(ref_set=cpl_frameset_duplicate(sof));
-<a name="l00258"></a>00258    ck0_nomsg(sinfo_new_add_bp_map(cpl_func,config,sof,ref_set));
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260  cleanup:
-<a name="l00261"></a>00261    sinfo_free_frameset(&ref_set);
-<a name="l00262"></a>00262   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00263"></a>00263     <span class="keywordflow">return</span> -1;
-<a name="l00264"></a>00264   } <span class="keywordflow">else</span> {
-<a name="l00265"></a>00265     <span class="keywordflow">return</span> 0;
-<a name="l00266"></a>00266   }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_bp_mask_add.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_bp_mask_add.c,v 1.18 2008/08/21 09:46:47 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2008/08/21 09:46:47 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.18 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Bad pixel search  (normal method)                  *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">                         INCLUDES</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* std libraries */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <cpl.h></span>     </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_general_config.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_bp_norm_config.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_bp_lin_config.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_bp_noise_config.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_new_add_bp_map.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                         DEFINES</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                         FUNCTIONS PROTOTYPES</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">const</span> <span class="keywordtype">char</span> * sinfoni_get_licence(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_bp_mask_add(cpl_parameterlist *, cpl_frameset *);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                         STATIC VARIABLES</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_bp_mask_add_description[] =</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="stringliteral">"This recipe performs bad pixel map coaddition.\n"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="stringliteral">"The input files are several (at least 2)  bad pixel masks in the sof file\n"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="stringliteral">"Their tab should contain the string BP_MAP.\n"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="stringliteral">"The output is an image resulting from the logical operator OR \n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="stringliteral">"applied to all the masks.\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="stringliteral">"esorex --params sinfo_utl_bp_mask_add\n"</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="stringliteral">"esorex --help sinfo_utl_bp_mask_add\n"</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/* --------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">                         FUNCTIONS CODE</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">   --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">/* --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> {</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>           <span class="stringliteral">"sinfo_utl_bp_mask_add"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>           <span class="stringliteral">"Add bad pixels masks"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>           sinfo_utl_bp_mask_add_description,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>           <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>           <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>           sinfo_utl_bp_mask_add_create,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>           sinfo_utl_bp_mask_add_exec,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>           sinfo_utl_bp_mask_add_destroy);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> }</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/* --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> sinfo_utl_bp_mask_add_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">   * We have to provide the option we accept to the application.</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">   * interface.</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   cpl_recipe *recipe = (cpl_recipe *)plugin;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   recipe->parameters = cpl_parameterlist_new();</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>   }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> }</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">/* --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> sinfo_utl_bp_mask_add_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>  </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>   </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL ) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">if</span>(recipe->frames == NULL) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>   }</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   check_nomsg(code=sinfo_utl_bp_mask_add(recipe->parameters, recipe->frames));</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">       At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   } </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   cleanup:</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">/* --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> sinfo_utl_bp_mask_add_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">   * called us, so that we must not touch it.</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/* --------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> sinfo_utl_bp_mask_add(cpl_parameterlist *config, cpl_frameset *sof)</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> {</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   cpl_frameset* ref_set=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    <span class="keywordflow">if</span>(sinfo_dfs_set_groups(sof)) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>    }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     n=cpl_frameset_get_size(sof);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    check_nomsg(ref_set=cpl_frameset_duplicate(sof));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>    ck0_nomsg(sinfo_new_add_bp_map(cpl_func,config,sof,ref_set));</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>  cleanup:</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>    sinfo_free_frameset(&ref_set);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>   }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube2ima_8h_source.html b/html/sinfo__utl__cube2ima_8h_source.html
index 314d12c..258e09a 100644
--- a/html/sinfo__utl__cube2ima_8h_source.html
+++ b/html/sinfo__utl__cube2ima_8h_source.html
@@ -2,57 +2,88 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2ima.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2ima.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2ima.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_UTL_CUBE2IMA_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE2IMA_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                            Functions prototypes</span>
-<a name="l00039"></a>00039 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="keywordtype">int</span> sinfo_utl_cube2ima(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube2ima.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2ima.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_UTL_CUBE2IMA_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE2IMA_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube2spectrum_8h_source.html b/html/sinfo__utl__cube2spectrum_8h_source.html
index e998709..f9b771f 100644
--- a/html/sinfo__utl__cube2spectrum_8h_source.html
+++ b/html/sinfo__utl__cube2spectrum_8h_source.html
@@ -2,59 +2,90 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2spectrum.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2spectrum.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2spectrum.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_UTL_CUBE2SPECTRUM_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE2SPECTRUM_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                            Functions prototypes</span>
-<a name="l00039"></a>00039 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keywordtype">int</span> sinfo_utl_cube2spectrum(cpl_parameterlist *, cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span>*) ;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube2spectrum.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2spectrum.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_UTL_CUBE2SPECTRUM_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE2SPECTRUM_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum(cpl_parameterlist *, cpl_frameset *, <span class="keyword">const</span> <span class="keywordtype">char</span>*) ;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube__arith_8h_source.html b/html/sinfo__utl__cube__arith_8h_source.html
index 20ce082..c2fda78 100644
--- a/html/sinfo__utl__cube__arith_8h_source.html
+++ b/html/sinfo__utl__cube__arith_8h_source.html
@@ -2,58 +2,89 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_arith.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_arith.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_arith.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_UTL_CUBE_ARITH_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE_ARITH_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00037"></a>00037 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                            Functions prototypes</span>
-<a name="l00039"></a>00039 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="keywordtype">int</span> sinfo_utl_cube_arith(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube_arith.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_arith.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_UTL_CUBE_ARITH_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE_ARITH_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube__combine_8h_source.html b/html/sinfo__utl__cube__combine_8h_source.html
index d423763..b6a1329 100644
--- a/html/sinfo__utl__cube__combine_8h_source.html
+++ b/html/sinfo__utl__cube__combine_8h_source.html
@@ -2,58 +2,89 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_combine.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_combine.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_combine.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_UTL_CUBE_COMBINE_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE_COMBINE_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00039"></a>00039 <span class="comment">                            Functions prototypes</span>
-<a name="l00040"></a>00040 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00041"></a>00041 <span class="keywordtype">int</span> sinfo_utl_cube_combine(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube_combine.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_combine.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_UTL_CUBE_COMBINE_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_CUBE_COMBINE_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube__create_8c_source.html b/html/sinfo__utl__cube__create_8c_source.html
index 1a769eb..bd8acbc 100644
--- a/html/sinfo__utl__cube__create_8c_source.html
+++ b/html/sinfo__utl__cube__create_8c_source.html
@@ -2,655 +2,681 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_create.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_create.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_create.c,v 1.5 2008/08/29 11:34:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/08/29 11:34:03 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_image_ops.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_wave_calibration.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_pro_save.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_coltilt.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_utilities_scired.h></span>
-<a name="l00056"></a>00056 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00057"></a>00057 <span class="comment">                            Functions prototypes</span>
-<a name="l00058"></a>00058 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00059"></a>00059 
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_create(cpl_plugin *) ;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_exec(cpl_plugin *) ;
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_destroy(cpl_plugin *) ;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00065"></a>00065 sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames);
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00068"></a>00068 <span class="comment">                            Static variables</span>
-<a name="l00069"></a>00069 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_create_description[] =
-<a name="l00072"></a>00072 <span class="stringliteral">"This recipe perform cubes creation.\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"The input files are:\n"</span>
-<a name="l00074"></a>00074 <span class="stringliteral">"A raw frame on tagged as RAW_ON\n"</span>
-<a name="l00075"></a>00075 <span class="stringliteral">"[optional] A raw frame off RAW_OFF\n"</span>
-<a name="l00076"></a>00076 <span class="stringliteral">"A wavelength map, tagged as WAVE_MAP\n"</span>
-<a name="l00077"></a>00077 <span class="stringliteral">"A wavelength map, tagged as WAVE_MAP\n"</span>
-<a name="l00078"></a>00078 <span class="stringliteral">"A distortion table, tagged as DISTORTION\n"</span>
-<a name="l00079"></a>00079 <span class="stringliteral">"A slitlets position table, tagged as SLIT_POS\n"</span>
-<a name="l00080"></a>00080 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00081"></a>00081 <span class="stringliteral">"esorex --params sinfo_utl_cube_create\n"</span>
-<a name="l00082"></a>00082 <span class="stringliteral">"esorex --help sinfo_utl_cube_create\n"</span>
-<a name="l00083"></a>00083 <span class="stringliteral">"\n"</span>;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00086"></a>00086 <span class="comment">                                Functions code</span>
-<a name="l00087"></a>00087 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 
-<a name="l00095"></a>00095 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00103"></a>00103 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00104"></a><a class="code" href="group__sinfo__utl__cube__create.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00104</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00105"></a>00105 {
-<a name="l00106"></a>00106     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00107"></a>00107     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     cpl_plugin_init(plugin,
-<a name="l00110"></a>00110                     CPL_PLUGIN_API,
-<a name="l00111"></a>00111                     SINFONI_BINARY_VERSION,
-<a name="l00112"></a>00112                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00113"></a>00113                     <span class="stringliteral">"sinfo_utl_cube_create"</span>,
-<a name="l00114"></a>00114                     <span class="stringliteral">"Generate a cube"</span>,
-<a name="l00115"></a>00115                     sinfo_utl_cube_create_description,
-<a name="l00116"></a>00116                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00117"></a>00117                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00118"></a>00118                     sinfo_get_license(),
-<a name="l00119"></a>00119                     sinfo_utl_cube_create_create,
-<a name="l00120"></a>00120                     sinfo_utl_cube_create_exec,
-<a name="l00121"></a>00121                     sinfo_utl_cube_create_destroy) ;
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     cpl_pluginlist_append(list, plugin) ;
-<a name="l00124"></a>00124     
-<a name="l00125"></a>00125     <span class="keywordflow">return</span> 0;
-<a name="l00126"></a>00126 }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00137"></a>00137 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00138"></a>00138 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_create(cpl_plugin * plugin)
-<a name="l00139"></a>00139 {
-<a name="l00140"></a>00140     cpl_recipe      * recipe ;
-<a name="l00141"></a>00141     cpl_parameter   * p ;
-<a name="l00142"></a>00142     cpl_parameterlist   * list ;
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00145"></a>00145     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00146"></a>00146         recipe = (cpl_recipe *)plugin ;
-<a name="l00147"></a>00147     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00148"></a>00148     cpl_error_reset();
-<a name="l00149"></a>00149     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00152"></a>00152     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     list=recipe->parameters;
-<a name="l00155"></a>00155   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span>
-<a name="l00156"></a>00156 <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span>
-<a name="l00157"></a>00157 <span class="comment">     that means in auto-jittering mode!</span>
-<a name="l00158"></a>00158 <span class="comment">  */</span>
-<a name="l00159"></a>00159   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.jitter_index"</span>,
-<a name="l00160"></a>00160                   CPL_TYPE_BOOL,
-<a name="l00161"></a>00161                               <span class="stringliteral">"jitter mode indicator: "</span>
-<a name="l00162"></a>00162                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span>
-<a name="l00163"></a>00163                               <span class="stringliteral">"FALSE: user defined jitter. "</span>
-<a name="l00164"></a>00164                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span>
-<a name="l00165"></a>00165                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span>
-<a name="l00166"></a>00166                               <span class="stringliteral">"that means in auto-jittering mode."</span>,
-<a name="l00167"></a>00167                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00168"></a>00168                               TRUE);
-<a name="l00169"></a>00169 
-<a name="l00170"></a>00170   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-jit_ind"</span>);
-<a name="l00171"></a>00171   cpl_parameterlist_append(list, p);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="comment">/* Kernel Type */</span>
-<a name="l00175"></a>00175   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span>
-<a name="l00176"></a>00176 <span class="comment">     correct places inside the big combined cube. That you want to generate </span>
-<a name="l00177"></a>00177 <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span>
-<a name="l00178"></a>00178 <span class="comment">     Supported kernels are:</span>
-<a name="l00179"></a>00179 <span class="comment"></span>
-<a name="l00180"></a>00180 <span class="comment">                                     NULL:      default kernel, currently tanh</span>
-<a name="l00181"></a>00181 <span class="comment">                                     default: dito</span>
-<a name="l00182"></a>00182 <span class="comment">                                     tanh:    Hyperbolic tangent</span>
-<a name="l00183"></a>00183 <span class="comment">                                     sinc2:   Square sinc</span>
-<a name="l00184"></a>00184 <span class="comment">                                     lanczos: Lanczos2 kernel</span>
-<a name="l00185"></a>00185 <span class="comment">                                     hamming: Hamming kernel</span>
-<a name="l00186"></a>00186 <span class="comment">                                     hann:    Hann kernel</span>
-<a name="l00187"></a>00187 <span class="comment">  */</span>
-<a name="l00188"></a>00188   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.kernel_type"</span>,
-<a name="l00189"></a>00189                   CPL_TYPE_STRING,
-<a name="l00190"></a>00190                               <span class="stringliteral">"Kernel Type:"</span>
-<a name="l00191"></a>00191                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span>
-<a name="l00192"></a>00192                               <span class="stringliteral">"the single cubes  to the correct places inside "</span>
-<a name="l00193"></a>00193                              <span class="stringliteral">"the big combined cube"</span>,
-<a name="l00194"></a>00194                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00195"></a>00195                               <span class="stringliteral">"tanh"</span>,
-<a name="l00196"></a>00196                                7,
-<a name="l00197"></a>00197                               <span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc2"</span>,
-<a name="l00198"></a>00198                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kernel_typ"</span>);
-<a name="l00201"></a>00201   cpl_parameterlist_append(list, p);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203   <span class="comment">/*Resampling */</span>
-<a name="l00204"></a>00204  <span class="comment">/* number of coefficients for the polynomial interpolation */</span>
-<a name="l00205"></a>00205   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>,
-<a name="l00206"></a>00206                   CPL_TYPE_INT,
-<a name="l00207"></a>00207                               <span class="stringliteral">"number of coefficients for the polynomial "</span>
-<a name="l00208"></a>00208                               <span class="stringliteral">"interpolation "</span>,
-<a name="l00209"></a>00209                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00210"></a>00210                                3);
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-no_coeffs"</span>);
-<a name="l00213"></a>00213   cpl_parameterlist_append(list, p);
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215   <span class="comment">/* Cube Creation */</span>
-<a name="l00216"></a>00216   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span>
-<a name="l00217"></a>00217 <span class="comment">     (yes) or slitlet edge fits (no)</span>
-<a name="l00218"></a>00218 <span class="comment">  */</span>
-<a name="l00219"></a>00219   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>,
-<a name="l00220"></a>00220                   CPL_TYPE_BOOL,
-<a name="l00221"></a>00221                               <span class="stringliteral">"Nord South Index Switch: "</span>
-<a name="l00222"></a>00222                               <span class="stringliteral">"indicates if the slitlet distances are "</span>
-<a name="l00223"></a>00223                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span>
-<a name="l00224"></a>00224                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,
-<a name="l00225"></a>00225                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00226"></a>00226                               TRUE);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ns_ind"</span>);
-<a name="l00230"></a>00230   cpl_parameterlist_append(list, p);
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233   <span class="comment">/* Cube Creation */</span>
-<a name="l00234"></a>00234   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span>
-<a name="l00235"></a>00235 <span class="comment">     (yes) or slitlet edge fits (no)</span>
-<a name="l00236"></a>00236 <span class="comment">  */</span>
-<a name="l00237"></a>00237   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.flux_cor"</span>,
-<a name="l00238"></a>00238                               CPL_TYPE_BOOL,
-<a name="l00239"></a>00239                               <span class="stringliteral">"Flux correction: "</span>,
-<a name="l00240"></a>00240                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00241"></a>00241                               FALSE);
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243 
-<a name="l00244"></a>00244   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-flux_cor"</span>);
-<a name="l00245"></a>00245   cpl_parameterlist_append(list, p);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250  <span class="comment">/* Fine tuning */</span>
-<a name="l00251"></a>00251   <span class="comment">/* Method */</span>
-<a name="l00252"></a>00252   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>,
-<a name="l00253"></a>00253                   CPL_TYPE_STRING,
-<a name="l00254"></a>00254                               <span class="stringliteral">"Fine Tuning Method: "</span>
-<a name="l00255"></a>00255                               <span class="stringliteral">"indicator for the shifting method to use "</span>
-<a name="l00256"></a>00256                               <span class="stringliteral">"(P: polynomial interpolation, "</span>
-<a name="l00257"></a>00257                  <span class="comment">/* " F: FFT, " */</span>
-<a name="l00258"></a>00258                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,
-<a name="l00259"></a>00259                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00260"></a>00260                               <span class="stringliteral">"P"</span>,
-<a name="l00261"></a>00261                                2,
-<a name="l00262"></a>00262                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"S"</span>);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fine_tune_mtd"</span>);
-<a name="l00265"></a>00265   cpl_parameterlist_append(list, p);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.order"</span>,
-<a name="l00268"></a>00268                   CPL_TYPE_INT,
-<a name="l00269"></a>00269                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> 
-<a name="l00270"></a>00270                               <span class="stringliteral">"order of the polynomial if the polynomial "</span>
-<a name="l00271"></a>00271                               <span class="stringliteral">"interpolation shifting method is used."</span>,
-<a name="l00272"></a>00272                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00273"></a>00273                               2);
-<a name="l00274"></a>00274 
-<a name="l00275"></a>00275   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-order"</span>);
-<a name="l00276"></a>00276   cpl_parameterlist_append(list, p);
-<a name="l00277"></a>00277 
-<a name="l00278"></a>00278     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00279"></a>00279     <span class="comment">/* --stropt */</span>
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   
-<a name="l00282"></a>00282     <span class="comment">/* Return */</span>
-<a name="l00283"></a>00283     <span class="keywordflow">return</span> 0;
-<a name="l00284"></a>00284 }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00292"></a>00292 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00293"></a>00293 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_exec(cpl_plugin * plugin)
-<a name="l00294"></a>00294 {
-<a name="l00295"></a>00295     cpl_recipe  *   recipe ;
-<a name="l00296"></a>00296     <span class="keywordtype">int</span> result=0;    
-<a name="l00297"></a>00297     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00300"></a>00300     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00301"></a>00301         recipe = (cpl_recipe *)plugin ;
-<a name="l00302"></a>00302     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00303"></a>00303        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00304"></a>00304         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     result=sinfo_cube_create(recipe->parameters, recipe->frames) ;
-<a name="l00307"></a>00307     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00308"></a>00308         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00309"></a>00309 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00310"></a>00310         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00311"></a>00311     } 
-<a name="l00312"></a>00312     <span class="keywordflow">return</span> result;
-<a name="l00313"></a>00313 }
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00321"></a>00321 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00322"></a>00322 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_destroy(cpl_plugin * plugin)
-<a name="l00323"></a>00323 {
-<a name="l00324"></a>00324     cpl_recipe  *   recipe ;
-<a name="l00325"></a>00325     
-<a name="l00326"></a>00326     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00327"></a>00327     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00328"></a>00328         recipe = (cpl_recipe *)plugin ;
-<a name="l00329"></a>00329     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00332"></a>00332     <span class="keywordflow">return</span> 0 ;
-<a name="l00333"></a>00333 }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00343"></a>00343 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00344"></a>00344 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00345"></a>00345 sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames)
-<a name="l00346"></a>00346 {
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348    cpl_frame* frm_raw_on=NULL;
-<a name="l00349"></a>00349    cpl_frame* frm_raw_off=NULL;
-<a name="l00350"></a>00350    cpl_frame* frm_wav_map=NULL;
-<a name="l00351"></a>00351    cpl_frame* frm_mflat=NULL;
-<a name="l00352"></a>00352    cpl_frame* frm_distortion=NULL;
-<a name="l00353"></a>00353    cpl_frame* frm_slit_pos=NULL;
-<a name="l00354"></a>00354    cpl_frame* frm_slitlets_distance=NULL;
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356    cpl_image* ima_raw_on=NULL;
-<a name="l00357"></a>00357    cpl_image* ima_raw_off=NULL;
-<a name="l00358"></a>00358    cpl_image* ima_wav_map=NULL;
-<a name="l00359"></a>00359    cpl_image* ima_mflat=NULL;
-<a name="l00360"></a>00360    cpl_image* ima_mflat_dist=NULL;
-<a name="l00361"></a>00361    cpl_image* ima_obj_mflat=NULL;
-<a name="l00362"></a>00362    cpl_image* ima_obj_dist=NULL;
-<a name="l00363"></a>00363    cpl_image* ima_obj_res=NULL;
-<a name="l00364"></a>00364    cpl_image* ima_wav_res=NULL;
-<a name="l00365"></a>00365    cpl_image* ima_wav_dif=NULL;
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367    cpl_imagelist* cube=NULL;
-<a name="l00368"></a>00368    cpl_imagelist* outcube=NULL;
-<a name="l00369"></a>00369    cpl_imagelist* outcube2=NULL;
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371    <span class="comment">//cpl_table* tab_distortion=NULL;</span>
-<a name="l00372"></a>00372    <span class="comment">//cpl_table* tab_slit_pos=NULL;</span>
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374    <span class="keywordtype">float</span> mi=0;
-<a name="l00375"></a>00375    <span class="keywordtype">float</span> ma=0;
-<a name="l00376"></a>00376    <span class="keywordtype">double</span> dis=0 ;
-<a name="l00377"></a>00377    <span class="keywordtype">double</span> cwav=0 ;
-<a name="l00378"></a>00378    <span class="keywordtype">int</span> cpix=0 ;
-<a name="l00379"></a>00379    <span class="keywordtype">int</span> nx=0;
-<a name="l00380"></a>00380    <span class="keywordtype">int</span> ny=0;
-<a name="l00381"></a>00381     <span class="keywordtype">float</span> fcol=0;
-<a name="l00382"></a>00382    <span class="keywordtype">float</span>* pd=NULL;
-<a name="l00383"></a>00383    <span class="keywordtype">float</span>* pw=NULL;
-<a name="l00384"></a>00384    <span class="keywordtype">int</span> i=0;
-<a name="l00385"></a>00385    <span class="keywordtype">int</span> j=0;
-<a name="l00386"></a>00386    <span class="keywordtype">float</span>** slit_edges=NULL;
-<a name="l00387"></a>00387    <span class="keywordtype">float</span>* distances=NULL;
-<a name="l00388"></a>00388    <span class="keywordtype">float</span>* correct_dist=NULL;
-<a name="l00389"></a>00389    <span class="keywordtype">char</span> kernel[80];
-<a name="l00390"></a>00390    <span class="keywordtype">char</span> poly_file[80];
-<a name="l00391"></a>00391    <span class="keywordtype">char</span> pos_list[80];
-<a name="l00392"></a>00392    <span class="keywordtype">char</span> dist_list[80];
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395     <span class="keywordtype">int</span> jit_ind=0;
-<a name="l00396"></a>00396    <span class="keywordtype">int</span> ns_index=0;
-<a name="l00397"></a>00397    <span class="keywordtype">int</span> n_coeffs=0;
-<a name="l00398"></a>00398    <span class="keywordtype">int</span> nrows=0;
-<a name="l00399"></a>00399    cpl_parameter* p=NULL;
-<a name="l00400"></a>00400    <span class="keywordtype">int</span> nslits=32;
-<a name="l00401"></a>00401    <span class="keywordtype">int</span> flux_cor=0;
-<a name="l00402"></a>00402    <span class="keyword">const</span> <span class="keywordtype">char</span>* fine_tuning_method=NULL;
-<a name="l00403"></a>00403    <span class="keywordtype">int</span> fine_tuning_pol_order=0;
-<a name="l00404"></a>00404    <span class="keywordtype">float</span> center_x=0;
-<a name="l00405"></a>00405    <span class="keywordtype">float</span> center_y=0;
-<a name="l00406"></a>00406 
-<a name="l00407"></a>00407    <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00408"></a>00408     check(sinfo_dfs_set_groups(frames),
-<a name="l00409"></a>00409          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00412"></a>00412                                         <span class="stringliteral">"sinfoni.objnod.flux_cor"</span>));
-<a name="l00413"></a>00413    check_nomsg(flux_cor=cpl_parameter_get_bool(p));
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00416"></a>00416                                         <span class="stringliteral">"sinfoni.objnod.jitter_index"</span>));
-<a name="l00417"></a>00417    check_nomsg(jit_ind=cpl_parameter_get_bool(p));
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00420"></a>00420                                         <span class="stringliteral">"sinfoni.objnod.kernel_type"</span>));
-<a name="l00421"></a>00421    check_nomsg(strcpy(kernel,cpl_parameter_get_string(p)));
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423    check_nomsg(p=cpl_parameterlist_find(parameters,<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>));
-<a name="l00424"></a>00424    check_nomsg(n_coeffs=cpl_parameter_get_int(p));
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00428"></a>00428                                         <span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>));
-<a name="l00429"></a>00429    check_nomsg(ns_index=cpl_parameter_get_bool(p));
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00433"></a>00433                                         <span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>));
-<a name="l00434"></a>00434    check_nomsg(fine_tuning_method=cpl_parameter_get_string(p));
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436    check_nomsg(p=cpl_parameterlist_find(parameters,
-<a name="l00437"></a>00437                                         <span class="stringliteral">"sinfoni.objnod.order"</span>));
-<a name="l00438"></a>00438    check_nomsg(fine_tuning_pol_order=cpl_parameter_get_int(p));
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440  
-<a name="l00441"></a>00441    cknull(frm_raw_on=cpl_frameset_find(frames,RAW_ON),
-<a name="l00442"></a>00442           <span class="stringliteral">"Missing required input %s"</span>,RAW_ON);
-<a name="l00443"></a>00443    cknull(frm_raw_off=cpl_frameset_find(frames,RAW_OFF),
-<a name="l00444"></a>00444           <span class="stringliteral">"Missing required input %s"</span>,RAW_OFF);
-<a name="l00445"></a>00445    cknull(frm_wav_map=cpl_frameset_find(frames,PRO_WAVE_MAP),
-<a name="l00446"></a>00446                 <span class="stringliteral">"Missing required input %s"</span>,PRO_WAVE_MAP);
-<a name="l00447"></a>00447    cknull(frm_mflat=cpl_frameset_find(frames,PRO_MASTER_FLAT_LAMP),
-<a name="l00448"></a>00448                 <span class="stringliteral">"Missing required input %s"</span>,PRO_WAVE_MAP);
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450    check_nomsg(frm_distortion=cpl_frameset_find(frames,PRO_DISTORTION));
-<a name="l00451"></a>00451    check_nomsg(frm_slit_pos=cpl_frameset_find(frames,PRO_SLIT_POS));
-<a name="l00452"></a>00452    check_nomsg(frm_slitlets_distance=
-<a name="l00453"></a>00453                cpl_frameset_find(frames,PRO_SLITLETS_DISTANCE));
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455    strcpy(pos_list,cpl_frame_get_filename(frm_slit_pos));
-<a name="l00456"></a>00456    strcpy(dist_list,cpl_frame_get_filename(frm_slitlets_distance));
-<a name="l00457"></a>00457    strcpy(poly_file,cpl_frame_get_filename(frm_distortion));
-<a name="l00458"></a>00458 
-<a name="l00459"></a>00459  
-<a name="l00460"></a>00460    check_nomsg(ima_raw_on=cpl_image_load(cpl_frame_get_filename(frm_raw_on),
-<a name="l00461"></a>00461                                          CPL_TYPE_FLOAT,0,0));
-<a name="l00462"></a>00462  
-<a name="l00463"></a>00463    check_nomsg(ima_raw_off=cpl_image_load(cpl_frame_get_filename(frm_raw_off),
-<a name="l00464"></a>00464                                           CPL_TYPE_FLOAT,0,0));
-<a name="l00465"></a>00465 
-<a name="l00466"></a>00466  
-<a name="l00467"></a>00467    check_nomsg(ima_wav_map=cpl_image_load(cpl_frame_get_filename(frm_wav_map),
-<a name="l00468"></a>00468                                           CPL_TYPE_FLOAT,0,0));
-<a name="l00469"></a>00469  
-<a name="l00470"></a>00470    check_nomsg(ima_mflat=cpl_image_load(cpl_frame_get_filename(frm_mflat),
-<a name="l00471"></a>00471                                           CPL_TYPE_FLOAT,0,0));
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473  
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475    check_nomsg(cpl_image_subtract(ima_raw_on,ima_raw_off));
-<a name="l00476"></a>00476    cpl_image_save(ima_raw_on,<span class="stringliteral">"ima_sub.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00477"></a>00477                   NULL,CPL_IO_DEFAULT);
-<a name="l00478"></a>00478 
-<a name="l00479"></a>00479    cknull_nomsg(ima_obj_mflat=sinfo_new_div_images_robust(ima_raw_on,
-<a name="l00480"></a>00480                                                          ima_mflat));
-<a name="l00481"></a>00481    cpl_image_save(ima_obj_mflat,<span class="stringliteral">"ima_obj_mflat.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00482"></a>00482                   NULL,CPL_IO_DEFAULT);
-<a name="l00483"></a>00483  
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485 <span class="comment">//The following is not needed</span>
-<a name="l00486"></a>00486    cknull_nomsg(ima_mflat_dist=sinfo_new_image_warp_fits(ima_mflat,kernel,
-<a name="l00487"></a>00487                                                          poly_file));
-<a name="l00488"></a>00488 
-<a name="l00489"></a>00489    cpl_image_save(ima_mflat_dist,<span class="stringliteral">"ima_mflat_dist.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00490"></a>00490                   NULL,CPL_IO_DEFAULT);
-<a name="l00491"></a>00491 
-<a name="l00492"></a>00492    cknull_nomsg(ima_obj_dist=sinfo_new_image_warp_fits(ima_obj_mflat, 
-<a name="l00493"></a>00493                                                        kernel, 
-<a name="l00494"></a>00494                                                        poly_file));
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496    cpl_image_save(ima_obj_dist,<span class="stringliteral">"ima_obj_dist.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00497"></a>00497                   NULL,CPL_IO_DEFAULT);
-<a name="l00498"></a>00498  
-<a name="l00499"></a>00499    cknull(ima_obj_res = sinfo_new_defined_resampling(ima_obj_dist, 
-<a name="l00500"></a>00500                             ima_wav_map, 
-<a name="l00501"></a>00501                             n_coeffs,
-<a name="l00502"></a>00502                             &nrows,
-<a name="l00503"></a>00503                             &dis,
-<a name="l00504"></a>00504                             &mi,
-<a name="l00505"></a>00505                             &ma,
-<a name="l00506"></a>00506                             &cwav,
-<a name="l00507"></a>00507                             &cpix),
-<a name="l00508"></a>00508          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00509"></a>00509 
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512   cpl_image_save(ima_obj_res,<span class="stringliteral">"ima_obj_res.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00513"></a>00513                   NULL,CPL_IO_DEFAULT);
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515 
-<a name="l00516"></a>00516     <span class="comment">//We create an image with the derivatives</span>
-<a name="l00517"></a>00517   nx=cpl_image_get_size_x(ima_wav_map);
-<a name="l00518"></a>00518   ny=cpl_image_get_size_y(ima_wav_map);
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520       check_nomsg(ima_wav_dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT));
-<a name="l00521"></a>00521       pw=cpl_image_get_data(ima_wav_map);
-<a name="l00522"></a>00522       pd=cpl_image_get_data(ima_wav_dif);
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524     
-<a name="l00525"></a>00525       <span class="keywordflow">for</span>(i=1;i<nx-1;i++) {
-<a name="l00526"></a>00526     <span class="keywordflow">for</span>(j=1;j<ny-1;j++) {
-<a name="l00527"></a>00527       <span class="keywordflow">if</span>(!isnan(pd[nx*j+i])) {
-<a name="l00528"></a>00528         pd[nx*j+i]=2.0*dis/(pw[nx*(j+1)+i]-pw[nx*(j-1)+i]);
-<a name="l00529"></a>00529       }
-<a name="l00530"></a>00530     }
-<a name="l00531"></a>00531     <span class="keywordflow">if</span>(!isnan(pd[i])) {
-<a name="l00532"></a>00532       pd[i]=dis/(pw[nx+i]-pw[i]);
-<a name="l00533"></a>00533     }
-<a name="l00534"></a>00534     <span class="keywordflow">if</span>(!isnan(pd[nx*(ny-1)+i])) {
-<a name="l00535"></a>00535       pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);
-<a name="l00536"></a>00536     }
-<a name="l00537"></a>00537       }
-<a name="l00538"></a>00538     
-<a name="l00539"></a>00539 
-<a name="l00540"></a>00540       <span class="comment">//cpl_image_save(ima_wav_dif,"diff.fits", </span>
-<a name="l00541"></a>00541       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00542"></a>00542 
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545       cknull(ima_wav_res = sinfo_new_defined_resampling(ima_wav_dif, 
-<a name="l00546"></a>00546                             ima_wav_map, 
-<a name="l00547"></a>00547                             n_coeffs,
-<a name="l00548"></a>00548                             &nrows,
-<a name="l00549"></a>00549                             &dis,
-<a name="l00550"></a>00550                             &mi,
-<a name="l00551"></a>00551                             &ma,
-<a name="l00552"></a>00552                             &cwav,
-<a name="l00553"></a>00553                             &cpix),
-<a name="l00554"></a>00554          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;
-<a name="l00555"></a>00555 
-<a name="l00556"></a>00556       <span class="keywordflow">if</span>(flux_cor) {
-<a name="l00557"></a>00557     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);
-<a name="l00558"></a>00558     cpl_image_divide(ima_obj_res,ima_wav_res);
-<a name="l00559"></a>00559       }
-<a name="l00560"></a>00560 
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562       <span class="comment">//cpl_image_save(ima_wav_res,"res_diff.fits", </span>
-<a name="l00563"></a>00563       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span>
-<a name="l00564"></a>00564 
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567   cpl_image_save(ima_wav_res,<span class="stringliteral">"ima_wav_res.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00568"></a>00568                   NULL,CPL_IO_DEFAULT);
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570 
-<a name="l00571"></a>00571       <span class="comment">//To rescale in flux we divide the resampled image and </span>
-<a name="l00572"></a>00572       <span class="comment">//the resampled derivatives. At this point ima_obj_res should have same </span>
-<a name="l00573"></a>00573       <span class="comment">//flux as input image (im.diff)</span>
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575       <span class="comment">//ima_obj_res=cpl_image_duplicate(ima_wav_res);</span>
-<a name="l00576"></a>00576       <span class="comment">//sinfo_free_image(&ima_wav_res);</span>
-<a name="l00577"></a>00577       <span class="keywordflow">if</span>(flux_cor) {
-<a name="l00578"></a>00578     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);
-<a name="l00579"></a>00579     cpl_image_divide(ima_obj_res,ima_wav_res);
-<a name="l00580"></a>00580       }
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583 
-<a name="l00584"></a>00584 
-<a name="l00585"></a>00585       <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span>
-<a name="l00586"></a>00586       <span class="keywordflow">if</span> (ns_index == 0) {
-<a name="l00587"></a>00587     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);
-<a name="l00588"></a>00588     cknull(slit_edges=sinfo_read_slitlets_edges(nslits,pos_list),
-<a name="l00589"></a>00589            <span class="stringliteral">"error reading slitlets edges"</span>);
-<a name="l00590"></a>00590       } <span class="keywordflow">else</span> {
-<a name="l00591"></a>00591     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);
-<a name="l00592"></a>00592     cknull(distances = sinfo_read_distances(nslits,dist_list),
-<a name="l00593"></a>00593            <span class="stringliteral">"error reading distances"</span>);
-<a name="l00594"></a>00594       }
-<a name="l00595"></a>00595  
-<a name="l00596"></a>00596       cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(nslits, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)),
-<a name="l00597"></a>00597          <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00598"></a>00598 
-<a name="l00599"></a>00599       sinfo_msg(<span class="stringliteral">"Create cube object"</span>);
-<a name="l00600"></a>00600       <span class="keywordflow">if</span> (ns_index ==0 ) {
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602         cknull(cube = sinfo_new_make_cube_spi(ima_obj_res,slit_edges,
-<a name="l00603"></a>00603                           correct_dist),
-<a name="l00604"></a>00604            <span class="stringliteral">"could not construct data cube!"</span>) ;
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606       }  <span class="keywordflow">else</span> {
-<a name="l00607"></a>00607     cknull(cube = sinfo_new_make_cube_dist(ima_obj_res,fcol,distances,
-<a name="l00608"></a>00608                            correct_dist),
-<a name="l00609"></a>00609            <span class="stringliteral">"could not construct a data cube!"</span>) ;
-<a name="l00610"></a>00610       }
-<a name="l00611"></a>00611       sinfo_free_image(&ima_obj_res);
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613 
-<a name="l00614"></a>00614      cknull(outcube2=sinfo_new_fine_tune(cube,
-<a name="l00615"></a>00615                       correct_dist,
-<a name="l00616"></a>00616                       fine_tuning_method,
-<a name="l00617"></a>00617                       fine_tuning_pol_order,
-<a name="l00618"></a>00618                       nslits),
-<a name="l00619"></a>00619          <span class="stringliteral">" could not fine tune the data cube"</span>) ;
-<a name="l00620"></a>00620 
-<a name="l00621"></a>00621       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);
-<a name="l00622"></a>00622       cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),
-<a name="l00623"></a>00623          <span class="stringliteral">"Error binning cube"</span>);
-<a name="l00624"></a>00624       sinfo_free_imagelist(&cube);
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626       ck0(sinfo_pro_save_ims(outcube,frames,frames,<span class="stringliteral">"out_cube.fits"</span>,<span class="stringliteral">"CUBE"</span>,NULL,
-<a name="l00627"></a>00627                              <span class="stringliteral">"sinfo_utl_cube_create"</span>,parameters),
-<a name="l00628"></a>00628           <span class="stringliteral">"cannot save cube %s"</span>, <span class="stringliteral">"out_cube.fits"</span>);
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630 
-<a name="l00631"></a>00631       check_nomsg(center_x = cpl_image_get_size_x(
-<a name="l00632"></a>00632                           cpl_imagelist_get(outcube,0))/2.+0.5) ;
-<a name="l00633"></a>00633       check_nomsg(center_y = cpl_image_get_size_y(
-<a name="l00634"></a>00634                           cpl_imagelist_get(outcube,0))/2.+0.5 );
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636      sinfo_new_set_wcs_cube(outcube,<span class="stringliteral">"out_cube.fits"</span>, cwav, dis, 
-<a name="l00637"></a>00637                  cpix, center_x, center_y);
-<a name="l00638"></a>00638 
-<a name="l00639"></a>00639 
-<a name="l00640"></a>00640   cleanup:      
-<a name="l00641"></a>00641 
-<a name="l00642"></a>00642     <span class="keywordflow">if</span> (ns_index ==0 ) {
-<a name="l00643"></a>00643       <span class="keywordflow">if</span>(slit_edges != NULL) {
-<a name="l00644"></a>00644     sinfo_new_destroy_2Dfloatarray(&slit_edges,nslits);
-<a name="l00645"></a>00645       }
-<a name="l00646"></a>00646     } <span class="keywordflow">else</span> {
-<a name="l00647"></a>00647       <span class="keywordflow">if</span> (distances != NULL ) {
-<a name="l00648"></a>00648     sinfo_new_destroy_array(&distances);
-<a name="l00649"></a>00649       }
-<a name="l00650"></a>00650     }
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654    
-<a name="l00655"></a>00655       sinfo_free_float(&correct_dist) ;
-<a name="l00656"></a>00656       sinfo_free_imagelist(&cube);
-<a name="l00657"></a>00657       sinfo_free_imagelist(&outcube);
-<a name="l00658"></a>00658       sinfo_free_imagelist(&outcube2);
-<a name="l00659"></a>00659       sinfo_free_image(&ima_raw_on);
-<a name="l00660"></a>00660       sinfo_free_image(&ima_raw_off);
-<a name="l00661"></a>00661       sinfo_free_image(&ima_wav_map);
-<a name="l00662"></a>00662       sinfo_free_image(&ima_mflat);
-<a name="l00663"></a>00663       sinfo_free_image(&ima_mflat_dist);
-<a name="l00664"></a>00664       sinfo_free_image(&ima_obj_res);
-<a name="l00665"></a>00665       sinfo_free_image(&ima_obj_mflat);
-<a name="l00666"></a>00666       sinfo_free_image(&ima_obj_dist);
-<a name="l00667"></a>00667       sinfo_free_image(&ima_obj_res);
-<a name="l00668"></a>00668       sinfo_free_image(&ima_wav_res);
-<a name="l00669"></a>00669       sinfo_free_image(&ima_wav_dif);
-<a name="l00670"></a>00670     
-<a name="l00671"></a>00671       <span class="keywordflow">return</span> 0 ;
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673 }
-<a name="l00674"></a>00674 
-<a name="l00675"></a>00675 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube_create.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_create.c,v 1.6 2013/08/15 11:40:17 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/08/15 11:40:17 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_image_ops.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_wave_calibration.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_pro_save.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_coltilt.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_utilities_scired.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_create_description[] =</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"This recipe perform cubes creation.\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"The input files are:\n"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="stringliteral">"A raw frame on tagged as RAW_ON\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="stringliteral">"[optional] A raw frame off RAW_OFF\n"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="stringliteral">"A wavelength map, tagged as WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="stringliteral">"A wavelength map, tagged as WAVE_MAP\n"</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="stringliteral">"A distortion table, tagged as DISTORTION\n"</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="stringliteral">"A slitlets position table, tagged as SLIT_POS\n"</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="stringliteral">"esorex --params sinfo_utl_cube_create\n"</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="stringliteral">"esorex --help sinfo_utl_cube_create\n"</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube__create.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  104</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     <span class="stringliteral">"sinfo_utl_cube_create"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="stringliteral">"Generate a cube"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     sinfo_utl_cube_create_description,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     sinfo_utl_cube_create_create,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                     sinfo_utl_cube_create_exec,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                     sinfo_utl_cube_create_destroy) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     cpl_parameterlist   * list ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     list=recipe->parameters;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="comment">/* jitter mode indicator: yes: Auto-Jitter, no: user defined jitter</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">     The next three parameters are only used if jitterInd is set to yes, </span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">     that means in auto-jittering mode!</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.jitter_index"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                               <span class="stringliteral">"jitter mode indicator: "</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                               <span class="stringliteral">"TRUE: Auto-Jitter, "</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                               <span class="stringliteral">"FALSE: user defined jitter. "</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                               <span class="stringliteral">"The size_x size_y kernel_type parameters "</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                               <span class="stringliteral">"are only used if jitterInd is set to yes, "</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                               <span class="stringliteral">"that means in auto-jittering mode."</span>,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                               TRUE);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-jit_ind"</span>);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="comment">/* Kernel Type */</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>   <span class="comment">/* the name of the interpolation kernel to shift the single cubes  to the </span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">     correct places inside the big combined cube. That you want to generate </span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">     using the eclipse routine sinfo_generate_interpolation_kernel()</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">     Supported kernels are:</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment"></span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">                                     NULL:      default kernel, currently tanh</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">                                     default: dito</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">                                     tanh:    Hyperbolic tangent</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">                                     sinc2:   Square sinc</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">                                     lanczos: Lanczos2 kernel</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">                                     hamming: Hamming kernel</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">                                     hann:    Hann kernel</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.kernel_type"</span>,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                               <span class="stringliteral">"Kernel Type:"</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                               <span class="stringliteral">"the name of the interpolation kernel to shift "</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               <span class="stringliteral">"the single cubes  to the correct places inside "</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                              <span class="stringliteral">"the big combined cube"</span>,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                7,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               <span class="stringliteral">"NULL"</span>,<span class="stringliteral">"default"</span>,<span class="stringliteral">"tanh"</span>,<span class="stringliteral">"sinc2"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                               <span class="stringliteral">"lanczos"</span>,<span class="stringliteral">"hamming"</span>,<span class="stringliteral">"hann"</span>);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-kernel_typ"</span>);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="comment">/*Resampling */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>  <span class="comment">/* number of coefficients for the polynomial interpolation */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                               <span class="stringliteral">"number of coefficients for the polynomial "</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"interpolation "</span>,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                                3);</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-no_coeffs"</span>);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>   <span class="comment">/* Cube Creation */</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> <span class="comment">     (yes) or slitlet edge fits (no)</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                               <span class="stringliteral">"Nord South Index Switch: "</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                               <span class="stringliteral">"indicates if the slitlet distances are "</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                               <span class="stringliteral">"determined by a north-south-test (TRUE) "</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>                               <span class="stringliteral">"or slitlet edge fits (FALSE)"</span>,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>                               TRUE);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-ns_ind"</span>);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="comment">/* Cube Creation */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="comment">/*indicates if the slitlet distances are determined by a north-south-test </span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">     (yes) or slitlet edge fits (no)</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.flux_cor"</span>,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                               CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               <span class="stringliteral">"Flux correction: "</span>,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                               FALSE);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-flux_cor"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>  <span class="comment">/* Fine tuning */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="comment">/* Method */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                   CPL_TYPE_STRING,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                               <span class="stringliteral">"Fine Tuning Method: "</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                               <span class="stringliteral">"indicator for the shifting method to use "</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>                               <span class="stringliteral">"(P: polynomial interpolation, "</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                  <span class="comment">/* " F: FFT, " */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                               <span class="stringliteral">" S: cubic spline interpolation)"</span>,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                               <span class="stringliteral">"P"</span>,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                                2,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                               <span class="stringliteral">"P"</span>,<span class="stringliteral">"S"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-fine_tune_mtd"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.order"</span>,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                               <span class="stringliteral">"Fine Tuning polynomial order: "</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                               <span class="stringliteral">"order of the polynomial if the polynomial "</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                               <span class="stringliteral">"interpolation shifting method is used."</span>,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                               2);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"objnod-order"</span>);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> {</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordtype">int</span> result=0;    </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>        sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     result=sinfo_cube_create(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     } </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordflow">return</span> result;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> }</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_create_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames)</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>    cpl_frame* frm_raw_on=NULL;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>    cpl_frame* frm_raw_off=NULL;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>    cpl_frame* frm_wav_map=NULL;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>    cpl_frame* frm_mflat=NULL;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>    cpl_frame* frm_distortion=NULL;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>    cpl_frame* frm_slit_pos=NULL;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>    cpl_frame* frm_slitlets_distance=NULL;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>    cpl_image* ima_raw_on=NULL;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>    cpl_image* ima_raw_off=NULL;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>    cpl_image* ima_wav_map=NULL;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>    cpl_image* ima_mflat=NULL;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>    cpl_image* ima_mflat_dist=NULL;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>    cpl_image* ima_obj_mflat=NULL;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>    cpl_image* ima_obj_dist=NULL;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>    cpl_image* ima_obj_res=NULL;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>    cpl_image* ima_wav_res=NULL;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>    cpl_image* ima_wav_dif=NULL;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>    cpl_imagelist* cube=NULL;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>    cpl_imagelist* outcube=NULL;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>    cpl_imagelist* outcube2=NULL;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>    <span class="comment">//cpl_table* tab_distortion=NULL;</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>    <span class="comment">//cpl_table* tab_slit_pos=NULL;</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>    <span class="keywordtype">float</span> mi=0;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>    <span class="keywordtype">float</span> ma=0;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>    <span class="keywordtype">double</span> dis=0 ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>    <span class="keywordtype">double</span> cwav=0 ;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>    <span class="keywordtype">int</span> cpix=0 ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>    <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>    <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     <span class="keywordtype">float</span> fcol=0;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>    <span class="keywordtype">float</span>* pd=NULL;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>    <span class="keywordtype">float</span>* pw=NULL;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>    <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>    <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>    <span class="keywordtype">float</span>** slit_edges=NULL;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>    <span class="keywordtype">float</span>* distances=NULL;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>    <span class="keywordtype">float</span>* correct_dist=NULL;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>    <span class="keywordtype">char</span> kernel[80];</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>    <span class="keywordtype">char</span> poly_file[80];</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>    <span class="keywordtype">char</span> pos_list[80];</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>    <span class="keywordtype">char</span> dist_list[80];</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>    <span class="keywordtype">int</span> ns_index=0;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>    <span class="keywordtype">int</span> n_coeffs=0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>    <span class="keywordtype">int</span> nrows=0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>    cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>    <span class="keywordtype">int</span> nslits=32;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>    <span class="keywordtype">int</span> flux_cor=0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>* fine_tuning_method=NULL;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>    <span class="keywordtype">int</span> fine_tuning_pol_order=0;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>    <span class="keywordtype">float</span> center_x=0;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>    <span class="keywordtype">float</span> center_y=0;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>    <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     check(sinfo_dfs_set_groups(frames),</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>    check_nomsg(p=cpl_parameterlist_find(parameters,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                         <span class="stringliteral">"sinfoni.objnod.flux_cor"</span>));</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>    check_nomsg(flux_cor=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>    check_nomsg(p=cpl_parameterlist_find(parameters,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                         <span class="stringliteral">"sinfoni.objnod.kernel_type"</span>));</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>    check_nomsg(strcpy(kernel,cpl_parameter_get_string(p)));</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>    check_nomsg(p=cpl_parameterlist_find(parameters,<span class="stringliteral">"sinfoni.objnod.n_coeffs"</span>));</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>    check_nomsg(n_coeffs=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>    check_nomsg(p=cpl_parameterlist_find(parameters,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                         <span class="stringliteral">"sinfoni.objnod.nord_south_index"</span>));</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>    check_nomsg(ns_index=cpl_parameter_get_bool(p));</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>    check_nomsg(p=cpl_parameterlist_find(parameters,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                         <span class="stringliteral">"sinfoni.objnod.fine_tuning_method"</span>));</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>    check_nomsg(fine_tuning_method=cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>    check_nomsg(p=cpl_parameterlist_find(parameters,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                         <span class="stringliteral">"sinfoni.objnod.order"</span>));</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>    check_nomsg(fine_tuning_pol_order=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>  </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>    cknull(frm_raw_on=cpl_frameset_find(frames,RAW_ON),</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>           <span class="stringliteral">"Missing required input %s"</span>,RAW_ON);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>    cknull(frm_raw_off=cpl_frameset_find(frames,RAW_OFF),</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>           <span class="stringliteral">"Missing required input %s"</span>,RAW_OFF);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>    cknull(frm_wav_map=cpl_frameset_find(frames,PRO_WAVE_MAP),</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                 <span class="stringliteral">"Missing required input %s"</span>,PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>    cknull(frm_mflat=cpl_frameset_find(frames,PRO_MASTER_FLAT_LAMP),</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                 <span class="stringliteral">"Missing required input %s"</span>,PRO_WAVE_MAP);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>    check_nomsg(frm_distortion=cpl_frameset_find(frames,PRO_DISTORTION));</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>    check_nomsg(frm_slit_pos=cpl_frameset_find(frames,PRO_SLIT_POS));</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>    check_nomsg(frm_slitlets_distance=</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>                cpl_frameset_find(frames,PRO_SLITLETS_DISTANCE));</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>    strcpy(pos_list,cpl_frame_get_filename(frm_slit_pos));</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>    strcpy(dist_list,cpl_frame_get_filename(frm_slitlets_distance));</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>    strcpy(poly_file,cpl_frame_get_filename(frm_distortion));</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span> </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>  </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>    check_nomsg(ima_raw_on=cpl_image_load(cpl_frame_get_filename(frm_raw_on),</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                                          CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>  </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>    check_nomsg(ima_raw_off=cpl_image_load(cpl_frame_get_filename(frm_raw_off),</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>                                           CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>  </div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>    check_nomsg(ima_wav_map=cpl_image_load(cpl_frame_get_filename(frm_wav_map),</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>                                           CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>  </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>    check_nomsg(ima_mflat=cpl_image_load(cpl_frame_get_filename(frm_mflat),</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                                           CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>  </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>    check_nomsg(cpl_image_subtract(ima_raw_on,ima_raw_off));</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>    cpl_image_save(ima_raw_on,<span class="stringliteral">"ima_sub.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>    cknull_nomsg(ima_obj_mflat=sinfo_new_div_images_robust(ima_raw_on,</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                                                          ima_mflat));</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>    cpl_image_save(ima_obj_mflat,<span class="stringliteral">"ima_obj_mflat.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>  </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> <span class="comment">//The following is not needed</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>    cknull_nomsg(ima_mflat_dist=sinfo_new_image_warp_fits(ima_mflat,kernel,</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                                                          poly_file));</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>    cpl_image_save(ima_mflat_dist,<span class="stringliteral">"ima_mflat_dist.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>    cknull_nomsg(ima_obj_dist=sinfo_new_image_warp_fits(ima_obj_mflat, </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                                                        kernel, </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                                                        poly_file));</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>    cpl_image_save(ima_obj_dist,<span class="stringliteral">"ima_obj_dist.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>  </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>    cknull(ima_obj_res = sinfo_new_defined_resampling(ima_obj_dist, </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                             ima_wav_map, </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                             n_coeffs,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                             &nrows,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                             &dis,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>                             &mi,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>                             &ma,</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>                             &cwav,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                             &cpix),</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span> </div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   cpl_image_save(ima_obj_res,<span class="stringliteral">"ima_obj_res.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> </div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>     <span class="comment">//We create an image with the derivatives</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>   nx=cpl_image_get_size_x(ima_wav_map);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   ny=cpl_image_get_size_y(ima_wav_map);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>       check_nomsg(ima_wav_dif=cpl_image_new(nx,ny,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>       pw=cpl_image_get_data(ima_wav_map);</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>       pd=cpl_image_get_data(ima_wav_dif);</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>       <span class="keywordflow">for</span>(i=1;i<nx-1;i++) {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     <span class="keywordflow">for</span>(j=1;j<ny-1;j++) {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>       <span class="keywordflow">if</span>(!isnan(pd[nx*j+i])) {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         pd[nx*j+i]=2.0*dis/(pw[nx*(j+1)+i]-pw[nx*(j-1)+i]);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>       }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     <span class="keywordflow">if</span>(!isnan(pd[i])) {</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>       pd[i]=dis/(pw[nx+i]-pw[i]);</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     }</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>     <span class="keywordflow">if</span>(!isnan(pd[nx*(ny-1)+i])) {</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>       pd[nx*(ny-1)+i]=dis/(pw[nx*(ny-1)+i]-pw[nx*(ny-2)+i]);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     }</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       }</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>       <span class="comment">//cpl_image_save(ima_wav_dif,"diff.fits", </span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> </div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>       cknull(ima_wav_res = sinfo_new_defined_resampling(ima_wav_dif, </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                             ima_wav_map, </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                             n_coeffs,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                             &nrows,</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>                             &dis,</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>                             &mi,</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>                             &ma,</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>                             &cwav,</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>                             &cpix),</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>          <span class="stringliteral">" sinfo_definedResampling() failed"</span> ) ;</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>       <span class="keywordflow">if</span>(flux_cor) {</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>     cpl_image_divide(ima_obj_res,ima_wav_res);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>       }</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> </div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>       <span class="comment">//cpl_image_save(ima_wav_res,"res_diff.fits", </span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>       <span class="comment">//CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> </div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   cpl_image_save(ima_wav_res,<span class="stringliteral">"ima_wav_res.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                   NULL,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>       <span class="comment">//To rescale in flux we divide the resampled image and </span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>       <span class="comment">//the resampled derivatives. At this point ima_obj_res should have same </span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>       <span class="comment">//flux as input image (im.diff)</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>       <span class="comment">//ima_obj_res=cpl_image_duplicate(ima_wav_res);</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>       <span class="comment">//sinfo_free_image(&ima_wav_res);</span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>       <span class="keywordflow">if</span>(flux_cor) {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>     sinfo_msg(<span class="stringliteral">"Apply flux correction"</span>);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     cpl_image_divide(ima_obj_res,ima_wav_res);</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>       }</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> </div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> </div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span> </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>       <span class="comment">/*---select north-south-test or fitting of slitlet edges--*/</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       <span class="keywordflow">if</span> (ns_index == 0) {</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd == 0"</span>);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     cknull(slit_edges=sinfo_read_slitlets_edges(nslits,pos_list),</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>            <span class="stringliteral">"error reading slitlets edges"</span>);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     sinfo_msg(<span class="stringliteral">"cfg->northsouthInd != 0"</span>);</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>     cknull(distances = sinfo_read_distances(nslits,dist_list),</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>            <span class="stringliteral">"error reading distances"</span>);</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>       }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>  </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>       cknull(correct_dist = (<span class="keywordtype">float</span>*) cpl_calloc(nslits, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>          <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>       sinfo_msg(<span class="stringliteral">"Create cube object"</span>);</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>       <span class="keywordflow">if</span> (ns_index ==0 ) {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>         cknull(cube = sinfo_new_make_cube_spi(ima_obj_res,slit_edges,</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                           correct_dist),</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>            <span class="stringliteral">"could not construct data cube!"</span>) ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>       }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     cknull(cube = sinfo_new_make_cube_dist(ima_obj_res,fcol,distances,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                            correct_dist),</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>            <span class="stringliteral">"could not construct a data cube!"</span>) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>       }</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>       sinfo_free_image(&ima_obj_res);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>      cknull(outcube2=sinfo_new_fine_tune(cube,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                       correct_dist,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>                       fine_tuning_method,</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>                       fine_tuning_pol_order,</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>                       nslits),</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>          <span class="stringliteral">" could not fine tune the data cube"</span>) ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>       sinfo_msg(<span class="stringliteral">"Stretch output cube along Y direction"</span>);</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>       cknull(outcube = sinfo_new_bin_cube(outcube2,1,2,0,63,0,63),</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>          <span class="stringliteral">"Error binning cube"</span>);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span> </div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>       ck0(sinfo_pro_save_ims(outcube,frames,frames,<span class="stringliteral">"out_cube.fits"</span>,<span class="stringliteral">"CUBE"</span>,NULL,</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>                              <span class="stringliteral">"sinfo_utl_cube_create"</span>,parameters),</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>           <span class="stringliteral">"cannot save cube %s"</span>, <span class="stringliteral">"out_cube.fits"</span>);</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>       check_nomsg(center_x = cpl_image_get_size_x(</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>                           cpl_imagelist_get(outcube,0))/2.+0.5) ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>       check_nomsg(center_y = cpl_image_get_size_y(</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>                           cpl_imagelist_get(outcube,0))/2.+0.5 );</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span> </div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>      sinfo_new_set_wcs_cube(outcube,<span class="stringliteral">"out_cube.fits"</span>, cwav, dis, </div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                  cpix, center_x, center_y);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   cleanup:      </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span> </div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordflow">if</span> (ns_index ==0 ) {</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>       <span class="keywordflow">if</span>(slit_edges != NULL) {</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     sinfo_new_destroy_2Dfloatarray(&slit_edges,nslits);</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>       }</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>       <span class="keywordflow">if</span> (distances != NULL ) {</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     sinfo_new_destroy_array(&distances);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>       }</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>     }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span> </div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>    </div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>       sinfo_free_float(&correct_dist) ;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>       sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>       sinfo_free_imagelist(&outcube);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>       sinfo_free_imagelist(&outcube2);</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>       sinfo_free_image(&ima_raw_on);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>       sinfo_free_image(&ima_raw_off);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>       sinfo_free_image(&ima_wav_map);</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>       sinfo_free_image(&ima_mflat);</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>       sinfo_free_image(&ima_mflat_dist);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>       sinfo_free_image(&ima_obj_res);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>       sinfo_free_image(&ima_obj_mflat);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>       sinfo_free_image(&ima_obj_dist);</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>       sinfo_free_image(&ima_obj_res);</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>       sinfo_free_image(&ima_wav_res);</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>       sinfo_free_image(&ima_wav_dif);</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>     </div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span> </div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span> }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__cube__test_8c_source.html b/html/sinfo__utl__cube__test_8c_source.html
index ee21f05..8197f96 100644
--- a/html/sinfo__utl__cube__test_8c_source.html
+++ b/html/sinfo__utl__cube__test_8c_source.html
@@ -2,256 +2,287 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_test.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_test.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_test.c,v 1.8 2008/02/12 09:11:10 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/02/12 09:11:10 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="comment">/* irplib */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_utl_cube_test.h></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                            Functions prototypes</span>
-<a name="l00048"></a>00048 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_create(cpl_plugin *) ;
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_exec(cpl_plugin *) ;
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_destroy(cpl_plugin *) ;
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                            Static variables</span>
-<a name="l00056"></a>00056 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_test_description[] =
-<a name="l00059"></a>00059 <span class="stringliteral">"This recipe perform cubes combination.\n"</span>
-<a name="l00060"></a>00060 <span class="stringliteral">"The input files are several cubeses\n"</span>
-<a name="l00061"></a>00061 <span class="stringliteral">"their associated tags should be CUBE.\n"</span>
-<a name="l00062"></a>00062 <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes\n"</span>
-<a name="l00063"></a>00063 <span class="stringliteral">"accurding to the value of op where op indicates the operation to be \n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"performed specified by the parameter sinfoni.sinfo_utl_cube_test.op\n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"esorex --params sinfo_utl_cube_test\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"esorex --help sinfo_utl_cube_test\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"\n"</span>;
-<a name="l00069"></a>00069 
-<a name="l00070"></a>00070 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00071"></a>00071 <span class="comment">                                Functions code</span>
-<a name="l00072"></a>00072 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00077"></a>00077 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00088"></a><a class="code" href="group__sinfo__utl__cube__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00088</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00089"></a>00089 {
-<a name="l00090"></a>00090     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00091"></a>00091     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     cpl_plugin_init(plugin,
-<a name="l00094"></a>00094                     CPL_PLUGIN_API,
-<a name="l00095"></a>00095                     SINFONI_BINARY_VERSION,
-<a name="l00096"></a>00096                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00097"></a>00097                     <span class="stringliteral">"sinfo_utl_cube_test"</span>,
-<a name="l00098"></a>00098                     <span class="stringliteral">"Combines a cube list in an output cube"</span>,
-<a name="l00099"></a>00099                     sinfo_utl_cube_test_description,
-<a name="l00100"></a>00100                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00101"></a>00101                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00102"></a>00102                     sinfo_get_license(),
-<a name="l00103"></a>00103                     sinfo_utl_cube_test_create,
-<a name="l00104"></a>00104                     sinfo_utl_cube_test_exec,
-<a name="l00105"></a>00105                     sinfo_utl_cube_test_destroy) ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     cpl_pluginlist_append(list, plugin) ;
-<a name="l00108"></a>00108     
-<a name="l00109"></a>00109     <span class="keywordflow">return</span> 0;
-<a name="l00110"></a>00110 }
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00121"></a>00121 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00122"></a>00122 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_create(cpl_plugin * plugin)
-<a name="l00123"></a>00123 {
-<a name="l00124"></a>00124     cpl_recipe      * recipe ;
-<a name="l00125"></a>00125     cpl_parameter   * p ;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00129"></a>00129         recipe = (cpl_recipe *)plugin ;
-<a name="l00130"></a>00130     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00131"></a>00131     cpl_error_reset();
-<a name="l00132"></a>00132     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00135"></a>00135     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00138"></a>00138     <span class="comment">/* --stropt */</span>
-<a name="l00139"></a>00139     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_i"</span>, 
-<a name="l00140"></a>00140                                 CPL_TYPE_STRING, 
-<a name="l00141"></a>00141                                 <span class="stringliteral">"Output filename"</span>, 
-<a name="l00142"></a>00142                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,
-<a name="l00143"></a>00143                                 <span class="stringliteral">"input.list"</span>);
-<a name="l00144"></a>00144     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_i"</span>) ;
-<a name="l00145"></a>00145     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.method"</span>, 
-<a name="l00149"></a>00149                                 CPL_TYPE_STRING, 
-<a name="l00150"></a>00150                                 <span class="stringliteral">"Output filename"</span>, 
-<a name="l00151"></a>00151                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,
-<a name="l00152"></a>00152                                 <span class="stringliteral">"sinfo_clean_mean"</span>);
-<a name="l00153"></a>00153     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;
-<a name="l00154"></a>00154     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.op"</span>, 
-<a name="l00157"></a>00157                                 CPL_TYPE_STRING, 
-<a name="l00158"></a>00158                                 <span class="stringliteral">"A possible operation"</span>, 
-<a name="l00159"></a>00159                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,
-<a name="l00160"></a>00160                                 <span class="stringliteral">"+"</span>);
-<a name="l00161"></a>00161     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;
-<a name="l00162"></a>00162     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_o"</span>, 
-<a name="l00166"></a>00166                                 CPL_TYPE_STRING, 
-<a name="l00167"></a>00167                                 <span class="stringliteral">"Output filename"</span>, 
-<a name="l00168"></a>00168                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,
-<a name="l00169"></a>00169                                 <span class="stringliteral">"out_cube.fits"</span>);
-<a name="l00170"></a>00170     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_o"</span>) ;
-<a name="l00171"></a>00171     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_m"</span>, 
-<a name="l00174"></a>00174                                 CPL_TYPE_STRING, 
-<a name="l00175"></a>00175                                 <span class="stringliteral">"Output filename"</span>, 
-<a name="l00176"></a>00176                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,
-<a name="l00177"></a>00177                                 <span class="stringliteral">"out_maskcube.fits"</span>);
-<a name="l00178"></a>00178     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_m"</span>) ;
-<a name="l00179"></a>00179     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     <span class="comment">/* --doubleopt */</span>
-<a name="l00182"></a>00182     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.xsize"</span>, 
-<a name="l00183"></a>00183                                 CPL_TYPE_INT, 
-<a name="l00184"></a>00184                                 <span class="stringliteral">"Output cube X size"</span>, 
-<a name="l00185"></a>00185                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, 
-<a name="l00186"></a>00186                                 80) ;
-<a name="l00187"></a>00187     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;
-<a name="l00188"></a>00188     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.ysize"</span>, 
-<a name="l00192"></a>00192                                 CPL_TYPE_INT, 
-<a name="l00193"></a>00193                                 <span class="stringliteral">"Output cube Y size"</span>, 
-<a name="l00194"></a>00194                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, 
-<a name="l00195"></a>00195                                 80) ;
-<a name="l00196"></a>00196     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;
-<a name="l00197"></a>00197     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.sigma"</span>, 
-<a name="l00201"></a>00201                                 CPL_TYPE_DOUBLE, 
-<a name="l00202"></a>00202                                 <span class="stringliteral">"Output cube Y size"</span>, 
-<a name="l00203"></a>00203                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, 
-<a name="l00204"></a>00204                                 5.) ;
-<a name="l00205"></a>00205     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"sigma"</span>) ;
-<a name="l00206"></a>00206     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00207"></a>00207  
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.kappa"</span>,
-<a name="l00210"></a>00210                   CPL_TYPE_DOUBLE,
-<a name="l00211"></a>00211                               <span class="stringliteral">"kappa value for kappa-sigma clipping "</span>
-<a name="l00212"></a>00212                               <span class="stringliteral">"of coadded cube"</span>,
-<a name="l00213"></a>00213                               <span class="stringliteral">"sinfoni.objnod"</span>,
-<a name="l00214"></a>00214                               2.0);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"sinfo_objnod-kappa"</span>);
-<a name="l00217"></a>00217   cpl_parameterlist_append(recipe->parameters, p);
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220     <span class="comment">/* Return */</span>
-<a name="l00221"></a>00221     <span class="keywordflow">return</span> 0;
-<a name="l00222"></a>00222 }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00231"></a>00231 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_exec(cpl_plugin * plugin)
-<a name="l00232"></a>00232 {
-<a name="l00233"></a>00233     cpl_recipe  *   recipe ;
-<a name="l00234"></a>00234     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00235"></a>00235     <span class="keywordtype">int</span> code=0;
-<a name="l00236"></a>00236     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00237"></a>00237     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00238"></a>00238         recipe = (cpl_recipe *)plugin ;
-<a name="l00239"></a>00239     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     code=sinfo_utl_cube_test(recipe->parameters, recipe->frames) ;
-<a name="l00242"></a>00242     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00243"></a>00243         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00244"></a>00244 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00245"></a>00245         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00246"></a>00246     } 
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     <span class="keywordflow">return</span> code;
-<a name="l00249"></a>00249 }
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00257"></a>00257 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00258"></a>00258 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_destroy(cpl_plugin * plugin)
-<a name="l00259"></a>00259 {
-<a name="l00260"></a>00260     cpl_recipe  *   recipe ;
-<a name="l00261"></a>00261     
-<a name="l00262"></a>00262     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00263"></a>00263     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00264"></a>00264         recipe = (cpl_recipe *)plugin ;
-<a name="l00265"></a>00265     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00268"></a>00268     <span class="keywordflow">return</span> 0 ;
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_cube_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_test.c,v 1.8 2008/02/12 09:11:10 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/02/12 09:11:10 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_utl_cube_test.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_cube_test_description[] =</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="stringliteral">"This recipe perform cubes combination.\n"</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="stringliteral">"The input files are several cubeses\n"</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="stringliteral">"their associated tags should be CUBE.\n"</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes\n"</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"accurding to the value of op where op indicates the operation to be \n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"performed specified by the parameter sinfoni.sinfo_utl_cube_test.op\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"esorex --params sinfo_utl_cube_test\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"esorex --help sinfo_utl_cube_test\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno"><a class="code" href="group__sinfo__utl__cube__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   88</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     <span class="stringliteral">"sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     <span class="stringliteral">"Combines a cube list in an output cube"</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     sinfo_utl_cube_test_description,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     sinfo_utl_cube_test_create,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     sinfo_utl_cube_test_exec,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     sinfo_utl_cube_test_destroy) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> }</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_i"</span>, </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                                 <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                                 <span class="stringliteral">"input.list"</span>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_i"</span>) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.method"</span>, </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                 <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                 <span class="stringliteral">"sinfo_clean_mean"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.op"</span>, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                 <span class="stringliteral">"A possible operation"</span>, </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                                 <span class="stringliteral">"+"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_o"</span>, </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                                 <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                 <span class="stringliteral">"out_cube.fits"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_o"</span>) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.name_m"</span>, </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                                 <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                                 <span class="stringliteral">"out_maskcube.fits"</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"name_m"</span>) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.xsize"</span>, </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                                 <span class="stringliteral">"Output cube X size"</span>, </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                                 80) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.ysize"</span>, </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                                 <span class="stringliteral">"Output cube Y size"</span>, </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                 80) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_cube_test.sigma"</span>, </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                                 <span class="stringliteral">"Output cube Y size"</span>, </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_cube_test"</span>, </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                 5.) ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"sigma"</span>) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>  </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.objnod.kappa"</span>,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               <span class="stringliteral">"kappa value for kappa-sigma clipping "</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                               <span class="stringliteral">"of coadded cube"</span>,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                               <span class="stringliteral">"sinfoni.objnod"</span>,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                               2.0);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"sinfo_objnod-kappa"</span>);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   cpl_parameterlist_append(recipe->parameters, p);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     code=sinfo_utl_cube_test(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     } </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_cube_test_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__eff_8c_source.html b/html/sinfo__utl__eff_8c_source.html
index 1a883a3..d7395b7 100644
--- a/html/sinfo__utl__eff_8c_source.html
+++ b/html/sinfo__utl__eff_8c_source.html
@@ -2,278 +2,309 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_eff.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_eff.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_eff.c,v 1.7 2010/02/18 19:14:41 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2010/02/18 19:14:41 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.7 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Log: sinfo_utl_eff.c,v $</span>
-<a name="l00026"></a>00026 <span class="comment"> * Revision 1.7  2010/02/18 19:14:41  amodigli</span>
-<a name="l00027"></a>00027 <span class="comment"> * some bug fixes</span>
-<a name="l00028"></a>00028 <span class="comment"> *</span>
-<a name="l00029"></a>00029 <span class="comment"> * Revision 1.6  2010/02/08 07:14:34  amodigli</span>
-<a name="l00030"></a>00030 <span class="comment"> * changed sinfo_utl_efficiency API</span>
-<a name="l00031"></a>00031 <span class="comment"> *</span>
-<a name="l00032"></a>00032 <span class="comment"> * Revision 1.5  2009/12/15 15:07:32  kmirny</span>
-<a name="l00033"></a>00033 <span class="comment"> * efficiency update</span>
-<a name="l00034"></a>00034 <span class="comment"> *</span>
-<a name="l00035"></a>00035 <span class="comment"> * Revision 1.4  2009/07/27 12:37:43  amodigli</span>
-<a name="l00036"></a>00036 <span class="comment"> * removed parlist from sinfo_utl_efficiency() API as not used</span>
-<a name="l00037"></a>00037 <span class="comment"> *</span>
-<a name="l00038"></a>00038 <span class="comment"> * Revision 1.3  2009/07/14 14:45:03  kmirny</span>
-<a name="l00039"></a>00039 <span class="comment"> * new recipe parameters</span>
-<a name="l00040"></a>00040 <span class="comment"> *</span>
-<a name="l00041"></a>00041 <span class="comment"> * Revision 1.2  2009/06/12 14:20:20  kmirny</span>
-<a name="l00042"></a>00042 <span class="comment"> * updating SINFONI efficiency calculation</span>
-<a name="l00043"></a>00043 <span class="comment"> *</span>
-<a name="l00044"></a>00044 <span class="comment"> * Revision 1.1  2009/06/10 14:57:14  kmirny</span>
-<a name="l00045"></a>00045 <span class="comment"> * sinfoni efficiency utility recipe</span>
-<a name="l00046"></a>00046 <span class="comment"> *</span>
-<a name="l00047"></a>00047 <span class="comment"> */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
-<a name="l00052"></a>00052 <span class="preprocessor"></span>
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                                Includes</span>
-<a name="l00055"></a>00055 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <string.h></span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/* cpl */</span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="comment">/* irplib */</span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00068"></a>00068 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_ref_types.h></span>
-<a name="l00070"></a>00070 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00071"></a>00071 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00072"></a>00072 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00073"></a>00073 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00074"></a>00074 <span class="preprocessor">#include <sinfo_utl_efficiency.h></span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00077"></a>00077 <span class="comment">                            Functions prototypes</span>
-<a name="l00078"></a>00078 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_create(cpl_plugin *) ;
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_exec(cpl_plugin *) ;
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_destroy(cpl_plugin *) ;
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00086"></a>00086 <span class="comment">                            Static variables</span>
-<a name="l00087"></a>00087 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00088"></a>00088 
-<a name="l00089"></a>00089 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_eff_description[] =
-<a name="l00090"></a>00090 <span class="stringliteral">"This recipe calculate a efficiency\n"</span>
-<a name="l00091"></a>00091 <span class="stringliteral">"esorex --params sinfo_utl_eff\n"</span>
-<a name="l00092"></a>00092 <span class="stringliteral">"esorex --help sinfo_utl_eff\n"</span>
-<a name="l00093"></a>00093 <span class="stringliteral">"\n"</span>;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00098"></a>00098 <span class="comment">                                Functions code</span>
-<a name="l00099"></a>00099 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00104"></a>00104 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00105"></a>00105 
-<a name="l00107"></a>00107 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00115"></a>00115 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00116"></a><a class="code" href="group__sinfo__utl__eff.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00116</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00117"></a>00117 {
-<a name="l00118"></a>00118     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00119"></a>00119     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     cpl_plugin_init(plugin,
-<a name="l00122"></a>00122                     CPL_PLUGIN_API,
-<a name="l00123"></a>00123                     SINFONI_BINARY_VERSION,
-<a name="l00124"></a>00124                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00125"></a>00125                     <span class="stringliteral">"sinfo_utl_eff"</span>,
-<a name="l00126"></a>00126                     <span class="stringliteral">"Produce a table with efficiency"</span>,
-<a name="l00127"></a>00127                     sinfo_utl_eff_description,
-<a name="l00128"></a>00128                     <span class="stringliteral">"Konstantin Mirny"</span>,
-<a name="l00129"></a>00129                     <span class="stringliteral">"kmirny at eso.org"</span>,
-<a name="l00130"></a>00130                     sinfo_get_license(),
-<a name="l00131"></a>00131                     sinfo_utl_eff_create,
-<a name="l00132"></a>00132                     sinfo_utl_eff_exec,
-<a name="l00133"></a>00133                     sinfo_utl_eff_destroy) ;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     cpl_pluginlist_append(list, plugin) ;
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137     <span class="keywordflow">return</span> 0;
-<a name="l00138"></a>00138 }
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00150"></a>00150 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_create(cpl_plugin * plugin)
-<a name="l00151"></a>00151 {
-<a name="l00152"></a>00152     cpl_recipe      * recipe ;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00155"></a>00155     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00156"></a>00156         recipe = (cpl_recipe *)plugin ;
-<a name="l00157"></a>00157     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00158"></a>00158     cpl_error_reset();
-<a name="l00159"></a>00159     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00162"></a>00162     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 
-<a name="l00167"></a>00167         <span class="comment">/* Return */</span>
-<a name="l00168"></a>00168     <span class="keywordflow">return</span> 0;
-<a name="l00169"></a>00169 }
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00177"></a>00177 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_exec(cpl_plugin * plugin)
-<a name="l00179"></a>00179 {
-<a name="l00180"></a>00180     cpl_recipe  *   recipe ;
-<a name="l00181"></a>00181      <span class="keywordtype">int</span> code=0;
-<a name="l00182"></a>00182      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00185"></a>00185     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00186"></a>00186         recipe = (cpl_recipe *)plugin ;
-<a name="l00187"></a>00187     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00188"></a>00188     cpl_error_reset();
-<a name="l00189"></a>00189     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00190"></a>00190     code = sinfo_utl_eff(recipe->parameters, recipe->frames) ;
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l00194"></a>00194         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l00195"></a>00195 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l00196"></a>00196         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <span class="keywordflow">return</span> code ;
-<a name="l00200"></a>00200 }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00208"></a>00208 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00209"></a>00209 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_destroy(cpl_plugin * plugin)
-<a name="l00210"></a>00210 {
-<a name="l00211"></a>00211     cpl_recipe  *   recipe ;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00214"></a>00214     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00215"></a>00215         recipe = (cpl_recipe *)plugin ;
-<a name="l00216"></a>00216     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00219"></a>00219     <span class="keywordflow">return</span> 0 ;
-<a name="l00220"></a>00220 }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00229"></a>00229 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00230"></a>00230 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00231"></a>00231 sinfo_utl_eff( cpl_parameterlist   *   parlist,
-<a name="l00232"></a>00232                cpl_frameset        *   framelist)
-<a name="l00233"></a>00233 {
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237    cpl_frame*               product_frame = 0;
-<a name="l00238"></a>00238    cpl_propertylist    *   plist = NULL ;
-<a name="l00239"></a>00239    <span class="keywordtype">int</span> pos = 0;
-<a name="l00240"></a>00240    <span class="keywordtype">int</span> npos = 0;
-<a name="l00241"></a>00241    cpl_frame* frm_sci=NULL;
-<a name="l00242"></a>00242    cpl_frame* frm_atm_ext=NULL;
-<a name="l00243"></a>00243    cpl_frame* frm_std_cat=NULL;
-<a name="l00244"></a>00244    cpl_table* eff_tbl=NULL;
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00247"></a>00247              SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00248"></a>00248    ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250    <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span>
-<a name="l00251"></a>00251    check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254    <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00255"></a>00255    name_o = <span class="stringliteral">"eff_res.fits"</span> ;
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257    check_nomsg(frm_sci=cpl_frameset_find (framelist, PRO_STD_STAR_SPECTRA));
-<a name="l00258"></a>00258    check_nomsg(frm_std_cat=cpl_frameset_find (framelist, FLUX_STD_CATALOG));
-<a name="l00259"></a>00259    check_nomsg(frm_atm_ext=cpl_frameset_find (framelist, EXTCOEFF_TABLE));
-<a name="l00260"></a>00260    sinfo_msg(<span class="stringliteral">"frm_sci=%p frm_std=%p frm_atm_ext=%p"</span>,frm_sci,frm_std_cat,frm_atm_ext);
-<a name="l00261"></a>00261    check_nomsg(eff_tbl=sinfo_efficiency_compute(frm_sci,frm_std_cat,frm_atm_ext));
-<a name="l00262"></a>00262    npos = cpl_frameset_get_size(framelist);
-<a name="l00263"></a>00263    <span class="keywordflow">for</span> (pos = 0; pos < npos; pos++)
-<a name="l00264"></a>00264    {
-<a name="l00265"></a>00265       cpl_frame* pframe = cpl_frameset_get_frame(framelist, pos);
-<a name="l00266"></a>00266       cpl_frame_group group = cpl_frame_get_group(pframe);
-<a name="l00267"></a>00267       <span class="keywordflow">if</span> (CPL_FRAME_GROUP_PRODUCT == group)
-<a name="l00268"></a>00268       {
-<a name="l00269"></a>00269          check_nomsg(cpl_frame_set_group (pframe, CPL_FRAME_GROUP_CALIB));
-<a name="l00270"></a>00270       }
-<a name="l00271"></a>00271    }
-<a name="l00272"></a>00272    <span class="comment">/* Create product frame */</span>
-<a name="l00273"></a>00273    check_nomsg(product_frame = cpl_frame_new());
-<a name="l00274"></a>00274    check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00275"></a>00275    check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"sinfo_efficiency"</span> )) ;
-<a name="l00276"></a>00276    check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;
-<a name="l00277"></a>00277    check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00278"></a>00278    check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00279"></a>00279          <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281    <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00282"></a>00282    check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00283"></a>00283    <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00284"></a>00284    check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00285"></a>00285    check(cpl_dfs_setup_product_header(plist,
-<a name="l00286"></a>00286                                       product_frame,
-<a name="l00287"></a>00287                                       framelist,
-<a name="l00288"></a>00288                                       parlist,
-<a name="l00289"></a>00289                                       <span class="stringliteral">"sinfo_utl_eff"</span>,
-<a name="l00290"></a>00290                                       <span class="stringliteral">"SINFONI"</span>,
-<a name="l00291"></a>00291                                       KEY_VALUE_HPRO_DID,NULL),
-<a name="l00292"></a>00292          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00293"></a>00293    sinfo_free_propertylist(&plist) ;
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295   cleanup:
-<a name="l00296"></a>00296    sinfo_free_propertylist(&plist) ;
-<a name="l00297"></a>00297    <span class="keywordflow">return</span> (cpl_error_get_code()) ? -1 : 0;
-<a name="l00298"></a>00298 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_eff.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_eff.c,v 1.7 2010/02/18 19:14:41 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2010/02/18 19:14:41 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.7 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Log: sinfo_utl_eff.c,v $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * Revision 1.7  2010/02/18 19:14:41  amodigli</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * some bug fixes</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> * Revision 1.6  2010/02/08 07:14:34  amodigli</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * changed sinfo_utl_efficiency API</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * Revision 1.5  2009/12/15 15:07:32  kmirny</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * efficiency update</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> * Revision 1.4  2009/07/27 12:37:43  amodigli</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * removed parlist from sinfo_utl_efficiency() API as not used</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * Revision 1.3  2009/07/14 14:45:03  kmirny</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> * new recipe parameters</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> * Revision 1.2  2009/06/12 14:20:20  kmirny</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"> * updating SINFONI efficiency calculation</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * Revision 1.1  2009/06/10 14:57:14  kmirny</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> * sinfoni efficiency utility recipe</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_ref_types.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="preprocessor">#include <sinfo_utl_efficiency.h></span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_eff_description[] =</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="stringliteral">"This recipe calculate a efficiency\n"</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="stringliteral">"esorex --params sinfo_utl_eff\n"</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="stringliteral">"esorex --help sinfo_utl_eff\n"</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="code" href="group__sinfo__utl__eff.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  116</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                     <span class="stringliteral">"sinfo_utl_eff"</span>,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>                     <span class="stringliteral">"Produce a table with efficiency"</span>,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                     sinfo_utl_eff_description,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>                     <span class="stringliteral">"Konstantin Mirny"</span>,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                     <span class="stringliteral">"kmirny at eso.org"</span>,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                     sinfo_utl_eff_create,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                     sinfo_utl_eff_exec,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                     sinfo_utl_eff_destroy) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     code = sinfo_utl_eff(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_eff_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> {</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> sinfo_utl_eff( cpl_parameterlist   *   parlist,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>    cpl_frame*               product_frame = 0;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>    cpl_propertylist    *   plist = NULL ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>    <span class="keywordtype">int</span> pos = 0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>    <span class="keywordtype">int</span> npos = 0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>    cpl_frame* frm_sci=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>    cpl_frame* frm_atm_ext=NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>    cpl_frame* frm_std_cat=NULL;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>    cpl_table* eff_tbl=NULL;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>    sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>              SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>    ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>    <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>    check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>    <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>    name_o = <span class="stringliteral">"eff_res.fits"</span> ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>    check_nomsg(frm_sci=cpl_frameset_find (framelist, PRO_STD_STAR_SPECTRA));</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>    check_nomsg(frm_std_cat=cpl_frameset_find (framelist, FLUX_STD_CATALOG));</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>    check_nomsg(frm_atm_ext=cpl_frameset_find (framelist, EXTCOEFF_TABLE));</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>    sinfo_msg(<span class="stringliteral">"frm_sci=%p frm_std=%p frm_atm_ext=%p"</span>,frm_sci,frm_std_cat,frm_atm_ext);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>    check_nomsg(eff_tbl=sinfo_efficiency_compute(frm_sci,frm_std_cat,frm_atm_ext));</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    npos = cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    <span class="keywordflow">for</span> (pos = 0; pos < npos; pos++)</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>    {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       cpl_frame* pframe = cpl_frameset_get_frame(framelist, pos);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       cpl_frame_group group = cpl_frame_get_group(pframe);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       <span class="keywordflow">if</span> (CPL_FRAME_GROUP_PRODUCT == group)</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>          check_nomsg(cpl_frame_set_group (pframe, CPL_FRAME_GROUP_CALIB));</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>    check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"sinfo_efficiency"</span> )) ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>    check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>    check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>          <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>    check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>    <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>    check(cpl_dfs_setup_product_header(plist,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                                       product_frame,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                                       framelist,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                                       parlist,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                                       <span class="stringliteral">"sinfo_utl_eff"</span>,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                       <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                                       KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   cleanup:</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>    sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>    <span class="keywordflow">return</span> (cpl_error_get_code()) ? -1 : 0;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__efficiency_8c_source.html b/html/sinfo__utl__efficiency_8c_source.html
index 7efa81b..6a08566 100644
--- a/html/sinfo__utl__efficiency_8c_source.html
+++ b/html/sinfo__utl__efficiency_8c_source.html
@@ -2,674 +2,705 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_efficiency.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_efficiency.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*</span>
-<a name="l00020"></a>00020 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Revision: 1.17 $</span>
-<a name="l00023"></a>00023 <span class="comment"> *</span>
-<a name="l00024"></a>00024 <span class="comment"> */</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <math.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="comment">/* irplib */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00034"></a>00034 
-<a name="l00035"></a>00035 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <sinfo_dfs.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_utl_efficiency.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_star_index.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#define PRO_STD_STAR_SPECTRA "STD_STAR_SPECTRA"</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_WAVELENGTH[] = <span class="stringliteral">"WAVELENGTH"</span>;
-<a name="l00045"></a>00045 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_WAVELENGTH_C[] = <span class="stringliteral">"WAVELENGTH"</span>;
-<a name="l00046"></a>00046 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_LAMBDA[]     = <span class="stringliteral">"LAMBDA"</span>;
-<a name="l00047"></a>00047 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_LA_SILLA[]   = <span class="stringliteral">"LA_SILLA"</span>;
-<a name="l00048"></a>00048 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_REF[]        = <span class="stringliteral">"REF"</span>;
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_COR[]        = <span class="stringliteral">"COR"</span>;
-<a name="l00050"></a>00050 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_SRC_COR[]    = <span class="stringliteral">"SRC_COR"</span>;
-<a name="l00051"></a>00051 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_COUNTS_BKG[] = <span class="stringliteral">"INT_OBJ"</span>;<span class="comment">//"counts_tot";</span>
-<a name="l00052"></a>00052 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_FLUX[]       = <span class="stringliteral">"FLUX"</span>;
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_EPHOT[]      = <span class="stringliteral">"EPHOT"</span>;
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_EXT[]        = <span class="stringliteral">"EXT"</span>;
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_SRC_EFF[]    = <span class="stringliteral">"EFF"</span>;
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> PAR_NAME_DIT[]        = <span class="stringliteral">"ESO DET DIT"</span>;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_RAW_IMA_SLIT[]  = PRO_STD_STAR_SPECTRA;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_FLUX_STD_TAB[]  = FLUX_STD_TABLE;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_FLUX_STD_CAT[]  = FLUX_STD_CATALOG;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_EXTCOEFF_TAB[]  = EXTCOEFF_TABLE;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00064"></a>00064 sinfo_column_to_double(cpl_table* ptable, <span class="keyword">const</span> <span class="keywordtype">char</span>* column);
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00067"></a>00067 sinfo_table_interpolate(cpl_table* tbl,
-<a name="l00068"></a>00068           <span class="keywordtype">double</span> wav,
-<a name="l00069"></a>00069           <span class="keyword">const</span> <span class="keywordtype">char</span>* colx,
-<a name="l00070"></a>00070           <span class="keyword">const</span> <span class="keywordtype">char</span>* coly);
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">double</span>* 
-<a name="l00072"></a>00072 sinfo_create_column_double(cpl_table* tbl, <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name, <span class="keywordtype">int</span> nrow);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 cpl_error_code
-<a name="l00077"></a>00077 sinfo_get_std_obs_values(cpl_propertylist* plist,
-<a name="l00078"></a>00078                        <span class="keywordtype">double</span>* exptime,
-<a name="l00079"></a>00079                        <span class="keywordtype">double</span>* airmass,
-<a name="l00080"></a>00080                        <span class="keywordtype">double</span>* dRA,
-<a name="l00081"></a>00081                        <span class="keywordtype">double</span>* dDEC);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 
-<a name="l00086"></a>00086 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a>00097 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099 <span class="keywordtype">void</span> 
-<a name="l00100"></a>00100 sinfo_load_ref_table(cpl_frameset* frames, 
-<a name="l00101"></a>00101                    <span class="keywordtype">double</span> dRA, 
-<a name="l00102"></a>00102                    <span class="keywordtype">double</span> dDEC, 
-<a name="l00103"></a>00103                    <span class="keywordtype">double</span> EPSILON, 
-<a name="l00104"></a>00104                    cpl_table** pptable)
-<a name="l00105"></a>00105 {
-<a name="l00106"></a>00106   <span class="keyword">const</span> <span class="keywordtype">char</span>* name = NULL;
-<a name="l00107"></a>00107   cpl_frame* frm_ref = NULL;
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109   <span class="comment">/* REF STD frame */</span>
-<a name="l00110"></a>00110   frm_ref=cpl_frameset_find(frames,FRM_FLUX_STD_TAB);
-<a name="l00111"></a>00111   <span class="keywordflow">if</span> (!frm_ref)
-<a name="l00112"></a>00112     {
-<a name="l00113"></a>00113       sinfo_msg(<span class="stringliteral">"REF frame is not found, trying to get REF from the catalog"</span>);
-<a name="l00114"></a>00114      <span class="comment">/* REF STD catalog frame */</span>
-<a name="l00115"></a>00115       <span class="comment">// get from catalog</span>
-<a name="l00116"></a>00116       check_nomsg(frm_ref=cpl_frameset_find(frames,FRM_FLUX_STD_CAT));
-<a name="l00117"></a>00117       <span class="keywordflow">if</span> (frm_ref)
-<a name="l00118"></a>00118     {
-<a name="l00119"></a>00119       check_nomsg(name=cpl_frame_get_filename(frm_ref));
-<a name="l00120"></a>00120       <span class="keywordflow">if</span> (name)
-<a name="l00121"></a>00121         {
-<a name="l00122"></a>00122           star_index* pstarindex = star_index_load(name);
-<a name="l00123"></a>00123           <span class="keywordflow">if</span> (pstarindex)
-<a name="l00124"></a>00124         {
-<a name="l00125"></a>00125           <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name = 0;
-<a name="l00126"></a>00126           sinfo_msg(<span class="stringliteral">"The catalog is loaded, looking for star in RA[%f] DEC[%f] tolerance[%f]"</span>, dRA, dDEC, EPSILON);
-<a name="l00127"></a>00127           *pptable = star_index_get(pstarindex, dRA, dDEC, EPSILON, EPSILON, &star_name);
-<a name="l00128"></a>00128           <span class="keywordflow">if</span> (*pptable && star_name)
-<a name="l00129"></a>00129             {
-<a name="l00130"></a>00130               sinfo_msg(<span class="stringliteral">"REF table is found in the catalog, star name is [%s]"</span>, star_name);
-<a name="l00131"></a>00131             }
-<a name="l00132"></a>00132           <span class="keywordflow">else</span>
-<a name="l00133"></a>00133             {
-<a name="l00134"></a>00134               sinfo_msg(<span class="stringliteral">"ERROR - REF table could not be found in the catalog"</span>);
-<a name="l00135"></a>00135             }
-<a name="l00136"></a>00136         }
-<a name="l00137"></a>00137           <span class="keywordflow">else</span>
-<a name="l00138"></a>00138         {
-<a name="l00139"></a>00139           sinfo_msg(<span class="stringliteral">"ERROR - could not load the catalog"</span>);
-<a name="l00140"></a>00140         }
-<a name="l00141"></a>00141         }
-<a name="l00142"></a>00142     }
-<a name="l00143"></a>00143     }
-<a name="l00144"></a>00144   <span class="keywordflow">else</span>
-<a name="l00145"></a>00145     {
-<a name="l00146"></a>00146       sinfo_msg(<span class="stringliteral">"REF frame is found"</span>);
-<a name="l00147"></a>00147       check_nomsg(name=cpl_frame_get_filename(frm_ref));
-<a name="l00148"></a>00148       check_nomsg(*pptable=cpl_table_load(name,1,0));
-<a name="l00149"></a>00149     }
-<a name="l00150"></a>00150   <span class="keywordflow">return</span>;
-<a name="l00151"></a>00151  cleanup:
-<a name="l00152"></a>00152   <span class="keywordflow">return</span>;
-<a name="l00153"></a>00153 }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00172"></a>00172 sinfo_parse_catalog_std_stars(cpl_frame* cat, 
-<a name="l00173"></a>00173                 <span class="keywordtype">double</span> dRA, 
-<a name="l00174"></a>00174                 <span class="keywordtype">double</span> dDEC, 
-<a name="l00175"></a>00175                 <span class="keywordtype">double</span> EPSILON, 
-<a name="l00176"></a>00176                 cpl_table** pptable)
-<a name="l00177"></a>00177 {
-<a name="l00178"></a>00178   <span class="keyword">const</span> <span class="keywordtype">char</span>* name = NULL;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180   <span class="keywordflow">if</span> (cat) {
-<a name="l00181"></a>00181     check_nomsg(name=cpl_frame_get_filename(cat));
-<a name="l00182"></a>00182     <span class="keywordflow">if</span> (name) {
-<a name="l00183"></a>00183       star_index* pstarindex = star_index_load(name);
-<a name="l00184"></a>00184       <span class="keywordflow">if</span> (pstarindex) {
-<a name="l00185"></a>00185     <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name = 0;
-<a name="l00186"></a>00186     sinfo_msg(<span class="stringliteral">"The catalog is loaded, looking for star in RA[%f] DEC[%f] tolerance[%f]"</span>, dRA, dDEC, EPSILON);
-<a name="l00187"></a>00187     *pptable = star_index_get(pstarindex, dRA, dDEC, EPSILON, EPSILON, &star_name);
-<a name="l00188"></a>00188     <span class="keywordflow">if</span> (*pptable && star_name) {
-<a name="l00189"></a>00189       sinfo_msg(<span class="stringliteral">"REF table is found in the catalog, star name is [%s]"</span>, star_name);
-<a name="l00190"></a>00190     }
-<a name="l00191"></a>00191     <span class="keywordflow">else</span> {
-<a name="l00192"></a>00192       sinfo_msg(<span class="stringliteral">"ERROR - REF table could not be found in the catalog"</span>);
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194       }
-<a name="l00195"></a>00195       <span class="keywordflow">else</span> {
-<a name="l00196"></a>00196     sinfo_msg(<span class="stringliteral">"ERROR - could not load the catalog"</span>);
-<a name="l00197"></a>00197       }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     }
-<a name="l00200"></a>00200   }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202  cleanup:
-<a name="l00203"></a>00203   <span class="keywordflow">return</span>;
-<a name="l00204"></a>00204 }
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208 
-<a name="l00209"></a>00209 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00218"></a>00218 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 <span class="keywordtype">double</span>
-<a name="l00222"></a>00222 sinfo_data_interpolate(
-<a name="l00223"></a>00223              <span class="keywordtype">double</span> wav,
-<a name="l00224"></a>00224              <span class="keywordtype">int</span> nrow,
-<a name="l00225"></a>00225              <span class="keywordtype">double</span>* pw,
-<a name="l00226"></a>00226              <span class="keywordtype">double</span>* pe
-<a name="l00227"></a>00227              )
-<a name="l00228"></a>00228 {
-<a name="l00229"></a>00229   <span class="keywordtype">double</span> y = 0;
-<a name="l00230"></a>00230   <span class="keywordtype">double</span> w1=pw[0];
-<a name="l00231"></a>00231   <span class="keywordtype">double</span> w2=pw[nrow-1];
-<a name="l00232"></a>00232   <span class="keywordtype">double</span> y1_=pe[0]; <span class="comment">/*was changed from y1 to y1_ due a warning from compiler - shadowed variable*/</span>
-<a name="l00233"></a>00233   <span class="keywordtype">double</span> y2=pe[nrow-1];
-<a name="l00234"></a>00234   <span class="keywordflow">if</span>(wav < pw[0])
-<a name="l00235"></a>00235     {
-<a name="l00236"></a>00236       w1=pw[0];
-<a name="l00237"></a>00237       w2=pw[1];
-<a name="l00238"></a>00238       y1_=pe[0];
-<a name="l00239"></a>00239       y2=pe[1];
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wav > pw[nrow - 1])
-<a name="l00242"></a>00242     {
-<a name="l00243"></a>00243       w1=pw[nrow - 2];
-<a name="l00244"></a>00244       w2=pw[nrow - 1];
-<a name="l00245"></a>00245       y1_=pe[nrow - 2];
-<a name="l00246"></a>00246       y2=pe[nrow - 1];
-<a name="l00247"></a>00247     }
-<a name="l00248"></a>00248   <span class="keywordflow">else</span>
-<a name="l00249"></a>00249     {
-<a name="l00250"></a>00250       <span class="keywordtype">int</span> l = 0;
-<a name="l00251"></a>00251       <span class="keywordtype">int</span> h = nrow - 1;
-<a name="l00252"></a>00252       <span class="keywordtype">int</span> curr_row = 0;
-<a name="l00253"></a>00253       curr_row = (h-l) / 2;
-<a name="l00254"></a>00254       <span class="keywordflow">while</span>( h-l >1 )
-<a name="l00255"></a>00255     {
-<a name="l00256"></a>00256       <span class="keywordflow">if</span>(wav < pw[curr_row])
-<a name="l00257"></a>00257         {
-<a name="l00258"></a>00258           h = curr_row;
-<a name="l00259"></a>00259         }
-<a name="l00260"></a>00260       <span class="keywordflow">else</span>
-<a name="l00261"></a>00261         {
-<a name="l00262"></a>00262           l = curr_row;
-<a name="l00263"></a>00263         }
-<a name="l00264"></a>00264       curr_row = (h-l) / 2 + l;
-<a name="l00265"></a>00265     }
-<a name="l00266"></a>00266       w1=pw[curr_row];
-<a name="l00267"></a>00267       w2=pw[curr_row + 1];
-<a name="l00268"></a>00268       y1_=pe[curr_row];
-<a name="l00269"></a>00269       y2=pe[curr_row + 1];
-<a name="l00270"></a>00270     }
-<a name="l00271"></a>00271   y=y1_+(y2-y1_)/(w2-w1)*(wav-w1);
-<a name="l00272"></a>00272   <span class="keywordflow">return</span> y;
-<a name="l00273"></a>00273 }
-<a name="l00274"></a>00274 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00275"></a>00275 sinfo_table_interpolate(cpl_table* tbl,
-<a name="l00276"></a>00276           <span class="keywordtype">double</span> wav,
-<a name="l00277"></a>00277           <span class="keyword">const</span> <span class="keywordtype">char</span>* colx,
-<a name="l00278"></a>00278           <span class="keyword">const</span> <span class="keywordtype">char</span>* coly)
-<a name="l00279"></a>00279 {
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   <span class="keywordtype">double</span> y=0;
-<a name="l00282"></a>00282   <span class="keywordtype">double</span>* pe=NULL;
-<a name="l00283"></a>00283   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l00284"></a>00284   <span class="keywordtype">int</span> nrow=0;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286   check_nomsg(pw=cpl_table_get_data_double(tbl,colx));
-<a name="l00287"></a>00287   check_nomsg(pe=cpl_table_get_data_double(tbl,coly));
-<a name="l00288"></a>00288   check_nomsg(nrow=cpl_table_get_nrow(tbl));
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290   y = sinfo_data_interpolate(wav, nrow, pw, pe);
-<a name="l00291"></a>00291  cleanup:
-<a name="l00292"></a>00292   <span class="keywordflow">return</span> y;
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="keyword">static</span> <span class="keywordtype">double</span>* 
-<a name="l00297"></a>00297 sinfo_create_column_double(cpl_table* tbl, <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name, <span class="keywordtype">int</span> nrow)
-<a name="l00298"></a>00298 {
-<a name="l00299"></a>00299   <span class="keywordtype">double</span>* retval = 0;
-<a name="l00300"></a>00300   check_nomsg(cpl_table_new_column(tbl, col_name, CPL_TYPE_DOUBLE));
-<a name="l00301"></a>00301   check_nomsg(cpl_table_fill_column_window_double(tbl, col_name, 0, nrow, -1));
-<a name="l00302"></a>00302   check_nomsg(retval = cpl_table_get_data_double(tbl,col_name));
-<a name="l00303"></a>00303   <span class="keywordflow">return</span> retval;
-<a name="l00304"></a>00304  cleanup:
-<a name="l00305"></a>00305   <span class="keywordflow">return</span> retval;
-<a name="l00306"></a>00306 }
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00319"></a>00319 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321 cpl_error_code
-<a name="l00322"></a>00322 sinfo_get_std_obs_values(cpl_propertylist* plist,
-<a name="l00323"></a>00323                        <span class="keywordtype">double</span>* exptime,
-<a name="l00324"></a>00324                        <span class="keywordtype">double</span>* airmass,
-<a name="l00325"></a>00325                        <span class="keywordtype">double</span>* dRA,
-<a name="l00326"></a>00326                        <span class="keywordtype">double</span>* dDEC)
-<a name="l00327"></a>00327 {
-<a name="l00328"></a>00328    <span class="keywordtype">double</span> airmass_start=0;
-<a name="l00329"></a>00329    <span class="keywordtype">double</span> airmass_end=0;
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331    check_nomsg(*exptime=sinfo_pfits_get_exp_time(plist));
-<a name="l00332"></a>00332    airmass_start=sinfo_pfits_get_airmass_start(plist);
-<a name="l00333"></a>00333    airmass_end=sinfo_pfits_get_airmass_end(plist);
-<a name="l00334"></a>00334    *dRA=sinfo_pfits_get_ra(plist);
-<a name="l00335"></a>00335    *dDEC=sinfo_pfits_get_dec(plist);
-<a name="l00336"></a>00336    *airmass=0.5*(airmass_start+airmass_end);
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338  cleanup:
-<a name="l00339"></a>00339    <span class="keywordflow">return</span> cpl_error_get_code();
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341 }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00360"></a>00360 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 cpl_table*
-<a name="l00363"></a>00363 sinfo_utl_efficiency(
-<a name="l00364"></a>00364              cpl_frameset * frames,
-<a name="l00365"></a>00365              <span class="keywordtype">double</span> dGain,
-<a name="l00366"></a>00366              <span class="keywordtype">double</span> dEpsilon,
-<a name="l00367"></a>00367              <span class="keywordtype">double</span> aimprim,
-<a name="l00368"></a>00368                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,
-<a name="l00369"></a>00369              <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,
-<a name="l00370"></a>00370                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,
-<a name="l00371"></a>00371                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,
-<a name="l00372"></a>00372                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,
-<a name="l00373"></a>00373                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,
-<a name="l00374"></a>00374                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux
-<a name="l00375"></a>00375              )
-<a name="l00376"></a>00376 {
-<a name="l00377"></a>00377   cpl_frame* frm_sci = NULL;
-<a name="l00378"></a>00378   cpl_frame* frm_atmext = NULL;
-<a name="l00379"></a>00379   cpl_table* tbl_obj_spectrum = NULL; <span class="comment">// input table with spectrum</span>
-<a name="l00380"></a>00380   cpl_table* tbl_atmext = NULL;
-<a name="l00381"></a>00381   <span class="keywordtype">double</span> exptime = 600;
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   cpl_propertylist* plist = NULL;
-<a name="l00384"></a>00384   cpl_table* tbl_ref = NULL;
-<a name="l00385"></a>00385   cpl_table* tbl_result=NULL;
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00388"></a>00388   <span class="keywordtype">double</span> dRA = 0;
-<a name="l00389"></a>00389   <span class="keywordtype">double</span> dDEC = 0;
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391   <span class="keywordtype">double</span> airmass=0;
-<a name="l00392"></a>00392   <span class="keyword">const</span> <span class="keywordtype">double</span> mk2AA=1E4; <span class="comment">/* mkm/AA */</span>
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395   <span class="comment">// read all input data and call the internal function</span>
-<a name="l00396"></a>00396   <span class="comment">// read the input tables</span>
-<a name="l00397"></a>00397   <span class="comment">// 1. observation</span>
-<a name="l00398"></a>00398   check_nomsg(frm_sci=cpl_frameset_find(frames, FRM_RAW_IMA_SLIT));
-<a name="l00399"></a>00399   check_nomsg(name=cpl_frame_get_filename(frm_sci));
-<a name="l00400"></a>00400   sinfo_msg(<span class="stringliteral">"name=%s"</span>,name);
-<a name="l00401"></a>00401   check_nomsg(tbl_obj_spectrum=cpl_table_load(name,1,0));
-<a name="l00402"></a>00402   check_nomsg(plist=cpl_propertylist_load(name,0));
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404   sinfo_get_std_obs_values(plist,&exptime,&airmass,&dRA,&dDEC);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406   <span class="comment">// 2. reference table</span>
-<a name="l00407"></a>00407   sinfo_load_ref_table(frames, dRA, dDEC, dEpsilon, &tbl_ref);
-<a name="l00408"></a>00408   <span class="keywordflow">if</span> (tbl_ref)
-<a name="l00409"></a>00409     {
-<a name="l00410"></a>00410       <span class="comment">// 3. atmext</span>
-<a name="l00411"></a>00411       check_nomsg(frm_atmext=cpl_frameset_find(frames,FRM_EXTCOEFF_TAB));
-<a name="l00412"></a>00412       check_nomsg(name=cpl_frame_get_filename(frm_atmext));
-<a name="l00413"></a>00413       check_nomsg(tbl_atmext=cpl_table_load(name,1,0));
-<a name="l00414"></a>00414 
-<a name="l00415"></a>00415       tbl_result = sinfo_utl_efficiency_internal(
-<a name="l00416"></a>00416                          tbl_obj_spectrum,
-<a name="l00417"></a>00417                          tbl_atmext,
-<a name="l00418"></a>00418                          tbl_ref,
-<a name="l00419"></a>00419                          exptime,
-<a name="l00420"></a>00420                          airmass,
-<a name="l00421"></a>00421                          aimprim,
-<a name="l00422"></a>00422                          dGain,
-<a name="l00423"></a>00423                                                  1,
-<a name="l00424"></a>00424                                                  mk2AA,<span class="comment">//valid only for SINFONI</span>
-<a name="l00425"></a>00425                                                  col_name_atm_wave,
-<a name="l00426"></a>00426                                                  col_name_atm_abs,
-<a name="l00427"></a>00427                                                  col_name_ref_wave,
-<a name="l00428"></a>00428                                                  col_name_ref_flux,
-<a name="l00429"></a>00429                                                  col_name_ref_bin,
-<a name="l00430"></a>00430                                                  col_name_obj_wave,
-<a name="l00431"></a>00431                                                  col_name_obj_flux
-<a name="l00432"></a>00432          );
-<a name="l00433"></a>00433      }
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435  cleanup:
-<a name="l00436"></a>00436   sinfo_free_propertylist(&plist);
-<a name="l00437"></a>00437   sinfo_free_table(&tbl_atmext);
-<a name="l00438"></a>00438   sinfo_free_table(&tbl_obj_spectrum);
-<a name="l00439"></a>00439   sinfo_free_table(&tbl_ref);
-<a name="l00440"></a>00440   <span class="keywordflow">return</span> tbl_result;
-<a name="l00441"></a>00441 }
-<a name="l00442"></a>00442 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00443"></a>00443 sinfo_column_to_double(cpl_table* ptable, <span class="keyword">const</span> <span class="keywordtype">char</span>* column)
-<a name="l00444"></a>00444 {
-<a name="l00445"></a>00445   <span class="keyword">const</span> <span class="keywordtype">char</span>* TEMP = <span class="stringliteral">"_temp_"</span>;
-<a name="l00446"></a>00446   check_nomsg(cpl_table_duplicate_column(ptable, TEMP, ptable, column));
-<a name="l00447"></a>00447   check_nomsg(cpl_table_erase_column(ptable, column));
-<a name="l00448"></a>00448   check_nomsg(cpl_table_cast_column(ptable, TEMP, column, CPL_TYPE_DOUBLE));
-<a name="l00449"></a>00449   check_nomsg(cpl_table_erase_column(ptable, TEMP ));
-<a name="l00450"></a>00450   <span class="keywordflow">return</span> 0;
-<a name="l00451"></a>00451  cleanup:
-<a name="l00452"></a>00452   sinfo_msg(<span class="stringliteral">" error column to double [%s]"</span>, column);
-<a name="l00453"></a>00453   <span class="keywordflow">return</span> -1;
-<a name="l00454"></a>00454 }
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456 
-<a name="l00457"></a>00457 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00478"></a>00478 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480 cpl_table* 
-<a name="l00481"></a>00481 sinfo_utl_efficiency_internal(
-<a name="l00482"></a>00482                   cpl_table* tbl_obj_spectrum,
-<a name="l00483"></a>00483                   cpl_table* tbl_atmext,
-<a name="l00484"></a>00484                   cpl_table* tbl_ref,
-<a name="l00485"></a>00485                   <span class="keywordtype">double</span> exptime,
-<a name="l00486"></a>00486                   <span class="keywordtype">double</span> airmass,
-<a name="l00487"></a>00487                   <span class="keywordtype">double</span> aimprim,
-<a name="l00488"></a>00488                   <span class="keywordtype">double</span> gain,
-<a name="l00489"></a>00489                   <span class="keywordtype">int</span>    biny,
-<a name="l00490"></a>00490                               <span class="keywordtype">double</span> src2ref_wave_sampling,
-<a name="l00491"></a>00491                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,
-<a name="l00492"></a>00492                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,
-<a name="l00493"></a>00493                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,
-<a name="l00494"></a>00494                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,
-<a name="l00495"></a>00495                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,
-<a name="l00496"></a>00496                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,
-<a name="l00497"></a>00497                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux
-<a name="l00498"></a>00498                   )
-<a name="l00499"></a>00499 {
-<a name="l00500"></a>00500 
-<a name="l00501"></a>00501   <span class="keyword">const</span> <span class="keywordtype">double</span> TEL_AREA     = 51.2e4; <span class="comment">/* collecting area in cm2 */</span>
-<a name="l00502"></a>00502   <span class="keywordtype">double</span> cdelta1 = 0;
-<a name="l00503"></a>00503   <span class="keywordtype">int</span> i = 0;
-<a name="l00504"></a>00504   cpl_table* tbl_sel = NULL;
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506   <span class="comment">/* structure of the input table</span>
-<a name="l00507"></a>00507 <span class="comment">   * col            type    description</span>
-<a name="l00508"></a>00508 <span class="comment">   * wavelength double</span>
-<a name="l00509"></a>00509 <span class="comment">   * flux           double</span>
-<a name="l00510"></a>00510 <span class="comment">   * */</span>
-<a name="l00511"></a>00511   cpl_table* tbl_result = NULL; <span class="comment">// output table</span>
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513   <span class="comment">/*</span>
-<a name="l00514"></a>00514 <span class="comment">   * structure of the output table</span>
-<a name="l00515"></a>00515 <span class="comment">   * col            type    description</span>
-<a name="l00516"></a>00516 <span class="comment">   * wavelength double</span>
-<a name="l00517"></a>00517 <span class="comment">   * EFF            double  efficiency in range 0-1</span>
-<a name="l00518"></a>00518 <span class="comment">   * */</span>
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520   <span class="keywordtype">double</span>* pref = NULL;
-<a name="l00521"></a>00521   <span class="keywordtype">double</span>* pext = NULL;
-<a name="l00522"></a>00522   <span class="keywordtype">double</span>* pcor = NULL;
-<a name="l00523"></a>00523   <span class="keywordtype">double</span>* peph = NULL;
-<a name="l00524"></a>00524 
-<a name="l00525"></a>00525   <span class="keywordtype">double</span>* pw = NULL; <span class="comment">// wavelength of the input table</span>
-<a name="l00526"></a>00526   <span class="keywordtype">double</span>* pf = NULL; <span class="comment">// flux of the input table</span>
-<a name="l00527"></a>00527   <span class="keywordtype">int</span> nrow = 0;
-<a name="l00528"></a>00528   <span class="keywordtype">double</span> ref_bin_size=0;
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530   nrow = cpl_table_get_nrow(tbl_obj_spectrum);
-<a name="l00531"></a>00531   sinfo_msg(<span class="stringliteral">"Starting efficiency calculation: exptime[%f] airmass[%f] nrow[%d]"</span>, 
-<a name="l00532"></a>00532       exptime, airmass, nrow);
-<a name="l00533"></a>00533 
-<a name="l00534"></a>00534   <span class="comment">//cpl_table_dump(tbl_obj_spectrum,0,3,stdout);</span>
-<a name="l00535"></a>00535   <span class="comment">//sinfo_msg("col wave=%s col_flux=%s",col_name_obj_wave,col_name_obj_flux);</span>
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537   <span class="comment">/* convert to double */</span>
-<a name="l00538"></a>00538   sinfo_column_to_double(tbl_obj_spectrum,col_name_obj_wave);
-<a name="l00539"></a>00539   sinfo_column_to_double(tbl_obj_spectrum,col_name_obj_flux);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541   check_nomsg(sinfo_column_to_double(tbl_atmext,col_name_atm_wave ));
-<a name="l00542"></a>00542   check_nomsg(sinfo_column_to_double(tbl_atmext,col_name_atm_abs ));
-<a name="l00543"></a>00543   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_wave ));
-<a name="l00544"></a>00544   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_flux ));
-<a name="l00545"></a>00545   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_bin ));
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547   <span class="comment">/* get bin size of ref STD star spectrum */</span>
-<a name="l00548"></a>00548   ref_bin_size=cpl_table_get_double(tbl_ref,col_name_ref_bin,0,NULL);
-<a name="l00549"></a>00549   sinfo_msg(<span class="stringliteral">"ref_bin_size[AA]=%g"</span>,ref_bin_size);
-<a name="l00550"></a>00550   <span class="comment">/*</span>
-<a name="l00551"></a>00551 <span class="comment">  sinfo_msg("Unit conversion factor src/ref STD spectrum=%g",</span>
-<a name="l00552"></a>00552 <span class="comment">          src2ref_wave_sampling);</span>
-<a name="l00553"></a>00553 <span class="comment">  */</span>
-<a name="l00554"></a>00554 
-<a name="l00555"></a>00555   <span class="comment">/* convert obj spectrum wave unit to the same of the reference one */</span>
-<a name="l00556"></a>00556   check_nomsg(cpl_table_multiply_scalar(tbl_obj_spectrum,col_name_obj_wave,
-<a name="l00557"></a>00557                                  src2ref_wave_sampling));
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559   check_nomsg(cpl_table_save(tbl_ref,NULL,NULL,<span class="stringliteral">"ref2.fits"</span>,CPL_IO_DEFAULT));
-<a name="l00560"></a>00560   check_nomsg(cpl_table_save(tbl_atmext,NULL,NULL,<span class="stringliteral">"atm2.fits"</span>,CPL_IO_DEFAULT));
-<a name="l00561"></a>00561   check_nomsg(cpl_table_save(tbl_obj_spectrum,NULL,NULL,<span class="stringliteral">"sci2.fits"</span>,CPL_IO_DEFAULT));
-<a name="l00562"></a>00562   sinfo_msg(<span class="stringliteral">"object 2 src std %g"</span>,src2ref_wave_sampling);
-<a name="l00563"></a>00563   check_nomsg(pw=cpl_table_get_data_double(tbl_obj_spectrum,col_name_obj_wave));
-<a name="l00564"></a>00564   check_nomsg(pf=cpl_table_get_data_double(tbl_obj_spectrum,col_name_obj_flux));
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566   <span class="comment">// prepare columns for the output data</span>
-<a name="l00567"></a>00567   check_nomsg(tbl_result=cpl_table_new(nrow));
-<a name="l00568"></a>00568   check_nomsg(pref=sinfo_create_column_double(tbl_result, COL_NAME_REF, nrow));
-<a name="l00569"></a>00569   check_nomsg(pext=sinfo_create_column_double(tbl_result, COL_NAME_EXT, nrow));
-<a name="l00570"></a>00570   check_nomsg(pcor=sinfo_create_column_double(tbl_result, COL_NAME_COR, nrow));
-<a name="l00571"></a>00571   check_nomsg(peph=sinfo_create_column_double(tbl_result, COL_NAME_EPHOT, nrow));
-<a name="l00572"></a>00572   sinfo_msg(<span class="stringliteral">"wave range: [%g,%g]"</span>,pw[0],pw[nrow-1]); 
-<a name="l00573"></a>00573   sinfo_msg(<span class="stringliteral">"src_bin_size[AA]=%g"</span>,pw[1] - pw[0]);
-<a name="l00574"></a>00574   
-<a name="l00575"></a>00575   cdelta1 = (pw[1] - pw[0]) / src2ref_wave_sampling ; <span class="comment">/* we want the delta in original units. As we rescaled to AA we need to correct for this */</span>
-<a name="l00576"></a>00576   <span class="comment">//sinfo_msg("nrow=%d cdelta1=%g",nrow,cdelta1);</span>
-<a name="l00577"></a>00577   <span class="keywordflow">for</span> (i = 0; i < nrow; i++)
-<a name="l00578"></a>00578     {
-<a name="l00579"></a>00579       check_nomsg(pext[i] = sinfo_table_interpolate(tbl_atmext, pw[i],col_name_atm_wave, col_name_atm_abs));
-<a name="l00580"></a>00580       check_nomsg(pref[i] = sinfo_table_interpolate(tbl_ref, pw[i], col_name_ref_wave,col_name_ref_flux));
-<a name="l00581"></a>00581       pcor[i] = pow(10,(0.4*pext[i] * (aimprim - airmass)));
-<a name="l00582"></a>00582       peph[i] = 1.e7*1.986e-19/(pw[i]*1e-4);
-<a name="l00583"></a>00583       <span class="comment">/* ph energy: 1.986*10^-19(J.ph^-1)/lam(um) ==> </span>
-<a name="l00584"></a>00584 <span class="comment">         in as pw is expressed in Angstrom units we need to multiply by 10-4 </span>
-<a name="l00585"></a>00585 <span class="comment">       */</span>
-<a name="l00586"></a>00586       <span class="comment">/*</span>
-<a name="l00587"></a>00587 <span class="comment">      if(i< 2) {</span>
-<a name="l00588"></a>00588 <span class="comment">         sinfo_msg("pw[i]=%g,pcor=%g peph=%g",pw[i],pcor[i],peph[i]);</span>
-<a name="l00589"></a>00589 <span class="comment">      }</span>
-<a name="l00590"></a>00590 <span class="comment">      */</span>
-<a name="l00591"></a>00591     }
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593 
-<a name="l00594"></a>00594   <span class="comment">/*</span>
-<a name="l00595"></a>00595 <span class="comment">  sinfo_msg("atm: %s, %s ref: %s, %s obj: %s, %s",</span>
-<a name="l00596"></a>00596 <span class="comment">          col_name_atm_wave,col_name_atm_abs,</span>
-<a name="l00597"></a>00597 <span class="comment">          col_name_ref_wave,col_name_ref_flux,</span>
-<a name="l00598"></a>00598 <span class="comment">          col_name_obj_wave,col_name_obj_flux);</span>
-<a name="l00599"></a>00599 <span class="comment">  */</span>
-<a name="l00600"></a>00600   check_nomsg(cpl_table_duplicate_column(tbl_result,COL_NAME_SRC_COR,
-<a name="l00601"></a>00601                    tbl_obj_spectrum, col_name_obj_flux));
-<a name="l00602"></a>00602   check_nomsg(cpl_table_duplicate_column(tbl_result,col_name_obj_wave,
-<a name="l00603"></a>00603                    tbl_obj_spectrum,col_name_obj_wave));
-<a name="l00604"></a>00604   <span class="comment">/* correct for atmospheric extintion */</span>
-<a name="l00605"></a>00605   check_nomsg(cpl_table_multiply_columns(tbl_result,COL_NAME_SRC_COR,COL_NAME_COR));
-<a name="l00606"></a>00606 
-<a name="l00607"></a>00607   <span class="comment">/* correct object flux by binning: </span>
-<a name="l00608"></a>00608 <span class="comment">      divides by binsize in ref_wave_sampling (usually AA): </span>
-<a name="l00609"></a>00609 <span class="comment">     cdelt1[src_sampling]*src2ref_wave_sampling */</span>
-<a name="l00610"></a>00610   cpl_table_divide_scalar(tbl_result, COL_NAME_SRC_COR, src2ref_wave_sampling);
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612   cpl_table_divide_scalar(tbl_result, COL_NAME_SRC_COR, cdelta1);
-<a name="l00613"></a>00613   <span class="comment">/* correct for spatial bin size */</span>
-<a name="l00614"></a>00614 
-<a name="l00615"></a>00615   cpl_table_divide_scalar(tbl_result,COL_NAME_SRC_COR,biny); 
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617 
-<a name="l00618"></a>00618   <span class="comment">/*correct ref std star flux by binning: </span>
-<a name="l00619"></a>00619 <span class="comment">    divides by the bin size in ref_wave_sampling (usually AA) */</span>
-<a name="l00620"></a>00620   check_nomsg(cpl_table_divide_scalar(tbl_result,COL_NAME_REF,ref_bin_size));
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622   check_nomsg(cpl_table_duplicate_column(tbl_result,COL_NAME_SRC_EFF,
-<a name="l00623"></a>00623                    tbl_result,COL_NAME_SRC_COR));
-<a name="l00624"></a>00624 
-<a name="l00625"></a>00625 
-<a name="l00626"></a>00626   <span class="comment">/* correct for detector gain, exposure time, telescope area */</span>
-<a name="l00627"></a>00627   check_nomsg(cpl_table_multiply_scalar(tbl_result,COL_NAME_SRC_EFF,
-<a name="l00628"></a>00628                   gain / (exptime * TEL_AREA)));
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630   <span class="comment">/* correct for photon energy */</span>
-<a name="l00631"></a>00631   check_nomsg(cpl_table_multiply_columns(tbl_result,COL_NAME_SRC_EFF,
-<a name="l00632"></a>00632                    COL_NAME_EPHOT));
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634 
-<a name="l00635"></a>00635   check_nomsg(cpl_table_divide_columns(tbl_result,COL_NAME_SRC_EFF,COL_NAME_REF));
-<a name="l00636"></a>00636   <span class="comment">/* apply factor 1.e16 as reference catalog has fluxes in units of 1e-16 */</span>
-<a name="l00637"></a>00637   check_nomsg(cpl_table_multiply_scalar(tbl_result,COL_NAME_SRC_EFF,1.e16));
-<a name="l00638"></a>00638   <span class="comment">//check_nomsg(cpl_table_save(tbl_result,NULL,NULL,"pippo.fits", CPL_IO_DEFAULT));</span>
-<a name="l00639"></a>00639   <span class="comment">/* clean from outliers */</span>
-<a name="l00640"></a>00640   cpl_table_and_selected_double(tbl_result,COL_NAME_SRC_EFF,
-<a name="l00641"></a>00641                 CPL_GREATER_THAN,1.e-5);
-<a name="l00642"></a>00642   cpl_table_and_selected_double(tbl_result,COL_NAME_SRC_EFF,
-<a name="l00643"></a>00643                 CPL_LESS_THAN,100.);
-<a name="l00644"></a>00644   tbl_sel=cpl_table_extract_selected(tbl_result);
-<a name="l00645"></a>00645   check_nomsg(cpl_table_save(tbl_result,NULL,NULL,<span class="stringliteral">"result9.fits"</span>,CPL_IO_DEFAULT));
-<a name="l00646"></a>00646 
-<a name="l00647"></a>00647  cleanup:
-<a name="l00648"></a>00648   sinfo_free_table(&tbl_result);
-<a name="l00649"></a>00649   <span class="keywordflow">return</span> tbl_sel;
-<a name="l00650"></a>00650 }
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653 cpl_table*
-<a name="l00654"></a>00654 sinfo_efficiency_compute(cpl_frame* frm_sci, 
-<a name="l00655"></a>00655                        cpl_frame* frm_cat,
-<a name="l00656"></a>00656                        cpl_frame* frm_atmext)
-<a name="l00657"></a>00657 
-<a name="l00658"></a>00658 {
-<a name="l00659"></a>00659 
-<a name="l00660"></a>00660   cpl_propertylist* plist=NULL;
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662   cpl_table* tbl_eff=NULL;
-<a name="l00663"></a>00663   cpl_table* tbl_ref=NULL;
-<a name="l00664"></a>00664   cpl_table* tbl_atmext=NULL;
-<a name="l00665"></a>00665   cpl_table* tbl_sci=NULL;
-<a name="l00666"></a>00666 
-<a name="l00667"></a>00667   <span class="keywordtype">double</span> exptime=600;
-<a name="l00668"></a>00668   <span class="keywordtype">double</span> airmass=0;
-<a name="l00669"></a>00669   <span class="keywordtype">double</span> airmass_start=0;
-<a name="l00670"></a>00670   <span class="keywordtype">double</span> airmass_end=0;
-<a name="l00671"></a>00671   <span class="keywordtype">double</span> dRA=0;
-<a name="l00672"></a>00672   <span class="keywordtype">double</span> dDEC=0;
-<a name="l00673"></a>00673   <span class="keywordtype">double</span> gain=0;
-<a name="l00674"></a>00674   <span class="keywordtype">double</span> aimprim=0;
-<a name="l00675"></a>00675   <span class="keywordtype">double</span> dEpsilon=0.1;
-<a name="l00676"></a>00676   <span class="keywordtype">double</span> um2AA=1.e4;
-<a name="l00677"></a>00677 
-<a name="l00678"></a>00678   <span class="keywordtype">int</span> nrow=0;
-<a name="l00679"></a>00679   <span class="keywordtype">int</span> biny=1;
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_sci=NULL;
-<a name="l00682"></a>00682   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_atm=NULL;
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684   name_sci=cpl_frame_get_filename(frm_sci);
-<a name="l00685"></a>00685   sinfo_msg(<span class="stringliteral">"name_sci=%s"</span>,name_sci);     
-<a name="l00686"></a>00686   check_nomsg(plist=cpl_propertylist_load(name_sci,0));
-<a name="l00687"></a>00687   check_nomsg(tbl_sci=cpl_table_load(name_sci,1,0));
-<a name="l00688"></a>00688   check_nomsg(dRA=sinfo_pfits_get_ra(plist));
-<a name="l00689"></a>00689   dDEC=sinfo_pfits_get_dec(plist);
-<a name="l00690"></a>00690   airmass_start=sinfo_pfits_get_airmass_end(plist);
-<a name="l00691"></a>00691   airmass_end=sinfo_pfits_get_airmass_end(plist);
-<a name="l00692"></a>00692   airmass=0.5*(airmass_start+airmass_end);
-<a name="l00693"></a>00693   gain=2.42;
-<a name="l00694"></a>00694   biny=1;
-<a name="l00695"></a>00695   check_nomsg(exptime=sinfo_pfits_get_dit(plist));
-<a name="l00696"></a>00696   sinfo_free_propertylist(&plist);
-<a name="l00697"></a>00697   sinfo_msg(<span class="stringliteral">"gain=%g airm=%g exptime=%g airmass=%g ra=%g dec=%g"</span>,
-<a name="l00698"></a>00698           gain,airmass,exptime,airmass,dRA,dDEC);
-<a name="l00699"></a>00699 
-<a name="l00700"></a>00700   sinfo_msg(<span class="stringliteral">"table sci spectra=%s"</span>,name_sci);
-<a name="l00701"></a>00701   nrow=cpl_table_get_nrow(tbl_sci);
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703   check_nomsg(name_atm=cpl_frame_get_filename(frm_atmext));
-<a name="l00704"></a>00704   check_nomsg(tbl_atmext=cpl_table_load(name_atm,1,0));
-<a name="l00705"></a>00705  
-<a name="l00706"></a>00706   check_nomsg(sinfo_parse_catalog_std_stars(frm_cat,dRA,dDEC,dEpsilon,&tbl_ref));
-<a name="l00707"></a>00707  
-<a name="l00708"></a>00708   <span class="keywordflow">if</span>(tbl_ref == NULL) {
-<a name="l00709"></a>00709     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Provide std sar catalog frame"</span>);
-<a name="l00710"></a>00710     <span class="keywordflow">return</span> NULL;
-<a name="l00711"></a>00711   <span class="comment">//cpl_table_dump(tbl_ref,0,3,stdout);</span>
-<a name="l00712"></a>00712   }
-<a name="l00713"></a>00713 
-<a name="l00714"></a>00714   check_nomsg(cpl_table_save(tbl_sci,NULL,NULL,<span class="stringliteral">"sci.fits"</span>,CPL_IO_DEFAULT));
-<a name="l00715"></a>00715   check_nomsg(tbl_eff=sinfo_utl_efficiency_internal(tbl_sci,tbl_atmext,tbl_ref,
-<a name="l00716"></a>00716                                                  exptime,airmass,aimprim,gain,
-<a name="l00717"></a>00717                                                  biny,um2AA,
-<a name="l00718"></a>00718                                                  <span class="stringliteral">"LAMBDA"</span>,
-<a name="l00719"></a>00719                                                  <span class="stringliteral">"LA_SILLA"</span>,
-<a name="l00720"></a>00720                                                  <span class="stringliteral">"LAMBDA"</span>,
-<a name="l00721"></a>00721                                                  <span class="stringliteral">"F_LAMBDA"</span>,
-<a name="l00722"></a>00722                                                  <span class="stringliteral">"BIN_WIDTH"</span>,
-<a name="l00723"></a>00723                                                  <span class="stringliteral">"wavelength"</span>,
-<a name="l00724"></a>00724                                                  <span class="stringliteral">"counts_bkg"</span>));
-<a name="l00725"></a>00725 
-<a name="l00726"></a>00726   cleanup:
-<a name="l00727"></a>00727   sinfo_free_table(&tbl_ref);
-<a name="l00728"></a>00728   sinfo_free_table(&tbl_atmext);
-<a name="l00729"></a>00729   sinfo_free_propertylist(&plist);
-<a name="l00730"></a>00730  
-<a name="l00731"></a>00731   <span class="keywordflow">return</span> tbl_eff;
-<a name="l00732"></a>00732 
-<a name="l00733"></a>00733 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_efficiency.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Revision: 1.17 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <sinfo_dfs.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_utl_efficiency.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_star_index.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#define PRO_STD_STAR_SPECTRA "STD_STAR_SPECTRA"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_WAVELENGTH[] = <span class="stringliteral">"WAVELENGTH"</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_WAVELENGTH_C[] = <span class="stringliteral">"WAVELENGTH"</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_LAMBDA[]     = <span class="stringliteral">"LAMBDA"</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_LA_SILLA[]   = <span class="stringliteral">"LA_SILLA"</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_REF[]        = <span class="stringliteral">"REF"</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_COR[]        = <span class="stringliteral">"COR"</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_SRC_COR[]    = <span class="stringliteral">"SRC_COR"</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_COUNTS_BKG[] = <span class="stringliteral">"INT_OBJ"</span>;<span class="comment">//"counts_tot";</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_FLUX[]       = <span class="stringliteral">"FLUX"</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_EPHOT[]      = <span class="stringliteral">"EPHOT"</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_EXT[]        = <span class="stringliteral">"EXT"</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> COL_NAME_SRC_EFF[]    = <span class="stringliteral">"EFF"</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> PAR_NAME_DIT[]        = <span class="stringliteral">"ESO DET DIT"</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_RAW_IMA_SLIT[]  = PRO_STD_STAR_SPECTRA;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_FLUX_STD_TAB[]  = FLUX_STD_TABLE;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_FLUX_STD_CAT[]  = FLUX_STD_CATALOG;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">char</span> FRM_EXTCOEFF_TAB[]  = EXTCOEFF_TABLE;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> sinfo_column_to_double(cpl_table* ptable, <span class="keyword">const</span> <span class="keywordtype">char</span>* column);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> sinfo_table_interpolate(cpl_table* tbl,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>           <span class="keywordtype">double</span> wav,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>           <span class="keyword">const</span> <span class="keywordtype">char</span>* colx,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>           <span class="keyword">const</span> <span class="keywordtype">char</span>* coly);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">double</span>* </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_create_column_double(cpl_table* tbl, <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name, <span class="keywordtype">int</span> nrow);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> cpl_error_code</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> sinfo_get_std_obs_values(cpl_propertylist* plist,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>                        <span class="keywordtype">double</span>* exptime,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                        <span class="keywordtype">double</span>* airmass,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                        <span class="keywordtype">double</span>* dRA,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                        <span class="keywordtype">double</span>* dDEC);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_load_ref_table(cpl_frameset* frames, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                    <span class="keywordtype">double</span> dRA, </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                    <span class="keywordtype">double</span> dDEC, </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                    <span class="keywordtype">double</span> EPSILON, </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                    cpl_table** pptable)</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name = NULL;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   cpl_frame* frm_ref = NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>   <span class="comment">/* REF STD frame */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   frm_ref=cpl_frameset_find(frames,FRM_FLUX_STD_TAB);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>   <span class="keywordflow">if</span> (!frm_ref)</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>       sinfo_msg(<span class="stringliteral">"REF frame is not found, trying to get REF from the catalog"</span>);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>      <span class="comment">/* REF STD catalog frame */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>       <span class="comment">// get from catalog</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>       check_nomsg(frm_ref=cpl_frameset_find(frames,FRM_FLUX_STD_CAT));</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>       <span class="keywordflow">if</span> (frm_ref)</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>       check_nomsg(name=cpl_frame_get_filename(frm_ref));</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>       <span class="keywordflow">if</span> (name)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>           star_index* pstarindex = star_index_load(name);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>           <span class="keywordflow">if</span> (pstarindex)</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>         {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>           <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name = 0;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>           sinfo_msg(<span class="stringliteral">"The catalog is loaded, looking for star in RA[%f] DEC[%f] tolerance[%f]"</span>, dRA, dDEC, EPSILON);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>           *pptable = star_index_get(pstarindex, dRA, dDEC, EPSILON, EPSILON, &star_name);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>           <span class="keywordflow">if</span> (*pptable && star_name)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>             {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>               sinfo_msg(<span class="stringliteral">"REF table is found in the catalog, star name is [%s]"</span>, star_name);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>             }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>             {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>               sinfo_msg(<span class="stringliteral">"ERROR - REF table could not be found in the catalog"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>             }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>           <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>           sinfo_msg(<span class="stringliteral">"ERROR - could not load the catalog"</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>         }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>       sinfo_msg(<span class="stringliteral">"REF frame is found"</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>       check_nomsg(name=cpl_frame_get_filename(frm_ref));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       check_nomsg(*pptable=cpl_table_load(name,1,0));</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>  cleanup:</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> sinfo_parse_catalog_std_stars(cpl_frame* cat, </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                 <span class="keywordtype">double</span> dRA, </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                 <span class="keywordtype">double</span> dDEC, </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                 <span class="keywordtype">double</span> EPSILON, </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                 cpl_table** pptable)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name = NULL;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   <span class="keywordflow">if</span> (cat) {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     check_nomsg(name=cpl_frame_get_filename(cat));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">if</span> (name) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>       star_index* pstarindex = star_index_load(name);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>       <span class="keywordflow">if</span> (pstarindex) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* star_name = 0;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     sinfo_msg(<span class="stringliteral">"The catalog is loaded, looking for star in RA[%f] DEC[%f] tolerance[%f]"</span>, dRA, dDEC, EPSILON);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     *pptable = star_index_get(pstarindex, dRA, dDEC, EPSILON, EPSILON, &star_name);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <span class="keywordflow">if</span> (*pptable && star_name) {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       sinfo_msg(<span class="stringliteral">"REF table is found in the catalog, star name is [%s]"</span>, star_name);</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>       sinfo_msg(<span class="stringliteral">"ERROR - REF table could not be found in the catalog"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>       }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     sinfo_msg(<span class="stringliteral">"ERROR - could not load the catalog"</span>);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>       }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>  cleanup:</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> sinfo_data_interpolate(</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>              <span class="keywordtype">double</span> wav,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>              <span class="keywordtype">int</span> nrow,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>              <span class="keywordtype">double</span>* pw,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>              <span class="keywordtype">double</span>* pe</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>              )</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   <span class="keywordtype">double</span> y = 0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>   <span class="keywordtype">double</span> w1=pw[0];</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>   <span class="keywordtype">double</span> w2=pw[nrow-1];</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordtype">double</span> y1_=pe[0]; <span class="comment">/*was changed from y1 to y1_ due a warning from compiler - shadowed variable*/</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>   <span class="keywordtype">double</span> y2=pe[nrow-1];</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>   <span class="keywordflow">if</span>(wav < pw[0])</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       w1=pw[0];</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       w2=pw[1];</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       y1_=pe[0];</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       y2=pe[1];</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (wav > pw[nrow - 1])</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>       w1=pw[nrow - 2];</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       w2=pw[nrow - 1];</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       y1_=pe[nrow - 2];</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       y2=pe[nrow - 1];</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>       <span class="keywordtype">int</span> l = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       <span class="keywordtype">int</span> h = nrow - 1;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>       <span class="keywordtype">int</span> curr_row = 0;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       curr_row = (h-l) / 2;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       <span class="keywordflow">while</span>( h-l >1 )</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       <span class="keywordflow">if</span>(wav < pw[curr_row])</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>           h = curr_row;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>         {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>           l = curr_row;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>         }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       curr_row = (h-l) / 2 + l;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       w1=pw[curr_row];</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       w2=pw[curr_row + 1];</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>       y1_=pe[curr_row];</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>       y2=pe[curr_row + 1];</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   y=y1_+(y2-y1_)/(w2-w1)*(wav-w1);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> }</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> sinfo_table_interpolate(cpl_table* tbl,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>           <span class="keywordtype">double</span> wav,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>           <span class="keyword">const</span> <span class="keywordtype">char</span>* colx,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>           <span class="keyword">const</span> <span class="keywordtype">char</span>* coly)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   <span class="keywordtype">double</span> y=0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>   <span class="keywordtype">double</span>* pe=NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>   check_nomsg(pw=cpl_table_get_data_double(tbl,colx));</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   check_nomsg(pe=cpl_table_get_data_double(tbl,coly));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   check_nomsg(nrow=cpl_table_get_nrow(tbl));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   y = sinfo_data_interpolate(wav, nrow, pw, pe);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>  cleanup:</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">return</span> y;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="keyword">static</span> <span class="keywordtype">double</span>* </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> sinfo_create_column_double(cpl_table* tbl, <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name, <span class="keywordtype">int</span> nrow)</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   <span class="keywordtype">double</span>* retval = 0;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   check_nomsg(cpl_table_new_column(tbl, col_name, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>   check_nomsg(cpl_table_fill_column_window_double(tbl, col_name, 0, nrow, -1));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>   check_nomsg(retval = cpl_table_get_data_double(tbl,col_name));</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>  cleanup:</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordflow">return</span> retval;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> cpl_error_code</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> sinfo_get_std_obs_values(cpl_propertylist* plist,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                        <span class="keywordtype">double</span>* exptime,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                        <span class="keywordtype">double</span>* airmass,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                        <span class="keywordtype">double</span>* dRA,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                        <span class="keywordtype">double</span>* dDEC)</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>    <span class="keywordtype">double</span> airmass_start=0;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>    <span class="keywordtype">double</span> airmass_end=0;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>    check_nomsg(*exptime=sinfo_pfits_get_exp_time(plist));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>    airmass_start=sinfo_pfits_get_airmass_start(plist);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>    airmass_end=sinfo_pfits_get_airmass_end(plist);</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>    *dRA=sinfo_pfits_get_ra(plist);</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>    *dDEC=sinfo_pfits_get_dec(plist);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>    *airmass=0.5*(airmass_start+airmass_end);</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>  cleanup:</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>    <span class="keywordflow">return</span> cpl_error_get_code();</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> cpl_table*</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> sinfo_utl_efficiency(</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>              cpl_frameset * frames,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>              <span class="keywordtype">double</span> dGain,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>              <span class="keywordtype">double</span> dEpsilon,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>              <span class="keywordtype">double</span> aimprim,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>              <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>              )</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> {</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>   cpl_frame* frm_sci = NULL;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>   cpl_frame* frm_atmext = NULL;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   cpl_table* tbl_obj_spectrum = NULL; <span class="comment">// input table with spectrum</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>   cpl_table* tbl_atmext = NULL;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>   <span class="keywordtype">double</span> exptime = 600;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   cpl_propertylist* plist = NULL;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   cpl_table* tbl_ref = NULL;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   cpl_table* tbl_result=NULL;</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   <span class="keywordtype">double</span> dRA = 0;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   <span class="keywordtype">double</span> dDEC = 0;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordtype">double</span> airmass=0;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> mk2AA=1E4; <span class="comment">/* mkm/AA */</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   <span class="comment">// read all input data and call the internal function</span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   <span class="comment">// read the input tables</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>   <span class="comment">// 1. observation</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>   check_nomsg(frm_sci=cpl_frameset_find(frames, FRM_RAW_IMA_SLIT));</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   check_nomsg(name=cpl_frame_get_filename(frm_sci));</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   sinfo_msg(<span class="stringliteral">"name=%s"</span>,name);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>   check_nomsg(tbl_obj_spectrum=cpl_table_load(name,1,0));</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>   check_nomsg(plist=cpl_propertylist_load(name,0));</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   sinfo_get_std_obs_values(plist,&exptime,&airmass,&dRA,&dDEC);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="comment">// 2. reference table</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>   sinfo_load_ref_table(frames, dRA, dDEC, dEpsilon, &tbl_ref);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>   <span class="keywordflow">if</span> (tbl_ref)</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     {</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>       <span class="comment">// 3. atmext</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>       check_nomsg(frm_atmext=cpl_frameset_find(frames,FRM_EXTCOEFF_TAB));</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>       check_nomsg(name=cpl_frame_get_filename(frm_atmext));</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>       check_nomsg(tbl_atmext=cpl_table_load(name,1,0));</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span> </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>       tbl_result = sinfo_utl_efficiency_internal(</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                          tbl_obj_spectrum,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                          tbl_atmext,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                          tbl_ref,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                          exptime,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                          airmass,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                          aimprim,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                          dGain,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                                                  1,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                                                  mk2AA,<span class="comment">//valid only for SINFONI</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                                                  col_name_atm_wave,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                                                  col_name_atm_abs,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                                                  col_name_ref_wave,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                                                  col_name_ref_flux,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                                                  col_name_ref_bin,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                                                  col_name_obj_wave,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                                                  col_name_obj_flux</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>          );</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>      }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>  cleanup:</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   sinfo_free_table(&tbl_atmext);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   sinfo_free_table(&tbl_obj_spectrum);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   sinfo_free_table(&tbl_ref);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   <span class="keywordflow">return</span> tbl_result;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> sinfo_column_to_double(cpl_table* ptable, <span class="keyword">const</span> <span class="keywordtype">char</span>* column)</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* TEMP = <span class="stringliteral">"_temp_"</span>;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   check_nomsg(cpl_table_duplicate_column(ptable, TEMP, ptable, column));</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   check_nomsg(cpl_table_erase_column(ptable, column));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   check_nomsg(cpl_table_cast_column(ptable, TEMP, column, CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   check_nomsg(cpl_table_erase_column(ptable, TEMP ));</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>  cleanup:</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   sinfo_msg(<span class="stringliteral">" error column to double [%s]"</span>, column);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> }</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span> </div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> cpl_table* </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> sinfo_utl_efficiency_internal(</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                   cpl_table* tbl_obj_spectrum,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                   cpl_table* tbl_atmext,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                   cpl_table* tbl_ref,</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                   <span class="keywordtype">double</span> exptime,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                   <span class="keywordtype">double</span> airmass,</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                   <span class="keywordtype">double</span> aimprim,</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                   <span class="keywordtype">double</span> gain,</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                   <span class="keywordtype">int</span>    biny,</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                               <span class="keywordtype">double</span> src2ref_wave_sampling,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>                   )</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> {</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> TEL_AREA     = 51.2e4; <span class="comment">/* collecting area in cm2 */</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   <span class="keywordtype">double</span> cdelta1 = 0;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>   <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   cpl_table* tbl_sel = NULL;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   <span class="comment">/* structure of the input table</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> <span class="comment">   * col            type    description</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> <span class="comment">   * wavelength double</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span> <span class="comment">   * flux           double</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> <span class="comment">   * */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   cpl_table* tbl_result = NULL; <span class="comment">// output table</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> <span class="comment">   * structure of the output table</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> <span class="comment">   * col            type    description</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment">   * wavelength double</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">   * EFF            double  efficiency in range 0-1</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="comment">   * */</span></div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   <span class="keywordtype">double</span>* pref = NULL;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   <span class="keywordtype">double</span>* pext = NULL;</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   <span class="keywordtype">double</span>* pcor = NULL;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   <span class="keywordtype">double</span>* peph = NULL;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span> </div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   <span class="keywordtype">double</span>* pw = NULL; <span class="comment">// wavelength of the input table</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   <span class="keywordtype">double</span>* pf = NULL; <span class="comment">// flux of the input table</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   <span class="keywordtype">int</span> nrow = 0;</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   <span class="keywordtype">double</span> ref_bin_size=0;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   nrow = cpl_table_get_nrow(tbl_obj_spectrum);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   sinfo_msg(<span class="stringliteral">"Starting efficiency calculation: exptime[%f] airmass[%f] nrow[%d]"</span>, </div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>       exptime, airmass, nrow);</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   <span class="comment">//cpl_table_dump(tbl_obj_spectrum,0,3,stdout);</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   <span class="comment">//sinfo_msg("col wave=%s col_flux=%s",col_name_obj_wave,col_name_obj_flux);</span></div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   <span class="comment">/* convert to double */</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   sinfo_column_to_double(tbl_obj_spectrum,col_name_obj_wave);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   sinfo_column_to_double(tbl_obj_spectrum,col_name_obj_flux);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   check_nomsg(sinfo_column_to_double(tbl_atmext,col_name_atm_wave ));</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   check_nomsg(sinfo_column_to_double(tbl_atmext,col_name_atm_abs ));</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_wave ));</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_flux ));</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   check_nomsg(sinfo_column_to_double(tbl_ref,col_name_ref_bin ));</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   <span class="comment">/* get bin size of ref STD star spectrum */</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   ref_bin_size=cpl_table_get_double(tbl_ref,col_name_ref_bin,0,NULL);</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>   sinfo_msg(<span class="stringliteral">"ref_bin_size[AA]=%g"</span>,ref_bin_size);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">  sinfo_msg("Unit conversion factor src/ref STD spectrum=%g",</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">          src2ref_wave_sampling);</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> </div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>   <span class="comment">/* convert obj spectrum wave unit to the same of the reference one */</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   check_nomsg(cpl_table_multiply_scalar(tbl_obj_spectrum,col_name_obj_wave,</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>                                  src2ref_wave_sampling));</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   check_nomsg(cpl_table_save(tbl_ref,NULL,NULL,<span class="stringliteral">"ref2.fits"</span>,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   check_nomsg(cpl_table_save(tbl_atmext,NULL,NULL,<span class="stringliteral">"atm2.fits"</span>,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>   check_nomsg(cpl_table_save(tbl_obj_spectrum,NULL,NULL,<span class="stringliteral">"sci2.fits"</span>,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>   sinfo_msg(<span class="stringliteral">"object 2 src std %g"</span>,src2ref_wave_sampling);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   check_nomsg(pw=cpl_table_get_data_double(tbl_obj_spectrum,col_name_obj_wave));</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   check_nomsg(pf=cpl_table_get_data_double(tbl_obj_spectrum,col_name_obj_flux));</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   <span class="comment">// prepare columns for the output data</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   check_nomsg(tbl_result=cpl_table_new(nrow));</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   check_nomsg(pref=sinfo_create_column_double(tbl_result, COL_NAME_REF, nrow));</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   check_nomsg(pext=sinfo_create_column_double(tbl_result, COL_NAME_EXT, nrow));</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   check_nomsg(pcor=sinfo_create_column_double(tbl_result, COL_NAME_COR, nrow));</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   check_nomsg(peph=sinfo_create_column_double(tbl_result, COL_NAME_EPHOT, nrow));</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   sinfo_msg(<span class="stringliteral">"wave range: [%g,%g]"</span>,pw[0],pw[nrow-1]); </div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   sinfo_msg(<span class="stringliteral">"src_bin_size[AA]=%g"</span>,pw[1] - pw[0]);</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>   </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   cdelta1 = (pw[1] - pw[0]) / src2ref_wave_sampling ; <span class="comment">/* we want the delta in original units. As we rescaled to AA we need to correct for this */</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   <span class="comment">//sinfo_msg("nrow=%d cdelta1=%g",nrow,cdelta1);</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordflow">for</span> (i = 0; i < nrow; i++)</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>       check_nomsg(pext[i] = sinfo_table_interpolate(tbl_atmext, pw[i],col_name_atm_wave, col_name_atm_abs));</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>       check_nomsg(pref[i] = sinfo_table_interpolate(tbl_ref, pw[i], col_name_ref_wave,col_name_ref_flux));</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>       pcor[i] = pow(10,(0.4*pext[i] * (aimprim - airmass)));</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>       peph[i] = 1.e7*1.986e-19/(pw[i]*1e-4);</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>       <span class="comment">/* ph energy: 1.986*10^-19(J.ph^-1)/lam(um) ==> </span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="comment">         in as pw is expressed in Angstrom units we need to multiply by 10-4 </span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="comment">      if(i< 2) {</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> <span class="comment">         sinfo_msg("pw[i]=%g,pcor=%g peph=%g",pw[i],pcor[i],peph[i]);</span></div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     }</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span> </div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span> <span class="comment">  sinfo_msg("atm: %s, %s ref: %s, %s obj: %s, %s",</span></div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span> <span class="comment">          col_name_atm_wave,col_name_atm_abs,</span></div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span> <span class="comment">          col_name_ref_wave,col_name_ref_flux,</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span> <span class="comment">          col_name_obj_wave,col_name_obj_flux);</span></div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   check_nomsg(cpl_table_duplicate_column(tbl_result,COL_NAME_SRC_COR,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>                    tbl_obj_spectrum, col_name_obj_flux));</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   check_nomsg(cpl_table_duplicate_column(tbl_result,col_name_obj_wave,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>                    tbl_obj_spectrum,col_name_obj_wave));</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   <span class="comment">/* correct for atmospheric extintion */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>   check_nomsg(cpl_table_multiply_columns(tbl_result,COL_NAME_SRC_COR,COL_NAME_COR));</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span> </div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   <span class="comment">/* correct object flux by binning: </span></div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> <span class="comment">      divides by binsize in ref_wave_sampling (usually AA): </span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">     cdelt1[src_sampling]*src2ref_wave_sampling */</span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>   cpl_table_divide_scalar(tbl_result, COL_NAME_SRC_COR, src2ref_wave_sampling);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   cpl_table_divide_scalar(tbl_result, COL_NAME_SRC_COR, cdelta1);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   <span class="comment">/* correct for spatial bin size */</span></div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> </div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>   cpl_table_divide_scalar(tbl_result,COL_NAME_SRC_COR,biny); </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span> </div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   <span class="comment">/*correct ref std star flux by binning: </span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span> <span class="comment">    divides by the bin size in ref_wave_sampling (usually AA) */</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   check_nomsg(cpl_table_divide_scalar(tbl_result,COL_NAME_REF,ref_bin_size));</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   check_nomsg(cpl_table_duplicate_column(tbl_result,COL_NAME_SRC_EFF,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                    tbl_result,COL_NAME_SRC_COR));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span> </div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span> </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>   <span class="comment">/* correct for detector gain, exposure time, telescope area */</span></div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   check_nomsg(cpl_table_multiply_scalar(tbl_result,COL_NAME_SRC_EFF,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>                   gain / (exptime * TEL_AREA)));</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   <span class="comment">/* correct for photon energy */</span></div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   check_nomsg(cpl_table_multiply_columns(tbl_result,COL_NAME_SRC_EFF,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                    COL_NAME_EPHOT));</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span> </div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   check_nomsg(cpl_table_divide_columns(tbl_result,COL_NAME_SRC_EFF,COL_NAME_REF));</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   <span class="comment">/* apply factor 1.e16 as reference catalog has fluxes in units of 1e-16 */</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   check_nomsg(cpl_table_multiply_scalar(tbl_result,COL_NAME_SRC_EFF,1.e16));</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   <span class="comment">//check_nomsg(cpl_table_save(tbl_result,NULL,NULL,"pippo.fits", CPL_IO_DEFAULT));</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   <span class="comment">/* clean from outliers */</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   cpl_table_and_selected_double(tbl_result,COL_NAME_SRC_EFF,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                 CPL_GREATER_THAN,1.e-5);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   cpl_table_and_selected_double(tbl_result,COL_NAME_SRC_EFF,</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                 CPL_LESS_THAN,100.);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   tbl_sel=cpl_table_extract_selected(tbl_result);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   check_nomsg(cpl_table_save(tbl_result,NULL,NULL,<span class="stringliteral">"result9.fits"</span>,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span> </div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>  cleanup:</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   sinfo_free_table(&tbl_result);</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   <span class="keywordflow">return</span> tbl_sel;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span> }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> cpl_table*</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> sinfo_efficiency_compute(cpl_frame* frm_sci, </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                        cpl_frame* frm_cat,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                        cpl_frame* frm_atmext)</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span> </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   cpl_table* tbl_eff=NULL;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>   cpl_table* tbl_ref=NULL;</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   cpl_table* tbl_atmext=NULL;</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   cpl_table* tbl_sci=NULL;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span> </div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   <span class="keywordtype">double</span> exptime=600;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   <span class="keywordtype">double</span> airmass=0;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>   <span class="keywordtype">double</span> airmass_start=0;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   <span class="keywordtype">double</span> airmass_end=0;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   <span class="keywordtype">double</span> dRA=0;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   <span class="keywordtype">double</span> dDEC=0;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   <span class="keywordtype">double</span> gain=0;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   <span class="keywordtype">double</span> aimprim=0;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   <span class="keywordtype">double</span> dEpsilon=0.1;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>   <span class="keywordtype">double</span> um2AA=1.e4;</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   <span class="keywordtype">int</span> biny=1;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_sci=NULL;</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* name_atm=NULL;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>   name_sci=cpl_frame_get_filename(frm_sci);</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>   sinfo_msg(<span class="stringliteral">"name_sci=%s"</span>,name_sci);     </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>   check_nomsg(plist=cpl_propertylist_load(name_sci,0));</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   check_nomsg(tbl_sci=cpl_table_load(name_sci,1,0));</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   check_nomsg(dRA=sinfo_pfits_get_ra(plist));</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   dDEC=sinfo_pfits_get_dec(plist);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   airmass_start=sinfo_pfits_get_airmass_end(plist);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>   airmass_end=sinfo_pfits_get_airmass_end(plist);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>   airmass=0.5*(airmass_start+airmass_end);</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>   gain=2.42;</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   biny=1;</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   check_nomsg(exptime=sinfo_pfits_get_dit(plist));</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>   sinfo_msg(<span class="stringliteral">"gain=%g airm=%g exptime=%g airmass=%g ra=%g dec=%g"</span>,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>           gain,airmass,exptime,airmass,dRA,dDEC);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>   sinfo_msg(<span class="stringliteral">"table sci spectra=%s"</span>,name_sci);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>   nrow=cpl_table_get_nrow(tbl_sci);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   check_nomsg(name_atm=cpl_frame_get_filename(frm_atmext));</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   check_nomsg(tbl_atmext=cpl_table_load(name_atm,1,0));</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>  </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   check_nomsg(sinfo_parse_catalog_std_stars(frm_cat,dRA,dDEC,dEpsilon,&tbl_ref));</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>  </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>   <span class="keywordflow">if</span>(tbl_ref == NULL) {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Provide std sar catalog frame"</span>);</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>   <span class="comment">//cpl_table_dump(tbl_ref,0,3,stdout);</span></div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>   }</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span> </div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   check_nomsg(cpl_table_save(tbl_sci,NULL,NULL,<span class="stringliteral">"sci.fits"</span>,CPL_IO_DEFAULT));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   check_nomsg(tbl_eff=sinfo_utl_efficiency_internal(tbl_sci,tbl_atmext,tbl_ref,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                                                  exptime,airmass,aimprim,gain,</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>                                                  biny,um2AA,</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                                                  <span class="stringliteral">"LAMBDA"</span>,</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>                                                  <span class="stringliteral">"LA_SILLA"</span>,</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>                                                  <span class="stringliteral">"LAMBDA"</span>,</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>                                                  <span class="stringliteral">"F_LAMBDA"</span>,</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>                                                  <span class="stringliteral">"BIN_WIDTH"</span>,</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                                                  <span class="stringliteral">"wavelength"</span>,</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                                                  <span class="stringliteral">"counts_bkg"</span>));</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span> </div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   cleanup:</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   sinfo_free_table(&tbl_ref);</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   sinfo_free_table(&tbl_atmext);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>  </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   <span class="keywordflow">return</span> tbl_eff;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span> </div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__efficiency_8h_source.html b/html/sinfo__utl__efficiency_8h_source.html
index 1da7583..a03f844 100644
--- a/html/sinfo__utl__efficiency_8h_source.html
+++ b/html/sinfo__utl__efficiency_8h_source.html
@@ -2,106 +2,137 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_efficiency.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_efficiency.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*</span>
-<a name="l00020"></a>00020 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Date: 2010/02/08 07:18:21 $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00023"></a>00023 <span class="comment"> *</span>
-<a name="l00024"></a>00024 <span class="comment"> */</span>
-<a name="l00025"></a>00025 
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_UTL_EFFICIENCY_H_</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_EFFICIENCY_H_</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span>
-<a name="l00029"></a>00029 
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="keywordtype">void</span> 
-<a name="l00032"></a>00032 sinfo_load_ref_table(cpl_frameset* frames, 
-<a name="l00033"></a>00033                    <span class="keywordtype">double</span> dRA, 
-<a name="l00034"></a>00034                    <span class="keywordtype">double</span> dDEC, 
-<a name="l00035"></a>00035                    <span class="keywordtype">double</span> EPSILON, 
-<a name="l00036"></a>00036                    cpl_table** pptable);
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 cpl_table*
-<a name="l00041"></a>00041 sinfo_utl_efficiency(
-<a name="l00042"></a>00042              cpl_frameset * frames,
-<a name="l00043"></a>00043              <span class="keywordtype">double</span> dGain,
-<a name="l00044"></a>00044              <span class="keywordtype">double</span> dEpsilon,
-<a name="l00045"></a>00045              <span class="keywordtype">double</span> aimprim,
-<a name="l00046"></a>00046                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,
-<a name="l00047"></a>00047                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,
-<a name="l00048"></a>00048                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,
-<a name="l00049"></a>00049                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,
-<a name="l00050"></a>00050                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,
-<a name="l00051"></a>00051                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,
-<a name="l00052"></a>00052                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux
-<a name="l00053"></a>00053    );
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 cpl_table* 
-<a name="l00056"></a>00056 sinfo_utl_efficiency_internal(
-<a name="l00057"></a>00057                   cpl_table* tbl_obj_spectrum,
-<a name="l00058"></a>00058                   cpl_table* tbl_atmext,
-<a name="l00059"></a>00059                   cpl_table* tbl_ref,
-<a name="l00060"></a>00060                   <span class="keywordtype">double</span> exptime,
-<a name="l00061"></a>00061                   <span class="keywordtype">double</span> airmass,
-<a name="l00062"></a>00062                   <span class="keywordtype">double</span> aimprim,
-<a name="l00063"></a>00063                   <span class="keywordtype">double</span> gain,
-<a name="l00064"></a>00064                   <span class="keywordtype">int</span>    biny,
-<a name="l00065"></a>00065                               <span class="keywordtype">double</span> src2ref_wave_sampling,
-<a name="l00066"></a>00066                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,
-<a name="l00067"></a>00067                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,
-<a name="l00068"></a>00068                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,
-<a name="l00069"></a>00069                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,
-<a name="l00070"></a>00070                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,
-<a name="l00071"></a>00071                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,
-<a name="l00072"></a>00072                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux
-<a name="l00073"></a>00073    );
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keywordtype">double</span>
-<a name="l00076"></a>00076 sinfo_data_interpolate(
-<a name="l00077"></a>00077              <span class="keywordtype">double</span> wav,
-<a name="l00078"></a>00078              <span class="keywordtype">int</span> nrow,
-<a name="l00079"></a>00079              <span class="keywordtype">double</span>* pw,
-<a name="l00080"></a>00080              <span class="keywordtype">double</span>* pe
-<a name="l00081"></a>00081              );
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 cpl_table*
-<a name="l00086"></a>00086 sinfo_efficiency_compute(cpl_frame* frm_sci, 
-<a name="l00087"></a>00087                        cpl_frame* frm_cat,
-<a name="l00088"></a>00088                        cpl_frame* frm_atmext);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_efficiency.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004-2009 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Date: 2010/02/08 07:18:21 $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Revision: 1.9 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_UTL_EFFICIENCY_H_</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_EFFICIENCY_H_</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> sinfo_load_ref_table(cpl_frameset* frames, </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>                    <span class="keywordtype">double</span> dRA, </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>                    <span class="keywordtype">double</span> dDEC, </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>                    <span class="keywordtype">double</span> EPSILON, </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>                    cpl_table** pptable);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> cpl_table*</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> sinfo_utl_efficiency(</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>              cpl_frameset * frames,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>              <span class="keywordtype">double</span> dGain,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>              <span class="keywordtype">double</span> dEpsilon,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>              <span class="keywordtype">double</span> aimprim,</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                      <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>    );</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> cpl_table* </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> sinfo_utl_efficiency_internal(</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                   cpl_table* tbl_obj_spectrum,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                   cpl_table* tbl_atmext,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                   cpl_table* tbl_ref,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                   <span class="keywordtype">double</span> exptime,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                   <span class="keywordtype">double</span> airmass,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>                   <span class="keywordtype">double</span> aimprim,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>                   <span class="keywordtype">double</span> gain,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>                   <span class="keywordtype">int</span>    biny,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>                               <span class="keywordtype">double</span> src2ref_wave_sampling,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_wave,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_atm_abs,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_wave,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_flux,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_ref_bin,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_wave,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col_name_obj_flux</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>    );</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_data_interpolate(</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>              <span class="keywordtype">double</span> wav,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>              <span class="keywordtype">int</span> nrow,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>              <span class="keywordtype">double</span>* pw,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>              <span class="keywordtype">double</span>* pe</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>              );</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> cpl_table*</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> sinfo_efficiency_compute(cpl_frame* frm_sci, </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                        cpl_frame* frm_cat,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                        cpl_frame* frm_atmext);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__illumcorr_8c_source.html b/html/sinfo__utl__illumcorr_8c_source.html
index 15d10ca..18bfe7a 100644
--- a/html/sinfo__utl__illumcorr_8c_source.html
+++ b/html/sinfo__utl__illumcorr_8c_source.html
@@ -2,1944 +2,1975 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_illumcorr.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_illumcorr.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_illumcorr.c,v 1.18 2012/03/03 10:38:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.18 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *           Object Data reduction                              *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00036"></a>00036 <span class="comment">                                Includes</span>
-<a name="l00037"></a>00037 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/* std */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <strings.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <string.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <math.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <libgen.h></span>
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/* cpl */</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <cpl.h></span>  
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* irplib */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/* sinfoni */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_product_config.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_objnod_config.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_new_objnod.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_pro_save.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_hidden.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00067"></a>00067 <span class="preprocessor">#include <sinfo_rec_utils.h></span>
-<a name="l00068"></a>00068 <span class="comment">//Only for sinfo_propertylist_has</span>
-<a name="l00069"></a>00069 <span class="preprocessor">#include <sinfo_dfs.h></span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                            Function prototypes</span>
-<a name="l00074"></a>00074 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_create(cpl_plugin *plugin);
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_exec(cpl_plugin *plugin);
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_destroy(cpl_plugin *plugin);
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081 <span class="preprocessor">#define SINFO_DOUBLE_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>
-<a name="l00083"></a>00083 <span class="keyword">static</span> cpl_error_code 
-<a name="l00084"></a>00084 sinfo_tools_sort_double(
-<a name="l00085"></a>00085         <span class="keywordtype">double</span>  *   pix_arr,
-<a name="l00086"></a>00086         <span class="keywordtype">int</span>         n);
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="keyword">static</span> cpl_frame* 
-<a name="l00089"></a>00089 sinfo_get_dummy_object(cpl_frameset* obj_set);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00092"></a>00092 sinfo_illumcorr_config_add (cpl_parameterlist *list);
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00095"></a>00095 create_illumcorr (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, 
-<a name="l00096"></a>00096                  cpl_parameterlist *cpl_cfg, 
-<a name="l00097"></a>00097                  cpl_frameset* sof,
-<a name="l00098"></a>00098                  <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i);
-<a name="l00099"></a>00099 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00100"></a>00100 sinfo_illumcorr_create_bins (cpl_imagelist *sky, 
-<a name="l00101"></a>00101                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,
-<a name="l00102"></a>00102                  <span class="keywordtype">int</span> spec_bin, 
-<a name="l00103"></a>00103                  <span class="keywordtype">double</span> min_flux,
-<a name="l00104"></a>00104                  <span class="keywordtype">int</span> ** start,
-<a name="l00105"></a>00105                  <span class="keywordtype">int</span> ** end,
-<a name="l00106"></a>00106                  <span class="keywordtype">int</span> z1, <span class="keywordtype">int</span> z2);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00109"></a>00109 sinfo_juha_function1d_natural_spline(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, 
-<a name="l00110"></a>00110                                      <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00113"></a>00113 sinfo_function1d_search_value(<span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *) ;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 <span class="keyword">static</span> cpl_vector * 
-<a name="l00116"></a>00116 sinfo_vector_filter_median_create(<span class="keyword">const</span> cpl_vector * v, <span class="keywordtype">int</span>  hw);
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="keyword">static</span> cpl_vector * 
-<a name="l00119"></a>00119 sinfo_juha_vector_filter_median_create(<span class="keyword">const</span> cpl_vector * v, <span class="keywordtype">int</span>  hw);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l00122"></a>00122 sinfo_image_get_median_window  (<span class="keyword">const</span> cpl_image *image, 
-<a name="l00123"></a>00123                 <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury);
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00127"></a>00127 <span class="comment">                            Static variables</span>
-<a name="l00128"></a>00128 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description1[] =
-<a name="l00131"></a>00131 <span class="stringliteral">"This recipe calculates illumination correction based on sky emission.\n"</span>
-<a name="l00132"></a>00132 <span class="stringliteral">"The input files are sky (or object) frames tagged\n"</span>
-<a name="l00133"></a>00133 <span class="stringliteral">" SKY_NODDING (OBJECT_NODDING)\n"</span>
-<a name="l00134"></a>00134 <span class="stringliteral">"Master calibration frames:\n"</span>;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description2[] =
-<a name="l00138"></a>00138 <span class="stringliteral">"A corresponding (DIT) dark frame (tag=MASTER_DARK)"</span>
-<a name="l00139"></a>00139 <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image (tag=WAVE_MAP)\n"</span>
-<a name="l00140"></a>00140 <span class="stringliteral">"A corresponding (band,preoptics) master flat field (tag=MASTER_FLAT_LAMP)\n"</span>
-<a name="l00141"></a>00141 <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map (tag=MASTER_BP_MAP)\n"</span>
-<a name="l00142"></a>00142 <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame (tag=SLIT_POS)\n"</span>
-<a name="l00143"></a>00143 <span class="stringliteral">"A corresponding (band) distortion table (tag=DISTORTION)\n"</span>
-<a name="l00144"></a>00144 <span class="stringliteral">"A corresponding (band) slitlet distance table (tag=SLITLETS_DISTANCE)\n"</span>;
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description3[] =
-<a name="l00148"></a>00148 <span class="stringliteral">"The output is a cube resulting from the analysis of sky emission\n"</span>;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description4[] =
-<a name="l00152"></a>00152 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00153"></a>00153 <span class="stringliteral">"esorex --params sinfo_utl_illumcorr\n"</span>
-<a name="l00154"></a>00154 <span class="stringliteral">"esorex --help sinfo_utl_illumcorr\n"</span>
-<a name="l00155"></a>00155 <span class="stringliteral">"\n"</span>;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description[1300];
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00160"></a>00160 <span class="comment">                                Functions code</span>
-<a name="l00161"></a>00161 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00162"></a>00162 
-<a name="l00164"></a>00164 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00171"></a>00171 sinfo_utl_illumcorr_create(cpl_plugin *plugin)
-<a name="l00172"></a>00172 {
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174   <span class="comment">/*</span>
-<a name="l00175"></a>00175 <span class="comment">   * We have to provide the option we accept to the application.</span>
-<a name="l00176"></a>00176 <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span>
-<a name="l00177"></a>00177 <span class="comment">   * interface.</span>
-<a name="l00178"></a>00178 <span class="comment">   */</span>
-<a name="l00179"></a>00179   cpl_recipe *recipe = (cpl_recipe *)plugin;
-<a name="l00180"></a>00180   recipe->parameters = cpl_parameterlist_new();
-<a name="l00181"></a>00181   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00182"></a>00182     <span class="keywordflow">return</span> 1;
-<a name="l00183"></a>00183   }
-<a name="l00184"></a>00184   cpl_error_reset();
-<a name="l00185"></a>00185   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187   <span class="comment">/*</span>
-<a name="l00188"></a>00188 <span class="comment">   * Fill the parameter list.</span>
-<a name="l00189"></a>00189 <span class="comment">   */</span>
-<a name="l00190"></a>00190   sinfo_product_config_add (recipe->parameters);
-<a name="l00191"></a>00191   sinfo_prepare_stacked_frames_config_add(recipe->parameters);
-<a name="l00192"></a>00192   sinfo_objnod_config_add(recipe->parameters); 
-<a name="l00193"></a>00193   sinfo_illumcorr_config_add (recipe->parameters);
-<a name="l00194"></a>00194  
-<a name="l00195"></a>00195   <span class="keywordflow">return</span> 0;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00205"></a>00205 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00206"></a>00206 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00207"></a>00207 sinfo_utl_illumcorr_exec(cpl_plugin *plugin)
-<a name="l00208"></a>00208 {
-<a name="l00209"></a>00209  
-<a name="l00210"></a>00210   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00211"></a>00211   <span class="keywordtype">int</span> code=0;
-<a name="l00212"></a>00212   cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214   <span class="keywordflow">if</span>(recipe->parameters == NULL) {
-<a name="l00215"></a>00215     <span class="keywordflow">return</span> 1;
-<a name="l00216"></a>00216   }
-<a name="l00217"></a>00217   <span class="keywordflow">if</span>(recipe->frames == NULL) {
-<a name="l00218"></a>00218     <span class="keywordflow">return</span> 1;
-<a name="l00219"></a>00219   }
-<a name="l00220"></a>00220   code=sinfo_utl_illumcorr(recipe->parameters, recipe->frames);
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00223"></a>00223     <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00224"></a>00224 <span class="comment">       At this point the recipe cannot recover from the error */</span>           
-<a name="l00225"></a>00225     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00226"></a>00226   } 
-<a name="l00227"></a>00227   <span class="keywordflow">return</span> code;
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 }
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00238"></a>00238 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00239"></a>00239 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00240"></a>00240 sinfo_utl_illumcorr_destroy(cpl_plugin *plugin)
-<a name="l00241"></a>00241 {
-<a name="l00242"></a>00242   cpl_recipe *recipe = (cpl_recipe *) plugin;
-<a name="l00243"></a>00243   <span class="comment">/*</span>
-<a name="l00244"></a>00244 <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span>
-<a name="l00245"></a>00245 <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span>
-<a name="l00246"></a>00246 <span class="comment">   * called us, so that we must not touch it.</span>
-<a name="l00247"></a>00247 <span class="comment">   */</span>
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249   cpl_parameterlist_delete(recipe->parameters);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251   <span class="keywordflow">return</span> 0;
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253 }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00263"></a>00263 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00264"></a>00264 <span class="keywordtype">int</span>
-<a name="l00265"></a>00265 <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)
-<a name="l00266"></a>00266 {
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);
-<a name="l00269"></a>00269   cpl_plugin *plugin = &recipe->interface;
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271   strcpy(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description1);
-<a name="l00272"></a>00272   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description2);
-<a name="l00273"></a>00273   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description3);
-<a name="l00274"></a>00274   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description4);
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276   cpl_plugin_init(plugin,
-<a name="l00277"></a>00277           CPL_PLUGIN_API,
-<a name="l00278"></a>00278           SINFONI_BINARY_VERSION,
-<a name="l00279"></a>00279           CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00280"></a>00280           <span class="stringliteral">"sinfo_utl_illumcorr"</span>,
-<a name="l00281"></a>00281           <span class="stringliteral">"Object data reduction"</span>,
-<a name="l00282"></a>00282            sinfo_utl_illumcorr_description,
-<a name="l00283"></a>00283           <span class="stringliteral">"Juha Reunanen"</span>,
-<a name="l00284"></a>00284           <span class="stringliteral">"reunanen at strw.leidenuniv.nl"</span>,
-<a name="l00285"></a>00285           sinfo_get_license(),
-<a name="l00286"></a>00286           sinfo_utl_illumcorr_create,
-<a name="l00287"></a>00287           sinfo_utl_illumcorr_exec,
-<a name="l00288"></a>00288           sinfo_utl_illumcorr_destroy);
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290   cpl_pluginlist_append(list, plugin);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292   <span class="keywordflow">return</span> 0;
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294 }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296 <span class="comment">/*</span>
-<a name="l00297"></a>00297 <span class="comment"> * The actual recipe actually start here.</span>
-<a name="l00298"></a>00298 <span class="comment"> */</span>
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00301"></a>00301 sinfo_utl_illumcorr(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)
-<a name="l00302"></a>00302 {
-<a name="l00303"></a>00303   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   <span class="keywordtype">int</span> i=0;
-<a name="l00306"></a>00306   <span class="keywordtype">int</span> k=0;
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308   <span class="keywordtype">int</span> ind=0;
-<a name="l00309"></a>00309   <span class="keywordtype">int</span> nsky=0;
-<a name="l00310"></a>00310   <span class="keywordtype">int</span> nobj=0;
-<a name="l00311"></a>00311   <span class="keywordtype">int</span> ncdb=0;
-<a name="l00312"></a>00312   <span class="keywordtype">int</span> nstk=0;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314   cpl_frameset  * obj_set=NULL;
-<a name="l00315"></a>00315   cpl_frameset  * sky_set=NULL;
-<a name="l00316"></a>00316   cpl_frameset  * cdb_set=NULL;
-<a name="l00317"></a>00317   cpl_frameset  * wrk_set=NULL;
-<a name="l00318"></a>00318   cpl_frameset  * stk_set=NULL;
-<a name="l00319"></a>00319   cpl_frame     * sky_frm=NULL;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321   cpl_frame     * dup_frm=NULL; 
-<a name="l00322"></a>00322   cpl_frame     * cdb_frm=NULL;
-<a name="l00323"></a>00323   cpl_frame     * wrk_frm=NULL;
-<a name="l00324"></a>00324   cpl_frameset  * ref_set=NULL;
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326   cpl_frame     * dark_frm=NULL;
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328   fake* fk;
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331   cpl_image           *   ima1=NULL ;
-<a name="l00332"></a>00332   cpl_image           *   ima2=NULL ;
-<a name="l00333"></a>00333   cpl_image           *   resima=NULL ;
-<a name="l00334"></a>00334   cpl_propertylist    *   plist=NULL ;
-<a name="l00335"></a>00335   cpl_frame           *   product_frame=NULL;
-<a name="l00336"></a>00336   <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i=NULL;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338   <span class="comment">/* cpl_parameterlist_dump(config); */</span>
-<a name="l00339"></a>00339         sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00340"></a>00340         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {
-<a name="l00343"></a>00343     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00344"></a>00344     <span class="keywordflow">return</span> -1;
-<a name="l00345"></a>00345   }
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347   dark_frm = cpl_frameset_find(<span class="keyword">set</span>,PRO_MASTER_DARK);
-<a name="l00348"></a>00348   <span class="keywordflow">if</span> (dark_frm == NULL) {
-<a name="l00349"></a>00349     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find dark frame"</span>) ;
-<a name="l00350"></a>00350     <span class="keywordflow">return</span> (-1);
-<a name="l00351"></a>00351   }
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353   ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>);
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355   obj_set=cpl_frameset_new();
-<a name="l00356"></a>00356   sky_set=cpl_frameset_new();
-<a name="l00357"></a>00357   cdb_set=cpl_frameset_new();
-<a name="l00358"></a>00358   fk = sinfo_fake_new();
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360   sinfo_extract_obj_frames(<span class="keyword">set</span>,obj_set);
-<a name="l00361"></a>00361   sinfo_extract_sky_frames(<span class="keyword">set</span>,sky_set);
-<a name="l00362"></a>00362   sinfo_extract_mst_frames(<span class="keyword">set</span>,cdb_set);
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364   nobj=cpl_frameset_get_size(obj_set);
-<a name="l00365"></a>00365   nsky=cpl_frameset_get_size(sky_set);
-<a name="l00366"></a>00366   ncdb=cpl_frameset_get_size(cdb_set);
-<a name="l00367"></a>00367 
-<a name="l00368"></a>00368   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {
-<a name="l00369"></a>00369     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);
-<a name="l00370"></a>00370     cpl_frameset_delete(obj_set);
-<a name="l00371"></a>00371     cpl_frameset_delete(sky_set);
-<a name="l00372"></a>00372     cpl_frameset_delete(cdb_set);
-<a name="l00373"></a>00373     cpl_frameset_delete(ref_set);
-<a name="l00374"></a>00374     sinfo_fake_delete(&fk);
-<a name="l00375"></a>00375     <span class="keywordflow">return</span> (-1);
-<a name="l00376"></a>00376   }
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379   <span class="comment">/*</span>
-<a name="l00380"></a>00380 <span class="comment">   *  Create median collapsed sky frame either from real SKY frames, </span>
-<a name="l00381"></a>00381 <span class="comment">   *  or from jittered OBJECT frames</span>
-<a name="l00382"></a>00382 <span class="comment">   */</span>
-<a name="l00383"></a>00383   <span class="keywordflow">if</span> ( nsky != 0) {
-<a name="l00384"></a>00384     <span class="keywordflow">if</span>( (sky_frm = sinfo_get_dummy_object(sky_set)) == NULL) {
-<a name="l00385"></a>00385       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);
-<a name="l00386"></a>00386       cpl_frameset_delete(obj_set);
-<a name="l00387"></a>00387       cpl_frameset_delete(sky_set);
-<a name="l00388"></a>00388       cpl_frameset_delete(cdb_set);
-<a name="l00389"></a>00389       cpl_frameset_delete(ref_set);
-<a name="l00390"></a>00390       sinfo_fake_delete(&fk);
-<a name="l00391"></a>00391       <span class="keywordflow">return</span> (-1);
-<a name="l00392"></a>00392     }
-<a name="l00393"></a>00393   }
-<a name="l00394"></a>00394   <span class="keywordflow">else</span> {
-<a name="l00395"></a>00395     <span class="keywordflow">if</span>( (sky_frm = sinfo_get_dummy_object(obj_set)) == NULL) {
-<a name="l00396"></a>00396       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);
-<a name="l00397"></a>00397       cpl_frameset_delete(obj_set);
-<a name="l00398"></a>00398       cpl_frameset_delete(sky_set);
-<a name="l00399"></a>00399       cpl_frameset_delete(cdb_set);
-<a name="l00400"></a>00400       cpl_frameset_delete(ref_set);
-<a name="l00401"></a>00401       sinfo_fake_delete(&fk);
-<a name="l00402"></a>00402       <span class="keywordflow">return</span> (-1);
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404   }
-<a name="l00405"></a>00405   
-<a name="l00406"></a>00406   <span class="comment">/* </span>
-<a name="l00407"></a>00407 <span class="comment">   *  Seems it's not possible to use draks as sky (due to INS.GRAT1.ENC)</span>
-<a name="l00408"></a>00408 <span class="comment">   *  and stacking phase subtracts dark only in special circumstances...</span>
-<a name="l00409"></a>00409 <span class="comment">   */</span>
-<a name="l00410"></a>00410   ima1 = cpl_image_load(cpl_frame_get_filename(sky_frm),CPL_TYPE_FLOAT,0,0);
-<a name="l00411"></a>00411   ima2 = cpl_image_load(cpl_frame_get_filename(dark_frm),CPL_TYPE_FLOAT,0,0);
-<a name="l00412"></a>00412   resima = cpl_image_subtract_create(ima1, ima2);
-<a name="l00413"></a>00413   plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm), 0);
-<a name="l00414"></a>00414   cpl_image_delete(ima1);
-<a name="l00415"></a>00415   cpl_image_delete(ima2);
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417   product_frame = cpl_frame_new();
-<a name="l00418"></a>00418   cpl_frame_set_filename(product_frame, <span class="stringliteral">"out_fake_object2.fits"</span>) ;
-<a name="l00419"></a>00419   cpl_frame_set_tag(product_frame, <span class="stringliteral">"OBJECT_NODDING"</span>) ;
-<a name="l00420"></a>00420   cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
-<a name="l00421"></a>00421   cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_RAW) ;
-<a name="l00422"></a>00422   <span class="comment">//cpl_frame_set_level(product_frame, CPL_FR) ;</span>
-<a name="l00423"></a>00423   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0);
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425   cpl_image_save(resima, <span class="stringliteral">"out_fake_object2.fits"</span>, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00426"></a>00426          CPL_IO_DEFAULT) ;
-<a name="l00427"></a>00427   cpl_propertylist_delete(plist) ;
-<a name="l00428"></a>00428   cpl_image_delete(resima) ;
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431   <span class="comment">/*</span>
-<a name="l00432"></a>00432 <span class="comment">   *  Stack it - with some trickery...</span>
-<a name="l00433"></a>00433 <span class="comment">   */</span> 
-<a name="l00434"></a>00434   wrk_set=cpl_frameset_new();
-<a name="l00435"></a>00435 
-<a name="l00436"></a>00436   dup_frm=cpl_frame_duplicate(product_frame);
-<a name="l00437"></a>00437   cpl_frame_set_tag   (dup_frm, <span class="stringliteral">"OBJECT_NODDING"</span>);
-<a name="l00438"></a>00438   cpl_frame_set_group (dup_frm ,CPL_FRAME_GROUP_RAW);
-<a name="l00439"></a>00439   cpl_frameset_insert(wrk_set,dup_frm);
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441   <span class="comment">/* merge CDB frames to work set */</span>
-<a name="l00442"></a>00442   <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {
-<a name="l00443"></a>00443     cdb_frm=cpl_frameset_get_frame(cdb_set,k);
-<a name="l00444"></a>00444     dup_frm=cpl_frame_duplicate(cdb_frm);
-<a name="l00445"></a>00445     cpl_frameset_insert(wrk_set,dup_frm);
-<a name="l00446"></a>00446   }
-<a name="l00447"></a>00447   
-<a name="l00448"></a>00448   
-<a name="l00449"></a>00449   <span class="comment">/* defines a new name for the output stacked frame */</span> 
-<a name="l00450"></a>00450   sprintf(outname,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);
-<a name="l00451"></a>00451   <span class="keywordflow">if</span>(-1 == sinfo_new_stack_frames(config,wrk_set,
-<a name="l00452"></a>00452             PRO_OBJECT_NODDING_STACKED,i,fk,cpl_func)) {
-<a name="l00453"></a>00453     
-<a name="l00454"></a>00454     cpl_frameset_delete(wrk_set);
-<a name="l00455"></a>00455     <span class="comment">//cpl_frameset_delete(tot_set);</span>
-<a name="l00456"></a>00456     cpl_frameset_delete(obj_set);
-<a name="l00457"></a>00457     cpl_frameset_delete(sky_set);
-<a name="l00458"></a>00458     cpl_frameset_delete(cdb_set);
-<a name="l00459"></a>00459     cpl_frameset_delete(ref_set);
-<a name="l00460"></a>00460     sinfo_fake_delete(&fk);
-<a name="l00461"></a>00461     <span class="keywordflow">return</span> -1;
-<a name="l00462"></a>00462   }
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464   stk_set=cpl_frameset_new();
-<a name="l00465"></a>00465   sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);
-<a name="l00466"></a>00466   nstk=cpl_frameset_get_size(stk_set);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468   <span class="keywordflow">for</span>(k=0;k<nstk;k++) {
-<a name="l00469"></a>00469     wrk_frm=cpl_frameset_get_frame(stk_set,k);
-<a name="l00470"></a>00470     dup_frm = cpl_frame_duplicate(wrk_frm);
-<a name="l00471"></a>00471     cpl_frameset_insert(<span class="keyword">set</span>,dup_frm);
-<a name="l00472"></a>00472   }
-<a name="l00473"></a>00473   cpl_frameset_delete(stk_set);
-<a name="l00474"></a>00474   cpl_frameset_delete(wrk_set);
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00477"></a>00477   sinfo_msg(<span class="stringliteral">"CREATING SKY CUBE"</span>);
-<a name="l00478"></a>00478   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00479"></a>00479   
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481   <span class="keywordflow">if</span> ( -1 == (ind=sinfo_new_objnod(cpl_func,config, <span class="keyword">set</span>, PRO_COADD_OBJ ) ) ) {
-<a name="l00482"></a>00482     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NODDING SCIENCE FRAMES no. %d\n"</span>, ind) ;
-<a name="l00483"></a>00483     cpl_frameset_delete(obj_set);
-<a name="l00484"></a>00484     cpl_frameset_delete(sky_set);
-<a name="l00485"></a>00485     cpl_frameset_delete(cdb_set);
-<a name="l00486"></a>00486     cpl_frameset_delete(ref_set);
-<a name="l00487"></a>00487     sinfo_fake_delete(&fk);
-<a name="l00488"></a>00488     
-<a name="l00489"></a>00489     <span class="keywordflow">return</span> (-1);
-<a name="l00490"></a>00490   }
-<a name="l00491"></a>00491   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00492"></a>00492   sinfo_msg(<span class="stringliteral">"CREATED SKY CUBE"</span>);
-<a name="l00493"></a>00493   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; 
-<a name="l00494"></a>00494   
-<a name="l00495"></a>00495 
-<a name="l00496"></a>00496   stk_set=cpl_frameset_new();
-<a name="l00497"></a>00497   sinfo_contains_frames_kind(<span class="keyword">set</span>, stk_set, PRO_OBS_OBJ);
-<a name="l00498"></a>00498   nstk=cpl_frameset_get_size(stk_set);
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500   wrk_frm=cpl_frameset_get_frame(stk_set,0);  
-<a name="l00501"></a>00501   name_i = cpl_frame_get_filename(wrk_frm);
-<a name="l00502"></a>00502   
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504   <span class="comment">//cpl_frameset_delete(wrk_set);</span>
-<a name="l00505"></a>00505   cpl_frameset_delete(obj_set);
-<a name="l00506"></a>00506   cpl_frameset_delete(sky_set);
-<a name="l00507"></a>00507   cpl_frameset_delete(cdb_set);
-<a name="l00508"></a>00508   cpl_frameset_delete(ref_set);
-<a name="l00509"></a>00509   sinfo_fake_delete(&fk);
-<a name="l00510"></a>00510   cpl_frame_delete(sky_frm);
-<a name="l00511"></a>00511   create_illumcorr (cpl_func, config, <span class="keyword">set</span>, name_i);
-<a name="l00512"></a>00512 
-<a name="l00513"></a>00513   <span class="keywordflow">return</span> (0);
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515 }
-<a name="l00516"></a>00516 
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518 <span class="keyword">static</span> cpl_frame*
-<a name="l00519"></a>00519 sinfo_get_dummy_object(cpl_frameset* obj_set)
-<a name="l00520"></a>00520 {
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522   cpl_imagelist* obj_list=NULL;
-<a name="l00523"></a>00523   cpl_image* fake_object=NULL;
-<a name="l00524"></a>00524   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];
-<a name="l00525"></a>00525   cpl_frame* frame=NULL;
-<a name="l00526"></a>00526   cpl_frame* object_frame=NULL;
-<a name="l00527"></a>00527 
-<a name="l00528"></a>00528   cpl_propertylist* plist=NULL;
-<a name="l00529"></a>00529  
-<a name="l00530"></a>00530   obj_list = cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0);
-<a name="l00531"></a>00531   fake_object = cpl_imagelist_collapse_median_create(obj_list);
-<a name="l00532"></a>00532 
-<a name="l00533"></a>00533   frame = cpl_frameset_get_frame(obj_set,0);
-<a name="l00534"></a>00534   strcpy(filename,cpl_frame_get_filename(frame));
-<a name="l00535"></a>00535  
-<a name="l00536"></a>00536   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {
-<a name="l00537"></a>00537     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"getting header from reference ima frame %s"</span>,filename);
-<a name="l00538"></a>00538     cpl_propertylist_delete(plist) ;
-<a name="l00539"></a>00539     <span class="keywordflow">return</span> NULL ;
-<a name="l00540"></a>00540   }
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
-<a name="l00543"></a>00543     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"OBJECT"</span>);
-<a name="l00544"></a>00544   } <span class="keywordflow">else</span> {
-<a name="l00545"></a>00545     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"OBJECT"</span>) ;
-<a name="l00546"></a>00546   }
-<a name="l00547"></a>00547        
-<a name="l00548"></a>00548   <span class="keywordflow">if</span> (cpl_image_save(fake_object, <span class="stringliteral">"out_fake_object.fits"</span>, CPL_BPP_IEEE_FLOAT, 
-<a name="l00549"></a>00549                    plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {
-<a name="l00550"></a>00550     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot save the product %s"</span>,<span class="stringliteral">"out_fake_object.fits"</span>);
-<a name="l00551"></a>00551     cpl_propertylist_delete(plist) ;
-<a name="l00552"></a>00552     <span class="keywordflow">return</span> NULL ;
-<a name="l00553"></a>00553   }
-<a name="l00554"></a>00554   cpl_propertylist_delete(plist);
-<a name="l00555"></a>00555        
-<a name="l00556"></a>00556   object_frame = cpl_frame_new() ;
-<a name="l00557"></a>00557   cpl_frame_set_filename(object_frame, <span class="stringliteral">"out_fake_object.fits"</span>) ;
-<a name="l00558"></a>00558   cpl_frame_set_tag(object_frame, <span class="stringliteral">"OBJECT"</span>) ;
-<a name="l00559"></a>00559   cpl_frame_set_type(object_frame, CPL_FRAME_TYPE_IMAGE);
-<a name="l00560"></a>00560   <span class="comment">/*</span>
-<a name="l00561"></a>00561 <span class="comment">  cpl_frame_set_group(object_frame, CPL_FRAME_GROUP_PRODUCT);</span>
-<a name="l00562"></a>00562 <span class="comment">  */</span>
-<a name="l00563"></a>00563   cpl_frame_set_level(object_frame, CPL_FRAME_LEVEL_FINAL);
-<a name="l00564"></a>00564   cpl_image_delete(fake_object);
-<a name="l00565"></a>00565   cpl_imagelist_delete(obj_list);
-<a name="l00566"></a>00566 
-<a name="l00567"></a>00567   <span class="keywordflow">return</span> object_frame;
-<a name="l00568"></a>00568 }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00571"></a>00571 sinfo_illumcorr_config_add (cpl_parameterlist *list) 
-<a name="l00572"></a>00572 {
-<a name="l00573"></a>00573   cpl_parameter *p;
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575   <span class="keywordflow">if</span> (!list) {
-<a name="l00576"></a>00576     <span class="keywordflow">return</span>;
-<a name="l00577"></a>00577   }
-<a name="l00578"></a>00578 
-<a name="l00579"></a>00579   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.spec_bin"</span>,
-<a name="l00580"></a>00580                               CPL_TYPE_INT,
-<a name="l00581"></a>00581                               <span class="stringliteral">"Number of spectral planes to be combined "</span>,
-<a name="l00582"></a>00582                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00583"></a>00583                               100, 1, 200);
-<a name="l00584"></a>00584   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-spec_bin"</span>);
-<a name="l00585"></a>00585   cpl_parameterlist_append(list, p);
-<a name="l00586"></a>00586 
-<a name="l00587"></a>00587   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.min_flux"</span>,
-<a name="l00588"></a>00588                               CPL_TYPE_DOUBLE,
-<a name="l00589"></a>00589                               <span class="stringliteral">"Minimum flux in each spectral bin "</span>,
-<a name="l00590"></a>00590                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00591"></a>00591                               0.0);
-<a name="l00592"></a>00592   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-min_flux"</span>);
-<a name="l00593"></a>00593   cpl_parameterlist_append(list, p);
-<a name="l00594"></a>00594 
-<a name="l00595"></a>00595   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.center_bins"</span>,
-<a name="l00596"></a>00596                               CPL_TYPE_BOOL,
-<a name="l00597"></a>00597                               <span class="stringliteral">"Center the spectral bins at prominent "</span>
-<a name="l00598"></a>00598                               <span class="stringliteral">"emission features "</span>,
-<a name="l00599"></a>00599                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00600"></a>00600                               FALSE);
-<a name="l00601"></a>00601   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-center_bins"</span>);
-<a name="l00602"></a>00602   cpl_parameterlist_append(list, p);
-<a name="l00603"></a>00603 
-<a name="l00604"></a>00604   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.illumcorr.order"</span>,
-<a name="l00605"></a>00605                  CPL_TYPE_INT,
-<a name="l00606"></a>00606                  <span class="stringliteral">"The order of the polynomial to be fitted "</span>
-<a name="l00607"></a>00607                              <span class="stringliteral">"for each slitlet"</span>,
-<a name="l00608"></a>00608                  <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00609"></a>00609                  0,
-<a name="l00610"></a>00610                  2,0,1);
-<a name="l00611"></a>00611   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-order"</span>);
-<a name="l00612"></a>00612   cpl_parameterlist_append(list, p);
-<a name="l00613"></a>00613   
-<a name="l00614"></a>00614   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.sigma"</span>,
-<a name="l00615"></a>00615                               CPL_TYPE_DOUBLE,
-<a name="l00616"></a>00616                               <span class="stringliteral">"Reject n-sigma deviant pixels on each slitlet "</span>,
-<a name="l00617"></a>00617                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00618"></a>00618                               3.0);
-<a name="l00619"></a>00619   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-sigma"</span>);
-<a name="l00620"></a>00620   cpl_parameterlist_append(list, p);
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.iterations"</span>,
-<a name="l00623"></a>00623                               CPL_TYPE_INT,
-<a name="l00624"></a>00624                               <span class="stringliteral">"Number of sigma rejection iterations to run "</span>,
-<a name="l00625"></a>00625                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00626"></a>00626                               3);
-<a name="l00627"></a>00627   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-iter"</span>);
-<a name="l00628"></a>00628   cpl_parameterlist_append(list, p);
-<a name="l00629"></a>00629 
-<a name="l00630"></a>00630   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.llx"</span>,
-<a name="l00631"></a>00631                               CPL_TYPE_INT,
-<a name="l00632"></a>00632                               <span class="stringliteral">"Reference region coordinates "</span>,
-<a name="l00633"></a>00633                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00634"></a>00634                               8, 0, 63);
-<a name="l00635"></a>00635   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-llx"</span>);
-<a name="l00636"></a>00636   cpl_parameterlist_append(list, p);
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.lly"</span>,
-<a name="l00639"></a>00639                               CPL_TYPE_INT,
-<a name="l00640"></a>00640                               <span class="stringliteral">"Reference region coordinates "</span>,
-<a name="l00641"></a>00641                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00642"></a>00642                               33, 0, 63);
-<a name="l00643"></a>00643   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-lly"</span>);
-<a name="l00644"></a>00644   cpl_parameterlist_append(list, p);
-<a name="l00645"></a>00645 
-<a name="l00646"></a>00646   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.urx"</span>,
-<a name="l00647"></a>00647                               CPL_TYPE_INT,
-<a name="l00648"></a>00648                               <span class="stringliteral">"Reference region coordinates "</span>,
-<a name="l00649"></a>00649                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00650"></a>00650                               60, 0, 63);
-<a name="l00651"></a>00651   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-urx"</span>);
-<a name="l00652"></a>00652   cpl_parameterlist_append(list, p);
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.ury"</span>,
-<a name="l00655"></a>00655                               CPL_TYPE_INT,
-<a name="l00656"></a>00656                               <span class="stringliteral">"Reference region coordinates "</span>,
-<a name="l00657"></a>00657                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00658"></a>00658                               36, 0, 63);
-<a name="l00659"></a>00659   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-ury"</span>);
-<a name="l00660"></a>00660   cpl_parameterlist_append(list, p);
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.illumcorr.smooth0"</span>,
-<a name="l00663"></a>00663                  CPL_TYPE_INT,
-<a name="l00664"></a>00664                  <span class="stringliteral">"Smooth zeroth order terms by fitting "</span>
-<a name="l00665"></a>00665                              <span class="stringliteral">"with polynomial (1),"</span>
-<a name="l00666"></a>00666                  <span class="stringliteral">"with median filter (2) or not (0) "</span>,
-<a name="l00667"></a>00667                  <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00668"></a>00668                  0, 
-<a name="l00669"></a>00669                  3, 0, 1, 2);
-<a name="l00670"></a>00670   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth0"</span>);
-<a name="l00671"></a>00671   cpl_parameterlist_append(list, p);
-<a name="l00672"></a>00672 
-<a name="l00673"></a>00673   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth0_order"</span>,
-<a name="l00674"></a>00674                               CPL_TYPE_INT,
-<a name="l00675"></a>00675                               <span class="stringliteral">"Order of the smoothing polynomial for 0th term"</span>,
-<a name="l00676"></a>00676                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00677"></a>00677                               2);
-<a name="l00678"></a>00678   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth_order0"</span>);
-<a name="l00679"></a>00679   cpl_parameterlist_append(list, p);
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.smooth0_size"</span>,
-<a name="l00682"></a>00682                               CPL_TYPE_INT,
-<a name="l00683"></a>00683                               <span class="stringliteral">"Size of the median filter for 0th "</span>
-<a name="l00684"></a>00684                               <span class="stringliteral">"order smoothing "</span>,
-<a name="l00685"></a>00685                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00686"></a>00686                               51,3, 301);
-<a name="l00687"></a>00687   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth0_size"</span>);
-<a name="l00688"></a>00688   cpl_parameterlist_append(list, p);
-<a name="l00689"></a>00689 
-<a name="l00690"></a>00690   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth1"</span>,
-<a name="l00691"></a>00691                               CPL_TYPE_BOOL,
-<a name="l00692"></a>00692                               <span class="stringliteral">"Smooth higher (>0) order polynomials "</span>,
-<a name="l00693"></a>00693                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00694"></a>00694                               TRUE);
-<a name="l00695"></a>00695   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth"</span>);
-<a name="l00696"></a>00696   cpl_parameterlist_append(list, p);
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth1_order"</span>,
-<a name="l00699"></a>00699                               CPL_TYPE_INT,
-<a name="l00700"></a>00700                               <span class="stringliteral">"Smoothing order for higher terms "</span>,
-<a name="l00701"></a>00701                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00702"></a>00702                               2);
-<a name="l00703"></a>00703   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth_order"</span>);
-<a name="l00704"></a>00704   cpl_parameterlist_append(list, p);
-<a name="l00705"></a>00705 
-<a name="l00706"></a>00706   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.illumcorr_sigma"</span>,
-<a name="l00707"></a>00707                               CPL_TYPE_DOUBLE,
-<a name="l00708"></a>00708                               <span class="stringliteral">"Reject all fits for which the rms is "</span>
-<a name="l00709"></a>00709                               <span class="stringliteral">"illumcorr-sigma times bigger than the "</span>
-<a name="l00710"></a>00710                               <span class="stringliteral">"median rms in each spectral bin"</span> ,
-<a name="l00711"></a>00711                               <span class="stringliteral">"sinfoni.illumcorr"</span>,
-<a name="l00712"></a>00712                               5.0);
-<a name="l00713"></a>00713   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,
-<a name="l00714"></a>00714                             <span class="stringliteral">"illumcorr-illumcorr_sigma"</span>);
-<a name="l00715"></a>00715   cpl_parameterlist_append(list, p);
-<a name="l00716"></a>00716 
-<a name="l00717"></a>00717 }
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00720"></a>00720 create_illumcorr (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,
-<a name="l00721"></a>00721           cpl_parameterlist *cpl_cfg,
-<a name="l00722"></a>00722           cpl_frameset* sof,
-<a name="l00723"></a>00723           <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i)
-<a name="l00724"></a>00724 {
-<a name="l00725"></a>00725   cpl_parameter *p=NULL;
-<a name="l00726"></a>00726   <span class="keywordtype">double</span>        min_flux=0;
-<a name="l00727"></a>00727   <span class="keywordtype">double</span>        sigma=0;
-<a name="l00728"></a>00728   <span class="keywordtype">double</span>        il_sigma=0;
-<a name="l00729"></a>00729   <span class="keywordtype">int</span>           spec_bin=0;
-<a name="l00730"></a>00730   <span class="keywordtype">int</span>           _order=0;
-<a name="l00731"></a>00731   cpl_imagelist *sky=NULL;
-<a name="l00732"></a>00732   cpl_imagelist *binnedsky=NULL;
-<a name="l00733"></a>00733   cpl_imagelist *result=NULL;
-<a name="l00734"></a>00734   cpl_image     *temp_image=NULL;
-<a name="l00735"></a>00735   cpl_image     *temp_image2=NULL;
-<a name="l00736"></a>00736   <span class="keywordtype">int</span>            nplanes=0;
-<a name="l00737"></a>00737   <span class="keywordtype">int</span>            i=0;
-<a name="l00738"></a>00738   <span class="keywordtype">int</span>            j=0;
-<a name="l00739"></a>00739   <span class="keywordtype">int</span>            k=0;
-<a name="l00740"></a>00740   <span class="keywordtype">int</span>            kk=0;
-<a name="l00741"></a>00741   <span class="keywordtype">int</span>            n=0;
-<a name="l00742"></a>00742   <span class="keywordtype">int</span>            slitlet=0;
-<a name="l00743"></a>00743   <span class="keywordtype">int</span>            bin=0;
-<a name="l00744"></a>00744   <span class="keywordtype">double</span>        *median=NULL;
-<a name="l00745"></a>00745   <span class="keywordtype">double</span>        *pos=NULL;
-<a name="l00746"></a>00746   <span class="keywordtype">double</span>         temp=0;
-<a name="l00747"></a>00747   <span class="keywordtype">double</span>         temp2=0;
-<a name="l00748"></a>00748   <span class="keywordtype">double</span>        *inter_pos=NULL;
-<a name="l00749"></a>00749   <span class="keywordtype">double</span>        *inter_val=NULL;
-<a name="l00750"></a>00750   <span class="keywordtype">double</span>        *plane_pos=NULL;
-<a name="l00751"></a>00751   <span class="keywordtype">double</span>        *plane_val=NULL;
-<a name="l00752"></a>00752   <span class="keywordtype">int</span>            llx=0;
-<a name="l00753"></a>00753   <span class="keywordtype">int</span>            lly=0;
-<a name="l00754"></a>00754   <span class="keywordtype">int</span>            urx=0;
-<a name="l00755"></a>00755   <span class="keywordtype">int</span>            ury=0;
-<a name="l00756"></a>00756   <span class="keywordtype">int</span>            smooth_order=0;
-<a name="l00757"></a>00757   <span class="keywordtype">int</span>            iter=0;
-<a name="l00758"></a>00758   cpl_vector    *row=NULL;
-<a name="l00759"></a>00759   cpl_vector    *model=NULL;
-<a name="l00760"></a>00760   cpl_vector    *xpos=NULL;
-<a name="l00761"></a>00761   cpl_vector    *tempvector=NULL;
-<a name="l00762"></a>00762   cpl_vector *tempvector2=NULL;
-<a name="l00763"></a>00763   <span class="keywordtype">double</span>         mse=0.0;
-<a name="l00764"></a>00764   <span class="keywordtype">double</span>         stddev=0.0;
-<a name="l00765"></a>00765   cpl_polynomial*poly=NULL;
-<a name="l00766"></a>00766   cpl_polynomial *poly2=NULL;
-<a name="l00767"></a>00767   <span class="keywordtype">double</span>        *temparray=NULL;
-<a name="l00768"></a>00768   <span class="keywordtype">double</span>  *tempxarray=NULL;
-<a name="l00769"></a>00769   <span class="keywordtype">double</span>  * tempsarray=NULL;
-<a name="l00770"></a>00770   cpl_polynomial**coeffs=NULL;
-<a name="l00771"></a>00771   <span class="keywordtype">float</span>         *data=NULL;
-<a name="l00772"></a>00772   <span class="keywordtype">double</span>        *rms_values=NULL;
-<a name="l00773"></a>00773   <span class="keywordtype">double</span>         rms_array[32];
-<a name="l00774"></a>00774   <span class="keywordtype">int</span> smooth=0;
-<a name="l00775"></a>00775   <span class="keywordtype">int</span> smooth0=0;
-<a name="l00776"></a>00776   <span class="keywordtype">int</span> smooth_order0=0;
-<a name="l00777"></a>00777   <span class="keywordtype">int</span> smooth_size0=0;
-<a name="l00778"></a>00778   <span class="keywordtype">int</span> center_bins = 0;
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780   <span class="keywordtype">int</span> *bin_start=NULL;
-<a name="l00781"></a>00781   <span class="keywordtype">int</span> *bin_end=NULL;
-<a name="l00782"></a>00782   <span class="keywordtype">int</span> z1=0;
-<a name="l00783"></a>00783   <span class="keywordtype">int</span> z2=0;
-<a name="l00784"></a>00784   <span class="keywordtype">int</span> nbins=0;
-<a name="l00785"></a>00785 
-<a name="l00786"></a>00786   FILE          *dumpfile=NULL;
-<a name="l00787"></a>00787 
-<a name="l00788"></a>00788   <span class="keywordtype">int</span> order[32];
-<a name="l00789"></a>00789   <span class="keywordtype">int</span> ok[64];
-<a name="l00790"></a>00790   <span class="keywordtype">int</span> nbad=0;
-<a name="l00791"></a>00791 
-<a name="l00792"></a>00792 
-<a name="l00793"></a>00793   <span class="comment">/*</span>
-<a name="l00794"></a>00794 <span class="comment">   *  Get parameters</span>
-<a name="l00795"></a>00795 <span class="comment">   */</span>
-<a name="l00796"></a>00796   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.spec_bin"</span>);
-<a name="l00797"></a>00797   spec_bin = cpl_parameter_get_int(p);
-<a name="l00798"></a>00798   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.min_flux"</span>);
-<a name="l00799"></a>00799   min_flux =  cpl_parameter_get_double(p);
-<a name="l00800"></a>00800   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.order"</span>);
-<a name="l00801"></a>00801   _order = cpl_parameter_get_int(p);
-<a name="l00802"></a>00802   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.sigma"</span>);
-<a name="l00803"></a>00803   sigma = cpl_parameter_get_double(p);
-<a name="l00804"></a>00804   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.llx"</span>);
-<a name="l00805"></a>00805   llx = cpl_parameter_get_int(p);
-<a name="l00806"></a>00806   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.lly"</span>);
-<a name="l00807"></a>00807   lly = cpl_parameter_get_int(p);
-<a name="l00808"></a>00808   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.urx"</span>);
-<a name="l00809"></a>00809   urx = cpl_parameter_get_int(p);
-<a name="l00810"></a>00810   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.ury"</span>);
-<a name="l00811"></a>00811   ury = cpl_parameter_get_int(p);
-<a name="l00812"></a>00812   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.illumcorr_sigma"</span>);
-<a name="l00813"></a>00813   il_sigma = cpl_parameter_get_double(p);
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0"</span>);
-<a name="l00816"></a>00816   smooth0 = cpl_parameter_get_int (p);
-<a name="l00817"></a>00817   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0_order"</span>);
-<a name="l00818"></a>00818   smooth_order0 = cpl_parameter_get_int (p);
-<a name="l00819"></a>00819   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0_size"</span>);
-<a name="l00820"></a>00820   smooth_size0 = cpl_parameter_get_int (p);
-<a name="l00821"></a>00821 
-<a name="l00822"></a>00822   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth1"</span>);
-<a name="l00823"></a>00823   smooth = cpl_parameter_get_bool (p);
-<a name="l00824"></a>00824   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth1_order"</span>);
-<a name="l00825"></a>00825   smooth_order = cpl_parameter_get_int (p);
-<a name="l00826"></a>00826 
-<a name="l00827"></a>00827   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.iterations"</span>);
-<a name="l00828"></a>00828   iter = cpl_parameter_get_int (p);
-<a name="l00829"></a>00829 
-<a name="l00830"></a>00830   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.center_bins"</span>);
-<a name="l00831"></a>00831   center_bins = cpl_parameter_get_bool (p);
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833 <span class="comment">/*   cpl_msg_set_level(CPL_MSG_DEBUG); */</span>
-<a name="l00834"></a>00834 
-<a name="l00835"></a>00835   <span class="comment">/*</span>
-<a name="l00836"></a>00836 <span class="comment">   *  Allocate resources</span>
-<a name="l00837"></a>00837 <span class="comment">   */</span>
-<a name="l00838"></a>00838   sky       = cpl_imagelist_load(name_i, CPL_TYPE_FLOAT, 0);
-<a name="l00839"></a>00839   nplanes   = cpl_imagelist_get_size(sky);
-<a name="l00840"></a>00840 
-<a name="l00841"></a>00841   <span class="comment">/*  Determine the start and end points of data within the </span>
-<a name="l00842"></a>00842 <span class="comment">   *  reference region  */</span>     
-<a name="l00843"></a>00843   z1 = 0;
-<a name="l00844"></a>00844   z2=nplanes -1;
-<a name="l00845"></a>00845   <span class="keywordflow">while</span> (z1<nplanes 
-<a name="l00846"></a>00846      && isnan(cpl_image_get_mean_window(cpl_imagelist_get(sky, z1),
-<a name="l00847"></a>00847                         llx, lly, urx, ury)))
-<a name="l00848"></a>00848     z1++;
-<a name="l00849"></a>00849   <span class="keywordflow">while</span> (z2>=0
-<a name="l00850"></a>00850      && isnan(cpl_image_get_mean_window(cpl_imagelist_get(sky, z2),
-<a name="l00851"></a>00851                         llx, lly, urx, ury)))
-<a name="l00852"></a>00852     z2--;
-<a name="l00853"></a>00853   z1 += 2;
-<a name="l00854"></a>00854   z2 -= 2;
-<a name="l00855"></a>00855   <span class="keywordflow">if</span> (z1>=nplanes || z2 <0 || z2<=z1) {
-<a name="l00856"></a>00856     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Start z = %d, end z = %d"</span>, z1, z2);
-<a name="l00857"></a>00857     cpl_imagelist_delete (sky);
-<a name="l00858"></a>00858     <span class="keywordflow">return</span> (-1);
-<a name="l00859"></a>00859   }
-<a name="l00860"></a>00860   sinfo_msg (<span class="stringliteral">"Start z = %d, end z = %d"</span>, z1, z2);
-<a name="l00861"></a>00861 
-<a name="l00862"></a>00862   binnedsky = cpl_imagelist_new ();
-<a name="l00863"></a>00863   median    = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00864"></a>00864   pos       = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00865"></a>00865   temparray = (<span class="keywordtype">double</span>*) cpl_calloc(64, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00866"></a>00866   tempxarray= (<span class="keywordtype">double</span>*) cpl_calloc(64, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00867"></a>00867   tempsarray= (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00868"></a>00868   plane_pos = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00869"></a>00869   plane_val = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00870"></a>00870   coeffs    = (cpl_polynomial**) cpl_calloc(32*(nplanes/spec_bin), 
-<a name="l00871"></a>00871                         <span class="keyword">sizeof</span>(cpl_polynomial*));
-<a name="l00872"></a>00872   rms_values= (<span class="keywordtype">double</span>*) cpl_calloc (32*(nplanes/spec_bin), <span class="keyword">sizeof</span> (double));
-<a name="l00873"></a>00873   inter_pos = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00874"></a>00874   inter_val = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00875"></a>00875 
-<a name="l00876"></a>00876   model     = cpl_vector_new(64);
-<a name="l00877"></a>00877   xpos      = cpl_vector_new(64);
-<a name="l00878"></a>00878 
-<a name="l00879"></a>00879   <span class="keywordflow">for</span> (i=0; i<64; i++)
-<a name="l00880"></a>00880     cpl_vector_set(xpos, i, (<span class="keywordtype">double</span>)(i)-((<span class="keywordtype">double</span>)urx-(<span class="keywordtype">double</span>)llx)/2.0);
-<a name="l00881"></a>00881   <span class="keywordflow">for</span> (i=0; i<nplanes; i++)
-<a name="l00882"></a>00882     inter_pos[i] = (<span class="keywordtype">double</span>)i;
-<a name="l00883"></a>00883 
-<a name="l00884"></a>00884   <span class="comment">/*</span>
-<a name="l00885"></a>00885 <span class="comment">   *  This array could be given as input file for the recipe.</span>
-<a name="l00886"></a>00886 <span class="comment">   *  Generally, 0th order fitting is sufficient (and of course</span>
-<a name="l00887"></a>00887 <span class="comment">   *  more robust), but few slitlets might require 1st order.</span>
-<a name="l00888"></a>00888 <span class="comment">   */</span>
-<a name="l00889"></a>00889   <span class="keywordflow">for</span> (i=0; i<32; i++)
-<a name="l00890"></a>00890     order[i] = _order;
-<a name="l00891"></a>00891 
-<a name="l00892"></a>00892 
-<a name="l00893"></a>00893   <span class="keywordflow">if</span> (center_bins == 1) {
-<a name="l00894"></a>00894     sinfo_msg(<span class="stringliteral">"Using centering on emission features\n"</span>);
-<a name="l00895"></a>00895     nbins = sinfo_illumcorr_create_bins (sky,llx, lly, urx, ury,
-<a name="l00896"></a>00896                      spec_bin, min_flux,
-<a name="l00897"></a>00897                      &bin_start, &bin_end,
-<a name="l00898"></a>00898                      z1, z2);
-<a name="l00899"></a>00899   }
-<a name="l00900"></a>00900   <span class="keywordflow">else</span> {
-<a name="l00901"></a>00901     sinfo_msg(<span class="stringliteral">"Using simple spectral binning - "</span>
-<a name="l00902"></a>00902           <span class="stringliteral">"not centering on emission features\n"</span>);
-<a name="l00903"></a>00903     nbins = (z2-z1)/spec_bin;
-<a name="l00904"></a>00904     bin_start = (<span class="keywordtype">int</span>*)cpl_calloc(nbins+1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00905"></a>00905     bin_end =  (<span class="keywordtype">int</span>*)cpl_calloc(nbins+1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l00906"></a>00906     <span class="keywordflow">for</span> (i = 0; i<nbins; i++) {
-<a name="l00907"></a>00907       bin_start[i] = z1+i*spec_bin;
-<a name="l00908"></a>00908       bin_end[i]   = z1+(i+1)*spec_bin - 1;
-<a name="l00909"></a>00909     }
-<a name="l00910"></a>00910     <span class="keywordflow">if</span> (bin_end[nbins-1]<z2-spec_bin/10) {
-<a name="l00911"></a>00911       bin_start[nbins] = bin_end[nbins-1]+1;
-<a name="l00912"></a>00912       bin_end[nbins] = z2;
-<a name="l00913"></a>00913       nbins++;
-<a name="l00914"></a>00914     }
-<a name="l00915"></a>00915   }
-<a name="l00916"></a>00916   
-<a name="l00917"></a>00917   <span class="comment">/*</span>
-<a name="l00918"></a>00918 <span class="comment">   *  - bin the cube in spectral direction</span>
-<a name="l00919"></a>00919 <span class="comment">   *  - calculate the median (=reference value) in region </span>
-<a name="l00920"></a>00920 <span class="comment">   *    (llx,lly) - (urx,ury)</span>
-<a name="l00921"></a>00921 <span class="comment">   *  - calculate the weighted position of the each spectral bin</span>
-<a name="l00922"></a>00922 <span class="comment">   */</span>
-<a name="l00923"></a>00923   sinfo_msg(<span class="stringliteral">"Binning the cube and calculating statistics\n"</span>);
-<a name="l00924"></a>00924   <span class="keywordflow">for</span> (i=0; i<nbins; i++) {
-<a name="l00925"></a>00925     temp_image = cpl_image_duplicate(cpl_imagelist_get(sky, bin_start[i]));
-<a name="l00926"></a>00926     median[i] = sinfo_image_get_median_window (temp_image, llx, lly, urx, ury);
-<a name="l00927"></a>00927     pos[i] = median[i] * (double)bin_start[i];
-<a name="l00928"></a>00928     cpl_imagelist_set (binnedsky, temp_image, i);
-<a name="l00929"></a>00929     <span class="keywordflow">for</span> (j=bin_start[i]+1; j<bin_end[i]; j++) {
-<a name="l00930"></a>00930       temp_image2 = cpl_imagelist_get (sky, j);
-<a name="l00931"></a>00931       cpl_image_add (temp_image, temp_image2);
-<a name="l00932"></a>00932       temp = sinfo_image_get_median_window (temp_image2, llx, lly, urx, ury);
-<a name="l00933"></a>00933       median[i] = median[i] + temp;
-<a name="l00934"></a>00934       pos[i] = pos[i] + temp*(double)j;
-<a name="l00935"></a>00935     }
-<a name="l00936"></a>00936     temp2 =(double)(bin_end[i]-bin_start[i]+1);
-<a name="l00937"></a>00937     cpl_image_divide_scalar (temp_image, temp2);
-<a name="l00938"></a>00938     pos[i] = pos[i]/median[i];
-<a name="l00939"></a>00939     median[i] = median[i] / temp2;
-<a name="l00940"></a>00940     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"median image=%g at %g"</span>,median[i], pos[i]); 
-<a name="l00941"></a>00941   }
-<a name="l00942"></a>00942   
-<a name="l00943"></a>00943   sinfo_msg(<span class="stringliteral">"Fitting slitlets between x=%d - x=%d\n"</span>, llx, urx);
-<a name="l00944"></a>00944   sinfo_msg(<span class="stringliteral">"Fitting order %d\n"</span>, _order); 
-<a name="l00945"></a>00945   <span class="keywordflow">for</span> (k=0;k<nbins; k++) {
-<a name="l00946"></a>00946     <span class="keywordflow">if</span> (median[k]>min_flux) {
-<a name="l00947"></a>00947       <span class="keywordflow">for</span> (j=0; j<32; j++) {
-<a name="l00948"></a>00948     row=cpl_vector_new_from_image_row(cpl_imagelist_get(binnedsky,k),2*j+1);
-<a name="l00949"></a>00949     n = 0;
-<a name="l00950"></a>00950     <span class="keywordflow">for</span> (i=llx; i<=urx; i++) {
-<a name="l00951"></a>00951       <span class="keywordflow">if</span> (!isnan(cpl_vector_get(row, i))) {
-<a name="l00952"></a>00952         ok[i] = 1;
-<a name="l00953"></a>00953         temparray[n]  = cpl_vector_get(row, i);
-<a name="l00954"></a>00954         tempxarray[n] = cpl_vector_get(xpos, i);
-<a name="l00955"></a>00955         n++;
-<a name="l00956"></a>00956       }
-<a name="l00957"></a>00957       <span class="keywordflow">else</span>
-<a name="l00958"></a>00958         ok[i] = 0;
-<a name="l00959"></a>00959     }
-<a name="l00960"></a>00960 
-<a name="l00961"></a>00961     <span class="comment">/* The ends of cube are always filled with NaNs => n==0*/</span>
-<a name="l00962"></a>00962     <span class="keywordflow">if</span> (n>20) {
-<a name="l00963"></a>00963       tempvector = cpl_vector_wrap (n, temparray);
-<a name="l00964"></a>00964       tempvector2= cpl_vector_wrap (n, tempxarray);
-<a name="l00965"></a>00965       poly = cpl_polynomial_fit_1d_create (tempvector2, tempvector, 
-<a name="l00966"></a>00966                                                order[j], &mse);
-<a name="l00967"></a>00967       
-<a name="l00968"></a>00968       <span class="keywordflow">if</span> (poly == NULL)
-<a name="l00969"></a>00969         sinfo_msg(<span class="stringliteral">"Fitting failed (plane %d, row %d): %s"</span>,
-<a name="l00970"></a>00970                  k, j, (<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00971"></a>00971       <span class="keywordflow">else</span> {
-<a name="l00972"></a>00972         <span class="keywordflow">if</span> (sigma>0 && iter>0) {
-<a name="l00973"></a>00973           <span class="keywordflow">for</span> (kk = 0; kk<iter; kk++) {
-<a name="l00974"></a>00974         cpl_vector_fill_polynomial (model, poly, 0.0, 1.0);
-<a name="l00975"></a>00975         cpl_vector_subtract (model, row);
-<a name="l00976"></a>00976         
-<a name="l00977"></a>00977         <span class="comment">/* Calculate stdev NaN-correctly */</span>
-<a name="l00978"></a>00978         n = 0;
-<a name="l00979"></a>00979         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) 
-<a name="l00980"></a>00980           <span class="keywordflow">if</span> (ok[i] == 1) 
-<a name="l00981"></a>00981             temparray[n++]  = cpl_vector_get(model, i);
-<a name="l00982"></a>00982         stddev = cpl_vector_get_stdev(tempvector);
-<a name="l00983"></a>00983         
-<a name="l00984"></a>00984         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) 
-<a name="l00985"></a>00985           <span class="keywordflow">if</span> (ok[i] == 1) 
-<a name="l00986"></a>00986             <span class="keywordflow">if</span> (fabs(cpl_vector_get(model, i))>(stddev*sigma))
-<a name="l00987"></a>00987               ok[i] = 0;
-<a name="l00988"></a>00988         
-<a name="l00989"></a>00989         
-<a name="l00990"></a>00990         n = 0;
-<a name="l00991"></a>00991         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) {
-<a name="l00992"></a>00992           <span class="keywordflow">if</span> (ok[i] == 1) {
-<a name="l00993"></a>00993             temparray[n]  = cpl_vector_get(row, i);
-<a name="l00994"></a>00994             tempxarray[n] = cpl_vector_get(xpos, i);
-<a name="l00995"></a>00995             n++;
-<a name="l00996"></a>00996           }
-<a name="l00997"></a>00997         }
-<a name="l00998"></a>00998         cpl_polynomial_delete(poly);
-<a name="l00999"></a>00999         <span class="keywordflow">if</span> (n>20) {
-<a name="l01000"></a>01000           cpl_vector_unwrap (tempvector);
-<a name="l01001"></a>01001           cpl_vector_unwrap (tempvector2);
-<a name="l01002"></a>01002           tempvector = cpl_vector_wrap (n, temparray);
-<a name="l01003"></a>01003           tempvector2= cpl_vector_wrap (n, tempxarray);
-<a name="l01004"></a>01004           stddev = cpl_vector_get_stdev(tempvector);
-<a name="l01005"></a>01005           
-<a name="l01006"></a>01006           poly = cpl_polynomial_fit_1d_create (tempvector2, 
-<a name="l01007"></a>01007                                                        tempvector, 
-<a name="l01008"></a>01008                                                        order[j], &mse);
-<a name="l01009"></a>01009           <span class="keywordflow">if</span> (poly == NULL)
-<a name="l01010"></a>01010             <span class="keywordflow">break</span>;
-<a name="l01011"></a>01011         }
-<a name="l01012"></a>01012         <span class="keywordflow">else</span> {
-<a name="l01013"></a>01013           poly = NULL;
-<a name="l01014"></a>01014           <span class="keywordflow">break</span>;
-<a name="l01015"></a>01015         }
-<a name="l01016"></a>01016 <span class="comment">/*           printf ("%d %e ", n, stddev); */</span>
-<a name="l01017"></a>01017           }
-<a name="l01018"></a>01018         }
-<a name="l01019"></a>01019 
-<a name="l01020"></a>01020         <span class="keywordflow">if</span> (poly!=NULL) {
-<a name="l01021"></a>01021           coeffs[j*nbins+k] = poly;
-<a name="l01022"></a>01022           rms_values[j*nbins+k] = sqrt(mse);
-<a name="l01023"></a>01023         }
-<a name="l01024"></a>01024         <span class="keywordflow">else</span>
-<a name="l01025"></a>01025           coeffs[j*nbins+k] = NULL;
-<a name="l01026"></a>01026       }
-<a name="l01027"></a>01027       cpl_vector_unwrap (tempvector);
-<a name="l01028"></a>01028       cpl_vector_unwrap (tempvector2);
-<a name="l01029"></a>01029     }
-<a name="l01030"></a>01030     cpl_vector_delete(row);
-<a name="l01031"></a>01031       }
-<a name="l01032"></a>01032     }
-<a name="l01033"></a>01033   }
-<a name="l01034"></a>01034 
-<a name="l01035"></a>01035   <span class="comment">/*</span>
-<a name="l01036"></a>01036 <span class="comment">   *   These should (probably) be saved in a fits file...</span>
-<a name="l01037"></a>01037 <span class="comment">   */</span>
-<a name="l01038"></a>01038   sinfo_msg(<span class="stringliteral">"Writing dat out_illum.dat\n"</span>);
-<a name="l01039"></a>01039   dumpfile = fopen (<span class="stringliteral">"out_illum.dat"</span>,<span class="stringliteral">"w"</span>);
-<a name="l01040"></a>01040   fprintf (dumpfile, <span class="stringliteral">"# slitlet, pos, median, rms, coeff0, coeff1...\n"</span>);
-<a name="l01041"></a>01041   <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++)
-<a name="l01042"></a>01042     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01043"></a>01043       poly = coeffs[slitlet*nbins+bin];
-<a name="l01044"></a>01044       <span class="keywordflow">if</span> (poly != NULL) {
-<a name="l01045"></a>01045     fprintf (dumpfile, <span class="stringliteral">"%d %f %f %f "</span>,slitlet, pos[bin],
-<a name="l01046"></a>01046          median[bin],
-<a name="l01047"></a>01047          rms_values[slitlet*nbins+bin]);
-<a name="l01048"></a>01048     <span class="keywordflow">for</span> (i=0; i<(cpl_polynomial_get_degree(poly)+1); i++) {
-<a name="l01049"></a>01049       temp = cpl_polynomial_get_coeff (poly, &i);
-<a name="l01050"></a>01050       fprintf (dumpfile, <span class="stringliteral">"%f "</span>, temp);
-<a name="l01051"></a>01051     }
-<a name="l01052"></a>01052     fprintf (dumpfile, <span class="stringliteral">"\n"</span>);
-<a name="l01053"></a>01053       }
-<a name="l01054"></a>01054     }
-<a name="l01055"></a>01055   fclose (dumpfile);
-<a name="l01056"></a>01056 
-<a name="l01057"></a>01057   <span class="comment">/*</span>
-<a name="l01058"></a>01058 <span class="comment">   *    Remove poor fits:</span>
-<a name="l01059"></a>01059 <span class="comment">   *      - calculate the median rms of all fits</span>
-<a name="l01060"></a>01060 <span class="comment">   *      - throw away the fits whose rms is il_sigma*median_rms</span>
-<a name="l01061"></a>01061 <span class="comment">   */</span>
-<a name="l01062"></a>01062   sinfo_msg(<span class="stringliteral">"Removing poor fits - factor %f"</span>, il_sigma);
-<a name="l01063"></a>01063   n = 0;
-<a name="l01064"></a>01064   i = 0;
-<a name="l01065"></a>01065   nbad=0;
-<a name="l01066"></a>01066   sinfo_msg(<span class="stringliteral">"max loop over bin =%d"</span>,nbins);
-<a name="l01067"></a>01067   <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01068"></a>01068     k = 0;
-<a name="l01069"></a>01069     <span class="keywordflow">for</span> (slitlet=0; slitlet<32; slitlet++)
-<a name="l01070"></a>01070       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL)
-<a name="l01071"></a>01071     rms_array[k++] = rms_values[slitlet*nbins+bin];
-<a name="l01072"></a>01072     <span class="keywordflow">if</span> (k>0) {
-<a name="l01073"></a>01073       <span class="comment">/* For some bizarre reason, cpl_tools_get_median_double returns </span>
-<a name="l01074"></a>01074 <span class="comment">       *  -1076245448.000000 (is that NaN?). On closer inspection,</span>
-<a name="l01075"></a>01075 <span class="comment">       * it seems to have replaced one of the numbers in array with NaN...*/</span>
-<a name="l01076"></a>01076       tempvector = cpl_vector_wrap (k, &rms_array[0]);
-<a name="l01077"></a>01077       temp = cpl_vector_get_median (tempvector);
-<a name="l01078"></a>01078       sinfo_msg(<span class="stringliteral">"median temp=%g"</span>,temp);
-<a name="l01079"></a>01079       cpl_vector_unwrap (tempvector);
-<a name="l01080"></a>01080       <span class="keywordflow">for</span> (slitlet=0; slitlet<32; slitlet++) 
-<a name="l01081"></a>01081     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01082"></a>01082       i++;
-<a name="l01083"></a>01083       <span class="keywordflow">if</span> (rms_values[slitlet*nbins+bin]>(il_sigma*temp)) {
-<a name="l01084"></a>01084         cpl_polynomial_delete(coeffs[slitlet*nbins+bin]);
-<a name="l01085"></a>01085         coeffs[slitlet*nbins+bin] = NULL;
-<a name="l01086"></a>01086         n++;
-<a name="l01087"></a>01087       }
-<a name="l01088"></a>01088     } <span class="keywordflow">else</span> {
-<a name="l01089"></a>01089           nbad++;
-<a name="l01090"></a>01090     }
-<a name="l01091"></a>01091         
-<a name="l01092"></a>01092     }
-<a name="l01093"></a>01093   }
-<a name="l01094"></a>01094   sinfo_msg(<span class="stringliteral">"Removed %d poor fits out of %d. Bad coeffs=%d"</span>, n,i,nbad);
-<a name="l01095"></a>01095 
-<a name="l01096"></a>01096   <span class="keywordflow">if</span>(smooth0 == 1) {
-<a name="l01097"></a>01097     sinfo_msg(<span class="stringliteral">"Smoothing zeroth terms (order %d)"</span>, smooth_order0);
-<a name="l01098"></a>01098     <span class="comment">/*</span>
-<a name="l01099"></a>01099 <span class="comment">     *  Since the new centering scheme will pro</span>
-<a name="l01100"></a>01100 <span class="comment">     */</span> 
-<a name="l01101"></a>01101     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {
-<a name="l01102"></a>01102       k = 0;
-<a name="l01103"></a>01103       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01104"></a>01104     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01105"></a>01105       poly = coeffs[slitlet*nbins+bin];
-<a name="l01106"></a>01106       i = 0;
-<a name="l01107"></a>01107       temp = cpl_polynomial_get_coeff (poly, &i);
-<a name="l01108"></a>01108       plane_pos[k] = pos[bin];
-<a name="l01109"></a>01109       plane_val[k] = temp/median[bin];
-<a name="l01110"></a>01110       k++;
-<a name="l01111"></a>01111     }
-<a name="l01112"></a>01112       }
-<a name="l01113"></a>01113       <span class="keywordflow">if</span> (k>0) {
-<a name="l01114"></a>01114     tempvector = cpl_vector_wrap (k, plane_pos);
-<a name="l01115"></a>01115     tempvector2= cpl_vector_wrap (k, plane_val);
-<a name="l01116"></a>01116     poly2 = cpl_polynomial_fit_1d_create (tempvector, tempvector2, 
-<a name="l01117"></a>01117                                               smooth_order0, &mse);
-<a name="l01118"></a>01118     cpl_vector_unwrap (tempvector);
-<a name="l01119"></a>01119     cpl_vector_unwrap (tempvector2);
-<a name="l01120"></a>01120     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01121"></a>01121       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01122"></a>01122         poly = coeffs[slitlet*nbins+bin];
-<a name="l01123"></a>01123         i = 0;
-<a name="l01124"></a>01124         temp2 = cpl_polynomial_eval_1d (poly2, pos[bin], NULL);
-<a name="l01125"></a>01125         cpl_polynomial_set_coeff (poly, &i, temp2*median[bin]);
-<a name="l01126"></a>01126       }
-<a name="l01127"></a>01127     }
-<a name="l01128"></a>01128     cpl_polynomial_delete(poly2); 
-<a name="l01129"></a>01129       }
-<a name="l01130"></a>01130       <span class="keywordflow">else</span> 
-<a name="l01131"></a>01131     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Not enough data points in slitlet %d"</span>, slitlet);
-<a name="l01132"></a>01132     }
-<a name="l01133"></a>01133   }
-<a name="l01134"></a>01134   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (smooth0 == 2) {
-<a name="l01135"></a>01135     sinfo_msg(<span class="stringliteral">"Smoothing zeroth terms (median filter size %d)"</span>, smooth_size0);
-<a name="l01136"></a>01136     smooth_size0 = smooth_size0/2;
-<a name="l01137"></a>01137     <span class="keywordflow">if</span> (smooth_size0 <= 0) smooth_size0 = 1;
-<a name="l01138"></a>01138     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {
-<a name="l01139"></a>01139       k = 0;
-<a name="l01140"></a>01140       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01141"></a>01141     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01142"></a>01142       poly = coeffs[slitlet*nbins+bin];
-<a name="l01143"></a>01143       i = 0;
-<a name="l01144"></a>01144       temp = cpl_polynomial_get_coeff (poly, &i);
-<a name="l01145"></a>01145       <span class="comment">//plane_pos[k] = pos[bin];</span>
-<a name="l01146"></a>01146       plane_val[k] = temp/median[bin];
-<a name="l01147"></a>01147       k++;
-<a name="l01148"></a>01148     }
-<a name="l01149"></a>01149       }
-<a name="l01150"></a>01150       <span class="keywordflow">if</span> (k>0) {
-<a name="l01151"></a>01151     tempvector = cpl_vector_wrap (k, plane_val);
-<a name="l01152"></a>01152     tempvector2= sinfo_juha_vector_filter_median_create (tempvector, 
-<a name="l01153"></a>01153                                                              smooth_size0);
-<a name="l01154"></a>01154     cpl_vector_unwrap (tempvector);
-<a name="l01155"></a>01155     kk = 0;
-<a name="l01156"></a>01156     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01157"></a>01157       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01158"></a>01158         poly = coeffs[slitlet*nbins+bin];
-<a name="l01159"></a>01159         i = 0;
-<a name="l01160"></a>01160         cpl_polynomial_set_coeff(poly, &i, cpl_vector_get(tempvector2, kk++)
-<a name="l01161"></a>01161                       *median[bin]);
-<a name="l01162"></a>01162       }
-<a name="l01163"></a>01163     }
-<a name="l01164"></a>01164     cpl_vector_delete (tempvector2);
-<a name="l01165"></a>01165       }
-<a name="l01166"></a>01166     }
-<a name="l01167"></a>01167   }
-<a name="l01168"></a>01168 
-<a name="l01169"></a>01169   <span class="keywordflow">if</span>(smooth == 1) {
-<a name="l01170"></a>01170     sinfo_msg(<span class="stringliteral">"Smoothing higher terms (with order %d)"</span>, smooth_order);
-<a name="l01171"></a>01171     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {
-<a name="l01172"></a>01172       <span class="keywordflow">if</span> (order[slitlet]>0) {
-<a name="l01173"></a>01173     <span class="keywordflow">for</span> (j=1; j<=order[slitlet]; j++) {
-<a name="l01174"></a>01174       k = 0;
-<a name="l01175"></a>01175       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01176"></a>01176         <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01177"></a>01177           poly = coeffs[slitlet*nbins+bin];
-<a name="l01178"></a>01178           i = 0;
-<a name="l01179"></a>01179 <span class="comment">/*           temp = cpl_polynomial_get_coeff (poly, &i); */</span>
-<a name="l01180"></a>01180           temp2 = cpl_polynomial_get_coeff (poly, &j);
-<a name="l01181"></a>01181           plane_pos[k] = pos[bin];
-<a name="l01182"></a>01182           plane_val[k] = temp2/median[bin];
-<a name="l01183"></a>01183           k++;
-<a name="l01184"></a>01184         }
-<a name="l01185"></a>01185       }
-<a name="l01186"></a>01186       <span class="keywordflow">if</span> (k>0) {
-<a name="l01187"></a>01187         tempvector = cpl_vector_wrap (k, plane_pos);
-<a name="l01188"></a>01188         tempvector2= cpl_vector_wrap (k, plane_val);
-<a name="l01189"></a>01189         poly2 = cpl_polynomial_fit_1d_create (tempvector, tempvector2, 
-<a name="l01190"></a>01190                                                   smooth_order, &mse);
-<a name="l01191"></a>01191         cpl_vector_unwrap (tempvector);
-<a name="l01192"></a>01192         cpl_vector_unwrap (tempvector2);
-<a name="l01193"></a>01193         <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01194"></a>01194           <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01195"></a>01195         poly = coeffs[slitlet*nbins+bin];
-<a name="l01196"></a>01196           i = 0;
-<a name="l01197"></a>01197           <span class="comment">/*           temp = cpl_polynomial_get_coeff (poly, &i); */</span>
-<a name="l01198"></a>01198           temp2 = cpl_polynomial_eval_1d (poly2, pos[bin], NULL);
-<a name="l01199"></a>01199           cpl_polynomial_set_coeff (poly, &j, temp2*median[bin]);
-<a name="l01200"></a>01200           }
-<a name="l01201"></a>01201         }
-<a name="l01202"></a>01202         cpl_polynomial_delete(poly2); 
-<a name="l01203"></a>01203       }
-<a name="l01204"></a>01204       <span class="keywordflow">else</span> 
-<a name="l01205"></a>01205         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Not enough data points in slitlet %d\n"</span>, 
-<a name="l01206"></a>01206                                slitlet);
-<a name="l01207"></a>01207     }
-<a name="l01208"></a>01208       }
-<a name="l01209"></a>01209     }
-<a name="l01210"></a>01210   }
-<a name="l01211"></a>01211 
-<a name="l01212"></a>01212   sinfo_msg(<span class="stringliteral">"Creating cube for illumination correction\n"</span>);
-<a name="l01213"></a>01213   result = cpl_imagelist_new ();
-<a name="l01214"></a>01214   <span class="keywordflow">for</span> (i=0; i<nplanes; i++) {
-<a name="l01215"></a>01215     temp_image = cpl_image_new (64, 64, CPL_TYPE_FLOAT);
-<a name="l01216"></a>01216     cpl_imagelist_set (result, temp_image, i);
-<a name="l01217"></a>01217   }
-<a name="l01218"></a>01218     
-<a name="l01219"></a>01219   sinfo_msg(<span class="stringliteral">"nplanes=%d spec_bin=%d"</span>,nplanes,spec_bin);
-<a name="l01220"></a>01220   <span class="keywordflow">if</span> ( nbins>5) {
-<a name="l01221"></a>01221     sinfo_msg(<span class="stringliteral">"Interpolating\n"</span>);
-<a name="l01222"></a>01222     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {
-<a name="l01223"></a>01223       <span class="keywordflow">for</span> (i=0; i<64; i++) {
-<a name="l01224"></a>01224     k = 0;
-<a name="l01225"></a>01225     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01226"></a>01226       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {
-<a name="l01227"></a>01227         plane_pos[k] = pos[bin];
-<a name="l01228"></a>01228         plane_val[k] = cpl_polynomial_eval_1d(coeffs[slitlet*nbins+bin], 
-<a name="l01229"></a>01229                           cpl_vector_get(xpos, i),NULL)/
-<a name="l01230"></a>01230                                                   median[bin];
-<a name="l01231"></a>01231         k++;
-<a name="l01232"></a>01232       }
-<a name="l01233"></a>01233     }
-<a name="l01234"></a>01234         
-<a name="l01235"></a>01235     <span class="keywordflow">if</span> (k>3) {
-<a name="l01236"></a>01236       sinfo_juha_function1d_natural_spline (plane_pos, plane_val, k,
-<a name="l01237"></a>01237                          &inter_pos[(<span class="keywordtype">int</span>)plane_pos[0]],
-<a name="l01238"></a>01238                          &inter_val[(<span class="keywordtype">int</span>)plane_pos[0]],
-<a name="l01239"></a>01239                          (<span class="keywordtype">int</span>)(plane_pos[k-1]-plane_pos[0]));
-<a name="l01240"></a>01240       <span class="keywordflow">for</span> (j=0; j<=(int)plane_pos[0]; j++)
-<a name="l01241"></a>01241         inter_val[j] = inter_val[(<span class="keywordtype">int</span>)plane_pos[0]+1];
-<a name="l01242"></a>01242       <span class="keywordflow">for</span> (j=(<span class="keywordtype">int</span>)plane_pos[k-1]-1; j<nplanes; j++)
-<a name="l01243"></a>01243         inter_val[j] = inter_val[(<span class="keywordtype">int</span>)plane_pos[k-1]-2];
-<a name="l01244"></a>01244       <span class="keywordflow">for</span> (k=0; k<nplanes; k++) {
-<a name="l01245"></a>01245         data = cpl_image_get_data_float(cpl_imagelist_get(result, k));
-<a name="l01246"></a>01246         data[i + (2*slitlet)*64] = inter_val[k];
-<a name="l01247"></a>01247         data[i + (2*slitlet+1)*64] = inter_val[k];
-<a name="l01248"></a>01248             <span class="comment">/*sinfo_msg("inter_val=%g",inter_val[k]);*/</span>
-<a name="l01249"></a>01249       }
-<a name="l01250"></a>01250     }
-<a name="l01251"></a>01251     <span class="keywordflow">else</span>
-<a name="l01252"></a>01252     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Too few points %d\n"</span>, slitlet);
-<a name="l01253"></a>01253       }
-<a name="l01254"></a>01254     }
-<a name="l01255"></a>01255   }
-<a name="l01256"></a>01256   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nbins==1) {
-<a name="l01257"></a>01257     sinfo_msg(<span class="stringliteral">"Filling the illumination cube\n"</span>);
-<a name="l01258"></a>01258     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {
-<a name="l01259"></a>01259       <span class="keywordflow">for</span> (i=0; i<64; i++) {
-<a name="l01260"></a>01260     <span class="keywordflow">if</span> (coeffs[slitlet] != NULL) {
-<a name="l01261"></a>01261       temp = cpl_polynomial_eval_1d(coeffs[slitlet], 
-<a name="l01262"></a>01262                     cpl_vector_get(xpos, i),NULL)/median[0];
-<a name="l01263"></a>01263       <span class="keywordflow">for</span> (k=0; k<nplanes; k++) {
-<a name="l01264"></a>01264         data = cpl_image_get_data_float(cpl_imagelist_get(result, k));
-<a name="l01265"></a>01265         data[i + (2*slitlet)*64] = temp;
-<a name="l01266"></a>01266         data[i + (2*slitlet+1)*64] = temp;
-<a name="l01267"></a>01267             sinfo_msg(<span class="stringliteral">"temp=%g"</span>,temp);
-<a name="l01268"></a>01268       }
-<a name="l01269"></a>01269     }
-<a name="l01270"></a>01270       }
-<a name="l01271"></a>01271     }
-<a name="l01272"></a>01272   } <span class="keywordflow">else</span> {
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274   }
-<a name="l01275"></a>01275 
-<a name="l01276"></a>01276 
-<a name="l01277"></a>01277   sinfo_msg(<span class="stringliteral">"Writing ima out_illum.fits\n"</span>);
-<a name="l01278"></a>01278 <span class="comment">/*   pl = cpl_propertylist_load (name_i, 0); */</span>
-<a name="l01279"></a>01279 <span class="comment">/*   if (sinfo_propertylist_has(pl, KEY_NAME_PRO_CATG)) */</span>
-<a name="l01280"></a>01280 <span class="comment">/*     cpl_propertylist_set_string (pl, KEY_NAME_PRO_CATG, PRO_ILL_COR); */</span>
-<a name="l01281"></a>01281 <span class="comment">/*   else */</span>
-<a name="l01282"></a>01282 <span class="comment">/*     cpl_propertylist_append_string (pl, KEY_NAME_PRO_CATG, PRO_ILL_COR); */</span>
-<a name="l01283"></a>01283 
-<a name="l01284"></a>01284 <span class="comment">/*  cpl_imagelist_save(result, "out_illum.fits", CPL_BPP_IEEE_FLOAT, pl, 0); */</span>
-<a name="l01285"></a>01285 
-<a name="l01286"></a>01286   sinfo_pro_save_ims(result,sof,sof,<span class="stringliteral">"out_illum.fits"</span>, 
-<a name="l01287"></a>01287               PRO_ILL_COR,NULL,plugin_id, cpl_cfg); 
-<a name="l01288"></a>01288 
-<a name="l01289"></a>01289   <span class="comment">/*</span>
-<a name="l01290"></a>01290 <span class="comment">   *   These should (probably) be saved in a fits file...</span>
-<a name="l01291"></a>01291 <span class="comment">   */</span>
-<a name="l01292"></a>01292   sinfo_msg(<span class="stringliteral">"Writing dat out_illum2.dat\n"</span>);
-<a name="l01293"></a>01293   dumpfile = fopen (<span class="stringliteral">"out_illum2.dat"</span>,<span class="stringliteral">"w"</span>);
-<a name="l01294"></a>01294   fprintf (dumpfile, <span class="stringliteral">"# slitlet, pos, median, rms, coeff0, coeff1...\n"</span>);
-<a name="l01295"></a>01295   <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++)
-<a name="l01296"></a>01296     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {
-<a name="l01297"></a>01297       poly = coeffs[slitlet*nbins+bin];
-<a name="l01298"></a>01298       <span class="keywordflow">if</span> (poly != NULL) {
-<a name="l01299"></a>01299     fprintf (dumpfile, <span class="stringliteral">"%d %f %f %f "</span>,slitlet, pos[bin],
-<a name="l01300"></a>01300          median[bin],
-<a name="l01301"></a>01301          rms_values[slitlet*nbins+bin]);
-<a name="l01302"></a>01302     <span class="keywordflow">for</span> (i=0; i<(cpl_polynomial_get_degree(poly)+1); i++) {
-<a name="l01303"></a>01303       temp = cpl_polynomial_get_coeff (poly, &i);
-<a name="l01304"></a>01304       fprintf (dumpfile, <span class="stringliteral">"%f "</span>, temp);
-<a name="l01305"></a>01305     }
-<a name="l01306"></a>01306     fprintf (dumpfile, <span class="stringliteral">"\n"</span>);
-<a name="l01307"></a>01307       }
-<a name="l01308"></a>01308     }
-<a name="l01309"></a>01309   fclose (dumpfile);
-<a name="l01310"></a>01310 
-<a name="l01311"></a>01311   <span class="comment">/*</span>
-<a name="l01312"></a>01312 <span class="comment">   *  Clean up...</span>
-<a name="l01313"></a>01313 <span class="comment">   */</span>
-<a name="l01314"></a>01314   <span class="keywordflow">for</span> (i = 0; i<32*nbins; i++)
-<a name="l01315"></a>01315     <span class="keywordflow">if</span> (coeffs[i] != NULL)
-<a name="l01316"></a>01316       cpl_polynomial_delete(coeffs[i]);
-<a name="l01317"></a>01317   cpl_imagelist_delete (sky);
-<a name="l01318"></a>01318   cpl_imagelist_delete (binnedsky);
-<a name="l01319"></a>01319   cpl_imagelist_delete (result);
-<a name="l01320"></a>01320   cpl_free (pos);
-<a name="l01321"></a>01321   cpl_free (median);
-<a name="l01322"></a>01322   cpl_free (temparray);
-<a name="l01323"></a>01323   cpl_free (tempxarray);
-<a name="l01324"></a>01324   cpl_free (tempsarray);
-<a name="l01325"></a>01325   cpl_free (coeffs);
-<a name="l01326"></a>01326   cpl_free (inter_pos);
-<a name="l01327"></a>01327   cpl_free (inter_val);
-<a name="l01328"></a>01328   cpl_free (plane_pos);
-<a name="l01329"></a>01329   cpl_free (plane_val);
-<a name="l01330"></a>01330   cpl_free (rms_values);
-<a name="l01331"></a>01331   cpl_vector_delete (xpos);
-<a name="l01332"></a>01332   cpl_vector_delete (model);
-<a name="l01333"></a>01333 
-<a name="l01334"></a>01334   cpl_free (bin_start);
-<a name="l01335"></a>01335   cpl_free (bin_end);
-<a name="l01336"></a>01336 
-<a name="l01337"></a>01337   <span class="keywordflow">return</span> (1);
-<a name="l01338"></a>01338 }
-<a name="l01339"></a>01339 
-<a name="l01340"></a>01340 <span class="comment">/*</span>
-<a name="l01341"></a>01341 <span class="comment"> *  sinfo_illumcorr_create_bins:</span>
-<a name="l01342"></a>01342 <span class="comment"> *    - searches for the sky emission lines</span>
-<a name="l01343"></a>01343 <span class="comment"> *    - increases the size of the bin to include two or more emission</span>
-<a name="l01344"></a>01344 <span class="comment"> *      lines if they are too close to each other</span>
-<a name="l01345"></a>01345 <span class="comment"> *    - fills the space between emission lines with bins if</span>
-<a name="l01346"></a>01346 <span class="comment"> *      thermal background has enough flux</span>
-<a name="l01347"></a>01347 <span class="comment"> *    - copies the start and end points of bins to two arrays</span>
-<a name="l01348"></a>01348 <span class="comment"> *      (returned in **start and **end)</span>
-<a name="l01349"></a>01349 <span class="comment"> *</span>
-<a name="l01350"></a>01350 <span class="comment"> *  Returns: the number bins created</span>
-<a name="l01351"></a>01351 <span class="comment"> *</span>
-<a name="l01352"></a>01352 <span class="comment"> *  The arrays start and end must be deallocated with cpl_free()</span>
-<a name="l01353"></a>01353 <span class="comment"> */</span>
-<a name="l01354"></a>01354 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01355"></a>01355 sinfo_illumcorr_create_bins (cpl_imagelist *sky, 
-<a name="l01356"></a>01356                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,
-<a name="l01357"></a>01357                  <span class="keywordtype">int</span> spec_bin, 
-<a name="l01358"></a>01358                  <span class="keywordtype">double</span> min_flux,
-<a name="l01359"></a>01359                  <span class="keywordtype">int</span> ** start,
-<a name="l01360"></a>01360                  <span class="keywordtype">int</span> ** end,
-<a name="l01361"></a>01361                  <span class="keywordtype">int</span> z1, <span class="keywordtype">int</span> z2)
-<a name="l01362"></a>01362 {
-<a name="l01363"></a>01363   <span class="keywordtype">int</span> temp_i=0;
-<a name="l01364"></a>01364   <span class="keywordtype">double</span> testarray3[15];
-<a name="l01365"></a>01365   <span class="keywordtype">double</span> temp_double=0;
-<a name="l01366"></a>01366   <span class="keywordtype">int</span>  i=0, j=0, k=0,kk=0,nplanes=0; 
-<a name="l01367"></a>01367 
-<a name="l01368"></a>01368   <span class="keywordtype">int</span> norig = 0, nmerged = 0, ncont = 0, nline=0;
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370   <span class="keywordtype">int</span> *pos=NULL;
-<a name="l01371"></a>01371   <span class="keywordtype">int</span> *x1=NULL;
-<a name="l01372"></a>01372   <span class="keywordtype">int</span> *x2=NULL;
-<a name="l01373"></a>01373   <span class="keywordtype">int</span> *x1b=NULL;
-<a name="l01374"></a>01374   <span class="keywordtype">int</span> *x2b=NULL;
-<a name="l01375"></a>01375   <span class="keywordtype">int</span> *s1=NULL;
-<a name="l01376"></a>01376   <span class="keywordtype">int</span> *s2=NULL;
-<a name="l01377"></a>01377   <span class="keywordtype">double</span> *flux=NULL;
-<a name="l01378"></a>01378   <span class="keywordtype">double</span> *spec=NULL;
-<a name="l01379"></a>01379   <span class="keywordtype">double</span>  *spec_cont=NULL;
-<a name="l01380"></a>01380   <span class="keywordtype">double</span> *spec_line=NULL;
-<a name="l01381"></a>01381 
-<a name="l01382"></a>01382 
-<a name="l01383"></a>01383   cpl_image     *temp_image=NULL;
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385   nplanes   = cpl_imagelist_get_size(sky);
-<a name="l01386"></a>01386 
-<a name="l01387"></a>01387   spec = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01388"></a>01388   spec_line = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01389"></a>01389   spec_cont = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01390"></a>01390 
-<a name="l01391"></a>01391   <span class="comment">/*  there should be no way of actually needing this large arrays*/</span>
-<a name="l01392"></a>01392   pos = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01393"></a>01393   flux = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01394"></a>01394   x1 = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01395"></a>01395   x2 = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01396"></a>01396   x1b = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01397"></a>01397   x2b = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01398"></a>01398 
-<a name="l01399"></a>01399   <span class="keywordflow">for</span> (i=z1; i<=z2; i++) {
-<a name="l01400"></a>01400     temp_image =  cpl_imagelist_get(sky, i);
-<a name="l01401"></a>01401     spec[i] = sinfo_image_get_median_window (temp_image, llx, lly, urx, ury);
-<a name="l01402"></a>01402   }
-<a name="l01403"></a>01403   <span class="keywordflow">for</span> (i=z1+7; i<=z2-7; i++) {
-<a name="l01404"></a>01404     k = 0;
-<a name="l01405"></a>01405     <span class="keywordflow">for</span> (j=-7; j<=7; j++)
-<a name="l01406"></a>01406       <span class="keywordflow">if</span> (!isnan(spec[i+j]))
-<a name="l01407"></a>01407     testarray3[k++] = spec[i+j];
-<a name="l01408"></a>01408     <span class="keywordflow">if</span> (k>0) {
-<a name="l01409"></a>01409       sinfo_tools_sort_double (&testarray3[0], k);
-<a name="l01410"></a>01410       spec_cont[i] =  testarray3[1];
-<a name="l01411"></a>01411     }
-<a name="l01412"></a>01412     <span class="keywordflow">else</span>
-<a name="l01413"></a>01413       spec_cont[i] =  0./0.;
-<a name="l01414"></a>01414   }
-<a name="l01415"></a>01415 
-<a name="l01416"></a>01416   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Calculating pure line flux at pos: "</span>
-<a name="l01417"></a>01417                   <span class="stringliteral">"original, continuum, line"</span>);
-<a name="l01418"></a>01418   <span class="keywordflow">for</span> (i=z1; i<=z2; i++) {
-<a name="l01419"></a>01419     spec_line[i] = spec[i] - spec_cont[i];
-<a name="l01420"></a>01420     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Flux at %i = %g %g %g"</span>,
-<a name="l01421"></a>01421                      i,spec[i],spec_cont[i], spec_line[i]);   
-<a name="l01422"></a>01422   }
-<a name="l01423"></a>01423 
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425   <span class="comment">/*</span>
-<a name="l01426"></a>01426 <span class="comment">   *  Search for peaks</span>
-<a name="l01427"></a>01427 <span class="comment">   */</span>  
-<a name="l01428"></a>01428   sinfo_msg (<span class="stringliteral">"Searching for peaks"</span>);
-<a name="l01429"></a>01429   temp_double = -10000.0;
-<a name="l01430"></a>01430   i = z1+2; 
-<a name="l01431"></a>01431   <span class="keywordflow">while</span> (i<=z2-2) {
-<a name="l01432"></a>01432     <span class="keywordflow">if</span> (!isnan (spec_line[i])) {
-<a name="l01433"></a>01433       <span class="keywordflow">if</span> (temp_double<spec_line[i]) {
-<a name="l01434"></a>01434         temp_i = i;
-<a name="l01435"></a>01435         temp_double = spec_line[i];
-<a name="l01436"></a>01436       }
-<a name="l01437"></a>01437       <span class="keywordflow">else</span> {
-<a name="l01438"></a>01438         <span class="comment">/*  Found a peak! */</span> 
-<a name="l01439"></a>01439         <span class="keywordflow">if</span> (temp_i == i-1 && spec_line[temp_i]>min_flux) {
-<a name="l01440"></a>01440       k = 0;
-<a name="l01441"></a>01441       <span class="keywordflow">for</span> (j=-spec_bin/2; j<=spec_bin/2; j++) 
-<a name="l01442"></a>01442         <span class="keywordflow">if</span> (j+i>=0 && i+j<nplanes && isnan(spec[i+j])) {
-<a name="l01443"></a>01443           k = 1;
-<a name="l01444"></a>01444           <span class="keywordflow">break</span>;
-<a name="l01445"></a>01445         }
-<a name="l01446"></a>01446       <span class="keywordflow">if</span> (k==0) {
-<a name="l01447"></a>01447         pos[norig] = temp_i; <span class="comment">// - spec_bin/2;</span>
-<a name="l01448"></a>01448         flux[norig]   = temp_double;
-<a name="l01449"></a>01449         x1[norig] = temp_i;
-<a name="l01450"></a>01450         x2[norig] = temp_i;
-<a name="l01451"></a>01451         temp_double = -10000.0; 
-<a name="l01452"></a>01452         <span class="keywordflow">while</span> (spec_line[i]<spec_line[i-1])
-<a name="l01453"></a>01453           i++;
-<a name="l01454"></a>01454         i--;
-<a name="l01455"></a>01455         norig++;
-<a name="l01456"></a>01456       }
-<a name="l01457"></a>01457         }
-<a name="l01458"></a>01458       }
-<a name="l01459"></a>01459     }      
-<a name="l01460"></a>01460     i++;
-<a name="l01461"></a>01461   }
-<a name="l01462"></a>01462 
-<a name="l01463"></a>01463   <span class="comment">/*</span>
-<a name="l01464"></a>01464 <span class="comment">   *   Merge the features which are too close to each other</span>
-<a name="l01465"></a>01465 <span class="comment">   */</span>
-<a name="l01466"></a>01466   sinfo_msg (<span class="stringliteral">"Merging emission features too close to each other"</span>);
-<a name="l01467"></a>01467   i = 0;
-<a name="l01468"></a>01468   <span class="keywordflow">while</span> (i<norig) {
-<a name="l01469"></a>01469     <span class="keywordflow">if</span> (flux[i] > 0.0) {
-<a name="l01470"></a>01470       j = i+1;
-<a name="l01471"></a>01471       <span class="keywordflow">while</span> (j<norig 
-<a name="l01472"></a>01472          && (x1[j]-x2[i]) <=spec_bin 
-<a name="l01473"></a>01473          && flux[j]>0.0) {
-<a name="l01474"></a>01474     flux[j] = -100.0;
-<a name="l01475"></a>01475     x2[i] = x1[j];
-<a name="l01476"></a>01476     j++;
-<a name="l01477"></a>01477     nmerged++;
-<a name="l01478"></a>01478       }
-<a name="l01479"></a>01479     }
-<a name="l01480"></a>01480     i++;
-<a name="l01481"></a>01481   }
-<a name="l01482"></a>01482 
-<a name="l01483"></a>01483   nline = norig - nmerged;
-<a name="l01484"></a>01484 
-<a name="l01485"></a>01485   j = 0;
-<a name="l01486"></a>01486   <span class="keywordflow">for</span> (i=0; i<norig; i++)
-<a name="l01487"></a>01487     <span class="keywordflow">if</span> (flux[i]>0.0) {
-<a name="l01488"></a>01488       x1b[j] = x1[i] - spec_bin/2;
-<a name="l01489"></a>01489       x2b[j] = x2[i] + spec_bin/2;
-<a name="l01490"></a>01490       j++;
-<a name="l01491"></a>01491       <span class="comment">/* sinfo_msg ("Bin start: %i end %i", x1[i], x2[i]); */</span>
-<a name="l01492"></a>01492     }
-<a name="l01493"></a>01493 
-<a name="l01494"></a>01494   x1b[j] = nplanes+1;
-<a name="l01495"></a>01495 
-<a name="l01496"></a>01496   <span class="comment">/*</span>
-<a name="l01497"></a>01497 <span class="comment">   *  Check whether there is enough continuum (thermal background)</span>
-<a name="l01498"></a>01498 <span class="comment">   *  for binning</span>
-<a name="l01499"></a>01499 <span class="comment">   */</span>
-<a name="l01500"></a>01500   j=0;
-<a name="l01501"></a>01501   i=z1;
-<a name="l01502"></a>01502   <span class="keywordflow">while</span> (i<=z2) {
-<a name="l01503"></a>01503     <span class="keywordflow">if</span> (!isnan (spec[i])) {
-<a name="l01504"></a>01504       <span class="keywordflow">if</span> (x1b[j]-i < spec_bin) {
-<a name="l01505"></a>01505     i = x2b[j]+1;
-<a name="l01506"></a>01506     j++;
-<a name="l01507"></a>01507       }
-<a name="l01508"></a>01508       <span class="keywordflow">else</span> {
-<a name="l01509"></a>01509     kk = 0;
-<a name="l01510"></a>01510     <span class="keywordflow">for</span> (k=0; k<spec_bin; k++) 
-<a name="l01511"></a>01511       <span class="keywordflow">if</span> (spec[i+k]>min_flux)
-<a name="l01512"></a>01512         kk++;
-<a name="l01513"></a>01513     <span class="keywordflow">if</span> (kk==spec_bin) {
-<a name="l01514"></a>01514       x1[ncont] = i;
-<a name="l01515"></a>01515       x2[ncont] = i+spec_bin-1;
-<a name="l01516"></a>01516       ncont++;
-<a name="l01517"></a>01517       i = i+spec_bin;
-<a name="l01518"></a>01518     }
-<a name="l01519"></a>01519     <span class="keywordflow">else</span>
-<a name="l01520"></a>01520       i++;
-<a name="l01521"></a>01521       }
-<a name="l01522"></a>01522     }
-<a name="l01523"></a>01523     <span class="keywordflow">else</span> 
-<a name="l01524"></a>01524       i++;
-<a name="l01525"></a>01525   }
-<a name="l01526"></a>01526 
-<a name="l01527"></a>01527   sinfo_msg (<span class="stringliteral">"Number of bins centered on emission features:"</span>);
-<a name="l01528"></a>01528   sinfo_msg (<span class="stringliteral">"  %i - %i (merged) = %i"</span>, norig, nmerged, nline);
-<a name="l01529"></a>01529   sinfo_msg (<span class="stringliteral">"  %i continuum bins"</span>, ncont);
-<a name="l01530"></a>01530 
-<a name="l01531"></a>01531   s1 = (<span class="keywordtype">int</span>*)cpl_calloc(norig-nmerged+ncont, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01532"></a>01532   s2 = (<span class="keywordtype">int</span>*)cpl_calloc(norig-nmerged+ncont, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));
-<a name="l01533"></a>01533 
-<a name="l01534"></a>01534 
-<a name="l01535"></a>01535   <span class="comment">/* </span>
-<a name="l01536"></a>01536 <span class="comment">   *  Merge arrays sorted </span>
-<a name="l01537"></a>01537 <span class="comment">   */</span>
-<a name="l01538"></a>01538   i=0;
-<a name="l01539"></a>01539   j=0;
-<a name="l01540"></a>01540   k=0;
-<a name="l01541"></a>01541   <span class="keywordflow">while</span> (k<norig-nmerged+ncont) {
-<a name="l01542"></a>01542     <span class="keywordflow">if</span> (i<norig && j<ncont && x1b[i]<x1[j]) {
-<a name="l01543"></a>01543       s1[k] = x1b[i];
-<a name="l01544"></a>01544       s2[k] = x2b[i];
-<a name="l01545"></a>01545       k++;
-<a name="l01546"></a>01546       i++;
-<a name="l01547"></a>01547     }
-<a name="l01548"></a>01548     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i<norig && j<ncont && x1b[i]>x1[j]) {
-<a name="l01549"></a>01549       s1[k] = x1[j];
-<a name="l01550"></a>01550       s2[k] = x2[j];
-<a name="l01551"></a>01551       k++;
-<a name="l01552"></a>01552       j++;
-<a name="l01553"></a>01553     }
-<a name="l01554"></a>01554     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == norig) {
-<a name="l01555"></a>01555       s1[k] = x1[j];
-<a name="l01556"></a>01556       s2[k] = x2[j];
-<a name="l01557"></a>01557       k++;
-<a name="l01558"></a>01558       j++;
-<a name="l01559"></a>01559     }
-<a name="l01560"></a>01560     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == ncont) {
-<a name="l01561"></a>01561       s1[k] = x1b[i];
-<a name="l01562"></a>01562       s2[k] = x2b[i];
-<a name="l01563"></a>01563       k++;
-<a name="l01564"></a>01564       i++;
-<a name="l01565"></a>01565     }
-<a name="l01566"></a>01566     <span class="keywordflow">else</span> {
-<a name="l01567"></a>01567       <span class="comment">/* Should never happen */</span>
-<a name="l01568"></a>01568       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Something went wrong when combining "</span>
-<a name="l01569"></a>01569                         <span class="stringliteral">"the bins %i and %i"</span>, i,j);
-<a name="l01570"></a>01570       <span class="keywordflow">break</span>;
-<a name="l01571"></a>01571     }
-<a name="l01572"></a>01572   }
-<a name="l01573"></a>01573 
-<a name="l01574"></a>01574   <span class="keywordflow">for</span> (i=0; i<nline+ncont; i++)
-<a name="l01575"></a>01575     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"Bin start: %i end %i"</span>, s1[i], s2[i]);
-<a name="l01576"></a>01576 
-<a name="l01577"></a>01577   *start = s1;
-<a name="l01578"></a>01578   *end   = s2;
-<a name="l01579"></a>01579 
-<a name="l01580"></a>01580   cpl_free (pos);
-<a name="l01581"></a>01581   cpl_free (x1);
-<a name="l01582"></a>01582   cpl_free (x2);
-<a name="l01583"></a>01583   cpl_free (x1b);
-<a name="l01584"></a>01584   cpl_free (x2b);
-<a name="l01585"></a>01585   cpl_free (flux);
-<a name="l01586"></a>01586   cpl_free (spec);
-<a name="l01587"></a>01587   cpl_free (spec_line);
-<a name="l01588"></a>01588   cpl_free (spec_cont);
-<a name="l01589"></a>01589 
-<a name="l01590"></a>01590   <span class="keywordflow">return</span> (nline+ncont);
-<a name="l01591"></a>01591 }
-<a name="l01592"></a>01592 
-<a name="l01593"></a>01593 
-<a name="l01594"></a>01594 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01621"></a>01621 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01622"></a>01622 
-<a name="l01623"></a>01623 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01624"></a>01624 sinfo_juha_function1d_natural_spline(
-<a name="l01625"></a>01625     <span class="keywordtype">double</span>  *      x,
-<a name="l01626"></a>01626     <span class="keywordtype">double</span>  *      y,
-<a name="l01627"></a>01627     <span class="keywordtype">int</span>            len,
-<a name="l01628"></a>01628     <span class="keywordtype">double</span>  *      splX,
-<a name="l01629"></a>01629     <span class="keywordtype">double</span>  *      splY,
-<a name="l01630"></a>01630     <span class="keywordtype">int</span>            splLen
-<a name="l01631"></a>01631 )
-<a name="l01632"></a>01632 {
-<a name="l01633"></a>01633   <span class="keywordtype">int</span>                         end;
-<a name="l01634"></a>01634   <span class="keywordtype">int</span>                         loc, found;
-<a name="l01635"></a>01635   <span class="keyword">register</span> <span class="keywordtype">int</span>        i, j, n;
-<a name="l01636"></a>01636   <span class="keywordtype">double</span>              *       h;      <span class="comment">/* vector of deltas in x */</span>
-<a name="l01637"></a>01637   <span class="keywordtype">double</span>              *       alpha;
-<a name="l01638"></a>01638   <span class="keywordtype">double</span>              *       l,
-<a name="l01639"></a>01639     *       mu,
-<a name="l01640"></a>01640     *       z,
-<a name="l01641"></a>01641     *       a,
-<a name="l01642"></a>01642     *       b,
-<a name="l01643"></a>01643     *       c,
-<a name="l01644"></a>01644     *       d,
-<a name="l01645"></a>01645     v;
-<a name="l01646"></a>01646 
-<a name="l01647"></a>01647   end = len - 1;
-<a name="l01648"></a>01648   
-<a name="l01649"></a>01649   a = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * splLen * 9) ;
-<a name="l01650"></a>01650   b = a + len;
-<a name="l01651"></a>01651   c = b + len;
-<a name="l01652"></a>01652   d = c + len;
-<a name="l01653"></a>01653   h = d + len;
-<a name="l01654"></a>01654   l = h + len;
-<a name="l01655"></a>01655   z = l + len;
-<a name="l01656"></a>01656   mu = z + len;
-<a name="l01657"></a>01657   alpha = mu + len;
-<a name="l01658"></a>01658   
-<a name="l01659"></a>01659   <span class="keywordflow">for</span> (i = 0; i < len; i++) {
-<a name="l01660"></a>01660     a[i] = (double)y[i];
-<a name="l01661"></a>01661   }
-<a name="l01662"></a>01662   
-<a name="l01663"></a>01663   <span class="comment">/* Calculate vector of differences */</span>
-<a name="l01664"></a>01664   <span class="keywordflow">for</span> (i = 0; i < end; i++) {
-<a name="l01665"></a>01665     h[i] = (double)x[i + 1] - (<span class="keywordtype">double</span>)x[i];
-<a name="l01666"></a>01666     <span class="keywordflow">if</span> (h[i] < 0.0) {
-<a name="l01667"></a>01667       cpl_free(a) ;
-<a name="l01668"></a>01668       <span class="keywordflow">return</span> -1;
-<a name="l01669"></a>01669     }
-<a name="l01670"></a>01670   }
-<a name="l01671"></a>01671   
-<a name="l01672"></a>01672   <span class="comment">/* Calculate alpha vector */</span>
-<a name="l01673"></a>01673   <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {
-<a name="l01674"></a>01674     <span class="comment">/* n = i - 1 */</span>
-<a name="l01675"></a>01675     alpha[i] = 3.0 * ((a[i+1] / h[i]) - (a[i] / h[n]) - (a[i] / h[i]) +
-<a name="l01676"></a>01676               (a[n] / h[n]));
-<a name="l01677"></a>01677   }
-<a name="l01678"></a>01678   
-<a name="l01679"></a>01679   <span class="comment">/* Vectors to solve the tridiagonal matrix */</span>
-<a name="l01680"></a>01680   l[0] = l[end] = 1.0;
-<a name="l01681"></a>01681   mu[0] = mu[end] = 0.0;
-<a name="l01682"></a>01682   z[0] = z[end] = 0.0;
-<a name="l01683"></a>01683   c[0] = c[end] = 0.0;
-<a name="l01684"></a>01684   
-<a name="l01685"></a>01685   <span class="comment">/* Calculate the intermediate results */</span>
-<a name="l01686"></a>01686   <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {
-<a name="l01687"></a>01687     <span class="comment">/* n = i-1 */</span>
-<a name="l01688"></a>01688     l[i] = 2 * (h[i] + h[n]) - h[n] * mu[n];
-<a name="l01689"></a>01689     mu[i] = h[i] / l[i];
-<a name="l01690"></a>01690     z[i] = (alpha[i] - h[n] * z[n]) / l[i];
-<a name="l01691"></a>01691   }
-<a name="l01692"></a>01692   <span class="keywordflow">for</span> (n = end, j = end - 1; j >= 0; j--, n--) {
-<a name="l01693"></a>01693     <span class="comment">/* n = j + 1 */</span>
-<a name="l01694"></a>01694     c[j] = z[j] - mu[j] * c[n];
-<a name="l01695"></a>01695     b[j] = (a[n] - a[j]) / h[j] - h[j] * (c[n] + 2.0 * c[j]) / 3.0;
-<a name="l01696"></a>01696     d[j] = (c[n] - c[j]) / (3.0 * h[j]);
-<a name="l01697"></a>01697   }
-<a name="l01698"></a>01698   
-<a name="l01699"></a>01699   <span class="comment">/* Now calculate the new values */</span>
-<a name="l01700"></a>01700   <span class="keywordflow">for</span> (j = 0; j < splLen; j++) {
-<a name="l01701"></a>01701     v = (double)splX[j];
-<a name="l01702"></a>01702     splY[j] = (float)0;
-<a name="l01703"></a>01703     
-<a name="l01704"></a>01704     <span class="comment">/* Is it outside the interval? */</span>
-<a name="l01705"></a>01705     <span class="keywordflow">if</span> ((v < (<span class="keywordtype">double</span>)x[0]) || (v > (<span class="keywordtype">double</span>)x[end])) {
-<a name="l01706"></a>01706       <span class="keywordflow">continue</span>;
-<a name="l01707"></a>01707     }
-<a name="l01708"></a>01708     <span class="comment">/* Search for the interval containing v in the x vector */</span>
-<a name="l01709"></a>01709     loc = sinfo_function1d_search_value(x, len, (<span class="keywordtype">double</span>)v, &found);
-<a name="l01710"></a>01710     <span class="keywordflow">if</span> (found) {
-<a name="l01711"></a>01711       splY[j] = y[loc];
-<a name="l01712"></a>01712     } <span class="keywordflow">else</span> {
-<a name="l01713"></a>01713       loc--;
-<a name="l01714"></a>01714       v -= (double)x[loc];
-<a name="l01715"></a>01715       splY[j] = (float)( a[loc] + v * (b[loc] + v * (c[loc] + v * d[loc])));
-<a name="l01716"></a>01716     }
-<a name="l01717"></a>01717   }
-<a name="l01718"></a>01718   cpl_free(a) ;
-<a name="l01719"></a>01719   <span class="keywordflow">return</span> 0;
-<a name="l01720"></a>01720 }
-<a name="l01721"></a>01721 
-<a name="l01722"></a>01722 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01738"></a>01738 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01739"></a>01739 
-<a name="l01740"></a>01740 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l01741"></a>01741 sinfo_function1d_search_value(
-<a name="l01742"></a>01742     <span class="keywordtype">double</span>  *       x,
-<a name="l01743"></a>01743     <span class="keywordtype">int</span>             len,
-<a name="l01744"></a>01744     <span class="keywordtype">double</span>          key,
-<a name="l01745"></a>01745     <span class="keywordtype">int</span>     *       foundPtr
-<a name="l01746"></a>01746 )
-<a name="l01747"></a>01747 {
-<a name="l01748"></a>01748     <span class="keywordtype">int</span> high,
-<a name="l01749"></a>01749                 low,
-<a name="l01750"></a>01750                 middle;
-<a name="l01751"></a>01751 
-<a name="l01752"></a>01752     low  = 0;
-<a name="l01753"></a>01753     high = len - 1;
-<a name="l01754"></a>01754 
-<a name="l01755"></a>01755     <span class="keywordflow">while</span> (high >= low) {
-<a name="l01756"></a>01756       middle = (high + low) / 2;
-<a name="l01757"></a>01757       <span class="keywordflow">if</span> (key > x[middle]) {
-<a name="l01758"></a>01758     low = middle + 1;
-<a name="l01759"></a>01759       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key < x[middle]) {
-<a name="l01760"></a>01760     high = middle - 1;
-<a name="l01761"></a>01761       } <span class="keywordflow">else</span> {
-<a name="l01762"></a>01762     *foundPtr = 1;
-<a name="l01763"></a>01763     <span class="keywordflow">return</span> (middle);
-<a name="l01764"></a>01764       }
-<a name="l01765"></a>01765     }
-<a name="l01766"></a>01766     *foundPtr = 0;
-<a name="l01767"></a>01767     <span class="keywordflow">return</span> (low);
-<a name="l01768"></a>01768 }
-<a name="l01769"></a>01769 
-<a name="l01770"></a>01770 
-<a name="l01771"></a>01771 <span class="comment">/*</span>
-<a name="l01772"></a>01772 <span class="comment">cpl_vector * sinfo_vector_filter_median_create(</span>
-<a name="l01773"></a>01773 <span class="comment">        const cpl_vector * v, </span>
-<a name="l01774"></a>01774 <span class="comment">        int                hw)</span>
-<a name="l01775"></a>01775 <span class="comment">{</span>
-<a name="l01776"></a>01776 <span class="comment">    cpl_vector * filtered;</span>
-<a name="l01777"></a>01777 <span class="comment">    double     * row;</span>
-<a name="l01778"></a>01778 <span class="comment">    int          i, j, k, size;</span>
-<a name="l01779"></a>01779 <span class="comment">    double temp;</span>
-<a name="l01780"></a>01780 <span class="comment">    </span>
-<a name="l01781"></a>01781 <span class="comment">    size = cpl_vector_get_size(v);</span>
-<a name="l01782"></a>01782 <span class="comment">    filtered = cpl_vector_new(size);</span>
-<a name="l01783"></a>01783 <span class="comment"></span>
-<a name="l01784"></a>01784 <span class="comment">    row = cpl_malloc((2*hw+1) * sizeof(double));</span>
-<a name="l01785"></a>01785 <span class="comment">    for (i=0; i<size; i++) {</span>
-<a name="l01786"></a>01786 <span class="comment">      k = 0;</span>
-<a name="l01787"></a>01787 <span class="comment">      for (j=-hw; j<=hw; j++) </span>
-<a name="l01788"></a>01788 <span class="comment">    if ( (i+j) >= 0 && (i+j) < size) {</span>
-<a name="l01789"></a>01789 <span class="comment">      temp = cpl_vector_get (v, i+j);</span>
-<a name="l01790"></a>01790 <span class="comment">      row[k] = temp;</span>
-<a name="l01791"></a>01791 <span class="comment">      k++;</span>
-<a name="l01792"></a>01792 <span class="comment">    }</span>
-<a name="l01793"></a>01793 <span class="comment">      cpl_tools_sort_double (row, k);</span>
-<a name="l01794"></a>01794 <span class="comment">      if (k%2 == 1)</span>
-<a name="l01795"></a>01795 <span class="comment">    temp = row[k/2];</span>
-<a name="l01796"></a>01796 <span class="comment">      else</span>
-<a name="l01797"></a>01797 <span class="comment">    temp = row[k/2-1];</span>
-<a name="l01798"></a>01798 <span class="comment">      cpl_vector_set (filtered, i, temp);</span>
-<a name="l01799"></a>01799 <span class="comment">    }</span>
-<a name="l01800"></a>01800 <span class="comment">    cpl_free(row);</span>
-<a name="l01801"></a>01801 <span class="comment">    return filtered;</span>
-<a name="l01802"></a>01802 <span class="comment">}</span>
-<a name="l01803"></a>01803 <span class="comment">*/</span>
-<a name="l01804"></a>01804 
-<a name="l01805"></a>01805 <span class="keyword">static</span> cpl_vector * 
-<a name="l01806"></a>01806 sinfo_juha_vector_filter_median_create(
-<a name="l01807"></a>01807         <span class="keyword">const</span> cpl_vector * v, 
-<a name="l01808"></a>01808         <span class="keywordtype">int</span>                hw)
-<a name="l01809"></a>01809 {
-<a name="l01810"></a>01810     cpl_vector * filtered=NULL;
-<a name="l01811"></a>01811     <span class="keywordtype">double</span>     * row=NULL;
-<a name="l01812"></a>01812     <span class="keywordtype">int</span>          i, j, k,  size;
-<a name="l01813"></a>01813     <span class="keywordtype">double</span> temp;
-<a name="l01814"></a>01814     
-<a name="l01815"></a>01815     size = cpl_vector_get_size(v);
-<a name="l01816"></a>01816     filtered = cpl_vector_new(size);
-<a name="l01817"></a>01817 
-<a name="l01818"></a>01818     row = cpl_malloc((2*hw+1) * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01819"></a>01819     <span class="keywordflow">for</span> (i=0; i<size; i++) {
-<a name="l01820"></a>01820       k = 0;
-<a name="l01821"></a>01821       <span class="keywordflow">for</span> (j=-hw; j<=hw; j++) 
-<a name="l01822"></a>01822     <span class="keywordflow">if</span> ( (i+j) >= 0 && (i+j) < size) {
-<a name="l01823"></a>01823       temp = cpl_vector_get (v, i+j);
-<a name="l01824"></a>01824       row[k] = temp;
-<a name="l01825"></a>01825       k++;
-<a name="l01826"></a>01826     }
-<a name="l01827"></a>01827       sinfo_tools_sort_double (row, k);
-<a name="l01828"></a>01828 
-<a name="l01829"></a>01829       <span class="keywordflow">if</span> (k%2 == 1)
-<a name="l01830"></a>01830     temp = row[k/2];
-<a name="l01831"></a>01831       <span class="keywordflow">else</span>
-<a name="l01832"></a>01832     temp = row[k/2-1];
-<a name="l01833"></a>01833       cpl_vector_set (filtered, i, temp);
-<a name="l01834"></a>01834     }
-<a name="l01835"></a>01835     cpl_free(row);
-<a name="l01836"></a>01836     <span class="keywordflow">return</span> filtered;
-<a name="l01837"></a>01837 }
-<a name="l01838"></a>01838 
-<a name="l01839"></a>01839 <span class="preprocessor">#define CPL_PIX_STACK_SIZE 50</span>
-<a name="l01840"></a>01840 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01851"></a>01851 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l01852"></a>01852 <span class="keyword">static</span> cpl_error_code sinfo_tools_sort_double(
-<a name="l01853"></a>01853         <span class="keywordtype">double</span>  *   pix_arr,
-<a name="l01854"></a>01854         <span class="keywordtype">int</span>         n)
-<a name="l01855"></a>01855 {
-<a name="l01856"></a>01856     <span class="keywordtype">int</span>         i, ir, j, k, l;
-<a name="l01857"></a>01857     <span class="keywordtype">int</span>     *   i_stack ;
-<a name="l01858"></a>01858     <span class="keywordtype">int</span>         j_stack ;
-<a name="l01859"></a>01859     <span class="keywordtype">double</span>      a ;
-<a name="l01860"></a>01860     
-<a name="l01861"></a>01861     <span class="comment">/* Check entries */</span>
-<a name="l01862"></a>01862     cpl_ensure(pix_arr, CPL_ERROR_NULL_INPUT, CPL_ERROR_NULL_INPUT) ;
-<a name="l01863"></a>01863 
-<a name="l01864"></a>01864     ir = n ;
-<a name="l01865"></a>01865     l = 1 ;
-<a name="l01866"></a>01866     j_stack = 0 ;
-<a name="l01867"></a>01867     i_stack = malloc(CPL_PIX_STACK_SIZE * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01868"></a>01868     <span class="keywordflow">for</span> (;;) {
-<a name="l01869"></a>01869         <span class="keywordflow">if</span> (ir-l < 7) {
-<a name="l01870"></a>01870             <span class="keywordflow">for</span> (j=l+1 ; j<=ir ; j++) {
-<a name="l01871"></a>01871                 a = pix_arr[j-1];
-<a name="l01872"></a>01872                 <span class="keywordflow">for</span> (i=j-1 ; i>=1 ; i--) {
-<a name="l01873"></a>01873                     <span class="keywordflow">if</span> (pix_arr[i-1] <= a) <span class="keywordflow">break</span>;
-<a name="l01874"></a>01874                     pix_arr[i] = pix_arr[i-1];
-<a name="l01875"></a>01875                 }
-<a name="l01876"></a>01876                 pix_arr[i] = a;
-<a name="l01877"></a>01877             }
-<a name="l01878"></a>01878             <span class="keywordflow">if</span> (j_stack == 0) <span class="keywordflow">break</span>;
-<a name="l01879"></a>01879             ir = i_stack[j_stack-- -1];
-<a name="l01880"></a>01880             l  = i_stack[j_stack-- -1];
-<a name="l01881"></a>01881         } <span class="keywordflow">else</span> {
-<a name="l01882"></a>01882             k = (l+ir) >> 1;
-<a name="l01883"></a>01883             SINFO_DOUBLE_SWAP(pix_arr[k-1], pix_arr[l])
-<a name="l01884"></a>01884             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[ir-1]) {
-<a name="l01885"></a>01885                 SINFO_DOUBLE_SWAP(pix_arr[l], pix_arr[ir-1])
-<a name="l01886"></a>01886             }
-<a name="l01887"></a>01887             <span class="keywordflow">if</span> (pix_arr[l-1] > pix_arr[ir-1]) {
-<a name="l01888"></a>01888                 SINFO_DOUBLE_SWAP(pix_arr[l-1], pix_arr[ir-1])
-<a name="l01889"></a>01889             }
-<a name="l01890"></a>01890             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[l-1]) {
-<a name="l01891"></a>01891                 SINFO_DOUBLE_SWAP(pix_arr[l], pix_arr[l-1])
-<a name="l01892"></a>01892             }
-<a name="l01893"></a>01893             i = l+1;
-<a name="l01894"></a>01894             j = ir;
-<a name="l01895"></a>01895             a = pix_arr[l-1];
-<a name="l01896"></a>01896             <span class="keywordflow">for</span> (;;) {
-<a name="l01897"></a>01897                 <span class="keywordflow">do</span> i++; <span class="keywordflow">while</span> (pix_arr[i-1] < a);
-<a name="l01898"></a>01898                 <span class="keywordflow">do</span> j--; <span class="keywordflow">while</span> (pix_arr[j-1] > a);
-<a name="l01899"></a>01899                 <span class="keywordflow">if</span> (j < i) <span class="keywordflow">break</span>;
-<a name="l01900"></a>01900                 SINFO_DOUBLE_SWAP(pix_arr[i-1], pix_arr[j-1]);
-<a name="l01901"></a>01901             } 
-<a name="l01902"></a>01902             pix_arr[l-1] = pix_arr[j-1];
-<a name="l01903"></a>01903             pix_arr[j-1] = a; 
-<a name="l01904"></a>01904             j_stack += 2; 
-<a name="l01905"></a>01905             <span class="keywordflow">if</span> (j_stack > CPL_PIX_STACK_SIZE) {
-<a name="l01906"></a>01906                 <span class="comment">/* Should never reach here */</span>
-<a name="l01907"></a>01907                 free(i_stack);
-<a name="l01908"></a>01908                 <span class="keywordflow">return</span> CPL_ERROR_ILLEGAL_INPUT ; 
-<a name="l01909"></a>01909             } 
-<a name="l01910"></a>01910             <span class="keywordflow">if</span> (ir-i+1 >= j-l) {
-<a name="l01911"></a>01911                 i_stack[j_stack-1] = ir;
-<a name="l01912"></a>01912                 i_stack[j_stack-2] = i;
-<a name="l01913"></a>01913                 ir = j-1;
-<a name="l01914"></a>01914             } <span class="keywordflow">else</span> {
-<a name="l01915"></a>01915                 i_stack[j_stack-1] = j-1;
-<a name="l01916"></a>01916                 i_stack[j_stack-2] = l;
-<a name="l01917"></a>01917                 l = i;
-<a name="l01918"></a>01918             }
-<a name="l01919"></a>01919         }
-<a name="l01920"></a>01920     }
-<a name="l01921"></a>01921     free(i_stack) ;
-<a name="l01922"></a>01922     <span class="keywordflow">return</span> CPL_ERROR_NONE ;
-<a name="l01923"></a>01923 }
-<a name="l01924"></a>01924 
-<a name="l01925"></a>01925 <span class="keyword">static</span> cpl_vector * 
-<a name="l01926"></a>01926 sinfo_vector_filter_median_create(
-<a name="l01927"></a>01927         <span class="keyword">const</span> cpl_vector * v, 
-<a name="l01928"></a>01928         <span class="keywordtype">int</span>                hw)
-<a name="l01929"></a>01929 {
-<a name="l01930"></a>01930     cpl_vector * filtered;
-<a name="l01931"></a>01931     cpl_vector * row;
-<a name="l01932"></a>01932     <span class="keywordtype">int</span>          i, j, k, size;
-<a name="l01933"></a>01933     <span class="keywordtype">double</span> temp;
-<a name="l01934"></a>01934     
-<a name="l01935"></a>01935     <span class="comment">/* Create the filtered vector */</span>
-<a name="l01936"></a>01936     size = cpl_vector_get_size(v);
-<a name="l01937"></a>01937     filtered = cpl_vector_new(size);
-<a name="l01938"></a>01938 
-<a name="l01939"></a>01939     <span class="comment">/* median filter on all central items */</span>
-<a name="l01940"></a>01940     row = cpl_vector_new((2*hw+1));
-<a name="l01941"></a>01941     <span class="keywordflow">for</span> (i=0; i<size; i++) {
-<a name="l01942"></a>01942       k = 0;
-<a name="l01943"></a>01943       <span class="keywordflow">for</span> (j=-hw; j<=hw; j++) 
-<a name="l01944"></a>01944     <span class="keywordflow">if</span> ( (i+j) >= 0 && (i+j) < size) {
-<a name="l01945"></a>01945       temp = cpl_vector_get (v, i+j);
-<a name="l01946"></a>01946       cpl_vector_set(row,k,temp);
-<a name="l01947"></a>01947       k++;
-<a name="l01948"></a>01948     }
-<a name="l01949"></a>01949       <span class="comment">/*  this returns ~2e8 when all the values are 1.0....*/</span>
-<a name="l01950"></a>01950 <span class="comment">/*       temp = cpl_tools_get_median_double(row, k); */</span>
-<a name="l01951"></a>01951       cpl_vector_sort(row, +1);
-<a name="l01952"></a>01952       <span class="keywordflow">if</span> (k%2 == 1) {
-<a name="l01953"></a>01953     temp = cpl_vector_get(row,k/2);
-<a name="l01954"></a>01954       }
-<a name="l01955"></a>01955       <span class="keywordflow">else</span> {
-<a name="l01956"></a>01956     temp = cpl_vector_get(row,k/2-1);
-<a name="l01957"></a>01957       }
-<a name="l01958"></a>01958 
-<a name="l01959"></a>01959       sinfo_msg(<span class="stringliteral">"value = %g "</span>, temp);
-<a name="l01960"></a>01960       cpl_vector_set (filtered, i, temp);
-<a name="l01961"></a>01961     }
-<a name="l01962"></a>01962     cpl_vector_delete(row);
-<a name="l01963"></a>01963     <span class="keywordflow">return</span> filtered;
-<a name="l01964"></a>01964 }
-<a name="l01965"></a>01965 
-<a name="l01966"></a>01966 <span class="comment">/*</span>
-<a name="l01967"></a>01967 <span class="comment"> *  A NaN safe version of cpl_image_get_median_window</span>
-<a name="l01968"></a>01968 <span class="comment"> */</span>
-<a name="l01969"></a>01969 <span class="keyword">static</span> <span class="keywordtype">double</span> 
-<a name="l01970"></a>01970 sinfo_image_get_median_window  (<span class="keyword">const</span> cpl_image *image, 
-<a name="l01971"></a>01971                        <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury)
-<a name="l01972"></a>01972 {
-<a name="l01973"></a>01973   cpl_image *window;
-<a name="l01974"></a>01974   <span class="keywordtype">float</span> *data;
-<a name="l01975"></a>01975   <span class="keywordtype">double</span> *array, median;
-<a name="l01976"></a>01976   <span class="keywordtype">int</span> size, i,j;
-<a name="l01977"></a>01977 
-<a name="l01978"></a>01978   window = cpl_image_extract (image, llx, lly, urx, ury);
-<a name="l01979"></a>01979   size = (urx-llx+1)*(ury-lly+1);
-<a name="l01980"></a>01980   data = cpl_image_get_data_float(window);
-<a name="l01981"></a>01981 
-<a name="l01982"></a>01982   array = (<span class="keywordtype">double</span>*)cpl_calloc ( size, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01983"></a>01983   j = 0;
-<a name="l01984"></a>01984   <span class="keywordflow">for</span> (i=0; i<size; i++)
-<a name="l01985"></a>01985     <span class="keywordflow">if</span> (!isnan(data[i]))
-<a name="l01986"></a>01986       array[j++] = data[i];
-<a name="l01987"></a>01987   
-<a name="l01988"></a>01988   <span class="keywordflow">if</span> (j>0)
-<a name="l01989"></a>01989     sinfo_tools_sort_double (array, j);
-<a name="l01990"></a>01990   
-<a name="l01991"></a>01991   <span class="keywordflow">if</span> (j == 0 || 2*j<size)
-<a name="l01992"></a>01992     median = 0./0.;
-<a name="l01993"></a>01993   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j%2 == 1) 
-<a name="l01994"></a>01994     median = array[j/2];
-<a name="l01995"></a>01995   <span class="keywordflow">else</span> 
-<a name="l01996"></a>01996     median = array[j/2-1];
-<a name="l01997"></a>01997 
-<a name="l01998"></a>01998   cpl_image_delete (window);
-<a name="l01999"></a>01999   cpl_free (array);
-<a name="l02000"></a>02000   
-<a name="l02001"></a>02001   <span class="keywordflow">return</span> (median);
-<a name="l02002"></a>02002 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_illumcorr.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_illumcorr.c,v 1.18 2012/03/03 10:38:03 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.18 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *           Object Data reduction                              *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>          <span class="comment">/* allows the program compilation */</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/* std */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <strings.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <libgen.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <cpl.h></span>  </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_product_config.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_prepare_stacked_frames_config.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_objnod_config.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_new_objnod.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_new_prepare_stacked_frames.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_pro_save.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_hidden.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="preprocessor">#include <sinfo_rec_utils.h></span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">//Only for sinfo_propertylist_has</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="preprocessor">#include <sinfo_dfs.h></span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                            Function prototypes</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_create(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_exec(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr_destroy(cpl_plugin *plugin);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_illumcorr(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor">#define SINFO_DOUBLE_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> cpl_error_code </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> sinfo_tools_sort_double(</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">double</span>  *   pix_arr,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="keywordtype">int</span>         n);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="keyword">static</span> cpl_frame* </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> sinfo_get_dummy_object(cpl_frameset* obj_set);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_illumcorr_config_add (cpl_parameterlist *list);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> create_illumcorr (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id, </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                  cpl_parameterlist *cpl_cfg, </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                  cpl_frameset* sof,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                  <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> sinfo_illumcorr_create_bins (cpl_imagelist *sky, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                  <span class="keywordtype">int</span> spec_bin, </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                  <span class="keywordtype">double</span> min_flux,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                  <span class="keywordtype">int</span> ** start,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                  <span class="keywordtype">int</span> ** end,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                  <span class="keywordtype">int</span> z1, <span class="keywordtype">int</span> z2);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> sinfo_juha_function1d_natural_spline(<span class="keywordtype">double</span> *, <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span> *, </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                      <span class="keywordtype">double</span> *, <span class="keywordtype">int</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> sinfo_function1d_search_value(<span class="keywordtype">double</span> *, <span class="keywordtype">int</span>, <span class="keywordtype">double</span>, <span class="keywordtype">int</span> *) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="keyword">static</span> cpl_vector * </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> sinfo_vector_filter_median_create(<span class="keyword">const</span> cpl_vector * v, <span class="keywordtype">int</span>  hw);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keyword">static</span> cpl_vector * </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> sinfo_juha_vector_filter_median_create(<span class="keyword">const</span> cpl_vector * v, <span class="keywordtype">int</span>  hw);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> sinfo_image_get_median_window  (<span class="keyword">const</span> cpl_image *image, </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                 <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description1[] =</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="stringliteral">"This recipe calculates illumination correction based on sky emission.\n"</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="stringliteral">"The input files are sky (or object) frames tagged\n"</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="stringliteral">" SKY_NODDING (OBJECT_NODDING)\n"</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="stringliteral">"Master calibration frames:\n"</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description2[] =</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="stringliteral">"A corresponding (DIT) dark frame (tag=MASTER_DARK)"</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="stringliteral">"A corresponding (band,preoptics) wavelength map image (tag=WAVE_MAP)\n"</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="stringliteral">"A corresponding (band,preoptics) master flat field (tag=MASTER_FLAT_LAMP)\n"</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="stringliteral">"A corresponding (band,preoptics) master bad pixel map (tag=MASTER_BP_MAP)\n"</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="stringliteral">"A corresponding (band,preoptics) slitlets position frame (tag=SLIT_POS)\n"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="stringliteral">"A corresponding (band) distortion table (tag=DISTORTION)\n"</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="stringliteral">"A corresponding (band) slitlet distance table (tag=SLITLETS_DISTANCE)\n"</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description3[] =</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="stringliteral">"The output is a cube resulting from the analysis of sky emission\n"</span>;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description4[] =</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="stringliteral">"esorex --params sinfo_utl_illumcorr\n"</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="stringliteral">"esorex --help sinfo_utl_illumcorr\n"</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_illumcorr_description[1300];</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> sinfo_utl_illumcorr_create(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">   * We have to provide the option we accept to the application.</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">   * We need to setup our parameter list and hook it into the recipe</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">   * interface.</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>   cpl_recipe *recipe = (cpl_recipe *)plugin;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>   recipe->parameters = cpl_parameterlist_new();</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>   }</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>   cpl_error_reset();</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>   <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">   * Fill the parameter list.</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   sinfo_product_config_add (recipe->parameters);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   sinfo_prepare_stacked_frames_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>   sinfo_objnod_config_add(recipe->parameters); </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>   sinfo_illumcorr_config_add (recipe->parameters);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>  </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> sinfo_utl_illumcorr_exec(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>  </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   <span class="keywordflow">if</span>(recipe->parameters == NULL) {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   <span class="keywordflow">if</span>(recipe->frames == NULL) {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   }</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>   code=sinfo_utl_illumcorr(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment">       At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   } </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> sinfo_utl_illumcorr_destroy(cpl_plugin *plugin)</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   cpl_recipe *recipe = (cpl_recipe *) plugin;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="comment">   * We just destroy what was created during the plugin initializzation phase</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">   * i.e. the parameter list. The frame set is managed by the application which</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> <span class="comment">   * called us, so that we must not touch it.</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   cpl_parameterlist_delete(recipe->parameters);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist *list)</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>   cpl_recipe *recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   cpl_plugin *plugin = &recipe->interface;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>   strcpy(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description1);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description2);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description3);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>   strcat(sinfo_utl_illumcorr_description,sinfo_utl_illumcorr_description4);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>   cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>           CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>           SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>           CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>           <span class="stringliteral">"sinfo_utl_illumcorr"</span>,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>           <span class="stringliteral">"Object data reduction"</span>,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>            sinfo_utl_illumcorr_description,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>           <span class="stringliteral">"Juha Reunanen"</span>,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>           <span class="stringliteral">"reunanen at strw.leidenuniv.nl"</span>,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>           sinfo_get_license(),</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>           sinfo_utl_illumcorr_create,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>           sinfo_utl_illumcorr_exec,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>           sinfo_utl_illumcorr_destroy);</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   cpl_pluginlist_append(list, plugin);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment"> * The actual recipe actually start here.</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> sinfo_utl_illumcorr(cpl_parameterlist *config, cpl_frameset *<span class="keyword">set</span>)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   <span class="keywordtype">char</span> outname[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   <span class="keywordtype">int</span> ind=0;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keywordtype">int</span> nsky=0;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="keywordtype">int</span> nobj=0;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordtype">int</span> ncdb=0;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordtype">int</span> nstk=0;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   cpl_frameset  * obj_set=NULL;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>   cpl_frameset  * sky_set=NULL;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   cpl_frameset  * cdb_set=NULL;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   cpl_frameset  * wrk_set=NULL;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   cpl_frameset  * stk_set=NULL;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   cpl_frame     * sky_frm=NULL;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   cpl_frame     * dup_frm=NULL; </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   cpl_frame     * cdb_frm=NULL;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   cpl_frame     * wrk_frm=NULL;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>   cpl_frameset  * ref_set=NULL;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>   cpl_frame     * dark_frm=NULL;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   fake* fk;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   cpl_image           *   ima1=NULL ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>   cpl_image           *   ima2=NULL ;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>   cpl_image           *   resima=NULL ;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>   cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i=NULL;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>   <span class="comment">/* cpl_parameterlist_dump(config); */</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   <span class="keywordflow">if</span>(sinfo_dfs_set_groups(<span class="keyword">set</span>)) {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>   }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   dark_frm = cpl_frameset_find(<span class="keyword">set</span>,PRO_MASTER_DARK);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   <span class="keywordflow">if</span> (dark_frm == NULL) {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot find dark frame"</span>) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   ref_set=cpl_frameset_duplicate(<span class="keyword">set</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   obj_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>   sky_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   cdb_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   fk = sinfo_fake_new();</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>   sinfo_extract_obj_frames(<span class="keyword">set</span>,obj_set);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>   sinfo_extract_sky_frames(<span class="keyword">set</span>,sky_set);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   sinfo_extract_mst_frames(<span class="keyword">set</span>,cdb_set);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>   nobj=cpl_frameset_get_size(obj_set);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>   nsky=cpl_frameset_get_size(sky_set);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   ncdb=cpl_frameset_get_size(cdb_set);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> </div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   <span class="keywordflow">if</span> ((nobj==0) && (nsky==0)) {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input set"</span>);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>   }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment">   *  Create median collapsed sky frame either from real SKY frames, </span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">   *  or from jittered OBJECT frames</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   <span class="keywordflow">if</span> ( nsky != 0) {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="keywordflow">if</span>( (sky_frm = sinfo_get_dummy_object(sky_set)) == NULL) {</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>       cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>       cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>       cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>       <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     }</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>   <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordflow">if</span>( (sky_frm = sinfo_get_dummy_object(obj_set)) == NULL) {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem to get dummy frame"</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>       cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>       cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>       cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>       sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>       <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>   }</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>   </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> <span class="comment">   *  Seems it's not possible to use draks as sky (due to INS.GRAT1.ENC)</span></div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="comment">   *  and stacking phase subtracts dark only in special circumstances...</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   ima1 = cpl_image_load(cpl_frame_get_filename(sky_frm),CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   ima2 = cpl_image_load(cpl_frame_get_filename(dark_frm),CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   resima = cpl_image_subtract_create(ima1, ima2);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm), 0);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   cpl_image_delete(ima1);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   cpl_image_delete(ima2);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   product_frame = cpl_frame_new();</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   cpl_frame_set_filename(product_frame, <span class="stringliteral">"out_fake_object2.fits"</span>) ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>   cpl_frame_set_tag(product_frame, <span class="stringliteral">"OBJECT_NODDING"</span>) ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_RAW) ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="comment">//cpl_frame_set_level(product_frame, CPL_FR) ;</span></div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   cpl_image_save(resima, <span class="stringliteral">"out_fake_object2.fits"</span>, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>          CPL_IO_DEFAULT) ;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>   cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   cpl_image_delete(resima) ;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> <span class="comment">   *  Stack it - with some trickery...</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> <span class="comment">   */</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   wrk_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>   dup_frm=cpl_frame_duplicate(product_frame);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   cpl_frame_set_tag   (dup_frm, <span class="stringliteral">"OBJECT_NODDING"</span>);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>   cpl_frame_set_group (dup_frm ,CPL_FRAME_GROUP_RAW);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>   cpl_frameset_insert(wrk_set,dup_frm);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   <span class="comment">/* merge CDB frames to work set */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>   <span class="keywordflow">for</span>(k=0;k<ncdb;k++) {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     cdb_frm=cpl_frameset_get_frame(cdb_set,k);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     dup_frm=cpl_frame_duplicate(cdb_frm);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>     cpl_frameset_insert(wrk_set,dup_frm);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   }</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>   </div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>   <span class="comment">/* defines a new name for the output stacked frame */</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>   sprintf(outname,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"out_stack"</span>,i,<span class="stringliteral">".fits"</span>);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   <span class="keywordflow">if</span>(-1 == sinfo_new_stack_frames(config,wrk_set,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             PRO_OBJECT_NODDING_STACKED,i,fk,cpl_func)) {</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     </div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     cpl_frameset_delete(wrk_set);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     <span class="comment">//cpl_frameset_delete(tot_set);</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>     sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   stk_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   sinfo_contains_frames_kind(wrk_set,stk_set,PRO_STACKED);</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   nstk=cpl_frameset_get_size(stk_set);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   <span class="keywordflow">for</span>(k=0;k<nstk;k++) {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     wrk_frm=cpl_frameset_get_frame(stk_set,k);</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     dup_frm = cpl_frame_duplicate(wrk_frm);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     cpl_frameset_insert(<span class="keyword">set</span>,dup_frm);</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   cpl_frameset_delete(stk_set);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   cpl_frameset_delete(wrk_set);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>   sinfo_msg(<span class="stringliteral">"CREATING SKY CUBE"</span>);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>   </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>   <span class="keywordflow">if</span> ( -1 == (ind=sinfo_new_objnod(cpl_func,config, <span class="keyword">set</span>, PRO_COADD_OBJ ) ) ) {</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"NODDING SCIENCE FRAMES no. %d\n"</span>, ind) ;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>     cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>     cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>     cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>     sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>   }</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>   sinfo_msg(<span class="stringliteral">"CREATED SKY CUBE"</span>);</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>   sinfo_msg(<span class="stringliteral">"------------------------------"</span>) ; </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>   </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span> </div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   stk_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   sinfo_contains_frames_kind(<span class="keyword">set</span>, stk_set, PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>   nstk=cpl_frameset_get_size(stk_set);</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   wrk_frm=cpl_frameset_get_frame(stk_set,0);  </div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   name_i = cpl_frame_get_filename(wrk_frm);</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   </div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   <span class="comment">//cpl_frameset_delete(wrk_set);</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   cpl_frameset_delete(obj_set);</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>   cpl_frameset_delete(sky_set);</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>   cpl_frameset_delete(cdb_set);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>   cpl_frameset_delete(ref_set);</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   sinfo_fake_delete(&fk);</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>   cpl_frame_delete(sky_frm);</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   create_illumcorr (cpl_func, config, <span class="keyword">set</span>, name_i);</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span> </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>   <span class="keywordflow">return</span> (0);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span> }</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span> <span class="keyword">static</span> cpl_frame*</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> sinfo_get_dummy_object(cpl_frameset* obj_set)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>   cpl_imagelist* obj_list=NULL;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>   cpl_image* fake_object=NULL;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>   <span class="keywordtype">char</span> filename[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>   cpl_frame* object_frame=NULL;</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span> </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>  </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>   obj_list = cpl_imagelist_load_frameset(obj_set,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   fake_object = cpl_imagelist_collapse_median_create(obj_list);</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>   frame = cpl_frameset_get_frame(obj_set,0);</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>   strcpy(filename,cpl_frame_get_filename(frame));</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>  </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>   <span class="keywordflow">if</span> ((cpl_error_code)((plist = cpl_propertylist_load(filename, 0)) == NULL)) {</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"getting header from reference ima frame %s"</span>,filename);</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>   }</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   <span class="keywordflow">if</span> (sinfo_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     cpl_propertylist_set_string(plist, KEY_NAME_DPR_TYPE, <span class="stringliteral">"OBJECT"</span>);</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     cpl_propertylist_append_string(plist, KEY_NAME_DPR_TYPE,<span class="stringliteral">"OBJECT"</span>) ;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>   }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>        </div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="keywordflow">if</span> (cpl_image_save(fake_object, <span class="stringliteral">"out_fake_object.fits"</span>, CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>                    plist,CPL_IO_DEFAULT)!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot save the product %s"</span>,<span class="stringliteral">"out_fake_object.fits"</span>);</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>   }</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>   cpl_propertylist_delete(plist);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>        </div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>   object_frame = cpl_frame_new() ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>   cpl_frame_set_filename(object_frame, <span class="stringliteral">"out_fake_object.fits"</span>) ;</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>   cpl_frame_set_tag(object_frame, <span class="stringliteral">"OBJECT"</span>) ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>   cpl_frame_set_type(object_frame, CPL_FRAME_TYPE_IMAGE);</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">  cpl_frame_set_group(object_frame, CPL_FRAME_GROUP_PRODUCT);</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>   cpl_frame_set_level(object_frame, CPL_FRAME_LEVEL_FINAL);</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>   cpl_image_delete(fake_object);</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>   cpl_imagelist_delete(obj_list);</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> </div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordflow">return</span> object_frame;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> sinfo_illumcorr_config_add (cpl_parameterlist *list) </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> {</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   }</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span> </div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.spec_bin"</span>,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>                               <span class="stringliteral">"Number of spectral planes to be combined "</span>,</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>                               100, 1, 200);</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-spec_bin"</span>);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.min_flux"</span>,</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>                               CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>                               <span class="stringliteral">"Minimum flux in each spectral bin "</span>,</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>                               0.0);</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-min_flux"</span>);</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span> </div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.center_bins"</span>,</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                               CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                               <span class="stringliteral">"Center the spectral bins at prominent "</span></div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                               <span class="stringliteral">"emission features "</span>,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>                               FALSE);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-center_bins"</span>);</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span> </div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.illumcorr.order"</span>,</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>                  CPL_TYPE_INT,</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>                  <span class="stringliteral">"The order of the polynomial to be fitted "</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>                              <span class="stringliteral">"for each slitlet"</span>,</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>                  <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>                  0,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>                  2,0,1);</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-order"</span>);</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>   </div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.sigma"</span>,</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>                               CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>                               <span class="stringliteral">"Reject n-sigma deviant pixels on each slitlet "</span>,</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>                               3.0);</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-sigma"</span>);</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.iterations"</span>,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>                               <span class="stringliteral">"Number of sigma rejection iterations to run "</span>,</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>                               3);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-iter"</span>);</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> </div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.llx"</span>,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                               <span class="stringliteral">"Reference region coordinates "</span>,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>                               8, 0, 63);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-llx"</span>);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.lly"</span>,</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                               <span class="stringliteral">"Reference region coordinates "</span>,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                               33, 0, 63);</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-lly"</span>);</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span> </div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.urx"</span>,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                               <span class="stringliteral">"Reference region coordinates "</span>,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                               60, 0, 63);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-urx"</span>);</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.ury"</span>,</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>                               <span class="stringliteral">"Reference region coordinates "</span>,</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>                               36, 0, 63);</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-ury"</span>);</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>   p = cpl_parameter_new_enum(<span class="stringliteral">"sinfoni.illumcorr.smooth0"</span>,</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>                  CPL_TYPE_INT,</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>                  <span class="stringliteral">"Smooth zeroth order terms by fitting "</span></div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>                              <span class="stringliteral">"with polynomial (1),"</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>                  <span class="stringliteral">"with median filter (2) or not (0) "</span>,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                  <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>                  0, </div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                  3, 0, 1, 2);</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth0"</span>);</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span> </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth0_order"</span>,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>                               <span class="stringliteral">"Order of the smoothing polynomial for 0th term"</span>,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                               2);</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth_order0"</span>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>   p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.illumcorr.smooth0_size"</span>,</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>                               <span class="stringliteral">"Size of the median filter for 0th "</span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>                               <span class="stringliteral">"order smoothing "</span>,</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>                               51,3, 301);</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth0_size"</span>);</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth1"</span>,</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>                               CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>                               <span class="stringliteral">"Smooth higher (>0) order polynomials "</span>,</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>                               TRUE);</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth"</span>);</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.smooth1_order"</span>,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                               CPL_TYPE_INT,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>                               <span class="stringliteral">"Smoothing order for higher terms "</span>,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>                               2);</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"illumcorr-smooth_order"</span>);</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span> </div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.illumcorr.illumcorr_sigma"</span>,</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>                               CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>                               <span class="stringliteral">"Reject all fits for which the rms is "</span></div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                               <span class="stringliteral">"illumcorr-sigma times bigger than the "</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                               <span class="stringliteral">"median rms in each spectral bin"</span> ,</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>                               <span class="stringliteral">"sinfoni.illumcorr"</span>,</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>                               5.0);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   cpl_parameter_set_alias(p,CPL_PARAMETER_MODE_CLI,</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>                             <span class="stringliteral">"illumcorr-illumcorr_sigma"</span>);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span> </div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span> }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> create_illumcorr (<span class="keyword">const</span> <span class="keywordtype">char</span>* plugin_id,</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>           cpl_parameterlist *cpl_cfg,</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>           cpl_frameset* sof,</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>           <span class="keyword">const</span> <span class="keywordtype">char</span> *name_i)</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> {</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   cpl_parameter *p=NULL;</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   <span class="keywordtype">double</span>        min_flux=0;</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>   <span class="keywordtype">double</span>        sigma=0;</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordtype">double</span>        il_sigma=0;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>   <span class="keywordtype">int</span>           spec_bin=0;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   <span class="keywordtype">int</span>           _order=0;</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>   cpl_imagelist *sky=NULL;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   cpl_imagelist *binnedsky=NULL;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>   cpl_imagelist *result=NULL;</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>   cpl_image     *temp_image=NULL;</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>   cpl_image     *temp_image2=NULL;</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>   <span class="keywordtype">int</span>            nplanes=0;</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>   <span class="keywordtype">int</span>            i=0;</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>   <span class="keywordtype">int</span>            j=0;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>   <span class="keywordtype">int</span>            k=0;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>   <span class="keywordtype">int</span>            kk=0;</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>   <span class="keywordtype">int</span>            n=0;</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>   <span class="keywordtype">int</span>            slitlet=0;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>   <span class="keywordtype">int</span>            bin=0;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>   <span class="keywordtype">double</span>        *median=NULL;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   <span class="keywordtype">double</span>        *pos=NULL;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   <span class="keywordtype">double</span>         temp=0;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <span class="keywordtype">double</span>         temp2=0;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   <span class="keywordtype">double</span>        *inter_pos=NULL;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>   <span class="keywordtype">double</span>        *inter_val=NULL;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   <span class="keywordtype">double</span>        *plane_pos=NULL;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>   <span class="keywordtype">double</span>        *plane_val=NULL;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>   <span class="keywordtype">int</span>            llx=0;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   <span class="keywordtype">int</span>            lly=0;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   <span class="keywordtype">int</span>            urx=0;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>   <span class="keywordtype">int</span>            ury=0;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>   <span class="keywordtype">int</span>            smooth_order=0;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   <span class="keywordtype">int</span>            iter=0;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>   cpl_vector    *row=NULL;</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   cpl_vector    *model=NULL;</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>   cpl_vector    *xpos=NULL;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>   cpl_vector    *tempvector=NULL;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>   cpl_vector *tempvector2=NULL;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>   <span class="keywordtype">double</span>         mse=0.0;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>   <span class="keywordtype">double</span>         stddev=0.0;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>   cpl_polynomial*poly=NULL;</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   cpl_polynomial *poly2=NULL;</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>   <span class="keywordtype">double</span>        *temparray=NULL;</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>   <span class="keywordtype">double</span>  *tempxarray=NULL;</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>   <span class="keywordtype">double</span>  * tempsarray=NULL;</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>   cpl_polynomial**coeffs=NULL;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>   <span class="keywordtype">float</span>         *data=NULL;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   <span class="keywordtype">double</span>        *rms_values=NULL;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   <span class="keywordtype">double</span>         rms_array[32];</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>   <span class="keywordtype">int</span> smooth=0;</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   <span class="keywordtype">int</span> smooth0=0;</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>   <span class="keywordtype">int</span> smooth_order0=0;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>   <span class="keywordtype">int</span> smooth_size0=0;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>   <span class="keywordtype">int</span> center_bins = 0;</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>   <span class="keywordtype">int</span> *bin_start=NULL;</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>   <span class="keywordtype">int</span> *bin_end=NULL;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>   <span class="keywordtype">int</span> z1=0;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>   <span class="keywordtype">int</span> z2=0;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>   <span class="keywordtype">int</span> nbins=0;</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span> </div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>   FILE          *dumpfile=NULL;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   <span class="keywordtype">int</span> order[32];</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordtype">int</span> ok[64];</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">int</span> nbad=0;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span> </div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span> </div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> <span class="comment">   *  Get parameters</span></div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.spec_bin"</span>);</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   spec_bin = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.min_flux"</span>);</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   min_flux =  cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.order"</span>);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   _order = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.sigma"</span>);</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   sigma = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.llx"</span>);</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   llx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.lly"</span>);</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>   lly = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.urx"</span>);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   urx = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.ury"</span>);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   ury = cpl_parameter_get_int(p);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.illumcorr_sigma"</span>);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   il_sigma = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0"</span>);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   smooth0 = cpl_parameter_get_int (p);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0_order"</span>);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>   smooth_order0 = cpl_parameter_get_int (p);</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth0_size"</span>);</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   smooth_size0 = cpl_parameter_get_int (p);</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span> </div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth1"</span>);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>   smooth = cpl_parameter_get_bool (p);</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.smooth1_order"</span>);</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   smooth_order = cpl_parameter_get_int (p);</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> </div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.iterations"</span>);</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   iter = cpl_parameter_get_int (p);</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> </div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>   p = cpl_parameterlist_find(cpl_cfg, <span class="stringliteral">"sinfoni.illumcorr.center_bins"</span>);</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   center_bins = cpl_parameter_get_bool (p);</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> <span class="comment">/*   cpl_msg_set_level(CPL_MSG_DEBUG); */</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span> </div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span> <span class="comment">   *  Allocate resources</span></div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   sky       = cpl_imagelist_load(name_i, CPL_TYPE_FLOAT, 0);</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   nplanes   = cpl_imagelist_get_size(sky);</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>   <span class="comment">/*  Determine the start and end points of data within the </span></div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span> <span class="comment">   *  reference region  */</span>     </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>   z1 = 0;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>   z2=nplanes -1;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>   <span class="keywordflow">while</span> (z1<nplanes </div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>      && isnan(cpl_image_get_mean_window(cpl_imagelist_get(sky, z1),</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>                         llx, lly, urx, ury)))</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     z1++;</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>   <span class="keywordflow">while</span> (z2>=0</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>      && isnan(cpl_image_get_mean_window(cpl_imagelist_get(sky, z2),</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>                         llx, lly, urx, ury)))</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     z2--;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   z1 += 2;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>   z2 -= 2;</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   <span class="keywordflow">if</span> (z1>=nplanes || z2 <0 || z2<=z1) {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"Start z = %d, end z = %d"</span>, z1, z2);</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     cpl_imagelist_delete (sky);</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     <span class="keywordflow">return</span> (-1);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>   }</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>   sinfo_msg (<span class="stringliteral">"Start z = %d, end z = %d"</span>, z1, z2);</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>   binnedsky = cpl_imagelist_new ();</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>   median    = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>   pos       = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>   temparray = (<span class="keywordtype">double</span>*) cpl_calloc(64, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>   tempxarray= (<span class="keywordtype">double</span>*) cpl_calloc(64, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>   tempsarray= (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>   plane_pos = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>   plane_val = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes/spec_bin, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>   coeffs    = (cpl_polynomial**) cpl_calloc(32*(nplanes/spec_bin), </div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>                         <span class="keyword">sizeof</span>(cpl_polynomial*));</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>   rms_values= (<span class="keywordtype">double</span>*) cpl_calloc (32*(nplanes/spec_bin), <span class="keyword">sizeof</span> (double));</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>   inter_pos = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>   inter_val = (<span class="keywordtype">double</span>*) cpl_calloc (nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> </div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>   model     = cpl_vector_new(64);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>   xpos      = cpl_vector_new(64);</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> </div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>   <span class="keywordflow">for</span> (i=0; i<64; i++)</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     cpl_vector_set(xpos, i, (<span class="keywordtype">double</span>)(i)-((<span class="keywordtype">double</span>)urx-(<span class="keywordtype">double</span>)llx)/2.0);</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>   <span class="keywordflow">for</span> (i=0; i<nplanes; i++)</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>     inter_pos[i] = (<span class="keywordtype">double</span>)i;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span> </div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span> <span class="comment">   *  This array could be given as input file for the recipe.</span></div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span> <span class="comment">   *  Generally, 0th order fitting is sufficient (and of course</span></div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span> <span class="comment">   *  more robust), but few slitlets might require 1st order.</span></div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>   <span class="keywordflow">for</span> (i=0; i<32; i++)</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     order[i] = _order;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> </div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> </div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>   <span class="keywordflow">if</span> (center_bins == 1) {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>     sinfo_msg(<span class="stringliteral">"Using centering on emission features\n"</span>);</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>     nbins = sinfo_illumcorr_create_bins (sky,llx, lly, urx, ury,</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>                      spec_bin, min_flux,</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>                      &bin_start, &bin_end,</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                      z1, z2);</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   }</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>     sinfo_msg(<span class="stringliteral">"Using simple spectral binning - "</span></div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>           <span class="stringliteral">"not centering on emission features\n"</span>);</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>     nbins = (z2-z1)/spec_bin;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>     bin_start = (<span class="keywordtype">int</span>*)cpl_calloc(nbins+1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>     bin_end =  (<span class="keywordtype">int</span>*)cpl_calloc(nbins+1, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>     <span class="keywordflow">for</span> (i = 0; i<nbins; i++) {</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>       bin_start[i] = z1+i*spec_bin;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>       bin_end[i]   = z1+(i+1)*spec_bin - 1;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>     }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>     <span class="keywordflow">if</span> (bin_end[nbins-1]<z2-spec_bin/10) {</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>       bin_start[nbins] = bin_end[nbins-1]+1;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>       bin_end[nbins] = z2;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>       nbins++;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>     }</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   }</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>   </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> <span class="comment">   *  - bin the cube in spectral direction</span></div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> <span class="comment">   *  - calculate the median (=reference value) in region </span></div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> <span class="comment">   *    (llx,lly) - (urx,ury)</span></div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> <span class="comment">   *  - calculate the weighted position of the each spectral bin</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>   sinfo_msg(<span class="stringliteral">"Binning the cube and calculating statistics\n"</span>);</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>   <span class="keywordflow">for</span> (i=0; i<nbins; i++) {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     temp_image = cpl_image_duplicate(cpl_imagelist_get(sky, bin_start[i]));</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     median[i] = sinfo_image_get_median_window (temp_image, llx, lly, urx, ury);</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     pos[i] = median[i] * (double)bin_start[i];</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     cpl_imagelist_set (binnedsky, temp_image, i);</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordflow">for</span> (j=bin_start[i]+1; j<bin_end[i]; j++) {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>       temp_image2 = cpl_imagelist_get (sky, j);</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>       cpl_image_add (temp_image, temp_image2);</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>       temp = sinfo_image_get_median_window (temp_image2, llx, lly, urx, ury);</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>       median[i] = median[i] + temp;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>       pos[i] = pos[i] + temp*(double)j;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     }</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     temp2 =(double)(bin_end[i]-bin_start[i]+1);</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     cpl_image_divide_scalar (temp_image, temp2);</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     pos[i] = pos[i]/median[i];</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     median[i] = median[i] / temp2;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"median image=%g at %g"</span>,median[i], pos[i]); </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   }</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>   </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   sinfo_msg(<span class="stringliteral">"Fitting slitlets between x=%d - x=%d\n"</span>, llx, urx);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   sinfo_msg(<span class="stringliteral">"Fitting order %d\n"</span>, _order); </div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>   <span class="keywordflow">for</span> (k=0;k<nbins; k++) {</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keywordflow">if</span> (median[k]>min_flux) {</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>       <span class="keywordflow">for</span> (j=0; j<32; j++) {</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     row=cpl_vector_new_from_image_row(cpl_imagelist_get(binnedsky,k),2*j+1);</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     n = 0;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     <span class="keywordflow">for</span> (i=llx; i<=urx; i++) {</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>       <span class="keywordflow">if</span> (!isnan(cpl_vector_get(row, i))) {</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>         ok[i] = 1;</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         temparray[n]  = cpl_vector_get(row, i);</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         tempxarray[n] = cpl_vector_get(xpos, i);</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>         n++;</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>       }</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         ok[i] = 0;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>     }</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span> </div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="comment">/* The ends of cube are always filled with NaNs => n==0*/</span></div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     <span class="keywordflow">if</span> (n>20) {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>       tempvector = cpl_vector_wrap (n, temparray);</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>       tempvector2= cpl_vector_wrap (n, tempxarray);</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>       poly = cpl_polynomial_fit_1d_create (tempvector2, tempvector, </div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>                                                order[j], &mse);</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>       </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>       <span class="keywordflow">if</span> (poly == NULL)</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>         sinfo_msg(<span class="stringliteral">"Fitting failed (plane %d, row %d): %s"</span>,</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>                  k, j, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         <span class="keywordflow">if</span> (sigma>0 && iter>0) {</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>           <span class="keywordflow">for</span> (kk = 0; kk<iter; kk++) {</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         cpl_vector_fill_polynomial (model, poly, 0.0, 1.0);</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>         cpl_vector_subtract (model, row);</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         </div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <span class="comment">/* Calculate stdev NaN-correctly */</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>         n = 0;</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>           <span class="keywordflow">if</span> (ok[i] == 1) </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>             temparray[n++]  = cpl_vector_get(model, i);</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         stddev = cpl_vector_get_stdev(tempvector);</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>         </div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) </div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>           <span class="keywordflow">if</span> (ok[i] == 1) </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>             <span class="keywordflow">if</span> (fabs(cpl_vector_get(model, i))>(stddev*sigma))</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>               ok[i] = 0;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         </div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>         </div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>         n = 0;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         <span class="keywordflow">for</span> (i=llx; i<=urx; i++) {</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>           <span class="keywordflow">if</span> (ok[i] == 1) {</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>             temparray[n]  = cpl_vector_get(row, i);</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>             tempxarray[n] = cpl_vector_get(xpos, i);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>             n++;</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>           }</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>         }</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>         cpl_polynomial_delete(poly);</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>         <span class="keywordflow">if</span> (n>20) {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>           cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>           cpl_vector_unwrap (tempvector2);</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>           tempvector = cpl_vector_wrap (n, temparray);</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>           tempvector2= cpl_vector_wrap (n, tempxarray);</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>           stddev = cpl_vector_get_stdev(tempvector);</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>           </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>           poly = cpl_polynomial_fit_1d_create (tempvector2, </div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>                                                        tempvector, </div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>                                                        order[j], &mse);</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>           <span class="keywordflow">if</span> (poly == NULL)</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>         }</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>         <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>           poly = NULL;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>         }</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">/*           printf ("%d %e ", n, stddev); */</span></div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>           }</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>         }</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>         <span class="keywordflow">if</span> (poly!=NULL) {</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>           coeffs[j*nbins+k] = poly;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>           rms_values[j*nbins+k] = sqrt(mse);</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>         }</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>           coeffs[j*nbins+k] = NULL;</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>       }</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>       cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>       cpl_vector_unwrap (tempvector2);</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     }</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     cpl_vector_delete(row);</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>       }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     }</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>   }</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> <span class="comment">   *   These should (probably) be saved in a fits file...</span></div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   sinfo_msg(<span class="stringliteral">"Writing dat out_illum.dat\n"</span>);</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   dumpfile = fopen (<span class="stringliteral">"out_illum.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>   fprintf (dumpfile, <span class="stringliteral">"# slitlet, pos, median, rms, coeff0, coeff1...\n"</span>);</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++)</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>       poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>       <span class="keywordflow">if</span> (poly != NULL) {</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     fprintf (dumpfile, <span class="stringliteral">"%d %f %f %f "</span>,slitlet, pos[bin],</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>          median[bin],</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>          rms_values[slitlet*nbins+bin]);</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>     <span class="keywordflow">for</span> (i=0; i<(cpl_polynomial_get_degree(poly)+1); i++) {</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>       temp = cpl_polynomial_get_coeff (poly, &i);</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>       fprintf (dumpfile, <span class="stringliteral">"%f "</span>, temp);</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     }</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     fprintf (dumpfile, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>       }</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     }</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>   fclose (dumpfile);</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="comment">   *    Remove poor fits:</span></div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">   *      - calculate the median rms of all fits</span></div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> <span class="comment">   *      - throw away the fits whose rms is il_sigma*median_rms</span></div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>   sinfo_msg(<span class="stringliteral">"Removing poor fits - factor %f"</span>, il_sigma);</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>   n = 0;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>   i = 0;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>   nbad=0;</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>   sinfo_msg(<span class="stringliteral">"max loop over bin =%d"</span>,nbins);</div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>   <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     k = 0;</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     <span class="keywordflow">for</span> (slitlet=0; slitlet<32; slitlet++)</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL)</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>     rms_array[k++] = rms_values[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>     <span class="keywordflow">if</span> (k>0) {</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>       <span class="comment">/* For some bizarre reason, cpl_tools_get_median_double returns </span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment">       *  -1076245448.000000 (is that NaN?). On closer inspection,</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="comment">       * it seems to have replaced one of the numbers in array with NaN...*/</span></div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>       tempvector = cpl_vector_wrap (k, &rms_array[0]);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>       temp = cpl_vector_get_median (tempvector);</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>       sinfo_msg(<span class="stringliteral">"median temp=%g"</span>,temp);</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>       cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>       <span class="keywordflow">for</span> (slitlet=0; slitlet<32; slitlet++) </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>       i++;</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>       <span class="keywordflow">if</span> (rms_values[slitlet*nbins+bin]>(il_sigma*temp)) {</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         cpl_polynomial_delete(coeffs[slitlet*nbins+bin]);</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>         coeffs[slitlet*nbins+bin] = NULL;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>         n++;</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>       }</div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>           nbad++;</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     }</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>         </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>     }</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>   }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>   sinfo_msg(<span class="stringliteral">"Removed %d poor fits out of %d. Bad coeffs=%d"</span>, n,i,nbad);</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>   <span class="keywordflow">if</span>(smooth0 == 1) {</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     sinfo_msg(<span class="stringliteral">"Smoothing zeroth terms (order %d)"</span>, smooth_order0);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> <span class="comment">     *  Since the new centering scheme will pro</span></div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> <span class="comment">     */</span> </div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>       k = 0;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>       poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>       i = 0;</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>       temp = cpl_polynomial_get_coeff (poly, &i);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>       plane_pos[k] = pos[bin];</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>       plane_val[k] = temp/median[bin];</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>       k++;</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     }</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>       }</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>       <span class="keywordflow">if</span> (k>0) {</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>     tempvector = cpl_vector_wrap (k, plane_pos);</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     tempvector2= cpl_vector_wrap (k, plane_val);</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     poly2 = cpl_polynomial_fit_1d_create (tempvector, tempvector2, </div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>                                               smooth_order0, &mse);</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>     cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>     cpl_vector_unwrap (tempvector2);</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>         poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         i = 0;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         temp2 = cpl_polynomial_eval_1d (poly2, pos[bin], NULL);</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>         cpl_polynomial_set_coeff (poly, &i, temp2*median[bin]);</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>       }</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     }</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     cpl_polynomial_delete(poly2); </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>       }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>       <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Not enough data points in slitlet %d"</span>, slitlet);</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     }</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>   }</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (smooth0 == 2) {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     sinfo_msg(<span class="stringliteral">"Smoothing zeroth terms (median filter size %d)"</span>, smooth_size0);</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     smooth_size0 = smooth_size0/2;</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keywordflow">if</span> (smooth_size0 <= 0) smooth_size0 = 1;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>       k = 0;</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>     <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>       poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>       i = 0;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>       temp = cpl_polynomial_get_coeff (poly, &i);</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>       <span class="comment">//plane_pos[k] = pos[bin];</span></div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>       plane_val[k] = temp/median[bin];</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>       k++;</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>     }</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>       }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>       <span class="keywordflow">if</span> (k>0) {</div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>     tempvector = cpl_vector_wrap (k, plane_val);</div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>     tempvector2= sinfo_juha_vector_filter_median_create (tempvector, </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>                                                              smooth_size0);</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>     cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>     kk = 0;</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>         poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>         i = 0;</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>         cpl_polynomial_set_coeff(poly, &i, cpl_vector_get(tempvector2, kk++)</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>                       *median[bin]);</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>       }</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>     }</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>     cpl_vector_delete (tempvector2);</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>       }</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>     }</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>   }</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>   <span class="keywordflow">if</span>(smooth == 1) {</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     sinfo_msg(<span class="stringliteral">"Smoothing higher terms (with order %d)"</span>, smooth_order);</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>       <span class="keywordflow">if</span> (order[slitlet]>0) {</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     <span class="keywordflow">for</span> (j=1; j<=order[slitlet]; j++) {</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>       k = 0;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>       <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>         <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>           poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>           i = 0;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">/*           temp = cpl_polynomial_get_coeff (poly, &i); */</span></div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>           temp2 = cpl_polynomial_get_coeff (poly, &j);</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>           plane_pos[k] = pos[bin];</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>           plane_val[k] = temp2/median[bin];</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>           k++;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>         }</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>       }</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>       <span class="keywordflow">if</span> (k>0) {</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>         tempvector = cpl_vector_wrap (k, plane_pos);</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>         tempvector2= cpl_vector_wrap (k, plane_val);</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>         poly2 = cpl_polynomial_fit_1d_create (tempvector, tempvector2, </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>                                                   smooth_order, &mse);</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>         cpl_vector_unwrap (tempvector);</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>         cpl_vector_unwrap (tempvector2);</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>         <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>           <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>         poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>           i = 0;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>           <span class="comment">/*           temp = cpl_polynomial_get_coeff (poly, &i); */</span></div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>           temp2 = cpl_polynomial_eval_1d (poly2, pos[bin], NULL);</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>           cpl_polynomial_set_coeff (poly, &j, temp2*median[bin]);</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>           }</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>         }</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>         cpl_polynomial_delete(poly2); </div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>       }</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>       <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Not enough data points in slitlet %d\n"</span>, </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>                                slitlet);</div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     }</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>       }</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>     }</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>   }</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>   sinfo_msg(<span class="stringliteral">"Creating cube for illumination correction\n"</span>);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>   result = cpl_imagelist_new ();</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>   <span class="keywordflow">for</span> (i=0; i<nplanes; i++) {</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>     temp_image = cpl_image_new (64, 64, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     cpl_imagelist_set (result, temp_image, i);</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>   }</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>     </div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>   sinfo_msg(<span class="stringliteral">"nplanes=%d spec_bin=%d"</span>,nplanes,spec_bin);</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>   <span class="keywordflow">if</span> ( nbins>5) {</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     sinfo_msg(<span class="stringliteral">"Interpolating\n"</span>);</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>       <span class="keywordflow">for</span> (i=0; i<64; i++) {</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>     k = 0;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>       <span class="keywordflow">if</span> (coeffs[slitlet*nbins+bin] != NULL) {</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>         plane_pos[k] = pos[bin];</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>         plane_val[k] = cpl_polynomial_eval_1d(coeffs[slitlet*nbins+bin], </div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>                           cpl_vector_get(xpos, i),NULL)/</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>                                                   median[bin];</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>         k++;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>       }</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     }</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>         </div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="keywordflow">if</span> (k>3) {</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>       sinfo_juha_function1d_natural_spline (plane_pos, plane_val, k,</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>                          &inter_pos[(<span class="keywordtype">int</span>)plane_pos[0]],</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>                          &inter_val[(<span class="keywordtype">int</span>)plane_pos[0]],</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>                          (<span class="keywordtype">int</span>)(plane_pos[k-1]-plane_pos[0]));</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>       <span class="keywordflow">for</span> (j=0; j<=(int)plane_pos[0]; j++)</div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>         inter_val[j] = inter_val[(<span class="keywordtype">int</span>)plane_pos[0]+1];</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>       <span class="keywordflow">for</span> (j=(<span class="keywordtype">int</span>)plane_pos[k-1]-1; j<nplanes; j++)</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>         inter_val[j] = inter_val[(<span class="keywordtype">int</span>)plane_pos[k-1]-2];</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>       <span class="keywordflow">for</span> (k=0; k<nplanes; k++) {</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>         data = cpl_image_get_data_float(cpl_imagelist_get(result, k));</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>         data[i + (2*slitlet)*64] = inter_val[k];</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>         data[i + (2*slitlet+1)*64] = inter_val[k];</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>             <span class="comment">/*sinfo_msg("inter_val=%g",inter_val[k]);*/</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>       }</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     }</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"Too few points %d\n"</span>, slitlet);</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>       }</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     }</div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>   }</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nbins==1) {</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>     sinfo_msg(<span class="stringliteral">"Filling the illumination cube\n"</span>);</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++) {</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>       <span class="keywordflow">for</span> (i=0; i<64; i++) {</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     <span class="keywordflow">if</span> (coeffs[slitlet] != NULL) {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>       temp = cpl_polynomial_eval_1d(coeffs[slitlet], </div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>                     cpl_vector_get(xpos, i),NULL)/median[0];</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>       <span class="keywordflow">for</span> (k=0; k<nplanes; k++) {</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>         data = cpl_image_get_data_float(cpl_imagelist_get(result, k));</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>         data[i + (2*slitlet)*64] = temp;</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>         data[i + (2*slitlet+1)*64] = temp;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>             sinfo_msg(<span class="stringliteral">"temp=%g"</span>,temp);</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>       }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     }</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>       }</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>     }</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>   }</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>   sinfo_msg(<span class="stringliteral">"Writing ima out_illum.fits\n"</span>);</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">/*   pl = cpl_propertylist_load (name_i, 0); */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span> <span class="comment">/*   if (sinfo_propertylist_has(pl, KEY_NAME_PRO_CATG)) */</span></div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> <span class="comment">/*     cpl_propertylist_set_string (pl, KEY_NAME_PRO_CATG, PRO_ILL_COR); */</span></div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">/*   else */</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">/*     cpl_propertylist_append_string (pl, KEY_NAME_PRO_CATG, PRO_ILL_COR); */</span></div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span> </div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="comment">/*  cpl_imagelist_save(result, "out_illum.fits", CPL_BPP_IEEE_FLOAT, pl, 0); */</span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> </div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>   sinfo_pro_save_ims(result,sof,sof,<span class="stringliteral">"out_illum.fits"</span>, </div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>               PRO_ILL_COR,NULL,plugin_id, cpl_cfg); </div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> <span class="comment">   *   These should (probably) be saved in a fits file...</span></div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>   sinfo_msg(<span class="stringliteral">"Writing dat out_illum2.dat\n"</span>);</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>   dumpfile = fopen (<span class="stringliteral">"out_illum2.dat"</span>,<span class="stringliteral">"w"</span>);</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>   fprintf (dumpfile, <span class="stringliteral">"# slitlet, pos, median, rms, coeff0, coeff1...\n"</span>);</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>   <span class="keywordflow">for</span> (slitlet = 0; slitlet<32; slitlet++)</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>     <span class="keywordflow">for</span> (bin=0; bin<nbins; bin++) {</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>       poly = coeffs[slitlet*nbins+bin];</div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>       <span class="keywordflow">if</span> (poly != NULL) {</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     fprintf (dumpfile, <span class="stringliteral">"%d %f %f %f "</span>,slitlet, pos[bin],</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>          median[bin],</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>          rms_values[slitlet*nbins+bin]);</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>     <span class="keywordflow">for</span> (i=0; i<(cpl_polynomial_get_degree(poly)+1); i++) {</div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>       temp = cpl_polynomial_get_coeff (poly, &i);</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>       fprintf (dumpfile, <span class="stringliteral">"%f "</span>, temp);</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>     }</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>     fprintf (dumpfile, <span class="stringliteral">"\n"</span>);</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>       }</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>     }</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>   fclose (dumpfile);</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> </div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> <span class="comment">   *  Clean up...</span></div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>   <span class="keywordflow">for</span> (i = 0; i<32*nbins; i++)</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>     <span class="keywordflow">if</span> (coeffs[i] != NULL)</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>       cpl_polynomial_delete(coeffs[i]);</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>   cpl_imagelist_delete (sky);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>   cpl_imagelist_delete (binnedsky);</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>   cpl_imagelist_delete (result);</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>   cpl_free (pos);</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>   cpl_free (median);</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>   cpl_free (temparray);</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>   cpl_free (tempxarray);</div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>   cpl_free (tempsarray);</div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>   cpl_free (coeffs);</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>   cpl_free (inter_pos);</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>   cpl_free (inter_val);</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>   cpl_free (plane_pos);</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>   cpl_free (plane_val);</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>   cpl_free (rms_values);</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>   cpl_vector_delete (xpos);</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>   cpl_vector_delete (model);</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> </div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>   cpl_free (bin_start);</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>   cpl_free (bin_end);</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> </div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>   <span class="keywordflow">return</span> (1);</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> }</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> </div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="comment"> *  sinfo_illumcorr_create_bins:</span></div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="comment"> *    - searches for the sky emission lines</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> <span class="comment"> *    - increases the size of the bin to include two or more emission</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> <span class="comment"> *      lines if they are too close to each other</span></div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span> <span class="comment"> *    - fills the space between emission lines with bins if</span></div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span> <span class="comment"> *      thermal background has enough flux</span></div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span> <span class="comment"> *    - copies the start and end points of bins to two arrays</span></div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> <span class="comment"> *      (returned in **start and **end)</span></div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span> <span class="comment"> *  Returns: the number bins created</span></div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="comment"> *  The arrays start and end must be deallocated with cpl_free()</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> sinfo_illumcorr_create_bins (cpl_imagelist *sky, </div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>                  <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury,</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>                  <span class="keywordtype">int</span> spec_bin, </div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>                  <span class="keywordtype">double</span> min_flux,</div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>                  <span class="keywordtype">int</span> ** start,</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>                  <span class="keywordtype">int</span> ** end,</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>                  <span class="keywordtype">int</span> z1, <span class="keywordtype">int</span> z2)</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> {</div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>   <span class="keywordtype">int</span> temp_i=0;</div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>   <span class="keywordtype">double</span> testarray3[15];</div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>   <span class="keywordtype">double</span> temp_double=0;</div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>   <span class="keywordtype">int</span>  i=0, j=0, k=0,kk=0,nplanes=0; </div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>   <span class="keywordtype">int</span> norig = 0, nmerged = 0, ncont = 0, nline=0;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>   <span class="keywordtype">int</span> *pos=NULL;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>   <span class="keywordtype">int</span> *x1=NULL;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>   <span class="keywordtype">int</span> *x2=NULL;</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>   <span class="keywordtype">int</span> *x1b=NULL;</div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>   <span class="keywordtype">int</span> *x2b=NULL;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>   <span class="keywordtype">int</span> *s1=NULL;</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>   <span class="keywordtype">int</span> *s2=NULL;</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>   <span class="keywordtype">double</span> *flux=NULL;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>   <span class="keywordtype">double</span> *spec=NULL;</div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>   <span class="keywordtype">double</span>  *spec_cont=NULL;</div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>   <span class="keywordtype">double</span> *spec_line=NULL;</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>   cpl_image     *temp_image=NULL;</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>   nplanes   = cpl_imagelist_get_size(sky);</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span> </div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>   spec = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>   spec_line = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>   spec_cont = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> </div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>   <span class="comment">/*  there should be no way of actually needing this large arrays*/</span></div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>   pos = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>   flux = (<span class="keywordtype">double</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>   x1 = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>   x2 = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>   x1b = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>   x2b = (<span class="keywordtype">int</span>*) cpl_calloc(nplanes, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>   <span class="keywordflow">for</span> (i=z1; i<=z2; i++) {</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>     temp_image =  cpl_imagelist_get(sky, i);</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>     spec[i] = sinfo_image_get_median_window (temp_image, llx, lly, urx, ury);</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>   }</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>   <span class="keywordflow">for</span> (i=z1+7; i<=z2-7; i++) {</div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>     k = 0;</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>     <span class="keywordflow">for</span> (j=-7; j<=7; j++)</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>       <span class="keywordflow">if</span> (!isnan(spec[i+j]))</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>     testarray3[k++] = spec[i+j];</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>     <span class="keywordflow">if</span> (k>0) {</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>       sinfo_tools_sort_double (&testarray3[0], k);</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>       spec_cont[i] =  testarray3[1];</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>     }</div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>       spec_cont[i] =  0./0.;</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>   }</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>   <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Calculating pure line flux at pos: "</span></div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>                   <span class="stringliteral">"original, continuum, line"</span>);</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>   <span class="keywordflow">for</span> (i=z1; i<=z2; i++) {</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>     spec_line[i] = spec[i] - spec_cont[i];</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a>(<span class="stringliteral">"Flux at %i = %g %g %g"</span>,</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>                      i,spec[i],spec_cont[i], spec_line[i]);   </div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>   }</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> </div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment">   *  Search for peaks</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="comment">   */</span>  </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>   sinfo_msg (<span class="stringliteral">"Searching for peaks"</span>);</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>   temp_double = -10000.0;</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>   i = z1+2; </div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>   <span class="keywordflow">while</span> (i<=z2-2) {</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>     <span class="keywordflow">if</span> (!isnan (spec_line[i])) {</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>       <span class="keywordflow">if</span> (temp_double<spec_line[i]) {</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>         temp_i = i;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>         temp_double = spec_line[i];</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>       }</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         <span class="comment">/*  Found a peak! */</span> </div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>         <span class="keywordflow">if</span> (temp_i == i-1 && spec_line[temp_i]>min_flux) {</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>       k = 0;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>       <span class="keywordflow">for</span> (j=-spec_bin/2; j<=spec_bin/2; j++) </div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>         <span class="keywordflow">if</span> (j+i>=0 && i+j<nplanes && isnan(spec[i+j])) {</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>           k = 1;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>           <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>         }</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>       <span class="keywordflow">if</span> (k==0) {</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>         pos[norig] = temp_i; <span class="comment">// - spec_bin/2;</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>         flux[norig]   = temp_double;</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>         x1[norig] = temp_i;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         x2[norig] = temp_i;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>         temp_double = -10000.0; </div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>         <span class="keywordflow">while</span> (spec_line[i]<spec_line[i-1])</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>           i++;</div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>         i--;</div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         norig++;</div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>       }</div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         }</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>       }</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>     }      </div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>     i++;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>   }</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span> </div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="comment">   *   Merge the features which are too close to each other</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>   sinfo_msg (<span class="stringliteral">"Merging emission features too close to each other"</span>);</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>   i = 0;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>   <span class="keywordflow">while</span> (i<norig) {</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>     <span class="keywordflow">if</span> (flux[i] > 0.0) {</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>       j = i+1;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>       <span class="keywordflow">while</span> (j<norig </div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>          && (x1[j]-x2[i]) <=spec_bin </div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>          && flux[j]>0.0) {</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>     flux[j] = -100.0;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>     x2[i] = x1[j];</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>     j++;</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     nmerged++;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>       }</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     }</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>     i++;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>   }</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> </div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>   nline = norig - nmerged;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>   j = 0;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>   <span class="keywordflow">for</span> (i=0; i<norig; i++)</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     <span class="keywordflow">if</span> (flux[i]>0.0) {</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>       x1b[j] = x1[i] - spec_bin/2;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>       x2b[j] = x2[i] + spec_bin/2;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>       j++;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>       <span class="comment">/* sinfo_msg ("Bin start: %i end %i", x1[i], x2[i]); */</span></div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>     }</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> </div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>   x1b[j] = nplanes+1;</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> </div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="comment">   *  Check whether there is enough continuum (thermal background)</span></div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> <span class="comment">   *  for binning</span></div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>   j=0;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>   i=z1;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>   <span class="keywordflow">while</span> (i<=z2) {</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     <span class="keywordflow">if</span> (!isnan (spec[i])) {</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>       <span class="keywordflow">if</span> (x1b[j]-i < spec_bin) {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>     i = x2b[j]+1;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>     j++;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>       }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     kk = 0;</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     <span class="keywordflow">for</span> (k=0; k<spec_bin; k++) </div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>       <span class="keywordflow">if</span> (spec[i+k]>min_flux)</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>         kk++;</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     <span class="keywordflow">if</span> (kk==spec_bin) {</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>       x1[ncont] = i;</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>       x2[ncont] = i+spec_bin-1;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>       ncont++;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>       i = i+spec_bin;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     }</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>       i++;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>       }</div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     }</div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>       i++;</div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>   }</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>   sinfo_msg (<span class="stringliteral">"Number of bins centered on emission features:"</span>);</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>   sinfo_msg (<span class="stringliteral">"  %i - %i (merged) = %i"</span>, norig, nmerged, nline);</div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>   sinfo_msg (<span class="stringliteral">"  %i continuum bins"</span>, ncont);</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> </div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>   s1 = (<span class="keywordtype">int</span>*)cpl_calloc(norig-nmerged+ncont, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>   s2 = (<span class="keywordtype">int</span>*)cpl_calloc(norig-nmerged+ncont, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> </div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>   <span class="comment">/* </span></div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> <span class="comment">   *  Merge arrays sorted </span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> <span class="comment">   */</span></div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>   i=0;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>   j=0;</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>   k=0;</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>   <span class="keywordflow">while</span> (k<norig-nmerged+ncont) {</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     <span class="keywordflow">if</span> (i<norig && j<ncont && x1b[i]<x1[j]) {</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>       s1[k] = x1b[i];</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>       s2[k] = x2b[i];</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>       k++;</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>       i++;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>     }</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i<norig && j<ncont && x1b[i]>x1[j]) {</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>       s1[k] = x1[j];</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>       s2[k] = x2[j];</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>       k++;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>       j++;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     }</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i == norig) {</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>       s1[k] = x1[j];</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>       s2[k] = x2[j];</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>       k++;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>       j++;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     }</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j == ncont) {</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>       s1[k] = x1b[i];</div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>       s2[k] = x2b[i];</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>       k++;</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>       i++;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>     }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>     <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>       <span class="comment">/* Should never happen */</span></div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>       <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"Something went wrong when combining "</span></div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>                         <span class="stringliteral">"the bins %i and %i"</span>, i,j);</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>       <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     }</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>   }</div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span> </div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>   <span class="keywordflow">for</span> (i=0; i<nline+ncont; i++)</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>     <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"Bin start: %i end %i"</span>, s1[i], s2[i]);</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> </div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>   *start = s1;</div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>   *end   = s2;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span> </div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>   cpl_free (pos);</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>   cpl_free (x1);</div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>   cpl_free (x2);</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>   cpl_free (x1b);</div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>   cpl_free (x2b);</div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>   cpl_free (flux);</div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>   cpl_free (spec);</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>   cpl_free (spec_line);</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>   cpl_free (spec_cont);</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>   <span class="keywordflow">return</span> (nline+ncont);</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> }</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span> </div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span> </div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span> </div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> sinfo_juha_function1d_natural_spline(</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     <span class="keywordtype">double</span>  *      x,</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>     <span class="keywordtype">double</span>  *      y,</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="keywordtype">int</span>            len,</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <span class="keywordtype">double</span>  *      splX,</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <span class="keywordtype">double</span>  *      splY,</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     <span class="keywordtype">int</span>            splLen</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> )</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span> {</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>   <span class="keywordtype">int</span>                         end;</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>   <span class="keywordtype">int</span>                         loc, found;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>   <span class="keyword">register</span> <span class="keywordtype">int</span>        i, j, n;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>   <span class="keywordtype">double</span>              *       h;      <span class="comment">/* vector of deltas in x */</span></div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>   <span class="keywordtype">double</span>              *       alpha;</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>   <span class="keywordtype">double</span>              *       l,</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     *       mu,</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>     *       z,</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     *       a,</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     *       b,</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>     *       c,</div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     *       d,</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>     v;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>   end = len - 1;</div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>   </div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>   a = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * splLen * 9) ;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>   b = a + len;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>   c = b + len;</div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>   d = c + len;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>   h = d + len;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>   l = h + len;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>   z = l + len;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>   mu = z + len;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>   alpha = mu + len;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>   </div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>   <span class="keywordflow">for</span> (i = 0; i < len; i++) {</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>     a[i] = (double)y[i];</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>   }</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>   </div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>   <span class="comment">/* Calculate vector of differences */</span></div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>   <span class="keywordflow">for</span> (i = 0; i < end; i++) {</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>     h[i] = (double)x[i + 1] - (<span class="keywordtype">double</span>)x[i];</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>     <span class="keywordflow">if</span> (h[i] < 0.0) {</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>       cpl_free(a) ;</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>     }</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>   }</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>   </div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>   <span class="comment">/* Calculate alpha vector */</span></div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>   <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     <span class="comment">/* n = i - 1 */</span></div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     alpha[i] = 3.0 * ((a[i+1] / h[i]) - (a[i] / h[n]) - (a[i] / h[i]) +</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>               (a[n] / h[n]));</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>   }</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>   </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>   <span class="comment">/* Vectors to solve the tridiagonal matrix */</span></div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>   l[0] = l[end] = 1.0;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>   mu[0] = mu[end] = 0.0;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>   z[0] = z[end] = 0.0;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>   c[0] = c[end] = 0.0;</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>   </div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>   <span class="comment">/* Calculate the intermediate results */</span></div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>   <span class="keywordflow">for</span> (n = 0, i = 1; i < end; i++, n++) {</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     <span class="comment">/* n = i-1 */</span></div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     l[i] = 2 * (h[i] + h[n]) - h[n] * mu[n];</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     mu[i] = h[i] / l[i];</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     z[i] = (alpha[i] - h[n] * z[n]) / l[i];</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>   }</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>   <span class="keywordflow">for</span> (n = end, j = end - 1; j >= 0; j--, n--) {</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>     <span class="comment">/* n = j + 1 */</span></div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     c[j] = z[j] - mu[j] * c[n];</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     b[j] = (a[n] - a[j]) / h[j] - h[j] * (c[n] + 2.0 * c[j]) / 3.0;</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>     d[j] = (c[n] - c[j]) / (3.0 * h[j]);</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>   }</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>   </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>   <span class="comment">/* Now calculate the new values */</span></div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>   <span class="keywordflow">for</span> (j = 0; j < splLen; j++) {</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     v = (double)splX[j];</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     splY[j] = (float)0;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     </div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     <span class="comment">/* Is it outside the interval? */</span></div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     <span class="keywordflow">if</span> ((v < (<span class="keywordtype">double</span>)x[0]) || (v > (<span class="keywordtype">double</span>)x[end])) {</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>       <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     }</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>     <span class="comment">/* Search for the interval containing v in the x vector */</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     loc = sinfo_function1d_search_value(x, len, (<span class="keywordtype">double</span>)v, &found);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>     <span class="keywordflow">if</span> (found) {</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>       splY[j] = y[loc];</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>       loc--;</div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>       v -= (double)x[loc];</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>       splY[j] = (float)( a[loc] + v * (b[loc] + v * (c[loc] + v * d[loc])));</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>     }</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>   }</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>   cpl_free(a) ;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span> }</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span> </div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span> </div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> sinfo_function1d_search_value(</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>     <span class="keywordtype">double</span>  *       x,</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>     <span class="keywordtype">int</span>             len,</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>     <span class="keywordtype">double</span>          key,</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>     <span class="keywordtype">int</span>     *       foundPtr</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span> )</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> {</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     <span class="keywordtype">int</span> high,</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>                 low,</div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>                 middle;</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span> </div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     low  = 0;</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>     high = len - 1;</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span> </div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     <span class="keywordflow">while</span> (high >= low) {</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>       middle = (high + low) / 2;</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>       <span class="keywordflow">if</span> (key > x[middle]) {</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     low = middle + 1;</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (key < x[middle]) {</div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>     high = middle - 1;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     *foundPtr = 1;</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>     <span class="keywordflow">return</span> (middle);</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>       }</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     }</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     *foundPtr = 0;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     <span class="keywordflow">return</span> (low);</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> }</div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> </div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span> <span class="comment">cpl_vector * sinfo_vector_filter_median_create(</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> <span class="comment">        const cpl_vector * v, </span></div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> <span class="comment">        int                hw)</span></div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="comment">{</span></div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> <span class="comment">    cpl_vector * filtered;</span></div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span> <span class="comment">    double     * row;</span></div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> <span class="comment">    int          i, j, k, size;</span></div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> <span class="comment">    double temp;</span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="comment">    </span></div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> <span class="comment">    size = cpl_vector_get_size(v);</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span> <span class="comment">    filtered = cpl_vector_new(size);</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> <span class="comment"></span></div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> <span class="comment">    row = cpl_malloc((2*hw+1) * sizeof(double));</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> <span class="comment">    for (i=0; i<size; i++) {</span></div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">      k = 0;</span></div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">      for (j=-hw; j<=hw; j++) </span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">    if ( (i+j) >= 0 && (i+j) < size) {</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">      temp = cpl_vector_get (v, i+j);</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">      row[k] = temp;</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="comment">      k++;</span></div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="comment">      cpl_tools_sort_double (row, k);</span></div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span> <span class="comment">      if (k%2 == 1)</span></div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span> <span class="comment">    temp = row[k/2];</span></div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">      else</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> <span class="comment">    temp = row[k/2-1];</span></div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span> <span class="comment">      cpl_vector_set (filtered, i, temp);</span></div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span> <span class="comment">    cpl_free(row);</span></div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> <span class="comment">    return filtered;</span></div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span> <span class="comment">}</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> </div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="keyword">static</span> cpl_vector * </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> sinfo_juha_vector_filter_median_create(</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>         <span class="keyword">const</span> cpl_vector * v, </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>         <span class="keywordtype">int</span>                hw)</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span> {</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>     cpl_vector * filtered=NULL;</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>     <span class="keywordtype">double</span>     * row=NULL;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>     <span class="keywordtype">int</span>          i, j, k,  size;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>     <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>     </div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>     size = cpl_vector_get_size(v);</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>     filtered = cpl_vector_new(size);</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span> </div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>     row = cpl_malloc((2*hw+1) * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>     <span class="keywordflow">for</span> (i=0; i<size; i++) {</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>       k = 0;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>       <span class="keywordflow">for</span> (j=-hw; j<=hw; j++) </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>     <span class="keywordflow">if</span> ( (i+j) >= 0 && (i+j) < size) {</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>       temp = cpl_vector_get (v, i+j);</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>       row[k] = temp;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>       k++;</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>     }</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>       sinfo_tools_sort_double (row, k);</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span> </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>       <span class="keywordflow">if</span> (k%2 == 1)</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>     temp = row[k/2];</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>     temp = row[k/2-1];</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>       cpl_vector_set (filtered, i, temp);</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>     }</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>     cpl_free(row);</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>     <span class="keywordflow">return</span> filtered;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span> }</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span> </div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> <span class="preprocessor">#define CPL_PIX_STACK_SIZE 50</span></div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="keyword">static</span> cpl_error_code sinfo_tools_sort_double(</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>         <span class="keywordtype">double</span>  *   pix_arr,</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>         <span class="keywordtype">int</span>         n)</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> {</div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>     <span class="keywordtype">int</span>         i, ir, j, k, l;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>     <span class="keywordtype">int</span>     *   i_stack ;</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>     <span class="keywordtype">int</span>         j_stack ;</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>     <span class="keywordtype">double</span>      a ;</div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>     </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>     cpl_ensure(pix_arr, CPL_ERROR_NULL_INPUT, CPL_ERROR_NULL_INPUT) ;</div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>     ir = n ;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>     l = 1 ;</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>     j_stack = 0 ;</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>     i_stack = malloc(CPL_PIX_STACK_SIZE * <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>     <span class="keywordflow">for</span> (;;) {</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>         <span class="keywordflow">if</span> (ir-l < 7) {</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>             <span class="keywordflow">for</span> (j=l+1 ; j<=ir ; j++) {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>                 a = pix_arr[j-1];</div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                 <span class="keywordflow">for</span> (i=j-1 ; i>=1 ; i--) {</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>                     <span class="keywordflow">if</span> (pix_arr[i-1] <= a) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>                     pix_arr[i] = pix_arr[i-1];</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>                 }</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>                 pix_arr[i] = a;</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>             }</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>             <span class="keywordflow">if</span> (j_stack == 0) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>             ir = i_stack[j_stack-- -1];</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>             l  = i_stack[j_stack-- -1];</div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>         } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>             k = (l+ir) >> 1;</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>             SINFO_DOUBLE_SWAP(pix_arr[k-1], pix_arr[l])</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[ir-1]) {</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>                 SINFO_DOUBLE_SWAP(pix_arr[l], pix_arr[ir-1])</div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>             }</div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>             <span class="keywordflow">if</span> (pix_arr[l-1] > pix_arr[ir-1]) {</div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>                 SINFO_DOUBLE_SWAP(pix_arr[l-1], pix_arr[ir-1])</div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>             }</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>             <span class="keywordflow">if</span> (pix_arr[l] > pix_arr[l-1]) {</div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>                 SINFO_DOUBLE_SWAP(pix_arr[l], pix_arr[l-1])</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>             }</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>             i = l+1;</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>             j = ir;</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>             a = pix_arr[l-1];</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>             <span class="keywordflow">for</span> (;;) {</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>                 <span class="keywordflow">do</span> i++; <span class="keywordflow">while</span> (pix_arr[i-1] < a);</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>                 <span class="keywordflow">do</span> j--; <span class="keywordflow">while</span> (pix_arr[j-1] > a);</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>                 <span class="keywordflow">if</span> (j < i) <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>                 SINFO_DOUBLE_SWAP(pix_arr[i-1], pix_arr[j-1]);</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>             } </div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>             pix_arr[l-1] = pix_arr[j-1];</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>             pix_arr[j-1] = a; </div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>             j_stack += 2; </div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>             <span class="keywordflow">if</span> (j_stack > CPL_PIX_STACK_SIZE) {</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>                 <span class="comment">/* Should never reach here */</span></div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>                 free(i_stack);</div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>                 <span class="keywordflow">return</span> CPL_ERROR_ILLEGAL_INPUT ; </div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>             } </div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>             <span class="keywordflow">if</span> (ir-i+1 >= j-l) {</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                 i_stack[j_stack-1] = ir;</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                 i_stack[j_stack-2] = i;</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>                 ir = j-1;</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>             } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>                 i_stack[j_stack-1] = j-1;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>                 i_stack[j_stack-2] = l;</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>                 l = i;</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>             }</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>         }</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>     }</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>     free(i_stack) ;</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>     <span class="keywordflow">return</span> CPL_ERROR_NONE ;</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span> }</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span> </div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span> <span class="keyword">static</span> cpl_vector * </div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span> sinfo_vector_filter_median_create(</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>         <span class="keyword">const</span> cpl_vector * v, </div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>         <span class="keywordtype">int</span>                hw)</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> {</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>     cpl_vector * filtered;</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>     cpl_vector * row;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>     <span class="keywordtype">int</span>          i, j, k, size;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>     <span class="keywordtype">double</span> temp;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>     </div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>     <span class="comment">/* Create the filtered vector */</span></div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>     size = cpl_vector_get_size(v);</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>     filtered = cpl_vector_new(size);</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>     <span class="comment">/* median filter on all central items */</span></div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>     row = cpl_vector_new((2*hw+1));</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>     <span class="keywordflow">for</span> (i=0; i<size; i++) {</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>       k = 0;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>       <span class="keywordflow">for</span> (j=-hw; j<=hw; j++) </div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>     <span class="keywordflow">if</span> ( (i+j) >= 0 && (i+j) < size) {</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>       temp = cpl_vector_get (v, i+j);</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>       cpl_vector_set(row,k,temp);</div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>       k++;</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>     }</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>       <span class="comment">/*  this returns ~2e8 when all the values are 1.0....*/</span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="comment">/*       temp = cpl_tools_get_median_double(row, k); */</span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>       cpl_vector_sort(row, +1);</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>       <span class="keywordflow">if</span> (k%2 == 1) {</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>     temp = cpl_vector_get(row,k/2);</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>       }</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>       <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>     temp = cpl_vector_get(row,k/2-1);</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>       }</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span> </div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>       sinfo_msg(<span class="stringliteral">"value = %g "</span>, temp);</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>       cpl_vector_set (filtered, i, temp);</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>     }</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>     cpl_vector_delete(row);</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>     <span class="keywordflow">return</span> filtered;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span> }</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span> </div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> <span class="comment"> *  A NaN safe version of cpl_image_get_median_window</span></div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> <span class="keyword">static</span> <span class="keywordtype">double</span> </div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span> sinfo_image_get_median_window  (<span class="keyword">const</span> cpl_image *image, </div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>                        <span class="keywordtype">int</span> llx, <span class="keywordtype">int</span> lly, <span class="keywordtype">int</span> urx, <span class="keywordtype">int</span> ury)</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> {</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>   cpl_image *window;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>   <span class="keywordtype">float</span> *data;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>   <span class="keywordtype">double</span> *array, median;</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>   <span class="keywordtype">int</span> size, i,j;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>   window = cpl_image_extract (image, llx, lly, urx, ury);</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>   size = (urx-llx+1)*(ury-lly+1);</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>   data = cpl_image_get_data_float(window);</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> </div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>   array = (<span class="keywordtype">double</span>*)cpl_calloc ( size, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>   j = 0;</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>   <span class="keywordflow">for</span> (i=0; i<size; i++)</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>     <span class="keywordflow">if</span> (!isnan(data[i]))</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>       array[j++] = data[i];</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>   </div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>   <span class="keywordflow">if</span> (j>0)</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>     sinfo_tools_sort_double (array, j);</div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>   </div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>   <span class="keywordflow">if</span> (j == 0 || 2*j<size)</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>     median = 0./0.;</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (j%2 == 1) </div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>     median = array[j/2];</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>   <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>     median = array[j/2-1];</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span> </div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>   cpl_image_delete (window);</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>   cpl_free (array);</div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>   </div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>   <span class="keywordflow">return</span> (median);</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__ima__arith_8c_source.html b/html/sinfo__utl__ima__arith_8c_source.html
index c556d19..6adf936 100644
--- a/html/sinfo__utl__ima__arith_8c_source.html
+++ b/html/sinfo__utl__ima__arith_8c_source.html
@@ -2,402 +2,433 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_ima_arith.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_ima_arith.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_ima_arith.c,v 1.14 2009/01/30 14:56:12 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.14 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Functions prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_create(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_exec(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_destroy(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                            Static variables</span>
-<a name="l00064"></a>00064 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_arith_description[] =
-<a name="l00067"></a>00067 <span class="stringliteral">"This recipe performs image computation.\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"The input files are 2 images\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"their associated tags should be IMA.\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"The output is an image resulting from the IMA op IMA where op indicates\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"the operation to be performed specified by the parameter \n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op having alias 'op'\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00074"></a>00074 <span class="stringliteral">"esorex --params sinfo_utl_ima_arith\n"</span>
-<a name="l00075"></a>00075 <span class="stringliteral">"esorex --help sinfo_utl_ima_arith\n"</span>
-<a name="l00076"></a>00076 <span class="stringliteral">"\n"</span>;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                                Functions code</span>
-<a name="l00080"></a>00080 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 
-<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a><a class="code" href="group__sinfo__utl__ima__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00097</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00098"></a>00098 {
-<a name="l00099"></a>00099     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00100"></a>00100     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     cpl_plugin_init(plugin,
-<a name="l00103"></a>00103                     CPL_PLUGIN_API,
-<a name="l00104"></a>00104                     SINFONI_BINARY_VERSION,
-<a name="l00105"></a>00105                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00106"></a>00106                     <span class="stringliteral">"sinfo_utl_ima_arith"</span>,
-<a name="l00107"></a>00107                     <span class="stringliteral">"Computes result of ima1 op ima2"</span>,
-<a name="l00108"></a>00108                     sinfo_utl_ima_arith_description,
-<a name="l00109"></a>00109                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00110"></a>00110                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00111"></a>00111                     sinfo_get_license(),
-<a name="l00112"></a>00112                     sinfo_utl_ima_arith_create,
-<a name="l00113"></a>00113                     sinfo_utl_ima_arith_exec,
-<a name="l00114"></a>00114                     sinfo_utl_ima_arith_destroy) ;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     cpl_pluginlist_append(list, plugin) ;
-<a name="l00117"></a>00117     
-<a name="l00118"></a>00118     <span class="keywordflow">return</span> 0;
-<a name="l00119"></a>00119 }
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00130"></a>00130 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00131"></a>00131 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_create(cpl_plugin * plugin)
-<a name="l00132"></a>00132 {
-<a name="l00133"></a>00133     cpl_recipe      * recipe ;
-<a name="l00134"></a>00134     cpl_parameter   * p ;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00138"></a>00138         recipe = (cpl_recipe *)plugin ;
-<a name="l00139"></a>00139     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00140"></a>00140     cpl_error_reset();
-<a name="l00141"></a>00141     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00144"></a>00144     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00147"></a>00147     <span class="comment">/* --stropt */</span>
-<a name="l00148"></a>00148     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op"</span>, 
-<a name="l00149"></a>00149                                 CPL_TYPE_STRING, 
-<a name="l00150"></a>00150                                 <span class="stringliteral">"A possible operation"</span>, 
-<a name="l00151"></a>00151                                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith"</span>,<span class="stringliteral">"+"</span>);
-<a name="l00152"></a>00152     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;
-<a name="l00153"></a>00153     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">/* --doubleopt */</span>
-<a name="l00156"></a>00156     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.value"</span>, 
-<a name="l00157"></a>00157             CPL_TYPE_DOUBLE, <span class="stringliteral">"a value"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith"</span>, 9999.) ;
-<a name="l00158"></a>00158     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"value"</span>) ;
-<a name="l00159"></a>00159     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00160"></a>00160  
-<a name="l00161"></a>00161     <span class="comment">/* Return */</span>
-<a name="l00162"></a>00162     <span class="keywordflow">return</span> 0;
-<a name="l00163"></a>00163 }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00171"></a>00171 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00172"></a>00172 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_exec(cpl_plugin * plugin)
-<a name="l00173"></a>00173 {
-<a name="l00174"></a>00174     cpl_recipe  *   recipe ;
-<a name="l00175"></a>00175      <span class="keywordtype">int</span> code=0;
-<a name="l00176"></a>00176      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00179"></a>00179     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00180"></a>00180         recipe = (cpl_recipe *)plugin ;
-<a name="l00181"></a>00181     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00182"></a>00182     cpl_error_reset();
-<a name="l00183"></a>00183     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00184"></a>00184     code = sinfo_utl_ima_arith(recipe->parameters, recipe->frames) ;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00188"></a>00188         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00189"></a>00189 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00190"></a>00190         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00191"></a>00191     } 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">return</span> code ;
-<a name="l00194"></a>00194 }
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00202"></a>00202 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00203"></a>00203 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_destroy(cpl_plugin * plugin)
-<a name="l00204"></a>00204 {
-<a name="l00205"></a>00205     cpl_recipe  *   recipe ;
-<a name="l00206"></a>00206     
-<a name="l00207"></a>00207     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00208"></a>00208     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00209"></a>00209         recipe = (cpl_recipe *)plugin ;
-<a name="l00210"></a>00210     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00213"></a>00213     <span class="keywordflow">return</span> 0 ;
-<a name="l00214"></a>00214 }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00223"></a>00223 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00224"></a>00224 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00225"></a>00225 sinfo_utl_ima_arith( cpl_parameterlist   *   parlist, 
-<a name="l00226"></a>00226         cpl_frameset        *   framelist)
-<a name="l00227"></a>00227 {
-<a name="l00228"></a>00228     cpl_parameter       *   param= NULL ;
-<a name="l00229"></a>00229     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation=NULL;
-<a name="l00230"></a>00230     <span class="keywordtype">double</span>                     value=1 ;
-<a name="l00231"></a>00231     cpl_frame           *   frm_ima1=NULL ;
-<a name="l00232"></a>00232     cpl_frame           *   frm_ima2=NULL ;
-<a name="l00233"></a>00233     cpl_image           *   ima1=NULL ;
-<a name="l00234"></a>00234     cpl_image           *   ima2=NULL ;
-<a name="l00235"></a>00235     <span class="keywordtype">int</span> switch_ima2     = 0;
-<a name="l00236"></a>00236     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_o=NULL ;
-<a name="l00237"></a>00237     cpl_propertylist    *   plist=NULL ;
-<a name="l00238"></a>00238     cpl_image           *   image=NULL ;
-<a name="l00239"></a>00239     cpl_frame           *   product_frame=NULL;
-<a name="l00240"></a>00240     cpl_frameset * raw_set=NULL;
-<a name="l00241"></a>00241     <span class="keywordtype">int</span> nraw=0;
-<a name="l00242"></a>00242     <span class="keywordtype">int</span> n=0;
-<a name="l00243"></a>00243           sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00244"></a>00244         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00247"></a>00247     <span class="comment">/* --stropt */</span>
-<a name="l00248"></a>00248     check_nomsg(param=cpl_parameterlist_find(parlist, 
-<a name="l00249"></a>00249                                              <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op"</span>));
-<a name="l00250"></a>00250     check_nomsg(operation=cpl_parameter_get_string(param));
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="comment">/* --boolopt */</span>
-<a name="l00253"></a>00253     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00254"></a>00254                                              <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.value"</span>));
-<a name="l00255"></a>00255     check_nomsg(value = cpl_parameter_get_double(param)) ;
-<a name="l00256"></a>00256   
-<a name="l00257"></a>00257     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00258"></a>00258     check(sinfo_dfs_set_groups(framelist),
-<a name="l00259"></a>00259          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00260"></a>00260  
-<a name="l00261"></a>00261     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00262"></a>00262     n=cpl_frameset_get_size(framelist);
-<a name="l00263"></a>00263     <span class="keywordflow">if</span>(n<1) {
-<a name="l00264"></a>00264       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00265"></a>00265       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00266"></a>00266     }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00269"></a>00269     check_nomsg(raw_set=cpl_frameset_new());
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271     check(sinfo_contains_frames_kind(framelist,raw_set,PRO_IMA),
-<a name="l00272"></a>00272      <span class="stringliteral">"Found no input frames with tag %s"</span>,PRO_IMA);
-<a name="l00273"></a>00273     check_nomsg(nraw=cpl_frameset_get_size(raw_set));
-<a name="l00274"></a>00274     <span class="keywordflow">if</span> (nraw<1) {
-<a name="l00275"></a>00275       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,PRO_IMA);
-<a name="l00276"></a>00276       <span class="keywordflow">goto</span> cleanup;
-<a name="l00277"></a>00277     } <span class="keywordflow">else</span> {
-<a name="l00278"></a>00278          check_nomsg(frm_ima1=cpl_frameset_get_frame(framelist,0));
-<a name="l00279"></a>00279          check_nomsg(ima1=cpl_image_load(cpl_frame_get_filename(frm_ima1),
-<a name="l00280"></a>00280                                          CPL_TYPE_FLOAT,0,0));
-<a name="l00281"></a>00281      <span class="keywordflow">if</span> (nraw>1) {
-<a name="l00282"></a>00282          check_nomsg(frm_ima2=cpl_frameset_get_frame(framelist,1));
-<a name="l00283"></a>00283          check_nomsg(ima2 = cpl_image_load(cpl_frame_get_filename(frm_ima2),
-<a name="l00284"></a>00284                                            CPL_TYPE_FLOAT,0,0));
-<a name="l00285"></a>00285          switch_ima2=1;
-<a name="l00286"></a>00286       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value == 9999.) {
-<a name="l00287"></a>00287         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found only one input frames with tag %s"</span>,PRO_IMA);
-<a name="l00288"></a>00288         <span class="keywordflow">goto</span> cleanup; 
-<a name="l00289"></a>00289       } <span class="keywordflow">else</span> {
-<a name="l00290"></a>00290         sinfo_msg(<span class="stringliteral">"Perform image arithmetics on frame %s"</span>,PRO_IMA);
-<a name="l00291"></a>00291       }
-<a name="l00292"></a>00292     }
-<a name="l00293"></a>00293 
-<a name="l00294"></a>00294     sinfo_free_frameset(&raw_set);
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span>
-<a name="l00297"></a>00297     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_ima1),0),
-<a name="l00298"></a>00298           <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00299"></a>00299 
-<a name="l00300"></a>00300     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00301"></a>00301     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00302"></a>00302     <span class="keywordflow">if</span> (value == 9999.) {
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304       <span class="keywordflow">if</span>(ima1 != NULL && ima2 != NULL) {
-<a name="l00305"></a>00305     sinfo_msg(<span class="stringliteral">"ima1 %s ima2"</span>,operation);
-<a name="l00306"></a>00306     <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0 ) {
-<a name="l00307"></a>00307           check(image = cpl_image_add_create(ima1, ima2),
-<a name="l00308"></a>00308                 <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;
-<a name="l00309"></a>00309     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0 ) {
-<a name="l00310"></a>00310           check(image = cpl_image_subtract_create(ima1, ima2),               
-<a name="l00311"></a>00311         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;
-<a name="l00312"></a>00312     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0 ) {
-<a name="l00313"></a>00313           check(image = cpl_image_multiply_create(ima1, ima2),
-<a name="l00314"></a>00314         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;
-<a name="l00315"></a>00315     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0 ) {
-<a name="l00316"></a>00316       check(image = cpl_image_divide_create(ima1, ima2),
-<a name="l00317"></a>00317         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;
-<a name="l00318"></a>00318     } <span class="keywordflow">else</span> {
-<a name="l00319"></a>00319           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation %s not supported"</span>,operation);
-<a name="l00320"></a>00320           <span class="keywordflow">goto</span> cleanup;
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322       sinfo_free_image(&ima1);
-<a name="l00323"></a>00323       sinfo_free_image(&ima2);
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325       }
-<a name="l00326"></a>00326     
-<a name="l00327"></a>00327     } <span class="keywordflow">else</span> {
-<a name="l00328"></a>00328       sinfo_msg(<span class="stringliteral">"ima1 %s %f"</span>,operation,value);
-<a name="l00329"></a>00329        
-<a name="l00330"></a>00330       <span class="keywordflow">if</span>(switch_ima2 == 1) {
-<a name="l00331"></a>00331       sinfo_free_image(&ima2);
-<a name="l00332"></a>00332       }
-<a name="l00333"></a>00333        
-<a name="l00334"></a>00334       <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0 ) {
-<a name="l00335"></a>00335     check(image = cpl_image_add_scalar_create(ima1, value),
-<a name="l00336"></a>00336           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;
-<a name="l00337"></a>00337       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0 ) {
-<a name="l00338"></a>00338     check(image = cpl_image_subtract_scalar_create(ima1, value),
-<a name="l00339"></a>00339           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;
-<a name="l00340"></a>00340       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0 ) {
-<a name="l00341"></a>00341     check(image = cpl_image_multiply_scalar_create(ima1, value),
-<a name="l00342"></a>00342           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;
-<a name="l00343"></a>00343       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0 ) {
-<a name="l00344"></a>00344     check(image = cpl_image_divide_scalar_create(ima1, value),
-<a name="l00345"></a>00345           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;
-<a name="l00346"></a>00346       } <span class="keywordflow">else</span> {
-<a name="l00347"></a>00347     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation %s not supported"</span>,operation);
-<a name="l00348"></a>00348     <span class="keywordflow">goto</span> cleanup;
-<a name="l00349"></a>00349       }
-<a name="l00350"></a>00350     
-<a name="l00351"></a>00351       sinfo_free_image(&ima1);
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355 
-<a name="l00356"></a>00356     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00357"></a>00357     <span class="comment">/* Set the file name */</span>
-<a name="l00358"></a>00358     name_o = <span class="stringliteral">"ima_res.fits"</span> ;
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360     <span class="comment">/* Create product frame */</span>
-<a name="l00361"></a>00361     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00362"></a>00362     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00363"></a>00363     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_IMA_ARITH_PROIMA)) ;
-<a name="l00364"></a>00364     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00365"></a>00365     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00366"></a>00366     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00367"></a>00367       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00368"></a>00368     
-<a name="l00369"></a>00369     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00370"></a>00370     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00371"></a>00371 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span>
-<a name="l00372"></a>00372 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00373"></a>00373                                        product_frame, 
-<a name="l00374"></a>00374                                        framelist, 
-<a name="l00375"></a>00375                                        parlist,
-<a name="l00376"></a>00376                                        <span class="stringliteral">"sinfo_utl_ima_arith"</span>, 
-<a name="l00377"></a>00377                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00378"></a>00378                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00379"></a>00379       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00380"></a>00380 <span class="preprocessor">#else</span>
-<a name="l00381"></a>00381 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00382"></a>00382                                        product_frame, 
-<a name="l00383"></a>00383                                        framelist, 
-<a name="l00384"></a>00384                                        parlist,
-<a name="l00385"></a>00385                                        <span class="stringliteral">"sinfo_utl_ima_arith"</span>, 
-<a name="l00386"></a>00386                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00387"></a>00387                                        KEY_VALUE_HPRO_DID),
-<a name="l00388"></a>00388       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00389"></a>00389 <span class="preprocessor">#endif</span>
-<a name="l00390"></a>00390 <span class="preprocessor"></span>
-<a name="l00391"></a>00391     <span class="comment">/* Save the file */</span>
-<a name="l00392"></a>00392     check(cpl_image_save(image, 
-<a name="l00393"></a>00393                          name_o, 
-<a name="l00394"></a>00394                          CPL_BPP_IEEE_FLOAT, 
-<a name="l00395"></a>00395                          plist,
-<a name="l00396"></a>00396                          CPL_IO_DEFAULT),
-<a name="l00397"></a>00397       <span class="stringliteral">"Could not save product"</span>);
-<a name="l00398"></a>00398     sinfo_free_propertylist(&plist) ;
-<a name="l00399"></a>00399     sinfo_free_image(&image);
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00402"></a>00402     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405  cleanup:
-<a name="l00406"></a>00406    
-<a name="l00407"></a>00407     sinfo_free_image(&ima1);
-<a name="l00408"></a>00408     sinfo_free_image(&ima2);
-<a name="l00409"></a>00409     sinfo_free_frameset(&raw_set);
-<a name="l00410"></a>00410     sinfo_free_propertylist(&plist) ;
-<a name="l00411"></a>00411     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00412"></a>00412 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00413"></a>00413 <span class="comment">    */</span>
-<a name="l00414"></a>00414     sinfo_free_image(&image) ;
-<a name="l00415"></a>00415 
-<a name="l00416"></a>00416     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00417"></a>00417         <span class="keywordflow">return</span> -1 ;
-<a name="l00418"></a>00418     } <span class="keywordflow">else</span> {
-<a name="l00419"></a>00419         <span class="keywordflow">return</span> 0 ;
-<a name="l00420"></a>00420     }
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_ima_arith.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_ima_arith.c,v 1.14 2009/01/30 14:56:12 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.14 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_arith_description[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"This recipe performs image computation.\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"The input files are 2 images\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"their associated tags should be IMA.\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"The output is an image resulting from the IMA op IMA where op indicates\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"the operation to be performed specified by the parameter \n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op having alias 'op'\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="stringliteral">"esorex --params sinfo_utl_ima_arith\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="stringliteral">"esorex --help sinfo_utl_ima_arith\n"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__sinfo__utl__ima__arith.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   97</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     <span class="stringliteral">"sinfo_utl_ima_arith"</span>,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     <span class="stringliteral">"Computes result of ima1 op ima2"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     sinfo_utl_ima_arith_description,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     sinfo_utl_ima_arith_create,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     sinfo_utl_ima_arith_exec,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     sinfo_utl_ima_arith_destroy) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op"</span>, </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                 <span class="stringliteral">"A possible operation"</span>, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith"</span>,<span class="stringliteral">"+"</span>);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"op"</span>) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.value"</span>, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"a value"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith"</span>, 9999.) ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"value"</span>) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>  </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     code = sinfo_utl_ima_arith(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     } </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_arith_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> sinfo_utl_ima_arith( cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_parameter       *   param= NULL ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation=NULL;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">double</span>                     value=1 ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     cpl_frame           *   frm_ima1=NULL ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     cpl_frame           *   frm_ima2=NULL ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     cpl_image           *   ima1=NULL ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_image           *   ima2=NULL ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">int</span> switch_ima2     = 0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_o=NULL ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     cpl_image           *   image=NULL ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     cpl_frameset * raw_set=NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     check_nomsg(param=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.op"</span>));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     check_nomsg(operation=cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="comment">/* --boolopt */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_ima_arith.value"</span>));</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     check_nomsg(value = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>  </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     check_nomsg(raw_set=cpl_frameset_new());</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     check(sinfo_contains_frames_kind(framelist,raw_set,PRO_IMA),</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>      <span class="stringliteral">"Found no input frames with tag %s"</span>,PRO_IMA);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     check_nomsg(nraw=cpl_frameset_get_size(raw_set));</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">if</span> (nraw<1) {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,PRO_IMA);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>          check_nomsg(frm_ima1=cpl_frameset_get_frame(framelist,0));</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>          check_nomsg(ima1=cpl_image_load(cpl_frame_get_filename(frm_ima1),</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>                                          CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>      <span class="keywordflow">if</span> (nraw>1) {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>          check_nomsg(frm_ima2=cpl_frameset_get_frame(framelist,1));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>          check_nomsg(ima2 = cpl_image_load(cpl_frame_get_filename(frm_ima2),</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                                            CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>          switch_ima2=1;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value == 9999.) {</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found only one input frames with tag %s"</span>,PRO_IMA);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>         <span class="keywordflow">goto</span> cleanup; </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         sinfo_msg(<span class="stringliteral">"Perform image arithmetics on frame %s"</span>,PRO_IMA);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     sinfo_free_frameset(&raw_set);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_ima1),0),</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>           <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordflow">if</span> (value == 9999.) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       <span class="keywordflow">if</span>(ima1 != NULL && ima2 != NULL) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     sinfo_msg(<span class="stringliteral">"ima1 %s ima2"</span>,operation);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0 ) {</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>           check(image = cpl_image_add_create(ima1, ima2),</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                 <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0 ) {</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>           check(image = cpl_image_subtract_create(ima1, ima2),               </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0 ) {</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>           check(image = cpl_image_multiply_create(ima1, ima2),</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0 ) {</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       check(image = cpl_image_divide_create(ima1, ima2),</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>         <span class="stringliteral">"Cannot generate the %s image"</span>,operation) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       sinfo_free_image(&ima1);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       sinfo_free_image(&ima2);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       sinfo_msg(<span class="stringliteral">"ima1 %s %f"</span>,operation,value);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>        </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       <span class="keywordflow">if</span>(switch_ima2 == 1) {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>       sinfo_free_image(&ima2);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       }</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>        </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>       <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0 ) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     check(image = cpl_image_add_scalar_create(ima1, value),</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0 ) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     check(image = cpl_image_subtract_scalar_create(ima1, value),</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0 ) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     check(image = cpl_image_multiply_scalar_create(ima1, value),</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0 ) {</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     check(image = cpl_image_divide_scalar_create(ima1, value),</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>           <span class="stringliteral">"Cannot apply the %s operator"</span>,operation) ;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>       sinfo_free_image(&ima1);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     name_o = <span class="stringliteral">"ima_res.fits"</span> ;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_IMA_ARITH_PROIMA)) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                                        product_frame, </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                                        framelist, </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                                        parlist,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                                        <span class="stringliteral">"sinfo_utl_ima_arith"</span>, </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                                        product_frame, </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                                        framelist, </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                                        parlist,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                                        <span class="stringliteral">"sinfo_utl_ima_arith"</span>, </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                                        KEY_VALUE_HPRO_DID),</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     check(cpl_image_save(image, </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                          name_o, </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                          CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                          plist,</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                          CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>       <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     sinfo_free_image(&image);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>  cleanup:</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>    </div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     sinfo_free_image(&ima1);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>     sinfo_free_image(&ima2);</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     sinfo_free_frameset(&raw_set);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     sinfo_free_image(&image) ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span> </div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     }</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__ima__cube__ks__test_8c_source.html b/html/sinfo__utl__ima__cube__ks__test_8c_source.html
index 75e112e..25429bf 100644
--- a/html/sinfo__utl__ima__cube__ks__test_8c_source.html
+++ b/html/sinfo__utl__ima__cube__ks__test_8c_source.html
@@ -2,874 +2,905 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_ima_cube_ks_test.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_ima_cube_ks_test.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_ima_cube_ks_test.c,v 1.12 2012/05/04 08:11:55 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/05/04 08:11:55 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.12 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> * $Log: sinfo_utl_ima_cube_ks_test.c,v $</span>
-<a name="l00027"></a>00027 <span class="comment"> * Revision 1.12  2012/05/04 08:11:55  amodigli</span>
-<a name="l00028"></a>00028 <span class="comment"> * fixed errors fromn cpptest</span>
-<a name="l00029"></a>00029 <span class="comment"> *</span>
-<a name="l00030"></a>00030 <span class="comment"> * Revision 1.11  2009/11/12 14:49:38  kmirny</span>
-<a name="l00031"></a>00031 <span class="comment"> * changing output message</span>
-<a name="l00032"></a>00032 <span class="comment"> *</span>
-<a name="l00033"></a>00033 <span class="comment"> * Revision 1.10  2009/07/27 10:34:54  amodigli</span>
-<a name="l00034"></a>00034 <span class="comment"> * fixed typo in short description</span>
-<a name="l00035"></a>00035 <span class="comment"> *</span>
-<a name="l00036"></a>00036 <span class="comment"> * Revision 1.9  2009/06/03 14:59:31  kmirny</span>
-<a name="l00037"></a>00037 <span class="comment"> * rollback</span>
-<a name="l00038"></a>00038 <span class="comment"> *</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span>
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                                Includes</span>
-<a name="l00047"></a>00047 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <string.h></span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/* cpl */</span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <math.h></span>
-<a name="l00053"></a>00053 <span class="comment">/* irplib */</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00059"></a>00059 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00060"></a>00060 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00061"></a>00061 <span class="preprocessor">#include <sinfo_pro_save.h></span>
-<a name="l00062"></a>00062 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00063"></a>00063 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00064"></a>00064 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00065"></a>00065 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00066"></a>00066 <span class="preprocessor">#include <sinfo_new_cube_ops.h></span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00069"></a>00069 <span class="comment">                            Functions prototypes</span>
-<a name="l00070"></a>00070 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_create(cpl_plugin *) ;
-<a name="l00073"></a>00073 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_exec(cpl_plugin *) ;
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_destroy(cpl_plugin *) ;
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keyword">static</span> cpl_imagelist* create_cube_shift(
-<a name="l00079"></a>00079                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00080"></a>00080                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00081"></a>00081                 <span class="keywordtype">int</span> iPlanesNumber,
-<a name="l00082"></a>00082                 <span class="keywordtype">int</span> iFWHMX,
-<a name="l00083"></a>00083                 <span class="keywordtype">int</span> iFWHMY,
-<a name="l00084"></a>00084                 <span class="keywordtype">int</span> shiftX,
-<a name="l00085"></a>00085                 <span class="keywordtype">int</span> shiftY,
-<a name="l00086"></a>00086                 <span class="keywordtype">double</span> dSignal,
-<a name="l00087"></a>00087                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00088"></a>00088                 <span class="keywordtype">double</span> dNoiseLvl,
-<a name="l00089"></a>00089                 <span class="keywordtype">double</span> dSignalDelta,
-<a name="l00090"></a>00090                 <span class="keywordtype">int</span> iDefectX,
-<a name="l00091"></a>00091                 <span class="keywordtype">int</span> iDefectY,
-<a name="l00092"></a>00092                 <span class="keywordtype">double</span> dDefectValue,
-<a name="l00093"></a>00093                 <span class="keywordtype">int</span> type
-<a name="l00094"></a>00094         );
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="keyword">static</span> cpl_image* create_plane(
-<a name="l00097"></a>00097                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00098"></a>00098                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00099"></a>00099                 <span class="keywordtype">int</span> iFWHMX,
-<a name="l00100"></a>00100                 <span class="keywordtype">int</span> iFWHMY,
-<a name="l00101"></a>00101                 <span class="keywordtype">int</span> shiftX,
-<a name="l00102"></a>00102                 <span class="keywordtype">int</span> shiftY,
-<a name="l00103"></a>00103                 <span class="keywordtype">double</span> dSignal,
-<a name="l00104"></a>00104                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00105"></a>00105                 <span class="keywordtype">double</span> dNoiseLvl
-<a name="l00106"></a>00106         );
-<a name="l00107"></a>00107 <span class="keyword">static</span> cpl_image* create_square_plane(
-<a name="l00108"></a>00108                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00109"></a>00109                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00110"></a>00110                 <span class="keywordtype">int</span> iHoleX,
-<a name="l00111"></a>00111                 <span class="keywordtype">int</span> iHoleY,
-<a name="l00112"></a>00112                 <span class="keywordtype">int</span> shiftX,
-<a name="l00113"></a>00113                 <span class="keywordtype">int</span> shiftY,
-<a name="l00114"></a>00114                 <span class="keywordtype">double</span> dSignal,
-<a name="l00115"></a>00115                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00116"></a>00116                 <span class="keywordtype">double</span> dNoiseLvl);
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="keyword">static</span> <span class="keywordtype">int</span> put_defect(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY, <span class="keywordtype">double</span> dDefectValue);
-<a name="l00119"></a>00119 <span class="keywordtype">void</span> putNAN(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00123"></a>00123 <span class="comment">                            Static variables</span>
-<a name="l00124"></a>00124 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_cube_ks_test_description[] =
-<a name="l00127"></a>00127 <span class="stringliteral">"This recipe produces a test for kappa-sigma clipping\n"</span>
-<a name="l00128"></a>00128 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00129"></a>00129 <span class="stringliteral">"esorex --params sinfo_utl_ima_cube_ks_test\n"</span>
-<a name="l00130"></a>00130 <span class="stringliteral">"esorex --help sinfo_utl_ima_cube_ks_test\n"</span>
-<a name="l00131"></a>00131 <span class="stringliteral">"\n"</span>;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.size_x"</span>;
-<a name="l00134"></a>00134 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.size_y"</span>;
-<a name="l00135"></a>00135 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.fwhm_x"</span>;
-<a name="l00136"></a>00136 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.fwhm_y"</span>;
-<a name="l00137"></a>00137 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.total_signal"</span>;
-<a name="l00138"></a>00138 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL_DELTA[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.total_signal_delta"</span>;
-<a name="l00139"></a>00139 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_BKGSIG[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.bkg_signal"</span>;
-<a name="l00140"></a>00140 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_NOISEL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.noise_level"</span>;
-<a name="l00141"></a>00141 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_x"</span>;
-<a name="l00142"></a>00142 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_y"</span>;
-<a name="l00143"></a>00143 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_signal"</span>;
-<a name="l00144"></a>00144 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_number"</span>;
-<a name="l00145"></a>00145 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_CUBES_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.cubes_number"</span>;
-<a name="l00146"></a>00146 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_PLANES_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.planes_number"</span>;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test"</span>;
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00152"></a>00152 <span class="comment">                                Functions code</span>
-<a name="l00153"></a>00153 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00154"></a>00154 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00158"></a>00158 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00159"></a>00159 
-<a name="l00161"></a>00161 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00170"></a><a class="code" href="group__sinfo__utl__ima__cube__ks__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00170</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00171"></a>00171 {
-<a name="l00172"></a>00172     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00173"></a>00173     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     cpl_plugin_init(plugin,
-<a name="l00176"></a>00176                     CPL_PLUGIN_API,
-<a name="l00177"></a>00177                     SINFONI_BINARY_VERSION,
-<a name="l00178"></a>00178                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00179"></a>00179                     <span class="stringliteral">"sinfo_utl_ima_cube_ks_test"</span>,
-<a name="l00180"></a>00180                     <span class="stringliteral">"Test cube coaddition with kappa-sigma clip of ouliers"</span>,
-<a name="l00181"></a>00181                     sinfo_utl_ima_cube_ks_test_description,
-<a name="l00182"></a>00182                     <span class="stringliteral">"Konstantin Mirny"</span>,
-<a name="l00183"></a>00183                     <span class="stringliteral">"kmirny at eso.org"</span>,
-<a name="l00184"></a>00184                     sinfo_get_license(),
-<a name="l00185"></a>00185                     sinfo_utl_ima_cube_ks_test_create,
-<a name="l00186"></a>00186                     sinfo_utl_ima_cube_ks_test_exec,
-<a name="l00187"></a>00187                     sinfo_utl_ima_cube_ks_test_destroy) ;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189     cpl_pluginlist_append(list, plugin) ;
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="keywordflow">return</span> 0;
-<a name="l00192"></a>00192 }
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00203"></a>00203 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00204"></a>00204 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_create(cpl_plugin * plugin)
-<a name="l00205"></a>00205 {
-<a name="l00206"></a>00206     <span class="keyword">const</span> <span class="keywordtype">int</span> CUBES_NUMBER      = 5;
-<a name="l00207"></a>00207     <span class="keyword">const</span> <span class="keywordtype">int</span> PLANES_NUMBER     = 10;
-<a name="l00208"></a>00208     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_X_DEFAULT    = 64;
-<a name="l00209"></a>00209     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_Y_DEFAULT    = 64;
-<a name="l00210"></a>00210     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_X            = 24;
-<a name="l00211"></a>00211     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_Y            = 24;
-<a name="l00212"></a>00212     <span class="keyword">const</span> <span class="keywordtype">double</span> TOTAL_SIGNAL   = 1E6;
-<a name="l00213"></a>00213     <span class="keyword">const</span> <span class="keywordtype">double</span> SIGNAL_DELTA   = 1E5;
-<a name="l00214"></a>00214     <span class="keyword">const</span> <span class="keywordtype">double</span> BKG_SIGNAL     = 250.; <span class="comment">// 250</span>
-<a name="l00215"></a>00215     <span class="keyword">const</span> <span class="keywordtype">double</span> NOISE_VALUE    = 100;
-<a name="l00216"></a>00216     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_X          = 42;
-<a name="l00217"></a>00217     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_Y          = 42;
-<a name="l00218"></a>00218     <span class="keyword">const</span> <span class="keywordtype">double</span> DEFECT_SIGNAL  = 400;
-<a name="l00219"></a>00219     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_NUMBER     = 1;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     cpl_recipe      * recipe ;
-<a name="l00222"></a>00222     cpl_parameter   * p ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00225"></a>00225     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00226"></a>00226         recipe = (cpl_recipe *)plugin ;
-<a name="l00227"></a>00227     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00228"></a>00228     cpl_error_reset();
-<a name="l00229"></a>00229     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00232"></a>00232     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00235"></a>00235     <span class="comment">/* --stropt */</span>
-<a name="l00236"></a>00236 <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_ima_cube_ks_test.op",</span>
-<a name="l00237"></a>00237 <span class="comment">                                CPL_TYPE_STRING,</span>
-<a name="l00238"></a>00238 <span class="comment">                                "A possible operation",</span>
-<a name="l00239"></a>00239 <span class="comment">                                "sinfoni.sinfo_utl_ima_cube_ks_test","+");</span>
-<a name="l00240"></a>00240 <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span>
-<a name="l00241"></a>00241 <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span>
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="comment">/* --size_x */</span>
-<a name="l00244"></a>00244     p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,
-<a name="l00245"></a>00245             CPL_TYPE_INT, <span class="stringliteral">"size X axis"</span>, RECIPE_NAME, SIZE_X_DEFAULT) ;
-<a name="l00246"></a>00246     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_x"</span>) ;
-<a name="l00247"></a>00247     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     <span class="comment">/* --size_y */</span>
-<a name="l00250"></a>00250     p = cpl_parameter_new_value(PARAM_NAME_SIZE_Y,
-<a name="l00251"></a>00251             CPL_TYPE_INT, <span class="stringliteral">"size Y axis"</span>, RECIPE_NAME, SIZE_Y_DEFAULT) ;
-<a name="l00252"></a>00252     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_y"</span>) ;
-<a name="l00253"></a>00253     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255     <span class="comment">/* --fwhm_x */</span>
-<a name="l00256"></a>00256     p = cpl_parameter_new_value(PARAM_NAME_FWHM_X,
-<a name="l00257"></a>00257             CPL_TYPE_INT, <span class="stringliteral">"FWHM X axis"</span>, RECIPE_NAME, FWHM_X) ;
-<a name="l00258"></a>00258     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_x"</span>) ;
-<a name="l00259"></a>00259     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     <span class="comment">/* --fwhm_y */</span>
-<a name="l00262"></a>00262     p = cpl_parameter_new_value(PARAM_NAME_FWHM_Y,
-<a name="l00263"></a>00263             CPL_TYPE_INT, <span class="stringliteral">"FWHM Y axis"</span>, RECIPE_NAME, FWHM_Y) ;
-<a name="l00264"></a>00264     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_y"</span>) ;
-<a name="l00265"></a>00265     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     <span class="comment">/* --total_signal */</span>
-<a name="l00268"></a>00268     p = cpl_parameter_new_value(PARAM_NAME_SIGNAL,
-<a name="l00269"></a>00269             CPL_TYPE_DOUBLE, <span class="stringliteral">"Total signal value"</span>, RECIPE_NAME, TOTAL_SIGNAL) ;
-<a name="l00270"></a>00270     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal"</span>) ;
-<a name="l00271"></a>00271     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00272"></a>00272 
-<a name="l00273"></a>00273     <span class="comment">/* --bkg_signal */</span>
-<a name="l00274"></a>00274     p = cpl_parameter_new_value(PARAM_NAME_BKGSIG,
-<a name="l00275"></a>00275             CPL_TYPE_DOUBLE, <span class="stringliteral">"background signal level"</span>, RECIPE_NAME, BKG_SIGNAL) ;
-<a name="l00276"></a>00276     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bkg_signal"</span>) ;
-<a name="l00277"></a>00277     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     <span class="comment">/* --noise_level */</span>
-<a name="l00280"></a>00280     p = cpl_parameter_new_value(PARAM_NAME_NOISEL,
-<a name="l00281"></a>00281             CPL_TYPE_DOUBLE, <span class="stringliteral">"Noise level"</span>, RECIPE_NAME, NOISE_VALUE) ;
-<a name="l00282"></a>00282     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"noise_level"</span>) ;
-<a name="l00283"></a>00283     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00284"></a>00284 
-<a name="l00285"></a>00285     <span class="comment">/* --cubes_number */</span>
-<a name="l00286"></a>00286     p = cpl_parameter_new_value(PARAM_NAME_CUBES_NUMBER,
-<a name="l00287"></a>00287             CPL_TYPE_INT, <span class="stringliteral">"Number of cubes"</span>, RECIPE_NAME, CUBES_NUMBER) ;
-<a name="l00288"></a>00288     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"cubes_number"</span>) ;
-<a name="l00289"></a>00289     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     <span class="comment">/* --planes_number */</span>
-<a name="l00292"></a>00292     p = cpl_parameter_new_value(PARAM_NAME_PLANES_NUMBER,
-<a name="l00293"></a>00293             CPL_TYPE_INT, <span class="stringliteral">"Number of images for each cube"</span>, RECIPE_NAME, PLANES_NUMBER) ;
-<a name="l00294"></a>00294     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"planes_number"</span>) ;
-<a name="l00295"></a>00295     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     <span class="comment">/* --signal_delta */</span>
-<a name="l00298"></a>00298         p = cpl_parameter_new_value(PARAM_NAME_SIGNAL_DELTA,
-<a name="l00299"></a>00299                 CPL_TYPE_DOUBLE, <span class="stringliteral">"Change of the signal for the next plane inside a cube"</span>, RECIPE_NAME, SIGNAL_DELTA) ;
-<a name="l00300"></a>00300         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal_delta"</span>) ;
-<a name="l00301"></a>00301         cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303     <span class="comment">/* --defect_x */</span>
-<a name="l00304"></a>00304         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_X,
-<a name="l00305"></a>00305                 CPL_TYPE_INT, <span class="stringliteral">"X position of the bad pixel"</span>, RECIPE_NAME, DEFECT_X) ;
-<a name="l00306"></a>00306         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_x"</span>) ;
-<a name="l00307"></a>00307         cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309     <span class="comment">/* --defect_x */</span>
-<a name="l00310"></a>00310         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_Y,
-<a name="l00311"></a>00311                 CPL_TYPE_INT, <span class="stringliteral">"Y position of the bad pixel"</span>, RECIPE_NAME, DEFECT_Y) ;
-<a name="l00312"></a>00312         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_y"</span>) ;
-<a name="l00313"></a>00313         cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     <span class="comment">/* --defect_signal */</span>
-<a name="l00316"></a>00316         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_SIGNAL,
-<a name="l00317"></a>00317                 CPL_TYPE_DOUBLE, <span class="stringliteral">"signal value of the bad pixel"</span>, RECIPE_NAME, DEFECT_SIGNAL) ;
-<a name="l00318"></a>00318         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_signal"</span>) ;
-<a name="l00319"></a>00319         cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     <span class="comment">/* --defect_number */</span>
-<a name="l00322"></a>00322         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_NUMBER,
-<a name="l00323"></a>00323                 CPL_TYPE_INT, <span class="stringliteral">"Number of planes in a cube with a bad pixel"</span>, RECIPE_NAME, DEFECT_NUMBER) ;
-<a name="l00324"></a>00324         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_number"</span>) ;
-<a name="l00325"></a>00325         cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327     <span class="comment">/* Return */</span>
-<a name="l00328"></a>00328     <span class="keywordflow">return</span> 0;
-<a name="l00329"></a>00329 }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00337"></a>00337 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00338"></a>00338 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_exec(cpl_plugin * plugin)
-<a name="l00339"></a>00339 {
-<a name="l00340"></a>00340     cpl_recipe  *   recipe ;
-<a name="l00341"></a>00341      <span class="keywordtype">int</span> code=0;
-<a name="l00342"></a>00342      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00345"></a>00345     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00346"></a>00346         recipe = (cpl_recipe *)plugin ;
-<a name="l00347"></a>00347     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00348"></a>00348     cpl_error_reset();
-<a name="l00349"></a>00349     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00350"></a>00350     code = sinfo_utl_ima_cube_ks_test(recipe->parameters, recipe->frames) ;
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l00354"></a>00354         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l00355"></a>00355 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l00356"></a>00356         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00357"></a>00357     }
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359     <span class="keywordflow">return</span> code ;
-<a name="l00360"></a>00360 }
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00368"></a>00368 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00369"></a>00369 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_destroy(cpl_plugin * plugin)
-<a name="l00370"></a>00370 {
-<a name="l00371"></a>00371     cpl_recipe  *   recipe ;
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00374"></a>00374     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00375"></a>00375         recipe = (cpl_recipe *)plugin ;
-<a name="l00376"></a>00376     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00379"></a>00379     <span class="keywordflow">return</span> 0 ;
-<a name="l00380"></a>00380 }
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00389"></a>00389 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00390"></a>00390 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00391"></a>00391 sinfo_utl_ima_cube_ks_test( cpl_parameterlist   *   parlist,
-<a name="l00392"></a>00392         cpl_frameset        *   framelist)
-<a name="l00393"></a>00393 {
-<a name="l00394"></a>00394     <span class="comment">// parameters</span>
-<a name="l00395"></a>00395     <span class="keywordtype">int</span>     iSizeX = 0;
-<a name="l00396"></a>00396     <span class="keywordtype">int</span>     iSizeY = 0;
-<a name="l00397"></a>00397     <span class="keywordtype">int</span>     iFWHMX = 0;
-<a name="l00398"></a>00398     <span class="keywordtype">int</span>     iFWHMY = 0;
-<a name="l00399"></a>00399     <span class="keywordtype">int</span>     iGlobalSizeX = 0;
-<a name="l00400"></a>00400     <span class="keywordtype">int</span>     iGlobalSizeY = 0;
-<a name="l00401"></a>00401     <span class="keywordtype">int</span>     shiftMultX = 2;
-<a name="l00402"></a>00402     <span class="keywordtype">int</span>     shiftMultY = 2;
-<a name="l00403"></a>00403     <span class="keywordtype">int</span>*    pOffsetX = 0;
-<a name="l00404"></a>00404     <span class="keywordtype">int</span>*    pOffsetY = 0;
-<a name="l00405"></a>00405     <span class="keywordtype">double</span> dSignal = 0;
-<a name="l00406"></a>00406     <span class="keywordtype">double</span> dBkgSignal = 0;
-<a name="l00407"></a>00407     <span class="keywordtype">double</span> dNoiseLvl = 0;
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409     <span class="keywordtype">double</span> dSignalDelta = 0;
-<a name="l00410"></a>00410     <span class="keywordtype">int</span> iDefectX = 0;
-<a name="l00411"></a>00411     <span class="keywordtype">int</span> iDefectY = 0;
-<a name="l00412"></a>00412     <span class="keywordtype">double</span> dDefectValue = 0;
-<a name="l00413"></a>00413     <span class="keywordtype">int</span> iDefectNumber = 0;
-<a name="l00414"></a>00414     <span class="keywordtype">int</span> iCubesNumber = 0;
-<a name="l00415"></a>00415     <span class="keywordtype">int</span> iPlanesNumber = 0;
-<a name="l00417"></a>00417     <span class="keywordtype">int</span> z = 0;
-<a name="l00418"></a>00418     <span class="keywordtype">int</span> x = 0;
-<a name="l00419"></a>00419     <span class="keywordtype">int</span> y = 0;
-<a name="l00420"></a>00420     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa = 3;
-<a name="l00421"></a>00421     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;
-<a name="l00422"></a>00422     cpl_parameter       *   param = NULL ;
-<a name="l00423"></a>00423     cpl_propertylist    *   plist = NULL ;
-<a name="l00424"></a>00424     cpl_frame           *   product_frame = NULL;
-<a name="l00425"></a>00425     cpl_imagelist       ** ppCubes = NULL;
-<a name="l00426"></a>00426     cpl_imagelist       *  pResult = NULL;
-<a name="l00427"></a>00427     <span class="keywordtype">double</span>          *   exptimes = NULL;
-<a name="l00428"></a>00428     cpl_imagelist       *   mask = NULL;
-<a name="l00429"></a>00429     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00430"></a>00430     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00431"></a>00431     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00432"></a>00432 
-<a name="l00433"></a>00433 
-<a name="l00434"></a>00434 <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00435"></a>00435       <span class="comment">/* --size_x */</span>
-<a name="l00436"></a>00436       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00437"></a>00437                                                PARAM_NAME_SIZE_X));
-<a name="l00438"></a>00438       check_nomsg(iSizeX=cpl_parameter_get_int(param));
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440       <span class="comment">/* --size_y */</span>
-<a name="l00441"></a>00441       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00442"></a>00442                                                PARAM_NAME_SIZE_Y));
-<a name="l00443"></a>00443       check_nomsg(iSizeY=cpl_parameter_get_int(param));
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445       <span class="comment">/* --fwhm_x */</span>
-<a name="l00446"></a>00446       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00447"></a>00447                                                PARAM_NAME_FWHM_X));
-<a name="l00448"></a>00448       check_nomsg(iFWHMX=cpl_parameter_get_int(param));
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450       <span class="comment">/* --fwhm_y */</span>
-<a name="l00451"></a>00451       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00452"></a>00452                                                PARAM_NAME_FWHM_Y));
-<a name="l00453"></a>00453       check_nomsg(iFWHMY=cpl_parameter_get_int(param));
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455       <span class="comment">/* --total_signal */</span>
-<a name="l00456"></a>00456       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00457"></a>00457                                                PARAM_NAME_SIGNAL));
-<a name="l00458"></a>00458       check_nomsg(dSignal=cpl_parameter_get_double(param));
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460       <span class="comment">/* --bkg_signal */</span>
-<a name="l00461"></a>00461       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00462"></a>00462                                                PARAM_NAME_BKGSIG));
-<a name="l00463"></a>00463       check_nomsg(dBkgSignal=cpl_parameter_get_double(param));
-<a name="l00464"></a>00464 
-<a name="l00465"></a>00465       <span class="comment">/* --noise_level */</span>
-<a name="l00466"></a>00466       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00467"></a>00467                                                PARAM_NAME_NOISEL));
-<a name="l00468"></a>00468       check_nomsg(dNoiseLvl=cpl_parameter_get_double(param));
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470       <span class="comment">/* --cubes_number */</span>
-<a name="l00471"></a>00471       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00472"></a>00472                                                PARAM_NAME_CUBES_NUMBER));
-<a name="l00473"></a>00473       check_nomsg(iCubesNumber=cpl_parameter_get_int(param));
-<a name="l00474"></a>00474 
-<a name="l00475"></a>00475       <span class="comment">/* --planes_number */</span>
-<a name="l00476"></a>00476       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00477"></a>00477                                                PARAM_NAME_PLANES_NUMBER));
-<a name="l00478"></a>00478       check_nomsg(iPlanesNumber=cpl_parameter_get_int(param));
-<a name="l00479"></a>00479 
-<a name="l00480"></a>00480       <span class="comment">/* -signal_delta */</span>
-<a name="l00481"></a>00481       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00482"></a>00482                                                PARAM_NAME_SIGNAL_DELTA));
-<a name="l00483"></a>00483       check_nomsg(dSignalDelta=cpl_parameter_get_double(param));
-<a name="l00484"></a>00484 
-<a name="l00485"></a>00485       <span class="comment">/* --defect_x */</span>
-<a name="l00486"></a>00486       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00487"></a>00487                                                PARAM_NAME_DEFECT_X));
-<a name="l00488"></a>00488       check_nomsg(iDefectX=cpl_parameter_get_int(param));
-<a name="l00489"></a>00489 
-<a name="l00490"></a>00490       <span class="comment">/* --defect_y */</span>
-<a name="l00491"></a>00491       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00492"></a>00492                                                PARAM_NAME_DEFECT_Y));
-<a name="l00493"></a>00493       check_nomsg(iDefectY=cpl_parameter_get_int(param));
-<a name="l00494"></a>00494 
-<a name="l00495"></a>00495       <span class="comment">/* --defect_value */</span>
-<a name="l00496"></a>00496       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00497"></a>00497                                                PARAM_NAME_DEFECT_SIGNAL));
-<a name="l00498"></a>00498       check_nomsg(dDefectValue=cpl_parameter_get_double(param));
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500       <span class="comment">/* --defect_number */</span>
-<a name="l00501"></a>00501       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00502"></a>00502                                                PARAM_NAME_DEFECT_NUMBER));
-<a name="l00503"></a>00503       check_nomsg(iDefectNumber=cpl_parameter_get_int(param));
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span>
-<a name="l00507"></a>00507     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00510"></a>00510     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     <span class="comment">// 1. Create cubes</span>
-<a name="l00513"></a>00513     ppCubes = (cpl_imagelist**)cpl_malloc(<span class="keyword">sizeof</span>(cpl_imagelist*) * (iCubesNumber + 2)); <span class="comment">// +1 for the result, +1 for the mask</span>
-<a name="l00514"></a>00514     pOffsetX = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) * iCubesNumber);
-<a name="l00515"></a>00515     pOffsetY = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) * iCubesNumber);
-<a name="l00516"></a>00516 <span class="comment">//    iGlobalSizeX = iSizeX + (iCubesNumber-1) * shiftMultX;// it's not a fair calculation - only for test</span>
-<a name="l00517"></a>00517 <span class="comment">//    iGlobalSizeY = iSizeY + (iCubesNumber-1) * shiftMultY;</span>
-<a name="l00518"></a>00518     sinfo_msg(<span class="stringliteral">"Creating cubes...."</span>);
-<a name="l00519"></a>00519     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)
-<a name="l00520"></a>00520     {
-<a name="l00521"></a>00521         pOffsetX[z] = shiftMultX*z;<span class="comment">// + ((z%3) - 3) * shiftMultX ;</span>
-<a name="l00522"></a>00522         pOffsetY[z] = shiftMultY*z;<span class="comment">// + (((z-2)%3) - 1) * shiftMultY / 2;</span>
-<a name="l00523"></a>00523         cpl_msg_warning(cpl_func, <span class="stringliteral">"cube [%d] offset[%d:%d]"</span>, z,pOffsetX[z], pOffsetY[z] );
-<a name="l00524"></a>00524         cpl_imagelist* pCube =
-<a name="l00525"></a>00525         create_cube_shift(
-<a name="l00526"></a>00526                 iSizeX,
-<a name="l00527"></a>00527                 iSizeY,
-<a name="l00528"></a>00528                 iPlanesNumber,
-<a name="l00529"></a>00529                 iFWHMX,
-<a name="l00530"></a>00530                 iFWHMY,
-<a name="l00531"></a>00531                 -pOffsetX[z],
-<a name="l00532"></a>00532                 -pOffsetY[z],
-<a name="l00533"></a>00533                 dSignal,
-<a name="l00534"></a>00534                 dBkgSignal,
-<a name="l00535"></a>00535                 dNoiseLvl,
-<a name="l00536"></a>00536                 dSignalDelta,
-<a name="l00537"></a>00537                 iDefectX,
-<a name="l00538"></a>00538                 iDefectY,
-<a name="l00539"></a>00539                 (z < iDefectNumber) ? dDefectValue : 0,
-<a name="l00540"></a>00540                 0
-<a name="l00541"></a>00541         );
-<a name="l00542"></a>00542         ppCubes[z] = pCube;
-<a name="l00543"></a>00543 
-<a name="l00544"></a>00544         <span class="comment">// fill NAN areas</span>
-<a name="l00545"></a>00545 <span class="comment">/*      cpl_image* pImage = cpl_imagelist_get(pCube, 0);</span>
-<a name="l00546"></a>00546 <span class="comment">        switch(z)</span>
-<a name="l00547"></a>00547 <span class="comment">        {</span>
-<a name="l00548"></a>00548 <span class="comment">        case 0:</span>
-<a name="l00549"></a>00549 <span class="comment">            {</span>
-<a name="l00550"></a>00550 <span class="comment">                for (x = 1; x <=iSizeX; x++)</span>
-<a name="l00551"></a>00551 <span class="comment">                {</span>
-<a name="l00552"></a>00552 <span class="comment">                    for (y = 1; y <= 16; y++)</span>
-<a name="l00553"></a>00553 <span class="comment">                    {</span>
-<a name="l00554"></a>00554 <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span>
-<a name="l00555"></a>00555 <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y+48, sqrt(-1)));</span>
-<a name="l00556"></a>00556 <span class="comment">                    }</span>
-<a name="l00557"></a>00557 <span class="comment">                }</span>
-<a name="l00558"></a>00558 <span class="comment">            }</span>
-<a name="l00559"></a>00559 <span class="comment">            break;</span>
-<a name="l00560"></a>00560 <span class="comment">        case 1:</span>
-<a name="l00561"></a>00561 <span class="comment">            {</span>
-<a name="l00562"></a>00562 <span class="comment">                for (x = 1; x <=iSizeX; x++)</span>
-<a name="l00563"></a>00563 <span class="comment">                {</span>
-<a name="l00564"></a>00564 <span class="comment">                    for (y = 1; y <= 8; y++)</span>
-<a name="l00565"></a>00565 <span class="comment">                    {</span>
-<a name="l00566"></a>00566 <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span>
-<a name="l00567"></a>00567 <span class="comment">                    }</span>
-<a name="l00568"></a>00568 <span class="comment">                    for (y = 24; y <= iSizeY; y++)</span>
-<a name="l00569"></a>00569 <span class="comment">                    {</span>
-<a name="l00570"></a>00570 <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span>
-<a name="l00571"></a>00571 <span class="comment"></span>
-<a name="l00572"></a>00572 <span class="comment">                    }</span>
-<a name="l00573"></a>00573 <span class="comment">                }</span>
-<a name="l00574"></a>00574 <span class="comment">            }</span>
-<a name="l00575"></a>00575 <span class="comment">            break;</span>
-<a name="l00576"></a>00576 <span class="comment">        }</span>
-<a name="l00577"></a>00577 <span class="comment">*/</span>
-<a name="l00578"></a>00578     }
-<a name="l00579"></a>00579     <span class="comment">// 2. make a kappa-sigma clipping</span>
-<a name="l00580"></a>00580 <span class="comment">/*    pResult =  kappa_sigma(</span>
-<a name="l00581"></a>00581 <span class="comment">            iSizeX,</span>
-<a name="l00582"></a>00582 <span class="comment">            iSizeY,</span>
-<a name="l00583"></a>00583 <span class="comment">            iCubesNumber,</span>
-<a name="l00584"></a>00584 <span class="comment">            iPlanesNumber,</span>
-<a name="l00585"></a>00585 <span class="comment">            kappa,</span>
-<a name="l00586"></a>00586 <span class="comment">            NULL,</span>
-<a name="l00587"></a>00587 <span class="comment">            ppCubes);*/</span>
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589     <span class="comment">// prepare offset arrays</span>
-<a name="l00590"></a>00590     sinfo_msg(<span class="stringliteral">"Kappa-sigma...."</span>);
-<a name="l00591"></a>00591 
-<a name="l00592"></a>00592     <span class="comment">// determine size of the coadded cube</span>
-<a name="l00593"></a>00593     <span class="keyword">const</span> <span class="keywordtype">int</span> BIG_ENOUGH_INT = 65535;
-<a name="l00594"></a>00594     <span class="keywordtype">int</span> xmax = -BIG_ENOUGH_INT;
-<a name="l00595"></a>00595     <span class="keywordtype">int</span> ymax = -BIG_ENOUGH_INT;
-<a name="l00596"></a>00596     <span class="keywordtype">int</span> xmin = BIG_ENOUGH_INT;
-<a name="l00597"></a>00597     <span class="keywordtype">int</span> ymin = BIG_ENOUGH_INT;
-<a name="l00598"></a>00598     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)
-<a name="l00599"></a>00599     {
-<a name="l00600"></a>00600 
-<a name="l00601"></a>00601         <span class="keywordtype">int</span> localMaxX = iSizeX + pOffsetX[z];
-<a name="l00602"></a>00602         <span class="keywordtype">int</span> localMaxY = iSizeY + pOffsetY[z];
-<a name="l00603"></a>00603         <span class="keywordtype">int</span> localMinX = pOffsetX[z];
-<a name="l00604"></a>00604         <span class="keywordtype">int</span> localMinY = pOffsetY[z];
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606         <span class="keywordflow">if</span>(localMaxX > xmax) xmax = localMaxX;
-<a name="l00607"></a>00607         <span class="keywordflow">if</span>(localMaxY > ymax) ymax = localMaxY;
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609         <span class="keywordflow">if</span>(localMinX < xmin) xmin = localMinX;
-<a name="l00610"></a>00610         <span class="keywordflow">if</span>(localMinY < ymin) ymin = localMinY;
-<a name="l00611"></a>00611     }
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613     iGlobalSizeX = xmax - xmin;
-<a name="l00614"></a>00614     iGlobalSizeY = ymax - ymin;
-<a name="l00615"></a>00615     cpl_msg_warning(cpl_func, <span class="stringliteral">"iGlobalSize[%d:%d] xmaxmin[%d:%d] ymaxmin[%d:%d]"</span>, iGlobalSizeX, iGlobalSizeY, xmin, xmax, ymin, ymax);
-<a name="l00616"></a>00616     pResult = cpl_imagelist_new();
-<a name="l00617"></a>00617     exptimes = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * iCubesNumber);
-<a name="l00618"></a>00618     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)
-<a name="l00619"></a>00619     {
-<a name="l00620"></a>00620         exptimes[z] = 10.;
-<a name="l00621"></a>00621     }
-<a name="l00622"></a>00622     mask= cpl_imagelist_new();
-<a name="l00623"></a>00623     <span class="keywordflow">for</span> (z = 0; z < iPlanesNumber; z++)
-<a name="l00624"></a>00624     {
-<a name="l00625"></a>00625         cpl_image* imMask = cpl_image_new(iGlobalSizeX, iGlobalSizeY, CPL_TYPE_FLOAT);
-<a name="l00626"></a>00626         cpl_image* imResult = cpl_image_new(iGlobalSizeX, iGlobalSizeY, CPL_TYPE_FLOAT);
-<a name="l00627"></a>00627         <span class="keywordflow">for</span> (x = 1; x <= iGlobalSizeX; x++)
-<a name="l00628"></a>00628         {
-<a name="l00629"></a>00629             <span class="keywordflow">for</span> (y = 1; y <= iGlobalSizeY; y++)
-<a name="l00630"></a>00630             {
-<a name="l00631"></a>00631                 cpl_image_set(imMask, x, y, 100);
-<a name="l00632"></a>00632             }
-<a name="l00633"></a>00633         }
-<a name="l00634"></a>00634         cpl_imagelist_set(mask, imMask, z);
-<a name="l00635"></a>00635         cpl_imagelist_set(pResult, imResult, z);
-<a name="l00636"></a>00636     }
-<a name="l00637"></a>00637 
-<a name="l00638"></a>00638     sinfo_coadd_with_ks_clip_optimized(
-<a name="l00639"></a>00639                 0,
-<a name="l00640"></a>00640                 iPlanesNumber,
-<a name="l00641"></a>00641                 iSizeX,
-<a name="l00642"></a>00642                 iSizeY,
-<a name="l00643"></a>00643                 iCubesNumber,
-<a name="l00644"></a>00644                 kappa,
-<a name="l00645"></a>00645                 pOffsetX,
-<a name="l00646"></a>00646                 pOffsetY,
-<a name="l00647"></a>00647                 exptimes,
-<a name="l00648"></a>00648                 mask,
-<a name="l00649"></a>00649                 pResult,
-<a name="l00650"></a>00650                 ppCubes);
-<a name="l00651"></a>00651 <span class="comment">//    pResult = kappa_sigma_offset(iGlobalSizeX, iGlobalSizeY, iCubesNumber, ppCubes, iCubesNumber, pOffsetY, kappa);</span>
-<a name="l00652"></a>00652 
-<a name="l00653"></a>00653 
-<a name="l00654"></a>00654 
-<a name="l00655"></a>00655     sinfo_msg(<span class="stringliteral">"Saving results"</span>);
-<a name="l00656"></a>00656     ppCubes[iCubesNumber] = pResult;
-<a name="l00657"></a>00657     ppCubes[iCubesNumber + 1] = mask;
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00660"></a>00660     <span class="comment">/* Set the file name */</span>
-<a name="l00661"></a>00661     name_o = <span class="stringliteral">"ima_res_0000.fits"</span> ;
-<a name="l00662"></a>00662 
-<a name="l00663"></a>00663     <span class="comment">/* Create product frame */</span>
-<a name="l00664"></a>00664     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00665"></a>00665     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00666"></a>00666     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"image_gauss"</span> )) ;
-<a name="l00667"></a>00667     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00668"></a>00668     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00669"></a>00669     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00670"></a>00670       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00671"></a>00671 
-<a name="l00672"></a>00672     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00673"></a>00673     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00674"></a>00674 <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span>
-<a name="l00675"></a>00675     check(cpl_dfs_setup_product_header(plist,
-<a name="l00676"></a>00676                                        product_frame,
-<a name="l00677"></a>00677                                        framelist,
-<a name="l00678"></a>00678                                        parlist,
-<a name="l00679"></a>00679                                        <span class="stringliteral">"sinfo_utl_ima_cube_ks_test"</span>,
-<a name="l00680"></a>00680                                        <span class="stringliteral">"SINFONI"</span>,
-<a name="l00681"></a>00681                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00682"></a>00682       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00683"></a>00683 
-<a name="l00684"></a>00684     <span class="comment">/* Save the input images file */</span>
-<a name="l00685"></a>00685 
-<a name="l00686"></a>00686     <span class="keywordflow">for</span> (z = 0; z <= iCubesNumber + 1; z++) <span class="comment">// the last imagelist is result after kappa-sigma, the very last is the mask</span>
-<a name="l00687"></a>00687     {
-<a name="l00688"></a>00688         <span class="keywordtype">char</span> BUF[256];
-<a name="l00689"></a>00689         sprintf(BUF,<span class="stringliteral">"out_cube_%d.fits"</span>,z);
-<a name="l00690"></a>00690         sinfo_msg(<span class="stringliteral">"Saving results cube[%d]"</span>,z);
-<a name="l00691"></a>00691         check(cpl_imagelist_save(ppCubes[z],
-<a name="l00692"></a>00692                 BUF,
-<a name="l00693"></a>00693                        CPL_BPP_IEEE_FLOAT,
-<a name="l00694"></a>00694                        plist,
-<a name="l00695"></a>00695                        CPL_IO_DEFAULT),
-<a name="l00696"></a>00696             <span class="stringliteral">"Could not save product"</span>);
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698         ck0(sinfo_pro_save_ims(ppCubes[z],framelist,framelist,BUF,<span class="stringliteral">"CUBE"</span>,NULL,
-<a name="l00699"></a>00699                         <span class="stringliteral">"sinfo_utl_ima_cube_ks_ex"</span>,parlist),
-<a name="l00700"></a>00700             <span class="stringliteral">"cannot save cube %s"</span>, BUF);
-<a name="l00701"></a>00701     }
-<a name="l00702"></a>00702 
-<a name="l00703"></a>00703     sinfo_free_propertylist(&plist) ;
-<a name="l00704"></a>00704     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00705"></a>00705     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00706"></a>00706 
-<a name="l00707"></a>00707 
-<a name="l00708"></a>00708  cleanup:
-<a name="l00709"></a>00709 
-<a name="l00710"></a>00710 <span class="comment">//    sinfo_free_frameset(&raw_set);</span>
-<a name="l00711"></a>00711     sinfo_free_propertylist(&plist) ;
-<a name="l00712"></a>00712     <span class="keywordflow">for</span> (z = 0; z <= iCubesNumber + 1; z++) <span class="comment">// the last imagelist is result after kappa-sigma, the very last is the mask</span>
-<a name="l00713"></a>00713     {
-<a name="l00714"></a>00714         cpl_imagelist_delete(ppCubes[z]);
-<a name="l00715"></a>00715     }
-<a name="l00716"></a>00716     cpl_free(ppCubes);
-<a name="l00717"></a>00717     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00718"></a>00718 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00719"></a>00719 <span class="comment">    */</span>
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721     <span class="keywordflow">return</span> cpl_error_get_code() ? -1 : 0;
-<a name="l00722"></a>00722 
-<a name="l00723"></a>00723 }
-<a name="l00724"></a>00724 cpl_imagelist* create_cube_shift(
-<a name="l00725"></a>00725                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00726"></a>00726                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00727"></a>00727                 <span class="keywordtype">int</span> iPlanesNumber,
-<a name="l00728"></a>00728                 <span class="keywordtype">int</span> iFWHMX,
-<a name="l00729"></a>00729                 <span class="keywordtype">int</span> iFWHMY,
-<a name="l00730"></a>00730                 <span class="keywordtype">int</span> shiftX,
-<a name="l00731"></a>00731                 <span class="keywordtype">int</span> shiftY,
-<a name="l00732"></a>00732                 <span class="keywordtype">double</span> dSignal,
-<a name="l00733"></a>00733                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00734"></a>00734                 <span class="keywordtype">double</span> dNoiseLvl,
-<a name="l00735"></a>00735                 <span class="keywordtype">double</span> dSignalDelta,
-<a name="l00736"></a>00736                 <span class="keywordtype">int</span> iDefectX,
-<a name="l00737"></a>00737                 <span class="keywordtype">int</span> iDefectY,
-<a name="l00738"></a>00738                 <span class="keywordtype">double</span> dDefectValue,
-<a name="l00739"></a>00739                 <span class="keywordtype">int</span> type
-<a name="l00740"></a>00740 )
-<a name="l00741"></a>00741 {
-<a name="l00742"></a>00742     <span class="keywordtype">int</span> z = 0;
-<a name="l00743"></a>00743     cpl_image* pPlane = NULL;
-<a name="l00744"></a>00744     cpl_imagelist* pRetval = NULL;
-<a name="l00745"></a>00745     pRetval = cpl_imagelist_new();
-<a name="l00746"></a>00746 
-<a name="l00747"></a>00747     <span class="keywordflow">for</span> (z = 0; z < iPlanesNumber; z++)
-<a name="l00748"></a>00748     {
-<a name="l00749"></a>00749         <span class="keywordtype">double</span> dSignalValue = dSignal + z * dSignalDelta;
-<a name="l00750"></a>00750         <span class="keywordflow">switch</span> (type)
-<a name="l00751"></a>00751         {
-<a name="l00752"></a>00752         <span class="keywordflow">case</span> 0:
-<a name="l00753"></a>00753             pPlane = create_plane(
-<a name="l00754"></a>00754                             iSizeX,
-<a name="l00755"></a>00755                             iSizeY,
-<a name="l00756"></a>00756                             iFWHMX,
-<a name="l00757"></a>00757                             iFWHMY,
-<a name="l00758"></a>00758                             shiftX,
-<a name="l00759"></a>00759                             shiftY,
-<a name="l00760"></a>00760                             dSignalValue,
-<a name="l00761"></a>00761                             dBkgSignal,
-<a name="l00762"></a>00762                             dNoiseLvl
-<a name="l00763"></a>00763                         );
-<a name="l00764"></a>00764             <span class="keywordflow">break</span>;
-<a name="l00765"></a>00765         <span class="keywordflow">case</span> 1:
-<a name="l00766"></a>00766             pPlane = create_square_plane(
-<a name="l00767"></a>00767                             iSizeX,
-<a name="l00768"></a>00768                             iSizeY,
-<a name="l00769"></a>00769                             iFWHMX,
-<a name="l00770"></a>00770                             iFWHMY,
-<a name="l00771"></a>00771                             shiftX,
-<a name="l00772"></a>00772                             shiftY,
-<a name="l00773"></a>00773                             dSignalValue,
-<a name="l00774"></a>00774                             dBkgSignal,
-<a name="l00775"></a>00775                             dNoiseLvl
-<a name="l00776"></a>00776                         );
-<a name="l00777"></a>00777             <span class="keywordflow">break</span>;
-<a name="l00778"></a>00778         }
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780 
-<a name="l00781"></a>00781         <span class="keywordflow">if</span> (dDefectValue)
-<a name="l00782"></a>00782         {
-<a name="l00783"></a>00783             put_defect(pPlane, iDefectX, iDefectY, dDefectValue);
-<a name="l00784"></a>00784         }
-<a name="l00785"></a>00785         putNAN(pPlane, iDefectX + shiftX, iDefectY + shiftY);
-<a name="l00786"></a>00786         cpl_imagelist_set(pRetval, pPlane, z);
-<a name="l00787"></a>00787     }
-<a name="l00788"></a>00788     <span class="keywordflow">return</span> pRetval;
-<a name="l00789"></a>00789 }
-<a name="l00790"></a>00790 cpl_image* create_plane(
-<a name="l00791"></a>00791                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00792"></a>00792                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00793"></a>00793                 <span class="keywordtype">int</span> iFWHMX,
-<a name="l00794"></a>00794                 <span class="keywordtype">int</span> iFWHMY,
-<a name="l00795"></a>00795                 <span class="keywordtype">int</span> shiftX,
-<a name="l00796"></a>00796                 <span class="keywordtype">int</span> shiftY,
-<a name="l00797"></a>00797                 <span class="keywordtype">double</span> dSignal,
-<a name="l00798"></a>00798                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00799"></a>00799                 <span class="keywordtype">double</span> dNoiseLvl
-<a name="l00800"></a>00800 )
-<a name="l00801"></a>00801 {
-<a name="l00802"></a>00802     cpl_image* imNoise = NULL;
-<a name="l00803"></a>00803     cpl_image* imGauss = NULL;
-<a name="l00804"></a>00804     cpl_image* imResult = NULL;
-<a name="l00805"></a>00805     <span class="keyword">const</span> <span class="keywordtype">double</span> K = 2.35482;<span class="comment">//1. / (2. * sqrt(2.* ln(2.)));</span>
-<a name="l00806"></a>00806 
-<a name="l00807"></a>00807     imNoise = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);
-<a name="l00808"></a>00808     cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl);
-<a name="l00809"></a>00809     imGauss = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);
-<a name="l00810"></a>00810     sinfo_msg(<span class="stringliteral">"Generate Gaussian center[%d:%d] signal[%f], sigma[%f:%f]"</span>, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);
-<a name="l00811"></a>00811     cpl_image_fill_gaussian(imGauss, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);
-<a name="l00812"></a>00812     imResult = cpl_image_add_create(imGauss, imNoise);
-<a name="l00813"></a>00813 
-<a name="l00814"></a>00814     <span class="comment">// cleanup</span>
-<a name="l00815"></a>00815     <span class="keywordflow">if</span> (imNoise)
-<a name="l00816"></a>00816     {
-<a name="l00817"></a>00817         cpl_image_delete(imNoise);
-<a name="l00818"></a>00818         imNoise = 0;
-<a name="l00819"></a>00819     }
-<a name="l00820"></a>00820     <span class="keywordflow">if</span> (imGauss)
-<a name="l00821"></a>00821     {
-<a name="l00822"></a>00822         cpl_image_delete(imGauss);
-<a name="l00823"></a>00823         imGauss = 0;
-<a name="l00824"></a>00824     }
-<a name="l00825"></a>00825     <span class="keywordflow">return</span> imResult;
-<a name="l00826"></a>00826 }
-<a name="l00827"></a>00827 cpl_image* create_square_plane(
-<a name="l00828"></a>00828                 <span class="keywordtype">int</span> iSizeX,
-<a name="l00829"></a>00829                 <span class="keywordtype">int</span> iSizeY,
-<a name="l00830"></a>00830                 <span class="keywordtype">int</span> iHoleX,
-<a name="l00831"></a>00831                 <span class="keywordtype">int</span> iHoleY,
-<a name="l00832"></a>00832                 <span class="keywordtype">int</span> shiftX,
-<a name="l00833"></a>00833                 <span class="keywordtype">int</span> shiftY,
-<a name="l00834"></a>00834                 <span class="keywordtype">double</span> dSignal,
-<a name="l00835"></a>00835                 <span class="keywordtype">double</span> dBkgSignal,
-<a name="l00836"></a>00836                 <span class="keywordtype">double</span> dNoiseLvl
-<a name="l00837"></a>00837 )
-<a name="l00838"></a>00838 {
-<a name="l00839"></a>00839     cpl_image* imNoise = NULL;
-<a name="l00840"></a>00840     cpl_image* imHole = NULL;
-<a name="l00841"></a>00841     cpl_image* imResult = NULL;
-<a name="l00842"></a>00842     <span class="keywordtype">int</span> x = 0;
-<a name="l00843"></a>00843     <span class="keywordtype">int</span> y = 0;
-<a name="l00844"></a>00844     <span class="keywordtype">int</span> xHoleInitial = 0;
-<a name="l00845"></a>00845     <span class="keywordtype">int</span> yHoleInitial = 0;
-<a name="l00846"></a>00846     imNoise = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);
-<a name="l00847"></a>00847     cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl);
-<a name="l00848"></a>00848     imHole = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);
-<a name="l00849"></a>00849     xHoleInitial = iSizeX / 2 - iHoleX / 2;
-<a name="l00850"></a>00850     yHoleInitial = iSizeY / 2 - iHoleY / 2;
-<a name="l00851"></a>00851     <span class="keywordflow">for</span> (x = 0; x <= iHoleX; x++)
-<a name="l00852"></a>00852     {
-<a name="l00853"></a>00853         <span class="keywordflow">for</span> (y = 0; y <= iHoleY; y++)
-<a name="l00854"></a>00854         {
-<a name="l00855"></a>00855             <span class="keywordtype">int</span> pX = x + xHoleInitial + shiftX ;
-<a name="l00856"></a>00856             <span class="keywordtype">int</span> pY = y + yHoleInitial + shiftY;
-<a name="l00857"></a>00857             <span class="keywordflow">if</span> ((pX <= iSizeX) &&(pY <= iSizeY))
-<a name="l00858"></a>00858             cpl_image_set(imHole, pX,pY, dSignal);
-<a name="l00859"></a>00859         }
-<a name="l00860"></a>00860     }
-<a name="l00861"></a>00861     <span class="comment">//cpl_image_fill_gaussian(imGauss, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);</span>
-<a name="l00862"></a>00862     imResult = cpl_image_add_create(imHole, imNoise);
-<a name="l00863"></a>00863 
-<a name="l00864"></a>00864     <span class="comment">// cleanup</span>
-<a name="l00865"></a>00865     <span class="keywordflow">if</span> (imNoise)
-<a name="l00866"></a>00866     {
-<a name="l00867"></a>00867         cpl_image_delete(imNoise);
-<a name="l00868"></a>00868         imNoise = 0;
-<a name="l00869"></a>00869     }
-<a name="l00870"></a>00870     <span class="keywordflow">if</span> (imHole)
-<a name="l00871"></a>00871     {
-<a name="l00872"></a>00872         cpl_image_delete(imHole);
-<a name="l00873"></a>00873         imHole = 0;
-<a name="l00874"></a>00874     }
-<a name="l00875"></a>00875     <span class="keywordflow">return</span> imResult;
-<a name="l00876"></a>00876 }
-<a name="l00877"></a>00877 <span class="keywordtype">int</span> put_defect(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY, <span class="keywordtype">double</span> dDefectValue)
-<a name="l00878"></a>00878 {
-<a name="l00879"></a>00879     sinfo_msg(<span class="stringliteral">"Set bad pixel x[%d] y[%d] value[%f]"</span>, iDefectX, iDefectY, dDefectValue);
-<a name="l00880"></a>00880     <span class="keywordflow">if</span> (pPlane)
-<a name="l00881"></a>00881     {
-<a name="l00882"></a>00882         cpl_image_set(pPlane, iDefectX, iDefectY, dDefectValue);
-<a name="l00883"></a>00883         cpl_image_set(pPlane, iDefectX+1, iDefectY+1, dDefectValue);
-<a name="l00884"></a>00884         cpl_image_set(pPlane, iDefectX-1, iDefectY-1, dDefectValue);
-<a name="l00885"></a>00885         cpl_image_set(pPlane, iDefectX+1, iDefectY-1, dDefectValue);
-<a name="l00886"></a>00886         cpl_image_set(pPlane, iDefectX-1, iDefectY+1, dDefectValue);
-<a name="l00887"></a>00887     }
-<a name="l00888"></a>00888     <span class="keywordflow">return</span> 0;
-<a name="l00889"></a>00889 }
-<a name="l00890"></a>00890 
-<a name="l00891"></a>00891 <span class="keywordtype">void</span> putNAN(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY)
-<a name="l00892"></a>00892 {
-<a name="l00893"></a>00893     cpl_image_set(pPlane, iDefectX, iDefectY, ZERO);
-<a name="l00894"></a>00894 }
-<a name="l00895"></a>00895 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_ima_cube_ks_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_ima_cube_ks_test.c,v 1.12 2012/05/04 08:11:55 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/05/04 08:11:55 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.12 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> * $Log: sinfo_utl_ima_cube_ks_test.c,v $</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> * Revision 1.12  2012/05/04 08:11:55  amodigli</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment"> * fixed errors fromn cpptest</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> * Revision 1.11  2009/11/12 14:49:38  kmirny</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment"> * changing output message</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * Revision 1.10  2009/07/27 10:34:54  amodigli</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> * fixed typo in short description</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> * Revision 1.9  2009/06/03 14:59:31  kmirny</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment"> * rollback</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="preprocessor">#include <sinfo_pro_save.h></span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor">#include <sinfo_new_cube_ops.h></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> cpl_imagelist* create_cube_shift(</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                 <span class="keywordtype">int</span> iPlanesNumber,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                 <span class="keywordtype">int</span> iFWHMX,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                 <span class="keywordtype">int</span> iFWHMY,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                 <span class="keywordtype">double</span> dNoiseLvl,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                 <span class="keywordtype">double</span> dSignalDelta,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                 <span class="keywordtype">int</span> iDefectX,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                 <span class="keywordtype">int</span> iDefectY,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                 <span class="keywordtype">double</span> dDefectValue,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                 <span class="keywordtype">int</span> type</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         );</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="keyword">static</span> cpl_image* create_plane(</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                 <span class="keywordtype">int</span> iFWHMX,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                 <span class="keywordtype">int</span> iFWHMY,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                 <span class="keywordtype">double</span> dNoiseLvl</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>         );</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="keyword">static</span> cpl_image* create_square_plane(</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                 <span class="keywordtype">int</span> iHoleX,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                 <span class="keywordtype">int</span> iHoleY,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                 <span class="keywordtype">double</span> dNoiseLvl);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="keyword">static</span> <span class="keywordtype">int</span> put_defect(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY, <span class="keywordtype">double</span> dDefectValue);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="keywordtype">void</span> putNAN(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_cube_ks_test_description[] =</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="stringliteral">"This recipe produces a test for kappa-sigma clipping\n"</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="stringliteral">"esorex --params sinfo_utl_ima_cube_ks_test\n"</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="stringliteral">"esorex --help sinfo_utl_ima_cube_ks_test\n"</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.size_x"</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.size_y"</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.fwhm_x"</span>;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.fwhm_y"</span>;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.total_signal"</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL_DELTA[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.total_signal_delta"</span>;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_BKGSIG[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.bkg_signal"</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_NOISEL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.noise_level"</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_x"</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_y"</span>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_signal"</span>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_DEFECT_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.defect_number"</span>;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_CUBES_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.cubes_number"</span>;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_PLANES_NUMBER[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test.planes_number"</span>;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_cube_ks_test"</span>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno"><a class="code" href="group__sinfo__utl__ima__cube__ks__test.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  170</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> {</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                     <span class="stringliteral">"sinfo_utl_ima_cube_ks_test"</span>,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                     <span class="stringliteral">"Test cube coaddition with kappa-sigma clip of ouliers"</span>,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                     sinfo_utl_ima_cube_ks_test_description,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                     <span class="stringliteral">"Konstantin Mirny"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                     <span class="stringliteral">"kmirny at eso.org"</span>,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                     sinfo_utl_ima_cube_ks_test_create,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                     sinfo_utl_ima_cube_ks_test_exec,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                     sinfo_utl_ima_cube_ks_test_destroy) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> }</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> {</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> CUBES_NUMBER      = 5;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> PLANES_NUMBER     = 10;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_X_DEFAULT    = 64;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_Y_DEFAULT    = 64;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_X            = 24;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_Y            = 24;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> TOTAL_SIGNAL   = 1E6;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> SIGNAL_DELTA   = 1E5;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> BKG_SIGNAL     = 250.; <span class="comment">// 250</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> NOISE_VALUE    = 100;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_X          = 42;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_Y          = 42;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> DEFECT_SIGNAL  = 400;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> DEFECT_NUMBER     = 1;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_ima_cube_ks_test.op",</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="comment">                                CPL_TYPE_STRING,</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">                                "A possible operation",</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">                                "sinfoni.sinfo_utl_ima_cube_ks_test","+");</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>             CPL_TYPE_INT, <span class="stringliteral">"size X axis"</span>, RECIPE_NAME, SIZE_X_DEFAULT) ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_x"</span>) ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="comment">/* --size_y */</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     p = cpl_parameter_new_value(PARAM_NAME_SIZE_Y,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>             CPL_TYPE_INT, <span class="stringliteral">"size Y axis"</span>, RECIPE_NAME, SIZE_Y_DEFAULT) ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_y"</span>) ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="comment">/* --fwhm_x */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     p = cpl_parameter_new_value(PARAM_NAME_FWHM_X,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>             CPL_TYPE_INT, <span class="stringliteral">"FWHM X axis"</span>, RECIPE_NAME, FWHM_X) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_x"</span>) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* --fwhm_y */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     p = cpl_parameter_new_value(PARAM_NAME_FWHM_Y,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>             CPL_TYPE_INT, <span class="stringliteral">"FWHM Y axis"</span>, RECIPE_NAME, FWHM_Y) ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_y"</span>) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="comment">/* --total_signal */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     p = cpl_parameter_new_value(PARAM_NAME_SIGNAL,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Total signal value"</span>, RECIPE_NAME, TOTAL_SIGNAL) ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal"</span>) ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="comment">/* --bkg_signal */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     p = cpl_parameter_new_value(PARAM_NAME_BKGSIG,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"background signal level"</span>, RECIPE_NAME, BKG_SIGNAL) ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bkg_signal"</span>) ;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="comment">/* --noise_level */</span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     p = cpl_parameter_new_value(PARAM_NAME_NOISEL,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Noise level"</span>, RECIPE_NAME, NOISE_VALUE) ;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"noise_level"</span>) ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="comment">/* --cubes_number */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     p = cpl_parameter_new_value(PARAM_NAME_CUBES_NUMBER,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>             CPL_TYPE_INT, <span class="stringliteral">"Number of cubes"</span>, RECIPE_NAME, CUBES_NUMBER) ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"cubes_number"</span>) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="comment">/* --planes_number */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     p = cpl_parameter_new_value(PARAM_NAME_PLANES_NUMBER,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>             CPL_TYPE_INT, <span class="stringliteral">"Number of images for each cube"</span>, RECIPE_NAME, PLANES_NUMBER) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"planes_number"</span>) ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="comment">/* --signal_delta */</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         p = cpl_parameter_new_value(PARAM_NAME_SIGNAL_DELTA,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                 CPL_TYPE_DOUBLE, <span class="stringliteral">"Change of the signal for the next plane inside a cube"</span>, RECIPE_NAME, SIGNAL_DELTA) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal_delta"</span>) ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="comment">/* --defect_x */</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_X,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                 CPL_TYPE_INT, <span class="stringliteral">"X position of the bad pixel"</span>, RECIPE_NAME, DEFECT_X) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_x"</span>) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>         cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="comment">/* --defect_x */</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_Y,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                 CPL_TYPE_INT, <span class="stringliteral">"Y position of the bad pixel"</span>, RECIPE_NAME, DEFECT_Y) ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_y"</span>) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="comment">/* --defect_signal */</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_SIGNAL,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                 CPL_TYPE_DOUBLE, <span class="stringliteral">"signal value of the bad pixel"</span>, RECIPE_NAME, DEFECT_SIGNAL) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_signal"</span>) ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="comment">/* --defect_number */</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         p = cpl_parameter_new_value(PARAM_NAME_DEFECT_NUMBER,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                 CPL_TYPE_INT, <span class="stringliteral">"Number of planes in a cube with a bad pixel"</span>, RECIPE_NAME, DEFECT_NUMBER) ;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"defect_number"</span>) ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     code = sinfo_utl_ima_cube_ks_test(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     }</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> }</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_cube_ks_test_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> sinfo_utl_ima_cube_ks_test( cpl_parameterlist   *   parlist,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> {</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     <span class="comment">// parameters</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>     <span class="keywordtype">int</span>     iSizeX = 0;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     <span class="keywordtype">int</span>     iSizeY = 0;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordtype">int</span>     iFWHMX = 0;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     <span class="keywordtype">int</span>     iFWHMY = 0;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordtype">int</span>     iGlobalSizeX = 0;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     <span class="keywordtype">int</span>     iGlobalSizeY = 0;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="keywordtype">int</span>     shiftMultX = 2;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     <span class="keywordtype">int</span>     shiftMultY = 2;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     <span class="keywordtype">int</span>*    pOffsetX = 0;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="keywordtype">int</span>*    pOffsetY = 0;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordtype">double</span> dSignal = 0;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     <span class="keywordtype">double</span> dBkgSignal = 0;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     <span class="keywordtype">double</span> dNoiseLvl = 0;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     <span class="keywordtype">double</span> dSignalDelta = 0;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="keywordtype">int</span> iDefectX = 0;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="keywordtype">int</span> iDefectY = 0;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     <span class="keywordtype">double</span> dDefectValue = 0;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     <span class="keywordtype">int</span> iDefectNumber = 0;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     <span class="keywordtype">int</span> iCubesNumber = 0;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     <span class="keywordtype">int</span> iPlanesNumber = 0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordtype">int</span> z = 0;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     <span class="keywordtype">int</span> x = 0;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     <span class="keywordtype">int</span> y = 0;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> kappa = 3;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     cpl_parameter       *   param = NULL ;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     cpl_propertylist    *   plist = NULL ;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     cpl_frame           *   product_frame = NULL;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     cpl_imagelist       ** ppCubes = NULL;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     cpl_imagelist       *  pResult = NULL;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     <span class="keywordtype">double</span>          *   exptimes = NULL;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     cpl_imagelist       *   mask = NULL;</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span> </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span> </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>       <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>                                                PARAM_NAME_SIZE_X));</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>       check_nomsg(iSizeX=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>       <span class="comment">/* --size_y */</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                                                PARAM_NAME_SIZE_Y));</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>       check_nomsg(iSizeY=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>       <span class="comment">/* --fwhm_x */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                                                PARAM_NAME_FWHM_X));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>       check_nomsg(iFWHMX=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>       <span class="comment">/* --fwhm_y */</span></div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>                                                PARAM_NAME_FWHM_Y));</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>       check_nomsg(iFWHMY=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>       <span class="comment">/* --total_signal */</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                                                PARAM_NAME_SIGNAL));</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>       check_nomsg(dSignal=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>       <span class="comment">/* --bkg_signal */</span></div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>                                                PARAM_NAME_BKGSIG));</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>       check_nomsg(dBkgSignal=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span> </div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>       <span class="comment">/* --noise_level */</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                                                PARAM_NAME_NOISEL));</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>       check_nomsg(dNoiseLvl=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>       <span class="comment">/* --cubes_number */</span></div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                                                PARAM_NAME_CUBES_NUMBER));</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>       check_nomsg(iCubesNumber=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>       <span class="comment">/* --planes_number */</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                                                PARAM_NAME_PLANES_NUMBER));</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>       check_nomsg(iPlanesNumber=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span> </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>       <span class="comment">/* -signal_delta */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                                                PARAM_NAME_SIGNAL_DELTA));</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>       check_nomsg(dSignalDelta=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> </div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>       <span class="comment">/* --defect_x */</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                                                PARAM_NAME_DEFECT_X));</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>       check_nomsg(iDefectX=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span> </div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>       <span class="comment">/* --defect_y */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                                                PARAM_NAME_DEFECT_Y));</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       check_nomsg(iDefectY=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span> </div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>       <span class="comment">/* --defect_value */</span></div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>                                                PARAM_NAME_DEFECT_SIGNAL));</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>       check_nomsg(dDefectValue=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>       <span class="comment">/* --defect_number */</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>                                                PARAM_NAME_DEFECT_NUMBER));</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>       check_nomsg(iDefectNumber=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="comment">// 1. Create cubes</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     ppCubes = (cpl_imagelist**)cpl_malloc(<span class="keyword">sizeof</span>(cpl_imagelist*) * (iCubesNumber + 2)); <span class="comment">// +1 for the result, +1 for the mask</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     pOffsetX = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) * iCubesNumber);</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     pOffsetY = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) * iCubesNumber);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span> <span class="comment">//    iGlobalSizeX = iSizeX + (iCubesNumber-1) * shiftMultX;// it's not a fair calculation - only for test</span></div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> <span class="comment">//    iGlobalSizeY = iSizeY + (iCubesNumber-1) * shiftMultY;</span></div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     sinfo_msg(<span class="stringliteral">"Creating cubes...."</span>);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     {</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>         pOffsetX[z] = shiftMultX*z;<span class="comment">// + ((z%3) - 3) * shiftMultX ;</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>         pOffsetY[z] = shiftMultY*z;<span class="comment">// + (((z-2)%3) - 1) * shiftMultY / 2;</span></div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>         cpl_msg_warning(cpl_func, <span class="stringliteral">"cube [%d] offset[%d:%d]"</span>, z,pOffsetX[z], pOffsetY[z] );</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         cpl_imagelist* pCube =</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         create_cube_shift(</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>                 iSizeX,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>                 iSizeY,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>                 iPlanesNumber,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                 iFWHMX,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                 iFWHMY,</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>                 -pOffsetX[z],</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>                 -pOffsetY[z],</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>                 dSignal,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                 dBkgSignal,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                 dNoiseLvl,</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                 dSignalDelta,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                 iDefectX,</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>                 iDefectY,</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                 (z < iDefectNumber) ? dDefectValue : 0,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                 0</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         );</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         ppCubes[z] = pCube;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span> </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>         <span class="comment">// fill NAN areas</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> <span class="comment">/*      cpl_image* pImage = cpl_imagelist_get(pCube, 0);</span></div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> <span class="comment">        switch(z)</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> <span class="comment">        case 0:</span></div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> <span class="comment">                for (x = 1; x <=iSizeX; x++)</span></div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> <span class="comment">                {</span></div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="comment">                    for (y = 1; y <= 16; y++)</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment">                    {</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span></div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span> <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y+48, sqrt(-1)));</span></div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span> <span class="comment">                    }</span></div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span> <span class="comment">                }</span></div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> <span class="comment">            }</span></div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span> <span class="comment">            break;</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">        case 1:</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> <span class="comment">                for (x = 1; x <=iSizeX; x++)</span></div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> <span class="comment">                {</span></div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> <span class="comment">                    for (y = 1; y <= 8; y++)</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> <span class="comment">                    {</span></div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span> <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span></div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> <span class="comment">                    }</span></div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span> <span class="comment">                    for (y = 24; y <= iSizeY; y++)</span></div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> <span class="comment">                    {</span></div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span> <span class="comment">                        check_nomsg(cpl_image_set(pImage, x, y, sqrt(-1)));</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span> <span class="comment"></span></div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span> <span class="comment">                    }</span></div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> <span class="comment">                }</span></div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> <span class="comment">            }</span></div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> <span class="comment">            break;</span></div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span> <span class="comment">        }</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     <span class="comment">// 2. make a kappa-sigma clipping</span></div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span> <span class="comment">/*    pResult =  kappa_sigma(</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> <span class="comment">            iSizeX,</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> <span class="comment">            iSizeY,</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span> <span class="comment">            iCubesNumber,</span></div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span> <span class="comment">            iPlanesNumber,</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span> <span class="comment">            kappa,</span></div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span> <span class="comment">            NULL,</span></div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span> <span class="comment">            ppCubes);*/</span></div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     <span class="comment">// prepare offset arrays</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>     sinfo_msg(<span class="stringliteral">"Kappa-sigma...."</span>);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span> </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="comment">// determine size of the coadded cube</span></div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> BIG_ENOUGH_INT = 65535;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="keywordtype">int</span> xmax = -BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>     <span class="keywordtype">int</span> ymax = -BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     <span class="keywordtype">int</span> xmin = BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="keywordtype">int</span> ymin = BIG_ENOUGH_INT;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     {</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span> </div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>         <span class="keywordtype">int</span> localMaxX = iSizeX + pOffsetX[z];</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         <span class="keywordtype">int</span> localMaxY = iSizeY + pOffsetY[z];</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>         <span class="keywordtype">int</span> localMinX = pOffsetX[z];</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>         <span class="keywordtype">int</span> localMinY = pOffsetY[z];</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>         <span class="keywordflow">if</span>(localMaxX > xmax) xmax = localMaxX;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>         <span class="keywordflow">if</span>(localMaxY > ymax) ymax = localMaxY;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>         <span class="keywordflow">if</span>(localMinX < xmin) xmin = localMinX;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>         <span class="keywordflow">if</span>(localMinY < ymin) ymin = localMinY;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     }</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     iGlobalSizeX = xmax - xmin;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     iGlobalSizeY = ymax - ymin;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     cpl_msg_warning(cpl_func, <span class="stringliteral">"iGlobalSize[%d:%d] xmaxmin[%d:%d] ymaxmin[%d:%d]"</span>, iGlobalSizeX, iGlobalSizeY, xmin, xmax, ymin, ymax);</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     pResult = cpl_imagelist_new();</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     exptimes = cpl_malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>) * iCubesNumber);</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     <span class="keywordflow">for</span> (z = 0; z < iCubesNumber; z++)</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     {</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>         exptimes[z] = 10.;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     }</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     mask= cpl_imagelist_new();</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>     <span class="keywordflow">for</span> (z = 0; z < iPlanesNumber; z++)</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     {</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>         cpl_image* imMask = cpl_image_new(iGlobalSizeX, iGlobalSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         cpl_image* imResult = cpl_image_new(iGlobalSizeX, iGlobalSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         <span class="keywordflow">for</span> (x = 1; x <= iGlobalSizeX; x++)</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         {</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>             <span class="keywordflow">for</span> (y = 1; y <= iGlobalSizeY; y++)</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             {</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                 cpl_image_set(imMask, x, y, 100);</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>             }</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>         }</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>         cpl_imagelist_set(mask, imMask, z);</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>         cpl_imagelist_set(pResult, imResult, z);</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     }</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span> </div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     sinfo_coadd_with_ks_clip_optimized(</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>                 0,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>                 iPlanesNumber,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>                 iSizeX,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>                 iSizeY,</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>                 iCubesNumber,</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>                 kappa,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>                 pOffsetX,</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                 pOffsetY,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                 exptimes,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                 mask,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>                 pResult,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>                 ppCubes);</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> <span class="comment">//    pResult = kappa_sigma_offset(iGlobalSizeX, iGlobalSizeY, iCubesNumber, ppCubes, iCubesNumber, pOffsetY, kappa);</span></div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span> </div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span> </div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>     sinfo_msg(<span class="stringliteral">"Saving results"</span>);</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     ppCubes[iCubesNumber] = pResult;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     ppCubes[iCubesNumber + 1] = mask;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     name_o = <span class="stringliteral">"ima_res_0000.fits"</span> ;</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span> </div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"image_gauss"</span> )) ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span> </div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span> <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>     check(cpl_dfs_setup_product_header(plist,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>                                        product_frame,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                                        framelist,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                                        parlist,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                                        <span class="stringliteral">"sinfo_utl_ima_cube_ks_test"</span>,</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>                                        <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="comment">/* Save the input images file */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span> </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     <span class="keywordflow">for</span> (z = 0; z <= iCubesNumber + 1; z++) <span class="comment">// the last imagelist is result after kappa-sigma, the very last is the mask</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>     {</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>         <span class="keywordtype">char</span> BUF[256];</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>         sprintf(BUF,<span class="stringliteral">"out_cube_%d.fits"</span>,z);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>         sinfo_msg(<span class="stringliteral">"Saving results cube[%d]"</span>,z);</div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>         check(cpl_imagelist_save(ppCubes[z],</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>                 BUF,</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>                        CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>                        plist,</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>                        CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>             <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>         ck0(sinfo_pro_save_ims(ppCubes[z],framelist,framelist,BUF,<span class="stringliteral">"CUBE"</span>,NULL,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>                         <span class="stringliteral">"sinfo_utl_ima_cube_ks_ex"</span>,parlist),</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             <span class="stringliteral">"cannot save cube %s"</span>, BUF);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>     }</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> </div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> </div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span> </div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>  cleanup:</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span> </div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span> <span class="comment">//    sinfo_free_frameset(&raw_set);</span></div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     <span class="keywordflow">for</span> (z = 0; z <= iCubesNumber + 1; z++) <span class="comment">// the last imagelist is result after kappa-sigma, the very last is the mask</span></div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>     {</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>         cpl_imagelist_delete(ppCubes[z]);</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>     }</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>     cpl_free(ppCubes);</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>     <span class="keywordflow">return</span> cpl_error_get_code() ? -1 : 0;</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span> </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> }</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> cpl_imagelist* create_cube_shift(</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>                 <span class="keywordtype">int</span> iPlanesNumber,</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>                 <span class="keywordtype">int</span> iFWHMX,</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>                 <span class="keywordtype">int</span> iFWHMY,</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>                 <span class="keywordtype">double</span> dNoiseLvl,</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>                 <span class="keywordtype">double</span> dSignalDelta,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>                 <span class="keywordtype">int</span> iDefectX,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                 <span class="keywordtype">int</span> iDefectY,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                 <span class="keywordtype">double</span> dDefectValue,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>                 <span class="keywordtype">int</span> type</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> )</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> {</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>     <span class="keywordtype">int</span> z = 0;</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     cpl_image* pPlane = NULL;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     cpl_imagelist* pRetval = NULL;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     pRetval = cpl_imagelist_new();</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span> </div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     <span class="keywordflow">for</span> (z = 0; z < iPlanesNumber; z++)</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     {</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <span class="keywordtype">double</span> dSignalValue = dSignal + z * dSignalDelta;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         <span class="keywordflow">switch</span> (type)</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         {</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             pPlane = create_plane(</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>                             iSizeX,</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                             iSizeY,</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>                             iFWHMX,</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>                             iFWHMY,</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                             shiftX,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>                             shiftY,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                             dSignalValue,</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                             dBkgSignal,</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                             dNoiseLvl</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>                         );</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>             pPlane = create_square_plane(</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>                             iSizeX,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>                             iSizeY,</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>                             iFWHMX,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>                             iFWHMY,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>                             shiftX,</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>                             shiftY,</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>                             dSignalValue,</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>                             dBkgSignal,</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>                             dNoiseLvl</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>                         );</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>         }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         <span class="keywordflow">if</span> (dDefectValue)</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>             put_defect(pPlane, iDefectX, iDefectY, dDefectValue);</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>         putNAN(pPlane, iDefectX + shiftX, iDefectY + shiftY);</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         cpl_imagelist_set(pRetval, pPlane, z);</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>     }</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     <span class="keywordflow">return</span> pRetval;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span> }</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span> cpl_image* create_plane(</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>                 <span class="keywordtype">int</span> iFWHMX,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                 <span class="keywordtype">int</span> iFWHMY,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>                 <span class="keywordtype">double</span> dNoiseLvl</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> )</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> {</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     cpl_image* imNoise = NULL;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>     cpl_image* imGauss = NULL;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>     cpl_image* imResult = NULL;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> K = 2.35482;<span class="comment">//1. / (2. * sqrt(2.* ln(2.)));</span></div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span> </div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     imNoise = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl);</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>     imGauss = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     sinfo_msg(<span class="stringliteral">"Generate Gaussian center[%d:%d] signal[%f], sigma[%f:%f]"</span>, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>     cpl_image_fill_gaussian(imGauss, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     imResult = cpl_image_add_create(imGauss, imNoise);</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span> </div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>     <span class="comment">// cleanup</span></div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>     <span class="keywordflow">if</span> (imNoise)</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     {</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>         cpl_image_delete(imNoise);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>         imNoise = 0;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     }</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     <span class="keywordflow">if</span> (imGauss)</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     {</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>         cpl_image_delete(imGauss);</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>         imGauss = 0;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     <span class="keywordflow">return</span> imResult;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span> }</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> cpl_image* create_square_plane(</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>                 <span class="keywordtype">int</span> iSizeX,</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>                 <span class="keywordtype">int</span> iSizeY,</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>                 <span class="keywordtype">int</span> iHoleX,</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>                 <span class="keywordtype">int</span> iHoleY,</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>                 <span class="keywordtype">int</span> shiftX,</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>                 <span class="keywordtype">int</span> shiftY,</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>                 <span class="keywordtype">double</span> dSignal,</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>                 <span class="keywordtype">double</span> dBkgSignal,</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>                 <span class="keywordtype">double</span> dNoiseLvl</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> )</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span> {</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>     cpl_image* imNoise = NULL;</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     cpl_image* imHole = NULL;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     cpl_image* imResult = NULL;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     <span class="keywordtype">int</span> x = 0;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>     <span class="keywordtype">int</span> y = 0;</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>     <span class="keywordtype">int</span> xHoleInitial = 0;</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="keywordtype">int</span> yHoleInitial = 0;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     imNoise = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl);</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     imHole = cpl_image_new(iSizeX, iSizeY, CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     xHoleInitial = iSizeX / 2 - iHoleX / 2;</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     yHoleInitial = iSizeY / 2 - iHoleY / 2;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>     <span class="keywordflow">for</span> (x = 0; x <= iHoleX; x++)</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     {</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>         <span class="keywordflow">for</span> (y = 0; y <= iHoleY; y++)</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>         {</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>             <span class="keywordtype">int</span> pX = x + xHoleInitial + shiftX ;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>             <span class="keywordtype">int</span> pY = y + yHoleInitial + shiftY;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>             <span class="keywordflow">if</span> ((pX <= iSizeX) &&(pY <= iSizeY))</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>             cpl_image_set(imHole, pX,pY, dSignal);</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>         }</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     }</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     <span class="comment">//cpl_image_fill_gaussian(imGauss, iSizeX/2 + shiftX, iSizeY/2 + shiftY, dSignal, iFWHMX / K, iFWHMY / K);</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>     imResult = cpl_image_add_create(imHole, imNoise);</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span> </div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     <span class="comment">// cleanup</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     <span class="keywordflow">if</span> (imNoise)</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     {</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>         cpl_image_delete(imNoise);</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>         imNoise = 0;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>     }</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     <span class="keywordflow">if</span> (imHole)</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     {</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>         cpl_image_delete(imHole);</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         imHole = 0;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     }</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     <span class="keywordflow">return</span> imResult;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> }</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> <span class="keywordtype">int</span> put_defect(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY, <span class="keywordtype">double</span> dDefectValue)</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span> {</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     sinfo_msg(<span class="stringliteral">"Set bad pixel x[%d] y[%d] value[%f]"</span>, iDefectX, iDefectY, dDefectValue);</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>     <span class="keywordflow">if</span> (pPlane)</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>     {</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>         cpl_image_set(pPlane, iDefectX, iDefectY, dDefectValue);</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>         cpl_image_set(pPlane, iDefectX+1, iDefectY+1, dDefectValue);</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>         cpl_image_set(pPlane, iDefectX-1, iDefectY-1, dDefectValue);</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>         cpl_image_set(pPlane, iDefectX+1, iDefectY-1, dDefectValue);</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         cpl_image_set(pPlane, iDefectX-1, iDefectY+1, dDefectValue);</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> }</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span> </div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span> <span class="keywordtype">void</span> putNAN(cpl_image *pPlane, <span class="keywordtype">int</span> iDefectX, <span class="keywordtype">int</span> iDefectY)</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span> {</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     cpl_image_set(pPlane, iDefectX, iDefectY, ZERO);</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span> }</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__ima__gauss_8c_source.html b/html/sinfo__utl__ima__gauss_8c_source.html
index ebee123..a297926 100644
--- a/html/sinfo__utl__ima__gauss_8c_source.html
+++ b/html/sinfo__utl__ima__gauss_8c_source.html
@@ -2,434 +2,465 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_ima_gauss.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_ima_gauss.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_ima_gauss.c,v 1.1 2009/05/20 15:22:42 kmirny Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/05/20 15:22:42 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Functions prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_create(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_exec(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_destroy(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                            Static variables</span>
-<a name="l00064"></a>00064 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_gauss_description[] =
-<a name="l00067"></a>00067 <span class="stringliteral">"This recipe produce an image,\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"containing a 2D Gaussian.\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"esorex --params sinfo_utl_ima_gauss\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"esorex --help sinfo_utl_ima_gauss\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"\n"</span>;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.size_x"</span>;
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.size_y"</span>;
-<a name="l00076"></a>00076 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.fwhm_x"</span>;
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.fwhm_y"</span>;
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.total_signal"</span>;
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_BKGSIG[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.bkg_signal"</span>;
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_NOISEL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.noise_level"</span>;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082 <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss"</span>;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00085"></a>00085 <span class="comment">                                Functions code</span>
-<a name="l00086"></a>00086 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00087"></a>00087 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 
-<a name="l00094"></a>00094 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00102"></a>00102 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00103"></a><a class="code" href="group__sinfo__utl__ima__gauss.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00103</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00104"></a>00104 {
-<a name="l00105"></a>00105     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00106"></a>00106     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     cpl_plugin_init(plugin,
-<a name="l00109"></a>00109                     CPL_PLUGIN_API,
-<a name="l00110"></a>00110                     SINFONI_BINARY_VERSION,
-<a name="l00111"></a>00111                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00112"></a>00112                     <span class="stringliteral">"sinfo_utl_ima_gauss"</span>,
-<a name="l00113"></a>00113                     <span class="stringliteral">"Produce an image containing 2D Gaussian"</span>,
-<a name="l00114"></a>00114                     sinfo_utl_ima_gauss_description,
-<a name="l00115"></a>00115                     <span class="stringliteral">"Konstantin Mirny"</span>,
-<a name="l00116"></a>00116                     <span class="stringliteral">"kmirny at eso.org"</span>,
-<a name="l00117"></a>00117                     sinfo_get_license(),
-<a name="l00118"></a>00118                     sinfo_utl_ima_gauss_create,
-<a name="l00119"></a>00119                     sinfo_utl_ima_gauss_exec,
-<a name="l00120"></a>00120                     sinfo_utl_ima_gauss_destroy) ;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     cpl_pluginlist_append(list, plugin) ;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="keywordflow">return</span> 0;
-<a name="l00125"></a>00125 }
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00136"></a>00136 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00137"></a>00137 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_create(cpl_plugin * plugin)
-<a name="l00138"></a>00138 {
-<a name="l00139"></a>00139     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_X_DEFAULT    = 1024;
-<a name="l00140"></a>00140     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_Y_DEFAULT    = 1024;
-<a name="l00141"></a>00141     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_X            = 100;
-<a name="l00142"></a>00142     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_Y            = 100;
-<a name="l00143"></a>00143     <span class="keyword">const</span> <span class="keywordtype">double</span> TOTAL_SIGNAL   = 10E5;
-<a name="l00144"></a>00144     <span class="keyword">const</span> <span class="keywordtype">double</span> BKG_SIGNAL     = 400.;
-<a name="l00145"></a>00145     <span class="keyword">const</span> <span class="keywordtype">double</span> NOISE_VALUE    = 20.;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     cpl_recipe      * recipe ;
-<a name="l00148"></a>00148     cpl_parameter   * p ;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00151"></a>00151     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00152"></a>00152         recipe = (cpl_recipe *)plugin ;
-<a name="l00153"></a>00153     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00154"></a>00154     cpl_error_reset();
-<a name="l00155"></a>00155     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00158"></a>00158     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00161"></a>00161     <span class="comment">/* --stropt */</span>
-<a name="l00162"></a>00162 <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_ima_gauss.op",</span>
-<a name="l00163"></a>00163 <span class="comment">                                CPL_TYPE_STRING,</span>
-<a name="l00164"></a>00164 <span class="comment">                                "A possible operation",</span>
-<a name="l00165"></a>00165 <span class="comment">                                "sinfoni.sinfo_utl_ima_gauss","+");</span>
-<a name="l00166"></a>00166 <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span>
-<a name="l00167"></a>00167 <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span>
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169     <span class="comment">/* --size_x */</span>
-<a name="l00170"></a>00170     p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,
-<a name="l00171"></a>00171             CPL_TYPE_INT, <span class="stringliteral">"size X axis"</span>, RECIPE_NAME, SIZE_X_DEFAULT) ;
-<a name="l00172"></a>00172     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_x"</span>) ;
-<a name="l00173"></a>00173     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="comment">/* --size_y */</span>
-<a name="l00176"></a>00176     p = cpl_parameter_new_value(PARAM_NAME_SIZE_Y,
-<a name="l00177"></a>00177             CPL_TYPE_INT, <span class="stringliteral">"size Y axis"</span>, RECIPE_NAME, SIZE_Y_DEFAULT) ;
-<a name="l00178"></a>00178     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_y"</span>) ;
-<a name="l00179"></a>00179     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181     <span class="comment">/* --fwhm_x */</span>
-<a name="l00182"></a>00182     p = cpl_parameter_new_value(PARAM_NAME_FWHM_X,
-<a name="l00183"></a>00183             CPL_TYPE_INT, <span class="stringliteral">"FWHM X axis"</span>, RECIPE_NAME, FWHM_X) ;
-<a name="l00184"></a>00184     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_x"</span>) ;
-<a name="l00185"></a>00185     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     <span class="comment">/* --fwhm_y */</span>
-<a name="l00188"></a>00188     p = cpl_parameter_new_value(PARAM_NAME_FWHM_Y,
-<a name="l00189"></a>00189             CPL_TYPE_INT, <span class="stringliteral">"FWHM Y axis"</span>, RECIPE_NAME, FWHM_Y) ;
-<a name="l00190"></a>00190     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_y"</span>) ;
-<a name="l00191"></a>00191     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="comment">/* --total_signal */</span>
-<a name="l00194"></a>00194     p = cpl_parameter_new_value(PARAM_NAME_SIGNAL,
-<a name="l00195"></a>00195             CPL_TYPE_DOUBLE, <span class="stringliteral">"Total signal value"</span>, RECIPE_NAME, TOTAL_SIGNAL) ;
-<a name="l00196"></a>00196     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal"</span>) ;
-<a name="l00197"></a>00197     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <span class="comment">/* --bkg_signal */</span>
-<a name="l00200"></a>00200     p = cpl_parameter_new_value(PARAM_NAME_BKGSIG,
-<a name="l00201"></a>00201             CPL_TYPE_DOUBLE, <span class="stringliteral">"background signal level"</span>, RECIPE_NAME, BKG_SIGNAL) ;
-<a name="l00202"></a>00202     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bkg_signal"</span>) ;
-<a name="l00203"></a>00203     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205     <span class="comment">/* --noise_level */</span>
-<a name="l00206"></a>00206     p = cpl_parameter_new_value(PARAM_NAME_NOISEL,
-<a name="l00207"></a>00207             CPL_TYPE_DOUBLE, <span class="stringliteral">"Noise level"</span>, RECIPE_NAME, NOISE_VALUE) ;
-<a name="l00208"></a>00208     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"noise_level"</span>) ;
-<a name="l00209"></a>00209     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00210"></a>00210     <span class="comment">/* Return */</span>
-<a name="l00211"></a>00211     <span class="keywordflow">return</span> 0;
-<a name="l00212"></a>00212 }
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00220"></a>00220 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00221"></a>00221 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_exec(cpl_plugin * plugin)
-<a name="l00222"></a>00222 {
-<a name="l00223"></a>00223     cpl_recipe  *   recipe ;
-<a name="l00224"></a>00224      <span class="keywordtype">int</span> code=0;
-<a name="l00225"></a>00225      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00228"></a>00228     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00229"></a>00229         recipe = (cpl_recipe *)plugin ;
-<a name="l00230"></a>00230     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00231"></a>00231     cpl_error_reset();
-<a name="l00232"></a>00232     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00233"></a>00233     code = sinfo_utl_ima_gauss(recipe->parameters, recipe->frames) ;
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l00237"></a>00237         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l00238"></a>00238 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l00239"></a>00239         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00240"></a>00240     }
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242     <span class="keywordflow">return</span> code ;
-<a name="l00243"></a>00243 }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00251"></a>00251 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00252"></a>00252 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_destroy(cpl_plugin * plugin)
-<a name="l00253"></a>00253 {
-<a name="l00254"></a>00254     cpl_recipe  *   recipe ;
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00257"></a>00257     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00258"></a>00258         recipe = (cpl_recipe *)plugin ;
-<a name="l00259"></a>00259     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00262"></a>00262     <span class="keywordflow">return</span> 0 ;
-<a name="l00263"></a>00263 }
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00272"></a>00272 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00273"></a>00273 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00274"></a>00274 sinfo_utl_ima_gauss( cpl_parameterlist   *   parlist,
-<a name="l00275"></a>00275         cpl_frameset        *   framelist)
-<a name="l00276"></a>00276 {
-<a name="l00277"></a>00277     <span class="comment">// parameters</span>
-<a name="l00278"></a>00278     <span class="keywordtype">int</span>     iSizeX = 0;
-<a name="l00279"></a>00279     <span class="keywordtype">int</span>     iSizeY = 0;
-<a name="l00280"></a>00280     <span class="keywordtype">int</span>     iFWHMX = 0;
-<a name="l00281"></a>00281     <span class="keywordtype">int</span>     iFWHMY = 0;
-<a name="l00282"></a>00282     <span class="keywordtype">double</span> dSignal = 0;
-<a name="l00283"></a>00283     <span class="keywordtype">double</span> dBkgSignal = 0;
-<a name="l00284"></a>00284     <span class="keywordtype">double</span> dNoiseLvl = 0;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;
-<a name="l00288"></a>00288     cpl_parameter       *   param = NULL ;
-<a name="l00289"></a>00289 
-<a name="l00290"></a>00290     cpl_propertylist    *   plist = NULL ;
-<a name="l00291"></a>00291     cpl_image           *   imNoise = NULL ;
-<a name="l00292"></a>00292     cpl_image           *   imGauss = NULL ;
-<a name="l00293"></a>00293     cpl_image           *   imResult = NULL;
-<a name="l00294"></a>00294     cpl_frame           *   product_frame = NULL;
-<a name="l00295"></a>00295     <span class="keyword">const</span> <span class="keywordtype">double</span> K = 2.35482;<span class="comment">//1. / (2. * sqrt(2.* ln(2.)));</span>
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00298"></a>00298     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00299"></a>00299     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00302"></a>00302       <span class="comment">/* --size_x */</span>
-<a name="l00303"></a>00303       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00304"></a>00304                                                PARAM_NAME_SIZE_X));
-<a name="l00305"></a>00305       check_nomsg(iSizeX=cpl_parameter_get_int(param));
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307       <span class="comment">/* --size_y */</span>
-<a name="l00308"></a>00308       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00309"></a>00309                                                PARAM_NAME_SIZE_Y));
-<a name="l00310"></a>00310       check_nomsg(iSizeY=cpl_parameter_get_int(param));
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312       <span class="comment">/* --fwhm_x */</span>
-<a name="l00313"></a>00313       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00314"></a>00314                                                PARAM_NAME_FWHM_X));
-<a name="l00315"></a>00315       check_nomsg(iFWHMX=cpl_parameter_get_int(param));
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317       <span class="comment">/* --fwhm_y */</span>
-<a name="l00318"></a>00318       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00319"></a>00319                                                PARAM_NAME_FWHM_Y));
-<a name="l00320"></a>00320       check_nomsg(iFWHMY=cpl_parameter_get_int(param));
-<a name="l00321"></a>00321 
-<a name="l00322"></a>00322       <span class="comment">/* --total_signal */</span>
-<a name="l00323"></a>00323       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00324"></a>00324                                                PARAM_NAME_SIGNAL));
-<a name="l00325"></a>00325       check_nomsg(dSignal=cpl_parameter_get_double(param));
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327       <span class="comment">/* --bkg_signal */</span>
-<a name="l00328"></a>00328       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00329"></a>00329                                                PARAM_NAME_BKGSIG));
-<a name="l00330"></a>00330       check_nomsg(dBkgSignal=cpl_parameter_get_double(param));
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332       <span class="comment">/* --noise_level */</span>
-<a name="l00333"></a>00333       check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00334"></a>00334                                                PARAM_NAME_NOISEL));
-<a name="l00335"></a>00335       check_nomsg(dNoiseLvl=cpl_parameter_get_double(param));
-<a name="l00336"></a>00336 
-<a name="l00337"></a>00337     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00338"></a>00338 <span class="comment">//    check(sinfo_dfs_set_groups(framelist),</span>
-<a name="l00339"></a>00339 <span class="comment">//         "Cannot identify RAW and CALIB frames") ;</span>
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00342"></a>00342 <span class="comment">/*    n=cpl_frameset_get_size(framelist);</span>
-<a name="l00343"></a>00343 <span class="comment">    if(n<1) {</span>
-<a name="l00344"></a>00344 <span class="comment">      sinfo_msg_error("Empty input frame list!");</span>
-<a name="l00345"></a>00345 <span class="comment">      goto cleanup ;</span>
-<a name="l00346"></a>00346 <span class="comment">    }</span>
-<a name="l00347"></a>00347 <span class="comment">*/</span>
-<a name="l00348"></a>00348     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00349"></a>00349 <span class="comment">//    check_nomsg(raw_set=cpl_frameset_new());</span>
-<a name="l00350"></a>00350 <span class="comment">/*</span>
-<a name="l00351"></a>00351 <span class="comment">    check(sinfo_contains_frames_kind(framelist,raw_set,PRO_IMA),</span>
-<a name="l00352"></a>00352 <span class="comment">     "Found no input frames with tag %s",PRO_IMA);</span>
-<a name="l00353"></a>00353 <span class="comment">    check_nomsg(nraw=cpl_frameset_get_size(raw_set));</span>
-<a name="l00354"></a>00354 <span class="comment">    if (nraw<1) {</span>
-<a name="l00355"></a>00355 <span class="comment">      sinfo_msg_error("Found no input frames with tag %s",PRO_IMA);</span>
-<a name="l00356"></a>00356 <span class="comment">      goto cleanup;</span>
-<a name="l00357"></a>00357 <span class="comment">    } else {</span>
-<a name="l00358"></a>00358 <span class="comment">         check_nomsg(frm_ima1=cpl_frameset_get_frame(framelist,0));</span>
-<a name="l00359"></a>00359 <span class="comment">         check_nomsg(ima1=cpl_image_load(cpl_frame_get_filename(frm_ima1),</span>
-<a name="l00360"></a>00360 <span class="comment">                                         CPL_TYPE_FLOAT,0,0));</span>
-<a name="l00361"></a>00361 <span class="comment">     if (nraw>1) {</span>
-<a name="l00362"></a>00362 <span class="comment">         check_nomsg(frm_ima2=cpl_frameset_get_frame(framelist,1));</span>
-<a name="l00363"></a>00363 <span class="comment">         check_nomsg(ima2 = cpl_image_load(cpl_frame_get_filename(frm_ima2),</span>
-<a name="l00364"></a>00364 <span class="comment">                                           CPL_TYPE_FLOAT,0,0));</span>
-<a name="l00365"></a>00365 <span class="comment">         switch_ima2=1;</span>
-<a name="l00366"></a>00366 <span class="comment">      } else if (value == 9999.) {</span>
-<a name="l00367"></a>00367 <span class="comment">        sinfo_msg_error("Found only one input frames with tag %s",PRO_IMA);</span>
-<a name="l00368"></a>00368 <span class="comment">        goto cleanup;</span>
-<a name="l00369"></a>00369 <span class="comment">      } else {</span>
-<a name="l00370"></a>00370 <span class="comment">        sinfo_msg("Produce an image %s",PRO_IMA);</span>
-<a name="l00371"></a>00371 <span class="comment">      }</span>
-<a name="l00372"></a>00372 <span class="comment">    }</span>
-<a name="l00373"></a>00373 <span class="comment"></span>
-<a name="l00374"></a>00374 <span class="comment">    sinfo_free_frameset(&raw_set);</span>
-<a name="l00375"></a>00375 <span class="comment">*/</span>
-<a name="l00376"></a>00376     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span>
-<a name="l00377"></a>00377     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00380"></a>00380     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   check(imNoise = cpl_image_fill_test_create(iSizeX, iSizeY),
-<a name="l00384"></a>00384                 <span class="stringliteral">"Cannot generate the image"</span>) ;
-<a name="l00385"></a>00385   check_nomsg(cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl));
-<a name="l00386"></a>00386   check(imGauss = cpl_image_fill_test_create(iSizeX, iSizeY),
-<a name="l00387"></a>00387                 <span class="stringliteral">"Cannot generate the image"</span>) ;
-<a name="l00388"></a>00388 <span class="comment">//  double dfwhm_x = iFWHMX;</span>
-<a name="l00389"></a>00389 <span class="comment">//  double dfwhm_y = iFWHMY;</span>
-<a name="l00390"></a>00390 <span class="comment">//  double xcen = 0;</span>
-<a name="l00391"></a>00391 <span class="comment">//  double ycen = 0;</span>
-<a name="l00392"></a>00392 <span class="comment">//  check_nomsg(cpl_image_fit_gaussian(imNoise, iSizeX/2, iSizeY/2, 5, &dSignal, &xcen, &ycen, 0, 0, &dfwhm_y, &dfwhm_y));</span>
-<a name="l00393"></a>00393   check(imResult = cpl_image_fill_test_create(iSizeX, iSizeY),
-<a name="l00394"></a>00394                 <span class="stringliteral">"Cannot generate the image"</span>) ;
-<a name="l00395"></a>00395   check_nomsg(cpl_image_fill_gaussian(imGauss, iSizeX/2, iSizeY/2, dSignal, iFWHMX / K, iFWHMY / K));
-<a name="l00396"></a>00396   check(imResult = cpl_image_add_create(imGauss, imNoise), <span class="stringliteral">"Cannot generate the image"</span>);
-<a name="l00397"></a>00397     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00398"></a>00398     <span class="comment">/* Set the file name */</span>
-<a name="l00399"></a>00399     name_o = <span class="stringliteral">"ima_res.fits"</span> ;
-<a name="l00400"></a>00400 
-<a name="l00401"></a>00401     <span class="comment">/* Create product frame */</span>
-<a name="l00402"></a>00402     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00403"></a>00403     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00404"></a>00404     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"image_gauss"</span> )) ;
-<a name="l00405"></a>00405     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00406"></a>00406     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00407"></a>00407     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00408"></a>00408       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00409"></a>00409 
-<a name="l00410"></a>00410     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00411"></a>00411     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00412"></a>00412 <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span>
-<a name="l00413"></a>00413     check(cpl_dfs_setup_product_header(plist,
-<a name="l00414"></a>00414                                        product_frame,
-<a name="l00415"></a>00415                                        framelist,
-<a name="l00416"></a>00416                                        parlist,
-<a name="l00417"></a>00417                                        <span class="stringliteral">"sinfo_utl_ima_gauss"</span>,
-<a name="l00418"></a>00418                                        <span class="stringliteral">"SINFONI"</span>,
-<a name="l00419"></a>00419                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00420"></a>00420       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423     <span class="comment">/* Save the file */</span>
-<a name="l00424"></a>00424     check(cpl_image_save(imResult,
-<a name="l00425"></a>00425                          name_o,
-<a name="l00426"></a>00426                          CPL_BPP_IEEE_FLOAT,
-<a name="l00427"></a>00427                          plist,
-<a name="l00428"></a>00428                          CPL_IO_DEFAULT),
-<a name="l00429"></a>00429                          <span class="stringliteral">"Could not save product"</span>);
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432     sinfo_free_propertylist(&plist) ;
-<a name="l00433"></a>00433     sinfo_free_image(&imNoise);
-<a name="l00434"></a>00434     sinfo_free_image(&imGauss);
-<a name="l00435"></a>00435     sinfo_free_image(&imResult);
-<a name="l00436"></a>00436     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00437"></a>00437     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00438"></a>00438 
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440  cleanup:
-<a name="l00441"></a>00441 
-<a name="l00442"></a>00442 <span class="comment">//    sinfo_free_frameset(&raw_set);</span>
-<a name="l00443"></a>00443     sinfo_free_propertylist(&plist) ;
-<a name="l00444"></a>00444     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00445"></a>00445 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00446"></a>00446 <span class="comment">    */</span>
-<a name="l00447"></a>00447     sinfo_free_image(&imNoise) ;
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00450"></a>00450         <span class="keywordflow">return</span> -1 ;
-<a name="l00451"></a>00451     } <span class="keywordflow">else</span> {
-<a name="l00452"></a>00452         <span class="keywordflow">return</span> 0 ;
-<a name="l00453"></a>00453     }
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_ima_gauss.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_ima_gauss.c,v 1.1 2009/05/20 15:22:42 kmirny Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/05/20 15:22:42 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_gauss_description[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"This recipe produce an image,\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"containing a 2D Gaussian.\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"esorex --params sinfo_utl_ima_gauss\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"esorex --help sinfo_utl_ima_gauss\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.size_x"</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIZE_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.size_y"</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_X[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.fwhm_x"</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_FWHM_Y[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.fwhm_y"</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_SIGNAL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.total_signal"</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_BKGSIG[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.bkg_signal"</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">char</span> PARAM_NAME_NOISEL[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss.noise_level"</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_ima_gauss"</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="code" href="group__sinfo__utl__ima__gauss.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  103</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     <span class="stringliteral">"sinfo_utl_ima_gauss"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     <span class="stringliteral">"Produce an image containing 2D Gaussian"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     sinfo_utl_ima_gauss_description,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     <span class="stringliteral">"Konstantin Mirny"</span>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     <span class="stringliteral">"kmirny at eso.org"</span>,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_utl_ima_gauss_create,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     sinfo_utl_ima_gauss_exec,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                     sinfo_utl_ima_gauss_destroy) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> }</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_X_DEFAULT    = 1024;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> SIZE_Y_DEFAULT    = 1024;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_X            = 100;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="keyword">const</span> <span class="keywordtype">int</span> FWHM_Y            = 100;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> TOTAL_SIGNAL   = 10E5;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> BKG_SIGNAL     = 400.;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> NOISE_VALUE    = 20.;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_ima_gauss.op",</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">                                CPL_TYPE_STRING,</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">                                "A possible operation",</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">                                "sinfoni.sinfo_utl_ima_gauss","+");</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>             CPL_TYPE_INT, <span class="stringliteral">"size X axis"</span>, RECIPE_NAME, SIZE_X_DEFAULT) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_x"</span>) ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="comment">/* --size_y */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     p = cpl_parameter_new_value(PARAM_NAME_SIZE_Y,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>             CPL_TYPE_INT, <span class="stringliteral">"size Y axis"</span>, RECIPE_NAME, SIZE_Y_DEFAULT) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"size_y"</span>) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="comment">/* --fwhm_x */</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     p = cpl_parameter_new_value(PARAM_NAME_FWHM_X,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>             CPL_TYPE_INT, <span class="stringliteral">"FWHM X axis"</span>, RECIPE_NAME, FWHM_X) ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_x"</span>) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="comment">/* --fwhm_y */</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     p = cpl_parameter_new_value(PARAM_NAME_FWHM_Y,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>             CPL_TYPE_INT, <span class="stringliteral">"FWHM Y axis"</span>, RECIPE_NAME, FWHM_Y) ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"fwhm_y"</span>) ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/* --total_signal */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     p = cpl_parameter_new_value(PARAM_NAME_SIGNAL,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Total signal value"</span>, RECIPE_NAME, TOTAL_SIGNAL) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"total_signal"</span>) ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="comment">/* --bkg_signal */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     p = cpl_parameter_new_value(PARAM_NAME_BKGSIG,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"background signal level"</span>, RECIPE_NAME, BKG_SIGNAL) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"bkg_signal"</span>) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="comment">/* --noise_level */</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     p = cpl_parameter_new_value(PARAM_NAME_NOISEL,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Noise level"</span>, RECIPE_NAME, NOISE_VALUE) ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"noise_level"</span>) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> {</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     code = sinfo_utl_ima_gauss(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     }</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_gauss_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> sinfo_utl_ima_gauss( cpl_parameterlist   *   parlist,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="comment">// parameters</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     <span class="keywordtype">int</span>     iSizeX = 0;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordtype">int</span>     iSizeY = 0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordtype">int</span>     iFWHMX = 0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordtype">int</span>     iFWHMY = 0;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="keywordtype">double</span> dSignal = 0;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordtype">double</span> dBkgSignal = 0;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keywordtype">double</span> dNoiseLvl = 0;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     cpl_parameter       *   param = NULL ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>     cpl_propertylist    *   plist = NULL ;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     cpl_image           *   imNoise = NULL ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     cpl_image           *   imGauss = NULL ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     cpl_image           *   imResult = NULL;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     cpl_frame           *   product_frame = NULL;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     <span class="keyword">const</span> <span class="keywordtype">double</span> K = 2.35482;<span class="comment">//1. / (2. * sqrt(2.* ln(2.)));</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>       <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                                PARAM_NAME_SIZE_X));</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>       check_nomsg(iSizeX=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       <span class="comment">/* --size_y */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                                                PARAM_NAME_SIZE_Y));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>       check_nomsg(iSizeY=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="comment">/* --fwhm_x */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                                                PARAM_NAME_FWHM_X));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       check_nomsg(iFWHMX=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>       <span class="comment">/* --fwhm_y */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                                                PARAM_NAME_FWHM_Y));</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       check_nomsg(iFWHMY=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       <span class="comment">/* --total_signal */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                                                PARAM_NAME_SIGNAL));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       check_nomsg(dSignal=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <span class="comment">/* --bkg_signal */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>                                                PARAM_NAME_BKGSIG));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       check_nomsg(dBkgSignal=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>       <span class="comment">/* --noise_level */</span></div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>                                                PARAM_NAME_NOISEL));</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       check_nomsg(dNoiseLvl=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> </div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> <span class="comment">//    check(sinfo_dfs_set_groups(framelist),</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> <span class="comment">//         "Cannot identify RAW and CALIB frames") ;</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> <span class="comment">/*    n=cpl_frameset_get_size(framelist);</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="comment">    if(n<1) {</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">      sinfo_msg_error("Empty input frame list!");</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">      goto cleanup ;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> <span class="comment">//    check_nomsg(raw_set=cpl_frameset_new());</span></div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">    check(sinfo_contains_frames_kind(framelist,raw_set,PRO_IMA),</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">     "Found no input frames with tag %s",PRO_IMA);</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> <span class="comment">    check_nomsg(nraw=cpl_frameset_get_size(raw_set));</span></div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> <span class="comment">    if (nraw<1) {</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span> <span class="comment">      sinfo_msg_error("Found no input frames with tag %s",PRO_IMA);</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> <span class="comment">      goto cleanup;</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> <span class="comment">    } else {</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> <span class="comment">         check_nomsg(frm_ima1=cpl_frameset_get_frame(framelist,0));</span></div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> <span class="comment">         check_nomsg(ima1=cpl_image_load(cpl_frame_get_filename(frm_ima1),</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="comment">                                         CPL_TYPE_FLOAT,0,0));</span></div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> <span class="comment">     if (nraw>1) {</span></div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> <span class="comment">         check_nomsg(frm_ima2=cpl_frameset_get_frame(framelist,1));</span></div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> <span class="comment">         check_nomsg(ima2 = cpl_image_load(cpl_frame_get_filename(frm_ima2),</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> <span class="comment">                                           CPL_TYPE_FLOAT,0,0));</span></div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">         switch_ima2=1;</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> <span class="comment">      } else if (value == 9999.) {</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span> <span class="comment">        sinfo_msg_error("Found only one input frames with tag %s",PRO_IMA);</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> <span class="comment">        goto cleanup;</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> <span class="comment">      } else {</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">        sinfo_msg("Produce an image %s",PRO_IMA);</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">      }</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment"></span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">    sinfo_free_frameset(&raw_set);</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   check(imNoise = cpl_image_fill_test_create(iSizeX, iSizeY),</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                 <span class="stringliteral">"Cannot generate the image"</span>) ;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   check_nomsg(cpl_image_fill_noise_uniform(imNoise, dBkgSignal - dNoiseLvl, dBkgSignal + dNoiseLvl));</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>   check(imGauss = cpl_image_fill_test_create(iSizeX, iSizeY),</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>                 <span class="stringliteral">"Cannot generate the image"</span>) ;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment">//  double dfwhm_x = iFWHMX;</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="comment">//  double dfwhm_y = iFWHMY;</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> <span class="comment">//  double xcen = 0;</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> <span class="comment">//  double ycen = 0;</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> <span class="comment">//  check_nomsg(cpl_image_fit_gaussian(imNoise, iSizeX/2, iSizeY/2, 5, &dSignal, &xcen, &ycen, 0, 0, &dfwhm_y, &dfwhm_y));</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>   check(imResult = cpl_image_fill_test_create(iSizeX, iSizeY),</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                 <span class="stringliteral">"Cannot generate the image"</span>) ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>   check_nomsg(cpl_image_fill_gaussian(imGauss, iSizeX/2, iSizeY/2, dSignal, iFWHMX / K, iFWHMY / K));</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>   check(imResult = cpl_image_add_create(imGauss, imNoise), <span class="stringliteral">"Cannot generate the image"</span>);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     name_o = <span class="stringliteral">"ima_res.fits"</span> ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"image_gauss"</span> )) ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span></div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     check(cpl_dfs_setup_product_header(plist,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                        product_frame,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                        framelist,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                                        parlist,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                                        <span class="stringliteral">"sinfo_utl_ima_gauss"</span>,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                                        <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     check(cpl_image_save(imResult,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                          name_o,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                          CPL_BPP_IEEE_FLOAT,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                          plist,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                          CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                          <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     sinfo_free_image(&imNoise);</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     sinfo_free_image(&imGauss);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     sinfo_free_image(&imResult);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>  cleanup:</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span> <span class="comment">//    sinfo_free_frameset(&raw_set);</span></div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     sinfo_free_image(&imNoise) ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     }</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__ima__line__corr_8c_source.html b/html/sinfo__utl__ima__line__corr_8c_source.html
index 0088ba6..2be84ef 100644
--- a/html/sinfo__utl__ima__line__corr_8c_source.html
+++ b/html/sinfo__utl__ima__line__corr_8c_source.html
@@ -2,320 +2,351 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_ima_line_corr.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_ima_line_corr.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_ima_line_corr.c,v 1.3 2009/06/05 08:18:55 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/06/05 08:18:55 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_image_ops.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                            Functions prototypes</span>
-<a name="l00056"></a>00056 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_create(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_exec(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_destroy(cpl_plugin *) ;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                            Static variables</span>
-<a name="l00065"></a>00065 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_line_corr_description[] =
-<a name="l00068"></a>00068 <span class="stringliteral">"This recipe performs image computation.\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"The input files are images\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"their associated tags should be IMA.\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"The output are the images cleaned by the defect introduced by SINFONI sw\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"esorex --params sinfo_utl_ima_line_corr\n"</span>
-<a name="l00074"></a>00074 <span class="stringliteral">"esorex --help sinfo_utl_ima_line_corr\n"</span>
-<a name="l00075"></a>00075 <span class="stringliteral">"\n"</span>;
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00078"></a>00078 <span class="comment">                                Functions code</span>
-<a name="l00079"></a>00079 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00084"></a>00084 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 
-<a name="l00087"></a>00087 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00095"></a>00095 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a><a class="code" href="group__sinfo__utl__ima__line__corr.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00096</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00097"></a>00097 {
-<a name="l00098"></a>00098     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00099"></a>00099     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101     cpl_plugin_init(plugin,
-<a name="l00102"></a>00102                     CPL_PLUGIN_API,
-<a name="l00103"></a>00103                     SINFONI_BINARY_VERSION,
-<a name="l00104"></a>00104                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00105"></a>00105                     <span class="stringliteral">"sinfo_utl_ima_line_corr"</span>,
-<a name="l00106"></a>00106                     <span class="stringliteral">"Computes result of ima1 op ima2"</span>,
-<a name="l00107"></a>00107                     sinfo_utl_ima_line_corr_description,
-<a name="l00108"></a>00108                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00109"></a>00109                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00110"></a>00110                     sinfo_get_license(),
-<a name="l00111"></a>00111                     sinfo_utl_ima_line_corr_create,
-<a name="l00112"></a>00112                     sinfo_utl_ima_line_corr_exec,
-<a name="l00113"></a>00113                     sinfo_utl_ima_line_corr_destroy) ;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115     cpl_pluginlist_append(list, plugin) ;
-<a name="l00116"></a>00116     
-<a name="l00117"></a>00117     <span class="keywordflow">return</span> 0;
-<a name="l00118"></a>00118 }
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00129"></a>00129 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00130"></a>00130 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_create(cpl_plugin * plugin)
-<a name="l00131"></a>00131 {
-<a name="l00132"></a>00132     cpl_recipe      * recipe ;
-<a name="l00133"></a>00133     cpl_parameter   * p ;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00136"></a>00136     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00137"></a>00137         recipe = (cpl_recipe *)plugin ;
-<a name="l00138"></a>00138     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00139"></a>00139     cpl_error_reset();
-<a name="l00140"></a>00140     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00143"></a>00143     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00146"></a>00146     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.kappa"</span>, 
-<a name="l00147"></a>00147                                 CPL_TYPE_INT, 
-<a name="l00148"></a>00148                                 <span class="stringliteral">"Kappa sigma value"</span>, 
-<a name="l00149"></a>00149                                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr"</span>,18);
-<a name="l00150"></a>00150     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"kappa"</span>) ;
-<a name="l00151"></a>00151     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153      p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.filt_rad"</span>, 
-<a name="l00154"></a>00154                 CPL_TYPE_INT,
-<a name="l00155"></a>00155                 <span class="stringliteral">"Filtering radii applied during median filter."</span>
-<a name="l00156"></a>00156                                 <span class="stringliteral">" Should be small"</span>, 
-<a name="l00157"></a>00157                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr"</span>,3) ;;
-<a name="l00158"></a>00158     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"filt_rad"</span>) ;
-<a name="l00159"></a>00159     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00160"></a>00160  
-<a name="l00161"></a>00161     <span class="comment">/* Return */</span>
-<a name="l00162"></a>00162     <span class="keywordflow">return</span> 0;
-<a name="l00163"></a>00163 }
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00171"></a>00171 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00172"></a>00172 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_exec(cpl_plugin * plugin)
-<a name="l00173"></a>00173 {
-<a name="l00174"></a>00174     cpl_recipe  *   recipe ;
-<a name="l00175"></a>00175      <span class="keywordtype">int</span> code=0;
-<a name="l00176"></a>00176      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00179"></a>00179     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00180"></a>00180         recipe = (cpl_recipe *)plugin ;
-<a name="l00181"></a>00181     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00182"></a>00182     cpl_error_reset();
-<a name="l00183"></a>00183     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00184"></a>00184     code = sinfo_utl_ima_line_corr(recipe->parameters, recipe->frames) ;
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186 
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00188"></a>00188         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00189"></a>00189 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00190"></a>00190         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00191"></a>00191     } 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="keywordflow">return</span> code ;
-<a name="l00194"></a>00194 }
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00202"></a>00202 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00203"></a>00203 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_destroy(cpl_plugin * plugin)
-<a name="l00204"></a>00204 {
-<a name="l00205"></a>00205     cpl_recipe  *   recipe ;
-<a name="l00206"></a>00206     
-<a name="l00207"></a>00207     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00208"></a>00208     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00209"></a>00209         recipe = (cpl_recipe *)plugin ;
-<a name="l00210"></a>00210     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00213"></a>00213     <span class="keywordflow">return</span> 0 ;
-<a name="l00214"></a>00214 }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00223"></a>00223 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00224"></a>00224 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00225"></a>00225 sinfo_utl_ima_line_corr( cpl_parameterlist   *   parlist, 
-<a name="l00226"></a>00226              cpl_frameset        *   framelist)
-<a name="l00227"></a>00227 {
-<a name="l00228"></a>00228     cpl_parameter       *   p= NULL ;
-<a name="l00229"></a>00229     <span class="keywordtype">int</span>                     kappa=18;
-<a name="l00230"></a>00230     <span class="keywordtype">int</span>                     filt_rad=3;
-<a name="l00231"></a>00231     <span class="keywordtype">int</span> width=4;
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     cpl_image           *   ima=NULL ;
-<a name="l00234"></a>00234     cpl_image           *   ima_out=NULL ;
-<a name="l00235"></a>00235     cpl_propertylist    *   plist=NULL ;
-<a name="l00236"></a>00236     cpl_frame           *   product_frame=NULL;
-<a name="l00237"></a>00237     cpl_frameset * raw_set=NULL;
-<a name="l00238"></a>00238     <span class="keywordtype">int</span> i=0;
-<a name="l00239"></a>00239     cpl_frame * frm=NULL;
-<a name="l00240"></a>00240     <span class="keywordtype">char</span> name_o[MAX_NAME_SIZE];
-<a name="l00241"></a>00241     <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     <span class="keywordtype">int</span> n=0;
-<a name="l00244"></a>00244     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00245"></a>00245         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00248"></a>00248     <span class="comment">/* --stropt */</span>
-<a name="l00249"></a>00249     check_nomsg(p=cpl_parameterlist_find(parlist, 
-<a name="l00250"></a>00250                                          <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.kappa"</span>));
-<a name="l00251"></a>00251     check_nomsg(kappa=cpl_parameter_get_int(p));
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     <span class="comment">/* --boolopt */</span>
-<a name="l00254"></a>00254     check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00255"></a>00255                                          <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.filt_rad"</span>));
-<a name="l00256"></a>00256     check_nomsg(filt_rad = cpl_parameter_get_int(p)) ;
-<a name="l00257"></a>00257   
-<a name="l00258"></a>00258     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00259"></a>00259     check(sinfo_dfs_set_groups(framelist),
-<a name="l00260"></a>00260          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00261"></a>00261  
-<a name="l00262"></a>00262     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00263"></a>00263     n=cpl_frameset_get_size(framelist);
-<a name="l00264"></a>00264     <span class="keywordflow">if</span>(n<1) {
-<a name="l00265"></a>00265       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00266"></a>00266       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00267"></a>00267     }
-<a name="l00268"></a>00268     raw_set=cpl_frameset_new();
-<a name="l00269"></a>00269     ck0_nomsg(sinfo_extract_raw_frames(framelist, &raw_set));
-<a name="l00270"></a>00270     n=cpl_frameset_get_size(raw_set);
-<a name="l00271"></a>00271     <span class="keywordflow">if</span>(n<1) {
-<a name="l00272"></a>00272       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No raw data found in frame list!"</span>);
-<a name="l00273"></a>00273       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00274"></a>00274     }
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277     <span class="keywordflow">for</span>(i=0;i<n;i++) {
-<a name="l00278"></a>00278       check_nomsg(frm=cpl_frameset_get_frame(raw_set,0));
-<a name="l00279"></a>00279       check_nomsg(name=cpl_frame_get_filename(frm));
-<a name="l00280"></a>00280       check_nomsg(ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00281"></a>00281 
-<a name="l00282"></a>00282       check_nomsg(sinfo_image_line_corr(width,filt_rad,kappa,ima,&ima_out));
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284       sprintf(name_o,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"ima_cor"</span>,i,<span class="stringliteral">".fits"</span>) ;
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286       <span class="comment">/* Create product frame */</span>
-<a name="l00287"></a>00287       check_nomsg(product_frame = cpl_frame_new());
-<a name="l00288"></a>00288       check_nomsg(cpl_frame_set_filename(product_frame, name_o));
-<a name="l00289"></a>00289       check_nomsg(cpl_frame_set_tag(product_frame, <span class="stringliteral">"IMA_COR"</span>));
-<a name="l00290"></a>00290       check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));
-<a name="l00291"></a>00291       check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT));
-<a name="l00292"></a>00292       check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00293"></a>00293         <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00294"></a>00294     
-<a name="l00295"></a>00295       <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00296"></a>00296       <span class="comment">/*</span>
-<a name="l00297"></a>00297 <span class="comment">      check(cpl_dfs_setup_product_header(plist, </span>
-<a name="l00298"></a>00298 <span class="comment">                     product_frame, </span>
-<a name="l00299"></a>00299 <span class="comment">                     framelist, </span>
-<a name="l00300"></a>00300 <span class="comment">                     parlist,</span>
-<a name="l00301"></a>00301 <span class="comment">                     "sinfo_utl_ima_line_corr", </span>
-<a name="l00302"></a>00302 <span class="comment">                     "SINFONI", </span>
-<a name="l00303"></a>00303 <span class="comment">                     KEY_VALUE_HPRO_DID),</span>
-<a name="l00304"></a>00304 <span class="comment">        "Problem in the product DFS-compliance") ;</span>
-<a name="l00305"></a>00305 <span class="comment">      */</span>
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307       <span class="comment">/* Save the file */</span>
-<a name="l00308"></a>00308       check(cpl_image_save(ima_out, 
-<a name="l00309"></a>00309                name_o, 
-<a name="l00310"></a>00310                CPL_BPP_IEEE_FLOAT, 
-<a name="l00311"></a>00311                plist,
-<a name="l00312"></a>00312                CPL_IO_DEFAULT),
-<a name="l00313"></a>00313         <span class="stringliteral">"Could not save product"</span>);
-<a name="l00314"></a>00314       sinfo_free_propertylist(&plist) ;
-<a name="l00315"></a>00315       sinfo_free_image(&ima_out);
-<a name="l00316"></a>00316       sinfo_free_image(&ima);
-<a name="l00317"></a>00317 
-<a name="l00318"></a>00318       <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00319"></a>00319       check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322 
-<a name="l00323"></a>00323  cleanup:
-<a name="l00324"></a>00324     sinfo_free_image(&ima);
-<a name="l00325"></a>00325     sinfo_free_image(&ima_out);
-<a name="l00326"></a>00326       <span class="comment">//sinfo_free_frameset(&raw_set);</span>
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328 
-<a name="l00329"></a>00329     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00330"></a>00330 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00331"></a>00331 <span class="comment">    */</span>
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00335"></a>00335         <span class="keywordflow">return</span> -1 ;
-<a name="l00336"></a>00336     } <span class="keywordflow">else</span> {
-<a name="l00337"></a>00337         <span class="keywordflow">return</span> 0 ;
-<a name="l00338"></a>00338     }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_ima_line_corr.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_ima_line_corr.c,v 1.3 2009/06/05 08:18:55 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/06/05 08:18:55 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_image_ops.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_ima_line_corr_description[] =</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"This recipe performs image computation.\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"The input files are images\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"their associated tags should be IMA.\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"The output are the images cleaned by the defect introduced by SINFONI sw\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"esorex --params sinfo_utl_ima_line_corr\n"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="stringliteral">"esorex --help sinfo_utl_ima_line_corr\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="code" href="group__sinfo__utl__ima__line__corr.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   96</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     <span class="stringliteral">"sinfo_utl_ima_line_corr"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     <span class="stringliteral">"Computes result of ima1 op ima2"</span>,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     sinfo_utl_ima_line_corr_description,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     sinfo_utl_ima_line_corr_create,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     sinfo_utl_ima_line_corr_exec,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     sinfo_utl_ima_line_corr_destroy) ;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.kappa"</span>, </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                                 <span class="stringliteral">"Kappa sigma value"</span>, </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr"</span>,18);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"kappa"</span>) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>      p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.filt_rad"</span>, </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                 CPL_TYPE_INT,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                 <span class="stringliteral">"Filtering radii applied during median filter."</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                                 <span class="stringliteral">" Should be small"</span>, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr"</span>,3) ;;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"filt_rad"</span>) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>  </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     code = sinfo_utl_ima_line_corr(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     } </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> }</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_ima_line_corr_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> sinfo_utl_ima_line_corr( cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>              cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_parameter       *   p= NULL ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordtype">int</span>                     kappa=18;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">int</span>                     filt_rad=3;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordtype">int</span> width=4;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     cpl_image           *   ima=NULL ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_image           *   ima_out=NULL ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     cpl_frameset * raw_set=NULL;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cpl_frame * frm=NULL;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordtype">char</span> name_o[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     check_nomsg(p=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                          <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.kappa"</span>));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     check_nomsg(kappa=cpl_parameter_get_int(p));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="comment">/* --boolopt */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                                          <span class="stringliteral">"sinfoni.sinfo_utl_ima_line_corr.filt_rad"</span>));</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     check_nomsg(filt_rad = cpl_parameter_get_int(p)) ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>  </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     raw_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     ck0_nomsg(sinfo_extract_raw_frames(framelist, &raw_set));</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     n=cpl_frameset_get_size(raw_set);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No raw data found in frame list!"</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     }</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">for</span>(i=0;i<n;i++) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>       check_nomsg(frm=cpl_frameset_get_frame(raw_set,0));</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       check_nomsg(name=cpl_frame_get_filename(frm));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>       check_nomsg(ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       check_nomsg(sinfo_image_line_corr(width,filt_rad,kappa,ima,&ima_out));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>       sprintf(name_o,<span class="stringliteral">"%s%d%s"</span>,<span class="stringliteral">"ima_cor"</span>,i,<span class="stringliteral">".fits"</span>) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       check_nomsg(cpl_frame_set_filename(product_frame, name_o));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       check_nomsg(cpl_frame_set_tag(product_frame, <span class="stringliteral">"IMA_COR"</span>));</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>       check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>       check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>       <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> <span class="comment">      check(cpl_dfs_setup_product_header(plist, </span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="comment">                     product_frame, </span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">                     framelist, </span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="comment">                     parlist,</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> <span class="comment">                     "sinfo_utl_ima_line_corr", </span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">                     "SINFONI", </span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">                     KEY_VALUE_HPRO_DID),</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">        "Problem in the product DFS-compliance") ;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>       check(cpl_image_save(ima_out, </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                name_o, </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                plist,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>         <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>       sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       sinfo_free_image(&ima_out);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>       sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>       <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>       check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>  cleanup:</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     sinfo_free_image(&ima);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     sinfo_free_image(&ima_out);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       <span class="comment">//sinfo_free_frameset(&raw_set);</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     }</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__line__oh__select_8c_source.html b/html/sinfo__utl__line__oh__select_8c_source.html
index 60d4b52..e63a4ea 100644
--- a/html/sinfo__utl__line__oh__select_8c_source.html
+++ b/html/sinfo__utl__line__oh__select_8c_source.html
@@ -2,276 +2,307 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_line_oh_select.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_line_oh_select.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_line_oh_select.c,v 1.2 2012/08/10 07:55:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/08/10 07:55:03 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">                            Functions prototypes</span>
-<a name="l00051"></a>00051 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_create(cpl_plugin *) ;
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_exec(cpl_plugin *) ;
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_destroy(cpl_plugin *) ;
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">                            Static variables</span>
-<a name="l00060"></a>00060 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_line_oh_select_description[] = 
-<a name="l00063"></a>00063 <span class="stringliteral">"sinfo_utl_line_oh_select -- SINFONI OH LINE table creation.\n"</span>
-<a name="l00064"></a>00064 <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"raw-file.fits REF_LINE_OH \n"</span> ;
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00068"></a>00068 <span class="comment">                                Functions code</span>
-<a name="l00069"></a>00069 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00079"></a>00079 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00081"></a>00081 {
-<a name="l00082"></a>00082     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;
-<a name="l00083"></a>00083     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     cpl_plugin_init(plugin,
-<a name="l00086"></a>00086                     CPL_PLUGIN_API,
-<a name="l00087"></a>00087                     SINFONI_BINARY_VERSION,
-<a name="l00088"></a>00088                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00089"></a>00089                     <span class="stringliteral">"sinfo_utl_line_oh_select"</span>,
-<a name="l00090"></a>00090                     <span class="stringliteral">"OH line table creation"</span>,
-<a name="l00091"></a>00091                     sinfo_utl_line_oh_select_description,
-<a name="l00092"></a>00092                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00093"></a>00093                     <span class="stringliteral">"amodigli at eso.org"</span>,
-<a name="l00094"></a>00094                     sinfo_get_license(),
-<a name="l00095"></a>00095                     sinfo_utl_line_oh_select_create,
-<a name="l00096"></a>00096                     sinfo_utl_line_oh_select_exec,
-<a name="l00097"></a>00097                     sinfo_utl_line_oh_select_destroy) ;
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     cpl_pluginlist_append(list, plugin) ;
-<a name="l00100"></a>00100     
-<a name="l00101"></a>00101     <span class="keywordflow">return</span> 0;
-<a name="l00102"></a>00102 }
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00113"></a>00113 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00114"></a>00114 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_create(cpl_plugin * plugin)
-<a name="l00115"></a>00115 {
-<a name="l00116"></a>00116     cpl_recipe      * recipe ;
-<a name="l00117"></a>00117     cpl_parameter* p=NULL;
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00120"></a>00120     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00121"></a>00121         recipe = (cpl_recipe *)plugin ;
-<a name="l00122"></a>00122     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00125"></a>00125     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00126"></a>00126   
-<a name="l00127"></a>00127     <span class="comment">/* --doubleopt */</span>
-<a name="l00128"></a>00128     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmin"</span>, 
-<a name="l00129"></a>00129                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"wmin"</span>, 
-<a name="l00130"></a>00130                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, 
-<a name="l00131"></a>00131                                 1040.,1000.,2500.) ;
-<a name="l00132"></a>00132     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wmin"</span>) ;
-<a name="l00133"></a>00133     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmax"</span>, 
-<a name="l00137"></a>00137                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"wmax"</span>, 
-<a name="l00138"></a>00138                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, 
-<a name="l00139"></a>00139                                 1880.,1000.,2500.) ;
-<a name="l00140"></a>00140     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wmax"</span>) ;
-<a name="l00141"></a>00141     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intnorm"</span>, 
-<a name="l00144"></a>00144                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"intnorm"</span>, 
-<a name="l00145"></a>00145                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, 
-<a name="l00146"></a>00146                                 4.) ;
-<a name="l00147"></a>00147     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"intnorm"</span>) ;
-<a name="l00148"></a>00148     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intlimit"</span>, 
-<a name="l00151"></a>00151                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"intlimit"</span>, 
-<a name="l00152"></a>00152                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, 
-<a name="l00153"></a>00153                                 50.) ;
-<a name="l00154"></a>00154     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"intlimit"</span>) ;
-<a name="l00155"></a>00155     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160     <span class="comment">/* Return */</span>
-<a name="l00161"></a>00161     <span class="keywordflow">return</span> 0;
-<a name="l00162"></a>00162 }
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00170"></a>00170 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00171"></a>00171 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_exec(cpl_plugin * plugin)
-<a name="l00172"></a>00172 {
-<a name="l00173"></a>00173     cpl_recipe  *   recipe ;
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00176"></a>00176     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00177"></a>00177         recipe = (cpl_recipe *)plugin ;
-<a name="l00178"></a>00178     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180     <span class="keywordflow">return</span> sinfo_utl_line_oh_select(recipe->parameters, recipe->frames) ;
-<a name="l00181"></a>00181 }
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00189"></a>00189 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00190"></a>00190 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_destroy(cpl_plugin * plugin)
-<a name="l00191"></a>00191 {
-<a name="l00192"></a>00192     cpl_recipe  *   recipe ;
-<a name="l00193"></a>00193 
-<a name="l00194"></a>00194     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00195"></a>00195     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00196"></a>00196         recipe = (cpl_recipe *)plugin ;
-<a name="l00197"></a>00197     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00200"></a>00200     <span class="keywordflow">return</span> 0 ;
-<a name="l00201"></a>00201 }
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00210"></a>00210 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00211"></a>00211 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select(
-<a name="l00212"></a>00212         cpl_parameterlist   *   parlist, 
-<a name="l00213"></a>00213         cpl_frameset        *   framelist)
-<a name="l00214"></a>00214 {
-<a name="l00215"></a>00215    cpl_parameter* p=NULL;
-<a name="l00216"></a>00216    cpl_frame* frame=NULL;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     cpl_frameset    *   rawframes ;
-<a name="l00219"></a>00219     <span class="keywordtype">int</span>                 nframes;
-<a name="l00220"></a>00220     cpl_propertylist* phead=NULL;
-<a name="l00221"></a>00221     cpl_table       *   tab_in ;
-<a name="l00222"></a>00222     cpl_table       *   tab_ou ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="keywordtype">int</span> nm2AA=10.;
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226   
-<a name="l00227"></a>00227     <span class="keywordtype">double</span> wmin=0;
-<a name="l00228"></a>00228     <span class="keywordtype">double</span> wmax=0;
-<a name="l00229"></a>00229     <span class="keywordtype">double</span> intnorm=0;
-<a name="l00230"></a>00230     <span class="keywordtype">double</span> intlimit=0;
-<a name="l00231"></a>00231     <span class="keywordtype">int</span> next=0;
-<a name="l00232"></a>00232     <span class="keywordtype">int</span> nrow=0;
-<a name="l00233"></a>00233     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00234"></a>00234     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {
-<a name="l00235"></a>00235         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00236"></a>00236         <span class="keywordflow">return</span> -1 ;
-<a name="l00237"></a>00237     }
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="comment">/* Retrieve raw frames */</span>
-<a name="l00240"></a>00240     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,
-<a name="l00241"></a>00241                     <span class="stringliteral">"REF_LINE_OH"</span>)) == NULL) {
-<a name="l00242"></a>00242         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;
-<a name="l00243"></a>00243         <span class="keywordflow">return</span> -1 ;
-<a name="l00244"></a>00244     }
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmin"</span>);
-<a name="l00247"></a>00247     wmin = cpl_parameter_get_double(p);
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmax"</span>);
-<a name="l00250"></a>00250     wmax = cpl_parameter_get_double(p);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intnorm"</span>);
-<a name="l00253"></a>00253     intnorm = cpl_parameter_get_double(p);
-<a name="l00254"></a>00254     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intlimit"</span>);
-<a name="l00255"></a>00255     intlimit = cpl_parameter_get_double(p);
-<a name="l00256"></a>00256 
-<a name="l00257"></a>00257     nframes = cpl_frameset_get_size(rawframes) ;
-<a name="l00258"></a>00258  
-<a name="l00259"></a>00259     <span class="comment">/* Load */</span>
-<a name="l00260"></a>00260     <span class="keywordflow">if</span>(nframes > 0) {
-<a name="l00261"></a>00261        frame=cpl_frameset_get_frame(rawframes,0);
-<a name="l00262"></a>00262     }
-<a name="l00263"></a>00263     tab_in=cpl_table_load(cpl_frame_get_filename(frame),1,0);
-<a name="l00264"></a>00264     nrow=cpl_table_get_nrow(tab_in);
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266     cpl_table_divide_scalar(tab_in,<span class="stringliteral">"wave"</span>,nm2AA);
-<a name="l00267"></a>00267     cpl_table_divide_scalar(tab_in,<span class="stringliteral">"int"</span>,intnorm);
-<a name="l00268"></a>00268     sinfo_msg(<span class="stringliteral">"wmin=%g wmax=%g"</span>,wmin,wmax);
-<a name="l00269"></a>00269     sinfo_msg(<span class="stringliteral">"nrow=%d"</span>,nrow);
-<a name="l00270"></a>00270     cpl_table_dump(tab_in,1,2,stdout);
-<a name="l00271"></a>00271     cpl_table_dump(tab_in,nrow-10,2,stdout);
-<a name="l00272"></a>00272     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"wave"</span>,CPL_GREATER_THAN,wmin);
-<a name="l00273"></a>00273     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);
-<a name="l00274"></a>00274     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"wave"</span>,CPL_LESS_THAN,wmax);
-<a name="l00275"></a>00275     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);
-<a name="l00276"></a>00276     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"int"</span>,CPL_GREATER_THAN,intlimit);
-<a name="l00277"></a>00277     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);
-<a name="l00278"></a>00278     tab_ou=cpl_table_extract_selected(tab_in);
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280     cpl_table_save(tab_ou,phead,NULL,<span class="stringliteral">"oh_selected.fits"</span>,CPL_IO_DEFAULT);
-<a name="l00281"></a>00281     
-<a name="l00282"></a>00282     <span class="comment">/* Free and return */</span>
-<a name="l00283"></a>00283     sinfo_free_table(&tab_in);
-<a name="l00284"></a>00284     sinfo_free_table(&tab_ou);
-<a name="l00285"></a>00285     sinfo_free_propertylist(&phead);
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288     <span class="keywordflow">return</span> 0 ;
-<a name="l00289"></a>00289 }
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_line_oh_select.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_line_oh_select.c,v 1.3 2013/07/15 08:14:38 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/07/15 08:14:38 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.3 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_line_oh_select_description[] = </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="stringliteral">"sinfo_utl_line_oh_select -- SINFONI OH LINE table creation.\n"</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"raw-file.fits REF_LINE_OH \n"</span> ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                     <span class="stringliteral">"sinfo_utl_line_oh_select"</span>,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>                     <span class="stringliteral">"OH line table creation"</span>,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                     sinfo_utl_line_oh_select_description,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                     <span class="stringliteral">"amodigli at eso.org"</span>,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                     sinfo_utl_line_oh_select_create,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     sinfo_utl_line_oh_select_exec,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     sinfo_utl_line_oh_select_destroy) ;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmin"</span>, </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"wmin"</span>, </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                                 1040.,1000.,2500.) ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wmin"</span>) ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmax"</span>, </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"wmax"</span>, </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                                 1880.,1000.,2500.) ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wmax"</span>) ;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intnorm"</span>, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"intnorm"</span>, </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                                 4.) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"intnorm"</span>) ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intlimit"</span>, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                 CPL_TYPE_DOUBLE, <span class="stringliteral">"intlimit"</span>, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                                <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select"</span>, </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                                 50.) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"intlimit"</span>) ;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> }</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">return</span> sinfo_utl_line_oh_select(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> }</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> }</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_line_oh_select(</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>    cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>    cpl_frame* frame=NULL;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_frameset    *   rawframes ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordtype">int</span>                 nframes;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     cpl_propertylist* phead=NULL;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_table       *   tab_in ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     cpl_table       *   tab_ou ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="keywordtype">int</span> nm2AA=10.;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordtype">double</span> wmin=0;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="keywordtype">double</span> wmax=0;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     <span class="keywordtype">double</span> intnorm=0;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     <span class="keywordtype">double</span> intlimit=0;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="keywordtype">int</span> next=0;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     }</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="comment">/* Retrieve raw frames */</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                     <span class="stringliteral">"REF_LINE_OH"</span>)) == NULL) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmin"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     wmin = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.wmax"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     wmax = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intnorm"</span>);</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     intnorm = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     p=cpl_parameterlist_find(parlist, <span class="stringliteral">"sinfoni.sinfo_utl_line_oh_select.intlimit"</span>);</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     intlimit = cpl_parameter_get_double(p);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     nframes = cpl_frameset_get_size(rawframes) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>  </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="comment">/* Load */</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordflow">if</span>(nframes > 0) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>        frame=cpl_frameset_get_frame(rawframes,0);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     tab_in=cpl_table_load(cpl_frame_get_filename(frame),1,0);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     nrow=cpl_table_get_nrow(tab_in);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     cpl_table_divide_scalar(tab_in,<span class="stringliteral">"wave"</span>,nm2AA);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_table_divide_scalar(tab_in,<span class="stringliteral">"int"</span>,intnorm);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     sinfo_msg(<span class="stringliteral">"wmin=%g wmax=%g"</span>,wmin,wmax);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     sinfo_msg(<span class="stringliteral">"nrow=%d"</span>,nrow);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     cpl_table_dump(tab_in,1,2,stdout);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     cpl_table_dump(tab_in,nrow-10,2,stdout);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"wave"</span>,CPL_GREATER_THAN,wmin);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"wave"</span>,CPL_LESS_THAN,wmax);</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     next=cpl_table_and_selected_double(tab_in,<span class="stringliteral">"int"</span>,CPL_GREATER_THAN,intlimit);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     sinfo_msg(<span class="stringliteral">"next=%d"</span>,next);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     tab_ou=cpl_table_extract_selected(tab_in);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     cpl_table_save(tab_ou,phead,NULL,<span class="stringliteral">"oh_selected.fits"</span>,CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     sinfo_free_table(&tab_in);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     sinfo_free_table(&tab_ou);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     sinfo_free_propertylist(&phead);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__remove__crh__single_8c_source.html b/html/sinfo__utl__remove__crh__single_8c_source.html
index f3a40ba..f70b375 100644
--- a/html/sinfo__utl__remove__crh__single_8c_source.html
+++ b/html/sinfo__utl__remove__crh__single_8c_source.html
@@ -2,430 +2,461 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_remove_crh_single.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_remove_crh_single.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_remove_crh_single.c,v 1.2 2009/01/30 14:56:12 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00052"></a>00052 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include <sinfo_remove_crh_single.h></span>
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00056"></a>00056 <span class="comment">                            Functions prototypes</span>
-<a name="l00057"></a>00057 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00058"></a>00058 
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_create(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_exec(cpl_plugin *) ;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_destroy(cpl_plugin *) ;
-<a name="l00062"></a>00062 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">                            Static variables</span>
-<a name="l00066"></a>00066 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_remove_crh_single_description[] =
-<a name="l00069"></a>00069 <span class="stringliteral">"This recipe performs image computation.\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"The input files is one image\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"their associated tags should be IMA.\n"</span>
-<a name="l00072"></a>00072 <span class="stringliteral">"The output is the image cleaned from CRHs\n"</span>
-<a name="l00073"></a>00073 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00074"></a>00074 <span class="stringliteral">"esorex --params sinfo_utl_remove_crh_single\n"</span>
-<a name="l00075"></a>00075 <span class="stringliteral">"esorex --help sinfo_utl_remove_crh_single\n"</span>
-<a name="l00076"></a>00076 <span class="stringliteral">"\n"</span>;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00079"></a>00079 <span class="comment">                                Functions code</span>
-<a name="l00080"></a>00080 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 
-<a name="l00088"></a>00088 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00096"></a>00096 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00097"></a><a class="code" href="group__sinfo__utl__remove__crh__single.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00097</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00098"></a>00098 {
-<a name="l00099"></a>00099     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00100"></a>00100     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     cpl_plugin_init(plugin,
-<a name="l00103"></a>00103                     CPL_PLUGIN_API,
-<a name="l00104"></a>00104                     SINFONI_BINARY_VERSION,
-<a name="l00105"></a>00105                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00106"></a>00106                     <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>,
-<a name="l00107"></a>00107                     <span class="stringliteral">"Remove CRHs from an image"</span>,
-<a name="l00108"></a>00108                     sinfo_utl_remove_crh_single_description,
-<a name="l00109"></a>00109                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00110"></a>00110                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00111"></a>00111                     sinfo_get_license(),
-<a name="l00112"></a>00112                     sinfo_utl_remove_crh_single_create,
-<a name="l00113"></a>00113                     sinfo_utl_remove_crh_single_exec,
-<a name="l00114"></a>00114                     sinfo_utl_remove_crh_single_destroy) ;
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     cpl_pluginlist_append(list, plugin) ;
-<a name="l00117"></a>00117     
-<a name="l00118"></a>00118     <span class="keywordflow">return</span> 0;
-<a name="l00119"></a>00119 }
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00130"></a>00130 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00131"></a>00131 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_create(cpl_plugin * plugin)
-<a name="l00132"></a>00132 {
-<a name="l00133"></a>00133     cpl_recipe      * recipe ;
-<a name="l00134"></a>00134     cpl_parameter   * p ;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00137"></a>00137     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00138"></a>00138         recipe = (cpl_recipe *)plugin ;
-<a name="l00139"></a>00139     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00140"></a>00140     cpl_error_reset();
-<a name="l00141"></a>00141     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00144"></a>00144     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00147"></a>00147     <span class="comment">/* --stropt */</span>
-<a name="l00148"></a>00148     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.crh_frac_max"</span>, 
-<a name="l00149"></a>00149                                 CPL_TYPE_DOUBLE, 
-<a name="l00150"></a>00150                                 <span class="stringliteral">"Maximum fraction of allowed CRHs"</span>, 
-<a name="l00151"></a>00151                                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,0.7);
-<a name="l00152"></a>00152     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"crh_frac_max"</span>) ;
-<a name="l00153"></a>00153     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">/* --doubleopt */</span>
-<a name="l00156"></a>00156     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.sigma_lim"</span>, 
-<a name="l00157"></a>00157                 CPL_TYPE_DOUBLE, 
-<a name="l00158"></a>00158                 <span class="stringliteral">"Maximum sigma in kappa-sigma clip"</span>,
-<a name="l00159"></a>00159                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>, 25.) ;
-<a name="l00160"></a>00160     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"sigma_lim"</span>) ;
-<a name="l00161"></a>00161     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.f_lim"</span>, 
-<a name="l00166"></a>00166                 CPL_TYPE_DOUBLE, 
-<a name="l00167"></a>00167                 <span class="stringliteral">"Max fraction of bad pixels allowed"</span>,
-<a name="l00168"></a>00168                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>, 0.7) ;
-<a name="l00169"></a>00169     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"f_lim"</span>) ;
-<a name="l00170"></a>00170     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.max_iter"</span>,
-<a name="l00174"></a>00174                 CPL_TYPE_INT, 
-<a name="l00175"></a>00175                 <span class="stringliteral">"Max fraction of bad pixels allowed"</span>,
-<a name="l00176"></a>00176                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,5) ;
-<a name="l00177"></a>00177     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"max_iter"</span>) ;
-<a name="l00178"></a>00178     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00179"></a>00179 
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.gain"</span>,
-<a name="l00183"></a>00183                 CPL_TYPE_DOUBLE, 
-<a name="l00184"></a>00184                 <span class="stringliteral">"Detector's gain"</span>,
-<a name="l00185"></a>00185                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,2.42) ;
-<a name="l00186"></a>00186     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"gain"</span>) ;
-<a name="l00187"></a>00187     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.ron"</span>,
-<a name="l00191"></a>00191                 CPL_TYPE_DOUBLE, 
-<a name="l00192"></a>00192                 <span class="stringliteral">"Detector's ron"</span>,
-<a name="l00193"></a>00193                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,1.) ;
-<a name="l00194"></a>00194     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ron"</span>) ;
-<a name="l00195"></a>00195     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199  
-<a name="l00200"></a>00200     <span class="comment">/* Return */</span>
-<a name="l00201"></a>00201     <span class="keywordflow">return</span> 0;
-<a name="l00202"></a>00202 }
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00210"></a>00210 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00211"></a>00211 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_exec(cpl_plugin * plugin)
-<a name="l00212"></a>00212 {
-<a name="l00213"></a>00213     cpl_recipe  *   recipe ;
-<a name="l00214"></a>00214      <span class="keywordtype">int</span> code=0;
-<a name="l00215"></a>00215      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00218"></a>00218     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00219"></a>00219         recipe = (cpl_recipe *)plugin ;
-<a name="l00220"></a>00220     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00221"></a>00221     cpl_error_reset();
-<a name="l00222"></a>00222     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00223"></a>00223     code = sinfo_utl_remove_crh_single(recipe->parameters, recipe->frames) ;
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00227"></a>00227         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00228"></a>00228 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00229"></a>00229         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00230"></a>00230     } 
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232     <span class="keywordflow">return</span> code ;
-<a name="l00233"></a>00233 }
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00241"></a>00241 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00242"></a>00242 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_destroy(cpl_plugin * plugin)
-<a name="l00243"></a>00243 {
-<a name="l00244"></a>00244     cpl_recipe  *   recipe ;
-<a name="l00245"></a>00245     
-<a name="l00246"></a>00246     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00247"></a>00247     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00248"></a>00248         recipe = (cpl_recipe *)plugin ;
-<a name="l00249"></a>00249     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00252"></a>00252     <span class="keywordflow">return</span> 0 ;
-<a name="l00253"></a>00253 }
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00262"></a>00262 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00263"></a>00263 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00264"></a>00264 sinfo_utl_remove_crh_single( cpl_parameterlist   *   parlist, 
-<a name="l00265"></a>00265         cpl_frameset        *   framelist)
-<a name="l00266"></a>00266 {
-<a name="l00267"></a>00267     cpl_parameter       *   param= NULL ;
-<a name="l00268"></a>00268     cpl_frameset * raw_on=NULL;
-<a name="l00269"></a>00269     cpl_frameset * raw_off=NULL;
-<a name="l00270"></a>00270     <span class="keywordtype">double</span> crh_frac_max=0;
-<a name="l00271"></a>00271     <span class="keywordtype">double</span> sigma_lim=0;
-<a name="l00272"></a>00272     <span class="keywordtype">double</span> f_lim=0;
-<a name="l00273"></a>00273     <span class="keywordtype">int</span> max_iter=0;
-<a name="l00274"></a>00274     <span class="keywordtype">double</span> gain=0;
-<a name="l00275"></a>00275     <span class="keywordtype">double</span> ron=0;
-<a name="l00276"></a>00276     <span class="keywordtype">int</span> nraw=0;
-<a name="l00277"></a>00277     <span class="keywordtype">int</span> n=0;
-<a name="l00278"></a>00278     cpl_image* ima_res=NULL;
-<a name="l00279"></a>00279     <span class="keywordtype">char</span> name[256];
-<a name="l00280"></a>00280     cpl_image* image=NULL;
-<a name="l00281"></a>00281     cpl_image* img_on=NULL;
-<a name="l00282"></a>00282     cpl_image* img_off=NULL;
-<a name="l00283"></a>00283     cpl_propertylist* plist=NULL;
-<a name="l00284"></a>00284     <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o=NULL;
-<a name="l00285"></a>00285     cpl_frame* product_frame=NULL;
-<a name="l00286"></a>00286     cpl_frame* frame_on=NULL;
-<a name="l00287"></a>00287     cpl_frame* frame_off=NULL;
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289           sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00290"></a>00290         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00293"></a>00293     check_nomsg(param=cpl_parameterlist_find(parlist, 
-<a name="l00294"></a>00294                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.crh_frac_max"</span>));
-<a name="l00295"></a>00295     check_nomsg(crh_frac_max=cpl_parameter_get_double(param));
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00298"></a>00298                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.sigma_lim"</span>));
-<a name="l00299"></a>00299     check_nomsg(sigma_lim = cpl_parameter_get_double(param)) ;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00303"></a>00303                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.f_lim"</span>));
-<a name="l00304"></a>00304     check_nomsg(f_lim = cpl_parameter_get_double(param)) ;
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00307"></a>00307                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.max_iter"</span>));
-<a name="l00308"></a>00308     check_nomsg(max_iter = cpl_parameter_get_int(param)) ;
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00311"></a>00311                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.gain"</span>));
-<a name="l00312"></a>00312     check_nomsg(gain = cpl_parameter_get_double(param)) ;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00316"></a>00316                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.ron"</span>));
-<a name="l00317"></a>00317     check_nomsg(ron = cpl_parameter_get_double(param)) ;
-<a name="l00318"></a>00318   
-<a name="l00319"></a>00319     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00320"></a>00320     check(sinfo_dfs_set_groups(framelist),
-<a name="l00321"></a>00321          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00322"></a>00322     <span class="comment">//cpl_frameset_dump(framelist,stdout);</span>
-<a name="l00323"></a>00323 
-<a name="l00324"></a>00324     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00325"></a>00325     n=cpl_frameset_get_size(framelist);
-<a name="l00326"></a>00326     <span class="keywordflow">if</span>(n<1) {
-<a name="l00327"></a>00327       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00328"></a>00328       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00329"></a>00329     }
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00332"></a>00332     check_nomsg(raw_on=cpl_frameset_new());
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     check(sinfo_contains_frames_kind(framelist,raw_on,RAW_ON),
-<a name="l00335"></a>00335      <span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_ON);
-<a name="l00336"></a>00336     check_nomsg(nraw=cpl_frameset_get_size(raw_on));
-<a name="l00337"></a>00337     <span class="keywordflow">if</span> (nraw<1) {
-<a name="l00338"></a>00338       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_ON);
-<a name="l00339"></a>00339       <span class="keywordflow">goto</span> cleanup;
-<a name="l00340"></a>00340     }
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     check_nomsg(raw_off=cpl_frameset_new());
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345     check(sinfo_contains_frames_kind(framelist,raw_off,RAW_OFF),
-<a name="l00346"></a>00346      <span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_OFF);
-<a name="l00347"></a>00347     check_nomsg(nraw=cpl_frameset_get_size(raw_off));
-<a name="l00348"></a>00348     <span class="keywordflow">if</span> (nraw<1) {
-<a name="l00349"></a>00349       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_OFF);
-<a name="l00350"></a>00350       <span class="keywordflow">goto</span> cleanup;
-<a name="l00351"></a>00351     }
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     check_nomsg(frame_on=cpl_frameset_get_first(raw_on));
-<a name="l00355"></a>00355     check_nomsg(strcpy(name,cpl_frame_get_filename(frame_on)));
-<a name="l00356"></a>00356     check_nomsg(sinfo_free_frameset(&raw_on));
-<a name="l00357"></a>00357     sinfo_msg(<span class="stringliteral">"name=%s"</span>,name);
-<a name="l00358"></a>00358     check_nomsg(img_on=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00359"></a>00359     check(plist=cpl_propertylist_load(name,0),
-<a name="l00360"></a>00360           <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362 
-<a name="l00363"></a>00363     frame_off=cpl_frameset_get_first(raw_off);
-<a name="l00364"></a>00364     strcpy(name,cpl_frame_get_filename(frame_off));
-<a name="l00365"></a>00365     sinfo_free_frameset(&raw_off);
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367     img_off=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369     image=cpl_image_duplicate(img_on);
-<a name="l00370"></a>00370     sinfo_free_image(&img_on);
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372     cpl_image_subtract(image,img_off);
-<a name="l00373"></a>00373     cpl_image_save(image,<span class="stringliteral">"image_with_crh.fits"</span>,CPL_BPP_IEEE_FLOAT,NULL,
-<a name="l00374"></a>00374            CPL_IO_DEFAULT);
-<a name="l00375"></a>00375 
-<a name="l00376"></a>00376     check(ima_res=sinfo_remove_crh_single(image,crh_frac_max,sigma_lim,f_lim,
-<a name="l00377"></a>00377                       max_iter,gain,ron),
-<a name="l00378"></a>00378       <span class="stringliteral">"fail to remove CRHs"</span>);
-<a name="l00379"></a>00379 
-<a name="l00380"></a>00380     sinfo_free_image(&image); 
-<a name="l00381"></a>00381 
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383 
-<a name="l00384"></a>00384     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00385"></a>00385     <span class="comment">/* Set the file name */</span>
-<a name="l00386"></a>00386     name_o = <span class="stringliteral">"ima_res.fits"</span> ;
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388     <span class="comment">/* Create product frame */</span>
-<a name="l00389"></a>00389     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00390"></a>00390     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00391"></a>00391     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_IMA_ARITH_PROIMA)) ;
-<a name="l00392"></a>00392     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00393"></a>00393     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00394"></a>00394     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00395"></a>00395       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00396"></a>00396     
-<a name="l00397"></a>00397     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00398"></a>00398     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00399"></a>00399 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span>
-<a name="l00400"></a>00400 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00401"></a>00401                                        product_frame, 
-<a name="l00402"></a>00402                                        framelist, 
-<a name="l00403"></a>00403                                        parlist,
-<a name="l00404"></a>00404                                        <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>, 
-<a name="l00405"></a>00405                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00406"></a>00406                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00407"></a>00407       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00408"></a>00408 <span class="preprocessor">#else</span>
-<a name="l00409"></a>00409 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00410"></a>00410                                        product_frame, 
-<a name="l00411"></a>00411                                        framelist, 
-<a name="l00412"></a>00412                                        parlist,
-<a name="l00413"></a>00413                                        <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>, 
-<a name="l00414"></a>00414                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00415"></a>00415                                        KEY_VALUE_HPRO_DID),
-<a name="l00416"></a>00416       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00417"></a>00417 <span class="preprocessor">#endif</span>
-<a name="l00418"></a>00418 <span class="preprocessor"></span>    <span class="comment">/* Save the file */</span>
-<a name="l00419"></a>00419     check(cpl_image_save(ima_res, 
-<a name="l00420"></a>00420                          name_o, 
-<a name="l00421"></a>00421                          CPL_BPP_IEEE_FLOAT, 
-<a name="l00422"></a>00422                          plist,
-<a name="l00423"></a>00423                          CPL_IO_DEFAULT),
-<a name="l00424"></a>00424       <span class="stringliteral">"Could not save product"</span>);
-<a name="l00425"></a>00425     sinfo_free_propertylist(&plist) ;
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00429"></a>00429     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00430"></a>00430 
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432  cleanup:
-<a name="l00433"></a>00433    
-<a name="l00434"></a>00434     sinfo_free_frameset(&raw_on);
-<a name="l00435"></a>00435     sinfo_free_frameset(&raw_off);
-<a name="l00436"></a>00436     sinfo_free_image(&img_on);
-<a name="l00437"></a>00437     sinfo_free_image(&img_off);
-<a name="l00438"></a>00438     sinfo_free_propertylist(&plist) ;
-<a name="l00439"></a>00439     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00440"></a>00440 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00441"></a>00441 <span class="comment">    */</span>
-<a name="l00442"></a>00442     sinfo_free_image(&image) ;
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00445"></a>00445         <span class="keywordflow">return</span> -1 ;
-<a name="l00446"></a>00446     } <span class="keywordflow">else</span> {
-<a name="l00447"></a>00447         <span class="keywordflow">return</span> 0 ;
-<a name="l00448"></a>00448     }
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_remove_crh_single.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_remove_crh_single.c,v 1.2 2009/01/30 14:56:12 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include <sinfo_remove_crh_single.h></span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_remove_crh_single_description[] =</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"This recipe performs image computation.\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"The input files is one image\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"their associated tags should be IMA.\n"</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="stringliteral">"The output is the image cleaned from CRHs\n"</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="stringliteral">"esorex --params sinfo_utl_remove_crh_single\n"</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="stringliteral">"esorex --help sinfo_utl_remove_crh_single\n"</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="group__sinfo__utl__remove__crh__single.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   97</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> {</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     <span class="stringliteral">"Remove CRHs from an image"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     sinfo_utl_remove_crh_single_description,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     sinfo_utl_remove_crh_single_create,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     sinfo_utl_remove_crh_single_exec,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     sinfo_utl_remove_crh_single_destroy) ;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> {</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.crh_frac_max"</span>, </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                                 <span class="stringliteral">"Maximum fraction of allowed CRHs"</span>, </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,0.7);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"crh_frac_max"</span>) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.sigma_lim"</span>, </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                 <span class="stringliteral">"Maximum sigma in kappa-sigma clip"</span>,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>, 25.) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"sigma_lim"</span>) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.f_lim"</span>, </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                 <span class="stringliteral">"Max fraction of bad pixels allowed"</span>,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>, 0.7) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"f_lim"</span>) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.max_iter"</span>,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                 CPL_TYPE_INT, </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                 <span class="stringliteral">"Max fraction of bad pixels allowed"</span>,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,5) ;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"max_iter"</span>) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.gain"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                 <span class="stringliteral">"Detector's gain"</span>,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,2.42) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"gain"</span>) ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.ron"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                 <span class="stringliteral">"Detector's ron"</span>,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single"</span>,1.) ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ron"</span>) ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>  </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     code = sinfo_utl_remove_crh_single(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     } </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_remove_crh_single_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> sinfo_utl_remove_crh_single( cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> {</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     cpl_parameter       *   param= NULL ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     cpl_frameset * raw_on=NULL;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     cpl_frameset * raw_off=NULL;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordtype">double</span> crh_frac_max=0;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="keywordtype">double</span> sigma_lim=0;</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordtype">double</span> f_lim=0;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     <span class="keywordtype">int</span> max_iter=0;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordtype">double</span> gain=0;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     <span class="keywordtype">double</span> ron=0;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     cpl_image* ima_res=NULL;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     <span class="keywordtype">char</span> name[256];</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     cpl_image* image=NULL;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     cpl_image* img_on=NULL;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     cpl_image* img_off=NULL;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* name_o=NULL;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     cpl_frame* product_frame=NULL;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_frame* frame_on=NULL;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_frame* frame_off=NULL;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>           sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     check_nomsg(param=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.crh_frac_max"</span>));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     check_nomsg(crh_frac_max=cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.sigma_lim"</span>));</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     check_nomsg(sigma_lim = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.f_lim"</span>));</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     check_nomsg(f_lim = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.max_iter"</span>));</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     check_nomsg(max_iter = cpl_parameter_get_int(param)) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.gain"</span>));</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     check_nomsg(gain = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_remove_crh_single.ron"</span>));</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     check_nomsg(ron = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>   </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">//cpl_frameset_dump(framelist,stdout);</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     }</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     check_nomsg(raw_on=cpl_frameset_new());</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     check(sinfo_contains_frames_kind(framelist,raw_on,RAW_ON),</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>      <span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_ON);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     check_nomsg(nraw=cpl_frameset_get_size(raw_on));</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">if</span> (nraw<1) {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_ON);</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>     }</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     check_nomsg(raw_off=cpl_frameset_new());</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     check(sinfo_contains_frames_kind(framelist,raw_off,RAW_OFF),</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>      <span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_OFF);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     check_nomsg(nraw=cpl_frameset_get_size(raw_off));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordflow">if</span> (nraw<1) {</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Found no input frames with tag %s"</span>,RAW_OFF);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     }</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     check_nomsg(frame_on=cpl_frameset_get_first(raw_on));</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     check_nomsg(strcpy(name,cpl_frame_get_filename(frame_on)));</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     check_nomsg(sinfo_free_frameset(&raw_on));</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     sinfo_msg(<span class="stringliteral">"name=%s"</span>,name);</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     check_nomsg(img_on=cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     check(plist=cpl_propertylist_load(name,0),</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>           <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span> </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     frame_off=cpl_frameset_get_first(raw_off);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     strcpy(name,cpl_frame_get_filename(frame_off));</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     sinfo_free_frameset(&raw_off);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     img_off=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     image=cpl_image_duplicate(img_on);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     sinfo_free_image(&img_on);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     cpl_image_subtract(image,img_off);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     cpl_image_save(image,<span class="stringliteral">"image_with_crh.fits"</span>,CPL_BPP_IEEE_FLOAT,NULL,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>            CPL_IO_DEFAULT);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     check(ima_res=sinfo_remove_crh_single(image,crh_frac_max,sigma_lim,f_lim,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                       max_iter,gain,ron),</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>       <span class="stringliteral">"fail to remove CRHs"</span>);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>     sinfo_free_image(&image); </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> </div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     name_o = <span class="stringliteral">"ima_res.fits"</span> ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_IMA_ARITH_PROIMA)) ;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span></div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                                        product_frame, </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                                        framelist, </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                                        parlist,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                                        <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>, </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                        product_frame, </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                                        framelist, </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                                        parlist,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>                                        <span class="stringliteral">"sinfo_utl_remove_crh_single"</span>, </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>                                        KEY_VALUE_HPRO_DID),</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> <span class="preprocessor"></span>    <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     check(cpl_image_save(ima_res, </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                          name_o, </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                          CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                          plist,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                          CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>       <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span> </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>  cleanup:</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>    </div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>     sinfo_free_frameset(&raw_on);</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     sinfo_free_frameset(&raw_off);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     sinfo_free_image(&img_on);</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     sinfo_free_image(&img_off);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     sinfo_free_image(&image) ;</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     }</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__seds_8c_source.html b/html/sinfo__utl__seds_8c_source.html
index 38aed47..b25cf8f 100644
--- a/html/sinfo__utl__seds_8c_source.html
+++ b/html/sinfo__utl__seds_8c_source.html
@@ -2,283 +2,314 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_seds.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_seds.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_seds.c,v 1.1 2008/06/11 13:42:20 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2008/06/11 13:42:20 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*</span>
-<a name="l00048"></a>00048 <span class="comment">#include "isaac_utils.h"</span>
-<a name="l00049"></a>00049 <span class="comment">#include "isaac_pfits.h"</span>
-<a name="l00050"></a>00050 <span class="comment">#include "isaac_dfs.h"</span>
-<a name="l00051"></a>00051 <span class="comment">*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Functions prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_create(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_exec(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_destroy(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_save(cpl_table *, cpl_parameterlist *, 
-<a name="l00062"></a>00062         cpl_frameset *) ;
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">                            Static variables</span>
-<a name="l00066"></a>00066 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_seds_description[] = 
-<a name="l00069"></a>00069 <span class="stringliteral">"sinfo_utl_seds -- SINFONI SEDS table creation.\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"raw-file.fits "</span>SINFO_UTL_SEDS_RAW<span class="stringliteral">"\n"</span> ;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00074"></a>00074 <span class="comment">                                Functions code</span>
-<a name="l00075"></a>00075 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00086"></a>00086 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00087"></a>00087 {
-<a name="l00088"></a>00088     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;
-<a name="l00089"></a>00089     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091     cpl_plugin_init(plugin,
-<a name="l00092"></a>00092                     CPL_PLUGIN_API,
-<a name="l00093"></a>00093                     SINFONI_BINARY_VERSION,
-<a name="l00094"></a>00094                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00095"></a>00095                     <span class="stringliteral">"sinfo_utl_seds"</span>,
-<a name="l00096"></a>00096                     <span class="stringliteral">"SEDS table creation"</span>,
-<a name="l00097"></a>00097                     sinfo_utl_seds_description,
-<a name="l00098"></a>00098                     <span class="stringliteral">"Yves Jung"</span>,
-<a name="l00099"></a>00099                     <span class="stringliteral">"yjung at eso.org"</span>,
-<a name="l00100"></a>00100                     sinfo_get_license(),
-<a name="l00101"></a>00101                     sinfo_utl_seds_create,
-<a name="l00102"></a>00102                     sinfo_utl_seds_exec,
-<a name="l00103"></a>00103                     sinfo_utl_seds_destroy) ;
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     cpl_pluginlist_append(list, plugin) ;
-<a name="l00106"></a>00106     
-<a name="l00107"></a>00107     <span class="keywordflow">return</span> 0;
-<a name="l00108"></a>00108 }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00119"></a>00119 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00120"></a>00120 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_create(cpl_plugin * plugin)
-<a name="l00121"></a>00121 {
-<a name="l00122"></a>00122     cpl_recipe      * recipe ;
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00125"></a>00125     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00126"></a>00126         recipe = (cpl_recipe *)plugin ;
-<a name="l00127"></a>00127     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00130"></a>00130     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="comment">/* Return */</span>
-<a name="l00133"></a>00133     <span class="keywordflow">return</span> 0;
-<a name="l00134"></a>00134 }
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00142"></a>00142 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_exec(cpl_plugin * plugin)
-<a name="l00144"></a>00144 {
-<a name="l00145"></a>00145     cpl_recipe  *   recipe ;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00148"></a>00148     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00149"></a>00149         recipe = (cpl_recipe *)plugin ;
-<a name="l00150"></a>00150     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00151"></a>00151 
-<a name="l00152"></a>00152     <span class="keywordflow">return</span> sinfo_utl_seds(recipe->parameters, recipe->frames) ;
-<a name="l00153"></a>00153 }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00161"></a>00161 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00162"></a>00162 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_destroy(cpl_plugin * plugin)
-<a name="l00163"></a>00163 {
-<a name="l00164"></a>00164     cpl_recipe  *   recipe ;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00167"></a>00167     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00168"></a>00168         recipe = (cpl_recipe *)plugin ;
-<a name="l00169"></a>00169     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00172"></a>00172     <span class="keywordflow">return</span> 0 ;
-<a name="l00173"></a>00173 }
-<a name="l00174"></a>00174 
-<a name="l00175"></a>00175 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00183"></a>00183 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds(
-<a name="l00184"></a>00184         cpl_parameterlist   *   parlist, 
-<a name="l00185"></a>00185         cpl_frameset        *   framelist)
-<a name="l00186"></a>00186 {
-<a name="l00187"></a>00187     cpl_frame       *   cur_frame ;
-<a name="l00188"></a>00188     cpl_frameset    *   rawframes ;
-<a name="l00189"></a>00189     <span class="keywordtype">int</span>                 nframes, nlines ;
-<a name="l00190"></a>00190     cpl_table       *   out ;
-<a name="l00191"></a>00191     cpl_bivector    **  seds ;
-<a name="l00192"></a>00192     <span class="keywordtype">char</span>            *   name ;
-<a name="l00193"></a>00193     cpl_vector      *   tmp_vec ;
-<a name="l00194"></a>00194     <span class="keywordtype">int</span>                 i, j ;
-<a name="l00195"></a>00195     
-<a name="l00196"></a>00196     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00197"></a>00197     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {
-<a name="l00198"></a>00198         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00199"></a>00199         <span class="keywordflow">return</span> -1 ;
-<a name="l00200"></a>00200     }
-<a name="l00201"></a>00201 
-<a name="l00202"></a>00202     <span class="comment">/* Retrieve raw frames */</span>
-<a name="l00203"></a>00203     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,
-<a name="l00204"></a>00204                     SINFO_UTL_SEDS_RAW)) == NULL) {
-<a name="l00205"></a>00205         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;
-<a name="l00206"></a>00206         <span class="keywordflow">return</span> -1 ;
-<a name="l00207"></a>00207     }
-<a name="l00208"></a>00208     nframes = cpl_frameset_get_size(rawframes) ;
-<a name="l00209"></a>00209  
-<a name="l00210"></a>00210     <span class="comment">/* Load */</span>
-<a name="l00211"></a>00211     seds = cpl_malloc(nframes * <span class="keyword">sizeof</span>(cpl_bivector*)) ;
-<a name="l00212"></a>00212     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {
-<a name="l00213"></a>00213         cur_frame = cpl_frameset_get_frame(rawframes, i) ;
-<a name="l00214"></a>00214         <span class="keywordflow">if</span> ((seds[i] = cpl_bivector_read(cpl_frame_get_filename(cur_frame))) 
-<a name="l00215"></a>00215                 == NULL) {
-<a name="l00216"></a>00216             cpl_msg_error(__func__, <span class="stringliteral">"Cannot load the sed %d"</span>, i+1) ;
-<a name="l00217"></a>00217             <span class="keywordflow">for</span> (j=0 ; j<i ; j++) cpl_bivector_delete(seds[j]) ;
-<a name="l00218"></a>00218             cpl_free(seds) ;
-<a name="l00219"></a>00219             cpl_frameset_delete(rawframes) ;
-<a name="l00220"></a>00220             <span class="keywordflow">return</span> -1 ;
-<a name="l00221"></a>00221         }
-<a name="l00222"></a>00222     }
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     <span class="comment">/* Verify the length */</span>
-<a name="l00225"></a>00225     nlines = cpl_bivector_get_size(seds[0]) ;
-<a name="l00226"></a>00226     <span class="keywordflow">for</span> (i=1 ; i<nframes ; i++) {
-<a name="l00227"></a>00227         <span class="keywordflow">if</span> (cpl_bivector_get_size(seds[i]) != nlines) {
-<a name="l00228"></a>00228             cpl_msg_error(__func__, <span class="stringliteral">"Wrong SED size abort"</span>) ;
-<a name="l00229"></a>00229             <span class="keywordflow">for</span> (j=0 ; j<nframes ; j++) cpl_bivector_delete(seds[j]) ;
-<a name="l00230"></a>00230             cpl_free(seds) ;
-<a name="l00231"></a>00231             cpl_frameset_delete(rawframes) ;
-<a name="l00232"></a>00232             <span class="keywordflow">return</span> -1 ;
-<a name="l00233"></a>00233         }
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235     
-<a name="l00236"></a>00236     <span class="comment">/* Create the out table */</span>
-<a name="l00237"></a>00237     out = cpl_table_new(nlines) ;
-<a name="l00238"></a>00238     tmp_vec = cpl_vector_duplicate(cpl_bivector_get_x(seds[0])) ;
-<a name="l00239"></a>00239     cpl_table_wrap_double(out, cpl_vector_get_data(tmp_vec), <span class="stringliteral">"Wavelength"</span>) ;
-<a name="l00240"></a>00240     cpl_vector_unwrap(tmp_vec) ;
-<a name="l00241"></a>00241     
-<a name="l00242"></a>00242     <span class="comment">/* Fill the table */</span>
-<a name="l00243"></a>00243     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {
-<a name="l00244"></a>00244         <span class="comment">/* Create the column */</span>
-<a name="l00245"></a>00245         cur_frame = cpl_frameset_get_frame(rawframes, i) ;
-<a name="l00246"></a>00246         name = cpl_strdup(cpl_frame_get_filename(cur_frame)) ;
-<a name="l00247"></a>00247         name[3] = (char)0 ;
-<a name="l00248"></a>00248         tmp_vec = cpl_vector_duplicate(cpl_bivector_get_y(seds[i])) ;
-<a name="l00249"></a>00249         cpl_table_wrap_double(out, cpl_vector_get_data(tmp_vec), name) ;
-<a name="l00250"></a>00250         cpl_vector_unwrap(tmp_vec) ;
-<a name="l00251"></a>00251         cpl_free(name) ;
-<a name="l00252"></a>00252     }
-<a name="l00253"></a>00253     cpl_frameset_delete(rawframes) ;
-<a name="l00254"></a>00254     cpl_free(seds) ;
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* Save the table */</span>
-<a name="l00257"></a>00257     <span class="keywordflow">if</span> (sinfo_utl_seds_save(out, parlist, framelist) != 0) {
-<a name="l00258"></a>00258         cpl_msg_error(__func__, <span class="stringliteral">"Cannot create product"</span>) ;
-<a name="l00259"></a>00259         cpl_table_delete(out) ;
-<a name="l00260"></a>00260         <span class="keywordflow">return</span> -1 ;
-<a name="l00261"></a>00261     }
-<a name="l00262"></a>00262     
-<a name="l00263"></a>00263     <span class="comment">/* Free and return */</span>
-<a name="l00264"></a>00264     cpl_table_delete(out) ;
-<a name="l00265"></a>00265     <span class="keywordflow">return</span> 0 ;
-<a name="l00266"></a>00266 }
-<a name="l00267"></a>00267 
-<a name="l00268"></a>00268 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00276"></a>00276 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00277"></a>00277 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_save(
-<a name="l00278"></a>00278         cpl_table           *   sed,
-<a name="l00279"></a>00279         cpl_parameterlist   *   parlist,
-<a name="l00280"></a>00280         cpl_frameset        *   <span class="keyword">set</span>)
-<a name="l00281"></a>00281 {
-<a name="l00282"></a>00282     cpl_propertylist    *   plist ;
-<a name="l00283"></a>00283 
-<a name="l00284"></a>00284     <span class="comment">/* Some keywords  */</span>
-<a name="l00285"></a>00285     plist = cpl_propertylist_new() ;
-<a name="l00286"></a>00286     cpl_propertylist_append_string(plist, <span class="stringliteral">"INSTRUME"</span>, <span class="stringliteral">"SINFO"</span>) ;
-<a name="l00287"></a>00287  
-<a name="l00288"></a>00288     <span class="comment">/* Write the table */</span>
-<a name="l00289"></a>00289     cpl_dfs_save_table(<span class="keyword">set</span>,
-<a name="l00290"></a>00290             parlist,
-<a name="l00291"></a>00291             <span class="keyword">set</span>,
-<a name="l00292"></a>00292             sed,
-<a name="l00293"></a>00293             NULL,
-<a name="l00294"></a>00294             <span class="stringliteral">"sinfo_utl_seds"</span>,
-<a name="l00295"></a>00295             SINFO_UTL_SEDS_RES,
-<a name="l00296"></a>00296             plist,
-<a name="l00297"></a>00297             NULL,
-<a name="l00298"></a>00298             PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-<a name="l00299"></a>00299             <span class="stringliteral">"sinfo_utl_seds.fits"</span>) ;
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301     cpl_propertylist_delete(plist) ;
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303     <span class="keywordflow">return</span> 0 ;
-<a name="l00304"></a>00304 }
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_seds.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_seds.c,v 1.1 2008/06/11 13:42:20 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2008/06/11 13:42:20 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">#include "isaac_utils.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">#include "isaac_pfits.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">#include "isaac_dfs.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_save(cpl_table *, cpl_parameterlist *, </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         cpl_frameset *) ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_seds_description[] = </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"sinfo_utl_seds -- SINFONI SEDS table creation.\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"raw-file.fits "</span>SINFO_UTL_SEDS_RAW<span class="stringliteral">"\n"</span> ;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> {</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                     <span class="stringliteral">"sinfo_utl_seds"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                     <span class="stringliteral">"SEDS table creation"</span>,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     sinfo_utl_seds_description,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     <span class="stringliteral">"Yves Jung"</span>,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     <span class="stringliteral">"yjung at eso.org"</span>,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     sinfo_utl_seds_create,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     sinfo_utl_seds_exec,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     sinfo_utl_seds_destroy) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="keywordflow">return</span> sinfo_utl_seds(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> {</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> }</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds(</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_frame       *   cur_frame ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_frameset    *   rawframes ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordtype">int</span>                 nframes, nlines ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     cpl_table       *   out ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_bivector    **  seds ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordtype">char</span>            *   name ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cpl_vector      *   tmp_vec ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordtype">int</span>                 i, j ;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="comment">/* Retrieve raw frames */</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                     SINFO_UTL_SEDS_RAW)) == NULL) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     }</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     nframes = cpl_frameset_get_size(rawframes) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>  </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="comment">/* Load */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     seds = cpl_malloc(nframes * <span class="keyword">sizeof</span>(cpl_bivector*)) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         cur_frame = cpl_frameset_get_frame(rawframes, i) ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         <span class="keywordflow">if</span> ((seds[i] = cpl_bivector_read(cpl_frame_get_filename(cur_frame))) </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                 == NULL) {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             cpl_msg_error(__func__, <span class="stringliteral">"Cannot load the sed %d"</span>, i+1) ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>             <span class="keywordflow">for</span> (j=0 ; j<i ; j++) cpl_bivector_delete(seds[j]) ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>             cpl_free(seds) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>             cpl_frameset_delete(rawframes) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     }</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     <span class="comment">/* Verify the length */</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     nlines = cpl_bivector_get_size(seds[0]) ;</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keywordflow">for</span> (i=1 ; i<nframes ; i++) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>         <span class="keywordflow">if</span> (cpl_bivector_get_size(seds[i]) != nlines) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>             cpl_msg_error(__func__, <span class="stringliteral">"Wrong SED size abort"</span>) ;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>             <span class="keywordflow">for</span> (j=0 ; j<nframes ; j++) cpl_bivector_delete(seds[j]) ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>             cpl_free(seds) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>             cpl_frameset_delete(rawframes) ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="comment">/* Create the out table */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     out = cpl_table_new(nlines) ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     tmp_vec = cpl_vector_duplicate(cpl_bivector_get_x(seds[0])) ;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     cpl_table_wrap_double(out, cpl_vector_get_data(tmp_vec), <span class="stringliteral">"Wavelength"</span>) ;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     cpl_vector_unwrap(tmp_vec) ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="comment">/* Fill the table */</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordflow">for</span> (i=0 ; i<nframes ; i++) {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>         <span class="comment">/* Create the column */</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>         cur_frame = cpl_frameset_get_frame(rawframes, i) ;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         name = cpl_strdup(cpl_frame_get_filename(cur_frame)) ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>         name[3] = (char)0 ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         tmp_vec = cpl_vector_duplicate(cpl_bivector_get_y(seds[i])) ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         cpl_table_wrap_double(out, cpl_vector_get_data(tmp_vec), name) ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         cpl_vector_unwrap(tmp_vec) ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         cpl_free(name) ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     cpl_frameset_delete(rawframes) ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     cpl_free(seds) ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* Save the table */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">if</span> (sinfo_utl_seds_save(out, parlist, framelist) != 0) {</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot create product"</span>) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>         cpl_table_delete(out) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     }</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     <span class="comment">/* Free and return */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     cpl_table_delete(out) ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_seds_save(</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         cpl_table           *   sed,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         cpl_parameterlist   *   parlist,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         cpl_frameset        *   <span class="keyword">set</span>)</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span> {</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     cpl_propertylist    *   plist ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span> </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     <span class="comment">/* Some keywords  */</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     plist = cpl_propertylist_new() ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_propertylist_append_string(plist, <span class="stringliteral">"INSTRUME"</span>, <span class="stringliteral">"SINFO"</span>) ;</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>  </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="comment">/* Write the table */</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     cpl_dfs_save_table(<span class="keyword">set</span>,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>             parlist,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             <span class="keyword">set</span>,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>             sed,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>             NULL,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>             <span class="stringliteral">"sinfo_utl_seds"</span>,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>             SINFO_UTL_SEDS_RES,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>             plist,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>             NULL,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>             PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>             <span class="stringliteral">"sinfo_utl_seds.fits"</span>) ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     cpl_propertylist_delete(plist) ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> }</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__skycor_8c_source.html b/html/sinfo__utl__skycor_8c_source.html
index 687f47c..9c9d29c 100644
--- a/html/sinfo__utl__skycor_8c_source.html
+++ b/html/sinfo__utl__skycor_8c_source.html
@@ -2,338 +2,369 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_skycor.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_skycor.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_skycor.c,v 1.13 2007/10/26 09:40:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2007/10/26 09:40:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_skycor.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <sinfo_skycor_config.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_pro_save.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00048"></a>00048 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                                Defines</span>
-<a name="l00050"></a>00050 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                            Functions prototypes</span>
-<a name="l00054"></a>00054 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_create(cpl_plugin *) ;
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_exec(cpl_plugin *) ;
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_destroy(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor(cpl_parameterlist * config, cpl_frameset* <span class="keyword">set</span>);
-<a name="l00059"></a>00059 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00060"></a>00060 <span class="comment">                            Static variables</span>
-<a name="l00061"></a>00061 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_skycor_description[] =
-<a name="l00064"></a>00064 <span class="stringliteral">"This recipe perform a correction of possible sky line residuals in the \n"</span>
-<a name="l00065"></a>00065 <span class="stringliteral">"object cube after standard data reduction.\n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"Input frames are cubes with target and sky observations.\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"Their tags can be respectively OBS_OBJ (or OBS_PSF or OBS_STD) and OBS_SKY.\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"The output is a cube with same tag as the corresponding input target frame.\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"\n"</span>;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                                Functions code</span>
-<a name="l00074"></a>00074 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a><a class="code" href="group__sinfo__utl__skycor.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00091</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00092"></a>00092 {
-<a name="l00093"></a>00093     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00094"></a>00094     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096     cpl_plugin_init(plugin,
-<a name="l00097"></a>00097                     CPL_PLUGIN_API,
-<a name="l00098"></a>00098                     SINFONI_BINARY_VERSION,
-<a name="l00099"></a>00099                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00100"></a>00100                     <span class="stringliteral">"sinfo_utl_skycor"</span>,
-<a name="l00101"></a>00101                     <span class="stringliteral">"Sky lines residuals correction"</span>,
-<a name="l00102"></a>00102                     sinfo_utl_skycor_description,
-<a name="l00103"></a>00103                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00104"></a>00104                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00105"></a>00105                     sinfo_get_license(),
-<a name="l00106"></a>00106                     sinfo_utl_skycor_create,
-<a name="l00107"></a>00107                     sinfo_utl_skycor_exec,
-<a name="l00108"></a>00108                     sinfo_utl_skycor_destroy) ;
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110     cpl_pluginlist_append(list, plugin) ;
-<a name="l00111"></a>00111     <span class="keywordflow">return</span> 0;
-<a name="l00112"></a>00112 }
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00123"></a>00123 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00124"></a>00124 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_create(cpl_plugin * plugin)
-<a name="l00125"></a>00125 {
-<a name="l00126"></a>00126     cpl_recipe      * recipe ;
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00130"></a>00130         recipe = (cpl_recipe *)plugin ;
-<a name="l00131"></a>00131     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133     <span class="comment">/* reset error handling */</span>
-<a name="l00134"></a>00134     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00135"></a>00135     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00136"></a>00136     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00137"></a>00137     sinfo_skycor_config_add(recipe->parameters);
-<a name="l00138"></a>00138   
-<a name="l00139"></a>00139     <span class="comment">/* Return */</span>
-<a name="l00140"></a>00140     <span class="keywordflow">return</span> 0;
-<a name="l00141"></a>00141 }
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00150"></a>00150 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_exec(cpl_plugin * plugin)
-<a name="l00151"></a>00151 {
-<a name="l00152"></a>00152     cpl_recipe  *   recipe ;
-<a name="l00153"></a>00153     <span class="keywordtype">int</span> code=0;
-<a name="l00154"></a>00154     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00155"></a>00155     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00158"></a>00158         recipe = (cpl_recipe *)plugin ;
-<a name="l00159"></a>00159     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     code = sinfo_utl_skycor(recipe->parameters, recipe->frames) ;
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00165"></a>00165         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00166"></a>00166 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00167"></a>00167         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00168"></a>00168     } 
-<a name="l00169"></a>00169     <span class="keywordflow">return</span> code;
-<a name="l00170"></a>00170 }
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00178"></a>00178 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00179"></a>00179 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_destroy(cpl_plugin * plugin)
-<a name="l00180"></a>00180 {
-<a name="l00181"></a>00181     cpl_recipe  *   recipe ;
-<a name="l00182"></a>00182     
-<a name="l00183"></a>00183     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00185"></a>00185         recipe = (cpl_recipe *)plugin ;
-<a name="l00186"></a>00186     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00187"></a>00187 
-<a name="l00188"></a>00188     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00189"></a>00189     <span class="keywordflow">return</span> 0 ;
-<a name="l00190"></a>00190 }
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192 
-<a name="l00199"></a>00199 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00200"></a>00200 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00201"></a>00201 sinfo_utl_skycor(cpl_parameterlist * config, cpl_frameset* <span class="keyword">set</span>)
-<a name="l00202"></a>00202 {
-<a name="l00203"></a>00203  
-<a name="l00204"></a>00204   cpl_frame* obj_frm=NULL;
-<a name="l00205"></a>00205   cpl_frame* sky_frm=NULL;
-<a name="l00206"></a>00206   cpl_imagelist* obj_cor=NULL;
-<a name="l00207"></a>00207   <span class="keyword">const</span> <span class="keywordtype">char</span> *   name_o=NULL ;
-<a name="l00208"></a>00208   cpl_frame* product_frame=NULL;
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210   cpl_propertylist* plist=NULL;
-<a name="l00211"></a>00211   sinfo_skycor_qc* sqc=NULL;
-<a name="l00212"></a>00212   <span class="keywordtype">char</span> obj_tag[MAX_NAME_SIZE];
-<a name="l00213"></a>00213   cpl_table* int_obj=NULL;
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00216"></a>00216         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222   <span class="comment">// get input data </span>
-<a name="l00223"></a>00223     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_OBJ);
-<a name="l00224"></a>00224   <span class="keywordflow">if</span>(obj_frm == NULL) {
-<a name="l00225"></a>00225     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_PSF);
-<a name="l00226"></a>00226     strcpy(obj_tag,PRO_OBS_PSF);
-<a name="l00227"></a>00227   } <span class="keywordflow">else</span> {
-<a name="l00228"></a>00228     strcpy(obj_tag,PRO_OBS_OBJ);
-<a name="l00229"></a>00229   }
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232   <span class="keywordflow">if</span>(obj_frm == NULL) {
-<a name="l00233"></a>00233     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_STD);
-<a name="l00234"></a>00234     strcpy(obj_tag,PRO_OBS_STD);
-<a name="l00235"></a>00235   }
-<a name="l00236"></a>00236   cknull(obj_frm,<span class="stringliteral">"No %s or %s or %s frame found"</span>,
-<a name="l00237"></a>00237      PRO_OBS_OBJ,PRO_OBS_PSF,PRO_OBS_STD);
-<a name="l00238"></a>00238   check(sky_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_SKY),
-<a name="l00239"></a>00239         <span class="stringliteral">"No %s found"</span>,PRO_OBS_SKY);
-<a name="l00240"></a>00240   sqc=sinfo_skycor_qc_new();
-<a name="l00241"></a>00241 
-<a name="l00242"></a>00242   check(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0),
-<a name="l00243"></a>00243           <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00244"></a>00244  
-<a name="l00245"></a>00245   ck0(sinfo_skycor(config, obj_frm,sky_frm,sqc,&obj_cor,&int_obj),
-<a name="l00246"></a>00246      <span class="stringliteral">"determining sky residuals corrected object"</span>);
-<a name="l00247"></a>00247   sinfo_msg(<span class="stringliteral">"Write out adjusted cube"</span>);
-<a name="l00248"></a>00248   <span class="comment">/* Set the file name */</span>
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250   cpl_frameset_erase(<span class="keyword">set</span>,obj_tag);
-<a name="l00251"></a>00251   cpl_frameset_erase(<span class="keyword">set</span>,PRO_OBS_SKY);
-<a name="l00252"></a>00252   name_o = <span class="stringliteral">"out_obj_cor.fits"</span> ;
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255   <span class="comment">/* Create product frame */</span>
-<a name="l00256"></a>00256   check_nomsg(product_frame = cpl_frame_new());
-<a name="l00257"></a>00257   check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00258"></a>00258   check_nomsg(cpl_frame_set_tag(product_frame, obj_tag)) ;
-<a name="l00259"></a>00259   check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00260"></a>00260   check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00261"></a>00261   check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00262"></a>00262         <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00263"></a>00263   <span class="comment">// Add DataFlow keywords </span>
-<a name="l00264"></a>00264 
-<a name="l00265"></a>00265     <span class="comment">/*</span>
-<a name="l00266"></a>00266 <span class="comment">    check(plist=cpl_propertylist_load(name_o,0),</span>
-<a name="l00267"></a>00267 <span class="comment">          "Cannot read the FITS header") ;</span>
-<a name="l00268"></a>00268 <span class="comment">    check_nomsg(cpl_propertylist_erase_regexp(plist, "^ESO PRO CATG",0));</span>
-<a name="l00269"></a>00269 <span class="comment">    check(cpl_dfs_setup_product_header(plist, </span>
-<a name="l00270"></a>00270 <span class="comment">                                       product_frame, </span>
-<a name="l00271"></a>00271 <span class="comment">                                       set, </span>
-<a name="l00272"></a>00272 <span class="comment">                                       parlist,</span>
-<a name="l00273"></a>00273 <span class="comment">                                       "sinfo_utl_skycor", </span>
-<a name="l00274"></a>00274 <span class="comment">                                       "SINFONI", </span>
-<a name="l00275"></a>00275 <span class="comment">                                       KEY_VALUE_HPRO_DID),</span>
-<a name="l00276"></a>00276 <span class="comment">        "Problem in the product DFS-compliance") ;</span>
-<a name="l00277"></a>00277 <span class="comment">    */</span>
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279   <span class="comment">//save the file </span>
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281   check(cpl_imagelist_save(obj_cor, 
-<a name="l00282"></a>00282                name_o,
-<a name="l00283"></a>00283                CPL_BPP_IEEE_FLOAT, 
-<a name="l00284"></a>00284                plist,
-<a name="l00285"></a>00285                CPL_IO_DEFAULT),
-<a name="l00286"></a>00286     <span class="stringliteral">"Could not save product"</span>);
-<a name="l00287"></a>00287   <span class="comment">// Log the saved file in the input frameset </span>
-<a name="l00288"></a>00288   check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(product_frame))) ;
-<a name="l00289"></a>00289   sinfo_free_frame(&product_frame);
-<a name="l00290"></a>00290   <span class="comment">/*</span>
-<a name="l00291"></a>00291 <span class="comment">  ck0(sinfo_pro_save_ims(obj_cor,set,set,"out_obj_cor.fits",</span>
-<a name="l00292"></a>00292 <span class="comment">             PRO_OBS_OBJ,NULL,cpl_func,config),</span>
-<a name="l00293"></a>00293 <span class="comment">      "cannot dump cube %s", "obj_cub.fits");</span>
-<a name="l00294"></a>00294 <span class="comment">  */</span>
-<a name="l00295"></a>00295     
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297 
-<a name="l00298"></a>00298 
-<a name="l00299"></a>00299   sinfo_free_imagelist(&obj_cor);
-<a name="l00300"></a>00300 
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303   name_o = <span class="stringliteral">"out_obj_int.fits"</span> ;
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   <span class="comment">/* Create product frame */</span>
-<a name="l00306"></a>00306   check_nomsg(product_frame = cpl_frame_new());
-<a name="l00307"></a>00307   check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00308"></a>00308   check_nomsg(cpl_frame_set_tag(product_frame, PRO_SPECTRA_QC)) ;
-<a name="l00309"></a>00309   check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;
-<a name="l00310"></a>00310   check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00311"></a>00311   check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00312"></a>00312       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00313"></a>00313   check_nomsg(cpl_propertylist_update_string(plist, <span class="stringliteral">"ESO PRO CATG"</span>,
-<a name="l00314"></a>00314               PRO_SPECTRA_QC));
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00318"></a>00318     <span class="comment">/*    </span>
-<a name="l00319"></a>00319 <span class="comment">    check(plist=cpl_propertylist_load(name_o,0),</span>
-<a name="l00320"></a>00320 <span class="comment">          "Cannot read the FITS header") ;</span>
-<a name="l00321"></a>00321 <span class="comment"></span>
-<a name="l00322"></a>00322 <span class="comment">    check_nomsg(cpl_propertylist_erase_regexp(plist, "^ESO PRO CATG",0));</span>
-<a name="l00323"></a>00323 <span class="comment">    check(cpl_dfs_setup_product_header(plist, </span>
-<a name="l00324"></a>00324 <span class="comment">                                       product_frame, </span>
-<a name="l00325"></a>00325 <span class="comment">                                       set, </span>
-<a name="l00326"></a>00326 <span class="comment">                                       parlist,</span>
-<a name="l00327"></a>00327 <span class="comment">                                       "sinfo_utl_skycor", </span>
-<a name="l00328"></a>00328 <span class="comment">                                       "SINFONI", </span>
-<a name="l00329"></a>00329 <span class="comment">                                       KEY_VALUE_HPRO_DID),</span>
-<a name="l00330"></a>00330 <span class="comment">      "Problem in the product DFS-compliance") ;</span>
-<a name="l00331"></a>00331 <span class="comment">    */</span>
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333     <span class="comment">/* Save the file */</span>
-<a name="l00334"></a>00334     check(cpl_table_save(int_obj, plist, NULL, name_o, 0),
-<a name="l00335"></a>00335       <span class="stringliteral">"Could not save product"</span>);
-<a name="l00336"></a>00336     sinfo_free_propertylist(&plist) ;
-<a name="l00337"></a>00337  
-<a name="l00338"></a>00338     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00339"></a>00339     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>, cpl_frame_duplicate(product_frame))) ;
-<a name="l00340"></a>00340   sinfo_free_frame(&product_frame);
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344 
-<a name="l00345"></a>00345  cleanup:
-<a name="l00346"></a>00346   sinfo_free_imagelist(&obj_cor);
-<a name="l00347"></a>00347   sinfo_free_table(&int_obj);
-<a name="l00348"></a>00348   sinfo_skycor_qc_delete(&sqc);
-<a name="l00349"></a>00349   sinfo_free_propertylist(&plist);
-<a name="l00350"></a>00350   sinfo_free_frame(&product_frame);
-<a name="l00351"></a>00351   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00352"></a>00352     <span class="keywordflow">return</span> -1;
-<a name="l00353"></a>00353   } <span class="keywordflow">else</span> {
-<a name="l00354"></a>00354     <span class="keywordflow">return</span> 0;
-<a name="l00355"></a>00355   }
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_skycor.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_skycor.c,v 1.14 2013/09/09 15:23:10 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/09/09 15:23:10 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.14 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_skycor.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <sinfo_skycor_config.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_pro_save.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                                Defines</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor(cpl_parameterlist * config, cpl_frameset* <span class="keyword">set</span>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_skycor_description[] =</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="stringliteral">"This recipe perform a correction of possible sky line residuals in the \n"</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"object cube after standard data reduction.\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"Input frames are cubes with target and sky observations.\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"Their tags can be respectively OBS_OBJ (or OBS_PSF or OBS_STD) and OBS_SKY.\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"The output is a cube with same tag as the corresponding input target frame.\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"><a class="code" href="group__sinfo__utl__skycor.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   91</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     <span class="stringliteral">"sinfo_utl_skycor"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     <span class="stringliteral">"Sky lines residuals correction"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     sinfo_utl_skycor_description,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     sinfo_utl_skycor_create,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     sinfo_utl_skycor_exec,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     sinfo_utl_skycor_destroy) ;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="comment">/* reset error handling */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     sinfo_skycor_config_add(recipe->parameters);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>   </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     code = sinfo_utl_skycor(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     } </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">return</span> code;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> }</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skycor_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> {</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> sinfo_utl_skycor(cpl_parameterlist * config, cpl_frameset* <span class="keyword">set</span>)</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>  </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>   cpl_frame* obj_frm=NULL;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   cpl_frame* sky_frm=NULL;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>   cpl_imagelist* obj_cor=NULL;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>   <span class="keyword">const</span> <span class="keywordtype">char</span> *   name_o=NULL ;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>   cpl_frame* product_frame=NULL;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>   sinfo_skycor_qc* sqc=NULL;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>   <span class="keywordtype">char</span> obj_tag[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   cpl_table* int_obj=NULL;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>   ck0(sinfo_dfs_set_groups(<span class="keyword">set</span>),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>   <span class="comment">// get input data </span></div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>   <span class="keywordflow">if</span>(obj_frm == NULL) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     strcpy(obj_tag,PRO_OBS_PSF);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     strcpy(obj_tag,PRO_OBS_OBJ);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>   }</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>   <span class="keywordflow">if</span>(obj_frm == NULL) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     obj_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_STD);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     strcpy(obj_tag,PRO_OBS_STD);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>   }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   cknull(obj_frm,<span class="stringliteral">"No %s or %s or %s frame found"</span>,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>      PRO_OBS_OBJ,PRO_OBS_PSF,PRO_OBS_STD);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>   check(sky_frm=cpl_frameset_find(<span class="keyword">set</span>,PRO_OBS_SKY),</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         <span class="stringliteral">"No %s found"</span>,PRO_OBS_SKY);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   sqc=sinfo_skycor_qc_new();</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>   check(plist=cpl_propertylist_load(cpl_frame_get_filename(obj_frm),0),</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>           <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>  </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>   ck0(sinfo_skycor(config, obj_frm,sky_frm,sqc,&obj_cor,&int_obj),</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>      <span class="stringliteral">"determining sky residuals corrected object"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   sinfo_msg(<span class="stringliteral">"Write out adjusted cube"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>   cpl_frameset_erase(<span class="keyword">set</span>,obj_tag);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>   cpl_frameset_erase(<span class="keyword">set</span>,PRO_OBS_SKY);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   name_o = <span class="stringliteral">"out_obj_cor.fits"</span> ;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>   <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>   check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>   check_nomsg(cpl_frame_set_tag(product_frame, obj_tag)) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>   check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>   check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>         <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>   <span class="comment">// Add DataFlow keywords </span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span> </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> <span class="comment">    check(plist=cpl_propertylist_load(name_o,0),</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> <span class="comment">          "Cannot read the FITS header") ;</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">    check_nomsg(cpl_propertylist_erase_regexp(plist, "^ESO PRO CATG",0));</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> <span class="comment">    check(cpl_dfs_setup_product_header(plist, </span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> <span class="comment">                                       product_frame, </span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">                                       set, </span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span> <span class="comment">                                       parlist,</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">                                       "sinfo_utl_skycor", </span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span> <span class="comment">                                       "SINFONI", </span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> <span class="comment">                                       KEY_VALUE_HPRO_DID),</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> <span class="comment">        "Problem in the product DFS-compliance") ;</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>   <span class="comment">//save the file </span></div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   check(cpl_imagelist_save(obj_cor, </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                name_o,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                plist,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>   <span class="comment">// Log the saved file in the input frameset </span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>   check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>,cpl_frame_duplicate(product_frame))) ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   sinfo_free_frame(&product_frame);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> <span class="comment">  ck0(sinfo_pro_save_ims(obj_cor,set,set,"out_obj_cor.fits",</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">             PRO_OBS_OBJ,NULL,cpl_func,config),</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">      "cannot dump cube %s", "obj_cub.fits");</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span> </div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>   sinfo_free_imagelist(&obj_cor);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   name_o = <span class="stringliteral">"out_obj_int.fits"</span> ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   check_nomsg(cpl_frame_set_tag(product_frame, PRO_SPECTRA_QC)) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   check_nomsg(cpl_propertylist_update_string(plist, <span class="stringliteral">"ESO PRO CATG"</span>,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>               PRO_SPECTRA_QC));</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="comment">/*    </span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">    check(plist=cpl_propertylist_load(name_o,0),</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">          "Cannot read the FITS header") ;</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment"></span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">    check_nomsg(cpl_propertylist_erase_regexp(plist, "^ESO PRO CATG",0));</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">    check(cpl_dfs_setup_product_header(plist, </span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">                                       product_frame, </span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">                                       set, </span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> <span class="comment">                                       parlist,</span></div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> <span class="comment">                                       "sinfo_utl_skycor", </span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span> <span class="comment">                                       "SINFONI", </span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="comment">                                       KEY_VALUE_HPRO_DID),</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="comment">      "Problem in the product DFS-compliance") ;</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     check(cpl_table_save(int_obj, plist, NULL, name_o,CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>       <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>  </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     check_nomsg(cpl_frameset_insert(<span class="keyword">set</span>, cpl_frame_duplicate(product_frame))) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   sinfo_free_frame(&product_frame);</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>  cleanup:</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   sinfo_free_imagelist(&obj_cor);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   sinfo_free_table(&int_obj);</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   sinfo_skycor_qc_delete(&sqc);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   sinfo_free_frame(&product_frame);</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   }</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__skymap_8c_source.html b/html/sinfo__utl__skymap_8c_source.html
index a521391..6e06652 100644
--- a/html/sinfo__utl__skymap_8c_source.html
+++ b/html/sinfo__utl__skymap_8c_source.html
@@ -2,420 +2,451 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_skymap.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_skymap.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_skymap.c,v 1.13 2009/01/30 14:56:12 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.13 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="comment">/* irplib */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/* sinfoni */</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_raw_types.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                            Functions prototypes</span>
-<a name="l00054"></a>00054 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_create(cpl_plugin *) ;
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_exec(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_destroy(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                            Static variables</span>
-<a name="l00062"></a>00062 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_skymap_description[] =
-<a name="l00065"></a>00065 <span class="stringliteral">"This recipe flags as bad pixels sky lines.\n"</span>
-<a name="l00066"></a>00066 <span class="stringliteral">"Input are sky frames with tag SKY\n"</span>
-<a name="l00067"></a>00067 <span class="stringliteral">"Output image is called out_skymap.fits\n"</span>
-<a name="l00068"></a>00068 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"esorex --params sinfo_utl_skymap\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"esorex --help sinfo_utl_skymap\n"</span>
-<a name="l00071"></a>00071 <span class="stringliteral">"\n"</span>;
-<a name="l00072"></a>00072 
-<a name="l00073"></a>00073 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00074"></a>00074 <span class="comment">                                Functions code</span>
-<a name="l00075"></a>00075 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00076"></a>00076 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00080"></a>00080 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 
-<a name="l00083"></a>00083 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00092"></a><a class="code" href="group__sinfo__utl__skymap.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00092</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00095"></a>00095     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     cpl_plugin_init(plugin,
-<a name="l00098"></a>00098                     CPL_PLUGIN_API,
-<a name="l00099"></a>00099                     SINFONI_BINARY_VERSION,
-<a name="l00100"></a>00100                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00101"></a>00101                     <span class="stringliteral">"sinfo_utl_skymap"</span>,
-<a name="l00102"></a>00102                     <span class="stringliteral">"Flags sky lines as bad pixels, with map generation"</span>,
-<a name="l00103"></a>00103                     sinfo_utl_skymap_description,
-<a name="l00104"></a>00104                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00105"></a>00105                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00106"></a>00106                     sinfo_get_license(),
-<a name="l00107"></a>00107                     sinfo_utl_skymap_create,
-<a name="l00108"></a>00108                     sinfo_utl_skymap_exec,
-<a name="l00109"></a>00109                     sinfo_utl_skymap_destroy) ;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     cpl_pluginlist_append(list, plugin) ;
-<a name="l00112"></a>00112     
-<a name="l00113"></a>00113     <span class="keywordflow">return</span> 0;
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_create(cpl_plugin * plugin)
-<a name="l00127"></a>00127 {
-<a name="l00128"></a>00128     cpl_recipe      * recipe ;
-<a name="l00129"></a>00129     cpl_parameter   * p ;
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00132"></a>00132     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00133"></a>00133         recipe = (cpl_recipe *)plugin ;
-<a name="l00134"></a>00134     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00135"></a>00135 
-<a name="l00136"></a>00136     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00137"></a>00137     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142     <span class="comment">/* --doubleopt */</span>
-<a name="l00143"></a>00143     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.xsize"</span>, 
-<a name="l00144"></a>00144             CPL_TYPE_INT, <span class="stringliteral">"X box size"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 1,1,2047) ;
-<a name="l00145"></a>00145     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;
-<a name="l00146"></a>00146     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     <span class="comment">/* --doubleopt */</span>
-<a name="l00149"></a>00149     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.ysize"</span>, 
-<a name="l00150"></a>00150             CPL_TYPE_INT, <span class="stringliteral">"Y box size"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 30,1,2047) ;
-<a name="l00151"></a>00151     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;
-<a name="l00152"></a>00152     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="comment">/* --doubleopt */</span>
-<a name="l00157"></a>00157     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.threshold"</span>, 
-<a name="l00158"></a>00158             CPL_TYPE_DOUBLE, <span class="stringliteral">"Threshold"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 30.) ;
-<a name="l00159"></a>00159     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"thresh"</span>) ;
-<a name="l00160"></a>00160     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00161"></a>00161 
-<a name="l00162"></a>00162     <span class="comment">/* Return */</span>
-<a name="l00163"></a>00163     <span class="keywordflow">return</span> 0;
-<a name="l00164"></a>00164 }
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00172"></a>00172 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_exec(cpl_plugin * plugin)
-<a name="l00174"></a>00174 {
-<a name="l00175"></a>00175     cpl_recipe  *   recipe ;
-<a name="l00176"></a>00176     <span class="keywordtype">int</span> code=0;
-<a name="l00177"></a>00177     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00180"></a>00180     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00181"></a>00181         recipe = (cpl_recipe *)plugin ;
-<a name="l00182"></a>00182     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00183"></a>00183     cpl_error_reset();
-<a name="l00184"></a>00184     <span class="comment">//irplib_reset();</span>
-<a name="l00185"></a>00185     check_nomsg(code = sinfo_utl_skymap(recipe->parameters, recipe->frames)) ;
-<a name="l00186"></a>00186     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00187"></a>00187         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00188"></a>00188 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00189"></a>00189         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00190"></a>00190     } 
-<a name="l00191"></a>00191   cleanup:
-<a name="l00192"></a>00192     <span class="keywordflow">return</span> code ;
-<a name="l00193"></a>00193 }
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00201"></a>00201 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00202"></a>00202 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_destroy(cpl_plugin * plugin)
-<a name="l00203"></a>00203 {
-<a name="l00204"></a>00204     cpl_recipe  *   recipe ;
-<a name="l00205"></a>00205     
-<a name="l00206"></a>00206     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00207"></a>00207     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00208"></a>00208         recipe = (cpl_recipe *)plugin ;
-<a name="l00209"></a>00209     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00212"></a>00212     <span class="keywordflow">return</span> 0 ;
-<a name="l00213"></a>00213 }
-<a name="l00214"></a>00214 
-<a name="l00215"></a>00215 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap(
-<a name="l00216"></a>00216         cpl_parameterlist   *   parlist, 
-<a name="l00217"></a>00217         cpl_frameset        *   framelist)
-<a name="l00218"></a>00218 {
-<a name="l00219"></a>00219     cpl_parameter       *   param =NULL;
-<a name="l00220"></a>00220     <span class="keyword">const</span> <span class="keywordtype">char</span> *            name_i=NULL;
-<a name="l00221"></a>00221     <span class="keywordtype">int</span>                    xsize=0;
-<a name="l00222"></a>00222     <span class="keywordtype">int</span>                    ysize=0;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224     cpl_frame           *   sky_frm=NULL;
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o=NULL ;
-<a name="l00227"></a>00227     cpl_propertylist    *   plist =NULL;
-<a name="l00228"></a>00228     cpl_frame           *   product_frame=NULL;
-<a name="l00229"></a>00229     cpl_frameset        *   sky_set=NULL;
-<a name="l00230"></a>00230     cpl_image           *   sky_ima=NULL;
-<a name="l00231"></a>00231     cpl_image           *   sky_map=NULL;
-<a name="l00232"></a>00232     <span class="keywordtype">double</span> threshold=0;
-<a name="l00233"></a>00233     <span class="keywordtype">int</span> i=0;
-<a name="l00234"></a>00234     <span class="keywordtype">int</span> j=0;
-<a name="l00235"></a>00235     <span class="keywordtype">double</span> sinfo_median=0;
-<a name="l00236"></a>00236     <span class="keywordtype">float</span>* sky_ima_pix=NULL;
-<a name="l00237"></a>00237     <span class="keywordtype">float</span>* sky_map_pix=NULL;
-<a name="l00238"></a>00238     <span class="keywordtype">int</span> nx=0;
-<a name="l00239"></a>00239     <span class="keywordtype">int</span> ny=0;
-<a name="l00240"></a>00240     <span class="keywordtype">int</span> n=0;
-<a name="l00241"></a>00241   
-<a name="l00242"></a>00242     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00243"></a>00243     <span class="comment">/* --stropt */</span>
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00246"></a>00246         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     param = cpl_parameterlist_find(parlist, 
-<a name="l00249"></a>00249                                    <span class="stringliteral">"sinfoni.sinfo_utl_skymap.out_filename"</span>);
-<a name="l00250"></a>00250     name_o = <span class="stringliteral">"out_skymap.fits"</span>;
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252     <span class="comment">/* --intopt */</span>
-<a name="l00253"></a>00253     param = cpl_parameterlist_find(parlist,<span class="stringliteral">"sinfoni.sinfo_utl_skymap.xsize"</span>);
-<a name="l00254"></a>00254     xsize = cpl_parameter_get_int(param) ;
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* --intopt */</span>
-<a name="l00257"></a>00257     param = cpl_parameterlist_find(parlist,<span class="stringliteral">"sinfoni.sinfo_utl_skymap.ysize"</span>);
-<a name="l00258"></a>00258     ysize = cpl_parameter_get_int(param) ;
-<a name="l00259"></a>00259   
-<a name="l00260"></a>00260     param = cpl_parameterlist_find(parlist,
-<a name="l00261"></a>00261                    <span class="stringliteral">"sinfoni.sinfo_utl_skymap.threshold"</span>);
-<a name="l00262"></a>00262     threshold = cpl_parameter_get_double(param) ;
-<a name="l00263"></a>00263  
-<a name="l00264"></a>00264     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00265"></a>00265     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {
-<a name="l00266"></a>00266         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00267"></a>00267         <span class="keywordflow">return</span> -1 ;
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269     
-<a name="l00270"></a>00270     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00271"></a>00271     n=cpl_frameset_get_size(framelist);
-<a name="l00272"></a>00272     <span class="keywordflow">if</span>(n<1) {
-<a name="l00273"></a>00273       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00274"></a>00274       <span class="keywordflow">return</span> -1;
-<a name="l00275"></a>00275     }
-<a name="l00276"></a>00276     sky_set=cpl_frameset_new();
-<a name="l00277"></a>00277     sinfo_extract_frames_type(framelist,sky_set,RAW_SKY);
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279     n=cpl_frameset_get_size(framelist);
-<a name="l00280"></a>00280     <span class="keywordflow">if</span>(n<1) {
-<a name="l00281"></a>00281       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No sky frames in input list!"</span>);
-<a name="l00282"></a>00282       sinfo_free_frameset(&sky_set);
-<a name="l00283"></a>00283       <span class="keywordflow">return</span> -1;
-<a name="l00284"></a>00284     }
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     check_nomsg(sky_frm = cpl_frameset_get_frame(sky_set,0));
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289    <span class="keywordflow">if</span> ((plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm), 
-<a name="l00290"></a>00290                     0)) == NULL) {
-<a name="l00291"></a>00291         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00292"></a>00292         <span class="keywordflow">return</span> -1 ;
-<a name="l00293"></a>00293     }
-<a name="l00294"></a>00294   
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296     name_i=cpl_frame_get_filename(sky_frm);
-<a name="l00297"></a>00297     sky_ima = cpl_image_load(name_i,CPL_TYPE_FLOAT,0,0);
-<a name="l00298"></a>00298     sky_map=cpl_image_duplicate(sky_ima);
-<a name="l00299"></a>00299     sky_ima_pix=cpl_image_get_data(sky_ima);
-<a name="l00300"></a>00300     sky_map_pix=cpl_image_get_data(sky_map);
-<a name="l00301"></a>00301     nx = cpl_image_get_size_x(sky_ima);
-<a name="l00302"></a>00302     ny = cpl_image_get_size_y(sky_ima);
-<a name="l00303"></a>00303     <span class="keywordflow">if</span> (nx != SIZEX || ny != SIZEY) {
-<a name="l00304"></a>00304        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"nx=%d ny=%d, expected nx=%d ny=%d"</span>,nx,ny,SIZEX,SIZEY);
-<a name="l00305"></a>00305        <span class="keywordflow">goto</span> cleanup;
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     }
-<a name="l00308"></a>00308     <span class="keywordflow">for</span>(i=1;i<nx;i++) {
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310        <span class="keywordflow">for</span>(j=ysize+1;j<ny-ysize;j++) {
-<a name="l00311"></a>00311 
-<a name="l00312"></a>00312           sinfo_median=cpl_image_get_median_window(sky_ima,i,j-ysize,i,j+xsize);
-<a name="l00313"></a>00313           <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00314"></a>00314              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Exit"</span>);
-<a name="l00315"></a>00315              sinfo_free_image(&sky_ima);
-<a name="l00316"></a>00316              sinfo_free_image(&sky_map);
-<a name="l00317"></a>00317              sinfo_free_propertylist(&plist);
-<a name="l00318"></a>00318              sinfo_free_frameset(&sky_set);
-<a name="l00319"></a>00319              <span class="keywordflow">return</span> -1;
-<a name="l00320"></a>00320       }
-<a name="l00321"></a>00321       <span class="keywordflow">if</span>(sky_ima_pix[i+j*nx] > sinfo_median+threshold) {
-<a name="l00322"></a>00322         sky_map_pix[i+j*nx]=0.;
-<a name="l00323"></a>00323       } <span class="keywordflow">else</span> {
-<a name="l00324"></a>00324         sky_map_pix[i+j*nx]=1.;
-<a name="l00325"></a>00325       }
-<a name="l00326"></a>00326        }
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328     }
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330 
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332     <span class="keywordflow">for</span>(i=1;i<nx;i++) {
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334        <span class="keywordflow">for</span>(j=0;j<ysize+1;j++) {
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336              sky_map_pix[i+j*nx]=0.;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338        }
-<a name="l00339"></a>00339 
-<a name="l00340"></a>00340        <span class="keywordflow">for</span>(j=ny-ysize+1;j<ny;j++) {
-<a name="l00341"></a>00341 
-<a name="l00342"></a>00342              sky_map_pix[i+j*nx]=0.;
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344        }
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346     }
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00351"></a>00351     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     
-<a name="l00355"></a>00355     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00356"></a>00356     <span class="comment">/* Set the file name */</span>
-<a name="l00357"></a>00357     name_o = <span class="stringliteral">"sky_map.fits"</span> ;
-<a name="l00358"></a>00358 
-<a name="l00359"></a>00359     <span class="comment">/* Create product frame */</span>
-<a name="l00360"></a>00360     product_frame = cpl_frame_new();
-<a name="l00361"></a>00361     cpl_frame_set_filename(product_frame, name_o) ;
-<a name="l00362"></a>00362     cpl_frame_set_tag(product_frame, PRO_SKY_DUMMY) ;
-<a name="l00363"></a>00363     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
-<a name="l00364"></a>00364     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
-<a name="l00365"></a>00365     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
-<a name="l00366"></a>00366 
-<a name="l00367"></a>00367     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00368"></a>00368         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00369"></a>00369         sinfo_free_propertylist(&plist) ;
-<a name="l00370"></a>00370         sinfo_free_frame(&product_frame) ;
-<a name="l00371"></a>00371         <span class="keywordflow">return</span> -1 ;
-<a name="l00372"></a>00372     }
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00375"></a>00375 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)     </span>
-<a name="l00376"></a>00376 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,
-<a name="l00377"></a>00377                      <span class="stringliteral">"sinfo_utl_skymap"</span>, 
-<a name="l00378"></a>00378                      <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL) 
-<a name="l00379"></a>00379     != CPL_ERROR_NONE) {
-<a name="l00380"></a>00380         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00381"></a>00381         sinfo_free_propertylist(&plist) ;
-<a name="l00382"></a>00382         sinfo_free_frame(&product_frame) ;
-<a name="l00383"></a>00383         sinfo_free_image(&sky_ima);
-<a name="l00384"></a>00384         sinfo_free_image(&sky_map);
-<a name="l00385"></a>00385         sinfo_free_frameset(&sky_set);
-<a name="l00386"></a>00386         <span class="keywordflow">return</span> -1 ;
-<a name="l00387"></a>00387     }
-<a name="l00388"></a>00388 <span class="preprocessor">#else</span>
-<a name="l00389"></a>00389 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,
-<a name="l00390"></a>00390                      <span class="stringliteral">"sinfo_utl_skymap"</span>, 
-<a name="l00391"></a>00391                      <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID) 
-<a name="l00392"></a>00392     != CPL_ERROR_NONE) {
-<a name="l00393"></a>00393         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00394"></a>00394         sinfo_free_propertylist(&plist) ;
-<a name="l00395"></a>00395         sinfo_free_frame(&product_frame) ;
-<a name="l00396"></a>00396         sinfo_free_image(&sky_ima);
-<a name="l00397"></a>00397         sinfo_free_image(&sky_map);
-<a name="l00398"></a>00398         sinfo_free_frameset(&sky_set);
-<a name="l00399"></a>00399         <span class="keywordflow">return</span> -1 ;
-<a name="l00400"></a>00400     }
-<a name="l00401"></a>00401 <span class="preprocessor">#endif    </span>
-<a name="l00402"></a>00402 <span class="preprocessor"></span>
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404     <span class="comment">/* Save the file */</span>
-<a name="l00405"></a>00405     <span class="keywordflow">if</span> (cpl_image_save(sky_map, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00406"></a>00406                        CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
-<a name="l00407"></a>00407         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Could not save product"</span>);
-<a name="l00408"></a>00408         sinfo_free_propertylist(&plist) ;
-<a name="l00409"></a>00409         sinfo_free_frame(&product_frame) ;
-<a name="l00410"></a>00410         sinfo_free_image(&sky_map) ;
-<a name="l00411"></a>00411         <span class="keywordflow">return</span> -1 ;
-<a name="l00412"></a>00412     }
-<a name="l00413"></a>00413     sinfo_free_propertylist(&plist) ;
-<a name="l00414"></a>00414     sinfo_free_image(&sky_map) ;
-<a name="l00415"></a>00415     sinfo_free_image(&sky_ima) ;
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00418"></a>00418     cpl_frameset_insert(framelist, product_frame) ;
-<a name="l00419"></a>00419     sinfo_free_frameset(&sky_set);
-<a name="l00420"></a>00420    
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422 
-<a name="l00423"></a>00423   cleanup:
-<a name="l00424"></a>00424     sinfo_free_image(&sky_ima);
-<a name="l00425"></a>00425     sinfo_free_image(&sky_map);
-<a name="l00426"></a>00426     sinfo_free_propertylist(&plist);
-<a name="l00427"></a>00427     sinfo_free_frameset(&sky_set);
-<a name="l00428"></a>00428 
-<a name="l00429"></a>00429     <span class="keywordflow">if</span>(  cpl_error_get_code()!=CPL_ERROR_NONE) {
-<a name="l00430"></a>00430         <span class="keywordflow">return</span> -1 ;
-<a name="l00431"></a>00431     } <span class="keywordflow">else</span> {
-<a name="l00432"></a>00432         <span class="keywordflow">return</span> 0 ;
-<a name="l00433"></a>00433     }
-<a name="l00434"></a>00434 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_skymap.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_skymap.c,v 1.13 2009/01/30 14:56:12 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/01/30 14:56:12 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.13 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* sinfoni */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_raw_types.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_skymap_description[] =</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="stringliteral">"This recipe flags as bad pixels sky lines.\n"</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="stringliteral">"Input are sky frames with tag SKY\n"</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"Output image is called out_skymap.fits\n"</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"esorex --params sinfo_utl_skymap\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"esorex --help sinfo_utl_skymap\n"</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="code" href="group__sinfo__utl__skymap.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">   92</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     <span class="stringliteral">"sinfo_utl_skymap"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     <span class="stringliteral">"Flags sky lines as bad pixels, with map generation"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     sinfo_utl_skymap_description,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     sinfo_utl_skymap_create,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     sinfo_utl_skymap_exec,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     sinfo_utl_skymap_destroy) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.xsize"</span>, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>             CPL_TYPE_INT, <span class="stringliteral">"X box size"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 1,1,2047) ;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"xsize"</span>) ;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     p = cpl_parameter_new_range(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.ysize"</span>, </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>             CPL_TYPE_INT, <span class="stringliteral">"Y box size"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 30,1,2047) ;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"ysize"</span>) ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_skymap.threshold"</span>, </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>             CPL_TYPE_DOUBLE, <span class="stringliteral">"Threshold"</span>, <span class="stringliteral">"sinfoni.sinfo_utl_skymap"</span>, 30.) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"thresh"</span>) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> }</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> {</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">//irplib_reset();</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     check_nomsg(code = sinfo_utl_skymap(recipe->parameters, recipe->frames)) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     } </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>   cleanup:</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> }</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_skymap(</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cpl_parameter       *   param =NULL;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     <span class="keyword">const</span> <span class="keywordtype">char</span> *            name_i=NULL;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     <span class="keywordtype">int</span>                    xsize=0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordtype">int</span>                    ysize=0;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>     cpl_frame           *   sky_frm=NULL;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o=NULL ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     cpl_propertylist    *   plist =NULL;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     cpl_frameset        *   sky_set=NULL;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     cpl_image           *   sky_ima=NULL;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     cpl_image           *   sky_map=NULL;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordtype">double</span> threshold=0;</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordtype">double</span> sinfo_median=0;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     <span class="keywordtype">float</span>* sky_ima_pix=NULL;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordtype">float</span>* sky_map_pix=NULL;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordtype">int</span> nx=0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordtype">int</span> ny=0;</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>         SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>                                    <span class="stringliteral">"sinfoni.sinfo_utl_skymap.out_filename"</span>);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     name_o = <span class="stringliteral">"out_skymap.fits"</span>;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     param = cpl_parameterlist_find(parlist,<span class="stringliteral">"sinfoni.sinfo_utl_skymap.xsize"</span>);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     xsize = cpl_parameter_get_int(param) ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     param = cpl_parameterlist_find(parlist,<span class="stringliteral">"sinfoni.sinfo_utl_skymap.ysize"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     ysize = cpl_parameter_get_int(param) ;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>   </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                    <span class="stringliteral">"sinfoni.sinfo_utl_skymap.threshold"</span>);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     threshold = cpl_parameter_get_double(param) ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>  </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     sky_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     sinfo_extract_frames_type(framelist,sky_set,RAW_SKY);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"No sky frames in input list!"</span>);</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     }</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     check_nomsg(sky_frm = cpl_frameset_get_frame(sky_set,0));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>    <span class="keywordflow">if</span> ((plist=cpl_propertylist_load(cpl_frame_get_filename(sky_frm), </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                     0)) == NULL) {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>     }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     name_i=cpl_frame_get_filename(sky_frm);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     sky_ima = cpl_image_load(name_i,CPL_TYPE_FLOAT,0,0);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     sky_map=cpl_image_duplicate(sky_ima);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     sky_ima_pix=cpl_image_get_data(sky_ima);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     sky_map_pix=cpl_image_get_data(sky_map);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     nx = cpl_image_get_size_x(sky_ima);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     ny = cpl_image_get_size_y(sky_ima);</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordflow">if</span> (nx != SIZEX || ny != SIZEY) {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>        <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"nx=%d ny=%d, expected nx=%d ny=%d"</span>,nx,ny,SIZEX,SIZEY);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>        <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordflow">for</span>(i=1;i<nx;i++) {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>        <span class="keywordflow">for</span>(j=ysize+1;j<ny-ysize;j++) {</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>           sinfo_median=cpl_image_get_median_window(sky_ima,i,j-ysize,i,j+xsize);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>           <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Exit"</span>);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>              sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>              sinfo_free_image(&sky_map);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>              sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>              sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>              <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>       }</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       <span class="keywordflow">if</span>(sky_ima_pix[i+j*nx] > sinfo_median+threshold) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         sky_map_pix[i+j*nx]=0.;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         sky_map_pix[i+j*nx]=1.;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       }</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>        }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     }</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">for</span>(i=1;i<nx;i++) {</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>        <span class="keywordflow">for</span>(j=0;j<ysize+1;j++) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>              sky_map_pix[i+j*nx]=0.;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>        }</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span> </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>        <span class="keywordflow">for</span>(j=ny-ysize+1;j<ny;j++) {</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span> </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>              sky_map_pix[i+j*nx]=0.;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>        }</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>     name_o = <span class="stringliteral">"sky_map.fits"</span> ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span> </div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     product_frame = cpl_frame_new();</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     cpl_frame_set_filename(product_frame, name_o) ;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     cpl_frame_set_tag(product_frame, PRO_SKY_DUMMY) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> </div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>         sinfo_free_frame(&product_frame) ;</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     }</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)     </span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                      <span class="stringliteral">"sinfo_utl_skymap"</span>, </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                      <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL) </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>         sinfo_free_frame(&product_frame) ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>         sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         sinfo_free_image(&sky_map);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>         sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     }</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (cpl_dfs_setup_product_header(plist, product_frame, framelist, parlist,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                      <span class="stringliteral">"sinfo_utl_skymap"</span>, </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                      <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID) </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>     != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>         sinfo_free_frame(&product_frame) ;</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>         sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>         sinfo_free_image(&sky_map);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>         sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     }</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> <span class="preprocessor">#endif    </span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordflow">if</span> (cpl_image_save(sky_map, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                        CPL_IO_DEFAULT) != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         sinfo_free_frame(&product_frame) ;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>         sinfo_free_image(&sky_map) ;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     }</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>     sinfo_free_image(&sky_map) ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     sinfo_free_image(&sky_ima) ;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     cpl_frameset_insert(framelist, product_frame) ;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>    </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span> </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   cleanup:</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>     sinfo_free_image(&sky_ima);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     sinfo_free_image(&sky_map);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>     sinfo_free_frameset(&sky_set);</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     <span class="keywordflow">if</span>(  cpl_error_get_code()!=CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     }</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__spectrum__divide__by__blackbody_8h_source.html b/html/sinfo__utl__spectrum__divide__by__blackbody_8h_source.html
index c54b64e..2b284be 100644
--- a/html/sinfo__utl__spectrum__divide__by__blackbody_8h_source.html
+++ b/html/sinfo__utl__spectrum__divide__by__blackbody_8h_source.html
@@ -2,61 +2,92 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_divide_by_blackbody.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_divide_by_blackbody.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#ifndef SINFO_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_H</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                            Functions prototypes</span>
-<a name="l00041"></a>00041 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keywordtype">int</span> 
-<a name="l00044"></a>00044 sinfo_utl_spectrum_divide_by_blackbody(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_spectrum_divide_by_blackbody.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#ifndef SINFO_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_H</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> sinfo_utl_spectrum_divide_by_blackbody(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__spectrum__wavelength__shift_8h_source.html b/html/sinfo__utl__spectrum__wavelength__shift_8h_source.html
index 997b08d..662702b 100644
--- a/html/sinfo__utl__spectrum__wavelength__shift_8h_source.html
+++ b/html/sinfo__utl__spectrum__wavelength__shift_8h_source.html
@@ -2,60 +2,91 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_wavelength_shift.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_wavelength_shift.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifndef SINFO_UTL_SPECTRUM_WAVELENGTH_SHIFT_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SPECTRUM_WAVELENGTH_SHIFT_H</span>
-<a name="l00033"></a>00033 <span class="preprocessor"></span>
-<a name="l00034"></a>00034 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_pfits.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00040"></a>00040 <span class="comment">                            Functions prototypes</span>
-<a name="l00041"></a>00041 <span class="comment">-----------------------------------------------------------------------------*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_spectrum_wavelength_shift.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.h,v 1.1 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifndef SINFO_UTL_SPECTRUM_WAVELENGTH_SHIFT_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_UTL_SPECTRUM_WAVELENGTH_SHIFT_H</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_pfits.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">-----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__stdstars_8c_source.html b/html/sinfo__utl__stdstars_8c_source.html
index 0575089..7bf4c7f 100644
--- a/html/sinfo__utl__stdstars_8c_source.html
+++ b/html/sinfo__utl__stdstars_8c_source.html
@@ -2,282 +2,313 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_stdstars.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_stdstars.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_stdstars.c,v 1.5 2012/05/04 08:12:07 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the ISAAC Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/05/04 08:12:07 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.5 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <math.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 
-<a name="l00039"></a>00039 <span class="preprocessor">#include "irplib_utils.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "irplib_stdstar.h"</span>
-<a name="l00041"></a>00041 
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_tpl_utils.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*</span>
-<a name="l00048"></a>00048 <span class="comment">#include "isaac_utils.h"</span>
-<a name="l00049"></a>00049 <span class="comment">#include "isaac_pfits.h"</span>
-<a name="l00050"></a>00050 <span class="comment">#include "isaac_dfs.h"</span>
-<a name="l00051"></a>00051 <span class="comment">*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Functions prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_create(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_exec(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_destroy(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars(cpl_frameset *) ;
-<a name="l00061"></a>00061 <span class="keyword">static</span> cpl_table * sinfo_utl_stdstars_convert(<span class="keyword">const</span> <span class="keywordtype">char</span> *) ; 
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                            Static variables</span>
-<a name="l00065"></a>00065 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_stdstars_description[] = 
-<a name="l00068"></a>00068 <span class="stringliteral">"sinfo_utl_stdstars -- SINFONI standard stars catalog creation.\n"</span>
-<a name="l00069"></a>00069 <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span>
-<a name="l00070"></a>00070 <span class="stringliteral">"raw-file.fits "</span>SINFO_UTL_STDSTARS_RAW<span class="stringliteral">"\n"</span> ;
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00073"></a>00073 <span class="comment">                                Functions code</span>
-<a name="l00074"></a>00074 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00081"></a>00081 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00091"></a>00091 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00093"></a>00093 {
-<a name="l00094"></a>00094     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;
-<a name="l00095"></a>00095     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     cpl_plugin_init(plugin,
-<a name="l00098"></a>00098                     CPL_PLUGIN_API,
-<a name="l00099"></a>00099                     SINFONI_BINARY_VERSION,
-<a name="l00100"></a>00100                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00101"></a>00101                     <span class="stringliteral">"sinfo_utl_stdstars"</span>,
-<a name="l00102"></a>00102                     <span class="stringliteral">"Standard stars catalog creation"</span>,
-<a name="l00103"></a>00103                     sinfo_utl_stdstars_description,
-<a name="l00104"></a>00104                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00105"></a>00105                     <span class="stringliteral">"amodigli at eso.org"</span>,
-<a name="l00106"></a>00106                     sinfo_get_license(),
-<a name="l00107"></a>00107                     sinfo_utl_stdstars_create,
-<a name="l00108"></a>00108                     sinfo_utl_stdstars_exec,
-<a name="l00109"></a>00109                     sinfo_utl_stdstars_destroy) ;
-<a name="l00110"></a>00110 
-<a name="l00111"></a>00111     cpl_pluginlist_append(list, plugin) ;
-<a name="l00112"></a>00112     
-<a name="l00113"></a>00113     <span class="keywordflow">return</span> 0;
-<a name="l00114"></a>00114 }
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00125"></a>00125 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00126"></a>00126 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_create(cpl_plugin * plugin)
-<a name="l00127"></a>00127 {
-<a name="l00128"></a>00128     cpl_recipe      * recipe ;
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00131"></a>00131     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00132"></a>00132         recipe = (cpl_recipe *)plugin ;
-<a name="l00133"></a>00133     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00136"></a>00136     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     <span class="comment">/* Return */</span>
-<a name="l00139"></a>00139     <span class="keywordflow">return</span> 0;
-<a name="l00140"></a>00140 }
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00148"></a>00148 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00149"></a>00149 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_exec(cpl_plugin * plugin)
-<a name="l00150"></a>00150 {
-<a name="l00151"></a>00151     cpl_recipe  *   recipe ;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00154"></a>00154     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00155"></a>00155         recipe = (cpl_recipe *)plugin ;
-<a name="l00156"></a>00156     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158     <span class="keywordflow">return</span> sinfo_utl_stdstars(recipe->frames) ;
-<a name="l00159"></a>00159 }
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00167"></a>00167 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00168"></a>00168 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_destroy(cpl_plugin * plugin)
-<a name="l00169"></a>00169 {
-<a name="l00170"></a>00170     cpl_recipe  *   recipe ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00173"></a>00173     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00174"></a>00174         recipe = (cpl_recipe *)plugin ;
-<a name="l00175"></a>00175     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00176"></a>00176 
-<a name="l00177"></a>00177     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00178"></a>00178     <span class="keywordflow">return</span> 0 ;
-<a name="l00179"></a>00179 }
-<a name="l00180"></a>00180 
-<a name="l00181"></a>00181 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00187"></a>00187 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00188"></a>00188 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars(
-<a name="l00189"></a>00189         cpl_frameset        *   framelist)
-<a name="l00190"></a>00190 {
-<a name="l00191"></a>00191     cpl_frameset    *   rawframes ;
-<a name="l00192"></a>00192     
-<a name="l00193"></a>00193     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00194"></a>00194     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {
-<a name="l00195"></a>00195         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00196"></a>00196         <span class="keywordflow">return</span> -1 ;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198 
-<a name="l00199"></a>00199     <span class="comment">/* Retrieve raw frames */</span>
-<a name="l00200"></a>00200     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,
-<a name="l00201"></a>00201                     SINFO_UTL_STDSTARS_RAW)) == NULL) {
-<a name="l00202"></a>00202         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;
-<a name="l00203"></a>00203         <span class="keywordflow">return</span> -1 ;
-<a name="l00204"></a>00204     }
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     <span class="comment">/* Write the catalog */</span>
-<a name="l00207"></a>00207     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(framelist,
-<a name="l00208"></a>00208                 rawframes, 
-<a name="l00209"></a>00209                 <span class="stringliteral">"sinfo_utl_stdstars"</span>,
-<a name="l00210"></a>00210                 SINFO_UTL_STDSTARS_RES, NULL,
-<a name="l00211"></a>00211                 PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,
-<a name="l00212"></a>00212                 <span class="stringliteral">"SINFONI"</span>,
-<a name="l00213"></a>00213                 sinfo_utl_stdstars_convert) == -1) {
-<a name="l00214"></a>00214         cpl_msg_error(__func__, <span class="stringliteral">"Cannot write the catalogs"</span>) ;
-<a name="l00215"></a>00215         cpl_frameset_delete(rawframes) ;
-<a name="l00216"></a>00216         <span class="keywordflow">return</span> -1 ;
-<a name="l00217"></a>00217     }
-<a name="l00218"></a>00218     cpl_frameset_delete(rawframes) ;
-<a name="l00219"></a>00219     <span class="keywordflow">return</span> 0 ;
-<a name="l00220"></a>00220 }
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00243"></a>00243 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00244"></a>00244 <span class="keyword">static</span> cpl_table * sinfo_utl_stdstars_convert(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename) 
-<a name="l00245"></a>00245 {
-<a name="l00246"></a>00246     cpl_table   *   out ;
-<a name="l00247"></a>00247     <span class="keywordtype">int</span>             nfilters ;
-<a name="l00248"></a>00248     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filters[8];
-<a name="l00249"></a>00249     <span class="keywordtype">double</span>          mags[8] ;
-<a name="l00250"></a>00250     <span class="keywordtype">int</span>             nbentries ;
-<a name="l00251"></a>00251     FILE        *   in ;
-<a name="l00252"></a>00252     <span class="keywordtype">char</span>            line[1024];
-<a name="l00253"></a>00253     <span class="keywordtype">double</span>          ra, dec ;
-<a name="l00254"></a>00254     <span class="keywordtype">char</span>            sname[512];
-<a name="l00255"></a>00255     <span class="keywordtype">char</span>            stype[512];
-<a name="l00256"></a>00256     <span class="keywordtype">int</span>             i ;
-<a name="l00257"></a>00257     
-<a name="l00258"></a>00258     <span class="comment">/* Check entries */</span>
-<a name="l00259"></a>00259     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span> NULL ;
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     <span class="comment">/* Initialise */</span>
-<a name="l00262"></a>00262     nfilters = 8 ;
-<a name="l00263"></a>00263     filters[0] = <span class="stringliteral">"J"</span> ;
-<a name="l00264"></a>00264     filters[1] = <span class="stringliteral">"H"</span> ;
-<a name="l00265"></a>00265     filters[2] = <span class="stringliteral">"K"</span> ;
-<a name="l00266"></a>00266     filters[3] = <span class="stringliteral">"Ks"</span> ;
-<a name="l00267"></a>00267     filters[4] = <span class="stringliteral">"L"</span> ;
-<a name="l00268"></a>00268     filters[5] = <span class="stringliteral">"M"</span> ;
-<a name="l00269"></a>00269     filters[6] = <span class="stringliteral">"Lp"</span> ;
-<a name="l00270"></a>00270     filters[7] = <span class="stringliteral">"Mp"</span> ;
-<a name="l00271"></a>00271    
-<a name="l00272"></a>00272     <span class="comment">/* Get the number of lines */</span>
-<a name="l00273"></a>00273     nbentries = 0 ;
-<a name="l00274"></a>00274     <span class="keywordflow">if</span> ((in = fopen(filename, <span class="stringliteral">"r"</span>)) == NULL) {
-<a name="l00275"></a>00275         <span class="keywordflow">return</span> NULL ;
-<a name="l00276"></a>00276     }
-<a name="l00277"></a>00277     <span class="keywordflow">while</span> (fgets(line, 1024, in) != NULL) {
-<a name="l00278"></a>00278         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) nbentries ++ ;
-<a name="l00279"></a>00279     }
-<a name="l00280"></a>00280     fclose(in) ;
-<a name="l00281"></a>00281     
-<a name="l00282"></a>00282    <span class="comment">/* Create the table */</span>
-<a name="l00283"></a>00283     out = cpl_table_new(nbentries);
-<a name="l00284"></a>00284     cpl_table_new_column(out, IRPLIB_STDSTAR_STAR_COL, CPL_TYPE_STRING);
-<a name="l00285"></a>00285     cpl_table_new_column(out, IRPLIB_STDSTAR_TYPE_COL, CPL_TYPE_STRING);
-<a name="l00286"></a>00286     cpl_table_new_column(out, IRPLIB_STDSTAR_RA_COL, CPL_TYPE_DOUBLE);
-<a name="l00287"></a>00287     cpl_table_new_column(out, IRPLIB_STDSTAR_DEC_COL, CPL_TYPE_DOUBLE);
-<a name="l00288"></a>00288     <span class="keywordflow">for</span> (i=0 ; i<nfilters ; i++)
-<a name="l00289"></a>00289         cpl_table_new_column(out, filters[i], CPL_TYPE_DOUBLE);
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     <span class="comment">/* Parse the file */</span>
-<a name="l00292"></a>00292     <span class="keywordflow">if</span> ((in = fopen(filename, <span class="stringliteral">"r"</span>)) == NULL) {
-<a name="l00293"></a>00293         cpl_table_delete(out) ;
-<a name="l00294"></a>00294         <span class="keywordflow">return</span> NULL ;
-<a name="l00295"></a>00295     }
-<a name="l00296"></a>00296     nbentries = 0 ;
-<a name="l00297"></a>00297     <span class="keywordflow">while</span> (fgets(line, 1024, in) != NULL) {
-<a name="l00298"></a>00298         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) {
-<a name="l00299"></a>00299             <span class="keywordflow">if</span> (sscanf(line, <span class="stringliteral">"%s %lg %lg %s %lg %lg %lg %lg %lg %lg %lg %lg"</span>, 
-<a name="l00300"></a>00300                         sname, &ra, &dec, stype, &(mags[0]), &(mags[1]), 
-<a name="l00301"></a>00301                         &(mags[2]), &(mags[3]), &(mags[4]), &(mags[5]), 
-<a name="l00302"></a>00302                         &(mags[6]), &(mags[7])) != 12) {
-<a name="l00303"></a>00303                 cpl_table_delete(out) ;
-<a name="l00304"></a>00304                 fclose(in) ;
-<a name="l00305"></a>00305                 <span class="keywordflow">return</span> NULL ;
-<a name="l00306"></a>00306             }
-<a name="l00307"></a>00307             cpl_table_set_string(out, IRPLIB_STDSTAR_STAR_COL,nbentries, sname);
-<a name="l00308"></a>00308             cpl_table_set_string(out, IRPLIB_STDSTAR_TYPE_COL,nbentries, stype);
-<a name="l00309"></a>00309             cpl_table_set_double(out, IRPLIB_STDSTAR_RA_COL, nbentries, ra);
-<a name="l00310"></a>00310             cpl_table_set_double(out, IRPLIB_STDSTAR_DEC_COL, nbentries, dec);
-<a name="l00311"></a>00311             <span class="keywordflow">for</span> (i=0 ; i<nfilters ; i++)
-<a name="l00312"></a>00312                 cpl_table_set_double(out, filters[i], nbentries, mags[i]);
-<a name="l00313"></a>00313             nbentries ++ ;
-<a name="l00314"></a>00314         }
-<a name="l00315"></a>00315     }
-<a name="l00316"></a>00316     fclose(in) ;
-<a name="l00317"></a>00317                 
-<a name="l00318"></a>00318     <span class="keywordflow">return</span> out ;
-<a name="l00319"></a>00319 }
-<a name="l00320"></a>00320 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_stdstars.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_stdstars.c,v 1.5 2012/05/04 08:12:07 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the ISAAC Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/05/04 08:12:07 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.5 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "irplib_utils.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "irplib_stdstar.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_tpl_utils.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_tpl_dfs.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">#include "isaac_utils.h"</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">#include "isaac_pfits.h"</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">#include "isaac_dfs.h"</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars(cpl_frameset *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> cpl_table * sinfo_utl_stdstars_convert(<span class="keyword">const</span> <span class="keywordtype">char</span> *) ; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_stdstars_description[] = </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="stringliteral">"sinfo_utl_stdstars -- SINFONI standard stars catalog creation.\n"</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="stringliteral">"The files listed in the Set Of Frames (sof-file) must be tagged:\n"</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="stringliteral">"raw-file.fits "</span>SINFO_UTL_STDSTARS_RAW<span class="stringliteral">"\n"</span> ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span>(*recipe)) ;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                     <span class="stringliteral">"sinfo_utl_stdstars"</span>,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>                     <span class="stringliteral">"Standard stars catalog creation"</span>,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>                     sinfo_utl_stdstars_description,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     <span class="stringliteral">"amodigli at eso.org"</span>,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     sinfo_utl_stdstars_create,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     sinfo_utl_stdstars_exec,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     sinfo_utl_stdstars_destroy) ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordflow">return</span> sinfo_utl_stdstars(recipe->frames) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_stdstars(</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     cpl_frameset    *   rawframes ;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="comment">/* Retrieve raw frames */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordflow">if</span> ((rawframes = sinfo_extract_frameset(framelist,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>                     SINFO_UTL_STDSTARS_RAW)) == NULL) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot find raw frames in the input list"</span>) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     }</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="comment">/* Write the catalog */</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">if</span> (<a class="code" href="group__irplib__stdstar.html#gac18c92be3d3c96ba57804b074a2abb7d" title="Write the ASCII catalogs as FITS files.">irplib_stdstar_write_catalogs</a>(framelist,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                 rawframes, </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                 <span class="stringliteral">"sinfo_utl_stdstars"</span>,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                 SINFO_UTL_STDSTARS_RES, NULL,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                 PACKAGE <span class="stringliteral">"/"</span> PACKAGE_VERSION,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>                 <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>                 sinfo_utl_stdstars_convert) == -1) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>         cpl_msg_error(__func__, <span class="stringliteral">"Cannot write the catalogs"</span>) ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>         cpl_frameset_delete(rawframes) ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     }</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_frameset_delete(rawframes) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> <span class="keyword">static</span> cpl_table * sinfo_utl_stdstars_convert(<span class="keyword">const</span> <span class="keywordtype">char</span> * filename) </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     cpl_table   *   out ;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     <span class="keywordtype">int</span>             nfilters ;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>  *   filters[8];</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     <span class="keywordtype">double</span>          mags[8] ;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordtype">int</span>             nbentries ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     FILE        *   in ;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     <span class="keywordtype">char</span>            line[1024];</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordtype">double</span>          ra, dec ;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="keywordtype">char</span>            sname[512];</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordtype">char</span>            stype[512];</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="keywordtype">int</span>             i ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     <span class="comment">/* Check entries */</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordflow">if</span> (filename == NULL) <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* Initialise */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     nfilters = 8 ;</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     filters[0] = <span class="stringliteral">"J"</span> ;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     filters[1] = <span class="stringliteral">"H"</span> ;</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     filters[2] = <span class="stringliteral">"K"</span> ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     filters[3] = <span class="stringliteral">"Ks"</span> ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     filters[4] = <span class="stringliteral">"L"</span> ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     filters[5] = <span class="stringliteral">"M"</span> ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     filters[6] = <span class="stringliteral">"Lp"</span> ;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     filters[7] = <span class="stringliteral">"Mp"</span> ;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>    </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="comment">/* Get the number of lines */</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     nbentries = 0 ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="keywordflow">if</span> ((in = fopen(filename, <span class="stringliteral">"r"</span>)) == NULL) {</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     }</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">while</span> (fgets(line, 1024, in) != NULL) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) nbentries ++ ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     fclose(in) ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>    <span class="comment">/* Create the table */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     out = cpl_table_new(nbentries);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     cpl_table_new_column(out, IRPLIB_STDSTAR_STAR_COL, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     cpl_table_new_column(out, IRPLIB_STDSTAR_TYPE_COL, CPL_TYPE_STRING);</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     cpl_table_new_column(out, IRPLIB_STDSTAR_RA_COL, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_table_new_column(out, IRPLIB_STDSTAR_DEC_COL, CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">for</span> (i=0 ; i<nfilters ; i++)</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>         cpl_table_new_column(out, filters[i], CPL_TYPE_DOUBLE);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="comment">/* Parse the file */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     <span class="keywordflow">if</span> ((in = fopen(filename, <span class="stringliteral">"r"</span>)) == NULL) {</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         cpl_table_delete(out) ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     nbentries = 0 ;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">while</span> (fgets(line, 1024, in) != NULL) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <span class="keywordflow">if</span> (line[0] != <span class="charliteral">'#'</span>) {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>             <span class="keywordflow">if</span> (sscanf(line, <span class="stringliteral">"%s %lg %lg %s %lg %lg %lg %lg %lg %lg %lg %lg"</span>, </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                         sname, &ra, &dec, stype, &(mags[0]), &(mags[1]), </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                         &(mags[2]), &(mags[3]), &(mags[4]), &(mags[5]), </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                         &(mags[6]), &(mags[7])) != 12) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                 cpl_table_delete(out) ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                 fclose(in) ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>             }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>             cpl_table_set_string(out, IRPLIB_STDSTAR_STAR_COL,nbentries, sname);</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>             cpl_table_set_string(out, IRPLIB_STDSTAR_TYPE_COL,nbentries, stype);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>             cpl_table_set_double(out, IRPLIB_STDSTAR_RA_COL, nbentries, ra);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>             cpl_table_set_double(out, IRPLIB_STDSTAR_DEC_COL, nbentries, dec);</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>             <span class="keywordflow">for</span> (i=0 ; i<nfilters ; i++)</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                 cpl_table_set_double(out, filters[i], nbentries, mags[i]);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>             nbentries ++ ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>         }</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     fclose(in) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                 </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     <span class="keywordflow">return</span> out ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> }</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__table__ex_8c_source.html b/html/sinfo__utl__table__ex_8c_source.html
index 80082cc..1439975 100644
--- a/html/sinfo__utl__table__ex_8c_source.html
+++ b/html/sinfo__utl__table__ex_8c_source.html
@@ -2,330 +2,361 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_table_ex.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_table_ex.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_table_ex.c,v 1.1 2009/05/20 15:22:42 kmirny Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: kmirny $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2009/05/20 15:22:42 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <string.h></span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/* cpl */</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00039"></a>00039 
-<a name="l00040"></a>00040 <span class="comment">/* irplib */</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_key_names.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_pro_types.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                            Functions prototypes</span>
-<a name="l00055"></a>00055 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_create(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_exec(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_destroy(cpl_plugin *) ;
-<a name="l00060"></a>00060 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00063"></a>00063 <span class="comment">                            Static variables</span>
-<a name="l00064"></a>00064 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00065"></a>00065 
-<a name="l00066"></a>00066 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_table_ex_description[] =
-<a name="l00067"></a>00067 <span class="stringliteral">"This recipe produce a table,\n"</span>;
-<a name="l00068"></a>00068 
-<a name="l00069"></a>00069 <span class="comment">/*static char PARAM_NAME_SIZE_X[] = "sinfoni.sinfo_utl_table_ex.size_x";</span>
-<a name="l00070"></a>00070 <span class="comment">static char PARAM_NAME_SIZE_Y[] = "sinfoni.sinfo_utl_table_ex.size_y";</span>
-<a name="l00071"></a>00071 <span class="comment">static char PARAM_NAME_FWHM_X[] = "sinfoni.sinfo_utl_table_ex.fwhm_x";</span>
-<a name="l00072"></a>00072 <span class="comment">static char PARAM_NAME_FWHM_Y[] = "sinfoni.sinfo_utl_table_ex.fwhm_y";</span>
-<a name="l00073"></a>00073 <span class="comment">static char PARAM_NAME_SIGNAL[] = "sinfoni.sinfo_utl_table_ex.total_signal";</span>
-<a name="l00074"></a>00074 <span class="comment">static char PARAM_NAME_BKGSIG[] = "sinfoni.sinfo_utl_table_ex.bkg_signal";</span>
-<a name="l00075"></a>00075 <span class="comment">static char PARAM_NAME_NOISEL[] = "sinfoni.sinfo_utl_table_ex.noise_level";</span>
-<a name="l00076"></a>00076 <span class="comment">*/</span>
-<a name="l00077"></a>00077 <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_table_ex"</span>;
-<a name="l00078"></a>00078 <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_SPECTRUM[] = <span class="stringliteral">"spectrum"</span>;
-<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_WAVELENGTH[] = <span class="stringliteral">"wavelength"</span>;
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_BKG_TOT[] = <span class="stringliteral">"bkg_tot"</span>;
-<a name="l00081"></a>00081 <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_COUNTS_BKG[] = <span class="stringliteral">"counts_bkg"</span>;
-<a name="l00082"></a>00082 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00083"></a>00083 <span class="comment">                                Functions code</span>
-<a name="l00084"></a>00084 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00085"></a>00085 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00089"></a>00089 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00090"></a>00090 
-<a name="l00092"></a>00092 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00100"></a>00100 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00101"></a><a class="code" href="group__sinfo__utl__table__ex.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">00101</a> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00102"></a>00102 {
-<a name="l00103"></a>00103     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00104"></a>00104     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106     cpl_plugin_init(plugin,
-<a name="l00107"></a>00107                     CPL_PLUGIN_API,
-<a name="l00108"></a>00108                     SINFONI_BINARY_VERSION,
-<a name="l00109"></a>00109                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00110"></a>00110                     <span class="stringliteral">"sinfo_utl_table_ex"</span>,
-<a name="l00111"></a>00111                     <span class="stringliteral">"Test example shows table manipulating utilities"</span>,
-<a name="l00112"></a>00112                     sinfo_utl_table_ex_description,
-<a name="l00113"></a>00113                     <span class="stringliteral">"Konstantin Mirny"</span>,
-<a name="l00114"></a>00114                     <span class="stringliteral">"kmirny at eso.org"</span>,
-<a name="l00115"></a>00115                     sinfo_get_license(),
-<a name="l00116"></a>00116                     sinfo_utl_table_ex_create,
-<a name="l00117"></a>00117                     sinfo_utl_table_ex_exec,
-<a name="l00118"></a>00118                     sinfo_utl_table_ex_destroy) ;
-<a name="l00119"></a>00119 
-<a name="l00120"></a>00120     cpl_pluginlist_append(list, plugin) ;
-<a name="l00121"></a>00121 
-<a name="l00122"></a>00122     <span class="keywordflow">return</span> 0;
-<a name="l00123"></a>00123 }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00135"></a>00135 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_create(cpl_plugin * plugin)
-<a name="l00136"></a>00136 {
-<a name="l00137"></a>00137     cpl_recipe      * recipe ;
-<a name="l00138"></a>00138 <span class="comment">//    cpl_parameter   * p ;</span>
-<a name="l00139"></a>00139 
-<a name="l00140"></a>00140     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00141"></a>00141     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00142"></a>00142         recipe = (cpl_recipe *)plugin ;
-<a name="l00143"></a>00143     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00144"></a>00144     cpl_error_reset();
-<a name="l00145"></a>00145     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00148"></a>00148     recipe->parameters = cpl_parameterlist_new() ;
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00151"></a>00151     <span class="comment">/* --stropt */</span>
-<a name="l00152"></a>00152 <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_table_ex.op",</span>
-<a name="l00153"></a>00153 <span class="comment">                                CPL_TYPE_STRING,</span>
-<a name="l00154"></a>00154 <span class="comment">                                "A possible operation",</span>
-<a name="l00155"></a>00155 <span class="comment">                                "sinfoni.sinfo_utl_table_ex","+");</span>
-<a name="l00156"></a>00156 <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span>
-<a name="l00157"></a>00157 <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span>
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159     <span class="comment">/* --size_x */</span>
-<a name="l00160"></a>00160 <span class="comment">/*    p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,</span>
-<a name="l00161"></a>00161 <span class="comment">            CPL_TYPE_INT, "size X axis", RECIPE_NAME, SIZE_X_DEFAULT) ;</span>
-<a name="l00162"></a>00162 <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "size_x") ;</span>
-<a name="l00163"></a>00163 <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;</span>
-<a name="l00164"></a>00164 <span class="comment">*/</span>
-<a name="l00165"></a>00165     <span class="comment">/* Return */</span>
-<a name="l00166"></a>00166     <span class="keywordflow">return</span> 0;
-<a name="l00167"></a>00167 }
-<a name="l00168"></a>00168 
-<a name="l00169"></a>00169 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00175"></a>00175 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00176"></a>00176 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_exec(cpl_plugin * plugin)
-<a name="l00177"></a>00177 {
-<a name="l00178"></a>00178     cpl_recipe  *   recipe ;
-<a name="l00179"></a>00179      <span class="keywordtype">int</span> code=0;
-<a name="l00180"></a>00180      cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00183"></a>00183     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00184"></a>00184         recipe = (cpl_recipe *)plugin ;
-<a name="l00185"></a>00185     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00186"></a>00186     cpl_error_reset();
-<a name="l00187"></a>00187     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00188"></a>00188     code = sinfo_utl_table_ex(recipe->parameters, recipe->frames) ;
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {
-<a name="l00192"></a>00192         <span class="comment">/* Dump the error history since recipe execution start.</span>
-<a name="l00193"></a>00193 <span class="comment">           At this point the recipe cannot recover from the error */</span>
-<a name="l00194"></a>00194         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
-<a name="l00195"></a>00195     }
-<a name="l00196"></a>00196 
-<a name="l00197"></a>00197     <span class="keywordflow">return</span> code ;
-<a name="l00198"></a>00198 }
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00206"></a>00206 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00207"></a>00207 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_destroy(cpl_plugin * plugin)
-<a name="l00208"></a>00208 {
-<a name="l00209"></a>00209     cpl_recipe  *   recipe ;
-<a name="l00210"></a>00210 
-<a name="l00211"></a>00211     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00212"></a>00212     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)
-<a name="l00213"></a>00213         recipe = (cpl_recipe *)plugin ;
-<a name="l00214"></a>00214     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     cpl_parameterlist_delete(recipe->parameters) ;
-<a name="l00217"></a>00217     <span class="keywordflow">return</span> 0 ;
-<a name="l00218"></a>00218 }
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00227"></a>00227 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00228"></a>00228 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00229"></a>00229 sinfo_utl_table_ex( cpl_parameterlist   *   parlist,
-<a name="l00230"></a>00230         cpl_frameset        *   framelist)
-<a name="l00231"></a>00231 {
-<a name="l00232"></a>00232     <span class="comment">// parameters</span>
-<a name="l00233"></a>00233     <span class="keywordtype">double</span> range_min = 1.9;
-<a name="l00234"></a>00234     <span class="keywordtype">double</span> range_max = 2.;
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;
-<a name="l00238"></a>00238     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   sourceTableName = NULL;
-<a name="l00239"></a>00239 <span class="comment">//    cpl_parameter       *   param = NULL ;</span>
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     cpl_propertylist    *   plist = NULL ;
-<a name="l00242"></a>00242     cpl_frame           *   product_frame = NULL;
-<a name="l00243"></a>00243     <span class="keywordtype">int</span>                     nrow = 0; <span class="comment">// number of rows in the table</span>
-<a name="l00244"></a>00244     cpl_table           *   tblSource = NULL; <span class="comment">// source table</span>
-<a name="l00245"></a>00245     cpl_table           *   tblResult = NULL; <span class="comment">// result table</span>
-<a name="l00246"></a>00246     <span class="keywordtype">float</span>               *   pValues   = NULL; <span class="comment">// source column</span>
-<a name="l00247"></a>00247 
-<a name="l00248"></a>00248     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,
-<a name="l00249"></a>00249     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);
-<a name="l00250"></a>00250     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252 <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00253"></a>00253       <span class="comment">/* --size_x */</span>
-<a name="l00254"></a>00254 <span class="comment">//    check_nomsg(param=cpl_parameterlist_find(parlist,</span>
-<a name="l00255"></a>00255 <span class="comment">//                                             PARAM_NAME_SIZE_X));</span>
-<a name="l00256"></a>00256 <span class="comment">//    check_nomsg(iSizeX=cpl_parameter_get_int(param));</span>
-<a name="l00257"></a>00257 
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259 
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span>
-<a name="l00262"></a>00262     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00265"></a>00265     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     <span class="comment">// get the source table</span>
-<a name="l00268"></a>00268     check(product_frame = cpl_frameset_get_first(framelist),<span class="stringliteral">"Cannot get product frame"</span>);
-<a name="l00269"></a>00269     check(sourceTableName = cpl_frame_get_filename(product_frame),<span class="stringliteral">"Cannot get source table name"</span>);
-<a name="l00270"></a>00270     check_nomsg(tblSource = cpl_table_load(sourceTableName, 1, 0));
-<a name="l00271"></a>00271     <span class="comment">// generate result table</span>
-<a name="l00272"></a>00272     <span class="comment">// 1. duplicate the table</span>
-<a name="l00273"></a>00273     check(tblResult = cpl_table_duplicate(tblSource), <span class="stringliteral">"cannot duplicate table"</span>);
-<a name="l00274"></a>00274     <span class="comment">// 2. Cycle through the table - select only predefined interval</span>
-<a name="l00275"></a>00275     check_nomsg(nrow = cpl_table_get_nrow(tblResult));
-<a name="l00276"></a>00276     sinfo_msg(<span class="stringliteral">"%d rows in the source table"</span>, nrow);
-<a name="l00277"></a>00277     <span class="keywordflow">if</span> (nrow)
-<a name="l00278"></a>00278     {
-<a name="l00279"></a>00279         <span class="keywordtype">int</span> i = 0;
-<a name="l00280"></a>00280         <span class="keywordtype">int</span> m = 0;
-<a name="l00281"></a>00281         check_nomsg(pValues = cpl_table_get_data_float(tblResult, CLMN_NAME_WAVELENGTH));
-<a name="l00282"></a>00282         sinfo_msg(<span class="stringliteral">"checking wavelenghts..."</span>);
-<a name="l00283"></a>00283         check(cpl_table_unselect_all(tblResult),<span class="stringliteral">"cannot unselect all"</span>);
-<a name="l00284"></a>00284         <span class="keywordflow">for</span> (i = 0; i < nrow; ++i)
-<a name="l00285"></a>00285         {
-<a name="l00286"></a>00286             <span class="keywordflow">if</span> ((*(pValues + i) < range_min) || (*(pValues + i) > range_max))
-<a name="l00287"></a>00287             {
-<a name="l00288"></a>00288                 <span class="comment">// mark for removing</span>
-<a name="l00289"></a>00289                 check(cpl_table_select_row(tblResult, i), <span class="stringliteral">"Cannot select a row in a table"</span>);
-<a name="l00290"></a>00290                 ++m;
-<a name="l00291"></a>00291             }
-<a name="l00292"></a>00292         }
-<a name="l00293"></a>00293         sinfo_msg(<span class="stringliteral">"%d row(s) would be removed from the result"</span>, m);
-<a name="l00294"></a>00294         <span class="comment">// delete select rows from the table</span>
-<a name="l00295"></a>00295         check(cpl_table_erase_selected(tblResult),<span class="stringliteral">"Cannot delete selected rows from a table"</span>);
-<a name="l00296"></a>00296     }
-<a name="l00297"></a>00297     <span class="comment">// 3. create a new column for the result table</span>
-<a name="l00298"></a>00298     <span class="comment">// 4. Fill in the new column with values</span>
-<a name="l00299"></a>00299     check(cpl_table_duplicate_column(tblResult,CLMN_NAME_SPECTRUM, tblResult, CLMN_NAME_BKG_TOT),<span class="stringliteral">"Unable to create new column in the table"</span>);
-<a name="l00300"></a>00300     check(cpl_table_add_columns(tblResult, CLMN_NAME_SPECTRUM, CLMN_NAME_COUNTS_BKG), <span class="stringliteral">"Error during sum the columns"</span>);
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     <span class="comment">/* Set the file name */</span>
-<a name="l00303"></a>00303     name_o = <span class="stringliteral">"ima_res.fits"</span> ;
-<a name="l00304"></a>00304     <span class="comment">/* Create product frame */</span>
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00307"></a>00307     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00308"></a>00308     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"table_example"</span> )) ;
-<a name="l00309"></a>00309     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;
-<a name="l00310"></a>00310     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00311"></a>00311     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00312"></a>00312       <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00315"></a>00315     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00316"></a>00316 <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span>
-<a name="l00317"></a>00317     check(cpl_dfs_setup_product_header(plist,
-<a name="l00318"></a>00318                                        product_frame,
-<a name="l00319"></a>00319                                        framelist,
-<a name="l00320"></a>00320                                        parlist,
-<a name="l00321"></a>00321                                        <span class="stringliteral">"sinfo_utl_table_ex"</span>,
-<a name="l00322"></a>00322                                        <span class="stringliteral">"SINFONI"</span>,
-<a name="l00323"></a>00323                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00324"></a>00324       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00325"></a>00325 
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327     <span class="comment">/* Save the file */</span>
-<a name="l00328"></a>00328     cpl_table_dump(tblResult, 0, 3, stdout);
-<a name="l00329"></a>00329     check(cpl_table_save(tblResult,
-<a name="l00330"></a>00330                         NULL, NULL,
-<a name="l00331"></a>00331                          name_o,
-<a name="l00332"></a>00332                          CPL_IO_DEFAULT), <span class="stringliteral">"Cannot save table"</span>);
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334     sinfo_free_propertylist(&plist) ;
-<a name="l00335"></a>00335     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00336"></a>00336     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339  cleanup:
-<a name="l00340"></a>00340 
-<a name="l00341"></a>00341     sinfo_free_propertylist(&plist) ;
-<a name="l00342"></a>00342     cpl_table_delete(tblSource);
-<a name="l00343"></a>00343     cpl_table_delete(tblResult);
-<a name="l00344"></a>00344     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span>
-<a name="l00345"></a>00345 <span class="comment">    sinfo_free_frame(&product_frame) ;</span>
-<a name="l00346"></a>00346 <span class="comment">    */</span>
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <span class="keywordflow">return</span> ((cpl_error_get_code()) ? -1 : 0 );
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_table_ex.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_table_ex.c,v 1.1 2009/05/20 15:22:42 kmirny Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: kmirny $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2009/05/20 15:22:42 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_key_names.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_pro_types.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_table_ex_description[] =</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="stringliteral">"This recipe produce a table,\n"</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*static char PARAM_NAME_SIZE_X[] = "sinfoni.sinfo_utl_table_ex.size_x";</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">static char PARAM_NAME_SIZE_Y[] = "sinfoni.sinfo_utl_table_ex.size_y";</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">static char PARAM_NAME_FWHM_X[] = "sinfoni.sinfo_utl_table_ex.fwhm_x";</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">static char PARAM_NAME_FWHM_Y[] = "sinfoni.sinfo_utl_table_ex.fwhm_y";</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">static char PARAM_NAME_SIGNAL[] = "sinfoni.sinfo_utl_table_ex.total_signal";</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">static char PARAM_NAME_BKGSIG[] = "sinfoni.sinfo_utl_table_ex.bkg_signal";</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">static char PARAM_NAME_NOISEL[] = "sinfoni.sinfo_utl_table_ex.noise_level";</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="keyword">static</span> <span class="keywordtype">char</span> RECIPE_NAME[] = <span class="stringliteral">"sinfoni.sinfo_utl_table_ex"</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_SPECTRUM[] = <span class="stringliteral">"spectrum"</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_WAVELENGTH[] = <span class="stringliteral">"wavelength"</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_BKG_TOT[] = <span class="stringliteral">"bkg_tot"</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="keyword">static</span> <span class="keywordtype">char</span> CLMN_NAME_COUNTS_BKG[] = <span class="stringliteral">"counts_bkg"</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="group__sinfo__utl__table__ex.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693">  101</a></span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     <span class="stringliteral">"sinfo_utl_table_ex"</span>,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     <span class="stringliteral">"Test example shows table manipulating utilities"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     sinfo_utl_table_ex_description,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     <span class="stringliteral">"Konstantin Mirny"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="stringliteral">"kmirny at eso.org"</span>,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     sinfo_utl_table_ex_create,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     sinfo_utl_table_ex_exec,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     sinfo_utl_table_ex_destroy) ;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">//    cpl_parameter   * p ;</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     recipe->parameters = cpl_parameterlist_new() ;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">/*    p = cpl_parameter_new_value("sinfoni.sinfo_utl_table_ex.op",</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">                                CPL_TYPE_STRING,</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">                                "A possible operation",</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">                                "sinfoni.sinfo_utl_table_ex","+");</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "op") ;</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;*/</span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">/*    p = cpl_parameter_new_value(PARAM_NAME_SIZE_X,</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">            CPL_TYPE_INT, "size X axis", RECIPE_NAME, SIZE_X_DEFAULT) ;</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">    cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, "size_x") ;</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">    cpl_parameterlist_append(recipe->parameters, p) ;</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> }</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>      <span class="keywordtype">int</span> code=0;</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>      cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     code = sinfo_utl_table_ex(recipe->parameters, recipe->frames) ;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         <span class="comment">/* Dump the error history since recipe execution start.</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">           At this point the recipe cannot recover from the error */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordflow">return</span> code ;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_ex_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE)</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_parameterlist_delete(recipe->parameters) ;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> sinfo_utl_table_ex( cpl_parameterlist   *   parlist,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="comment">// parameters</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     <span class="keywordtype">double</span> range_min = 1.9;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     <span class="keywordtype">double</span> range_max = 2.;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o = NULL ;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   sourceTableName = NULL;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> <span class="comment">//    cpl_parameter       *   param = NULL ;</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     cpl_propertylist    *   plist = NULL ;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     cpl_frame           *   product_frame = NULL;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     <span class="keywordtype">int</span>                     nrow = 0; <span class="comment">// number of rows in the table</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     cpl_table           *   tblSource = NULL; <span class="comment">// source table</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     cpl_table           *   tblResult = NULL; <span class="comment">// result table</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordtype">float</span>               *   pValues   = NULL; <span class="comment">// source column</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> </div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     sinfo_msg(<span class="stringliteral">"Welcome to SINFONI Pipeline release %d.%d.%d"</span>,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     SINFONI_MAJOR_VERSION,SINFONI_MINOR_VERSION,SINFONI_MICRO_VERSION);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     ck0(sinfo_dfs_set_groups(framelist),<span class="stringliteral">"Cannot indentify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <span class="comment">/* --size_x */</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">//    check_nomsg(param=cpl_parameterlist_find(parlist,</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> <span class="comment">//                                             PARAM_NAME_SIZE_X));</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> <span class="comment">//    check_nomsg(iSizeX=cpl_parameter_get_int(param));</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* HOW TO GET THE VALUE OF A FITS KEYWORD */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     check(plist=cpl_propertylist_new(),<span class="stringliteral">"Cannot create a Property List"</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     <span class="comment">// get the source table</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     check(product_frame = cpl_frameset_get_first(framelist),<span class="stringliteral">"Cannot get product frame"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     check(sourceTableName = cpl_frame_get_filename(product_frame),<span class="stringliteral">"Cannot get source table name"</span>);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     check_nomsg(tblSource = cpl_table_load(sourceTableName, 1, 0));</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="comment">// generate result table</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     <span class="comment">// 1. duplicate the table</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     check(tblResult = cpl_table_duplicate(tblSource), <span class="stringliteral">"cannot duplicate table"</span>);</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     <span class="comment">// 2. Cycle through the table - select only predefined interval</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     check_nomsg(nrow = cpl_table_get_nrow(tblResult));</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     sinfo_msg(<span class="stringliteral">"%d rows in the source table"</span>, nrow);</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     <span class="keywordflow">if</span> (nrow)</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>     {</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         <span class="keywordtype">int</span> i = 0;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>         <span class="keywordtype">int</span> m = 0;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         check_nomsg(pValues = cpl_table_get_data_float(tblResult, CLMN_NAME_WAVELENGTH));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         sinfo_msg(<span class="stringliteral">"checking wavelenghts..."</span>);</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         check(cpl_table_unselect_all(tblResult),<span class="stringliteral">"cannot unselect all"</span>);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         <span class="keywordflow">for</span> (i = 0; i < nrow; ++i)</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>             <span class="keywordflow">if</span> ((*(pValues + i) < range_min) || (*(pValues + i) > range_max))</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>             {</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                 <span class="comment">// mark for removing</span></div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                 check(cpl_table_select_row(tblResult, i), <span class="stringliteral">"Cannot select a row in a table"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                 ++m;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>             }</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         sinfo_msg(<span class="stringliteral">"%d row(s) would be removed from the result"</span>, m);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>         <span class="comment">// delete select rows from the table</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>         check(cpl_table_erase_selected(tblResult),<span class="stringliteral">"Cannot delete selected rows from a table"</span>);</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="comment">// 3. create a new column for the result table</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="comment">// 4. Fill in the new column with values</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     check(cpl_table_duplicate_column(tblResult,CLMN_NAME_SPECTRUM, tblResult, CLMN_NAME_BKG_TOT),<span class="stringliteral">"Unable to create new column in the table"</span>);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     check(cpl_table_add_columns(tblResult, CLMN_NAME_SPECTRUM, CLMN_NAME_COUNTS_BKG), <span class="stringliteral">"Error during sum the columns"</span>);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     name_o = <span class="stringliteral">"ima_res.fits"</span> ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     check_nomsg(cpl_frame_set_tag(product_frame,<span class="stringliteral">"table_example"</span> )) ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_TABLE)) ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>       <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">//    cpl_frameset_dump(framelist, stdout);</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     check(cpl_dfs_setup_product_header(plist,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                                        product_frame,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                                        framelist,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>                                        parlist,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>                                        <span class="stringliteral">"sinfo_utl_table_ex"</span>,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                                        <span class="stringliteral">"SINFONI"</span>,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     cpl_table_dump(tblResult, 0, 3, stdout);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     check(cpl_table_save(tblResult,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                         NULL, NULL,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                          name_o,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                          CPL_IO_DEFAULT), <span class="stringliteral">"Cannot save table"</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>  cleanup:</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span> </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     cpl_table_delete(tblSource);</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     cpl_table_delete(tblResult);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="comment">/* This is usually freed by esorex: but what about if errors occurs?</span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">    sinfo_free_frame(&product_frame) ;</span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">return</span> ((cpl_error_get_code()) ? -1 : 0 );</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__utl__table__test_8c_source.html b/html/sinfo__utl__table__test_8c_source.html
index 6f47cf8..5f93e85 100644
--- a/html/sinfo__utl__table__test_8c_source.html
+++ b/html/sinfo__utl__table__test_8c_source.html
@@ -2,1132 +2,1163 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_table_test.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_table_test.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_table_test.c,v 1.6 2012/03/03 10:38:03 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00036"></a>00036 <span class="comment">/* cpl */</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00038"></a>00038 <span class="comment">/* irplib */</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <irplib_utils.h></span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_tpl_utils.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_pfits.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_tpl_dfs.h></span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include <sinfo_msg.h></span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00046"></a>00046 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00047"></a>00047 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00048"></a>00048 <span class="preprocessor">#include <sinfo_recipes.h></span>
-<a name="l00049"></a>00049 <span class="preprocessor">#include <sinfo_function_1d.h></span>
-<a name="l00050"></a>00050 <span class="preprocessor">#include <sinfo_functions.h></span>
-<a name="l00051"></a>00051 <span class="preprocessor">#include <sinfo_fit.h></span>
-<a name="l00052"></a>00052 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00053"></a>00053 <span class="comment">                            Functions prototypes</span>
-<a name="l00054"></a>00054 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00055"></a>00055 
-<a name="l00056"></a>00056 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_create(cpl_plugin *) ;
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_exec(cpl_plugin *) ;
-<a name="l00058"></a>00058 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_destroy(cpl_plugin *) ;
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_shift(cpl_parameterlist *, cpl_frameset *) ;
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00062"></a>00062 sinfo_utl_table_test_amoeba_poly(cpl_parameterlist   *   parlist, 
-<a name="l00063"></a>00063              cpl_frameset        *   framelist);
-<a name="l00064"></a>00064 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00065"></a>00065 sinfo_utl_table_test_amoeba_boltzmann(cpl_parameterlist   *   parlist, 
-<a name="l00066"></a>00066              cpl_frameset        *   framelist);
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="keyword">static</span> cpl_vector* sa_vx=NULL;
-<a name="l00069"></a>00069 <span class="keyword">static</span> cpl_vector* sa_vy=NULL;
-<a name="l00070"></a>00070 
-<a name="l00071"></a>00071 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00072"></a>00072 sinfo_fit_boltzmann(<span class="keywordtype">double</span> p[]);
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 
-<a name="l00075"></a>00075 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l00076"></a>00076 sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], 
-<a name="l00077"></a>00077              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], 
-<a name="l00078"></a>00078              <span class="keywordtype">double</span> *result);
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00081"></a>00081 sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t);
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l00084"></a>00084 sinfo_fit_poly(<span class="keywordtype">double</span> p[]);;
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 <span class="keyword">static</span> cpl_table*
-<a name="l00087"></a>00087 sinfo_table_shift_column_spline3(cpl_table* t, 
-<a name="l00088"></a>00088                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00089"></a>00089                                  <span class="keyword">const</span> <span class="keywordtype">double</span> s);
-<a name="l00090"></a>00090 
-<a name="l00091"></a>00091 <span class="keyword">static</span> cpl_table*
-<a name="l00092"></a>00092 sinfo_table_shift_column_poly(cpl_table* t, 
-<a name="l00093"></a>00093                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00094"></a>00094                               <span class="keyword">const</span> <span class="keywordtype">double</span> s,
-<a name="l00095"></a>00095                               <span class="keyword">const</span> <span class="keywordtype">int</span> order);
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097 <span class="keyword">static</span> cpl_table*
-<a name="l00098"></a>00098 sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t, 
-<a name="l00099"></a>00099                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00100"></a>00100                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,
-<a name="l00101"></a>00101                                    <span class="keywordtype">double</span>* r);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103 <span class="keyword">static</span> cpl_table*
-<a name="l00104"></a>00104 sinfo_table_shift_simple(cpl_table* inp, 
-<a name="l00105"></a>00105                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00106"></a>00106                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift);
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108 <span class="preprocessor">#define NPOINT 1000</span>
-<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00110"></a>00110 <span class="comment">                            Static variables</span>
-<a name="l00111"></a>00111 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_table_test_description[] =
-<a name="l00114"></a>00114 <span class="stringliteral">"This recipe perform cubes combination.\n"</span>
-<a name="l00115"></a>00115 <span class="stringliteral">"The input files are several cubeses\n"</span>
-<a name="l00116"></a>00116 <span class="stringliteral">"their associated tags should be CUBE.\n"</span>
-<a name="l00117"></a>00117 <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes\n"</span>
-<a name="l00118"></a>00118 <span class="stringliteral">"accurding to the value of op where op indicates the operation to be \n"</span>
-<a name="l00119"></a>00119 <span class="stringliteral">"performed specified by the parameter sinfoni.sinfo_utl_table_test.op\n"</span>
-<a name="l00120"></a>00120 <span class="stringliteral">"Information on relevant parameters can be found with\n"</span>
-<a name="l00121"></a>00121 <span class="stringliteral">"esorex --params sinfo_utl_table_test\n"</span>
-<a name="l00122"></a>00122 <span class="stringliteral">"esorex --help sinfo_utl_table_test\n"</span>
-<a name="l00123"></a>00123 <span class="stringliteral">"\n"</span>;
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">                                Functions code</span>
-<a name="l00127"></a>00127 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00129"></a>00129 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00133"></a>00133 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00143"></a>00143 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00144"></a>00144 <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)
-<a name="l00145"></a>00145 {
-<a name="l00146"></a>00146     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;
-<a name="l00147"></a>00147     cpl_plugin  *   plugin = &recipe->interface ;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149     cpl_plugin_init(plugin,
-<a name="l00150"></a>00150                     CPL_PLUGIN_API,
-<a name="l00151"></a>00151                     SINFONI_BINARY_VERSION,
-<a name="l00152"></a>00152                     CPL_PLUGIN_TYPE_RECIPE,
-<a name="l00153"></a>00153                     <span class="stringliteral">"sinfo_utl_table_test"</span>,
-<a name="l00154"></a>00154                     <span class="stringliteral">"Combines a cube list in an output cube"</span>,
-<a name="l00155"></a>00155                     sinfo_utl_table_test_description,
-<a name="l00156"></a>00156                     <span class="stringliteral">"Andrea Modigliani"</span>,
-<a name="l00157"></a>00157                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,
-<a name="l00158"></a>00158                     sinfo_get_license(),
-<a name="l00159"></a>00159                     sinfo_utl_table_test_create,
-<a name="l00160"></a>00160                     sinfo_utl_table_test_exec,
-<a name="l00161"></a>00161                     sinfo_utl_table_test_destroy) ;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     cpl_pluginlist_append(list, plugin) ;
-<a name="l00164"></a>00164     
-<a name="l00165"></a>00165     <span class="keywordflow">return</span> 0;
-<a name="l00166"></a>00166 }
-<a name="l00167"></a>00167 
-<a name="l00168"></a>00168 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00177"></a>00177 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00178"></a>00178 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_create(cpl_plugin * plugin)
-<a name="l00179"></a>00179 {
-<a name="l00180"></a>00180     cpl_recipe      * recipe ;
-<a name="l00181"></a>00181     cpl_parameter   * p ;
-<a name="l00182"></a>00182 
-<a name="l00183"></a>00183     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00185"></a>00185         recipe = (cpl_recipe *)plugin ;
-<a name="l00186"></a>00186     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00187"></a>00187     cpl_error_reset();
-<a name="l00188"></a>00188     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span>
-<a name="l00191"></a>00191     recipe->parameters = cpl_parameterlist_new() ; 
-<a name="l00192"></a>00192 
-<a name="l00193"></a>00193     <span class="comment">/* Fill the parameters list */</span>
-<a name="l00194"></a>00194     <span class="comment">/* --stropt */</span>
-<a name="l00195"></a>00195     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>, 
-<a name="l00196"></a>00196                                 CPL_TYPE_STRING, 
-<a name="l00197"></a>00197                                 <span class="stringliteral">"Output filename"</span>, 
-<a name="l00198"></a>00198                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>,
-<a name="l00199"></a>00199                                 <span class="stringliteral">"sinfo_clean_mean"</span>);
-<a name="l00200"></a>00200     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;
-<a name="l00201"></a>00201     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203     <span class="comment">/* --doubleopt */</span>
-<a name="l00204"></a>00204     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>, 
-<a name="l00205"></a>00205                                 CPL_TYPE_DOUBLE, 
-<a name="l00206"></a>00206                                 <span class="stringliteral">"Shift"</span>, 
-<a name="l00207"></a>00207                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, 
-<a name="l00208"></a>00208                                 0.01) ;
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wshift"</span>) ;
-<a name="l00211"></a>00211     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213     <span class="comment">/* --doubleopt */</span>
-<a name="l00214"></a>00214     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>, 
-<a name="l00215"></a>00215                                 CPL_TYPE_DOUBLE, 
-<a name="l00216"></a>00216                                 <span class="stringliteral">"Shift"</span>, 
-<a name="l00217"></a>00217                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, 
-<a name="l00218"></a>00218                                 1.45) ;
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wstart"</span>) ;
-<a name="l00222"></a>00222     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225     <span class="comment">/* --doubleopt */</span>
-<a name="l00226"></a>00226     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>, 
-<a name="l00227"></a>00227                                 CPL_TYPE_DOUBLE, 
-<a name="l00228"></a>00228                                 <span class="stringliteral">"End Wavelength"</span>, 
-<a name="l00229"></a>00229                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, 
-<a name="l00230"></a>00230                                 2.45) ;
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wend"</span>) ;
-<a name="l00234"></a>00234     cpl_parameterlist_append(recipe->parameters, p) ;
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237     <span class="comment">/* Return */</span>
-<a name="l00238"></a>00238     <span class="keywordflow">return</span> 0;
-<a name="l00239"></a>00239 }
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00247"></a>00247 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00248"></a>00248 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_exec(cpl_plugin * plugin)
-<a name="l00249"></a>00249 {
-<a name="l00250"></a>00250     cpl_recipe  *   recipe ;
-<a name="l00251"></a>00251     <span class="keywordtype">int</span> status=0;
-<a name="l00252"></a>00252     cpl_errorstate initial_errorstate = cpl_errorstate_get();
-<a name="l00253"></a>00253 
-<a name="l00254"></a>00254     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00255"></a>00255     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00256"></a>00256         recipe = (cpl_recipe *)plugin ;
-<a name="l00257"></a>00257     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00258"></a>00258     status+=sinfo_utl_table_test_shift(recipe->parameters, recipe->frames);
-<a name="l00259"></a>00259     status+=sinfo_utl_table_test_amoeba_poly(recipe->parameters, 
-<a name="l00260"></a>00260                                              recipe->frames);
-<a name="l00261"></a>00261     status+=sinfo_utl_table_test_amoeba_boltzmann(recipe->parameters, 
-<a name="l00262"></a>00262                                                   recipe->frames);
-<a name="l00263"></a>00263    <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      
-<a name="l00264"></a>00264         <span class="comment">/* Dump the error history since recipe execution start.                </span>
-<a name="l00265"></a>00265 <span class="comment">           At this point the recipe cannot recover from the error */</span>           
-<a name="l00266"></a>00266         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
-<a name="l00267"></a>00267     } 
-<a name="l00268"></a>00268     <span class="keywordflow">return</span> status ;
-<a name="l00269"></a>00269 }
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00277"></a>00277 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00278"></a>00278 <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_destroy(cpl_plugin * plugin)
-<a name="l00279"></a>00279 {
-<a name="l00280"></a>00280     cpl_recipe  *   recipe ;
-<a name="l00281"></a>00281     
-<a name="l00282"></a>00282     <span class="comment">/* Get the recipe out of the plugin */</span>
-<a name="l00283"></a>00283     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) 
-<a name="l00284"></a>00284         recipe = (cpl_recipe *)plugin ;
-<a name="l00285"></a>00285     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;
-<a name="l00286"></a>00286 
-<a name="l00287"></a>00287     cpl_parameterlist_delete(recipe->parameters) ; 
-<a name="l00288"></a>00288     <span class="keywordflow">return</span> 0 ;
-<a name="l00289"></a>00289 }
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00299"></a>00299 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00300"></a>00300 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00301"></a>00301 sinfo_utl_table_test_shift(cpl_parameterlist   *   parlist, 
-<a name="l00302"></a>00302             cpl_frameset        *   framelist)
-<a name="l00303"></a>00303 {
-<a name="l00304"></a>00304 
-<a name="l00305"></a>00305   cpl_table* t=NULL;
-<a name="l00306"></a>00306   cpl_table* t_shift=NULL;
-<a name="l00307"></a>00307   <span class="keywordtype">int</span> np=NPOINT;
-<a name="l00308"></a>00308   cpl_parameter* p=NULL;
-<a name="l00309"></a>00309   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;
-<a name="l00310"></a>00310   <span class="keywordtype">double</span> ws=0;
-<a name="l00311"></a>00311   <span class="keywordtype">double</span> we=0;
-<a name="l00312"></a>00312   <span class="keywordtype">double</span> wd=0;
-<a name="l00313"></a>00313   <span class="keywordtype">double</span> wshift=0;
-<a name="l00314"></a>00314   <span class="keywordtype">double</span> pshift=0;
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l00317"></a>00317   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319   <span class="keywordtype">int</span> i=0;
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321   <span class="keywordtype">double</span> ra=0;
-<a name="l00322"></a>00322   <span class="keyword">const</span> <span class="keywordtype">double</span> pg=3.1415926535897932384626433832795;
-<a name="l00323"></a>00323   
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325   check(sinfo_dfs_set_groups(framelist),
-<a name="l00326"></a>00326          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328   <span class="comment">// read input parameters</span>
-<a name="l00329"></a>00329   check_nomsg(p=cpl_parameterlist_find(parlist, 
-<a name="l00330"></a>00330                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));
-<a name="l00331"></a>00331   check_nomsg(op=cpl_parameter_get_string(p));
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333 
-<a name="l00334"></a>00334   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00335"></a>00335                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));
-<a name="l00336"></a>00336   check_nomsg(ws=cpl_parameter_get_double(p)) ;
-<a name="l00337"></a>00337 
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339   wd=(we-ws)/np;
-<a name="l00340"></a>00340   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00341"></a>00341                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));
-<a name="l00342"></a>00342   check_nomsg(we=cpl_parameter_get_double(p)) ;
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00345"></a>00345                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));
-<a name="l00346"></a>00346   check_nomsg(wshift=cpl_parameter_get_double(p)) ;
-<a name="l00347"></a>00347   
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349 
-<a name="l00350"></a>00350   <span class="comment">// create the table</span>
-<a name="l00351"></a>00351   check_nomsg(t=cpl_table_new(np));
-<a name="l00352"></a>00352   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));
-<a name="l00353"></a>00353   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l00354"></a>00354   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));
-<a name="l00355"></a>00355   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));
-<a name="l00358"></a>00358   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l00363"></a>00363     pw[i]=ws+i*wd;
-<a name="l00364"></a>00364     ra=(double)i/(<span class="keywordtype">double</span>)np*6.*pg;
-<a name="l00365"></a>00365     pi[i]=cos(ra);
-<a name="l00366"></a>00366   }
-<a name="l00367"></a>00367   pshift=wshift/wd;
-<a name="l00368"></a>00368   check_nomsg(cpl_table_save(t, NULL, NULL, <span class="stringliteral">"out_cosine.fits"</span>, 0));
-<a name="l00369"></a>00369   <span class="comment">/*</span>
-<a name="l00370"></a>00370 <span class="comment">  sinfo_msg("shift1");</span>
-<a name="l00371"></a>00371 <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_int(t, "INT", pshift,&wrest));</span>
-<a name="l00372"></a>00372 <span class="comment">  check_nomsg(cpl_table_save(t_shift,NULL,NULL,"out_cosine_shift1.fits", 0));</span>
-<a name="l00373"></a>00373 <span class="comment">  sinfo_msg("shift2");</span>
-<a name="l00374"></a>00374 <span class="comment">  sinfo_free_table(&t_shift);</span>
-<a name="l00375"></a>00375 <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_poly(t,"INT", pshift,2));</span>
-<a name="l00376"></a>00376 <span class="comment">  check_nomsg(cpl_table_save(t_shift,NULL,NULL,"out_cosine_shift2.fits", 0));</span>
-<a name="l00377"></a>00377 <span class="comment">  sinfo_msg("shift3");</span>
-<a name="l00378"></a>00378 <span class="comment">  sinfo_free_table(&t_shift);</span>
-<a name="l00379"></a>00379 <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_spline3(t_shift,"INT",pshift));</span>
-<a name="l00380"></a>00380 <span class="comment"></span>
-<a name="l00381"></a>00381 <span class="comment">  */</span>
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383   check_nomsg(t_shift=sinfo_table_shift_simple(t,<span class="stringliteral">"INT"</span>,pshift));
-<a name="l00384"></a>00384   check_nomsg(cpl_table_save(t_shift,NULL,NULL, <span class="stringliteral">"out_cosine_shift3.fits"</span>, 0));
-<a name="l00385"></a>00385   sinfo_free_table(&t);
-<a name="l00386"></a>00386 
-<a name="l00387"></a>00387   <span class="keywordflow">return</span> -1;
-<a name="l00388"></a>00388  cleanup:
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390   sinfo_free_table(&t);
-<a name="l00391"></a>00391   <span class="keywordflow">return</span> -1;
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393 
-<a name="l00394"></a>00394 }
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397 
-<a name="l00398"></a>00398 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00405"></a>00405 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00406"></a>00406 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00407"></a>00407 sinfo_utl_table_test_amoeba_poly(cpl_parameterlist   *   parlist, 
-<a name="l00408"></a>00408             cpl_frameset        *   framelist)
-<a name="l00409"></a>00409 {
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411   cpl_table* t=NULL;
-<a name="l00412"></a>00412   <span class="keywordtype">int</span> np=NPOINT;
-<a name="l00413"></a>00413   cpl_parameter* p=NULL;
-<a name="l00414"></a>00414   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;
-<a name="l00415"></a>00415   <span class="keywordtype">double</span> ws=0;
-<a name="l00416"></a>00416   <span class="keywordtype">double</span> we=0;
-<a name="l00417"></a>00417   <span class="keywordtype">double</span> wd=0;
-<a name="l00418"></a>00418   <span class="keywordtype">double</span> wshift=0;
-<a name="l00419"></a>00419 
-<a name="l00420"></a>00420   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l00421"></a>00421   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l00422"></a>00422   <span class="keywordtype">double</span>* pf=NULL;
-<a name="l00423"></a>00423   <span class="keywordtype">int</span> i=0;
-<a name="l00424"></a>00424   <span class="keywordtype">int</span> j=0;
-<a name="l00425"></a>00425   <span class="keywordtype">double</span> a[3];
-<a name="l00426"></a>00426   <span class="keywordtype">double</span> p0[3];
-<a name="l00427"></a>00427 
-<a name="l00428"></a>00428   
-<a name="l00429"></a>00429   <span class="comment">// Amoeba fit:</span>
-<a name="l00430"></a>00430   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;
-<a name="l00431"></a>00431   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;
-<a name="l00432"></a>00432   <span class="keywordtype">double</span> y[MP];
-<a name="l00433"></a>00433   <span class="keywordtype">double</span>** ap=NULL;
-<a name="l00434"></a>00434   <span class="keywordtype">double</span> FTOL=2e-6;
-<a name="l00435"></a>00435   <span class="keywordtype">int</span> nfunc=0;
-<a name="l00436"></a>00436 
-<a name="l00437"></a>00437   check(sinfo_dfs_set_groups(framelist),
-<a name="l00438"></a>00438          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00439"></a>00439 
-<a name="l00440"></a>00440   <span class="comment">// read input parameters</span>
-<a name="l00441"></a>00441   check_nomsg(p=cpl_parameterlist_find(parlist, 
-<a name="l00442"></a>00442                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));
-<a name="l00443"></a>00443   check_nomsg(op=cpl_parameter_get_string(p));
-<a name="l00444"></a>00444 
-<a name="l00445"></a>00445 
-<a name="l00446"></a>00446   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00447"></a>00447                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));
-<a name="l00448"></a>00448   check_nomsg(ws=cpl_parameter_get_double(p)) ;
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 
-<a name="l00451"></a>00451   wd=(we-ws)/np;
-<a name="l00452"></a>00452   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00453"></a>00453                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));
-<a name="l00454"></a>00454   check_nomsg(we=cpl_parameter_get_double(p)) ;
-<a name="l00455"></a>00455 
-<a name="l00456"></a>00456   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00457"></a>00457                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));
-<a name="l00458"></a>00458   check_nomsg(wshift=cpl_parameter_get_double(p)) ;
-<a name="l00459"></a>00459   
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461   <span class="comment">//Prepare a template function (polynomial)</span>
-<a name="l00462"></a>00462   check_nomsg(t=cpl_table_new(np));
-<a name="l00463"></a>00463   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));
-<a name="l00464"></a>00464   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l00465"></a>00465   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));
-<a name="l00466"></a>00466   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));
-<a name="l00469"></a>00469   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));
-<a name="l00470"></a>00470   ws=-2.;
-<a name="l00471"></a>00471   we=+4.;
-<a name="l00472"></a>00472   a[0]=+1.;
-<a name="l00473"></a>00473   a[1]=-2.;
-<a name="l00474"></a>00474   a[2]=1.;
-<a name="l00475"></a>00475   wd=(we-ws)/np;
-<a name="l00476"></a>00476   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l00477"></a>00477     pw[i]=ws+i*wd;
-<a name="l00478"></a>00478     <span class="comment">//pi[i]=(pw[i]-a[0])*(pw[i]-a[0])+1.*rand()/RAND_MAX;</span>
-<a name="l00479"></a>00479     pi[i]=a[0]+a[1]*pw[i]+a[2]*pw[i]*pw[i]+1.*rand()/RAND_MAX;
-<a name="l00480"></a>00480   }
-<a name="l00481"></a>00481 
-<a name="l00482"></a>00482 
-<a name="l00483"></a>00483   sa_vx=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));
-<a name="l00484"></a>00484   sa_vy=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));
-<a name="l00485"></a>00485   <span class="comment">// Amoeba part</span>
-<a name="l00486"></a>00486   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));
-<a name="l00487"></a>00487   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00488"></a>00488     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00489"></a>00489   }
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00492"></a>00492     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00493"></a>00493       ap[i][j]=0;
-<a name="l00494"></a>00494     }
-<a name="l00495"></a>00495   }
-<a name="l00496"></a>00496   <span class="comment">//ap[0][0]=-5;</span>
-<a name="l00497"></a>00497   <span class="comment">//ap[1][0]=-2;</span>
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499   ap[0][0]=-3; ap[0][1]=-3; ap[0][2]=-3;
-<a name="l00500"></a>00500   ap[1][0]=+3; ap[1][1]=-3; ap[1][2]=-3;
-<a name="l00501"></a>00501   ap[2][0]=+3; ap[2][1]=+3; ap[2][2]=-3;
-<a name="l00502"></a>00502   ap[3][0]=+3; ap[3][1]=-3; ap[3][2]=+3;
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);
-<a name="l00505"></a>00505   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00506"></a>00506     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00507"></a>00507       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l00508"></a>00508     }
-<a name="l00509"></a>00509   }
-<a name="l00510"></a>00510 
-<a name="l00511"></a>00511   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00512"></a>00512     p0[0]=ap[i][0]; 
-<a name="l00513"></a>00513     p0[1]=ap[i][1]; 
-<a name="l00514"></a>00514     p0[2]=ap[i][2];
-<a name="l00515"></a>00515     y[i]=sinfo_fit_poly(p0);
-<a name="l00516"></a>00516   }
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518   sinfo_fit_amoeba(ap,y,NP,FTOL,sinfo_fit_poly,&nfunc);
-<a name="l00519"></a>00519 
-<a name="l00520"></a>00520   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);
-<a name="l00521"></a>00521   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00522"></a>00522     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00523"></a>00523       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l00524"></a>00524     }
-<a name="l00525"></a>00525   }
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"FIT"</span>,CPL_TYPE_DOUBLE));
-<a name="l00528"></a>00528   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"FIT"</span>,0,np,0));
-<a name="l00529"></a>00529   check_nomsg(pf=cpl_table_get_data_double(t,<span class="stringliteral">"FIT"</span>));
-<a name="l00530"></a>00530 
-<a name="l00531"></a>00531   wd=(we-ws)/np;
-<a name="l00532"></a>00532   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l00533"></a>00533     pw[i]=ws+i*wd;
-<a name="l00534"></a>00534     pf[i]=ap[0][0]+ap[0][1]*pw[i]+ap[0][2]*pw[i]*pw[i];
-<a name="l00535"></a>00535   }
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537   check_nomsg(cpl_table_save(t,NULL,NULL, <span class="stringliteral">"out_amoeba_poly.fits"</span>, 0));
-<a name="l00538"></a>00538   cpl_vector_unwrap(sa_vx);
-<a name="l00539"></a>00539   cpl_vector_unwrap(sa_vy);
-<a name="l00540"></a>00540 
-<a name="l00541"></a>00541   sinfo_free_table(&t);
-<a name="l00542"></a>00542   <span class="keywordflow">return</span> -1;
-<a name="l00543"></a>00543  cleanup:
-<a name="l00544"></a>00544   cpl_vector_unwrap(sa_vx);
-<a name="l00545"></a>00545   cpl_vector_unwrap(sa_vy);
-<a name="l00546"></a>00546 
-<a name="l00547"></a>00547   sinfo_free_table(&t);
-<a name="l00548"></a>00548   <span class="keywordflow">return</span> -1;
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551 }
-<a name="l00552"></a>00552 
-<a name="l00553"></a>00553 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00560"></a>00560 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00561"></a>00561 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00562"></a>00562 sinfo_utl_table_test_amoeba_boltzmann(cpl_parameterlist   *   parlist, 
-<a name="l00563"></a>00563                        cpl_frameset        *   framelist)
-<a name="l00564"></a>00564 {
-<a name="l00565"></a>00565 
-<a name="l00566"></a>00566   cpl_table* t=NULL;
-<a name="l00567"></a>00567   <span class="keywordtype">int</span> np=NPOINT;
-<a name="l00568"></a>00568   cpl_parameter* p=NULL;
-<a name="l00569"></a>00569   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;
-<a name="l00570"></a>00570   <span class="keywordtype">double</span> ws=0;
-<a name="l00571"></a>00571   <span class="keywordtype">double</span> we=0;
-<a name="l00572"></a>00572   <span class="keywordtype">double</span> wd=0;
-<a name="l00573"></a>00573   <span class="keywordtype">double</span> wshift=0;
-<a name="l00574"></a>00574 
-<a name="l00575"></a>00575   <span class="keywordtype">double</span>* pw=NULL;
-<a name="l00576"></a>00576   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l00577"></a>00577   <span class="keywordtype">double</span>* pf=NULL;
-<a name="l00578"></a>00578   <span class="keywordtype">int</span> i=0;
-<a name="l00579"></a>00579   <span class="keywordtype">int</span> j=0;
-<a name="l00580"></a>00580   <span class="keywordtype">double</span> a[3];
-<a name="l00581"></a>00581   <span class="keywordtype">double</span> p0[3];
-<a name="l00582"></a>00582 
-<a name="l00583"></a>00583   
-<a name="l00584"></a>00584   <span class="comment">// Amoeba fit:</span>
-<a name="l00585"></a>00585   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;
-<a name="l00586"></a>00586   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;
-<a name="l00587"></a>00587   <span class="keywordtype">double</span> y[MP];
-<a name="l00588"></a>00588   <span class="keywordtype">double</span>** ap=NULL;
-<a name="l00589"></a>00589   <span class="keywordtype">double</span> FTOL=2e-6;
-<a name="l00590"></a>00590   <span class="keywordtype">int</span> nfunc=0;
-<a name="l00591"></a>00591   <span class="keywordtype">double</span> max=0;
-<a name="l00592"></a>00592 
-<a name="l00593"></a>00593   <span class="keywordtype">double</span> bkg_min=0;
-<a name="l00594"></a>00594   <span class="keywordtype">double</span> bkg_max=0;
-<a name="l00595"></a>00595   <span class="keywordtype">double</span> p0_min=0;
-<a name="l00596"></a>00596   <span class="keywordtype">double</span> p0_max=0;
-<a name="l00597"></a>00597   <span class="keywordtype">double</span> p1_min=0;
-<a name="l00598"></a>00598   <span class="keywordtype">double</span> p1_max=0;
-<a name="l00599"></a>00599   <span class="keywordtype">double</span> p2_min=0;
-<a name="l00600"></a>00600   <span class="keywordtype">double</span> p2_max=0;
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602 
-<a name="l00603"></a>00603   check(sinfo_dfs_set_groups(framelist),
-<a name="l00604"></a>00604          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00605"></a>00605 
-<a name="l00606"></a>00606   <span class="comment">// read input parameters</span>
-<a name="l00607"></a>00607   check_nomsg(p=cpl_parameterlist_find(parlist, 
-<a name="l00608"></a>00608                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));
-<a name="l00609"></a>00609   check_nomsg(op=cpl_parameter_get_string(p));
-<a name="l00610"></a>00610 
-<a name="l00611"></a>00611 
-<a name="l00612"></a>00612   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00613"></a>00613                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));
-<a name="l00614"></a>00614   check_nomsg(ws=cpl_parameter_get_double(p)) ;
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616 
-<a name="l00617"></a>00617   wd=(we-ws)/np;
-<a name="l00618"></a>00618   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00619"></a>00619                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));
-<a name="l00620"></a>00620   check_nomsg(we=cpl_parameter_get_double(p)) ;
-<a name="l00621"></a>00621 
-<a name="l00622"></a>00622   check_nomsg(p=cpl_parameterlist_find(parlist,
-<a name="l00623"></a>00623                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));
-<a name="l00624"></a>00624   check_nomsg(wshift=cpl_parameter_get_double(p)) ;
-<a name="l00625"></a>00625   
-<a name="l00626"></a>00626 
-<a name="l00627"></a>00627   <span class="comment">//Prepare a template function (polynomial)</span>
-<a name="l00628"></a>00628   check_nomsg(t=cpl_table_new(np));
-<a name="l00629"></a>00629   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));
-<a name="l00630"></a>00630   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));
-<a name="l00631"></a>00631   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));
-<a name="l00632"></a>00632   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));
-<a name="l00633"></a>00633 
-<a name="l00634"></a>00634   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));
-<a name="l00635"></a>00635   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));
-<a name="l00636"></a>00636   ws=1.4;
-<a name="l00637"></a>00637   we=2.5;
-<a name="l00638"></a>00638   wd=(we-ws)/np;
-<a name="l00639"></a>00639   a[2]=280;
-<a name="l00640"></a>00640   a[1]=55.817665;
-<a name="l00641"></a>00641   a[0]=548.77802;
-<a name="l00642"></a>00642   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l00643"></a>00643     pw[i]=ws+i*wd;
-<a name="l00644"></a>00644     pi[i]=sinfo_fac(pw[i],a[2])*(1.+0.1*rand()/RAND_MAX);
-<a name="l00645"></a>00645   }
-<a name="l00646"></a>00646   check_nomsg(max=cpl_table_get_column_max(t,<span class="stringliteral">"INT"</span>));
-<a name="l00647"></a>00647   check_nomsg(cpl_table_duplicate_column(t,<span class="stringliteral">"THERMAL"</span>,t,<span class="stringliteral">"INT"</span>));
-<a name="l00648"></a>00648   check_nomsg(cpl_table_divide_scalar(t,<span class="stringliteral">"THERMAL"</span>,max));
-<a name="l00649"></a>00649   check_nomsg(cpl_table_multiply_scalar(t,<span class="stringliteral">"THERMAL"</span>,a[1]));
-<a name="l00650"></a>00650   check_nomsg(cpl_table_add_scalar(t,<span class="stringliteral">"THERMAL"</span>,a[0]));
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652   check_nomsg(sa_vx=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>)));
-<a name="l00653"></a>00653   check_nomsg(sa_vy=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"THERMAL"</span>)));
-<a name="l00654"></a>00654   <span class="comment">// Amoeba part</span>
-<a name="l00655"></a>00655   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));
-<a name="l00656"></a>00656   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00657"></a>00657     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l00658"></a>00658   }
-<a name="l00659"></a>00659 
-<a name="l00660"></a>00660   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00661"></a>00661     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00662"></a>00662       ap[i][j]=0;
-<a name="l00663"></a>00663     }
-<a name="l00664"></a>00664   }
-<a name="l00665"></a>00665   <span class="comment">//ap[0][0]=-5;</span>
-<a name="l00666"></a>00666   <span class="comment">//ap[1][0]=-2;</span>
-<a name="l00667"></a>00667   bkg_min=cpl_table_get_column_min(t,<span class="stringliteral">"THERMAL"</span>);
-<a name="l00668"></a>00668   bkg_max=cpl_table_get_column_max(t,<span class="stringliteral">"THERMAL"</span>);
-<a name="l00669"></a>00669 
-<a name="l00670"></a>00670   p0_min=bkg_min/2;
-<a name="l00671"></a>00671   p0_max=bkg_min*2;
-<a name="l00672"></a>00672   p1_min=bkg_min/2.;
-<a name="l00673"></a>00673   p1_max=bkg_max*2;
-<a name="l00674"></a>00674   p1_min=200;
-<a name="l00675"></a>00675   p2_max=300;
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677   ap[0][0]=p0_min; ap[0][1]=p1_min; ap[0][2]=p2_min;
-<a name="l00678"></a>00678   ap[1][0]=p0_max; ap[1][1]=p1_min; ap[1][2]=p2_min;
-<a name="l00679"></a>00679   ap[2][0]=p0_min; ap[2][1]=p1_max; ap[2][2]=p2_min;
-<a name="l00680"></a>00680   ap[3][0]=p0_min; ap[3][1]=p1_min; ap[3][2]=p2_max;
-<a name="l00681"></a>00681 
-<a name="l00682"></a>00682   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);
-<a name="l00683"></a>00683   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00684"></a>00684     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00685"></a>00685       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l00686"></a>00686     }
-<a name="l00687"></a>00687   }
-<a name="l00688"></a>00688 
-<a name="l00689"></a>00689   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00690"></a>00690     p0[0]=ap[i][0]; 
-<a name="l00691"></a>00691     p0[1]=ap[i][1]; 
-<a name="l00692"></a>00692     p0[2]=ap[i][2];
-<a name="l00693"></a>00693     y[i]=sinfo_fit_boltzmann(p0);
-<a name="l00694"></a>00694   }
-<a name="l00695"></a>00695 
-<a name="l00696"></a>00696   sinfo_fit_amoeba(ap,y,NP,FTOL,sinfo_fit_boltzmann,&nfunc);
-<a name="l00697"></a>00697 
-<a name="l00698"></a>00698   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);
-<a name="l00699"></a>00699   <span class="keywordflow">for</span>(i=0;i<MP;i++) {
-<a name="l00700"></a>00700     <span class="keywordflow">for</span>(j=0;j<NP;j++) {
-<a name="l00701"></a>00701       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);
-<a name="l00702"></a>00702     }
-<a name="l00703"></a>00703   }
-<a name="l00704"></a>00704 
-<a name="l00705"></a>00705   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"FIT"</span>,CPL_TYPE_DOUBLE));
-<a name="l00706"></a>00706   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"FIT"</span>,0,np,0));
-<a name="l00707"></a>00707   check_nomsg(pf=cpl_table_get_data_double(t,<span class="stringliteral">"FIT"</span>));
-<a name="l00708"></a>00708 
-<a name="l00709"></a>00709   wd=(we-ws)/np;
-<a name="l00710"></a>00710   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l00711"></a>00711     pw[i]=ws+i*wd;
-<a name="l00712"></a>00712     pf[i]=sinfo_fac(pw[i],ap[0][2]);
-<a name="l00713"></a>00713   }
-<a name="l00714"></a>00714   check_nomsg(max=cpl_table_get_column_max(t,<span class="stringliteral">"FIT"</span>));
-<a name="l00715"></a>00715   check_nomsg(cpl_table_divide_scalar(t,<span class="stringliteral">"FIT"</span>,max));
-<a name="l00716"></a>00716   check_nomsg(cpl_table_multiply_scalar(t,<span class="stringliteral">"FIT"</span>,ap[0][1]));
-<a name="l00717"></a>00717   check_nomsg(cpl_table_add_scalar(t,<span class="stringliteral">"FIT"</span>,ap[0][0]));
-<a name="l00718"></a>00718 
-<a name="l00719"></a>00719   check_nomsg(cpl_table_save(t,NULL,NULL, <span class="stringliteral">"out_amoeba_boltzmann.fits"</span>, 0));
-<a name="l00720"></a>00720 
-<a name="l00721"></a>00721 
-<a name="l00722"></a>00722  cleanup:
-<a name="l00723"></a>00723 
-<a name="l00724"></a>00724   cpl_vector_unwrap(sa_vx);
-<a name="l00725"></a>00725   cpl_vector_unwrap(sa_vy);
-<a name="l00726"></a>00726   sinfo_free_table(&t);
-<a name="l00727"></a>00727 
-<a name="l00728"></a>00728   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00729"></a>00729     <span class="keywordflow">return</span> -1;
-<a name="l00730"></a>00730   } <span class="keywordflow">else</span> {
-<a name="l00731"></a>00731     <span class="keywordflow">return</span> 0;
-<a name="l00732"></a>00732   }
-<a name="l00733"></a>00733 
-<a name="l00734"></a>00734 
-<a name="l00735"></a>00735 
-<a name="l00736"></a>00736 }
-<a name="l00737"></a>00737 
-<a name="l00738"></a>00738 
-<a name="l00739"></a>00739 <span class="keyword">static</span> cpl_table*
-<a name="l00740"></a>00740 sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t, 
-<a name="l00741"></a>00741                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00742"></a>00742                              <span class="keyword">const</span> <span class="keywordtype">double</span> s, 
-<a name="l00743"></a>00743                                    <span class="keywordtype">double</span>* r)
-<a name="l00744"></a>00744 {
-<a name="l00745"></a>00745   cpl_table* out=NULL;
-<a name="l00746"></a>00746   <span class="keywordtype">int</span> is=(int)s;
-<a name="l00747"></a>00747   <span class="keywordtype">int</span> nrow=0;
-<a name="l00748"></a>00748   <span class="keywordtype">int</span> i=0;
-<a name="l00749"></a>00749 
-<a name="l00750"></a>00750   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l00751"></a>00751   <span class="keywordtype">double</span>* po=NULL;
-<a name="l00752"></a>00752 
-<a name="l00753"></a>00753   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00754"></a>00754   out=cpl_table_duplicate(t);
-<a name="l00755"></a>00755   *r=s-is;
-<a name="l00756"></a>00756   nrow=cpl_table_get_nrow(t);
-<a name="l00757"></a>00757   pi=cpl_table_get_data_double(t,col);
-<a name="l00758"></a>00758   po=cpl_table_get_data_double(out,col);
-<a name="l00759"></a>00759   sinfo_msg(<span class="stringliteral">"shifting of  %d pixels"</span>,is);
-<a name="l00760"></a>00760   <span class="keywordflow">if</span>(is > 0 ) {
-<a name="l00761"></a>00761     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00762"></a>00762       <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {
-<a name="l00763"></a>00763     po[i-is]=pi[i];
-<a name="l00764"></a>00764       }
-<a name="l00765"></a>00765     }
-<a name="l00766"></a>00766   } <span class="keywordflow">else</span> {
-<a name="l00767"></a>00767     <span class="keywordflow">for</span>(i=nrow-1;i>-1;i--) {
-<a name="l00768"></a>00768       <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {
-<a name="l00769"></a>00769     po[i-is]=pi[i];
-<a name="l00770"></a>00770       }
-<a name="l00771"></a>00771     }
-<a name="l00772"></a>00772   }
-<a name="l00773"></a>00773   <span class="keywordflow">return</span> out;
-<a name="l00774"></a>00774  cleanup:
-<a name="l00775"></a>00775   sinfo_free_table(&out);
-<a name="l00776"></a>00776   <span class="keywordflow">return</span> NULL;
-<a name="l00777"></a>00777 
-<a name="l00778"></a>00778 }
-<a name="l00779"></a>00779 
-<a name="l00780"></a>00780 
-<a name="l00781"></a>00781 
-<a name="l00782"></a>00782 <span class="keyword">static</span> cpl_table*
-<a name="l00783"></a>00783 sinfo_table_shift_column_poly(cpl_table* t, 
-<a name="l00784"></a>00784                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00785"></a>00785                               <span class="keyword">const</span> <span class="keywordtype">double</span> shift,
-<a name="l00786"></a>00786                               <span class="keyword">const</span> <span class="keywordtype">int</span> order)
-<a name="l00787"></a>00787 {
-<a name="l00788"></a>00788   cpl_table* out=NULL;
-<a name="l00789"></a>00789   <span class="keywordtype">int</span> nrow=0;
-<a name="l00790"></a>00790   <span class="keywordtype">int</span> i=0;
-<a name="l00791"></a>00791   <span class="keywordtype">int</span> flag=0;
-<a name="l00792"></a>00792   <span class="keywordtype">int</span> n_points=0;
-<a name="l00793"></a>00793   <span class="keywordtype">int</span> firstpos=0;
-<a name="l00794"></a>00794   <span class="keywordtype">int</span> z=0;
-<a name="l00795"></a>00795   <span class="keywordtype">float</span> eval=0;
-<a name="l00796"></a>00796   <span class="keywordtype">float</span> sum=0;
-<a name="l00797"></a>00797   <span class="keywordtype">float</span> new_sum=0;
-<a name="l00798"></a>00798   <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00799"></a>00799   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00800"></a>00800   <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l00801"></a>00801   <span class="keywordtype">float</span>* corrected_spec=NULL ;
-<a name="l00802"></a>00802   <span class="keywordtype">float</span>* xnum=NULL ;
-<a name="l00803"></a>00803   <span class="keywordtype">float</span>* tableptr=NULL;
-<a name="l00804"></a>00804 
-<a name="l00805"></a>00805   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00806"></a>00806   <span class="keywordflow">if</span> ( order <= 0 ) {
-<a name="l00807"></a>00807     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;
-<a name="l00808"></a>00808     <span class="keywordflow">goto</span> cleanup;
-<a name="l00809"></a>00809   }
-<a name="l00810"></a>00810 
-<a name="l00811"></a>00811   out=cpl_table_duplicate(t);
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813   nrow=cpl_table_get_nrow(t);
-<a name="l00814"></a>00814   cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);
-<a name="l00815"></a>00815   cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);
-<a name="l00816"></a>00816   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);
-<a name="l00817"></a>00817   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);
-<a name="l00818"></a>00818 
-<a name="l00819"></a>00819   n_points = order + 1 ;
-<a name="l00820"></a>00820   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {
-<a name="l00821"></a>00821     firstpos = (int)(n_points/2) - 1 ;
-<a name="l00822"></a>00822   } <span class="keywordflow">else</span> {
-<a name="l00823"></a>00823     firstpos = (int)(n_points/2) ;
-<a name="l00824"></a>00824   }
-<a name="l00825"></a>00825   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00826"></a>00826   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00827"></a>00827   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00828"></a>00828   <span class="comment">/* fill the xa[] array for the polint function */</span>
-<a name="l00829"></a>00829   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {
-<a name="l00830"></a>00830     xnum[i] = i ;
-<a name="l00831"></a>00831   }
-<a name="l00832"></a>00832 
-<a name="l00833"></a>00833 
-<a name="l00834"></a>00834   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l00835"></a>00835     corrected_spec[i] = 0. ;
-<a name="l00836"></a>00836   }
-<a name="l00837"></a>00837 
-<a name="l00838"></a>00838   sum = 0. ;
-<a name="l00839"></a>00839   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00840"></a>00840     spec[z] = pi[z] ;
-<a name="l00841"></a>00841     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l00842"></a>00842       spec[z] = 0. ;
-<a name="l00843"></a>00843                   
-<a name="l00844"></a>00844       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {
-<a name="l00845"></a>00845     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00846"></a>00846     <span class="keywordflow">if</span> ( i >= nrow) continue  ;
-<a name="l00847"></a>00847     corrected_spec[i] = ZERO ;
-<a name="l00848"></a>00848       }
-<a name="l00849"></a>00849     }
-<a name="l00850"></a>00850     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {
-<a name="l00851"></a>00851       sum += spec[z] ;
-<a name="l00852"></a>00852     }
-<a name="l00853"></a>00853   }
-<a name="l00854"></a>00854 
-<a name="l00855"></a>00855   new_sum = 0. ;
-<a name="l00856"></a>00856   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00857"></a>00857     <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l00858"></a>00858 <span class="comment">     * now determine the arrays of size n_points with which the</span>
-<a name="l00859"></a>00859 <span class="comment">     * polynom is determined and determine the position eval</span>
-<a name="l00860"></a>00860 <span class="comment">     * where the polynom is evaluated in polynomial interpolation.</span>
-<a name="l00861"></a>00861 <span class="comment">     * Take care of the points near the row edges!</span>
-<a name="l00862"></a>00862 <span class="comment">     */</span>
-<a name="l00863"></a>00863     <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;
-<a name="l00864"></a>00864     <span class="keywordflow">if</span> ( z - firstpos < 0 ) {
-<a name="l00865"></a>00865       tableptr = &spec[0] ;
-<a name="l00866"></a>00866       eval     = shift + z ;
-<a name="l00867"></a>00867     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= nrow ) {
-<a name="l00868"></a>00868       tableptr = &spec[nrow - n_points] ;
-<a name="l00869"></a>00869       eval     = shift + z + n_points - nrow ;
-<a name="l00870"></a>00870     } <span class="keywordflow">else</span> {
-<a name="l00871"></a>00871       tableptr = &spec[z-firstpos] ;
-<a name="l00872"></a>00872       eval     = shift + firstpos ;
-<a name="l00873"></a>00873     }
-<a name="l00874"></a>00874 
-<a name="l00875"></a>00875     flag=0;
-<a name="l00876"></a>00876     corrected_spec[z]=sinfo_new_nev_ille(xnum,tableptr,order,eval,&flag);
-<a name="l00877"></a>00877     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {
-<a name="l00878"></a>00878       new_sum += corrected_spec[z] ;
-<a name="l00879"></a>00879     }
-<a name="l00880"></a>00880   }
-<a name="l00881"></a>00881 
-<a name="l00882"></a>00882   <span class="comment">/* fill the output spectrum */</span>
-<a name="l00883"></a>00883   <span class="keywordflow">for</span> (z = 0 ; z < nrow ; z++ ) {
-<a name="l00884"></a>00884     <span class="keywordflow">if</span> ( new_sum == 0. ) {
-<a name="l00885"></a>00885       new_sum = 1. ;
-<a name="l00886"></a>00886     }
-<a name="l00887"></a>00887     <span class="keywordflow">if</span> ( z == 0 ) {
-<a name="l00888"></a>00888       po[z] = ZERO ;
-<a name="l00889"></a>00889     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == nrow - 1 ) {
-<a name="l00890"></a>00890       po[z] = ZERO ;
-<a name="l00891"></a>00891     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00892"></a>00892       po[z] = ZERO ;
-<a name="l00893"></a>00893     } <span class="keywordflow">else</span> {
-<a name="l00894"></a>00894       corrected_spec[z] *= sum / new_sum ;
-<a name="l00895"></a>00895       po[z] = corrected_spec[z] ;
-<a name="l00896"></a>00896     }
-<a name="l00897"></a>00897   }
-<a name="l00898"></a>00898   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));
-<a name="l00899"></a>00899   check_nomsg(cpl_table_erase_column(out,col));
-<a name="l00900"></a>00900   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));
-<a name="l00901"></a>00901   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));
-<a name="l00902"></a>00902 
-<a name="l00903"></a>00903   sinfo_free_float(&spec) ;
-<a name="l00904"></a>00904   sinfo_free_float(&corrected_spec) ;
-<a name="l00905"></a>00905   sinfo_free_float(&xnum) ;
-<a name="l00906"></a>00906 
-<a name="l00907"></a>00907   <span class="keywordflow">return</span> out;
-<a name="l00908"></a>00908  cleanup:
-<a name="l00909"></a>00909 
-<a name="l00910"></a>00910 
-<a name="l00911"></a>00911   sinfo_free_float(&spec) ;
-<a name="l00912"></a>00912   sinfo_free_float(&corrected_spec) ;
-<a name="l00913"></a>00913   sinfo_free_float(&xnum) ;
-<a name="l00914"></a>00914   sinfo_free_table(&out);
-<a name="l00915"></a>00915   <span class="keywordflow">return</span> NULL;
-<a name="l00916"></a>00916 
-<a name="l00917"></a>00917 
-<a name="l00918"></a>00918 }
-<a name="l00919"></a>00919 
-<a name="l00920"></a>00920 
-<a name="l00921"></a>00921 
-<a name="l00922"></a>00922 
-<a name="l00923"></a>00923 <span class="keyword">static</span> cpl_table*
-<a name="l00924"></a>00924 sinfo_table_shift_column_spline3(cpl_table* t, 
-<a name="l00925"></a>00925                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l00926"></a>00926                                  <span class="keyword">const</span> <span class="keywordtype">double</span> shift)
-<a name="l00927"></a>00927 {
-<a name="l00928"></a>00928   cpl_table* out=NULL;
-<a name="l00929"></a>00929   <span class="keywordtype">int</span> nrow=0;
-<a name="l00930"></a>00930   <span class="keywordtype">int</span> i=0;
-<a name="l00931"></a>00931   <span class="keywordtype">int</span> z=0;
-<a name="l00932"></a>00932 
-<a name="l00933"></a>00933   <span class="keywordtype">float</span> sum=0;
-<a name="l00934"></a>00934   <span class="keywordtype">float</span> new_sum=0;
-<a name="l00935"></a>00935 
-<a name="l00936"></a>00936   <span class="keywordtype">float</span>* pi=NULL;
-<a name="l00937"></a>00937   <span class="keywordtype">float</span>* po=NULL;
-<a name="l00938"></a>00938   <span class="keywordtype">float</span>* eval=NULL;
-<a name="l00939"></a>00939   <span class="keywordtype">float</span>* xnum=NULL;
-<a name="l00940"></a>00940   <span class="keywordtype">float</span>* spec=NULL;
-<a name="l00941"></a>00941   <span class="keywordtype">float</span>* corrected_spec=NULL;
-<a name="l00942"></a>00942 
-<a name="l00943"></a>00943   cknull(t,<span class="stringliteral">"null input table"</span>);
-<a name="l00944"></a>00944   out=cpl_table_duplicate(t);
-<a name="l00945"></a>00945 
-<a name="l00946"></a>00946   nrow=cpl_table_get_nrow(t);
-<a name="l00947"></a>00947   check_nomsg(cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));
-<a name="l00948"></a>00948   check_nomsg(cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));
-<a name="l00949"></a>00949   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);
-<a name="l00950"></a>00950   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);
-<a name="l00951"></a>00951   
-<a name="l00952"></a>00952 
-<a name="l00953"></a>00953 
-<a name="l00954"></a>00954   xnum=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00955"></a>00955   <span class="comment">/* fill the xa[] array for the spline function */</span>
-<a name="l00956"></a>00956   <span class="keywordflow">for</span> ( i = 0 ; i < nrow ; i++ ) {
-<a name="l00957"></a>00957     xnum[i] = i ;
-<a name="l00958"></a>00958   }
-<a name="l00959"></a>00959 
-<a name="l00960"></a>00960   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00961"></a>00961   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00962"></a>00962   eval=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00963"></a>00963 
-<a name="l00964"></a>00964   sum = 0. ;
-<a name="l00965"></a>00965   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00966"></a>00966     spec[z] = pi[z] ;
-<a name="l00967"></a>00967     <span class="keywordflow">if</span> (isnan(spec[z]) ) {
-<a name="l00968"></a>00968       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {
-<a name="l00969"></a>00969     <span class="keywordflow">if</span> ( i < 0 ) continue ;
-<a name="l00970"></a>00970     <span class="keywordflow">if</span> ( i >= nrow) continue ;
-<a name="l00971"></a>00971     corrected_spec[i] = ZERO ;
-<a name="l00972"></a>00972       }
-<a name="l00973"></a>00973       spec[z] = 0. ;
-<a name="l00974"></a>00974     }
-<a name="l00975"></a>00975     sum += spec[z] ;
-<a name="l00976"></a>00976     eval[z] = (float)shift+(<span class="keywordtype">float</span>)z ;
-<a name="l00977"></a>00977   }
-<a name="l00978"></a>00978   <span class="comment">/* now we do the spline interpolation*/</span>
-<a name="l00979"></a>00979   <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,spec, nrow, 
-<a name="l00980"></a>00980                                              eval,corrected_spec, nrow))
-<a name="l00981"></a>00981     {
-<a name="l00982"></a>00982       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;
-<a name="l00983"></a>00983       <span class="keywordflow">goto</span> cleanup;
-<a name="l00984"></a>00984     }
-<a name="l00985"></a>00985         
-<a name="l00986"></a>00986   new_sum = 0. ;
-<a name="l00987"></a>00987   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00988"></a>00988     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00989"></a>00989       continue ;
-<a name="l00990"></a>00990     }
-<a name="l00991"></a>00991     new_sum += corrected_spec[z] ;
-<a name="l00992"></a>00992   }
-<a name="l00993"></a>00993   <span class="comment">/* fill output imagelist */</span>
-<a name="l00994"></a>00994   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {
-<a name="l00995"></a>00995     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ; 
-<a name="l00996"></a>00996     {
-<a name="l00997"></a>00997       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {
-<a name="l00998"></a>00998     po[z] = ZERO ;
-<a name="l00999"></a>00999       } <span class="keywordflow">else</span> {
-<a name="l01000"></a>01000     corrected_spec[z] *= sum / new_sum ;
-<a name="l01001"></a>01001     po[z] = corrected_spec[z] ;
-<a name="l01002"></a>01002       }
-<a name="l01003"></a>01003     }
-<a name="l01004"></a>01004   }
-<a name="l01005"></a>01005 
-<a name="l01006"></a>01006   sinfo_free_float(&xnum);
-<a name="l01007"></a>01007   sinfo_free_float(&spec) ;
-<a name="l01008"></a>01008   sinfo_free_float(&corrected_spec) ;
-<a name="l01009"></a>01009   sinfo_free_float(&eval) ;
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));
-<a name="l01012"></a>01012   check_nomsg(cpl_table_erase_column(out,col));
-<a name="l01013"></a>01013   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));
-<a name="l01014"></a>01014   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));
-<a name="l01015"></a>01015 
-<a name="l01016"></a>01016   <span class="keywordflow">return</span> out;
-<a name="l01017"></a>01017  cleanup:
-<a name="l01018"></a>01018 
-<a name="l01019"></a>01019   sinfo_free_float(&xnum);
-<a name="l01020"></a>01020   sinfo_free_float(&spec) ;
-<a name="l01021"></a>01021   sinfo_free_float(&corrected_spec) ;
-<a name="l01022"></a>01022   sinfo_free_float(&eval) ;
-<a name="l01023"></a>01023   sinfo_free_table(&out);
-<a name="l01024"></a>01024   <span class="keywordflow">return</span> NULL;
-<a name="l01025"></a>01025 
-<a name="l01026"></a>01026 
-<a name="l01027"></a>01027 }
-<a name="l01028"></a>01028 
-<a name="l01029"></a>01029 
-<a name="l01030"></a>01030 <span class="keyword">static</span> cpl_table*
-<a name="l01031"></a>01031 sinfo_table_shift_simple(cpl_table* inp, 
-<a name="l01032"></a>01032                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col, 
-<a name="l01033"></a>01033                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift)
-<a name="l01034"></a>01034 {
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036   <span class="keywordtype">int</span> nrow=0;
-<a name="l01037"></a>01037   cpl_table* out=NULL;
-<a name="l01038"></a>01038   <span class="keywordtype">int</span> is=(int)shift;
-<a name="l01039"></a>01039   <span class="keywordtype">double</span> ds=shift-is;
-<a name="l01040"></a>01040   <span class="keywordtype">double</span>* pi=NULL;
-<a name="l01041"></a>01041   <span class="keywordtype">double</span>* po=NULL;
-<a name="l01042"></a>01042   <span class="keywordtype">double</span> m=0;
-<a name="l01043"></a>01043   <span class="keywordtype">int</span> i=0;
-<a name="l01044"></a>01044   cknull(inp,<span class="stringliteral">"null input table"</span>);
-<a name="l01045"></a>01045 
-<a name="l01046"></a>01046   check_nomsg(nrow=cpl_table_get_nrow(inp));
-<a name="l01047"></a>01047   check_nomsg(out=cpl_table_duplicate(inp));
-<a name="l01048"></a>01048   check_nomsg(cpl_table_fill_column_window(out,col,0,nrow,0));
-<a name="l01049"></a>01049   check_nomsg(pi=cpl_table_get_data_double(inp,col));
-<a name="l01050"></a>01050   check_nomsg(po=cpl_table_get_data_double(out,col));
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052 
-<a name="l01053"></a>01053   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {
-<a name="l01054"></a>01054     <span class="keywordflow">if</span>((i+is)>0 && (i+is+1) < nrow) {
-<a name="l01055"></a>01055       m=pi[i+is+1]-pi[i+is];
-<a name="l01056"></a>01056       po[i]=pi[i+is]+m*ds;
-<a name="l01057"></a>01057     }
-<a name="l01058"></a>01058   }
-<a name="l01059"></a>01059   <span class="keywordflow">return</span> out;
-<a name="l01060"></a>01060   cleanup:
-<a name="l01061"></a>01061   sinfo_free_table(&out);
-<a name="l01062"></a>01062   <span class="keywordflow">return</span> NULL;
-<a name="l01063"></a>01063 
-<a name="l01064"></a>01064 }
-<a name="l01065"></a>01065 
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l01074"></a>01074 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l01075"></a>01075 
-<a name="l01076"></a>01076 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l01077"></a>01077 sinfo_fit_poly(<span class="keywordtype">double</span> p[])
-<a name="l01078"></a>01078 
-<a name="l01079"></a>01079 {
-<a name="l01080"></a>01080 
-<a name="l01081"></a>01081   <span class="keywordtype">double</span>* px=NULL;
-<a name="l01082"></a>01082   <span class="keywordtype">double</span>* py=NULL; 
-<a name="l01083"></a>01083 
-<a name="l01084"></a>01084   <span class="keywordtype">int</span> i=0;
-<a name="l01085"></a>01085   <span class="keywordtype">int</span> np=0;
-<a name="l01086"></a>01086  
-<a name="l01087"></a>01087   <span class="keywordtype">double</span> fy=0;  
-<a name="l01088"></a>01088   <span class="keywordtype">double</span> chi2=0;
-<a name="l01089"></a>01089 
-<a name="l01090"></a>01090   check_nomsg(px= cpl_vector_get_data(sa_vx));
-<a name="l01091"></a>01091   check_nomsg(py= cpl_vector_get_data(sa_vy));
-<a name="l01092"></a>01092   check_nomsg(np= cpl_vector_get_size(sa_vx));
-<a name="l01093"></a>01093 
-<a name="l01094"></a>01094   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l01095"></a>01095     <span class="comment">//fy=(px[i]-p[0])*(px[i]-p[0]);</span>
-<a name="l01096"></a>01096     fy=p[0]+p[1]*px[i]+p[2]*px[i]*px[i];
-<a name="l01097"></a>01097     chi2+=(py[i]-fy)*(py[i]-fy);
-<a name="l01098"></a>01098   } 
-<a name="l01099"></a>01099   
-<a name="l01100"></a>01100   <span class="keywordflow">return</span> chi2;
-<a name="l01101"></a>01101  cleanup:
-<a name="l01102"></a>01102   <span class="keywordflow">return</span> -1;
-<a name="l01103"></a>01103 
-<a name="l01104"></a>01104 }
-<a name="l01105"></a>01105 
-<a name="l01106"></a>01106 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l01107"></a>01107 sinfo_fit_boltzmann(<span class="keywordtype">double</span> p[])
-<a name="l01108"></a>01108 
-<a name="l01109"></a>01109 {
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111   <span class="keywordtype">double</span>* px=NULL;
-<a name="l01112"></a>01112   <span class="keywordtype">double</span>* py=NULL; 
-<a name="l01113"></a>01113   <span class="keywordtype">double</span>* pv=NULL; 
-<a name="l01114"></a>01114   cpl_vector* vtmp=NULL;
-<a name="l01115"></a>01115   <span class="keywordtype">double</span> max=0;
-<a name="l01116"></a>01116   <span class="keywordtype">int</span> i=0;
-<a name="l01117"></a>01117   <span class="keywordtype">int</span> np=0;
-<a name="l01118"></a>01118  
-<a name="l01119"></a>01119   <span class="keywordtype">double</span> chi2=0;
-<a name="l01120"></a>01120 
-<a name="l01121"></a>01121   check_nomsg(px= cpl_vector_get_data(sa_vx));
-<a name="l01122"></a>01122   check_nomsg(py= cpl_vector_get_data(sa_vy));
-<a name="l01123"></a>01123   check_nomsg(np= cpl_vector_get_size(sa_vx));
-<a name="l01124"></a>01124   check_nomsg(vtmp=cpl_vector_duplicate(sa_vy));
-<a name="l01125"></a>01125   check_nomsg(pv=cpl_vector_get_data(vtmp));
-<a name="l01126"></a>01126    
-<a name="l01127"></a>01127   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l01128"></a>01128     pv[i]=sinfo_fac(px[i],p[2]);
-<a name="l01129"></a>01129     <span class="comment">//sinfo_msg("x=%g p=%g",px[i],pv[i]);</span>
-<a name="l01130"></a>01130   }
-<a name="l01131"></a>01131   check_nomsg(max=cpl_vector_get_max(vtmp));
-<a name="l01132"></a>01132   <span class="keywordflow">if</span>(max> 0) {
-<a name="l01133"></a>01133     check_nomsg(cpl_vector_divide_scalar(vtmp,max));
-<a name="l01134"></a>01134     check_nomsg(cpl_vector_multiply_scalar(vtmp,p[1]));
-<a name="l01135"></a>01135     check_nomsg(cpl_vector_add_scalar(vtmp,p[0]));
-<a name="l01136"></a>01136   }
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138 
-<a name="l01139"></a>01139   <span class="keywordflow">for</span>(i=0;i<np;i++) {
-<a name="l01140"></a>01140     chi2+=(py[i]-pv[i])*(py[i]-pv[i]);
-<a name="l01141"></a>01141   } 
-<a name="l01142"></a>01142   
-<a name="l01143"></a>01143   <span class="keywordflow">return</span> chi2;
-<a name="l01144"></a>01144  cleanup:
-<a name="l01145"></a>01145   <span class="keywordflow">return</span> -1;
-<a name="l01146"></a>01146 
-<a name="l01147"></a>01147 }
-<a name="l01148"></a>01148 
-<a name="l01149"></a>01149 <span class="keyword">static</span> <span class="keywordtype">int</span> 
-<a name="l01150"></a>01150 sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], 
-<a name="l01151"></a>01151              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], 
-<a name="l01152"></a>01152              <span class="keywordtype">double</span> *result)
-<a name="l01153"></a>01153 {
-<a name="l01154"></a>01154 
-<a name="l01155"></a>01155   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);
-<a name="l01156"></a>01156   *result = a[0]+a[1]*fac;
-<a name="l01157"></a>01157 
-<a name="l01158"></a>01158   <span class="keywordflow">return</span> 0;
-<a name="l01159"></a>01159 }
-<a name="l01160"></a>01160 
-<a name="l01161"></a>01161 <span class="keyword">static</span> <span class="keywordtype">double</span>
-<a name="l01162"></a>01162 sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t)
-<a name="l01163"></a>01163 {
-<a name="l01164"></a>01164   
-<a name="l01165"></a>01165   <span class="keywordtype">double</span> c=14387.7;
-<a name="l01166"></a>01166 
-<a name="l01167"></a>01167   <span class="keywordflow">return</span> pow(x,-5.)/(exp(c/(x*fabs(t)))-1.);
-<a name="l01168"></a>01168 }
-<a name="l01169"></a>01169 
-<a name="l01170"></a>01170 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_b351cdfeb4656d7d168dc72b273024e7.html">recipes</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_utl_table_test.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_table_test.c,v 1.6 2012/03/03 10:38:03 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:38:03 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span><span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">/* cpl */</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">/* irplib */</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <irplib_utils.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_tpl_utils.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_pfits.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_tpl_dfs.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include <sinfo_msg.h></span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="preprocessor">#include <sinfo_recipes.h></span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="preprocessor">#include <sinfo_function_1d.h></span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="preprocessor">#include <sinfo_functions.h></span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="preprocessor">#include <sinfo_fit.h></span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_create(cpl_plugin *) ;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_exec(cpl_plugin *) ;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_destroy(cpl_plugin *) ;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_shift(cpl_parameterlist *, cpl_frameset *) ;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_utl_table_test_amoeba_poly(cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>              cpl_frameset        *   framelist);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_utl_table_test_amoeba_boltzmann(cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>              cpl_frameset        *   framelist);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="keyword">static</span> cpl_vector* sa_vx=NULL;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="keyword">static</span> cpl_vector* sa_vy=NULL;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> sinfo_fit_boltzmann(<span class="keywordtype">double</span> p[]);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>              <span class="keywordtype">double</span> *result);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> sinfo_fit_poly(<span class="keywordtype">double</span> p[]);;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_table_shift_column_spline3(cpl_table* t, </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>                                  <span class="keyword">const</span> <span class="keywordtype">double</span> s);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> sinfo_table_shift_column_poly(cpl_table* t, </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> s,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>                               <span class="keyword">const</span> <span class="keywordtype">int</span> order);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t, </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> s,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                    <span class="keywordtype">double</span>* r);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> sinfo_table_shift_simple(cpl_table* inp, </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="preprocessor">#define NPOINT 1000</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="keyword">static</span> <span class="keywordtype">char</span> sinfo_utl_table_test_description[] =</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="stringliteral">"This recipe perform cubes combination.\n"</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="stringliteral">"The input files are several cubeses\n"</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="stringliteral">"their associated tags should be CUBE.\n"</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="stringliteral">"The output is a cube PRO_CUBE resulting from the input cubes\n"</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="stringliteral">"accurding to the value of op where op indicates the operation to be \n"</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="stringliteral">"performed specified by the parameter sinfoni.sinfo_utl_table_test.op\n"</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="stringliteral">"Information on relevant parameters can be found with\n"</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="stringliteral">"esorex --params sinfo_utl_table_test\n"</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="stringliteral">"esorex --help sinfo_utl_table_test\n"</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="stringliteral">"\n"</span>;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="keywordtype">int</span> <a class="code" href="group__sinfo__rec__detlin.html#ga31d1fccd4cd15b1c1f3c5edc8cb18693" title="Build the list of available plugins, for this module.">cpl_plugin_get_info</a>(cpl_pluginlist * list)</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     cpl_recipe  *   recipe = cpl_calloc(1, <span class="keyword">sizeof</span> *recipe ) ;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     cpl_plugin  *   plugin = &recipe->interface ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     cpl_plugin_init(plugin,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>                     CPL_PLUGIN_API,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>                     SINFONI_BINARY_VERSION,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                     CPL_PLUGIN_TYPE_RECIPE,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>                     <span class="stringliteral">"sinfo_utl_table_test"</span>,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>                     <span class="stringliteral">"Combines a cube list in an output cube"</span>,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                     sinfo_utl_table_test_description,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                     <span class="stringliteral">"Andrea Modigliani"</span>,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                     <span class="stringliteral">"Andrea.Modigliani at eso.org"</span>,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                     sinfo_get_license(),</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                     sinfo_utl_table_test_create,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>                     sinfo_utl_table_test_exec,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                     sinfo_utl_table_test_destroy) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_pluginlist_append(list, plugin) ;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_create(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     cpl_recipe      * recipe ;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     cpl_parameter   * p ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     cpl_error_reset();</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     <a class="code" href="group__irplib__utils.html#gaf9d392144014e2363054bc3f83c8e47e" title="Reset IRPLIB state.">irplib_reset</a>();</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="comment">/* Create the parameters list in the cpl_recipe object */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     recipe->parameters = cpl_parameterlist_new() ; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="comment">/* Fill the parameters list */</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>, </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                 CPL_TYPE_STRING, </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                 <span class="stringliteral">"Output filename"</span>, </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                 <span class="stringliteral">"sinfo_clean_mean"</span>);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"method"</span>) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>, </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                                 <span class="stringliteral">"Shift"</span>, </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                                 0.01) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wshift"</span>) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>, </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>                                 <span class="stringliteral">"Shift"</span>, </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                                 1.45) ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wstart"</span>) ;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>, </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                                 CPL_TYPE_DOUBLE, </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                 <span class="stringliteral">"End Wavelength"</span>, </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test"</span>, </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                                 2.45) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI, <span class="stringliteral">"wend"</span>) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     cpl_parameterlist_append(recipe->parameters, p) ;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_exec(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     cpl_errorstate initial_errorstate = cpl_errorstate_get();</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     status+=sinfo_utl_table_test_shift(recipe->parameters, recipe->frames);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     status+=sinfo_utl_table_test_amoeba_poly(recipe->parameters, </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                                              recipe->frames);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     status+=sinfo_utl_table_test_amoeba_boltzmann(recipe->parameters, </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                                                   recipe->frames);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>    <span class="keywordflow">if</span> (!cpl_errorstate_is_equal(initial_errorstate)) {                      </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         <span class="comment">/* Dump the error history since recipe execution start.                </span></div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> <span class="comment">           At this point the recipe cannot recover from the error */</span>           </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     } </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     <span class="keywordflow">return</span> status ;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> }</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="keyword">static</span> <span class="keywordtype">int</span> sinfo_utl_table_test_destroy(cpl_plugin * plugin)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> {</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     cpl_recipe  *   recipe ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     <span class="comment">/* Get the recipe out of the plugin */</span></div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     <span class="keywordflow">if</span> (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         recipe = (cpl_recipe *)plugin ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>     <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     cpl_parameterlist_delete(recipe->parameters) ; </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> }</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> sinfo_utl_table_test_shift(cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>             cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> {</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>   cpl_table* t=NULL;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>   cpl_table* t_shift=NULL;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   <span class="keywordtype">int</span> np=NPOINT;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>   <span class="keywordtype">double</span> wd=0;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>   <span class="keywordtype">double</span> wshift=0;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>   <span class="keywordtype">double</span> pshift=0;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   <span class="keywordtype">double</span> ra=0;</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>   <span class="keyword">const</span> <span class="keywordtype">double</span> pg=3.1415926535897932384626433832795;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>   </div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>   check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>   <span class="comment">// read input parameters</span></div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>   check_nomsg(p=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   check_nomsg(op=cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   check_nomsg(ws=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span> </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>   check_nomsg(we=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>   check_nomsg(wshift=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>   </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span> </div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>   <span class="comment">// create the table</span></div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>   check_nomsg(t=cpl_table_new(np));</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     pw[i]=ws+i*wd;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     ra=(double)i/(<span class="keywordtype">double</span>)np*6.*pg;</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     pi[i]=cos(ra);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>   pshift=wshift/wd;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>   check_nomsg(cpl_table_save(t, NULL, NULL, <span class="stringliteral">"out_cosine.fits"</span>, 0));</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">  sinfo_msg("shift1");</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_int(t, "INT", pshift,&wrest));</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">  check_nomsg(cpl_table_save(t_shift,NULL,NULL,"out_cosine_shift1.fits", 0));</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">  sinfo_msg("shift2");</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> <span class="comment">  sinfo_free_table(&t_shift);</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_poly(t,"INT", pshift,2));</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> <span class="comment">  check_nomsg(cpl_table_save(t_shift,NULL,NULL,"out_cosine_shift2.fits", 0));</span></div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> <span class="comment">  sinfo_msg("shift3");</span></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">  sinfo_free_table(&t_shift);</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span> <span class="comment">  cknull_nomsg(t_shift=sinfo_table_shift_column_spline3(t_shift,"INT",pshift));</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> <span class="comment"></span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>   check_nomsg(t_shift=sinfo_table_shift_simple(t,<span class="stringliteral">"INT"</span>,pshift));</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>   check_nomsg(cpl_table_save(t_shift,NULL,NULL, <span class="stringliteral">"out_cosine_shift3.fits"</span>, 0));</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>   sinfo_free_table(&t);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> </div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>  cleanup:</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>   sinfo_free_table(&t);</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> }</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span> </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span> sinfo_utl_table_test_amoeba_poly(cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> {</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>   cpl_table* t=NULL;</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>   <span class="keywordtype">int</span> np=NPOINT;</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>   <span class="keywordtype">double</span> wd=0;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>   <span class="keywordtype">double</span> wshift=0;</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span> </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   <span class="keywordtype">double</span>* pf=NULL;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>   <span class="keywordtype">double</span> a[3];</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>   <span class="keywordtype">double</span> p0[3];</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> </div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>   </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>   <span class="comment">// Amoeba fit:</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>   <span class="keywordtype">double</span> y[MP];</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>   <span class="keywordtype">double</span>** ap=NULL;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>   <span class="keywordtype">double</span> FTOL=2e-6;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>   <span class="keywordtype">int</span> nfunc=0;</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span> </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>   check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> </div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>   <span class="comment">// read input parameters</span></div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>   check_nomsg(p=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>   check_nomsg(op=cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span> </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>   check_nomsg(ws=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> </div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>   check_nomsg(we=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span> </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>   check_nomsg(wshift=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>   </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>   <span class="comment">//Prepare a template function (polynomial)</span></div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>   check_nomsg(t=cpl_table_new(np));</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>   ws=-2.;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>   we=+4.;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>   a[0]=+1.;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>   a[1]=-2.;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>   a[2]=1.;</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     pw[i]=ws+i*wd;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="comment">//pi[i]=(pw[i]-a[0])*(pw[i]-a[0])+1.*rand()/RAND_MAX;</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     pi[i]=a[0]+a[1]*pw[i]+a[2]*pw[i]*pw[i]+1.*rand()/RAND_MAX;</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>   }</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span> </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span> </div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>   sa_vx=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>   sa_vy=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>   <span class="comment">// Amoeba part</span></div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>   }</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>       ap[i][j]=0;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     }</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>   }</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>   <span class="comment">//ap[0][0]=-5;</span></div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>   <span class="comment">//ap[1][0]=-2;</span></div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>   ap[0][0]=-3; ap[0][1]=-3; ap[0][2]=-3;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>   ap[1][0]=+3; ap[1][1]=-3; ap[1][2]=-3;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>   ap[2][0]=+3; ap[2][1]=+3; ap[2][2]=-3;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>   ap[3][0]=+3; ap[3][1]=-3; ap[3][2]=+3;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     }</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>   }</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span> </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     p0[0]=ap[i][0]; </div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     p0[1]=ap[i][1]; </div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>     p0[2]=ap[i][2];</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     y[i]=sinfo_fit_poly(p0);</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>   }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>   sinfo_fit_amoeba(ap,y,NP,FTOL,sinfo_fit_poly,&nfunc);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span> </div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     }</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>   }</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"FIT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"FIT"</span>,0,np,0));</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>   check_nomsg(pf=cpl_table_get_data_double(t,<span class="stringliteral">"FIT"</span>));</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span> </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     pw[i]=ws+i*wd;</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     pf[i]=ap[0][0]+ap[0][1]*pw[i]+ap[0][2]*pw[i]*pw[i];</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>   }</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>   check_nomsg(cpl_table_save(t,NULL,NULL, <span class="stringliteral">"out_amoeba_poly.fits"</span>, 0));</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>   cpl_vector_unwrap(sa_vx);</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>   cpl_vector_unwrap(sa_vy);</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span> </div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>   sinfo_free_table(&t);</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>  cleanup:</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>   cpl_vector_unwrap(sa_vx);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>   cpl_vector_unwrap(sa_vy);</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span> </div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>   sinfo_free_table(&t);</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> }</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> </div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> sinfo_utl_table_test_amoeba_boltzmann(cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>                        cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> {</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span> </div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>   cpl_table* t=NULL;</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>   <span class="keywordtype">int</span> np=NPOINT;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>   cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>   <span class="keyword">const</span> <span class="keywordtype">char</span>* op=NULL;</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>   <span class="keywordtype">double</span> ws=0;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>   <span class="keywordtype">double</span> we=0;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>   <span class="keywordtype">double</span> wd=0;</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>   <span class="keywordtype">double</span> wshift=0;</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span> </div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>   <span class="keywordtype">double</span>* pw=NULL;</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>   <span class="keywordtype">double</span>* pf=NULL;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>   <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>   <span class="keywordtype">double</span> a[3];</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>   <span class="keywordtype">double</span> p0[3];</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span> </div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>   </div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>   <span class="comment">// Amoeba fit:</span></div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> MP=4;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>   <span class="keyword">const</span> <span class="keywordtype">int</span> NP=3;</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>   <span class="keywordtype">double</span> y[MP];</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>   <span class="keywordtype">double</span>** ap=NULL;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>   <span class="keywordtype">double</span> FTOL=2e-6;</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>   <span class="keywordtype">int</span> nfunc=0;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span> </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>   <span class="keywordtype">double</span> bkg_min=0;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>   <span class="keywordtype">double</span> bkg_max=0;</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>   <span class="keywordtype">double</span> p0_min=0;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>   <span class="keywordtype">double</span> p0_max=0;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>   <span class="keywordtype">double</span> p1_min=0;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>   <span class="keywordtype">double</span> p1_max=0;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>   <span class="keywordtype">double</span> p2_min=0;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>   <span class="keywordtype">double</span> p2_max=0;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span> </div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>   check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span> </div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>   <span class="comment">// read input parameters</span></div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>   check_nomsg(p=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.method"</span>));</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>   check_nomsg(op=cpl_parameter_get_string(p));</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> </div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> </div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wstart"</span>));</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>   check_nomsg(ws=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wend"</span>));</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>   check_nomsg(we=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span> </div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>   check_nomsg(p=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_table_test.wshift"</span>));</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>   check_nomsg(wshift=cpl_parameter_get_double(p)) ;</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>   </div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span> </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>   <span class="comment">//Prepare a template function (polynomial)</span></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>   check_nomsg(t=cpl_table_new(np));</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"WAVE"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"INT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"WAVE"</span>,0,np,0));</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"INT"</span>,0,np,0));</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> </div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>   check_nomsg(pw=cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>));</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>   check_nomsg(pi=cpl_table_get_data_double(t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>   ws=1.4;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>   we=2.5;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>   a[2]=280;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>   a[1]=55.817665;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>   a[0]=548.77802;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     pw[i]=ws+i*wd;</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>     pi[i]=sinfo_fac(pw[i],a[2])*(1.+0.1*rand()/RAND_MAX);</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>   }</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>   check_nomsg(max=cpl_table_get_column_max(t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>   check_nomsg(cpl_table_duplicate_column(t,<span class="stringliteral">"THERMAL"</span>,t,<span class="stringliteral">"INT"</span>));</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>   check_nomsg(cpl_table_divide_scalar(t,<span class="stringliteral">"THERMAL"</span>,max));</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>   check_nomsg(cpl_table_multiply_scalar(t,<span class="stringliteral">"THERMAL"</span>,a[1]));</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>   check_nomsg(cpl_table_add_scalar(t,<span class="stringliteral">"THERMAL"</span>,a[0]));</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>   check_nomsg(sa_vx=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"WAVE"</span>)));</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>   check_nomsg(sa_vy=cpl_vector_wrap(np,cpl_table_get_data_double(t,<span class="stringliteral">"THERMAL"</span>)));</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>   <span class="comment">// Amoeba part</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>   ap=(<span class="keywordtype">double</span>**) cpl_calloc(MP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>*));</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     ap[i]=cpl_calloc(NP,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>   }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>       ap[i][j]=0;</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>     }</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>   }</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>   <span class="comment">//ap[0][0]=-5;</span></div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>   <span class="comment">//ap[1][0]=-2;</span></div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>   bkg_min=cpl_table_get_column_min(t,<span class="stringliteral">"THERMAL"</span>);</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>   bkg_max=cpl_table_get_column_max(t,<span class="stringliteral">"THERMAL"</span>);</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span> </div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>   p0_min=bkg_min/2;</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>   p0_max=bkg_min*2;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>   p1_min=bkg_min/2.;</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>   p1_max=bkg_max*2;</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>   p1_min=200;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>   p2_max=300;</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>   ap[0][0]=p0_min; ap[0][1]=p1_min; ap[0][2]=p2_min;</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>   ap[1][0]=p0_max; ap[1][1]=p1_min; ap[1][2]=p2_min;</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>   ap[2][0]=p0_min; ap[2][1]=p1_max; ap[2][2]=p2_min;</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>   ap[3][0]=p0_min; ap[3][1]=p1_min; ap[3][2]=p2_max;</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span> </div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>   sinfo_msg(<span class="stringliteral">"Before amoeba fit"</span>);</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>     }</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>   }</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span> </div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>     p0[0]=ap[i][0]; </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>     p0[1]=ap[i][1]; </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>     p0[2]=ap[i][2];</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>     y[i]=sinfo_fit_boltzmann(p0);</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>   }</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>   sinfo_fit_amoeba(ap,y,NP,FTOL,sinfo_fit_boltzmann,&nfunc);</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span> </div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>   sinfo_msg(<span class="stringliteral">"After amoeba fit"</span>);</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>   <span class="keywordflow">for</span>(i=0;i<MP;i++) {</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>     <span class="keywordflow">for</span>(j=0;j<NP;j++) {</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>       sinfo_msg(<span class="stringliteral">"ap[%d][%d]=%g"</span>,i,j,ap[i][j]);</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>     }</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>   }</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span> </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>   check_nomsg(cpl_table_new_column(t,<span class="stringliteral">"FIT"</span>,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>   check_nomsg(cpl_table_fill_column_window(t,<span class="stringliteral">"FIT"</span>,0,np,0));</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>   check_nomsg(pf=cpl_table_get_data_double(t,<span class="stringliteral">"FIT"</span>));</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span> </div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>   wd=(we-ws)/np;</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>     pw[i]=ws+i*wd;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>     pf[i]=sinfo_fac(pw[i],ap[0][2]);</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>   }</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>   check_nomsg(max=cpl_table_get_column_max(t,<span class="stringliteral">"FIT"</span>));</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>   check_nomsg(cpl_table_divide_scalar(t,<span class="stringliteral">"FIT"</span>,max));</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>   check_nomsg(cpl_table_multiply_scalar(t,<span class="stringliteral">"FIT"</span>,ap[0][1]));</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>   check_nomsg(cpl_table_add_scalar(t,<span class="stringliteral">"FIT"</span>,ap[0][0]));</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span> </div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>   check_nomsg(cpl_table_save(t,NULL,NULL, <span class="stringliteral">"out_amoeba_boltzmann.fits"</span>, 0));</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span> </div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span> </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>  cleanup:</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>   cpl_vector_unwrap(sa_vx);</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>   cpl_vector_unwrap(sa_vy);</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>   sinfo_free_table(&t);</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span> </div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>   <span class="keywordflow">if</span> (cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>     <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>   }</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span> </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span> </div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span> </div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span> }</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span> </div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span> sinfo_table_shift_column_int(<span class="keyword">const</span> cpl_table* t, </div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>                              <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>                              <span class="keyword">const</span> <span class="keywordtype">double</span> s, </div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>                                    <span class="keywordtype">double</span>* r)</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span> {</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>   <span class="keywordtype">int</span> is=(int)s;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span> </div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span> </div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>   *r=s-is;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>   pi=cpl_table_get_data_double(t,col);</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>   po=cpl_table_get_data_double(out,col);</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>   sinfo_msg(<span class="stringliteral">"shifting of  %d pixels"</span>,is);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>   <span class="keywordflow">if</span>(is > 0 ) {</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>       <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>     po[i-is]=pi[i];</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>       }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     }</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     <span class="keywordflow">for</span>(i=nrow-1;i>-1;i--) {</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>       <span class="keywordflow">if</span>( ((i-is) >=0) && ((i-is) < nrow)) {</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     po[i-is]=pi[i];</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>       }</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>     }</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>   }</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>  cleanup:</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span> </div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span> }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span> </div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span> </div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span> sinfo_table_shift_column_poly(cpl_table* t, </div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>                               <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> shift,</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>                               <span class="keyword">const</span> <span class="keywordtype">int</span> order)</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span> {</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>   <span class="keywordtype">int</span> flag=0;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>   <span class="keywordtype">int</span> n_points=0;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>   <span class="keywordtype">int</span> firstpos=0;</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>   <span class="keywordtype">float</span> eval=0;</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>   <span class="keywordtype">float</span> new_sum=0;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>   <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>   <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>   <span class="keywordtype">float</span>* corrected_spec=NULL ;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>   <span class="keywordtype">float</span>* xnum=NULL ;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>   <span class="keywordtype">float</span>* tableptr=NULL;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span> </div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>   <span class="keywordflow">if</span> ( order <= 0 ) {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong order of interpolation polynom given!"</span>) ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>     <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>   }</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span> </div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>   cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>   cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT);</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span> </div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>   n_points = order + 1 ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>   <span class="keywordflow">if</span> ( n_points % 2 == 0 ) {</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     firstpos = (int)(n_points/2) - 1 ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>   } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     firstpos = (int)(n_points/2) ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>   }</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>   xnum=cpl_calloc(order+1,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>   <span class="comment">/* fill the xa[] array for the polint function */</span></div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>   <span class="keywordflow">for</span> ( i = 0 ; i < n_points ; i++ ) {</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>   }</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span> </div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span> </div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     corrected_spec[i] = 0. ;</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>   }</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span> </div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>   sum = 0. ;</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     spec[z] = pi[z] ;</div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>       spec[z] = 0. ;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                   </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span>       <span class="keywordflow">for</span> ( i = z - firstpos ; i < z-firstpos+n_points ; i++ ) {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keywordflow">if</span> ( i >= nrow) continue  ;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>       }</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     }</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>       sum += spec[z] ;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>   }</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span> </div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>   new_sum = 0. ;</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span> <span class="comment">     * now determine the arrays of size n_points with which the</span></div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> <span class="comment">     * polynom is determined and determine the position eval</span></div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span> <span class="comment">     * where the polynom is evaluated in polynomial interpolation.</span></div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span> <span class="comment">     * Take care of the points near the row edges!</span></div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>     <span class="keywordflow">if</span> (isnan(corrected_spec[z])) continue ;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     <span class="keywordflow">if</span> ( z - firstpos < 0 ) {</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>       tableptr = &spec[0] ;</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>       eval     = shift + z ;</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z - firstpos + n_points >= nrow ) {</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>       tableptr = &spec[nrow - n_points] ;</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>       eval     = shift + z + n_points - nrow ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>       tableptr = &spec[z-firstpos] ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>       eval     = shift + firstpos ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>     }</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span> </div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     flag=0;</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     corrected_spec[z]=sinfo_new_nev_ille(xnum,tableptr,order,eval,&flag);</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     <span class="keywordflow">if</span> ( z != 0 && z != nrow - 1 ) {</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>       new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>     }</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>   }</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span> </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>   <span class="comment">/* fill the output spectrum */</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>   <span class="keywordflow">for</span> (z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>     <span class="keywordflow">if</span> ( new_sum == 0. ) {</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>       new_sum = 1. ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>     }</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     <span class="keywordflow">if</span> ( z == 0 ) {</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( z == nrow - 1 ) {</div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>       po[z] = ZERO ;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>       corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>       po[z] = corrected_spec[z] ;</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>     }</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>   }</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>   check_nomsg(cpl_table_erase_column(out,col));</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span> </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>   sinfo_free_float(&xnum) ;</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span> </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>  cleanup:</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span> </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>   sinfo_free_float(&xnum) ;</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span> </div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span> </div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span> }</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span> </div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span> </div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span> </div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span> sinfo_table_shift_column_spline3(cpl_table* t, </div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>                                  <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                                  <span class="keyword">const</span> <span class="keywordtype">double</span> shift)</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span> {</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>   <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span> </div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>   <span class="keywordtype">float</span> sum=0;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>   <span class="keywordtype">float</span> new_sum=0;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span> </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>   <span class="keywordtype">float</span>* pi=NULL;</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>   <span class="keywordtype">float</span>* po=NULL;</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>   <span class="keywordtype">float</span>* eval=NULL;</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>   <span class="keywordtype">float</span>* xnum=NULL;</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>   <span class="keywordtype">float</span>* spec=NULL;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>   <span class="keywordtype">float</span>* corrected_spec=NULL;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span> </div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>   cknull(t,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>   out=cpl_table_duplicate(t);</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span> </div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>   nrow=cpl_table_get_nrow(t);</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>   check_nomsg(cpl_table_cast_column(t,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>   check_nomsg(cpl_table_cast_column(out,col,<span class="stringliteral">"FINT"</span>,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>   pi=cpl_table_get_data_float(t,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>   po=cpl_table_get_data_float(out,<span class="stringliteral">"FINT"</span>);</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>   </div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span> </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span> </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>   xnum=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>   <span class="comment">/* fill the xa[] array for the spline function */</span></div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>   <span class="keywordflow">for</span> ( i = 0 ; i < nrow ; i++ ) {</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     xnum[i] = i ;</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>   }</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span> </div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>   spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>   corrected_spec=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>   eval=cpl_calloc(nrow,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span> </div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>   sum = 0. ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     spec[z] = pi[z] ;</div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <span class="keywordflow">if</span> (isnan(spec[z]) ) {</div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>       <span class="keywordflow">for</span> ( i = z-1 ; i <= z+1 ; i++ ) {</div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     <span class="keywordflow">if</span> ( i < 0 ) continue ;</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     <span class="keywordflow">if</span> ( i >= nrow) continue ;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     corrected_spec[i] = ZERO ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>       }</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>       spec[z] = 0. ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     }</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>     sum += spec[z] ;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     eval[z] = (float)shift+(<span class="keywordtype">float</span>)z ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>   }</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>   <span class="comment">/* now we do the spline interpolation*/</span></div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>   <span class="keywordflow">if</span> ( -1 == sinfo_function1d_natural_spline(xnum,spec, nrow, </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>                                              eval,corrected_spec, nrow))</div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     {</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"error in spline interpolation!"</span>) ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     }</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>         </div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>   new_sum = 0. ;</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>     <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>       continue ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     }</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     new_sum += corrected_spec[z] ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>   }</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>   <span class="comment">/* fill output imagelist */</span></div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>   <span class="keywordflow">for</span> ( z = 0 ; z < nrow ; z++ ) {</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>     <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum =1. ; </div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span>     {</div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span>       <span class="keywordflow">if</span> ( isnan(corrected_spec[z]) ) {</div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     po[z] = ZERO ;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     corrected_spec[z] *= sum / new_sum ;</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     po[z] = corrected_spec[z] ;</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>       }</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>     }</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>   }</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>   sinfo_free_float(&xnum);</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>   sinfo_free_float(&eval) ;</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>   check_nomsg(cpl_table_erase_column(t,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>   check_nomsg(cpl_table_erase_column(out,col));</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>   check_nomsg(cpl_table_cast_column(out,<span class="stringliteral">"FINT"</span>,col,CPL_TYPE_DOUBLE));</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>   check_nomsg(cpl_table_erase_column(out,<span class="stringliteral">"FINT"</span>));</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  cleanup:</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>   sinfo_free_float(&xnum);</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>   sinfo_free_float(&spec) ;</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>   sinfo_free_float(&corrected_spec) ;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>   sinfo_free_float(&eval) ;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> </div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span> }</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> <span class="keyword">static</span> cpl_table*</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> sinfo_table_shift_simple(cpl_table* inp, </div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>                          <span class="keyword">const</span> <span class="keywordtype">char</span>* col, </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>                          <span class="keyword">const</span> <span class="keywordtype">double</span> shift)</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> {</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>   <span class="keywordtype">int</span> nrow=0;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>   cpl_table* out=NULL;</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>   <span class="keywordtype">int</span> is=(int)shift;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>   <span class="keywordtype">double</span> ds=shift-is;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>   <span class="keywordtype">double</span>* pi=NULL;</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>   <span class="keywordtype">double</span>* po=NULL;</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>   <span class="keywordtype">double</span> m=0;</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>   cknull(inp,<span class="stringliteral">"null input table"</span>);</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>   check_nomsg(nrow=cpl_table_get_nrow(inp));</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>   check_nomsg(out=cpl_table_duplicate(inp));</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>   check_nomsg(cpl_table_fill_column_window(out,col,0,nrow,0));</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>   check_nomsg(pi=cpl_table_get_data_double(inp,col));</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>   check_nomsg(po=cpl_table_get_data_double(out,col));</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>   <span class="keywordflow">for</span>(i=0;i<nrow;i++) {</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     <span class="keywordflow">if</span>((i+is)>0 && (i+is+1) < nrow) {</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>       m=pi[i+is+1]-pi[i+is];</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>       po[i]=pi[i+is]+m*ds;</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     }</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>   }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>   <span class="keywordflow">return</span> out;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>   cleanup:</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>   sinfo_free_table(&out);</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>   <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> }</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> sinfo_fit_poly(<span class="keywordtype">double</span> p[])</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> {</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>   <span class="keywordtype">double</span>* px=NULL;</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>   <span class="keywordtype">double</span>* py=NULL; </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  </div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>   <span class="keywordtype">double</span> fy=0;  </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>   <span class="keywordtype">double</span> chi2=0;</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>   check_nomsg(px= cpl_vector_get_data(sa_vx));</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>   check_nomsg(py= cpl_vector_get_data(sa_vy));</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>   check_nomsg(np= cpl_vector_get_size(sa_vx));</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     <span class="comment">//fy=(px[i]-p[0])*(px[i]-p[0]);</span></div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     fy=p[0]+p[1]*px[i]+p[2]*px[i]*px[i];</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     chi2+=(py[i]-fy)*(py[i]-fy);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>   } </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>   </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>   <span class="keywordflow">return</span> chi2;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  cleanup:</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span> </div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> }</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> sinfo_fit_boltzmann(<span class="keywordtype">double</span> p[])</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> </div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> {</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>   <span class="keywordtype">double</span>* px=NULL;</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>   <span class="keywordtype">double</span>* py=NULL; </div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>   <span class="keywordtype">double</span>* pv=NULL; </div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>   cpl_vector* vtmp=NULL;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>   <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>   <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>   <span class="keywordtype">int</span> np=0;</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  </div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>   <span class="keywordtype">double</span> chi2=0;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>   check_nomsg(px= cpl_vector_get_data(sa_vx));</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>   check_nomsg(py= cpl_vector_get_data(sa_vy));</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>   check_nomsg(np= cpl_vector_get_size(sa_vx));</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>   check_nomsg(vtmp=cpl_vector_duplicate(sa_vy));</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>   check_nomsg(pv=cpl_vector_get_data(vtmp));</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>    </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>     pv[i]=sinfo_fac(px[i],p[2]);</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="comment">//sinfo_msg("x=%g p=%g",px[i],pv[i]);</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>   }</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>   check_nomsg(max=cpl_vector_get_max(vtmp));</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>   <span class="keywordflow">if</span>(max> 0) {</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     check_nomsg(cpl_vector_divide_scalar(vtmp,max));</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     check_nomsg(cpl_vector_multiply_scalar(vtmp,p[1]));</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     check_nomsg(cpl_vector_add_scalar(vtmp,p[0]));</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>   }</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> </div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>   <span class="keywordflow">for</span>(i=0;i<np;i++) {</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>     chi2+=(py[i]-pv[i])*(py[i]-pv[i]);</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>   } </div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>   </div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>   <span class="keywordflow">return</span> chi2;</div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  cleanup:</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>   <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span> </div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> }</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keyword">static</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> sinfo_fitbkg(<span class="keyword">const</span> <span class="keywordtype">double</span> x[], </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>              <span class="keyword">const</span> <span class="keywordtype">double</span> a[], </div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>              <span class="keywordtype">double</span> *result)</div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> {</div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>   <span class="keywordtype">double</span> fac  = sinfo_fac(x[0],a[2]);</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>   *result = a[0]+a[1]*fac;</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>   <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> }</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> </div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> <span class="keyword">static</span> <span class="keywordtype">double</span></div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> sinfo_fac(<span class="keyword">const</span> <span class="keywordtype">double</span> x, <span class="keyword">const</span> <span class="keywordtype">double</span> t)</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> {</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>   </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>   <span class="keywordtype">double</span> c=14387.7;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> </div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>   <span class="keywordflow">return</span> pow(x,-5.)/(exp(c/(x*fabs(t)))-1.);</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> }</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> </div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__vltPort_8h_source.html b/html/sinfo__vltPort_8h_source.html
index 828dcf6..36e0611 100644
--- a/html/sinfo__vltPort_8h_source.html
+++ b/html/sinfo__vltPort_8h_source.html
@@ -2,116 +2,147 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_vltPort.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_vltPort.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">* "@(#) $Id: sinfo_vltPort.h,v 1.3 2006/10/25 06:46:09 amodigli Exp $" </span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* vltPort.h for Sun Solaris 2</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who        when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* gfilippi  22/05/96  created form vltPort.h</span>
-<a name="l00029"></a>00029 <span class="comment">* gfilippi  23/05/96  define SUN_COMP added</span>
-<a name="l00030"></a>00030 <span class="comment">*</span>
-<a name="l00031"></a>00031 <span class="comment">*/</span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="comment">/************************************************************************</span>
-<a name="l00034"></a>00034 <span class="comment">*  vltPort.h - Include file to mask differences between platforms.</span>
-<a name="l00035"></a>00035 <span class="comment">*              This file should be included in all source files.</span>
-<a name="l00036"></a>00036 <span class="comment">*              It relies on macro definitions preceeding the</span>
-<a name="l00037"></a>00037 <span class="comment">*              inclusion of this file.</span>
-<a name="l00038"></a>00038 <span class="comment">*                </span>
-<a name="l00039"></a>00039 <span class="comment">*  REMARK: This file belongs to the "vltMake" module.</span>
-<a name="l00040"></a>00040 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00041"></a>00041 <span class="comment">*/</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="preprocessor">#ifndef SINFO_VLTPORT_H</span>
-<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_VLTPORT_H</span>
-<a name="l00045"></a>00045 <span class="preprocessor"></span>
-<a name="l00046"></a>00046 <span class="comment">/*</span>
-<a name="l00047"></a>00047 <span class="comment">* When it is used, vltPort.h MUST be the very first file included</span>
-<a name="l00048"></a>00048 <span class="comment">* in ANSI ".c" files.</span>
-<a name="l00049"></a>00049 <span class="comment">* Cause a syntax error if we detect that any other include file has been</span>
-<a name="l00050"></a>00050 <span class="comment">* included before vltPort.h in an ANSI ".c" file.</span>
-<a name="l00051"></a>00051 <span class="comment">*/</span>
-<a name="l00052"></a>00052 <span class="preprocessor">#if defined(__STDC__) && \</span>
-<a name="l00053"></a>00053 <span class="preprocessor">                         (defined(_H_STANDARDS) || \</span>
-<a name="l00054"></a>00054 <span class="preprocessor">                          defined(_SYS_STDSYMS_INCLUDED) || \</span>
-<a name="l00055"></a>00055 <span class="preprocessor">                          defined(_STANDARDS_H_))</span>
-<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#    error "vltPort.h MUST BE THE VERY FIRST FILE INCLUDED IN ANSI '.c' FILES"</span>
-<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00058"></a>00058 <span class="preprocessor"></span>
-<a name="l00059"></a>00059 <span class="comment">/*</span>
-<a name="l00060"></a>00060 <span class="comment"> * This file is used also by some VxWorks code.</span>
-<a name="l00061"></a>00061 <span class="comment"> * To be compatible with existing code, SUN_COMP is defined for both</span>
-<a name="l00062"></a>00062 <span class="comment"> * gcc and cc68k, but the following definitiond do not influence cc68k</span>
-<a name="l00063"></a>00063 <span class="comment"> */</span>
-<a name="l00064"></a>00064  
-<a name="l00065"></a>00065 <span class="preprocessor">#define SUN_COMP</span>
-<a name="l00066"></a>00066 <span class="preprocessor"></span>
-<a name="l00067"></a>00067 <span class="comment">/* </span>
-<a name="l00068"></a>00068 <span class="comment"> * at present, SELECT is defined in the code using it. It should be done here</span>
-<a name="l00069"></a>00069 <span class="comment"> * for all. May be in the next release.</span>
-<a name="l00070"></a>00070 <span class="comment"> */</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="comment">/*</span>
-<a name="l00073"></a>00073 <span class="comment"> * Adjust name-space information.</span>
-<a name="l00074"></a>00074 <span class="comment"> */</span>
-<a name="l00075"></a>00075 <span class="preprocessor">#if defined(_ALL_SOURCE)</span>
-<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#    undef _POSIX_C_SOURCE</span>
-<a name="l00077"></a>00077 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00078"></a>00078 <span class="preprocessor"></span>
-<a name="l00079"></a>00079 <span class="preprocessor">#if defined(_XOPEN_SOURCE)</span>
-<a name="l00080"></a>00080 <span class="preprocessor"></span><span class="preprocessor">#    undef _POSIX_C_SOURCE</span>
-<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00082"></a>00082 <span class="preprocessor"></span>
-<a name="l00083"></a>00083 <span class="preprocessor">#ifndef MAKE_VXWORKS</span>
-<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#include <stddef.h></span>
-<a name="l00085"></a>00085 <span class="preprocessor">#include <sys/types.h></span>
-<a name="l00086"></a>00086 <span class="preprocessor">#include <sys/time.h></span>
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088 <span class="preprocessor">#if !defined(timercmp)</span>
-<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00090"></a>00090 <span class="comment">AMO: 03/09/03 commented out for Linux</span>
-<a name="l00091"></a>00091 <span class="comment">    struct timeval</span>
-<a name="l00092"></a>00092 <span class="comment">        {</span>
-<a name="l00093"></a>00093 <span class="comment">        long      tv_sec;         </span>
-<a name="l00094"></a>00094 <span class="comment">        long      tv_usec;        </span>
-<a name="l00095"></a>00095 <span class="comment">        };</span>
-<a name="l00096"></a>00096 <span class="comment">*/</span>
-<a name="l00097"></a>00097 <span class="preprocessor">#define crTIMEVAL_TIMEZONE_DEFINED</span>
-<a name="l00098"></a>00098 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-<a name="l00099"></a>00099 <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* MAKE_VXWORKS */</span>
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_vltPort.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* "@(#) $Id: sinfo_vltPort.h,v 1.3 2006/10/25 06:46:09 amodigli Exp $" </span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* vltPort.h for Sun Solaris 2</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who        when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* gfilippi  22/05/96  created form vltPort.h</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">* gfilippi  23/05/96  define SUN_COMP added</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*  vltPort.h - Include file to mask differences between platforms.</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*              This file should be included in all source files.</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*              It relies on macro definitions preceeding the</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*              inclusion of this file.</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*                </span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*  REMARK: This file belongs to the "vltMake" module.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#ifndef SINFO_VLTPORT_H</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_VLTPORT_H</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">* When it is used, vltPort.h MUST be the very first file included</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">* in ANSI ".c" files.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">* Cause a syntax error if we detect that any other include file has been</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">* included before vltPort.h in an ANSI ".c" file.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="preprocessor">#if defined(__STDC__) && \</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">                         (defined(_H_STANDARDS) || \</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">                          defined(_SYS_STDSYMS_INCLUDED) || \</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">                          defined(_STANDARDS_H_))</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor"></span><span class="preprocessor">#    error "vltPort.h MUST BE THE VERY FIRST FILE INCLUDED IN ANSI '.c' FILES"</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> * This file is used also by some VxWorks code.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment"> * To be compatible with existing code, SUN_COMP is defined for both</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> * gcc and cc68k, but the following definitiond do not influence cc68k</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>  </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="preprocessor">#define SUN_COMP</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment"> * at present, SELECT is defined in the code using it. It should be done here</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment"> * for all. May be in the next release.</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment"> * Adjust name-space information.</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="preprocessor">#if defined(_ALL_SOURCE)</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="preprocessor"></span><span class="preprocessor">#    undef _POSIX_C_SOURCE</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="preprocessor">#if defined(_XOPEN_SOURCE)</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="preprocessor"></span><span class="preprocessor">#    undef _POSIX_C_SOURCE</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="preprocessor">#ifndef MAKE_VXWORKS</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="preprocessor"></span><span class="preprocessor">#include <stddef.h></span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="preprocessor">#include <sys/types.h></span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="preprocessor">#include <sys/time.h></span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="preprocessor">#if !defined(timercmp)</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">AMO: 03/09/03 commented out for Linux</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">    struct timeval</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">        {</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">        long      tv_sec;         </span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">        long      tv_usec;        </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">        };</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="preprocessor">#define crTIMEVAL_TIMEZONE_DEFINED</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="preprocessor"></span><span class="preprocessor">#endif </span><span class="comment">/* MAKE_VXWORKS */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wave__calibration_8c_source.html b/html/sinfo__wave__calibration_8c_source.html
index a028793..1ee1c7a 100644
--- a/html/sinfo__wave__calibration_8c_source.html
+++ b/html/sinfo__wave__calibration_8c_source.html
@@ -2,2637 +2,2668 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wave_calibration.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wave_calibration.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">* </span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  13/07/00  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*     sinfo_wave_calibration.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*     routines needed for wavelength calibration</span>
-<a name="l00033"></a>00033 <span class="comment">*</span>
-<a name="l00034"></a>00034 <span class="comment">*   SYNOPSIS</span>
-<a name="l00035"></a>00035 <span class="comment">* </span>
-<a name="l00036"></a>00036 <span class="comment">*   1) FitParams ** sinfo_new_fit_params( int n_params )</span>
-<a name="l00037"></a>00037 <span class="comment">*</span>
-<a name="l00038"></a>00038 <span class="comment">*   2) void sinfo_new_destroy_fit_params ( FitParams ** params )</span>
-<a name="l00039"></a>00039 <span class="comment">*</span>
-<a name="l00040"></a>00040 <span class="comment">*   3) void sinfo_new_dump_fit_params_to_ascii(FitParams ** params,</span>
-<a name="l00041"></a>00041 <span class="comment">                                               const char * filename )</span>
-<a name="l00042"></a>00042 <span class="comment">*</span>
-<a name="l00043"></a>00043 <span class="comment">*   4) void sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, </span>
-<a name="l00044"></a>00044 <span class="comment">                                                 char * filename )</span>
-<a name="l00045"></a>00045 <span class="comment">*</span>
-<a name="l00046"></a>00046 <span class="comment">*   5) int sinfo_new_find_lines(cpl_image * lineImage, </span>
-<a name="l00047"></a>00047 <span class="comment">*                     float    * wave_position, </span>
-<a name="l00048"></a>00048 <span class="comment">*                     float    * wave_intensity,</span>
-<a name="l00049"></a>00049 <span class="comment">*                     int        n_lines, </span>
-<a name="l00050"></a>00050 <span class="comment">*                     int     ** row_clean,</span>
-<a name="l00051"></a>00051 <span class="comment">*                     float   ** wavelength_clean,</span>
-<a name="l00052"></a>00052 <span class="comment">*                     float      beginWave, </span>
-<a name="l00053"></a>00053 <span class="comment">*                     float      dispersion,</span>
-<a name="l00054"></a>00054 <span class="comment">*                     float      mindiff, </span>
-<a name="l00055"></a>00055 <span class="comment">*                     int        halfWidth,</span>
-<a name="l00056"></a>00056 <span class="comment">*                     int      * n_found_lines,</span>
-<a name="l00057"></a>00057 <span class="comment">*                     float      sigma,</span>
-<a name="l00058"></a>00058 <span class="comment">*                     int      * sum_lines )</span>
-<a name="l00059"></a>00059 <span class="comment">*</span>
-<a name="l00060"></a>00060 <span class="comment">*   6) int sinfo_new_read_list( char * listname, </span>
-<a name="l00061"></a>00061 <span class="comment">                                float * lineCenter, </span>
-<a name="l00062"></a>00062 <span class="comment">                                float * lineIntensity )</span>
-<a name="l00063"></a>00063 <span class="comment">*</span>
-<a name="l00064"></a>00064 <span class="comment">*</span>
-<a name="l00065"></a>00065 <span class="comment">*   7) int sinfo_new_line_fit ( cpl_image  *  mergedImage, </span>
-<a name="l00066"></a>00066 <span class="comment">*                    FitParams *  par,</span>
-<a name="l00067"></a>00067 <span class="comment">*                    float        fwhm,</span>
-<a name="l00068"></a>00068 <span class="comment">*                    int          lineInd,</span>
-<a name="l00069"></a>00069 <span class="comment">*                    int          column, </span>
-<a name="l00070"></a>00070 <span class="comment">*                    int          halfWidth, </span>
-<a name="l00071"></a>00071 <span class="comment">*                    int          lineRow,</span>
-<a name="l00072"></a>00072 <span class="comment">*                    float        min_amplitude )</span>
-<a name="l00073"></a>00073 <span class="comment">*</span>
-<a name="l00074"></a>00074 <span class="comment">*   8) int sinfo_new_fit_lines ( cpl_image  *  line_image, </span>
-<a name="l00075"></a>00075 <span class="comment">*                     FitParams ** allParams,</span>
-<a name="l00076"></a>00076 <span class="comment">*                     float        fwhm,</span>
-<a name="l00077"></a>00077 <span class="comment">*                     int       *  n_lines, </span>
-<a name="l00078"></a>00078 <span class="comment">*                     int       ** row,</span>
-<a name="l00079"></a>00079 <span class="comment">*                     float     ** wavelength, </span>
-<a name="l00080"></a>00080 <span class="comment">*                     int          width,</span>
-<a name="l00081"></a>00081 <span class="comment">*                     float        min_amplitude ) </span>
-<a name="l00082"></a>00082 <span class="comment">*</span>
-<a name="l00083"></a>00083 <span class="comment">*   9) float sinfo_new_polyfit( FitParams ** par, </span>
-<a name="l00084"></a>00084 <span class="comment">*                     int          column,</span>
-<a name="l00085"></a>00085 <span class="comment">*                     int          n_lines,</span>
-<a name="l00086"></a>00086 <span class="comment">*                     int          n_rows,</span>
-<a name="l00087"></a>00087 <span class="comment">*                     float        dispersion,</span>
-<a name="l00088"></a>00088 <span class="comment">*                     float        max_residual,</span>
-<a name="l00089"></a>00089 <span class="comment">*                     float *      acoefs, </span>
-<a name="l00090"></a>00090 <span class="comment">*                     float *      dacoefs, </span>
-<a name="l00091"></a>00091 <span class="comment">*                     int   *      n_reject,</span>
-<a name="l00092"></a>00092 <span class="comment">*                     int          n_fitcoefs )</span>
-<a name="l00093"></a>00093 <span class="comment">*</span>
-<a name="l00094"></a>00094 <span class="comment">*   10) float sinfo_new_coefs_cross_fit ( int      n_columns,</span>
-<a name="l00095"></a>00095 <span class="comment">*                            float *  acoefs,</span>
-<a name="l00096"></a>00096 <span class="comment">*                            float *  dacoefs, </span>
-<a name="l00097"></a>00097 <span class="comment">*                            float *  bcoefs,</span>
-<a name="l00098"></a>00098 <span class="comment">*                            int      n_fitcoefs,</span>
-<a name="l00099"></a>00099 <span class="comment">*                            float    sigma_factor )</span>
-<a name="l00100"></a>00100 <span class="comment">*</span>
-<a name="l00101"></a>00101 <span class="comment">*</span>
-<a name="l00102"></a>00102 <span class="comment">*  11) cpl_image * sinfo_new_wave_map( cpl_image * lineImage,</span>
-<a name="l00103"></a>00103 <span class="comment">*                          float   ** bcoefs,</span>
-<a name="l00104"></a>00104 <span class="comment">*                          int        n_a_fitcoefs,</span>
-<a name="l00105"></a>00105 <span class="comment">*                          int        n_b_fitcoefs,</span>
-<a name="l00106"></a>00106 <span class="comment">*                          float    * wavelength,</span>
-<a name="l00107"></a>00107 <span class="comment">*                          float    * intensity,</span>
-<a name="l00108"></a>00108 <span class="comment">*                          int        n_lines,</span>
-<a name="l00109"></a>00109 <span class="comment">*                          int        magFactor,</span>
-<a name="l00110"></a>00110 <span class="comment">*                          int      * bad_column_mask,</span>
-<a name="l00111"></a>00111 <span class="comment">*                          int        n_bad_columns )</span>
-<a name="l00112"></a>00112 <span class="comment">*</span>
-<a name="l00113"></a>00113 <span class="comment">*  12) int sinfo_new_wavelength_calibration( cpl_image   * image, </span>
-<a name="l00114"></a>00114 <span class="comment">*                                 FitParams ** par ,</span>
-<a name="l00115"></a>00115 <span class="comment">*                                 float     ** bcoefs,</span>
-<a name="l00116"></a>00116 <span class="comment">*                                 float      * wave,</span>
-<a name="l00117"></a>00117 <span class="comment">*                                 int          n_lines,</span>
-<a name="l00118"></a>00118 <span class="comment">*                                 int       ** row_clean,</span>
-<a name="l00119"></a>00119 <span class="comment">*                                 float     ** wavelength_clean,</span>
-<a name="l00120"></a>00120 <span class="comment">*                                 int        * n_found_lines,</span>
-<a name="l00121"></a>00121 <span class="comment">*                                 float        dispersion,</span>
-<a name="l00122"></a>00122 <span class="comment">*                                 int          halfWidth,</span>
-<a name="l00123"></a>00123 <span class="comment">*                                 float        minAmplitude,</span>
-<a name="l00124"></a>00124 <span class="comment">*                                 float        max_residual,</span>
-<a name="l00125"></a>00125 <span class="comment">*                                 float        fwhm,</span>
-<a name="l00126"></a>00126 <span class="comment">*                                 int          n_a_fitcoefs,</span>
-<a name="l00127"></a>00127 <span class="comment">*                                 int          n_b_fitcoefs,</span>
-<a name="l00128"></a>00128 <span class="comment">*                                 float        sigmaFactor )</span>
-<a name="l00129"></a>00129 <span class="comment">*</span>
-<a name="l00130"></a>00130 <span class="comment">*  13) cpl_image * sinfo_new_convolve_image_by_gauss( cpl_image * lineImage,</span>
-<a name="l00131"></a>00131 <span class="comment">*                                       int        hw )</span>
-<a name="l00132"></a>00132 <span class="comment">*</span>
-<a name="l00133"></a>00133 <span class="comment">*  14) cpl_image * sinfo_new_defined_resampling( cpl_image * image,</span>
-<a name="l00134"></a>00134 <span class="comment">*                                    cpl_image * calimage,</span>
-<a name="l00135"></a>00135 <span class="comment">*                                    int        n_params,</span>
-<a name="l00136"></a>00136 <span class="comment">*                                    int        n_rows,</span>
-<a name="l00137"></a>00137 <span class="comment">*                                    double   * dispersion,</span>
-<a name="l00138"></a>00138 <span class="comment">*                                    float    * minval,</span>
-<a name="l00139"></a>00139 <span class="comment">*                                    float    * maxval,</span>
-<a name="l00140"></a>00140 <span class="comment">*                                    double   * centralLambda,</span>
-<a name="l00141"></a>00141 <span class="comment">*                                    int      * centralpix )</span>
-<a name="l00142"></a>00142 <span class="comment">*</span>
-<a name="l00143"></a>00143 <span class="comment">*   DESCRIPTION</span>
-<a name="l00144"></a>00144 <span class="comment">*</span>
-<a name="l00145"></a>00145 <span class="comment">*   1) allocates memory for a new sinfo_vector of </span>
-<a name="l00146"></a>00146 <span class="comment">*      FitParams data structures</span>
-<a name="l00147"></a>00147 <span class="comment">*   2) frees memory of a sinfo_vector of FitParams data structures</span>
-<a name="l00148"></a>00148 <span class="comment">*   3) dumps the fit parameters to an ASCII file</span>
-<a name="l00149"></a>00149 <span class="comment">*   4) dumps ASCII information to an allocated FitParams data structure</span>
-<a name="l00150"></a>00150 <span class="comment">*   5) determines the pixel shift between the line list </span>
-<a name="l00151"></a>00151 <span class="comment">*      and the real image by using the beginning wavelength</span>
-<a name="l00152"></a>00152 <span class="comment">*      on the detector and the dispersion estimate.</span>
-<a name="l00153"></a>00153 <span class="comment">*   6) reads the line data of the calibration lamps</span>
-<a name="l00154"></a>00154 <span class="comment">*   7) fits a sinfo_gaussian to a 1-dimensional slice of an image, </span>
-<a name="l00155"></a>00155 <span class="comment">*      this routine uses the routine sinfo_new_lsqfit_c as a non-linear</span>
-<a name="l00156"></a>00156 <span class="comment">*      least square fit method (Levenberg-Marquardt).               </span>
-<a name="l00157"></a>00157 <span class="comment">*   8) calculates and stores the fit parameters of the neon </span>
-<a name="l00158"></a>00158 <span class="comment">*      emission lines of a neon frame by using the sinfo_linefit </span>
-<a name="l00159"></a>00159 <span class="comment">*      routine.</span>
-<a name="l00160"></a>00160 <span class="comment">*   9) fits a second order polynom </span>
-<a name="l00161"></a>00161 <span class="comment">*      lambda[i] = a1 + a2*pos[i] + a3*pos[i]^2</span>
-<a name="l00162"></a>00162 <span class="comment">*      to determine the connection between the listed wave-</span>
-<a name="l00163"></a>00163 <span class="comment">*      length values and the gauss-fitted positions for each</span>
-<a name="l00164"></a>00164 <span class="comment">*      image column using the singular value decomposition </span>
-<a name="l00165"></a>00165 <span class="comment">*      method. </span>
-<a name="l00166"></a>00166 <span class="comment">*  10) Fits the each single parameter of the three fit parameters </span>
-<a name="l00167"></a>00167 <span class="comment">*      acoefs from sinfo_polyfit through the image columns</span>
-<a name="l00168"></a>00168 <span class="comment">*  11) this routine determines a wavelength calibration map </span>
-<a name="l00169"></a>00169 <span class="comment">*      frame associating a wavelength value to each pixel</span>
-<a name="l00170"></a>00170 <span class="comment">*      by using the fit coefficients determined before.</span>
-<a name="l00171"></a>00171 <span class="comment">*  12) this routine takes an image from a calibration</span>
-<a name="l00172"></a>00172 <span class="comment">*      emission lamp and delivers the fit coefficients of  </span>
-<a name="l00173"></a>00173 <span class="comment">*      a polynomial fit across the columns </span>
-<a name="l00174"></a>00174 <span class="comment">*      of the coefficients of the polynomial line position</span>
-<a name="l00175"></a>00175 <span class="comment">*      fits as output. Furthermore it delivers an array of the fit parameters</span>
-<a name="l00176"></a>00176 <span class="comment">*      as output. This routine expects Nyquist sampled spectra </span>
-<a name="l00177"></a>00177 <span class="comment">*     (either an interleaved image or an image convolved with an </span>
-<a name="l00178"></a>00178 <span class="comment">*      appropriate function in spectral direction)</span>
-<a name="l00179"></a>00179 <span class="comment">*  13) convolves an emission line image with a sinfo_gaussian</span>
-<a name="l00180"></a>00180 <span class="comment">*      with user given integer half width by using the eclipse </span>
-<a name="l00181"></a>00181 <span class="comment">*      routine sinfo_function1d_filter_lowpass().</span>
-<a name="l00182"></a>00182 <span class="comment">*  14) Given a source image and a corresponding wavelength</span>
-<a name="l00183"></a>00183 <span class="comment">*      calibration file this routine produces an image</span>
-<a name="l00184"></a>00184 <span class="comment">*      in which elements in a given row are associated</span>
-<a name="l00185"></a>00185 <span class="comment">*      with a single wavelength. It thus corrects for </span>
-<a name="l00186"></a>00186 <span class="comment">*      the wavelength shifts between adjacent elements</span>
-<a name="l00187"></a>00187 <span class="comment">*      in the rows of the input image. The output image</span>
-<a name="l00188"></a>00188 <span class="comment">*      is larger in the wavelength domain than the input</span>
-<a name="l00189"></a>00189 <span class="comment">*      image with pixels in each column corresponding to </span>
-<a name="l00190"></a>00190 <span class="comment">*      undefined (blank, ZERO) values. The distribution</span>
-<a name="l00191"></a>00191 <span class="comment">*      of these undefined values varies from column to</span>
-<a name="l00192"></a>00192 <span class="comment">*      column. The input image is resampled at discrete</span>
-<a name="l00193"></a>00193 <span class="comment">*      wavelength intervals using a polynomial interpolation</span>
-<a name="l00194"></a>00194 <span class="comment">*      routine. </span>
-<a name="l00195"></a>00195 <span class="comment">*      The wavelength intervals (dispersion) and the </span>
-<a name="l00196"></a>00196 <span class="comment">*      central wavelength are defined and stable for each</span>
-<a name="l00197"></a>00197 <span class="comment">*      used grating. Thus, each row has a defined wavelength</span>
-<a name="l00198"></a>00198 <span class="comment">*      for each grating. Only the number of rows can be </span>
-<a name="l00199"></a>00199 <span class="comment">*      changed by the user. </span>
-<a name="l00200"></a>00200 <span class="comment">*</span>
-<a name="l00201"></a>00201 <span class="comment">*   FILES</span>
-<a name="l00202"></a>00202 <span class="comment">*</span>
-<a name="l00203"></a>00203 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00204"></a>00204 <span class="comment">*</span>
-<a name="l00205"></a>00205 <span class="comment">*   RETURN VALUES </span>
-<a name="l00206"></a>00206 <span class="comment">*</span>
-<a name="l00207"></a>00207 <span class="comment">*   CAUTIONS </span>
-<a name="l00208"></a>00208 <span class="comment">*</span>
-<a name="l00209"></a>00209 <span class="comment">*   EXAMPLES</span>
-<a name="l00210"></a>00210 <span class="comment">*</span>
-<a name="l00211"></a>00211 <span class="comment">*   SEE ALSO</span>
-<a name="l00212"></a>00212 <span class="comment">*</span>
-<a name="l00213"></a>00213 <span class="comment">*   BUGS   </span>
-<a name="l00214"></a>00214 <span class="comment">*</span>
-<a name="l00215"></a>00215 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00216"></a>00216 <span class="comment">*/</span>
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00219"></a>00219 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00220"></a>00220 <span class="preprocessor">#endif</span>
-<a name="l00221"></a>00221 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00222"></a>00222 
-<a name="l00223"></a>00223 <span class="comment">/* </span>
-<a name="l00224"></a>00224 <span class="comment"> * System Headers</span>
-<a name="l00225"></a>00225 <span class="comment"> */</span>
-<a name="l00226"></a>00226 
-<a name="l00227"></a>00227 <span class="comment">/* </span>
-<a name="l00228"></a>00228 <span class="comment"> * Local Headers</span>
-<a name="l00229"></a>00229 <span class="comment"> */</span>
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00232"></a>00232 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00233"></a>00233 <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00234"></a>00234 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00235"></a>00235 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00236"></a>00236 <span class="preprocessor">#include "sinfo_svd.h"</span>
-<a name="l00237"></a>00237 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00255"></a>00255 FitParams ** sinfo_new_fit_params( <span class="keywordtype">int</span> n_params )
-<a name="l00256"></a>00256 {
-<a name="l00257"></a>00257     FitParams ** new_params =NULL;
-<a name="l00258"></a>00258     FitParams  * temp_params =NULL;
-<a name="l00259"></a>00259     <span class="keywordtype">float</span> * temp_fit_mem =NULL;
-<a name="l00260"></a>00260     <span class="keywordtype">float</span> * temp_derv_mem=NULL;
-<a name="l00261"></a>00261     <span class="keywordtype">int</span> i ;
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     
-<a name="l00264"></a>00264     <span class="keywordflow">if</span> ( n_params <= 0 )
-<a name="l00265"></a>00265     {
-<a name="l00266"></a>00266         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of lines to fit\n"</span>) ;
-<a name="l00267"></a>00267         <span class="keywordflow">return</span> NULL ;
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270     <span class="keywordflow">if</span> (NULL==(new_params=(FitParams **) cpl_calloc ( n_params , 
-<a name="l00271"></a>00271                                          <span class="keyword">sizeof</span> (FitParams*) ) ) )
-<a name="l00272"></a>00272     {
-<a name="l00273"></a>00273         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;
-<a name="l00274"></a>00274         <span class="keywordflow">return</span> NULL ;
-<a name="l00275"></a>00275     }
-<a name="l00276"></a>00276     <span class="keywordflow">if</span> ( NULL == (temp_params = cpl_calloc ( n_params , <span class="keyword">sizeof</span> (FitParams) ) ) )
-<a name="l00277"></a>00277     {
-<a name="l00278"></a>00278         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;
-<a name="l00279"></a>00279         <span class="keywordflow">return</span> NULL ;
-<a name="l00280"></a>00280     }
-<a name="l00281"></a>00281     <span class="keywordflow">if</span> ( NULL == (temp_fit_mem = (<span class="keywordtype">float</span> *) cpl_calloc( n_params*MAXPAR, 
-<a name="l00282"></a>00282                                      <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ) )
-<a name="l00283"></a>00283     {
-<a name="l00284"></a>00284         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;
-<a name="l00285"></a>00285         <span class="keywordflow">return</span> NULL ;
-<a name="l00286"></a>00286     }
-<a name="l00287"></a>00287 
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289     <span class="keywordflow">if</span> ( NULL == (temp_derv_mem   = 
-<a name="l00290"></a>00290              (<span class="keywordtype">float</span> *) cpl_calloc( n_params*MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ) )
-<a name="l00291"></a>00291     {
-<a name="l00292"></a>00292         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;
-<a name="l00293"></a>00293         <span class="keywordflow">return</span> NULL ;
-<a name="l00294"></a>00294     }
-<a name="l00295"></a>00295 
-<a name="l00296"></a>00296     <span class="keywordflow">for</span> ( i = 0 ; i < n_params ; i ++ )
-<a name="l00297"></a>00297     {
-<a name="l00298"></a>00298         new_params[i] = temp_params+i;
-<a name="l00299"></a>00299         new_params[i] -> fit_par    = temp_fit_mem+i*MAXPAR;
-<a name="l00300"></a>00300         new_params[i] -> derv_par   = temp_derv_mem+i*MAXPAR;
-<a name="l00301"></a>00301         new_params[i] -> column     = 0 ;
-<a name="l00302"></a>00302         new_params[i] -> line       = 0 ;
-<a name="l00303"></a>00303         new_params[i] -> wavelength = 0. ;
-<a name="l00304"></a>00304         new_params[i] -> n_params   = n_params ;
-<a name="l00305"></a>00305     }
-<a name="l00306"></a>00306 
-<a name="l00307"></a>00307     <span class="keywordflow">return</span> new_params ;
-<a name="l00308"></a>00308 }
-<a name="l00309"></a>00309 
-<a name="l00317"></a>00317 <span class="keywordtype">void</span> sinfo_new_destroy_fit_params ( FitParams *** params )
-<a name="l00318"></a>00318 { 
-<a name="l00319"></a>00319     
-<a name="l00320"></a>00320     <span class="keywordflow">if</span> ( *params == NULL )
-<a name="l00321"></a>00321     {
-<a name="l00322"></a>00322         return ;
-<a name="l00323"></a>00323     }
-<a name="l00324"></a>00324 
-<a name="l00325"></a>00325     cpl_free ( (*params)[0] -> fit_par ) ;
-<a name="l00326"></a>00326     (*params)[0] -> fit_par=NULL;
-<a name="l00327"></a>00327     cpl_free ( (*params)[0] -> derv_par ) ;
-<a name="l00328"></a>00328     (*params)[0] -> derv_par=NULL;
-<a name="l00329"></a>00329     cpl_free ( (*params)[0] ) ;
-<a name="l00330"></a>00330     (*params)[0]=NULL;
-<a name="l00331"></a>00331     cpl_free ( (*params) ) ;
-<a name="l00332"></a>00332     (*params)=NULL;
-<a name="l00333"></a>00333 }
-<a name="l00334"></a>00334 
-<a name="l00343"></a>00343 <span class="keywordtype">void</span> sinfo_new_dump_fit_params_to_ascii ( FitParams ** params, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename )
-<a name="l00344"></a>00344 {
-<a name="l00345"></a>00345     FILE * fp ;
-<a name="l00346"></a>00346     <span class="keywordtype">int</span>    i ;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     <span class="keywordflow">if</span> ( NULL == params )
-<a name="l00349"></a>00349     {
-<a name="l00350"></a>00350         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters available!\n"</span>) ;
-<a name="l00351"></a>00351         return ;
-<a name="l00352"></a>00352     }
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354     <span class="keywordflow">if</span> ( NULL == filename )
-<a name="l00355"></a>00355     {
-<a name="l00356"></a>00356         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no filename available!\n"</span>) ;
-<a name="l00357"></a>00357         return ;
-<a name="l00358"></a>00358     }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"w"</span> ) ) )
-<a name="l00361"></a>00361     {
-<a name="l00362"></a>00362         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, filename) ;
-<a name="l00363"></a>00363         return ;
-<a name="l00364"></a>00364     }
-<a name="l00365"></a>00365 
-<a name="l00366"></a>00366     <span class="keywordflow">for</span> ( i = 0 ; i < params[0] -> n_params ; i++ )
-<a name="l00367"></a>00367     {
-<a name="l00368"></a>00368         fprintf(fp, <span class="stringliteral">"%d %d %d %f %f %f %f %f %f %f %f %f\n"</span>, 
-<a name="l00369"></a>00369                      params[i]->n_params, 
-<a name="l00370"></a>00370                      params[i]->column, 
-<a name="l00371"></a>00371                      params[i]->line, 
-<a name="l00372"></a>00372                      params[i]->wavelength, 
-<a name="l00373"></a>00373                      params[i]->fit_par[0], 
-<a name="l00374"></a>00374                      params[i]->fit_par[1], 
-<a name="l00375"></a>00375                      params[i]->fit_par[2], 
-<a name="l00376"></a>00376                      params[i]->fit_par[3],
-<a name="l00377"></a>00377                      params[i]->derv_par[0], 
-<a name="l00378"></a>00378                      params[i]->derv_par[1], 
-<a name="l00379"></a>00379                      params[i]->derv_par[2], 
-<a name="l00380"></a>00380                      params[i]->derv_par[3] ) ; 
-<a name="l00381"></a>00381     }
-<a name="l00382"></a>00382     fclose(fp) ;
-<a name="l00383"></a>00383 }
-<a name="l00384"></a>00384 
-<a name="l00393"></a>00393 <span class="keywordtype">void</span> 
-<a name="l00394"></a>00394 sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, <span class="keywordtype">char</span> * filename )
-<a name="l00395"></a>00395 {
-<a name="l00396"></a>00396     FILE * fp ;
-<a name="l00397"></a>00397     <span class="keywordtype">int</span> i ;
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399     <span class="keywordflow">if</span> ( NULL == params )
-<a name="l00400"></a>00400     {
-<a name="l00401"></a>00401         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters available!\n"</span>) ;
-<a name="l00402"></a>00402         return ;
-<a name="l00403"></a>00403     }
-<a name="l00404"></a>00404 
-<a name="l00405"></a>00405     <span class="keywordflow">if</span> ( NULL == filename )
-<a name="l00406"></a>00406     {
-<a name="l00407"></a>00407         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no filename available!\n"</span>) ;
-<a name="l00408"></a>00408         return ;
-<a name="l00409"></a>00409     }
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"r"</span> ) ) )
-<a name="l00412"></a>00412     {
-<a name="l00413"></a>00413         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, filename) ;
-<a name="l00414"></a>00414         return ;
-<a name="l00415"></a>00415     }
-<a name="l00416"></a>00416     
-<a name="l00417"></a>00417     <span class="keywordflow">for</span> ( i = 0 ; i < params[0]->n_params ; i++ )
-<a name="l00418"></a>00418     {
-<a name="l00419"></a>00419         fscanf(fp, <span class="stringliteral">"%d %d %d %f %f %f %f %f %f %f %f %f\n"</span>, 
-<a name="l00420"></a>00420                     &params[i]->n_params, 
-<a name="l00421"></a>00421                     &params[i]->column, 
-<a name="l00422"></a>00422                     &params[i]->line, 
-<a name="l00423"></a>00423                     &params[i]->wavelength, 
-<a name="l00424"></a>00424                     &params[i]->fit_par[0], 
-<a name="l00425"></a>00425                     &params[i]->fit_par[1], 
-<a name="l00426"></a>00426                     &params[i]->fit_par[2], 
-<a name="l00427"></a>00427                     &params[i]->fit_par[3],
-<a name="l00428"></a>00428                     &params[i]->derv_par[0], 
-<a name="l00429"></a>00429                     &params[i]->derv_par[1], 
-<a name="l00430"></a>00430                     &params[i]->derv_par[2], 
-<a name="l00431"></a>00431                     &params[i]->derv_par[3] ) ; 
-<a name="l00432"></a>00432     }
-<a name="l00433"></a>00433     fclose(fp) ;
-<a name="l00434"></a>00434 }
-<a name="l00435"></a>00435 
-<a name="l00474"></a>00474 <span class="keywordtype">int</span> sinfo_new_find_lines(cpl_image * lineImage, 
-<a name="l00475"></a>00475                <span class="keywordtype">float</span>    * wave_position, 
-<a name="l00476"></a>00476                <span class="keywordtype">float</span>    * wave_intensity,
-<a name="l00477"></a>00477                <span class="keywordtype">int</span>        n_lines, 
-<a name="l00478"></a>00478                <span class="keywordtype">int</span>     ** row_clean,
-<a name="l00479"></a>00479                <span class="keywordtype">float</span>   ** wavelength_clean,
-<a name="l00480"></a>00480                <span class="keywordtype">float</span>      beginWave, 
-<a name="l00481"></a>00481                <span class="keywordtype">float</span>      dispersion1,
-<a name="l00482"></a>00482                <span class="keywordtype">float</span>      dispersion2,
-<a name="l00483"></a>00483                <span class="keywordtype">float</span>      mindiff, 
-<a name="l00484"></a>00484                <span class="keywordtype">int</span>        halfWidth,
-<a name="l00485"></a>00485                <span class="keywordtype">int</span>      * n_found_lines,
-<a name="l00486"></a>00486                <span class="keywordtype">float</span>      sigma,
-<a name="l00487"></a>00487                <span class="keywordtype">int</span>      * sum_lines )
-<a name="l00488"></a>00488 {
-<a name="l00489"></a>00489     <span class="keywordtype">int</span>     ** row ;
-<a name="l00490"></a>00490     <span class="keywordtype">float</span>   ** wavelength ;
-<a name="l00491"></a>00491     <span class="keywordtype">float</span> buf1, buf2 ;
-<a name="l00492"></a>00492     <span class="keywordtype">float</span> meanval ;
-<a name="l00493"></a>00493     <span class="keywordtype">float</span> colmedian ;
-<a name="l00494"></a>00494     <span class="keywordtype">float</span> * column, * tempcol ;
-<a name="l00495"></a>00495     <span class="keywordtype">float</span> * lines ;
-<a name="l00496"></a>00496     <span class="keywordtype">float</span> * conv_lines ;
-<a name="l00497"></a>00497     <span class="keywordtype">float</span> * wave_buffer ;
-<a name="l00498"></a>00498     <span class="keywordtype">float</span> * wave_mem;
-<a name="l00499"></a>00499     <span class="keywordtype">int</span>   * dummy_row ;
-<a name="l00500"></a>00500     <span class="keywordtype">int</span> i, j, k, m ;
-<a name="l00501"></a>00501     <span class="keywordtype">int</span> position ;
-<a name="l00502"></a>00502     <span class="keywordtype">int</span> gmax, gmin ;
-<a name="l00503"></a>00503     <span class="keywordtype">int</span> col ;
-<a name="l00504"></a>00504     <span class="keywordtype">int</span> * row_mem;
-<a name="l00505"></a>00505     <span class="keywordtype">float</span> sum ;
-<a name="l00506"></a>00506     <span class="keywordtype">float</span> angst ;
-<a name="l00507"></a>00507 
-<a name="l00508"></a>00508     <span class="keywordtype">int</span> lx=0;
-<a name="l00509"></a>00509     <span class="keywordtype">int</span> ly=0;
-<a name="l00510"></a>00510     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l00513"></a>00513     {
-<a name="l00514"></a>00514         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given\n"</span>) ;
-<a name="l00515"></a>00515         <span class="keywordflow">return</span> -1 ;
-<a name="l00516"></a>00516     }
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518     lx=cpl_image_get_size_x(lineImage);
-<a name="l00519"></a>00519     ly=cpl_image_get_size_y(lineImage);
-<a name="l00520"></a>00520     pdata=cpl_image_get_data_float(lineImage);
-<a name="l00521"></a>00521 
-<a name="l00522"></a>00522     <span class="keywordflow">if</span> ( n_lines <= 0 || NULL == wave_position ) 
-<a name="l00523"></a>00523     {
-<a name="l00524"></a>00524         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line list given\n"</span>) ;
-<a name="l00525"></a>00525         <span class="keywordflow">return</span> -1 ;
-<a name="l00526"></a>00526     }
-<a name="l00527"></a>00527     <span class="keywordflow">if</span> ( NULL == wave_intensity ) 
-<a name="l00528"></a>00528     {
-<a name="l00529"></a>00529         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no intensity list given\n"</span>) ;
-<a name="l00530"></a>00530         <span class="keywordflow">return</span> -1 ;
-<a name="l00531"></a>00531     }
-<a name="l00532"></a>00532      
-<a name="l00533"></a>00533     <span class="keywordflow">if</span> ( dispersion1 == 0. )
-<a name="l00534"></a>00534     {
-<a name="l00535"></a>00535         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong dispersion given\n"</span>) ;
-<a name="l00536"></a>00536         <span class="keywordflow">return</span> -1 ;
-<a name="l00537"></a>00537     }
-<a name="l00538"></a>00538    
-<a name="l00539"></a>00539     <span class="keywordflow">if</span> ( row_clean == NULL )
-<a name="l00540"></a>00540     {
-<a name="l00541"></a>00541         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" row_clean array is not allocated\n"</span>) ;
-<a name="l00542"></a>00542         <span class="keywordflow">return</span> -1 ;
-<a name="l00543"></a>00543     }
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545     <span class="keywordflow">if</span> ( wavelength_clean == NULL )
-<a name="l00546"></a>00546     {
-<a name="l00547"></a>00547         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelength_clean array is not allocated\n"</span>) ;
-<a name="l00548"></a>00548         <span class="keywordflow">return</span> -1 ;
-<a name="l00549"></a>00549     }
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551     <span class="keywordflow">if</span> ( beginWave <= 0. )
-<a name="l00552"></a>00552     {
-<a name="l00553"></a>00553         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" impossible beginWave given\n"</span>) ;
-<a name="l00554"></a>00554         <span class="keywordflow">return</span> -1 ;
-<a name="l00555"></a>00555     }
-<a name="l00556"></a>00556     <span class="keywordflow">if</span> ( mindiff < -100. )
-<a name="l00557"></a>00557     {
-<a name="l00558"></a>00558         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong mindiff value\n"</span>) ;
-<a name="l00559"></a>00559         <span class="keywordflow">return</span> -1 ;
-<a name="l00560"></a>00560     }
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562     <span class="keywordflow">if</span> ( halfWidth <= 0 )
-<a name="l00563"></a>00563     {
-<a name="l00564"></a>00564         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width of fit box given\n"</span>) ;
-<a name="l00565"></a>00565         <span class="keywordflow">return</span> -1 ;
-<a name="l00566"></a>00566     }
-<a name="l00567"></a>00567 
-<a name="l00568"></a>00568     <span class="keywordflow">if</span> ( n_found_lines == NULL )
-<a name="l00569"></a>00569     {
-<a name="l00570"></a>00570         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" n_found_lines not allocated\n"</span>) ;
-<a name="l00571"></a>00571         <span class="keywordflow">return</span> -1 ;
-<a name="l00572"></a>00572     }
-<a name="l00573"></a>00573 
-<a name="l00574"></a>00574     <span class="keywordflow">if</span> ( sigma <= 0. || sigma >= ly / 2)
-<a name="l00575"></a>00575     {
-<a name="l00576"></a>00576         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong sigma given\n"</span>) ;
-<a name="l00577"></a>00577         <span class="keywordflow">return</span> -1 ;
-<a name="l00578"></a>00578     }
-<a name="l00579"></a>00579     
-<a name="l00580"></a>00580     <span class="comment">/* allocate memory */</span>
-<a name="l00581"></a>00581     row        = (<span class="keywordtype">int</span>**) cpl_calloc( lx, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>*)) ;
-<a name="l00582"></a>00582     wavelength = (<span class="keywordtype">float</span>**) cpl_calloc( lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)) ;
-<a name="l00583"></a>00583     row_mem = cpl_calloc( n_lines*lx, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;
-<a name="l00584"></a>00584     wave_mem = cpl_calloc( n_lines*lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;
-<a name="l00585"></a>00585     <span class="keywordflow">for</span> ( i = 0 ; i <lx ; i++ )
-<a name="l00586"></a>00586     {
-<a name="l00587"></a>00587         row[i] = row_mem + i*n_lines;
-<a name="l00588"></a>00588         wavelength[i] = wave_mem + i*n_lines;
-<a name="l00589"></a>00589     }
-<a name="l00590"></a>00590 
-<a name="l00591"></a>00591     <span class="comment">/* find if the wavelength is given in microns, nanometers or Angstroem */</span>
-<a name="l00592"></a>00592     <span class="keywordflow">if</span> ( wave_position[0] > 10000. )
-<a name="l00593"></a>00593     {
-<a name="l00594"></a>00594     <span class="comment">/* Angstroem */</span>
-<a name="l00595"></a>00595         angst = 10000. ;
-<a name="l00596"></a>00596     }
-<a name="l00597"></a>00597     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wave_position[0] > 1000. && wave_position[0] < 10000. )
-<a name="l00598"></a>00598     {
-<a name="l00599"></a>00599     <span class="comment">/* nanometers */</span>
-<a name="l00600"></a>00600     angst = 1000. ;
-<a name="l00601"></a>00601     }
-<a name="l00602"></a>00602     <span class="keywordflow">else</span>
-<a name="l00603"></a>00603     {
-<a name="l00604"></a>00604     <span class="comment">/* microns */</span>
-<a name="l00605"></a>00605     angst = 1. ;
-<a name="l00606"></a>00606     }
-<a name="l00607"></a>00607 
-<a name="l00608"></a>00608     <span class="comment">/*----------------------------------------------------------------------</span>
-<a name="l00609"></a>00609 <span class="comment">     * compute the mean and median intensity value in the given </span>
-<a name="l00610"></a>00610 <span class="comment">       column and determine if there is enough intensity in the column to </span>
-<a name="l00611"></a>00611 <span class="comment">       do the correlation</span>
-<a name="l00612"></a>00612 <span class="comment">     */</span>
-<a name="l00613"></a>00613     tempcol = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00614"></a>00614     *sum_lines = 0 ;
-<a name="l00615"></a>00615     buf1 = 0. ;
-<a name="l00616"></a>00616     buf2 = 0. ;
-<a name="l00617"></a>00617     <span class="comment">/* allocate memory */</span>
-<a name="l00618"></a>00618     column      = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00619"></a>00619     lines       = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00620"></a>00620     conv_lines  = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00621"></a>00621     wave_buffer = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;
-<a name="l00622"></a>00622     dummy_row   = (<span class="keywordtype">int</span>*)   cpl_calloc(n_lines, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l00623"></a>00623 
-<a name="l00624"></a>00624     <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )
-<a name="l00625"></a>00625     {
-<a name="l00626"></a>00626         n_found_lines[col] = 0 ;
-<a name="l00627"></a>00627         sum = 0. ;
-<a name="l00628"></a>00628         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )
-<a name="l00629"></a>00629         {
-<a name="l00630"></a>00630             <span class="keywordflow">if</span> (isnan(pdata[col + i*lx]) )
-<a name="l00631"></a>00631             {
-<a name="l00632"></a>00632                 tempcol[i] = 0. ;
-<a name="l00633"></a>00633                 continue ;
-<a name="l00634"></a>00634             }
-<a name="l00635"></a>00635 
-<a name="l00636"></a>00636         sum = sum + pdata[col + i*lx] ;
-<a name="l00637"></a>00637         tempcol[i] = pdata[col + i*lx];
-<a name="l00638"></a>00638         }
-<a name="l00639"></a>00639         meanval = sum / ly ;
-<a name="l00640"></a>00640         <span class="comment">/* lets assume the sinfo_new_median is the background */</span>
-<a name="l00641"></a>00641         colmedian =  sinfo_new_median ( tempcol, ly);
-<a name="l00642"></a>00642 
-<a name="l00643"></a>00643         <span class="keywordflow">if</span> ( meanval - colmedian < mindiff )
-<a name="l00644"></a>00644         {
-<a name="l00645"></a>00645         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" sorry, not enough intensity "</span>
-<a name="l00646"></a>00646                               <span class="stringliteral">"(mean: %f, diff: %f) in image column: "</span>
-<a name="l00647"></a>00647                                <span class="stringliteral">"%d to correlate emission lines\n"</span>, 
-<a name="l00648"></a>00648                                 meanval, meanval - colmedian,col) ;
-<a name="l00649"></a>00649         continue ;
-<a name="l00650"></a>00650     }
-<a name="l00651"></a>00651 
-<a name="l00652"></a>00652         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )
-<a name="l00653"></a>00653           {
-<a name="l00654"></a>00654       conv_lines[i]=0;
-<a name="l00655"></a>00655       wave_buffer[i]=0;
-<a name="l00656"></a>00656     }
-<a name="l00657"></a>00657     <span class="keywordflow">for</span> ( i = 0 ; i < n_lines ; i++ )
-<a name="l00658"></a>00658     {
-<a name="l00659"></a>00659       dummy_row[i] = 0;
-<a name="l00660"></a>00660     }
-<a name="l00661"></a>00661 
-<a name="l00662"></a>00662         <span class="comment">/* go through the column with index col */</span>
-<a name="l00663"></a>00663         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )
-<a name="l00664"></a>00664         {
-<a name="l00665"></a>00665             <span class="keywordflow">if</span> ( isnan(pdata[col+i*lx]) )
-<a name="l00666"></a>00666             {
-<a name="l00667"></a>00667                 column[i] = 0. ;
-<a name="l00668"></a>00668             }
-<a name="l00669"></a>00669             <span class="keywordflow">else</span>
-<a name="l00670"></a>00670             {
-<a name="l00671"></a>00671                 column[i] = pdata[col + i*lx] ;
-<a name="l00672"></a>00672             }
-<a name="l00673"></a>00673 
-<a name="l00674"></a>00674             <span class="comment">/* determine the line position on the pixels */</span>
-<a name="l00675"></a>00675             <span class="comment">/*lines[i] = (dispersion * (float) i + beginWave) * angst ;*/</span> 
-<a name="l00676"></a>00676             lines[i] = (dispersion1 * (float) (i-ly/2) + 
-<a name="l00677"></a>00677                         dispersion2 * (float) (i-ly/2) * 
-<a name="l00678"></a>00678                                       (float) (i-ly/2) + 
-<a name="l00679"></a>00679                                               beginWave) * angst ; 
-<a name="l00680"></a>00680 
-<a name="l00681"></a>00681             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l00682"></a>00682 <span class="comment">             * find the nearest line position for each wavelength in the list </span>
-<a name="l00683"></a>00683 <span class="comment">             * and set this position to the given line intensity as weight </span>
-<a name="l00684"></a>00684 <span class="comment">             */</span>
-<a name="l00685"></a>00685             <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ )
-<a name="l00686"></a>00686             {
-<a name="l00687"></a>00687                 buf1 = 0. ;
-<a name="l00688"></a>00688                 buf2 = 0. ;
-<a name="l00689"></a>00689                 <span class="keywordflow">if</span> ( (wave_position[j] >= (lines[i] - 
-<a name="l00690"></a>00690                       fabs(dispersion1)/2.*angst)) && 
-<a name="l00691"></a>00691                      (wave_position[j] <= (lines[i] + 
-<a name="l00692"></a>00692                       fabs(dispersion1)/2.*angst)) ) 
-<a name="l00693"></a>00693                 {
-<a name="l00694"></a>00694                     buf1 = wave_intensity[j] ; <span class="comment">/* set the given line intensity </span>
-<a name="l00695"></a>00695 <span class="comment">                                                  as weight */</span>
-<a name="l00696"></a>00696                     buf2 = wave_position[j] ;
-<a name="l00697"></a>00697                     break ;
-<a name="l00698"></a>00698                 }
-<a name="l00699"></a>00699             }
-<a name="l00700"></a>00700             lines[i] = buf1 ;
-<a name="l00701"></a>00701             wave_buffer[i] = buf2 ; <span class="comment">/* get the wavelength associated </span>
-<a name="l00702"></a>00702 <span class="comment">                                       with the corresponding </span>
-<a name="l00703"></a>00703 <span class="comment">                                           found emission line */</span>
-<a name="l00704"></a>00704     
-<a name="l00705"></a>00705             <span class="comment">/* convolve the artificial spectrum by a Gaussian </span>
-<a name="l00706"></a>00706 <span class="comment">               with given sigma value */</span>
-<a name="l00707"></a>00707             <span class="keywordflow">if</span> ( lines[i] != 0. )
-<a name="l00708"></a>00708             {
-<a name="l00709"></a>00709                 <span class="comment">/* consider only +- 2 sigma */</span>
-<a name="l00710"></a>00710                 gmin = sinfo_new_nint((<span class="keywordtype">float</span>) i - 2. * sigma) ;
-<a name="l00711"></a>00711                 gmax = sinfo_new_nint((<span class="keywordtype">float</span>) i + 2. * sigma) ;
-<a name="l00712"></a>00712 
-<a name="l00713"></a>00713                 <span class="comment">/* be aware of image margins */</span>
-<a name="l00714"></a>00714                 <span class="keywordflow">if</span> ( gmin < 0 )
-<a name="l00715"></a>00715                 {
-<a name="l00716"></a>00716                     gmin = 0 ;
-<a name="l00717"></a>00717                 }
-<a name="l00718"></a>00718                 <span class="keywordflow">if</span> ( gmax >= ly )
-<a name="l00719"></a>00719                 {
-<a name="l00720"></a>00720                     gmax = ly - 1 ;
-<a name="l00721"></a>00721                 } 
-<a name="l00722"></a>00722                 <span class="keywordflow">for</span> ( j = gmin ; j <= gmax ; j++ )
-<a name="l00723"></a>00723                 {
-<a name="l00724"></a>00724                     conv_lines[j] += 
-<a name="l00725"></a>00725                         lines[i] * exp( (<span class="keywordtype">double</span>)( -0.5*((j - i)*(j - i)))/
-<a name="l00726"></a>00726                                         (<span class="keywordtype">double</span>) (sigma*sigma) ) ; 
-<a name="l00727"></a>00727                 }
-<a name="l00728"></a>00728             }
-<a name="l00729"></a>00729         }
-<a name="l00730"></a>00730 
-<a name="l00731"></a>00731         <span class="comment">/* do the cross sinfo_new_correlitioation */</span>
-<a name="l00732"></a>00732         position = INT32_MAX ;
-<a name="l00733"></a>00733         position = sinfo_new_correlation(column+5, conv_lines+5, ly-10 ) ; 
-<a name="l00734"></a>00734         <span class="keywordflow">if</span> ( abs (position) > ly / 4 )
-<a name="l00735"></a>00735         {
-<a name="l00736"></a>00736             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" sorry, shift of artificial data relative to"</span>
-<a name="l00737"></a>00737                               <span class="stringliteral">" image (%d) seems to be too high in column: %d"</span>,
-<a name="l00738"></a>00738                               position, col) ;
-<a name="l00739"></a>00739             continue ;
-<a name="l00740"></a>00740         }
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742         <span class="comment">//AMO we initialize this to -999 and later check that it is not</span>
-<a name="l00743"></a>00743         <span class="comment">//-999 to prevent an invalid read out due to the fact that not</span>
-<a name="l00744"></a>00744         <span class="comment">//all elements of row are filled by the the loop below</span>
-<a name="l00745"></a>00745         <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ ) {
-<a name="l00746"></a>00746           row[col][j] = -999;
-<a name="l00747"></a>00747     }
-<a name="l00748"></a>00748 
-<a name="l00749"></a>00749         <span class="comment">//The following loop does not fill all elements</span>
-<a name="l00750"></a>00750         j = 0 ;
-<a name="l00751"></a>00751         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i ++ )
-<a name="l00752"></a>00752         {
-<a name="l00753"></a>00753             <span class="keywordflow">if</span> ( lines[i] != 0.0 )
-<a name="l00754"></a>00754             {
-<a name="l00755"></a>00755                 <span class="keywordflow">if</span> ( (i - position) >= 0 && (i - position) < ly )
-<a name="l00756"></a>00756                 {
-<a name="l00757"></a>00757                     row[col][j] = i - position ;
-<a name="l00758"></a>00758                     <span class="comment">/* get the wavelength corresponding to </span>
-<a name="l00759"></a>00759 <span class="comment">                       found line row index */</span>
-<a name="l00760"></a>00760                     wavelength[col][j] = wave_buffer[i] / angst ;
-<a name="l00761"></a>00761                     j++ ;
-<a name="l00762"></a>00762                 }
-<a name="l00763"></a>00763             }
-<a name="l00764"></a>00764         }
-<a name="l00765"></a>00765 
-<a name="l00766"></a>00766 
-<a name="l00767"></a>00767         <span class="comment">/* ------------------------------------------------------------------</span>
-<a name="l00768"></a>00768 <span class="comment">         *  determine the row_clean array, that means, take only the row </span>
-<a name="l00769"></a>00769 <span class="comment">            values if the distance between adjacent lines is large enough </span>
-<a name="l00770"></a>00770 <span class="comment">            for the fit</span>
-<a name="l00771"></a>00771 <span class="comment">         */</span>
-<a name="l00772"></a>00772         <span class="comment">//sinfo_msg("lx=%d",lx);</span>
-<a name="l00773"></a>00773         <span class="keywordflow">for</span> ( k = 1 ; k <= j && k<(lx-1); k ++ )
-<a name="l00774"></a>00774         {
-<a name="l00775"></a>00775             <span class="keywordflow">if</span> (dummy_row[k-1] != -1)
-<a name="l00776"></a>00776             {
-<a name="l00777"></a>00777                 dummy_row[k-1] = row[col][k-1] ;
-<a name="l00778"></a>00778             }
-<a name="l00779"></a>00779             <span class="keywordflow">if</span> ( (row[col][k] - row[col][k-1]) <= 2*halfWidth )
-<a name="l00780"></a>00780             {
-<a name="l00781"></a>00781                 dummy_row[k-1] = -1 ;
-<a name="l00782"></a>00782         <span class="keywordflow">if</span> (k<n_lines) {
-<a name="l00783"></a>00783                   dummy_row[k]   = -1 ;
-<a name="l00784"></a>00784         }
-<a name="l00785"></a>00785             }
-<a name="l00786"></a>00786             <span class="comment">/* the following gives invalid read size 4: check that k+1<lx */</span>
-<a name="l00787"></a>00787             
-<a name="l00788"></a>00788             <span class="comment">//sinfo_msg("col=%d k=%d row1=%d row2=%d",</span>
-<a name="l00789"></a>00789             <span class="comment">//           col,k,row[col][k+1],row[col][k]);</span>
-<a name="l00790"></a>00790             <span class="keywordflow">if</span> ( (row[col][j] != -999) && 
-<a name="l00791"></a>00791                  (row[col][k+1] - row[col][k]) <= 2*halfWidth)
-<a name="l00792"></a>00792             {
-<a name="l00793"></a>00793           <span class="keywordflow">if</span> (k<n_lines) {
-<a name="l00794"></a>00794                   dummy_row[k]   = -1 ;
-<a name="l00795"></a>00795           }
-<a name="l00796"></a>00796           <span class="keywordflow">if</span> (k+1<n_lines) {
-<a name="l00797"></a>00797                   dummy_row[k+1] = -1 ;
-<a name="l00798"></a>00798           }
-<a name="l00799"></a>00799             }
-<a name="l00800"></a>00800         }
-<a name="l00801"></a>00801 
-<a name="l00802"></a>00802         m = 0 ;
-<a name="l00803"></a>00803         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k ++ )
-<a name="l00804"></a>00804         {
-<a name="l00805"></a>00805             <span class="keywordflow">if</span> ( dummy_row[k] != -1 && dummy_row[k] != 0 )
-<a name="l00806"></a>00806             {
-<a name="l00807"></a>00807                 row_clean[col][m] = dummy_row[k] ;
-<a name="l00808"></a>00808                 wavelength_clean[col][m] = wavelength[col][k] ;
-<a name="l00809"></a>00809                 m ++ ;
-<a name="l00810"></a>00810             }
-<a name="l00811"></a>00811         }
-<a name="l00812"></a>00812 
-<a name="l00813"></a>00813         n_found_lines[col] = m ;
-<a name="l00814"></a>00814 
-<a name="l00815"></a>00815         *sum_lines += n_found_lines[col] ;
-<a name="l00816"></a>00816     }
-<a name="l00817"></a>00817     cpl_free (column) ;
-<a name="l00818"></a>00818     cpl_free (lines) ;
-<a name="l00819"></a>00819     cpl_free (conv_lines) ;
-<a name="l00820"></a>00820     cpl_free (dummy_row) ;
-<a name="l00821"></a>00821     cpl_free (wave_buffer) ;
-<a name="l00822"></a>00822     cpl_free (row_mem) ;
-<a name="l00823"></a>00823     cpl_free (wave_mem) ;
-<a name="l00824"></a>00824     cpl_free (tempcol) ;
-<a name="l00825"></a>00825     cpl_free (row) ;
-<a name="l00826"></a>00826     cpl_free (wavelength) ;
-<a name="l00827"></a>00827 
-<a name="l00828"></a>00828     <span class="keywordflow">return</span> 0 ;
-<a name="l00829"></a>00829 }
-<a name="l00830"></a>00830 
-<a name="l00840"></a>00840 <span class="keywordtype">int</span> 
-<a name="l00841"></a>00841 sinfo_new_read_list( <span class="keywordtype">char</span> * listname, 
-<a name="l00842"></a>00842                      <span class="keywordtype">float</span> * lineCenter, 
-<a name="l00843"></a>00843                      <span class="keywordtype">float</span> * lineIntensity )
-<a name="l00844"></a>00844 {
-<a name="l00845"></a>00845     FILE * fp ;
-<a name="l00846"></a>00846     <span class="keywordtype">int</span> i, n_lines ;
-<a name="l00847"></a>00847     
-<a name="l00848"></a>00848     <span class="keywordflow">if</span> ( NULL == lineCenter )
-<a name="l00849"></a>00849     {
-<a name="l00850"></a>00850         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lineCenter array is not allocated\n"</span>) ;
-<a name="l00851"></a>00851         <span class="keywordflow">return</span> -1 ;
-<a name="l00852"></a>00852     }
-<a name="l00853"></a>00853 
-<a name="l00854"></a>00854     <span class="keywordflow">if</span> ( NULL == lineIntensity )
-<a name="l00855"></a>00855     {
-<a name="l00856"></a>00856         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lineIntensity array is not allocated\n"</span>) ;
-<a name="l00857"></a>00857         <span class="keywordflow">return</span> -1 ;
-<a name="l00858"></a>00858     }
-<a name="l00859"></a>00859 
-<a name="l00860"></a>00860     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( listname, <span class="stringliteral">"r"</span> ) ) )
-<a name="l00861"></a>00861     {
-<a name="l00862"></a>00862         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, listname) ;
-<a name="l00863"></a>00863         <span class="keywordflow">return</span> -1 ;
-<a name="l00864"></a>00864     }
-<a name="l00865"></a>00865 
-<a name="l00866"></a>00866     i = 0 ;
-<a name="l00867"></a>00867     <span class="keywordflow">while</span> ( fscanf( fp, <span class="stringliteral">"%f %f"</span>, &lineCenter[i], &lineIntensity[i] ) != EOF )
-<a name="l00868"></a>00868     {
-<a name="l00869"></a>00869         i ++ ;
-<a name="l00870"></a>00870     }
-<a name="l00871"></a>00871     n_lines = i ;
-<a name="l00872"></a>00872     fclose(fp) ;
-<a name="l00873"></a>00873            
-<a name="l00874"></a>00874     <span class="keywordflow">return</span> n_lines ;
-<a name="l00875"></a>00875 }
-<a name="l00876"></a>00876 
-<a name="l00877"></a>00877 
-<a name="l00909"></a>00909 <span class="keywordtype">int</span> sinfo_new_line_fit ( cpl_image  *  mergedImage, 
-<a name="l00910"></a>00910               FitParams *  par,
-<a name="l00911"></a>00911               <span class="keywordtype">float</span>        fwhm,
-<a name="l00912"></a>00912               <span class="keywordtype">int</span>          lineInd,
-<a name="l00913"></a>00913               <span class="keywordtype">int</span>          column, 
-<a name="l00914"></a>00914               <span class="keywordtype">int</span>          halfWidth, 
-<a name="l00915"></a>00915               <span class="keywordtype">int</span>          lineRow,
-<a name="l00916"></a>00916               <span class="keywordtype">float</span>        min_amplitude,
-<a name="l00917"></a>00917           Vector    *  line,
-<a name="l00918"></a>00918           <span class="keywordtype">int</span>       *  mpar,
-<a name="l00919"></a>00919           <span class="keywordtype">float</span>     *  xdat,
-<a name="l00920"></a>00920           <span class="keywordtype">float</span>     *  wdat )
-<a name="l00921"></a>00921 {
-<a name="l00922"></a>00922     <span class="keywordtype">int</span> i, j ;
-<a name="l00923"></a>00923     <span class="keywordtype">int</span> iters, xdim, ndat ;
-<a name="l00924"></a>00924     <span class="keywordtype">int</span> numpar, its ;
-<a name="l00925"></a>00925     <span class="keywordtype">int</span> position ;
-<a name="l00926"></a>00926     <span class="keywordtype">float</span> maxval, tol, lab ;
-<a name="l00927"></a>00927     <span class="keywordtype">int</span> lx=0;
-<a name="l00928"></a>00928     <span class="keywordtype">int</span> ly=0;
-<a name="l00929"></a>00929     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l00930"></a>00930 
-<a name="l00931"></a>00931     <span class="keywordflow">if</span> ( mergedImage == NULL )
-<a name="l00932"></a>00932     {
-<a name="l00933"></a>00933         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given as input\n"</span>) ;
-<a name="l00934"></a>00934         <span class="keywordflow">return</span> -8 ;
-<a name="l00935"></a>00935     }
-<a name="l00936"></a>00936     lx=cpl_image_get_size_x(mergedImage);
-<a name="l00937"></a>00937     ly=cpl_image_get_size_y(mergedImage);
-<a name="l00938"></a>00938     pdata=cpl_image_get_data_float(mergedImage);
-<a name="l00939"></a>00939 
-<a name="l00940"></a>00940 
-<a name="l00941"></a>00941     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l00942"></a>00942     {
-<a name="l00943"></a>00943         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" fit parameters not given\n"</span>) ;
-<a name="l00944"></a>00944         <span class="keywordflow">return</span> -9 ;
-<a name="l00945"></a>00945     }
-<a name="l00946"></a>00946     <span class="keywordflow">if</span> ( column < 0 || column > lx )
-<a name="l00947"></a>00947     {
-<a name="l00948"></a>00948         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong column number\n"</span>) ;
-<a name="l00949"></a>00949         <span class="keywordflow">return</span> -10 ;
-<a name="l00950"></a>00950     }
-<a name="l00951"></a>00951     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth > ly )
-<a name="l00952"></a>00952     {
-<a name="l00953"></a>00953         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong width given\n"</span>) ;
-<a name="l00954"></a>00954         <span class="keywordflow">return</span> -11 ;
-<a name="l00955"></a>00955     }
-<a name="l00956"></a>00956     <span class="keywordflow">if</span> ( lineRow < 0 || lineRow > ly )
-<a name="l00957"></a>00957     {
-<a name="l00958"></a>00958         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of row of the line given\n"</span>) ;
-<a name="l00959"></a>00959         <span class="keywordflow">return</span> -12 ;
-<a name="l00960"></a>00960     }
-<a name="l00961"></a>00961     <span class="keywordflow">if</span> ( min_amplitude < 1. )
-<a name="l00962"></a>00962     {
-<a name="l00963"></a>00963         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong minimum amplitude\n"</span>) ;
-<a name="l00964"></a>00964         <span class="keywordflow">return</span> -13 ;
-<a name="l00965"></a>00965     }
-<a name="l00966"></a>00966     
-<a name="l00967"></a>00967     <span class="comment">/* initialise the Vector */</span>
-<a name="l00968"></a>00968     <span class="keywordflow">for</span> ( i = 0 ; i < line -> n_elements ; i++) 
-<a name="l00969"></a>00969     {
-<a name="l00970"></a>00970         line->data[i] = 0;
-<a name="l00971"></a>00971     }
-<a name="l00972"></a>00972     
-<a name="l00973"></a>00973     par -> column = column  ;
-<a name="l00974"></a>00974     par -> line   = lineInd ;
-<a name="l00975"></a>00975 
-<a name="l00976"></a>00976     <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span>
-<a name="l00977"></a>00977     <span class="comment">/* go through the chosen column */</span>
-<a name="l00978"></a>00978 
-<a name="l00979"></a>00979     j = 0 ;
-<a name="l00980"></a>00980     <span class="keywordflow">for</span> ( i = lineRow-halfWidth ; i <= lineRow+halfWidth ; i++ ) 
-<a name="l00981"></a>00981     {
-<a name="l00982"></a>00982         <span class="keywordflow">if</span> ( i < 0 || i >= ly )
-<a name="l00983"></a>00983         {
-<a name="l00984"></a>00984             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong line position or width given\n"</span>) ;
-<a name="l00985"></a>00985             <span class="keywordflow">return</span> -15 ;
-<a name="l00986"></a>00986         }
-<a name="l00987"></a>00987         <span class="keywordflow">else</span>
-<a name="l00988"></a>00988         {
-<a name="l00989"></a>00989             line -> data[j] = pdata[column + i*lx] ;
-<a name="l00990"></a>00990             j ++ ;
-<a name="l00991"></a>00991         }
-<a name="l00992"></a>00992     } 
-<a name="l00993"></a>00993 
-<a name="l00994"></a>00994     <span class="comment">/*-------------------------------------------------------------------- </span>
-<a name="l00995"></a>00995 <span class="comment">     * go through the spectral sinfo_vector </span>
-<a name="l00996"></a>00996 <span class="comment">     * determine the maximum pixel value in the spectral sinfo_vector </span>
-<a name="l00997"></a>00997 <span class="comment">     */</span>
-<a name="l00998"></a>00998     maxval = -FLT_MAX ;
-<a name="l00999"></a>00999     position = -INT32_MAX ;
-<a name="l01000"></a>01000     <span class="keywordflow">for</span> ( i = 0 ; i < line -> n_elements ; i++ )
-<a name="l01001"></a>01001     {
-<a name="l01002"></a>01002         xdat[i] = i ;
-<a name="l01003"></a>01003         wdat[i] = 1.0 ;
-<a name="l01004"></a>01004         <span class="keywordflow">if</span> ( line -> data[i] >= maxval )
-<a name="l01005"></a>01005         {
-<a name="l01006"></a>01006             maxval = line -> data[i] ;
-<a name="l01007"></a>01007             position = i ;
-<a name="l01008"></a>01008         }
-<a name="l01009"></a>01009     }
-<a name="l01010"></a>01010 
-<a name="l01011"></a>01011     <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01012"></a>01012     xdim     = XDIM ;
-<a name="l01013"></a>01013     ndat     = line -> n_elements ;
-<a name="l01014"></a>01014     numpar   = MAXPAR ;
-<a name="l01015"></a>01015     tol      = TOL ;
-<a name="l01016"></a>01016     lab      = LAB ;
-<a name="l01017"></a>01017     its      = ITS ;
-<a name="l01018"></a>01018     par -> fit_par[1] = fwhm ;
-<a name="l01019"></a>01019     par -> fit_par[2] = (float) position ;
-<a name="l01020"></a>01020     par -> fit_par[3] = (float) (line -> data[0] + 
-<a name="l01021"></a>01021                                  line -> data[line->n_elements - 1]) / 2.0 ;
-<a name="l01022"></a>01022     par -> fit_par[0]  = maxval - (par -> fit_par[3]) ;
-<a name="l01023"></a>01023 
-<a name="l01024"></a>01024     <span class="comment">/* exclude low signal cases */</span>
-<a name="l01025"></a>01025     <span class="keywordflow">if</span> ( par->fit_par[0] < min_amplitude )
-<a name="l01026"></a>01026     {
-<a name="l01027"></a>01027         cpl_msg_debug (<span class="stringliteral">"sinfo_linefit:"</span>,
-<a name="l01028"></a>01028                        <span class="stringliteral">" sorry, amplitude of line too low to fit: %f"</span>,
-<a name="l01029"></a>01029                        par->fit_par[0] ) ;
-<a name="l01030"></a>01030         <span class="keywordflow">return</span> -16 ;
-<a name="l01031"></a>01031     }
-<a name="l01032"></a>01032 
-<a name="l01033"></a>01033     <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )
-<a name="l01034"></a>01034     {
-<a name="l01035"></a>01035         par -> derv_par[i] = 0.0 ;
-<a name="l01036"></a>01036         mpar[i] = 1 ;
-<a name="l01037"></a>01037     }
-<a name="l01038"></a>01038 
-<a name="l01039"></a>01039     <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l01040"></a>01040     <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l01041"></a>01041                                            line -> data, wdat, 
-<a name="l01042"></a>01042                                            &ndat, par -> fit_par,  
-<a name="l01043"></a>01043                                            par -> derv_par, mpar, 
-<a name="l01044"></a>01044                                            &numpar, &tol, &its, &lab )) )  
-<a name="l01045"></a>01045     {
-<a name="l01046"></a>01046         cpl_msg_debug (<span class="stringliteral">"sinfo_linefit:"</span>,
-<a name="l01047"></a>01047                        <span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit failed,"</span>
-<a name="l01048"></a>01048                        <span class="stringliteral">" error no.: %d\n"</span>, iters) ; 
-<a name="l01049"></a>01049         <span class="keywordflow">return</span> -17 ;
-<a name="l01050"></a>01050     }
-<a name="l01051"></a>01051 
-<a name="l01052"></a>01052     <span class="comment">/* correct the fitted position for the given row of the </span>
-<a name="l01053"></a>01053 <span class="comment">       line in image coordinates */</span>
-<a name="l01054"></a>01054     par -> fit_par[2] =  (float) (lineRow - halfWidth) + par -> fit_par[2] ;
-<a name="l01055"></a>01055 
-<a name="l01056"></a>01056     <span class="comment">/* all was o.k. */</span>
-<a name="l01057"></a>01057     <span class="keywordflow">return</span> iters ;
-<a name="l01058"></a>01058 }
-<a name="l01059"></a>01059 
-<a name="l01084"></a>01084 <span class="keywordtype">int</span> sinfo_new_fit_lines ( cpl_image  *  line_image, 
-<a name="l01085"></a>01085                FitParams ** allParams,
-<a name="l01086"></a>01086                <span class="keywordtype">float</span>        fwhm,
-<a name="l01087"></a>01087                <span class="keywordtype">int</span>       *  n_lines, 
-<a name="l01088"></a>01088                <span class="keywordtype">int</span>       ** row,
-<a name="l01089"></a>01089                <span class="keywordtype">float</span>     ** wavelength, 
-<a name="l01090"></a>01090                <span class="keywordtype">int</span>          width,
-<a name="l01091"></a>01091                <span class="keywordtype">float</span>        min_amplitude ) 
-<a name="l01092"></a>01092 {
-<a name="l01093"></a>01093     <span class="keywordtype">int</span> i, k, l ;
-<a name="l01094"></a>01094     <span class="keywordtype">int</span> result ;
-<a name="l01095"></a>01095     Vector * line;
-<a name="l01096"></a>01096     <span class="keywordtype">int</span>    * mpar;
-<a name="l01097"></a>01097     <span class="keywordtype">float</span>  * xdat, * wdat;
-<a name="l01098"></a>01098     <span class="keywordtype">int</span> lx=0;
-<a name="l01099"></a>01099     <span class="keywordtype">int</span> ly=0;
-<a name="l01100"></a>01100     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l01101"></a>01101 
-<a name="l01102"></a>01102     <span class="keywordflow">if</span> ( line_image == NULL )
-<a name="l01103"></a>01103     {
-<a name="l01104"></a>01104         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given\n"</span>) ;
-<a name="l01105"></a>01105         <span class="keywordflow">return</span> -18 ;
-<a name="l01106"></a>01106     }
-<a name="l01107"></a>01107     lx=cpl_image_get_size_x(line_image);
-<a name="l01108"></a>01108     ly=cpl_image_get_size_y(line_image);
-<a name="l01109"></a>01109     pdata=cpl_image_get_data_float(line_image);
-<a name="l01110"></a>01110 
-<a name="l01111"></a>01111     <span class="keywordflow">if</span> ( n_lines == NULL )
-<a name="l01112"></a>01112     {
-<a name="l01113"></a>01113         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no counter of emission lines\n"</span>) ;
-<a name="l01114"></a>01114         <span class="keywordflow">return</span> -19 ;
-<a name="l01115"></a>01115     } 
-<a name="l01116"></a>01116     <span class="keywordflow">if</span> ( row == NULL || width <= 0 )
-<a name="l01117"></a>01117     {
-<a name="l01118"></a>01118         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" row or width vectors are empty\n"</span>) ;
-<a name="l01119"></a>01119         <span class="keywordflow">return</span> -20 ;
-<a name="l01120"></a>01120     }
-<a name="l01121"></a>01121     <span class="keywordflow">if</span> ( wavelength == NULL )
-<a name="l01122"></a>01122     {
-<a name="l01123"></a>01123         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no wavelength array given\n"</span>) ;
-<a name="l01124"></a>01124         <span class="keywordflow">return</span> -21 ;
-<a name="l01125"></a>01125     }
-<a name="l01126"></a>01126 
-<a name="l01127"></a>01127     k = 0 ;
-<a name="l01128"></a>01128 
-<a name="l01129"></a>01129     <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l01130"></a>01130     line = sinfo_new_vector (2*width + 1) ;
-<a name="l01131"></a>01131     <span class="comment">/* allocate memory */</span>
-<a name="l01132"></a>01132     xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01133"></a>01133     wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01134"></a>01134     mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01135"></a>01135     
-<a name="l01136"></a>01136     <span class="comment">/* go through the columns */</span>
-<a name="l01137"></a>01137     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i++ )
-<a name="l01138"></a>01138     {
-<a name="l01139"></a>01139         <span class="keywordflow">if</span> ( n_lines[i] == 0 )
-<a name="l01140"></a>01140         {
-<a name="l01141"></a>01141             continue ;
-<a name="l01142"></a>01142         }
-<a name="l01143"></a>01143         <span class="comment">/* go through the emission lines in a column */</span>
-<a name="l01144"></a>01144         <span class="keywordflow">for</span> ( l = 0 ; l < n_lines[i] ; l++ )
-<a name="l01145"></a>01145         {
-<a name="l01146"></a>01146             <span class="keywordflow">if</span> ( row[i][l] <= 0 )
-<a name="l01147"></a>01147             {
-<a name="l01148"></a>01148                 continue ;
-<a name="l01149"></a>01149             }
-<a name="l01150"></a>01150 
-<a name="l01151"></a>01151             <span class="comment">/* --------------------------------------------------------------</span>
-<a name="l01152"></a>01152 <span class="comment">             * fit the single lines using sinfo_linefit and store the </span>
-<a name="l01153"></a>01153 <span class="comment">               parameters in</span>
-<a name="l01154"></a>01154 <span class="comment">             * an array of the FitParams data structure allParams[].</span>
-<a name="l01155"></a>01155 <span class="comment">             */</span> 
-<a name="l01156"></a>01156             <span class="keywordflow">if</span> ( (result = sinfo_new_line_fit ( line_image, 
-<a name="l01157"></a>01157                                                 allParams[k], fwhm, l, i, 
-<a name="l01158"></a>01158                                                 width, row[i][l], 
-<a name="l01159"></a>01159                                                 min_amplitude,line,mpar,
-<a name="l01160"></a>01160                                                 xdat,wdat ) ) < 0 )
-<a name="l01161"></a>01161             {
-<a name="l01162"></a>01162                 cpl_msg_debug (<span class="stringliteral">"sinfo_fitLines:"</span>,
-<a name="l01163"></a>01163                                <span class="stringliteral">" sinfo_linefit failed, error no.: %d,"</span>
-<a name="l01164"></a>01164                                <span class="stringliteral">" column: %d, row: %d, line: %d\n"</span>, 
-<a name="l01165"></a>01165                                result, i, row[i][l], l) ;
-<a name="l01166"></a>01166                 continue ;
-<a name="l01167"></a>01167             }
-<a name="l01168"></a>01168             <span class="keywordflow">if</span> ( (allParams[k] -> fit_par[0] <= 0.) || 
-<a name="l01169"></a>01169                  (allParams[k] -> fit_par[1] <= 0.)
-<a name="l01170"></a>01170                   || (allParams[k] -> fit_par[2] <= 0.) )
-<a name="l01171"></a>01171             {
-<a name="l01172"></a>01172                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" negative fit parameters in column: %d,"</span>
-<a name="l01173"></a>01173                                    <span class="stringliteral">" line: %d\n"</span>, i, l) ;
-<a name="l01174"></a>01174                 continue ;
-<a name="l01175"></a>01175             }
-<a name="l01176"></a>01176             allParams[k] -> wavelength = wavelength[i][l] ;
-<a name="l01177"></a>01177             k++ ;
-<a name="l01178"></a>01178         }
-<a name="l01179"></a>01179     }
-<a name="l01180"></a>01180 
-<a name="l01181"></a>01181     <span class="comment">/* free memory */</span>
-<a name="l01182"></a>01182     sinfo_new_destroy_vector(line);
-<a name="l01183"></a>01183     cpl_free(xdat);
-<a name="l01184"></a>01184     cpl_free(wdat);
-<a name="l01185"></a>01185     cpl_free(mpar);
-<a name="l01186"></a>01186     
-<a name="l01187"></a>01187     <span class="comment">/* all is o.k. */</span>
-<a name="l01188"></a>01188     <span class="keywordflow">return</span> k ;
-<a name="l01189"></a>01189 }    
-<a name="l01190"></a>01190 
-<a name="l01218"></a>01218 <span class="keywordtype">float</span> sinfo_new_polyfit( FitParams ** par,
-<a name="l01219"></a>01219                <span class="keywordtype">int</span>          column,
-<a name="l01220"></a>01220                <span class="keywordtype">int</span>          n_lines,
-<a name="l01221"></a>01221                <span class="keywordtype">int</span>          n_rows,
-<a name="l01222"></a>01222                <span class="keywordtype">float</span>        dispersion,
-<a name="l01223"></a>01223                <span class="keywordtype">float</span>        max_residual,
-<a name="l01224"></a>01224                <span class="keywordtype">float</span> *      acoefs,
-<a name="l01225"></a>01225                <span class="keywordtype">float</span> *      dacoefs,
-<a name="l01226"></a>01226                <span class="keywordtype">int</span>   *      n_reject,
-<a name="l01227"></a>01227                <span class="keywordtype">int</span>          n_fitcoefs )
-<a name="l01228"></a>01228 {
-<a name="l01229"></a>01229     <span class="keywordtype">float</span> ** ucoefs, ** vcoefs, ** covar ;
-<a name="l01230"></a>01230     <span class="keywordtype">float</span> *mem;
-<a name="l01231"></a>01231     <span class="keywordtype">float</span> * lambda, * posit ;
-<a name="l01232"></a>01232     <span class="keywordtype">float</span> * weight, * resid ;
-<a name="l01233"></a>01233     <span class="keywordtype">float</span> * newlam, * newpos, * newwet ;
-<a name="l01234"></a>01234     <span class="keywordtype">float</span> * wcoefs=NULL ;
-<a name="l01235"></a>01235     <span class="keywordtype">float</span> chisq, result ;
-<a name="l01236"></a>01236     <span class="keywordtype">float</span> offset ;
-<a name="l01237"></a>01237     <span class="keywordtype">int</span> num, found ;
-<a name="l01238"></a>01238     <span class="keywordtype">int</span> i, j, k, n ;
-<a name="l01239"></a>01239 
-<a name="l01240"></a>01240     <span class="comment">/* reset the fit coefficients and their errors */</span>
-<a name="l01241"></a>01241     <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )
-<a name="l01242"></a>01242     {
-<a name="l01243"></a>01243         acoefs[i]  = 0. ;
-<a name="l01244"></a>01244         dacoefs[i] = 0. ;
-<a name="l01245"></a>01245     }
-<a name="l01246"></a>01246     <span class="keywordflow">if</span> ( NULL == par )
-<a name="l01247"></a>01247     {
-<a name="l01248"></a>01248         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no fit params given\n"</span>);
-<a name="l01249"></a>01249         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01250"></a>01250     }
-<a name="l01251"></a>01251 
-<a name="l01252"></a>01252     <span class="keywordflow">if</span> ( 0 >= n_lines )
-<a name="l01253"></a>01253     {
-<a name="l01254"></a>01254       <span class="comment">/*</span>
-<a name="l01255"></a>01255 <span class="comment">        sinfo_msg_warning (" sorry, number of lines is wrong") ;</span>
-<a name="l01256"></a>01256 <span class="comment">      */</span>
-<a name="l01257"></a>01257         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01258"></a>01258     }
-<a name="l01259"></a>01259     <span class="keywordflow">if</span> ( 0 >= n_rows )
-<a name="l01260"></a>01260     {
-<a name="l01261"></a>01261         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" sorry, number of rows is wrong"</span>) ;
-<a name="l01262"></a>01262         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01263"></a>01263     }
-<a name="l01264"></a>01264     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l01265"></a>01265     {
-<a name="l01266"></a>01266         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" sorry, wrong dispersion given"</span>) ;
-<a name="l01267"></a>01267         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01268"></a>01268     }
-<a name="l01269"></a>01269 
-<a name="l01270"></a>01270     offset = (float)(n_rows - 1)/2. ;
-<a name="l01271"></a>01271 
-<a name="l01272"></a>01272     <span class="comment">/* allocate memory */</span>
-<a name="l01273"></a>01273     
-<a name="l01274"></a>01274     mem = (<span class="keywordtype">float</span>*) cpl_calloc( n_lines*7, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01275"></a>01275     lambda = mem;
-<a name="l01276"></a>01276     posit  = mem + n_lines;
-<a name="l01277"></a>01277     weight = mem + n_lines*2;
-<a name="l01278"></a>01278     resid  = mem + n_lines*3;
-<a name="l01279"></a>01279     newlam = mem + n_lines*4;
-<a name="l01280"></a>01280     newpos = mem + n_lines*5;
-<a name="l01281"></a>01281     newwet = mem + n_lines*6;
-<a name="l01282"></a>01282     
-<a name="l01283"></a>01283     <span class="comment">/*lambda = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01284"></a>01284 <span class="comment">    posit  = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01285"></a>01285 <span class="comment">    weight = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01286"></a>01286 <span class="comment">    resid  = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01287"></a>01287 <span class="comment">    newlam = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01288"></a>01288 <span class="comment">    newpos = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span>
-<a name="l01289"></a>01289 <span class="comment">    newwet = (float*) cpl_calloc( n_lines, sizeof (float) ) ;*/</span>
-<a name="l01290"></a>01290 
-<a name="l01291"></a>01291     <span class="comment">/* allocate coefficient matrices*/</span>
-<a name="l01292"></a>01292     ucoefs = sinfo_matrix ( 1, n_lines, 1, n_fitcoefs ) ;
-<a name="l01293"></a>01293     vcoefs = sinfo_matrix ( 1, n_lines, 1, n_fitcoefs ) ;
-<a name="l01294"></a>01294     covar  = sinfo_matrix ( 1, n_fitcoefs, 1, n_fitcoefs ) ;
-<a name="l01295"></a>01295     wcoefs=cpl_calloc(n_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01296"></a>01296 
-<a name="l01297"></a>01297     <span class="comment">/* go through all fit parameters */</span>
-<a name="l01298"></a>01298     n = 0 ;
-<a name="l01299"></a>01299     <span class="keywordflow">for</span> ( i = 0 ; i < (par[0] -> n_params) ; i ++ )
-<a name="l01300"></a>01300     {
-<a name="l01301"></a>01301         found = -1 ;
-<a name="l01302"></a>01302         <span class="comment">/* find the given column and go through the lines in that column */</span>
-<a name="l01303"></a>01303         <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ )
-<a name="l01304"></a>01304         {
-<a name="l01305"></a>01305             <span class="keywordflow">if</span> ( (par[i] -> column == column) && (par[i] -> line == j) )
-<a name="l01306"></a>01306             {
-<a name="l01307"></a>01307                 found = i ;
-<a name="l01308"></a>01308             }
-<a name="l01309"></a>01309             <span class="keywordflow">else</span>
-<a name="l01310"></a>01310             {
-<a name="l01311"></a>01311                 continue ;
-<a name="l01312"></a>01312             }
-<a name="l01313"></a>01313 
-<a name="l01314"></a>01314             <span class="comment">/* store only fit params with reasonable values */</span>
-<a name="l01315"></a>01315             <span class="keywordflow">if</span> ( par[found] -> derv_par[2] != 0. && 
-<a name="l01316"></a>01316                  par[found] -> fit_par[2] > 0. &&
-<a name="l01317"></a>01317                  par[found] -> wavelength > 0. && 
-<a name="l01318"></a>01318                  par[found] -> fit_par[1] > 0. &&
-<a name="l01319"></a>01319                  par[found] -> fit_par[0] > 0. )
-<a name="l01320"></a>01320             {
-<a name="l01321"></a>01321                 <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l01322"></a>01322 <span class="comment">                 * store the found position, error of the position as </span>
-<a name="l01323"></a>01323 <span class="comment">                   weight and the associated</span>
-<a name="l01324"></a>01324 <span class="comment">                 * wavelength values of the fitted lines</span>
-<a name="l01325"></a>01325 <span class="comment">                 */</span>
-<a name="l01326"></a>01326                 posit[n]  = par[found] -> fit_par[2] ;
-<a name="l01327"></a>01327                 weight[n] = par[found] -> derv_par[2] ;
-<a name="l01328"></a>01328                 lambda[n] = par[found] -> wavelength ;
-<a name="l01329"></a>01329                 n ++ ;
-<a name="l01330"></a>01330             }
-<a name="l01331"></a>01331             <span class="keywordflow">else</span>
-<a name="l01332"></a>01332             {
-<a name="l01333"></a>01333                 continue ;
-<a name="l01334"></a>01334             }
-<a name="l01335"></a>01335         }
-<a name="l01336"></a>01336 
-<a name="l01337"></a>01337     }
-<a name="l01338"></a>01338 
-<a name="l01339"></a>01339     num = n ;
-<a name="l01340"></a>01340     <span class="keywordflow">if</span> ( num < n_fitcoefs )
-<a name="l01341"></a>01341     {
-<a name="l01342"></a>01342         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"not enough lines found in column %d to "</span>
-<a name="l01343"></a>01343                           <span class="stringliteral">"determine the three coefficients.\n"</span>, column) ;
-<a name="l01344"></a>01344         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )
-<a name="l01345"></a>01345         {
-<a name="l01346"></a>01346             acoefs[i]  = ZERO ;
-<a name="l01347"></a>01347             dacoefs[i] = ZERO ;
-<a name="l01348"></a>01348         }
-<a name="l01349"></a>01349         sinfo_free_matrix ( ucoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01350"></a>01350         sinfo_free_matrix ( vcoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01351"></a>01351         sinfo_free_matrix ( covar,  1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01352"></a>01352         <span class="comment">/*cpl_free (lambda) ;</span>
-<a name="l01353"></a>01353 <span class="comment">        cpl_free (posit) ;</span>
-<a name="l01354"></a>01354 <span class="comment">        cpl_free (weight) ;</span>
-<a name="l01355"></a>01355 <span class="comment">        cpl_free (resid) ;</span>
-<a name="l01356"></a>01356 <span class="comment">        cpl_free (newlam) ;</span>
-<a name="l01357"></a>01357 <span class="comment">        cpl_free (newpos) ;</span>
-<a name="l01358"></a>01358 <span class="comment">        cpl_free (newwet) ;*/</span>
-<a name="l01359"></a>01359     cpl_free (mem);
-<a name="l01360"></a>01360         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01361"></a>01361     }
-<a name="l01362"></a>01362 
-<a name="l01363"></a>01363     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l01364"></a>01364 <span class="comment">     * scale the pixel position values to smaller than 1 and transform </span>
-<a name="l01365"></a>01365 <span class="comment">       the weights to wavelength units </span>
-<a name="l01366"></a>01366 <span class="comment">     */</span>
-<a name="l01367"></a>01367 
-<a name="l01368"></a>01368     <span class="keywordflow">for</span> ( i = 0 ; i < num ; i ++ )
-<a name="l01369"></a>01369     {
-<a name="l01370"></a>01370         posit[i] = (posit[i] - offset)/offset ;
-<a name="l01371"></a>01371         weight[i] *= fabs(dispersion) ;
-<a name="l01372"></a>01372     }
-<a name="l01373"></a>01373 
-<a name="l01374"></a>01374     <span class="comment">/* do the fit using the singular value decomposition method */</span>
-<a name="l01375"></a>01375     sinfo_svd_fitting( posit - 1, lambda - 1, 
-<a name="l01376"></a>01376                       weight - 1, num, acoefs-1, n_fitcoefs,
-<a name="l01377"></a>01377             ucoefs, vcoefs, wcoefs-1, covar, &chisq, sinfo_fpol ) ;
-<a name="l01378"></a>01378 
-<a name="l01379"></a>01379     <span class="comment">/* scale the linear and the quadratic coefficient */</span>
-<a name="l01380"></a>01380     <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoefs ; i++ )
-<a name="l01381"></a>01381     {
-<a name="l01382"></a>01382         acoefs[i] /= pow(offset, i) ;
-<a name="l01383"></a>01383     }
-<a name="l01384"></a>01384 
-<a name="l01385"></a>01385     <span class="comment">/* now that we have determined the fit coefficients, find the residuals */</span>
-<a name="l01386"></a>01386     *n_reject = 0 ;
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388     j = 0 ;
-<a name="l01389"></a>01389     <span class="keywordflow">for</span> ( i = 0 ; i < num ; i++ )
-<a name="l01390"></a>01390     {
-<a name="l01391"></a>01391         result = 0. ;
-<a name="l01392"></a>01392         <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoefs ; k++ )
-<a name="l01393"></a>01393         {
-<a name="l01394"></a>01394             result += acoefs[k] * pow(posit[i], k) ;
-<a name="l01395"></a>01395         }
-<a name="l01396"></a>01396 
-<a name="l01397"></a>01397         resid[i] = lambda[i] - result ;
-<a name="l01398"></a>01398 
-<a name="l01399"></a>01399         <span class="keywordflow">if</span> ( fabs( resid[i] ) > max_residual)
-<a name="l01400"></a>01400         {
-<a name="l01401"></a>01401             (*n_reject) ++ ;
-<a name="l01402"></a>01402         }
-<a name="l01403"></a>01403         <span class="keywordflow">else</span>
-<a name="l01404"></a>01404         {
-<a name="l01405"></a>01405             newlam[j] = lambda[i] ;
-<a name="l01406"></a>01406             newpos[j] = posit[i] ;
-<a name="l01407"></a>01407             newwet[j] = weight[i] ;
-<a name="l01408"></a>01408             j++ ;
-<a name="l01409"></a>01409         }
-<a name="l01410"></a>01410     }
-<a name="l01411"></a>01411 
-<a name="l01412"></a>01412     num = j ;
-<a name="l01413"></a>01413     <span class="keywordflow">if</span> ( num >= n_fitcoefs )
-<a name="l01414"></a>01414     {
-<a name="l01415"></a>01415         sinfo_svd_fitting( newpos - 1, newlam - 1, 
-<a name="l01416"></a>01416                            newwet - 1, num, acoefs-1, n_fitcoefs, ucoefs,
-<a name="l01417"></a>01417                 vcoefs, wcoefs-1, covar, &chisq, sinfo_fpol ) ;
-<a name="l01418"></a>01418 
-<a name="l01419"></a>01419         <span class="comment">/* scale the resulting coefficients */</span>
-<a name="l01420"></a>01420         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )
-<a name="l01421"></a>01421         {
-<a name="l01422"></a>01422             acoefs[i] /= pow(offset, i) ;
-<a name="l01423"></a>01423             dacoefs[i] = sqrt( (<span class="keywordtype">double</span>) covar[i+1][i+1] ) / pow(offset, i) ;
-<a name="l01424"></a>01424         }
-<a name="l01425"></a>01425     }
-<a name="l01426"></a>01426     <span class="keywordflow">else</span>
-<a name="l01427"></a>01427     {
-<a name="l01428"></a>01428         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" too many lines rejected (number: %d) "</span>
-<a name="l01429"></a>01429                            <span class="stringliteral">"due to high residuals, fit coefficients are set "</span>
-<a name="l01430"></a>01430                            <span class="stringliteral">"zero, in column: %d\n"</span>, *n_reject, column) ;
-<a name="l01431"></a>01431         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )
-<a name="l01432"></a>01432         {
-<a name="l01433"></a>01433             acoefs[i]  = ZERO ;
-<a name="l01434"></a>01434             dacoefs[i] = ZERO ;
-<a name="l01435"></a>01435         }
-<a name="l01436"></a>01436     }
-<a name="l01437"></a>01437 
-<a name="l01438"></a>01438     sinfo_free_matrix ( ucoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01439"></a>01439     sinfo_free_matrix ( vcoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01440"></a>01440     sinfo_free_matrix ( covar,  1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01441"></a>01441     <span class="comment">/*cpl_free (lambda) ;</span>
-<a name="l01442"></a>01442 <span class="comment">    cpl_free (posit) ;</span>
-<a name="l01443"></a>01443 <span class="comment">    cpl_free (weight) ;</span>
-<a name="l01444"></a>01444 <span class="comment">    cpl_free (resid) ;</span>
-<a name="l01445"></a>01445 <span class="comment">    cpl_free (newlam) ;</span>
-<a name="l01446"></a>01446 <span class="comment">    cpl_free (newpos) ;</span>
-<a name="l01447"></a>01447 <span class="comment">    cpl_free (newwet) ;*/</span>
-<a name="l01448"></a>01448     cpl_free (mem);
-<a name="l01449"></a>01449     cpl_free(wcoefs) ;
-<a name="l01450"></a>01450 
-<a name="l01451"></a>01451     <span class="keywordflow">return</span> chisq ;
-<a name="l01452"></a>01452 }
-<a name="l01453"></a>01453 
-<a name="l01470"></a>01470 <span class="keywordtype">float</span> sinfo_new_coefs_cross_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l01471"></a>01471                       <span class="keywordtype">float</span> *  acoefs,
-<a name="l01472"></a>01472                       <span class="keywordtype">float</span> *  dacoefs,
-<a name="l01473"></a>01473                       <span class="keywordtype">float</span> *  bcoefs,
-<a name="l01474"></a>01474                       <span class="keywordtype">int</span>      n_fitcoefs,
-<a name="l01475"></a>01475                       <span class="keywordtype">float</span>    sigma_factor )
-<a name="l01476"></a>01476 {
-<a name="l01477"></a>01477     <span class="keywordtype">float</span> col_index;
-<a name="l01478"></a>01478     <span class="keywordtype">float</span>* sub_col_index=NULL ;
-<a name="l01479"></a>01479     <span class="keywordtype">float</span>* sub_acoefs=NULL ;
-<a name="l01480"></a>01480     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;
-<a name="l01481"></a>01481     <span class="keywordtype">float</span>* wcoefs=NULL ;
-<a name="l01482"></a>01482     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;
-<a name="l01483"></a>01483     <span class="keywordtype">float</span> chisq ;
-<a name="l01484"></a>01484     <span class="keywordtype">float</span> * acoefsclean ;
-<a name="l01485"></a>01485     <span class="keywordtype">double</span> sum, sumq, mean ;
-<a name="l01486"></a>01486     <span class="keywordtype">double</span> sigma ;
-<a name="l01487"></a>01487     <span class="keywordtype">double</span> cliphi, cliplo ;
-<a name="l01488"></a>01488     <span class="keywordtype">float</span> offset ;
-<a name="l01489"></a>01489     <span class="keywordtype">int</span> i, n, num, ndata ;
-<a name="l01490"></a>01490     <span class="keywordtype">int</span> nc ;
-<a name="l01491"></a>01491 
-<a name="l01492"></a>01492 
-<a name="l01493"></a>01493     <span class="keywordflow">if</span> ( n_columns < 1 )
-<a name="l01494"></a>01494     {
-<a name="l01495"></a>01495         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of image columns given\n"</span>) ;
-<a name="l01496"></a>01496         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01497"></a>01497     }
-<a name="l01498"></a>01498     <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )
-<a name="l01499"></a>01499     {
-<a name="l01500"></a>01500         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" coeffs or errors of coefficients are not given\n"</span>) ;
-<a name="l01501"></a>01501         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01502"></a>01502     }
-<a name="l01503"></a>01503     <span class="keywordflow">if</span> ( bcoefs == NULL )
-<a name="l01504"></a>01504     {
-<a name="l01505"></a>01505         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" coeffs are not allocated\n"</span>) ;
-<a name="l01506"></a>01506         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01507"></a>01507     }
-<a name="l01508"></a>01508 
-<a name="l01509"></a>01509     <span class="keywordflow">if</span> ( n_fitcoefs < 1 )
-<a name="l01510"></a>01510     {
-<a name="l01511"></a>01511         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of fit coefficients\n"</span>) ;
-<a name="l01512"></a>01512         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01513"></a>01513     }
-<a name="l01514"></a>01514     <span class="keywordflow">if</span> ( sigma_factor <= 0. )
-<a name="l01515"></a>01515     {
-<a name="l01516"></a>01516         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigma_factor given!\n"</span>) ;
-<a name="l01517"></a>01517         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01518"></a>01518     }
-<a name="l01519"></a>01519 
-<a name="l01520"></a>01520     offset = (float)(n_columns - 1) / 2. ;
-<a name="l01521"></a>01521 
-<a name="l01522"></a>01522     <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l01523"></a>01523 <span class="comment">     * determine the clean mean and sigma value of the coefficients,</span>
-<a name="l01524"></a>01524 <span class="comment">     * that means reject 10 % of the extreme low and high values</span>
-<a name="l01525"></a>01525 <span class="comment">     */</span>
-<a name="l01526"></a>01526 
-<a name="l01527"></a>01527     wcoefs=cpl_calloc(n_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01528"></a>01528 
-<a name="l01529"></a>01529     nc = 0 ;
-<a name="l01530"></a>01530     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )
-<a name="l01531"></a>01531     {
-<a name="l01532"></a>01532         <span class="keywordflow">if</span> ( isnan(acoefs[i]) || acoefs[i] == 0. || dacoefs[i] == 0. )
-<a name="l01533"></a>01533         {
-<a name="l01534"></a>01534             continue ;
-<a name="l01535"></a>01535         }
-<a name="l01536"></a>01536         <span class="keywordflow">else</span>
-<a name="l01537"></a>01537         {
-<a name="l01538"></a>01538             nc++ ;
-<a name="l01539"></a>01539         }
-<a name="l01540"></a>01540     }
-<a name="l01541"></a>01541     acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01542"></a>01542     nc = 0 ;
-<a name="l01543"></a>01543     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )
-<a name="l01544"></a>01544     {
-<a name="l01545"></a>01545         <span class="keywordflow">if</span> ( isnan(acoefs[i]) || acoefs[i] == 0. || dacoefs[i] == 0. )
-<a name="l01546"></a>01546         {
-<a name="l01547"></a>01547             continue ;
-<a name="l01548"></a>01548         }
-<a name="l01549"></a>01549         <span class="keywordflow">else</span>
-<a name="l01550"></a>01550         {
-<a name="l01551"></a>01551             acoefsclean[nc] = acoefs[i] ;
-<a name="l01552"></a>01552             nc++ ;
-<a name="l01553"></a>01553         }
-<a name="l01554"></a>01554     }
-<a name="l01555"></a>01555     sinfo_pixel_qsort(acoefsclean, nc) ;
-<a name="l01556"></a>01556     sum   = 0. ;
-<a name="l01557"></a>01557     sumq  = 0. ;
-<a name="l01558"></a>01558     mean  = 0. ;
-<a name="l01559"></a>01559     sigma = 0. ;
-<a name="l01560"></a>01560     n     = 0 ;
-<a name="l01561"></a>01561     <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; 
-<a name="l01562"></a>01562           i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )
-<a name="l01563"></a>01563     {
-<a name="l01564"></a>01564         sum  += (double)acoefsclean[i] ;
-<a name="l01565"></a>01565         sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;
-<a name="l01566"></a>01566         n ++ ;
-<a name="l01567"></a>01567     }
-<a name="l01568"></a>01568     mean          = sum/(double)n ;
-<a name="l01569"></a>01569     sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;
-<a name="l01570"></a>01570     cliphi        = mean + sigma * (double)sigma_factor ;
-<a name="l01571"></a>01571     cliplo        = mean - sigma * (double)sigma_factor ;
-<a name="l01572"></a>01572 
-<a name="l01573"></a>01573     sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01574"></a>01574     sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01575"></a>01575     sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01576"></a>01576 
-<a name="l01577"></a>01577     <span class="comment">/* fit only the reasonnable values */</span>
-<a name="l01578"></a>01578     num = 0 ;
-<a name="l01579"></a>01579     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )
-<a name="l01580"></a>01580     {
-<a name="l01581"></a>01581         <span class="comment">/* associate the column indices to the corresponding array */</span>
-<a name="l01582"></a>01582         col_index = (float) i ;
-<a name="l01583"></a>01583 
-<a name="l01584"></a>01584         <span class="comment">/* take only the reasonnable coefficients */</span>
-<a name="l01585"></a>01585         <span class="keywordflow">if</span> ( !isnan(acoefs[i]) && 
-<a name="l01586"></a>01586              (acoefs[i] <= cliphi) && (acoefs[i] >= cliplo) &&
-<a name="l01587"></a>01587              (dacoefs[i] != 0. ) && (acoefs[i] != 0.) )
-<a name="l01588"></a>01588         {
-<a name="l01589"></a>01589             sub_acoefs[num]    = acoefs[i] ;
-<a name="l01590"></a>01590             sub_dacoefs[num]   = dacoefs[i] ;
-<a name="l01591"></a>01591             sub_col_index[num] = col_index ;
-<a name="l01592"></a>01592             num ++ ;
-<a name="l01593"></a>01593         }
-<a name="l01594"></a>01594     }
-<a name="l01595"></a>01595     ndata = num ;
-<a name="l01596"></a>01596 
-<a name="l01597"></a>01597     <span class="keywordflow">if</span> ( ndata < n_fitcoefs )
-<a name="l01598"></a>01598     {
-<a name="l01599"></a>01599         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data found to determine "</span>
-<a name="l01600"></a>01600                         <span class="stringliteral">"the fit coefficients.\n"</span>) ;
-<a name="l01601"></a>01601 
-<a name="l01602"></a>01602         <span class="keywordflow">return</span> FLT_MAX ;
-<a name="l01603"></a>01603     }
-<a name="l01604"></a>01604 
-<a name="l01605"></a>01605     <span class="comment">/* allocate coefficient matrices */</span>
-<a name="l01606"></a>01606     ucoefs = sinfo_matrix(1, ndata, 1, n_fitcoefs) ;
-<a name="l01607"></a>01607     vcoefs = sinfo_matrix(1, ndata, 1, n_fitcoefs) ;
-<a name="l01608"></a>01608     covar  = sinfo_matrix ( 1, n_fitcoefs, 1, n_fitcoefs ) ;
-<a name="l01609"></a>01609 
-<a name="l01610"></a>01610     <span class="comment">/* scale the x-values for the fit */</span>
-<a name="l01611"></a>01611     <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l01612"></a>01612     {
-<a name="l01613"></a>01613         sub_col_index[i] = (sub_col_index[i] - offset) / offset ;
-<a name="l01614"></a>01614     }
-<a name="l01615"></a>01615 
-<a name="l01616"></a>01616     <span class="comment">/* finally, do the singular value decomposition fit */</span>
-<a name="l01617"></a>01617     sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, 
-<a name="l01618"></a>01618                         sub_dacoefs-1, ndata, bcoefs-1,
-<a name="l01619"></a>01619                         n_fitcoefs, ucoefs, vcoefs, 
-<a name="l01620"></a>01620                         wcoefs-1, covar, &chisq, sinfo_fpol ) ;
-<a name="l01621"></a>01621 
-<a name="l01622"></a>01622     <span class="comment">/* scale the found coefficients */</span>
-<a name="l01623"></a>01623     <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i ++ )
-<a name="l01624"></a>01624     {
-<a name="l01625"></a>01625         bcoefs[i] /= pow(offset, i) ;
-<a name="l01626"></a>01626     }
-<a name="l01627"></a>01627 
-<a name="l01628"></a>01628     <span class="comment">/* free memory */</span>
-<a name="l01629"></a>01629     cpl_free (acoefsclean) ;
-<a name="l01630"></a>01630     sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoefs */</span>) ;
-<a name="l01631"></a>01631     sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoefs */</span>) ;
-<a name="l01632"></a>01632     sinfo_free_matrix ( covar, 1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;
-<a name="l01633"></a>01633 
-<a name="l01634"></a>01634     cpl_free(sub_col_index) ;
-<a name="l01635"></a>01635     cpl_free(sub_acoefs) ;
-<a name="l01636"></a>01636     cpl_free(sub_dacoefs) ;
-<a name="l01637"></a>01637     cpl_free(wcoefs) ;
-<a name="l01638"></a>01638 
-<a name="l01639"></a>01639     <span class="keywordflow">return</span> chisq ;
-<a name="l01640"></a>01640 }
-<a name="l01641"></a>01641 
-<a name="l01642"></a>01642 
-<a name="l01662"></a>01662 cpl_image * sinfo_new_wave_map( cpl_image * lineImage,
-<a name="l01663"></a>01663                     <span class="keywordtype">float</span>   ** bcoefs,
-<a name="l01664"></a>01664                     <span class="keywordtype">int</span>        n_a_fitcoefs,
-<a name="l01665"></a>01665                     <span class="keywordtype">int</span>        n_b_fitcoefs,
-<a name="l01666"></a>01666                     <span class="keywordtype">float</span>    * wavelength,
-<a name="l01667"></a>01667                     <span class="keywordtype">float</span>    * intensity,
-<a name="l01668"></a>01668                     <span class="keywordtype">int</span>        n_lines,
-<a name="l01669"></a>01669                     <span class="keywordtype">int</span>        magFactor)
-<a name="l01670"></a>01670 {
-<a name="l01671"></a>01671     cpl_image * retImage ;
-<a name="l01672"></a>01672     <span class="keywordtype">float</span> cenpos, cenpix ;
-<a name="l01673"></a>01673     <span class="keywordtype">float</span> centreval, centrepix, wavelag ;
-<a name="l01674"></a>01674     <span class="keywordtype">float</span>  pixvalue ;
-<a name="l01675"></a>01675     <span class="keywordtype">float</span> a_initial ;
-<a name="l01676"></a>01676     <span class="keywordtype">int</span> i, j, k, l<span class="comment">/*, m*/</span>, line, col, row, found, sign ;
-<a name="l01677"></a>01677     <span class="keywordtype">int</span> var, maxlag, cmin, cmax, offset ;
-<a name="l01678"></a>01678     <span class="keywordtype">double</span> * result ;
-<a name="l01679"></a>01679     <span class="keywordtype">float</span> col_off ;
-<a name="l01680"></a>01680     <span class="keywordtype">float</span> angst ;
-<a name="l01681"></a>01681     <span class="keywordtype">double</span> xcorr_max ;
-<a name="l01682"></a>01682     <span class="keywordtype">int</span> delta ;
-<a name="l01683"></a>01683 
-<a name="l01684"></a>01684     <span class="keywordtype">double</span>* z=NULL ;
-<a name="l01685"></a>01685     <span class="keywordtype">double</span>* a=NULL ;
-<a name="l01686"></a>01686     <span class="keywordtype">double</span>*  wave=NULL ;
-<a name="l01687"></a>01687     <span class="keywordtype">float</span>* emline=NULL ;
-<a name="l01688"></a>01688     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l01689"></a>01689     <span class="keywordtype">int</span> ilx=0;
-<a name="l01690"></a>01690     <span class="keywordtype">int</span> ily=0;
-<a name="l01691"></a>01691     <span class="keywordtype">int</span> olx=0;
-<a name="l01692"></a>01692     <span class="keywordtype">int</span> oly=0;
-<a name="l01693"></a>01693     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01694"></a>01694     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01695"></a>01695 
-<a name="l01696"></a>01696 
-<a name="l01697"></a>01697     gsl_poly_complex_workspace * w ;
-<a name="l01698"></a>01698     
-<a name="l01699"></a>01699     <span class="keywordflow">if</span> ( NULL == lineImage )
-<a name="l01700"></a>01700     {
-<a name="l01701"></a>01701         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given\n"</span>) ;
-<a name="l01702"></a>01702         <span class="keywordflow">return</span> NULL ;
-<a name="l01703"></a>01703     }
-<a name="l01704"></a>01704     ilx=cpl_image_get_size_x(lineImage);
-<a name="l01705"></a>01705     ily=cpl_image_get_size_y(lineImage);
-<a name="l01706"></a>01706     pidata=cpl_image_get_data_float(lineImage);
-<a name="l01707"></a>01707 
-<a name="l01708"></a>01708     <span class="keywordflow">if</span> ( NULL == wavelength || n_lines <= 0 )
-<a name="l01709"></a>01709     {
-<a name="l01710"></a>01710         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength list given\n"</span>) ;
-<a name="l01711"></a>01711         <span class="keywordflow">return</span> NULL ;
-<a name="l01712"></a>01712     }
-<a name="l01713"></a>01713 
-<a name="l01714"></a>01714     <span class="keywordflow">if</span> ( NULL == intensity )
-<a name="l01715"></a>01715     {
-<a name="l01716"></a>01716         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no intensity list given\n"</span>) ;
-<a name="l01717"></a>01717         <span class="keywordflow">return</span> NULL ;
-<a name="l01718"></a>01718     }
-<a name="l01719"></a>01719 
-<a name="l01720"></a>01720     <span class="keywordflow">if</span> ( NULL == bcoefs )
-<a name="l01721"></a>01721     {
-<a name="l01722"></a>01722         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no coefficients given\n"</span>) ;
-<a name="l01723"></a>01723         <span class="keywordflow">return</span> NULL ;
-<a name="l01724"></a>01724     }
-<a name="l01725"></a>01725 
-<a name="l01726"></a>01726     <span class="keywordflow">if</span> ( magFactor <= 1 )
-<a name="l01727"></a>01727     {
-<a name="l01728"></a>01728         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong magnifying factor given\n"</span>) ;
-<a name="l01729"></a>01729         <span class="keywordflow">return</span> NULL ;
-<a name="l01730"></a>01730     }
-<a name="l01731"></a>01731     
-<a name="l01732"></a>01732     <span class="comment">/* allocate memory */</span>
-<a name="l01733"></a>01733     <span class="keywordflow">if</span> ( NULL == ( retImage = cpl_image_new( ilx, ily,CPL_TYPE_FLOAT ) ))
-<a name="l01734"></a>01734     {
-<a name="l01735"></a>01735         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate a new image\n"</span>);
-<a name="l01736"></a>01736         <span class="keywordflow">return</span> NULL ;
-<a name="l01737"></a>01737     }
-<a name="l01738"></a>01738     olx=cpl_image_get_size_x(retImage);
-<a name="l01739"></a>01739     oly=cpl_image_get_size_y(retImage);
-<a name="l01740"></a>01740     podata=cpl_image_get_data_float(retImage);
-<a name="l01741"></a>01741 
-<a name="l01742"></a>01742 
-<a name="l01743"></a>01743     var    = (magFactor - 1)*(magFactor - 1) ;
-<a name="l01744"></a>01744     offset = ily * (magFactor/4 + 1) ;
-<a name="l01745"></a>01745 
-<a name="l01746"></a>01746     <span class="comment">/* find out if Angstroem or microns are used */</span>
-<a name="l01747"></a>01747     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )
-<a name="l01748"></a>01748     {
-<a name="l01749"></a>01749     <span class="comment">/* Angstroem */</span>
-<a name="l01750"></a>01750         angst = 10000. ;
-<a name="l01751"></a>01751     }
-<a name="l01752"></a>01752     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )
-<a name="l01753"></a>01753     {
-<a name="l01754"></a>01754     <span class="comment">/* nanometers */</span>
-<a name="l01755"></a>01755     angst = 1000. ;
-<a name="l01756"></a>01756     }
-<a name="l01757"></a>01757     <span class="keywordflow">else</span>
-<a name="l01758"></a>01758     {
-<a name="l01759"></a>01759     <span class="comment">/* microns */</span>
-<a name="l01760"></a>01760     angst = 1. ;
-<a name="l01761"></a>01761     }
-<a name="l01762"></a>01762 
-<a name="l01763"></a>01763     z=cpl_calloc(2*(n_a_fitcoefs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01764"></a>01764     a=cpl_calloc(n_a_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));
-<a name="l01765"></a>01765     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01766"></a>01766     emline=cpl_calloc(2*magFactor*ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01767"></a>01767     spec=cpl_calloc(2*magFactor*ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01768"></a>01768 
-<a name="l01769"></a>01769     <span class="comment">/* go through the image columns */</span>
-<a name="l01770"></a>01770     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01771"></a>01771     {
-<a name="l01772"></a>01772         <span class="comment">/* initialize the emline array for each column */</span>
-<a name="l01773"></a>01773         <span class="keywordflow">for</span> ( i = 0 ; i < 2*magFactor*ily ; i++ )
-<a name="l01774"></a>01774         {
-<a name="l01775"></a>01775             emline[i] = 0. ;
-<a name="l01776"></a>01776         }
-<a name="l01777"></a>01777         col_off = (float)col - (<span class="keywordtype">float</span>)(ilx-1)/2. ;
-<a name="l01778"></a>01778 
-<a name="l01779"></a>01779         <span class="comment">/* determine the coefficients by using the given bcoefs */</span>
-<a name="l01780"></a>01780         <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ ) 
-<a name="l01781"></a>01781         {
-<a name="l01782"></a>01782             <span class="comment">/* initialize coefficients and solution */</span>
-<a name="l01783"></a>01783             a[i] = 0. ;
-<a name="l01784"></a>01784             <span class="keywordflow">if</span> (i < n_a_fitcoefs-1)
-<a name="l01785"></a>01785             {
-<a name="l01786"></a>01786                 z[2*i] = 0. ;
-<a name="l01787"></a>01787                 z[2*i+1] = 0. ;
-<a name="l01788"></a>01788             }
-<a name="l01789"></a>01789             <span class="keywordflow">for</span> ( j = 0 ; j < n_b_fitcoefs ; j++ )
-<a name="l01790"></a>01790             {
-<a name="l01791"></a>01791                 a[i] += bcoefs[i][j] * pow(col_off, j) ;
-<a name="l01792"></a>01792             }
-<a name="l01793"></a>01793         }
-<a name="l01794"></a>01794         a_initial = a[0] ;
-<a name="l01795"></a>01795         
-<a name="l01796"></a>01796         <span class="comment">/* go through the lines and generate an artificial spectrum */</span>
-<a name="l01797"></a>01797         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l01798"></a>01798         {
-<a name="l01799"></a>01799             <span class="comment">/* go from Angstroem to micron */</span>
-<a name="l01800"></a>01800             wave[line] = wavelength[line]/angst ;
-<a name="l01801"></a>01801 
-<a name="l01802"></a>01802             <span class="comment">/* ---------------------------------------------------------------</span>
-<a name="l01803"></a>01803 <span class="comment">             * solve the polynomial for the exact offset of the line that means</span>
-<a name="l01804"></a>01804 <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span>
-<a name="l01805"></a>01805 <span class="comment">             */</span>
-<a name="l01806"></a>01806             a[0] = a_initial - wave[line] ;
-<a name="l01807"></a>01807 
-<a name="l01808"></a>01808             <span class="keywordflow">if</span>(NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_a_fitcoefs)))
-<a name="l01809"></a>01809             {
-<a name="l01810"></a>01810                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate complex workspace!"</span>) ;
-<a name="l01811"></a>01811                 cpl_image_delete(retImage) ;
-<a name="l01812"></a>01812                 <span class="keywordflow">return</span> NULL ;
-<a name="l01813"></a>01813             }
-<a name="l01814"></a>01814             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_a_fitcoefs, w, z))
-<a name="l01815"></a>01815             {
-<a name="l01816"></a>01816                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;
-<a name="l01817"></a>01817                 cpl_image_delete(retImage) ;
-<a name="l01818"></a>01818                 <span class="keywordflow">return</span> NULL ;
-<a name="l01819"></a>01819             }
-<a name="l01820"></a>01820             sinfo_gsl_poly_complex_workspace_free(w) ;
-<a name="l01821"></a>01821 
-<a name="l01822"></a>01822             
-<a name="l01823"></a>01823             j = 0 ;
-<a name="l01824"></a>01824             found = -1 ;
-<a name="l01825"></a>01825             <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs - 1  ; i++ )
-<a name="l01826"></a>01826             {
-<a name="l01827"></a>01827                 <span class="comment">/* test for appropriate solution */</span>
-<a name="l01828"></a>01828                 <span class="keywordflow">if</span>( z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. && 
-<a name="l01829"></a>01829                     z[2*i] < (<span class="keywordtype">float</span>)ily/2. && z[2*i+1] == 0. )
-<a name="l01830"></a>01830                 {
-<a name="l01831"></a>01831                     found = 2*i ;
-<a name="l01832"></a>01832                     j ++ ;
-<a name="l01833"></a>01833                 }
-<a name="l01834"></a>01834                 <span class="keywordflow">else</span>
-<a name="l01835"></a>01835                 {
-<a name="l01836"></a>01836                     continue ;
-<a name="l01837"></a>01837                 } 
-<a name="l01838"></a>01838             }
-<a name="l01839"></a>01839             <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01840"></a>01840             {
-<a name="l01841"></a>01841                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found "</span>
-<a name="l01842"></a>01842                                   <span class="stringliteral">"for line %d in column %d\n"</span>, line, col) ;
-<a name="l01843"></a>01843                 continue ;
-<a name="l01844"></a>01844             } 
-<a name="l01845"></a>01845             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )
-<a name="l01846"></a>01846             {
-<a name="l01847"></a>01847                 cenpos = z[found] + (float) ily /2. ;
-<a name="l01848"></a>01848             }
-<a name="l01849"></a>01849             <span class="keywordflow">else</span>
-<a name="l01850"></a>01850             {
-<a name="l01851"></a>01851                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found "</span>
-<a name="l01852"></a>01852                                   <span class="stringliteral">"for line %d in column %d\n"</span>, line, col) ;
-<a name="l01853"></a>01853                 continue ;
-<a name="l01854"></a>01854             }
-<a name="l01855"></a>01855              
-<a name="l01856"></a>01856             <span class="comment">/*---------------------------------------------------------------</span>
-<a name="l01857"></a>01857 <span class="comment">             * magnify image by the given factor add an additional offset </span>
-<a name="l01858"></a>01858 <span class="comment">             */</span>
-<a name="l01859"></a>01859             cenpix = cenpos * (float) magFactor + (<span class="keywordtype">float</span>) offset ;  
-<a name="l01860"></a>01860             
-<a name="l01861"></a>01861             <span class="comment">/* determine max and min pixel limits over </span>
-<a name="l01862"></a>01862 <span class="comment">               which line should be convolved */</span>
-<a name="l01863"></a>01863             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? 
-<a name="l01864"></a>01864                     sinfo_new_nint(cenpix) - (var-1) : 0 ;
-<a name="l01865"></a>01865             cmax = (sinfo_new_nint(cenpix) + (var-1)) < 2*magFactor * ily ? 
-<a name="l01866"></a>01866                     sinfo_new_nint(cenpix) + (var-1) :  2*magFactor * ily ;
-<a name="l01867"></a>01867 
-<a name="l01868"></a>01868             <span class="comment">/* convolve neon lines with Gaussian function */</span>
-<a name="l01869"></a>01869             for ( j = cmin ; j < cmax ; j++ )
-<a name="l01870"></a>01870             {
-<a name="l01871"></a>01871                 emline[j] += intensity[line] * 
-<a name="l01872"></a>01872                 exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;
-<a name="l01873"></a>01873             }
-<a name="l01874"></a>01874         }
-<a name="l01875"></a>01875                 
-<a name="l01876"></a>01876         <span class="comment">/*--------------------------------------------------------------------- </span>
-<a name="l01877"></a>01877 <span class="comment">         * for each column, map the image data points onto an magFactor times </span>
-<a name="l01878"></a>01878 <span class="comment">           bigger element grid for FFT in the cross sinfo_new_correlation, </span>
-<a name="l01879"></a>01879 <span class="comment">           first initialize the two helping arrays for each new column.</span>
-<a name="l01880"></a>01880 <span class="comment">         */</span>
-<a name="l01881"></a>01881         <span class="keywordflow">for</span> ( k = 0 ; k < 2*magFactor * ily ; k++ )
-<a name="l01882"></a>01882         {
-<a name="l01883"></a>01883             spec[k] =  0. ;
-<a name="l01884"></a>01884         }
-<a name="l01885"></a>01885    
-<a name="l01886"></a>01886         <span class="comment">/* now take the image data points of the column and put them </span>
-<a name="l01887"></a>01887 <span class="comment">           into the spec array */</span>
-<a name="l01888"></a>01888         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span>
-<a name="l01889"></a>01889         {
-<a name="l01890"></a>01890             <span class="comment">/* insert 8 values for each image row (magnification) and </span>
-<a name="l01891"></a>01891 <span class="comment">               add same offset as for emline array */</span>
-<a name="l01892"></a>01892             <span class="keywordflow">for</span> ( l = 0 ; l < magFactor ; l++ )   
-<a name="l01893"></a>01893         {
-<a name="l01894"></a>01894             <span class="comment">/* set bad pixels or negative values to zero */</span>
-<a name="l01895"></a>01895                 <span class="keywordflow">if</span> (!isnan(pidata[col + row * ilx]) &&
-<a name="l01896"></a>01896                                 (pidata[col + row * ilx] > 0.))
-<a name="l01897"></a>01897                 {
-<a name="l01898"></a>01898                     spec[offset + l + (row * magFactor)] = 
-<a name="l01899"></a>01899                 pidata[col + row * ilx] ;     
-<a name="l01900"></a>01900                 }
-<a name="l01901"></a>01901                 <span class="keywordflow">else</span>
-<a name="l01902"></a>01902                 {
-<a name="l01903"></a>01903                     spec[offset + l + (row * magFactor)] = 0. ;
-<a name="l01904"></a>01904                 }
-<a name="l01905"></a>01905             }
-<a name="l01906"></a>01906     }
-<a name="l01907"></a>01907  
-<a name="l01908"></a>01908         <span class="comment">/* now call the cross sinfo_new_correlation routine */</span>
-<a name="l01909"></a>01909         <span class="keywordflow">if</span> (NULL == (result = sinfo_new_xcorrel(spec, 2*magFactor * ily, 
-<a name="l01910"></a>01910                                                 emline, 2*magFactor * ily, 
-<a name="l01911"></a>01911                                                 magFactor * ily, &delta, 
-<a name="l01912"></a>01912                                                 &maxlag, &xcorr_max)) ) 
-<a name="l01913"></a>01913         {
-<a name="l01914"></a>01914         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"cross sinfo_new_correlation did not work,"</span>
-<a name="l01915"></a>01915                                <span class="stringliteral">" col: %d is set ZERO\n"</span>, col) ;
-<a name="l01916"></a>01916             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01917"></a>01917             {
-<a name="l01918"></a>01918                 podata[col + row * ilx] = ZERO ;
-<a name="l01919"></a>01919             }
-<a name="l01920"></a>01920             continue ;
-<a name="l01921"></a>01921         }
-<a name="l01922"></a>01922     
-<a name="l01923"></a>01923         <span class="keywordflow">if</span> ( xcorr_max <= 0. )
-<a name="l01924"></a>01924         {
-<a name="l01925"></a>01925             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"cross sinfo_new_correlation sum is negative,"</span>
-<a name="l01926"></a>01926                                <span class="stringliteral">" col: %d is set ZERO\n"</span>, col) ;
-<a name="l01927"></a>01927             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01928"></a>01928             {
-<a name="l01929"></a>01929                 podata[col + row * ilx] = ZERO ;
-<a name="l01930"></a>01930             }
-<a name="l01931"></a>01931             cpl_free(result) ;
-<a name="l01932"></a>01932             continue ;
-<a name="l01933"></a>01933         }
-<a name="l01934"></a>01934 
-<a name="l01935"></a>01935         wavelag = (float) -delta / (<span class="keywordtype">float</span>) magFactor ;
-<a name="l01936"></a>01936         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )
-<a name="l01937"></a>01937         {
-<a name="l01938"></a>01938             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wave lag too big, col: %d is set ZERO\n"</span>, col) ;
-<a name="l01939"></a>01939             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01940"></a>01940             {
-<a name="l01941"></a>01941                 podata[col + row * ilx] = ZERO ;
-<a name="l01942"></a>01942             }
-<a name="l01943"></a>01943             cpl_free(result) ;
-<a name="l01944"></a>01944         continue ;
-<a name="l01945"></a>01945         }
-<a name="l01946"></a>01946 
-<a name="l01947"></a>01947         <span class="comment">/*-------------------------------------------------------------------- </span>
-<a name="l01948"></a>01948 <span class="comment">         * determine new zero order coefficient centreval, of which the </span>
-<a name="l01949"></a>01949 <span class="comment">           formula is determined by setting equal a polynomial shifted by </span>
-<a name="l01950"></a>01950 <span class="comment">           wavelag with the same higher order coefficients and set the new </span>
-<a name="l01951"></a>01951 <span class="comment">           zero order coefficient to get both sides of the equation </span>
-<a name="l01952"></a>01952 <span class="comment">           approximately equal.</span>
-<a name="l01953"></a>01953 <span class="comment">         */</span> 
-<a name="l01954"></a>01954         centreval = a_initial ;
-<a name="l01955"></a>01955         <span class="keywordflow">for</span> ( i = 1 ; i < n_a_fitcoefs ; i++ )
-<a name="l01956"></a>01956         {
-<a name="l01957"></a>01957             <span class="keywordflow">if</span> ( i%2 == 0 )
-<a name="l01958"></a>01958             {
-<a name="l01959"></a>01959                 sign = -1 ;
-<a name="l01960"></a>01960             }
-<a name="l01961"></a>01961             <span class="keywordflow">else</span>
-<a name="l01962"></a>01962             {
-<a name="l01963"></a>01963                 sign = 1 ;
-<a name="l01964"></a>01964             }
-<a name="l01965"></a>01965             centreval += (float)sign * a[i]*pow(wavelag, i) ;
-<a name="l01966"></a>01966         }
-<a name="l01967"></a>01967 
-<a name="l01968"></a>01968         <span class="comment">/* prepare to write out wavelength as pixel values */</span>
-<a name="l01969"></a>01969         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01970"></a>01970         {
-<a name="l01971"></a>01971             centrepix = (float)row - ((<span class="keywordtype">float</span>)ily - 1.)/2. ;
-<a name="l01972"></a>01972             pixvalue = 0. ;
-<a name="l01973"></a>01973             <span class="keywordflow">for</span> ( i = 1 ; i < n_a_fitcoefs ; i++ )
-<a name="l01974"></a>01974             {
-<a name="l01975"></a>01975                 pixvalue += a[i]*pow(centrepix, i) ; 
-<a name="l01976"></a>01976             }
-<a name="l01977"></a>01977             podata[col + row * ilx] = centreval + pixvalue ; 
-<a name="l01978"></a>01978         }
-<a name="l01979"></a>01979         cpl_free(result) ;   
-<a name="l01980"></a>01980     }
-<a name="l01981"></a>01981 
-<a name="l01982"></a>01982 
-<a name="l01983"></a>01983 
-<a name="l01984"></a>01984     cpl_free(z) ;
-<a name="l01985"></a>01985     cpl_free(a) ;
-<a name="l01986"></a>01986     cpl_free(wave) ;
-<a name="l01987"></a>01987     cpl_free(emline) ;
-<a name="l01988"></a>01988     cpl_free(spec) ;
-<a name="l01989"></a>01989 
-<a name="l01990"></a>01990     <span class="keywordflow">return</span> retImage ;
-<a name="l01991"></a>01991 }                    
-<a name="l01992"></a>01992 
-<a name="l02037"></a>02037 <span class="keywordtype">int</span> sinfo_new_wavelength_calibration( cpl_image   * image,
-<a name="l02038"></a>02038                            FitParams ** par ,
-<a name="l02039"></a>02039                            <span class="keywordtype">float</span>     ** bcoefs,
-<a name="l02040"></a>02040                            <span class="keywordtype">float</span>      * wave,
-<a name="l02041"></a>02041                            <span class="keywordtype">int</span>          n_lines,
-<a name="l02042"></a>02042                            <span class="keywordtype">int</span>       ** row_clean,
-<a name="l02043"></a>02043                            <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l02044"></a>02044                            <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l02045"></a>02045                            <span class="keywordtype">float</span>        dispersion,
-<a name="l02046"></a>02046                            <span class="keywordtype">int</span>          halfWidth,
-<a name="l02047"></a>02047                            <span class="keywordtype">float</span>        minAmplitude,
-<a name="l02048"></a>02048                            <span class="keywordtype">float</span>        max_residual,
-<a name="l02049"></a>02049                            <span class="keywordtype">float</span>        fwhm,
-<a name="l02050"></a>02050                            <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l02051"></a>02051                            <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l02052"></a>02052                            <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l02053"></a>02053                            <span class="keywordtype">float</span>        pixel_tolerance )
-<a name="l02054"></a>02054 
-<a name="l02055"></a>02055 {
-<a name="l02056"></a>02056     <span class="keywordtype">int</span>          i, j, k ;
-<a name="l02057"></a>02057     <span class="keywordtype">int</span>          n_fit ;
-<a name="l02058"></a>02058     <span class="keywordtype">int</span>          n_reject ;
-<a name="l02059"></a>02059     <span class="keywordtype">float</span>     *  acoefs ;
-<a name="l02060"></a>02060     <span class="keywordtype">float</span>     *  dacoefs ;
-<a name="l02061"></a>02061     <span class="keywordtype">float</span>     ** abuf ;
-<a name="l02062"></a>02062     <span class="keywordtype">float</span>     ** dabuf ;
-<a name="l02063"></a>02063     <span class="keywordtype">float</span>        chisq_poly, chisq_cross ;
-<a name="l02064"></a>02064     <span class="keywordtype">int</span>          zeroind ;
-<a name="l02065"></a>02065     <span class="comment">/*float     *  mem ;*/</span>
-<a name="l02066"></a>02066     <span class="keywordtype">int</span> lx=0;
-<a name="l02067"></a>02067     <span class="keywordtype">int</span> ly=0;
-<a name="l02068"></a>02068     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l02069"></a>02069 
-<a name="l02070"></a>02070     <span class="keywordflow">if</span> (  NULL == image )
-<a name="l02071"></a>02071     {
-<a name="l02072"></a>02072         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given\n"</span>) ;
-<a name="l02073"></a>02073         <span class="keywordflow">return</span> -1 ;
-<a name="l02074"></a>02074     }
-<a name="l02075"></a>02075     lx=cpl_image_get_size_x(image);
-<a name="l02076"></a>02076     ly=cpl_image_get_size_y(image);
-<a name="l02077"></a>02077     pdata=cpl_image_get_data_float(image);
-<a name="l02078"></a>02078 
-<a name="l02079"></a>02079     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l02080"></a>02080     {
-<a name="l02081"></a>02081         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given\n"</span>) ;
-<a name="l02082"></a>02082         <span class="keywordflow">return</span> -1 ;
-<a name="l02083"></a>02083     }
-<a name="l02084"></a>02084     <span class="keywordflow">if</span> ( wave == NULL )
-<a name="l02085"></a>02085     {
-<a name="l02086"></a>02086         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength list given\n"</span>) ;
-<a name="l02087"></a>02087         <span class="keywordflow">return</span> -1 ;
-<a name="l02088"></a>02088     }
-<a name="l02089"></a>02089     <span class="keywordflow">if</span> ( n_lines <= 0 )
-<a name="l02090"></a>02090     {
-<a name="l02091"></a>02091         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible number of lines in line list given\n"</span>) ;
-<a name="l02092"></a>02092         <span class="keywordflow">return</span> -1 ;
-<a name="l02093"></a>02093     }
-<a name="l02094"></a>02094     <span class="keywordflow">if</span> ( row_clean == NULL )
-<a name="l02095"></a>02095     {
-<a name="l02096"></a>02096         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row_clean array given\n"</span>) ;
-<a name="l02097"></a>02097         <span class="keywordflow">return</span> -1 ;
-<a name="l02098"></a>02098     }
-<a name="l02099"></a>02099     <span class="keywordflow">if</span> ( wavelength_clean == NULL )
-<a name="l02100"></a>02100     {
-<a name="l02101"></a>02101         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength_clean array given\n"</span>) ;
-<a name="l02102"></a>02102         <span class="keywordflow">return</span> -1 ;
-<a name="l02103"></a>02103     }
-<a name="l02104"></a>02104 
-<a name="l02105"></a>02105     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l02106"></a>02106     {
-<a name="l02107"></a>02107         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given\n"</span>) ;
-<a name="l02108"></a>02108         <span class="keywordflow">return</span> -1 ;
-<a name="l02109"></a>02109     }
-<a name="l02110"></a>02110 
-<a name="l02111"></a>02111     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ly/2 )
-<a name="l02112"></a>02112     {
-<a name="l02113"></a>02113         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible half width of the fitting box given\n"</span>) ;
-<a name="l02114"></a>02114         <span class="keywordflow">return</span> -1 ;
-<a name="l02115"></a>02115     }
-<a name="l02116"></a>02116     <span class="keywordflow">if</span> ( minAmplitude < 1. )
-<a name="l02117"></a>02117     {
-<a name="l02118"></a>02118         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible minimal amplitude\n"</span>) ;
-<a name="l02119"></a>02119         <span class="keywordflow">return</span> -1 ;
-<a name="l02120"></a>02120     }
-<a name="l02121"></a>02121 
-<a name="l02122"></a>02122     <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )
-<a name="l02123"></a>02123     {
-<a name="l02124"></a>02124         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible max_residual given\n"</span>) ;
-<a name="l02125"></a>02125         <span class="keywordflow">return</span> -1 ;
-<a name="l02126"></a>02126     }
-<a name="l02127"></a>02127 
-<a name="l02128"></a>02128     <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )
-<a name="l02129"></a>02129     {
-<a name="l02130"></a>02130         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible fwhm given\n"</span>) ;
-<a name="l02131"></a>02131 
-<a name="l02132"></a>02132         <span class="keywordflow">return</span> -1 ;
-<a name="l02133"></a>02133     }
-<a name="l02134"></a>02134 
-<a name="l02135"></a>02135     <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )
-<a name="l02136"></a>02136     {
-<a name="l02137"></a>02137         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_a_fitcoefs given\n"</span>) ;
-<a name="l02138"></a>02138         <span class="keywordflow">return</span> -1 ;
-<a name="l02139"></a>02139     }
-<a name="l02140"></a>02140 
-<a name="l02141"></a>02141     <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )
-<a name="l02142"></a>02142     {
-<a name="l02143"></a>02143         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_b_fitcoefs given\n"</span>) ;
-<a name="l02144"></a>02144         <span class="keywordflow">return</span> -1 ;
-<a name="l02145"></a>02145     }
-<a name="l02146"></a>02146     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )
-<a name="l02147"></a>02147     {
-<a name="l02148"></a>02148         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigmaFactor given\n"</span>) ;
-<a name="l02149"></a>02149         <span class="keywordflow">return</span> -1 ;
-<a name="l02150"></a>02150     }
-<a name="l02151"></a>02151 
-<a name="l02152"></a>02152     <span class="comment">/* initialize the variables */</span>
-<a name="l02153"></a>02153     n_reject = 0 ;
-<a name="l02154"></a>02154     n_fit = 0 ;
-<a name="l02155"></a>02155 
-<a name="l02156"></a>02156     <span class="comment">/* fit each found line by using a Gaussian function and determine the </span>
-<a name="l02157"></a>02157 <span class="comment">       exact position */</span>
-<a name="l02158"></a>02158     <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, 
-<a name="l02159"></a>02159                                            n_found_lines, row_clean, 
-<a name="l02160"></a>02160                                            wavelength_clean,
-<a name="l02161"></a>02161                                 halfWidth, minAmplitude )) )
-<a name="l02162"></a>02162     {
-<a name="l02163"></a>02163         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, "</span>
-<a name="l02164"></a>02164                         <span class="stringliteral">"error code of sinfo_fitLines: %d\n"</span>, n_fit) ;
-<a name="l02165"></a>02165         <span class="keywordflow">return</span> -1 ;
-<a name="l02166"></a>02166     }
-<a name="l02167"></a>02167 
-<a name="l02168"></a>02168     <span class="comment">/* first check for faked lines like bad pixels */</span>
-<a name="l02169"></a>02169     <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, dispersion, 
-<a name="l02170"></a>02170                                                wavelength_clean, row_clean, 
-<a name="l02171"></a>02171                                                n_found_lines,
-<a name="l02172"></a>02172                                                lx, pixel_tolerance) )
-<a name="l02173"></a>02173     {
-<a name="l02174"></a>02174         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, "</span>
-<a name="l02175"></a>02175                         <span class="stringliteral">"error code of sinfo_fitLines: %d"</span>, n_fit) ;
-<a name="l02176"></a>02176         <span class="keywordflow">return</span> -1 ;
-<a name="l02177"></a>02177     }
-<a name="l02178"></a>02178 
-<a name="l02179"></a>02179     <span class="comment">/* allocate memory */</span>
-<a name="l02180"></a>02180     <span class="keywordflow">if</span> (NULL == (acoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||
-<a name="l02181"></a>02181         NULL == (dacoefs = (<span class="keywordtype">float</span>*)cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||
-<a name="l02182"></a>02182         NULL == (abuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||
-<a name="l02183"></a>02183         NULL == (dabuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) )
-<a name="l02184"></a>02184     {
-<a name="l02185"></a>02185         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;
-<a name="l02186"></a>02186         <span class="keywordflow">return</span> -1 ;
-<a name="l02187"></a>02187     }
-<a name="l02188"></a>02188 
-<a name="l02189"></a>02189     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l02190"></a>02190     {
-<a name="l02191"></a>02191         <span class="keywordflow">if</span> ( NULL == (abuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||
-<a name="l02192"></a>02192              NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l02193"></a>02193         {
-<a name="l02194"></a>02194             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;
-<a name="l02195"></a>02195             cpl_free(abuf) ;
-<a name="l02196"></a>02196             cpl_free(dabuf) ;
-<a name="l02197"></a>02197             <span class="keywordflow">return</span> -1 ;
-<a name="l02198"></a>02198         }
-<a name="l02199"></a>02199     }
-<a name="l02200"></a>02200 
-<a name="l02201"></a>02201     <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span>
-<a name="l02202"></a>02202     k = 0 ;
-<a name="l02203"></a>02203     
-<a name="l02204"></a>02204     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i++ )
-<a name="l02205"></a>02205     {
-<a name="l02206"></a>02206         zeroind = 0 ;
-<a name="l02207"></a>02207         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, 
-<a name="l02208"></a>02208                                                          n_found_lines[i], 
-<a name="l02209"></a>02209                                                          ly, dispersion,
-<a name="l02210"></a>02210                                                          max_residual, acoefs, 
-<a name="l02211"></a>02211                                                          dacoefs, &n_reject, 
-<a name="l02212"></a>02212                                                          n_a_fitcoefs)) )
-<a name="l02213"></a>02213         {
-<a name="l02214"></a>02214       <span class="comment">/* </span>
-<a name="l02215"></a>02215 <span class="comment">           sinfo_msg_warning (" error in polyfitt in column: %d\n", i) ;</span>
-<a name="l02216"></a>02216 <span class="comment">       */</span>
-<a name="l02217"></a>02217             <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l02218"></a>02218             {
-<a name="l02219"></a>02219                 acoefs[j] = ZERO ;
-<a name="l02220"></a>02220                 dacoefs[j] = ZERO ;
-<a name="l02221"></a>02221             }
-<a name="l02222"></a>02222         }
-<a name="l02223"></a>02223 
-<a name="l02224"></a>02224         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l02225"></a>02225         {
-<a name="l02226"></a>02226             <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||
-<a name="l02227"></a>02227                  dacoefs[j] == 0. || isnan(acoefs[j]) )
-<a name="l02228"></a>02228             {
-<a name="l02229"></a>02229                 zeroind = 1 ;
-<a name="l02230"></a>02230 
-<a name="l02231"></a>02231             }
-<a name="l02232"></a>02232         }
-<a name="l02233"></a>02233         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l02234"></a>02234         {
-<a name="l02235"></a>02235             <span class="keywordflow">if</span> ( zeroind == 0 )
-<a name="l02236"></a>02236             {
-<a name="l02237"></a>02237                 abuf[j][i]  = acoefs[j] ;
-<a name="l02238"></a>02238                 dabuf[j][i] = dacoefs[j] ;
-<a name="l02239"></a>02239             }
-<a name="l02240"></a>02240             <span class="keywordflow">else</span>
-<a name="l02241"></a>02241             {
-<a name="l02242"></a>02242                 abuf[j][i]  = ZERO ;
-<a name="l02243"></a>02243                 dabuf[j][i] = ZERO ;
-<a name="l02244"></a>02244             }
-<a name="l02245"></a>02245         }
-<a name="l02246"></a>02246     }
-<a name="l02247"></a>02247 
-<a name="l02248"></a>02248     <span class="comment">/* fit each acoefs across the columns to smooth the result */</span>
-<a name="l02249"></a>02249     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l02250"></a>02250     {
-<a name="l02251"></a>02251         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_cross = sinfo_new_coefs_cross_fit(lx, 
-<a name="l02252"></a>02252                                                                  abuf[i], 
-<a name="l02253"></a>02253                                                                  dabuf[i],
-<a name="l02254"></a>02254                                                                  bcoefs[i],
-<a name="l02255"></a>02255                                                                  n_b_fitcoefs,
-<a name="l02256"></a>02256                                                                  sigmaFactor)))
-<a name="l02257"></a>02257         {
-<a name="l02258"></a>02258             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out the fitting of coefficients"</span>
-<a name="l02259"></a>02259                              <span class="stringliteral">" across the columns, for the coefficient with"</span>
-<a name="l02260"></a>02260                              <span class="stringliteral">" index: %d\n"</span>, i) ;
-<a name="l02261"></a>02261             <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l02262"></a>02262             {
-<a name="l02263"></a>02263                 cpl_free (abuf[i]) ;
-<a name="l02264"></a>02264                 cpl_free (dabuf[i]) ;
-<a name="l02265"></a>02265             }
-<a name="l02266"></a>02266             cpl_free ( acoefs ) ;
-<a name="l02267"></a>02267             cpl_free ( dacoefs ) ;
-<a name="l02268"></a>02268             cpl_free ( abuf ) ;
-<a name="l02269"></a>02269             cpl_free ( dabuf ) ;
-<a name="l02270"></a>02270             <span class="keywordflow">return</span> -1 ;
-<a name="l02271"></a>02271         }
-<a name="l02272"></a>02272     }
-<a name="l02273"></a>02273 
-<a name="l02274"></a>02274     <span class="comment">/* free all allocated memory */</span>
-<a name="l02275"></a>02275     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l02276"></a>02276     {
-<a name="l02277"></a>02277         cpl_free (abuf[i]) ;
-<a name="l02278"></a>02278         cpl_free (dabuf[i]) ;
-<a name="l02279"></a>02279     }
-<a name="l02280"></a>02280     cpl_free ( acoefs ) ;
-<a name="l02281"></a>02281     cpl_free ( dacoefs ) ;
-<a name="l02282"></a>02282     cpl_free ( abuf ) ;
-<a name="l02283"></a>02283     cpl_free ( dabuf ) ;
-<a name="l02284"></a>02284 
-<a name="l02285"></a>02285     <span class="keywordflow">return</span> 0 ;   
-<a name="l02286"></a>02286 }
-<a name="l02287"></a>02287 
-<a name="l02288"></a>02288                            
-<a name="l02300"></a>02300 cpl_image * sinfo_new_convolve_image_by_gauss( cpl_image * lineImage,
-<a name="l02301"></a>02301                                  <span class="keywordtype">int</span>        hw )
-<a name="l02302"></a>02302 {
-<a name="l02303"></a>02303     cpl_image * returnImage ;
-<a name="l02304"></a>02304     <span class="keywordtype">float</span>* column_buffer=NULL ;
-<a name="l02305"></a>02305     <span class="keywordtype">float</span> * filter ;
-<a name="l02306"></a>02306     <span class="keywordtype">int</span> col, row ;
-<a name="l02307"></a>02307     <span class="keywordtype">int</span> ilx=0;
-<a name="l02308"></a>02308     <span class="keywordtype">int</span> ily=0;
-<a name="l02309"></a>02309     <span class="keywordtype">int</span> olx=0;
-<a name="l02310"></a>02310     <span class="keywordtype">int</span> oly=0;
-<a name="l02311"></a>02311     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02312"></a>02312     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02313"></a>02313 
-<a name="l02314"></a>02314     <span class="keywordflow">if</span> ( lineImage == NULL )
-<a name="l02315"></a>02315     {
-<a name="l02316"></a>02316         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l02317"></a>02317         <span class="keywordflow">return</span> NULL ;
-<a name="l02318"></a>02318     }
-<a name="l02319"></a>02319     ilx=cpl_image_get_size_x(lineImage);
-<a name="l02320"></a>02320     ily=cpl_image_get_size_y(lineImage);
-<a name="l02321"></a>02321     pidata=cpl_image_get_data_float(lineImage);
-<a name="l02322"></a>02322 
-<a name="l02323"></a>02323     <span class="keywordflow">if</span> ( hw < 1 )
-<a name="l02324"></a>02324     {
-<a name="l02325"></a>02325         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width given!\n"</span>) ;
-<a name="l02326"></a>02326         <span class="keywordflow">return</span> NULL ;
-<a name="l02327"></a>02327     }
-<a name="l02328"></a>02328 
-<a name="l02329"></a>02329     <span class="comment">/* allocate memory for returned image */</span>
-<a name="l02330"></a>02330     <span class="keywordflow">if</span> ( NULL == ( returnImage = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT ) ))
-<a name="l02331"></a>02331     {
-<a name="l02332"></a>02332         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);
-<a name="l02333"></a>02333         <span class="keywordflow">return</span> NULL ;
-<a name="l02334"></a>02334     }
-<a name="l02335"></a>02335     olx=cpl_image_get_size_x(returnImage);
-<a name="l02336"></a>02336     oly=cpl_image_get_size_y(returnImage);
-<a name="l02337"></a>02337     podata=cpl_image_get_data_float(returnImage);
-<a name="l02338"></a>02338 
-<a name="l02339"></a>02339     column_buffer=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02340"></a>02340 
-<a name="l02341"></a>02341     <span class="comment">/* go through the image columns and save them in a buffer */</span>
-<a name="l02342"></a>02342     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02343"></a>02343     { 
-<a name="l02344"></a>02344         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02345"></a>02345         {
-<a name="l02346"></a>02346             column_buffer[row] = pidata[col + row*ilx] ;
-<a name="l02347"></a>02347         }
-<a name="l02348"></a>02348          
-<a name="l02349"></a>02349         <span class="comment">/*--------------------------------------------------------------------- </span>
-<a name="l02350"></a>02350 <span class="comment">         * now low pass filter the columns by the sinfo_gaussian and fill </span>
-<a name="l02351"></a>02351 <span class="comment">           the return image.</span>
-<a name="l02352"></a>02352 <span class="comment">         */</span>  
-<a name="l02353"></a>02353         filter = sinfo_function1d_filter_lowpass( column_buffer,
-<a name="l02354"></a>02354                                             ily,
-<a name="l02355"></a>02355                                             LOW_PASS_GAUSSIAN,
-<a name="l02356"></a>02356                                             hw ) ;
-<a name="l02357"></a>02357         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02358"></a>02358         {
-<a name="l02359"></a>02359             podata[col + row*ilx] = filter[row] ;
-<a name="l02360"></a>02360         }
-<a name="l02361"></a>02361         sinfo_function1d_del(filter) ;
-<a name="l02362"></a>02362     }
-<a name="l02363"></a>02363                         
-<a name="l02364"></a>02364     cpl_free(column_buffer);
-<a name="l02365"></a>02365     <span class="keywordflow">return</span> returnImage ;
-<a name="l02366"></a>02366 }
-<a name="l02367"></a>02367 
-<a name="l02407"></a>02407 cpl_image * sinfo_new_defined_resampling( cpl_image * image,
-<a name="l02408"></a>02408                               cpl_image * calimage,
-<a name="l02409"></a>02409                               <span class="keywordtype">int</span>        n_params,
-<a name="l02410"></a>02410                               <span class="keywordtype">int</span>*       n_rows,
-<a name="l02411"></a>02411                               <span class="keywordtype">double</span>   * dispersion,
-<a name="l02412"></a>02412                               <span class="keywordtype">float</span>    * minval,
-<a name="l02413"></a>02413                               <span class="keywordtype">float</span>    * maxval,
-<a name="l02414"></a>02414                               <span class="keywordtype">double</span>   * centralLambda,
-<a name="l02415"></a>02415                               <span class="keywordtype">int</span>    * centralpix )
-<a name="l02416"></a>02416 {
-<a name="l02417"></a>02417     cpl_image * retImage ;
-<a name="l02418"></a>02418     cpl_image * tempCalImage ;
-<a name="l02419"></a>02419     cpl_image * tempImage ;
-<a name="l02420"></a>02420     <span class="keywordtype">float</span> lambda ;
-<a name="l02421"></a>02421     <span class="keywordtype">float</span> dif, lambda_renorm ;
-<a name="l02422"></a>02422     <span class="keywordtype">float</span> * retimagecol = NULL;<span class="comment">//[2560] ; /* retimagecol[n_rows] ; */</span>
-<a name="l02423"></a>02423 
-<a name="l02424"></a>02424     <span class="keywordtype">float</span>* imagecol=NULL ;
-<a name="l02425"></a>02425     <span class="keywordtype">float</span>* calcol=NULL ;
-<a name="l02426"></a>02426     <span class="keywordtype">float</span>* x_renorm=NULL ;
-<a name="l02427"></a>02427 
-<a name="l02428"></a>02428     <span class="keywordtype">float</span> * imageptr ;
-<a name="l02429"></a>02429     <span class="keywordtype">float</span> sum, new_sum ;
-<a name="l02430"></a>02430     <span class="keywordtype">float</span> disp, mindisp ;
-<a name="l02431"></a>02431     <span class="keywordtype">int</span> *calcolpos=NULL;<span class="comment">//[2560];</span>
-<a name="l02432"></a>02432     <span class="keywordtype">int</span> i<span class="comment">/*, j*/</span>, col, row, testrow ;
-<a name="l02433"></a>02433     <span class="keywordtype">int</span> half_width, firstpos ;
-<a name="l02434"></a>02434     <span class="keywordtype">int</span> dispInd ;
-<a name="l02435"></a>02435     <span class="keywordtype">int</span> n ;
-<a name="l02436"></a>02436     <span class="keywordtype">int</span> flag;
-<a name="l02437"></a>02437     <span class="keywordtype">float</span> temprow;
-<a name="l02438"></a>02438     <span class="keywordtype">float</span> minLambda = 0. ;
-<a name="l02439"></a>02439     <span class="comment">/*dpoint list[n_params] ;*/</span>
-<a name="l02440"></a>02440     <span class="comment">/*double * polycoeffs ;*/</span>
-<a name="l02441"></a>02441     <span class="keywordtype">double</span> poly ;
-<a name="l02442"></a>02442     <span class="comment">/*float error;*/</span>
-<a name="l02443"></a>02443     <span class="keywordtype">int</span> zeroind ;
-<a name="l02444"></a>02444     <span class="keywordtype">int</span> ilx=0;
-<a name="l02445"></a>02445     <span class="keywordtype">int</span> ily=0;
-<a name="l02446"></a>02446     <span class="keywordtype">int</span> clx=0;
-<a name="l02447"></a>02447     <span class="keywordtype">int</span> cly=0;
-<a name="l02448"></a>02448     <span class="keywordtype">int</span> olx=0;
-<a name="l02449"></a>02449     <span class="keywordtype">int</span> oly=0;
-<a name="l02450"></a>02450 
-<a name="l02451"></a>02451     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02452"></a>02452     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02453"></a>02453     <span class="keywordtype">float</span>* pcdata=NULL;
-<a name="l02454"></a>02454     <span class="keywordtype">float</span>* ptidata=NULL;
-<a name="l02455"></a>02455     <span class="keywordtype">float</span>* ptcdata=NULL;
-<a name="l02456"></a>02456 
-<a name="l02457"></a>02457     <span class="keywordflow">if</span> ( NULL == image )
-<a name="l02458"></a>02458     {
-<a name="l02459"></a>02459         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" source image not given\n"</span>) ;
-<a name="l02460"></a>02460         <span class="keywordflow">return</span> NULL ;
-<a name="l02461"></a>02461     }
-<a name="l02462"></a>02462     ilx=cpl_image_get_size_x(image);
-<a name="l02463"></a>02463     ily=cpl_image_get_size_y(image);
-<a name="l02464"></a>02464     pidata=cpl_image_get_data_float(image);
-<a name="l02465"></a>02465 
-<a name="l02466"></a>02466 
-<a name="l02467"></a>02467     <span class="keywordflow">if</span> ( NULL == calimage )
-<a name="l02468"></a>02468     {
-<a name="l02469"></a>02469         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelength map image not given\n"</span>) ;
-<a name="l02470"></a>02470         <span class="keywordflow">return</span> NULL ;
-<a name="l02471"></a>02471     }
-<a name="l02472"></a>02472     clx=cpl_image_get_size_x(calimage);
-<a name="l02473"></a>02473     cly=cpl_image_get_size_y(calimage);
-<a name="l02474"></a>02474     pcdata=cpl_image_get_data_float(calimage);
-<a name="l02475"></a>02475     <span class="keywordflow">if</span> ( ilx != clx ||
-<a name="l02476"></a>02476          ily != cly )
-<a name="l02477"></a>02477     {
-<a name="l02478"></a>02478         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"source image and wavelength map image "</span>
-<a name="l02479"></a>02479                         <span class="stringliteral">"are not compatible in size\n"</span>) ;
-<a name="l02480"></a>02480         <span class="keywordflow">return</span> NULL ;
-<a name="l02481"></a>02481     }                              
-<a name="l02482"></a>02482   
-<a name="l02483"></a>02483     <span class="keywordflow">if</span> ( n_params < 1 )
-<a name="l02484"></a>02484     {
-<a name="l02485"></a>02485         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of fit parameters given\n"</span>) ;
-<a name="l02486"></a>02486         <span class="keywordflow">return</span> NULL ;
-<a name="l02487"></a>02487     }
-<a name="l02488"></a>02488 
-<a name="l02489"></a>02489     <span class="keywordflow">if</span> ( n_params > 4 )
-<a name="l02490"></a>02490     {
-<a name="l02491"></a>02491         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" attention: very high number of fit "</span>
-<a name="l02492"></a>02492                           <span class="stringliteral">"parameters given, not tested !!!\n"</span>) ;
-<a name="l02493"></a>02493     }
-<a name="l02494"></a>02494 
-<a name="l02495"></a>02495     imagecol=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02496"></a>02496     calcol=cpl_calloc(cly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02497"></a>02497     x_renorm=cpl_calloc(n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02498"></a>02498 
-<a name="l02499"></a>02499 
-<a name="l02500"></a>02500     <span class="comment">/*if ( n_rows <= cly)</span>
-<a name="l02501"></a>02501 <span class="comment">    {</span>
-<a name="l02502"></a>02502 <span class="comment">        sinfo_msg_error (" number of rows of resampled image will be "</span>
-<a name="l02503"></a>02503 <span class="comment">                         " smaller than in wavelength calibration map,"</span>
-<a name="l02504"></a>02504 <span class="comment">                         " information would get lost!") ;</span>
-<a name="l02505"></a>02505 <span class="comment">        return NULL ;</span>
-<a name="l02506"></a>02506 <span class="comment">    }*/</span>
-<a name="l02507"></a>02507    
-<a name="l02508"></a>02508     dispInd = 0 ;
-<a name="l02509"></a>02509 
-<a name="l02510"></a>02510     <span class="comment">/* first determine the dispersion direction */</span>
-<a name="l02511"></a>02511     <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )
-<a name="l02512"></a>02512     {
-<a name="l02513"></a>02513         <span class="keywordflow">if</span> ( isnan(pcdata[col]) || pcdata[col] <= 0. )
-<a name="l02514"></a>02514         {
-<a name="l02515"></a>02515             continue ;
-<a name="l02516"></a>02516         }
-<a name="l02517"></a>02517         <span class="keywordflow">if</span> ((pcdata[col] - pcdata[col+(clx)*(cly-1)]) > 0. )
-<a name="l02518"></a>02518         {
-<a name="l02519"></a>02519            dispInd--  ;
-<a name="l02520"></a>02520         }
-<a name="l02521"></a>02521         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((pcdata[col] - pcdata[col+(clx)*(cly-1)]) < 0. )
-<a name="l02522"></a>02522         {
-<a name="l02523"></a>02523            dispInd++ ;
-<a name="l02524"></a>02524         }
-<a name="l02525"></a>02525         <span class="keywordflow">else</span>
-<a name="l02526"></a>02526         {
-<a name="l02527"></a>02527             continue ;
-<a name="l02528"></a>02528         }
-<a name="l02529"></a>02529     }
-<a name="l02530"></a>02530 
-<a name="l02531"></a>02531     <span class="keywordflow">if</span> ( dispInd == 0 )
-<a name="l02532"></a>02532     {
-<a name="l02533"></a>02533         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" zero dispersion?\n"</span>);
-<a name="l02534"></a>02534         <span class="keywordflow">return</span> NULL ;
-<a name="l02535"></a>02535     }
-<a name="l02536"></a>02536    
-<a name="l02537"></a>02537     <span class="comment">/* mirror the wavelength map and the raw image if </span>
-<a name="l02538"></a>02538 <span class="comment">       the dispersion is negative */</span>
-<a name="l02539"></a>02539     <span class="keywordflow">if</span> ( dispInd < 0 )
-<a name="l02540"></a>02540     {
-<a name="l02541"></a>02541 
-<a name="l02542"></a>02542         <span class="comment">/* allocate a temp image */</span>
-<a name="l02543"></a>02543         <span class="keywordflow">if</span> ( NULL == ( tempCalImage = cpl_image_new(clx,cly,CPL_TYPE_FLOAT)))
-<a name="l02544"></a>02544         {
-<a name="l02545"></a>02545             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);
-<a name="l02546"></a>02546             <span class="keywordflow">return</span> NULL ;
-<a name="l02547"></a>02547         }
-<a name="l02548"></a>02548         ptcdata=cpl_image_get_data_float(tempCalImage);
-<a name="l02549"></a>02549         <span class="keywordflow">if</span> ( NULL == ( tempImage = cpl_image_new( ilx, ily,CPL_TYPE_FLOAT)))
-<a name="l02550"></a>02550         {
-<a name="l02551"></a>02551             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);
-<a name="l02552"></a>02552             cpl_image_delete(tempCalImage) ;
-<a name="l02553"></a>02553             <span class="keywordflow">return</span> NULL ;
-<a name="l02554"></a>02554         }
-<a name="l02555"></a>02555         ptidata=cpl_image_get_data_float(tempImage);
-<a name="l02556"></a>02556 
-<a name="l02557"></a>02557         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )
-<a name="l02558"></a>02558         {
-<a name="l02559"></a>02559             n = cly - 1 ;
-<a name="l02560"></a>02560             <span class="keywordflow">for</span> ( row = 0 ; row < cly ; row++ )
-<a name="l02561"></a>02561             {
-<a name="l02562"></a>02562                 ptcdata[col+row*clx] = pcdata[col+n*clx] ;
-<a name="l02563"></a>02563                 ptidata[col+row*clx] = pidata[col+n*clx] ;
-<a name="l02564"></a>02564                 n-- ;
-<a name="l02565"></a>02565             }
-<a name="l02566"></a>02566         }
-<a name="l02567"></a>02567 
-<a name="l02568"></a>02568         <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )
-<a name="l02569"></a>02569         {
-<a name="l02570"></a>02570             pidata[i] = ptidata[i] ;
-<a name="l02571"></a>02571             pcdata[i] = ptcdata[i] ;
-<a name="l02572"></a>02572         }
-<a name="l02573"></a>02573         cpl_image_delete(tempCalImage) ;
-<a name="l02574"></a>02574         cpl_image_delete(tempImage) ;
-<a name="l02575"></a>02575     }
-<a name="l02576"></a>02576 
-<a name="l02577"></a>02577     <span class="comment">/* determine the max and min pixel value in the first and the last row */</span>
-<a name="l02578"></a>02578     *maxval = -FLT_MAX ;
-<a name="l02579"></a>02579     *minval =  FLT_MAX ;
-<a name="l02580"></a>02580     mindisp = FLT_MAX ;
-<a name="l02581"></a>02581     <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )
-<a name="l02582"></a>02582     {
-<a name="l02583"></a>02583         <span class="keywordflow">if</span> ( isnan(pcdata[col]) || pcdata[col] <= 0. )
-<a name="l02584"></a>02584         {
-<a name="l02585"></a>02585            continue ;
-<a name="l02586"></a>02586         }
-<a name="l02587"></a>02587         disp = (pcdata[col+(clx)*((cly)-1)]
-<a name="l02588"></a>02588                - pcdata[col]) / (float)cly ;
-<a name="l02589"></a>02589         <span class="keywordflow">if</span> ( mindisp > disp )
-<a name="l02590"></a>02590         {
-<a name="l02591"></a>02591             mindisp = disp ;
-<a name="l02592"></a>02592         }
-<a name="l02593"></a>02593         <span class="keywordflow">if</span> ( *minval >= pcdata[col] )
-<a name="l02594"></a>02594         {
-<a name="l02595"></a>02595             *minval = pcdata[col] ;
-<a name="l02596"></a>02596         }
-<a name="l02597"></a>02597         <span class="keywordflow">if</span> ( *maxval <= pcdata[col + (clx)*((cly)-1)] )
-<a name="l02598"></a>02598         {
-<a name="l02599"></a>02599             *maxval = pcdata[col + (clx)*((cly)-1)] ;
-<a name="l02600"></a>02600         }
-<a name="l02601"></a>02601     }
-<a name="l02602"></a>02602 
-<a name="l02603"></a>02603     <span class="comment">/* find the used grating and set the dispersion to the defined value */</span>
-<a name="l02604"></a>02604     <span class="keywordflow">if</span> (*minval > 1.9 )
-<a name="l02605"></a>02605     {
-<a name="l02606"></a>02606         <span class="keywordflow">if</span> ( cly > 1024 && cly < 3000)
-<a name="l02607"></a>02607         {
-<a name="l02608"></a>02608             *dispersion = DISPERSION_K_DITH ;
-<a name="l02609"></a>02609             *centralLambda = CENTRALLAMBDA_K ;
-<a name="l02610"></a>02610         }
-<a name="l02611"></a>02611         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( cly < 2000)
-<a name="l02612"></a>02612         {
-<a name="l02613"></a>02613             *dispersion = DISPERSION_K ;
-<a name="l02614"></a>02614             *centralLambda = CENTRALLAMBDA_K ;
-<a name="l02615"></a>02615         }
-<a name="l02616"></a>02616         <span class="keywordflow">else</span>
-<a name="l02617"></a>02617         {
-<a name="l02618"></a>02618             *dispersion = DISPERSION_K_DITH/2 ;
-<a name="l02619"></a>02619             *centralLambda = CENTRALLAMBDA_K ;
-<a name="l02620"></a>02620         }
-<a name="l02621"></a>02621     }
-<a name="l02622"></a>02622     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*minval < 1.2 )
-<a name="l02623"></a>02623     {
-<a name="l02624"></a>02624         <span class="keywordflow">if</span> ( cly > 1024 )
-<a name="l02625"></a>02625         {
-<a name="l02626"></a>02626             *dispersion = DISPERSION_J_DITH ;
-<a name="l02627"></a>02627             *centralLambda = CENTRALLAMBDA_J ;
-<a name="l02628"></a>02628         }
-<a name="l02629"></a>02629         <span class="keywordflow">else</span>
-<a name="l02630"></a>02630         {
-<a name="l02631"></a>02631             *dispersion = DISPERSION_J ;
-<a name="l02632"></a>02632             *centralLambda = CENTRALLAMBDA_J ;
-<a name="l02633"></a>02633         }
-<a name="l02634"></a>02634     }
-<a name="l02635"></a>02635     <span class="keywordflow">else</span> 
-<a name="l02636"></a>02636     {
-<a name="l02637"></a>02637         <span class="keywordflow">if</span> ( *maxval > 2.3 )
-<a name="l02638"></a>02638         {
-<a name="l02639"></a>02639             <span class="keywordflow">if</span> ( cly > 1024 )
-<a name="l02640"></a>02640             {
-<a name="l02641"></a>02641                 *dispersion = DISPERSION_HK_DITH ;
-<a name="l02642"></a>02642                 *centralLambda = CENTRALLAMBDA_HK ;
-<a name="l02643"></a>02643             }
-<a name="l02644"></a>02644             <span class="keywordflow">else</span>
-<a name="l02645"></a>02645             {
-<a name="l02646"></a>02646                 *dispersion = DISPERSION_HK ;
-<a name="l02647"></a>02647                 *centralLambda = CENTRALLAMBDA_HK ;
-<a name="l02648"></a>02648             }
-<a name="l02649"></a>02649         }
-<a name="l02650"></a>02650         <span class="keywordflow">else</span> 
-<a name="l02651"></a>02651         {
-<a name="l02652"></a>02652             <span class="keywordflow">if</span> ( cly > 1024 )
-<a name="l02653"></a>02653             {
-<a name="l02654"></a>02654                 *dispersion = DISPERSION_H_DITH ;
-<a name="l02655"></a>02655                 *centralLambda = CENTRALLAMBDA_H ;
-<a name="l02656"></a>02656             }
-<a name="l02657"></a>02657             <span class="keywordflow">else</span>
-<a name="l02658"></a>02658             {
-<a name="l02659"></a>02659                 *dispersion = DISPERSION_H ;
-<a name="l02660"></a>02660                 *centralLambda = CENTRALLAMBDA_H ;
-<a name="l02661"></a>02661             }
-<a name="l02662"></a>02662         }
-<a name="l02663"></a>02663     }
-<a name="l02664"></a>02664 
-<a name="l02665"></a>02665     <span class="comment">/*if ( *minval + (float)n_rows * *dispersion < *maxval ) </span>
-<a name="l02666"></a>02666 <span class="comment">    {</span>
-<a name="l02667"></a>02667 <span class="comment">        sinfo_msg_error(" given number of rows too small!\n");</span>
-<a name="l02668"></a>02668 <span class="comment">        return NULL ;</span>
-<a name="l02669"></a>02669 <span class="comment">    }*/</span>
-<a name="l02670"></a>02670     <span class="keywordflow">if</span> ( (*maxval - *minval) / *dispersion < (float)cly ) 
-<a name="l02671"></a>02671     {
-<a name="l02672"></a>02672         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" must be something wrong with the wavelength map!\n"</span>);
-<a name="l02673"></a>02673         <span class="keywordflow">return</span> NULL ;
-<a name="l02674"></a>02674     }
-<a name="l02675"></a>02675    
-<a name="l02676"></a>02676     <span class="comment">/* determine the central pixel and the lambda in the first image row */</span>
-<a name="l02677"></a>02677     *n_rows = floor(floor(0.5+(*maxval - *minval) / *dispersion)/2+0.5)*2;
-<a name="l02678"></a>02678     *centralpix = *n_rows / 2 ; 
-<a name="l02679"></a>02679     minLambda  = *centralLambda - *dispersion * (float)*centralpix ;
-<a name="l02680"></a>02680     <span class="comment">/*if ( (minLambda + *dispersion * n_rows) < *maxval ) </span>
-<a name="l02681"></a>02681 <span class="comment">    {</span>
-<a name="l02682"></a>02682 <span class="comment">        sinfo_msg_error(" not enough rows defined \n");</span>
-<a name="l02683"></a>02683 <span class="comment">        return NULL ;</span>
-<a name="l02684"></a>02684 <span class="comment">    }</span>
-<a name="l02685"></a>02685 <span class="comment">    if ( minLambda  > *minval ) </span>
-<a name="l02686"></a>02686 <span class="comment">    {</span>
-<a name="l02687"></a>02687 <span class="comment">        sinfo_msg_error(" not enough rows defined \n");</span>
-<a name="l02688"></a>02688 <span class="comment">        return NULL ;</span>
-<a name="l02689"></a>02689 <span class="comment">    }*/</span>
-<a name="l02690"></a>02690 
-<a name="l02691"></a>02691     <span class="comment">/* allocate memory */</span>
-<a name="l02692"></a>02692     <span class="keywordflow">if</span> ( NULL == ( retImage = cpl_image_new( ilx, *n_rows,CPL_TYPE_FLOAT ) ))
-<a name="l02693"></a>02693     {
-<a name="l02694"></a>02694         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);
-<a name="l02695"></a>02695         <span class="keywordflow">return</span> NULL ;
-<a name="l02696"></a>02696     }
-<a name="l02697"></a>02697     podata=cpl_image_get_data_float(retImage);
-<a name="l02698"></a>02698     olx=cpl_image_get_size_x(retImage);
-<a name="l02699"></a>02699     oly=cpl_image_get_size_y(retImage);
-<a name="l02700"></a>02700     <span class="comment">/* now go through the columns */</span>
-<a name="l02701"></a>02701     retimagecol = cpl_malloc(*n_rows * <span class="keyword">sizeof</span>(retimagecol[0]));
-<a name="l02702"></a>02702     calcolpos = cpl_malloc(*n_rows * <span class="keyword">sizeof</span>(calcolpos[0]));    
-<a name="l02703"></a>02703     <span class="keywordflow">for</span> ( col = 0 ; col < olx ; col++ )
-<a name="l02704"></a>02704     {
-<a name="l02705"></a>02705         <span class="comment">/*------------------------------------------------------------------ </span>
-<a name="l02706"></a>02706 <span class="comment">         * copy the columns of the source image and the wavemap image into</span>
-<a name="l02707"></a>02707 <span class="comment">         * buffer arrays to speed things up</span>
-<a name="l02708"></a>02708 <span class="comment">         */</span>
-<a name="l02709"></a>02709         sum = 0. ;
-<a name="l02710"></a>02710         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02711"></a>02711         {
-<a name="l02712"></a>02712             imagecol[row] = pidata[col + row*ilx] ; 
-<a name="l02713"></a>02713             <span class="keywordflow">if</span> (!isnan(imagecol[row]))
-<a name="l02714"></a>02714             {
-<a name="l02715"></a>02715                 sum += imagecol[row] ;
-<a name="l02716"></a>02716             }
-<a name="l02717"></a>02717             calcol[row]   = pcdata[col + row*clx] ; 
-<a name="l02718"></a>02718         }
-<a name="l02719"></a>02719 
-<a name="l02720"></a>02720         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02721"></a>02721         {
-<a name="l02722"></a>02722             retimagecol[row] = 0. ;
-<a name="l02723"></a>02723             calcolpos[row] = -1;
-<a name="l02724"></a>02724         }
-<a name="l02725"></a>02725 
-<a name="l02726"></a>02726     <span class="keywordflow">for</span> ( row=0 ; row < cly ; row++)
-<a name="l02727"></a>02727     {
-<a name="l02728"></a>02728         temprow = (calcol[row]- minLambda)/ *dispersion;
-<a name="l02729"></a>02729         <span class="keywordflow">if</span> (temprow >= 0 && temprow < oly)
-<a name="l02730"></a>02730             calcolpos[(int) temprow]  = row;
-<a name="l02731"></a>02731     }
-<a name="l02732"></a>02732         
-<a name="l02733"></a>02733     zeroind = 0 ;
-<a name="l02734"></a>02734        
-<a name="l02735"></a>02735 
-<a name="l02736"></a>02736         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02737"></a>02737         {
-<a name="l02738"></a>02738             lambda = minLambda + *dispersion * (float) row ;
-<a name="l02739"></a>02739       
-<a name="l02740"></a>02740             <span class="comment">/*--------------------------------------------------------------- </span>
-<a name="l02741"></a>02741 <span class="comment">             * lambda must lie between the two available wavelength extremes</span>
-<a name="l02742"></a>02742 <span class="comment">             * otherwise the image pixels are set to ZERO </span>
-<a name="l02743"></a>02743 <span class="comment">             */</span>
-<a name="l02744"></a>02744             <span class="keywordflow">if</span> ( row < cly )
-<a name="l02745"></a>02745             {
-<a name="l02746"></a>02746                 <span class="keywordflow">if</span> ( isnan(calcol[row]) )
-<a name="l02747"></a>02747                 {
-<a name="l02748"></a>02748                     zeroind = 1 ;
-<a name="l02749"></a>02749                 } 
-<a name="l02750"></a>02750             }
-<a name="l02751"></a>02751 
-<a name="l02752"></a>02752             <span class="keywordflow">if</span> ( (lambda < calcol[0]) || 
-<a name="l02753"></a>02753                  (lambda > calcol[(cly)-1]) || zeroind == 1 )
-<a name="l02754"></a>02754             {
-<a name="l02755"></a>02755                 retimagecol[row] = ZERO ;
-<a name="l02756"></a>02756                 continue ;
-<a name="l02757"></a>02757             }
-<a name="l02758"></a>02758             <span class="comment">/*testrow = 0 ; </span>
-<a name="l02759"></a>02759 <span class="comment">            while ( lambda > calcol[testrow] )</span>
-<a name="l02760"></a>02760 <span class="comment">            {</span>
-<a name="l02761"></a>02761 <span class="comment">                testrow++ ;</span>
-<a name="l02762"></a>02762 <span class="comment">            }*/</span>
-<a name="l02763"></a>02763         <span class="keywordflow">if</span> (calcolpos[row]==-1) {
-<a name="l02764"></a>02764                 <span class="keywordflow">if</span>(row>= (*n_rows-1)) calcolpos[row] = calcolpos[row-1];
-<a name="l02765"></a>02765                 <span class="keywordflow">if</span>(row<  (*n_rows-1)) calcolpos[row] = calcolpos[row+1];
-<a name="l02766"></a>02766         }
-<a name="l02767"></a>02767         <span class="keywordflow">if</span>(calcolpos[row]>0) {
-<a name="l02768"></a>02768           <span class="keywordflow">if</span> (lambda-calcol[calcolpos[row]-1]==0.) {
-<a name="l02769"></a>02769         calcolpos[row]=calcolpos[row]-1;
-<a name="l02770"></a>02770           }
-<a name="l02771"></a>02771         }
-<a name="l02772"></a>02772         testrow = calcolpos[row];
-<a name="l02773"></a>02773 
-<a name="l02774"></a>02774             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l02775"></a>02775 <span class="comment">             * at this point calcol[testrow-1] < lambda <= calcol[testrow] </span>
-<a name="l02776"></a>02776 <span class="comment">             * now determine the box position in which the polint fit is </span>
-<a name="l02777"></a>02777 <span class="comment">               carried through.</span>
-<a name="l02778"></a>02778 <span class="comment">             * the half width of the box is half the number of fit parameters.</span>
-<a name="l02779"></a>02779 <span class="comment">             * Now we determine the start position of the fitting box and treat</span>
-<a name="l02780"></a>02780 <span class="comment">             * the special case of being near the sinfo_edge.</span>
-<a name="l02781"></a>02781 <span class="comment">             */</span>
-<a name="l02782"></a>02782 
-<a name="l02783"></a>02783             <span class="keywordflow">if</span> ( n_params % 2 == 0 )
-<a name="l02784"></a>02784             {
-<a name="l02785"></a>02785                 half_width = (int)(n_params/2) - 1 ;
-<a name="l02786"></a>02786             }
-<a name="l02787"></a>02787             <span class="keywordflow">else</span>
-<a name="l02788"></a>02788             {
-<a name="l02789"></a>02789                 half_width = (int)(n_params/2) ;
-<a name="l02790"></a>02790             }
-<a name="l02791"></a>02791 
-<a name="l02792"></a>02792 
-<a name="l02793"></a>02793             <span class="keywordflow">if</span> ( isnan(imagecol[testrow]) )
-<a name="l02794"></a>02794             {
-<a name="l02795"></a>02795                 <span class="keywordflow">for</span> ( i = row-half_width ; i < row-half_width+n_params ; i++ )
-<a name="l02796"></a>02796                 { 
-<a name="l02797"></a>02797                     <span class="keywordflow">if</span> (i < 0) continue ;
-<a name="l02798"></a>02798                     <span class="keywordflow">if</span> ( i >= oly ) continue  ;
-<a name="l02799"></a>02799                     retimagecol[i] = ZERO ;
-<a name="l02800"></a>02800                 }
-<a name="l02801"></a>02801                 imagecol[testrow] = 0. ;
-<a name="l02802"></a>02802             }
-<a name="l02803"></a>02803 
-<a name="l02804"></a>02804         }
-<a name="l02805"></a>02805 
-<a name="l02806"></a>02806         <span class="comment">/* now loop over the rows and establish the lambda for each row */</span>
-<a name="l02807"></a>02807         new_sum = 0. ;
-<a name="l02808"></a>02808         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02809"></a>02809         {
-<a name="l02810"></a>02810             <span class="keywordflow">if</span> ( isnan(retimagecol[row]) )
-<a name="l02811"></a>02811             {
-<a name="l02812"></a>02812                 continue ;
-<a name="l02813"></a>02813             }
-<a name="l02814"></a>02814         lambda = minLambda + *dispersion * (float) row ;
-<a name="l02815"></a>02815       
-<a name="l02816"></a>02816             <span class="comment">/*--------------------------------------------------------------- </span>
-<a name="l02817"></a>02817 <span class="comment">             * lambda must lie between the two available wavelength extremes</span>
-<a name="l02818"></a>02818 <span class="comment">             * otherwise the image pixels are set to ZERO </span>
-<a name="l02819"></a>02819 <span class="comment">             */</span>
-<a name="l02820"></a>02820             <span class="keywordflow">if</span> ( (lambda < calcol[0]) || (lambda > calcol[(cly)-1]) ) 
-<a name="l02821"></a>02821             {
-<a name="l02822"></a>02822                 retimagecol[row] = ZERO ;
-<a name="l02823"></a>02823                 continue ;
-<a name="l02824"></a>02824             }
-<a name="l02825"></a>02825             <span class="comment">/*testrow = 0 ; </span>
-<a name="l02826"></a>02826 <span class="comment">            while ( lambda > calcol[testrow] )</span>
-<a name="l02827"></a>02827 <span class="comment">            {</span>
-<a name="l02828"></a>02828 <span class="comment">                testrow++ ;</span>
-<a name="l02829"></a>02829 <span class="comment">            }*/</span>
-<a name="l02830"></a>02830         <span class="keywordflow">if</span> (calcolpos[row]==-1) {
-<a name="l02831"></a>02831                <span class="keywordflow">if</span>(row >= (*n_rows-1)) calcolpos[row] = calcolpos[row-1];
-<a name="l02832"></a>02832                <span class="keywordflow">if</span>(row <  (*n_rows-1)) calcolpos[row] = calcolpos[row+1];
-<a name="l02833"></a>02833         }
-<a name="l02834"></a>02834 
-<a name="l02835"></a>02835         testrow = calcolpos[row];
-<a name="l02836"></a>02836 
-<a name="l02837"></a>02837             <span class="comment">/*--------------------------------------------------------------</span>
-<a name="l02838"></a>02838 <span class="comment">             * at this point calcol[testrow-1] < lambda <= calcol[testrow] </span>
-<a name="l02839"></a>02839 <span class="comment">             * now determine the box position in which the polynomial </span>
-<a name="l02840"></a>02840 <span class="comment">               interpolation is carried through.</span>
-<a name="l02841"></a>02841 <span class="comment">             * the half width of the box is half the number of fit parameters.</span>
-<a name="l02842"></a>02842 <span class="comment">             * Now we determine the start position of the fitting box and treat</span>
-<a name="l02843"></a>02843 <span class="comment">             * the special case of being near the sinfo_edge.</span>
-<a name="l02844"></a>02844 <span class="comment">             */</span>
-<a name="l02845"></a>02845 
-<a name="l02846"></a>02846             <span class="keywordflow">if</span> ( n_params % 2 == 0 )
-<a name="l02847"></a>02847             {
-<a name="l02848"></a>02848                 half_width = (int)(n_params/2) - 1 ;
-<a name="l02849"></a>02849             }
-<a name="l02850"></a>02850             <span class="keywordflow">else</span>
-<a name="l02851"></a>02851             {
-<a name="l02852"></a>02852                 half_width = (int)(n_params/2) ;
-<a name="l02853"></a>02853             }
-<a name="l02854"></a>02854 
-<a name="l02855"></a>02855             firstpos   = testrow - half_width ;
-<a name="l02856"></a>02856             <span class="keywordflow">if</span> ( firstpos < 0 )
-<a name="l02857"></a>02857             {
-<a name="l02858"></a>02858                 firstpos = 0 ;
-<a name="l02859"></a>02859             }
-<a name="l02860"></a>02860             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( firstpos > ((cly)-n_params) )
-<a name="l02861"></a>02861             {
-<a name="l02862"></a>02862                firstpos = cly - n_params ;
-<a name="l02863"></a>02863             }
-<a name="l02864"></a>02864             <span class="keywordflow">if</span> ( isnan(imagecol[firstpos]) )
-<a name="l02865"></a>02865             {
-<a name="l02866"></a>02866                 retimagecol[row] = ZERO ;
-<a name="l02867"></a>02867                 continue ;
-<a name="l02868"></a>02868             }
-<a name="l02869"></a>02869             
-<a name="l02870"></a>02870 
-<a name="l02871"></a>02871             <span class="comment">/* we must rescale the x-values (smaller than 1) </span>
-<a name="l02872"></a>02872 <span class="comment">               for the fitting routine */</span>
-<a name="l02873"></a>02873             dif = calcol[firstpos+n_params-1] - calcol[firstpos] ;
-<a name="l02874"></a>02874             <span class="keywordflow">for</span> ( i = 0 ; i < n_params ; i++ )
-<a name="l02875"></a>02875             {
-<a name="l02876"></a>02876             x_renorm[i] = (calcol[firstpos + i] - calcol[firstpos]) / dif ;
-<a name="l02877"></a>02877         }
-<a name="l02878"></a>02878         
-<a name="l02879"></a>02879            
-<a name="l02880"></a>02880             lambda_renorm = ( lambda - calcol[firstpos] ) / dif ; 
-<a name="l02881"></a>02881         
-<a name="l02882"></a>02882         imageptr = &imagecol[firstpos] ;
-<a name="l02883"></a>02883         
-<a name="l02884"></a>02884         flag = 0;
-<a name="l02885"></a>02885         poly=sinfo_new_nev_ille(x_renorm, imageptr, 
-<a name="l02886"></a>02886                                     n_params-1, lambda_renorm, &flag);
-<a name="l02887"></a>02887         
-<a name="l02888"></a>02888             new_sum += poly ;
-<a name="l02889"></a>02889             retimagecol[row] = poly ; 
-<a name="l02890"></a>02890     }
-<a name="l02891"></a>02891     
-<a name="l02892"></a>02892         <span class="comment">/* now renorm the total flux */</span>
-<a name="l02893"></a>02893         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02894"></a>02894         {
-<a name="l02895"></a>02895             <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum = 1. ;
-<a name="l02896"></a>02896             <span class="keywordflow">if</span> ( isnan(retimagecol[row]) )
-<a name="l02897"></a>02897             {
-<a name="l02898"></a>02898                 podata[col+row*olx] = ZERO ;
-<a name="l02899"></a>02899             }
-<a name="l02900"></a>02900             <span class="keywordflow">else</span>
-<a name="l02901"></a>02901             {
-<a name="l02902"></a>02902                 <span class="comment">/* rescaling is commented out because it delivers wrong results</span>
-<a name="l02903"></a>02903 <span class="comment">                   in case of appearance of blanks or bad pixels */</span>
-<a name="l02904"></a>02904                 podata[col+row*olx] = retimagecol[row] <span class="comment">/* * sum/new_sum*/</span> ;
-<a name="l02905"></a>02905             }
-<a name="l02906"></a>02906         }
-<a name="l02907"></a>02907 
-<a name="l02908"></a>02908     }
-<a name="l02909"></a>02909     cpl_free(retimagecol);
-<a name="l02910"></a>02910     cpl_free(calcolpos);
-<a name="l02911"></a>02911     cpl_free(imagecol) ;
-<a name="l02912"></a>02912     cpl_free(calcol) ;
-<a name="l02913"></a>02913     cpl_free(x_renorm) ;
-<a name="l02914"></a>02914     
-<a name="l02915"></a>02915     <span class="keywordflow">return</span> retImage ;
-<a name="l02916"></a>02916 }
-<a name="l02917"></a>02917 
-<a name="l02919"></a>02919 <span class="comment">/*___oOo___*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wave_calibration.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* </span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  13/07/00  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*     sinfo_wave_calibration.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*     routines needed for wavelength calibration</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">* </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*   1) FitParams ** sinfo_new_fit_params( int n_params )</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*   2) void sinfo_new_destroy_fit_params ( FitParams ** params )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*   3) void sinfo_new_dump_fit_params_to_ascii(FitParams ** params,</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">                                               const char * filename )</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*   4) void sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, </span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                                                 char * filename )</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*   5) int sinfo_new_find_lines(cpl_image * lineImage, </span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                     float    * wave_position, </span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*                     float    * wave_intensity,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                     int        n_lines, </span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*                     int     ** row_clean,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                     float   ** wavelength_clean,</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*                     float      beginWave, </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                     float      dispersion,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                     float      mindiff, </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*                     int        halfWidth,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                     int      * n_found_lines,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                     float      sigma,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*                     int      * sum_lines )</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*   6) int sinfo_new_read_list( char * listname, </span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                                float * lineCenter, </span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                                float * lineIntensity )</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*   7) int sinfo_new_line_fit ( cpl_image  *  mergedImage, </span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                    FitParams *  par,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                    float        fwhm,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*                    int          lineInd,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                    int          column, </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*                    int          halfWidth, </span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                    int          lineRow,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                    float        min_amplitude )</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*   8) int sinfo_new_fit_lines ( cpl_image  *  line_image, </span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*                     FitParams ** allParams,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*                     float        fwhm,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                     int       *  n_lines, </span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*                     int       ** row,</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                     float     ** wavelength, </span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*                     int          width,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*                     float        min_amplitude ) </span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*   9) float sinfo_new_polyfit( FitParams ** par, </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*                     int          column,</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*                     int          n_lines,</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*                     int          n_rows,</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*                     float        dispersion,</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">*                     float        max_residual,</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*                     float *      acoefs, </span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*                     float *      dacoefs, </span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*                     int   *      n_reject,</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*                     int          n_fitcoefs )</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*   10) float sinfo_new_coefs_cross_fit ( int      n_columns,</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*                            float *  acoefs,</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*                            float *  dacoefs, </span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*                            float *  bcoefs,</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*                            int      n_fitcoefs,</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*                            float    sigma_factor )</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*  11) cpl_image * sinfo_new_wave_map( cpl_image * lineImage,</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*                          float   ** bcoefs,</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*                          int        n_a_fitcoefs,</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*                          int        n_b_fitcoefs,</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*                          float    * wavelength,</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*                          float    * intensity,</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*                          int        n_lines,</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*                          int        magFactor,</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*                          int      * bad_column_mask,</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*                          int        n_bad_columns )</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*  12) int sinfo_new_wavelength_calibration( cpl_image   * image, </span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*                                 FitParams ** par ,</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*                                 float     ** bcoefs,</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*                                 float      * wave,</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*                                 int          n_lines,</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*                                 int       ** row_clean,</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*                                 float     ** wavelength_clean,</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*                                 int        * n_found_lines,</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*                                 float        dispersion,</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*                                 int          halfWidth,</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*                                 float        minAmplitude,</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*                                 float        max_residual,</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*                                 float        fwhm,</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*                                 int          n_a_fitcoefs,</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">*                                 int          n_b_fitcoefs,</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="comment">*                                 float        sigmaFactor )</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="comment">*  13) cpl_image * sinfo_new_convolve_image_by_gauss( cpl_image * lineImage,</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">*                                       int        hw )</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> <span class="comment">*  14) cpl_image * sinfo_new_defined_resampling( cpl_image * image,</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">*                                    cpl_image * calimage,</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">*                                    int        n_params,</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">*                                    int        n_rows,</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">*                                    double   * dispersion,</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">*                                    float    * minval,</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">*                                    float    * maxval,</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">*                                    double   * centralLambda,</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">*                                    int      * centralpix )</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">*   1) allocates memory for a new sinfo_vector of </span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">*      FitParams data structures</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">*   2) frees memory of a sinfo_vector of FitParams data structures</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment">*   3) dumps the fit parameters to an ASCII file</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">*   4) dumps ASCII information to an allocated FitParams data structure</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">*   5) determines the pixel shift between the line list </span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">*      and the real image by using the beginning wavelength</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">*      on the detector and the dispersion estimate.</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">*   6) reads the line data of the calibration lamps</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment">*   7) fits a sinfo_gaussian to a 1-dimensional slice of an image, </span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment">*      this routine uses the routine sinfo_new_lsqfit_c as a non-linear</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> <span class="comment">*      least square fit method (Levenberg-Marquardt).               </span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> <span class="comment">*   8) calculates and stores the fit parameters of the neon </span></div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="comment">*      emission lines of a neon frame by using the sinfo_linefit </span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="comment">*      routine.</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> <span class="comment">*   9) fits a second order polynom </span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="comment">*      lambda[i] = a1 + a2*pos[i] + a3*pos[i]^2</span></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> <span class="comment">*      to determine the connection between the listed wave-</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> <span class="comment">*      length values and the gauss-fitted positions for each</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">*      image column using the singular value decomposition </span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">*      method. </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">*  10) Fits the each single parameter of the three fit parameters </span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">*      acoefs from sinfo_polyfit through the image columns</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">*  11) this routine determines a wavelength calibration map </span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">*      frame associating a wavelength value to each pixel</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">*      by using the fit coefficients determined before.</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="comment">*  12) this routine takes an image from a calibration</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="comment">*      emission lamp and delivers the fit coefficients of  </span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> <span class="comment">*      a polynomial fit across the columns </span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">*      of the coefficients of the polynomial line position</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> <span class="comment">*      fits as output. Furthermore it delivers an array of the fit parameters</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span> <span class="comment">*      as output. This routine expects Nyquist sampled spectra </span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">*     (either an interleaved image or an image convolved with an </span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> <span class="comment">*      appropriate function in spectral direction)</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span> <span class="comment">*  13) convolves an emission line image with a sinfo_gaussian</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span> <span class="comment">*      with user given integer half width by using the eclipse </span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> <span class="comment">*      routine sinfo_function1d_filter_lowpass().</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">*  14) Given a source image and a corresponding wavelength</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment">*      calibration file this routine produces an image</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">*      in which elements in a given row are associated</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">*      with a single wavelength. It thus corrects for </span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">*      the wavelength shifts between adjacent elements</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">*      in the rows of the input image. The output image</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">*      is larger in the wavelength domain than the input</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> <span class="comment">*      image with pixels in each column corresponding to </span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> <span class="comment">*      undefined (blank, ZERO) values. The distribution</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> <span class="comment">*      of these undefined values varies from column to</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="comment">*      column. The input image is resampled at discrete</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="comment">*      wavelength intervals using a polynomial interpolation</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> <span class="comment">*      routine. </span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> <span class="comment">*      The wavelength intervals (dispersion) and the </span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span> <span class="comment">*      central wavelength are defined and stable for each</span></div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> <span class="comment">*      used grating. Thus, each row has a defined wavelength</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span> <span class="comment">*      for each grating. Only the number of rows can be </span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> <span class="comment">*      changed by the user. </span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> <span class="comment">*   RETURN VALUES </span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="comment">*   CAUTIONS </span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> <span class="comment">*   BUGS   </span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span> </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> </div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> <span class="preprocessor">#include "sinfo_svd.h"</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> FitParams ** sinfo_new_fit_params( <span class="keywordtype">int</span> n_params )</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span> {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     FitParams ** new_params =NULL;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     FitParams  * temp_params =NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     <span class="keywordtype">float</span> * temp_fit_mem =NULL;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     <span class="keywordtype">float</span> * temp_derv_mem=NULL;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     <span class="keywordflow">if</span> ( n_params <= 0 )</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of lines to fit\n"</span>) ;</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>     <span class="keywordflow">if</span> (NULL==(new_params=(FitParams **) cpl_calloc ( n_params , </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                                          <span class="keyword">sizeof</span> (FitParams*) ) ) )</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>     }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">if</span> ( NULL == (temp_params = cpl_calloc ( n_params , <span class="keyword">sizeof</span> (FitParams) ) ) )</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>     }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="keywordflow">if</span> ( NULL == (temp_fit_mem = (<span class="keywordtype">float</span> *) cpl_calloc( n_params*MAXPAR, </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                                      <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ) )</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>     {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     <span class="keywordflow">if</span> ( NULL == (temp_derv_mem   = </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>              (<span class="keywordtype">float</span> *) cpl_calloc( n_params*MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ) )</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     {</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     }</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_params ; i ++ )</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         new_params[i] = temp_params+i;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         new_params[i] -> fit_par    = temp_fit_mem+i*MAXPAR;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>         new_params[i] -> derv_par   = temp_derv_mem+i*MAXPAR;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         new_params[i] -> column     = 0 ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>         new_params[i] -> line       = 0 ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>         new_params[i] -> wavelength = 0. ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>         new_params[i] -> n_params   = n_params ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     }</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> </div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordflow">return</span> new_params ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="keywordtype">void</span> sinfo_new_destroy_fit_params ( FitParams *** params )</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> { </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     <span class="keywordflow">if</span> ( *params == NULL )</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>         return ;</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     cpl_free ( (*params)[0] -> fit_par ) ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     (*params)[0] -> fit_par=NULL;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     cpl_free ( (*params)[0] -> derv_par ) ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     (*params)[0] -> derv_par=NULL;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     cpl_free ( (*params)[0] ) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>     (*params)[0]=NULL;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     cpl_free ( (*params) ) ;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     (*params)=NULL;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span> }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> <span class="keywordtype">void</span> sinfo_new_dump_fit_params_to_ascii ( FitParams ** params, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename )</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> {</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     FILE * fp ;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     <span class="keywordtype">int</span>    i ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     <span class="keywordflow">if</span> ( NULL == params )</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters available!\n"</span>) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         return ;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     }</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordflow">if</span> ( NULL == filename )</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no filename available!\n"</span>) ;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         return ;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"w"</span> ) ) )</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     {</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, filename) ;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>         return ;</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     }</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <span class="keywordflow">for</span> ( i = 0 ; i < params[0] -> n_params ; i++ )</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>         fprintf(fp, <span class="stringliteral">"%d %d %d %f %f %f %f %f %f %f %f %f\n"</span>, </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                      params[i]->n_params, </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                      params[i]->column, </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                      params[i]->line, </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                      params[i]->wavelength, </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                      params[i]->fit_par[0], </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                      params[i]->fit_par[1], </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                      params[i]->fit_par[2], </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                      params[i]->fit_par[3],</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                      params[i]->derv_par[0], </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                      params[i]->derv_par[1], </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                      params[i]->derv_par[2], </div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                      params[i]->derv_par[3] ) ; </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>     }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>     fclose(fp) ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> }</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, <span class="keywordtype">char</span> * filename )</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> {</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>     FILE * fp ;</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordtype">int</span> i ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>     <span class="keywordflow">if</span> ( NULL == params )</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>     {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters available!\n"</span>) ;</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>         return ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>     }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span> </div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>     <span class="keywordflow">if</span> ( NULL == filename )</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>     {</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no filename available!\n"</span>) ;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         return ;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>     }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( filename, <span class="stringliteral">"r"</span> ) ) )</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, filename) ;</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         return ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>     }</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>     </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     <span class="keywordflow">for</span> ( i = 0 ; i < params[0]->n_params ; i++ )</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>     {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         fscanf(fp, <span class="stringliteral">"%d %d %d %f %f %f %f %f %f %f %f %f\n"</span>, </div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                     &params[i]->n_params, </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>                     &params[i]->column, </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                     &params[i]->line, </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>                     &params[i]->wavelength, </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>                     &params[i]->fit_par[0], </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>                     &params[i]->fit_par[1], </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>                     &params[i]->fit_par[2], </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>                     &params[i]->fit_par[3],</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>                     &params[i]->derv_par[0], </div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>                     &params[i]->derv_par[1], </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>                     &params[i]->derv_par[2], </div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>                     &params[i]->derv_par[3] ) ; </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     }</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     fclose(fp) ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> }</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span> </div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span> <span class="keywordtype">int</span> sinfo_new_find_lines(cpl_image * lineImage, </div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                <span class="keywordtype">float</span>    * wave_position, </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                <span class="keywordtype">float</span>    * wave_intensity,</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>                <span class="keywordtype">int</span>        n_lines, </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>                <span class="keywordtype">int</span>     ** row_clean,</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>                <span class="keywordtype">float</span>   ** wavelength_clean,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                <span class="keywordtype">float</span>      beginWave, </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                <span class="keywordtype">float</span>      dispersion1,</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>                <span class="keywordtype">float</span>      dispersion2,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>                <span class="keywordtype">float</span>      mindiff, </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>                <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>                <span class="keywordtype">int</span>      * n_found_lines,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                <span class="keywordtype">float</span>      sigma,</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                <span class="keywordtype">int</span>      * sum_lines )</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     <span class="keywordtype">int</span>     ** row ;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>     <span class="keywordtype">float</span>   ** wavelength ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     <span class="keywordtype">float</span> buf1, buf2 ;</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     <span class="keywordtype">float</span> meanval ;</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>     <span class="keywordtype">float</span> colmedian ;</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     <span class="keywordtype">float</span> * column, * tempcol ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     <span class="keywordtype">float</span> * lines ;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>     <span class="keywordtype">float</span> * conv_lines ;</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>     <span class="keywordtype">float</span> * wave_buffer ;</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>     <span class="keywordtype">float</span> * wave_mem;</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>     <span class="keywordtype">int</span>   * dummy_row ;</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>     <span class="keywordtype">int</span> i, j, k, m ;</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>     <span class="keywordtype">int</span> position ;</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>     <span class="keywordtype">int</span> gmax, gmin ;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>     <span class="keywordtype">int</span> col ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     <span class="keywordtype">int</span> * row_mem;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>     <span class="keywordtype">float</span> sum ;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     <span class="keywordtype">float</span> angst ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span> </div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     {</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given\n"</span>) ;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     lx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     ly=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>     pdata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span> </div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     <span class="keywordflow">if</span> ( n_lines <= 0 || NULL == wave_position ) </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>     {</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no line list given\n"</span>) ;</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>     }</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     <span class="keywordflow">if</span> ( NULL == wave_intensity ) </div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no intensity list given\n"</span>) ;</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>     }</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>      </div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>     <span class="keywordflow">if</span> ( dispersion1 == 0. )</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>     {</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong dispersion given\n"</span>) ;</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>     }</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>    </div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>     <span class="keywordflow">if</span> ( row_clean == NULL )</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     {</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" row_clean array is not allocated\n"</span>) ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     }</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>     <span class="keywordflow">if</span> ( wavelength_clean == NULL )</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     {</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelength_clean array is not allocated\n"</span>) ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>     }</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>     <span class="keywordflow">if</span> ( beginWave <= 0. )</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>     {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" impossible beginWave given\n"</span>) ;</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     }</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     <span class="keywordflow">if</span> ( mindiff < -100. )</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>     {</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong mindiff value\n"</span>) ;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     }</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>     <span class="keywordflow">if</span> ( halfWidth <= 0 )</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>     {</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width of fit box given\n"</span>) ;</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>     }</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span> </div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>     <span class="keywordflow">if</span> ( n_found_lines == NULL )</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>     {</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" n_found_lines not allocated\n"</span>) ;</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>     }</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span> </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>     <span class="keywordflow">if</span> ( sigma <= 0. || sigma >= ly / 2)</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>     {</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong sigma given\n"</span>) ;</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>     }</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>     </div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>     row        = (<span class="keywordtype">int</span>**) cpl_calloc( lx, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>*)) ;</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>     wavelength = (<span class="keywordtype">float</span>**) cpl_calloc( lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)) ;</div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>     row_mem = cpl_calloc( n_lines*lx, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>     wave_mem = cpl_calloc( n_lines*lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>     <span class="keywordflow">for</span> ( i = 0 ; i <lx ; i++ )</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>     {</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>         row[i] = row_mem + i*n_lines;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>         wavelength[i] = wave_mem + i*n_lines;</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>     }</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span> </div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>     <span class="comment">/* find if the wavelength is given in microns, nanometers or Angstroem */</span></div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>     <span class="keywordflow">if</span> ( wave_position[0] > 10000. )</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>     {</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>     <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>         angst = 10000. ;</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>     }</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wave_position[0] > 1000. && wave_position[0] < 10000. )</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>     {</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>     <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>     angst = 1000. ;</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>     }</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     {</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>     <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     angst = 1. ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     }</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span> </div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>     <span class="comment">/*----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> <span class="comment">     * compute the mean and median intensity value in the given </span></div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span> <span class="comment">       column and determine if there is enough intensity in the column to </span></div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span> <span class="comment">       do the correlation</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     tempcol = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>     *sum_lines = 0 ;</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>     buf1 = 0. ;</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>     buf2 = 0. ;</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>     column      = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>     lines       = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>     conv_lines  = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>     wave_buffer = (<span class="keywordtype">float</span>*) cpl_calloc(ly, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>     dummy_row   = (<span class="keywordtype">int</span>*)   cpl_calloc(n_lines, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span> </div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>     <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>     {</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>         n_found_lines[col] = 0 ;</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>         sum = 0. ;</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>         {</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>             <span class="keywordflow">if</span> (isnan(pdata[col + i*lx]) )</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>             {</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                 tempcol[i] = 0. ;</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>                 continue ;</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>             }</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span> </div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>         sum = sum + pdata[col + i*lx] ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>         tempcol[i] = pdata[col + i*lx];</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>         }</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>         meanval = sum / ly ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>         <span class="comment">/* lets assume the sinfo_new_median is the background */</span></div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>         colmedian =  sinfo_new_median ( tempcol, ly);</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>         <span class="keywordflow">if</span> ( meanval - colmedian < mindiff )</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         {</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" sorry, not enough intensity "</span></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>                               <span class="stringliteral">"(mean: %f, diff: %f) in image column: "</span></div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>                                <span class="stringliteral">"%d to correlate emission lines\n"</span>, </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>                                 meanval, meanval - colmedian,col) ;</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>         continue ;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     }</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span> </div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>           {</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>       conv_lines[i]=0;</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>       wave_buffer[i]=0;</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     }</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_lines ; i++ )</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>     {</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>       dummy_row[i] = 0;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     }</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span> </div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         <span class="comment">/* go through the column with index col */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i++ )</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             <span class="keywordflow">if</span> ( isnan(pdata[col+i*lx]) )</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>             {</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>                 column[i] = 0. ;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>             }</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>             {</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>                 column[i] = pdata[col + i*lx] ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>             }</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span> </div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>             <span class="comment">/* determine the line position on the pixels */</span></div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>             <span class="comment">/*lines[i] = (dispersion * (float) i + beginWave) * angst ;*/</span> </div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>             lines[i] = (dispersion1 * (float) (i-ly/2) + </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>                         dispersion2 * (float) (i-ly/2) * </div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>                                       (float) (i-ly/2) + </div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>                                               beginWave) * angst ; </div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span> </div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span> <span class="comment">             * find the nearest line position for each wavelength in the list </span></div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span> <span class="comment">             * and set this position to the given line intensity as weight </span></div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>             <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ )</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>             {</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>                 buf1 = 0. ;</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>                 buf2 = 0. ;</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>                 <span class="keywordflow">if</span> ( (wave_position[j] >= (lines[i] - </div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>                       fabs(dispersion1)/2.*angst)) && </div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>                      (wave_position[j] <= (lines[i] + </div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>                       fabs(dispersion1)/2.*angst)) ) </div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>                 {</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>                     buf1 = wave_intensity[j] ; <span class="comment">/* set the given line intensity </span></div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span> <span class="comment">                                                  as weight */</span></div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>                     buf2 = wave_position[j] ;</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>                     break ;</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>                 }</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>             }</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>             lines[i] = buf1 ;</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>             wave_buffer[i] = buf2 ; <span class="comment">/* get the wavelength associated </span></div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span> <span class="comment">                                       with the corresponding </span></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span> <span class="comment">                                           found emission line */</span></div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>     </div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>             <span class="comment">/* convolve the artificial spectrum by a Gaussian </span></div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span> <span class="comment">               with given sigma value */</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>             <span class="keywordflow">if</span> ( lines[i] != 0. )</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>             {</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>                 <span class="comment">/* consider only +- 2 sigma */</span></div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>                 gmin = sinfo_new_nint((<span class="keywordtype">float</span>) i - 2. * sigma) ;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>                 gmax = sinfo_new_nint((<span class="keywordtype">float</span>) i + 2. * sigma) ;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span> </div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>                 <span class="comment">/* be aware of image margins */</span></div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>                 <span class="keywordflow">if</span> ( gmin < 0 )</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>                 {</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>                     gmin = 0 ;</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>                 }</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>                 <span class="keywordflow">if</span> ( gmax >= ly )</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>                 {</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>                     gmax = ly - 1 ;</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>                 } </div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>                 <span class="keywordflow">for</span> ( j = gmin ; j <= gmax ; j++ )</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>                 {</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>                     conv_lines[j] += </div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                         lines[i] * exp( (<span class="keywordtype">double</span>)( -0.5*((j - i)*(j - i)))/</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                                         (<span class="keywordtype">double</span>) (sigma*sigma) ) ; </div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>                 }</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>             }</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>         }</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span> </div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>         <span class="comment">/* do the cross sinfo_new_correlitioation */</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>         position = INT32_MAX ;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>         position = sinfo_new_correlation(column+5, conv_lines+5, ly-10 ) ; </div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>         <span class="keywordflow">if</span> ( abs (position) > ly / 4 )</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>         {</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" sorry, shift of artificial data relative to"</span></div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                               <span class="stringliteral">" image (%d) seems to be too high in column: %d"</span>,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                               position, col) ;</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>             continue ;</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>         }</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>         <span class="comment">//AMO we initialize this to -999 and later check that it is not</span></div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>         <span class="comment">//-999 to prevent an invalid read out due to the fact that not</span></div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>         <span class="comment">//all elements of row are filled by the the loop below</span></div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ ) {</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>           row[col][j] = -999;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     }</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span> </div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>         <span class="comment">//The following loop does not fill all elements</span></div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>         j = 0 ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ly ; i ++ )</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>         {</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>             <span class="keywordflow">if</span> ( lines[i] != 0.0 )</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>             {</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>                 <span class="keywordflow">if</span> ( (i - position) >= 0 && (i - position) < ly )</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>                 {</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>                     row[col][j] = i - position ;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>                     <span class="comment">/* get the wavelength corresponding to </span></div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> <span class="comment">                       found line row index */</span></div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>                     wavelength[col][j] = wave_buffer[i] / angst ;</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>                     j++ ;</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>                 }</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>             }</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>         }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span> </div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>         <span class="comment">/* ------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> <span class="comment">         *  determine the row_clean array, that means, take only the row </span></div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span> <span class="comment">            values if the distance between adjacent lines is large enough </span></div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span> <span class="comment">            for the fit</span></div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="comment">//sinfo_msg("lx=%d",lx);</span></div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>         <span class="keywordflow">for</span> ( k = 1 ; k <= j && k<(lx-1); k ++ )</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>         {</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>             <span class="keywordflow">if</span> (dummy_row[k-1] != -1)</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>             {</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>                 dummy_row[k-1] = row[col][k-1] ;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>             }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>             <span class="keywordflow">if</span> ( (row[col][k] - row[col][k-1]) <= 2*halfWidth )</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>             {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>                 dummy_row[k-1] = -1 ;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         <span class="keywordflow">if</span> (k<n_lines) {</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>                   dummy_row[k]   = -1 ;</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>         }</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>             }</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>             <span class="comment">/* the following gives invalid read size 4: check that k+1<lx */</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>             </div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>             <span class="comment">//sinfo_msg("col=%d k=%d row1=%d row2=%d",</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>             <span class="comment">//           col,k,row[col][k+1],row[col][k]);</span></div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>             <span class="keywordflow">if</span> ( (row[col][j] != -999) && </div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>                  (row[col][k+1] - row[col][k]) <= 2*halfWidth)</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>             {</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>           <span class="keywordflow">if</span> (k<n_lines) {</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>                   dummy_row[k]   = -1 ;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>           }</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>           <span class="keywordflow">if</span> (k+1<n_lines) {</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>                   dummy_row[k+1] = -1 ;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>           }</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>             }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>         }</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span> </div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>         m = 0 ;</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         <span class="keywordflow">for</span> ( k = 0 ; k < j ; k ++ )</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         {</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>             <span class="keywordflow">if</span> ( dummy_row[k] != -1 && dummy_row[k] != 0 )</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>             {</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>                 row_clean[col][m] = dummy_row[k] ;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>                 wavelength_clean[col][m] = wavelength[col][k] ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>                 m ++ ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>             }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>         }</div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span> </div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>         n_found_lines[col] = m ;</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span> </div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         *sum_lines += n_found_lines[col] ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     }</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     cpl_free (column) ;</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     cpl_free (lines) ;</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>     cpl_free (conv_lines) ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>     cpl_free (dummy_row) ;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     cpl_free (wave_buffer) ;</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span>     cpl_free (row_mem) ;</div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     cpl_free (wave_mem) ;</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     cpl_free (tempcol) ;</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>     cpl_free (row) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>     cpl_free (wavelength) ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span> </div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span> }</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span> sinfo_new_read_list( <span class="keywordtype">char</span> * listname, </div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>                      <span class="keywordtype">float</span> * lineCenter, </div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span>                      <span class="keywordtype">float</span> * lineIntensity )</div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> {</div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     FILE * fp ;</div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span>     <span class="keywordtype">int</span> i, n_lines ;</div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>     <span class="keywordflow">if</span> ( NULL == lineCenter )</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>     {</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lineCenter array is not allocated\n"</span>) ;</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>     }</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span> </div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     <span class="keywordflow">if</span> ( NULL == lineIntensity )</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span>     {</div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" lineIntensity array is not allocated\n"</span>) ;</div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>     }</div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span> </div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>     <span class="keywordflow">if</span> ( NULL == (fp = fopen ( listname, <span class="stringliteral">"r"</span> ) ) )</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     {</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot open %s\n"</span>, listname) ;</div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>     }</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span> </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>     i = 0 ;</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <span class="keywordflow">while</span> ( fscanf( fp, <span class="stringliteral">"%f %f"</span>, &lineCenter[i], &lineIntensity[i] ) != EOF )</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     {</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>         i ++ ;</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>     }</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>     n_lines = i ;</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     fclose(fp) ;</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>            </div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>     <span class="keywordflow">return</span> n_lines ;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span> }</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span> </div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span> </div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span> <span class="keywordtype">int</span> sinfo_new_line_fit ( cpl_image  *  mergedImage, </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>               FitParams *  par,</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>               <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>               <span class="keywordtype">int</span>          lineInd,</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>               <span class="keywordtype">int</span>          column, </div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>               <span class="keywordtype">int</span>          halfWidth, </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>               <span class="keywordtype">int</span>          lineRow,</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>               <span class="keywordtype">float</span>        min_amplitude,</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>           Vector    *  line,</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>           <span class="keywordtype">int</span>       *  mpar,</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>           <span class="keywordtype">float</span>     *  xdat,</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>           <span class="keywordtype">float</span>     *  wdat )</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span> {</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>     <span class="keywordtype">int</span> i, j ;</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>     <span class="keywordtype">int</span> iters, xdim, ndat ;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>     <span class="keywordtype">int</span> numpar, its ;</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>     <span class="keywordtype">int</span> position ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>     <span class="keywordtype">float</span> maxval, tol, lab ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span> </div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>     <span class="keywordflow">if</span> ( mergedImage == NULL )</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>     {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given as input\n"</span>) ;</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>         <span class="keywordflow">return</span> -8 ;</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>     }</div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     lx=cpl_image_get_size_x(mergedImage);</div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     ly=cpl_image_get_size_y(mergedImage);</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>     pdata=cpl_image_get_data_float(mergedImage);</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span> </div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span> </div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>     {</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" fit parameters not given\n"</span>) ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         <span class="keywordflow">return</span> -9 ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>     }</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     <span class="keywordflow">if</span> ( column < 0 || column > lx )</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>     {</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong column number\n"</span>) ;</div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>         <span class="keywordflow">return</span> -10 ;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>     }</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>     <span class="keywordflow">if</span> ( halfWidth < 0 || halfWidth > ly )</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>     {</div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong width given\n"</span>) ;</div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>         <span class="keywordflow">return</span> -11 ;</div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>     }</div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>     <span class="keywordflow">if</span> ( lineRow < 0 || lineRow > ly )</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of row of the line given\n"</span>) ;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>         <span class="keywordflow">return</span> -12 ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>     }</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>     <span class="keywordflow">if</span> ( min_amplitude < 1. )</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>     {</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong minimum amplitude\n"</span>) ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>         <span class="keywordflow">return</span> -13 ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     }</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>     </div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span>     <span class="comment">/* initialise the Vector */</span></div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">for</span> ( i = 0 ; i < line -> n_elements ; i++) </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>     {</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>         line->data[i] = 0;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>     }</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>     </div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>     par -> column = column  ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>     par -> line   = lineInd ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span> </div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>     <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span></div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>     <span class="comment">/* go through the chosen column */</span></div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span> </div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>     j = 0 ;</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <span class="keywordflow">for</span> ( i = lineRow-halfWidth ; i <= lineRow+halfWidth ; i++ ) </div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     {</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>         <span class="keywordflow">if</span> ( i < 0 || i >= ly )</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>         {</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong line position or width given\n"</span>) ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>             <span class="keywordflow">return</span> -15 ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span>         }</div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>         {</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>             line -> data[j] = pdata[column + i*lx] ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>             j ++ ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>         }</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     } </div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span> </div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="comment">/*-------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> <span class="comment">     * go through the spectral sinfo_vector </span></div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> <span class="comment">     * determine the maximum pixel value in the spectral sinfo_vector </span></div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span>     maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l00999"></a><span class="lineno">  999</span>     position = -INT32_MAX ;</div>
+<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>     <span class="keywordflow">for</span> ( i = 0 ; i < line -> n_elements ; i++ )</div>
+<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>     {</div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>         xdat[i] = i ;</div>
+<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>         wdat[i] = 1.0 ;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>         <span class="keywordflow">if</span> ( line -> data[i] >= maxval )</div>
+<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>         {</div>
+<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>             maxval = line -> data[i] ;</div>
+<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>             position = i ;</div>
+<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>         }</div>
+<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>     }</div>
+<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div>
+<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>     <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>     xdim     = XDIM ;</div>
+<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>     ndat     = line -> n_elements ;</div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>     numpar   = MAXPAR ;</div>
+<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>     tol      = TOL ;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>     lab      = LAB ;</div>
+<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>     its      = ITS ;</div>
+<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>     par -> fit_par[1] = fwhm ;</div>
+<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>     par -> fit_par[2] = (float) position ;</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>     par -> fit_par[3] = (float) (line -> data[0] + </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>                                  line -> data[line->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>     par -> fit_par[0]  = maxval - (par -> fit_par[3]) ;</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>     <span class="comment">/* exclude low signal cases */</span></div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>     <span class="keywordflow">if</span> ( par->fit_par[0] < min_amplitude )</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>     {</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>         cpl_msg_debug (<span class="stringliteral">"sinfo_linefit:"</span>,</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>                        <span class="stringliteral">" sorry, amplitude of line too low to fit: %f"</span>,</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>                        par->fit_par[0] ) ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>         <span class="keywordflow">return</span> -16 ;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     }</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     {</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>         par -> derv_par[i] = 0.0 ;</div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>         mpar[i] = 1 ;</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     }</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>     <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>                                            line -> data, wdat, </div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>                                            &ndat, par -> fit_par,  </div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>                                            par -> derv_par, mpar, </div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>                                            &numpar, &tol, &its, &lab )) )  </div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     {</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>         cpl_msg_debug (<span class="stringliteral">"sinfo_linefit:"</span>,</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>                        <span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit failed,"</span></div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>                        <span class="stringliteral">" error no.: %d\n"</span>, iters) ; </div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         <span class="keywordflow">return</span> -17 ;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     }</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     <span class="comment">/* correct the fitted position for the given row of the </span></div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> <span class="comment">       line in image coordinates */</span></div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>     par -> fit_par[2] =  (float) (lineRow - halfWidth) + par -> fit_par[2] ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="comment">/* all was o.k. */</span></div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     <span class="keywordflow">return</span> iters ;</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> }</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordtype">int</span> sinfo_new_fit_lines ( cpl_image  *  line_image, </div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>                FitParams ** allParams,</div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>                <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>                <span class="keywordtype">int</span>       *  n_lines, </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>                <span class="keywordtype">int</span>       ** row,</div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>                <span class="keywordtype">float</span>     ** wavelength, </div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>                <span class="keywordtype">int</span>          width,</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>                <span class="keywordtype">float</span>        min_amplitude ) </div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> {</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     <span class="keywordtype">int</span> i, k, l ;</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>     <span class="keywordtype">int</span> result ;</div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>     Vector * line;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>     <span class="keywordtype">int</span>    * mpar;</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>     <span class="keywordtype">float</span>  * xdat, * wdat;</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>     <span class="keywordflow">if</span> ( line_image == NULL )</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>     {</div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no image given\n"</span>) ;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>         <span class="keywordflow">return</span> -18 ;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>     }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>     lx=cpl_image_get_size_x(line_image);</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>     ly=cpl_image_get_size_y(line_image);</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>     pdata=cpl_image_get_data_float(line_image);</div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>     <span class="keywordflow">if</span> ( n_lines == NULL )</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>     {</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no counter of emission lines\n"</span>) ;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>         <span class="keywordflow">return</span> -19 ;</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>     } </div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>     <span class="keywordflow">if</span> ( row == NULL || width <= 0 )</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>     {</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" row or width vectors are empty\n"</span>) ;</div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>         <span class="keywordflow">return</span> -20 ;</div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>     }</div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>     <span class="keywordflow">if</span> ( wavelength == NULL )</div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>     {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no wavelength array given\n"</span>) ;</div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>         <span class="keywordflow">return</span> -21 ;</div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>     }</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>     k = 0 ;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>     <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>     line = sinfo_new_vector (2*width + 1) ;</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>     xdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>     wdat = (<span class="keywordtype">float</span> *) cpl_calloc( line -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>     mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>     </div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     <span class="comment">/* go through the columns */</span></div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i++ )</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     {</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>         <span class="keywordflow">if</span> ( n_lines[i] == 0 )</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>         {</div>
+<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>             continue ;</div>
+<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>         }</div>
+<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>         <span class="comment">/* go through the emission lines in a column */</span></div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>         <span class="keywordflow">for</span> ( l = 0 ; l < n_lines[i] ; l++ )</div>
+<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>         {</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>             <span class="keywordflow">if</span> ( row[i][l] <= 0 )</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>             {</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>                 continue ;</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>             }</div>
+<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> </div>
+<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>             <span class="comment">/* --------------------------------------------------------------</span></div>
+<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="comment">             * fit the single lines using sinfo_linefit and store the </span></div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="comment">               parameters in</span></div>
+<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="comment">             * an array of the FitParams data structure allParams[].</span></div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">             */</span> </div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>             <span class="keywordflow">if</span> ( (result = sinfo_new_line_fit ( line_image, </div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>                                                 allParams[k], fwhm, l, i, </div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>                                                 width, row[i][l], </div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>                                                 min_amplitude,line,mpar,</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>                                                 xdat,wdat ) ) < 0 )</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>             {</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>                 cpl_msg_debug (<span class="stringliteral">"sinfo_fitLines:"</span>,</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>                                <span class="stringliteral">" sinfo_linefit failed, error no.: %d,"</span></div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>                                <span class="stringliteral">" column: %d, row: %d, line: %d\n"</span>, </div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>                                result, i, row[i][l], l) ;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                 continue ;</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>             }</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>             <span class="keywordflow">if</span> ( (allParams[k] -> fit_par[0] <= 0.) || </div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>                  (allParams[k] -> fit_par[1] <= 0.)</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>                   || (allParams[k] -> fit_par[2] <= 0.) )</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>             {</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" negative fit parameters in column: %d,"</span></div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>                                    <span class="stringliteral">" line: %d\n"</span>, i, l) ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>                 continue ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>             }</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>             allParams[k] -> wavelength = wavelength[i][l] ;</div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>             k++ ;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>         }</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     }</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> </div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     sinfo_new_destroy_vector(line);</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     cpl_free(xdat);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     cpl_free(wdat);</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     cpl_free(mpar);</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     </div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     <span class="comment">/* all is o.k. */</span></div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     <span class="keywordflow">return</span> k ;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> }    </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordtype">float</span> sinfo_new_polyfit( FitParams ** par,</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>                <span class="keywordtype">int</span>          column,</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>                <span class="keywordtype">int</span>          n_lines,</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>                <span class="keywordtype">int</span>          n_rows,</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>                <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>                <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>                <span class="keywordtype">float</span> *      acoefs,</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>                <span class="keywordtype">float</span> *      dacoefs,</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>                <span class="keywordtype">int</span>   *      n_reject,</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>                <span class="keywordtype">int</span>          n_fitcoefs )</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> {</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>     <span class="keywordtype">float</span> ** ucoefs, ** vcoefs, ** covar ;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     <span class="keywordtype">float</span> *mem;</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     <span class="keywordtype">float</span> * lambda, * posit ;</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     <span class="keywordtype">float</span> * weight, * resid ;</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>     <span class="keywordtype">float</span> * newlam, * newpos, * newwet ;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>     <span class="keywordtype">float</span> * wcoefs=NULL ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     <span class="keywordtype">float</span> chisq, result ;</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>     <span class="keywordtype">float</span> offset ;</div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="keywordtype">int</span> num, found ;</div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     <span class="keywordtype">int</span> i, j, k, n ;</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span> </div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>     <span class="comment">/* reset the fit coefficients and their errors */</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     {</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>         acoefs[i]  = 0. ;</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>         dacoefs[i] = 0. ;</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>     }</div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>     <span class="keywordflow">if</span> ( NULL == par )</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     {</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no fit params given\n"</span>);</div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>     }</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     <span class="keywordflow">if</span> ( 0 >= n_lines )</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>     {</div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span> <span class="comment">        sinfo_msg_warning (" sorry, number of lines is wrong") ;</span></div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>     }</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     <span class="keywordflow">if</span> ( 0 >= n_rows )</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     {</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" sorry, number of rows is wrong"</span>) ;</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>     }</div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>     {</div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" sorry, wrong dispersion given"</span>) ;</div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     }</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> </div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     offset = (float)(n_rows - 1)/2. ;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>     </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     mem = (<span class="keywordtype">float</span>*) cpl_calloc( n_lines*7, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     lambda = mem;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>     posit  = mem + n_lines;</div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>     weight = mem + n_lines*2;</div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     resid  = mem + n_lines*3;</div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     newlam = mem + n_lines*4;</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     newpos = mem + n_lines*5;</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>     newwet = mem + n_lines*6;</div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>     </div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>     <span class="comment">/*lambda = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> <span class="comment">    posit  = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">    weight = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment">    resid  = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">    newlam = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="comment">    newpos = (float*) cpl_calloc( n_lines, sizeof (float) ) ;</span></div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span> <span class="comment">    newwet = (float*) cpl_calloc( n_lines, sizeof (float) ) ;*/</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span> </div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>     <span class="comment">/* allocate coefficient matrices*/</span></div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>     ucoefs = sinfo_matrix ( 1, n_lines, 1, n_fitcoefs ) ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>     vcoefs = sinfo_matrix ( 1, n_lines, 1, n_fitcoefs ) ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>     covar  = sinfo_matrix ( 1, n_fitcoefs, 1, n_fitcoefs ) ;</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>     wcoefs=cpl_calloc(n_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>     <span class="comment">/* go through all fit parameters */</span></div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>     n = 0 ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>     <span class="keywordflow">for</span> ( i = 0 ; i < (par[0] -> n_params) ; i ++ )</div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>     {</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         found = -1 ;</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>         <span class="comment">/* find the given column and go through the lines in that column */</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_lines ; j ++ )</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>         {</div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>             <span class="keywordflow">if</span> ( (par[i] -> column == column) && (par[i] -> line == j) )</div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>             {</div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>                 found = i ;</div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>             }</div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>             {</div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>                 continue ;</div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>             }</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span> </div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>             <span class="comment">/* store only fit params with reasonable values */</span></div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>             <span class="keywordflow">if</span> ( par[found] -> derv_par[2] != 0. && </div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>                  par[found] -> fit_par[2] > 0. &&</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>                  par[found] -> wavelength > 0. && </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>                  par[found] -> fit_par[1] > 0. &&</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>                  par[found] -> fit_par[0] > 0. )</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>             {</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>                 <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">                 * store the found position, error of the position as </span></div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="comment">                   weight and the associated</span></div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">                 * wavelength values of the fitted lines</span></div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="comment">                 */</span></div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>                 posit[n]  = par[found] -> fit_par[2] ;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>                 weight[n] = par[found] -> derv_par[2] ;</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>                 lambda[n] = par[found] -> wavelength ;</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>                 n ++ ;</div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>             }</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>             {</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>                 continue ;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>             }</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>         }</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span> </div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>     }</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> </div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>     num = n ;</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>     <span class="keywordflow">if</span> ( num < n_fitcoefs )</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>     {</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"not enough lines found in column %d to "</span></div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>                           <span class="stringliteral">"determine the three coefficients.\n"</span>, column) ;</div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>         {</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>             acoefs[i]  = ZERO ;</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>             dacoefs[i] = ZERO ;</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>         }</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>         sinfo_free_matrix ( ucoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>         sinfo_free_matrix ( vcoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>         sinfo_free_matrix ( covar,  1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>         <span class="comment">/*cpl_free (lambda) ;</span></div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">        cpl_free (posit) ;</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> <span class="comment">        cpl_free (weight) ;</span></div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> <span class="comment">        cpl_free (resid) ;</span></div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">        cpl_free (newlam) ;</span></div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="comment">        cpl_free (newpos) ;</span></div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="comment">        cpl_free (newwet) ;*/</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>     cpl_free (mem);</div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>     }</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment">     * scale the pixel position values to smaller than 1 and transform </span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">       the weights to wavelength units </span></div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> </div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>     <span class="keywordflow">for</span> ( i = 0 ; i < num ; i ++ )</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>     {</div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>         posit[i] = (posit[i] - offset)/offset ;</div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>         weight[i] *= fabs(dispersion) ;</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>     }</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>     <span class="comment">/* do the fit using the singular value decomposition method */</span></div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>     sinfo_svd_fitting( posit - 1, lambda - 1, </div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>                       weight - 1, num, acoefs-1, n_fitcoefs,</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>             ucoefs, vcoefs, wcoefs-1, covar, &chisq, sinfo_fpol ) ;</div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> </div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>     <span class="comment">/* scale the linear and the quadratic coefficient */</span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>     <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>     {</div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>         acoefs[i] /= pow(offset, i) ;</div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>     }</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>     <span class="comment">/* now that we have determined the fit coefficients, find the residuals */</span></div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>     *n_reject = 0 ;</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>     j = 0 ;</div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>     <span class="keywordflow">for</span> ( i = 0 ; i < num ; i++ )</div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>     {</div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>         result = 0. ;</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>         <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoefs ; k++ )</div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>         {</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>             result += acoefs[k] * pow(posit[i], k) ;</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>         }</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> </div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>         resid[i] = lambda[i] - result ;</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> </div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>         <span class="keywordflow">if</span> ( fabs( resid[i] ) > max_residual)</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>         {</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>             (*n_reject) ++ ;</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>         }</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>         {</div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>             newlam[j] = lambda[i] ;</div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>             newpos[j] = posit[i] ;</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>             newwet[j] = weight[i] ;</div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>             j++ ;</div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         }</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>     }</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> </div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>     num = j ;</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>     <span class="keywordflow">if</span> ( num >= n_fitcoefs )</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>     {</div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>         sinfo_svd_fitting( newpos - 1, newlam - 1, </div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>                            newwet - 1, num, acoefs-1, n_fitcoefs, ucoefs,</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>                 vcoefs, wcoefs-1, covar, &chisq, sinfo_fpol ) ;</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> </div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>         <span class="comment">/* scale the resulting coefficients */</span></div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>         {</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>             acoefs[i] /= pow(offset, i) ;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>             dacoefs[i] = sqrt( (<span class="keywordtype">double</span>) covar[i+1][i+1] ) / pow(offset, i) ;</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>         }</div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>     }</div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>     {</div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" too many lines rejected (number: %d) "</span></div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>                            <span class="stringliteral">"due to high residuals, fit coefficients are set "</span></div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>                            <span class="stringliteral">"zero, in column: %d\n"</span>, *n_reject, column) ;</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         {</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>             acoefs[i]  = ZERO ;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>             dacoefs[i] = ZERO ;</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>         }</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>     }</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> </div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>     sinfo_free_matrix ( ucoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>     sinfo_free_matrix ( vcoefs, 1<span class="comment">/*, n_lines*/</span>,    1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>     sinfo_free_matrix ( covar,  1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>     <span class="comment">/*cpl_free (lambda) ;</span></div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> <span class="comment">    cpl_free (posit) ;</span></div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span> <span class="comment">    cpl_free (weight) ;</span></div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span> <span class="comment">    cpl_free (resid) ;</span></div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="comment">    cpl_free (newlam) ;</span></div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span> <span class="comment">    cpl_free (newpos) ;</span></div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> <span class="comment">    cpl_free (newwet) ;*/</span></div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>     cpl_free (mem);</div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>     cpl_free(wcoefs) ;</div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> </div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>     <span class="keywordflow">return</span> chisq ;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span> }</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span> <span class="keywordtype">float</span> sinfo_new_coefs_cross_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>                       <span class="keywordtype">float</span> *  acoefs,</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>                       <span class="keywordtype">float</span> *  dacoefs,</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>                       <span class="keywordtype">float</span> *  bcoefs,</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>                       <span class="keywordtype">int</span>      n_fitcoefs,</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>                       <span class="keywordtype">float</span>    sigma_factor )</div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span> {</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>     <span class="keywordtype">float</span> col_index;</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>     <span class="keywordtype">float</span>* sub_col_index=NULL ;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>     <span class="keywordtype">float</span>* sub_acoefs=NULL ;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>     <span class="keywordtype">float</span>* wcoefs=NULL ;</div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;</div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>     <span class="keywordtype">float</span> chisq ;</div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>     <span class="keywordtype">float</span> * acoefsclean ;</div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>     <span class="keywordtype">double</span> sum, sumq, mean ;</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>     <span class="keywordtype">double</span> sigma ;</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>     <span class="keywordtype">double</span> cliphi, cliplo ;</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>     <span class="keywordtype">float</span> offset ;</div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>     <span class="keywordtype">int</span> i, n, num, ndata ;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>     <span class="keywordtype">int</span> nc ;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> </div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>     <span class="keywordflow">if</span> ( n_columns < 1 )</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>     {</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of image columns given\n"</span>) ;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>     }</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>     <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>     {</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" coeffs or errors of coefficients are not given\n"</span>) ;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>     }</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>     <span class="keywordflow">if</span> ( bcoefs == NULL )</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>     {</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" coeffs are not allocated\n"</span>) ;</div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>     }</div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> </div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>     <span class="keywordflow">if</span> ( n_fitcoefs < 1 )</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>     {</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of fit coefficients\n"</span>) ;</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>     }</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>     <span class="keywordflow">if</span> ( sigma_factor <= 0. )</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>     {</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigma_factor given!\n"</span>) ;</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>     }</div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> </div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>     offset = (float)(n_columns - 1) / 2. ;</div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> </div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>     <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment">     * determine the clean mean and sigma value of the coefficients,</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">     * that means reject 10 % of the extreme low and high values</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> </div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>     wcoefs=cpl_calloc(n_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>     nc = 0 ;</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>     {</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>         <span class="keywordflow">if</span> ( isnan(acoefs[i]) || acoefs[i] == 0. || dacoefs[i] == 0. )</div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>         {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>             continue ;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>         }</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>         {</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>             nc++ ;</div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>         }</div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>     }</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>     acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>     nc = 0 ;</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>     {</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>         <span class="keywordflow">if</span> ( isnan(acoefs[i]) || acoefs[i] == 0. || dacoefs[i] == 0. )</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>         {</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>             continue ;</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>         }</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>         {</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>             acoefsclean[nc] = acoefs[i] ;</div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>             nc++ ;</div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>         }</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     }</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>     sinfo_pixel_qsort(acoefsclean, nc) ;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     sum   = 0. ;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     sumq  = 0. ;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>     mean  = 0. ;</div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     sigma = 0. ;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     n     = 0 ;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>     <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; </div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>           i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )</div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>     {</div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>         sum  += (double)acoefsclean[i] ;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>         sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>         n ++ ;</div>
+<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>     }</div>
+<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>     mean          = sum/(double)n ;</div>
+<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>     sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;</div>
+<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>     cliphi        = mean + sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>     cliplo        = mean - sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span> </div>
+<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>     sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>     sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>     sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span> </div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>     <span class="comment">/* fit only the reasonnable values */</span></div>
+<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>     num = 0 ;</div>
+<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_columns ; i++ )</div>
+<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>     {</div>
+<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>         <span class="comment">/* associate the column indices to the corresponding array */</span></div>
+<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>         col_index = (float) i ;</div>
+<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div>
+<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>         <span class="comment">/* take only the reasonnable coefficients */</span></div>
+<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>         <span class="keywordflow">if</span> ( !isnan(acoefs[i]) && </div>
+<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>              (acoefs[i] <= cliphi) && (acoefs[i] >= cliplo) &&</div>
+<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>              (dacoefs[i] != 0. ) && (acoefs[i] != 0.) )</div>
+<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>         {</div>
+<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>             sub_acoefs[num]    = acoefs[i] ;</div>
+<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>             sub_dacoefs[num]   = dacoefs[i] ;</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>             sub_col_index[num] = col_index ;</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>             num ++ ;</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>         }</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>     }</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>     ndata = num ;</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> </div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>     <span class="keywordflow">if</span> ( ndata < n_fitcoefs )</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>     {</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data found to determine "</span></div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>                         <span class="stringliteral">"the fit coefficients.\n"</span>) ;</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>         <span class="keywordflow">return</span> FLT_MAX ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     }</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span> </div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="comment">/* allocate coefficient matrices */</span></div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     ucoefs = sinfo_matrix(1, ndata, 1, n_fitcoefs) ;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     vcoefs = sinfo_matrix(1, ndata, 1, n_fitcoefs) ;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     covar  = sinfo_matrix ( 1, n_fitcoefs, 1, n_fitcoefs ) ;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     <span class="comment">/* scale the x-values for the fit */</span></div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>     {</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>         sub_col_index[i] = (sub_col_index[i] - offset) / offset ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>     }</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     <span class="comment">/* finally, do the singular value decomposition fit */</span></div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, </div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>                         sub_dacoefs-1, ndata, bcoefs-1,</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>                         n_fitcoefs, ucoefs, vcoefs, </div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>                         wcoefs-1, covar, &chisq, sinfo_fpol ) ;</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> </div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     <span class="comment">/* scale the found coefficients */</span></div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoefs ; i ++ )</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     {</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>         bcoefs[i] /= pow(offset, i) ;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>     }</div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> </div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     cpl_free (acoefsclean) ;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>     sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoefs */</span>) ;</div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoefs */</span>) ;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     sinfo_free_matrix ( covar, 1<span class="comment">/*, n_fitcoefs*/</span>, 1<span class="comment">/*, n_fitcoefs*/</span> ) ;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     cpl_free(sub_col_index) ;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>     cpl_free(sub_acoefs) ;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>     cpl_free(sub_dacoefs) ;</div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>     cpl_free(wcoefs) ;</div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     <span class="keywordflow">return</span> chisq ;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> }</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> </div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span> </div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> cpl_image * sinfo_new_wave_map( cpl_image * lineImage,</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>                     <span class="keywordtype">float</span>   ** bcoefs,</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>                     <span class="keywordtype">int</span>        n_a_fitcoefs,</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>                     <span class="keywordtype">int</span>        n_b_fitcoefs,</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>                     <span class="keywordtype">float</span>    * wavelength,</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>                     <span class="keywordtype">float</span>    * intensity,</div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>                     <span class="keywordtype">int</span>        n_lines,</div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>                     <span class="keywordtype">int</span>        magFactor)</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> {</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>     cpl_image * retImage ;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>     <span class="keywordtype">float</span> cenpos, cenpix ;</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>     <span class="keywordtype">float</span> centreval, centrepix, wavelag ;</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>     <span class="keywordtype">float</span>  pixvalue ;</div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     <span class="keywordtype">float</span> a_initial ;</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     <span class="keywordtype">int</span> i, j, k, l<span class="comment">/*, m*/</span>, line, col, row, found, sign ;</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     <span class="keywordtype">int</span> var, maxlag, cmin, cmax, offset ;</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>     <span class="keywordtype">double</span> * result ;</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     <span class="keywordtype">float</span> col_off ;</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>     <span class="keywordtype">float</span> angst ;</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>     <span class="keywordtype">double</span> xcorr_max ;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>     <span class="keywordtype">int</span> delta ;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> </div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     <span class="keywordtype">double</span>* z=NULL ;</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>     <span class="keywordtype">double</span>* a=NULL ;</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>     <span class="keywordtype">double</span>*  wave=NULL ;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>     <span class="keywordtype">float</span>* emline=NULL ;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span> </div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span> </div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>     gsl_poly_complex_workspace * w ;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     </div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     <span class="keywordflow">if</span> ( NULL == lineImage )</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     {</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given\n"</span>) ;</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>     }</div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>     <span class="keywordflow">if</span> ( NULL == wavelength || n_lines <= 0 )</div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>     {</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength list given\n"</span>) ;</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     }</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> </div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>     <span class="keywordflow">if</span> ( NULL == intensity )</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     {</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no intensity list given\n"</span>) ;</div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     }</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>     <span class="keywordflow">if</span> ( NULL == bcoefs )</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     {</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no coefficients given\n"</span>) ;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     }</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>     <span class="keywordflow">if</span> ( magFactor <= 1 )</div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>     {</div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong magnifying factor given\n"</span>) ;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     }</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>     </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>     <span class="keywordflow">if</span> ( NULL == ( retImage = cpl_image_new( ilx, ily,CPL_TYPE_FLOAT ) ))</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>     {</div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     }</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>     olx=cpl_image_get_size_x(retImage);</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     oly=cpl_image_get_size_y(retImage);</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> </div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span> </div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>     var    = (magFactor - 1)*(magFactor - 1) ;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>     offset = ily * (magFactor/4 + 1) ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> </div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>     <span class="comment">/* find out if Angstroem or microns are used */</span></div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>     {</div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>     <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>         angst = 10000. ;</div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>     }</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>     {</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>     <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     angst = 1000. ;</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>     }</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     {</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>     <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>     angst = 1. ;</div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>     }</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> </div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>     z=cpl_calloc(2*(n_a_fitcoefs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>     a=cpl_calloc(n_a_fitcoefs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>     emline=cpl_calloc(2*magFactor*ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>     spec=cpl_calloc(2*magFactor*ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> </div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>     <span class="comment">/* go through the image columns */</span></div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>     {</div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>         <span class="comment">/* initialize the emline array for each column */</span></div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>         <span class="keywordflow">for</span> ( i = 0 ; i < 2*magFactor*ily ; i++ )</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>         {</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>             emline[i] = 0. ;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>         }</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>         col_off = (float)col - (<span class="keywordtype">float</span>)(ilx-1)/2. ;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> </div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>         <span class="comment">/* determine the coefficients by using the given bcoefs */</span></div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ ) </div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>         {</div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>             <span class="comment">/* initialize coefficients and solution */</span></div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>             a[i] = 0. ;</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>             <span class="keywordflow">if</span> (i < n_a_fitcoefs-1)</div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>             {</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>                 z[2*i] = 0. ;</div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>                 z[2*i+1] = 0. ;</div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>             }</div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>             <span class="keywordflow">for</span> ( j = 0 ; j < n_b_fitcoefs ; j++ )</div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>             {</div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>                 a[i] += bcoefs[i][j] * pow(col_off, j) ;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>             }</div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>         }</div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>         a_initial = a[0] ;</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>         </div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>         <span class="comment">/* go through the lines and generate an artificial spectrum */</span></div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>         {</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>             <span class="comment">/* go from Angstroem to micron */</span></div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>             wave[line] = wavelength[line]/angst ;</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span> </div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>             <span class="comment">/* ---------------------------------------------------------------</span></div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span> <span class="comment">             * solve the polynomial for the exact offset of the line that means</span></div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span> <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span></div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>             a[0] = a_initial - wave[line] ;</div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span> </div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>             <span class="keywordflow">if</span>(NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_a_fitcoefs)))</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>             {</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate complex workspace!"</span>) ;</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>                 cpl_image_delete(retImage) ;</div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>             }</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_a_fitcoefs, w, z))</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>             {</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>                 cpl_image_delete(retImage) ;</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>             }</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>             sinfo_gsl_poly_complex_workspace_free(w) ;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>             </div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>             j = 0 ;</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>             found = -1 ;</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs - 1  ; i++ )</div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>             {</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                 <span class="comment">/* test for appropriate solution */</span></div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>                 <span class="keywordflow">if</span>( z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. && </div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>                     z[2*i] < (<span class="keywordtype">float</span>)ily/2. && z[2*i+1] == 0. )</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>                 {</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                     found = 2*i ;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>                     j ++ ;</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>                 }</div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>                 {</div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>                     continue ;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>                 } </div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>             }</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>             <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>             {</div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found "</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>                                   <span class="stringliteral">"for line %d in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>                 continue ;</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>             } </div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )</div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>             {</div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>                 cenpos = z[found] + (float) ily /2. ;</div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>             }</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>             {</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found "</span></div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>                                   <span class="stringliteral">"for line %d in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>                 continue ;</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>             }</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>              </div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>             <span class="comment">/*---------------------------------------------------------------</span></div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <span class="comment">             * magnify image by the given factor add an additional offset </span></div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>             cenpix = cenpos * (float) magFactor + (<span class="keywordtype">float</span>) offset ;  </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>             </div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>             <span class="comment">/* determine max and min pixel limits over </span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">               which line should be convolved */</span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? </div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>                     sinfo_new_nint(cenpix) - (var-1) : 0 ;</div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>             cmax = (sinfo_new_nint(cenpix) + (var-1)) < 2*magFactor * ily ? </div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>                     sinfo_new_nint(cenpix) + (var-1) :  2*magFactor * ily ;</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span> </div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>             <span class="comment">/* convolve neon lines with Gaussian function */</span></div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>             for ( j = cmin ; j < cmax ; j++ )</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>             {</div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>                 emline[j] += intensity[line] * </div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>                 exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;</div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>             }</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>         }</div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>                 </div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>         <span class="comment">/*--------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span> <span class="comment">         * for each column, map the image data points onto an magFactor times </span></div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> <span class="comment">           bigger element grid for FFT in the cross sinfo_new_correlation, </span></div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span> <span class="comment">           first initialize the two helping arrays for each new column.</span></div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>         <span class="keywordflow">for</span> ( k = 0 ; k < 2*magFactor * ily ; k++ )</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>         {</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>             spec[k] =  0. ;</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>         }</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>    </div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>         <span class="comment">/* now take the image data points of the column and put them </span></div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span> <span class="comment">           into the spec array */</span></div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span></div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>         {</div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>             <span class="comment">/* insert 8 values for each image row (magnification) and </span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span> <span class="comment">               add same offset as for emline array */</span></div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>             <span class="keywordflow">for</span> ( l = 0 ; l < magFactor ; l++ )   </div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>         {</div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>             <span class="comment">/* set bad pixels or negative values to zero */</span></div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>                 <span class="keywordflow">if</span> (!isnan(pidata[col + row * ilx]) &&</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>                                 (pidata[col + row * ilx] > 0.))</div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>                 {</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>                     spec[offset + l + (row * magFactor)] = </div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>                 pidata[col + row * ilx] ;     </div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>                 }</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>                 {</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>                     spec[offset + l + (row * magFactor)] = 0. ;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>                 }</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>             }</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>     }</div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>  </div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>         <span class="comment">/* now call the cross sinfo_new_correlation routine */</span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>         <span class="keywordflow">if</span> (NULL == (result = sinfo_new_xcorrel(spec, 2*magFactor * ily, </div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>                                                 emline, 2*magFactor * ily, </div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>                                                 magFactor * ily, &delta, </div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>                                                 &maxlag, &xcorr_max)) ) </div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>         {</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"cross sinfo_new_correlation did not work,"</span></div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>                                <span class="stringliteral">" col: %d is set ZERO\n"</span>, col) ;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>             {</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>                 podata[col + row * ilx] = ZERO ;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>             }</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>             continue ;</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>         }</div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>     </div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>         <span class="keywordflow">if</span> ( xcorr_max <= 0. )</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>         {</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"cross sinfo_new_correlation sum is negative,"</span></div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>                                <span class="stringliteral">" col: %d is set ZERO\n"</span>, col) ;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>             {</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>                 podata[col + row * ilx] = ZERO ;</div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>             }</div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>             continue ;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>         }</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> </div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>         wavelag = (float) -delta / (<span class="keywordtype">float</span>) magFactor ;</div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>         {</div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wave lag too big, col: %d is set ZERO\n"</span>, col) ;</div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>             {</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>                 podata[col + row * ilx] = ZERO ;</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>             }</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>         continue ;</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>         }</div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span> </div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>         <span class="comment">/*-------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> <span class="comment">         * determine new zero order coefficient centreval, of which the </span></div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span> <span class="comment">           formula is determined by setting equal a polynomial shifted by </span></div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span> <span class="comment">           wavelag with the same higher order coefficients and set the new </span></div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span> <span class="comment">           zero order coefficient to get both sides of the equation </span></div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">           approximately equal.</span></div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span> <span class="comment">         */</span> </div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>         centreval = a_initial ;</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>         <span class="keywordflow">for</span> ( i = 1 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>         {</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>             <span class="keywordflow">if</span> ( i%2 == 0 )</div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>             {</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>                 sign = -1 ;</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>             }</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>             {</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>                 sign = 1 ;</div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>             }</div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>             centreval += (float)sign * a[i]*pow(wavelag, i) ;</div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>         }</div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span> </div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>         <span class="comment">/* prepare to write out wavelength as pixel values */</span></div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>         {</div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>             centrepix = (float)row - ((<span class="keywordtype">float</span>)ily - 1.)/2. ;</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>             pixvalue = 0. ;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>             {</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>                 pixvalue += a[i]*pow(centrepix, i) ; </div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>             }</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>             podata[col + row * ilx] = centreval + pixvalue ; </div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>         }</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>         cpl_free(result) ;   </div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>     }</div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span> </div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span> </div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span> </div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>     cpl_free(z) ;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>     cpl_free(wave) ;</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>     cpl_free(emline) ;</div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> </div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span> }                    </div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span> </div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span> <span class="keywordtype">int</span> sinfo_new_wavelength_calibration( cpl_image   * image,</div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>                            FitParams ** par ,</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>                            <span class="keywordtype">float</span>     ** bcoefs,</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>                            <span class="keywordtype">float</span>      * wave,</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>                            <span class="keywordtype">int</span>          n_lines,</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>                            <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>                            <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>                            <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>                            <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>                            <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>                            <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>                            <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>                            <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>                            <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>                            <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>                            <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>                            <span class="keywordtype">float</span>        pixel_tolerance )</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span> </div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span> {</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>     <span class="keywordtype">int</span>          i, j, k ;</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>     <span class="keywordtype">int</span>          n_fit ;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>     <span class="keywordtype">int</span>          n_reject ;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>     <span class="keywordtype">float</span>     *  acoefs ;</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>     <span class="keywordtype">float</span>     *  dacoefs ;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>     <span class="keywordtype">float</span>     ** abuf ;</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>     <span class="keywordtype">float</span>     ** dabuf ;</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>     <span class="keywordtype">float</span>        chisq_poly, chisq_cross ;</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>     <span class="keywordtype">int</span>          zeroind ;</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>     <span class="comment">/*float     *  mem ;*/</span></div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span> </div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>     <span class="keywordflow">if</span> (  NULL == image )</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>     {</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given\n"</span>) ;</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>     }</div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>     lx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>     ly=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>     pdata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span> </div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>     {</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given\n"</span>) ;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>     }</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>     <span class="keywordflow">if</span> ( wave == NULL )</div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>     {</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength list given\n"</span>) ;</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>     }</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>     <span class="keywordflow">if</span> ( n_lines <= 0 )</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>     {</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible number of lines in line list given\n"</span>) ;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>     }</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>     <span class="keywordflow">if</span> ( row_clean == NULL )</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>     {</div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row_clean array given\n"</span>) ;</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>     }</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>     <span class="keywordflow">if</span> ( wavelength_clean == NULL )</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>     {</div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength_clean array given\n"</span>) ;</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>     }</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span> </div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>     {</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given\n"</span>) ;</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>     }</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span> </div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ly/2 )</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>     {</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible half width of the fitting box given\n"</span>) ;</div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>     }</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>     <span class="keywordflow">if</span> ( minAmplitude < 1. )</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>     {</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible minimal amplitude\n"</span>) ;</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>     }</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> </div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>     <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )</div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>     {</div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible max_residual given\n"</span>) ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>     }</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> </div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>     <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )</div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>     {</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible fwhm given\n"</span>) ;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span> </div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>     }</div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span> </div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>     <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )</div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>     {</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_a_fitcoefs given\n"</span>) ;</div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>     }</div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span> </div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>     <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>     {</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_b_fitcoefs given\n"</span>) ;</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>     }</div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )</div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>     {</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigmaFactor given\n"</span>) ;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>     }</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> </div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>     <span class="comment">/* initialize the variables */</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>     n_reject = 0 ;</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>     n_fit = 0 ;</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span> </div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>     <span class="comment">/* fit each found line by using a Gaussian function and determine the </span></div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span> <span class="comment">       exact position */</span></div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>     <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, </div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>                                            n_found_lines, row_clean, </div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>                                            wavelength_clean,</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>                                 halfWidth, minAmplitude )) )</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>     {</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, "</span></div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>                         <span class="stringliteral">"error code of sinfo_fitLines: %d\n"</span>, n_fit) ;</div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>     }</div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span> </div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     <span class="comment">/* first check for faked lines like bad pixels */</span></div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>     <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, dispersion, </div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>                                                wavelength_clean, row_clean, </div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>                                                n_found_lines,</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>                                                lx, pixel_tolerance) )</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>     {</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, "</span></div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>                         <span class="stringliteral">"error code of sinfo_fitLines: %d"</span>, n_fit) ;</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>     }</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span> </div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     <span class="keywordflow">if</span> (NULL == (acoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>         NULL == (dacoefs = (<span class="keywordtype">float</span>*)cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||</div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>         NULL == (abuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||</div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>         NULL == (dabuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) )</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>     {</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     }</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     {</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>         <span class="keywordflow">if</span> ( NULL == (abuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>              NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(lx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>         {</div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>             cpl_free(abuf) ;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>             cpl_free(dabuf) ;</div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>         }</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>     }</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span> </div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>     <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span></div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>     k = 0 ;</div>
+<div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>     </div>
+<div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>     <span class="keywordflow">for</span> ( i = 0 ; i < lx ; i++ )</div>
+<div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>     {</div>
+<div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>         zeroind = 0 ;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, </div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>                                                          n_found_lines[i], </div>
+<div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>                                                          ly, dispersion,</div>
+<div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>                                                          max_residual, acoefs, </div>
+<div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>                                                          dacoefs, &n_reject, </div>
+<div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>                                                          n_a_fitcoefs)) )</div>
+<div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>         {</div>
+<div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>       <span class="comment">/* </span></div>
+<div class="line"><a name="l02215"></a><span class="lineno"> 2215</span> <span class="comment">           sinfo_msg_warning (" error in polyfitt in column: %d\n", i) ;</span></div>
+<div class="line"><a name="l02216"></a><span class="lineno"> 2216</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>             <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>             {</div>
+<div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>                 acoefs[j] = ZERO ;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>                 dacoefs[j] = ZERO ;</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>             }</div>
+<div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>         }</div>
+<div class="line"><a name="l02223"></a><span class="lineno"> 2223</span> </div>
+<div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>         {</div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>             <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>                  dacoefs[j] == 0. || isnan(acoefs[j]) )</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>             {</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>                 zeroind = 1 ;</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span> </div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>             }</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>         }</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>         {</div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>             <span class="keywordflow">if</span> ( zeroind == 0 )</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>             {</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>                 abuf[j][i]  = acoefs[j] ;</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>                 dabuf[j][i] = dacoefs[j] ;</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>             }</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>             {</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>                 abuf[j][i]  = ZERO ;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>                 dabuf[j][i] = ZERO ;</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>             }</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>         }</div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>     }</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span> </div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>     <span class="comment">/* fit each acoefs across the columns to smooth the result */</span></div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>     {</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_cross = sinfo_new_coefs_cross_fit(lx, </div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>                                                                  abuf[i], </div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>                                                                  dabuf[i],</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>                                                                  bcoefs[i],</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>                                                                  n_b_fitcoefs,</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>                                                                  sigmaFactor)))</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>         {</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out the fitting of coefficients"</span></div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>                              <span class="stringliteral">" across the columns, for the coefficient with"</span></div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>                              <span class="stringliteral">" index: %d\n"</span>, i) ;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>             {</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>                 cpl_free (abuf[i]) ;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>                 cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>             }</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>             cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>             cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>             cpl_free ( abuf ) ;</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>             cpl_free ( dabuf ) ;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>         }</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>     }</div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span> </div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     <span class="comment">/* free all allocated memory */</span></div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>     {</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>         cpl_free (abuf[i]) ;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>         cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>     }</div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>     cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>     cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>     cpl_free ( abuf ) ;</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>     cpl_free ( dabuf ) ;</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span> </div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>     <span class="keywordflow">return</span> 0 ;   </div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span> }</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span> </div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>                            </div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span> cpl_image * sinfo_new_convolve_image_by_gauss( cpl_image * lineImage,</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>                                  <span class="keywordtype">int</span>        hw )</div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span> {</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     cpl_image * returnImage ;</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>     <span class="keywordtype">float</span>* column_buffer=NULL ;</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>     <span class="keywordtype">float</span> * filter ;</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>     <span class="keywordtype">int</span> col, row ;</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span> </div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>     <span class="keywordflow">if</span> ( lineImage == NULL )</div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     {</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>     }</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>     ilx=cpl_image_get_size_x(lineImage);</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     ily=cpl_image_get_size_y(lineImage);</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>     pidata=cpl_image_get_data_float(lineImage);</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span> </div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>     <span class="keywordflow">if</span> ( hw < 1 )</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>     {</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong half width given!\n"</span>) ;</div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>     }</div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span> </div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>     <span class="comment">/* allocate memory for returned image */</span></div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>     <span class="keywordflow">if</span> ( NULL == ( returnImage = cpl_image_new(ilx,ily,CPL_TYPE_FLOAT ) ))</div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>     {</div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>     }</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>     olx=cpl_image_get_size_x(returnImage);</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>     oly=cpl_image_get_size_y(returnImage);</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>     podata=cpl_image_get_data_float(returnImage);</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span> </div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>     column_buffer=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span> </div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>     <span class="comment">/* go through the image columns and save them in a buffer */</span></div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>     { </div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>         {</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>             column_buffer[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>         }</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>          </div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>         <span class="comment">/*--------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span> <span class="comment">         * now low pass filter the columns by the sinfo_gaussian and fill </span></div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span> <span class="comment">           the return image.</span></div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span> <span class="comment">         */</span>  </div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>         filter = sinfo_function1d_filter_lowpass( column_buffer,</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>                                             ily,</div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>                                             LOW_PASS_GAUSSIAN,</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>                                             hw ) ;</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>         {</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>             podata[col + row*ilx] = filter[row] ;</div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>         }</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>         sinfo_function1d_del(filter) ;</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>     }</div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>                         </div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>     cpl_free(column_buffer);</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>     <span class="keywordflow">return</span> returnImage ;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span> }</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span> </div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span> cpl_image * sinfo_new_defined_resampling( cpl_image * image,</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>                               cpl_image * calimage,</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>                               <span class="keywordtype">int</span>        n_params,</div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>                               <span class="keywordtype">int</span>*       n_rows,</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>                               <span class="keywordtype">double</span>   * dispersion,</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>                               <span class="keywordtype">float</span>    * minval,</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>                               <span class="keywordtype">float</span>    * maxval,</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>                               <span class="keywordtype">double</span>   * centralLambda,</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>                               <span class="keywordtype">int</span>    * centralpix )</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span> {</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>     cpl_image * retImage ;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>     cpl_image * tempCalImage ;</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>     cpl_image * tempImage ;</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>     <span class="keywordtype">float</span> lambda ;</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>     <span class="keywordtype">float</span> dif, lambda_renorm ;</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>     <span class="keywordtype">float</span> * retimagecol = NULL;<span class="comment">//[2560] ; /* retimagecol[n_rows] ; */</span></div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span> </div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>     <span class="keywordtype">float</span>* imagecol=NULL ;</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>     <span class="keywordtype">float</span>* calcol=NULL ;</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>     <span class="keywordtype">float</span>* x_renorm=NULL ;</div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span> </div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>     <span class="keywordtype">float</span> * imageptr ;</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>     <span class="keywordtype">float</span> sum, new_sum ;</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>     <span class="keywordtype">float</span> disp, mindisp ;</div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>     <span class="keywordtype">int</span> *calcolpos=NULL;<span class="comment">//[2560];</span></div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>     <span class="keywordtype">int</span> i<span class="comment">/*, j*/</span>, col, row, testrow ;</div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>     <span class="keywordtype">int</span> half_width, firstpos ;</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>     <span class="keywordtype">int</span> dispInd ;</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>     <span class="keywordtype">int</span> n ;</div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>     <span class="keywordtype">int</span> flag;</div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>     <span class="keywordtype">float</span> temprow;</div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>     <span class="keywordtype">float</span> minLambda = 0. ;</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>     <span class="comment">/*dpoint list[n_params] ;*/</span></div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>     <span class="comment">/*double * polycoeffs ;*/</span></div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>     <span class="keywordtype">double</span> poly ;</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>     <span class="comment">/*float error;*/</span></div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>     <span class="keywordtype">int</span> zeroind ;</div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>     <span class="keywordtype">int</span> clx=0;</div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>     <span class="keywordtype">int</span> cly=0;</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> </div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>     <span class="keywordtype">float</span>* pcdata=NULL;</div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>     <span class="keywordtype">float</span>* ptidata=NULL;</div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>     <span class="keywordtype">float</span>* ptcdata=NULL;</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span> </div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>     <span class="keywordflow">if</span> ( NULL == image )</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>     {</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" source image not given\n"</span>) ;</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>     }</div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span> </div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span> </div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>     <span class="keywordflow">if</span> ( NULL == calimage )</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>     {</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelength map image not given\n"</span>) ;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>     }</div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>     clx=cpl_image_get_size_x(calimage);</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>     cly=cpl_image_get_size_y(calimage);</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>     pcdata=cpl_image_get_data_float(calimage);</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>     <span class="keywordflow">if</span> ( ilx != clx ||</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>          ily != cly )</div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>     {</div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"source image and wavelength map image "</span></div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>                         <span class="stringliteral">"are not compatible in size\n"</span>) ;</div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>     }                              </div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>   </div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>     <span class="keywordflow">if</span> ( n_params < 1 )</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>     {</div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of fit parameters given\n"</span>) ;</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>     }</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span> </div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>     <span class="keywordflow">if</span> ( n_params > 4 )</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>     {</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" attention: very high number of fit "</span></div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>                           <span class="stringliteral">"parameters given, not tested !!!\n"</span>) ;</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>     }</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span> </div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>     imagecol=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>     calcol=cpl_calloc(cly,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>     x_renorm=cpl_calloc(n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span> </div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> </div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>     <span class="comment">/*if ( n_rows <= cly)</span></div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span> <span class="comment">        sinfo_msg_error (" number of rows of resampled image will be "</span></div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span> <span class="comment">                         " smaller than in wavelength calibration map,"</span></div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span> <span class="comment">                         " information would get lost!") ;</span></div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>    </div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>     dispInd = 0 ;</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span> </div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>     <span class="comment">/* first determine the dispersion direction */</span></div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>     <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>     {</div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>         <span class="keywordflow">if</span> ( isnan(pcdata[col]) || pcdata[col] <= 0. )</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>         {</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>             continue ;</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>         }</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>         <span class="keywordflow">if</span> ((pcdata[col] - pcdata[col+(clx)*(cly-1)]) > 0. )</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>         {</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>            dispInd--  ;</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>         }</div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((pcdata[col] - pcdata[col+(clx)*(cly-1)]) < 0. )</div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>         {</div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>            dispInd++ ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>         }</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>         {</div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>             continue ;</div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>         }</div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>     }</div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> </div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>     <span class="keywordflow">if</span> ( dispInd == 0 )</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>     {</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" zero dispersion?\n"</span>);</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>     }</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>    </div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>     <span class="comment">/* mirror the wavelength map and the raw image if </span></div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> <span class="comment">       the dispersion is negative */</span></div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>     <span class="keywordflow">if</span> ( dispInd < 0 )</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>     {</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span> </div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>         <span class="comment">/* allocate a temp image */</span></div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>         <span class="keywordflow">if</span> ( NULL == ( tempCalImage = cpl_image_new(clx,cly,CPL_TYPE_FLOAT)))</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>         {</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>         }</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>         ptcdata=cpl_image_get_data_float(tempCalImage);</div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>         <span class="keywordflow">if</span> ( NULL == ( tempImage = cpl_image_new( ilx, ily,CPL_TYPE_FLOAT)))</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>         {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>             cpl_image_delete(tempCalImage) ;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>         }</div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>         ptidata=cpl_image_get_data_float(tempImage);</div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> </div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>         <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )</div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>         {</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>             n = cly - 1 ;</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>             <span class="keywordflow">for</span> ( row = 0 ; row < cly ; row++ )</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>             {</div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>                 ptcdata[col+row*clx] = pcdata[col+n*clx] ;</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>                 ptidata[col+row*clx] = pidata[col+n*clx] ;</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>                 n-- ;</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>             }</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>         }</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> </div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>         <span class="keywordflow">for</span> ( i = 0 ; i < (int) ilx*ily ; i++ )</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>         {</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>             pidata[i] = ptidata[i] ;</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>             pcdata[i] = ptcdata[i] ;</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>         }</div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>         cpl_image_delete(tempCalImage) ;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>         cpl_image_delete(tempImage) ;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>     }</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span> </div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>     <span class="comment">/* determine the max and min pixel value in the first and the last row */</span></div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>     *maxval = -FLT_MAX ;</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>     *minval =  FLT_MAX ;</div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>     mindisp = FLT_MAX ;</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>     <span class="keywordflow">for</span> ( col = 0 ; col < clx ; col++ )</div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>     {</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>         <span class="keywordflow">if</span> ( isnan(pcdata[col]) || pcdata[col] <= 0. )</div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>         {</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>            continue ;</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>         }</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>         disp = (pcdata[col+(clx)*((cly)-1)]</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>                - pcdata[col]) / (float)cly ;</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>         <span class="keywordflow">if</span> ( mindisp > disp )</div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>         {</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>             mindisp = disp ;</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>         }</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>         <span class="keywordflow">if</span> ( *minval >= pcdata[col] )</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>         {</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>             *minval = pcdata[col] ;</div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>         }</div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>         <span class="keywordflow">if</span> ( *maxval <= pcdata[col + (clx)*((cly)-1)] )</div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>         {</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>             *maxval = pcdata[col + (clx)*((cly)-1)] ;</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>         }</div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>     }</div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> </div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>     <span class="comment">/* find the used grating and set the dispersion to the defined value */</span></div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>     <span class="keywordflow">if</span> (*minval > 1.9 )</div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>     {</div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>         <span class="keywordflow">if</span> ( cly > 1024 && cly < 3000)</div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>         {</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>             *dispersion = DISPERSION_K_DITH ;</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>             *centralLambda = CENTRALLAMBDA_K ;</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>         }</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( cly < 2000)</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>         {</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>             *dispersion = DISPERSION_K ;</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>             *centralLambda = CENTRALLAMBDA_K ;</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>         }</div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>         {</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>             *dispersion = DISPERSION_K_DITH/2 ;</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>             *centralLambda = CENTRALLAMBDA_K ;</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>         }</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>     }</div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (*minval < 1.2 )</div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>     {</div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>         <span class="keywordflow">if</span> ( cly > 1024 )</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>         {</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>             *dispersion = DISPERSION_J_DITH ;</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>             *centralLambda = CENTRALLAMBDA_J ;</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>         }</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>         {</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>             *dispersion = DISPERSION_J ;</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>             *centralLambda = CENTRALLAMBDA_J ;</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>         }</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>     }</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>     {</div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>         <span class="keywordflow">if</span> ( *maxval > 2.3 )</div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>         {</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>             <span class="keywordflow">if</span> ( cly > 1024 )</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>             {</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>                 *dispersion = DISPERSION_HK_DITH ;</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>                 *centralLambda = CENTRALLAMBDA_HK ;</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>             }</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>             {</div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>                 *dispersion = DISPERSION_HK ;</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>                 *centralLambda = CENTRALLAMBDA_HK ;</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>             }</div>
+<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>         }</div>
+<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>         <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>         {</div>
+<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>             <span class="keywordflow">if</span> ( cly > 1024 )</div>
+<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>             {</div>
+<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>                 *dispersion = DISPERSION_H_DITH ;</div>
+<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>                 *centralLambda = CENTRALLAMBDA_H ;</div>
+<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>             }</div>
+<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>             {</div>
+<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>                 *dispersion = DISPERSION_H ;</div>
+<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>                 *centralLambda = CENTRALLAMBDA_H ;</div>
+<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>             }</div>
+<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>         }</div>
+<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>     }</div>
+<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span> </div>
+<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>     <span class="comment">/*if ( *minval + (float)n_rows * *dispersion < *maxval ) </span></div>
+<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span> <span class="comment">        sinfo_msg_error(" given number of rows too small!\n");</span></div>
+<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>     <span class="keywordflow">if</span> ( (*maxval - *minval) / *dispersion < (float)cly ) </div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>     {</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" must be something wrong with the wavelength map!\n"</span>);</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>     }</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>    </div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>     <span class="comment">/* determine the central pixel and the lambda in the first image row */</span></div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>     *n_rows = floor(floor(0.5+(*maxval - *minval) / *dispersion)/2+0.5)*2;</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>     *centralpix = *n_rows / 2 ; </div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     minLambda  = *centralLambda - *dispersion * (float)*centralpix ;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>     <span class="comment">/*if ( (minLambda + *dispersion * n_rows) < *maxval ) </span></div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span> <span class="comment">        sinfo_msg_error(" not enough rows defined \n");</span></div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> <span class="comment">    }</span></div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span> <span class="comment">    if ( minLambda  > *minval ) </span></div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> <span class="comment">    {</span></div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span> <span class="comment">        sinfo_msg_error(" not enough rows defined \n");</span></div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span> <span class="comment">        return NULL ;</span></div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span> <span class="comment">    }*/</span></div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> </div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>     <span class="keywordflow">if</span> ( NULL == ( retImage = cpl_image_new( ilx, *n_rows,CPL_TYPE_FLOAT ) ))</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     {</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate a new image\n"</span>);</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>     }</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     podata=cpl_image_get_data_float(retImage);</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     olx=cpl_image_get_size_x(retImage);</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>     oly=cpl_image_get_size_y(retImage);</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>     <span class="comment">/* now go through the columns */</span></div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>     retimagecol = cpl_malloc(*n_rows * <span class="keyword">sizeof</span>(retimagecol[0]));</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>     calcolpos = cpl_malloc(*n_rows * <span class="keyword">sizeof</span>(calcolpos[0]));    </div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>     <span class="keywordflow">for</span> ( col = 0 ; col < olx ; col++ )</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>     {</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>         <span class="comment">/*------------------------------------------------------------------ </span></div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span> <span class="comment">         * copy the columns of the source image and the wavemap image into</span></div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> <span class="comment">         * buffer arrays to speed things up</span></div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>         sum = 0. ;</div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>         {</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>             imagecol[row] = pidata[col + row*ilx] ; </div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>             <span class="keywordflow">if</span> (!isnan(imagecol[row]))</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>             {</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>                 sum += imagecol[row] ;</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>             }</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>             calcol[row]   = pcdata[col + row*clx] ; </div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>         }</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span> </div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>         {</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>             retimagecol[row] = 0. ;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>             calcolpos[row] = -1;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>         }</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> </div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>     <span class="keywordflow">for</span> ( row=0 ; row < cly ; row++)</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>     {</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>         temprow = (calcol[row]- minLambda)/ *dispersion;</div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>         <span class="keywordflow">if</span> (temprow >= 0 && temprow < oly)</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>             calcolpos[(int) temprow]  = row;</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>     }</div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>         </div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>     zeroind = 0 ;</div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>        </div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span> </div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>         {</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>             lambda = minLambda + *dispersion * (float) row ;</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>       </div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>             <span class="comment">/*--------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> <span class="comment">             * lambda must lie between the two available wavelength extremes</span></div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span> <span class="comment">             * otherwise the image pixels are set to ZERO </span></div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>             <span class="keywordflow">if</span> ( row < cly )</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>             {</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>                 <span class="keywordflow">if</span> ( isnan(calcol[row]) )</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>                 {</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>                     zeroind = 1 ;</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>                 } </div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>             }</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span> </div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>             <span class="keywordflow">if</span> ( (lambda < calcol[0]) || </div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>                  (lambda > calcol[(cly)-1]) || zeroind == 1 )</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>             {</div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>                 retimagecol[row] = ZERO ;</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>                 continue ;</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>             }</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>             <span class="comment">/*testrow = 0 ; </span></div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span> <span class="comment">            while ( lambda > calcol[testrow] )</span></div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span> <span class="comment">                testrow++ ;</span></div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span> <span class="comment">            }*/</span></div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>         <span class="keywordflow">if</span> (calcolpos[row]==-1) {</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>                 <span class="keywordflow">if</span>(row>= (*n_rows-1)) calcolpos[row] = calcolpos[row-1];</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>                 <span class="keywordflow">if</span>(row<  (*n_rows-1)) calcolpos[row] = calcolpos[row+1];</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>         }</div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>         <span class="keywordflow">if</span>(calcolpos[row]>0) {</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>           <span class="keywordflow">if</span> (lambda-calcol[calcolpos[row]-1]==0.) {</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>         calcolpos[row]=calcolpos[row]-1;</div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>           }</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>         }</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>         testrow = calcolpos[row];</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span> </div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span> <span class="comment">             * at this point calcol[testrow-1] < lambda <= calcol[testrow] </span></div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span> <span class="comment">             * now determine the box position in which the polint fit is </span></div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span> <span class="comment">               carried through.</span></div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span> <span class="comment">             * the half width of the box is half the number of fit parameters.</span></div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span> <span class="comment">             * Now we determine the start position of the fitting box and treat</span></div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span> <span class="comment">             * the special case of being near the sinfo_edge.</span></div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span> </div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>             <span class="keywordflow">if</span> ( n_params % 2 == 0 )</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>             {</div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>                 half_width = (int)(n_params/2) - 1 ;</div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>             }</div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>             {</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>                 half_width = (int)(n_params/2) ;</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>             }</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span> </div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span> </div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>             <span class="keywordflow">if</span> ( isnan(imagecol[testrow]) )</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>             {</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>                 <span class="keywordflow">for</span> ( i = row-half_width ; i < row-half_width+n_params ; i++ )</div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>                 { </div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>                     <span class="keywordflow">if</span> (i < 0) continue ;</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>                     <span class="keywordflow">if</span> ( i >= oly ) continue  ;</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>                     retimagecol[i] = ZERO ;</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>                 }</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>                 imagecol[testrow] = 0. ;</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>             }</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> </div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>         }</div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span> </div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>         <span class="comment">/* now loop over the rows and establish the lambda for each row */</span></div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>         new_sum = 0. ;</div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>         {</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>             <span class="keywordflow">if</span> ( isnan(retimagecol[row]) )</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>             {</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>                 continue ;</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>             }</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>         lambda = minLambda + *dispersion * (float) row ;</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>       </div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>             <span class="comment">/*--------------------------------------------------------------- </span></div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span> <span class="comment">             * lambda must lie between the two available wavelength extremes</span></div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span> <span class="comment">             * otherwise the image pixels are set to ZERO </span></div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>             <span class="keywordflow">if</span> ( (lambda < calcol[0]) || (lambda > calcol[(cly)-1]) ) </div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>             {</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>                 retimagecol[row] = ZERO ;</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>                 continue ;</div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>             }</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>             <span class="comment">/*testrow = 0 ; </span></div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> <span class="comment">            while ( lambda > calcol[testrow] )</span></div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> <span class="comment">            {</span></div>
+<div class="line"><a name="l02828"></a><span class="lineno"> 2828</span> <span class="comment">                testrow++ ;</span></div>
+<div class="line"><a name="l02829"></a><span class="lineno"> 2829</span> <span class="comment">            }*/</span></div>
+<div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>         <span class="keywordflow">if</span> (calcolpos[row]==-1) {</div>
+<div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>                <span class="keywordflow">if</span>(row >= (*n_rows-1)) calcolpos[row] = calcolpos[row-1];</div>
+<div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>                <span class="keywordflow">if</span>(row <  (*n_rows-1)) calcolpos[row] = calcolpos[row+1];</div>
+<div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>         }</div>
+<div class="line"><a name="l02834"></a><span class="lineno"> 2834</span> </div>
+<div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>         testrow = calcolpos[row];</div>
+<div class="line"><a name="l02836"></a><span class="lineno"> 2836</span> </div>
+<div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>             <span class="comment">/*--------------------------------------------------------------</span></div>
+<div class="line"><a name="l02838"></a><span class="lineno"> 2838</span> <span class="comment">             * at this point calcol[testrow-1] < lambda <= calcol[testrow] </span></div>
+<div class="line"><a name="l02839"></a><span class="lineno"> 2839</span> <span class="comment">             * now determine the box position in which the polynomial </span></div>
+<div class="line"><a name="l02840"></a><span class="lineno"> 2840</span> <span class="comment">               interpolation is carried through.</span></div>
+<div class="line"><a name="l02841"></a><span class="lineno"> 2841</span> <span class="comment">             * the half width of the box is half the number of fit parameters.</span></div>
+<div class="line"><a name="l02842"></a><span class="lineno"> 2842</span> <span class="comment">             * Now we determine the start position of the fitting box and treat</span></div>
+<div class="line"><a name="l02843"></a><span class="lineno"> 2843</span> <span class="comment">             * the special case of being near the sinfo_edge.</span></div>
+<div class="line"><a name="l02844"></a><span class="lineno"> 2844</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02845"></a><span class="lineno"> 2845</span> </div>
+<div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>             <span class="keywordflow">if</span> ( n_params % 2 == 0 )</div>
+<div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>             {</div>
+<div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>                 half_width = (int)(n_params/2) - 1 ;</div>
+<div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>             }</div>
+<div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>             {</div>
+<div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>                 half_width = (int)(n_params/2) ;</div>
+<div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>             }</div>
+<div class="line"><a name="l02854"></a><span class="lineno"> 2854</span> </div>
+<div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>             firstpos   = testrow - half_width ;</div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>             <span class="keywordflow">if</span> ( firstpos < 0 )</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>             {</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>                 firstpos = 0 ;</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>             }</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( firstpos > ((cly)-n_params) )</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>             {</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>                firstpos = cly - n_params ;</div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>             }</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>             <span class="keywordflow">if</span> ( isnan(imagecol[firstpos]) )</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>             {</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>                 retimagecol[row] = ZERO ;</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>                 continue ;</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>             }</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>             </div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span> </div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>             <span class="comment">/* we must rescale the x-values (smaller than 1) </span></div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span> <span class="comment">               for the fitting routine */</span></div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>             dif = calcol[firstpos+n_params-1] - calcol[firstpos] ;</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_params ; i++ )</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>             {</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>             x_renorm[i] = (calcol[firstpos + i] - calcol[firstpos]) / dif ;</div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>         }</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>         </div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>            </div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>             lambda_renorm = ( lambda - calcol[firstpos] ) / dif ; </div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>         </div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>         imageptr = &imagecol[firstpos] ;</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>         </div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>         flag = 0;</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>         poly=sinfo_new_nev_ille(x_renorm, imageptr, </div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>                                     n_params-1, lambda_renorm, &flag);</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>         </div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>             new_sum += poly ;</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>             retimagecol[row] = poly ; </div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>     }</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>     </div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>         <span class="comment">/* now renorm the total flux */</span></div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>         {</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>             <span class="keywordflow">if</span> ( new_sum == 0. ) new_sum = 1. ;</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>             <span class="keywordflow">if</span> ( isnan(retimagecol[row]) )</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>             {</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>                 podata[col+row*olx] = ZERO ;</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>             }</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>             {</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>                 <span class="comment">/* rescaling is commented out because it delivers wrong results</span></div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span> <span class="comment">                   in case of appearance of blanks or bad pixels */</span></div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>                 podata[col+row*olx] = retimagecol[row] <span class="comment">/* * sum/new_sum*/</span> ;</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>             }</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>         }</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span> </div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>     }</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>     cpl_free(retimagecol);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>     cpl_free(calcolpos);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>     cpl_free(imagecol) ;</div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>     cpl_free(calcol) ;</div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>     cpl_free(x_renorm) ;</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>     </div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>     <span class="keywordflow">return</span> retImage ;</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span> }</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span> </div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span> <span class="comment">/*___oOo___*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wave__calibration_8h_source.html b/html/sinfo__wave__calibration_8h_source.html
index 5f90a9e..536b47f 100644
--- a/html/sinfo__wave__calibration_8h_source.html
+++ b/html/sinfo__wave__calibration_8h_source.html
@@ -2,184 +2,215 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wave_calibration.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wave_calibration.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_WAVE_CALIBRATION_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVE_CALIBRATION_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/*******************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_wave_calibration.h,v 1.5 2008/03/25 08:20:43 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  13/07/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * wave_calibration.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines needed for wavelength calibration</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_wavecal.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*</span>
-<a name="l00044"></a>00044 <span class="comment"> * function prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> */</span>
-<a name="l00046"></a>00046 
-<a name="l00054"></a>00054 FitParams ** 
-<a name="l00055"></a>00055 sinfo_new_fit_params( <span class="keywordtype">int</span> n_params ) ;
-<a name="l00056"></a>00056 
-<a name="l00064"></a>00064 <span class="keywordtype">void</span> 
-<a name="l00065"></a>00065 sinfo_new_destroy_fit_params ( FitParams *** params ) ;
-<a name="l00066"></a>00066 
-<a name="l00075"></a>00075 <span class="keywordtype">void</span> 
-<a name="l00076"></a>00076 sinfo_new_dump_fit_params_to_ascii ( FitParams ** params, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename ) ;
-<a name="l00077"></a>00077 
-<a name="l00086"></a>00086 <span class="keywordtype">void</span> 
-<a name="l00087"></a>00087 sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, <span class="keywordtype">char</span> * filename ) ;
-<a name="l00088"></a>00088 
-<a name="l00129"></a>00129 <span class="keywordtype">int</span> 
-<a name="l00130"></a>00130 sinfo_new_find_lines(cpl_image * lineImage,
-<a name="l00131"></a>00131                <span class="keywordtype">float</span>    * wave_position,
-<a name="l00132"></a>00132                <span class="keywordtype">float</span>    * wave_intensity,
-<a name="l00133"></a>00133                <span class="keywordtype">int</span>        n_lines,
-<a name="l00134"></a>00134                <span class="keywordtype">int</span>     ** row_clean,
-<a name="l00135"></a>00135                <span class="keywordtype">float</span>   ** wavelength_clean,
-<a name="l00136"></a>00136                <span class="keywordtype">float</span>      beginWave,
-<a name="l00137"></a>00137                <span class="keywordtype">float</span>      dispersion1,
-<a name="l00138"></a>00138                <span class="keywordtype">float</span>      dispersion2,
-<a name="l00139"></a>00139                <span class="keywordtype">float</span>      mindiff,
-<a name="l00140"></a>00140                <span class="keywordtype">int</span>        halfWidth,
-<a name="l00141"></a>00141                <span class="keywordtype">int</span>      * n_found_lines,
-<a name="l00142"></a>00142                <span class="keywordtype">float</span>      sigma,
-<a name="l00143"></a>00143                <span class="keywordtype">int</span>      * sum_lines ) ;
-<a name="l00144"></a>00144 
-<a name="l00153"></a>00153 <span class="keywordtype">int</span> 
-<a name="l00154"></a>00154 sinfo_new_read_list( <span class="keywordtype">char</span> * listname, 
-<a name="l00155"></a>00155                      <span class="keywordtype">float</span> * lineCenter, 
-<a name="l00156"></a>00156                      <span class="keywordtype">float</span> * lineIntensity ) ;
-<a name="l00157"></a>00157 
-<a name="l00187"></a>00187 <span class="keywordtype">int</span> 
-<a name="l00188"></a>00188 sinfo_new_line_fit (cpl_image  * mergedImage,
-<a name="l00189"></a>00189               FitParams * par,
-<a name="l00190"></a>00190               <span class="keywordtype">float</span>       fwhm,
-<a name="l00191"></a>00191               <span class="keywordtype">int</span>         lineInd,
-<a name="l00192"></a>00192               <span class="keywordtype">int</span>         column,
-<a name="l00193"></a>00193               <span class="keywordtype">int</span>         halfWidth,
-<a name="l00194"></a>00194               <span class="keywordtype">int</span>         lineRow,
-<a name="l00195"></a>00195               <span class="keywordtype">float</span>       min_amplitude,
-<a name="l00196"></a>00196           Vector    *  line,
-<a name="l00197"></a>00197           <span class="keywordtype">int</span>       *  mpar,
-<a name="l00198"></a>00198           <span class="keywordtype">float</span>     *  xdat,
-<a name="l00199"></a>00199           <span class="keywordtype">float</span>     *  wdat ) ;
-<a name="l00200"></a>00200 
-<a name="l00225"></a>00225 <span class="keywordtype">int</span> 
-<a name="l00226"></a>00226 sinfo_new_fit_lines (cpl_image  *  line_image,
-<a name="l00227"></a>00227                FitParams ** allParams,
-<a name="l00228"></a>00228                <span class="keywordtype">float</span>        fwhm,
-<a name="l00229"></a>00229                <span class="keywordtype">int</span>       *  n_lines,
-<a name="l00230"></a>00230                <span class="keywordtype">int</span>       ** row,
-<a name="l00231"></a>00231                <span class="keywordtype">float</span>     ** wavelength,
-<a name="l00232"></a>00232                <span class="keywordtype">int</span>          width,
-<a name="l00233"></a>00233                <span class="keywordtype">float</span>        min_amplitude ) ;
-<a name="l00234"></a>00234 
-<a name="l00257"></a>00257 <span class="keywordtype">float</span> 
-<a name="l00258"></a>00258 sinfo_new_polyfit( FitParams ** par,
-<a name="l00259"></a>00259                <span class="keywordtype">int</span>          column,
-<a name="l00260"></a>00260                <span class="keywordtype">int</span>          n_lines,
-<a name="l00261"></a>00261                <span class="keywordtype">int</span>          n_rows,
-<a name="l00262"></a>00262                <span class="keywordtype">float</span>        dispersion,
-<a name="l00263"></a>00263                <span class="keywordtype">float</span>        max_residual,
-<a name="l00264"></a>00264                <span class="keywordtype">float</span> *      acoefs,
-<a name="l00265"></a>00265                <span class="keywordtype">float</span> *      dacoefs,
-<a name="l00266"></a>00266                <span class="keywordtype">int</span>   *      n_reject,
-<a name="l00267"></a>00267                <span class="keywordtype">int</span>          n_fitcoefs ) ;
-<a name="l00268"></a>00268 
-<a name="l00285"></a>00285 <span class="keywordtype">float</span> 
-<a name="l00286"></a>00286 sinfo_new_coefs_cross_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l00287"></a>00287                       <span class="keywordtype">float</span> *  acoefs,
-<a name="l00288"></a>00288                       <span class="keywordtype">float</span> *  dacoefs,
-<a name="l00289"></a>00289                       <span class="keywordtype">float</span> *  bcoefs,
-<a name="l00290"></a>00290                       <span class="keywordtype">int</span>      n_fitcoefs,
-<a name="l00291"></a>00291                       <span class="keywordtype">float</span>    sigma_factor ) ;
-<a name="l00292"></a>00292 
-<a name="l00311"></a>00311 cpl_image * 
-<a name="l00312"></a>00312 sinfo_new_wave_map(cpl_image * lineImage,
-<a name="l00313"></a>00313                     <span class="keywordtype">float</span>   ** bcoefs,
-<a name="l00314"></a>00314                     <span class="keywordtype">int</span>        n_a_fitcoefs,
-<a name="l00315"></a>00315                     <span class="keywordtype">int</span>        n_b_fitcoefs,
-<a name="l00316"></a>00316                     <span class="keywordtype">float</span>    * wavelength,
-<a name="l00317"></a>00317                     <span class="keywordtype">float</span>    * intensity,
-<a name="l00318"></a>00318                     <span class="keywordtype">int</span>        n_lines,
-<a name="l00319"></a>00319                     <span class="keywordtype">int</span>        magFactor) ;
-<a name="l00320"></a>00320 
-<a name="l00365"></a>00365 <span class="keywordtype">int</span> 
-<a name="l00366"></a>00366 sinfo_new_wavelength_calibration(cpl_image   * image,
-<a name="l00367"></a>00367                            FitParams ** par ,
-<a name="l00368"></a>00368                            <span class="keywordtype">float</span>     ** bcoefs,
-<a name="l00369"></a>00369                            <span class="keywordtype">float</span>      * wave,
-<a name="l00370"></a>00370                            <span class="keywordtype">int</span>          n_lines,
-<a name="l00371"></a>00371                            <span class="keywordtype">int</span>       ** row_clean,
-<a name="l00372"></a>00372                            <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l00373"></a>00373                            <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l00374"></a>00374                            <span class="keywordtype">float</span>        dispersion,
-<a name="l00375"></a>00375                            <span class="keywordtype">int</span>          halfWidth,
-<a name="l00376"></a>00376                            <span class="keywordtype">float</span>        minAmplitude,
-<a name="l00377"></a>00377                            <span class="keywordtype">float</span>        max_residual,
-<a name="l00378"></a>00378                            <span class="keywordtype">float</span>        fwhm,
-<a name="l00379"></a>00379                            <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l00380"></a>00380                            <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l00381"></a>00381                            <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l00382"></a>00382                <span class="keywordtype">float</span>        pixel_tolerance ) ;
-<a name="l00383"></a>00383 
-<a name="l00395"></a>00395 cpl_image * 
-<a name="l00396"></a>00396 sinfo_new_convolve_image_by_gauss(cpl_image * lineImage,
-<a name="l00397"></a>00397                                  <span class="keywordtype">int</span>        hw ) ;
-<a name="l00398"></a>00398 
-<a name="l00438"></a>00438 cpl_image * 
-<a name="l00439"></a>00439 sinfo_new_defined_resampling(cpl_image * image,
-<a name="l00440"></a>00440                               cpl_image * calimage,
-<a name="l00441"></a>00441                               <span class="keywordtype">int</span>        n_params,
-<a name="l00442"></a>00442                               <span class="keywordtype">int</span>*        n_rows,
-<a name="l00443"></a>00443                               <span class="keywordtype">double</span>   * dispersion,
-<a name="l00444"></a>00444                               <span class="keywordtype">float</span>    * minval,
-<a name="l00445"></a>00445                               <span class="keywordtype">float</span>    * maxval,
-<a name="l00446"></a>00446                               <span class="keywordtype">double</span>   * centralLambda,
-<a name="l00447"></a>00447                               <span class="keywordtype">int</span>    * centralpix ) ;
-<a name="l00448"></a>00448 
-<a name="l00449"></a>00449 
-<a name="l00450"></a>00450 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wave_calibration.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_WAVE_CALIBRATION_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVE_CALIBRATION_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*******************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_wave_calibration.h,v 1.5 2008/03/25 08:20:43 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  13/07/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * wave_calibration.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines needed for wavelength calibration</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_wavecal.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * function prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> FitParams ** </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> sinfo_new_fit_params( <span class="keywordtype">int</span> n_params ) ;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> sinfo_new_destroy_fit_params ( FitParams *** params ) ;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> sinfo_new_dump_fit_params_to_ascii ( FitParams ** params, <span class="keyword">const</span> <span class="keywordtype">char</span> * filename ) ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> sinfo_new_dump_ascii_to_fit_params ( FitParams ** params, <span class="keywordtype">char</span> * filename ) ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> sinfo_new_find_lines(cpl_image * lineImage,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                <span class="keywordtype">float</span>    * wave_position,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                <span class="keywordtype">float</span>    * wave_intensity,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                <span class="keywordtype">int</span>        n_lines,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                <span class="keywordtype">int</span>     ** row_clean,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                <span class="keywordtype">float</span>   ** wavelength_clean,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                <span class="keywordtype">float</span>      beginWave,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                <span class="keywordtype">float</span>      dispersion1,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                <span class="keywordtype">float</span>      dispersion2,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                <span class="keywordtype">float</span>      mindiff,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>                <span class="keywordtype">int</span>        halfWidth,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>                <span class="keywordtype">int</span>      * n_found_lines,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                <span class="keywordtype">float</span>      sigma,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>                <span class="keywordtype">int</span>      * sum_lines ) ;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> sinfo_new_read_list( <span class="keywordtype">char</span> * listname, </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                      <span class="keywordtype">float</span> * lineCenter, </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                      <span class="keywordtype">float</span> * lineIntensity ) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> sinfo_new_line_fit (cpl_image  * mergedImage,</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>               FitParams * par,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>               <span class="keywordtype">float</span>       fwhm,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>               <span class="keywordtype">int</span>         lineInd,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>               <span class="keywordtype">int</span>         column,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>               <span class="keywordtype">int</span>         halfWidth,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>               <span class="keywordtype">int</span>         lineRow,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>               <span class="keywordtype">float</span>       min_amplitude,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>           Vector    *  line,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>           <span class="keywordtype">int</span>       *  mpar,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>           <span class="keywordtype">float</span>     *  xdat,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>           <span class="keywordtype">float</span>     *  wdat ) ;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span> sinfo_new_fit_lines (cpl_image  *  line_image,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>                FitParams ** allParams,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>                <span class="keywordtype">int</span>       *  n_lines,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                <span class="keywordtype">int</span>       ** row,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                <span class="keywordtype">float</span>     ** wavelength,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>                <span class="keywordtype">int</span>          width,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                <span class="keywordtype">float</span>        min_amplitude ) ;</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> sinfo_new_polyfit( FitParams ** par,</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                <span class="keywordtype">int</span>          column,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                <span class="keywordtype">int</span>          n_lines,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                <span class="keywordtype">int</span>          n_rows,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                <span class="keywordtype">float</span> *      acoefs,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>                <span class="keywordtype">float</span> *      dacoefs,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>                <span class="keywordtype">int</span>   *      n_reject,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>                <span class="keywordtype">int</span>          n_fitcoefs ) ;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> sinfo_new_coefs_cross_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                       <span class="keywordtype">float</span> *  acoefs,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                       <span class="keywordtype">float</span> *  dacoefs,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                       <span class="keywordtype">float</span> *  bcoefs,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                       <span class="keywordtype">int</span>      n_fitcoefs,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                       <span class="keywordtype">float</span>    sigma_factor ) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span> cpl_image * </div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> sinfo_new_wave_map(cpl_image * lineImage,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                     <span class="keywordtype">float</span>   ** bcoefs,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                     <span class="keywordtype">int</span>        n_a_fitcoefs,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>                     <span class="keywordtype">int</span>        n_b_fitcoefs,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>                     <span class="keywordtype">float</span>    * wavelength,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>                     <span class="keywordtype">float</span>    * intensity,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>                     <span class="keywordtype">int</span>        n_lines,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>                     <span class="keywordtype">int</span>        magFactor) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span> sinfo_new_wavelength_calibration(cpl_image   * image,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                            FitParams ** par ,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                            <span class="keywordtype">float</span>     ** bcoefs,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                            <span class="keywordtype">float</span>      * wave,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                            <span class="keywordtype">int</span>          n_lines,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                            <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                            <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>                            <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                            <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>                            <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                            <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                            <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                            <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>                            <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                            <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>                            <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                <span class="keywordtype">float</span>        pixel_tolerance ) ;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> cpl_image * </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> sinfo_new_convolve_image_by_gauss(cpl_image * lineImage,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                  <span class="keywordtype">int</span>        hw ) ;</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span> cpl_image * </div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span> sinfo_new_defined_resampling(cpl_image * image,</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>                               cpl_image * calimage,</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>                               <span class="keywordtype">int</span>        n_params,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>                               <span class="keywordtype">int</span>*        n_rows,</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>                               <span class="keywordtype">double</span>   * dispersion,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>                               <span class="keywordtype">float</span>    * minval,</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>                               <span class="keywordtype">float</span>    * maxval,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>                               <span class="keywordtype">double</span>   * centralLambda,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>                               <span class="keywordtype">int</span>    * centralpix ) ;</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> </div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal_8c_source.html b/html/sinfo__wavecal_8c_source.html
index 5a530e0..8a274e2 100644
--- a/html/sinfo__wavecal_8c_source.html
+++ b/html/sinfo__wavecal_8c_source.html
@@ -2,3589 +2,3620 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*************************************************************************</span>
-<a name="l00020"></a>00020 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00021"></a>00021 <span class="comment">*</span>
-<a name="l00022"></a>00022 <span class="comment">* </span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* who       when      what</span>
-<a name="l00025"></a>00025 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00026"></a>00026 <span class="comment">* schreib  22/01/02  created</span>
-<a name="l00027"></a>00027 <span class="comment">*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="comment">/************************************************************************</span>
-<a name="l00030"></a>00030 <span class="comment">*   NAME</span>
-<a name="l00031"></a>00031 <span class="comment">*     sinfo_wavecal.c -</span>
-<a name="l00032"></a>00032 <span class="comment">*     routines needed for wavelength calibration with smoothing only</span>
-<a name="l00033"></a>00033 <span class="comment">*     within the slitlets</span>
-<a name="l00034"></a>00034 <span class="comment">*</span>
-<a name="l00035"></a>00035 <span class="comment">*   SYNOPSIS</span>
-<a name="l00036"></a>00036 <span class="comment">*  1) Bcoeffs * sinfo_new_b_coeffs( int n_slitlets,</span>
-<a name="l00037"></a>00037 <span class="comment">*                           int n_acoeffs,</span>
-<a name="l00038"></a>00038 <span class="comment">*                           int n_bcoeffs )</span>
-<a name="l00039"></a>00039 <span class="comment">*  2) void sinfo_new_destroy_b_coeffs ( Bcoeffs * bco )</span>
-<a name="l00040"></a>00040 <span class="comment">*  3) int   sinfo_new_coeffs_cross_slit_fit ( int      n_columns,</span>
-<a name="l00041"></a>00041 <span class="comment">*                                float ** acoefs,</span>
-<a name="l00042"></a>00042 <span class="comment">*                                float ** dacoefs,</span>
-<a name="l00043"></a>00043 <span class="comment">*                                Bcoeffs* bco,</span>
-<a name="l00044"></a>00044 <span class="comment">*                                float    sigma_factor,</span>
-<a name="l00045"></a>00045 <span class="comment">*                                float    dispersion,</span>
-<a name="l00046"></a>00046 <span class="comment">*                                float    pixel_dist,</span>
-<a name="l00047"></a>00047 <span class="comment">*                                float  * chisq )</span>
-<a name="l00048"></a>00048 <span class="comment">*  4) cpl_image * sinfo_new_wave_map_slit ( float ** acoefs,</span>
-<a name="l00049"></a>00049 <span class="comment">*                              int      n_acoefs,</span>
-<a name="l00050"></a>00050 <span class="comment">*                              int      n_rows,</span>
-<a name="l00051"></a>00051 <span class="comment">*                              int      n_columns )</span>
-<a name="l00052"></a>00052 <span class="comment">*  5) cpl_image * sinfo_new_wave_cal( cpl_image   * image, </span>
-<a name="l00053"></a>00053 <span class="comment">*                         FitParams ** par ,</span>
-<a name="l00054"></a>00054 <span class="comment">*                         float     ** abuf,</span>
-<a name="l00055"></a>00055 <span class="comment">*                         int          n_slitlets,</span>
-<a name="l00056"></a>00056 <span class="comment">*                         int       ** row_clean,</span>
-<a name="l00057"></a>00057 <span class="comment">*                         float     ** wavelength_clean,</span>
-<a name="l00058"></a>00058 <span class="comment">*                         int        * n_found_lines,</span>
-<a name="l00059"></a>00059 <span class="comment">*                         float        dispersion,</span>
-<a name="l00060"></a>00060 <span class="comment">*                         int          halfWidth,</span>
-<a name="l00061"></a>00061 <span class="comment">*                         float        minAmplitude,</span>
-<a name="l00062"></a>00062 <span class="comment">*                         float        max_residual,</span>
-<a name="l00063"></a>00063 <span class="comment">*                         float        fwhm,</span>
-<a name="l00064"></a>00064 <span class="comment">*                         int          n_a_fitcoefs,</span>
-<a name="l00065"></a>00065 <span class="comment">*                         int          n_b_fitcoefs,</span>
-<a name="l00066"></a>00066 <span class="comment">*                         float        sigmaFactor,</span>
-<a name="l00067"></a>00067 <span class="comment">*                         float        pixel_dist )</span>
-<a name="l00068"></a>00068 <span class="comment">*  6) int sinfo_new_check_for_fake_lines ( FitParams ** par,</span>
-<a name="l00069"></a>00069 <span class="comment">*                             float        dispersion,</span>
-<a name="l00070"></a>00070 <span class="comment">*                             float     ** wavelength_clean,</span>
-<a name="l00071"></a>00071 <span class="comment">*                             int       ** row_clean,</span>
-<a name="l00072"></a>00072 <span class="comment">*                             int        * n_found_lines,</span>
-<a name="l00073"></a>00073 <span class="comment">*                             int          n_columns,</span>
-<a name="l00074"></a>00074 <span class="comment">*                             float        pixel_tolerance )</span>
-<a name="l00075"></a>00075 <span class="comment">*  7) cpl_image * sinfo_new_create_shifted_slit_wavemap ( cpl_image * lineIm,</span>
-<a name="l00076"></a>00076 <span class="comment">*                                           float    ** coeffs,</span>
-<a name="l00077"></a>00077 <span class="comment">*                                           int      n_fitcoeffs,</span>
-<a name="l00078"></a>00078 <span class="comment">*                                           float  * wavelength,</span>
-<a name="l00079"></a>00079 <span class="comment">*                                           float  * intensity,</span>
-<a name="l00080"></a>00080 <span class="comment">*                                           int      n_lines,</span>
-<a name="l00081"></a>00081 <span class="comment">*                                           int      magFactor )</span>
-<a name="l00082"></a>00082 <span class="comment">*   </span>
-<a name="l00083"></a>00083 <span class="comment">*   DESCRIPTION</span>
-<a name="l00084"></a>00084 <span class="comment">*  1) allocates memory for a new array of </span>
-<a name="l00085"></a>00085 <span class="comment">*     Bcoeffs data structures</span>
-<a name="l00086"></a>00086 <span class="comment">*  2) frees memory of an array of Bcoeffs data structures</span>
-<a name="l00087"></a>00087 <span class="comment">*  3) Fits each single polynomial coefficient acoefs resulting from </span>
-<a name="l00088"></a>00088 <span class="comment">      sinfo_polyfit </span>
-<a name="l00089"></a>00089 <span class="comment">*     across the columns of each slitlet and use the result of this fit to</span>
-<a name="l00090"></a>00090 <span class="comment">*     smooth the acoefs.</span>
-<a name="l00091"></a>00091 <span class="comment">*  4) builds a new wavelength calibration map as fits image</span>
-<a name="l00092"></a>00092 <span class="comment">*     by using the fit coeficients.</span>
-<a name="l00093"></a>00093 <span class="comment">*  5) this routine takes an image from a calibration</span>
-<a name="l00094"></a>00094 <span class="comment">*     emission lamp and delivers the smoothed fit coefficients of  </span>
-<a name="l00095"></a>00095 <span class="comment">*     a polynomial fit along the columns of the line positions as output. </span>
-<a name="l00096"></a>00096 <span class="comment">*     This routine expects Nyquist sampled spectra </span>
-<a name="l00097"></a>00097 <span class="comment">*     (either an interleaved image or an image convolved with an </span>
-<a name="l00098"></a>00098 <span class="comment">*      appropriate function in spectral direction)</span>
-<a name="l00099"></a>00099 <span class="comment">*  6) this routine searches for successfully fitted fake lines like</span>
-<a name="l00100"></a>00100 <span class="comment">*     bad pixels by comparing the found line positons with </span>
-<a name="l00101"></a>00101 <span class="comment">*     estimated template positions. This routine should be</span>
-<a name="l00102"></a>00102 <span class="comment">*     inserted in the wavelength calibration routine just after</span>
-<a name="l00103"></a>00103 <span class="comment">*     the sinfo_fitLines() routine.</span>
-<a name="l00104"></a>00104 <span class="comment">*  7) This routine cross-correlates a shifted emission line frames </span>
-<a name="l00105"></a>00105 <span class="comment">*     and determines the shift to the old one which is given by</span>
-<a name="l00106"></a>00106 <span class="comment">*     its polynomial coefficients.</span>
-<a name="l00107"></a>00107 <span class="comment">*     Then the a0 coefficients is recalculated and afterwards</span>
-<a name="l00108"></a>00108 <span class="comment">*     a new wavelength calibration map is generated using the </span>
-<a name="l00109"></a>00109 <span class="comment">*     already calculated smoothed polynomial coefficients.</span>
-<a name="l00110"></a>00110 <span class="comment">*</span>
-<a name="l00111"></a>00111 <span class="comment">*   FILES</span>
-<a name="l00112"></a>00112 <span class="comment">*</span>
-<a name="l00113"></a>00113 <span class="comment">*   ENVIRONMENT</span>
-<a name="l00114"></a>00114 <span class="comment">*</span>
-<a name="l00115"></a>00115 <span class="comment">*   RETURN VALUES </span>
-<a name="l00116"></a>00116 <span class="comment">*</span>
-<a name="l00117"></a>00117 <span class="comment">*   CAUTIONS </span>
-<a name="l00118"></a>00118 <span class="comment">*</span>
-<a name="l00119"></a>00119 <span class="comment">*   EXAMPLES</span>
-<a name="l00120"></a>00120 <span class="comment">*</span>
-<a name="l00121"></a>00121 <span class="comment">*   SEE ALSO</span>
-<a name="l00122"></a>00122 <span class="comment">*</span>
-<a name="l00123"></a>00123 <span class="comment">*   BUGS   </span>
-<a name="l00124"></a>00124 <span class="comment">*</span>
-<a name="l00125"></a>00125 <span class="comment">*------------------------------------------------------------------------</span>
-<a name="l00126"></a>00126 <span class="comment">*/</span>
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00129"></a>00129 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00130"></a>00130 <span class="preprocessor">#endif</span>
-<a name="l00131"></a>00131 <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span>
-<a name="l00132"></a>00132 <span class="preprocessor">#include <math.h></span>
-<a name="l00133"></a>00133 
-<a name="l00134"></a>00134 <span class="comment">/* </span>
-<a name="l00135"></a>00135 <span class="comment"> * System Headers</span>
-<a name="l00136"></a>00136 <span class="comment"> */</span>
-<a name="l00137"></a>00137 <span class="comment">/* </span>
-<a name="l00138"></a>00138 <span class="comment"> * Local Headers</span>
-<a name="l00139"></a>00139 <span class="comment"> */</span>
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141 <span class="preprocessor">#include "sinfo_function_1d.h"</span>
-<a name="l00142"></a>00142 <span class="preprocessor">#include "sinfo_recipes.h"</span>
-<a name="l00143"></a>00143 <span class="preprocessor">#include "sinfo_wavecal.h"</span>
-<a name="l00144"></a>00144 <span class="preprocessor">#include "sinfo_wave_calibration.h"</span>
-<a name="l00145"></a>00145 <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span>
-<a name="l00146"></a>00146 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00147"></a>00147 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="preprocessor">#include "sinfo_svd.h"</span>
-<a name="l00150"></a>00150 <span class="comment">/*</span>
-<a name="l00151"></a>00151 <span class="comment"> * Private functions prototype</span>
-<a name="l00152"></a>00152 <span class="comment"> */</span>
-<a name="l00153"></a>00153 <span class="keyword">static</span> Bcoeffs * 
-<a name="l00154"></a>00154 sinfo_new_b_coeffs( <span class="keywordtype">int</span> n_slitlets,
-<a name="l00155"></a>00155                       <span class="keywordtype">int</span> n_acoeffs,
-<a name="l00156"></a>00156                       <span class="keywordtype">int</span> n_bcoeffs ) ;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00159"></a>00159 sinfo_new_destroy_b_coeffs ( Bcoeffs * bco ) ;
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161 <span class="keyword">static</span> <span class="keywordtype">int</span>   
-<a name="l00162"></a>00162 sinfo_new_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l00163"></a>00163                            <span class="keywordtype">float</span> ** acoefs,
-<a name="l00164"></a>00164                            <span class="keywordtype">float</span> ** dacoefs,
-<a name="l00165"></a>00165                            Bcoeffs* bco,
-<a name="l00166"></a>00166                            <span class="keywordtype">float</span>    sigma_factor,
-<a name="l00167"></a>00167                            <span class="keywordtype">float</span>    dispersion,
-<a name="l00168"></a>00168                            <span class="keywordtype">float</span>    pixel_dist,
-<a name="l00169"></a>00169                            <span class="keywordtype">float</span>  * chisq ) ;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 <span class="keyword">static</span> <span class="keywordtype">int</span>   
-<a name="l00173"></a>00173 sinfo_new_spred_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l00174"></a>00174                             <span class="keywordtype">float</span> ** acoefs,
-<a name="l00175"></a>00175                             <span class="keywordtype">float</span> ** dacoefs,
-<a name="l00176"></a>00176                             Bcoeffs* bco,
-<a name="l00177"></a>00177                             <span class="keywordtype">float</span>    sigma_factor,
-<a name="l00178"></a>00178                             <span class="keywordtype">float</span>    dispersion,
-<a name="l00179"></a>00179                             <span class="keywordtype">float</span>    pixel_dist,
-<a name="l00180"></a>00180                             <span class="keywordtype">float</span>  * chisq,
-<a name="l00181"></a>00181                           <span class="keywordtype">float</span> ** sinfo_slit_pos) ;
-<a name="l00182"></a>00182 <span class="comment">/*</span>
-<a name="l00183"></a>00183 <span class="comment"> * function definitions</span>
-<a name="l00184"></a>00184 <span class="comment"> */</span>
-<a name="l00200"></a>00200 <span class="keyword">static</span> Bcoeffs * 
-<a name="l00201"></a>00201 sinfo_new_b_coeffs( <span class="keywordtype">int</span> n_slitlets,
-<a name="l00202"></a>00202                       <span class="keywordtype">int</span> n_acoeffs,
-<a name="l00203"></a>00203                       <span class="keywordtype">int</span> n_bcoeffs )
-<a name="l00204"></a>00204 {
-<a name="l00205"></a>00205     <span class="keywordtype">int</span> i, n ;
-<a name="l00206"></a>00206     Bcoeffs * returnbco ;
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208     <span class="keywordflow">if</span>(NULL == (returnbco=(Bcoeffs*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(Bcoeffs))) )
-<a name="l00209"></a>00209     {
-<a name="l00210"></a>00210         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;
-<a name="l00211"></a>00211         <span class="keywordflow">return</span> NULL ;
-<a name="l00212"></a>00212     }
-<a name="l00213"></a>00213     returnbco -> n_slitlets = n_slitlets ;
-<a name="l00214"></a>00214     returnbco -> n_acoeffs  = n_acoeffs ;
-<a name="l00215"></a>00215     returnbco -> n_bcoeffs  = n_bcoeffs ;
-<a name="l00216"></a>00216     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )
-<a name="l00217"></a>00217     {
-<a name="l00218"></a>00218         returnbco[i].slitlet = i ;
-<a name="l00219"></a>00219         <span class="keywordflow">if</span> ( NULL == (returnbco[i].b = (<span class="keywordtype">float</span>**)cpl_calloc(n_acoeffs, 
-<a name="l00220"></a>00220                                                 <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)) ) ) 
-<a name="l00221"></a>00221         {
-<a name="l00222"></a>00222             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;
-<a name="l00223"></a>00223             <span class="keywordflow">return</span> NULL ;
-<a name="l00224"></a>00224         }
-<a name="l00225"></a>00225         <span class="keywordflow">for</span> ( n = 0 ; n < n_acoeffs ; n++ )
-<a name="l00226"></a>00226         {
-<a name="l00227"></a>00227             <span class="keywordflow">if</span> ( NULL == (returnbco[i].b[n] = (<span class="keywordtype">float</span>*)cpl_calloc(n_bcoeffs, 
-<a name="l00228"></a>00228                                                <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l00229"></a>00229             {
-<a name="l00230"></a>00230                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;
-<a name="l00231"></a>00231                 <span class="keywordflow">return</span> NULL ;
-<a name="l00232"></a>00232             }
-<a name="l00233"></a>00233         }  
-<a name="l00234"></a>00234     }
-<a name="l00235"></a>00235     <span class="keywordflow">return</span> returnbco ;
-<a name="l00236"></a>00236 }
-<a name="l00237"></a>00237 
-<a name="l00245"></a>00245 <span class="keyword">static</span> <span class="keywordtype">void</span> 
-<a name="l00246"></a>00246 sinfo_new_destroy_b_coeffs ( Bcoeffs * bco )
-<a name="l00247"></a>00247 {
-<a name="l00248"></a>00248     <span class="keywordtype">int</span> i, n ;
-<a name="l00249"></a>00249   
-<a name="l00250"></a>00250     <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_slitlets ; i++ )
-<a name="l00251"></a>00251     {
-<a name="l00252"></a>00252         <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_acoeffs ; n++ )
-<a name="l00253"></a>00253         {
-<a name="l00254"></a>00254             cpl_free (bco[i].b[n]) ;
-<a name="l00255"></a>00255         }
-<a name="l00256"></a>00256         cpl_free(bco[i].b) ;
-<a name="l00257"></a>00257     }
-<a name="l00258"></a>00258     
-<a name="l00259"></a>00259     cpl_free (bco) ;  
-<a name="l00260"></a>00260 }
-<a name="l00261"></a>00261 
-<a name="l00287"></a>00287 <span class="keyword">static</span> <span class="keywordtype">int</span>   
-<a name="l00288"></a>00288 sinfo_new_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l00289"></a>00289                            <span class="keywordtype">float</span> ** acoefs,
-<a name="l00290"></a>00290                            <span class="keywordtype">float</span> ** dacoefs,
-<a name="l00291"></a>00291                            Bcoeffs* bco,
-<a name="l00292"></a>00292                            <span class="keywordtype">float</span>    sigma_factor,
-<a name="l00293"></a>00293                            <span class="keywordtype">float</span>    dispersion,
-<a name="l00294"></a>00294                            <span class="keywordtype">float</span>    pixel_dist,
-<a name="l00295"></a>00295                            <span class="keywordtype">float</span>  * chisq )
-<a name="l00296"></a>00296 {
-<a name="l00297"></a>00297     <span class="keywordtype">float</span> col_index;
-<a name="l00298"></a>00298     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;
-<a name="l00299"></a>00299     <span class="keywordtype">float</span> * acoefsclean ;
-<a name="l00300"></a>00300     <span class="keywordtype">double</span> sum, sumq, mean ;
-<a name="l00301"></a>00301     <span class="keywordtype">double</span> sigma ;
-<a name="l00302"></a>00302     <span class="keywordtype">double</span> cliphi, cliplo ;
-<a name="l00303"></a>00303     <span class="keywordtype">float</span> offset ;
-<a name="l00304"></a>00304     <span class="keywordtype">float</span> threshold ;
-<a name="l00305"></a>00305     <span class="keywordtype">float</span>* sub_col_index=NULL ;
-<a name="l00306"></a>00306     <span class="keywordtype">float</span>* sub_acoefs=NULL;
-<a name="l00307"></a>00307     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;
-<a name="l00308"></a>00308     <span class="keywordtype">float</span>* wcoefs=NULL ;
-<a name="l00309"></a>00309     <span class="keywordtype">int</span>* edge=NULL ;
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     <span class="keywordtype">int</span> ed1, ed2 ;
-<a name="l00312"></a>00312     <span class="keywordtype">int</span> i, n, num, ndata ;
-<a name="l00313"></a>00313     <span class="keywordtype">int</span> nc, ns ;
-<a name="l00314"></a>00314     <span class="keywordtype">int</span> loc_index ;
-<a name="l00315"></a>00315     <span class="keywordtype">int</span> last_i=PIXEL;
-<a name="l00316"></a>00316     
-<a name="l00317"></a>00317     <span class="keywordflow">if</span> ( n_columns < 1 )
-<a name="l00318"></a>00318     {
-<a name="l00319"></a>00319         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of image columns given"</span>) ;
-<a name="l00320"></a>00320         <span class="keywordflow">return</span> -1 ;
-<a name="l00321"></a>00321     }
-<a name="l00322"></a>00322     <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )
-<a name="l00323"></a>00323     {
-<a name="l00324"></a>00324         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"acoeffs or errors of coefficients are not given"</span>) ;
-<a name="l00325"></a>00325         <span class="keywordflow">return</span> -1 ;
-<a name="l00326"></a>00326     }
-<a name="l00327"></a>00327     <span class="keywordflow">if</span> ( bco == NULL )
-<a name="l00328"></a>00328     {
-<a name="l00329"></a>00329         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"bcoeffs are not allocated"</span>) ;
-<a name="l00330"></a>00330         <span class="keywordflow">return</span> -1 ;
-<a name="l00331"></a>00331     }
-<a name="l00332"></a>00332     <span class="keywordflow">if</span> ( sigma_factor <= 0. )
-<a name="l00333"></a>00333     {
-<a name="l00334"></a>00334         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible sigma_factor given!"</span>) ;
-<a name="l00335"></a>00335         <span class="keywordflow">return</span> -1 ;
-<a name="l00336"></a>00336     }
-<a name="l00337"></a>00337     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l00338"></a>00338     {
-<a name="l00339"></a>00339         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given!"</span>) ;
-<a name="l00340"></a>00340         <span class="keywordflow">return</span> -1 ;
-<a name="l00341"></a>00341     }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343     <span class="comment">/*-------------------------------------------------------------------------</span>
-<a name="l00344"></a>00344 <span class="comment">     * search for the slitlet edges by comparing the a0 coefficients along </span>
-<a name="l00345"></a>00345 <span class="comment">       the columns if a bigger deviation occurrs it is assumed that there </span>
-<a name="l00346"></a>00346 <span class="comment">       is an edge.</span>
-<a name="l00347"></a>00347 <span class="comment">     */</span>
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     edge=cpl_calloc(bco->n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l00350"></a>00350     wcoefs=cpl_calloc(bco->n_bcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00351"></a>00351 
-<a name="l00352"></a>00352     n = 0 ;
-<a name="l00353"></a>00353     threshold = pixel_dist * fabs(dispersion) ;
-<a name="l00354"></a>00354     <span class="keywordflow">for</span> ( i = PIXEL ; i < n_columns - PIXEL ; )
-<a name="l00355"></a>00355     {
-<a name="l00356"></a>00356         <span class="keywordflow">if</span> ( !isnan(acoefs[0][i+1]) && 
-<a name="l00357"></a>00357                     acoefs[0][i+1] != 0. && 
-<a name="l00358"></a>00358                     acoefs[0][i] != 0.  &&
-<a name="l00359"></a>00359                     dacoefs[0][i+1] != 0.)
-<a name="l00360"></a>00360         {
-<a name="l00361"></a>00361             <span class="keywordflow">if</span> ( isnan(acoefs[0][i]) || acoefs[0][i] == 0. )
-<a name="l00362"></a>00362             {
-<a name="l00363"></a>00363                 <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i-1]) >= threshold )
-<a name="l00364"></a>00364                 {
-<a name="l00365"></a>00365            <span class="keywordflow">if</span>( (i-last_i) < 60 && (i > 80) ) {
-<a name="l00366"></a>00366              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"skip1 i=%d diff=%d\n"</span>,i,i-last_i);
-<a name="l00367"></a>00367              <span class="keywordflow">goto</span> skip;
-<a name="l00368"></a>00368                    } <span class="keywordflow">else</span> {  
-<a name="l00369"></a>00369              <span class="comment">/*</span>
-<a name="l00370"></a>00370 <span class="comment">                 sinfo_msg("diff1=%f i=%d threshold-%f size=%d\n", </span>
-<a name="l00371"></a>00371 <span class="comment">                               fabs(acoefs[0][i+1] - acoefs[0][i-1]),i,</span>
-<a name="l00372"></a>00372 <span class="comment">                               threshold,i-last_i);</span>
-<a name="l00373"></a>00373 <span class="comment">             */</span>
-<a name="l00374"></a>00374                      edge[n] = i+1 ;
-<a name="l00375"></a>00375              <span class="comment">//sinfo_msg("1found edge: %d",edge[n]);</span>
-<a name="l00376"></a>00376                      n++ ;
-<a name="l00377"></a>00377                      last_i = i;
-<a name="l00378"></a>00378                      i += PIXEL ;
-<a name="l00379"></a>00379            }
-<a name="l00380"></a>00380                 }
-<a name="l00381"></a>00381             }
-<a name="l00382"></a>00382             <span class="keywordflow">else</span>
-<a name="l00383"></a>00383             {
-<a name="l00384"></a>00384                 <span class="keywordflow">if</span> ((fabs(acoefs[0][i+1] - acoefs[0][i]) >= threshold) || 
-<a name="l00385"></a>00385                     (i-last_i) > 63 )
-<a name="l00386"></a>00386                 {
-<a name="l00387"></a>00387            <span class="keywordflow">if</span>( (i-last_i) < 60 && ((i> 80) || (i<PIXEL+2))) {
-<a name="l00388"></a>00388              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"skip2 i=%d diff=%d\n"</span>,i,i-last_i);
-<a name="l00389"></a>00389              <span class="keywordflow">goto</span> skip;
-<a name="l00390"></a>00390                    } <span class="keywordflow">else</span> {  
-<a name="l00391"></a>00391                       
-<a name="l00392"></a>00392              <span class="comment">/*</span>
-<a name="l00393"></a>00393 <span class="comment">                      sinfo_msg_warning("diff2=%f i=%d threshold-%f size=%d",</span>
-<a name="l00394"></a>00394 <span class="comment">                      fabs(acoefs[0][i+1] - acoefs[0][i]),</span>
-<a name="l00395"></a>00395 <span class="comment">                      i,threshold,i-last_i);                      </span>
-<a name="l00396"></a>00396 <span class="comment">                      */</span>
-<a name="l00397"></a>00397               
-<a name="l00398"></a>00398  
-<a name="l00399"></a>00399                   
-<a name="l00400"></a>00400                       edge[n] = i+1 ;
-<a name="l00401"></a>00401                 <span class="comment">//sinfo_msg("2found edge: %d",edge[n]);</span>
-<a name="l00402"></a>00402                       n++ ;
-<a name="l00403"></a>00403                       last_i = i;
-<a name="l00404"></a>00404                       i += PIXEL ;
-<a name="l00405"></a>00405            }
-<a name="l00406"></a>00406                 }
-<a name="l00407"></a>00407             }
-<a name="l00408"></a>00408         <span class="comment">/* sometimes a slitlet may be lost due to divergences in acoeffs[0]</span>
-<a name="l00409"></a>00409 <span class="comment">               we try to recover it */</span>
-<a name="l00410"></a>00410             <span class="keywordflow">if</span>( ( (i-last_i) > 63 ) && 
-<a name="l00411"></a>00411                 ( isnan(fabs(acoefs[0][i+1] - acoefs[0][i])) ||
-<a name="l00412"></a>00412                   isnan(fabs(acoefs[0][i+1] - acoefs[0][i-1])) ) ) 
-<a name="l00413"></a>00413           {
-<a name="l00414"></a>00414         edge[n] = i+1 ;
-<a name="l00415"></a>00415         <span class="comment">//sinfo_msg("3found edge: %d",edge[n]);</span>
-<a name="l00416"></a>00416         n++ ;
-<a name="l00417"></a>00417         last_i = i;
-<a name="l00418"></a>00418                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"recovered slitlet edge i=%d"</span>,i);
-<a name="l00419"></a>00419         i += PIXEL ;
-<a name="l00420"></a>00420 
-<a name="l00421"></a>00421           }
-<a name="l00422"></a>00422     }
-<a name="l00423"></a>00423       skip:
-<a name="l00424"></a>00424         i++ ;
-<a name="l00425"></a>00425     }
-<a name="l00426"></a>00426     <span class="comment">/*</span>
-<a name="l00427"></a>00427 <span class="comment">    printf("X min %d max %d last %d\n", PIXEL, n_columns - PIXEL, i);</span>
-<a name="l00428"></a>00428 <span class="comment">    printf("n=%d check=%d\n",n,bco->n_slitlets - 1);</span>
-<a name="l00429"></a>00429 <span class="comment">    */</span>
-<a name="l00430"></a>00430     <span class="keywordflow">if</span> ( n != bco->n_slitlets - 1 )
-<a name="l00431"></a>00431     {
-<a name="l00432"></a>00432         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find the right number "</span>
-<a name="l00433"></a>00433                         <span class="stringliteral">"of slitlets, found: %d"</span>,n+1) ;
-<a name="l00434"></a>00434         <span class="keywordflow">return</span> -1 ;
-<a name="l00435"></a>00435     }
-<a name="l00436"></a>00436  
-<a name="l00437"></a>00437     sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00438"></a>00438     sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l00439"></a>00439     sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441     <span class="comment">/* go through the coefficents indices */</span>
-<a name="l00442"></a>00442     <span class="keywordflow">for</span> ( loc_index = 0 ; loc_index < bco->n_acoeffs ; loc_index++ )
-<a name="l00443"></a>00443     {
-<a name="l00444"></a>00444         <span class="comment">/* go through the single slitlets */</span>
-<a name="l00445"></a>00445         <span class="keywordflow">for</span> ( ns = 0 ; ns < bco->n_slitlets ; ns++ )
-<a name="l00446"></a>00446         {
-<a name="l00447"></a>00447             <span class="comment">/* determine the slitlet edges */</span>
-<a name="l00448"></a>00448             <span class="keywordflow">if</span> ( ns == 0 )
-<a name="l00449"></a>00449             {
-<a name="l00450"></a>00450                 ed1 = 0 ;
-<a name="l00451"></a>00451                 ed2 = edge[0] ;
-<a name="l00452"></a>00452             }
-<a name="l00453"></a>00453             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == bco->n_slitlets - 1 )
-<a name="l00454"></a>00454             {
-<a name="l00455"></a>00455                 ed1 = edge[bco->n_slitlets - 2] ;
-<a name="l00456"></a>00456                 ed2 = n_columns ;
-<a name="l00457"></a>00457             }
-<a name="l00458"></a>00458             <span class="keywordflow">else</span>
-<a name="l00459"></a>00459             {
-<a name="l00460"></a>00460                 ed1 = edge[ns-1] ;
-<a name="l00461"></a>00461                 ed2 = edge[ns] ;
-<a name="l00462"></a>00462             }
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464             nc = 0 ;
-<a name="l00465"></a>00465             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l00466"></a>00466             {
-<a name="l00467"></a>00467                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || 
-<a name="l00468"></a>00468                            acoefs[loc_index][i] == 0. || 
-<a name="l00469"></a>00469                           dacoefs[loc_index][i] == 0. )
-<a name="l00470"></a>00470                 {
-<a name="l00471"></a>00471                     continue ;
-<a name="l00472"></a>00472                 }
-<a name="l00473"></a>00473                 <span class="keywordflow">else</span>
-<a name="l00474"></a>00474                 {
-<a name="l00475"></a>00475                     nc++ ;
-<a name="l00476"></a>00476                 }
-<a name="l00477"></a>00477             }
-<a name="l00478"></a>00478             <span class="keywordflow">if</span> (NULL==(acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l00479"></a>00479             {
-<a name="l00480"></a>00480                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!"</span>) ;
-<a name="l00481"></a>00481                 <span class="keywordflow">return</span> -1 ;
-<a name="l00482"></a>00482             }
-<a name="l00483"></a>00483             nc = 0 ;
-<a name="l00484"></a>00484             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l00485"></a>00485             {
-<a name="l00486"></a>00486                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || 
-<a name="l00487"></a>00487                       acoefs[loc_index][i] == 0. || 
-<a name="l00488"></a>00488                      dacoefs[loc_index][i] == 0. )
-<a name="l00489"></a>00489                 {
-<a name="l00490"></a>00490                     continue ;
-<a name="l00491"></a>00491                 }
-<a name="l00492"></a>00492                 <span class="keywordflow">else</span>
-<a name="l00493"></a>00493                 {
-<a name="l00494"></a>00494                     acoefsclean[nc] = acoefs[loc_index][i] ;
-<a name="l00495"></a>00495                     nc++ ;
-<a name="l00496"></a>00496                 }
-<a name="l00497"></a>00497             }
-<a name="l00498"></a>00498 
-<a name="l00499"></a>00499             <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l00500"></a>00500 <span class="comment">             * determine the clean mean and sigma value of the coefficients,</span>
-<a name="l00501"></a>00501 <span class="comment">             * that means reject 10 % of the extreme low and high values</span>
-<a name="l00502"></a>00502 <span class="comment">             */</span>
-<a name="l00503"></a>00503             sinfo_pixel_qsort(acoefsclean, nc) ;
-<a name="l00504"></a>00504 
-<a name="l00505"></a>00505             sum   = 0. ;
-<a name="l00506"></a>00506             sumq  = 0. ;
-<a name="l00507"></a>00507             mean  = 0. ;
-<a name="l00508"></a>00508             sigma = 0. ;
-<a name="l00509"></a>00509             n     = 0 ;
-<a name="l00510"></a>00510             <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; 
-<a name="l00511"></a>00511                   i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )
-<a name="l00512"></a>00512             {
-<a name="l00513"></a>00513                 sum  += (double)acoefsclean[i] ;
-<a name="l00514"></a>00514                 sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;
-<a name="l00515"></a>00515                 n ++ ;
-<a name="l00516"></a>00516             }
-<a name="l00517"></a>00517             mean          = sum/(double)n ;
-<a name="l00518"></a>00518             sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;
-<a name="l00519"></a>00519             cliphi        = mean + sigma * (double)sigma_factor ;
-<a name="l00520"></a>00520             cliplo        = mean - sigma * (double)sigma_factor ;
-<a name="l00521"></a>00521             <span class="comment">/* fit only the reasonnable values */</span>
-<a name="l00522"></a>00522             num = 0 ;
-<a name="l00523"></a>00523             col_index = 0 ;
-<a name="l00524"></a>00524             <span class="comment">/*</span>
-<a name="l00525"></a>00525 <span class="comment">            printf("ed1=%d ed2=%d\n",ed1,ed2);</span>
-<a name="l00526"></a>00526 <span class="comment">        */</span>
-<a name="l00527"></a>00527             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l00528"></a>00528             {
-<a name="l00529"></a>00529                 <span class="comment">/* take only the reasonnable coefficients */</span>
-<a name="l00530"></a>00530                  <span class="comment">/*</span>
-<a name="l00531"></a>00531 <span class="comment">        printf("acoeffs=%f dacoefs=%f cliphi=%f cliplo=%f\n",</span>
-<a name="l00532"></a>00532 <span class="comment">                   acoefs[loc_index][i],dacoefs[loc_index][i],cliphi,cliplo);</span>
-<a name="l00533"></a>00533 <span class="comment">         */</span>
-<a name="l00534"></a>00534                 <span class="keywordflow">if</span> ( !isnan(acoefs[loc_index][i])     && 
-<a name="l00535"></a>00535                      (acoefs[loc_index][i] <= cliphi) && 
-<a name="l00536"></a>00536                      (acoefs[loc_index][i] >= cliplo) &&
-<a name="l00537"></a>00537                      (dacoefs[loc_index][i] != 0. )   && 
-<a name="l00538"></a>00538                      (acoefs[loc_index][i] != 0.)     )
-<a name="l00539"></a>00539                 {
-<a name="l00540"></a>00540                     sub_acoefs[num]    = acoefs[loc_index][i] ;
-<a name="l00541"></a>00541                     sub_dacoefs[num]   = dacoefs[loc_index][i] ;
-<a name="l00542"></a>00542                     sub_col_index[num] = col_index ;
-<a name="l00543"></a>00543                     num ++ ;
-<a name="l00544"></a>00544                 }
-<a name="l00545"></a>00545                 col_index++ ;
-<a name="l00546"></a>00546             }
-<a name="l00547"></a>00547             ndata = num ;
-<a name="l00548"></a>00548             offset = (float)(col_index-1) / 2. ;
-<a name="l00549"></a>00549             <span class="comment">/* printf("ndata=%d bco->n_bcoeffs=%d\n",ndata,bco->n_bcoeffs); */</span>
-<a name="l00550"></a>00550 
-<a name="l00551"></a>00551             <span class="keywordflow">if</span> ( ndata < bco->n_bcoeffs )
-<a name="l00552"></a>00552             {
-<a name="l00553"></a>00553                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data found in slitlet %d to "</span>
-<a name="l00554"></a>00554                                 <span class="stringliteral">"determine the fit coefficients."</span>, ns) ;
-<a name="l00555"></a>00555                 cpl_free(acoefsclean) ;
-<a name="l00556"></a>00556                 <span class="keywordflow">return</span> -1 ;
-<a name="l00557"></a>00557             }
-<a name="l00558"></a>00558 
-<a name="l00559"></a>00559             <span class="comment">/* allocate coefficient matrices */</span>
-<a name="l00560"></a>00560             ucoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;
-<a name="l00561"></a>00561             vcoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;
-<a name="l00562"></a>00562             covar  = sinfo_matrix(1, bco->n_bcoeffs, 1, bco->n_bcoeffs) ;
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564             <span class="comment">/* scale the x-values for the fit */</span>
-<a name="l00565"></a>00565             <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l00566"></a>00566             {
-<a name="l00567"></a>00567                 sub_col_index[i] = (sub_col_index[i] - offset) / offset ;
-<a name="l00568"></a>00568             }
-<a name="l00569"></a>00569 
-<a name="l00570"></a>00570             <span class="comment">/* finally, do the singular value decomposition fit */</span>
-<a name="l00571"></a>00571             sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, 
-<a name="l00572"></a>00572                                 sub_dacoefs-1, ndata, bco[ns].b[loc_index]-1,
-<a name="l00573"></a>00573                                 bco->n_bcoeffs, ucoefs, vcoefs, 
-<a name="l00574"></a>00574                                 wcoefs-1, covar, &chisq[ns], sinfo_fpol ) ;
-<a name="l00575"></a>00575 
-<a name="l00576"></a>00576             <span class="comment">/* scale the found coefficients */</span>
-<a name="l00577"></a>00577             <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_bcoeffs ; i ++ )
-<a name="l00578"></a>00578             {
-<a name="l00579"></a>00579                 bco[ns].b[loc_index][i] /= pow( offset, i ) ;
-<a name="l00580"></a>00580             }
-<a name="l00581"></a>00581 
-<a name="l00582"></a>00582             <span class="comment">/* free memory */</span>
-<a name="l00583"></a>00583             cpl_free (acoefsclean) ;
-<a name="l00584"></a>00584             sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l00585"></a>00585             sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l00586"></a>00586             sinfo_free_matrix( covar, 1<span class="comment">/*, bco->n_bcoeffs*/</span>, 
-<a name="l00587"></a>00587                                 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l00588"></a>00588 
-<a name="l00589"></a>00589             <span class="comment">/* now calculate the smoothed acoefs for each column */</span>
-<a name="l00590"></a>00590             col_index = 0 ;
-<a name="l00591"></a>00591             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2  ; i++ )
-<a name="l00592"></a>00592             {
-<a name="l00593"></a>00593                 acoefs[loc_index][i] = 0. ;
-<a name="l00594"></a>00594                 <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_bcoeffs ; n++ )
-<a name="l00595"></a>00595                 {
-<a name="l00596"></a>00596                     acoefs[loc_index][i] += bco[ns].b[loc_index][n] * 
-<a name="l00597"></a>00597                                         pow(col_index - offset, n) ;
-<a name="l00598"></a>00598                 }
-<a name="l00599"></a>00599                 col_index++ ;
-<a name="l00600"></a>00600             }
-<a name="l00601"></a>00601 
-<a name="l00602"></a>00602         }
-<a name="l00603"></a>00603     }
-<a name="l00604"></a>00604 
-<a name="l00605"></a>00605     cpl_free(sub_col_index) ;
-<a name="l00606"></a>00606     cpl_free(sub_acoefs) ;
-<a name="l00607"></a>00607     cpl_free(sub_dacoefs) ;
-<a name="l00608"></a>00608 
-<a name="l00609"></a>00609 
-<a name="l00610"></a>00610     cpl_free(edge) ;
-<a name="l00611"></a>00611     cpl_free(wcoefs) ;
-<a name="l00612"></a>00612 
-<a name="l00613"></a>00613     <span class="keywordflow">return</span> 0 ;
-<a name="l00614"></a>00614 }
-<a name="l00615"></a>00615 
-<a name="l00616"></a>00616 
-<a name="l00629"></a>00629 cpl_image * sinfo_new_wave_map_slit ( <span class="keywordtype">float</span> ** acoefs,
-<a name="l00630"></a>00630                          <span class="keywordtype">int</span>      n_acoefs,
-<a name="l00631"></a>00631                          <span class="keywordtype">int</span>      n_rows,
-<a name="l00632"></a>00632                          <span class="keywordtype">int</span>      n_columns )
-<a name="l00633"></a>00633 {
-<a name="l00634"></a>00634     cpl_image * newIm=NULL ;
-<a name="l00635"></a>00635     <span class="keywordtype">float</span> lambda=0 ;
-<a name="l00636"></a>00636     <span class="keywordtype">float</span> offset=0 ;
-<a name="l00637"></a>00637     <span class="keywordtype">int</span> col=0;
-<a name="l00638"></a>00638     <span class="keywordtype">int</span> row=0 ;
-<a name="l00639"></a>00639     <span class="keywordtype">int</span> i=0 ;
-<a name="l00640"></a>00640     <span class="keywordtype">float</span> row_index=0 ;
-<a name="l00641"></a>00641     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l00642"></a>00642     <span class="keywordflow">if</span> ( NULL == acoefs )
-<a name="l00643"></a>00643     {
-<a name="l00644"></a>00644         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!"</span>) ;
-<a name="l00645"></a>00645         <span class="keywordflow">return</span> NULL ;
-<a name="l00646"></a>00646     }
-<a name="l00647"></a>00647 
-<a name="l00648"></a>00648     <span class="comment">/* allocate new image */</span>
-<a name="l00649"></a>00649     <span class="keywordflow">if</span> ( NULL == (newIm = cpl_image_new(n_columns , n_rows,CPL_TYPE_FLOAT)) )
-<a name="l00650"></a>00650     {
-<a name="l00651"></a>00651         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate new image!"</span>) ;
-<a name="l00652"></a>00652         <span class="keywordflow">return</span> NULL ;
-<a name="l00653"></a>00653     }
-<a name="l00654"></a>00654     podata=cpl_image_get_data_float(newIm);
-<a name="l00655"></a>00655 
-<a name="l00656"></a>00656     <span class="comment">/* make the parabola symmetric to the image */</span>
-<a name="l00657"></a>00657     offset = (float)(n_rows - 1) / 2. ; 
-<a name="l00658"></a>00658 
-<a name="l00659"></a>00659     <span class="comment">/* go through the rows */</span>
-<a name="l00660"></a>00660     <span class="keywordflow">for</span> ( col = 0 ; col < n_columns ; col++ )
-<a name="l00661"></a>00661     {
-<a name="l00662"></a>00662         <span class="comment">/* go through the columns */</span>
-<a name="l00663"></a>00663         <span class="keywordflow">for</span> ( row = 0 ; row < n_rows ; row++ )
-<a name="l00664"></a>00664         {
-<a name="l00665"></a>00665             lambda = 0. ;
-<a name="l00666"></a>00666             row_index = (float)row - offset ;
-<a name="l00667"></a>00667             <span class="keywordflow">for</span> ( i = 0 ; i < n_acoefs ; i++ )
-<a name="l00668"></a>00668             {
-<a name="l00669"></a>00669                 lambda += acoefs[i][col] * pow(row_index, i) ;
-<a name="l00670"></a>00670             }
-<a name="l00671"></a>00671             podata[col+row*n_columns] = lambda ;
-<a name="l00672"></a>00672         }
-<a name="l00673"></a>00673     }
-<a name="l00674"></a>00674     <span class="keywordflow">return</span> newIm ;
-<a name="l00675"></a>00675 }
-<a name="l00676"></a>00676 
-<a name="l00677"></a>00677 
-<a name="l00724"></a>00724 cpl_image * sinfo_new_wave_cal( cpl_image   * image,
-<a name="l00725"></a>00725                     FitParams ** par ,
-<a name="l00726"></a>00726                     <span class="keywordtype">float</span>     ** abuf,
-<a name="l00727"></a>00727                     <span class="keywordtype">int</span>          n_slitlets,
-<a name="l00728"></a>00728                     <span class="keywordtype">int</span>       ** row_clean,
-<a name="l00729"></a>00729                     <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l00730"></a>00730                     <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l00731"></a>00731                     <span class="keywordtype">float</span>        dispersion,
-<a name="l00732"></a>00732                     <span class="keywordtype">int</span>          halfWidth,
-<a name="l00733"></a>00733                     <span class="keywordtype">float</span>        minAmplitude,
-<a name="l00734"></a>00734                     <span class="keywordtype">float</span>        max_residual,
-<a name="l00735"></a>00735                     <span class="keywordtype">float</span>        fwhm,
-<a name="l00736"></a>00736                     <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l00737"></a>00737                     <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l00738"></a>00738                     <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l00739"></a>00739                     <span class="keywordtype">float</span>        pixel_dist,
-<a name="l00740"></a>00740                     <span class="keywordtype">float</span>        pixel_tolerance )
-<a name="l00741"></a>00741 
-<a name="l00742"></a>00742 {
-<a name="l00743"></a>00743     <span class="keywordtype">int</span>          i=0, j=0, k=0 ;
-<a name="l00744"></a>00744     <span class="keywordtype">int</span>          n_fit=0 ;
-<a name="l00745"></a>00745     <span class="keywordtype">int</span>          n_reject=0 ;
-<a name="l00746"></a>00746     <span class="keywordtype">float</span>     *  acoefs=NULL ;
-<a name="l00747"></a>00747     <span class="keywordtype">float</span>     *  dacoefs=NULL ;
-<a name="l00748"></a>00748     <span class="keywordtype">float</span>     ** dabuf=NULL ;
-<a name="l00749"></a>00749     <span class="keywordtype">float</span>        chisq_poly=0 ;
-<a name="l00750"></a>00750     <span class="keywordtype">float</span>     *  chisq_cross=NULL ;
-<a name="l00751"></a>00751     <span class="keywordtype">int</span>          zeroind=0 ;
-<a name="l00752"></a>00752     <span class="keywordtype">int</span>          crossInd=0 ;
-<a name="l00753"></a>00753     Bcoeffs   *  bco=NULL ;
-<a name="l00754"></a>00754     cpl_image  *  wavemap=NULL ;
-<a name="l00755"></a>00755     <span class="keywordtype">int</span> ilx=0;
-<a name="l00756"></a>00756     <span class="keywordtype">int</span> ily=0;
-<a name="l00757"></a>00757     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l00758"></a>00758 
-<a name="l00759"></a>00759 
-<a name="l00760"></a>00760     <span class="keywordflow">if</span> (  NULL == image )
-<a name="l00761"></a>00761     {
-<a name="l00762"></a>00762         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given"</span>) ;
-<a name="l00763"></a>00763         <span class="keywordflow">return</span> NULL ;
-<a name="l00764"></a>00764     }
-<a name="l00765"></a>00765     check_nomsg(ilx=cpl_image_get_size_x(image));
-<a name="l00766"></a>00766     check_nomsg(ily=cpl_image_get_size_y(image));
-<a name="l00767"></a>00767     check_nomsg(pidata=cpl_image_get_data_float(image));
-<a name="l00768"></a>00768 
-<a name="l00769"></a>00769     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l00770"></a>00770     {
-<a name="l00771"></a>00771         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given"</span>) ;
-<a name="l00772"></a>00772         <span class="keywordflow">return</span> NULL ;
-<a name="l00773"></a>00773     }
-<a name="l00774"></a>00774     <span class="keywordflow">if</span> ( abuf == NULL )
-<a name="l00775"></a>00775     {
-<a name="l00776"></a>00776         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no buffer for fit coefficients given"</span>) ;
-<a name="l00777"></a>00777         <span class="keywordflow">return</span> NULL ;
-<a name="l00778"></a>00778     }
-<a name="l00779"></a>00779     <span class="keywordflow">if</span> ( n_slitlets <= 0 )
-<a name="l00780"></a>00780     {
-<a name="l00781"></a>00781         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible number of slitlets given"</span>) ;
-<a name="l00782"></a>00782         <span class="keywordflow">return</span> NULL ;
-<a name="l00783"></a>00783     }
-<a name="l00784"></a>00784     <span class="keywordflow">if</span> ( row_clean == NULL )
-<a name="l00785"></a>00785     {
-<a name="l00786"></a>00786         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row_clean array given"</span>) ;
-<a name="l00787"></a>00787         <span class="keywordflow">return</span> NULL ;
-<a name="l00788"></a>00788     }
-<a name="l00789"></a>00789     <span class="keywordflow">if</span> ( wavelength_clean == NULL )
-<a name="l00790"></a>00790     {
-<a name="l00791"></a>00791         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength_clean array given"</span>) ;
-<a name="l00792"></a>00792         <span class="keywordflow">return</span> NULL ;
-<a name="l00793"></a>00793     }
-<a name="l00794"></a>00794 
-<a name="l00795"></a>00795     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l00796"></a>00796     {
-<a name="l00797"></a>00797         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given"</span>) ;
-<a name="l00798"></a>00798         <span class="keywordflow">return</span> NULL ;
-<a name="l00799"></a>00799     }
-<a name="l00800"></a>00800 
-<a name="l00801"></a>00801     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ily/2 )
-<a name="l00802"></a>00802     {
-<a name="l00803"></a>00803         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible half width of the fitting box given"</span>) ;
-<a name="l00804"></a>00804         <span class="keywordflow">return</span> NULL ;
-<a name="l00805"></a>00805     }
-<a name="l00806"></a>00806     <span class="keywordflow">if</span> ( minAmplitude < 1. )
-<a name="l00807"></a>00807     {
-<a name="l00808"></a>00808         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible minimal amplitude"</span>) ;
-<a name="l00809"></a>00809         <span class="keywordflow">return</span> NULL ;
-<a name="l00810"></a>00810     }
-<a name="l00811"></a>00811 
-<a name="l00812"></a>00812     <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )
-<a name="l00813"></a>00813     {
-<a name="l00814"></a>00814         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible max_residual given"</span>) ;
-<a name="l00815"></a>00815         <span class="keywordflow">return</span> NULL ;
-<a name="l00816"></a>00816     }
-<a name="l00817"></a>00817     <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )
-<a name="l00818"></a>00818     {
-<a name="l00819"></a>00819         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible fwhm given"</span>) ;
-<a name="l00820"></a>00820         <span class="keywordflow">return</span> NULL ;
-<a name="l00821"></a>00821     }
-<a name="l00822"></a>00822 
-<a name="l00823"></a>00823     <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )
-<a name="l00824"></a>00824     {
-<a name="l00825"></a>00825         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_a_fitcoefs given"</span>) ;
-<a name="l00826"></a>00826         <span class="keywordflow">return</span> NULL ;
-<a name="l00827"></a>00827     }
-<a name="l00828"></a>00828 
-<a name="l00829"></a>00829     <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )
-<a name="l00830"></a>00830     {
-<a name="l00831"></a>00831         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_b_fitcoefs given"</span>) ;
-<a name="l00832"></a>00832         <span class="keywordflow">return</span> NULL ;
-<a name="l00833"></a>00833     }
-<a name="l00834"></a>00834     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )
-<a name="l00835"></a>00835     {
-<a name="l00836"></a>00836         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible sigmaFactor given"</span>) ;
-<a name="l00837"></a>00837         <span class="keywordflow">return</span> NULL ;
-<a name="l00838"></a>00838     }
-<a name="l00839"></a>00839 
-<a name="l00840"></a>00840     <span class="comment">/* initialize the variables */</span>
-<a name="l00841"></a>00841     n_reject = 0 ;
-<a name="l00842"></a>00842     n_fit = 0 ;
-<a name="l00843"></a>00843 
-<a name="l00844"></a>00844 
-<a name="l00845"></a>00845     <span class="comment">/* fit each found line by using a Gaussian function and determine </span>
-<a name="l00846"></a>00846 <span class="comment">       the exact position */</span>
-<a name="l00847"></a>00847     <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, n_found_lines, 
-<a name="l00848"></a>00848                                      row_clean, wavelength_clean,
-<a name="l00849"></a>00849                                      halfWidth, minAmplitude )) )
-<a name="l00850"></a>00850     {
-<a name="l00851"></a>00851         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, error code of "</span>
-<a name="l00852"></a>00852                         <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;
-<a name="l00853"></a>00853         <span class="keywordflow">return</span> NULL ;
-<a name="l00854"></a>00854     }
-<a name="l00855"></a>00855 
-<a name="l00856"></a>00856     <span class="comment">/* first check for faked lines like bad pixels */</span>
-<a name="l00857"></a>00857     <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, dispersion, 
-<a name="l00858"></a>00858                                                wavelength_clean, 
-<a name="l00859"></a>00859                                          row_clean, n_found_lines,
-<a name="l00860"></a>00860                                          ilx, pixel_tolerance) )
-<a name="l00861"></a>00861     {
-<a name="l00862"></a>00862         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, error code of "</span>
-<a name="l00863"></a>00863                         <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;
-<a name="l00864"></a>00864         <span class="keywordflow">return</span> NULL ;
-<a name="l00865"></a>00865     }
-<a name="l00866"></a>00866 
-<a name="l00867"></a>00867     <span class="comment">/* allocate memory */</span>
-<a name="l00868"></a>00868     <span class="keywordflow">if</span> (NULL == (acoefs = (<span class="keywordtype">float</span>*) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||
-<a name="l00869"></a>00869         NULL == (dacoefs = (<span class="keywordtype">float</span>*) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||
-<a name="l00870"></a>00870         NULL == (dabuf = (<span class="keywordtype">float</span>**) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||
-<a name="l00871"></a>00871         NULL == (chisq_cross = (<span class="keywordtype">float</span>*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))))
-<a name="l00872"></a>00872     {
-<a name="l00873"></a>00873         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate memory\n"</span>) ;
-<a name="l00874"></a>00874         <span class="keywordflow">return</span> NULL ;
-<a name="l00875"></a>00875     }
-<a name="l00876"></a>00876     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l00877"></a>00877     {
-<a name="l00878"></a>00878         <span class="keywordflow">if</span> (  NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(ilx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l00879"></a>00879         {
-<a name="l00880"></a>00880             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate memory"</span>) ;
-<a name="l00881"></a>00881             sinfo_free_float (&acoefs ) ;
-<a name="l00882"></a>00882             sinfo_free_float ( &dacoefs ) ;
-<a name="l00883"></a>00883             sinfo_free_float ( &chisq_cross ) ;
-<a name="l00884"></a>00884             sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00885"></a>00885             <span class="keywordflow">return</span> NULL ;
-<a name="l00886"></a>00886         }
-<a name="l00887"></a>00887     }
-<a name="l00888"></a>00888 
-<a name="l00889"></a>00889 
-<a name="l00890"></a>00890     <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span>
-<a name="l00891"></a>00891     k = 0 ;
-<a name="l00892"></a>00892     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l00893"></a>00893     {
-<a name="l00894"></a>00894         zeroind = 0 ;
-<a name="l00895"></a>00895         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, 
-<a name="l00896"></a>00896                                                          n_found_lines[i], 
-<a name="l00897"></a>00897                                                    ily, dispersion,
-<a name="l00898"></a>00898                                                    max_residual, acoefs, 
-<a name="l00899"></a>00899                                                    dacoefs, &n_reject, 
-<a name="l00900"></a>00900                                                    n_a_fitcoefs)) )
-<a name="l00901"></a>00901         {
-<a name="l00902"></a>00902       <span class="comment">/*</span>
-<a name="l00903"></a>00903 <span class="comment">            sinfo_msg_warning ("error in sinfo_polyfit in column: %d\n", i) ;</span>
-<a name="l00904"></a>00904 <span class="comment">      */</span>
-<a name="l00905"></a>00905             <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l00906"></a>00906             {
-<a name="l00907"></a>00907                 acoefs[j] = ZERO ;
-<a name="l00908"></a>00908                 dacoefs[j] = ZERO ;
-<a name="l00909"></a>00909             }
-<a name="l00910"></a>00910         }
-<a name="l00911"></a>00911 
-<a name="l00912"></a>00912         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l00913"></a>00913         {
-<a name="l00914"></a>00914 
-<a name="l00915"></a>00915             <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||
-<a name="l00916"></a>00916                  dacoefs[j] == 0. || isnan(acoefs[j]) )
-<a name="l00917"></a>00917             {
-<a name="l00918"></a>00918                 zeroind = 1 ;
-<a name="l00919"></a>00919             }
-<a name="l00920"></a>00920         }
-<a name="l00921"></a>00921         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l00922"></a>00922         {
-<a name="l00923"></a>00923             <span class="keywordflow">if</span> ( zeroind == 0 )
-<a name="l00924"></a>00924             {
-<a name="l00925"></a>00925                 abuf[j][i]  = acoefs[j] ;
-<a name="l00926"></a>00926                 dabuf[j][i] = dacoefs[j] ;
-<a name="l00927"></a>00927             }
-<a name="l00928"></a>00928             <span class="keywordflow">else</span>
-<a name="l00929"></a>00929             {
-<a name="l00930"></a>00930                 abuf[j][i]  = ZERO ;
-<a name="l00931"></a>00931                 dabuf[j][i] = ZERO ;
-<a name="l00932"></a>00932             }
-<a name="l00933"></a>00933         }
-<a name="l00934"></a>00934     }
-<a name="l00935"></a>00935  
-<a name="l00936"></a>00936     <span class="comment">/* allocate memory for the fitting coefficients */</span>
-<a name="l00937"></a>00937     <span class="keywordflow">if</span> ( NULL == ( bco = sinfo_new_b_coeffs( n_slitlets, 
-<a name="l00938"></a>00938                                              n_a_fitcoefs, n_b_fitcoefs)) )
-<a name="l00939"></a>00939     {
-<a name="l00940"></a>00940         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory for the bcoeffs"</span>) ;
-<a name="l00941"></a>00941         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00942"></a>00942         sinfo_free_float (&acoefs ) ;
-<a name="l00943"></a>00943         sinfo_free_float (&dacoefs ) ;
-<a name="l00944"></a>00944         sinfo_free_float (&chisq_cross ) ;
-<a name="l00945"></a>00945         <span class="keywordflow">return</span> NULL ;
-<a name="l00946"></a>00946     }
-<a name="l00947"></a>00947 
-<a name="l00948"></a>00948     <span class="comment">/* fit each acoefs across the slitlets to smooth the result */</span>
-<a name="l00949"></a>00949     <span class="keywordflow">if</span> ( -1 == ( crossInd = sinfo_new_coeffs_cross_slit_fit( ilx, 
-<a name="l00950"></a>00950                                                 abuf, 
-<a name="l00951"></a>00951                                                 dabuf,
-<a name="l00952"></a>00952                                                 bco, 
-<a name="l00953"></a>00953                                                 sigmaFactor, 
-<a name="l00954"></a>00954                                                 dispersion, 
-<a name="l00955"></a>00955                                                 pixel_dist, 
-<a name="l00956"></a>00956                                                 chisq_cross )) )
-<a name="l00957"></a>00957     {
-<a name="l00958"></a>00958         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot carry out the fitting of "</span>
-<a name="l00959"></a>00959                          <span class="stringliteral">"coefficients across the columns"</span>) ;
-<a name="l00960"></a>00960         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00961"></a>00961         sinfo_free_float (&acoefs ) ;
-<a name="l00962"></a>00962         sinfo_free_float (&dacoefs ) ;
-<a name="l00963"></a>00963         sinfo_free_float (&chisq_cross ) ;
-<a name="l00964"></a>00964         <span class="keywordflow">return</span> NULL ;
-<a name="l00965"></a>00965     }
-<a name="l00966"></a>00966   
-<a name="l00967"></a>00967 
-<a name="l00968"></a>00968     <span class="keywordflow">if</span> ( NULL == (wavemap = sinfo_new_wave_map_slit (abuf, n_a_fitcoefs, 
-<a name="l00969"></a>00969                                                      ily, ilx)) )
-<a name="l00970"></a>00970     {
-<a name="l00971"></a>00971         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot carry out wavemap creation"</span>) ;
-<a name="l00972"></a>00972         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00973"></a>00973         sinfo_free_float (&acoefs ) ;
-<a name="l00974"></a>00974         sinfo_free_float (&dacoefs ) ;
-<a name="l00975"></a>00975         sinfo_free_float (&chisq_cross ) ;
-<a name="l00976"></a>00976         sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l00977"></a>00977         <span class="keywordflow">return</span> NULL ;
-<a name="l00978"></a>00978     }
-<a name="l00979"></a>00979 
-<a name="l00980"></a>00980     <span class="comment">/* free all allocated memory */</span>
-<a name="l00981"></a>00981     sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00982"></a>00982     sinfo_free_float (&acoefs ) ;
-<a name="l00983"></a>00983     sinfo_free_float (&dacoefs ) ;
-<a name="l00984"></a>00984     sinfo_free_float (&chisq_cross ) ;
-<a name="l00985"></a>00985     sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l00986"></a>00986 
-<a name="l00987"></a>00987     <span class="keywordflow">return</span> wavemap ;
-<a name="l00988"></a>00988  cleanup:
-<a name="l00989"></a>00989     sinfo_free_float (&acoefs ) ;
-<a name="l00990"></a>00990     sinfo_free_float ( &dacoefs ) ;
-<a name="l00991"></a>00991     sinfo_free_float ( &chisq_cross ) ;
-<a name="l00992"></a>00992     sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;
-<a name="l00993"></a>00993     sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l00994"></a>00994     <span class="keywordflow">return</span> NULL;
-<a name="l00995"></a>00995 }
-<a name="l00996"></a>00996 
-<a name="l00997"></a>00997 
-<a name="l00998"></a>00998 
-<a name="l01021"></a>01021 <span class="keywordtype">int</span> sinfo_new_check_for_fake_lines ( FitParams ** par,
-<a name="l01022"></a>01022                         <span class="keywordtype">float</span>        dispersion,
-<a name="l01023"></a>01023             <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l01024"></a>01024             <span class="keywordtype">int</span>       ** row_clean,
-<a name="l01025"></a>01025             <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l01026"></a>01026             <span class="keywordtype">int</span>          n_columns,
-<a name="l01027"></a>01027             <span class="keywordtype">float</span>        pixel_tolerance )
-<a name="l01028"></a>01028 {
-<a name="l01029"></a>01029     <span class="keywordtype">int</span> i,  k ;
-<a name="l01030"></a>01030     <span class="keywordtype">int</span> col ;
-<a name="l01031"></a>01031     <span class="keywordtype">int</span> found ;
-<a name="l01032"></a>01032     <span class="keywordtype">float</span> row ;
-<a name="l01033"></a>01033     <span class="keywordtype">float</span> * beginWave ;
-<a name="l01034"></a>01034     <span class="keywordtype">float</span> firstWave ;
-<a name="l01035"></a>01035 
-<a name="l01036"></a>01036     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l01037"></a>01037     {
-<a name="l01038"></a>01038         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given"</span>) ;
-<a name="l01039"></a>01039         <span class="keywordflow">return</span> -1 ;
-<a name="l01040"></a>01040     }
-<a name="l01041"></a>01041     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l01042"></a>01042     {
-<a name="l01043"></a>01043         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"dispersion zero given!"</span>) ;
-<a name="l01044"></a>01044         <span class="keywordflow">return</span> -1 ;
-<a name="l01045"></a>01045     }
-<a name="l01046"></a>01046     <span class="keywordflow">if</span> ( wavelength_clean == NULL )
-<a name="l01047"></a>01047     {
-<a name="l01048"></a>01048         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength array given!"</span>) ;
-<a name="l01049"></a>01049         <span class="keywordflow">return</span> -1 ;
-<a name="l01050"></a>01050     }
-<a name="l01051"></a>01051     <span class="keywordflow">if</span> ( row_clean == NULL )
-<a name="l01052"></a>01052     {
-<a name="l01053"></a>01053         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row array given!"</span>) ;
-<a name="l01054"></a>01054         <span class="keywordflow">return</span> -1 ;
-<a name="l01055"></a>01055     }
-<a name="l01056"></a>01056     <span class="keywordflow">if</span> ( n_found_lines == NULL )
-<a name="l01057"></a>01057     {
-<a name="l01058"></a>01058         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no number of lines given!"</span>) ;
-<a name="l01059"></a>01059         <span class="keywordflow">return</span> -1 ;
-<a name="l01060"></a>01060     }
-<a name="l01061"></a>01061     <span class="keywordflow">if</span> ( n_columns < 200 )
-<a name="l01062"></a>01062     {
-<a name="l01063"></a>01063         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of columns given!"</span>) ;
-<a name="l01064"></a>01064         <span class="keywordflow">return</span> -1 ;
-<a name="l01065"></a>01065     }
-<a name="l01066"></a>01066 
-<a name="l01067"></a>01067     <span class="comment">/* first determine the estimated beginning wavelength of the first row */</span>
-<a name="l01068"></a>01068     <span class="keywordflow">for</span> ( col = 0 ; col < n_columns ; col++ )
-<a name="l01069"></a>01069     {
-<a name="l01070"></a>01070         <span class="keywordflow">if</span> ( n_found_lines[col] == 0 )
-<a name="l01071"></a>01071         {
-<a name="l01072"></a>01072         continue ;
-<a name="l01073"></a>01073         } 
-<a name="l01074"></a>01074         <span class="keywordflow">if</span> ( NULL == (beginWave = (<span class="keywordtype">float</span>*) cpl_calloc( n_found_lines[col], 
-<a name="l01075"></a>01075                                                        <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ) )
-<a name="l01076"></a>01076         {
-<a name="l01077"></a>01077             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l01078"></a>01078             <span class="keywordflow">return</span> -1 ;
-<a name="l01079"></a>01079     }
-<a name="l01080"></a>01080     <span class="keywordflow">for</span> ( k = 0 ; k < n_found_lines[col] ; k++ ) 
-<a name="l01081"></a>01081     {
-<a name="l01082"></a>01082         beginWave[k] = wavelength_clean[col][k] - 
-<a name="l01083"></a>01083                            (float)row_clean[col][k] * dispersion ;
-<a name="l01084"></a>01084         }
-<a name="l01085"></a>01085     <span class="comment">/* determine the clean mean of the estimated </span>
-<a name="l01086"></a>01086 <span class="comment">           beginning wavelengths of one column */</span>
-<a name="l01087"></a>01087     <span class="keywordflow">if</span> ( FLT_MAX == (firstWave = sinfo_new_clean_mean (beginWave, 
-<a name="l01088"></a>01088                                                            n_found_lines[col], 
-<a name="l01089"></a>01089                                                            10., 10.) ) )
-<a name="l01090"></a>01090     {
-<a name="l01091"></a>01091             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"clean mean did not work!"</span>) ;
-<a name="l01092"></a>01092             <span class="keywordflow">return</span> -1 ;
-<a name="l01093"></a>01093     }
-<a name="l01094"></a>01094 
-<a name="l01095"></a>01095         cpl_free (beginWave) ;
-<a name="l01096"></a>01096         <span class="comment">/* go through the lines in that column and select the </span>
-<a name="l01097"></a>01097 <span class="comment">           correct FitParam structure */</span>
-<a name="l01098"></a>01098         <span class="keywordflow">for</span> ( k = 0 ; k < n_found_lines[col] ; k++ ) 
-<a name="l01099"></a>01099         {    
-<a name="l01100"></a>01100         <span class="comment">/* compute the estimated line position */</span>
-<a name="l01101"></a>01101         row = ( wavelength_clean[col][k] - firstWave ) / dispersion ;
-<a name="l01102"></a>01102 
-<a name="l01103"></a>01103             <span class="comment">/* go through all fit parameters and find the corresponding one */</span>
-<a name="l01104"></a>01104         found = -1 ;
-<a name="l01105"></a>01105             <span class="keywordflow">for</span> ( i = 0 ; i < (par[0] -> n_params) ; i ++ )
-<a name="l01106"></a>01106             {    
-<a name="l01107"></a>01107             <span class="comment">/* find the given column and go through the </span>
-<a name="l01108"></a>01108 <span class="comment">                   lines in that column */</span>
-<a name="l01109"></a>01109         <span class="keywordflow">if</span> ( (par[i] -> column == col) && (par[i] -> line == k) && 
-<a name="l01110"></a>01110              (par[i] -> wavelength == wavelength_clean[col][k]) )
-<a name="l01111"></a>01111         {
-<a name="l01112"></a>01112                 found = i ;
-<a name="l01113"></a>01113             break ;
-<a name="l01114"></a>01114                 }
-<a name="l01115"></a>01115             }
-<a name="l01116"></a>01116         <span class="keywordflow">if</span> ( found != -1 )
-<a name="l01117"></a>01117         {
-<a name="l01118"></a>01118             <span class="comment">/* set fit params to zero where the fitted row </span>
-<a name="l01119"></a>01119 <span class="comment">                   position and the estimated </span>
-<a name="l01120"></a>01120 <span class="comment">            row positions are outside the tolerance */</span>
-<a name="l01121"></a>01121                 <span class="keywordflow">if</span> ( fabs(row - par[found]->fit_par[2]) > pixel_tolerance ) 
-<a name="l01122"></a>01122             {
-<a name="l01123"></a>01123                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"found bad line in col: "</span>
-<a name="l01124"></a>01124                                       <span class="stringliteral">"%d line: %d in row: %f difference: %f"</span>, 
-<a name="l01125"></a>01125                                       col, k, par[found]->fit_par[2],
-<a name="l01126"></a>01126                                       row - par[found]->fit_par[2])  ;
-<a name="l01127"></a>01127                 par[found]->fit_par[2] = 0. ;
-<a name="l01128"></a>01128                 }
-<a name="l01129"></a>01129             }
-<a name="l01130"></a>01130         <span class="keywordflow">else</span>
-<a name="l01131"></a>01131         {
-<a name="l01132"></a>01132         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"fit parameter of col %d and line "</span>
-<a name="l01133"></a>01133                                   <span class="stringliteral">"no %d not found!\n"</span>, col, k ) ;
-<a name="l01134"></a>01134         }
-<a name="l01135"></a>01135         }
-<a name="l01136"></a>01136     }
-<a name="l01137"></a>01137 
-<a name="l01138"></a>01138     <span class="keywordflow">return</span> 0 ;
-<a name="l01139"></a>01139 }
-<a name="l01140"></a>01140 
-<a name="l01159"></a>01159 cpl_image * 
-<a name="l01160"></a>01160 sinfo_new_create_shifted_slit_wavemap ( cpl_image * lineIm,
-<a name="l01161"></a>01161                               <span class="keywordtype">float</span>    ** coeffs,
-<a name="l01162"></a>01162                           <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l01163"></a>01163                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l01164"></a>01164                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l01165"></a>01165                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l01166"></a>01166                                       <span class="keywordtype">int</span>      magFactor )
-<a name="l01167"></a>01167 {
-<a name="l01168"></a>01168     cpl_image * wavemap ;
-<a name="l01169"></a>01169     <span class="keywordtype">float</span>* emline=NULL ;
-<a name="l01170"></a>01170     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l01171"></a>01171     <span class="keywordtype">float</span>* wave=NULL ;
-<a name="l01172"></a>01172     <span class="keywordtype">double</span>* a=NULL ;
-<a name="l01173"></a>01173     <span class="keywordtype">float</span>* par=NULL ;
-<a name="l01174"></a>01174     <span class="keywordtype">float</span>* derv_par=NULL ;
-<a name="l01175"></a>01175     <span class="keywordtype">double</span>* z=NULL ;
-<a name="l01176"></a>01176 
-<a name="l01177"></a>01177     <span class="keywordtype">double</span>  * result ;
-<a name="l01178"></a>01178     <span class="keywordtype">float</span> * filter_spec ;
-<a name="l01179"></a>01179     <span class="keywordtype">float</span> centreval ;
-<a name="l01180"></a>01180     <span class="keywordtype">float</span> centrepix ;
-<a name="l01181"></a>01181     <span class="keywordtype">float</span> cenpos, cenpix ;
-<a name="l01182"></a>01182     <span class="keywordtype">float</span> pixvalue ;
-<a name="l01183"></a>01183     <span class="keywordtype">float</span> wavelag ;
-<a name="l01184"></a>01184     <span class="keywordtype">float</span> angst ;
-<a name="l01185"></a>01185     <span class="keywordtype">float</span> a_initial ;
-<a name="l01186"></a>01186     <span class="keywordtype">int</span>        numpar, its ;
-<a name="l01187"></a>01187     <span class="keywordtype">int</span>        * mpar ;
-<a name="l01188"></a>01188     <span class="keywordtype">float</span>      tol, lab ;
-<a name="l01189"></a>01189     <span class="keywordtype">float</span>      * xdat, * wdat ;
-<a name="l01190"></a>01190     Vector     * peak;
-<a name="l01191"></a>01191     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l01192"></a>01192     <span class="keywordtype">int</span>   row , col ;
-<a name="l01193"></a>01193     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m*/</span> ;
-<a name="l01194"></a>01194     <span class="keywordtype">int</span>   sign, found, line, width ;
-<a name="l01195"></a>01195     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;
-<a name="l01196"></a>01196     gsl_poly_complex_workspace * w ;
-<a name="l01197"></a>01197     <span class="keywordtype">double</span> xcorr_max ;
-<a name="l01198"></a>01198     <span class="keywordtype">int</span> delta ;
-<a name="l01199"></a>01199     <span class="keywordtype">int</span> ilx=0;
-<a name="l01200"></a>01200     <span class="keywordtype">int</span> ily=0;
-<a name="l01201"></a>01201     <span class="keywordtype">int</span> olx=0;
-<a name="l01202"></a>01202     <span class="keywordtype">int</span> oly=0;
-<a name="l01203"></a>01203     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01204"></a>01204     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01205"></a>01205 
-<a name="l01206"></a>01206 
-<a name="l01207"></a>01207     <span class="keywordflow">if</span> ( lineIm == NULL )
-<a name="l01208"></a>01208     {
-<a name="l01209"></a>01209         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01210"></a>01210         <span class="keywordflow">return</span> NULL ;
-<a name="l01211"></a>01211     }
-<a name="l01212"></a>01212     ilx=cpl_image_get_size_x(lineIm);
-<a name="l01213"></a>01213     ily=cpl_image_get_size_y(lineIm);
-<a name="l01214"></a>01214     pidata=cpl_image_get_data_float(lineIm);
-<a name="l01215"></a>01215 
-<a name="l01216"></a>01216     <span class="keywordflow">if</span> ( coeffs == NULL )
-<a name="l01217"></a>01217     {
-<a name="l01218"></a>01218         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no coefficient sinfo_matrix given!"</span>) ;
-<a name="l01219"></a>01219         <span class="keywordflow">return</span> NULL ;
-<a name="l01220"></a>01220     }
-<a name="l01221"></a>01221     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )
-<a name="l01222"></a>01222     {
-<a name="l01223"></a>01223         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of polynomial coefficients given!"</span>) ;
-<a name="l01224"></a>01224         <span class="keywordflow">return</span> NULL ;
-<a name="l01225"></a>01225     }
-<a name="l01226"></a>01226     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )
-<a name="l01227"></a>01227     {
-<a name="l01228"></a>01228         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01229"></a>01229         <span class="keywordflow">return</span> NULL ;
-<a name="l01230"></a>01230     }
-<a name="l01231"></a>01231     <span class="keywordflow">if</span> ( n_lines < 1 )
-<a name="l01232"></a>01232     {
-<a name="l01233"></a>01233         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;
-<a name="l01234"></a>01234         <span class="keywordflow">return</span> NULL ;
-<a name="l01235"></a>01235     }
-<a name="l01236"></a>01236 
-<a name="l01237"></a>01237     <span class="comment">/* find out if Angstroem or microns are used */</span>
-<a name="l01238"></a>01238     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )
-<a name="l01239"></a>01239     {
-<a name="l01240"></a>01240         <span class="comment">/* Angstroem */</span>
-<a name="l01241"></a>01241         angst = 10000. ;
-<a name="l01242"></a>01242     }
-<a name="l01243"></a>01243     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )
-<a name="l01244"></a>01244     {
-<a name="l01245"></a>01245         <span class="comment">/* nanometers */</span>
-<a name="l01246"></a>01246         angst = 1000. ;
-<a name="l01247"></a>01247     }
-<a name="l01248"></a>01248     <span class="keywordflow">else</span>
-<a name="l01249"></a>01249     {
-<a name="l01250"></a>01250         <span class="comment">/* microns */</span>
-<a name="l01251"></a>01251         angst = 1. ;
-<a name="l01252"></a>01252     }
-<a name="l01253"></a>01253 
-<a name="l01254"></a>01254     <span class="comment">/* allocate memory */</span>
-<a name="l01255"></a>01255     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily, CPL_TYPE_FLOAT)) )
-<a name="l01256"></a>01256     {
-<a name="l01257"></a>01257         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;
-<a name="l01258"></a>01258         <span class="keywordflow">return</span> NULL ;
-<a name="l01259"></a>01259     }
-<a name="l01260"></a>01260     olx=cpl_image_get_size_x(wavemap);
-<a name="l01261"></a>01261     oly=cpl_image_get_size_y(wavemap);
-<a name="l01262"></a>01262     podata=cpl_image_get_data_float(wavemap);
-<a name="l01263"></a>01263 
-<a name="l01264"></a>01264     var = (magFactor-1)*(magFactor-1) ;
-<a name="l01265"></a>01265 
-<a name="l01266"></a>01266 
-<a name="l01267"></a>01267  
-<a name="l01268"></a>01268     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01269"></a>01269     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01270"></a>01270     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01271"></a>01271     par=cpl_calloc(MAXPAR,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01272"></a>01272     derv_par=cpl_calloc(MAXPAR,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01273"></a>01273 
-<a name="l01274"></a>01274     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01275"></a>01275     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01276"></a>01276 
-<a name="l01277"></a>01277    
-<a name="l01278"></a>01278     <span class="comment">/* first store each spectrum in a buffer */</span>
-<a name="l01279"></a>01279     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01280"></a>01280     {
-<a name="l01281"></a>01281         <span class="comment">/* initialize the emline array for each column */</span>
-<a name="l01282"></a>01282         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )
-<a name="l01283"></a>01283         {
-<a name="l01284"></a>01284             emline[i] = 0. ;
-<a name="l01285"></a>01285         }
-<a name="l01286"></a>01286         <span class="comment">/* determine the coefficients by using the given bcoefs */</span>
-<a name="l01287"></a>01287         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )
-<a name="l01288"></a>01288         {
-<a name="l01289"></a>01289             <span class="comment">/* initialize coefficients and solution */</span>
-<a name="l01290"></a>01290             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)
-<a name="l01291"></a>01291             {
-<a name="l01292"></a>01292                 z[2*i] = 0. ;
-<a name="l01293"></a>01293                 z[2*i+1] = 0. ;
-<a name="l01294"></a>01294             }
-<a name="l01295"></a>01295             a[i] = coeffs[i][col] ;
-<a name="l01296"></a>01296         }
-<a name="l01297"></a>01297          
-<a name="l01298"></a>01298         a_initial = coeffs[0][col] ;
-<a name="l01299"></a>01299         <span class="comment">/* go through the lines and generate an artificial spectrum */</span>
-<a name="l01300"></a>01300         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l01301"></a>01301         {
-<a name="l01302"></a>01302             <span class="comment">/* go from Angstroem to micron */</span>
-<a name="l01303"></a>01303             wave[line] = wavelength[line]/angst ;
-<a name="l01304"></a>01304 
-<a name="l01305"></a>01305             <span class="comment">/* -----------------------------------------------------------</span>
-<a name="l01306"></a>01306 <span class="comment">             * solve the polynomial for the exact offset of the line that means</span>
-<a name="l01307"></a>01307 <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span>
-<a name="l01308"></a>01308 <span class="comment">             */</span>
-<a name="l01309"></a>01309             a[0] = a_initial - wave[line] ;
-<a name="l01310"></a>01310 
-<a name="l01311"></a>01311             <span class="keywordflow">if</span>(NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) 
-<a name="l01312"></a>01312             {
-<a name="l01313"></a>01313                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate complex workspace!"</span>) ;
-<a name="l01314"></a>01314                 cpl_image_delete(wavemap) ;
-<a name="l01315"></a>01315                 <span class="keywordflow">return</span> NULL ;
-<a name="l01316"></a>01316             }
-<a name="l01317"></a>01317             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) 
-<a name="l01318"></a>01318             {
-<a name="l01319"></a>01319                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;
-<a name="l01320"></a>01320                 cpl_image_delete(wavemap) ;
-<a name="l01321"></a>01321                 <span class="keywordflow">return</span> NULL ;
-<a name="l01322"></a>01322             }
-<a name="l01323"></a>01323             sinfo_gsl_poly_complex_workspace_free(w) ;           
-<a name="l01324"></a>01324 
-<a name="l01325"></a>01325             j = 0 ;
-<a name="l01326"></a>01326             found = -1 ;
-<a name="l01327"></a>01327             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )
-<a name="l01328"></a>01328             {
-<a name="l01329"></a>01329                 <span class="comment">/* test for appropriate solution */</span>
-<a name="l01330"></a>01330                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&
-<a name="l01331"></a>01331                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )
-<a name="l01332"></a>01332                 {
-<a name="l01333"></a>01333                     found = 2*i ;
-<a name="l01334"></a>01334                     j ++ ;
-<a name="l01335"></a>01335                 }
-<a name="l01336"></a>01336                 <span class="keywordflow">else</span>
-<a name="l01337"></a>01337                 {
-<a name="l01338"></a>01338                     continue ;
-<a name="l01339"></a>01339                 }
-<a name="l01340"></a>01340             }
-<a name="l01341"></a>01341             <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01342"></a>01342             {
-<a name="l01343"></a>01343                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found for line %d in "</span>
-<a name="l01344"></a>01344                                   <span class="stringliteral">"column %d"</span>, line, col) ;
-<a name="l01345"></a>01345                 continue ;
-<a name="l01346"></a>01346             }
-<a name="l01347"></a>01347             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )
-<a name="l01348"></a>01348             {
-<a name="l01349"></a>01349                 cenpos = z[found] + (float) ily /2. ;
-<a name="l01350"></a>01350             }
-<a name="l01351"></a>01351             <span class="keywordflow">else</span>
-<a name="l01352"></a>01352             {
-<a name="l01353"></a>01353                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found for "</span>
-<a name="l01354"></a>01354                                   <span class="stringliteral">"line %d in column %d"</span>, line, col) ;
-<a name="l01355"></a>01355                 continue ;
-<a name="l01356"></a>01356             }
-<a name="l01357"></a>01357 
-<a name="l01358"></a>01358             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l01359"></a>01359 <span class="comment">             * magnify image by the given factor add an additional offset</span>
-<a name="l01360"></a>01360 <span class="comment">             */</span>
-<a name="l01361"></a>01361             cenpix = cenpos ;
-<a name="l01362"></a>01362 
-<a name="l01363"></a>01363             <span class="comment">/* determine max and min pixel limits over </span>
-<a name="l01364"></a>01364 <span class="comment">               which line should be convolved */</span>
-<a name="l01365"></a>01365             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? 
-<a name="l01366"></a>01366                     sinfo_new_nint(cenpix) - (var-1) : 0 ;
-<a name="l01367"></a>01367             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?
-<a name="l01368"></a>01368                     sinfo_new_nint(cenpix) + (var-1) : ily ;
-<a name="l01369"></a>01369 
-<a name="l01370"></a>01370             <span class="comment">/* convolve neon lines with Gaussian function */</span>
-<a name="l01371"></a>01371             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )
-<a name="l01372"></a>01372             {
-<a name="l01373"></a>01373                 emline[j] += intensity[line] * 
-<a name="l01374"></a>01374                      exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;
-<a name="l01375"></a>01375             }
-<a name="l01376"></a>01376         }
-<a name="l01377"></a>01377 
-<a name="l01378"></a>01378         <span class="comment">/*-------------------------------------------------------------------</span>
-<a name="l01379"></a>01379 <span class="comment">         * for each column, map the image data points onto an magFactor times </span>
-<a name="l01380"></a>01380 <span class="comment">           bigger element grid for FFT in the cross sinfo_correlation, first </span>
-<a name="l01381"></a>01381 <span class="comment">           initialize the two helping arrays for each new column.</span>
-<a name="l01382"></a>01382 <span class="comment">         */</span>
-<a name="l01383"></a>01383         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )
-<a name="l01384"></a>01384         {
-<a name="l01385"></a>01385             spec[k] = 0. ;
-<a name="l01386"></a>01386         }
-<a name="l01387"></a>01387 
-<a name="l01388"></a>01388         <span class="comment">/* now take the image data points of the column and put </span>
-<a name="l01389"></a>01389 <span class="comment">           them into the spec array */</span>
-<a name="l01390"></a>01390         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span>
-<a name="l01391"></a>01391         {
-<a name="l01392"></a>01392             <span class="comment">/* set bad pixels or negative values to zero */</span>
-<a name="l01393"></a>01393             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&
-<a name="l01394"></a>01394                 (pidata[col + row*ilx] > 0.))
-<a name="l01395"></a>01395             {
-<a name="l01396"></a>01396                 spec[row] = pidata[col + row*ilx] ;
-<a name="l01397"></a>01397             }
-<a name="l01398"></a>01398             <span class="keywordflow">else</span>
-<a name="l01399"></a>01399             {
-<a name="l01400"></a>01400                 spec[row] = 0. ;
-<a name="l01401"></a>01401             }
-<a name="l01402"></a>01402         }
-<a name="l01403"></a>01403         <span class="comment">/* convolve the spectrum by Gaussian */</span>
-<a name="l01404"></a>01404         filter_spec = sinfo_function1d_filter_lowpass(spec, ily, 
-<a name="l01405"></a>01405                                                       LOW_PASS_GAUSSIAN, 
-<a name="l01406"></a>01406                                                       magFactor) ; 
-<a name="l01407"></a>01407 
-<a name="l01408"></a>01408         <span class="comment">/* now call the cross sinfo_correlation routine */</span>
-<a name="l01409"></a>01409         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,
-<a name="l01410"></a>01410                           ily/2, &delta, &maxlag, &xcorr_max) ;
-<a name="l01411"></a>01411 
-<a name="l01412"></a>01412         <span class="keywordflow">if</span> ( xcorr_max <= 0. )
-<a name="l01413"></a>01413         {
-<a name="l01414"></a>01414             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross correlation sum , "</span>
-<a name="l01415"></a>01415                               <span class="stringliteral">"col %d set to ZERO \n"</span>, col) ;
-<a name="l01416"></a>01416             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01417"></a>01417             {
-<a name="l01418"></a>01418                 podata[col + row*ilx] = ZERO ;
-<a name="l01419"></a>01419             }
-<a name="l01420"></a>01420             sinfo_function1d_del(filter_spec) ;
-<a name="l01421"></a>01421             cpl_free(result) ;
-<a name="l01422"></a>01422             continue ;
-<a name="l01423"></a>01423         }
-<a name="l01424"></a>01424 
-<a name="l01425"></a>01425        <span class="comment">/* in this section, we fit the correlation function with a gauss, </span>
-<a name="l01426"></a>01426 <span class="comment">          and find its peak, thus getting subpixel-accuracy */</span>
-<a name="l01427"></a>01427 
-<a name="l01428"></a>01428         i = maxlag; j = i+1;
-<a name="l01429"></a>01429         <span class="keywordflow">while</span> (result[j] < result[i])
-<a name="l01430"></a>01430         {
-<a name="l01431"></a>01431             i++; j++;
-<a name="l01432"></a>01432         }
-<a name="l01433"></a>01433         i = maxlag; k = i-1;
-<a name="l01434"></a>01434         <span class="keywordflow">while</span> (result[k] < result[i])
-<a name="l01435"></a>01435         {
-<a name="l01436"></a>01436             i--; k--;
-<a name="l01437"></a>01437         }
-<a name="l01438"></a>01438         width = j-k+1;
-<a name="l01439"></a>01439         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l01440"></a>01440         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )
-<a name="l01441"></a>01441         {
-<a name="l01442"></a>01442             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;
-<a name="l01443"></a>01443             sinfo_function1d_del(filter_spec) ;
-<a name="l01444"></a>01444             cpl_free(result) ;
-<a name="l01445"></a>01445             <span class="keywordflow">return</span> NULL ;
-<a name="l01446"></a>01446         }
-<a name="l01447"></a>01447 
-<a name="l01448"></a>01448 
-<a name="l01449"></a>01449         <span class="comment">/* allocate memory */</span>
-<a name="l01450"></a>01450         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01451"></a>01451         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01452"></a>01452         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01453"></a>01453 
-<a name="l01454"></a>01454         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span>
-<a name="l01455"></a>01455         <span class="comment">/* go through the chosen column */</span>
-<a name="l01456"></a>01456 
-<a name="l01457"></a>01457         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )
-<a name="l01458"></a>01458         {
-<a name="l01459"></a>01459             peak -> data[i] = result[k+i]/xcorr_max * 100. ;
-<a name="l01460"></a>01460             xdat[i] = i;
-<a name="l01461"></a>01461             wdat[i] = 1.0;
-<a name="l01462"></a>01462         }
-<a name="l01463"></a>01463 
-<a name="l01464"></a>01464         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01465"></a>01465         xdim     = XDIM;
-<a name="l01466"></a>01466         ndat     = peak -> n_elements ;
-<a name="l01467"></a>01467         numpar   = MAXPAR ;
-<a name="l01468"></a>01468         tol      = TOL ;
-<a name="l01469"></a>01469         lab      = LAB ;
-<a name="l01470"></a>01470         its      = ITS ;
-<a name="l01471"></a>01471         par[1] = width/2.0 ;
-<a name="l01472"></a>01472         par[2] = (float) (maxlag - k) ;
-<a name="l01473"></a>01473         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;
-<a name="l01474"></a>01474         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;
-<a name="l01475"></a>01475 
-<a name="l01476"></a>01476         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )
-<a name="l01477"></a>01477         {
-<a name="l01478"></a>01478             derv_par[i] = 0.0 ;
-<a name="l01479"></a>01479             mpar[i] = 1 ;
-<a name="l01480"></a>01480         }
-<a name="l01481"></a>01481 
-<a name="l01482"></a>01482         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l01483"></a>01483         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l01484"></a>01484                                                peak -> data, wdat, 
-<a name="l01485"></a>01485                                                &ndat, par, derv_par, mpar,
-<a name="l01486"></a>01486                                                &numpar, &tol, &its, &lab )) )
-<a name="l01487"></a>01487         {
-<a name="l01488"></a>01488             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit failed "</span>
-<a name="l01489"></a>01489                                <span class="stringliteral">"in col: %d, error no.: %d"</span>, col, iters) ;
-<a name="l01490"></a>01490             sinfo_new_destroy_vector ( peak ) ;
-<a name="l01491"></a>01491             cpl_free ( xdat ) ;
-<a name="l01492"></a>01492             cpl_free ( wdat ) ;
-<a name="l01493"></a>01493             cpl_free ( mpar ) ;
-<a name="l01494"></a>01494             sinfo_function1d_del(filter_spec) ;
-<a name="l01495"></a>01495             cpl_free(result) ;
-<a name="l01496"></a>01496             continue ;
-<a name="l01497"></a>01497         }
-<a name="l01498"></a>01498 
-<a name="l01499"></a>01499         sinfo_new_destroy_vector ( peak ) ;
-<a name="l01500"></a>01500         cpl_free (xdat) ;
-<a name="l01501"></a>01501         cpl_free (wdat) ;
-<a name="l01502"></a>01502         cpl_free (mpar) ;
-<a name="l01503"></a>01503         sinfo_function1d_del(filter_spec) ;
-<a name="l01504"></a>01504         cpl_free(result) ;
-<a name="l01505"></a>01505 
-<a name="l01506"></a>01506         wavelag =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;
-<a name="l01507"></a>01507 
-<a name="l01508"></a>01508         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )
-<a name="l01509"></a>01509         {
-<a name="l01510"></a>01510             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wavelag very big , col %d set to ZERO"</span>, col) ;
-<a name="l01511"></a>01511             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01512"></a>01512             {
-<a name="l01513"></a>01513                 podata[col + row*ilx] = ZERO ;
-<a name="l01514"></a>01514             }
-<a name="l01515"></a>01515             continue ;
-<a name="l01516"></a>01516         }
-<a name="l01517"></a>01517 
-<a name="l01518"></a>01518         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l01519"></a>01519 <span class="comment">         * determine new zero order coefficient centreval, of which the </span>
-<a name="l01520"></a>01520 <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span>
-<a name="l01521"></a>01521 <span class="comment">         * wavelag with the same higher order coefficients and set the new </span>
-<a name="l01522"></a>01522 <span class="comment">         * zero order coefficient to</span>
-<a name="l01523"></a>01523 <span class="comment">         * get both sides of the equation approximately equal.</span>
-<a name="l01524"></a>01524 <span class="comment">         */</span>
-<a name="l01525"></a>01525         centreval = a_initial ;
-<a name="l01526"></a>01526         <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l01527"></a>01527         {
-<a name="l01528"></a>01528             <span class="keywordflow">if</span> ( i%2 == 0 ) 
-<a name="l01529"></a>01529             {
-<a name="l01530"></a>01530                 sign = -1 ;
-<a name="l01531"></a>01531             }
-<a name="l01532"></a>01532             <span class="keywordflow">else</span>
-<a name="l01533"></a>01533             {
-<a name="l01534"></a>01534                 sign = 1 ;
-<a name="l01535"></a>01535             }
-<a name="l01536"></a>01536             centreval += (float)sign * coeffs[i][col]*pow(wavelag, i) ;
-<a name="l01537"></a>01537         }
-<a name="l01538"></a>01538 
-<a name="l01539"></a>01539         <span class="comment">/* prepare to write out wavelength as pixel values */</span>
-<a name="l01540"></a>01540         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l01541"></a>01541         {
-<a name="l01542"></a>01542             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;
-<a name="l01543"></a>01543             pixvalue = 0. ;
-<a name="l01544"></a>01544             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l01545"></a>01545             {
-<a name="l01546"></a>01546                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;
-<a name="l01547"></a>01547             }
-<a name="l01548"></a>01548             podata[col+row*olx] = centreval + pixvalue ;
-<a name="l01549"></a>01549         }
-<a name="l01550"></a>01550     }
-<a name="l01551"></a>01551 
-<a name="l01552"></a>01552 
-<a name="l01553"></a>01553     cpl_free(emline) ;
-<a name="l01554"></a>01554     cpl_free(spec) ;
-<a name="l01555"></a>01555     cpl_free(wave) ;
-<a name="l01556"></a>01556     cpl_free(par) ;
-<a name="l01557"></a>01557     cpl_free(derv_par) ;
-<a name="l01558"></a>01558 
-<a name="l01559"></a>01559     cpl_free(a) ;
-<a name="l01560"></a>01560     cpl_free(z) ;
-<a name="l01561"></a>01561 
-<a name="l01562"></a>01562 
-<a name="l01563"></a>01563 
-<a name="l01564"></a>01564     <span class="keywordflow">return</span> wavemap ;
-<a name="l01565"></a>01565 }
-<a name="l01566"></a>01566 
-<a name="l01591"></a>01591 cpl_image * sinfo_new_create_shifted_slit_wavemap2 ( cpl_image * lineIm,
-<a name="l01592"></a>01592                                       <span class="keywordtype">float</span>    ** coeffs,
-<a name="l01593"></a>01593                                       <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l01594"></a>01594                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l01595"></a>01595                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l01596"></a>01596                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l01597"></a>01597                                       <span class="keywordtype">int</span>      magFactor,
-<a name="l01598"></a>01598                                       <span class="keywordtype">float</span>    dispersion,
-<a name="l01599"></a>01599                                       <span class="keywordtype">float</span>    pixel_dist )
-<a name="l01600"></a>01600 {
-<a name="l01601"></a>01601     cpl_image * wavemap ;
-<a name="l01602"></a>01602     <span class="keywordtype">double</span> * result ;
-<a name="l01603"></a>01603     <span class="keywordtype">float</span> * filter_spec ;
-<a name="l01604"></a>01604     <span class="keywordtype">float</span> centreval ;
-<a name="l01605"></a>01605     <span class="keywordtype">float</span> centrepix ;
-<a name="l01606"></a>01606     <span class="keywordtype">float</span> cenpos, cenpix ;
-<a name="l01607"></a>01607     <span class="keywordtype">float</span> pixvalue ;
-<a name="l01608"></a>01608     <span class="keywordtype">float</span> wavelag ;
-<a name="l01609"></a>01609     <span class="comment">/*float maxres ;*/</span>
-<a name="l01610"></a>01610     <span class="keywordtype">float</span> angst ;
-<a name="l01611"></a>01611     <span class="comment">/*float temp ;*/</span>
-<a name="l01612"></a>01612     <span class="keywordtype">float</span> a_initial ;
-<a name="l01613"></a>01613     <span class="keywordtype">int</span>        numpar, its ;
-<a name="l01614"></a>01614     <span class="keywordtype">int</span>        * mpar ;
-<a name="l01615"></a>01615     <span class="keywordtype">float</span>      tol, lab ;
-<a name="l01616"></a>01616     <span class="keywordtype">float</span>      * xdat, * wdat ;
-<a name="l01617"></a>01617     Vector     * peak;
-<a name="l01618"></a>01618     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l01619"></a>01619     <span class="keywordtype">int</span>   row , col ;
-<a name="l01620"></a>01620     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m*/</span>, n ;
-<a name="l01621"></a>01621     <span class="keywordtype">int</span>   sign, found, line, width ;
-<a name="l01622"></a>01622     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;
-<a name="l01623"></a>01623     <span class="keywordtype">float</span> offset2 ;
-<a name="l01624"></a>01624     <span class="keywordtype">float</span> threshold ;
-<a name="l01625"></a>01625     <span class="keywordtype">int</span> ed1, ed2 ;
-<a name="l01626"></a>01626 
-<a name="l01627"></a>01627     <span class="keywordtype">int</span> edge[N_SLITLETS] ;
-<a name="l01628"></a>01628     <span class="keywordtype">float</span> par[MAXPAR] ;
-<a name="l01629"></a>01629     <span class="keywordtype">float</span> derv_par[MAXPAR] ;
-<a name="l01630"></a>01630 
-<a name="l01631"></a>01631     <span class="keywordtype">float</span>* emline=NULL ;
-<a name="l01632"></a>01632     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l01633"></a>01633     <span class="keywordtype">float</span>* wave=NULL ;
-<a name="l01634"></a>01634     <span class="keywordtype">float</span>* a0=NULL ;
-<a name="l01635"></a>01635     <span class="keywordtype">float</span>* a0_clean=NULL ;
-<a name="l01636"></a>01636 
-<a name="l01637"></a>01637 
-<a name="l01638"></a>01638     <span class="keywordtype">float</span>* sub_col_index=NULL ;
-<a name="l01639"></a>01639     <span class="keywordtype">float</span>* sub_acoefs=NULL;
-<a name="l01640"></a>01640     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;
-<a name="l01641"></a>01641     <span class="keywordtype">double</span>* z=NULL ;
-<a name="l01642"></a>01642     <span class="keywordtype">double</span>* a=NULL ;
-<a name="l01643"></a>01643 
-<a name="l01644"></a>01644     <span class="keywordtype">float</span>** bcoef=NULL ;
-<a name="l01645"></a>01645     <span class="keywordtype">float</span>* wcoefs=NULL ;
-<a name="l01646"></a>01646 
-<a name="l01647"></a>01647 
-<a name="l01648"></a>01648     <span class="keywordtype">int</span> ns, nc ;
-<a name="l01649"></a>01649     <span class="keywordtype">float</span> * acoefsclean ;
-<a name="l01650"></a>01650     <span class="keywordtype">float</span> col_index;
-<a name="l01651"></a>01651 
-<a name="l01652"></a>01652     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;
-<a name="l01653"></a>01653     <span class="keywordtype">double</span> sum, sumq, mean ;
-<a name="l01654"></a>01654     <span class="keywordtype">double</span> sigma ;
-<a name="l01655"></a>01655     <span class="keywordtype">double</span> cliphi, cliplo ;
-<a name="l01656"></a>01656     <span class="keywordtype">float</span> chisq ;
-<a name="l01657"></a>01657     <span class="keywordtype">int</span> num, ndata ;
-<a name="l01658"></a>01658     gsl_poly_complex_workspace * w ;
-<a name="l01659"></a>01659     <span class="keywordtype">double</span> xcorr_max ;
-<a name="l01660"></a>01660     <span class="keywordtype">int</span> delta ;
-<a name="l01661"></a>01661     <span class="keywordtype">int</span> ilx=0;
-<a name="l01662"></a>01662     <span class="keywordtype">int</span> ily=0;
-<a name="l01663"></a>01663     <span class="keywordtype">int</span> olx=0;
-<a name="l01664"></a>01664     <span class="keywordtype">int</span> oly=0;
-<a name="l01665"></a>01665     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l01666"></a>01666     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l01667"></a>01667 
-<a name="l01668"></a>01668 
-<a name="l01669"></a>01669     <span class="keywordflow">if</span> ( lineIm == NULL )
-<a name="l01670"></a>01670     {
-<a name="l01671"></a>01671         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l01672"></a>01672         <span class="keywordflow">return</span> NULL ;
-<a name="l01673"></a>01673     }
-<a name="l01674"></a>01674 
-<a name="l01675"></a>01675     ilx=cpl_image_get_size_x(lineIm);
-<a name="l01676"></a>01676     ily=cpl_image_get_size_y(lineIm);
-<a name="l01677"></a>01677     pidata=cpl_image_get_data_float(lineIm);
-<a name="l01678"></a>01678 
-<a name="l01679"></a>01679     <span class="keywordflow">if</span> ( coeffs == NULL )
-<a name="l01680"></a>01680     {
-<a name="l01681"></a>01681         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;
-<a name="l01682"></a>01682         <span class="keywordflow">return</span> NULL ;
-<a name="l01683"></a>01683     }
-<a name="l01684"></a>01684     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )
-<a name="l01685"></a>01685     {
-<a name="l01686"></a>01686         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;
-<a name="l01687"></a>01687         <span class="keywordflow">return</span> NULL ;
-<a name="l01688"></a>01688     }
-<a name="l01689"></a>01689     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )
-<a name="l01690"></a>01690     {
-<a name="l01691"></a>01691         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l01692"></a>01692         <span class="keywordflow">return</span> NULL ;
-<a name="l01693"></a>01693     }
-<a name="l01694"></a>01694     <span class="keywordflow">if</span> ( n_lines < 1 || magFactor < 1 )
-<a name="l01695"></a>01695     {
-<a name="l01696"></a>01696         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l01697"></a>01697         <span class="keywordflow">return</span> NULL ;
-<a name="l01698"></a>01698     }
-<a name="l01699"></a>01699     var    = (magFactor - 1)*(magFactor - 1) ;
-<a name="l01700"></a>01700     <span class="comment">/* find out if Angstroem or microns are used */</span>
-<a name="l01701"></a>01701     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )
-<a name="l01702"></a>01702     {
-<a name="l01703"></a>01703         <span class="comment">/* Angstroem */</span>
-<a name="l01704"></a>01704         angst = 10000. ;
-<a name="l01705"></a>01705     }
-<a name="l01706"></a>01706     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )
-<a name="l01707"></a>01707     {
-<a name="l01708"></a>01708         <span class="comment">/* nanometers */</span>
-<a name="l01709"></a>01709         angst = 1000. ;
-<a name="l01710"></a>01710     }
-<a name="l01711"></a>01711     <span class="keywordflow">else</span>
-<a name="l01712"></a>01712     {
-<a name="l01713"></a>01713         <span class="comment">/* microns */</span>
-<a name="l01714"></a>01714         angst = 1. ;
-<a name="l01715"></a>01715     }
-<a name="l01716"></a>01716 
-<a name="l01717"></a>01717     bcoef=sinfo_new_2Dfloatarray(N_SLITLETS,n_fitcoeffs) ;
-<a name="l01718"></a>01718     wcoefs=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01719"></a>01719 
-<a name="l01720"></a>01720     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01721"></a>01721     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01722"></a>01722     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01723"></a>01723     a0=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01724"></a>01724     a0_clean=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01725"></a>01725 
-<a name="l01726"></a>01726 
-<a name="l01727"></a>01727 
-<a name="l01728"></a>01728     sub_col_index=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01729"></a>01729     sub_acoefs=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l01730"></a>01730     sub_dacoefs=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l01731"></a>01731 
-<a name="l01732"></a>01732     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01733"></a>01733     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l01734"></a>01734 
-<a name="l01735"></a>01735     <span class="comment">/* find the slitlet edges from the a0 coefficient */</span>
-<a name="l01736"></a>01736     n = 0 ;
-<a name="l01737"></a>01737     threshold = pixel_dist * fabs(dispersion) ;
-<a name="l01738"></a>01738     <span class="keywordflow">for</span> ( i = PIXEL ; i < ilx - PIXEL ; )
-<a name="l01739"></a>01739     {
-<a name="l01740"></a>01740         <span class="keywordflow">if</span> (fabs(coeffs[0][i+1] - coeffs[0][i]) >= threshold )
-<a name="l01741"></a>01741         {
-<a name="l01742"></a>01742             edge[n] = i+1 ;
-<a name="l01743"></a>01743             n++ ;
-<a name="l01744"></a>01744             i += PIXEL ;
-<a name="l01745"></a>01745         }
-<a name="l01746"></a>01746         i++ ;
-<a name="l01747"></a>01747     }
-<a name="l01748"></a>01748 
-<a name="l01749"></a>01749 
-<a name="l01750"></a>01750     <span class="comment">/* allocate memory */</span>
-<a name="l01751"></a>01751     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily, CPL_TYPE_FLOAT)) )
-<a name="l01752"></a>01752     {
-<a name="l01753"></a>01753         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;
-<a name="l01754"></a>01754         <span class="keywordflow">return</span> NULL ;
-<a name="l01755"></a>01755     }
-<a name="l01756"></a>01756     olx=cpl_image_get_size_x(wavemap);
-<a name="l01757"></a>01757     oly=cpl_image_get_size_y(wavemap);
-<a name="l01758"></a>01758     podata=cpl_image_get_data_float(wavemap);
-<a name="l01759"></a>01759 
-<a name="l01760"></a>01760     <span class="comment">/* first store each spectrum in a buffer */</span>
-<a name="l01761"></a>01761     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l01762"></a>01762     {
-<a name="l01763"></a>01763         <span class="comment">/* initialize the emline array for each column */</span>
-<a name="l01764"></a>01764         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )
-<a name="l01765"></a>01765         {
-<a name="l01766"></a>01766             emline[i] = 0. ;
-<a name="l01767"></a>01767         }
-<a name="l01768"></a>01768         <span class="comment">/* determine the coefficients by using the given bcoefs */</span>
-<a name="l01769"></a>01769         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )
-<a name="l01770"></a>01770         {
-<a name="l01771"></a>01771             <span class="comment">/* initialize coefficients and solution */</span>
-<a name="l01772"></a>01772             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)
-<a name="l01773"></a>01773             {
-<a name="l01774"></a>01774                 z[2*i] = 0. ;
-<a name="l01775"></a>01775                 z[2*i+1] = 0. ;
-<a name="l01776"></a>01776             }
-<a name="l01777"></a>01777             a[i] = coeffs[i][col] ;
-<a name="l01778"></a>01778         }
-<a name="l01779"></a>01779          
-<a name="l01780"></a>01780         a_initial = coeffs[0][col] ;
-<a name="l01781"></a>01781         <span class="comment">/* go through the lines and generate an artificial spectrum */</span>
-<a name="l01782"></a>01782         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l01783"></a>01783         {
-<a name="l01784"></a>01784             <span class="comment">/* go from Angstroem to micron */</span>
-<a name="l01785"></a>01785             wave[line] = wavelength[line]/angst ;
-<a name="l01786"></a>01786 
-<a name="l01787"></a>01787             <span class="comment">/* ------------------------------------------------------------</span>
-<a name="l01788"></a>01788 <span class="comment">             * solve the polynomial for the exact offset of the line that means</span>
-<a name="l01789"></a>01789 <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span>
-<a name="l01790"></a>01790 <span class="comment">             */</span>
-<a name="l01791"></a>01791             a[0] = a_initial - wave[line] ;
-<a name="l01792"></a>01792 
-<a name="l01793"></a>01793             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) 
-<a name="l01794"></a>01794             {
-<a name="l01795"></a>01795                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;
-<a name="l01796"></a>01796                 cpl_image_delete(wavemap) ;
-<a name="l01797"></a>01797                 <span class="keywordflow">return</span> NULL ;
-<a name="l01798"></a>01798             }
-<a name="l01799"></a>01799             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) 
-<a name="l01800"></a>01800             {
-<a name="l01801"></a>01801                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_gsl_poly_complex_solve did not work!"</span>) ;
-<a name="l01802"></a>01802                 cpl_image_delete(wavemap) ;
-<a name="l01803"></a>01803                 <span class="keywordflow">return</span> NULL ;
-<a name="l01804"></a>01804             }
-<a name="l01805"></a>01805             sinfo_gsl_poly_complex_workspace_free(w) ;           
-<a name="l01806"></a>01806 
-<a name="l01807"></a>01807             j = 0 ;
-<a name="l01808"></a>01808             found = -1 ;
-<a name="l01809"></a>01809             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )
-<a name="l01810"></a>01810             {
-<a name="l01811"></a>01811                 <span class="comment">/* test for appropriate solution */</span>
-<a name="l01812"></a>01812                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&
-<a name="l01813"></a>01813                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )
-<a name="l01814"></a>01814                 {
-<a name="l01815"></a>01815                     found = 2*i ;
-<a name="l01816"></a>01816                     j ++ ;
-<a name="l01817"></a>01817                 }
-<a name="l01818"></a>01818                 <span class="keywordflow">else</span>
-<a name="l01819"></a>01819                 {
-<a name="l01820"></a>01820                     continue ;
-<a name="l01821"></a>01821                 }
-<a name="l01822"></a>01822             }
-<a name="l01823"></a>01823             <span class="keywordflow">if</span> ( j == 0 )
-<a name="l01824"></a>01824             {
-<a name="l01825"></a>01825                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" no offset solution found for "</span>
-<a name="l01826"></a>01826                                   <span class="stringliteral">"line %d in column %d\n"</span>, line, col) ;
-<a name="l01827"></a>01827                 continue ;
-<a name="l01828"></a>01828             }
-<a name="l01829"></a>01829             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )
-<a name="l01830"></a>01830             {
-<a name="l01831"></a>01831                 cenpos = z[found] + (float) ily/2. ;
-<a name="l01832"></a>01832             }
-<a name="l01833"></a>01833             <span class="keywordflow">else</span>
-<a name="l01834"></a>01834             {
-<a name="l01835"></a>01835                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" two or more offset solutions found "</span>
-<a name="l01836"></a>01836                                   <span class="stringliteral">"for line %d in column %d"</span>, line, col) ;
-<a name="l01837"></a>01837                 continue ;
-<a name="l01838"></a>01838             }
-<a name="l01839"></a>01839 
-<a name="l01840"></a>01840             <span class="comment">/*----------------------------------------------------------------</span>
-<a name="l01841"></a>01841 <span class="comment">             * magnify image by the given factor add an additional offset</span>
-<a name="l01842"></a>01842 <span class="comment">             */</span>
-<a name="l01843"></a>01843             cenpix = cenpos ;
-<a name="l01844"></a>01844 
-<a name="l01845"></a>01845             <span class="comment">/* determine max and min pixel limits over which line should </span>
-<a name="l01846"></a>01846 <span class="comment">               be convolved */</span>
-<a name="l01847"></a>01847             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? 
-<a name="l01848"></a>01848                     sinfo_new_nint(cenpix) - (var-1) : 0 ;
-<a name="l01849"></a>01849             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?
-<a name="l01850"></a>01850                     sinfo_new_nint(cenpix) + (var-1)  : ily ;
-<a name="l01851"></a>01851 
-<a name="l01852"></a>01852             <span class="comment">/* convolve neon lines with Gaussian function */</span>
-<a name="l01853"></a>01853             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )
-<a name="l01854"></a>01854             {
-<a name="l01855"></a>01855                 emline[j] += intensity[line] * 
-<a name="l01856"></a>01856                        exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;
-<a name="l01857"></a>01857             }
-<a name="l01858"></a>01858         }
-<a name="l01859"></a>01859 
-<a name="l01860"></a>01860         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l01861"></a>01861 <span class="comment">         * for each column, map the image data points onto an magFactor times </span>
-<a name="l01862"></a>01862 <span class="comment">           bigger element grid for FFT  in the cross sinfo_correlation, first </span>
-<a name="l01863"></a>01863 <span class="comment">           initialize the two helping arrays for each new column.</span>
-<a name="l01864"></a>01864 <span class="comment">         */</span>
-<a name="l01865"></a>01865         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )
-<a name="l01866"></a>01866         {
-<a name="l01867"></a>01867             spec[k] = 0. ;
-<a name="l01868"></a>01868         }
-<a name="l01869"></a>01869 
-<a name="l01870"></a>01870         <span class="comment">/* now take the image data points of the column and put them into </span>
-<a name="l01871"></a>01871 <span class="comment">           the spec array */</span>
-<a name="l01872"></a>01872         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span>
-<a name="l01873"></a>01873         {
-<a name="l01874"></a>01874             <span class="comment">/* set bad pixels or negative values to zero */</span>
-<a name="l01875"></a>01875             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&
-<a name="l01876"></a>01876                 (pidata[col + row*ilx] > 0.))
-<a name="l01877"></a>01877             {
-<a name="l01878"></a>01878                 spec[row] = pidata[col + row*ilx] ;
-<a name="l01879"></a>01879             }
-<a name="l01880"></a>01880             <span class="keywordflow">else</span>
-<a name="l01881"></a>01881             {
-<a name="l01882"></a>01882                 spec[row] = 0. ;
-<a name="l01883"></a>01883             }
-<a name="l01884"></a>01884         }
-<a name="l01885"></a>01885         <span class="comment">/* convolve the spectrum by Gaussian */</span>
-<a name="l01886"></a>01886         filter_spec = sinfo_function1d_filter_lowpass(spec,ily, 
-<a name="l01887"></a>01887                                                       LOW_PASS_GAUSSIAN, 
-<a name="l01888"></a>01888                                                       magFactor) ; 
-<a name="l01889"></a>01889 
-<a name="l01890"></a>01890         <span class="comment">/* now call the cross sinfo_correlation routine */</span>
-<a name="l01891"></a>01891         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,
-<a name="l01892"></a>01892                           ily/2, &delta, &maxlag, &xcorr_max) ;
-<a name="l01893"></a>01893 
-<a name="l01894"></a>01894         <span class="keywordflow">if</span> ( xcorr_max <= 0. )
-<a name="l01895"></a>01895         {
-<a name="l01896"></a>01896             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross sinfo_correlation "</span>
-<a name="l01897"></a>01897                               <span class="stringliteral">"sum , col %d set to ZERO \n"</span>, col) ;
-<a name="l01898"></a>01898             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01899"></a>01899             {
-<a name="l01900"></a>01900                 podata[col + row*ilx] = ZERO ;
-<a name="l01901"></a>01901             }
-<a name="l01902"></a>01902             sinfo_function1d_del(filter_spec) ;
-<a name="l01903"></a>01903             cpl_free(result) ;
-<a name="l01904"></a>01904             continue ;
-<a name="l01905"></a>01905         }
-<a name="l01906"></a>01906 
-<a name="l01907"></a>01907        <span class="comment">/* in this section, we fit the sinfo_correlation function with a gauss, </span>
-<a name="l01908"></a>01908 <span class="comment">          and find its peak, thus getting subpixel-accuracy */</span>
-<a name="l01909"></a>01909 
-<a name="l01910"></a>01910         i = maxlag; j = i+1;
-<a name="l01911"></a>01911         <span class="keywordflow">while</span> (result[j] < result[i])
-<a name="l01912"></a>01912         {
-<a name="l01913"></a>01913             i++; j++;
-<a name="l01914"></a>01914         }
-<a name="l01915"></a>01915         i = maxlag; k = i-1;
-<a name="l01916"></a>01916         <span class="keywordflow">while</span> (result[k] < result[i])
-<a name="l01917"></a>01917         {
-<a name="l01918"></a>01918             i--; k--;
-<a name="l01919"></a>01919         }
-<a name="l01920"></a>01920         width = j-k+1;
-<a name="l01921"></a>01921         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l01922"></a>01922         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )
-<a name="l01923"></a>01923         {
-<a name="l01924"></a>01924             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;
-<a name="l01925"></a>01925             sinfo_function1d_del(filter_spec) ;
-<a name="l01926"></a>01926             cpl_free(result) ;
-<a name="l01927"></a>01927             <span class="keywordflow">return</span> NULL ;
-<a name="l01928"></a>01928         }
-<a name="l01929"></a>01929 
-<a name="l01930"></a>01930 
-<a name="l01931"></a>01931         <span class="comment">/* allocate memory */</span>
-<a name="l01932"></a>01932         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01933"></a>01933         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l01934"></a>01934         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l01935"></a>01935 
-<a name="l01936"></a>01936         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span>
-<a name="l01937"></a>01937         <span class="comment">/* go through the chosen column */</span>
-<a name="l01938"></a>01938 
-<a name="l01939"></a>01939         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )
-<a name="l01940"></a>01940         {
-<a name="l01941"></a>01941             peak -> data[i] = result[k+i]/xcorr_max * 100. ;
-<a name="l01942"></a>01942             xdat[i] = i;
-<a name="l01943"></a>01943             wdat[i] = 1.0;
-<a name="l01944"></a>01944         }
-<a name="l01945"></a>01945 
-<a name="l01946"></a>01946         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l01947"></a>01947         xdim     = XDIM;
-<a name="l01948"></a>01948         ndat     = peak -> n_elements ;
-<a name="l01949"></a>01949         numpar   = MAXPAR ;
-<a name="l01950"></a>01950         tol      = TOL ;
-<a name="l01951"></a>01951         lab      = LAB ;
-<a name="l01952"></a>01952         its      = ITS ;
-<a name="l01953"></a>01953         par[1] = width/2.0 ;
-<a name="l01954"></a>01954         par[2] = (float) (maxlag - k) ;
-<a name="l01955"></a>01955         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;
-<a name="l01956"></a>01956         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;
-<a name="l01957"></a>01957 
-<a name="l01958"></a>01958         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )
-<a name="l01959"></a>01959         {
-<a name="l01960"></a>01960             derv_par[i] = 0.0 ;
-<a name="l01961"></a>01961             mpar[i] = 1 ;
-<a name="l01962"></a>01962         }
-<a name="l01963"></a>01963 
-<a name="l01964"></a>01964         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l01965"></a>01965         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, peak -> data, 
-<a name="l01966"></a>01966                                                wdat, &ndat, par, 
-<a name="l01967"></a>01967                                                derv_par, mpar,
-<a name="l01968"></a>01968                                                &numpar, &tol, &its, &lab )) )
-<a name="l01969"></a>01969         {
-<a name="l01970"></a>01970             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit "</span>
-<a name="l01971"></a>01971                                <span class="stringliteral">"failed in col: %d, error no.: %d"</span>, col, iters);
-<a name="l01972"></a>01972             sinfo_new_destroy_vector ( peak ) ;
-<a name="l01973"></a>01973             cpl_free ( xdat ) ;
-<a name="l01974"></a>01974             cpl_free ( wdat ) ;
-<a name="l01975"></a>01975             cpl_free ( mpar ) ;
-<a name="l01976"></a>01976             sinfo_function1d_del(filter_spec) ;
-<a name="l01977"></a>01977             cpl_free(result) ;
-<a name="l01978"></a>01978             continue ;
-<a name="l01979"></a>01979         }
-<a name="l01980"></a>01980 
-<a name="l01981"></a>01981         sinfo_new_destroy_vector ( peak ) ;
-<a name="l01982"></a>01982         cpl_free (xdat) ;
-<a name="l01983"></a>01983         cpl_free (wdat) ;
-<a name="l01984"></a>01984         cpl_free (mpar) ;
-<a name="l01985"></a>01985         sinfo_function1d_del(filter_spec) ;
-<a name="l01986"></a>01986         cpl_free(result) ;
-<a name="l01987"></a>01987 
-<a name="l01988"></a>01988         wavelag =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;
-<a name="l01989"></a>01989 
-<a name="l01990"></a>01990         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )
-<a name="l01991"></a>01991         {
-<a name="l01992"></a>01992             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wavelag very big , col %d set to ZERO "</span>, col) ;
-<a name="l01993"></a>01993             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l01994"></a>01994             {
-<a name="l01995"></a>01995                 podata[col + row*ilx] = ZERO ;
-<a name="l01996"></a>01996             }
-<a name="l01997"></a>01997             continue ;
-<a name="l01998"></a>01998         }
-<a name="l01999"></a>01999 
-<a name="l02000"></a>02000         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02001"></a>02001 <span class="comment">         * determine new zero order coefficient centreval, of which the </span>
-<a name="l02002"></a>02002 <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span>
-<a name="l02003"></a>02003 <span class="comment">         * wavelag with the same higher order coefficients and set the new </span>
-<a name="l02004"></a>02004 <span class="comment">         * zero order coefficient to get both sides of the equation </span>
-<a name="l02005"></a>02005 <span class="comment">         * approximately equal.</span>
-<a name="l02006"></a>02006 <span class="comment">         */</span>
-<a name="l02007"></a>02007         centreval = a_initial ;
-<a name="l02008"></a>02008         <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l02009"></a>02009         {
-<a name="l02010"></a>02010             <span class="keywordflow">if</span> ( i%2 == 0 )
-<a name="l02011"></a>02011             {
-<a name="l02012"></a>02012                 sign = -1 ;
-<a name="l02013"></a>02013             }
-<a name="l02014"></a>02014             <span class="keywordflow">else</span>
-<a name="l02015"></a>02015             {
-<a name="l02016"></a>02016                 sign = 1 ;
-<a name="l02017"></a>02017             }
-<a name="l02018"></a>02018             centreval += (float)sign * coeffs[i][col]*pow(wavelag, i) ;
-<a name="l02019"></a>02019         }
-<a name="l02020"></a>02020         a0[col] = centreval ;
-<a name="l02021"></a>02021     }
-<a name="l02022"></a>02022 
-<a name="l02023"></a>02023     <span class="comment">/* go through the single slitlets */</span>
-<a name="l02024"></a>02024     <span class="keywordflow">for</span> ( ns = 0 ; ns < N_SLITLETS ; ns++ )
-<a name="l02025"></a>02025     {
-<a name="l02026"></a>02026         <span class="comment">/* determine the slitlet edges */</span>
-<a name="l02027"></a>02027         <span class="keywordflow">if</span> ( ns == 0 )
-<a name="l02028"></a>02028         {
-<a name="l02029"></a>02029             ed1 = 0 ;
-<a name="l02030"></a>02030             ed2 = edge[0] ;
-<a name="l02031"></a>02031         }
-<a name="l02032"></a>02032         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == N_SLITLETS - 1 )
-<a name="l02033"></a>02033         {
-<a name="l02034"></a>02034             ed1 = edge[N_SLITLETS - 2] ;
-<a name="l02035"></a>02035             ed2 = ilx ;
-<a name="l02036"></a>02036         }
-<a name="l02037"></a>02037         <span class="keywordflow">else</span>
-<a name="l02038"></a>02038         {
-<a name="l02039"></a>02039             ed1 = edge[ns-1] ;
-<a name="l02040"></a>02040             ed2 = edge[ns] ;
-<a name="l02041"></a>02041         }
-<a name="l02042"></a>02042 
-<a name="l02043"></a>02043         nc = 0 ;
-<a name="l02044"></a>02044         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l02045"></a>02045         {
-<a name="l02046"></a>02046             <span class="keywordflow">if</span> ( isnan(a0[i]) || a0[i] == 0. )
-<a name="l02047"></a>02047             {
-<a name="l02048"></a>02048                 continue ;
-<a name="l02049"></a>02049             }
-<a name="l02050"></a>02050             <span class="keywordflow">else</span>
-<a name="l02051"></a>02051             {
-<a name="l02052"></a>02052                 nc++ ;
-<a name="l02053"></a>02053             }
-<a name="l02054"></a>02054         }
-<a name="l02055"></a>02055         <span class="keywordflow">if</span> ( NULL == (acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l02056"></a>02056         {
-<a name="l02057"></a>02057             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!\n"</span>) ;
-<a name="l02058"></a>02058             <span class="keywordflow">return</span> NULL ;
-<a name="l02059"></a>02059         }
-<a name="l02060"></a>02060         nc = 0 ;
-<a name="l02061"></a>02061         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l02062"></a>02062         {
-<a name="l02063"></a>02063             <span class="keywordflow">if</span> ( isnan(a0[i]) || a0[i] == 0. )
-<a name="l02064"></a>02064             {
-<a name="l02065"></a>02065                 continue ;
-<a name="l02066"></a>02066             }
-<a name="l02067"></a>02067             <span class="keywordflow">else</span>
-<a name="l02068"></a>02068             {
-<a name="l02069"></a>02069                 acoefsclean[nc] = a0[i] ;
-<a name="l02070"></a>02070                 nc++ ;
-<a name="l02071"></a>02071             }
-<a name="l02072"></a>02072         }
-<a name="l02073"></a>02073 
-<a name="l02074"></a>02074         <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l02075"></a>02075 <span class="comment">         * determine the clean mean and sigma value of the coefficients,</span>
-<a name="l02076"></a>02076 <span class="comment">         * that means reject 10 % of the extreme low and high values</span>
-<a name="l02077"></a>02077 <span class="comment">         */</span>
-<a name="l02078"></a>02078         sinfo_pixel_qsort(acoefsclean, nc) ;
-<a name="l02079"></a>02079         sum   = 0. ;
-<a name="l02080"></a>02080         sumq  = 0. ;
-<a name="l02081"></a>02081         mean  = 0. ;
-<a name="l02082"></a>02082         sigma = 0. ;
-<a name="l02083"></a>02083         n     = 0 ;
-<a name="l02084"></a>02084         <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; 
-<a name="l02085"></a>02085               i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )
-<a name="l02086"></a>02086         {
-<a name="l02087"></a>02087             sum  += (double)acoefsclean[i] ;
-<a name="l02088"></a>02088             sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;
-<a name="l02089"></a>02089             n ++ ;
-<a name="l02090"></a>02090         }
-<a name="l02091"></a>02091         mean          = sum/(double)n ;
-<a name="l02092"></a>02092         sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;
-<a name="l02093"></a>02093         cliphi        = mean + sigma * (double)3. ;
-<a name="l02094"></a>02094         cliplo        = mean - sigma * (double)3. ;
-<a name="l02095"></a>02095         <span class="comment">/* fit only the reasonnable values */</span>
-<a name="l02096"></a>02096         num = 0 ;
-<a name="l02097"></a>02097         col_index = 0 ;
-<a name="l02098"></a>02098         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l02099"></a>02099         {
-<a name="l02100"></a>02100             <span class="comment">/* take only the reasonnable coefficients */</span>
-<a name="l02101"></a>02101             <span class="keywordflow">if</span> ( !isnan(a0[i]) && (a0[i] <= cliphi) && (a0[i] >= cliplo) &&
-<a name="l02102"></a>02102                  (a0[i] != 0.) )
-<a name="l02103"></a>02103             {
-<a name="l02104"></a>02104                 sub_acoefs[num]    = a0[i] ;
-<a name="l02105"></a>02105                 sub_dacoefs[num]   = 0.0000005 ;
-<a name="l02106"></a>02106                 sub_col_index[num] = col_index ;
-<a name="l02107"></a>02107                 num ++ ;
-<a name="l02108"></a>02108             }
-<a name="l02109"></a>02109             col_index++ ;
-<a name="l02110"></a>02110         }
-<a name="l02111"></a>02111         ndata = num ;
-<a name="l02112"></a>02112         offset2 = (float)(col_index-1) / 2. ;
-<a name="l02113"></a>02113 
-<a name="l02114"></a>02114         <span class="keywordflow">if</span> ( ndata < n_fitcoeffs )
-<a name="l02115"></a>02115         {
-<a name="l02116"></a>02116             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough data found in slitlet %d\</span>
-<a name="l02117"></a>02117 <span class="stringliteral">                    to determine the fit coefficients.\n"</span>, ns) ;
-<a name="l02118"></a>02118             cpl_free(acoefsclean) ;
-<a name="l02119"></a>02119             <span class="keywordflow">return</span> NULL ;
-<a name="l02120"></a>02120         }
-<a name="l02121"></a>02121 
-<a name="l02122"></a>02122         <span class="comment">/* allocate coefficient matrices, see numerical recipe function </span>
-<a name="l02123"></a>02123 <span class="comment">           sinfo_matrix */</span>
-<a name="l02124"></a>02124         ucoefs = sinfo_matrix(1, ndata, 1, n_fitcoeffs) ;
-<a name="l02125"></a>02125         vcoefs = sinfo_matrix(1, ndata, 1, n_fitcoeffs) ;
-<a name="l02126"></a>02126         covar  = sinfo_matrix(1, n_fitcoeffs, 1, n_fitcoeffs) ;
-<a name="l02127"></a>02127 
-<a name="l02128"></a>02128         <span class="comment">/* scale the x-values for the fit */</span>
-<a name="l02129"></a>02129         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l02130"></a>02130         {
-<a name="l02131"></a>02131             sub_col_index[i] = (sub_col_index[i] - offset2) / offset2 ;
-<a name="l02132"></a>02132         }
-<a name="l02133"></a>02133 
-<a name="l02134"></a>02134         <span class="comment">/* finally, do the singular value decomposition fit */</span>
-<a name="l02135"></a>02135         sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, 
-<a name="l02136"></a>02136                             sub_dacoefs-1, ndata, bcoef[ns]-1,
-<a name="l02137"></a>02137                             n_fitcoeffs, ucoefs, vcoefs, wcoefs-1, 
-<a name="l02138"></a>02138                             covar, &chisq, sinfo_fpol ) ;
-<a name="l02139"></a>02139 
-<a name="l02140"></a>02140         <span class="comment">/* scale the found coefficients */</span>
-<a name="l02141"></a>02141         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i ++ )
-<a name="l02142"></a>02142         {
-<a name="l02143"></a>02143             bcoef[ns][i] /= pow( offset2, i ) ;
-<a name="l02144"></a>02144         }
-<a name="l02145"></a>02145 
-<a name="l02146"></a>02146         <span class="comment">/* free memory */</span>
-<a name="l02147"></a>02147         cpl_free (acoefsclean) ;
-<a name="l02148"></a>02148         sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoeffs */</span>) ;
-<a name="l02149"></a>02149         sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoeffs */</span>) ;
-<a name="l02150"></a>02150         sinfo_free_matrix( covar, 1<span class="comment">/*, n_fitcoeffs*/</span>, 1<span class="comment">/*, n_fitcoeffs*/</span>) ;
-<a name="l02151"></a>02151 
-<a name="l02152"></a>02152         <span class="comment">/* now calculate the smoothed acoefs for each column */</span>
-<a name="l02153"></a>02153         col_index = 0 ;
-<a name="l02154"></a>02154         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l02155"></a>02155         {
-<a name="l02156"></a>02156             a0_clean[i] = 0. ;
-<a name="l02157"></a>02157             <span class="keywordflow">for</span> ( n = 0 ; n < n_fitcoeffs ; n++ )
-<a name="l02158"></a>02158             {
-<a name="l02159"></a>02159               a0_clean[i] += bcoef[ns][n] * 
-<a name="l02160"></a>02160                              pow((<span class="keywordtype">float</span>)col_index - offset2, n) ;
-<a name="l02161"></a>02161             }
-<a name="l02162"></a>02162             col_index++ ;
-<a name="l02163"></a>02163         }
-<a name="l02164"></a>02164 
-<a name="l02165"></a>02165     }
-<a name="l02166"></a>02166 
-<a name="l02167"></a>02167     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02168"></a>02168     {
-<a name="l02169"></a>02169         <span class="comment">/* prepare to write out wavelength as pixel values */</span>
-<a name="l02170"></a>02170         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02171"></a>02171         {
-<a name="l02172"></a>02172             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;
-<a name="l02173"></a>02173             pixvalue = 0. ;
-<a name="l02174"></a>02174             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l02175"></a>02175             {
-<a name="l02176"></a>02176                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;
-<a name="l02177"></a>02177             }
-<a name="l02178"></a>02178             podata[col+row*olx] = a0_clean[col] + pixvalue ;
-<a name="l02179"></a>02179         }
-<a name="l02180"></a>02180     }
-<a name="l02181"></a>02181 
-<a name="l02182"></a>02182 
-<a name="l02183"></a>02183     cpl_free(emline) ;
-<a name="l02184"></a>02184     cpl_free(spec) ;
-<a name="l02185"></a>02185     cpl_free(wave) ;
-<a name="l02186"></a>02186     cpl_free(a0) ;
-<a name="l02187"></a>02187     cpl_free(a0_clean) ;
-<a name="l02188"></a>02188 
-<a name="l02189"></a>02189 
-<a name="l02190"></a>02190     cpl_free(sub_col_index) ;
-<a name="l02191"></a>02191     cpl_free(sub_acoefs);
-<a name="l02192"></a>02192     cpl_free(sub_dacoefs) ;
-<a name="l02193"></a>02193 
-<a name="l02194"></a>02194     cpl_free(a) ;
-<a name="l02195"></a>02195     cpl_free(z) ;
-<a name="l02196"></a>02196 
-<a name="l02197"></a>02197     sinfo_new_destroy_2Dfloatarray(&bcoef,n_fitcoeffs) ;
-<a name="l02198"></a>02198     cpl_free(wcoefs) ;
-<a name="l02199"></a>02199 
-<a name="l02200"></a>02200     <span class="keywordflow">return</span> wavemap ;
-<a name="l02201"></a>02201 }
-<a name="l02202"></a>02202 
-<a name="l02226"></a>02226 cpl_image * sinfo_new_create_shifted_slit_wavemap3 ( cpl_image * lineIm,
-<a name="l02227"></a>02227                               <span class="keywordtype">float</span>    ** coeffs,
-<a name="l02228"></a>02228                           <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l02229"></a>02229                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l02230"></a>02230                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l02231"></a>02231                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l02232"></a>02232                                       <span class="keywordtype">int</span>      magFactor )
-<a name="l02233"></a>02233 {
-<a name="l02234"></a>02234 
-<a name="l02235"></a>02235     cpl_image * wavemap ;
-<a name="l02236"></a>02236     <span class="keywordtype">double</span> * result ;
-<a name="l02237"></a>02237     <span class="keywordtype">float</span> * filter_spec ;
-<a name="l02238"></a>02238     <span class="keywordtype">float</span> centreval ;
-<a name="l02239"></a>02239     <span class="keywordtype">float</span> centrepix ;
-<a name="l02240"></a>02240     <span class="keywordtype">float</span> cenpos, cenpix ;
-<a name="l02241"></a>02241     <span class="keywordtype">float</span> pixvalue ;
-<a name="l02242"></a>02242     <span class="keywordtype">float</span> wavelag_mean ;
-<a name="l02243"></a>02243     <span class="comment">/*float maxres ;*/</span>
-<a name="l02244"></a>02244     <span class="keywordtype">float</span> angst ;
-<a name="l02245"></a>02245     <span class="comment">/*float temp ;*/</span>
-<a name="l02246"></a>02246     <span class="keywordtype">float</span> a_initial ;
-<a name="l02247"></a>02247     <span class="comment">/*float solution[n_fitcoeffs-1], im_solution[n_fitcoeffs-1] ;*/</span>
-<a name="l02248"></a>02248 
-<a name="l02249"></a>02249     <span class="keywordtype">float</span> par[MAXPAR] ;
-<a name="l02250"></a>02250     <span class="keywordtype">float</span> derv_par[MAXPAR] ;
-<a name="l02251"></a>02251     <span class="keywordtype">int</span>        numpar, its ;
-<a name="l02252"></a>02252     <span class="keywordtype">int</span>        * mpar ;
-<a name="l02253"></a>02253     <span class="keywordtype">float</span>      tol, lab ;
-<a name="l02254"></a>02254     <span class="keywordtype">float</span>      * xdat, * wdat ;
-<a name="l02255"></a>02255     Vector     * peak;
-<a name="l02256"></a>02256     <span class="keywordtype">int</span>   iters, xdim, ndat ;
-<a name="l02257"></a>02257     <span class="keywordtype">int</span>   row , col ;
-<a name="l02258"></a>02258     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m, n*/</span> ;
-<a name="l02259"></a>02259     <span class="keywordtype">int</span>   sign, found, line, width ;
-<a name="l02260"></a>02260     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;
-<a name="l02261"></a>02261 
-<a name="l02262"></a>02262     <span class="keywordtype">float</span>* emline=NULL ;
-<a name="l02263"></a>02263     <span class="keywordtype">float</span>* spec=NULL ;
-<a name="l02264"></a>02264     <span class="keywordtype">float</span>* wavelag=NULL ;
-<a name="l02265"></a>02265     <span class="keywordtype">float</span>* wave=NULL ;
-<a name="l02266"></a>02266     <span class="keywordtype">double</span>* a=NULL ;
-<a name="l02267"></a>02267     <span class="keywordtype">double</span>* z=NULL ;
-<a name="l02268"></a>02268 
-<a name="l02269"></a>02269     gsl_poly_complex_workspace * w ;
-<a name="l02270"></a>02270     <span class="keywordtype">double</span> xcorr_max ;
-<a name="l02271"></a>02271     <span class="keywordtype">int</span> delta ;
-<a name="l02272"></a>02272     
-<a name="l02273"></a>02273     <span class="keywordtype">int</span> ilx=0;
-<a name="l02274"></a>02274     <span class="keywordtype">int</span> ily=0;
-<a name="l02275"></a>02275     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l02276"></a>02276     <span class="keywordtype">int</span> olx=0;
-<a name="l02277"></a>02277     <span class="keywordtype">int</span> oly=0;
-<a name="l02278"></a>02278     <span class="keywordtype">float</span>* podata=NULL;
-<a name="l02279"></a>02279 
-<a name="l02280"></a>02280 
-<a name="l02281"></a>02281 
-<a name="l02282"></a>02282     <span class="keywordflow">if</span> ( lineIm == NULL )
-<a name="l02283"></a>02283     {
-<a name="l02284"></a>02284         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l02285"></a>02285         <span class="keywordflow">return</span> NULL ;
-<a name="l02286"></a>02286     }
-<a name="l02287"></a>02287     ilx=cpl_image_get_size_x(lineIm);
-<a name="l02288"></a>02288     ily=cpl_image_get_size_y(lineIm);
-<a name="l02289"></a>02289     pidata=cpl_image_get_data_float(lineIm);
-<a name="l02290"></a>02290 
-<a name="l02291"></a>02291     <span class="keywordflow">if</span> ( coeffs == NULL )
-<a name="l02292"></a>02292     {
-<a name="l02293"></a>02293         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;
-<a name="l02294"></a>02294         <span class="keywordflow">return</span> NULL ;
-<a name="l02295"></a>02295     }
-<a name="l02296"></a>02296     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )
-<a name="l02297"></a>02297     {
-<a name="l02298"></a>02298         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;
-<a name="l02299"></a>02299         <span class="keywordflow">return</span> NULL ;
-<a name="l02300"></a>02300     }
-<a name="l02301"></a>02301 
-<a name="l02302"></a>02302     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )
-<a name="l02303"></a>02303     {
-<a name="l02304"></a>02304         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no wavelength list given!\n"</span>) ;
-<a name="l02305"></a>02305         <span class="keywordflow">return</span> NULL ;
-<a name="l02306"></a>02306     }
-<a name="l02307"></a>02307     <span class="keywordflow">if</span> ( n_lines < 1 || magFactor < 1 )
-<a name="l02308"></a>02308     {
-<a name="l02309"></a>02309         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong n_lines or magFactor given!\n"</span>) ;
-<a name="l02310"></a>02310         <span class="keywordflow">return</span> NULL ;
-<a name="l02311"></a>02311     }
-<a name="l02312"></a>02312     
-<a name="l02313"></a>02313     var    = (magFactor - 1)*(magFactor - 1) ;
-<a name="l02314"></a>02314     <span class="comment">/* find out if Angstroem or microns are used */</span>
-<a name="l02315"></a>02315     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )
-<a name="l02316"></a>02316     {
-<a name="l02317"></a>02317         <span class="comment">/* Angstroem */</span>
-<a name="l02318"></a>02318         angst = 10000. ;
-<a name="l02319"></a>02319     }
-<a name="l02320"></a>02320     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )
-<a name="l02321"></a>02321     {
-<a name="l02322"></a>02322         <span class="comment">/* nanometers */</span>
-<a name="l02323"></a>02323         angst = 1000. ;
-<a name="l02324"></a>02324     }
-<a name="l02325"></a>02325     <span class="keywordflow">else</span>
-<a name="l02326"></a>02326     {
-<a name="l02327"></a>02327         <span class="comment">/* microns */</span>
-<a name="l02328"></a>02328         angst = 1. ;
-<a name="l02329"></a>02329     }
-<a name="l02330"></a>02330 
-<a name="l02331"></a>02331 
-<a name="l02332"></a>02332 
-<a name="l02333"></a>02333     <span class="comment">/* allocate memory */</span>
-<a name="l02334"></a>02334     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily,CPL_TYPE_FLOAT)) )
-<a name="l02335"></a>02335     {
-<a name="l02336"></a>02336         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;
-<a name="l02337"></a>02337         <span class="keywordflow">return</span> NULL ;
-<a name="l02338"></a>02338     }
-<a name="l02339"></a>02339     podata=cpl_image_get_data_float(lineIm);
-<a name="l02340"></a>02340     olx=ilx;
-<a name="l02341"></a>02341     oly=ily;
-<a name="l02342"></a>02342 
-<a name="l02343"></a>02343     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02344"></a>02344     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02345"></a>02345     wavelag=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02346"></a>02346     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02347"></a>02347     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l02348"></a>02348     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;
-<a name="l02349"></a>02349 
-<a name="l02350"></a>02350     
-<a name="l02351"></a>02351     <span class="comment">/* first store each spectrum in a buffer */</span>
-<a name="l02352"></a>02352     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02353"></a>02353     {
-<a name="l02354"></a>02354         <span class="comment">/* initialize the emline array for each column */</span>
-<a name="l02355"></a>02355         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )
-<a name="l02356"></a>02356         {
-<a name="l02357"></a>02357             emline[i] = 0. ;
-<a name="l02358"></a>02358         }
-<a name="l02359"></a>02359         <span class="comment">/* determine the coefficients by using the given bcoefs */</span>
-<a name="l02360"></a>02360         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )
-<a name="l02361"></a>02361         {
-<a name="l02362"></a>02362             <span class="comment">/* initialize coefficients and solution */</span>
-<a name="l02363"></a>02363             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)
-<a name="l02364"></a>02364             {
-<a name="l02365"></a>02365                 z[2*i] = 0. ;
-<a name="l02366"></a>02366                 z[2*i+1] = 0. ;
-<a name="l02367"></a>02367             }
-<a name="l02368"></a>02368             a[i] = coeffs[i][col] ;
-<a name="l02369"></a>02369         }
-<a name="l02370"></a>02370          
-<a name="l02371"></a>02371         a_initial = coeffs[0][col] ;
-<a name="l02372"></a>02372         <span class="comment">/* go through the lines and generate an artificial spectrum */</span>
-<a name="l02373"></a>02373         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l02374"></a>02374         {
-<a name="l02375"></a>02375             <span class="comment">/* go from Angstroem to micron */</span>
-<a name="l02376"></a>02376             wave[line] = wavelength[line]/angst ;
-<a name="l02377"></a>02377 
-<a name="l02378"></a>02378             <span class="comment">/* ----------------------------------------------------------------</span>
-<a name="l02379"></a>02379 <span class="comment">             * solve the polynomial for the exact offset of the line that means</span>
-<a name="l02380"></a>02380 <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span>
-<a name="l02381"></a>02381 <span class="comment">             */</span>
-<a name="l02382"></a>02382             a[0] = a_initial - wave[line] ;
-<a name="l02383"></a>02383 
-<a name="l02384"></a>02384             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) 
-<a name="l02385"></a>02385             {
-<a name="l02386"></a>02386                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;
-<a name="l02387"></a>02387                 cpl_image_delete(wavemap) ;
-<a name="l02388"></a>02388                 <span class="keywordflow">return</span> NULL ;
-<a name="l02389"></a>02389             }
-<a name="l02390"></a>02390             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) 
-<a name="l02391"></a>02391             {
-<a name="l02392"></a>02392                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;
-<a name="l02393"></a>02393                 cpl_image_delete(wavemap) ;
-<a name="l02394"></a>02394                 <span class="keywordflow">return</span> NULL ;
-<a name="l02395"></a>02395             }
-<a name="l02396"></a>02396             sinfo_gsl_poly_complex_workspace_free(w) ;           
-<a name="l02397"></a>02397 
-<a name="l02398"></a>02398             j = 0 ;
-<a name="l02399"></a>02399             found = -1 ;
-<a name="l02400"></a>02400             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )
-<a name="l02401"></a>02401             {
-<a name="l02402"></a>02402                 <span class="comment">/* test for appropriate solution */</span>
-<a name="l02403"></a>02403                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&
-<a name="l02404"></a>02404                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )
-<a name="l02405"></a>02405                 {
-<a name="l02406"></a>02406                     found = 2*i ;
-<a name="l02407"></a>02407                     j ++ ;
-<a name="l02408"></a>02408                 }
-<a name="l02409"></a>02409                 <span class="keywordflow">else</span>
-<a name="l02410"></a>02410                 {
-<a name="l02411"></a>02411                     continue ;
-<a name="l02412"></a>02412                 }
-<a name="l02413"></a>02413             }
-<a name="l02414"></a>02414             <span class="keywordflow">if</span> ( j == 0 )
-<a name="l02415"></a>02415             {
-<a name="l02416"></a>02416                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found for line %d "</span>
-<a name="l02417"></a>02417                                   <span class="stringliteral">"in column %d\n"</span>, line, col) ;
-<a name="l02418"></a>02418                 continue ;
-<a name="l02419"></a>02419             }
-<a name="l02420"></a>02420             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )
-<a name="l02421"></a>02421             {
-<a name="l02422"></a>02422                 cenpos = z[found] + (float) ily /2. ;
-<a name="l02423"></a>02423             }
-<a name="l02424"></a>02424             <span class="keywordflow">else</span>
-<a name="l02425"></a>02425             {
-<a name="l02426"></a>02426                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found for "</span>
-<a name="l02427"></a>02427                                   <span class="stringliteral">"line %d in column %d\n"</span>, line, col) ;
-<a name="l02428"></a>02428                 continue ;
-<a name="l02429"></a>02429             }
-<a name="l02430"></a>02430 
-<a name="l02431"></a>02431             <span class="comment">/*-----------------------------------------------------------------</span>
-<a name="l02432"></a>02432 <span class="comment">             * magnify image by the given factor add an additional offset</span>
-<a name="l02433"></a>02433 <span class="comment">             */</span>
-<a name="l02434"></a>02434             cenpix = cenpos ;
-<a name="l02435"></a>02435 
-<a name="l02436"></a>02436             <span class="comment">/* determine max and min pixel limits over which </span>
-<a name="l02437"></a>02437 <span class="comment">               line should be convolved */</span>
-<a name="l02438"></a>02438             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? 
-<a name="l02439"></a>02439                     sinfo_new_nint(cenpix) - (var-1) : 0 ;
-<a name="l02440"></a>02440             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?
-<a name="l02441"></a>02441                     sinfo_new_nint(cenpix) + (var-1)  : ily ;
-<a name="l02442"></a>02442 
-<a name="l02443"></a>02443             <span class="comment">/* convolve neon lines with Gaussian function */</span>
-<a name="l02444"></a>02444             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )
-<a name="l02445"></a>02445             {
-<a name="l02446"></a>02446                 emline[j] += intensity[line] * 
-<a name="l02447"></a>02447                         exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;
-<a name="l02448"></a>02448             }
-<a name="l02449"></a>02449         }
-<a name="l02450"></a>02450 
-<a name="l02451"></a>02451         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02452"></a>02452 <span class="comment">         * for each column, map the image data points onto an magFactor times </span>
-<a name="l02453"></a>02453 <span class="comment">           bigger element grid for FFT in the cross sinfo_correlation, first </span>
-<a name="l02454"></a>02454 <span class="comment">           initialize the two helping arrays for each new column.</span>
-<a name="l02455"></a>02455 <span class="comment">         */</span>
-<a name="l02456"></a>02456         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )
-<a name="l02457"></a>02457         {
-<a name="l02458"></a>02458             spec[k] = 0. ;
-<a name="l02459"></a>02459         }
-<a name="l02460"></a>02460 
-<a name="l02461"></a>02461         <span class="comment">/* now take the image data points of the column and put them into </span>
-<a name="l02462"></a>02462 <span class="comment">           the spec array */</span>
-<a name="l02463"></a>02463         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span>
-<a name="l02464"></a>02464         {
-<a name="l02465"></a>02465             <span class="comment">/* set bad pixels or negative values to zero */</span>
-<a name="l02466"></a>02466             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&
-<a name="l02467"></a>02467                             (pidata[col + row*ilx] > 0.))
-<a name="l02468"></a>02468             {
-<a name="l02469"></a>02469                 spec[row] = pidata[col + row*ilx] ;
-<a name="l02470"></a>02470             }
-<a name="l02471"></a>02471             <span class="keywordflow">else</span>
-<a name="l02472"></a>02472             {
-<a name="l02473"></a>02473                 spec[row] = 0. ;
-<a name="l02474"></a>02474             }
-<a name="l02475"></a>02475         }
-<a name="l02476"></a>02476         <span class="comment">/* convolve the spectrum by Gaussian */</span>
-<a name="l02477"></a>02477         filter_spec = sinfo_function1d_filter_lowpass(spec, ily, 
-<a name="l02478"></a>02478                                                       LOW_PASS_GAUSSIAN, 
-<a name="l02479"></a>02479                                                       magFactor) ; 
-<a name="l02480"></a>02480 
-<a name="l02481"></a>02481         <span class="comment">/* now call the cross sinfo_correlation routine */</span>
-<a name="l02482"></a>02482         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,
-<a name="l02483"></a>02483                           ily/2, &delta, &maxlag, &xcorr_max) ;
-<a name="l02484"></a>02484 
-<a name="l02485"></a>02485         <span class="keywordflow">if</span> ( xcorr_max <= 0. )
-<a name="l02486"></a>02486         {
-<a name="l02487"></a>02487             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross correlation sum , "</span>
-<a name="l02488"></a>02488                               <span class="stringliteral">"col %d set to ZERO \n"</span>, col) ;
-<a name="l02489"></a>02489             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )
-<a name="l02490"></a>02490             {
-<a name="l02491"></a>02491                 podata[col + row*ilx] = ZERO ;
-<a name="l02492"></a>02492             }
-<a name="l02493"></a>02493             sinfo_function1d_del(filter_spec) ;
-<a name="l02494"></a>02494             cpl_free(result) ;
-<a name="l02495"></a>02495             continue ;
-<a name="l02496"></a>02496         }
-<a name="l02497"></a>02497 
-<a name="l02498"></a>02498        <span class="comment">/* in this section, we fit the sinfo_correlation function with a </span>
-<a name="l02499"></a>02499 <span class="comment">           gauss, and find its peak, thus getting subpixel-accuracy */</span>
-<a name="l02500"></a>02500 
-<a name="l02501"></a>02501         i = maxlag; j = i+1;
-<a name="l02502"></a>02502         <span class="keywordflow">while</span> (result[j] < result[i])
-<a name="l02503"></a>02503         {
-<a name="l02504"></a>02504             i++; j++;
-<a name="l02505"></a>02505         }
-<a name="l02506"></a>02506         i = maxlag; k = i-1;
-<a name="l02507"></a>02507         <span class="keywordflow">while</span> (result[k] < result[i])
-<a name="l02508"></a>02508         {
-<a name="l02509"></a>02509             i--; k--;
-<a name="l02510"></a>02510         }
-<a name="l02511"></a>02511         width = j-k+1;
-<a name="l02512"></a>02512         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l02513"></a>02513         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )
-<a name="l02514"></a>02514         {
-<a name="l02515"></a>02515             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;
-<a name="l02516"></a>02516             sinfo_function1d_del(filter_spec) ;
-<a name="l02517"></a>02517             cpl_free(result) ;
-<a name="l02518"></a>02518             <span class="keywordflow">return</span> NULL ;
-<a name="l02519"></a>02519         }
-<a name="l02520"></a>02520 
-<a name="l02521"></a>02521 
-<a name="l02522"></a>02522         <span class="comment">/* allocate memory */</span>
-<a name="l02523"></a>02523         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02524"></a>02524         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02525"></a>02525         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l02526"></a>02526 
-<a name="l02527"></a>02527         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span>
-<a name="l02528"></a>02528         <span class="comment">/* go through the chosen column */</span>
-<a name="l02529"></a>02529 
-<a name="l02530"></a>02530         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )
-<a name="l02531"></a>02531         {
-<a name="l02532"></a>02532             peak -> data[i] = result[k+i]/xcorr_max * 100. ;
-<a name="l02533"></a>02533             xdat[i] = i;
-<a name="l02534"></a>02534             wdat[i] = 1.0;
-<a name="l02535"></a>02535         }
-<a name="l02536"></a>02536 
-<a name="l02537"></a>02537         <span class="comment">/* set initial values for the fitting routine */</span>
-<a name="l02538"></a>02538         xdim     = XDIM;
-<a name="l02539"></a>02539         ndat     = peak -> n_elements ;
-<a name="l02540"></a>02540         numpar   = MAXPAR ;
-<a name="l02541"></a>02541         tol      = TOL ;
-<a name="l02542"></a>02542         lab      = LAB ;
-<a name="l02543"></a>02543         its      = ITS ;
-<a name="l02544"></a>02544         par[1] = width/2.0 ;
-<a name="l02545"></a>02545         par[2] = (float) (maxlag - k) ;
-<a name="l02546"></a>02546         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;
-<a name="l02547"></a>02547         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;
-<a name="l02548"></a>02548 
-<a name="l02549"></a>02549         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )
-<a name="l02550"></a>02550         {
-<a name="l02551"></a>02551             derv_par[i] = 0.0 ;
-<a name="l02552"></a>02552             mpar[i] = 1 ;
-<a name="l02553"></a>02553         }
-<a name="l02554"></a>02554 
-<a name="l02555"></a>02555         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span>
-<a name="l02556"></a>02556         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, 
-<a name="l02557"></a>02557                                                peak -> data, wdat, 
-<a name="l02558"></a>02558                                                &ndat, par, derv_par, mpar,
-<a name="l02559"></a>02559                                                &numpar, &tol, &its, &lab )) )
-<a name="l02560"></a>02560         {
-<a name="l02561"></a>02561             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit"</span>
-<a name="l02562"></a>02562                                <span class="stringliteral">" failed in col: %d, error no.: %d\n"</span>, 
-<a name="l02563"></a>02563                                col, iters) ;
-<a name="l02564"></a>02564             sinfo_new_destroy_vector ( peak ) ;
-<a name="l02565"></a>02565             cpl_free ( xdat ) ;
-<a name="l02566"></a>02566             cpl_free ( wdat ) ;
-<a name="l02567"></a>02567             cpl_free ( mpar ) ;
-<a name="l02568"></a>02568             sinfo_function1d_del(filter_spec) ;
-<a name="l02569"></a>02569             cpl_free(result) ;
-<a name="l02570"></a>02570             continue ;
-<a name="l02571"></a>02571         }
-<a name="l02572"></a>02572 
-<a name="l02573"></a>02573         sinfo_new_destroy_vector ( peak ) ;
-<a name="l02574"></a>02574         cpl_free (xdat) ;
-<a name="l02575"></a>02575         cpl_free (wdat) ;
-<a name="l02576"></a>02576         cpl_free (mpar) ;
-<a name="l02577"></a>02577         sinfo_function1d_del(filter_spec) ;
-<a name="l02578"></a>02578         cpl_free(result) ;
-<a name="l02579"></a>02579 
-<a name="l02580"></a>02580         wavelag[col] =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;
-<a name="l02581"></a>02581 
-<a name="l02582"></a>02582     }
-<a name="l02583"></a>02583     
-<a name="l02584"></a>02584     <span class="keywordflow">if</span> (FLT_MAX==(wavelag_mean=sinfo_new_clean_mean(wavelag, ilx, 10., 10.)) )
-<a name="l02585"></a>02585     {
-<a name="l02586"></a>02586         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not determine a mean offset\n"</span>) ;
-<a name="l02587"></a>02587         <span class="keywordflow">return</span> NULL ;
-<a name="l02588"></a>02588     }
-<a name="l02589"></a>02589 
-<a name="l02590"></a>02590     <span class="keywordflow">if</span> ( fabs(wavelag_mean) > (<span class="keywordtype">float</span>)ily/20. )
-<a name="l02591"></a>02591     {
-<a name="l02592"></a>02592         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelag too big \n"</span>) ;
-<a name="l02593"></a>02593         <span class="keywordflow">return</span> NULL ;
-<a name="l02594"></a>02594     }
-<a name="l02595"></a>02595 
-<a name="l02596"></a>02596     
-<a name="l02597"></a>02597 
-<a name="l02598"></a>02598     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )
-<a name="l02599"></a>02599     {
-<a name="l02600"></a>02600         <span class="comment">/*--------------------------------------------------------------------</span>
-<a name="l02601"></a>02601 <span class="comment">         * determine new zero order coefficient centreval, of which the </span>
-<a name="l02602"></a>02602 <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span>
-<a name="l02603"></a>02603 <span class="comment">         * wavelag with the same higher order coefficients and set the new </span>
-<a name="l02604"></a>02604 <span class="comment">         * zero order coefficient to get both sides of the equation </span>
-<a name="l02605"></a>02605 <span class="comment">         * approximately equal.</span>
-<a name="l02606"></a>02606 <span class="comment">         */</span>
-<a name="l02607"></a>02607         a_initial = coeffs[0][col] ;
-<a name="l02608"></a>02608     centreval = a_initial ;
-<a name="l02609"></a>02609     <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l02610"></a>02610         {
-<a name="l02611"></a>02611             <span class="keywordflow">if</span> ( i%2 == 0 )
-<a name="l02612"></a>02612             {
-<a name="l02613"></a>02613                 sign = -1 ;
-<a name="l02614"></a>02614             }
-<a name="l02615"></a>02615             <span class="keywordflow">else</span>
-<a name="l02616"></a>02616             {
-<a name="l02617"></a>02617                 sign = 1 ;
-<a name="l02618"></a>02618             }
-<a name="l02619"></a>02619             centreval += (float)sign * coeffs[i][col]*pow(wavelag_mean, i) ;
-<a name="l02620"></a>02620         }
-<a name="l02621"></a>02621 
-<a name="l02622"></a>02622     
-<a name="l02623"></a>02623         <span class="comment">/* prepare to write out wavelength as pixel values */</span>
-<a name="l02624"></a>02624         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )
-<a name="l02625"></a>02625         {
-<a name="l02626"></a>02626             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;
-<a name="l02627"></a>02627             pixvalue = 0. ;
-<a name="l02628"></a>02628             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )
-<a name="l02629"></a>02629             {
-<a name="l02630"></a>02630                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;
-<a name="l02631"></a>02631             }
-<a name="l02632"></a>02632             podata[col+row*olx] = centreval + pixvalue ;
-<a name="l02633"></a>02633         }
-<a name="l02634"></a>02634     }
-<a name="l02635"></a>02635 
-<a name="l02636"></a>02636 
-<a name="l02637"></a>02637 
-<a name="l02638"></a>02638     cpl_free(emline) ;
-<a name="l02639"></a>02639     cpl_free(spec) ;
-<a name="l02640"></a>02640     cpl_free(wavelag) ;
-<a name="l02641"></a>02641     cpl_free(wave) ;
-<a name="l02642"></a>02642     cpl_free(a) ;
-<a name="l02643"></a>02643     cpl_free(z) ;
-<a name="l02644"></a>02644 
-<a name="l02645"></a>02645 
-<a name="l02646"></a>02646     <span class="keywordflow">return</span> wavemap ;
-<a name="l02647"></a>02647 }
-<a name="l02648"></a>02648 
-<a name="l02671"></a>02671 <span class="keywordtype">float</span> sinfo_new_check_line_positions ( cpl_image     * lineIm,
-<a name="l02672"></a>02672                        <span class="keywordtype">float</span>       ** coeffs,
-<a name="l02673"></a>02673                        <span class="keywordtype">int</span>            n_fitcoeffs,
-<a name="l02674"></a>02674                        <span class="keywordtype">float</span>            gdisp1,
-<a name="l02675"></a>02675                        FitParams   ** par )
-<a name="l02676"></a>02676 {
-<a name="l02677"></a>02677     <span class="keywordtype">float</span> wave_shift=0 ;
-<a name="l02678"></a>02678     <span class="keywordtype">float</span> amp[100] ;
-<a name="l02679"></a>02679     <span class="keywordtype">float</span> sort_amp[100] ;
-<a name="l02680"></a>02680     <span class="keywordtype">float</span> offset=0 ;
-<a name="l02681"></a>02681     <span class="keywordtype">float</span> shift=0 ;
-<a name="l02682"></a>02682     <span class="keywordtype">float</span> position=0;
-<a name="l02683"></a>02683     <span class="keywordtype">float</span> lambda=0;
-<a name="l02684"></a>02684     <span class="keywordtype">float</span> wave=0 ;
-<a name="l02685"></a>02685     <span class="keywordtype">int</span> i=0;
-<a name="l02686"></a>02686     <span class="keywordtype">int</span> j=0;
-<a name="l02687"></a>02687     <span class="keywordtype">int</span> k=0;
-<a name="l02688"></a>02688     <span class="keywordtype">int</span> l=0;
-<a name="l02689"></a>02689     <span class="keywordtype">int</span> m=0;
-<a name="l02690"></a>02690     <span class="keywordtype">int</span> n=0;
-<a name="l02691"></a>02691     <span class="keywordtype">int</span> col=0;
-<a name="l02692"></a>02692     <span class="keywordtype">int</span> firstj=0;
-<a name="l02693"></a>02693     <span class="keywordtype">float</span>* shift_col=NULL ;
-<a name="l02694"></a>02694     <span class="keywordtype">int</span>* foundit=NULL ;
-<a name="l02695"></a>02695     <span class="keywordtype">int</span> n_lines=0;
-<a name="l02696"></a>02696     <span class="keywordtype">int</span> lin, found=0 ;
-<a name="l02697"></a>02697     <span class="keywordtype">int</span> lx=0;
-<a name="l02698"></a>02698     <span class="keywordtype">int</span> ly=0;
-<a name="l02699"></a>02699     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l02700"></a>02700 
-<a name="l02701"></a>02701     <span class="keywordflow">if</span> ( lineIm == NULL )
-<a name="l02702"></a>02702     {
-<a name="l02703"></a>02703         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l02704"></a>02704         <span class="keywordflow">return</span> FLAG ;
-<a name="l02705"></a>02705     }
-<a name="l02706"></a>02706     lx=cpl_image_get_size_x(lineIm);
-<a name="l02707"></a>02707     ly=cpl_image_get_size_y(lineIm);
-<a name="l02708"></a>02708     pdata=cpl_image_get_data_float(lineIm);
-<a name="l02709"></a>02709 
-<a name="l02710"></a>02710     <span class="keywordflow">if</span> ( coeffs == NULL )
-<a name="l02711"></a>02711     {
-<a name="l02712"></a>02712         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;
-<a name="l02713"></a>02713         <span class="keywordflow">return</span> FLAG ;
-<a name="l02714"></a>02714     }
-<a name="l02715"></a>02715     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l02716"></a>02716     {
-<a name="l02717"></a>02717         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters given!\n"</span>) ;
-<a name="l02718"></a>02718         <span class="keywordflow">return</span> FLAG ;
-<a name="l02719"></a>02719     }
-<a name="l02720"></a>02720     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )
-<a name="l02721"></a>02721     {
-<a name="l02722"></a>02722         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;
-<a name="l02723"></a>02723         <span class="keywordflow">return</span> FLAG ;
-<a name="l02724"></a>02724     }
-<a name="l02725"></a>02725 
-<a name="l02726"></a>02726     offset = (float) (ly -1.) / 2. ;
-<a name="l02727"></a>02727     n_lines = par[0]->n_params/lx ;
-<a name="l02728"></a>02728 
-<a name="l02729"></a>02729     shift_col=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02730"></a>02730     foundit=cpl_calloc(par[0]->n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02731"></a>02731     
-<a name="l02732"></a>02732     <span class="comment">/*search for the brightest 5 lines in each column and compute the </span>
-<a name="l02733"></a>02733 <span class="comment">      wavelength difference*/</span>
-<a name="l02734"></a>02734     <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )
-<a name="l02735"></a>02735     {
-<a name="l02736"></a>02736         n = 0 ;
-<a name="l02737"></a>02737         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02738"></a>02738         {
-<a name="l02739"></a>02739             <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && 
-<a name="l02740"></a>02740                 par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. )
-<a name="l02741"></a>02741             {
-<a name="l02742"></a>02742                 foundit[n] = i ;
-<a name="l02743"></a>02743                 amp[n] = par[i]->fit_par[0] ;
-<a name="l02744"></a>02744                 sort_amp[n] = amp[n] ;
-<a name="l02745"></a>02745                 n++ ;
-<a name="l02746"></a>02746             }
-<a name="l02747"></a>02747         }
-<a name="l02748"></a>02748         sinfo_pixel_qsort(sort_amp, n) ;
-<a name="l02749"></a>02749 
-<a name="l02750"></a>02750         <span class="keywordflow">if</span> ( n > 5 )
-<a name="l02751"></a>02751         {
-<a name="l02752"></a>02752             firstj = n - 5 ;
-<a name="l02753"></a>02753         }
-<a name="l02754"></a>02754         <span class="keywordflow">else</span>
-<a name="l02755"></a>02755         {
-<a name="l02756"></a>02756             firstj = 0 ;
-<a name="l02757"></a>02757         }
-<a name="l02758"></a>02758         l = 0 ; 
-<a name="l02759"></a>02759         shift = 0 ;
-<a name="l02760"></a>02760         <span class="keywordflow">for</span> ( j = firstj ; j < n ; j++ )
-<a name="l02761"></a>02761         {
-<a name="l02762"></a>02762             <span class="keywordflow">for</span> ( m = 0 ; m < n ; m++ )
-<a name="l02763"></a>02763             {
-<a name="l02764"></a>02764                 <span class="keywordflow">if</span> ( sort_amp[j] == amp[m] )
-<a name="l02765"></a>02765                 {
-<a name="l02766"></a>02766                     position = par[foundit[m]]->fit_par[2] ; 
-<a name="l02767"></a>02767                     lambda   = par[foundit[m]]->wavelength ;
-<a name="l02768"></a>02768                     wave = 0 ;
-<a name="l02769"></a>02769                     <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoeffs ; k++ ) 
-<a name="l02770"></a>02770                     {
-<a name="l02771"></a>02771                         wave += coeffs[k][col]*pow(position-offset, k) ;
-<a name="l02772"></a>02772                     }
-<a name="l02773"></a>02773                     shift += lambda - wave ;
-<a name="l02774"></a>02774                     l++ ;
-<a name="l02775"></a>02775                 }
-<a name="l02776"></a>02776             }
-<a name="l02777"></a>02777         }
-<a name="l02778"></a>02778         <span class="keywordflow">if</span> ( l == 0 ) continue ;
-<a name="l02779"></a>02779         shift_col[col] = shift/(float)l ; 
-<a name="l02780"></a>02780     }
-<a name="l02781"></a>02781     wave_shift = sinfo_new_clean_mean(shift_col, lx, 10., 10.) ;
-<a name="l02782"></a>02782     sinfo_msg(<span class="stringliteral">"Overall positioning error: %3.2g [um] %3.2g [pix]"</span>, 
-<a name="l02783"></a>02783                wave_shift,wave_shift/fabs(gdisp1)) ;
-<a name="l02784"></a>02784 
-<a name="l02785"></a>02785 
-<a name="l02786"></a>02786     <span class="comment">/* determine positioning error for each found line */</span>
-<a name="l02787"></a>02787     <span class="keywordflow">for</span> ( lin = 0 ; lin < n_lines ; lin++ )
-<a name="l02788"></a>02788     {
-<a name="l02789"></a>02789         <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )
-<a name="l02790"></a>02790         {
-<a name="l02791"></a>02791             shift_col[col] = 0. ;
-<a name="l02792"></a>02792             found = -1 ;
-<a name="l02793"></a>02793             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )
-<a name="l02794"></a>02794             {
-<a name="l02795"></a>02795                 <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && 
-<a name="l02796"></a>02796                     par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. && 
-<a name="l02797"></a>02797                     par[i]->line == lin )
-<a name="l02798"></a>02798                 {
-<a name="l02799"></a>02799                     found = i ;
-<a name="l02800"></a>02800                 }
-<a name="l02801"></a>02801             }
-<a name="l02802"></a>02802             <span class="keywordflow">if</span> (found == -1) break ;
-<a name="l02803"></a>02803 
-<a name="l02804"></a>02804             position = par[found]->fit_par[2] ; 
-<a name="l02805"></a>02805             lambda  = par[found]->wavelength ;
-<a name="l02806"></a>02806             wave = 0 ;
-<a name="l02807"></a>02807             <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoeffs ; k++ ) 
-<a name="l02808"></a>02808             {
-<a name="l02809"></a>02809                 wave += coeffs[k][col]*pow(position-offset, k) ;
-<a name="l02810"></a>02810             }
-<a name="l02811"></a>02811             shift_col[col] = lambda - wave ;
-<a name="l02812"></a>02812         }
-<a name="l02813"></a>02813         <span class="keywordflow">if</span> (found != -1 )
-<a name="l02814"></a>02814         {
-<a name="l02815"></a>02815       sinfo_msg(<span class="stringliteral">"shift: %3.2g [um] %3.2g (pix) at: %4.3f [um]"</span>,
-<a name="l02816"></a>02816             sinfo_new_clean_mean(shift_col,lx, 10., 10.),
-<a name="l02817"></a>02817                     sinfo_new_clean_mean(shift_col,lx, 10., 10.)/fabs(gdisp1),
-<a name="l02818"></a>02818                     lambda) ;
-<a name="l02819"></a>02819         }
-<a name="l02820"></a>02820     }
-<a name="l02821"></a>02821     cpl_free(shift_col) ;
-<a name="l02822"></a>02822     cpl_free(foundit) ;
-<a name="l02823"></a>02823 
-<a name="l02824"></a>02824     <span class="keywordflow">return</span> wave_shift ;
-<a name="l02825"></a>02825 }
-<a name="l02826"></a>02826 
-<a name="l02827"></a>02827 
-<a name="l02856"></a>02856 <span class="keywordtype">float</span> sinfo_new_check_correlated_line_positions ( cpl_image     * lineIm,
-<a name="l02857"></a>02857                                      <span class="keywordtype">float</span>       ** coeffs,
-<a name="l02858"></a>02858                                      <span class="keywordtype">int</span>            n_fitcoeffs,
-<a name="l02859"></a>02859                                      <span class="keywordtype">float</span>        * wavelength,
-<a name="l02860"></a>02860                                      <span class="keywordtype">float</span>        * intensity,
-<a name="l02861"></a>02861                                      <span class="keywordtype">int</span>            n_lines,
-<a name="l02862"></a>02862                                      <span class="keywordtype">float</span>          fwhm, 
-<a name="l02863"></a>02863                                      <span class="keywordtype">float</span>          width,
-<a name="l02864"></a>02864                                      <span class="keywordtype">float</span>          min_amplitude,
-<a name="l02865"></a>02865                                      <span class="keywordtype">float</span>          dispersion,
-<a name="l02866"></a>02866                                      FitParams   ** par )
-<a name="l02867"></a>02867 {
-<a name="l02868"></a>02868     <span class="keywordtype">float</span> wave_shift=0 ;
-<a name="l02869"></a>02869     <span class="keywordtype">float</span> offset=0;
-<a name="l02870"></a>02870     <span class="keywordtype">float</span> shift=0;
-<a name="l02871"></a>02871     <span class="keywordtype">float</span> position=0;
-<a name="l02872"></a>02872     <span class="keywordtype">float</span> lambda=0;
-<a name="l02873"></a>02873     <span class="keywordtype">float</span> wave=0;
-<a name="l02874"></a>02874     <span class="keywordtype">int</span> i=0;
-<a name="l02875"></a>02875     <span class="keywordtype">int</span> j=0;
-<a name="l02876"></a>02876     <span class="keywordtype">int</span> k=0;  <span class="comment">/*, l, m*/</span>
-<a name="l02877"></a>02877     <span class="keywordtype">int</span> n=0;
-<a name="l02878"></a>02878     <span class="keywordtype">int</span> c=0;
-<a name="l02879"></a>02879     <span class="keywordtype">int</span> z=0;
-<a name="l02880"></a>02880     <span class="keywordtype">int</span> col=0;<span class="comment">/*, firstj*/</span>
-<a name="l02881"></a>02881     <span class="keywordtype">int</span> found=0;<span class="comment">/*lin,*/</span>
-<a name="l02882"></a>02882     <span class="keywordtype">int</span> line=0;
-<a name="l02883"></a>02883     <span class="keywordtype">int</span> result=0;
-<a name="l02884"></a>02884     <span class="keywordtype">float</span> cenpos=0;
-<a name="l02885"></a>02885     <span class="keywordtype">float</span> angst=0;
-<a name="l02886"></a>02886     <span class="keywordtype">float</span> a_initial=0;
-<a name="l02887"></a>02887 
-<a name="l02888"></a>02888     <span class="keywordtype">int</span>* foundit=NULL ;
-<a name="l02889"></a>02889     <span class="keywordtype">float</span>* shift_col=NULL ;
-<a name="l02890"></a>02890     <span class="keywordtype">float</span>* wave_cor=NULL ;
-<a name="l02891"></a>02891     <span class="keywordtype">double</span>* a=NULL ;
-<a name="l02892"></a>02892     <span class="keywordtype">double</span>* zroot=NULL ;
-<a name="l02893"></a>02893 
-<a name="l02894"></a>02894     gsl_poly_complex_workspace * w=NULL ;
-<a name="l02895"></a>02895     Vector * vline=NULL;
-<a name="l02896"></a>02896     <span class="keywordtype">int</span>    * mpar=NULL;
-<a name="l02897"></a>02897     <span class="keywordtype">float</span>  * xdat=NULL;
-<a name="l02898"></a>02898     <span class="keywordtype">float</span>  * wdat=NULL;
-<a name="l02899"></a>02899     <span class="keywordtype">int</span> lx=0;
-<a name="l02900"></a>02900     <span class="keywordtype">int</span> ly=0;
-<a name="l02901"></a>02901     <span class="keywordtype">float</span>* pdata=NULL;
-<a name="l02902"></a>02902 
-<a name="l02903"></a>02903     <span class="keywordflow">if</span> ( lineIm == NULL )
-<a name="l02904"></a>02904     {
-<a name="l02905"></a>02905         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;
-<a name="l02906"></a>02906         <span class="keywordflow">return</span> FLAG ;
-<a name="l02907"></a>02907     }
-<a name="l02908"></a>02908     lx=cpl_image_get_size_x(lineIm);
-<a name="l02909"></a>02909     ly=cpl_image_get_size_y(lineIm);
-<a name="l02910"></a>02910     pdata=cpl_image_get_data_float(lineIm);
-<a name="l02911"></a>02911 
-<a name="l02912"></a>02912 
-<a name="l02913"></a>02913     <span class="keywordflow">if</span> ( coeffs == NULL )
-<a name="l02914"></a>02914     {
-<a name="l02915"></a>02915         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;
-<a name="l02916"></a>02916         <span class="keywordflow">return</span> FLAG ;
-<a name="l02917"></a>02917     }
-<a name="l02918"></a>02918     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l02919"></a>02919     {
-<a name="l02920"></a>02920         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters given!\n"</span>) ;
-<a name="l02921"></a>02921         <span class="keywordflow">return</span> FLAG ;
-<a name="l02922"></a>02922     }
-<a name="l02923"></a>02923     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )
-<a name="l02924"></a>02924     {
-<a name="l02925"></a>02925         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;
-<a name="l02926"></a>02926         <span class="keywordflow">return</span> FLAG ;
-<a name="l02927"></a>02927     }
-<a name="l02928"></a>02928     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )
-<a name="l02929"></a>02929     {
-<a name="l02930"></a>02930         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no line list given!\n"</span>) ;
-<a name="l02931"></a>02931         <span class="keywordflow">return</span> FLAG ;
-<a name="l02932"></a>02932     }
-<a name="l02933"></a>02933     <span class="keywordflow">if</span> ( fwhm <= 0 )
-<a name="l02934"></a>02934     {
-<a name="l02935"></a>02935         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong guess fwhm given!\n"</span>) ;
-<a name="l02936"></a>02936         <span class="keywordflow">return</span> FLAG ;
-<a name="l02937"></a>02937     }
-<a name="l02938"></a>02938     <span class="keywordflow">if</span> ( width <= 0 )
-<a name="l02939"></a>02939     {
-<a name="l02940"></a>02940         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong half width given!\n"</span>) ;
-<a name="l02941"></a>02941         <span class="keywordflow">return</span> FLAG ;
-<a name="l02942"></a>02942     } 
-<a name="l02943"></a>02943     <span class="keywordflow">if</span> ( min_amplitude <= 0 )
-<a name="l02944"></a>02944     {
-<a name="l02945"></a>02945         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong guess amplitude given!\n"</span>) ;
-<a name="l02946"></a>02946         <span class="keywordflow">return</span> FLAG ;
-<a name="l02947"></a>02947     } 
-<a name="l02948"></a>02948 
-<a name="l02949"></a>02949     <span class="comment">/* allocate memory for the spectral sinfo_vector */</span>
-<a name="l02950"></a>02950     <span class="keywordflow">if</span> ( NULL == (vline = sinfo_new_vector (2*width + 1)) )
-<a name="l02951"></a>02951     {
-<a name="l02952"></a>02952         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;
-<a name="l02953"></a>02953         <span class="keywordflow">return</span> -14 ;
-<a name="l02954"></a>02954     }
-<a name="l02955"></a>02955     <span class="comment">/* allocate memory */</span>
-<a name="l02956"></a>02956     xdat = (<span class="keywordtype">float</span> *) cpl_calloc( vline -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02957"></a>02957     wdat = (<span class="keywordtype">float</span> *) cpl_calloc( vline -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;
-<a name="l02958"></a>02958     mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;
-<a name="l02959"></a>02959 
-<a name="l02960"></a>02960 
-<a name="l02961"></a>02961     foundit=cpl_calloc(par[0]->n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l02962"></a>02962     shift_col=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02963"></a>02963     wave_cor=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02964"></a>02964     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02965"></a>02965     zroot=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l02966"></a>02966 
-<a name="l02967"></a>02967 
-<a name="l02968"></a>02968 
-<a name="l02969"></a>02969     <span class="comment">/* determine the approximate line positions using the line list and the </span>
-<a name="l02970"></a>02970 <span class="comment">       coefficients */</span>
-<a name="l02971"></a>02971     <span class="comment">/* find out if Angstroem or microns are used */</span>
-<a name="l02972"></a>02972     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )
-<a name="l02973"></a>02973     {
-<a name="l02974"></a>02974         <span class="comment">/* Angstroem */</span>
-<a name="l02975"></a>02975         angst = 10000. ;
-<a name="l02976"></a>02976     }
-<a name="l02977"></a>02977     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )
-<a name="l02978"></a>02978     {
-<a name="l02979"></a>02979         <span class="comment">/* nanometers */</span>
-<a name="l02980"></a>02980         angst = 1000. ;
-<a name="l02981"></a>02981     }
-<a name="l02982"></a>02982     <span class="keywordflow">else</span>
-<a name="l02983"></a>02983     {
-<a name="l02984"></a>02984         <span class="comment">/* microns */</span>
-<a name="l02985"></a>02985         angst = 1. ;
-<a name="l02986"></a>02986     }
-<a name="l02987"></a>02987     offset = ((float) ly -1.) / 2. ;
-<a name="l02988"></a>02988 
-<a name="l02989"></a>02989     k = 0 ;
-<a name="l02990"></a>02990     <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )
-<a name="l02991"></a>02991     {
-<a name="l02992"></a>02992         <span class="comment">/* determine the coefficients by using the given bcoefs */</span>
-<a name="l02993"></a>02993         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )
-<a name="l02994"></a>02994         {
-<a name="l02995"></a>02995             <span class="comment">/* initialize coefficients and solution */</span>
-<a name="l02996"></a>02996             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)
-<a name="l02997"></a>02997             {
-<a name="l02998"></a>02998                 zroot[2*i] = 0. ;
-<a name="l02999"></a>02999                 zroot[2*i+1] = 0. ;
-<a name="l03000"></a>03000             }
-<a name="l03001"></a>03001             a[i] = coeffs[i][col] ;
-<a name="l03002"></a>03002         }
-<a name="l03003"></a>03003         a_initial = a[0] ;
-<a name="l03004"></a>03004 
-<a name="l03005"></a>03005         <span class="comment">/* go through the lines */</span>
-<a name="l03006"></a>03006         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l03007"></a>03007         {
-<a name="l03008"></a>03008             <span class="comment">/* go from Angstroem to micron */</span>
-<a name="l03009"></a>03009             wave_cor[line] = wavelength[line]/angst ;
-<a name="l03010"></a>03010             <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)
-<a name="l03011"></a>03011             {
-<a name="l03012"></a>03012                 <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / 
-<a name="l03013"></a>03013                          dispersion ) < 2*width ||
-<a name="l03014"></a>03014                     fabs((wave_cor[line] - wave_cor[line+1]) / 
-<a name="l03015"></a>03015                          dispersion ) < 2*width )
-<a name="l03016"></a>03016                 {
-<a name="l03017"></a>03017                     continue ;
-<a name="l03018"></a>03018                 }
-<a name="l03019"></a>03019             }
-<a name="l03020"></a>03020 
-<a name="l03021"></a>03021             a[0] = a_initial - wave_cor[line] ;
-<a name="l03022"></a>03022 
-<a name="l03023"></a>03023             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs)))
-<a name="l03024"></a>03024             {
-<a name="l03025"></a>03025                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;
-<a name="l03026"></a>03026                 <span class="keywordflow">return</span> FLAG ;
-<a name="l03027"></a>03027             }
-<a name="l03028"></a>03028             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, zroot))
-<a name="l03029"></a>03029             {
-<a name="l03030"></a>03030                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_gsl_poly_complex_solve did not work!"</span>) ;
-<a name="l03031"></a>03031                 <span class="keywordflow">return</span> FLAG ;
-<a name="l03032"></a>03032             }
-<a name="l03033"></a>03033             sinfo_gsl_poly_complex_workspace_free(w) ;
-<a name="l03034"></a>03034 
-<a name="l03035"></a>03035             j = 0 ;
-<a name="l03036"></a>03036             found = -1 ;
-<a name="l03037"></a>03037             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )
-<a name="l03038"></a>03038             {
-<a name="l03039"></a>03039                 <span class="comment">/* test for appropriate solution */</span>
-<a name="l03040"></a>03040                 <span class="keywordflow">if</span>( (zroot[2*i] > (-1.)*(<span class="keywordtype">float</span>) ly/2. &&
-<a name="l03041"></a>03041                      zroot[2*i] < (<span class="keywordtype">float</span>)ly/2.) && zroot[2*i+1] == 0. )
-<a name="l03042"></a>03042                 {
-<a name="l03043"></a>03043                     found = 2*i ;
-<a name="l03044"></a>03044                     j ++ ;
-<a name="l03045"></a>03045                 }
-<a name="l03046"></a>03046                 <span class="keywordflow">else</span>
-<a name="l03047"></a>03047                 {
-<a name="l03048"></a>03048                     continue ;
-<a name="l03049"></a>03049                 }
-<a name="l03050"></a>03050             }
-<a name="l03051"></a>03051 
-<a name="l03052"></a>03052             <span class="keywordflow">if</span> ( j == 0 )
-<a name="l03053"></a>03053             {
-<a name="l03054"></a>03054                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" no offset solution found for line %d "</span>
-<a name="l03055"></a>03055                                   <span class="stringliteral">"in column %d\n"</span>, line, col) ;
-<a name="l03056"></a>03056                 continue ;
-<a name="l03057"></a>03057             }
-<a name="l03058"></a>03058             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )
-<a name="l03059"></a>03059             {
-<a name="l03060"></a>03060                 cenpos = zroot[found] + (float)ly / 2. ; ;
-<a name="l03061"></a>03061             }
-<a name="l03062"></a>03062             <span class="keywordflow">else</span>
-<a name="l03063"></a>03063             {
-<a name="l03064"></a>03064                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" two or more offset solutions found for \</span>
-<a name="l03065"></a>03065 <span class="stringliteral">                       line %d in column %d\n"</span>, line, col) ;
-<a name="l03066"></a>03066                 continue ;
-<a name="l03067"></a>03067             }
-<a name="l03068"></a>03068 
-<a name="l03069"></a>03069             <span class="keywordflow">if</span> ( cenpos <= 0 )
-<a name="l03070"></a>03070             {
-<a name="l03071"></a>03071                 continue ;
-<a name="l03072"></a>03072             }
-<a name="l03073"></a>03073 
-<a name="l03074"></a>03074             <span class="comment">/* --------------------------------------------------------------</span>
-<a name="l03075"></a>03075 <span class="comment">             * fit the single lines using sinfo_linefit and store the </span>
-<a name="l03076"></a>03076 <span class="comment">             * parameters in</span>
-<a name="l03077"></a>03077 <span class="comment">             * an array of the FitParams data structure allParams[].</span>
-<a name="l03078"></a>03078 <span class="comment">             */</span>
-<a name="l03079"></a>03079             <span class="keywordflow">if</span> ( (result = sinfo_new_line_fit ( lineIm, par[k], 
-<a name="l03080"></a>03080                                                 fwhm, line, col,
-<a name="l03081"></a>03081                                          width, cenpos, min_amplitude, vline,
-<a name="l03082"></a>03082                                          mpar, xdat, wdat ) ) < 0 )
-<a name="l03083"></a>03083             {
-<a name="l03084"></a>03084              <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"sinfo_linefit failed, error no.: %d, "</span>
-<a name="l03085"></a>03085                               <span class="stringliteral">"column: %d, row: %f, line: %d\n"</span>, 
-<a name="l03086"></a>03086                               result, col, cenpos, line) ;
-<a name="l03087"></a>03087                 continue ;
-<a name="l03088"></a>03088             }
-<a name="l03089"></a>03089             <span class="keywordflow">if</span> ( (par[k] -> fit_par[0] <= 0.) || (par[k] -> fit_par[1] <= 0.)
-<a name="l03090"></a>03090                   || (par[k] -> fit_par[2] <= 0.) )
-<a name="l03091"></a>03091             {
-<a name="l03092"></a>03092                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative fit parameters in column: %d, "</span>
-<a name="l03093"></a>03093                                    <span class="stringliteral">"line: %d\n"</span>, col, line) ;
-<a name="l03094"></a>03094                 continue ;
-<a name="l03095"></a>03095             }
-<a name="l03096"></a>03096             par[k] -> wavelength = wavelength[line] ;
-<a name="l03097"></a>03097             k++ ;
-<a name="l03098"></a>03098         }
-<a name="l03099"></a>03099 
-<a name="l03100"></a>03100     }
-<a name="l03101"></a>03101     
-<a name="l03102"></a>03102     <span class="comment">/* free memory */</span>
-<a name="l03103"></a>03103     sinfo_new_destroy_vector(vline);
-<a name="l03104"></a>03104     cpl_free(xdat);
-<a name="l03105"></a>03105     cpl_free(wdat);
-<a name="l03106"></a>03106     cpl_free(mpar);
-<a name="l03107"></a>03107 
-<a name="l03108"></a>03108     
-<a name="l03109"></a>03109     c = 0 ;
-<a name="l03110"></a>03110     <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )
-<a name="l03111"></a>03111     {
-<a name="l03112"></a>03112         n = 0 ;
-<a name="l03113"></a>03113         <span class="keywordflow">for</span> ( i = 0 ; i < k ; i++ )
-<a name="l03114"></a>03114         {
-<a name="l03115"></a>03115             <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && 
-<a name="l03116"></a>03116                 par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. )
-<a name="l03117"></a>03117             {
-<a name="l03118"></a>03118                 foundit[n] = i ;
-<a name="l03119"></a>03119                 n++ ;
-<a name="l03120"></a>03120             }
-<a name="l03121"></a>03121         }
-<a name="l03122"></a>03122         <span class="keywordflow">if</span> ( n == 0 ) continue ;
-<a name="l03123"></a>03123 
-<a name="l03124"></a>03124         shift = 0 ;
-<a name="l03125"></a>03125         z = 0 ;
-<a name="l03126"></a>03126         <span class="keywordflow">for</span> ( j = 0 ; j < n ; j++ )
-<a name="l03127"></a>03127         {
-<a name="l03128"></a>03128             position = par[foundit[j]]->fit_par[2] ; 
-<a name="l03129"></a>03129             lambda   = par[foundit[j]]->wavelength ;
-<a name="l03130"></a>03130             line     = par[foundit[j]]->line ;
-<a name="l03131"></a>03131             <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)
-<a name="l03132"></a>03132             {
-<a name="l03133"></a>03133                 <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / 
-<a name="l03134"></a>03134                           dispersion ) < 2*width ||
-<a name="l03135"></a>03135                     fabs((wave_cor[line] - wave_cor[line+1]) / 
-<a name="l03136"></a>03136                           dispersion ) < 2*width )
-<a name="l03137"></a>03137                 {
-<a name="l03138"></a>03138                     continue ;
-<a name="l03139"></a>03139                 }
-<a name="l03140"></a>03140             }
-<a name="l03141"></a>03141             wave = 0 ;
-<a name="l03142"></a>03142             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ ) 
-<a name="l03143"></a>03143             {
-<a name="l03144"></a>03144                 wave += coeffs[i][col]*pow(position-offset, i) ;
-<a name="l03145"></a>03145             }
-<a name="l03146"></a>03146             shift += lambda - wave ;
-<a name="l03147"></a>03147             z++ ;
-<a name="l03148"></a>03148         }
-<a name="l03149"></a>03149         shift_col[c] = shift/(float)z ; 
-<a name="l03150"></a>03150         c++ ;
-<a name="l03151"></a>03151     }
-<a name="l03152"></a>03152     <span class="keywordflow">if</span> ( c > 0 )
-<a name="l03153"></a>03153     {
-<a name="l03154"></a>03154         wave_shift = sinfo_new_clean_mean(shift_col, c, 10., 10.) ;
-<a name="l03155"></a>03155         sinfo_msg(<span class="stringliteral">"overall positioning error in microns: %g"</span>, wave_shift) ;
-<a name="l03156"></a>03156     }
-<a name="l03157"></a>03157 
-<a name="l03158"></a>03158     <span class="comment">/* determine positioning error for each found line */</span>
-<a name="l03159"></a>03159     <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )
-<a name="l03160"></a>03160     {
-<a name="l03161"></a>03161         <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)
-<a name="l03162"></a>03162         {
-<a name="l03163"></a>03163             <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / dispersion ) < 
-<a name="l03164"></a>03164                                          2*width ||
-<a name="l03165"></a>03165                 fabs((wave_cor[line] - wave_cor[line+1]) / dispersion ) < 
-<a name="l03166"></a>03166                                          2*width )
-<a name="l03167"></a>03167             {
-<a name="l03168"></a>03168                 continue ;
-<a name="l03169"></a>03169             }
-<a name="l03170"></a>03170         }
-<a name="l03171"></a>03171 
-<a name="l03172"></a>03172         c = 0 ;
-<a name="l03173"></a>03173         <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )
-<a name="l03174"></a>03174         {
-<a name="l03175"></a>03175             shift_col[c] = 0. ;
-<a name="l03176"></a>03176             found = -1 ;
-<a name="l03177"></a>03177             <span class="keywordflow">for</span> ( i = 0 ; i < k ; i++ )
-<a name="l03178"></a>03178             {
-<a name="l03179"></a>03179                 <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && 
-<a name="l03180"></a>03180                     par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. && 
-<a name="l03181"></a>03181                     par[i]->line == line )
-<a name="l03182"></a>03182                 {
-<a name="l03183"></a>03183                     found = i ;
-<a name="l03184"></a>03184                 }
-<a name="l03185"></a>03185             }
-<a name="l03186"></a>03186             <span class="keywordflow">if</span> (found == -1) break ;
-<a name="l03187"></a>03187 
-<a name="l03188"></a>03188             position = par[found]->fit_par[2] ; 
-<a name="l03189"></a>03189             lambda  = par[found]->wavelength ;
-<a name="l03190"></a>03190             wave = 0 ;
-<a name="l03191"></a>03191             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ ) 
-<a name="l03192"></a>03192             {
-<a name="l03193"></a>03193                 wave += coeffs[i][col]*pow(position-offset, i) ;
-<a name="l03194"></a>03194             }
-<a name="l03195"></a>03195             shift_col[c] = lambda - wave ;
-<a name="l03196"></a>03196             c++ ;
-<a name="l03197"></a>03197         }
-<a name="l03198"></a>03198         <span class="keywordflow">if</span> (found != -1 && c > 0 )
-<a name="l03199"></a>03199         {
-<a name="l03200"></a>03200             sinfo_msg(<span class="stringliteral">"shift in microns: %g at wavelength: %f\n"</span>, 
-<a name="l03201"></a>03201             sinfo_new_clean_mean(shift_col, c, 20., 20.), lambda) ;
-<a name="l03202"></a>03202         }
-<a name="l03203"></a>03203     }
-<a name="l03204"></a>03204 
-<a name="l03205"></a>03205 
-<a name="l03206"></a>03206 
-<a name="l03207"></a>03207     cpl_free(foundit) ;
-<a name="l03208"></a>03208     cpl_free(shift_col) ;
-<a name="l03209"></a>03209     cpl_free(wave_cor) ;
-<a name="l03210"></a>03210     cpl_free(a) ;
-<a name="l03211"></a>03211     cpl_free(zroot) ;
-<a name="l03212"></a>03212 
-<a name="l03213"></a>03213     <span class="keywordflow">return</span> wave_shift ;
-<a name="l03214"></a>03214 }
-<a name="l03215"></a>03215 
-<a name="l03216"></a>03216 
-<a name="l03217"></a>03217 
-<a name="l03242"></a>03242  <span class="keyword">static</span> <span class="keywordtype">int</span>   
-<a name="l03243"></a>03243 sinfo_new_spred_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,
-<a name="l03244"></a>03244                             <span class="keywordtype">float</span> ** acoefs,
-<a name="l03245"></a>03245                             <span class="keywordtype">float</span> ** dacoefs,
-<a name="l03246"></a>03246                             Bcoeffs* bco,
-<a name="l03247"></a>03247                             <span class="keywordtype">float</span>    sigma_factor,
-<a name="l03248"></a>03248                             <span class="keywordtype">float</span>    dispersion,
-<a name="l03249"></a>03249                             <span class="keywordtype">float</span>    pixel_dist,
-<a name="l03250"></a>03250                             <span class="keywordtype">float</span>  * chisq,
-<a name="l03251"></a>03251                           <span class="keywordtype">float</span> ** sinfo_slit_pos )
-<a name="l03252"></a>03252  {
-<a name="l03253"></a>03253      <span class="keywordtype">float</span> col_index;
-<a name="l03254"></a>03254 
-<a name="l03255"></a>03255 
-<a name="l03256"></a>03256      <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;
-<a name="l03257"></a>03257      <span class="keywordtype">float</span> * acoefsclean ;
-<a name="l03258"></a>03258      <span class="keywordtype">double</span> sum, sumq, mean ;
-<a name="l03259"></a>03259      <span class="keywordtype">double</span> sigma ;
-<a name="l03260"></a>03260      <span class="keywordtype">double</span> cliphi, cliplo ;
-<a name="l03261"></a>03261      <span class="keywordtype">float</span> offset ;
-<a name="l03262"></a>03262      <span class="keywordtype">float</span> threshold ;
-<a name="l03263"></a>03263 
-<a name="l03264"></a>03264      <span class="keywordtype">int</span>* edge=NULL ;
-<a name="l03265"></a>03265      <span class="keywordtype">float</span>* sub_col_index=NULL ;
-<a name="l03266"></a>03266      <span class="keywordtype">float</span>* sub_acoefs=NULL;
-<a name="l03267"></a>03267      <span class="keywordtype">float</span>* sub_dacoefs=NULL ;
-<a name="l03268"></a>03268      <span class="keywordtype">float</span>* wcoefs=NULL ;
-<a name="l03269"></a>03269 
-<a name="l03270"></a>03270 
-<a name="l03271"></a>03271      <span class="keywordtype">int</span> ed1, ed2 ;
-<a name="l03272"></a>03272      <span class="keywordtype">int</span> i, n, num, ndata ;
-<a name="l03273"></a>03273      <span class="keywordtype">int</span> nc, ns ;
-<a name="l03274"></a>03274      <span class="keywordtype">int</span> loc_index ;
-<a name="l03275"></a>03275      <span class="keywordtype">int</span> sl_index;
-<a name="l03276"></a>03276      <span class="keywordtype">int</span> last_i=PIXEL;
-<a name="l03277"></a>03277  
-<a name="l03278"></a>03278      <span class="keywordflow">if</span> ( n_columns < 1 )
-<a name="l03279"></a>03279      {
-<a name="l03280"></a>03280          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of image columns given\n"</span>) ;
-<a name="l03281"></a>03281          <span class="keywordflow">return</span> -1 ;
-<a name="l03282"></a>03282      }
-<a name="l03283"></a>03283      <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )
-<a name="l03284"></a>03284      {
-<a name="l03285"></a>03285          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" acoeffs or errors of coefficients are not given"</span>) ;
-<a name="l03286"></a>03286          <span class="keywordflow">return</span> -1 ;
-<a name="l03287"></a>03287      }
-<a name="l03288"></a>03288      <span class="keywordflow">if</span> ( bco == NULL )
-<a name="l03289"></a>03289      {
-<a name="l03290"></a>03290          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" bcoeffs are not allocated\n"</span>) ;
-<a name="l03291"></a>03291          <span class="keywordflow">return</span> -1 ;
-<a name="l03292"></a>03292      }
-<a name="l03293"></a>03293      <span class="keywordflow">if</span> ( sigma_factor <= 0. )
-<a name="l03294"></a>03294      {
-<a name="l03295"></a>03295          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigma_factor given!\n"</span>) ;
-<a name="l03296"></a>03296          <span class="keywordflow">return</span> -1 ;
-<a name="l03297"></a>03297      }
-<a name="l03298"></a>03298      <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l03299"></a>03299      {
-<a name="l03300"></a>03300          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible dispersion given!\n"</span>) ;
-<a name="l03301"></a>03301          <span class="keywordflow">return</span> -1 ;
-<a name="l03302"></a>03302      }
-<a name="l03303"></a>03303 
-<a name="l03304"></a>03304 
-<a name="l03305"></a>03305      edge=cpl_calloc(bco->n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;
-<a name="l03306"></a>03306      sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03307"></a>03307      sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));
-<a name="l03308"></a>03308      sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03309"></a>03309 
-<a name="l03310"></a>03310      wcoefs=cpl_calloc(bco->n_bcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;
-<a name="l03311"></a>03311 
-<a name="l03312"></a>03312      <span class="comment">/*------------------------------------------------------------------------</span>
-<a name="l03313"></a>03313 <span class="comment">      * search for the slitlet edges by comparing the a0 coefficients along i</span>
-<a name="l03314"></a>03314 <span class="comment">      * the columns</span>
-<a name="l03315"></a>03315 <span class="comment">      * if a bigger deviation occurrs it is assumed that there is an edge.</span>
-<a name="l03316"></a>03316 <span class="comment">      */</span>
-<a name="l03317"></a>03317      n = 0 ;
-<a name="l03318"></a>03318      threshold = pixel_dist * fabs(dispersion) ;
-<a name="l03319"></a>03319      sinfo_slit_pos[0][0]=0 ;
-<a name="l03320"></a>03320      sl_index  = 0;
-<a name="l03321"></a>03321      <span class="comment">/* it was for ( i = PIXEL ; i  < n_columns - PIXEL ; ) */</span>
-<a name="l03322"></a>03322      <span class="keywordflow">for</span> ( i = 0 ; i  < n_columns - PIXEL ; )
-<a name="l03323"></a>03323      {
-<a name="l03324"></a>03324          <span class="keywordflow">if</span> ( !isnan(acoefs[0][i+1]) && 
-<a name="l03325"></a>03325                      acoefs[0][i+1] != 0. && 
-<a name="l03326"></a>03326                      acoefs[0][i] != 0.
-<a name="l03327"></a>03327                    && dacoefs[0][i+1] != 0.)
-<a name="l03328"></a>03328          {
-<a name="l03329"></a>03329              <span class="keywordflow">if</span> ( isnan(acoefs[0][i]) || acoefs[0][i] == 0. )
-<a name="l03330"></a>03330              {
-<a name="l03331"></a>03331                  <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i-1]) >= threshold )
-<a name="l03332"></a>03332              {
-<a name="l03333"></a>03333              <span class="comment">/* printf("case a pos1 %d pos2 %d \n",i,i+1); */</span>
-<a name="l03334"></a>03334                      edge[n] = i+1 ;
-<a name="l03335"></a>03335              sinfo_slit_pos[sl_index][1] = i ;
-<a name="l03336"></a>03336              sinfo_slit_pos[sl_index+1][0] = i + 1 ;
-<a name="l03337"></a>03337              sl_index++;
-<a name="l03338"></a>03338                      n++ ;
-<a name="l03339"></a>03339              last_i = i;
-<a name="l03340"></a>03340                      i += PIXEL ;
-<a name="l03341"></a>03341                  }
-<a name="l03342"></a>03342              }
-<a name="l03343"></a>03343              <span class="keywordflow">else</span>
-<a name="l03344"></a>03344              {
-<a name="l03345"></a>03345                  <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i]) >= threshold )
-<a name="l03346"></a>03346              {
-<a name="l03347"></a>03347              <span class="comment">/* printf("case b pos1 %d pos2 %d \n",i,i+1); */</span>
-<a name="l03348"></a>03348                      edge[n] = i+1 ;
-<a name="l03349"></a>03349              sinfo_slit_pos[sl_index][1] = i ;
-<a name="l03350"></a>03350              sinfo_slit_pos[sl_index+1][0] = i + 1 ;
-<a name="l03351"></a>03351              sl_index++;
-<a name="l03352"></a>03352                      n++ ;
-<a name="l03353"></a>03353              last_i = i;
-<a name="l03354"></a>03354                      i += PIXEL ;
-<a name="l03355"></a>03355                  }
-<a name="l03356"></a>03356              }
-<a name="l03357"></a>03357 
-<a name="l03358"></a>03358 
-<a name="l03359"></a>03359             <span class="comment">/* sometimes a slitlet may be lost due to divergences in </span>
-<a name="l03360"></a>03360 <span class="comment">                acoeffs[0] we try to recover it */</span>
-<a name="l03361"></a>03361              <span class="keywordflow">if</span>( ( (i-last_i) > 63 ) && 
-<a name="l03362"></a>03362                 ( isnan(fabs(acoefs[0][i+1] - acoefs[0][i])) ||
-<a name="l03363"></a>03363                   isnan(fabs(acoefs[0][i+1] - acoefs[0][i-1])) ) ) 
-<a name="l03364"></a>03364          {
-<a name="l03365"></a>03365                      edge[n] = i+1 ;
-<a name="l03366"></a>03366                      sinfo_slit_pos[sl_index][1] = i ;
-<a name="l03367"></a>03367                      sinfo_slit_pos[sl_index+1][0] = i + 1 ;
-<a name="l03368"></a>03368                      sl_index++;
-<a name="l03369"></a>03369                      n++ ;
-<a name="l03370"></a>03370 
-<a name="l03371"></a>03371                      last_i = i;
-<a name="l03372"></a>03372                      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"2 recovered slitlet edge i=%d"</span>,i);
-<a name="l03373"></a>03373                      i += PIXEL ;
-<a name="l03374"></a>03374 
-<a name="l03375"></a>03375          }
-<a name="l03376"></a>03376          }
-<a name="l03377"></a>03377          i++ ;
-<a name="l03378"></a>03378      }
-<a name="l03379"></a>03379      sinfo_slit_pos[sl_index][1]  = 2047;
-<a name="l03380"></a>03380      <span class="comment">/* printf("2 Found n slitlest: %d check %d\n", n,bco->n_slitlets - 1); */</span>
-<a name="l03381"></a>03381      <span class="keywordflow">if</span> ( n != bco->n_slitlets - 1 )
-<a name="l03382"></a>03382      {
-<a name="l03383"></a>03383          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find the right number of "</span>
-<a name="l03384"></a>03384                          <span class="stringliteral">"slitlets, found: %d\n"</span>,n+1) ;
-<a name="l03385"></a>03385          <span class="keywordflow">return</span> -1 ;
-<a name="l03386"></a>03386      }
-<a name="l03387"></a>03387 
-<a name="l03388"></a>03388      <span class="comment">/* go through the coefficents indices */</span>
-<a name="l03389"></a>03389      <span class="keywordflow">for</span> ( loc_index = 0 ; loc_index < bco->n_acoeffs ; loc_index++ )
-<a name="l03390"></a>03390      {
-<a name="l03391"></a>03391          <span class="comment">/* go through the single slitlets */</span>
-<a name="l03392"></a>03392          <span class="keywordflow">for</span> ( ns = 0 ; ns < bco->n_slitlets ; ns++ )
-<a name="l03393"></a>03393          {
-<a name="l03394"></a>03394              <span class="comment">/* determine the slitlet edges */</span>
-<a name="l03395"></a>03395              <span class="keywordflow">if</span> ( ns == 0 )
-<a name="l03396"></a>03396              {
-<a name="l03397"></a>03397                  ed1 = 0 ;
-<a name="l03398"></a>03398                  ed2 = edge[0] ;
-<a name="l03399"></a>03399              }
-<a name="l03400"></a>03400              <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == bco->n_slitlets - 1 )
-<a name="l03401"></a>03401              {
-<a name="l03402"></a>03402                  ed1 = edge[bco->n_slitlets - 2] ;
-<a name="l03403"></a>03403                  ed2 = n_columns ;
-<a name="l03404"></a>03404              }
-<a name="l03405"></a>03405              <span class="keywordflow">else</span>
-<a name="l03406"></a>03406              {
-<a name="l03407"></a>03407                  ed1 = edge[ns-1] ;
-<a name="l03408"></a>03408                  ed2 = edge[ns] ;
-<a name="l03409"></a>03409              }
-<a name="l03410"></a>03410 
-<a name="l03411"></a>03411              nc = 0 ;
-<a name="l03412"></a>03412              <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l03413"></a>03413              {
-<a name="l03414"></a>03414                  <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || 
-<a name="l03415"></a>03415                             acoefs[loc_index][i] == 0. || 
-<a name="l03416"></a>03416                            dacoefs[loc_index][i] == 0. )
-<a name="l03417"></a>03417                  {
-<a name="l03418"></a>03418                      continue ;
-<a name="l03419"></a>03419                  }
-<a name="l03420"></a>03420                  <span class="keywordflow">else</span>
-<a name="l03421"></a>03421                  {
-<a name="l03422"></a>03422                      nc++ ;
-<a name="l03423"></a>03423                  }
-<a name="l03424"></a>03424              }
-<a name="l03425"></a>03425              <span class="keywordflow">if</span> (NULL==(acoefsclean=(<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l03426"></a>03426              {
-<a name="l03427"></a>03427                  <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!"</span>);
-<a name="l03428"></a>03428                  <span class="keywordflow">return</span> -1 ;
-<a name="l03429"></a>03429              }
-<a name="l03430"></a>03430              nc = 0 ;
-<a name="l03431"></a>03431              <span class="keywordflow">for</span> ( i = ed1 ; i  < ed2 ; i++ )
-<a name="l03432"></a>03432             {
-<a name="l03433"></a>03433                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || 
-<a name="l03434"></a>03434                            acoefs[loc_index][i] == 0. || 
-<a name="l03435"></a>03435                           dacoefs[loc_index][i] == 0. )
-<a name="l03436"></a>03436                 {
-<a name="l03437"></a>03437                     continue ;
-<a name="l03438"></a>03438                 }
-<a name="l03439"></a>03439                 <span class="keywordflow">else</span>
-<a name="l03440"></a>03440                 {
-<a name="l03441"></a>03441                     acoefsclean[nc] = acoefs[loc_index][i] ;
-<a name="l03442"></a>03442                     nc++ ;
-<a name="l03443"></a>03443                 }
-<a name="l03444"></a>03444             }
-<a name="l03445"></a>03445 
-<a name="l03446"></a>03446             <span class="comment">/* ----------------------------------------------------------</span>
-<a name="l03447"></a>03447 <span class="comment">             * determine the clean mean and sigma value of the coefficients,</span>
-<a name="l03448"></a>03448 <span class="comment">             * that means reject 10 % of the extreme low and high values</span>
-<a name="l03449"></a>03449 <span class="comment">             */</span>
-<a name="l03450"></a>03450             sinfo_pixel_qsort(acoefsclean, nc) ;
-<a name="l03451"></a>03451 
-<a name="l03452"></a>03452             sum   = 0. ;
-<a name="l03453"></a>03453             sumq  = 0. ;
-<a name="l03454"></a>03454             mean  = 0. ;
-<a name="l03455"></a>03455             sigma = 0. ;
-<a name="l03456"></a>03456             n     = 0 ;
-<a name="l03457"></a>03457             <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; 
-<a name="l03458"></a>03458                   i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )
-<a name="l03459"></a>03459             {
-<a name="l03460"></a>03460                 sum  += (double)acoefsclean[i] ;
-<a name="l03461"></a>03461                 sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;
-<a name="l03462"></a>03462                 n ++ ;
-<a name="l03463"></a>03463             }
-<a name="l03464"></a>03464             mean          = sum/(double)n ;
-<a name="l03465"></a>03465             sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;
-<a name="l03466"></a>03466             cliphi        = mean + sigma * (double)sigma_factor ;
-<a name="l03467"></a>03467             cliplo        = mean - sigma * (double)sigma_factor ;
-<a name="l03468"></a>03468             <span class="comment">/* fit only the reasonnable values */</span>
-<a name="l03469"></a>03469             num = 0 ;
-<a name="l03470"></a>03470             col_index = 0 ;
-<a name="l03471"></a>03471             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )
-<a name="l03472"></a>03472             {
-<a name="l03473"></a>03473                 <span class="comment">/* take only the reasonnable coefficients */</span>
-<a name="l03474"></a>03474                 <span class="keywordflow">if</span> ( !isnan(acoefs[loc_index][i]) && 
-<a name="l03475"></a>03475                            (acoefs[loc_index][i] <= cliphi) && 
-<a name="l03476"></a>03476                            (acoefs[loc_index][i] >= cliplo) &&
-<a name="l03477"></a>03477                      (dacoefs[loc_index][i] != 0. ) && 
-<a name="l03478"></a>03478              (acoefs[loc_index][i] != 0.) )
-<a name="l03479"></a>03479                 {
-<a name="l03480"></a>03480                     sub_acoefs[num]    = acoefs[loc_index][i] ;
-<a name="l03481"></a>03481                     sub_dacoefs[num]   = dacoefs[loc_index][i] ;
-<a name="l03482"></a>03482                     sub_col_index[num] = col_index ;
-<a name="l03483"></a>03483                     num ++ ;
-<a name="l03484"></a>03484                 }
-<a name="l03485"></a>03485                 col_index++ ;
-<a name="l03486"></a>03486             }
-<a name="l03487"></a>03487             ndata = num ;
-<a name="l03488"></a>03488             offset = (float)(col_index-1) / 2. ;
-<a name="l03489"></a>03489 
-<a name="l03490"></a>03490             <span class="keywordflow">if</span> ( ndata < bco->n_bcoeffs )
-<a name="l03491"></a>03491             {
-<a name="l03492"></a>03492                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough data found in slitlet %da"</span>
-<a name="l03493"></a>03493                                 <span class="stringliteral">" to determine the fit coefficients.\n"</span>, ns) ;
-<a name="l03494"></a>03494                 cpl_free(acoefsclean) ;
-<a name="l03495"></a>03495                 <span class="keywordflow">return</span> -1 ;
-<a name="l03496"></a>03496             }
-<a name="l03497"></a>03497 
-<a name="l03498"></a>03498             <span class="comment">/* allocate coefficient matrices */</span>
-<a name="l03499"></a>03499             ucoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;
-<a name="l03500"></a>03500             vcoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;
-<a name="l03501"></a>03501             covar  = sinfo_matrix(1, bco->n_bcoeffs, 1, bco->n_bcoeffs) ;
-<a name="l03502"></a>03502 
-<a name="l03503"></a>03503             <span class="comment">/* scale the x-values for the fit */</span>
-<a name="l03504"></a>03504             <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )
-<a name="l03505"></a>03505             {
-<a name="l03506"></a>03506                 sub_col_index[i] = (sub_col_index[i] - offset) / offset ;
-<a name="l03507"></a>03507             }
-<a name="l03508"></a>03508 
-<a name="l03509"></a>03509             <span class="comment">/* finally, do the singular value decomposition fit */</span>
-<a name="l03510"></a>03510             sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, 
-<a name="l03511"></a>03511                                 sub_dacoefs-1, ndata, bco[ns].b[loc_index]-1,
-<a name="l03512"></a>03512                                 bco->n_bcoeffs, ucoefs, vcoefs, wcoefs-1, 
-<a name="l03513"></a>03513                                 covar, &chisq[ns], sinfo_fpol ) ;
-<a name="l03514"></a>03514 
-<a name="l03515"></a>03515             <span class="comment">/* scale the found coefficients */</span>
-<a name="l03516"></a>03516             <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_bcoeffs ; i ++ )
-<a name="l03517"></a>03517             {
-<a name="l03518"></a>03518                 bco[ns].b[loc_index][i] /= pow( offset, i ) ;
-<a name="l03519"></a>03519             }
-<a name="l03520"></a>03520 
-<a name="l03521"></a>03521             <span class="comment">/* free memory */</span>
-<a name="l03522"></a>03522             cpl_free (acoefsclean) ;
-<a name="l03523"></a>03523             sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l03524"></a>03524             sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l03525"></a>03525             sinfo_free_matrix( covar, 1<span class="comment">/*, bco->n_bcoeffs*/</span>, 
-<a name="l03526"></a>03526                                1<span class="comment">/*, bco->n_bcoeffs */</span>) ;
-<a name="l03527"></a>03527 
-<a name="l03528"></a>03528             <span class="comment">/* now calculate the smoothed acoefs for each column */</span>
-<a name="l03529"></a>03529             col_index = 0 ;
-<a name="l03530"></a>03530             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2  ; i++ )
-<a name="l03531"></a>03531             {
-<a name="l03532"></a>03532                 acoefs[loc_index][i] = 0. ;
-<a name="l03533"></a>03533                 <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_bcoeffs ; n++ )
-<a name="l03534"></a>03534                 {
-<a name="l03535"></a>03535                     acoefs[loc_index][i] += bco[ns].b[loc_index][n] * 
-<a name="l03536"></a>03536                                         pow(col_index - offset, n) ;
-<a name="l03537"></a>03537                 }
-<a name="l03538"></a>03538                 col_index++ ;
-<a name="l03539"></a>03539             }
-<a name="l03540"></a>03540 
-<a name="l03541"></a>03541         }
-<a name="l03542"></a>03542     }
-<a name="l03543"></a>03543 
-<a name="l03544"></a>03544 
-<a name="l03545"></a>03545     cpl_free(edge) ;
-<a name="l03546"></a>03546     cpl_free(sub_col_index) ;
-<a name="l03547"></a>03547     cpl_free(sub_acoefs);
-<a name="l03548"></a>03548     cpl_free(sub_dacoefs) ;
-<a name="l03549"></a>03549     cpl_free(wcoefs) ;
-<a name="l03550"></a>03550 
-<a name="l03551"></a>03551     <span class="keywordflow">return</span> 0 ;
-<a name="l03552"></a>03552 }
-<a name="l03553"></a>03553 
-<a name="l03554"></a>03554 
-<a name="l03603"></a>03603 cpl_image * sinfo_new_spred_wave_cal( cpl_image   * image,
-<a name="l03604"></a>03604                     FitParams ** par ,
-<a name="l03605"></a>03605                     <span class="keywordtype">float</span>     ** abuf,
-<a name="l03606"></a>03606                     <span class="keywordtype">int</span>          n_slitlets,
-<a name="l03607"></a>03607                     <span class="keywordtype">int</span>       ** row_clean,
-<a name="l03608"></a>03608                     <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l03609"></a>03609                     <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l03610"></a>03610                     <span class="keywordtype">float</span>        dispersion,
-<a name="l03611"></a>03611                     <span class="keywordtype">int</span>          halfWidth,
-<a name="l03612"></a>03612                     <span class="keywordtype">float</span>        minAmplitude,
-<a name="l03613"></a>03613                     <span class="keywordtype">float</span>        max_residual,
-<a name="l03614"></a>03614                     <span class="keywordtype">float</span>        fwhm,
-<a name="l03615"></a>03615                     <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l03616"></a>03616                     <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l03617"></a>03617                     <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l03618"></a>03618                     <span class="keywordtype">float</span>        pixel_dist,
-<a name="l03619"></a>03619                     <span class="keywordtype">float</span>        pixel_tolerance,
-<a name="l03620"></a>03620                   <span class="keywordtype">float</span> ** sinfo_slit_pos)
-<a name="l03621"></a>03621 
-<a name="l03622"></a>03622 
-<a name="l03623"></a>03623 {
-<a name="l03624"></a>03624     <span class="keywordtype">int</span>          i, j, k ;
-<a name="l03625"></a>03625     <span class="keywordtype">int</span>          n_fit ;
-<a name="l03626"></a>03626     <span class="keywordtype">int</span>          n_reject ;
-<a name="l03627"></a>03627     <span class="keywordtype">float</span>     *  acoefs ;
-<a name="l03628"></a>03628     <span class="keywordtype">float</span>     *  dacoefs ;
-<a name="l03629"></a>03629     <span class="keywordtype">float</span>     ** dabuf ;
-<a name="l03630"></a>03630     <span class="keywordtype">float</span>        chisq_poly ;
-<a name="l03631"></a>03631     <span class="keywordtype">float</span>     *  chisq_cross ;
-<a name="l03632"></a>03632     <span class="keywordtype">int</span>          zeroind ;
-<a name="l03633"></a>03633     <span class="keywordtype">int</span>          crossInd ;
-<a name="l03634"></a>03634     Bcoeffs   *  bco ;
-<a name="l03635"></a>03635     cpl_image  *  wavemap ;
-<a name="l03636"></a>03636     <span class="keywordtype">int</span> ilx=0;
-<a name="l03637"></a>03637     <span class="keywordtype">int</span> ily=0;
-<a name="l03638"></a>03638     <span class="keywordtype">float</span>* pidata=NULL;
-<a name="l03639"></a>03639 
-<a name="l03640"></a>03640 
-<a name="l03641"></a>03641     <span class="keywordflow">if</span> (  NULL == image )
-<a name="l03642"></a>03642     {
-<a name="l03643"></a>03643         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no image given\n"</span>) ;
-<a name="l03644"></a>03644         <span class="keywordflow">return</span> NULL ;
-<a name="l03645"></a>03645     }
-<a name="l03646"></a>03646     ilx=cpl_image_get_size_x(image);
-<a name="l03647"></a>03647     ily=cpl_image_get_size_y(image);
-<a name="l03648"></a>03648     pidata=cpl_image_get_data_float(image);
-<a name="l03649"></a>03649 
-<a name="l03650"></a>03650     <span class="keywordflow">if</span> ( par == NULL )
-<a name="l03651"></a>03651     {
-<a name="l03652"></a>03652         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no fit parameter data structure given\n"</span>) ;
-<a name="l03653"></a>03653         <span class="keywordflow">return</span> NULL ;
-<a name="l03654"></a>03654     }
-<a name="l03655"></a>03655     <span class="keywordflow">if</span> ( abuf == NULL )
-<a name="l03656"></a>03656     {
-<a name="l03657"></a>03657         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no buffer for fit coefficients given\n"</span>) ;
-<a name="l03658"></a>03658         <span class="keywordflow">return</span> NULL ;
-<a name="l03659"></a>03659     }
-<a name="l03660"></a>03660     <span class="keywordflow">if</span> ( n_slitlets <= 0 )
-<a name="l03661"></a>03661     {
-<a name="l03662"></a>03662         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible number of slitlets given\n"</span>) ;
-<a name="l03663"></a>03663         <span class="keywordflow">return</span> NULL ;
-<a name="l03664"></a>03664     }
-<a name="l03665"></a>03665     <span class="keywordflow">if</span> ( row_clean == NULL )
-<a name="l03666"></a>03666     {
-<a name="l03667"></a>03667         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no row_clean array given\n"</span>) ;
-<a name="l03668"></a>03668         <span class="keywordflow">return</span> NULL ;
-<a name="l03669"></a>03669     }
-<a name="l03670"></a>03670     <span class="keywordflow">if</span> ( wavelength_clean == NULL )
-<a name="l03671"></a>03671     {
-<a name="l03672"></a>03672         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no wavelength_clean array given\n"</span>) ;
-<a name="l03673"></a>03673         <span class="keywordflow">return</span> NULL ;
-<a name="l03674"></a>03674     }
-<a name="l03675"></a>03675 
-<a name="l03676"></a>03676     <span class="keywordflow">if</span> ( dispersion == 0. )
-<a name="l03677"></a>03677     {
-<a name="l03678"></a>03678         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible dispersion given\n"</span>) ;
-<a name="l03679"></a>03679         <span class="keywordflow">return</span> NULL ;
-<a name="l03680"></a>03680     }
-<a name="l03681"></a>03681 
-<a name="l03682"></a>03682     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ily/2 )
-<a name="l03683"></a>03683     {
-<a name="l03684"></a>03684         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible half width of the fitting box given\n"</span>) ;
-<a name="l03685"></a>03685         <span class="keywordflow">return</span> NULL ;
-<a name="l03686"></a>03686     }
-<a name="l03687"></a>03687     <span class="keywordflow">if</span> ( minAmplitude < 1. )
-<a name="l03688"></a>03688      {
-<a name="l03689"></a>03689          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible minimal amplitude\n"</span>) ;
-<a name="l03690"></a>03690          <span class="keywordflow">return</span> NULL ;
-<a name="l03691"></a>03691      }
-<a name="l03692"></a>03692 
-<a name="l03693"></a>03693      <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )
-<a name="l03694"></a>03694      {
-<a name="l03695"></a>03695          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible max_residual given\n"</span>) ;
-<a name="l03696"></a>03696          <span class="keywordflow">return</span> NULL ;
-<a name="l03697"></a>03697      }
-<a name="l03698"></a>03698      <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )
-<a name="l03699"></a>03699      {
-<a name="l03700"></a>03700          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible fwhm given\n"</span>) ;
-<a name="l03701"></a>03701          <span class="keywordflow">return</span> NULL ;
-<a name="l03702"></a>03702      }
-<a name="l03703"></a>03703 
-<a name="l03704"></a>03704      <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )
-<a name="l03705"></a>03705      {
-<a name="l03706"></a>03706          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_a_fitcoefs given\n"</span>) ;
-<a name="l03707"></a>03707          <span class="keywordflow">return</span> NULL ;
-<a name="l03708"></a>03708      }
-<a name="l03709"></a>03709 
-<a name="l03710"></a>03710      <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )
-<a name="l03711"></a>03711      {
-<a name="l03712"></a>03712          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_b_fitcoefs given\n"</span>) ;
-<a name="l03713"></a>03713          <span class="keywordflow">return</span> NULL ;
-<a name="l03714"></a>03714      }
-<a name="l03715"></a>03715      <span class="keywordflow">if</span> ( sigmaFactor <= 0. )
-<a name="l03716"></a>03716      {
-<a name="l03717"></a>03717          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigmaFactor given\n"</span>) ;
-<a name="l03718"></a>03718          <span class="keywordflow">return</span> NULL ;
-<a name="l03719"></a>03719      }
-<a name="l03720"></a>03720 
-<a name="l03721"></a>03721      <span class="comment">/* initialize the variables */</span>
-<a name="l03722"></a>03722      n_reject = 0 ;
-<a name="l03723"></a>03723      n_fit = 0 ;
-<a name="l03724"></a>03724 
-<a name="l03725"></a>03725      <span class="comment">/* fit each found line by using a sinfo_gaussian function and </span>
-<a name="l03726"></a>03726 <span class="comment">        determine the exact position */</span>
-<a name="l03727"></a>03727      <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, n_found_lines, 
-<a name="l03728"></a>03728                                       row_clean, wavelength_clean,
-<a name="l03729"></a>03729                                       halfWidth, minAmplitude )) )
-<a name="l03730"></a>03730      {
-<a name="l03731"></a>03731          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, error code of "</span>
-<a name="l03732"></a>03732                          <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;
-<a name="l03733"></a>03733          <span class="keywordflow">return</span> NULL ;
-<a name="l03734"></a>03734      }
-<a name="l03735"></a>03735 
-<a name="l03736"></a>03736      <span class="comment">/* first check for faked lines like bad pixels */</span>
-<a name="l03737"></a>03737      <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, 
-<a name="l03738"></a>03738                                                 dispersion, 
-<a name="l03739"></a>03739                                                 wavelength_clean, 
-<a name="l03740"></a>03740                                                 row_clean, 
-<a name="l03741"></a>03741                                                 n_found_lines,
-<a name="l03742"></a>03742                                                 ilx, 
-<a name="l03743"></a>03743                                                 pixel_tolerance) )
-<a name="l03744"></a>03744      {
-<a name="l03745"></a>03745          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, error code of "</span>
-<a name="l03746"></a>03746                          <span class="stringliteral">" sinfo_fitLines: %d\n"</span>, n_fit) ;
-<a name="l03747"></a>03747          <span class="keywordflow">return</span> NULL ;
-<a name="l03748"></a>03748      }
-<a name="l03749"></a>03749 
-<a name="l03750"></a>03750 
-<a name="l03751"></a>03751      <span class="comment">/* allocate memory */</span>
-<a name="l03752"></a>03752      <span class="keywordflow">if</span> (NULL==(acoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||
-<a name="l03753"></a>03753          NULL==(dacoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||
-<a name="l03754"></a>03754          NULL==(dabuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||
-<a name="l03755"></a>03755          NULL==(chisq_cross = (<span class="keywordtype">float</span>*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l03756"></a>03756      {
-<a name="l03757"></a>03757          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;
-<a name="l03758"></a>03758          <span class="keywordflow">return</span> NULL ;
-<a name="l03759"></a>03759      }
-<a name="l03760"></a>03760      <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l03761"></a>03761      {
-<a name="l03762"></a>03762          <span class="keywordflow">if</span> (  NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(ilx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )
-<a name="l03763"></a>03763          {
-<a name="l03764"></a>03764              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;
-<a name="l03765"></a>03765              cpl_free ( acoefs ) ;
-<a name="l03766"></a>03766              cpl_free ( dacoefs ) ;
-<a name="l03767"></a>03767              cpl_free ( chisq_cross ) ;
-<a name="l03768"></a>03768              cpl_free(dabuf) ;
-<a name="l03769"></a>03769              <span class="keywordflow">return</span> NULL ;
-<a name="l03770"></a>03770          }
-<a name="l03771"></a>03771      }
-<a name="l03772"></a>03772 
-<a name="l03773"></a>03773      <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span>
-<a name="l03774"></a>03774      k = 0 ;
-<a name="l03775"></a>03775      <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )
-<a name="l03776"></a>03776      {
-<a name="l03777"></a>03777          zeroind = 0 ;
-<a name="l03778"></a>03778          <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, 
-<a name="l03779"></a>03779                                                          n_found_lines[i], 
-<a name="l03780"></a>03780                                                          ily, dispersion,
-<a name="l03781"></a>03781                                                          max_residual, acoefs,
-<a name="l03782"></a>03782                                                          dacoefs, &n_reject, 
-<a name="l03783"></a>03783                                                          n_a_fitcoefs)) )
-<a name="l03784"></a>03784          {
-<a name="l03785"></a>03785              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" error in sinfo_polyfit in column: %d\n"</span>, i) ;
-<a name="l03786"></a>03786              <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l03787"></a>03787              {
-<a name="l03788"></a>03788                  acoefs[j] = ZERO ;
-<a name="l03789"></a>03789                  dacoefs[j] = ZERO ;
-<a name="l03790"></a>03790              }
-<a name="l03791"></a>03791          }
-<a name="l03792"></a>03792 
-<a name="l03793"></a>03793          <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l03794"></a>03794          {
-<a name="l03795"></a>03795 
-<a name="l03796"></a>03796              <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||
-<a name="l03797"></a>03797                   dacoefs[j] == 0. || isnan(acoefs[j]) )
-<a name="l03798"></a>03798              {
-<a name="l03799"></a>03799                  zeroind = 1 ;
-<a name="l03800"></a>03800              }
-<a name="l03801"></a>03801          }
-<a name="l03802"></a>03802          <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )
-<a name="l03803"></a>03803          {
-<a name="l03804"></a>03804              <span class="keywordflow">if</span> ( zeroind == 0 )
-<a name="l03805"></a>03805              {
-<a name="l03806"></a>03806                  abuf[j][i]  = acoefs[j] ;
-<a name="l03807"></a>03807                  dabuf[j][i] = dacoefs[j] ;
-<a name="l03808"></a>03808              }
-<a name="l03809"></a>03809              <span class="keywordflow">else</span>
-<a name="l03810"></a>03810              {
-<a name="l03811"></a>03811                  abuf[j][i]  = ZERO ;
-<a name="l03812"></a>03812                  dabuf[j][i] = ZERO ;
-<a name="l03813"></a>03813              }
-<a name="l03814"></a>03814          }
-<a name="l03815"></a>03815      }
-<a name="l03816"></a>03816 
-<a name="l03817"></a>03817      <span class="comment">/* allocate memory for the fitting coefficients */</span>
-<a name="l03818"></a>03818      <span class="keywordflow">if</span> ( NULL == ( bco = sinfo_new_b_coeffs( n_slitlets, 
-<a name="l03819"></a>03819                                               n_a_fitcoefs, n_b_fitcoefs)) )
-<a name="l03820"></a>03820      {
-<a name="l03821"></a>03821          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate memory for the bcoeffs\n"</span>) ;
-<a name="l03822"></a>03822          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l03823"></a>03823          {
-<a name="l03824"></a>03824              cpl_free (dabuf[i]) ;
-<a name="l03825"></a>03825          }
-<a name="l03826"></a>03826          cpl_free (dabuf) ;
-<a name="l03827"></a>03827          cpl_free ( acoefs ) ;
-<a name="l03828"></a>03828          cpl_free ( dacoefs ) ;
-<a name="l03829"></a>03829          cpl_free ( chisq_cross ) ;
-<a name="l03830"></a>03830          <span class="keywordflow">return</span> NULL ;
-<a name="l03831"></a>03831      }
-<a name="l03832"></a>03832 
-<a name="l03833"></a>03833      <span class="comment">/* fit each acoefs across the slitlets to smooth the result */</span>
-<a name="l03834"></a>03834      <span class="keywordflow">if</span> ( -1 == ( crossInd = sinfo_new_spred_coeffs_cross_slit_fit( ilx, abuf, 
-<a name="l03835"></a>03835                                                                     dabuf,
-<a name="l03836"></a>03836                                                              bco, sigmaFactor,
-<a name="l03837"></a>03837                                                              dispersion, 
-<a name="l03838"></a>03838                                                              pixel_dist, 
-<a name="l03839"></a>03839                                                              chisq_cross,
-<a name="l03840"></a>03840                                                              sinfo_slit_pos )) )
-<a name="l03841"></a>03841      {
-<a name="l03842"></a>03842          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out the fitting of "</span>
-<a name="l03843"></a>03843                           <span class="stringliteral">"coefficients across the columns\n"</span>) ;
-<a name="l03844"></a>03844          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l03845"></a>03845          {
-<a name="l03846"></a>03846              cpl_free (dabuf[i]) ;
-<a name="l03847"></a>03847          }
-<a name="l03848"></a>03848 
-<a name="l03849"></a>03849          cpl_free (dabuf) ;
-<a name="l03850"></a>03850          cpl_free ( acoefs ) ;
-<a name="l03851"></a>03851          cpl_free ( dacoefs ) ;
-<a name="l03852"></a>03852          sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l03853"></a>03853          cpl_free ( chisq_cross ) ;
-<a name="l03854"></a>03854          <span class="keywordflow">return</span> NULL ;
-<a name="l03855"></a>03855      }
-<a name="l03856"></a>03856 
-<a name="l03857"></a>03857      <span class="keywordflow">if</span> ( NULL == (wavemap = sinfo_new_wave_map_slit (abuf, n_a_fitcoefs, 
-<a name="l03858"></a>03858                                                       ily, ilx)))
-<a name="l03859"></a>03859      {
-<a name="l03860"></a>03860          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out wavemap creation\n"</span>) ;
-<a name="l03861"></a>03861          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l03862"></a>03862          {
-<a name="l03863"></a>03863              cpl_free (dabuf[i]) ;
-<a name="l03864"></a>03864          }
-<a name="l03865"></a>03865 
-<a name="l03866"></a>03866          cpl_free (dabuf) ;
-<a name="l03867"></a>03867          cpl_free ( acoefs ) ;
-<a name="l03868"></a>03868          cpl_free ( dacoefs ) ;
-<a name="l03869"></a>03869          sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l03870"></a>03870          cpl_free ( chisq_cross ) ;
-<a name="l03871"></a>03871          <span class="keywordflow">return</span> NULL ;
-<a name="l03872"></a>03872      }
-<a name="l03873"></a>03873 
-<a name="l03874"></a>03874      <span class="comment">/* free all allocated memory */</span>
-<a name="l03875"></a>03875      <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )
-<a name="l03876"></a>03876      {
-<a name="l03877"></a>03877          cpl_free (dabuf[i]) ;
-<a name="l03878"></a>03878      }
-<a name="l03879"></a>03879      cpl_free (dabuf) ;
-<a name="l03880"></a>03880      cpl_free ( acoefs ) ;
-<a name="l03881"></a>03881      cpl_free ( dacoefs ) ;
-<a name="l03882"></a>03882      sinfo_new_destroy_b_coeffs(bco) ;
-<a name="l03883"></a>03883      cpl_free ( chisq_cross ) ;
-<a name="l03884"></a>03884 
-<a name="l03885"></a>03885      <span class="keywordflow">return</span> wavemap ;
-<a name="l03886"></a>03886  }
-<a name="l03887"></a>03887 
-<a name="l03889"></a>03889 <span class="comment">/*___oOo___*/</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*************************************************************************</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* </span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* schreib  22/01/02  created</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">*   NAME</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">*     sinfo_wavecal.c -</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">*     routines needed for wavelength calibration with smoothing only</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">*     within the slitlets</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">*   SYNOPSIS</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment">*  1) Bcoeffs * sinfo_new_b_coeffs( int n_slitlets,</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">*                           int n_acoeffs,</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">*                           int n_bcoeffs )</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment">*  2) void sinfo_new_destroy_b_coeffs ( Bcoeffs * bco )</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">*  3) int   sinfo_new_coeffs_cross_slit_fit ( int      n_columns,</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">*                                float ** acoefs,</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment">*                                float ** dacoefs,</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">*                                Bcoeffs* bco,</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">*                                float    sigma_factor,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">*                                float    dispersion,</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">*                                float    pixel_dist,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">*                                float  * chisq )</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">*  4) cpl_image * sinfo_new_wave_map_slit ( float ** acoefs,</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">*                              int      n_acoefs,</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">*                              int      n_rows,</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">*                              int      n_columns )</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">*  5) cpl_image * sinfo_new_wave_cal( cpl_image   * image, </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">*                         FitParams ** par ,</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">*                         float     ** abuf,</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">*                         int          n_slitlets,</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment">*                         int       ** row_clean,</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="comment">*                         float     ** wavelength_clean,</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">*                         int        * n_found_lines,</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">*                         float        dispersion,</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">*                         int          halfWidth,</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">*                         float        minAmplitude,</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">*                         float        max_residual,</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">*                         float        fwhm,</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">*                         int          n_a_fitcoefs,</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">*                         int          n_b_fitcoefs,</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">*                         float        sigmaFactor,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">*                         float        pixel_dist )</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">*  6) int sinfo_new_check_for_fake_lines ( FitParams ** par,</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">*                             float        dispersion,</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment">*                             float     ** wavelength_clean,</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">*                             int       ** row_clean,</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">*                             int        * n_found_lines,</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">*                             int          n_columns,</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">*                             float        pixel_tolerance )</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> <span class="comment">*  7) cpl_image * sinfo_new_create_shifted_slit_wavemap ( cpl_image * lineIm,</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> <span class="comment">*                                           float    ** coeffs,</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">*                                           int      n_fitcoeffs,</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">*                                           float  * wavelength,</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> <span class="comment">*                                           float  * intensity,</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> <span class="comment">*                                           int      n_lines,</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> <span class="comment">*                                           int      magFactor )</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> <span class="comment">*   </span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> <span class="comment">*   DESCRIPTION</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">*  1) allocates memory for a new array of </span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> <span class="comment">*     Bcoeffs data structures</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> <span class="comment">*  2) frees memory of an array of Bcoeffs data structures</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> <span class="comment">*  3) Fits each single polynomial coefficient acoefs resulting from </span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span> <span class="comment">      sinfo_polyfit </span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">*     across the columns of each slitlet and use the result of this fit to</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span> <span class="comment">*     smooth the acoefs.</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> <span class="comment">*  4) builds a new wavelength calibration map as fits image</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">*     by using the fit coeficients.</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> <span class="comment">*  5) this routine takes an image from a calibration</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">*     emission lamp and delivers the smoothed fit coefficients of  </span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> <span class="comment">*     a polynomial fit along the columns of the line positions as output. </span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">*     This routine expects Nyquist sampled spectra </span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">*     (either an interleaved image or an image convolved with an </span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> <span class="comment">*      appropriate function in spectral direction)</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> <span class="comment">*  6) this routine searches for successfully fitted fake lines like</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> <span class="comment">*     bad pixels by comparing the found line positons with </span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> <span class="comment">*     estimated template positions. This routine should be</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> <span class="comment">*     inserted in the wavelength calibration routine just after</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> <span class="comment">*     the sinfo_fitLines() routine.</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">*  7) This routine cross-correlates a shifted emission line frames </span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> <span class="comment">*     and determines the shift to the old one which is given by</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">*     its polynomial coefficients.</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">*     Then the a0 coefficients is recalculated and afterwards</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> <span class="comment">*     a new wavelength calibration map is generated using the </span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> <span class="comment">*     already calculated smoothed polynomial coefficients.</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> <span class="comment">*   FILES</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">*   ENVIRONMENT</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">*   RETURN VALUES </span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">*   CAUTIONS </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">*   EXAMPLES</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">*   SEE ALSO</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> <span class="comment">*   BUGS   </span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> <span class="comment">*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="preprocessor"></span><span class="preprocessor">#include "sinfo_vltPort.h"</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> <span class="preprocessor">#include <math.h></span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span> </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment"> * System Headers</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">/* </span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment"> * Local Headers</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="preprocessor">#include "sinfo_function_1d.h"</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="preprocessor">#include "sinfo_recipes.h"</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="preprocessor">#include "sinfo_wavecal.h"</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="preprocessor">#include "sinfo_wave_calibration.h"</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="preprocessor">#include "sinfo_solve_poly_root.h"</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="preprocessor">#include "sinfo_svd.h"</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment"> * Private functions prototype</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="keyword">static</span> Bcoeffs * </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> sinfo_new_b_coeffs( <span class="keywordtype">int</span> n_slitlets,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                       <span class="keywordtype">int</span> n_acoeffs,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                       <span class="keywordtype">int</span> n_bcoeffs ) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> sinfo_new_destroy_b_coeffs ( Bcoeffs * bco ) ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span> <span class="keyword">static</span> <span class="keywordtype">int</span>   </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> sinfo_new_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>                            <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>                            <span class="keywordtype">float</span> ** dacoefs,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>                            Bcoeffs* bco,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                            <span class="keywordtype">float</span>    sigma_factor,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                            <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                            <span class="keywordtype">float</span>    pixel_dist,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                            <span class="keywordtype">float</span>  * chisq ) ;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> <span class="keyword">static</span> <span class="keywordtype">int</span>   </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> sinfo_new_spred_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                             <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                             <span class="keywordtype">float</span> ** dacoefs,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                             Bcoeffs* bco,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                             <span class="keywordtype">float</span>    sigma_factor,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                             <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                             <span class="keywordtype">float</span>    pixel_dist,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                             <span class="keywordtype">float</span>  * chisq,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                           <span class="keywordtype">float</span> ** sinfo_slit_pos) ;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="comment"> * function definitions</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span> <span class="keyword">static</span> Bcoeffs * </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> sinfo_new_b_coeffs( <span class="keywordtype">int</span> n_slitlets,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                       <span class="keywordtype">int</span> n_acoeffs,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                       <span class="keywordtype">int</span> n_bcoeffs )</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> {</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordtype">int</span> i, n ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     Bcoeffs * returnbco ;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     <span class="keywordflow">if</span>(NULL == (returnbco=(Bcoeffs*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(Bcoeffs))) )</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>     {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     returnbco -> n_slitlets = n_slitlets ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     returnbco -> n_acoeffs  = n_acoeffs ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     returnbco -> n_bcoeffs  = n_bcoeffs ;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_slitlets ; i++ )</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     {</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>         returnbco[i].slitlet = i ;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>         <span class="keywordflow">if</span> ( NULL == (returnbco[i].b = (<span class="keywordtype">float</span>**)cpl_calloc(n_acoeffs, </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                                                 <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*)) ) ) </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>         {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         <span class="keywordflow">for</span> ( n = 0 ; n < n_acoeffs ; n++ )</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>         {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>             <span class="keywordflow">if</span> ( NULL == (returnbco[i].b[n] = (<span class="keywordtype">float</span>*)cpl_calloc(n_bcoeffs, </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                                <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>             {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory"</span>) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>             }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>         }  </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     }</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     <span class="keywordflow">return</span> returnbco ;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> <span class="keyword">static</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> sinfo_new_destroy_b_coeffs ( Bcoeffs * bco )</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     <span class="keywordtype">int</span> i, n ;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>   </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>     <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_slitlets ; i++ )</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_acoeffs ; n++ )</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>             cpl_free (bco[i].b[n]) ;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         cpl_free(bco[i].b) ;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>     </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     cpl_free (bco) ;  </div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="keyword">static</span> <span class="keywordtype">int</span>   </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> sinfo_new_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                            <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                            <span class="keywordtype">float</span> ** dacoefs,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                            Bcoeffs* bco,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                            <span class="keywordtype">float</span>    sigma_factor,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                            <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                            <span class="keywordtype">float</span>    pixel_dist,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                            <span class="keywordtype">float</span>  * chisq )</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> {</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordtype">float</span> col_index;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>     <span class="keywordtype">float</span> * acoefsclean ;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     <span class="keywordtype">double</span> sum, sumq, mean ;</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     <span class="keywordtype">double</span> sigma ;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="keywordtype">double</span> cliphi, cliplo ;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     <span class="keywordtype">float</span> offset ;</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     <span class="keywordtype">float</span> threshold ;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     <span class="keywordtype">float</span>* sub_col_index=NULL ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="keywordtype">float</span>* sub_acoefs=NULL;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     <span class="keywordtype">float</span>* wcoefs=NULL ;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     <span class="keywordtype">int</span>* edge=NULL ;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     <span class="keywordtype">int</span> ed1, ed2 ;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     <span class="keywordtype">int</span> i, n, num, ndata ;</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     <span class="keywordtype">int</span> nc, ns ;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="keywordtype">int</span> loc_index ;</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     <span class="keywordtype">int</span> last_i=PIXEL;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     <span class="keywordflow">if</span> ( n_columns < 1 )</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of image columns given"</span>) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     }</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>     {</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"acoeffs or errors of coefficients are not given"</span>) ;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>     }</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>     <span class="keywordflow">if</span> ( bco == NULL )</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>     {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"bcoeffs are not allocated"</span>) ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>     }</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>     <span class="keywordflow">if</span> ( sigma_factor <= 0. )</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>     {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible sigma_factor given!"</span>) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given!"</span>) ;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     <span class="comment">/*-------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span> <span class="comment">     * search for the slitlet edges by comparing the a0 coefficients along </span></div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> <span class="comment">       the columns if a bigger deviation occurrs it is assumed that there </span></div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> <span class="comment">       is an edge.</span></div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     edge=cpl_calloc(bco->n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     wcoefs=cpl_calloc(bco->n_bcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>     n = 0 ;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     threshold = pixel_dist * fabs(dispersion) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordflow">for</span> ( i = PIXEL ; i < n_columns - PIXEL ; )</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         <span class="keywordflow">if</span> ( !isnan(acoefs[0][i+1]) && </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                     acoefs[0][i+1] != 0. && </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                     acoefs[0][i] != 0.  &&</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                     dacoefs[0][i+1] != 0.)</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>         {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>             <span class="keywordflow">if</span> ( isnan(acoefs[0][i]) || acoefs[0][i] == 0. )</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>             {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                 <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i-1]) >= threshold )</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                 {</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>            <span class="keywordflow">if</span>( (i-last_i) < 60 && (i > 80) ) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"skip1 i=%d diff=%d\n"</span>,i,i-last_i);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>              <span class="keywordflow">goto</span> skip;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                    } <span class="keywordflow">else</span> {  </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>              <span class="comment">/*</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> <span class="comment">                 sinfo_msg("diff1=%f i=%d threshold-%f size=%d\n", </span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> <span class="comment">                               fabs(acoefs[0][i+1] - acoefs[0][i-1]),i,</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> <span class="comment">                               threshold,i-last_i);</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>                      edge[n] = i+1 ;</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>              <span class="comment">//sinfo_msg("1found edge: %d",edge[n]);</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>                      n++ ;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>                      last_i = i;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>                      i += PIXEL ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>            }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                 }</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                 <span class="keywordflow">if</span> ((fabs(acoefs[0][i+1] - acoefs[0][i]) >= threshold) || </div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                     (i-last_i) > 63 )</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                 {</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>            <span class="keywordflow">if</span>( (i-last_i) < 60 && ((i> 80) || (i<PIXEL+2))) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"skip2 i=%d diff=%d\n"</span>,i,i-last_i);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>              <span class="keywordflow">goto</span> skip;</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>                    } <span class="keywordflow">else</span> {  </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>                       </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>              <span class="comment">/*</span></div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span> <span class="comment">                      sinfo_msg_warning("diff2=%f i=%d threshold-%f size=%d",</span></div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> <span class="comment">                      fabs(acoefs[0][i+1] - acoefs[0][i]),</span></div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> <span class="comment">                      i,threshold,i-last_i);                      </span></div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> <span class="comment">                      */</span></div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>               </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>  </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>                   </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>                       edge[n] = i+1 ;</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>                 <span class="comment">//sinfo_msg("2found edge: %d",edge[n]);</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>                       n++ ;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>                       last_i = i;</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                       i += PIXEL ;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>            }</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                 }</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             }</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>         <span class="comment">/* sometimes a slitlet may be lost due to divergences in acoeffs[0]</span></div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span> <span class="comment">               we try to recover it */</span></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>             <span class="keywordflow">if</span>( ( (i-last_i) > 63 ) && </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>                 ( isnan(fabs(acoefs[0][i+1] - acoefs[0][i])) ||</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>                   isnan(fabs(acoefs[0][i+1] - acoefs[0][i-1])) ) ) </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>           {</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         edge[n] = i+1 ;</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         <span class="comment">//sinfo_msg("3found edge: %d",edge[n]);</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>         n++ ;</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>         last_i = i;</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"recovered slitlet edge i=%d"</span>,i);</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>         i += PIXEL ;</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span> </div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>           }</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     }</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>       skip:</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>         i++ ;</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>     }</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> <span class="comment">    printf("X min %d max %d last %d\n", PIXEL, n_columns - PIXEL, i);</span></div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> <span class="comment">    printf("n=%d check=%d\n",n,bco->n_slitlets - 1);</span></div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     <span class="keywordflow">if</span> ( n != bco->n_slitlets - 1 )</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>     {</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find the right number "</span></div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>                         <span class="stringliteral">"of slitlets, found: %d"</span>,n+1) ;</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     }</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>  </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>     sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     <span class="comment">/* go through the coefficents indices */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     <span class="keywordflow">for</span> ( loc_index = 0 ; loc_index < bco->n_acoeffs ; loc_index++ )</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>     {</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>         <span class="comment">/* go through the single slitlets */</span></div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>         <span class="keywordflow">for</span> ( ns = 0 ; ns < bco->n_slitlets ; ns++ )</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>         {</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>             <span class="comment">/* determine the slitlet edges */</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>             <span class="keywordflow">if</span> ( ns == 0 )</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>             {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>                 ed1 = 0 ;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>                 ed2 = edge[0] ;</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>             }</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == bco->n_slitlets - 1 )</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>             {</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>                 ed1 = edge[bco->n_slitlets - 2] ;</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>                 ed2 = n_columns ;</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>             }</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>             {</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>                 ed1 = edge[ns-1] ;</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>                 ed2 = edge[ns] ;</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>             }</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>             nc = 0 ;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>             {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>                            acoefs[loc_index][i] == 0. || </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>                           dacoefs[loc_index][i] == 0. )</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>                 {</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>                     continue ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>                 }</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>                 {</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>                     nc++ ;</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>                 }</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>             }</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>             <span class="keywordflow">if</span> (NULL==(acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>             {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!"</span>) ;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>             }</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>             nc = 0 ;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>             {</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>                       acoefs[loc_index][i] == 0. || </div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>                      dacoefs[loc_index][i] == 0. )</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>                 {</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>                     continue ;</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>                 }</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>                 {</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>                     acoefsclean[nc] = acoefs[loc_index][i] ;</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>                     nc++ ;</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>                 }</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>             }</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>             <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="comment">             * determine the clean mean and sigma value of the coefficients,</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> <span class="comment">             * that means reject 10 % of the extreme low and high values</span></div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>             sinfo_pixel_qsort(acoefsclean, nc) ;</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span> </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>             sum   = 0. ;</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>             sumq  = 0. ;</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>             mean  = 0. ;</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>             sigma = 0. ;</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>             n     = 0 ;</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>             <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>                   i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>             {</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>                 sum  += (double)acoefsclean[i] ;</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>                 sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>                 n ++ ;</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>             }</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>             mean          = sum/(double)n ;</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>             sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>             cliphi        = mean + sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>             cliplo        = mean - sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>             <span class="comment">/* fit only the reasonnable values */</span></div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>             num = 0 ;</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>             col_index = 0 ;</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span> <span class="comment">            printf("ed1=%d ed2=%d\n",ed1,ed2);</span></div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>             {</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>                 <span class="comment">/* take only the reasonnable coefficients */</span></div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>                  <span class="comment">/*</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">        printf("acoeffs=%f dacoefs=%f cliphi=%f cliplo=%f\n",</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">                   acoefs[loc_index][i],dacoefs[loc_index][i],cliphi,cliplo);</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>                 <span class="keywordflow">if</span> ( !isnan(acoefs[loc_index][i])     && </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>                      (acoefs[loc_index][i] <= cliphi) && </div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>                      (acoefs[loc_index][i] >= cliplo) &&</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>                      (dacoefs[loc_index][i] != 0. )   && </div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>                      (acoefs[loc_index][i] != 0.)     )</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>                 {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>                     sub_acoefs[num]    = acoefs[loc_index][i] ;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>                     sub_dacoefs[num]   = dacoefs[loc_index][i] ;</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>                     sub_col_index[num] = col_index ;</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>                     num ++ ;</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>                 }</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>                 col_index++ ;</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>             }</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>             ndata = num ;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>             offset = (float)(col_index-1) / 2. ;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>             <span class="comment">/* printf("ndata=%d bco->n_bcoeffs=%d\n",ndata,bco->n_bcoeffs); */</span></div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> </div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>             <span class="keywordflow">if</span> ( ndata < bco->n_bcoeffs )</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>             {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"not enough data found in slitlet %d to "</span></div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>                                 <span class="stringliteral">"determine the fit coefficients."</span>, ns) ;</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>                 cpl_free(acoefsclean) ;</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>             }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span> </div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>             <span class="comment">/* allocate coefficient matrices */</span></div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>             ucoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>             vcoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>             covar  = sinfo_matrix(1, bco->n_bcoeffs, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>             <span class="comment">/* scale the x-values for the fit */</span></div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>             <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>             {</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>                 sub_col_index[i] = (sub_col_index[i] - offset) / offset ;</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>             }</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span> </div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>             <span class="comment">/* finally, do the singular value decomposition fit */</span></div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>             sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, </div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>                                 sub_dacoefs-1, ndata, bco[ns].b[loc_index]-1,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>                                 bco->n_bcoeffs, ucoefs, vcoefs, </div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>                                 wcoefs-1, covar, &chisq[ns], sinfo_fpol ) ;</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span> </div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>             <span class="comment">/* scale the found coefficients */</span></div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>             <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_bcoeffs ; i ++ )</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>             {</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>                 bco[ns].b[loc_index][i] /= pow( offset, i ) ;</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>             }</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span> </div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>             <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>             cpl_free (acoefsclean) ;</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>             sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>             sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>             sinfo_free_matrix( covar, 1<span class="comment">/*, bco->n_bcoeffs*/</span>, </div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>                                 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span> </div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>             <span class="comment">/* now calculate the smoothed acoefs for each column */</span></div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>             col_index = 0 ;</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2  ; i++ )</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>             {</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>                 acoefs[loc_index][i] = 0. ;</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>                 <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_bcoeffs ; n++ )</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>                 {</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>                     acoefs[loc_index][i] += bco[ns].b[loc_index][n] * </div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>                                         pow(col_index - offset, n) ;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>                 }</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>                 col_index++ ;</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>             }</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span> </div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>         }</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>     }</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span> </div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>     cpl_free(sub_col_index) ;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>     cpl_free(sub_acoefs) ;</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>     cpl_free(sub_dacoefs) ;</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span> </div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span> </div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>     cpl_free(edge) ;</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>     cpl_free(wcoefs) ;</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span> </div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span> }</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span> </div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span> </div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span> cpl_image * sinfo_new_wave_map_slit ( <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>                          <span class="keywordtype">int</span>      n_acoefs,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>                          <span class="keywordtype">int</span>      n_rows,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>                          <span class="keywordtype">int</span>      n_columns )</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>     cpl_image * newIm=NULL ;</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>     <span class="keywordtype">float</span> lambda=0 ;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>     <span class="keywordtype">float</span> offset=0 ;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>     <span class="keywordtype">int</span> row=0 ;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>     <span class="keywordtype">int</span> i=0 ;</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>     <span class="keywordtype">float</span> row_index=0 ;</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>     <span class="keywordflow">if</span> ( NULL == acoefs )</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>     {</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!"</span>) ;</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>     }</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span> </div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>     <span class="comment">/* allocate new image */</span></div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>     <span class="keywordflow">if</span> ( NULL == (newIm = cpl_image_new(n_columns , n_rows,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>     {</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate new image!"</span>) ;</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>     }</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>     podata=cpl_image_get_data_float(newIm);</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span> </div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>     <span class="comment">/* make the parabola symmetric to the image */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>     offset = (float)(n_rows - 1) / 2. ; </div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>     <span class="comment">/* go through the rows */</span></div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>     <span class="keywordflow">for</span> ( col = 0 ; col < n_columns ; col++ )</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>     {</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>         <span class="comment">/* go through the columns */</span></div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>         <span class="keywordflow">for</span> ( row = 0 ; row < n_rows ; row++ )</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>         {</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>             lambda = 0. ;</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>             row_index = (float)row - offset ;</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_acoefs ; i++ )</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>             {</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>                 lambda += acoefs[i][col] * pow(row_index, i) ;</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>             }</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>             podata[col+row*n_columns] = lambda ;</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>         }</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>     }</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>     <span class="keywordflow">return</span> newIm ;</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span> }</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span> </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span> </div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span> cpl_image * sinfo_new_wave_cal( cpl_image   * image,</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>                     FitParams ** par ,</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>                     <span class="keywordtype">float</span>     ** abuf,</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>                     <span class="keywordtype">int</span>          n_slitlets,</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>                     <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>                     <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>                     <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>                     <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>                     <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>                     <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>                     <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>                     <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>                     <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>                     <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>                     <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>                     <span class="keywordtype">float</span>        pixel_dist,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>                     <span class="keywordtype">float</span>        pixel_tolerance )</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span> </div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span> {</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>     <span class="keywordtype">int</span>          i=0, j=0, k=0 ;</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>     <span class="keywordtype">int</span>          n_fit=0 ;</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>     <span class="keywordtype">int</span>          n_reject=0 ;</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>     <span class="keywordtype">float</span>     *  acoefs=NULL ;</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>     <span class="keywordtype">float</span>     *  dacoefs=NULL ;</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>     <span class="keywordtype">float</span>     ** dabuf=NULL ;</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>     <span class="keywordtype">float</span>        chisq_poly=0 ;</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>     <span class="keywordtype">float</span>     *  chisq_cross=NULL ;</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>     <span class="keywordtype">int</span>          zeroind=0 ;</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>     <span class="keywordtype">int</span>          crossInd=0 ;</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>     Bcoeffs   *  bco=NULL ;</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>     cpl_image  *  wavemap=NULL ;</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span> </div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span> </div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>     <span class="keywordflow">if</span> (  NULL == image )</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>     {</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no image given"</span>) ;</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>     }</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>     check_nomsg(ilx=cpl_image_get_size_x(image));</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>     check_nomsg(ily=cpl_image_get_size_y(image));</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>     check_nomsg(pidata=cpl_image_get_data_float(image));</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span> </div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>     {</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given"</span>) ;</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>     }</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>     <span class="keywordflow">if</span> ( abuf == NULL )</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>     {</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no buffer for fit coefficients given"</span>) ;</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>     }</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>     <span class="keywordflow">if</span> ( n_slitlets <= 0 )</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>     {</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible number of slitlets given"</span>) ;</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>     }</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>     <span class="keywordflow">if</span> ( row_clean == NULL )</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>     {</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row_clean array given"</span>) ;</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>     }</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>     <span class="keywordflow">if</span> ( wavelength_clean == NULL )</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>     {</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength_clean array given"</span>) ;</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>     }</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>     {</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible dispersion given"</span>) ;</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>     }</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span> </div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ily/2 )</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>     {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible half width of the fitting box given"</span>) ;</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>     }</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>     <span class="keywordflow">if</span> ( minAmplitude < 1. )</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>     {</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible minimal amplitude"</span>) ;</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>     }</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span> </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>     <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )</div>
+<div class="line"><a name="l00813"></a><span class="lineno">  813</span>     {</div>
+<div class="line"><a name="l00814"></a><span class="lineno">  814</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible max_residual given"</span>) ;</div>
+<div class="line"><a name="l00815"></a><span class="lineno">  815</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00816"></a><span class="lineno">  816</span>     }</div>
+<div class="line"><a name="l00817"></a><span class="lineno">  817</span>     <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )</div>
+<div class="line"><a name="l00818"></a><span class="lineno">  818</span>     {</div>
+<div class="line"><a name="l00819"></a><span class="lineno">  819</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible fwhm given"</span>) ;</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00821"></a><span class="lineno">  821</span>     }</div>
+<div class="line"><a name="l00822"></a><span class="lineno">  822</span> </div>
+<div class="line"><a name="l00823"></a><span class="lineno">  823</span>     <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )</div>
+<div class="line"><a name="l00824"></a><span class="lineno">  824</span>     {</div>
+<div class="line"><a name="l00825"></a><span class="lineno">  825</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_a_fitcoefs given"</span>) ;</div>
+<div class="line"><a name="l00826"></a><span class="lineno">  826</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00827"></a><span class="lineno">  827</span>     }</div>
+<div class="line"><a name="l00828"></a><span class="lineno">  828</span> </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>     <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )</div>
+<div class="line"><a name="l00830"></a><span class="lineno">  830</span>     {</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"unrealistic n_b_fitcoefs given"</span>) ;</div>
+<div class="line"><a name="l00832"></a><span class="lineno">  832</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00833"></a><span class="lineno">  833</span>     }</div>
+<div class="line"><a name="l00834"></a><span class="lineno">  834</span>     <span class="keywordflow">if</span> ( sigmaFactor <= 0. )</div>
+<div class="line"><a name="l00835"></a><span class="lineno">  835</span>     {</div>
+<div class="line"><a name="l00836"></a><span class="lineno">  836</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"impossible sigmaFactor given"</span>) ;</div>
+<div class="line"><a name="l00837"></a><span class="lineno">  837</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00838"></a><span class="lineno">  838</span>     }</div>
+<div class="line"><a name="l00839"></a><span class="lineno">  839</span> </div>
+<div class="line"><a name="l00840"></a><span class="lineno">  840</span>     <span class="comment">/* initialize the variables */</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno">  841</span>     n_reject = 0 ;</div>
+<div class="line"><a name="l00842"></a><span class="lineno">  842</span>     n_fit = 0 ;</div>
+<div class="line"><a name="l00843"></a><span class="lineno">  843</span> </div>
+<div class="line"><a name="l00844"></a><span class="lineno">  844</span> </div>
+<div class="line"><a name="l00845"></a><span class="lineno">  845</span>     <span class="comment">/* fit each found line by using a Gaussian function and determine </span></div>
+<div class="line"><a name="l00846"></a><span class="lineno">  846</span> <span class="comment">       the exact position */</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno">  847</span>     <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, n_found_lines, </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>                                      row_clean, wavelength_clean,</div>
+<div class="line"><a name="l00849"></a><span class="lineno">  849</span>                                      halfWidth, minAmplitude )) )</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>     {</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, error code of "</span></div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>                         <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;</div>
+<div class="line"><a name="l00853"></a><span class="lineno">  853</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00854"></a><span class="lineno">  854</span>     }</div>
+<div class="line"><a name="l00855"></a><span class="lineno">  855</span> </div>
+<div class="line"><a name="l00856"></a><span class="lineno">  856</span>     <span class="comment">/* first check for faked lines like bad pixels */</span></div>
+<div class="line"><a name="l00857"></a><span class="lineno">  857</span>     <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, dispersion, </div>
+<div class="line"><a name="l00858"></a><span class="lineno">  858</span>                                                wavelength_clean, </div>
+<div class="line"><a name="l00859"></a><span class="lineno">  859</span>                                          row_clean, n_found_lines,</div>
+<div class="line"><a name="l00860"></a><span class="lineno">  860</span>                                          ilx, pixel_tolerance) )</div>
+<div class="line"><a name="l00861"></a><span class="lineno">  861</span>     {</div>
+<div class="line"><a name="l00862"></a><span class="lineno">  862</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot fit the lines, error code of "</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno">  863</span>                         <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;</div>
+<div class="line"><a name="l00864"></a><span class="lineno">  864</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00865"></a><span class="lineno">  865</span>     }</div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span> </div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>     <span class="keywordflow">if</span> (NULL == (acoefs = (<span class="keywordtype">float</span>*) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>         NULL == (dacoefs = (<span class="keywordtype">float</span>*) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||</div>
+<div class="line"><a name="l00870"></a><span class="lineno">  870</span>         NULL == (dabuf = (<span class="keywordtype">float</span>**) cpl_calloc(n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||</div>
+<div class="line"><a name="l00871"></a><span class="lineno">  871</span>         NULL == (chisq_cross = (<span class="keywordtype">float</span>*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))))</div>
+<div class="line"><a name="l00872"></a><span class="lineno">  872</span>     {</div>
+<div class="line"><a name="l00873"></a><span class="lineno">  873</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l00874"></a><span class="lineno">  874</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00875"></a><span class="lineno">  875</span>     }</div>
+<div class="line"><a name="l00876"></a><span class="lineno">  876</span>     <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l00877"></a><span class="lineno">  877</span>     {</div>
+<div class="line"><a name="l00878"></a><span class="lineno">  878</span>         <span class="keywordflow">if</span> (  NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(ilx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l00879"></a><span class="lineno">  879</span>         {</div>
+<div class="line"><a name="l00880"></a><span class="lineno">  880</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot allocate memory"</span>) ;</div>
+<div class="line"><a name="l00881"></a><span class="lineno">  881</span>             sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>             sinfo_free_float ( &dacoefs ) ;</div>
+<div class="line"><a name="l00883"></a><span class="lineno">  883</span>             sinfo_free_float ( &chisq_cross ) ;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>             sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00885"></a><span class="lineno">  885</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00886"></a><span class="lineno">  886</span>         }</div>
+<div class="line"><a name="l00887"></a><span class="lineno">  887</span>     }</div>
+<div class="line"><a name="l00888"></a><span class="lineno">  888</span> </div>
+<div class="line"><a name="l00889"></a><span class="lineno">  889</span> </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>     <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno">  891</span>     k = 0 ;</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>     <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>     {</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>         zeroind = 0 ;</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>         <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, </div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>                                                          n_found_lines[i], </div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>                                                    ily, dispersion,</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>                                                    max_residual, acoefs, </div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>                                                    dacoefs, &n_reject, </div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>                                                    n_a_fitcoefs)) )</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>         {</div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span> <span class="comment">            sinfo_msg_warning ("error in sinfo_polyfit in column: %d\n", i) ;</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>             <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>             {</div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>                 acoefs[j] = ZERO ;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>                 dacoefs[j] = ZERO ;</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>             }</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>         }</div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span> </div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>         {</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span> </div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>             <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>                  dacoefs[j] == 0. || isnan(acoefs[j]) )</div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>             {</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>                 zeroind = 1 ;</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>             }</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>         }</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>         {</div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>             <span class="keywordflow">if</span> ( zeroind == 0 )</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>             {</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>                 abuf[j][i]  = acoefs[j] ;</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>                 dabuf[j][i] = dacoefs[j] ;</div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>             }</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>             {</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>                 abuf[j][i]  = ZERO ;</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>                 dabuf[j][i] = ZERO ;</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>             }</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>         }</div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>     }</div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>  </div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>     <span class="comment">/* allocate memory for the fitting coefficients */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>     <span class="keywordflow">if</span> ( NULL == ( bco = sinfo_new_b_coeffs( n_slitlets, </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>                                              n_a_fitcoefs, n_b_fitcoefs)) )</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>     {</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate memory for the bcoeffs"</span>) ;</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>         sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>         sinfo_free_float (&dacoefs ) ;</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>         sinfo_free_float (&chisq_cross ) ;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>     }</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span> </div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>     <span class="comment">/* fit each acoefs across the slitlets to smooth the result */</span></div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>     <span class="keywordflow">if</span> ( -1 == ( crossInd = sinfo_new_coeffs_cross_slit_fit( ilx, </div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>                                                 abuf, </div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>                                                 dabuf,</div>
+<div class="line"><a name="l00952"></a><span class="lineno">  952</span>                                                 bco, </div>
+<div class="line"><a name="l00953"></a><span class="lineno">  953</span>                                                 sigmaFactor, </div>
+<div class="line"><a name="l00954"></a><span class="lineno">  954</span>                                                 dispersion, </div>
+<div class="line"><a name="l00955"></a><span class="lineno">  955</span>                                                 pixel_dist, </div>
+<div class="line"><a name="l00956"></a><span class="lineno">  956</span>                                                 chisq_cross )) )</div>
+<div class="line"><a name="l00957"></a><span class="lineno">  957</span>     {</div>
+<div class="line"><a name="l00958"></a><span class="lineno">  958</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot carry out the fitting of "</span></div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>                          <span class="stringliteral">"coefficients across the columns"</span>) ;</div>
+<div class="line"><a name="l00960"></a><span class="lineno">  960</span>         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00961"></a><span class="lineno">  961</span>         sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00962"></a><span class="lineno">  962</span>         sinfo_free_float (&dacoefs ) ;</div>
+<div class="line"><a name="l00963"></a><span class="lineno">  963</span>         sinfo_free_float (&chisq_cross ) ;</div>
+<div class="line"><a name="l00964"></a><span class="lineno">  964</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00965"></a><span class="lineno">  965</span>     }</div>
+<div class="line"><a name="l00966"></a><span class="lineno">  966</span>   </div>
+<div class="line"><a name="l00967"></a><span class="lineno">  967</span> </div>
+<div class="line"><a name="l00968"></a><span class="lineno">  968</span>     <span class="keywordflow">if</span> ( NULL == (wavemap = sinfo_new_wave_map_slit (abuf, n_a_fitcoefs, </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>                                                      ily, ilx)) )</div>
+<div class="line"><a name="l00970"></a><span class="lineno">  970</span>     {</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot carry out wavemap creation"</span>) ;</div>
+<div class="line"><a name="l00972"></a><span class="lineno">  972</span>         sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00973"></a><span class="lineno">  973</span>         sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00974"></a><span class="lineno">  974</span>         sinfo_free_float (&dacoefs ) ;</div>
+<div class="line"><a name="l00975"></a><span class="lineno">  975</span>         sinfo_free_float (&chisq_cross ) ;</div>
+<div class="line"><a name="l00976"></a><span class="lineno">  976</span>         sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l00977"></a><span class="lineno">  977</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>     }</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span> </div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>     <span class="comment">/* free all allocated memory */</span></div>
+<div class="line"><a name="l00981"></a><span class="lineno">  981</span>     sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00982"></a><span class="lineno">  982</span>     sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>     sinfo_free_float (&dacoefs ) ;</div>
+<div class="line"><a name="l00984"></a><span class="lineno">  984</span>     sinfo_free_float (&chisq_cross ) ;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>     sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l00986"></a><span class="lineno">  986</span> </div>
+<div class="line"><a name="l00987"></a><span class="lineno">  987</span>     <span class="keywordflow">return</span> wavemap ;</div>
+<div class="line"><a name="l00988"></a><span class="lineno">  988</span>  cleanup:</div>
+<div class="line"><a name="l00989"></a><span class="lineno">  989</span>     sinfo_free_float (&acoefs ) ;</div>
+<div class="line"><a name="l00990"></a><span class="lineno">  990</span>     sinfo_free_float ( &dacoefs ) ;</div>
+<div class="line"><a name="l00991"></a><span class="lineno">  991</span>     sinfo_free_float ( &chisq_cross ) ;</div>
+<div class="line"><a name="l00992"></a><span class="lineno">  992</span>     sinfo_free_float_array(&dabuf,n_a_fitcoefs) ;</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>     sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>     <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span> }</div>
+<div class="line"><a name="l00996"></a><span class="lineno">  996</span> </div>
+<div class="line"><a name="l00997"></a><span class="lineno">  997</span> </div>
+<div class="line"><a name="l00998"></a><span class="lineno">  998</span> </div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordtype">int</span> sinfo_new_check_for_fake_lines ( FitParams ** par,</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>                         <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>             <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>             <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>             <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>             <span class="keywordtype">int</span>          n_columns,</div>
+<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>             <span class="keywordtype">float</span>        pixel_tolerance )</div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> {</div>
+<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>     <span class="keywordtype">int</span> i,  k ;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>     <span class="keywordtype">int</span> col ;</div>
+<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>     <span class="keywordtype">int</span> found ;</div>
+<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>     <span class="keywordtype">float</span> row ;</div>
+<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>     <span class="keywordtype">float</span> * beginWave ;</div>
+<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>     <span class="keywordtype">float</span> firstWave ;</div>
+<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div>
+<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>     {</div>
+<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no fit parameter data structure given"</span>) ;</div>
+<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>     }</div>
+<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>     {</div>
+<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"dispersion zero given!"</span>) ;</div>
+<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>     }</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>     <span class="keywordflow">if</span> ( wavelength_clean == NULL )</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>     {</div>
+<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no wavelength array given!"</span>) ;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>     }</div>
+<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>     <span class="keywordflow">if</span> ( row_clean == NULL )</div>
+<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>     {</div>
+<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no row array given!"</span>) ;</div>
+<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>     }</div>
+<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>     <span class="keywordflow">if</span> ( n_found_lines == NULL )</div>
+<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>     {</div>
+<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"no number of lines given!"</span>) ;</div>
+<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>     }</div>
+<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>     <span class="keywordflow">if</span> ( n_columns < 200 )</div>
+<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>     {</div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong number of columns given!"</span>) ;</div>
+<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>     }</div>
+<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span> </div>
+<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>     <span class="comment">/* first determine the estimated beginning wavelength of the first row */</span></div>
+<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>     <span class="keywordflow">for</span> ( col = 0 ; col < n_columns ; col++ )</div>
+<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>     {</div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>         <span class="keywordflow">if</span> ( n_found_lines[col] == 0 )</div>
+<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>         {</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>         continue ;</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>         } </div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>         <span class="keywordflow">if</span> ( NULL == (beginWave = (<span class="keywordtype">float</span>*) cpl_calloc( n_found_lines[col], </div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>                                                        <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) ) ) )</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>         {</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>     }</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>     <span class="keywordflow">for</span> ( k = 0 ; k < n_found_lines[col] ; k++ ) </div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>     {</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>         beginWave[k] = wavelength_clean[col][k] - </div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>                            (float)row_clean[col][k] * dispersion ;</div>
+<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>         }</div>
+<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>     <span class="comment">/* determine the clean mean of the estimated </span></div>
+<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> <span class="comment">           beginning wavelengths of one column */</span></div>
+<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>     <span class="keywordflow">if</span> ( FLT_MAX == (firstWave = sinfo_new_clean_mean (beginWave, </div>
+<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>                                                            n_found_lines[col], </div>
+<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>                                                            10., 10.) ) )</div>
+<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>     {</div>
+<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"clean mean did not work!"</span>) ;</div>
+<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>             <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>     }</div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div>
+<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>         cpl_free (beginWave) ;</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>         <span class="comment">/* go through the lines in that column and select the </span></div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> <span class="comment">           correct FitParam structure */</span></div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>         <span class="keywordflow">for</span> ( k = 0 ; k < n_found_lines[col] ; k++ ) </div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>         {    </div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>         <span class="comment">/* compute the estimated line position */</span></div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>         row = ( wavelength_clean[col][k] - firstWave ) / dispersion ;</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> </div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>             <span class="comment">/* go through all fit parameters and find the corresponding one */</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>         found = -1 ;</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>             <span class="keywordflow">for</span> ( i = 0 ; i < (par[0] -> n_params) ; i ++ )</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>             {    </div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>             <span class="comment">/* find the given column and go through the </span></div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span> <span class="comment">                   lines in that column */</span></div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>         <span class="keywordflow">if</span> ( (par[i] -> column == col) && (par[i] -> line == k) && </div>
+<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>              (par[i] -> wavelength == wavelength_clean[col][k]) )</div>
+<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>         {</div>
+<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>                 found = i ;</div>
+<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>             break ;</div>
+<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>                 }</div>
+<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>             }</div>
+<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>         <span class="keywordflow">if</span> ( found != -1 )</div>
+<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>         {</div>
+<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>             <span class="comment">/* set fit params to zero where the fitted row </span></div>
+<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> <span class="comment">                   position and the estimated </span></div>
+<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> <span class="comment">            row positions are outside the tolerance */</span></div>
+<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>                 <span class="keywordflow">if</span> ( fabs(row - par[found]->fit_par[2]) > pixel_tolerance ) </div>
+<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>             {</div>
+<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"found bad line in col: "</span></div>
+<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>                                       <span class="stringliteral">"%d line: %d in row: %f difference: %f"</span>, </div>
+<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>                                       col, k, par[found]->fit_par[2],</div>
+<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>                                       row - par[found]->fit_par[2])  ;</div>
+<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>                 par[found]->fit_par[2] = 0. ;</div>
+<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>                 }</div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>             }</div>
+<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>         {</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"fit parameter of col %d and line "</span></div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>                                   <span class="stringliteral">"no %d not found!\n"</span>, col, k ) ;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>         }</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>         }</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>     }</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span> }</div>
+<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> cpl_image * </div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> sinfo_new_create_shifted_slit_wavemap ( cpl_image * lineIm,</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>                               <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>                           <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>                                       <span class="keywordtype">int</span>      magFactor )</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> {</div>
+<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>     cpl_image * wavemap ;</div>
+<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>     <span class="keywordtype">float</span>* emline=NULL ;</div>
+<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>     <span class="keywordtype">float</span>* wave=NULL ;</div>
+<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>     <span class="keywordtype">double</span>* a=NULL ;</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>     <span class="keywordtype">float</span>* par=NULL ;</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>     <span class="keywordtype">float</span>* derv_par=NULL ;</div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>     <span class="keywordtype">double</span>* z=NULL ;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>     <span class="keywordtype">double</span>  * result ;</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>     <span class="keywordtype">float</span> * filter_spec ;</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>     <span class="keywordtype">float</span> centreval ;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>     <span class="keywordtype">float</span> centrepix ;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>     <span class="keywordtype">float</span> cenpos, cenpix ;</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>     <span class="keywordtype">float</span> pixvalue ;</div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>     <span class="keywordtype">float</span> wavelag ;</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>     <span class="keywordtype">float</span> angst ;</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>     <span class="keywordtype">float</span> a_initial ;</div>
+<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>     <span class="keywordtype">int</span>        numpar, its ;</div>
+<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>     <span class="keywordtype">int</span>        * mpar ;</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>     <span class="keywordtype">float</span>      tol, lab ;</div>
+<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>     <span class="keywordtype">float</span>      * xdat, * wdat ;</div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>     Vector     * peak;</div>
+<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>     <span class="keywordtype">int</span>   row , col ;</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m*/</span> ;</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>     <span class="keywordtype">int</span>   sign, found, line, width ;</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;</div>
+<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>     gsl_poly_complex_workspace * w ;</div>
+<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>     <span class="keywordtype">double</span> xcorr_max ;</div>
+<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>     <span class="keywordtype">int</span> delta ;</div>
+<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> </div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>     <span class="keywordflow">if</span> ( lineIm == NULL )</div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>     {</div>
+<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>     }</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>     ilx=cpl_image_get_size_x(lineIm);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>     ily=cpl_image_get_size_y(lineIm);</div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>     pidata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> </div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>     <span class="keywordflow">if</span> ( coeffs == NULL )</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>     {</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no coefficient sinfo_matrix given!"</span>) ;</div>
+<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>     }</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )</div>
+<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>     {</div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"wrong number of polynomial coefficients given!"</span>) ;</div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>     }</div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )</div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>     {</div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>     }</div>
+<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>     <span class="keywordflow">if</span> ( n_lines < 1 )</div>
+<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>     {</div>
+<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no input image given!"</span>) ;</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>     }</div>
+<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> </div>
+<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>     <span class="comment">/* find out if Angstroem or microns are used */</span></div>
+<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )</div>
+<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>     {</div>
+<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>         <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>         angst = 10000. ;</div>
+<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>     }</div>
+<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )</div>
+<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>     {</div>
+<div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>         <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>         angst = 1000. ;</div>
+<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>     }</div>
+<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>     {</div>
+<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>         <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>         angst = 1. ;</div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>     }</div>
+<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> </div>
+<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>     {</div>
+<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>     }</div>
+<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>     olx=cpl_image_get_size_x(wavemap);</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>     oly=cpl_image_get_size_y(wavemap);</div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>     podata=cpl_image_get_data_float(wavemap);</div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div>
+<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>     var = (magFactor-1)*(magFactor-1) ;</div>
+<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> </div>
+<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span> </div>
+<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  </div>
+<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>     par=cpl_calloc(MAXPAR,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>     derv_par=cpl_calloc(MAXPAR,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span> </div>
+<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span> </div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>    </div>
+<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>     <span class="comment">/* first store each spectrum in a buffer */</span></div>
+<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>     {</div>
+<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>         <span class="comment">/* initialize the emline array for each column */</span></div>
+<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )</div>
+<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>         {</div>
+<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>             emline[i] = 0. ;</div>
+<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>         }</div>
+<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>         <span class="comment">/* determine the coefficients by using the given bcoefs */</span></div>
+<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>         {</div>
+<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>             <span class="comment">/* initialize coefficients and solution */</span></div>
+<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)</div>
+<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>             {</div>
+<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>                 z[2*i] = 0. ;</div>
+<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>                 z[2*i+1] = 0. ;</div>
+<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>             }</div>
+<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>             a[i] = coeffs[i][col] ;</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>         }</div>
+<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>          </div>
+<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>         a_initial = coeffs[0][col] ;</div>
+<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>         <span class="comment">/* go through the lines and generate an artificial spectrum */</span></div>
+<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>         {</div>
+<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>             <span class="comment">/* go from Angstroem to micron */</span></div>
+<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>             wave[line] = wavelength[line]/angst ;</div>
+<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div>
+<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>             <span class="comment">/* -----------------------------------------------------------</span></div>
+<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> <span class="comment">             * solve the polynomial for the exact offset of the line that means</span></div>
+<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span></div>
+<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>             a[0] = a_initial - wave[line] ;</div>
+<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> </div>
+<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>             <span class="keywordflow">if</span>(NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) </div>
+<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>             {</div>
+<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate complex workspace!"</span>) ;</div>
+<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>             }</div>
+<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) </div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>             {</div>
+<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;</div>
+<div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>             }</div>
+<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>             sinfo_gsl_poly_complex_workspace_free(w) ;           </div>
+<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> </div>
+<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>             j = 0 ;</div>
+<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>             found = -1 ;</div>
+<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )</div>
+<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>             {</div>
+<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>                 <span class="comment">/* test for appropriate solution */</span></div>
+<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&</div>
+<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )</div>
+<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>                 {</div>
+<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>                     found = 2*i ;</div>
+<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>                     j ++ ;</div>
+<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>                 }</div>
+<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>                 {</div>
+<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>                     continue ;</div>
+<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>                 }</div>
+<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>             }</div>
+<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>             <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>             {</div>
+<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found for line %d in "</span></div>
+<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>                                   <span class="stringliteral">"column %d"</span>, line, col) ;</div>
+<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>                 continue ;</div>
+<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>             }</div>
+<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )</div>
+<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>             {</div>
+<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>                 cenpos = z[found] + (float) ily /2. ;</div>
+<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>             }</div>
+<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>             {</div>
+<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found for "</span></div>
+<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>                                   <span class="stringliteral">"line %d in column %d"</span>, line, col) ;</div>
+<div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>                 continue ;</div>
+<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>             }</div>
+<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> </div>
+<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">             * magnify image by the given factor add an additional offset</span></div>
+<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>             cenpix = cenpos ;</div>
+<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> </div>
+<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>             <span class="comment">/* determine max and min pixel limits over </span></div>
+<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span> <span class="comment">               which line should be convolved */</span></div>
+<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? </div>
+<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>                     sinfo_new_nint(cenpix) - (var-1) : 0 ;</div>
+<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?</div>
+<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>                     sinfo_new_nint(cenpix) + (var-1) : ily ;</div>
+<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> </div>
+<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>             <span class="comment">/* convolve neon lines with Gaussian function */</span></div>
+<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )</div>
+<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>             {</div>
+<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>                 emline[j] += intensity[line] * </div>
+<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>                      exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;</div>
+<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>             }</div>
+<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>         }</div>
+<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div>
+<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>         <span class="comment">/*-------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="comment">         * for each column, map the image data points onto an magFactor times </span></div>
+<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> <span class="comment">           bigger element grid for FFT in the cross sinfo_correlation, first </span></div>
+<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> <span class="comment">           initialize the two helping arrays for each new column.</span></div>
+<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )</div>
+<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>         {</div>
+<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>             spec[k] = 0. ;</div>
+<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>         }</div>
+<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> </div>
+<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>         <span class="comment">/* now take the image data points of the column and put </span></div>
+<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span> <span class="comment">           them into the spec array */</span></div>
+<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span></div>
+<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>         {</div>
+<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>             <span class="comment">/* set bad pixels or negative values to zero */</span></div>
+<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&</div>
+<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>                 (pidata[col + row*ilx] > 0.))</div>
+<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>             {</div>
+<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>                 spec[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>             }</div>
+<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>             {</div>
+<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>                 spec[row] = 0. ;</div>
+<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>             }</div>
+<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>         }</div>
+<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>         <span class="comment">/* convolve the spectrum by Gaussian */</span></div>
+<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>         filter_spec = sinfo_function1d_filter_lowpass(spec, ily, </div>
+<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>                                                       LOW_PASS_GAUSSIAN, </div>
+<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>                                                       magFactor) ; </div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div>
+<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>         <span class="comment">/* now call the cross sinfo_correlation routine */</span></div>
+<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,</div>
+<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>                           ily/2, &delta, &maxlag, &xcorr_max) ;</div>
+<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> </div>
+<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>         <span class="keywordflow">if</span> ( xcorr_max <= 0. )</div>
+<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>         {</div>
+<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross correlation sum , "</span></div>
+<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>                               <span class="stringliteral">"col %d set to ZERO \n"</span>, col) ;</div>
+<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>             {</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>                 podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>             }</div>
+<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>             continue ;</div>
+<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>         }</div>
+<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div>
+<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>        <span class="comment">/* in this section, we fit the correlation function with a gauss, </span></div>
+<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span> <span class="comment">          and find its peak, thus getting subpixel-accuracy */</span></div>
+<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> </div>
+<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>         i = maxlag; j = i+1;</div>
+<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>         <span class="keywordflow">while</span> (result[j] < result[i])</div>
+<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>         {</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>             i++; j++;</div>
+<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>         }</div>
+<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>         i = maxlag; k = i-1;</div>
+<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>         <span class="keywordflow">while</span> (result[k] < result[i])</div>
+<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>         {</div>
+<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>             i--; k--;</div>
+<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>         }</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>         width = j-k+1;</div>
+<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )</div>
+<div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>         {</div>
+<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>         }</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span> </div>
+<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> </div>
+<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span> </div>
+<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span></div>
+<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>         <span class="comment">/* go through the chosen column */</span></div>
+<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div>
+<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )</div>
+<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>         {</div>
+<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>             peak -> data[i] = result[k+i]/xcorr_max * 100. ;</div>
+<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>             xdat[i] = i;</div>
+<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>             wdat[i] = 1.0;</div>
+<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>         }</div>
+<div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> </div>
+<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>         xdim     = XDIM;</div>
+<div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>         ndat     = peak -> n_elements ;</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>         tol      = TOL ;</div>
+<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>         lab      = LAB ;</div>
+<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>         its      = ITS ;</div>
+<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>         par[1] = width/2.0 ;</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>         par[2] = (float) (maxlag - k) ;</div>
+<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;</div>
+<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> </div>
+<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )</div>
+<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>         {</div>
+<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>             derv_par[i] = 0.0 ;</div>
+<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>         }</div>
+<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> </div>
+<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>                                                peak -> data, wdat, </div>
+<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>                                                &ndat, par, derv_par, mpar,</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>                                                &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>         {</div>
+<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"sinfo_new_lsqfit_c: least squares fit failed "</span></div>
+<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>                                <span class="stringliteral">"in col: %d, error no.: %d"</span>, col, iters) ;</div>
+<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>             sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>             continue ;</div>
+<div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>         }</div>
+<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span> </div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>         sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>         cpl_free (xdat) ;</div>
+<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>         cpl_free (wdat) ;</div>
+<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>         cpl_free (mpar) ;</div>
+<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>         sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>         cpl_free(result) ;</div>
+<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span> </div>
+<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>         wavelag =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;</div>
+<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span> </div>
+<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )</div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>         {</div>
+<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wavelag very big , col %d set to ZERO"</span>, col) ;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>             {</div>
+<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>                 podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>             }</div>
+<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>             continue ;</div>
+<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>         }</div>
+<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div>
+<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span> <span class="comment">         * determine new zero order coefficient centreval, of which the </span></div>
+<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span> <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span></div>
+<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span> <span class="comment">         * wavelag with the same higher order coefficients and set the new </span></div>
+<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span> <span class="comment">         * zero order coefficient to</span></div>
+<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span> <span class="comment">         * get both sides of the equation approximately equal.</span></div>
+<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>         centreval = a_initial ;</div>
+<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>         <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>         {</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>             <span class="keywordflow">if</span> ( i%2 == 0 ) </div>
+<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>             {</div>
+<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>                 sign = -1 ;</div>
+<div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>             }</div>
+<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>             {</div>
+<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>                 sign = 1 ;</div>
+<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>             }</div>
+<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>             centreval += (float)sign * coeffs[i][col]*pow(wavelag, i) ;</div>
+<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>         }</div>
+<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> </div>
+<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>         <span class="comment">/* prepare to write out wavelength as pixel values */</span></div>
+<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>         {</div>
+<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;</div>
+<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>             pixvalue = 0. ;</div>
+<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>             {</div>
+<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;</div>
+<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>             }</div>
+<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>             podata[col+row*olx] = centreval + pixvalue ;</div>
+<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>         }</div>
+<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>     }</div>
+<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div>
+<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div>
+<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>     cpl_free(emline) ;</div>
+<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>     cpl_free(wave) ;</div>
+<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>     cpl_free(par) ;</div>
+<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>     cpl_free(derv_par) ;</div>
+<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> </div>
+<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>     cpl_free(z) ;</div>
+<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> </div>
+<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div>
+<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> </div>
+<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>     <span class="keywordflow">return</span> wavemap ;</div>
+<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span> }</div>
+<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span> </div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> cpl_image * sinfo_new_create_shifted_slit_wavemap2 ( cpl_image * lineIm,</div>
+<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>                                       <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>                                       <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>                                       <span class="keywordtype">int</span>      magFactor,</div>
+<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>                                       <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>                                       <span class="keywordtype">float</span>    pixel_dist )</div>
+<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span> {</div>
+<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>     cpl_image * wavemap ;</div>
+<div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>     <span class="keywordtype">double</span> * result ;</div>
+<div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>     <span class="keywordtype">float</span> * filter_spec ;</div>
+<div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>     <span class="keywordtype">float</span> centreval ;</div>
+<div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>     <span class="keywordtype">float</span> centrepix ;</div>
+<div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>     <span class="keywordtype">float</span> cenpos, cenpix ;</div>
+<div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>     <span class="keywordtype">float</span> pixvalue ;</div>
+<div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>     <span class="keywordtype">float</span> wavelag ;</div>
+<div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>     <span class="comment">/*float maxres ;*/</span></div>
+<div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>     <span class="keywordtype">float</span> angst ;</div>
+<div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>     <span class="comment">/*float temp ;*/</span></div>
+<div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>     <span class="keywordtype">float</span> a_initial ;</div>
+<div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>     <span class="keywordtype">int</span>        numpar, its ;</div>
+<div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>     <span class="keywordtype">int</span>        * mpar ;</div>
+<div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>     <span class="keywordtype">float</span>      tol, lab ;</div>
+<div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>     <span class="keywordtype">float</span>      * xdat, * wdat ;</div>
+<div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>     Vector     * peak;</div>
+<div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>     <span class="keywordtype">int</span>   row , col ;</div>
+<div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m*/</span>, n ;</div>
+<div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>     <span class="keywordtype">int</span>   sign, found, line, width ;</div>
+<div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;</div>
+<div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>     <span class="keywordtype">float</span> offset2 ;</div>
+<div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>     <span class="keywordtype">float</span> threshold ;</div>
+<div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>     <span class="keywordtype">int</span> ed1, ed2 ;</div>
+<div class="line"><a name="l01626"></a><span class="lineno"> 1626</span> </div>
+<div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>     <span class="keywordtype">int</span> edge[N_SLITLETS] ;</div>
+<div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>     <span class="keywordtype">float</span> par[MAXPAR] ;</div>
+<div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>     <span class="keywordtype">float</span> derv_par[MAXPAR] ;</div>
+<div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div>
+<div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>     <span class="keywordtype">float</span>* emline=NULL ;</div>
+<div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>     <span class="keywordtype">float</span>* wave=NULL ;</div>
+<div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>     <span class="keywordtype">float</span>* a0=NULL ;</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>     <span class="keywordtype">float</span>* a0_clean=NULL ;</div>
+<div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> </div>
+<div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div>
+<div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>     <span class="keywordtype">float</span>* sub_col_index=NULL ;</div>
+<div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>     <span class="keywordtype">float</span>* sub_acoefs=NULL;</div>
+<div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>     <span class="keywordtype">float</span>* sub_dacoefs=NULL ;</div>
+<div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>     <span class="keywordtype">double</span>* z=NULL ;</div>
+<div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>     <span class="keywordtype">double</span>* a=NULL ;</div>
+<div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> </div>
+<div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>     <span class="keywordtype">float</span>** bcoef=NULL ;</div>
+<div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>     <span class="keywordtype">float</span>* wcoefs=NULL ;</div>
+<div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> </div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> </div>
+<div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>     <span class="keywordtype">int</span> ns, nc ;</div>
+<div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>     <span class="keywordtype">float</span> * acoefsclean ;</div>
+<div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>     <span class="keywordtype">float</span> col_index;</div>
+<div class="line"><a name="l01651"></a><span class="lineno"> 1651</span> </div>
+<div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>     <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;</div>
+<div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>     <span class="keywordtype">double</span> sum, sumq, mean ;</div>
+<div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>     <span class="keywordtype">double</span> sigma ;</div>
+<div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>     <span class="keywordtype">double</span> cliphi, cliplo ;</div>
+<div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>     <span class="keywordtype">float</span> chisq ;</div>
+<div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>     <span class="keywordtype">int</span> num, ndata ;</div>
+<div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>     gsl_poly_complex_workspace * w ;</div>
+<div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>     <span class="keywordtype">double</span> xcorr_max ;</div>
+<div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>     <span class="keywordtype">int</span> delta ;</div>
+<div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> </div>
+<div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div>
+<div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>     <span class="keywordflow">if</span> ( lineIm == NULL )</div>
+<div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>     {</div>
+<div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>     }</div>
+<div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> </div>
+<div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>     ilx=cpl_image_get_size_x(lineIm);</div>
+<div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>     ily=cpl_image_get_size_y(lineIm);</div>
+<div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>     pidata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l01678"></a><span class="lineno"> 1678</span> </div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>     <span class="keywordflow">if</span> ( coeffs == NULL )</div>
+<div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>     {</div>
+<div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;</div>
+<div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>     }</div>
+<div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )</div>
+<div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>     {</div>
+<div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;</div>
+<div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>     }</div>
+<div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )</div>
+<div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>     {</div>
+<div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>     }</div>
+<div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>     <span class="keywordflow">if</span> ( n_lines < 1 || magFactor < 1 )</div>
+<div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>     {</div>
+<div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>     }</div>
+<div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>     var    = (magFactor - 1)*(magFactor - 1) ;</div>
+<div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>     <span class="comment">/* find out if Angstroem or microns are used */</span></div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )</div>
+<div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>     {</div>
+<div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>         <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>         angst = 10000. ;</div>
+<div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>     }</div>
+<div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )</div>
+<div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>     {</div>
+<div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>         <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>         angst = 1000. ;</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>     }</div>
+<div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>     {</div>
+<div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>         <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>         angst = 1. ;</div>
+<div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>     }</div>
+<div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div>
+<div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>     bcoef=sinfo_new_2Dfloatarray(N_SLITLETS,n_fitcoeffs) ;</div>
+<div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>     wcoefs=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div>
+<div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>     a0=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>     a0_clean=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> </div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> </div>
+<div class="line"><a name="l01727"></a><span class="lineno"> 1727</span> </div>
+<div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>     sub_col_index=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>     sub_acoefs=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>     sub_dacoefs=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l01731"></a><span class="lineno"> 1731</span> </div>
+<div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l01734"></a><span class="lineno"> 1734</span> </div>
+<div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>     <span class="comment">/* find the slitlet edges from the a0 coefficient */</span></div>
+<div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>     n = 0 ;</div>
+<div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>     threshold = pixel_dist * fabs(dispersion) ;</div>
+<div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>     <span class="keywordflow">for</span> ( i = PIXEL ; i < ilx - PIXEL ; )</div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>     {</div>
+<div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>         <span class="keywordflow">if</span> (fabs(coeffs[0][i+1] - coeffs[0][i]) >= threshold )</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>         {</div>
+<div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>             edge[n] = i+1 ;</div>
+<div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>             n++ ;</div>
+<div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>             i += PIXEL ;</div>
+<div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>         }</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>         i++ ;</div>
+<div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>     }</div>
+<div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div>
+<div class="line"><a name="l01749"></a><span class="lineno"> 1749</span> </div>
+<div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily, CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>     {</div>
+<div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;</div>
+<div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>     }</div>
+<div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>     olx=cpl_image_get_size_x(wavemap);</div>
+<div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>     oly=cpl_image_get_size_y(wavemap);</div>
+<div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>     podata=cpl_image_get_data_float(wavemap);</div>
+<div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> </div>
+<div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>     <span class="comment">/* first store each spectrum in a buffer */</span></div>
+<div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>     {</div>
+<div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>         <span class="comment">/* initialize the emline array for each column */</span></div>
+<div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )</div>
+<div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>         {</div>
+<div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>             emline[i] = 0. ;</div>
+<div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>         }</div>
+<div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>         <span class="comment">/* determine the coefficients by using the given bcoefs */</span></div>
+<div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>         {</div>
+<div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>             <span class="comment">/* initialize coefficients and solution */</span></div>
+<div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)</div>
+<div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>             {</div>
+<div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>                 z[2*i] = 0. ;</div>
+<div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>                 z[2*i+1] = 0. ;</div>
+<div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>             }</div>
+<div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>             a[i] = coeffs[i][col] ;</div>
+<div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>         }</div>
+<div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>          </div>
+<div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>         a_initial = coeffs[0][col] ;</div>
+<div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>         <span class="comment">/* go through the lines and generate an artificial spectrum */</span></div>
+<div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>         {</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>             <span class="comment">/* go from Angstroem to micron */</span></div>
+<div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>             wave[line] = wavelength[line]/angst ;</div>
+<div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> </div>
+<div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>             <span class="comment">/* ------------------------------------------------------------</span></div>
+<div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">             * solve the polynomial for the exact offset of the line that means</span></div>
+<div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span></div>
+<div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>             a[0] = a_initial - wave[line] ;</div>
+<div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> </div>
+<div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) </div>
+<div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>             {</div>
+<div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;</div>
+<div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>             }</div>
+<div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) </div>
+<div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>             {</div>
+<div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_gsl_poly_complex_solve did not work!"</span>) ;</div>
+<div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>             }</div>
+<div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>             sinfo_gsl_poly_complex_workspace_free(w) ;           </div>
+<div class="line"><a name="l01806"></a><span class="lineno"> 1806</span> </div>
+<div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>             j = 0 ;</div>
+<div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>             found = -1 ;</div>
+<div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )</div>
+<div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>             {</div>
+<div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>                 <span class="comment">/* test for appropriate solution */</span></div>
+<div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&</div>
+<div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>                 {</div>
+<div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>                     found = 2*i ;</div>
+<div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>                     j ++ ;</div>
+<div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>                 }</div>
+<div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>                 {</div>
+<div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>                     continue ;</div>
+<div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>                 }</div>
+<div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>             }</div>
+<div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>             <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>             {</div>
+<div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" no offset solution found for "</span></div>
+<div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>                                   <span class="stringliteral">"line %d in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>                 continue ;</div>
+<div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>             }</div>
+<div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )</div>
+<div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>             {</div>
+<div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>                 cenpos = z[found] + (float) ily/2. ;</div>
+<div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>             }</div>
+<div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>             {</div>
+<div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" two or more offset solutions found "</span></div>
+<div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>                                   <span class="stringliteral">"for line %d in column %d"</span>, line, col) ;</div>
+<div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>                 continue ;</div>
+<div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>             }</div>
+<div class="line"><a name="l01839"></a><span class="lineno"> 1839</span> </div>
+<div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>             <span class="comment">/*----------------------------------------------------------------</span></div>
+<div class="line"><a name="l01841"></a><span class="lineno"> 1841</span> <span class="comment">             * magnify image by the given factor add an additional offset</span></div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>             cenpix = cenpos ;</div>
+<div class="line"><a name="l01844"></a><span class="lineno"> 1844</span> </div>
+<div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>             <span class="comment">/* determine max and min pixel limits over which line should </span></div>
+<div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> <span class="comment">               be convolved */</span></div>
+<div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? </div>
+<div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>                     sinfo_new_nint(cenpix) - (var-1) : 0 ;</div>
+<div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?</div>
+<div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>                     sinfo_new_nint(cenpix) + (var-1)  : ily ;</div>
+<div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> </div>
+<div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>             <span class="comment">/* convolve neon lines with Gaussian function */</span></div>
+<div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )</div>
+<div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>             {</div>
+<div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>                 emline[j] += intensity[line] * </div>
+<div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>                        exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;</div>
+<div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>             }</div>
+<div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>         }</div>
+<div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> </div>
+<div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="comment">         * for each column, map the image data points onto an magFactor times </span></div>
+<div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">           bigger element grid for FFT  in the cross sinfo_correlation, first </span></div>
+<div class="line"><a name="l01863"></a><span class="lineno"> 1863</span> <span class="comment">           initialize the two helping arrays for each new column.</span></div>
+<div class="line"><a name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )</div>
+<div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>         {</div>
+<div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>             spec[k] = 0. ;</div>
+<div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>         }</div>
+<div class="line"><a name="l01869"></a><span class="lineno"> 1869</span> </div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>         <span class="comment">/* now take the image data points of the column and put them into </span></div>
+<div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> <span class="comment">           the spec array */</span></div>
+<div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span></div>
+<div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>         {</div>
+<div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>             <span class="comment">/* set bad pixels or negative values to zero */</span></div>
+<div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&</div>
+<div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>                 (pidata[col + row*ilx] > 0.))</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>             {</div>
+<div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>                 spec[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>             }</div>
+<div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>             {</div>
+<div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>                 spec[row] = 0. ;</div>
+<div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>             }</div>
+<div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>         }</div>
+<div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>         <span class="comment">/* convolve the spectrum by Gaussian */</span></div>
+<div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>         filter_spec = sinfo_function1d_filter_lowpass(spec,ily, </div>
+<div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>                                                       LOW_PASS_GAUSSIAN, </div>
+<div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>                                                       magFactor) ; </div>
+<div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> </div>
+<div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>         <span class="comment">/* now call the cross sinfo_correlation routine */</span></div>
+<div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,</div>
+<div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>                           ily/2, &delta, &maxlag, &xcorr_max) ;</div>
+<div class="line"><a name="l01893"></a><span class="lineno"> 1893</span> </div>
+<div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>         <span class="keywordflow">if</span> ( xcorr_max <= 0. )</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>         {</div>
+<div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross sinfo_correlation "</span></div>
+<div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>                               <span class="stringliteral">"sum , col %d set to ZERO \n"</span>, col) ;</div>
+<div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>             {</div>
+<div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>                 podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>             }</div>
+<div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>             continue ;</div>
+<div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>         }</div>
+<div class="line"><a name="l01906"></a><span class="lineno"> 1906</span> </div>
+<div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>        <span class="comment">/* in this section, we fit the sinfo_correlation function with a gauss, </span></div>
+<div class="line"><a name="l01908"></a><span class="lineno"> 1908</span> <span class="comment">          and find its peak, thus getting subpixel-accuracy */</span></div>
+<div class="line"><a name="l01909"></a><span class="lineno"> 1909</span> </div>
+<div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>         i = maxlag; j = i+1;</div>
+<div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>         <span class="keywordflow">while</span> (result[j] < result[i])</div>
+<div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>         {</div>
+<div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>             i++; j++;</div>
+<div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>         }</div>
+<div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>         i = maxlag; k = i-1;</div>
+<div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>         <span class="keywordflow">while</span> (result[k] < result[i])</div>
+<div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>         {</div>
+<div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>             i--; k--;</div>
+<div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>         }</div>
+<div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>         width = j-k+1;</div>
+<div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )</div>
+<div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>         {</div>
+<div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>         }</div>
+<div class="line"><a name="l01929"></a><span class="lineno"> 1929</span> </div>
+<div class="line"><a name="l01930"></a><span class="lineno"> 1930</span> </div>
+<div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l01935"></a><span class="lineno"> 1935</span> </div>
+<div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span></div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>         <span class="comment">/* go through the chosen column */</span></div>
+<div class="line"><a name="l01938"></a><span class="lineno"> 1938</span> </div>
+<div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )</div>
+<div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>         {</div>
+<div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>             peak -> data[i] = result[k+i]/xcorr_max * 100. ;</div>
+<div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>             xdat[i] = i;</div>
+<div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>             wdat[i] = 1.0;</div>
+<div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>         }</div>
+<div class="line"><a name="l01945"></a><span class="lineno"> 1945</span> </div>
+<div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>         xdim     = XDIM;</div>
+<div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>         ndat     = peak -> n_elements ;</div>
+<div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>         tol      = TOL ;</div>
+<div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>         lab      = LAB ;</div>
+<div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>         its      = ITS ;</div>
+<div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>         par[1] = width/2.0 ;</div>
+<div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>         par[2] = (float) (maxlag - k) ;</div>
+<div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span> </div>
+<div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )</div>
+<div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>         {</div>
+<div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>             derv_par[i] = 0.0 ;</div>
+<div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>         }</div>
+<div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> </div>
+<div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, peak -> data, </div>
+<div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>                                                wdat, &ndat, par, </div>
+<div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>                                                derv_par, mpar,</div>
+<div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>                                                &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>         {</div>
+<div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit "</span></div>
+<div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>                                <span class="stringliteral">"failed in col: %d, error no.: %d"</span>, col, iters);</div>
+<div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>             sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>             continue ;</div>
+<div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>         }</div>
+<div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> </div>
+<div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>         sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>         cpl_free (xdat) ;</div>
+<div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>         cpl_free (wdat) ;</div>
+<div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>         cpl_free (mpar) ;</div>
+<div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>         sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>         cpl_free(result) ;</div>
+<div class="line"><a name="l01987"></a><span class="lineno"> 1987</span> </div>
+<div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>         wavelag =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;</div>
+<div class="line"><a name="l01989"></a><span class="lineno"> 1989</span> </div>
+<div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>         <span class="keywordflow">if</span> ( fabs(wavelag) > (float)ily/20. )</div>
+<div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>         {</div>
+<div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"wavelag very big , col %d set to ZERO "</span>, col) ;</div>
+<div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>             {</div>
+<div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>                 podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>             }</div>
+<div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>             continue ;</div>
+<div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>         }</div>
+<div class="line"><a name="l01999"></a><span class="lineno"> 1999</span> </div>
+<div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02001"></a><span class="lineno"> 2001</span> <span class="comment">         * determine new zero order coefficient centreval, of which the </span></div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span> <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span></div>
+<div class="line"><a name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">         * wavelag with the same higher order coefficients and set the new </span></div>
+<div class="line"><a name="l02004"></a><span class="lineno"> 2004</span> <span class="comment">         * zero order coefficient to get both sides of the equation </span></div>
+<div class="line"><a name="l02005"></a><span class="lineno"> 2005</span> <span class="comment">         * approximately equal.</span></div>
+<div class="line"><a name="l02006"></a><span class="lineno"> 2006</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>         centreval = a_initial ;</div>
+<div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>         <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>         {</div>
+<div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>             <span class="keywordflow">if</span> ( i%2 == 0 )</div>
+<div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>             {</div>
+<div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>                 sign = -1 ;</div>
+<div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>             }</div>
+<div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>             {</div>
+<div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>                 sign = 1 ;</div>
+<div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>             }</div>
+<div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>             centreval += (float)sign * coeffs[i][col]*pow(wavelag, i) ;</div>
+<div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>         }</div>
+<div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>         a0[col] = centreval ;</div>
+<div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>     }</div>
+<div class="line"><a name="l02022"></a><span class="lineno"> 2022</span> </div>
+<div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>     <span class="comment">/* go through the single slitlets */</span></div>
+<div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>     <span class="keywordflow">for</span> ( ns = 0 ; ns < N_SLITLETS ; ns++ )</div>
+<div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>     {</div>
+<div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>         <span class="comment">/* determine the slitlet edges */</span></div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>         <span class="keywordflow">if</span> ( ns == 0 )</div>
+<div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>         {</div>
+<div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>             ed1 = 0 ;</div>
+<div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>             ed2 = edge[0] ;</div>
+<div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>         }</div>
+<div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == N_SLITLETS - 1 )</div>
+<div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>         {</div>
+<div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>             ed1 = edge[N_SLITLETS - 2] ;</div>
+<div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>             ed2 = ilx ;</div>
+<div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>         }</div>
+<div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>         {</div>
+<div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>             ed1 = edge[ns-1] ;</div>
+<div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>             ed2 = edge[ns] ;</div>
+<div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>         }</div>
+<div class="line"><a name="l02042"></a><span class="lineno"> 2042</span> </div>
+<div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>         nc = 0 ;</div>
+<div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>         {</div>
+<div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>             <span class="keywordflow">if</span> ( isnan(a0[i]) || a0[i] == 0. )</div>
+<div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>             {</div>
+<div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>                 continue ;</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>             }</div>
+<div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>             {</div>
+<div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>                 nc++ ;</div>
+<div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>             }</div>
+<div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>         }</div>
+<div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>         <span class="keywordflow">if</span> ( NULL == (acoefsclean = (<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>         {</div>
+<div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!\n"</span>) ;</div>
+<div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>         }</div>
+<div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>         nc = 0 ;</div>
+<div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>         {</div>
+<div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>             <span class="keywordflow">if</span> ( isnan(a0[i]) || a0[i] == 0. )</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>             {</div>
+<div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>                 continue ;</div>
+<div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>             }</div>
+<div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>             {</div>
+<div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>                 acoefsclean[nc] = a0[i] ;</div>
+<div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>                 nc++ ;</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>             }</div>
+<div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>         }</div>
+<div class="line"><a name="l02073"></a><span class="lineno"> 2073</span> </div>
+<div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>         <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l02075"></a><span class="lineno"> 2075</span> <span class="comment">         * determine the clean mean and sigma value of the coefficients,</span></div>
+<div class="line"><a name="l02076"></a><span class="lineno"> 2076</span> <span class="comment">         * that means reject 10 % of the extreme low and high values</span></div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>         sinfo_pixel_qsort(acoefsclean, nc) ;</div>
+<div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>         sum   = 0. ;</div>
+<div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>         sumq  = 0. ;</div>
+<div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>         mean  = 0. ;</div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>         sigma = 0. ;</div>
+<div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>         n     = 0 ;</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>         <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; </div>
+<div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>               i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )</div>
+<div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>         {</div>
+<div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>             sum  += (double)acoefsclean[i] ;</div>
+<div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>             sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;</div>
+<div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>             n ++ ;</div>
+<div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>         }</div>
+<div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>         mean          = sum/(double)n ;</div>
+<div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>         sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;</div>
+<div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>         cliphi        = mean + sigma * (double)3. ;</div>
+<div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>         cliplo        = mean - sigma * (double)3. ;</div>
+<div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>         <span class="comment">/* fit only the reasonnable values */</span></div>
+<div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>         num = 0 ;</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>         col_index = 0 ;</div>
+<div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>         {</div>
+<div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>             <span class="comment">/* take only the reasonnable coefficients */</span></div>
+<div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>             <span class="keywordflow">if</span> ( !isnan(a0[i]) && (a0[i] <= cliphi) && (a0[i] >= cliplo) &&</div>
+<div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>                  (a0[i] != 0.) )</div>
+<div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>             {</div>
+<div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>                 sub_acoefs[num]    = a0[i] ;</div>
+<div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>                 sub_dacoefs[num]   = 0.0000005 ;</div>
+<div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>                 sub_col_index[num] = col_index ;</div>
+<div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>                 num ++ ;</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>             }</div>
+<div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>             col_index++ ;</div>
+<div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>         }</div>
+<div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>         ndata = num ;</div>
+<div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>         offset2 = (float)(col_index-1) / 2. ;</div>
+<div class="line"><a name="l02113"></a><span class="lineno"> 2113</span> </div>
+<div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>         <span class="keywordflow">if</span> ( ndata < n_fitcoeffs )</div>
+<div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>         {</div>
+<div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough data found in slitlet %d\</span></div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span> <span class="stringliteral">                    to determine the fit coefficients.\n"</span>, ns) ;</div>
+<div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>             cpl_free(acoefsclean) ;</div>
+<div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>         }</div>
+<div class="line"><a name="l02121"></a><span class="lineno"> 2121</span> </div>
+<div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>         <span class="comment">/* allocate coefficient matrices, see numerical recipe function </span></div>
+<div class="line"><a name="l02123"></a><span class="lineno"> 2123</span> <span class="comment">           sinfo_matrix */</span></div>
+<div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>         ucoefs = sinfo_matrix(1, ndata, 1, n_fitcoeffs) ;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>         vcoefs = sinfo_matrix(1, ndata, 1, n_fitcoeffs) ;</div>
+<div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>         covar  = sinfo_matrix(1, n_fitcoeffs, 1, n_fitcoeffs) ;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"> 2127</span> </div>
+<div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>         <span class="comment">/* scale the x-values for the fit */</span></div>
+<div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>         {</div>
+<div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>             sub_col_index[i] = (sub_col_index[i] - offset2) / offset2 ;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>         }</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span> </div>
+<div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>         <span class="comment">/* finally, do the singular value decomposition fit */</span></div>
+<div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>         sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, </div>
+<div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>                             sub_dacoefs-1, ndata, bcoef[ns]-1,</div>
+<div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>                             n_fitcoeffs, ucoefs, vcoefs, wcoefs-1, </div>
+<div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>                             covar, &chisq, sinfo_fpol ) ;</div>
+<div class="line"><a name="l02139"></a><span class="lineno"> 2139</span> </div>
+<div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>         <span class="comment">/* scale the found coefficients */</span></div>
+<div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i ++ )</div>
+<div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>         {</div>
+<div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>             bcoef[ns][i] /= pow( offset2, i ) ;</div>
+<div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>         }</div>
+<div class="line"><a name="l02145"></a><span class="lineno"> 2145</span> </div>
+<div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>         <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>         cpl_free (acoefsclean) ;</div>
+<div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>         sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoeffs */</span>) ;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>         sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, n_fitcoeffs */</span>) ;</div>
+<div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>         sinfo_free_matrix( covar, 1<span class="comment">/*, n_fitcoeffs*/</span>, 1<span class="comment">/*, n_fitcoeffs*/</span>) ;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"> 2151</span> </div>
+<div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>         <span class="comment">/* now calculate the smoothed acoefs for each column */</span></div>
+<div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>         col_index = 0 ;</div>
+<div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>         <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>         {</div>
+<div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>             a0_clean[i] = 0. ;</div>
+<div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>             <span class="keywordflow">for</span> ( n = 0 ; n < n_fitcoeffs ; n++ )</div>
+<div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>             {</div>
+<div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>               a0_clean[i] += bcoef[ns][n] * </div>
+<div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>                              pow((<span class="keywordtype">float</span>)col_index - offset2, n) ;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>             }</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>             col_index++ ;</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>         }</div>
+<div class="line"><a name="l02164"></a><span class="lineno"> 2164</span> </div>
+<div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>     }</div>
+<div class="line"><a name="l02166"></a><span class="lineno"> 2166</span> </div>
+<div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>     {</div>
+<div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>         <span class="comment">/* prepare to write out wavelength as pixel values */</span></div>
+<div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>         {</div>
+<div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;</div>
+<div class="line"><a name="l02173"></a><span class="lineno"> 2173</span>             pixvalue = 0. ;</div>
+<div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>             {</div>
+<div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>             }</div>
+<div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>             podata[col+row*olx] = a0_clean[col] + pixvalue ;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>         }</div>
+<div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>     }</div>
+<div class="line"><a name="l02181"></a><span class="lineno"> 2181</span> </div>
+<div class="line"><a name="l02182"></a><span class="lineno"> 2182</span> </div>
+<div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>     cpl_free(emline) ;</div>
+<div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>     cpl_free(wave) ;</div>
+<div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>     cpl_free(a0) ;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>     cpl_free(a0_clean) ;</div>
+<div class="line"><a name="l02188"></a><span class="lineno"> 2188</span> </div>
+<div class="line"><a name="l02189"></a><span class="lineno"> 2189</span> </div>
+<div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>     cpl_free(sub_col_index) ;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>     cpl_free(sub_acoefs);</div>
+<div class="line"><a name="l02192"></a><span class="lineno"> 2192</span>     cpl_free(sub_dacoefs) ;</div>
+<div class="line"><a name="l02193"></a><span class="lineno"> 2193</span> </div>
+<div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>     cpl_free(z) ;</div>
+<div class="line"><a name="l02196"></a><span class="lineno"> 2196</span> </div>
+<div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>     sinfo_new_destroy_2Dfloatarray(&bcoef,n_fitcoeffs) ;</div>
+<div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>     cpl_free(wcoefs) ;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"> 2199</span> </div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>     <span class="keywordflow">return</span> wavemap ;</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span> }</div>
+<div class="line"><a name="l02202"></a><span class="lineno"> 2202</span> </div>
+<div class="line"><a name="l02226"></a><span class="lineno"> 2226</span> cpl_image * sinfo_new_create_shifted_slit_wavemap3 ( cpl_image * lineIm,</div>
+<div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>                               <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>                           <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>                                       <span class="keywordtype">int</span>      magFactor )</div>
+<div class="line"><a name="l02233"></a><span class="lineno"> 2233</span> {</div>
+<div class="line"><a name="l02234"></a><span class="lineno"> 2234</span> </div>
+<div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>     cpl_image * wavemap ;</div>
+<div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>     <span class="keywordtype">double</span> * result ;</div>
+<div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>     <span class="keywordtype">float</span> * filter_spec ;</div>
+<div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>     <span class="keywordtype">float</span> centreval ;</div>
+<div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>     <span class="keywordtype">float</span> centrepix ;</div>
+<div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>     <span class="keywordtype">float</span> cenpos, cenpix ;</div>
+<div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>     <span class="keywordtype">float</span> pixvalue ;</div>
+<div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>     <span class="keywordtype">float</span> wavelag_mean ;</div>
+<div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>     <span class="comment">/*float maxres ;*/</span></div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>     <span class="keywordtype">float</span> angst ;</div>
+<div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>     <span class="comment">/*float temp ;*/</span></div>
+<div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>     <span class="keywordtype">float</span> a_initial ;</div>
+<div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>     <span class="comment">/*float solution[n_fitcoeffs-1], im_solution[n_fitcoeffs-1] ;*/</span></div>
+<div class="line"><a name="l02248"></a><span class="lineno"> 2248</span> </div>
+<div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>     <span class="keywordtype">float</span> par[MAXPAR] ;</div>
+<div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>     <span class="keywordtype">float</span> derv_par[MAXPAR] ;</div>
+<div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>     <span class="keywordtype">int</span>        numpar, its ;</div>
+<div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>     <span class="keywordtype">int</span>        * mpar ;</div>
+<div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>     <span class="keywordtype">float</span>      tol, lab ;</div>
+<div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>     <span class="keywordtype">float</span>      * xdat, * wdat ;</div>
+<div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>     Vector     * peak;</div>
+<div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>     <span class="keywordtype">int</span>   iters, xdim, ndat ;</div>
+<div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>     <span class="keywordtype">int</span>   row , col ;</div>
+<div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>     <span class="keywordtype">int</span>   i, j, k<span class="comment">/*, l, m, n*/</span> ;</div>
+<div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>     <span class="keywordtype">int</span>   sign, found, line, width ;</div>
+<div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>     <span class="keywordtype">int</span> var, maxlag, cmin, cmax ;</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span> </div>
+<div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>     <span class="keywordtype">float</span>* emline=NULL ;</div>
+<div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>     <span class="keywordtype">float</span>* spec=NULL ;</div>
+<div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>     <span class="keywordtype">float</span>* wavelag=NULL ;</div>
+<div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>     <span class="keywordtype">float</span>* wave=NULL ;</div>
+<div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>     <span class="keywordtype">double</span>* a=NULL ;</div>
+<div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>     <span class="keywordtype">double</span>* z=NULL ;</div>
+<div class="line"><a name="l02268"></a><span class="lineno"> 2268</span> </div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>     gsl_poly_complex_workspace * w ;</div>
+<div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>     <span class="keywordtype">double</span> xcorr_max ;</div>
+<div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>     <span class="keywordtype">int</span> delta ;</div>
+<div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>     </div>
+<div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>     <span class="keywordtype">int</span> olx=0;</div>
+<div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>     <span class="keywordtype">int</span> oly=0;</div>
+<div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>     <span class="keywordtype">float</span>* podata=NULL;</div>
+<div class="line"><a name="l02279"></a><span class="lineno"> 2279</span> </div>
+<div class="line"><a name="l02280"></a><span class="lineno"> 2280</span> </div>
+<div class="line"><a name="l02281"></a><span class="lineno"> 2281</span> </div>
+<div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>     <span class="keywordflow">if</span> ( lineIm == NULL )</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>     {</div>
+<div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>     }</div>
+<div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>     ilx=cpl_image_get_size_x(lineIm);</div>
+<div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>     ily=cpl_image_get_size_y(lineIm);</div>
+<div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>     pidata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l02290"></a><span class="lineno"> 2290</span> </div>
+<div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>     <span class="keywordflow">if</span> ( coeffs == NULL )</div>
+<div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>     {</div>
+<div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;</div>
+<div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>     }</div>
+<div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )</div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>     {</div>
+<div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>     }</div>
+<div class="line"><a name="l02301"></a><span class="lineno"> 2301</span> </div>
+<div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>     {</div>
+<div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no wavelength list given!\n"</span>) ;</div>
+<div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>     }</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>     <span class="keywordflow">if</span> ( n_lines < 1 || magFactor < 1 )</div>
+<div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>     {</div>
+<div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong n_lines or magFactor given!\n"</span>) ;</div>
+<div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>     }</div>
+<div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>     </div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>     var    = (magFactor - 1)*(magFactor - 1) ;</div>
+<div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>     <span class="comment">/* find out if Angstroem or microns are used */</span></div>
+<div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )</div>
+<div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>     {</div>
+<div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>         <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>         angst = 10000. ;</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>     }</div>
+<div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )</div>
+<div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>     {</div>
+<div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>         <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>         angst = 1000. ;</div>
+<div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>     }</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>     {</div>
+<div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>         <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>         angst = 1. ;</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>     }</div>
+<div class="line"><a name="l02330"></a><span class="lineno"> 2330</span> </div>
+<div class="line"><a name="l02331"></a><span class="lineno"> 2331</span> </div>
+<div class="line"><a name="l02332"></a><span class="lineno"> 2332</span> </div>
+<div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>     <span class="keywordflow">if</span> ( NULL == (wavemap = cpl_image_new ( ilx, ily,CPL_TYPE_FLOAT)) )</div>
+<div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>     {</div>
+<div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" could not allocate memory!\n"</span>) ;</div>
+<div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>     }</div>
+<div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>     podata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>     olx=ilx;</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>     oly=ily;</div>
+<div class="line"><a name="l02342"></a><span class="lineno"> 2342</span> </div>
+<div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>     emline=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>     spec=cpl_calloc(ily,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>     wavelag=cpl_calloc(ilx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>     wave=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>     z=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">double</span>)) ;</div>
+<div class="line"><a name="l02349"></a><span class="lineno"> 2349</span> </div>
+<div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>     </div>
+<div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>     <span class="comment">/* first store each spectrum in a buffer */</span></div>
+<div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>     {</div>
+<div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>         <span class="comment">/* initialize the emline array for each column */</span></div>
+<div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>         <span class="keywordflow">for</span> ( i = 0 ; i < ily ; i++ )</div>
+<div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>         {</div>
+<div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>             emline[i] = 0. ;</div>
+<div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>         }</div>
+<div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>         <span class="comment">/* determine the coefficients by using the given bcoefs */</span></div>
+<div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>         {</div>
+<div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>             <span class="comment">/* initialize coefficients and solution */</span></div>
+<div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)</div>
+<div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>             {</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>                 z[2*i] = 0. ;</div>
+<div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>                 z[2*i+1] = 0. ;</div>
+<div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>             }</div>
+<div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>             a[i] = coeffs[i][col] ;</div>
+<div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>         }</div>
+<div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>          </div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>         a_initial = coeffs[0][col] ;</div>
+<div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>         <span class="comment">/* go through the lines and generate an artificial spectrum */</span></div>
+<div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>         {</div>
+<div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>             <span class="comment">/* go from Angstroem to micron */</span></div>
+<div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>             wave[line] = wavelength[line]/angst ;</div>
+<div class="line"><a name="l02377"></a><span class="lineno"> 2377</span> </div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>             <span class="comment">/* ----------------------------------------------------------------</span></div>
+<div class="line"><a name="l02379"></a><span class="lineno"> 2379</span> <span class="comment">             * solve the polynomial for the exact offset of the line that means</span></div>
+<div class="line"><a name="l02380"></a><span class="lineno"> 2380</span> <span class="comment">             * find the root of the polynomial of order n_fitcoefs - 1</span></div>
+<div class="line"><a name="l02381"></a><span class="lineno"> 2381</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>             a[0] = a_initial - wave[line] ;</div>
+<div class="line"><a name="l02383"></a><span class="lineno"> 2383</span> </div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs))) </div>
+<div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>             {</div>
+<div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;</div>
+<div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>             }</div>
+<div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, z)) </div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>             {</div>
+<div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"sinfo_gsl_poly_complex_solve did not work!"</span>) ;</div>
+<div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>                 cpl_image_delete(wavemap) ;</div>
+<div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>                 <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>             }</div>
+<div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>             sinfo_gsl_poly_complex_workspace_free(w) ;           </div>
+<div class="line"><a name="l02397"></a><span class="lineno"> 2397</span> </div>
+<div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>             j = 0 ;</div>
+<div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>             found = -1 ;</div>
+<div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )</div>
+<div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>             {</div>
+<div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>                 <span class="comment">/* test for appropriate solution */</span></div>
+<div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>                 <span class="keywordflow">if</span>( (z[2*i] > (-1.)*(<span class="keywordtype">float</span>) ily/2. &&</div>
+<div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>                      z[2*i] < (<span class="keywordtype">float</span>)ily/2.) && z[2*i+1] == 0. )</div>
+<div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>                 {</div>
+<div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>                     found = 2*i ;</div>
+<div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>                     j ++ ;</div>
+<div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>                 }</div>
+<div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>                 {</div>
+<div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>                     continue ;</div>
+<div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>                 }</div>
+<div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>             }</div>
+<div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>             <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>             {</div>
+<div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no offset solution found for line %d "</span></div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>                                   <span class="stringliteral">"in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>                 continue ;</div>
+<div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>             }</div>
+<div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )</div>
+<div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>             {</div>
+<div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>                 cenpos = z[found] + (float) ily /2. ;</div>
+<div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>             }</div>
+<div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>             {</div>
+<div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"two or more offset solutions found for "</span></div>
+<div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>                                   <span class="stringliteral">"line %d in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>                 continue ;</div>
+<div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>             }</div>
+<div class="line"><a name="l02430"></a><span class="lineno"> 2430</span> </div>
+<div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>             <span class="comment">/*-----------------------------------------------------------------</span></div>
+<div class="line"><a name="l02432"></a><span class="lineno"> 2432</span> <span class="comment">             * magnify image by the given factor add an additional offset</span></div>
+<div class="line"><a name="l02433"></a><span class="lineno"> 2433</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>             cenpix = cenpos ;</div>
+<div class="line"><a name="l02435"></a><span class="lineno"> 2435</span> </div>
+<div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>             <span class="comment">/* determine max and min pixel limits over which </span></div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span> <span class="comment">               line should be convolved */</span></div>
+<div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>             cmin = (sinfo_new_nint(cenpix) - (var-1)) > 0 ? </div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>                     sinfo_new_nint(cenpix) - (var-1) : 0 ;</div>
+<div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>             cmax = (sinfo_new_nint(cenpix) + (var-1)) < ily ?</div>
+<div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>                     sinfo_new_nint(cenpix) + (var-1)  : ily ;</div>
+<div class="line"><a name="l02442"></a><span class="lineno"> 2442</span> </div>
+<div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>             <span class="comment">/* convolve neon lines with Gaussian function */</span></div>
+<div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>             <span class="keywordflow">for</span> ( j = cmin ; j < cmax ; j++ )</div>
+<div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>             {</div>
+<div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>                 emline[j] += intensity[line] * </div>
+<div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>                         exp((<span class="keywordtype">double</span>)(-0.5*(j-cenpix)*(j-cenpix))/(<span class="keywordtype">double</span>)var) ;</div>
+<div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>             }</div>
+<div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>         }</div>
+<div class="line"><a name="l02450"></a><span class="lineno"> 2450</span> </div>
+<div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02452"></a><span class="lineno"> 2452</span> <span class="comment">         * for each column, map the image data points onto an magFactor times </span></div>
+<div class="line"><a name="l02453"></a><span class="lineno"> 2453</span> <span class="comment">           bigger element grid for FFT in the cross sinfo_correlation, first </span></div>
+<div class="line"><a name="l02454"></a><span class="lineno"> 2454</span> <span class="comment">           initialize the two helping arrays for each new column.</span></div>
+<div class="line"><a name="l02455"></a><span class="lineno"> 2455</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>         <span class="keywordflow">for</span> ( k = 0 ; k < ily ; k++ )</div>
+<div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>         {</div>
+<div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>             spec[k] = 0. ;</div>
+<div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>         }</div>
+<div class="line"><a name="l02460"></a><span class="lineno"> 2460</span> </div>
+<div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>         <span class="comment">/* now take the image data points of the column and put them into </span></div>
+<div class="line"><a name="l02462"></a><span class="lineno"> 2462</span> <span class="comment">           the spec array */</span></div>
+<div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>         <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ ) <span class="comment">/* go through the column */</span></div>
+<div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>         {</div>
+<div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>             <span class="comment">/* set bad pixels or negative values to zero */</span></div>
+<div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>             <span class="keywordflow">if</span> (!isnan(pidata[col + row*ilx]) &&</div>
+<div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>                             (pidata[col + row*ilx] > 0.))</div>
+<div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>             {</div>
+<div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>                 spec[row] = pidata[col + row*ilx] ;</div>
+<div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>             }</div>
+<div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>             {</div>
+<div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>                 spec[row] = 0. ;</div>
+<div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>             }</div>
+<div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>         }</div>
+<div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>         <span class="comment">/* convolve the spectrum by Gaussian */</span></div>
+<div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>         filter_spec = sinfo_function1d_filter_lowpass(spec, ily, </div>
+<div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>                                                       LOW_PASS_GAUSSIAN, </div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>                                                       magFactor) ; </div>
+<div class="line"><a name="l02480"></a><span class="lineno"> 2480</span> </div>
+<div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>         <span class="comment">/* now call the cross sinfo_correlation routine */</span></div>
+<div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>         result = sinfo_new_xcorrel( filter_spec, ily, emline, ily,</div>
+<div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>                           ily/2, &delta, &maxlag, &xcorr_max) ;</div>
+<div class="line"><a name="l02484"></a><span class="lineno"> 2484</span> </div>
+<div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>         <span class="keywordflow">if</span> ( xcorr_max <= 0. )</div>
+<div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>         {</div>
+<div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"no positive cross correlation sum , "</span></div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>                               <span class="stringliteral">"col %d set to ZERO \n"</span>, col) ;</div>
+<div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>             <span class="keywordflow">for</span> ( row = 0 ; row < ily ; row++ )</div>
+<div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>             {</div>
+<div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>                 podata[col + row*ilx] = ZERO ;</div>
+<div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>             }</div>
+<div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>             continue ;</div>
+<div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>         }</div>
+<div class="line"><a name="l02497"></a><span class="lineno"> 2497</span> </div>
+<div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>        <span class="comment">/* in this section, we fit the sinfo_correlation function with a </span></div>
+<div class="line"><a name="l02499"></a><span class="lineno"> 2499</span> <span class="comment">           gauss, and find its peak, thus getting subpixel-accuracy */</span></div>
+<div class="line"><a name="l02500"></a><span class="lineno"> 2500</span> </div>
+<div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>         i = maxlag; j = i+1;</div>
+<div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>         <span class="keywordflow">while</span> (result[j] < result[i])</div>
+<div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>         {</div>
+<div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>             i++; j++;</div>
+<div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>         }</div>
+<div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>         i = maxlag; k = i-1;</div>
+<div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>         <span class="keywordflow">while</span> (result[k] < result[i])</div>
+<div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>         {</div>
+<div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>             i--; k--;</div>
+<div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>         }</div>
+<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>         width = j-k+1;</div>
+<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>         <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>         <span class="keywordflow">if</span> ( NULL == (peak = sinfo_new_vector (width)) )</div>
+<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>         {</div>
+<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>             <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>         }</div>
+<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> </div>
+<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span> </div>
+<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>         <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>         xdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>         wdat = (<span class="keywordtype">float</span> *) cpl_calloc( peak -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>         mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span> </div>
+<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>         <span class="comment">/* determine the values of the spectral sinfo_vector given as input */</span></div>
+<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>         <span class="comment">/* go through the chosen column */</span></div>
+<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> </div>
+<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>         <span class="keywordflow">for</span> ( i = 0 ; i < width ; i++ )</div>
+<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>         {</div>
+<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>             peak -> data[i] = result[k+i]/xcorr_max * 100. ;</div>
+<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>             xdat[i] = i;</div>
+<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>             wdat[i] = 1.0;</div>
+<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>         }</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span> </div>
+<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>         <span class="comment">/* set initial values for the fitting routine */</span></div>
+<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>         xdim     = XDIM;</div>
+<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>         ndat     = peak -> n_elements ;</div>
+<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>         numpar   = MAXPAR ;</div>
+<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>         tol      = TOL ;</div>
+<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>         lab      = LAB ;</div>
+<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>         its      = ITS ;</div>
+<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>         par[1] = width/2.0 ;</div>
+<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>         par[2] = (float) (maxlag - k) ;</div>
+<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>         par[3] = (peak -> data[0] + peak -> data[peak->n_elements - 1]) / 2.0 ;</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>         par[0]  = result[maxlag]/xcorr_max * 100. - (par[3]) ;</div>
+<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span> </div>
+<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>         <span class="keywordflow">for</span> ( i = 0 ; i < MAXPAR ; i++ )</div>
+<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>         {</div>
+<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>             derv_par[i] = 0.0 ;</div>
+<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>             mpar[i] = 1 ;</div>
+<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>         }</div>
+<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> </div>
+<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>         <span class="comment">/* finally, do the least square fit using a sinfo_gaussian */</span></div>
+<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>         <span class="keywordflow">if</span> ( 0 > ( iters = sinfo_new_lsqfit_c( xdat, &xdim, </div>
+<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>                                                peak -> data, wdat, </div>
+<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>                                                &ndat, par, derv_par, mpar,</div>
+<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>                                                &numpar, &tol, &its, &lab )) )</div>
+<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>         {</div>
+<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>             <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" sinfo_new_lsqfit_c: least squares fit"</span></div>
+<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>                                <span class="stringliteral">" failed in col: %d, error no.: %d\n"</span>, </div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>                                col, iters) ;</div>
+<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>             sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>             cpl_free ( xdat ) ;</div>
+<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>             cpl_free ( wdat ) ;</div>
+<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>             cpl_free ( mpar ) ;</div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>             sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>             cpl_free(result) ;</div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>             continue ;</div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>         }</div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> </div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>         sinfo_new_destroy_vector ( peak ) ;</div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>         cpl_free (xdat) ;</div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>         cpl_free (wdat) ;</div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>         cpl_free (mpar) ;</div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>         sinfo_function1d_del(filter_spec) ;</div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>         cpl_free(result) ;</div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span> </div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>         wavelag[col] =((float)ily/2 - (<span class="keywordtype">float</span>)k - par[2]) ;</div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span> </div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>     }</div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>     </div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>     <span class="keywordflow">if</span> (FLT_MAX==(wavelag_mean=sinfo_new_clean_mean(wavelag, ilx, 10., 10.)) )</div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>     {</div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not determine a mean offset\n"</span>) ;</div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>     }</div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span> </div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>     <span class="keywordflow">if</span> ( fabs(wavelag_mean) > (<span class="keywordtype">float</span>)ily/20. )</div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>     {</div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wavelag too big \n"</span>) ;</div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>     }</div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>     </div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span> </div>
+<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>     <span class="keywordflow">for</span> ( col = 0 ; col < ilx ; col++ )</div>
+<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>     {</div>
+<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>         <span class="comment">/*--------------------------------------------------------------------</span></div>
+<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span> <span class="comment">         * determine new zero order coefficient centreval, of which the </span></div>
+<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span> <span class="comment">         * formula is determined by setting equal a polynomial shifted by </span></div>
+<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> <span class="comment">         * wavelag with the same higher order coefficients and set the new </span></div>
+<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span> <span class="comment">         * zero order coefficient to get both sides of the equation </span></div>
+<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> <span class="comment">         * approximately equal.</span></div>
+<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span> <span class="comment">         */</span></div>
+<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>         a_initial = coeffs[0][col] ;</div>
+<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>     centreval = a_initial ;</div>
+<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>     <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>         {</div>
+<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>             <span class="keywordflow">if</span> ( i%2 == 0 )</div>
+<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>             {</div>
+<div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>                 sign = -1 ;</div>
+<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>             }</div>
+<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>             {</div>
+<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>                 sign = 1 ;</div>
+<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>             }</div>
+<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>             centreval += (float)sign * coeffs[i][col]*pow(wavelag_mean, i) ;</div>
+<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>         }</div>
+<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> </div>
+<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>     </div>
+<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>         <span class="comment">/* prepare to write out wavelength as pixel values */</span></div>
+<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>         <span class="keywordflow">for</span> ( row = 0 ; row < oly ; row++ )</div>
+<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>         {</div>
+<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>             centrepix = (float)row - ((<span class="keywordtype">float</span>)oly - 1.)/2. ;</div>
+<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>             pixvalue = 0. ;</div>
+<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>             <span class="keywordflow">for</span> ( i = 1 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>             {</div>
+<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>                 pixvalue += coeffs[i][col]*pow(centrepix, i) ;</div>
+<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>             }</div>
+<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>             podata[col+row*olx] = centreval + pixvalue ;</div>
+<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>         }</div>
+<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>     }</div>
+<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span> </div>
+<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> </div>
+<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span> </div>
+<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>     cpl_free(emline) ;</div>
+<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>     cpl_free(spec) ;</div>
+<div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>     cpl_free(wavelag) ;</div>
+<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>     cpl_free(wave) ;</div>
+<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>     cpl_free(z) ;</div>
+<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span> </div>
+<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div>
+<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>     <span class="keywordflow">return</span> wavemap ;</div>
+<div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> }</div>
+<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span> </div>
+<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> <span class="keywordtype">float</span> sinfo_new_check_line_positions ( cpl_image     * lineIm,</div>
+<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>                        <span class="keywordtype">float</span>       ** coeffs,</div>
+<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>                        <span class="keywordtype">int</span>            n_fitcoeffs,</div>
+<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>                        <span class="keywordtype">float</span>            gdisp1,</div>
+<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>                        FitParams   ** par )</div>
+<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span> {</div>
+<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>     <span class="keywordtype">float</span> wave_shift=0 ;</div>
+<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>     <span class="keywordtype">float</span> amp[100] ;</div>
+<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>     <span class="keywordtype">float</span> sort_amp[100] ;</div>
+<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>     <span class="keywordtype">float</span> offset=0 ;</div>
+<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>     <span class="keywordtype">float</span> shift=0 ;</div>
+<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>     <span class="keywordtype">float</span> position=0;</div>
+<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>     <span class="keywordtype">float</span> lambda=0;</div>
+<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>     <span class="keywordtype">float</span> wave=0 ;</div>
+<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>     <span class="keywordtype">int</span> k=0;</div>
+<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>     <span class="keywordtype">int</span> l=0;</div>
+<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>     <span class="keywordtype">int</span> m=0;</div>
+<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>     <span class="keywordtype">int</span> col=0;</div>
+<div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>     <span class="keywordtype">int</span> firstj=0;</div>
+<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>     <span class="keywordtype">float</span>* shift_col=NULL ;</div>
+<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>     <span class="keywordtype">int</span>* foundit=NULL ;</div>
+<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>     <span class="keywordtype">int</span> n_lines=0;</div>
+<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>     <span class="keywordtype">int</span> lin, found=0 ;</div>
+<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span> </div>
+<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>     <span class="keywordflow">if</span> ( lineIm == NULL )</div>
+<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>     {</div>
+<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>     }</div>
+<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>     lx=cpl_image_get_size_x(lineIm);</div>
+<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>     ly=cpl_image_get_size_y(lineIm);</div>
+<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>     pdata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span> </div>
+<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>     <span class="keywordflow">if</span> ( coeffs == NULL )</div>
+<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>     {</div>
+<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;</div>
+<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>     }</div>
+<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>     {</div>
+<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters given!\n"</span>) ;</div>
+<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>     }</div>
+<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )</div>
+<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>     {</div>
+<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;</div>
+<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>     }</div>
+<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span> </div>
+<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>     offset = (float) (ly -1.) / 2. ;</div>
+<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>     n_lines = par[0]->n_params/lx ;</div>
+<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span> </div>
+<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>     shift_col=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>     foundit=cpl_calloc(par[0]->n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>     </div>
+<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>     <span class="comment">/*search for the brightest 5 lines in each column and compute the </span></div>
+<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> <span class="comment">      wavelength difference*/</span></div>
+<div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>     <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )</div>
+<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>     {</div>
+<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>         n = 0 ;</div>
+<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>         <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>         {</div>
+<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>             <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && </div>
+<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>                 par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. )</div>
+<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>             {</div>
+<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>                 foundit[n] = i ;</div>
+<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>                 amp[n] = par[i]->fit_par[0] ;</div>
+<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>                 sort_amp[n] = amp[n] ;</div>
+<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span>                 n++ ;</div>
+<div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>             }</div>
+<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>         }</div>
+<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>         sinfo_pixel_qsort(sort_amp, n) ;</div>
+<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span> </div>
+<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>         <span class="keywordflow">if</span> ( n > 5 )</div>
+<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>         {</div>
+<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>             firstj = n - 5 ;</div>
+<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>         }</div>
+<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>         {</div>
+<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>             firstj = 0 ;</div>
+<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>         }</div>
+<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>         l = 0 ; </div>
+<div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>         shift = 0 ;</div>
+<div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>         <span class="keywordflow">for</span> ( j = firstj ; j < n ; j++ )</div>
+<div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>         {</div>
+<div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>             <span class="keywordflow">for</span> ( m = 0 ; m < n ; m++ )</div>
+<div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>             {</div>
+<div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>                 <span class="keywordflow">if</span> ( sort_amp[j] == amp[m] )</div>
+<div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>                 {</div>
+<div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>                     position = par[foundit[m]]->fit_par[2] ; </div>
+<div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>                     lambda   = par[foundit[m]]->wavelength ;</div>
+<div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>                     wave = 0 ;</div>
+<div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>                     <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoeffs ; k++ ) </div>
+<div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>                     {</div>
+<div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>                         wave += coeffs[k][col]*pow(position-offset, k) ;</div>
+<div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>                     }</div>
+<div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>                     shift += lambda - wave ;</div>
+<div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>                     l++ ;</div>
+<div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>                 }</div>
+<div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>             }</div>
+<div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>         }</div>
+<div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>         <span class="keywordflow">if</span> ( l == 0 ) continue ;</div>
+<div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>         shift_col[col] = shift/(float)l ; </div>
+<div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>     }</div>
+<div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>     wave_shift = sinfo_new_clean_mean(shift_col, lx, 10., 10.) ;</div>
+<div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>     sinfo_msg(<span class="stringliteral">"Overall positioning error: %3.2g [um] %3.2g [pix]"</span>, </div>
+<div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>                wave_shift,wave_shift/fabs(gdisp1)) ;</div>
+<div class="line"><a name="l02784"></a><span class="lineno"> 2784</span> </div>
+<div class="line"><a name="l02785"></a><span class="lineno"> 2785</span> </div>
+<div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>     <span class="comment">/* determine positioning error for each found line */</span></div>
+<div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>     <span class="keywordflow">for</span> ( lin = 0 ; lin < n_lines ; lin++ )</div>
+<div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>     {</div>
+<div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>         <span class="keywordflow">for</span> ( col = 0 ; col < lx ; col++ )</div>
+<div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>         {</div>
+<div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>             shift_col[col] = 0. ;</div>
+<div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>             found = -1 ;</div>
+<div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>             <span class="keywordflow">for</span> ( i = 0 ; i < par[0]->n_params ; i++ )</div>
+<div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>             {</div>
+<div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>                 <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && </div>
+<div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>                     par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. && </div>
+<div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>                     par[i]->line == lin )</div>
+<div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>                 {</div>
+<div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>                     found = i ;</div>
+<div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>                 }</div>
+<div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>             }</div>
+<div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>             <span class="keywordflow">if</span> (found == -1) break ;</div>
+<div class="line"><a name="l02803"></a><span class="lineno"> 2803</span> </div>
+<div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>             position = par[found]->fit_par[2] ; </div>
+<div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>             lambda  = par[found]->wavelength ;</div>
+<div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>             wave = 0 ;</div>
+<div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>             <span class="keywordflow">for</span> ( k = 0 ; k < n_fitcoeffs ; k++ ) </div>
+<div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>             {</div>
+<div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>                 wave += coeffs[k][col]*pow(position-offset, k) ;</div>
+<div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>             }</div>
+<div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>             shift_col[col] = lambda - wave ;</div>
+<div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>         }</div>
+<div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>         <span class="keywordflow">if</span> (found != -1 )</div>
+<div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>         {</div>
+<div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>       sinfo_msg(<span class="stringliteral">"shift: %3.2g [um] %3.2g (pix) at: %4.3f [um]"</span>,</div>
+<div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>             sinfo_new_clean_mean(shift_col,lx, 10., 10.),</div>
+<div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>                     sinfo_new_clean_mean(shift_col,lx, 10., 10.)/fabs(gdisp1),</div>
+<div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>                     lambda) ;</div>
+<div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>         }</div>
+<div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>     }</div>
+<div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>     cpl_free(shift_col) ;</div>
+<div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>     cpl_free(foundit) ;</div>
+<div class="line"><a name="l02823"></a><span class="lineno"> 2823</span> </div>
+<div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>     <span class="keywordflow">return</span> wave_shift ;</div>
+<div class="line"><a name="l02825"></a><span class="lineno"> 2825</span> }</div>
+<div class="line"><a name="l02826"></a><span class="lineno"> 2826</span> </div>
+<div class="line"><a name="l02827"></a><span class="lineno"> 2827</span> </div>
+<div class="line"><a name="l02856"></a><span class="lineno"> 2856</span> <span class="keywordtype">float</span> sinfo_new_check_correlated_line_positions ( cpl_image     * lineIm,</div>
+<div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>                                      <span class="keywordtype">float</span>       ** coeffs,</div>
+<div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>                                      <span class="keywordtype">int</span>            n_fitcoeffs,</div>
+<div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>                                      <span class="keywordtype">float</span>        * wavelength,</div>
+<div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>                                      <span class="keywordtype">float</span>        * intensity,</div>
+<div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>                                      <span class="keywordtype">int</span>            n_lines,</div>
+<div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>                                      <span class="keywordtype">float</span>          fwhm, </div>
+<div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>                                      <span class="keywordtype">float</span>          width,</div>
+<div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>                                      <span class="keywordtype">float</span>          min_amplitude,</div>
+<div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>                                      <span class="keywordtype">float</span>          dispersion,</div>
+<div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>                                      FitParams   ** par )</div>
+<div class="line"><a name="l02867"></a><span class="lineno"> 2867</span> {</div>
+<div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>     <span class="keywordtype">float</span> wave_shift=0 ;</div>
+<div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>     <span class="keywordtype">float</span> offset=0;</div>
+<div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>     <span class="keywordtype">float</span> shift=0;</div>
+<div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>     <span class="keywordtype">float</span> position=0;</div>
+<div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>     <span class="keywordtype">float</span> lambda=0;</div>
+<div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>     <span class="keywordtype">float</span> wave=0;</div>
+<div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>     <span class="keywordtype">int</span> k=0;  <span class="comment">/*, l, m*/</span></div>
+<div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>     <span class="keywordtype">int</span> c=0;</div>
+<div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>     <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>     <span class="keywordtype">int</span> col=0;<span class="comment">/*, firstj*/</span></div>
+<div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>     <span class="keywordtype">int</span> found=0;<span class="comment">/*lin,*/</span></div>
+<div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>     <span class="keywordtype">int</span> line=0;</div>
+<div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>     <span class="keywordtype">int</span> result=0;</div>
+<div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>     <span class="keywordtype">float</span> cenpos=0;</div>
+<div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>     <span class="keywordtype">float</span> angst=0;</div>
+<div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>     <span class="keywordtype">float</span> a_initial=0;</div>
+<div class="line"><a name="l02887"></a><span class="lineno"> 2887</span> </div>
+<div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>     <span class="keywordtype">int</span>* foundit=NULL ;</div>
+<div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>     <span class="keywordtype">float</span>* shift_col=NULL ;</div>
+<div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>     <span class="keywordtype">float</span>* wave_cor=NULL ;</div>
+<div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>     <span class="keywordtype">double</span>* a=NULL ;</div>
+<div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>     <span class="keywordtype">double</span>* zroot=NULL ;</div>
+<div class="line"><a name="l02893"></a><span class="lineno"> 2893</span> </div>
+<div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>     gsl_poly_complex_workspace * w=NULL ;</div>
+<div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>     Vector * vline=NULL;</div>
+<div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>     <span class="keywordtype">int</span>    * mpar=NULL;</div>
+<div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>     <span class="keywordtype">float</span>  * xdat=NULL;</div>
+<div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>     <span class="keywordtype">float</span>  * wdat=NULL;</div>
+<div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>     <span class="keywordtype">int</span> lx=0;</div>
+<div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>     <span class="keywordtype">int</span> ly=0;</div>
+<div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>     <span class="keywordtype">float</span>* pdata=NULL;</div>
+<div class="line"><a name="l02902"></a><span class="lineno"> 2902</span> </div>
+<div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>     <span class="keywordflow">if</span> ( lineIm == NULL )</div>
+<div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>     {</div>
+<div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no input image given!\n"</span>) ;</div>
+<div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>     }</div>
+<div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>     lx=cpl_image_get_size_x(lineIm);</div>
+<div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>     ly=cpl_image_get_size_y(lineIm);</div>
+<div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>     pdata=cpl_image_get_data_float(lineIm);</div>
+<div class="line"><a name="l02911"></a><span class="lineno"> 2911</span> </div>
+<div class="line"><a name="l02912"></a><span class="lineno"> 2912</span> </div>
+<div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>     <span class="keywordflow">if</span> ( coeffs == NULL )</div>
+<div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>     {</div>
+<div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no coefficient sinfo_matrix given!\n"</span>) ;</div>
+<div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>     }</div>
+<div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>     {</div>
+<div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no fit parameters given!\n"</span>) ;</div>
+<div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>     }</div>
+<div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>     <span class="keywordflow">if</span> ( n_fitcoeffs < 2 )</div>
+<div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>     {</div>
+<div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong number of polynomial coefficients given!\n"</span>) ;</div>
+<div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>     }</div>
+<div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>     <span class="keywordflow">if</span> ( wavelength == NULL || intensity == NULL )</div>
+<div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>     {</div>
+<div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" no line list given!\n"</span>) ;</div>
+<div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>     }</div>
+<div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>     <span class="keywordflow">if</span> ( fwhm <= 0 )</div>
+<div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>     {</div>
+<div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong guess fwhm given!\n"</span>) ;</div>
+<div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>     }</div>
+<div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>     <span class="keywordflow">if</span> ( width <= 0 )</div>
+<div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>     {</div>
+<div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong half width given!\n"</span>) ;</div>
+<div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>     } </div>
+<div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>     <span class="keywordflow">if</span> ( min_amplitude <= 0 )</div>
+<div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>     {</div>
+<div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" wrong guess amplitude given!\n"</span>) ;</div>
+<div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>         <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>     } </div>
+<div class="line"><a name="l02948"></a><span class="lineno"> 2948</span> </div>
+<div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>     <span class="comment">/* allocate memory for the spectral sinfo_vector */</span></div>
+<div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>     <span class="keywordflow">if</span> ( NULL == (vline = sinfo_new_vector (2*width + 1)) )</div>
+<div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>     {</div>
+<div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate new Vector \n"</span>) ;</div>
+<div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>         <span class="keywordflow">return</span> -14 ;</div>
+<div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>     }</div>
+<div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>     <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>     xdat = (<span class="keywordtype">float</span> *) cpl_calloc( vline -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>     wdat = (<span class="keywordtype">float</span> *) cpl_calloc( vline -> n_elements, <span class="keyword">sizeof</span> (<span class="keywordtype">float</span>) ) ;</div>
+<div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>     mpar = (<span class="keywordtype">int</span> *)   cpl_calloc( MAXPAR, <span class="keyword">sizeof</span> (<span class="keywordtype">int</span>) ) ;</div>
+<div class="line"><a name="l02959"></a><span class="lineno"> 2959</span> </div>
+<div class="line"><a name="l02960"></a><span class="lineno"> 2960</span> </div>
+<div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>     foundit=cpl_calloc(par[0]->n_params,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>     shift_col=cpl_calloc(lx,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>     wave_cor=cpl_calloc(n_lines,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>     a=cpl_calloc(n_fitcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>     zroot=cpl_calloc(2*(n_fitcoeffs - 1),<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l02966"></a><span class="lineno"> 2966</span> </div>
+<div class="line"><a name="l02967"></a><span class="lineno"> 2967</span> </div>
+<div class="line"><a name="l02968"></a><span class="lineno"> 2968</span> </div>
+<div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>     <span class="comment">/* determine the approximate line positions using the line list and the </span></div>
+<div class="line"><a name="l02970"></a><span class="lineno"> 2970</span> <span class="comment">       coefficients */</span></div>
+<div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>     <span class="comment">/* find out if Angstroem or microns are used */</span></div>
+<div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>     <span class="keywordflow">if</span> ( wavelength[0] > 10000. )</div>
+<div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>     {</div>
+<div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>         <span class="comment">/* Angstroem */</span></div>
+<div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>         angst = 10000. ;</div>
+<div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>     }</div>
+<div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( wavelength[0] > 1000. && wavelength[0] < 10000. )</div>
+<div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>     {</div>
+<div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>         <span class="comment">/* nanometers */</span></div>
+<div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>         angst = 1000. ;</div>
+<div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>     }</div>
+<div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>     {</div>
+<div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>         <span class="comment">/* microns */</span></div>
+<div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>         angst = 1. ;</div>
+<div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>     }</div>
+<div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>     offset = ((float) ly -1.) / 2. ;</div>
+<div class="line"><a name="l02988"></a><span class="lineno"> 2988</span> </div>
+<div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>     k = 0 ;</div>
+<div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>     <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )</div>
+<div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>     {</div>
+<div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>         <span class="comment">/* determine the coefficients by using the given bcoefs */</span></div>
+<div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>         <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ )</div>
+<div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>         {</div>
+<div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>             <span class="comment">/* initialize coefficients and solution */</span></div>
+<div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>             <span class="keywordflow">if</span> (i < n_fitcoeffs-1)</div>
+<div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>             {</div>
+<div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>                 zroot[2*i] = 0. ;</div>
+<div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>                 zroot[2*i+1] = 0. ;</div>
+<div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>             }</div>
+<div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>             a[i] = coeffs[i][col] ;</div>
+<div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>         }</div>
+<div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>         a_initial = a[0] ;</div>
+<div class="line"><a name="l03004"></a><span class="lineno"> 3004</span> </div>
+<div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>         <span class="comment">/* go through the lines */</span></div>
+<div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>         <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>         {</div>
+<div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>             <span class="comment">/* go from Angstroem to micron */</span></div>
+<div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>             wave_cor[line] = wavelength[line]/angst ;</div>
+<div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>             <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)</div>
+<div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>             {</div>
+<div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>                 <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / </div>
+<div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>                          dispersion ) < 2*width ||</div>
+<div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>                     fabs((wave_cor[line] - wave_cor[line+1]) / </div>
+<div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>                          dispersion ) < 2*width )</div>
+<div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>                 {</div>
+<div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>                     continue ;</div>
+<div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>                 }</div>
+<div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>             }</div>
+<div class="line"><a name="l03020"></a><span class="lineno"> 3020</span> </div>
+<div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>             a[0] = a_initial - wave_cor[line] ;</div>
+<div class="line"><a name="l03022"></a><span class="lineno"> 3022</span> </div>
+<div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>             <span class="keywordflow">if</span> (NULL==(w=sinfo_gsl_poly_complex_workspace_alloc(n_fitcoeffs)))</div>
+<div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>             {</div>
+<div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" could not allocate complex workspace!"</span>) ;</div>
+<div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>                 <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>             }</div>
+<div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>             <span class="keywordflow">if</span> (-1 == sinfo_gsl_poly_complex_solve(a, n_fitcoeffs, w, zroot))</div>
+<div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>             {</div>
+<div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" sinfo_gsl_poly_complex_solve did not work!"</span>) ;</div>
+<div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>                 <span class="keywordflow">return</span> FLAG ;</div>
+<div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>             }</div>
+<div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>             sinfo_gsl_poly_complex_workspace_free(w) ;</div>
+<div class="line"><a name="l03034"></a><span class="lineno"> 3034</span> </div>
+<div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>             j = 0 ;</div>
+<div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>             found = -1 ;</div>
+<div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs - 1 ; i++ )</div>
+<div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>             {</div>
+<div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>                 <span class="comment">/* test for appropriate solution */</span></div>
+<div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>                 <span class="keywordflow">if</span>( (zroot[2*i] > (-1.)*(<span class="keywordtype">float</span>) ly/2. &&</div>
+<div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>                      zroot[2*i] < (<span class="keywordtype">float</span>)ly/2.) && zroot[2*i+1] == 0. )</div>
+<div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>                 {</div>
+<div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>                     found = 2*i ;</div>
+<div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>                     j ++ ;</div>
+<div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>                 }</div>
+<div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>                 {</div>
+<div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>                     continue ;</div>
+<div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>                 }</div>
+<div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>             }</div>
+<div class="line"><a name="l03051"></a><span class="lineno"> 3051</span> </div>
+<div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>             <span class="keywordflow">if</span> ( j == 0 )</div>
+<div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>             {</div>
+<div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" no offset solution found for line %d "</span></div>
+<div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>                                   <span class="stringliteral">"in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>                 continue ;</div>
+<div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>             }</div>
+<div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( j == 1 )</div>
+<div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>             {</div>
+<div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>                 cenpos = zroot[found] + (float)ly / 2. ; ;</div>
+<div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>             }</div>
+<div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>             <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>             {</div>
+<div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">" two or more offset solutions found for \</span></div>
+<div class="line"><a name="l03065"></a><span class="lineno"> 3065</span> <span class="stringliteral">                       line %d in column %d\n"</span>, line, col) ;</div>
+<div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>                 continue ;</div>
+<div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>             }</div>
+<div class="line"><a name="l03068"></a><span class="lineno"> 3068</span> </div>
+<div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>             <span class="keywordflow">if</span> ( cenpos <= 0 )</div>
+<div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>             {</div>
+<div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>                 continue ;</div>
+<div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>             }</div>
+<div class="line"><a name="l03073"></a><span class="lineno"> 3073</span> </div>
+<div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>             <span class="comment">/* --------------------------------------------------------------</span></div>
+<div class="line"><a name="l03075"></a><span class="lineno"> 3075</span> <span class="comment">             * fit the single lines using sinfo_linefit and store the </span></div>
+<div class="line"><a name="l03076"></a><span class="lineno"> 3076</span> <span class="comment">             * parameters in</span></div>
+<div class="line"><a name="l03077"></a><span class="lineno"> 3077</span> <span class="comment">             * an array of the FitParams data structure allParams[].</span></div>
+<div class="line"><a name="l03078"></a><span class="lineno"> 3078</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>             <span class="keywordflow">if</span> ( (result = sinfo_new_line_fit ( lineIm, par[k], </div>
+<div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>                                                 fwhm, line, col,</div>
+<div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>                                          width, cenpos, min_amplitude, vline,</div>
+<div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>                                          mpar, xdat, wdat ) ) < 0 )</div>
+<div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>             {</div>
+<div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>              <a class="code" href="group__sinfo__msg.html#ga5011f548e1cbc15d52154469a63343c8" title="Print a debug message.">sinfo_msg_debug</a> (<span class="stringliteral">"sinfo_linefit failed, error no.: %d, "</span></div>
+<div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>                               <span class="stringliteral">"column: %d, row: %f, line: %d\n"</span>, </div>
+<div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>                               result, col, cenpos, line) ;</div>
+<div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>                 continue ;</div>
+<div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>             }</div>
+<div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>             <span class="keywordflow">if</span> ( (par[k] -> fit_par[0] <= 0.) || (par[k] -> fit_par[1] <= 0.)</div>
+<div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>                   || (par[k] -> fit_par[2] <= 0.) )</div>
+<div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>             {</div>
+<div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>                 <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">"negative fit parameters in column: %d, "</span></div>
+<div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>                                    <span class="stringliteral">"line: %d\n"</span>, col, line) ;</div>
+<div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>                 continue ;</div>
+<div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>             }</div>
+<div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>             par[k] -> wavelength = wavelength[line] ;</div>
+<div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>             k++ ;</div>
+<div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>         }</div>
+<div class="line"><a name="l03099"></a><span class="lineno"> 3099</span> </div>
+<div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>     }</div>
+<div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>     </div>
+<div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>     <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>     sinfo_new_destroy_vector(vline);</div>
+<div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>     cpl_free(xdat);</div>
+<div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>     cpl_free(wdat);</div>
+<div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>     cpl_free(mpar);</div>
+<div class="line"><a name="l03107"></a><span class="lineno"> 3107</span> </div>
+<div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>     </div>
+<div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>     c = 0 ;</div>
+<div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>     <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )</div>
+<div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>     {</div>
+<div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>         n = 0 ;</div>
+<div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>         <span class="keywordflow">for</span> ( i = 0 ; i < k ; i++ )</div>
+<div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>         {</div>
+<div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>             <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && </div>
+<div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>                 par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. )</div>
+<div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>             {</div>
+<div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>                 foundit[n] = i ;</div>
+<div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>                 n++ ;</div>
+<div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>             }</div>
+<div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>         }</div>
+<div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>         <span class="keywordflow">if</span> ( n == 0 ) continue ;</div>
+<div class="line"><a name="l03123"></a><span class="lineno"> 3123</span> </div>
+<div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>         shift = 0 ;</div>
+<div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>         z = 0 ;</div>
+<div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>         <span class="keywordflow">for</span> ( j = 0 ; j < n ; j++ )</div>
+<div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>         {</div>
+<div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>             position = par[foundit[j]]->fit_par[2] ; </div>
+<div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>             lambda   = par[foundit[j]]->wavelength ;</div>
+<div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>             line     = par[foundit[j]]->line ;</div>
+<div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>             <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)</div>
+<div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>             {</div>
+<div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>                 <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / </div>
+<div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>                           dispersion ) < 2*width ||</div>
+<div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>                     fabs((wave_cor[line] - wave_cor[line+1]) / </div>
+<div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>                           dispersion ) < 2*width )</div>
+<div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>                 {</div>
+<div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>                     continue ;</div>
+<div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>                 }</div>
+<div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>             }</div>
+<div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>             wave = 0 ;</div>
+<div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ ) </div>
+<div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>             {</div>
+<div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>                 wave += coeffs[i][col]*pow(position-offset, i) ;</div>
+<div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>             }</div>
+<div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>             shift += lambda - wave ;</div>
+<div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>             z++ ;</div>
+<div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>         }</div>
+<div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>         shift_col[c] = shift/(float)z ; </div>
+<div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>         c++ ;</div>
+<div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>     }</div>
+<div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>     <span class="keywordflow">if</span> ( c > 0 )</div>
+<div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>     {</div>
+<div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>         wave_shift = sinfo_new_clean_mean(shift_col, c, 10., 10.) ;</div>
+<div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>         sinfo_msg(<span class="stringliteral">"overall positioning error in microns: %g"</span>, wave_shift) ;</div>
+<div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>     }</div>
+<div class="line"><a name="l03157"></a><span class="lineno"> 3157</span> </div>
+<div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>     <span class="comment">/* determine positioning error for each found line */</span></div>
+<div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>     <span class="keywordflow">for</span> ( line = 0 ; line < n_lines ; line++ )</div>
+<div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>     {</div>
+<div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>         <span class="keywordflow">if</span> (line > 0 && line < n_lines-1)</div>
+<div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>         {</div>
+<div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>             <span class="keywordflow">if</span> (fabs((wave_cor[line] - wave_cor[line-1]) / dispersion ) < </div>
+<div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>                                          2*width ||</div>
+<div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>                 fabs((wave_cor[line] - wave_cor[line+1]) / dispersion ) < </div>
+<div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>                                          2*width )</div>
+<div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>             {</div>
+<div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>                 continue ;</div>
+<div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>             }</div>
+<div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>         }</div>
+<div class="line"><a name="l03171"></a><span class="lineno"> 3171</span> </div>
+<div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>         c = 0 ;</div>
+<div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>         <span class="keywordflow">for</span> ( col = 10 ; col < 25 ; col++ )</div>
+<div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>         {</div>
+<div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>             shift_col[c] = 0. ;</div>
+<div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>             found = -1 ;</div>
+<div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>             <span class="keywordflow">for</span> ( i = 0 ; i < k ; i++ )</div>
+<div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>             {</div>
+<div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>                 <span class="keywordflow">if</span> (par[i]->column == col && par[i]->fit_par[2] != 0. && </div>
+<div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>                     par[i]->fit_par[1] > 1. && par[i]->fit_par[1] < 7. && </div>
+<div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>                     par[i]->line == line )</div>
+<div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>                 {</div>
+<div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>                     found = i ;</div>
+<div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>                 }</div>
+<div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>             }</div>
+<div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>             <span class="keywordflow">if</span> (found == -1) break ;</div>
+<div class="line"><a name="l03187"></a><span class="lineno"> 3187</span> </div>
+<div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>             position = par[found]->fit_par[2] ; </div>
+<div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>             lambda  = par[found]->wavelength ;</div>
+<div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>             wave = 0 ;</div>
+<div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>             <span class="keywordflow">for</span> ( i = 0 ; i < n_fitcoeffs ; i++ ) </div>
+<div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>             {</div>
+<div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>                 wave += coeffs[i][col]*pow(position-offset, i) ;</div>
+<div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>             }</div>
+<div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>             shift_col[c] = lambda - wave ;</div>
+<div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>             c++ ;</div>
+<div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>         }</div>
+<div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>         <span class="keywordflow">if</span> (found != -1 && c > 0 )</div>
+<div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>         {</div>
+<div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>             sinfo_msg(<span class="stringliteral">"shift in microns: %g at wavelength: %f\n"</span>, </div>
+<div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>             sinfo_new_clean_mean(shift_col, c, 20., 20.), lambda) ;</div>
+<div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>         }</div>
+<div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>     }</div>
+<div class="line"><a name="l03204"></a><span class="lineno"> 3204</span> </div>
+<div class="line"><a name="l03205"></a><span class="lineno"> 3205</span> </div>
+<div class="line"><a name="l03206"></a><span class="lineno"> 3206</span> </div>
+<div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>     cpl_free(foundit) ;</div>
+<div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>     cpl_free(shift_col) ;</div>
+<div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>     cpl_free(wave_cor) ;</div>
+<div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>     cpl_free(a) ;</div>
+<div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>     cpl_free(zroot) ;</div>
+<div class="line"><a name="l03212"></a><span class="lineno"> 3212</span> </div>
+<div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>     <span class="keywordflow">return</span> wave_shift ;</div>
+<div class="line"><a name="l03214"></a><span class="lineno"> 3214</span> }</div>
+<div class="line"><a name="l03215"></a><span class="lineno"> 3215</span> </div>
+<div class="line"><a name="l03216"></a><span class="lineno"> 3216</span> </div>
+<div class="line"><a name="l03217"></a><span class="lineno"> 3217</span> </div>
+<div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>  <span class="keyword">static</span> <span class="keywordtype">int</span>   </div>
+<div class="line"><a name="l03243"></a><span class="lineno"> 3243</span> sinfo_new_spred_coeffs_cross_slit_fit ( <span class="keywordtype">int</span>      n_columns,</div>
+<div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>                             <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>                             <span class="keywordtype">float</span> ** dacoefs,</div>
+<div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>                             Bcoeffs* bco,</div>
+<div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>                             <span class="keywordtype">float</span>    sigma_factor,</div>
+<div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>                             <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>                             <span class="keywordtype">float</span>    pixel_dist,</div>
+<div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>                             <span class="keywordtype">float</span>  * chisq,</div>
+<div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>                           <span class="keywordtype">float</span> ** sinfo_slit_pos )</div>
+<div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>  {</div>
+<div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>      <span class="keywordtype">float</span> col_index;</div>
+<div class="line"><a name="l03254"></a><span class="lineno"> 3254</span> </div>
+<div class="line"><a name="l03255"></a><span class="lineno"> 3255</span> </div>
+<div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>      <span class="keywordtype">float</span> ** ucoefs, **vcoefs, **covar ;</div>
+<div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>      <span class="keywordtype">float</span> * acoefsclean ;</div>
+<div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>      <span class="keywordtype">double</span> sum, sumq, mean ;</div>
+<div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>      <span class="keywordtype">double</span> sigma ;</div>
+<div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>      <span class="keywordtype">double</span> cliphi, cliplo ;</div>
+<div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>      <span class="keywordtype">float</span> offset ;</div>
+<div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>      <span class="keywordtype">float</span> threshold ;</div>
+<div class="line"><a name="l03263"></a><span class="lineno"> 3263</span> </div>
+<div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>      <span class="keywordtype">int</span>* edge=NULL ;</div>
+<div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>      <span class="keywordtype">float</span>* sub_col_index=NULL ;</div>
+<div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>      <span class="keywordtype">float</span>* sub_acoefs=NULL;</div>
+<div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>      <span class="keywordtype">float</span>* sub_dacoefs=NULL ;</div>
+<div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>      <span class="keywordtype">float</span>* wcoefs=NULL ;</div>
+<div class="line"><a name="l03269"></a><span class="lineno"> 3269</span> </div>
+<div class="line"><a name="l03270"></a><span class="lineno"> 3270</span> </div>
+<div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>      <span class="keywordtype">int</span> ed1, ed2 ;</div>
+<div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>      <span class="keywordtype">int</span> i, n, num, ndata ;</div>
+<div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>      <span class="keywordtype">int</span> nc, ns ;</div>
+<div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>      <span class="keywordtype">int</span> loc_index ;</div>
+<div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>      <span class="keywordtype">int</span> sl_index;</div>
+<div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>      <span class="keywordtype">int</span> last_i=PIXEL;</div>
+<div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>  </div>
+<div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>      <span class="keywordflow">if</span> ( n_columns < 1 )</div>
+<div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>      {</div>
+<div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" wrong number of image columns given\n"</span>) ;</div>
+<div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>      }</div>
+<div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>      <span class="keywordflow">if</span> ( acoefs == NULL || dacoefs == NULL )</div>
+<div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>      {</div>
+<div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" acoeffs or errors of coefficients are not given"</span>) ;</div>
+<div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>      }</div>
+<div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>      <span class="keywordflow">if</span> ( bco == NULL )</div>
+<div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>      {</div>
+<div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" bcoeffs are not allocated\n"</span>) ;</div>
+<div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>      }</div>
+<div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>      <span class="keywordflow">if</span> ( sigma_factor <= 0. )</div>
+<div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>      {</div>
+<div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigma_factor given!\n"</span>) ;</div>
+<div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>      }</div>
+<div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>      <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>      {</div>
+<div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible dispersion given!\n"</span>) ;</div>
+<div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>      }</div>
+<div class="line"><a name="l03303"></a><span class="lineno"> 3303</span> </div>
+<div class="line"><a name="l03304"></a><span class="lineno"> 3304</span> </div>
+<div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>      edge=cpl_calloc(bco->n_slitlets,<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) ;</div>
+<div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>      sub_col_index=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>      sub_acoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>));</div>
+<div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>      sub_dacoefs=cpl_calloc(n_columns,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03309"></a><span class="lineno"> 3309</span> </div>
+<div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>      wcoefs=cpl_calloc(bco->n_bcoeffs,<span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)) ;</div>
+<div class="line"><a name="l03311"></a><span class="lineno"> 3311</span> </div>
+<div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>      <span class="comment">/*------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l03313"></a><span class="lineno"> 3313</span> <span class="comment">      * search for the slitlet edges by comparing the a0 coefficients along i</span></div>
+<div class="line"><a name="l03314"></a><span class="lineno"> 3314</span> <span class="comment">      * the columns</span></div>
+<div class="line"><a name="l03315"></a><span class="lineno"> 3315</span> <span class="comment">      * if a bigger deviation occurrs it is assumed that there is an edge.</span></div>
+<div class="line"><a name="l03316"></a><span class="lineno"> 3316</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>      n = 0 ;</div>
+<div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>      threshold = pixel_dist * fabs(dispersion) ;</div>
+<div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>      sinfo_slit_pos[0][0]=0 ;</div>
+<div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>      sl_index  = 0;</div>
+<div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>      <span class="comment">/* it was for ( i = PIXEL ; i  < n_columns - PIXEL ; ) */</span></div>
+<div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>      <span class="keywordflow">for</span> ( i = 0 ; i  < n_columns - PIXEL ; )</div>
+<div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>      {</div>
+<div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>          <span class="keywordflow">if</span> ( !isnan(acoefs[0][i+1]) && </div>
+<div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>                      acoefs[0][i+1] != 0. && </div>
+<div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>                      acoefs[0][i] != 0.</div>
+<div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>                    && dacoefs[0][i+1] != 0.)</div>
+<div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>          {</div>
+<div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>              <span class="keywordflow">if</span> ( isnan(acoefs[0][i]) || acoefs[0][i] == 0. )</div>
+<div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>              {</div>
+<div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>                  <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i-1]) >= threshold )</div>
+<div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>              {</div>
+<div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>              <span class="comment">/* printf("case a pos1 %d pos2 %d \n",i,i+1); */</span></div>
+<div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>                      edge[n] = i+1 ;</div>
+<div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>              sinfo_slit_pos[sl_index][1] = i ;</div>
+<div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>              sinfo_slit_pos[sl_index+1][0] = i + 1 ;</div>
+<div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>              sl_index++;</div>
+<div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>                      n++ ;</div>
+<div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>              last_i = i;</div>
+<div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>                      i += PIXEL ;</div>
+<div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>                  }</div>
+<div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>              }</div>
+<div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>              <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>              {</div>
+<div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>                  <span class="keywordflow">if</span> (fabs(acoefs[0][i+1] - acoefs[0][i]) >= threshold )</div>
+<div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>              {</div>
+<div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>              <span class="comment">/* printf("case b pos1 %d pos2 %d \n",i,i+1); */</span></div>
+<div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>                      edge[n] = i+1 ;</div>
+<div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>              sinfo_slit_pos[sl_index][1] = i ;</div>
+<div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>              sinfo_slit_pos[sl_index+1][0] = i + 1 ;</div>
+<div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>              sl_index++;</div>
+<div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>                      n++ ;</div>
+<div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>              last_i = i;</div>
+<div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>                      i += PIXEL ;</div>
+<div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>                  }</div>
+<div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>              }</div>
+<div class="line"><a name="l03357"></a><span class="lineno"> 3357</span> </div>
+<div class="line"><a name="l03358"></a><span class="lineno"> 3358</span> </div>
+<div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>             <span class="comment">/* sometimes a slitlet may be lost due to divergences in </span></div>
+<div class="line"><a name="l03360"></a><span class="lineno"> 3360</span> <span class="comment">                acoeffs[0] we try to recover it */</span></div>
+<div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>              <span class="keywordflow">if</span>( ( (i-last_i) > 63 ) && </div>
+<div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>                 ( isnan(fabs(acoefs[0][i+1] - acoefs[0][i])) ||</div>
+<div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>                   isnan(fabs(acoefs[0][i+1] - acoefs[0][i-1])) ) ) </div>
+<div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>          {</div>
+<div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>                      edge[n] = i+1 ;</div>
+<div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>                      sinfo_slit_pos[sl_index][1] = i ;</div>
+<div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>                      sinfo_slit_pos[sl_index+1][0] = i + 1 ;</div>
+<div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>                      sl_index++;</div>
+<div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>                      n++ ;</div>
+<div class="line"><a name="l03370"></a><span class="lineno"> 3370</span> </div>
+<div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>                      last_i = i;</div>
+<div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>                      <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"2 recovered slitlet edge i=%d"</span>,i);</div>
+<div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>                      i += PIXEL ;</div>
+<div class="line"><a name="l03374"></a><span class="lineno"> 3374</span> </div>
+<div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>          }</div>
+<div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>          }</div>
+<div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>          i++ ;</div>
+<div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>      }</div>
+<div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>      sinfo_slit_pos[sl_index][1]  = 2047;</div>
+<div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>      <span class="comment">/* printf("2 Found n slitlest: %d check %d\n", n,bco->n_slitlets - 1); */</span></div>
+<div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>      <span class="keywordflow">if</span> ( n != bco->n_slitlets - 1 )</div>
+<div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>      {</div>
+<div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not find the right number of "</span></div>
+<div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>                          <span class="stringliteral">"slitlets, found: %d\n"</span>,n+1) ;</div>
+<div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>          <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>      }</div>
+<div class="line"><a name="l03387"></a><span class="lineno"> 3387</span> </div>
+<div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>      <span class="comment">/* go through the coefficents indices */</span></div>
+<div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>      <span class="keywordflow">for</span> ( loc_index = 0 ; loc_index < bco->n_acoeffs ; loc_index++ )</div>
+<div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>      {</div>
+<div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>          <span class="comment">/* go through the single slitlets */</span></div>
+<div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>          <span class="keywordflow">for</span> ( ns = 0 ; ns < bco->n_slitlets ; ns++ )</div>
+<div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>          {</div>
+<div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>              <span class="comment">/* determine the slitlet edges */</span></div>
+<div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>              <span class="keywordflow">if</span> ( ns == 0 )</div>
+<div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>              {</div>
+<div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>                  ed1 = 0 ;</div>
+<div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>                  ed2 = edge[0] ;</div>
+<div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>              }</div>
+<div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>              <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ns == bco->n_slitlets - 1 )</div>
+<div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>              {</div>
+<div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>                  ed1 = edge[bco->n_slitlets - 2] ;</div>
+<div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>                  ed2 = n_columns ;</div>
+<div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>              }</div>
+<div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>              <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>              {</div>
+<div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>                  ed1 = edge[ns-1] ;</div>
+<div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>                  ed2 = edge[ns] ;</div>
+<div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>              }</div>
+<div class="line"><a name="l03410"></a><span class="lineno"> 3410</span> </div>
+<div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>              nc = 0 ;</div>
+<div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>              <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>              {</div>
+<div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>                  <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || </div>
+<div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>                             acoefs[loc_index][i] == 0. || </div>
+<div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>                            dacoefs[loc_index][i] == 0. )</div>
+<div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>                  {</div>
+<div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>                      continue ;</div>
+<div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>                  }</div>
+<div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>                  <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>                  {</div>
+<div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>                      nc++ ;</div>
+<div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>                  }</div>
+<div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>              }</div>
+<div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>              <span class="keywordflow">if</span> (NULL==(acoefsclean=(<span class="keywordtype">float</span>*) cpl_calloc(nc , <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>              {</div>
+<div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>                  <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"could not allocate memory for acoefsclean!"</span>);</div>
+<div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>                  <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>              }</div>
+<div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>              nc = 0 ;</div>
+<div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>              <span class="keywordflow">for</span> ( i = ed1 ; i  < ed2 ; i++ )</div>
+<div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>             {</div>
+<div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>                 <span class="keywordflow">if</span> ( isnan(acoefs[loc_index][i]) || </div>
+<div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>                            acoefs[loc_index][i] == 0. || </div>
+<div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>                           dacoefs[loc_index][i] == 0. )</div>
+<div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>                 {</div>
+<div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>                     continue ;</div>
+<div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>                 }</div>
+<div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>                 <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>                 {</div>
+<div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>                     acoefsclean[nc] = acoefs[loc_index][i] ;</div>
+<div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>                     nc++ ;</div>
+<div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>                 }</div>
+<div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>             }</div>
+<div class="line"><a name="l03445"></a><span class="lineno"> 3445</span> </div>
+<div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>             <span class="comment">/* ----------------------------------------------------------</span></div>
+<div class="line"><a name="l03447"></a><span class="lineno"> 3447</span> <span class="comment">             * determine the clean mean and sigma value of the coefficients,</span></div>
+<div class="line"><a name="l03448"></a><span class="lineno"> 3448</span> <span class="comment">             * that means reject 10 % of the extreme low and high values</span></div>
+<div class="line"><a name="l03449"></a><span class="lineno"> 3449</span> <span class="comment">             */</span></div>
+<div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>             sinfo_pixel_qsort(acoefsclean, nc) ;</div>
+<div class="line"><a name="l03451"></a><span class="lineno"> 3451</span> </div>
+<div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>             sum   = 0. ;</div>
+<div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>             sumq  = 0. ;</div>
+<div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>             mean  = 0. ;</div>
+<div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>             sigma = 0. ;</div>
+<div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>             n     = 0 ;</div>
+<div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>             <span class="keywordflow">for</span> ( i = (<span class="keywordtype">int</span>)((<span class="keywordtype">float</span>)nc*LOW_REJECT) ; </div>
+<div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>                   i < (int)((<span class="keywordtype">float</span>)nc*HIGH_REJECT) ; i++ )</div>
+<div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>             {</div>
+<div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>                 sum  += (double)acoefsclean[i] ;</div>
+<div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>                 sumq += ((double)acoefsclean[i] * (<span class="keywordtype">double</span>)acoefsclean[i]) ;</div>
+<div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>                 n ++ ;</div>
+<div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>             }</div>
+<div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>             mean          = sum/(double)n ;</div>
+<div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>             sigma         = sqrt( sumq/(<span class="keywordtype">double</span>)n - (mean * mean) ) ;</div>
+<div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>             cliphi        = mean + sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>             cliplo        = mean - sigma * (double)sigma_factor ;</div>
+<div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>             <span class="comment">/* fit only the reasonnable values */</span></div>
+<div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>             num = 0 ;</div>
+<div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>             col_index = 0 ;</div>
+<div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2 ; i++ )</div>
+<div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>             {</div>
+<div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>                 <span class="comment">/* take only the reasonnable coefficients */</span></div>
+<div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>                 <span class="keywordflow">if</span> ( !isnan(acoefs[loc_index][i]) && </div>
+<div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>                            (acoefs[loc_index][i] <= cliphi) && </div>
+<div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>                            (acoefs[loc_index][i] >= cliplo) &&</div>
+<div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>                      (dacoefs[loc_index][i] != 0. ) && </div>
+<div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>              (acoefs[loc_index][i] != 0.) )</div>
+<div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>                 {</div>
+<div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>                     sub_acoefs[num]    = acoefs[loc_index][i] ;</div>
+<div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>                     sub_dacoefs[num]   = dacoefs[loc_index][i] ;</div>
+<div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>                     sub_col_index[num] = col_index ;</div>
+<div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>                     num ++ ;</div>
+<div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>                 }</div>
+<div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>                 col_index++ ;</div>
+<div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>             }</div>
+<div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>             ndata = num ;</div>
+<div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>             offset = (float)(col_index-1) / 2. ;</div>
+<div class="line"><a name="l03489"></a><span class="lineno"> 3489</span> </div>
+<div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>             <span class="keywordflow">if</span> ( ndata < bco->n_bcoeffs )</div>
+<div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>             {</div>
+<div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>                 <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" not enough data found in slitlet %da"</span></div>
+<div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>                                 <span class="stringliteral">" to determine the fit coefficients.\n"</span>, ns) ;</div>
+<div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>                 cpl_free(acoefsclean) ;</div>
+<div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>                 <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>             }</div>
+<div class="line"><a name="l03497"></a><span class="lineno"> 3497</span> </div>
+<div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>             <span class="comment">/* allocate coefficient matrices */</span></div>
+<div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>             ucoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>             vcoefs = sinfo_matrix(1, ndata, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>             covar  = sinfo_matrix(1, bco->n_bcoeffs, 1, bco->n_bcoeffs) ;</div>
+<div class="line"><a name="l03502"></a><span class="lineno"> 3502</span> </div>
+<div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>             <span class="comment">/* scale the x-values for the fit */</span></div>
+<div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>             <span class="keywordflow">for</span> ( i = 0 ; i < ndata ; i++ )</div>
+<div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>             {</div>
+<div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>                 sub_col_index[i] = (sub_col_index[i] - offset) / offset ;</div>
+<div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>             }</div>
+<div class="line"><a name="l03508"></a><span class="lineno"> 3508</span> </div>
+<div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>             <span class="comment">/* finally, do the singular value decomposition fit */</span></div>
+<div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>             sinfo_svd_fitting ( sub_col_index-1, sub_acoefs-1, </div>
+<div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>                                 sub_dacoefs-1, ndata, bco[ns].b[loc_index]-1,</div>
+<div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>                                 bco->n_bcoeffs, ucoefs, vcoefs, wcoefs-1, </div>
+<div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>                                 covar, &chisq[ns], sinfo_fpol ) ;</div>
+<div class="line"><a name="l03514"></a><span class="lineno"> 3514</span> </div>
+<div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>             <span class="comment">/* scale the found coefficients */</span></div>
+<div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>             <span class="keywordflow">for</span> ( i = 0 ; i < bco->n_bcoeffs ; i ++ )</div>
+<div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>             {</div>
+<div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>                 bco[ns].b[loc_index][i] /= pow( offset, i ) ;</div>
+<div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>             }</div>
+<div class="line"><a name="l03520"></a><span class="lineno"> 3520</span> </div>
+<div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>             <span class="comment">/* free memory */</span></div>
+<div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>             cpl_free (acoefsclean) ;</div>
+<div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>             sinfo_free_matrix( ucoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>             sinfo_free_matrix( vcoefs, 1<span class="comment">/*, ndata*/</span>, 1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>             sinfo_free_matrix( covar, 1<span class="comment">/*, bco->n_bcoeffs*/</span>, </div>
+<div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>                                1<span class="comment">/*, bco->n_bcoeffs */</span>) ;</div>
+<div class="line"><a name="l03527"></a><span class="lineno"> 3527</span> </div>
+<div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>             <span class="comment">/* now calculate the smoothed acoefs for each column */</span></div>
+<div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>             col_index = 0 ;</div>
+<div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>             <span class="keywordflow">for</span> ( i = ed1 ; i < ed2  ; i++ )</div>
+<div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>             {</div>
+<div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>                 acoefs[loc_index][i] = 0. ;</div>
+<div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>                 <span class="keywordflow">for</span> ( n = 0 ; n < bco->n_bcoeffs ; n++ )</div>
+<div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>                 {</div>
+<div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>                     acoefs[loc_index][i] += bco[ns].b[loc_index][n] * </div>
+<div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>                                         pow(col_index - offset, n) ;</div>
+<div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>                 }</div>
+<div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>                 col_index++ ;</div>
+<div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>             }</div>
+<div class="line"><a name="l03540"></a><span class="lineno"> 3540</span> </div>
+<div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>         }</div>
+<div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>     }</div>
+<div class="line"><a name="l03543"></a><span class="lineno"> 3543</span> </div>
+<div class="line"><a name="l03544"></a><span class="lineno"> 3544</span> </div>
+<div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>     cpl_free(edge) ;</div>
+<div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>     cpl_free(sub_col_index) ;</div>
+<div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>     cpl_free(sub_acoefs);</div>
+<div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>     cpl_free(sub_dacoefs) ;</div>
+<div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>     cpl_free(wcoefs) ;</div>
+<div class="line"><a name="l03550"></a><span class="lineno"> 3550</span> </div>
+<div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>     <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l03552"></a><span class="lineno"> 3552</span> }</div>
+<div class="line"><a name="l03553"></a><span class="lineno"> 3553</span> </div>
+<div class="line"><a name="l03554"></a><span class="lineno"> 3554</span> </div>
+<div class="line"><a name="l03603"></a><span class="lineno"> 3603</span> cpl_image * sinfo_new_spred_wave_cal( cpl_image   * image,</div>
+<div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>                     FitParams ** par ,</div>
+<div class="line"><a name="l03605"></a><span class="lineno"> 3605</span>                     <span class="keywordtype">float</span>     ** abuf,</div>
+<div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>                     <span class="keywordtype">int</span>          n_slitlets,</div>
+<div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>                     <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>                     <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>                     <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>                     <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>                     <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>                     <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>                     <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>                     <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>                     <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>                     <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>                     <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>                     <span class="keywordtype">float</span>        pixel_dist,</div>
+<div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>                     <span class="keywordtype">float</span>        pixel_tolerance,</div>
+<div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>                   <span class="keywordtype">float</span> ** sinfo_slit_pos)</div>
+<div class="line"><a name="l03621"></a><span class="lineno"> 3621</span> </div>
+<div class="line"><a name="l03622"></a><span class="lineno"> 3622</span> </div>
+<div class="line"><a name="l03623"></a><span class="lineno"> 3623</span> {</div>
+<div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>     <span class="keywordtype">int</span>          i, j, k ;</div>
+<div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>     <span class="keywordtype">int</span>          n_fit ;</div>
+<div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>     <span class="keywordtype">int</span>          n_reject ;</div>
+<div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>     <span class="keywordtype">float</span>     *  acoefs ;</div>
+<div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>     <span class="keywordtype">float</span>     *  dacoefs ;</div>
+<div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>     <span class="keywordtype">float</span>     ** dabuf ;</div>
+<div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>     <span class="keywordtype">float</span>        chisq_poly ;</div>
+<div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>     <span class="keywordtype">float</span>     *  chisq_cross ;</div>
+<div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>     <span class="keywordtype">int</span>          zeroind ;</div>
+<div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>     <span class="keywordtype">int</span>          crossInd ;</div>
+<div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>     Bcoeffs   *  bco ;</div>
+<div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>     cpl_image  *  wavemap ;</div>
+<div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>     <span class="keywordtype">int</span> ilx=0;</div>
+<div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>     <span class="keywordtype">int</span> ily=0;</div>
+<div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>     <span class="keywordtype">float</span>* pidata=NULL;</div>
+<div class="line"><a name="l03639"></a><span class="lineno"> 3639</span> </div>
+<div class="line"><a name="l03640"></a><span class="lineno"> 3640</span> </div>
+<div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>     <span class="keywordflow">if</span> (  NULL == image )</div>
+<div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>     {</div>
+<div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no image given\n"</span>) ;</div>
+<div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>     }</div>
+<div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>     ilx=cpl_image_get_size_x(image);</div>
+<div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>     ily=cpl_image_get_size_y(image);</div>
+<div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>     pidata=cpl_image_get_data_float(image);</div>
+<div class="line"><a name="l03649"></a><span class="lineno"> 3649</span> </div>
+<div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>     <span class="keywordflow">if</span> ( par == NULL )</div>
+<div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>     {</div>
+<div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no fit parameter data structure given\n"</span>) ;</div>
+<div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>     }</div>
+<div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>     <span class="keywordflow">if</span> ( abuf == NULL )</div>
+<div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>     {</div>
+<div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no buffer for fit coefficients given\n"</span>) ;</div>
+<div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>     }</div>
+<div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>     <span class="keywordflow">if</span> ( n_slitlets <= 0 )</div>
+<div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>     {</div>
+<div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible number of slitlets given\n"</span>) ;</div>
+<div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>     }</div>
+<div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>     <span class="keywordflow">if</span> ( row_clean == NULL )</div>
+<div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>     {</div>
+<div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no row_clean array given\n"</span>) ;</div>
+<div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>     }</div>
+<div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>     <span class="keywordflow">if</span> ( wavelength_clean == NULL )</div>
+<div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>     {</div>
+<div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" no wavelength_clean array given\n"</span>) ;</div>
+<div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>     }</div>
+<div class="line"><a name="l03675"></a><span class="lineno"> 3675</span> </div>
+<div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>     <span class="keywordflow">if</span> ( dispersion == 0. )</div>
+<div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>     {</div>
+<div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible dispersion given\n"</span>) ;</div>
+<div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>     }</div>
+<div class="line"><a name="l03681"></a><span class="lineno"> 3681</span> </div>
+<div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>     <span class="keywordflow">if</span> ( halfWidth <= 0 || halfWidth > ily/2 )</div>
+<div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>     {</div>
+<div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible half width of the fitting box given\n"</span>) ;</div>
+<div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>     }</div>
+<div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>     <span class="keywordflow">if</span> ( minAmplitude < 1. )</div>
+<div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>      {</div>
+<div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible minimal amplitude\n"</span>) ;</div>
+<div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>      }</div>
+<div class="line"><a name="l03692"></a><span class="lineno"> 3692</span> </div>
+<div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>      <span class="keywordflow">if</span> ( max_residual <= 0. || max_residual > 1. )</div>
+<div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>      {</div>
+<div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible max_residual given\n"</span>) ;</div>
+<div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>      }</div>
+<div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>      <span class="keywordflow">if</span> ( fwhm <= 0. || fwhm > 10. )</div>
+<div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>      {</div>
+<div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible fwhm given\n"</span>) ;</div>
+<div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>      }</div>
+<div class="line"><a name="l03703"></a><span class="lineno"> 3703</span> </div>
+<div class="line"><a name="l03704"></a><span class="lineno"> 3704</span>      <span class="keywordflow">if</span> ( n_a_fitcoefs <= 0 || n_a_fitcoefs > 9 )</div>
+<div class="line"><a name="l03705"></a><span class="lineno"> 3705</span>      {</div>
+<div class="line"><a name="l03706"></a><span class="lineno"> 3706</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_a_fitcoefs given\n"</span>) ;</div>
+<div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>      }</div>
+<div class="line"><a name="l03709"></a><span class="lineno"> 3709</span> </div>
+<div class="line"><a name="l03710"></a><span class="lineno"> 3710</span>      <span class="keywordflow">if</span> ( n_b_fitcoefs <= 0 || n_b_fitcoefs > 9 )</div>
+<div class="line"><a name="l03711"></a><span class="lineno"> 3711</span>      {</div>
+<div class="line"><a name="l03712"></a><span class="lineno"> 3712</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" unrealistic n_b_fitcoefs given\n"</span>) ;</div>
+<div class="line"><a name="l03713"></a><span class="lineno"> 3713</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>      }</div>
+<div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>      <span class="keywordflow">if</span> ( sigmaFactor <= 0. )</div>
+<div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>      {</div>
+<div class="line"><a name="l03717"></a><span class="lineno"> 3717</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" impossible sigmaFactor given\n"</span>) ;</div>
+<div class="line"><a name="l03718"></a><span class="lineno"> 3718</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03719"></a><span class="lineno"> 3719</span>      }</div>
+<div class="line"><a name="l03720"></a><span class="lineno"> 3720</span> </div>
+<div class="line"><a name="l03721"></a><span class="lineno"> 3721</span>      <span class="comment">/* initialize the variables */</span></div>
+<div class="line"><a name="l03722"></a><span class="lineno"> 3722</span>      n_reject = 0 ;</div>
+<div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>      n_fit = 0 ;</div>
+<div class="line"><a name="l03724"></a><span class="lineno"> 3724</span> </div>
+<div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>      <span class="comment">/* fit each found line by using a sinfo_gaussian function and </span></div>
+<div class="line"><a name="l03726"></a><span class="lineno"> 3726</span> <span class="comment">        determine the exact position */</span></div>
+<div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>      <span class="keywordflow">if</span> ( 0 > (n_fit = sinfo_new_fit_lines( image , par, fwhm, n_found_lines, </div>
+<div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>                                       row_clean, wavelength_clean,</div>
+<div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>                                       halfWidth, minAmplitude )) )</div>
+<div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>      {</div>
+<div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, error code of "</span></div>
+<div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>                          <span class="stringliteral">"sinfo_fitLines: %d"</span>, n_fit) ;</div>
+<div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>      }</div>
+<div class="line"><a name="l03735"></a><span class="lineno"> 3735</span> </div>
+<div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>      <span class="comment">/* first check for faked lines like bad pixels */</span></div>
+<div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>      <span class="keywordflow">if</span> ( -1 == sinfo_new_check_for_fake_lines (par, </div>
+<div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>                                                 dispersion, </div>
+<div class="line"><a name="l03739"></a><span class="lineno"> 3739</span>                                                 wavelength_clean, </div>
+<div class="line"><a name="l03740"></a><span class="lineno"> 3740</span>                                                 row_clean, </div>
+<div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>                                                 n_found_lines,</div>
+<div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>                                                 ilx, </div>
+<div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>                                                 pixel_tolerance) )</div>
+<div class="line"><a name="l03744"></a><span class="lineno"> 3744</span>      {</div>
+<div class="line"><a name="l03745"></a><span class="lineno"> 3745</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot fit the lines, error code of "</span></div>
+<div class="line"><a name="l03746"></a><span class="lineno"> 3746</span>                          <span class="stringliteral">" sinfo_fitLines: %d\n"</span>, n_fit) ;</div>
+<div class="line"><a name="l03747"></a><span class="lineno"> 3747</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03748"></a><span class="lineno"> 3748</span>      }</div>
+<div class="line"><a name="l03749"></a><span class="lineno"> 3749</span> </div>
+<div class="line"><a name="l03750"></a><span class="lineno"> 3750</span> </div>
+<div class="line"><a name="l03751"></a><span class="lineno"> 3751</span>      <span class="comment">/* allocate memory */</span></div>
+<div class="line"><a name="l03752"></a><span class="lineno"> 3752</span>      <span class="keywordflow">if</span> (NULL==(acoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||</div>
+<div class="line"><a name="l03753"></a><span class="lineno"> 3753</span>          NULL==(dacoefs = (<span class="keywordtype">float</span>*) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) ||</div>
+<div class="line"><a name="l03754"></a><span class="lineno"> 3754</span>          NULL==(dabuf = (<span class="keywordtype">float</span>**) cpl_calloc (n_a_fitcoefs, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>*))) ||</div>
+<div class="line"><a name="l03755"></a><span class="lineno"> 3755</span>          NULL==(chisq_cross = (<span class="keywordtype">float</span>*) cpl_calloc(n_slitlets, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l03756"></a><span class="lineno"> 3756</span>      {</div>
+<div class="line"><a name="l03757"></a><span class="lineno"> 3757</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l03758"></a><span class="lineno"> 3758</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03759"></a><span class="lineno"> 3759</span>      }</div>
+<div class="line"><a name="l03760"></a><span class="lineno"> 3760</span>      <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l03761"></a><span class="lineno"> 3761</span>      {</div>
+<div class="line"><a name="l03762"></a><span class="lineno"> 3762</span>          <span class="keywordflow">if</span> (  NULL == (dabuf[i] = (<span class="keywordtype">float</span>*) cpl_calloc(ilx, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>))) )</div>
+<div class="line"><a name="l03763"></a><span class="lineno"> 3763</span>          {</div>
+<div class="line"><a name="l03764"></a><span class="lineno"> 3764</span>              <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">" cannot allocate memory\n"</span>) ;</div>
+<div class="line"><a name="l03765"></a><span class="lineno"> 3765</span>              cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l03766"></a><span class="lineno"> 3766</span>              cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l03767"></a><span class="lineno"> 3767</span>              cpl_free ( chisq_cross ) ;</div>
+<div class="line"><a name="l03768"></a><span class="lineno"> 3768</span>              cpl_free(dabuf) ;</div>
+<div class="line"><a name="l03769"></a><span class="lineno"> 3769</span>              <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03770"></a><span class="lineno"> 3770</span>          }</div>
+<div class="line"><a name="l03771"></a><span class="lineno"> 3771</span>      }</div>
+<div class="line"><a name="l03772"></a><span class="lineno"> 3772</span> </div>
+<div class="line"><a name="l03773"></a><span class="lineno"> 3773</span>      <span class="comment">/* fit wavelengths to the corresponding found positions for each column */</span></div>
+<div class="line"><a name="l03774"></a><span class="lineno"> 3774</span>      k = 0 ;</div>
+<div class="line"><a name="l03775"></a><span class="lineno"> 3775</span>      <span class="keywordflow">for</span> ( i = 0 ; i < ilx ; i++ )</div>
+<div class="line"><a name="l03776"></a><span class="lineno"> 3776</span>      {</div>
+<div class="line"><a name="l03777"></a><span class="lineno"> 3777</span>          zeroind = 0 ;</div>
+<div class="line"><a name="l03778"></a><span class="lineno"> 3778</span>          <span class="keywordflow">if</span> ( FLT_MAX == (chisq_poly = sinfo_new_polyfit( par, i, </div>
+<div class="line"><a name="l03779"></a><span class="lineno"> 3779</span>                                                          n_found_lines[i], </div>
+<div class="line"><a name="l03780"></a><span class="lineno"> 3780</span>                                                          ily, dispersion,</div>
+<div class="line"><a name="l03781"></a><span class="lineno"> 3781</span>                                                          max_residual, acoefs,</div>
+<div class="line"><a name="l03782"></a><span class="lineno"> 3782</span>                                                          dacoefs, &n_reject, </div>
+<div class="line"><a name="l03783"></a><span class="lineno"> 3783</span>                                                          n_a_fitcoefs)) )</div>
+<div class="line"><a name="l03784"></a><span class="lineno"> 3784</span>          {</div>
+<div class="line"><a name="l03785"></a><span class="lineno"> 3785</span>              <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a> (<span class="stringliteral">" error in sinfo_polyfit in column: %d\n"</span>, i) ;</div>
+<div class="line"><a name="l03786"></a><span class="lineno"> 3786</span>              <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l03787"></a><span class="lineno"> 3787</span>              {</div>
+<div class="line"><a name="l03788"></a><span class="lineno"> 3788</span>                  acoefs[j] = ZERO ;</div>
+<div class="line"><a name="l03789"></a><span class="lineno"> 3789</span>                  dacoefs[j] = ZERO ;</div>
+<div class="line"><a name="l03790"></a><span class="lineno"> 3790</span>              }</div>
+<div class="line"><a name="l03791"></a><span class="lineno"> 3791</span>          }</div>
+<div class="line"><a name="l03792"></a><span class="lineno"> 3792</span> </div>
+<div class="line"><a name="l03793"></a><span class="lineno"> 3793</span>          <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l03794"></a><span class="lineno"> 3794</span>          {</div>
+<div class="line"><a name="l03795"></a><span class="lineno"> 3795</span> </div>
+<div class="line"><a name="l03796"></a><span class="lineno"> 3796</span>              <span class="keywordflow">if</span> ( acoefs[0] <= 0. || acoefs[1] ==0. ||</div>
+<div class="line"><a name="l03797"></a><span class="lineno"> 3797</span>                   dacoefs[j] == 0. || isnan(acoefs[j]) )</div>
+<div class="line"><a name="l03798"></a><span class="lineno"> 3798</span>              {</div>
+<div class="line"><a name="l03799"></a><span class="lineno"> 3799</span>                  zeroind = 1 ;</div>
+<div class="line"><a name="l03800"></a><span class="lineno"> 3800</span>              }</div>
+<div class="line"><a name="l03801"></a><span class="lineno"> 3801</span>          }</div>
+<div class="line"><a name="l03802"></a><span class="lineno"> 3802</span>          <span class="keywordflow">for</span> ( j = 0 ; j < n_a_fitcoefs ; j++ )</div>
+<div class="line"><a name="l03803"></a><span class="lineno"> 3803</span>          {</div>
+<div class="line"><a name="l03804"></a><span class="lineno"> 3804</span>              <span class="keywordflow">if</span> ( zeroind == 0 )</div>
+<div class="line"><a name="l03805"></a><span class="lineno"> 3805</span>              {</div>
+<div class="line"><a name="l03806"></a><span class="lineno"> 3806</span>                  abuf[j][i]  = acoefs[j] ;</div>
+<div class="line"><a name="l03807"></a><span class="lineno"> 3807</span>                  dabuf[j][i] = dacoefs[j] ;</div>
+<div class="line"><a name="l03808"></a><span class="lineno"> 3808</span>              }</div>
+<div class="line"><a name="l03809"></a><span class="lineno"> 3809</span>              <span class="keywordflow">else</span></div>
+<div class="line"><a name="l03810"></a><span class="lineno"> 3810</span>              {</div>
+<div class="line"><a name="l03811"></a><span class="lineno"> 3811</span>                  abuf[j][i]  = ZERO ;</div>
+<div class="line"><a name="l03812"></a><span class="lineno"> 3812</span>                  dabuf[j][i] = ZERO ;</div>
+<div class="line"><a name="l03813"></a><span class="lineno"> 3813</span>              }</div>
+<div class="line"><a name="l03814"></a><span class="lineno"> 3814</span>          }</div>
+<div class="line"><a name="l03815"></a><span class="lineno"> 3815</span>      }</div>
+<div class="line"><a name="l03816"></a><span class="lineno"> 3816</span> </div>
+<div class="line"><a name="l03817"></a><span class="lineno"> 3817</span>      <span class="comment">/* allocate memory for the fitting coefficients */</span></div>
+<div class="line"><a name="l03818"></a><span class="lineno"> 3818</span>      <span class="keywordflow">if</span> ( NULL == ( bco = sinfo_new_b_coeffs( n_slitlets, </div>
+<div class="line"><a name="l03819"></a><span class="lineno"> 3819</span>                                               n_a_fitcoefs, n_b_fitcoefs)) )</div>
+<div class="line"><a name="l03820"></a><span class="lineno"> 3820</span>      {</div>
+<div class="line"><a name="l03821"></a><span class="lineno"> 3821</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot allocate memory for the bcoeffs\n"</span>) ;</div>
+<div class="line"><a name="l03822"></a><span class="lineno"> 3822</span>          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l03823"></a><span class="lineno"> 3823</span>          {</div>
+<div class="line"><a name="l03824"></a><span class="lineno"> 3824</span>              cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l03825"></a><span class="lineno"> 3825</span>          }</div>
+<div class="line"><a name="l03826"></a><span class="lineno"> 3826</span>          cpl_free (dabuf) ;</div>
+<div class="line"><a name="l03827"></a><span class="lineno"> 3827</span>          cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l03828"></a><span class="lineno"> 3828</span>          cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l03829"></a><span class="lineno"> 3829</span>          cpl_free ( chisq_cross ) ;</div>
+<div class="line"><a name="l03830"></a><span class="lineno"> 3830</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03831"></a><span class="lineno"> 3831</span>      }</div>
+<div class="line"><a name="l03832"></a><span class="lineno"> 3832</span> </div>
+<div class="line"><a name="l03833"></a><span class="lineno"> 3833</span>      <span class="comment">/* fit each acoefs across the slitlets to smooth the result */</span></div>
+<div class="line"><a name="l03834"></a><span class="lineno"> 3834</span>      <span class="keywordflow">if</span> ( -1 == ( crossInd = sinfo_new_spred_coeffs_cross_slit_fit( ilx, abuf, </div>
+<div class="line"><a name="l03835"></a><span class="lineno"> 3835</span>                                                                     dabuf,</div>
+<div class="line"><a name="l03836"></a><span class="lineno"> 3836</span>                                                              bco, sigmaFactor,</div>
+<div class="line"><a name="l03837"></a><span class="lineno"> 3837</span>                                                              dispersion, </div>
+<div class="line"><a name="l03838"></a><span class="lineno"> 3838</span>                                                              pixel_dist, </div>
+<div class="line"><a name="l03839"></a><span class="lineno"> 3839</span>                                                              chisq_cross,</div>
+<div class="line"><a name="l03840"></a><span class="lineno"> 3840</span>                                                              sinfo_slit_pos )) )</div>
+<div class="line"><a name="l03841"></a><span class="lineno"> 3841</span>      {</div>
+<div class="line"><a name="l03842"></a><span class="lineno"> 3842</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out the fitting of "</span></div>
+<div class="line"><a name="l03843"></a><span class="lineno"> 3843</span>                           <span class="stringliteral">"coefficients across the columns\n"</span>) ;</div>
+<div class="line"><a name="l03844"></a><span class="lineno"> 3844</span>          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l03845"></a><span class="lineno"> 3845</span>          {</div>
+<div class="line"><a name="l03846"></a><span class="lineno"> 3846</span>              cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l03847"></a><span class="lineno"> 3847</span>          }</div>
+<div class="line"><a name="l03848"></a><span class="lineno"> 3848</span> </div>
+<div class="line"><a name="l03849"></a><span class="lineno"> 3849</span>          cpl_free (dabuf) ;</div>
+<div class="line"><a name="l03850"></a><span class="lineno"> 3850</span>          cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l03851"></a><span class="lineno"> 3851</span>          cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l03852"></a><span class="lineno"> 3852</span>          sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l03853"></a><span class="lineno"> 3853</span>          cpl_free ( chisq_cross ) ;</div>
+<div class="line"><a name="l03854"></a><span class="lineno"> 3854</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03855"></a><span class="lineno"> 3855</span>      }</div>
+<div class="line"><a name="l03856"></a><span class="lineno"> 3856</span> </div>
+<div class="line"><a name="l03857"></a><span class="lineno"> 3857</span>      <span class="keywordflow">if</span> ( NULL == (wavemap = sinfo_new_wave_map_slit (abuf, n_a_fitcoefs, </div>
+<div class="line"><a name="l03858"></a><span class="lineno"> 3858</span>                                                       ily, ilx)))</div>
+<div class="line"><a name="l03859"></a><span class="lineno"> 3859</span>      {</div>
+<div class="line"><a name="l03860"></a><span class="lineno"> 3860</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">" cannot carry out wavemap creation\n"</span>) ;</div>
+<div class="line"><a name="l03861"></a><span class="lineno"> 3861</span>          <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l03862"></a><span class="lineno"> 3862</span>          {</div>
+<div class="line"><a name="l03863"></a><span class="lineno"> 3863</span>              cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l03864"></a><span class="lineno"> 3864</span>          }</div>
+<div class="line"><a name="l03865"></a><span class="lineno"> 3865</span> </div>
+<div class="line"><a name="l03866"></a><span class="lineno"> 3866</span>          cpl_free (dabuf) ;</div>
+<div class="line"><a name="l03867"></a><span class="lineno"> 3867</span>          cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l03868"></a><span class="lineno"> 3868</span>          cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l03869"></a><span class="lineno"> 3869</span>          sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l03870"></a><span class="lineno"> 3870</span>          cpl_free ( chisq_cross ) ;</div>
+<div class="line"><a name="l03871"></a><span class="lineno"> 3871</span>          <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l03872"></a><span class="lineno"> 3872</span>      }</div>
+<div class="line"><a name="l03873"></a><span class="lineno"> 3873</span> </div>
+<div class="line"><a name="l03874"></a><span class="lineno"> 3874</span>      <span class="comment">/* free all allocated memory */</span></div>
+<div class="line"><a name="l03875"></a><span class="lineno"> 3875</span>      <span class="keywordflow">for</span> ( i = 0 ; i < n_a_fitcoefs ; i++ )</div>
+<div class="line"><a name="l03876"></a><span class="lineno"> 3876</span>      {</div>
+<div class="line"><a name="l03877"></a><span class="lineno"> 3877</span>          cpl_free (dabuf[i]) ;</div>
+<div class="line"><a name="l03878"></a><span class="lineno"> 3878</span>      }</div>
+<div class="line"><a name="l03879"></a><span class="lineno"> 3879</span>      cpl_free (dabuf) ;</div>
+<div class="line"><a name="l03880"></a><span class="lineno"> 3880</span>      cpl_free ( acoefs ) ;</div>
+<div class="line"><a name="l03881"></a><span class="lineno"> 3881</span>      cpl_free ( dacoefs ) ;</div>
+<div class="line"><a name="l03882"></a><span class="lineno"> 3882</span>      sinfo_new_destroy_b_coeffs(bco) ;</div>
+<div class="line"><a name="l03883"></a><span class="lineno"> 3883</span>      cpl_free ( chisq_cross ) ;</div>
+<div class="line"><a name="l03884"></a><span class="lineno"> 3884</span> </div>
+<div class="line"><a name="l03885"></a><span class="lineno"> 3885</span>      <span class="keywordflow">return</span> wavemap ;</div>
+<div class="line"><a name="l03886"></a><span class="lineno"> 3886</span>  }</div>
+<div class="line"><a name="l03887"></a><span class="lineno"> 3887</span> </div>
+<div class="line"><a name="l03889"></a><span class="lineno"> 3889</span> <span class="comment">/*___oOo___*/</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal_8h_source.html b/html/sinfo__wavecal_8h_source.html
index b55c8c1..236314b 100644
--- a/html/sinfo__wavecal_8h_source.html
+++ b/html/sinfo__wavecal_8h_source.html
@@ -2,169 +2,200 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef SINFO_WAVECAL_H</span>
-<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_H</span>
-<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="comment">/*</span>
-<a name="l00004"></a>00004 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00006"></a>00006 <span class="comment"> *</span>
-<a name="l00007"></a>00007 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00008"></a>00008 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00009"></a>00009 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00010"></a>00010 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00011"></a>00011 <span class="comment"> *</span>
-<a name="l00012"></a>00012 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00013"></a>00013 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00014"></a>00014 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00015"></a>00015 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00016"></a>00016 <span class="comment"> *</span>
-<a name="l00017"></a>00017 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00018"></a>00018 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00019"></a>00019 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00020"></a>00020 <span class="comment"> */</span>
-<a name="l00021"></a>00021 <span class="comment">/************************************************************************</span>
-<a name="l00022"></a>00022 <span class="comment">* E.S.O. - VLT project</span>
-<a name="l00023"></a>00023 <span class="comment">*</span>
-<a name="l00024"></a>00024 <span class="comment">* "@(#) $Id: sinfo_wavecal.h,v 1.5 2007/06/06 07:10:46 amodigli Exp $"</span>
-<a name="l00025"></a>00025 <span class="comment">*</span>
-<a name="l00026"></a>00026 <span class="comment">* who       when      what</span>
-<a name="l00027"></a>00027 <span class="comment">* --------  --------  ----------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">* schreib  13/07/00  created</span>
-<a name="l00029"></a>00029 <span class="comment">*/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="comment">/************************************************************************</span>
-<a name="l00032"></a>00032 <span class="comment"> * sinfo_wavecal.h</span>
-<a name="l00033"></a>00033 <span class="comment"> * routines needed for wavelength calibration</span>
-<a name="l00034"></a>00034 <span class="comment"> *----------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment"> */</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="comment">/*</span>
-<a name="l00038"></a>00038 <span class="comment"> * header files</span>
-<a name="l00039"></a>00039 <span class="comment"> */</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*</span>
-<a name="l00044"></a>00044 <span class="comment"> * function prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> */</span>
-<a name="l00046"></a>00046 
-<a name="l00057"></a>00057 cpl_image * 
-<a name="l00058"></a>00058 sinfo_new_wave_map_slit ( <span class="keywordtype">float</span> ** acoefs,
-<a name="l00059"></a>00059                          <span class="keywordtype">int</span>      n_acoefs,
-<a name="l00060"></a>00060                          <span class="keywordtype">int</span>      n_rows,
-<a name="l00061"></a>00061                          <span class="keywordtype">int</span>      n_columns ) ;
-<a name="l00062"></a>00062 
-<a name="l00107"></a>00107 cpl_image * 
-<a name="l00108"></a>00108 sinfo_new_wave_cal(cpl_image   * image,
-<a name="l00109"></a>00109                     FitParams ** par ,
-<a name="l00110"></a>00110                     <span class="keywordtype">float</span>     ** abuf,
-<a name="l00111"></a>00111                     <span class="keywordtype">int</span>          n_slitlets,
-<a name="l00112"></a>00112                     <span class="keywordtype">int</span>       ** row_clean,
-<a name="l00113"></a>00113                     <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l00114"></a>00114                     <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l00115"></a>00115                     <span class="keywordtype">float</span>        dispersion,
-<a name="l00116"></a>00116                     <span class="keywordtype">int</span>          halfWidth,
-<a name="l00117"></a>00117                     <span class="keywordtype">float</span>        minAmplitude,
-<a name="l00118"></a>00118                     <span class="keywordtype">float</span>        max_residual,
-<a name="l00119"></a>00119                     <span class="keywordtype">float</span>        fwhm,
-<a name="l00120"></a>00120                     <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l00121"></a>00121                     <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l00122"></a>00122                     <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l00123"></a>00123                     <span class="keywordtype">float</span>        pixel_dist,
-<a name="l00124"></a>00124             <span class="keywordtype">float</span>        pixel_tolerance ) ;
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00170"></a>00170  cpl_image * sinfo_new_spred_wave_cal(cpl_image   * image,
-<a name="l00171"></a>00171                      FitParams ** par ,
-<a name="l00172"></a>00172                      <span class="keywordtype">float</span>     ** abuf,
-<a name="l00173"></a>00173                      <span class="keywordtype">int</span>          n_slitlets,
-<a name="l00174"></a>00174                      <span class="keywordtype">int</span>       ** row_clean,
-<a name="l00175"></a>00175                      <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l00176"></a>00176                      <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l00177"></a>00177                      <span class="keywordtype">float</span>        dispersion,
-<a name="l00178"></a>00178                      <span class="keywordtype">int</span>          halfWidth,
-<a name="l00179"></a>00179                      <span class="keywordtype">float</span>        minAmplitude,
-<a name="l00180"></a>00180                      <span class="keywordtype">float</span>        max_residual,
-<a name="l00181"></a>00181                      <span class="keywordtype">float</span>        fwhm,
-<a name="l00182"></a>00182                      <span class="keywordtype">int</span>          n_a_fitcoefs,
-<a name="l00183"></a>00183                      <span class="keywordtype">int</span>          n_b_fitcoefs,
-<a name="l00184"></a>00184                      <span class="keywordtype">float</span>        sigmaFactor,
-<a name="l00185"></a>00185                      <span class="keywordtype">float</span>        pixel_dist,
-<a name="l00186"></a>00186                      <span class="keywordtype">float</span>        pixel_tolerance,
-<a name="l00187"></a>00187                      <span class="keywordtype">float</span> **sinfo_slit_pos ) ;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00207"></a>00207 <span class="keywordtype">int</span> 
-<a name="l00208"></a>00208 sinfo_new_check_for_fake_lines ( FitParams ** par,
-<a name="l00209"></a>00209                        <span class="keywordtype">float</span>        dispersion,
-<a name="l00210"></a>00210                         <span class="keywordtype">float</span>     ** wavelength_clean,
-<a name="l00211"></a>00211             <span class="keywordtype">int</span>       ** row_clean,
-<a name="l00212"></a>00212             <span class="keywordtype">int</span>        * n_found_lines,
-<a name="l00213"></a>00213             <span class="keywordtype">int</span>          n_columns,
-<a name="l00214"></a>00214             <span class="keywordtype">float</span>        pixel_tolerance ) ;
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216 
-<a name="l00235"></a>00235 cpl_image * 
-<a name="l00236"></a>00236 sinfo_new_create_shifted_slit_wavemap (cpl_image * lineIm,
-<a name="l00237"></a>00237                                       <span class="keywordtype">float</span>    ** coeffs,
-<a name="l00238"></a>00238                                       <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l00239"></a>00239                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l00240"></a>00240                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l00241"></a>00241                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l00242"></a>00242                                       <span class="keywordtype">int</span>      magFactor ) ;
-<a name="l00266"></a>00266 cpl_image * 
-<a name="l00267"></a>00267 sinfo_new_create_shifted_slit_wavemap2 (cpl_image * lineIm,
-<a name="l00268"></a>00268                                       <span class="keywordtype">float</span>    ** coeffs,
-<a name="l00269"></a>00269                                       <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l00270"></a>00270                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l00271"></a>00271                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l00272"></a>00272                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l00273"></a>00273                                       <span class="keywordtype">int</span>      magFactor,
-<a name="l00274"></a>00274                                       <span class="keywordtype">float</span>    dispersion,
-<a name="l00275"></a>00275                                       <span class="keywordtype">float</span>    pixel_dist ) ;
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277 
-<a name="l00299"></a>00299 cpl_image * 
-<a name="l00300"></a>00300 sinfo_new_create_shifted_slit_wavemap3 (cpl_image * lineIm,
-<a name="l00301"></a>00301                                       <span class="keywordtype">float</span>    ** coeffs,
-<a name="l00302"></a>00302                                       <span class="keywordtype">int</span>      n_fitcoeffs,
-<a name="l00303"></a>00303                                       <span class="keywordtype">float</span>  * wavelength,
-<a name="l00304"></a>00304                                       <span class="keywordtype">float</span>  * intensity,
-<a name="l00305"></a>00305                                       <span class="keywordtype">int</span>      n_lines,
-<a name="l00306"></a>00306                                       <span class="keywordtype">int</span>      magFactor ) ;
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308 
-<a name="l00329"></a>00329 <span class="keywordtype">float</span> sinfo_new_check_line_positions ( cpl_image     * lineIm,
-<a name="l00330"></a>00330                        <span class="keywordtype">float</span>       ** coeffs,
-<a name="l00331"></a>00331                        <span class="keywordtype">int</span>            n_fitcoeffs,
-<a name="l00332"></a>00332                        <span class="keywordtype">float</span>           guess_disp1,
-<a name="l00333"></a>00333                        FitParams   ** par );
-<a name="l00334"></a>00334 
-<a name="l00360"></a>00360 <span class="keywordtype">float</span> 
-<a name="l00361"></a>00361 sinfo_new_check_correlated_line_positions (cpl_image     * lineIm,
-<a name="l00362"></a>00362                                      <span class="keywordtype">float</span>       ** coeffs,
-<a name="l00363"></a>00363                                      <span class="keywordtype">int</span>            n_fitcoeffs,
-<a name="l00364"></a>00364                                      <span class="keywordtype">float</span>        * wavelength,
-<a name="l00365"></a>00365                                      <span class="keywordtype">float</span>        * intensity,
-<a name="l00366"></a>00366                                      <span class="keywordtype">int</span>            n_lines,
-<a name="l00367"></a>00367                                      <span class="keywordtype">float</span>          fwhm,
-<a name="l00368"></a>00368                                      <span class="keywordtype">float</span>          width,
-<a name="l00369"></a>00369                                      <span class="keywordtype">float</span>          min_amplitude,
-<a name="l00370"></a>00370                                      <span class="keywordtype">float</span>          dispersion,
-<a name="l00371"></a>00371                                      FitParams   ** par ) ;
-<a name="l00372"></a>00372 
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375 <span class="preprocessor">#endif </span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="preprocessor">#ifndef SINFO_WAVECAL_H</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_H</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="preprocessor"></span><span class="comment">/*</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">* E.S.O. - VLT project</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">* "@(#) $Id: sinfo_wavecal.h,v 1.5 2007/06/06 07:10:46 amodigli Exp $"</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">*</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment">* who       when      what</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment">* --------  --------  ----------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">* schreib  13/07/00  created</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="comment">/************************************************************************</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment"> * sinfo_wavecal.h</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment"> * routines needed for wavelength calibration</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> *----------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment"> * header files</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment"> * function prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> cpl_image * </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> sinfo_new_wave_map_slit ( <span class="keywordtype">float</span> ** acoefs,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                          <span class="keywordtype">int</span>      n_acoefs,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>                          <span class="keywordtype">int</span>      n_rows,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>                          <span class="keywordtype">int</span>      n_columns ) ;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> cpl_image * </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> sinfo_new_wave_cal(cpl_image   * image,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                     FitParams ** par ,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                     <span class="keywordtype">float</span>     ** abuf,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                     <span class="keywordtype">int</span>          n_slitlets,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                     <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                     <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                     <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>                     <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>                     <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                     <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                     <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>                     <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                     <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                     <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                     <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                     <span class="keywordtype">float</span>        pixel_dist,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>             <span class="keywordtype">float</span>        pixel_tolerance ) ;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>  cpl_image * sinfo_new_spred_wave_cal(cpl_image   * image,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                      FitParams ** par ,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>                      <span class="keywordtype">float</span>     ** abuf,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>                      <span class="keywordtype">int</span>          n_slitlets,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>                      <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>                      <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>                      <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>                      <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>                      <span class="keywordtype">int</span>          halfWidth,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                      <span class="keywordtype">float</span>        minAmplitude,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                      <span class="keywordtype">float</span>        max_residual,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                      <span class="keywordtype">float</span>        fwhm,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                      <span class="keywordtype">int</span>          n_a_fitcoefs,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                      <span class="keywordtype">int</span>          n_b_fitcoefs,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                      <span class="keywordtype">float</span>        sigmaFactor,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>                      <span class="keywordtype">float</span>        pixel_dist,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>                      <span class="keywordtype">float</span>        pixel_tolerance,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>                      <span class="keywordtype">float</span> **sinfo_slit_pos ) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span> sinfo_new_check_for_fake_lines ( FitParams ** par,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                        <span class="keywordtype">float</span>        dispersion,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                         <span class="keywordtype">float</span>     ** wavelength_clean,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>             <span class="keywordtype">int</span>       ** row_clean,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>             <span class="keywordtype">int</span>        * n_found_lines,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>             <span class="keywordtype">int</span>          n_columns,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>             <span class="keywordtype">float</span>        pixel_tolerance ) ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> cpl_image * </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> sinfo_new_create_shifted_slit_wavemap (cpl_image * lineIm,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                                       <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>                                       <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                                       <span class="keywordtype">int</span>      magFactor ) ;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> cpl_image * </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span> sinfo_new_create_shifted_slit_wavemap2 (cpl_image * lineIm,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                                       <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>                                       <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                                       <span class="keywordtype">int</span>      magFactor,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                                       <span class="keywordtype">float</span>    dispersion,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                                       <span class="keywordtype">float</span>    pixel_dist ) ;</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span> </div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> cpl_image * </div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span> sinfo_new_create_shifted_slit_wavemap3 (cpl_image * lineIm,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                                       <span class="keywordtype">float</span>    ** coeffs,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                                       <span class="keywordtype">int</span>      n_fitcoeffs,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                                       <span class="keywordtype">float</span>  * wavelength,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                                       <span class="keywordtype">float</span>  * intensity,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                                       <span class="keywordtype">int</span>      n_lines,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>                                       <span class="keywordtype">int</span>      magFactor ) ;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="keywordtype">float</span> sinfo_new_check_line_positions ( cpl_image     * lineIm,</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>                        <span class="keywordtype">float</span>       ** coeffs,</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                        <span class="keywordtype">int</span>            n_fitcoeffs,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                        <span class="keywordtype">float</span>           guess_disp1,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                        FitParams   ** par );</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> <span class="keywordtype">float</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> sinfo_new_check_correlated_line_positions (cpl_image     * lineIm,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>                                      <span class="keywordtype">float</span>       ** coeffs,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>                                      <span class="keywordtype">int</span>            n_fitcoeffs,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>                                      <span class="keywordtype">float</span>        * wavelength,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>                                      <span class="keywordtype">float</span>        * intensity,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>                                      <span class="keywordtype">int</span>            n_lines,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                                      <span class="keywordtype">float</span>          fwhm,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                                      <span class="keywordtype">float</span>          width,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                                      <span class="keywordtype">float</span>          min_amplitude,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                                      <span class="keywordtype">float</span>          dispersion,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                                      FitParams   ** par ) ;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span> </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span> <span class="preprocessor">#endif </span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__cfg_8c_source.html b/html/sinfo__wavecal__cfg_8c_source.html
index 22e9eb7..23e87db 100644
--- a/html/sinfo__wavecal__cfg_8c_source.html
+++ b/html/sinfo__wavecal__cfg_8c_source.html
@@ -2,88 +2,119 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_cfg.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_cfg.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 
-<a name="l00020"></a>00020 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00021"></a>00021 <span class="comment">   </span>
-<a name="l00022"></a>00022 <span class="comment">   File name     :    sinfo_wavecal_cfg.c</span>
-<a name="l00023"></a>00023 <span class="comment">   Author         : Juergen Schreiber</span>
-<a name="l00024"></a>00024 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00025"></a>00025 <span class="comment">   Description    :    wavelength calibration configuration handling tools</span>
-<a name="l00026"></a>00026 <span class="comment"></span>
-<a name="l00027"></a>00027 <span class="comment"> *--------------------------------------------------------------------------*/</span>
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span>
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                   Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span>
-<a name="l00038"></a>00038 
-<a name="l00046"></a>00046 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                              Function codes</span>
-<a name="l00048"></a>00048 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">   Function :   sinfo_wave_cfg_create()</span>
-<a name="l00052"></a>00052 <span class="comment">   In       :   void</span>
-<a name="l00053"></a>00053 <span class="comment">   Out      :   pointer to allocated base wave_config structure</span>
-<a name="l00054"></a>00054 <span class="comment">   Job      :   allocate memory for a wave_config struct</span>
-<a name="l00055"></a>00055 <span class="comment">   Notice   :   only the main (base) structure is allocated</span>
-<a name="l00056"></a>00056 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 wave_config * sinfo_wave_cfg_create(<span class="keywordtype">void</span>)
-<a name="l00059"></a>00059 {
-<a name="l00060"></a>00060     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(wave_config));
-<a name="l00061"></a>00061 }
-<a name="l00062"></a>00062 
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00065"></a>00065 <span class="comment">   Function :   sinfo_wave_cfg_destroy()</span>
-<a name="l00066"></a>00066 <span class="comment">   In       :   wave_config to deallocate</span>
-<a name="l00067"></a>00067 <span class="comment">   Out      :   void</span>
-<a name="l00068"></a>00068 <span class="comment">   Job      :   deallocate all memory associated with a wave_config</span>
-<a name="l00069"></a>00069 <span class="comment">   Notice   :   </span>
-<a name="l00070"></a>00070 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> sinfo_wave_cfg_destroy(wave_config * wc)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074     <span class="keywordflow">if</span> (wc==NULL) return ;
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076     <span class="comment">/* Free main struct */</span>
-<a name="l00077"></a>00077     cpl_free(wc);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079     return ;
-<a name="l00080"></a>00080 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_cfg.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   File name     :    sinfo_wavecal_cfg.c</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Author         : Juergen Schreiber</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment">   Description    :    wavelength calibration configuration handling tools</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"></span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="comment"> *--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                              Function codes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">   Function :   sinfo_wave_cfg_create()</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">   In       :   void</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">   Out      :   pointer to allocated base wave_config structure</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">   Job      :   allocate memory for a wave_config struct</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">   Notice   :   only the main (base) structure is allocated</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> wave_config * sinfo_wave_cfg_create(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>     <span class="keywordflow">return</span> cpl_calloc(1, <span class="keyword">sizeof</span>(wave_config));</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> }</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">   Function :   sinfo_wave_cfg_destroy()</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">   In       :   wave_config to deallocate</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">   Out      :   void</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">   Job      :   deallocate all memory associated with a wave_config</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">   Notice   :   </span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">void</span> sinfo_wave_cfg_destroy(wave_config * wc)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     <span class="keywordflow">if</span> (wc==NULL) return ;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="comment">/* Free main struct */</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     cpl_free(wc);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     return ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__cfg_8h_source.html b/html/sinfo__wavecal__cfg_8h_source.html
index 4c937f1..94f1770 100644
--- a/html/sinfo__wavecal__cfg_8h_source.html
+++ b/html/sinfo__wavecal__cfg_8h_source.html
@@ -2,172 +2,203 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_cfg.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_cfg.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name     :    sinfo_wavecal_cfg.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author         :    Juergen Schreiber</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on    :    September 2001</span>
-<a name="l00024"></a>00024 <span class="comment">   Description    :    wavecal_ini definitions + handling prototypes</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_WAVECAL_CFG_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_CFG_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                   Includes</span>
-<a name="l00030"></a>00030 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <stdlib.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                                   Defines</span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00037"></a>00037 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00038"></a>00038 <span class="comment">                                   New types</span>
-<a name="l00039"></a>00039 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00040"></a>00040 <span class="comment">/*</span>
-<a name="l00041"></a>00041 <span class="comment">  Wavelength calibration blackboard container</span>
-<a name="l00042"></a>00042 <span class="comment"></span>
-<a name="l00043"></a>00043 <span class="comment">  This structure holds all information related to the wavelength calibration</span>
-<a name="l00044"></a>00044 <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span>
-<a name="l00045"></a>00045 <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span>
-<a name="l00046"></a>00046 <span class="comment">  the blackboard.</span>
-<a name="l00047"></a>00047 <span class="comment">  */</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">typedef</span> <span class="keyword">struct </span>wave_config {
-<a name="l00050"></a>00050 <span class="comment">/*-------General---------*/</span>
-<a name="l00051"></a>00051         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input emission line frame */</span>
-<a name="l00052"></a>00052         <span class="keywordtype">char</span> lineList[FILE_NAME_SZ] ; <span class="comment">/* input wavelength and intensity </span>
-<a name="l00053"></a>00053 <span class="comment">                                         line list */</span>
-<a name="l00054"></a>00054         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ;  <span class="comment">/* output name of resulting </span>
-<a name="l00055"></a>00055 <span class="comment">                                         fits wavelength map */</span>
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> drs_setup[FILE_NAME_SZ] ; <span class="comment">/* DRS setup table */</span>
-<a name="l00057"></a>00057 
-<a name="l00058"></a>00058 <span class="comment">/*------ FindLines ------*/</span>
-<a name="l00059"></a>00059         <span class="comment">/* indicates if the dispersion relation is already determined or not */</span>
-<a name="l00060"></a>00060         <span class="keywordtype">int</span> calibIndicator ;      
-<a name="l00061"></a>00061         <span class="comment">/* estimated central wavelength of the image */</span>
-<a name="l00062"></a>00062         <span class="keywordtype">float</span> guessBeginWavelength ;
-<a name="l00063"></a>00063         <span class="comment">/* estimated linear dispersion of emission line frame */</span>
-<a name="l00064"></a>00064         <span class="keywordtype">float</span> guessDispersion1 ;
-<a name="l00065"></a>00065         <span class="comment">/* estimated square dispersion of emission line frame */</span>
-<a name="l00066"></a>00066         <span class="keywordtype">float</span> guessDispersion2 ;
-<a name="l00067"></a>00067         <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span>
-<a name="l00068"></a>00068         <span class="keywordtype">float</span> mindiff ;
-<a name="l00069"></a>00069         <span class="comment">/* half width of a box within which the line must sit */</span>
-<a name="l00070"></a>00070         <span class="keywordtype">int</span> halfWidth ;
-<a name="l00071"></a>00071         <span class="comment">/* sigma of Gaussian of artificial model spectra */</span>
-<a name="l00072"></a>00072         <span class="keywordtype">float</span> sigma ; 
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074 <span class="comment">/*------ WaveCalib ------*/</span>
-<a name="l00075"></a>00075         <span class="comment">/* guess value for fwhm of emission lines */</span> 
-<a name="l00076"></a>00076         <span class="keywordtype">float</span> fwhm ;
-<a name="l00077"></a>00077         <span class="comment">/* minimum amplitude of a line to be fitted */</span>
-<a name="l00078"></a>00078         <span class="keywordtype">float</span> minAmplitude ;
-<a name="l00079"></a>00079         <span class="comment">/* maximal residual value for a valid fit */</span>
-<a name="l00080"></a>00080         <span class="keywordtype">float</span> maxResidual ;
-<a name="l00081"></a>00081         <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span>
-<a name="l00082"></a>00082         <span class="keywordtype">int</span> nrDispCoefficients ;
-<a name="l00083"></a>00083         <span class="comment">/* # of polynomial coefficients used for the fit of </span>
-<a name="l00084"></a>00084 <span class="comment">             the dispersion coefficients */</span>
-<a name="l00085"></a>00085         <span class="keywordtype">int</span> nrCoefCoefficients ;
-<a name="l00086"></a>00086         <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span>
-<a name="l00087"></a>00087         <span class="keywordtype">float</span> sigmaFactor ;
-<a name="l00088"></a>00088         <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span>
-<a name="l00089"></a>00089 <span class="comment">       should be written into an ASCII file */</span>
-<a name="l00090"></a>00090         <span class="keywordtype">int</span> writeCoeffsInd ;
-<a name="l00091"></a>00091         <span class="comment">/* indicates if the fit parameters should be written </span>
-<a name="l00092"></a>00092 <span class="comment">           into an ASCII file */</span>
-<a name="l00093"></a>00093         <span class="keywordtype">int</span> writeParInd ;
-<a name="l00094"></a>00094         <span class="comment">/* name of the ASCII file containing the fit parameters */</span>
-<a name="l00095"></a>00095         <span class="keywordtype">char</span> paramsList[FILE_NAME_SZ] ;
-<a name="l00096"></a>00096         <span class="comment">/* name of the ASCII file containing the coefficients </span>
-<a name="l00097"></a>00097 <span class="comment">           of the parameterized dispersion relation */</span>
-<a name="l00098"></a>00098         <span class="keywordtype">char</span> coeffsName[FILE_NAME_SZ] ;
-<a name="l00099"></a>00099         <span class="comment">/* number of slitlets */</span>
-<a name="l00100"></a>00100         <span class="keywordtype">int</span>    nslitlets ;
-<a name="l00101"></a>00101         <span class="comment">/* minimal pixel distance of slitlets in spectral direction */</span>
-<a name="l00102"></a>00102         <span class="keywordtype">int</span>    pixeldist ;
-<a name="l00103"></a>00103         <span class="comment">/* allowed pixel position tolerance between estimated </span>
-<a name="l00104"></a>00104 <span class="comment">           and fitted line position */</span>
-<a name="l00105"></a>00105         <span class="keywordtype">float</span>  pixel_tolerance  ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107 <span class="comment">/*------ WaveMap ------*/</span>
-<a name="l00108"></a>00108         <span class="comment">/* indicator if wavelength map should be generated or not */</span>
-<a name="l00109"></a>00109         <span class="keywordtype">int</span> wavemapInd ;
-<a name="l00110"></a>00110     <span class="comment">/* magnifying factor for FFT */</span>
-<a name="l00111"></a>00111     <span class="keywordtype">int</span> magFactor ;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113 <span class="comment">/*------ FitSlits ------*/</span>
-<a name="l00114"></a>00114         <span class="comment">/* indicator if the fit of the slit edge positions is carried </span>
-<a name="l00115"></a>00115 <span class="comment">           through or not */</span>
-<a name="l00116"></a>00116         <span class="keywordtype">int</span> slitposIndicator ;
-<a name="l00117"></a>00117         <span class="comment">/* indicator if the fit model function is a Boltzmann </span>
-<a name="l00118"></a>00118 <span class="comment">           function or not */</span>
-<a name="l00119"></a>00119         <span class="keywordtype">int</span> fitBoltzIndicator ;
-<a name="l00120"></a>00120         <span class="comment">/* indicator if the fit model function is a simple edge </span>
-<a name="l00121"></a>00121 <span class="comment">           function or not */</span>
-<a name="l00122"></a>00122         <span class="keywordtype">int</span> fitEdgeIndicator ;
-<a name="l00123"></a>00123         <span class="comment">/* indicator if the fit guess position are user given or </span>
-<a name="l00124"></a>00124 <span class="comment">           calculated automatically */</span>
-<a name="l00125"></a>00125         <span class="keywordtype">int</span> estimateIndicator ;
-<a name="l00126"></a>00126     <span class="comment">/* pixel length of the row box within which the fit of the </span>
-<a name="l00127"></a>00127 <span class="comment">           slitlet positions is carried out*/</span>
-<a name="l00128"></a>00128     <span class="keywordtype">int</span> boxLength ;
-<a name="l00129"></a>00129         <span class="comment">/* lower row position for the estimate fit */</span>
-<a name="l00130"></a>00130     <span class="keywordtype">int</span> loPos ;
-<a name="l00131"></a>00131         <span class="comment">/* upper row position for the estimate fit */</span>
-<a name="l00132"></a>00132     <span class="keywordtype">int</span> hiPos ;
-<a name="l00133"></a>00133     <span class="comment">/* float box half width in spectral direction */</span>
-<a name="l00134"></a>00134         <span class="keywordtype">float</span> yBox ;
-<a name="l00135"></a>00135         <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span>
-<a name="l00136"></a>00136         <span class="keywordtype">float</span> diffTol ;
-<a name="l00137"></a>00137         <span class="comment">/* name of the ASCII file containing the slitlet edge positions */</span>
-<a name="l00138"></a>00138         <span class="keywordtype">char</span> slitposName[FILE_NAME_SZ] ;
-<a name="l00139"></a>00139         <span class="comment">/* name of the ASCII file containing the estimated slitlet </span>
-<a name="l00140"></a>00140 <span class="comment">           edge positions */</span>
-<a name="l00141"></a>00141         <span class="keywordtype">char</span> slitposGuessName[FILE_NAME_SZ] ;
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144   <span class="keywordtype">int</span> qc_thresh_min;
-<a name="l00145"></a>00145   <span class="keywordtype">int</span> qc_thresh_max;
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147 } wave_config ;
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00150"></a>00150 <span class="comment">                               Function prototypes</span>
-<a name="l00151"></a>00151 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00159"></a>00159 wave_config * 
-<a name="l00160"></a>00160 sinfo_wave_cfg_create(<span class="keywordtype">void</span>);
-<a name="l00168"></a>00168 <span class="keywordtype">void</span> 
-<a name="l00169"></a>00169 sinfo_wave_cfg_destroy(wave_config * jc);
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_cfg.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name     :    sinfo_wavecal_cfg.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author         :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on    :    September 2001</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description    :    wavecal_ini definitions + handling prototypes</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_WAVECAL_CFG_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_CFG_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <stdlib.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                                   Defines</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="comment">                                   New types</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">  Wavelength calibration blackboard container</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="comment"></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">  This structure holds all information related to the wavelength calibration</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">  routine. It is used as a container for the flux of ancillary data,</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">  computed values, and algorithm status. Pixel flux is separated from</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">  the blackboard.</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>wave_config {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-------General---------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>         <span class="keywordtype">char</span> inFrame[FILE_NAME_SZ] ; <span class="comment">/* input emission line frame */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>         <span class="keywordtype">char</span> lineList[FILE_NAME_SZ] ; <span class="comment">/* input wavelength and intensity </span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">                                         line list */</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>         <span class="keywordtype">char</span> outName[FILE_NAME_SZ] ;  <span class="comment">/* output name of resulting </span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                         fits wavelength map */</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> drs_setup[FILE_NAME_SZ] ; <span class="comment">/* DRS setup table */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*------ FindLines ------*/</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="comment">/* indicates if the dispersion relation is already determined or not */</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>         <span class="keywordtype">int</span> calibIndicator ;      </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>         <span class="comment">/* estimated central wavelength of the image */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>         <span class="keywordtype">float</span> guessBeginWavelength ;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>         <span class="comment">/* estimated linear dispersion of emission line frame */</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>         <span class="keywordtype">float</span> guessDispersion1 ;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>         <span class="comment">/* estimated square dispersion of emission line frame */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>         <span class="keywordtype">float</span> guessDispersion2 ;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>         <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>         <span class="keywordtype">float</span> mindiff ;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>         <span class="comment">/* half width of a box within which the line must sit */</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>         <span class="keywordtype">int</span> halfWidth ;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         <span class="comment">/* sigma of Gaussian of artificial model spectra */</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         <span class="keywordtype">float</span> sigma ; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*------ WaveCalib ------*/</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         <span class="comment">/* guess value for fwhm of emission lines */</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         <span class="keywordtype">float</span> fwhm ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>         <span class="comment">/* minimum amplitude of a line to be fitted */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>         <span class="keywordtype">float</span> minAmplitude ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>         <span class="comment">/* maximal residual value for a valid fit */</span></div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>         <span class="keywordtype">float</span> maxResidual ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>         <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>         <span class="keywordtype">int</span> nrDispCoefficients ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>         <span class="comment">/* # of polynomial coefficients used for the fit of </span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> <span class="comment">             the dispersion coefficients */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>         <span class="keywordtype">int</span> nrCoefCoefficients ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>         <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>         <span class="keywordtype">float</span> sigmaFactor ;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>         <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> <span class="comment">       should be written into an ASCII file */</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordtype">int</span> writeCoeffsInd ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>         <span class="comment">/* indicates if the fit parameters should be written </span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">           into an ASCII file */</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>         <span class="keywordtype">int</span> writeParInd ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>         <span class="comment">/* name of the ASCII file containing the fit parameters */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <span class="keywordtype">char</span> paramsList[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="comment">/* name of the ASCII file containing the coefficients </span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> <span class="comment">           of the parameterized dispersion relation */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>         <span class="keywordtype">char</span> coeffsName[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>         <span class="comment">/* number of slitlets */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>         <span class="keywordtype">int</span>    nslitlets ;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>         <span class="comment">/* minimal pixel distance of slitlets in spectral direction */</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>         <span class="keywordtype">int</span>    pixeldist ;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>         <span class="comment">/* allowed pixel position tolerance between estimated </span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> <span class="comment">           and fitted line position */</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>         <span class="keywordtype">float</span>  pixel_tolerance  ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*------ WaveMap ------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>         <span class="comment">/* indicator if wavelength map should be generated or not */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>         <span class="keywordtype">int</span> wavemapInd ;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/* magnifying factor for FFT */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keywordtype">int</span> magFactor ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> <span class="comment">/*------ FitSlits ------*/</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>         <span class="comment">/* indicator if the fit of the slit edge positions is carried </span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> <span class="comment">           through or not */</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>         <span class="keywordtype">int</span> slitposIndicator ;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>         <span class="comment">/* indicator if the fit model function is a Boltzmann </span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">           function or not */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         <span class="keywordtype">int</span> fitBoltzIndicator ;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>         <span class="comment">/* indicator if the fit model function is a simple edge </span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span> <span class="comment">           function or not */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>         <span class="keywordtype">int</span> fitEdgeIndicator ;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>         <span class="comment">/* indicator if the fit guess position are user given or </span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> <span class="comment">           calculated automatically */</span></div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>         <span class="keywordtype">int</span> estimateIndicator ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     <span class="comment">/* pixel length of the row box within which the fit of the </span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> <span class="comment">           slitlet positions is carried out*/</span></div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordtype">int</span> boxLength ;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>         <span class="comment">/* lower row position for the estimate fit */</span></div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">int</span> loPos ;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         <span class="comment">/* upper row position for the estimate fit */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="keywordtype">int</span> hiPos ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="comment">/* float box half width in spectral direction */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>         <span class="keywordtype">float</span> yBox ;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>         <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>         <span class="keywordtype">float</span> diffTol ;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <span class="comment">/* name of the ASCII file containing the slitlet edge positions */</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         <span class="keywordtype">char</span> slitposName[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>         <span class="comment">/* name of the ASCII file containing the estimated slitlet </span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">           edge positions */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         <span class="keywordtype">char</span> slitposGuessName[FILE_NAME_SZ] ;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>   <span class="keywordtype">int</span> qc_thresh_min;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>   <span class="keywordtype">int</span> qc_thresh_max;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> } wave_config ;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">                               Function prototypes</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> wave_config * </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> sinfo_wave_cfg_create(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> sinfo_wave_cfg_destroy(wave_config * jc);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__config_8c_source.html b/html/sinfo__wavecal__config_8c_source.html
index 717148c..00f1576 100644
--- a/html/sinfo__wavecal__config_8c_source.html
+++ b/html/sinfo__wavecal__config_8c_source.html
@@ -2,433 +2,464 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_config.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_config.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_wavecal_config.c,v 1.6 2012/03/03 10:35:14 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2012/03/03 10:35:14 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.6 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
-<a name="l00034"></a>00034 <span class="preprocessor"></span>
-<a name="l00035"></a>00035 <span class="preprocessor">#include "sinfo_wavecal_config.h"</span>
-<a name="l00045"></a>00045 <span class="keywordtype">void</span>
-<a name="l00046"></a>00046  sinfo_wavecal_config_add(cpl_parameterlist *list)
-<a name="l00047"></a>00047 {
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049   cpl_parameter *p;
-<a name="l00050"></a>00050 
-<a name="l00051"></a>00051   <span class="keywordflow">if</span> (!list) {
-<a name="l00052"></a>00052     <span class="keywordflow">return</span>;
-<a name="l00053"></a>00053   }
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>,
-<a name="l00056"></a>00056                   CPL_TYPE_BOOL,
-<a name="l00057"></a>00057                            <span class="stringliteral">"Switch to get a new slitpos without a reference: "</span>,
-<a name="l00058"></a>00058                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00059"></a>00059                               FALSE);
-<a name="l00060"></a>00060 
-<a name="l00061"></a>00061   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-slitpos_bootstrap"</span>);
-<a name="l00062"></a>00062   cpl_parameterlist_append(list, p);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064   <span class="comment">/*</span>
-<a name="l00065"></a>00065 <span class="comment">  p = cpl_parameter_new_value("sinfoni.wavecal.mflat_frm_switch",</span>
-<a name="l00066"></a>00066 <span class="comment">                  CPL_TYPE_BOOL,</span>
-<a name="l00067"></a>00067 <span class="comment">                              "Switch for master lampflat input: ",</span>
-<a name="l00068"></a>00068 <span class="comment">                              "sinfoni.wavecal",</span>
-<a name="l00069"></a>00069 <span class="comment">                              TRUE);</span>
-<a name="l00070"></a>00070 <span class="comment"></span>
-<a name="l00071"></a>00071 <span class="comment"></span>
-<a name="l00072"></a>00072 <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"wcal-mflat_frm_switch");</span>
-<a name="l00073"></a>00073 <span class="comment">  cpl_parameterlist_append(list, p);</span>
-<a name="l00074"></a>00074 <span class="comment">  */</span>
-<a name="l00075"></a>00075 
-<a name="l00076"></a>00076 
-<a name="l00077"></a>00077 <span class="comment">/* Find Lines */</span>
-<a name="l00078"></a>00078 <span class="comment">/* indicates if the dispersion relation is already determined or not */</span>
-<a name="l00079"></a>00079   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.calib_indicator"</span>,
-<a name="l00080"></a>00080                   CPL_TYPE_BOOL,
-<a name="l00081"></a>00081                               <span class="stringliteral">"Calib Indicator: "</span>
-<a name="l00082"></a>00082                               <span class="stringliteral">"FALSE: if the dispersion relation is already "</span>
-<a name="l00083"></a>00083                             <span class="stringliteral">"known, the routine can jump to the sinfo_waveMap "</span>
-<a name="l00084"></a>00084                               <span class="stringliteral">"section "</span>
-<a name="l00085"></a>00085                               <span class="stringliteral">"TRUE: if the dispersion relation "</span>
-<a name="l00086"></a>00086                               <span class="stringliteral">"must first be determined"</span>,
-<a name="l00087"></a>00087                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00088"></a>00088                               TRUE);
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-calib_indicator"</span>);
-<a name="l00091"></a>00091   cpl_parameterlist_append(list, p);
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span>
-<a name="l00095"></a>00095   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.min_diff"</span>,
-<a name="l00096"></a>00096                   CPL_TYPE_DOUBLE,
-<a name="l00097"></a>00097                               <span class="stringliteral">"Minimum Of Difference: "</span>
-<a name="l00098"></a>00098                           <span class="stringliteral">"minimum difference of mean and sinfo_median column "</span>
-<a name="l00099"></a>00099                           <span class="stringliteral">"intensity to carry out the cross sinfo_correlation"</span>,
-<a name="l00100"></a>00100                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00101"></a>00101                               1.);
-<a name="l00102"></a>00102 
-<a name="l00103"></a>00103   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-min_diff"</span>);
-<a name="l00104"></a>00104   cpl_parameterlist_append(list, p);
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106 <span class="comment">/* half width of a box within which the line must sit */</span>
-<a name="l00107"></a>00107   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.half_width"</span>,
-<a name="l00108"></a>00108                   CPL_TYPE_INT,
-<a name="l00109"></a>00109                               <span class="stringliteral">"Half Width: "</span>
-<a name="l00110"></a>00110                               <span class="stringliteral">"half width of a box within which the line "</span>
-<a name="l00111"></a>00111                               <span class="stringliteral">"must be placed"</span>,
-<a name="l00112"></a>00112                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00113"></a>00113                               7);
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-hw"</span>);
-<a name="l00116"></a>00116   cpl_parameterlist_append(list, p);
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 <span class="comment">/* sigma of Gaussian of artificial model spectra */</span>
-<a name="l00119"></a>00119   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.sigma"</span>,
-<a name="l00120"></a>00120                   CPL_TYPE_DOUBLE,
-<a name="l00121"></a>00121                               <span class="stringliteral">"Sigma: sigma of Gaussian which is convolved "</span>
-<a name="l00122"></a>00122                               <span class="stringliteral">"with the artificial spectrum generated using "</span>
-<a name="l00123"></a>00123                               <span class="stringliteral">"the line list"</span>,
-<a name="l00124"></a>00124                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00125"></a>00125                                2.);
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-sigma"</span>);
-<a name="l00128"></a>00128   cpl_parameterlist_append(list, p);
-<a name="l00129"></a>00129 
-<a name="l00130"></a>00130   <span class="comment">/* Wavelength Calibration */</span>
-<a name="l00131"></a>00131 <span class="comment">/* guess value for fwhm of emission lines */</span>
-<a name="l00132"></a>00132   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fwhm"</span>,
-<a name="l00133"></a>00133                   CPL_TYPE_DOUBLE,
-<a name="l00134"></a>00134                               <span class="stringliteral">"FWHM: initial guess value for the fwhm of "</span>
-<a name="l00135"></a>00135                               <span class="stringliteral">"the Gaussian used for the line fit"</span>,
-<a name="l00136"></a>00136                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00137"></a>00137                                2.83);
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fwhm"</span>);
-<a name="l00140"></a>00140   cpl_parameterlist_append(list, p);
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 <span class="comment">/* minimum amplitude of a line to be fitted */</span>
-<a name="l00143"></a>00143   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span>,
-<a name="l00144"></a>00144                   CPL_TYPE_DOUBLE,
-<a name="l00145"></a>00145                               <span class="stringliteral">"Minimum Of Amplitude: "</span>
-<a name="l00146"></a>00146                               <span class="stringliteral">"of the Gaussian to do the fit"</span>,
-<a name="l00147"></a>00147                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00148"></a>00148                               5.);
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-min_amplitude"</span>);
-<a name="l00151"></a>00151   cpl_parameterlist_append(list, p);
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 <span class="comment">/* maximal residual value for a valid fit */</span>
-<a name="l00154"></a>00154   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.max_residual"</span>,
-<a name="l00155"></a>00155                   CPL_TYPE_DOUBLE,
-<a name="l00156"></a>00156                               <span class="stringliteral">"Maximum Residuals value: "</span>
-<a name="l00157"></a>00157                               <span class="stringliteral">"beyond this value the fit is rejected"</span>,
-<a name="l00158"></a>00158                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00159"></a>00159                               0.5);
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-max_residual"</span>);
-<a name="l00162"></a>00162   cpl_parameterlist_append(list, p);
-<a name="l00163"></a>00163 
-<a name="l00164"></a>00164 <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span>
-<a name="l00165"></a>00165   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_a_coefficients"</span>,
-<a name="l00166"></a>00166                   CPL_TYPE_INT,
-<a name="l00167"></a>00167                               <span class="stringliteral">"Number of A coefficients: number of "</span>
-<a name="l00168"></a>00168                               <span class="stringliteral">"polynomial coefficients for the "</span>
-<a name="l00169"></a>00169                               <span class="stringliteral">"dispersion relation"</span>,
-<a name="l00170"></a>00170                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00171"></a>00171                               4);
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-n_a_coeffs"</span>);
-<a name="l00174"></a>00174   cpl_parameterlist_append(list, p);
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176  <span class="comment">/* # of polynomial coefficients used for the fit of </span>
-<a name="l00177"></a>00177 <span class="comment">    the dispersion coefficients */</span>
-<a name="l00178"></a>00178   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_b_coefficients"</span>,
-<a name="l00179"></a>00179                   CPL_TYPE_INT,
-<a name="l00180"></a>00180                               <span class="stringliteral">"Number of B coefficients: "</span>
-<a name="l00181"></a>00181                               <span class="stringliteral">"number of polynomial coefficients for the "</span>
-<a name="l00182"></a>00182                               <span class="stringliteral">"polynomial fit of the dispersion coefficients"</span>,
-<a name="l00183"></a>00183                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00184"></a>00184                               2);
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-n_b_coeffs"</span>);
-<a name="l00187"></a>00187   cpl_parameterlist_append(list, p);
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189  <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span>
-<a name="l00190"></a>00190   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.sigma_factor"</span>,
-<a name="l00191"></a>00191                   CPL_TYPE_DOUBLE,
-<a name="l00192"></a>00192                               <span class="stringliteral">"Sigma Factor: "</span>
-<a name="l00193"></a>00193                               <span class="stringliteral">"Factor of the standard deviation of the "</span>
-<a name="l00194"></a>00194                               <span class="stringliteral">"polynomial coefficients of the dispersion "</span>
-<a name="l00195"></a>00195                               <span class="stringliteral">"relation beyond which the coefficients are "</span>
-<a name="l00196"></a>00196                               <span class="stringliteral">"not used for the fit"</span>,
-<a name="l00197"></a>00197                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00198"></a>00198                               1.5);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-sigma_factor"</span>);
-<a name="l00201"></a>00201   cpl_parameterlist_append(list, p);
-<a name="l00202"></a>00202 
-<a name="l00203"></a>00203   <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span>
-<a name="l00204"></a>00204 <span class="comment">       should be written into an ASCII file */</span>
-<a name="l00205"></a>00205   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.write_coeffs_ind"</span>,
-<a name="l00206"></a>00206                   CPL_TYPE_BOOL,
-<a name="l00207"></a>00207                               <span class="stringliteral">"Write Coefficients Index: "</span>
-<a name="l00208"></a>00208                               <span class="stringliteral">"indicates if the coefficients should "</span>
-<a name="l00209"></a>00209                               <span class="stringliteral">"be written into a file or not"</span>,
-<a name="l00210"></a>00210                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00211"></a>00211                               TRUE);
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-wcoeff_ind"</span>);
-<a name="l00214"></a>00214   cpl_parameterlist_append(list, p);
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216   <span class="comment">/* indicates if the fit parameters should be written into an ASCII file */</span>
-<a name="l00217"></a>00217   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.write_par_ind"</span>,
-<a name="l00218"></a>00218                   CPL_TYPE_BOOL,
-<a name="l00219"></a>00219                               <span class="stringliteral">"Write Parameter Index: "</span>
-<a name="l00220"></a>00220                               <span class="stringliteral">"indicates if the fit parameters should "</span>
-<a name="l00221"></a>00221                               <span class="stringliteral">"be written into a file or not "</span>,
-<a name="l00222"></a>00222                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00223"></a>00223                               TRUE);
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-par_ind"</span>);
-<a name="l00226"></a>00226   cpl_parameterlist_append(list, p);
-<a name="l00227"></a>00227 
-<a name="l00228"></a>00228 
-<a name="l00229"></a>00229 
-<a name="l00230"></a>00230 
-<a name="l00231"></a>00231 
-<a name="l00232"></a>00232 
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234 
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236   <span class="comment">/* dispersion relation */</span>
-<a name="l00237"></a>00237 
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239 
-<a name="l00240"></a>00240   <span class="comment">/* minimal distance of the slitlets in spectral direction */</span>
-<a name="l00241"></a>00241   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.pixel_dist"</span>,
-<a name="l00242"></a>00242                   CPL_TYPE_INT,
-<a name="l00243"></a>00243                          <span class="stringliteral">"Minimal Slitlets's Distance in spectral direction"</span>,
-<a name="l00244"></a>00244                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00245"></a>00245                               15);
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-pixel_dist"</span>);
-<a name="l00248"></a>00248   cpl_parameterlist_append(list, p);
-<a name="l00249"></a>00249 
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251 
-<a name="l00252"></a>00252   <span class="comment">/* allowed pixel position tolerance between estimated and fitted line </span>
-<a name="l00253"></a>00253 <span class="comment">     position</span>
-<a name="l00254"></a>00254 <span class="comment">  */</span>
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.pixel_tol"</span>,
-<a name="l00257"></a>00257                   CPL_TYPE_DOUBLE,
-<a name="l00258"></a>00258                               <span class="stringliteral">"Pixel Tolerance: allowed pixel position "</span>
-<a name="l00259"></a>00259                               <span class="stringliteral">"tolerance between estimated and fitted "</span>
-<a name="l00260"></a>00260                   <span class="stringliteral">"line position"</span>,
-<a name="l00261"></a>00261                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00262"></a>00262                               5.0);
-<a name="l00263"></a>00263 
-<a name="l00264"></a>00264   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-pixel_tol"</span>);
-<a name="l00265"></a>00265   cpl_parameterlist_append(list, p);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267   <span class="comment">/* Wavelength Map */</span>
-<a name="l00268"></a>00268 <span class="comment">/* indicator if wavelength map should be generated or not */</span>
-<a name="l00269"></a>00269   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.wave_map_ind"</span>,
-<a name="l00270"></a>00270                   CPL_TYPE_BOOL,
-<a name="l00271"></a>00271                               <span class="stringliteral">"Wavelength Map Indicator: "</span>
-<a name="l00272"></a>00272                               <span class="stringliteral">"indicates if the wavelength calibration map "</span>
-<a name="l00273"></a>00273                               <span class="stringliteral">"should be generated (TRUE) or not (FALSE)"</span>,
-<a name="l00274"></a>00274                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00275"></a>00275                               FALSE);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-wave_map_ind"</span>);
-<a name="l00278"></a>00278   cpl_parameterlist_append(list, p);
-<a name="l00279"></a>00279 
-<a name="l00280"></a>00280   <span class="comment">/* magnifying factor for FFT */</span>
-<a name="l00281"></a>00281   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.mag_factor"</span>,
-<a name="l00282"></a>00282                   CPL_TYPE_INT,
-<a name="l00283"></a>00283                               <span class="stringliteral">"Magnificator Factor: "</span>
-<a name="l00284"></a>00284                               <span class="stringliteral">"magnifying factor for the number of pixels "</span>
-<a name="l00285"></a>00285                               <span class="stringliteral">"in the columns needed for FFT"</span>,
-<a name="l00286"></a>00286                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00287"></a>00287                               8);
-<a name="l00288"></a>00288 
-<a name="l00289"></a>00289   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-mag_factor"</span>);
-<a name="l00290"></a>00290   cpl_parameterlist_append(list, p);
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292 <span class="comment">/* Fits Slits */</span>
-<a name="l00293"></a>00293 <span class="comment">/* indicator if the fit of the slit edge positions is carried through or not */</span>
-<a name="l00294"></a>00294   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.slit_pos_indicator"</span>,
-<a name="l00295"></a>00295                   CPL_TYPE_BOOL,
-<a name="l00296"></a>00296                               <span class="stringliteral">"Slit Position Indicator: "</span>
-<a name="l00297"></a>00297                               <span class="stringliteral">"indicates if the fits of the slitlet "</span>
-<a name="l00298"></a>00298                               <span class="stringliteral">"edge positions should be carried "</span>
-<a name="l00299"></a>00299                               <span class="stringliteral">"through or not"</span>,
-<a name="l00300"></a>00300                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00301"></a>00301                               TRUE);
-<a name="l00302"></a>00302 
-<a name="l00303"></a>00303   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-slit_pos_ind"</span>);
-<a name="l00304"></a>00304   cpl_parameterlist_append(list, p);
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306 <span class="comment">/* indicator if the fit model function is a Boltzmann function or not */</span>
-<a name="l00307"></a>00307   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fit_boltz_indicator"</span>,
-<a name="l00308"></a>00308                   CPL_TYPE_BOOL ,
-<a name="l00309"></a>00309                               <span class="stringliteral">"Fit Boltzmann Indicator: "</span>
-<a name="l00310"></a>00310                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00311"></a>00311                               <span class="stringliteral">"positions is carried trough by using a "</span>
-<a name="l00312"></a>00312                               <span class="stringliteral">"Boltzmann function as model function"</span>,
-<a name="l00313"></a>00313                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00314"></a>00314                               TRUE);
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fit_boltz_ind"</span>);
-<a name="l00317"></a>00317   cpl_parameterlist_append(list, p);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319 <span class="comment">/* indicator if the fit model function </span>
-<a name="l00320"></a>00320 <span class="comment">   is a simple edge function or not */</span>
-<a name="l00321"></a>00321   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fit_edge_indicator"</span>,
-<a name="l00322"></a>00322                   CPL_TYPE_BOOL,
-<a name="l00323"></a>00323                               <span class="stringliteral">"Fit Edge Indicator: "</span>
-<a name="l00324"></a>00324                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00325"></a>00325                               <span class="stringliteral">"positions is carried through by using a "</span>
-<a name="l00326"></a>00326                               <span class="stringliteral">"simple edge function as model function"</span>,
-<a name="l00327"></a>00327                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00328"></a>00328                               FALSE);
-<a name="l00329"></a>00329 
-<a name="l00330"></a>00330   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fit_edge_ind"</span>);
-<a name="l00331"></a>00331   cpl_parameterlist_append(list, p);
-<a name="l00332"></a>00332 
-<a name="l00333"></a>00333  <span class="comment">/* indicator if the fit guess position are </span>
-<a name="l00334"></a>00334 <span class="comment">    user given or calculated automatically */</span>
-<a name="l00335"></a>00335 
-<a name="l00336"></a>00336   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.estimate_indicator"</span>,
-<a name="l00337"></a>00337                   CPL_TYPE_BOOL,
-<a name="l00338"></a>00338                               <span class="stringliteral">"Estimate Indicator: "</span>
-<a name="l00339"></a>00339                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span>
-<a name="l00340"></a>00340                               <span class="stringliteral">"positions is carried through by using a list "</span>
-<a name="l00341"></a>00341                               <span class="stringliteral">"of estimated guess positions in a file (TRUE)"</span>
-<a name="l00342"></a>00342                               <span class="stringliteral">"or if the initial positions are calculated "</span>
-<a name="l00343"></a>00343                               <span class="stringliteral">"automatically (FALSE). The estimation case "</span>
-<a name="l00344"></a>00344                               <span class="stringliteral">"is more stable"</span>,
-<a name="l00345"></a>00345                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00346"></a>00346                               FALSE);
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-estimate_ind"</span>);
-<a name="l00349"></a>00349   cpl_parameterlist_append(list, p);
-<a name="l00350"></a>00350 
-<a name="l00351"></a>00351 <span class="comment">/* pixel length of the row box within which the fit of the </span>
-<a name="l00352"></a>00352 <span class="comment">   slitlet positions is carried out*/</span>
-<a name="l00353"></a>00353 
-<a name="l00354"></a>00354   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.box_length"</span>,
-<a name="l00355"></a>00355                   CPL_TYPE_INT,
-<a name="l00356"></a>00356                               <span class="stringliteral">"Box Length: "</span>
-<a name="l00357"></a>00357                               <span class="stringliteral">"pixel length of the row box within "</span>
-<a name="l00358"></a>00358                               <span class="stringliteral">"which the fit is carried out"</span>,
-<a name="l00359"></a>00359                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00360"></a>00360                               32);
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-box_len"</span>);
-<a name="l00363"></a>00363   cpl_parameterlist_append(list, p);
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365 <span class="comment">/* float box half width in spectral direction */</span>
-<a name="l00366"></a>00366   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.y_box"</span>,
-<a name="l00367"></a>00367                   CPL_TYPE_DOUBLE,
-<a name="l00368"></a>00368                               <span class="stringliteral">"Y Box: half width of a small box in "</span>
-<a name="l00369"></a>00369                               <span class="stringliteral">"spectral direction within which the "</span>
-<a name="l00370"></a>00370                               <span class="stringliteral">"maximal intensity pixel is searched"</span>,
-<a name="l00371"></a>00371                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00372"></a>00372                               5.);
-<a name="l00373"></a>00373 
-<a name="l00374"></a>00374  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-y_box"</span>);
-<a name="l00375"></a>00375   cpl_parameterlist_append(list, p);
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377 
-<a name="l00378"></a>00378 <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span>
-<a name="l00379"></a>00379   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.diff_tol"</span>,
-<a name="l00380"></a>00380                   CPL_TYPE_DOUBLE,
-<a name="l00381"></a>00381                               <span class="stringliteral">"Difference Tolearance: "</span>
-<a name="l00382"></a>00382                               <span class="stringliteral">"maximal tolerable difference of the "</span>
-<a name="l00383"></a>00383                               <span class="stringliteral">"resulting fit positions of the slitlet "</span>
-<a name="l00384"></a>00384                               <span class="stringliteral">"edges with respect to the expected positions"</span>,
-<a name="l00385"></a>00385                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00386"></a>00386                               2.);
-<a name="l00387"></a>00387 
-<a name="l00388"></a>00388   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-diff_toll"</span>);
-<a name="l00389"></a>00389   cpl_parameterlist_append(list, p);
-<a name="l00390"></a>00390 
-<a name="l00391"></a>00391 
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.qc_thresh_min"</span>,
-<a name="l00394"></a>00394                   CPL_TYPE_INT,
-<a name="l00395"></a>00395                               <span class="stringliteral">"qc_thresh_min"</span>,
-<a name="l00396"></a>00396                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00397"></a>00397                               0);
-<a name="l00398"></a>00398 
-<a name="l00399"></a>00399   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-qc_thresh_min"</span>);
-<a name="l00400"></a>00400   cpl_parameterlist_append(list, p);
-<a name="l00401"></a>00401 
-<a name="l00402"></a>00402 
-<a name="l00403"></a>00403   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.qc_thresh_max"</span>,
-<a name="l00404"></a>00404                   CPL_TYPE_INT,
-<a name="l00405"></a>00405                               <span class="stringliteral">"qc_thresh_max"</span>,
-<a name="l00406"></a>00406                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00407"></a>00407                               49000);
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-qc_thresh_max"</span>);
-<a name="l00410"></a>00410   cpl_parameterlist_append(list, p);
-<a name="l00411"></a>00411 
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413   <span class="comment">/*Resampling */</span>
-<a name="l00414"></a>00414  <span class="comment">/* number of coefficients for the polynomial interpolation */</span>
-<a name="l00415"></a>00415   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_coeffs"</span>,
-<a name="l00416"></a>00416                   CPL_TYPE_INT,
-<a name="l00417"></a>00417                               <span class="stringliteral">"number of coefficients for the polynomial "</span>
-<a name="l00418"></a>00418                               <span class="stringliteral">"interpolation "</span>,
-<a name="l00419"></a>00419                               <span class="stringliteral">"sinfoni.wavecal"</span>,
-<a name="l00420"></a>00420                                3);
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-no_coeffs"</span>);
-<a name="l00423"></a>00423   cpl_parameterlist_append(list, p);
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 
-<a name="l00427"></a>00427 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_config.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_wavecal_config.c,v 1.6 2012/03/03 10:35:14 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2012/03/03 10:35:14 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.6 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="preprocessor">#include "sinfo_wavecal_config.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>  sinfo_wavecal_config_add(cpl_parameterlist *list)</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>   cpl_parameter *p;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>   <span class="keywordflow">if</span> (!list) {</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   }</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.slitpos_boostrap"</span>,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>                            <span class="stringliteral">"Switch to get a new slitpos without a reference: "</span>,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>                               FALSE);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-slitpos_bootstrap"</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   <span class="comment">/*</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">  p = cpl_parameter_new_value("sinfoni.wavecal.mflat_frm_switch",</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">                  CPL_TYPE_BOOL,</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="comment">                              "Switch for master lampflat input: ",</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="comment">                              "sinfoni.wavecal",</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">                              TRUE);</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="comment"></span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment"></span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,"wcal-mflat_frm_switch");</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">  cpl_parameterlist_append(list, p);</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> <span class="comment">/* Find Lines */</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="comment">/* indicates if the dispersion relation is already determined or not */</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.calib_indicator"</span>,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>                               <span class="stringliteral">"Calib Indicator: "</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                               <span class="stringliteral">"FALSE: if the dispersion relation is already "</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>                             <span class="stringliteral">"known, the routine can jump to the sinfo_waveMap "</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>                               <span class="stringliteral">"section "</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>                               <span class="stringliteral">"TRUE: if the dispersion relation "</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>                               <span class="stringliteral">"must first be determined"</span>,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>                               TRUE);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-calib_indicator"</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">/* minimal difference of mean and sinfo_median column intensity */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.min_diff"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>                               <span class="stringliteral">"Minimum Of Difference: "</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>                           <span class="stringliteral">"minimum difference of mean and sinfo_median column "</span></div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>                           <span class="stringliteral">"intensity to carry out the cross sinfo_correlation"</span>,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                               1.);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span> </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-min_diff"</span>);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> <span class="comment">/* half width of a box within which the line must sit */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.half_width"</span>,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>                               <span class="stringliteral">"Half Width: "</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                               <span class="stringliteral">"half width of a box within which the line "</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                               <span class="stringliteral">"must be placed"</span>,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                               7);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-hw"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">/* sigma of Gaussian of artificial model spectra */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.sigma"</span>,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>                               <span class="stringliteral">"Sigma: sigma of Gaussian which is convolved "</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>                               <span class="stringliteral">"with the artificial spectrum generated using "</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>                               <span class="stringliteral">"the line list"</span>,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>                                2.);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-sigma"</span>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>   <span class="comment">/* Wavelength Calibration */</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> <span class="comment">/* guess value for fwhm of emission lines */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fwhm"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>                               <span class="stringliteral">"FWHM: initial guess value for the fwhm of "</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                               <span class="stringliteral">"the Gaussian used for the line fit"</span>,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                                2.83);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fwhm"</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">/* minimum amplitude of a line to be fitted */</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span>,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>                               <span class="stringliteral">"Minimum Of Amplitude: "</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>                               <span class="stringliteral">"of the Gaussian to do the fit"</span>,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                               5.);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-min_amplitude"</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">/* maximal residual value for a valid fit */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.max_residual"</span>,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>                               <span class="stringliteral">"Maximum Residuals value: "</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>                               <span class="stringliteral">"beyond this value the fit is rejected"</span>,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>                               0.5);</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-max_residual"</span>);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span> </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> <span class="comment">/* # of polynomial coefficients used for the dispersion relation */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_a_coefficients"</span>,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>                               <span class="stringliteral">"Number of A coefficients: number of "</span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>                               <span class="stringliteral">"polynomial coefficients for the "</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                               <span class="stringliteral">"dispersion relation"</span>,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                               4);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-n_a_coeffs"</span>);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>  <span class="comment">/* # of polynomial coefficients used for the fit of </span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> <span class="comment">    the dispersion coefficients */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_b_coefficients"</span>,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>                               <span class="stringliteral">"Number of B coefficients: "</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>                               <span class="stringliteral">"number of polynomial coefficients for the "</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>                               <span class="stringliteral">"polynomial fit of the dispersion coefficients"</span>,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>                               2);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-n_b_coeffs"</span>);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>  <span class="comment">/* minimal factor of the standard deviation of the fit coefficients */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.sigma_factor"</span>,</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>                               <span class="stringliteral">"Sigma Factor: "</span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>                               <span class="stringliteral">"Factor of the standard deviation of the "</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                               <span class="stringliteral">"polynomial coefficients of the dispersion "</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                               <span class="stringliteral">"relation beyond which the coefficients are "</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                               <span class="stringliteral">"not used for the fit"</span>,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                               1.5);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-sigma_factor"</span>);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>   <span class="comment">/* indicates if the parameterized dispersion relation coefficients </span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> <span class="comment">       should be written into an ASCII file */</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.write_coeffs_ind"</span>,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                               <span class="stringliteral">"Write Coefficients Index: "</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                               <span class="stringliteral">"indicates if the coefficients should "</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>                               <span class="stringliteral">"be written into a file or not"</span>,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                               TRUE);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-wcoeff_ind"</span>);</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>   <span class="comment">/* indicates if the fit parameters should be written into an ASCII file */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.write_par_ind"</span>,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>                               <span class="stringliteral">"Write Parameter Index: "</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                               <span class="stringliteral">"indicates if the fit parameters should "</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                               <span class="stringliteral">"be written into a file or not "</span>,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                               TRUE);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-par_ind"</span>);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span> </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span> </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span> </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span> </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span> </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span> </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span> </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>   <span class="comment">/* dispersion relation */</span></div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span> </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span> </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>   <span class="comment">/* minimal distance of the slitlets in spectral direction */</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.pixel_dist"</span>,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>                          <span class="stringliteral">"Minimal Slitlets's Distance in spectral direction"</span>,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>                               15);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-pixel_dist"</span>);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span> </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span> </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>   <span class="comment">/* allowed pixel position tolerance between estimated and fitted line </span></div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span> <span class="comment">     position</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> <span class="comment">  */</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.pixel_tol"</span>,</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                               <span class="stringliteral">"Pixel Tolerance: allowed pixel position "</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>                               <span class="stringliteral">"tolerance between estimated and fitted "</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>                   <span class="stringliteral">"line position"</span>,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>                               5.0);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> </div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-pixel_tol"</span>);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>   <span class="comment">/* Wavelength Map */</span></div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> <span class="comment">/* indicator if wavelength map should be generated or not */</span></div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.wave_map_ind"</span>,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>                               <span class="stringliteral">"Wavelength Map Indicator: "</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>                               <span class="stringliteral">"indicates if the wavelength calibration map "</span></div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                               <span class="stringliteral">"should be generated (TRUE) or not (FALSE)"</span>,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>                               FALSE);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-wave_map_ind"</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span> </div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>   <span class="comment">/* magnifying factor for FFT */</span></div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.mag_factor"</span>,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                               <span class="stringliteral">"Magnificator Factor: "</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>                               <span class="stringliteral">"magnifying factor for the number of pixels "</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>                               <span class="stringliteral">"in the columns needed for FFT"</span>,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                               8);</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span> </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-mag_factor"</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="comment">/* Fits Slits */</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="comment">/* indicator if the fit of the slit edge positions is carried through or not */</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.slit_pos_indicator"</span>,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                               <span class="stringliteral">"Slit Position Indicator: "</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                               <span class="stringliteral">"indicates if the fits of the slitlet "</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                               <span class="stringliteral">"edge positions should be carried "</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                               <span class="stringliteral">"through or not"</span>,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                               TRUE);</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> </div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-slit_pos_ind"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="comment">/* indicator if the fit model function is a Boltzmann function or not */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fit_boltz_indicator"</span>,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>                   CPL_TYPE_BOOL ,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>                               <span class="stringliteral">"Fit Boltzmann Indicator: "</span></div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>                               <span class="stringliteral">"positions is carried trough by using a "</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>                               <span class="stringliteral">"Boltzmann function as model function"</span>,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>                               TRUE);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fit_boltz_ind"</span>);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">/* indicator if the fit model function </span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">   is a simple edge function or not */</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.fit_edge_indicator"</span>,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>                               <span class="stringliteral">"Fit Edge Indicator: "</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                               <span class="stringliteral">"positions is carried through by using a "</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                               <span class="stringliteral">"simple edge function as model function"</span>,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>                               FALSE);</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-fit_edge_ind"</span>);</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span> </div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>  <span class="comment">/* indicator if the fit guess position are </span></div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> <span class="comment">    user given or calculated automatically */</span></div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> </div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.estimate_indicator"</span>,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                   CPL_TYPE_BOOL,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>                               <span class="stringliteral">"Estimate Indicator: "</span></div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>                               <span class="stringliteral">"indicates if the fits of the slitlet edge "</span></div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>                               <span class="stringliteral">"positions is carried through by using a list "</span></div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>                               <span class="stringliteral">"of estimated guess positions in a file (TRUE)"</span></div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>                               <span class="stringliteral">"or if the initial positions are calculated "</span></div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>                               <span class="stringliteral">"automatically (FALSE). The estimation case "</span></div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>                               <span class="stringliteral">"is more stable"</span>,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>                               FALSE);</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-estimate_ind"</span>);</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span> </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span> <span class="comment">/* pixel length of the row box within which the fit of the </span></div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> <span class="comment">   slitlet positions is carried out*/</span></div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span> </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.box_length"</span>,</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>                               <span class="stringliteral">"Box Length: "</span></div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>                               <span class="stringliteral">"pixel length of the row box within "</span></div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>                               <span class="stringliteral">"which the fit is carried out"</span>,</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>                               32);</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-box_len"</span>);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span> <span class="comment">/* float box half width in spectral direction */</span></div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.y_box"</span>,</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>                               <span class="stringliteral">"Y Box: half width of a small box in "</span></div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>                               <span class="stringliteral">"spectral direction within which the "</span></div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>                               <span class="stringliteral">"maximal intensity pixel is searched"</span>,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>                               5.);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span> </div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>  cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-y_box"</span>);</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span> </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> <span class="comment">/* maximal tolerable difference to the expected slitlet positions */</span></div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.diff_tol"</span>,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>                   CPL_TYPE_DOUBLE,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>                               <span class="stringliteral">"Difference Tolearance: "</span></div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                               <span class="stringliteral">"maximal tolerable difference of the "</span></div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>                               <span class="stringliteral">"resulting fit positions of the slitlet "</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>                               <span class="stringliteral">"edges with respect to the expected positions"</span>,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>                               2.);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-diff_toll"</span>);</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span> </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span> </div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>  p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>                               <span class="stringliteral">"qc_thresh_min"</span>,</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                               0);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span> </div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-qc_thresh_min"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span> </div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span> </div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>                               <span class="stringliteral">"qc_thresh_max"</span>,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                               49000);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-qc_thresh_max"</span>);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> </div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>   <span class="comment">/*Resampling */</span></div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>  <span class="comment">/* number of coefficients for the polynomial interpolation */</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>   p = cpl_parameter_new_value(<span class="stringliteral">"sinfoni.wavecal.n_coeffs"</span>,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>                   CPL_TYPE_INT,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>                               <span class="stringliteral">"number of coefficients for the polynomial "</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>                               <span class="stringliteral">"interpolation "</span>,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>                               <span class="stringliteral">"sinfoni.wavecal"</span>,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>                                3);</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>   cpl_parameter_set_alias(p, CPL_PARAMETER_MODE_CLI,<span class="stringliteral">"wcal-no_coeffs"</span>);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>   cpl_parameterlist_append(list, p);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> </div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__config_8h_source.html b/html/sinfo__wavecal__config_8h_source.html
index 089d4cc..e60c21f 100644
--- a/html/sinfo__wavecal__config_8h_source.html
+++ b/html/sinfo__wavecal__config_8h_source.html
@@ -2,47 +2,78 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_config.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_config.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_wavecal_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
-<a name="l00007"></a>00007 <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span>
-<a name="l00008"></a>00008 <span class="comment"> * License as published by the Free Software Foundation; either</span>
-<a name="l00009"></a>00009 <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This library is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
-<a name="l00014"></a>00014 <span class="comment"> * Lesser General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span>
-<a name="l00017"></a>00017 <span class="comment"> * License along with this library; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 <span class="comment">/*</span>
-<a name="l00021"></a>00021 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Revision: 1.1 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00025"></a>00025 <span class="comment"> */</span>
-<a name="l00026"></a>00026 
-<a name="l00027"></a>00027  <span class="comment">/****************************************************************</span>
-<a name="l00028"></a>00028 <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span>
-<a name="l00029"></a>00029 <span class="comment">  ****************************************************************/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span>
-<a name="l00031"></a>00031 <span class="keywordtype">void</span>
-<a name="l00032"></a>00032 sinfo_wavecal_config_add(cpl_parameterlist *list);
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_config.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_wavecal_config.h,v 1.1 2006/10/20 08:06:33 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the CPL (Common Pipeline Library)</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This library is free software; you can redistribute it and/or</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * modify it under the terms of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * License as published by the Free Software Foundation; either</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * version 2.1 of the License, or (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This library is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * Lesser General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * License along with this library; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Date: 2006/10/20 08:06:33 $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Revision: 1.1 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>  <span class="comment">/****************************************************************</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">  *   Wavecal Frames Data Reduction Parameter Initialization        *</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">  ****************************************************************/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span>    <span class="comment">/* defines parlist structure */</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> sinfo_wavecal_config_add(cpl_parameterlist *list);</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__ini_8h_source.html b/html/sinfo__wavecal__ini_8h_source.html
index 1cea952..4043882 100644
--- a/html/sinfo__wavecal__ini_8h_source.html
+++ b/html/sinfo__wavecal__ini_8h_source.html
@@ -2,64 +2,95 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_ini.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_ini.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   File name    :   sinfo_wavecal_ini.h</span>
-<a name="l00021"></a>00021 <span class="comment">   Author       :    Juergen Schreiber</span>
-<a name="l00022"></a>00022 <span class="comment">   Created on   :    Sept 14, 2001</span>
-<a name="l00023"></a>00023 <span class="comment">   Description  :    wavelength calibration ini file handling for SPIFFI</span>
-<a name="l00024"></a>00024 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00025"></a>00025 <span class="preprocessor">#ifndef SINFO_WAVECAL_INI_H</span>
-<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_INI_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00028"></a>00028 <span class="comment">                                Includes</span>
-<a name="l00029"></a>00029 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00030"></a>00030 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                             Function prototypes </span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00054"></a>00054 <span class="keywordtype">int</span> 
-<a name="l00055"></a>00055 generateWave_ini_file(
-<a name="l00056"></a>00056         <span class="keywordtype">char</span> * ini_name,
-<a name="l00057"></a>00057         <span class="keywordtype">char</span> * name_i,
-<a name="l00058"></a>00058         <span class="keywordtype">char</span> * name_o,
-<a name="l00059"></a>00059         <span class="keywordtype">char</span> * name_c
-<a name="l00060"></a>00060 );
-<a name="l00061"></a>00061  
-<a name="l00062"></a>00062 
-<a name="l00074"></a>00074 wave_config * 
-<a name="l00075"></a>00075 parse_wave_ini_file(<span class="keywordtype">char</span> * ini_name) ;
-<a name="l00076"></a>00076  
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_ini.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   File name    :   sinfo_wavecal_ini.h</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   Author       :    Juergen Schreiber</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Created on   :    Sept 14, 2001</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Description  :    wavelength calibration ini file handling for SPIFFI</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="preprocessor">#ifndef SINFO_WAVECAL_INI_H</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_INI_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keywordtype">int</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> generateWave_ini_file(</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>         <span class="keywordtype">char</span> * ini_name,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>         <span class="keywordtype">char</span> * name_i,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>         <span class="keywordtype">char</span> * name_o,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>         <span class="keywordtype">char</span> * name_c</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> );</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>  </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> wave_config * </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> parse_wave_ini_file(<span class="keywordtype">char</span> * ini_name) ;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>  </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__ini__by__cpl_8c_source.html b/html/sinfo__wavecal__ini__by__cpl_8c_source.html
index 7e06b37..44b3056 100644
--- a/html/sinfo__wavecal__ini__by__cpl_8c_source.html
+++ b/html/sinfo__wavecal__ini__by__cpl_8c_source.html
@@ -2,544 +2,575 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_ini_by_cpl.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_ini_by_cpl.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment"></span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_wavecal_ini_by_cpl.c</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 21, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   wavelength calibration cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"></span>
-<a name="l00026"></a>00026 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 
-<a name="l00033"></a>00033 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00034"></a>00034 <span class="comment">                                Includes</span>
-<a name="l00035"></a>00035 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include <string.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_raw_types.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_ref_types.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_hidden.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_utils.h"</span>
-<a name="l00045"></a>00045 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                    Functions private to this module</span>
-<a name="l00047"></a>00047 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00050"></a>00050 parse_section_frames ( wave_config *, cpl_parameterlist* cpl_cfg, cpl_frameset* sof,
-<a name="l00051"></a>00051                        cpl_frameset** raw, <span class="keywordtype">int</span>* status );
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00054"></a>00054 parse_section_findlines ( wave_config *, cpl_parameterlist* cpl_cfg );
-<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00056"></a>00056 parse_section_wavecalib ( wave_config *, cpl_parameterlist* cpl_cfg );
-<a name="l00057"></a>00057 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00058"></a>00058 parse_section_wavemap ( wave_config *, cpl_parameterlist* cpl_cfg );
-<a name="l00059"></a>00059 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00060"></a>00060 parse_section_qclog ( wave_config *, cpl_parameterlist* cpl_cfg );
-<a name="l00061"></a>00061 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00062"></a>00062 parse_section_fitslits ( wave_config *, cpl_parameterlist* cpl_cfg );
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 
-<a name="l00074"></a>00074 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00092"></a>00092 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00093"></a>00093 
-<a name="l00094"></a>00094 <span class="comment">/* Removed  generateWave_ini_file */</span>
-<a name="l00095"></a>00095 
-<a name="l00096"></a>00096 <span class="comment">/*-------------------------------------------------------------------------*/</span>
-<a name="l00107"></a>00107 <span class="comment">/*--------------------------------------------------------------------------*/</span>
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109 wave_config *
-<a name="l00110"></a>00110 sinfo_parse_cpl_input_wave ( cpl_parameterlist* cpl_cfg,
-<a name="l00111"></a>00111                              cpl_frameset* sof, cpl_frameset** raw )
-<a name="l00112"></a>00112 {
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114     <span class="keywordtype">int</span>  status=0;
-<a name="l00115"></a>00115     wave_config   * cfg= sinfo_wave_cfg_create();
-<a name="l00116"></a>00116     <span class="comment">/*</span>
-<a name="l00117"></a>00117 <span class="comment">     * Perform sanity checks, fill up the structure with what was</span>
-<a name="l00118"></a>00118 <span class="comment">     * found in the ini file</span>
-<a name="l00119"></a>00119 <span class="comment">     */</span>
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     parse_section_findlines ( cfg, cpl_cfg );
-<a name="l00122"></a>00122     parse_section_wavecalib ( cfg, cpl_cfg );
-<a name="l00123"></a>00123     parse_section_wavemap ( cfg, cpl_cfg );
-<a name="l00124"></a>00124     parse_section_fitslits ( cfg, cpl_cfg );
-<a name="l00125"></a>00125     parse_section_qclog ( cfg, cpl_cfg );
-<a name="l00126"></a>00126     parse_section_frames ( cfg, cpl_cfg, sof, raw, &status );
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128     <span class="keywordflow">if</span> ( status > 0 )
-<a name="l00129"></a>00129     {
-<a name="l00130"></a>00130         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"parsing cpl input"</span> );
-<a name="l00131"></a>00131         sinfo_wave_cfg_destroy ( cfg );
-<a name="l00132"></a>00132         cfg = NULL ;
-<a name="l00133"></a>00133         <span class="keywordflow">return</span> NULL ;
-<a name="l00134"></a>00134     }
-<a name="l00135"></a>00135     <span class="keywordflow">return</span> cfg ;
-<a name="l00136"></a>00136 }
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138 
-<a name="l00139"></a>00139 <span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00140"></a>00140 <span class="comment">   Functions:   parse_section_xxx()</span>
-<a name="l00141"></a>00141 <span class="comment">   In           :       symbolic table read from ini file</span>
-<a name="l00142"></a>00142 <span class="comment">   Out          :       void</span>
-<a name="l00143"></a>00143 <span class="comment">   Job          :       update a wave_config structure from what can be</span>
-<a name="l00144"></a>00144 <span class="comment">                            found in the ini file.</span>
-<a name="l00145"></a>00145 <span class="comment">   Notice       :       all of these functions update a status integer to</span>
-<a name="l00146"></a>00146 <span class="comment">                        indicate if an error occurred, or leave it as it is if</span>
-<a name="l00147"></a>00147 <span class="comment">                        everything went Ok.</span>
-<a name="l00148"></a>00148 <span class="comment"></span>
-<a name="l00149"></a>00149 <span class="comment">        parse_section_general()</span>
-<a name="l00150"></a>00150 <span class="comment">        parse_section_findlines()</span>
-<a name="l00151"></a>00151 <span class="comment">        parse_section_wavecalib()</span>
-<a name="l00152"></a>00152 <span class="comment">        parse_section_wavemap()</span>
-<a name="l00153"></a>00153 <span class="comment">        parse_section_fitslits()</span>
-<a name="l00154"></a>00154 <span class="comment"></span>
-<a name="l00155"></a>00155 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00156"></a>00156 
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00160"></a>00160 parse_section_frames ( wave_config * cfg,cpl_parameterlist* cpl_cfg, cpl_frameset* sof,
-<a name="l00161"></a>00161                        cpl_frameset** raw, <span class="keywordtype">int</span>* status )
-<a name="l00162"></a>00162 {
-<a name="l00163"></a>00163     cpl_frame* frame   = NULL;
-<a name="l00164"></a>00164     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];
-<a name="l00165"></a>00165     <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];
-<a name="l00166"></a>00166     <span class="keywordtype">char</span> band[FILE_NAME_SZ];
-<a name="l00167"></a>00167     <span class="keywordtype">int</span> ins_set=0;
-<a name="l00168"></a>00168     <span class="keywordtype">int</span> nraw=0;
-<a name="l00169"></a>00169     cpl_parameter* p=NULL;
-<a name="l00170"></a>00170     cpl_table* drs_tab=NULL;
-<a name="l00171"></a>00171     wcal* w=sinfo_wcal_new();
-<a name="l00172"></a>00172     <span class="keywordtype">int</span> check=0;
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174     sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_LAMP_STACKED );
-<a name="l00175"></a>00175     nraw=cpl_frameset_get_size ( *raw );
-<a name="l00176"></a>00176     <span class="keywordflow">if</span> ( nraw==0 )
-<a name="l00177"></a>00177     {
-<a name="l00178"></a>00178         sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_NS_STACKED );
-<a name="l00179"></a>00179     }
-<a name="l00180"></a>00180     nraw=cpl_frameset_get_size ( *raw );
-<a name="l00181"></a>00181     <span class="keywordflow">if</span> ( nraw==0 )
-<a name="l00182"></a>00182     {
-<a name="l00183"></a>00183         sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_SLITPOS_STACKED );
-<a name="l00184"></a>00184     }
-<a name="l00185"></a>00185 
-<a name="l00186"></a>00186     nraw=cpl_frameset_get_size ( *raw );
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> ( nraw==0 )
-<a name="l00188"></a>00188     {
-<a name="l00189"></a>00189         sinfo_msg ( <span class="stringliteral">"Frame %s or %s or %s not found!"</span>,
-<a name="l00190"></a>00190                     PRO_WAVE_LAMP_STACKED,PRO_WAVE_NS_STACKED,PRO_WAVE_SLITPOS_STACKED );
-<a name="l00191"></a>00191         ( *status ) ++;
-<a name="l00192"></a>00192         return   ;
-<a name="l00193"></a>00193     }
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195     frame = cpl_frameset_get_frame ( *raw,0 );
-<a name="l00196"></a>00196     sinfo_get_spatial_res ( frame,spat_res );
-<a name="l00197"></a>00197 
-<a name="l00198"></a>00198     <span class="keywordflow">switch</span> ( sinfo_frame_is_on ( frame ) )
-<a name="l00199"></a>00199     {
-<a name="l00200"></a>00200         <span class="keywordflow">case</span> 0:
-<a name="l00201"></a>00201             strcpy ( lamp_status,<span class="stringliteral">"on"</span> );
-<a name="l00202"></a>00202             <span class="keywordflow">break</span>;
-<a name="l00203"></a>00203         <span class="keywordflow">case</span> 1:
-<a name="l00204"></a>00204             strcpy ( lamp_status,<span class="stringliteral">"off"</span> );
-<a name="l00205"></a>00205             <span class="keywordflow">break</span>;
-<a name="l00206"></a>00206         <span class="keywordflow">case</span> -1:
-<a name="l00207"></a>00207             strcpy ( lamp_status,<span class="stringliteral">"undefined"</span> );
-<a name="l00208"></a>00208             <span class="keywordflow">break</span>;
-<a name="l00209"></a>00209         <span class="keywordflow">default</span>:
-<a name="l00210"></a>00210             strcpy ( lamp_status,<span class="stringliteral">"undefined"</span> );
-<a name="l00211"></a>00211             <span class="keywordflow">break</span>;
-<a name="l00212"></a>00212 
-<a name="l00213"></a>00213 
-<a name="l00214"></a>00214     }
-<a name="l00215"></a>00215 
-<a name="l00216"></a>00216     sinfo_get_band ( frame,band );
-<a name="l00217"></a>00217     sinfo_msg ( <span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,
-<a name="l00218"></a>00218                 spat_res,              lamp_status,    band );
-<a name="l00219"></a>00219 
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221     sinfo_get_ins_set ( band,&ins_set );
-<a name="l00222"></a>00222     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_LAMP_STACKED ) )
-<a name="l00223"></a>00223     {
-<a name="l00224"></a>00224         frame = cpl_frameset_find ( sof,PRO_WAVE_LAMP_STACKED );
-<a name="l00225"></a>00225         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );
-<a name="l00226"></a>00226     }
-<a name="l00227"></a>00227     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_NS_STACKED ) )
-<a name="l00228"></a>00228     {
-<a name="l00229"></a>00229         frame = cpl_frameset_find ( sof,PRO_WAVE_NS_STACKED );
-<a name="l00230"></a>00230         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );
-<a name="l00231"></a>00231     }
-<a name="l00232"></a>00232     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_SLITPOS_STACKED ) )
-<a name="l00233"></a>00233     {
-<a name="l00234"></a>00234         frame = cpl_frameset_find ( sof,PRO_WAVE_SLITPOS_STACKED );
-<a name="l00235"></a>00235         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );
-<a name="l00236"></a>00236     }
-<a name="l00237"></a>00237     <span class="keywordflow">else</span>
-<a name="l00238"></a>00238     {
-<a name="l00239"></a>00239         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s or %s not found! Exit!"</span>,
-<a name="l00240"></a>00240                           PRO_WAVE_LAMP_STACKED,PRO_WAVE_NS_STACKED );
-<a name="l00241"></a>00241         ( *status ) ++;
-<a name="l00242"></a>00242         <span class="keywordflow">return</span>;
-<a name="l00243"></a>00243     }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245 
-<a name="l00246"></a>00246     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,DRS_SETUP_WAVE ) )
-<a name="l00247"></a>00247     {
-<a name="l00248"></a>00248         frame = cpl_frameset_find ( sof,DRS_SETUP_WAVE );
-<a name="l00249"></a>00249         strcpy ( cfg -> drs_setup,cpl_frame_get_filename ( frame ) );
-<a name="l00250"></a>00250         drs_tab = cpl_table_load ( cfg->drs_setup,1,0 );
-<a name="l00251"></a>00251         w->wstart=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_START"</span>,ins_set,&check );
-<a name="l00252"></a>00252         w->wgdisp1=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_DISP1"</span>,ins_set,&check );
-<a name="l00253"></a>00253         w->wgdisp2=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_DISP2"</span>,ins_set,&check );
-<a name="l00254"></a>00254         w->hw=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_HW"</span>,ins_set,&check );
-<a name="l00255"></a>00255         w->fwhm=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_FWHM"</span>,ins_set,&check );
-<a name="l00256"></a>00256         w->min_amp=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_MIN_AMP"</span>,ins_set,&check );
-<a name="l00257"></a>00257         <span class="comment">/*</span>
-<a name="l00258"></a>00258 <span class="comment">            w->min_dif=cpl_table_get_double(drs_tab,"W_MIN_DIF",ins_set,&check);</span>
-<a name="l00259"></a>00259 <span class="comment">            w->na_coef=cpl_table_get_int(drs_tab,"W_NA_COEFF",ins_set,&check);</span>
-<a name="l00260"></a>00260 <span class="comment">            w->nb_coef=cpl_table_get_int(drs_tab,"W_NB_COEFF",ins_set,&check);</span>
-<a name="l00261"></a>00261 <span class="comment">            w->pixel_tol=cpl_table_get_double(drs_tab,"W_PIX_TOL",ins_set,&check);</span>
-<a name="l00262"></a>00262 <span class="comment">            w->y_box=cpl_table_get_double(drs_tab,"W_Y_BOX",ins_set,&check);</span>
-<a name="l00263"></a>00263 <span class="comment">            */</span>
-<a name="l00264"></a>00264         w->low_pos=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_LOW_POS"</span>,ins_set,&check );
-<a name="l00265"></a>00265         w->hig_pos=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_HI_POS"</span>,ins_set,&check );
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267         cfg -> guessBeginWavelength = w->wstart;
-<a name="l00268"></a>00268         cfg -> guessDispersion1 =  w->wgdisp1;
-<a name="l00269"></a>00269         cfg -> guessDispersion2 =  w->wgdisp2;
-<a name="l00270"></a>00270         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.half_width"</span> );
-<a name="l00271"></a>00271         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )
-<a name="l00272"></a>00272         {
-<a name="l00273"></a>00273 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.half_width - using value from DRS [%i]", w->hw);*/</span>
-<a name="l00274"></a>00274             cfg -> halfWidth =         w->hw;
-<a name="l00275"></a>00275         }
-<a name="l00276"></a>00276    <span class="keywordflow">else</span>
-<a name="l00277"></a>00277    {
-<a name="l00278"></a>00278 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.half_width - using value from command line [%g]", cfg -> halfWidth);   */</span>
-<a name="l00279"></a>00279    }
-<a name="l00280"></a>00280        
-<a name="l00281"></a>00281         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fwhm"</span> );
-<a name="l00282"></a>00282         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )
-<a name="l00283"></a>00283         {
-<a name="l00284"></a>00284             cfg -> fwhm =              w->fwhm;
-<a name="l00285"></a>00285 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.fwhm - using value from DRS [%g]", cfg -> fwhm);  */</span>
-<a name="l00286"></a>00286         }
-<a name="l00287"></a>00287       <span class="keywordflow">else</span>
-<a name="l00288"></a>00288       {
-<a name="l00289"></a>00289 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.fwhm - using value from command line [%g]", cfg -> fwhm);     */</span>
-<a name="l00290"></a>00290       }
-<a name="l00291"></a>00291         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span> );
-<a name="l00292"></a>00292         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )
-<a name="l00293"></a>00293         {
-<a name="l00294"></a>00294             cfg -> minAmplitude =      w->min_amp;
-<a name="l00295"></a>00295 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.min_amplitude - using value from DRS [%g]", cfg -> minAmplitude);         */</span>
-<a name="l00296"></a>00296         }
-<a name="l00297"></a>00297       <span class="keywordflow">else</span>
-<a name="l00298"></a>00298       {
-<a name="l00299"></a>00299 <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.min_amplitude - using value from command line [%g]", cfg -> minAmplitude);     */</span>
-<a name="l00300"></a>00300       }      
-<a name="l00301"></a>00301         <span class="comment">/*</span>
-<a name="l00302"></a>00302 <span class="comment">        cfg -> mindiff =           w->min_dif;</span>
-<a name="l00303"></a>00303 <span class="comment">        cfg -> nrDispCoefficients = w->na_coef;</span>
-<a name="l00304"></a>00304 <span class="comment">        cfg -> nrCoefCoefficients = w->nb_coef;</span>
-<a name="l00305"></a>00305 <span class="comment">        cfg -> pixel_tolerance =    w->pixel_tol;</span>
-<a name="l00306"></a>00306 <span class="comment">        cfg -> yBox =               w->y_box;</span>
-<a name="l00307"></a>00307 <span class="comment">        */</span>
-<a name="l00308"></a>00308         cfg -> loPos =              w->low_pos;
-<a name="l00309"></a>00309         cfg -> hiPos =              w->hig_pos;
-<a name="l00310"></a>00310         <span class="comment">/* cfg -> pixel_tolerance =    w->pixel_tol; */</span>
-<a name="l00311"></a>00311         <span class="comment">/*</span>
-<a name="l00312"></a>00312 <span class="comment">            sinfo_msg("cfg->guessBeginWavelength %g",cfg -> guessBeginWavelength);</span>
-<a name="l00313"></a>00313 <span class="comment">            sinfo_msg("cfg->guessDispersion1 %g",cfg -> guessDispersion1);</span>
-<a name="l00314"></a>00314 <span class="comment">            sinfo_msg("cfg->guessDispersion2 %g",cfg -> guessDispersion2);</span>
-<a name="l00315"></a>00315 <span class="comment">            sinfo_msg("cfg->mindiff %g",cfg -> mindiff);</span>
-<a name="l00316"></a>00316 <span class="comment">            sinfo_msg("cfg->halfWidth %d",cfg ->  halfWidth);</span>
-<a name="l00317"></a>00317 <span class="comment">            sinfo_msg("cfg->fwhm %g",cfg -> fwhm);</span>
-<a name="l00318"></a>00318 <span class="comment">            sinfo_msg("cfg->minAmplitude %g",cfg -> minAmplitude);</span>
-<a name="l00319"></a>00319 <span class="comment">            sinfo_msg("cfg->nrDispCoefficients %d",cfg -> nrDispCoefficients); </span>
-<a name="l00320"></a>00320 <span class="comment">            sinfo_msg("cfg->nrCoefCoefficients %d",cfg -> nrCoefCoefficients);</span>
-<a name="l00321"></a>00321 <span class="comment">            sinfo_msg("cfg->pixel_tolerance  %g",cfg -> pixel_tolerance);</span>
-<a name="l00322"></a>00322 <span class="comment">            sinfo_msg("cfg->loPos %d",cfg -> loPos);</span>
-<a name="l00323"></a>00323 <span class="comment">            sinfo_msg("cfg->hiPos %d",cfg -> hiPos);</span>
-<a name="l00324"></a>00324 <span class="comment">            sinfo_msg("cfg->yBox  %f",cfg -> yBox);</span>
-<a name="l00325"></a>00325 <span class="comment">        */</span>
-<a name="l00326"></a>00326 
-<a name="l00327"></a>00327         sinfo_wcal_delete ( w );
-<a name="l00328"></a>00328         cpl_table_delete ( drs_tab );
-<a name="l00329"></a>00329         <span class="keywordflow">if</span> ( -1 == sinfo_check_rec_status ( 0 ) )
-<a name="l00330"></a>00330         {
-<a name="l00331"></a>00331             ( *status ) ++;
-<a name="l00332"></a>00332             <span class="keywordflow">return</span>;
-<a name="l00333"></a>00333         }
-<a name="l00334"></a>00334 
-<a name="l00335"></a>00335     }
-<a name="l00336"></a>00336     <span class="keywordflow">else</span>
-<a name="l00337"></a>00337     {
-<a name="l00338"></a>00338         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, DRS_SETUP_WAVE );
-<a name="l00339"></a>00339         ( *status ) ++;
-<a name="l00340"></a>00340         <span class="keywordflow">return</span>;
-<a name="l00341"></a>00341     }
-<a name="l00342"></a>00342 
-<a name="l00343"></a>00343 
-<a name="l00344"></a>00344     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,REF_LINE_OH ) )
-<a name="l00345"></a>00345     {
-<a name="l00346"></a>00346         frame = cpl_frameset_find ( sof,REF_LINE_OH );
-<a name="l00347"></a>00347         strcpy ( cfg -> lineList,cpl_frame_get_filename ( frame ) );
-<a name="l00348"></a>00348     }
-<a name="l00349"></a>00349     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,REF_LINE_ARC ) )
-<a name="l00350"></a>00350     {
-<a name="l00351"></a>00351         frame = cpl_frameset_find ( sof,REF_LINE_ARC );
-<a name="l00352"></a>00352         strcpy ( cfg -> lineList,cpl_frame_get_filename ( frame ) );
-<a name="l00353"></a>00353     }
-<a name="l00354"></a>00354     <span class="keywordflow">else</span>
-<a name="l00355"></a>00355     {
-<a name="l00356"></a>00356         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, REF_LINE_ARC );
-<a name="l00357"></a>00357         ( *status ) ++;
-<a name="l00358"></a>00358         <span class="keywordflow">return</span>;
-<a name="l00359"></a>00359     }
-<a name="l00360"></a>00360 
-<a name="l00361"></a>00361 
-<a name="l00362"></a>00362     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_SLIT_POS_GUESS ) )
-<a name="l00363"></a>00363     {
-<a name="l00364"></a>00364         frame = cpl_frameset_find ( sof,PRO_SLIT_POS_GUESS );
-<a name="l00365"></a>00365         strcpy ( cfg -> slitposGuessName,cpl_frame_get_filename ( frame ) );
-<a name="l00366"></a>00366     }
-<a name="l00367"></a>00367     <span class="keywordflow">else</span>
-<a name="l00368"></a>00368     {
-<a name="l00369"></a>00369         sinfo_msg ( <span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS_GUESS );
-<a name="l00370"></a>00370     }
-<a name="l00371"></a>00371 
-<a name="l00372"></a>00372     <span class="keywordflow">if</span> ( cfg -> writeParInd ==0 )
-<a name="l00373"></a>00373     {
-<a name="l00374"></a>00374         <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_PAR_LIST ) )
-<a name="l00375"></a>00375         {
-<a name="l00376"></a>00376             frame = cpl_frameset_find ( sof,PRO_WAVE_PAR_LIST );
-<a name="l00377"></a>00377             strcpy ( cfg ->  paramsList,cpl_frame_get_filename ( frame ) );
-<a name="l00378"></a>00378         }
-<a name="l00379"></a>00379         <span class="keywordflow">else</span>
-<a name="l00380"></a>00380         {
-<a name="l00381"></a>00381             sinfo_msg ( <span class="stringliteral">"Frame %s not found!"</span>, PRO_WAVE_PAR_LIST );
-<a name="l00382"></a>00382             ( *status ) ++;
-<a name="l00383"></a>00383             return   ;
-<a name="l00384"></a>00384         }
-<a name="l00385"></a>00385 
-<a name="l00386"></a>00386     }
-<a name="l00387"></a>00387     <span class="keywordflow">else</span>
-<a name="l00388"></a>00388     {
-<a name="l00389"></a>00389 
-<a name="l00390"></a>00390         strcpy ( cfg -> paramsList, WAVECAL_FIT_PARAMS_OUT_FILENAME );
-<a name="l00391"></a>00391         sinfo_msg ( <span class="stringliteral">"cfg -> paramsList %s not given\n"</span>,cfg -> paramsList );
-<a name="l00392"></a>00392 
-<a name="l00393"></a>00393     }
-<a name="l00394"></a>00394 
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396 
-<a name="l00397"></a>00397     <span class="keywordflow">if</span> ( cfg -> calibIndicator ==  0 )
-<a name="l00398"></a>00398     {
-<a name="l00399"></a>00399         <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_COEF_SLIT ) )
-<a name="l00400"></a>00400         {
-<a name="l00401"></a>00401             frame = cpl_frameset_find ( sof,PRO_WAVE_COEF_SLIT );
-<a name="l00402"></a>00402             strcpy ( cfg -> coeffsName,cpl_frame_get_filename ( frame ) );
-<a name="l00403"></a>00403         }
-<a name="l00404"></a>00404         <span class="keywordflow">else</span>
-<a name="l00405"></a>00405         {
-<a name="l00406"></a>00406             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_COEF_SLIT );
-<a name="l00407"></a>00407             ( *status ) ++;
-<a name="l00408"></a>00408             <span class="keywordflow">return</span>;
-<a name="l00409"></a>00409         }
-<a name="l00410"></a>00410     }
-<a name="l00411"></a>00411     <span class="keywordflow">else</span>
-<a name="l00412"></a>00412     {
-<a name="l00413"></a>00413 
-<a name="l00414"></a>00414         strcpy ( cfg -> coeffsName, WAVECAL_COEFF_SLIT_OUT_FILENAME );
-<a name="l00415"></a>00415         sinfo_msg ( <span class="stringliteral">"cfg -> coeffsName %s not given\n"</span>,cfg -> coeffsName );
-<a name="l00416"></a>00416 
-<a name="l00417"></a>00417     }
-<a name="l00418"></a>00418 
-<a name="l00419"></a>00419     strcpy ( cfg -> outName, WAVECAL_OUT_FILENAME );
-<a name="l00420"></a>00420     strcpy ( cfg -> slitposName, WAVECAL_SLIT_POS_OUT_FILENAME );
-<a name="l00421"></a>00421 
-<a name="l00422"></a>00422     <span class="keywordflow">return</span>;
-<a name="l00423"></a>00423 }
-<a name="l00424"></a>00424 
-<a name="l00425"></a>00425 
-<a name="l00426"></a>00426 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00427"></a>00427 parse_section_findlines ( wave_config * cfg,cpl_parameterlist* cpl_cfg )
-<a name="l00428"></a>00428 {
-<a name="l00429"></a>00429 
-<a name="l00430"></a>00430     cpl_parameter* p;
-<a name="l00431"></a>00431 
-<a name="l00432"></a>00432     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.calib_indicator"</span> );
-<a name="l00433"></a>00433     cfg -> calibIndicator = cpl_parameter_get_bool ( p );
-<a name="l00434"></a>00434 
-<a name="l00435"></a>00435     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_diff"</span> );
-<a name="l00436"></a>00436     cfg -> mindiff =  cpl_parameter_get_double ( p );
-<a name="l00437"></a>00437 
-<a name="l00438"></a>00438     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.half_width"</span> );
-<a name="l00439"></a>00439     cfg -> halfWidth = cpl_parameter_get_int ( p );
-<a name="l00440"></a>00440 
-<a name="l00441"></a>00441     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.sigma"</span> );
-<a name="l00442"></a>00442     cfg -> sigma =  cpl_parameter_get_double ( p );
-<a name="l00443"></a>00443 
-<a name="l00444"></a>00444     return ;
-<a name="l00445"></a>00445 }
-<a name="l00446"></a>00446 
-<a name="l00447"></a>00447 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00448"></a>00448 parse_section_wavecalib ( wave_config * cfg,cpl_parameterlist* cpl_cfg )
-<a name="l00449"></a>00449 {
-<a name="l00450"></a>00450     cpl_parameter* p;
-<a name="l00451"></a>00451 
-<a name="l00452"></a>00452     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fwhm"</span> );
-<a name="l00453"></a>00453     cfg -> fwhm =  cpl_parameter_get_double ( p );
-<a name="l00454"></a>00454 
-<a name="l00455"></a>00455     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span> );
-<a name="l00456"></a>00456     cfg -> minAmplitude =  cpl_parameter_get_double ( p );
-<a name="l00457"></a>00457 
-<a name="l00458"></a>00458     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.max_residual"</span> );
-<a name="l00459"></a>00459     cfg -> maxResidual =  cpl_parameter_get_double ( p );
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.n_a_coefficients"</span> );
-<a name="l00462"></a>00462     cfg -> nrDispCoefficients = cpl_parameter_get_int ( p );
-<a name="l00463"></a>00463 
-<a name="l00464"></a>00464     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.n_b_coefficients"</span> );
-<a name="l00465"></a>00465     cfg -> nrCoefCoefficients = cpl_parameter_get_int ( p );
-<a name="l00466"></a>00466 
-<a name="l00467"></a>00467     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.sigma_factor"</span> );
-<a name="l00468"></a>00468     cfg -> sigmaFactor =  cpl_parameter_get_double ( p );
-<a name="l00469"></a>00469 
-<a name="l00470"></a>00470     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.write_coeffs_ind"</span> );
-<a name="l00471"></a>00471     cfg -> writeCoeffsInd = cpl_parameter_get_bool ( p );
-<a name="l00472"></a>00472 
-<a name="l00473"></a>00473     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.write_par_ind"</span> );
-<a name="l00474"></a>00474     cfg -> writeParInd = cpl_parameter_get_bool ( p );
-<a name="l00475"></a>00475 
-<a name="l00476"></a>00476     cfg -> nslitlets = NSLITLETS;
-<a name="l00477"></a>00477 
-<a name="l00478"></a>00478     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.pixel_dist"</span> );
-<a name="l00479"></a>00479     cfg -> pixeldist = cpl_parameter_get_int ( p );
-<a name="l00480"></a>00480 
-<a name="l00481"></a>00481     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.pixel_tol"</span> );
-<a name="l00482"></a>00482     cfg -> pixel_tolerance = cpl_parameter_get_double ( p );
-<a name="l00483"></a>00483 
-<a name="l00484"></a>00484 }
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00487"></a>00487 parse_section_wavemap ( wave_config * cfg,cpl_parameterlist* cpl_cfg )
-<a name="l00488"></a>00488 {
-<a name="l00489"></a>00489     cpl_parameter* p;
-<a name="l00490"></a>00490 
-<a name="l00491"></a>00491     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.wave_map_ind"</span> );
-<a name="l00492"></a>00492     cfg -> wavemapInd = cpl_parameter_get_bool ( p );
-<a name="l00493"></a>00493 
-<a name="l00494"></a>00494     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.mag_factor"</span> );
-<a name="l00495"></a>00495     cfg -> magFactor = cpl_parameter_get_int ( p );
-<a name="l00496"></a>00496 
-<a name="l00497"></a>00497 
-<a name="l00498"></a>00498 }
-<a name="l00499"></a>00499 
-<a name="l00500"></a>00500 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00501"></a>00501 parse_section_fitslits ( wave_config * cfg,cpl_parameterlist* cpl_cfg )
-<a name="l00502"></a>00502 {
-<a name="l00503"></a>00503 
-<a name="l00504"></a>00504     cpl_parameter* p;
-<a name="l00505"></a>00505 
-<a name="l00506"></a>00506     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.slit_pos_indicator"</span> );
-<a name="l00507"></a>00507     cfg -> slitposIndicator = cpl_parameter_get_bool ( p );
-<a name="l00508"></a>00508 
-<a name="l00509"></a>00509     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fit_boltz_indicator"</span> );
-<a name="l00510"></a>00510     cfg -> fitBoltzIndicator = cpl_parameter_get_bool ( p );
-<a name="l00511"></a>00511 
-<a name="l00512"></a>00512     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fit_edge_indicator"</span> );
-<a name="l00513"></a>00513     cfg -> fitEdgeIndicator = cpl_parameter_get_bool ( p );
-<a name="l00514"></a>00514 
-<a name="l00515"></a>00515     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.estimate_indicator"</span> );
-<a name="l00516"></a>00516     cfg -> estimateIndicator = cpl_parameter_get_bool ( p );
-<a name="l00517"></a>00517 
-<a name="l00518"></a>00518     cfg -> loPos =  750;
-<a name="l00519"></a>00519     cfg -> hiPos =  1000;
-<a name="l00520"></a>00520 
-<a name="l00521"></a>00521     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.box_length"</span> );
-<a name="l00522"></a>00522     cfg -> boxLength = cpl_parameter_get_int ( p );
-<a name="l00523"></a>00523 
-<a name="l00524"></a>00524     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.y_box"</span> );
-<a name="l00525"></a>00525     cfg -> yBox = cpl_parameter_get_double ( p );
-<a name="l00526"></a>00526 
-<a name="l00527"></a>00527     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.diff_tol"</span> );
-<a name="l00528"></a>00528     cfg -> diffTol =  cpl_parameter_get_double ( p );
-<a name="l00529"></a>00529 
-<a name="l00530"></a>00530     <span class="comment">/* input CDB</span>
-<a name="l00531"></a>00531 <span class="comment">    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.wavecal.slit_pos_guess_name");</span>
-<a name="l00532"></a>00532 <span class="comment">    strcpy(cfg -> slitposGuessName, cpl_parameter_get_default_string(p));</span>
-<a name="l00533"></a>00533 <span class="comment">    */</span>
-<a name="l00534"></a>00534 
-<a name="l00535"></a>00535 }
-<a name="l00536"></a>00536 
-<a name="l00537"></a>00537 <span class="keyword">static</span> <span class="keywordtype">void</span>
-<a name="l00538"></a>00538 parse_section_qclog ( wave_config * cfg, cpl_parameterlist* cpl_cfg )
-<a name="l00539"></a>00539 {
-<a name="l00540"></a>00540     cpl_parameter* p;
-<a name="l00541"></a>00541 
-<a name="l00542"></a>00542     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.qc_thresh_min"</span> );
-<a name="l00543"></a>00543     cfg ->  qc_thresh_min = cpl_parameter_get_int ( p );
-<a name="l00544"></a>00544 
-<a name="l00545"></a>00545 
-<a name="l00546"></a>00546     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.qc_thresh_max"</span> );
-<a name="l00547"></a>00547     cfg ->  qc_thresh_max = cpl_parameter_get_int ( p );
-<a name="l00548"></a>00548 
-<a name="l00549"></a>00549 
-<a name="l00550"></a>00550 }
-<a name="l00551"></a>00551 
-<a name="l00552"></a>00552 <span class="keywordtype">void</span>
-<a name="l00553"></a>00553 sinfo_wavecal_free ( wave_config ** cfg )
-<a name="l00554"></a>00554 {
-<a name="l00555"></a>00555     <span class="keywordflow">if</span> ( *cfg != NULL )
-<a name="l00556"></a>00556     {
-<a name="l00557"></a>00557         sinfo_wave_cfg_destroy ( *cfg );
-<a name="l00558"></a>00558         *cfg=NULL;
-<a name="l00559"></a>00559     }
-<a name="l00560"></a>00560     <span class="keywordflow">return</span>;
-<a name="l00561"></a>00561 
-<a name="l00562"></a>00562 }
-<a name="l00563"></a>00563 
-<a name="l00564"></a>00564 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_ini_by_cpl.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment"></span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_wavecal_ini_by_cpl.c</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 21, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   wavelength calibration cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"></span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_wavecal_ini_by_cpl.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_raw_types.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_ref_types.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_hidden.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_utils.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                    Functions private to this module</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> parse_section_frames ( wave_config *, cpl_parameterlist* cpl_cfg, cpl_frameset* sof,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>                        cpl_frameset** raw, <span class="keywordtype">int</span>* status );</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> parse_section_findlines ( wave_config *, cpl_parameterlist* cpl_cfg );</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> parse_section_wavecalib ( wave_config *, cpl_parameterlist* cpl_cfg );</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> parse_section_wavemap ( wave_config *, cpl_parameterlist* cpl_cfg );</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> parse_section_qclog ( wave_config *, cpl_parameterlist* cpl_cfg );</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> parse_section_fitslits ( wave_config *, cpl_parameterlist* cpl_cfg );</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span> </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> <span class="comment">/* Removed  generateWave_ini_file */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span> </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> <span class="comment">/*-------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> <span class="comment">/*--------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> wave_config *</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span> sinfo_parse_cpl_input_wave ( cpl_parameterlist* cpl_cfg,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                              cpl_frameset* sof, cpl_frameset** raw )</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">int</span>  status=0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     wave_config   * cfg= sinfo_wave_cfg_create();</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> <span class="comment">     * Perform sanity checks, fill up the structure with what was</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> <span class="comment">     * found in the ini file</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span> <span class="comment">     */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     parse_section_findlines ( cfg, cpl_cfg );</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     parse_section_wavecalib ( cfg, cpl_cfg );</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     parse_section_wavemap ( cfg, cpl_cfg );</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     parse_section_fitslits ( cfg, cpl_cfg );</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     parse_section_qclog ( cfg, cpl_cfg );</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     parse_section_frames ( cfg, cpl_cfg, sof, raw, &status );</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     <span class="keywordflow">if</span> ( status > 0 )</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"parsing cpl input"</span> );</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>         sinfo_wave_cfg_destroy ( cfg );</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>         cfg = NULL ;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>         <span class="keywordflow">return</span> NULL ;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     }</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">return</span> cfg ;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span> <span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">   Functions:   parse_section_xxx()</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">   In           :       symbolic table read from ini file</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">   Out          :       void</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">   Job          :       update a wave_config structure from what can be</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">                            found in the ini file.</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> <span class="comment">   Notice       :       all of these functions update a status integer to</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> <span class="comment">                        indicate if an error occurred, or leave it as it is if</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> <span class="comment">                        everything went Ok.</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> <span class="comment"></span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> <span class="comment">        parse_section_general()</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> <span class="comment">        parse_section_findlines()</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span> <span class="comment">        parse_section_wavecalib()</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> <span class="comment">        parse_section_wavemap()</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> <span class="comment">        parse_section_fitslits()</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> <span class="comment"></span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span> </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> parse_section_frames ( wave_config * cfg,cpl_parameterlist* cpl_cfg, cpl_frameset* sof,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>                        cpl_frameset** raw, <span class="keywordtype">int</span>* status )</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> {</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     cpl_frame* frame   = NULL;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="keywordtype">char</span> spat_res[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>     <span class="keywordtype">char</span> lamp_status[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="keywordtype">char</span> band[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordtype">int</span> ins_set=0;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordtype">int</span> nraw=0;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     cpl_parameter* p=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>     cpl_table* drs_tab=NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     wcal* w=sinfo_wcal_new();</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     <span class="keywordtype">int</span> check=0;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_LAMP_STACKED );</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>     nraw=cpl_frameset_get_size ( *raw );</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     <span class="keywordflow">if</span> ( nraw==0 )</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>         sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_NS_STACKED );</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     nraw=cpl_frameset_get_size ( *raw );</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">if</span> ( nraw==0 )</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>         sinfo_extract_raw_frames_type ( sof,raw,PRO_WAVE_SLITPOS_STACKED );</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     }</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     nraw=cpl_frameset_get_size ( *raw );</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> ( nraw==0 )</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     {</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>         sinfo_msg ( <span class="stringliteral">"Frame %s or %s or %s not found!"</span>,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>                     PRO_WAVE_LAMP_STACKED,PRO_WAVE_NS_STACKED,PRO_WAVE_SLITPOS_STACKED );</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>         ( *status ) ++;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>         return   ;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     }</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     frame = cpl_frameset_get_frame ( *raw,0 );</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     sinfo_get_spatial_res ( frame,spat_res );</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span> </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordflow">switch</span> ( sinfo_frame_is_on ( frame ) )</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>         <span class="keywordflow">case</span> 0:</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>             strcpy ( lamp_status,<span class="stringliteral">"on"</span> );</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>         <span class="keywordflow">case</span> 1:</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>             strcpy ( lamp_status,<span class="stringliteral">"off"</span> );</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>         <span class="keywordflow">case</span> -1:</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             strcpy ( lamp_status,<span class="stringliteral">"undefined"</span> );</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>         <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>             strcpy ( lamp_status,<span class="stringliteral">"undefined"</span> );</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>             <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span> </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span> </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     }</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span> </div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     sinfo_get_band ( frame,band );</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     sinfo_msg ( <span class="stringliteral">"Spatial resolution: %s lamp status: %s band: %s \n"</span>,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>                 spat_res,              lamp_status,    band );</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span> </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     sinfo_get_ins_set ( band,&ins_set );</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_LAMP_STACKED ) )</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>         frame = cpl_frameset_find ( sof,PRO_WAVE_LAMP_STACKED );</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     }</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_NS_STACKED ) )</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     {</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>         frame = cpl_frameset_find ( sof,PRO_WAVE_NS_STACKED );</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     }</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_SLITPOS_STACKED ) )</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     {</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>         frame = cpl_frameset_find ( sof,PRO_WAVE_SLITPOS_STACKED );</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>         strcpy ( cfg -> inFrame,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s or %s not found! Exit!"</span>,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>                           PRO_WAVE_LAMP_STACKED,PRO_WAVE_NS_STACKED );</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>         ( *status ) ++;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span> </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,DRS_SETUP_WAVE ) )</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>         frame = cpl_frameset_find ( sof,DRS_SETUP_WAVE );</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>         strcpy ( cfg -> drs_setup,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>         drs_tab = cpl_table_load ( cfg->drs_setup,1,0 );</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>         w->wstart=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_START"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>         w->wgdisp1=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_DISP1"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>         w->wgdisp2=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_DISP2"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>         w->hw=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_HW"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>         w->fwhm=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_FWHM"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>         w->min_amp=cpl_table_get_double ( drs_tab,<span class="stringliteral">"W_MIN_AMP"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> <span class="comment">            w->min_dif=cpl_table_get_double(drs_tab,"W_MIN_DIF",ins_set,&check);</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span> <span class="comment">            w->na_coef=cpl_table_get_int(drs_tab,"W_NA_COEFF",ins_set,&check);</span></div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> <span class="comment">            w->nb_coef=cpl_table_get_int(drs_tab,"W_NB_COEFF",ins_set,&check);</span></div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> <span class="comment">            w->pixel_tol=cpl_table_get_double(drs_tab,"W_PIX_TOL",ins_set,&check);</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> <span class="comment">            w->y_box=cpl_table_get_double(drs_tab,"W_Y_BOX",ins_set,&check);</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>         w->low_pos=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_LOW_POS"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>         w->hig_pos=cpl_table_get_int ( drs_tab,<span class="stringliteral">"W_HI_POS"</span>,ins_set,&check );</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>         cfg -> guessBeginWavelength = w->wstart;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>         cfg -> guessDispersion1 =  w->wgdisp1;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>         cfg -> guessDispersion2 =  w->wgdisp2;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.half_width"</span> );</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>         {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.half_width - using value from DRS [%i]", w->hw);*/</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>             cfg -> halfWidth =         w->hw;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>         }</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>    <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.half_width - using value from command line [%g]", cfg -> halfWidth);   */</span></div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>    }</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>        </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fwhm"</span> );</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>         {</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>             cfg -> fwhm =              w->fwhm;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.fwhm - using value from DRS [%g]", cfg -> fwhm);  */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>         }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       {</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.fwhm - using value from command line [%g]", cfg -> fwhm);     */</span></div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       }</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>         p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span> );</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>         <span class="keywordflow">if</span> ( sinfo_parameter_get_default_flag ( p ) == 0 )</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>         {</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>             cfg -> minAmplitude =      w->min_amp;</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.min_amplitude - using value from DRS [%g]", cfg -> minAmplitude);         */</span></div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>         }</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>       <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>       {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="comment">/*         cpl_msg_info(cpl_func, "param sinfoni.wavecal.min_amplitude - using value from command line [%g]", cfg -> minAmplitude);     */</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>       }      </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span> <span class="comment">        cfg -> mindiff =           w->min_dif;</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> <span class="comment">        cfg -> nrDispCoefficients = w->na_coef;</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span> <span class="comment">        cfg -> nrCoefCoefficients = w->nb_coef;</span></div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> <span class="comment">        cfg -> pixel_tolerance =    w->pixel_tol;</span></div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span> <span class="comment">        cfg -> yBox =               w->y_box;</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>         cfg -> loPos =              w->low_pos;</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>         cfg -> hiPos =              w->hig_pos;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>         <span class="comment">/* cfg -> pixel_tolerance =    w->pixel_tol; */</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>         <span class="comment">/*</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span> <span class="comment">            sinfo_msg("cfg->guessBeginWavelength %g",cfg -> guessBeginWavelength);</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> <span class="comment">            sinfo_msg("cfg->guessDispersion1 %g",cfg -> guessDispersion1);</span></div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> <span class="comment">            sinfo_msg("cfg->guessDispersion2 %g",cfg -> guessDispersion2);</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> <span class="comment">            sinfo_msg("cfg->mindiff %g",cfg -> mindiff);</span></div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> <span class="comment">            sinfo_msg("cfg->halfWidth %d",cfg ->  halfWidth);</span></div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span> <span class="comment">            sinfo_msg("cfg->fwhm %g",cfg -> fwhm);</span></div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> <span class="comment">            sinfo_msg("cfg->minAmplitude %g",cfg -> minAmplitude);</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span> <span class="comment">            sinfo_msg("cfg->nrDispCoefficients %d",cfg -> nrDispCoefficients); </span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> <span class="comment">            sinfo_msg("cfg->nrCoefCoefficients %d",cfg -> nrCoefCoefficients);</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span> <span class="comment">            sinfo_msg("cfg->pixel_tolerance  %g",cfg -> pixel_tolerance);</span></div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span> <span class="comment">            sinfo_msg("cfg->loPos %d",cfg -> loPos);</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="comment">            sinfo_msg("cfg->hiPos %d",cfg -> hiPos);</span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="comment">            sinfo_msg("cfg->yBox  %f",cfg -> yBox);</span></div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span> <span class="comment">        */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span> </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         sinfo_wcal_delete ( w );</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         cpl_table_delete ( drs_tab );</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>         <span class="keywordflow">if</span> ( -1 == sinfo_check_rec_status ( 0 ) )</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>             ( *status ) ++;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>         }</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span> </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>     }</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>     {</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, DRS_SETUP_WAVE );</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         ( *status ) ++;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span> </div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span> </div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,REF_LINE_OH ) )</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     {</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>         frame = cpl_frameset_find ( sof,REF_LINE_OH );</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>         strcpy ( cfg -> lineList,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     }</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,REF_LINE_ARC ) )</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>         frame = cpl_frameset_find ( sof,REF_LINE_ARC );</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         strcpy ( cfg -> lineList,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, REF_LINE_ARC );</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         ( *status ) ++;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>         <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>     }</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span> </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span> </div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>     <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_SLIT_POS_GUESS ) )</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     {</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>         frame = cpl_frameset_find ( sof,PRO_SLIT_POS_GUESS );</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>         strcpy ( cfg -> slitposGuessName,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     }</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     {</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>         sinfo_msg ( <span class="stringliteral">"Frame %s not found!"</span>, PRO_SLIT_POS_GUESS );</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     }</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span> </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     <span class="keywordflow">if</span> ( cfg -> writeParInd ==0 )</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     {</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>         <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_PAR_LIST ) )</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         {</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>             frame = cpl_frameset_find ( sof,PRO_WAVE_PAR_LIST );</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>             strcpy ( cfg ->  paramsList,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         }</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>         {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>             sinfo_msg ( <span class="stringliteral">"Frame %s not found!"</span>, PRO_WAVE_PAR_LIST );</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>             ( *status ) ++;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>             return   ;</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>         }</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> </div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>     }</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>     {</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span> </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>         strcpy ( cfg -> paramsList, WAVECAL_FIT_PARAMS_OUT_FILENAME );</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>         sinfo_msg ( <span class="stringliteral">"cfg -> paramsList %s not given\n"</span>,cfg -> paramsList );</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span> </div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>     }</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span> </div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span> </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>     <span class="keywordflow">if</span> ( cfg -> calibIndicator ==  0 )</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>     {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>         <span class="keywordflow">if</span> ( NULL != cpl_frameset_find ( sof,PRO_WAVE_COEF_SLIT ) )</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>         {</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>             frame = cpl_frameset_find ( sof,PRO_WAVE_COEF_SLIT );</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>             strcpy ( cfg -> coeffsName,cpl_frame_get_filename ( frame ) );</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>         }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>         <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>         {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> ( <span class="stringliteral">"Frame %s not found! Exit!"</span>, PRO_WAVE_COEF_SLIT );</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>             ( *status ) ++;</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>             <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>         }</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>     }</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>     <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>     {</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>         strcpy ( cfg -> coeffsName, WAVECAL_COEFF_SLIT_OUT_FILENAME );</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>         sinfo_msg ( <span class="stringliteral">"cfg -> coeffsName %s not given\n"</span>,cfg -> coeffsName );</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span> </div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     }</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span> </div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>     strcpy ( cfg -> outName, WAVECAL_OUT_FILENAME );</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>     strcpy ( cfg -> slitposName, WAVECAL_SLIT_POS_OUT_FILENAME );</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span> </div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span> }</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span> </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span> </div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span> parse_section_findlines ( wave_config * cfg,cpl_parameterlist* cpl_cfg )</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span> {</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span> </div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>     cpl_parameter* p;</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span> </div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.calib_indicator"</span> );</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>     cfg -> calibIndicator = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span> </div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_diff"</span> );</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>     cfg -> mindiff =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span> </div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.half_width"</span> );</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>     cfg -> halfWidth = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span> </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.sigma"</span> );</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     cfg -> sigma =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span> </div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>     return ;</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span> }</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span> </div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span> parse_section_wavecalib ( wave_config * cfg,cpl_parameterlist* cpl_cfg )</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span> {</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     cpl_parameter* p;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span> </div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fwhm"</span> );</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     cfg -> fwhm =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span> </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.min_amplitude"</span> );</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     cfg -> minAmplitude =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span> </div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.max_residual"</span> );</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>     cfg -> maxResidual =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.n_a_coefficients"</span> );</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>     cfg -> nrDispCoefficients = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span> </div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.n_b_coefficients"</span> );</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>     cfg -> nrCoefCoefficients = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span> </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.sigma_factor"</span> );</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>     cfg -> sigmaFactor =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span> </div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.write_coeffs_ind"</span> );</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     cfg -> writeCoeffsInd = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span> </div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.write_par_ind"</span> );</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     cfg -> writeParInd = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> </div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>     cfg -> nslitlets = NSLITLETS;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span> </div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.pixel_dist"</span> );</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>     cfg -> pixeldist = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span> </div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.pixel_tol"</span> );</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>     cfg -> pixel_tolerance = cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span> }</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> parse_section_wavemap ( wave_config * cfg,cpl_parameterlist* cpl_cfg )</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span> {</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>     cpl_parameter* p;</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span> </div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.wave_map_ind"</span> );</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>     cfg -> wavemapInd = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span> </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.mag_factor"</span> );</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>     cfg -> magFactor = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span> </div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span> </div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span> }</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span> </div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span> parse_section_fitslits ( wave_config * cfg,cpl_parameterlist* cpl_cfg )</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span> {</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span> </div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>     cpl_parameter* p;</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span> </div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.slit_pos_indicator"</span> );</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>     cfg -> slitposIndicator = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span> </div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fit_boltz_indicator"</span> );</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>     cfg -> fitBoltzIndicator = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span> </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.fit_edge_indicator"</span> );</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>     cfg -> fitEdgeIndicator = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span> </div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.estimate_indicator"</span> );</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>     cfg -> estimateIndicator = cpl_parameter_get_bool ( p );</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span> </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>     cfg -> loPos =  750;</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>     cfg -> hiPos =  1000;</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span> </div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.box_length"</span> );</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>     cfg -> boxLength = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span> </div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.y_box"</span> );</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>     cfg -> yBox = cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span> </div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.diff_tol"</span> );</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>     cfg -> diffTol =  cpl_parameter_get_double ( p );</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span> </div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>     <span class="comment">/* input CDB</span></div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span> <span class="comment">    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.wavecal.slit_pos_guess_name");</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span> <span class="comment">    strcpy(cfg -> slitposGuessName, cpl_parameter_get_default_string(p));</span></div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span> </div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span> }</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span> </div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span> parse_section_qclog ( wave_config * cfg, cpl_parameterlist* cpl_cfg )</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span> {</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>     cpl_parameter* p;</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span> </div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.qc_thresh_min"</span> );</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>     cfg ->  qc_thresh_min = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span> </div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span> </div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>     p = cpl_parameterlist_find ( cpl_cfg, <span class="stringliteral">"sinfoni.wavecal.qc_thresh_max"</span> );</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>     cfg ->  qc_thresh_max = cpl_parameter_get_int ( p );</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span> </div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span> </div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span> }</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span> </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span> <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span> sinfo_wavecal_free ( wave_config ** cfg )</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span> {</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>     <span class="keywordflow">if</span> ( *cfg != NULL )</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>     {</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>         sinfo_wave_cfg_destroy ( *cfg );</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>         *cfg=NULL;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>     }</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>     <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span> </div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span> }</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span> </div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wavecal__ini__by__cpl_8h_source.html b/html/sinfo__wavecal__ini__by__cpl_8h_source.html
index 5118df5..a966e56 100644
--- a/html/sinfo__wavecal__ini__by__cpl_8h_source.html
+++ b/html/sinfo__wavecal__ini__by__cpl_8h_source.html
@@ -2,60 +2,91 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wavecal_ini_by_cpl.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wavecal_ini_by_cpl.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
-<a name="l00002"></a>00002 <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span>
-<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span>
-<a name="l00004"></a>00004 <span class="comment"> *</span>
-<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00008"></a>00008 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00009"></a>00009 <span class="comment"> *</span>
-<a name="l00010"></a>00010 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00013"></a>00013 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00014"></a>00014 <span class="comment"> *</span>
-<a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00016"></a>00016 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00017"></a>00017 <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span>
-<a name="l00018"></a>00018 <span class="comment"> */</span>
-<a name="l00019"></a>00019 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00020"></a>00020 <span class="comment">   </span>
-<a name="l00021"></a>00021 <span class="comment">   File name    :   sinfo_wavecal_ini_by_cpl.h</span>
-<a name="l00022"></a>00022 <span class="comment">   Author       :   Andrea Modigliani</span>
-<a name="l00023"></a>00023 <span class="comment">   Created on   :   May 21, 2004</span>
-<a name="l00024"></a>00024 <span class="comment">   Description  :   wavelength calibration cpl input handling for SPIFFI</span>
-<a name="l00025"></a>00025 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00026"></a>00026 <span class="preprocessor">#ifndef SINFO_WAVECAL_INI_BY_CPL_H</span>
-<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_INI_BY_CPL_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span>
-<a name="l00029"></a>00029 <span class="comment">                                Includes</span>
-<a name="l00030"></a>00030 <span class="comment">---------------------------------------------------------------------------*/</span>
-<a name="l00031"></a>00031 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00032"></a>00032 <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span>
-<a name="l00033"></a>00033 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00034"></a>00034 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00035"></a>00035 <span class="comment">                             Function prototypes </span>
-<a name="l00036"></a>00036 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 wave_config * 
-<a name="l00051"></a>00051 sinfo_parse_cpl_input_wave(cpl_parameterlist * cpl_cfg, 
-<a name="l00052"></a>00052                            cpl_frameset* sof, 
-<a name="l00053"></a>00053                cpl_frameset** raw) ;
-<a name="l00054"></a>00054 
-<a name="l00061"></a>00061 <span class="keywordtype">void</span> 
-<a name="l00062"></a>00062 sinfo_wavecal_free(wave_config ** cfg);
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wavecal_ini_by_cpl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> * This file is part of the ESO SINFONI Pipeline</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * Copyright (C) 2004,2005 European Southern Observatory</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * Foundation, 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> <span class="comment">   </span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">   File name    :   sinfo_wavecal_ini_by_cpl.h</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment">   Author       :   Andrea Modigliani</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment">   Created on   :   May 21, 2004</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment">   Description  :   wavelength calibration cpl input handling for SPIFFI</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="preprocessor">#ifndef SINFO_WAVECAL_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WAVECAL_INI_BY_CPL_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="comment">/*---------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="comment">---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor">#include "sinfo_wavecal_cfg.h"</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> <span class="comment">                             Function prototypes </span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> wave_config * </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> sinfo_parse_cpl_input_wave(cpl_parameterlist * cpl_cfg, </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>                            cpl_frameset* sof, </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>                cpl_frameset** raw) ;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="keywordtype">void</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> sinfo_wavecal_free(wave_config ** cfg);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wcal__functions_8c_source.html b/html/sinfo__wcal__functions_8c_source.html
index 5d9ff7b..6d1c017 100644
--- a/html/sinfo__wcal__functions_8c_source.html
+++ b/html/sinfo__wcal__functions_8c_source.html
@@ -2,421 +2,452 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wcal_functions.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wcal_functions.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_wcal_functions.c,v 1.9 2012/03/03 10:35:14 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:35:14 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.9 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                   Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_wcal_functions.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00040"></a>00040 
-<a name="l00041"></a>00041 <span class="comment">/* struct qc_wcal qc_wcal_par; */</span>
-<a name="l00049"></a>00049 qc_wcal* sinfo_qc_wcal_new(<span class="keywordtype">void</span>)
-<a name="l00050"></a>00050 {  
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052   qc_wcal * qc;
-<a name="l00053"></a>00053   qc= cpl_malloc(<span class="keyword">sizeof</span>(qc_wcal));
-<a name="l00054"></a>00054 
-<a name="l00055"></a>00055   qc->avg_on=0; 
-<a name="l00056"></a>00056   qc->std_on=0;
-<a name="l00057"></a>00057   qc->avg_of=0; 
-<a name="l00058"></a>00058   qc->std_of=0;
-<a name="l00059"></a>00059   qc->avg_di=0; 
-<a name="l00060"></a>00060   qc->std_di=0;
-<a name="l00061"></a>00061   qc->max_on=0;
-<a name="l00062"></a>00062   qc->max_of=0;
-<a name="l00063"></a>00063   qc->max_di=0;
-<a name="l00064"></a>00064   qc->nsat_on=0;
-<a name="l00065"></a>00065   qc->noise_on=0;
-<a name="l00066"></a>00066   qc->noise_of=0;
-<a name="l00067"></a>00067   qc->flux_on=0;
-<a name="l00068"></a>00068   qc->nsat=0;
-<a name="l00069"></a>00069   <span class="keywordflow">return</span> qc;
-<a name="l00070"></a>00070 }
-<a name="l00071"></a>00071 
-<a name="l00072"></a>00072 <span class="keywordtype">void</span> sinfo_qc_wcal_delete(qc_wcal** qc)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074   cpl_free(*qc);
-<a name="l00075"></a>00075   *qc = NULL;
-<a name="l00076"></a>00076 }
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078 <span class="keywordtype">int</span> sinfo_dumpTblToFitParams ( FitParams ** params, <span class="keywordtype">char</span> * filename )
-<a name="l00079"></a>00079 {
-<a name="l00080"></a>00080     cpl_table * fp =NULL;
-<a name="l00081"></a>00081     <span class="keywordtype">char</span>* col=NULL;
-<a name="l00082"></a>00082     <span class="keywordtype">int</span> i =0;
-<a name="l00083"></a>00083     <span class="keywordtype">int</span> j =0;
-<a name="l00084"></a>00084     <span class="keywordtype">int</span> status=0;
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     <span class="keywordflow">if</span> ( NULL == params )
-<a name="l00088"></a>00088     {
-<a name="l00089"></a>00089         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no fit parameters available!"</span>) ;
-<a name="l00090"></a>00090         <span class="keywordflow">return</span> -1;
-<a name="l00091"></a>00091     }
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     <span class="keywordflow">if</span> ( NULL == filename )
-<a name="l00094"></a>00094     {
-<a name="l00095"></a>00095         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no filename available!"</span>) ;
-<a name="l00096"></a>00096         <span class="keywordflow">return</span> -1;
-<a name="l00097"></a>00097     }
-<a name="l00098"></a>00098    
-<a name="l00099"></a>00099 
-<a name="l00100"></a>00100     fp=cpl_table_load(filename,1,0);
-<a name="l00101"></a>00101     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {
-<a name="l00102"></a>00102       sinfo_msg(<span class="stringliteral">"cannot load table %s"</span>,filename);
-<a name="l00103"></a>00103       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>((<span class="keywordtype">char</span>* ) cpl_error_get_message());
-<a name="l00104"></a>00104       <span class="keywordflow">return</span> -1;
-<a name="l00105"></a>00105     }
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107     col = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));
-<a name="l00108"></a>00108     <span class="keywordflow">for</span> ( i = 0 ; i < params[0]->n_params ; i++ )
-<a name="l00109"></a>00109     {
-<a name="l00110"></a>00110        params[i]->n_params=cpl_table_get_int(fp,<span class="stringliteral">"n_params"</span>,i,&status);
-<a name="l00111"></a>00111        params[i]->column  =cpl_table_get_int(fp,<span class="stringliteral">"column"</span>,i,&status);
-<a name="l00112"></a>00112        params[i]->line    =cpl_table_get_int(fp,<span class="stringliteral">"line"</span>,i,&status);
-<a name="l00113"></a>00113        <span class="keywordflow">for</span> (j=0 ; j < 4; j++) {
-<a name="l00114"></a>00114      snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);
-<a name="l00115"></a>00115          params[i]->fit_par[j]=cpl_table_get_double(fp,col,i,&status);
-<a name="l00116"></a>00116      snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);
-<a name="l00117"></a>00117          params[i]->derv_par[j]=cpl_table_get_double(fp,col,i,&status);
-<a name="l00118"></a>00118        }
-<a name="l00119"></a>00119     }
-<a name="l00120"></a>00120     cpl_free(col);
-<a name="l00121"></a>00121     cpl_table_delete(fp) ;
-<a name="l00122"></a>00122     <span class="keywordflow">return</span> 0;
-<a name="l00123"></a>00123 }
-<a name="l00124"></a>00124 
-<a name="l00125"></a>00125 
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 <span class="keywordtype">int</span> sinfo_det_ncounts(cpl_frameset* raw, <span class="keywordtype">int</span> thresh_max, qc_wcal* qc)
-<a name="l00129"></a>00129 {
-<a name="l00130"></a>00130  <span class="keywordtype">int</span> i=0;
-<a name="l00131"></a>00131  <span class="keywordtype">int</span> j=0;
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133  <span class="keywordtype">long</span> nraw=0;
-<a name="l00134"></a>00134  <span class="keywordtype">int</span> non=0;
-<a name="l00135"></a>00135  <span class="keywordtype">int</span> noff=0;
-<a name="l00136"></a>00136  <span class="keywordtype">int</span> nsat=0;
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138  <span class="keywordtype">double</span> mean=0;
-<a name="l00139"></a>00139  <span class="keywordtype">double</span> max=0;
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141  <span class="keywordtype">double</span> mjd_on=0;
-<a name="l00142"></a>00142  <span class="keywordtype">double</span> mjd_of=0;
-<a name="l00143"></a>00143  <span class="keywordtype">double</span> mjd_of_frm=0;
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145  <span class="keywordtype">char</span> name[FILE_NAME_SZ];
-<a name="l00146"></a>00146  <span class="keywordtype">char</span> filename[FILE_NAME_SZ];
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149  cpl_vector* avg_on=NULL;
-<a name="l00150"></a>00150  cpl_vector* avg_of=NULL;
-<a name="l00151"></a>00151  cpl_vector* avg_di=NULL;
-<a name="l00152"></a>00152 
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154  cpl_vector* max_on=NULL;
-<a name="l00155"></a>00155  cpl_vector* max_of=NULL;
-<a name="l00156"></a>00156  cpl_vector* max_di=NULL;
-<a name="l00157"></a>00157 
-<a name="l00158"></a>00158  cpl_vector* vec_nsat=NULL;
-<a name="l00159"></a>00159 
-<a name="l00160"></a>00160  cpl_frame* frm=NULL;
-<a name="l00161"></a>00161  cpl_frame* frm_dup=NULL;
-<a name="l00162"></a>00162  cpl_frame* on_frm=NULL;
-<a name="l00163"></a>00163  cpl_frame* of_frm=NULL;
-<a name="l00164"></a>00164  cpl_frame* tmp_of_frm=NULL;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166  cpl_image* dif_ima=NULL;
-<a name="l00167"></a>00167  cpl_image* on_ima=NULL;
-<a name="l00168"></a>00168  cpl_image* of_ima=NULL;
-<a name="l00169"></a>00169  cpl_image* tmp_ima=NULL;
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171  cpl_frameset* on_set=NULL;
-<a name="l00172"></a>00172  cpl_frameset* of_set=NULL;
-<a name="l00173"></a>00173  
-<a name="l00174"></a>00174  on_set=cpl_frameset_new();
-<a name="l00175"></a>00175  of_set=cpl_frameset_new();
-<a name="l00176"></a>00176  nraw = cpl_frameset_get_size(raw);
-<a name="l00177"></a>00177 
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179  <span class="keywordflow">for</span> (i=0; i< nraw; i++) {
-<a name="l00180"></a>00180    check_nomsg(frm = cpl_frameset_get_frame(raw,i));
-<a name="l00181"></a>00181    check_nomsg(frm_dup = cpl_frame_duplicate(frm));
-<a name="l00182"></a>00182    <span class="keywordflow">if</span>(sinfo_frame_is_on(frm) == 1) {
-<a name="l00183"></a>00183      cpl_frameset_insert(on_set,frm_dup);
-<a name="l00184"></a>00184      non++;
-<a name="l00185"></a>00185    } <span class="keywordflow">else</span> {
-<a name="l00186"></a>00186      cpl_frameset_insert(of_set,frm_dup);
-<a name="l00187"></a>00187      noff++;
-<a name="l00188"></a>00188    }
-<a name="l00189"></a>00189  }
-<a name="l00190"></a>00190 
-<a name="l00191"></a>00191 
-<a name="l00192"></a>00192  <span class="keywordflow">if</span> (non == noff) {   
-<a name="l00193"></a>00193      sinfo_msg(<span class="stringliteral">"Monitor counts: case Non==Noff"</span>);
-<a name="l00194"></a>00194 
-<a name="l00195"></a>00195 
-<a name="l00196"></a>00196     avg_on = cpl_vector_new(non);
-<a name="l00197"></a>00197     avg_of = cpl_vector_new(non);
-<a name="l00198"></a>00198     avg_di = cpl_vector_new(non);
-<a name="l00199"></a>00199 
-<a name="l00200"></a>00200     max_on = cpl_vector_new(non);
-<a name="l00201"></a>00201     max_of = cpl_vector_new(non);
-<a name="l00202"></a>00202     max_di = cpl_vector_new(non);
-<a name="l00203"></a>00203 
-<a name="l00204"></a>00204 
-<a name="l00205"></a>00205 
-<a name="l00206"></a>00206     vec_nsat = cpl_vector_new(non);
-<a name="l00207"></a>00207     <span class="keywordflow">for</span> (i=0; i< non; i++) {
-<a name="l00208"></a>00208       check_nomsg(on_frm = cpl_frameset_get_frame(on_set,i));
-<a name="l00209"></a>00209       strcpy(name,cpl_frame_get_filename(on_frm));
-<a name="l00210"></a>00210       check_nomsg(on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00211"></a>00211 
-<a name="l00212"></a>00212       check_nomsg(mean= cpl_image_get_mean(on_ima));
-<a name="l00213"></a>00213       check_nomsg(cpl_vector_set(avg_on,i,mean));
-<a name="l00214"></a>00214       check_nomsg(max= cpl_image_get_max(on_ima));
-<a name="l00215"></a>00215       check_nomsg(cpl_vector_set(max_on,i,max));
-<a name="l00216"></a>00216       check_nomsg(tmp_ima = cpl_image_duplicate(on_ima));
-<a name="l00217"></a>00217       check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));
-<a name="l00218"></a>00218       check_nomsg(nsat=cpl_image_get_flux(tmp_ima));
-<a name="l00219"></a>00219       check_nomsg(cpl_vector_set(vec_nsat,i,nsat));
-<a name="l00220"></a>00220 
-<a name="l00221"></a>00221 
-<a name="l00222"></a>00222       check_nomsg(of_frm = cpl_frameset_get_frame(of_set,i));
-<a name="l00223"></a>00223       strcpy(name,cpl_frame_get_filename(of_frm));
-<a name="l00224"></a>00224       check_nomsg(of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00225"></a>00225       check_nomsg(mean= cpl_image_get_mean(of_ima));
-<a name="l00226"></a>00226       check_nomsg(cpl_vector_set(avg_of,i,mean));
-<a name="l00227"></a>00227       check_nomsg(max= cpl_image_get_max(of_ima));
-<a name="l00228"></a>00228       check_nomsg(cpl_vector_set(max_of,i,max));
-<a name="l00229"></a>00229      
-<a name="l00230"></a>00230       check_nomsg(dif_ima = cpl_image_subtract_create(on_ima,of_ima));
-<a name="l00231"></a>00231       check_nomsg(mean= cpl_image_get_mean(dif_ima));
-<a name="l00232"></a>00232       check_nomsg(cpl_vector_set(avg_di,i,mean));
-<a name="l00233"></a>00233       check_nomsg(max= cpl_image_get_max(dif_ima));
-<a name="l00234"></a>00234       check_nomsg(cpl_vector_set(max_di,i,max));
-<a name="l00235"></a>00235 
-<a name="l00236"></a>00236       sinfo_free_image(&on_ima);
-<a name="l00237"></a>00237       sinfo_free_image(&of_ima);
-<a name="l00238"></a>00238       sinfo_free_image(&dif_ima);
-<a name="l00239"></a>00239       sinfo_free_image(&tmp_ima);
-<a name="l00240"></a>00240 
-<a name="l00241"></a>00241     }
-<a name="l00242"></a>00242 
-<a name="l00243"></a>00243     check_nomsg(qc->avg_on=cpl_vector_get_mean(avg_on));
-<a name="l00244"></a>00244     check_nomsg(qc->avg_of=cpl_vector_get_mean(avg_of));
-<a name="l00245"></a>00245     check_nomsg(qc->avg_di=cpl_vector_get_mean(avg_di));
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247     check_nomsg(qc->max_on=cpl_vector_get_max(max_on));
-<a name="l00248"></a>00248     check_nomsg(qc->max_of=cpl_vector_get_max(max_of));
-<a name="l00249"></a>00249     check_nomsg(qc->max_di=cpl_vector_get_max(max_di));
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     check_nomsg(qc->nsat=cpl_vector_get_mean(vec_nsat));
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253     <span class="keywordflow">if</span> (non > 1) {
-<a name="l00254"></a>00254       check_nomsg(qc->std_on=cpl_vector_get_stdev(avg_on));
-<a name="l00255"></a>00255       check_nomsg(qc->std_of=cpl_vector_get_stdev(avg_of));
-<a name="l00256"></a>00256       check_nomsg(qc->std_di=cpl_vector_get_stdev(avg_di));
-<a name="l00257"></a>00257     }
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     sinfo_free_my_vector(&avg_on);
-<a name="l00260"></a>00260     sinfo_free_my_vector(&avg_of);
-<a name="l00261"></a>00261     sinfo_free_my_vector(&avg_di);    
-<a name="l00262"></a>00262 
-<a name="l00263"></a>00263     sinfo_free_my_vector(&max_on);
-<a name="l00264"></a>00264     sinfo_free_my_vector(&max_of);
-<a name="l00265"></a>00265     sinfo_free_my_vector(&max_di);
-<a name="l00266"></a>00266 
-<a name="l00267"></a>00267     sinfo_free_my_vector(&vec_nsat);
-<a name="l00268"></a>00268 
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((non ==0) | (noff == 0)) && (nraw > 0 ) ) {
-<a name="l00271"></a>00271     sinfo_msg(<span class="stringliteral">"Monitor counts: case Nraw == 1"</span>);
-<a name="l00272"></a>00272     check_nomsg(avg_di = cpl_vector_new(nraw));
-<a name="l00273"></a>00273     check_nomsg(max_di = cpl_vector_new(nraw));
-<a name="l00274"></a>00274     check_nomsg(vec_nsat = cpl_vector_new(nraw));
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="keywordflow">for</span> (i=0; i< nraw; i++) {
-<a name="l00277"></a>00277       check_nomsg(frm = cpl_frameset_get_frame(raw,i));
-<a name="l00278"></a>00278       strcpy(name,cpl_frame_get_filename(frm));
-<a name="l00279"></a>00279       check_nomsg(dif_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281       check_nomsg(mean= cpl_image_get_mean(dif_ima));
-<a name="l00282"></a>00282       check_nomsg(tmp_ima=cpl_image_duplicate(dif_ima));
-<a name="l00283"></a>00283       sinfo_clean_nan(&tmp_ima);
-<a name="l00284"></a>00284       check_nomsg(mean= cpl_image_get_mean(tmp_ima));
-<a name="l00285"></a>00285       check_nomsg(cpl_vector_set(avg_di,i,mean));
-<a name="l00286"></a>00286       check_nomsg(max= cpl_image_get_max(tmp_ima));
-<a name="l00287"></a>00287       check_nomsg(cpl_vector_set(max_di,i,max));
-<a name="l00288"></a>00288       check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));
-<a name="l00289"></a>00289       check_nomsg(nsat=cpl_image_get_flux(tmp_ima));
-<a name="l00290"></a>00290       check_nomsg(cpl_vector_set(vec_nsat,i,nsat));
-<a name="l00291"></a>00291 
-<a name="l00292"></a>00292       sinfo_free_image(&tmp_ima);
-<a name="l00293"></a>00293       sinfo_free_image(&dif_ima);
-<a name="l00294"></a>00294 
-<a name="l00295"></a>00295     }
-<a name="l00296"></a>00296 
-<a name="l00297"></a>00297     qc->avg_di=cpl_vector_get_mean(avg_di);
-<a name="l00298"></a>00298     <span class="keywordflow">if</span> (nraw > 1) {
-<a name="l00299"></a>00299       check_nomsg(qc->std_di=cpl_vector_get_stdev(avg_di));
-<a name="l00300"></a>00300     }
-<a name="l00301"></a>00301     check_nomsg(qc->max_di=cpl_vector_get_max(max_di));
-<a name="l00302"></a>00302     check_nomsg(qc->nsat=cpl_vector_get_mean(vec_nsat));
-<a name="l00303"></a>00303 
-<a name="l00304"></a>00304     sinfo_free_my_vector(&avg_di);
-<a name="l00305"></a>00305     sinfo_free_my_vector(&max_di);
-<a name="l00306"></a>00306     sinfo_free_my_vector(&vec_nsat);
-<a name="l00307"></a>00307 
-<a name="l00308"></a>00308  } <span class="keywordflow">else</span> {
-<a name="l00309"></a>00309    sinfo_msg(<span class="stringliteral">"Monitor counts: else case"</span>);
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     avg_on = cpl_vector_new(non);
-<a name="l00312"></a>00312     avg_of = cpl_vector_new(non);
-<a name="l00313"></a>00313     avg_di = cpl_vector_new(non);
-<a name="l00314"></a>00314 
-<a name="l00315"></a>00315     max_on = cpl_vector_new(non);
-<a name="l00316"></a>00316     max_of = cpl_vector_new(non);
-<a name="l00317"></a>00317     max_di = cpl_vector_new(non);
-<a name="l00318"></a>00318 
-<a name="l00319"></a>00319     vec_nsat = cpl_vector_new(non);
-<a name="l00320"></a>00320 
-<a name="l00321"></a>00321     <span class="keywordflow">for</span> (i=0;i<non;i++) {
-<a name="l00322"></a>00322       check_nomsg(on_frm=cpl_frameset_get_frame(on_set,i));
-<a name="l00323"></a>00323       check_nomsg(mjd_on=sinfo_get_mjd_obs(on_frm));
-<a name="l00324"></a>00324       check_nomsg(of_frm=cpl_frameset_get_frame(of_set,0));
-<a name="l00325"></a>00325       check_nomsg(mjd_of=sinfo_get_mjd_obs(of_frm));
-<a name="l00326"></a>00326       strcpy(filename,cpl_frame_get_filename(of_frm));
-<a name="l00327"></a>00327 
-<a name="l00328"></a>00328       <span class="keywordflow">for</span> (j=1;j<noff;j++) {
-<a name="l00329"></a>00329     check_nomsg(tmp_of_frm = cpl_frameset_get_frame(of_set,j));
-<a name="l00330"></a>00330         check_nomsg(mjd_of_frm = sinfo_get_mjd_obs(tmp_of_frm));
-<a name="l00331"></a>00331 
-<a name="l00332"></a>00332           <span class="keywordflow">if</span>(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <
-<a name="l00333"></a>00333              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {
-<a name="l00334"></a>00334             mjd_of=mjd_of_frm;
-<a name="l00335"></a>00335              of_frm=tmp_of_frm;
-<a name="l00336"></a>00336       }
-<a name="l00337"></a>00337       }
-<a name="l00338"></a>00338 
-<a name="l00339"></a>00339        strcpy(filename,cpl_frame_get_filename(of_frm));
-<a name="l00340"></a>00340        check_nomsg(of_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0));
-<a name="l00341"></a>00341        check_nomsg(mean= cpl_image_get_mean(of_ima));
-<a name="l00342"></a>00342        check_nomsg(cpl_vector_set(avg_of,i,mean));
-<a name="l00343"></a>00343        check_nomsg(max= cpl_image_get_max(of_ima));
-<a name="l00344"></a>00344        check_nomsg(cpl_vector_set(max_of,i,max));
-<a name="l00345"></a>00345 
-<a name="l00346"></a>00346        strcpy(filename,cpl_frame_get_filename(on_frm));
-<a name="l00347"></a>00347        check_nomsg(on_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0));
-<a name="l00348"></a>00348        check_nomsg(mean= cpl_image_get_mean(on_ima)); 
-<a name="l00349"></a>00349        check_nomsg(cpl_vector_set(avg_on,i,mean));
-<a name="l00350"></a>00350        check_nomsg(max= cpl_image_get_mean(on_ima)); 
-<a name="l00351"></a>00351        check_nomsg(cpl_vector_set(max_on,i,max));
-<a name="l00352"></a>00352 
-<a name="l00353"></a>00353        check_nomsg(tmp_ima = cpl_image_duplicate(on_ima));     
-<a name="l00354"></a>00354        check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));
-<a name="l00355"></a>00355        check_nomsg(nsat=cpl_image_get_flux(tmp_ima));
-<a name="l00356"></a>00356        check_nomsg(cpl_vector_set(vec_nsat,i,nsat));
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358        check_nomsg(dif_ima = cpl_image_subtract_create(on_ima,of_ima));
-<a name="l00359"></a>00359        check_nomsg(mean= cpl_image_get_mean(dif_ima));
-<a name="l00360"></a>00360        check_nomsg(cpl_vector_set(avg_di,i,mean));
-<a name="l00361"></a>00361        check_nomsg(max= cpl_image_get_max(dif_ima));
-<a name="l00362"></a>00362        check_nomsg(cpl_vector_set(max_di,i,max));
-<a name="l00363"></a>00363 
-<a name="l00364"></a>00364        sinfo_free_image(&on_ima);
-<a name="l00365"></a>00365        sinfo_free_image(&of_ima);
-<a name="l00366"></a>00366        sinfo_free_image(&dif_ima);
-<a name="l00367"></a>00367        sinfo_free_image(&tmp_ima);
-<a name="l00368"></a>00368 
-<a name="l00369"></a>00369    }
-<a name="l00370"></a>00370 
-<a name="l00371"></a>00371     sinfo_free_my_vector(&avg_on);
-<a name="l00372"></a>00372     sinfo_free_my_vector(&avg_of);
-<a name="l00373"></a>00373     sinfo_free_my_vector(&avg_di);
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     sinfo_free_my_vector(&max_on);
-<a name="l00376"></a>00376     sinfo_free_my_vector(&max_of);
-<a name="l00377"></a>00377     sinfo_free_my_vector(&max_di);
-<a name="l00378"></a>00378 
-<a name="l00379"></a>00379     sinfo_free_my_vector(&vec_nsat);
-<a name="l00380"></a>00380 
-<a name="l00381"></a>00381  }
-<a name="l00382"></a>00382 
-<a name="l00383"></a>00383  <span class="comment">/*</span>
-<a name="l00384"></a>00384 <span class="comment"> sinfo_msg("avg_on=%g std_on=%g ",qc->avg_on,qc_wcal.std_on);</span>
-<a name="l00385"></a>00385 <span class="comment"> sinfo_msg("avg_of=%g std_of=%g ",qc->avg_of,qc_wcal.std_of);</span>
-<a name="l00386"></a>00386 <span class="comment"> sinfo_msg("avg_di=%g std_di=%g ",qc->avg_di,qc_wcal.std_di);</span>
-<a name="l00387"></a>00387 <span class="comment"> sinfo_msg("max_fl=%g nsat_on=%g ",qc->max_di,qc_wcal.nsat);</span>
-<a name="l00388"></a>00388 <span class="comment"> */</span>
-<a name="l00389"></a>00389  cleanup:
-<a name="l00390"></a>00390  
-<a name="l00391"></a>00391  sinfo_free_image(&on_ima);
-<a name="l00392"></a>00392  sinfo_free_image(&of_ima);
-<a name="l00393"></a>00393  sinfo_free_image(&dif_ima);
-<a name="l00394"></a>00394  sinfo_free_image(&tmp_ima);
-<a name="l00395"></a>00395 
-<a name="l00396"></a>00396  sinfo_free_my_vector(&avg_on);
-<a name="l00397"></a>00397  sinfo_free_my_vector(&avg_of);
-<a name="l00398"></a>00398  sinfo_free_my_vector(&avg_di);
-<a name="l00399"></a>00399 
-<a name="l00400"></a>00400  sinfo_free_my_vector(&max_on);
-<a name="l00401"></a>00401  sinfo_free_my_vector(&max_of);
-<a name="l00402"></a>00402  sinfo_free_my_vector(&max_di);
-<a name="l00403"></a>00403 
-<a name="l00404"></a>00404  sinfo_free_my_vector(&vec_nsat);
-<a name="l00405"></a>00405 
-<a name="l00406"></a>00406  sinfo_free_frameset(&on_set);
-<a name="l00407"></a>00407  sinfo_free_frameset(&of_set);
-<a name="l00408"></a>00408 
-<a name="l00409"></a>00409  <span class="keywordflow">return</span> 0;
-<a name="l00410"></a>00410 
-<a name="l00411"></a>00411 }
-<a name="l00412"></a>00412 
-<a name="l00413"></a>00413 
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wcal_functions.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_wcal_functions.c,v 1.10 2013/09/17 08:12:53 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2013/09/17 08:12:53 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.10 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                   Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_wcal_functions.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="comment">/* struct qc_wcal qc_wcal_par; */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> qc_wcal* sinfo_qc_wcal_new(<span class="keywordtype">void</span>)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> {  </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>   qc_wcal * qc;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>   qc= cpl_malloc(<span class="keyword">sizeof</span>(qc_wcal));</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>   qc->avg_on=0; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>   qc->std_on=0;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>   qc->avg_of=0; </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>   qc->std_of=0;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>   qc->avg_di=0; </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>   qc->std_di=0;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>   qc->max_on=0;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>   qc->max_of=0;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>   qc->max_di=0;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>   qc->nsat_on=0;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>   qc->noise_on=0;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>   qc->noise_of=0;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>   qc->flux_on=0;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>   qc->nsat=0;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordflow">return</span> qc;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">void</span> sinfo_qc_wcal_delete(qc_wcal** qc)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   cpl_free(*qc);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   *qc = NULL;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> <span class="keywordtype">int</span> sinfo_dumpTblToFitParams ( FitParams ** params, <span class="keywordtype">char</span> * filename )</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     cpl_table * fp =NULL;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordtype">char</span>* col=NULL;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordtype">int</span> i =0;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordtype">int</span> j =0;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     <span class="keywordtype">int</span> status=0;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordflow">if</span> ( NULL == params )</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no fit parameters available!"</span>) ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keywordflow">if</span> ( NULL == filename )</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a> (<span class="stringliteral">"no filename available!"</span>) ;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>         <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span> </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     fp=cpl_table_load(filename,1,0);</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     <span class="keywordflow">if</span>(cpl_error_get_code() != CPL_ERROR_NONE) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>       sinfo_msg(<span class="stringliteral">"cannot load table %s"</span>,filename);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"%s"</span>, (<span class="keywordtype">char</span>* ) cpl_error_get_message());</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>       <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     }</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     col = (<span class="keywordtype">char</span>*) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="keywordflow">for</span> ( i = 0 ; i < params[0]->n_params ; i++ )</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>        params[i]->n_params=cpl_table_get_int(fp,<span class="stringliteral">"n_params"</span>,i,&status);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>        params[i]->column  =cpl_table_get_int(fp,<span class="stringliteral">"column"</span>,i,&status);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>        params[i]->line    =cpl_table_get_int(fp,<span class="stringliteral">"line"</span>,i,&status);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>        <span class="keywordflow">for</span> (j=0 ; j < 4; j++) {</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>      snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"fpar"</span>,j);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>          params[i]->fit_par[j]=cpl_table_get_double(fp,col,i,&status);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>      snprintf(col,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%d"</span>,<span class="stringliteral">"dpar"</span>,j);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>          params[i]->derv_par[j]=cpl_table_get_double(fp,col,i,&status);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>        }</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     cpl_free(col);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     cpl_table_delete(fp) ;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> }</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span> </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span> </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> <span class="keywordtype">int</span> sinfo_det_ncounts(cpl_frameset* raw, <span class="keywordtype">int</span> thresh_max, qc_wcal* qc)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>  <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>  <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>  <span class="keywordtype">long</span> nraw=0;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>  <span class="keywordtype">int</span> non=0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>  <span class="keywordtype">int</span> noff=0;</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>  <span class="keywordtype">int</span> nsat=0;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>  <span class="keywordtype">double</span> mean=0;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  <span class="keywordtype">double</span> max=0;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>  <span class="keywordtype">double</span> mjd_on=0;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>  <span class="keywordtype">double</span> mjd_of=0;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>  <span class="keywordtype">double</span> mjd_of_frm=0;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>  <span class="keywordtype">char</span> name[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>  <span class="keywordtype">char</span> filename[FILE_NAME_SZ];</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>  cpl_vector* avg_on=NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>  cpl_vector* avg_of=NULL;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>  cpl_vector* avg_di=NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span> </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>  cpl_vector* max_on=NULL;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>  cpl_vector* max_of=NULL;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>  cpl_vector* max_di=NULL;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span> </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>  cpl_vector* vec_nsat=NULL;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span> </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>  cpl_frame* frm=NULL;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>  cpl_frame* frm_dup=NULL;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>  cpl_frame* on_frm=NULL;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>  cpl_frame* of_frm=NULL;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>  cpl_frame* tmp_of_frm=NULL;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>  cpl_image* dif_ima=NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>  cpl_image* on_ima=NULL;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>  cpl_image* of_ima=NULL;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>  cpl_image* tmp_ima=NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>  cpl_frameset* on_set=NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>  cpl_frameset* of_set=NULL;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>  </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>  on_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>  of_set=cpl_frameset_new();</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>  nraw = cpl_frameset_get_size(raw);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span> </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>  <span class="keywordflow">for</span> (i=0; i< nraw; i++) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>    check_nomsg(frm = cpl_frameset_get_frame(raw,i));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>    check_nomsg(frm_dup = cpl_frame_duplicate(frm));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    <span class="keywordflow">if</span>(sinfo_frame_is_on(frm) == 1) {</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>      cpl_frameset_insert(on_set,frm_dup);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>      non++;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>      cpl_frameset_insert(of_set,frm_dup);</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>      noff++;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>    }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>  }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span> </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span> </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>  <span class="keywordflow">if</span> (non == noff) {   </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>      sinfo_msg(<span class="stringliteral">"Monitor counts: case Non==Noff"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span> </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span> </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     avg_on = cpl_vector_new(non);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     avg_of = cpl_vector_new(non);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     avg_di = cpl_vector_new(non);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span> </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     max_on = cpl_vector_new(non);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     max_of = cpl_vector_new(non);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     max_di = cpl_vector_new(non);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span> </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span> </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span> </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     vec_nsat = cpl_vector_new(non);</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     <span class="keywordflow">for</span> (i=0; i< non; i++) {</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>       check_nomsg(on_frm = cpl_frameset_get_frame(on_set,i));</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       strcpy(name,cpl_frame_get_filename(on_frm));</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>       check_nomsg(on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>       check_nomsg(mean= cpl_image_get_mean(on_ima));</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       check_nomsg(cpl_vector_set(avg_on,i,mean));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       check_nomsg(max= cpl_image_get_max(on_ima));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>       check_nomsg(cpl_vector_set(max_on,i,max));</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>       check_nomsg(tmp_ima = cpl_image_duplicate(on_ima));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>       check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>       check_nomsg(nsat=cpl_image_get_flux(tmp_ima));</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>       check_nomsg(cpl_vector_set(vec_nsat,i,nsat));</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span> </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span> </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       check_nomsg(of_frm = cpl_frameset_get_frame(of_set,i));</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       strcpy(name,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       check_nomsg(of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       check_nomsg(mean= cpl_image_get_mean(of_ima));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       check_nomsg(cpl_vector_set(avg_of,i,mean));</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       check_nomsg(max= cpl_image_get_max(of_ima));</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       check_nomsg(cpl_vector_set(max_of,i,max));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>      </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       check_nomsg(dif_ima = cpl_image_subtract_create(on_ima,of_ima));</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       check_nomsg(mean= cpl_image_get_mean(dif_ima));</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>       check_nomsg(cpl_vector_set(avg_di,i,mean));</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>       check_nomsg(max= cpl_image_get_max(dif_ima));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>       check_nomsg(cpl_vector_set(max_di,i,max));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span> </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>       sinfo_free_image(&on_ima);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>       sinfo_free_image(&of_ima);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>       sinfo_free_image(&dif_ima);</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       sinfo_free_image(&tmp_ima);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span> </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     }</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span> </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     check_nomsg(qc->avg_on=cpl_vector_get_mean(avg_on));</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>     check_nomsg(qc->avg_of=cpl_vector_get_mean(avg_of));</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     check_nomsg(qc->avg_di=cpl_vector_get_mean(avg_di));</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>     check_nomsg(qc->max_on=cpl_vector_get_max(max_on));</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     check_nomsg(qc->max_of=cpl_vector_get_max(max_of));</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>     check_nomsg(qc->max_di=cpl_vector_get_max(max_di));</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     check_nomsg(qc->nsat=cpl_vector_get_mean(vec_nsat));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     <span class="keywordflow">if</span> (non > 1) {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>       check_nomsg(qc->std_on=cpl_vector_get_stdev(avg_on));</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>       check_nomsg(qc->std_of=cpl_vector_get_stdev(avg_of));</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       check_nomsg(qc->std_di=cpl_vector_get_stdev(avg_di));</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     sinfo_free_my_vector(&avg_on);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>     sinfo_free_my_vector(&avg_of);</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     sinfo_free_my_vector(&avg_di);    </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span> </div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>     sinfo_free_my_vector(&max_on);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     sinfo_free_my_vector(&max_of);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     sinfo_free_my_vector(&max_di);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span> </div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     sinfo_free_my_vector(&vec_nsat);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span> </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( ((non ==0) | (noff == 0)) && (nraw > 0 ) ) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     sinfo_msg(<span class="stringliteral">"Monitor counts: case Nraw == 1"</span>);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     check_nomsg(avg_di = cpl_vector_new(nraw));</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>     check_nomsg(max_di = cpl_vector_new(nraw));</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     check_nomsg(vec_nsat = cpl_vector_new(nraw));</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="keywordflow">for</span> (i=0; i< nraw; i++) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>       check_nomsg(frm = cpl_frameset_get_frame(raw,i));</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>       strcpy(name,cpl_frame_get_filename(frm));</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>       check_nomsg(dif_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>       check_nomsg(mean= cpl_image_get_mean(dif_ima));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>       check_nomsg(tmp_ima=cpl_image_duplicate(dif_ima));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>       sinfo_clean_nan(&tmp_ima);</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>       check_nomsg(mean= cpl_image_get_mean(tmp_ima));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>       check_nomsg(cpl_vector_set(avg_di,i,mean));</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>       check_nomsg(max= cpl_image_get_max(tmp_ima));</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>       check_nomsg(cpl_vector_set(max_di,i,max));</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>       check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>       check_nomsg(nsat=cpl_image_get_flux(tmp_ima));</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>       check_nomsg(cpl_vector_set(vec_nsat,i,nsat));</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span> </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>       sinfo_free_image(&tmp_ima);</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>       sinfo_free_image(&dif_ima);</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span> </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>     }</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span> </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     qc->avg_di=cpl_vector_get_mean(avg_di);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>     <span class="keywordflow">if</span> (nraw > 1) {</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>       check_nomsg(qc->std_di=cpl_vector_get_stdev(avg_di));</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>     check_nomsg(qc->max_di=cpl_vector_get_max(max_di));</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     check_nomsg(qc->nsat=cpl_vector_get_mean(vec_nsat));</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span> </div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>     sinfo_free_my_vector(&avg_di);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>     sinfo_free_my_vector(&max_di);</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     sinfo_free_my_vector(&vec_nsat);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span> </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    sinfo_msg(<span class="stringliteral">"Monitor counts: else case"</span>);</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     avg_on = cpl_vector_new(non);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     avg_of = cpl_vector_new(non);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     avg_di = cpl_vector_new(non);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span> </div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     max_on = cpl_vector_new(non);</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     max_of = cpl_vector_new(non);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     max_di = cpl_vector_new(non);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span> </div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     vec_nsat = cpl_vector_new(non);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span> </div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordflow">for</span> (i=0;i<non;i++) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       check_nomsg(on_frm=cpl_frameset_get_frame(on_set,i));</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>       check_nomsg(mjd_on=sinfo_get_mjd_obs(on_frm));</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>       check_nomsg(of_frm=cpl_frameset_get_frame(of_set,0));</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       check_nomsg(mjd_of=sinfo_get_mjd_obs(of_frm));</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       strcpy(filename,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span> </div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       <span class="keywordflow">for</span> (j=1;j<noff;j++) {</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>     check_nomsg(tmp_of_frm = cpl_frameset_get_frame(of_set,j));</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>         check_nomsg(mjd_of_frm = sinfo_get_mjd_obs(tmp_of_frm));</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span> </div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>           <span class="keywordflow">if</span>(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>             mjd_of=mjd_of_frm;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>              of_frm=tmp_of_frm;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>       }</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       }</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span> </div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>        strcpy(filename,cpl_frame_get_filename(of_frm));</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>        check_nomsg(of_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>        check_nomsg(mean= cpl_image_get_mean(of_ima));</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>        check_nomsg(cpl_vector_set(avg_of,i,mean));</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>        check_nomsg(max= cpl_image_get_max(of_ima));</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>        check_nomsg(cpl_vector_set(max_of,i,max));</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span> </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>        strcpy(filename,cpl_frame_get_filename(on_frm));</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>        check_nomsg(on_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>        check_nomsg(mean= cpl_image_get_mean(on_ima)); </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>        check_nomsg(cpl_vector_set(avg_on,i,mean));</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>        check_nomsg(max= cpl_image_get_mean(on_ima)); </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>        check_nomsg(cpl_vector_set(max_on,i,max));</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span> </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>        check_nomsg(tmp_ima = cpl_image_duplicate(on_ima));     </div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>        check_nomsg(cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1));</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>        check_nomsg(nsat=cpl_image_get_flux(tmp_ima));</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>        check_nomsg(cpl_vector_set(vec_nsat,i,nsat));</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>        check_nomsg(dif_ima = cpl_image_subtract_create(on_ima,of_ima));</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>        check_nomsg(mean= cpl_image_get_mean(dif_ima));</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>        check_nomsg(cpl_vector_set(avg_di,i,mean));</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>        check_nomsg(max= cpl_image_get_max(dif_ima));</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>        check_nomsg(cpl_vector_set(max_di,i,max));</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span> </div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>        sinfo_free_image(&on_ima);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>        sinfo_free_image(&of_ima);</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>        sinfo_free_image(&dif_ima);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>        sinfo_free_image(&tmp_ima);</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span> </div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>    }</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span> </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     sinfo_free_my_vector(&avg_on);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>     sinfo_free_my_vector(&avg_of);</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     sinfo_free_my_vector(&avg_di);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     sinfo_free_my_vector(&max_on);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     sinfo_free_my_vector(&max_of);</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     sinfo_free_my_vector(&max_di);</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span> </div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     sinfo_free_my_vector(&vec_nsat);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>  }</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span> </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>  <span class="comment">/*</span></div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span> <span class="comment"> sinfo_msg("avg_on=%g std_on=%g ",qc->avg_on,qc_wcal.std_on);</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span> <span class="comment"> sinfo_msg("avg_of=%g std_of=%g ",qc->avg_of,qc_wcal.std_of);</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span> <span class="comment"> sinfo_msg("avg_di=%g std_di=%g ",qc->avg_di,qc_wcal.std_di);</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span> <span class="comment"> sinfo_msg("max_fl=%g nsat_on=%g ",qc->max_di,qc_wcal.nsat);</span></div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>  cleanup:</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>  </div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>  sinfo_free_image(&on_ima);</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>  sinfo_free_image(&of_ima);</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>  sinfo_free_image(&dif_ima);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>  sinfo_free_image(&tmp_ima);</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span> </div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>  sinfo_free_my_vector(&avg_on);</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>  sinfo_free_my_vector(&avg_of);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>  sinfo_free_my_vector(&avg_di);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span> </div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>  sinfo_free_my_vector(&max_on);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>  sinfo_free_my_vector(&max_of);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>  sinfo_free_my_vector(&max_di);</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span> </div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>  sinfo_free_my_vector(&vec_nsat);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span> </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>  sinfo_free_frameset(&on_set);</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>  sinfo_free_frameset(&of_set);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span> </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span> </div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span> }</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span> </div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span> </div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfo__wcal__functions_8h_source.html b/html/sinfo__wcal__functions_8h_source.html
index 4b34b0f..b70ef83 100644
--- a/html/sinfo__wcal__functions_8h_source.html
+++ b/html/sinfo__wcal__functions_8h_source.html
@@ -2,83 +2,114 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_wcal_functions.h Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_wcal_functions.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_wcal_functions.h,v 1.2 2006/10/22 14:12:28 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the SINFONI Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.2 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 <span class="preprocessor">#ifndef SINFO_WCAL_FUNCTIONS_H</span>
-<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WCAL_FUNCTIONS_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="keyword">struct </span>qc_wcal_ {
-<a name="l00030"></a>00030 
-<a name="l00031"></a>00031   <span class="keywordtype">double</span> avg_on; 
-<a name="l00032"></a>00032   <span class="keywordtype">double</span> std_on;
-<a name="l00033"></a>00033   <span class="keywordtype">double</span> avg_of; 
-<a name="l00034"></a>00034   <span class="keywordtype">double</span> std_of;
-<a name="l00035"></a>00035   <span class="keywordtype">double</span> avg_di; 
-<a name="l00036"></a>00036   <span class="keywordtype">double</span> std_di;
-<a name="l00037"></a>00037   <span class="keywordtype">double</span> max_on;
-<a name="l00038"></a>00038   <span class="keywordtype">double</span> max_of;
-<a name="l00039"></a>00039   <span class="keywordtype">double</span> max_di;
-<a name="l00040"></a>00040   <span class="keywordtype">double</span> nsat_on;
-<a name="l00041"></a>00041   <span class="keywordtype">double</span> noise_on;
-<a name="l00042"></a>00042   <span class="keywordtype">double</span> noise_of;
-<a name="l00043"></a>00043   <span class="keywordtype">double</span> flux_on;
-<a name="l00044"></a>00044   <span class="keywordtype">double</span>    nsat;
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 };
-<a name="l00047"></a>00047  
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="keyword">typedef</span> <span class="keyword">struct </span>qc_wcal_ qc_wcal;
-<a name="l00051"></a>00051 
-<a name="l00052"></a>00052 <span class="comment">/* extern struct qc_wcal qc_wcal_par; */</span>
-<a name="l00053"></a>00053 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00054"></a>00054 <span class="preprocessor">#include <cpl.h></span>
-<a name="l00055"></a>00055 <span class="preprocessor">#include <sinfo_globals.h></span>
-<a name="l00056"></a>00056 <span class="preprocessor">#include <sinfo_spiffi_types.h></span>
-<a name="l00057"></a>00057 <span class="preprocessor">#include <sinfo_wavecal_cfg.h></span>
-<a name="l00058"></a>00058 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00059"></a>00059 <span class="comment">/* ---------------------------------------------------------------------- </span>
-<a name="l00060"></a>00060 <span class="comment">   group of frames</span>
-<a name="l00061"></a>00061 <span class="comment">---------------------------------------------------------------------- */</span>
-<a name="l00062"></a>00062 <span class="keywordtype">int</span> sinfo_dumpTblToFitParams ( FitParams ** params, <span class="keywordtype">char</span> * filename );
-<a name="l00063"></a>00063 <span class="keywordtype">int</span> sinfo_det_ncounts(cpl_frameset* raw, <span class="keywordtype">int</span> thresh_max, qc_wcal* qc);
-<a name="l00064"></a>00064 qc_wcal* sinfo_qc_wcal_new(<span class="keywordtype">void</span>);
-<a name="l00065"></a>00065 <span class="keywordtype">void</span> sinfo_qc_wcal_delete(qc_wcal** qc);
-<a name="l00066"></a>00066 CPL_END_DECLS
-<a name="l00067"></a>00067 
-<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfo_wcal_functions.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_wcal_functions.h,v 1.2 2006/10/22 14:12:28 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the SINFONI Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This proram is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2006/10/22 14:12:28 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.2 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> <span class="preprocessor">#ifndef SINFO_WCAL_FUNCTIONS_H</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor"></span><span class="preprocessor">#define SINFO_WCAL_FUNCTIONS_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="keyword">struct </span>qc_wcal_ {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>   <span class="keywordtype">double</span> avg_on; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>   <span class="keywordtype">double</span> std_on;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>   <span class="keywordtype">double</span> avg_of; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>   <span class="keywordtype">double</span> std_of;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>   <span class="keywordtype">double</span> avg_di; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>   <span class="keywordtype">double</span> std_di;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>   <span class="keywordtype">double</span> max_on;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>   <span class="keywordtype">double</span> max_of;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>   <span class="keywordtype">double</span> max_di;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>   <span class="keywordtype">double</span> nsat_on;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>   <span class="keywordtype">double</span> noise_on;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>   <span class="keywordtype">double</span> noise_of;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>   <span class="keywordtype">double</span> flux_on;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>   <span class="keywordtype">double</span>    nsat;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> };</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>  </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="keyword">typedef</span> <span class="keyword">struct </span>qc_wcal_ qc_wcal;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment">/* extern struct qc_wcal qc_wcal_par; */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="preprocessor">#include <cpl.h></span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="preprocessor">#include <sinfo_globals.h></span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="preprocessor">#include <sinfo_spiffi_types.h></span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span> <span class="preprocessor">#include <sinfo_wavecal_cfg.h></span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">/* ---------------------------------------------------------------------- </span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">   group of frames</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">---------------------------------------------------------------------- */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="keywordtype">int</span> sinfo_dumpTblToFitParams ( FitParams ** params, <span class="keywordtype">char</span> * filename );</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="keywordtype">int</span> sinfo_det_ncounts(cpl_frameset* raw, <span class="keywordtype">int</span> thresh_max, qc_wcal* qc);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> qc_wcal* sinfo_qc_wcal_new(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="keywordtype">void</span> sinfo_qc_wcal_delete(qc_wcal** qc);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> CPL_END_DECLS</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> <span class="preprocessor">#endif</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__cube2ima_8c_source.html b/html/sinfoni_2sinfo__utl__cube2ima_8c_source.html
index a6170f2..17f7005 100644
--- a/html/sinfoni_2sinfo__utl__cube2ima_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__cube2ima_8c_source.html
@@ -2,245 +2,276 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2ima.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2ima.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2ima.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_utl_cube2ima.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00042"></a>00042 
-<a name="l00043"></a>00043 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                            Functions prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">                            Static variables</span>
-<a name="l00051"></a>00051 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00054"></a>00054 <span class="comment">                                Functions code</span>
-<a name="l00055"></a>00055 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00056"></a>00056 
-<a name="l00064"></a>00064 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="keywordtype">int</span> sinfo_utl_cube2ima(
-<a name="l00073"></a>00073         cpl_parameterlist   *   parlist, 
-<a name="l00074"></a>00074         cpl_frameset        *   framelist)
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076     cpl_parameter       *   param =NULL ;
-<a name="l00077"></a>00077     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;
-<a name="l00078"></a>00078     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     <span class="keywordtype">double</span>                  ws=0 ;
-<a name="l00081"></a>00081     <span class="keywordtype">double</span>                  we=0 ;
-<a name="l00082"></a>00082     <span class="keywordtype">double</span>                  wc=0 ;
-<a name="l00083"></a>00083     <span class="keywordtype">double</span>                  wd=0 ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085 
-<a name="l00086"></a>00086     <span class="keywordtype">int</span> naxis3=0;
-<a name="l00087"></a>00087     <span class="keywordtype">double</span> lams=0;
-<a name="l00088"></a>00088     <span class="keywordtype">double</span> lame=0;
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090     cpl_frame           *   frm_cub=NULL ;
-<a name="l00091"></a>00091  
-<a name="l00092"></a>00092     cpl_propertylist    *   plist=NULL ;
-<a name="l00093"></a>00093     cpl_frame           *   product_frame=NULL;
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     cpl_imagelist * cube=NULL;
-<a name="l00096"></a>00096     cpl_image * img=NULL;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098    
-<a name="l00099"></a>00099     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00100"></a>00100     <span class="comment">/* --stropt */</span>
-<a name="l00101"></a>00101     name_o =<span class="stringliteral">"out_ima.fits"</span>;
-<a name="l00102"></a>00102  
-<a name="l00103"></a>00103     <span class="comment">/* --doubleopt */</span>
-<a name="l00104"></a>00104     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00105"></a>00105                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>));
-<a name="l00106"></a>00106     check_nomsg(ws = cpl_parameter_get_double(param)) ;
-<a name="l00107"></a>00107 
-<a name="l00108"></a>00108     <span class="comment">/* --doubleopt */</span>
-<a name="l00109"></a>00109     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00110"></a>00110                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>));
-<a name="l00111"></a>00111     check_nomsg(we = cpl_parameter_get_double(param)) ;
-<a name="l00112"></a>00112 
-<a name="l00113"></a>00113     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00114"></a>00114     check(sinfo_dfs_set_groups(framelist),
-<a name="l00115"></a>00115         <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>);
-<a name="l00116"></a>00116  
-<a name="l00117"></a>00117     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00118"></a>00118     check(frm_cub = cpl_frameset_find(framelist, SI_UTL_CUBE2IMA_CUBE),
-<a name="l00119"></a>00119         <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,SI_UTL_CUBE2IMA_CUBE);
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121     check_nomsg(name_i = cpl_frame_get_filename(frm_cub));
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     plist=cpl_propertylist_load(name_i,0);
-<a name="l00124"></a>00124     naxis3=sinfo_pfits_get_naxis3(plist);
-<a name="l00125"></a>00125     wd=sinfo_pfits_get_cdelt3(plist);
-<a name="l00126"></a>00126     wc=sinfo_pfits_get_crval3(plist);
-<a name="l00127"></a>00127     sinfo_free_propertylist(&plist);
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129     lams=wc-naxis3*wd/2+wd;
-<a name="l00130"></a>00130     lame=lams+(naxis3-2)*wd;
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00133"></a>00133                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>));
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135     <span class="keywordflow">if</span>(ws != cpl_parameter_get_default_double(param)) {
-<a name="l00136"></a>00136       <span class="keywordflow">if</span> (ws < lams) {
-<a name="l00137"></a>00137         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ws =%f too low set it to %f"</span>,ws,lams);
-<a name="l00138"></a>00138         ws=lams;
-<a name="l00139"></a>00139       }
-<a name="l00140"></a>00140       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ws >= lame) {
-<a name="l00141"></a>00141         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ws =%f too high set it to %f"</span>,ws,lams);
-<a name="l00142"></a>00142         ws=lams;
-<a name="l00143"></a>00143       }
-<a name="l00144"></a>00144     } <span class="keywordflow">else</span> {
-<a name="l00145"></a>00145       ws=lams;
-<a name="l00146"></a>00146     }
-<a name="l00147"></a>00147 
-<a name="l00148"></a>00148     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00149"></a>00149                                              <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>));
-<a name="l00150"></a>00150     <span class="keywordflow">if</span>(we != cpl_parameter_get_default_double(param)) {
-<a name="l00151"></a>00151       <span class="keywordflow">if</span> (we > lame) {
-<a name="l00152"></a>00152         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"we =%f too low set it to %f"</span>,we,lame);
-<a name="l00153"></a>00153         we=lame;
-<a name="l00154"></a>00154       }
-<a name="l00155"></a>00155       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (we <= lams) {
-<a name="l00156"></a>00156         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"we =%f too low set it to %f"</span>,we,lame);
-<a name="l00157"></a>00157         we=lame;
-<a name="l00158"></a>00158       }
-<a name="l00159"></a>00159     } <span class="keywordflow">else</span> {
-<a name="l00160"></a>00160       we=lame;
-<a name="l00161"></a>00161     }
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_cub),0),
-<a name="l00164"></a>00164           <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166     <span class="comment">/* recipe's algorithm */</span>
-<a name="l00167"></a>00167     check_nomsg(cube = cpl_imagelist_load((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0));
-<a name="l00168"></a>00168     <span class="keywordflow">if</span>(NULL==(img=sinfo_new_average_cube_to_image_between_waves(cube,wd,wc,
-<a name="l00169"></a>00169                                                                 ws,we))) {
-<a name="l00170"></a>00170      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot average cube to image in wavelength "</span>
-<a name="l00171"></a>00171                      <span class="stringliteral">"range [%f,%f] um"</span>,ws,we) ;
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173        sinfo_free_imagelist(&cube);
-<a name="l00174"></a>00174        sinfo_free_propertylist(&plist);    
-<a name="l00175"></a>00175 
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177     sinfo_free_imagelist(&cube);
-<a name="l00178"></a>00178 
-<a name="l00179"></a>00179     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00180"></a>00180     <span class="comment">/* Create product frame */</span>
-<a name="l00181"></a>00181     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00182"></a>00182     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00183"></a>00183     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE2IMA_PROIMA)) ;
-<a name="l00184"></a>00184     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00185"></a>00185     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00186"></a>00186     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL), 
-<a name="l00187"></a>00187      <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00188"></a>00188 
-<a name="l00189"></a>00189 
-<a name="l00190"></a>00190     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00191"></a>00191     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00192"></a>00192 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span>
-<a name="l00193"></a>00193 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00194"></a>00194                                        product_frame, 
-<a name="l00195"></a>00195                                        framelist, 
-<a name="l00196"></a>00196                                        parlist,
-<a name="l00197"></a>00197                                        <span class="stringliteral">"si_sinfo_utl_cube2ima"</span>, 
-<a name="l00198"></a>00198                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00199"></a>00199                                        KEY_VALUE_HPRO_DID,NULL),
-<a name="l00200"></a>00200       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00201"></a>00201 <span class="preprocessor">#else</span>
-<a name="l00202"></a>00202 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, 
-<a name="l00203"></a>00203                                        product_frame, 
-<a name="l00204"></a>00204                                        framelist, 
-<a name="l00205"></a>00205                                        parlist,
-<a name="l00206"></a>00206                                        <span class="stringliteral">"si_sinfo_utl_cube2ima"</span>, 
-<a name="l00207"></a>00207                                        <span class="stringliteral">"SINFONI"</span>, 
-<a name="l00208"></a>00208                                        KEY_VALUE_HPRO_DID),
-<a name="l00209"></a>00209       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00210"></a>00210 <span class="preprocessor">#endif</span>
-<a name="l00211"></a>00211 <span class="preprocessor"></span>   
-<a name="l00212"></a>00212     <span class="comment">/* Save the file */</span>
-<a name="l00213"></a>00213     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE3"</span>,0));
-<a name="l00214"></a>00214     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX3"</span>,0));
-<a name="l00215"></a>00215     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL3"</span>,0));
-<a name="l00216"></a>00216     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT3"</span>,0));
-<a name="l00217"></a>00217     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT3"</span>,0));
-<a name="l00218"></a>00218 
-<a name="l00219"></a>00219     check(cpl_image_save(img, 
-<a name="l00220"></a>00220                          name_o, 
-<a name="l00221"></a>00221                          CPL_BPP_IEEE_FLOAT, 
-<a name="l00222"></a>00222                          plist,
-<a name="l00223"></a>00223                          CPL_IO_DEFAULT),
-<a name="l00224"></a>00224       <span class="stringliteral">"Could not save product"</span>);
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226     check_nomsg(sinfo_free_propertylist(&plist)) ;
-<a name="l00227"></a>00227   
-<a name="l00228"></a>00228     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00229"></a>00229     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00230"></a>00230     check_nomsg(sinfo_free_image(&img)) ;
-<a name="l00231"></a>00231  
-<a name="l00232"></a>00232     <span class="comment">/* Return */</span>
-<a name="l00233"></a>00233 
-<a name="l00234"></a>00234  cleanup:
-<a name="l00235"></a>00235        sinfo_free_imagelist(&cube);
-<a name="l00236"></a>00236        sinfo_free_propertylist(&plist);    
-<a name="l00237"></a>00237        sinfo_free_image(&img);
-<a name="l00238"></a>00238 
-<a name="l00239"></a>00239     <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00240"></a>00240         <span class="keywordflow">return</span> -1 ;
-<a name="l00241"></a>00241     <span class="keywordflow">else</span> 
-<a name="l00242"></a>00242         <span class="keywordflow">return</span> 0 ;
-<a name="l00243"></a>00243 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_cube2ima.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2ima.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_new_cube_ops.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_utl_cube2ima.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">int</span> sinfo_utl_cube2ima(</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     cpl_parameter       *   param =NULL ;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keywordtype">double</span>                  ws=0 ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordtype">double</span>                  we=0 ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     <span class="keywordtype">double</span>                  wc=0 ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     <span class="keywordtype">double</span>                  wd=0 ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span> </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     <span class="keywordtype">int</span> naxis3=0;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     <span class="keywordtype">double</span> lams=0;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     <span class="keywordtype">double</span> lame=0;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     cpl_frame           *   frm_cub=NULL ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>  </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     cpl_imagelist * cube=NULL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     cpl_image * img=NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     name_o =<span class="stringliteral">"out_ima.fits"</span>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>  </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>));</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>     check_nomsg(ws = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span> </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>));</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     check_nomsg(we = cpl_parameter_get_double(param)) ;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span> </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>         <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>  </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     check(frm_cub = cpl_frameset_find(framelist, SI_UTL_CUBE2IMA_CUBE),</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>         <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,SI_UTL_CUBE2IMA_CUBE);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     check_nomsg(name_i = cpl_frame_get_filename(frm_cub));</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     plist=cpl_propertylist_load(name_i,0);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     naxis3=sinfo_pfits_get_naxis3(plist);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     wd=sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     wc=sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     lams=wc-naxis3*wd/2+wd;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     lame=lams+(naxis3-2)*wd;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                                             <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.ws"</span>));</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>     <span class="keywordflow">if</span>(ws != cpl_parameter_get_default_double(param)) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>       <span class="keywordflow">if</span> (ws < lams) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ws =%f too low set it to %f"</span>,ws,lams);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>         ws=lams;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ws >= lame) {</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ws =%f too high set it to %f"</span>,ws,lams);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>         ws=lams;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>       }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>       ws=lams;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>     }</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span> </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>                                              <span class="stringliteral">"sinfoni.sinfo_utl_cube2ima.we"</span>));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     <span class="keywordflow">if</span>(we != cpl_parameter_get_default_double(param)) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>       <span class="keywordflow">if</span> (we > lame) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"we =%f too low set it to %f"</span>,we,lame);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>         we=lame;</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>       }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (we <= lams) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"we =%f too low set it to %f"</span>,we,lame);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         we=lame;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>       }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>       we=lame;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_cub),0),</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>           <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>     <span class="comment">/* recipe's algorithm */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     check_nomsg(cube = cpl_imagelist_load((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>     <span class="keywordflow">if</span>(NULL==(img=sinfo_new_average_cube_to_image_between_waves(cube,wd,wc,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>                                                                 ws,we))) {</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>      <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Cannot average cube to image in wavelength "</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>                      <span class="stringliteral">"range [%f,%f] um"</span>,ws,we) ;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>        sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>        sinfo_free_propertylist(&plist);    </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span> </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span> </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE2IMA_PROIMA)) ;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL), </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>      <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span> </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0) </span></div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>                                        product_frame, </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>                                        framelist, </div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>                                        parlist,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>                                        <span class="stringliteral">"si_sinfo_utl_cube2ima"</span>, </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>                                        KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>                                        product_frame, </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>                                        framelist, </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                                        parlist,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>                                        <span class="stringliteral">"si_sinfo_utl_cube2ima"</span>, </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>                                        <span class="stringliteral">"SINFONI"</span>, </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                                        KEY_VALUE_HPRO_DID),</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span> <span class="preprocessor"></span>   </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CTYPE3"</span>,0));</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRPIX3"</span>,0));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CRVAL3"</span>,0));</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CDELT3"</span>,0));</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>     check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^CUNIT3"</span>,0));</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span> </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     check(cpl_image_save(img, </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>                          name_o, </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>                          CPL_BPP_IEEE_FLOAT, </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>                          plist,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>                          CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     check_nomsg(sinfo_free_propertylist(&plist)) ;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>   </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>     check_nomsg(sinfo_free_image(&img)) ;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>  </div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span> </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>  cleanup:</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>        sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>        sinfo_free_propertylist(&plist);    </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>        sinfo_free_image(&img);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span> </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__cube2spectrum_8c_source.html b/html/sinfoni_2sinfo__utl__cube2spectrum_8c_source.html
index f5030c7..30bbcbc 100644
--- a/html/sinfoni_2sinfo__utl__cube2spectrum_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__cube2spectrum_8c_source.html
@@ -2,488 +2,519 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube2spectrum.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube2spectrum.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube2spectrum.c,v 1.11 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.11 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_utl_cube2spectrum.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_functions.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_globals.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00045"></a>00045 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                            Functions prototypes</span>
-<a name="l00048"></a>00048 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00050"></a>00050 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                            Static variables</span>
-<a name="l00052"></a>00052 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00055"></a>00055 sinfo_change_header(<span class="keyword">const</span> <span class="keywordtype">char</span> * name);
-<a name="l00063"></a>00063 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00064"></a>00064 <span class="comment">                            Function implementation</span>
-<a name="l00065"></a>00065 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 
-<a name="l00067"></a>00067 <span class="keyword">static</span> <span class="keywordtype">int</span>
-<a name="l00068"></a>00068 sinfo_change_header(<span class="keyword">const</span> <span class="keywordtype">char</span> * name) {
-<a name="l00069"></a>00069   <span class="keywordtype">int</span> cenpix=0;
-<a name="l00070"></a>00070   <span class="keywordtype">double</span> cenLambda=0;
-<a name="l00071"></a>00071   <span class="keywordtype">double</span> dispersion=0;
-<a name="l00072"></a>00072   cpl_propertylist* plist=NULL;
-<a name="l00073"></a>00073 
-<a name="l00074"></a>00074   plist=cpl_propertylist_load(name,0);
-<a name="l00075"></a>00075   cenpix = sinfo_pfits_get_crpix3(plist);
-<a name="l00076"></a>00076   cenLambda = sinfo_pfits_get_crval3(plist);
-<a name="l00077"></a>00077   dispersion = sinfo_pfits_get_cdelt3(plist);
-<a name="l00078"></a>00078 
-<a name="l00079"></a>00079   
-<a name="l00080"></a>00080   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"WAVE"</span>),<span class="stringliteral">"Setting CTYPE2"</span>);
-<a name="l00081"></a>00081   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CTYPE2"</span>,
-<a name="l00082"></a>00082                        <span class="stringliteral">"wavelength axis in microns"</span>));
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CRPIX2"</span>,(<span class="keywordtype">double</span>)cenpix),
-<a name="l00085"></a>00085     <span class="stringliteral">"Setting CRPIX2"</span>);
-<a name="l00086"></a>00086   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"Reference pixel"</span>));
-<a name="l00087"></a>00087  
-<a name="l00088"></a>00088   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CRVAL2"</span>,cenLambda),
-<a name="l00089"></a>00089     <span class="stringliteral">"Setting CRVAL2"</span>);
-<a name="l00090"></a>00090   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CRVAL2"</span>,
-<a name="l00091"></a>00091                        <span class="stringliteral">"central wavelength"</span>));
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CDELT2"</span>,dispersion),
-<a name="l00094"></a>00094     <span class="stringliteral">"Setting CDELT2"</span>);
-<a name="l00095"></a>00095   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CDELT2"</span>,
-<a name="l00096"></a>00096                        <span class="stringliteral">"microns per pixel"</span>));
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"um"</span>),<span class="stringliteral">"Setting CUNIT2"</span>); 
-<a name="l00099"></a>00099   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"spectral unit"</span>)); 
-<a name="l00100"></a>00100 
-<a name="l00101"></a>00101   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"ONESPEC"</span>),
-<a name="l00102"></a>00102     <span class="stringliteral">"Setting CTYPE1"</span>);
-<a name="l00103"></a>00103   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CTYPE1"</span>,
-<a name="l00104"></a>00104                        <span class="stringliteral">"one spectrum in y-direction"</span>));
-<a name="l00105"></a>00105 
-<a name="l00106"></a>00106   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRPIX1"</span>)==1) {
-<a name="l00107"></a>00107     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRPIX1"</span>,0),<span class="stringliteral">"Erasing CRPIX1"</span>);
-<a name="l00108"></a>00108   }
-<a name="l00109"></a>00109 
-<a name="l00110"></a>00110   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRVAL1"</span>)==1) {
-<a name="l00111"></a>00111     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRVAL1"</span>,0),<span class="stringliteral">"Erasing CRVAL1"</span>);
-<a name="l00112"></a>00112   }
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CDELT1"</span>)==1) {
-<a name="l00115"></a>00115     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CDELT1"</span>,0),<span class="stringliteral">"Erasing CDELT1"</span>);
-<a name="l00116"></a>00116   }
-<a name="l00117"></a>00117 
-<a name="l00118"></a>00118 
-<a name="l00119"></a>00119   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CUNIT1"</span>)==1) {
-<a name="l00120"></a>00120     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CUNIT1"</span>,0),<span class="stringliteral">"Erasing CUNIT1"</span>);
-<a name="l00121"></a>00121   }
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123 
-<a name="l00124"></a>00124   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CTYPE3"</span>)==1) {
-<a name="l00125"></a>00125     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CTYPE3"</span>,0),<span class="stringliteral">"Erasing CTYPE3"</span>);
-<a name="l00126"></a>00126   }
-<a name="l00127"></a>00127 
-<a name="l00128"></a>00128 
-<a name="l00129"></a>00129   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRPIX3"</span>)==1) {
-<a name="l00130"></a>00130     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRPIX3"</span>,0),<span class="stringliteral">"Erasing CRPIX3"</span>);
-<a name="l00131"></a>00131   }
-<a name="l00132"></a>00132 
-<a name="l00133"></a>00133   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRVAL3"</span>)==1) {
-<a name="l00134"></a>00134     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRVAL3"</span>,0),<span class="stringliteral">"Erasing CRVAL3"</span>);
-<a name="l00135"></a>00135   }
-<a name="l00136"></a>00136 
-<a name="l00137"></a>00137   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CDELT3"</span>)==1) {
-<a name="l00138"></a>00138     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CDELT3"</span>,0),<span class="stringliteral">"Erasing CDELT3"</span>);
-<a name="l00139"></a>00139   }
-<a name="l00140"></a>00140 
-<a name="l00141"></a>00141   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CUNIT3"</span>)==1) {
-<a name="l00142"></a>00142     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CUNIT3"</span>,0),<span class="stringliteral">"Erasing CUNIT3"</span>);
-<a name="l00143"></a>00143   }
-<a name="l00144"></a>00144 
-<a name="l00145"></a>00145 
-<a name="l00146"></a>00146   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD1_1"</span>)==1) {
-<a name="l00147"></a>00147     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD1_1"</span>,0),<span class="stringliteral">"Erasing CD1_1"</span>);
-<a name="l00148"></a>00148   }
-<a name="l00149"></a>00149 
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD1_2"</span>)==1) {
-<a name="l00152"></a>00152     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD1_2"</span>,0),<span class="stringliteral">"Erasing CD1_2"</span>);
-<a name="l00153"></a>00153   }
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD2_1"</span>)==1) {
-<a name="l00156"></a>00156     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD2_1"</span>,0),<span class="stringliteral">"Erasing CD2_1"</span>);
-<a name="l00157"></a>00157   }
-<a name="l00158"></a>00158 
-<a name="l00159"></a>00159   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD2_2"</span>)==1) {
-<a name="l00160"></a>00160     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD2_2"</span>,0),<span class="stringliteral">"Erasing CD2_2"</span>);
-<a name="l00161"></a>00161   }
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163  cleanup:
-<a name="l00164"></a>00164   sinfo_free_propertylist(&plist);
-<a name="l00165"></a>00165 
-<a name="l00166"></a>00166    <span class="comment">/* Return */</span>
-<a name="l00167"></a>00167     <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00168"></a>00168         <span class="keywordflow">return</span> -1 ;
-<a name="l00169"></a>00169     <span class="keywordflow">else</span> 
-<a name="l00170"></a>00170         <span class="keywordflow">return</span> 0 ;
-<a name="l00171"></a>00171 
-<a name="l00172"></a>00172 }
-<a name="l00173"></a>00173 
-<a name="l00174"></a>00174 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00182"></a>00182 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00183"></a>00183 <span class="keywordtype">int</span> sinfo_utl_cube2spectrum(
-<a name="l00184"></a>00184         cpl_parameterlist   *   parlist, 
-<a name="l00185"></a>00185         cpl_frameset        *   framelist,
-<a name="l00186"></a>00186          <span class="keyword">const</span> <span class="keywordtype">char</span>* tag)
-<a name="l00187"></a>00187 {
-<a name="l00188"></a>00188     cpl_parameter       *   param =NULL;
-<a name="l00189"></a>00189     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation =NULL;
-<a name="l00190"></a>00190     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   aperture =NULL;
-<a name="l00191"></a>00191     <span class="keywordtype">char</span>  name_i [MAX_NAME_SIZE];
-<a name="l00192"></a>00192     <span class="keywordtype">int</span>                    llx=0;
-<a name="l00193"></a>00193     <span class="keywordtype">int</span>                    urx=0;
-<a name="l00194"></a>00194     <span class="keywordtype">int</span>                    lly=0;
-<a name="l00195"></a>00195     <span class="keywordtype">int</span>                    ury=0;
-<a name="l00196"></a>00196     <span class="keywordtype">int</span>                    lo_rej=0;
-<a name="l00197"></a>00197     <span class="keywordtype">int</span>                    hi_rej=0;
-<a name="l00198"></a>00198     <span class="keywordtype">int</span>                    centerx=0;
-<a name="l00199"></a>00199     <span class="keywordtype">int</span>                    centery=0;
-<a name="l00200"></a>00200     <span class="keywordtype">int</span>                    radius=0;
-<a name="l00201"></a>00201     <span class="keywordtype">int</span>                    clx=0;
-<a name="l00202"></a>00202     <span class="keywordtype">int</span>                    cly=0;
-<a name="l00203"></a>00203     
-<a name="l00204"></a>00204     <span class="keywordtype">double</span>                 disp=0;
-<a name="l00205"></a>00205     <span class="keywordtype">double</span>                 cpix=0;
-<a name="l00206"></a>00206     <span class="keywordtype">double</span>                 clam=0;
-<a name="l00207"></a>00207 
-<a name="l00208"></a>00208     cpl_frame           *   frm_cub=NULL;
-<a name="l00209"></a>00209 
-<a name="l00210"></a>00210     <span class="keywordtype">char</span> ima_o[MAX_NAME_SIZE];
-<a name="l00211"></a>00211     <span class="keywordtype">char</span> tbl_o[MAX_NAME_SIZE];
-<a name="l00212"></a>00212     <span class="keywordtype">char</span> tag_i[MAX_NAME_SIZE];
-<a name="l00213"></a>00213     <span class="keywordtype">char</span> tag_o[MAX_NAME_SIZE];
-<a name="l00214"></a>00214     cpl_propertylist    *   plist =NULL;
-<a name="l00215"></a>00215     cpl_image           *   image =NULL;
-<a name="l00216"></a>00216     cpl_frame           *   product_frame=NULL;
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     cpl_image * im_spec=NULL;
-<a name="l00219"></a>00219     cpl_table * tbl_spec=NULL;
-<a name="l00220"></a>00220     cpl_image * img=NULL;
-<a name="l00221"></a>00221     cpl_imagelist  * cube=NULL;
-<a name="l00222"></a>00222     Vector * spec=NULL;
-<a name="l00223"></a>00223     <span class="comment">/*fits_header* head=NULL; */</span>
-<a name="l00224"></a>00224 
-<a name="l00225"></a>00225      <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00226"></a>00226     <span class="comment">/* --stropt */</span>
-<a name="l00227"></a>00227     check_nomsg(param=cpl_parameterlist_find(parlist, 
-<a name="l00228"></a>00228                                          <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.op"</span>));
-<a name="l00229"></a>00229     check_nomsg(operation=cpl_parameter_get_string(param));
-<a name="l00230"></a>00230  
-<a name="l00231"></a>00231     <span class="comment">/* --stropt */</span>
-<a name="l00232"></a>00232     check_nomsg(param=cpl_parameterlist_find(parlist, 
-<a name="l00233"></a>00233                                          <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ap"</span>));
-<a name="l00234"></a>00234     check_nomsg(aperture=cpl_parameter_get_string(param));
-<a name="l00235"></a>00235      <span class="comment">/* --stropt */</span>
-<a name="l00236"></a>00236 
-<a name="l00237"></a>00237  
-<a name="l00238"></a>00238     <span class="keywordflow">if</span> (tag == NULL) {
-<a name="l00239"></a>00239       strcpy(ima_o,<span class="stringliteral">"out_spec_ima.fits"</span>);
-<a name="l00240"></a>00240       strcpy(tbl_o,<span class="stringliteral">"out_spec_tbl.fits"</span>);
-<a name="l00241"></a>00241       strcpy(tag_i,SI_UTL_CUBE2SPECTRUM_CUBE);
-<a name="l00242"></a>00242       strcpy(tag_o,SI_UTL_CUBE2SPECTRUM_PROIMA);
-<a name="l00243"></a>00243     } <span class="keywordflow">else</span> {
-<a name="l00244"></a>00244       snprintf(ima_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_spec_ima.fits"</span>);
-<a name="l00245"></a>00245       snprintf(tbl_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_spec_tbl.fits"</span>);
-<a name="l00246"></a>00246       snprintf(tag_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_SPCT"</span>);
-<a name="l00247"></a>00247       strcpy(tag_i,  tag);
-<a name="l00248"></a>00248     }
-<a name="l00249"></a>00249  
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251     <span class="comment">/* --intopt */</span>
-<a name="l00252"></a>00252     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00253"></a>00253                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.llx"</span>));
-<a name="l00254"></a>00254     check_nomsg(llx=cpl_parameter_get_int(param));
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     <span class="comment">/* --intopt */</span>
-<a name="l00257"></a>00257     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00258"></a>00258                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lly"</span>));
-<a name="l00259"></a>00259     check_nomsg(lly=cpl_parameter_get_int(param));
-<a name="l00260"></a>00260 
-<a name="l00261"></a>00261     <span class="comment">/* --intopt */</span>
-<a name="l00262"></a>00262     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00263"></a>00263                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.urx"</span>));
-<a name="l00264"></a>00264     check_nomsg(urx=cpl_parameter_get_int(param));
-<a name="l00265"></a>00265 
-<a name="l00266"></a>00266     <span class="comment">/* --intopt */</span>
-<a name="l00267"></a>00267     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00268"></a>00268                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ury"</span>));
-<a name="l00269"></a>00269     check_nomsg(ury=cpl_parameter_get_int(param));
-<a name="l00270"></a>00270 
-<a name="l00271"></a>00271     <span class="comment">/* --intopt */</span>
-<a name="l00272"></a>00272     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00273"></a>00273                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lo_rej"</span>));
-<a name="l00274"></a>00274     check_nomsg(lo_rej=cpl_parameter_get_int(param));
-<a name="l00275"></a>00275 
-<a name="l00276"></a>00276     <span class="comment">/* --intopt */</span>
-<a name="l00277"></a>00277     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00278"></a>00278                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.hi_rej"</span>));
-<a name="l00279"></a>00279     check_nomsg(hi_rej=cpl_parameter_get_int(param));
-<a name="l00280"></a>00280 
-<a name="l00281"></a>00281     <span class="comment">/* --intopt */</span>
-<a name="l00282"></a>00282     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00283"></a>00283                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centerx"</span>));
-<a name="l00284"></a>00284     check_nomsg(centerx=cpl_parameter_get_int(param));
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286     <span class="comment">/* --intopt */</span>
-<a name="l00287"></a>00287     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00288"></a>00288                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centery"</span>));
-<a name="l00289"></a>00289     check_nomsg(centery=cpl_parameter_get_int(param));
-<a name="l00290"></a>00290 
-<a name="l00291"></a>00291     <span class="comment">/* --intopt */</span>
-<a name="l00292"></a>00292     check_nomsg(param=cpl_parameterlist_find(parlist,
-<a name="l00293"></a>00293                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.radius"</span>));
-<a name="l00294"></a>00294     check_nomsg(radius=cpl_parameter_get_int(param));
-<a name="l00295"></a>00295   
-<a name="l00296"></a>00296     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00297"></a>00297     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {
-<a name="l00298"></a>00298         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00299"></a>00299         <span class="keywordflow">goto</span> cleanup;
-<a name="l00300"></a>00300     }
-<a name="l00301"></a>00301 
-<a name="l00302"></a>00302     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00303"></a>00303     cknull(frm_cub=cpl_frameset_find(framelist,tag_i),
-<a name="l00304"></a>00304       <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,tag_i);
-<a name="l00305"></a>00305    
-<a name="l00306"></a>00306     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00307"></a>00307     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00308"></a>00308     check_nomsg(strcpy(name_i,cpl_frame_get_filename(frm_cub)));
-<a name="l00309"></a>00309     check_nomsg(cube = cpl_imagelist_load((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0));
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311     check_nomsg(img=cpl_imagelist_get(cube,0));
-<a name="l00312"></a>00312     check_nomsg(clx=cpl_image_get_size_x(img));
-<a name="l00313"></a>00313     check_nomsg(cly=cpl_image_get_size_y(img));
-<a name="l00314"></a>00314     check(plist=cpl_propertylist_load(name_i,0),
-<a name="l00315"></a>00315       <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00316"></a>00316 
-<a name="l00317"></a>00317     cpix = (double) sinfo_pfits_get_crpix3(plist);
-<a name="l00318"></a>00318     clam = (double) sinfo_pfits_get_crval3(plist);
-<a name="l00319"></a>00319     disp = (double) sinfo_pfits_get_cdelt3(plist);
-<a name="l00320"></a>00320     sinfo_free_propertylist(&plist);
-<a name="l00321"></a>00321     <span class="keywordflow">if</span>(strcmp(aperture,<span class="stringliteral">"rectangle"</span>) ==0) {
-<a name="l00322"></a>00322       <span class="keywordflow">if</span> (llx<0) {
-<a name="l00323"></a>00323         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"llx=%d too low set it to 0"</span>,llx);
-<a name="l00324"></a>00324         llx=0;
-<a name="l00325"></a>00325       }   
-<a name="l00326"></a>00326       <span class="keywordflow">if</span> (lly<0) {
-<a name="l00327"></a>00327         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"lly=%d too low set it to 0"</span>,lly);
-<a name="l00328"></a>00328         lly=0;
-<a name="l00329"></a>00329       }   
-<a name="l00330"></a>00330       <span class="keywordflow">if</span> (urx>clx-1) {
-<a name="l00331"></a>00331         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"urx=%d too large set it to %d"</span>,urx,clx-1);
-<a name="l00332"></a>00332         urx=clx-1;
-<a name="l00333"></a>00333       }   
-<a name="l00334"></a>00334       <span class="keywordflow">if</span> (ury>cly-1) {
-<a name="l00335"></a>00335         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ury=%d too large set it to %d"</span>,ury,cly-1);
-<a name="l00336"></a>00336         ury=cly-1;
-<a name="l00337"></a>00337       }   
-<a name="l00338"></a>00338       <span class="keywordflow">if</span>(llx>=urx) {
-<a name="l00339"></a>00339         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"llx>=urx!"</span>);
-<a name="l00340"></a>00340         <span class="keywordflow">goto</span> cleanup;
-<a name="l00341"></a>00341       }
-<a name="l00342"></a>00342       <span class="keywordflow">if</span>(lly>=ury) {
-<a name="l00343"></a>00343         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lly>=ury!"</span>);
-<a name="l00344"></a>00344         <span class="keywordflow">goto</span> cleanup;
-<a name="l00345"></a>00345       }
-<a name="l00346"></a>00346 
-<a name="l00347"></a>00347     } 
-<a name="l00348"></a>00348 
-<a name="l00349"></a>00349     <span class="keywordflow">if</span>(strcmp(aperture,<span class="stringliteral">"circle"</span>) ==0) {
-<a name="l00350"></a>00350       <span class="keywordflow">if</span>((centerx-radius) < 0) {
-<a name="l00351"></a>00351     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centerx-radius<0."</span>);
-<a name="l00352"></a>00352         <span class="keywordflow">goto</span> cleanup;
-<a name="l00353"></a>00353       }
-<a name="l00354"></a>00354 
-<a name="l00355"></a>00355       <span class="keywordflow">if</span>((centery-radius) < 0) {
-<a name="l00356"></a>00356     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centery-radius<0."</span>);
-<a name="l00357"></a>00357         <span class="keywordflow">goto</span> cleanup;
-<a name="l00358"></a>00358       }
-<a name="l00359"></a>00359 
-<a name="l00360"></a>00360       <span class="keywordflow">if</span>((centerx+radius) >= clx) {
-<a name="l00361"></a>00361     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centerx+radius >= cube x sixe"</span>);
-<a name="l00362"></a>00362         <span class="keywordflow">goto</span> cleanup;
-<a name="l00363"></a>00363       }
-<a name="l00364"></a>00364 
-<a name="l00365"></a>00365       <span class="keywordflow">if</span>((centery+radius) >= cly) {
-<a name="l00366"></a>00366     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centery+radius >= cube y size."</span>);
-<a name="l00367"></a>00367         <span class="keywordflow">goto</span> cleanup;
-<a name="l00368"></a>00368       }
-<a name="l00369"></a>00369 
-<a name="l00370"></a>00370       <span class="keywordflow">if</span>((radius) < 0) {
-<a name="l00371"></a>00371     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set radius<0."</span>);
-<a name="l00372"></a>00372         <span class="keywordflow">goto</span> cleanup;
-<a name="l00373"></a>00373       }
-<a name="l00374"></a>00374 
-<a name="l00375"></a>00375     }
-<a name="l00376"></a>00376 
-<a name="l00377"></a>00377     <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"average"</span>) ==0) {
-<a name="l00378"></a>00378        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>) ==0) {
-<a name="l00379"></a>00379           spec = sinfo_new_mean_rectangle_of_cube_spectra(cube,llx,lly,urx,ury);
-<a name="l00380"></a>00380        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {
-<a name="l00381"></a>00381           spec = sinfo_new_mean_circle_of_cube_spectra(cube,centerx,
-<a name="l00382"></a>00382                                                        centery,radius);
-<a name="l00383"></a>00383        } <span class="keywordflow">else</span> {
-<a name="l00384"></a>00384           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);
-<a name="l00385"></a>00385           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);
-<a name="l00386"></a>00386           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);
-<a name="l00387"></a>00387         <span class="keywordflow">goto</span> cleanup;
-<a name="l00388"></a>00388        }
-<a name="l00389"></a>00389     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"clean_mean"</span>) ==0) {
-<a name="l00390"></a>00390       <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>) == 0) {
-<a name="l00391"></a>00391           spec = sinfo_new_clean_mean_rectangle_of_cube_spectra(cube,llx,lly,
-<a name="l00392"></a>00392                                                                 urx,ury,
-<a name="l00393"></a>00393                                                                 lo_rej,hi_rej);
-<a name="l00394"></a>00394       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {
-<a name="l00395"></a>00395           spec = sinfo_new_clean_mean_circle_of_cube_spectra(cube,centerx,
-<a name="l00396"></a>00396                                                              centery,radius,
-<a name="l00397"></a>00397                                                              lo_rej,hi_rej); 
-<a name="l00398"></a>00398       } <span class="keywordflow">else</span> {
-<a name="l00399"></a>00399           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);
-<a name="l00400"></a>00400           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);
-<a name="l00401"></a>00401           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);
-<a name="l00402"></a>00402           <span class="keywordflow">goto</span> cleanup;
-<a name="l00403"></a>00403       }
-<a name="l00404"></a>00404     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"median"</span>) ==0) {
-<a name="l00405"></a>00405        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {
-<a name="l00406"></a>00406           spec = sinfo_new_median_rectangle_of_cube_spectra(cube,llx,lly,
-<a name="l00407"></a>00407                                                             urx,ury);
-<a name="l00408"></a>00408        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {
-<a name="l00409"></a>00409           spec = sinfo_new_median_circle_of_cube_spectra(cube,centerx,
-<a name="l00410"></a>00410                                                          centery,radius);
-<a name="l00411"></a>00411        } <span class="keywordflow">else</span> {
-<a name="l00412"></a>00412           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);
-<a name="l00413"></a>00413           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);
-<a name="l00414"></a>00414           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);
-<a name="l00415"></a>00415           <span class="keywordflow">goto</span> cleanup;
-<a name="l00416"></a>00416        }
-<a name="l00417"></a>00417     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"sum"</span>) ==0) {
-<a name="l00418"></a>00418        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {
-<a name="l00419"></a>00419           spec = sinfo_new_sum_rectangle_of_cube_spectra(cube,llx,lly,urx,ury);
-<a name="l00420"></a>00420        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {
-<a name="l00421"></a>00421           spec = sinfo_new_sum_circle_of_cube_spectra(cube,centerx,
-<a name="l00422"></a>00422                                                       centery,radius);
-<a name="l00423"></a>00423        } <span class="keywordflow">else</span> {
-<a name="l00424"></a>00424           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);
-<a name="l00425"></a>00425           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);
-<a name="l00426"></a>00426           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);
-<a name="l00427"></a>00427           <span class="keywordflow">goto</span> cleanup;
-<a name="l00428"></a>00428        }
-<a name="l00429"></a>00429     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"extract"</span>) == 0) {
-<a name="l00430"></a>00430        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {
-<a name="l00431"></a>00431       spec = sinfo_new_median_rectangle_of_cube_spectra(cube,llx,lly,
-<a name="l00432"></a>00432                                                             urx,ury); 
-<a name="l00433"></a>00433        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {
-<a name="l00434"></a>00434      spec = sinfo_new_median_circle_of_cube_spectra(cube,centerx,
-<a name="l00435"></a>00435                                                         centery,radius);
-<a name="l00436"></a>00436        } <span class="keywordflow">else</span> {
-<a name="l00437"></a>00437           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);
-<a name="l00438"></a>00438           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);
-<a name="l00439"></a>00439           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);
-<a name="l00440"></a>00440           <span class="keywordflow">goto</span> cleanup;
-<a name="l00441"></a>00441        }
-<a name="l00442"></a>00442     } <span class="keywordflow">else</span> {
-<a name="l00443"></a>00443       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation not supported"</span>);
-<a name="l00444"></a>00444       sinfo_msg(<span class="stringliteral">"Supported operations are only:"</span>);
-<a name="l00445"></a>00445       sinfo_msg(<span class="stringliteral">"average, clean_mean, median, sum, extract :"</span>);
-<a name="l00446"></a>00446       <span class="keywordflow">goto</span> cleanup;
-<a name="l00447"></a>00447     }
-<a name="l00448"></a>00448     im_spec = sinfo_new_vector_to_image(spec);
-<a name="l00449"></a>00449     <span class="comment">/* head = sinfo_fits_read_header((char*)name_i); */</span>
-<a name="l00450"></a>00450     sinfo_msg(<span class="stringliteral">"name_i=%s"</span>,name_i);
-<a name="l00451"></a>00451     ck0_nomsg(sinfo_change_header(name_i));
-<a name="l00452"></a>00452 
-<a name="l00453"></a>00453     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00454"></a>00454     <span class="comment">/* Set the file name */</span>
-<a name="l00455"></a>00455  
-<a name="l00456"></a>00456     <span class="comment">/* Create product frame */</span>
-<a name="l00457"></a>00457     ck0(sinfo_pro_save_ima(im_spec,framelist,framelist,ima_o,
-<a name="l00458"></a>00458                tag_o,NULL,cpl_func,parlist),<span class="stringliteral">"failed to save ima"</span>);
-<a name="l00459"></a>00459 
-<a name="l00460"></a>00460 
-<a name="l00461"></a>00461     sinfo_new_set_wcs_spectrum (im_spec,ima_o,clam, disp, cpix);
-<a name="l00462"></a>00462 
-<a name="l00463"></a>00463     sinfo_stectrum_ima2table(im_spec,ima_o,&tbl_spec);
-<a name="l00464"></a>00464      ck0(sinfo_pro_save_tbl(tbl_spec,framelist,framelist,tbl_o,
-<a name="l00465"></a>00465                tag_o,NULL,cpl_func,parlist),
-<a name="l00466"></a>00466                            <span class="stringliteral">"failed to save spectrum"</span>);
-<a name="l00467"></a>00467 
-<a name="l00468"></a>00468  cleanup:
-<a name="l00469"></a>00469     sinfo_free_propertylist(&plist) ;
-<a name="l00470"></a>00470     sinfo_free_frame(&product_frame) ;
-<a name="l00471"></a>00471     sinfo_free_image(&image) ;
-<a name="l00472"></a>00472     sinfo_free_imagelist(&cube);
-<a name="l00473"></a>00473     sinfo_free_image(&im_spec);
-<a name="l00474"></a>00474     <span class="comment">/* This generate seg fault</span>
-<a name="l00475"></a>00475 <span class="comment">    if(spec != NULL) sinfo_free_svector(&spec);</span>
-<a name="l00476"></a>00476 <span class="comment">    */</span>
-<a name="l00477"></a>00477     sinfo_free_table(&tbl_spec);
-<a name="l00478"></a>00478     <span class="comment">/*if(head != NULL) sinfo_fits_header_destroy(head); */</span>
-<a name="l00479"></a>00479  
-<a name="l00480"></a>00480     <span class="comment">/* Return */</span>
-<a name="l00481"></a>00481     <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00482"></a>00482         <span class="keywordflow">return</span> -1 ;
-<a name="l00483"></a>00483     <span class="keywordflow">else</span> 
-<a name="l00484"></a>00484         <span class="keywordflow">return</span> 0 ;
-<a name="l00485"></a>00485 
-<a name="l00486"></a>00486 
-<a name="l00487"></a>00487 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_cube2spectrum.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube2spectrum.c,v 1.11 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.11 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_utl_cube2spectrum.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_functions.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_globals.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> sinfo_change_header(<span class="keyword">const</span> <span class="keywordtype">char</span> * name);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">                            Function implementation</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span> sinfo_change_header(<span class="keyword">const</span> <span class="keywordtype">char</span> * name) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>   <span class="keywordtype">int</span> cenpix=0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>   <span class="keywordtype">double</span> cenLambda=0;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>   <span class="keywordtype">double</span> dispersion=0;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>   cpl_propertylist* plist=NULL;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>   plist=cpl_propertylist_load(name,0);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>   cenpix = sinfo_pfits_get_crpix3(plist);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>   cenLambda = sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>   dispersion = sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span> </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>   </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CTYPE2"</span>,<span class="stringliteral">"WAVE"</span>),<span class="stringliteral">"Setting CTYPE2"</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CTYPE2"</span>,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>                        <span class="stringliteral">"wavelength axis in microns"</span>));</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CRPIX2"</span>,(<span class="keywordtype">double</span>)cenpix),</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     <span class="stringliteral">"Setting CRPIX2"</span>);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CRPIX2"</span>,<span class="stringliteral">"Reference pixel"</span>));</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>  </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CRVAL2"</span>,cenLambda),</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="stringliteral">"Setting CRVAL2"</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CRVAL2"</span>,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>                        <span class="stringliteral">"central wavelength"</span>));</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>   check(cpl_propertylist_set_double(plist,<span class="stringliteral">"CDELT2"</span>,dispersion),</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="stringliteral">"Setting CDELT2"</span>);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CDELT2"</span>,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>                        <span class="stringliteral">"microns per pixel"</span>));</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"um"</span>),<span class="stringliteral">"Setting CUNIT2"</span>); </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CUNIT2"</span>,<span class="stringliteral">"spectral unit"</span>)); </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span> </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>   check(cpl_propertylist_set_string(plist,<span class="stringliteral">"CTYPE1"</span>,<span class="stringliteral">"ONESPEC"</span>),</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="stringliteral">"Setting CTYPE1"</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>   check_nomsg(cpl_propertylist_set_comment(plist,<span class="stringliteral">"CTYPE1"</span>,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>                        <span class="stringliteral">"one spectrum in y-direction"</span>));</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span> </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRPIX1"</span>)==1) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRPIX1"</span>,0),<span class="stringliteral">"Erasing CRPIX1"</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span> </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRVAL1"</span>)==1) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRVAL1"</span>,0),<span class="stringliteral">"Erasing CRVAL1"</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>   }</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CDELT1"</span>)==1) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CDELT1"</span>,0),<span class="stringliteral">"Erasing CDELT1"</span>);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>   }</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span> </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span> </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CUNIT1"</span>)==1) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CUNIT1"</span>,0),<span class="stringliteral">"Erasing CUNIT1"</span>);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>   }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span> </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CTYPE3"</span>)==1) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CTYPE3"</span>,0),<span class="stringliteral">"Erasing CTYPE3"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>   }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span> </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span> </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRPIX3"</span>)==1) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRPIX3"</span>,0),<span class="stringliteral">"Erasing CRPIX3"</span>);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span> </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CRVAL3"</span>)==1) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CRVAL3"</span>,0),<span class="stringliteral">"Erasing CRVAL3"</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>   }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CDELT3"</span>)==1) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CDELT3"</span>,0),<span class="stringliteral">"Erasing CDELT3"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>   }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CUNIT3"</span>)==1) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CUNIT3"</span>,0),<span class="stringliteral">"Erasing CUNIT3"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>   }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span> </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD1_1"</span>)==1) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD1_1"</span>,0),<span class="stringliteral">"Erasing CD1_1"</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>   }</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span> </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD1_2"</span>)==1) {</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD1_2"</span>,0),<span class="stringliteral">"Erasing CD1_2"</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>   }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD2_1"</span>)==1) {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD2_1"</span>,0),<span class="stringliteral">"Erasing CD2_1"</span>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>   }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>   <span class="keywordflow">if</span>(cpl_propertylist_has(plist,<span class="stringliteral">"CD2_2"</span>)==1) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     check(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"CD2_2"</span>,0),<span class="stringliteral">"Erasing CD2_2"</span>);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>   }</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>  cleanup:</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>   sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span> </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span> </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> <span class="keywordtype">int</span> sinfo_utl_cube2spectrum(</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         cpl_frameset        *   framelist,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>          <span class="keyword">const</span> <span class="keywordtype">char</span>* tag)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> {</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     cpl_parameter       *   param =NULL;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation =NULL;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   aperture =NULL;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     <span class="keywordtype">char</span>  name_i [MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>     <span class="keywordtype">int</span>                    llx=0;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     <span class="keywordtype">int</span>                    urx=0;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordtype">int</span>                    lly=0;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     <span class="keywordtype">int</span>                    ury=0;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>     <span class="keywordtype">int</span>                    lo_rej=0;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     <span class="keywordtype">int</span>                    hi_rej=0;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     <span class="keywordtype">int</span>                    centerx=0;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>     <span class="keywordtype">int</span>                    centery=0;</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     <span class="keywordtype">int</span>                    radius=0;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     <span class="keywordtype">int</span>                    clx=0;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>     <span class="keywordtype">int</span>                    cly=0;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>     </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     <span class="keywordtype">double</span>                 disp=0;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>     <span class="keywordtype">double</span>                 cpix=0;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>     <span class="keywordtype">double</span>                 clam=0;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span> </div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>     cpl_frame           *   frm_cub=NULL;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span> </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     <span class="keywordtype">char</span> ima_o[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordtype">char</span> tbl_o[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     <span class="keywordtype">char</span> tag_i[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>     <span class="keywordtype">char</span> tag_o[MAX_NAME_SIZE];</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>     cpl_propertylist    *   plist =NULL;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     cpl_image           *   image =NULL;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cpl_image * im_spec=NULL;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     cpl_table * tbl_spec=NULL;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>     cpl_image * img=NULL;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>     cpl_imagelist  * cube=NULL;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>     Vector * spec=NULL;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>     <span class="comment">/*fits_header* head=NULL; */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span> </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>      <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>     check_nomsg(param=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                                          <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.op"</span>));</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>     check_nomsg(operation=cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>  </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     check_nomsg(param=cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>                                          <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ap"</span>));</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>     check_nomsg(aperture=cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>      <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span> </div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     <span class="keywordflow">if</span> (tag == NULL) {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>       strcpy(ima_o,<span class="stringliteral">"out_spec_ima.fits"</span>);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>       strcpy(tbl_o,<span class="stringliteral">"out_spec_tbl.fits"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>       strcpy(tag_i,SI_UTL_CUBE2SPECTRUM_CUBE);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>       strcpy(tag_o,SI_UTL_CUBE2SPECTRUM_PROIMA);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>       snprintf(ima_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_spec_ima.fits"</span>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       snprintf(tbl_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_spec_tbl.fits"</span>);</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       snprintf(tag_o,MAX_NAME_SIZE-1,<span class="stringliteral">"%s%s"</span>,tag,<span class="stringliteral">"_SPCT"</span>);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       strcpy(tag_i,  tag);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>     }</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>  </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.llx"</span>));</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>     check_nomsg(llx=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lly"</span>));</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     check_nomsg(lly=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span> </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.urx"</span>));</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>     check_nomsg(urx=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span> </div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>                                     <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.ury"</span>));</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>     check_nomsg(ury=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span> </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.lo_rej"</span>));</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>     check_nomsg(lo_rej=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span> </div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.hi_rej"</span>));</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>     check_nomsg(hi_rej=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span> </div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centerx"</span>));</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>     check_nomsg(centerx=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.centery"</span>));</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>     check_nomsg(centery=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span> </div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>     <span class="comment">/* --intopt */</span></div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>     check_nomsg(param=cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_cube2spectrum.radius"</span>));</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>     check_nomsg(radius=cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>   </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>     <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>     <span class="keywordflow">if</span> (sinfo_dfs_set_groups(framelist)) {</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>( <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>     }</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span> </div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>     cknull(frm_cub=cpl_frameset_find(framelist,tag_i),</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>       <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,tag_i);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>    </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>     check_nomsg(strcpy(name_i,cpl_frame_get_filename(frm_cub)));</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>     check_nomsg(cube = cpl_imagelist_load((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     check_nomsg(img=cpl_imagelist_get(cube,0));</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>     check_nomsg(clx=cpl_image_get_size_x(img));</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>     check_nomsg(cly=cpl_image_get_size_y(img));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     check(plist=cpl_propertylist_load(name_i,0),</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>       <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span> </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     cpix = (double) sinfo_pfits_get_crpix3(plist);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     clam = (double) sinfo_pfits_get_crval3(plist);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     disp = (double) sinfo_pfits_get_cdelt3(plist);</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>     <span class="keywordflow">if</span>(strcmp(aperture,<span class="stringliteral">"rectangle"</span>) ==0) {</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>       <span class="keywordflow">if</span> (llx<0) {</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"llx=%d too low set it to 0"</span>,llx);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>         llx=0;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>       }   </div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>       <span class="keywordflow">if</span> (lly<0) {</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"lly=%d too low set it to 0"</span>,lly);</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>         lly=0;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       }   </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>       <span class="keywordflow">if</span> (urx>clx-1) {</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"urx=%d too large set it to %d"</span>,urx,clx-1);</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>         urx=clx-1;</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>       }   </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>       <span class="keywordflow">if</span> (ury>cly-1) {</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>         <a class="code" href="group__sinfo__msg.html#ga885dfc1c23dbdf3ea2051b42341a52a6" title="Print an warning message.">sinfo_msg_warning</a>(<span class="stringliteral">"ury=%d too large set it to %d"</span>,ury,cly-1);</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>         ury=cly-1;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>       }   </div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>       <span class="keywordflow">if</span>(llx>=urx) {</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"llx>=urx!"</span>);</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>       }</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>       <span class="keywordflow">if</span>(lly>=ury) {</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>         <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"lly>=ury!"</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>       }</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span> </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>     } </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span> </div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>     <span class="keywordflow">if</span>(strcmp(aperture,<span class="stringliteral">"circle"</span>) ==0) {</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>       <span class="keywordflow">if</span>((centerx-radius) < 0) {</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centerx-radius<0."</span>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>       }</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span> </div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>       <span class="keywordflow">if</span>((centery-radius) < 0) {</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centery-radius<0."</span>);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>       }</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span> </div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>       <span class="keywordflow">if</span>((centerx+radius) >= clx) {</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centerx+radius >= cube x sixe"</span>);</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>       }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span> </div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>       <span class="keywordflow">if</span>((centery+radius) >= cly) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set centery+radius >= cube y size."</span>);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>       }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span> </div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>       <span class="keywordflow">if</span>((radius) < 0) {</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"It is not possible to set radius<0."</span>);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>       }</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span> </div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>     }</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span> </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"average"</span>) ==0) {</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>) ==0) {</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>           spec = sinfo_new_mean_rectangle_of_cube_spectra(cube,llx,lly,urx,ury);</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>           spec = sinfo_new_mean_circle_of_cube_spectra(cube,centerx,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>                                                        centery,radius);</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>         <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>        }</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"clean_mean"</span>) ==0) {</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>       <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>) == 0) {</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>           spec = sinfo_new_clean_mean_rectangle_of_cube_spectra(cube,llx,lly,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>                                                                 urx,ury,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>                                                                 lo_rej,hi_rej);</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>           spec = sinfo_new_clean_mean_circle_of_cube_spectra(cube,centerx,</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>                                                              centery,radius,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>                                                              lo_rej,hi_rej); </div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>       }</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"median"</span>) ==0) {</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>           spec = sinfo_new_median_rectangle_of_cube_spectra(cube,llx,lly,</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>                                                             urx,ury);</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>           spec = sinfo_new_median_circle_of_cube_spectra(cube,centerx,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>                                                          centery,radius);</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>        }</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"sum"</span>) ==0) {</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>           spec = sinfo_new_sum_rectangle_of_cube_spectra(cube,llx,lly,urx,ury);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>           spec = sinfo_new_sum_circle_of_cube_spectra(cube,centerx,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>                                                       centery,radius);</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>        }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"extract"</span>) == 0) {</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>        <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"rectangle"</span>)==0) {</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>       spec = sinfo_new_median_rectangle_of_cube_spectra(cube,llx,lly,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>                                                             urx,ury); </div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(aperture,<span class="stringliteral">"circle"</span>)==0) {</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>      spec = sinfo_new_median_circle_of_cube_spectra(cube,centerx,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>                                                         centery,radius);</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Aperture not supported"</span>);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>           sinfo_msg(<span class="stringliteral">"Supported apertures are only:"</span>);</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>           sinfo_msg(<span class="stringliteral">"rectangle, circle:"</span>);</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>        }</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>     } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Operation not supported"</span>);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>       sinfo_msg(<span class="stringliteral">"Supported operations are only:"</span>);</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>       sinfo_msg(<span class="stringliteral">"average, clean_mean, median, sum, extract :"</span>);</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>       <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>     }</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>     im_spec = sinfo_new_vector_to_image(spec);</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>     <span class="comment">/* head = sinfo_fits_read_header((char*)name_i); */</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>     sinfo_msg(<span class="stringliteral">"name_i=%s"</span>,name_i);</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>     ck0_nomsg(sinfo_change_header(name_i));</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span> </div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>  </div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>     ck0(sinfo_pro_save_ima(im_spec,framelist,framelist,ima_o,</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>                tag_o,NULL,cpl_func,parlist),<span class="stringliteral">"failed to save ima"</span>);</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span> </div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span> </div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>     sinfo_new_set_wcs_spectrum (im_spec,ima_o,clam, disp, cpix);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span> </div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>     sinfo_stectrum_ima2table(im_spec,ima_o,&tbl_spec);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>      ck0(sinfo_pro_save_tbl(tbl_spec,framelist,framelist,tbl_o,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>                tag_o,NULL,cpl_func,parlist),</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>                            <span class="stringliteral">"failed to save spectrum"</span>);</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span> </div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>  cleanup:</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>     sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>     sinfo_free_frame(&product_frame) ;</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>     sinfo_free_image(&image) ;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>     sinfo_free_imagelist(&cube);</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>     sinfo_free_image(&im_spec);</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>     <span class="comment">/* This generate seg fault</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span> <span class="comment">    if(spec != NULL) sinfo_free_svector(&spec);</span></div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>     sinfo_free_table(&tbl_spec);</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>     <span class="comment">/*if(head != NULL) sinfo_fits_header_destroy(head); */</span></div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>  </div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span> </div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span> </div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__cube__arith_8c_source.html b/html/sinfoni_2sinfo__utl__cube__arith_8c_source.html
index 531f45b..b19c126 100644
--- a/html/sinfoni_2sinfo__utl__cube__arith_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__cube__arith_8c_source.html
@@ -2,332 +2,363 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_arith.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_arith.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_arith.c,v 1.14 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.14 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_utl_cube_arith.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include <sinfo_spectrum_ops.h></span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_new_cube_ops.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_pro_types.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include <sinfo_error.h></span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include <sinfo_utilities.h></span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include <sinfo_utils_wrappers.h></span>
-<a name="l00044"></a>00044 
-<a name="l00045"></a>00045 
-<a name="l00046"></a>00046 
-<a name="l00047"></a>00047 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00048"></a>00048 <span class="comment">                            Functions prototypes</span>
-<a name="l00049"></a>00049 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00050"></a>00050 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00051"></a>00051 <span class="comment">                            Static variables</span>
-<a name="l00052"></a>00052 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00053"></a>00053 
-<a name="l00061"></a>00061 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00062"></a>00062 <span class="comment">                                Functions code</span>
-<a name="l00063"></a>00063 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00064"></a>00064 
-<a name="l00065"></a>00065 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="keywordtype">int</span> sinfo_utl_cube_arith(
-<a name="l00074"></a>00074    cpl_parameterlist   *   parlist, 
-<a name="l00075"></a>00075    cpl_frameset        *   framelist)
-<a name="l00076"></a>00076 {
-<a name="l00077"></a>00077    cpl_parameter       *   param =NULL;
-<a name="l00078"></a>00078    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation =NULL;
-<a name="l00079"></a>00079    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_c =NULL;
-<a name="l00080"></a>00080    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_s =NULL;
-<a name="l00081"></a>00081    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;
-<a name="l00082"></a>00082    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_d =<span class="stringliteral">"start"</span>;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084    <span class="comment">/* double                  temp=0 ; */</span>
-<a name="l00085"></a>00085    <span class="keywordtype">double</span>                  value=0 ;
-<a name="l00086"></a>00086    <span class="keywordtype">double</span>                  def_value=0 ;
-<a name="l00087"></a>00087 
-<a name="l00088"></a>00088    cpl_parameter *         p=NULL;
-<a name="l00089"></a>00089    cpl_frame           *   frm_cube=NULL ;
-<a name="l00090"></a>00090    cpl_frame           *   frm_spct=NULL ;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092    cpl_propertylist    *   plist=NULL ;
-<a name="l00093"></a>00093    cpl_image           *   image=NULL ;
-<a name="l00094"></a>00094    cpl_frame           *   product_frame=NULL;
-<a name="l00095"></a>00095    cpl_imagelist       *   cub_ims=NULL;
-<a name="l00096"></a>00096    cpl_imagelist * cube_i=NULL;
-<a name="l00097"></a>00097    cpl_imagelist * cube_o=NULL;
-<a name="l00098"></a>00098    cpl_imagelist * cube_d=NULL;
-<a name="l00099"></a>00099    cpl_image * std_star=NULL;
-<a name="l00100"></a>00100    Vector * bb=NULL;
-<a name="l00101"></a>00101    Vector*   spectrum=NULL;
-<a name="l00102"></a>00102    cpl_vector* vec=NULL;
-<a name="l00103"></a>00103    <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00104"></a>00104    check(sinfo_dfs_set_groups(framelist),
-<a name="l00105"></a>00105          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00106"></a>00106 
-<a name="l00107"></a>00107  
-<a name="l00108"></a>00108    <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00109"></a>00109    <span class="comment">/* --stropt */</span>
-<a name="l00110"></a>00110    check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00111"></a>00111                                               <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.op"</span>));
-<a name="l00112"></a>00112    check_nomsg(operation = cpl_parameter_get_string(param));
-<a name="l00113"></a>00113    name_o = <span class="stringliteral">"out_cube.fits"</span>;
-<a name="l00114"></a>00114 
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116    <span class="comment">/* --doubleopt */</span>
-<a name="l00117"></a>00117    check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00118"></a>00118                                               <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>));
-<a name="l00119"></a>00119    check_nomsg(value = cpl_parameter_get_double(param));
-<a name="l00120"></a>00120 
-<a name="l00121"></a>00121    <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00122"></a>00122    check(frm_cube = cpl_frameset_find(framelist, SI_UTL_CUBE_ARITH_CUBE),
-<a name="l00123"></a>00123          <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,SI_UTL_CUBE_ARITH_CUBE);
-<a name="l00124"></a>00124     
-<a name="l00125"></a>00125    check_nomsg(name_c = cpl_frame_get_filename(frm_cube));
-<a name="l00126"></a>00126    check_nomsg(p = cpl_parameterlist_find(parlist, 
-<a name="l00127"></a>00127                                           <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>));
-<a name="l00128"></a>00128    check_nomsg(def_value = cpl_parameter_get_default_double(p));
-<a name="l00129"></a>00129    <span class="keywordflow">if</span> (value == def_value) {
-<a name="l00130"></a>00130       <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, 
-<a name="l00131"></a>00131                                         SI_UTL_CUBE_ARITH_SPECTRUM))==NULL) {
-<a name="l00132"></a>00132          sinfo_msg( <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,
-<a name="l00133"></a>00133                     SI_UTL_CUBE_ARITH_SPECTRUM);
-<a name="l00134"></a>00134          cpl_error_reset();
-<a name="l00135"></a>00135       } <span class="keywordflow">else</span> {
-<a name="l00136"></a>00136          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,
-<a name="l00137"></a>00137                     SI_UTL_CUBE_ARITH_SPECTRUM);
-<a name="l00138"></a>00138          name_s = cpl_frame_get_filename(frm_spct);
-<a name="l00139"></a>00139          name_d = <span class="stringliteral">"spectrum"</span>;
-<a name="l00140"></a>00140       }
-<a name="l00141"></a>00141    }
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143    <span class="keywordflow">if</span> (value == def_value) {
-<a name="l00144"></a>00144       <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, PRO_SPECTRUM))!=NULL) {
-<a name="l00145"></a>00145          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,PRO_SPECTRUM);
-<a name="l00146"></a>00146          name_s = cpl_frame_get_filename(frm_spct);
-<a name="l00147"></a>00147          name_d = <span class="stringliteral">"spectrum"</span>;
-<a name="l00148"></a>00148       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, PRO_IMA))!=NULL) {
-<a name="l00149"></a>00149          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,PRO_IMA);
-<a name="l00150"></a>00150          name_s = cpl_frame_get_filename(frm_spct);
-<a name="l00151"></a>00151          name_d = <span class="stringliteral">"image"</span>;
-<a name="l00152"></a>00152       } <span class="keywordflow">else</span> {
-<a name="l00153"></a>00153          sinfo_msg( <span class="stringliteral">"SOF does not contains a file tagged as %s nor as %s"</span>,
-<a name="l00154"></a>00154             PRO_SPECTRUM,PRO_IMA);
-<a name="l00155"></a>00155          sinfo_msg( <span class="stringliteral">"Assume operation by a constant"</span>);
-<a name="l00156"></a>00156          cpl_error_reset();
-<a name="l00157"></a>00157       }
-<a name="l00158"></a>00158    }
-<a name="l00159"></a>00159    check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_cube),0),
-<a name="l00160"></a>00160          <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00161"></a>00161      
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163    <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00164"></a>00164    <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00165"></a>00165    check_nomsg(cube_i= cpl_imagelist_load((<span class="keywordtype">char</span>*)name_c,CPL_TYPE_FLOAT,0));
-<a name="l00166"></a>00166    <span class="keywordflow">if</span> (value == def_value) {
-<a name="l00167"></a>00167       sinfo_msg(<span class="stringliteral">"value equal to default"</span>);
-<a name="l00168"></a>00168       <span class="keywordflow">if</span>( strcmp(name_d,<span class="stringliteral">"spectrum"</span>) == 0 ) {
-<a name="l00169"></a>00169          sinfo_msg(<span class="stringliteral">"Operation by spectrum"</span>);
-<a name="l00170"></a>00170          sinfo_msg(<span class="stringliteral">"loading spectrum image file %s"</span>,name_s);
-<a name="l00171"></a>00171          check_nomsg(std_star=cpl_image_load((<span class="keywordtype">char</span>*)name_s,CPL_TYPE_FLOAT,0,0));
-<a name="l00172"></a>00172 
-<a name="l00173"></a>00173          <span class="comment">//check_nomsg(std_star=sinfo_vector_to_image(vec,CPL_TYPE_FLOAT));</span>
-<a name="l00174"></a>00174          check_nomsg(spectrum  = sinfo_new_image_to_vector(std_star));
-<a name="l00175"></a>00175          <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {
-<a name="l00176"></a>00176             cube_o = sinfo_new_div_cube_by_spectrum (cube_i, spectrum);
-<a name="l00177"></a>00177          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {
-<a name="l00178"></a>00178             cube_o = sinfo_new_sub_spectrum_from_cube(cube_i, spectrum);
-<a name="l00179"></a>00179          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {
-<a name="l00180"></a>00180             cube_o = sinfo_new_add_spectrum_to_cube(cube_i, spectrum);
-<a name="l00181"></a>00181          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {
-<a name="l00182"></a>00182             cube_o = sinfo_new_mul_spectrum_to_cube(cube_i, spectrum);
-<a name="l00183"></a>00183             <span class="comment">/*</span>
-<a name="l00184"></a>00184 <span class="comment">              } else if (strcmp(operation,"calib") == 0) {</span>
-<a name="l00185"></a>00185 <span class="comment">              bb = sinfo_new_blackbody_spectrum ((char*)name_s, temp); </span>
-<a name="l00186"></a>00186 <span class="comment">              cube_d   = sinfo_new_div_cube_by_Spectrum (cube_i, spectrum);</span>
-<a name="l00187"></a>00187 <span class="comment">              cube_o = sinfo_new_mul_spectrum_to_cube(cube_d, bb); </span>
-<a name="l00188"></a>00188 <span class="comment">            */</span>
-<a name="l00189"></a>00189       
-<a name="l00190"></a>00190          } <span class="keywordflow">else</span> {
-<a name="l00191"></a>00191             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);
-<a name="l00192"></a>00192             sinfo_msg(<span class="stringliteral">"If an input spectrum is given and no value is set"</span>);
-<a name="l00193"></a>00193             sinfo_msg(<span class="stringliteral">"operations supported are: `/`,`-`,`+`,'*'"</span>);
-<a name="l00194"></a>00194             <span class="keywordflow">goto</span> cleanup;
-<a name="l00195"></a>00195          }
-<a name="l00196"></a>00196          <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"calib"</span>) == 0) {
-<a name="l00197"></a>00197             <span class="keywordflow">goto</span> cleanup;
-<a name="l00198"></a>00198          }
-<a name="l00199"></a>00199       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strcmp(name_d,<span class="stringliteral">"image"</span>) == 0) {
-<a name="l00200"></a>00200          sinfo_msg(<span class="stringliteral">"Operation by image"</span>);
-<a name="l00201"></a>00201          check_nomsg(std_star=cpl_image_load ((<span class="keywordtype">char</span>*)name_s,
-<a name="l00202"></a>00202                                               CPL_TYPE_FLOAT,0,0));
-<a name="l00203"></a>00203          <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {
-<a name="l00204"></a>00204             cknull(cube_o = sinfo_new_add_image_to_cube(cube_i,std_star),
-<a name="l00205"></a>00205                    <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00206"></a>00206          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {
-<a name="l00207"></a>00207             cknull(cube_o = sinfo_new_sub_image_from_cube(cube_i,std_star),
-<a name="l00208"></a>00208                    <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00209"></a>00209          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {
-<a name="l00210"></a>00210             cknull(cube_o = sinfo_new_mul_image_to_cube(cube_i,std_star),
-<a name="l00211"></a>00211                    <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00212"></a>00212          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {
-<a name="l00213"></a>00213             cknull(cube_o = sinfo_new_div_cube_by_image(cube_i,std_star),
-<a name="l00214"></a>00214                    <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00215"></a>00215          } <span class="keywordflow">else</span> {
-<a name="l00216"></a>00216             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);
-<a name="l00217"></a>00217             sinfo_msg(<span class="stringliteral">"If an input image is set"</span>);
-<a name="l00218"></a>00218             sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);
-<a name="l00219"></a>00219             <span class="keywordflow">goto</span> cleanup;
-<a name="l00220"></a>00220          }
-<a name="l00221"></a>00221       } <span class="keywordflow">else</span> {
-<a name="l00222"></a>00222          sinfo_msg(<span class="stringliteral">"Operation %s by constant"</span>,operation);
-<a name="l00223"></a>00223 
-<a name="l00224"></a>00224          check_nomsg(cube_o = cpl_imagelist_duplicate(cube_i));
-<a name="l00225"></a>00225 
-<a name="l00226"></a>00226          <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {
-<a name="l00227"></a>00227             check(cpl_imagelist_add_scalar(cube_o,value),
-<a name="l00228"></a>00228                   <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00229"></a>00229          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {
-<a name="l00230"></a>00230             check(cpl_imagelist_subtract_scalar(cube_o,value),
-<a name="l00231"></a>00231                   <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00232"></a>00232          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {
-<a name="l00233"></a>00233             check(cpl_imagelist_multiply_scalar(cube_o,value),
-<a name="l00234"></a>00234                   <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00235"></a>00235          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {
-<a name="l00236"></a>00236             check(cpl_imagelist_divide_scalar(cube_o,value),
-<a name="l00237"></a>00237                   <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00238"></a>00238          } <span class="keywordflow">else</span> {
-<a name="l00239"></a>00239             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);
-<a name="l00240"></a>00240             sinfo_msg(<span class="stringliteral">"If an input value is set"</span>);
-<a name="l00241"></a>00241             sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);
-<a name="l00242"></a>00242             <span class="keywordflow">goto</span> cleanup;
-<a name="l00243"></a>00243          }
-<a name="l00244"></a>00244 
-<a name="l00245"></a>00245       } <span class="comment">/* env case op by constant && value == default */</span>
-<a name="l00246"></a>00246 
-<a name="l00247"></a>00247    } <span class="keywordflow">else</span> {
-<a name="l00248"></a>00248 
-<a name="l00249"></a>00249       sinfo_msg(<span class="stringliteral">"Operation %s by constant"</span>,operation);
-<a name="l00250"></a>00250 
-<a name="l00251"></a>00251       check_nomsg(cube_o = cpl_imagelist_duplicate(cube_i));
-<a name="l00252"></a>00252 
-<a name="l00253"></a>00253       <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {
-<a name="l00254"></a>00254          check(cpl_imagelist_add_scalar(cube_o,value),
-<a name="l00255"></a>00255                <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00256"></a>00256       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {
-<a name="l00257"></a>00257          check(cpl_imagelist_subtract_scalar(cube_o,value),
-<a name="l00258"></a>00258                <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00259"></a>00259       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {
-<a name="l00260"></a>00260          check(cpl_imagelist_multiply_scalar(cube_o,value),
-<a name="l00261"></a>00261                <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00262"></a>00262       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {
-<a name="l00263"></a>00263          check(cpl_imagelist_divide_scalar(cube_o,value),
-<a name="l00264"></a>00264                <span class="stringliteral">"operation %s failed"</span>,operation);
-<a name="l00265"></a>00265       } <span class="keywordflow">else</span> {
-<a name="l00266"></a>00266          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);
-<a name="l00267"></a>00267          sinfo_msg(<span class="stringliteral">"If an input value is set"</span>);
-<a name="l00268"></a>00268          sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);
-<a name="l00269"></a>00269          <span class="keywordflow">goto</span> cleanup;
-<a name="l00270"></a>00270       }
-<a name="l00271"></a>00271 
-<a name="l00272"></a>00272    }
-<a name="l00273"></a>00273    <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00274"></a>00274    <span class="comment">/* Set the file name */</span>
-<a name="l00275"></a>00275    <span class="comment">/* Create product frame */</span>
-<a name="l00276"></a>00276    check_nomsg(product_frame = cpl_frame_new());
-<a name="l00277"></a>00277    check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00278"></a>00278    check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE_ARITH_PROCUBE)) ;
-<a name="l00279"></a>00279    check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00280"></a>00280    check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00281"></a>00281    check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),
-<a name="l00282"></a>00282            <span class="stringliteral">"Error while initialising the product frame"</span>) ;
-<a name="l00283"></a>00283  <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00284"></a>00284    check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));
-<a name="l00285"></a>00285 
-<a name="l00286"></a>00286 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span>
-<a name="l00287"></a>00287 <span class="preprocessor"></span>   check(cpl_dfs_setup_product_header(plist, product_frame, framelist, 
-<a name="l00288"></a>00288                                       parlist,
-<a name="l00289"></a>00289                                       <span class="stringliteral">"si_sinfo_utl_cube_arith"</span>, 
-<a name="l00290"></a>00290                                       <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL),
-<a name="l00291"></a>00291          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00292"></a>00292 <span class="preprocessor">#else</span>
-<a name="l00293"></a>00293 <span class="preprocessor"></span>   check(cpl_dfs_setup_product_header(plist, product_frame, framelist, 
-<a name="l00294"></a>00294                                       parlist,
-<a name="l00295"></a>00295                                       <span class="stringliteral">"si_sinfo_utl_cube_arith"</span>, 
-<a name="l00296"></a>00296                                       <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID),
-<a name="l00297"></a>00297          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00298"></a>00298 <span class="preprocessor">#endif</span>
-<a name="l00299"></a>00299 <span class="preprocessor"></span>
-<a name="l00300"></a>00300   <span class="comment">/* Save the file */</span>
-<a name="l00301"></a>00301    check(cpl_imagelist_save(cube_o, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00302"></a>00302                             CPL_IO_DEFAULT),
-<a name="l00303"></a>00303          <span class="stringliteral">"Could not save product"</span>);
-<a name="l00304"></a>00304  
-<a name="l00305"></a>00305 
-<a name="l00306"></a>00306    <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00307"></a>00307    check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;
-<a name="l00308"></a>00308 
-<a name="l00309"></a>00309 
-<a name="l00310"></a>00310 
-<a name="l00311"></a>00311   cleanup:
-<a name="l00312"></a>00312    sinfoni_free_vector(&vec);
-<a name="l00313"></a>00313    sinfo_free_svector(&spectrum);
-<a name="l00314"></a>00314    sinfo_free_svector(&bb);
-<a name="l00315"></a>00315 
-<a name="l00316"></a>00316    sinfo_free_imagelist(&cube_d);
-<a name="l00317"></a>00317    sinfo_free_imagelist(&cube_i);
-<a name="l00318"></a>00318    sinfo_free_imagelist(&cube_o);
-<a name="l00319"></a>00319    <span class="comment">//If I free the next image I get core dump!</span>
-<a name="l00320"></a>00320    <span class="comment">//sinfo_free_image(&std_star);</span>
-<a name="l00321"></a>00321    sinfo_free_image(&image);
-<a name="l00322"></a>00322    sinfo_free_imagelist(&cub_ims);
-<a name="l00323"></a>00323    sinfo_free_propertylist(&plist);
-<a name="l00324"></a>00324     
-<a name="l00325"></a>00325     <span class="comment">/* Return */</span>
-<a name="l00326"></a>00326    <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00327"></a>00327       <span class="keywordflow">return</span> -1 ;
-<a name="l00328"></a>00328    <span class="keywordflow">else</span> 
-<a name="l00329"></a>00329       <span class="keywordflow">return</span> 0 ;
-<a name="l00330"></a>00330 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_cube_arith.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_arith.c,v 1.14 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.14 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_utl_cube_arith.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include <sinfo_spectrum_ops.h></span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_new_cube_ops.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_pro_types.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include <sinfo_error.h></span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include <sinfo_utilities.h></span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include <sinfo_utils_wrappers.h></span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> </div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="keywordtype">int</span> sinfo_utl_cube_arith(</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>    cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>    cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>    cpl_parameter       *   param =NULL;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   operation =NULL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_c =NULL;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_s =NULL;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>    <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_d =<span class="stringliteral">"start"</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>    <span class="comment">/* double                  temp=0 ; */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>    <span class="keywordtype">double</span>                  value=0 ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>    <span class="keywordtype">double</span>                  def_value=0 ;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span> </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>    cpl_parameter *         p=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>    cpl_frame           *   frm_cube=NULL ;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>    cpl_frame           *   frm_spct=NULL ;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>    cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>    cpl_image           *   image=NULL ;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>    cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>    cpl_imagelist       *   cub_ims=NULL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>    cpl_imagelist * cube_i=NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>    cpl_imagelist * cube_o=NULL;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>    cpl_imagelist * cube_d=NULL;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>    cpl_image * std_star=NULL;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>    Vector * bb=NULL;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>    Vector*   spectrum=NULL;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    cpl_vector* vec=NULL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>    <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>    check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span> </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>  </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>    <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>    check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>                                               <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.op"</span>));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>    check_nomsg(operation = cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>    name_o = <span class="stringliteral">"out_cube.fits"</span>;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span> </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>    <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>    check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>                                               <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>));</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>    check_nomsg(value = cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span> </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>    <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>    check(frm_cube = cpl_frameset_find(framelist, SI_UTL_CUBE_ARITH_CUBE),</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>          <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,SI_UTL_CUBE_ARITH_CUBE);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>    check_nomsg(name_c = cpl_frame_get_filename(frm_cube));</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>    check_nomsg(p = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                                           <span class="stringliteral">"sinfoni.sinfo_utl_cube_arith.value"</span>));</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>    check_nomsg(def_value = cpl_parameter_get_default_double(p));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>    <span class="keywordflow">if</span> (value == def_value) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>       <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>                                         SI_UTL_CUBE_ARITH_SPECTRUM))==NULL) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>          sinfo_msg( <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                     SI_UTL_CUBE_ARITH_SPECTRUM);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>          cpl_error_reset();</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                     SI_UTL_CUBE_ARITH_SPECTRUM);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>          name_s = cpl_frame_get_filename(frm_spct);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>          name_d = <span class="stringliteral">"spectrum"</span>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>       }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>    }</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>    <span class="keywordflow">if</span> (value == def_value) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>       <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, PRO_SPECTRUM))!=NULL) {</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,PRO_SPECTRUM);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>          name_s = cpl_frame_get_filename(frm_spct);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>          name_d = <span class="stringliteral">"spectrum"</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((frm_spct = cpl_frameset_find(framelist, PRO_IMA))!=NULL) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>          sinfo_msg( <span class="stringliteral">"SOF contains a file tagged as %s"</span>,PRO_IMA);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>          name_s = cpl_frame_get_filename(frm_spct);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>          name_d = <span class="stringliteral">"image"</span>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>          sinfo_msg( <span class="stringliteral">"SOF does not contains a file tagged as %s nor as %s"</span>,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>             PRO_SPECTRUM,PRO_IMA);</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>          sinfo_msg( <span class="stringliteral">"Assume operation by a constant"</span>);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>          cpl_error_reset();</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>       }</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>    }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>    check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_cube),0),</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>          <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>      </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>    <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>    <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>    check_nomsg(cube_i= cpl_imagelist_load((<span class="keywordtype">char</span>*)name_c,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>    <span class="keywordflow">if</span> (value == def_value) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>       sinfo_msg(<span class="stringliteral">"value equal to default"</span>);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>       <span class="keywordflow">if</span>( strcmp(name_d,<span class="stringliteral">"spectrum"</span>) == 0 ) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>          sinfo_msg(<span class="stringliteral">"Operation by spectrum"</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>          sinfo_msg(<span class="stringliteral">"loading spectrum image file %s"</span>,name_s);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>          check_nomsg(std_star=cpl_image_load((<span class="keywordtype">char</span>*)name_s,CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span> </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>          <span class="comment">//check_nomsg(std_star=sinfo_vector_to_image(vec,CPL_TYPE_FLOAT));</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>          check_nomsg(spectrum  = sinfo_new_image_to_vector(std_star));</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>          <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>             cube_o = sinfo_new_div_cube_by_spectrum (cube_i, spectrum);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>             cube_o = sinfo_new_sub_spectrum_from_cube(cube_i, spectrum);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>             cube_o = sinfo_new_add_spectrum_to_cube(cube_i, spectrum);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>             cube_o = sinfo_new_mul_spectrum_to_cube(cube_i, spectrum);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>             <span class="comment">/*</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span> <span class="comment">              } else if (strcmp(operation,"calib") == 0) {</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span> <span class="comment">              bb = sinfo_new_blackbody_spectrum ((char*)name_s, temp); </span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span> <span class="comment">              cube_d   = sinfo_new_div_cube_by_Spectrum (cube_i, spectrum);</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span> <span class="comment">              cube_o = sinfo_new_mul_spectrum_to_cube(cube_d, bb); </span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> <span class="comment">            */</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>             sinfo_msg(<span class="stringliteral">"If an input spectrum is given and no value is set"</span>);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>             sinfo_msg(<span class="stringliteral">"operations supported are: `/`,`-`,`+`,'*'"</span>);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>          }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>          <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"calib"</span>) == 0) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>          }</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strcmp(name_d,<span class="stringliteral">"image"</span>) == 0) {</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>          sinfo_msg(<span class="stringliteral">"Operation by image"</span>);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>          check_nomsg(std_star=cpl_image_load ((<span class="keywordtype">char</span>*)name_s,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>                                               CPL_TYPE_FLOAT,0,0));</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>          <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>             cknull(cube_o = sinfo_new_add_image_to_cube(cube_i,std_star),</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>                    <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>             cknull(cube_o = sinfo_new_sub_image_from_cube(cube_i,std_star),</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>                    <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>             cknull(cube_o = sinfo_new_mul_image_to_cube(cube_i,std_star),</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>                    <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>             cknull(cube_o = sinfo_new_div_cube_by_image(cube_i,std_star),</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>                    <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>             sinfo_msg(<span class="stringliteral">"If an input image is set"</span>);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>             sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>          }</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>          sinfo_msg(<span class="stringliteral">"Operation %s by constant"</span>,operation);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span> </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>          check_nomsg(cube_o = cpl_imagelist_duplicate(cube_i));</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span> </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>          <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>             check(cpl_imagelist_add_scalar(cube_o,value),</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>                   <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>             check(cpl_imagelist_subtract_scalar(cube_o,value),</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>                   <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>             check(cpl_imagelist_multiply_scalar(cube_o,value),</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>                   <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>          } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>             check(cpl_imagelist_divide_scalar(cube_o,value),</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>                   <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>          } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>             <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>             sinfo_msg(<span class="stringliteral">"If an input value is set"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>             sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>             <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>          }</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span> </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>       } <span class="comment">/* env case op by constant && value == default */</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span> </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span> </div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       sinfo_msg(<span class="stringliteral">"Operation %s by constant"</span>,operation);</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span> </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>       check_nomsg(cube_o = cpl_imagelist_duplicate(cube_i));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span> </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>       <span class="keywordflow">if</span>(strcmp(operation,<span class="stringliteral">"+"</span>) == 0) {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>          check(cpl_imagelist_add_scalar(cube_o,value),</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>                <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"-"</span>) == 0) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>          check(cpl_imagelist_subtract_scalar(cube_o,value),</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>                <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"*"</span>) == 0) {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>          check(cpl_imagelist_multiply_scalar(cube_o,value),</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>                <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>       } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(operation,<span class="stringliteral">"/"</span>) == 0) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>          check(cpl_imagelist_divide_scalar(cube_o,value),</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>                <span class="stringliteral">"operation %s failed"</span>,operation);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>       } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>          <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"operation %s not supported"</span>,operation);</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>          sinfo_msg(<span class="stringliteral">"If an input value is set"</span>);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>          sinfo_msg(<span class="stringliteral">"operations supported are: `-`, `+`, `*`, `/`"</span>);</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>          <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>       }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span> </div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>    }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>    <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>    <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>    <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>    check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>    check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>    check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE_ARITH_PROCUBE)) ;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>    check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>    check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>    check(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL),</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>            <span class="stringliteral">"Error while initialising the product frame"</span>) ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>  <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>    check_nomsg(cpl_propertylist_erase_regexp(plist, <span class="stringliteral">"^ESO PRO CATG"</span>,0));</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span> </div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span> <span class="preprocessor"></span>   check(cpl_dfs_setup_product_header(plist, product_frame, framelist, </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                                       parlist,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                                       <span class="stringliteral">"si_sinfo_utl_cube_arith"</span>, </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                                       <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span> <span class="preprocessor"></span>   check(cpl_dfs_setup_product_header(plist, product_frame, framelist, </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                                       parlist,</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>                                       <span class="stringliteral">"si_sinfo_utl_cube_arith"</span>, </div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>                                       <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID),</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>          <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>   <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>    check(cpl_imagelist_save(cube_o, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                             CPL_IO_DEFAULT),</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>          <span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>  </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span> </div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>    <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>    check_nomsg(cpl_frameset_insert(framelist, product_frame)) ;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span> </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span> </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span> </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>   cleanup:</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>    sinfoni_free_vector(&vec);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>    sinfo_free_svector(&spectrum);</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>    sinfo_free_svector(&bb);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span> </div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>    sinfo_free_imagelist(&cube_d);</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>    sinfo_free_imagelist(&cube_i);</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>    sinfo_free_imagelist(&cube_o);</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>    <span class="comment">//If I free the next image I get core dump!</span></div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>    <span class="comment">//sinfo_free_image(&std_star);</span></div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>    sinfo_free_image(&image);</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>    sinfo_free_imagelist(&cub_ims);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>    sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>     </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>    <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>    <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>       <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__cube__combine_8c_source.html b/html/sinfoni_2sinfo__utl__cube__combine_8c_source.html
index 6919431..94ff1a0 100644
--- a/html/sinfoni_2sinfo__utl__cube__combine_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__cube__combine_8c_source.html
@@ -2,380 +2,411 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_cube_combine.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_cube_combine.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_cube_combine.c,v 1.20 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.20 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ---------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include "sinfo_utl_cube_combine.h"</span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_utilities.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_utilities_scired.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include <stdio.h></span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_pro_save.h"</span>
-<a name="l00044"></a>00044 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00045"></a>00045 <span class="comment">                            Functions prototypes</span>
-<a name="l00046"></a>00046 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00047"></a>00047 
-<a name="l00048"></a>00048 
-<a name="l00049"></a>00049 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00050"></a>00050 <span class="comment">                            Static variables</span>
-<a name="l00051"></a>00051 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00052"></a>00052 
-<a name="l00053"></a>00053 
-<a name="l00054"></a>00054 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00055"></a>00055 <span class="comment">                                Functions code</span>
-<a name="l00056"></a>00056 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00066"></a>00066 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00073"></a>00073 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00074"></a>00074 <span class="keywordtype">int</span> sinfo_utl_cube_combine(
-<a name="l00075"></a>00075         cpl_parameterlist   *   parlist, 
-<a name="l00076"></a>00076         cpl_frameset        *   framelist)
-<a name="l00077"></a>00077 {
-<a name="l00078"></a>00078     cpl_parameter       *   param=NULL ;
-<a name="l00079"></a>00079     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_o=NULL ;
-<a name="l00080"></a>00080     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_i=NULL ;
-<a name="l00081"></a>00081     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_m=NULL ;
-<a name="l00082"></a>00082    
-<a name="l00083"></a>00083     cpl_propertylist    *   plist=NULL ;
-<a name="l00084"></a>00084     cpl_image           *   image=NULL ;
-<a name="l00085"></a>00085     cpl_frame           *   product_frame=NULL;
-<a name="l00086"></a>00086     cpl_frame           *   prod_frm=NULL;
-<a name="l00087"></a>00087     cpl_frame           *   frame=NULL;
-<a name="l00088"></a>00088   
-<a name="l00089"></a>00089     <span class="keywordtype">int</span> z=0;
-<a name="l00090"></a>00090     <span class="keywordtype">int</span> z_min=0;
-<a name="l00091"></a>00091     <span class="keywordtype">int</span> z_max=0;
-<a name="l00092"></a>00092     <span class="keywordtype">int</span> z_siz=0;
-<a name="l00093"></a>00093     <span class="keywordtype">int</span> z_stp=100;
-<a name="l00094"></a>00094     <span class="keywordtype">int</span> xsize=0;
-<a name="l00095"></a>00095     <span class="keywordtype">int</span> ysize=0;
-<a name="l00096"></a>00096     <span class="keywordtype">int</span> scales_sky=0;
-<a name="l00097"></a>00097 
-<a name="l00098"></a>00098     <span class="keywordtype">int</span> i=0;
-<a name="l00099"></a>00099     <span class="keywordtype">int</span> j=0;
-<a name="l00100"></a>00100     <span class="keywordtype">int</span> n=0;
-<a name="l00101"></a>00101 
-<a name="l00102"></a>00102     <span class="keywordtype">int</span> size_x=0;
-<a name="l00103"></a>00103     <span class="keywordtype">int</span> size_y=0;
-<a name="l00104"></a>00104     cpl_image* j_img=NULL;
-<a name="l00105"></a>00105     cpl_image* m_img=NULL;
-<a name="l00106"></a>00106  
-<a name="l00107"></a>00107     cpl_imagelist ** cube_object=NULL;
-<a name="l00108"></a>00108     cpl_imagelist * cube_jitter=NULL;
-<a name="l00109"></a>00109     cpl_imagelist * cube_mask=NULL;
-<a name="l00110"></a>00110  
-<a name="l00111"></a>00111     <span class="keyword">const</span> <span class="keywordtype">char</span>**    files=NULL;
-<a name="l00112"></a>00112     <span class="keywordtype">int</span> nframes=0;
-<a name="l00113"></a>00113 
-<a name="l00114"></a>00114     <span class="keywordtype">double</span> * times=NULL;
-<a name="l00115"></a>00115     <span class="keywordtype">float</span> * offsetx=NULL;
-<a name="l00116"></a>00116     <span class="keywordtype">float</span> * offsety=NULL;
-<a name="l00117"></a>00117     <span class="keywordtype">float</span>  ref_offx=0;
-<a name="l00118"></a>00118     <span class="keywordtype">float</span>  ref_offy=0;
-<a name="l00119"></a>00119     <span class="keywordtype">float</span> tmpoffx=0;
-<a name="l00120"></a>00120     <span class="keywordtype">float</span> tmpoffy=0;
-<a name="l00121"></a>00121     <span class="keywordtype">double</span> kappa=2;
-<a name="l00122"></a>00122     <span class="keywordtype">int</span> ks_clip=0;
-<a name="l00123"></a>00123     <span class="keywordtype">int</span> min_size_x=9999;
-<a name="l00124"></a>00124     <span class="keywordtype">int</span> min_size_y=9999;
-<a name="l00125"></a>00125     <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127  
-<a name="l00128"></a>00128     FILE* file_list=NULL;
-<a name="l00129"></a>00129     <span class="keywordtype">int</span> cnt=0;
-<a name="l00130"></a>00130     <span class="keywordtype">int</span> onp=0;
-<a name="l00131"></a>00131   
-<a name="l00132"></a>00132     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00133"></a>00133     <span class="comment">/* --stropt */</span>
-<a name="l00134"></a>00134     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00135"></a>00135                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ks_clip"</span>));
-<a name="l00136"></a>00136     check_nomsg(ks_clip = cpl_parameter_get_bool(param));
-<a name="l00137"></a>00137 
-<a name="l00138"></a>00138     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00139"></a>00139                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.scale_sky"</span>));
-<a name="l00140"></a>00140     check_nomsg(scales_sky = cpl_parameter_get_bool(param));
-<a name="l00141"></a>00141 
-<a name="l00142"></a>00142 
-<a name="l00143"></a>00143     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00144"></a>00144                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.kappa"</span>));
-<a name="l00145"></a>00145     check_nomsg(kappa = cpl_parameter_get_double(param));
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00148"></a>00148                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_i"</span>));
-<a name="l00149"></a>00149     check_nomsg(name_i = cpl_parameter_get_string(param));
-<a name="l00150"></a>00150 
-<a name="l00151"></a>00151     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00152"></a>00152                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_o"</span>));
-<a name="l00153"></a>00153     check_nomsg(name_o = cpl_parameter_get_string(param));
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155 
-<a name="l00156"></a>00156     <span class="comment">/* --doubleopt */</span>
-<a name="l00157"></a>00157     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00158"></a>00158                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.xsize"</span>));
-<a name="l00159"></a>00159     check_nomsg(xsize = cpl_parameter_get_int(param));
-<a name="l00160"></a>00160 
-<a name="l00161"></a>00161     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00162"></a>00162                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ysize"</span>));
-<a name="l00163"></a>00163     check_nomsg(ysize = cpl_parameter_get_int(param));
-<a name="l00164"></a>00164 
-<a name="l00165"></a>00165   
-<a name="l00166"></a>00166   <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span>
-<a name="l00167"></a>00167     check(sinfo_dfs_set_groups(framelist),
-<a name="l00168"></a>00168          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;
-<a name="l00169"></a>00169  
-<a name="l00170"></a>00170 
-<a name="l00171"></a>00171     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00172"></a>00172     n=cpl_frameset_get_size(framelist);
-<a name="l00173"></a>00173     <span class="keywordflow">if</span>(n<1) {
-<a name="l00174"></a>00174       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);
-<a name="l00175"></a>00175       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00176"></a>00176     }
-<a name="l00177"></a>00177     <span class="keywordflow">for</span> (i=0;i<n;i++) {
-<a name="l00178"></a>00178        frame=cpl_frameset_get_frame(framelist,i);
-<a name="l00179"></a>00179        cpl_frame_set_group(frame,CPL_FRAME_GROUP_RAW);
-<a name="l00180"></a>00180     }
-<a name="l00181"></a>00181 
-<a name="l00182"></a>00182    
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00185"></a>00185     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00186"></a>00186     
-<a name="l00187"></a>00187     <span class="keywordflow">if</span> ( NULL == (file_list = fopen (name_i, <span class="stringliteral">"r"</span> ) ) )
-<a name="l00188"></a>00188     {      
-<a name="l00189"></a>00189       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s\n"</span>, name_i) ;
-<a name="l00190"></a>00190       <span class="keywordflow">goto</span> cleanup ;
-<a name="l00191"></a>00191     }
-<a name="l00192"></a>00192  
-<a name="l00193"></a>00193     cnt = 0 ;
-<a name="l00194"></a>00194     <span class="keywordflow">while</span> ( fscanf( file_list, <span class="stringliteral">"%f %f"</span>,&tmpoffx, &tmpoffy) != EOF )
-<a name="l00195"></a>00195     {
-<a name="l00196"></a>00196       cnt ++ ;
-<a name="l00197"></a>00197     }
-<a name="l00198"></a>00198     fclose(file_list);
-<a name="l00199"></a>00199    
-<a name="l00200"></a>00200     nframes= cnt ;
-<a name="l00201"></a>00201     cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>)), 
-<a name="l00202"></a>00202            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00203"></a>00203  
-<a name="l00204"></a>00204     cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00205"></a>00205            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00206"></a>00206 
-<a name="l00207"></a>00207     cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),
-<a name="l00208"></a>00208            <span class="stringliteral">" could not allocate memory!"</span>) ;
-<a name="l00209"></a>00209   
-<a name="l00210"></a>00210     files = (<span class="keyword">const</span> <span class="keywordtype">char</span>**) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keyword">const</span> <span class="keywordtype">char</span>*));
-<a name="l00211"></a>00211     <span class="keywordflow">if</span> ( NULL == (file_list = fopen (name_i, <span class="stringliteral">"r"</span> ) ) )
-<a name="l00212"></a>00212     {
-<a name="l00213"></a>00213       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s\n"</span>, name_i) ;
-<a name="l00214"></a>00214       <span class="keywordflow">return</span> -1 ;
-<a name="l00215"></a>00215     }
-<a name="l00216"></a>00216 
-<a name="l00217"></a>00217 
-<a name="l00218"></a>00218     cnt=0;   
-<a name="l00219"></a>00219     <span class="keywordflow">while</span> ( fscanf( file_list, <span class="stringliteral">"%f %f"</span>,&tmpoffx,&tmpoffy ) != EOF ) {
-<a name="l00220"></a>00220       frame=cpl_frameset_get_frame(framelist,cnt);
-<a name="l00221"></a>00221       files[cnt]= cpl_frame_get_filename(frame);
-<a name="l00222"></a>00222       times[cnt]=sinfo_pfits_get_exptime(files[cnt]);
-<a name="l00223"></a>00223       offsetx[cnt]=tmpoffx;
-<a name="l00224"></a>00224       offsety[cnt]=tmpoffy;
-<a name="l00225"></a>00225       plist=cpl_propertylist_load(files[cnt],0);
-<a name="l00226"></a>00226       size_x=sinfo_pfits_get_naxis1(plist);
-<a name="l00227"></a>00227       size_y=sinfo_pfits_get_naxis2(plist);
-<a name="l00228"></a>00228       sinfo_free_propertylist(&plist);
-<a name="l00229"></a>00229       <span class="keywordflow">if</span>(size_x < min_size_x) min_size_x=size_x;
-<a name="l00230"></a>00230       <span class="keywordflow">if</span>(size_y < min_size_y) min_size_y=size_y;
-<a name="l00231"></a>00231       cnt ++ ;
-<a name="l00232"></a>00232     }
-<a name="l00233"></a>00233     sinfo_msg(<span class="stringliteral">"Min input cube size x=%d y=%d"</span>,min_size_x,min_size_y);
-<a name="l00234"></a>00234  
-<a name="l00235"></a>00235     nframes=cnt;
-<a name="l00236"></a>00236     fclose(file_list);
-<a name="l00237"></a>00237  
-<a name="l00238"></a>00238     ck0(sinfo_auto_size_cube(offsetx,offsety,nframes,
-<a name="l00239"></a>00239                               &ref_offx,&ref_offy,&size_x,&size_y),
-<a name="l00240"></a>00240          <span class="stringliteral">"Error resizing cube"</span>);
-<a name="l00241"></a>00241     sinfo_msg(<span class="stringliteral">"output ima size=%dx%d"</span>,size_x,size_y); 
-<a name="l00242"></a>00242     cknull(cube_object = cpl_calloc(nframes,<span class="keyword">sizeof</span>(cpl_imagelist*)),
-<a name="l00243"></a>00243        <span class="stringliteral">"could not allocate memory"</span>) ;
-<a name="l00244"></a>00244  
-<a name="l00245"></a>00245     <span class="keywordflow">for</span> (i=0;i<nframes;i++) {
-<a name="l00246"></a>00246       frame=cpl_frameset_get_frame(framelist,i);
-<a name="l00247"></a>00247       name=cpl_frame_get_filename(frame);
-<a name="l00248"></a>00248       check_nomsg(cube_object[i]=cpl_imagelist_load(name,CPL_TYPE_FLOAT,0));
-<a name="l00249"></a>00249       ck0(sinfo_new_assign_offset2(i,name,offsetx,offsety,
-<a name="l00250"></a>00250                                   ref_offx,ref_offy),
-<a name="l00251"></a>00251                                   <span class="stringliteral">"Error assigning offsets"</span>);
-<a name="l00252"></a>00252     }
-<a name="l00253"></a>00253     onp = cpl_imagelist_get_size(cube_object[0]);
-<a name="l00254"></a>00254 
-<a name="l00255"></a>00255 
-<a name="l00256"></a>00256     check(cube_jitter = cpl_imagelist_new(),<span class="stringliteral">"allocating new data cube object"</span>);
-<a name="l00257"></a>00257     check(cube_mask = cpl_imagelist_new(),<span class="stringliteral">"allocating new data cube mask"</span>);
-<a name="l00258"></a>00258 
-<a name="l00259"></a>00259     check(plist=cpl_propertylist_load(files[0],0),
-<a name="l00260"></a>00260       <span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00261"></a>00261 
-<a name="l00262"></a>00262    <span class="keywordflow">if</span>(scales_sky == 1) {
-<a name="l00263"></a>00263       sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);
-<a name="l00264"></a>00264       <span class="keywordflow">for</span>(n=0;n<nframes;n++) {
-<a name="l00265"></a>00265     sinfo_msg(<span class="stringliteral">"process cube %d\n"</span>,n);
-<a name="l00266"></a>00266     sinfo_new_sinfoni_correct_median_it(&(cube_object[n]));
-<a name="l00267"></a>00267       }
-<a name="l00268"></a>00268     }
-<a name="l00269"></a>00269 
-<a name="l00270"></a>00270    <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {
-<a name="l00271"></a>00271      z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);
-<a name="l00272"></a>00272      z_min=z;
-<a name="l00273"></a>00273      z_max=z_min+z_siz;
-<a name="l00274"></a>00274      sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,
-<a name="l00275"></a>00275            z_min,z_max,onp);
-<a name="l00276"></a>00276 
-<a name="l00277"></a>00277      <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {
-<a name="l00278"></a>00278 
-<a name="l00279"></a>00279        check_nomsg(j_img=cpl_image_new(size_x,size_y,CPL_TYPE_FLOAT));
-<a name="l00280"></a>00280        check_nomsg(cpl_imagelist_set(cube_jitter,j_img,j));
-<a name="l00281"></a>00281        check_nomsg(m_img = cpl_image_new(size_x,size_y,CPL_TYPE_FLOAT));
-<a name="l00282"></a>00282        check_nomsg(cpl_imagelist_set(cube_mask,m_img,j));
-<a name="l00283"></a>00283      }
-<a name="l00284"></a>00284      <span class="keywordflow">if</span>(ks_clip == 1){
-<a name="l00285"></a>00285        sinfo_new_combine_jittered_cubes_thomas_range(cube_object,
-<a name="l00286"></a>00286                              cube_jitter,
-<a name="l00287"></a>00287                              cube_mask,
-<a name="l00288"></a>00288                              nframes,
-<a name="l00289"></a>00289                              offsetx,offsety,
-<a name="l00290"></a>00290                              times,
-<a name="l00291"></a>00291                              (<span class="keywordtype">char</span>*) <span class="stringliteral">"tanh"</span>,
-<a name="l00292"></a>00292                              z_min,
-<a name="l00293"></a>00293                              z_max,
-<a name="l00294"></a>00294                              kappa);
-<a name="l00295"></a>00295      } <span class="keywordflow">else</span> {
-<a name="l00296"></a>00296        sinfo_new_combine_jittered_cubes_range(cube_object, 
-<a name="l00297"></a>00297                           cube_jitter,
-<a name="l00298"></a>00298                           cube_mask,
-<a name="l00299"></a>00299                           nframes,
-<a name="l00300"></a>00300                           offsetx,
-<a name="l00301"></a>00301                           offsety,
-<a name="l00302"></a>00302                           times,
-<a name="l00303"></a>00303                           (<span class="keywordtype">char</span>*) <span class="stringliteral">"tanh"</span>,
-<a name="l00304"></a>00304                           z_min,
-<a name="l00305"></a>00305                           z_max) ;
-<a name="l00306"></a>00306      }
-<a name="l00307"></a>00307       
-<a name="l00308"></a>00308    }
-<a name="l00309"></a>00309    sinfo_new_convert_0_to_ZERO_for_cubes(cube_jitter) ; 
-<a name="l00310"></a>00310  
-<a name="l00311"></a>00311     name_m=<span class="stringliteral">"out_cube_mask.fits"</span>;
-<a name="l00312"></a>00312      <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00313"></a>00313 
-<a name="l00314"></a>00314     <span class="comment">/* Create product frame */</span>
-<a name="l00315"></a>00315     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00316"></a>00316     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00317"></a>00317     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE_COMBINE_PROCUBE));
-<a name="l00318"></a>00318     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00319"></a>00319     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00320"></a>00320     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL)) ;
-<a name="l00321"></a>00321       
-<a name="l00322"></a>00322     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00323"></a>00323 <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span>
-<a name="l00324"></a>00324 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, product_frame, 
-<a name="l00325"></a>00325                                        framelist, parlist,
-<a name="l00326"></a>00326                                        <span class="stringliteral">"sinfo_utl_cube_combine"</span>, 
-<a name="l00327"></a>00327                                        <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL),
-<a name="l00328"></a>00328       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00329"></a>00329 <span class="preprocessor">#else</span>
-<a name="l00330"></a>00330 <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, product_frame, 
-<a name="l00331"></a>00331                                        framelist, parlist,
-<a name="l00332"></a>00332                                        <span class="stringliteral">"sinfo_utl_cube_combine"</span>,
-<a name="l00333"></a>00333                                        <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID),
-<a name="l00334"></a>00334       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;
-<a name="l00335"></a>00335 <span class="preprocessor">#endif    </span>
-<a name="l00336"></a>00336 <span class="preprocessor"></span>    check(cpl_imagelist_save(cube_jitter, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00337"></a>00337                  CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);
-<a name="l00338"></a>00338     check_nomsg(cpl_frameset_insert(framelist, product_frame));
-<a name="l00339"></a>00339     
-<a name="l00340"></a>00340    
-<a name="l00341"></a>00341     check_nomsg(prod_frm = cpl_frame_new());
-<a name="l00342"></a>00342     check_nomsg(cpl_frame_set_filename(prod_frm, name_m)) ;
-<a name="l00343"></a>00343     check_nomsg(cpl_frame_set_tag(prod_frm, SI_UTL_CUBE_COMBINE_PROMASK)) ;
-<a name="l00344"></a>00344     check_nomsg(cpl_frame_set_type(prod_frm, CPL_FRAME_TYPE_IMAGE)) ;
-<a name="l00345"></a>00345     check_nomsg(cpl_frame_set_group(prod_frm, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00346"></a>00346     check_nomsg(cpl_frame_set_level(prod_frm, CPL_FRAME_LEVEL_FINAL)) ;
-<a name="l00347"></a>00347 
-<a name="l00348"></a>00348     check(cpl_imagelist_save(cube_mask, name_m, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00349"></a>00349                  CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);
-<a name="l00350"></a>00350     check_nomsg(cpl_frameset_insert(framelist, prod_frm));
-<a name="l00351"></a>00351     
-<a name="l00352"></a>00352  cleanup:
-<a name="l00353"></a>00353     sinfo_free_imagelist(&cube_jitter) ;
-<a name="l00354"></a>00354     sinfo_free_image(&image) ;
-<a name="l00355"></a>00355     sinfo_free_imagelist(&cube_mask) ;
-<a name="l00356"></a>00356 
-<a name="l00357"></a>00357 
-<a name="l00358"></a>00358     <span class="keywordflow">if</span>(cube_object != NULL) {
-<a name="l00359"></a>00359       <span class="keywordflow">for</span> (i=0;i< nframes;i++){
-<a name="l00360"></a>00360     sinfo_free_imagelist(&(cube_object[i]));      
-<a name="l00361"></a>00361       }
-<a name="l00362"></a>00362       sinfo_free_array_imagelist(&cube_object);
-<a name="l00363"></a>00363     }
-<a name="l00364"></a>00364     sinfo_free_propertylist(&plist);
-<a name="l00365"></a>00365     <span class="keywordflow">if</span>(files != NULL) {
-<a name="l00366"></a>00366       cpl_free(files);
-<a name="l00367"></a>00367       files=NULL;
-<a name="l00368"></a>00368     }
-<a name="l00369"></a>00369     sinfo_free_double(&times);
-<a name="l00370"></a>00370     sinfo_free_float(&offsetx);
-<a name="l00371"></a>00371     sinfo_free_float(&offsety);
-<a name="l00372"></a>00372  
-<a name="l00373"></a>00373     <span class="comment">/* Return */</span>
-<a name="l00374"></a>00374     <span class="keywordflow">if</span> (cpl_error_get_code()) {
-<a name="l00375"></a>00375         <span class="keywordflow">return</span> -1 ;
-<a name="l00376"></a>00376     }
-<a name="l00377"></a>00377     <span class="keywordflow">else</span> { 
-<a name="l00378"></a>00378         <span class="keywordflow">return</span> 0 ;
-<a name="l00379"></a>00379     }
-<a name="l00380"></a>00380 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_cube_combine.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_cube_combine.c,v 1.20 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.20 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include "sinfo_utl_cube_combine.h"</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_utilities.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_utilities_scired.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include <stdio.h></span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_pro_save.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span> </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span> </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span> <span class="keywordtype">int</span> sinfo_utl_cube_combine(</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     cpl_parameter       *   param=NULL ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_o=NULL ;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_i=NULL ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>                *   name_m=NULL ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>    </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>     cpl_image           *   image=NULL ;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     cpl_frame           *   prod_frm=NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_frame           *   frame=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>   </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     <span class="keywordtype">int</span> z=0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     <span class="keywordtype">int</span> z_min=0;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="keywordtype">int</span> z_max=0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">int</span> z_siz=0;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="keywordtype">int</span> z_stp=100;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="keywordtype">int</span> xsize=0;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="keywordtype">int</span> ysize=0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="keywordtype">int</span> scales_sky=0;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span> </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>     <span class="keywordtype">int</span> i=0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="keywordtype">int</span> j=0;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     <span class="keywordtype">int</span> n=0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span> </div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     <span class="keywordtype">int</span> size_x=0;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="keywordtype">int</span> size_y=0;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     cpl_image* j_img=NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     cpl_image* m_img=NULL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>  </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     cpl_imagelist ** cube_object=NULL;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>     cpl_imagelist * cube_jitter=NULL;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     cpl_imagelist * cube_mask=NULL;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>  </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>**    files=NULL;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="keywordtype">int</span> nframes=0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span> </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     <span class="keywordtype">double</span> * times=NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     <span class="keywordtype">float</span> * offsetx=NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     <span class="keywordtype">float</span> * offsety=NULL;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     <span class="keywordtype">float</span>  ref_offx=0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     <span class="keywordtype">float</span>  ref_offy=0;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="keywordtype">float</span> tmpoffx=0;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="keywordtype">float</span> tmpoffy=0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="keywordtype">double</span> kappa=2;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     <span class="keywordtype">int</span> ks_clip=0;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="keywordtype">int</span> min_size_x=9999;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     <span class="keywordtype">int</span> min_size_y=9999;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>* name=NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>  </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     FILE* file_list=NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordtype">int</span> cnt=0;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     <span class="keywordtype">int</span> onp=0;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>   </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ks_clip"</span>));</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>     check_nomsg(ks_clip = cpl_parameter_get_bool(param));</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.scale_sky"</span>));</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     check_nomsg(scales_sky = cpl_parameter_get_bool(param));</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.kappa"</span>));</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     check_nomsg(kappa = cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_i"</span>));</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>     check_nomsg(name_i = cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span> </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.name_o"</span>));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>     check_nomsg(name_o = cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span> </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.xsize"</span>));</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     check_nomsg(xsize = cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> </div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>                         <span class="stringliteral">"sinfoni.sinfo_utl_cube_combine.ysize"</span>));</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     check_nomsg(ysize = cpl_parameter_get_int(param));</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span> </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>   </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>   <span class="comment">/* Identify the RAW and CALIB frames in the input frameset */</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>     check(sinfo_dfs_set_groups(framelist),</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>          <span class="stringliteral">"Cannot identify RAW and CALIB frames"</span>) ;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>  </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>     n=cpl_frameset_get_size(framelist);</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="keywordflow">if</span>(n<1) {</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"Empty input frame list!"</span>);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     }</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>     <span class="keywordflow">for</span> (i=0;i<n;i++) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>        frame=cpl_frameset_get_frame(framelist,i);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>        cpl_frame_set_group(frame,CPL_FRAME_GROUP_RAW);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     }</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span> </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>    </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>     <span class="keywordflow">if</span> ( NULL == (file_list = fopen (name_i, <span class="stringliteral">"r"</span> ) ) )</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>     {      </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s\n"</span>, name_i) ;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>       <span class="keywordflow">goto</span> cleanup ;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>     }</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>  </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>     cnt = 0 ;</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>     <span class="keywordflow">while</span> ( fscanf( file_list, <span class="stringliteral">"%f %f"</span>,&tmpoffx, &tmpoffy) != EOF )</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>     {</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>       cnt ++ ;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>     }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>     fclose(file_list);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>    </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>     nframes= cnt ;</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>     cknull(times = (<span class="keywordtype">double</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span> (<span class="keywordtype">double</span>)), </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>  </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>     cknull(offsetx = (<span class="keywordtype">float</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span> </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>     cknull(offsety = (<span class="keywordtype">float</span>*) cpl_calloc (nframes, <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>)),</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>            <span class="stringliteral">" could not allocate memory!"</span>) ;</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>   </div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>     files = (<span class="keyword">const</span> <span class="keywordtype">char</span>**) cpl_calloc(MAX_NAME_SIZE,<span class="keyword">sizeof</span>(<span class="keyword">const</span> <span class="keywordtype">char</span>*));</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>     <span class="keywordflow">if</span> ( NULL == (file_list = fopen (name_i, <span class="stringliteral">"r"</span> ) ) )</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>     {</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>       <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"cannot open %s\n"</span>, name_i) ;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>       <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>     }</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span> </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span> </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>     cnt=0;   </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>     <span class="keywordflow">while</span> ( fscanf( file_list, <span class="stringliteral">"%f %f"</span>,&tmpoffx,&tmpoffy ) != EOF ) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>       frame=cpl_frameset_get_frame(framelist,cnt);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>       files[cnt]= cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>       times[cnt]=sinfo_pfits_get_exptime(files[cnt]);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>       offsetx[cnt]=tmpoffx;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>       offsety[cnt]=tmpoffy;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>       plist=cpl_propertylist_load(files[cnt],0);</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>       size_x=sinfo_pfits_get_naxis1(plist);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>       size_y=sinfo_pfits_get_naxis2(plist);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>       sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>       <span class="keywordflow">if</span>(size_x < min_size_x) min_size_x=size_x;</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>       <span class="keywordflow">if</span>(size_y < min_size_y) min_size_y=size_y;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>       cnt ++ ;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>     }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>     sinfo_msg(<span class="stringliteral">"Min input cube size x=%d y=%d"</span>,min_size_x,min_size_y);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>  </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>     nframes=cnt;</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>     fclose(file_list);</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>  </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>     ck0(sinfo_auto_size_cube(offsetx,offsety,nframes,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>                               &ref_offx,&ref_offy,&size_x,&size_y),</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>          <span class="stringliteral">"Error resizing cube"</span>);</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>     sinfo_msg(<span class="stringliteral">"output ima size=%dx%d"</span>,size_x,size_y); </div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>     cknull(cube_object = cpl_calloc(nframes,<span class="keyword">sizeof</span>(cpl_imagelist*)),</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>        <span class="stringliteral">"could not allocate memory"</span>) ;</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>  </div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>     <span class="keywordflow">for</span> (i=0;i<nframes;i++) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>       frame=cpl_frameset_get_frame(framelist,i);</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>       name=cpl_frame_get_filename(frame);</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>       check_nomsg(cube_object[i]=cpl_imagelist_load(name,CPL_TYPE_FLOAT,0));</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>       ck0(sinfo_new_assign_offset2(i,name,offsetx,offsety,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>                                   ref_offx,ref_offy),</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>                                   <span class="stringliteral">"Error assigning offsets"</span>);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>     }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>     onp = cpl_imagelist_get_size(cube_object[0]);</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span> </div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span> </div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>     check(cube_jitter = cpl_imagelist_new(),<span class="stringliteral">"allocating new data cube object"</span>);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>     check(cube_mask = cpl_imagelist_new(),<span class="stringliteral">"allocating new data cube mask"</span>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span> </div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>     check(plist=cpl_propertylist_load(files[0],0),</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>       <span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span> </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>    <span class="keywordflow">if</span>(scales_sky == 1) {</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>       sinfo_msg(<span class="stringliteral">"Subtract spatial sinfo_median to each cube plane"</span>);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>       <span class="keywordflow">for</span>(n=0;n<nframes;n++) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>     sinfo_msg(<span class="stringliteral">"process cube %d\n"</span>,n);</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>     sinfo_new_sinfoni_correct_median_it(&(cube_object[n]));</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>       }</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>     }</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span> </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>    <span class="keywordflow">for</span>(z=0;z<onp;z+=z_stp) {</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>      z_siz=(z_stp < (onp-z)) ? z_stp : (onp-z);</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>      z_min=z;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>      z_max=z_min+z_siz;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>      sinfo_msg(<span class="stringliteral">"Coadding cubes: range [%4.4d,%4.4d) of 0-%d\n"</span>,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>            z_min,z_max,onp);</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span> </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>      <span class="keywordflow">for</span>(j=z_min;j<z_max;j++) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span> </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>        check_nomsg(j_img=cpl_image_new(size_x,size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>        check_nomsg(cpl_imagelist_set(cube_jitter,j_img,j));</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>        check_nomsg(m_img = cpl_image_new(size_x,size_y,CPL_TYPE_FLOAT));</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>        check_nomsg(cpl_imagelist_set(cube_mask,m_img,j));</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>      }</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>      <span class="keywordflow">if</span>(ks_clip == 1){</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>        sinfo_new_combine_jittered_cubes_thomas_range(cube_object,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>                              cube_jitter,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>                              cube_mask,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>                              nframes,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>                              offsetx,offsety,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>                              times,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>                              (<span class="keywordtype">char</span>*) <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>                              z_min,</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>                              z_max,</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>                              kappa);</div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>        sinfo_new_combine_jittered_cubes_range(cube_object, </div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>                           cube_jitter,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>                           cube_mask,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>                           nframes,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>                           offsetx,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>                           offsety,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>                           times,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>                           (<span class="keywordtype">char</span>*) <span class="stringliteral">"tanh"</span>,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>                           z_min,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>                           z_max) ;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>      }</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>       </div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>    }</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>    sinfo_new_convert_0_to_ZERO_for_cubes(cube_jitter) ; </div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>  </div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>     name_m=<span class="stringliteral">"out_cube_mask.fits"</span>;</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>      <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span> </div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>     check_nomsg(cpl_frame_set_tag(product_frame, SI_UTL_CUBE_COMBINE_PROCUBE));</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL)) ;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>       </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span> <span class="preprocessor">#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(4, 8, 0)  </span></div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, product_frame, </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>                                        framelist, parlist,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>                                        <span class="stringliteral">"sinfo_utl_cube_combine"</span>, </div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>                                        <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID,NULL),</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span> <span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span> <span class="preprocessor"></span>    check(cpl_dfs_setup_product_header(plist, product_frame, </div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>                                        framelist, parlist,</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>                                        <span class="stringliteral">"sinfo_utl_cube_combine"</span>,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>                                        <span class="stringliteral">"SINFONI"</span>, KEY_VALUE_HPRO_DID),</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>       <span class="stringliteral">"Problem in the product DFS-compliance"</span>) ;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span> <span class="preprocessor">#endif    </span></div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span> <span class="preprocessor"></span>    check(cpl_imagelist_save(cube_jitter, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>                  CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame));</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>     </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>    </div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>     check_nomsg(prod_frm = cpl_frame_new());</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>     check_nomsg(cpl_frame_set_filename(prod_frm, name_m)) ;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>     check_nomsg(cpl_frame_set_tag(prod_frm, SI_UTL_CUBE_COMBINE_PROMASK)) ;</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>     check_nomsg(cpl_frame_set_type(prod_frm, CPL_FRAME_TYPE_IMAGE)) ;</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>     check_nomsg(cpl_frame_set_group(prod_frm, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>     check_nomsg(cpl_frame_set_level(prod_frm, CPL_FRAME_LEVEL_FINAL)) ;</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span> </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>     check(cpl_imagelist_save(cube_mask, name_m, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>                  CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>     check_nomsg(cpl_frameset_insert(framelist, prod_frm));</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>     </div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>  cleanup:</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>     sinfo_free_imagelist(&cube_jitter) ;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>     sinfo_free_image(&image) ;</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>     sinfo_free_imagelist(&cube_mask) ;</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span> </div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span> </div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>     <span class="keywordflow">if</span>(cube_object != NULL) {</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>       <span class="keywordflow">for</span> (i=0;i< nframes;i++){</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>     sinfo_free_imagelist(&(cube_object[i]));      </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>       }</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>       sinfo_free_array_imagelist(&cube_object);</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>     }</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>     <span class="keywordflow">if</span>(files != NULL) {</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>       cpl_free(files);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>       files=NULL;</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>     }</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>     sinfo_free_double(&times);</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>     sinfo_free_float(&offsetx);</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>     sinfo_free_float(&offsety);</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>  </div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) {</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>     }</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>     <span class="keywordflow">else</span> { </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>     }</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html b/html/sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
index 0d65f2e..104be03 100644
--- a/html/sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__spectrum__divide__by__blackbody_8c_source.html
@@ -2,161 +2,192 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_divide_by_blackbody.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_divide_by_blackbody.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 
-<a name="l00029"></a>00029 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
-<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 <span class="preprocessor">#include "sinfo_utl_spectrum_divide_by_blackbody.h"</span>
-<a name="l00038"></a>00038 <span class="preprocessor">#include <sinfo_spectrum_ops.h></span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00043"></a>00043 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00044"></a>00044 <span class="comment">                            Functions prototypes</span>
-<a name="l00045"></a>00045 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00046"></a>00046 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00047"></a>00047 <span class="comment">                            Static variables</span>
-<a name="l00048"></a>00048 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00049"></a>00049 
-<a name="l00058"></a>00058 <span class="comment">/*----------------------------------------------------------------------------</span>
-<a name="l00059"></a>00059 <span class="comment">                                Functions code</span>
-<a name="l00060"></a>00060 <span class="comment"> ----------------------------------------------------------------------------*/</span>
-<a name="l00061"></a>00061 
-<a name="l00062"></a>00062 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00069"></a>00069 <span class="comment">/*---------------------------------------------------------------------------*/</span>
-<a name="l00070"></a>00070 <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody(
-<a name="l00071"></a>00071         cpl_parameterlist   *   parlist, 
-<a name="l00072"></a>00072         cpl_frameset        *   framelist)
-<a name="l00073"></a>00073 {
-<a name="l00074"></a>00074     cpl_parameter       *   param =NULL;
-<a name="l00075"></a>00075     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;
-<a name="l00076"></a>00076     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;
-<a name="l00077"></a>00077 
-<a name="l00078"></a>00078     <span class="keywordtype">double</span>                  temp=0 ;
-<a name="l00079"></a>00079 
-<a name="l00080"></a>00080     cpl_frame           *   frm_spct=NULL ;
-<a name="l00081"></a>00081 
-<a name="l00082"></a>00082     cpl_propertylist    *   plist=NULL ;
-<a name="l00083"></a>00083 
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     cpl_frame           *   product_frame=NULL;
-<a name="l00086"></a>00086     cpl_image * bb_img=NULL;
-<a name="l00087"></a>00087     cpl_image * image_o=NULL;
-<a name="l00088"></a>00088     cpl_image * image_i=NULL;
-<a name="l00089"></a>00089 
-<a name="l00090"></a>00090     Vector*   bb=NULL;
-<a name="l00091"></a>00091     <span class="comment">/* double * ker=NULL; */</span>
-<a name="l00092"></a>00092 
-<a name="l00093"></a>00093     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00094"></a>00094     <span class="comment">/* --stropt */</span>
-<a name="l00095"></a>00095     name_o = <span class="stringliteral">"out_ima.fits"</span>;
-<a name="l00096"></a>00096 
-<a name="l00097"></a>00097     <span class="comment">/* --doubleopt */</span>
-<a name="l00098"></a>00098 
-<a name="l00099"></a>00099     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00100"></a>00100                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature"</span>));
-<a name="l00101"></a>00101     check_nomsg(temp = cpl_parameter_get_double(param));
-<a name="l00102"></a>00102    
-<a name="l00103"></a>00103     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00104"></a>00104     check(frm_spct = cpl_frameset_find(framelist, 
-<a name="l00105"></a>00105                     SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM),
-<a name="l00106"></a>00106                     <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,
-<a name="l00107"></a>00107                     SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM);
-<a name="l00108"></a>00108 
-<a name="l00109"></a>00109     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct), 
-<a name="l00110"></a>00110                         0),<span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00111"></a>00111 
-<a name="l00112"></a>00112     <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00113"></a>00113     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00114"></a>00114     check_nomsg(name_i = cpl_frame_get_filename(frm_spct));
-<a name="l00115"></a>00115     check_nomsg(image_i= cpl_image_load((<span class="keywordtype">char</span>*)name_i, CPL_TYPE_FLOAT,0,0));  
-<a name="l00116"></a>00116     cknull_nomsg(bb= sinfo_new_blackbody_spectrum ((<span class="keywordtype">char</span>*)name_i, temp));
-<a name="l00117"></a>00117     cknull_nomsg(bb_img = sinfo_new_vector_to_image(bb));
-<a name="l00118"></a>00118     cknull_nomsg(image_o = sinfo_new_div_image_by_spectrum (image_i,bb_img));
-<a name="l00119"></a>00119     
-<a name="l00120"></a>00120     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00121"></a>00121     <span class="comment">/* Set the file name */</span>
-<a name="l00122"></a>00122 
-<a name="l00123"></a>00123     <span class="comment">/* Create product frame */</span>
-<a name="l00124"></a>00124     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00125"></a>00125     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00126"></a>00126     check_nomsg(cpl_frame_set_tag(product_frame, 
-<a name="l00127"></a>00127                         SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_PROSPECTRUM));
-<a name="l00128"></a>00128     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));
-<a name="l00129"></a>00129     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT));
-<a name="l00130"></a>00130     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL));
-<a name="l00131"></a>00131 
-<a name="l00132"></a>00132     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00133"></a>00133        <span class="comment">/*</span>
-<a name="l00134"></a>00134 <span class="comment">    check(cpl_dfs_setup_product_header(plist, product_frame, </span>
-<a name="l00135"></a>00135 <span class="comment">                                             framelist, parlist,</span>
-<a name="l00136"></a>00136 <span class="comment">            "sinfo_utl_spectrum_divide_by_blackbody", "SINFONI", </span>
-<a name="l00137"></a>00137 <span class="comment">                KEY_VALUE_HPRO_DID),"Problem in the product DFS-compliance") ;</span>
-<a name="l00138"></a>00138 <span class="comment">       */</span>
-<a name="l00139"></a>00139  
-<a name="l00140"></a>00140     <span class="comment">/* Save the file */</span>
-<a name="l00141"></a>00141     check(cpl_image_save(image_o, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00142"></a>00142                    CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);
-<a name="l00143"></a>00143 
-<a name="l00144"></a>00144     <span class="comment">/* Log the saved file in the input frameset */</span>
-<a name="l00145"></a>00145     check_nomsg(cpl_frameset_insert(framelist, product_frame));
-<a name="l00146"></a>00146 
-<a name="l00147"></a>00147  cleanup:
-<a name="l00148"></a>00148 
-<a name="l00149"></a>00149        sinfo_free_propertylist(&plist) ;
-<a name="l00150"></a>00150        sinfo_free_image(&image_i);
-<a name="l00151"></a>00151        sinfo_free_image(&image_o);
-<a name="l00152"></a>00152        sinfo_free_image(&bb_img);
-<a name="l00153"></a>00153      
-<a name="l00154"></a>00154 
-<a name="l00155"></a>00155     <span class="comment">/* Return */</span>
-<a name="l00156"></a>00156     <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00157"></a>00157         <span class="keywordflow">return</span> -1 ;
-<a name="l00158"></a>00158     <span class="keywordflow">else</span> 
-<a name="l00159"></a>00159         <span class="keywordflow">return</span> 0 ;
-<a name="l00160"></a>00160 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_divide_by_blackbody.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="preprocessor"></span><span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> <span class="preprocessor">#include "sinfo_utl_spectrum_divide_by_blackbody.h"</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include <sinfo_spectrum_ops.h></span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span> <span class="comment">/*----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment"> ----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span> <span class="comment">/*---------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_divide_by_blackbody(</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span> {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>     cpl_parameter       *   param =NULL;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span> </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keywordtype">double</span>                  temp=0 ;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span> </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>     cpl_frame           *   frm_spct=NULL ;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span> </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span> </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>     cpl_image * bb_img=NULL;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_image * image_o=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_image * image_i=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span> </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     Vector*   bb=NULL;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>     <span class="comment">/* double * ker=NULL; */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span> </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     name_o = <span class="stringliteral">"out_ima.fits"</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span> </div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span> </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>                 <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_divide_by_blackbody.temperature"</span>));</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>     check_nomsg(temp = cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>    </div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>     check(frm_spct = cpl_frameset_find(framelist, </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>                     SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM),</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                     <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>                     SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM);</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span> </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct), </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>                         0),<span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span> </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>     <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>     check_nomsg(name_i = cpl_frame_get_filename(frm_spct));</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>     check_nomsg(image_i= cpl_image_load((<span class="keywordtype">char</span>*)name_i, CPL_TYPE_FLOAT,0,0));  </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     cknull_nomsg(bb= sinfo_new_blackbody_spectrum ((<span class="keywordtype">char</span>*)name_i, temp));</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>     cknull_nomsg(bb_img = sinfo_new_vector_to_image(bb));</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>     cknull_nomsg(image_o = sinfo_new_div_image_by_spectrum (image_i,bb_img));</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span> </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>     check_nomsg(cpl_frame_set_tag(product_frame, </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>                         SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_PROSPECTRUM));</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL));</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span> </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>        <span class="comment">/*</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> <span class="comment">    check(cpl_dfs_setup_product_header(plist, product_frame, </span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span> <span class="comment">                                             framelist, parlist,</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span> <span class="comment">            "sinfo_utl_spectrum_divide_by_blackbody", "SINFONI", </span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span> <span class="comment">                KEY_VALUE_HPRO_DID),"Problem in the product DFS-compliance") ;</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span> <span class="comment">       */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>  </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>     check(cpl_image_save(image_o, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>                    CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>     <span class="comment">/* Log the saved file in the input frameset */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span> </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>  cleanup:</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span> </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>        sinfo_free_propertylist(&plist) ;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>        sinfo_free_image(&image_i);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>        sinfo_free_image(&image_o);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>        sinfo_free_image(&bb_img);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>      </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span> </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     <span class="comment">/* Return */</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html b/html/sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
index d849823..1c54181 100644
--- a/html/sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
+++ b/html/sinfoni_2sinfo__utl__spectrum__wavelength__shift_8c_source.html
@@ -2,189 +2,220 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <title>SINFONI Pipeline Reference Manual: sinfo_utl_spectrum_wavelength_shift.c Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
-<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-<!-- Generated by Doxygen 1.6.1 -->
-<h1>sinfo_utl_spectrum_wavelength_shift.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span>
-<a name="l00002"></a>00002 <span class="comment"> *</span>
-<a name="l00003"></a>00003 <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span>
-<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span>
-<a name="l00005"></a>00005 <span class="comment"> *</span>
-<a name="l00006"></a>00006 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
-<a name="l00007"></a>00007 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
-<a name="l00008"></a>00008 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
-<a name="l00009"></a>00009 <span class="comment"> * (at your option) any later version.</span>
-<a name="l00010"></a>00010 <span class="comment"> *</span>
-<a name="l00011"></a>00011 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
-<a name="l00012"></a>00012 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<a name="l00013"></a>00013 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<a name="l00014"></a>00014 <span class="comment"> * GNU General Public License for more details.</span>
-<a name="l00015"></a>00015 <span class="comment"> *</span>
-<a name="l00016"></a>00016 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
-<a name="l00017"></a>00017 <span class="comment"> * along with this program; if not, write to the Free Software</span>
-<a name="l00018"></a>00018 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
-<a name="l00019"></a>00019 <span class="comment"> */</span>
-<a name="l00020"></a>00020 
-<a name="l00021"></a>00021 <span class="comment">/*</span>
-<a name="l00022"></a>00022 <span class="comment"> * $Author: amodigli $</span>
-<a name="l00023"></a>00023 <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span>
-<a name="l00024"></a>00024 <span class="comment"> * $Revision: 1.8 $</span>
-<a name="l00025"></a>00025 <span class="comment"> * $Name: sinfo-2_3_3 $</span>
-<a name="l00026"></a>00026 <span class="comment"> */</span>
-<a name="l00027"></a>00027 
-<a name="l00028"></a>00028 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
-<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span>
-<a name="l00030"></a>00030 <span class="preprocessor">#endif</span>
-<a name="l00031"></a>00031 <span class="preprocessor"></span>
-<a name="l00032"></a>00032 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00033"></a>00033 <span class="comment">                                Includes</span>
-<a name="l00034"></a>00034 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00035"></a>00035 
-<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
-<a name="l00037"></a>00037 
-<a name="l00038"></a>00038 <span class="preprocessor">#include "sinfo_utl_spectrum_wavelength_shift.h"</span>
-<a name="l00039"></a>00039 <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span>
-<a name="l00040"></a>00040 <span class="preprocessor">#include "sinfo_shift_images.h"</span>
-<a name="l00041"></a>00041 <span class="preprocessor">#include "sinfo_key_names.h"</span>
-<a name="l00042"></a>00042 <span class="preprocessor">#include "sinfo_error.h"</span>
-<a name="l00043"></a>00043 <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span>
-<a name="l00044"></a>00044 <span class="preprocessor">#include "sinfo_msg.h"</span>
-<a name="l00045"></a>00045 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00046"></a>00046 <span class="comment">                            Functions prototypes</span>
-<a name="l00047"></a>00047 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00048"></a>00048 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00049"></a>00049 <span class="comment">                            Static variables</span>
-<a name="l00050"></a>00050 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00051"></a>00051 
-<a name="l00060"></a>00060 <span class="comment">/*-----------------------------------------------------------------------------</span>
-<a name="l00061"></a>00061 <span class="comment">                                Functions code</span>
-<a name="l00062"></a>00062 <span class="comment"> -----------------------------------------------------------------------------*/</span>
-<a name="l00063"></a>00063 
-<a name="l00064"></a>00064 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00071"></a>00071 <span class="comment">/*----------------------------------------------------------------------------*/</span>
-<a name="l00072"></a>00072 <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift(
-<a name="l00073"></a>00073         cpl_parameterlist   *   parlist, 
-<a name="l00074"></a>00074         cpl_frameset        *   framelist)
-<a name="l00075"></a>00075 {
-<a name="l00076"></a>00076     cpl_parameter       *   param =NULL;
-<a name="l00077"></a>00077     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   method =NULL;
-<a name="l00078"></a>00078     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;
-<a name="l00079"></a>00079     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;
-<a name="l00080"></a>00080 
-<a name="l00081"></a>00081     <span class="keywordtype">double</span>                  shift=0 ;
-<a name="l00082"></a>00082 
-<a name="l00083"></a>00083     cpl_frame           *   frm_spct=NULL ;
-<a name="l00084"></a>00084 
-<a name="l00085"></a>00085     cpl_propertylist    *   plist=NULL ;
-<a name="l00086"></a>00086 
-<a name="l00087"></a>00087     cpl_frame           *   product_frame=NULL;
-<a name="l00088"></a>00088     cpl_image * image_o=NULL;
-<a name="l00089"></a>00089     cpl_image * image_i=NULL;
-<a name="l00090"></a>00090     cpl_image * image_s=NULL;
-<a name="l00091"></a>00091 
-<a name="l00092"></a>00092     <span class="keywordtype">double</span>* sub_shift=NULL;
-<a name="l00093"></a>00093     <span class="comment">/* double * ker=NULL; */</span>
-<a name="l00094"></a>00094 
-<a name="l00095"></a>00095     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span>
-<a name="l00096"></a>00096     <span class="comment">/* --stropt */</span>
-<a name="l00097"></a>00097     name_o = <span class="stringliteral">"out_ima.fits"</span>;
-<a name="l00098"></a>00098  
-<a name="l00099"></a>00099     <span class="comment">/* --doubleopt */</span>
-<a name="l00100"></a>00100     check_nomsg(param = cpl_parameterlist_find(parlist, 
-<a name="l00101"></a>00101                                   <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method"</span>));
-<a name="l00102"></a>00102     check_nomsg(method = cpl_parameter_get_string(param));
-<a name="l00103"></a>00103 
-<a name="l00104"></a>00104 
-<a name="l00105"></a>00105     check_nomsg(param = cpl_parameterlist_find(parlist,
-<a name="l00106"></a>00106                          <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift"</span>));
-<a name="l00107"></a>00107     check_nomsg(shift = cpl_parameter_get_double(param));
-<a name="l00108"></a>00108   
-<a name="l00109"></a>00109    
-<a name="l00110"></a>00110     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span>
-<a name="l00111"></a>00111     check(frm_spct = cpl_frameset_find(framelist, 
-<a name="l00112"></a>00112                                    SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM),
-<a name="l00113"></a>00113                                    <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,
-<a name="l00114"></a>00114                                    SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM);
-<a name="l00115"></a>00115 
-<a name="l00116"></a>00116     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct), 
-<a name="l00117"></a>00117                         0),<span class="stringliteral">"Cannot read the FITS header"</span>) ;
-<a name="l00118"></a>00118    <span class="comment">/* Now performing the data reduction */</span>
-<a name="l00119"></a>00119     <span class="comment">/* Let's generate one image for the example */</span>
-<a name="l00120"></a>00120     check_nomsg(name_i = cpl_frame_get_filename(frm_spct));
-<a name="l00121"></a>00121     check_nomsg(image_i= cpl_image_load ((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0,0));  
-<a name="l00122"></a>00122     sub_shift = sinfo_new_doublearray(1);
-<a name="l00123"></a>00123     sinfo_new_doublearray_set_value(sub_shift, 0., 0);
-<a name="l00124"></a>00124     cknull(image_s = sinfo_new_shift_image_in_spec (image_i, shift, sub_shift),
-<a name="l00125"></a>00125          <span class="stringliteral">"error in sinfo_new_shift_image_in_spec()"</span>);
-<a name="l00126"></a>00126 
-<a name="l00127"></a>00127     shift = sinfo_new_doublearray_get_value(sub_shift, 0);
-<a name="l00128"></a>00128  
-<a name="l00129"></a>00129     <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"S"</span>)==0) {
-<a name="l00130"></a>00130 
-<a name="l00131"></a>00131        cknull(image_o = sinfo_new_fine_shift_image_in_spec_cubic_spline (
-<a name="l00132"></a>00132                        image_s, shift ),
-<a name="l00133"></a>00133                        <span class="stringliteral">"error in fine_shift_image_in_spec_cubic_spline()"</span>);
-<a name="l00134"></a>00134 
-<a name="l00135"></a>00135        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"P"</span>)==0) {
-<a name="l00136"></a>00136      cknull(image_o = sinfo_new_fine_shift_image_in_spec_poly(
-<a name="l00137"></a>00137                             image_s,shift,2),
-<a name="l00138"></a>00138                             <span class="stringliteral">"error in sinfo_fineShiftImageInSpecPoly()"</span>);
-<a name="l00139"></a>00139       <span class="comment">/*</span>
-<a name="l00140"></a>00140 <span class="comment">       } else if (strcmp (method, "T")==0) {</span>
-<a name="l00141"></a>00141 <span class="comment">      ker = sinfo_new_generate_interpolation_kernel("tanh");</span>
-<a name="l00142"></a>00142 <span class="comment">          cknull(image_o = sinfo_new_shift_image ( image_s, 0, shift, ker ),</span>
-<a name="l00143"></a>00143 <span class="comment">              "error in sinfo_new_fine_shift_image_in_spec_poly()");</span>
-<a name="l00144"></a>00144 <span class="comment">      */</span>
-<a name="l00145"></a>00145           <span class="comment">/* sinfo_new_destroy_doublearray(ker); */</span>
-<a name="l00146"></a>00146        }  <span class="keywordflow">else</span> {
-<a name="l00147"></a>00147           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong method %s"</span>,method);
-<a name="l00148"></a>00148           <span class="keywordflow">goto</span> cleanup;
-<a name="l00149"></a>00149        }
-<a name="l00150"></a>00150     
-<a name="l00151"></a>00151     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span>
-<a name="l00152"></a>00152     <span class="comment">/* Set the file name */</span>
-<a name="l00153"></a>00153 
-<a name="l00154"></a>00154     <span class="comment">/* Create product frame */</span>
-<a name="l00155"></a>00155     check_nomsg(product_frame = cpl_frame_new());
-<a name="l00156"></a>00156     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;
-<a name="l00157"></a>00157     check_nomsg(cpl_frame_set_tag(product_frame, 
-<a name="l00158"></a>00158                                 SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_PROSPECTRUM)) ;
-<a name="l00159"></a>00159     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));
-<a name="l00160"></a>00160     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;
-<a name="l00161"></a>00161     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL)) ;
-<a name="l00162"></a>00162 
-<a name="l00163"></a>00163     <span class="comment">/* Add DataFlow keywords */</span>
-<a name="l00164"></a>00164     <span class="comment">/*</span>
-<a name="l00165"></a>00165 <span class="comment">    check(cpl_dfs_setup_product_header(plist, product_frame, </span>
-<a name="l00166"></a>00166 <span class="comment">                                      framelist, parlist,</span>
-<a name="l00167"></a>00167 <span class="comment">                                      "si_sinfo_utl_spectrum_wavelength_shift", </span>
-<a name="l00168"></a>00168 <span class="comment">                                      "SINFONI", KEY_VALUE_HPRO_DID),</span>
-<a name="l00169"></a>00169 <span class="comment">        "Problem in the product DFS-compliance") ;</span>
-<a name="l00170"></a>00170 <span class="comment">    */</span>
-<a name="l00171"></a>00171    
-<a name="l00172"></a>00172    
-<a name="l00173"></a>00173     <span class="comment">/* Save the file */</span>
-<a name="l00174"></a>00174     check(cpl_image_save(image_o, name_o, CPL_BPP_IEEE_FLOAT, plist,
-<a name="l00175"></a>00175              CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);
-<a name="l00176"></a>00176     check_nomsg(cpl_frameset_insert(framelist, product_frame));
-<a name="l00177"></a>00177  cleanup:
-<a name="l00178"></a>00178     sinfo_free_image(&image_i);
-<a name="l00179"></a>00179     sinfo_free_image(&image_o);
-<a name="l00180"></a>00180     sinfo_free_image(&image_s);
-<a name="l00181"></a>00181     <span class="keywordflow">if</span>(sub_shift != NULL) sinfo_new_destroy_doublearray(sub_shift);
-<a name="l00182"></a>00182     sinfo_free_propertylist(&plist);
-<a name="l00183"></a>00183 
-<a name="l00184"></a>00184     <span class="keywordflow">if</span> (cpl_error_get_code()) 
-<a name="l00185"></a>00185         <span class="keywordflow">return</span> -1 ;
-<a name="l00186"></a>00186     <span class="keywordflow">else</span> 
-<a name="l00187"></a>00187         <span class="keywordflow">return</span> 0 ;
-<a name="l00188"></a>00188 }
-</pre></div></div>
-<hr size="1"/><address style="text-align: right;"><small>Generated on 22 Apr 2013 for SINFONI Pipeline Reference Manual by 
-<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">SINFONI Pipeline Reference Manual
+    <span id="projectnumber">2.4.0</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.1.1 -->
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_5817a01c6dda84cccc27ae90d5d981a9.html">sinfoni</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sinfoni/sinfo_utl_spectrum_wavelength_shift.c</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span> <span class="comment">/* $Id: sinfo_utl_spectrum_wavelength_shift.c,v 1.8 2012/03/03 10:17:31 amodigli Exp $</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span> <span class="comment"> * This file is part of the IIINSTRUMENT Pipeline</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span> <span class="comment"> * Copyright (C) 2002,2003 European Southern Observatory</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span> <span class="comment"> * (at your option) any later version.</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span> <span class="comment"> *</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span> <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span> </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span> <span class="comment">/*</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span> <span class="comment"> * $Author: amodigli $</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span> <span class="comment"> * $Date: 2012/03/03 10:17:31 $</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span> <span class="comment"> * $Revision: 1.8 $</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span> <span class="comment"> * $Name: sinfo-2_4_0 $</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span> <span class="comment"> */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span> </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span> <span class="preprocessor">#ifdef HAVE_CONFIG_H</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span> <span class="preprocessor"></span><span class="preprocessor">#  include <config.h></span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span> <span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span> <span class="preprocessor"></span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span> <span class="comment">                                Includes</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span> </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span> <span class="preprocessor">#include <string.h></span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span> </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span> <span class="preprocessor">#include "sinfo_utl_spectrum_wavelength_shift.h"</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span> <span class="preprocessor">#include "sinfo_spectrum_ops.h"</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span> <span class="preprocessor">#include "sinfo_shift_images.h"</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span> <span class="preprocessor">#include "sinfo_key_names.h"</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span> <span class="preprocessor">#include "sinfo_error.h"</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span> <span class="preprocessor">#include "sinfo_utils_wrappers.h"</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span> <span class="preprocessor">#include "sinfo_msg.h"</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span> <span class="comment">                            Functions prototypes</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span> <span class="comment">                            Static variables</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span> </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span> <span class="comment">/*-----------------------------------------------------------------------------</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span> <span class="comment">                                Functions code</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span> <span class="comment"> -----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span> </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span> <span class="comment">/*----------------------------------------------------------------------------*/</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span> <span class="keywordtype">int</span> sinfo_utl_spectrum_wavelength_shift(</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>         cpl_parameterlist   *   parlist, </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>         cpl_frameset        *   framelist)</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span> {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>     cpl_parameter       *   param =NULL;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   method =NULL;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_i =NULL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>     <span class="keyword">const</span> <span class="keywordtype">char</span>          *   name_o =NULL;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span> </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>     <span class="keywordtype">double</span>                  shift=0 ;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span> </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>     cpl_frame           *   frm_spct=NULL ;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span> </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>     cpl_propertylist    *   plist=NULL ;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span> </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>     cpl_frame           *   product_frame=NULL;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>     cpl_image * image_o=NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>     cpl_image * image_i=NULL;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>     cpl_image * image_s=NULL;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span> </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>     <span class="keywordtype">double</span>* sub_shift=NULL;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>     <span class="comment">/* double * ker=NULL; */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span> </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>     <span class="comment">/* HOW TO RETRIEVE INPUT PARAMETERS */</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>     <span class="comment">/* --stropt */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>     name_o = <span class="stringliteral">"out_ima.fits"</span>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>  </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>     <span class="comment">/* --doubleopt */</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>     check_nomsg(param = cpl_parameterlist_find(parlist, </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>                                   <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_arith.method"</span>));</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>     check_nomsg(method = cpl_parameter_get_string(param));</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span> </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span> </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>     check_nomsg(param = cpl_parameterlist_find(parlist,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>                          <span class="stringliteral">"sinfoni.sinfo_utl_spectrum_wavelength_shift.shift"</span>));</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>     check_nomsg(shift = cpl_parameter_get_double(param));</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>   </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>    </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>     <span class="comment">/* HOW TO ACCESS INPUT DATA */</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>     check(frm_spct = cpl_frameset_find(framelist, </div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>                                    SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM),</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>                                    <span class="stringliteral">"SOF does not have a file tagged as %s"</span>,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>                                    SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_SPECTRUM);</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span> </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>     check(plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct), </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>                         0),<span class="stringliteral">"Cannot read the FITS header"</span>) ;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>    <span class="comment">/* Now performing the data reduction */</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>     <span class="comment">/* Let's generate one image for the example */</span></div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>     check_nomsg(name_i = cpl_frame_get_filename(frm_spct));</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>     check_nomsg(image_i= cpl_image_load ((<span class="keywordtype">char</span>*)name_i,CPL_TYPE_FLOAT,0,0));  </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>     sub_shift = sinfo_new_doublearray(1);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>     sinfo_new_doublearray_set_value(sub_shift, 0., 0);</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>     cknull(image_s = sinfo_new_shift_image_in_spec (image_i, shift, sub_shift),</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>          <span class="stringliteral">"error in sinfo_new_shift_image_in_spec()"</span>);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span> </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>     shift = sinfo_new_doublearray_get_value(sub_shift, 0);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>  </div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>     <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"S"</span>)==0) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span> </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>        cknull(image_o = sinfo_new_fine_shift_image_in_spec_cubic_spline (</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>                        image_s, shift ),</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>                        <span class="stringliteral">"error in fine_shift_image_in_spec_cubic_spline()"</span>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span> </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(method,<span class="stringliteral">"P"</span>)==0) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>      cknull(image_o = sinfo_new_fine_shift_image_in_spec_poly(</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>                             image_s,shift,2),</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>                             <span class="stringliteral">"error in sinfo_fineShiftImageInSpecPoly()"</span>);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>       <span class="comment">/*</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span> <span class="comment">       } else if (strcmp (method, "T")==0) {</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span> <span class="comment">      ker = sinfo_new_generate_interpolation_kernel("tanh");</span></div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span> <span class="comment">          cknull(image_o = sinfo_new_shift_image ( image_s, 0, shift, ker ),</span></div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span> <span class="comment">              "error in sinfo_new_fine_shift_image_in_spec_poly()");</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span> <span class="comment">      */</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>           <span class="comment">/* sinfo_new_destroy_doublearray(ker); */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>        }  <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>           <a class="code" href="group__sinfo__msg.html#ga207c781e45c0904f20faa13fdf08c789" title="Print an error message.">sinfo_msg_error</a>(<span class="stringliteral">"wrong method %s"</span>,method);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>           <span class="keywordflow">goto</span> cleanup;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>        }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>     </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>     <span class="comment">/* HOW TO SAVE A PRODUCT ON DISK  */</span></div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>     <span class="comment">/* Set the file name */</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span> </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>     <span class="comment">/* Create product frame */</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>     check_nomsg(product_frame = cpl_frame_new());</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>     check_nomsg(cpl_frame_set_filename(product_frame, name_o)) ;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>     check_nomsg(cpl_frame_set_tag(product_frame, </div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>                                 SI_UTL_SPECTRUM_WAVELENGTH_SHIFT_PROSPECTRUM)) ;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>     check_nomsg(cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE));</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>     check_nomsg(cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT)) ;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>     check_nomsg(cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL)) ;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span> </div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>     <span class="comment">/* Add DataFlow keywords */</span></div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>     <span class="comment">/*</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span> <span class="comment">    check(cpl_dfs_setup_product_header(plist, product_frame, </span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span> <span class="comment">                                      framelist, parlist,</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span> <span class="comment">                                      "si_sinfo_utl_spectrum_wavelength_shift", </span></div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span> <span class="comment">                                      "SINFONI", KEY_VALUE_HPRO_DID),</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span> <span class="comment">        "Problem in the product DFS-compliance") ;</span></div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span> <span class="comment">    */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>    </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>    </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>     <span class="comment">/* Save the file */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>     check(cpl_image_save(image_o, name_o, CPL_BPP_IEEE_FLOAT, plist,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>              CPL_IO_DEFAULT),<span class="stringliteral">"Could not save product"</span>);</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>     check_nomsg(cpl_frameset_insert(framelist, product_frame));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>  cleanup:</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>     sinfo_free_image(&image_i);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>     sinfo_free_image(&image_o);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>     sinfo_free_image(&image_s);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>     <span class="keywordflow">if</span>(sub_shift != NULL) sinfo_new_destroy_doublearray(sub_shift);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>     sinfo_free_propertylist(&plist);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span> </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>     <span class="keywordflow">if</span> (cpl_error_get_code()) </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>         <span class="keywordflow">return</span> -1 ;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>     <span class="keywordflow">else</span> </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>         <span class="keywordflow">return</span> 0 ;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span> }</div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by  <a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.8.1.1
+</small></address>
 </body>
 </html>
diff --git a/html/tab_a.png b/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
Binary files /dev/null and b/html/tab_a.png differ
diff --git a/html/tab_b.gif b/html/tab_b.gif
deleted file mode 100644
index 0d62348..0000000
Binary files a/html/tab_b.gif and /dev/null differ
diff --git a/html/tab_b.png b/html/tab_b.png
new file mode 100644
index 0000000..258c141
Binary files /dev/null and b/html/tab_b.png differ
diff --git a/html/tab_h.png b/html/tab_h.png
new file mode 100644
index 0000000..4ca9102
Binary files /dev/null and b/html/tab_h.png differ
diff --git a/html/tab_l.gif b/html/tab_l.gif
deleted file mode 100644
index 9b1e633..0000000
Binary files a/html/tab_l.gif and /dev/null differ
diff --git a/html/tab_r.gif b/html/tab_r.gif
deleted file mode 100644
index ce9dd9f..0000000
Binary files a/html/tab_r.gif and /dev/null differ
diff --git a/html/tab_s.png b/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
Binary files /dev/null and b/html/tab_s.png differ
diff --git a/html/tabs.css b/html/tabs.css
index a444163..2192056 100644
--- a/html/tabs.css
+++ b/html/tabs.css
@@ -1,105 +1,59 @@
-/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
-
-DIV.tabs
-{
-   float            : left;
-   width            : 100%;
-   background       : url("tab_b.gif") repeat-x bottom;
-   margin-bottom    : 4px;
-}
-
-DIV.tabs UL
-{
-   margin           : 0px;
-   padding-left     : 10px;
-   list-style       : none;
-}
-
-DIV.tabs LI, DIV.tabs FORM
-{
-   display          : inline;
-   margin           : 0px;
-   padding          : 0px;
-}
-
-DIV.tabs FORM
-{
-   float            : right;
+.tabs, .tabs2, .tabs3 {
+    background-image: url('tab_b.png');
+    width: 100%;
+    z-index: 101;
+    font-size: 13px;
 }
 
-DIV.tabs A
-{
-   float            : left;
-   background       : url("tab_r.gif") no-repeat right top;
-   border-bottom    : 1px solid #84B0C7;
-   font-size        : 80%;
-   font-weight      : bold;
-   text-decoration  : none;
+.tabs2 {
+    font-size: 10px;
 }
-
-DIV.tabs A:hover
-{
-   background-position: 100% -150px;
+.tabs3 {
+    font-size: 9px;
 }
 
-DIV.tabs A:link, DIV.tabs A:visited,
-DIV.tabs A:active, DIV.tabs A:hover
-{
-       color: #1A419D;
+.tablist {
+    margin: 0;
+    padding: 0;
+    display: table;
 }
 
-DIV.tabs SPAN
-{
-   float            : left;
-   display          : block;
-   background       : url("tab_l.gif") no-repeat left top;
-   padding          : 5px 9px;
-   white-space      : nowrap;
+.tablist li {
+    float: left;
+    display: table-cell;
+    background-image: url('tab_b.png');
+    line-height: 36px;
+    list-style: none;
 }
 
-DIV.tabs #MSearchBox
-{
-   float            : right;
-   display          : inline;
-   font-size        : 1em;
-}
-
-DIV.tabs TD
-{
-   font-size        : 80%;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-DIV.tabs SPAN {float : none;}
-/* End IE5-Mac hack */
-
-DIV.tabs A:hover SPAN
-{
-   background-position: 0% -150px;
+.tablist a {
+    display: block;
+    padding: 0 20px;
+    font-weight: bold;
+    background-image:url('tab_s.png');
+    background-repeat:no-repeat;
+    background-position:right;
+    color: #283A5D;
+    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+    text-decoration: none;
+    outline: none;
 }
 
-DIV.tabs LI.current A
-{
-   background-position: 100% -150px;
-   border-width     : 0px;
+.tabs3 .tablist a {
+    padding: 0 10px;
 }
 
-DIV.tabs LI.current SPAN
-{
-   background-position: 0% -150px;
-   padding-bottom   : 6px;
+.tablist a:hover {
+    background-image: url('tab_h.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+    text-decoration: none;
 }
 
-DIV.navpath
-{
-   background       : none;
-   border           : none;
-   border-bottom    : 1px solid #84B0C7;
-   text-align       : center;
-   margin           : 2px;
-   padding          : 2px;
+.tablist li.current a {
+    background-image: url('tab_a.png');
+    background-repeat:repeat-x;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
 }
diff --git a/irplib/Makefile.in b/irplib/Makefile.in
index eed3f9f..8a668ee 100644
--- a/irplib/Makefile.in
+++ b/irplib/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -90,6 +107,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -111,6 +133,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(pkgincludedir)"
 HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
@@ -166,6 +194,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -206,6 +235,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -218,6 +248,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -240,6 +271,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -275,7 +307,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -298,6 +329,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 DISTCLEANFILES = *~
 SUBDIRS = . tests
@@ -397,7 +430,7 @@ clean-noinstLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libirplib.la: $(libirplib_la_OBJECTS) $(libirplib_la_DEPENDENCIES) 
+libirplib.la: $(libirplib_la_OBJECTS) $(libirplib_la_DEPENDENCIES) $(EXTRA_libirplib_la_DEPENDENCIES) 
 	$(libirplib_la_LINK)  $(libirplib_la_OBJECTS) $(libirplib_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -456,8 +489,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -471,9 +507,7 @@ uninstall-pkgincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -482,7 +516,7 @@ uninstall-pkgincludeHEADERS:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -507,7 +541,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -642,13 +676,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -686,10 +717,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/irplib/irplib_calib.c b/irplib/irplib_calib.c
index 4792cf3..f94e585 100644
--- a/irplib/irplib_calib.c
+++ b/irplib/irplib_calib.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2013/03/01 10:26:22 $
  * $Revision: 1.19 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_calib.h b/irplib/irplib_calib.h
index 59a0c5d..3bf7844 100644
--- a/irplib/irplib_calib.h
+++ b/irplib/irplib_calib.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/02/12 10:34:51 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_CALIB_H
diff --git a/irplib/irplib_cat.c b/irplib/irplib_cat.c
index 060eb5d..29a2d97 100644
--- a/irplib/irplib_cat.c
+++ b/irplib/irplib_cat.c
@@ -22,7 +22,7 @@
  * $Author: cgarcia $
  * $Date: 2009/12/01 12:34:25 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_cat.h b/irplib/irplib_cat.h
index 7dc6eaf..24c84e3 100644
--- a/irplib/irplib_cat.h
+++ b/irplib/irplib_cat.h
@@ -22,7 +22,7 @@
  * $Author: cgarcia $
  * $Date: 2009/12/16 14:49:52 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_CAT_H
diff --git a/irplib/irplib_distortion.c b/irplib/irplib_distortion.c
index 5e15391..16ea4a7 100644
--- a/irplib/irplib_distortion.c
+++ b/irplib/irplib_distortion.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.52 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_distortion.h b/irplib/irplib_distortion.h
index 8d07995..c76dbb3 100644
--- a/irplib/irplib_distortion.h
+++ b/irplib/irplib_distortion.h
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_DISTORTION_H
diff --git a/irplib/irplib_flat.c b/irplib/irplib_flat.c
index 9837769..5f8e050 100644
--- a/irplib/irplib_flat.c
+++ b/irplib/irplib_flat.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2007/08/07 12:15:41 $
  * $Revision: 1.15 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_flat.h b/irplib/irplib_flat.h
index 2fc2fb1..90b1915 100644
--- a/irplib/irplib_flat.h
+++ b/irplib/irplib_flat.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2005/09/15 11:47:16 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_FLAT_H
diff --git a/irplib/irplib_framelist.c b/irplib/irplib_framelist.c
index 810da08..e367fb2 100644
--- a/irplib/irplib_framelist.c
+++ b/irplib/irplib_framelist.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/02/27 16:05:13 $
  * $Revision: 1.30 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
diff --git a/irplib/irplib_framelist.h b/irplib/irplib_framelist.h
index 8edca2c..4e2d22f 100644
--- a/irplib/irplib_framelist.h
+++ b/irplib/irplib_framelist.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2008/11/20 10:24:47 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_FRAMELIST_H
diff --git a/irplib/irplib_hist.c b/irplib/irplib_hist.c
index bf86213..1c2a46d 100644
--- a/irplib/irplib_hist.c
+++ b/irplib/irplib_hist.c
@@ -20,11 +20,11 @@
  */
 
 /*
- * $Author: kmirny $
- * $Id: irplib_hist.c,v 1.7 2009/10/15 14:02:18 kmirny Exp $
- * $Date: 2009/10/15 14:02:18 $
- * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Author: jtaylor $
+ * $Id: irplib_hist.c,v 1.8 2013/07/04 12:10:12 jtaylor Exp $
+ * $Date: 2013/07/04 12:10:12 $
+ * $Revision: 1.8 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -218,7 +218,7 @@ irplib_hist_fill(irplib_hist     * hist,
     for (i = 0; i < nsamples; i++)
     {
     	int pos = 0;
-    	if(bpm_data && bpm_data[i] == CPL_BINARY_1)
+        if(bpm_data && bpm_data[i] != CPL_BINARY_0)
     	{
     		continue;
     	}
diff --git a/irplib/irplib_hist.h b/irplib/irplib_hist.h
index 5b34eed..232d4cf 100644
--- a/irplib/irplib_hist.h
+++ b/irplib/irplib_hist.h
@@ -22,7 +22,7 @@
  * $Author: lbilbao $
  * $Date: 2007/09/07 14:23:50 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_HIST_H
diff --git a/irplib/irplib_ksigma_clip.c b/irplib/irplib_ksigma_clip.c
index bad97b2..ce47be7 100644
--- a/irplib/irplib_ksigma_clip.c
+++ b/irplib/irplib_ksigma_clip.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2011/11/02 13:18:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_ksigma_clip.h b/irplib/irplib_ksigma_clip.h
index e45ce99..993ed43 100644
--- a/irplib/irplib_ksigma_clip.h
+++ b/irplib/irplib_ksigma_clip.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2011/11/02 13:18:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_KSIGMA_CLIP_H
diff --git a/irplib/irplib_ksigma_clip_body.h b/irplib/irplib_ksigma_clip_body.h
index 0e21107..96dee17 100644
--- a/irplib/irplib_ksigma_clip_body.h
+++ b/irplib/irplib_ksigma_clip_body.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2011/11/02 13:18:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #define TYPE_ADD(a) CONCAT2X(a, CPL_TYPE)
diff --git a/irplib/irplib_match_cats.c b/irplib/irplib_match_cats.c
index bc18c77..78b3a49 100644
--- a/irplib/irplib_match_cats.c
+++ b/irplib/irplib_match_cats.c
@@ -22,7 +22,7 @@
  * $Author: cgarcia $
  * $Date: 2009/12/18 10:44:48 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_match_cats.h b/irplib/irplib_match_cats.h
index 707ec96..c2318c2 100644
--- a/irplib/irplib_match_cats.h
+++ b/irplib/irplib_match_cats.h
@@ -22,7 +22,7 @@
  * $Author: cgarcia $
  * $Date: 2009/12/18 10:44:48 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_MATCH_CATS_H
diff --git a/irplib/irplib_mkmaster.c b/irplib/irplib_mkmaster.c
index 9a4e08a..40dedec 100644
--- a/irplib/irplib_mkmaster.c
+++ b/irplib/irplib_mkmaster.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/02/27 16:00:51 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_mkmaster.h b/irplib/irplib_mkmaster.h
index 8c3a99d..d791861 100644
--- a/irplib/irplib_mkmaster.h
+++ b/irplib/irplib_mkmaster.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2011/11/02 13:17:25 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_MKMASTER_H
diff --git a/irplib/irplib_oddeven.c b/irplib/irplib_oddeven.c
index f410fd1..d05e8ff 100644
--- a/irplib/irplib_oddeven.c
+++ b/irplib/irplib_oddeven.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/01/12 11:50:41 $
  * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_oddeven.h b/irplib/irplib_oddeven.h
index 8421d5e..90840e9 100644
--- a/irplib/irplib_oddeven.h
+++ b/irplib/irplib_oddeven.h
@@ -22,7 +22,7 @@
  * $Author: yjung $
  * $Date: 2006/10/06 20:46:04 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_ODDEVEN_H
diff --git a/irplib/irplib_plugin.c b/irplib/irplib_plugin.c
index 521adb7..51c6a80 100644
--- a/irplib/irplib_plugin.c
+++ b/irplib/irplib_plugin.c
@@ -1,4 +1,4 @@
-/* $Id: irplib_plugin.c,v 1.39 2012/02/03 14:19:06 llundin Exp $
+/* $Id: irplib_plugin.c,v 1.40 2013/08/22 17:44:56 cgarcia Exp $
  *
  * This file is part of the irplib package 
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -19,10 +19,10 @@
  */
 
 /*
- * $Author: llundin $
- * $Date: 2012/02/03 14:19:06 $
- * $Revision: 1.39 $
- * $Name: sinfo-2_3_3 $
+ * $Author: cgarcia $
+ * $Date: 2013/08/22 17:44:56 $
+ * $Revision: 1.40 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
@@ -1023,13 +1023,16 @@ static void recipe_frameset_load(cpl_frameset * set, const char *name)
     /* Loop over all the lines in the set-of-frames file */
     for (line_number = 0; fgets(line, LINE_LEN_MAX - 1, fp); line_number++) {
 
+        char scan_fmt[50];
         cpl_frame_group grp;
         cpl_frame * frame;
         int n;
 
         if (line[0] == '#') continue;
 
-        n = sscanf(line, "%s %s %s", path, tag, group);
+        snprintf(scan_fmt, 49, "%%%ds %%%ds %%%ds", LINE_LEN_MAX - 1,
+                 LINE_LEN_MAX - 1, LINE_LEN_MAX - 1); 
+        n = sscanf(line, scan_fmt, path, tag, group);
 
         if (n < 1) {
             cpl_msg_warning(cpl_func, "Spurious line no. %d in %s: %s",
diff --git a/irplib/irplib_plugin.h b/irplib/irplib_plugin.h
index 9e12640..e5a74f8 100644
--- a/irplib/irplib_plugin.h
+++ b/irplib/irplib_plugin.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/01/11 08:03:37 $
  * $Revision: 1.23 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_PLUGIN_H
diff --git a/irplib/irplib_polynomial.c b/irplib/irplib_polynomial.c
index 04df4ba..66a2dca 100644
--- a/irplib/irplib_polynomial.c
+++ b/irplib/irplib_polynomial.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.35 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_polynomial.h b/irplib/irplib_polynomial.h
index cea1c13..53ce57f 100644
--- a/irplib/irplib_polynomial.h
+++ b/irplib/irplib_polynomial.h
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_POLYNOMIAL_H
diff --git a/irplib/irplib_ppm.c b/irplib/irplib_ppm.c
index 5c30b1e..7660386 100644
--- a/irplib/irplib_ppm.c
+++ b/irplib/irplib_ppm.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/06/11 07:24:09 $
  * $Revision: 1.31 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_ppm.h b/irplib/irplib_ppm.h
index d19e7b9..5a1286d 100644
--- a/irplib/irplib_ppm.h
+++ b/irplib/irplib_ppm.h
@@ -22,7 +22,7 @@
  * $Author: yjung $
  * $Date: 2007/07/23 09:27:07 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_PPM_H
diff --git a/irplib/irplib_slitpos.c b/irplib/irplib_slitpos.c
index 3ab07dd..7005f19 100644
--- a/irplib/irplib_slitpos.c
+++ b/irplib/irplib_slitpos.c
@@ -1,4 +1,4 @@
-/* $Id: irplib_slitpos.c,v 1.30 2011/11/23 13:58:45 yjung Exp $
+/* $Id: irplib_slitpos.c,v 1.31 2013/07/04 12:10:12 jtaylor Exp $
  *
  * This file is part of the irplib package
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -19,10 +19,10 @@
  */
 
 /*
- * $Author: yjung $
- * $Date: 2011/11/23 13:58:45 $
- * $Revision: 1.30 $
- * $Name: sinfo-2_3_3 $
+ * $Author: jtaylor $
+ * $Date: 2013/07/04 12:10:12 $
+ * $Revision: 1.31 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -456,7 +456,7 @@ cpl_error_code irplib_slitpos_find_vert_slit_ends(const cpl_image * self,
 #else
 
     itop = npix - 1;
-    while (itop > ibot && pbinary[itop] != CPL_BINARY_1) itop--;
+    while (itop > ibot && pbinary[itop] == CPL_BINARY_0) itop--;
 
 #endif
 
diff --git a/irplib/irplib_slitpos.h b/irplib/irplib_slitpos.h
index 3d8bd0b..6607934 100644
--- a/irplib/irplib_slitpos.h
+++ b/irplib/irplib_slitpos.h
@@ -22,7 +22,7 @@
  * $Author: yjung $
  * $Date: 2006/11/29 13:22:59 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_SLITPOS_H
diff --git a/irplib/irplib_spectrum.c b/irplib/irplib_spectrum.c
index a44d1bb..2a03209 100644
--- a/irplib/irplib_spectrum.c
+++ b/irplib/irplib_spectrum.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/01/12 11:50:41 $
  * $Revision: 1.29 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_spectrum.h b/irplib/irplib_spectrum.h
index 7280b5e..b08bce3 100644
--- a/irplib/irplib_spectrum.h
+++ b/irplib/irplib_spectrum.h
@@ -22,7 +22,7 @@
  * $Author: yjung $
  * $Date: 2009/07/30 12:38:37 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_SPECTRUM_H
diff --git a/irplib/irplib_stdstar.c b/irplib/irplib_stdstar.c
index ec74986..d8bee99 100644
--- a/irplib/irplib_stdstar.c
+++ b/irplib/irplib_stdstar.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2013/03/01 10:27:07 $
  * $Revision: 1.45 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_stdstar.h b/irplib/irplib_stdstar.h
index 343d32b..28327d0 100644
--- a/irplib/irplib_stdstar.h
+++ b/irplib/irplib_stdstar.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2013/02/27 10:37:52 $
  * $Revision: 1.16 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_STDSTAR_H
diff --git a/irplib/irplib_strehl.c b/irplib/irplib_strehl.c
index 0328f86..6ea14b3 100644
--- a/irplib/irplib_strehl.c
+++ b/irplib/irplib_strehl.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2009/11/18 21:37:48 $
  * $Revision: 1.43 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_strehl.h b/irplib/irplib_strehl.h
index 40d38b2..f4061e7 100644
--- a/irplib/irplib_strehl.h
+++ b/irplib/irplib_strehl.h
@@ -22,7 +22,7 @@
  * $Author: kmirny $
  * $Date: 2009/06/29 14:32:53 $
  * $Revision: 1.12 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_STREHL_H
diff --git a/irplib/irplib_utils.c b/irplib/irplib_utils.c
index e166c28..dffffcf 100644
--- a/irplib/irplib_utils.c
+++ b/irplib/irplib_utils.c
@@ -1,4 +1,4 @@
-/* $Id: irplib_utils.c,v 1.82 2013/02/27 16:00:29 jtaylor Exp $
+/* $Id: irplib_utils.c,v 1.85 2013/07/04 12:10:55 jtaylor Exp $
  *
  * This file is part of the irplib package
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: jtaylor $
- * $Date: 2013/02/27 16:00:29 $
- * $Revision: 1.82 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/07/04 12:10:55 $
+ * $Revision: 1.85 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -34,12 +34,14 @@
  -----------------------------------------------------------------------------*/
 #include "irplib_utils.h"
 
+#include <cpl.h>
 #include <math.h>
 
 #include <string.h>
 #include <assert.h>
+#include <stdlib.h>
+#include <errno.h>
 
-#include <cpl.h>
 
 
 /*-----------------------------------------------------------------------------
@@ -61,14 +63,6 @@
                            Missing Function Prototypes
  -----------------------------------------------------------------------------*/
 
-#if defined HAVE_ISNAN && HAVE_ISNAN != 0
-#if !defined isnan && defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 0
-/* HP-UX and Solaris may have isnan() available at link-time
-   without the prototype */
-int isnan(double);
-#endif
-#endif
-
 /*-----------------------------------------------------------------------------
                            Private Function Prototypes
  -----------------------------------------------------------------------------*/
@@ -1290,34 +1284,6 @@ cpl_error_code irplib_apertures_find_max_flux(const cpl_apertures * self,
 
 }
 
-/*----------------------------------------------------------------------------*/
-/**
-   @brief   portable isinf
- */
-/*----------------------------------------------------------------------------*/
-int irplib_isinf(double value)
-{
-#if defined HAVE_ISINF && HAVE_ISINF
-    return isinf(value);
-#else
-    return value != 0 && value == 2 * value;
-#endif
-}
-
-/*----------------------------------------------------------------------------*/
-/**
-   @brief   portable isnan
- */
-/*----------------------------------------------------------------------------*/
-int irplib_isnan(double value)
-{
-#if defined HAVE_ISNAN && HAVE_ISNAN
-    return isnan(value);
-#else
-    return value != value;
-#endif
-}
-
 /**@}*/
 
 
@@ -1587,21 +1553,128 @@ cpl_error_code irplib_frameset_sort(const cpl_frameset *  self, int* iindex, dou
 
 static double frame_get_exptime(const cpl_frame * pframe)
 {
-    cpl_propertylist       *plist = 0;
-    double                  dval = 0;
+    double dval = 0;
+    cpl_propertylist * plist =
+        cpl_propertylist_load_regexp(cpl_frame_get_filename(pframe), 0,
+                                     "EXPTIME", CPL_FALSE);
+    if(plist) {
+        dval = cpl_propertylist_get_double(plist, "EXPTIME");
+        if (cpl_error_get_code() != CPL_ERROR_NONE) {
+            cpl_msg_error(cpl_func, "error during reading EXPTIME key from "
+                          "the frame [%s]", cpl_frame_get_filename(pframe));
+        }
+    }
+    /* Free and return */
+    cpl_propertylist_delete(plist);
+    return dval;
+}
 
-    plist = cpl_propertylist_load(cpl_frame_get_filename(pframe),0);
-	if(plist)
-	{
-      cpl_error_code err = CPL_ERROR_NONE;  
-	    dval = cpl_propertylist_get_double(plist, "EXPTIME");
-       err = cpl_error_get_code();
-       if (err != CPL_ERROR_NONE)
-       {
-         cpl_msg_error(cpl_func, "error during reading EXPTIME key from the frame [%s]", cpl_frame_get_filename(pframe));
-       }
-	}
-	/* Free and return */
-	cpl_propertylist_delete(plist);
-	return dval;
+
+/*----------------------------------------------------------------------------*/
+/**
+  @brief    allocate uninitialized aligned memory
+  @param    alignment alignment of the data, must be a power of two
+  @param    size      size of the memory block to be allocated in bytes
+  @return   pointer to aligned memory or on failure returns NULL and sets errno
+  @see irplib_aligned_free
+  @note memory MUST be free'd with irplib_aligned_free and cannot be realloc'd
+        memory leaks will not be detected by cpl
+        It is recommended to build with posix 2001 to get posix_memalign and add
+        AC_CHECK_FUNCS([posix_memalign]) and AC_CHECK_DECLS([posix_memalign]) to
+        configure.ac
+
+ */
+/*----------------------------------------------------------------------------*/
+void * irplib_aligned_malloc(size_t alignment, size_t size)
+{
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L
+    return aligned_alloc(alignment, size);
+#elif defined HAVE_POSIX_MEMALIGN && defined HAVE_DECL_POSIX_MEMALIGN
+    void *ptr;
+    if (alignment == 1)
+        return malloc (size);
+    if (alignment == 2 || (sizeof (void *) == 8 && alignment == 4))
+        alignment = sizeof (void *);
+    if (posix_memalign (&ptr, alignment, size) == 0)
+        return ptr;
+    else
+        return NULL;
+#else
+    /* copied from gmm_malloc.h in gcc-4.8 */
+    void * malloc_ptr;
+    void * aligned_ptr;
+
+    /* Error if align is not a power of two.  */
+    if (alignment & (alignment - 1)) {
+        errno = EINVAL;
+        return NULL;
+    }
+
+    if (size == 0)
+        return NULL;
+
+    /* Assume malloc'd pointer is aligned at least to sizeof (void*).
+       If necessary, add another sizeof (void*) to store the value
+       returned by malloc. Effectively this enforces a minimum alignment
+       of sizeof double. */
+    if (alignment < 2 * sizeof (void *))
+        alignment = 2 * sizeof (void *);
+
+    malloc_ptr = malloc (size + alignment);
+    if (!malloc_ptr)
+        return NULL;
+
+    /* Align  We have at least sizeof (void *) space below malloc'd ptr. */
+    aligned_ptr = (void *) (((size_t) malloc_ptr + alignment)
+                            & ~((size_t) (alignment) - 1));
+
+    /* Store the original pointer just before p.  */
+    *(((void **) aligned_ptr) - 1) = malloc_ptr;
+
+    return aligned_ptr;
+#endif
+}
+
+
+/*----------------------------------------------------------------------------*/
+/**
+  @brief    allocate aligned memory initialized to zero
+  @param    alignment alignment of the data, must be a power of two
+  @param    nelem     number of elements in buffer
+  @param    nbytes    size of single element in bytes
+  @return   pointer to aligned memory or on failure returns NULL and sets errno
+  @see irplib_aligned_malloc
+
+ */
+/*----------------------------------------------------------------------------*/
+void * irplib_aligned_calloc(size_t alignment, size_t nelem, size_t nbytes)
+{
+    void * buffer = irplib_aligned_malloc(alignment, nelem * nbytes);
+    if (buffer == NULL)
+        return NULL;
+    /* cast to aligned pointer helps compilers to emit better (builtin) code */
+    memset((size_t *)buffer, 0, nelem * nbytes);
+    return buffer;
+}
+
+
+/*----------------------------------------------------------------------------*/
+/**
+  @brief    free aligned memory
+  @param    aligned_ptr    pointer to memory to be free'd
+  @see irplib_aligned_malloc
+  @note memory MUST be allocated with irplib_aligned_[cm]alloc
+
+ */
+/*----------------------------------------------------------------------------*/
+void irplib_aligned_free (void * aligned_ptr)
+{
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L
+  free(aligned_ptr);
+#elif defined HAVE_POSIX_MEMALIGN && defined HAVE_DECL_POSIX_MEMALIGN
+  free(aligned_ptr);
+#else
+  if (aligned_ptr)
+      free (*(((void **) aligned_ptr) - 1));
+#endif
 }
diff --git a/irplib/irplib_utils.h b/irplib/irplib_utils.h
index 60f3ba5..0b1f87a 100644
--- a/irplib/irplib_utils.h
+++ b/irplib/irplib_utils.h
@@ -1,4 +1,4 @@
-/* $Id: irplib_utils.h,v 1.57 2013/02/27 16:02:02 jtaylor Exp $
+/* $Id: irplib_utils.h,v 1.60 2013/08/21 14:55:14 cgarcia Exp $
  *
  * This file is part of the irplib package
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -19,11 +19,22 @@
  */
 
 /*
- * $Author: jtaylor $
- * $Date: 2013/02/27 16:02:02 $
- * $Revision: 1.57 $
- * $Name: sinfo-2_3_3 $
+ * $Author: cgarcia $
+ * $Date: 2013/08/21 14:55:14 $
+ * $Revision: 1.60 $
+ * $Name: sinfo-2_4_0 $
  * $Log: irplib_utils.h,v $
+ * Revision 1.60  2013/08/21 14:55:14  cgarcia
+ * Include math.h for declaration of isinf and isnan to avoid compiler warning
+ *
+ * Revision 1.59  2013/03/15 09:06:06  jtaylor
+ * add irplib_aligned_{[mc]alloc,free}
+ *
+ * allow portable allocation of aligned memory for vectorization
+ *
+ * Revision 1.58  2013/03/15 09:05:28  jtaylor
+ * move isnan and isinf to header so it is inlineable and use gcc builtin for better performance
+ *
  * Revision 1.57  2013/02/27 16:02:02  jtaylor
  * add diagnostic pragma macros
  *
@@ -59,7 +70,7 @@
  -----------------------------------------------------------------------------*/
 
 #include <cpl.h>
-
+#include <math.h>
 #include <stdarg.h>
 
 /*-----------------------------------------------------------------------------
@@ -69,6 +80,13 @@
 #define IRPLIB_XSTRINGIFY(TOSTRING) #TOSTRING
 #define IRPLIB_STRINGIFY(TOSTRING) IRPLIB_XSTRINGIFY(TOSTRING)
 
+#if !defined __GNUC__ && !defined __inline__
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+#define __inline__ inline
+#else
+#define __inline__
+#endif
+#endif
 
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
 #define IRPLIB_DIAG_PRAGMA_PUSH_IGN(x)        \
@@ -421,8 +439,13 @@ const cpl_frame * irplib_frameset_get_first_from_group(const cpl_frameset *,
 cpl_error_code irplib_apertures_find_max_flux(const cpl_apertures *, int *,
                                               int);
 
-int irplib_isinf(double value);
-int irplib_isnan(double value);
+#if defined HAVE_ISNAN && HAVE_ISNAN != 0
+#if !defined isnan && defined HAVE_DECL_ISNAN && HAVE_DECL_ISNAN == 0
+/* HP-UX and Solaris may have isnan() available at link-time
+   without the prototype */
+int isnan(double);
+#endif
+#endif
 
 cpl_error_code
 irplib_dfs_table_convert(cpl_table *, cpl_frameset *, const cpl_frameset *,
@@ -483,4 +506,52 @@ cpl_error_code irplib_frameset_sort(
         int* iindex,
         double* exptime);
 
+
+/* FIXME: add alloc_size(2) */
+void * irplib_aligned_malloc(size_t alignment, size_t size) CPL_ATTR_ALLOC;
+void * irplib_aligned_calloc(size_t alignment,
+                             size_t nelem, size_t nbytes) CPL_ATTR_ALLOC;
+void irplib_aligned_free (void * aligned_ptr);
+
+
+/*-----------------------------------------------------------------------------
+                                   Function inlines
+ -----------------------------------------------------------------------------*/
+
+
+/*----------------------------------------------------------------------------*/
+/**
+   @brief   portable isinf
+ */
+/*----------------------------------------------------------------------------*/
+static __inline__ int irplib_isinf(double value)
+{
+/* documented only on 4.4, but available in at least 4.2 */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+    return __builtin_isinf(value);
+#elif defined HAVE_ISINF && HAVE_ISINF
+    return isinf(value);
+#else
+    return value != 0 && value == 2 * value;
+#endif
+}
+
+
+/*----------------------------------------------------------------------------*/
+/**
+   @brief   portable isnan
+ */
+/*----------------------------------------------------------------------------*/
+static __inline__ int irplib_isnan(double value)
+{
+/* documented only on 4.4, but available in at least 4.2 */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+    return __builtin_isnan(value);
+#elif defined HAVE_ISNAN && HAVE_ISNAN
+    return isnan(value);
+#else
+    return value != value;
+#endif
+}
+
 #endif
diff --git a/irplib/irplib_wavecal.c b/irplib/irplib_wavecal.c
index ddeaa91..1b62369 100644
--- a/irplib/irplib_wavecal.c
+++ b/irplib/irplib_wavecal.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/08/03 21:05:32 $
  * $Revision: 1.52 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_wavecal.h b/irplib/irplib_wavecal.h
index f334271..8d94f25 100644
--- a/irplib/irplib_wavecal.h
+++ b/irplib/irplib_wavecal.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/08/03 21:05:33 $
  * $Revision: 1.18 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_WAVECAL_H
diff --git a/irplib/irplib_wavecal_impl.h b/irplib/irplib_wavecal_impl.h
index 41e4715..004931c 100644
--- a/irplib/irplib_wavecal_impl.h
+++ b/irplib/irplib_wavecal_impl.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2012/08/03 21:05:34 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_WAVECAL_IMPL_H
diff --git a/irplib/irplib_wcs.c b/irplib/irplib_wcs.c
index 6c82253..597457d 100644
--- a/irplib/irplib_wcs.c
+++ b/irplib/irplib_wcs.c
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2010/10/07 14:10:55 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_wcs.h b/irplib/irplib_wcs.h
index 4adb6ad..ddc3a47 100644
--- a/irplib/irplib_wcs.h
+++ b/irplib/irplib_wcs.h
@@ -22,7 +22,7 @@
  * $Author: llundin $
  * $Date: 2010/10/07 14:10:55 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_WCS_H
diff --git a/irplib/irplib_wlxcorr.c b/irplib/irplib_wlxcorr.c
index 4d07615..33d9f6e 100644
--- a/irplib/irplib_wlxcorr.c
+++ b/irplib/irplib_wlxcorr.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.58 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/irplib/irplib_wlxcorr.h b/irplib/irplib_wlxcorr.h
index 5b5ae24..c516878 100644
--- a/irplib/irplib_wlxcorr.h
+++ b/irplib/irplib_wlxcorr.h
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.22 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef IRPLIB_WLXCORR_H
diff --git a/irplib/tests/Makefile.in b/irplib/tests/Makefile.in
index 195ffb6..38bc1e5 100644
--- a/irplib/tests/Makefile.in
+++ b/irplib/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -133,6 +150,11 @@ DIST_SOURCES = $(irplib_cat_test_SOURCES) \
 	$(irplib_plugin_test_SOURCES) \
 	$(irplib_polynomial_test_SOURCES) $(irplib_utils_test_SOURCES) \
 	$(irplib_wcs_test_SOURCES) $(irplib_wlxcorr_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -154,6 +176,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(pkgincludedir)"
 HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
 ETAGS = etags
@@ -180,6 +208,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -220,6 +249,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -232,6 +262,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -254,6 +285,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -289,7 +321,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -312,6 +343,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 DISTCLEANFILES = *~
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = Makefile.in
@@ -395,28 +428,28 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-irplib_cat-test$(EXEEXT): $(irplib_cat_test_OBJECTS) $(irplib_cat_test_DEPENDENCIES) 
+irplib_cat-test$(EXEEXT): $(irplib_cat_test_OBJECTS) $(irplib_cat_test_DEPENDENCIES) $(EXTRA_irplib_cat_test_DEPENDENCIES) 
 	@rm -f irplib_cat-test$(EXEEXT)
 	$(irplib_cat_test_LINK) $(irplib_cat_test_OBJECTS) $(irplib_cat_test_LDADD) $(LIBS)
-irplib_framelist-test$(EXEEXT): $(irplib_framelist_test_OBJECTS) $(irplib_framelist_test_DEPENDENCIES) 
+irplib_framelist-test$(EXEEXT): $(irplib_framelist_test_OBJECTS) $(irplib_framelist_test_DEPENDENCIES) $(EXTRA_irplib_framelist_test_DEPENDENCIES) 
 	@rm -f irplib_framelist-test$(EXEEXT)
 	$(irplib_framelist_test_LINK) $(irplib_framelist_test_OBJECTS) $(irplib_framelist_test_LDADD) $(LIBS)
-irplib_hist-test$(EXEEXT): $(irplib_hist_test_OBJECTS) $(irplib_hist_test_DEPENDENCIES) 
+irplib_hist-test$(EXEEXT): $(irplib_hist_test_OBJECTS) $(irplib_hist_test_DEPENDENCIES) $(EXTRA_irplib_hist_test_DEPENDENCIES) 
 	@rm -f irplib_hist-test$(EXEEXT)
 	$(irplib_hist_test_LINK) $(irplib_hist_test_OBJECTS) $(irplib_hist_test_LDADD) $(LIBS)
-irplib_plugin-test$(EXEEXT): $(irplib_plugin_test_OBJECTS) $(irplib_plugin_test_DEPENDENCIES) 
+irplib_plugin-test$(EXEEXT): $(irplib_plugin_test_OBJECTS) $(irplib_plugin_test_DEPENDENCIES) $(EXTRA_irplib_plugin_test_DEPENDENCIES) 
 	@rm -f irplib_plugin-test$(EXEEXT)
 	$(irplib_plugin_test_LINK) $(irplib_plugin_test_OBJECTS) $(irplib_plugin_test_LDADD) $(LIBS)
-irplib_polynomial-test$(EXEEXT): $(irplib_polynomial_test_OBJECTS) $(irplib_polynomial_test_DEPENDENCIES) 
+irplib_polynomial-test$(EXEEXT): $(irplib_polynomial_test_OBJECTS) $(irplib_polynomial_test_DEPENDENCIES) $(EXTRA_irplib_polynomial_test_DEPENDENCIES) 
 	@rm -f irplib_polynomial-test$(EXEEXT)
 	$(irplib_polynomial_test_LINK) $(irplib_polynomial_test_OBJECTS) $(irplib_polynomial_test_LDADD) $(LIBS)
-irplib_utils-test$(EXEEXT): $(irplib_utils_test_OBJECTS) $(irplib_utils_test_DEPENDENCIES) 
+irplib_utils-test$(EXEEXT): $(irplib_utils_test_OBJECTS) $(irplib_utils_test_DEPENDENCIES) $(EXTRA_irplib_utils_test_DEPENDENCIES) 
 	@rm -f irplib_utils-test$(EXEEXT)
 	$(irplib_utils_test_LINK) $(irplib_utils_test_OBJECTS) $(irplib_utils_test_LDADD) $(LIBS)
-irplib_wcs-test$(EXEEXT): $(irplib_wcs_test_OBJECTS) $(irplib_wcs_test_DEPENDENCIES) 
+irplib_wcs-test$(EXEEXT): $(irplib_wcs_test_OBJECTS) $(irplib_wcs_test_DEPENDENCIES) $(EXTRA_irplib_wcs_test_DEPENDENCIES) 
 	@rm -f irplib_wcs-test$(EXEEXT)
 	$(irplib_wcs_test_LINK) $(irplib_wcs_test_OBJECTS) $(irplib_wcs_test_LDADD) $(LIBS)
-irplib_wlxcorr-test$(EXEEXT): $(irplib_wlxcorr_test_OBJECTS) $(irplib_wlxcorr_test_DEPENDENCIES) 
+irplib_wlxcorr-test$(EXEEXT): $(irplib_wlxcorr_test_OBJECTS) $(irplib_wlxcorr_test_DEPENDENCIES) $(EXTRA_irplib_wlxcorr_test_DEPENDENCIES) 
 	@rm -f irplib_wlxcorr-test$(EXEEXT)
 	$(irplib_wlxcorr_test_LINK) $(irplib_wlxcorr_test_OBJECTS) $(irplib_wlxcorr_test_LDADD) $(LIBS)
 
@@ -463,8 +496,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -478,9 +514,7 @@ uninstall-pkgincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@@ -615,14 +649,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -675,10 +710,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/irplib/tests/irplib_cat-test.c b/irplib/tests/irplib_cat-test.c
index 97c89ed..5b3323b 100644
--- a/irplib/tests/irplib_cat-test.c
+++ b/irplib/tests/irplib_cat-test.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
diff --git a/irplib/tests/irplib_polynomial-test.c b/irplib/tests/irplib_polynomial-test.c
index 4f470b3..a2c5564 100644
--- a/irplib/tests/irplib_polynomial-test.c
+++ b/irplib/tests/irplib_polynomial-test.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.37 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
diff --git a/irplib/tests/irplib_utils-test.c b/irplib/tests/irplib_utils-test.c
index 66f8696..f31815b 100644
--- a/irplib/tests/irplib_utils-test.c
+++ b/irplib/tests/irplib_utils-test.c
@@ -28,6 +28,7 @@
 #include <irplib_utils.h>
 #include <string.h>
 #include <float.h>
+#include <stdint.h>
 
 /*-----------------------------------------------------------------------------
                                    Function prototypes
@@ -41,6 +42,7 @@ static void test_irplib_dfs_table_convert(void);
 static void test_irplib_isnaninf(void);
 static void bench_irplib_image_split(int, int);
 static void frameset_sort_test(int sz);
+static void test_irplib_aligned_alloc(void);
 
 /*----------------------------------------------------------------------------*/
 /**
@@ -69,6 +71,8 @@ int main(void)
     frameset_sort_test(122); /* test even */
     frameset_sort_test(127); /* test odd  */
 
+    test_irplib_aligned_alloc();
+
     if (cpl_msg_get_level() <= CPL_MSG_INFO) {
         bench_irplib_image_split(1024, 100);
     } else {
@@ -115,6 +119,42 @@ static void test_irplib_isnaninf(void)
 }
 
 
+static void test_irplib_aligned_alloc(void)
+{
+    void * ptr = NULL;
+    size_t alignment[] = {2, 4, 8, 16, 32, 64, 128, 4096};
+    char zero[100] = {0};
+    size_t i;
+
+    for (i = 0; i < sizeof(alignment)/sizeof(alignment[0]); i++) {
+        ptr = irplib_aligned_malloc(alignment[i], 100);
+        cpl_test_nonnull(ptr);
+        cpl_test_error(CPL_ERROR_NONE);
+        cpl_test_eq(((intptr_t)ptr % alignment[i]), 0);
+        irplib_aligned_free(ptr);
+        cpl_test_error(CPL_ERROR_NONE);
+    }
+    /* invalid alignment */
+    ptr = irplib_aligned_malloc(5, 100);
+    cpl_test_null(ptr);
+    irplib_aligned_free(NULL);
+
+    for (i = 0; i < sizeof(alignment)/sizeof(alignment[0]); i++) {
+        ptr = irplib_aligned_calloc(alignment[i], 100, 1);
+        cpl_test_nonnull(ptr);
+        cpl_test_error(CPL_ERROR_NONE);
+        cpl_test_eq(((intptr_t)ptr % alignment[i]), 0);
+        cpl_test_eq(memcmp(ptr, zero, 100), 0);
+        irplib_aligned_free(ptr);
+        cpl_test_error(CPL_ERROR_NONE);
+    }
+    /* invalid alignment */
+    ptr = irplib_aligned_calloc(5, 100, 1);
+    cpl_test_null(ptr);
+    irplib_aligned_free(NULL);
+}
+
+
 static cpl_boolean my_table_set_row(cpl_table * self,
                                     const char * line,
                                     int irow,
diff --git a/irplib/tests/irplib_wcs-test.c b/irplib/tests/irplib_wcs-test.c
index 3a1235f..ef3ad4b 100644
--- a/irplib/tests/irplib_wcs-test.c
+++ b/irplib/tests/irplib_wcs-test.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
diff --git a/irplib/tests/irplib_wlxcorr-test.c b/irplib/tests/irplib_wlxcorr-test.c
index 033b39a..5f8cae1 100644
--- a/irplib/tests/irplib_wlxcorr-test.c
+++ b/irplib/tests/irplib_wlxcorr-test.c
@@ -22,7 +22,7 @@
  * $Author: jtaylor $
  * $Date: 2013/01/29 08:43:33 $
  * $Revision: 1.16 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
diff --git a/m4macros/libtool.m4 b/m4macros/libtool.m4
index 671cde1..56666f0 100644
--- a/m4macros/libtool.m4
+++ b/m4macros/libtool.m4
@@ -1,7 +1,8 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -10,7 +11,8 @@
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -37,7 +39,7 @@ m4_define([_LT_COPYING], [dnl
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 ])
 
-# serial 56 LT_INIT
+# serial 57 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -66,6 +68,7 @@ esac
 # ------------------
 AC_DEFUN([LT_INIT],
 [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
 AC_BEFORE([$0], [LTDL_INIT])dnl
@@ -82,6 +85,8 @@ AC_REQUIRE([LTVERSION_VERSION])dnl
 AC_REQUIRE([LTOBSOLETE_VERSION])dnl
 m4_require([_LT_PROG_LTMAIN])dnl
 
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
 dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
@@ -118,7 +123,7 @@ m4_defun([_LT_CC_BASENAME],
     *) break;;
   esac
 done
-cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
 ])
 
 
@@ -138,6 +143,11 @@ m4_defun([_LT_FILEUTILS_DEFAULTS],
 m4_defun([_LT_SETUP],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -160,10 +170,13 @@ _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
 dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
 m4_require([_LT_CMD_RELOAD])dnl
 m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
 # See if we are running on zsh, and set the options which allow our
@@ -179,7 +192,6 @@ fi
 _LT_CHECK_OBJDIR
 
 m4_require([_LT_TAG_COMPILER])dnl
-_LT_PROG_ECHO_BACKSLASH
 
 case $host_os in
 aix3*)
@@ -193,23 +205,6 @@ aix3*)
   ;;
 esac
 
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([["`\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to delay expansion of an escaped single quote.
-delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
 # Global variables:
 ofile=libtool
 can_build_shared=yes
@@ -250,6 +245,28 @@ _LT_CONFIG_COMMANDS
 ])# _LT_SETUP
 
 
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
 # _LT_PROG_LTMAIN
 # ---------------
 # Note that this code is called both from `configure', and `config.status'
@@ -408,7 +425,7 @@ m4_define([_lt_decl_all_varnames],
 # declaration there will have the same value as in `configure'.  VARNAME
 # must have a single quote delimited value for this to work.
 m4_define([_LT_CONFIG_STATUS_DECLARE],
-[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
 
 
 # _LT_CONFIG_STATUS_DECLARATIONS
@@ -418,7 +435,7 @@ m4_define([_LT_CONFIG_STATUS_DECLARE],
 # embedded single quotes properly.  In configure, this macro expands
 # each variable declared with _LT_DECL (and _LT_TAGDECL) into:
 #
-#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
 m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
     [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
@@ -517,12 +534,20 @@ LTCC='$LTCC'
 LTCFLAGS='$LTCFLAGS'
 compiler='$compiler_DEFAULT'
 
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
 # Quote evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -533,9 +558,9 @@ done
 # Double-quote double-evaled strings.
 for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
-    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -543,16 +568,38 @@ for var in lt_decl_all_varnames([[ \
     esac
 done
 
-# Fix-up fallback echo if it was mangled by the above quoting rules.
-case \$lt_ECHO in
-*'\\\[$]0 --fallback-echo"')dnl "
-  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
-  ;;
-esac
-
 _LT_OUTPUT_LIBTOOL_INIT
 ])
 
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
 # ---------
@@ -562,20 +609,11 @@ _LT_OUTPUT_LIBTOOL_INIT
 AC_DEFUN([LT_OUTPUT],
 [: ${CONFIG_LT=./config.lt}
 AC_MSG_NOTICE([creating $CONFIG_LT])
-cat >"$CONFIG_LT" <<_LTEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate a libtool stub with the current configuration.
-
-lt_cl_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_LTEOF
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
 
 cat >>"$CONFIG_LT" <<\_LTEOF
-AS_SHELL_SANITIZE
-_AS_PREPARE
-
-exec AS_MESSAGE_FD>&1
+lt_cl_silent=false
 exec AS_MESSAGE_LOG_FD>>config.log
 {
   echo
@@ -601,7 +639,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2008 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -646,15 +684,13 @@ chmod +x "$CONFIG_LT"
 # appending to config.log, which fails on DOS, as config.log is still kept
 # open by configure.  Here we exec the FD to /dev/null, effectively closing
 # config.log, so it can be properly (re)opened and appended to by config.lt.
-if test "$no_create" != yes; then
-  lt_cl_success=:
-  test "$silent" = yes &&
-    lt_config_lt_args="$lt_config_lt_args --quiet"
-  exec AS_MESSAGE_LOG_FD>/dev/null
-  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
-  exec AS_MESSAGE_LOG_FD>>config.log
-  $lt_cl_success || AS_EXIT(1)
-fi
+lt_cl_success=:
+test "$silent" = yes &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
 ])# LT_OUTPUT
 
 
@@ -717,15 +753,12 @@ _LT_EOF
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
-
-  _LT_PROG_XSI_SHELLFNS
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
-    || (rm -f "$cfgfile"; exit 1)
+  _LT_PROG_REPLACE_SHELLFNS
 
-  mv -f "$cfgfile" "$ofile" ||
+   mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
 ],
@@ -770,6 +803,7 @@ AC_DEFUN([LT_LANG],
 m4_case([$1],
   [C],			[_LT_LANG(C)],
   [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
   [Java],		[_LT_LANG(GCJ)],
   [Fortran 77],		[_LT_LANG(F77)],
   [Fortran],		[_LT_LANG(FC)],
@@ -791,6 +825,31 @@ m4_defun([_LT_LANG],
 ])# _LT_LANG
 
 
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
 # _LT_LANG_DEFAULT_CONFIG
 # -----------------------
 m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -821,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
        m4_ifdef([LT_PROG_GCJ],
 	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
 
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
 AC_PROVIDE_IFELSE([LT_PROG_RC],
   [LT_LANG(RC)],
   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -831,11 +894,13 @@ AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
 AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
 AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
 AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
 dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
 dnl AC_DEFUN([AC_LIBTOOL_F77], [])
 dnl AC_DEFUN([AC_LIBTOOL_FC], [])
 dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
 
 
 # _LT_TAG_COMPILER
@@ -921,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
 	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-	if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 0; then
 	  lt_cv_apple_cc_single_mod=yes
 	else
 	  cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -929,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	rm -rf libconftest.dylib*
 	rm -f conftest.*
       fi])
+
     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
       [lt_cv_ld_exported_symbols_list],
       [lt_cv_ld_exported_symbols_list=no
@@ -940,6 +1012,34 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 	[lt_cv_ld_exported_symbols_list=no])
 	LDFLAGS="$save_LDFLAGS"
     ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
       _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
@@ -967,7 +1067,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
     else
       _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
     fi
-    if test "$DSYMUTIL" != ":"; then
+    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -977,8 +1077,8 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 ])
 
 
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
 # Checks for linker and compiler features on darwin
 m4_defun([_LT_DARWIN_LINKER_FEATURES],
 [
@@ -987,7 +1087,13 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  if test "$lt_cv_ld_force_load" = "yes"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
   _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
   case $cc_basename in
@@ -995,7 +1101,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
      *) _lt_dar_can_shared=$GCC ;;
   esac
   if test "$_lt_dar_can_shared" = "yes"; then
-    output_verbose_link_cmd=echo
+    output_verbose_link_cmd=func_echo_all
     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
     _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
@@ -1011,203 +1117,142 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   fi
 ])
 
-# _LT_SYS_MODULE_PATH_AIX
-# -----------------------
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-	/^0/ {
-	    s/^0  *\(.*\)$/\1/
-	    p
-	}
-    }'
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+if test "${lt_cv_aix_libpath+set}" = set; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
 ])# _LT_SYS_MODULE_PATH_AIX
 
 
 # _LT_SHELL_INIT(ARG)
 # -------------------
 m4_define([_LT_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-	 [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_SHELL_INIT
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
 
 
 # _LT_PROG_ECHO_BACKSLASH
 # -----------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
-[_LT_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$lt_ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-ECHO=${lt_ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $ECHO works!
-  :
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
 else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<_LT_EOF
-[$]*
-_LT_EOF
-  exit 0
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
 fi
 
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test -z "$lt_ECHO"; then
-  if test "X${echo_test_string+set}" != Xset; then
-    # find a string as large as possible, as long as the shell can cope with it
-    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
-	 { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
-      then
-        break
-      fi
-    done
-  fi
-
-  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-     test "X$echo_testing_string" = "X$echo_test_string"; then
-    :
-  else
-    # The Solaris, AIX, and Digital Unix default echo programs unquote
-    # backslashes.  This makes it impossible to quote backslashes using
-    #   echo "$something" | sed 's/\\/\\\\/g'
-    #
-    # So, first we look for a working echo in the user's PATH.
-
-    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-    for dir in $PATH /usr/ucb; do
-      IFS="$lt_save_ifs"
-      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        ECHO="$dir/echo"
-        break
-      fi
-    done
-    IFS="$lt_save_ifs"
-
-    if test "X$ECHO" = Xecho; then
-      # We didn't find a better echo, so look for alternatives.
-      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
-         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
-         test "X$echo_testing_string" = "X$echo_test_string"; then
-        # This shell has a builtin print -r that does the trick.
-        ECHO='print -r'
-      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
-	   test "X$CONFIG_SHELL" != X/bin/ksh; then
-        # If we have ksh, try running configure again with it.
-        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-        export ORIGINAL_CONFIG_SHELL
-        CONFIG_SHELL=/bin/ksh
-        export CONFIG_SHELL
-        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-      else
-        # Try using printf.
-        ECHO='printf %s\n'
-        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
-	   echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
-	   test "X$echo_testing_string" = "X$echo_test_string"; then
-	  # Cool, printf works
-	  :
-        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-	  export CONFIG_SHELL
-	  SHELL="$CONFIG_SHELL"
-	  export SHELL
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-	     test "X$echo_testing_string" = 'X\t' &&
-	     echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-	     test "X$echo_testing_string" = "X$echo_test_string"; then
-	  ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
-        else
-	  # maybe with a smaller string...
-	  prev=:
-
-	  for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-	    if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
-	    then
-	      break
-	    fi
-	    prev="$cmd"
-	  done
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*" 
+}
 
-	  if test "$prev" != 'sed 50q "[$]0"'; then
-	    echo_test_string=`eval $prev`
-	    export echo_test_string
-	    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-	  else
-	    # Oops.  We lost completely, so just stick with echo.
-	    ECHO=echo
-	  fi
-        fi
-      fi
-    fi
-  fi
-fi
+case "$ECHO" in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
 
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-lt_ECHO=$ECHO
-if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
 
-AC_SUBST(lt_ECHO)
-])
 _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
-_LT_DECL([], [ECHO], [1],
-    [An echo program that does not interpret backslashes])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 ])# _LT_PROG_ECHO_BACKSLASH
 
 
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[  --with-sysroot[=DIR] Search for dependent libraries within DIR
+                        (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+   if test "$GCC" = yes; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
 # _LT_ENABLE_LOCK
 # ---------------
 m4_defun([_LT_ENABLE_LOCK],
@@ -1236,7 +1281,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     if test "$lt_cv_prog_gnu_ld" = yes; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -1329,14 +1374,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
 	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
 	  LD="${LD-ld} -64"
@@ -1354,14 +1412,47 @@ need_locks="$enable_libtool_lock"
 ])# _LT_ENABLE_LOCK
 
 
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test "$ac_status" -eq 0; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test "$ac_status" -ne 0; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
 # _LT_CMD_OLD_ARCHIVE
 # -------------------
 m4_defun([_LT_CMD_OLD_ARCHIVE],
-[AC_CHECK_TOOL(AR, ar, false)
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1])
+[_LT_PROG_AR
 
 AC_CHECK_TOOL(STRIP, strip, :)
 test -z "$STRIP" && STRIP=:
@@ -1380,18 +1471,27 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 _LT_DECL([], [old_postinstall_cmds], [2])
 _LT_DECL([], [old_postuninstall_cmds], [2])
 _LT_TAGDECL([], [old_archive_cmds], [2],
     [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
 ])# _LT_CMD_OLD_ARCHIVE
 
 
@@ -1416,15 +1516,15 @@ AC_CACHE_CHECK([$1], [$2],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
      $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
      if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
        $2=yes
@@ -1464,7 +1564,7 @@ AC_CACHE_CHECK([$1], [$2],
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
-       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          $2=yes
@@ -1527,6 +1627,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
   amigaos*)
     # On AmigaOS with pdksh, this test takes hours, literally.
     # So we just punt and use a minimum line length of 8192.
@@ -1552,6 +1657,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1591,8 +1701,8 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
-	         = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
 	      test $i != 17 # 1/2 MB should be enough
       do
         i=`expr $i + 1`
@@ -1643,7 +1753,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-[#line __oline__ "configure"
+[#line $LINENO "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -1684,7 +1794,13 @@ else
 #  endif
 #endif
 
-void fnord() { int i=42;}
+/* When -fvisbility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
 int main ()
 {
   void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
@@ -1693,7 +1809,11 @@ int main ()
   if (self)
     {
       if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
       /* dlclose (self); */
     }
   else
@@ -1869,16 +1989,16 @@ AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings
-     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
      $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
      if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
        _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
@@ -2037,6 +2157,7 @@ m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
 	[], [
@@ -2045,16 +2166,23 @@ if test "$GCC" = yes; then
     darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
     *) lt_awk_arg="/^libraries:/" ;;
   esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+    *) lt_sed_strip_eq="s,=/,/,g" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
   # Ok, now we have the path, separated by spaces, we can step through it
   # and add multilib dir if necessary.
   lt_tmp_lt_search_path_spec=
@@ -2067,7 +2195,7 @@ if test "$GCC" = yes; then
 	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
     fi
   done
-  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
 BEGIN {RS=" "; FS="/|\n";} {
   lt_foo="";
   lt_count=0;
@@ -2087,7 +2215,13 @@ BEGIN {RS=" "; FS="/|\n";} {
   if (lt_foo != "") { lt_freq[[lt_foo]]++; }
   if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
 }'`
-  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 fi])
@@ -2113,7 +2247,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -2122,7 +2256,7 @@ aix3*)
   ;;
 
 aix[[4-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -2175,7 +2309,7 @@ amigaos*)
   m68k)
     library_names_spec='$libname.ixlibrary $libname.a'
     # Create ${libname}_ixlibrary.a entries in /sys/libs.
-    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
     ;;
   esac
   ;;
@@ -2187,7 +2321,7 @@ beos*)
   ;;
 
 bsdi[[45]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -2206,8 +2340,9 @@ cygwin* | mingw* | pw32* | cegcc*)
   need_version=no
   need_lib_prefix=no
 
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
     library_names_spec='$libname.dll.a'
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
@@ -2228,36 +2363,83 @@ cygwin* | mingw* | pw32* | cegcc*)
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
       soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
       soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
       library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
       ;;
     esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+    library_names_spec='${libname}.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec="$LIB"
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
     ;;
 
   *)
+    # Assume MSVC wrapper
     library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    dynamic_linker='Win32 ld.exe'
     ;;
   esac
-  dynamic_linker='Win32 ld.exe'
   # FIXME: first we should search . and the directory the executable is in
   shlibpath_var=PATH
   ;;
@@ -2278,7 +2460,7 @@ m4_if([$1], [],[
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2286,10 +2468,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -2297,7 +2475,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
+    freebsd[[23]].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -2315,7 +2493,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2335,12 +2513,26 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
 
@@ -2386,12 +2578,14 @@ hpux9* | hpux10* | hpux11*)
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
   postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
   ;;
 
 interix[[3-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2407,7 +2601,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
 	if test "$lt_cv_prog_gnu_ld" = yes; then
-		version_type=linux
+		version_type=linux # correct to gnu/linux during the next big refactor
 	else
 		version_type=irix
 	fi ;;
@@ -2444,9 +2638,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
-  version_type=linux
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2454,16 +2648,21 @@ linux* | k*bsd*-gnu)
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
+
   # Some binutils ld are patched to set DT_RUNPATH
-  save_LDFLAGS=$LDFLAGS
-  save_libdir=$libdir
-  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
-       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
-    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
-       [shlibpath_overrides_runpath=yes])])
-  LDFLAGS=$save_LDFLAGS
-  libdir=$save_libdir
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
@@ -2475,8 +2674,9 @@ linux* | k*bsd*-gnu)
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
@@ -2507,7 +2707,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -2576,7 +2776,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2601,7 +2801,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2625,7 +2825,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -2656,7 +2856,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2666,7 +2866,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2708,6 +2908,8 @@ _LT_DECL([], [library_names_spec], [1],
     The last name is the one that the linker finds with -lNAME]])
 _LT_DECL([], [soname_spec], [1],
     [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
 _LT_DECL([], [postinstall_cmds], [2],
     [Command to use after installation of a shared archive])
 _LT_DECL([], [postuninstall_cmds], [2],
@@ -2820,6 +3022,7 @@ AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
 
 AC_ARG_WITH([gnu-ld],
     [AS_HELP_STRING([--with-gnu-ld],
@@ -2941,6 +3144,11 @@ case $reload_flag in
 esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test "$GCC" != yes; then
+      reload_cmds=false
+    fi
+    ;;
   darwin*)
     if test "$GCC" = yes; then
       reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
@@ -2949,8 +3157,8 @@ case $host_os in
     fi
     ;;
 esac
-_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
-_LT_DECL([], [reload_cmds], [2])dnl
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
 ])# _LT_CMD_RELOAD
 
 
@@ -3002,16 +3210,18 @@ mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
   # func_win32_libid shell function, so use a weaker test based on 'objdump',
   # unless we find 'file', for example because we are cross-compiling.
-  if ( file / ) >/dev/null 2>&1; then
+  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
     lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
     lt_cv_file_magic_cmd='func_win32_libid'
   else
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
     lt_cv_file_magic_cmd='$OBJDUMP -f'
   fi
   ;;
 
-cegcc)
+cegcc*)
   # use the weaker test based on 'objdump'. See mingw*.
   lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
   lt_cv_file_magic_cmd='$OBJDUMP -f'
@@ -3041,6 +3251,10 @@ gnu*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 hpux10.20* | hpux11*)
   lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
@@ -3049,11 +3263,11 @@ hpux10.20* | hpux11*)
     lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
     ;;
   hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
     lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
     ;;
   *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
@@ -3074,8 +3288,8 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
-linux* | k*bsd*-gnu)
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -3153,6 +3367,21 @@ tpf*)
   ;;
 esac
 ])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
 file_magic_cmd=$lt_cv_file_magic_cmd
 deplibs_check_method=$lt_cv_deplibs_check_method
 test -z "$deplibs_check_method" && deplibs_check_method=unknown
@@ -3160,7 +3389,11 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 _LT_DECL([], [deplibs_check_method], [1],
     [Method to check whether dependent libraries are shared objects])
 _LT_DECL([], [file_magic_cmd], [1],
-    [Command to use when deplibs_check_method == "file_magic"])
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
 ])# _LT_CHECK_MAGIC_METHOD
 
 
@@ -3217,7 +3450,19 @@ if test "$lt_cv_path_NM" != "no"; then
   NM="$lt_cv_path_NM"
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
-  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
   AC_SUBST([DUMPBIN])
   if test "$DUMPBIN" != ":"; then
     NM="$DUMPBIN"
@@ -3230,13 +3475,13 @@ _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
 AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
   [lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&AS_MESSAGE_LOG_FD
-  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
   cat conftest.out >&AS_MESSAGE_LOG_FD
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -3251,15 +3496,76 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([AM_PROG_NM], [])
 dnl AC_DEFUN([AC_PROG_NM], [])
 
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
 
-# LT_LIB_M
-# --------
-# check for math library
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh
+  # decide which to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
 AC_DEFUN([LT_LIB_M],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 LIBM=
 case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
@@ -3287,7 +3593,12 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
 if test "$GCC" = yes; then
-  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
 
   _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
     lt_cv_prog_compiler_rtti_exceptions,
@@ -3304,6 +3615,7 @@ _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
 m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
 AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
 AC_REQUIRE([LT_PATH_LD])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -3371,8 +3683,8 @@ esac
 lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3396,6 +3708,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -3408,6 +3721,7 @@ for ac_symprfx in "" "_"; do
   else
     lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -3429,7 +3743,7 @@ _LT_EOF
   if AC_TRY_EVAL(ac_compile); then
     # Now try to grab the symbols.
     nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
       # Try sorting and uniquifying the output.
       if sort "$nlist" | uniq > "$nlist"T; then
 	mv -f "$nlist"T "$nlist"
@@ -3441,6 +3755,18 @@ _LT_EOF
       if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
 	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
 	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -3452,7 +3778,7 @@ _LT_EOF
 	  cat <<_LT_EOF >> conftest.$ac_ext
 
 /* The mapping between symbol names and symbols.  */
-const struct {
+LT@&t at _DLSYM_CONST struct {
   const char *name;
   void       *address;
 }
@@ -3478,15 +3804,15 @@ static const void *lt_preloaded_setup() {
 _LT_EOF
 	  # Now try linking the two files.
 	  mv conftest.$ac_objext conftstm.$ac_objext
-	  lt_save_LIBS="$LIBS"
-	  lt_save_CFLAGS="$CFLAGS"
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
 	  LIBS="conftstm.$ac_objext"
 	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
 	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
 	    pipe_works=yes
 	  fi
-	  LIBS="$lt_save_LIBS"
-	  CFLAGS="$lt_save_CFLAGS"
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
 	else
 	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
 	fi
@@ -3519,6 +3845,13 @@ else
   AC_MSG_RESULT(ok)
 fi
 
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
 _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
     [Take the output of nm and produce a listing of raw symbols and C names])
 _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
@@ -3529,6 +3862,8 @@ _LT_DECL([global_symbol_to_c_name_address],
 _LT_DECL([global_symbol_to_c_name_address_lib_prefix],
     [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
     [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
 
 
@@ -3540,7 +3875,6 @@ _LT_TAGVAR(lt_prog_compiler_wl, $1)=
 _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
-AC_MSG_CHECKING([for $compiler option to produce PIC])
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
   if test "$GXX" = yes; then
@@ -3591,6 +3925,11 @@ m4_if([$1], [CXX], [
       # DJGPP does not support shared libraries at all
       _LT_TAGVAR(lt_prog_compiler_pic, $1)=
       ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
     interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
@@ -3640,6 +3979,12 @@ m4_if([$1], [CXX], [
 	  ;;
 	esac
 	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
       dgux*)
 	case $cc_basename in
 	  ec++*)
@@ -3696,7 +4041,7 @@ m4_if([$1], [CXX], [
 	    ;;
 	esac
 	;;
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
@@ -3729,8 +4074,8 @@ m4_if([$1], [CXX], [
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    ;;
-	  xlc* | xlC*)
-	    # IBM XL 8.0 on PPC
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
 	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
@@ -3792,7 +4137,7 @@ m4_if([$1], [CXX], [
 	;;
       solaris*)
 	case $cc_basename in
-	  CC*)
+	  CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
 	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
@@ -3896,6 +4241,12 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
 
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
     hpux*)
       # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
       # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
@@ -3938,6 +4289,15 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
     esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
   else
     # PORTME Check for flag to pass linker flags through the system compiler.
     case $host_os in
@@ -3980,7 +4340,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu)
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -4001,7 +4361,13 @@ m4_if([$1], [CXX], [
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
 	;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
 	# which looks to be a dead project)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
@@ -4013,25 +4379,40 @@ m4_if([$1], [CXX], [
         # All Alpha code is PIC.
         _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
         ;;
-      xl*)
-	# IBM XL C 8.0/Fortran 10.1 on PPC
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
 	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
 	;;
       *)
 	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
 	*Sun\ C*)
 	  # Sun C 5.9
 	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	  ;;
-	*Sun\ F*)
-	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
-	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
 	  ;;
 	esac
 	;;
@@ -4063,7 +4444,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       case $cc_basename in
-      f77* | f90* | f95*)
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
       *)
 	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -4120,9 +4501,11 @@ case $host_os in
     _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
     ;;
 esac
-AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
-_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
-	[How to pass a linker flag through the compiler])
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
 
 #
 # Check to make sure the PIC flag actually works.
@@ -4141,6 +4524,8 @@ fi
 _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
 	[Additional compiler flags for building library objects])
 
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
 #
 # Check to make sure the static flag actually works.
 #
@@ -4161,6 +4546,7 @@ _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
 m4_defun([_LT_LINKER_SHLIBS],
 [AC_REQUIRE([LT_PATH_LD])dnl
 AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
 m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_DECL_SED])dnl
@@ -4169,27 +4555,37 @@ m4_require([_LT_TAG_COMPILER])dnl
 AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 m4_if([$1], [CXX], [
   _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   case $host_os in
   aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    # Also, AIX nm treats weak defined symbols like other global defined
+    # symbols, whereas GNU nm marks them as "W".
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     else
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
+    ;;
   cygwin* | mingw* | cegcc*)
-    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
   *)
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
+    ;;
   esac
-  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -4204,7 +4600,6 @@ m4_if([$1], [CXX], [
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
   _LT_TAGVAR(hardcode_libdir_separator, $1)=
   _LT_TAGVAR(hardcode_minus_L, $1)=no
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4252,7 +4647,33 @@ dnl Note also adjust exclude_expsyms for C++ above.
   esac
 
   _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
   if test "$with_gnu_ld" = yes; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test "$lt_use_gnu_ld_interface" = yes; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
     wlarc='${wl}'
 
@@ -4270,6 +4691,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -4285,11 +4707,12 @@ dnl Note also adjust exclude_expsyms for C++ above.
 	_LT_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** Warning: the GNU linker, at least up to release 2.19, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
 
 _LT_EOF
       fi
@@ -4325,10 +4748,12 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -4346,6 +4771,11 @@ _LT_EOF
       fi
       ;;
 
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
     interix[[3-9]]*)
       _LT_TAGVAR(hardcode_direct, $1)=no
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4361,7 +4791,7 @@ _LT_EOF
       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
 	case $cc_basename in
@@ -4371,15 +4801,16 @@ _LT_EOF
       if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
 	 && test "$tmp_diet" = no
       then
-	tmp_addflag=
+	tmp_addflag=' $pic_flag'
 	tmp_sharedflag='-shared'
 	case $cc_basename,$host_cpu in
         pgcc*)				# Portland Group C compiler
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
-	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
@@ -4390,13 +4821,17 @@ _LT_EOF
 	lf95*)				# Lahey Fortran 8.1
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
 	  tmp_sharedflag='--shared' ;;
-	xl[[cC]]*)			# IBM XL C 8.0 on PPC (deal with xlf below)
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
 	  tmp_sharedflag='-qmkshrobj'
 	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
 	esac
 	case `$CC -V 2>&1 | sed 5q` in
 	*Sun\ C*)			# Sun C 5.9
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	  _LT_TAGVAR(compiler_needs_object, $1)=yes
 	  tmp_sharedflag='-G' ;;
 	*Sun\ F*)			# Sun Fortran 8.3
@@ -4412,17 +4847,16 @@ _LT_EOF
         fi
 
 	case $cc_basename in
-	xlf*)
+	xlf* | bgf* | bgxlf* | mpixlf*)
 	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
 	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-	  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
 	  if test "x$supports_anon_versioning" = xyes; then
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
 	      cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 	      echo "local: *; };" >> $output_objdir/$libname.ver~
-	      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
 	  fi
 	  ;;
 	esac
@@ -4436,8 +4870,8 @@ _LT_EOF
 	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 	wlarc=
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4455,8 +4889,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4502,8 +4936,8 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_TAGVAR(ld_shlibs, $1)=no
       fi
@@ -4543,8 +4977,10 @@ _LT_EOF
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
 	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	# Also, AIX nm treats weak defined symbols like other global
+	# defined symbols, whereas GNU nm marks them as "W".
 	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
-	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	else
 	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
 	fi
@@ -4631,9 +5067,9 @@ _LT_EOF
 	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
         # Determine the default libpath from the value encoded in an
         # empty executable.
-        _LT_SYS_MODULE_PATH_AIX
+        _LT_SYS_MODULE_PATH_AIX([$1])
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
       else
 	if test "$host_cpu" = ia64; then
 	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -4642,14 +5078,19 @@ _LT_EOF
 	else
 	 # Determine the default libpath from the value encoded in an
 	 # empty executable.
-	 _LT_SYS_MODULE_PATH_AIX
+	 _LT_SYS_MODULE_PATH_AIX([$1])
 	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	  # Warning - without using the other run time loading flags,
 	  # -berok will link without error, but may produce a broken library.
 	  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	  # Exported symbols can be pulled into shared objects from archives
-	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  if test "$with_gnu_ld" = yes; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
 	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	  # This is similar to how AIX traditionally builds its shared libraries.
 	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
@@ -4681,20 +5122,64 @@ _LT_EOF
       # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	    sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	  else
+	    sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	  fi~
+	  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	  linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	  lt_tool_outputfile="@TOOL_OUTPUT@"~
+	  case $lt_outputfile in
+	    *.exe|*.EXE) ;;
+	    *)
+	      lt_outputfile="$lt_outputfile.exe"
+	      lt_tool_outputfile="$lt_tool_outputfile.exe"
+	      ;;
+	  esac~
+	  if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	    $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	    $RM "$lt_outputfile.manifest";
+	  fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=".dll"
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4707,10 +5192,6 @@ _LT_EOF
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -4723,7 +5204,7 @@ _LT_EOF
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -4732,7 +5213,7 @@ _LT_EOF
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
     freebsd* | dragonfly*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -4740,7 +5221,7 @@ _LT_EOF
 
     hpux9*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
       fi
@@ -4755,14 +5236,13 @@ _LT_EOF
       ;;
 
     hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
       else
 	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
       fi
       if test "$with_gnu_ld" = no; then
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-	_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
 	_LT_TAGVAR(hardcode_direct, $1)=yes
 	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -4774,16 +5254,16 @@ _LT_EOF
       ;;
 
     hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
 	case $host_cpu in
 	hppa*64*)
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	ia64*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	esac
       else
@@ -4795,7 +5275,14 @@ _LT_EOF
 	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 	  ;;
 	*)
-	  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
 	  ;;
 	esac
       fi
@@ -4823,19 +5310,34 @@ _LT_EOF
 
     irix5* | irix6* | nonstopux*)
       if test "$GCC" = yes; then
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	# Try to use the -exported_symbol ld option, if it does not
 	# work, assume that -exports_file does not work either and
 	# implicitly export all symbols.
-        save_LDFLAGS="$LDFLAGS"
-        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
-        AC_LINK_IFELSE(int foo(void) {},
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
-        )
-        LDFLAGS="$save_LDFLAGS"
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS="$LDFLAGS"
+	   LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS="$save_LDFLAGS"])
+	if test "$lt_cv_irix_exported_symbol" = yes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+	fi
       else
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
-	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4897,17 +5399,17 @@ _LT_EOF
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
       ;;
 
     osf3*)
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
       fi
       _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
@@ -4917,13 +5419,13 @@ _LT_EOF
     osf4* | osf5*)	# as osf3* with the addition of -msym flag
       if test "$GCC" = yes; then
 	_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
       else
 	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
-	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+	$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
 
 	# Both c and cxx compiler support -rpath directly
 	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
@@ -4936,9 +5438,9 @@ _LT_EOF
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
       if test "$GCC" = yes; then
 	wlarc='${wl}'
-	_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-	  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
       else
 	case `$CC -V 2>&1` in
 	*"Compilers 5.0"*)
@@ -5114,36 +5616,38 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $RM conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
-	pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
-        _LT_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
-        then
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $RM conftest*
-      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
       ;;
     esac
   fi
@@ -5180,9 +5684,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
 _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
     [Flag to hardcode $libdir into a binary during linking.
     This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
@@ -5208,8 +5709,6 @@ _LT_TAGDECL([], [inherit_rpath], [0],
     to runtime path list])
 _LT_TAGDECL([], [link_all_deplibs], [0],
     [Whether libtool must link a program against all its dependency libraries])
-_LT_TAGDECL([], [fix_srcfile_path], [1],
-    [Fix the shell variable $srcfile for the compiler])
 _LT_TAGDECL([], [always_export_symbols], [0],
     [Set to "yes" if exported symbols are required])
 _LT_TAGDECL([], [export_symbols_cmds], [2],
@@ -5220,6 +5719,8 @@ _LT_TAGDECL([], [include_expsyms], [1],
     [Symbols that must always be exported])
 _LT_TAGDECL([], [prelink_cmds], [2],
     [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
 _LT_TAGDECL([], [file_list_spec], [1],
     [Specify filename containing input files])
 dnl FIXME: Not yet implemented
@@ -5313,37 +5814,22 @@ CC="$lt_save_CC"
 ])# _LT_LANG_C_CONFIG
 
 
-# _LT_PROG_CXX
-# ------------
-# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
-# compiler, we have our own version here.
-m4_defun([_LT_PROG_CXX],
-[
-pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
-AC_PROG_CXX
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-else
-  _lt_caught_CXX_error=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_CXX
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_CXX], [])
-
-
 # _LT_LANG_CXX_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a C++ compiler are suitably
 # defined.  These variables are subsequently used by _LT_CONFIG to write
 # the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
-[AC_REQUIRE([_LT_PROG_CXX])dnl
-m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
 
 AC_LANG_PUSH(C++)
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
@@ -5355,7 +5841,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -5365,6 +5850,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -5396,6 +5883,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
   # Allow CC to be a program name with arguments.
   lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
   lt_save_LD=$LD
   lt_save_GCC=$GCC
   GCC=$GXX
@@ -5413,6 +5901,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi
   test -z "${LDCXX+set}" || LD=$LDCXX
   CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -5434,8 +5923,8 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Check if GNU C++ uses GNU ld as the underlying linker, since the
       # archiving commands below assume that GNU ld is being used.
       if test "$with_gnu_ld" = yes; then
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5467,7 +5956,7 @@ if test "$_lt_caught_CXX_error" != yes; then
       # Commands to make compiler produce verbose output that lists
       # what "hidden" libraries, object files and flags are used when
       # linking a shared library.
-      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
     else
       GXX=no
@@ -5576,10 +6065,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
-          _LT_SYS_MODULE_PATH_AIX
+          _LT_SYS_MODULE_PATH_AIX([$1])
           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
         else
           if test "$host_cpu" = ia64; then
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
@@ -5588,14 +6077,19 @@ if test "$_lt_caught_CXX_error" != yes; then
           else
 	    # Determine the default libpath from the value encoded in an
 	    # empty executable.
-	    _LT_SYS_MODULE_PATH_AIX
+	    _LT_SYS_MODULE_PATH_AIX([$1])
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 	    # Warning - without using the other run time loading flags,
 	    # -berok will link without error, but may produce a broken library.
 	    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 	    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-	    # Exported symbols can be pulled into shared objects from archives
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    if test "$with_gnu_ld" = yes; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
 	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 	    # This is similar to how AIX traditionally builds its shared
 	    # libraries.
@@ -5625,28 +6119,75 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       cygwin* | mingw* | pw32* | cegcc*)
-        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-        # as there is no search path for DLLs.
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
-        _LT_TAGVAR(always_export_symbols, $1)=no
-        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
-          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-          # If the export-symbols file already is a .def file (1st line
-          # is EXPORTS), use it as is; otherwise, prepend...
-          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-	    cp $export_symbols $output_objdir/$soname.def;
-          else
-	    echo EXPORTS > $output_objdir/$soname.def;
-	    cat $export_symbols >> $output_objdir/$soname.def;
-          fi~
-          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-        else
-          _LT_TAGVAR(ld_shlibs, $1)=no
-        fi
-        ;;
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=".dll"
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+	    else
+	      $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+	    fi~
+	    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+	    linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+	    lt_tool_outputfile="@TOOL_OUTPUT@"~
+	    case $lt_outputfile in
+	      *.exe|*.EXE) ;;
+	      *)
+		lt_outputfile="$lt_outputfile.exe"
+		lt_tool_outputfile="$lt_tool_outputfile.exe"
+		;;
+	    esac~
+	    func_to_tool_file "$lt_outputfile"~
+	    if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+	      $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+	      $RM "$lt_outputfile.manifest";
+	    fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file (1st line
+	    # is EXPORTS), use it as is; otherwise, prepend...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	      cp $export_symbols $output_objdir/$soname.def;
+	    else
+	      echo EXPORTS > $output_objdir/$soname.def;
+	      cat $export_symbols >> $output_objdir/$soname.def;
+	    fi~
+	    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
       darwin* | rhapsody*)
         _LT_DARWIN_LINKER_FEATURES($1)
 	;;
@@ -5669,7 +6210,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         esac
         ;;
 
-      freebsd[[12]]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
 	# switch to ELF
         _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5688,6 +6229,11 @@ if test "$_lt_caught_CXX_error" != yes; then
       gnu*)
         ;;
 
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
       hpux9*)
         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
@@ -5712,11 +6258,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # explicitly linking system object files so we need to strip them
             # from the output so that they don't get included in the library
             # dependencies.
-            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
             ;;
           *)
             if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5777,7 +6323,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
           *)
 	    if test "$GXX" = yes; then
@@ -5787,10 +6333,10 @@ if test "$_lt_caught_CXX_error" != yes; then
 	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          ia64*)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	          *)
-	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	            ;;
 	        esac
 	      fi
@@ -5820,7 +6366,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         case $cc_basename in
           CC*)
 	    # SGI C++
-	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
@@ -5831,9 +6377,9 @@ if test "$_lt_caught_CXX_error" != yes; then
           *)
 	    if test "$GXX" = yes; then
 	      if test "$with_gnu_ld" = no; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 	      else
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
 	      fi
 	    fi
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
@@ -5844,7 +6390,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu)
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
         case $cc_basename in
           KCC*)
 	    # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -5862,7 +6408,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5899,26 +6445,26 @@ if test "$_lt_caught_CXX_error" != yes; then
           pgCC* | pgcpp*)
             # Portland Group C++ compiler
 	    case `$CC -V` in
-	    *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
 	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
-		compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+		compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
 	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
-		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+		$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
 		$RANLIB $oldlib'
 	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
 		rm -rf $tpldir~
 		$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
-		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+		$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
-	    *) # Version 6 will use weak symbols
+	    *) # Version 6 and above use weak symbols
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 	      ;;
@@ -5926,7 +6472,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
             ;;
 	  cxx*)
 	    # Compaq C++
@@ -5945,9 +6491,9 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
 	    ;;
-	  xl*)
+	  xl* | mpixl* | bgxl*)
 	    # IBM XL 8.0 on PPC, with GNU ld
 	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
@@ -5967,13 +6513,13 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
 	      _LT_TAGVAR(compiler_needs_object, $1)=yes
 
 	      # Not sure whether something based on
 	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
 	      # would be better.
-	      output_verbose_link_cmd='echo'
+	      output_verbose_link_cmd='func_echo_all'
 
 	      # Archives containing C++ object files must be created using
 	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6042,7 +6588,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 	    _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 	  fi
-	  output_verbose_link_cmd=echo
+	  output_verbose_link_cmd=func_echo_all
 	else
 	  _LT_TAGVAR(ld_shlibs, $1)=no
 	fi
@@ -6077,15 +6623,15 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    case $host in
 	      osf3*)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 		;;
 	      *)
 	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 	          echo "-hidden">> $lib.exp~
-	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+	          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
 	          $RM $lib.exp'
 	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 		;;
@@ -6101,17 +6647,17 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    # explicitly linking system object files so we need to strip them
 	    # from the output so that they don't get included in the library
 	    # dependencies.
-	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
 	    ;;
 	  *)
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 	      case $host in
 	        osf3*)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	        *)
-	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 		  ;;
 	      esac
 
@@ -6121,7 +6667,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	      # Commands to make compiler produce verbose output that lists
 	      # what "hidden" libraries, object files and flags are used when
 	      # linking a shared library.
-	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
 	    else
 	      # FIXME: insert proper C++ library support
@@ -6157,7 +6703,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 
       solaris*)
         case $cc_basename in
-          CC*)
+          CC* | sunCC*)
 	    # Sun C++ 4.2, 5.x and Centerline C++
             _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
 	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -6178,7 +6724,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    esac
 	    _LT_TAGVAR(link_all_deplibs, $1)=yes
 
-	    output_verbose_link_cmd='echo'
+	    output_verbose_link_cmd='func_echo_all'
 
 	    # Archives containing C++ object files must be created using
 	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -6198,14 +6744,14 @@ if test "$_lt_caught_CXX_error" != yes; then
 	    if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 	      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
 	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
-	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
-		  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+		  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
 
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      else
 	        # g++ 2.7 appears to require `-G' NOT `-shared' on this
 	        # platform.
@@ -6216,7 +6762,7 @@ if test "$_lt_caught_CXX_error" != yes; then
 	        # Commands to make compiler produce verbose output that lists
 	        # what "hidden" libraries, object files and flags are used when
 	        # linking a shared library.
-	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 	      fi
 
 	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
@@ -6270,6 +6816,10 @@ if test "$_lt_caught_CXX_error" != yes; then
           CC*)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+	      '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+	      '"$_LT_TAGVAR(reload_cmds, $1)"
 	    ;;
 	  *)
 	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -6325,6 +6875,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   fi # test -n "$compiler"
 
   CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
   LDCXX=$LD
   LD=$lt_save_LD
   GCC=$lt_save_GCC
@@ -6339,6 +6890,29 @@ AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
 
 
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case ${2} in
+  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -6347,6 +6921,7 @@ AC_LANG_POP
 # objects, libraries and library flags.
 m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
 # Dependencies to place before and after the object being linked:
 _LT_TAGVAR(predep_objects, $1)=
 _LT_TAGVAR(postdep_objects, $1)=
@@ -6396,7 +6971,20 @@ public class foo {
   }
 };
 _LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
 ])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
 dnl Parse the compiler output and extract the necessary
 dnl objects, libraries and library flags.
 if AC_TRY_EVAL(ac_compile); then
@@ -6408,7 +6996,7 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case $p in
+    case ${prev}${p} in
 
     -L* | -R* | -l*)
        # Some compilers place space between "-{L,R}" and the path.
@@ -6417,13 +7005,22 @@ if AC_TRY_EVAL(ac_compile); then
           test $p = "-R"; then
 	 prev=$p
 	 continue
-       else
-	 prev=
        fi
 
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
        if test "$pre_test_object_deps_done" = no; then
-	 case $p in
-	 -L* | -R*)
+	 case ${prev} in
+	 -L | -R)
 	   # Internal compiler library paths should come after those
 	   # provided the user.  The postdeps already come after the
 	   # user supplied libs so there is no need to process them.
@@ -6443,8 +7040,10 @@ if AC_TRY_EVAL(ac_compile); then
 	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
 	 fi
        fi
+       prev=
        ;;
 
+    *.lto.$objext) ;; # Ignore GCC LTO objects
     *.$objext)
        # This assumes that the test object file only shows up
        # once in the compiler output.
@@ -6480,6 +7079,7 @@ else
 fi
 
 $RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
 # PORTME: override above test on systems where it is broken
 m4_if([$1], [CXX],
@@ -6516,7 +7116,7 @@ linux*)
 
 solaris*)
   case $cc_basename in
-  CC*)
+  CC* | sunCC*)
     # The more standards-conforming stlport4 library is
     # incompatible with the Cstd library. Avoid specifying
     # it if it's in CXXFLAGS. Ignore libCrun as
@@ -6560,32 +7160,16 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 ])# _LT_SYS_HIDDEN_LIBDEPS
 
 
-# _LT_PROG_F77
-# ------------
-# Since AC_PROG_F77 is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_F77],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
-AC_PROG_F77
-if test -z "$F77" || test "X$F77" = "Xno"; then
-  _lt_disable_F77=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_F77
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_F77], [])
-
-
 # _LT_LANG_F77_CONFIG([TAG])
 # --------------------------
 # Ensure that the configuration variables for a Fortran 77 compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
-[AC_REQUIRE([_LT_PROG_F77])dnl
-AC_LANG_PUSH(Fortran 77)
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6595,7 +7179,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6604,6 +7187,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6643,7 +7228,9 @@ if test "$_lt_disable_F77" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
   compiler=$CC
   _LT_TAGVAR(compiler, $1)=$CC
   _LT_CC_BASENAME([$compiler])
@@ -6697,38 +7284,24 @@ if test "$_lt_disable_F77" != yes; then
 
   GCC=$lt_save_GCC
   CC="$lt_save_CC"
+  CFLAGS="$lt_save_CFLAGS"
 fi # test "$_lt_disable_F77" != yes
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
 
 
-# _LT_PROG_FC
-# -----------
-# Since AC_PROG_FC is broken, in that it returns the empty string
-# if there is no fortran compiler, we have our own version here.
-m4_defun([_LT_PROG_FC],
-[
-pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
-AC_PROG_FC
-if test -z "$FC" || test "X$FC" = "Xno"; then
-  _lt_disable_FC=yes
-fi
-popdef([AC_MSG_ERROR])
-])# _LT_PROG_FC
-
-dnl aclocal-1.4 backwards compatibility:
-dnl AC_DEFUN([_LT_PROG_FC], [])
-
-
 # _LT_LANG_FC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for a Fortran compiler are
 # suitably defined.  These variables are subsequently used by _LT_CONFIG
 # to write the compiler configuration to `libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
-[AC_REQUIRE([_LT_PROG_FC])dnl
-AC_LANG_PUSH(Fortran)
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
 
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 _LT_TAGVAR(allow_undefined_flag, $1)=
@@ -6738,7 +7311,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -6747,6 +7319,8 @@ _LT_TAGVAR(module_cmds, $1)=
 _LT_TAGVAR(module_expsym_cmds, $1)=
 _LT_TAGVAR(link_all_deplibs, $1)=unknown
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 _LT_TAGVAR(no_undefined_flag, $1)=
 _LT_TAGVAR(whole_archive_flag_spec, $1)=
 _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
@@ -6786,7 +7360,9 @@ if test "$_lt_disable_FC" != yes; then
   # Allow CC to be a program name with arguments.
   lt_save_CC="$CC"
   lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
   compiler=$CC
   GCC=$ac_cv_fc_compiler_gnu
 
@@ -6842,7 +7418,8 @@ if test "$_lt_disable_FC" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
 fi # test "$_lt_disable_FC" != yes
 
 AC_LANG_POP
@@ -6879,10 +7456,12 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=yes
 CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_TAGVAR(LD, $1)="$LD"
@@ -6892,6 +7471,8 @@ _LT_CC_BASENAME([$compiler])
 _LT_TAGVAR(archive_cmds_need_lc, $1)=no
 
 _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
 
 ## CAVEAT EMPTOR:
 ## There is no encapsulation within the following macros, do not change
@@ -6911,10 +7492,82 @@ fi
 AC_LANG_RESTORE
 
 GCC=$lt_save_GCC
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
 # _LT_LANG_RC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
@@ -6946,9 +7599,11 @@ _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
 lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
 CC=${RC-"windres"}
+CFLAGS=
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
 _LT_CC_BASENAME([$compiler])
@@ -6961,7 +7616,8 @@ fi
 
 GCC=$lt_save_GCC
 AC_LANG_RESTORE
-CC="$lt_save_CC"
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_RC_CONFIG
 
 
@@ -6981,6 +7637,13 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
 
 
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
 # LT_PROG_RC
 # ----------
 AC_DEFUN([LT_PROG_RC],
@@ -7020,6 +7683,15 @@ _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
 AC_SUBST([OBJDUMP])
 ])
 
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
 
 # _LT_DECL_SED
 # ------------
@@ -7113,8 +7785,8 @@ m4_defun([_LT_CHECK_SHELL_FEATURES],
 # Try some XSI features
 xsi_shell=no
 ( _lt_dummy="a/b/c"
-  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
-      = c,a/b,, \
+  test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,b/c, \
     && eval 'test $(( 1 + 1 )) -eq 2 \
     && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
   && xsi_shell=yes
@@ -7153,208 +7825,162 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_XSI_SHELLFNS
-# ---------------------
-# Bourne and XSI compatible variants of some useful shell functions.
-m4_defun([_LT_PROG_XSI_SHELLFNS],
-[case $xsi_shell in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-}
-
-# func_basename file
-func_basename ()
-{
-  func_basename_result="${1##*/}"
-}
-
-# func_dirname_and_basename file append nondir_replacement
-# perform func_basename and func_dirname in a single function
-# call:
-#   dirname:  Compute the dirname of FILE.  If nonempty,
-#             add APPEND to the result, otherwise set result
-#             to NONDIR_REPLACEMENT.
-#             value returned in "$func_dirname_result"
-#   basename: Compute filename of FILE.
-#             value retuned in "$func_basename_result"
-# Implementation must be kept synchronized with func_dirname
-# and func_basename. For efficiency, we do not delegate to
-# those functions but instead duplicate the functionality here.
-func_dirname_and_basename ()
-{
-  case ${1} in
-    */*) func_dirname_result="${1%/*}${2}" ;;
-    *  ) func_dirname_result="${3}" ;;
-  esac
-  func_basename_result="${1##*/}"
-}
-
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-func_stripname ()
-{
-  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
-  # positional parameters, so assign one to ordinary parameter first.
-  func_stripname_result=${3}
-  func_stripname_result=${func_stripname_result#"${1}"}
-  func_stripname_result=${func_stripname_result%"${2}"}
-}
-
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=${1%%=*}
-  func_opt_split_arg=${1#*=}
-}
-
-# func_lo2o object
-func_lo2o ()
-{
-  case ${1} in
-    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-    *)    func_lo2o_result=${1} ;;
-  esac
-}
-
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=${1%.*}.lo
-}
-
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=$(( $[*] ))
-}
-
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=${#1}
-}
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([	 ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+  && mv -f "$cfgfile.tmp" "$cfgfile" \
+    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
 
-_LT_EOF
-    ;;
-  *) # Bourne compatible functions.
-    cat << \_LT_EOF >> "$cfgfile"
 
-# func_dirname file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-  # Extract subdirectory from the argument.
-  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
-  if test "X$func_dirname_result" = "X${1}"; then
-    func_dirname_result="${3}"
-  else
-    func_dirname_result="$func_dirname_result${2}"
-  fi
-}
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac])
+
+  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+    func_basename_result="${1##*/}"])
+
+  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+    case ${1} in
+      */*) func_dirname_result="${1%/*}${2}" ;;
+      *  ) func_dirname_result="${3}" ;;
+    esac
+    func_basename_result="${1##*/}"])
 
-# func_basename file
-func_basename ()
-{
-  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary parameter first.
+    func_stripname_result=${3}
+    func_stripname_result=${func_stripname_result#"${1}"}
+    func_stripname_result=${func_stripname_result%"${2}"}])
 
-dnl func_dirname_and_basename
-dnl A portable version of this function is already defined in general.m4sh
-dnl so there is no need for it here.
+  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+    func_split_long_opt_name=${1%%=*}
+    func_split_long_opt_arg=${1#*=}])
 
-# func_stripname prefix suffix name
-# strip PREFIX and SUFFIX off of NAME.
-# PREFIX and SUFFIX must not contain globbing or regex special
-# characters, hashes, percent signs, but SUFFIX may contain a leading
-# dot (in which case that matches only a dot).
-# func_strip_suffix prefix name
-func_stripname ()
-{
-  case ${2} in
-    .*) func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
-    *)  func_stripname_result=`$ECHO "X${3}" \
-           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
-  esac
-}
+  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+    func_split_short_opt_arg=${1#??}
+    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
 
-# sed scripts:
-my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
-my_sed_long_arg='1s/^-[[^=]]*=//'
+  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+    case ${1} in
+      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+      *)    func_lo2o_result=${1} ;;
+    esac])
 
-# func_opt_split
-func_opt_split ()
-{
-  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
-  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
 
-# func_lo2o object
-func_lo2o ()
-{
-  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
 
-# func_xform libobj-or-source
-func_xform ()
-{
-  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
+fi
 
-# func_arith arithmetic-term...
-func_arith ()
-{
-  func_arith_result=`expr "$[@]"`
-}
+if test x"$lt_shell_append" = xyes; then
+  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
-}
+  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+    func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
 
-_LT_EOF
-esac
+  # Save a `func_append' function call where possible by direct use of '+='
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+else
+  # Save a `func_append' function call even when '+=' is not available
+  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+    && mv -f "$cfgfile.tmp" "$cfgfile" \
+      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+  test 0 -eq $? || _lt_function_replace_fail=:
+fi
 
-case $lt_shell_append in
-  yes)
-    cat << \_LT_EOF >> "$cfgfile"
+if test x"$_lt_function_replace_fail" = x":"; then
+  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
 
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]+=\$[2]"
-}
-_LT_EOF
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
     ;;
-  *)
-    cat << \_LT_EOF >> "$cfgfile"
-
-# func_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
-{
-  eval "$[1]=\$$[1]\$[2]"
-}
-
-_LT_EOF
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
     ;;
-  esac
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
 ])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4macros/ltoptions.m4 b/m4macros/ltoptions.m4
index 34151a3..5d9acd8 100644
--- a/m4macros/ltoptions.m4
+++ b/m4macros/ltoptions.m4
@@ -1,13 +1,14 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+#   Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 6 ltoptions.m4
+# serial 7 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -125,7 +126,7 @@ LT_OPTION_DEFINE([LT_INIT], [win32-dll],
 [enable_win32_dll=yes
 
 case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
   AC_CHECK_TOOL(AS, as, false)
   AC_CHECK_TOOL(DLLTOOL, dlltool, false)
   AC_CHECK_TOOL(OBJDUMP, objdump, false)
@@ -133,13 +134,13 @@ case $host in
 esac
 
 test -z "$AS" && AS=as
-_LT_DECL([], [AS],      [0], [Assembler program])dnl
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
 
 test -z "$DLLTOOL" && DLLTOOL=dlltool
-_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
 
 test -z "$OBJDUMP" && OBJDUMP=objdump
-_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
 ])# win32-dll
 
 AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
@@ -325,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
 	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
diff --git a/m4macros/ltversion.m4 b/m4macros/ltversion.m4
index f3c5309..07a8602 100644
--- a/m4macros/ltversion.m4
+++ b/m4macros/ltversion.m4
@@ -7,17 +7,17 @@
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# Generated from ltversion.in.
+# @configure_input@
 
-# serial 3017 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/m4macros/lt~obsolete.m4 b/m4macros/lt~obsolete.m4
index 637bb20..c573da9 100644
--- a/m4macros/lt~obsolete.m4
+++ b/m4macros/lt~obsolete.m4
@@ -1,13 +1,13 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
 # unlimited permission to copy and/or distribute it, with or without
 # modifications, as long as this notice is preserved.
 
-# serial 4 lt~obsolete.m4
+# serial 5 lt~obsolete.m4
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
@@ -77,7 +77,6 @@ m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
 m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
 m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
 m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
-m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
 m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
 m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
 m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
@@ -90,3 +89,10 @@ m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
 m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
 m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
 m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/recipes/Makefile.am b/recipes/Makefile.am
index 79a5e02..c397ec4 100644
--- a/recipes/Makefile.am
+++ b/recipes/Makefile.am
@@ -21,8 +21,8 @@ DISTCLEANFILES = *~
 
 SUBDIRS = tests
 
-INCLUDES = $(all_includes)
-
+AM_CPPFLAGS = $(all_includes)
+LIBADD = $(LIBCPLCORE) $(LIBCPLDFS) $(LIBCPLUI)
 if MAINTAINER_MODE
 
 MAINTAINERCLEANFILES = Makefile.in
@@ -55,6 +55,7 @@ plugin_LTLIBRARIES = \
 	sinfo_utl_spectrum_wavelength_shift.la \
 	sinfo_utl_line_oh_select.la 
 
+#    sinfo_rec_mdark_hdrl.la \
 #	sinfo_utl_eff.la \
 #	sinfo_rec_lingain.la \
 #	sinfo_rec_mdark_detmon.la \
@@ -75,205 +76,210 @@ plugin_LTLIBRARIES = \
 #New recipes
 
 #sinfo_utl_table_test_la_SOURCES = sinfo_utl_table_test.c
-#sinfo_utl_table_test_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_table_test_la_LIBADD = $(LIBSINFONI) $(LIBCPLCORE) $(LIBADD)
 #sinfo_utl_table_test_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_table_test_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_mdark_detmon_la_SOURCES = sinfo_rec_mdark_detmon.c
-#sinfo_rec_mdark_detmon_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_mdark_detmon_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_mdark_detmon_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_mdark_detmon_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_rec_detlin_la_SOURCES = sinfo_rec_detlin.c
-sinfo_rec_detlin_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_detlin_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_detlin_la_LDFLAGS = -module -avoid-version
 sinfo_rec_detlin_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_rec_distortion_la_SOURCES = sinfo_rec_distortion.c
-sinfo_rec_distortion_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_distortion_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_distortion_la_LDFLAGS = -module -avoid-version
 sinfo_rec_distortion_la_DEPENDENCIES = $(LIBSINFONI) 
 
 sinfo_rec_jitter_la_SOURCES = sinfo_rec_jitter.c 
-sinfo_rec_jitter_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_jitter_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_jitter_la_LDFLAGS = -module -avoid-version
 sinfo_rec_jitter_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 #sinfo_rec_lingain_la_SOURCES = sinfo_rec_lingain.c
-#sinfo_rec_lingain_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_lingain_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_lingain_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_lingain_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_rec_mdark_la_SOURCES = sinfo_rec_mdark.c
-sinfo_rec_mdark_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_mdark_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_mdark_la_LDFLAGS = -module -avoid-version
 sinfo_rec_mdark_la_DEPENDENCIES = $(LIBSINFONI)
 
+#sinfo_rec_mdark_hdrl_la_SOURCES = sinfo_rec_mdark_hdrl.c
+#sinfo_rec_mdark_hdrl_la_LIBADD = $(LIBSINFONI) $(LIBADD)
+#sinfo_rec_mdark_hdrl_la_LDFLAGS = -module -avoid-version
+#sinfo_rec_mdark_hdrl_la_DEPENDENCIES = $(LIBSINFONI)
+
 sinfo_rec_mflat_la_SOURCES = sinfo_rec_mflat.c
-sinfo_rec_mflat_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_mflat_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_mflat_la_LDFLAGS = -module -avoid-version
 sinfo_rec_mflat_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_objnod_la_SOURCES = sinfo_rec_objnod.c 
-#sinfo_rec_objnod_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_objnod_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_objnod_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_objnod_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_psf_la_SOURCES = sinfo_rec_psf.c 
-#sinfo_rec_psf_la_LIBADD = $(LIBSINFONI) 
+#sinfo_rec_psf_la_LIBADD = $(LIBSINFONI)  $(LIBADD)
 #sinfo_rec_psf_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_psf_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_rec_pupil_la_SOURCES = sinfo_rec_pupil.c 
-sinfo_rec_pupil_la_LIBADD = $(LIBSINFONI) 
+sinfo_rec_pupil_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_pupil_la_LDFLAGS = -module -avoid-version
 sinfo_rec_pupil_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_stdstar_la_SOURCES = sinfo_rec_stdstar.c 
-#sinfo_rec_stdstar_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_stdstar_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_stdstar_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_stdstar_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_rec_wavecal_la_SOURCES = sinfo_rec_wavecal.c 
-sinfo_rec_wavecal_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_wavecal_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_wavecal_la_LDFLAGS = -module -avoid-version
 sinfo_rec_wavecal_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_jitter_la_SOURCES = sinfo_step_jitter.c 
-#sinfo_step_jitter_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_jitter_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_jitter_la_LDFLAGS = -module -avoid-version
 #sinfo_step_jitter_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 #sinfo_step_psf_la_SOURCES = sinfo_step_psf.c
-#sinfo_step_psf_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_psf_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_psf_la_LDFLAGS = -module -avoid-version
 #sinfo_step_psf_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_stdstar_la_SOURCES = sinfo_step_stdstar.c
-#sinfo_step_stdstar_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_stdstar_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_stdstar_la_LDFLAGS = -module -avoid-version
 #sinfo_step_stdstar_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_objnod_la_SOURCES = sinfo_step_objnod.c
-#sinfo_step_objnod_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_objnod_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_objnod_la_LDFLAGS = -module -avoid-version
 #sinfo_step_objnod_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 #sinfo_step_distortion_la_SOURCES = sinfo_step_distortion.c
-#sinfo_step_distortion_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_distortion_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_distortion_la_LDFLAGS = -module -avoid-version
 #sinfo_step_distortion_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 sinfo_utl_bp_mask_add_la_SOURCES = sinfo_utl_bp_mask_add.c
-sinfo_utl_bp_mask_add_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_bp_mask_add_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_bp_mask_add_la_LDFLAGS = -module -avoid-version
 sinfo_utl_bp_mask_add_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_cube2ima_la_SOURCES = sinfo_utl_cube2ima.c
-sinfo_utl_cube2ima_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube2ima_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube2ima_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube2ima_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_ima_cube_ks_test_la_SOURCES = sinfo_utl_ima_cube_ks_test.c
-#sinfo_utl_ima_cube_ks_test_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_ima_cube_ks_test_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_ima_cube_ks_test_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_ima_cube_ks_test_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_eff_la_SOURCES = sinfo_utl_eff.c
-#sinfo_utl_eff_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_eff_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_eff_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_eff_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_cube2spectrum_la_SOURCES = sinfo_utl_cube2spectrum.c
-sinfo_utl_cube2spectrum_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube2spectrum_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube2spectrum_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube2spectrum_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_cube_arith_la_SOURCES = sinfo_utl_cube_arith.c
-sinfo_utl_cube_arith_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_arith_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_arith_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_arith_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_cube_combine_la_SOURCES = sinfo_utl_cube_combine.c
-sinfo_utl_cube_combine_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_combine_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_combine_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_combine_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_cube_create_la_SOURCES = sinfo_utl_cube_create.c
-sinfo_utl_cube_create_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_create_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_create_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_create_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_illumcorr_la_SOURCES = sinfo_utl_illumcorr.c 
-#sinfo_utl_illumcorr_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_illumcorr_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_illumcorr_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_illumcorr_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_ima_arith_la_SOURCES = sinfo_utl_ima_arith.c
-sinfo_utl_ima_arith_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_ima_arith_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_ima_arith_la_LDFLAGS = -module -avoid-version
 sinfo_utl_ima_arith_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_ima_gauss_la_SOURCES = sinfo_utl_ima_gauss.c
-#sinfo_utl_ima_gauss_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_ima_gauss_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_ima_gauss_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_ima_gauss_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_ima_line_corr_la_SOURCES = sinfo_utl_ima_line_corr.c
-sinfo_utl_ima_line_corr_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_ima_line_corr_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_ima_line_corr_la_LDFLAGS = -module -avoid-version
 sinfo_utl_ima_line_corr_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_skycor_la_SOURCES = sinfo_utl_skycor.c
-sinfo_utl_skycor_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_skycor_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_skycor_la_LDFLAGS = -module -avoid-version
 sinfo_utl_skycor_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 sinfo_utl_skymap_la_SOURCES = sinfo_utl_skymap.c
-sinfo_utl_skymap_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_skymap_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_skymap_la_LDFLAGS = -module -avoid-version
 sinfo_utl_skymap_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_table_ex_la_SOURCES = sinfo_utl_table_ex.c
-#sinfo_utl_table_ex_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_table_ex_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_table_ex_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_table_ex_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_img_noise_la_SOURCES = sinfo_img_noise.c
-#sinfo_img_noise_la_LIBADD = $(LIBSINFONI)
+#sinfo_img_noise_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_img_noise_la_LDFLAGS = -module -avoid-version
 #sinfo_img_noise_la_DEPENDENCIES = $(LIBSINFONI)
 
 sinfo_utl_spectrum_divide_by_blackbody_la_SOURCES = sinfo_utl_spectrum_divide_by_blackbody.c
-sinfo_utl_spectrum_divide_by_blackbody_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_spectrum_divide_by_blackbody_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_spectrum_divide_by_blackbody_la_LDFLAGS = -module -avoid-version
 sinfo_utl_spectrum_divide_by_blackbody_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 sinfo_utl_spectrum_wavelength_shift_la_SOURCES = sinfo_utl_spectrum_wavelength_shift.c
-sinfo_utl_spectrum_wavelength_shift_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_spectrum_wavelength_shift_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_spectrum_wavelength_shift_la_LDFLAGS = -module -avoid-version
 sinfo_utl_spectrum_wavelength_shift_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_stdstars_la_SOURCES = sinfo_utl_stdstars.c
-#sinfo_utl_stdstars_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_stdstars_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_stdstars_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_stdstars_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 #sinfo_utl_seds_la_SOURCES = sinfo_utl_seds.c
-#sinfo_utl_seds_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_seds_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_seds_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_seds_la_DEPENDENCIES = $(LIBSINFONI)
 
 
 sinfo_utl_line_oh_select_la_SOURCES = sinfo_utl_line_oh_select.c
-sinfo_utl_line_oh_select_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_line_oh_select_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_line_oh_select_la_LDFLAGS = -module -avoid-version
 sinfo_utl_line_oh_select_la_DEPENDENCIES = $(LIBSINFONI)
 
diff --git a/recipes/Makefile.in b/recipes/Makefile.in
index 566dbbe..e4bd747 100644
--- a/recipes/Makefile.in
+++ b/recipes/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -76,10 +93,18 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(plugindir)" \
 	"$(DESTDIR)$(pkgincludedir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 am_sinfo_rec_detlin_la_OBJECTS = sinfo_rec_detlin.lo
 sinfo_rec_detlin_la_OBJECTS = $(am_sinfo_rec_detlin_la_OBJECTS)
 sinfo_rec_detlin_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -254,6 +279,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
@@ -308,6 +338,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -348,6 +379,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -360,6 +392,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -382,6 +415,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -417,7 +451,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -440,10 +473,13 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.6 foreign
 DISTCLEANFILES = *~
 SUBDIRS = tests
-INCLUDES = $(all_includes)
+AM_CPPFLAGS = $(all_includes)
+LIBADD = $(LIBCPLCORE) $(LIBCPLDFS) $(LIBCPLUI)
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = Makefile.in
 pkginclude_HEADERS = 
 noinst_HEADERS = 
@@ -470,6 +506,7 @@ plugin_LTLIBRARIES = \
 	sinfo_utl_line_oh_select.la 
 
 
+#    sinfo_rec_mdark_hdrl.la \
 #	sinfo_utl_eff.la \
 #	sinfo_rec_lingain.la \
 #	sinfo_rec_mdark_detmon.la \
@@ -490,177 +527,182 @@ plugin_LTLIBRARIES = \
 #New recipes
 
 #sinfo_utl_table_test_la_SOURCES = sinfo_utl_table_test.c
-#sinfo_utl_table_test_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_table_test_la_LIBADD = $(LIBSINFONI) $(LIBCPLCORE) $(LIBADD)
 #sinfo_utl_table_test_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_table_test_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_mdark_detmon_la_SOURCES = sinfo_rec_mdark_detmon.c
-#sinfo_rec_mdark_detmon_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_mdark_detmon_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_mdark_detmon_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_mdark_detmon_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_detlin_la_SOURCES = sinfo_rec_detlin.c
-sinfo_rec_detlin_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_detlin_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_detlin_la_LDFLAGS = -module -avoid-version
 sinfo_rec_detlin_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_distortion_la_SOURCES = sinfo_rec_distortion.c
-sinfo_rec_distortion_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_distortion_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_distortion_la_LDFLAGS = -module -avoid-version
 sinfo_rec_distortion_la_DEPENDENCIES = $(LIBSINFONI) 
 sinfo_rec_jitter_la_SOURCES = sinfo_rec_jitter.c 
-sinfo_rec_jitter_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_jitter_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_jitter_la_LDFLAGS = -module -avoid-version
 sinfo_rec_jitter_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_lingain_la_SOURCES = sinfo_rec_lingain.c
-#sinfo_rec_lingain_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_lingain_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_lingain_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_lingain_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_mdark_la_SOURCES = sinfo_rec_mdark.c
-sinfo_rec_mdark_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_mdark_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_mdark_la_LDFLAGS = -module -avoid-version
 sinfo_rec_mdark_la_DEPENDENCIES = $(LIBSINFONI)
+
+#sinfo_rec_mdark_hdrl_la_SOURCES = sinfo_rec_mdark_hdrl.c
+#sinfo_rec_mdark_hdrl_la_LIBADD = $(LIBSINFONI) $(LIBADD)
+#sinfo_rec_mdark_hdrl_la_LDFLAGS = -module -avoid-version
+#sinfo_rec_mdark_hdrl_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_mflat_la_SOURCES = sinfo_rec_mflat.c
-sinfo_rec_mflat_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_mflat_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_mflat_la_LDFLAGS = -module -avoid-version
 sinfo_rec_mflat_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_objnod_la_SOURCES = sinfo_rec_objnod.c 
-#sinfo_rec_objnod_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_objnod_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_objnod_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_objnod_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_psf_la_SOURCES = sinfo_rec_psf.c 
-#sinfo_rec_psf_la_LIBADD = $(LIBSINFONI) 
+#sinfo_rec_psf_la_LIBADD = $(LIBSINFONI)  $(LIBADD)
 #sinfo_rec_psf_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_psf_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_pupil_la_SOURCES = sinfo_rec_pupil.c 
-sinfo_rec_pupil_la_LIBADD = $(LIBSINFONI) 
+sinfo_rec_pupil_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_pupil_la_LDFLAGS = -module -avoid-version
 sinfo_rec_pupil_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_rec_stdstar_la_SOURCES = sinfo_rec_stdstar.c 
-#sinfo_rec_stdstar_la_LIBADD = $(LIBSINFONI)
+#sinfo_rec_stdstar_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_rec_stdstar_la_LDFLAGS = -module -avoid-version
 #sinfo_rec_stdstar_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_rec_wavecal_la_SOURCES = sinfo_rec_wavecal.c 
-sinfo_rec_wavecal_la_LIBADD = $(LIBSINFONI)
+sinfo_rec_wavecal_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_rec_wavecal_la_LDFLAGS = -module -avoid-version
 sinfo_rec_wavecal_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_jitter_la_SOURCES = sinfo_step_jitter.c 
-#sinfo_step_jitter_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_jitter_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_jitter_la_LDFLAGS = -module -avoid-version
 #sinfo_step_jitter_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_psf_la_SOURCES = sinfo_step_psf.c
-#sinfo_step_psf_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_psf_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_psf_la_LDFLAGS = -module -avoid-version
 #sinfo_step_psf_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_stdstar_la_SOURCES = sinfo_step_stdstar.c
-#sinfo_step_stdstar_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_stdstar_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_stdstar_la_LDFLAGS = -module -avoid-version
 #sinfo_step_stdstar_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_objnod_la_SOURCES = sinfo_step_objnod.c
-#sinfo_step_objnod_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_objnod_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_objnod_la_LDFLAGS = -module -avoid-version
 #sinfo_step_objnod_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_step_distortion_la_SOURCES = sinfo_step_distortion.c
-#sinfo_step_distortion_la_LIBADD = $(LIBSINFONI)
+#sinfo_step_distortion_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_step_distortion_la_LDFLAGS = -module -avoid-version
 #sinfo_step_distortion_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_bp_mask_add_la_SOURCES = sinfo_utl_bp_mask_add.c
-sinfo_utl_bp_mask_add_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_bp_mask_add_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_bp_mask_add_la_LDFLAGS = -module -avoid-version
 sinfo_utl_bp_mask_add_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_cube2ima_la_SOURCES = sinfo_utl_cube2ima.c
-sinfo_utl_cube2ima_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube2ima_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube2ima_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube2ima_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_ima_cube_ks_test_la_SOURCES = sinfo_utl_ima_cube_ks_test.c
-#sinfo_utl_ima_cube_ks_test_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_ima_cube_ks_test_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_ima_cube_ks_test_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_ima_cube_ks_test_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_eff_la_SOURCES = sinfo_utl_eff.c
-#sinfo_utl_eff_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_eff_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_eff_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_eff_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_cube2spectrum_la_SOURCES = sinfo_utl_cube2spectrum.c
-sinfo_utl_cube2spectrum_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube2spectrum_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube2spectrum_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube2spectrum_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_cube_arith_la_SOURCES = sinfo_utl_cube_arith.c
-sinfo_utl_cube_arith_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_arith_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_arith_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_arith_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_cube_combine_la_SOURCES = sinfo_utl_cube_combine.c
-sinfo_utl_cube_combine_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_combine_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_combine_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_combine_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_cube_create_la_SOURCES = sinfo_utl_cube_create.c
-sinfo_utl_cube_create_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_cube_create_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_cube_create_la_LDFLAGS = -module -avoid-version
 sinfo_utl_cube_create_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_illumcorr_la_SOURCES = sinfo_utl_illumcorr.c 
-#sinfo_utl_illumcorr_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_illumcorr_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_illumcorr_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_illumcorr_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_ima_arith_la_SOURCES = sinfo_utl_ima_arith.c
-sinfo_utl_ima_arith_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_ima_arith_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_ima_arith_la_LDFLAGS = -module -avoid-version
 sinfo_utl_ima_arith_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_ima_gauss_la_SOURCES = sinfo_utl_ima_gauss.c
-#sinfo_utl_ima_gauss_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_ima_gauss_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_ima_gauss_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_ima_gauss_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_ima_line_corr_la_SOURCES = sinfo_utl_ima_line_corr.c
-sinfo_utl_ima_line_corr_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_ima_line_corr_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_ima_line_corr_la_LDFLAGS = -module -avoid-version
 sinfo_utl_ima_line_corr_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_skycor_la_SOURCES = sinfo_utl_skycor.c
-sinfo_utl_skycor_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_skycor_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_skycor_la_LDFLAGS = -module -avoid-version
 sinfo_utl_skycor_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_skymap_la_SOURCES = sinfo_utl_skymap.c
-sinfo_utl_skymap_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_skymap_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_skymap_la_LDFLAGS = -module -avoid-version
 sinfo_utl_skymap_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_table_ex_la_SOURCES = sinfo_utl_table_ex.c
-#sinfo_utl_table_ex_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_table_ex_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_table_ex_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_table_ex_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_img_noise_la_SOURCES = sinfo_img_noise.c
-#sinfo_img_noise_la_LIBADD = $(LIBSINFONI)
+#sinfo_img_noise_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_img_noise_la_LDFLAGS = -module -avoid-version
 #sinfo_img_noise_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_spectrum_divide_by_blackbody_la_SOURCES = sinfo_utl_spectrum_divide_by_blackbody.c
-sinfo_utl_spectrum_divide_by_blackbody_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_spectrum_divide_by_blackbody_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_spectrum_divide_by_blackbody_la_LDFLAGS = -module -avoid-version
 sinfo_utl_spectrum_divide_by_blackbody_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_spectrum_wavelength_shift_la_SOURCES = sinfo_utl_spectrum_wavelength_shift.c
-sinfo_utl_spectrum_wavelength_shift_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_spectrum_wavelength_shift_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_spectrum_wavelength_shift_la_LDFLAGS = -module -avoid-version
 sinfo_utl_spectrum_wavelength_shift_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_stdstars_la_SOURCES = sinfo_utl_stdstars.c
-#sinfo_utl_stdstars_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_stdstars_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_stdstars_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_stdstars_la_DEPENDENCIES = $(LIBSINFONI)
 
 #sinfo_utl_seds_la_SOURCES = sinfo_utl_seds.c
-#sinfo_utl_seds_la_LIBADD = $(LIBSINFONI)
+#sinfo_utl_seds_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 #sinfo_utl_seds_la_LDFLAGS = -module -avoid-version
 #sinfo_utl_seds_la_DEPENDENCIES = $(LIBSINFONI)
 sinfo_utl_line_oh_select_la_SOURCES = sinfo_utl_line_oh_select.c
-sinfo_utl_line_oh_select_la_LIBADD = $(LIBSINFONI)
+sinfo_utl_line_oh_select_la_LIBADD = $(LIBSINFONI) $(LIBADD)
 sinfo_utl_line_oh_select_la_LDFLAGS = -module -avoid-version
 sinfo_utl_line_oh_select_la_DEPENDENCIES = $(LIBSINFONI)
 all: all-recursive
@@ -699,7 +741,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
 	@list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
@@ -707,6 +748,8 @@ install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
 	}
@@ -728,45 +771,45 @@ clean-pluginLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-sinfo_rec_detlin.la: $(sinfo_rec_detlin_la_OBJECTS) $(sinfo_rec_detlin_la_DEPENDENCIES) 
+sinfo_rec_detlin.la: $(sinfo_rec_detlin_la_OBJECTS) $(sinfo_rec_detlin_la_DEPENDENCIES) $(EXTRA_sinfo_rec_detlin_la_DEPENDENCIES) 
 	$(sinfo_rec_detlin_la_LINK) -rpath $(plugindir) $(sinfo_rec_detlin_la_OBJECTS) $(sinfo_rec_detlin_la_LIBADD) $(LIBS)
-sinfo_rec_distortion.la: $(sinfo_rec_distortion_la_OBJECTS) $(sinfo_rec_distortion_la_DEPENDENCIES) 
+sinfo_rec_distortion.la: $(sinfo_rec_distortion_la_OBJECTS) $(sinfo_rec_distortion_la_DEPENDENCIES) $(EXTRA_sinfo_rec_distortion_la_DEPENDENCIES) 
 	$(sinfo_rec_distortion_la_LINK) -rpath $(plugindir) $(sinfo_rec_distortion_la_OBJECTS) $(sinfo_rec_distortion_la_LIBADD) $(LIBS)
-sinfo_rec_jitter.la: $(sinfo_rec_jitter_la_OBJECTS) $(sinfo_rec_jitter_la_DEPENDENCIES) 
+sinfo_rec_jitter.la: $(sinfo_rec_jitter_la_OBJECTS) $(sinfo_rec_jitter_la_DEPENDENCIES) $(EXTRA_sinfo_rec_jitter_la_DEPENDENCIES) 
 	$(sinfo_rec_jitter_la_LINK) -rpath $(plugindir) $(sinfo_rec_jitter_la_OBJECTS) $(sinfo_rec_jitter_la_LIBADD) $(LIBS)
-sinfo_rec_mdark.la: $(sinfo_rec_mdark_la_OBJECTS) $(sinfo_rec_mdark_la_DEPENDENCIES) 
+sinfo_rec_mdark.la: $(sinfo_rec_mdark_la_OBJECTS) $(sinfo_rec_mdark_la_DEPENDENCIES) $(EXTRA_sinfo_rec_mdark_la_DEPENDENCIES) 
 	$(sinfo_rec_mdark_la_LINK) -rpath $(plugindir) $(sinfo_rec_mdark_la_OBJECTS) $(sinfo_rec_mdark_la_LIBADD) $(LIBS)
-sinfo_rec_mflat.la: $(sinfo_rec_mflat_la_OBJECTS) $(sinfo_rec_mflat_la_DEPENDENCIES) 
+sinfo_rec_mflat.la: $(sinfo_rec_mflat_la_OBJECTS) $(sinfo_rec_mflat_la_DEPENDENCIES) $(EXTRA_sinfo_rec_mflat_la_DEPENDENCIES) 
 	$(sinfo_rec_mflat_la_LINK) -rpath $(plugindir) $(sinfo_rec_mflat_la_OBJECTS) $(sinfo_rec_mflat_la_LIBADD) $(LIBS)
-sinfo_rec_pupil.la: $(sinfo_rec_pupil_la_OBJECTS) $(sinfo_rec_pupil_la_DEPENDENCIES) 
+sinfo_rec_pupil.la: $(sinfo_rec_pupil_la_OBJECTS) $(sinfo_rec_pupil_la_DEPENDENCIES) $(EXTRA_sinfo_rec_pupil_la_DEPENDENCIES) 
 	$(sinfo_rec_pupil_la_LINK) -rpath $(plugindir) $(sinfo_rec_pupil_la_OBJECTS) $(sinfo_rec_pupil_la_LIBADD) $(LIBS)
-sinfo_rec_wavecal.la: $(sinfo_rec_wavecal_la_OBJECTS) $(sinfo_rec_wavecal_la_DEPENDENCIES) 
+sinfo_rec_wavecal.la: $(sinfo_rec_wavecal_la_OBJECTS) $(sinfo_rec_wavecal_la_DEPENDENCIES) $(EXTRA_sinfo_rec_wavecal_la_DEPENDENCIES) 
 	$(sinfo_rec_wavecal_la_LINK) -rpath $(plugindir) $(sinfo_rec_wavecal_la_OBJECTS) $(sinfo_rec_wavecal_la_LIBADD) $(LIBS)
-sinfo_utl_bp_mask_add.la: $(sinfo_utl_bp_mask_add_la_OBJECTS) $(sinfo_utl_bp_mask_add_la_DEPENDENCIES) 
+sinfo_utl_bp_mask_add.la: $(sinfo_utl_bp_mask_add_la_OBJECTS) $(sinfo_utl_bp_mask_add_la_DEPENDENCIES) $(EXTRA_sinfo_utl_bp_mask_add_la_DEPENDENCIES) 
 	$(sinfo_utl_bp_mask_add_la_LINK) -rpath $(plugindir) $(sinfo_utl_bp_mask_add_la_OBJECTS) $(sinfo_utl_bp_mask_add_la_LIBADD) $(LIBS)
-sinfo_utl_cube2ima.la: $(sinfo_utl_cube2ima_la_OBJECTS) $(sinfo_utl_cube2ima_la_DEPENDENCIES) 
+sinfo_utl_cube2ima.la: $(sinfo_utl_cube2ima_la_OBJECTS) $(sinfo_utl_cube2ima_la_DEPENDENCIES) $(EXTRA_sinfo_utl_cube2ima_la_DEPENDENCIES) 
 	$(sinfo_utl_cube2ima_la_LINK) -rpath $(plugindir) $(sinfo_utl_cube2ima_la_OBJECTS) $(sinfo_utl_cube2ima_la_LIBADD) $(LIBS)
-sinfo_utl_cube2spectrum.la: $(sinfo_utl_cube2spectrum_la_OBJECTS) $(sinfo_utl_cube2spectrum_la_DEPENDENCIES) 
+sinfo_utl_cube2spectrum.la: $(sinfo_utl_cube2spectrum_la_OBJECTS) $(sinfo_utl_cube2spectrum_la_DEPENDENCIES) $(EXTRA_sinfo_utl_cube2spectrum_la_DEPENDENCIES) 
 	$(sinfo_utl_cube2spectrum_la_LINK) -rpath $(plugindir) $(sinfo_utl_cube2spectrum_la_OBJECTS) $(sinfo_utl_cube2spectrum_la_LIBADD) $(LIBS)
-sinfo_utl_cube_arith.la: $(sinfo_utl_cube_arith_la_OBJECTS) $(sinfo_utl_cube_arith_la_DEPENDENCIES) 
+sinfo_utl_cube_arith.la: $(sinfo_utl_cube_arith_la_OBJECTS) $(sinfo_utl_cube_arith_la_DEPENDENCIES) $(EXTRA_sinfo_utl_cube_arith_la_DEPENDENCIES) 
 	$(sinfo_utl_cube_arith_la_LINK) -rpath $(plugindir) $(sinfo_utl_cube_arith_la_OBJECTS) $(sinfo_utl_cube_arith_la_LIBADD) $(LIBS)
-sinfo_utl_cube_combine.la: $(sinfo_utl_cube_combine_la_OBJECTS) $(sinfo_utl_cube_combine_la_DEPENDENCIES) 
+sinfo_utl_cube_combine.la: $(sinfo_utl_cube_combine_la_OBJECTS) $(sinfo_utl_cube_combine_la_DEPENDENCIES) $(EXTRA_sinfo_utl_cube_combine_la_DEPENDENCIES) 
 	$(sinfo_utl_cube_combine_la_LINK) -rpath $(plugindir) $(sinfo_utl_cube_combine_la_OBJECTS) $(sinfo_utl_cube_combine_la_LIBADD) $(LIBS)
-sinfo_utl_cube_create.la: $(sinfo_utl_cube_create_la_OBJECTS) $(sinfo_utl_cube_create_la_DEPENDENCIES) 
+sinfo_utl_cube_create.la: $(sinfo_utl_cube_create_la_OBJECTS) $(sinfo_utl_cube_create_la_DEPENDENCIES) $(EXTRA_sinfo_utl_cube_create_la_DEPENDENCIES) 
 	$(sinfo_utl_cube_create_la_LINK) -rpath $(plugindir) $(sinfo_utl_cube_create_la_OBJECTS) $(sinfo_utl_cube_create_la_LIBADD) $(LIBS)
-sinfo_utl_ima_arith.la: $(sinfo_utl_ima_arith_la_OBJECTS) $(sinfo_utl_ima_arith_la_DEPENDENCIES) 
+sinfo_utl_ima_arith.la: $(sinfo_utl_ima_arith_la_OBJECTS) $(sinfo_utl_ima_arith_la_DEPENDENCIES) $(EXTRA_sinfo_utl_ima_arith_la_DEPENDENCIES) 
 	$(sinfo_utl_ima_arith_la_LINK) -rpath $(plugindir) $(sinfo_utl_ima_arith_la_OBJECTS) $(sinfo_utl_ima_arith_la_LIBADD) $(LIBS)
-sinfo_utl_ima_line_corr.la: $(sinfo_utl_ima_line_corr_la_OBJECTS) $(sinfo_utl_ima_line_corr_la_DEPENDENCIES) 
+sinfo_utl_ima_line_corr.la: $(sinfo_utl_ima_line_corr_la_OBJECTS) $(sinfo_utl_ima_line_corr_la_DEPENDENCIES) $(EXTRA_sinfo_utl_ima_line_corr_la_DEPENDENCIES) 
 	$(sinfo_utl_ima_line_corr_la_LINK) -rpath $(plugindir) $(sinfo_utl_ima_line_corr_la_OBJECTS) $(sinfo_utl_ima_line_corr_la_LIBADD) $(LIBS)
-sinfo_utl_line_oh_select.la: $(sinfo_utl_line_oh_select_la_OBJECTS) $(sinfo_utl_line_oh_select_la_DEPENDENCIES) 
+sinfo_utl_line_oh_select.la: $(sinfo_utl_line_oh_select_la_OBJECTS) $(sinfo_utl_line_oh_select_la_DEPENDENCIES) $(EXTRA_sinfo_utl_line_oh_select_la_DEPENDENCIES) 
 	$(sinfo_utl_line_oh_select_la_LINK) -rpath $(plugindir) $(sinfo_utl_line_oh_select_la_OBJECTS) $(sinfo_utl_line_oh_select_la_LIBADD) $(LIBS)
-sinfo_utl_skycor.la: $(sinfo_utl_skycor_la_OBJECTS) $(sinfo_utl_skycor_la_DEPENDENCIES) 
+sinfo_utl_skycor.la: $(sinfo_utl_skycor_la_OBJECTS) $(sinfo_utl_skycor_la_DEPENDENCIES) $(EXTRA_sinfo_utl_skycor_la_DEPENDENCIES) 
 	$(sinfo_utl_skycor_la_LINK) -rpath $(plugindir) $(sinfo_utl_skycor_la_OBJECTS) $(sinfo_utl_skycor_la_LIBADD) $(LIBS)
-sinfo_utl_skymap.la: $(sinfo_utl_skymap_la_OBJECTS) $(sinfo_utl_skymap_la_DEPENDENCIES) 
+sinfo_utl_skymap.la: $(sinfo_utl_skymap_la_OBJECTS) $(sinfo_utl_skymap_la_DEPENDENCIES) $(EXTRA_sinfo_utl_skymap_la_DEPENDENCIES) 
 	$(sinfo_utl_skymap_la_LINK) -rpath $(plugindir) $(sinfo_utl_skymap_la_OBJECTS) $(sinfo_utl_skymap_la_LIBADD) $(LIBS)
-sinfo_utl_spectrum_divide_by_blackbody.la: $(sinfo_utl_spectrum_divide_by_blackbody_la_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_la_DEPENDENCIES) 
+sinfo_utl_spectrum_divide_by_blackbody.la: $(sinfo_utl_spectrum_divide_by_blackbody_la_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_la_DEPENDENCIES) $(EXTRA_sinfo_utl_spectrum_divide_by_blackbody_la_DEPENDENCIES) 
 	$(sinfo_utl_spectrum_divide_by_blackbody_la_LINK) -rpath $(plugindir) $(sinfo_utl_spectrum_divide_by_blackbody_la_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_la_LIBADD) $(LIBS)
-sinfo_utl_spectrum_wavelength_shift.la: $(sinfo_utl_spectrum_wavelength_shift_la_OBJECTS) $(sinfo_utl_spectrum_wavelength_shift_la_DEPENDENCIES) 
+sinfo_utl_spectrum_wavelength_shift.la: $(sinfo_utl_spectrum_wavelength_shift_la_OBJECTS) $(sinfo_utl_spectrum_wavelength_shift_la_DEPENDENCIES) $(EXTRA_sinfo_utl_spectrum_wavelength_shift_la_DEPENDENCIES) 
 	$(sinfo_utl_spectrum_wavelength_shift_la_LINK) -rpath $(plugindir) $(sinfo_utl_spectrum_wavelength_shift_la_OBJECTS) $(sinfo_utl_spectrum_wavelength_shift_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -824,8 +867,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -839,9 +885,7 @@ uninstall-pkgincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -850,7 +894,7 @@ uninstall-pkgincludeHEADERS:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -875,7 +919,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -1010,13 +1054,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -1054,10 +1095,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/recipes/sinfo_rec_detlin.c b/recipes/sinfo_rec_detlin.c
index b0eefbc..c954d02 100644
--- a/recipes/sinfo_rec_detlin.c
+++ b/recipes/sinfo_rec_detlin.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/04 17:23:02 $
  * $Revision: 1.21 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /**
diff --git a/recipes/sinfo_rec_distortion.c b/recipes/sinfo_rec_distortion.c
index 4378c56..ed66d02 100644
--- a/recipes/sinfo_rec_distortion.c
+++ b/recipes/sinfo_rec_distortion.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_rec_distortion.c,v 1.42 2011/11/16 13:36:19 amodigli Exp $
+/* $Id: sinfo_rec_distortion.c,v 1.43 2013/09/17 08:13:17 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2011/11/16 13:36:19 $
- * $Revision: 1.42 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/09/17 08:13:17 $
+ * $Revision: 1.43 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
@@ -793,7 +793,7 @@ const float lo_rej, const float hi_rej, const char* name_o)
   if( (img = cpl_imagelist_collapse_minmax_create(imset_tot,
                                                   lo_cut,hi_cut)) == NULL) {
     sinfo_msg_error("Error code");
-    sinfo_msg_error((char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
     cpl_imagelist_delete(imset_tot);
     cpl_frameset_delete(sof);
     cpl_propertylist_delete(plist) ;
diff --git a/recipes/sinfo_rec_jitter.c b/recipes/sinfo_rec_jitter.c
index b2e3abf..e85ba27 100644
--- a/recipes/sinfo_rec_jitter.c
+++ b/recipes/sinfo_rec_jitter.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_rec_jitter.c,v 1.33 2009/10/20 14:32:56 kmirny Exp $
+/* $Id: sinfo_rec_jitter.c,v 1.35 2013/10/14 14:40:00 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -18,10 +18,10 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 /*
- * $Author: kmirny $
- * $Date: 2009/10/20 14:32:56 $
- * $Revision: 1.33 $
- * $Name: sinfo-2_3_3 $
+ * $Author: amodigli $
+ * $Date: 2013/10/14 14:40:00 $
+ * $Revision: 1.35 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_rec_mdark.c b/recipes/sinfo_rec_mdark.c
index 86255a7..6c2f1d1 100644
--- a/recipes/sinfo_rec_mdark.c
+++ b/recipes/sinfo_rec_mdark.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/28 10:36:10 $
  * $Revision: 1.22 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_rec_mflat.c b/recipes/sinfo_rec_mflat.c
index bdf0a59..5797ed3 100644
--- a/recipes/sinfo_rec_mflat.c
+++ b/recipes/sinfo_rec_mflat.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/05 08:13:05 $
  * $Revision: 1.22 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_rec_pupil.c b/recipes/sinfo_rec_pupil.c
index 4aa045e..18e0cc2 100644
--- a/recipes/sinfo_rec_pupil.c
+++ b/recipes/sinfo_rec_pupil.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/12 14:56:50 $
  * $Revision: 1.17 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_rec_wavecal.c b/recipes/sinfo_rec_wavecal.c
index fa4ee03..354e1c3 100644
--- a/recipes/sinfo_rec_wavecal.c
+++ b/recipes/sinfo_rec_wavecal.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/09/17 09:06:39 $
  * $Revision: 1.31 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_utl_bp_mask_add.c b/recipes/sinfo_utl_bp_mask_add.c
index 8ed8c25..ccdf552 100644
--- a/recipes/sinfo_utl_bp_mask_add.c
+++ b/recipes/sinfo_utl_bp_mask_add.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2008/08/21 09:46:47 $
  * $Revision: 1.18 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/recipes/sinfo_utl_cube2ima.c b/recipes/sinfo_utl_cube2ima.c
index 5dd612e..ea42678 100644
--- a/recipes/sinfo_utl_cube2ima.c
+++ b/recipes/sinfo_utl_cube2ima.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:40:28 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_cube2spectrum.c b/recipes/sinfo_utl_cube2spectrum.c
index c6b4295..7dc6cbb 100644
--- a/recipes/sinfo_utl_cube2spectrum.c
+++ b/recipes/sinfo_utl_cube2spectrum.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 08:33:11 $
  * $Revision: 1.12 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_cube_arith.c b/recipes/sinfo_utl_cube_arith.c
index 8ccacda..8c33126 100644
--- a/recipes/sinfo_utl_cube_arith.c
+++ b/recipes/sinfo_utl_cube_arith.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:40:28 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_cube_combine.c b/recipes/sinfo_utl_cube_combine.c
index 88b83a7..351fd60 100644
--- a/recipes/sinfo_utl_cube_combine.c
+++ b/recipes/sinfo_utl_cube_combine.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:40:28 $
  * $Revision: 1.12 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_cube_create.c b/recipes/sinfo_utl_cube_create.c
index 8b76ef3..d515dfc 100644
--- a/recipes/sinfo_utl_cube_create.c
+++ b/recipes/sinfo_utl_cube_create.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_utl_cube_create.c,v 1.5 2008/08/29 11:34:03 amodigli Exp $
+/* $Id: sinfo_utl_cube_create.c,v 1.6 2013/08/15 11:40:17 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2008/08/29 11:34:03 $
- * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/08/15 11:40:17 $
+ * $Revision: 1.6 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -392,7 +392,6 @@ sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames)
    char dist_list[80];
 
 
-    int jit_ind=0;
    int ns_index=0;
    int n_coeffs=0;
    int nrows=0;
@@ -413,10 +412,6 @@ sinfo_cube_create(cpl_parameterlist * parameters, cpl_frameset * frames)
    check_nomsg(flux_cor=cpl_parameter_get_bool(p));
 
    check_nomsg(p=cpl_parameterlist_find(parameters,
-                                        "sinfoni.objnod.jitter_index"));
-   check_nomsg(jit_ind=cpl_parameter_get_bool(p));
-
-   check_nomsg(p=cpl_parameterlist_find(parameters,
                                         "sinfoni.objnod.kernel_type"));
    check_nomsg(strcpy(kernel,cpl_parameter_get_string(p)));
 
diff --git a/recipes/sinfo_utl_ima_arith.c b/recipes/sinfo_utl_ima_arith.c
index 30faf12..118a942 100644
--- a/recipes/sinfo_utl_ima_arith.c
+++ b/recipes/sinfo_utl_ima_arith.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2009/01/30 14:56:12 $
  * $Revision: 1.14 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_ima_line_corr.c b/recipes/sinfo_utl_ima_line_corr.c
index 27b0955..a13147d 100644
--- a/recipes/sinfo_utl_ima_line_corr.c
+++ b/recipes/sinfo_utl_ima_line_corr.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2009/06/05 08:18:55 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_line_oh_select.c b/recipes/sinfo_utl_line_oh_select.c
index 6521044..7123155 100644
--- a/recipes/sinfo_utl_line_oh_select.c
+++ b/recipes/sinfo_utl_line_oh_select.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_utl_line_oh_select.c,v 1.2 2012/08/10 07:55:03 amodigli Exp $
+/* $Id: sinfo_utl_line_oh_select.c,v 1.3 2013/07/15 08:14:38 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2012/08/10 07:55:03 $
- * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/07/15 08:14:38 $
+ * $Revision: 1.3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -44,7 +44,7 @@
 #include "sinfo_pro_types.h"
 #include "sinfo_tpl_utils.h"
 #include "sinfo_tpl_dfs.h"
-
+#include "sinfo_globals.h"
 
 /*-----------------------------------------------------------------------------
                             Functions prototypes
diff --git a/recipes/sinfo_utl_skycor.c b/recipes/sinfo_utl_skycor.c
index 64c6177..5377cc0 100644
--- a/recipes/sinfo_utl_skycor.c
+++ b/recipes/sinfo_utl_skycor.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_utl_skycor.c,v 1.13 2007/10/26 09:40:28 amodigli Exp $
+/* $Id: sinfo_utl_skycor.c,v 1.14 2013/09/09 15:23:10 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2007/10/26 09:40:28 $
- * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/09/09 15:23:10 $
+ * $Revision: 1.14 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -331,7 +331,7 @@ sinfo_utl_skycor(cpl_parameterlist * config, cpl_frameset* set)
     */
 
     /* Save the file */
-    check(cpl_table_save(int_obj, plist, NULL, name_o, 0),
+    check(cpl_table_save(int_obj, plist, NULL, name_o,CPL_IO_DEFAULT),
       "Could not save product");
     sinfo_free_propertylist(&plist) ;
  
diff --git a/recipes/sinfo_utl_skymap.c b/recipes/sinfo_utl_skymap.c
index bb37f38..16344a4 100644
--- a/recipes/sinfo_utl_skymap.c
+++ b/recipes/sinfo_utl_skymap.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2009/01/30 14:56:12 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_spectrum_divide_by_blackbody.c b/recipes/sinfo_utl_spectrum_divide_by_blackbody.c
index d59c060..4ee29f8 100644
--- a/recipes/sinfo_utl_spectrum_divide_by_blackbody.c
+++ b/recipes/sinfo_utl_spectrum_divide_by_blackbody.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:40:28 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/sinfo_utl_spectrum_wavelength_shift.c b/recipes/sinfo_utl_spectrum_wavelength_shift.c
index 2ec5f6e..a2a9f63 100644
--- a/recipes/sinfo_utl_spectrum_wavelength_shift.c
+++ b/recipes/sinfo_utl_spectrum_wavelength_shift.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:40:28 $
  * $Revision: 1.11 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/recipes/tests/Makefile.am b/recipes/tests/Makefile.am
index 49bb876..0522cbf 100644
--- a/recipes/tests/Makefile.am
+++ b/recipes/tests/Makefile.am
@@ -33,7 +33,7 @@ LIBSINFO = $(top_builddir)/sinfoni/libsinfo.la \
 
 OBJDIR = $(top_builddir)/recipes/.libs
 
-INCLUDES = $(all_includes)
+AM_CPPFLAGS = $(all_includes)
 LDADD = $(LIBSINFO)
 
 check_PROGRAMS = sinfo_rec_detlin-test \
diff --git a/recipes/tests/Makefile.in b/recipes/tests/Makefile.in
index dddcd84..e9515e6 100644
--- a/recipes/tests/Makefile.in
+++ b/recipes/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -112,6 +129,11 @@ DIST_SOURCES = $(sinfo_rec_detlin_test_SOURCES) \
 	$(sinfo_utl_cube2ima_test_SOURCES) \
 	$(sinfo_utl_cube2spectrum_test_SOURCES) \
 	$(sinfo_utl_spectrum_divide_by_blackbody_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -136,6 +158,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -176,6 +199,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -188,6 +212,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -210,6 +235,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -245,7 +271,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -268,6 +293,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 DISTCLEANFILES = *~ .logfile
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = Makefile.in
@@ -275,7 +302,7 @@ LIBSINFO = $(top_builddir)/sinfoni/libsinfo.la \
           $(top_builddir)/irplib/libirplib.la
 
 OBJDIR = $(top_builddir)/recipes/.libs
-INCLUDES = $(all_includes)
+AM_CPPFLAGS = $(all_includes)
 LDADD = $(LIBSINFO)
 #                 sinfo_rec_mdark-test 
 #                 sinfo_rec_mdark_detmon-test \
@@ -410,22 +437,22 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-sinfo_rec_detlin-test$(EXEEXT): $(sinfo_rec_detlin_test_OBJECTS) $(sinfo_rec_detlin_test_DEPENDENCIES) 
+sinfo_rec_detlin-test$(EXEEXT): $(sinfo_rec_detlin_test_OBJECTS) $(sinfo_rec_detlin_test_DEPENDENCIES) $(EXTRA_sinfo_rec_detlin_test_DEPENDENCIES) 
 	@rm -f sinfo_rec_detlin-test$(EXEEXT)
 	$(LINK) $(sinfo_rec_detlin_test_OBJECTS) $(sinfo_rec_detlin_test_LDADD) $(LIBS)
-sinfo_rec_distortion-test$(EXEEXT): $(sinfo_rec_distortion_test_OBJECTS) $(sinfo_rec_distortion_test_DEPENDENCIES) 
+sinfo_rec_distortion-test$(EXEEXT): $(sinfo_rec_distortion_test_OBJECTS) $(sinfo_rec_distortion_test_DEPENDENCIES) $(EXTRA_sinfo_rec_distortion_test_DEPENDENCIES) 
 	@rm -f sinfo_rec_distortion-test$(EXEEXT)
 	$(LINK) $(sinfo_rec_distortion_test_OBJECTS) $(sinfo_rec_distortion_test_LDADD) $(LIBS)
-sinfo_rec_jitter-test$(EXEEXT): $(sinfo_rec_jitter_test_OBJECTS) $(sinfo_rec_jitter_test_DEPENDENCIES) 
+sinfo_rec_jitter-test$(EXEEXT): $(sinfo_rec_jitter_test_OBJECTS) $(sinfo_rec_jitter_test_DEPENDENCIES) $(EXTRA_sinfo_rec_jitter_test_DEPENDENCIES) 
 	@rm -f sinfo_rec_jitter-test$(EXEEXT)
 	$(LINK) $(sinfo_rec_jitter_test_OBJECTS) $(sinfo_rec_jitter_test_LDADD) $(LIBS)
-sinfo_utl_cube2ima-test$(EXEEXT): $(sinfo_utl_cube2ima_test_OBJECTS) $(sinfo_utl_cube2ima_test_DEPENDENCIES) 
+sinfo_utl_cube2ima-test$(EXEEXT): $(sinfo_utl_cube2ima_test_OBJECTS) $(sinfo_utl_cube2ima_test_DEPENDENCIES) $(EXTRA_sinfo_utl_cube2ima_test_DEPENDENCIES) 
 	@rm -f sinfo_utl_cube2ima-test$(EXEEXT)
 	$(LINK) $(sinfo_utl_cube2ima_test_OBJECTS) $(sinfo_utl_cube2ima_test_LDADD) $(LIBS)
-sinfo_utl_cube2spectrum-test$(EXEEXT): $(sinfo_utl_cube2spectrum_test_OBJECTS) $(sinfo_utl_cube2spectrum_test_DEPENDENCIES) 
+sinfo_utl_cube2spectrum-test$(EXEEXT): $(sinfo_utl_cube2spectrum_test_OBJECTS) $(sinfo_utl_cube2spectrum_test_DEPENDENCIES) $(EXTRA_sinfo_utl_cube2spectrum_test_DEPENDENCIES) 
 	@rm -f sinfo_utl_cube2spectrum-test$(EXEEXT)
 	$(LINK) $(sinfo_utl_cube2spectrum_test_OBJECTS) $(sinfo_utl_cube2spectrum_test_LDADD) $(LIBS)
-sinfo_utl_spectrum_divide_by_blackbody-test$(EXEEXT): $(sinfo_utl_spectrum_divide_by_blackbody_test_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_test_DEPENDENCIES) 
+sinfo_utl_spectrum_divide_by_blackbody-test$(EXEEXT): $(sinfo_utl_spectrum_divide_by_blackbody_test_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_test_DEPENDENCIES) $(EXTRA_sinfo_utl_spectrum_divide_by_blackbody_test_DEPENDENCIES) 
 	@rm -f sinfo_utl_spectrum_divide_by_blackbody-test$(EXEEXT)
 	$(LINK) $(sinfo_utl_spectrum_divide_by_blackbody_test_OBJECTS) $(sinfo_utl_spectrum_divide_by_blackbody_test_LDADD) $(LIBS)
 
@@ -597,14 +624,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -654,10 +682,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/recipes/tests/recipe_main.c b/recipes/tests/recipe_main.c
index 11725a6..03064cb 100644
--- a/recipes/tests/recipe_main.c
+++ b/recipes/tests/recipe_main.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2009/09/15 08:13:38 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/reflex/Makefile.am b/reflex/Makefile.am
new file mode 100644
index 0000000..eafccdd
--- /dev/null
+++ b/reflex/Makefile.am
@@ -0,0 +1,21 @@
+
+AUTOMAKE_OPTIONS = foreign
+
+#Put here all the workflows. They must end with extension .in. They should
+#be like a normal workflow but using @prefix@ for paths 
+#to the OCA rules (grep OCA in the xml file) or Python scripts
+WORKFLOWS = sinfo.xml
+#Put here the OCA rules used by the workflow
+OCAWKF =  sinfo_wkf.oca
+#Put Python scripts used by the workflows
+PYTHONWKF = 
+
+#This installs the workflow and the OCA rules in reflexaux directory
+wkfextra_DATA = $(WORKFLOWS) $(OCAWKF) $(PYTHONWKF)
+
+#Pack in the distribution the original workflow
+EXTRA_DIST = $(WORKFLOWS).in $(OCAWKF) $(PYTHONWKF)
+
+#This also installs the workflow in the common reflex directory
+wkfcopy_DATA = $(WORKFLOWS)
+
diff --git a/regtests/tests/Makefile.in b/reflex/Makefile.in
similarity index 63%
copy from regtests/tests/Makefile.in
copy to reflex/Makefile.in
index d1967b3..158d34d 100644
--- a/regtests/tests/Makefile.in
+++ b/reflex/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,7 +14,25 @@
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,8 +52,9 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-subdir = regtests/tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = reflex
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/sinfo.xml.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4macros/cpl.m4 \
 	$(top_srcdir)/m4macros/eso.m4 \
@@ -50,10 +69,44 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = sinfo.xml
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(wkfcopydir)" "$(DESTDIR)$(wkfextradir)"
+DATA = $(wkfcopy_DATA) $(wkfextra_DATA)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -74,6 +127,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -114,6 +168,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -126,6 +181,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -148,6 +204,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -183,7 +240,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -206,9 +262,27 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.8 foreign
-DISTCLEANFILES = *~
- at MAINTAINER_MODE_TRUE@MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
+AUTOMAKE_OPTIONS = foreign
+
+#Put here all the workflows. They must end with extension .in. They should
+#be like a normal workflow but using @prefix@ for paths 
+#to the OCA rules (grep OCA in the xml file) or Python scripts
+WORKFLOWS = sinfo.xml
+#Put here the OCA rules used by the workflow
+OCAWKF = sinfo_wkf.oca
+#Put Python scripts used by the workflows
+PYTHONWKF = 
+
+#This installs the workflow and the OCA rules in reflexaux directory
+wkfextra_DATA = $(WORKFLOWS) $(OCAWKF) $(PYTHONWKF)
+
+#Pack in the distribution the original workflow
+EXTRA_DIST = $(WORKFLOWS).in $(OCAWKF) $(PYTHONWKF)
+
+#This also installs the workflow in the common reflex directory
+wkfcopy_DATA = $(WORKFLOWS)
 all: all-am
 
 .SUFFIXES:
@@ -221,9 +295,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign regtests/tests/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign reflex/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign regtests/tests/Makefile
+	  $(AUTOMAKE) --foreign reflex/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -242,12 +316,56 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(am__aclocal_m4_deps):
+sinfo.xml: $(top_builddir)/config.status $(srcdir)/sinfo.xml.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
+install-wkfcopyDATA: $(wkfcopy_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(wkfcopy_DATA)'; test -n "$(wkfcopydir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(wkfcopydir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(wkfcopydir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(wkfcopydir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(wkfcopydir)" || exit $$?; \
+	done
+
+uninstall-wkfcopyDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(wkfcopy_DATA)'; test -n "$(wkfcopydir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(wkfcopydir)'; $(am__uninstall_files_from_dir)
+install-wkfextraDATA: $(wkfextra_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(wkfextra_DATA)'; test -n "$(wkfextradir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(wkfextradir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(wkfextradir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(wkfextradir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(wkfextradir)" || exit $$?; \
+	done
+
+uninstall-wkfextraDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(wkfextra_DATA)'; test -n "$(wkfextradir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(wkfextradir)'; $(am__uninstall_files_from_dir)
 tags: TAGS
 TAGS:
 
@@ -287,8 +405,11 @@ distdir: $(DISTFILES)
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile
+all-am: Makefile $(DATA)
 installdirs:
+	for dir in "$(DESTDIR)$(wkfcopydir)" "$(DESTDIR)$(wkfextradir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
 install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
@@ -299,10 +420,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
@@ -310,12 +436,10 @@ clean-generic:
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-am
 
 clean-am: clean-generic clean-libtool mostlyclean-am
@@ -336,7 +460,7 @@ info: info-am
 
 info-am:
 
-install-data-am:
+install-data-am: install-wkfcopyDATA install-wkfextraDATA
 
 install-dvi: install-dvi-am
 
@@ -380,7 +504,7 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am:
+uninstall-am: uninstall-wkfcopyDATA uninstall-wkfextraDATA
 
 .MAKE: install-am install-strip
 
@@ -391,34 +515,12 @@ uninstall-am:
 	install-exec install-exec-am install-html install-html-am \
 	install-info install-info-am install-man install-pdf \
 	install-pdf-am install-ps install-ps-am install-strip \
-	installcheck installcheck-am installdirs maintainer-clean \
+	install-wkfcopyDATA install-wkfextraDATA installcheck \
+	installcheck-am installdirs maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-generic \
-	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
-reg0:
-	esoreg.pl  -force -id 0 ../../${PACKAGE}_reg/sof
-
-reg1:
-	esoreg.pl  -force -id 1 ../../${PACKAGE}_reg/sof
-
-valgrind:
-	esoreg.pl  -valgrind -preload  ../../${PACKAGE}_reg/sof
-
-check:
-	mkdir -p .purifydir
-	@if test -d ../../${PACKAGE}_reg/sof/; then esorex --version ; fi
-	@if test -d ../../${PACKAGE}_reg/sof/; then mkdir -p ../../${PACKAGE}_reg/sof/.purifydir ; fi
-	@if test -d ../../${PACKAGE}_reg/sof/.purifydir; then touch ../../${PACKAGE}_reg/sof/.purifydir/_dummy ; fi
-#	if test -d ../../${PACKAGE}_reg; then esoreg.pl  -force -id 0 ../../${PACKAGE}_reg/sof; fi
-#       link to the Reference data under ${SOF_DATA}/${PACKAGE}/ReferenceData/
-	if test -d ../../${PACKAGE}_reg; then  for i in ${SOF_DATA}/${PACKAGE}/ReferenceData/*.0; do ln -f -s  $$i ../../${PACKAGE}_reg/sof/ ; done ; fi
-	if test -d ../../${PACKAGE}_reg; then esoreg.pl  -force -id 1 ../../${PACKAGE}_reg/sof; fi 
-	@if test "$$?x" = "0x"; then echo PASS: regtests; fi
-	@if test "$$?x" != "0x"; then echo FAILED: regtests; fi
-	@if test -d ../../${PACKAGE}_reg/sof/.purifydir; then cp ../../${PACKAGE}_reg/sof/.purifydir/* .purifydir; fi
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-wkfcopyDATA uninstall-wkfextraDATA
 
- at PURIFY_TRUE@include $(top_builddir)/Makefile.purify
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/reflex/sinfo.xml.in b/reflex/sinfo.xml.in
new file mode 100644
index 0000000..be7fb38
--- /dev/null
+++ b/reflex/sinfo.xml.in
@@ -0,0 +1,7127 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE entity PUBLIC "-//UC Berkeley//DTD MoML 1//EN"
+    "http://ptolemy.eecs.berkeley.edu/xml/dtd/MoML_1.dtd">
+<entity name="sinfo" class="ptolemy.actor.TypedCompositeActor">
+    <property name="Rectangle6" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[270.0, 385.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="627.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="130.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_renderFirst" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+    </property>
+    <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="9.1.devel">
+    </property>
+    <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={121, 21, 1267, 773}, maximized=false}">
+    </property>
+    <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[955, 621]">
+    </property>
+    <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="0.5886379192334018">
+    </property>
+    <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{1136.1947674418602, 608.4889534883721}">
+    </property>
+    <property name="RAWDATA_DIR" class="ptolemy.data.expr.FileParameter" value="$ROOT_DATA_DIR/reflex_input/sinfo">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 65.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+    </property>
+    <property name="DDF Director" class="ptolemy.domains.ddf.kernel.DDFDirector">
+        <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
+        </property>
+        <property name="maximumReceiverCapacity" class="ptolemy.data.expr.Parameter" value="0">
+        </property>
+        <property name="runUntilDeadlockInOneIteration" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Gang Zhou</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
            <p> The dynamic dataflow (DDF) domain is a superset of the synchronous
            dataflow(SDF) and Boolean dataflow(BDF) domains. In the SDF domain,
            an actor consumes and produces a fixed number of tokens per firing.
            This static information makes possible compile-time scheduling. In the
            DDF domain, there are few  [...]
+<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. </configure></property>
+<property name="prop:maximumReceiverCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Parameter representing the maximum capacity of each receiver controlled by this director. This is an integer that defaults to 0, which means the queue in each receiver is unbounded. To specify bounded queues, set this to a positive integer. </configure></property>
+<property name="prop:runUntilDeadlockInOneIteration" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A parameter indicating whether one iteration consists of repeated basic iterations until deadlock. If this parameter is true, the model will be executed until deadlock in one iteration. The default value is a BooleanToken with the value false. It cannot be set to true if this director is at the top level.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:director:5:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ddf.kernel.DDFDirector">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:5:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[70.0, -185.0]">
+        </property>
+    </property>
+    <property name="TMP_PRODUCTS_DIR" class="ptolemy.data.expr.FileParameter" value="$ROOT_DATA_DIR/reflex_tmp_products/sinfo">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 200.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+    </property>
+    <property name="BOOKKEEPING_DIR" class="ptolemy.data.expr.FileParameter" value="$ROOT_DATA_DIR/reflex_book_keeping/sinfo">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 140.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+    </property>
+    <property name="LOGS_DIR" class="ptolemy.data.expr.FileParameter" value="$ROOT_DATA_DIR/reflex_logs/sinfo">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 170.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+    </property>
+    <property name="END_PRODUCTS_DIR" class="ptolemy.data.expr.FileParameter" value="$ROOT_DATA_DIR/reflex_end_products">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 255.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+    </property>
+    <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="
To run this workflow on the demo data:
   - Turn on highlighting. Choose "Tools"-> "Animate at Runtime"
     from top menu and set it to "1".
   - Press the "Run" button OR cntrl-R to start the workflow.

To run on a different data set:
   - Click on ROOT_DATA_DIR and set as appropriate.
     All subdirectories of RAWDATA_DIR will be [...]
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[-55.0, 0.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="FITS_VIEWER" class="ptolemy.data.expr.StringParameter" value="fv">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 170.0]">
+        </property>
+    </property>
+    <property name="ESORexArgs" class="ptolemy.data.expr.StringParameter" value="--suppress-prefix=TRUE">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[675.0, 1190.0]">
+        </property>
+    </property>
+    <property name="END_PRODUCTS_SUBDIR" class="ptolemy.data.expr.StringParameter" value="2013-10-11T10:17:38/SINFO.2011-01-02T02:33:52.141_tpl">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:37445:43:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[935.0, 1190.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+    </property>
+    <property name="EraseDirs" class="ptolemy.data.expr.StringParameter" value="false">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 110.0]">
+        </property>
+    </property>
+    <property name="GLOBAL_TIMESTAMP" class="ptolemy.data.expr.StringParameter" value="2013-10-11T10:17:38">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[370.0, 1190.0]">
+        </property>
+    </property>
+    <property name="ROOT_DATA_DIR" class="ptolemy.data.expr.FileParameter" value="ROOT_DATA_PATH_TO_REPLACE">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 35.0]">
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and select & [...]
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+    </property>
+    <property name="Annotation2" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Change "EraseDirs" to 'true' to erase 
BOOKKEEPING_DIR, TMP_PRODUCTS_DIR and LOGS_DIR
each time the workflow is run (Lazy Mode will not work anymore)">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:18725:4:2">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1200.0, 95.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation3" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="38">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4, 0.7, 0.3, 1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="SINFONI Workflow (v. @VERSION@)">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:250:2">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[380.0, -185.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org/ns/:2479:34:2">
+        </property>
+    </property>
+    <property name="Rectangle" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[35.0, 385.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="225.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="130.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Rectangle2" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[905.0, 385.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="345.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="130.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Rectangle3" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[540.0, -120.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="469.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="66.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Rectangle4" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="{1425.0, 385.0}">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="183.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="130.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Rectangle5" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1260.0, 385.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="157.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="130.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Annotation4" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="24">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="         Step 1: 
Data Organisation 
    and Selection">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[40.0, 410.0]">
+        </property>
+    </property>
+    <property name="Annotation5" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="24">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="              Step 3:
Wavelength Calibration">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:37445:155:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[915.0, 410.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation6" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="24">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="         Step 2: 
Detector Distortion, Linearity Determination
Creation of Master Calibration Files">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:37445:156:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[305.0, 410.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation7" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="24">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="   Step 4:
3D Cube
Generation">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:37445:154:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1275.0, 410.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation8" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="24">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="    Step 5: 
    Output
Organisation
">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1440.0, 410.0]">
+        </property>
+    </property>
+    <property name="Annotation10" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="fits viewer to use for the
inspection of input/output
products
">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1205.0, 155.0]">
+        </property>
+    </property>
+    <property name="Annotation12" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="18">
+            <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+            </property>
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Setup Directories

">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[565.0, -110.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="Annotation14" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="16">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Output:


">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[650.0, 215.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="Annotation11" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="16">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Input:


">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[650.0, -10.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="Annotation13" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="16">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Working Directories:


">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[605.0, 105.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="Annotation15" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="18">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Global Parameters

">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1050.0, -100.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="Rectangle7" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[5.0, -125.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="520.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="66.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Rectangle8" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1015.0, -120.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="627.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="66.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:434:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+    </property>
+    <property name="Annotation16" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="= actor with 
   interactive option

">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1445.0, -105.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:400:110">
+    </property>
+    <property name="Annotation20" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="18">
+            <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+            </property>
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Workflow Instructions
">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[5.0, -100.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+    </property>
+    <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org/ns/:2479:15:19:urn:lsid:kepler-project.org/ns/:5968:14:430:urn:lsid:kepler-project.org/ns/:5968:89:487:urn:lsid:kepler-project.org/ns/:5968:128:105:urn:lsid:kepler-project.org/ns/:10733:22:38:urn:lsid:kepler-project.org/ns/:12415:2:153:urn:lsid:kepler-project.org/ns/:12485:6:15:urn:lsid:kepler-project.org/ns/:12486:8:15:urn:lsid:kepler-project.org/ns/:12555:12:54:urn:lsid:ke [...]
+    </property>
+    <property name="CALIB_DATA_DIR" class="ptolemy.data.expr.FileParameter" value="CALIB_DATA_PATH_TO_REPLACE/sinfo- at VERSION@">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>yang zhao, edward lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>none</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and [...]
+<property name="prop:fileParameter" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The specified file or URL.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:13643:7:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.FileParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1186:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 1.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:#00BB00" y="20">-F-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[545.0, 95.0]">
+        </property>
+        <property name="allowFiles" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="allowDirectories" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The FileParameter specifies a file or URL. The value of the parameter is a string that may contain references to variables within scope (i.e., variables defined at the same level of the hierarchy or higher) using the $ID ${ID}, or $(ID) syntax. </p>

<p>Change the name of the FileParameter to better identify the file it specifies (right-click the parameter and select & [...]
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="yang zhao, edward lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="none">
+            </property>
+            <property name="fileParameter (parameter)" class="ptolemy.data.expr.StringParameter" value="The specified file or URL.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:422:1">
+        </property>
+    </property>
+    <property name="RecipeFailureMode" class="ptolemy.data.expr.StringParameter" value="Ask">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:16482:51:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 15.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+    </property>
+    <property name="Annotation19" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Global parameter for the behaviour when a recipe fails.
'Ask' means that each time a recipe fails,  the choice to 
continue or stop wil be presented. 'Continue' means that 
the workflow will ignore errors and continue. `Stop' means
the workflow will stop. 

">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:18725:2:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1200.0, 5.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1:urn:lsid:kepler-project.org/ns/:16482:52:1:urn:lsid:kepler-project.org/ns/:16989:16:1">
+        </property>
+    </property>
+    <property name="Rectangle18" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1360.0, -110.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{1.0,0.5,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="62.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="39.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="{1.0,0.5,0.0,1.0}">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="0.0">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:16989:11:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:434:1:urn:lsid:kepler-project.org/ns/:13961:219:11">
+        </property>
+        <property name="_renderFirst" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+    </property>
+    <property name="Setup Directory" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[5.0, 1175.0]">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1654.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="26.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:16989:12:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:434:1:urn:lsid:kepler-project.org/ns/:13961:216:9">
+        </property>
+    </property>
+    <property name="Annotation31" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="12">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Auxilliary and debug parameters, please do not change:">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:13961:215:4">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[15.0, 1180.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1:urn:lsid:kepler-project.org/ns/:15166:85:1">
+        </property>
+    </property>
+    <property name="N_SELECTED_DATASETS" class="ptolemy.data.expr.StringParameter" value="6">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31991:125:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1485.0, 1190.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+    </property>
+    <property name="Annotation17" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="linearity flats">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[310.0, 570.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation18" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="flats">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:8">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[325.0, 650.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation21" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="fibre flats, ns flats, ns arc lamps">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="{340.0, 710.0}">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation22" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="ref arc line list">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:4">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[520.0, 750.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation23" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="ref arc line list">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:4">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[660.0, 865.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation24" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="arc lamp frames">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:5">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[805.0, 930.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation25" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="ref slit pos">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:6">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1045.0, 925.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation26" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="pupil frames">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:9">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[470.0, 965.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation27" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="std star frames">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:10">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[705.0, 975.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation28" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="object frames">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:11">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[760.0, 1000.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation29" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Non-linear 
bad pixel map">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:13">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[535.0, 545.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation32" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="master flat
master bad pixel map">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:20">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[900.0, 845.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation33" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="ref bad pixel map">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:15">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[310.0, 590.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation34" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="ref bad pixel map">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:15">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[410.0, 650.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation35" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="drs setup wave">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:16">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[520.0, 775.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation36" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="drs setup wave">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:16">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[670.0, 845.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation37" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="distortions
slitlets distance
slit pos">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:19">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1080.0, 825.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation38" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="distortions
slitlets distance
slit pos">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:19">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1135.0, 685.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="Annotation39" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.2,0.6,1.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="master flat
master bad pixel map">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:556:20">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[945.0, 600.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="GlobalPlotInteractivity" class="ptolemy.data.expr.StringParameter" value="true">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:56:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 230.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1:urn:lsid:kepler-project.org/ns/:38254:6:1">
+        </property>
+    </property>
+    <property name="Annotation30" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Disable interactive GUIs for the whole workflow
Overrides in subworkflows have precedence.">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:38254:7:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1260.0, 220.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="DataSelectionMethod" class="ptolemy.data.expr.StringParameter" value="Interactive">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:86:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 280.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1">
+        </property>
+    </property>
+    <property name="Annotation40" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Selection method for the Data Set Chooser">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:85:3">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1265.0, 270.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+    </property>
+    <property name="ProvenanceExplorerEnabled" class="ptolemy.data.expr.StringParameter" value="true">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>StringParameter specifies a persistent string. </p>

<p>Change the name of the StringParameter to better identify the specified value (right-click the parameter and select "Customize Name" from the menu). Other actors may refer to the StringParameter using the $NAME syntax (e.g. $Parameter).
</p></configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:60:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.data.expr.StringParameter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1185:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Parameter">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Parameter">
+        </property>
+        <property name="_hideName" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+        <property name="_icon" class="ptolemy.vergil.icon.ValueIcon">
+            <property name="_color" class="ptolemy.actor.gui.ColorAttribute" value="{1.0, 0.0, 0.0, 1.0}">
+            </property>
+        </property>
+        <property name="_smallIconDescription" class="ptolemy.kernel.util.SingletonConfigurableAttribute">
+            <configure>
+        <svg>
+          <text x="20" style="font-size:14; font-family:SansSerif; fill:red" y="20">-S-</text>
+        </svg>
+      </configure>
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1030.0, 315.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:421:1:urn:lsid:kepler-project.org/ns/:43955:86:1">
+        </property>
+    </property>
+    <property name="Annotation41" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Show Provenance Explorer window">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:61:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1265.0, 305.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1:urn:lsid:kepler-project.org/ns/:43955:85:3">
+        </property>
+    </property>
+    <property name="Annotation9" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+            <property name="_editorFactory" class="ptolemy.vergil.toolbox.VisibleParameterEditorFactory">
+            </property>
+        </property>
+        <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{1.0,0.0,0.0,1.0}">
+        </property>
+        <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+        </property>
+        <property name="bold" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="text" class="ptolemy.kernel.util.StringAttribute" value="This is a basic workflow to help with data 
organisation and execution of the pipeline. 
The workflow was generated without a 
review of the quality of the science products.">
+            <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                </property>
+                <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                </property>
+            </property>
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:223:8">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1340.0, -250.0]">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward A. Lee">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+            <property name="textSize (parameter)" class="ptolemy.data.expr.StringParameter" value="The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.">
+            </property>
+            <property name="textColor (parameter)" class="ptolemy.data.expr.StringParameter" value="The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}">
+            </property>
+            <property name="fontFamily (parameter)" class="ptolemy.data.expr.StringParameter" value="The font face. Select a font from the drop-down menu. The default is "SansSerif".">
+            </property>
+            <property name="bold (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be bold. By default, type will not be bold.">
+            </property>
+            <property name="italic (parameter)" class="ptolemy.data.expr.StringParameter" value="Select to indicate that the type should be italics. By default, type will not be italicized.">
+            </property>
+            <property name="text (parameter)" class="ptolemy.data.expr.StringParameter" value="The text of the annotation.">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+        </property>
+        <property name="_renderLast" class="ptolemy.kernel.util.SingletonAttribute">
+        </property>
+    </property>
+    <property name="Setup Directory2" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="1330.0, -250.0">
+        </property>
+        <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+        </property>
+        <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{1.0,0.0,0.0,1.0}">
+        </property>
+        <property name="width" class="ptolemy.data.expr.Parameter" value="405.0">
+        </property>
+        <property name="height" class="ptolemy.data.expr.Parameter" value="80.0">
+        </property>
+        <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+        </property>
+        <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.99607843,0.9490196,0.7254902,1.0}">
+        </property>
+        <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:503:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:434:1:urn:lsid:kepler-project.org/ns/:25158:26:1:urn:lsid:kepler-project.org/ns/:31617:222:11:urn:lsid:kepler-project.org/ns/:44576:62:1">
+        </property>
+    </property>
+    <entity name="Wavelength Calibration" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:47:46">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[1155.0, 895.0]">
+        </property>
+        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={104, 102, 1209, 920}, maximized=false}">
+        </property>
+        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[893, 763]">
+        </property>
+        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="0.8551847972467">
+        </property>
+        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{558.109375, 309.1024111142217}">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org/ns/:2479:17:3:urn:lsid:kepler-project.org/ns/:5968:122:26:urn:lsid:kepler-project.org/ns/:12415:15:18:urn:lsid:kepler-project.org/ns/:12486:10:2:urn:lsid:kepler-project.org/ns/:12555:21:2:urn:lsid:kepler-project.org/ns/:14164:5:5:urn:lsid:kepler-project.org/ns/:14170:13:8:urn:lsid:kepler-project.org/ns/:16989:21:19:urn:lsid:kepler-project.org/ns/:25158:11:2:urn:lsid:kepl [...]
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[130.0, 185.0]">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[705.0, 180.0]">
+            </property>
+        </port>
+        <entity name="SofAccumulator" class="org.eso.SofAccumulator">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[550.0, 160.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="0">
+                </property>
+            </port>
+            <port name="#groups" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="sinfo_rec_wavecal_1" class="org.eso.RecipeExecuter">
+            <property name="Recipe Failure Mode" class="ptolemy.data.expr.StringParameter" value="$RecipeFailureMode">
+            </property>
+            <property name="Input Files Category" class="ptolemy.data.expr.StringParameter" value="WAVE_LAMP,REF_LINE_ARC,MASTER_FLAT_LAMP,MASTER_BP_MAP,DISTORTION,SLITLETS_DISTANCE,SLIT_POS,DRS_SETUP_WAVE,SLIT_POS">
+            </property>
+            <property name="Output Files Category" class="ptolemy.data.expr.StringParameter" value="WAVE_MAP,SLIT_POS">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[335.0, 130.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="sop in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="SofSplitter" class="org.eso.SofSplitter">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[195.0, 160.0]">
+            </property>
+        </entity>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <link port="sof_in" relation="relation"/>
+        <link port="sof_out" relation="relation5"/>
+        <link port="SofAccumulator.sof in" relation="relation4"/>
+        <link port="SofAccumulator.#groups" relation="relation3"/>
+        <link port="SofAccumulator.sof out" relation="relation5"/>
+        <link port="sinfo_rec_wavecal_1.sof in" relation="relation2"/>
+        <link port="sinfo_rec_wavecal_1.sof out" relation="relation4"/>
+        <link port="SofSplitter.sof in" relation="relation"/>
+        <link port="SofSplitter.sof out" relation="relation2"/>
+        <link port="SofSplitter.#groups" relation="relation3"/>
+    </entity>
+    <entity name="Object Cube Creation" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:7:44">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="{1260.0, 540.0}">
+        </property>
+        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={0, 35, 1680, 921}, maximized=false}">
+        </property>
+        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1431, 769]">
+        </property>
+        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.4480599563609">
+        </property>
+        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{191.109375, 38.5276795073376}">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:5968:77:19:urn:lsid:kepler-project.org/ns/:10733:21:26:urn:lsid:kepler-project.org/ns/:12485:8:1:urn:lsid:kepler-project.org/ns/:14170:27:5:urn:lsid:kepler-project.org/ns/:16989:25:19:urn:lsid:kepler-project.org/ns/:25158:15:2:urn:lsid:kepler-project.org/ns/:26405:30:2:urn:lsid:kepler-project.org/ns/:31991:141:1:urn:lsid:kepler [...]
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[-250.0, 105.0]">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[300.0, 110.0]">
+            </property>
+        </port>
+        <entity name="sinfo_rec_jitter_1" class="org.eso.RecipeExecuter">
+            <property name="Recipe Failure Mode" class="ptolemy.data.expr.StringParameter" value="$RecipeFailureMode">
+            </property>
+            <property name="Input Files Category" class="ptolemy.data.expr.StringParameter" value="OBJECT_NODDING,SKY_NODDING,STD,SKY_STD,PSF_CALIBRATOR,SKY_PSF_CALIBRATOR,MASTER_BP_MAP,MASTER_FLAT_LAMP,WAVE_MAP,SLITLETS_DISTANCE,SLIT_POS,DISTORTION,FIRST_COL">
+            </property>
+            <property name="Output Files Category" class="ptolemy.data.expr.StringParameter" value="COADD_OBJ,OBS_OBJ,COADD_STD,OBS_STD,COADD_PSF,OBS_PSF,STD_STAR_SPECTRA,SKY_MED,ENC_ENERGY,AO_PERFORMANCE">
+            </property>
+            <property name="Pause before execution" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="recipe_param_20" class="ptolemy.data.expr.Parameter" value="stack-sub_raw_sky=false">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[0.0, 55.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="sop in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="SofSplitter" class="org.eso.SofSplitter">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[-150.0, 85.0]">
+            </property>
+        </entity>
+        <entity name="SofAccumulator" class="org.eso.SofAccumulator">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[185.0, 85.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="0">
+                </property>
+            </port>
+            <port name="#groups" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="Auto">
+            </property>
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <link port="sof_in" relation="relation"/>
+        <link port="sof_out" relation="relation4"/>
+        <link port="sinfo_rec_jitter_1.sof in" relation="relation2"/>
+        <link port="sinfo_rec_jitter_1.sof out" relation="relation5"/>
+        <link port="SofSplitter.sof in" relation="relation"/>
+        <link port="SofSplitter.sof out" relation="relation2"/>
+        <link port="SofSplitter.#groups" relation="relation3"/>
+        <link port="SofAccumulator.sof in" relation="relation5"/>
+        <link port="SofAccumulator.#groups" relation="relation3"/>
+        <link port="SofAccumulator.sof out" relation="relation4"/>
+    </entity>
+    <entity name="DataOrganizer" class="org.eso.DataOrganizer">
+        <display name="Data Organiser"/>
+        <property name="OCA File" class="ptolemy.data.expr.FileParameter" value="@prefix@/share/esopipes/sinfo- at VERSION@/reflex/sinfo_wkf.oca">
+        </property>
+        <property name="Keywords to be displayed" class="ptolemy.data.expr.StringParameter" value="OBJECT,INS.GRAT1.NAME,INS.OPTI1.NAME">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:409:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.eso.DataOrganizer">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+        </property>
+        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="ESO">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="1.0">
+            </property>
+            <property name="OCA File (parameter)" class="ptolemy.data.expr.StringParameter" value="The filename (full path) containing the OCA rules used for classification and organization. Look at the user manual for more info.">
+            </property>
+            <property name="Keywords to be displayed (parameter)" class="ptolemy.data.expr.StringParameter" value="A comma separated list of FITS keywords which are extracted from all files in addition to the ones selected by the OCA rules">
+            </property>
+            <property name="class (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+            <property name="semanticType41 (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+            <property name="LoSOs (port)" class="ptolemy.kernel.util.StringAttribute" value="The produced LoSOs">
+            </property>
+            <property name="data dir (port)" class="ptolemy.kernel.util.StringAttribute" value="The directory containing the input data. It is scanned recursively.">
+            </property>
+            <property name="entityId (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[120.0, 645.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:workflow:6:1:urn:lsid:kepler-project.org/ns/:5968:13:3:urn:lsid:kepler-project.org/ns/:13180:2:2:urn:lsid:kepler-project.org/ns/:13643:11:1:urn:lsid:kepler-project.org/ns/:31991:13:5:urn:lsid:kepler-project.org/ns/:37445:176:4">
+        </property>
+        <port name="input data" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="datasets out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+        </port>
+    </entity>
+    <entity name="FitsRouter2" class="org.eso.FitsRouter">
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:uuid:474c491b-ecf1-4b44-b72f-10dd25505580:554:18">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.eso.FitsRouter">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+        </property>
+        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="ESO">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="1.0">
+            </property>
+            <property name="class (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+            <property name="semanticType41 (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+            <property name="rejected (port)" class="ptolemy.kernel.util.StringAttribute" value="The rejected SoF">
+            </property>
+            <property name="sof (port)" class="ptolemy.kernel.util.StringAttribute" value="The input SoF">
+            </property>
+            <property name="entityId (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="{290.0, 950.0}">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org/ns/:2479:35:6:urn:lsid:kepler-project.org/ns/:5968:143:5:urn:lsid:kepler-project.org/ns/:13180:13:5:urn:lsid:kepler-project.org/ns/:13643:12:1:urn:lsid:kepler-project.org/ns/:37445:143:29:urn:lsid:kepler-project.org/ns/:41649:67:45">
+        </property>
+        <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+        </property>
+        <property name="LINEARITY_config" class="ptolemy.data.expr.Parameter" value=""LINEARITY_LAMP"">
+            <property name="style" class="ptolemy.actor.gui.style.LineStyle">
+            </property>
+        </property>
+        <property name="DARK_config" class="ptolemy.data.expr.Parameter" value=""DARK"">
+        </property>
+        <property name="FLAT_config" class="ptolemy.data.expr.Parameter" value=""FLAT_LAMP"">
+        </property>
+        <property name="WAVE_config" class="ptolemy.data.expr.Parameter" value=""WAVE_LAMP,REF_LINE_ARC"">
+        </property>
+        <property name="WAVE_AUX_config" class="ptolemy.data.expr.Parameter" value=""DRS_SETUP_WAVE,REF_LINE_ARC"">
+        </property>
+        <property name="REF_SLIT_POS_config" class="ptolemy.data.expr.Parameter" value=""SLIT_POS"">
+        </property>
+        <property name="DISTORTION_config" class="ptolemy.data.expr.Parameter" value=""FIBRE_NS,FLAT_NS,WAVE_NS"">
+        </property>
+        <property name="PSF_config" class="ptolemy.data.expr.Parameter" value=""PSF_CALIBRATOR,SKY_PSF_CALIBRATOR"">
+        </property>
+        <property name="STD_config" class="ptolemy.data.expr.Parameter" value=""STD,SKY_STD"">
+        </property>
+        <property name="PUPIL_config" class="ptolemy.data.expr.Parameter" value=""PUPIL_LAMP"">
+        </property>
+        <property name="OBJECT_config" class="ptolemy.data.expr.Parameter" value=""OBJECT_NODDING,SKY_NODDING"">
+        </property>
+        <port name="sof rejected" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="multiport"/>
+            <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="LINEARITY" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="FLAT" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="DISTORTION" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="WAVE" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="REF_SLIT_POS" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="WAVE_AUX" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="PUPIL" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="PSF" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="STD" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="OBJECT" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+    </entity>
+    <entity name="Distortion Computation" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="8.1.devel">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:29:29">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[705.0, 725.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:5968:91:27:urn:lsid:kepler-project.org/ns/:37445:144:23">
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[-75.0, 210.0]">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[580.0, 210.0]">
+            </property>
+        </port>
+        <entity name="SofSplitter" class="org.eso.SofSplitter">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[40.0, 190.0]">
+            </property>
+        </entity>
+        <entity name="SofAccumulator" class="org.eso.SofAccumulator">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[395.0, 190.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="2">
+                </property>
+            </port>
+            <port name="#groups" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="0">
+                </property>
+            </port>
+        </entity>
+        <entity name="sinfo_rec_distortion_1" class="org.eso.RecipeExecuter">
+            <display name="sinfo_rec_distortion"/>
+            <property name="Lazy Mode" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="Recipe Failure Mode" class="ptolemy.data.expr.StringParameter" value="$RecipeFailureMode">
+            </property>
+            <property name="Input Files Category" class="ptolemy.data.expr.StringParameter" value="FIBRE_NS,FLAT_NS,WAVE_NS,REF_LINE_ARC,DRS_SETUP_WAVE,SLIT_POS">
+            </property>
+            <property name="Output Files Category" class="ptolemy.data.expr.StringParameter" value="DISTORTION,SLITLETS_DISTANCE,BP_MAP_DI">
+            </property>
+            <property name="Pause before execution" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[220.0, 175.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="sop in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <link port="sof_in" relation="relation"/>
+        <link port="sof_out" relation="relation4"/>
+        <link port="SofSplitter.sof in" relation="relation"/>
+        <link port="SofSplitter.sof out" relation="relation6"/>
+        <link port="SofSplitter.#groups" relation="relation5"/>
+        <link port="SofAccumulator.sof in" relation="relation2"/>
+        <link port="SofAccumulator.#groups" relation="relation5"/>
+        <link port="SofAccumulator.sof out" relation="relation4"/>
+        <link port="sinfo_rec_distortion_1.sof in" relation="relation6"/>
+        <link port="sinfo_rec_distortion_1.sof out" relation="relation2"/>
+    </entity>
+    <entity name="Initialise Current Dataset" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:501:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="{115.0, 945.0}">
+        </property>
+        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={208, 234, 1327, 816}, maximized=false}">
+        </property>
+        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1011, 659]">
+        </property>
+        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.0069218279703">
+        </property>
+        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{507.0250688367565, 388.2349360666744}">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</p>&#10 [...]
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Yuhong Xiong">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:12776:22:11:urn:lsid:kepler-project.org/ns/:2745:94:5:urn:lsid:kepler-project.org/ns/:13757:119:12:urn:lsid:kepler-project.org/ns/:14094:9:50:urn:lsid:kepler-project.org/ns/:15314:21:358:urn:lsid:kepler-project.org/ns/:25158:32:9:urn:lsid:kepler-project.org/ns/:31989:28:48">
+        </property>
+        <property name="Rectangle" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{875.0, 75.0}">
+            </property>
+            <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+            </property>
+            <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+            </property>
+            <property name="width" class="ptolemy.data.expr.Parameter" value="319.0">
+            </property>
+            <property name="height" class="ptolemy.data.expr.Parameter" value="72.0">
+            </property>
+            <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+            </property>
+            <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:13757:120:5">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:434:1">
+            </property>
+        </property>
+        <property name="Rectangle2" class="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{875.0, 75.0}">
+            </property>
+            <property name="lineWidth" class="ptolemy.data.expr.Parameter" value="5">
+            </property>
+            <property name="lineColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+            </property>
+            <property name="width" class="ptolemy.data.expr.Parameter" value="319.0">
+            </property>
+            <property name="height" class="ptolemy.data.expr.Parameter" value="72.0">
+            </property>
+            <property name="centered" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="fillColor" class="ptolemy.actor.gui.ColorAttribute" value="none">
+            </property>
+            <property name="rounding" class="ptolemy.data.expr.Parameter" value="20">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Rectangle attribute renders a rectangle on the Workflow canvas. Single-click the rectangle to drag the resize handles and adjust the shape's size, or double-click the rectangle to customize its height, width, line width, color, and fill color.</p></configure></property>
+<property name="prop:height" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineWidth" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line width. The value is a double that defaults to 1.0.</configure></property>
+<property name="prop:rounding" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The amount of rounding of the corners. The value is a double that defaults to 0.0, which indicates no rounding.</configure></property>
+<property name="prop:centered" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Indicate whether the shape should be centered on its origin. By default, the location is the upper-left corner.</configure></property>
+<property name="prop:dashArray" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify a dash-pattern for dashed or dotted lines. The value consists of an array of doubles that specify the length of the alternating solid and transparent segments. An empty value indicates that the line should not be dashed (the default).</configure></property>
+<property name="prop:width" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal extent. The value is a double that defaults to 100.0.</configure></property>
+<property name="prop:lineColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The line color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:fillColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The fill color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. By default, the value is "none."</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:13757:120:5">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.RectangleAttribute">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1197:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DecorativeActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:434:1">
+            </property>
+        </property>
+        <property name="DDF Director" class="ptolemy.domains.ddf.kernel.DDFDirector">
+            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="maximumReceiverCapacity" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="runUntilDeadlockInOneIteration" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Gang Zhou</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
            <p> The dynamic dataflow (DDF) domain is a superset of the synchronous
            dataflow(SDF) and Boolean dataflow(BDF) domains. In the SDF domain,
            an actor consumes and produces a fixed number of tokens per firing.
            This static information makes possible compile-time scheduling. In the
            DDF domain, there are few  [...]
+<property name="prop:maximumReceiverCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Parameter representing the maximum capacity of each receiver controlled by this director. This is an integer that defaults to 0, which means the queue in each receiver is unbounded. To specify bounded queues, set this to a positive integer. </configure></property>
+<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. </configure></property>
+<property name="prop:runUntilDeadlockInOneIteration" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A parameter indicating whether one iteration consists of repeated basic iterations until deadlock. If this parameter is true, the model will be executed until deadlock in one iteration. The default value is a BooleanToken with the value false. It cannot be set to true if this director is at the top level.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:88:4">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ddf.kernel.DDFDirector">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:5:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{730.0, 85.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:director:5:1">
+            </property>
+        </property>
+        <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="textSize" class="ptolemy.data.expr.Parameter" value="18">
+            </property>
+            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.4,0.4,0.0,1.0}">
+            </property>
+            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+            </property>
+            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="Display current processed data set">
+                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                    </property>
+                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                    </property>
+                </property>
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:14094:10:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{885.0, 95.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1:urn:lsid:kepler-project.org/ns/:13757:121:3">
+            </property>
+        </property>
+        <port name="dataset" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{355.0, 650.0}">
+            </property>
+        </port>
+        <port name="dataset_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{110.0, 350.0}">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="current_dataset" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{805.0, 350.0}">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+        </port>
+        <entity name="CurrentDataSet" class="org.eso.CurrentDataSet">
+            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:12341:47:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.eso.CurrentDataSet">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+            </property>
+            <property name="semanticType" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{410.0, 330.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList">
+            </property>
+            <port name="in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+            <port name="dataset name" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="Processing dataset ">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{467.57806, 87.69272}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="2" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value="""">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:79:4">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{662.57806, 247.69272}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1:urn:lsid:kepler-project.org/ns/:13757:392:4">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </entity>
+        <entity name="Display" class="ptolemy.actor.lib.gui.Display">
+            <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={0, 181, 512, 394}, maximized=false}">
+            </property>
+            <property name="_paneSize" class="ptolemy.actor.gui.SizeAttribute" value="[508, 346]">
+            </property>
+            <property name="rowsDisplayed" class="ptolemy.data.expr.Parameter" value="10">
+            </property>
+            <property name="columnsDisplayed" class="ptolemy.data.expr.Parameter" value="40">
+            </property>
+            <property name="suppressBlankLines" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="title" class="ptolemy.data.expr.StringParameter" value="Current DataSet">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong, Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Display actor reads tokens of any type via its input multiport, and displays each token on a separate line in a text display window.</p>

<p>Specify the size of the text display window with the rowsDisplayed and columnsDisplayed parameters. Simply resizing the window onscreen does not persistently change the size when the workflow is saved, closed, and the [...]
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts tokens of any type.</configure></property>
+<property name="prop:suppressBlankLines" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the actor should display blank lines (the default) or suppress them.</configure></property>
+<property name="prop:rowsDisplayed" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical size of the display, in rows. The value is an integer that defaults to 10.</configure></property>
+<property name="prop:columnsDisplayed" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal size of the display, in columns. The value is an integer that defaults to 40.</configure></property>
+<property name="prop:title" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The title of the text display window. If specified, the value will appear in the title bar of the text display window.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:83:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.gui.Display">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:883:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#TextualOutputActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#TextualOutput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{765.0, 245.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:7:1">
+            </property>
+        </entity>
+        <entity name="Counter" class="ptolemy.actor.lib.Counter">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Steve Neuendorffer</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Counter actor increments or decrements an internal counter, depending on its inputs. The actor outputs the counter value as an integer.</p>

<p>Each time the actor fires, it adjusts its internal counter (incrementing or decrementing the count) based on the input. Whenever a token is received from the increment input, the internal counter is incremented. Wh [...]
+<property name="port:increment" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port used to increment the counter. The port accepts tokens of any type. </configure></property>
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the counter value.</configure></property>
+<property name="port:decrement" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port used to decrement the counter. The port accepts tokens of any type.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:80:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Counter">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:947:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#IterativeMathOperationActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{412.57806, 132.69272}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:72:1">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The Counter actor increments or decrements an internal counter, depending on its inputs. The actor outputs the counter value as an integer.</p>

<p>Each time the actor fires, it adjusts its internal counter (incrementing or decrementing the count) based on the input. Whenever a token is received from the increment input, the internal counter is incremented. Wheneve [...]
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Steve Neuendorffer">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="increment (port)" class="ptolemy.kernel.util.StringAttribute" value="An input port used to increment the counter. The port accepts tokens of any type. ">
+                </property>
+                <property name="decrement (port)" class="ptolemy.kernel.util.StringAttribute" value="An input port used to decrement the counter. The port accepts tokens of any type.">
+                </property>
+                <property name="output (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the counter value.">
+                </property>
+            </property>
+            <port name="decrement" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant2" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$GLOBAL_TIMESTAMP">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:13757:393:3">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{380.0, 510.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:14094:13:2">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <entity name="3" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value=""/"">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:90:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{490.0, 535.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1:urn:lsid:kepler-project.org/ns/:13757:392:4">
+            </property>
+            <port name="parts" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+                </property>
+            </port>
+        </entity>
+        <entity name="Directory Maker" class="org.resurgence.actor.DirectoryMaker">
+            <property name="Directory name" class="ptolemy.actor.parameters.PortParameter" value="ROOT_DATA_PATH_TO_REPLACE/reflex_end_products/2013-10-11T10:17:38/SINFO.2011-01-02T02:33:52.141_tpl">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The DirectoryMaker actor creates a new local directory and outputs its path.</p>

<p>The name of the new directory is specified with the directoryName parameter.</p></configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time.</configure></property>
+<property name="port:path" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the new directory path.</configure></property>
+<property name="prop:Directory name" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The name and path of the new directory. See FileParameter for more information about specifying paths.</configure></property>
+</property>            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.DirectoryMaker">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1111:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#FileSystemActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#FileSystem">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{805.0, 625.0}">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The DirectoryMaker actor creates a new local directory and outputs its path.</p>

<p>The name of the new directory is specified with the directoryName parameter.</p>">
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Wibke Sudholt">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="trigger (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time.">
+                </property>
+                <property name="path (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the new directory path.">
+                </property>
+                <property name="Directory name (parameter)" class="ptolemy.data.expr.StringParameter" value="The name and path of the new directory. See FileParameter for more information about specifying paths.">
+                </property>
+            </property>
+            <property name="requiredFiringsPerIteration" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant3" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$N_SELECTED_DATASETS: ">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{422.57806, 262.69272}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="Variable Setter" class="ptolemy.actor.lib.SetVariable">
+            <property name="variableName" class="ptolemy.kernel.util.StringAttribute" value="END_PRODUCTS_SUBDIR">
+            </property>
+            <property name="delayed" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee, Steve Neuendorffer, Jerome Blanc</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
Set the value of a variable. The result may occur at two different times, depending on the value of the delayed parameter. 
If delayed is true, then the change to the value of the variable is implemented in a change request, and consequently will not take hold until the end of the current toplevel iteration. This helps ensure that users of value of the variable will see changes t [...]
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:89:6">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.SetVariable">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:886:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Variable">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{625.0, 445.0}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:10:1:urn:lsid:kepler-project.org/ns/:13757:404:3">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="
Set the value of a variable. The result may occur at two different times, depending on the value of the delayed parameter. 
If delayed is true, then the change to the value of the variable is implemented in a change request, and consequently will not take hold until the end of the current toplevel iteration. This helps ensure that users of value of the variable will see changes to the [...]
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward Lee, Steve Neuendorffer, Jerome Blanc">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+            </property>
+        </entity>
+        <entity name="String Constant4" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value=" out of ">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{437.57806, 197.69272}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Accumulator" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value=""/"">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31989:93:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{625.0, 625.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </entity>
+        <entity name="String Constant5" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$END_PRODUCTS_DIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31989:92:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{675.0, 535.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:14094:13:2:urn:lsid:kepler-project.org/ns/:13757:393:3">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="[560.0, 330.0]">
+            </vertex>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation7" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="[250.0, 330.0]">
+            </vertex>
+        </relation>
+        <relation name="relation8" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation9" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation11" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="[565.0, 545.0]">
+            </vertex>
+        </relation>
+        <relation name="relation12" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <link port="dataset" relation="relation7"/>
+        <link port="dataset_in" relation="relation7"/>
+        <link port="current_dataset" relation="relation2"/>
+        <link port="CurrentDataSet.in" relation="relation7"/>
+        <link port="CurrentDataSet.dataset name" relation="relation2"/>
+        <link port="String Constant.output" relation="relation9"/>
+        <link port="String Constant.trigger" relation="relation7"/>
+        <link port="2.parts" relation="relation9"/>
+        <link port="2.parts" relation="relation6"/>
+        <link port="2.parts" relation="relation5"/>
+        <link port="2.parts" relation="relation4"/>
+        <link port="2.parts" relation="relation2"/>
+        <link port="2.whole" relation="relation3"/>
+        <link port="Display.input" relation="relation3"/>
+        <link port="Counter.increment" relation="relation7"/>
+        <link port="Counter.output" relation="relation6"/>
+        <link port="String Constant2.output" relation="relation8"/>
+        <link port="String Constant2.trigger" relation="relation7"/>
+        <link port="3.parts" relation="relation8"/>
+        <link port="3.parts" relation="relation2"/>
+        <link port="3.whole" relation="relation11"/>
+        <link port="Directory Maker.Directory name" relation="relation"/>
+        <link port="String Constant3.output" relation="relation4"/>
+        <link port="String Constant3.trigger" relation="relation7"/>
+        <link port="Variable Setter.input" relation="relation11"/>
+        <link port="String Constant4.output" relation="relation5"/>
+        <link port="String Constant4.trigger" relation="relation7"/>
+        <link port="String Accumulator.parts" relation="relation12"/>
+        <link port="String Accumulator.parts" relation="relation11"/>
+        <link port="String Accumulator.whole" relation="relation"/>
+        <link port="String Constant5.output" relation="relation12"/>
+        <link port="String Constant5.trigger" relation="relation11"/>
+    </entity>
+    <entity name="Data Set Selection" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="8.1.devel">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:407:2">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[115.0, 795.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:31989:59:5">
+        </property>
+        <property name="DDF Director" class="ptolemy.domains.ddf.kernel.DDFDirector">
+            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="maximumReceiverCapacity" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="runUntilDeadlockInOneIteration" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Gang Zhou</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
            <p> The dynamic dataflow (DDF) domain is a superset of the synchronous
            dataflow(SDF) and Boolean dataflow(BDF) domains. In the SDF domain,
            an actor consumes and produces a fixed number of tokens per firing.
            This static information makes possible compile-time scheduling. In the
            DDF domain, there are few  [...]
+<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. </configure></property>
+<property name="prop:maximumReceiverCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Parameter representing the maximum capacity of each receiver controlled by this director. This is an integer that defaults to 0, which means the queue in each receiver is unbounded. To specify bounded queues, set this to a positive integer. </configure></property>
+<property name="prop:runUntilDeadlockInOneIteration" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A parameter indicating whether one iteration consists of repeated basic iterations until deadlock. If this parameter is true, the model will be executed until deadlock in one iteration. The default value is a BooleanToken with the value false. It cannot be set to true if this director is at the top level.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31617:99:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ddf.kernel.DDFDirector">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:5:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{-10.0, 285.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:director:5:1">
+            </property>
+        </property>
+        <port name="datasets_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{-5.0, 415.0}">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+        </port>
+        <port name="dataset_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{220.0, 415.0}">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+        </port>
+        <entity name="DataSetChooser" class="org.eso.DataSetChooser">
+            <display name="Data Set Chooser"/>
+            <property name="Selection mode" class="ptolemy.data.expr.StringParameter" value="$DataSelectionMethod">
+            </property>
+            <property name="FITS Viewer" class="ptolemy.data.expr.StringParameter" value="$FITS_VIEWER">
+            </property>
+            <property name="Mode" class="ptolemy.data.expr.StringParameter" value="Select">
+            </property>
+            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:406:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.eso.DataSetChooser">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+            </property>
+            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="ESO">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="1.0">
+                </property>
+                <property name="FITS Viewer (parameter)" class="ptolemy.data.expr.StringParameter" value="The application used to inspect FITS files">
+                </property>
+                <property name="Mode (parameter)" class="ptolemy.data.expr.StringParameter" value="<p>Skip: automatically select all files and don't show any window;</p><p>Display: select all the files and allow the user only to view them;</p><p>Select: standard mode.</p>">
+                </property>
+                <property name="class (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+                </property>
+                <property name="semanticType41 (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+                </property>
+                <property name="LoSOs (port)" class="ptolemy.kernel.util.StringAttribute" value="The input LoSOs">
+                </property>
+                <property name="sof (port)" class="ptolemy.kernel.util.StringAttribute" value="The SoF of the current LoSO">
+                </property>
+                <property name="sop (port)" class="ptolemy.kernel.util.StringAttribute" value="The SoP of the current LoSO">
+                </property>
+                <property name="entityId (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{75.0, 395.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:workflow:5:1:urn:lsid:kepler-project.org/ns/:12776:6:1:urn:lsid:kepler-project.org/ns/:13961:210:1:urn:lsid:kepler-project.org/ns/:31617:78:3">
+            </property>
+            <port name="datasets in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="WEST">
+                </property>
+            </port>
+            <port name="dataset out" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="multiport"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="EAST">
+                </property>
+            </port>
+            <port name="#selected" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <entity name="Variable Setter" class="ptolemy.actor.lib.SetVariable">
+            <property name="variableName" class="ptolemy.kernel.util.StringAttribute" value="N_SELECTED_DATASETS">
+            </property>
+            <property name="delayed" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee, Steve Neuendorffer, Jerome Blanc</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
Set the value of a variable. The result may occur at two different times, depending on the value of the delayed parameter. 
If delayed is true, then the change to the value of the variable is implemented in a change request, and consequently will not take hold until the end of the current toplevel iteration. This helps ensure that users of value of the variable will see changes t [...]
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31989:67:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.SetVariable">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:886:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Variable">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{75.0, 510.0}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:10:1:urn:lsid:kepler-project.org/ns/:13757:404:3:urn:lsid:kepler-project.org/ns/:31617:89:8">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="
Set the value of a variable. The result may occur at two different times, depending on the value of the delayed parameter. 
If delayed is true, then the change to the value of the variable is implemented in a change request, and consequently will not take hold until the end of the current toplevel iteration. This helps ensure that users of value of the variable will see changes to the [...]
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Edward Lee, Steve Neuendorffer, Jerome Blanc">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+            </property>
+            <property name="requiredFiringsPerIteration" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <port name="input" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+                </property>
+            </port>
+            <port name="output" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <link port="datasets_in" relation="relation"/>
+        <link port="dataset_out" relation="relation2"/>
+        <link port="DataSetChooser.datasets in" relation="relation"/>
+        <link port="DataSetChooser.dataset out" relation="relation2"/>
+        <link port="DataSetChooser.#selected" relation="relation3"/>
+        <link port="Variable Setter.input" relation="relation3"/>
+    </entity>
+    <entity name="Initialize2" class="ptolemy.actor.TypedCompositeActor">
+        <display name="Initialise"/>
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31989:114:7">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[115.0, 540.0]">
+        </property>
+        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={-4, 32, 1688, 1025}, maximized=false}">
+        </property>
+        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[1657, 1009]">
+        </property>
+        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="0.6681514476615">
+        </property>
+        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{740.9883333333332, 743.9433333333333}">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1">
+        </property>
+        <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+            </property>
+            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
+            </property>
+            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+            </property>
+            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="This subworkflow is in charge of two things:

 -Deleting the workflow directories if requested.

 -Providing the value of the raw data directory">
+                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                    </property>
+                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                    </property>
+                </property>
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:436:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{520.0, 595.0}">
+            </property>
+        </property>
+        <property name="DDF Director" class="ptolemy.domains.ddf.kernel.DDFDirector">
+            <property name="iterations" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="maximumReceiverCapacity" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="runUntilDeadlockInOneIteration" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Gang Zhou</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
            <p> The dynamic dataflow (DDF) domain is a superset of the synchronous
            dataflow(SDF) and Boolean dataflow(BDF) domains. In the SDF domain,
            an actor consumes and produces a fixed number of tokens per firing.
            This static information makes possible compile-time scheduling. In the
            DDF domain, there are few  [...]
+<property name="prop:maximumReceiverCapacity" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A Parameter representing the maximum capacity of each receiver controlled by this director. This is an integer that defaults to 0, which means the queue in each receiver is unbounded. To specify bounded queues, set this to a positive integer. </configure></property>
+<property name="prop:iterations" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify the number of times a workflow is iterated. By default, this parameter is set to "0". Note that "0" does not mean "no iterations." Rather, "0" means that the workflow will iterate forever. Values greater than zero specify the actual number of times the director should execute the entire workflow. </configure></property>
+<property name="prop:runUntilDeadlockInOneIteration" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A parameter indicating whether one iteration consists of repeated basic iterations until deadlock. If this parameter is true, the model will be executed until deadlock in one iteration. The default value is a BooleanToken with the value false. It cannot be set to true if this director is at the top level.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:31989:107:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.domains.ddf.kernel.DDFDirector">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:directorclass:5:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Director">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Director">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{235.0, 285.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:director:5:1">
+            </property>
+        </property>
+        <port name="raw_data_dir" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{1170.0, 395.0}">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+        </port>
+        <entity name="Variable Setter" class="ptolemy.actor.lib.SetVariable">
+            <property name="variableName" class="ptolemy.kernel.util.StringAttribute" value="GLOBAL_TIMESTAMP">
+            </property>
+            <property name="delayed" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee, Steve Neuendorffer, Jerome Blanc</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
Set the value of a variable. The result may occur at two different times, depending on the value of the delayed parameter. 
If delayed is true, then the change to the value of the variable is implemented in a change request, and consequently will not take hold until the end of the current toplevel iteration. This helps ensure that users of value of the variable will see changes t [...]
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:15314:47:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.SetVariable">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:886:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Variable">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{530.0, 390.0}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:10:1">
+            </property>
+            <port name="output" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_expertMode" class="ptolemy.kernel.util.SingletonAttribute">
+                </property>
+            </port>
+        </entity>
+        <entity name="Elements To Array" class="ptolemy.actor.lib.ElementsToArray">
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
<p>The ElementsToArray actor reads individual elements via its input port and outputs an array consisting of those elements.</p>

<p>The actor accepts input elements of any one type (int, double, etc.). The type must be consistent. Each time the actor fires, it reads one token from each channel of the input port and outputs a corresponding array.</p>&# [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts an assembled array. The type of the array elements matches that of the input.</configure></property>
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts tokens of any one type. The type must be consistent.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:32:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.ElementsToArray">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:908:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ArrayActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#DataArrayOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{1005.0, 380.0}">
+            </property>
+        </entity>
+        <entity name="Time Stamp" class="org.sdm.spa.Timestamp">
+            <property name="format" class="ptolemy.data.expr.StringParameter" value="yyyy-MM-dd'T'HH:mm:ss">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Ilkay Altintas</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The TimeStamp actor outputs the current date and time.</p>

<p>Dates and times can be formatted in a variety of ways. Select a format from the drop-down menu beside the format parameter, or enter a pattern directly into the format field. For more information about date format patterns, see http://java.sun.com/docs/books/tutorial/i18n/format/datepattern.html.&l [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the current time stamp as a string.</configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time.</configure></property>
+<property name="prop:format" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The date format. Select a format string from the drop-down menu or type in a custom format string directly into the field. For more information about date formatting patterns, see http://java.sun.com/docs/books/tutorial/i18n/format/datepattern.html</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:370:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.sdm.spa.Timestamp">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1136:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ClockActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalInput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{380.0, 400.0}">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Ilkay Altintas">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="format (parameter)" class="ptolemy.data.expr.StringParameter" value="The date format. Select a format string from the drop-down menu or type in a custom format string directly into the field. For more information about date formatting patterns, see http://java.sun.com/docs/books/tutorial/i18n/format/datepattern.html">
+                </property>
+                <property name="output (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the current time stamp as a string.">
+                </property>
+                <property name="trigger (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time.">
+                </property>
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </entity>
+        <entity name="String Constant" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="if [ "x$EraseDirs" = "xtrue" ]; then  echo "Deleting files"; rm -rf $BOOKKEEPING_DIR/*;  rm -rf $LOGS_DIR/*; rm -rf $TMP_PRODUCTS_DIR/* ;  else echo "Will not delete files"; fi">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{685.0, 715.0}">
+            </property>
+        </entity>
+        <entity name="String Constant2" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$RAWDATA_DIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{845.0, 340.0}">
+            </property>
+        </entity>
+        <entity name="DirectoryEraser" class="ptolemy.actor.lib.Exec">
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+            <property name="command" class="ptolemy.actor.parameters.PortParameter" value="sh">
+            </property>
+            <property name="directory" class="ptolemy.data.expr.FileParameter" value="$CWD">
+            </property>
+            <property name="environment" class="ptolemy.data.expr.Parameter" value="{{name = "", value = ""}}">
+            </property>
+            <property name="prependPlatformDependentShellCommand" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="throwExceptionOnNonZeroReturn" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="waitForProcess" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Xiaojun Liu, Edward A. Lee, Steve Neuendorffer</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
<p>The External Execution actor executes a system command from a workflow. The actor accepts a command, a directory and environment in which to execute the command, and a command input string. Once the command has finished executing, the actor will output the execution results along with any errors. If no results are generated, the actor will output an empty string.</p>&# [...]
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that accepts strings to pass to the standard input of the subprocess. Note that a newline is not appended to the string. If you require a newline, add one using the AddSubtract actor. This port is an input port of type String.</configure></property>
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts data generated by the executed command, output as a string after the command has finished executing. If the command generates no data on standard out, then the empty string (a string of length zero) is generated. </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If connected, a token must be available on this port before actor will execute.</configure></property>
+<property name="port:error" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts any errors generated by the command execution. Errors are output as a string after the command has finished executing. If the execution generates no errors, an empty string is output. </configure></property>
+<property name="port:exitCode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the command's exit code. A non-zero value signifies an error.</configure></property>
+<property name="prop:environment" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An array of records that name an environment variable and a value:
 
  {{name = "NAME1", value = "value1"}...}
  
Where NAME1 is the name of the environment variable, and value1 is the value. 
For example, {{name = "PTII", value = "c:/ptII"}} would set the value of the PTII to c:/ptII. 
If the parameter is set to {{name="&quot [...]
+<property name="prop:directory" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The directory in which to execute the command. The default value of this parameter $CWD, which represents the user's current working or home directory. </configure></property>
+<property name="prop:throwExceptionOnNonZeroReturn" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If true, then throw an exception if the subprocess returns non-zero.</configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If a positive integer, then it is the maximum number of times to execute the actor.</configure></property>
+<property name="prop:prependPlatformDependentShellCommand" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>
If true, then prepend the platform dependent shell command to the
parsed value of the command parameter.  By setting this argument
to true, it is possible to invoke commands in a platform neutral
method.
<p>Under Windows NT or XP, the arguments "cmd.exe" and "/C" are
prepended.  Under Windows 95, the arguments "com [...]
+<property name="prop:waitForProcess" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If true, then actor will wait until subprocess completes.</configure></property>
+<property name="prop:command" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The command to be executed (e.g., echo "Hello, world."). The command can be specified via either the command port or parameter.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:102:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.Exec">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:976:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#ExternalExecutionEnvironmentActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#UnixCommand">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{155.0, 410.0}">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Xiaojun Liu, Edward A. Lee, Steve Neuendorffer">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="directory (parameter)" class="ptolemy.data.expr.StringParameter" value="The directory in which to execute the command. The default value of this parameter $CWD, which represents the user's current working or home directory. ">
+                </property>
+                <property name="environment (parameter)" class="ptolemy.data.expr.StringParameter" value="An array of records that name an environment variable and a value:
 
  {{name = "NAME1", value = "value1"}...}
  
Where NAME1 is the name of the environment variable, and value1 is the value. 
For example, {{name = "PTII", value = "c:/ptII"}} would set the value of the PTII to c:/ptII. 
If the parameter is set to {{name= [...]
+                </property>
+                <property name="prependPlatformDependentShellCommand (parameter)" class="ptolemy.data.expr.StringParameter" value="
If true, then prepend the platform dependent shell command to the
parsed value of the command parameter.  By setting this argument
to true, it is possible to invoke commands in a platform neutral
method.
<p>Under Windows NT or XP, the arguments "cmd.exe" and "/C" are
prepended.  Under Windows 95, the argument [...]
+                </property>
+                <property name="throwExceptionOnNonZeroReturn (parameter)" class="ptolemy.data.expr.StringParameter" value="If true, then throw an exception if the subprocess returns non-zero.">
+                </property>
+                <property name="waitForProcess (parameter)" class="ptolemy.data.expr.StringParameter" value="If true, then actor will wait until subprocess completes.">
+                </property>
+                <property name="firingCountLimit (parameter)" class="ptolemy.data.expr.StringParameter" value="If a positive integer, then it is the maximum number of times to execute the actor.">
+                </property>
+                <property name="output (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts data generated by the executed command, output as a string after the command has finished executing. If the command generates no data on standard out, then the empty string (a string of length zero) is generated. ">
+                </property>
+                <property name="trigger (port)" class="ptolemy.kernel.util.StringAttribute" value="If connected, a token must be available on this port before actor will execute.">
+                </property>
+                <property name="error (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts any errors generated by the command execution. Errors are output as a string after the command has finished executing. If the execution generates no errors, an empty string is output. ">
+                </property>
+                <property name="input (port)" class="ptolemy.kernel.util.StringAttribute" value="An input port that accepts strings to pass to the standard input of the subprocess. Note that a newline is not appended to the string. If you require a newline, add one using the AddSubtract actor. This port is an input port of type String.">
+                </property>
+                <property name="exitCode (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the command's exit code. A non-zero value signifies an error.">
+                </property>
+                <property name="command (parameter)" class="ptolemy.data.expr.StringParameter" value="The command to be executed (e.g., echo "Hello, world."). The command can be specified via either the command port or parameter.">
+                </property>
+            </property>
+            <port name="output" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+            <port name="command" class="ptolemy.actor.parameters.ParameterPort">
+                <property name="input"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+            <port name="error" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+            <port name="input" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+            <port name="exitCode" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant3" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$CALIB_DATA_DIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:14094:71:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{855.0, 475.0}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+        </entity>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="[665.0, 385.0]">
+            </vertex>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation7" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <link port="raw_data_dir" relation="relation7"/>
+        <link port="Variable Setter.input" relation="relation3"/>
+        <link port="Variable Setter.output" relation="relation2"/>
+        <link port="Elements To Array.input" relation="relation"/>
+        <link port="Elements To Array.input" relation="relation4"/>
+        <link port="Elements To Array.output" relation="relation7"/>
+        <link port="Time Stamp.output" relation="relation3"/>
+        <link port="Time Stamp.trigger" relation="relation6"/>
+        <link port="String Constant.output" relation="relation5"/>
+        <link port="String Constant2.output" relation="relation"/>
+        <link port="String Constant2.trigger" relation="relation2"/>
+        <link port="DirectoryEraser.output" relation="relation6"/>
+        <link port="DirectoryEraser.input" relation="relation5"/>
+        <link port="String Constant3.output" relation="relation4"/>
+        <link port="String Constant3.trigger" relation="relation2"/>
+    </entity>
+    <entity name="Detector Linearity Computation" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="8.1.devel">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:9:5">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[425.0, 540.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:5968:91:27:urn:lsid:kepler-project.org/ns/:37445:144:27">
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{-65.0, 220.0}">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{590.0, 220.0}">
+            </property>
+        </port>
+        <entity name="SofAccumulator" class="org.eso.SofAccumulator">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{405.0, 200.0}">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="2">
+                </property>
+            </port>
+            <port name="#groups" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="0">
+                </property>
+            </port>
+        </entity>
+        <entity name="sinfo_rec_detlin_1" class="org.eso.RecipeExecuter">
+            <property name="Recipe Failure Mode" class="ptolemy.data.expr.StringParameter" value="$RecipeFailureMode">
+            </property>
+            <property name="Input Files Category" class="ptolemy.data.expr.StringParameter" value="LINEARITY_LAMP">
+            </property>
+            <property name="Output Files Category" class="ptolemy.data.expr.StringParameter" value="BP_MAP_NL">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[200.0, 175.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="sop in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="SofSplitter" class="org.eso.SofSplitter">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{50.0, 200.0}">
+            </property>
+        </entity>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <link port="sof_in" relation="relation"/>
+        <link port="sof_out" relation="relation4"/>
+        <link port="SofAccumulator.sof in" relation="relation2"/>
+        <link port="SofAccumulator.#groups" relation="relation5"/>
+        <link port="SofAccumulator.sof out" relation="relation4"/>
+        <link port="sinfo_rec_detlin_1.sof in" relation="relation6"/>
+        <link port="sinfo_rec_detlin_1.sof out" relation="relation2"/>
+        <link port="SofSplitter.sof in" relation="relation"/>
+        <link port="SofSplitter.sof out" relation="relation6"/>
+        <link port="SofSplitter.#groups" relation="relation5"/>
+    </entity>
+    <entity name="Master Flat Computation" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="8.1.devel">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:29:20">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[575.0, 615.0]">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:5968:91:27:urn:lsid:kepler-project.org/ns/:37445:144:23">
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="multiport"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{-65.0, 220.0}">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{590.0, 220.0}">
+            </property>
+        </port>
+        <entity name="SofSplitter" class="org.eso.SofSplitter">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{50.0, 200.0}">
+            </property>
+        </entity>
+        <entity name="SofAccumulator" class="org.eso.SofAccumulator">
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{405.0, 200.0}">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="0">
+                </property>
+            </port>
+            <port name="#groups" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="sinfo_rec_mflat_1" class="org.eso.RecipeExecuter">
+            <property name="Recipe Failure Mode" class="ptolemy.data.expr.StringParameter" value="$RecipeFailureMode">
+            </property>
+            <property name="Input Files Category" class="ptolemy.data.expr.StringParameter" value="FLAT_LAMP,BP_MAP_NL,REF_BP_MAP">
+            </property>
+            <property name="Output Files Category" class="ptolemy.data.expr.StringParameter" value="MASTER_BP_MAP,BP_MAP_NO,MASTER_FLAT_LAMP">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[215.0, 170.0]">
+            </property>
+            <port name="sof in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="sop in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+        </relation>
+        <link port="sof_in" relation="relation"/>
+        <link port="sof_out" relation="relation4"/>
+        <link port="SofSplitter.sof in" relation="relation"/>
+        <link port="SofSplitter.sof out" relation="relation6"/>
+        <link port="SofSplitter.#groups" relation="relation5"/>
+        <link port="SofAccumulator.sof in" relation="relation2"/>
+        <link port="SofAccumulator.#groups" relation="relation5"/>
+        <link port="SofAccumulator.sof out" relation="relation4"/>
+        <link port="sinfo_rec_mflat_1.sof in" relation="relation6"/>
+        <link port="sinfo_rec_mflat_1.sof out" relation="relation2"/>
+    </entity>
+    <entity name="ProvenanceExplorer" class="org.eso.ProvenanceExplorer">
+        <property name="Enabled" class="ptolemy.data.expr.StringParameter" value="$ProvenanceExplorerEnabled">
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1630.0, 1010.0]">
+        </property>
+        <port name="bookkeeping db" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+        </port>
+        <port name="start date" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+        </port>
+    </entity>
+    <entity name="Close DataSet" class="ptolemy.actor.TypedCompositeActor">
+        <property name="_createdBy" class="ptolemy.kernel.attributes.VersionAttribute" value="7.0.2">
+        </property>
+        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:401:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.TypedCompositeActor">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:449:1">
+            </property>
+        </property>
+        <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#Actor">
+        </property>
+        <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#GeneralPurpose">
+        </property>
+        <property name="semanticType22" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Workflow">
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>A Composite actor is an aggregation of actors. It may have a local director that is responsible for executing the contained actors. A Composite actor with a local director is called an opaque actor. Composite actors do not require a local director. Composite actors with no local director "inherit" the director from the containing workflow and are called non-opaque.</ [...]
+</property>        <property name="_location" class="ptolemy.kernel.util.Location" value="[1465.0, 1010.0]">
+        </property>
+        <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={0, 79, 1300, 810}, maximized=false}">
+        </property>
+        <property name="_vergilSize" class="ptolemy.actor.gui.SizeAttribute" value="[988, 658]">
+        </property>
+        <property name="_vergilZoomFactor" class="ptolemy.data.expr.ExpertParameter" value="1.5267529457215">
+        </property>
+        <property name="_vergilCenter" class="ptolemy.data.expr.ExpertParameter" value="{1284.5625, 895.4900050607288}">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:449:1:urn:lsid:kepler-project.org/ns/:31989:45:2:urn:lsid:kepler-project.org/ns/:43955:74:3:urn:lsid:kepler-project.org/ns/:44497:3:4:urn:lsid:kepler-project.org/ns/:44576:50:16">
+        </property>
+        <property name="Annotation" class="ptolemy.vergil.kernel.attributes.TextAttribute">
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="_hideAllParameters" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="textSize" class="ptolemy.data.expr.Parameter" value="14">
+            </property>
+            <property name="textColor" class="ptolemy.actor.gui.ColorAttribute" value="{0.0, 0.0, 1.0, 1.0}">
+            </property>
+            <property name="fontFamily" class="ptolemy.data.expr.StringParameter" value="SansSerif">
+            </property>
+            <property name="bold" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="italic" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="text" class="ptolemy.kernel.util.StringAttribute" value="This subworkflow modifies takes care of the final tasks:
-Creating a README file with the list of files
-Displaying a window with the finished datasets
-Creating input for ProvenanceExplorer">
+                <property name="_style" class="ptolemy.actor.gui.style.TextStyle">
+                    <property name="height" class="ptolemy.data.expr.Parameter" value="20">
+                    </property>
+                    <property name="width" class="ptolemy.data.expr.Parameter" value="80">
+                    </property>
+                </property>
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Use the Annotation attribute to annotate a workflow. Double-click the attribute to customize the content, font size, color, and basic formatting (bold and italics).</configure></property>
+<property name="prop:fontFamily" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font face. Select a font from the drop-down menu. The default is "SansSerif".</configure></property>
+<property name="prop:italic" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be italics. By default, type will not be italicized.</configure></property>
+<property name="prop:bold" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Select to indicate that the type should be bold. By default, type will not be bold.</configure></property>
+<property name="prop:textColor" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font color. Specify a string representing an array of four elements: red, green, blue, and alpha, where alpha is transparency. The default is an opaque black, {0.0, 0.0, 0.0, 1.0}</configure></property>
+<property name="prop:textSize" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The font size. Select an integer from the drop-down menu or specify a new size by typing it directly into the value field.  The default is 14.</configure></property>
+<property name="prop:text" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The text of the annotation.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:49:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.vergil.kernel.attributes.TextAttribute">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1199:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#DocumentationActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#WorkflowDocumentation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[280.0, 680.0]">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:436:1">
+            </property>
+        </property>
+        <port name="current_dataset" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{431.6612027096115, 167.69104677914112}">
+            </property>
+            <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+        </port>
+        <port name="final_files" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{66.66120270961146, 397.6910467791411}">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="bookkeeping_db" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[480.0, 575.0]">
+            </property>
+        </port>
+        <port name="global_timestamp" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[485.0, 640.0]">
+            </property>
+        </port>
+        <entity name="String Constant" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="README">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:15314:123:3">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{731.6612027096114, 477.6910467791411}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <entity name="Finished Datasets" class="ptolemy.actor.lib.gui.Display">
+            <property name="_windowProperties" class="ptolemy.actor.gui.WindowPropertiesAttribute" value="{bounds={229, 123, 1327, 201}, maximized=false}">
+            </property>
+            <property name="_paneSize" class="ptolemy.actor.gui.SizeAttribute" value="[1323, 153]">
+            </property>
+            <property name="rowsDisplayed" class="ptolemy.data.expr.Parameter" value="10">
+            </property>
+            <property name="columnsDisplayed" class="ptolemy.data.expr.Parameter" value="120">
+            </property>
+            <property name="suppressBlankLines" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="title" class="ptolemy.data.expr.StringParameter" value="Current Dataset">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Yuhong Xiong, Edward A. Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The Display actor reads tokens of any type via its input multiport, and displays each token on a separate line in a text display window.</p>

<p>Specify the size of the text display window with the rowsDisplayed and columnsDisplayed parameters. Simply resizing the window onscreen does not persistently change the size when the workflow is saved, closed, and the [...]
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts tokens of any type.</configure></property>
+<property name="prop:suppressBlankLines" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the actor should display blank lines (the default) or suppress them.</configure></property>
+<property name="prop:rowsDisplayed" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The vertical size of the display, in rows. The value is an integer that defaults to 10.</configure></property>
+<property name="prop:columnsDisplayed" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The horizontal size of the display, in columns. The value is an integer that defaults to 40.</configure></property>
+<property name="prop:title" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The title of the text display window. If specified, the value will appear in the title bar of the text display window.</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:53:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.gui.Display">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:883:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#TextualOutputActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#TextualOutput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{801.6612027096114, 157.69104677914112}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:7:1:urn:lsid:kepler-project.org/ns/:13643:22:2:urn:lsid:kepler-project.org/ns/:17547:3:12">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The Display actor reads tokens of any type via its input multiport, and displays each token on a separate line in a text display window.</p>

<p>Specify the size of the text display window with the rowsDisplayed and columnsDisplayed parameters. Simply resizing the window onscreen does not persistently change the size when the workflow is saved, closed, and then re- [...]
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Yuhong Xiong, Edward A. Lee">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="rowsDisplayed (parameter)" class="ptolemy.data.expr.StringParameter" value="The vertical size of the display, in rows. The value is an integer that defaults to 10.">
+                </property>
+                <property name="columnsDisplayed (parameter)" class="ptolemy.data.expr.StringParameter" value="The horizontal size of the display, in columns. The value is an integer that defaults to 40.">
+                </property>
+                <property name="suppressBlankLines (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether the actor should display blank lines (the default) or suppress them.">
+                </property>
+                <property name="title (parameter)" class="ptolemy.data.expr.StringParameter" value="The title of the text display window. If specified, the value will appear in the title bar of the text display window.">
+                </property>
+                <property name="input (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that accepts tokens of any type.">
+                </property>
+            </property>
+        </entity>
+        <entity name="String Constant2" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$END_PRODUCTS_DIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:15314:121:3">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{731.6612027096114, 402.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant3" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value=" Dataset has been reduced and saved in ">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:19:3">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{266.6612027096115, 232.69104677914112}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:13643:21:2">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="Final directory path" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value=""/"">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:25:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{341.6612027096115, 352.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1">
+            </property>
+        </entity>
+        <entity name="Write README" class="org.geon.FileWrite">
+            <property name="fileName" class="ptolemy.actor.parameters.FilePortParameter" value="ROOT_DATA_PATH_TO_REPLACE/reflex_end_products/2013-09-24T18:03:54/README">
+            </property>
+            <property name="append" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="confirmOverwrite" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="alwaysFlush" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>No author given</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileWriter actor reads a string and writes it to a file. The actor outputs the file path of the generated file.</p>

<p>Specify a destination file path with the fileName parameter. If the specified file does not exist, then the actor will create it.  If the file already exists, then the actor will ask for permission to overwrite it (unless the append param [...]
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that receives a string to write to a file.</configure></property>
+<property name="port:url" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the file name of the generated file.</configure></property>
+<property name="prop:append" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to append the input string to an existing, specified file. By default, the actor will overwrite any preexisting file.</configure></property>
+<property name="prop:confirmOverwrite" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the actor should confirm before overwriting an existing file. By default, the actor will not ask for confirmation.</configure></property>
+<property name="prop:fileName" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The name of the file to which to write. See FileParameter for more information about specifying file names. </configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:73:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.geon.FileWrite">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1003:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#WriterOutputActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalOutput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{766.6612027096114, 557.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:144:1:urn:lsid:kepler-project.org/ns/:15314:118:5">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>The FileWriter actor reads a string and writes it to a file. The actor outputs the file path of the generated file.</p>

<p>Specify a destination file path with the fileName parameter. If the specified file does not exist, then the actor will create it.  If the file already exists, then the actor will ask for permission to overwrite it (unless the append parameter  [...]
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="No author given">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="append (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether to append the input string to an existing, specified file. By default, the actor will overwrite any preexisting file.">
+                </property>
+                <property name="confirmOverwrite (parameter)" class="ptolemy.data.expr.StringParameter" value="Specify whether the actor should confirm before overwriting an existing file. By default, the actor will not ask for confirmation.">
+                </property>
+                <property name="input (port)" class="ptolemy.kernel.util.StringAttribute" value="An input port that receives a string to write to a file.">
+                </property>
+                <property name="url (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the file name of the generated file.">
+                </property>
+                <property name="fileName (parameter)" class="ptolemy.data.expr.StringParameter" value="The name of the file to which to write. See FileParameter for more information about specifying file names. ">
+                </property>
+            </property>
+            <port name="fileName" class="ptolemy.actor.parameters.ParameterPort">
+                <property name="input"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+                </property>
+            </port>
+            <port name="url" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_hide" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant4" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$END_PRODUCTS_SUBDIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:23:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{231.66120270961147, 402.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant5" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$GLOBAL_TIMESTAMP">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:15314:122:3">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{741.6612027096114, 442.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="false">
+                </property>
+            </port>
+        </entity>
+        <entity name="Write to stdout" class="org.geon.FileWrite">
+            <property name="fileName" class="ptolemy.actor.parameters.FilePortParameter" value="/dev/stdout">
+            </property>
+            <property name="append" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+            <property name="confirmOverwrite" class="ptolemy.data.expr.Parameter" value="false">
+            </property>
+            <property name="alwaysFlush" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>No author given</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The FileWriter actor reads a string and writes it to a file. The actor outputs the file path of the generated file.</p>

<p>Specify a destination file path with the fileName parameter. If the specified file does not exist, then the actor will create it.  If the file already exists, then the actor will ask for permission to overwrite it (unless the append param [...]
+<property name="port:input" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An input port that receives a string to write to a file.</configure></property>
+<property name="port:url" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the file name of the generated file.</configure></property>
+<property name="prop:append" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether to append the input string to an existing, specified file. By default, the actor will overwrite any preexisting file.</configure></property>
+<property name="prop:confirmOverwrite" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Specify whether the actor should confirm before overwriting an existing file. By default, the actor will not ask for confirmation.</configure></property>
+<property name="prop:fileName" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The name of the file to which to write. See FileParameter for more information about specifying file names. </configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:24:2">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.geon.FileWrite">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1003:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#WriterOutputActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#LocalOutput">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{846.6612027096114, 242.69104677914112}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:144:1:urn:lsid:kepler-project.org/ns/:15165:55:3">
+            </property>
+        </entity>
+        <entity name="String Constant6" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$END_PRODUCTS_DIR">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:23:5">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{236.66120270961147, 342.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="Path to README" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value=""/"">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:72:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{876.6612027096114, 427.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1:urn:lsid:kepler-project.org/ns/:15314:124:4">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="false">
+            </property>
+            <port name="whole" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+                </property>
+            </port>
+        </entity>
+        <entity name="Final message" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value="""">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:17547:26:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{476.6612027096115, 312.6910467791411}">
+            </property>
+            <property name="" class="ptolemy.vergil.basic.DocAttribute">
+                <property name="description" class="ptolemy.kernel.util.StringAttribute" value="<p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p>">
+                </property>
+                <property name="author" class="ptolemy.kernel.util.StringAttribute" value="Wibke Sudholt">
+                </property>
+                <property name="version" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+                <property name="Substring separator (parameter)" class="ptolemy.data.expr.StringParameter" value="The characters used to separate the elements in the output string. By default, the value is "".">
+                </property>
+                <property name="parts (port)" class="ptolemy.kernel.util.StringAttribute" value="A multiport that accepts substrings.">
+                </property>
+                <property name="whole (port)" class="ptolemy.kernel.util.StringAttribute" value="An output port that broadcasts the full string.">
+                </property>
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1">
+            </property>
+        </entity>
+        <entity name="String Constant7" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value=" with files: ">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:68:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{231.66120270961147, 442.6910467791411}">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:13643:21:2:urn:lsid:kepler-project.org/ns/:17547:19:3">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="README message" class="org.resurgence.actor.StringAccumulator">
+            <property name="Substring separator" class="ptolemy.data.expr.Parameter" value="""">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Wibke Sudholt</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>
The StringAccumulator actor reads multiple strings via its input port and outputs a string containing all of the input values. The characters separating the substrings in the output string can be specified with the substringSeparator parameter.</p></configure></property>
+<property name="port:whole" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts the full string.</configure></property>
+<property name="port:parts" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that accepts substrings.</configure></property>
+<property name="prop:Substring separator" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The characters used to separate the elements in the output string. By default, the value is "".</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:43955:69:4">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.resurgence.actor.StringAccumulator">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1117:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#IterativeOperation">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="{451.6612027096115, 462.6910467791411}">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:292:1:urn:lsid:kepler-project.org/ns/:17547:25:2">
+            </property>
+        </entity>
+        <entity name="ObjectToText" class="org.eso.ObjectToText">
+            <property name="Include Header and Footer" class="ptolemy.data.expr.Parameter" value="true">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Converts Reflex JSON objects into a human-readable form</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>ESO</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>2.0</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The ObjectToString converts the JSON objects used by ESO actors (i.e. datasets, sof and sop) into a human-readable form.</configure></property>
+<property name="port:text out" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A nicely formatted string</configure></property>
+<property name="port:json in" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The input JSON object</configure></property>
+<property name="prop:semanticType41" class="ptolemy.kernel.util.ConfigurableAttribute"><configure></configure></property>
+<property name="prop:entityId" class="ptolemy.kernel.util.ConfigurableAttribute"><configure></configure></property>
+<property name="prop:Include Header and Footer" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>if true the output text will contain a descriptive header and footer</configure></property>
+<property name="prop:class" class="ptolemy.kernel.util.ConfigurableAttribute"><configure></configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org:actor:907:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="org.eso.ObjectToText">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+                </property>
+            </property>
+            <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[250.0, 500.0]">
+            </property>
+            <port name="json in" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+                <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+            <port name="text out" class="ptolemy.actor.TypedIOPort">
+                <property name="output"/>
+                <property name="_showName" class="ptolemy.data.expr.Parameter" value="true">
+                </property>
+                <property name="tokenProductionRate" class="ptolemy.data.expr.Parameter" value="1">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant8" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$BOOKKEEPING_DIR/bookkeeping.db">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:8:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[285.0, 575.0]">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:17547:23:2:urn:lsid:kepler-project.org/ns/:38241:62:1">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <entity name="String Constant9" class="ptolemy.actor.lib.StringConst">
+            <property name="value" class="ptolemy.data.expr.Parameter" value="$GLOBAL_TIMESTAMP">
+            </property>
+            <property name="firingCountLimit" class="ptolemy.data.expr.Parameter" value="NONE">
+            </property>
+            <property name="NONE" class="ptolemy.data.expr.Parameter" value="0">
+            </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Edward Lee</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>null</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure><p>The StringConstant actor outputs a string specified via the actor's value parameter.</p>

<p>Specifying strings with the StringConstant actor is convenient, as the actor does not require that strings be surrounded by quotes. The actor is often used to specify file paths, which can be selected using the Browse button available in the actor's parameters.</p&g [...]
+<property name="port:output" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>An output port that broadcasts a string constant specified by the value parameter.  </configure></property>
+<property name="port:trigger" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>A multiport that has no declared type (in other words, the port can accept any data type: double, int, array, etc.) If the port is connected, the actor will not fire until the trigger port receives an input token. Connecting the port is optional, but useful when scheduling the actor to perform at a certain time. </configure></property>
+<property name="prop:firingCountLimit" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The limit on the number of times the actor will fire. The default value is 'NONE', meaning there is no limit on the number of time the constant will be provided to the output port. Any integer can be provided as a value for this parameter.</configure></property>
+<property name="prop:value" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The value produced by the actor. Specified strings do not require enclosing quotes. (To include a '$' sign in the string, enter '$$'.)</configure></property>
+</property>            <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:44576:9:1">
+            </property>
+            <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.StringConst">
+                <property name="id" class="ptolemy.kernel.util.StringAttribute" value="urn:lsid:kepler-project.org:class:1052:1">
+                </property>
+            </property>
+            <property name="semanticType00" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:1:1#StringFunctionActor">
+            </property>
+            <property name="semanticType11" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:2:1#Constant">
+            </property>
+            <property name="_icon" class="ptolemy.vergil.icon.BoxedValueIcon">
+                <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="value">
+                </property>
+                <property name="displayWidth" class="ptolemy.data.expr.Parameter" value="60">
+                </property>
+            </property>
+            <property name="_location" class="ptolemy.kernel.util.Location" value="[240.0, 640.0]">
+            </property>
+            <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:204:1:urn:lsid:kepler-project.org/ns/:17547:23:2:urn:lsid:kepler-project.org/ns/:38241:63:1">
+            </property>
+            <property name="_hideName" class="ptolemy.data.expr.SingletonParameter" value="true">
+            </property>
+            <port name="trigger" class="ptolemy.actor.TypedIOPort">
+                <property name="input"/>
+                <property name="multiport"/>
+                <property name="_showName" class="ptolemy.data.expr.SingletonParameter" value="true">
+                </property>
+            </port>
+        </entity>
+        <relation name="relation" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="{576.6612027096114, 497.6910467791411}">
+            </vertex>
+        </relation>
+        <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation7" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation8" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation9" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation10" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="{101.66120270961146, 482.6910467791411}">
+            </vertex>
+        </relation>
+        <relation name="relation11" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation12" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <vertex name="vertex1" value="{571.6612027096114, 327.6910467791411}">
+            </vertex>
+        </relation>
+        <relation name="relation13" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation14" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation15" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <relation name="relation16" class="ptolemy.actor.TypedIORelation">
+            <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+        </relation>
+        <link port="current_dataset" relation="relation7"/>
+        <link port="final_files" relation="relation10"/>
+        <link port="bookkeeping_db" relation="relation15"/>
+        <link port="global_timestamp" relation="relation16"/>
+        <link port="String Constant.output" relation="relation9"/>
+        <link port="String Constant.trigger" relation="relation"/>
+        <link port="Finished Datasets.input" relation="relation12"/>
+        <link port="String Constant2.output" relation="relation2"/>
+        <link port="String Constant2.trigger" relation="relation"/>
+        <link port="String Constant3.output" relation="relation11"/>
+        <link port="String Constant3.trigger" relation="relation10"/>
+        <link port="Final directory path.parts" relation="relation5"/>
+        <link port="Final directory path.parts" relation="relation3"/>
+        <link port="Final directory path.whole" relation="relation4"/>
+        <link port="Write README.input" relation="relation"/>
+        <link port="Write README.fileName" relation="relation6"/>
+        <link port="String Constant4.output" relation="relation3"/>
+        <link port="String Constant4.trigger" relation="relation10"/>
+        <link port="String Constant5.output" relation="relation8"/>
+        <link port="String Constant5.trigger" relation="relation"/>
+        <link port="Write to stdout.input" relation="relation12"/>
+        <link port="String Constant6.output" relation="relation5"/>
+        <link port="String Constant6.trigger" relation="relation10"/>
+        <link port="Path to README.parts" relation="relation2"/>
+        <link port="Path to README.parts" relation="relation8"/>
+        <link port="Path to README.parts" relation="relation9"/>
+        <link port="Path to README.whole" relation="relation6"/>
+        <link port="Final message.parts" relation="relation7"/>
+        <link port="Final message.parts" relation="relation11"/>
+        <link port="Final message.parts" relation="relation4"/>
+        <link port="Final message.whole" relation="relation12"/>
+        <link port="String Constant7.output" relation="relation13"/>
+        <link port="String Constant7.trigger" relation="relation10"/>
+        <link port="README message.parts" relation="relation12"/>
+        <link port="README message.parts" relation="relation13"/>
+        <link port="README message.parts" relation="relation14"/>
+        <link port="README message.whole" relation="relation"/>
+        <link port="ObjectToText.json in" relation="relation10"/>
+        <link port="ObjectToText.text out" relation="relation14"/>
+        <link port="String Constant8.output" relation="relation15"/>
+        <link port="String Constant8.trigger" relation="relation10"/>
+        <link port="String Constant9.output" relation="relation16"/>
+        <link port="String Constant9.trigger" relation="relation10"/>
+    </entity>
+    <entity name="ProductRenamer" class="ptolemy.actor.lib.python.PythonScript">
+        <property name="jythonClassName" class="ptolemy.kernel.util.StringAttribute" value="Main">
+        </property>
+        <property name="script" class="ptolemy.kernel.util.StringAttribute" value="import os
import shutil

from ptolemy.data import StringToken, IntToken
from ptolemy.data.expr import Parameter
from org.eso.util import JSONTools
from nom.tam.fits import Fits
from nom.tam.fits import FitsFactory
from ptolemy.kernel.util import IllegalActionException
from org.eso.service import ExecutionServiceDB
import org.apache.log4j
from java.util import Has [...]
+        </property>
+<property name="KeplerDocumentation" class="ptolemy.vergil.basic.KeplerDocumentationAttribute">
+<property name="description" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>Renames recipe products based on FITS keywords</configure></property>
+<property name="author" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>ESO</configure></property>
+<property name="version" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>2.0</configure></property>
+<property name="userLevelDocumentation" class="ptolemy.kernel.util.ConfigurableAttribute"><configure> This actor moves (or copies or links) its input sof to a final product directory based on some FITS keywords.
 Usually, it should be connected to the output of the recipes that produce final products. If the recipe produces more products that are not relevant to rename, an output filter can be put in the recipe.</configure></property>
+<property name="port:sof_out" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The final list of files produced</configure></property>
+<property name="port:sof_in" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The files to be copied/moved or linked</configure></property>
+<property name="prop:RenameKeywords" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The list of keywords used to create the new name</configure></property>
+<property name="prop:OutputExistsMode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>This parameter defines the behaviour in case the output files already exists: it can be "append_version" (create a new file with a running index suffix), "overwrite" (replace the existing file), "stop" (stop the workflow)</configure></property>
+<property name="prop:script" class="ptolemy.kernel.util.ConfigurableAttribute"><configure></configure></property>
+<property name="prop:FinalProductDirectory" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>The directory where the files are going to be copied/linked or renamed. It is usually set to END_PRODUCTS_DIR</configure></property>
+<property name="prop:SubDir" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>If it is not empty, a subdirectory will be created with this string. The value can contain backslashes (and intermediate directories will be created). It will usually be END_PROD_SUBDIR, created somewhere in the workflow</configure></property>
+<property name="prop:CopyMode" class="ptolemy.kernel.util.ConfigurableAttribute"><configure>There are several options: "copy", "move" or "link".</configure></property>
+</property>        <property name="entityId" class="org.kepler.moml.NamedObjId" value="urn:lsid:kepler-project.org/ns/:41649:403:1">
+        </property>
+        <property name="class" class="ptolemy.kernel.util.StringAttribute" value="ptolemy.actor.lib.python.PythonScript">
+            <property name="id" class="ptolemy.kernel.util.StringAttribute" value="null">
+            </property>
+        </property>
+        <property name="semanticType41" class="org.kepler.sms.SemanticType" value="urn:lsid:localhost:onto:4:1#ESO">
+        </property>
+        <property name="_editorFactory" class="ptolemy.vergil.toolbox.TextEditorConfigureFactory">
+            <property name="attributeName" class="ptolemy.kernel.util.StringAttribute" value="script">
+            </property>
+        </property>
+        <property name="_location" class="ptolemy.kernel.util.Location" value="[1470.0, 750.0]">
+        </property>
+        <property name="RenameKeywords" class="ptolemy.data.expr.StringParameter" value="HIERARCH.ESO.OBS.NAME,'_',HIERARCH.ESO.PRO.CATG">
+        </property>
+        <property name="FinalProductDirectory" class="ptolemy.data.expr.StringParameter" value="$END_PRODUCTS_DIR">
+        </property>
+        <property name="SubDir" class="ptolemy.data.expr.StringParameter" value="$END_PRODUCTS_SUBDIR">
+        </property>
+        <property name="CopyMode" class="ptolemy.data.expr.StringParameter" value="copy">
+        </property>
+        <property name="OutputExistsMode" class="ptolemy.data.expr.StringParameter" value="append_version">
+        </property>
+        <property name="derivedFrom" class="org.kepler.moml.NamedObjIdReferralList" value="urn:lsid:kepler-project.org:actor:910:1:urn:lsid:kepler-project.org/ns/:24723:4:5:urn:lsid:kepler-project.org/ns/:25047:16:2:urn:lsid:kepler-project.org/ns/:25158:50:1:urn:lsid:kepler-project.org/ns/:38241:57:8">
+        </property>
+        <property name="" class="ptolemy.vergil.basic.DocAttribute">
+            <property name="description" class="ptolemy.kernel.util.StringAttribute" value=" This actor moves (or copies or links) its input sof to a final product directory based on some FITS keywords.
 Usually, it should be connected to the output of the recipes that produce final products. If the recipe produces more products that are not relevant to rename, an output filter can be put in the recipe.">
+            </property>
+            <property name="author" class="ptolemy.kernel.util.StringAttribute" value="ESO">
+            </property>
+            <property name="version" class="ptolemy.kernel.util.StringAttribute" value="2.0">
+            </property>
+            <property name="RenameKeywords (parameter)" class="ptolemy.data.expr.StringParameter" value="The list of keywords used to create the new name">
+            </property>
+            <property name="FinalProductDirectory (parameter)" class="ptolemy.data.expr.StringParameter" value="The directory where the files are going to be copied/linked or renamed. It is usually set to END_PRODUCTS_DIR">
+            </property>
+            <property name="SubDir (parameter)" class="ptolemy.data.expr.StringParameter" value="If it is not empty, a subdirectory will be created with this string. The value can contain backslashes (and intermediate directories will be created). It will usually be END_PROD_SUBDIR, created somewhere in the workflow">
+            </property>
+            <property name="CopyMode (parameter)" class="ptolemy.data.expr.StringParameter" value="There are several options: "copy", "move" or "link".">
+            </property>
+            <property name="OutputExistsMode (parameter)" class="ptolemy.data.expr.StringParameter" value="This parameter defines the behaviour in case the output files already exists: it can be "append_version" (create a new file with a running index suffix), "overwrite" (replace the existing file), "stop" (stop the workflow)">
+            </property>
+            <property name="script (parameter)" class="ptolemy.data.expr.StringParameter" value="">
+            </property>
+            <property name="sof_out (port)" class="ptolemy.kernel.util.StringAttribute" value="The final list of files produced">
+            </property>
+            <property name="sof_in (port)" class="ptolemy.kernel.util.StringAttribute" value="The files to be copied/moved or linked">
+            </property>
+        </property>
+        <property name="BookkeepingDir" class="ptolemy.data.expr.StringParameter" value="$BOOKKEEPING_DIR">
+        </property>
+        <port name="sof_in" class="ptolemy.actor.TypedIOPort">
+            <property name="input"/>
+            <property name="tokenConsumptionRate" class="ptolemy.data.expr.Parameter" value="1">
+            </property>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="NORTH">
+            </property>
+        </port>
+        <port name="sof_out" class="ptolemy.actor.TypedIOPort">
+            <property name="output"/>
+            <property name="multiport"/>
+            <property name="_cardinal" class="ptolemy.kernel.util.StringAttribute" value="SOUTH">
+            </property>
+        </port>
+    </entity>
+    <relation name="relation30" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation14" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation28" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation13" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+        <vertex name="vertex1" value="[660.0, 640.0]">
+        </vertex>
+    </relation>
+    <relation name="relation4" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation18" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+        <vertex name="vertex1" value="[1070.0, 750.0]">
+        </vertex>
+    </relation>
+    <relation name="relation6" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation8" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+        <vertex name="vertex1" value="[330.0, 775.0]">
+        </vertex>
+    </relation>
+    <relation name="relation2" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation7" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation9" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+        <vertex name="vertex1" value="[785.0, 955.0]">
+        </vertex>
+    </relation>
+    <relation name="relation3" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation11" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation10" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation16" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation17" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation19" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation5" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation20" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation21" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation23" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <relation name="relation12" class="ptolemy.actor.TypedIORelation">
+        <property name="width" class="ptolemy.data.expr.Parameter" value="1">
+        </property>
+    </relation>
+    <link port="Wavelength Calibration.sof_in" relation="relation18"/>
+    <link port="Wavelength Calibration.sof_in" relation="relation13"/>
+    <link port="Wavelength Calibration.sof_in" relation="relation8"/>
+    <link port="Wavelength Calibration.sof_in" relation="relation19"/>
+    <link port="Wavelength Calibration.sof_in" relation="relation9"/>
+    <link port="Wavelength Calibration.sof_out" relation="relation3"/>
+    <link port="Object Cube Creation.sof_in" relation="relation13"/>
+    <link port="Object Cube Creation.sof_in" relation="relation18"/>
+    <link port="Object Cube Creation.sof_in" relation="relation3"/>
+    <link port="Object Cube Creation.sof_in" relation="relation11"/>
+    <link port="Object Cube Creation.sof_in" relation="relation10"/>
+    <link port="Object Cube Creation.sof_in" relation="relation16"/>
+    <link port="Object Cube Creation.sof_in" relation="relation17"/>
+    <link port="Object Cube Creation.sof_out" relation="relation12"/>
+    <link port="DataOrganizer.input data" relation="relation28"/>
+    <link port="DataOrganizer.datasets out" relation="relation"/>
+    <link port="FitsRouter2.in" relation="relation30"/>
+    <link port="FitsRouter2.LINEARITY" relation="relation6"/>
+    <link port="FitsRouter2.FLAT" relation="relation7"/>
+    <link port="FitsRouter2.DISTORTION" relation="relation2"/>
+    <link port="FitsRouter2.WAVE" relation="relation19"/>
+    <link port="FitsRouter2.REF_SLIT_POS" relation="relation9"/>
+    <link port="FitsRouter2.WAVE_AUX" relation="relation8"/>
+    <link port="FitsRouter2.PUPIL" relation="relation11"/>
+    <link port="FitsRouter2.PSF" relation="relation10"/>
+    <link port="FitsRouter2.STD" relation="relation16"/>
+    <link port="FitsRouter2.OBJECT" relation="relation17"/>
+    <link port="Distortion Computation.sof_in" relation="relation2"/>
+    <link port="Distortion Computation.sof_in" relation="relation8"/>
+    <link port="Distortion Computation.sof_out" relation="relation18"/>
+    <link port="Initialise Current Dataset.dataset" relation="relation30"/>
+    <link port="Initialise Current Dataset.dataset_in" relation="relation14"/>
+    <link port="Initialise Current Dataset.current_dataset" relation="relation5"/>
+    <link port="Data Set Selection.datasets_in" relation="relation"/>
+    <link port="Data Set Selection.dataset_out" relation="relation14"/>
+    <link port="Initialize2.raw_data_dir" relation="relation28"/>
+    <link port="Detector Linearity Computation.sof_in" relation="relation6"/>
+    <link port="Detector Linearity Computation.sof_out" relation="relation4"/>
+    <link port="Master Flat Computation.sof_in" relation="relation4"/>
+    <link port="Master Flat Computation.sof_in" relation="relation7"/>
+    <link port="Master Flat Computation.sof_out" relation="relation13"/>
+    <link port="ProvenanceExplorer.bookkeeping db" relation="relation20"/>
+    <link port="ProvenanceExplorer.start date" relation="relation21"/>
+    <link port="Close DataSet.current_dataset" relation="relation5"/>
+    <link port="Close DataSet.final_files" relation="relation23"/>
+    <link port="Close DataSet.bookkeeping_db" relation="relation20"/>
+    <link port="Close DataSet.global_timestamp" relation="relation21"/>
+    <link port="ProductRenamer.sof_in" relation="relation12"/>
+    <link port="ProductRenamer.sof_out" relation="relation23"/>
+</entity>
diff --git a/reflex/sinfo_wkf.oca b/reflex/sinfo_wkf.oca
new file mode 100644
index 0000000..fd1e97b
--- /dev/null
+++ b/reflex/sinfo_wkf.oca
@@ -0,0 +1,531 @@
+if (DPR.CATG=="CALIB" and DPR.TYPE=="DARK" and DPR.TECH=="IMAGE" and TPL.NEXP >= 3 ) then 
+{
+  RAW.TYPE = "DARK";
+  REFLEX.CATG = "DARK";
+  PACK.DIR = "DET";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="LINEARITY,LAMP" and DPR.TECH=="IFU" and TPL.NEXP >= 16) then 
+{
+  RAW.TYPE = "LINE";
+  REFLEX.CATG = "LINEARITY_LAMP";
+  PACK.DIR = "SPEC_OTHER";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="DISTORTION,FIBRE,NS" and DPR.TECH=="IFU" and TPL.NEXP >= 30) then 
+{
+  RAW.TYPE = "DIST";
+  REFLEX.CATG = "FIBRE_NS";
+  PACK.DIR = "SPEC_OTHER";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="DISTORTION,FLAT,NS" and DPR.TECH=="IFU") then 
+{
+  RAW.TYPE = "DIST";
+  REFLEX.CATG = "FLAT_NS";
+  PACK.DIR = "SPEC_OTHER";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="DISTORTION,WAVE,NS" and DPR.TECH=="IFU") then 
+{
+  RAW.TYPE = "DIST";
+  REFLEX.CATG = "WAVE_NS";
+  PACK.DIR = "SPEC_OTHER";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="FLAT,LAMP" and DPR.TECH=="IFU" and TPL.NEXP >= 6) then 
+{
+  RAW.TYPE = "FLAT";
+  REFLEX.CATG = "FLAT_LAMP";
+  PACK.DIR = "SPEC_FLAT";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="FLAT,LAMP" and DPR.TECH=="IFU" and TPL.NEXP <= 2) then 
+{
+  RAW.TYPE = "TECH_FLUT";
+  REFLEX.CATG = "FLAT_LAMP";
+  PACK.DIR = "NONE";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="WAVE,LAMP" and DPR.TECH=="IFU" and TPL.NEXP >= 2) then 
+{
+  RAW.TYPE = "WAVE";
+  REFLEX.CATG = "WAVE_LAMP";
+  PACK.DIR = "SPEC_ARC";
+  CATG = "CALIB";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="STD" and (DPR.TECH=="IFU,NODDING" or DPR.TECH=="IFU,NODDING,DITHER") and TPL.NEXP >= 2) then 
+{
+  RAW.TYPE = "STD";
+  REFLEX.CATG = "STD";
+  PACK.DIR = "SPEC_STD";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="SKY,STD" and (DPR.TECH=="IFU,NODDING" or DPR.TECH=="IFU,NODDING,DITHER") and TPL.NEXP >= 2) then 
+{
+  RAW.TYPE = "STD";
+  REFLEX.CATG = "SKY_STD";
+  PACK.DIR = "SPEC_STD";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="PSF-CALIBRATOR" and DPR.TECH=="IFU,NODDING" and TPL.NEXP >= 1) then 
+{
+  RAW.TYPE = "PSF";
+  REFLEX.CATG = "PSF_CALIBRATOR";
+  PACK.DIR = "SPEC_STD";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="CALIB" and DPR.TYPE=="SKY,PSF-CALIBRATOR" and DPR.TECH=="IFU,NODDING" and TPL.NEXP >=1) then 
+{
+  RAW.TYPE = "PSF";
+  REFLEX.CATG = "SKY_PSF_CALIBRATOR";
+  PACK.DIR = "SPEC_STD";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if ( DPR.CATG=="TECHNICAL" and DPR.TYPE=="FIBRE,PSF-CALIBRATOR" and DPR.TECH=="IFU" and TPL.NEXP >= 2) then 
+{
+  RAW.TYPE = "HC_AO";
+  REFLEX.CATG = "PSF_CALIBRATOR";
+  PACK.DIR = "NONE";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if ( DPR.CATG=="TECHNICAL" and DPR.TYPE=="DARK,PSF-CALIBRATOR" and DPR.TECH=="IFU" and TPL.NEXP >=2) then 
+{
+  RAW.TYPE = "HC_AO";
+  REFLEX.CATG = "SKY_PSF_CALIBRATOR";
+  PACK.DIR = "NONE";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if ( DPR.CATG=="CALIB" and DPR.TYPE=="PUPIL,LAMP" and DPR.TECH=="IFU" ) then 
+{
+  RAW.TYPE = "PUPIL";
+  REFLEX.CATG = "PUPIL_LAMP";
+  PACK.DIR = "NONE";
+  CATG = "CALIB";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="SCIENCE" and DPR.TYPE=="OBJECT" and (DPR.TECH=="IFU,JITTER" or DPR.TECH=="IFU")) then 
+{
+  RAW.TYPE = "OBSJIT";
+  REFLEX.CATG = "OBJECT_JITTER";
+  PACK.DIR = "NONE";
+  CATG = "SCIENCE";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="SCIENCE" and DPR.TYPE=="OBJECT" and DPR.TECH=="IFU,NODDING" or DPR.TECH=="IFU,NODDING,DITHER") then 
+{
+  RAW.TYPE = "OBSNOD";
+  REFLEX.CATG = "OBJECT_NODDING";
+  PACK.DIR = "NONE";
+  CATG = "SCIENCE";
+  REFLEX.TARGET = "T";
+}
+if (DPR.CATG=="SCIENCE" and DPR.TYPE=="SKY" and DPR.TECH=="IFU,NODDING" or DPR.TECH=="IFU,NODDING,DITHER") then 
+{
+  RAW.TYPE = "OBSNOD";
+  REFLEX.CATG = "SKY_NODDING";
+  PACK.DIR = "NONE";
+  CATG = "SCIENCE";
+  REFLEX.TARGET = "T";
+}
+
+if PRO.CATG=="REF_BP_MAP" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "REF_BP_MAP";
+}
+
+if PRO.CATG=="FIRST_COL" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "FIRST_COL";
+}
+
+if PRO.CATG=="DRS_SETUP_WAVE" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "DRS_SETUP_WAVE";
+}
+
+if PRO.CATG=="ATM_REF_CORR" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "ATM_REF_CORR";
+}
+
+if PRO.CATG=="SLIT_POS" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "SLIT_POS";
+}
+
+if PRO.CATG=="REF_LINE_ARC" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "REF_LINE_ARC";
+}
+
+//Added to cover kit calib input
+if PRO.CATG=="EXTCOEFF_TABLE" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "EXTCOEFF_TABLE";
+}
+
+if PRO.CATG=="BP_MAP_NL" and INSTRUME=="SINFONI" then
+{
+  REFLEX.CATG = "BP_MAP_NL";
+}
+
+select execute(ACTION_DARK) from inputFiles where RAW.TYPE=="DARK"
+  group by DET.DIT,TPL.START as (TPL_A,tpl);
+
+minRet = 70; 
+select execute(ACTION_DIST) from inputFiles where RAW.TYPE=="DIST"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+
+minRet = 16; 
+select execute(ACTION_LINE) from inputFiles where RAW.TYPE=="LINE"
+  group by INS.SETUP.ID,TPL.START as (TPL_A,tpl);
+
+minRet = 2; 
+select execute(ACTION_FLAT) from inputFiles where RAW.TYPE=="FLAT"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+
+select execute(ACTION_TECH_FLUT) from inputFiles where RAW.TYPE=="TECH_FLUT"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+
+minRet = 2; 
+select execute(ACTION_WAVE) from inputFiles where RAW.TYPE=="WAVE"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+
+select execute(ACTION_PUPIL) from inputFiles where RAW.TYPE=="PUPIL"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+select execute(ACTION_STD) from inputFiles where RAW.TYPE=="STD"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+select execute(ACTION_HC_AO) from inputFiles where RAW.TYPE=="HC_AO"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+select execute(ACTION_PSF) from inputFiles where RAW.TYPE=="PSF"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,TPL.START as (TPL_A,tpl);
+select execute(ACTION_OBSJIT) from inputFiles where RAW.TYPE=="OBSJIT"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,DET.DIT,TPL.START as (TPL_A,tpl);
+select execute(ACTION_OBSNOD) from inputFiles where RAW.TYPE=="OBSNOD"
+  group by INS.SETUP.ID,INS.OPTI1.NAME,DET.DIT,TPL.START as (TPL_A,tpl);
+
+
+
+
+action ACTION_DARK
+{
+  recipe sinfo_rec_mdark;
+  product MASTER_DARK_WKF { PRO.CATG="MASTER_DARK_WKF"; PRO.EXT="tpl_0000.fits";}
+  product BP_MAP_HP_WKF { PRO.CATG="BP_MAP_HP_WKF"; PRO.EXT="tpl_0001.fits";}
+}
+
+action ACTION_LINE
+{
+  recipe sinfo_rec_detlin;
+  product BP_MAP_NL_WKF { PRO.CATG="BP_MAP_NL_WKF"; PRO.EXT="tpl_0001.fits";}
+}
+
+action ACTION_DIST
+{
+  minRet = 1; maxRet = 1;
+  select file as REF_LINE_ARC from calibFiles where PRO.CATG=="REF_LINE_ARC" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DRS_SETUP_WAVE from calibFiles where PRO.CATG=="DRS_SETUP_WAVE" and inputFile.INSTRUME==INSTRUME
+  ;
+  recipe sinfo_rec_distortion;
+  product DISTORTION_WKF { PRO.CATG="DISTORTION_WKF"; PRO.EXT="0006.fits";}
+  product SLITLETS_DISTANCE_WKF { PRO.CATG="SLITLETS_DISTANCE_WKF"; PRO.EXT="0008.fits";}
+}
+
+
+action ACTION_FLAT
+{
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_NL_WKF from calibFiles where PRO.CATG=="BP_MAP_NL_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as REF_BP_MAP from calibFiles where PRO.CATG=="REF_BP_MAP" and inputFile.INSTRUME==INSTRUME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS from calibFiles where PRO.CATG=="SLIT_POS" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+  ;
+  recipe sinfo_rec_mflat;
+  product MASTER_FLAT_LAMP_WKF { PRO.CATG="MASTER_FLAT_LAMP_WKF"; PRO.EXT="tpl_0000.fits";}
+  product MASTER_BP_MAP_WKF { PRO.CATG="MASTER_BP_MAP_WKF"; PRO.EXT="tpl_0001.fits";}
+}
+
+action ACTION_WAVE
+{
+  minRet = 1; maxRet = 1;
+  select file as DRS_SETUP_WAVE from calibFiles where PRO.CATG=="DRS_SETUP_WAVE" and inputFile.INSTRUME==INSTRUME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS from calibFiles where PRO.CATG=="SLIT_POS" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+  ;
+  minRet = 1; maxRet = 1;
+  select file as REF_LINE_ARC from calibFiles where PRO.CATG=="REF_LINE_ARC" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  recipe sinfo_rec_wavecal;
+  product WAVE_MAP_WKF { PRO.CATG="WAVE_MAP_WKF"; PRO.EXT="0000.fits";}
+  product SLIT_POS_WKF { PRO.CATG="SLIT_POS_WKF"; PRO.EXT="0004.fits";}
+}
+
+action ACTION_HC_AO
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet= 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+   recipe sinfo_rec_jitter;
+}
+
+action ACTION_PUPIL
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and INS.OPTI1.NAME=="0.25" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and INS.OPTI1.NAME=="0.25" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and INS.OPTI1.NAME=="0.25" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and INS.OPTI1.NAME=="0.25" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_pupil;
+}
+
+action ACTION_PSF
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+
+//  Not used, as response is not yet computed
+//  minRet = 0; maxRet = 1;
+//  select file as ATM_REF_CORR from calibFiles where PRO.CATG=="ATM_REF_CORR" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_jitter;
+  product COADD_PSF { PRO.CATG="COADD_PSF"; PRO.EXT="tpl_0000.fits";}
+  product MASTER_PSF { PRO.CATG="MASTER_PSF"; PRO.EXT="tpl_0005.fits";}
+}
+
+action ACTION_SMON
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_jitter;
+  product SMON_ { PRO.CATG="COADD_PSF"; PRO.EXT="tpl_0000.fits";}
+  product SMON_ { PRO.CATG="MASTER_PSF"; PRO.EXT="tpl_0005.fits";}
+}
+
+action ACTION_STD
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+
+// not used, as response is not yet computed
+//  minRet = 0; maxRet = 1;
+//  select file as ATM_REF_CORR from calibFiles where PRO.CATG=="ATM_REF_CORR" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_jitter;
+  product COADD_STD { PRO.CATG="COADD_STD"; PRO.EXT="tpl_0000.fits";}
+  product STD_STAR_SPECTRA { PRO.CATG="STD_STAR_SPECTRA"; PRO.EXT="tpl_0007.fits";}
+}
+
+action ACTION_OBSJIT
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+
+// not used as flux calibration is not yet performed
+//  minRet = 0; maxRet = 1;
+//  select file as ATM_REF_CORR from calibFiles where PRO.CATG=="ATM_REF_CORR" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+//  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_jitter;
+}
+
+action ACTION_OBSNOD
+{
+//  minRet = 0; maxRet = 1;
+//  select file as FIRST_COL from calibFiles where PRO.CATG=="FIRST_COL" and inputFile.INSTRUME==INSTRUME
+//  ;
+
+// not used as flux calibration is not yet performed
+//  minRet = 0; maxRet = 1;
+//  select file as ATM_REF_CORR from calibFiles where PRO.CATG=="ATM_REF_CORR" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME and MJD-OBS < inputFile.MJD-OBS
+//  ;
+
+  minRet = 1; maxRet = 1;
+  select file as MASTER_BP_MAP_WKF from calibFiles where PRO.CATG=="MASTER_BP_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_FLAT_LAMP_WKF from calibFiles where PRO.CATG=="MASTER_FLAT_LAMP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as DISTORTION_WKF from calibFiles where PRO.CATG=="DISTORTION_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLITLETS_DISTANCE_WKF from calibFiles where PRO.CATG=="SLITLETS_DISTANCE_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID
+  ;
+  minRet = 1; maxRet = 1;
+  select file as WAVE_MAP_WKF from calibFiles where PRO.CATG=="WAVE_MAP_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as SLIT_POS_WKF from calibFiles where PRO.CATG=="SLIT_POS_WKF" and inputFile.INS.SETUP.ID==INS.SETUP.ID and inputFile.INS.OPTI1.NAME==INS.OPTI1.NAME
+  ;
+  minRet = 1; maxRet = 1;
+  select file as MASTER_DARK_WKF from calibFiles where PRO.CATG=="MASTER_DARK_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  minRet = 1; maxRet = 1;
+  select file as BP_MAP_HP_WKF from calibFiles where PRO.CATG=="BP_MAP_HP_WKF" and inputFile.DET.DIT==DET.DIT
+  ;
+  recipe sinfo_rec_jitter;
+}
diff --git a/regtests/Makefile.am b/regtests/Makefile.am
index 5b23528..8abab04 100644
--- a/regtests/Makefile.am
+++ b/regtests/Makefile.am
@@ -15,7 +15,7 @@
 
 ##   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  02111-1307  USA
+##   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 AUTOMAKE_OPTIONS = 1.8 foreign
 
diff --git a/regtests/Makefile.in b/regtests/Makefile.in
index 4c6708e..4d6f157 100644
--- a/regtests/Makefile.in
+++ b/regtests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -61,6 +78,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
 AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -114,6 +136,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -154,6 +177,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -166,6 +190,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -188,6 +213,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -223,7 +249,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -246,6 +271,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 DISTCLEANFILES = *~
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
@@ -297,7 +324,7 @@ clean-libtool:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -322,7 +349,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -457,13 +484,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -498,10 +522,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/regtests/tests/Makefile.am b/regtests/tests/Makefile.am
index f7b7b4c..b3603ff 100644
--- a/regtests/tests/Makefile.am
+++ b/regtests/tests/Makefile.am
@@ -15,7 +15,7 @@
 
 ##   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  02111-1307  USA
+##   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 AUTOMAKE_OPTIONS = 1.8 foreign
 
diff --git a/regtests/tests/Makefile.in b/regtests/tests/Makefile.in
index d1967b3..b20b832 100644
--- a/regtests/tests/Makefile.in
+++ b/regtests/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,6 +15,23 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -54,6 +71,11 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -74,6 +96,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -114,6 +137,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -126,6 +150,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -148,6 +173,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -183,7 +209,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -206,6 +231,8 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.8 foreign
 DISTCLEANFILES = *~
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
@@ -299,10 +326,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/setup b/setup
index d257b06..50b3f67 100755
--- a/setup
+++ b/setup
@@ -19,7 +19,7 @@
 # $Author: amodigli $
 # $Date: 2003/08/18 12:42:44 $
 # $Revision: 1.1.1.1 $
-# $Name: sinfo-2_3_3 $
+# $Name: sinfo-2_4_0 $
 
 
 #   This script is the autoinstaller for the VLT instrument pipeline
diff --git a/sinfoni/Makefile.am b/sinfoni/Makefile.am
index 014df81..c30f6f2 100644
--- a/sinfoni/Makefile.am
+++ b/sinfoni/Makefile.am
@@ -26,9 +26,8 @@ SUBDIRS = . tests
 EXTRA_DIST = 
 
 
-CPPFLAGS = -DCX_LOG_DOMAIN=\"SinfoLib\"
 
-INCLUDES = $(all_includes) 
+AM_CPPFLAGS = $(all_includes) 
 
 noinst_HEADERS = \
 	sinfo_error.h \
diff --git a/sinfoni/Makefile.in b/sinfoni/Makefile.in
index 55220be..e989f90 100644
--- a/sinfoni/Makefile.in
+++ b/sinfoni/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,6 +17,23 @@
 
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -76,6 +93,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(privatelibdir)" \
 	"$(DESTDIR)$(pkgincludedir)"
 LTLIBRARIES = $(privatelib_LTLIBRARIES)
@@ -164,6 +187,11 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
@@ -212,12 +240,13 @@ CFLAGS = @CFLAGS@
 CPL_INCLUDES = @CPL_INCLUDES@
 CPL_LDFLAGS = @CPL_LDFLAGS@
 CPP = @CPP@
-CPPFLAGS = -DCX_LOG_DOMAIN=\"SinfoLib\"
+CPPFLAGS = @CPPFLAGS@
 CX_INCLUDES = @CX_INCLUDES@
 CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -258,6 +287,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -270,6 +300,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -292,6 +323,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -327,7 +359,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -350,11 +381,13 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.6 foreign
 DISTCLEANFILES = *~
 SUBDIRS = . tests
 EXTRA_DIST = 
-INCLUDES = $(all_includes) 
+AM_CPPFLAGS = $(all_includes) 
 noinst_HEADERS = \
 	sinfo_error.h \
 	sinfo_rec_utils.h \
@@ -688,7 +721,6 @@ $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 install-privatelibLTLIBRARIES: $(privatelib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
-	test -z "$(privatelibdir)" || $(MKDIR_P) "$(DESTDIR)$(privatelibdir)"
 	@list='$(privatelib_LTLIBRARIES)'; test -n "$(privatelibdir)" || list=; \
 	list2=; for p in $$list; do \
 	  if test -f $$p; then \
@@ -696,6 +728,8 @@ install-privatelibLTLIBRARIES: $(privatelib_LTLIBRARIES)
 	  else :; fi; \
 	done; \
 	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(privatelibdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(privatelibdir)" || exit 1; \
 	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(privatelibdir)'"; \
 	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(privatelibdir)"; \
 	}
@@ -717,7 +751,7 @@ clean-privatelibLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libsinfo.la: $(libsinfo_la_OBJECTS) $(libsinfo_la_DEPENDENCIES) 
+libsinfo.la: $(libsinfo_la_OBJECTS) $(libsinfo_la_DEPENDENCIES) $(EXTRA_libsinfo_la_DEPENDENCIES) 
 	$(libsinfo_la_LINK) -rpath $(privatelibdir) $(libsinfo_la_OBJECTS) $(libsinfo_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -886,8 +920,11 @@ clean-libtool:
 	-rm -rf .libs _libs
 install-pkgincludeHEADERS: $(pkginclude_HEADERS)
 	@$(NORMAL_INSTALL)
-	test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)"
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
+	fi; \
 	for p in $$list; do \
 	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
 	  echo "$$d$$p"; \
@@ -901,9 +938,7 @@ uninstall-pkgincludeHEADERS:
 	@$(NORMAL_UNINSTALL)
 	@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-	test -n "$$files" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(pkgincludedir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(pkgincludedir)" && rm -f $$files
+	dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -912,7 +947,7 @@ uninstall-pkgincludeHEADERS:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -937,7 +972,7 @@ $(RECURSIVE_TARGETS):
 	fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-	@failcom='exit 1'; \
+	@fail= failcom='exit 1'; \
 	for f in x $$MAKEFLAGS; do \
 	  case $$f in \
 	    *=* | --[!k]*);; \
@@ -1072,13 +1107,10 @@ distdir: $(DISTFILES)
 	done
 	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
-	    test -d "$(distdir)/$$subdir" \
-	    || $(MKDIR_P) "$(distdir)/$$subdir" \
-	    || exit 1; \
-	  fi; \
-	done
-	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
 	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
 	    $(am__relativize); \
 	    new_distdir=$$reldir; \
@@ -1116,10 +1148,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/sinfoni/sinfo_baryvel.c b/sinfoni/sinfo_baryvel.c
index 9f11924..7725f1f 100644
--- a/sinfoni/sinfo_baryvel.c
+++ b/sinfoni/sinfo_baryvel.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_baryvel.c,v $
  * Revision 1.3  2012/03/02 08:42:20  amodigli
  * fixed some typos on doxygen
diff --git a/sinfoni/sinfo_baryvel.h b/sinfoni/sinfo_baryvel.h
index aa02835..9dbf8fc 100644
--- a/sinfoni/sinfo_baryvel.h
+++ b/sinfoni/sinfo_baryvel.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2009/04/28 11:42:18 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_baryvel.h,v $
  * Revision 1.2  2009/04/28 11:42:18  amodigli
  * now return cpl_error_code
diff --git a/sinfoni/sinfo_bp_config.c b/sinfoni/sinfo_bp_config.c
index 4a0fe6a..4838dcb 100644
--- a/sinfoni/sinfo_bp_config.c
+++ b/sinfoni/sinfo_bp_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_config.h b/sinfoni/sinfo_bp_config.h
index 860b7ce..ffe3aa9 100644
--- a/sinfoni/sinfo_bp_config.h
+++ b/sinfoni/sinfo_bp_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_bp_dist_config.c b/sinfoni/sinfo_bp_dist_config.c
index 0161c71..5c2ba9f 100644
--- a/sinfoni/sinfo_bp_dist_config.c
+++ b/sinfoni/sinfo_bp_dist_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2007/06/06 07:10:45 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_dist_config.h b/sinfoni/sinfo_bp_dist_config.h
index 8607fb1..2672878 100644
--- a/sinfoni/sinfo_bp_dist_config.h
+++ b/sinfoni/sinfo_bp_dist_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_bp_lin_config.c b/sinfoni/sinfo_bp_lin_config.c
index cad6599..8bfe447 100644
--- a/sinfoni/sinfo_bp_lin_config.c
+++ b/sinfoni/sinfo_bp_lin_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_lin_config.h b/sinfoni/sinfo_bp_lin_config.h
index 8e4fdf6..c8692f1 100644
--- a/sinfoni/sinfo_bp_lin_config.h
+++ b/sinfoni/sinfo_bp_lin_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:27 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_bp_noise_config.c b/sinfoni/sinfo_bp_noise_config.c
index 481ddc9..dc0b41a 100644
--- a/sinfoni/sinfo_bp_noise_config.c
+++ b/sinfoni/sinfo_bp_noise_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2008/01/17 07:54:04 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_noise_config.h b/sinfoni/sinfo_bp_noise_config.h
index 84095cf..a6cef2f 100644
--- a/sinfoni/sinfo_bp_noise_config.h
+++ b/sinfoni/sinfo_bp_noise_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:27 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_bp_norm_config.c b/sinfoni/sinfo_bp_norm_config.c
index 88b84ac..a0849f4 100644
--- a/sinfoni/sinfo_bp_norm_config.c
+++ b/sinfoni/sinfo_bp_norm_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2007/06/06 07:10:45 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_norm_config.h b/sinfoni/sinfo_bp_norm_config.h
index a9b95d8..474d6ff 100644
--- a/sinfoni/sinfo_bp_norm_config.h
+++ b/sinfoni/sinfo_bp_norm_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_bp_sky_config.c b/sinfoni/sinfo_bp_sky_config.c
index 738f40d..b9a258e 100644
--- a/sinfoni/sinfo_bp_sky_config.c
+++ b/sinfoni/sinfo_bp_sky_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2007/06/06 07:10:45 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_bp_sky_config.h b/sinfoni/sinfo_bp_sky_config.h
index cc53a1f..732e470 100644
--- a/sinfoni/sinfo_bp_sky_config.h
+++ b/sinfoni/sinfo_bp_sky_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_dark_config.c b/sinfoni/sinfo_dark_config.c
index 500ac1e..85a538b 100644
--- a/sinfoni/sinfo_dark_config.c
+++ b/sinfoni/sinfo_dark_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_dark_config.h b/sinfoni/sinfo_dark_config.h
index c30b92c..ee7e270 100644
--- a/sinfoni/sinfo_dark_config.h
+++ b/sinfoni/sinfo_dark_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_dfs.c b/sinfoni/sinfo_dfs.c
index b5ed345..3e6cb58 100644
--- a/sinfoni/sinfo_dfs.c
+++ b/sinfoni/sinfo_dfs.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_dfs.c,v 1.43 2013/01/24 15:56:40 amodigli Exp $
+/* $Id: sinfo_dfs.c,v 1.44 2013/09/17 08:11:22 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2013/01/24 15:56:40 $
- * $Revision: 1.43 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/09/17 08:11:22 $
+ * $Revision: 1.44 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -1733,8 +1733,8 @@ int  sinfo_get_clean_mean_window(cpl_image* img,
 int sinfo_check_rec_status(const int val) {
    if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg_error("error before %d",val);
-      sinfo_msg_error((char* ) cpl_error_get_message());
-      sinfo_msg_error((char* ) cpl_error_get_where());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_where());
       return -1;
    }
    return 0;
diff --git a/sinfoni/sinfo_dfs.h b/sinfoni/sinfo_dfs.h
index 6355cc3..3924fe9 100644
--- a/sinfoni/sinfo_dfs.h
+++ b/sinfoni/sinfo_dfs.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2010/02/17 09:23:43 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_DFS_H
diff --git a/sinfoni/sinfo_distortion.c b/sinfoni/sinfo_distortion.c
index e0fbf0b..64d4b0f 100644
--- a/sinfoni/sinfo_distortion.c
+++ b/sinfoni/sinfo_distortion.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/05 16:34:06 $
  * $Revision: 1.37 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_distortion.h b/sinfoni/sinfo_distortion.h
index f95f559..024c02b 100644
--- a/sinfoni/sinfo_distortion.h
+++ b/sinfoni/sinfo_distortion.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/06/06 07:10:45 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_DISTORTION_H
diff --git a/sinfoni/sinfo_distortion_config.c b/sinfoni/sinfo_distortion_config.c
index 14f4402..4acfe57 100644
--- a/sinfoni/sinfo_distortion_config.c
+++ b/sinfoni/sinfo_distortion_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/sinfoni/sinfo_distortion_config.h b/sinfoni/sinfo_distortion_config.h
index f9c606f..8018593 100644
--- a/sinfoni/sinfo_distortion_config.h
+++ b/sinfoni/sinfo_distortion_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_dump.c b/sinfoni/sinfo_dump.c
index 8b9d534..3682ef1 100644
--- a/sinfoni/sinfo_dump.c
+++ b/sinfoni/sinfo_dump.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/09/21 10:55:19 $
  * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_dump.c,v $
  * Revision 1.9  2012/09/21 10:55:19  amodigli
  * removed warning from clang
diff --git a/sinfoni/sinfo_dump.h b/sinfoni/sinfo_dump.h
index 75fafcd..a587cde 100644
--- a/sinfoni/sinfo_dump.h
+++ b/sinfoni/sinfo_dump.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2011/11/23 17:29:09 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_dump.h,v $
  * Revision 1.6  2011/11/23 17:29:09  amodigli
  * fix warning with cpl6
diff --git a/sinfoni/sinfo_error.h b/sinfoni/sinfo_error.h
index 156412a..b9a93aa 100644
--- a/sinfoni/sinfo_error.h
+++ b/sinfoni/sinfo_error.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2007/10/26 09:42:36 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_error.h,v $
  * Revision 1.13  2007/10/26 09:42:36  amodigli
  * removed check on CPL_VERSION_CODE (now works only for CPL4)
diff --git a/sinfoni/sinfo_focus_determination_config.c b/sinfoni/sinfo_focus_determination_config.c
index 25d7b83..5ac7f4b 100644
--- a/sinfoni/sinfo_focus_determination_config.c
+++ b/sinfoni/sinfo_focus_determination_config.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/sinfoni/sinfo_focus_determination_config.h b/sinfoni/sinfo_focus_determination_config.h
index e09cd55..b7757a7 100644
--- a/sinfoni/sinfo_focus_determination_config.h
+++ b/sinfoni/sinfo_focus_determination_config.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_functions.h b/sinfoni/sinfo_functions.h
index fb7ce43..94a3c9b 100644
--- a/sinfoni/sinfo_functions.h
+++ b/sinfoni/sinfo_functions.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2009/03/04 10:17:38 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifndef SINFO_FUNCTIONS_H
 #define SINFO_FUNCTIONS_H
diff --git a/sinfoni/sinfo_general_config.c b/sinfoni/sinfo_general_config.c
index 95f3ca3..5e18d69 100644
--- a/sinfoni/sinfo_general_config.c
+++ b/sinfoni/sinfo_general_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_general_config.h b/sinfoni/sinfo_general_config.h
index 6d652b2..22a9b17 100644
--- a/sinfoni/sinfo_general_config.h
+++ b/sinfoni/sinfo_general_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_globals.h b/sinfoni/sinfo_globals.h
index 0198057..797110b 100644
--- a/sinfoni/sinfo_globals.h
+++ b/sinfoni/sinfo_globals.h
@@ -1,4 +1,4 @@
-/* $Id: sinfo_globals.h,v 1.6 2007/10/09 15:58:00 amodigli Exp $
+/* $Id: sinfo_globals.h,v 1.7 2013/07/15 08:14:08 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2007/10/09 15:58:00 $
- * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/07/15 08:14:08 $
+ * $Revision: 1.7 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_GLOBALS_H
@@ -80,6 +80,12 @@
 #define LAMP_ON     TRUE
 #define LAMP_OFF    FALSE
 
+/* compat macro */
+#if defined CPL_VERSION_CODE && CPL_VERSION_CODE >= CPL_VERSION(6, 3, 0)
+#define cpl_frameset_get_frame cpl_frameset_get_position
+#define cpl_frameset_get_frame_const cpl_frameset_get_position_const
+#endif
+
 struct amoeba_ {
   cpl_vector*   vx;
   cpl_vector*   vy;
diff --git a/sinfoni/sinfo_hidden.h b/sinfoni/sinfo_hidden.h
index 19a7f01..3620bea 100644
--- a/sinfoni/sinfo_hidden.h
+++ b/sinfoni/sinfo_hidden.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2010/02/12 17:56:35 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_key_names.h b/sinfoni/sinfo_key_names.h
index fdd0dcf..b421243 100644
--- a/sinfoni/sinfo_key_names.h
+++ b/sinfoni/sinfo_key_names.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_KEY_NAMES_H
diff --git a/sinfoni/sinfo_lamp_flats_config.c b/sinfoni/sinfo_lamp_flats_config.c
index c82b0ed..74df33f 100644
--- a/sinfoni/sinfo_lamp_flats_config.c
+++ b/sinfoni/sinfo_lamp_flats_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.4 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_lamp_flats_config.h b/sinfoni/sinfo_lamp_flats_config.h
index 5da137d..4b3f622 100644
--- a/sinfoni/sinfo_lamp_flats_config.h
+++ b/sinfoni/sinfo_lamp_flats_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_lamp_spec_config.c b/sinfoni/sinfo_lamp_spec_config.c
index 879ee6f..cafd33d 100644
--- a/sinfoni/sinfo_lamp_spec_config.c
+++ b/sinfoni/sinfo_lamp_spec_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/02 08:42:20 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_lamp_spec_config.h b/sinfoni/sinfo_lamp_spec_config.h
index aff1e2c..d1b83d5 100644
--- a/sinfoni/sinfo_lamp_spec_config.h
+++ b/sinfoni/sinfo_lamp_spec_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_msg.c b/sinfoni/sinfo_msg.c
index ef5de1a..06d313f 100644
--- a/sinfoni/sinfo_msg.c
+++ b/sinfoni/sinfo_msg.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/12 14:57:39 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_msg.h b/sinfoni/sinfo_msg.h
index 5728427..6768acc 100644
--- a/sinfoni/sinfo_msg.h
+++ b/sinfoni/sinfo_msg.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/11/21 11:56:10 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifndef SINFO_MSG_H
 #define SINFO_MSG_H
diff --git a/sinfoni/sinfo_new_bezier.c b/sinfoni/sinfo_new_bezier.c
index 2c89fd0..f7a2988 100644
--- a/sinfoni/sinfo_new_bezier.c
+++ b/sinfoni/sinfo_new_bezier.c
@@ -344,7 +344,7 @@ sinfo_new_c_bezier_find_bad( cpl_image *im,
     int mly=0;
 
     float* pidata=NULL;
-    float* pmdata=NULL;
+    //float* pmdata=NULL;
 
     cpl_image* sc_img=NULL;
     cpl_image* drs_img=NULL;
@@ -355,7 +355,7 @@ sinfo_new_c_bezier_find_bad( cpl_image *im,
     ilx=cpl_image_get_size_x(im);
     ily=cpl_image_get_size_y(im);
 
-    pmdata=cpl_image_get_data_float(mask);
+    //pmdata=cpl_image_get_data_float(mask);
     pidata=cpl_image_get_data_float(im);
 
 
@@ -626,8 +626,8 @@ sinfo_new_c_bezier_correct_pixel(int ipos,
                                 "  Sub is=%d, js=%d, ks=%d  ;"
                                 "  Plane I=%d,J=%d ; mask %f ; im %f",
                         i, j, k, is, js, ks, indexI, indexJ,
-                                mask -> data[sinfo_im_xy(mask,indexI,indexJ)],
-                                im   -> data[sinfo_im_xy(im,indexI,indexJ)]);
+                                pmdata[sinfo_im_xy(mask,indexI,indexJ)],
+                                pidata[sinfo_im_xy(im,indexI,indexJ)]);
 #endif
 
          }
@@ -658,7 +658,7 @@ sinfo_new_c_bezier_correct_pixel_2D(int ipos,
 {
     short ic, jc, kc, ii, jj, kk/*, sjj, skk*/,is,js,ks;
     short i, j, k, indexJ, indexI, lx, ly, lz, szx, szy, szz;
-    double sum,aux;
+    double sum;
     int counter;
     float sumarr[100];
 
@@ -817,8 +817,10 @@ sinfo_new_c_bezier_correct_pixel_2D(int ipos,
           }
       }
       }
-
+    /*
+    double aux;
     aux = sum;
+    */
     sum   = sum / (counter - 1);
     *stdev = sqrt( sum );
 
@@ -852,7 +854,6 @@ sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
     int ilx=0;
     int ily=0;
     int inp=0;
-
     float* padata=NULL;
     float* pidata=NULL;
     cpl_image* i_img=NULL;
@@ -869,6 +870,10 @@ sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
     {
     for( j=0; j < ily; j++)
         {
+#ifdef DEBUG
+    int pix=0;
+           pix=i+j*ilx;
+#endif
         for( k=0; k < inp; k++)
         {
           a_img=cpl_imagelist_get(action,k);
@@ -879,7 +884,7 @@ sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
             {
 #ifdef DEBUG
             sinfo_msg_debug("Used im[%d,%d,%d]=%lf\n",
-                                      i,j,k,pidata[sinfo_im_xy(im,i,j)]);
+                                      i,j,k,pidata[pix]);
 #endif
             indata[pos].x = i;
             indata[pos].y = j;
@@ -896,7 +901,7 @@ sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
                (*point).z = k;
 #ifdef DEBUG
             sinfo_msg_debug("Find for im[%d,%d,%d]=%lf reason:%f",
-                        i,j,k,pidata[sinfo_im_xy(im,i,j)],
+                        i,j,k,pidata[pix],
                         padata[sinfo_cu_xy(action,i,j)]);
 #endif
             }
@@ -905,7 +910,7 @@ sinfo_new_c_bezier_interpol( cpl_imagelist * im, cpl_imagelist * action )
 #ifdef DEBUG
             sinfo_msg_debug("Ignored im[%d,%d,%d]=%lf reason:%f",
                         i,j,k,pidata[sinfo_im_xy(im,i,j)],
-                        padata[sinfo_im_xy(action,i,j)]);
+                        padata[pix]);
 #endif
             }
             }
@@ -1185,8 +1190,8 @@ int
 sinfo_new_change_mask (cpl_image * mask, cpl_image * im)
 {
     int i ;
-    int mlx=0;
-    int mly=0;
+    //int mlx=0;
+    //int mly=0;
     int ilx=0;
     int ily=0;
     float* pidata=NULL;
@@ -1197,8 +1202,8 @@ sinfo_new_change_mask (cpl_image * mask, cpl_image * im)
     ily=cpl_image_get_size_y(im);
     pidata=cpl_image_get_data_float(im);
 
-    mlx=cpl_image_get_size_x(mask);
-    mly=cpl_image_get_size_y(mask);
+    //mlx=cpl_image_get_size_x(mask);
+    //mly=cpl_image_get_size_y(mask);
     pmdata=cpl_image_get_data_float(mask);
 
     for ( i = 0 ; i < (int) ilx*ily ; i++ )
@@ -1252,7 +1257,7 @@ sinfo_new_c_bezier_find_cosmic( cpl_image *im,
 
 
     cpl_image* o_img=NULL;
-    float* pmdata=NULL;
+    //float* pmdata=NULL;
     float* pidata=NULL;
 
 
@@ -1268,7 +1273,7 @@ sinfo_new_c_bezier_find_cosmic( cpl_image *im,
 
     mlx=cpl_image_get_size_x(mask);
     mly=cpl_image_get_size_y(mask);
-    pmdata=cpl_image_get_data_float(mask);
+    //pmdata=cpl_image_get_data_float(mask);
 
     ilx=cpl_image_get_size_x(im);
     ily=cpl_image_get_size_y(im);
diff --git a/sinfoni/sinfo_new_cube_ops.c b/sinfoni/sinfo_new_cube_ops.c
index 51e4f01..ad7736c 100644
--- a/sinfoni/sinfo_new_cube_ops.c
+++ b/sinfoni/sinfo_new_cube_ops.c
@@ -1,4 +1,4 @@
-/*$Id: sinfo_new_cube_ops.c,v 1.45 2012/09/21 10:55:38 amodigli Exp $
+/*$Id: sinfo_new_cube_ops.c,v 1.47 2013/08/02 14:11:23 amodigli Exp $
  * This file is part of the ESO SINFONI Pipeline
  * Copyright (C) 2004,2005 European Southern Observatory
  *
@@ -27,9 +27,9 @@
 */
 /*
  * $Author: amodigli $
- * $Date: 2012/09/21 10:55:38 $
- * $Revision: 1.45 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/08/02 14:11:23 $
+ * $Revision: 1.47 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /************************************************************************
@@ -4469,14 +4469,15 @@ static int sinfo_kappa_sigma_offset_with_mask(
 		int z_max,
 		int nCubes,
 		cpl_imagelist** inputCubes,
-		double* exptimes,
+		const double* exptimes,
 		cpl_imagelist* imResult,
 		int* offsetX,
 		int* offsetY,
 		cpl_imagelist* sky_mask,
 		const double kappa
 		);
-void kappa_sigma_CubeDataVector(
+static void
+sinfo_kappa_sigma_CubeDataVector(
 		int globalX,
 		int globalY,
 		CubeDataVector* pCubeDataVector,
@@ -4486,15 +4487,19 @@ void kappa_sigma_CubeDataVector(
 		int iPlanesNumber,
 		int z_min,
 		const double kappa,
-		double* exptimes
+		const double* exptimes
 		);
 
-double kappa_sigma_array_with_mask(cpl_array* parray, int szArray, const double kappa,cpl_image* imMask, double* exptimes, int x, int y, double mask_delta)
+double
+sinfo_kappa_sigma_array_with_mask(cpl_array* parray, int szArray,
+                                  const double kappa,cpl_image* imMask,
+                                  const double* exptimes, int x, int y,
+                                  double mask_delta)
 {
 	double result = 0;
 	int nInvalidPoints = 0;
 	const double EPS = 1E-10;
-	//sinfo_msg("kappa_sigma_array_with_mask, x[%d] y[%d]"
+	//sinfo_msg("sinfo_kappa_sigma_array_with_mask, x[%d] y[%d]"
 	double mask_adjustment = mask_delta;
 	do
 	{
@@ -4547,7 +4552,7 @@ double kappa_sigma_array_with_mask(cpl_array* parray, int szArray, const double
 	check_nomsg(result = cpl_array_get_mean(parray));
 	return result;
 	cleanup:
-	sinfo_msg("Error in kappa_sigma_array_with_mask");
+	sinfo_msg("Error in sinfo_kappa_sigma_array_with_mask");
 	return 0;
 }
 
@@ -4583,7 +4588,7 @@ static int sinfo_kappa_sigma_offset_with_mask(
 		int z_max,
 		int nCubes,
 		cpl_imagelist** inputCubes,
-		double* exptimes,
+		const double* exptimes,
 		cpl_imagelist* imResult,
 		int* global_offsetX,
 		int* global_offsetY,
@@ -4738,7 +4743,9 @@ static int sinfo_kappa_sigma_offset_with_mask(
 				CubeDataVector* pDataY = pDataX[y - 1];
 				if (pDataY && pDataY->size)
 				{
-					kappa_sigma_CubeDataVector(x, y, pDataY, imResult, inputCubes, sky_mask, iPlanesNumber, z_min, kappa, exptimes);
+					sinfo_kappa_sigma_CubeDataVector(x, y, pDataY, imResult,
+					                inputCubes, sky_mask, iPlanesNumber, z_min,
+					                kappa, exptimes);
 				}
 				if (pDataY)
 				{
@@ -4758,7 +4765,8 @@ static int sinfo_kappa_sigma_offset_with_mask(
 
 }
 
-void kappa_sigma_CubeDataVector(
+static void
+sinfo_kappa_sigma_CubeDataVector(
 		int globalX,
 		int globalY,
 		CubeDataVector* pCubeDataVector,
@@ -4768,7 +4776,7 @@ void kappa_sigma_CubeDataVector(
 		int iPlanesNumber,
 		int z_min,
 		const double kappa,
-		double* exptimes
+		const double* exptimes
 		)
 {
 	int plane = 0;
@@ -4804,7 +4812,8 @@ void kappa_sigma_CubeDataVector(
 				{
 					int is_rejected = 0;
 					double value = 0;
-					check_nomsg(value = cpl_image_get(pImage, pCubeData->iLocalX, pCubeData->iLocalY, &is_rejected));
+					check_nomsg(value = cpl_image_get(pImage, pCubeData->iLocalX,
+					                pCubeData->iLocalY, &is_rejected));
 					if (!isnan(value))
 					{
 						check_nomsg(cpl_array_set(pArray, z, value));
@@ -4817,21 +4826,24 @@ void kappa_sigma_CubeDataVector(
 				}
 				else
 				{
-					sinfo_msg("kappa_sigma_CubeDataVector() - pImage is null");
+					sinfo_msg("pImage is null");
 				}
 			}
 		}
 		if(nValidPoints)
 		{
-		   kappa_sigma_array_with_mask(pArray, pCubeDataVector->size, kappa, imMask, exptimes, globalX, globalY, mask_adjustment);
+		   sinfo_kappa_sigma_array_with_mask(pArray, pCubeDataVector->size,
+		                   kappa, imMask, exptimes, globalX, globalY,
+		                   mask_adjustment);
 		   check_nomsg(imResult = cpl_imagelist_get(imlistResult, plane));
 		   if (imResult)
 		   {
-			  check_nomsg(cpl_image_set(imResult, globalX, globalY, cpl_array_get_mean(pArray)));
+			  check_nomsg(cpl_image_set(imResult, globalX, globalY,
+			                  cpl_array_get_mean(pArray)));
 		   }
 		   else
 		   {
-			  sinfo_msg("kappa_sigma_CubeDataVector() - imResult is null");
+			  sinfo_msg("imResult is null");
 		   }
 		} else
 		{
@@ -4847,7 +4859,7 @@ void kappa_sigma_CubeDataVector(
 	cpl_array_delete(pArray);
 	return;
 	cleanup:
-//	sinfo_msg("   -----cleanup from kappa_sigma_CubeDataVector");
+//	sinfo_msg("   -----cleanup");
 	return;
 }
 
diff --git a/sinfoni/sinfo_new_cube_ops.h b/sinfoni/sinfo_new_cube_ops.h
index cd74317..c297057 100644
--- a/sinfoni/sinfo_new_cube_ops.h
+++ b/sinfoni/sinfo_new_cube_ops.h
@@ -849,12 +849,12 @@ sinfo_coadd_with_ks_clip_optimized(const int z_min,
 			cpl_imagelist* mergedCube,
                         cpl_imagelist** tmpcubes);
 
-double kappa_sigma_array_with_mask(
+double sinfo_kappa_sigma_array_with_mask(
 		cpl_array* parray,
 		int szArray,
 		const double kappa,
 		cpl_image* imMask,
-		double* exptimes,
+		const double* exptimes,
 		int x, int y, double mas_adjustment
 		/*, double* val_msk_sum*/);
 #endif /*!SINFO_NEW_CUBE_OPS_H*/
diff --git a/sinfoni/sinfo_new_prepare_stacked_frames.c b/sinfoni/sinfo_new_prepare_stacked_frames.c
index 223a3fe..8951ba5 100644
--- a/sinfoni/sinfo_new_prepare_stacked_frames.c
+++ b/sinfoni/sinfo_new_prepare_stacked_frames.c
@@ -96,1314 +96,1314 @@ new_get_names(const char* pcatg, const int ind, stack_config_n ** cfg);
 static int
 new_get_names(const char* pcatg, const int ind, stack_config_n **  cfg){
 
-  if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_OFF) == 0) {
-     strcpy((*cfg)->outName,DISTORTION_STACK_OFF_OUT_FILENAME);
-  }
-  if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_ON)  == 0) {
-     strcpy((*cfg)->outName,"out_ns_stack_on.fits");
-  }
-  if (strcmp(pcatg,PRO_FIBRE_NS_STACKED)     == 0) {
-     strcpy((*cfg)->outName,"out_ns_stack.fits");
-  }
-  if (strcmp(pcatg,PRO_WAVE_LAMP_STACKED)    == 0) {
-     strcpy((*cfg)->outName,"out_wcal_stack.fits");
-  }
-  if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_DIST)== 0) {
-     strcpy((*cfg)->outName,"out_ns_stack_warp.fits");
-  }
-  if (strcmp(pcatg,PRO_WAVE_SLITPOS_STACKED) == 0) {
-     strcpy((*cfg)->outName,"out_slit_pos_stack.fits");
-  }
+    if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_OFF) == 0) {
+        strcpy((*cfg)->outName,DISTORTION_STACK_OFF_OUT_FILENAME);
+    }
+    if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_ON)  == 0) {
+        strcpy((*cfg)->outName,"out_ns_stack_on.fits");
+    }
+    if (strcmp(pcatg,PRO_FIBRE_NS_STACKED)     == 0) {
+        strcpy((*cfg)->outName,"out_ns_stack.fits");
+    }
+    if (strcmp(pcatg,PRO_WAVE_LAMP_STACKED)    == 0) {
+        strcpy((*cfg)->outName,"out_wcal_stack.fits");
+    }
+    if (strcmp(pcatg,PRO_FIBRE_NS_STACKED_DIST)== 0) {
+        strcpy((*cfg)->outName,"out_ns_stack_warp.fits");
+    }
+    if (strcmp(pcatg,PRO_WAVE_SLITPOS_STACKED) == 0) {
+        strcpy((*cfg)->outName,"out_slit_pos_stack.fits");
+    }
 
-  if (strcmp(pcatg,PRO_PSF_CALIBRATOR_STACKED)== 0) {
-     snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
-  }
-  if (strcmp(pcatg,PRO_SKY_PSF_CALIBRATOR_STACKED)== 0) {
-     strcpy((*cfg)->outName,STACKED_OUT_FILENAME);
-  }
-  if (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {
-     snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
-  }
-  /* only 1 frame
+    if (strcmp(pcatg,PRO_PSF_CALIBRATOR_STACKED)== 0) {
+        snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
+    }
+    if (strcmp(pcatg,PRO_SKY_PSF_CALIBRATOR_STACKED)== 0) {
+        strcpy((*cfg)->outName,STACKED_OUT_FILENAME);
+    }
+    if (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {
+        snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
+    }
+    /* only 1 frame
   if (strcmp(pcatg,PRO_STD_NODDING_STACKED) == 0) {
     strcpy((*cfg)->outName,STACKED_OUT_FILENAME);
   }
-  */
+     */
 
-  if (strcmp(pcatg,PRO_SKY_NODDING_STACKED) == 0) {
-    strcpy((*cfg)->outName,STACKED_OUT_FILENAME); /*STD*/
-  }
-  if (strcmp(pcatg,PRO_OBJECT_NODDING_STACKED) == 0) {
-    snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
-  }
-  if (strcmp(pcatg,PRO_PUPIL_LAMP_STACKED) == 0) {
-    snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
-  }
-  if (strcmp(pcatg,PRO_STACKED) == 0) {
-    snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
-  }
+    if (strcmp(pcatg,PRO_SKY_NODDING_STACKED) == 0) {
+        strcpy((*cfg)->outName,STACKED_OUT_FILENAME); /*STD*/
+    }
+    if (strcmp(pcatg,PRO_OBJECT_NODDING_STACKED) == 0) {
+        snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
+    }
+    if (strcmp(pcatg,PRO_PUPIL_LAMP_STACKED) == 0) {
+        snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
+    }
+    if (strcmp(pcatg,PRO_STACKED) == 0) {
+        snprintf((*cfg)->outName,MAX_NAME_SIZE-1,"%s%d%s","out_stack",ind,".fits");
+    }
 
-  snprintf((*cfg)->sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_sky",ind,".fits");
+    snprintf((*cfg)->sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_sky",ind,".fits");
 
-  return 0;
+    return 0;
 
 }
 
 
 int sinfo_new_prepare_stacked_frames (const char* plugin_id,
-                                cpl_parameterlist* config,
-                                cpl_frameset* sof,
-                                cpl_frameset* ref_set,
-                                const char* frm_pro_ctg,
-                                const int frm_ind,
-                                fake* fk)
+                                      cpl_parameterlist* config,
+                                      cpl_frameset* sof,
+                                      cpl_frameset* ref_set,
+                                      const char* frm_pro_ctg,
+                                      const int frm_ind,
+                                      fake* fk)
 {
 
 
-  stack_config_n * cfg =NULL;
-  cpl_imagelist * list_object=NULL ;
-  cpl_imagelist * list_dither_object=NULL;
-  cpl_imagelist * list_dither_sky=NULL;
-  cpl_imagelist * list_sky=NULL;
-  cpl_imagelist * list_dark=NULL;
-  new_Lookup* lookup=NULL;
-  cpl_image * im3=NULL ;
-  cpl_image * im4=NULL ;
-  cpl_image * im5=NULL ;
-  cpl_image * im6=NULL ;
-  cpl_image * im7=NULL ;
-  cpl_image * im8=NULL ;
-  cpl_image * im9=NULL ;
-
-  cpl_image * ref_im1=NULL ;
-  cpl_image * ref_im2=NULL ;
-  cpl_image ** im=NULL ;
-  cpl_image * im_obj=NULL ;
-  cpl_image* simg=NULL;
-
-  cpl_image * im_dark=NULL ;
-  cpl_image * im_sky=NULL ;
-  cpl_image * im_dither=NULL ;
-  cpl_image * im_dither_sky=NULL ;
-  cpl_image * im_obj_sub=NULL ;
-  cpl_image * im_obj_flat=NULL ;
-  cpl_image * im_dither_sub=NULL ;
-  cpl_image * im_dither_flat=NULL ;
-  cpl_image * int_im_shifted=NULL ;
-  cpl_image * int_im_dith_shifted=NULL ;
-  cpl_image * im_conv=NULL ;
-  int sy=0;
-
-  cpl_image * mask_im=NULL ;
-  cpl_image * flat_smooth=NULL ;
-  cpl_image * flat1=NULL ;
-  cpl_image * flat2=NULL ;
-  cpl_image * int_im=NULL ;
-  cpl_image * int_im_dith=NULL ;
-  cpl_image * sky_img_flat=NULL;
-  cpl_image * sky_dist=NULL;
-
-
-  cpl_imagelist * iCube=NULL ;
-  cpl_imagelist * jCube=NULL ;
-  cpl_image * X=NULL ;
-  cpl_image * hX=NULL ;
-  cpl_image * Y=NULL ;
-  cpl_image * Z=NULL ;
-  cpl_table * qclog_tbl=NULL;
-  cpl_image* sky_img=NULL;
-  cpl_image* mdark=NULL;
-
-  char* name=NULL;
-  int typ=0;
-  int pos=0;
-  int i = 0;
-  int n = 0;
-  int cnt = 0 ;
-  float val_x=0;
-  float val_y=0;
-  int status=0;
-
-  float** slit_edges=NULL;
-  char** in_nam=NULL;
-
-  int nob = 0;
-  int nsky = 0;
-  int nobjdith = 0;
-  int nskydith = 0;
-  int nda = 0;
-  char name_list[MAX_NAME_SIZE];
-  char fake_sky_name[MAX_NAME_SIZE];
-  int no=0;
-  float lo_cut=0;
-  float hi_cut=0;
-
-  cpl_imagelist* list_object_tmp=NULL;
-  cpl_imagelist* list_dither_object_tmp=NULL;
-  cpl_imagelist* list_sky_tmp=NULL;
-  cpl_imagelist* list_dither_sky_tmp=NULL;
-
-  cpl_image* flat1_dist=NULL;
-  cpl_image* flat2_dist=NULL;
-
-  cpl_frameset* raw=NULL;
-
-  char file_name[MAX_NAME_SIZE];
-  cpl_table* tbl_index = NULL;
-  cpl_table* tbl_slitpos=NULL;
-  int rhead=0;
-
-  cpl_frame*     sky_frame = NULL;
-  char* sky_name  = NULL;
-  char* sky_tag   = NULL;
-  qc_wcal* qc=sinfo_qc_wcal_new();
-
-  cpl_parameter* p=NULL;
-  int pdensity=0;
-  int mflat_norm_smooth=FALSE;
-
-  int smooth_rad=16;
-  int sub_raw_sky=1;
-
-  /*
+    stack_config_n * cfg =NULL;
+    cpl_imagelist * list_object=NULL ;
+    cpl_imagelist * list_dither_object=NULL;
+    cpl_imagelist * list_dither_sky=NULL;
+    cpl_imagelist * list_sky=NULL;
+    cpl_imagelist * list_dark=NULL;
+    new_Lookup* lookup=NULL;
+    cpl_image * im3=NULL ;
+    cpl_image * im4=NULL ;
+    cpl_image * im5=NULL ;
+    cpl_image * im6=NULL ;
+    cpl_image * im7=NULL ;
+    cpl_image * im8=NULL ;
+    cpl_image * im9=NULL ;
+
+    cpl_image * ref_im1=NULL ;
+    cpl_image * ref_im2=NULL ;
+    cpl_image ** im=NULL ;
+    cpl_image * im_obj=NULL ;
+    cpl_image* simg=NULL;
+
+    cpl_image * im_dark=NULL ;
+    cpl_image * im_sky=NULL ;
+    cpl_image * im_dither=NULL ;
+    cpl_image * im_dither_sky=NULL ;
+    cpl_image * im_obj_sub=NULL ;
+    cpl_image * im_obj_flat=NULL ;
+    cpl_image * im_dither_sub=NULL ;
+    cpl_image * im_dither_flat=NULL ;
+    cpl_image * int_im_shifted=NULL ;
+    cpl_image * int_im_dith_shifted=NULL ;
+    cpl_image * im_conv=NULL ;
+    int sy=0;
+
+    cpl_image * mask_im=NULL ;
+    cpl_image * flat_smooth=NULL ;
+    cpl_image * flat1=NULL ;
+    cpl_image * flat2=NULL ;
+    cpl_image * int_im=NULL ;
+    cpl_image * int_im_dith=NULL ;
+    cpl_image * sky_img_flat=NULL;
+    cpl_image * sky_dist=NULL;
+
+
+    cpl_imagelist * iCube=NULL ;
+    cpl_imagelist * jCube=NULL ;
+    cpl_image * X=NULL ;
+    cpl_image * hX=NULL ;
+    cpl_image * Y=NULL ;
+    cpl_image * Z=NULL ;
+    cpl_table * qclog_tbl=NULL;
+    cpl_image* sky_img=NULL;
+    cpl_image* mdark=NULL;
+
+    char* name=NULL;
+    int typ=0;
+    int pos=0;
+    int i = 0;
+    int n = 0;
+    int cnt = 0 ;
+    float val_x=0;
+    float val_y=0;
+    int status=0;
+
+    float** slit_edges=NULL;
+    char** in_nam=NULL;
+
+    int nob = 0;
+    int nsky = 0;
+    int nobjdith = 0;
+    int nskydith = 0;
+    int nda = 0;
+    char name_list[MAX_NAME_SIZE];
+    char fake_sky_name[MAX_NAME_SIZE];
+    int no=0;
+    float lo_cut=0;
+    float hi_cut=0;
+
+    cpl_imagelist* list_object_tmp=NULL;
+    cpl_imagelist* list_dither_object_tmp=NULL;
+    cpl_imagelist* list_sky_tmp=NULL;
+    cpl_imagelist* list_dither_sky_tmp=NULL;
+
+    cpl_image* flat1_dist=NULL;
+    cpl_image* flat2_dist=NULL;
+
+    cpl_frameset* raw=NULL;
+
+    char file_name[MAX_NAME_SIZE];
+    cpl_table* tbl_index = NULL;
+    cpl_table* tbl_slitpos=NULL;
+    int rhead=0;
+
+    cpl_frame*     sky_frame = NULL;
+    char* sky_name  = NULL;
+    char* sky_tag   = NULL;
+    qc_wcal* qc=sinfo_qc_wcal_new();
+
+    cpl_parameter* p=NULL;
+    int pdensity=0;
+    int mflat_norm_smooth=FALSE;
+
+    int smooth_rad=16;
+    int sub_raw_sky=1;
+
+    /*
        -----------------------------------------------------------------
        1) parse the file names and parameters to the psf_config data
           structure cfg
        -----------------------------------------------------------------
-  */
+     */
 
 
-  check_nomsg(p=cpl_parameterlist_find(config,"sinfoni.product.density"));
-  check_nomsg(pdensity=cpl_parameter_get_int(p));
+    check_nomsg(p=cpl_parameterlist_find(config,"sinfoni.product.density"));
+    check_nomsg(pdensity=cpl_parameter_get_int(p));
 
 
 
-  check_nomsg(p=cpl_parameterlist_find(config,
-				       "sinfoni.stacked.mflat_norm_smooth"));
-  check_nomsg(mflat_norm_smooth=cpl_parameter_get_int(p));
+    check_nomsg(p=cpl_parameterlist_find(config,
+                    "sinfoni.stacked.mflat_norm_smooth"));
+    check_nomsg(mflat_norm_smooth=cpl_parameter_get_int(p));
 
 
 
-  check_nomsg(p=cpl_parameterlist_find(config,
-				       "sinfoni.stacked.mflat_smooth_rad"));
-  check_nomsg(smooth_rad=cpl_parameter_get_int(p));
+    check_nomsg(p=cpl_parameterlist_find(config,
+                    "sinfoni.stacked.mflat_smooth_rad"));
+    check_nomsg(smooth_rad=cpl_parameter_get_int(p));
 
-  check_nomsg(p=cpl_parameterlist_find(config,"sinfoni.stacked.sub_raw_sky"));
-  check_nomsg(sub_raw_sky=cpl_parameter_get_bool(p));
+    check_nomsg(p=cpl_parameterlist_find(config,"sinfoni.stacked.sub_raw_sky"));
+    check_nomsg(sub_raw_sky=cpl_parameter_get_bool(p));
 
 
-  check_nomsg(raw=cpl_frameset_new());
-  cknull(cfg = sinfo_parse_cpl_input_stack(config,sof,&raw, fk),
-        "could not parse cpl input file!") ;
+    check_nomsg(raw=cpl_frameset_new());
+    cknull(cfg = sinfo_parse_cpl_input_stack(config,sof,&raw, fk),
+           "could not parse cpl input file!") ;
 
-  ck0(sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc),"computing det ncounts");
+    ck0(sinfo_det_ncounts(raw, cfg->qc_thresh_max,qc),"computing det ncounts");
 
 
-  if(ref_set != NULL) {
-    sinfo_free_frameset(&raw);
-    raw=cpl_frameset_duplicate(ref_set);
-  }
-  /* defines output file name for stack set i */
-  ck0_nomsg(new_get_names(frm_pro_ctg, frm_ind, &cfg));
-
-  if (cfg->flatInd == 1){
-    if(sinfo_is_fits_file(cfg->flatfield1) != 1) {
-       sinfo_msg_error("Input FF file %s is not FITS",cfg->flatfield1);
-       goto cleanup;
+    if(ref_set != NULL) {
+        sinfo_free_frameset(&raw);
+        raw=cpl_frameset_duplicate(ref_set);
     }
+    /* defines output file name for stack set i */
+    ck0_nomsg(new_get_names(frm_pro_ctg, frm_ind, &cfg));
+
+    if (cfg->flatInd == 1){
+        if(sinfo_is_fits_file(cfg->flatfield1) != 1) {
+            sinfo_msg_error("Input FF file %s is not FITS",cfg->flatfield1);
+            goto cleanup;
+        }
 
-  }
-  if (cfg->maskInd == 1) {
-    if(sinfo_is_fits_file(cfg->mask) != 1) {
-         sinfo_msg_error("Input mask file %s is not FITS",cfg->mask);
-         goto cleanup;
     }
-    if(cfg -> indind == 0) {
-      if(sinfo_is_fits_file(cfg->slitposList) != 1) {
-    sinfo_msg_error("Input slitpos file %s is not FITS",cfg->slitposList);
-    goto cleanup;
-      }
+    if (cfg->maskInd == 1) {
+        if(sinfo_is_fits_file(cfg->mask) != 1) {
+            sinfo_msg_error("Input mask file %s is not FITS",cfg->mask);
+            goto cleanup;
+        }
+        if(cfg -> indind == 0) {
+            if(sinfo_is_fits_file(cfg->slitposList) != 1) {
+                sinfo_msg_error("Input slitpos file %s is not FITS",cfg->slitposList);
+                goto cleanup;
+            }
+        }
     }
-  }
 
-  /*
+    /*
    #---------------------------------------------------------
    # Take a clean mean of several images
    # input is 1 or more similar images
    #---------------------------------------------------------
-  */
+     */
 
-  if (cfg->sfInd == 1){
-    if (cfg->contains_dark == 0) {
-      sinfo_msg_warning("no sinfo_dark frames given!");
+    if (cfg->sfInd == 1){
+        if (cfg->contains_dark == 0) {
+            sinfo_msg_warning("no sinfo_dark frames given!");
+        }
+        if (cfg->contains_ref == 0) {
+            sinfo_msg_error("no reference frames given!");
+            goto cleanup;
+        }
     }
-    if (cfg->contains_ref == 0) {
-      sinfo_msg_error("no reference frames given!");
-      goto cleanup;
-    }
-  }
 
-  /* allocate memory for lists of object, sky and dithered frames */
-  check(list_object=cpl_imagelist_new(),
-        "could not allocate memory for object frame");
-
-  if (cfg->contains_dither == 1) {
-    check(list_dither_object=cpl_imagelist_new(),
-          "could not allocate memory for dither object frame");
-  }
+    /* allocate memory for lists of object, sky and dithered frames */
+    check(list_object=cpl_imagelist_new(),
+          "could not allocate memory for object frame");
 
-  if (cfg->contains_sky == 1) {
-    check(list_sky = cpl_imagelist_new(),
-       "could not allocate memory for off frame list");
-  }
+    if (cfg->contains_dither == 1) {
+        check(list_dither_object=cpl_imagelist_new(),
+                        "could not allocate memory for dither object frame");
+    }
 
-  if (cfg->contains_dither == 1 && cfg->nditheroff > 0) {
-     check(list_dither_sky = cpl_imagelist_new(),
-       "could not allocate memory for dither frame list");
-  }
+    if (cfg->contains_sky == 1) {
+        check(list_sky = cpl_imagelist_new(),
+                        "could not allocate memory for off frame list");
+    }
 
-  if (cfg->contains_dark == 1 && cfg->sfInd == 1) {
-     check(list_dark = cpl_imagelist_new(),
-       "could not allocate memory for sinfo_dark frame");
-  }
+    if (cfg->contains_dither == 1 && cfg->nditheroff > 0) {
+        check(list_dither_sky = cpl_imagelist_new(),
+                        "could not allocate memory for dither frame list");
+    }
 
-  if (cfg->contains_dither == 0 && cfg->nditheroff > 0) {
-     sinfo_msg_error("please use non-dithered off-frames, remove the 2!");
-     goto cleanup;
-  }
+    if (cfg->contains_dark == 1 && cfg->sfInd == 1) {
+        check(list_dark = cpl_imagelist_new(),
+                        "could not allocate memory for sinfo_dark frame");
+    }
 
-  /* build different image lists for the different cases */
-  cknull_nomsg(im=(cpl_image**)cpl_calloc(cfg -> nframes, sizeof(cpl_image*)));
+    if (cfg->contains_dither == 0 && cfg->nditheroff > 0) {
+        sinfo_msg_error("please use non-dithered off-frames, remove the 2!");
+        goto cleanup;
+    }
 
-  for (i=0; i< cfg->nframes; i++) {
-     name = cfg->framelist[i];
-     if(sinfo_is_fits_file(name) != 1) {
-       sinfo_msg_error("Input file %s is not FITS",name);
-       goto cleanup;
-     }
-     check_nomsg(im[i] = cpl_image_load( name,CPL_TYPE_FLOAT,0,0));
-  }
+    /* build different image lists for the different cases */
+    cknull_nomsg(im=(cpl_image**)cpl_calloc(cfg -> nframes, sizeof(cpl_image*)));
 
-  /* up to here leak free */
-  rhead=0;
-  for (i=0; i< cfg->nframes; i++) {
-    typ = sinfo_new_intarray_get_value( cfg->frametype, i );
-    pos = sinfo_new_intarray_get_value( cfg->frameposition, i );
-    cknull(im[i],"could not load image");
-
-    if (pos == 2) {
-      if (typ == 1) {
-        check_nomsg(cpl_imagelist_set(list_object,
-                                      cpl_image_duplicate(im[i]),nob));
-        nob = nob + 1;
-      }
-      else if ( typ == 0 ) {
-        check_nomsg(cpl_imagelist_set(list_sky,
-                    cpl_image_duplicate(im[i]),nsky));
-        nsky = nsky + 1;
-	if(pdensity > 0) {
-	  if(fk->is_fake_sky==1) {
-	    snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",
-		     frm_ind,".fits");
-	    check_nomsg(sky_img=cpl_image_load(fake_sky_name,CPL_TYPE_FLOAT,0,0));
-	    ck0(sinfo_pro_save_ima(sky_img,raw,sof,fake_sky_name,
-				   PRO_SKY_DUMMY,NULL,
-				   plugin_id,config),
-		"cannot save sky ima %s", fake_sky_name);
-
-	    sinfo_free_image(&sky_img);
-	  }
-	}
-
-
-        if((pdensity == 3) || (pdensity == 1) ||
-           (pdensity == 2 && frm_ind == 0)) {
-	  check_nomsg(sky_frame = cpl_frameset_get_frame(raw,i));
-	  check_nomsg(sky_name  = (char*) cpl_frame_get_filename(sky_frame));
-	  check_nomsg(sky_tag   = (char*) cpl_frame_get_tag(sky_frame));
-
-          if ( (strstr(frm_pro_ctg,"OBJECT") != NULL) ||
-               (strstr(frm_pro_ctg,"PSF") != NULL) ||
-               (strstr(frm_pro_ctg,"STD") != NULL) ) {
-	    check_nomsg(sky_img = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
-	    snprintf(sky_name,MAX_NAME_SIZE-1,"%s%2.2d%s","out_sky",
-		     frm_ind,".fits");
-	    ck0(sinfo_pro_save_ima(sky_img,raw,sof,sky_name,
-				   PRO_SKY_STACKED_DUMMY,NULL,
-                                   plugin_id,config),
-		"cannot save sky ima %s", sky_name);
-
-	    sinfo_free_image(&sky_img);
-	    if (cfg->flatInd == 1) {
-	      sinfo_msg("Sky Flatfielding");
-	      check(flat1=cpl_image_load(cfg->flatfield1,CPL_TYPE_FLOAT,0,0 ),
-		    "could not load flatfield image" );
-
-              if(mflat_norm_smooth != 0) {
-
-                if(mflat_norm_smooth == 1) {
-
-                   sy=cpl_image_get_size_y(flat1);
-
-                   cknull(flat_smooth=sinfo_image_smooth_fft(flat1,sy/smooth_rad),
-		       "could not smooth flatfield" );
-                } else if(mflat_norm_smooth == 2) {
-                   cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,
-                                                                    smooth_rad),
-                          "could not smooth flatfield" );
-                 }
-
-	        check_nomsg(cpl_image_divide(flat1,flat_smooth));
-	        sinfo_free_image(&flat_smooth);
-
-	      }
-
-	      check_nomsg(simg = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0 ));
-
-	      cknull(sky_img_flat=sinfo_new_div_images_robust(simg,flat1),
-		     "could not carry out flatfield division" );
-	      sinfo_free_image(&simg);
-	      sinfo_free_image(&flat1);
-
-	      /* if (frm_ind == 0) { */
-	      if (cfg->warpfixInd == 1){
-		sinfo_msg("Correct sky for distortions");
-                snprintf(file_name,MAX_NAME_SIZE-1,"%s%d%s",
-                         STACK_SKY_DIST_OUT_FILENAME,frm_ind,".fits");
-		sky_dist = sinfo_new_image_warp_fits(sky_img_flat,
-						     cfg->kernel,
-						     cfg->polyFile);
-
-		ck0(sinfo_pro_save_ima(sky_dist,raw,sof,
-				       file_name,
-				       PRO_STACK_SKY_DIST,NULL,plugin_id,
-				       config),"cannot save ima %s",
-		    STACK_SKY_DIST_OUT_FILENAME);
-
-		sinfo_free_image(&sky_dist);
-	      }
-	      /* } */
-	      sinfo_free_image(&sky_img_flat);
-	    } /* end check on flatind */
-	  } /* end check on procatg */
-	}
-      } else if ( typ == 5 ) {
-    if (cfg->sfInd == 1) {
-      check_nomsg(cpl_imagelist_set(list_dark,
-                      cpl_image_duplicate(im[i]),nda));
-      nda = nda + 1;
-    } else {
-      sinfo_free_image(&(im[i]));
-    }
-      } else if ( typ == 4 ) {
-    if ( cfg->sfInd == 1) {
-      ref_im1 = im[i];
-    } else {
-      sinfo_free_image(&(im[i]));
+    for (i=0; i< cfg->nframes; i++) {
+        name = cfg->framelist[i];
+        if(sinfo_is_fits_file(name) != 1) {
+            sinfo_msg_error("Input file %s is not FITS",name);
+            goto cleanup;
+        }
+        check_nomsg(im[i] = cpl_image_load( name,CPL_TYPE_FLOAT,0,0));
     }
-      }
-    } else {
-      if (typ == 1) {
-       check_nomsg(cpl_imagelist_set(list_dither_object,
-                                     cpl_image_duplicate(im[i]),nobjdith));
-       nobjdith = nobjdith + 1;
-      } else if (typ == 0) {
-    check_nomsg(cpl_imagelist_set(list_dither_object,
-                                     cpl_image_duplicate(im[i]),nskydith));
-    nskydith = nskydith + 1;
-      } else if (typ == 4) {
-    if (cfg->sfInd == 1) {
-      ref_im2 = cpl_image_duplicate(im[i]);
-    } else {
-      sinfo_free_image(&(im[i]));
-    }
-      }
-    }
-  } /* end for loop on i */
 
-  if (nob != cfg->nobj ||
-      cfg->noff != nsky ||
-      nobjdith != cfg->nditherobj ||
-      nskydith != cfg->nditheroff) {
-    sinfo_msg_error("something is wrong with the number of the");
-    sinfo_msg_error("different types of frames");
-    /* free memory */
-    goto cleanup;
+    /* up to here leak free */
+    rhead=0;
+    for (i=0; i< cfg->nframes; i++) {
+        typ = sinfo_new_intarray_get_value( cfg->frametype, i );
+        pos = sinfo_new_intarray_get_value( cfg->frameposition, i );
+        cknull(im[i],"could not load image");
+
+        if (pos == 2) {
+            if (typ == 1) {
+                check_nomsg(cpl_imagelist_set(list_object,
+                                cpl_image_duplicate(im[i]),nob));
+                nob = nob + 1;
+            }
+            else if ( typ == 0 ) {
+                check_nomsg(cpl_imagelist_set(list_sky,
+                                cpl_image_duplicate(im[i]),nsky));
+                nsky = nsky + 1;
+                if(pdensity > 0) {
+                    if(fk->is_fake_sky==1) {
+                        snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",
+                                        frm_ind,".fits");
+                        check_nomsg(sky_img=cpl_image_load(fake_sky_name,CPL_TYPE_FLOAT,0,0));
+                        ck0(sinfo_pro_save_ima(sky_img,raw,sof,fake_sky_name,
+                                        PRO_SKY_DUMMY,NULL,
+                                        plugin_id,config),
+                            "cannot save sky ima %s", fake_sky_name);
+
+                        sinfo_free_image(&sky_img);
+                    }
+                }
+
+
+                if((pdensity == 3) || (pdensity == 1) ||
+                                (pdensity == 2 && frm_ind == 0)) {
+                    check_nomsg(sky_frame = cpl_frameset_get_frame(raw,i));
+                    check_nomsg(sky_name  = (char*) cpl_frame_get_filename(sky_frame));
+                    check_nomsg(sky_tag   = (char*) cpl_frame_get_tag(sky_frame));
+
+                    if ( (strstr(frm_pro_ctg,"OBJECT") != NULL) ||
+                                    (strstr(frm_pro_ctg,"PSF") != NULL) ||
+                                    (strstr(frm_pro_ctg,"STD") != NULL) ) {
+                        check_nomsg(sky_img = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
+                        snprintf(sky_name,MAX_NAME_SIZE-1,"%s%2.2d%s","out_sky",
+                                 frm_ind,".fits");
+                        ck0(sinfo_pro_save_ima(sky_img,raw,sof,sky_name,
+                                        PRO_SKY_STACKED_DUMMY,NULL,
+                                        plugin_id,config),
+                            "cannot save sky ima %s", sky_name);
+
+                        sinfo_free_image(&sky_img);
+                        if (cfg->flatInd == 1) {
+                            sinfo_msg("Sky Flatfielding");
+                            check(flat1=cpl_image_load(cfg->flatfield1,CPL_TYPE_FLOAT,0,0 ),
+                                  "could not load flatfield image" );
+
+                            if(mflat_norm_smooth != 0) {
+
+                                if(mflat_norm_smooth == 1) {
+
+                                    sy=cpl_image_get_size_y(flat1);
+
+                                    cknull(flat_smooth=sinfo_image_smooth_fft(flat1,sy/smooth_rad),
+                                           "could not smooth flatfield" );
+                                } else if(mflat_norm_smooth == 2) {
+                                    cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,
+                                                    smooth_rad),
+                                                    "could not smooth flatfield" );
+                                }
+
+                                check_nomsg(cpl_image_divide(flat1,flat_smooth));
+                                sinfo_free_image(&flat_smooth);
+
+                            }
+
+                            check_nomsg(simg = cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0 ));
+
+                            cknull(sky_img_flat=sinfo_new_div_images_robust(simg,flat1),
+                                   "could not carry out flatfield division" );
+                            sinfo_free_image(&simg);
+                            sinfo_free_image(&flat1);
+
+                            /* if (frm_ind == 0) { */
+                            if (cfg->warpfixInd == 1){
+                                sinfo_msg("Correct sky for distortions");
+                                snprintf(file_name,MAX_NAME_SIZE-1,"%s%d%s",
+                                         STACK_SKY_DIST_OUT_FILENAME,frm_ind,".fits");
+                                sky_dist = sinfo_new_image_warp_fits(sky_img_flat,
+                                                cfg->kernel,
+                                                cfg->polyFile);
+
+                                ck0(sinfo_pro_save_ima(sky_dist,raw,sof,
+                                                file_name,
+                                                PRO_STACK_SKY_DIST,NULL,plugin_id,
+                                                config),"cannot save ima %s",
+                                    STACK_SKY_DIST_OUT_FILENAME);
+
+                                sinfo_free_image(&sky_dist);
+                            }
+                            /* } */
+                            sinfo_free_image(&sky_img_flat);
+                        } /* end check on flatind */
+                    } /* end check on procatg */
+                }
+            } else if ( typ == 5 ) {
+                if (cfg->sfInd == 1) {
+                    check_nomsg(cpl_imagelist_set(list_dark,
+                                    cpl_image_duplicate(im[i]),nda));
+                    nda = nda + 1;
+                } else {
+                    sinfo_free_image(&(im[i]));
+                }
+            } else if ( typ == 4 ) {
+                if ( cfg->sfInd == 1) {
+                    ref_im1 = im[i];
+                } else {
+                    sinfo_free_image(&(im[i]));
+                }
+            }
+        } else {
+            if (typ == 1) {
+                check_nomsg(cpl_imagelist_set(list_dither_object,
+                                cpl_image_duplicate(im[i]),nobjdith));
+                nobjdith = nobjdith + 1;
+            } else if (typ == 0) {
+                check_nomsg(cpl_imagelist_set(list_dither_object,
+                                cpl_image_duplicate(im[i]),nskydith));
+                nskydith = nskydith + 1;
+            } else if (typ == 4) {
+                if (cfg->sfInd == 1) {
+                    ref_im2 = cpl_image_duplicate(im[i]);
+                } else {
+                    sinfo_free_image(&(im[i]));
+                }
+            }
+        }
+    } /* end for loop on i */
+
+    if (nob != cfg->nobj ||
+                    cfg->noff != nsky ||
+                    nobjdith != cfg->nditherobj ||
+                    nskydith != cfg->nditheroff) {
+        sinfo_msg_error("something is wrong with the number of the");
+        sinfo_msg_error("different types of frames");
+        /* free memory */
+        goto cleanup;
 
-  }
+    }
 
-  if (cfg->sfInd == 1 && nda != cfg->ndark) {
-    sinfo_msg_error("something is wrong with the number of sinfo_dark frames");
-    goto cleanup;
-  }
-  sinfo_msg("Create and fill cubes with the different images");
+    if (cfg->sfInd == 1 && nda != cfg->ndark) {
+        sinfo_msg_error("something is wrong with the number of sinfo_dark frames");
+        goto cleanup;
+    }
+    sinfo_msg("Create and fill cubes with the different images");
 
-  /* create and fill cubes with the different image lists */
-  cknull(list_object,"could not create object data cube!");
+    /* create and fill cubes with the different image lists */
+    cknull(list_object,"could not create object data cube!");
 
-  /* shift the images in the cubes-if indicated-in spectral direction
+    /* shift the images in the cubes-if indicated-in spectral direction
      with respect to the reference image
-  */
-  if (cfg->sfInd == 1) {
+     */
+    if (cfg->sfInd == 1) {
 
-  /*
+        /*
       first take the mean of the sinfo_dark frames and subtract the result
       from all cubes
-  */
-  sinfo_msg("Shift cube images in spectral direction with "
-            "respect to reference");
-
-  if (cfg->contains_dark == 1) {
-    sinfo_msg("cfg->contains_dark == 1");
-    if (cfg->loReject*cfg->ndark < 1. && cfg->hiReject * cfg->ndark < 1.) {
-      /*
+         */
+        sinfo_msg("Shift cube images in spectral direction with "
+                        "respect to reference");
+
+        if (cfg->contains_dark == 1) {
+            sinfo_msg("cfg->contains_dark == 1");
+            if (cfg->loReject*cfg->ndark < 1. && cfg->hiReject * cfg->ndark < 1.) {
+                /*
           im_dark = sinfo_new_average_cube_to_image( list_dark );
-      */
-      check(im_dark = cpl_imagelist_collapse_create( list_dark ),
-     "sinfo_averageCubeToImage failed" );
-     }
-     else {
-
-       check_nomsg(no=cpl_imagelist_get_size(list_dark));
-       lo_cut=(floor)( cfg->loReject*no+0.5);
-       hi_cut=(floor)( cfg->hiReject*no+0.5);
-       check(im_dark=cpl_imagelist_collapse_minmax_create(list_dark,lo_cut,
-                                                          hi_cut),
-                                     "sinfo_average_with_rejection failed" );
-
-     }
-     sinfo_free_imagelist(&list_dark);
-     check_nomsg(list_object_tmp = cpl_imagelist_duplicate (list_object));
-     check(cpl_imagelist_subtract_image (list_object_tmp, im_dark),
-            "cpl_imagelist_subtract_image failed" );
-     /*
+                 */
+                check(im_dark = cpl_imagelist_collapse_create( list_dark ),
+                                "sinfo_averageCubeToImage failed" );
+            }
+            else {
+
+                check_nomsg(no=cpl_imagelist_get_size(list_dark));
+                lo_cut=(floor)( cfg->loReject*no+0.5);
+                hi_cut=(floor)( cfg->hiReject*no+0.5);
+                check(im_dark=cpl_imagelist_collapse_minmax_create(list_dark,lo_cut,
+                                hi_cut),
+                      "sinfo_average_with_rejection failed" );
+
+            }
+            sinfo_free_imagelist(&list_dark);
+            check_nomsg(list_object_tmp = cpl_imagelist_duplicate (list_object));
+            check(cpl_imagelist_subtract_image (list_object_tmp, im_dark),
+                  "cpl_imagelist_subtract_image failed" );
+            /*
        cube_object_tmp = sinfo_subImageFromCube (cube_object, im_dark);
-     */
-  } else {
-     sinfo_msg("cfg->contains_dark == 0");
-     check_nomsg(list_object_tmp = cpl_imagelist_duplicate(list_object));
-  }
-  sinfo_free_imagelist(&list_object);
-
-  cknull(list_object = sinfo_align_cube_to_reference (list_object_tmp,
-                              ref_im1,
-                              cfg->sfOrder,
-                              cfg->sfType),
-     "sinfo_align_cube_to_reference failed" );
-
-  sinfo_free_imagelist(&list_object_tmp);
-  if (cfg->contains_dither == 1) {
-    if (cfg->contains_dark == 1) {
-       check_nomsg(list_dither_object_tmp =
-                   cpl_imagelist_duplicate(list_dither_object));
-       check(cpl_imagelist_subtract_image(list_dither_object_tmp,im_dark),
-             "sinfo_average_with_rejection failed" );
-
-       /*
+             */
+        } else {
+            sinfo_msg("cfg->contains_dark == 0");
+            check_nomsg(list_object_tmp = cpl_imagelist_duplicate(list_object));
+        }
+        sinfo_free_imagelist(&list_object);
+
+        cknull(list_object = sinfo_align_cube_to_reference (list_object_tmp,
+                        ref_im1,
+                        cfg->sfOrder,
+                        cfg->sfType),
+               "sinfo_align_cube_to_reference failed" );
+
+        sinfo_free_imagelist(&list_object_tmp);
+        if (cfg->contains_dither == 1) {
+            if (cfg->contains_dark == 1) {
+                check_nomsg(list_dither_object_tmp =
+                                cpl_imagelist_duplicate(list_dither_object));
+                check(cpl_imagelist_subtract_image(list_dither_object_tmp,im_dark),
+                      "sinfo_average_with_rejection failed" );
+
+                /*
         list_dither_object_tmp =
               sinfo_new_sub_image_from_cube(list_dither_object,
                                                     im_dark);
-    */
-
-    } else {
-       check_nomsg(list_dither_object_tmp=
-                   cpl_imagelist_duplicate(list_dither_object));
-    }
-    sinfo_free_imagelist(&list_dither_object);
-
-    cknull(list_dither_object=
-            sinfo_align_cube_to_reference (list_dither_object_tmp,
-                                 ref_im2,
-                                 cfg->sfOrder,
-                                 cfg->sfType),
-       "sinfo_align_cube_to_reference failed" );
-
-    sinfo_free_imagelist(&list_dither_object_tmp);
-  }
-  if (cfg->contains_sky == 1) {
-    if (cfg->contains_dark == 1) {
-       check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
-       check(cpl_imagelist_subtract_image (list_sky_tmp, im_dark),
-         "sinfo_average_with_rejection failed" );
-       /*
+                 */
+
+            } else {
+                check_nomsg(list_dither_object_tmp=
+                                cpl_imagelist_duplicate(list_dither_object));
+            }
+            sinfo_free_imagelist(&list_dither_object);
+
+            cknull(list_dither_object=
+                            sinfo_align_cube_to_reference (list_dither_object_tmp,
+                                            ref_im2,
+                                            cfg->sfOrder,
+                                            cfg->sfType),
+                                            "sinfo_align_cube_to_reference failed" );
+
+            sinfo_free_imagelist(&list_dither_object_tmp);
+        }
+        if (cfg->contains_sky == 1) {
+            if (cfg->contains_dark == 1) {
+                check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
+                check(cpl_imagelist_subtract_image (list_sky_tmp, im_dark),
+                      "sinfo_average_with_rejection failed" );
+                /*
       cube_sky_tmp = sinfo_subImageFromCube (cube_sky, im_dark);
-       */
+                 */
 
-    } else {
-       check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
-    }
-    check_nomsg(list_sky_tmp=cpl_imagelist_duplicate(list_sky));
+            } else {
+                check_nomsg(list_sky_tmp = cpl_imagelist_duplicate(list_sky));
+            }
+            check_nomsg(list_sky_tmp=cpl_imagelist_duplicate(list_sky));
 
-    check(list_sky = sinfo_align_cube_to_reference (list_sky_tmp,
+            check(list_sky = sinfo_align_cube_to_reference (list_sky_tmp,
                             ref_im1,
                             cfg->sfOrder,
                             cfg->sfType),
-      "sinfo_alignCubeToReference failed" );
-
-    check_nomsg(cpl_imagelist_delete(list_sky_tmp));
-  }
-  if (cfg->contains_dither == 1 && cfg->contains_sky == 1) {
-    if (cfg->contains_dark == 1) {
-      check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
-      check(cpl_imagelist_subtract_image(list_dither_sky_tmp,im_dark),
-        "sinfo_average_with_rejection failed" );
-       /*
+                  "sinfo_alignCubeToReference failed" );
+
+            check_nomsg(cpl_imagelist_delete(list_sky_tmp));
+        }
+        if (cfg->contains_dither == 1 && cfg->contains_sky == 1) {
+            if (cfg->contains_dark == 1) {
+                check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
+                check(cpl_imagelist_subtract_image(list_dither_sky_tmp,im_dark),
+                      "sinfo_average_with_rejection failed" );
+                /*
        cube_dither_sky_tmp = sinfo_subImageFromCube (cube_dither_sky, im_dark);
-       */
-
-    } else {
-      check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
-    }
-    sinfo_free_imagelist(&list_dither_sky);
-
-    check(list_dither_sky=sinfo_align_cube_to_reference(list_dither_sky_tmp,
-                                ref_im2,
-                                cfg->sfOrder,
-                                cfg->sfType),
-      "sinfo_alignCubeToReference failed" );
-
-    sinfo_free_imagelist(&list_dither_sky_tmp);
-  }
-  sinfo_free_image(&ref_im1);
-  if (cfg->contains_dither == 1) {
-    sinfo_free_image(&ref_im2);
-  }
-  if (cfg->contains_dark == 1) {
-    sinfo_free_image(&im_dark);
-  }
-
-  } /* end if over sfInd */
+                 */
 
-  /* subtracts the master dark from different frames if present */
-  if(cfg->mdark_ind==1){
-    sinfo_msg("Subtract master dark %s ",cfg->mdark);
+            } else {
+                check_nomsg(list_dither_sky_tmp=cpl_imagelist_duplicate(list_dither_sky));
+            }
+            sinfo_free_imagelist(&list_dither_sky);
 
-    check_nomsg(mdark=cpl_image_load(cfg->mdark,CPL_TYPE_FLOAT,0,0));
-    if (list_object !=NULL) {
-      cpl_imagelist_subtract_image (list_object, mdark);
-    }
-    if (list_sky !=NULL) {
-      cpl_imagelist_subtract_image (list_sky, mdark);
+            check(list_dither_sky=sinfo_align_cube_to_reference(list_dither_sky_tmp,
+                            ref_im2,
+                            cfg->sfOrder,
+                            cfg->sfType),
+                  "sinfo_alignCubeToReference failed" );
+
+            sinfo_free_imagelist(&list_dither_sky_tmp);
+        }
+        sinfo_free_image(&ref_im1);
+        if (cfg->contains_dither == 1) {
+            sinfo_free_image(&ref_im2);
+        }
+        if (cfg->contains_dark == 1) {
+            sinfo_free_image(&im_dark);
+        }
+
+    } /* end if over sfInd */
+
+    /* subtracts the master dark from different frames if present */
+    if(cfg->mdark_ind==1){
+        sinfo_msg("Subtract master dark %s ",cfg->mdark);
+
+        check_nomsg(mdark=cpl_image_load(cfg->mdark,CPL_TYPE_FLOAT,0,0));
+        if (list_object !=NULL) {
+            cpl_imagelist_subtract_image (list_object, mdark);
+        }
+        if (list_sky !=NULL) {
+            cpl_imagelist_subtract_image (list_sky, mdark);
+        }
+        sinfo_free_image(&mdark);
     }
-    sinfo_free_image(&mdark);
-  }
-  /* take the average with rejection of the different cubes */
-  sinfo_msg("Take the average of the different cubes");
-
-  if (cfg->loReject*cfg->nobj < 1. && cfg->hiReject * cfg->nobj < 1.) {
-    check(im_obj = cpl_imagelist_collapse_create(list_object),
-      "Average with rejection failed" );
-  } else {
-
-    check_nomsg(no=cpl_imagelist_get_size(list_object));
-    lo_cut=(floor)( cfg->loReject*no+0.5);
-    hi_cut=(floor)( cfg->hiReject*no+0.5);
-    check(im_obj=cpl_imagelist_collapse_minmax_create(list_object,
-                 lo_cut,hi_cut),"Average with rejection failed" );
+    /* take the average with rejection of the different cubes */
+    sinfo_msg("Take the average of the different cubes");
 
-  }
-  sinfo_free_imagelist(&list_object);
-
-  if (cfg->contains_sky == 1) {
-    if (cfg->loReject*nsky < 1. && cfg->hiReject*nsky < 1.) {
-      /* here might explode in dither mode */
-      cknull(im_sky = cpl_imagelist_collapse_create( list_sky ),
-         "Average with rejection failed");
+    if (cfg->loReject*cfg->nobj < 1. && cfg->hiReject * cfg->nobj < 1.) {
+        check(im_obj = cpl_imagelist_collapse_create(list_object),
+                        "Average with rejection failed" );
     } else {
 
-      check_nomsg(no=cpl_imagelist_get_size(list_sky));
-      lo_cut=(floor)( cfg->loReject*no+0.5);
-      hi_cut=(floor)( cfg->hiReject*no+0.5);
-      check(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),
-         "Average with rejection failed");
-    }
-    sinfo_free_imagelist(&list_sky);
-  }
+        check_nomsg(no=cpl_imagelist_get_size(list_object));
+        lo_cut=(floor)( cfg->loReject*no+0.5);
+        hi_cut=(floor)( cfg->hiReject*no+0.5);
+        check(im_obj=cpl_imagelist_collapse_minmax_create(list_object,
+                        lo_cut,hi_cut),"Average with rejection failed" );
 
-  if (cfg->contains_dither == 1) {
-    if (cfg->loReject*nobjdith < 1. && cfg->hiReject*nobjdith < 1.) {
-      check(im_dither = cpl_imagelist_collapse_create( list_dither_object ),
-        "Average with rejection failed");
-    } else {
-
-      check_nomsg(no=cpl_imagelist_get_size(list_dither_object));
-      lo_cut=(floor)( cfg->loReject*no+0.5);
-      hi_cut=(floor)( cfg->hiReject*no+0.5);
-      check(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,
-                               lo_cut,hi_cut),
-        "Average with rejection failed");
+    }
+    sinfo_free_imagelist(&list_object);
 
+    if (cfg->contains_sky == 1) {
+        if (cfg->loReject*nsky < 1. && cfg->hiReject*nsky < 1.) {
+            /* here might explode in dither mode */
+            cknull(im_sky = cpl_imagelist_collapse_create( list_sky ),
+                            "Average with rejection failed");
+        } else {
+
+            check_nomsg(no=cpl_imagelist_get_size(list_sky));
+            lo_cut=(floor)( cfg->loReject*no+0.5);
+            hi_cut=(floor)( cfg->hiReject*no+0.5);
+            check(im_sky=cpl_imagelist_collapse_minmax_create(list_sky,lo_cut,hi_cut),
+                  "Average with rejection failed");
+        }
+        sinfo_free_imagelist(&list_sky);
     }
-    sinfo_free_imagelist(&list_dither_object);
-  }
 
-  if (cfg->contains_dither == 1 && nskydith > 0) {
-    if (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {
-      check(im_dither_sky = cpl_imagelist_collapse_create( list_dither_sky ),
-        "Average with rejection failed");
-    } else {
+    if (cfg->contains_dither == 1) {
+        if (cfg->loReject*nobjdith < 1. && cfg->hiReject*nobjdith < 1.) {
+            check(im_dither = cpl_imagelist_collapse_create( list_dither_object ),
+                            "Average with rejection failed");
+        } else {
+
+            check_nomsg(no=cpl_imagelist_get_size(list_dither_object));
+            lo_cut=(floor)( cfg->loReject*no+0.5);
+            hi_cut=(floor)( cfg->hiReject*no+0.5);
+            check(im_dither=cpl_imagelist_collapse_minmax_create(list_dither_object,
+                            lo_cut,hi_cut),
+                  "Average with rejection failed");
+
+        }
+        sinfo_free_imagelist(&list_dither_object);
+    }
 
-      check_nomsg(no=cpl_imagelist_get_size(list_dither_sky));
-      lo_cut=(floor)( cfg->loReject*no+0.5);
-      hi_cut=(floor)( cfg->hiReject*no+0.5);
-      check(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,
-                                   lo_cut,hi_cut),
-        "Average with rejection failed");
+    if (cfg->contains_dither == 1 && nskydith > 0) {
+        if (cfg->loReject*nskydith < 1. && cfg->hiReject*nskydith < 1.) {
+            check(im_dither_sky = cpl_imagelist_collapse_create( list_dither_sky ),
+                            "Average with rejection failed");
+        } else {
+
+            check_nomsg(no=cpl_imagelist_get_size(list_dither_sky));
+            lo_cut=(floor)( cfg->loReject*no+0.5);
+            hi_cut=(floor)( cfg->hiReject*no+0.5);
+            check(im_dither_sky=cpl_imagelist_collapse_minmax_create(list_dither_sky,
+                            lo_cut,hi_cut),
+                  "Average with rejection failed");
+        }
+        sinfo_free_imagelist(&list_dither_sky);
     }
-    sinfo_free_imagelist(&list_dither_sky);
-  }
 
-  /*
+    /*
   #---------------------------------------------------------
   # Subtract the resulting off-frame (sky) from the on-frame
   #-------------------------------------------------------
   # finally, subtract off from on frames and store the result
   # in the object cube
-  */
-
-  if(sub_raw_sky == 1 ) {
-    if (cfg->contains_sky == 1) {
-      sinfo_msg("Subtract the off-frame (sky) from the on-frame");
-      check_nomsg(im_obj_sub = cpl_image_duplicate(im_obj));
-      check(cpl_image_subtract(im_obj_sub, im_sky),
-	    "could not sinfo_sub_image");
-
-      sinfo_free_image(&im_obj);
-      if (((cfg->contains_dither == 1) && (nskydith > 0)) ||
-          cfg->contains_dither == 0) {
-	sinfo_free_image(&im_sky);
-	im_obj = cpl_image_duplicate(im_obj_sub);
-      }
-    }
+     */
 
-    if (cfg->contains_dither == 1 && nskydith > 0) {
-      check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
-      check(cpl_image_subtract(im_dither_sub, im_dither_sky),
-	    "could not sinfo_sub_image");
-
-      sinfo_free_image(&im_dither);
-      sinfo_free_image(&im_dither_sky);
-      im_dither = cpl_image_duplicate(im_dither_sub);
-
-    } else if (cfg->contains_dither == 1 &&
-	       nskydith == 0 &&
-	       cfg->contains_sky == 1) {
-      check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
-      check(cpl_image_subtract(im_dither_sub, im_sky),
-	    "could not sinfo_sub_image");
-
-      sinfo_free_image(&im_dither);
-      sinfo_free_image(&im_sky);
-      im_dither = cpl_image_duplicate(im_dither_sub);
+    if(sub_raw_sky == 1 ) {
+        if (cfg->contains_sky == 1) {
+            sinfo_msg("Subtract the off-frame (sky) from the on-frame");
+            check_nomsg(im_obj_sub = cpl_image_duplicate(im_obj));
+            check(cpl_image_subtract(im_obj_sub, im_sky),
+                  "could not sinfo_sub_image");
+
+            sinfo_free_image(&im_obj);
+            if (((cfg->contains_dither == 1) && (nskydith > 0)) ||
+                            cfg->contains_dither == 0) {
+                sinfo_free_image(&im_sky);
+                im_obj = cpl_image_duplicate(im_obj_sub);
+            }
+        }
+
+        if (cfg->contains_dither == 1 && nskydith > 0) {
+            check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
+            check(cpl_image_subtract(im_dither_sub, im_dither_sky),
+                  "could not sinfo_sub_image");
+
+            sinfo_free_image(&im_dither);
+            sinfo_free_image(&im_dither_sky);
+            im_dither = cpl_image_duplicate(im_dither_sub);
+
+        } else if (cfg->contains_dither == 1 &&
+                        nskydith == 0 &&
+                        cfg->contains_sky == 1) {
+            check_nomsg(im_dither_sub = cpl_image_duplicate(im_dither));
+            check(cpl_image_subtract(im_dither_sub, im_sky),
+                  "could not sinfo_sub_image");
+
+            sinfo_free_image(&im_dither);
+            sinfo_free_image(&im_sky);
+            im_dither = cpl_image_duplicate(im_dither_sub);
+        }
     }
-  }
 
-  /*
+    /*
   #---------------------------------------------------------
   # Flatfielding
   #---------------------------------------------------------
-  */
-
-  if (cfg->flatInd == 1) {
-    sinfo_msg("Flatfielding");
-    check(flat1 = cpl_image_load (cfg->flatfield1,CPL_TYPE_FLOAT,0,0),
-      "could not load flatfield image" );
-
-    if(mflat_norm_smooth) {
-
-      //We normalize the flat by a smoothed flat
-      cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,smooth_rad),
-	     "could not smooth flatfield" );
-      check_nomsg(cpl_image_divide(flat1,flat_smooth));
-      sinfo_free_image(&flat_smooth);
-    }
+     */
 
-    cknull(im_obj_flat = sinfo_new_div_images_robust( im_obj, flat1),
-       "could not carry out flatfield division" );
-
-    /* AMO ** */
-    if(pdensity > 1) {
-      if (frm_ind == 0) {
-	if (cfg->warpfixInd == 1){
-	  sinfo_msg("Correct FF for distortions");
-	  /* AMO check */
-	  cknull_nomsg(flat1_dist=sinfo_new_image_warp_fits(flat1,cfg->kernel,
-							    cfg->polyFile));
-
-	  ck0(sinfo_pro_save_ima(flat1_dist,raw,sof,
-				 STACK_MFLAT_DIST_OUT_FILENAME,
-				 PRO_STACK_MFLAT_DIST,NULL,plugin_id,config),
-	      "cannot save ima %s", STACK_MFLAT_DIST_OUT_FILENAME);
-	  sinfo_free_image(&flat1_dist);
-	}
-      }
-    }
-    sinfo_free_image(&flat1);
-    sinfo_free_image(&im_obj);
-    im_obj = cpl_image_duplicate(im_obj_flat);
-
-    if(pdensity > 1) {
-      if (cfg->contains_dither == 1) {
-	check(flat2 = cpl_image_load (cfg->flatfield2,CPL_TYPE_FLOAT,0,0),
-	      "could not load flatfield image" );
-
-	if(mflat_norm_smooth) {
-
-	  //We normalize the flat by a smoothed flat
-	  cknull(flat_smooth = sinfo_image_smooth_median_y(flat2,smooth_rad),
-		 "could not smooth flatfield" );
-	  check_nomsg(cpl_image_divide(flat2,flat_smooth));
-	  sinfo_free_image(&flat_smooth);
-
-	}
-
-
-	cknull(im_dither_flat = sinfo_new_div_images_robust( im_dither, flat2),
-	       "could not carry out flatfield division" );
-
-	if (frm_ind == 0) {
-	  if (cfg->warpfixInd == 1) {
-	    sinfo_msg("Correct FF for distortions");
-	    flat2_dist = sinfo_new_image_warp_fits(flat2,
-						   cfg->kernel, cfg->polyFile);
-
-	    ck0(sinfo_pro_save_ima(flat2_dist,raw,sof,
-				   STACK_MFLAT_DITHER_DIST_OUT_FILENAME,
-				   PRO_STACK_MFLAT_DITHER_DIST,
-				   NULL,plugin_id,config),
-		"cannot save ima %s", STACK_MFLAT_DITHER_DIST_OUT_FILENAME);
-	    sinfo_free_image(&flat2_dist);
-	  }
-	}
-	sinfo_free_image(&flat2);
-	sinfo_free_image(&im_dither);
-	im_dither = cpl_image_duplicate(im_dither_flat);
-      }
+    if (cfg->flatInd == 1) {
+        sinfo_msg("Flatfielding");
+        check(flat1 = cpl_image_load (cfg->flatfield1,CPL_TYPE_FLOAT,0,0),
+              "could not load flatfield image" );
+
+        if(mflat_norm_smooth) {
+
+            //We normalize the flat by a smoothed flat
+            cknull(flat_smooth = sinfo_image_smooth_median_y(flat1,smooth_rad),
+                            "could not smooth flatfield" );
+            check_nomsg(cpl_image_divide(flat1,flat_smooth));
+            sinfo_free_image(&flat_smooth);
+        }
+
+        cknull(im_obj_flat = sinfo_new_div_images_robust( im_obj, flat1),
+               "could not carry out flatfield division" );
+
+        /* AMO ** */
+        if(pdensity > 1) {
+            if (frm_ind == 0) {
+                if (cfg->warpfixInd == 1){
+                    sinfo_msg("Correct FF for distortions");
+                    /* AMO check */
+                    cknull_nomsg(flat1_dist=sinfo_new_image_warp_fits(flat1,cfg->kernel,
+                                    cfg->polyFile));
+
+                    ck0(sinfo_pro_save_ima(flat1_dist,raw,sof,
+                                    STACK_MFLAT_DIST_OUT_FILENAME,
+                                    PRO_STACK_MFLAT_DIST,NULL,plugin_id,config),
+                        "cannot save ima %s", STACK_MFLAT_DIST_OUT_FILENAME);
+                    sinfo_free_image(&flat1_dist);
+                }
+            }
+        }
+        sinfo_free_image(&flat1);
+        sinfo_free_image(&im_obj);
+        im_obj = cpl_image_duplicate(im_obj_flat);
+
+        if(pdensity > 1) {
+            if (cfg->contains_dither == 1) {
+                check(flat2 = cpl_image_load (cfg->flatfield2,CPL_TYPE_FLOAT,0,0),
+                                "could not load flatfield image" );
+
+                if(mflat_norm_smooth) {
+
+                    //We normalize the flat by a smoothed flat
+                    cknull(flat_smooth = sinfo_image_smooth_median_y(flat2,smooth_rad),
+                                    "could not smooth flatfield" );
+                    check_nomsg(cpl_image_divide(flat2,flat_smooth));
+                    sinfo_free_image(&flat_smooth);
+
+                }
+
+
+                cknull(im_dither_flat = sinfo_new_div_images_robust( im_dither, flat2),
+                       "could not carry out flatfield division" );
+
+                if (frm_ind == 0) {
+                    if (cfg->warpfixInd == 1) {
+                        sinfo_msg("Correct FF for distortions");
+                        flat2_dist = sinfo_new_image_warp_fits(flat2,
+                                        cfg->kernel, cfg->polyFile);
+
+                        ck0(sinfo_pro_save_ima(flat2_dist,raw,sof,
+                                        STACK_MFLAT_DITHER_DIST_OUT_FILENAME,
+                                        PRO_STACK_MFLAT_DITHER_DIST,
+                                        NULL,plugin_id,config),
+                            "cannot save ima %s", STACK_MFLAT_DITHER_DIST_OUT_FILENAME);
+                        sinfo_free_image(&flat2_dist);
+                    }
+                }
+                sinfo_free_image(&flat2);
+                sinfo_free_image(&im_dither);
+                im_dither = cpl_image_duplicate(im_dither_flat);
+            }
+        }
     }
-  }
 
-  /*
+    /*
   #---------------------------------------------------------
   # static bad pixel correction
   #---------------------------------------------------------
-   */
-
-  if (cfg->maskInd == 1) {
-    sinfo_msg("Static bad pixel correction");
-    check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-      "could not load static bad pixel mask" );
-
-    ck0(sinfo_new_change_mask(mask_im, im_obj),
-    "sinfo_changeMask failed" );
-
-    if (cfg->indind == 0) {
-      /* open the ASCII list of the slitlet positions */
-      /*READ TFITS TABLE*/
-      strcpy(file_name,cfg->slitposList);
-      check(tbl_slitpos = cpl_table_load(file_name,1,0),
-        "error loading slitpos tbl %s ",file_name);
-      if(cpl_table_has_column(tbl_slitpos,"pos1") != 1) {
-        sinfo_msg_error("Column 'pos1' not found in %s table %s",
-                      PRO_SLIT_POS,file_name);
-    goto cleanup;
-      }
-      if(cpl_table_has_column(tbl_slitpos,"pos2") != 1) {
-        sinfo_msg_error("Column 'pos2' not found in %s table %s",
-                      PRO_SLIT_POS,file_name);
-    goto cleanup;
-      }
-
-      check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-      cknull_nomsg(slit_edges = sinfo_new_2Dfloatarray(n, 2));
-      for (i =0 ; i< n; i++){
-     check_nomsg(val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status));
-    check_nomsg(val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status));
-    check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_x,i,0));
-    check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_y,i,1));
-      }
-
-      sinfo_free_table(&tbl_slitpos);
-      cknull(int_im = sinfo_interpol_source_image (im_obj,
-                         mask_im,
-                         cfg->maxRad,
-                         slit_edges),
-     "could not carry out sinfo_interpolSourceImage" );
-
-      sinfo_free_image(&im_obj);
-      im_obj = cpl_image_duplicate(int_im);
-
-     if (cfg->contains_dither == 1) {
-       cknull(int_im_dith = sinfo_interpol_source_image (im_dither,
-                               mask_im,
-                               cfg->maxRad,
-                               slit_edges),
-          "could not carry out sinfo_interpolSourceImage" );
-
-       sinfo_free_image(&im_dither);
-       im_dither = cpl_image_duplicate(int_im_dith);
-     }
-     sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-    } else {
-      cknull(int_im = sinfo_new_mult_image_by_mask(im_obj, mask_im),
-         "could not carry out sinfo_multImageByMask" );
-
-      sinfo_free_image(&im_obj);
-      im_obj = cpl_image_duplicate(int_im);
-      if (cfg->contains_dither == 1) {
-    cknull(int_im_dith=sinfo_new_mult_image_by_mask(im_dither, mask_im),
-           "could not carry out sinfo_multImageByMask" );
+     */
 
-    sinfo_free_image(&im_dither);
-    im_dither = cpl_image_duplicate(int_im_dith);
-      }
+    if (cfg->maskInd == 1) {
+        sinfo_msg("Static bad pixel correction");
+        check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
+              "could not load static bad pixel mask" );
+
+        ck0(sinfo_new_change_mask(mask_im, im_obj),
+            "sinfo_changeMask failed" );
+
+        if (cfg->indind == 0) {
+            /* open the ASCII list of the slitlet positions */
+            /*READ TFITS TABLE*/
+            strcpy(file_name,cfg->slitposList);
+            check(tbl_slitpos = cpl_table_load(file_name,1,0),
+                  "error loading slitpos tbl %s ",file_name);
+            if(cpl_table_has_column(tbl_slitpos,"pos1") != 1) {
+                sinfo_msg_error("Column 'pos1' not found in %s table %s",
+                                PRO_SLIT_POS,file_name);
+                goto cleanup;
+            }
+            if(cpl_table_has_column(tbl_slitpos,"pos2") != 1) {
+                sinfo_msg_error("Column 'pos2' not found in %s table %s",
+                                PRO_SLIT_POS,file_name);
+                goto cleanup;
+            }
+
+            check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
+            cknull_nomsg(slit_edges = sinfo_new_2Dfloatarray(n, 2));
+            for (i =0 ; i< n; i++){
+                check_nomsg(val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status));
+                check_nomsg(val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status));
+                check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_x,i,0));
+                check_nomsg(sinfo_new_array2D_set_value(slit_edges,val_y,i,1));
+            }
+
+            sinfo_free_table(&tbl_slitpos);
+            cknull(int_im = sinfo_interpol_source_image (im_obj,
+                            mask_im,
+                            cfg->maxRad,
+                            slit_edges),
+                   "could not carry out sinfo_interpolSourceImage" );
+
+            sinfo_free_image(&im_obj);
+            im_obj = cpl_image_duplicate(int_im);
+
+            if (cfg->contains_dither == 1) {
+                cknull(int_im_dith = sinfo_interpol_source_image (im_dither,
+                                mask_im,
+                                cfg->maxRad,
+                                slit_edges),
+                                "could not carry out sinfo_interpolSourceImage" );
+
+                sinfo_free_image(&im_dither);
+                im_dither = cpl_image_duplicate(int_im_dith);
+            }
+            sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
+        } else {
+            cknull(int_im = sinfo_new_mult_image_by_mask(im_obj, mask_im),
+                            "could not carry out sinfo_multImageByMask" );
+
+            sinfo_free_image(&im_obj);
+            im_obj = cpl_image_duplicate(int_im);
+            if (cfg->contains_dither == 1) {
+                cknull(int_im_dith=sinfo_new_mult_image_by_mask(im_dither, mask_im),
+                                "could not carry out sinfo_multImageByMask" );
+
+                sinfo_free_image(&im_dither);
+                im_dither = cpl_image_duplicate(int_im_dith);
+            }
+        }
+        sinfo_free_image(&mask_im);
     }
-    sinfo_free_image(&mask_im);
-  }
 
-  /*
+    /*
   #---------------------------------------------------------
   # static bad pixel correction BEZIER
   #---------------------------------------------------------
-  */
-
-  if (cfg->maskInd == 2){
-    sinfo_msg("Static bad pixel correction BEZIER");
-    check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-      "could not load static bad pixel mask" );
-
-    ck0(sinfo_new_change_mask(mask_im, im_obj),
-    "sinfo_changeMask failed" );
-
-    /* #open the FITS table of the slitlet positions-*/
-    strcpy(file_name,cfg->slitposList);
-    check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
-
-    check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-    slit_edges = sinfo_new_2Dfloatarray(n, 2);
-
-    for (i =0 ; i< n; i++){
-      val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status);
-      val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status);
-      sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
-      sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
-    }
-    sinfo_free_table(&tbl_slitpos);
-
-    strcpy(file_name,cfg->indexlist);
-
-    check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
-
-    check_nomsg(n = cpl_table_get_nrow(tbl_index));
-
-    cknull_nomsg(in_nam = (char**) cpl_calloc(n,sizeof(char*)));
-
-    for (i =0 ; i< n; i++){
-      strcpy(in_nam[i],cpl_table_get_string(tbl_index,"name",i));
-    }
-    sinfo_free_table(&tbl_index);
-
-    for (i=0;i<cnt;i++) {
-      if (strcmp("ICube.fits", name) != 0){
-    check_nomsg(iCube=cpl_imagelist_load ("ICube.fits",CPL_TYPE_FLOAT,0));
-      }
-      else if (strcmp("JCube.fits", name) != 0) {
-    check_nomsg(jCube = cpl_imagelist_load ("JCube.fits",CPL_TYPE_FLOAT,0));
-      }
-      else if (strcmp("X.fits",  name) != 0) {
-    check_nomsg(X=cpl_image_load("X.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("Y.fits",  name) != 0) {
-    check_nomsg(Y=cpl_image_load("Y.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("Z.fits",  name) != 0) {
-    check_nomsg(Z=cpl_image_load("Z.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("cX.fits", name) != 0) {
-    check_nomsg(hX=cpl_image_load("cX.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else {
-    sinfo_msg_error("wrong name in index list or needed file not there!");
-    goto cleanup;
-      }
-    }
-    lookup = sinfo_new_lookup();
-
-    lookup->id=iCube;
-    lookup->jd=jCube;
-    lookup->X=X;
-    lookup->Y=Y;
-    lookup->Z=Z;
-    lookup->hX=hX;
-
-
-    cknull(im_obj=sinfo_new_c_bezier_interpolate_image(im_obj,
-                                                       mask_im,
-                                                       lookup,
-                               cfg->maxRad,
-                               cfg->maxRad,
-                                                       cfg->maxRad,
-                                                       2,
-                                                       slit_edges),
-       "could not carry out sinfo_new_c_bezier_interpolate_image" );
-
-
-    cknull(im_obj=sinfo_new_c_bezier_find_bad( im_obj,
-                           mask_im,
-                           cfg->maxRad,
-                           cfg->maxRad,
-                           cfg->maxRad,
-                           0,
-                           cpl_image_get_size_x(im_obj),
-                           0,
-                           cpl_image_get_size_y(im_obj),
-                           cfg->sigmaFactor),
-       "could not carry out sinfo_new_c_bezier_find_bad" );
-
-
-    if (cfg->contains_dither == 1) {
-         cknull(im_dither=sinfo_new_c_bezier_interpolate_image(im_dither,
-                                   mask_im,
-                                   lookup,
-                                   cfg->maxRad,
-                                   cfg->maxRad,
-                                   cfg->maxRad,
-                                                               2,
-                                                               slit_edges),
-    "could not carry out new_c_bezier_Interpolate_Image on dithered frame" );
-
-     cknull(im_dither=sinfo_new_c_bezier_find_bad(im_dither,
-                              mask_im,
-                              cfg->maxRad,
-                              cfg->maxRad,
-                              cfg->maxRad,
-                              0,
-                              cpl_image_get_size_x(im_obj),
-                              0,
-                              cpl_image_get_size_y(im_obj),
-                              cfg->sigmaFactor),
-        "could not carry out new_c_bezier_find_bad on dithered frame");
-
-    }
-    sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-    sinfo_free_image(&mask_im);
-    sinfo_free_imagelist(&iCube);
-    sinfo_free_imagelist(&jCube);
-    sinfo_free_image(&lookup->X);
-    sinfo_free_image(&lookup->X);
-    sinfo_free_image(&lookup->Y);
-    sinfo_free_image(&lookup->hX);
-    sinfo_new_destroy_lookup(lookup);
-  }
-
-  if (cfg->maskInd == 3) {
-    cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
-       "could not load static bad pixel mask" );
-
-    /* #open the ASCII list of the slitlet positions-- */
-    strcpy(file_name,cfg->slitposList);
-    check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
-    if(cpl_table_has_column(tbl_slitpos,"pos1") != 1) {
-      sinfo_msg_error("Column 'pos1' not found in %s table %s",
-                      PRO_SLIT_POS,file_name);
-      goto cleanup;
-    }
-
-    if(cpl_table_has_column(tbl_slitpos,"pos2") != 1) {
-       sinfo_msg_error("Column 'pos2' not found in %s table %s",
-                      PRO_SLIT_POS,file_name);
-       goto cleanup;
-    }
-
-    check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
-    slit_edges = sinfo_new_2Dfloatarray(n, 2);
-
-    for (i =0 ; i< n; i++) {
-      val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status);
-      val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status);
-      sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
-      sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
-    }
-    sinfo_free_table(&tbl_slitpos);
-
-    strcpy(file_name,cfg->indexlist);
-    check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
-    check_nomsg(n = cpl_table_get_nrow(tbl_index));
-    cknull_nomsg(in_nam = (char**) cpl_calloc(n,sizeof(char*)));
+     */
 
-    for (i =0 ; i< n; i++){
-       strcpy(in_nam[i],cpl_table_get_string(tbl_index,"name",i));
+    if (cfg->maskInd == 2){
+        sinfo_msg("Static bad pixel correction BEZIER");
+        check(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
+              "could not load static bad pixel mask" );
+
+        ck0(sinfo_new_change_mask(mask_im, im_obj),
+            "sinfo_changeMask failed" );
+
+        /* #open the FITS table of the slitlet positions-*/
+        strcpy(file_name,cfg->slitposList);
+        check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
+
+        check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
+        slit_edges = sinfo_new_2Dfloatarray(n, 2);
+
+        for (i =0 ; i< n; i++){
+            val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status);
+            val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status);
+            sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
+            sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
+        }
+        sinfo_free_table(&tbl_slitpos);
+
+        strcpy(file_name,cfg->indexlist);
+
+        check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
+
+        check_nomsg(n = cpl_table_get_nrow(tbl_index));
+
+        cknull_nomsg(in_nam = (char**) cpl_calloc(n,sizeof(char*)));
+
+        for (i =0 ; i< n; i++){
+            strcpy(in_nam[i],cpl_table_get_string(tbl_index,"name",i));
+        }
+        sinfo_free_table(&tbl_index);
+
+        for (i=0;i<cnt;i++) {
+            if (strcmp("ICube.fits", name) != 0){
+                check_nomsg(iCube=cpl_imagelist_load ("ICube.fits",CPL_TYPE_FLOAT,0));
+            }
+            else if (strcmp("JCube.fits", name) != 0) {
+                check_nomsg(jCube = cpl_imagelist_load ("JCube.fits",CPL_TYPE_FLOAT,0));
+            }
+            else if (strcmp("X.fits",  name) != 0) {
+                check_nomsg(X=cpl_image_load("X.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("Y.fits",  name) != 0) {
+                check_nomsg(Y=cpl_image_load("Y.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("Z.fits",  name) != 0) {
+                check_nomsg(Z=cpl_image_load("Z.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("cX.fits", name) != 0) {
+                check_nomsg(hX=cpl_image_load("cX.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else {
+                sinfo_msg_error("wrong name in index list or needed file not there!");
+                goto cleanup;
+            }
+        }
+        lookup = sinfo_new_lookup();
+
+        lookup->id=iCube;
+        lookup->jd=jCube;
+        lookup->X=X;
+        lookup->Y=Y;
+        lookup->Z=Z;
+        lookup->hX=hX;
+
+
+        cknull(im_obj=sinfo_new_c_bezier_interpolate_image(im_obj,
+                        mask_im,
+                        lookup,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        2,
+                        slit_edges),
+               "could not carry out sinfo_new_c_bezier_interpolate_image" );
+
+
+        cknull(im_obj=sinfo_new_c_bezier_find_bad( im_obj,
+                        mask_im,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        0,
+                        cpl_image_get_size_x(im_obj),
+                        0,
+                        cpl_image_get_size_y(im_obj),
+                        cfg->sigmaFactor),
+               "could not carry out sinfo_new_c_bezier_find_bad" );
+
+
+        if (cfg->contains_dither == 1) {
+            cknull(im_dither=sinfo_new_c_bezier_interpolate_image(im_dither,
+                            mask_im,
+                            lookup,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            2,
+                            slit_edges),
+                            "could not carry out new_c_bezier_Interpolate_Image on dithered frame" );
+
+            cknull(im_dither=sinfo_new_c_bezier_find_bad(im_dither,
+                            mask_im,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            0,
+                            cpl_image_get_size_x(im_obj),
+                            0,
+                            cpl_image_get_size_y(im_obj),
+                            cfg->sigmaFactor),
+                   "could not carry out new_c_bezier_find_bad on dithered frame");
+
+        }
+        sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
+        sinfo_free_image(&mask_im);
+        sinfo_free_imagelist(&iCube);
+        sinfo_free_imagelist(&jCube);
+        sinfo_free_image(&lookup->X);
+        sinfo_free_image(&lookup->X);
+        sinfo_free_image(&lookup->Y);
+        sinfo_free_image(&lookup->hX);
+        sinfo_new_destroy_lookup(lookup);
     }
-    sinfo_free_table(&tbl_index);
 
-    for (i=0;i<cnt;i++){
-      if (strcmp("ICube.fits", in_nam[i]) != 0){
-       check_nomsg(iCube=cpl_imagelist_load("ICube.fits",CPL_TYPE_FLOAT,0));
-      }
-      else if (strcmp("JCube.fits", in_nam[i]) != 0){
-      check_nomsg(jCube=cpl_imagelist_load("JCube.fits",CPL_TYPE_FLOAT,0));
-      }
-      else if (strcmp("X.fits", in_nam[i]) != 0){
-    check_nomsg(X=cpl_image_load("X.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("Y.fits", in_nam[i]) != 0){
-    check_nomsg(Y=cpl_image_load("Y.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("Z.fits", in_nam[i]) != 0){
-    check_nomsg(Z=cpl_image_load("Z.fits",CPL_TYPE_FLOAT,0,0));
-      }
-      else if (strcmp("cX.fits", in_nam[i]) != 0) {
-    check_nomsg(hX=cpl_image_load("cX.fits",CPL_TYPE_FLOAT,0,0));
-      } else {
-     sinfo_msg_error("wrong name in index list or needed file not there!");
-     goto cleanup;
-      }
+    if (cfg->maskInd == 3) {
+        cknull(mask_im = cpl_image_load(cfg->mask,CPL_TYPE_FLOAT,0,0),
+                        "could not load static bad pixel mask" );
+
+        /* #open the ASCII list of the slitlet positions-- */
+        strcpy(file_name,cfg->slitposList);
+        check_nomsg(tbl_slitpos = cpl_table_load(file_name,1,0));
+        if(cpl_table_has_column(tbl_slitpos,"pos1") != 1) {
+            sinfo_msg_error("Column 'pos1' not found in %s table %s",
+                            PRO_SLIT_POS,file_name);
+            goto cleanup;
+        }
+
+        if(cpl_table_has_column(tbl_slitpos,"pos2") != 1) {
+            sinfo_msg_error("Column 'pos2' not found in %s table %s",
+                            PRO_SLIT_POS,file_name);
+            goto cleanup;
+        }
+
+        check_nomsg(n = cpl_table_get_nrow(tbl_slitpos));
+        slit_edges = sinfo_new_2Dfloatarray(n, 2);
+
+        for (i =0 ; i< n; i++) {
+            val_x=cpl_table_get_double(tbl_slitpos,"pos1",i,&status);
+            val_y=cpl_table_get_double(tbl_slitpos,"pos2",i,&status);
+            sinfo_new_array2D_set_value(slit_edges,val_x,i,0);
+            sinfo_new_array2D_set_value(slit_edges,val_y,i,1);
+        }
+        sinfo_free_table(&tbl_slitpos);
+
+        strcpy(file_name,cfg->indexlist);
+        check_nomsg(tbl_index = cpl_table_load(file_name,1,0));
+        check_nomsg(n = cpl_table_get_nrow(tbl_index));
+        cknull_nomsg(in_nam = (char**) cpl_calloc(n,sizeof(char*)));
+
+        for (i =0 ; i< n; i++){
+            strcpy(in_nam[i],cpl_table_get_string(tbl_index,"name",i));
+        }
+        sinfo_free_table(&tbl_index);
+
+        for (i=0;i<cnt;i++){
+            if (strcmp("ICube.fits", in_nam[i]) != 0){
+                check_nomsg(iCube=cpl_imagelist_load("ICube.fits",CPL_TYPE_FLOAT,0));
+            }
+            else if (strcmp("JCube.fits", in_nam[i]) != 0){
+                check_nomsg(jCube=cpl_imagelist_load("JCube.fits",CPL_TYPE_FLOAT,0));
+            }
+            else if (strcmp("X.fits", in_nam[i]) != 0){
+                check_nomsg(X=cpl_image_load("X.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("Y.fits", in_nam[i]) != 0){
+                check_nomsg(Y=cpl_image_load("Y.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("Z.fits", in_nam[i]) != 0){
+                check_nomsg(Z=cpl_image_load("Z.fits",CPL_TYPE_FLOAT,0,0));
+            }
+            else if (strcmp("cX.fits", in_nam[i]) != 0) {
+                check_nomsg(hX=cpl_image_load("cX.fits",CPL_TYPE_FLOAT,0,0));
+            } else {
+                sinfo_msg_error("wrong name in index list or needed file not there!");
+                goto cleanup;
+            }
+        }
+        lookup = sinfo_new_lookup();
+        lookup->id=iCube;
+        lookup->jd=jCube;
+        lookup->X=X;
+        lookup->Y=Y;
+        lookup->Z=Z;
+        lookup->hX=hX;
+
+        cknull(im_obj = sinfo_new_c_bezier_interpolate_image(im_obj,
+                        mask_im,
+                        lookup,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        cfg->maxRad,
+                        2,
+                        slit_edges ),
+               "could not carry out sinfo_new_c_bezier_interpolate_image" );
+
+        if (cfg->contains_dither == 1) {
+            cknull(im_dither=sinfo_new_c_bezier_interpolate_image( im_dither,
+                            mask_im,
+                            lookup,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            cfg->maxRad,
+                            2,
+                            slit_edges ),
+                            "could not carry out sinfo_new_c_bezier_interpolate_image"
+                            " on dithered frame" );
+
+        }
+        sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
+        sinfo_free_image(&mask_im);
+        sinfo_free_imagelist(&iCube);
+        sinfo_free_imagelist(&jCube);
+        sinfo_free_image(&lookup->X);
+        sinfo_free_image(&lookup->Y);
+        sinfo_free_image(&lookup->Z);
+        sinfo_free_image(&lookup->hX);
+        sinfo_new_destroy_lookup(lookup);
     }
-    lookup = sinfo_new_lookup();
-    lookup->id=iCube;
-    lookup->jd=jCube;
-    lookup->X=X;
-    lookup->Y=Y;
-    lookup->Z=Z;
-    lookup->hX=hX;
-
-    cknull(im_obj = sinfo_new_c_bezier_interpolate_image(im_obj,
-                             mask_im,
-                             lookup,
-                             cfg->maxRad,
-                             cfg->maxRad,
-                             cfg->maxRad,
-                             2,
-                             slit_edges ),
-       "could not carry out sinfo_new_c_bezier_interpolate_image" );
 
-    if (cfg->contains_dither == 1) {
-        cknull(im_dither=sinfo_new_c_bezier_interpolate_image( im_dither,
-                                   mask_im,
-                                   lookup,
-                                   cfg->maxRad,
-                                   cfg->maxRad,
-                                   cfg->maxRad,
-                                   2,
-                                   slit_edges ),
-                  "could not carry out sinfo_new_c_bezier_interpolate_image"
-                  " on dithered frame" );
 
-    }
-    sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-    sinfo_free_image(&mask_im);
-    sinfo_free_imagelist(&iCube);
-    sinfo_free_imagelist(&jCube);
-    sinfo_free_image(&lookup->X);
-    sinfo_free_image(&lookup->Y);
-    sinfo_free_image(&lookup->Z);
-    sinfo_free_image(&lookup->hX);
-    sinfo_new_destroy_lookup(lookup);
-  }
-
-
-  /*
+    /*
   #---------------------------------------------------------
   # correction of distortions
   #---------------------------------------------------------
-  */
-
-  /* here memory leak */
-  //sinfo_msg("cfg->warpfixInd=%d",cfg->warpfixInd);
-  if (cfg->warpfixInd == 1){
-    /*#open ASCII file containing the slope parameter and read it*/
-    sinfo_msg("Correct object for distortions");
-    cknull(int_im_shifted=sinfo_new_image_warp_fits(im_obj,
-                                                    cfg->kernel,
-                                                    cfg->polyFile),
-                                "could not carry out sinfo_image_warp_fits" );
+     */
 
-    sinfo_free_image(&im_obj);
-    im_obj = cpl_image_duplicate(int_im_shifted);
-    if (cfg->contains_dither == 1){
-      cknull(int_im_dith_shifted=sinfo_new_image_warp_fits(im_dither,
-                                                           cfg->kernel,
-                                                           cfg->polyFile),
-                                 "could not carry out sinfo_image_warp_fits" );
-      sinfo_free_image(&im_dither);
-      im_dither = cpl_image_duplicate(int_im_dith_shifted);
+    /* here memory leak */
+    //sinfo_msg("cfg->warpfixInd=%d",cfg->warpfixInd);
+    if (cfg->warpfixInd == 1){
+        /*#open ASCII file containing the slope parameter and read it*/
+        sinfo_msg("Correct object for distortions");
+        cknull(int_im_shifted=sinfo_new_image_warp_fits(im_obj,
+                        cfg->kernel,
+                        cfg->polyFile),
+               "could not carry out sinfo_image_warp_fits" );
+
+        sinfo_free_image(&im_obj);
+        im_obj = cpl_image_duplicate(int_im_shifted);
+        if (cfg->contains_dither == 1){
+            cknull(int_im_dith_shifted=sinfo_new_image_warp_fits(im_dither,
+                            cfg->kernel,
+                            cfg->polyFile),
+                            "could not carry out sinfo_image_warp_fits" );
+            sinfo_free_image(&im_dither);
+            im_dither = cpl_image_duplicate(int_im_dith_shifted);
+        }
     }
-  }
 
-  /*
+    /*
   #---------------------------------------------------------
   # merge (interleave) both resulting frames
   #---------------------------------------------------------
-  */
-  if (cfg->interInd == 1 && cfg->contains_dither == 1){
-    if( pdensity>1) {
-      sinfo_msg("Merge (interleave) frames");
-      cknull(im3 = cpl_image_new(cpl_image_get_size_x(im_obj),
-				 cpl_image_get_size_y(im_obj),CPL_TYPE_FLOAT),
-	     "could not allocate an image" );
-      cknull(im4=sinfo_new_remove_general_offset( im_obj, im_dither,
-						  im3, cfg->noRows ),
-	     "sinfo_removeGeneralOffset failed" );
-
-      cknull(im5 = sinfo_new_remove_regional_tilt ( im_obj, im4, im3 ),
-	     "sinfo_removeRegionalTilt failed" );
-
-      cknull(im6 = sinfo_new_remove_column_offset ( im_obj, im5, im3 ),
-	     "sinfo_removeColumnOffset failed" );
-
-      cknull(im7 = sinfo_new_remove_residual_tilt ( im6, im3 ),
-	     "sinfo_removeResidualTilt failed" );
-
-      cknull(im8 = sinfo_new_remove_residual_offset ( im7, im3 ),
-	     "sinfo_removeResidualOffset failed");
-      cknull(im9 = sinfo_sinfo_merge_images(im_obj, im8, im3),
-	     "sinfo_mergeImages failed" );
-
-      ck0(sinfo_pro_save_ima(im9,raw,sof,cfg->outName,
-			     frm_pro_ctg,NULL,plugin_id,config),
-	  "cannot save ima %s", cfg->outName);
-
-      sinfo_free_image(&im3);
-      sinfo_free_image(&im4);
-      sinfo_free_image(&im5);
-      sinfo_free_image(&im6);
-      sinfo_free_image(&im7);
-      sinfo_free_image(&im8);
-      sinfo_free_image(&im9);
-      sinfo_free_image(&im_obj);
-      sinfo_free_image(&im_dither);
-    }
-    /*
+     */
+    if (cfg->interInd == 1 && cfg->contains_dither == 1){
+        if( pdensity>1) {
+            sinfo_msg("Merge (interleave) frames");
+            cknull(im3 = cpl_image_new(cpl_image_get_size_x(im_obj),
+                            cpl_image_get_size_y(im_obj),CPL_TYPE_FLOAT),
+                   "could not allocate an image" );
+            cknull(im4=sinfo_new_remove_general_offset( im_obj, im_dither,
+                            im3, cfg->noRows ),
+                   "sinfo_removeGeneralOffset failed" );
+
+            cknull(im5 = sinfo_new_remove_regional_tilt ( im_obj, im4, im3 ),
+                   "sinfo_removeRegionalTilt failed" );
+
+            cknull(im6 = sinfo_new_remove_column_offset ( im_obj, im5, im3 ),
+                   "sinfo_removeColumnOffset failed" );
+
+            cknull(im7 = sinfo_new_remove_residual_tilt ( im6, im3 ),
+                   "sinfo_removeResidualTilt failed" );
+
+            cknull(im8 = sinfo_new_remove_residual_offset ( im7, im3 ),
+                   "sinfo_removeResidualOffset failed");
+            cknull(im9 = sinfo_sinfo_merge_images(im_obj, im8, im3),
+                   "sinfo_mergeImages failed" );
+
+            ck0(sinfo_pro_save_ima(im9,raw,sof,cfg->outName,
+                            frm_pro_ctg,NULL,plugin_id,config),
+                "cannot save ima %s", cfg->outName);
+
+            sinfo_free_image(&im3);
+            sinfo_free_image(&im4);
+            sinfo_free_image(&im5);
+            sinfo_free_image(&im6);
+            sinfo_free_image(&im7);
+            sinfo_free_image(&im8);
+            sinfo_free_image(&im9);
+            sinfo_free_image(&im_obj);
+            sinfo_free_image(&im_dither);
+        }
+        /*
     #---------------------------------------------------------
     # convolve spectra with Gaussian
     #---------------------------------------------------------
-    */
-  } else if (cfg->gaussInd == 1 && cfg->interInd == 0) {
-    sinfo_msg("Convolve spectra with Gaussian");
-    if(pdensity > 1) {
-      cknull(im_conv = sinfo_new_convolve_image_by_gauss ( im_obj, cfg->hw ),
-	     "sinfo_convolveImageByGauss failed" );
-
-      ck0(sinfo_pro_save_ima(im_conv,raw,sof,cfg->outName,
-			     frm_pro_ctg,NULL,plugin_id,config),
-	  "cannot save ima %s", cfg->outName);
-
-      sinfo_free_image(&im_obj);
-      sinfo_free_image(&im_conv);
-      if (cfg->contains_dither == 1){
-	sinfo_free_image(&im_dither);
-      }
-    }
-  } else {
+         */
+    } else if (cfg->gaussInd == 1 && cfg->interInd == 0) {
+        sinfo_msg("Convolve spectra with Gaussian");
+        if(pdensity > 1) {
+            cknull(im_conv = sinfo_new_convolve_image_by_gauss ( im_obj, cfg->hw ),
+                            "sinfo_convolveImageByGauss failed" );
+
+            ck0(sinfo_pro_save_ima(im_conv,raw,sof,cfg->outName,
+                            frm_pro_ctg,NULL,plugin_id,config),
+                "cannot save ima %s", cfg->outName);
+
+            sinfo_free_image(&im_obj);
+            sinfo_free_image(&im_conv);
+            if (cfg->contains_dither == 1){
+                sinfo_free_image(&im_dither);
+            }
+        }
+    } else {
 
-    sinfo_msg("Add QC LOG");
-    /* add QC-LOG */
-    /* sinfo_det_ncounts(raw, cfg->qc_thresh_max); */
-    cknull_nomsg(qclog_tbl = sinfo_qclog_init());
+        sinfo_msg("Add QC LOG");
+        /* add QC-LOG */
+        /* sinfo_det_ncounts(raw, cfg->qc_thresh_max); */
+        cknull_nomsg(qclog_tbl = sinfo_qclog_init());
 
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",
-				     qc->avg_on,"Average of flux","%g"));
-/*    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",
+                        qc->avg_on,"Average of flux","%g"));
+        /*    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MEANFLUX",
 				     qc->avg_on,"Average of flux","%g"));*/
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMOFF MEANFLUX",
-				     qc->avg_of,"Average of flux","%g"));
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MEANFLUX",
-				     qc->avg_di,"Average of flux","%g"));
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MAXFLUX",
-				     qc->max_on,"Max of flux","%g"));
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMOFF MAXFLUX",
-				     qc->max_of,"Max of flux","%g"));
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MAXFLUX",
-				     qc->max_di,"Max of flux","%g"));
-    ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,"QC FRMON NPIXSAT",
-				  qc->nsat,
-				  "Number of saturated pixels","%d"));
-    update_bad_pixel_map(im_obj);
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MEANSTD",
-				     cpl_image_get_mean(im_obj),"mean of the image","%13.6f"));
-
-    ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
-                                             "QC FRMDIF STDEV",
-                                             cpl_image_get_stdev(im_obj),
-                                             "standard deviation of the image",
-                                             "%13.6f"));
-
-    ck0(sinfo_pro_save_ima(im_obj,raw,sof,cfg->outName,
-			   frm_pro_ctg,qclog_tbl,plugin_id,config),
-	"cannot dump ima %s", cfg->outName);
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMOFF MEANFLUX",
+                        qc->avg_of,"Average of flux","%g"));
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MEANFLUX",
+                        qc->avg_di,"Average of flux","%g"));
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMON MAXFLUX",
+                        qc->max_on,"Max of flux","%g"));
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMOFF MAXFLUX",
+                        qc->max_of,"Max of flux","%g"));
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MAXFLUX",
+                        qc->max_di,"Max of flux","%g"));
+        ck0_nomsg(sinfo_qclog_add_int(qclog_tbl,"QC FRMON NPIXSAT",
+                        qc->nsat,
+                        "Number of saturated pixels","%d"));
+        update_bad_pixel_map(im_obj);
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,"QC FRMDIF MEANSTD",
+                        cpl_image_get_mean(im_obj),"mean of the image","%13.6f"));
+
+        ck0_nomsg(sinfo_qclog_add_double(qclog_tbl,
+                        "QC FRMDIF STDEV",
+                        cpl_image_get_stdev(im_obj),
+                        "standard deviation of the image",
+                        "%13.6f"));
+
+        ck0(sinfo_pro_save_ima(im_obj,raw,sof,cfg->outName,
+                        frm_pro_ctg,qclog_tbl,plugin_id,config),
+            "cannot dump ima %s", cfg->outName);
+
+        sinfo_free_image(&im_obj);
+        sinfo_free_table(&qclog_tbl);
+
+        if (cfg->contains_dither == 1 && cfg->interInd == 0) {
+            if (strstr(cfg->outName, ".fits" ) != NULL ) {
+                snprintf(name_list, MAX_NAME_SIZE-1,"%s%s",
+                                sinfo_new_get_rootname(cfg->outName), "_dith.fits");
+                strcpy(cfg->outName,name_list);
+            } else {
+                strcat(cfg->outName,"_dith");
+            }
+            cpl_free(name_list);
+
+
+
+            ck0(sinfo_pro_save_ima(im_dither,raw,sof,cfg->outName,
+                            frm_pro_ctg,NULL,plugin_id,config),
+                "cannot save ima %s", cfg->outName);
+
+            if (cfg->contains_dither == 1) {
+                sinfo_free_image(&im_dither);
+            }
+        }
 
-    sinfo_free_image(&im_obj);
-    sinfo_free_table(&qclog_tbl);
+    }
 
-    if (cfg->contains_dither == 1 && cfg->interInd == 0) {
-      if (strstr(cfg->outName, ".fits" ) != NULL ) {
-	snprintf(name_list, MAX_NAME_SIZE-1,"%s%s",
-		 sinfo_new_get_rootname(cfg->outName), "_dith.fits");
-	strcpy(cfg->outName,name_list);
-      } else {
-	strcat(cfg->outName,"_dith");
-      }
-      cpl_free(name_list);
+    /* the following generates a valgrind error
+     but without it 8 bytes are leaked */
+    sinfo_free_image_array(&im,cfg->nframes);
 
+    /*AMO: check if those images can be deleted before */
+    sinfo_free_image(&int_im_shifted);
+    sinfo_free_image(&int_im);
+    sinfo_free_image(&im_obj_flat);
+    sinfo_free_image(&im_obj_sub);
 
+    sinfo_stack_free(&cfg);
+    sinfo_free_frameset(&raw);
+    sinfo_qc_wcal_delete(&qc);
 
-      ck0(sinfo_pro_save_ima(im_dither,raw,sof,cfg->outName,
-			     frm_pro_ctg,NULL,plugin_id,config),
-	  "cannot save ima %s", cfg->outName);
+    return 0;
 
-      if (cfg->contains_dither == 1) {
-	sinfo_free_image(&im_dither);
-      }
-    }
-
-  }
+    cleanup:
+    sinfo_free_table(&qclog_tbl);
+    sinfo_free_table(&tbl_slitpos);
+    sinfo_free_table(&tbl_index);
+    if(slit_edges!=NULL) sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
+    sinfo_free_image(&flat1_dist);
+    sinfo_free_image(&flat1);
+    sinfo_free_image(&flat_smooth);
+    sinfo_free_image(&flat2_dist);
+    sinfo_free_image(&int_im);
+    sinfo_free_image(&int_im_dith);
+    sinfo_free_image(&int_im_shifted);
+    sinfo_free_image(&im_dither);
+    sinfo_free_image(&flat2);
+    sinfo_free_image(&im_obj_flat);
+    sinfo_free_image(&im_obj_sub);
+    sinfo_free_image(&im_obj);
+    sinfo_free_image(&mask_im);
+    sinfo_free_image(&im_sky);
+    sinfo_free_imagelist(&list_object_tmp);
+    sinfo_free_image(&sky_img_flat);
+    sinfo_free_image(&sky_dist);
+    sinfo_free_image(&sky_img);
+    sinfo_free_imagelist(&list_object);
+    sinfo_free_imagelist(&list_sky);
+    if(im != NULL) sinfo_free_image_array(&im,cfg->nframes);
+    sinfo_stack_free(&cfg);
+    sinfo_free_frameset(&raw);
+    sinfo_qc_wcal_delete(&qc);
 
-  /* the following generates a valgrind error
-     but without it 8 bytes are leaked */
-  sinfo_free_image_array(&im,cfg->nframes);
-
-  /*AMO: check if those images can be deleted before */
-  sinfo_free_image(&int_im_shifted);
-  sinfo_free_image(&int_im);
-  sinfo_free_image(&im_obj_flat);
-  sinfo_free_image(&im_obj_sub);
-
-  sinfo_stack_free(&cfg);
-  sinfo_free_frameset(&raw);
-  sinfo_qc_wcal_delete(&qc);
-
-  return 0;
-
- cleanup:
-  sinfo_free_table(&qclog_tbl);
-  sinfo_free_table(&tbl_slitpos);
-  sinfo_free_table(&tbl_index);
-  if(slit_edges!=NULL) sinfo_new_destroy_2Dfloatarray(&slit_edges, 32);
-  sinfo_free_image(&flat1_dist);
-  sinfo_free_image(&flat1);
-  sinfo_free_image(&flat_smooth);
-  sinfo_free_image(&flat2_dist);
-  sinfo_free_image(&int_im);
-  sinfo_free_image(&int_im_dith);
-  sinfo_free_image(&int_im_shifted);
-  sinfo_free_image(&im_dither);
-  sinfo_free_image(&flat2);
-  sinfo_free_image(&im_obj_flat);
-  sinfo_free_image(&im_obj_sub);
-  sinfo_free_image(&im_obj);
-  sinfo_free_image(&mask_im);
-  sinfo_free_image(&im_sky);
-  sinfo_free_imagelist(&list_object_tmp);
-  sinfo_free_image(&sky_img_flat);
-  sinfo_free_image(&sky_dist);
-  sinfo_free_image(&sky_img);
-  sinfo_free_imagelist(&list_object);
-  sinfo_free_imagelist(&list_sky);
-  if(im != NULL) sinfo_free_image_array(&im,cfg->nframes);
-  sinfo_stack_free(&cfg);
-  sinfo_free_frameset(&raw);
-  sinfo_qc_wcal_delete(&qc);
-
-  return -1 ;
+    return -1 ;
 
 }
 /**@}*/
diff --git a/sinfoni/sinfo_new_slit_pos.c b/sinfoni/sinfo_new_slit_pos.c
index b822278..e5a8a87 100644
--- a/sinfoni/sinfo_new_slit_pos.c
+++ b/sinfoni/sinfo_new_slit_pos.c
@@ -174,7 +174,7 @@ int sinfo_new_slit_pos (cpl_parameterlist* config, cpl_frameset* sof)
        cfg->slitposIndicator=1;
     }
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
@@ -239,7 +239,7 @@ if (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {
     /*---open the line list and read the number of lines---*/
 
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
@@ -247,14 +247,14 @@ if (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {
     tbl_line_list_name=cfg->lineList;
     tbl_line_list = cpl_table_load(tbl_line_list_name,1,0);
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
     n = cpl_table_get_nrow(tbl_line_list);
     n_lines = n;
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
@@ -271,14 +271,14 @@ if (cfg->calibIndicator == 1 || cfg->wavemapInd == 1) {
 
     wave   = cpl_table_get_data_float(tbl_line_list,"wave");
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
 
     intens = cpl_table_get_data_float(tbl_line_list,"int");
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
@@ -571,7 +571,7 @@ if (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {
    tbl_wcal = cpl_table_load(tbl_name,1,0);
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg("cannot load table %s",tbl_name);
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
@@ -583,7 +583,7 @@ if (cfg->calibIndicator == 1 && cfg->wavemapInd == 0) {
    }
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg("cannot read table %s",tbl_name);
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       sinfo_qc_wcal_delete(&qc);
       return -1;
     }
diff --git a/sinfoni/sinfo_north_south_test_config.c b/sinfoni/sinfo_north_south_test_config.c
index 93f2eab..2953584 100644
--- a/sinfoni/sinfo_north_south_test_config.c
+++ b/sinfoni/sinfo_north_south_test_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 09:50:08 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_north_south_test_config.h b/sinfoni/sinfo_north_south_test_config.h
index 0409574..d0b3207 100644
--- a/sinfoni/sinfo_north_south_test_config.h
+++ b/sinfoni/sinfo_north_south_test_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_objnod_config.c b/sinfoni/sinfo_objnod_config.c
index 83e18f4..df2b479 100644
--- a/sinfoni/sinfo_objnod_config.c
+++ b/sinfoni/sinfo_objnod_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 09:50:08 $
  * $Revision: 1.11 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_objnod_config.h b/sinfoni/sinfo_objnod_config.h
index 5c15ff9..1413996 100644
--- a/sinfoni/sinfo_objnod_config.h
+++ b/sinfoni/sinfo_objnod_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_objnod_ini_by_cpl.c b/sinfoni/sinfo_objnod_ini_by_cpl.c
index d25f42c..bb579c5 100644
--- a/sinfoni/sinfo_objnod_ini_by_cpl.c
+++ b/sinfoni/sinfo_objnod_ini_by_cpl.c
@@ -228,7 +228,7 @@ parse_section_frames(object_config * cfg,
      strcpy(cfg -> wavemap, cpl_frame_get_filename(frame));
    } else {
      sinfo_msg("Frame %s not found!", PRO_WAVE_MAP);
-     sinfo_msg_error((char* ) cpl_error_get_message());
+     sinfo_msg_error("%s", (char* ) cpl_error_get_message());
      (*status)++;
      return ;
    }
@@ -238,7 +238,7 @@ parse_section_frames(object_config * cfg,
      strcpy(cfg -> mflat, cpl_frame_get_filename(frame));
    } else {
      sinfo_msg("Frame %s not found!", PRO_MASTER_FLAT_LAMP);
-     sinfo_msg_error((char* ) cpl_error_get_message());
+     sinfo_msg_error("%s", (char* ) cpl_error_get_message());
      (*status)++;
      return ;
    }
diff --git a/sinfoni/sinfo_objspider_config.c b/sinfoni/sinfo_objspider_config.c
index 15d936a..1b12bbc 100644
--- a/sinfoni/sinfo_objspider_config.c
+++ b/sinfoni/sinfo_objspider_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 09:50:08 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_objspider_config.h b/sinfoni/sinfo_objspider_config.h
index 0de8b85..9705b19 100644
--- a/sinfoni/sinfo_objspider_config.h
+++ b/sinfoni/sinfo_objspider_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:32 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_pfits.c b/sinfoni/sinfo_pfits.c
index e376c34..5f8ea60 100644
--- a/sinfoni/sinfo_pfits.c
+++ b/sinfoni/sinfo_pfits.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/05/04 08:11:07 $
  * $Revision: 1.14 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_pfits.h b/sinfoni/sinfo_pfits.h
index ffc18ea..6f2dc42 100644
--- a/sinfoni/sinfo_pfits.h
+++ b/sinfoni/sinfo_pfits.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/22 15:26:10 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_PFITS_H
diff --git a/sinfoni/sinfo_prepare_stacked_frames_config.c b/sinfoni/sinfo_prepare_stacked_frames_config.c
index e43f996..9c14e9e 100644
--- a/sinfoni/sinfo_prepare_stacked_frames_config.c
+++ b/sinfoni/sinfo_prepare_stacked_frames_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2008/02/27 15:10:05 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /**************************************************************************
diff --git a/sinfoni/sinfo_prepare_stacked_frames_config.h b/sinfoni/sinfo_prepare_stacked_frames_config.h
index a4c5204..83df0f8 100644
--- a/sinfoni/sinfo_prepare_stacked_frames_config.h
+++ b/sinfoni/sinfo_prepare_stacked_frames_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_pro_save.c b/sinfoni/sinfo_pro_save.c
index c2cfb8e..d4c0724 100644
--- a/sinfoni/sinfo_pro_save.c
+++ b/sinfoni/sinfo_pro_save.c
@@ -165,16 +165,16 @@ sinfo_update_fits_card_float(const char* file,const char* card,float value)
   cpl_propertylist *   plist =NULL;
   if ((plist = cpl_propertylist_load(file, 0)) == NULL) {
     sinfo_msg_error( "getting header from file %s",file);
-    sinfo_msg_error((char* ) cpl_error_get_message());
-    sinfo_msg_error((char* ) cpl_error_get_where());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_where());
     cpl_propertylist_delete(plist) ;
     return -1 ;
   }
 
   if (CPL_ERROR_NONE!=cpl_propertylist_set_float(plist,card,value)){
     sinfo_msg_error( "setting header of file %s",file);
-    sinfo_msg_error((char* ) cpl_error_get_message());
-    sinfo_msg_error((char* ) cpl_error_get_where());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_where());
     cpl_propertylist_delete(plist) ;
     return -1 ;
   }
@@ -858,7 +858,7 @@ sinfo_log_pro(char* name_o,
   if(cpl_dfs_setup_product_header(*plist,product_frame,ref_set,parlist,recid,
 				  pipe_id,KEY_VALUE_HPRO_DID,NULL) != CPL_ERROR_NONE) {
     sinfo_msg_warning("Problem in the product DFS-compliance");
-    sinfo_msg_warning((char* ) cpl_error_get_message());
+    sinfo_msg_warning("%s", (char* ) cpl_error_get_message());
     cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);
     cpl_error_reset();
   }
@@ -885,7 +885,7 @@ sinfo_check_name(const char* in, char** ou, int type, char** paf) {
     tmp = sinfo_new_get_rootname(in);
     strcpy(name_b,tmp);
   } else {
-    snprintf(name_b, MAX_NAME_SIZE-1,in) ;
+    snprintf(name_b, MAX_NAME_SIZE-1,"%s", in) ;
   }
   strcpy(*ou,name_b);
   if (type == CPL_FRAME_TYPE_TABLE) {
diff --git a/sinfoni/sinfo_pro_types.h b/sinfoni/sinfo_pro_types.h
index a42eff0..e9fd14c 100644
--- a/sinfoni/sinfo_pro_types.h
+++ b/sinfoni/sinfo_pro_types.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2010/02/12 17:57:38 $
  * $Revision: 1.10 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_PRO_TYPES_H
diff --git a/sinfoni/sinfo_product_config.c b/sinfoni/sinfo_product_config.c
index aa511d5..89b8f7e 100644
--- a/sinfoni/sinfo_product_config.c
+++ b/sinfoni/sinfo_product_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 09:50:08 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_product_config.h b/sinfoni/sinfo_product_config.h
index fe5ea74..4f28cbc 100644
--- a/sinfoni/sinfo_product_config.h
+++ b/sinfoni/sinfo_product_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_psf_config.c b/sinfoni/sinfo_psf_config.c
index 2dc5659..f9fcf9e 100644
--- a/sinfoni/sinfo_psf_config.c
+++ b/sinfoni/sinfo_psf_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 09:50:08 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_psf_config.h b/sinfoni/sinfo_psf_config.h
index f8647c5..3512bb7 100644
--- a/sinfoni/sinfo_psf_config.h
+++ b/sinfoni/sinfo_psf_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_qr.c b/sinfoni/sinfo_qr.c
index 4d2946a..9a8032f 100644
--- a/sinfoni/sinfo_qr.c
+++ b/sinfoni/sinfo_qr.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:18:26 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /**@{*/
 /**
diff --git a/sinfoni/sinfo_raw_types.h b/sinfoni/sinfo_raw_types.h
index a43f942..0a719eb 100644
--- a/sinfoni/sinfo_raw_types.h
+++ b/sinfoni/sinfo_raw_types.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2008/07/04 13:06:02 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_RAW_TYPES_H
diff --git a/sinfoni/sinfo_rec_utils.c b/sinfoni/sinfo_rec_utils.c
index 566ab8d..dbd7471 100644
--- a/sinfoni/sinfo_rec_utils.c
+++ b/sinfoni/sinfo_rec_utils.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_rec_utils.c,v 1.14 2012/03/03 10:18:26 amodigli Exp $
+/* $Id: sinfo_rec_utils.c,v 1.15 2013/09/17 08:10:58 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -19,9 +19,9 @@
  */
 /*
  * $Author: amodigli $
- * $Date: 2012/03/03 10:18:26 $
- * $Revision: 1.14 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/09/17 08:10:58 $
+ * $Revision: 1.15 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
@@ -265,7 +265,7 @@ cpl_parameterlist* config,fake* fk, char* pro_ctg, const char* plugin_id)
         basename(sky_name)); */
       snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
     } else {
-       snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
+      snprintf(fake_sky_name, MAX_NAME_SIZE-1,"%s", sky_name) ;
     }
 
     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
@@ -463,7 +463,7 @@ sinfo_get_dummy_obj_sky_stacked_and_cubes(cpl_frameset* obj_set,
                  "fake_",basename(sky_name)); */
       snprintf(fake_sky_name,MAX_NAME_SIZE-1,"%s%d%s","out_fake_sky",i,".fits");
     } else {
-       snprintf(fake_sky_name, MAX_NAME_SIZE-1,sky_name) ;
+      snprintf(fake_sky_name, MAX_NAME_SIZE-1, "%s", sky_name) ;
     }
 
     check_nomsg(sky_ima=cpl_image_load(sky_name,CPL_TYPE_FLOAT,0,0));
diff --git a/sinfoni/sinfo_rec_utils.h b/sinfoni/sinfo_rec_utils.h
index 9babcb9..4af5f0a 100644
--- a/sinfoni/sinfo_rec_utils.h
+++ b/sinfoni/sinfo_rec_utils.h
@@ -24,7 +24,7 @@
  * $Author: amodigli $
  * $Date: 2007/06/06 07:10:45 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_ref_types.h b/sinfoni/sinfo_ref_types.h
index deb1df4..783e47a 100644
--- a/sinfoni/sinfo_ref_types.h
+++ b/sinfoni/sinfo_ref_types.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/08/10 07:55:23 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_REF_TYPES_H
diff --git a/sinfoni/sinfo_skycor.c b/sinfoni/sinfo_skycor.c
index 5a23cc3..df34b12 100644
--- a/sinfoni/sinfo_skycor.c
+++ b/sinfoni/sinfo_skycor.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/05/04 08:11:35 $
  * $Revision: 1.50 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_skycor.h b/sinfoni/sinfo_skycor.h
index a84448a..0b2d6e4 100644
--- a/sinfoni/sinfo_skycor.h
+++ b/sinfoni/sinfo_skycor.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/03/05 07:21:54 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_skycor_config.c b/sinfoni/sinfo_skycor_config.c
index 37c07f3..e5e30f8 100644
--- a/sinfoni/sinfo_skycor_config.c
+++ b/sinfoni/sinfo_skycor_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:18:26 $
  * $Revision: 1.17 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
diff --git a/sinfoni/sinfo_skycor_config.h b/sinfoni/sinfo_skycor_config.h
index 400dc01..03bf623 100644
--- a/sinfoni/sinfo_skycor_config.h
+++ b/sinfoni/sinfo_skycor_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/11/27 16:55:26 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_spectrum_ops.c b/sinfoni/sinfo_spectrum_ops.c
index 98a4ea7..e4f233d 100644
--- a/sinfoni/sinfo_spectrum_ops.c
+++ b/sinfoni/sinfo_spectrum_ops.c
@@ -974,7 +974,7 @@ cpl_image * sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube,
            sinfo_new_fit_2d_gaussian(i_img,gfit_par,
                                      gderv_par,gmpar,llx,lly,
                                      halfbox_x,halfbox_y,check2);
-    }
+	}
 
         for ( row = first_row ; row <= last_row ; row++ )
         {
@@ -1028,7 +1028,7 @@ cpl_image * sinfo_new_optimal_extraction_from_cube( cpl_imagelist * cube,
            cpl_table_set_float(*spectrum,"FWHMX" ,z,gfit_par[4]);
            cpl_table_set_float(*spectrum,"FWHMY" ,z,gfit_par[5]);
            cpl_table_set_float(*spectrum,"ANGLE" ,z,gfit_par[6]);
-    }
+	}
 
     }
 
diff --git a/sinfoni/sinfo_stacked_hidden_config.c b/sinfoni/sinfo_stacked_hidden_config.c
index c2a4e4d..c1478a7 100644
--- a/sinfoni/sinfo_stacked_hidden_config.c
+++ b/sinfoni/sinfo_stacked_hidden_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:18:26 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /**************************************************************************
diff --git a/sinfoni/sinfo_stacked_hidden_config.h b/sinfoni/sinfo_stacked_hidden_config.h
index 8ca5e96..f3a9f71 100644
--- a/sinfoni/sinfo_stacked_hidden_config.h
+++ b/sinfoni/sinfo_stacked_hidden_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_standard_star_config.c b/sinfoni/sinfo_standard_star_config.c
index 3dcd9e1..0266ba0 100644
--- a/sinfoni/sinfo_standard_star_config.c
+++ b/sinfoni/sinfo_standard_star_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:18:26 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_standard_star_config.h b/sinfoni/sinfo_standard_star_config.h
index fa92bb6..f9b5c05 100644
--- a/sinfoni/sinfo_standard_star_config.h
+++ b/sinfoni/sinfo_standard_star_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_star_index.c b/sinfoni/sinfo_star_index.c
index fa8ca6b..77a5e8a 100644
--- a/sinfoni/sinfo_star_index.c
+++ b/sinfoni/sinfo_star_index.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:18:26 $
  * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
diff --git a/sinfoni/sinfo_time.c b/sinfoni/sinfo_time.c
index 9bc0e58..51d2eb7 100644
--- a/sinfoni/sinfo_time.c
+++ b/sinfoni/sinfo_time.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
diff --git a/sinfoni/sinfo_time.h b/sinfoni/sinfo_time.h
index 720b042..2d382e6 100644
--- a/sinfoni/sinfo_time.h
+++ b/sinfoni/sinfo_time.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/11/11 14:13:03 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_TIME_H
diff --git a/sinfoni/sinfo_tpl_dfs.c b/sinfoni/sinfo_tpl_dfs.c
index 1b81b74..98c306d 100644
--- a/sinfoni/sinfo_tpl_dfs.c
+++ b/sinfoni/sinfo_tpl_dfs.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_tpl_dfs.h b/sinfoni/sinfo_tpl_dfs.h
index a384140..73026c8 100644
--- a/sinfoni/sinfo_tpl_dfs.h
+++ b/sinfoni/sinfo_tpl_dfs.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2008/07/09 09:53:23 $
  * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_TPL_DFS_H
diff --git a/sinfoni/sinfo_tpl_utils.c b/sinfoni/sinfo_tpl_utils.c
index dc861ea..83506a2 100644
--- a/sinfoni/sinfo_tpl_utils.c
+++ b/sinfoni/sinfo_tpl_utils.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_tpl_utils.c,v 1.3 2012/03/03 10:17:31 amodigli Exp $
+/* $Id: sinfo_tpl_utils.c,v 1.4 2013/07/15 08:13:35 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2012/03/03 10:17:31 $
- * $Revision: 1.3 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/07/15 08:13:35 $
+ * $Revision: 1.4 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -36,6 +36,7 @@
 #include <cpl.h>
 
 #include "sinfo_tpl_utils.h"
+#include "sinfo_globals.h"
 
 /**@{*/
 /*----------------------------------------------------------------------------*/
diff --git a/sinfoni/sinfo_tpl_utils.h b/sinfoni/sinfo_tpl_utils.h
index 1f3b733..b396a6e 100644
--- a/sinfoni/sinfo_tpl_utils.h
+++ b/sinfoni/sinfo_tpl_utils.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2007/08/20 10:03:49 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifndef SINFO_TPL_UTILS_H
diff --git a/sinfoni/sinfo_utilities.c b/sinfoni/sinfo_utilities.c
index 76c5940..a932706 100644
--- a/sinfoni/sinfo_utilities.c
+++ b/sinfoni/sinfo_utilities.c
@@ -760,7 +760,7 @@ cpl_imagelist * sinfo_new_frameset_to_iset(cpl_frameset * fset)
     if ((iset = sinfo_new_imagelist_load_frameset(fset,
                                          CPL_TYPE_FLOAT, 0, 0)) == NULL) {
         sinfo_msg_error( "Cannot load *** the image set") ;
-        sinfo_msg_error((char* ) cpl_error_get_message());
+        sinfo_msg_error("%s", (char* ) cpl_error_get_message());
 
         cpl_free(filenames) ;
         return NULL ;
diff --git a/sinfoni/sinfo_utilities.h b/sinfoni/sinfo_utilities.h
index d0a7eba..e9faca9 100644
--- a/sinfoni/sinfo_utilities.h
+++ b/sinfoni/sinfo_utilities.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2011/12/09 07:47:42 $
  * $Revision: 1.13 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifndef SINFO_UTILITIES_H
 #define SINFO_UTILITIES_H
diff --git a/sinfoni/sinfo_utilities_scired.c b/sinfoni/sinfo_utilities_scired.c
index df318b5..24f8ef1 100644
--- a/sinfoni/sinfo_utilities_scired.c
+++ b/sinfoni/sinfo_utilities_scired.c
@@ -443,14 +443,14 @@ sinfo_read_distances(const int nslits, const char* distlist)
             /*READ TFITS TABLE*/
   if(cpl_error_get_code() != CPL_ERROR_NONE) {
     sinfo_msg_error("Before loading input table");
-    sinfo_msg_error((char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
     return NULL;
   }
   strcpy(tbl_distances_name,distlist);
   tbl_distances = cpl_table_load(tbl_distances_name,1,0);
   if(cpl_error_get_code() != CPL_ERROR_NONE) {
     sinfo_msg_error("loading input table %s",tbl_distances_name);
-    sinfo_msg_error((char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
     return NULL;
   }
 
@@ -459,7 +459,7 @@ sinfo_read_distances(const int nslits, const char* distlist)
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg_error("reading col %s from table %s","slitlet_distance",
                        tbl_distances_name);
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       return NULL;
     }
     sinfo_new_array_set_value(distances,tmp_float,i);
@@ -498,7 +498,7 @@ sinfo_read_slitlets_edges(const int nslits, const char* poslist)
   tbl_slitpos = cpl_table_load(tbl_slitpos_name,1,0);
   if(cpl_error_get_code() != CPL_ERROR_NONE) {
     sinfo_msg_error("error loading tbl %s",tbl_slitpos_name);
-    sinfo_msg_error((char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
     return NULL;
   }
   n = cpl_table_get_nrow(tbl_slitpos);
@@ -512,7 +512,7 @@ sinfo_read_slitlets_edges(const int nslits, const char* poslist)
     edge_y=cpl_table_get_double(tbl_slitpos,"pos2",i,status);
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg_error("error reading tbl %s row %d",tbl_slitpos_name,i);
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       return NULL;
     }
     sinfo_new_array2D_set_value(slit_edges,edge_x,i,0);
@@ -521,7 +521,7 @@ sinfo_read_slitlets_edges(const int nslits, const char* poslist)
   cpl_table_delete(tbl_slitpos);
   if(cpl_error_get_code() != CPL_ERROR_NONE) {
     sinfo_msg_error("error reading tbl %s",tbl_slitpos_name);
-    sinfo_msg_error((char* ) cpl_error_get_message());
+    sinfo_msg_error("%s", (char* ) cpl_error_get_message());
     return NULL;
   }
 
diff --git a/sinfoni/sinfo_utils.c b/sinfoni/sinfo_utils.c
index 5d2571e..509b807 100644
--- a/sinfoni/sinfo_utils.c
+++ b/sinfoni/sinfo_utils.c
@@ -20,7 +20,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.7 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_utils.c,v $
  * Revision 1.7  2012/03/03 10:17:31  amodigli
  * fixed some doxygen warnings
diff --git a/sinfoni/sinfo_utils.h b/sinfoni/sinfo_utils.h
index 29f472d..1bce14d 100644
--- a/sinfoni/sinfo_utils.h
+++ b/sinfoni/sinfo_utils.h
@@ -21,7 +21,7 @@
  * $Author: kmirny $
  * $Date: 2010/09/30 14:00:03 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  *
  */
 #ifndef SINFO_UTILS_H
diff --git a/sinfoni/sinfo_utl_cube2ima.c b/sinfoni/sinfo_utl_cube2ima.c
index ca92c70..c54051d 100644
--- a/sinfoni/sinfo_utl_cube2ima.c
+++ b/sinfoni/sinfo_utl_cube2ima.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_utl_cube2ima.h b/sinfoni/sinfo_utl_cube2ima.h
index 89933d6..b12ad3f 100644
--- a/sinfoni/sinfo_utl_cube2ima.h
+++ b/sinfoni/sinfo_utl_cube2ima.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_utl_cube2spectrum.c b/sinfoni/sinfo_utl_cube2spectrum.c
index 9b1c498..5ad9a4f 100644
--- a/sinfoni/sinfo_utl_cube2spectrum.c
+++ b/sinfoni/sinfo_utl_cube2spectrum.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.11 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_utl_cube2spectrum.h b/sinfoni/sinfo_utl_cube2spectrum.h
index ec2809f..18d2bdd 100644
--- a/sinfoni/sinfo_utl_cube2spectrum.h
+++ b/sinfoni/sinfo_utl_cube2spectrum.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_utl_cube_arith.c b/sinfoni/sinfo_utl_cube_arith.c
index 45efd4f..adfcac8 100644
--- a/sinfoni/sinfo_utl_cube_arith.c
+++ b/sinfoni/sinfo_utl_cube_arith.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.14 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
diff --git a/sinfoni/sinfo_utl_cube_arith.h b/sinfoni/sinfo_utl_cube_arith.h
index 117e8bd..fc35847 100644
--- a/sinfoni/sinfo_utl_cube_arith.h
+++ b/sinfoni/sinfo_utl_cube_arith.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_utl_cube_combine.c b/sinfoni/sinfo_utl_cube_combine.c
index d347599..a3542fc 100644
--- a/sinfoni/sinfo_utl_cube_combine.c
+++ b/sinfoni/sinfo_utl_cube_combine.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.20 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_utl_cube_combine.h b/sinfoni/sinfo_utl_cube_combine.h
index e852eaa..1c52ea8 100644
--- a/sinfoni/sinfo_utl_cube_combine.h
+++ b/sinfoni/sinfo_utl_cube_combine.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c b/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c
index 4ba5d7a..628eb0a 100644
--- a/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c
+++ b/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
diff --git a/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.h b/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.h
index b1303e8..cc86089 100644
--- a/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.h
+++ b/sinfoni/sinfo_utl_spectrum_divide_by_blackbody.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_utl_spectrum_wavelength_shift.c b/sinfoni/sinfo_utl_spectrum_wavelength_shift.c
index 3729bb5..795bd13 100644
--- a/sinfoni/sinfo_utl_spectrum_wavelength_shift.c
+++ b/sinfoni/sinfo_utl_spectrum_wavelength_shift.c
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:17:31 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
 #ifdef HAVE_CONFIG_H
diff --git a/sinfoni/sinfo_utl_spectrum_wavelength_shift.h b/sinfoni/sinfo_utl_spectrum_wavelength_shift.h
index 0207209..318436b 100644
--- a/sinfoni/sinfo_utl_spectrum_wavelength_shift.h
+++ b/sinfoni/sinfo_utl_spectrum_wavelength_shift.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 /*-----------------------------------------------------------------------------
                                 Includes
diff --git a/sinfoni/sinfo_wavecal_config.c b/sinfoni/sinfo_wavecal_config.c
index 1cc2d35..b4d5090 100644
--- a/sinfoni/sinfo_wavecal_config.c
+++ b/sinfoni/sinfo_wavecal_config.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2012/03/03 10:35:14 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_wavecal_config.h b/sinfoni/sinfo_wavecal_config.h
index f3cee1a..be4eccf 100644
--- a/sinfoni/sinfo_wavecal_config.h
+++ b/sinfoni/sinfo_wavecal_config.h
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/20 08:06:33 $
  * $Revision: 1.1 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 
  /****************************************************************
diff --git a/sinfoni/sinfo_wcal_functions.c b/sinfoni/sinfo_wcal_functions.c
index 2cb5179..5667bc4 100644
--- a/sinfoni/sinfo_wcal_functions.c
+++ b/sinfoni/sinfo_wcal_functions.c
@@ -1,4 +1,4 @@
-/* $Id: sinfo_wcal_functions.c,v 1.9 2012/03/03 10:35:14 amodigli Exp $
+/* $Id: sinfo_wcal_functions.c,v 1.10 2013/09/17 08:12:53 amodigli Exp $
  *
  * This file is part of the SINFONI Pipeline
  * Copyright (C) 2002,2003 European Southern Observatory
@@ -20,9 +20,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2012/03/03 10:35:14 $
- * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/09/17 08:12:53 $
+ * $Revision: 1.10 $
+ * $Name: sinfo-2_4_0 $
  */
 
 
@@ -100,7 +100,7 @@ int sinfo_dumpTblToFitParams ( FitParams ** params, char * filename )
     fp=cpl_table_load(filename,1,0);
     if(cpl_error_get_code() != CPL_ERROR_NONE) {
       sinfo_msg("cannot load table %s",filename);
-      sinfo_msg_error((char* ) cpl_error_get_message());
+      sinfo_msg_error("%s", (char* ) cpl_error_get_message());
       return -1;
     }
 
diff --git a/sinfoni/sinfo_wcal_functions.h b/sinfoni/sinfo_wcal_functions.h
index 29a5c76..82bd19a 100644
--- a/sinfoni/sinfo_wcal_functions.h
+++ b/sinfoni/sinfo_wcal_functions.h
@@ -22,7 +22,7 @@
  * $Author: amodigli $
  * $Date: 2006/10/22 14:12:28 $
  * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  */
 #ifndef SINFO_WCAL_FUNCTIONS_H
 #define SINFO_WCAL_FUNCTIONS_H
diff --git a/sinfoni/tests/Makefile.am b/sinfoni/tests/Makefile.am
index 927cd90..180249a 100644
--- a/sinfoni/tests/Makefile.am
+++ b/sinfoni/tests/Makefile.am
@@ -29,8 +29,8 @@ endif
 
 #LIBSINFONI = $(top_builddir)/sinfoni/libsinfo.la
 
-#INCLUDES = -I$(top_builddir)/sinfoni -I$(top_builddir)/irplib
-INCLUDES = $(all_includes)
+#AM_CPPFLAGS = -I$(top_builddir)/sinfoni -I$(top_builddir)/irplib
+AM_CPPFLAGS = $(all_includes)
 LDADD = $(LIBSINFONI)
 AM_LDFLAGS = -static
 
diff --git a/sinfoni/tests/Makefile.in b/sinfoni/tests/Makefile.in
index 56fb04a..3842088 100644
--- a/sinfoni/tests/Makefile.in
+++ b/sinfoni/tests/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +16,23 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -154,6 +171,11 @@ DIST_SOURCES = $(sinfo_cube_coadd_test_SOURCES) \
 	$(sinfo_star_catalog_SOURCES) $(sinfo_star_index_test_SOURCES) \
 	$(sinfo_strehl_test_SOURCES) $(sinfo_table_ops_test_SOURCES) \
 	$(test_atmo_disp_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 HEADERS = $(noinst_HEADERS)
 ETAGS = etags
 CTAGS = ctags
@@ -179,6 +201,7 @@ CX_LDFLAGS = @CX_LDFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
 DOXYGEN = @DOXYGEN@
 DSYMUTIL = @DSYMUTIL@
 DUMPBIN = @DUMPBIN@
@@ -219,6 +242,7 @@ LT_CURRENT = @LT_CURRENT@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
 MKDIR_P = @MKDIR_P@
 NM = @NM@
 NMEDIT = @NMEDIT@
@@ -231,6 +255,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PURIFY_CMD = @PURIFY_CMD@
@@ -253,6 +278,7 @@ abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
 all_includes = @all_includes@
@@ -288,7 +314,6 @@ libdir = @libdir@
 libexecdir = @libexecdir@
 localedir = @localedir@
 localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
 mandir = @mandir@
 mkdir_p = @mkdir_p@
 oldincludedir = @oldincludedir@
@@ -311,14 +336,16 @@ target_vendor = @target_vendor@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+wkfcopydir = @wkfcopydir@
+wkfextradir = @wkfextradir@
 AUTOMAKE_OPTIONS = 1.6 foreign
 DISTCLEANFILES = *~ .logfile
 @MAINTAINER_MODE_TRUE at MAINTAINERCLEANFILES = Makefile.in
 
 #LIBSINFONI = $(top_builddir)/sinfoni/libsinfo.la
 
-#INCLUDES = -I$(top_builddir)/sinfoni -I$(top_builddir)/irplib
-INCLUDES = $(all_includes)
+#AM_CPPFLAGS = -I$(top_builddir)/sinfoni -I$(top_builddir)/irplib
+AM_CPPFLAGS = $(all_includes)
 LDADD = $(LIBSINFONI)
 AM_LDFLAGS = -static
 noinst_HEADERS = 
@@ -384,43 +411,43 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
-sinfo_cube_coadd_test$(EXEEXT): $(sinfo_cube_coadd_test_OBJECTS) $(sinfo_cube_coadd_test_DEPENDENCIES) 
+sinfo_cube_coadd_test$(EXEEXT): $(sinfo_cube_coadd_test_OBJECTS) $(sinfo_cube_coadd_test_DEPENDENCIES) $(EXTRA_sinfo_cube_coadd_test_DEPENDENCIES) 
 	@rm -f sinfo_cube_coadd_test$(EXEEXT)
 	$(LINK) $(sinfo_cube_coadd_test_OBJECTS) $(sinfo_cube_coadd_test_LDADD) $(LIBS)
-sinfo_cube_ops_test$(EXEEXT): $(sinfo_cube_ops_test_OBJECTS) $(sinfo_cube_ops_test_DEPENDENCIES) 
+sinfo_cube_ops_test$(EXEEXT): $(sinfo_cube_ops_test_OBJECTS) $(sinfo_cube_ops_test_DEPENDENCIES) $(EXTRA_sinfo_cube_ops_test_DEPENDENCIES) 
 	@rm -f sinfo_cube_ops_test$(EXEEXT)
 	$(LINK) $(sinfo_cube_ops_test_OBJECTS) $(sinfo_cube_ops_test_LDADD) $(LIBS)
-sinfo_efficiency_test$(EXEEXT): $(sinfo_efficiency_test_OBJECTS) $(sinfo_efficiency_test_DEPENDENCIES) 
+sinfo_efficiency_test$(EXEEXT): $(sinfo_efficiency_test_OBJECTS) $(sinfo_efficiency_test_DEPENDENCIES) $(EXTRA_sinfo_efficiency_test_DEPENDENCIES) 
 	@rm -f sinfo_efficiency_test$(EXEEXT)
 	$(LINK) $(sinfo_efficiency_test_OBJECTS) $(sinfo_efficiency_test_LDADD) $(LIBS)
-sinfo_gauss_fit_test$(EXEEXT): $(sinfo_gauss_fit_test_OBJECTS) $(sinfo_gauss_fit_test_DEPENDENCIES) 
+sinfo_gauss_fit_test$(EXEEXT): $(sinfo_gauss_fit_test_OBJECTS) $(sinfo_gauss_fit_test_DEPENDENCIES) $(EXTRA_sinfo_gauss_fit_test_DEPENDENCIES) 
 	@rm -f sinfo_gauss_fit_test$(EXEEXT)
 	$(LINK) $(sinfo_gauss_fit_test_OBJECTS) $(sinfo_gauss_fit_test_LDADD) $(LIBS)
-sinfo_image_ops_test$(EXEEXT): $(sinfo_image_ops_test_OBJECTS) $(sinfo_image_ops_test_DEPENDENCIES) 
+sinfo_image_ops_test$(EXEEXT): $(sinfo_image_ops_test_OBJECTS) $(sinfo_image_ops_test_DEPENDENCIES) $(EXTRA_sinfo_image_ops_test_DEPENDENCIES) 
 	@rm -f sinfo_image_ops_test$(EXEEXT)
 	$(LINK) $(sinfo_image_ops_test_OBJECTS) $(sinfo_image_ops_test_LDADD) $(LIBS)
-sinfo_kappa_sigma_test$(EXEEXT): $(sinfo_kappa_sigma_test_OBJECTS) $(sinfo_kappa_sigma_test_DEPENDENCIES) 
+sinfo_kappa_sigma_test$(EXEEXT): $(sinfo_kappa_sigma_test_OBJECTS) $(sinfo_kappa_sigma_test_DEPENDENCIES) $(EXTRA_sinfo_kappa_sigma_test_DEPENDENCIES) 
 	@rm -f sinfo_kappa_sigma_test$(EXEEXT)
 	$(LINK) $(sinfo_kappa_sigma_test_OBJECTS) $(sinfo_kappa_sigma_test_LDADD) $(LIBS)
-sinfo_line_corr_test$(EXEEXT): $(sinfo_line_corr_test_OBJECTS) $(sinfo_line_corr_test_DEPENDENCIES) 
+sinfo_line_corr_test$(EXEEXT): $(sinfo_line_corr_test_OBJECTS) $(sinfo_line_corr_test_DEPENDENCIES) $(EXTRA_sinfo_line_corr_test_DEPENDENCIES) 
 	@rm -f sinfo_line_corr_test$(EXEEXT)
 	$(LINK) $(sinfo_line_corr_test_OBJECTS) $(sinfo_line_corr_test_LDADD) $(LIBS)
-sinfo_skycor_test$(EXEEXT): $(sinfo_skycor_test_OBJECTS) $(sinfo_skycor_test_DEPENDENCIES) 
+sinfo_skycor_test$(EXEEXT): $(sinfo_skycor_test_OBJECTS) $(sinfo_skycor_test_DEPENDENCIES) $(EXTRA_sinfo_skycor_test_DEPENDENCIES) 
 	@rm -f sinfo_skycor_test$(EXEEXT)
 	$(LINK) $(sinfo_skycor_test_OBJECTS) $(sinfo_skycor_test_LDADD) $(LIBS)
-sinfo_star_catalog$(EXEEXT): $(sinfo_star_catalog_OBJECTS) $(sinfo_star_catalog_DEPENDENCIES) 
+sinfo_star_catalog$(EXEEXT): $(sinfo_star_catalog_OBJECTS) $(sinfo_star_catalog_DEPENDENCIES) $(EXTRA_sinfo_star_catalog_DEPENDENCIES) 
 	@rm -f sinfo_star_catalog$(EXEEXT)
 	$(LINK) $(sinfo_star_catalog_OBJECTS) $(sinfo_star_catalog_LDADD) $(LIBS)
-sinfo_star_index_test$(EXEEXT): $(sinfo_star_index_test_OBJECTS) $(sinfo_star_index_test_DEPENDENCIES) 
+sinfo_star_index_test$(EXEEXT): $(sinfo_star_index_test_OBJECTS) $(sinfo_star_index_test_DEPENDENCIES) $(EXTRA_sinfo_star_index_test_DEPENDENCIES) 
 	@rm -f sinfo_star_index_test$(EXEEXT)
 	$(LINK) $(sinfo_star_index_test_OBJECTS) $(sinfo_star_index_test_LDADD) $(LIBS)
-sinfo_strehl_test$(EXEEXT): $(sinfo_strehl_test_OBJECTS) $(sinfo_strehl_test_DEPENDENCIES) 
+sinfo_strehl_test$(EXEEXT): $(sinfo_strehl_test_OBJECTS) $(sinfo_strehl_test_DEPENDENCIES) $(EXTRA_sinfo_strehl_test_DEPENDENCIES) 
 	@rm -f sinfo_strehl_test$(EXEEXT)
 	$(LINK) $(sinfo_strehl_test_OBJECTS) $(sinfo_strehl_test_LDADD) $(LIBS)
-sinfo_table_ops_test$(EXEEXT): $(sinfo_table_ops_test_OBJECTS) $(sinfo_table_ops_test_DEPENDENCIES) 
+sinfo_table_ops_test$(EXEEXT): $(sinfo_table_ops_test_OBJECTS) $(sinfo_table_ops_test_DEPENDENCIES) $(EXTRA_sinfo_table_ops_test_DEPENDENCIES) 
 	@rm -f sinfo_table_ops_test$(EXEEXT)
 	$(LINK) $(sinfo_table_ops_test_OBJECTS) $(sinfo_table_ops_test_LDADD) $(LIBS)
-test_atmo_disp$(EXEEXT): $(test_atmo_disp_OBJECTS) $(test_atmo_disp_DEPENDENCIES) 
+test_atmo_disp$(EXEEXT): $(test_atmo_disp_OBJECTS) $(test_atmo_disp_DEPENDENCIES) $(EXTRA_test_atmo_disp_DEPENDENCIES) 
 	@rm -f test_atmo_disp$(EXEEXT)
 	$(LINK) $(test_atmo_disp_OBJECTS) $(test_atmo_disp_LDADD) $(LIBS)
 
@@ -604,14 +631,15 @@ check-TESTS: $(TESTS)
 	  fi; \
 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
 	  if test "$$failed" -eq 0; then \
-	    echo "$$grn$$dashes"; \
+	    col="$$grn"; \
 	  else \
-	    echo "$$red$$dashes"; \
+	    col="$$red"; \
 	  fi; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes$$std"; \
+	  echo "$${col}$$dashes$${std}"; \
+	  echo "$${col}$$banner$${std}"; \
+	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+	  test -z "$$report" || echo "$${col}$$report$${std}"; \
+	  echo "$${col}$$dashes$${std}"; \
 	  test "$$failed" -eq 0; \
 	else :; fi
 
@@ -661,10 +689,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
 mostlyclean-generic:
 
 clean-generic:
diff --git a/sinfoni/tests/sinfo_cube_coadd_test.c b/sinfoni/tests/sinfo_cube_coadd_test.c
index 2726f2a..16c1359 100644
--- a/sinfoni/tests/sinfo_cube_coadd_test.c
+++ b/sinfoni/tests/sinfo_cube_coadd_test.c
@@ -19,43 +19,9 @@
  
 /*
  * $Author: amodigli $
- * $Date: 2009/06/05 06:06:11 $
- * $Revision: 1.9 $
- * $Name: sinfo-2_3_3 $
- * $Log: sinfo_cube_coadd_test.c,v $
- * Revision 1.9  2009/06/05 06:06:11  amodigli
- * updated init/end to cpl5
- *
- * Revision 1.8  2008/02/12 10:09:49  amodigli
- * shortened lines
- *
- * Revision 1.7  2008/02/12 09:09:13  amodigli
- * updated sinfo_cube_coadd_test
- *
- * Revision 1.6  2007/08/14 06:04:40  amodigli
- * activate synthetic test
- *
- * Revision 1.5  2007/08/11 10:42:46  amodigli
- * make test work
- *
- * Revision 1.4  2007/08/10 08:50:21  amodigli
- * added some more comments
- *
- * Revision 1.3  2007/08/10 08:10:03  amodigli
- * updated cube test
- *
- * Revision 1.2  2007/08/10 06:36:47  amodigli
- * fixed leaks
- *
- * Revision 1.1  2007/08/09 13:00:31  amodigli
- * added to repository
- *
- * Revision 1.2  2007/03/27 14:38:48  amodigli
- * fixed compilation warnings
- *
- * Revision 1.1  2007/02/23 13:10:24  amodigli
- * added test
- *
+ * $Date: 2013/08/15 11:49:35 $
+ * $Revision: 1.10 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
@@ -127,27 +93,23 @@ sinfo_cube_gen_gauss2d_with_noise(const int sx,
   for(z=0;z<sz;z++) {
     y =a0+a1*x*z+a2*x*z*z;
     //sinfo_msg_warning("amp=%f",y);
-    check_nomsg(img_o=cpl_image_new(sx,sy,CPL_TYPE_FLOAT));
-    check_nomsg(img_s=cpl_image_new(sx,sy,CPL_TYPE_FLOAT));
-    check_nomsg(cpl_image_fill_gaussian(img_o,xc,yc,y,sigx,sigy));
-    check_nomsg(cpl_image_fill_noise_uniform(img_s,min_noise,max_noise));
-    check_nomsg(cpl_image_add(img_o,img_s));
+    img_o=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
+    img_s=cpl_image_new(sx,sy,CPL_TYPE_FLOAT);
+    cpl_image_fill_gaussian(img_o,xc,yc,y,sigx,sigy);
+    cpl_image_fill_noise_uniform(img_s,min_noise,max_noise);
+    cpl_image_add(img_o,img_s);
     sinfo_free_image(&img_s);
     sprintf(name,"%s%d%s","img_",z,".fits");
-    check_nomsg(cpl_image_save(img_o,name,CPL_BPP_IEEE_FLOAT,
-			       NULL,CPL_IO_DEFAULT));
-    check_nomsg(cpl_imagelist_set(cube,img_o,z));
+    cpl_image_save(img_o,name,CPL_BPP_IEEE_FLOAT,
+			       NULL,CPL_IO_DEFAULT);
+    cpl_imagelist_set(cube,img_o,z);
   }
 
-
- cleanup:
   return cube;
 
 }
 
 
-
-
 /**
    @brief      test cube coaddition compuatation
  */
diff --git a/sinfoni/tests/sinfo_cube_ops_test.c b/sinfoni/tests/sinfo_cube_ops_test.c
index 8ab1567..5571ecd 100644
--- a/sinfoni/tests/sinfo_cube_ops_test.c
+++ b/sinfoni/tests/sinfo_cube_ops_test.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2009/06/05 06:06:11 $
  * $Revision: 1.6 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_cube_ops_test.c,v $
  * Revision 1.6  2009/06/05 06:06:11  amodigli
  * updated init/end to cpl5
diff --git a/sinfoni/tests/sinfo_efficiency_test.c b/sinfoni/tests/sinfo_efficiency_test.c
index 408fb57..a3f05f1 100644
--- a/sinfoni/tests/sinfo_efficiency_test.c
+++ b/sinfoni/tests/sinfo_efficiency_test.c
@@ -18,36 +18,8 @@
  */
 /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.9 $
- * $Log: sinfo_efficiency_test.c,v $
- * Revision 1.9  2012/09/18 06:53:36  amodigli
- * fixed warnings from clang
- *
- * Revision 1.8  2010/02/08 07:20:41  amodigli
- * several changes to reflect efficiency functions API changes
- *
- * Revision 1.7  2010/01/14 14:09:14  amodigli
- * added prefix sinfo_ to data_interpolate function call
- *
- * Revision 1.6  2009/06/19 14:37:58  kmirny
- * star index implementation
- *
- * Revision 1.5  2009/06/16 15:13:43  kmirny
- * fit gaussian test
- *
- * Revision 1.4  2009/06/15 08:17:12  kmirny
- * put aimprim level up to prepared to use as a recipe parameter
- *
- * Revision 1.3  2009/06/10 14:58:31  kmirny
- * sinfoni efficiency utility recipe
- *
- * Revision 1.2  2009/06/09 14:58:04  kmirny
- * sinfoni efficiency unit test
- *
- * Revision 1.1  2009/06/09 08:57:18  kmirny
- * adding test for sinfo_utl_efficiency
- *
+ * $Date: 2013/08/15 11:55:52 $
+ * $Revision: 1.12 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -245,7 +217,7 @@ static cpl_table* prepare_ref(double exp_time, double tel_area)
 	cpl_test(NROWS_REF == sizeof(wavelength_buf) / sizeof(wavelength_buf[0]));
 	cpl_test(NROWS_REF == sizeof(flux_buf) / sizeof(flux_buf[0]));
 	int i = 0;
-	for (i = 0; i < sizeof(flux_buf) / sizeof(flux_buf[0]); i++)
+	for (i = 0; i < NROWS_REF; i++)
 	{
 		flux_buf[i] /= exp_time * tel_area;
 	}
@@ -289,7 +261,7 @@ static void eff_test(void)
 
 
 	// check the result table
-	cpl_assert(tbl_result);
+	cpl_test_nonnull(tbl_result);
 
 	// size should be the same as the spectrum table
 	int result_size = cpl_table_get_nrow(tbl_result);
diff --git a/sinfoni/tests/sinfo_image_ops_test.c b/sinfoni/tests/sinfo_image_ops_test.c
index 985dbf8..5e6d272 100644
--- a/sinfoni/tests/sinfo_image_ops_test.c
+++ b/sinfoni/tests/sinfo_image_ops_test.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2009/06/05 06:06:11 $
  * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_image_ops_test.c,v $
  * Revision 1.8  2009/06/05 06:06:11  amodigli
  * updated init/end to cpl5
diff --git a/sinfoni/tests/sinfo_kappa_sigma_test.c b/sinfoni/tests/sinfo_kappa_sigma_test.c
index 3af4b06..b004405 100644
--- a/sinfoni/tests/sinfo_kappa_sigma_test.c
+++ b/sinfoni/tests/sinfo_kappa_sigma_test.c
@@ -18,34 +18,9 @@
  *                                                                           */
  /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.8 $
- * $Name: sinfo-2_3_3 $
- * $Log: sinfo_kappa_sigma_test.c,v $
- * Revision 1.8  2012/09/18 06:53:36  amodigli
- * fixed warnings from clang
- *
- * Revision 1.7  2012/09/18 06:40:28  amodigli
- * fixed some warnings from clang
- *
- * Revision 1.6  2012/04/26 15:23:49  amodigli
- * cleaned errors from Jenkins static checks
- *
- * Revision 1.5  2009/07/29 09:06:24  amodigli
- * fixed compiler error due to change API of cube_coad_with_ks_optimized
- *
- * Revision 1.4  2009/06/03 12:56:49  kmirny
- * round-shift test for kappa-sigma clipping
- *
- * Revision 1.3  2009/06/03 11:13:51  kmirny
- * unit test with gaussian
- *
- * Revision 1.2  2009/06/02 15:02:23  kmirny
- * mask for NAN value was fixed
- *
- * Revision 1.1  2009/05/29 13:10:43  kmirny
- * kappa-sigma clipping test
- *
+ * $Date: 2013/08/02 14:23:25 $
+ * $Revision: 1.11 $
+ * $Name: sinfo-2_4_0 $
   */
 /*
  * set of libraries for testing kappa-sigma clipping
@@ -87,8 +62,11 @@ struct _KS_Array_Data
 typedef struct _KS_Array_Data KS_Array_Data;
 
 // forward declarations
-cpl_image* prepare_plane_gauss(int sizeX, int sizeY, double noiseLevel, double signal_level, int GAUSS_CENTER_X, int GAUSS_CENTER_Y, double gNORM, double gSIGMA);
-cpl_image* prepare_plane_noise(int sizeX, int sizeY, double SIGNAL_LEVEL, double SIGNAL_NOISE_LEVEL);
+cpl_image* prepare_plane_gauss(int sizeX, int sizeY, double noiseLevel,
+                               double signal_level, int GAUSS_CENTER_X,
+                               int GAUSS_CENTER_Y, double gNORM, double gSIGMA);
+cpl_image* prepare_plane_noise(int sizeX, int sizeY, double SIGNAL_LEVEL,
+                               double SIGNAL_NOISE_LEVEL);
 cpl_image* prepare_plane_square_shape();
 void set_defect(cpl_image* pImage, int defectX, int defectY, double value);
 ///////////
@@ -106,7 +84,8 @@ int check_arr_data(KS_Array_Data* pData)
 		if (!isnan(value))
 			cpl_array_set(pArray, z, value);
 	}
-	double result = kappa_sigma_array_with_mask(pArray, BUF_ARRAY_SIZE, pData->kappa,0, exptimes, 0, 0,0);
+	double result = sinfo_kappa_sigma_array_with_mask(pArray, BUF_ARRAY_SIZE,
+	                pData->kappa,0, exptimes, 0, 0,0);
 	cpl_test_abs(result,pData->dResult,EPSILON);
 	int resInvalidPoints = cpl_array_count_invalid(pArray);
 	cpl_test_eq(resInvalidPoints, pData->nInvalidPoints);
@@ -188,8 +167,10 @@ int kappa_sigma_array_test(void)
 
 int kappa_sigma_chessboard_test()
 {
-	// create a 2*N images with chessboard with 1 pixel shift for each
-	// coaddition should produce an image with the same values for the each pixel (in the overlayed area)
+	/* create a 2*N images with chessboard with 1 pixel shift for each
+	 * coaddition should produce an image with the same values for the
+     * each pixel (in the overlayed area)
+     */
 	const int sizeX = 24;
 	const int sizeY = 24;
 	const int nCubes = 2; // should be even
@@ -336,7 +317,7 @@ int prepare_cube(cpl_imagelist** ppCubes, TEST_IMAGE_TYPE type, int sizeX, int s
 
 cpl_image* prepare_plane_gauss(int sizeX, int sizeY, double noiseLevel, double signal_level, int GAUSS_CENTER_X, int GAUSS_CENTER_Y, double gNORM, double gSIGMA)
 {
-	cpl_image *pRet = 0;
+	cpl_image *pRet = NULL;
 	cpl_image* pNoise = cpl_image_new(sizeX, sizeY, CPL_TYPE_DOUBLE);
 
 	check_nomsg(cpl_image_fill_noise_uniform(pNoise, signal_level - noiseLevel, signal_level + noiseLevel));
@@ -347,8 +328,8 @@ cpl_image* prepare_plane_gauss(int sizeX, int sizeY, double noiseLevel, double s
 	cpl_image_delete(pNoise);
 	return pRet;
 	cleanup:
-	cpl_assert(!"error in prepare_plane gauss");
-	return 0;
+	sinfo_msg_error("error in prepare_plane gauss");
+	return NULL;
 }
 
 cpl_image* prepare_plane_noise(int sizeX, int sizeY, double SIGNAL_LEVEL, double SIGNAL_NOISE_LEVEL)
@@ -358,8 +339,8 @@ cpl_image* prepare_plane_noise(int sizeX, int sizeY, double SIGNAL_LEVEL, double
 	check_nomsg(cpl_image_fill_noise_uniform(pRet, SIGNAL_LEVEL - SIGNAL_NOISE_LEVEL, SIGNAL_LEVEL + SIGNAL_NOISE_LEVEL));
 	return pRet;
 	cleanup:
-	cpl_assert(!"error in prepare_plain_noise");
-	return 0;
+	sinfo_msg_error("error in prepare_plain_noise");
+	return NULL;
 }
 
 cpl_image* prepare_plane_square_shape()
diff --git a/sinfoni/tests/sinfo_line_corr_test.c b/sinfoni/tests/sinfo_line_corr_test.c
index b3b9aee..bd3ffe4 100644
--- a/sinfoni/tests/sinfo_line_corr_test.c
+++ b/sinfoni/tests/sinfo_line_corr_test.c
@@ -19,16 +19,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.2 $
- * $Name: sinfo-2_3_3 $
- * $Log: sinfo_line_corr_test.c,v $
- * Revision 1.2  2012/09/18 06:53:36  amodigli
- * fixed warnings from clang
- *
- * Revision 1.1  2009/09/02 12:18:02  kmirny
- * updating unit tests
- *
+ * $Date: 2013/08/15 12:39:35 $
+ * $Revision: 1.4 $
+ * $Name: sinfo-2_4_0 $
  * */
 
 #ifdef HAVE_CONFIG_H
@@ -67,8 +60,8 @@ static cpl_image* prepare_image(double* sigma)
 	// create a line
 	for (i = 3; i < IMG_SZX - 4; i++)
 	{
-		int pis_rejected;
-		double value = cpl_image_get(pimage,i + 1,  LINE_POS + (i%5), &pis_rejected);
+	  //int pis_rejected;
+		//double value = cpl_image_get(pimage,i + 1,  LINE_POS + (i%5), &pis_rejected);
 		cpl_image_set(pimage, i + 1, LINE_POS, /*value*/ LINE_VALUE);
 		cpl_image_set(pimage, i + 1, LINE_POS + 100, /*value*/ LINE_VALUE);
 	}
diff --git a/sinfoni/tests/sinfo_skycor_test.c b/sinfoni/tests/sinfo_skycor_test.c
index f1614e9..5e648cd 100644
--- a/sinfoni/tests/sinfo_skycor_test.c
+++ b/sinfoni/tests/sinfo_skycor_test.c
@@ -21,7 +21,7 @@
  * $Author: amodigli $
  * $Date: 2009/06/05 06:06:11 $
  * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_skycor_test.c,v $
  * Revision 1.5  2009/06/05 06:06:11  amodigli
  * updated init/end to cpl5
diff --git a/sinfoni/tests/sinfo_star_catalog.c b/sinfoni/tests/sinfo_star_catalog.c
index d1940c8..ec1b0c5 100644
--- a/sinfoni/tests/sinfo_star_catalog.c
+++ b/sinfoni/tests/sinfo_star_catalog.c
@@ -18,21 +18,8 @@
  */
 /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.4 $
- * $Log: sinfo_star_catalog.c,v $
- * Revision 1.4  2012/09/18 06:53:36  amodigli
- * fixed warnings from clang
- *
- * Revision 1.3  2010/08/20 08:59:16  kmirny
- * fixing problem with removing from catalog
- *
- * Revision 1.2  2009/09/02 12:18:02  kmirny
- * updating unit tests
- *
- * Revision 1.1  2009/07/17 07:29:03  kmirny
- * star catalog
- *
+ * $Date: 2013/08/15 12:05:49 $
+ * $Revision: 1.8 $
  */
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
@@ -40,6 +27,7 @@
 
 #include <stdio.h>
 //#include <unistd.h>
+#include <string.h>
 
 #include <cpl.h>
 #include <cpl_test.h>
@@ -58,7 +46,7 @@ const char* COL_NAME_DATA = "DATA";
 const char* FILE_NAME_FITS = "tmp_star_catalog.fits";
 const char* FILE_NAME_FITS2 = "tmp_star_catalog2.fits";
 
-typedef struct _STAR_COORD_
+struct _STAR_COORD_
 {
 	double RA;
 	double DEC;
@@ -96,7 +84,7 @@ static cpl_table* create_data_table(double data_value)
 	return retval;
 }
 
-static void check_index(star_index* pindex, STAR_COORD* pcoords, int size)
+static void check_index(star_index* pindex, const STAR_COORD* pcoords, int size)
 {
 	int i = 0;
 	for (i = 0; i < size; i++)
@@ -111,7 +99,7 @@ static void check_index(star_index* pindex, STAR_COORD* pcoords, int size)
         return;
 }
 
-static void fill_index(star_index* pindex, STAR_COORD* pcoords, int size)
+static void fill_index(star_index* pindex, const STAR_COORD* pcoords, int size)
 {
 	int i = 0;
 	for (i = 0; i < size; i++ )
@@ -128,7 +116,7 @@ static void add_data_test()
 
 	star_index* pindex = star_index_create();
 	cpl_test(pindex);
-	int i = 0;
+      
 	fill_index (pindex,coords, sizeof(coords) / sizeof(coords[0]));
 	check_index(pindex,coords, sizeof(coords) / sizeof(coords[0]));
 	star_index_save(pindex, FILE_NAME_FITS);
@@ -216,7 +204,7 @@ static void save_catalog(star_index* pindex, const char* fits_file_name)
 	//1. save to the new file
 	star_index_save(pindex, TMP_FILE_NAME);
 	//2. rename old file to .bak
-	const char* bak_filename = cpl_malloc(strlen(fits_file_name) + strlen(EXT_BAK) + 1);
+	char* bak_filename = cpl_malloc(strlen(fits_file_name) + strlen(EXT_BAK) + 1);
 	strcpy(bak_filename, fits_file_name);
 	strcpy(bak_filename + strlen(fits_file_name) , EXT_BAK);
 	rename(fits_file_name, bak_filename); // don't care about result
@@ -312,10 +300,10 @@ int main(int argc, char * const argv[])
 	}
 
 
-//	create_empty_test();
-//	add_data_test();
-//	load_file_test();
-//	create();
-//	cpl_test_end(0);
-	return 0;//
+	create_empty_test();
+	add_data_test();
+	load_file_test();
+	create();
+	cpl_test_end(0);
+	return 0;
 }
diff --git a/sinfoni/tests/sinfo_star_index_test.c b/sinfoni/tests/sinfo_star_index_test.c
index 0eeea4b..cc76f60 100644
--- a/sinfoni/tests/sinfo_star_index_test.c
+++ b/sinfoni/tests/sinfo_star_index_test.c
@@ -18,24 +18,15 @@
  */
 /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.3 $
- * $Log: sinfo_star_index_test.c,v $
- * Revision 1.3  2012/09/18 06:53:36  amodigli
- * fixed warnings from clang
- *
- * Revision 1.2  2009/07/13 14:40:39  kmirny
- * fixing unit test failure in star catalog
- *
- * Revision 1.1  2009/06/19 14:43:25  kmirny
- * sinfo star index test
- *
+ * $Date: 2013/08/15 12:07:25 $
+ * $Revision: 1.8 $
  */
 #ifdef HAVE_CONFIG_H
 #  include <config.h>
 #endif
 
 #include <stdio.h>
+#include <string.h>
 #include <cpl.h>
 #include <cpl_test.h>
 #include <sinfo_pro_save.h>
@@ -52,7 +43,7 @@ const char* COL_NAME_DATA = "DATA";
 const char* FILE_NAME_FITS = "tmp_star_catalog.fits";
 const char* FILE_NAME_FITS2 = "tmp_star_catalog2.fits";
 
-typedef struct _STAR_COORD_
+struct _STAR_COORD_
 {
 	double RA;
 	double DEC;
@@ -90,7 +81,7 @@ static cpl_table* create_data_table(double data_value)
 	return retval;
 }
 
-static void check_index(star_index* pindex, STAR_COORD* pcoords, int size)
+static void check_index(star_index* pindex, const STAR_COORD* pcoords, int size)
 {
 	int i = 0;
 	for (i = 0; i < size; i++)
@@ -105,7 +96,7 @@ static void check_index(star_index* pindex, STAR_COORD* pcoords, int size)
         return;
 }
 
-static void fill_index(star_index* pindex, STAR_COORD* pcoords, int size)
+static void fill_index(star_index* pindex, const STAR_COORD* pcoords, int size)
 {
 	int i = 0;
 	for (i = 0; i < size; i++ )
@@ -121,7 +112,7 @@ static void add_data_test()
 {
 	star_index* pindex = star_index_create();
 	cpl_test(pindex);
-	int i = 0;
+       
 	fill_index (pindex,coords, sizeof(coords) / sizeof(coords[0]));
 	check_index(pindex,coords, sizeof(coords) / sizeof(coords[0]));
 	star_index_save(pindex, FILE_NAME_FITS);
diff --git a/sinfoni/tests/sinfo_strehl_test.c b/sinfoni/tests/sinfo_strehl_test.c
index 5086ff8..291beb6 100644
--- a/sinfoni/tests/sinfo_strehl_test.c
+++ b/sinfoni/tests/sinfo_strehl_test.c
@@ -19,64 +19,9 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2009/06/05 06:06:11 $
- * $Revision: 1.17 $
- * $Name: sinfo-2_3_3 $
- * $Log: sinfo_strehl_test.c,v $
- * Revision 1.17  2009/06/05 06:06:11  amodigli
- * updated init/end to cpl5
- *
- * Revision 1.16  2008/02/28 10:49:37  amodigli
- * fixed compilation errors due to changed interface
- *
- * Revision 1.15  2008/02/12 10:09:49  amodigli
- * shortened lines
- *
- * Revision 1.14  2008/02/12 09:09:52  amodigli
- * fixed seg fault due to function name change
- *
- * Revision 1.13  2008/01/22 07:37:21  amodigli
- * comment out tests wich require external input
- *
- * Revision 1.12  2008/01/22 07:34:44  amodigli
- * cleaned output
- *
- * Revision 1.11  2008/01/17 07:21:54  amodigli
- * removed clipm modeules
- *
- * Revision 1.10  2008/01/07 08:03:52  amodigli
- * added tests to check MSM results
- *
- * Revision 1.9  2007/08/15 14:31:36  amodigli
- * fixed errors in strehl computation, added expected-measured values
- *
- * Revision 1.8  2007/08/09 12:59:36  amodigli
- * removed irplib_error_dump
- *
- * Revision 1.7  2007/07/28 13:33:05  amodigli
- * fixed typo
- *
- * Revision 1.6  2007/07/27 06:29:51  amodigli
- * replaced CPL_BPP_DEFAULT with CPL_BPP_IEEE_FLOAT
- *
- * Revision 1.5  2007/05/09 08:28:52  amodigli
- * removed test3 and shortened line length
- *
- * Revision 1.4  2007/04/14 23:34:57  amodigli
- * added test_strehl3 test_strehl4
- *
- * Revision 1.3  2007/04/06 07:10:06  amodigli
- * cleaning
- *
- * Revision 1.2  2007/04/03 14:26:06  amodigli
- * Factorised common variable setting
- *
- * Revision 1.1  2007/03/05 07:31:51  amodigli
- * added sinfo_strehl_test
- *
- * Revision 1.1  2007/02/23 13:10:24  amodigli
- * added test
- *
+ * $Date: 2013/08/15 12:43:47 $
+ * $Revision: 1.21 $
+ * $Name: sinfo-2_4_0 $
  */
 
 /*-----------------------------------------------------------------------------
@@ -156,8 +101,8 @@ test_small(void)
   int i=0;
 
 
-    check_nomsg(the=cpl_table_load("xshTHE_vis.fits",1,0));
-    check_nomsg(plist=cpl_propertylist_load("xshTHE_vis.fits",0));
+    check_nomsg(the=cpl_table_load(name,1,0));
+    check_nomsg(plist=cpl_propertylist_load(name,0));
   
   check_nomsg(cpl_table_erase_column(the,"Wavelength"));
   check_nomsg(cpl_table_duplicate_column(the,"tmp",the,"IDENT"));
@@ -207,7 +152,7 @@ test_flux(void)
   int sx=SINFO_TEST_NX;
   int sy=SINFO_TEST_NY;
   cpl_image* mask=NULL;
-  cpl_image* img_w=NULL;
+  //cpl_image* img_w=NULL;
   int* pm=NULL;
   int i=0;
   int j=0;
@@ -263,11 +208,12 @@ test_psf(void)
   double m1=SINFO_TEST_STREHL_M1;
   double m2=SINFO_TEST_STREHL_M2;
   double w=2.2e-6;
-  double p1=0.0125;
+  //double p1=0.0125;
   double p2=0.0250;
   double p3=0.0500;
-  double p4=0.100;
-  double pr=p2;
+  //double p4=0.100;
+ 
+  //double pr=p2;
 
   sinfo_msg_warning("change pixel scale");
   /*
@@ -379,8 +325,8 @@ test_strehl_one(void)
   double r3=SINFO_TEST_R2*pscale;
 
   int size=SINFO_TEST_STREHL_BOX_SIZE;
-  int noise_box_sz=SINFO_TEST_STREHL_BOX_SIZE;
-  int noise_nsamples=SINFO_TEST_NOISE_NSAMPLES;
+  //int noise_box_sz=SINFO_TEST_STREHL_BOX_SIZE;
+  //int noise_nsamples=SINFO_TEST_NOISE_NSAMPLES;
   double strehl=0;
   double strehl_err=0;
   double star_bkg=0;
@@ -457,7 +403,7 @@ test_strehl_two(void)
   double m2= SINFO_TEST_STREHL_M2;
   double lam=2.2;
 
-  double dlam=0.543410;
+  //double dlam=0.543410;
   double pscale1=0.025;
   double pscale2=0.10;
   double xpos1=0;
@@ -468,9 +414,9 @@ test_strehl_two(void)
   double r2=SINFO_TEST_R1*pscale1;
   double r3=SINFO_TEST_R2*pscale1;
 
-  int size=SINFO_TEST_STREHL_BOX_SIZE;
-  int noise_box_sz=SINFO_TEST_STREHL_BOX_SIZE;
-  int noise_nsamples=SINFO_TEST_NOISE_NSAMPLES;
+  //int size=SINFO_TEST_STREHL_BOX_SIZE;
+  //int noise_box_sz=SINFO_TEST_STREHL_BOX_SIZE;
+  //int noise_nsamples=SINFO_TEST_NOISE_NSAMPLES;
   double strehl=0;
   double strehl_err=0;
   double star_bkg=0;
@@ -594,8 +540,8 @@ test_strehl(const double accuracy)
   cpl_image* ima_obj=NULL;
   cpl_image* ima_noise=NULL;
 
-  int max_ima_x=0;
-  int max_ima_y=0;
+  cpl_size max_ima_x=0;
+  cpl_size max_ima_y=0;
 
   double lam=SINFO_TEST_WAV;
   double dlam=SINFO_TEST_DWAV;
@@ -794,10 +740,10 @@ test_strehl2(const double accuracy)
   double bkg_val=SINFO_TEST_BKG;
   double min_pix=-sqrt(bkg_val);
   double max_pix=+sqrt(bkg_val);
-  int max_ima_x1=0;
-  int max_ima_y1=0;
-  int max_ima_x2=0;
-  int max_ima_y2=0;
+  cpl_size max_ima_x1=0;
+  cpl_size max_ima_y1=0;
+  cpl_size max_ima_x2=0;
+  cpl_size max_ima_y2=0;
 
   double lam=SINFO_TEST_WAV;
   double dlam=SINFO_TEST_DWAV;
@@ -884,8 +830,8 @@ test_strehl2(const double accuracy)
   fluxm1=cpl_image_get_flux(ima1_obj);
   fluxm2=cpl_image_get_flux(ima2_obj);
 
-  //assure(fabs((fluxm1-flux1)/flux1) <accuracy, CPL_ERROR_UNSPECIFIED,
-  // "Flux1 ima[e/m]=[%g/%g]",flux1,fluxm1);
+  assure(fabs((fluxm1-flux1)/flux1) <accuracy, CPL_ERROR_UNSPECIFIED,
+   "Flux1 ima[e/m]=[%g/%g]",flux1,fluxm1);
 
   //assure(fabs((fluxm2-flux2)/flux2) <accuracy, CPL_ERROR_UNSPECIFIED,
   // "Flux2 ima[e/m]=[%g/%g]",flux2,fluxm2);
@@ -1123,7 +1069,7 @@ test_strehl2(const double accuracy)
 /*----------------------------------------------------------------------------*/
 
 
-int main(int args, char *argv[])
+int main()
 {
   cpl_test_init(PACKAGE_BUGREPORT, CPL_MSG_WARNING);
   cpl_errorstate initial_errorstate = cpl_errorstate_get();
@@ -1146,7 +1092,7 @@ int main(int args, char *argv[])
         cpl_errorstate_dump(initial_errorstate, CPL_FALSE, NULL);              
     } 
 
- cleanup:
+    //cleanup:
 
   return cpl_test_end(0);
 }
diff --git a/sinfoni/tests/sinfo_table_ops_test.c b/sinfoni/tests/sinfo_table_ops_test.c
index ea13b69..d2d3eb9 100644
--- a/sinfoni/tests/sinfo_table_ops_test.c
+++ b/sinfoni/tests/sinfo_table_ops_test.c
@@ -19,10 +19,13 @@
  
 /*
  * $Author: amodigli $
- * $Date: 2012/04/26 15:23:49 $
- * $Revision: 1.5 $
- * $Name: sinfo-2_3_3 $
+ * $Date: 2013/08/15 12:29:21 $
+ * $Revision: 1.6 $
+ * $Name: sinfo-2_4_0 $
  * $Log: sinfo_table_ops_test.c,v $
+ * Revision 1.6  2013/08/15 12:29:21  amodigli
+ * fixed compiler warnings
+ *
  * Revision 1.5  2012/04/26 15:23:49  amodigli
  * cleaned errors from Jenkins static checks
  *
@@ -119,7 +122,7 @@ test_table_flag_nan(void)
 
   for(i=0;i<sz;i++) {
     sinfo_msg_warning("pval=%f",pval[i]);
-    sinfo_msg_warning("pseq=%f",pseq[i]);
+    sinfo_msg_warning("pseq=%d",pseq[i]);
     check_nomsg(pseq[i]=i);
     check_nomsg(pval[i]=(double)sqrt(fabs(i)));
     sinfo_msg("seg=%d val=%g",pseq[i],pval[i]);
@@ -132,7 +135,7 @@ test_table_flag_nan(void)
     if(isnan(pval[i])) {
       cpl_table_set_invalid(tab,"VAL",i);
       cpl_table_set_invalid(tab,"SEQ",i);
-      sinfo_msg_warning("pval=%f pseq=%f",pval[i],pseq[i]);
+      sinfo_msg_warning("pval=%f pseq=%d",pval[i],pseq[i]);
     }
   }
 
diff --git a/sinfoni/tests/test_atmo_disp.c b/sinfoni/tests/test_atmo_disp.c
index c1438e6..319ff58 100644
--- a/sinfoni/tests/test_atmo_disp.c
+++ b/sinfoni/tests/test_atmo_disp.c
@@ -19,8 +19,8 @@
 
 /*
  * $Author: amodigli $
- * $Date: 2012/09/18 06:53:36 $
- * $Revision: 1.9 $
+ * $Date: 2013/08/15 12:35:10 $
+ * $Revision: 1.12 $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -33,6 +33,7 @@
 #include <sinfo_atmo_disp.h>
 #include <sinfo_utils_wrappers.h>
 #include <sinfo_utilities.h>
+#include <sinfo_resampling.h>
 #include <sinfo_msg.h>
 
 const char* SINFO_STAR_BUG_REPORT = "amodigli at eso.org";
@@ -45,8 +46,7 @@ const char* COL_NAME_WAVELENGTH = "wavelength";
 const char* COL_NAME_ANGLE = "angle";
 const char* COL_NAME_OFFSET_X = "offset_x";
 const char* COL_NAME_OFFSET_Y = "offset_y";
-static void atmo_process_fits_data_file(cpl_table** ptable, const char* filename,
-		double general_lambda0);
+static void atmo_process_fits_data_file(cpl_table** ptable, const char* filename);
 static void atmo_save_gauss_info(cpl_table * ptable, cpl_imagelist* pCube);
 static cpl_error_code atmo_disp_load_params(		const char* fits_file,
 		int * centpix,
@@ -447,7 +447,7 @@ static void atmo_init_offset_table(cpl_table** big_table, int big_table_size)
 	cpl_table_new_column(*big_table, COL_NAME_OFFSET_X, CPL_TYPE_DOUBLE);
 	cpl_table_new_column(*big_table, COL_NAME_OFFSET_Y, CPL_TYPE_DOUBLE);
 }
-static void atmo_process_fits_data_file(cpl_table** ptable, const char* filename, double general_lambda0)
+static void atmo_process_fits_data_file(cpl_table** ptable, const char* filename)
 {
 	cpl_error_code err = CPL_ERROR_NONE;
 	// open the file
@@ -618,7 +618,7 @@ static void atmo_prepare_offset_table(const char* cfg_filename, const char* outp
 					lambda0 = atmo_get_general_lambda0(fitsfilename);
 				}
 				pptable = &(tables[next_table++]);
-				atmo_process_fits_data_file(pptable, fitsfilename, lambda0);
+				atmo_process_fits_data_file(pptable, fitsfilename);
 				if (*pptable)
 				{
 					big_table_size += cpl_table_get_nrow(*pptable);
@@ -764,7 +764,7 @@ static cpl_polynomial* atmo_prepare_polyfit(const char* input_filename)
 	cpl_matrix      * points = 0;
 	cpl_vector      * fitvals = 0;
 	cpl_error_code    err = CPL_ERROR_NONE;
-	int maxdeg2d = 3;
+	cpl_size maxdeg2d = 3;
 	cpl_table* ptable;
 
 	ptable = cpl_table_load(input_filename, 1,0);
@@ -897,7 +897,7 @@ static void atmo_get_poly_coeff(
 		cpl_polynomial* poly,
 		int dim ,
 		int degree,
-		int* exp,
+		cpl_size * exp,
 		int step,
 		cpl_table* ptable,
 		int* curr_row)
@@ -936,7 +936,7 @@ static void atmo_save_polynom(cpl_polynomial* poly,
 	cpl_table* ptable = 0;
 	int dim = 0;
 	int degree = 0;
-	int* exp = 0;
+	cpl_size* exp = 0;
 	int i = 0;
 	int curr_row = 0;
 	if (!poly)
@@ -974,8 +974,8 @@ static cpl_polynomial* atmo_load_polynom(const char* filename)
 	{
 		int dim = 0;
 		int nrows = 0;
-		int i = 0;
-		int* exp = 0;
+		//int i = 0;
+		cpl_size* exp = 0;
 
 		dim = cpl_table_get_ncol(ptable) - 1;
 		poly = cpl_polynomial_new(dim );

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/cpl-plugin-sinfo.git



More information about the debian-science-commits mailing list